ETH Price: $2,623.82 (-2.13%)

Token

Angel Battle Token (ABT)
 

Overview

Max Total Supply

110 ABT

Holders

31

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
Null: 0x000...000
Balance
0 ABT
0x0000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Raise an army of angels, fallen angels and pets to battle your way to the top of Mt. Zion.

# 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

Contract ABI

[{"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"}]

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.