Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Source Code
Overview
Max Total Supply
10,000 SKVLLZ
Holders
3,018
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 SKVLLZLoading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
Skvllpvnkz
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-09-09
*/
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and make it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// File: @openzeppelin/contracts/utils/Context.sol
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
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() {
_setOwner(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_setOwner(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");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overriden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
require(operator != _msgSender(), "ERC721: approve to caller");
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_safeTransfer(from, to, tokenId, _data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `_data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
require(_exists(tokenId), "ERC721: operator query for nonexistent token");
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File: @openzeppelin/contracts/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 tokenId);
/**
* @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/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/Strings.sol
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: contracts/skvllpvnkz.sol
pragma solidity ^0.8.0;
contract Skvllpvnkz is ERC721Enumerable, Ownable, ReentrancyGuard {
using Strings for uint256;
/* Events */
event SkvllpvnkzFreeMintStarted();
event SkvllpvnkzFreeMintPaused();
event SkvllpvnkzPublicSaleStarted();
event SkvllpvnkzPublicSalePaused();
event SkvllpvnkzPresaleStarted();
event SkvllpvnkzPresalePaused();
/* Supply Pools
** These are the total supply amounts for each pool.
** We have 3 supply pools:
** 1. Reserved giveaway pool for future giveaways
** 2. Reserved early free mint pool for previous collection owners
** 3. Public presale and open sale pool available to everyone */
uint256 private _maxSupply = 10000;
uint256 private _rsrvdGiveawaySupply = 100;
uint256 private _rsrvdEarlySupply = 356;
uint256 private _unrsrvdSupply = _maxSupply - _rsrvdGiveawaySupply - _rsrvdEarlySupply;
/* Token IDs
** Token ID ranges are reserved for the 3 different pools.
** _rsrvdGiveawayTID -> _rsrvdEarlyTID -> _tokenId */
uint256 private _rsrvdGiveawayTID = 0; // This is the starting ID
uint256 private _rsrvdEarlyTID = _rsrvdGiveawaySupply;
uint256 private _tokenId = _rsrvdGiveawaySupply + _rsrvdEarlySupply;
// The base URI for the token
string _baseTokenURI;
// The maximum mint batch size per transaction for the public sale
uint256 private _maxBatch = 10;
// The maximum mint batch size per transaction for the presale
uint256 private _maxBatchPresale = 2;
// The price per mint
uint256 private _price = 0.05 ether;
// Flag to start / pause public sale
bool public _publicSale = false;
// Flag to start / pause presale
bool public _presale = false;
// Flag to start / pause presale
bool public _ownerSale = false;
bool private _provenanceSet = false;
string private _contractURI = "http://api.skvllpvnkz.io/contract";
uint256 private _walletLimit = 200;
string public provenance = "";
/* Whitelists
** We have 2 separte whitelists:
** 2. Presale whitelist for Outcasts */
mapping(address => uint256) private _presaleList;
mapping(address => uint256) private _freeList;
// Withdraw addresses
address t1 = 0xAD5e57aCB70635671d6FEa67b08FB56f3eff596e;
address t2 = 0xE3f33298381C7694cf5e999B36fD513a0Ddec8ba;
address t3 = 0x58723Ef34C6F1197c30B35fC763365508d24b448;
address t4 = 0x46F231aD0279dA2d249D690Ab1e92F1B1f1F0158;
address t5 = 0xcdA2E4b965eCa883415107b624e971c4Cefc4D8C;
modifier notContract {
require( !_isContract( msg.sender ), "Cannot call this from a contract " );
_;
}
constructor() ERC721("Skvllpvnkz Hideout", "SKVLLZ") {}
/* Presale Mint
** Presale minting is available before the public sale to users
** on the presale whitelist. Wallets on the whitelist will be allowed
** to mint a maximum of 2 avatars */
function presaleRecruit(uint256 num) external payable nonReentrant notContract{
require( _presale, "Presale paused" );
require( _presaleList[msg.sender] > 0, "Not on the whitelist");
require( num <= _maxBatchPresale, "Exceeds the maximum amount" );
require( _presaleList[msg.sender] >= num, 'Purchase exceeds max allowed');
require( num <= remainingSupply(), "Exceeds reserved supply" );
require( msg.value >= _price * num, "Ether sent is not correct" );
_presaleList[msg.sender] -= num;
for(uint256 i; i < num; i++){
_tokenId ++;
_safeMint( msg.sender, _tokenId );
}
}
/* Standard Mint
** This is the standard mint function allowing a user to mint a
** maximum of 10 avatars. It mints the tokens from a pool of IDs
** starting after the initial reserved token pools */
function recruit(uint256 num) external payable nonReentrant notContract {
require( !_isContract( msg.sender ), "Cannot call this from a contract " );
require( _publicSale, "Sale paused" );
require( num <= _maxBatch, "Max 10 per TX" );
require( num <= remainingSupply(), "Exceeds maximum supply" );
require( balanceOf(msg.sender) + num <= _walletLimit, "Exceeds wallet limit");
require( msg.value >= _price * num, "Incorrect Ether sent" );
for( uint256 i; i < num; i++ ){
if (_tokenId <= _maxSupply) {
_tokenId ++;
_safeMint( msg.sender, _tokenId );
}
}
}
/* Giveaway Mint
** This is the standard mint function allowing a user to mint a
** maximum of 20 avatars. It mints the tokens from a pool of IDs
** starting after the initial reserved token pools */
function giveAway(address _to, uint256 _amount) external onlyOwner() {
require( _amount <= remainingGiveaways(), "Exceeds reserved supply" );
for(uint256 i; i < _amount; i++){
_rsrvdGiveawayTID ++;
_safeMint( _to, _rsrvdGiveawayTID);
}
}
function freeRecruit() external payable nonReentrant notContract {
require( _ownerSale, "Free mint is not on" );
require( _freeList[msg.sender] > 0, "Not on the whitelist");
require( _freeList[msg.sender] <= remainingEarlySupply(), "Exceeds reserved supply" );
uint256 mintCnt = _freeList[msg.sender];
_freeList[msg.sender] = 0;
for( uint256 i; i < mintCnt; i++ ){
_rsrvdEarlyTID ++;
_safeMint( msg.sender, _rsrvdEarlyTID );
}
}
function _isContract(address _addr) internal view returns (bool) {
uint32 _size;
assembly {
_size:= extcodesize(_addr)
}
return (_size > 0);
}
/* Remove wallet from the free mint whitelist */
function removeFromFreeList(address _address) external onlyOwner {
_freeList[_address] = 0;
}
/* Add wallet to the presale whitelist */
function addToFreeList(address[] calldata addresses, uint256[] calldata count) external onlyOwner{
for (uint256 i = 0; i < addresses.length; i++) {
_freeList[addresses[i]] = count[i];
}
}
/* Add wallet to the presale whitelist */
function addToPresaleList(address[] calldata addresses) external onlyOwner{
for (uint256 i = 0; i < addresses.length; i++) {
require(addresses[i] != address(0), "Can't add a null address");
_presaleList[addresses[i]] = _maxBatchPresale;
}
}
/* Remove wallet from the presale whitelist */
function removeFromPresaleList(address[] calldata addresses) external onlyOwner {
for (uint256 i = 0; i < addresses.length; i++) {
require(addresses[i] != address(0), "Can't remove a null address");
_presaleList[addresses[i]] = 0;
}
}
function onPresaleList(address addr) external view returns (uint256) {
return _presaleList[addr];
}
function onFreeList(address addr) external view returns (uint256) {
return _freeList[addr];
}
function walletOfOwner(address _owner) external view returns(uint256[] memory) {
uint256 tokenCount = balanceOf(_owner);
uint256[] memory tokensId = new uint256[](tokenCount);
for(uint256 i; i < tokenCount; i++){
tokensId[i] = tokenOfOwnerByIndex(_owner, i);
}
return tokensId;
}
function publicSale(bool val) external onlyOwner {
_publicSale = val;
if (val) {
_presale = false;
emit SkvllpvnkzPublicSaleStarted();
emit SkvllpvnkzPresalePaused();
} else {
emit SkvllpvnkzPublicSalePaused();
}
}
function freeMint(bool val) external onlyOwner {
_ownerSale = val;
if (val) {
emit SkvllpvnkzFreeMintStarted();
} else {
emit SkvllpvnkzFreeMintPaused();
}
}
function presale(bool val) external onlyOwner {
require(!_publicSale, "Can't have a presale during the public sale");
_presale = val;
if (val) {
emit SkvllpvnkzPresaleStarted();
} else {
emit SkvllpvnkzPresalePaused();
}
}
function setPrice(uint256 _newPrice) external onlyOwner() {
_price = _newPrice;
}
function _baseURI() internal view virtual override returns (string memory) {
return _baseTokenURI;
}
function setBaseURI(string memory baseURI) external onlyOwner {
_baseTokenURI = baseURI;
}
function setMaxBatch(uint256 maxBatch) external onlyOwner {
_maxBatch = maxBatch;
}
function getMaxBatch() external view returns (uint256) {
return _maxBatch;
}
function getPrice() external view returns (uint256){
return _price;
}
function remainingTotalSupply() external view returns (uint256){
return _maxSupply - totalSupply();
}
function remainingSupply() public view returns (uint256) {
return _unrsrvdSupply + _rsrvdEarlySupply + _rsrvdGiveawaySupply - _tokenId;
}
function remainingGiveaways() public view returns (uint256){
return _rsrvdGiveawaySupply - _rsrvdGiveawayTID;
}
function remainingEarlySupply() public view returns (uint256){
return _rsrvdEarlySupply + _rsrvdGiveawaySupply - _rsrvdEarlyTID;
}
function maxSupply() external view returns (uint256){
return _maxSupply;
}
function withdraw(uint256 amount) external payable onlyOwner {
require(payable(msg.sender).send(amount));
}
function withdrawAll() external payable onlyOwner {
uint256 _each = address(this).balance / 100;
require(payable(t1).send( _each * 31 )); // TM1
require(payable(t2).send( _each * 21 )); // TM2
require(payable(t3).send( _each * 21 )); // TM3
require(payable(t4).send( _each * 21 )); // TM4
require(payable(t5).send( _each * 6 )); // Comm
}
function setWalletLimit(uint256 limit) external onlyOwner {
_walletLimit = limit;
}
function setContractURI(string memory uri) external onlyOwner {
_contractURI = uri;
}
function contractURI() external view returns (string memory) {
return _contractURI;
}
function setProvenance(string memory _provenance) external onlyOwner {
require(!_provenanceSet, "Provenance has been set already");
provenance = _provenance;
_provenanceSet = true;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"SkvllpvnkzFreeMintPaused","type":"event"},{"anonymous":false,"inputs":[],"name":"SkvllpvnkzFreeMintStarted","type":"event"},{"anonymous":false,"inputs":[],"name":"SkvllpvnkzPresalePaused","type":"event"},{"anonymous":false,"inputs":[],"name":"SkvllpvnkzPresaleStarted","type":"event"},{"anonymous":false,"inputs":[],"name":"SkvllpvnkzPublicSalePaused","type":"event"},{"anonymous":false,"inputs":[],"name":"SkvllpvnkzPublicSaleStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_ownerSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"count","type":"uint256[]"}],"name":"addToFreeList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToPresaleList","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":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeRecruit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"onFreeList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"onPresaleList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"presale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"presaleRecruit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"provenance","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"publicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"recruit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"remainingEarlySupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingGiveaways","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeFromFreeList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeFromPresaleList","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBatch","type":"uint256"}],"name":"setMaxBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_provenance","type":"string"}],"name":"setProvenance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setWalletLimit","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]Contract Creation Code
6080604052612710600c556064600d55610164600e55600e54600d54600c546200002a91906200032c565b6200003691906200032c565b600f556000601055600d546011819055600e54620000549162000311565b601255600a601455600260155566b1a2bc2ec500006016556017805463ffffffff19169055604080516060810190915260218082526200386a60208301398051620000a8916018916020909101906200026b565b5060c8601955604080516020810191829052600090819052620000ce91601a916200026b565b50601d80546001600160a01b031990811673ad5e57acb70635671d6fea67b08fb56f3eff596e17909155601e8054821673e3f33298381c7694cf5e999b36fd513a0ddec8ba179055601f805482167358723ef34c6f1197c30b35fc763365508d24b4481790556020805482167346f231ad0279da2d249d690ab1e92f1b1f1f01581790556021805490911673cda2e4b965eca883415107b624e971c4cefc4d8c1790553480156200017e57600080fd5b50604080518082018252601281527114dadd9b1b1c1d9b9ade88121a59195bdd5d60721b60208083019182528351808501909452600684526529a5ab26262d60d11b908401528151919291620001d7916000916200026b565b508051620001ed9060019060208401906200026b565b5050506200020a620002046200021560201b60201c565b62000219565b6001600b5562000399565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620002799062000346565b90600052602060002090601f0160209004810192826200029d5760008555620002e8565b82601f10620002b857805160ff1916838001178555620002e8565b82800160010185558215620002e8579182015b82811115620002e8578251825591602001919060010190620002cb565b50620002f6929150620002fa565b5090565b5b80821115620002f65760008155600101620002fb565b6000821982111562000327576200032762000383565b500190565b60008282101562000341576200034162000383565b500390565b600181811c908216806200035b57607f821691505b602082108114156200037d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6134c180620003a96000396000f3fe60806040526004361061031a5760003560e01c8063715018a6116101ab578063bec32851116100f7578063e360337011610095578063edc2fcfb1161006f578063edc2fcfb146108f8578063f1d5f51714610918578063f2fde38b14610938578063ffe630b51461095857600080fd5b8063e36033701461087a578063e8a3d4851461089a578063e985e9c5146108af57600080fd5b8063caab9182116100d1578063caab918214610811578063d5abeb0114610831578063da0239a614610846578063e2a71ef81461085b57600080fd5b8063bec32851146107bc578063c87b56dd146107d1578063ca800144146107f157600080fd5b806391b7f5ed1161016457806398d5fdca1161013e57806398d5fdca14610747578063a22cb4651461075c578063b179e0601461077c578063b88d4fde1461079c57600080fd5b806391b7f5ed146106f2578063938e3d7b1461071257806395d89b411461073257600080fd5b8063715018a6146106645780637204a3c914610679578063853828b61461069957806385d359d1146106a15780638c74ddda146106b45780638da5cb5b146106d457600080fd5b806334026e391161026a578063568fb73c116102235780636352211e116101fd5780636352211e146105ea5780636956ba191461060a5780636ab195091461062457806370a082311461064457600080fd5b8063568fb73c1461058a5780635bf677311461059f57806360954ac1146105b457600080fd5b806334026e39146104d5578063403fe4c8146104f557806342842e0e146104fd578063438b63001461051d5780634f6ccce71461054a57806355f804b31461056a57600080fd5b80631d2578ba116102d757806323b872dd116102b157806323b872dd146104625780632e1a7d4d146104825780632f745c5914610495578063300b23d8146104b557600080fd5b80631d2578ba146104045780631db958ca1461043a5780631e73ff4f1461044f57600080fd5b806301ffc9a71461031f57806306fdde0314610354578063081812fc14610376578063095ea7b3146103ae5780630f7309e8146103d057806318160ddd146103e5575b600080fd5b34801561032b57600080fd5b5061033f61033a366004612ffd565b610978565b60405190151581526020015b60405180910390f35b34801561036057600080fd5b506103696109a3565b60405161034b9190613175565b34801561038257600080fd5b50610396610391366004613080565b610a35565b6040516001600160a01b03909116815260200161034b565b3480156103ba57600080fd5b506103ce6103c9366004612f0a565b610acf565b005b3480156103dc57600080fd5b50610369610be5565b3480156103f157600080fd5b506008545b60405190815260200161034b565b34801561041057600080fd5b506103f661041f366004612dda565b6001600160a01b03166000908152601c602052604090205490565b34801561044657600080fd5b506103f6610c73565b6103ce61045d366004613080565b610c97565b34801561046e57600080fd5b506103ce61047d366004612e28565b610edd565b6103ce610490366004613080565b610f0e565b3480156104a157600080fd5b506103f66104b0366004612f0a565b610f60565b3480156104c157600080fd5b506103ce6104d0366004613080565b610ff6565b3480156104e157600080fd5b506103ce6104f0366004612fe2565b611025565b6103ce6110c7565b34801561050957600080fd5b506103ce610518366004612e28565b61123d565b34801561052957600080fd5b5061053d610538366004612dda565b611258565b60405161034b9190613131565b34801561055657600080fd5b506103f6610565366004613080565b6112fa565b34801561057657600080fd5b506103ce610585366004613037565b61138d565b34801561059657600080fd5b506103f66113ce565b3480156105ab57600080fd5b506103f66113e0565b3480156105c057600080fd5b506103f66105cf366004612dda565b6001600160a01b03166000908152601b602052604090205490565b3480156105f657600080fd5b50610396610605366004613080565b6113f8565b34801561061657600080fd5b5060175461033f9060ff1681565b34801561063057600080fd5b506103ce61063f366004612dda565b61146f565b34801561065057600080fd5b506103f661065f366004612dda565b6114b3565b34801561067057600080fd5b506103ce61153a565b34801561068557600080fd5b506103ce610694366004612f34565b611570565b6103ce61167f565b6103ce6106af366004613080565b6117db565b3480156106c057600080fd5b5060175461033f9062010000900460ff1681565b3480156106e057600080fd5b50600a546001600160a01b0316610396565b3480156106fe57600080fd5b506103ce61070d366004613080565b611a5b565b34801561071e57600080fd5b506103ce61072d366004613037565b611a8a565b34801561073e57600080fd5b50610369611ac7565b34801561075357600080fd5b506016546103f6565b34801561076857600080fd5b506103ce610777366004612ee0565b611ad6565b34801561078857600080fd5b506103ce610797366004612f34565b611b9b565b3480156107a857600080fd5b506103ce6107b7366004612e64565b611ca9565b3480156107c857600080fd5b506014546103f6565b3480156107dd57600080fd5b506103696107ec366004613080565b611ce1565b3480156107fd57600080fd5b506103ce61080c366004612f0a565b611dbc565b34801561081d57600080fd5b506103ce61082c366004612fe2565b611e4b565b34801561083d57600080fd5b50600c546103f6565b34801561085257600080fd5b506103f6611f18565b34801561086757600080fd5b5060175461033f90610100900460ff1681565b34801561088657600080fd5b506103ce610895366004612f76565b611f3a565b3480156108a657600080fd5b50610369611fe6565b3480156108bb57600080fd5b5061033f6108ca366004612df5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561090457600080fd5b506103ce610913366004612fe2565b611ff5565b34801561092457600080fd5b506103ce610933366004613080565b6120fc565b34801561094457600080fd5b506103ce610953366004612dda565b61212b565b34801561096457600080fd5b506103ce610973366004613037565b6121c3565b60006001600160e01b0319821663780e9d6360e01b148061099d575061099d82612271565b92915050565b6060600080546109b29061339d565b80601f01602080910402602001604051908101604052809291908181526020018280546109de9061339d565b8015610a2b5780601f10610a0057610100808354040283529160200191610a2b565b820191906000526020600020905b815481529060010190602001808311610a0e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610ab35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610ada826113f8565b9050806001600160a01b0316836001600160a01b03161415610b485760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610aaa565b336001600160a01b0382161480610b645750610b6481336108ca565b610bd65760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610aaa565b610be083836122c1565b505050565b601a8054610bf29061339d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1e9061339d565b8015610c6b5780601f10610c4057610100808354040283529160200191610c6b565b820191906000526020600020905b815481529060010190602001808311610c4e57829003601f168201915b505050505081565b6000601154600d54600e54610c88919061330f565b610c92919061335a565b905090565b6002600b541415610cba5760405162461bcd60e51b8152600401610aaa906132d8565b6002600b55333b63ffffffff1615610ce45760405162461bcd60e51b8152600401610aaa906131da565b333b63ffffffff1615610d095760405162461bcd60e51b8152600401610aaa906131da565b60175460ff16610d495760405162461bcd60e51b815260206004820152600b60248201526a14d85b19481c185d5cd95960aa1b6044820152606401610aaa565b601454811115610d8b5760405162461bcd60e51b815260206004820152600d60248201526c09ac2f040626040e0cae440a8b609b1b6044820152606401610aaa565b610d93611f18565b811115610ddb5760405162461bcd60e51b815260206004820152601660248201527545786365656473206d6178696d756d20737570706c7960501b6044820152606401610aaa565b60195481610de8336114b3565b610df2919061330f565b1115610e375760405162461bcd60e51b8152602060048201526014602482015273115e18d959591cc81dd85b1b195d081b1a5b5a5d60621b6044820152606401610aaa565b80601654610e45919061333b565b341015610e8b5760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd08115d1a195c881cd95b9d60621b6044820152606401610aaa565b60005b81811015610ed457600c5460125411610ec25760128054906000610eb1836133d8565b9190505550610ec23360125461232f565b80610ecc816133d8565b915050610e8e565b50506001600b55565b610ee73382612349565b610f035760405162461bcd60e51b8152600401610aaa90613287565b610be0838383612440565b600a546001600160a01b03163314610f385760405162461bcd60e51b8152600401610aaa90613252565b604051339082156108fc029083906000818181858888f19350505050610f5d57600080fd5b50565b6000610f6b836114b3565b8210610fcd5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610aaa565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146110205760405162461bcd60e51b8152600401610aaa90613252565b601455565b600a546001600160a01b0316331461104f5760405162461bcd60e51b8152600401610aaa90613252565b6017805482158015620100000262ff0000199092169190911790915561109b576040517f347cb692cd2bd01661be6b0a3821ae56341003757b026edcc4be761b7d1674ca90600090a150565b6040517fcced91af235ba65a0f6dc0058e435cf88fc90204e88152a687a781df3334309090600090a150565b6002600b5414156110ea5760405162461bcd60e51b8152600401610aaa906132d8565b6002600b55333b63ffffffff16156111145760405162461bcd60e51b8152600401610aaa906131da565b60175462010000900460ff166111625760405162461bcd60e51b8152602060048201526013602482015272233932b29036b4b73a1034b9903737ba1037b760691b6044820152606401610aaa565b336000908152601c60205260409020546111b55760405162461bcd60e51b8152602060048201526014602482015273139bdd081bdb881d1a19481dda1a5d195b1a5cdd60621b6044820152606401610aaa565b6111bd610c73565b336000908152601c602052604090205411156111eb5760405162461bcd60e51b8152600401610aaa9061321b565b336000908152601c60205260408120805490829055905b81811015610ed4576011805490600061121a836133d8565b919050555061122b3360115461232f565b80611235816133d8565b915050611202565b610be083838360405180602001604052806000815250611ca9565b60606000611265836114b3565b905060008167ffffffffffffffff8111156112825761128261345f565b6040519080825280602002602001820160405280156112ab578160200160208202803683370190505b50905060005b828110156112f2576112c38582610f60565b8282815181106112d5576112d5613449565b6020908102919091010152806112ea816133d8565b9150506112b1565b509392505050565b600061130560085490565b82106113685760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610aaa565b6008828154811061137b5761137b613449565b90600052602060002001549050919050565b600a546001600160a01b031633146113b75760405162461bcd60e51b8152600401610aaa90613252565b80516113ca906013906020840190612c53565b5050565b6000601054600d54610c92919061335a565b60006113eb60085490565b600c54610c92919061335a565b6000818152600260205260408120546001600160a01b03168061099d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610aaa565b600a546001600160a01b031633146114995760405162461bcd60e51b8152600401610aaa90613252565b6001600160a01b03166000908152601c6020526040812055565b60006001600160a01b03821661151e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610aaa565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146115645760405162461bcd60e51b8152600401610aaa90613252565b61156e60006125eb565b565b600a546001600160a01b0316331461159a5760405162461bcd60e51b8152600401610aaa90613252565b60005b81811015610be05760008383838181106115b9576115b9613449565b90506020020160208101906115ce9190612dda565b6001600160a01b031614156116255760405162461bcd60e51b815260206004820152601860248201527f43616e2774206164642061206e756c6c206164647265737300000000000000006044820152606401610aaa565b601554601b600085858581811061163e5761163e613449565b90506020020160208101906116539190612dda565b6001600160a01b0316815260208101919091526040016000205580611677816133d8565b91505061159d565b600a546001600160a01b031633146116a95760405162461bcd60e51b8152600401610aaa90613252565b60006116b6606447613327565b601d549091506001600160a01b03166108fc6116d383601f61333b565b6040518115909202916000818181858888f193505050506116f357600080fd5b601e546001600160a01b03166108fc61170d83601561333b565b6040518115909202916000818181858888f1935050505061172d57600080fd5b601f546001600160a01b03166108fc61174783601561333b565b6040518115909202916000818181858888f1935050505061176757600080fd5b6020546001600160a01b03166108fc61178183601561333b565b6040518115909202916000818181858888f193505050506117a157600080fd5b6021546001600160a01b03166108fc6117bb83600661333b565b6040518115909202916000818181858888f19350505050610f5d57600080fd5b6002600b5414156117fe5760405162461bcd60e51b8152600401610aaa906132d8565b6002600b55333b63ffffffff16156118285760405162461bcd60e51b8152600401610aaa906131da565b601754610100900460ff166118705760405162461bcd60e51b815260206004820152600e60248201526d141c995cd85b19481c185d5cd95960921b6044820152606401610aaa565b336000908152601b60205260409020546118c35760405162461bcd60e51b8152602060048201526014602482015273139bdd081bdb881d1a19481dda1a5d195b1a5cdd60621b6044820152606401610aaa565b6015548111156119155760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d6178696d756d20616d6f756e740000000000006044820152606401610aaa565b336000908152601b60205260409020548111156119745760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610aaa565b61197c611f18565b81111561199b5760405162461bcd60e51b8152600401610aaa9061321b565b806016546119a9919061333b565b3410156119f85760405162461bcd60e51b815260206004820152601960248201527f45746865722073656e74206973206e6f7420636f7272656374000000000000006044820152606401610aaa565b336000908152601b602052604081208054839290611a1790849061335a565b90915550600090505b81811015610ed45760128054906000611a38836133d8565b9190505550611a493360125461232f565b80611a53816133d8565b915050611a20565b600a546001600160a01b03163314611a855760405162461bcd60e51b8152600401610aaa90613252565b601655565b600a546001600160a01b03163314611ab45760405162461bcd60e51b8152600401610aaa90613252565b80516113ca906018906020840190612c53565b6060600180546109b29061339d565b6001600160a01b038216331415611b2f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610aaa565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b03163314611bc55760405162461bcd60e51b8152600401610aaa90613252565b60005b81811015610be0576000838383818110611be457611be4613449565b9050602002016020810190611bf99190612dda565b6001600160a01b03161415611c505760405162461bcd60e51b815260206004820152601b60248201527f43616e27742072656d6f76652061206e756c6c206164647265737300000000006044820152606401610aaa565b6000601b6000858585818110611c6857611c68613449565b9050602002016020810190611c7d9190612dda565b6001600160a01b0316815260208101919091526040016000205580611ca1816133d8565b915050611bc8565b611cb33383612349565b611ccf5760405162461bcd60e51b8152600401610aaa90613287565b611cdb8484848461263d565b50505050565b6000818152600260205260409020546060906001600160a01b0316611d605760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610aaa565b6000611d6a612670565b90506000815111611d8a5760405180602001604052806000815250611db5565b80611d948461267f565b604051602001611da59291906130c5565b6040516020818303038152906040525b9392505050565b600a546001600160a01b03163314611de65760405162461bcd60e51b8152600401610aaa90613252565b611dee6113ce565b811115611e0d5760405162461bcd60e51b8152600401610aaa9061321b565b60005b81811015610be05760108054906000611e28836133d8565b9190505550611e398360105461232f565b80611e43816133d8565b915050611e10565b600a546001600160a01b03163314611e755760405162461bcd60e51b8152600401610aaa90613252565b6017805460ff19168215801591909117909155611eec576017805461ff00191690556040517f155e05ce97ed9856266a30fd49483a8c09210ef32e8fc0803e5b7b6284479ee590600090a16040517fc14896c7ad11b5bde06d750f2d557e80c373b9316344a59eb837cbad9bd41fbb90600090a150565b6040517f677263a54647cf15fa59b77113e6cc8b9e9a75e72e3e08a975174dfc4b4d096990600090a150565b6000601254600d54600e54600f54611f30919061330f565b610c88919061330f565b600a546001600160a01b03163314611f645760405162461bcd60e51b8152600401610aaa90613252565b60005b83811015611fdf57828282818110611f8157611f81613449565b90506020020135601c6000878785818110611f9e57611f9e613449565b9050602002016020810190611fb39190612dda565b6001600160a01b0316815260208101919091526040016000205580611fd7816133d8565b915050611f67565b5050505050565b6060601880546109b29061339d565b600a546001600160a01b0316331461201f5760405162461bcd60e51b8152600401610aaa90613252565b60175460ff16156120865760405162461bcd60e51b815260206004820152602b60248201527f43616e2774206861766520612070726573616c6520647572696e67207468652060448201526a7075626c69632073616c6560a81b6064820152608401610aaa565b60178054821580156101000261ff0019909216919091179091556120d0576040517ffa77bc7c59e4d3e1e0ce1943cd4019f061b20628d8d0675d647d5dcf5b033db890600090a150565b6040517fc14896c7ad11b5bde06d750f2d557e80c373b9316344a59eb837cbad9bd41fbb90600090a150565b600a546001600160a01b031633146121265760405162461bcd60e51b8152600401610aaa90613252565b601955565b600a546001600160a01b031633146121555760405162461bcd60e51b8152600401610aaa90613252565b6001600160a01b0381166121ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aaa565b610f5d816125eb565b600a546001600160a01b031633146121ed5760405162461bcd60e51b8152600401610aaa90613252565b6017546301000000900460ff16156122475760405162461bcd60e51b815260206004820152601f60248201527f50726f76656e616e636520686173206265656e2073657420616c7265616479006044820152606401610aaa565b805161225a90601a906020840190612c53565b50506017805463ff00000019166301000000179055565b60006001600160e01b031982166380ac58cd60e01b14806122a257506001600160e01b03198216635b5e139f60e01b145b8061099d57506301ffc9a760e01b6001600160e01b031983161461099d565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906122f6826113f8565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6113ca82826040518060200160405280600081525061277d565b6000818152600260205260408120546001600160a01b03166123c25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aaa565b60006123cd836113f8565b9050806001600160a01b0316846001600160a01b031614806124085750836001600160a01b03166123fd84610a35565b6001600160a01b0316145b8061243857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316612453826113f8565b6001600160a01b0316146124bb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610aaa565b6001600160a01b03821661251d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610aaa565b6125288383836127b0565b6125336000826122c1565b6001600160a01b038316600090815260036020526040812080546001929061255c90849061335a565b90915550506001600160a01b038216600090815260036020526040812080546001929061258a90849061330f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612648848484612440565b61265484848484612868565b611cdb5760405162461bcd60e51b8152600401610aaa90613188565b6060601380546109b29061339d565b6060816126a35750506040805180820190915260018152600360fc1b602082015290565b8160005b81156126cd57806126b7816133d8565b91506126c69050600a83613327565b91506126a7565b60008167ffffffffffffffff8111156126e8576126e861345f565b6040519080825280601f01601f191660200182016040528015612712576020820181803683370190505b5090505b84156124385761272760018361335a565b9150612734600a866133f3565b61273f90603061330f565b60f81b81838151811061275457612754613449565b60200101906001600160f81b031916908160001a905350612776600a86613327565b9450612716565b6127878383612975565b6127946000848484612868565b610be05760405162461bcd60e51b8152600401610aaa90613188565b6001600160a01b03831661280b5761280681600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61282e565b816001600160a01b0316836001600160a01b03161461282e5761282e8382612ac3565b6001600160a01b03821661284557610be081612b60565b826001600160a01b0316826001600160a01b031614610be057610be08282612c0f565b60006001600160a01b0384163b1561296a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906128ac9033908990889088906004016130f4565b602060405180830381600087803b1580156128c657600080fd5b505af19250505080156128f6575060408051601f3d908101601f191682019092526128f39181019061301a565b60015b612950573d808015612924576040519150601f19603f3d011682016040523d82523d6000602084013e612929565b606091505b5080516129485760405162461bcd60e51b8152600401610aaa90613188565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612438565b506001949350505050565b6001600160a01b0382166129cb5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610aaa565b6000818152600260205260409020546001600160a01b031615612a305760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610aaa565b612a3c600083836127b0565b6001600160a01b0382166000908152600360205260408120805460019290612a6590849061330f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001612ad0846114b3565b612ada919061335a565b600083815260076020526040902054909150808214612b2d576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612b729060019061335a565b60008381526009602052604081205460088054939450909284908110612b9a57612b9a613449565b906000526020600020015490508060088381548110612bbb57612bbb613449565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612bf357612bf3613433565b6001900381819060005260206000200160009055905550505050565b6000612c1a836114b3565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612c5f9061339d565b90600052602060002090601f016020900481019282612c815760008555612cc7565b82601f10612c9a57805160ff1916838001178555612cc7565b82800160010185558215612cc7579182015b82811115612cc7578251825591602001919060010190612cac565b50612cd3929150612cd7565b5090565b5b80821115612cd35760008155600101612cd8565b600067ffffffffffffffff80841115612d0757612d0761345f565b604051601f8501601f19908116603f01168101908282118183101715612d2f57612d2f61345f565b81604052809350858152868686011115612d4857600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612d7957600080fd5b919050565b60008083601f840112612d9057600080fd5b50813567ffffffffffffffff811115612da857600080fd5b6020830191508360208260051b8501011115612dc357600080fd5b9250929050565b80358015158114612d7957600080fd5b600060208284031215612dec57600080fd5b611db582612d62565b60008060408385031215612e0857600080fd5b612e1183612d62565b9150612e1f60208401612d62565b90509250929050565b600080600060608486031215612e3d57600080fd5b612e4684612d62565b9250612e5460208501612d62565b9150604084013590509250925092565b60008060008060808587031215612e7a57600080fd5b612e8385612d62565b9350612e9160208601612d62565b925060408501359150606085013567ffffffffffffffff811115612eb457600080fd5b8501601f81018713612ec557600080fd5b612ed487823560208401612cec565b91505092959194509250565b60008060408385031215612ef357600080fd5b612efc83612d62565b9150612e1f60208401612dca565b60008060408385031215612f1d57600080fd5b612f2683612d62565b946020939093013593505050565b60008060208385031215612f4757600080fd5b823567ffffffffffffffff811115612f5e57600080fd5b612f6a85828601612d7e565b90969095509350505050565b60008060008060408587031215612f8c57600080fd5b843567ffffffffffffffff80821115612fa457600080fd5b612fb088838901612d7e565b90965094506020870135915080821115612fc957600080fd5b50612fd687828801612d7e565b95989497509550505050565b600060208284031215612ff457600080fd5b611db582612dca565b60006020828403121561300f57600080fd5b8135611db581613475565b60006020828403121561302c57600080fd5b8151611db581613475565b60006020828403121561304957600080fd5b813567ffffffffffffffff81111561306057600080fd5b8201601f8101841361307157600080fd5b61243884823560208401612cec565b60006020828403121561309257600080fd5b5035919050565b600081518084526130b1816020860160208601613371565b601f01601f19169290920160200192915050565b600083516130d7818460208801613371565b8351908301906130eb818360208801613371565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061312790830184613099565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156131695783518352928401929184019160010161314d565b50909695505050505050565b602081526000611db56020830184613099565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526021908201527f43616e6e6f742063616c6c20746869732066726f6d206120636f6e74726163746040820152600160fd1b606082015260800190565b60208082526017908201527f4578636565647320726573657276656420737570706c79000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000821982111561332257613322613407565b500190565b6000826133365761333661341d565b500490565b600081600019048311821515161561335557613355613407565b500290565b60008282101561336c5761336c613407565b500390565b60005b8381101561338c578181015183820152602001613374565b83811115611cdb5750506000910152565b600181811c908216806133b157607f821691505b602082108114156133d257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156133ec576133ec613407565b5060010190565b6000826134025761340261341d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610f5d57600080fdfea2646970667358221220e10c6b4f9a84b570bc05c82772888af5db173361156910eadd4d6478a7be86d964736f6c63430008070033687474703a2f2f6170692e736b766c6c70766e6b7a2e696f2f636f6e7472616374
Deployed Bytecode
0x60806040526004361061031a5760003560e01c8063715018a6116101ab578063bec32851116100f7578063e360337011610095578063edc2fcfb1161006f578063edc2fcfb146108f8578063f1d5f51714610918578063f2fde38b14610938578063ffe630b51461095857600080fd5b8063e36033701461087a578063e8a3d4851461089a578063e985e9c5146108af57600080fd5b8063caab9182116100d1578063caab918214610811578063d5abeb0114610831578063da0239a614610846578063e2a71ef81461085b57600080fd5b8063bec32851146107bc578063c87b56dd146107d1578063ca800144146107f157600080fd5b806391b7f5ed1161016457806398d5fdca1161013e57806398d5fdca14610747578063a22cb4651461075c578063b179e0601461077c578063b88d4fde1461079c57600080fd5b806391b7f5ed146106f2578063938e3d7b1461071257806395d89b411461073257600080fd5b8063715018a6146106645780637204a3c914610679578063853828b61461069957806385d359d1146106a15780638c74ddda146106b45780638da5cb5b146106d457600080fd5b806334026e391161026a578063568fb73c116102235780636352211e116101fd5780636352211e146105ea5780636956ba191461060a5780636ab195091461062457806370a082311461064457600080fd5b8063568fb73c1461058a5780635bf677311461059f57806360954ac1146105b457600080fd5b806334026e39146104d5578063403fe4c8146104f557806342842e0e146104fd578063438b63001461051d5780634f6ccce71461054a57806355f804b31461056a57600080fd5b80631d2578ba116102d757806323b872dd116102b157806323b872dd146104625780632e1a7d4d146104825780632f745c5914610495578063300b23d8146104b557600080fd5b80631d2578ba146104045780631db958ca1461043a5780631e73ff4f1461044f57600080fd5b806301ffc9a71461031f57806306fdde0314610354578063081812fc14610376578063095ea7b3146103ae5780630f7309e8146103d057806318160ddd146103e5575b600080fd5b34801561032b57600080fd5b5061033f61033a366004612ffd565b610978565b60405190151581526020015b60405180910390f35b34801561036057600080fd5b506103696109a3565b60405161034b9190613175565b34801561038257600080fd5b50610396610391366004613080565b610a35565b6040516001600160a01b03909116815260200161034b565b3480156103ba57600080fd5b506103ce6103c9366004612f0a565b610acf565b005b3480156103dc57600080fd5b50610369610be5565b3480156103f157600080fd5b506008545b60405190815260200161034b565b34801561041057600080fd5b506103f661041f366004612dda565b6001600160a01b03166000908152601c602052604090205490565b34801561044657600080fd5b506103f6610c73565b6103ce61045d366004613080565b610c97565b34801561046e57600080fd5b506103ce61047d366004612e28565b610edd565b6103ce610490366004613080565b610f0e565b3480156104a157600080fd5b506103f66104b0366004612f0a565b610f60565b3480156104c157600080fd5b506103ce6104d0366004613080565b610ff6565b3480156104e157600080fd5b506103ce6104f0366004612fe2565b611025565b6103ce6110c7565b34801561050957600080fd5b506103ce610518366004612e28565b61123d565b34801561052957600080fd5b5061053d610538366004612dda565b611258565b60405161034b9190613131565b34801561055657600080fd5b506103f6610565366004613080565b6112fa565b34801561057657600080fd5b506103ce610585366004613037565b61138d565b34801561059657600080fd5b506103f66113ce565b3480156105ab57600080fd5b506103f66113e0565b3480156105c057600080fd5b506103f66105cf366004612dda565b6001600160a01b03166000908152601b602052604090205490565b3480156105f657600080fd5b50610396610605366004613080565b6113f8565b34801561061657600080fd5b5060175461033f9060ff1681565b34801561063057600080fd5b506103ce61063f366004612dda565b61146f565b34801561065057600080fd5b506103f661065f366004612dda565b6114b3565b34801561067057600080fd5b506103ce61153a565b34801561068557600080fd5b506103ce610694366004612f34565b611570565b6103ce61167f565b6103ce6106af366004613080565b6117db565b3480156106c057600080fd5b5060175461033f9062010000900460ff1681565b3480156106e057600080fd5b50600a546001600160a01b0316610396565b3480156106fe57600080fd5b506103ce61070d366004613080565b611a5b565b34801561071e57600080fd5b506103ce61072d366004613037565b611a8a565b34801561073e57600080fd5b50610369611ac7565b34801561075357600080fd5b506016546103f6565b34801561076857600080fd5b506103ce610777366004612ee0565b611ad6565b34801561078857600080fd5b506103ce610797366004612f34565b611b9b565b3480156107a857600080fd5b506103ce6107b7366004612e64565b611ca9565b3480156107c857600080fd5b506014546103f6565b3480156107dd57600080fd5b506103696107ec366004613080565b611ce1565b3480156107fd57600080fd5b506103ce61080c366004612f0a565b611dbc565b34801561081d57600080fd5b506103ce61082c366004612fe2565b611e4b565b34801561083d57600080fd5b50600c546103f6565b34801561085257600080fd5b506103f6611f18565b34801561086757600080fd5b5060175461033f90610100900460ff1681565b34801561088657600080fd5b506103ce610895366004612f76565b611f3a565b3480156108a657600080fd5b50610369611fe6565b3480156108bb57600080fd5b5061033f6108ca366004612df5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561090457600080fd5b506103ce610913366004612fe2565b611ff5565b34801561092457600080fd5b506103ce610933366004613080565b6120fc565b34801561094457600080fd5b506103ce610953366004612dda565b61212b565b34801561096457600080fd5b506103ce610973366004613037565b6121c3565b60006001600160e01b0319821663780e9d6360e01b148061099d575061099d82612271565b92915050565b6060600080546109b29061339d565b80601f01602080910402602001604051908101604052809291908181526020018280546109de9061339d565b8015610a2b5780601f10610a0057610100808354040283529160200191610a2b565b820191906000526020600020905b815481529060010190602001808311610a0e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610ab35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610ada826113f8565b9050806001600160a01b0316836001600160a01b03161415610b485760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610aaa565b336001600160a01b0382161480610b645750610b6481336108ca565b610bd65760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610aaa565b610be083836122c1565b505050565b601a8054610bf29061339d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1e9061339d565b8015610c6b5780601f10610c4057610100808354040283529160200191610c6b565b820191906000526020600020905b815481529060010190602001808311610c4e57829003601f168201915b505050505081565b6000601154600d54600e54610c88919061330f565b610c92919061335a565b905090565b6002600b541415610cba5760405162461bcd60e51b8152600401610aaa906132d8565b6002600b55333b63ffffffff1615610ce45760405162461bcd60e51b8152600401610aaa906131da565b333b63ffffffff1615610d095760405162461bcd60e51b8152600401610aaa906131da565b60175460ff16610d495760405162461bcd60e51b815260206004820152600b60248201526a14d85b19481c185d5cd95960aa1b6044820152606401610aaa565b601454811115610d8b5760405162461bcd60e51b815260206004820152600d60248201526c09ac2f040626040e0cae440a8b609b1b6044820152606401610aaa565b610d93611f18565b811115610ddb5760405162461bcd60e51b815260206004820152601660248201527545786365656473206d6178696d756d20737570706c7960501b6044820152606401610aaa565b60195481610de8336114b3565b610df2919061330f565b1115610e375760405162461bcd60e51b8152602060048201526014602482015273115e18d959591cc81dd85b1b195d081b1a5b5a5d60621b6044820152606401610aaa565b80601654610e45919061333b565b341015610e8b5760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd08115d1a195c881cd95b9d60621b6044820152606401610aaa565b60005b81811015610ed457600c5460125411610ec25760128054906000610eb1836133d8565b9190505550610ec23360125461232f565b80610ecc816133d8565b915050610e8e565b50506001600b55565b610ee73382612349565b610f035760405162461bcd60e51b8152600401610aaa90613287565b610be0838383612440565b600a546001600160a01b03163314610f385760405162461bcd60e51b8152600401610aaa90613252565b604051339082156108fc029083906000818181858888f19350505050610f5d57600080fd5b50565b6000610f6b836114b3565b8210610fcd5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610aaa565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146110205760405162461bcd60e51b8152600401610aaa90613252565b601455565b600a546001600160a01b0316331461104f5760405162461bcd60e51b8152600401610aaa90613252565b6017805482158015620100000262ff0000199092169190911790915561109b576040517f347cb692cd2bd01661be6b0a3821ae56341003757b026edcc4be761b7d1674ca90600090a150565b6040517fcced91af235ba65a0f6dc0058e435cf88fc90204e88152a687a781df3334309090600090a150565b6002600b5414156110ea5760405162461bcd60e51b8152600401610aaa906132d8565b6002600b55333b63ffffffff16156111145760405162461bcd60e51b8152600401610aaa906131da565b60175462010000900460ff166111625760405162461bcd60e51b8152602060048201526013602482015272233932b29036b4b73a1034b9903737ba1037b760691b6044820152606401610aaa565b336000908152601c60205260409020546111b55760405162461bcd60e51b8152602060048201526014602482015273139bdd081bdb881d1a19481dda1a5d195b1a5cdd60621b6044820152606401610aaa565b6111bd610c73565b336000908152601c602052604090205411156111eb5760405162461bcd60e51b8152600401610aaa9061321b565b336000908152601c60205260408120805490829055905b81811015610ed4576011805490600061121a836133d8565b919050555061122b3360115461232f565b80611235816133d8565b915050611202565b610be083838360405180602001604052806000815250611ca9565b60606000611265836114b3565b905060008167ffffffffffffffff8111156112825761128261345f565b6040519080825280602002602001820160405280156112ab578160200160208202803683370190505b50905060005b828110156112f2576112c38582610f60565b8282815181106112d5576112d5613449565b6020908102919091010152806112ea816133d8565b9150506112b1565b509392505050565b600061130560085490565b82106113685760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610aaa565b6008828154811061137b5761137b613449565b90600052602060002001549050919050565b600a546001600160a01b031633146113b75760405162461bcd60e51b8152600401610aaa90613252565b80516113ca906013906020840190612c53565b5050565b6000601054600d54610c92919061335a565b60006113eb60085490565b600c54610c92919061335a565b6000818152600260205260408120546001600160a01b03168061099d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610aaa565b600a546001600160a01b031633146114995760405162461bcd60e51b8152600401610aaa90613252565b6001600160a01b03166000908152601c6020526040812055565b60006001600160a01b03821661151e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610aaa565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146115645760405162461bcd60e51b8152600401610aaa90613252565b61156e60006125eb565b565b600a546001600160a01b0316331461159a5760405162461bcd60e51b8152600401610aaa90613252565b60005b81811015610be05760008383838181106115b9576115b9613449565b90506020020160208101906115ce9190612dda565b6001600160a01b031614156116255760405162461bcd60e51b815260206004820152601860248201527f43616e2774206164642061206e756c6c206164647265737300000000000000006044820152606401610aaa565b601554601b600085858581811061163e5761163e613449565b90506020020160208101906116539190612dda565b6001600160a01b0316815260208101919091526040016000205580611677816133d8565b91505061159d565b600a546001600160a01b031633146116a95760405162461bcd60e51b8152600401610aaa90613252565b60006116b6606447613327565b601d549091506001600160a01b03166108fc6116d383601f61333b565b6040518115909202916000818181858888f193505050506116f357600080fd5b601e546001600160a01b03166108fc61170d83601561333b565b6040518115909202916000818181858888f1935050505061172d57600080fd5b601f546001600160a01b03166108fc61174783601561333b565b6040518115909202916000818181858888f1935050505061176757600080fd5b6020546001600160a01b03166108fc61178183601561333b565b6040518115909202916000818181858888f193505050506117a157600080fd5b6021546001600160a01b03166108fc6117bb83600661333b565b6040518115909202916000818181858888f19350505050610f5d57600080fd5b6002600b5414156117fe5760405162461bcd60e51b8152600401610aaa906132d8565b6002600b55333b63ffffffff16156118285760405162461bcd60e51b8152600401610aaa906131da565b601754610100900460ff166118705760405162461bcd60e51b815260206004820152600e60248201526d141c995cd85b19481c185d5cd95960921b6044820152606401610aaa565b336000908152601b60205260409020546118c35760405162461bcd60e51b8152602060048201526014602482015273139bdd081bdb881d1a19481dda1a5d195b1a5cdd60621b6044820152606401610aaa565b6015548111156119155760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d6178696d756d20616d6f756e740000000000006044820152606401610aaa565b336000908152601b60205260409020548111156119745760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610aaa565b61197c611f18565b81111561199b5760405162461bcd60e51b8152600401610aaa9061321b565b806016546119a9919061333b565b3410156119f85760405162461bcd60e51b815260206004820152601960248201527f45746865722073656e74206973206e6f7420636f7272656374000000000000006044820152606401610aaa565b336000908152601b602052604081208054839290611a1790849061335a565b90915550600090505b81811015610ed45760128054906000611a38836133d8565b9190505550611a493360125461232f565b80611a53816133d8565b915050611a20565b600a546001600160a01b03163314611a855760405162461bcd60e51b8152600401610aaa90613252565b601655565b600a546001600160a01b03163314611ab45760405162461bcd60e51b8152600401610aaa90613252565b80516113ca906018906020840190612c53565b6060600180546109b29061339d565b6001600160a01b038216331415611b2f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610aaa565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b03163314611bc55760405162461bcd60e51b8152600401610aaa90613252565b60005b81811015610be0576000838383818110611be457611be4613449565b9050602002016020810190611bf99190612dda565b6001600160a01b03161415611c505760405162461bcd60e51b815260206004820152601b60248201527f43616e27742072656d6f76652061206e756c6c206164647265737300000000006044820152606401610aaa565b6000601b6000858585818110611c6857611c68613449565b9050602002016020810190611c7d9190612dda565b6001600160a01b0316815260208101919091526040016000205580611ca1816133d8565b915050611bc8565b611cb33383612349565b611ccf5760405162461bcd60e51b8152600401610aaa90613287565b611cdb8484848461263d565b50505050565b6000818152600260205260409020546060906001600160a01b0316611d605760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610aaa565b6000611d6a612670565b90506000815111611d8a5760405180602001604052806000815250611db5565b80611d948461267f565b604051602001611da59291906130c5565b6040516020818303038152906040525b9392505050565b600a546001600160a01b03163314611de65760405162461bcd60e51b8152600401610aaa90613252565b611dee6113ce565b811115611e0d5760405162461bcd60e51b8152600401610aaa9061321b565b60005b81811015610be05760108054906000611e28836133d8565b9190505550611e398360105461232f565b80611e43816133d8565b915050611e10565b600a546001600160a01b03163314611e755760405162461bcd60e51b8152600401610aaa90613252565b6017805460ff19168215801591909117909155611eec576017805461ff00191690556040517f155e05ce97ed9856266a30fd49483a8c09210ef32e8fc0803e5b7b6284479ee590600090a16040517fc14896c7ad11b5bde06d750f2d557e80c373b9316344a59eb837cbad9bd41fbb90600090a150565b6040517f677263a54647cf15fa59b77113e6cc8b9e9a75e72e3e08a975174dfc4b4d096990600090a150565b6000601254600d54600e54600f54611f30919061330f565b610c88919061330f565b600a546001600160a01b03163314611f645760405162461bcd60e51b8152600401610aaa90613252565b60005b83811015611fdf57828282818110611f8157611f81613449565b90506020020135601c6000878785818110611f9e57611f9e613449565b9050602002016020810190611fb39190612dda565b6001600160a01b0316815260208101919091526040016000205580611fd7816133d8565b915050611f67565b5050505050565b6060601880546109b29061339d565b600a546001600160a01b0316331461201f5760405162461bcd60e51b8152600401610aaa90613252565b60175460ff16156120865760405162461bcd60e51b815260206004820152602b60248201527f43616e2774206861766520612070726573616c6520647572696e67207468652060448201526a7075626c69632073616c6560a81b6064820152608401610aaa565b60178054821580156101000261ff0019909216919091179091556120d0576040517ffa77bc7c59e4d3e1e0ce1943cd4019f061b20628d8d0675d647d5dcf5b033db890600090a150565b6040517fc14896c7ad11b5bde06d750f2d557e80c373b9316344a59eb837cbad9bd41fbb90600090a150565b600a546001600160a01b031633146121265760405162461bcd60e51b8152600401610aaa90613252565b601955565b600a546001600160a01b031633146121555760405162461bcd60e51b8152600401610aaa90613252565b6001600160a01b0381166121ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aaa565b610f5d816125eb565b600a546001600160a01b031633146121ed5760405162461bcd60e51b8152600401610aaa90613252565b6017546301000000900460ff16156122475760405162461bcd60e51b815260206004820152601f60248201527f50726f76656e616e636520686173206265656e2073657420616c7265616479006044820152606401610aaa565b805161225a90601a906020840190612c53565b50506017805463ff00000019166301000000179055565b60006001600160e01b031982166380ac58cd60e01b14806122a257506001600160e01b03198216635b5e139f60e01b145b8061099d57506301ffc9a760e01b6001600160e01b031983161461099d565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906122f6826113f8565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6113ca82826040518060200160405280600081525061277d565b6000818152600260205260408120546001600160a01b03166123c25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aaa565b60006123cd836113f8565b9050806001600160a01b0316846001600160a01b031614806124085750836001600160a01b03166123fd84610a35565b6001600160a01b0316145b8061243857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316612453826113f8565b6001600160a01b0316146124bb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610aaa565b6001600160a01b03821661251d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610aaa565b6125288383836127b0565b6125336000826122c1565b6001600160a01b038316600090815260036020526040812080546001929061255c90849061335a565b90915550506001600160a01b038216600090815260036020526040812080546001929061258a90849061330f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612648848484612440565b61265484848484612868565b611cdb5760405162461bcd60e51b8152600401610aaa90613188565b6060601380546109b29061339d565b6060816126a35750506040805180820190915260018152600360fc1b602082015290565b8160005b81156126cd57806126b7816133d8565b91506126c69050600a83613327565b91506126a7565b60008167ffffffffffffffff8111156126e8576126e861345f565b6040519080825280601f01601f191660200182016040528015612712576020820181803683370190505b5090505b84156124385761272760018361335a565b9150612734600a866133f3565b61273f90603061330f565b60f81b81838151811061275457612754613449565b60200101906001600160f81b031916908160001a905350612776600a86613327565b9450612716565b6127878383612975565b6127946000848484612868565b610be05760405162461bcd60e51b8152600401610aaa90613188565b6001600160a01b03831661280b5761280681600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61282e565b816001600160a01b0316836001600160a01b03161461282e5761282e8382612ac3565b6001600160a01b03821661284557610be081612b60565b826001600160a01b0316826001600160a01b031614610be057610be08282612c0f565b60006001600160a01b0384163b1561296a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906128ac9033908990889088906004016130f4565b602060405180830381600087803b1580156128c657600080fd5b505af19250505080156128f6575060408051601f3d908101601f191682019092526128f39181019061301a565b60015b612950573d808015612924576040519150601f19603f3d011682016040523d82523d6000602084013e612929565b606091505b5080516129485760405162461bcd60e51b8152600401610aaa90613188565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612438565b506001949350505050565b6001600160a01b0382166129cb5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610aaa565b6000818152600260205260409020546001600160a01b031615612a305760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610aaa565b612a3c600083836127b0565b6001600160a01b0382166000908152600360205260408120805460019290612a6590849061330f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001612ad0846114b3565b612ada919061335a565b600083815260076020526040902054909150808214612b2d576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612b729060019061335a565b60008381526009602052604081205460088054939450909284908110612b9a57612b9a613449565b906000526020600020015490508060088381548110612bbb57612bbb613449565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612bf357612bf3613433565b6001900381819060005260206000200160009055905550505050565b6000612c1a836114b3565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612c5f9061339d565b90600052602060002090601f016020900481019282612c815760008555612cc7565b82601f10612c9a57805160ff1916838001178555612cc7565b82800160010185558215612cc7579182015b82811115612cc7578251825591602001919060010190612cac565b50612cd3929150612cd7565b5090565b5b80821115612cd35760008155600101612cd8565b600067ffffffffffffffff80841115612d0757612d0761345f565b604051601f8501601f19908116603f01168101908282118183101715612d2f57612d2f61345f565b81604052809350858152868686011115612d4857600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612d7957600080fd5b919050565b60008083601f840112612d9057600080fd5b50813567ffffffffffffffff811115612da857600080fd5b6020830191508360208260051b8501011115612dc357600080fd5b9250929050565b80358015158114612d7957600080fd5b600060208284031215612dec57600080fd5b611db582612d62565b60008060408385031215612e0857600080fd5b612e1183612d62565b9150612e1f60208401612d62565b90509250929050565b600080600060608486031215612e3d57600080fd5b612e4684612d62565b9250612e5460208501612d62565b9150604084013590509250925092565b60008060008060808587031215612e7a57600080fd5b612e8385612d62565b9350612e9160208601612d62565b925060408501359150606085013567ffffffffffffffff811115612eb457600080fd5b8501601f81018713612ec557600080fd5b612ed487823560208401612cec565b91505092959194509250565b60008060408385031215612ef357600080fd5b612efc83612d62565b9150612e1f60208401612dca565b60008060408385031215612f1d57600080fd5b612f2683612d62565b946020939093013593505050565b60008060208385031215612f4757600080fd5b823567ffffffffffffffff811115612f5e57600080fd5b612f6a85828601612d7e565b90969095509350505050565b60008060008060408587031215612f8c57600080fd5b843567ffffffffffffffff80821115612fa457600080fd5b612fb088838901612d7e565b90965094506020870135915080821115612fc957600080fd5b50612fd687828801612d7e565b95989497509550505050565b600060208284031215612ff457600080fd5b611db582612dca565b60006020828403121561300f57600080fd5b8135611db581613475565b60006020828403121561302c57600080fd5b8151611db581613475565b60006020828403121561304957600080fd5b813567ffffffffffffffff81111561306057600080fd5b8201601f8101841361307157600080fd5b61243884823560208401612cec565b60006020828403121561309257600080fd5b5035919050565b600081518084526130b1816020860160208601613371565b601f01601f19169290920160200192915050565b600083516130d7818460208801613371565b8351908301906130eb818360208801613371565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061312790830184613099565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156131695783518352928401929184019160010161314d565b50909695505050505050565b602081526000611db56020830184613099565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526021908201527f43616e6e6f742063616c6c20746869732066726f6d206120636f6e74726163746040820152600160fd1b606082015260800190565b60208082526017908201527f4578636565647320726573657276656420737570706c79000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000821982111561332257613322613407565b500190565b6000826133365761333661341d565b500490565b600081600019048311821515161561335557613355613407565b500290565b60008282101561336c5761336c613407565b500390565b60005b8381101561338c578181015183820152602001613374565b83811115611cdb5750506000910152565b600181811c908216806133b157607f821691505b602082108114156133d257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156133ec576133ec613407565b5060010190565b6000826134025761340261341d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610f5d57600080fdfea2646970667358221220e10c6b4f9a84b570bc05c82772888af5db173361156910eadd4d6478a7be86d964736f6c63430008070033
Deployed Bytecode Sourcemap
45905:10959:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28550:224;;;;;;;;;;-1:-1:-1;28550:224:0;;;;;:::i;:::-;;:::i;:::-;;;8132:14:1;;8125:22;8107:41;;8095:2;8080:18;28550:224:0;;;;;;;;15443:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17002:221::-;;;;;;;;;;-1:-1:-1;17002:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6793:32:1;;;6775:51;;6763:2;6748:18;17002:221:0;6629:203:1;16525:411:0;;;;;;;;;;-1:-1:-1;16525:411:0;;;;;:::i;:::-;;:::i;:::-;;47965:29;;;;;;;;;;;;;:::i;29190:113::-;;;;;;;;;;-1:-1:-1;29278:10:0;:17;29190:113;;;22168:25:1;;;22156:2;22141:18;29190:113:0;22022:177:1;53122:107:0;;;;;;;;;;-1:-1:-1;53122:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;53206:15:0;53179:7;53206:15;;;:9;:15;;;;;;;53122:107;55526:144;;;;;;;;;;;;;:::i;49899:692::-;;;;;;:::i;:::-;;:::i;17892:339::-;;;;;;;;;;-1:-1:-1;17892:339:0;;;;;:::i;:::-;;:::i;55778:121::-;;;;;;:::i;:::-;;:::i;28858:256::-;;;;;;;;;;-1:-1:-1;28858:256:0;;;;;:::i;:::-;;:::i;54793:97::-;;;;;;;;;;-1:-1:-1;54793:97:0;;;;;:::i;:::-;;:::i;53910:224::-;;;;;;;;;;-1:-1:-1;53910:224:0;;;;;:::i;:::-;;:::i;51131:542::-;;;:::i;18302:185::-;;;;;;;;;;-1:-1:-1;18302:185:0;;;;;:::i;:::-;;:::i;53237:342::-;;;;;;;;;;-1:-1:-1;53237:342:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;29380:233::-;;;;;;;;;;-1:-1:-1;29380:233:0;;;;;:::i;:::-;;:::i;54677:104::-;;;;;;;;;;-1:-1:-1;54677:104:0;;;;;:::i;:::-;;:::i;55389:125::-;;;;;;;;;;;;;:::i;55099:115::-;;;;;;;;;;;;;:::i;52997:113::-;;;;;;;;;;-1:-1:-1;52997:113:0;;;;;:::i;:::-;-1:-1:-1;;;;;53084:18:0;53057:7;53084:18;;;:12;:18;;;;;;;52997:113;15137:239;;;;;;;;;;-1:-1:-1;15137:239:0;;;;;:::i;:::-;;:::i;47600:31::-;;;;;;;;;;-1:-1:-1;47600:31:0;;;;;;;;51911:107;;;;;;;;;;-1:-1:-1;51911:107:0;;;;;:::i;:::-;;:::i;14867:208::-;;;;;;;;;;-1:-1:-1;14867:208:0;;;;;:::i;:::-;;:::i;5182:94::-;;;;;;;;;;;;;:::i;52357:285::-;;;;;;;;;;-1:-1:-1;52357:285:0;;;;;:::i;:::-;;:::i;55907:397::-;;;:::i;48968:702::-;;;;;;:::i;:::-;;:::i;47749:30::-;;;;;;;;;;-1:-1:-1;47749:30:0;;;;;;;;;;;4531:87;;;;;;;;;;-1:-1:-1;4604:6:0;;-1:-1:-1;;;;;4604:6:0;4531:87;;54452:95;;;;;;;;;;-1:-1:-1;54452:95:0;;;;;:::i;:::-;;:::i;56425:99::-;;;;;;;;;;-1:-1:-1;56425:99:0;;;;;:::i;:::-;;:::i;15612:104::-;;;;;;;;;;;;;:::i;55004:83::-;;;;;;;;;;-1:-1:-1;55073:6:0;;55004:83;;17295:295;;;;;;;;;;-1:-1:-1;17295:295:0;;;;;:::i;:::-;;:::i;52706:279::-;;;;;;;;;;-1:-1:-1;52706:279:0;;;;;:::i;:::-;;:::i;18558:328::-;;;;;;;;;;-1:-1:-1;18558:328:0;;;;;:::i;:::-;;:::i;54902:90::-;;;;;;;;;;-1:-1:-1;54975:9:0;;54902:90;;15787:334;;;;;;;;;;-1:-1:-1;15787:334:0;;;;;:::i;:::-;;:::i;50824:295::-;;;;;;;;;;-1:-1:-1;50824:295:0;;;;;:::i;:::-;;:::i;53591:307::-;;;;;;;;;;-1:-1:-1;53591:307:0;;;;;:::i;:::-;;:::i;55682:88::-;;;;;;;;;;-1:-1:-1;55752:10:0;;55682:88;;55226:151;;;;;;;;;;;;;:::i;47676:28::-;;;;;;;;;;-1:-1:-1;47676:28:0;;;;;;;;;;;52077:221;;;;;;;;;;-1:-1:-1;52077:221:0;;;;;:::i;:::-;;:::i;56536:99::-;;;;;;;;;;;;;:::i;17661:164::-;;;;;;;;;;-1:-1:-1;17661:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;17782:25:0;;;17758:4;17782:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;17661:164;54146:298;;;;;;;;;;-1:-1:-1;54146:298:0;;;;;:::i;:::-;;:::i;56316:97::-;;;;;;;;;;-1:-1:-1;56316:97:0;;;;;:::i;:::-;;:::i;5431:192::-;;;;;;;;;;-1:-1:-1;5431:192:0;;;;;:::i;:::-;;:::i;56647:214::-;;;;;;;;;;-1:-1:-1;56647:214:0;;;;;:::i;:::-;;:::i;28550:224::-;28652:4;-1:-1:-1;;;;;;28676:50:0;;-1:-1:-1;;;28676:50:0;;:90;;;28730:36;28754:11;28730:23;:36::i;:::-;28669:97;28550:224;-1:-1:-1;;28550:224:0:o;15443:100::-;15497:13;15530:5;15523:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15443:100;:::o;17002:221::-;17078:7;20485:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20485:16:0;17098:73;;;;-1:-1:-1;;;17098:73:0;;17261:2:1;17098:73:0;;;17243:21:1;17300:2;17280:18;;;17273:30;17339:34;17319:18;;;17312:62;-1:-1:-1;;;17390:18:1;;;17383:42;17442:19;;17098:73:0;;;;;;;;;-1:-1:-1;17191:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;17191:24:0;;17002:221::o;16525:411::-;16606:13;16622:23;16637:7;16622:14;:23::i;:::-;16606:39;;16670:5;-1:-1:-1;;;;;16664:11:0;:2;-1:-1:-1;;;;;16664:11:0;;;16656:57;;;;-1:-1:-1;;;16656:57:0;;19569:2:1;16656:57:0;;;19551:21:1;19608:2;19588:18;;;19581:30;19647:34;19627:18;;;19620:62;-1:-1:-1;;;19698:18:1;;;19691:31;19739:19;;16656:57:0;19367:397:1;16656:57:0;3397:10;-1:-1:-1;;;;;16748:21:0;;;;:62;;-1:-1:-1;16773:37:0;16790:5;3397:10;17661:164;:::i;16773:37::-;16726:168;;;;-1:-1:-1;;;16726:168:0;;13895:2:1;16726:168:0;;;13877:21:1;13934:2;13914:18;;;13907:30;13973:34;13953:18;;;13946:62;14044:26;14024:18;;;14017:54;14088:19;;16726:168:0;13693:420:1;16726:168:0;16907:21;16916:2;16920:7;16907:8;:21::i;:::-;16595:341;16525:411;;:::o;47965:29::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;55526:144::-;55579:7;55648:14;;55625:20;;55605:17;;:40;;;;:::i;:::-;:57;;;;:::i;:::-;55598:64;;55526:144;:::o;49899:692::-;1747:1;2343:7;;:19;;2335:63;;;;-1:-1:-1;;;2335:63:0;;;;;;;:::i;:::-;1747:1;2476:7;:18;48616:10:::1;51795:18:::0;51830:9;;;48593:74:::1;;;;-1:-1:-1::0;;;48593:74:0::1;;;;;;;:::i;:::-;50005:10:::2;51795:18:::0;51830:9;;;49982:74:::2;;;;-1:-1:-1::0;;;49982:74:0::2;;;;;;;:::i;:::-;50076:11;::::0;::::2;;50067:37;;;::::0;-1:-1:-1;;;50067:37:0;;8585:2:1;50067:37:0::2;::::0;::::2;8567:21:1::0;8624:2;8604:18;;;8597:30;-1:-1:-1;;;8643:18:1;;;8636:41;8694:18;;50067:37:0::2;8383:335:1::0;50067:37:0::2;50131:9;;50124:3;:16;;50115:44;;;::::0;-1:-1:-1;;;50115:44:0;;15490:2:1;50115:44:0::2;::::0;::::2;15472:21:1::0;15529:2;15509:18;;;15502:30;-1:-1:-1;;;15548:18:1;;;15541:43;15601:18;;50115:44:0::2;15288:337:1::0;50115:44:0::2;50186:17;:15;:17::i;:::-;50179:3;:24;;50170:61;;;::::0;-1:-1:-1;;;50170:61:0;;19971:2:1;50170:61:0::2;::::0;::::2;19953:21:1::0;20010:2;19990:18;;;19983:30;-1:-1:-1;;;20029:18:1;;;20022:52;20091:18;;50170:61:0::2;19769:346:1::0;50170:61:0::2;50282:12;;50275:3;50251:21;50261:10;50251:9;:21::i;:::-;:27;;;;:::i;:::-;:43;;50242:77;;;::::0;-1:-1:-1;;;50242:77:0;;15141:2:1;50242:77:0::2;::::0;::::2;15123:21:1::0;15180:2;15160:18;;;15153:30;-1:-1:-1;;;15199:18:1;;;15192:50;15259:18;;50242:77:0::2;14939:344:1::0;50242:77:0::2;50361:3;50352:6;;:12;;;;:::i;:::-;50339:9;:25;;50330:60;;;::::0;-1:-1:-1;;;50330:60:0;;10168:2:1;50330:60:0::2;::::0;::::2;10150:21:1::0;10207:2;10187:18;;;10180:30;-1:-1:-1;;;10226:18:1;;;10219:50;10286:18;;50330:60:0::2;9966:344:1::0;50330:60:0::2;50406:9;50401:183;50421:3;50417:1;:7;50401:183;;;50462:10;;50450:8;;:22;50446:127;;50493:8;:11:::0;;;:8:::2;:11;::::0;::::2;:::i;:::-;;;;;;50523:34;50534:10;50547:8;;50523:9;:34::i;:::-;50426:3:::0;::::2;::::0;::::2;:::i;:::-;;;;50401:183;;;-1:-1:-1::0;;1703:1:0;2655:7;:22;49899:692::o;17892:339::-;18087:41;3397:10;18120:7;18087:18;:41::i;:::-;18079:103;;;;-1:-1:-1;;;18079:103:0;;;;;;;:::i;:::-;18195:28;18205:4;18211:2;18215:7;18195:9;:28::i;55778:121::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;55858:32:::1;::::0;55866:10:::1;::::0;55858:32;::::1;;;::::0;55883:6;;55858:32:::1;::::0;;;55883:6;55866:10;55858:32;::::1;;;;;;55850:41;;;::::0;::::1;;55778:121:::0;:::o;28858:256::-;28955:7;28991:23;29008:5;28991:16;:23::i;:::-;28983:5;:31;28975:87;;;;-1:-1:-1;;;28975:87:0;;8925:2:1;28975:87:0;;;8907:21:1;8964:2;8944:18;;;8937:30;9003:34;8983:18;;;8976:62;-1:-1:-1;;;9054:18:1;;;9047:41;9105:19;;28975:87:0;8723:407:1;28975:87:0;-1:-1:-1;;;;;;29080:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;28858:256::o;54793:97::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;54862:9:::1;:20:::0;54793:97::o;53910:224::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;53968:10:::1;:16:::0;;;::::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;53968:16:0;;::::1;::::0;;;::::1;::::0;;;53995:132:::1;;54024:27;::::0;::::1;::::0;;;::::1;55778:121:::0;:::o;53995:132::-:1;54089:26;::::0;::::1;::::0;;;::::1;53910:224:::0;:::o;51131:542::-;1747:1;2343:7;;:19;;2335:63;;;;-1:-1:-1;;;2335:63:0;;;;;;;:::i;:::-;1747:1;2476:7;:18;48616:10:::1;51795:18:::0;51830:9;;;48593:74:::1;;;;-1:-1:-1::0;;;48593:74:0::1;;;;;;;:::i;:::-;51216:10:::2;::::0;;;::::2;;;51207:44;;;::::0;-1:-1:-1;;;51207:44:0;;10517:2:1;51207:44:0::2;::::0;::::2;10499:21:1::0;10556:2;10536:18;;;10529:30;-1:-1:-1;;;10575:18:1;;;10568:49;10634:18;;51207:44:0::2;10315:343:1::0;51207:44:0::2;51281:10;51295:1;51271:21:::0;;;:9:::2;:21;::::0;;;;;51262:59:::2;;;::::0;-1:-1:-1;;;51262:59:0;;11272:2:1;51262:59:0::2;::::0;::::2;11254:21:1::0;11311:2;11291:18;;;11284:30;-1:-1:-1;;;11330:18:1;;;11323:50;11390:18;;51262:59:0::2;11070:344:1::0;51262:59:0::2;51366:22;:20;:22::i;:::-;51351:10;51341:21;::::0;;;:9:::2;:21;::::0;;;;;:47:::2;;51332:85;;;;-1:-1:-1::0;;;51332:85:0::2;;;;;;;:::i;:::-;51466:10;51438:15;51456:21:::0;;;:9:::2;:21;::::0;;;;;;51488:25;;;;51456:21;51534:132:::2;51554:7;51550:1;:11;51534:132;;;51583:14;:17:::0;;;:14:::2;:17;::::0;::::2;:::i;:::-;;;;;;51615:39;51626:10;51638:14;;51615:9;:39::i;:::-;51563:3:::0;::::2;::::0;::::2;:::i;:::-;;;;51534:132;;18302:185:::0;18440:39;18457:4;18463:2;18467:7;18440:39;;;;;;;;;;;;:16;:39::i;53237:342::-;53298:16;53327:18;53348:17;53358:6;53348:9;:17::i;:::-;53327:38;;53376:25;53418:10;53404:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53404:25:0;;53376:53;;53444:9;53440:106;53459:10;53455:1;:14;53440:106;;;53504:30;53524:6;53532:1;53504:19;:30::i;:::-;53490:8;53499:1;53490:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;53471:3;;;;:::i;:::-;;;;53440:106;;;-1:-1:-1;53563:8:0;53237:342;-1:-1:-1;;;53237:342:0:o;29380:233::-;29455:7;29491:30;29278:10;:17;;29190:113;29491:30;29483:5;:38;29475:95;;;;-1:-1:-1;;;29475:95:0;;21094:2:1;29475:95:0;;;21076:21:1;21133:2;21113:18;;;21106:30;21172:34;21152:18;;;21145:62;-1:-1:-1;;;21223:18:1;;;21216:42;21275:19;;29475:95:0;20892:408:1;29475:95:0;29588:10;29599:5;29588:17;;;;;;;;:::i;:::-;;;;;;;;;29581:24;;29380:233;;;:::o;54677:104::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;54750:23;;::::1;::::0;:13:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;:::-;;54677:104:::0;:::o;55389:125::-;55440:7;55489:17;;55466:20;;:40;;;;:::i;55099:115::-;55154:7;55193:13;29278:10;:17;;29190:113;55193:13;55180:10;;:26;;;;:::i;15137:239::-;15209:7;15245:16;;;:7;:16;;;;;;-1:-1:-1;;;;;15245:16:0;15280:19;15272:73;;;;-1:-1:-1;;;15272:73:0;;14731:2:1;15272:73:0;;;14713:21:1;14770:2;14750:18;;;14743:30;14809:34;14789:18;;;14782:62;-1:-1:-1;;;14860:18:1;;;14853:39;14909:19;;15272:73:0;14529:405:1;51911:107:0;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51987:19:0::1;52009:1;51987:19:::0;;;:9:::1;:19;::::0;;;;:23;51911:107::o;14867:208::-;14939:7;-1:-1:-1;;;;;14967:19:0;;14959:74;;;;-1:-1:-1;;;14959:74:0;;14320:2:1;14959:74:0;;;14302:21:1;14359:2;14339:18;;;14332:30;14398:34;14378:18;;;14371:62;-1:-1:-1;;;14449:18:1;;;14442:40;14499:19;;14959:74:0;14118:406:1;14959:74:0;-1:-1:-1;;;;;;15051:16:0;;;;;:9;:16;;;;;;;14867:208::o;5182:94::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;5247:21:::1;5265:1;5247:9;:21::i;:::-;5182:94::o:0;52357:285::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;52447:9:::1;52442:193;52462:20:::0;;::::1;52442:193;;;52534:1;52510:9:::0;;52520:1;52510:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52510:26:0::1;;;52502:63;;;::::0;-1:-1:-1;;;52502:63:0;;17674:2:1;52502:63:0::1;::::0;::::1;17656:21:1::0;17713:2;17693:18;;;17686:30;17752:26;17732:18;;;17725:54;17796:18;;52502:63:0::1;17472:348:1::0;52502:63:0::1;52607:16;;52578:12;:26;52591:9;;52601:1;52591:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52578:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;52578:26:0;:45;52484:3;::::1;::::0;::::1;:::i;:::-;;;;52442:193;;55907:397:::0;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;55968:13:::1;55984:27;56008:3;55984:21;:27;:::i;:::-;56038:2;::::0;55968:43;;-1:-1:-1;;;;;;56038:2:0::1;56030:30;56048:10;55968:43:::0;56056:2:::1;56048:10;:::i;:::-;56030:30;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;56022:39;;;::::0;::::1;;56095:2;::::0;-1:-1:-1;;;;;56095:2:0::1;56087:30;56105:10;:5:::0;56113:2:::1;56105:10;:::i;:::-;56087:30;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;56079:39;;;::::0;::::1;;56152:2;::::0;-1:-1:-1;;;;;56152:2:0::1;56144:30;56162:10;:5:::0;56170:2:::1;56162:10;:::i;:::-;56144:30;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;56136:39;;;::::0;::::1;;56209:2;::::0;-1:-1:-1;;;;;56209:2:0::1;56201:30;56219:10;:5:::0;56227:2:::1;56219:10;:::i;:::-;56201:30;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;56193:39;;;::::0;::::1;;56266:2;::::0;-1:-1:-1;;;;;56266:2:0::1;56258:29;56276:9;:5:::0;56284:1:::1;56276:9;:::i;:::-;56258:29;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;56250:38;;;::::0;::::1;48968:702:::0;1747:1;2343:7;;:19;;2335:63;;;;-1:-1:-1;;;2335:63:0;;;;;;;:::i;:::-;1747:1;2476:7;:18;48616:10:::1;51795:18:::0;51830:9;;;48593:74:::1;;;;-1:-1:-1::0;;;48593:74:0::1;;;;;;;:::i;:::-;49066:8:::2;::::0;::::2;::::0;::::2;;;49057:37;;;::::0;-1:-1:-1;;;49057:37:0;;11978:2:1;49057:37:0::2;::::0;::::2;11960:21:1::0;12017:2;11997:18;;;11990:30;-1:-1:-1;;;12036:18:1;;;12029:44;12090:18;;49057:37:0::2;11776:338:1::0;49057:37:0::2;49127:10;49141:1;49114:24:::0;;;:12:::2;:24;::::0;;;;;49105:62:::2;;;::::0;-1:-1:-1;;;49105:62:0;;11272:2:1;49105:62:0::2;::::0;::::2;11254:21:1::0;11311:2;11291:18;;;11284:30;-1:-1:-1;;;11330:18:1;;;11323:50;11390:18;;49105:62:0::2;11070:344:1::0;49105:62:0::2;49194:16;;49187:3;:23;;49178:64;;;::::0;-1:-1:-1;;;49178:64:0;;19214:2:1;49178:64:0::2;::::0;::::2;19196:21:1::0;19253:2;19233:18;;;19226:30;19292:28;19272:18;;;19265:56;19338:18;;49178:64:0::2;19012:350:1::0;49178:64:0::2;49275:10;49262:24;::::0;;;:12:::2;:24;::::0;;;;;:31;-1:-1:-1;49262:31:0::2;49253:73;;;::::0;-1:-1:-1;;;49253:73:0;;21507:2:1;49253:73:0::2;::::0;::::2;21489:21:1::0;21546:2;21526:18;;;21519:30;21585;21565:18;;;21558:58;21633:18;;49253:73:0::2;21305:352:1::0;49253:73:0::2;49353:17;:15;:17::i;:::-;49346:3;:24;;49337:62;;;;-1:-1:-1::0;;;49337:62:0::2;;;;;;;:::i;:::-;49441:3;49432:6;;:12;;;;:::i;:::-;49419:9;:25;;49410:65;;;::::0;-1:-1:-1;;;49410:65:0;;20322:2:1;49410:65:0::2;::::0;::::2;20304:21:1::0;20361:2;20341:18;;;20334:30;20400:27;20380:18;;;20373:55;20445:18;;49410:65:0::2;20120:349:1::0;49410:65:0::2;49509:10;49496:24;::::0;;;:12:::2;:24;::::0;;;;:31;;49524:3;;49496:24;:31:::2;::::0;49524:3;;49496:31:::2;:::i;:::-;::::0;;;-1:-1:-1;49552:9:0::2;::::0;-1:-1:-1;49548:115:0::2;49567:3;49563:1;:7;49548:115;;;49591:8;:11:::0;;;:8:::2;:11;::::0;::::2;:::i;:::-;;;;;;49617:34;49628:10;49641:8;;49617:9;:34::i;:::-;49572:3:::0;::::2;::::0;::::2;:::i;:::-;;;;49548:115;;54452:95:::0;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;54521:6:::1;:18:::0;54452:95::o;56425:99::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;56498:18;;::::1;::::0;:12:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;15612:104::-:0;15668:13;15701:7;15694:14;;;;;:::i;17295:295::-;-1:-1:-1;;;;;17398:24:0;;3397:10;17398:24;;17390:62;;;;-1:-1:-1;;;17390:62:0;;12726:2:1;17390:62:0;;;12708:21:1;12765:2;12745:18;;;12738:30;12804:27;12784:18;;;12777:55;12849:18;;17390:62:0;12524:349:1;17390:62:0;3397:10;17465:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;17465:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;17465:53:0;;;;;;;;;;17534:48;;8107:41:1;;;17465:42:0;;3397:10;17534:48;;8080:18:1;17534:48:0;;;;;;;17295:295;;:::o;52706:279::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;52802:9:::1;52797:181;52817:20:::0;;::::1;52797:181;;;52889:1;52865:9:::0;;52875:1;52865:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52865:26:0::1;;;52857:66;;;::::0;-1:-1:-1;;;52857:66:0;;15832:2:1;52857:66:0::1;::::0;::::1;15814:21:1::0;15871:2;15851:18;;;15844:30;15910:29;15890:18;;;15883:57;15957:18;;52857:66:0::1;15630:351:1::0;52857:66:0::1;52965:1;52936:12;:26;52949:9;;52959:1;52949:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52936:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;52936:26:0;:30;52839:3;::::1;::::0;::::1;:::i;:::-;;;;52797:181;;18558:328:::0;18733:41;3397:10;18766:7;18733:18;:41::i;:::-;18725:103;;;;-1:-1:-1;;;18725:103:0;;;;;;;:::i;:::-;18839:39;18853:4;18859:2;18863:7;18872:5;18839:13;:39::i;:::-;18558:328;;;;:::o;15787:334::-;20461:4;20485:16;;;:7;:16;;;;;;15860:13;;-1:-1:-1;;;;;20485:16:0;15886:76;;;;-1:-1:-1;;;15886:76:0;;18798:2:1;15886:76:0;;;18780:21:1;18837:2;18817:18;;;18810:30;18876:34;18856:18;;;18849:62;-1:-1:-1;;;18927:18:1;;;18920:45;18982:19;;15886:76:0;18596:411:1;15886:76:0;15975:21;15999:10;:8;:10::i;:::-;15975:34;;16051:1;16033:7;16027:21;:25;:86;;;;;;;;;;;;;;;;;16079:7;16088:18;:7;:16;:18::i;:::-;16062:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;16027:86;16020:93;15787:334;-1:-1:-1;;;15787:334:0:o;50824:295::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;50924:20:::1;:18;:20::i;:::-;50913:7;:31;;50904:69;;;;-1:-1:-1::0;;;50904:69:0::1;;;;;;;:::i;:::-;50988:9;50984:128;51003:7;50999:1;:11;50984:128;;;51031:17;:20:::0;;;:17:::1;:20;::::0;::::1;:::i;:::-;;;;;;51066:34;51077:3;51082:17;;51066:9;:34::i;:::-;51012:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50984:128;;53591:307:::0;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;53651:11:::1;:17:::0;;-1:-1:-1;;53651:17:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;53679:212:::1;;53703:8;:16:::0;;-1:-1:-1;;53703:16:0::1;::::0;;53739:29:::1;::::0;::::1;::::0;53714:5:::1;::::0;53739:29:::1;53788:25;::::0;::::1;::::0;;;::::1;55778:121:::0;:::o;53679:212::-:1;53851:28;::::0;::::1;::::0;;;::::1;53591:307:::0;:::o;55226:151::-;55274:7;55361:8;;55338:20;;55318:17;;55301:14;;:34;;;;:::i;:::-;:57;;;;:::i;52077:221::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;52190:9:::1;52185:106;52205:20:::0;;::::1;52185:106;;;52271:5;;52277:1;52271:8;;;;;;;:::i;:::-;;;;;;;52245:9;:23;52255:9;;52265:1;52255:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52245:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;52245:23:0;:34;52227:3;::::1;::::0;::::1;:::i;:::-;;;;52185:106;;;;52077:221:::0;;;;:::o;56536:99::-;56582:13;56615:12;56608:19;;;;;:::i;54146:298::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;54212:11:::1;::::0;::::1;;54211:12;54203:68;;;::::0;-1:-1:-1;;;54203:68:0;;9756:2:1;54203:68:0::1;::::0;::::1;9738:21:1::0;9795:2;9775:18;;;9768:30;9834:34;9814:18;;;9807:62;-1:-1:-1;;;9885:18:1;;;9878:41;9936:19;;54203:68:0::1;9554:407:1::0;54203:68:0::1;54282:8;:14:::0;;;::::1;::::0;::::1;;;-1:-1:-1::0;;54282:14:0;;::::1;::::0;;;::::1;::::0;;;54307:130:::1;;54336:26;::::0;::::1;::::0;;;::::1;55778:121:::0;:::o;54307:130::-:1;54400:25;::::0;::::1;::::0;;;::::1;54146:298:::0;:::o;56316:97::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;56385:12:::1;:20:::0;56316:97::o;5431:192::-;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5520:22:0;::::1;5512:73;;;::::0;-1:-1:-1;;;5512:73:0;;10865:2:1;5512:73:0::1;::::0;::::1;10847:21:1::0;10904:2;10884:18;;;10877:30;10943:34;10923:18;;;10916:62;-1:-1:-1;;;10994:18:1;;;10987:36;11040:19;;5512:73:0::1;10663:402:1::0;5512:73:0::1;5596:19;5606:8;5596:9;:19::i;56647:214::-:0;4604:6;;-1:-1:-1;;;;;4604:6:0;3397:10;4751:23;4743:68;;;;-1:-1:-1;;;4743:68:0;;;;;;;:::i;:::-;56736:14:::1;::::0;;;::::1;;;56735:15;56727:59;;;::::0;-1:-1:-1;;;56727:59:0;;16901:2:1;56727:59:0::1;::::0;::::1;16883:21:1::0;16940:2;16920:18;;;16913:30;16979:33;16959:18;;;16952:61;17030:18;;56727:59:0::1;16699:355:1::0;56727:59:0::1;56797:24:::0;;::::1;::::0;:10:::1;::::0;:24:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;56832:14:0::1;:21:::0;;-1:-1:-1;;56832:21:0::1;::::0;::::1;::::0;;56647:214::o;14498:305::-;14600:4;-1:-1:-1;;;;;;14637:40:0;;-1:-1:-1;;;14637:40:0;;:105;;-1:-1:-1;;;;;;;14694:48:0;;-1:-1:-1;;;14694:48:0;14637:105;:158;;;-1:-1:-1;;;;;;;;;;7569:40:0;;;14759:36;7460:157;24378:174;24453:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;24453:29:0;-1:-1:-1;;;;;24453:29:0;;;;;;;;:24;;24507:23;24453:24;24507:14;:23::i;:::-;-1:-1:-1;;;;;24498:46:0;;;;;;;;;;;24378:174;;:::o;21380:110::-;21456:26;21466:2;21470:7;21456:26;;;;;;;;;;;;:9;:26::i;20690:348::-;20783:4;20485:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20485:16:0;20800:73;;;;-1:-1:-1;;;20800:73:0;;13482:2:1;20800:73:0;;;13464:21:1;13521:2;13501:18;;;13494:30;13560:34;13540:18;;;13533:62;-1:-1:-1;;;13611:18:1;;;13604:42;13663:19;;20800:73:0;13280:408:1;20800:73:0;20884:13;20900:23;20915:7;20900:14;:23::i;:::-;20884:39;;20953:5;-1:-1:-1;;;;;20942:16:0;:7;-1:-1:-1;;;;;20942:16:0;;:51;;;;20986:7;-1:-1:-1;;;;;20962:31:0;:20;20974:7;20962:11;:20::i;:::-;-1:-1:-1;;;;;20962:31:0;;20942:51;:87;;;-1:-1:-1;;;;;;17782:25:0;;;17758:4;17782:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;20997:32;20934:96;20690:348;-1:-1:-1;;;;20690:348:0:o;23682:578::-;23841:4;-1:-1:-1;;;;;23814:31:0;:23;23829:7;23814:14;:23::i;:::-;-1:-1:-1;;;;;23814:31:0;;23806:85;;;;-1:-1:-1;;;23806:85:0;;18388:2:1;23806:85:0;;;18370:21:1;18427:2;18407:18;;;18400:30;18466:34;18446:18;;;18439:62;-1:-1:-1;;;18517:18:1;;;18510:39;18566:19;;23806:85:0;18186:405:1;23806:85:0;-1:-1:-1;;;;;23910:16:0;;23902:65;;;;-1:-1:-1;;;23902:65:0;;12321:2:1;23902:65:0;;;12303:21:1;12360:2;12340:18;;;12333:30;12399:34;12379:18;;;12372:62;-1:-1:-1;;;12450:18:1;;;12443:34;12494:19;;23902:65:0;12119:400:1;23902:65:0;23980:39;24001:4;24007:2;24011:7;23980:20;:39::i;:::-;24084:29;24101:1;24105:7;24084:8;:29::i;:::-;-1:-1:-1;;;;;24126:15:0;;;;;;:9;:15;;;;;:20;;24145:1;;24126:15;:20;;24145:1;;24126:20;:::i;:::-;;;;-1:-1:-1;;;;;;;24157:13:0;;;;;;:9;:13;;;;;:18;;24174:1;;24157:13;:18;;24174:1;;24157:18;:::i;:::-;;;;-1:-1:-1;;24186:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;24186:21:0;-1:-1:-1;;;;;24186:21:0;;;;;;;;;24225:27;;24186:16;;24225:27;;;;;;;23682:578;;;:::o;5631:173::-;5706:6;;;-1:-1:-1;;;;;5723:17:0;;;-1:-1:-1;;;;;;5723:17:0;;;;;;;5756:40;;5706:6;;;5723:17;5706:6;;5756:40;;5687:16;;5756:40;5676:128;5631:173;:::o;19768:315::-;19925:28;19935:4;19941:2;19945:7;19925:9;:28::i;:::-;19972:48;19995:4;20001:2;20005:7;20014:5;19972:22;:48::i;:::-;19964:111;;;;-1:-1:-1;;;19964:111:0;;;;;;;:::i;54555:114::-;54615:13;54648;54641:20;;;;;:::i;35009:723::-;35065:13;35286:10;35282:53;;-1:-1:-1;;35313:10:0;;;;;;;;;;;;-1:-1:-1;;;35313:10:0;;;;;35009:723::o;35282:53::-;35360:5;35345:12;35401:78;35408:9;;35401:78;;35434:8;;;;:::i;:::-;;-1:-1:-1;35457:10:0;;-1:-1:-1;35465:2:0;35457:10;;:::i;:::-;;;35401:78;;;35489:19;35521:6;35511:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35511:17:0;;35489:39;;35539:154;35546:10;;35539:154;;35573:11;35583:1;35573:11;;:::i;:::-;;-1:-1:-1;35642:10:0;35650:2;35642:5;:10;:::i;:::-;35629:24;;:2;:24;:::i;:::-;35616:39;;35599:6;35606;35599:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;35599:56:0;;;;;;;;-1:-1:-1;35670:11:0;35679:2;35670:11;;:::i;:::-;;;35539:154;;21717:321;21847:18;21853:2;21857:7;21847:5;:18::i;:::-;21898:54;21929:1;21933:2;21937:7;21946:5;21898:22;:54::i;:::-;21876:154;;;;-1:-1:-1;;;21876:154:0;;;;;;;:::i;30226:589::-;-1:-1:-1;;;;;30432:18:0;;30428:187;;30467:40;30499:7;31642:10;:17;;31615:24;;;;:15;:24;;;;;:44;;;31670:24;;;;;;;;;;;;31538:164;30467:40;30428:187;;;30537:2;-1:-1:-1;;;;;30529:10:0;:4;-1:-1:-1;;;;;30529:10:0;;30525:90;;30556:47;30589:4;30595:7;30556:32;:47::i;:::-;-1:-1:-1;;;;;30629:16:0;;30625:183;;30662:45;30699:7;30662:36;:45::i;30625:183::-;30735:4;-1:-1:-1;;;;;30729:10:0;:2;-1:-1:-1;;;;;30729:10:0;;30725:83;;30756:40;30784:2;30788:7;30756:27;:40::i;25117:799::-;25272:4;-1:-1:-1;;;;;25293:13:0;;37859:20;37907:8;25289:620;;25329:72;;-1:-1:-1;;;25329:72:0;;-1:-1:-1;;;;;25329:36:0;;;;;:72;;3397:10;;25380:4;;25386:7;;25395:5;;25329:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25329:72:0;;;;;;;;-1:-1:-1;;25329:72:0;;;;;;;;;;;;:::i;:::-;;;25325:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25571:13:0;;25567:272;;25614:60;;-1:-1:-1;;;25614:60:0;;;;;;;:::i;25567:272::-;25789:6;25783:13;25774:6;25770:2;25766:15;25759:38;25325:529;-1:-1:-1;;;;;;25452:51:0;-1:-1:-1;;;25452:51:0;;-1:-1:-1;25445:58:0;;25289:620;-1:-1:-1;25893:4:0;25117:799;;;;;;:::o;22374:382::-;-1:-1:-1;;;;;22454:16:0;;22446:61;;;;-1:-1:-1;;;22446:61:0;;16540:2:1;22446:61:0;;;16522:21:1;;;16559:18;;;16552:30;16618:34;16598:18;;;16591:62;16670:18;;22446:61:0;16338:356:1;22446:61:0;20461:4;20485:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20485:16:0;:30;22518:58;;;;-1:-1:-1;;;22518:58:0;;11621:2:1;22518:58:0;;;11603:21:1;11660:2;11640:18;;;11633:30;11699;11679:18;;;11672:58;11747:18;;22518:58:0;11419:352:1;22518:58:0;22589:45;22618:1;22622:2;22626:7;22589:20;:45::i;:::-;-1:-1:-1;;;;;22647:13:0;;;;;;:9;:13;;;;;:18;;22664:1;;22647:13;:18;;22664:1;;22647:18;:::i;:::-;;;;-1:-1:-1;;22676:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;22676:21:0;-1:-1:-1;;;;;22676:21:0;;;;;;;;22715:33;;22676:16;;;22715:33;;22676:16;;22715:33;22374:382;;:::o;32329:988::-;32595:22;32645:1;32620:22;32637:4;32620:16;:22::i;:::-;:26;;;;:::i;:::-;32657:18;32678:26;;;:17;:26;;;;;;32595:51;;-1:-1:-1;32811:28:0;;;32807:328;;-1:-1:-1;;;;;32878:18:0;;32856:19;32878:18;;;:12;:18;;;;;;;;:34;;;;;;;;;32929:30;;;;;;:44;;;33046:30;;:17;:30;;;;;:43;;;32807:328;-1:-1:-1;33231:26:0;;;;:17;:26;;;;;;;;33224:33;;;-1:-1:-1;;;;;33275:18:0;;;;;:12;:18;;;;;:34;;;;;;;33268:41;32329:988::o;33612:1079::-;33890:10;:17;33865:22;;33890:21;;33910:1;;33890:21;:::i;:::-;33922:18;33943:24;;;:15;:24;;;;;;34316:10;:26;;33865:46;;-1:-1:-1;33943:24:0;;33865:46;;34316:26;;;;;;:::i;:::-;;;;;;;;;34294:48;;34380:11;34355:10;34366;34355:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;34460:28;;;:15;:28;;;;;;;:41;;;34632:24;;;;;34625:31;34667:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;33683:1008;;;33612:1079;:::o;31116:221::-;31201:14;31218:20;31235:2;31218:16;:20::i;:::-;-1:-1:-1;;;;;31249:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;31294:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;31116:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:367::-;891:8;901:6;955:3;948:4;940:6;936:17;932:27;922:55;;973:1;970;963:12;922:55;-1:-1:-1;996:20:1;;1039:18;1028:30;;1025:50;;;1071:1;1068;1061:12;1025:50;1108:4;1100:6;1096:17;1084:29;;1168:3;1161:4;1151:6;1148:1;1144:14;1136:6;1132:27;1128:38;1125:47;1122:67;;;1185:1;1182;1175:12;1122:67;828:367;;;;;:::o;1200:160::-;1265:20;;1321:13;;1314:21;1304:32;;1294:60;;1350:1;1347;1340:12;1365:186;1424:6;1477:2;1465:9;1456:7;1452:23;1448:32;1445:52;;;1493:1;1490;1483:12;1445:52;1516:29;1535:9;1516:29;:::i;1556:260::-;1624:6;1632;1685:2;1673:9;1664:7;1660:23;1656:32;1653:52;;;1701:1;1698;1691:12;1653:52;1724:29;1743:9;1724:29;:::i;:::-;1714:39;;1772:38;1806:2;1795:9;1791:18;1772:38;:::i;:::-;1762:48;;1556:260;;;;;:::o;1821:328::-;1898:6;1906;1914;1967:2;1955:9;1946:7;1942:23;1938:32;1935:52;;;1983:1;1980;1973:12;1935:52;2006:29;2025:9;2006:29;:::i;:::-;1996:39;;2054:38;2088:2;2077:9;2073:18;2054:38;:::i;:::-;2044:48;;2139:2;2128:9;2124:18;2111:32;2101:42;;1821:328;;;;;:::o;2154:666::-;2249:6;2257;2265;2273;2326:3;2314:9;2305:7;2301:23;2297:33;2294:53;;;2343:1;2340;2333:12;2294:53;2366:29;2385:9;2366:29;:::i;:::-;2356:39;;2414:38;2448:2;2437:9;2433:18;2414:38;:::i;:::-;2404:48;;2499:2;2488:9;2484:18;2471:32;2461:42;;2554:2;2543:9;2539:18;2526:32;2581:18;2573:6;2570:30;2567:50;;;2613:1;2610;2603:12;2567:50;2636:22;;2689:4;2681:13;;2677:27;-1:-1:-1;2667:55:1;;2718:1;2715;2708:12;2667:55;2741:73;2806:7;2801:2;2788:16;2783:2;2779;2775:11;2741:73;:::i;:::-;2731:83;;;2154:666;;;;;;;:::o;2825:254::-;2890:6;2898;2951:2;2939:9;2930:7;2926:23;2922:32;2919:52;;;2967:1;2964;2957:12;2919:52;2990:29;3009:9;2990:29;:::i;:::-;2980:39;;3038:35;3069:2;3058:9;3054:18;3038:35;:::i;3084:254::-;3152:6;3160;3213:2;3201:9;3192:7;3188:23;3184:32;3181:52;;;3229:1;3226;3219:12;3181:52;3252:29;3271:9;3252:29;:::i;:::-;3242:39;3328:2;3313:18;;;;3300:32;;-1:-1:-1;;;3084:254:1:o;3343:437::-;3429:6;3437;3490:2;3478:9;3469:7;3465:23;3461:32;3458:52;;;3506:1;3503;3496:12;3458:52;3546:9;3533:23;3579:18;3571:6;3568:30;3565:50;;;3611:1;3608;3601:12;3565:50;3650:70;3712:7;3703:6;3692:9;3688:22;3650:70;:::i;:::-;3739:8;;3624:96;;-1:-1:-1;3343:437:1;-1:-1:-1;;;;3343:437:1:o;3785:773::-;3907:6;3915;3923;3931;3984:2;3972:9;3963:7;3959:23;3955:32;3952:52;;;4000:1;3997;3990:12;3952:52;4040:9;4027:23;4069:18;4110:2;4102:6;4099:14;4096:34;;;4126:1;4123;4116:12;4096:34;4165:70;4227:7;4218:6;4207:9;4203:22;4165:70;:::i;:::-;4254:8;;-1:-1:-1;4139:96:1;-1:-1:-1;4342:2:1;4327:18;;4314:32;;-1:-1:-1;4358:16:1;;;4355:36;;;4387:1;4384;4377:12;4355:36;;4426:72;4490:7;4479:8;4468:9;4464:24;4426:72;:::i;:::-;3785:773;;;;-1:-1:-1;4517:8:1;-1:-1:-1;;;;3785:773:1:o;4563:180::-;4619:6;4672:2;4660:9;4651:7;4647:23;4643:32;4640:52;;;4688:1;4685;4678:12;4640:52;4711:26;4727:9;4711:26;:::i;4748:245::-;4806:6;4859:2;4847:9;4838:7;4834:23;4830:32;4827:52;;;4875:1;4872;4865:12;4827:52;4914:9;4901:23;4933:30;4957:5;4933:30;:::i;4998:249::-;5067:6;5120:2;5108:9;5099:7;5095:23;5091:32;5088:52;;;5136:1;5133;5126:12;5088:52;5168:9;5162:16;5187:30;5211:5;5187:30;:::i;5252:450::-;5321:6;5374:2;5362:9;5353:7;5349:23;5345:32;5342:52;;;5390:1;5387;5380:12;5342:52;5430:9;5417:23;5463:18;5455:6;5452:30;5449:50;;;5495:1;5492;5485:12;5449:50;5518:22;;5571:4;5563:13;;5559:27;-1:-1:-1;5549:55:1;;5600:1;5597;5590:12;5549:55;5623:73;5688:7;5683:2;5670:16;5665:2;5661;5657:11;5623:73;:::i;5707:180::-;5766:6;5819:2;5807:9;5798:7;5794:23;5790:32;5787:52;;;5835:1;5832;5825:12;5787:52;-1:-1:-1;5858:23:1;;5707:180;-1:-1:-1;5707:180:1:o;5892:257::-;5933:3;5971:5;5965:12;5998:6;5993:3;5986:19;6014:63;6070:6;6063:4;6058:3;6054:14;6047:4;6040:5;6036:16;6014:63;:::i;:::-;6131:2;6110:15;-1:-1:-1;;6106:29:1;6097:39;;;;6138:4;6093:50;;5892:257;-1:-1:-1;;5892:257:1:o;6154:470::-;6333:3;6371:6;6365:13;6387:53;6433:6;6428:3;6421:4;6413:6;6409:17;6387:53;:::i;:::-;6503:13;;6462:16;;;;6525:57;6503:13;6462:16;6559:4;6547:17;;6525:57;:::i;:::-;6598:20;;6154:470;-1:-1:-1;;;;6154:470:1:o;6837:488::-;-1:-1:-1;;;;;7106:15:1;;;7088:34;;7158:15;;7153:2;7138:18;;7131:43;7205:2;7190:18;;7183:34;;;7253:3;7248:2;7233:18;;7226:31;;;7031:4;;7274:45;;7299:19;;7291:6;7274:45;:::i;:::-;7266:53;6837:488;-1:-1:-1;;;;;;6837:488:1:o;7330:632::-;7501:2;7553:21;;;7623:13;;7526:18;;;7645:22;;;7472:4;;7501:2;7724:15;;;;7698:2;7683:18;;;7472:4;7767:169;7781:6;7778:1;7775:13;7767:169;;;7842:13;;7830:26;;7911:15;;;;7876:12;;;;7803:1;7796:9;7767:169;;;-1:-1:-1;7953:3:1;;7330:632;-1:-1:-1;;;;;;7330:632:1:o;8159:219::-;8308:2;8297:9;8290:21;8271:4;8328:44;8368:2;8357:9;8353:18;8345:6;8328:44;:::i;9135:414::-;9337:2;9319:21;;;9376:2;9356:18;;;9349:30;9415:34;9410:2;9395:18;;9388:62;-1:-1:-1;;;9481:2:1;9466:18;;9459:48;9539:3;9524:19;;9135:414::o;12878:397::-;13080:2;13062:21;;;13119:2;13099:18;;;13092:30;13158:34;13153:2;13138:18;;13131:62;-1:-1:-1;;;13224:2:1;13209:18;;13202:31;13265:3;13250:19;;12878:397::o;15986:347::-;16188:2;16170:21;;;16227:2;16207:18;;;16200:30;16266:25;16261:2;16246:18;;16239:53;16324:2;16309:18;;15986:347::o;17825:356::-;18027:2;18009:21;;;18046:18;;;18039:30;18105:34;18100:2;18085:18;;18078:62;18172:2;18157:18;;17825:356::o;20474:413::-;20676:2;20658:21;;;20715:2;20695:18;;;20688:30;20754:34;20749:2;20734:18;;20727:62;-1:-1:-1;;;20820:2:1;20805:18;;20798:47;20877:3;20862:19;;20474:413::o;21662:355::-;21864:2;21846:21;;;21903:2;21883:18;;;21876:30;21942:33;21937:2;21922:18;;21915:61;22008:2;21993:18;;21662:355::o;22204:128::-;22244:3;22275:1;22271:6;22268:1;22265:13;22262:39;;;22281:18;;:::i;:::-;-1:-1:-1;22317:9:1;;22204:128::o;22337:120::-;22377:1;22403;22393:35;;22408:18;;:::i;:::-;-1:-1:-1;22442:9:1;;22337:120::o;22462:168::-;22502:7;22568:1;22564;22560:6;22556:14;22553:1;22550:21;22545:1;22538:9;22531:17;22527:45;22524:71;;;22575:18;;:::i;:::-;-1:-1:-1;22615:9:1;;22462:168::o;22635:125::-;22675:4;22703:1;22700;22697:8;22694:34;;;22708:18;;:::i;:::-;-1:-1:-1;22745:9:1;;22635:125::o;22765:258::-;22837:1;22847:113;22861:6;22858:1;22855:13;22847:113;;;22937:11;;;22931:18;22918:11;;;22911:39;22883:2;22876:10;22847:113;;;22978:6;22975:1;22972:13;22969:48;;;-1:-1:-1;;23013:1:1;22995:16;;22988:27;22765:258::o;23028:380::-;23107:1;23103:12;;;;23150;;;23171:61;;23225:4;23217:6;23213:17;23203:27;;23171:61;23278:2;23270:6;23267:14;23247:18;23244:38;23241:161;;;23324:10;23319:3;23315:20;23312:1;23305:31;23359:4;23356:1;23349:15;23387:4;23384:1;23377:15;23241:161;;23028:380;;;:::o;23413:135::-;23452:3;-1:-1:-1;;23473:17:1;;23470:43;;;23493:18;;:::i;:::-;-1:-1:-1;23540:1:1;23529:13;;23413:135::o;23553:112::-;23585:1;23611;23601:35;;23616:18;;:::i;:::-;-1:-1:-1;23650:9:1;;23553:112::o;23670:127::-;23731:10;23726:3;23722:20;23719:1;23712:31;23762:4;23759:1;23752:15;23786:4;23783:1;23776:15;23802:127;23863:10;23858:3;23854:20;23851:1;23844:31;23894:4;23891:1;23884:15;23918:4;23915:1;23908:15;23934:127;23995:10;23990:3;23986:20;23983:1;23976:31;24026:4;24023:1;24016:15;24050:4;24047:1;24040:15;24066:127;24127:10;24122:3;24118:20;24115:1;24108:31;24158:4;24155:1;24148:15;24182:4;24179:1;24172:15;24198:127;24259:10;24254:3;24250:20;24247:1;24240:31;24290:4;24287:1;24280:15;24314:4;24311:1;24304:15;24330:131;-1:-1:-1;;;;;;24404:32:1;;24394:43;;24384:71;;24451:1;24448;24441:12
Swarm Source
ipfs://e10c6b4f9a84b570bc05c82772888af5db173361156910eadd4d6478a7be86d9
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.