Sponsored:   LH-CRYPTO - 200 instruments (BTC, EUR, GOLD, OIL, SHARES). Leverage up to 1:500. OPEN ACCOUNT
Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 9259 txns
Token Tracker: Fysical (FYS)
Misc:
Address Watch: Add To Watch List
Contract Creator: 0x10129fb27202d6bfea3ae2728eb39d76c09ebf09at txn 0x9e9acbee9965ecb4cc13ebddbadc3c2300e95b157fb69355daae118179ec9e13
Token Balance:
 Latest 25 transactions from a total of 9259 transactions

TxHash Age From To Value [TxFee]
0xb49d22ba683f9c0da2fa574f08dfcb72f061a0ef63a9d22213bccf376633ae251 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.003497012
0xb48859b5477902e475f19566e9ebd19a9690f885b0eb9b90c484ea20ec229e2e1 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001490745
0xcf71988a9572c4da94525f65eb5b881fc6a501ec5a770864d8584468445d69401 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001572303
0xbb9ca6e65d4b3777b7c500a8446d7f76396c26669f1dfdb4d9b2f6804fdb98281 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.00222594
0xf10cdc1808906e4dd6350aaee4a615e512e7cdd8373652e94bcaabd4bf0611991 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.002227412
0x64b7b4509147914c714b64fb40662993d2c9051f35f93ffb919e6da70048ee5e1 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.002049024
0x7eace2f2b10e56a505ed95a30fbc7d639ceece638bcbac37b8ab8e69415308c41 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001601743
0x7081f8b97df20142d99d92a49acab6a029c6806675583e2ea3b9d1a6e7a5ca571 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.003675308
0x73d285f72c8f850ad349314fdeb74896448448fd36b43f74503204cff491b5061 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.003746608
0xf4abc5a6160c1b712e2c86664fdf2cd0c2236b0407b1e2bca6f54178a667f9861 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001489273
0x3681ec85a7e518d5ffb1394085959134bd40410ac650b1b79d2855dc62f6bd891 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.00170108
0xcb0e024dbe2d34d0745ed2e30f68ae58089627a9575488d6e53380ea147160001 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.003621074
0x983985250bdb0ce78408de4644701874fab8d671c75287e43b7b61232380daba1 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001489273
0xc211008a56eeecdcaf06984508da6b133004255ff55f7e4f86a643dae20336b81 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.00170108
0x99fbe4879bb51817ec81d55c31c79a2b5f142b35deda3c7521bdbc060fa8560e1 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.003149068
0x0acfaae5d1be50cc9d9d92ee8a00ee52bd6f7cc6e0435a61547f1db037bc84991 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001490745
0x3e5e188d22fd8a98d0df3297cf0ba479d07c5e544898a40f0f90fb5de141a47f1 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001572303
0x4e83f67afb89db4454992757a2218cca69a7695e6c60ced837c9d87f60a301e11 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.002221524
0x3b2c7b649635c81a0bbf8f49a1ed3ab7f715bc51d40f6cf85e5b3fa5aa094ceb1 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001702552
0x933827fcb0dff086db6ef1bb2bc0ea56f6b412ba2076185140455fff5b7c374e1 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001601743
0xc233e53606dc77f96e23d906924bf35ca397ca2a34b2833473b1f9d026d19fa31 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.003675308
0xa242a7d4493fdc874003d44fe8d617bcecddb441cf2285ab7638c42702bdfbe71 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.003621074
0x953ebc9a6c505b2fac58891772a7b1dd20dddc3f361c33ba3aee2f46aa9d27391 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001142801
0xbc9fb27165089c53268e38aca01c99b59d2520d38b0bc5e595a1920d2d7fb4d91 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.00170108
0x26ffc77829e9ce03d7b251d688847a3304207d09452113e62a46e85739b073fb1 day 19 hrs ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.003147596
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: Fysical
Compiler Text: v0.4.19+commit.c4cbbb05
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

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 ABI  
[{"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 Switch To Opcodes View
60606040526000600455600060065560006008556000600a556000600c556000600e55600060105560006012556000601455600060165560006018556000601a556000601c556000601e5534156200005657600080fd5b62000060620005e6565b6200007e633b9aca00806401000000006200390d620004f482021704565b670de0b6b3a7640000146200008f57fe5b670de0b6b3a76400006001819055600160a060020a033316600081815260208190526040808220849055919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91905190815260200160405180910390a360125415620000fa57fe5b6020604051908101604052806000604051805910620001165750595b818152601f19601f8301168101602001604052905090526000805260116020527f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b78151819080516200016d929160200190620005f8565b50506012546200018e9150600164010000000062002ba56200052e82021704565b60128190556001146200019d57fe5b60045415620001a857fe5b60206040519081016040528060606040519081016040908152602d82527f68747470733a2f2f656e2e77696b6970656469612e6f72672f77696b692f4e756020808401919091527f6c6c5f656e6372797074696f6e0000000000000000000000000000000000000091830191909152915260008052600390527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff81518190805162000258929160200190620005f8565b5050600454620002799150600164010000000062002ba56200052e82021704565b60048190556001146200028857fe5b600654156200029357fe5b6001604051805910620002a35750595b90808252806020026020018201604052509050600081600081518110620002c657fe5b60209081029091010152600454620002ee90829064010000000062002bbb6200053e82021704565b60206040519081016040528181526000805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc8151819080516200033c9291602001906200067d565b50506006546200035d9150600164010000000062002ba56200052e82021704565b60068190556001146200036c57fe5b600c54156200037757fe5b602060405190810160405260008082528052600b6020527fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f768151905550600c54620003d290600164010000000062002ba56200052e82021704565b600c819055600114620003e157fe5b60145415620003ec57fe5b60a06040519081016040528033600160a060020a0316815260200160008152602001600081526020016000604051805910620004255750595b81815260209182028101820160405282526000918101829052908052601390527f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c81518154600160a060020a031916600160a060020a03919091161781556020820151816001015560408201518160020155606082015181600301908051620004b39291602001906200067d565b50608082015160049091015550601454620004de90600164010000000062002ba56200052e82021704565b6014819055600114620004ed57fe5b50620006da565b60008083151562000509576000915062000527565b508282028284828115156200051a57fe5b04146200052357fe5b8091505b5092915050565b6000828201838110156200052357fe5b6000806000845160001015620005df57846000815181106200055c57fe5b9060200190602002015192508383106200057557600080fd5b5081905060015b8451811015620005df578481815181106200059357fe5b906020019060200201519250838310620005ac57600080fd5b828210620005b957600080fd5b829150620005d781600164010000000062002ba56200052e82021704565b90506200057c565b5050505050565b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200063b57805160ff19168380011785556200066b565b828001600101855582156200066b579182015b828111156200066b5782518255916020019190600101906200064e565b5062000679929150620006ba565b5090565b8280548282559060005260206000209081019282156200066b57916020028201828111156200066b5782518255916020019190600101906200064e565b620006d791905b80821115620006795760008155600101620006c1565b90565b6139a480620006ea6000396000f30060606040526004361061032b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416628bed3e811461033057806301c0954b1461035557806302d055311461037d57806306fdde03146103905780630828baa21461041a578063095ea7b3146104385780630f732bdc1461046e578063143c28301461048157806318160ddd146104ea5780631880692f146104fd57806320e190a41461051057806322b6fe9e1461052e57806323b872dd1461054157806327d51979146105695780632a61d47b1461057c5780632be6ec1f1461058f578063313ce567146105a257806334116fd8146105cb57806334f99b59146105f95780633656de211461061e5780633befcd631461067a57806344ce97c914610693578063466c3a2b146106ac5780634dfe165c146106bf5780634e006d83146106d55780635044b112146106ee578063573fb624146107015780635d12fc0c14610717578063650619571461058f578063661884631461072a5780636928e1421461074c5780636d8062ee1461076257806370a08231146107885780637773c36e146107a75780637ad669e9146107c35780637b7179fc146107fd5780637e2d0ebc14610813578063820a5b191461082957806387181b101461083f57806389f90872146108825780638e5653d41461091a57806395d89b4114610938578063970afd9b1461094b578063980619a71461095e5780639bad7720146109745780639f96de0f1461098a578063a75c127b1461099d578063a9059cbb146109bb578063b086d5aa146109dd578063b154dea61461058f578063b663dc0a146109f0578063bc28d87814610a03578063bc824a7714610a1b578063c08cc02d14610ab7578063c18d958214610aca578063c798192214610aec578063cbb9d38514610b26578063d206703514610b44578063d6f22e6914610b66578063d73dd62314610b79578063dd62ed3e14610b9b578063e0db1b9114610bc0578063e1f02ffa14610bd6578063ea32c95e1461058f578063f26be2a814610bec578063f3fbad2514610c15578063fab3ebb11461058f578063feadaa1b14610c2e578063feaf087214610c5c575b600080fd5b341561033b57600080fd5b610343610c6f565b60405190815260200160405180910390f35b341561036057600080fd5b610343600160a060020a0360043581169060243516604435610c76565b341561038857600080fd5b610343610d72565b341561039b57600080fd5b6103a3610d78565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156103df5780820151838201526020016103c7565b50505050905090810190601f16801561040c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561042557600080fd5b6103436004803560248101910135610daf565b341561044357600080fd5b61045a600160a060020a0360043516602435610e72565b604051901515815260200160405180910390f35b341561047957600080fd5b610343610ede565b341561048c57600080fd5b610497600435610ee4565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156104d65780820151838201526020016104be565b505050509050019250505060405180910390f35b34156104f557600080fd5b610343610f83565b341561050857600080fd5b610343610f89565b341561051b57600080fd5b6103436004803560248101910135610f8f565b341561053957600080fd5b610343611043565b341561054c57600080fd5b61045a600160a060020a0360043581169060243516604435611049565b341561057457600080fd5b6103436111b7565b341561058757600080fd5b6103436111bd565b341561059a57600080fd5b6103436111c3565b34156105ad57600080fd5b6105b56111c8565b60405160ff909116815260200160405180910390f35b34156105d657600080fd5b6105e16004356111cd565b60405191825260208201526040908101905180910390f35b341561060457600080fd5b61034360043560243560443560643560843560a435611221565b341561062957600080fd5b610634600435611359565b604051968752600160a060020a0390951660208701526040808701949094526060860192909252608085015260a084015260c083019190915260e0909101905180910390f35b341561068557600080fd5b6103a360043560243561141a565b341561069e57600080fd5b6103436004356024356116bc565b34156106b757600080fd5b61034361172f565b34156106ca57600080fd5b610497600435611735565b34156106e057600080fd5b6103436004356024356117d2565b34156106f957600080fd5b610343611845565b341561070c57600080fd5b6105e160043561184b565b341561072257600080fd5b61034361189f565b341561073557600080fd5b61045a600160a060020a03600435166024356118a7565b341561075757600080fd5b6103436004356119a1565b341561076d57600080fd5b610343600480359060248035916044359182019101356119e2565b341561079357600080fd5b610343600160a060020a0360043516611aa9565b34156107b257600080fd5b610343600435602435604435611ac4565b34156107ce57600080fd5b6107d9600435611b57565b604051808260038111156107e957fe5b60ff16815260200191505060405180910390f35b341561080857600080fd5b610343600435611b7e565b341561081e57600080fd5b6103a3600435611bcf565b341561083457600080fd5b610497600435611cae565b341561084a57600080fd5b610855600435611d4b565b604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390f35b341561088d57600080fd5b610898600435611dc6565b6040518086600160a060020a0316600160a060020a0316815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156109025780820151838201526020016108ea565b50505050905001965050505050505060405180910390f35b341561092557600080fd5b6103436004803560248101910135611eda565b341561094357600080fd5b6103a3611f8e565b341561095657600080fd5b610343611fc5565b341561096957600080fd5b610343600435611fd1565b341561097f57600080fd5b610343600435612022565b341561099557600080fd5b610343612063565b34156109a857600080fd5b6103436004803560248101910135612069565b34156109c657600080fd5b61045a600160a060020a03600435166024356120e4565b34156109e857600080fd5b6103436121e4565b34156109fb57600080fd5b6103436121ea565b3415610a0e57600080fd5b610a196004356121f6565b005b3415610a2657600080fd5b610a31600435612304565b6040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a7a578082015183820152602001610a62565b50505050905090810190601f168015610aa75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b3415610ac257600080fd5b610343612416565b3415610ad557600080fd5b61045a600160a060020a036004351660243561241c565b3415610af757600080fd5b610b02600435612459565b60405180848152602001838152602001828152602001935050505060405180910390f35b3415610b3157600080fd5b61034360048035602481019101356124c8565b3415610b4f57600080fd5b610343600160a060020a0360043516602435612550565b3415610b7157600080fd5b6103436125bc565b3415610b8457600080fd5b61045a600160a060020a03600435166024356125c2565b3415610ba657600080fd5b610343600160a060020a0360043581169060243516612666565b3415610bcb57600080fd5b6103a3600435612691565b3415610be157600080fd5b610a19600435612738565b3415610bf757600080fd5b61034360048035906024803591604435918201910135606435612841565b3415610c2057600080fd5b610a1960043560243561299f565b3415610c3957600080fd5b610a19600480359060248035808201929081013591604435908101910135612a32565b3415610c6757600080fd5b610343612b9f565b6016545b90565b600080600160a060020a0385161515610c8e57600080fd5b600160a060020a0384161515610ca357600080fd5b6000839010610cb157600080fd5b50601a54610cc681600163ffffffff612ba516565b601a5560606040519081016040908152600160a060020a038088168352861660208084019190915281830186905260008481526019909152208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905560408201516002909101555090509392505050565b60045490565b60408051908101604052600781527f4679736963616c00000000000000000000000000000000000000000000000000602082015281565b600080610dec84848080602002602001604051908101604052809392919081815260200183836020028082843750506016549350612bbb92505050565b50601854610e0181600163ffffffff612ba516565b601855602060405190810160405280858580806020026020016040519081016040528093929190818152602001838360200280828437505050929093525050506000828152601760205260409020815181908051610e6392916020019061370f565b509050508091505b5092915050565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b600c5490565b610eec61375a565b610ef461376c565b6018548310610f0257600080fd5b6000838152601760209081526040918290209151908101604052908160008201805480602002602001604051908101604052809291908181526020018280548015610f6c57602002820191906000526020600020905b815481526020019060010190808311610f58575b505050505081525050905080600001519392505050565b60015490565b60125490565b600080610fcc8484808060200260200160405190810160405280939291908181526020018383602002808284375050601a549350612bbb92505050565b50601c54610fe181600163ffffffff612ba516565b601c55602060405190810160405280858580806020026020016040519081016040528093929190818152602001838360200280828437505050929093525050506000828152601b60205260409020815181908051610e6392916020019061370f565b60185490565b6000600160a060020a038316151561106057600080fd5b600160a060020a03841660009081526020819052604090205482111561108557600080fd5b600160a060020a03808516600090815260026020908152604080832033909416835292905220548211156110b857600080fd5b600160a060020a0384166000908152602081905260409020546110e1908363ffffffff612c5116565b600160a060020a038086166000908152602081905260408082209390935590851681522054611116908363ffffffff612ba516565b600160a060020a038085166000908152602081815260408083209490945587831682526002815283822033909316825291909152205461115c908363ffffffff612c5116565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516916000805160206139398339815191529085905190815260200160405180910390a35060019392505050565b601c5490565b60145490565b600081565b600981565b6000806111d8613785565b600e5484106111e657600080fd5b6000848152600d6020526040908190209080519081016040528154815260019091015460208201529050805181602001519250925050915091565b6000806012548710151561123457600080fd5b600c54861061124257600080fd5b601454851061125057600080fd5b601854841061125e57600080fd5b601c54831061126c57600080fd5b6112763384612c63565b50601e5461128b81600163ffffffff612ba516565b601e5560e06040519081016040528089815260200133600160a060020a0316815260200188815260200187815260200186815260200185815260200184815250601d600083815260200190815260200160002060008201518155602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201516006909101555090509695505050505050565b600080600080600080600061136c61379c565b601e54891061137a57600080fd5b6000898152601d6020526040908190209060e090519081016040908152825482526001830154600160a060020a031660208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460c08201529050805181602001518260400151836060015184608001518560a001518660c00151959f949e50929c50909a509850965090945092505050565b61142261375a565b61142a61375a565b6000806000601e548710151561143f57600080fd5b6000878152601f602052604090205460ff16600381111561145c57fe5b60031461146857600080fd5b601054861061147657600080fd5b6000878152601d6020908152604080832060040154835260138252918290206003018054909290918281020190519081016040528092919081815260200182805480156114e257602002820191906000526020600020905b8154815260200190600101908083116114ce575b5050505050935083516000106114f757600080fd5b835160011415611528578360008151811061150e57fe5b90602001906020020151861461152357600080fd5b6115f3565b6000925061153f600185519063ffffffff612c5116565b91506115626002611556858563ffffffff612ba516565b9063ffffffff612fb816565b90505b83818151811061157157fe5b9060200190602002015186146115f3578183111561158e57600080fd5b8584828151811061159b57fe5b9060200190602002015110156115c3576115bc81600163ffffffff612ba516565b92506115d7565b6115d481600163ffffffff612c5116565b91505b6115ec6002611556858563ffffffff612ba516565b9050611565565b6020600088815260200190815260200160002060008781526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116ab5780601f10611680576101008083540402835291602001916116ab565b820191906000526020600020905b81548152906001019060200180831161168e57829003601f168201915b505050505094505050505092915050565b600080600654841015156116cf57600080fd5b600e5483106116dd57600080fd5b506016546116f281600163ffffffff612ba516565b6016556040805190810160409081528582526020808301869052600084815260159091522081518155602082015160019091015550905092915050565b60085490565b61173d61375a565b61174561376c565b601c54831061175357600080fd5b6000838152601b60209081526040918290209151908101604052908160008201805480602002602001604051908101604052809291908181526020018280548015610f6c5760200282019190600052602060002090815481526020019060010190808311610f5857505050505081525050905080600001519392505050565b600080600a54841015156117e557600080fd5b600a5483106117f357600080fd5b50600e5461180881600163ffffffff612ba516565b600e5560408051908101604090815285825260208083018690526000848152600d9091522081518155602082015160019091015550905092915050565b600a5490565b600080611856613785565b601654841061186457600080fd5b600084815260156020526040908190209080519081016040528154815260019091015460208201529050805181602001519250925050915091565b633b9aca0081565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120548083111561190457600160a060020a03338116600090815260026020908152604080832093881683529290529081205561193b565b611914818463ffffffff612c5116565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b60006119ab61375a565b60085483106119b957600080fd5b600083815260076020908152604091829020915190810160405290548152905080519392505050565b600080600854861015156119f557600080fd5b6000859010611a0357600080fd5b50600a54611a1881600163ffffffff612ba516565b600a5560606040519081016040528087815260200186815260200185858080601f01602080910402602001604051908101604052818152929190602084018383808284375050509290935250505060008281526009602052604090208151815560208201518160010155604082015181600201908051611a9c9291602001906137e3565b5091979650505050505050565b600160a060020a031660009081526020819052604090205490565b60008060065485101515611ad757600080fd5b600c548410611ae557600080fd5b6014548310611af357600080fd5b50601054611b0881600163ffffffff612ba516565b6010556060604051908101604090815286825260208083018790528183018690526000848152600f90915220815181556020820151816001015560408201516002909101555090509392505050565b601e546000908210611b6857600080fd5b506000908152601f602052604090205460ff1690565b60008060065483101515611b9157600080fd5b50600c54611ba681600163ffffffff612ba516565b600c55602060405190810160409081528482526000838152600b60205220815190555092915050565b611bd761375a565b611bdf61376c565b6004548310611bed57600080fd5b60008381526003602090815260409182902091519081016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f6c5780601f10611c7657610100808354040283529160200191610f6c565b820191906000526020600020905b815481529060010190602001808311611c8457505050919092525091925082915050519392505050565b611cb661375a565b611cbe61376c565b6006548310611ccc57600080fd5b6000838152600560209081526040918290209151908101604052908160008201805480602002602001604051908101604052809291908181526020018280548015610f6c5760200282019190600052602060002090815481526020019060010190808311610f5857505050505081525050905080600001519392505050565b6000806000611d58613850565b601a548510611d6657600080fd5b60008581526019602052604090819020906060905190810160409081528254600160a060020a0390811683526001840154166020830152600290920154918101919091529050805181602001518260400151935093509350509193909250565b6000806000611dd361375a565b6000611ddd613870565b6014548710611deb57600080fd5b600087815260136020526040908190209060a0905190810160405290816000820160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182015481526020016002820154815260200160038201805480602002602001604051908101604052809291908181526020018280548015611e9957602002820191906000526020600020905b815481526020019060010190808311611e85575b50505050508152602001600482015481525050905080600001518160200151826040015183606001518460800151939b929a50909850965090945092505050565b600080611f1784848080602002602001604051908101604052809392919081815260200183836020028082843750506004549350612bbb92505050565b50600654611f2c81600163ffffffff612ba516565b600655602060405190810160405280858580806020026020016040519081016040528093929190818152602001838360200280828437505050929093525050506000828152600560205260409020815181908051610e6392916020019061370f565b60408051908101604052600381527f4659530000000000000000000000000000000000000000000000000000000000602082015281565b677fffffffffffffff81565b60008060065483101515611fe457600080fd5b50600854611ff981600163ffffffff612ba516565b600855602060405190810160409081528482526000838152600760205220815190555092915050565b600061202c61375a565b600c54831061203a57600080fd5b6000838152600b6020908152604091829020915190810160405290548152905080519392505050565b60105490565b60125460009061208081600163ffffffff612ba516565b60125560206040519081016040528085858080601f0160208091040260200160405190810160405281815292919060208401838380828437505050929093525050506000828152601160205260409020815181908051610e639291602001906137e3565b6000600160a060020a03831615156120fb57600080fd5b600160a060020a03331660009081526020819052604090205482111561212057600080fd5b600160a060020a033316600090815260208190526040902054612149908363ffffffff612c5116565b600160a060020a03338116600090815260208190526040808220939093559085168152205461217e908363ffffffff612ba516565b60008085600160a060020a0316600160a060020a031681526020019081526020016000208190555082600160a060020a031633600160a060020a03166000805160206139398339815191528460405190815260200160405180910390a350600192915050565b60065490565b670de0b6b3a764000081565b6121fe61379c565b601e54821061220c57600080fd5b6000828152601f602052604090205460ff16600381111561222957fe5b1561223357600080fd5b6000828152601d6020526040908190209060e090519081016040908152825482526001830154600160a060020a0316602083015260028301549082015260038201546060820152600482015460808201908152600583015460a083015260069092015460c0820152915060139060009051815260208101919091526040016000205433600160a060020a039081169116146122cd57600080fd5b6122df81602001518260c00151612fcf565b6000828152601f6020526040902080546002919060ff19166001835b02179055505050565b60008061230f61375a565b6123176138af565b600a54851061232557600080fd5b60008581526009602052604090819020906060905190810160405290816000820154815260200160018201548152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123ee5780601f106123c3576101008083540402835291602001916123ee565b820191906000526020600020905b8154815290600101906020018083116123d157829003601f168201915b5050505050815250509050806000015181602001518260400151919790965090945092505050565b601e5490565b601054600090821061242d57600080fd5b50600160a060020a03919091166000908152602160209081526040808320938352929052205460ff1690565b60008060006124666138d1565b601054851061247457600080fd5b6000858152600f602052604090819020906060905190810160409081528254825260018301546020830152600290920154918101919091529050805181602001518260400151935093509350509193909250565b6000808281106124d757600080fd5b506004546124ec81600163ffffffff612ba516565b60045560206040519081016040528085858080601f0160208091040260200160405190810160405281815292919060208401838380828437505050929093525050506000828152600360205260409020815181908051610e639291602001906137e3565b601054600090821061256157600080fd5b600160a060020a038316600090815260216020908152604080832085845290915290205460ff16151561259357600080fd5b50600160a060020a03919091166000908152602260209081526040808320938352929052205490565b600e5490565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120546125fa908363ffffffff612ba516565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b61269961375a565b6126a161376c565b60125483106126af57600080fd5b60008381526011602090815260409182902091519081016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f6c5780601f10611c7657610100808354040283529160200191610f6c565b61274061379c565b601e54821061274e57600080fd5b6000828152601f602052604090205460ff16600381111561276b57fe5b1561277557600080fd5b6000828152601d6020526040908190209060e090519081016040908152825482526001830154600160a060020a0316602083019081526002840154918301919091526003830154606083015260048301546080830152600583015460a083015260069092015460c0820152915051600160a060020a031633600160a060020a031614151561280257600080fd5b805143101561281057600080fd5b61282281602001518260c00151612fcf565b6000828152601f6020526040902080546001919060ff191682806122fb565b6000806012548710151561285457600080fd5b600c54861061286257600080fd5b61289c85858080602002602001604051908101604052809392919081815260200183836020028082843750506010549350612bbb92505050565b60145483106128aa57600080fd5b506014546128bf81600163ffffffff612ba516565b60145560a06040519081016040528033600160a060020a03168152602001888152602001878152602001868680806020026020016040519081016040528093929190818152602001838360200280828437505050928452505050602090810185905260008381526013909152604090208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015181600101556040820151816002015560608201518160030190805161298792916020019061370f565b50608082015160049091015550905095945050505050565b60105482106129ad57600080fd5b600e5481106129bb57600080fd5b600160a060020a033316600090815260216020908152604080832085845290915290205460ff16156129ec57600080fd5b600160a060020a0333166000818152602260209081526040808320868452825280832094909455918152602182528281209381529290529020805460ff19166001179055565b612a3a61379c565b601e548610612a4857600080fd5b6000868152601f602052604090205460ff166003811115612a6557fe5b15612a6f57600080fd5b6000868152601d6020526040908190209060e090519081016040908152825482526001830154600160a060020a0316602083015260028301549082015260038201546060820152600482015460808201908152600583015460a083015260069092015460c0820152915060139060009051815260208101919091526040016000205433600160a060020a03908116911614612b0957600080fd5b612b728686868080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050508585808060200260200160405190810160405280939291908181526020018383602002808284375061321f945050505050565b612b7f8160c001516134ed565b50505060009283525050601f60205260409020805460ff19166003179055565b601a5490565b600082820183811015612bb457fe5b9392505050565b6000806000845160001015612c4a5784600081518110612bd757fe5b906020019060200201519250838310612bef57600080fd5b5081905060015b8451811015612c4a57848181518110612c0b57fe5b906020019060200201519250838310612c2357600080fd5b828210612c2f57600080fd5b829150612c4381600163ffffffff612ba516565b9050612bf6565b5050505050565b600082821115612c5d57fe5b50900390565b612c6b61375a565b600080612c76613850565b601c548510612c8157fe5b600160a060020a0386161515612c9357fe5b601b6000868152602001908152602001600020600001805480602002602001604051908101604052809291908181526020018280548015612cf357602002820191906000526020600020905b815481526020019060010190808311612cdf575b50505050509350600092505b8351831015612fb057838381518110612d1457fe5b90602001906020020151601a549092508210612d2c57fe5b60008281526019602052604090819020906060905190810160409081528254600160a060020a0390811683526001840154166020830152600290920154918101918252915051600010612d7b57fe5b8051600160a060020a03161515612d8e57fe5b8060200151600160a060020a03161515612da457fe5b6000808251600160a060020a0316600160a060020a031681526020019081526020016000205481604001511115612dda57600080fd5b600160a060020a0386168151600160a060020a031614612ec357600260008251600160a060020a0316600160a060020a03168152602001908152602001600020600087600160a060020a0316600160a060020a031681526020019081526020016000205481604001511115612e4e57600080fd5b612e928160400151600260008451600160a060020a03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff612c5116565b600260008351600160a060020a03908116825260208083019390935260409182016000908120918b16815292529020555b612ef681604001516000808451600160a060020a031681526020810191909152604001600020549063ffffffff612c5116565b6000808351600160a060020a0316600160a060020a0316815260200190815260200160002081905550612f4b81604001516000808052602052600080516020613959833981519152549063ffffffff612ba516565b60008080526020819052600080516020613959833981519152919091558151600160a060020a0316600080516020613939833981519152836040015160405190815260200160405180910390a3612fa983600163ffffffff612ba516565b9250612cff565b505050505050565b6000808284811515612fc657fe5b04949350505050565b612fd761375a565b600080612fe2613850565b601c548510612fed57fe5b600160a060020a0386161515612fff57fe5b601b600086815260200190815260200160002060000180548060200260200160405190810160405280929190818152602001828054801561305f57602002820191906000526020600020905b81548152602001906001019080831161304b575b50505050509350600092505b8351831015612fb05783838151811061308057fe5b90602001906020020151601a54909250821061309857fe5b60008281526019602052604090819020906060905190810160409081528254600160a060020a03908116835260018401541660208301526002909201549181019182529150516000106130e757fe5b8051600160a060020a031615156130fa57fe5b8060200151600160a060020a0316151561311057fe5b6000808052602052600080516020613959833981519152546040820151111561313557fe5b61316881604001516000808451600160a060020a031681526020810191909152604001600020549063ffffffff612ba516565b6000808351600160a060020a0316600160a060020a03168152602001908152602001600020819055506131bd81604001516000808052602052600080516020613959833981519152549063ffffffff612c5116565b6000808052602052600080516020613959833981519152558051600160a060020a03166000600080516020613939833981519152604084015160405190815260200160405180910390a361321883600163ffffffff612ba516565b925061306b565b6000613229613870565b60008061323461375a565b600080601e548a10151561324457fe5b60008a8152601d6020526040902060040154601454909750871061326457fe5b600087815260136020526040908190209060a0905190810160405290816000820160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a0316815260200160018201548152602001600282015481526020016003820180548060200260200160405190810160405280929190818152602001828054801561331257602002820191906000526020600020905b8154815260200190600101908083116132fe575b50505050508152602001600482015481525050955087518660600151511461333957600080fd5b60009450600093505b87518410156134d45787848151811061335757fe5b9060200190602002015160405180591061336e5750595b818152601f19601f830116810160200160405290509250825160001061339357600080fd5b600091505b825182101561346b57885185106133ae57600080fd5b8885815181106133ba57fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000283838151811061341057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061345185600163ffffffff612ba516565b945061346482600163ffffffff612ba516565b9150613398565b8560600151848151811061347b57fe5b90602001906020020151601054909150811061349357fe5b60008a81526020808052604080832084845290915290208380516134bb9291602001906137e3565b506134cd84600163ffffffff612ba516565b9350613342565b885185146134e157600080fd5b50505050505050505050565b6134f561375a565b600080613500613850565b601c54851061350b57fe5b601b600086815260200190815260200160002060000180548060200260200160405190810160405280929190818152602001828054801561356b57602002820191906000526020600020905b815481526020019060010190808311613557575b50505050509350600092505b8351831015612c4a5783838151811061358c57fe5b90602001906020020151601a5490925082106135a457fe5b60008281526019602052604090819020906060905190810160409081528254600160a060020a03908116835260018401541660208301526002909201549181019182529150516000106135f357fe5b8051600160a060020a0316151561360657fe5b8060200151600160a060020a0316151561361c57fe5b61364881604001516000808052602052600080516020613959833981519152549063ffffffff612c5116565b60008080526020526000805160206139598339815191525561369660408201516000808460200151600160a060020a031681526020810191909152604001600020549063ffffffff612ba516565b6000808360200151600160a060020a0316600160a060020a03168152602001908152602001600020819055508060200151600160a060020a03166000600080516020613939833981519152604084015160405190815260200160405180910390a361370883600163ffffffff612ba516565b9250613577565b82805482825590600052602060002090810192821561374a579160200282015b8281111561374a57825182559160200191906001019061372f565b506137569291506138f3565b5090565b60206040519081016040526000815290565b60206040519081016040528061378061375a565b905290565b604080519081016040526000808252602082015290565b60e060405190810160405280600081526020016000600160a060020a0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061382457805160ff191683800117855561374a565b8280016001018555821561374a579182018281111561374a57825182559160200191906001019061372f565b606060405190810160409081526000808352602083018190529082015290565b60a0604051908101604052806000600160a060020a0316815260200160008152602001600081526020016138a261375a565b8152602001600081525090565b606060405190810160405280600081526020016000815260200161378061375a565b6060604051908101604052806000815260200160008152602001600081525090565b610c7391905b8082111561375657600081556001016138f9565b6000808315156139205760009150610e6b565b5082820282848281151561393057fe5b0414612bb457fe00ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5a165627a7a723058200fb0c3cbc8d416f4de6c6e803e18100f4a7e09d3da8bf366c4c066a943f890510029

   Swarm Source:
bzzr://0fb0c3cbc8d416f4de6c6e803e18100f4a7e09d3da8bf366c4c066a943f89051

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.