ERC-20
Collectibles
Overview
Max Total Supply
1,241 EMJ
Holders
608 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 0 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Ethmoji
Compiler Version
v0.4.19+commit.c4cbbb05
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-03-17 */ /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title PullPayment * @dev Base contract supporting async send for pull payments. Inherit from this * contract and use asyncSend instead of send. */ contract PullPayment { using SafeMath for uint256; mapping(address => uint256) public payments; uint256 public totalPayments; /** * @dev withdraw accumulated balance, called by payee. */ function withdrawPayments() public { address payee = msg.sender; uint256 payment = payments[payee]; require(payment != 0); require(this.balance >= payment); totalPayments = totalPayments.sub(payment); payments[payee] = 0; assert(payee.send(payment)); } /** * @dev Called by the payer to store the sent amount as credit to be pulled. * @param dest The destination address of the funds. * @param amount The amount to transfer. */ function asyncSend(address dest, uint256 amount) internal { payments[dest] = payments[dest].add(amount); totalPayments = totalPayments.add(amount); } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; Unpause(); } } pragma solidity ^0.4.18; /** * @title ERC721 interface * @dev see https://github.com/ethereum/eips/issues/721 */ contract ERC721 { event Transfer(address indexed _from, address indexed _to, uint256 _tokenId); event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId); function balanceOf(address _owner) public view returns (uint256 _balance); function ownerOf(uint256 _tokenId) public view returns (address _owner); function transfer(address _to, uint256 _tokenId) public; function approve(address _to, uint256 _tokenId) public; function takeOwnership(uint256 _tokenId) public; } /** * @title ERC721Token * Generic implementation for the required functionality of the ERC721 standard */ contract ERC721Token is ERC721 { using SafeMath for uint256; // Total amount of tokens uint256 private totalTokens; // 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 list of owned token IDs mapping (address => uint256[]) private ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private ownedTokensIndex; /** * @dev Guarantees msg.sender is owner of the given token * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender */ modifier onlyOwnerOf(uint256 _tokenId) { require(ownerOf(_tokenId) == msg.sender); _; } /** * @dev Gets the total amount of tokens stored by the contract * @return uint256 representing the total amount of tokens */ function totalSupply() public view returns (uint256) { return totalTokens; } /** * @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) { return ownedTokens[_owner].length; } /** * @dev Gets the list of tokens owned by a given address * @param _owner address to query the tokens of * @return uint256[] representing the list of tokens owned by the passed address */ function tokensOf(address _owner) public view returns (uint256[]) { return ownedTokens[_owner]; } /** * @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; } /** * @dev Gets the approved address to take ownership of a given token ID * @param _tokenId uint256 ID of the token to query the approval of * @return address currently approved to take ownership of the given token ID */ function approvedFor(uint256 _tokenId) public view returns (address) { return tokenApprovals[_tokenId]; } /** * @dev Transfers the ownership of a given token ID to another address * @param _to address to receive the ownership of the given token ID * @param _tokenId uint256 ID of the token to be transferred */ function transfer(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) { clearApprovalAndTransfer(msg.sender, _to, _tokenId); } /** * @dev Approves another address to claim for the ownership of the given token ID * @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 onlyOwnerOf(_tokenId) { address owner = ownerOf(_tokenId); require(_to != owner); if (approvedFor(_tokenId) != 0 || _to != 0) { tokenApprovals[_tokenId] = _to; Approval(owner, _to, _tokenId); } } /** * @dev Claims the ownership of a given token ID * @param _tokenId uint256 ID of the token being claimed by the msg.sender */ function takeOwnership(uint256 _tokenId) public { require(isApprovedFor(msg.sender, _tokenId)); clearApprovalAndTransfer(ownerOf(_tokenId), msg.sender, _tokenId); } /** * @dev Mint token function * @param _to The address that will own the minted token * @param _tokenId uint256 ID of the token to be minted by the msg.sender */ function _mint(address _to, uint256 _tokenId) internal { require(_to != address(0)); addToken(_to, _tokenId); Transfer(0x0, _to, _tokenId); } /** * @dev Burns a specific token * @param _tokenId uint256 ID of the token being burned by the msg.sender */ function _burn(uint256 _tokenId) onlyOwnerOf(_tokenId) internal { if (approvedFor(_tokenId) != 0) { clearApproval(msg.sender, _tokenId); } removeToken(msg.sender, _tokenId); Transfer(msg.sender, 0x0, _tokenId); } /** * @dev Tells whether the msg.sender is approved for the given token ID or not * This function is not private so it can be extended in further implementations like the operatable ERC721 * @param _owner address of the owner to query the approval of * @param _tokenId uint256 ID of the token to query the approval of * @return bool whether the msg.sender is approved for the given token ID or not */ function isApprovedFor(address _owner, uint256 _tokenId) internal view returns (bool) { return approvedFor(_tokenId) == _owner; } /** * @dev Internal function to clear current approval and transfer the ownership of a given token ID * @param _from address which you want to send tokens from * @param _to address which you want to transfer the token to * @param _tokenId uint256 ID of the token to be transferred */ function clearApprovalAndTransfer(address _from, address _to, uint256 _tokenId) internal { require(_to != address(0)); require(_to != ownerOf(_tokenId)); require(ownerOf(_tokenId) == _from); clearApproval(_from, _tokenId); removeToken(_from, _tokenId); addToken(_to, _tokenId); Transfer(_from, _to, _tokenId); } /** * @dev Internal function to clear current approval of a given token ID * @param _tokenId uint256 ID of the token to be transferred */ function clearApproval(address _owner, uint256 _tokenId) private { require(ownerOf(_tokenId) == _owner); tokenApprovals[_tokenId] = 0; Approval(_owner, 0, _tokenId); } /** * @dev Internal function to add a token ID to the list of a given address * @param _to address representing the new owner of the given token ID * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address */ function addToken(address _to, uint256 _tokenId) private { require(tokenOwner[_tokenId] == address(0)); tokenOwner[_tokenId] = _to; uint256 length = balanceOf(_to); ownedTokens[_to].push(_tokenId); ownedTokensIndex[_tokenId] = length; totalTokens = totalTokens.add(1); } /** * @dev Internal function to remove a token ID from the list of a given address * @param _from address representing the previous owner of the given token ID * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function removeToken(address _from, uint256 _tokenId) private { require(ownerOf(_tokenId) == _from); uint256 tokenIndex = ownedTokensIndex[_tokenId]; uint256 lastTokenIndex = balanceOf(_from).sub(1); uint256 lastToken = ownedTokens[_from][lastTokenIndex]; tokenOwner[_tokenId] = 0; ownedTokens[_from][tokenIndex] = lastToken; ownedTokens[_from][lastTokenIndex] = 0; // Note that this will handle single-element arrays. In that case, both tokenIndex and lastTokenIndex are going to // be zero. Then we can make sure that we will remove _tokenId from the ownedTokens list since we are first swapping // the lastToken to the first position, and then dropping the element placed in the last position of the list ownedTokens[_from].length--; ownedTokensIndex[_tokenId] = 0; ownedTokensIndex[lastToken] = tokenIndex; totalTokens = totalTokens.sub(1); } } /** * @title Composable * Composable - a contract to mint compositions */ contract Composable is ERC721Token, Ownable, PullPayment, Pausable { // Max number of layers for a composition token uint public constant MAX_LAYERS = 100; // The minimum composition fee for an ethmoji uint256 public minCompositionFee = 0.001 ether; // Mapping from token ID to composition price mapping (uint256 => uint256) public tokenIdToCompositionPrice; // Mapping from token ID to layers representing it mapping (uint256 => uint256[]) public tokenIdToLayers; // Hash of all layers to track uniqueness of ethmojis mapping (bytes32 => bool) public compositions; // Image hashes to track uniquenes of ethmoji images. mapping (uint256 => uint256) public imageHashes; // Event for emitting new base token created event BaseTokenCreated(uint256 tokenId); // Event for emitting new composition token created event CompositionTokenCreated(uint256 tokenId, uint256[] layers, address indexed owner); // Event for emitting composition price changing for a token event CompositionPriceChanged(uint256 tokenId, uint256 price, address indexed owner); // Whether or not this contract accepts making compositions with other compositions bool public isCompositionOnlyWithBaseLayers; // ----- EXPOSED METHODS -------------------------------------------------------------------------- /** * @dev Mints a base token to an address with a given composition price * @param _to address of the future owner of the token * @param _compositionPrice uint256 composition price for the new token */ function mintTo(address _to, uint256 _compositionPrice, uint256 _imageHash) public onlyOwner { uint256 newTokenIndex = _getNextTokenId(); _mint(_to, newTokenIndex); tokenIdToLayers[newTokenIndex] = [newTokenIndex]; require(_isUnique(tokenIdToLayers[newTokenIndex], _imageHash)); compositions[keccak256([newTokenIndex])] = true; imageHashes[_imageHash] = newTokenIndex; BaseTokenCreated(newTokenIndex); _setCompositionPrice(newTokenIndex, _compositionPrice); } /** * @dev Mints a composition emoji * @param _tokenIds uint256[] the array of layers that will make up the composition */ function compose(uint256[] _tokenIds, uint256 _imageHash) public payable whenNotPaused { uint256 price = getTotalCompositionPrice(_tokenIds); require(msg.sender != address(0) && msg.value >= price); require(_tokenIds.length <= MAX_LAYERS); uint256[] memory layers = new uint256[](MAX_LAYERS); uint actualSize = 0; for (uint i = 0; i < _tokenIds.length; i++) { uint256 compositionLayerId = _tokenIds[i]; require(_tokenLayersExist(compositionLayerId)); uint256[] memory inheritedLayers = tokenIdToLayers[compositionLayerId]; if (isCompositionOnlyWithBaseLayers) { require(inheritedLayers.length == 1); } require(inheritedLayers.length < MAX_LAYERS); for (uint j = 0; j < inheritedLayers.length; j++) { require(actualSize < MAX_LAYERS); for (uint k = 0; k < layers.length; k++) { require(layers[k] != inheritedLayers[j]); if (layers[k] == 0) { break; } } layers[actualSize] = inheritedLayers[j]; actualSize += 1; } require(ownerOf(compositionLayerId) != address(0)); asyncSend(ownerOf(compositionLayerId), tokenIdToCompositionPrice[compositionLayerId]); } uint256 newTokenIndex = _getNextTokenId(); tokenIdToLayers[newTokenIndex] = _trim(layers, actualSize); require(_isUnique(tokenIdToLayers[newTokenIndex], _imageHash)); compositions[keccak256(tokenIdToLayers[newTokenIndex])] = true; imageHashes[_imageHash] = newTokenIndex; _mint(msg.sender, newTokenIndex); if (msg.value > price) { uint256 purchaseExcess = SafeMath.sub(msg.value, price); msg.sender.transfer(purchaseExcess); } if (!isCompositionOnlyWithBaseLayers) { _setCompositionPrice(newTokenIndex, minCompositionFee); } CompositionTokenCreated(newTokenIndex, tokenIdToLayers[newTokenIndex], msg.sender); } /** * @dev allows an address to withdraw its balance in the contract * @param _tokenId uint256 the token ID * @return uint256[] list of layers for a token */ function getTokenLayers(uint256 _tokenId) public view returns(uint256[]) { return tokenIdToLayers[_tokenId]; } /** * @dev given an array of ids, returns whether or not this composition is valid and unique * does not assume the layers array is flattened * @param _tokenIds uint256[] an array of token IDs * @return bool whether or not the composition is unique */ function isValidComposition(uint256[] _tokenIds, uint256 _imageHash) public view returns (bool) { if (isCompositionOnlyWithBaseLayers) { return _isValidBaseLayersOnly(_tokenIds, _imageHash); } else { return _isValidWithCompositions(_tokenIds, _imageHash); } } /** * @dev returns composition price of a given token ID * @param _tokenId uint256 token ID * @return uint256 composition price */ function getCompositionPrice(uint256 _tokenId) public view returns(uint256) { return tokenIdToCompositionPrice[_tokenId]; } /** * @dev get total price for minting a composition given the array of desired layers * @param _tokenIds uint256[] an array of token IDs * @return uint256 price for minting a composition with the desired layers */ function getTotalCompositionPrice(uint256[] _tokenIds) public view returns(uint256) { uint256 totalCompositionPrice = 0; for (uint i = 0; i < _tokenIds.length; i++) { require(_tokenLayersExist(_tokenIds[i])); totalCompositionPrice = SafeMath.add(totalCompositionPrice, tokenIdToCompositionPrice[_tokenIds[i]]); } totalCompositionPrice = SafeMath.div(SafeMath.mul(totalCompositionPrice, 105), 100); return totalCompositionPrice; } /** * @dev sets the composition price for a token ID. * Cannot be lower than the current composition fee * @param _tokenId uint256 the token ID * @param _price uint256 the new composition price */ function setCompositionPrice(uint256 _tokenId, uint256 _price) public onlyOwnerOf(_tokenId) { _setCompositionPrice(_tokenId, _price); } // ----- PRIVATE FUNCTIONS ------------------------------------------------------------------------ /** * @dev given an array of ids, returns whether or not this composition is valid and unique * for when only base layers are allowed * does not assume the layers array is flattened * @param _tokenIds uint256[] an array of token IDs * @return bool whether or not the composition is unique */ function _isValidBaseLayersOnly(uint256[] _tokenIds, uint256 _imageHash) private view returns (bool) { require(_tokenIds.length <= MAX_LAYERS); uint256[] memory layers = new uint256[](_tokenIds.length); for (uint i = 0; i < _tokenIds.length; i++) { if (!_tokenLayersExist(_tokenIds[i])) { return false; } if (tokenIdToLayers[_tokenIds[i]].length != 1) { return false; } for (uint k = 0; k < layers.length; k++) { if (layers[k] == tokenIdToLayers[_tokenIds[i]][0]) { return false; } if (layers[k] == 0) { layers[k] = tokenIdToLayers[_tokenIds[i]][0]; break; } } } return _isUnique(layers, _imageHash); } /** * @dev given an array of ids, returns whether or not this composition is valid and unique * when compositions are allowed * does not assume the layers array is flattened * @param _tokenIds uint256[] an array of token IDs * @return bool whether or not the composition is unique */ function _isValidWithCompositions(uint256[] _tokenIds, uint256 _imageHash) private view returns (bool) { uint256[] memory layers = new uint256[](MAX_LAYERS); uint actualSize = 0; if (_tokenIds.length > MAX_LAYERS) { return false; } for (uint i = 0; i < _tokenIds.length; i++) { uint256 compositionLayerId = _tokenIds[i]; if (!_tokenLayersExist(compositionLayerId)) { return false; } uint256[] memory inheritedLayers = tokenIdToLayers[compositionLayerId]; require(inheritedLayers.length < MAX_LAYERS); for (uint j = 0; j < inheritedLayers.length; j++) { require(actualSize < MAX_LAYERS); for (uint k = 0; k < layers.length; k++) { if (layers[k] == inheritedLayers[j]) { return false; } if (layers[k] == 0) { break; } } layers[actualSize] = inheritedLayers[j]; actualSize += 1; } } return _isUnique(_trim(layers, actualSize), _imageHash); } /** * @dev trims the given array to a given size * @param _layers uint256[] the array of layers that will make up the composition * @param _size uint the array of layers that will make up the composition * @return uint256[] array trimmed to given size */ function _trim(uint256[] _layers, uint _size) private pure returns(uint256[]) { uint256[] memory trimmedLayers = new uint256[](_size); for (uint i = 0; i < _size; i++) { trimmedLayers[i] = _layers[i]; } return trimmedLayers; } /** * @dev checks if a token is an existing token by checking if it has non-zero layers * @param _tokenId uint256 token ID * @return bool whether or not the given tokenId exists according to its layers */ function _tokenLayersExist(uint256 _tokenId) private view returns (bool) { return tokenIdToLayers[_tokenId].length != 0; } /** * @dev set composition price for a token * @param _tokenId uint256 token ID * @param _price uint256 new composition price */ function _setCompositionPrice(uint256 _tokenId, uint256 _price) private { require(_price >= minCompositionFee); tokenIdToCompositionPrice[_tokenId] = _price; CompositionPriceChanged(_tokenId, _price, msg.sender); } /** * @dev calculates the next token ID based on totalSupply * @return uint256 for the next token ID */ function _getNextTokenId() private view returns (uint256) { return totalSupply().add(1); } /** * @dev given an array of ids, returns whether or not this composition is unique * assumes the layers are all base layers (flattened) * @param _layers uint256[] an array of token IDs * @param _imageHash uint256 image hash for the composition * @return bool whether or not the composition is unique */ function _isUnique(uint256[] _layers, uint256 _imageHash) private view returns (bool) { return compositions[keccak256(_layers)] == false && imageHashes[_imageHash] == 0; } // ----- ONLY OWNER FUNCTIONS --------------------------------------------------------------------- /** * @dev payout method for the contract owner to payout contract profits to a given address * @param _to address for the payout */ function payout (address _to) public onlyOwner { totalPayments = 0; _to.transfer(this.balance); } /** * @dev sets global default composition fee for all new tokens * @param _price uint256 new default composition price */ function setGlobalCompositionFee(uint256 _price) public onlyOwner { minCompositionFee = _price; } } contract Ethmoji is Composable { using SafeMath for uint256; string public constant NAME = "Ethmoji"; string public constant SYMBOL = "EMJ"; // Mapping from address to emoji representing avatar mapping (address => uint256) public addressToAvatar; function Ethmoji() public { isCompositionOnlyWithBaseLayers = true; } /** * @dev Mints a base token to an address with a given composition price * @param _to address of the future owner of the token * @param _compositionPrice uint256 composition price for the new token */ function mintTo(address _to, uint256 _compositionPrice, uint256 _imageHash) public onlyOwner { Composable.mintTo(_to, _compositionPrice, _imageHash); _setAvatarIfNoAvatarIsSet(_to, tokensOf(_to)[0]); } /** * @dev Mints a composition emoji * @param _tokenIds uint256[] the array of layers that will make up the composition */ function compose(uint256[] _tokenIds, uint256 _imageHash) public payable whenNotPaused { Composable.compose(_tokenIds, _imageHash); _setAvatarIfNoAvatarIsSet(msg.sender, tokensOf(msg.sender)[0]); // Immediately pay out to layer owners for (uint8 i = 0; i < _tokenIds.length; i++) { _withdrawTo(ownerOf(_tokenIds[i])); } } // ----- EXPOSED METHODS -------------------------------------------------------------------------- /** * @dev returns the name ETHMOJI * @return string ETHMOJI */ function name() public pure returns (string) { return NAME; } /** * @dev returns the name EMJ * @return string EMJ */ function symbol() public pure returns (string) { return SYMBOL; } /** * @dev sets avatar for an address * @param _tokenId uint256 token ID */ function setAvatar(uint256 _tokenId) public onlyOwnerOf(_tokenId) whenNotPaused { addressToAvatar[msg.sender] = _tokenId; } /** * @dev returns the ID representing the avatar of the address * @param _owner address * @return uint256 token ID of the avatar associated with that address */ function getAvatar(address _owner) public view returns(uint256) { return addressToAvatar[_owner]; } /** * @dev transfer ownership of token. keeps track of avatar logic * @param _to address to whom the token is being transferred to * @param _tokenId uint256 the ID of the token being transferred */ function transfer(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) whenNotPaused { // If the transferred token was previous owner's avatar, remove it if (addressToAvatar[msg.sender] == _tokenId) { _removeAvatar(msg.sender); } ERC721Token.transfer(_to, _tokenId); } // ----- PRIVATE FUNCTIONS ------------------------------------------------------------------------ /** * @dev sets avatar if no avatar was previously set * @param _owner address of the new vatara owner * @param _tokenId uint256 token ID */ function _setAvatarIfNoAvatarIsSet(address _owner, uint256 _tokenId) private { if (addressToAvatar[_owner] == 0) { addressToAvatar[_owner] = _tokenId; } } /** * @dev removes avatar for address * @param _owner address of the avatar owner */ function _removeAvatar(address _owner) private { addressToAvatar[_owner] = 0; } /** * @dev withdraw accumulated balance to the payee * @param _payee address to which to withdraw to */ function _withdrawTo(address _payee) private { uint256 payment = payments[_payee]; if (payment != 0 && this.balance >= payment) { totalPayments = totalPayments.sub(payment); payments[_payee] = 0; _payee.transfer(payment); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"totalPayments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenIds","type":"uint256[]"},{"name":"_imageHash","type":"uint256"}],"name":"compose","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"payout","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":"_price","type":"uint256"}],"name":"setGlobalCompositionFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenIds","type":"uint256[]"}],"name":"getTotalCompositionPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getCompositionPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"approvedFor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_compositionPrice","type":"uint256"},{"name":"_imageHash","type":"uint256"}],"name":"mintTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokenIdToCompositionPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"tokenIdToLayers","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOf","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawPayments","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"compositions","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"NAME","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"imageHashes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getTokenLayers","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"takeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isCompositionOnlyWithBaseLayers","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minCompositionFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_LAYERS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getAvatar","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenIds","type":"uint256[]"},{"name":"_imageHash","type":"uint256"}],"name":"isValidComposition","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_price","type":"uint256"}],"name":"setCompositionPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"setAvatar","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"payments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"SYMBOL","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"addressToAvatar","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"BaseTokenCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"layers","type":"uint256[]"},{"indexed":true,"name":"owner","type":"address"}],"name":"CompositionTokenCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":true,"name":"owner","type":"address"}],"name":"CompositionPriceChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
60606040526000600860006101000a81548160ff02191690831515021790555066038d7ea4c68000600955341561003557600080fd5b33600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60006101000a81548160ff02191690831515021790555061356c806100a06000396000f3006060604052600436106101e2576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680625b4487146101e7578063030838831461021057806306fdde0314610268578063095ea7b3146102f65780630b7e9c441461033857806318160ddd146103715780631875ccf31461039a5780631983111d146103bd5780631f89e9111461042b5780632a6dd48f146104625780632baf2acb146104c557806338e50d3c146105105780633f27afa7146105475780633f4ba83a146105875780635a3f26721461059c5780635c975abb1461062a5780636103d70b146106575780636352211e1461066c57806370a08231146106cf57806370e2b6251461071c5780638456cb591461075b5780638da5cb5b1461077057806395d89b41146107c5578063a3f4df7e14610853578063a8d4ab6c146108e1578063a9059cbb14610918578063aae07cd01461095a578063b2e6ceeb146109d2578063b9e3a8dd146109f5578063c73ec2eb14610a22578063c829b0e314610a4b578063ce8ac03314610a74578063d2769df114610ac1578063d5e0d8fc14610b3c578063df0bcf4d14610b68578063e2982c2114610b8b578063f2fde38b14610bd8578063f76f8d7814610c11578063ff4843dc14610c9f575b600080fd5b34156101f257600080fd5b6101fa610cec565b6040518082815260200191505060405180910390f35b610266600480803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019091905050610cf2565b005b341561027357600080fd5b61027b610d92565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102bb5780820151818401526020810190506102a0565b50505050905090810190601f1680156102e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561030157600080fd5b610336600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610dd5565b005b341561034357600080fd5b61036f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610f68565b005b341561037c57600080fd5b610384611026565b6040518082815260200191505060405180910390f35b34156103a557600080fd5b6103bb600480803590602001909190505061102f565b005b34156103c857600080fd5b610415600480803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091905050611095565b6040518082815260200191505060405180910390f35b341561043657600080fd5b61044c600480803590602001909190505061113a565b6040518082815260200191505060405180910390f35b341561046d57600080fd5b6104836004808035906020019091905050611157565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104d057600080fd5b61050e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091908035906020019091905050611194565b005b341561051b57600080fd5b610531600480803590602001909190505061122a565b6040518082815260200191505060405180910390f35b341561055257600080fd5b6105716004808035906020019091908035906020019091905050611242565b6040518082815260200191505060405180910390f35b341561059257600080fd5b61059a611273565b005b34156105a757600080fd5b6105d3600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611333565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106165780820151818401526020810190506105fb565b505050509050019250505060405180910390f35b341561063557600080fd5b61063d6113d0565b604051808215151515815260200191505060405180910390f35b341561066257600080fd5b61066a6113e3565b005b341561067757600080fd5b61068d6004808035906020019091905050611502565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156106da57600080fd5b610706600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611580565b6040518082815260200191505060405180910390f35b341561072757600080fd5b6107416004808035600019169060200190919050506115cc565b604051808215151515815260200191505060405180910390f35b341561076657600080fd5b61076e6115ec565b005b341561077b57600080fd5b6107836116ad565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156107d057600080fd5b6107d86116d3565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108185780820151818401526020810190506107fd565b50505050905090810190601f1680156108455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561085e57600080fd5b610866611716565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108a657808201518184015260208101905061088b565b50505050905090810190601f1680156108d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156108ec57600080fd5b610902600480803590602001909190505061174f565b6040518082815260200191505060405180910390f35b341561092357600080fd5b610958600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611767565b005b341561096557600080fd5b61097b6004808035906020019091905050611826565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156109be5780820151818401526020810190506109a3565b505050509050019250505060405180910390f35b34156109dd57600080fd5b6109f36004808035906020019091905050611897565b005b3415610a0057600080fd5b610a086118c2565b604051808215151515815260200191505060405180910390f35b3415610a2d57600080fd5b610a356118d5565b6040518082815260200191505060405180910390f35b3415610a5657600080fd5b610a5e6118db565b6040518082815260200191505060405180910390f35b3415610a7f57600080fd5b610aab600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506118e0565b6040518082815260200191505060405180910390f35b3415610acc57600080fd5b610b22600480803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019091905050611929565b604051808215151515815260200191505060405180910390f35b3415610b4757600080fd5b610b666004808035906020019091908035906020019091905050611964565b005b3415610b7357600080fd5b610b8960048080359060200190919050506119b6565b005b3415610b9657600080fd5b610bc2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a5d565b6040518082815260200191505060405180910390f35b3415610be357600080fd5b610c0f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a75565b005b3415610c1c57600080fd5b610c24611bcd565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c64578082015181840152602081019050610c49565b50505050905090810190601f168015610c915780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610caa57600080fd5b610cd6600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611c06565b6040518082815260200191505060405180910390f35b60075481565b6000600860009054906101000a900460ff16151515610d1057600080fd5b610d1a8383611c1e565b610d4433610d2733611333565b6000815181101515610d3557fe5b90602001906020020151612192565b600090505b82518160ff161015610d8d57610d80610d7b848360ff16815181101515610d6c57fe5b90602001906020020151611502565b612223565b8080600101915050610d49565b505050565b610d9a613401565b6040805190810160405280600781526020017f4574686d6f6a6900000000000000000000000000000000000000000000000000815250905090565b6000813373ffffffffffffffffffffffffffffffffffffffff16610df882611502565b73ffffffffffffffffffffffffffffffffffffffff16141515610e1a57600080fd5b610e2383611502565b91508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515610e6057600080fd5b6000610e6b84611157565b73ffffffffffffffffffffffffffffffffffffffff16141580610ea5575060008473ffffffffffffffffffffffffffffffffffffffff1614155b15610f6257836002600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a35b50505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610fc457600080fd5b60006007819055508073ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050151561102357600080fd5b50565b60008054905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561108b57600080fd5b8060098190555050565b6000806000809150600090505b8351811015611119576110cb84828151811015156110bc57fe5b90602001906020020151612339565b15156110d657600080fd5b61110a82600a600087858151811015156110ec57fe5b9060200190602002015181526020019081526020016000205461235c565b915080806001019150506110a2565b61112e61112783606961237a565b60646123b5565b91508192505050919050565b6000600a6000838152602001908152602001600020549050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111f057600080fd5b6111fb8383836123d0565b6112258361120885611333565b600081518110151561121657fe5b90602001906020020151612192565b505050565b600a6020528060005260406000206000915090505481565b600b6020528160005260406000208181548110151561125d57fe5b9060005260206000209001600091509150505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112cf57600080fd5b600860009054906101000a900460ff1615156112ea57600080fd5b6000600860006101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b61133b613415565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156113c457602002820191906000526020600020905b8154815260200190600101908083116113b0575b50505050509050919050565b600860009054906101000a900460ff1681565b600080339150600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415151561143b57600080fd5b803073ffffffffffffffffffffffffffffffffffffffff16311015151561146157600080fd5b611476816007546125c990919063ffffffff16565b6007819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156114fe57fe5b5050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561157757600080fd5b80915050919050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561164857600080fd5b600860009054906101000a900460ff1615151561166457600080fd5b6001600860006101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116db613401565b6040805190810160405280600381526020017f454d4a0000000000000000000000000000000000000000000000000000000000815250905090565b6040805190810160405280600781526020017f4574686d6f6a690000000000000000000000000000000000000000000000000081525081565b600d6020528060005260406000206000915090505481565b803373ffffffffffffffffffffffffffffffffffffffff1661178882611502565b73ffffffffffffffffffffffffffffffffffffffff161415156117aa57600080fd5b600860009054906101000a900460ff161515156117c657600080fd5b81600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561181757611816336125e2565b5b611821838361262a565b505050565b61182e613415565b600b600083815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561188b57602002820191906000526020600020905b815481526020019060010190808311611877575b50505050509050919050565b6118a1338261267d565b15156118ac57600080fd5b6118bf6118b882611502565b33836126be565b50565b600e60009054906101000a900460ff1681565b60095481565b606481565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600e60009054906101000a900460ff16156119515761194a8383612807565b905061195e565b61195b83836129f2565b90505b92915050565b813373ffffffffffffffffffffffffffffffffffffffff1661198582611502565b73ffffffffffffffffffffffffffffffffffffffff161415156119a757600080fd5b6119b18383612c0c565b505050565b803373ffffffffffffffffffffffffffffffffffffffff166119d782611502565b73ffffffffffffffffffffffffffffffffffffffff161415156119f957600080fd5b600860009054906101000a900460ff16151515611a1557600080fd5b81600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60066020528060005260406000206000915090505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ad157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611b0d57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040805190810160405280600381526020017f454d4a000000000000000000000000000000000000000000000000000000000081525081565b600f6020528060005260406000206000915090505481565b6000611c28613415565b6000806000611c35613415565b600080600080600860009054906101000a900460ff16151515611c5757600080fd5b611c608c611095565b9950600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611c9f5750893410155b1515611caa57600080fd5b60648c5111151515611cbb57600080fd5b6064604051805910611cca5750595b9080825280602002602001820160405250985060009750600096505b8b51871015611f0e578b87815181101515611cfd57fe5b906020019060200201519550611d1286612339565b1515611d1d57600080fd5b600b6000878152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611d7a57602002820191906000526020600020905b815481526020019060010190808311611d66575b50505050509450600e60009054906101000a900460ff1615611da75760018551141515611da657600080fd5b5b60648551101515611db757600080fd5b600093505b8451841015611e9857606488101515611dd457600080fd5b600092505b8851831015611e51578484815181101515611df057fe5b906020019060200201518984815181101515611e0857fe5b9060200190602002015114151515611e1f57600080fd5b60008984815181101515611e2f57fe5b906020019060200201511415611e4457611e51565b8280600101935050611dd9565b8484815181101515611e5f57fe5b906020019060200201518989815181101515611e7757fe5b90602001906020020181815250506001880197508380600101945050611dbc565b600073ffffffffffffffffffffffffffffffffffffffff16611eb987611502565b73ffffffffffffffffffffffffffffffffffffffff1614151515611edc57600080fd5b611f01611ee887611502565b600a600089815260200190815260200160002054612c8f565b8680600101975050611ce6565b611f16612d43565b9150611f228989612d65565b600b60008481526020019081526020016000209080519060200190611f48929190613429565b50611fb4600b6000848152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611fa957602002820191906000526020600020905b815481526020019060010190808311611f95575b50505050508c612df1565b1515611fbf57600080fd5b6001600c6000600b600086815260200190815260200160002060405180828054801561200a57602002820191906000526020600020905b815481526020019060010190808311611ff6575b505091505060405180910390206000191660001916815260200190815260200160002060006101000a81548160ff02191690831515021790555081600d60008d8152602001908152602001600020819055506120663383612e8b565b893411156120bb57612078348b6125c9565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156120ba57600080fd5b5b600e60009054906101000a900460ff1615156120de576120dd82600954612c0c565b5b3373ffffffffffffffffffffffffffffffffffffffff167f8258990f4da6775c9379703a14a2d112f3131e6b3a3840d1f6c25ccfe1051b9d83600b60008681526020019081526020016000206040518083815260200180602001828103825283818154815260200191508054801561217557602002820191906000526020600020905b815481526020019060010190808311612161575b5050935050505060405180910390a2505050505050505050505050565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561221f5780600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415801561228f5750803073ffffffffffffffffffffffffffffffffffffffff163110155b15612335576122a9816007546125c990919063ffffffff16565b6007819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561233457600080fd5b5b5050565b600080600b60008481526020019081526020016000208054905014159050919050565b600080828401905083811015151561237057fe5b8091505092915050565b600080600084141561238f57600091506123ae565b82840290508284828115156123a057fe5b041415156123aa57fe5b8091505b5092915050565b60008082848115156123c357fe5b0490508091505092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561242e57600080fd5b612436612d43565b90506124428482612e8b565b60206040519081016040528082815250600b6000838152602001908152602001600020906001612473929190613476565b506124df600b60008381526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156124d457602002820191906000526020600020905b8154815260200190600101908083116124c0575b505050505083612df1565b15156124ea57600080fd5b6001600c6000602060405190810160405280858152506040518082600160200280838360005b8381101561252b578082015181840152602081019050612510565b5050505090500191505060405180910390206000191660001916815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d6000848152602001908152602001600020819055507f3f5bdceccefc96a1f5b67e0c030e1f5f27d4f940582f4114ee08d3599912e216816040518082815260200191505060405180910390a16125c38184612c0c565b50505050565b60008282111515156125d757fe5b818303905092915050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b803373ffffffffffffffffffffffffffffffffffffffff1661264b82611502565b73ffffffffffffffffffffffffffffffffffffffff1614151561266d57600080fd5b6126783384846126be565b505050565b60008273ffffffffffffffffffffffffffffffffffffffff1661269f83611157565b73ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156126fa57600080fd5b61270381611502565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561273d57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1661275d82611502565b73ffffffffffffffffffffffffffffffffffffffff1614151561277f57600080fd5b6127898382612f25565b612793838261300e565b61279d8282613296565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000612811613415565b600080606486511115151561282557600080fd5b85516040518059106128345750595b90808252806020026020018201604052509250600091505b85518210156129dc57612875868381518110151561286657fe5b90602001906020020151612339565b151561288457600093506129e9565b6001600b6000888581518110151561289857fe5b906020019060200201518152602001908152602001600020805490501415156128c457600093506129e9565b600090505b82518110156129cf57600b600087848151811015156128e457fe5b906020019060200201518152602001908152602001600020600081548110151561290a57fe5b906000526020600020900154838281518110151561292457fe5b90602001906020020151141561293d57600093506129e9565b6000838281518110151561294d57fe5b9060200190602002015114156129c257600b6000878481518110151561296f57fe5b906020019060200201518152602001908152602001600020600081548110151561299557fe5b90600052602060002090015483828151811015156129af57fe5b90602001906020020181815250506129cf565b80806001019150506128c9565b818060010192505061284c565b6129e68386612df1565b93505b50505092915050565b60006129fc613415565b6000806000612a09613415565b6000806064604051805910612a1b5750595b908082528060200260200182016040525096506000955060648a511115612a455760009750612bff565b600094505b8951851015612be9578985815181101515612a6157fe5b906020019060200201519350612a7684612339565b1515612a855760009750612bff565b600b6000858152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015612ae257602002820191906000526020600020905b815481526020019060010190808311612ace575b5050505050925060648351101515612af957600080fd5b600091505b8251821015612bdc57606486101515612b1657600080fd5b600090505b8651811015612b95578282815181101515612b3257fe5b906020019060200201518782815181101515612b4a57fe5b906020019060200201511415612b635760009750612bff565b60008782815181101515612b7357fe5b906020019060200201511415612b8857612b95565b8080600101915050612b1b565b8282815181101515612ba357fe5b906020019060200201518787815181101515612bbb57fe5b90602001906020020181815250506001860195508180600101925050612afe565b8480600101955050612a4a565b612bfc612bf68888612d65565b8a612df1565b97505b5050505050505092915050565b6009548110151515612c1d57600080fd5b80600a6000848152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f372883ed096f3aca24c33c36571b41f60a645cb114b5590f319e2e1c2606db6e8383604051808381526020018281526020019250505060405180910390a25050565b612ce181600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461235c90919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d398160075461235c90919063ffffffff16565b6007819055505050565b6000612d606001612d52611026565b61235c90919063ffffffff16565b905090565b612d6d613415565b612d75613415565b600083604051805910612d855750595b90808252806020026020018201604052509150600090505b83811015612de6578481815181101515612db357fe5b906020019060200201518282815181101515612dcb57fe5b90602001906020020181815250508080600101915050612d9d565b819250505092915050565b6000801515600c60008560405180828051906020019060200280838360005b83811015612e2b578082015181840152602081019050612e10565b5050505090500191505060405180910390206000191660001916815260200190815260200160002060009054906101000a900460ff161515148015612e8357506000600d600084815260200190815260200160002054145b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612ec757600080fd5b612ed18282613296565b8173ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff16612f4582611502565b73ffffffffffffffffffffffffffffffffffffffff16141515612f6757600080fd5b60006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1661303385611502565b73ffffffffffffffffffffffffffffffffffffffff1614151561305557600080fd5b60046000858152602001908152602001600020549250613087600161307987611580565b6125c990919063ffffffff16565b9150600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811015156130d557fe5b906000526020600020900154905060006001600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110151561318357fe5b9060005260206000209001819055506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811015156131e057fe5b906000526020600020900181905550600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548091906001900361324191906134c3565b506000600460008681526020019081526020016000208190555082600460008381526020019081526020016000208190555061328960016000546125c990919063ffffffff16565b6000819055505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff166001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561330557600080fd5b826001600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061336083611580565b9050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060010182816133b391906134ef565b9160005260206000209001600084909190915055508060046000848152602001908152602001600020819055506133f6600160005461235c90919063ffffffff16565b600081905550505050565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b828054828255906000526020600020908101928215613465579160200282015b82811115613464578251825591602001919060010190613449565b5b509050613472919061351b565b5090565b8280548282559060005260206000209081019282156134b2579160200282015b828111156134b1578251825591602001919060010190613496565b5b5090506134bf919061351b565b5090565b8154818355818115116134ea578183600052602060002091820191016134e9919061351b565b5b505050565b81548183558181151161351657818360005260206000209182019101613515919061351b565b5b505050565b61353d91905b80821115613539576000816000905550600101613521565b5090565b905600a165627a7a72305820141ae1431bc54f4b294a2dab8a704f005fd0a7a16714bd35243d958796a54c9c0029
Deployed Bytecode
0x6060604052600436106101e2576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680625b4487146101e7578063030838831461021057806306fdde0314610268578063095ea7b3146102f65780630b7e9c441461033857806318160ddd146103715780631875ccf31461039a5780631983111d146103bd5780631f89e9111461042b5780632a6dd48f146104625780632baf2acb146104c557806338e50d3c146105105780633f27afa7146105475780633f4ba83a146105875780635a3f26721461059c5780635c975abb1461062a5780636103d70b146106575780636352211e1461066c57806370a08231146106cf57806370e2b6251461071c5780638456cb591461075b5780638da5cb5b1461077057806395d89b41146107c5578063a3f4df7e14610853578063a8d4ab6c146108e1578063a9059cbb14610918578063aae07cd01461095a578063b2e6ceeb146109d2578063b9e3a8dd146109f5578063c73ec2eb14610a22578063c829b0e314610a4b578063ce8ac03314610a74578063d2769df114610ac1578063d5e0d8fc14610b3c578063df0bcf4d14610b68578063e2982c2114610b8b578063f2fde38b14610bd8578063f76f8d7814610c11578063ff4843dc14610c9f575b600080fd5b34156101f257600080fd5b6101fa610cec565b6040518082815260200191505060405180910390f35b610266600480803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019091905050610cf2565b005b341561027357600080fd5b61027b610d92565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102bb5780820151818401526020810190506102a0565b50505050905090810190601f1680156102e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561030157600080fd5b610336600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610dd5565b005b341561034357600080fd5b61036f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610f68565b005b341561037c57600080fd5b610384611026565b6040518082815260200191505060405180910390f35b34156103a557600080fd5b6103bb600480803590602001909190505061102f565b005b34156103c857600080fd5b610415600480803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091905050611095565b6040518082815260200191505060405180910390f35b341561043657600080fd5b61044c600480803590602001909190505061113a565b6040518082815260200191505060405180910390f35b341561046d57600080fd5b6104836004808035906020019091905050611157565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104d057600080fd5b61050e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091908035906020019091905050611194565b005b341561051b57600080fd5b610531600480803590602001909190505061122a565b6040518082815260200191505060405180910390f35b341561055257600080fd5b6105716004808035906020019091908035906020019091905050611242565b6040518082815260200191505060405180910390f35b341561059257600080fd5b61059a611273565b005b34156105a757600080fd5b6105d3600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611333565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106165780820151818401526020810190506105fb565b505050509050019250505060405180910390f35b341561063557600080fd5b61063d6113d0565b604051808215151515815260200191505060405180910390f35b341561066257600080fd5b61066a6113e3565b005b341561067757600080fd5b61068d6004808035906020019091905050611502565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156106da57600080fd5b610706600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611580565b6040518082815260200191505060405180910390f35b341561072757600080fd5b6107416004808035600019169060200190919050506115cc565b604051808215151515815260200191505060405180910390f35b341561076657600080fd5b61076e6115ec565b005b341561077b57600080fd5b6107836116ad565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156107d057600080fd5b6107d86116d3565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108185780820151818401526020810190506107fd565b50505050905090810190601f1680156108455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561085e57600080fd5b610866611716565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108a657808201518184015260208101905061088b565b50505050905090810190601f1680156108d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156108ec57600080fd5b610902600480803590602001909190505061174f565b6040518082815260200191505060405180910390f35b341561092357600080fd5b610958600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611767565b005b341561096557600080fd5b61097b6004808035906020019091905050611826565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156109be5780820151818401526020810190506109a3565b505050509050019250505060405180910390f35b34156109dd57600080fd5b6109f36004808035906020019091905050611897565b005b3415610a0057600080fd5b610a086118c2565b604051808215151515815260200191505060405180910390f35b3415610a2d57600080fd5b610a356118d5565b6040518082815260200191505060405180910390f35b3415610a5657600080fd5b610a5e6118db565b6040518082815260200191505060405180910390f35b3415610a7f57600080fd5b610aab600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506118e0565b6040518082815260200191505060405180910390f35b3415610acc57600080fd5b610b22600480803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019091905050611929565b604051808215151515815260200191505060405180910390f35b3415610b4757600080fd5b610b666004808035906020019091908035906020019091905050611964565b005b3415610b7357600080fd5b610b8960048080359060200190919050506119b6565b005b3415610b9657600080fd5b610bc2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a5d565b6040518082815260200191505060405180910390f35b3415610be357600080fd5b610c0f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a75565b005b3415610c1c57600080fd5b610c24611bcd565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c64578082015181840152602081019050610c49565b50505050905090810190601f168015610c915780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610caa57600080fd5b610cd6600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611c06565b6040518082815260200191505060405180910390f35b60075481565b6000600860009054906101000a900460ff16151515610d1057600080fd5b610d1a8383611c1e565b610d4433610d2733611333565b6000815181101515610d3557fe5b90602001906020020151612192565b600090505b82518160ff161015610d8d57610d80610d7b848360ff16815181101515610d6c57fe5b90602001906020020151611502565b612223565b8080600101915050610d49565b505050565b610d9a613401565b6040805190810160405280600781526020017f4574686d6f6a6900000000000000000000000000000000000000000000000000815250905090565b6000813373ffffffffffffffffffffffffffffffffffffffff16610df882611502565b73ffffffffffffffffffffffffffffffffffffffff16141515610e1a57600080fd5b610e2383611502565b91508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515610e6057600080fd5b6000610e6b84611157565b73ffffffffffffffffffffffffffffffffffffffff16141580610ea5575060008473ffffffffffffffffffffffffffffffffffffffff1614155b15610f6257836002600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a35b50505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610fc457600080fd5b60006007819055508073ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050151561102357600080fd5b50565b60008054905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561108b57600080fd5b8060098190555050565b6000806000809150600090505b8351811015611119576110cb84828151811015156110bc57fe5b90602001906020020151612339565b15156110d657600080fd5b61110a82600a600087858151811015156110ec57fe5b9060200190602002015181526020019081526020016000205461235c565b915080806001019150506110a2565b61112e61112783606961237a565b60646123b5565b91508192505050919050565b6000600a6000838152602001908152602001600020549050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111f057600080fd5b6111fb8383836123d0565b6112258361120885611333565b600081518110151561121657fe5b90602001906020020151612192565b505050565b600a6020528060005260406000206000915090505481565b600b6020528160005260406000208181548110151561125d57fe5b9060005260206000209001600091509150505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112cf57600080fd5b600860009054906101000a900460ff1615156112ea57600080fd5b6000600860006101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b61133b613415565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156113c457602002820191906000526020600020905b8154815260200190600101908083116113b0575b50505050509050919050565b600860009054906101000a900460ff1681565b600080339150600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415151561143b57600080fd5b803073ffffffffffffffffffffffffffffffffffffffff16311015151561146157600080fd5b611476816007546125c990919063ffffffff16565b6007819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156114fe57fe5b5050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561157757600080fd5b80915050919050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561164857600080fd5b600860009054906101000a900460ff1615151561166457600080fd5b6001600860006101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116db613401565b6040805190810160405280600381526020017f454d4a0000000000000000000000000000000000000000000000000000000000815250905090565b6040805190810160405280600781526020017f4574686d6f6a690000000000000000000000000000000000000000000000000081525081565b600d6020528060005260406000206000915090505481565b803373ffffffffffffffffffffffffffffffffffffffff1661178882611502565b73ffffffffffffffffffffffffffffffffffffffff161415156117aa57600080fd5b600860009054906101000a900460ff161515156117c657600080fd5b81600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561181757611816336125e2565b5b611821838361262a565b505050565b61182e613415565b600b600083815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561188b57602002820191906000526020600020905b815481526020019060010190808311611877575b50505050509050919050565b6118a1338261267d565b15156118ac57600080fd5b6118bf6118b882611502565b33836126be565b50565b600e60009054906101000a900460ff1681565b60095481565b606481565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600e60009054906101000a900460ff16156119515761194a8383612807565b905061195e565b61195b83836129f2565b90505b92915050565b813373ffffffffffffffffffffffffffffffffffffffff1661198582611502565b73ffffffffffffffffffffffffffffffffffffffff161415156119a757600080fd5b6119b18383612c0c565b505050565b803373ffffffffffffffffffffffffffffffffffffffff166119d782611502565b73ffffffffffffffffffffffffffffffffffffffff161415156119f957600080fd5b600860009054906101000a900460ff16151515611a1557600080fd5b81600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60066020528060005260406000206000915090505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ad157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611b0d57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040805190810160405280600381526020017f454d4a000000000000000000000000000000000000000000000000000000000081525081565b600f6020528060005260406000206000915090505481565b6000611c28613415565b6000806000611c35613415565b600080600080600860009054906101000a900460ff16151515611c5757600080fd5b611c608c611095565b9950600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611c9f5750893410155b1515611caa57600080fd5b60648c5111151515611cbb57600080fd5b6064604051805910611cca5750595b9080825280602002602001820160405250985060009750600096505b8b51871015611f0e578b87815181101515611cfd57fe5b906020019060200201519550611d1286612339565b1515611d1d57600080fd5b600b6000878152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611d7a57602002820191906000526020600020905b815481526020019060010190808311611d66575b50505050509450600e60009054906101000a900460ff1615611da75760018551141515611da657600080fd5b5b60648551101515611db757600080fd5b600093505b8451841015611e9857606488101515611dd457600080fd5b600092505b8851831015611e51578484815181101515611df057fe5b906020019060200201518984815181101515611e0857fe5b9060200190602002015114151515611e1f57600080fd5b60008984815181101515611e2f57fe5b906020019060200201511415611e4457611e51565b8280600101935050611dd9565b8484815181101515611e5f57fe5b906020019060200201518989815181101515611e7757fe5b90602001906020020181815250506001880197508380600101945050611dbc565b600073ffffffffffffffffffffffffffffffffffffffff16611eb987611502565b73ffffffffffffffffffffffffffffffffffffffff1614151515611edc57600080fd5b611f01611ee887611502565b600a600089815260200190815260200160002054612c8f565b8680600101975050611ce6565b611f16612d43565b9150611f228989612d65565b600b60008481526020019081526020016000209080519060200190611f48929190613429565b50611fb4600b6000848152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611fa957602002820191906000526020600020905b815481526020019060010190808311611f95575b50505050508c612df1565b1515611fbf57600080fd5b6001600c6000600b600086815260200190815260200160002060405180828054801561200a57602002820191906000526020600020905b815481526020019060010190808311611ff6575b505091505060405180910390206000191660001916815260200190815260200160002060006101000a81548160ff02191690831515021790555081600d60008d8152602001908152602001600020819055506120663383612e8b565b893411156120bb57612078348b6125c9565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015156120ba57600080fd5b5b600e60009054906101000a900460ff1615156120de576120dd82600954612c0c565b5b3373ffffffffffffffffffffffffffffffffffffffff167f8258990f4da6775c9379703a14a2d112f3131e6b3a3840d1f6c25ccfe1051b9d83600b60008681526020019081526020016000206040518083815260200180602001828103825283818154815260200191508054801561217557602002820191906000526020600020905b815481526020019060010190808311612161575b5050935050505060405180910390a2505050505050505050505050565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561221f5780600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415801561228f5750803073ffffffffffffffffffffffffffffffffffffffff163110155b15612335576122a9816007546125c990919063ffffffff16565b6007819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561233457600080fd5b5b5050565b600080600b60008481526020019081526020016000208054905014159050919050565b600080828401905083811015151561237057fe5b8091505092915050565b600080600084141561238f57600091506123ae565b82840290508284828115156123a057fe5b041415156123aa57fe5b8091505b5092915050565b60008082848115156123c357fe5b0490508091505092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561242e57600080fd5b612436612d43565b90506124428482612e8b565b60206040519081016040528082815250600b6000838152602001908152602001600020906001612473929190613476565b506124df600b60008381526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156124d457602002820191906000526020600020905b8154815260200190600101908083116124c0575b505050505083612df1565b15156124ea57600080fd5b6001600c6000602060405190810160405280858152506040518082600160200280838360005b8381101561252b578082015181840152602081019050612510565b5050505090500191505060405180910390206000191660001916815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d6000848152602001908152602001600020819055507f3f5bdceccefc96a1f5b67e0c030e1f5f27d4f940582f4114ee08d3599912e216816040518082815260200191505060405180910390a16125c38184612c0c565b50505050565b60008282111515156125d757fe5b818303905092915050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b803373ffffffffffffffffffffffffffffffffffffffff1661264b82611502565b73ffffffffffffffffffffffffffffffffffffffff1614151561266d57600080fd5b6126783384846126be565b505050565b60008273ffffffffffffffffffffffffffffffffffffffff1661269f83611157565b73ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156126fa57600080fd5b61270381611502565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561273d57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1661275d82611502565b73ffffffffffffffffffffffffffffffffffffffff1614151561277f57600080fd5b6127898382612f25565b612793838261300e565b61279d8282613296565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000612811613415565b600080606486511115151561282557600080fd5b85516040518059106128345750595b90808252806020026020018201604052509250600091505b85518210156129dc57612875868381518110151561286657fe5b90602001906020020151612339565b151561288457600093506129e9565b6001600b6000888581518110151561289857fe5b906020019060200201518152602001908152602001600020805490501415156128c457600093506129e9565b600090505b82518110156129cf57600b600087848151811015156128e457fe5b906020019060200201518152602001908152602001600020600081548110151561290a57fe5b906000526020600020900154838281518110151561292457fe5b90602001906020020151141561293d57600093506129e9565b6000838281518110151561294d57fe5b9060200190602002015114156129c257600b6000878481518110151561296f57fe5b906020019060200201518152602001908152602001600020600081548110151561299557fe5b90600052602060002090015483828151811015156129af57fe5b90602001906020020181815250506129cf565b80806001019150506128c9565b818060010192505061284c565b6129e68386612df1565b93505b50505092915050565b60006129fc613415565b6000806000612a09613415565b6000806064604051805910612a1b5750595b908082528060200260200182016040525096506000955060648a511115612a455760009750612bff565b600094505b8951851015612be9578985815181101515612a6157fe5b906020019060200201519350612a7684612339565b1515612a855760009750612bff565b600b6000858152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015612ae257602002820191906000526020600020905b815481526020019060010190808311612ace575b5050505050925060648351101515612af957600080fd5b600091505b8251821015612bdc57606486101515612b1657600080fd5b600090505b8651811015612b95578282815181101515612b3257fe5b906020019060200201518782815181101515612b4a57fe5b906020019060200201511415612b635760009750612bff565b60008782815181101515612b7357fe5b906020019060200201511415612b8857612b95565b8080600101915050612b1b565b8282815181101515612ba357fe5b906020019060200201518787815181101515612bbb57fe5b90602001906020020181815250506001860195508180600101925050612afe565b8480600101955050612a4a565b612bfc612bf68888612d65565b8a612df1565b97505b5050505050505092915050565b6009548110151515612c1d57600080fd5b80600a6000848152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f372883ed096f3aca24c33c36571b41f60a645cb114b5590f319e2e1c2606db6e8383604051808381526020018281526020019250505060405180910390a25050565b612ce181600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461235c90919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d398160075461235c90919063ffffffff16565b6007819055505050565b6000612d606001612d52611026565b61235c90919063ffffffff16565b905090565b612d6d613415565b612d75613415565b600083604051805910612d855750595b90808252806020026020018201604052509150600090505b83811015612de6578481815181101515612db357fe5b906020019060200201518282815181101515612dcb57fe5b90602001906020020181815250508080600101915050612d9d565b819250505092915050565b6000801515600c60008560405180828051906020019060200280838360005b83811015612e2b578082015181840152602081019050612e10565b5050505090500191505060405180910390206000191660001916815260200190815260200160002060009054906101000a900460ff161515148015612e8357506000600d600084815260200190815260200160002054145b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612ec757600080fd5b612ed18282613296565b8173ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff16612f4582611502565b73ffffffffffffffffffffffffffffffffffffffff16141515612f6757600080fd5b60006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1661303385611502565b73ffffffffffffffffffffffffffffffffffffffff1614151561305557600080fd5b60046000858152602001908152602001600020549250613087600161307987611580565b6125c990919063ffffffff16565b9150600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811015156130d557fe5b906000526020600020900154905060006001600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110151561318357fe5b9060005260206000209001819055506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811015156131e057fe5b906000526020600020900181905550600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548091906001900361324191906134c3565b506000600460008681526020019081526020016000208190555082600460008381526020019081526020016000208190555061328960016000546125c990919063ffffffff16565b6000819055505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff166001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561330557600080fd5b826001600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061336083611580565b9050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060010182816133b391906134ef565b9160005260206000209001600084909190915055508060046000848152602001908152602001600020819055506133f6600160005461235c90919063ffffffff16565b600081905550505050565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b828054828255906000526020600020908101928215613465579160200282015b82811115613464578251825591602001919060010190613449565b5b509050613472919061351b565b5090565b8280548282559060005260206000209081019282156134b2579160200282015b828111156134b1578251825591602001919060010190613496565b5b5090506134bf919061351b565b5090565b8154818355818115116134ea578183600052602060002091820191016134e9919061351b565b5b505050565b81548183558181151161351657818360005260206000209182019101613515919061351b565b5b505050565b61353d91905b80821115613539576000816000905550600101613521565b5090565b905600a165627a7a72305820141ae1431bc54f4b294a2dab8a704f005fd0a7a16714bd35243d958796a54c9c0029
Swarm Source
bzzr://141ae1431bc54f4b294a2dab8a704f005fd0a7a16714bd35243d958796a54c9c
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.