Latest 25 transactions from a total of 2081 transactions

TxHash Age From To Value [TxFee]
0x2acb194ddc3bdfba39abe7fd5dac1d412277c3b00e3d134a51b9d611d5e57f084 days 17 hrs ago0xa9dcab43c4ef178c8d67f67e9c2fe722abc9de1b  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000047407
0x367a7416e832fd7820c76a33ad87c88e43536f0c129f04614d675a99c3f20b5c4 days 17 hrs ago0xa9dcab43c4ef178c8d67f67e9c2fe722abc9de1b  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000017885
0xe03ebee38ea87d18fb0ad2f855d2c2ea98afad2480e96188135602c8e67bf31c4 days 18 hrs ago0xa9dcab43c4ef178c8d67f67e9c2fe722abc9de1b  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000047407
0x1365d5e91bfd79eed53c110a90c8a17c71c24d950095bfdc8758d1aa9a3b9caf12 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0x4ff7e1a68cb76b6e68954b6ba56f6d7cc32588b28a4de60299351ad59173489612 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0xae364bee6c8f2520462ec0bb10babe2f4e6cd4430ba8431354e0afef6a09239712 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0x5d4e6b08aa832d0763768bbbd8c53ed5c1f4ab795dcc3e3ae9238da4d02ec8ab12 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051134
0x4dd5808adb265d9eb65d6730bf045b72fb11d4d3209977f48e81617b8f8b43dc12 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0xb88951fa05c2fbfb482fdba115b767109886f05fb027243987ffc45cbf122cd312 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0x0289ef775136389389c139ee90176d88f406e8158df82ab78d3ce57a9f1f120012 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0xa8406e04c2a12aaff9149f6f44c42746b896bb28cd0f8fe01e6656139e6f7c2812 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0xc4a2276b2f03ca5b0c302a9223522e98b4fc4dd3580cc65e9a4d054f505cc65712 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0x5308707af97aed66f7334d5a73946657256f038126b89da9570949c3c773cb8512 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0xcc9f9b0ee9a0b44c1ce51766bf7bb965029120a3c9c66bc846dbc9ab5bbbcf1112 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0x670ef9458df479ab9924adc5326b0b4be1d211e3d8cee21969712bebde0c369e12 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0xe21082d7c0815007d361bf5c8a6154208898f388bd3eef9cb6818501cc3139df12 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0xb296cb925dc97dc8f77cc44f1e8d24ca676ab6cc600cf9d3e2ea2e47ea98179b12 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0x479c13cab4a9e0a427954b71adde4ff4e3508d223b8f320c552664f1d2845f9312 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0x3de1e5bd8ba2dc93234fe982e0e62d518ef61820398b1a8b16a050e68054305912 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0x124951887aca1c0dd9a12449c9ceea6f0d7187f399b6e4ba75bb4801634bbd5812 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0x1aab91cf5b05bc6dfd1af083b312083062218948611478024c8077c35c6e33a212 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0x69718b57382768c6d263771f00b61c0972036a4d2ad9791b8ac7d733f58bc6d012 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0x9a74ff3165eac961a83f41bd850c2ee456b43c866a9598abb8cd4db67977be2d12 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0x3cf233aab0580429e709010299fd1fdc633ebdb3a6316aee398ecfc1871ff4ad12 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000051198
0x3dd34bb0e8ed8006db7e6db1c15a095cfdc5c2131c47b550ba4a000a257e515612 days 17 hrs ago0xf51ee496342b485e6006aeaf85fa9d9e24785c05  IN   0x5d461018b698afd109ba6339035f9ad26066e7240 Ether0.000059673
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0x1365d5e91bfd79eed53c110a90c8a17c71c24d950095bfdc8758d1aa9a3b9caf457272412 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x1365d5e91bfd79eed53c110a90c8a17c71c24d950095bfdc8758d1aa9a3b9caf457272412 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x1365d5e91bfd79eed53c110a90c8a17c71c24d950095bfdc8758d1aa9a3b9caf457272412 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x1365d5e91bfd79eed53c110a90c8a17c71c24d950095bfdc8758d1aa9a3b9caf457272412 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x1365d5e91bfd79eed53c110a90c8a17c71c24d950095bfdc8758d1aa9a3b9caf457272412 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x4ff7e1a68cb76b6e68954b6ba56f6d7cc32588b28a4de60299351ad591734896457272412 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x4ff7e1a68cb76b6e68954b6ba56f6d7cc32588b28a4de60299351ad591734896457272412 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x4ff7e1a68cb76b6e68954b6ba56f6d7cc32588b28a4de60299351ad591734896457272412 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x4ff7e1a68cb76b6e68954b6ba56f6d7cc32588b28a4de60299351ad591734896457272412 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x4ff7e1a68cb76b6e68954b6ba56f6d7cc32588b28a4de60299351ad591734896457272412 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0xae364bee6c8f2520462ec0bb10babe2f4e6cd4430ba8431354e0afef6a092397457272412 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0xae364bee6c8f2520462ec0bb10babe2f4e6cd4430ba8431354e0afef6a092397457272412 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0xae364bee6c8f2520462ec0bb10babe2f4e6cd4430ba8431354e0afef6a092397457272412 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0xae364bee6c8f2520462ec0bb10babe2f4e6cd4430ba8431354e0afef6a092397457272412 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0xae364bee6c8f2520462ec0bb10babe2f4e6cd4430ba8431354e0afef6a092397457272412 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x5d4e6b08aa832d0763768bbbd8c53ed5c1f4ab795dcc3e3ae9238da4d02ec8ab457272312 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x5d4e6b08aa832d0763768bbbd8c53ed5c1f4ab795dcc3e3ae9238da4d02ec8ab457272312 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x5d4e6b08aa832d0763768bbbd8c53ed5c1f4ab795dcc3e3ae9238da4d02ec8ab457272312 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x5d4e6b08aa832d0763768bbbd8c53ed5c1f4ab795dcc3e3ae9238da4d02ec8ab457272312 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x5d4e6b08aa832d0763768bbbd8c53ed5c1f4ab795dcc3e3ae9238da4d02ec8ab457272312 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x4dd5808adb265d9eb65d6730bf045b72fb11d4d3209977f48e81617b8f8b43dc457272312 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x4dd5808adb265d9eb65d6730bf045b72fb11d4d3209977f48e81617b8f8b43dc457272312 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x4dd5808adb265d9eb65d6730bf045b72fb11d4d3209977f48e81617b8f8b43dc457272312 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x4dd5808adb265d9eb65d6730bf045b72fb11d4d3209977f48e81617b8f8b43dc457272312 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
0x4dd5808adb265d9eb65d6730bf045b72fb11d4d3209977f48e81617b8f8b43dc457272312 days 17 hrs ago0x5d461018b698afd109ba6339035f9ad26066e7240x72860be2a7941bc42d3eed66085ff587ac9de5a60 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: AuctionHouseBiddingComponent
Compiler Text: v0.4.24+commit.e67f0147
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.23;

// imported node_modules/openzeppelin-solidity/contracts/ownership/Secondary.sol
/**
 * @title Secondary
 * @dev A Secondary contract can only be used by its primary account (the one that created it)
 */
contract Secondary {
  address private _primary;
  event PrimaryTransferred(
    address recipient
  );
  /**
   * @dev Sets the primary account to the one that is creating the Secondary contract.
   */
  constructor() internal {
    _primary = msg.sender;
    emit PrimaryTransferred(_primary);
  }
  /**
   * @dev Reverts if called from any account other than the primary.
   */
  modifier onlyPrimary() {
    require(msg.sender == _primary);
    _;
  }
  /**
   * @return the address of the primary.
   */
  function primary() public view returns (address) {
    return _primary;
  }
  /**
   * @dev Transfers contract to a new primary.
   * @param recipient The address of new primary. 
   */
  function transferPrimary(address recipient) public onlyPrimary {
    require(recipient != address(0));
    _primary = recipient;
    emit PrimaryTransferred(_primary);
  }
}

// imported contracts/proposals/OCP-IP-1/IBlindBidRegistry.sol
// imported contracts/proposals/OCP-IP-1/IBidRegistry.sol
// implementation from https://github.com/open-city-protocol/OCP-IPs/blob/jeichel/ocp-ip-1/OCP-IPs/ocp-ip-1.md
contract IBidRegistry {
  enum AuctionStatus {
    Undetermined,
    Lost,
    Won
  }
  enum BidState {
    Created,
    Submitted,
    Lost,
    Won,
    Refunded,
    Allocated,
    Redeemed
  }
  event BidCreated(
    bytes32 indexed hash,
    address creator,
    uint256 indexed auction,
    address indexed bidder,
    bytes32 schema,
    bytes32 licenseTerms,
    uint256 durationSec,
    uint256 bidPrice,
    uint256 updatedAtUtcSec
  );
  event BidAuctionStatusChange(bytes32 indexed hash, uint8 indexed auctionStatus, uint256 updatedAtUtcSec);
  event BidStateChange(bytes32 indexed hash, uint8 indexed bidState, uint256 updatedAtUtcSec);
  event BidClearingPriceChange(bytes32 indexed hash, uint256 clearingPrice, uint256 updatedAtUtcSec);
  function hashBid(
    address _creator,
    uint256 _auction,
    address _bidder,
    bytes32 _schema,
    bytes32 _licenseTerms,
    uint256 _durationSec,
    uint256 _bidPrice
  ) public constant returns(bytes32);
  function verifyStoredData(bytes32 hash) public view returns(bool);
  function creator(bytes32 hash) public view returns(address);
  function auction(bytes32 hash) public view returns(uint256);
  function bidder(bytes32 hash) public view returns(address);
  function schema(bytes32 hash) public view returns(bytes32);
  function licenseTerms(bytes32 hash) public view returns(bytes32);
  function durationSec(bytes32 hash) public view returns(uint256);
  function bidPrice(bytes32 hash) public view returns(uint256);
  function clearingPrice(bytes32 hash) public view returns(uint256);
  function auctionStatus(bytes32 hash) public view returns(uint8);
  function bidState(bytes32 hash) public view returns(uint8);
  function allocationFee(bytes32 hash) public view returns(uint256);
  function createBid(
    uint256 _auction,
    address _bidder,
    bytes32 _schema,
    bytes32 _licenseTerms,
    uint256 _durationSec,
    uint256 _bidPrice
  ) public;
  function setAllocationFee(bytes32 hash, uint256 fee) public;
  function setAuctionStatus(bytes32 hash, uint8 _auctionStatus) public;
  function setBidState(bytes32 hash, uint8 _bidState) public;
  function setClearingPrice(bytes32 hash, uint256 _clearingPrice) public;
}

// implementation from https://github.com/open-city-protocol/OCP-IPs/blob/jeichel/ocp-ip-1/OCP-IPs/ocp-ip-1.md
contract IBlindBidRegistry is IBidRegistry {
  event BlindBidCreated(
    bytes32 indexed hash,
    address creator,
    uint256 indexed auction,
    uint256 updatedAtUtcSec
  );
  event BlindBidRevealed(
    bytes32 indexed hash,
    address creator,
    uint256 indexed auction,
    address indexed bidder,
    bytes32 schema,
    bytes32 licenseTerms,
    uint256 durationSec,
    uint256 bidPrice,
    uint256 updatedAtUtcSec
  );
  enum BlindBidState {
    // must match IBidRegistry.BidState
    Created,
    Submitted,
    Lost,
    Won,
    Refunded,
    Allocated,
    Redeemed,
    // new states
    Revealed
  }
  function createBid(bytes32 hash, uint256 _auction) public;
  function revealBid(
    bytes32 hash,
    uint256 _auction,
    address _bidder,
    bytes32 _schema,
    bytes32 _licenseTerms,
    uint256 _durationSec,
    uint256 _bidPrice
  ) public;
}

// imported contracts/proposals/OCP-IP-4/Proxiable.sol
// imported contracts/access/roles/ProxyManagerRole.sol
// imported node_modules/openzeppelin-solidity/contracts/access/Roles.sol
/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
  struct Role {
    mapping (address => bool) bearer;
  }
  /**
   * @dev give an account access to this role
   */
  function add(Role storage role, address account) internal {
    require(account != address(0));
    require(!has(role, account));
    role.bearer[account] = true;
  }
  /**
   * @dev remove an account's access to this role
   */
  function remove(Role storage role, address account) internal {
    require(account != address(0));
    require(has(role, account));
    role.bearer[account] = false;
  }
  /**
   * @dev check if an account has this role
   * @return bool
   */
  function has(Role storage role, address account)
    internal
    view
    returns (bool)
  {
    require(account != address(0));
    return role.bearer[account];
  }
}

contract ProxyManagerRole {
  using Roles for Roles.Role;
  event ProxyManagerAdded(address indexed account);
  event ProxyManagerRemoved(address indexed account);
  Roles.Role private proxyManagers;
  constructor() public {
    proxyManagers.add(msg.sender);
  }
  modifier onlyProxyManager() {
    require(isProxyManager(msg.sender));
    _;
  }
  function isProxyManager(address account) public view returns (bool) {
    return proxyManagers.has(account);
  }
  function addProxyManager(address account) public onlyProxyManager {
    proxyManagers.add(account);
    emit ProxyManagerAdded(account);
  }
  function renounceProxyManager() public {
    proxyManagers.remove(msg.sender);
  }
  function _removeProxyManager(address account) internal {
    proxyManagers.remove(account);
    emit ProxyManagerRemoved(account);
  }
}

// implementation from https://github.com/open-city-protocol/OCP-IPs/blob/master/OCP-IPs/ocp-ip-4.md
contract Proxiable is ProxyManagerRole {
  mapping(address => bool) private _globalProxies; // proxy -> valid
  mapping(address => mapping(address => bool)) private _senderProxies; // sender -> proxy -> valid
  event ProxyAdded(address indexed proxy, uint256 updatedAtUtcSec);
  event ProxyRemoved(address indexed proxy, uint256 updatedAtUtcSec);
  event ProxyForSenderAdded(address indexed proxy, address indexed sender, uint256 updatedAtUtcSec);
  event ProxyForSenderRemoved(address indexed proxy, address indexed sender, uint256 updatedAtUtcSec);
  modifier proxyOrSender(address claimedSender) {
    require(isProxyOrSender(claimedSender));
    _;
  }
  function isProxyOrSender(address claimedSender) public view returns (bool) {
    return msg.sender == claimedSender ||
    _globalProxies[msg.sender] ||
    _senderProxies[claimedSender][msg.sender];
  }
  function isProxy(address proxy) public view returns (bool) {
    return _globalProxies[proxy];
  }
  function isProxyForSender(address proxy, address sender) public view returns (bool) {
    return _senderProxies[sender][proxy];
  }
  function addProxy(address proxy) public onlyProxyManager {
    require(!_globalProxies[proxy]);
    _globalProxies[proxy] = true;
    emit ProxyAdded(proxy, now); // solhint-disable-line
  }
  function removeProxy(address proxy) public onlyProxyManager {
    require(_globalProxies[proxy]);
    delete _globalProxies[proxy];
    emit ProxyRemoved(proxy, now); // solhint-disable-line
  }
  function addProxyForSender(address proxy, address sender) public proxyOrSender(sender) {
    require(!_senderProxies[sender][proxy]);
    _senderProxies[sender][proxy] = true;
    emit ProxyForSenderAdded(proxy, sender, now); // solhint-disable-line
  }
  function removeProxyForSender(address proxy, address sender) public proxyOrSender(sender) {
    require(_senderProxies[sender][proxy]);
    delete _senderProxies[sender][proxy];
    emit ProxyForSenderRemoved(proxy, sender, now); // solhint-disable-line
  }
}

// imported contracts/proposals/OCP-IP-5/IAuctionHouseBiddingComponent.sol
contract IAuctionHouseBiddingComponent {
  event BidRegistered(address registeree, bytes32 bidHash, uint256 updatedAtUtcSec);
  function transferPrimary(address recipient) public;
  function bidRegistry() public view returns(address);
  function licenseNFT() public view returns(address);
  function bidDeposit(bytes32 bidHash) public view returns(uint256);
  function submissionOpen(uint256 auctionId) public view returns(bool);
  function revealOpen(uint256 auctionId) public view returns(bool);
  function allocationOpen(uint256 auctionId) public view returns(bool);
  function setBidRegistry(address registry) public;
  function setLicenseNFT(address licenseNFTContract) public;
  function setSubmissionOpen(uint256 auctionId) public;
  function setSubmissionClosed(uint256 auctionId) public;
  function payBid(bytes32 bidHash, uint256 value) public;
  function submitBid(address registeree, bytes32 bidHash) public;
  function setRevealOpen(uint256 auctionId) public;
  function setRevealClosed(uint256 auctionId) public;
  function revealBid(bytes32 bidHash) public;
  function setAllocationOpen(uint256 auctionId) public;
  function setAllocationClosed(uint256 auctionId) public;
  function allocateBid(bytes32 bidHash, uint clearingPrice) public;
  function doNotAllocateBid(bytes32 bidHash) public;
  function payBidAllocationFee(bytes32 bidHash, uint256 fee) public;
  function calcRefund(bytes32 bidHash) public view returns(uint256);
  function payRefund(bytes32 bidHash, uint256 refund) public;
  function issueLicenseNFT(bytes32 bidHash) public;
}

// imported contracts/proposals/OCP-IP-7/ILicenseNFT.sol
// imported node_modules/openzeppelin-solidity/contracts/token/ERC721/ERC721MetadataMintable.sol
// imported node_modules/openzeppelin-solidity/contracts/token/ERC721/ERC721Metadata.sol
// imported node_modules/openzeppelin-solidity/contracts/token/ERC721/ERC721.sol
// imported node_modules/openzeppelin-solidity/contracts/token/ERC721/IERC721.sol
// imported node_modules/openzeppelin-solidity/contracts/introspection/IERC165.sol
/**
 * @title IERC165
 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
 */
interface IERC165 {
  /**
   * @notice Query if a contract implements an interface
   * @param interfaceId The interface identifier, as specified in ERC-165
   * @dev Interface identification is specified in ERC-165. This function
   * uses less than 30,000 gas.
   */
  function supportsInterface(bytes4 interfaceId)
    external
    view
    returns (bool);
}

/**
 * @title ERC721 Non-Fungible Token Standard basic interface
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract IERC721 is IERC165 {
  event Transfer(
    address indexed from,
    address indexed to,
    uint256 indexed tokenId
  );
  event Approval(
    address indexed owner,
    address indexed approved,
    uint256 indexed tokenId
  );
  event ApprovalForAll(
    address indexed owner,
    address indexed operator,
    bool approved
  );
  function balanceOf(address owner) public view returns (uint256 balance);
  function ownerOf(uint256 tokenId) public view returns (address owner);
  function approve(address to, uint256 tokenId) public;
  function getApproved(uint256 tokenId)
    public view returns (address operator);
  function setApprovalForAll(address operator, bool _approved) public;
  function isApprovedForAll(address owner, address operator)
    public view returns (bool);
  function transferFrom(address from, address to, uint256 tokenId) public;
  function safeTransferFrom(address from, address to, uint256 tokenId)
    public;
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes data
  )
    public;
}

// imported node_modules/openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol
/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
contract IERC721Receiver {
  /**
   * @notice Handle the receipt of an NFT
   * @dev The ERC721 smart contract calls this function on the recipient
   * after a `safeTransfer`. This function MUST return the function selector,
   * otherwise the caller will revert the transaction. The selector to be
   * returned can be obtained as `this.onERC721Received.selector`. This
   * function MAY throw to revert and reject the transfer.
   * Note: the ERC721 contract address is always the message sender.
   * @param operator The address which called `safeTransferFrom` function
   * @param from The address which previously owned the token
   * @param tokenId The NFT identifier which is being transferred
   * @param data Additional data with no specified format
   * @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
   */
  function onERC721Received(
    address operator,
    address from,
    uint256 tokenId,
    bytes data
  )
    public
    returns(bytes4);
}

// imported node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol
/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {
  /**
  * @dev Multiplies two numbers, reverts on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    require(c / a == b);
    return c;
  }
  /**
  * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b > 0); // Solidity only automatically asserts 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 Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b <= a);
    uint256 c = a - b;
    return c;
  }
  /**
  * @dev Adds two numbers, reverts on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a);
    return c;
  }
  /**
  * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
  * reverts when dividing by zero.
  */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0);
    return a % b;
  }
}

// imported node_modules/openzeppelin-solidity/contracts/utils/Address.sol
/**
 * Utility library of inline functions on addresses
 */
library Address {
  /**
   * Returns whether the target address is a contract
   * @dev This function will return false if invoked during the constructor of a contract,
   * as the code is not actually created until after the constructor finishes.
   * @param account address of the account to check
   * @return whether the target address is a contract
   */
  function isContract(address account) internal view returns (bool) {
    uint256 size;
    // XXX Currently there is no better way to check if there is a contract in an address
    // than to check the size of the code at that address.
    // See https://ethereum.stackexchange.com/a/14016/36603
    // for more details about how this works.
    // TODO Check this again before the Serenity release, because all addresses will be
    // contracts then.
    // solium-disable-next-line security/no-inline-assembly
    assembly { size := extcodesize(account) }
    return size > 0;
  }
}

// imported node_modules/openzeppelin-solidity/contracts/introspection/ERC165.sol
/**
 * @title ERC165
 * @author Matt Condon (@shrugs)
 * @dev Implements ERC165 using a lookup table.
 */
contract ERC165 is IERC165 {
  bytes4 private constant _InterfaceId_ERC165 = 0x01ffc9a7;
  /**
   * 0x01ffc9a7 ===
   *   bytes4(keccak256('supportsInterface(bytes4)'))
   */
  /**
   * @dev a mapping of interface id to whether or not it's supported
   */
  mapping(bytes4 => bool) private _supportedInterfaces;
  /**
   * @dev A contract implementing SupportsInterfaceWithLookup
   * implement ERC165 itself
   */
  constructor()
    internal
  {
    _registerInterface(_InterfaceId_ERC165);
  }
  /**
   * @dev implement supportsInterface(bytes4) using a lookup table
   */
  function supportsInterface(bytes4 interfaceId)
    external
    view
    returns (bool)
  {
    return _supportedInterfaces[interfaceId];
  }
  /**
   * @dev internal method for registering an interface
   */
  function _registerInterface(bytes4 interfaceId)
    internal
  {
    require(interfaceId != 0xffffffff);
    _supportedInterfaces[interfaceId] = true;
  }
}

/**
 * @title ERC721 Non-Fungible Token Standard basic implementation
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721 is ERC165, IERC721 {
  using SafeMath for uint256;
  using Address for address;
  // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
  // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`
  bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;
  // Mapping from token ID to owner
  mapping (uint256 => address) private _tokenOwner;
  // Mapping from token ID to approved address
  mapping (uint256 => address) private _tokenApprovals;
  // Mapping from owner to number of owned token
  mapping (address => uint256) private _ownedTokensCount;
  // Mapping from owner to operator approvals
  mapping (address => mapping (address => bool)) private _operatorApprovals;
  bytes4 private constant _InterfaceId_ERC721 = 0x80ac58cd;
  /*
   * 0x80ac58cd ===
   *   bytes4(keccak256('balanceOf(address)')) ^
   *   bytes4(keccak256('ownerOf(uint256)')) ^
   *   bytes4(keccak256('approve(address,uint256)')) ^
   *   bytes4(keccak256('getApproved(uint256)')) ^
   *   bytes4(keccak256('setApprovalForAll(address,bool)')) ^
   *   bytes4(keccak256('isApprovedForAll(address,address)')) ^
   *   bytes4(keccak256('transferFrom(address,address,uint256)')) ^
   *   bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^
   *   bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)'))
   */
  constructor()
    public
  {
    // register the supported interfaces to conform to ERC721 via ERC165
    _registerInterface(_InterfaceId_ERC721);
  }
  /**
   * @dev Gets the balance of the specified address
   * @param owner address to query the balance of
   * @return uint256 representing the amount owned by the passed address
   */
  function balanceOf(address owner) public view returns (uint256) {
    require(owner != address(0));
    return _ownedTokensCount[owner];
  }
  /**
   * @dev Gets the owner of the specified token ID
   * @param tokenId uint256 ID of the token to query the owner of
   * @return owner address currently marked as the owner of the given token ID
   */
  function ownerOf(uint256 tokenId) public view returns (address) {
    address owner = _tokenOwner[tokenId];
    require(owner != address(0));
    return owner;
  }
  /**
   * @dev Approves another address to transfer the given token ID
   * The zero address indicates there is no approved address.
   * There can only be one approved address per token at a given time.
   * Can only be called by the token owner or an approved operator.
   * @param to address to be approved for the given token ID
   * @param tokenId uint256 ID of the token to be approved
   */
  function approve(address to, uint256 tokenId) public {
    address owner = ownerOf(tokenId);
    require(to != owner);
    require(msg.sender == owner || isApprovedForAll(owner, msg.sender));
    _tokenApprovals[tokenId] = to;
    emit Approval(owner, to, tokenId);
  }
  /**
   * @dev Gets the approved address for a token ID, or zero if no address set
   * Reverts if the token ID does not exist.
   * @param tokenId uint256 ID of the token to query the approval of
   * @return address currently approved for the given token ID
   */
  function getApproved(uint256 tokenId) public view returns (address) {
    require(_exists(tokenId));
    return _tokenApprovals[tokenId];
  }
  /**
   * @dev Sets or unsets the approval of a given operator
   * An operator is allowed to transfer all tokens of the sender on their behalf
   * @param to operator address to set the approval
   * @param approved representing the status of the approval to be set
   */
  function setApprovalForAll(address to, bool approved) public {
    require(to != msg.sender);
    _operatorApprovals[msg.sender][to] = approved;
    emit ApprovalForAll(msg.sender, to, approved);
  }
  /**
   * @dev Tells whether an operator is approved by a given owner
   * @param owner owner address which you want to query the approval of
   * @param operator operator address which you want to query the approval of
   * @return bool whether the given operator is approved by the given owner
   */
  function isApprovedForAll(
    address owner,
    address operator
  )
    public
    view
    returns (bool)
  {
    return _operatorApprovals[owner][operator];
  }
  /**
   * @dev Transfers the ownership of a given token ID to another address
   * Usage of this method is discouraged, use `safeTransferFrom` whenever possible
   * Requires the msg sender to be the owner, approved, or operator
   * @param from current owner of the token
   * @param to address to receive the ownership of the given token ID
   * @param tokenId uint256 ID of the token to be transferred
  */
  function transferFrom(
    address from,
    address to,
    uint256 tokenId
  )
    public
  {
    require(_isApprovedOrOwner(msg.sender, tokenId));
    require(to != address(0));
    _clearApproval(from, tokenId);
    _removeTokenFrom(from, tokenId);
    _addTokenTo(to, tokenId);
    emit Transfer(from, to, tokenId);
  }
  /**
   * @dev Safely transfers the ownership of a given token ID to another address
   * If the target address is a contract, it must implement `onERC721Received`,
   * which is called upon a safe transfer, and return the magic value
   * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
   * the transfer is reverted.
   *
   * Requires the msg sender to be the owner, approved, or operator
   * @param from current owner of the token
   * @param to address to receive the ownership of the given token ID
   * @param tokenId uint256 ID of the token to be transferred
  */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId
  )
    public
  {
    // solium-disable-next-line arg-overflow
    safeTransferFrom(from, to, tokenId, "");
  }
  /**
   * @dev Safely transfers the ownership of a given token ID to another address
   * If the target address is a contract, it must implement `onERC721Received`,
   * which is called upon a safe transfer, and return the magic value
   * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
   * the transfer is reverted.
   * Requires the msg sender to be the owner, approved, or operator
   * @param from current owner of the token
   * @param to address to receive the ownership of the given token ID
   * @param tokenId uint256 ID of the token to be transferred
   * @param _data bytes data to send along with a safe transfer check
   */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes _data
  )
    public
  {
    transferFrom(from, to, tokenId);
    // solium-disable-next-line arg-overflow
    require(_checkOnERC721Received(from, to, tokenId, _data));
  }
  /**
   * @dev Returns whether the specified token exists
   * @param tokenId uint256 ID of the token to query the existence of
   * @return whether the token exists
   */
  function _exists(uint256 tokenId) internal view returns (bool) {
    address owner = _tokenOwner[tokenId];
    return owner != address(0);
  }
  /**
   * @dev Returns whether the given spender can transfer a given token ID
   * @param spender address of the spender to query
   * @param tokenId uint256 ID of the token to be transferred
   * @return bool whether the msg.sender is approved for the given token ID,
   *  is an operator of the owner, or is the owner of the token
   */
  function _isApprovedOrOwner(
    address spender,
    uint256 tokenId
  )
    internal
    view
    returns (bool)
  {
    address owner = ownerOf(tokenId);
    // Disable solium check because of
    // https://github.com/duaraghav8/Solium/issues/175
    // solium-disable-next-line operator-whitespace
    return (
      spender == owner ||
      getApproved(tokenId) == spender ||
      isApprovedForAll(owner, spender)
    );
  }
  /**
   * @dev Internal function to mint a new token
   * Reverts if the given token ID already exists
   * @param to The address that will own the minted token
   * @param tokenId uint256 ID of the token to be minted by the msg.sender
   */
  function _mint(address to, uint256 tokenId) internal {
    require(to != address(0));
    _addTokenTo(to, tokenId);
    emit Transfer(address(0), to, tokenId);
  }
  /**
   * @dev Internal function to burn a specific token
   * Reverts if the token does not exist
   * @param tokenId uint256 ID of the token being burned by the msg.sender
   */
  function _burn(address owner, uint256 tokenId) internal {
    _clearApproval(owner, tokenId);
    _removeTokenFrom(owner, tokenId);
    emit Transfer(owner, address(0), tokenId);
  }
  /**
   * @dev Internal function to add a token ID to the list of a given address
   * Note that this function is left internal to make ERC721Enumerable possible, but is not
   * intended to be called by custom derived contracts: in particular, it emits no Transfer event.
   * @param to address representing the new owner of the given token ID
   * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
   */
  function _addTokenTo(address to, uint256 tokenId) internal {
    require(_tokenOwner[tokenId] == address(0));
    _tokenOwner[tokenId] = to;
    _ownedTokensCount[to] = _ownedTokensCount[to].add(1);
  }
  /**
   * @dev Internal function to remove a token ID from the list of a given address
   * Note that this function is left internal to make ERC721Enumerable possible, but is not
   * intended to be called by custom derived contracts: in particular, it emits no Transfer event,
   * and doesn't clear approvals.
   * @param from address representing the previous owner of the given token ID
   * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
   */
  function _removeTokenFrom(address from, uint256 tokenId) internal {
    require(ownerOf(tokenId) == from);
    _ownedTokensCount[from] = _ownedTokensCount[from].sub(1);
    _tokenOwner[tokenId] = address(0);
  }
  /**
   * @dev Internal function to invoke `onERC721Received` on a target address
   * The call is not executed if the target address is not a contract
   * @param from address representing the previous owner of the given token ID
   * @param to target address that will receive the tokens
   * @param tokenId uint256 ID of the token to be transferred
   * @param _data bytes optional data to send along with the call
   * @return whether the call correctly returned the expected magic value
   */
  function _checkOnERC721Received(
    address from,
    address to,
    uint256 tokenId,
    bytes _data
  )
    internal
    returns (bool)
  {
    if (!to.isContract()) {
      return true;
    }
    bytes4 retval = IERC721Receiver(to).onERC721Received(
      msg.sender, from, tokenId, _data);
    return (retval == _ERC721_RECEIVED);
  }
  /**
   * @dev Private function to clear current approval of a given token ID
   * Reverts if the given address is not indeed the owner of the token
   * @param owner owner of the token
   * @param tokenId uint256 ID of the token to be transferred
   */
  function _clearApproval(address owner, uint256 tokenId) private {
    require(ownerOf(tokenId) == owner);
    if (_tokenApprovals[tokenId] != address(0)) {
      _tokenApprovals[tokenId] = address(0);
    }
  }
}

// imported node_modules/openzeppelin-solidity/contracts/token/ERC721/IERC721Metadata.sol
/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract IERC721Metadata is IERC721 {
  function name() external view returns (string);
  function symbol() external view returns (string);
  function tokenURI(uint256 tokenId) external view returns (string);
}

contract ERC721Metadata is ERC165, ERC721, IERC721Metadata {
  // Token name
  string private _name;
  // Token symbol
  string private _symbol;
  // Optional mapping for token URIs
  mapping(uint256 => string) private _tokenURIs;
  bytes4 private constant InterfaceId_ERC721Metadata = 0x5b5e139f;
  /**
   * 0x5b5e139f ===
   *   bytes4(keccak256('name()')) ^
   *   bytes4(keccak256('symbol()')) ^
   *   bytes4(keccak256('tokenURI(uint256)'))
   */
  /**
   * @dev Constructor function
   */
  constructor(string name, string symbol) public {
    _name = name;
    _symbol = symbol;
    // register the supported interfaces to conform to ERC721 via ERC165
    _registerInterface(InterfaceId_ERC721Metadata);
  }
  /**
   * @dev Gets the token name
   * @return string representing the token name
   */
  function name() external view returns (string) {
    return _name;
  }
  /**
   * @dev Gets the token symbol
   * @return string representing the token symbol
   */
  function symbol() external view returns (string) {
    return _symbol;
  }
  /**
   * @dev Returns an URI for a given token ID
   * Throws if the token ID does not exist. May return an empty string.
   * @param tokenId uint256 ID of the token to query
   */
  function tokenURI(uint256 tokenId) external view returns (string) {
    require(_exists(tokenId));
    return _tokenURIs[tokenId];
  }
  /**
   * @dev Internal function to set the token URI for a given token
   * Reverts if the token ID does not exist
   * @param tokenId uint256 ID of the token to set its URI
   * @param uri string URI to assign
   */
  function _setTokenURI(uint256 tokenId, string uri) internal {
    require(_exists(tokenId));
    _tokenURIs[tokenId] = uri;
  }
  /**
   * @dev Internal function to burn a specific token
   * Reverts if the token does not exist
   * @param owner owner of the token to burn
   * @param tokenId uint256 ID of the token being burned by the msg.sender
   */
  function _burn(address owner, uint256 tokenId) internal {
    super._burn(owner, tokenId);
    // Clear metadata (if any)
    if (bytes(_tokenURIs[tokenId]).length != 0) {
      delete _tokenURIs[tokenId];
    }
  }
}

// imported node_modules/openzeppelin-solidity/contracts/access/roles/MinterRole.sol
contract MinterRole {
  using Roles for Roles.Role;
  event MinterAdded(address indexed account);
  event MinterRemoved(address indexed account);
  Roles.Role private minters;
  constructor() internal {
    _addMinter(msg.sender);
  }
  modifier onlyMinter() {
    require(isMinter(msg.sender));
    _;
  }
  function isMinter(address account) public view returns (bool) {
    return minters.has(account);
  }
  function addMinter(address account) public onlyMinter {
    _addMinter(account);
  }
  function renounceMinter() public {
    _removeMinter(msg.sender);
  }
  function _addMinter(address account) internal {
    minters.add(account);
    emit MinterAdded(account);
  }
  function _removeMinter(address account) internal {
    minters.remove(account);
    emit MinterRemoved(account);
  }
}

/**
 * @title ERC721MetadataMintable
 * @dev ERC721 minting logic with metadata
 */
contract ERC721MetadataMintable is ERC721, ERC721Metadata, MinterRole {
  /**
   * @dev Function to mint tokens
   * @param to The address that will receive the minted tokens.
   * @param tokenId The token id to mint.
   * @param tokenURI The token URI of the minted token.
   * @return A boolean that indicates if the operation was successful.
   */
  function mintWithTokenURI(
    address to,
    uint256 tokenId,
    string tokenURI
  )
    public
    onlyMinter
    returns (bool)
  {
    _mint(to, tokenId);
    _setTokenURI(tokenId, tokenURI);
    return true;
  }
}

// imported contracts/proposals/OCP-IP-7/ILicenseNFTDataStream.sol
contract ILicenseNFTDataStream {
  // mintable keys
  // keccak256(abi.encodePacked("licenseTerms"))
  bytes32 public constant LICENSE_TERMS_KEY = 0xb275e7ea4f8ae6075626a6bc37c558f4265ba49512523cf4d68c05b249cf20b9;
  // keccak256(abi.encodePacked("schema"))
  bytes32 public constant SCHEMA_KEY = 0xa91efd13169e3bceace525b23b7f968b3cc611248271e35f04c5c917311fc7f7;
  // sealable keys
  // keccak256(abi.encodePacked("dataStreamHash"))
  bytes32 public constant DATA_STREAM_HASH_KEY = 0xa0aa0714617b83af6568cf05c25404b309565ed9fdda7f53f4f6f60105eb0337;
  // keccak256(abi.encodePacked("hashedDataStreamLicenseTerms"))
  bytes32 public constant HASHED_DATA_STREAM_LICENSE_TERMS_KEY = 0x5fbb821d7c8660396e9025a6eae37db36accc5621c22f0bc3e7f6ce9ea20a9b8;
  // keccak256(abi.encodePacked("startTimeUtcSec"))
  bytes32 public constant START_TIME_UTC_SEC_KEY = 0xf3f6170cfbf7600c536f76f63bd1f6cd1df950659eea69fca42323a7b8918538;
  function mintDataStream(
    address to,
    uint256 tokenId,
    bytes32 schema,
    bytes32 licenseTerms,
    uint256 durationSec
  ) public returns(bool);
  function sealDataStream(
    address dataStreamSealer,
    uint256 tokenId,
    bytes32 dataStreamHash,
    uint256 startTimeUtcSec,
    bytes32 hashedDataStreamLicenseTerms
  ) public returns(bool);
}

contract ILicenseNFT is ERC721MetadataMintable, ILicenseNFTDataStream {
  // keccak256(abi.encodePacked("splitParent"))
  bytes32 public constant SPLIT_PARENT_KEY = 0x82f1bb612577f02f2d28d75a6004227778388d11803f2c7faa961f947a84c847;
  // keccak256(abi.encodePacked("durationSec"))
  bytes32 public constant DURATION_SEC_KEY = 0x3354b151081a5dc2572c75853a10ef902217550496efb2ffa54494ae9b3ab99c;
  // keccak256(abi.encodePacked("bidHash"))
  bytes32 public constant BID_HASH_KEY = 0x4eba03e4695ef490bd0d99b2e8fa2d0aa4c54ddfc1a74b32febd9142981e7176;
  event Sealed(uint256 tokenId);
  function mintableProperties(uint256 tokenId, bytes32 key) public view returns(bytes32);
  function sealableProperties(uint256 tokenId, bytes32 key) public view returns(bytes32);
  function tokenSealer(uint256 tokenId) public view returns(address);
  function setMintableProperty(
    uint256 tokenId,
    bytes32 key,
    bytes32 value
  ) public returns(bool);
  function split(uint256 tokenId, uint256 secondTokenId, uint256 secondDuration) public returns(bool);
  function merge(uint256 tokenId, uint256 secondTokenId) public returns(bool);
  function setSealableProperty(
    uint256 tokenId,
    bytes32 key,
    bytes32 value
  ) public returns(bool);
  function seal(address dataStreamSealer, uint256 tokenId) public returns(bool);
  function mint(address to, uint256 tokenId) public returns (bool);
}

contract AuctionHouseBiddingComponent is IAuctionHouseBiddingComponent, Secondary, Proxiable {
  IBlindBidRegistry private _bidRegistry;
  ILicenseNFT private _licenseNFT;
  mapping(uint256 => bool) private _submissionOpen;
  mapping(uint256 => bool) private _revealOpen;
  mapping(uint256 => bool) private _allocationOpen;
  mapping(bytes32 => uint256) private _bidDeposit;
  constructor(address auctionHouse) public {
    transferPrimary(auctionHouse);
  }
  function bidRegistry() public view returns(address) {
    return address(_bidRegistry);
  }
  function licenseNFT() public view returns(address) {
    return address(_licenseNFT);
  }
  function bidDeposit(bytes32 bidHash) public view returns(uint256) {
    return _bidDeposit[bidHash];
  }
  function submissionOpen(uint256 auctionId) public view returns(bool) {
    return _submissionOpen[auctionId];
  }
  function revealOpen(uint256 auctionId) public view returns(bool) {
    return _revealOpen[auctionId];
  }
  function allocationOpen(uint256 auctionId) public view returns(bool) {
    return _allocationOpen[auctionId];
  }
  function setBidRegistry(address registry) public onlyPrimary {
    _bidRegistry = IBlindBidRegistry(registry);
  }
  function setLicenseNFT(address licenseNFTContract) public onlyPrimary {
    _licenseNFT = ILicenseNFT(licenseNFTContract);
  }
  function setSubmissionOpen(uint256 auctionId) public onlyPrimary {
    _submissionOpen[auctionId] = true;
  }
  function setSubmissionClosed(uint256 auctionId) public onlyPrimary {
    _submissionOpen[auctionId] = false;
  }
  function payBid(bytes32 bidHash, uint256 value) public onlyPrimary {
    uint256 auctionId = _bidRegistry.auction(bidHash);
    require(_submissionOpen[auctionId]);
    require(_bidRegistry.bidState(bidHash) == uint8(IBlindBidRegistry.BlindBidState.Created));
    _bidDeposit[bidHash] += value;
  }
  function submitBid(address registeree, bytes32 bidHash) public proxyOrSender(registeree) {
    require(_bidRegistry.bidState(bidHash) == uint8(IBlindBidRegistry.BlindBidState.Created));
    uint256 auctionId = _bidRegistry.auction(bidHash);
    require(_submissionOpen[auctionId]);
    require(_bidDeposit[bidHash] > 0);
    _bidRegistry.setBidState(bidHash, uint8(IBlindBidRegistry.BlindBidState.Submitted));
    emit BidRegistered(registeree, bidHash, now); // solhint-disable-line
  }
  function setRevealOpen(uint256 auctionId) public onlyPrimary {
    _revealOpen[auctionId] = true;
  }
  function setRevealClosed(uint256 auctionId) public onlyPrimary {
    _revealOpen[auctionId] = false;
  }
  function revealBid(bytes32 bidHash) public {
    require(_bidRegistry.bidState(bidHash) == uint8(IBlindBidRegistry.BlindBidState.Submitted));
    require(_bidRegistry.verifyStoredData(bidHash));
    uint256 auctionId = _bidRegistry.auction(bidHash);
    require(_revealOpen[auctionId]);
    uint256 bidPrice = _bidRegistry.bidPrice(bidHash);
    require(_bidDeposit[bidHash] >= bidPrice);
    _bidRegistry.setBidState(bidHash, uint8(IBlindBidRegistry.BlindBidState.Revealed));
  }
  function setAllocationOpen(uint256 auctionId) public onlyPrimary {
    _allocationOpen[auctionId] = true;
  }
  function setAllocationClosed(uint256 auctionId) public onlyPrimary {
    _allocationOpen[auctionId] = false;
  }
  function allocateBid(bytes32 bidHash, uint clearingPrice) public onlyPrimary {
    uint256 auctionId = _bidRegistry.auction(bidHash);
    require(_allocationOpen[auctionId]);
    require(_bidRegistry.bidState(bidHash) == uint8(IBlindBidRegistry.BlindBidState.Revealed));
    _bidRegistry.setClearingPrice(bidHash, clearingPrice);
    if (_bidRegistry.bidPrice(bidHash) >= clearingPrice) {
      _bidRegistry.setBidState(bidHash, uint8(IBlindBidRegistry.BlindBidState.Won));
      _bidRegistry.setAuctionStatus(bidHash, uint8(IBidRegistry.AuctionStatus.Won));
    } else {
      _bidRegistry.setBidState(bidHash, uint8(IBlindBidRegistry.BlindBidState.Lost));
      _bidRegistry.setAuctionStatus(bidHash, uint8(IBidRegistry.AuctionStatus.Lost));
    }
  }
  function doNotAllocateBid(bytes32 bidHash) public onlyPrimary {
    uint256 auctionId = _bidRegistry.auction(bidHash);
    require(_allocationOpen[auctionId]);
    require(_bidRegistry.bidState(bidHash) == uint8(IBlindBidRegistry.BlindBidState.Revealed));
    _bidRegistry.setBidState(bidHash, uint8(IBlindBidRegistry.BlindBidState.Lost));
    _bidRegistry.setAuctionStatus(bidHash, uint8(IBidRegistry.AuctionStatus.Lost));
  }
  function payBidAllocationFee(bytes32 bidHash, uint256 fee) public onlyPrimary {
    uint256 auctionId = _bidRegistry.auction(bidHash);
    require(_allocationOpen[auctionId]);
    require(_bidRegistry.allocationFee(bidHash) == 0);
    _bidRegistry.setAllocationFee(bidHash, fee);
  }
  function calcRefund(bytes32 bidHash) public view returns(uint256) {
    uint8 auctionStatus = _bidRegistry.auctionStatus(bidHash);
    uint256 deposit = _bidDeposit[bidHash];
    uint256 bidPrice = _bidRegistry.bidPrice(bidHash);
    require(deposit >= bidPrice);
    uint256 refund = 0;
    if (auctionStatus == uint8(IBidRegistry.AuctionStatus.Lost)) {
      uint256 allocationFee = _bidRegistry.allocationFee(bidHash);
      require(deposit >= allocationFee);
      refund = deposit - allocationFee;
    } else if (auctionStatus == uint8(IBidRegistry.AuctionStatus.Won)) {
      uint256 clearingPrice = _bidRegistry.clearingPrice(bidHash);
      require(deposit >= clearingPrice);
      refund = deposit - clearingPrice;
    }
    return refund;
  }
  function payRefund(bytes32 bidHash, uint256) public onlyPrimary {
    uint8 bidState = _bidRegistry.bidState(bidHash);
    require(
      bidState == uint8(IBlindBidRegistry.BlindBidState.Lost) ||
      bidState == uint8(IBlindBidRegistry.BlindBidState.Won)
    );
    _bidRegistry.setBidState(bidHash, uint8(IBlindBidRegistry.BlindBidState.Refunded));
  }
  function issueLicenseNFT(bytes32 bidHash) public onlyPrimary {
    uint8 bidState = _bidRegistry.bidState(bidHash);
    require(bidState == uint8(IBlindBidRegistry.BlindBidState.Refunded));
    if (_bidRegistry.auctionStatus(bidHash) == uint8(IBidRegistry.AuctionStatus.Won)) {
      address bidder = _bidRegistry.bidder(bidHash);
      uint256 tokenId = uint256(bidHash);
      bytes32 schema = _bidRegistry.schema(bidHash);
      bytes32 licenseTerms = _bidRegistry.licenseTerms(bidHash);
      uint256 durationSec = _bidRegistry.durationSec(bidHash);
      _licenseNFT.setMintableProperty(tokenId, _licenseNFT.BID_HASH_KEY(), bidHash);
      _licenseNFT.mintDataStream(bidder, tokenId, schema, licenseTerms, durationSec);
      _bidRegistry.setBidState(bidHash, uint8(IBlindBidRegistry.BlindBidState.Allocated));
    }
  }
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"bidHash","type":"bytes32"},{"name":"clearingPrice","type":"uint256"}],"name":"allocateBid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"auctionId","type":"uint256"}],"name":"revealOpen","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"claimedSender","type":"address"}],"name":"isProxyOrSender","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addProxyManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"auctionId","type":"uint256"}],"name":"setAllocationClosed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"auctionId","type":"uint256"}],"name":"allocationOpen","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"bidHash","type":"bytes32"},{"name":"value","type":"uint256"}],"name":"payBid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"}],"name":"transferPrimary","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"proxy","type":"address"}],"name":"addProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"proxy","type":"address"}],"name":"isProxy","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"auctionId","type":"uint256"}],"name":"setRevealClosed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"proxy","type":"address"},{"name":"sender","type":"address"}],"name":"addProxyForSender","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"registeree","type":"address"},{"name":"bidHash","type":"bytes32"}],"name":"submitBid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceProxyManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bidHash","type":"bytes32"}],"name":"doNotAllocateBid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"proxy","type":"address"},{"name":"sender","type":"address"}],"name":"isProxyForSender","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"auctionId","type":"uint256"}],"name":"setRevealOpen","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"licenseNFTContract","type":"address"}],"name":"setLicenseNFT","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"bidHash","type":"bytes32"}],"name":"calcRefund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"bidHash","type":"bytes32"},{"name":"","type":"uint256"}],"name":"payRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"auctionId","type":"uint256"}],"name":"setAllocationOpen","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bidHash","type":"bytes32"}],"name":"issueLicenseNFT","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bidRegistry","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"registry","type":"address"}],"name":"setBidRegistry","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"auctionId","type":"uint256"}],"name":"setSubmissionClosed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bidHash","type":"bytes32"},{"name":"fee","type":"uint256"}],"name":"payBidAllocationFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bidHash","type":"bytes32"}],"name":"revealBid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"proxy","type":"address"}],"name":"removeProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"auctionId","type":"uint256"}],"name":"submissionOpen","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"primary","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"licenseNFT","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"bidHash","type":"bytes32"}],"name":"bidDeposit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isProxyManager","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"auctionId","type":"uint256"}],"name":"setSubmissionOpen","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"proxy","type":"address"},{"name":"sender","type":"address"}],"name":"removeProxyForSender","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"auctionHouse","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"proxy","type":"address"},{"indexed":false,"name":"updatedAtUtcSec","type":"uint256"}],"name":"ProxyAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"proxy","type":"address"},{"indexed":false,"name":"updatedAtUtcSec","type":"uint256"}],"name":"ProxyRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"proxy","type":"address"},{"indexed":true,"name":"sender","type":"address"},{"indexed":false,"name":"updatedAtUtcSec","type":"uint256"}],"name":"ProxyForSenderAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"proxy","type":"address"},{"indexed":true,"name":"sender","type":"address"},{"indexed":false,"name":"updatedAtUtcSec","type":"uint256"}],"name":"ProxyForSenderRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"ProxyManagerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"ProxyManagerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"}],"name":"PrimaryTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"registeree","type":"address"},{"indexed":false,"name":"bidHash","type":"bytes32"},{"indexed":false,"name":"updatedAtUtcSec","type":"uint256"}],"name":"BidRegistered","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60806040523480156200001157600080fd5b506040516020806200486483398101806040528101908080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4101e71e974f68df5e9730cc223280b41654676bbb052cdcc735c3337e64d2d96000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a16200011d3360016200013e640100000000026200423f179091906401000000009004565b620001378162000201640100000000026401000000009004565b50620003f6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200017b57600080fd5b62000196828262000361640100000000026401000000009004565b151515620001a357600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156200025d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200029a57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4101e71e974f68df5e9730cc223280b41654676bbb052cdcc735c3337e64d2d96000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156200039f57600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61445e80620004066000396000f3006080604052600436106101b7576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630611ae4a146101bc57806308b591a5146101f75780630a0fac2b1461023c57806313bbae9b1461029757806316962bc1146102da57806318f9bdee146103075780631f2619391461034c5780632348238c1461038757806323b11d8d146103ca578063297103881461040d5780632a7e60b6146104685780633d7bed99146104955780633db3f2cf146104f85780634e4fbee11461054957806354adb7b1146105605780635b791420146105915780635f7118c71461060c5780635fd030c014610639578063612867c21461067c57806362f03290146106c157806364c96322146106fc5780636749ec481461072957806382e615fc1461075a578063956a2ea7146107b15780639e3e230b146107f4578063a536ae3814610821578063acc9138e1461085c578063be116c3b1461088d578063be275680146108d0578063c6dbdf6114610915578063da68d47d1461096c578063e02bc1c6146109c3578063f25ebdad14610a08578063f2ee8be914610a63578063fa27e07014610a90575b600080fd5b3480156101c857600080fd5b506101f5600480360381019080803560001916906020019092919080359060200190929190505050610af3565b005b34801561020357600080fd5b506102226004803603810190808035906020019092919050505061120f565b604051808215151515815260200191505060405180910390f35b34801561024857600080fd5b5061027d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611239565b604051808215151515815260200191505060405180910390f35b3480156102a357600080fd5b506102d8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611356565b005b3480156102e657600080fd5b50610305600480360381019080803590602001909291905050506113c4565b005b34801561031357600080fd5b506103326004803603810190808035906020019092919050505061144e565b604051808215151515815260200191505060405180910390f35b34801561035857600080fd5b50610385600480360381019080803560001916906020019092919080359060200190929190505050611478565b005b34801561039357600080fd5b506103c8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116f8565b005b3480156103d657600080fd5b5061040b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611856565b005b34801561041957600080fd5b5061044e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061196c565b604051808215151515815260200191505060405180910390f35b34801561047457600080fd5b50610493600480360381019080803590602001909291905050506119c2565b005b3480156104a157600080fd5b506104f6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a4c565b005b34801561050457600080fd5b50610547600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050611bf6565b005b34801561055557600080fd5b5061055e611f78565b005b34801561056c57600080fd5b5061058f6004803603810190808035600019169060200190929190505050611f8e565b005b34801561059d57600080fd5b506105f2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612379565b604051808215151515815260200191505060405180910390f35b34801561061857600080fd5b506106376004803603810190808035906020019092919050505061240d565b005b34801561064557600080fd5b5061067a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612497565b005b34801561068857600080fd5b506106ab6004803603810190808035600019169060200190929190505050612536565b6040518082815260200191505060405180910390f35b3480156106cd57600080fd5b506106fa60048036038101908080356000191690602001909291908035906020019092919050505061293a565b005b34801561070857600080fd5b5061072760048036038101908080359060200190929190505050612b79565b005b34801561073557600080fd5b506107586004803603810190808035600019169060200190929190505050612c03565b005b34801561076657600080fd5b5061076f613553565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107bd57600080fd5b506107f2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061357d565b005b34801561080057600080fd5b5061081f6004803603810190808035906020019092919050505061361c565b005b34801561082d57600080fd5b5061085a6004803603810190808035600019169060200190929190803590602001909291905050506136a6565b005b34801561086857600080fd5b5061088b60048036038101908080356000191690602001909291905050506139a4565b005b34801561089957600080fd5b506108ce600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e4a565b005b3480156108dc57600080fd5b506108fb60048036038101908080359060200190929190505050613f56565b604051808215151515815260200191505060405180910390f35b34801561092157600080fd5b5061092a613f80565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561097857600080fd5b50610981613fa9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109cf57600080fd5b506109f26004803603810190808035600019169060200190929190505050613fd3565b6040518082815260200191505060405180910390f35b348015610a1457600080fd5b50610a49600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ff8565b604051808215151515815260200191505060405180910390f35b348015610a6f57600080fd5b50610a8e60048036038101908080359060200190929190505050614015565b005b348015610a9c57600080fd5b50610af1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061409f565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5057600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663715ede94846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610be957600080fd5b505af1158015610bfd573d6000803e3d6000fd5b505050506040513d6020811015610c1357600080fd5b810190808051906020019092919050505090506008600082815260200190815260200160002060009054906101000a900460ff161515610c5257600080fd5b600780811115610c5e57fe5b60ff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631bbce9a2856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610cfa57600080fd5b505af1158015610d0e573d6000803e3d6000fd5b505050506040513d6020811015610d2457600080fd5b810190808051906020019092919050505060ff16141515610d4457600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632888c70184846040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b158015610de557600080fd5b505af1158015610df9573d6000803e3d6000fd5b5050505081600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359faf062856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610e9757600080fd5b505af1158015610eab573d6000803e3d6000fd5b505050506040513d6020811015610ec157600080fd5b810190808051906020019092919050505010151561107357600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af2e285c8460036007811115610f2557fe5b6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018260ff1660ff16815260200192505050600060405180830381600087803b158015610f8c57600080fd5b505af1158015610fa0573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cceb921484600280811115610fef57fe5b6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018260ff1660ff16815260200192505050600060405180830381600087803b15801561105657600080fd5b505af115801561106a573d6000803e3d6000fd5b5050505061120a565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af2e285c84600260078111156110bf57fe5b6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018260ff1660ff16815260200192505050600060405180830381600087803b15801561112657600080fd5b505af115801561113a573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cceb9214846001600281111561118a57fe5b6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018260ff1660ff16815260200192505050600060405180830381600087803b1580156111f157600080fd5b505af1158015611205573d6000803e3d6000fd5b505050505b505050565b60006007600083815260200190815260200160002060009054906101000a900460ff169050919050565b60008173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112be5750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061134f5750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050919050565b61135f33613ff8565b151561136a57600080fd5b61137e81600161423f90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f7fd9388eed61d6c8286637fdf1afc25624585cab358450328dd43b0c7aeed95b60405160405180910390a250565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561141f57600080fd5b60006008600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006008600083815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114d557600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663715ede94846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561156e57600080fd5b505af1158015611582573d6000803e3d6000fd5b505050506040513d602081101561159857600080fd5b810190808051906020019092919050505090506006600082815260200190815260200160002060009054906101000a900460ff1615156115d757600080fd5b600060078111156115e457fe5b60ff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631bbce9a2856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561168057600080fd5b505af1158015611694573d6000803e3d6000fd5b505050506040513d60208110156116aa57600080fd5b810190808051906020019092919050505060ff161415156116ca57600080fd5b8160096000856000191660001916815260200190815260200160002060008282540192505081905550505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561175357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561178f57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4101e71e974f68df5e9730cc223280b41654676bbb052cdcc735c3337e64d2d96000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b61185f33613ff8565b151561186a57600080fd5b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515156118c357600080fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fb6a7032fe3eb4e07207181a752f893754c0a19f7188c7be0221a456cbec6ee5c426040518082815260200191505060405180910390a250565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a1d57600080fd5b60006007600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b80611a5681611239565b1515611a6157600080fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515611af757600080fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f03eb2e619f22c50c782751f77c71c7cad6ce3840c208a3a65974cfee0bc54bbf426040518082815260200191505060405180910390a3505050565b600082611c0281611239565b1515611c0d57600080fd5b60006007811115611c1a57fe5b60ff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631bbce9a2856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015611cb657600080fd5b505af1158015611cca573d6000803e3d6000fd5b505050506040513d6020811015611ce057600080fd5b810190808051906020019092919050505060ff16141515611d0057600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663715ede94846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015611d9957600080fd5b505af1158015611dad573d6000803e3d6000fd5b505050506040513d6020811015611dc357600080fd5b810190808051906020019092919050505091506006600083815260200190815260200160002060009054906101000a900460ff161515611e0257600080fd5b600060096000856000191660001916815260200190815260200160002054111515611e2c57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af2e285c8460016007811115611e7857fe5b6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018260ff1660ff16815260200192505050600060405180830381600087803b158015611edf57600080fd5b505af1158015611ef3573d6000803e3d6000fd5b505050507f55be180933ee30c3ad96e8897faea49edda044023ac44f2c29ed66b3d4dc8339848442604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018360001916600019168152602001828152602001935050505060405180910390a150505050565b611f8c3360016142ef90919063ffffffff16565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611feb57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663715ede94836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561208457600080fd5b505af1158015612098573d6000803e3d6000fd5b505050506040513d60208110156120ae57600080fd5b810190808051906020019092919050505090506008600082815260200190815260200160002060009054906101000a900460ff1615156120ed57600080fd5b6007808111156120f957fe5b60ff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631bbce9a2846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561219557600080fd5b505af11580156121a9573d6000803e3d6000fd5b505050506040513d60208110156121bf57600080fd5b810190808051906020019092919050505060ff161415156121df57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af2e285c836002600781111561222b57fe5b6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018260ff1660ff16815260200192505050600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cceb921483600160028111156122f657fe5b6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018260ff1660ff16815260200192505050600060405180830381600087803b15801561235d57600080fd5b505af1158015612371573d6000803e3d6000fd5b505050505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561246857600080fd5b60016007600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156124f257600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000806000806000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0603326896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156125da57600080fd5b505af11580156125ee573d6000803e3d6000fd5b505050506040513d602081101561260457600080fd5b81019080805190602001909291905050509550600960008960001916600019168152602001908152602001600020549450600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359faf062896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156126ce57600080fd5b505af11580156126e2573d6000803e3d6000fd5b505050506040513d60208110156126f857600080fd5b8101908080519060200190929190505050935083851015151561271a57600080fd5b600092506001600281111561272b57fe5b60ff168660ff16141561282757600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c5f9a60896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156127d157600080fd5b505af11580156127e5573d6000803e3d6000fd5b505050506040513d60208110156127fb57600080fd5b8101908080519060200190929190505050915081851015151561281d57600080fd5b818503925061292c565b60028081111561283357fe5b60ff168660ff16141561292b57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637fe551fd896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156128d957600080fd5b505af11580156128ed573d6000803e3d6000fd5b505050506040513d602081101561290357600080fd5b8101908080519060200190929190505050905080851015151561292557600080fd5b80850392505b5b829650505050505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561299757600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631bbce9a2846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015612a3057600080fd5b505af1158015612a44573d6000803e3d6000fd5b505050506040513d6020811015612a5a57600080fd5b8101908080519060200190929190505050905060026007811115612a7a57fe5b60ff168160ff161480612a9e575060036007811115612a9557fe5b60ff168160ff16145b1515612aa957600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af2e285c8460046007811115612af557fe5b6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018260ff1660ff16815260200192505050600060405180830381600087803b158015612b5c57600080fd5b505af1158015612b70573d6000803e3d6000fd5b50505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612bd457600080fd5b60016008600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000806000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c6757600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631bbce9a2886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015612d0057600080fd5b505af1158015612d14573d6000803e3d6000fd5b505050506040513d6020811015612d2a57600080fd5b8101908080519060200190929190505050955060046007811115612d4a57fe5b60ff168660ff16141515612d5d57600080fd5b600280811115612d6957fe5b60ff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0603326896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015612e0557600080fd5b505af1158015612e19573d6000803e3d6000fd5b505050506040513d6020811015612e2f57600080fd5b810190808051906020019092919050505060ff16141561354a57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e90acd53886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015612ee257600080fd5b505af1158015612ef6573d6000803e3d6000fd5b505050506040513d6020811015612f0c57600080fd5b8101908080519060200190929190505050945086600190049350600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663072b9cf2886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015612fbf57600080fd5b505af1158015612fd3573d6000803e3d6000fd5b505050506040513d6020811015612fe957600080fd5b81019080805190602001909291905050509250600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ef19792a886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561309557600080fd5b505af11580156130a9573d6000803e3d6000fd5b505050506040513d60208110156130bf57600080fd5b81019080805190602001909291905050509150600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166399f6021d886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561316b57600080fd5b505af115801561317f573d6000803e3d6000fd5b505050506040513d602081101561319557600080fd5b81019080805190602001909291905050509050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635a36f4f385600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322c9283f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561326d57600080fd5b505af1158015613281573d6000803e3d6000fd5b505050506040513d602081101561329757600080fd5b81019080805190602001909291905050508a6040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180848152602001836000191660001916815260200182600019166000191681526020019350505050602060405180830381600087803b15801561331957600080fd5b505af115801561332d573d6000803e3d6000fd5b505050506040513d602081101561334357600080fd5b810190808051906020019092919050505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fed2063c86868686866040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018460001916600019168152602001836000191660001916815260200182815260200195505050505050602060405180830381600087803b15801561344257600080fd5b505af1158015613456573d6000803e3d6000fd5b505050506040513d602081101561346c57600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af2e285c88600560078111156134ca57fe5b6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018260ff1660ff16815260200192505050600060405180830381600087803b15801561353157600080fd5b505af1158015613545573d6000803e3d6000fd5b505050505b50505050505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156135d857600080fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561367757600080fd5b60006006600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561370357600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663715ede94846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561379c57600080fd5b505af11580156137b0573d6000803e3d6000fd5b505050506040513d60208110156137c657600080fd5b810190808051906020019092919050505090506008600082815260200190815260200160002060009054906101000a900460ff16151561380557600080fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c5f9a60856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050506040513d60208110156138ca57600080fd5b81019080805190602001909291905050501415156138e757600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662f1c7ec84846040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b15801561398757600080fd5b505af115801561399b573d6000803e3d6000fd5b50505050505050565b600080600160078111156139b457fe5b60ff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631bbce9a2856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015613a5057600080fd5b505af1158015613a64573d6000803e3d6000fd5b505050506040513d6020811015613a7a57600080fd5b810190808051906020019092919050505060ff16141515613a9a57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638121b0d4846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015613b3357600080fd5b505af1158015613b47573d6000803e3d6000fd5b505050506040513d6020811015613b5d57600080fd5b81019080805190602001909291905050501515613b7957600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663715ede94846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015613c1257600080fd5b505af1158015613c26573d6000803e3d6000fd5b505050506040513d6020811015613c3c57600080fd5b810190808051906020019092919050505091506007600083815260200190815260200160002060009054906101000a900460ff161515613c7b57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359faf062846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015613d1457600080fd5b505af1158015613d28573d6000803e3d6000fd5b505050506040513d6020811015613d3e57600080fd5b81019080805190602001909291905050509050806009600085600019166000191681526020019081526020016000205410151515613d7b57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af2e285c84600780811115613dc657fe5b6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018260ff1660ff16815260200192505050600060405180830381600087803b158015613e2d57600080fd5b505af1158015613e41573d6000803e3d6000fd5b50505050505050565b613e5333613ff8565b1515613e5e57600080fd5b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515613eb657600080fd5b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690558073ffffffffffffffffffffffffffffffffffffffff167f955981272de9a405d530a29cab23dda64b892b32e1c7a778cd699baf367b537b426040518082815260200191505060405180910390a250565b60006006600083815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600960008360001916600019168152602001908152602001600020549050919050565b600061400e82600161439e90919063ffffffff16565b9050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561407057600080fd5b60016006600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b806140a981611239565b15156140b457600080fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561414957600080fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690558173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f53f4fdbf046e2ed867f0f8d1cc7d5063ce080d58e9ae6d57f16c668514664c34426040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561427b57600080fd5b614285828261439e565b15151561429157600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561432b57600080fd5b614335828261439e565b151561434057600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156143db57600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050929150505600a165627a7a723058202cb338bdbb264bff806553c6cde5cc7545ab7a57d07700978a078e92a19a6f310029000000000000000000000000cfc4fc0bc2d0f24c21245e6cb3e39fb77e8ceb07

    Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cfc4fc0bc2d0f24c21245e6cb3e39fb77e8ceb07

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000cfc4fc0bc2d0f24c21245e6cb3e39fb77e8ceb07


   Swarm Source:
bzzr://2cb338bdbb264bff806553c6cde5cc7545ab7a57d07700978a078e92a19a6f31

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward