Feature Tip: Add private address tag to any address under My Name Tag !
Overview
Max Total Supply
110 ABT
Holders
31
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
0 ABTLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
ABToken
Compiler Version
v0.5.3+commit.10d17f24
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-03-14 */ pragma solidity ^0.5.3; library Strings { // via https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol function strConcat(string memory _a, string memory _b, string memory _c, string memory _d, string memory _e) internal pure returns (string memory) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; uint i =0; for (i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string memory _a, string memory _b, string memory _c, string memory _d) internal pure returns (string memory) { return strConcat(_a, _b, _c, _d, ""); } function strConcat(string memory _a, string memory _b, string memory _c) internal pure returns (string memory) { return strConcat(_a, _b, _c, "", ""); } function strConcat(string memory _a, string memory _b) internal pure returns (string memory) { return strConcat(_a, _b, "", "", ""); } function uint2str(uint i) internal pure returns (string memory) { if (i == 0) return "0"; uint j = i; uint len; while (j != 0){ len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (i != 0){ bstr[k--] = byte(uint8(48 + i % 10)); i /= 10; } return string(bstr); } } contract AccessControl { address payable public creatorAddress; uint16 public totalSeraphims = 0; mapping (address => bool) public seraphims; bool public isMaintenanceMode = true; modifier onlyCREATOR() { require(msg.sender == creatorAddress); _; } modifier onlySERAPHIM() { require(seraphims[msg.sender] == true); _; } modifier isContractActive { require(!isMaintenanceMode); _; } // Constructor constructor() public { creatorAddress = msg.sender; } //Seraphims are contracts or addresses that have write access function addSERAPHIM(address _newSeraphim) onlyCREATOR public { if (seraphims[_newSeraphim] == false) { seraphims[_newSeraphim] = true; totalSeraphims += 1; } } function removeSERAPHIM(address _oldSeraphim) onlyCREATOR public { if (seraphims[_oldSeraphim] == true) { seraphims[_oldSeraphim] = false; totalSeraphims -= 1; } } function updateMaintenanceMode(bool _isMaintaining) onlyCREATOR public { isMaintenanceMode = _isMaintaining; } } /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on 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-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } function getRandomNumber(uint16 maxRandom, uint8 min, address privateAddress) view public returns(uint8) { uint256 genNum = uint256(blockhash(block.number-1)) + uint256(privateAddress); return uint8(genNum % (maxRandom - min + 1)+min); } } /** * Utility library of inline functions on addresses */ library Address { /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract, * as the code is not actually created until after the constructor finishes. * @param account address of the account to check * @return whether the target address is a contract */ function isContract(address account) internal view returns (bool) { uint256 size; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } /** * @title IERC165 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md */ interface IERC165 { /** * @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. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @title ERC165 * @author Matt Condon (@shrugs) * @dev Implements ERC165 using a lookup table. */ contract ERC165 is IERC165 { bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; /** * 0x01ffc9a7 === * bytes4(keccak256('supportsInterface(bytes4)')) */ /** * @dev a mapping of interface id to whether or not it's supported */ mapping(bytes4 => bool) private _supportedInterfaces; /** * @dev A contract implementing SupportsInterfaceWithLookup * implement ERC165 itself */ constructor () internal { _registerInterface(_INTERFACE_ID_ERC165); } /** * @dev implement supportsInterface(bytes4) using a lookup table */ function supportsInterface(bytes4 interfaceId) external view returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev internal method for registering an interface */ function _registerInterface(bytes4 interfaceId) internal { require(interfaceId != 0xffffffff); _supportedInterfaces[interfaceId] = true; } } /** * @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 `safeTransfer`. 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(keccak256("onERC721Received(address,address,uint256,bytes)"))` */ function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data) public returns (bytes4); } /** * @title ERC721 Non-Fungible Token Standard basic interface * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ 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); function balanceOf(address owner) public view returns (uint256 balance); function ownerOf(uint256 tokenId) public view returns (address owner); 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 transferFrom(address from, address to, uint256 tokenId) public; function safeTransferFrom(address from, address to, uint256 tokenId) public; function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public; } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ contract ERC721Receiver { /** * @dev Magic value to be returned upon successful reception of an NFT * Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`, * which can be also obtained as `ERC721Receiver(0).onERC721Received.selector` */ bytes4 internal constant ERC721_RECEIVED = 0x150b7a02; /** * @notice Handle the receipt of an NFT * @dev The ERC721 smart contract calls this function on the recipient * after a `safetransfer`. 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)"))` */ function onERC721Received( address _operator, address _from, uint256 _tokenId, bytes4 _data ) public returns(bytes4); } contract OwnableDelegateProxy { } contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } contract iABToken is AccessControl{ function balanceOf(address owner) public view returns (uint256); function totalSupply() external view returns (uint256) ; function ownerOf(uint256 tokenId) public view returns (address) ; function setMaxAngels() external; function setMaxAccessories() external; function setMaxMedals() external ; function initAngelPrices() external; function initAccessoryPrices() external ; function setCardSeriesPrice(uint8 _cardSeriesId, uint _newPrice) external; function approve(address to, uint256 tokenId) public; function getRandomNumber(uint16 maxRandom, uint8 min, address privateAddress) view public returns(uint8) ; function tokenURI(uint256 _tokenId) public pure returns (string memory) ; function baseTokenURI() public pure returns (string memory) ; function name() external pure returns (string memory _name) ; function symbol() external pure returns (string memory _symbol) ; function getApproved(uint256 tokenId) public view returns (address) ; function setApprovalForAll(address to, bool approved) public ; function isApprovedForAll(address owner, address operator) public view returns (bool); function transferFrom(address from, address to, uint256 tokenId) public ; function safeTransferFrom(address from, address to, uint256 tokenId) public ; function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public ; function _exists(uint256 tokenId) internal view returns (bool) ; function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) ; function _mint(address to, uint256 tokenId) internal ; function mintABToken(address owner, uint8 _cardSeriesId, uint16 _power, uint16 _auraRed, uint16 _auraYellow, uint16 _auraBlue, string memory _name, uint16 _experience, uint16 _oldId) public; function addABTokenIdMapping(address _owner, uint256 _tokenId) private ; function getPrice(uint8 _cardSeriesId) public view returns (uint); function buyAngel(uint8 _angelSeriesId) public payable ; function buyAccessory(uint8 _accessorySeriesId) public payable ; function getAura(uint8 _angelSeriesId) pure public returns (uint8 auraRed, uint8 auraYellow, uint8 auraBlue) ; function getAngelPower(uint8 _angelSeriesId) private view returns (uint16) ; function getABToken(uint256 tokenId) view public returns(uint8 cardSeriesId, uint16 power, uint16 auraRed, uint16 auraYellow, uint16 auraBlue, string memory name, uint16 experience, uint64 lastBattleTime, uint16 lastBattleResult, address owner, uint16 oldId); function setAuras(uint256 tokenId, uint16 _red, uint16 _blue, uint16 _yellow) external; function setName(uint256 tokenId,string memory namechange) public ; function setExperience(uint256 tokenId, uint16 _experience) external; function setLastBattleResult(uint256 tokenId, uint16 _result) external ; function setLastBattleTime(uint256 tokenId) external; function setLastBreedingTime(uint256 tokenId) external ; function setoldId(uint256 tokenId, uint16 _oldId) external; function getABTokenByIndex(address _owner, uint64 _index) view external returns(uint256) ; function _burn(address owner, uint256 tokenId) internal ; function _burn(uint256 tokenId) internal ; function _transferFrom(address from, address to, uint256 tokenId) internal ; function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) internal returns (bool); function _clearApproval(uint256 tokenId) private ; } /** * @title ERC721 Non-Fungible Token Standard basic implementation * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ABToken is IERC721, iABToken, ERC165 { using SafeMath for uint256; using SafeMath for uint8; using Address for address; uint256 public totalTokens; //Mapping or which IDs each address owns mapping(address => uint256[]) public ownerABTokenCollection; // 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 => uint256) private _ownedTokensCount; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; /* * 0x80ac58cd === * bytes4(keccak256('balanceOf(address)')) ^ * bytes4(keccak256('ownerOf(uint256)')) ^ * bytes4(keccak256('approve(address,uint256)')) ^ * bytes4(keccak256('getApproved(uint256)')) ^ * bytes4(keccak256('setApprovalForAll(address,bool)')) ^ * bytes4(keccak256('isApprovedForAll(address,address)')) ^ * bytes4(keccak256('transferFrom(address,address,uint256)')) ^ * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^ * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) */ //current and max numbers of issued tokens for each series uint32[100] public currentTokenNumbers; uint32[100] public maxTokenNumbers; //current price of each angel and accessory series uint[24] public angelPrice; uint[18] public accessoryPrice; address proxyRegistryAddress; // Main data structure for each token struct ABCard { uint256 tokenId; uint8 cardSeriesId; //This is 0 to 23 for angels, 24 to 42 for pets, 43 to 60 for accessories, 61 to 72 for medals //address owner; //already accounted in mapping. uint16 power; //This number is luck for pets and battlepower for angels uint16 auraRed; uint16 auraYellow; uint16 auraBlue; string name; uint16 experience; uint64 lastBattleTime; uint64 lastBreedingTime; uint16 lastBattleResult; uint16 oldId; //for cards transfered from the first version of the game. } //Main mapping storing an ABCard for each token ID mapping(uint256 => ABCard) public ABTokenCollection; constructor() public { // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721); } /** * @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)); return _ownedTokensCount[owner]; } function totalSupply() external view returns (uint256) { return totalTokens; } /** * @dev Gets the owner of the specified token ID * @param tokenId uint256 ID of the token to query the owner of * @return owner 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)); return owner; } //Initial function to set the maximum numbers of each angel card function setMaxAngels() external onlyCREATOR { uint i =0; //Angels 0 and 1 have no max //Lucifer and Michael have max numbers 250 maxTokenNumbers[2] = 250; maxTokenNumbers[3] = 250; maxTokenNumbers[4] = 45; maxTokenNumbers[5] = 50; for (i=6; i<15; i++) { maxTokenNumbers[i]= 45; } for (i=15; i<24; i++) { maxTokenNumbers[i]= 65; } } //Initial function to set the maximum number of accessories function setMaxAccessories() external onlyCREATOR { uint i = 0; for (i=43; i<60; i++) { maxTokenNumbers[i]= 200; } } //Initial function to set the max number of medals function setMaxMedals() onlyCREATOR external { maxTokenNumbers[61] = 5000; maxTokenNumbers[62] = 5000; maxTokenNumbers[63] = 5000; maxTokenNumbers[64] = 5000; maxTokenNumbers[65] = 500; maxTokenNumbers[66] = 500; maxTokenNumbers[67] = 200; maxTokenNumbers[68] = 200; maxTokenNumbers[69] = 200; maxTokenNumbers[70] = 100; maxTokenNumbers[71] = 100; maxTokenNumbers[72] = 50; } //Function called once at the beginning to set the prices of all the angel cards. function initAngelPrices() external onlyCREATOR { angelPrice[0] = 0; angelPrice[1] = 30000000000000000; angelPrice[2] = 666000000000000000; angelPrice[3] = 800000000000000000; angelPrice[4] = 10000000000000000; angelPrice[5] = 10000000000000000; angelPrice[6] = 20000000000000000; angelPrice[7] = 25000000000000000; angelPrice[8] = 16000000000000000; angelPrice[9] = 18000000000000000; angelPrice[10] = 14000000000000000; angelPrice[11] = 20000000000000000; angelPrice[12] = 24000000000000000; angelPrice[13] = 28000000000000000; angelPrice[14] = 40000000000000000; angelPrice[15] = 50000000000000000; angelPrice[16] = 53000000000000000; angelPrice[17] = 60000000000000000; angelPrice[18] = 65000000000000000; angelPrice[19] = 70000000000000000; angelPrice[20] = 75000000000000000; angelPrice[21] = 80000000000000000; angelPrice[22] = 85000000000000000; angelPrice[23] = 90000000000000000; } //Function called once at the beginning to set the prices of all the accessory cards. function initAccessoryPrices() external onlyCREATOR { accessoryPrice[0] = 20000000000000000; accessoryPrice[1] = 60000000000000000; accessoryPrice[2] = 40000000000000000; accessoryPrice[3] = 90000000000000000; accessoryPrice[4] = 80000000000000000; accessoryPrice[5] = 160000000000000000; accessoryPrice[6] = 60000000000000000; accessoryPrice[7] = 120000000000000000; accessoryPrice[8] = 60000000000000000; accessoryPrice[9] = 120000000000000000; accessoryPrice[10] = 60000000000000000; accessoryPrice[11] = 120000000000000000; accessoryPrice[12] = 200000000000000000; accessoryPrice[13] = 200000000000000000; accessoryPrice[14] = 200000000000000000; accessoryPrice[15] = 200000000000000000; accessoryPrice[16] = 500000000000000000; accessoryPrice[17] = 600000000000000000; } // Developer function to change the price (in wei) for a card series. function setCardSeriesPrice(uint8 _cardSeriesId, uint _newPrice) external onlyCREATOR { if (_cardSeriesId <24) {angelPrice[_cardSeriesId] = _newPrice;} else { if ((_cardSeriesId >42) && (_cardSeriesId < 61)) {accessoryPrice[(_cardSeriesId-43)] = _newPrice;} } } function withdrawEther() external onlyCREATOR { creatorAddress.transfer(address(this).balance); } /** * @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); require(msg.sender == owner || isApprovedForAll(owner, msg.sender)); _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } function getRandomNumber(uint16 maxRandom, uint8 min, address privateAddress) view public returns(uint8) { uint256 genNum = uint256(blockhash(block.number-1)) + uint256(privateAddress); return uint8(genNum % (maxRandom - min + 1)+min); } /** * @dev Returns an URI for a given token ID */ function tokenURI(uint256 _tokenId) public pure returns (string memory) { return Strings.strConcat( baseTokenURI(), Strings.uint2str(_tokenId) ); } function baseTokenURI() public pure returns (string memory) { return "https://www.angelbattles.com/URI/"; } /// @notice A descriptive name for a collection of NFTs in this contract function name() external pure returns (string memory _name) { return "Angel Battle Token"; } /// @notice An abbreviated name for NFTs in this contract function symbol() external pure returns (string memory _symbol) { return "ABT"; } /** * @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)); 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 != msg.sender); _operatorApprovals[msg.sender][to] = approved; emit ApprovalForAll(msg.sender, 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]; } /** * Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings. */ /** * @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(msg.sender, tokenId)); _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 `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 `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) public { transferFrom(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data)); } /** * @dev Returns whether the specified token exists * @param tokenId uint256 ID of the token to query the existence of * @return 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) { address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @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 * @param tokenId uint256 ID of the token to be minted */ function _mint(address to, uint256 tokenId) internal { require(to != address(0)); require(!_exists(tokenId)); _tokenOwner[tokenId] = to; _ownedTokensCount[to] = _ownedTokensCount[to].add(1); addABTokenIdMapping(to, tokenId); emit Transfer(address(0), to, tokenId); } function mintABToken(address owner, uint8 _cardSeriesId, uint16 _power, uint16 _auraRed, uint16 _auraYellow, uint16 _auraBlue, string memory _name, uint16 _experience, uint16 _oldId) public onlySERAPHIM { require((currentTokenNumbers[_cardSeriesId] < maxTokenNumbers[_cardSeriesId] || maxTokenNumbers[_cardSeriesId] == 0)); require(_cardSeriesId <100); ABCard storage abcard = ABTokenCollection[totalTokens]; abcard.power = _power; abcard.cardSeriesId= _cardSeriesId; abcard.auraRed = _auraRed; abcard.auraYellow= _auraYellow; abcard.auraBlue= _auraBlue; abcard.name = _name; abcard.experience = _experience; abcard.tokenId = totalTokens; abcard.lastBattleTime = uint64(now); abcard.lastBreedingTime = uint64(now); abcard.lastBattleResult = 0; abcard.oldId = _oldId; _mint(owner, totalTokens); totalTokens = totalTokens +1; currentTokenNumbers[_cardSeriesId] ++; } function _mintABToken(address owner, uint8 _cardSeriesId, uint16 _power, uint16 _auraRed, uint16 _auraYellow, uint16 _auraBlue, string memory _name, uint16 _experience, uint16 _oldId) internal { require((currentTokenNumbers[_cardSeriesId] < maxTokenNumbers[_cardSeriesId] || maxTokenNumbers[_cardSeriesId] == 0)); require(_cardSeriesId <100); ABCard storage abcard = ABTokenCollection[totalTokens]; abcard.power = _power; abcard.cardSeriesId= _cardSeriesId; abcard.auraRed = _auraRed; abcard.auraYellow= _auraYellow; abcard.auraBlue= _auraBlue; abcard.name = _name; abcard.experience = _experience; abcard.tokenId = totalTokens; abcard.lastBattleTime = uint64(now); abcard.lastBreedingTime = uint64(now); abcard.lastBattleResult = 0; abcard.oldId = _oldId; _mint(owner, totalTokens); totalTokens = totalTokens +1; currentTokenNumbers[_cardSeriesId] ++; } function addABTokenIdMapping(address _owner, uint256 _tokenId) private { uint256[] storage owners = ownerABTokenCollection[_owner]; owners.push(_tokenId); } function getPrice(uint8 _cardSeriesId) public view returns (uint) { if (_cardSeriesId <24) {return angelPrice[_cardSeriesId];} if ((_cardSeriesId >42) && (_cardSeriesId < 61)) {return accessoryPrice[(_cardSeriesId-43)];} return 0; } function buyAngel(uint8 _angelSeriesId) public payable { //don't create another card if we are already at the max if ((maxTokenNumbers[_angelSeriesId] <= currentTokenNumbers[_angelSeriesId]) && (_angelSeriesId >1 )) {revert();} //don't create another card if they haven't sent enough money. if (msg.value < angelPrice[_angelSeriesId]) {revert();} //don't create an angel card if they are trying to create a different type of card. if ((_angelSeriesId<0) || (_angelSeriesId > 23)) {revert();} uint8 auraRed; uint8 auraYellow; uint8 auraBlue; uint16 power; (auraRed, auraYellow, auraBlue) = getAura(_angelSeriesId); (power) = getAngelPower(_angelSeriesId); _mintABToken(msg.sender, _angelSeriesId, power, auraRed, auraYellow, auraBlue,"", 0, 0); } function buyAccessory(uint8 _accessorySeriesId) public payable { //don't create another card if we are already at the max if (maxTokenNumbers[_accessorySeriesId] <= currentTokenNumbers[_accessorySeriesId]) {revert();} //don't create another card if they haven't sent enough money. if (msg.value < accessoryPrice[_accessorySeriesId-43]) {revert();} //don't create a card if they are trying to create a different type of card. if ((_accessorySeriesId<43) || (_accessorySeriesId > 60)) {revert();} _mintABToken(msg.sender,_accessorySeriesId, 0, 0, 0, 0, "",0, 0); } //Returns the Aura color of each angel function getAura(uint8 _angelSeriesId) pure public returns (uint8 auraRed, uint8 auraYellow, uint8 auraBlue) { if (_angelSeriesId == 0) {return(0,0,1);} if (_angelSeriesId == 1) {return(0,1,0);} if (_angelSeriesId == 2) {return(1,0,1);} if (_angelSeriesId == 3) {return(1,1,0);} if (_angelSeriesId == 4) {return(1,0,0);} if (_angelSeriesId == 5) {return(0,1,0);} if (_angelSeriesId == 6) {return(1,0,1);} if (_angelSeriesId == 7) {return(0,1,1);} if (_angelSeriesId == 8) {return(1,1,0);} if (_angelSeriesId == 9) {return(0,0,1);} if (_angelSeriesId == 10) {return(1,0,0);} if (_angelSeriesId == 11) {return(0,1,0);} if (_angelSeriesId == 12) {return(1,0,1);} if (_angelSeriesId == 13) {return(0,1,1);} if (_angelSeriesId == 14) {return(1,1,0);} if (_angelSeriesId == 15) {return(0,0,1);} if (_angelSeriesId == 16) {return(1,0,0);} if (_angelSeriesId == 17) {return(0,1,0);} if (_angelSeriesId == 18) {return(1,0,1);} if (_angelSeriesId == 19) {return(0,1,1);} if (_angelSeriesId == 20) {return(1,1,0);} if (_angelSeriesId == 21) {return(0,0,1);} if (_angelSeriesId == 22) {return(1,0,0);} if (_angelSeriesId == 23) {return(0,1,1);} } function getAngelPower(uint8 _angelSeriesId) private view returns (uint16) { uint8 randomPower = getRandomNumber(10,0,msg.sender); if (_angelSeriesId >=4) { return (100 + 10 * ((_angelSeriesId - 4) + randomPower)); } if (_angelSeriesId == 0 ) { return (50 + randomPower); } if (_angelSeriesId == 1) { return (120 + randomPower); } if (_angelSeriesId == 2) { return (250 + randomPower); } if (_angelSeriesId == 3) { return (300 + randomPower); } } function getCurrentTokenNumbers(uint8 _cardSeriesId) view public returns (uint32) { return currentTokenNumbers[_cardSeriesId]; } function getMaxTokenNumbers(uint8 _cardSeriesId) view public returns (uint32) { return maxTokenNumbers[_cardSeriesId]; } function getABToken(uint256 tokenId) view public returns(uint8 cardSeriesId, uint16 power, uint16 auraRed, uint16 auraYellow, uint16 auraBlue, string memory name, uint16 experience, uint64 lastBattleTime, uint16 lastBattleResult, address owner, uint16 oldId) { ABCard memory abcard = ABTokenCollection[tokenId]; cardSeriesId = abcard.cardSeriesId; power = abcard.power; experience = abcard.experience; auraRed = abcard.auraRed; auraBlue = abcard.auraBlue; auraYellow = abcard.auraYellow; name = abcard.name; lastBattleTime = abcard.lastBattleTime; lastBattleResult = abcard.lastBattleResult; oldId = abcard.oldId; owner = ownerOf(tokenId); } function setAuras(uint256 tokenId, uint16 _red, uint16 _blue, uint16 _yellow) external onlySERAPHIM { ABCard storage abcard = ABTokenCollection[tokenId]; if (abcard.tokenId == tokenId) { abcard.auraRed = _red; abcard.auraYellow = _yellow; abcard.auraBlue = _blue; } } function setName(uint256 tokenId,string memory namechange) public { ABCard storage abcard = ABTokenCollection[tokenId]; if (msg.sender != ownerOf(tokenId)) {revert();} if (abcard.tokenId == tokenId) { abcard.name = namechange; } } function setExperience(uint256 tokenId, uint16 _experience) external onlySERAPHIM { ABCard storage abcard = ABTokenCollection[tokenId]; if (abcard.tokenId == tokenId) { abcard.experience = _experience; } } function setLastBattleResult(uint256 tokenId, uint16 _result) external onlySERAPHIM { ABCard storage abcard = ABTokenCollection[tokenId]; if (abcard.tokenId == tokenId) { abcard.lastBattleResult = _result; } } function setLastBattleTime(uint256 tokenId) external onlySERAPHIM { ABCard storage abcard = ABTokenCollection[tokenId]; if (abcard.tokenId == tokenId) { abcard.lastBattleTime = uint64(now); } } function setLastBreedingTime(uint256 tokenId) external onlySERAPHIM { ABCard storage abcard = ABTokenCollection[tokenId]; if (abcard.tokenId == tokenId) { abcard.lastBreedingTime = uint64(now); } } function setoldId(uint256 tokenId, uint16 _oldId) external onlySERAPHIM { ABCard storage abcard = ABTokenCollection[tokenId]; if (abcard.tokenId == tokenId) { abcard.oldId = _oldId; } } function getABTokenByIndex(address _owner, uint64 _index) view external returns(uint256) { if (_index >= ownerABTokenCollection[_owner].length) { return 0; } return ownerABTokenCollection[_owner][_index]; } /** * @dev external function to burn a specific token * Reverts if the token does not exist * @param tokenId uint256 ID of the token being burned * Only the owner can burn their token. */ function burn(uint256 tokenId) external { require(ownerOf(tokenId) == msg.sender); _clearApproval(tokenId); _ownedTokensCount[msg.sender] = _ownedTokensCount[msg.sender].sub(1); _tokenOwner[tokenId] = address(0); emit Transfer(msg.sender, address(0), tokenId); } /** * @dev external function to burn a specific token * Reverts if the token does not exist * @param tokenId uint256 ID of the token being burned * Only the owner can burn their token. * This function allows a new token type to be reissued. This preserves rarity, while the burn functio increases rarity */ function burnAndRecycle(uint256 tokenId) external { require(ownerOf(tokenId) == msg.sender); uint8 cardSeriesId; _clearApproval(tokenId); _ownedTokensCount[msg.sender] = _ownedTokensCount[msg.sender].sub(1); _tokenOwner[tokenId] = address(0); (cardSeriesId,,,,,,,,,,) = getABToken (tokenId); if (currentTokenNumbers[cardSeriesId] >= 1) { currentTokenNumbers[cardSeriesId] = currentTokenNumbers[cardSeriesId] - 1; } emit Transfer(msg.sender, address(0), tokenId); } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * Deprecated, use _burn(uint256) instead. * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned */ function _burn(address owner, uint256 tokenId) internal { require(ownerOf(tokenId) == owner); _clearApproval(tokenId); _ownedTokensCount[owner] = _ownedTokensCount[owner].sub(1); _tokenOwner[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * @param tokenId uint256 ID of the token being burned */ function _burn(uint256 tokenId) internal { _burn(ownerOf(tokenId), 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); require(to != address(0)); _clearApproval(tokenId); _ownedTokensCount[from] = _ownedTokensCount[from].sub(1); _ownedTokensCount[to] = _ownedTokensCount[to].add(1); _tokenOwner[tokenId] = to; addABTokenIdMapping(to, tokenId); emit Transfer(from, to, tokenId); } /** * @dev Internal function to invoke `onERC721Received` on a target address * The call is not executed if the target address is not a contract * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return 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; } bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data); 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); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"_name","type":"string"}],"payable":false,"stateMutability":"pure","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":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_angelSeriesId","type":"uint8"}],"name":"getAura","outputs":[{"name":"auraRed","type":"uint8"},{"name":"auraYellow","type":"uint8"},{"name":"auraBlue","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"setLastBreedingTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"},{"name":"_experience","type":"uint16"}],"name":"setExperience","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_accessorySeriesId","type":"uint8"}],"name":"buyAccessory","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_cardSeriesId","type":"uint8"}],"name":"getMaxTokenNumbers","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"seraphims","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"setMaxMedals","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"burnAndRecycle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"initAngelPrices","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_cardSeriesId","type":"uint8"}],"name":"getPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"},{"name":"_oldId","type":"uint16"}],"name":"setoldId","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_angelSeriesId","type":"uint8"}],"name":"buyAngel","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"getABToken","outputs":[{"name":"cardSeriesId","type":"uint8"},{"name":"power","type":"uint16"},{"name":"auraRed","type":"uint16"},{"name":"auraYellow","type":"uint16"},{"name":"auraBlue","type":"uint16"},{"name":"name","type":"string"},{"name":"experience","type":"uint16"},{"name":"lastBattleTime","type":"uint64"},{"name":"lastBattleResult","type":"uint16"},{"name":"owner","type":"address"},{"name":"oldId","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"currentTokenNumbers","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_isMaintaining","type":"bool"}],"name":"updateMaintenanceMode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_index","type":"uint64"}],"name":"getABTokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"},{"name":"_red","type":"uint16"},{"name":"_blue","type":"uint16"},{"name":"_yellow","type":"uint16"}],"name":"setAuras","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setMaxAngels","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"maxRandom","type":"uint16"},{"name":"min","type":"uint8"},{"name":"privateAddress","type":"address"}],"name":"getRandomNumber","outputs":[{"name":"","type":"uint8"}],"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":"isMaintenanceMode","outputs":[{"name":"","type":"bool"}],"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":"_oldSeraphim","type":"address"}],"name":"removeSERAPHIM","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_cardSeriesId","type":"uint8"},{"name":"_newPrice","type":"uint256"}],"name":"setCardSeriesPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"maxTokenNumbers","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"_symbol","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"},{"name":"_cardSeriesId","type":"uint8"},{"name":"_power","type":"uint16"},{"name":"_auraRed","type":"uint16"},{"name":"_auraYellow","type":"uint16"},{"name":"_auraBlue","type":"uint16"},{"name":"_name","type":"string"},{"name":"_experience","type":"uint16"},{"name":"_oldId","type":"uint16"}],"name":"mintABToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"},{"name":"_result","type":"uint16"}],"name":"setLastBattleResult","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"accessoryPrice","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":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSeraphims","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"initAccessoryPrices","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"setLastBattleTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"setMaxAccessories","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newSeraphim","type":"address"}],"name":"addSERAPHIM","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"baseTokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"angelPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"ABTokenCollection","outputs":[{"name":"tokenId","type":"uint256"},{"name":"cardSeriesId","type":"uint8"},{"name":"power","type":"uint16"},{"name":"auraRed","type":"uint16"},{"name":"auraYellow","type":"uint16"},{"name":"auraBlue","type":"uint16"},{"name":"name","type":"string"},{"name":"experience","type":"uint16"},{"name":"lastBattleTime","type":"uint64"},{"name":"lastBreedingTime","type":"uint64"},{"name":"lastBattleResult","type":"uint16"},{"name":"oldId","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"creatorAddress","outputs":[{"name":"","type":"address"}],"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":"","type":"address"},{"name":"","type":"uint256"}],"name":"ownerABTokenCollection","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_cardSeriesId","type":"uint8"}],"name":"getCurrentTokenNumbers","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"},{"name":"namechange","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","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
60806040526000805460a060020a61ffff02191690556002805460ff191660011790553480156200002f57600080fd5b5060008054600160a060020a03191633179055620000767f01ffc9a700000000000000000000000000000000000000000000000000000000640100000000620000b0810204565b620000aa7f80ac58cd00000000000000000000000000000000000000000000000000000000640100000000620000b0810204565b6200011d565b7fffffffff000000000000000000000000000000000000000000000000000000008082161415620000e057600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152600360205260409020805460ff19166001179055565b613844806200012d6000396000f3fe60806040526004361061036d576000357c0100000000000000000000000000000000000000000000000000000000900480636352211e116101e3578063bbc878c411610114578063d96e2ebd116100b2578063e985e9c51161008c578063e985e9c514611035578063ecb054d014611070578063fd0b4304146110a9578063fe55932a146110d65761036d565b8063d96e2ebd14610ed9578063de06212c14610f03578063e927fc5c146110205761036d565b8063c87b56dd116100ee578063c87b56dd14610e52578063c8cd5c3f14610e7c578063d356a28b14610e91578063d547cfb714610ec45761036d565b8063bbc878c414610de7578063c70edb6814610e13578063c722e39f14610e285761036d565b8063937c800211610181578063ab5c83b11161015b578063ab5c83b114610bb6578063ae92c75d14610cb6578063b3370c4e14610cea578063b88d4fde14610d145761036d565b8063937c800214610b3c57806395d89b4114610b66578063a22cb46514610b7b5761036d565b80637123691e116101bd5780637123691e14610aac5780637362377b14610adf578063750c166714610af45780637e1c0c0914610b275761036d565b80636352211e14610a3a5780636b6cc23914610a6457806370a0823114610a795761036d565b80633278963c116102bd578063436a69601161025b5780634df7267f116102355780634df7267f1461094057806353bbfa82146109835780635833b608146109c957806362161235146109de5761036d565b8063436a6960146107cf578063441daef0146108ea57806345e26105146109145761036d565b80633fef5fd9116102975780633fef5fd91461070e578063423d16ab1461074257806342842e0e1461076257806342966c68146107a55761036d565b80633278963c146106a257806336e74354146106cc57806337f1e7f2146106e15761036d565b806318160ddd1161032a57806323b872dd1161030457806323b872dd146105d1578063267d020c146106145780632ef0a28d1461065a5780633194878d1461068d5761036d565b806318160ddd1461055657806319b77e521461057d5780631bc595f0146105b15761036d565b806301ffc9a71461037257806306fdde03146103cf578063081812fc14610459578063095ea7b31461049f57806312e23234146104da57806314ed236f1461052c575b600080fd5b34801561037e57600080fd5b506103bb6004803603602081101561039557600080fd5b50357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916611190565b604080519115158252519081900360200190f35b3480156103db57600080fd5b506103e46111c8565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561041e578181015183820152602001610406565b50505050905090810190601f16801561044b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561046557600080fd5b506104836004803603602081101561047c57600080fd5b5035611200565b60408051600160a060020a039092168252519081900360200190f35b3480156104ab57600080fd5b506104d8600480360360408110156104c257600080fd5b50600160a060020a038135169060200135611232565b005b3480156104e657600080fd5b50610507600480360360208110156104fd57600080fd5b503560ff166112e8565b6040805160ff9485168152928416602084015292168183015290519081900360600190f35b34801561053857600080fd5b506104d86004803603602081101561054f57600080fd5b5035611575565b34801561056257600080fd5b5061056b6115e9565b60408051918252519081900360200190f35b34801561058957600080fd5b506104d8600480360360408110156105a057600080fd5b508035906020013561ffff166115ef565b6104d8600480360360208110156105c757600080fd5b503560ff16611641565b3480156105dd57600080fd5b506104d8600480360360608110156105f457600080fd5b50600160a060020a0381358116916020810135909116906040013561170d565b34801561062057600080fd5b506106416004803603602081101561063757600080fd5b503560ff1661172d565b6040805163ffffffff9092168252519081900360200190f35b34801561066657600080fd5b506103bb6004803603602081101561067d57600080fd5b5035600160a060020a0316611762565b34801561069957600080fd5b506104d8611777565b3480156106ae57600080fd5b506104d8600480360360208110156106c557600080fd5b50356119c3565b3480156106d857600080fd5b506104d8611b20565b3480156106ed57600080fd5b5061056b6004803603602081101561070457600080fd5b503560ff16611c3a565b34801561071a57600080fd5b506104d86004803603604081101561073157600080fd5b508035906020013561ffff16611c98565b6104d86004803603602081101561075857600080fd5b503560ff16611d05565b34801561076e57600080fd5b506104d86004803603606081101561078557600080fd5b50600160a060020a03813581169160208101359091169060400135611e0f565b3480156107b157600080fd5b506104d8600480360360208110156107c857600080fd5b5035611e2b565b3480156107db57600080fd5b506107f9600480360360208110156107f257600080fd5b5035611ec9565b6040805160ff8d16815261ffff808d166020808401919091528c8216938301939093528a81166060830152898116608083015287811660c083015267ffffffffffffffff871660e0830152858116610100830152600160a060020a038516610120830152831661014082015261016060a082018181528951918301919091528851919290916101808401918a019080838360005b838110156108a557818101518382015260200161088d565b50505050905090810190601f1680156108d25780820380516001836020036101000a031916815260200191505b509c5050505050505050505050505060405180910390f35b3480156108f657600080fd5b506106416004803603602081101561090d57600080fd5b503561210e565b34801561092057600080fd5b506104d86004803603602081101561093757600080fd5b5035151561213b565b34801561094c57600080fd5b5061056b6004803603604081101561096357600080fd5b508035600160a060020a0316906020013567ffffffffffffffff16612165565b34801561098f57600080fd5b506104d8600480360360808110156109a657600080fd5b5080359061ffff60208201358116916040810135821691606090910135166121d8565b3480156109d557600080fd5b506104d861226d565b3480156109ea57600080fd5b50610a2460048036036060811015610a0157600080fd5b50803561ffff1690602081013560ff169060400135600160a060020a03166123c5565b6040805160ff9092168252519081900360200190f35b348015610a4657600080fd5b5061048360048036036020811015610a5d57600080fd5b50356123fb565b348015610a7057600080fd5b506103bb61241f565b348015610a8557600080fd5b5061056b60048036036020811015610a9c57600080fd5b5035600160a060020a0316612428565b348015610ab857600080fd5b506104d860048036036020811015610acf57600080fd5b5035600160a060020a031661245b565b348015610aeb57600080fd5b506104d86124f0565b348015610b0057600080fd5b506104d860048036036040811015610b1757600080fd5b5060ff8135169060200135612542565b348015610b3357600080fd5b5061056b6125b3565b348015610b4857600080fd5b5061064160048036036020811015610b5f57600080fd5b50356125b9565b348015610b7257600080fd5b506103e46125c6565b348015610b8757600080fd5b506104d860048036036040811015610b9e57600080fd5b50600160a060020a03813516906020013515156125fd565b348015610bc257600080fd5b506104d86004803603610120811015610bda57600080fd5b600160a060020a038235169160ff6020820135169161ffff60408301358116926060810135821692608082013583169260a083013516919081019060e0810160c0820135640100000000811115610c3057600080fd5b820183602082011115610c4257600080fd5b80359060200191846001830284011164010000000083111715610c6457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505061ffff83358116945060209093013590921691506126819050565b348015610cc257600080fd5b506104d860048036036040811015610cd957600080fd5b508035906020013561ffff16612916565b348015610cf657600080fd5b5061056b60048036036020811015610d0d57600080fd5b5035612990565b348015610d2057600080fd5b506104d860048036036080811015610d3757600080fd5b600160a060020a03823581169260208101359091169160408201359190810190608081016060820135640100000000811115610d7257600080fd5b820183602082011115610d8457600080fd5b80359060200191846001830284011164010000000083111715610da657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506129a4945050505050565b348015610df357600080fd5b50610dfc6129cc565b6040805161ffff9092168252519081900360200190f35b348015610e1f57600080fd5b506104d86129dd565b348015610e3457600080fd5b506104d860048036036020811015610e4b57600080fd5b5035612a9b565b348015610e5e57600080fd5b506103e460048036036020811015610e7557600080fd5b5035612afc565b348015610e8857600080fd5b506104d8612b17565b348015610e9d57600080fd5b506104d860048036036020811015610eb457600080fd5b5035600160a060020a0316612b7f565b348015610ed057600080fd5b506103e4612c11565b348015610ee557600080fd5b5061056b60048036036020811015610efc57600080fd5b5035612c31565b348015610f0f57600080fd5b50610f2d60048036036020811015610f2657600080fd5b5035612c3e565b604080518d815260ff8d1660208083019190915261ffff808e16938301939093528b831660608301528a8316608083015289831660a083015287831660e083015267ffffffffffffffff808816610100840152861661012083015284831661014083015291831661016082015261018060c082018181528951918301919091528851919290916101a08401918a019080838360005b83811015610fda578181015183820152602001610fc2565b50505050905090810190601f1680156110075780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b34801561102c57600080fd5b50610483612d71565b34801561104157600080fd5b506103bb6004803603604081101561105857600080fd5b50600160a060020a0381358116916020013516612d80565b34801561107c57600080fd5b5061056b6004803603604081101561109357600080fd5b50600160a060020a038135169060200135612dae565b3480156110b557600080fd5b50610641600480360360208110156110cc57600080fd5b503560ff16612dde565b3480156110e257600080fd5b506104d8600480360360408110156110f957600080fd5b8135919081019060408101602082013564010000000081111561111b57600080fd5b82018360208201111561112d57600080fd5b8035906020019184600183028401116401000000008311171561114f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612df0945050505050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19811660009081526003602052604090205460ff165b919050565b60408051808201909152601281527f416e67656c20426174746c6520546f6b656e000000000000000000000000000060208201525b90565b600061120b82612e39565b151561121657600080fd5b50600090815260076020526040902054600160a060020a031690565b600061123d826123fb565b9050600160a060020a03838116908216141561125857600080fd5b33600160a060020a038216148061127457506112748133612d80565b151561127f57600080fd5b600082815260076020526040808220805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000808060ff84161515611305575060009150819050600161156e565b8360ff1660011415611320575060009150600190508161156e565b8360ff166002141561133b575060019150600090508161156e565b8360ff1660031415611356575060019150819050600061156e565b8360ff1660041415611371575060019150600090508061156e565b8360ff166005141561138c575060009150600190508161156e565b8360ff16600614156113a7575060019150600090508161156e565b8360ff16600714156113c2575060009150600190508061156e565b8360ff16600814156113dd575060019150819050600061156e565b8360ff16600914156113f8575060009150819050600161156e565b8360ff16600a1415611413575060019150600090508061156e565b8360ff16600b141561142e575060009150600190508161156e565b8360ff16600c1415611449575060019150600090508161156e565b8360ff16600d1415611464575060009150600190508061156e565b8360ff16600e141561147f575060019150819050600061156e565b8360ff16600f141561149a575060009150819050600161156e565b8360ff16601014156114b5575060019150600090508061156e565b8360ff16601114156114d0575060009150600190508161156e565b8360ff16601214156114eb575060019150600090508161156e565b8360ff1660131415611506575060009150600190508061156e565b8360ff1660141415611521575060019150819050600061156e565b8360ff166015141561153c575060009150819050600161156e565b8360ff1660161415611557575060019150600090508061156e565b8360ff166017141561156e57506000915060019050805b9193909250565b3360009081526001602081905260409091205460ff1615151461159757600080fd5b6000818152604f6020526040902080548214156115e55760038101805471ffffffffffffffff0000000000000000000019166a01000000000000000000004267ffffffffffffffff16021790555b5050565b60045490565b3360009081526001602081905260409091205460ff1615151461161157600080fd5b6000828152604f60205260409020805483141561163c5760038101805461ffff191661ffff84161790555b505050565b600a60ff82166064811061165157fe5b60088104919091015460079091166004026101000a900463ffffffff16601760ff83166064811061167e57fe5b60088104919091015460079091166004026101000a900463ffffffff16116116a557600080fd5b603c60ff602a19830116601281106116b957fe5b01543410156116c757600080fd5b602b8160ff1610806116dc5750603c8160ff16115b156116e657600080fd5b61170a338260008060008060206040519081016040528060008152506000806126a3565b50565b6117173382612e56565b151561172257600080fd5b61163c838383612eb5565b6000601760ff83166064811061173f57fe5b600891828204019190066004029054906101000a900463ffffffff169050919050565b60016020526000908152604090205460ff1681565b600054600160a060020a0316331461178e57600080fd5b601e805477ffffffff000000000000000000000000000000000000000019167513880000000000000000000000000000000000000000177fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff16791388000000000000000000000000000000000000000000000000177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d138800000000000000000000000000000000000000000000000000000000179055601f805461138863ffffffff199091161767ffffffff0000000019166501f400000000176bffffffff000000000000000019166901f40000000000000000176fffffffff00000000000000000000000019166cc800000000000000000000000017905560c860176044600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555060c8601760456064811015156118e757fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555060646017604660648110151561192257fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555060646017604760648110151561195d57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555060326017604860648110151561199857fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550565b336119cd826123fb565b600160a060020a0316146119e057600080fd5b60006119eb82612fdf565b33600090815260086020526040902054611a0c90600163ffffffff61302716565b336000908152600860209081526040808320939093558482526006905220805473ffffffffffffffffffffffffffffffffffffffff19169055611a4e82611ec9565b5098995060019850600a97505060ff8916955050606485109350611a729250505057fe5b60088104919091015460079091166004026101000a900463ffffffff1610611aff576001600a60ff831660648110611aa657fe5b600891828204019190066004029054906101000a900463ffffffff1603600a8260ff16606481101515611ad557fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055505b604051829060009033906000805160206137f9833981519152908390a45050565b600054600160a060020a03163314611b3757600080fd5b60006024908155666a94d74f43000060255567093e1b78ac690000602655670b1a2bc2ec500000602755662386f26fc10000602881905560295566470de4df820000602a8190556658d15e17628000602b556638d7ea4c680000602c55663ff2e795f50000602d556631bced02db0000602e55602f55665543df729c0000603055666379da05b60000603155668e1bc9bf04000060325566b1a2bc2ec5000060335566bc4b381d18800060345566d529ae9e86000060355566e6ed27d666800060365566f8b0a10e47000060375567010a741a4627800060385567011c37937e08000060395567012dfb0cb5e88000603a5567013fbe85edc900009060175b0155565b600060188260ff161015611c6157602460ff831660188110611c5857fe5b015490506111c3565b602a8260ff16118015611c775750603d8260ff16105b15611c9057603c60ff602a1984011660128110611c5857fe5b506000919050565b3360009081526001602081905260409091205460ff16151514611cba57600080fd5b6000828152604f60205260409020805483141561163c5760038101805461ffff841660a060020a0275ffff000000000000000000000000000000000000000019909116179055505050565b600a60ff821660648110611d1557fe5b60088104919091015460079091166004026101000a900463ffffffff16601760ff831660648110611d4257fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff1611158015611d75575060018160ff16115b15611d7f57600080fd5b602460ff821660188110611d8f57fe5b0154341015611d9d57600080fd5b60008160ff161080611db2575060178160ff16115b15611dbc57600080fd5b600080600080611dcb856112e8565b91955093509150611ddb8561303c565b9050611e083386838760ff168760ff168760ff1660206040519081016040528060008152506000806126a3565b5050505050565b61163c83838360206040519081016040528060008152506129a4565b33611e35826123fb565b600160a060020a031614611e4857600080fd5b611e5181612fdf565b33600090815260086020526040902054611e7290600163ffffffff61302716565b3360008181526008602090815260408083209490945584825260069052828120805473ffffffffffffffffffffffffffffffffffffffff191690559151839291906000805160206137f9833981519152908390a450565b600080600080600060606000806000806000611ee36136dc565b60008d8152604f60209081526040918290208251610180810184528154815260018083015460ff81168386015261010080820461ffff9081168589015263010000008304811660608601526501000000000083048116608086015267010000000000000090920490911660a0840152600280850180548851948116159093026000190190921604601f81018690048602830186019096528582529194929360c086019391929190830182828015611fdb5780601f10611fb057610100808354040283529160200191611fdb565b820191906000526020600020905b815481529060010190602001808311611fbe57829003601f168201915b505050505081526020016003820160009054906101000a900461ffff1661ffff1661ffff1681526020016003820160029054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160038201600a9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016003820160129054906101000a900461ffff1661ffff1661ffff1681526020016003820160149054906101000a900461ffff1661ffff1661ffff1681525050905080602001519b5080604001519a508060e001519550806060015199508060a001519750806080015198508060c0015196508061010001519450806101400151935080610160015191506120fc8d6123fb565b92505091939597999b90929496989a50565b600a816064811061211b57fe5b60089182820401919006600402915054906101000a900463ffffffff1681565b600054600160a060020a0316331461215257600080fd5b6002805460ff1916911515919091179055565b600160a060020a03821660009081526005602052604081205467ffffffffffffffff831610612196575060006121d2565b600160a060020a0383166000908152600560205260409020805467ffffffffffffffff84169081106121c457fe5b906000526020600020015490505b92915050565b3360009081526001602081905260409091205460ff161515146121fa57600080fd5b6000848152604f602052604090208054851415611e0857600101805464ffff0000001916630100000061ffff958616021766ffff0000000000191665010000000000928516929092029190911768ffff000000000000001916670100000000000000929093169190910291909117905550565b600054600160a060020a0316331461228457600080fd5b601780546bffffffff0000000000000000191668fa0000000000000000176fffffffff00000000000000000000000019166cfa0000000000000000000000001773ffffffff000000000000000000000000000000001916702d000000000000000000000000000000001777ffffffff000000000000000000000000000000000000000019167432000000000000000000000000000000000000000017905560065b600f81101561237357602d6017826064811061233d57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508080600101915050612325565b50600f5b601881101561170a5760416017826064811061238f57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508080600101915050612377565b6000600019430140600160a060020a0383160160ff841661ffff81870360010116828115156123f057fe5b060195945050505050565b600081815260066020526040812054600160a060020a03168015156121d257600080fd5b60025460ff1681565b6000600160a060020a038216151561243f57600080fd5b50600160a060020a031660009081526008602052604090205490565b600054600160a060020a0316331461247257600080fd5b600160a060020a03811660009081526001602081905260409091205460ff161515141561170a57600160a060020a03166000908152600160205260408120805460ff19169055805475ffff000000000000000000000000000000000000000019811660a060020a9182900461ffff9081166000190116909102179055565b600054600160a060020a0316331461250757600080fd5b60008054604051600160a060020a0390911691303180156108fc02929091818181858888f1935050505015801561170a573d6000803e3d6000fd5b600054600160a060020a0316331461255957600080fd5b60188260ff16101561257d5780602460ff84166018811061257657fe5b01556115e5565b602a8260ff161180156125935750603d8260ff16105b156115e55780603c60ff602a19850116601281106125ad57fe5b01555050565b60045481565b6017816064811061211b57fe5b60408051808201909152600381527f4142540000000000000000000000000000000000000000000000000000000000602082015290565b600160a060020a03821633141561261357600080fd5b336000818152600960209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b3360009081526001602081905260409091205460ff161515146126a357600080fd5b601760ff8916606481106126b357fe5b60088104919091015460079091166004026101000a900463ffffffff16600a60ff8a16606481106126e057fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff1610806127385750601760ff89166064811061271957fe5b60088104919091015460079091166004026101000a900463ffffffff16155b151561274357600080fd5b606460ff89161061275357600080fd5b6000604f600060045481526020019081526020016000209050878160010160016101000a81548161ffff021916908361ffff160217905550888160010160006101000a81548160ff021916908360ff160217905550868160010160036101000a81548161ffff021916908361ffff160217905550858160010160056101000a81548161ffff021916908361ffff160217905550848160010160076101000a81548161ffff021916908361ffff1602179055508381600201908051906020019061281d92919061373f565b5060038101805461ffff191661ffff8581169190911780835560048054855569ffffffffffffffff000019909116620100004267ffffffffffffffff169081029190911771ffffffffffffffff0000000000000000000019166a0100000000000000000000919091021775ffffffff000000000000000000000000000000000000191660a060020a9286169290920291909117909155546128bf908b906130e1565b600480546001019055600a60ff8a16606481106128d857fe5b6008810491909101805460079092166004026101000a63ffffffff818102198416938290048116600101160291909117905550505050505050505050565b3360009081526001602081905260409091205460ff1615151461293857600080fd5b6000828152604f60205260409020805483141561163c5760038101805461ffff841672010000000000000000000000000000000000000273ffff00000000000000000000000000000000000019909116179055505050565b603c816012811061299d57fe5b0154905081565b6129af84848461170d565b6129bb848484846131a5565b15156129c657600080fd5b50505050565b60005460a060020a900461ffff1681565b600054600160a060020a031633146129f457600080fd5b66470de4df820000603c90815566d529ae9e860000603d819055668e1bc9bf040000603e5567013fbe85edc90000603f5567011c37937e0800006040556702386f26fc10000060415560428190556701aa535d3d0c00006043819055604482905560458190556046919091556047556702c68af0bb14000060488190556049819055604a819055604b556706f05b59d3b20000604c55670853a0d2313c0000906011611c36565b3360009081526001602081905260409091205460ff16151514612abd57600080fd5b6000818152604f6020526040902080548214156115e557600301805469ffffffffffffffff00001916620100004267ffffffffffffffff160217905550565b60606121d2612b09612c11565b612b1284613321565b613405565b600054600160a060020a03163314612b2e57600080fd5b602b5b603c81101561170a5760c860178260648110612b4957fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508080600101915050612b31565b600054600160a060020a03163314612b9657600080fd5b600160a060020a03811660009081526001602052604090205460ff16151561170a57600160a060020a031660009081526001602081905260408220805460ff191682179055815461ffff60a060020a80830482169093011690910275ffff000000000000000000000000000000000000000019909116179055565b60608060405190810160405280602181526020016137d860219139905090565b6024816018811061299d57fe5b604f6020908152600091825260409182902080546001808301546002808501805488516101009582161586026000190190911692909204601f8101889004880283018801909852878252939660ff83169693830461ffff90811696630100000085048216966501000000000086048316966701000000000000009096049092169490939290830182828015612d145780601f10612ce957610100808354040283529160200191612d14565b820191906000526020600020905b815481529060010190602001808311612cf757829003601f168201915b5050506003909301549192505061ffff8082169167ffffffffffffffff6201000082048116926a01000000000000000000008304909116917201000000000000000000000000000000000000810482169160a060020a909104168c565b600054600160a060020a031681565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205460ff1690565b600560205281600052604060002081815481101515612dc957fe5b90600052602060002001600091509150505481565b6000600a60ff83166064811061173f57fe5b6000828152604f60205260409020612e07836123fb565b600160a060020a03163314612e1b57600080fd5b805483141561163c5781516129c6906002830190602085019061373f565b600090815260066020526040902054600160a060020a0316151590565b600080612e62836123fb565b905080600160a060020a031684600160a060020a03161480612e9d575083600160a060020a0316612e9284611200565b600160a060020a0316145b80612ead5750612ead8185612d80565b949350505050565b82600160a060020a0316612ec8826123fb565b600160a060020a031614612edb57600080fd5b600160a060020a0382161515612ef057600080fd5b612ef981612fdf565b600160a060020a038316600090815260086020526040902054612f2390600163ffffffff61302716565b600160a060020a038085166000908152600860205260408082209390935590841681522054612f5990600163ffffffff61344116565b600160a060020a0383166000818152600860209081526040808320949094558482526006905291909120805473ffffffffffffffffffffffffffffffffffffffff19169091179055612fab8282613453565b8082600160a060020a031684600160a060020a03166000805160206137f983398151915260405160405180910390a4505050565b600081815260076020526040902054600160a060020a03161561170a576000908152600760205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b60008282111561303657600080fd5b50900390565b60008061304c600a6000336123c5565b9050600460ff84161061307057806004840301600a0260640160ff169150506111c3565b60ff83161515613089578060320160ff169150506111c3565b8260ff16600114156130a4578060780160ff169150506111c3565b8260ff16600214156130bf578060fa0160ff169150506111c3565b8260ff16600314156130db578060ff1661012c019150506111c3565b50919050565b600160a060020a03821615156130f657600080fd5b6130ff81612e39565b1561310957600080fd5b6000818152600660209081526040808320805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03871690811790915583526008909152902054613158906001613441565b600160a060020a03831660009081526008602052604090205561317b8282613453565b6040518190600160a060020a038416906000906000805160206137f9833981519152908290a45050565b60006131b984600160a060020a031661347f565b15156131c757506001612ead565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b8381101561325a578181015183820152602001613242565b50505050905090810190601f1680156132875780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156132a957600080fd5b505af11580156132bd573d6000803e3d6000fd5b505050506040513d60208110156132d357600080fd5b50517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f150b7a020000000000000000000000000000000000000000000000000000000014915050949350505050565b6060811515613364575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526111c3565b8160005b811561337c57600101600a82049150613368565b6060816040519080825280601f01601f1916602001820160405280156133a9576020820181803883390190505b50905060001982015b85156133fc57815160001982019160f860020a6030600a8a0601029184919081106133d957fe5b906020010190600160f860020a031916908160001a905350600a860495506133b2565b50949350505050565b60408051602081810183526000808352835180830185528181528451928301909452815260609261343a928692869290613487565b9392505050565b60008282018381101561343a57600080fd5b600160a060020a0390911660009081526005602090815260408220805460018101825590835291200155565b6000903b1190565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156134db576020820181803883390190505b509050806000805b88518110156135415788818151811015156134fa57fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561352157fe5b906020010190600160f860020a031916908160001a9053506001016134e3565b5060005b87518110156135a357878181518110151561355c57fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561358357fe5b906020010190600160f860020a031916908160001a905350600101613545565b5060005b86518110156136055786818151811015156135be57fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156135e557fe5b906020010190600160f860020a031916908160001a9053506001016135a7565b5060005b855181101561366757858181518110151561362057fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561364757fe5b906020010190600160f860020a031916908160001a905350600101613609565b5060005b84518110156136c957848181518110151561368257fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156136a957fe5b906020010190600160f860020a031916908160001a90535060010161366b565b50909d9c50505050505050505050505050565b604080516101808101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e0810182905261010081018290526101208101829052610140810182905261016081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061378057805160ff19168380011785556137ad565b828001600101855582156137ad579182015b828111156137ad578251825591602001919060010190613792565b506137b99291506137bd565b5090565b6111fd91905b808211156137b957600081556001016137c356fe68747470733a2f2f7777772e616e67656c626174746c65732e636f6d2f5552492fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a723058203079724e74504bf62cd2aebe22a3dcccd1d2eb2b2bd280e3cb9fde25621db3fd0029
Deployed Bytecode
0x60806040526004361061036d576000357c0100000000000000000000000000000000000000000000000000000000900480636352211e116101e3578063bbc878c411610114578063d96e2ebd116100b2578063e985e9c51161008c578063e985e9c514611035578063ecb054d014611070578063fd0b4304146110a9578063fe55932a146110d65761036d565b8063d96e2ebd14610ed9578063de06212c14610f03578063e927fc5c146110205761036d565b8063c87b56dd116100ee578063c87b56dd14610e52578063c8cd5c3f14610e7c578063d356a28b14610e91578063d547cfb714610ec45761036d565b8063bbc878c414610de7578063c70edb6814610e13578063c722e39f14610e285761036d565b8063937c800211610181578063ab5c83b11161015b578063ab5c83b114610bb6578063ae92c75d14610cb6578063b3370c4e14610cea578063b88d4fde14610d145761036d565b8063937c800214610b3c57806395d89b4114610b66578063a22cb46514610b7b5761036d565b80637123691e116101bd5780637123691e14610aac5780637362377b14610adf578063750c166714610af45780637e1c0c0914610b275761036d565b80636352211e14610a3a5780636b6cc23914610a6457806370a0823114610a795761036d565b80633278963c116102bd578063436a69601161025b5780634df7267f116102355780634df7267f1461094057806353bbfa82146109835780635833b608146109c957806362161235146109de5761036d565b8063436a6960146107cf578063441daef0146108ea57806345e26105146109145761036d565b80633fef5fd9116102975780633fef5fd91461070e578063423d16ab1461074257806342842e0e1461076257806342966c68146107a55761036d565b80633278963c146106a257806336e74354146106cc57806337f1e7f2146106e15761036d565b806318160ddd1161032a57806323b872dd1161030457806323b872dd146105d1578063267d020c146106145780632ef0a28d1461065a5780633194878d1461068d5761036d565b806318160ddd1461055657806319b77e521461057d5780631bc595f0146105b15761036d565b806301ffc9a71461037257806306fdde03146103cf578063081812fc14610459578063095ea7b31461049f57806312e23234146104da57806314ed236f1461052c575b600080fd5b34801561037e57600080fd5b506103bb6004803603602081101561039557600080fd5b50357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916611190565b604080519115158252519081900360200190f35b3480156103db57600080fd5b506103e46111c8565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561041e578181015183820152602001610406565b50505050905090810190601f16801561044b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561046557600080fd5b506104836004803603602081101561047c57600080fd5b5035611200565b60408051600160a060020a039092168252519081900360200190f35b3480156104ab57600080fd5b506104d8600480360360408110156104c257600080fd5b50600160a060020a038135169060200135611232565b005b3480156104e657600080fd5b50610507600480360360208110156104fd57600080fd5b503560ff166112e8565b6040805160ff9485168152928416602084015292168183015290519081900360600190f35b34801561053857600080fd5b506104d86004803603602081101561054f57600080fd5b5035611575565b34801561056257600080fd5b5061056b6115e9565b60408051918252519081900360200190f35b34801561058957600080fd5b506104d8600480360360408110156105a057600080fd5b508035906020013561ffff166115ef565b6104d8600480360360208110156105c757600080fd5b503560ff16611641565b3480156105dd57600080fd5b506104d8600480360360608110156105f457600080fd5b50600160a060020a0381358116916020810135909116906040013561170d565b34801561062057600080fd5b506106416004803603602081101561063757600080fd5b503560ff1661172d565b6040805163ffffffff9092168252519081900360200190f35b34801561066657600080fd5b506103bb6004803603602081101561067d57600080fd5b5035600160a060020a0316611762565b34801561069957600080fd5b506104d8611777565b3480156106ae57600080fd5b506104d8600480360360208110156106c557600080fd5b50356119c3565b3480156106d857600080fd5b506104d8611b20565b3480156106ed57600080fd5b5061056b6004803603602081101561070457600080fd5b503560ff16611c3a565b34801561071a57600080fd5b506104d86004803603604081101561073157600080fd5b508035906020013561ffff16611c98565b6104d86004803603602081101561075857600080fd5b503560ff16611d05565b34801561076e57600080fd5b506104d86004803603606081101561078557600080fd5b50600160a060020a03813581169160208101359091169060400135611e0f565b3480156107b157600080fd5b506104d8600480360360208110156107c857600080fd5b5035611e2b565b3480156107db57600080fd5b506107f9600480360360208110156107f257600080fd5b5035611ec9565b6040805160ff8d16815261ffff808d166020808401919091528c8216938301939093528a81166060830152898116608083015287811660c083015267ffffffffffffffff871660e0830152858116610100830152600160a060020a038516610120830152831661014082015261016060a082018181528951918301919091528851919290916101808401918a019080838360005b838110156108a557818101518382015260200161088d565b50505050905090810190601f1680156108d25780820380516001836020036101000a031916815260200191505b509c5050505050505050505050505060405180910390f35b3480156108f657600080fd5b506106416004803603602081101561090d57600080fd5b503561210e565b34801561092057600080fd5b506104d86004803603602081101561093757600080fd5b5035151561213b565b34801561094c57600080fd5b5061056b6004803603604081101561096357600080fd5b508035600160a060020a0316906020013567ffffffffffffffff16612165565b34801561098f57600080fd5b506104d8600480360360808110156109a657600080fd5b5080359061ffff60208201358116916040810135821691606090910135166121d8565b3480156109d557600080fd5b506104d861226d565b3480156109ea57600080fd5b50610a2460048036036060811015610a0157600080fd5b50803561ffff1690602081013560ff169060400135600160a060020a03166123c5565b6040805160ff9092168252519081900360200190f35b348015610a4657600080fd5b5061048360048036036020811015610a5d57600080fd5b50356123fb565b348015610a7057600080fd5b506103bb61241f565b348015610a8557600080fd5b5061056b60048036036020811015610a9c57600080fd5b5035600160a060020a0316612428565b348015610ab857600080fd5b506104d860048036036020811015610acf57600080fd5b5035600160a060020a031661245b565b348015610aeb57600080fd5b506104d86124f0565b348015610b0057600080fd5b506104d860048036036040811015610b1757600080fd5b5060ff8135169060200135612542565b348015610b3357600080fd5b5061056b6125b3565b348015610b4857600080fd5b5061064160048036036020811015610b5f57600080fd5b50356125b9565b348015610b7257600080fd5b506103e46125c6565b348015610b8757600080fd5b506104d860048036036040811015610b9e57600080fd5b50600160a060020a03813516906020013515156125fd565b348015610bc257600080fd5b506104d86004803603610120811015610bda57600080fd5b600160a060020a038235169160ff6020820135169161ffff60408301358116926060810135821692608082013583169260a083013516919081019060e0810160c0820135640100000000811115610c3057600080fd5b820183602082011115610c4257600080fd5b80359060200191846001830284011164010000000083111715610c6457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505061ffff83358116945060209093013590921691506126819050565b348015610cc257600080fd5b506104d860048036036040811015610cd957600080fd5b508035906020013561ffff16612916565b348015610cf657600080fd5b5061056b60048036036020811015610d0d57600080fd5b5035612990565b348015610d2057600080fd5b506104d860048036036080811015610d3757600080fd5b600160a060020a03823581169260208101359091169160408201359190810190608081016060820135640100000000811115610d7257600080fd5b820183602082011115610d8457600080fd5b80359060200191846001830284011164010000000083111715610da657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506129a4945050505050565b348015610df357600080fd5b50610dfc6129cc565b6040805161ffff9092168252519081900360200190f35b348015610e1f57600080fd5b506104d86129dd565b348015610e3457600080fd5b506104d860048036036020811015610e4b57600080fd5b5035612a9b565b348015610e5e57600080fd5b506103e460048036036020811015610e7557600080fd5b5035612afc565b348015610e8857600080fd5b506104d8612b17565b348015610e9d57600080fd5b506104d860048036036020811015610eb457600080fd5b5035600160a060020a0316612b7f565b348015610ed057600080fd5b506103e4612c11565b348015610ee557600080fd5b5061056b60048036036020811015610efc57600080fd5b5035612c31565b348015610f0f57600080fd5b50610f2d60048036036020811015610f2657600080fd5b5035612c3e565b604080518d815260ff8d1660208083019190915261ffff808e16938301939093528b831660608301528a8316608083015289831660a083015287831660e083015267ffffffffffffffff808816610100840152861661012083015284831661014083015291831661016082015261018060c082018181528951918301919091528851919290916101a08401918a019080838360005b83811015610fda578181015183820152602001610fc2565b50505050905090810190601f1680156110075780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b34801561102c57600080fd5b50610483612d71565b34801561104157600080fd5b506103bb6004803603604081101561105857600080fd5b50600160a060020a0381358116916020013516612d80565b34801561107c57600080fd5b5061056b6004803603604081101561109357600080fd5b50600160a060020a038135169060200135612dae565b3480156110b557600080fd5b50610641600480360360208110156110cc57600080fd5b503560ff16612dde565b3480156110e257600080fd5b506104d8600480360360408110156110f957600080fd5b8135919081019060408101602082013564010000000081111561111b57600080fd5b82018360208201111561112d57600080fd5b8035906020019184600183028401116401000000008311171561114f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612df0945050505050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19811660009081526003602052604090205460ff165b919050565b60408051808201909152601281527f416e67656c20426174746c6520546f6b656e000000000000000000000000000060208201525b90565b600061120b82612e39565b151561121657600080fd5b50600090815260076020526040902054600160a060020a031690565b600061123d826123fb565b9050600160a060020a03838116908216141561125857600080fd5b33600160a060020a038216148061127457506112748133612d80565b151561127f57600080fd5b600082815260076020526040808220805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000808060ff84161515611305575060009150819050600161156e565b8360ff1660011415611320575060009150600190508161156e565b8360ff166002141561133b575060019150600090508161156e565b8360ff1660031415611356575060019150819050600061156e565b8360ff1660041415611371575060019150600090508061156e565b8360ff166005141561138c575060009150600190508161156e565b8360ff16600614156113a7575060019150600090508161156e565b8360ff16600714156113c2575060009150600190508061156e565b8360ff16600814156113dd575060019150819050600061156e565b8360ff16600914156113f8575060009150819050600161156e565b8360ff16600a1415611413575060019150600090508061156e565b8360ff16600b141561142e575060009150600190508161156e565b8360ff16600c1415611449575060019150600090508161156e565b8360ff16600d1415611464575060009150600190508061156e565b8360ff16600e141561147f575060019150819050600061156e565b8360ff16600f141561149a575060009150819050600161156e565b8360ff16601014156114b5575060019150600090508061156e565b8360ff16601114156114d0575060009150600190508161156e565b8360ff16601214156114eb575060019150600090508161156e565b8360ff1660131415611506575060009150600190508061156e565b8360ff1660141415611521575060019150819050600061156e565b8360ff166015141561153c575060009150819050600161156e565b8360ff1660161415611557575060019150600090508061156e565b8360ff166017141561156e57506000915060019050805b9193909250565b3360009081526001602081905260409091205460ff1615151461159757600080fd5b6000818152604f6020526040902080548214156115e55760038101805471ffffffffffffffff0000000000000000000019166a01000000000000000000004267ffffffffffffffff16021790555b5050565b60045490565b3360009081526001602081905260409091205460ff1615151461161157600080fd5b6000828152604f60205260409020805483141561163c5760038101805461ffff191661ffff84161790555b505050565b600a60ff82166064811061165157fe5b60088104919091015460079091166004026101000a900463ffffffff16601760ff83166064811061167e57fe5b60088104919091015460079091166004026101000a900463ffffffff16116116a557600080fd5b603c60ff602a19830116601281106116b957fe5b01543410156116c757600080fd5b602b8160ff1610806116dc5750603c8160ff16115b156116e657600080fd5b61170a338260008060008060206040519081016040528060008152506000806126a3565b50565b6117173382612e56565b151561172257600080fd5b61163c838383612eb5565b6000601760ff83166064811061173f57fe5b600891828204019190066004029054906101000a900463ffffffff169050919050565b60016020526000908152604090205460ff1681565b600054600160a060020a0316331461178e57600080fd5b601e805477ffffffff000000000000000000000000000000000000000019167513880000000000000000000000000000000000000000177fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff16791388000000000000000000000000000000000000000000000000177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d138800000000000000000000000000000000000000000000000000000000179055601f805461138863ffffffff199091161767ffffffff0000000019166501f400000000176bffffffff000000000000000019166901f40000000000000000176fffffffff00000000000000000000000019166cc800000000000000000000000017905560c860176044600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555060c8601760456064811015156118e757fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555060646017604660648110151561192257fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555060646017604760648110151561195d57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555060326017604860648110151561199857fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550565b336119cd826123fb565b600160a060020a0316146119e057600080fd5b60006119eb82612fdf565b33600090815260086020526040902054611a0c90600163ffffffff61302716565b336000908152600860209081526040808320939093558482526006905220805473ffffffffffffffffffffffffffffffffffffffff19169055611a4e82611ec9565b5098995060019850600a97505060ff8916955050606485109350611a729250505057fe5b60088104919091015460079091166004026101000a900463ffffffff1610611aff576001600a60ff831660648110611aa657fe5b600891828204019190066004029054906101000a900463ffffffff1603600a8260ff16606481101515611ad557fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055505b604051829060009033906000805160206137f9833981519152908390a45050565b600054600160a060020a03163314611b3757600080fd5b60006024908155666a94d74f43000060255567093e1b78ac690000602655670b1a2bc2ec500000602755662386f26fc10000602881905560295566470de4df820000602a8190556658d15e17628000602b556638d7ea4c680000602c55663ff2e795f50000602d556631bced02db0000602e55602f55665543df729c0000603055666379da05b60000603155668e1bc9bf04000060325566b1a2bc2ec5000060335566bc4b381d18800060345566d529ae9e86000060355566e6ed27d666800060365566f8b0a10e47000060375567010a741a4627800060385567011c37937e08000060395567012dfb0cb5e88000603a5567013fbe85edc900009060175b0155565b600060188260ff161015611c6157602460ff831660188110611c5857fe5b015490506111c3565b602a8260ff16118015611c775750603d8260ff16105b15611c9057603c60ff602a1984011660128110611c5857fe5b506000919050565b3360009081526001602081905260409091205460ff16151514611cba57600080fd5b6000828152604f60205260409020805483141561163c5760038101805461ffff841660a060020a0275ffff000000000000000000000000000000000000000019909116179055505050565b600a60ff821660648110611d1557fe5b60088104919091015460079091166004026101000a900463ffffffff16601760ff831660648110611d4257fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff1611158015611d75575060018160ff16115b15611d7f57600080fd5b602460ff821660188110611d8f57fe5b0154341015611d9d57600080fd5b60008160ff161080611db2575060178160ff16115b15611dbc57600080fd5b600080600080611dcb856112e8565b91955093509150611ddb8561303c565b9050611e083386838760ff168760ff168760ff1660206040519081016040528060008152506000806126a3565b5050505050565b61163c83838360206040519081016040528060008152506129a4565b33611e35826123fb565b600160a060020a031614611e4857600080fd5b611e5181612fdf565b33600090815260086020526040902054611e7290600163ffffffff61302716565b3360008181526008602090815260408083209490945584825260069052828120805473ffffffffffffffffffffffffffffffffffffffff191690559151839291906000805160206137f9833981519152908390a450565b600080600080600060606000806000806000611ee36136dc565b60008d8152604f60209081526040918290208251610180810184528154815260018083015460ff81168386015261010080820461ffff9081168589015263010000008304811660608601526501000000000083048116608086015267010000000000000090920490911660a0840152600280850180548851948116159093026000190190921604601f81018690048602830186019096528582529194929360c086019391929190830182828015611fdb5780601f10611fb057610100808354040283529160200191611fdb565b820191906000526020600020905b815481529060010190602001808311611fbe57829003601f168201915b505050505081526020016003820160009054906101000a900461ffff1661ffff1661ffff1681526020016003820160029054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160038201600a9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016003820160129054906101000a900461ffff1661ffff1661ffff1681526020016003820160149054906101000a900461ffff1661ffff1661ffff1681525050905080602001519b5080604001519a508060e001519550806060015199508060a001519750806080015198508060c0015196508061010001519450806101400151935080610160015191506120fc8d6123fb565b92505091939597999b90929496989a50565b600a816064811061211b57fe5b60089182820401919006600402915054906101000a900463ffffffff1681565b600054600160a060020a0316331461215257600080fd5b6002805460ff1916911515919091179055565b600160a060020a03821660009081526005602052604081205467ffffffffffffffff831610612196575060006121d2565b600160a060020a0383166000908152600560205260409020805467ffffffffffffffff84169081106121c457fe5b906000526020600020015490505b92915050565b3360009081526001602081905260409091205460ff161515146121fa57600080fd5b6000848152604f602052604090208054851415611e0857600101805464ffff0000001916630100000061ffff958616021766ffff0000000000191665010000000000928516929092029190911768ffff000000000000001916670100000000000000929093169190910291909117905550565b600054600160a060020a0316331461228457600080fd5b601780546bffffffff0000000000000000191668fa0000000000000000176fffffffff00000000000000000000000019166cfa0000000000000000000000001773ffffffff000000000000000000000000000000001916702d000000000000000000000000000000001777ffffffff000000000000000000000000000000000000000019167432000000000000000000000000000000000000000017905560065b600f81101561237357602d6017826064811061233d57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508080600101915050612325565b50600f5b601881101561170a5760416017826064811061238f57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508080600101915050612377565b6000600019430140600160a060020a0383160160ff841661ffff81870360010116828115156123f057fe5b060195945050505050565b600081815260066020526040812054600160a060020a03168015156121d257600080fd5b60025460ff1681565b6000600160a060020a038216151561243f57600080fd5b50600160a060020a031660009081526008602052604090205490565b600054600160a060020a0316331461247257600080fd5b600160a060020a03811660009081526001602081905260409091205460ff161515141561170a57600160a060020a03166000908152600160205260408120805460ff19169055805475ffff000000000000000000000000000000000000000019811660a060020a9182900461ffff9081166000190116909102179055565b600054600160a060020a0316331461250757600080fd5b60008054604051600160a060020a0390911691303180156108fc02929091818181858888f1935050505015801561170a573d6000803e3d6000fd5b600054600160a060020a0316331461255957600080fd5b60188260ff16101561257d5780602460ff84166018811061257657fe5b01556115e5565b602a8260ff161180156125935750603d8260ff16105b156115e55780603c60ff602a19850116601281106125ad57fe5b01555050565b60045481565b6017816064811061211b57fe5b60408051808201909152600381527f4142540000000000000000000000000000000000000000000000000000000000602082015290565b600160a060020a03821633141561261357600080fd5b336000818152600960209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b3360009081526001602081905260409091205460ff161515146126a357600080fd5b601760ff8916606481106126b357fe5b60088104919091015460079091166004026101000a900463ffffffff16600a60ff8a16606481106126e057fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff1610806127385750601760ff89166064811061271957fe5b60088104919091015460079091166004026101000a900463ffffffff16155b151561274357600080fd5b606460ff89161061275357600080fd5b6000604f600060045481526020019081526020016000209050878160010160016101000a81548161ffff021916908361ffff160217905550888160010160006101000a81548160ff021916908360ff160217905550868160010160036101000a81548161ffff021916908361ffff160217905550858160010160056101000a81548161ffff021916908361ffff160217905550848160010160076101000a81548161ffff021916908361ffff1602179055508381600201908051906020019061281d92919061373f565b5060038101805461ffff191661ffff8581169190911780835560048054855569ffffffffffffffff000019909116620100004267ffffffffffffffff169081029190911771ffffffffffffffff0000000000000000000019166a0100000000000000000000919091021775ffffffff000000000000000000000000000000000000191660a060020a9286169290920291909117909155546128bf908b906130e1565b600480546001019055600a60ff8a16606481106128d857fe5b6008810491909101805460079092166004026101000a63ffffffff818102198416938290048116600101160291909117905550505050505050505050565b3360009081526001602081905260409091205460ff1615151461293857600080fd5b6000828152604f60205260409020805483141561163c5760038101805461ffff841672010000000000000000000000000000000000000273ffff00000000000000000000000000000000000019909116179055505050565b603c816012811061299d57fe5b0154905081565b6129af84848461170d565b6129bb848484846131a5565b15156129c657600080fd5b50505050565b60005460a060020a900461ffff1681565b600054600160a060020a031633146129f457600080fd5b66470de4df820000603c90815566d529ae9e860000603d819055668e1bc9bf040000603e5567013fbe85edc90000603f5567011c37937e0800006040556702386f26fc10000060415560428190556701aa535d3d0c00006043819055604482905560458190556046919091556047556702c68af0bb14000060488190556049819055604a819055604b556706f05b59d3b20000604c55670853a0d2313c0000906011611c36565b3360009081526001602081905260409091205460ff16151514612abd57600080fd5b6000818152604f6020526040902080548214156115e557600301805469ffffffffffffffff00001916620100004267ffffffffffffffff160217905550565b60606121d2612b09612c11565b612b1284613321565b613405565b600054600160a060020a03163314612b2e57600080fd5b602b5b603c81101561170a5760c860178260648110612b4957fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508080600101915050612b31565b600054600160a060020a03163314612b9657600080fd5b600160a060020a03811660009081526001602052604090205460ff16151561170a57600160a060020a031660009081526001602081905260408220805460ff191682179055815461ffff60a060020a80830482169093011690910275ffff000000000000000000000000000000000000000019909116179055565b60608060405190810160405280602181526020016137d860219139905090565b6024816018811061299d57fe5b604f6020908152600091825260409182902080546001808301546002808501805488516101009582161586026000190190911692909204601f8101889004880283018801909852878252939660ff83169693830461ffff90811696630100000085048216966501000000000086048316966701000000000000009096049092169490939290830182828015612d145780601f10612ce957610100808354040283529160200191612d14565b820191906000526020600020905b815481529060010190602001808311612cf757829003601f168201915b5050506003909301549192505061ffff8082169167ffffffffffffffff6201000082048116926a01000000000000000000008304909116917201000000000000000000000000000000000000810482169160a060020a909104168c565b600054600160a060020a031681565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205460ff1690565b600560205281600052604060002081815481101515612dc957fe5b90600052602060002001600091509150505481565b6000600a60ff83166064811061173f57fe5b6000828152604f60205260409020612e07836123fb565b600160a060020a03163314612e1b57600080fd5b805483141561163c5781516129c6906002830190602085019061373f565b600090815260066020526040902054600160a060020a0316151590565b600080612e62836123fb565b905080600160a060020a031684600160a060020a03161480612e9d575083600160a060020a0316612e9284611200565b600160a060020a0316145b80612ead5750612ead8185612d80565b949350505050565b82600160a060020a0316612ec8826123fb565b600160a060020a031614612edb57600080fd5b600160a060020a0382161515612ef057600080fd5b612ef981612fdf565b600160a060020a038316600090815260086020526040902054612f2390600163ffffffff61302716565b600160a060020a038085166000908152600860205260408082209390935590841681522054612f5990600163ffffffff61344116565b600160a060020a0383166000818152600860209081526040808320949094558482526006905291909120805473ffffffffffffffffffffffffffffffffffffffff19169091179055612fab8282613453565b8082600160a060020a031684600160a060020a03166000805160206137f983398151915260405160405180910390a4505050565b600081815260076020526040902054600160a060020a03161561170a576000908152600760205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b60008282111561303657600080fd5b50900390565b60008061304c600a6000336123c5565b9050600460ff84161061307057806004840301600a0260640160ff169150506111c3565b60ff83161515613089578060320160ff169150506111c3565b8260ff16600114156130a4578060780160ff169150506111c3565b8260ff16600214156130bf578060fa0160ff169150506111c3565b8260ff16600314156130db578060ff1661012c019150506111c3565b50919050565b600160a060020a03821615156130f657600080fd5b6130ff81612e39565b1561310957600080fd5b6000818152600660209081526040808320805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03871690811790915583526008909152902054613158906001613441565b600160a060020a03831660009081526008602052604090205561317b8282613453565b6040518190600160a060020a038416906000906000805160206137f9833981519152908290a45050565b60006131b984600160a060020a031661347f565b15156131c757506001612ead565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b8381101561325a578181015183820152602001613242565b50505050905090810190601f1680156132875780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156132a957600080fd5b505af11580156132bd573d6000803e3d6000fd5b505050506040513d60208110156132d357600080fd5b50517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f150b7a020000000000000000000000000000000000000000000000000000000014915050949350505050565b6060811515613364575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526111c3565b8160005b811561337c57600101600a82049150613368565b6060816040519080825280601f01601f1916602001820160405280156133a9576020820181803883390190505b50905060001982015b85156133fc57815160001982019160f860020a6030600a8a0601029184919081106133d957fe5b906020010190600160f860020a031916908160001a905350600a860495506133b2565b50949350505050565b60408051602081810183526000808352835180830185528181528451928301909452815260609261343a928692869290613487565b9392505050565b60008282018381101561343a57600080fd5b600160a060020a0390911660009081526005602090815260408220805460018101825590835291200155565b6000903b1190565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156134db576020820181803883390190505b509050806000805b88518110156135415788818151811015156134fa57fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561352157fe5b906020010190600160f860020a031916908160001a9053506001016134e3565b5060005b87518110156135a357878181518110151561355c57fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561358357fe5b906020010190600160f860020a031916908160001a905350600101613545565b5060005b86518110156136055786818151811015156135be57fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156135e557fe5b906020010190600160f860020a031916908160001a9053506001016135a7565b5060005b855181101561366757858181518110151561362057fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561364757fe5b906020010190600160f860020a031916908160001a905350600101613609565b5060005b84518110156136c957848181518110151561368257fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156136a957fe5b906020010190600160f860020a031916908160001a90535060010161366b565b50909d9c50505050505050505050505050565b604080516101808101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e0810182905261010081018290526101208101829052610140810182905261016081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061378057805160ff19168380011785556137ad565b828001600101855582156137ad579182015b828111156137ad578251825591602001919060010190613792565b506137b99291506137bd565b5090565b6111fd91905b808211156137b957600081556001016137c356fe68747470733a2f2f7777772e616e67656c626174746c65732e636f6d2f5552492fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a723058203079724e74504bf62cd2aebe22a3dcccd1d2eb2b2bd280e3cb9fde25621db3fd0029
Swarm Source
bzzr://3079724e74504bf62cd2aebe22a3dcccd1d2eb2b2bd280e3cb9fde25621db3fd
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.