Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 51 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Safe Transfer Fr... | 12057513 | 1814 days ago | IN | 0 ETH | 0.01372699 | ||||
| Set Token Price | 11492346 | 1901 days ago | IN | 0 ETH | 0.00193692 | ||||
| Set Token Price | 11492346 | 1901 days ago | IN | 0 ETH | 0.00184888 | ||||
| Set Token Price | 11439919 | 1909 days ago | IN | 0 ETH | 0.00079237 | ||||
| Mint | 11334371 | 1925 days ago | IN | 0 ETH | 0.0075714 | ||||
| Mint | 11334361 | 1925 days ago | IN | 0 ETH | 0.0075714 | ||||
| Set Token Price | 11334333 | 1925 days ago | IN | 0 ETH | 0.00228909 | ||||
| Set Token Price | 11334330 | 1925 days ago | IN | 0 ETH | 0.00228909 | ||||
| Set Token Price | 11316161 | 1928 days ago | IN | 0 ETH | 0.00213061 | ||||
| Set Token Price | 11316142 | 1928 days ago | IN | 0 ETH | 0.00227588 | ||||
| Set Token Price | 11310512 | 1929 days ago | IN | 0 ETH | 0.00154953 | ||||
| Set Token Price | 11309981 | 1929 days ago | IN | 0 ETH | 0.00167279 | ||||
| Set Token Price | 11309977 | 1929 days ago | IN | 0 ETH | 0.00154953 | ||||
| Set Token Price | 11309937 | 1929 days ago | IN | 0 ETH | 0.00154073 | ||||
| Set Token Price | 11309901 | 1929 days ago | IN | 0 ETH | 0.00180423 | ||||
| Set Token Price | 11309768 | 1929 days ago | IN | 0 ETH | 0.00145269 | ||||
| Mint | 11309723 | 1929 days ago | IN | 0 ETH | 0.00638373 | ||||
| Set Token Price | 11276855 | 1934 days ago | IN | 0 ETH | 0.00435807 | ||||
| Mint | 10897757 | 1993 days ago | IN | 0 ETH | 0.00994675 | ||||
| Mint | 10897756 | 1993 days ago | IN | 0 ETH | 0.00994675 | ||||
| Mint | 10897750 | 1993 days ago | IN | 0 ETH | 0.00994675 | ||||
| Mint | 10897749 | 1993 days ago | IN | 0 ETH | 0.00994675 | ||||
| Mint | 10897716 | 1993 days ago | IN | 0 ETH | 0.00994675 | ||||
| Mint | 10897714 | 1993 days ago | IN | 0 ETH | 0.01024367 | ||||
| Set Token Price | 10866561 | 1998 days ago | IN | 0 ETH | 0.00928843 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 10755645 | 2015 days ago | 0.1 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CryptoByte721
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity Multiple files format)
pragma solidity ^0.5.0;
import "./Context.sol";
import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./SafeMath.sol";
import "./Address.sol";
import "./Counters.sol";
import "./ERC165.sol";
import "./IERC721Enumerable.sol";
import "./IERC721Metadata.sol";
import "./MinterRole.sol";
/**
* @title ERC721 Non-Fungible Token Standard basic implementation
* @dev see https://eips.ethereum.org/EIPS/eip-721
*/
contract CryptoByte721 is
Context,
ERC165,
IERC721,
IERC721Enumerable,
IERC721Metadata,
MinterRole
{
using SafeMath for uint256;
using Address for address;
using Counters for Counters.Counter;
// Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
// which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`
bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;
// Mapping from token ID to owner
mapping(uint256 => address) private _tokenOwner;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to number of owned token
mapping(address => Counters.Counter) private _ownedTokensCount;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
// Mapping from owner to list of owned token IDs
mapping(address => uint256[]) private _ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private _ownedTokensIndex;
// Array with all token ID, used for enumeration
uint256[] private _allTokens;
// Mapping from token ID to position in the allTokens array
mapping(uint256 => uint256) private _allTokensIndex;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Base URI
string private _baseURI;
// Optional mapping for token URIs
mapping(uint256 => string) private _tokenURIs;
// Price to mint a new token
uint256 private _mintPrice = 0.1 ether;
// Mapping from token ID to its price
mapping(uint256 => uint256) private _tokenPrices;
/*
* bytes4(keccak256('balanceOf(address)')) == 0x70a08231
* bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e
* bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3
* bytes4(keccak256('getApproved(uint256)')) == 0x081812fc
* bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465
* bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5
* bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd
* bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e
* bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde
*
* => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^
* 0xa22cb465 ^ 0xe985e9c ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd
*/
bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;
/*
* bytes4(keccak256('totalSupply()')) == 0x18160ddd
* bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59
* bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7
*
* => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63
*/
bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;
/*
* bytes4(keccak256('name()')) == 0x06fdde03
* bytes4(keccak256('symbol()')) == 0x95d89b41
* bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd
*
* => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f
*/
bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;
/**
* @dev Checks if function caller is either minter or has paid the price for minting a token.
*/
modifier paidMintPrice() {
require(
msg.value == _mintPrice || isMinter(_msgSender()),
"ERC721: caller is not minter nor has paid the minting price"
);
_;
}
/**
* @dev Constructor function.
*/
constructor(string memory name, string memory symbol) public {
_name = name;
_symbol = symbol;
// register the supported interfaces to conform to ERC721 via ERC165
_registerInterface(_INTERFACE_ID_ERC721);
_registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);
_registerInterface(_INTERFACE_ID_ERC721_METADATA);
}
/**
* @dev Gets the balance of the specified address.
* @param owner address to query the balance of
* @return uint256 representing the amount owned by the passed address
*/
function balanceOf(address owner) public view returns (uint256) {
require(
owner != address(0),
"ERC721: balance query for the zero address"
);
return _ownedTokensCount[owner].current();
}
/**
* @dev Gets the owner of the specified token ID.
* @param tokenId uint256 ID of the token to query the owner of
* @return address currently marked as the owner of the given token ID
*/
function ownerOf(uint256 tokenId) public view returns (address) {
address owner = _tokenOwner[tokenId];
require(
owner != address(0),
"ERC721: owner query for nonexistent token"
);
return owner;
}
/**
* @dev Gets the token name.
* @return string representing the token name
*/
function name() external view returns (string memory) {
return _name;
}
/**
* @dev Gets the token symbol.
* @return string representing the token symbol
*/
function symbol() external view returns (string memory) {
return _symbol;
}
/**
* @dev Returns the URI for a given token ID. May return an empty string.
*
* If the token's URI is non-empty and a base URI was set (via
* {_setBaseURI}), it will be added to the token ID's URI as a prefix.
*
* Reverts if the token ID does not exist.
*/
function tokenURI(uint256 tokenId) external view returns (string memory) {
require(
_exists(tokenId),
"ERC721Metadata: URI query for nonexistent token"
);
string memory _tokenURI = _tokenURIs[tokenId];
// Even if there is a base URI, it is only appended to non-empty token-specific URIs
if (bytes(_tokenURI).length == 0) {
return "";
} else {
// abi.encodePacked is being used to concatenate strings
return string(abi.encodePacked(_baseURI, _tokenURI));
}
}
/**
* @dev Returns the price needed for minting a token (if caller isn't minter).
*/
function getMintPrice() public view returns (uint256) {
return _mintPrice;
}
/**
* @dev Minters can change the price for minting a token.
*/
function setMintPrice(uint256 newMintPrice) public onlyMinter {
_mintPrice = newMintPrice;
}
/**
* @dev Returns the price for a specific token.
*/
function getTokenPrice(uint256 tokenId) public view returns (uint256) {
return _tokenPrices[tokenId];
}
/**
* @dev Sets the price for token ID.
* Setting the price to 0 removes the token from sale,
* otherwise it puts it up for sale.
* @param tokenId ID of token to change price for
* @param newPrice new price to be assigned
*/
function setTokenPrice(uint256 tokenId, uint256 newPrice) public {
require(
_isApprovedOrOwner(_msgSender(), tokenId),
"ERC721: caller is not owner nor approved"
);
_tokenPrices[tokenId] = newPrice;
}
/**
* @dev Transfers token from owner to buyer.
* Ether sent to function must be equal to price assigned for token.
* Sends ether to previous owner of token.
* Resets the token price.
* @param tokenId ID of token to be bought
*/
function buyToken(uint256 tokenId) public payable {
uint256 tokenPrice = getTokenPrice(tokenId);
require(tokenPrice > 0, "ERC721: token not for sale");
address owner = ownerOf(tokenId);
require(
_msgSender() != owner,
"ERC721: can't buy already owned tokens"
);
require(
msg.value == tokenPrice,
"ERC721: paid price doesn't equal needed price"
);
_safeTransferFrom(owner, _msgSender(), tokenId, "");
address(uint160(owner)).transfer(tokenPrice);
}
/**
* @dev Approves another address to transfer the given token ID
* The zero address indicates there is no approved address.
* There can only be one approved address per token at a given time.
* Can only be called by the token owner or an approved operator.
* @param to address to be approved for the given token ID
* @param tokenId uint256 ID of the token to be approved
*/
function approve(address to, uint256 tokenId) public {
address owner = 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"
);
_tokenApprovals[tokenId] = to;
emit Approval(owner, to, tokenId);
}
/**
* @dev Gets the approved address for a token ID, or zero if no address set
* Reverts if the token ID does not exist.
* @param tokenId uint256 ID of the token to query the approval of
* @return address currently approved for the given token ID
*/
function getApproved(uint256 tokenId) public view returns (address) {
require(
_exists(tokenId),
"ERC721: approved query for nonexistent token"
);
return _tokenApprovals[tokenId];
}
/**
* @dev Sets or unsets the approval of a given operator
* An operator is allowed to transfer all tokens of the sender on their behalf.
* @param to operator address to set the approval
* @param approved representing the status of the approval to be set
*/
function setApprovalForAll(address to, bool approved) public {
require(to != _msgSender(), "ERC721: approve to caller");
_operatorApprovals[_msgSender()][to] = approved;
emit ApprovalForAll(_msgSender(), to, approved);
}
/**
* @dev Tells whether an operator is approved by a given owner.
* @param owner owner address which you want to query the approval of
* @param operator operator address which you want to query the approval of
* @return bool whether the given operator is approved by the given owner
*/
function isApprovedForAll(address owner, address operator)
public
view
returns (bool)
{
return _operatorApprovals[owner][operator];
}
/**
* @dev Transfers the ownership of a given token ID to another address.
* Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
* Requires the msg.sender to be the owner, approved, or operator.
* @param from current owner of the token
* @param to address to receive the ownership of the given token ID
* @param tokenId uint256 ID of the token to be transferred
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public {
require(
_isApprovedOrOwner(_msgSender(), tokenId),
"ERC721: transfer caller is not owner nor approved"
);
_transferFrom(from, to, tokenId);
}
/**
* @dev Safely transfers the ownership of a given token ID to another address
* If the target address is a contract, it must implement {IERC721Receiver-onERC721Received},
* which is called upon a safe transfer, and return the magic value
* `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
* the transfer is reverted.
* Requires the msg.sender to be the owner, approved, or operator
* @param from current owner of the token
* @param to address to receive the ownership of the given token ID
* @param tokenId uint256 ID of the token to be transferred
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev Safely transfers the ownership of a given token ID to another address
* If the target address is a contract, it must implement {IERC721Receiver-onERC721Received},
* which is called upon a safe transfer, and return the magic value
* `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
* the transfer is reverted.
* Requires the _msgSender() to be the owner, approved, or operator
* @param from current owner of the token
* @param to address to receive the ownership of the given token ID
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes data to send along with a safe transfer check
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public {
require(
_isApprovedOrOwner(_msgSender(), tokenId),
"ERC721: transfer caller is not owner nor approved"
);
_safeTransferFrom(from, to, tokenId, _data);
}
/**
* @dev Function to mint tokens.
* @param to The address that will receive the minted token.
* @return A boolean that indicates if the operation was successful.
*/
function mint(address to) public payable paidMintPrice returns (bool) {
_mint(to);
return true;
}
/**
* @dev Function to safely mint tokens.
* @param to The address that will receive the minted token.
* @return A boolean that indicates if the operation was successful.
*/
function safeMint(address to) public payable paidMintPrice returns (bool) {
_safeMint(to);
return true;
}
/**
* @dev Function to safely mint tokens.
* @param to The address that will receive the minted token.
* @param _data bytes data to send along with a safe transfer check.
* @return A boolean that indicates if the operation was successful.
*/
function safeMint(address to, bytes memory _data)
public
payable
paidMintPrice
returns (bool)
{
_safeMint(to, _data);
return true;
}
/**
* @dev After someone pays for minting tokens, ETH is in the contract.
* With this function any minter can withdraw this ETH to preffered address.
* @param to address to withdraw ETH to
*/
function withdraw(address payable to) public onlyMinter {
to.transfer(address(this).balance);
}
/**
* @dev Gets the token ID at a given index of the tokens list of the requested owner.
* @param owner address owning the tokens list to be accessed
* @param index uint256 representing the index to be accessed of the requested tokens list
* @return uint256 token ID at the given index of the tokens list owned by the requested address
*/
function tokenOfOwnerByIndex(address owner, uint256 index)
public
view
returns (uint256)
{
require(
index < balanceOf(owner),
"ERC721Enumerable: owner index out of bounds"
);
return _ownedTokens[owner][index];
}
/**
* @dev Gets the total amount of tokens stored by the contract.
* @return uint256 representing the total amount of tokens
*/
function totalSupply() public view returns (uint256) {
return _allTokens.length;
}
/**
* @dev Gets the token ID at a given index of all the tokens in this contract
* Reverts if the index is greater or equal to the total number of tokens.
* @param index uint256 representing the index to be accessed of the tokens list
* @return uint256 token ID at the given index of the tokens list
*/
function tokenByIndex(uint256 index) public view returns (uint256) {
require(
index < totalSupply(),
"ERC721Enumerable: global index out of bounds"
);
return _allTokens[index];
}
/**
* @dev Safely transfers the ownership of a given token ID to another address
* If the target address is a contract, it must implement `onERC721Received`,
* which is called upon a safe transfer, and return the magic value
* `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
* the transfer is reverted.
* Requires the msg.sender to be the owner, approved, or operator
* @param from current owner of the token
* @param to address to receive the ownership of the given token ID
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes data to send along with a safe transfer check
*/
function _safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal {
_transferFrom(from, to, tokenId);
require(
_checkOnERC721Received(from, to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Returns whether the specified token exists.
* @param tokenId uint256 ID of the token to query the existence of
* @return bool whether the token exists
*/
function _exists(uint256 tokenId) internal view returns (bool) {
address owner = _tokenOwner[tokenId];
return owner != address(0);
}
/**
* @dev Returns whether the given spender can transfer a given token ID.
* @param spender address of the spender to query
* @param tokenId uint256 ID of the token to be transferred
* @return bool whether the msg.sender is approved for the given token ID,
* is an operator of the owner, or is the owner of the token
*/
function _isApprovedOrOwner(address spender, uint256 tokenId)
internal
view
returns (bool)
{
require(
_exists(tokenId),
"ERC721: operator query for nonexistent token"
);
address owner = ownerOf(tokenId);
return (spender == owner ||
getApproved(tokenId) == spender ||
isApprovedForAll(owner, spender));
}
/**
* @dev Internal function to safely mint a new token.
* Reverts if the given token ID already exists.
* If the target address is a contract, it must implement `onERC721Received`,
* which is called upon a safe transfer, and return the magic value
* `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
* the transfer is reverted.
* @param to The address that will own the minted token
*/
function _safeMint(address to) internal {
_safeMint(to, "");
}
/**
* @dev Internal function to safely mint a new token.
* Reverts if the given token ID already exists.
* If the target address is a contract, it must implement `onERC721Received`,
* which is called upon a safe transfer, and return the magic value
* `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
* the transfer is reverted.
* @param to The address that will own the minted token
* @param _data bytes data to send along with a safe transfer check
*/
function _safeMint(address to, bytes memory _data) internal {
uint256 tokenId = _mint(to);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Internal function to mint a new token.
* Reverts if the given token ID already exists.
* @param to The address that will own the minted token
*/
function _mint(address to) internal returns (uint256) {
uint256 tokenId = totalSupply() + 1;
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_tokenOwner[tokenId] = to;
_ownedTokensCount[to].increment();
_addTokenToOwnerEnumeration(to, tokenId);
_addTokenToAllTokensEnumeration(tokenId);
emit Transfer(address(0), to, tokenId);
return tokenId;
}
/**
* @dev Internal function to transfer ownership of a given token ID to another address.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
* @param from current owner of the token
* @param to address to receive the ownership of the given token ID
* @param tokenId uint256 ID of the token to be transferred
*/
function _transferFrom(
address from,
address to,
uint256 tokenId
) internal {
require(
ownerOf(tokenId) == from,
"ERC721: transfer of token that is not own"
);
require(to != address(0), "ERC721: transfer to the zero address");
_clearApproval(tokenId);
_tokenPrices[tokenId] = 0;
_ownedTokensCount[from].decrement();
_ownedTokensCount[to].increment();
_tokenOwner[tokenId] = to;
_removeTokenFromOwnerEnumeration(from, tokenId);
_addTokenToOwnerEnumeration(to, tokenId);
emit Transfer(from, to, tokenId);
}
/**
* @dev Gets the list of token IDs of the requested owner.
* @param owner address owning the tokens
* @return uint256[] List of token IDs owned by the requested address
*/
function tokensOfOwner(address owner)
public
view
returns (uint256[] memory)
{
return _ownedTokens[owner];
}
/**
* @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 {
_ownedTokensIndex[tokenId] = _ownedTokens[to].length;
_ownedTokens[to].push(tokenId);
}
/**
* @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 = _ownedTokens[from].length.sub(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
_ownedTokens[from].length--;
// Note that _ownedTokensIndex[tokenId] hasn't been cleared: it still points to the old slot (now occupied by
// lastTokenId, or just over the end of the array if the token was the last one).
}
/**
* @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.sub(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
_allTokens.length--;
_allTokensIndex[tokenId] = 0;
}
/**
* @dev Internal function to set the token URI for a given token.
*
* Reverts if the token ID does not exist.
*
* TIP: if all token IDs share a prefix (e.g. if your URIs look like
* `http://api.myproject.com/token/<id>`), use {_setBaseURI} to store
* it and save gas.
*/
function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal {
require(
_exists(tokenId),
"ERC721Metadata: URI set of nonexistent token"
);
_tokenURIs[tokenId] = _tokenURI;
}
/**
* @dev Internal function to set the base URI for all token IDs. It is
* automatically added as a prefix to the value returned in {tokenURI}.
*
* _Available since v2.5.0._
*/
function _setBaseURI(string memory baseURI) internal {
_baseURI = baseURI;
}
/**
* @dev Returns the base URI set via {_setBaseURI}. This will be
* automatically added as a preffix in {tokenURI} to each token's URI, when
* they are non-empty.
*
* _Available since v2.5.0._
*/
function baseURI() external view returns (string memory) {
return _baseURI;
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* This is an internal detail of the `ERC721` contract and its use is deprecated.
* @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
) internal returns (bool) {
if (!to.isContract()) {
return true;
}
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = to.call(
abi.encodeWithSelector(
IERC721Receiver(to).onERC721Received.selector,
_msgSender(),
from,
tokenId,
_data
)
);
if (!success) {
if (returndata.length > 0) {
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert("ERC721: transfer to non ERC721Receiver implementer");
}
} else {
bytes4 retval = abi.decode(returndata, (bytes4));
return (retval == _ERC721_RECEIVED);
}
}
/**
* @dev Private function to clear current approval of a given token ID.
* @param tokenId uint256 ID of the token to be transferred
*/
function _clearApproval(uint256 tokenId) private {
if (_tokenApprovals[tokenId] != address(0)) {
_tokenApprovals[tokenId] = address(0);
}
}
}
pragma solidity ^0.5.0;
/**
* @dev Collection of functions related to the address type,
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* This test is non-exhaustive, and there may be false-negatives: during the
* execution of a contract's constructor, its address will be reported as
* not containing a contract.
*
* > It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*/
function isContract(address account) internal view returns (bool) {
// This method relies in extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly {
size := extcodesize(account)
}
return size > 0;
}
}
pragma solidity ^0.5.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 GSN 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.
*/
contract Context {
// Empty internal constructor, to prevent people from mistakenly deploying
// an instance of this contract, which should be used via inheritance.
constructor() internal {}
// solhint-disable-previous-line no-empty-blocks
function _msgSender() internal view returns (address payable) {
return msg.sender;
}
function _msgData() internal view returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
pragma solidity ^0.5.0;
import "./SafeMath.sol";
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
* Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath}
* overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never
* directly accessed.
*/
library Counters {
using SafeMath for uint256;
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
// The {SafeMath} overflow check can be skipped here, see the comment at the top
counter._value += 1;
}
function decrement(Counter storage counter) internal {
counter._value = counter._value.sub(1);
}
}
pragma solidity ^0.5.0;
import "./IERC165.sol";
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts may inherit from this and call {_registerInterface} to declare
* their support of an interface.
*/
contract ERC165 is IERC165 {
/*
* bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7
*/
bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
/**
* @dev Mapping of interface ids to whether or not it's supported.
*/
mapping(bytes4 => bool) private _supportedInterfaces;
constructor() internal {
// Derived contracts need only register support for their own interfaces,
// we register support for ERC165 itself here
_registerInterface(_INTERFACE_ID_ERC165);
}
/**
* @dev See {IERC165-supportsInterface}.
*
* Time complexity O(1), guaranteed to always use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId)
external
view
returns (bool)
{
return _supportedInterfaces[interfaceId];
}
/**
* @dev Registers the contract as an implementer of the interface defined by
* `interfaceId`. Support of the actual ERC165 interface is automatic and
* registering its interface id is not required.
*
* See {IERC165-supportsInterface}.
*
* Requirements:
*
* - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).
*/
function _registerInterface(bytes4 interfaceId) internal {
require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
_supportedInterfaces[interfaceId] = true;
}
}
pragma solidity ^0.5.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);
}
pragma solidity ^0.5.0;
import "./IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
contract IERC721 is IERC165 {
event Transfer(
address indexed from,
address indexed to,
uint256 indexed tokenId
);
event Approval(
address indexed owner,
address indexed approved,
uint256 indexed tokenId
);
event ApprovalForAll(
address indexed owner,
address indexed operator,
bool approved
);
/**
* @dev Returns the number of NFTs in ``owner``'s account.
*/
function balanceOf(address owner) public view returns (uint256 balance);
/**
* @dev Returns the owner of the NFT specified by `tokenId`.
*/
function ownerOf(uint256 tokenId) public view returns (address owner);
/**
* @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to
* another (`to`).
*
*
*
* Requirements:
* - `from`, `to` cannot be zero.
* - `tokenId` must be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this
* NFT by either {approve} or {setApprovalForAll}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public;
/**
* @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to
* another (`to`).
*
* Requirements:
* - If the caller is not `from`, it must be approved to move this NFT by
* either {approve} or {setApprovalForAll}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public;
function approve(address to, uint256 tokenId) public;
function getApproved(uint256 tokenId)
public
view
returns (address operator);
function setApprovalForAll(address operator, bool _approved) public;
function isApprovedForAll(address owner, address operator)
public
view
returns (bool);
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory data
) public;
}
pragma solidity ^0.5.0;
import "./IERC721.sol";
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
contract IERC721Enumerable is IERC721 {
function totalSupply() public view returns (uint256);
function tokenOfOwnerByIndex(address owner, uint256 index)
public
view
returns (uint256 tokenId);
function tokenByIndex(uint256 index) public view returns (uint256);
}
pragma solidity ^0.5.0;
import "./IERC721.sol";
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
contract IERC721Metadata is IERC721 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function tokenURI(uint256 tokenId) external view returns (string memory);
}
pragma solidity ^0.5.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
contract IERC721Receiver {
/**
* @notice Handle the receipt of an NFT
* @dev The ERC721 smart contract calls this function on the recipient
* after a {IERC721-safeTransferFrom}. This function MUST return the function selector,
* otherwise the caller will revert the transaction. The selector to be
* returned can be obtained as `this.onERC721Received.selector`. This
* function MAY throw to revert and reject the transfer.
* Note: the ERC721 contract address is always the message sender.
* @param operator The address which called `safeTransferFrom` function
* @param from The address which previously owned the token
* @param tokenId The NFT identifier which is being transferred
* @param data Additional data with no specified format
* @return bytes4 `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes memory data
) public returns (bytes4);
}
pragma solidity ^0.5.0;
import "./Context.sol";
import "./Roles.sol";
contract MinterRole is Context {
using Roles for Roles.Role;
event MinterAdded(address indexed account);
event MinterRemoved(address indexed account);
Roles.Role private _minters;
constructor() internal {
_addMinter(_msgSender());
}
modifier onlyMinter() {
require(
isMinter(_msgSender()),
"MinterRole: caller does not have the Minter role"
);
_;
}
function isMinter(address account) public view returns (bool) {
return _minters.has(account);
}
function addMinter(address account) public onlyMinter {
_addMinter(account);
}
function renounceMinter() public {
_removeMinter(_msgSender());
}
function _addMinter(address account) internal {
_minters.add(account);
emit MinterAdded(account);
}
function _removeMinter(address account) internal {
_minters.remove(account);
emit MinterRemoved(account);
}
}
pragma solidity ^0.5.0;
/**
* @title Roles
* @dev Library for managing addresses assigned to a Role.
*/
library Roles {
struct Role {
mapping(address => bool) bearer;
}
/**
* @dev Give an account access to this role.
*/
function add(Role storage role, address account) internal {
require(!has(role, account), "Roles: account already has role");
role.bearer[account] = true;
}
/**
* @dev Remove an account's access to this role.
*/
function remove(Role storage role, address account) internal {
require(has(role, account), "Roles: account does not have role");
role.bearer[account] = false;
}
/**
* @dev Check if an account has this role.
* @return bool
*/
function has(Role storage role, address account)
internal
view
returns (bool)
{
require(account != address(0), "Roles: account is the zero address");
return role.bearer[account];
}
}
pragma solidity ^0.5.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*
* _Available since v2.4.0._
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"payable":false,"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":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterRemoved","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"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"buyToken","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"safeMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newMintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setTokenPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405267016345785d8a0000600e553480156200001d57600080fd5b5060405162003f4238038062003f42833981810160405260408110156200004357600080fd5b81019080805160405193929190846401000000008211156200006457600080fd5b838201915060208201858111156200007b57600080fd5b82518660018202830111640100000000821117156200009957600080fd5b8083526020830192505050908051906020019080838360005b83811015620000cf578082015181840152602081019050620000b2565b50505050905090810190601f168015620000fd5780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200012157600080fd5b838201915060208201858111156200013857600080fd5b82518660018202830111640100000000821117156200015657600080fd5b8083526020830192505050908051906020019080838360005b838110156200018c5780820151818401526020810190506200016f565b50505050905090810190601f168015620001ba5780820380516001836020036101000a031916815260200191505b50604052505050620001d96301ffc9a760e01b6200027b60201b60201c565b620001f9620001ed6200038460201b60201c565b6200038c60201b60201c565b81600a908051906020019062000211929190620005b1565b5080600b90805190602001906200022a929190620005b1565b50620002436380ac58cd60e01b6200027b60201b60201c565b6200025b63780e9d6360e01b6200027b60201b60201c565b62000273635b5e139f60e01b6200027b60201b60201c565b505062000660565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141562000318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b620003a7816001620003ed60201b620032121790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b620003ff8282620004d160201b60201c565b1562000473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200055a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018062003f206022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005f457805160ff191683800117855562000625565b8280016001018555821562000625579182015b828111156200062457825182559160200191906001019062000607565b5b50905062000634919062000638565b5090565b6200065d91905b80821115620006595760008160009055506001016200063f565b5090565b90565b6138b080620006706000396000f3fe6080604052600436106101cd5760003560e01c806370a08231116100f7578063a7f93ebd11610095578063c87b56dd11610064578063c87b56dd14610d13578063e985e9c514610dc7578063eb685c4714610e50578063f4a0a52814610e95576101cd565b8063a7f93ebd14610b1e578063aa271e1a14610b49578063b88d4fde14610bb2578063c457fb3714610cc4576101cd565b806395d89b41116100d157806395d89b41146109c9578063983b2d5614610a595780639865027514610aaa578063a22cb46514610ac1576101cd565b806370a08231146107cb578063785bb03e146108305780638462151c14610923576101cd565b80632f745c591161016f57806351cff8d91161013e57806351cff8d9146106135780636352211e146106645780636a627842146106df5780636c0360eb1461073b576101cd565b80632f745c591461047e57806340d097c3146104ed57806342842e0e146105495780634f6ccce7146105c4576101cd565b8063095ea7b3116101ab578063095ea7b31461034f57806318160ddd146103aa57806323b872dd146103d55780632d296bf114610450576101cd565b806301ffc9a7146101d257806306fdde0314610244578063081812fc146102d4575b600080fd5b3480156101de57600080fd5b5061022a600480360360208110156101f557600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610ed0565b604051808215151515815260200191505060405180910390f35b34801561025057600080fd5b50610259610f37565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561029957808201518184015260208101905061027e565b50505050905090810190601f1680156102c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102e057600080fd5b5061030d600480360360208110156102f757600080fd5b8101908080359060200190929190505050610fd9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561035b57600080fd5b506103a86004803603604081101561037257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611074565b005b3480156103b657600080fd5b506103bf61125b565b6040518082815260200191505060405180910390f35b3480156103e157600080fd5b5061044e600480360360608110156103f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611268565b005b61047c6004803603602081101561046657600080fd5b81019080803590602001909291905050506112de565b005b34801561048a57600080fd5b506104d7600480360360408110156104a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114c0565b6040518082815260200191505060405180910390f35b61052f6004803603602081101561050357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061157f565b604051808215151515815260200191505060405180910390f35b34801561055557600080fd5b506105c26004803603606081101561056c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611604565b005b3480156105d057600080fd5b506105fd600480360360208110156105e757600080fd5b8101908080359060200190929190505050611624565b6040518082815260200191505060405180910390f35b34801561061f57600080fd5b506106626004803603602081101561063657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116a4565b005b34801561067057600080fd5b5061069d6004803603602081101561068757600080fd5b8101908080359060200190929190505050611753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610721600480360360208110156106f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061181b565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b506107506118a1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610790578082015181840152602081019050610775565b50505050905090810190601f1680156107bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156107d757600080fd5b5061081a600480360360208110156107ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611943565b6040518082815260200191505060405180910390f35b6109096004803603604081101561084657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561088357600080fd5b82018360208201111561089557600080fd5b803590602001918460018302840111640100000000831117156108b757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611a18565b604051808215151515815260200191505060405180910390f35b34801561092f57600080fd5b506109726004803603602081101561094657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a9f565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156109b557808201518184015260208101905061099a565b505050509050019250505060405180910390f35b3480156109d557600080fd5b506109de611b36565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a1e578082015181840152602081019050610a03565b50505050905090810190601f168015610a4b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a6557600080fd5b50610aa860048036036020811015610a7c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bd8565b005b348015610ab657600080fd5b50610abf611c49565b005b348015610acd57600080fd5b50610b1c60048036036040811015610ae457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611c5b565b005b348015610b2a57600080fd5b50610b33611e13565b6040518082815260200191505060405180910390f35b348015610b5557600080fd5b50610b9860048036036020811015610b6c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e1d565b604051808215151515815260200191505060405180910390f35b348015610bbe57600080fd5b50610cc260048036036080811015610bd557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610c3c57600080fd5b820183602082011115610c4e57600080fd5b80359060200191846001830284011164010000000083111715610c7057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611e3a565b005b348015610cd057600080fd5b50610cfd60048036036020811015610ce757600080fd5b8101908080359060200190929190505050611eb2565b6040518082815260200191505060405180910390f35b348015610d1f57600080fd5b50610d4c60048036036020811015610d3657600080fd5b8101908080359060200190929190505050611ecf565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d8c578082015181840152602081019050610d71565b50505050905090810190601f168015610db95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610dd357600080fd5b50610e3660048036036040811015610dea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120d1565b604051808215151515815260200191505060405180910390f35b348015610e5c57600080fd5b50610e9360048036036040811015610e7357600080fd5b810190808035906020019092919080359060200190929190505050612165565b005b348015610ea157600080fd5b50610ece60048036036020811015610eb857600080fd5b81019080803590602001909291905050506121e7565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fcf5780601f10610fa457610100808354040283529160200191610fcf565b820191906000526020600020905b815481529060010190602001808311610fb257829003601f168201915b5050505050905090565b6000610fe482612256565b611039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613732602c913960400191505060405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061107f82611753565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806137fe6021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166111256122c8565b73ffffffffffffffffffffffffffffffffffffffff16148061115457506111538161114e6122c8565b6120d1565b5b6111a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603881526020018061362e6038913960400191505060405180910390fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000600880549050905090565b6112796112736122c8565b826122d0565b6112ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061381f6031913960400191505060405180910390fd5b6112d98383836123c4565b505050565b60006112e982611eb2565b905060008111611361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4552433732313a20746f6b656e206e6f7420666f722073616c6500000000000081525060200191505060405180910390fd5b600061136c83611753565b90508073ffffffffffffffffffffffffffffffffffffffff1661138d6122c8565b73ffffffffffffffffffffffffffffffffffffffff1614156113fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806137a96026913960400191505060405180910390fd5b813414611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613601602d913960400191505060405180910390fd5b6114748161145e6122c8565b856040518060200160405280600081525061264c565b8073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156114ba573d6000803e3d6000fd5b50505050565b60006114cb83611943565b8210611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613519602b913960400191505060405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061156c57fe5b9060005260206000200154905092915050565b6000600e5434148061159d575061159c6115976122c8565b611e1d565b5b6115f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180613576603b913960400191505060405180910390fd5b6115fb826126be565b60019050919050565b61161f83838360405180602001604052806000815250611e3a565b505050565b600061162e61125b565b8210611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613850602c913960400191505060405180910390fd5b6008828154811061169257fe5b90600052602060002001549050919050565b6116b46116af6122c8565b611e1d565b611709576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806136b96030913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561174f573d6000803e3d6000fd5b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136906029913960400191505060405180910390fd5b80915050919050565b6000600e5434148061183957506118386118336122c8565b611e1d565b5b61188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180613576603b913960400191505060405180910390fd5b611897826126da565b5060019050919050565b6060600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119395780601f1061190e57610100808354040283529160200191611939565b820191906000526020600020905b81548152906001019060200180831161191c57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613666602a913960400191505060405180910390fd5b611a11600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061291a565b9050919050565b6000600e54341480611a365750611a35611a306122c8565b611e1d565b5b611a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180613576603b913960400191505060405180910390fd5b611a958383612928565b6001905092915050565b6060600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611b2a57602002820191906000526020600020905b815481526020019060010190808311611b16575b50505050509050919050565b6060600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611bce5780601f10611ba357610100808354040283529160200191611bce565b820191906000526020600020905b815481529060010190602001808311611bb157829003601f168201915b5050505050905090565b611be8611be36122c8565b611e1d565b611c3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806136b96030913960400191505060405180910390fd5b611c468161299c565b50565b611c59611c546122c8565b6129f6565b565b611c636122c8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060056000611d116122c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611dbe6122c8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b6000600e54905090565b6000611e33826001612a5090919063ffffffff16565b9050919050565b611e4b611e456122c8565b836122d0565b611ea0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061381f6031913960400191505060405180910390fd5b611eac8484848461264c565b50505050565b6000600f6000838152602001908152602001600020549050919050565b6060611eda82612256565b611f2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806137cf602f913960400191505060405180910390fd5b6060600d60008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fd85780601f10611fad57610100808354040283529160200191611fd8565b820191906000526020600020905b815481529060010190602001808311611fbb57829003601f168201915b5050505050905060008151141561200157604051806020016040528060008152509150506120cc565b600c8160405160200180838054600181600116156101000203166002900480156120625780601f10612040576101008083540402835291820191612062565b820191906000526020600020905b81548152906001019060200180831161204e575b505082805190602001908083835b602083106120935780518252602082019150602081019050602083039250612070565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121766121706122c8565b836122d0565b6121cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061370a6028913960400191505060405180910390fd5b80600f6000848152602001908152602001600020819055505050565b6121f76121f26122c8565b611e1d565b61224c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806136b96030913960400191505060405180910390fd5b80600e8190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b60006122db82612256565b612330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135d5602c913960400191505060405180910390fd5b600061233b83611753565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123aa57508373ffffffffffffffffffffffffffffffffffffffff1661239284610fd9565b73ffffffffffffffffffffffffffffffffffffffff16145b806123bb57506123ba81856120d1565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123e482611753565b73ffffffffffffffffffffffffffffffffffffffff1614612450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806137806029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806135b16024913960400191505060405180910390fd5b6124df81612b2e565b6000600f60008381526020019081526020016000208190555061253f600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612bec565b612586600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612c0f565b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506125e28382612c25565b6125ec8282612dc3565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6126578484846123c4565b61266384848484612e8a565b6126b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135446032913960400191505060405180910390fd5b50505050565b6126d78160405180602001604052806000815250612928565b50565b60008060016126e761125b565b019050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561278d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61279681612256565b15612809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b826002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506128a2600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612c0f565b6128ac8382612dc3565b6128b5816131c6565b808373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480915050919050565b600081600001549050919050565b6000612933836126da565b90506129426000848385612e8a565b612997576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135446032913960400191505060405180910390fd5b505050565b6129b081600161321290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b612a0a8160016132ed90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ad7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061375e6022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612be95760006003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b612c04600182600001546133aa90919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b6000612c7d6001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506133aa90919063ffffffff16565b9050600060076000848152602001908152602001600020549050818114612d6a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612cea57fe5b9060005260206000200154905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612d4257fe5b9060005260206000200181905550816007600083815260200190815260200160002081905550505b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612dbc91906134c7565b5050505050565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506007600083815260200190815260200160002081905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612eab8473ffffffffffffffffffffffffffffffffffffffff166133f4565b612eb857600190506131be565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612efc6122c8565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612fac578082015181840152602081019050612f91565b50505050905090810190601f168015612fd95780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310613071578051825260208201915060208101905060208303925061304e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130d3576040519150601f19603f3d011682016040523d82523d6000602084013e6130d8565b606091505b509150915081613146576000815111156130f55780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135446032913960400191505060405180910390fd5b600081806020019051602081101561315d57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b61321c8282612a50565b1561328f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6132f78282612a50565b61334c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136e96021913960400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006133ec83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613407565b905092915050565b600080823b905060008111915050919050565b60008383111582906134b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561347957808201518184015260208101905061345e565b50505050905090810190601f1680156134a65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b8154818355818111156134ee578183600052602060002091820191016134ed91906134f3565b5b505050565b61351591905b808211156135115760008160009055506001016134f9565b5090565b9056fe455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a2063616c6c6572206973206e6f74206d696e746572206e6f7220686173207061696420746865206d696e74696e672070726963654552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207061696420707269636520646f65736e277420657175616c206e65656465642070726963654552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c654552433732313a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e526f6c65733a206163636f756e7420697320746865207a65726f20616464726573734552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a2063616e27742062757920616c7265616479206f776e656420746f6b656e734552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a723158201f911a5dcd6d0541f31d284544bdec097b4dbb9506e9ef7ad60bc5b8a5b095ca64736f6c63430005110032526f6c65733a206163636f756e7420697320746865207a65726f206164647265737300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001743727970746f204279746520436f6c6c65637469626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000044352424300000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c806370a08231116100f7578063a7f93ebd11610095578063c87b56dd11610064578063c87b56dd14610d13578063e985e9c514610dc7578063eb685c4714610e50578063f4a0a52814610e95576101cd565b8063a7f93ebd14610b1e578063aa271e1a14610b49578063b88d4fde14610bb2578063c457fb3714610cc4576101cd565b806395d89b41116100d157806395d89b41146109c9578063983b2d5614610a595780639865027514610aaa578063a22cb46514610ac1576101cd565b806370a08231146107cb578063785bb03e146108305780638462151c14610923576101cd565b80632f745c591161016f57806351cff8d91161013e57806351cff8d9146106135780636352211e146106645780636a627842146106df5780636c0360eb1461073b576101cd565b80632f745c591461047e57806340d097c3146104ed57806342842e0e146105495780634f6ccce7146105c4576101cd565b8063095ea7b3116101ab578063095ea7b31461034f57806318160ddd146103aa57806323b872dd146103d55780632d296bf114610450576101cd565b806301ffc9a7146101d257806306fdde0314610244578063081812fc146102d4575b600080fd5b3480156101de57600080fd5b5061022a600480360360208110156101f557600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610ed0565b604051808215151515815260200191505060405180910390f35b34801561025057600080fd5b50610259610f37565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561029957808201518184015260208101905061027e565b50505050905090810190601f1680156102c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102e057600080fd5b5061030d600480360360208110156102f757600080fd5b8101908080359060200190929190505050610fd9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561035b57600080fd5b506103a86004803603604081101561037257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611074565b005b3480156103b657600080fd5b506103bf61125b565b6040518082815260200191505060405180910390f35b3480156103e157600080fd5b5061044e600480360360608110156103f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611268565b005b61047c6004803603602081101561046657600080fd5b81019080803590602001909291905050506112de565b005b34801561048a57600080fd5b506104d7600480360360408110156104a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114c0565b6040518082815260200191505060405180910390f35b61052f6004803603602081101561050357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061157f565b604051808215151515815260200191505060405180910390f35b34801561055557600080fd5b506105c26004803603606081101561056c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611604565b005b3480156105d057600080fd5b506105fd600480360360208110156105e757600080fd5b8101908080359060200190929190505050611624565b6040518082815260200191505060405180910390f35b34801561061f57600080fd5b506106626004803603602081101561063657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116a4565b005b34801561067057600080fd5b5061069d6004803603602081101561068757600080fd5b8101908080359060200190929190505050611753565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610721600480360360208110156106f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061181b565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b506107506118a1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610790578082015181840152602081019050610775565b50505050905090810190601f1680156107bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156107d757600080fd5b5061081a600480360360208110156107ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611943565b6040518082815260200191505060405180910390f35b6109096004803603604081101561084657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561088357600080fd5b82018360208201111561089557600080fd5b803590602001918460018302840111640100000000831117156108b757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611a18565b604051808215151515815260200191505060405180910390f35b34801561092f57600080fd5b506109726004803603602081101561094657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a9f565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156109b557808201518184015260208101905061099a565b505050509050019250505060405180910390f35b3480156109d557600080fd5b506109de611b36565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a1e578082015181840152602081019050610a03565b50505050905090810190601f168015610a4b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a6557600080fd5b50610aa860048036036020811015610a7c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bd8565b005b348015610ab657600080fd5b50610abf611c49565b005b348015610acd57600080fd5b50610b1c60048036036040811015610ae457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611c5b565b005b348015610b2a57600080fd5b50610b33611e13565b6040518082815260200191505060405180910390f35b348015610b5557600080fd5b50610b9860048036036020811015610b6c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e1d565b604051808215151515815260200191505060405180910390f35b348015610bbe57600080fd5b50610cc260048036036080811015610bd557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610c3c57600080fd5b820183602082011115610c4e57600080fd5b80359060200191846001830284011164010000000083111715610c7057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611e3a565b005b348015610cd057600080fd5b50610cfd60048036036020811015610ce757600080fd5b8101908080359060200190929190505050611eb2565b6040518082815260200191505060405180910390f35b348015610d1f57600080fd5b50610d4c60048036036020811015610d3657600080fd5b8101908080359060200190929190505050611ecf565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d8c578082015181840152602081019050610d71565b50505050905090810190601f168015610db95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610dd357600080fd5b50610e3660048036036040811015610dea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120d1565b604051808215151515815260200191505060405180910390f35b348015610e5c57600080fd5b50610e9360048036036040811015610e7357600080fd5b810190808035906020019092919080359060200190929190505050612165565b005b348015610ea157600080fd5b50610ece60048036036020811015610eb857600080fd5b81019080803590602001909291905050506121e7565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fcf5780601f10610fa457610100808354040283529160200191610fcf565b820191906000526020600020905b815481529060010190602001808311610fb257829003601f168201915b5050505050905090565b6000610fe482612256565b611039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613732602c913960400191505060405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061107f82611753565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806137fe6021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166111256122c8565b73ffffffffffffffffffffffffffffffffffffffff16148061115457506111538161114e6122c8565b6120d1565b5b6111a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603881526020018061362e6038913960400191505060405180910390fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000600880549050905090565b6112796112736122c8565b826122d0565b6112ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061381f6031913960400191505060405180910390fd5b6112d98383836123c4565b505050565b60006112e982611eb2565b905060008111611361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4552433732313a20746f6b656e206e6f7420666f722073616c6500000000000081525060200191505060405180910390fd5b600061136c83611753565b90508073ffffffffffffffffffffffffffffffffffffffff1661138d6122c8565b73ffffffffffffffffffffffffffffffffffffffff1614156113fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806137a96026913960400191505060405180910390fd5b813414611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613601602d913960400191505060405180910390fd5b6114748161145e6122c8565b856040518060200160405280600081525061264c565b8073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156114ba573d6000803e3d6000fd5b50505050565b60006114cb83611943565b8210611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613519602b913960400191505060405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061156c57fe5b9060005260206000200154905092915050565b6000600e5434148061159d575061159c6115976122c8565b611e1d565b5b6115f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180613576603b913960400191505060405180910390fd5b6115fb826126be565b60019050919050565b61161f83838360405180602001604052806000815250611e3a565b505050565b600061162e61125b565b8210611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613850602c913960400191505060405180910390fd5b6008828154811061169257fe5b90600052602060002001549050919050565b6116b46116af6122c8565b611e1d565b611709576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806136b96030913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561174f573d6000803e3d6000fd5b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136906029913960400191505060405180910390fd5b80915050919050565b6000600e5434148061183957506118386118336122c8565b611e1d565b5b61188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180613576603b913960400191505060405180910390fd5b611897826126da565b5060019050919050565b6060600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119395780601f1061190e57610100808354040283529160200191611939565b820191906000526020600020905b81548152906001019060200180831161191c57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613666602a913960400191505060405180910390fd5b611a11600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061291a565b9050919050565b6000600e54341480611a365750611a35611a306122c8565b611e1d565b5b611a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180613576603b913960400191505060405180910390fd5b611a958383612928565b6001905092915050565b6060600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611b2a57602002820191906000526020600020905b815481526020019060010190808311611b16575b50505050509050919050565b6060600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611bce5780601f10611ba357610100808354040283529160200191611bce565b820191906000526020600020905b815481529060010190602001808311611bb157829003601f168201915b5050505050905090565b611be8611be36122c8565b611e1d565b611c3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806136b96030913960400191505060405180910390fd5b611c468161299c565b50565b611c59611c546122c8565b6129f6565b565b611c636122c8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b8060056000611d116122c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611dbe6122c8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b6000600e54905090565b6000611e33826001612a5090919063ffffffff16565b9050919050565b611e4b611e456122c8565b836122d0565b611ea0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061381f6031913960400191505060405180910390fd5b611eac8484848461264c565b50505050565b6000600f6000838152602001908152602001600020549050919050565b6060611eda82612256565b611f2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806137cf602f913960400191505060405180910390fd5b6060600d60008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fd85780601f10611fad57610100808354040283529160200191611fd8565b820191906000526020600020905b815481529060010190602001808311611fbb57829003601f168201915b5050505050905060008151141561200157604051806020016040528060008152509150506120cc565b600c8160405160200180838054600181600116156101000203166002900480156120625780601f10612040576101008083540402835291820191612062565b820191906000526020600020905b81548152906001019060200180831161204e575b505082805190602001908083835b602083106120935780518252602082019150602081019050602083039250612070565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121766121706122c8565b836122d0565b6121cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061370a6028913960400191505060405180910390fd5b80600f6000848152602001908152602001600020819055505050565b6121f76121f26122c8565b611e1d565b61224c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806136b96030913960400191505060405180910390fd5b80600e8190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b60006122db82612256565b612330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806135d5602c913960400191505060405180910390fd5b600061233b83611753565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123aa57508373ffffffffffffffffffffffffffffffffffffffff1661239284610fd9565b73ffffffffffffffffffffffffffffffffffffffff16145b806123bb57506123ba81856120d1565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123e482611753565b73ffffffffffffffffffffffffffffffffffffffff1614612450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806137806029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806135b16024913960400191505060405180910390fd5b6124df81612b2e565b6000600f60008381526020019081526020016000208190555061253f600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612bec565b612586600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612c0f565b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506125e28382612c25565b6125ec8282612dc3565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6126578484846123c4565b61266384848484612e8a565b6126b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135446032913960400191505060405180910390fd5b50505050565b6126d78160405180602001604052806000815250612928565b50565b60008060016126e761125b565b019050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561278d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61279681612256565b15612809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b826002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506128a2600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612c0f565b6128ac8382612dc3565b6128b5816131c6565b808373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480915050919050565b600081600001549050919050565b6000612933836126da565b90506129426000848385612e8a565b612997576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135446032913960400191505060405180910390fd5b505050565b6129b081600161321290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b612a0a8160016132ed90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ad7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061375e6022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612be95760006003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b612c04600182600001546133aa90919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b6000612c7d6001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506133aa90919063ffffffff16565b9050600060076000848152602001908152602001600020549050818114612d6a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612cea57fe5b9060005260206000200154905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110612d4257fe5b9060005260206000200181905550816007600083815260200190815260200160002081905550505b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612dbc91906134c7565b5050505050565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506007600083815260200190815260200160002081905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b6000612eab8473ffffffffffffffffffffffffffffffffffffffff166133f4565b612eb857600190506131be565b600060608573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663150b7a02905060e01b612efc6122c8565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612fac578082015181840152602081019050612f91565b50505050905090810190601f168015612fd95780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310613071578051825260208201915060208101905060208303925061304e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130d3576040519150601f19603f3d011682016040523d82523d6000602084013e6130d8565b606091505b509150915081613146576000815111156130f55780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806135446032913960400191505060405180910390fd5b600081806020019051602081101561315d57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b61321c8282612a50565b1561328f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6132f78282612a50565b61334c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136e96021913960400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006133ec83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613407565b905092915050565b600080823b905060008111915050919050565b60008383111582906134b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561347957808201518184015260208101905061345e565b50505050905090810190601f1680156134a65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b8154818355818111156134ee578183600052602060002091820191016134ed91906134f3565b5b505050565b61351591905b808211156135115760008160009055506001016134f9565b5090565b9056fe455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a2063616c6c6572206973206e6f74206d696e746572206e6f7220686173207061696420746865206d696e74696e672070726963654552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207061696420707269636520646f65736e277420657175616c206e65656465642070726963654552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c654552433732313a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e526f6c65733a206163636f756e7420697320746865207a65726f20616464726573734552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a2063616e27742062757920616c7265616479206f776e656420746f6b656e734552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a723158201f911a5dcd6d0541f31d284544bdec097b4dbb9506e9ef7ad60bc5b8a5b095ca64736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001743727970746f204279746520436f6c6c65637469626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000044352424300000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Crypto Byte Collectible
Arg [1] : symbol (string): CRBC
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [3] : 43727970746f204279746520436f6c6c65637469626c65000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 4352424300000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
438:29791:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;946:167:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;946:167:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;946:167:4;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5752:85:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5752:85:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5752:85:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10105:241;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10105:241:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10105:241:3;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9373:439;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9373:439:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9373:439:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16410:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16410:96:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11857:310;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11857:310:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11857:310:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8351:591;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8351:591:3;;;;;;;;;;;;;;;;;:::i;:::-;;15950:301;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15950:301:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15950:301:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14621:128;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14621:128:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12829:168;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12829:168:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12829:168:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16852:236;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16852:236:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16852:236:3;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15459:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15459:109:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15459:109:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;5376:265;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5376:265:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5376:265:3;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14290:120;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14290:120:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27984:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27984:91:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;27984:91:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4902:248;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4902:248:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4902:248:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15034:196;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15034:196:3;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;15034:196:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;15034:196:3;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;15034:196:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;15034:196:3;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22675:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22675:154:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22675:154:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;22675:154:3;;;;;;;;;;;;;;;;;5952:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5952:89:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5952:89:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;660:92:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;660:92:10;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;660:92:10;;;;;;;;;;;;;;;;;;;:::i;:::-;;760:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;760:79:10;;;:::i;:::-;;10647:254:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10647:254:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10647:254:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7058:90;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7058:90:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;543:109:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;543:109:10;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;543:109:10;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13734:352:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13734:352:3;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;13734:352:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;13734:352:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13734:352:3;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;13734:352:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;13734:352:3;;;;;;;;;;;;;;;:::i;:::-;;7422:117;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7422:117:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7422:117:3;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6354:594;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6354:594:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6354:594:3;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6354:594:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11231:179;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11231:179:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11231:179:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7813:260;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7813:260:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7813:260:3;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7237:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7237:106:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7237:106:3;;;;;;;;;;;;;;;;;:::i;:::-;;946:167:4;1043:4;1072:20;:33;1093:11;1072:33;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:40;;946:167;;;:::o;5752:85:3:-;5791:13;5824:5;5817:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5752:85;:::o;10105:241::-;10164:7;10206:16;10214:7;10206;:16::i;:::-;10184:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10314:15;:24;10330:7;10314:24;;;;;;;;;;;;;;;;;;;;;10307:31;;10105:241;;;:::o;9373:439::-;9437:13;9453:16;9461:7;9453;:16::i;:::-;9437:32;;9494:5;9488:11;;:2;:11;;;;9480:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9588:5;9572:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;9597:37;9614:5;9621:12;:10;:12::i;:::-;9597:16;:37::i;:::-;9572:62;9550:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9758:2;9731:15;:24;9747:7;9731:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;9796:7;9792:2;9776:28;;9785:5;9776:28;;;;;;;;;;;;9373:439;;;:::o;16410:96::-;16454:7;16481:10;:17;;;;16474:24;;16410:96;:::o;11857:310::-;11996:41;12015:12;:10;:12::i;:::-;12029:7;11996:18;:41::i;:::-;11974:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12127:32;12141:4;12147:2;12151:7;12127:13;:32::i;:::-;11857:310;;;:::o;8351:591::-;8412:18;8433:22;8447:7;8433:13;:22::i;:::-;8412:43;;8487:1;8474:10;:14;8466:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8532:13;8548:16;8556:7;8548;:16::i;:::-;8532:32;;8613:5;8597:21;;:12;:10;:12::i;:::-;:21;;;;8575:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8730:10;8717:9;:23;8695:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8826:51;8844:5;8851:12;:10;:12::i;:::-;8865:7;8826:51;;;;;;;;;;;;:17;:51::i;:::-;8906:5;8890:32;;:44;8923:10;8890:44;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8890:44:3;8351:591;;;:::o;15950:301::-;16057:7;16112:16;16122:5;16112:9;:16::i;:::-;16104:5;:24;16082:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16217:12;:19;16230:5;16217:19;;;;;;;;;;;;;;;16237:5;16217:26;;;;;;;;;;;;;;;;16210:33;;15950:301;;;;:::o;14621:128::-;14689:4;4115:10;;4102:9;:23;:49;;;;4129:22;4138:12;:10;:12::i;:::-;4129:8;:22::i;:::-;4102:49;4080:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14706:13;14716:2;14706:9;:13::i;:::-;14737:4;14730:11;;14621:128;;;:::o;12829:168::-;12950:39;12967:4;12973:2;12977:7;12950:39;;;;;;;;;;;;:16;:39::i;:::-;12829:168;;;:::o;16852:236::-;16910:7;16960:13;:11;:13::i;:::-;16952:5;:21;16930:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17063:10;17074:5;17063:17;;;;;;;;;;;;;;;;17056:24;;16852:236;;;:::o;15459:109::-;417:22:10;426:12;:10;:12::i;:::-;417:8;:22::i;:::-;395:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15526:2:3;:11;;:34;15538:21;15526:34;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15526:34:3;15459:109;:::o;5376:265::-;5431:7;5451:13;5467:11;:20;5479:7;5467:20;;;;;;;;;;;;;;;;;;;;;5451:36;;5537:1;5520:19;;:5;:19;;;;5498:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5628:5;5621:12;;;5376:265;;;:::o;14290:120::-;14354:4;4115:10;;4102:9;:23;:49;;;;4129:22;4138:12;:10;:12::i;:::-;4129:8;:22::i;:::-;4102:49;4080:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14371:9;14377:2;14371:5;:9::i;:::-;;14398:4;14391:11;;14290:120;;;:::o;27984:91::-;28026:13;28059:8;28052:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27984:91;:::o;4902:248::-;4957:7;5016:1;4999:19;;:5;:19;;;;4977:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5108:34;:17;:24;5126:5;5108:24;;;;;;;;;;;;;;;:32;:34::i;:::-;5101:41;;4902:248;;;:::o;15034:196::-;15158:4;4115:10;;4102:9;:23;:49;;;;4129:22;4138:12;:10;:12::i;:::-;4129:8;:22::i;:::-;4102:49;4080:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15180:20;15190:2;15194:5;15180:9;:20::i;:::-;15218:4;15211:11;;15034:196;;;;:::o;22675:154::-;22761:16;22802:12;:19;22815:5;22802:19;;;;;;;;;;;;;;;22795:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22675:154;;;:::o;5952:89::-;5993:13;6026:7;6019:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5952:89;:::o;660:92:10:-;417:22;426:12;:10;:12::i;:::-;417:8;:22::i;:::-;395:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;725:19;736:7;725:10;:19::i;:::-;660:92;:::o;760:79::-;804:27;818:12;:10;:12::i;:::-;804:13;:27::i;:::-;760:79::o;10647:254:3:-;10733:12;:10;:12::i;:::-;10727:18;;:2;:18;;;;10719:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10827:8;10788:18;:32;10807:12;:10;:12::i;:::-;10788:32;;;;;;;;;;;;;;;:36;10821:2;10788:36;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;10880:2;10851:42;;10866:12;:10;:12::i;:::-;10851:42;;;10884:8;10851:42;;;;;;;;;;;;;;;;;;;;;;10647:254;;:::o;7058:90::-;7103:7;7130:10;;7123:17;;7058:90;:::o;543:109:10:-;599:4;623:21;636:7;623:8;:12;;:21;;;;:::i;:::-;616:28;;543:109;;;:::o;13734:352:3:-;13906:41;13925:12;:10;:12::i;:::-;13939:7;13906:18;:41::i;:::-;13884:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14035:43;14053:4;14059:2;14063:7;14072:5;14035:17;:43::i;:::-;13734:352;;;;:::o;7422:117::-;7483:7;7510:12;:21;7523:7;7510:21;;;;;;;;;;;;7503:28;;7422:117;;;:::o;6354:594::-;6412:13;6460:16;6468:7;6460;:16::i;:::-;6438:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6564:23;6590:10;:19;6601:7;6590:19;;;;;;;;;;;6564:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6747:1;6726:9;6720:23;:28;6716:225;;;6765:9;;;;;;;;;;;;;;;;;6716:225;6908:8;6918:9;6891:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6891:37:3;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6891:37:3;;;6877:52;;;6354:594;;;;:::o;11231:179::-;11338:4;11367:18;:25;11386:5;11367:25;;;;;;;;;;;;;;;:35;11393:8;11367:35;;;;;;;;;;;;;;;;;;;;;;;;;11360:42;;11231:179;;;;:::o;7813:260::-;7911:41;7930:12;:10;:12::i;:::-;7944:7;7911:18;:41::i;:::-;7889:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8057:8;8033:12;:21;8046:7;8033:21;;;;;;;;;;;:32;;;;7813:260;;:::o;7237:106::-;417:22:10;426:12;:10;:12::i;:::-;417:8;:22::i;:::-;395:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7323:12:3;7310:10;:25;;;;7237:106;:::o;18361:155::-;18418:4;18435:13;18451:11;:20;18463:7;18451:20;;;;;;;;;;;;;;;;;;;;;18435:36;;18506:1;18489:19;;:5;:19;;;;18482:26;;;18361:155;;;:::o;806:98:1:-;851:15;886:10;879:17;;806:98;:::o;18886:428:3:-;18998:4;19042:16;19050:7;19042;:16::i;:::-;19020:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19141:13;19157:16;19165:7;19157;:16::i;:::-;19141:32;;19203:5;19192:16;;:7;:16;;;:64;;;;19249:7;19225:31;;:20;19237:7;19225:11;:20::i;:::-;:31;;;19192:64;:113;;;;19273:32;19290:5;19297:7;19273:16;:32::i;:::-;19192:113;19184:122;;;18886:428;;;;:::o;21786:677::-;21948:4;21928:24;;:16;21936:7;21928;:16::i;:::-;:24;;;21906:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22054:1;22040:16;;:2;:16;;;;22032:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22110:23;22125:7;22110:14;:23::i;:::-;22168:1;22144:12;:21;22157:7;22144:21;;;;;;;;;;;:25;;;;22182:35;:17;:23;22200:4;22182:23;;;;;;;;;;;;;;;:33;:35::i;:::-;22228:33;:17;:21;22246:2;22228:21;;;;;;;;;;;;;;;:31;:33::i;:::-;22297:2;22274:11;:20;22286:7;22274:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;22312:47;22345:4;22351:7;22312:32;:47::i;:::-;22370:40;22398:2;22402:7;22370:27;:40::i;:::-;22447:7;22443:2;22428:27;;22437:4;22428:27;;;;;;;;;;;;21786:677;;;:::o;17807:352::-;17960:32;17974:4;17980:2;17984:7;17960:13;:32::i;:::-;18025:48;18048:4;18054:2;18058:7;18067:5;18025:22;:48::i;:::-;18003:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17807:352;;;;:::o;19795:76::-;19846:17;19856:2;19846:17;;;;;;;;;;;;:9;:17::i;:::-;19795:76;:::o;20889:511::-;20934:7;20954:15;20988:1;20972:13;:11;:13::i;:::-;:17;20954:35;;21022:1;21008:16;;:2;:16;;;;21000:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21081:16;21089:7;21081;:16::i;:::-;21080:17;21072:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21166:2;21143:11;:20;21155:7;21143:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;21179:33;:17;:21;21197:2;21179:21;;;;;;;;;;;;;;;:31;:33::i;:::-;21225:40;21253:2;21257:7;21225:27;:40::i;:::-;21276;21308:7;21276:31;:40::i;:::-;21359:7;21355:2;21334:33;;21351:1;21334:33;;;;;;;;;;;;21385:7;21378:14;;;20889:511;;;:::o;1084:114:2:-;1149:7;1176;:14;;;1169:21;;1084:114;;;:::o;20425:271:3:-;20496:15;20514:9;20520:2;20514:5;:9::i;:::-;20496:27;;20556:54;20587:1;20591:2;20595:7;20604:5;20556:22;:54::i;:::-;20534:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20425:271;;;:::o;847:122:10:-;904:21;917:7;904:8;:12;;:21;;;;:::i;:::-;953:7;941:20;;;;;;;;;;;;847:122;:::o;977:130::-;1037:24;1053:7;1037:8;:15;;:24;;;;:::i;:::-;1091:7;1077:22;;;;;;;;;;;;977:130;:::o;809:235:11:-;908:4;957:1;938:21;;:7;:21;;;;930:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1016:4;:11;;:20;1028:7;1016:20;;;;;;;;;;;;;;;;;;;;;;;;;1009:27;;809:235;;;;:::o;30051:175:3:-;30151:1;30115:38;;:15;:24;30131:7;30115:24;;;;;;;;;;;;;;;;;;;;;:38;;;30111:108;;30205:1;30170:15;:24;30186:7;30170:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;30111:108;30051:175;:::o;1395:110:2:-;1476:21;1495:1;1476:7;:14;;;:18;;:21;;;;:::i;:::-;1459:7;:14;;:38;;;;1395:110;:::o;1206:181::-;1378:1;1360:7;:14;;;:19;;;;;;;;;;;1206:181;:::o;24308:1162:3:-;24588:22;24613:32;24643:1;24613:12;:18;24626:4;24613:18;;;;;;;;;;;;;;;:25;;;;:29;;:32;;;;:::i;:::-;24588:57;;24656:18;24677:17;:26;24695:7;24677:26;;;;;;;;;;;;24656:47;;24824:14;24810:10;:28;24806:328;;24855:19;24877:12;:18;24890:4;24877:18;;;;;;;;;;;;;;;24896:14;24877:34;;;;;;;;;;;;;;;;24855:56;;24961:11;24928:12;:18;24941:4;24928:18;;;;;;;;;;;;;;;24947:10;24928:30;;;;;;;;;;;;;;;:44;;;;25078:10;25045:17;:30;25063:11;25045:30;;;;;;;;;;;:43;;;;24806:328;;25223:12;:18;25236:4;25223:18;;;;;;;;;;;;;;;:27;;;;;;;;;;;;:::i;:::-;;24308:1162;;;;:::o;23130:186::-;23244:12;:16;23257:2;23244:16;;;;;;;;;;;;;;;:23;;;;23215:17;:26;23233:7;23215:26;;;;;;;;;;;:52;;;;23278:12;:16;23291:2;23278:16;;;;;;;;;;;;;;;23300:7;23278:30;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;23278:30:3;;;;;;;;;;;;;;;;;;;;;;23130:186;;:::o;28727:1156::-;28883:4;28905:15;:2;:13;;;:15::i;:::-;28900:60;;28944:4;28937:11;;;;28900:60;29031:12;29045:23;29072:2;:7;;29151:2;29135:36;;;:45;;;;29199:12;:10;:12::i;:::-;29230:4;29253:7;29279:5;29094:205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;29094:205:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;29094:205:3;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;29094:205:3;29072:238;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;29072:238:3;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;29030:280:3;;;;29326:7;29321:555;;29374:1;29354:10;:17;:21;29350:384;;;29522:10;29516:17;29583:15;29570:10;29566:2;29562:19;29555:44;29470:148;29658:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29321:555;29766:13;29793:10;29782:32;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29782:32:3;;;;;;;;;;;;;;;;29766:48;;901:10;29847:16;;29837:26;;;:6;:26;;;;29829:35;;;;;28727:1156;;;;;;;:::o;23517:164::-;23621:10;:17;;;;23594:15;:24;23610:7;23594:24;;;;;;;;;;;:44;;;;23649:10;23665:7;23649:24;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;23649:24:3;;;;;;;;;;;;;;;;;;;;;;23517:164;:::o;273:178:11:-;351:18;355:4;361:7;351:3;:18::i;:::-;350:19;342:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;439:4;416;:11;;:20;428:7;416:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;273:178;;:::o;531:183::-;611:18;615:4;621:7;611:3;:18::i;:::-;603:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;701:5;678:4;:11;;:20;690:7;678:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;531:183;;:::o;1315:136:12:-;1373:7;1400:43;1404:1;1407;1400:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1393:50;;1315:136;;;;:::o;558:444:0:-;618:4;826:12;950:7;938:20;930:28;;993:1;986:4;:8;979:15;;;558:444;;;:::o;1788:226:12:-;1908:7;1941:1;1936;:6;;1944:12;1928:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1928:29:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1968:9;1984:1;1980;:5;1968:17;;2005:1;1998:8;;;1788:226;;;;;:::o;438:29791:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://1f911a5dcd6d0541f31d284544bdec097b4dbb9506e9ef7ad60bc5b8a5b095ca
Loading...
Loading
Loading...
Loading
OVERVIEW
The project lets you buy ERC721 compliant tokens with ETH and then trade them with other addresses on the Ethereum blockchain.Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.