Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 FYS
Holders
5,609
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Fysical
Compiler Version
v0.4.19+commit.c4cbbb05
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-02-28 */ pragma solidity ^0.4.13; contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } 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; } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract Fysical is StandardToken { using SafeMath for uint256; // To increase consistency and reduce the opportunity for human error, the '*sById' mappings, '*Count' values, // 'get*ById' function declarations/implementations, and 'create*' function declarations/implementations have been // programmatically-generated based on the each struct's name, member types/names, and the comments sharing a line // with a member. // // This programmatic generation builds 'require' function calls based on the following rules: // - 'string' values must have length > 0 // - 'bytes' and uint256[] values may have any length // - 'uint256' values representing a quantity must be > 0 (identifiers and Ethereum block numbers do not represent a quantity) // // The implementation of 'createProposal' contains one operation not found in the other programmatically-generated // 'create*' functions, a call to 'transferTokensToEscrow'. // // None of the other members or functions have been programmatically generated. // See https://en.wikipedia.org/wiki/Uniform_Resource_Identifier. // The risk of preventing support for a future addition to the URI syntax outweighs the benefit of validating URI // values within this immutable smart contract, so readers of Uri values should expect values that do not conform // to the formal syntax of a URI. struct Uri { string value; } // A set of URIs may describe multiple methods to access a particular resource. struct UriSet { uint256[] uniqueUriIdsSortedAscending; // each value must be key in 'urisById' } // See https://en.wikipedia.org/wiki/Checksum#Algorithms. The description of the algorithm referred to by each URI // in the set should give a reader enough information to interpret the 'value' member of a 'Checksum' object // referring to this algorithm object. struct ChecksumAlgorithm { uint256 descriptionUriSetId; // must be key in 'uriSetsById' } // See https://en.wikipedia.org/wiki/Checksum. The 'resourceByteCount' indicates the number of bytes contained in // the resource. Though this is not strictly part of most common Checksum algorithms, its validation may also be // useful. The 'value' field should contain the expected output of passing the resource content to the checksum // algorithm. struct Checksum { uint256 algorithmId; // must be key in 'checksumAlgorithmsById' uint256 resourceByteCount; bytes value; } // See https://en.wikipedia.org/wiki/Encryption. The description of the algorithm referred to by each URI // in the set should give a reader enough information to access the content of an encrypted resource. The algorithm // may be a symmetric encryption algorithm or an asymmetric encryption algorithm struct EncryptionAlgorithm { uint256 descriptionUriSetId; // must be key in 'uriSetsById' } // For each resource, an Ethereum account may describe a checksum for the encrypted content of a resource and a // checksum for the decrypted content of a resource. When the resource is encrypted with a null encryption // algorithm, the resource is effectively unencrypted, so these two checksums should be identical // (See https://en.wikipedia.org/wiki/Null_encryption). struct ChecksumPair { uint256 encryptedChecksumId; // must be key in 'checksumsById' uint256 decryptedChecksumId; // must be key in 'checksumsById' } // A 'Resource' is content accessible with each URI referenced in the 'uriSetId'. This content should be // encrypted with the algorithm described by the 'EncryptionAlgorithm' referenced in 'encryptionAlgorithmId'. Each // resource referenced in 'metaResourceSetId' should describe the decrypted content in some way. // // For example, if the decrypted content conforms to a Protocol Buffers schema, the corresponding proto definition // file should be included in the meta-resources. Likewise, that proto definition resource should refer to a // resource like https://en.wikipedia.org/wiki/Protocol_Buffers among its meta-resources. struct Resource { uint256 uriSetId; // must be key in 'uriSetsById' uint256 encryptionAlgorithmId; // must be key in 'encryptionAlgorithmsById' uint256 metaResourceSetId; // must be key in 'resourceSetsById' } // See https://en.wikipedia.org/wiki/Public-key_cryptography. This value should be the public key used in an // asymmetric encryption operation. It should be useful for encrypting an resource destined for the holder of the // corresponding private key or for decrypting a resource encrypted with the corresponding private key. struct PublicKey { bytes value; } // A 'ResourceSet' groups together resources that may be part of a trade proposal involving Fysical tokens. The // creator of a 'ResourceSet' must include a public key for use in the encryption operations of creating and // accepting a trade proposal. The creator must also specify the encryption algorithm a proposal creator should // use along with this resource set creator's public key. Just as a single resource may have meta-resources // describing the content of a resource, a 'ResourceSet' may have resources describing the whole resource set. // // Creators should be careful to not include so many resources that an Ethereum transaction to accept a proposal // might run out of gas while storing the corresponding encrypted decryption keys. // // While developing reasonable filters for un-useful data in this collection, developers should choose a practical // maximum depth of traversal through the meta-resources, since an infinite loop is possible. struct ResourceSet { address creator; uint256 creatorPublicKeyId; // must be key in 'publicKeysById' uint256 proposalEncryptionAlgorithmId; // must be key in 'encryptionAlgorithmsById' uint256[] uniqueResourceIdsSortedAscending; // each value must be key in 'resourcesById' uint256 metaResourceSetId; // must be key in 'resourceSetsById' } // The creator of a trade proposal may include arbitrary content to be considered part of the agreement the // resource set is accepting. This may be useful for license agreements to be enforced within a jurisdiction // governing the trade partners. The content available through each URI in the set should be encrypted first with // the public key of a resource set's creator and then with the private key of a proposal's creator. struct Agreement { uint256 uriSetId; // must be key in 'uriSetsById' uint256 checksumPairId; // must be key in 'checksumPairsById' } // Many agreements may be grouped together in an 'AgreementSet' struct AgreementSet { uint256[] uniqueAgreementIdsSortedAscending; // each value must be key in 'agreementsById' } // A 'TokenTransfer' describes a transfer of tokens to occur between two Ethereum accounts. struct TokenTransfer { address source; address destination; uint256 tokenCount; } // Many token transfers may be grouped together in a "TokenTransferSet' struct TokenTransferSet { uint256[] uniqueTokenTransferIdsSortedAscending; // each value must be key in 'tokenTransfersById' } // A 'Proposal' describes the conditions for the atomic exchange of Fysical tokens and a keys to decrypt resources // in a resource set. The creator must specify the asymmetric encryption algorithm for use when accepting the // proposal, along with this creator's public key. The creator may specify arbitrary agreements that should be // considered a condition of the trade. // // During the execution of 'createProposal', the count of tokens specified in each token transfer will be transfered // from the specified source account to the account with the Ethereum address of 0. When the proposal state changes // to a final state, these tokens will be returned to the source accounts or tranfserred to the destination account. // // By including a 'minimumBlockNumberForWithdrawal' value later than the current Ethereum block, the proposal // creator can give the resource set creator a rough sense of how long the proposal will remain certainly // acceptable. This is particularly useful because the execution of an Ethereum transaction to accept a proposal // exposes the encrypted decryption keys to the Ethereum network regardless of whether the transaction succeeds. // Within the time frame that a proposal acceptance transaction will certainly succeed, the resource creator need // not be concerned with the possibility that an acceptance transaction might execute after a proposal withdrawal // submitted to the Ethereum network at approximately the same time. struct Proposal { uint256 minimumBlockNumberForWithdrawal; address creator; uint256 creatorPublicKeyId; // must be key in 'publicKeysById' uint256 acceptanceEncryptionAlgorithmId; // must be key in 'encryptionAlgorithmsById' uint256 resourceSetId; // must be key in 'resourceSetsById' uint256 agreementSetId; // must be key in 'agreementSetsById' uint256 tokenTransferSetId; // must be key in 'tokenTransferSetsById' } // When created, the proposal is in the 'Pending' state. All other states are final states, so a proposal may change // state exactly one time based on a call to 'withdrawProposal', 'acceptProposal', or 'rejectProposal'. enum ProposalState { Pending, WithdrawnByCreator, RejectedByResourceSetCreator, AcceptedByResourceSetCreator } // solium would warn "Constant name 'name' doesn't follow the UPPER_CASE notation", but this public constant is // recommended by https://theethereum.wiki/w/index.php/ERC20_Token_Standard, so we'll disable warnings for the line. // /* solium-disable-next-line */ string public constant name = "Fysical"; // solium would warn "Constant name 'symbol' doesn't follow the UPPER_CASE notation", but this public constant is // recommended by https://theethereum.wiki/w/index.php/ERC20_Token_Standard, so we'll disable warnings for the line. // /* solium-disable-next-line */ string public constant symbol = "FYS"; // solium would warn "Constant name 'decimals' doesn't follow the UPPER_CASE notation", but this public constant is // recommended by https://theethereum.wiki/w/index.php/ERC20_Token_Standard, so we'll disable warnings for the line. // /* solium-disable-next-line */ uint8 public constant decimals = 9; uint256 public constant ONE_BILLION = 1000000000; uint256 public constant ONE_QUINTILLION = 1000000000000000000; // See https://en.wikipedia.org/wiki/9,223,372,036,854,775,807 uint256 public constant MAXIMUM_64_BIT_SIGNED_INTEGER_VALUE = 9223372036854775807; uint256 public constant EMPTY_PUBLIC_KEY_ID = 0; uint256 public constant NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_ID = 0; uint256 public constant NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_SET_ID = 0; uint256 public constant NULL_ENCRYPTION_ALGORITHM_ID = 0; uint256 public constant EMPTY_RESOURCE_SET_ID = 0; mapping(uint256 => Uri) internal urisById; uint256 internal uriCount = 0; mapping(uint256 => UriSet) internal uriSetsById; uint256 internal uriSetCount = 0; mapping(uint256 => ChecksumAlgorithm) internal checksumAlgorithmsById; uint256 internal checksumAlgorithmCount = 0; mapping(uint256 => Checksum) internal checksumsById; uint256 internal checksumCount = 0; mapping(uint256 => EncryptionAlgorithm) internal encryptionAlgorithmsById; uint256 internal encryptionAlgorithmCount = 0; mapping(uint256 => ChecksumPair) internal checksumPairsById; uint256 internal checksumPairCount = 0; mapping(uint256 => Resource) internal resourcesById; uint256 internal resourceCount = 0; mapping(uint256 => PublicKey) internal publicKeysById; uint256 internal publicKeyCount = 0; mapping(uint256 => ResourceSet) internal resourceSetsById; uint256 internal resourceSetCount = 0; mapping(uint256 => Agreement) internal agreementsById; uint256 internal agreementCount = 0; mapping(uint256 => AgreementSet) internal agreementSetsById; uint256 internal agreementSetCount = 0; mapping(uint256 => TokenTransfer) internal tokenTransfersById; uint256 internal tokenTransferCount = 0; mapping(uint256 => TokenTransferSet) internal tokenTransferSetsById; uint256 internal tokenTransferSetCount = 0; mapping(uint256 => Proposal) internal proposalsById; uint256 internal proposalCount = 0; mapping(uint256 => ProposalState) internal statesByProposalId; mapping(uint256 => mapping(uint256 => bytes)) internal encryptedDecryptionKeysByProposalIdAndResourceId; mapping(address => mapping(uint256 => bool)) internal checksumPairAssignmentsByCreatorAndResourceId; mapping(address => mapping(uint256 => uint256)) internal checksumPairIdsByCreatorAndResourceId; function Fysical() public { assert(ProposalState(0) == ProposalState.Pending); // The total number of Fysical tokens is intended to be one billion, with the ability to express values with // nine decimals places of precision. The token values passed in ERC20 functions and operations involving // TokenTransfer operations must be counts of nano-Fysical tokens (one billionth of one Fysical token). // // See the initialization of the total supply in https://theethereum.wiki/w/index.php/ERC20_Token_Standard. assert(0 < ONE_BILLION); assert(0 < ONE_QUINTILLION); assert(MAXIMUM_64_BIT_SIGNED_INTEGER_VALUE > ONE_BILLION); assert(MAXIMUM_64_BIT_SIGNED_INTEGER_VALUE > ONE_QUINTILLION); assert(ONE_BILLION == uint256(10)**decimals); assert(ONE_QUINTILLION == ONE_BILLION.mul(ONE_BILLION)); totalSupply_ = ONE_QUINTILLION; balances[msg.sender] = totalSupply_; // From "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#transfer-1" on 2018-02-08 (commit cea1db05a3444870132ec3cb7dd78a244cba1805): // "A token contract which creates new tokens SHOULD trigger a Transfer event with the _from address set to 0x0 when tokens are created." Transfer(0x0, msg.sender, balances[msg.sender]); // This mimics the behavior of the 'createPublicKey' external function. assert(EMPTY_PUBLIC_KEY_ID == publicKeyCount); publicKeysById[EMPTY_PUBLIC_KEY_ID] = PublicKey(new bytes(0)); publicKeyCount = publicKeyCount.add(1); assert(1 == publicKeyCount); // This mimics the behavior of the 'createUri' external function. assert(NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_ID == uriCount); urisById[NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_ID] = Uri("https://en.wikipedia.org/wiki/Null_encryption"); uriCount = uriCount.add(1); assert(1 == uriCount); // This mimics the behavior of the 'createUriSet' external function. assert(NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_SET_ID == uriSetCount); uint256[] memory uniqueIdsSortedAscending = new uint256[](1); uniqueIdsSortedAscending[0] = NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_ID; validateIdSet(uniqueIdsSortedAscending, uriCount); uriSetsById[NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_SET_ID] = UriSet(uniqueIdsSortedAscending); uriSetCount = uriSetCount.add(1); assert(1 == uriSetCount); // This mimics the behavior of the 'createEncryptionAlgorithm' external function. assert(NULL_ENCRYPTION_ALGORITHM_ID == encryptionAlgorithmCount); encryptionAlgorithmsById[NULL_ENCRYPTION_ALGORITHM_ID] = EncryptionAlgorithm(NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_SET_ID); encryptionAlgorithmCount = encryptionAlgorithmCount.add(1); assert(1 == encryptionAlgorithmCount); // This mimics the behavior of the 'createResourceSet' external function, but allows for a self-reference in // the assignment of the 'metaResourceSetId' member, which the function would prohibit. assert(EMPTY_RESOURCE_SET_ID == resourceSetCount); resourceSetsById[EMPTY_RESOURCE_SET_ID] = ResourceSet( msg.sender, EMPTY_PUBLIC_KEY_ID, NULL_ENCRYPTION_ALGORITHM_ID, new uint256[](0), EMPTY_RESOURCE_SET_ID ); resourceSetCount = resourceSetCount.add(1); assert(1 == resourceSetCount); } function getUriCount() external view returns (uint256) { return uriCount; } function getUriById(uint256 id) external view returns (string) { require(id < uriCount); Uri memory object = urisById[id]; return object.value; } function getUriSetCount() external view returns (uint256) { return uriSetCount; } function getUriSetById(uint256 id) external view returns (uint256[]) { require(id < uriSetCount); UriSet memory object = uriSetsById[id]; return object.uniqueUriIdsSortedAscending; } function getChecksumAlgorithmCount() external view returns (uint256) { return checksumAlgorithmCount; } function getChecksumAlgorithmById(uint256 id) external view returns (uint256) { require(id < checksumAlgorithmCount); ChecksumAlgorithm memory object = checksumAlgorithmsById[id]; return object.descriptionUriSetId; } function getChecksumCount() external view returns (uint256) { return checksumCount; } function getChecksumById(uint256 id) external view returns (uint256, uint256, bytes) { require(id < checksumCount); Checksum memory object = checksumsById[id]; return (object.algorithmId, object.resourceByteCount, object.value); } function getEncryptionAlgorithmCount() external view returns (uint256) { return encryptionAlgorithmCount; } function getEncryptionAlgorithmById(uint256 id) external view returns (uint256) { require(id < encryptionAlgorithmCount); EncryptionAlgorithm memory object = encryptionAlgorithmsById[id]; return object.descriptionUriSetId; } function getChecksumPairCount() external view returns (uint256) { return checksumPairCount; } function getChecksumPairById(uint256 id) external view returns (uint256, uint256) { require(id < checksumPairCount); ChecksumPair memory object = checksumPairsById[id]; return (object.encryptedChecksumId, object.decryptedChecksumId); } function getResourceCount() external view returns (uint256) { return resourceCount; } function getResourceById(uint256 id) external view returns (uint256, uint256, uint256) { require(id < resourceCount); Resource memory object = resourcesById[id]; return (object.uriSetId, object.encryptionAlgorithmId, object.metaResourceSetId); } function getPublicKeyCount() external view returns (uint256) { return publicKeyCount; } function getPublicKeyById(uint256 id) external view returns (bytes) { require(id < publicKeyCount); PublicKey memory object = publicKeysById[id]; return object.value; } function getResourceSetCount() external view returns (uint256) { return resourceSetCount; } function getResourceSetById(uint256 id) external view returns (address, uint256, uint256, uint256[], uint256) { require(id < resourceSetCount); ResourceSet memory object = resourceSetsById[id]; return (object.creator, object.creatorPublicKeyId, object.proposalEncryptionAlgorithmId, object.uniqueResourceIdsSortedAscending, object.metaResourceSetId); } function getAgreementCount() external view returns (uint256) { return agreementCount; } function getAgreementById(uint256 id) external view returns (uint256, uint256) { require(id < agreementCount); Agreement memory object = agreementsById[id]; return (object.uriSetId, object.checksumPairId); } function getAgreementSetCount() external view returns (uint256) { return agreementSetCount; } function getAgreementSetById(uint256 id) external view returns (uint256[]) { require(id < agreementSetCount); AgreementSet memory object = agreementSetsById[id]; return object.uniqueAgreementIdsSortedAscending; } function getTokenTransferCount() external view returns (uint256) { return tokenTransferCount; } function getTokenTransferById(uint256 id) external view returns (address, address, uint256) { require(id < tokenTransferCount); TokenTransfer memory object = tokenTransfersById[id]; return (object.source, object.destination, object.tokenCount); } function getTokenTransferSetCount() external view returns (uint256) { return tokenTransferSetCount; } function getTokenTransferSetById(uint256 id) external view returns (uint256[]) { require(id < tokenTransferSetCount); TokenTransferSet memory object = tokenTransferSetsById[id]; return object.uniqueTokenTransferIdsSortedAscending; } function getProposalCount() external view returns (uint256) { return proposalCount; } function getProposalById(uint256 id) external view returns (uint256, address, uint256, uint256, uint256, uint256, uint256) { require(id < proposalCount); Proposal memory object = proposalsById[id]; return (object.minimumBlockNumberForWithdrawal, object.creator, object.creatorPublicKeyId, object.acceptanceEncryptionAlgorithmId, object.resourceSetId, object.agreementSetId, object.tokenTransferSetId); } function getStateByProposalId(uint256 proposalId) external view returns (ProposalState) { require(proposalId < proposalCount); return statesByProposalId[proposalId]; } // Check to see if an Ethereum account has assigned a checksum for a particular resource. function hasAddressAssignedResourceChecksumPair(address address_, uint256 resourceId) external view returns (bool) { require(resourceId < resourceCount); return checksumPairAssignmentsByCreatorAndResourceId[address_][resourceId]; } // Retrieve the checksum assigned assigned to particular resource function getChecksumPairIdByAssignerAndResourceId(address assigner, uint256 resourceId) external view returns (uint256) { require(resourceId < resourceCount); require(checksumPairAssignmentsByCreatorAndResourceId[assigner][resourceId]); return checksumPairIdsByCreatorAndResourceId[assigner][resourceId]; } // Retrieve the encrypted key to decrypt a resource referenced by an accepted proposal. function getEncryptedResourceDecryptionKey(uint256 proposalId, uint256 resourceId) external view returns (bytes) { require(proposalId < proposalCount); require(ProposalState.AcceptedByResourceSetCreator == statesByProposalId[proposalId]); require(resourceId < resourceCount); uint256[] memory validResourceIds = resourceSetsById[proposalsById[proposalId].resourceSetId].uniqueResourceIdsSortedAscending; require(0 < validResourceIds.length); if (1 == validResourceIds.length) { require(resourceId == validResourceIds[0]); } else { uint256 lowIndex = 0; uint256 highIndex = validResourceIds.length.sub(1); uint256 middleIndex = lowIndex.add(highIndex).div(2); while (resourceId != validResourceIds[middleIndex]) { require(lowIndex <= highIndex); if (validResourceIds[middleIndex] < resourceId) { lowIndex = middleIndex.add(1); } else { highIndex = middleIndex.sub(1); } middleIndex = lowIndex.add(highIndex).div(2); } } return encryptedDecryptionKeysByProposalIdAndResourceId[proposalId][resourceId]; } function createUri( string value ) external returns (uint256) { require(0 < bytes(value).length); uint256 id = uriCount; uriCount = id.add(1); urisById[id] = Uri( value ); return id; } function createUriSet( uint256[] uniqueUriIdsSortedAscending ) external returns (uint256) { validateIdSet(uniqueUriIdsSortedAscending, uriCount); uint256 id = uriSetCount; uriSetCount = id.add(1); uriSetsById[id] = UriSet( uniqueUriIdsSortedAscending ); return id; } function createChecksumAlgorithm( uint256 descriptionUriSetId ) external returns (uint256) { require(descriptionUriSetId < uriSetCount); uint256 id = checksumAlgorithmCount; checksumAlgorithmCount = id.add(1); checksumAlgorithmsById[id] = ChecksumAlgorithm( descriptionUriSetId ); return id; } function createChecksum( uint256 algorithmId, uint256 resourceByteCount, bytes value ) external returns (uint256) { require(algorithmId < checksumAlgorithmCount); require(0 < resourceByteCount); uint256 id = checksumCount; checksumCount = id.add(1); checksumsById[id] = Checksum( algorithmId, resourceByteCount, value ); return id; } function createEncryptionAlgorithm( uint256 descriptionUriSetId ) external returns (uint256) { require(descriptionUriSetId < uriSetCount); uint256 id = encryptionAlgorithmCount; encryptionAlgorithmCount = id.add(1); encryptionAlgorithmsById[id] = EncryptionAlgorithm( descriptionUriSetId ); return id; } function createChecksumPair( uint256 encryptedChecksumId, uint256 decryptedChecksumId ) external returns (uint256) { require(encryptedChecksumId < checksumCount); require(decryptedChecksumId < checksumCount); uint256 id = checksumPairCount; checksumPairCount = id.add(1); checksumPairsById[id] = ChecksumPair( encryptedChecksumId, decryptedChecksumId ); return id; } function createResource( uint256 uriSetId, uint256 encryptionAlgorithmId, uint256 metaResourceSetId ) external returns (uint256) { require(uriSetId < uriSetCount); require(encryptionAlgorithmId < encryptionAlgorithmCount); require(metaResourceSetId < resourceSetCount); uint256 id = resourceCount; resourceCount = id.add(1); resourcesById[id] = Resource( uriSetId, encryptionAlgorithmId, metaResourceSetId ); return id; } function createPublicKey( bytes value ) external returns (uint256) { uint256 id = publicKeyCount; publicKeyCount = id.add(1); publicKeysById[id] = PublicKey( value ); return id; } function createResourceSet( uint256 creatorPublicKeyId, uint256 proposalEncryptionAlgorithmId, uint256[] uniqueResourceIdsSortedAscending, uint256 metaResourceSetId ) external returns (uint256) { require(creatorPublicKeyId < publicKeyCount); require(proposalEncryptionAlgorithmId < encryptionAlgorithmCount); validateIdSet(uniqueResourceIdsSortedAscending, resourceCount); require(metaResourceSetId < resourceSetCount); uint256 id = resourceSetCount; resourceSetCount = id.add(1); resourceSetsById[id] = ResourceSet( msg.sender, creatorPublicKeyId, proposalEncryptionAlgorithmId, uniqueResourceIdsSortedAscending, metaResourceSetId ); return id; } function createAgreement( uint256 uriSetId, uint256 checksumPairId ) external returns (uint256) { require(uriSetId < uriSetCount); require(checksumPairId < checksumPairCount); uint256 id = agreementCount; agreementCount = id.add(1); agreementsById[id] = Agreement( uriSetId, checksumPairId ); return id; } function createAgreementSet( uint256[] uniqueAgreementIdsSortedAscending ) external returns (uint256) { validateIdSet(uniqueAgreementIdsSortedAscending, agreementCount); uint256 id = agreementSetCount; agreementSetCount = id.add(1); agreementSetsById[id] = AgreementSet( uniqueAgreementIdsSortedAscending ); return id; } function createTokenTransfer( address source, address destination, uint256 tokenCount ) external returns (uint256) { require(address(0) != source); require(address(0) != destination); require(0 < tokenCount); uint256 id = tokenTransferCount; tokenTransferCount = id.add(1); tokenTransfersById[id] = TokenTransfer( source, destination, tokenCount ); return id; } function createTokenTransferSet( uint256[] uniqueTokenTransferIdsSortedAscending ) external returns (uint256) { validateIdSet(uniqueTokenTransferIdsSortedAscending, tokenTransferCount); uint256 id = tokenTransferSetCount; tokenTransferSetCount = id.add(1); tokenTransferSetsById[id] = TokenTransferSet( uniqueTokenTransferIdsSortedAscending ); return id; } function createProposal( uint256 minimumBlockNumberForWithdrawal, uint256 creatorPublicKeyId, uint256 acceptanceEncryptionAlgorithmId, uint256 resourceSetId, uint256 agreementSetId, uint256 tokenTransferSetId ) external returns (uint256) { require(creatorPublicKeyId < publicKeyCount); require(acceptanceEncryptionAlgorithmId < encryptionAlgorithmCount); require(resourceSetId < resourceSetCount); require(agreementSetId < agreementSetCount); require(tokenTransferSetId < tokenTransferSetCount); transferTokensToEscrow(msg.sender, tokenTransferSetId); uint256 id = proposalCount; proposalCount = id.add(1); proposalsById[id] = Proposal( minimumBlockNumberForWithdrawal, msg.sender, creatorPublicKeyId, acceptanceEncryptionAlgorithmId, resourceSetId, agreementSetId, tokenTransferSetId ); return id; } // Each Ethereum account may assign a 'ChecksumPair' to a resource exactly once. This ensures that each claim that a // checksum should match a resource is attached to a particular authority. This operation is not bound to the // creation of the resource because the resource's creator may not know the checksum when creating the resource. function assignResourceChecksumPair( uint256 resourceId, uint256 checksumPairId ) external { require(resourceId < resourceCount); require(checksumPairId < checksumPairCount); require(false == checksumPairAssignmentsByCreatorAndResourceId[msg.sender][resourceId]); checksumPairIdsByCreatorAndResourceId[msg.sender][resourceId] = checksumPairId; checksumPairAssignmentsByCreatorAndResourceId[msg.sender][resourceId] = true; } // This function moves a proposal to a final state of `WithdrawnByCreator' and returns tokens to the sources // described by the proposal's transfers. function withdrawProposal( uint256 proposalId ) external { require(proposalId < proposalCount); require(ProposalState.Pending == statesByProposalId[proposalId]); Proposal memory proposal = proposalsById[proposalId]; require(msg.sender == proposal.creator); require(block.number >= proposal.minimumBlockNumberForWithdrawal); returnTokensFromEscrow(proposal.creator, proposal.tokenTransferSetId); statesByProposalId[proposalId] = ProposalState.WithdrawnByCreator; } // This function moves a proposal to a final state of `RejectedByResourceSetCreator' and returns tokens to the sources // described by the proposal's transfers. function rejectProposal( uint256 proposalId ) external { require(proposalId < proposalCount); require(ProposalState.Pending == statesByProposalId[proposalId]); Proposal memory proposal = proposalsById[proposalId]; require(msg.sender == resourceSetsById[proposal.resourceSetId].creator); returnTokensFromEscrow(proposal.creator, proposal.tokenTransferSetId); statesByProposalId[proposalId] = ProposalState.RejectedByResourceSetCreator; } // This function moves a proposal to a final state of `RejectedByResourceSetCreator' and sends tokens to the // destinations described by the proposal's transfers. // // The caller should encrypt each decryption key corresponding // to each resource in the proposal's resource set first with the public key of the proposal's creator and then with // the private key assoicated with the public key referenced in the resource set. The caller should concatenate // these encrypted values and pass the resulting byte array as 'concatenatedResourceDecryptionKeys'. // The length of each encrypted decryption key should be provided in the 'concatenatedResourceDecryptionKeyLengths'. // The index of each value in 'concatenatedResourceDecryptionKeyLengths' must correspond to an index in the resource // set referenced by the proposal. function acceptProposal( uint256 proposalId, bytes concatenatedResourceDecryptionKeys, uint256[] concatenatedResourceDecryptionKeyLengths ) external { require(proposalId < proposalCount); require(ProposalState.Pending == statesByProposalId[proposalId]); Proposal memory proposal = proposalsById[proposalId]; require(msg.sender == resourceSetsById[proposal.resourceSetId].creator); storeEncryptedDecryptionKeys( proposalId, concatenatedResourceDecryptionKeys, concatenatedResourceDecryptionKeyLengths ); transferTokensFromEscrow(proposal.tokenTransferSetId); statesByProposalId[proposalId] = ProposalState.AcceptedByResourceSetCreator; } function validateIdSet(uint256[] uniqueIdsSortedAscending, uint256 idCount) private pure { if (0 < uniqueIdsSortedAscending.length) { uint256 id = uniqueIdsSortedAscending[0]; require(id < idCount); uint256 previousId = id; for (uint256 index = 1; index < uniqueIdsSortedAscending.length; index = index.add(1)) { id = uniqueIdsSortedAscending[index]; require(id < idCount); require(previousId < id); previousId = id; } } } function transferTokensToEscrow(address proposalCreator, uint256 tokenTransferSetId) private { assert(tokenTransferSetId < tokenTransferSetCount); assert(address(0) != proposalCreator); uint256[] memory tokenTransferIds = tokenTransferSetsById[tokenTransferSetId].uniqueTokenTransferIdsSortedAscending; for (uint256 index = 0; index < tokenTransferIds.length; index = index.add(1)) { uint256 tokenTransferId = tokenTransferIds[index]; assert(tokenTransferId < tokenTransferCount); TokenTransfer memory tokenTransfer = tokenTransfersById[tokenTransferId]; assert(0 < tokenTransfer.tokenCount); assert(address(0) != tokenTransfer.source); assert(address(0) != tokenTransfer.destination); require(tokenTransfer.tokenCount <= balances[tokenTransfer.source]); if (tokenTransfer.source != proposalCreator) { require(tokenTransfer.tokenCount <= allowed[tokenTransfer.source][proposalCreator]); allowed[tokenTransfer.source][proposalCreator] = allowed[tokenTransfer.source][proposalCreator].sub(tokenTransfer.tokenCount); } balances[tokenTransfer.source] = balances[tokenTransfer.source].sub(tokenTransfer.tokenCount); balances[address(0)] = balances[address(0)].add(tokenTransfer.tokenCount); Transfer(tokenTransfer.source, address(0), tokenTransfer.tokenCount); } } function returnTokensFromEscrow(address proposalCreator, uint256 tokenTransferSetId) private { assert(tokenTransferSetId < tokenTransferSetCount); assert(address(0) != proposalCreator); uint256[] memory tokenTransferIds = tokenTransferSetsById[tokenTransferSetId].uniqueTokenTransferIdsSortedAscending; for (uint256 index = 0; index < tokenTransferIds.length; index = index.add(1)) { uint256 tokenTransferId = tokenTransferIds[index]; assert(tokenTransferId < tokenTransferCount); TokenTransfer memory tokenTransfer = tokenTransfersById[tokenTransferId]; assert(0 < tokenTransfer.tokenCount); assert(address(0) != tokenTransfer.source); assert(address(0) != tokenTransfer.destination); assert(tokenTransfer.tokenCount <= balances[address(0)]); balances[tokenTransfer.source] = balances[tokenTransfer.source].add(tokenTransfer.tokenCount); balances[address(0)] = balances[address(0)].sub(tokenTransfer.tokenCount); Transfer(address(0), tokenTransfer.source, tokenTransfer.tokenCount); } } function transferTokensFromEscrow(uint256 tokenTransferSetId) private { assert(tokenTransferSetId < tokenTransferSetCount); uint256[] memory tokenTransferIds = tokenTransferSetsById[tokenTransferSetId].uniqueTokenTransferIdsSortedAscending; for (uint256 index = 0; index < tokenTransferIds.length; index = index.add(1)) { uint256 tokenTransferId = tokenTransferIds[index]; assert(tokenTransferId < tokenTransferCount); TokenTransfer memory tokenTransfer = tokenTransfersById[tokenTransferId]; assert(0 < tokenTransfer.tokenCount); assert(address(0) != tokenTransfer.source); assert(address(0) != tokenTransfer.destination); balances[address(0)] = balances[address(0)].sub(tokenTransfer.tokenCount); balances[tokenTransfer.destination] = balances[tokenTransfer.destination].add(tokenTransfer.tokenCount); Transfer(address(0), tokenTransfer.destination, tokenTransfer.tokenCount); } } function storeEncryptedDecryptionKeys( uint256 proposalId, bytes concatenatedEncryptedResourceDecryptionKeys, uint256[] encryptedResourceDecryptionKeyLengths ) private { assert(proposalId < proposalCount); uint256 resourceSetId = proposalsById[proposalId].resourceSetId; assert(resourceSetId < resourceSetCount); ResourceSet memory resourceSet = resourceSetsById[resourceSetId]; require(resourceSet.uniqueResourceIdsSortedAscending.length == encryptedResourceDecryptionKeyLengths.length); uint256 concatenatedEncryptedResourceDecryptionKeysIndex = 0; for (uint256 resourceIndex = 0; resourceIndex < encryptedResourceDecryptionKeyLengths.length; resourceIndex = resourceIndex.add(1)) { bytes memory encryptedResourceDecryptionKey = new bytes(encryptedResourceDecryptionKeyLengths[resourceIndex]); require(0 < encryptedResourceDecryptionKey.length); for (uint256 encryptedResourceDecryptionKeyIndex = 0; encryptedResourceDecryptionKeyIndex < encryptedResourceDecryptionKey.length; encryptedResourceDecryptionKeyIndex = encryptedResourceDecryptionKeyIndex.add(1)) { require(concatenatedEncryptedResourceDecryptionKeysIndex < concatenatedEncryptedResourceDecryptionKeys.length); encryptedResourceDecryptionKey[encryptedResourceDecryptionKeyIndex] = concatenatedEncryptedResourceDecryptionKeys[concatenatedEncryptedResourceDecryptionKeysIndex]; concatenatedEncryptedResourceDecryptionKeysIndex = concatenatedEncryptedResourceDecryptionKeysIndex.add(1); } uint256 resourceId = resourceSet.uniqueResourceIdsSortedAscending[resourceIndex]; assert(resourceId < resourceCount); encryptedDecryptionKeysByProposalIdAndResourceId[proposalId][resourceId] = encryptedResourceDecryptionKey; } require(concatenatedEncryptedResourceDecryptionKeysIndex == concatenatedEncryptedResourceDecryptionKeys.length); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"getAgreementCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"source","type":"address"},{"name":"destination","type":"address"},{"name":"tokenCount","type":"uint256"}],"name":"createTokenTransfer","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getUriCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"uniqueAgreementIdsSortedAscending","type":"uint256[]"}],"name":"createAgreementSet","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getEncryptionAlgorithmCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getAgreementSetById","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPublicKeyCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"uniqueTokenTransferIdsSortedAscending","type":"uint256[]"}],"name":"createTokenTransferSet","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAgreementSetCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTokenTransferSetCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getResourceSetCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NULL_ENCRYPTION_ALGORITHM_ID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getChecksumPairById","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"minimumBlockNumberForWithdrawal","type":"uint256"},{"name":"creatorPublicKeyId","type":"uint256"},{"name":"acceptanceEncryptionAlgorithmId","type":"uint256"},{"name":"resourceSetId","type":"uint256"},{"name":"agreementSetId","type":"uint256"},{"name":"tokenTransferSetId","type":"uint256"}],"name":"createProposal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getProposalById","outputs":[{"name":"","type":"uint256"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"proposalId","type":"uint256"},{"name":"resourceId","type":"uint256"}],"name":"getEncryptedResourceDecryptionKey","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"uriSetId","type":"uint256"},{"name":"checksumPairId","type":"uint256"}],"name":"createAgreement","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getChecksumAlgorithmCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getTokenTransferSetById","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"encryptedChecksumId","type":"uint256"},{"name":"decryptedChecksumId","type":"uint256"}],"name":"createChecksumPair","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getChecksumCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getAgreementById","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ONE_BILLION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EMPTY_RESOURCE_SET_ID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getChecksumAlgorithmById","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"algorithmId","type":"uint256"},{"name":"resourceByteCount","type":"uint256"},{"name":"value","type":"bytes"}],"name":"createChecksum","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"uriSetId","type":"uint256"},{"name":"encryptionAlgorithmId","type":"uint256"},{"name":"metaResourceSetId","type":"uint256"}],"name":"createResource","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"proposalId","type":"uint256"}],"name":"getStateByProposalId","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"descriptionUriSetId","type":"uint256"}],"name":"createEncryptionAlgorithm","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getUriById","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getUriSetById","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getTokenTransferById","outputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getResourceSetById","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"uniqueUriIdsSortedAscending","type":"uint256[]"}],"name":"createUriSet","outputs":[{"name":"","type":"uint256"}],"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":"MAXIMUM_64_BIT_SIGNED_INTEGER_VALUE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"descriptionUriSetId","type":"uint256"}],"name":"createChecksumAlgorithm","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getEncryptionAlgorithmById","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getResourceCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"bytes"}],"name":"createPublicKey","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getUriSetCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_ID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ONE_QUINTILLION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"proposalId","type":"uint256"}],"name":"rejectProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getChecksumById","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getProposalCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"address_","type":"address"},{"name":"resourceId","type":"uint256"}],"name":"hasAddressAssignedResourceChecksumPair","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getResourceById","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"string"}],"name":"createUri","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"assigner","type":"address"},{"name":"resourceId","type":"uint256"}],"name":"getChecksumPairIdByAssignerAndResourceId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getChecksumPairCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getPublicKeyById","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"proposalId","type":"uint256"}],"name":"withdrawProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"EMPTY_PUBLIC_KEY_ID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"creatorPublicKeyId","type":"uint256"},{"name":"proposalEncryptionAlgorithmId","type":"uint256"},{"name":"uniqueResourceIdsSortedAscending","type":"uint256[]"},{"name":"metaResourceSetId","type":"uint256"}],"name":"createResourceSet","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"resourceId","type":"uint256"},{"name":"checksumPairId","type":"uint256"}],"name":"assignResourceChecksumPair","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_SET_ID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"proposalId","type":"uint256"},{"name":"concatenatedResourceDecryptionKeys","type":"bytes"},{"name":"concatenatedResourceDecryptionKeyLengths","type":"uint256[]"}],"name":"acceptProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTokenTransferCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]
Contract Creation Code
60606040526000600455600060065560006008556000600a556000600c556000600e55600060105560006012556000601455600060165560006018556000601a556000601c556000601e5534156200005657600080fd5b62000060620005e6565b6200007e633b9aca00806401000000006200390d620004f482021704565b670de0b6b3a7640000146200008f57fe5b670de0b6b3a76400006001819055600160a060020a033316600081815260208190526040808220849055919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91905190815260200160405180910390a360125415620000fa57fe5b6020604051908101604052806000604051805910620001165750595b818152601f19601f8301168101602001604052905090526000805260116020527f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b78151819080516200016d929160200190620005f8565b50506012546200018e9150600164010000000062002ba56200052e82021704565b60128190556001146200019d57fe5b60045415620001a857fe5b60206040519081016040528060606040519081016040908152602d82527f68747470733a2f2f656e2e77696b6970656469612e6f72672f77696b692f4e756020808401919091527f6c6c5f656e6372797074696f6e0000000000000000000000000000000000000091830191909152915260008052600390527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff81518190805162000258929160200190620005f8565b5050600454620002799150600164010000000062002ba56200052e82021704565b60048190556001146200028857fe5b600654156200029357fe5b6001604051805910620002a35750595b90808252806020026020018201604052509050600081600081518110620002c657fe5b60209081029091010152600454620002ee90829064010000000062002bbb6200053e82021704565b60206040519081016040528181526000805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc8151819080516200033c9291602001906200067d565b50506006546200035d9150600164010000000062002ba56200052e82021704565b60068190556001146200036c57fe5b600c54156200037757fe5b602060405190810160405260008082528052600b6020527fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f768151905550600c54620003d290600164010000000062002ba56200052e82021704565b600c819055600114620003e157fe5b60145415620003ec57fe5b60a06040519081016040528033600160a060020a0316815260200160008152602001600081526020016000604051805910620004255750595b81815260209182028101820160405282526000918101829052908052601390527f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c81518154600160a060020a031916600160a060020a03919091161781556020820151816001015560408201518160020155606082015181600301908051620004b39291602001906200067d565b50608082015160049091015550601454620004de90600164010000000062002ba56200052e82021704565b6014819055600114620004ed57fe5b50620006da565b60008083151562000509576000915062000527565b508282028284828115156200051a57fe5b04146200052357fe5b8091505b5092915050565b6000828201838110156200052357fe5b6000806000845160001015620005df57846000815181106200055c57fe5b9060200190602002015192508383106200057557600080fd5b5081905060015b8451811015620005df578481815181106200059357fe5b906020019060200201519250838310620005ac57600080fd5b828210620005b957600080fd5b829150620005d781600164010000000062002ba56200052e82021704565b90506200057c565b5050505050565b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200063b57805160ff19168380011785556200066b565b828001600101855582156200066b579182015b828111156200066b5782518255916020019190600101906200064e565b5062000679929150620006ba565b5090565b8280548282559060005260206000209081019282156200066b57916020028201828111156200066b5782518255916020019190600101906200064e565b620006d791905b80821115620006795760008155600101620006c1565b90565b6139a480620006ea6000396000f30060606040526004361061032b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416628bed3e811461033057806301c0954b1461035557806302d055311461037d57806306fdde03146103905780630828baa21461041a578063095ea7b3146104385780630f732bdc1461046e578063143c28301461048157806318160ddd146104ea5780631880692f146104fd57806320e190a41461051057806322b6fe9e1461052e57806323b872dd1461054157806327d51979146105695780632a61d47b1461057c5780632be6ec1f1461058f578063313ce567146105a257806334116fd8146105cb57806334f99b59146105f95780633656de211461061e5780633befcd631461067a57806344ce97c914610693578063466c3a2b146106ac5780634dfe165c146106bf5780634e006d83146106d55780635044b112146106ee578063573fb624146107015780635d12fc0c14610717578063650619571461058f578063661884631461072a5780636928e1421461074c5780636d8062ee1461076257806370a08231146107885780637773c36e146107a75780637ad669e9146107c35780637b7179fc146107fd5780637e2d0ebc14610813578063820a5b191461082957806387181b101461083f57806389f90872146108825780638e5653d41461091a57806395d89b4114610938578063970afd9b1461094b578063980619a71461095e5780639bad7720146109745780639f96de0f1461098a578063a75c127b1461099d578063a9059cbb146109bb578063b086d5aa146109dd578063b154dea61461058f578063b663dc0a146109f0578063bc28d87814610a03578063bc824a7714610a1b578063c08cc02d14610ab7578063c18d958214610aca578063c798192214610aec578063cbb9d38514610b26578063d206703514610b44578063d6f22e6914610b66578063d73dd62314610b79578063dd62ed3e14610b9b578063e0db1b9114610bc0578063e1f02ffa14610bd6578063ea32c95e1461058f578063f26be2a814610bec578063f3fbad2514610c15578063fab3ebb11461058f578063feadaa1b14610c2e578063feaf087214610c5c575b600080fd5b341561033b57600080fd5b610343610c6f565b60405190815260200160405180910390f35b341561036057600080fd5b610343600160a060020a0360043581169060243516604435610c76565b341561038857600080fd5b610343610d72565b341561039b57600080fd5b6103a3610d78565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156103df5780820151838201526020016103c7565b50505050905090810190601f16801561040c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561042557600080fd5b6103436004803560248101910135610daf565b341561044357600080fd5b61045a600160a060020a0360043516602435610e72565b604051901515815260200160405180910390f35b341561047957600080fd5b610343610ede565b341561048c57600080fd5b610497600435610ee4565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156104d65780820151838201526020016104be565b505050509050019250505060405180910390f35b34156104f557600080fd5b610343610f83565b341561050857600080fd5b610343610f89565b341561051b57600080fd5b6103436004803560248101910135610f8f565b341561053957600080fd5b610343611043565b341561054c57600080fd5b61045a600160a060020a0360043581169060243516604435611049565b341561057457600080fd5b6103436111b7565b341561058757600080fd5b6103436111bd565b341561059a57600080fd5b6103436111c3565b34156105ad57600080fd5b6105b56111c8565b60405160ff909116815260200160405180910390f35b34156105d657600080fd5b6105e16004356111cd565b60405191825260208201526040908101905180910390f35b341561060457600080fd5b61034360043560243560443560643560843560a435611221565b341561062957600080fd5b610634600435611359565b604051968752600160a060020a0390951660208701526040808701949094526060860192909252608085015260a084015260c083019190915260e0909101905180910390f35b341561068557600080fd5b6103a360043560243561141a565b341561069e57600080fd5b6103436004356024356116bc565b34156106b757600080fd5b61034361172f565b34156106ca57600080fd5b610497600435611735565b34156106e057600080fd5b6103436004356024356117d2565b34156106f957600080fd5b610343611845565b341561070c57600080fd5b6105e160043561184b565b341561072257600080fd5b61034361189f565b341561073557600080fd5b61045a600160a060020a03600435166024356118a7565b341561075757600080fd5b6103436004356119a1565b341561076d57600080fd5b610343600480359060248035916044359182019101356119e2565b341561079357600080fd5b610343600160a060020a0360043516611aa9565b34156107b257600080fd5b610343600435602435604435611ac4565b34156107ce57600080fd5b6107d9600435611b57565b604051808260038111156107e957fe5b60ff16815260200191505060405180910390f35b341561080857600080fd5b610343600435611b7e565b341561081e57600080fd5b6103a3600435611bcf565b341561083457600080fd5b610497600435611cae565b341561084a57600080fd5b610855600435611d4b565b604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390f35b341561088d57600080fd5b610898600435611dc6565b6040518086600160a060020a0316600160a060020a0316815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156109025780820151838201526020016108ea565b50505050905001965050505050505060405180910390f35b341561092557600080fd5b6103436004803560248101910135611eda565b341561094357600080fd5b6103a3611f8e565b341561095657600080fd5b610343611fc5565b341561096957600080fd5b610343600435611fd1565b341561097f57600080fd5b610343600435612022565b341561099557600080fd5b610343612063565b34156109a857600080fd5b6103436004803560248101910135612069565b34156109c657600080fd5b61045a600160a060020a03600435166024356120e4565b34156109e857600080fd5b6103436121e4565b34156109fb57600080fd5b6103436121ea565b3415610a0e57600080fd5b610a196004356121f6565b005b3415610a2657600080fd5b610a31600435612304565b6040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a7a578082015183820152602001610a62565b50505050905090810190601f168015610aa75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b3415610ac257600080fd5b610343612416565b3415610ad557600080fd5b61045a600160a060020a036004351660243561241c565b3415610af757600080fd5b610b02600435612459565b60405180848152602001838152602001828152602001935050505060405180910390f35b3415610b3157600080fd5b61034360048035602481019101356124c8565b3415610b4f57600080fd5b610343600160a060020a0360043516602435612550565b3415610b7157600080fd5b6103436125bc565b3415610b8457600080fd5b61045a600160a060020a03600435166024356125c2565b3415610ba657600080fd5b610343600160a060020a0360043581169060243516612666565b3415610bcb57600080fd5b6103a3600435612691565b3415610be157600080fd5b610a19600435612738565b3415610bf757600080fd5b61034360048035906024803591604435918201910135606435612841565b3415610c2057600080fd5b610a1960043560243561299f565b3415610c3957600080fd5b610a19600480359060248035808201929081013591604435908101910135612a32565b3415610c6757600080fd5b610343612b9f565b6016545b90565b600080600160a060020a0385161515610c8e57600080fd5b600160a060020a0384161515610ca357600080fd5b6000839010610cb157600080fd5b50601a54610cc681600163ffffffff612ba516565b601a5560606040519081016040908152600160a060020a038088168352861660208084019190915281830186905260008481526019909152208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905560408201516002909101555090509392505050565b60045490565b60408051908101604052600781527f4679736963616c00000000000000000000000000000000000000000000000000602082015281565b600080610dec84848080602002602001604051908101604052809392919081815260200183836020028082843750506016549350612bbb92505050565b50601854610e0181600163ffffffff612ba516565b601855602060405190810160405280858580806020026020016040519081016040528093929190818152602001838360200280828437505050929093525050506000828152601760205260409020815181908051610e6392916020019061370f565b509050508091505b5092915050565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b600c5490565b610eec61375a565b610ef461376c565b6018548310610f0257600080fd5b6000838152601760209081526040918290209151908101604052908160008201805480602002602001604051908101604052809291908181526020018280548015610f6c57602002820191906000526020600020905b815481526020019060010190808311610f58575b505050505081525050905080600001519392505050565b60015490565b60125490565b600080610fcc8484808060200260200160405190810160405280939291908181526020018383602002808284375050601a549350612bbb92505050565b50601c54610fe181600163ffffffff612ba516565b601c55602060405190810160405280858580806020026020016040519081016040528093929190818152602001838360200280828437505050929093525050506000828152601b60205260409020815181908051610e6392916020019061370f565b60185490565b6000600160a060020a038316151561106057600080fd5b600160a060020a03841660009081526020819052604090205482111561108557600080fd5b600160a060020a03808516600090815260026020908152604080832033909416835292905220548211156110b857600080fd5b600160a060020a0384166000908152602081905260409020546110e1908363ffffffff612c5116565b600160a060020a038086166000908152602081905260408082209390935590851681522054611116908363ffffffff612ba516565b600160a060020a038085166000908152602081815260408083209490945587831682526002815283822033909316825291909152205461115c908363ffffffff612c5116565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516916000805160206139398339815191529085905190815260200160405180910390a35060019392505050565b601c5490565b60145490565b600081565b600981565b6000806111d8613785565b600e5484106111e657600080fd5b6000848152600d6020526040908190209080519081016040528154815260019091015460208201529050805181602001519250925050915091565b6000806012548710151561123457600080fd5b600c54861061124257600080fd5b601454851061125057600080fd5b601854841061125e57600080fd5b601c54831061126c57600080fd5b6112763384612c63565b50601e5461128b81600163ffffffff612ba516565b601e5560e06040519081016040528089815260200133600160a060020a0316815260200188815260200187815260200186815260200185815260200184815250601d600083815260200190815260200160002060008201518155602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201516006909101555090509695505050505050565b600080600080600080600061136c61379c565b601e54891061137a57600080fd5b6000898152601d6020526040908190209060e090519081016040908152825482526001830154600160a060020a031660208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460c08201529050805181602001518260400151836060015184608001518560a001518660c00151959f949e50929c50909a509850965090945092505050565b61142261375a565b61142a61375a565b6000806000601e548710151561143f57600080fd5b6000878152601f602052604090205460ff16600381111561145c57fe5b60031461146857600080fd5b601054861061147657600080fd5b6000878152601d6020908152604080832060040154835260138252918290206003018054909290918281020190519081016040528092919081815260200182805480156114e257602002820191906000526020600020905b8154815260200190600101908083116114ce575b5050505050935083516000106114f757600080fd5b835160011415611528578360008151811061150e57fe5b90602001906020020151861461152357600080fd5b6115f3565b6000925061153f600185519063ffffffff612c5116565b91506115626002611556858563ffffffff612ba516565b9063ffffffff612fb816565b90505b83818151811061157157fe5b9060200190602002015186146115f3578183111561158e57600080fd5b8584828151811061159b57fe5b9060200190602002015110156115c3576115bc81600163ffffffff612ba516565b92506115d7565b6115d481600163ffffffff612c5116565b91505b6115ec6002611556858563ffffffff612ba516565b9050611565565b6020600088815260200190815260200160002060008781526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116ab5780601f10611680576101008083540402835291602001916116ab565b820191906000526020600020905b81548152906001019060200180831161168e57829003601f168201915b505050505094505050505092915050565b600080600654841015156116cf57600080fd5b600e5483106116dd57600080fd5b506016546116f281600163ffffffff612ba516565b6016556040805190810160409081528582526020808301869052600084815260159091522081518155602082015160019091015550905092915050565b60085490565b61173d61375a565b61174561376c565b601c54831061175357600080fd5b6000838152601b60209081526040918290209151908101604052908160008201805480602002602001604051908101604052809291908181526020018280548015610f6c5760200282019190600052602060002090815481526020019060010190808311610f5857505050505081525050905080600001519392505050565b600080600a54841015156117e557600080fd5b600a5483106117f357600080fd5b50600e5461180881600163ffffffff612ba516565b600e5560408051908101604090815285825260208083018690526000848152600d9091522081518155602082015160019091015550905092915050565b600a5490565b600080611856613785565b601654841061186457600080fd5b600084815260156020526040908190209080519081016040528154815260019091015460208201529050805181602001519250925050915091565b633b9aca0081565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120548083111561190457600160a060020a03338116600090815260026020908152604080832093881683529290529081205561193b565b611914818463ffffffff612c5116565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b60006119ab61375a565b60085483106119b957600080fd5b600083815260076020908152604091829020915190810160405290548152905080519392505050565b600080600854861015156119f557600080fd5b6000859010611a0357600080fd5b50600a54611a1881600163ffffffff612ba516565b600a5560606040519081016040528087815260200186815260200185858080601f01602080910402602001604051908101604052818152929190602084018383808284375050509290935250505060008281526009602052604090208151815560208201518160010155604082015181600201908051611a9c9291602001906137e3565b5091979650505050505050565b600160a060020a031660009081526020819052604090205490565b60008060065485101515611ad757600080fd5b600c548410611ae557600080fd5b6014548310611af357600080fd5b50601054611b0881600163ffffffff612ba516565b6010556060604051908101604090815286825260208083018790528183018690526000848152600f90915220815181556020820151816001015560408201516002909101555090509392505050565b601e546000908210611b6857600080fd5b506000908152601f602052604090205460ff1690565b60008060065483101515611b9157600080fd5b50600c54611ba681600163ffffffff612ba516565b600c55602060405190810160409081528482526000838152600b60205220815190555092915050565b611bd761375a565b611bdf61376c565b6004548310611bed57600080fd5b60008381526003602090815260409182902091519081016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f6c5780601f10611c7657610100808354040283529160200191610f6c565b820191906000526020600020905b815481529060010190602001808311611c8457505050919092525091925082915050519392505050565b611cb661375a565b611cbe61376c565b6006548310611ccc57600080fd5b6000838152600560209081526040918290209151908101604052908160008201805480602002602001604051908101604052809291908181526020018280548015610f6c5760200282019190600052602060002090815481526020019060010190808311610f5857505050505081525050905080600001519392505050565b6000806000611d58613850565b601a548510611d6657600080fd5b60008581526019602052604090819020906060905190810160409081528254600160a060020a0390811683526001840154166020830152600290920154918101919091529050805181602001518260400151935093509350509193909250565b6000806000611dd361375a565b6000611ddd613870565b6014548710611deb57600080fd5b600087815260136020526040908190209060a0905190810160405290816000820160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182015481526020016002820154815260200160038201805480602002602001604051908101604052809291908181526020018280548015611e9957602002820191906000526020600020905b815481526020019060010190808311611e85575b50505050508152602001600482015481525050905080600001518160200151826040015183606001518460800151939b929a50909850965090945092505050565b600080611f1784848080602002602001604051908101604052809392919081815260200183836020028082843750506004549350612bbb92505050565b50600654611f2c81600163ffffffff612ba516565b600655602060405190810160405280858580806020026020016040519081016040528093929190818152602001838360200280828437505050929093525050506000828152600560205260409020815181908051610e6392916020019061370f565b60408051908101604052600381527f4659530000000000000000000000000000000000000000000000000000000000602082015281565b677fffffffffffffff81565b60008060065483101515611fe457600080fd5b50600854611ff981600163ffffffff612ba516565b600855602060405190810160409081528482526000838152600760205220815190555092915050565b600061202c61375a565b600c54831061203a57600080fd5b6000838152600b6020908152604091829020915190810160405290548152905080519392505050565b60105490565b60125460009061208081600163ffffffff612ba516565b60125560206040519081016040528085858080601f0160208091040260200160405190810160405281815292919060208401838380828437505050929093525050506000828152601160205260409020815181908051610e639291602001906137e3565b6000600160a060020a03831615156120fb57600080fd5b600160a060020a03331660009081526020819052604090205482111561212057600080fd5b600160a060020a033316600090815260208190526040902054612149908363ffffffff612c5116565b600160a060020a03338116600090815260208190526040808220939093559085168152205461217e908363ffffffff612ba516565b60008085600160a060020a0316600160a060020a031681526020019081526020016000208190555082600160a060020a031633600160a060020a03166000805160206139398339815191528460405190815260200160405180910390a350600192915050565b60065490565b670de0b6b3a764000081565b6121fe61379c565b601e54821061220c57600080fd5b6000828152601f602052604090205460ff16600381111561222957fe5b1561223357600080fd5b6000828152601d6020526040908190209060e090519081016040908152825482526001830154600160a060020a0316602083015260028301549082015260038201546060820152600482015460808201908152600583015460a083015260069092015460c0820152915060139060009051815260208101919091526040016000205433600160a060020a039081169116146122cd57600080fd5b6122df81602001518260c00151612fcf565b6000828152601f6020526040902080546002919060ff19166001835b02179055505050565b60008061230f61375a565b6123176138af565b600a54851061232557600080fd5b60008581526009602052604090819020906060905190810160405290816000820154815260200160018201548152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123ee5780601f106123c3576101008083540402835291602001916123ee565b820191906000526020600020905b8154815290600101906020018083116123d157829003601f168201915b5050505050815250509050806000015181602001518260400151919790965090945092505050565b601e5490565b601054600090821061242d57600080fd5b50600160a060020a03919091166000908152602160209081526040808320938352929052205460ff1690565b60008060006124666138d1565b601054851061247457600080fd5b6000858152600f602052604090819020906060905190810160409081528254825260018301546020830152600290920154918101919091529050805181602001518260400151935093509350509193909250565b6000808281106124d757600080fd5b506004546124ec81600163ffffffff612ba516565b60045560206040519081016040528085858080601f0160208091040260200160405190810160405281815292919060208401838380828437505050929093525050506000828152600360205260409020815181908051610e639291602001906137e3565b601054600090821061256157600080fd5b600160a060020a038316600090815260216020908152604080832085845290915290205460ff16151561259357600080fd5b50600160a060020a03919091166000908152602260209081526040808320938352929052205490565b600e5490565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120546125fa908363ffffffff612ba516565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b61269961375a565b6126a161376c565b60125483106126af57600080fd5b60008381526011602090815260409182902091519081016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f6c5780601f10611c7657610100808354040283529160200191610f6c565b61274061379c565b601e54821061274e57600080fd5b6000828152601f602052604090205460ff16600381111561276b57fe5b1561277557600080fd5b6000828152601d6020526040908190209060e090519081016040908152825482526001830154600160a060020a0316602083019081526002840154918301919091526003830154606083015260048301546080830152600583015460a083015260069092015460c0820152915051600160a060020a031633600160a060020a031614151561280257600080fd5b805143101561281057600080fd5b61282281602001518260c00151612fcf565b6000828152601f6020526040902080546001919060ff191682806122fb565b6000806012548710151561285457600080fd5b600c54861061286257600080fd5b61289c85858080602002602001604051908101604052809392919081815260200183836020028082843750506010549350612bbb92505050565b60145483106128aa57600080fd5b506014546128bf81600163ffffffff612ba516565b60145560a06040519081016040528033600160a060020a03168152602001888152602001878152602001868680806020026020016040519081016040528093929190818152602001838360200280828437505050928452505050602090810185905260008381526013909152604090208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015181600101556040820151816002015560608201518160030190805161298792916020019061370f565b50608082015160049091015550905095945050505050565b60105482106129ad57600080fd5b600e5481106129bb57600080fd5b600160a060020a033316600090815260216020908152604080832085845290915290205460ff16156129ec57600080fd5b600160a060020a0333166000818152602260209081526040808320868452825280832094909455918152602182528281209381529290529020805460ff19166001179055565b612a3a61379c565b601e548610612a4857600080fd5b6000868152601f602052604090205460ff166003811115612a6557fe5b15612a6f57600080fd5b6000868152601d6020526040908190209060e090519081016040908152825482526001830154600160a060020a0316602083015260028301549082015260038201546060820152600482015460808201908152600583015460a083015260069092015460c0820152915060139060009051815260208101919091526040016000205433600160a060020a03908116911614612b0957600080fd5b612b728686868080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050508585808060200260200160405190810160405280939291908181526020018383602002808284375061321f945050505050565b612b7f8160c001516134ed565b50505060009283525050601f60205260409020805460ff19166003179055565b601a5490565b600082820183811015612bb457fe5b9392505050565b6000806000845160001015612c4a5784600081518110612bd757fe5b906020019060200201519250838310612bef57600080fd5b5081905060015b8451811015612c4a57848181518110612c0b57fe5b906020019060200201519250838310612c2357600080fd5b828210612c2f57600080fd5b829150612c4381600163ffffffff612ba516565b9050612bf6565b5050505050565b600082821115612c5d57fe5b50900390565b612c6b61375a565b600080612c76613850565b601c548510612c8157fe5b600160a060020a0386161515612c9357fe5b601b6000868152602001908152602001600020600001805480602002602001604051908101604052809291908181526020018280548015612cf357602002820191906000526020600020905b815481526020019060010190808311612cdf575b50505050509350600092505b8351831015612fb057838381518110612d1457fe5b90602001906020020151601a549092508210612d2c57fe5b60008281526019602052604090819020906060905190810160409081528254600160a060020a0390811683526001840154166020830152600290920154918101918252915051600010612d7b57fe5b8051600160a060020a03161515612d8e57fe5b8060200151600160a060020a03161515612da457fe5b6000808251600160a060020a0316600160a060020a031681526020019081526020016000205481604001511115612dda57600080fd5b600160a060020a0386168151600160a060020a031614612ec357600260008251600160a060020a0316600160a060020a03168152602001908152602001600020600087600160a060020a0316600160a060020a031681526020019081526020016000205481604001511115612e4e57600080fd5b612e928160400151600260008451600160a060020a03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff612c5116565b600260008351600160a060020a03908116825260208083019390935260409182016000908120918b16815292529020555b612ef681604001516000808451600160a060020a031681526020810191909152604001600020549063ffffffff612c5116565b6000808351600160a060020a0316600160a060020a0316815260200190815260200160002081905550612f4b81604001516000808052602052600080516020613959833981519152549063ffffffff612ba516565b60008080526020819052600080516020613959833981519152919091558151600160a060020a0316600080516020613939833981519152836040015160405190815260200160405180910390a3612fa983600163ffffffff612ba516565b9250612cff565b505050505050565b6000808284811515612fc657fe5b04949350505050565b612fd761375a565b600080612fe2613850565b601c548510612fed57fe5b600160a060020a0386161515612fff57fe5b601b600086815260200190815260200160002060000180548060200260200160405190810160405280929190818152602001828054801561305f57602002820191906000526020600020905b81548152602001906001019080831161304b575b50505050509350600092505b8351831015612fb05783838151811061308057fe5b90602001906020020151601a54909250821061309857fe5b60008281526019602052604090819020906060905190810160409081528254600160a060020a03908116835260018401541660208301526002909201549181019182529150516000106130e757fe5b8051600160a060020a031615156130fa57fe5b8060200151600160a060020a0316151561311057fe5b6000808052602052600080516020613959833981519152546040820151111561313557fe5b61316881604001516000808451600160a060020a031681526020810191909152604001600020549063ffffffff612ba516565b6000808351600160a060020a0316600160a060020a03168152602001908152602001600020819055506131bd81604001516000808052602052600080516020613959833981519152549063ffffffff612c5116565b6000808052602052600080516020613959833981519152558051600160a060020a03166000600080516020613939833981519152604084015160405190815260200160405180910390a361321883600163ffffffff612ba516565b925061306b565b6000613229613870565b60008061323461375a565b600080601e548a10151561324457fe5b60008a8152601d6020526040902060040154601454909750871061326457fe5b600087815260136020526040908190209060a0905190810160405290816000820160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a0316815260200160018201548152602001600282015481526020016003820180548060200260200160405190810160405280929190818152602001828054801561331257602002820191906000526020600020905b8154815260200190600101908083116132fe575b50505050508152602001600482015481525050955087518660600151511461333957600080fd5b60009450600093505b87518410156134d45787848151811061335757fe5b9060200190602002015160405180591061336e5750595b818152601f19601f830116810160200160405290509250825160001061339357600080fd5b600091505b825182101561346b57885185106133ae57600080fd5b8885815181106133ba57fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000283838151811061341057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061345185600163ffffffff612ba516565b945061346482600163ffffffff612ba516565b9150613398565b8560600151848151811061347b57fe5b90602001906020020151601054909150811061349357fe5b60008a81526020808052604080832084845290915290208380516134bb9291602001906137e3565b506134cd84600163ffffffff612ba516565b9350613342565b885185146134e157600080fd5b50505050505050505050565b6134f561375a565b600080613500613850565b601c54851061350b57fe5b601b600086815260200190815260200160002060000180548060200260200160405190810160405280929190818152602001828054801561356b57602002820191906000526020600020905b815481526020019060010190808311613557575b50505050509350600092505b8351831015612c4a5783838151811061358c57fe5b90602001906020020151601a5490925082106135a457fe5b60008281526019602052604090819020906060905190810160409081528254600160a060020a03908116835260018401541660208301526002909201549181019182529150516000106135f357fe5b8051600160a060020a0316151561360657fe5b8060200151600160a060020a0316151561361c57fe5b61364881604001516000808052602052600080516020613959833981519152549063ffffffff612c5116565b60008080526020526000805160206139598339815191525561369660408201516000808460200151600160a060020a031681526020810191909152604001600020549063ffffffff612ba516565b6000808360200151600160a060020a0316600160a060020a03168152602001908152602001600020819055508060200151600160a060020a03166000600080516020613939833981519152604084015160405190815260200160405180910390a361370883600163ffffffff612ba516565b9250613577565b82805482825590600052602060002090810192821561374a579160200282015b8281111561374a57825182559160200191906001019061372f565b506137569291506138f3565b5090565b60206040519081016040526000815290565b60206040519081016040528061378061375a565b905290565b604080519081016040526000808252602082015290565b60e060405190810160405280600081526020016000600160a060020a0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061382457805160ff191683800117855561374a565b8280016001018555821561374a579182018281111561374a57825182559160200191906001019061372f565b606060405190810160409081526000808352602083018190529082015290565b60a0604051908101604052806000600160a060020a0316815260200160008152602001600081526020016138a261375a565b8152602001600081525090565b606060405190810160405280600081526020016000815260200161378061375a565b6060604051908101604052806000815260200160008152602001600081525090565b610c7391905b8082111561375657600081556001016138f9565b6000808315156139205760009150610e6b565b5082820282848281151561393057fe5b0414612bb457fe00ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5a165627a7a723058200fb0c3cbc8d416f4de6c6e803e18100f4a7e09d3da8bf366c4c066a943f890510029
Deployed Bytecode
0x60606040526004361061032b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416628bed3e811461033057806301c0954b1461035557806302d055311461037d57806306fdde03146103905780630828baa21461041a578063095ea7b3146104385780630f732bdc1461046e578063143c28301461048157806318160ddd146104ea5780631880692f146104fd57806320e190a41461051057806322b6fe9e1461052e57806323b872dd1461054157806327d51979146105695780632a61d47b1461057c5780632be6ec1f1461058f578063313ce567146105a257806334116fd8146105cb57806334f99b59146105f95780633656de211461061e5780633befcd631461067a57806344ce97c914610693578063466c3a2b146106ac5780634dfe165c146106bf5780634e006d83146106d55780635044b112146106ee578063573fb624146107015780635d12fc0c14610717578063650619571461058f578063661884631461072a5780636928e1421461074c5780636d8062ee1461076257806370a08231146107885780637773c36e146107a75780637ad669e9146107c35780637b7179fc146107fd5780637e2d0ebc14610813578063820a5b191461082957806387181b101461083f57806389f90872146108825780638e5653d41461091a57806395d89b4114610938578063970afd9b1461094b578063980619a71461095e5780639bad7720146109745780639f96de0f1461098a578063a75c127b1461099d578063a9059cbb146109bb578063b086d5aa146109dd578063b154dea61461058f578063b663dc0a146109f0578063bc28d87814610a03578063bc824a7714610a1b578063c08cc02d14610ab7578063c18d958214610aca578063c798192214610aec578063cbb9d38514610b26578063d206703514610b44578063d6f22e6914610b66578063d73dd62314610b79578063dd62ed3e14610b9b578063e0db1b9114610bc0578063e1f02ffa14610bd6578063ea32c95e1461058f578063f26be2a814610bec578063f3fbad2514610c15578063fab3ebb11461058f578063feadaa1b14610c2e578063feaf087214610c5c575b600080fd5b341561033b57600080fd5b610343610c6f565b60405190815260200160405180910390f35b341561036057600080fd5b610343600160a060020a0360043581169060243516604435610c76565b341561038857600080fd5b610343610d72565b341561039b57600080fd5b6103a3610d78565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156103df5780820151838201526020016103c7565b50505050905090810190601f16801561040c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561042557600080fd5b6103436004803560248101910135610daf565b341561044357600080fd5b61045a600160a060020a0360043516602435610e72565b604051901515815260200160405180910390f35b341561047957600080fd5b610343610ede565b341561048c57600080fd5b610497600435610ee4565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156104d65780820151838201526020016104be565b505050509050019250505060405180910390f35b34156104f557600080fd5b610343610f83565b341561050857600080fd5b610343610f89565b341561051b57600080fd5b6103436004803560248101910135610f8f565b341561053957600080fd5b610343611043565b341561054c57600080fd5b61045a600160a060020a0360043581169060243516604435611049565b341561057457600080fd5b6103436111b7565b341561058757600080fd5b6103436111bd565b341561059a57600080fd5b6103436111c3565b34156105ad57600080fd5b6105b56111c8565b60405160ff909116815260200160405180910390f35b34156105d657600080fd5b6105e16004356111cd565b60405191825260208201526040908101905180910390f35b341561060457600080fd5b61034360043560243560443560643560843560a435611221565b341561062957600080fd5b610634600435611359565b604051968752600160a060020a0390951660208701526040808701949094526060860192909252608085015260a084015260c083019190915260e0909101905180910390f35b341561068557600080fd5b6103a360043560243561141a565b341561069e57600080fd5b6103436004356024356116bc565b34156106b757600080fd5b61034361172f565b34156106ca57600080fd5b610497600435611735565b34156106e057600080fd5b6103436004356024356117d2565b34156106f957600080fd5b610343611845565b341561070c57600080fd5b6105e160043561184b565b341561072257600080fd5b61034361189f565b341561073557600080fd5b61045a600160a060020a03600435166024356118a7565b341561075757600080fd5b6103436004356119a1565b341561076d57600080fd5b610343600480359060248035916044359182019101356119e2565b341561079357600080fd5b610343600160a060020a0360043516611aa9565b34156107b257600080fd5b610343600435602435604435611ac4565b34156107ce57600080fd5b6107d9600435611b57565b604051808260038111156107e957fe5b60ff16815260200191505060405180910390f35b341561080857600080fd5b610343600435611b7e565b341561081e57600080fd5b6103a3600435611bcf565b341561083457600080fd5b610497600435611cae565b341561084a57600080fd5b610855600435611d4b565b604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390f35b341561088d57600080fd5b610898600435611dc6565b6040518086600160a060020a0316600160a060020a0316815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156109025780820151838201526020016108ea565b50505050905001965050505050505060405180910390f35b341561092557600080fd5b6103436004803560248101910135611eda565b341561094357600080fd5b6103a3611f8e565b341561095657600080fd5b610343611fc5565b341561096957600080fd5b610343600435611fd1565b341561097f57600080fd5b610343600435612022565b341561099557600080fd5b610343612063565b34156109a857600080fd5b6103436004803560248101910135612069565b34156109c657600080fd5b61045a600160a060020a03600435166024356120e4565b34156109e857600080fd5b6103436121e4565b34156109fb57600080fd5b6103436121ea565b3415610a0e57600080fd5b610a196004356121f6565b005b3415610a2657600080fd5b610a31600435612304565b6040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a7a578082015183820152602001610a62565b50505050905090810190601f168015610aa75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b3415610ac257600080fd5b610343612416565b3415610ad557600080fd5b61045a600160a060020a036004351660243561241c565b3415610af757600080fd5b610b02600435612459565b60405180848152602001838152602001828152602001935050505060405180910390f35b3415610b3157600080fd5b61034360048035602481019101356124c8565b3415610b4f57600080fd5b610343600160a060020a0360043516602435612550565b3415610b7157600080fd5b6103436125bc565b3415610b8457600080fd5b61045a600160a060020a03600435166024356125c2565b3415610ba657600080fd5b610343600160a060020a0360043581169060243516612666565b3415610bcb57600080fd5b6103a3600435612691565b3415610be157600080fd5b610a19600435612738565b3415610bf757600080fd5b61034360048035906024803591604435918201910135606435612841565b3415610c2057600080fd5b610a1960043560243561299f565b3415610c3957600080fd5b610a19600480359060248035808201929081013591604435908101910135612a32565b3415610c6757600080fd5b610343612b9f565b6016545b90565b600080600160a060020a0385161515610c8e57600080fd5b600160a060020a0384161515610ca357600080fd5b6000839010610cb157600080fd5b50601a54610cc681600163ffffffff612ba516565b601a5560606040519081016040908152600160a060020a038088168352861660208084019190915281830186905260008481526019909152208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905560408201516002909101555090509392505050565b60045490565b60408051908101604052600781527f4679736963616c00000000000000000000000000000000000000000000000000602082015281565b600080610dec84848080602002602001604051908101604052809392919081815260200183836020028082843750506016549350612bbb92505050565b50601854610e0181600163ffffffff612ba516565b601855602060405190810160405280858580806020026020016040519081016040528093929190818152602001838360200280828437505050929093525050506000828152601760205260409020815181908051610e6392916020019061370f565b509050508091505b5092915050565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b600c5490565b610eec61375a565b610ef461376c565b6018548310610f0257600080fd5b6000838152601760209081526040918290209151908101604052908160008201805480602002602001604051908101604052809291908181526020018280548015610f6c57602002820191906000526020600020905b815481526020019060010190808311610f58575b505050505081525050905080600001519392505050565b60015490565b60125490565b600080610fcc8484808060200260200160405190810160405280939291908181526020018383602002808284375050601a549350612bbb92505050565b50601c54610fe181600163ffffffff612ba516565b601c55602060405190810160405280858580806020026020016040519081016040528093929190818152602001838360200280828437505050929093525050506000828152601b60205260409020815181908051610e6392916020019061370f565b60185490565b6000600160a060020a038316151561106057600080fd5b600160a060020a03841660009081526020819052604090205482111561108557600080fd5b600160a060020a03808516600090815260026020908152604080832033909416835292905220548211156110b857600080fd5b600160a060020a0384166000908152602081905260409020546110e1908363ffffffff612c5116565b600160a060020a038086166000908152602081905260408082209390935590851681522054611116908363ffffffff612ba516565b600160a060020a038085166000908152602081815260408083209490945587831682526002815283822033909316825291909152205461115c908363ffffffff612c5116565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516916000805160206139398339815191529085905190815260200160405180910390a35060019392505050565b601c5490565b60145490565b600081565b600981565b6000806111d8613785565b600e5484106111e657600080fd5b6000848152600d6020526040908190209080519081016040528154815260019091015460208201529050805181602001519250925050915091565b6000806012548710151561123457600080fd5b600c54861061124257600080fd5b601454851061125057600080fd5b601854841061125e57600080fd5b601c54831061126c57600080fd5b6112763384612c63565b50601e5461128b81600163ffffffff612ba516565b601e5560e06040519081016040528089815260200133600160a060020a0316815260200188815260200187815260200186815260200185815260200184815250601d600083815260200190815260200160002060008201518155602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201516006909101555090509695505050505050565b600080600080600080600061136c61379c565b601e54891061137a57600080fd5b6000898152601d6020526040908190209060e090519081016040908152825482526001830154600160a060020a031660208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460c08201529050805181602001518260400151836060015184608001518560a001518660c00151959f949e50929c50909a509850965090945092505050565b61142261375a565b61142a61375a565b6000806000601e548710151561143f57600080fd5b6000878152601f602052604090205460ff16600381111561145c57fe5b60031461146857600080fd5b601054861061147657600080fd5b6000878152601d6020908152604080832060040154835260138252918290206003018054909290918281020190519081016040528092919081815260200182805480156114e257602002820191906000526020600020905b8154815260200190600101908083116114ce575b5050505050935083516000106114f757600080fd5b835160011415611528578360008151811061150e57fe5b90602001906020020151861461152357600080fd5b6115f3565b6000925061153f600185519063ffffffff612c5116565b91506115626002611556858563ffffffff612ba516565b9063ffffffff612fb816565b90505b83818151811061157157fe5b9060200190602002015186146115f3578183111561158e57600080fd5b8584828151811061159b57fe5b9060200190602002015110156115c3576115bc81600163ffffffff612ba516565b92506115d7565b6115d481600163ffffffff612c5116565b91505b6115ec6002611556858563ffffffff612ba516565b9050611565565b6020600088815260200190815260200160002060008781526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116ab5780601f10611680576101008083540402835291602001916116ab565b820191906000526020600020905b81548152906001019060200180831161168e57829003601f168201915b505050505094505050505092915050565b600080600654841015156116cf57600080fd5b600e5483106116dd57600080fd5b506016546116f281600163ffffffff612ba516565b6016556040805190810160409081528582526020808301869052600084815260159091522081518155602082015160019091015550905092915050565b60085490565b61173d61375a565b61174561376c565b601c54831061175357600080fd5b6000838152601b60209081526040918290209151908101604052908160008201805480602002602001604051908101604052809291908181526020018280548015610f6c5760200282019190600052602060002090815481526020019060010190808311610f5857505050505081525050905080600001519392505050565b600080600a54841015156117e557600080fd5b600a5483106117f357600080fd5b50600e5461180881600163ffffffff612ba516565b600e5560408051908101604090815285825260208083018690526000848152600d9091522081518155602082015160019091015550905092915050565b600a5490565b600080611856613785565b601654841061186457600080fd5b600084815260156020526040908190209080519081016040528154815260019091015460208201529050805181602001519250925050915091565b633b9aca0081565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120548083111561190457600160a060020a03338116600090815260026020908152604080832093881683529290529081205561193b565b611914818463ffffffff612c5116565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b60006119ab61375a565b60085483106119b957600080fd5b600083815260076020908152604091829020915190810160405290548152905080519392505050565b600080600854861015156119f557600080fd5b6000859010611a0357600080fd5b50600a54611a1881600163ffffffff612ba516565b600a5560606040519081016040528087815260200186815260200185858080601f01602080910402602001604051908101604052818152929190602084018383808284375050509290935250505060008281526009602052604090208151815560208201518160010155604082015181600201908051611a9c9291602001906137e3565b5091979650505050505050565b600160a060020a031660009081526020819052604090205490565b60008060065485101515611ad757600080fd5b600c548410611ae557600080fd5b6014548310611af357600080fd5b50601054611b0881600163ffffffff612ba516565b6010556060604051908101604090815286825260208083018790528183018690526000848152600f90915220815181556020820151816001015560408201516002909101555090509392505050565b601e546000908210611b6857600080fd5b506000908152601f602052604090205460ff1690565b60008060065483101515611b9157600080fd5b50600c54611ba681600163ffffffff612ba516565b600c55602060405190810160409081528482526000838152600b60205220815190555092915050565b611bd761375a565b611bdf61376c565b6004548310611bed57600080fd5b60008381526003602090815260409182902091519081016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f6c5780601f10611c7657610100808354040283529160200191610f6c565b820191906000526020600020905b815481529060010190602001808311611c8457505050919092525091925082915050519392505050565b611cb661375a565b611cbe61376c565b6006548310611ccc57600080fd5b6000838152600560209081526040918290209151908101604052908160008201805480602002602001604051908101604052809291908181526020018280548015610f6c5760200282019190600052602060002090815481526020019060010190808311610f5857505050505081525050905080600001519392505050565b6000806000611d58613850565b601a548510611d6657600080fd5b60008581526019602052604090819020906060905190810160409081528254600160a060020a0390811683526001840154166020830152600290920154918101919091529050805181602001518260400151935093509350509193909250565b6000806000611dd361375a565b6000611ddd613870565b6014548710611deb57600080fd5b600087815260136020526040908190209060a0905190810160405290816000820160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182015481526020016002820154815260200160038201805480602002602001604051908101604052809291908181526020018280548015611e9957602002820191906000526020600020905b815481526020019060010190808311611e85575b50505050508152602001600482015481525050905080600001518160200151826040015183606001518460800151939b929a50909850965090945092505050565b600080611f1784848080602002602001604051908101604052809392919081815260200183836020028082843750506004549350612bbb92505050565b50600654611f2c81600163ffffffff612ba516565b600655602060405190810160405280858580806020026020016040519081016040528093929190818152602001838360200280828437505050929093525050506000828152600560205260409020815181908051610e6392916020019061370f565b60408051908101604052600381527f4659530000000000000000000000000000000000000000000000000000000000602082015281565b677fffffffffffffff81565b60008060065483101515611fe457600080fd5b50600854611ff981600163ffffffff612ba516565b600855602060405190810160409081528482526000838152600760205220815190555092915050565b600061202c61375a565b600c54831061203a57600080fd5b6000838152600b6020908152604091829020915190810160405290548152905080519392505050565b60105490565b60125460009061208081600163ffffffff612ba516565b60125560206040519081016040528085858080601f0160208091040260200160405190810160405281815292919060208401838380828437505050929093525050506000828152601160205260409020815181908051610e639291602001906137e3565b6000600160a060020a03831615156120fb57600080fd5b600160a060020a03331660009081526020819052604090205482111561212057600080fd5b600160a060020a033316600090815260208190526040902054612149908363ffffffff612c5116565b600160a060020a03338116600090815260208190526040808220939093559085168152205461217e908363ffffffff612ba516565b60008085600160a060020a0316600160a060020a031681526020019081526020016000208190555082600160a060020a031633600160a060020a03166000805160206139398339815191528460405190815260200160405180910390a350600192915050565b60065490565b670de0b6b3a764000081565b6121fe61379c565b601e54821061220c57600080fd5b6000828152601f602052604090205460ff16600381111561222957fe5b1561223357600080fd5b6000828152601d6020526040908190209060e090519081016040908152825482526001830154600160a060020a0316602083015260028301549082015260038201546060820152600482015460808201908152600583015460a083015260069092015460c0820152915060139060009051815260208101919091526040016000205433600160a060020a039081169116146122cd57600080fd5b6122df81602001518260c00151612fcf565b6000828152601f6020526040902080546002919060ff19166001835b02179055505050565b60008061230f61375a565b6123176138af565b600a54851061232557600080fd5b60008581526009602052604090819020906060905190810160405290816000820154815260200160018201548152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123ee5780601f106123c3576101008083540402835291602001916123ee565b820191906000526020600020905b8154815290600101906020018083116123d157829003601f168201915b5050505050815250509050806000015181602001518260400151919790965090945092505050565b601e5490565b601054600090821061242d57600080fd5b50600160a060020a03919091166000908152602160209081526040808320938352929052205460ff1690565b60008060006124666138d1565b601054851061247457600080fd5b6000858152600f602052604090819020906060905190810160409081528254825260018301546020830152600290920154918101919091529050805181602001518260400151935093509350509193909250565b6000808281106124d757600080fd5b506004546124ec81600163ffffffff612ba516565b60045560206040519081016040528085858080601f0160208091040260200160405190810160405281815292919060208401838380828437505050929093525050506000828152600360205260409020815181908051610e639291602001906137e3565b601054600090821061256157600080fd5b600160a060020a038316600090815260216020908152604080832085845290915290205460ff16151561259357600080fd5b50600160a060020a03919091166000908152602260209081526040808320938352929052205490565b600e5490565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120546125fa908363ffffffff612ba516565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b61269961375a565b6126a161376c565b60125483106126af57600080fd5b60008381526011602090815260409182902091519081016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f6c5780601f10611c7657610100808354040283529160200191610f6c565b61274061379c565b601e54821061274e57600080fd5b6000828152601f602052604090205460ff16600381111561276b57fe5b1561277557600080fd5b6000828152601d6020526040908190209060e090519081016040908152825482526001830154600160a060020a0316602083019081526002840154918301919091526003830154606083015260048301546080830152600583015460a083015260069092015460c0820152915051600160a060020a031633600160a060020a031614151561280257600080fd5b805143101561281057600080fd5b61282281602001518260c00151612fcf565b6000828152601f6020526040902080546001919060ff191682806122fb565b6000806012548710151561285457600080fd5b600c54861061286257600080fd5b61289c85858080602002602001604051908101604052809392919081815260200183836020028082843750506010549350612bbb92505050565b60145483106128aa57600080fd5b506014546128bf81600163ffffffff612ba516565b60145560a06040519081016040528033600160a060020a03168152602001888152602001878152602001868680806020026020016040519081016040528093929190818152602001838360200280828437505050928452505050602090810185905260008381526013909152604090208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015181600101556040820151816002015560608201518160030190805161298792916020019061370f565b50608082015160049091015550905095945050505050565b60105482106129ad57600080fd5b600e5481106129bb57600080fd5b600160a060020a033316600090815260216020908152604080832085845290915290205460ff16156129ec57600080fd5b600160a060020a0333166000818152602260209081526040808320868452825280832094909455918152602182528281209381529290529020805460ff19166001179055565b612a3a61379c565b601e548610612a4857600080fd5b6000868152601f602052604090205460ff166003811115612a6557fe5b15612a6f57600080fd5b6000868152601d6020526040908190209060e090519081016040908152825482526001830154600160a060020a0316602083015260028301549082015260038201546060820152600482015460808201908152600583015460a083015260069092015460c0820152915060139060009051815260208101919091526040016000205433600160a060020a03908116911614612b0957600080fd5b612b728686868080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050508585808060200260200160405190810160405280939291908181526020018383602002808284375061321f945050505050565b612b7f8160c001516134ed565b50505060009283525050601f60205260409020805460ff19166003179055565b601a5490565b600082820183811015612bb457fe5b9392505050565b6000806000845160001015612c4a5784600081518110612bd757fe5b906020019060200201519250838310612bef57600080fd5b5081905060015b8451811015612c4a57848181518110612c0b57fe5b906020019060200201519250838310612c2357600080fd5b828210612c2f57600080fd5b829150612c4381600163ffffffff612ba516565b9050612bf6565b5050505050565b600082821115612c5d57fe5b50900390565b612c6b61375a565b600080612c76613850565b601c548510612c8157fe5b600160a060020a0386161515612c9357fe5b601b6000868152602001908152602001600020600001805480602002602001604051908101604052809291908181526020018280548015612cf357602002820191906000526020600020905b815481526020019060010190808311612cdf575b50505050509350600092505b8351831015612fb057838381518110612d1457fe5b90602001906020020151601a549092508210612d2c57fe5b60008281526019602052604090819020906060905190810160409081528254600160a060020a0390811683526001840154166020830152600290920154918101918252915051600010612d7b57fe5b8051600160a060020a03161515612d8e57fe5b8060200151600160a060020a03161515612da457fe5b6000808251600160a060020a0316600160a060020a031681526020019081526020016000205481604001511115612dda57600080fd5b600160a060020a0386168151600160a060020a031614612ec357600260008251600160a060020a0316600160a060020a03168152602001908152602001600020600087600160a060020a0316600160a060020a031681526020019081526020016000205481604001511115612e4e57600080fd5b612e928160400151600260008451600160a060020a03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff612c5116565b600260008351600160a060020a03908116825260208083019390935260409182016000908120918b16815292529020555b612ef681604001516000808451600160a060020a031681526020810191909152604001600020549063ffffffff612c5116565b6000808351600160a060020a0316600160a060020a0316815260200190815260200160002081905550612f4b81604001516000808052602052600080516020613959833981519152549063ffffffff612ba516565b60008080526020819052600080516020613959833981519152919091558151600160a060020a0316600080516020613939833981519152836040015160405190815260200160405180910390a3612fa983600163ffffffff612ba516565b9250612cff565b505050505050565b6000808284811515612fc657fe5b04949350505050565b612fd761375a565b600080612fe2613850565b601c548510612fed57fe5b600160a060020a0386161515612fff57fe5b601b600086815260200190815260200160002060000180548060200260200160405190810160405280929190818152602001828054801561305f57602002820191906000526020600020905b81548152602001906001019080831161304b575b50505050509350600092505b8351831015612fb05783838151811061308057fe5b90602001906020020151601a54909250821061309857fe5b60008281526019602052604090819020906060905190810160409081528254600160a060020a03908116835260018401541660208301526002909201549181019182529150516000106130e757fe5b8051600160a060020a031615156130fa57fe5b8060200151600160a060020a0316151561311057fe5b6000808052602052600080516020613959833981519152546040820151111561313557fe5b61316881604001516000808451600160a060020a031681526020810191909152604001600020549063ffffffff612ba516565b6000808351600160a060020a0316600160a060020a03168152602001908152602001600020819055506131bd81604001516000808052602052600080516020613959833981519152549063ffffffff612c5116565b6000808052602052600080516020613959833981519152558051600160a060020a03166000600080516020613939833981519152604084015160405190815260200160405180910390a361321883600163ffffffff612ba516565b925061306b565b6000613229613870565b60008061323461375a565b600080601e548a10151561324457fe5b60008a8152601d6020526040902060040154601454909750871061326457fe5b600087815260136020526040908190209060a0905190810160405290816000820160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a0316815260200160018201548152602001600282015481526020016003820180548060200260200160405190810160405280929190818152602001828054801561331257602002820191906000526020600020905b8154815260200190600101908083116132fe575b50505050508152602001600482015481525050955087518660600151511461333957600080fd5b60009450600093505b87518410156134d45787848151811061335757fe5b9060200190602002015160405180591061336e5750595b818152601f19601f830116810160200160405290509250825160001061339357600080fd5b600091505b825182101561346b57885185106133ae57600080fd5b8885815181106133ba57fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000283838151811061341057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061345185600163ffffffff612ba516565b945061346482600163ffffffff612ba516565b9150613398565b8560600151848151811061347b57fe5b90602001906020020151601054909150811061349357fe5b60008a81526020808052604080832084845290915290208380516134bb9291602001906137e3565b506134cd84600163ffffffff612ba516565b9350613342565b885185146134e157600080fd5b50505050505050505050565b6134f561375a565b600080613500613850565b601c54851061350b57fe5b601b600086815260200190815260200160002060000180548060200260200160405190810160405280929190818152602001828054801561356b57602002820191906000526020600020905b815481526020019060010190808311613557575b50505050509350600092505b8351831015612c4a5783838151811061358c57fe5b90602001906020020151601a5490925082106135a457fe5b60008281526019602052604090819020906060905190810160409081528254600160a060020a03908116835260018401541660208301526002909201549181019182529150516000106135f357fe5b8051600160a060020a0316151561360657fe5b8060200151600160a060020a0316151561361c57fe5b61364881604001516000808052602052600080516020613959833981519152549063ffffffff612c5116565b60008080526020526000805160206139598339815191525561369660408201516000808460200151600160a060020a031681526020810191909152604001600020549063ffffffff612ba516565b6000808360200151600160a060020a0316600160a060020a03168152602001908152602001600020819055508060200151600160a060020a03166000600080516020613939833981519152604084015160405190815260200160405180910390a361370883600163ffffffff612ba516565b9250613577565b82805482825590600052602060002090810192821561374a579160200282015b8281111561374a57825182559160200191906001019061372f565b506137569291506138f3565b5090565b60206040519081016040526000815290565b60206040519081016040528061378061375a565b905290565b604080519081016040526000808252602082015290565b60e060405190810160405280600081526020016000600160a060020a0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061382457805160ff191683800117855561374a565b8280016001018555821561374a579182018281111561374a57825182559160200191906001019061372f565b606060405190810160409081526000808352602083018190529082015290565b60a0604051908101604052806000600160a060020a0316815260200160008152602001600081526020016138a261375a565b8152602001600081525090565b606060405190810160405280600081526020016000815260200161378061375a565b6060604051908101604052806000815260200160008152602001600081525090565b610c7391905b8082111561375657600081556001016138f9565b6000808315156139205760009150610e6b565b5082820282848281151561393057fe5b0414612bb457fe00ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5a165627a7a723058200fb0c3cbc8d416f4de6c6e803e18100f4a7e09d3da8bf366c4c066a943f890510029
Swarm Source
bzzr://0fb0c3cbc8d416f4de6c6e803e18100f4a7e09d3da8bf366c4c066a943f89051
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.