Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 545 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer From | 18476707 | 847 days ago | IN | 0 ETH | 0.00156792 | ||||
| Transfer From | 18476703 | 847 days ago | IN | 0 ETH | 0.00170908 | ||||
| Set Approval For... | 18476685 | 847 days ago | IN | 0 ETH | 0.00066775 | ||||
| Transfer From | 12317704 | 1766 days ago | IN | 0 ETH | 0.00403792 | ||||
| Transfer From | 12317663 | 1766 days ago | IN | 0 ETH | 0.0048754 | ||||
| Transfer From | 12317655 | 1766 days ago | IN | 0 ETH | 0.00394499 | ||||
| Transfer From | 12317634 | 1766 days ago | IN | 0 ETH | 0.00475192 | ||||
| Transfer From | 12317631 | 1766 days ago | IN | 0 ETH | 0.00527132 | ||||
| Transfer From | 12317617 | 1766 days ago | IN | 0 ETH | 0.00444631 | ||||
| Transfer From | 12317602 | 1766 days ago | IN | 0 ETH | 0.00412431 | ||||
| Transfer From | 12317596 | 1766 days ago | IN | 0 ETH | 0.00467457 | ||||
| Transfer From | 12317573 | 1766 days ago | IN | 0 ETH | 0.00467171 | ||||
| Set Approval For... | 12311089 | 1767 days ago | IN | 0 ETH | 0.0022732 | ||||
| Transfer From | 10747096 | 2008 days ago | IN | 0 ETH | 0.00616506 | ||||
| Transfer From | 10747096 | 2008 days ago | IN | 0 ETH | 0.00616506 | ||||
| Transfer From | 10747096 | 2008 days ago | IN | 0 ETH | 0.00616506 | ||||
| Transfer From | 10747012 | 2008 days ago | IN | 0 ETH | 0.00616506 | ||||
| Transfer From | 10747012 | 2008 days ago | IN | 0 ETH | 0.00592566 | ||||
| Transfer From | 10747012 | 2008 days ago | IN | 0 ETH | 0.00616506 | ||||
| Transfer From | 10746952 | 2008 days ago | IN | 0 ETH | 0.00616506 | ||||
| Set Approval For... | 10746856 | 2008 days ago | IN | 0 ETH | 0.00266042 | ||||
| Transfer | 10746806 | 2008 days ago | IN | 0 ETH | 0.00123883 | ||||
| Transfer | 10746758 | 2008 days ago | IN | 0 ETH | 0.0011061 | ||||
| Transfer From | 8134883 | 2421 days ago | IN | 0 ETH | 0.0010141 | ||||
| Transfer From | 8134883 | 2421 days ago | IN | 0 ETH | 0.0010141 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Artifaqt
Compiler Version
v0.4.24+commit.e67f0147
Contract Source Code (Solidity Multiple files format)
pragma solidity 0.4.24;
import "./EIP721.sol";
contract Artifaqt is EIP721 {
address public admin;
// Bool to pause transfers
bool transferResumed = false;
// Array holding the sin hashes
bytes32[] private sins;
// Mapping from token ID to token type
mapping(uint256 => uint256) internal typeOfToken;
// Cutoff minting time
uint256 cutoffMintingTime = 1541116800;
/// @notice Contract constructor
/// @dev Generates the keccak256 hashes of each sin that will be used
/// when claiming tokens. Saves the admin. Sets a name and symbol.
constructor() public {
// Limbo
sins.push(keccak256("Those who were never baptised."));
// Lust
sins.push(keccak256("Those who gave into pleasure."));
// Gluttony
sins.push(keccak256("Those who indulged in excess."));
// Avarice
sins.push(keccak256("Those who hoard and spend wastefully."));
// Wrath
sins.push(keccak256("Those consumed by anger and hatred."));
// Heresy
sins.push(keccak256("Those who worshipped false idols."));
// Violence
sins.push(keccak256("Those violent against others, one’s self, and God."));
// Fraud
sins.push(keccak256("Those who used lies and deception for personal gain."));
// Treachery
sins.push(keccak256("Those who have betrayed their loved ones."));
// Set owner
admin = msg.sender;
// Default name and symbol
name = "Artifaqt";
symbol = "ATQ";
}
/// @notice Claim tokens by providing the sin payload
/// @dev Reverts unless the payload was correctly created. Reverts after the party is over and no more tokens should be created.
/// @param _sinPayload = keccak256(keccak256(sin) + playerAddress)
/// sin must be one of strings hashed in the constructor that the player will find scattered across the DevCon4 conference
function claimToken(
bytes32 _sinPayload
) external mintingAllowed {
// Make sure it's the correct sin
uint256 tokenType;
bool found = false;
for(uint256 i = 0; i < 9; i++) {
if (_sinPayload == keccak256(abi.encodePacked(sins[i], msg.sender))) {
tokenType = i;
found = true;
break;
}
}
require(found == true);
// Make sure the user does not have this type of token
require(ownerHasTokenType(msg.sender, tokenType) == false);
// Create and add token
uint256 tokenId = totalSupply();
addToken(msg.sender, tokenId, tokenType);
// Emit create event
emit Transfer(0x0, msg.sender, tokenId);
}
/// @notice The admin can generate tokens for players
/// @dev Reverts unless the user already has the token type. Reverts unless the minting happens withing the minting allowed time period.
/// @param _to The player's address
/// @param _tokenType A number from 0 to 8 representing the sin type
function mintToken(
address _to,
uint256 _tokenType
) external onlyAdmin mintingAllowed {
// Create and add token
uint256 tokenId = totalSupply();
addToken(_to, tokenId, _tokenType);
// Emit create event
emit Transfer(0x0, _to, tokenId);
}
/// @notice Returns the token id, owner and type
/// @dev Throws unless _tokenId exists
/// @param _tokenId The token by id
/// @return
/// - token index
/// - owner of token
/// - type of token
function getToken(
uint256 _tokenId
) external view returns (uint256, address, uint256) {
return (
allTokensIndex[_tokenId],
ownerOfToken[_tokenId],
typeOfToken[_tokenId]
);
}
/// @notice Returns the claimed tokens for player
/// @dev Returns an empty array if player does not have any claimed tokens
/// @param _player The player's address
function getTokenTypes(
address _player
) external view returns (uint256[]) {
uint256[] memory claimedTokens = new uint256[](ownedTokens[_player].length);
for (uint256 i = 0; i < ownedTokens[_player].length; i++) {
claimedTokens[i] = typeOfToken[ownedTokens[_player][i]];
}
return claimedTokens;
}
// TODO: Do not allow any kind of transfers if transfer is paused
/// @notice Transfers the ownership of a token
/// @dev Calls the parent function if transfers are not paused
/// @param _from The current owner of the NFT
/// @param _to The new owner
/// @param _tokenId The NFT to transfer
/// @param data Additional data with no specified format, sent in call to `_to`
function safeTransferFrom(
address _from,
address _to,
uint256 _tokenId,
bytes data
) public payable transferAllowed {
super.safeTransferFrom(_from, _to, _tokenId, data);
}
/// @notice Transfers the ownership of an NFT from one address to another address
/// @dev Calls the parent function if transfers are not paused
/// @param _from The current owner of the NFT
/// @param _to The new owner
/// @param _tokenId The NFT to transfer
function safeTransferFrom(
address _from,
address _to,
uint256 _tokenId
) public payable transferAllowed {
super.safeTransferFrom(_from, _to, _tokenId);
}
/// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE
/// TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE
/// THEY MAY BE PERMANENTLY LOST
/// @dev Calls the parent function if transfers are not paused
/// @param _from The current owner of the NFT
/// @param _to The new owner
/// @param _tokenId The NFT to transfer
function transferFrom(
address _from,
address _to,
uint256 _tokenId
) public payable transferAllowed {
super.transferFrom(_from, _to, _tokenId);
}
/// @notice Enables or disables transfers
/// @dev Set to `true` to enable transfers or `false` to disable transfers.
/// If it is set to `false` all functions that transfer tokens are paused and will revert.
/// Functions that approve transfers (`approve()` and `setTransferForAll()`) still work
/// because they do not transfer tokens immediately.
/// @param _resume This should be set to `true` if transfers should be enabled, `false` otherwise
function allowTransfer(bool _resume) public onlyAdmin {
transferResumed = _resume;
}
/// @notice Returns true of the `_player` has the requested `_tokenType`
/// @dev
/// @param _player The player's address
/// @param _tokenType A number from 0 to 8 representing the sin type
function ownerHasTokenType(
address _player,
uint256 _tokenType
) internal view returns (bool) {
for (uint256 i = 0; i < ownedTokens[_player].length; i++) {
if (typeOfToken[ownedTokens[_player][i]] == _tokenType) {
return true;
}
}
return false;
}
/// @notice Adds a token for the player
/// @dev Calls the `super.addToken(address _to, uint256 _tokenId)` method and
/// saves the token type also. The `_tokenId` must not already exist.
/// @param _to The player's address
/// @param _tokenId The new token id
/// @param _tokenType A number from 0 to 8 representing the sin type
function addToken(
address _to,
uint256 _tokenId,
uint256 _tokenType
) internal {
super.addToken(_to, _tokenId);
// Save token type
typeOfToken[_tokenId] = _tokenType;
}
modifier onlyAdmin() {
require(msg.sender == admin);
_;
}
modifier mintingAllowed() {
require(block.timestamp <= cutoffMintingTime);
_;
}
modifier transferAllowed() {
require(transferResumed);
_;
}
}pragma solidity ^0.4.24;
import "./EIP721Interface.sol";
import "./EIP721MetadataInterface.sol";
import "./EIP721EnumerableInterface.sol";
import "./EIP721TokenReceiverInterface.sol";
/*
This is a full implementation of all ERC721's features.
Influenced by OpenZeppelin's implementation with some stylistic changes.
https://github.com/OpenZeppelin/zeppelin-solidity/tree/master/contracts/token/ERC721
*/
contract EIP721 is EIP721Interface, EIP721MetadataInterface, EIP721EnumerableInterface, ERC165Interface {
string public name;
string public symbol;
// all tokens
uint256[] internal allTokens;
// mapping of token IDs to its index in all Tokens array.
mapping(uint256 => uint256) internal allTokensIndex;
// Array of tokens owned by a specific owner
mapping(address => uint256[]) internal ownedTokens;
// Mapping from token ID to owner
mapping(uint256 => address) internal ownerOfToken;
// Mapping of the token ID to where it is in the owner's array.
mapping(uint256 => uint256) internal ownedTokensIndex;
// Mapping of a token to a specifically approved owner.
mapping(uint256 => address) internal approvedOwnerOfToken;
// An operator is allowed to manage all assets of another owner.
mapping(address => mapping (address => bool)) internal operators;
mapping(uint256 => string) internal tokenURIs;
bytes4 internal constant ERC721_BASE_INTERFACE_SIGNATURE = 0x80ac58cd;
bytes4 internal constant ERC721_METADATA_INTERFACE_SIGNATURE = 0x5b5e139f;
bytes4 internal constant ERC721_ENUMERABLE_INTERFACE_SIGNATURE = 0x780e9d63;
bytes4 internal constant ONERC721RECEIVED_FUNCTION_SIGNATURE = 0x150b7a02;
/* Modifiers */
modifier tokenExists(uint256 _tokenId) {
require(ownerOfToken[_tokenId] != 0);
_;
}
// checks: is the owner of the token == msg.sender?
// OR has the owner of the token granted msg.sender access to operate?
modifier allowedToOperate(uint256 _tokenId) {
require(checkIfAllowedToOperate(_tokenId));
_;
}
modifier allowedToTransfer(address _from, address _to, uint256 _tokenId) {
require(checkIfAllowedToOperate(_tokenId) || approvedOwnerOfToken[_tokenId] == msg.sender);
require(ownerOfToken[_tokenId] == _from);
require(_to != 0); //not allowed to burn in transfer method
_;
}
/// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE
/// TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE
/// THEY MAY BE PERMANENTLY LOST
/// @dev Throws unless `msg.sender` is the current owner, an authorized
/// operator, or the approved address for this NFT. Throws if `_from` is
/// not the current owner. Throws if `_to` is the zero address. Throws if
/// `_tokenId` is not a valid NFT.
/// @param _from The current owner of the NFT
/// @param _to The new owner
/// @param _tokenId The NFT to transfer
function transferFrom(address _from, address _to, uint256 _tokenId) public payable
tokenExists(_tokenId)
allowedToTransfer(_from, _to, _tokenId) {
//transfer token
settleTransfer(_from, _to, _tokenId);
}
/// @notice Transfers the ownership of an NFT from one address to another address
/// @dev Throws unless `msg.sender` is the current owner, an authorized
/// operator, or the approved address for this NFT. Throws if `_from` is
/// not the current owner. Throws if `_to` is the zero address. Throws if
/// `_tokenId` is not a valid NFT. When transfer is complete, this function
/// checks if `_to` is a smart contract (code size > 0). If so, it calls
/// `onERC721Received` on `_to` and throws if the return value is not
/// `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.
/// @param _from The current owner of the NFT
/// @param _to The new owner
/// @param _tokenId The NFT to transfer
/// @param data Additional data with no specified format, sent in call to `_to`
function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) public payable
tokenExists(_tokenId)
allowedToTransfer(_from, _to, _tokenId) {
settleTransfer(_from, _to, _tokenId);
// check if a smart contract
uint256 size;
assembly { size := extcodesize(_to) } // solhint-disable-line no-inline-assembly
if (size > 0) {
// call on onERC721Received.
require(EIP721TokenReceiverInterface(_to).onERC721Received(msg.sender, _from, _tokenId, data) == ONERC721RECEIVED_FUNCTION_SIGNATURE);
}
}
/// @notice Transfers the ownership of an NFT from one address to another address
/// @dev This works identically to the other function with an extra data parameter,
/// except this function just sets data to ""
/// @param _from The current owner of the NFT
/// @param _to The new owner
/// @param _tokenId The NFT to transfer
function safeTransferFrom(address _from, address _to, uint256 _tokenId) public payable
tokenExists(_tokenId)
allowedToTransfer(_from, _to, _tokenId) {
settleTransfer(_from, _to, _tokenId);
// check if a smart contract
uint256 size;
assembly { size := extcodesize(_to) } // solhint-disable-line no-inline-assembly
if (size > 0) {
// call on onERC721Received.
require(EIP721TokenReceiverInterface(_to).onERC721Received(msg.sender, _from, _tokenId, "") == ONERC721RECEIVED_FUNCTION_SIGNATURE);
}
}
/// @notice Change or reaffirm the approved address for an NFT.
/// @dev The zero address indicates there is no approved address.
/// Throws unless `msg.sender` is the current NFT owner, or an authorized
/// operator of the current owner.
/// @param _approved The new approved NFT controller
/// @param _tokenId The NFT to approve
function approve(address _approved, uint256 _tokenId) external payable
tokenExists(_tokenId)
allowedToOperate(_tokenId) {
address owner = ownerOfToken[_tokenId];
internalApprove(owner, _approved, _tokenId);
}
/// @notice Enable or disable approval for a third party ("operator") to manage
/// all of `msg.sender`'s assets.
/// @dev Emits the ApprovalForAll event. The contract MUST allow
/// multiple operators per owner.
/// @param _operator Address to add to the set of authorized operators.
/// @param _approved True if the operator is approved, false to revoke approval
function setApprovalForAll(address _operator, bool _approved) external {
require(_operator != msg.sender); // can't make oneself an operator
operators[msg.sender][_operator] = _approved;
emit ApprovalForAll(msg.sender, _operator, _approved);
}
/* public View Functions */
/// @notice Count NFTs tracked by this contract
/// @return A count of valid NFTs tracked by this contract, where each one of
/// them has an assigned and queryable owner not equal to the zero address
function totalSupply() public view returns (uint256) {
return allTokens.length;
}
/// @notice Find the owner of an NFT
/// @param _tokenId The identifier for an NFT
/// @dev NFTs assigned to zero address are considered invalid, and queries
/// about them do throw.
/// @return The address of the owner of the NFT
function ownerOf(uint256 _tokenId) external view
tokenExists(_tokenId) returns (address) {
return ownerOfToken[_tokenId];
}
/// @notice Enumerate valid NFTs
/// @dev Throws if `_index` >= `totalSupply()`.
/// @param _index A counter less than `totalSupply()`
/// @return The token identifier for the `_index`th NFT,
/// (sort order not specified)
function tokenByIndex(uint256 _index) external view returns (uint256) {
require(_index < allTokens.length);
return allTokens[_index];
}
/// @notice Enumerate NFTs assigned to an owner
/// @dev Throws if `_index` >= `balanceOf(_owner)` or if
/// `_owner` is the zero address, representing invalid NFTs.
/// @param _owner An address where we are interested in NFTs owned by them
/// @param _index A counter less than `balanceOf(_owner)`
/// @return The token identifier for the `_index`th NFT assigned to `_owner`,
/// (sort order not specified)
function tokenOfOwnerByIndex(address _owner, uint256 _index) external view
tokenExists(_tokenId) returns (uint256 _tokenId) {
require(_index < ownedTokens[_owner].length);
return ownedTokens[_owner][_index];
}
/// @notice Count all NFTs assigned to an owner
/// @dev NFTs assigned to the zero address are considered invalid, and this
/// function throws for queries about the zero address.
/// @param _owner An address for whom to query the balance
/// @return The number of NFTs owned by `_owner`, possibly zero
function balanceOf(address _owner) external view returns (uint256) {
require(_owner != 0);
return ownedTokens[_owner].length;
}
/// @notice Get the approved address for a single NFT
/// @dev Throws if `_tokenId` is not a valid NFT
/// @param _tokenId The NFT to find the approved address for
// todo: The approved address for this NFT, or the zero address if there is none
function getApproved(uint256 _tokenId) external view
tokenExists(_tokenId) returns (address) {
return approvedOwnerOfToken[_tokenId];
}
/// @notice Query if an address is an authorized operator for another address
/// @param _owner The address that owns the NFTs
/// @param _operator The address that acts on behalf of the owner
/// @return True if `_operator` is an approved operator for `_owner`, false otherwise
function isApprovedForAll(address _owner, address _operator) external view returns (bool) {
return operators[_owner][_operator];
}
/// @notice A distinct Uniform Resource Identifier (URI) for a given asset.
/// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC
/// 3986. The URI may point to a JSON file that conforms to the "ERC721
/// Metadata JSON Schema".
function tokenURI(uint256 _tokenId) external view returns (string) {
return tokenURIs[_tokenId];
}
/// @notice Query if a contract implements an interface
/// @param interfaceID The interface identifier, as specified in ERC-165
/// @dev Interface identification is specified in ERC-165. This function
/// uses less than 30,000 gas.
/// @return `true` if the contract implements `interfaceID` and
/// `interfaceID` is not 0xffffffff, `false` otherwise
function supportsInterface(bytes4 interfaceID) external view returns (bool) {
if (interfaceID == ERC721_BASE_INTERFACE_SIGNATURE ||
interfaceID == ERC721_METADATA_INTERFACE_SIGNATURE ||
interfaceID == ERC721_ENUMERABLE_INTERFACE_SIGNATURE) {
return true;
} else { return false; }
}
/* -- Internal Functions -- */
function checkIfAllowedToOperate(uint256 _tokenId) internal view returns (bool) {
return ownerOfToken[_tokenId] == msg.sender || operators[ownerOfToken[_tokenId]][msg.sender];
}
function internalApprove(address _owner, address _approved, uint256 _tokenId) internal {
require(_approved != _owner); //can't approve to owner to itself
// Note: the following code is equivalent to: require(getApproved(_tokenId) != 0) || _approved != 0);
// However: I found the following easier to read & understand.
if (approvedOwnerOfToken[_tokenId] == 0 && _approved == 0) {
revert(); // add reason for revert?
} else {
approvedOwnerOfToken[_tokenId] = _approved;
emit Approval(_owner, _approved, _tokenId);
}
}
function settleTransfer(address _from, address _to, uint256 _tokenId) internal {
//clear pending approvals if there are any
if (approvedOwnerOfToken[_tokenId] != 0) {
internalApprove(_from, 0, _tokenId);
}
removeToken(_from, _tokenId);
addToken(_to, _tokenId);
emit Transfer(_from, _to, _tokenId);
}
function addToken(address _to, uint256 _tokenId) internal {
// add new token to all tokens
allTokens.push(_tokenId);
// add new token to index of all tokens.
allTokensIndex[_tokenId] = allTokens.length-1;
// set token to be owned by address _to
ownerOfToken[_tokenId] = _to;
// add that token to an array keeping track of tokens owned by that address
ownedTokens[_to].push(_tokenId);
// add newly pushed to index.
ownedTokensIndex[_tokenId] = ownedTokens[_to].length-1;
}
function removeToken(address _from, uint256 _tokenId) internal {
// remove token from allTokens array.
uint256 allIndex = allTokensIndex[_tokenId];
uint256 allTokensLength = allTokens.length;
//1) Put last tokenID into index of tokenID to be removed.
allTokens[allIndex] = allTokens[allTokensLength - 1];
//2) Take last tokenID that has been moved to the removed token & update its new index
allTokensIndex[allTokens[allTokensLength-1]] = allIndex;
//3) delete last item (since it's now a duplicate)
delete allTokens[allTokensLength-1];
//4) reduce length of array
allTokens.length -= 1;
// remove token from owner array.
// get the index of where this token is in the owner's array
uint256 ownerIndex = ownedTokensIndex[_tokenId];
uint256 ownerLength = ownedTokens[_from].length;
/* Remove Token From Index */
//1) Put last tokenID into index of token to be removed.
ownedTokens[_from][ownerIndex] = ownedTokens[_from][ownerLength-1];
//2) Take last item that has been moved to the removed token & update its index
ownedTokensIndex[ownedTokens[_from][ownerLength-1]] = ownerIndex;
//3) delete last item (since it's now a duplicate)
delete ownedTokens[_from][ownerLength-1];
//4) reduce length of array
ownedTokens[_from].length -= 1;
delete ownerOfToken[_tokenId];
}
}
pragma solidity ^0.4.24;
/// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
/// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
/// Note: the ERC-165 identifier for this interface is 0x780e9d63
interface EIP721EnumerableInterface {
/// @notice Count NFTs tracked by this contract
/// @return A count of valid NFTs tracked by this contract, where each one of
/// them has an assigned and queryable owner not equal to the zero address
function totalSupply() external view returns (uint256);
/// @notice Enumerate valid NFTs
/// @dev Throws if `_index` >= `totalSupply()`.
/// @param _index A counter less than `totalSupply()`
/// @return The token identifier for the `_index`th NFT,
/// (sort order not specified)
function tokenByIndex(uint256 _index) external view returns (uint256);
/// @notice Enumerate NFTs assigned to an owner
/// @dev Throws if `_index` >= `balanceOf(_owner)` or if
/// `_owner` is the zero address, representing invalid NFTs.
/// @param _owner An address where we are interested in NFTs owned by them
/// @param _index A counter less than `balanceOf(_owner)`
/// @return The token identifier for the `_index`th NFT assigned to `_owner`,
/// (sort order not specified)
function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 _tokenId);
}
pragma solidity ^0.4.24;
/// @title ERC-721 Non-Fungible Token Standard
/// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
/// Note: the ERC-165 identifier for this interface is 0x6466353c
interface EIP721Interface {
/// @dev This emits when ownership of any NFT changes by any mechanism.
/// This event emits when NFTs are created (`from` == 0) and destroyed
/// (`to` == 0). Exception: during contract creation, any number of NFTs
/// may be created and assigned without emitting Transfer. At the time of
/// any transfer, the approved address for that NFT (if any) is reset to none.
event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
/// @dev This emits when the approved address for an NFT is changed or
/// reaffirmed. The zero address indicates there is no approved address.
/// When a Transfer event emits, this also indicates that the approved
/// address for that NFT (if any) is reset to none.
event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
/// @dev This emits when an operator is enabled or disabled for an owner.
/// The operator can manage all NFTs of the owner.
event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
/// @notice Transfers the ownership of an NFT from one address to another address
/// @dev Throws unless `msg.sender` is the current owner, an authorized
/// operator, or the approved address for this NFT. Throws if `_from` is
/// not the current owner. Throws if `_to` is the zero address. Throws if
/// `_tokenId` is not a valid NFT. When transfer is complete, this function
/// checks if `_to` is a smart contract (code size > 0). If so, it calls
/// `onERC721Received` on `_to` and throws if the return value is not
/// `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.
/// @param _from The current owner of the NFT
/// @param _to The new owner
/// @param _tokenId The NFT to transfer
/// @param data Additional data with no specified format, sent in call to `_to`
function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) public payable;
/// @notice Transfers the ownership of an NFT from one address to another address
/// @dev This works identically to the other function with an extra data parameter,
/// except this function just sets data to ""
/// @param _from The current owner of the NFT
/// @param _to The new owner
/// @param _tokenId The NFT to transfer
function safeTransferFrom(address _from, address _to, uint256 _tokenId) public payable;
/// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE
/// TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE
/// THEY MAY BE PERMANENTLY LOST
/// @dev Throws unless `msg.sender` is the current owner, an authorized
/// operator, or the approved address for this NFT. Throws if `_from` is
/// not the current owner. Throws if `_to` is the zero address. Throws if
/// `_tokenId` is not a valid NFT.
/// @param _from The current owner of the NFT
/// @param _to The new owner
/// @param _tokenId The NFT to transfer
function transferFrom(address _from, address _to, uint256 _tokenId) public payable;
/// @notice Change or reaffirm the approved address for an NFT.
/// @dev The zero address indicates there is no approved address.
/// Throws unless `msg.sender` is the current NFT owner, or an authorized
/// operator of the current owner.
/// @param _approved The new approved NFT controller
/// @param _tokenId The NFT to approve
function approve(address _approved, uint256 _tokenId) external payable;
/// @notice Enable or disable approval for a third party ("operator") to manage
/// all of `msg.sender`'s assets.
/// @dev Emits the ApprovalForAll event. The contract MUST allow
/// multiple operators per owner.
/// @param _operator Address to add to the set of authorized operators.
/// @param _approved True if the operator is approved, false to revoke approval
function setApprovalForAll(address _operator, bool _approved) external;
/// @notice Get the approved address for a single NFT
/// @dev Throws if `_tokenId` is not a valid NFT
/// @param _tokenId The NFT to find the approved address for
/// @return The approved address for this NFT, or the zero address if there is none
function getApproved(uint256 _tokenId) external view returns (address);
/// @notice Query if an address is an authorized operator for another address
/// @param _owner The address that owns the NFTs
/// @param _operator The address that acts on behalf of the owner
/// @return True if `_operator` is an approved operator for `_owner`, false otherwise
function isApprovedForAll(address _owner, address _operator) external view returns (bool);
/// @notice Count all NFTs assigned to an owner
/// @dev NFTs assigned to the zero address are considered invalid, and this
/// function throws for queries about the zero address.
/// @param _owner An address for whom to query the balance
/// @return The number of NFTs owned by `_owner`, possibly zero
function balanceOf(address _owner) external view returns (uint256);
/// @notice Find the owner of an NFT
/// @param _tokenId The identifier for an NFT
/// @dev NFTs assigned to zero address are considered invalid, and queries
/// about them do throw.
/// @return The address of the owner of the NFT
function ownerOf(uint256 _tokenId) external view returns (address);
}
interface ERC165Interface {
/// @notice Query if a contract implements an interface
/// @param interfaceID The interface identifier, as specified in ERC-165
/// @dev Interface identification is specified in ERC-165. This function
/// uses less than 30,000 gas.
/// @return `true` if the contract implements `interfaceID` and
/// `interfaceID` is not 0xffffffff, `false` otherwise
function supportsInterface(bytes4 interfaceID) external view returns (bool);
}
pragma solidity ^0.4.24;
/// @title ERC-721 Non-Fungible Token Standard, optional metadata extension
/// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
/// Note: the ERC-165 identifier for this interface is 0x5b5e139f
interface EIP721MetadataInterface {
/// @notice A descriptive name for a collection of NFTs in this contract
// function name() external view returns (string _name);
/// @notice An abbreviated name for NFTs in this contract
// function symbol() external view returns (string _symbol);
/// @notice A distinct Uniform Resource Identifier (URI) for a given asset.
/// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC
/// 3986. The URI may point to a JSON file that conforms to the "ERC721
/// Metadata JSON Schema".
function tokenURI(uint256 _tokenId) external view returns (string);
}
pragma solidity ^0.4.24;
/// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02.
interface EIP721TokenReceiverInterface {
/// @notice Handle the receipt of an NFT
/// Note: the application will get the prior owner of the token
/// after a `transfer`. This function MAY throw to revert and reject the
/// transfer. Return of other than the magic value MUST result in the
/// transaction being reverted.
/// Note: the 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(keccak256("onERC721Received(address,address,uint256,bytes)"))`
/// unless throwing
function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes _data) external returns(bytes4);
}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[{"name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_approved","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenType","type":"uint256"}],"name":"mintToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_player","type":"address"}],"name":"getTokenTypes","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_operator","type":"address"},{"name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sinPayload","type":"bytes32"}],"name":"claimToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_resume","type":"bool"}],"name":"allowTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getToken","outputs":[{"name":"","type":"uint256"},{"name":"","type":"address"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_operator","type":"address"},{"indexed":false,"name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]Contract Creation Code
6080604052600a805460a060020a60ff0219169055635bdb9380600d553480156200002957600080fd5b50604080517f54686f73652077686f2077657265206e657665722062617074697365642e00008152815190819003601e018120600b80546001818101835560008381527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9928301949094557f54686f73652077686f206761766520696e746f20706c6561737572652e0000008552855194859003601d9081018620845480840186558587528401557f54686f73652077686f20696e64756c67656420696e206578636573732e0000008652865195869003018520835480830185558486528301557f54686f73652077686f20686f61726420616e64207370656e642077617374656685527f756c6c792e0000000000000000000000000000000000000000000000000000006020868101919091528651958690036025018620845480840186558587528401557f54686f736520636f6e73756d656420627920616e67657220616e64206861747286527f65642e0000000000000000000000000000000000000000000000000000000000868201528651958690036023018620845480840186558587528401557f54686f73652077686f20776f72736869707065642066616c73652069646f6c7386527f2e00000000000000000000000000000000000000000000000000000000000000868201528651958690036021018620845480840186558587528401557f54686f73652076696f6c656e7420616761696e7374206f74686572732c206f6e86527f65e28099732073656c662c20616e6420476f642e0000000000000000000000008682015286519586900360349081018720855480850187558688528501557f54686f73652077686f2075736564206c69657320616e6420646563657074696f87527f6e20666f7220706572736f6e616c206761696e2e00000000000000000000000087830152875196879003018620845480840186558587528401557f54686f73652077686f2068617665206265747261796564207468656972206c6f86527f766564206f6e65732e000000000000000000000000000000000000000000000086820152865195869003602901862084549283018555938552910191909155600a8054600160a060020a0319163317905582840190935260088083527f417274696661717400000000000000000000000000000000000000000000000092909301918252620003a592909190620003f3565b506040805180820190915260038082527f41545100000000000000000000000000000000000000000000000000000000006020909201918252620003ec91600191620003f3565b5062000498565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200043657805160ff191683800117855562000466565b8280016001018555821562000466579182015b828111156200046657825182559160200191906001019062000449565b506200047492915062000478565b5090565b6200049591905b808211156200047457600081556001016200047f565b90565b61182c80620004a86000396000f3006080604052600436106101275763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a7811461012c57806306fdde0314610177578063081812fc14610201578063095ea7b31461023557806318160ddd1461024e57806323b872dd146102755780632f745c591461029257806342842e0e146102b65780634f6ccce7146102d35780636352211e146102eb57806370a082311461030357806379c650681461032457806395d89b411461034857806397de8db01461035d578063a22cb465146103ce578063a5bfa9a9146103f4578063b88d4fde1461040c578063c87b56dd1461046e578063d4cab60d14610486578063e4b50cb8146104a0578063e985e9c5146104de578063f851a44014610505575b600080fd5b34801561013857600080fd5b506101637bffffffffffffffffffffffffffffffffffffffffffffffffffffffff196004351661051a565b604080519115158252519081900360200190f35b34801561018357600080fd5b5061018c610606565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101c65781810151838201526020016101ae565b50505050905090810190601f1680156101f35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561020d57600080fd5b50610219600435610694565b60408051600160a060020a039092168252519081900360200190f35b61024c600160a060020a03600435166024356106d6565b005b34801561025a57600080fd5b5061026361073c565b60408051918252519081900360200190f35b61024c600160a060020a0360043581169060243516604435610743565b34801561029e57600080fd5b50610263600160a060020a036004351660243561077c565b61024c600160a060020a036004358116906024351660443561081b565b3480156102df57600080fd5b5061026360043561084f565b3480156102f757600080fd5b50610219600435610880565b34801561030f57600080fd5b50610263600160a060020a03600435166108c2565b34801561033057600080fd5b5061024c600160a060020a03600435166024356108f5565b34801561035457600080fd5b5061018c610971565b34801561036957600080fd5b5061037e600160a060020a03600435166109cb565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103ba5781810151838201526020016103a2565b505050509050019250505060405180910390f35b3480156103da57600080fd5b5061024c600160a060020a03600435166024351515610a9f565b34801561040057600080fd5b5061024c600435610b23565b604080516020601f60643560048181013592830184900484028501840190955281845261024c94600160a060020a038135811695602480359092169560443595369560849401918190840183828082843750949750610c819650505050505050565b34801561047a57600080fd5b5061018c600435610cbc565b34801561049257600080fd5b5061024c6004351515610d5d565b3480156104ac57600080fd5b506104b8600435610dbe565b60408051938452600160a060020a03909216602084015282820152519081900360600190f35b3480156104ea57600080fd5b50610163600160a060020a0360043581169060243516610df1565b34801561051157600080fd5b50610219610e1f565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1982167f80ac58cd0000000000000000000000000000000000000000000000000000000014806105a757507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806105f057507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1982167f780e9d6300000000000000000000000000000000000000000000000000000000145b156105fd57506001610601565b5060005b919050565b6000805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561068c5780601f106106615761010080835404028352916020019161068c565b820191906000526020600020905b81548152906001019060200180831161066f57829003601f168201915b505050505081565b6000818152600560205260408120548290600160a060020a031615156106b957600080fd5b5050600090815260076020526040902054600160a060020a031690565b6000818152600560205260408120548290600160a060020a031615156106fb57600080fd5b8261070581610e2e565b151561071057600080fd5b600084815260056020526040902054600160a060020a03169250610735838686610e85565b5050505050565b6002545b90565b600a5474010000000000000000000000000000000000000000900460ff16151561076c57600080fd5b610777838383610f3d565b505050565b600080805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc548190600160a060020a031615156107be57600080fd5b600160a060020a03841660009081526004602052604090205483106107e257600080fd5b600160a060020a038416600090815260046020526040902080548490811061080657fe5b906000526020600020015491505b5092915050565b600a5474010000000000000000000000000000000000000000900460ff16151561084457600080fd5b610777838383610fe9565b600254600090821061086057600080fd5b600280548390811061086e57fe5b90600052602060002001549050919050565b6000818152600560205260408120548290600160a060020a031615156108a557600080fd5b5050600090815260056020526040902054600160a060020a031690565b6000600160a060020a03821615156108d957600080fd5b50600160a060020a031660009081526004602052604090205490565b600a54600090600160a060020a0316331461090f57600080fd5b600d5442111561091e57600080fd5b61092661073c565b905061093383828461117c565b8083600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561068c5780601f106106615761010080835404028352916020019161068c565b600160a060020a03811660009081526004602090815260408083205481518181528184028101909301909152606092839290918015610a14578160200160208202803883390190505b509150600090505b600160a060020a03841660009081526004602052604090205481101561081457600160a060020a03841660009081526004602052604081208054600c92919084908110610a6557fe5b90600052602060002001548152602001908152602001600020548282815181101515610a8d57fe5b60209081029091010152600101610a1c565b600160a060020a038216331415610ab557600080fd5b336000818152600860209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b600080600080600d544211151515610b3a57600080fd5b60009250600091505b6009821015610c1357600b805483908110610b5a57fe5b6000918252602091829020015460408051808401929092526c010000000000000000000000003302828201528051603481840301815260549092019081905281519192909182918401908083835b60208310610bc75780518252601f199092019160209182019101610ba8565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091208814159250610c089150505781935060019250610c13565b600190910190610b43565b600183151514610c2257600080fd5b610c2c3385611199565b15610c3657600080fd5b610c3e61073c565b9050610c4b33828661117c565b604051819033906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050505050565b600a5474010000000000000000000000000000000000000000900460ff161515610caa57600080fd5b610cb684848484611223565b50505050565b60008181526009602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845260609392830182828015610d515780601f10610d2657610100808354040283529160200191610d51565b820191906000526020600020905b815481529060010190602001808311610d3457829003601f168201915b50505050509050919050565b600a54600160a060020a03163314610d7457600080fd5b600a805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000908152600360209081526040808320546005835281842054600c9093529220549192600160a060020a039091169190565b600160a060020a03918216600090815260086020908152604080832093909416825291909152205460ff1690565b600a54600160a060020a031681565b600081815260056020526040812054600160a060020a0316331480610e7f5750600082815260056020908152604080832054600160a060020a031683526008825280832033845290915290205460ff165b92915050565b600160a060020a038281169084161415610e9e57600080fd5b600081815260076020526040902054600160a060020a0316158015610eca5750600160a060020a038216155b15610ed457600080fd5b600081815260076020526040808220805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386811691821790925591518493918716917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000818152600560205260409020548190600160a060020a03161515610f6257600080fd5b838383610f6e81610e2e565b80610f8f5750600081815260076020526040902054600160a060020a031633145b1515610f9a57600080fd5b600081815260056020526040902054600160a060020a03848116911614610fc057600080fd5b600160a060020a0382161515610fd557600080fd5b610fe0878787611476565b50505050505050565b6000818152600560205260408120548290600160a060020a0316151561100e57600080fd5b84848461101a81610e2e565b8061103b5750600081815260076020526040902054600160a060020a031633145b151561104657600080fd5b600081815260056020526040902054600160a060020a0384811691161461106c57600080fd5b600160a060020a038216151561108157600080fd5b61108c888888611476565b863b9450600085111561117257604080517f150b7a0200000000000000000000000000000000000000000000000000000000808252336004830152600160a060020a038b81166024840152604483018a90526080606484015260006084840181905293519193908b169263150b7a029260c48083019360209383900390910190829087803b15801561111d57600080fd5b505af1158015611131573d6000803e3d6000fd5b505050506040513d602081101561114757600080fd5b50517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461117257600080fd5b5050505050505050565b61118683836114f9565b6000918252600c60205260409091205550565b6000805b600160a060020a03841660009081526004602052604090205481101561121957600160a060020a038416600090815260046020526040812080548592600c929091859081106111e857fe5b906000526020600020015481526020019081526020016000205414156112115760019150610814565b60010161119d565b5060009392505050565b6000828152600560205260408120548390600160a060020a0316151561124857600080fd5b85858561125481610e2e565b806112755750600081815260076020526040902054600160a060020a031633145b151561128057600080fd5b600081815260056020526040902054600160a060020a038481169116146112a657600080fd5b600160a060020a03821615156112bb57600080fd5b6112c6898989611476565b873b9450600085111561146b5763150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191688600160a060020a031663150b7a02338c8b8b6040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018085600160a060020a0316600160a060020a0316815260200184600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156113c75781810151838201526020016113af565b50505050905090810190601f1680156113f45780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561141657600080fd5b505af115801561142a573d6000803e3d6000fd5b505050506040513d602081101561144057600080fd5b50517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461146b57600080fd5b505050505050505050565b600081815260076020526040902054600160a060020a03161561149f5761149f83600083610e85565b6114a983826115a7565b6114b382826114f9565b8082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60028054600181810183557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace909101839055905460008381526003602090815260408083206000199485019055600582528083208054600160a060020a0390981673ffffffffffffffffffffffffffffffffffffffff199098168817905595825260048152858220805494850181558083528183209094018590559254938152600690925292902091019055565b60008181526003602052604081205460028054919290819060001984018481106115cd57fe5b90600052602060002001546002858154811015156115e757fe5b9060005260206000200181905550836003600060026001870381548110151561160c57fe5b906000526020600020015481526020019081526020016000208190555060026001840381548110151561163b57fe5b600091825260208220015560028054600019019061165990826117c3565b505050600083815260066020908152604080832054600160a060020a03881684526004909252909120805490600019820182811061169357fe5b6000918252602080832090910154600160a060020a0389168352600490915260409091208054849081106116c357fe5b90600052602060002001819055508160066000600460008a600160a060020a0316600160a060020a031681526020019081526020016000206001850381548110151561170b57fe5b90600052602060002001548152602001908152602001600020819055506004600087600160a060020a0316600160a060020a031681526020019081526020016000206001820381548110151561175d57fe5b60009182526020808320909101829055600160a060020a038816825260049052604090208054600019019061179290826117c3565b50505060009283525050600560205260409020805473ffffffffffffffffffffffffffffffffffffffff1916905550565b8154818355818111156107775760008381526020902061077791810190830161074091905b808211156117fc57600081556001016117e8565b50905600a165627a7a72305820bc1647cdcfd7f6c4864a660d0ae57414fe906c94156a590b492a22d7731b60ab0029
Deployed Bytecode
0x6080604052600436106101275763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a7811461012c57806306fdde0314610177578063081812fc14610201578063095ea7b31461023557806318160ddd1461024e57806323b872dd146102755780632f745c591461029257806342842e0e146102b65780634f6ccce7146102d35780636352211e146102eb57806370a082311461030357806379c650681461032457806395d89b411461034857806397de8db01461035d578063a22cb465146103ce578063a5bfa9a9146103f4578063b88d4fde1461040c578063c87b56dd1461046e578063d4cab60d14610486578063e4b50cb8146104a0578063e985e9c5146104de578063f851a44014610505575b600080fd5b34801561013857600080fd5b506101637bffffffffffffffffffffffffffffffffffffffffffffffffffffffff196004351661051a565b604080519115158252519081900360200190f35b34801561018357600080fd5b5061018c610606565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101c65781810151838201526020016101ae565b50505050905090810190601f1680156101f35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561020d57600080fd5b50610219600435610694565b60408051600160a060020a039092168252519081900360200190f35b61024c600160a060020a03600435166024356106d6565b005b34801561025a57600080fd5b5061026361073c565b60408051918252519081900360200190f35b61024c600160a060020a0360043581169060243516604435610743565b34801561029e57600080fd5b50610263600160a060020a036004351660243561077c565b61024c600160a060020a036004358116906024351660443561081b565b3480156102df57600080fd5b5061026360043561084f565b3480156102f757600080fd5b50610219600435610880565b34801561030f57600080fd5b50610263600160a060020a03600435166108c2565b34801561033057600080fd5b5061024c600160a060020a03600435166024356108f5565b34801561035457600080fd5b5061018c610971565b34801561036957600080fd5b5061037e600160a060020a03600435166109cb565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103ba5781810151838201526020016103a2565b505050509050019250505060405180910390f35b3480156103da57600080fd5b5061024c600160a060020a03600435166024351515610a9f565b34801561040057600080fd5b5061024c600435610b23565b604080516020601f60643560048181013592830184900484028501840190955281845261024c94600160a060020a038135811695602480359092169560443595369560849401918190840183828082843750949750610c819650505050505050565b34801561047a57600080fd5b5061018c600435610cbc565b34801561049257600080fd5b5061024c6004351515610d5d565b3480156104ac57600080fd5b506104b8600435610dbe565b60408051938452600160a060020a03909216602084015282820152519081900360600190f35b3480156104ea57600080fd5b50610163600160a060020a0360043581169060243516610df1565b34801561051157600080fd5b50610219610e1f565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1982167f80ac58cd0000000000000000000000000000000000000000000000000000000014806105a757507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806105f057507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1982167f780e9d6300000000000000000000000000000000000000000000000000000000145b156105fd57506001610601565b5060005b919050565b6000805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561068c5780601f106106615761010080835404028352916020019161068c565b820191906000526020600020905b81548152906001019060200180831161066f57829003601f168201915b505050505081565b6000818152600560205260408120548290600160a060020a031615156106b957600080fd5b5050600090815260076020526040902054600160a060020a031690565b6000818152600560205260408120548290600160a060020a031615156106fb57600080fd5b8261070581610e2e565b151561071057600080fd5b600084815260056020526040902054600160a060020a03169250610735838686610e85565b5050505050565b6002545b90565b600a5474010000000000000000000000000000000000000000900460ff16151561076c57600080fd5b610777838383610f3d565b505050565b600080805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc548190600160a060020a031615156107be57600080fd5b600160a060020a03841660009081526004602052604090205483106107e257600080fd5b600160a060020a038416600090815260046020526040902080548490811061080657fe5b906000526020600020015491505b5092915050565b600a5474010000000000000000000000000000000000000000900460ff16151561084457600080fd5b610777838383610fe9565b600254600090821061086057600080fd5b600280548390811061086e57fe5b90600052602060002001549050919050565b6000818152600560205260408120548290600160a060020a031615156108a557600080fd5b5050600090815260056020526040902054600160a060020a031690565b6000600160a060020a03821615156108d957600080fd5b50600160a060020a031660009081526004602052604090205490565b600a54600090600160a060020a0316331461090f57600080fd5b600d5442111561091e57600080fd5b61092661073c565b905061093383828461117c565b8083600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561068c5780601f106106615761010080835404028352916020019161068c565b600160a060020a03811660009081526004602090815260408083205481518181528184028101909301909152606092839290918015610a14578160200160208202803883390190505b509150600090505b600160a060020a03841660009081526004602052604090205481101561081457600160a060020a03841660009081526004602052604081208054600c92919084908110610a6557fe5b90600052602060002001548152602001908152602001600020548282815181101515610a8d57fe5b60209081029091010152600101610a1c565b600160a060020a038216331415610ab557600080fd5b336000818152600860209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b600080600080600d544211151515610b3a57600080fd5b60009250600091505b6009821015610c1357600b805483908110610b5a57fe5b6000918252602091829020015460408051808401929092526c010000000000000000000000003302828201528051603481840301815260549092019081905281519192909182918401908083835b60208310610bc75780518252601f199092019160209182019101610ba8565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091208814159250610c089150505781935060019250610c13565b600190910190610b43565b600183151514610c2257600080fd5b610c2c3385611199565b15610c3657600080fd5b610c3e61073c565b9050610c4b33828661117c565b604051819033906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050505050565b600a5474010000000000000000000000000000000000000000900460ff161515610caa57600080fd5b610cb684848484611223565b50505050565b60008181526009602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845260609392830182828015610d515780601f10610d2657610100808354040283529160200191610d51565b820191906000526020600020905b815481529060010190602001808311610d3457829003601f168201915b50505050509050919050565b600a54600160a060020a03163314610d7457600080fd5b600a805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000908152600360209081526040808320546005835281842054600c9093529220549192600160a060020a039091169190565b600160a060020a03918216600090815260086020908152604080832093909416825291909152205460ff1690565b600a54600160a060020a031681565b600081815260056020526040812054600160a060020a0316331480610e7f5750600082815260056020908152604080832054600160a060020a031683526008825280832033845290915290205460ff165b92915050565b600160a060020a038281169084161415610e9e57600080fd5b600081815260076020526040902054600160a060020a0316158015610eca5750600160a060020a038216155b15610ed457600080fd5b600081815260076020526040808220805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386811691821790925591518493918716917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000818152600560205260409020548190600160a060020a03161515610f6257600080fd5b838383610f6e81610e2e565b80610f8f5750600081815260076020526040902054600160a060020a031633145b1515610f9a57600080fd5b600081815260056020526040902054600160a060020a03848116911614610fc057600080fd5b600160a060020a0382161515610fd557600080fd5b610fe0878787611476565b50505050505050565b6000818152600560205260408120548290600160a060020a0316151561100e57600080fd5b84848461101a81610e2e565b8061103b5750600081815260076020526040902054600160a060020a031633145b151561104657600080fd5b600081815260056020526040902054600160a060020a0384811691161461106c57600080fd5b600160a060020a038216151561108157600080fd5b61108c888888611476565b863b9450600085111561117257604080517f150b7a0200000000000000000000000000000000000000000000000000000000808252336004830152600160a060020a038b81166024840152604483018a90526080606484015260006084840181905293519193908b169263150b7a029260c48083019360209383900390910190829087803b15801561111d57600080fd5b505af1158015611131573d6000803e3d6000fd5b505050506040513d602081101561114757600080fd5b50517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461117257600080fd5b5050505050505050565b61118683836114f9565b6000918252600c60205260409091205550565b6000805b600160a060020a03841660009081526004602052604090205481101561121957600160a060020a038416600090815260046020526040812080548592600c929091859081106111e857fe5b906000526020600020015481526020019081526020016000205414156112115760019150610814565b60010161119d565b5060009392505050565b6000828152600560205260408120548390600160a060020a0316151561124857600080fd5b85858561125481610e2e565b806112755750600081815260076020526040902054600160a060020a031633145b151561128057600080fd5b600081815260056020526040902054600160a060020a038481169116146112a657600080fd5b600160a060020a03821615156112bb57600080fd5b6112c6898989611476565b873b9450600085111561146b5763150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191688600160a060020a031663150b7a02338c8b8b6040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018085600160a060020a0316600160a060020a0316815260200184600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156113c75781810151838201526020016113af565b50505050905090810190601f1680156113f45780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561141657600080fd5b505af115801561142a573d6000803e3d6000fd5b505050506040513d602081101561144057600080fd5b50517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461146b57600080fd5b505050505050505050565b600081815260076020526040902054600160a060020a03161561149f5761149f83600083610e85565b6114a983826115a7565b6114b382826114f9565b8082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60028054600181810183557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace909101839055905460008381526003602090815260408083206000199485019055600582528083208054600160a060020a0390981673ffffffffffffffffffffffffffffffffffffffff199098168817905595825260048152858220805494850181558083528183209094018590559254938152600690925292902091019055565b60008181526003602052604081205460028054919290819060001984018481106115cd57fe5b90600052602060002001546002858154811015156115e757fe5b9060005260206000200181905550836003600060026001870381548110151561160c57fe5b906000526020600020015481526020019081526020016000208190555060026001840381548110151561163b57fe5b600091825260208220015560028054600019019061165990826117c3565b505050600083815260066020908152604080832054600160a060020a03881684526004909252909120805490600019820182811061169357fe5b6000918252602080832090910154600160a060020a0389168352600490915260409091208054849081106116c357fe5b90600052602060002001819055508160066000600460008a600160a060020a0316600160a060020a031681526020019081526020016000206001850381548110151561170b57fe5b90600052602060002001548152602001908152602001600020819055506004600087600160a060020a0316600160a060020a031681526020019081526020016000206001820381548110151561175d57fe5b60009182526020808320909101829055600160a060020a038816825260049052604090208054600019019061179290826117c3565b50505060009283525050600560205260409020805473ffffffffffffffffffffffffffffffffffffffff1916905550565b8154818355818111156107775760008381526020902061077791810190830161074091905b808211156117fc57600081556001016117e8565b50905600a165627a7a72305820bc1647cdcfd7f6c4864a660d0ae57414fe906c94156a590b492a22d7731b60ab0029
Deployed Bytecode Sourcemap
50:7994:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10780:330:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10780:330:1;-1:-1:-1;;10780:330:1;;;;;;;;;;;;;;;;;;;;;;;516:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;516:18:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;516:18:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9420:151;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9420:151:1;;;;;;;;;-1:-1:-1;;;;;9420:151:1;;;;;;;;;;;;;;5947:236;;-1:-1:-1;;;;;5947:236:1;;;;;;;;;7103:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7103:93:1;;;;;;;;;;;;;;;;;;;;5871:188:0;;-1:-1:-1;;;;;5871:188:0;;;;;;;;;;;;8443:233:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8443:233:1;-1:-1:-1;;;;;8443:233:1;;;;;;;5295:196:0;;-1:-1:-1;;;;;5295:196:0;;;;;;;;;;;;7843:155:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7843:155:1;;;;;7454:139;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7454:139:1;;;;;9006:147;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9006:147:1;-1:-1:-1;;;;;9006:147:1;;;;;3063:304:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3063:304:0;-1:-1:-1;;;;;3063:304:0;;;;;;;540:20:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;540:20:1;;;;4022:359:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4022:359:0;-1:-1:-1;;;;;4022:359:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4022:359:0;;;;;;;;;;;;;;;;;6580:271:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6580:271:1;-1:-1:-1;;;;;6580:271:1;;;;;;;;;1963:782:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1963:782:0;;;;;4786:223;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4786:223:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4786:223:0;;-1:-1:-1;4786:223:0;;-1:-1:-1;;;;;;;4786:223:0;10287:110:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10287:110:1;;;;;6539:96:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6539:96:0;;;;;;;3596:243;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3596:243:0;;;;;;;;;;;;-1:-1:-1;;;;;3596:243:0;;;;;;;;;;;;;;;;;;;;9872:142:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9872:142:1;-1:-1:-1;;;;;9872:142:1;;;;;;;;;;84:20:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;84:20:0;;;;10780:330:1;10850:4;-1:-1:-1;;10871:46:1;;10886:31;10871:46;;:108;;-1:-1:-1;;;10929:50:1;;10944:35;10929:50;10871:108;:172;;;-1:-1:-1;;;10991:52:1;;11006:37;10991:52;10871:172;10867:237;;;-1:-1:-1;11066:4:1;11059:11;;10867:237;-1:-1:-1;11096:5:1;10867:237;10780:330;;;:::o;516:18::-;;;;;;;;;;;;;;;-1:-1:-1;;516:18:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9420:151::-;9508:7;1772:22;;;:12;:22;;;;;;9489:8;;-1:-1:-1;;;;;1772:22:1;:27;;1764:36;;;;;;-1:-1:-1;;9534:30:1;;;;:20;:30;;;;;;-1:-1:-1;;;;;9534:30:1;;9420:151::o;5947:236::-;6085:13;1772:22;;;:12;:22;;;;;;6034:8;;-1:-1:-1;;;;;1772:22:1;:27;;1764:36;;;;;;6065:8;2017:33;2041:8;2017:23;:33::i;:::-;2009:42;;;;;;;;6101:22;;;;:12;:22;;;;;;-1:-1:-1;;;;;6101:22:1;;-1:-1:-1;6133:43:1;6101:22;6156:9;6114:8;6133:15;:43::i;:::-;1810:1;5947:236;;;;:::o;7103:93::-;7173:9;:16;7103:93;;:::o;5871:188:0:-;8008:15;;;;;;;8000:24;;;;;;;;6012:40;6031:5;6038:3;6043:8;6012:18;:40::i;:::-;5871:188;;;:::o;8443:233:1:-;8553:16;1772:22;;;:12;:22;;;;8553:16;;-1:-1:-1;;;;;1772:22:1;:27;;1764:36;;;;;;-1:-1:-1;;;;;8598:19:1;;;;;;:11;:19;;;;;:26;8589:35;;8581:44;;;;;;-1:-1:-1;;;;;8642:19:1;;;;;;:11;:19;;;;;:27;;8662:6;;8642:27;;;;;;;;;;;;;;8635:34;;1810:1;8443:233;;;;;:::o;5295:196:0:-;8008:15;;;;;;;8000:24;;;;;;;;5440:44;5463:5;5470:3;5475:8;5440:22;:44::i;7843:155:1:-;7940:9;:16;7904:7;;7931:25;;7923:34;;;;;;7974:9;:17;;7984:6;;7974:17;;;;;;;;;;;;;;7967:24;;7843:155;;;:::o;7454:139::-;7538:7;1772:22;;;:12;:22;;;;;;7519:8;;-1:-1:-1;;;;;1772:22:1;:27;;1764:36;;;;;;-1:-1:-1;;7564:22:1;;;;:12;:22;;;;;;-1:-1:-1;;;;;7564:22:1;;7454:139::o;9006:147::-;9064:7;-1:-1:-1;;;;;9091:11:1;;;;9083:20;;;;;;-1:-1:-1;;;;;;9120:19:1;;;;;:11;:19;;;;;:26;;9006:147::o;3063:304:0:-;7828:5;;3213:15;;-1:-1:-1;;;;;7828:5:0;7814:10;:19;7806:28;;;;;;7921:17;;7902:15;:36;;7894:45;;;;;;3231:13;:11;:13::i;:::-;3213:31;;3254:34;3263:3;3268:7;3277:10;3254:8;:34::i;:::-;3352:7;3347:3;-1:-1:-1;;;;;3333:27:0;3342:3;3333:27;;;;;;;;;;3063:304;;;:::o;540:20:1:-;;;;;;;;;;;;;;;-1:-1:-1;;540:20:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4022:359:0;-1:-1:-1;;;;;4167:20:0;;4211:9;4167:20;;;:11;:20;;;;;;;;:27;4153:42;;;;;;;;;;;;;;;;4099:9;;;;4211;;4153:42;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;4153:42:0;;4120:75;;4223:1;4211:13;;4206:138;-1:-1:-1;;;;;4230:20:0;;;;;;:11;:20;;;;;:27;4226:31;;4206:138;;;-1:-1:-1;;;;;4309:20:0;;4297:36;4309:20;;;:11;:20;;;;;:23;;4297:11;;:36;4309:20;4330:1;;4309:23;;;;;;;;;;;;;;4297:36;;;;;;;;;;;;4278:13;4292:1;4278:16;;;;;;;;;;;;;;;;;;:55;4259:3;;4206:138;;6580:271:1;-1:-1:-1;;;;;6669:23:1;;6682:10;6669:23;;6661:32;;;;;;6747:10;6737:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;6737:32:1;;;;;;;;;;;;:44;;-1:-1:-1;;6737:44:1;;;;;;;;;;6796:48;;;;;;;6737:32;;6747:10;6796:48;;;;;;;;;;;6580:271;;:::o;1963:782:0:-;2094:17;2121:10;2153:9;2578:15;7921:17;;7902:15;:36;;7894:45;;;;;;;;2134:5;2121:18;;2165:1;2153:13;;2149:223;2172:1;2168;:5;2149:223;;;2240:4;:7;;2245:1;;2240:7;;;;;;;;;;;;;;;;;2223:37;;;;;;;;;;;2249:10;2223:37;;;;;;;22:32:-1;26:21;;;22:32;6:49;;2223:37:0;;;;;;;;2213:48;;2223:37;;;;;;2213:48;;;;2223:37;2213:48;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;2213:48:0;;;;;;;;;;2198:63;;2194:168;;-1:-1:-1;2194:168:0;;-1:-1:-1;;2194:168:0;2293:1;2281:13;;2320:4;2312:12;;2342:5;;2194:168;2175:3;;;;;2149:223;;;2398:4;2389:13;;;;2381:22;;;;;;2485:40;2503:10;2515:9;2485:17;:40::i;:::-;:49;2477:58;;;;;;2596:13;:11;:13::i;:::-;2578:31;;2619:40;2628:10;2640:7;2649:9;2619:8;:40::i;:::-;2704:34;;2730:7;;2718:10;;2713:3;;2704:34;;2713:3;;2704:34;1963:782;;;;;:::o;4786:223::-;8008:15;;;;;;;8000:24;;;;;;;;4952:50;4975:5;4982:3;4987:8;4997:4;4952:22;:50::i;:::-;4786:223;;;;:::o;10287:110:1:-;10371:19;;;;:9;:19;;;;;;;;;10364:26;;;;;;-1:-1:-1;;10364:26:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10346:6;;10364:26;;;10371:19;10364:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10287:110;;;:::o;6539:96:0:-;7828:5;;-1:-1:-1;;;;;7828:5:0;7814:10;:19;7806:28;;;;;;6603:15;:25;;;;;;;;;;;;;;;;;6539:96::o;3596:243::-;3669:7;3727:24;;;:14;:24;;;;;;;;;3765:12;:22;;;;;;3801:11;:21;;;;;;3727:24;;-1:-1:-1;;;;;3765:22:0;;;;3801:21;3596:243::o;9872:142:1:-;-1:-1:-1;;;;;9979:17:1;;;9956:4;9979:17;;;:9;:17;;;;;;;;:28;;;;;;;;;;;;;;;9872:142::o;84:20:0:-;;;-1:-1:-1;;;;;84:20:0;;:::o;11151:189:1:-;11225:4;11248:22;;;:12;:22;;;;;;-1:-1:-1;;;;;11248:22:1;11274:10;11248:36;;:85;;-1:-1:-1;11288:33:1;11298:22;;;:12;:22;;;;;;;;;-1:-1:-1;;;;;11298:22:1;11288:33;;:9;:33;;;;;11322:10;11288:45;;;;;;;;;;11248:85;11241:92;11151:189;-1:-1:-1;;11151:189:1:o;11346:605::-;-1:-1:-1;;;;;11451:19:1;;;;;;;;11443:28;;;;;;11702:30;;;;:20;:30;;;;;;-1:-1:-1;;;;;11702:30:1;:35;:53;;;;-1:-1:-1;;;;;;11741:14:1;;;11702:53;11698:247;;;11771:8;;;11698:247;11836:30;;;;:20;:30;;;;;;:42;;-1:-1:-1;;11836:42:1;-1:-1:-1;;;;;11836:42:1;;;;;;;;;11897:37;;11836:30;;11897:37;;;;;;;11346:605;;;:::o;2970:231::-;1772:22;;;;:12;:22;;;;;;3069:8;;-1:-1:-1;;;;;1772:22:1;:27;;1764:36;;;;;;3101:5;3108:3;3113:8;2166:33;2190:8;2166:23;:33::i;:::-;:81;;;-1:-1:-1;2203:30:1;;;;:20;:30;;;;;;-1:-1:-1;;;;;2203:30:1;2237:10;2203:44;2166:81;2158:90;;;;;;;;2266:22;;;;:12;:22;;;;;;-1:-1:-1;;;;;2266:31:1;;;:22;;:31;2258:40;;;;;;-1:-1:-1;;;;;2316:8:1;;;;2308:17;;;;;;3158:36;3173:5;3180:3;3185:8;3158:14;:36::i;:::-;1810:1;;;2970:231;;;;:::o;5004:580::-;5255:12;1772:22;;;:12;:22;;;;;;5107:8;;-1:-1:-1;;;;;1772:22:1;:27;;1764:36;;;;;;5139:5;5146:3;5151:8;2166:33;2190:8;2166:23;:33::i;:::-;:81;;;-1:-1:-1;2203:30:1;;;;:20;:30;;;;;;-1:-1:-1;;;;;2203:30:1;2237:10;2203:44;2166:81;2158:90;;;;;;;;2266:22;;;;:12;:22;;;;;;-1:-1:-1;;;;;2266:31:1;;;:22;;:31;2258:40;;;;;;-1:-1:-1;;;;;2316:8:1;;;;2308:17;;;;;;5171:36;5186:5;5193:3;5198:8;5171:14;:36::i;:::-;5308:3;5296:16;5288:24;;5378:1;5371:4;:8;5367:211;;;5444:83;;;5531:35;5444:83;;;5495:10;5444:83;;;;-1:-1:-1;;;;;5444:83:1;;;;;;;;;;;;;;;;;;-1:-1:-1;5444:83:1;;;;;;;;5531:35;;5444:50;;;;1678:10;;5444:83;;;;;;;;;;;;;;;;:50;:83;;;5:2:-1;;;;30:1;27;20:12;5:2;5444:83:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5444:83:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5444:83:1;-1:-1:-1;;5444:122:1;;5436:131;;;;;;1810:1;;;5004:580;;;;;:::o;7543:226:0:-;7661:29;7676:3;7681:8;7661:14;:29::i;:::-;7728:21;;;;:11;:21;;;;;;:34;-1:-1:-1;7543:226:0:o;6848:335::-;6957:4;;6973:182;-1:-1:-1;;;;;6997:20:0;;;;;;:11;:20;;;;;:27;6993:31;;6973:182;;;-1:-1:-1;;;;;7061:20:0;;7049:36;7061:20;;;:11;:20;;;;;:23;;7089:10;;7049:11;;:36;;7082:1;;7061:23;;;;;;;;;;;;;;7049:36;;;;;;;;;;;;:50;7045:100;;;7126:4;7119:11;;;;7045:100;7026:3;;6973:182;;;-1:-1:-1;7171:5:0;;6848:335;-1:-1:-1;;;6848:335:0:o;4052:594:1:-;4315:12;1772:22;;;:12;:22;;;;;;4167:8;;-1:-1:-1;;;;;1772:22:1;:27;;1764:36;;;;;;4199:5;4206:3;4211:8;2166:33;2190:8;2166:23;:33::i;:::-;:81;;;-1:-1:-1;2203:30:1;;;;:20;:30;;;;;;-1:-1:-1;;;;;2203:30:1;2237:10;2203:44;2166:81;2158:90;;;;;;;;2266:22;;;;:12;:22;;;;;;-1:-1:-1;;;;;2266:31:1;;;:22;;:31;2258:40;;;;;;-1:-1:-1;;;;;2316:8:1;;;;2308:17;;;;;;4231:36;4246:5;4253:3;4258:8;4231:14;:36::i;:::-;4368:3;4356:16;4348:24;;4438:1;4431:4;:8;4427:213;;;1678:10;4593:35;;4504:124;;;4533:3;-1:-1:-1;;;;;4504:50:1;;4555:10;4567:5;4574:8;4584:4;4504:85;;;;;;;;;;;;;-1:-1:-1;;;;;4504:85:1;-1:-1:-1;;;;;4504:85:1;;;;;;-1:-1:-1;;;;;4504:85:1;-1:-1:-1;;;;;4504:85:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4504:85:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4504:85:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4504:85:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4504:85:1;-1:-1:-1;;4504:124:1;;4496:133;;;;;;1810:1;;;4052:594;;;;;;:::o;11957:365::-;12101:30;;;;:20;:30;;;;;;-1:-1:-1;;;;;12101:30:1;:35;12097:101;;12152:35;12168:5;12175:1;12178:8;12152:15;:35::i;:::-;12208:28;12220:5;12227:8;12208:11;:28::i;:::-;12246:23;12255:3;12260:8;12246;:23::i;:::-;12306:8;12301:3;-1:-1:-1;;;;;12285:30:1;12294:5;-1:-1:-1;;;;;12285:30:1;;;;;;;;;;;11957:365;;;:::o;12328:556::-;12435:9;27:10:-1;;39:1;23:18;;;45:23;;12435:24:1;;;;;;;12545:16;;-1:-1:-1;12518:24:1;;;:14;12435:24;12518;;;;;;;-1:-1:-1;;12545:18:1;;;12518:45;;12622:12;:22;;;;;:28;;-1:-1:-1;;;;;12622:28:1;;;-1:-1:-1;;12622:28:1;;;;;;;12744:16;;;:11;:16;;;;;27:10:-1;;23:18;;;45:23;;12744:31:1;;;;;;;;;;;;12852:23;;12823:26;;;:16;:26;;;;;;12852:25;;12823:54;;12328:556::o;12890:1474::-;13010:16;13029:24;;;:14;:24;;;;;;13089:9;:16;;13029:24;;13010:16;;;-1:-1:-1;;13214:19:1;;13204:30;;;;;;;;;;;;;;;13182:9;13192:8;13182:19;;;;;;;;;;;;;;;;;:52;;;;13386:8;13339:14;:44;13354:9;13380:1;13364:15;:17;13354:28;;;;;;;;;;;;;;;;;;13339:44;;;;;;;;;;;:55;;;;13470:9;13496:1;13480:15;:17;13470:28;;;;;;;;;;;;;;;;;;13463:35;13544:9;:21;;-1:-1:-1;;13544:21:1;;;;;;:::i;:::-;-1:-1:-1;;;13708:26:1;;;;:16;:26;;;;;;;;;-1:-1:-1;;;;;13766:18:1;;;;:11;:18;;;;;;:25;;;-1:-1:-1;;13956:13:1;;13937:33;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13904:18:1;;;;:11;:18;;;;;;;:30;;13923:10;;13904:30;;;;;;;;;;;;;:66;;;;14122:10;14068:16;:51;14085:11;:18;14097:5;-1:-1:-1;;;;;14085:18:1;-1:-1:-1;;;;;14085:18:1;;;;;;;;;;;;14116:1;14104:11;:13;14085:33;;;;;;;;;;;;;;;;;;14068:51;;;;;;;;;;;:64;;;;14208:11;:18;14220:5;-1:-1:-1;;;;;14208:18:1;-1:-1:-1;;;;;14208:18:1;;;;;;;;;;;;14239:1;14227:11;:13;14208:33;;;;;;;;;;;;;;;;;;;;;14201:40;;;-1:-1:-1;;;;;14287:18:1;;;;:11;:18;;;;;:30;;-1:-1:-1;;14287:30:1;;;;;;:::i;:::-;-1:-1:-1;;;14335:22:1;;;;-1:-1:-1;;14335:12:1;:22;;;;;14328:29;;-1:-1:-1;;14328:29:1;;;-1:-1:-1;12890:1474:1:o;50:7994:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://bc1647cdcfd7f6c4864a660d0ae57414fe906c94156a590b492a22d7731b60ab
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.