ETH Price: $2,693.63 (-4.02%)
Gas: 0.76 Gwei

Contract

0x9166b15CbA71bE78Da4127369E564B2D1f1B3008
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Commit Vote68296682018-12-05 9:04:302272 days ago1544000670IN
0x9166b15C...D1f1B3008
0 ETH0.00165912.6
Set Respondent D...68295742018-12-05 8:42:392272 days ago1543999359IN
0x9166b15C...D1f1B3008
0 ETH0.0005109512.6
Set Respondent D...68295272018-12-05 8:32:242272 days ago1543998744IN
0x9166b15C...D1f1B3008
0 ETH0.0014904614
Open Case68295212018-12-05 8:31:182272 days ago1543998678IN
0x9166b15C...D1f1B3008
0 ETH0.0570390114
Commit Vote68254962018-12-04 16:18:082273 days ago1543940288IN
0x9166b15C...D1f1B3008
0 ETH0.0014712.6
Set Respondent D...68254882018-12-04 16:16:202273 days ago1543940180IN
0x9166b15C...D1f1B3008
0 ETH0.0004657912.6
Commit Vote68254752018-12-04 16:11:592273 days ago1543939919IN
0x9166b15C...D1f1B3008
0 ETH0.00165912.6
Commit Vote68254672018-12-04 16:08:582273 days ago1543939738IN
0x9166b15C...D1f1B3008
0 ETH0.0014712.6
Set Respondent D...68254512018-12-04 16:06:282273 days ago1543939588IN
0x9166b15C...D1f1B3008
0 ETH0.0012894912.6
Open Case68254462018-12-04 16:04:432273 days ago1543939483IN
0x9166b15C...D1f1B3008
0 ETH0.022566649
Commit Vote68253532018-12-04 15:37:572273 days ago1543937877IN
0x9166b15C...D1f1B3008
0 ETH0.001013837.7
Set Respondent D...68250382018-12-04 14:25:312273 days ago1543933531IN
0x9166b15C...D1f1B3008
0 ETH0.000359159.8
Set Respondent D...68250362018-12-04 14:25:062273 days ago1543933506IN
0x9166b15C...D1f1B3008
0 ETH0.000359159.8
Set Respondent D...68250342018-12-04 14:24:012273 days ago1543933441IN
0x9166b15C...D1f1B3008
0 ETH0.000998589.8
Open Case68250082018-12-04 14:18:312273 days ago1543933111IN
0x9166b15C...D1f1B3008
0.0001 ETH0.022513849
Verdict67867362018-11-28 6:41:512280 days ago1543387311IN
0x9166b15C...D1f1B3008
0 ETH0.003588894.8
Start Revealing ...67862292018-11-28 4:41:592280 days ago1543380119IN
0x9166b15C...D1f1B3008
0 ETH0.000276666
Start Voting Cas...67802622018-11-27 4:41:292281 days ago1543293689IN
0x9166b15C...D1f1B3008
0 ETH0.000443067.2
Open Case67772022018-11-26 16:41:212281 days ago1543250481IN
0x9166b15C...D1f1B3008
0 ETH0.011921984.8
Verdict67664052018-11-24 22:14:182283 days ago1543097658IN
0x9166b15C...D1f1B3008
0 ETH0.005167347.2
Start Revealing ...67658932018-11-24 20:13:182283 days ago1543090398IN
0x9166b15C...D1f1B3008
0 ETH0.000276666
Start Voting Cas...67597582018-11-23 20:13:422284 days ago1543004022IN
0x9166b15C...D1f1B3008
0 ETH0.000443067.2
Open Case67567002018-11-23 8:13:002285 days ago1542960780IN
0x9166b15C...D1f1B3008
0 ETH0.010003314
Verdict67132452018-11-16 5:05:142292 days ago1542344714IN
0x9166b15C...D1f1B3008
0 ETH0.006601799.6
Start Revealing ...67127272018-11-16 3:04:482292 days ago1542337488IN
0x9166b15C...D1f1B3008
0 ETH0.0007746416.8
View all transactions

Latest 8 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
68250082018-12-04 14:18:312273 days ago1543933111
0x9166b15C...D1f1B3008
0.0001 ETH
66479572018-11-05 12:21:492302 days ago1541420509
0x9166b15C...D1f1B3008
0.00007 ETH
66478442018-11-05 11:53:502302 days ago1541418830
0x9166b15C...D1f1B3008
0.0000001 ETH
66297202018-11-02 12:37:432305 days ago1541162263
0x9166b15C...D1f1B3008
0.1 ETH
65012362018-10-12 12:38:542326 days ago1539347934
0x9166b15C...D1f1B3008
0.01 ETH
64883882018-10-10 10:25:542328 days ago1539167154
0x9166b15C...D1f1B3008
0.0005 ETH
64086372018-09-27 10:48:552341 days ago1538045335
0x9166b15C...D1f1B3008
0.0004 ETH
62889462018-09-07 15:18:572361 days ago1536333537
0x9166b15C...D1f1B3008
0.002 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Board

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-11-16
*/

contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    emit OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

library Utils {
     /* Not secured random number generation, but it's enough for the perpose of implementaion particular case*/
    function almostRnd(uint min, uint max) internal view returns(uint)
    {
        return uint(keccak256(block.timestamp, block.blockhash(block.number))) % (max - min) + min;
    }
}
contract EternalStorage {

    /**** Storage Types *******/

    address public owner;

    mapping(bytes32 => uint256)    private uIntStorage;
    mapping(bytes32 => uint8)      private uInt8Storage;
    mapping(bytes32 => string)     private stringStorage;
    mapping(bytes32 => address)    private addressStorage;
    mapping(bytes32 => bytes)      private bytesStorage;
    mapping(bytes32 => bool)       private boolStorage;
    mapping(bytes32 => int256)     private intStorage;
    mapping(bytes32 => bytes32)    private bytes32Storage;


    /*** Modifiers ************/

    /// @dev Only allow access from the latest version of a contract in the Rocket Pool network after deployment
    modifier onlyLatestContract() {
        require(addressStorage[keccak256("contract.address", msg.sender)] != 0x0 || msg.sender == owner);
        _;
    }

    /// @dev constructor
    function EternalStorage() public {
        owner = msg.sender;
        addressStorage[keccak256("contract.address", msg.sender)] = msg.sender;
    }

    function setOwner() public {
        require(msg.sender == owner);
        addressStorage[keccak256("contract.address", owner)] = 0x0;
        owner = msg.sender;
        addressStorage[keccak256("contract.address", msg.sender)] = msg.sender;
    }

    /**** Get Methods ***********/

    /// @param _key The key for the record
    function getAddress(bytes32 _key) external view returns (address) {
        return addressStorage[_key];
    }

    /// @param _key The key for the record
    function getUint(bytes32 _key) external view returns (uint) {
        return uIntStorage[_key];
    }

      /// @param _key The key for the record
    function getUint8(bytes32 _key) external view returns (uint8) {
        return uInt8Storage[_key];
    }


    /// @param _key The key for the record
    function getString(bytes32 _key) external view returns (string) {
        return stringStorage[_key];
    }

    /// @param _key The key for the record
    function getBytes(bytes32 _key) external view returns (bytes) {
        return bytesStorage[_key];
    }

    /// @param _key The key for the record
    function getBytes32(bytes32 _key) external view returns (bytes32) {
        return bytes32Storage[_key];
    }

    /// @param _key The key for the record
    function getBool(bytes32 _key) external view returns (bool) {
        return boolStorage[_key];
    }

    /// @param _key The key for the record
    function getInt(bytes32 _key) external view returns (int) {
        return intStorage[_key];
    }

    /**** Set Methods ***********/

    /// @param _key The key for the record
    function setAddress(bytes32 _key, address _value) onlyLatestContract external {
        addressStorage[_key] = _value;
    }

    /// @param _key The key for the record
    function setUint(bytes32 _key, uint _value) onlyLatestContract external {
        uIntStorage[_key] = _value;
    }

    /// @param _key The key for the record
    function setUint8(bytes32 _key, uint8 _value) onlyLatestContract external {
        uInt8Storage[_key] = _value;
    }

    /// @param _key The key for the record
    function setString(bytes32 _key, string _value) onlyLatestContract external {
        stringStorage[_key] = _value;
    }

    /// @param _key The key for the record
    function setBytes(bytes32 _key, bytes _value) onlyLatestContract external {
        bytesStorage[_key] = _value;
    }

    /// @param _key The key for the record
    function setBytes32(bytes32 _key, bytes32 _value) onlyLatestContract external {
        bytes32Storage[_key] = _value;
    }

    /// @param _key The key for the record
    function setBool(bytes32 _key, bool _value) onlyLatestContract external {
        boolStorage[_key] = _value;
    }

    /// @param _key The key for the record
    function setInt(bytes32 _key, int _value) onlyLatestContract external {
        intStorage[_key] = _value;
    }

    /**** Delete Methods ***********/

    /// @param _key The key for the record
    function deleteAddress(bytes32 _key) onlyLatestContract external {
        delete addressStorage[_key];
    }

    /// @param _key The key for the record
    function deleteUint(bytes32 _key) onlyLatestContract external {
        delete uIntStorage[_key];
    }

     /// @param _key The key for the record
    function deleteUint8(bytes32 _key) onlyLatestContract external {
        delete uInt8Storage[_key];
    }

    /// @param _key The key for the record
    function deleteString(bytes32 _key) onlyLatestContract external {
        delete stringStorage[_key];
    }

    /// @param _key The key for the record
    function deleteBytes(bytes32 _key) onlyLatestContract external {
        delete bytesStorage[_key];
    }

    /// @param _key The key for the record
    function deleteBytes32(bytes32 _key) onlyLatestContract external {
        delete bytes32Storage[_key];
    }

    /// @param _key The key for the record
    function deleteBool(bytes32 _key) onlyLatestContract external {
        delete boolStorage[_key];
    }

    /// @param _key The key for the record
    function deleteInt(bytes32 _key) onlyLatestContract external {
        delete intStorage[_key];
    }
}

contract EIP20 {
    /* This is a slight change to the ERC20 base standard.
    function totalSupply() constant returns (uint256 supply);
    is replaced with:
    uint256 public totalSupply;
    This automatically creates a getter function for the totalSupply.
    This is moved to the base contract since public getter functions are not
    currently recognised as an implementation of the matching abstract
    function by the compiler.
    */
    /// total amount of tokens
    uint256 public totalSupply;

    /// @param _owner The address from which the balance will be retrieved
    /// @return The balance
    function balanceOf(address _owner) public view returns (uint256 balance);

    /// @notice send `_value` token to `_to` from `msg.sender`
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address _to, uint256 _value) public returns (bool success);

    /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
    /// @param _from The address of the sender
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);

    /// @notice `msg.sender` approves `_spender` to spend `_value` tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @param _value The amount of tokens to be approved for transfer
    /// @return Whether the approval was successful or not
    function approve(address _spender, uint256 _value) public returns (bool success);

    /// @param _owner The address of the account owning tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens allowed to spent
    function allowance(address _owner, address _spender) public view returns (uint256 remaining);

    // solhint-disable-next-line no-simple-event-func-name  
    event Transfer(address indexed _from, address indexed _to, uint256 _value); 
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}
contract Token {
    function balanceOf(address owner) public view returns (uint256 balance);

    function transfer(address to, uint256 value) public returns (bool success);

    function transferFrom(address from, address to, uint256 value) public returns (bool success);

    function approve(address spender, uint256 value) public returns (bool success);

    function allowance(address owner, address spender) public view returns (uint256 remaining);
}
contract IBoardConfig is Ownable {

    uint constant decimals = 10 ** uint(18);
    uint8 public version;

    function resetValuesToDefault() external;

    function setStorageAddress(address storageAddress) external;

    function getRefereeFee() external view returns (uint);
    function getRefereeFeeEth() external view returns(uint);

    function getVoteTokenPrice() external view returns (uint);
    function setVoteTokenPrice(uint value) external;

    function getVoteTokenPriceEth() external view returns (uint);
    function setVoteTokenPriceEth(uint value) external;

    function getVoteTokensPerRequest() external view returns (uint);
    function setVoteTokensPerRequest(uint voteTokens) external;

    function getTimeToStartVotingCase() external view returns (uint);
    function setTimeToStartVotingCase(uint value) external;

    function getTimeToRevealVotesCase() external view returns (uint);
    function setTimeToRevealVotesCase(uint value) external;

    function getTimeToCloseCase() external view returns (uint);
    function setTimeToCloseCase(uint value) external;

    function getRefereeCountPerCase() external view returns(uint);
    function setRefereeCountPerCase(uint refereeCount) external;

    function getRefereeNeedCountPerCase() external view returns(uint);
    function setRefereeNeedCountPerCase(uint refereeCount) external;

    function getFullConfiguration()
    external view returns(
        uint voteTokenPrice, uint voteTokenPriceEth, uint voteTokenPerRequest,
        uint refereeCountPerCase, uint refereeNeedCountPerCase,
        uint timeToStartVoting, uint timeToRevealVotes, uint timeToClose
    );

    function getCaseDatesFromNow() public view returns(uint[] dates);

}
library RefereeCasesLib {

    function setRefereesToCase(address storageAddress, address[] referees, bytes32 caseId) public {
        for (uint i = 0; i < referees.length; i++) {
            setRefereeToCase(storageAddress, referees[i], caseId, i);
        }
        setRefereeCountForCase(storageAddress, caseId, referees.length);
    }

    function isRefereeVoted(address storageAddress, address referee, bytes32 caseId) public view returns (bool) {
        return EternalStorage(storageAddress).getBool(keccak256("case.referees.voted", caseId, referee));
    }

    function setRefereeVote(address storageAddress, bytes32 caseId, address referee, bool forApplicant) public {
        uint index = getRefereeVotesFor(storageAddress, caseId, forApplicant);
        EternalStorage(storageAddress).setAddress(keccak256("case.referees.vote", caseId, forApplicant, index), referee);
        setRefereeVotesFor(storageAddress, caseId,  forApplicant, index + 1);
    }

    function getRefereeVoteForByIndex(address storageAddress, bytes32 caseId, bool forApplicant, uint index) public view returns (address) {
        return EternalStorage(storageAddress).getAddress(keccak256("case.referees.vote", caseId, forApplicant, index));
    }

    function getRefereeVotesFor(address storageAddress, bytes32 caseId, bool forApplicant) public view returns (uint) {
        return EternalStorage(storageAddress).getUint(keccak256("case.referees.votes.count", caseId, forApplicant));
    }

    function setRefereeVotesFor(address storageAddress, bytes32 caseId, bool forApplicant, uint votes) public {
        EternalStorage(storageAddress).setUint(keccak256("case.referees.votes.count", caseId, forApplicant), votes);
    }

    function getRefereeCountByCase(address storageAddress, bytes32 caseId) public view returns (uint) {
        return EternalStorage(storageAddress).getUint(keccak256("case.referees.count", caseId));
    }

    function setRefereeCountForCase(address storageAddress, bytes32 caseId, uint value) public {
        EternalStorage(storageAddress).setUint(keccak256("case.referees.count", caseId), value);
    }

    function getRefereeByCase(address storageAddress, bytes32 caseId, uint index) public view returns (address) {
        return EternalStorage(storageAddress).getAddress(keccak256("case.referees", caseId, index));
    }

    function isRefereeSetToCase(address storageAddress, address referee, bytes32 caseId) public view returns(bool) {
        return EternalStorage(storageAddress).getBool(keccak256("case.referees", caseId, referee));
    }
    
    function setRefereeToCase(address storageAddress, address referee, bytes32 caseId, uint index) public {
        EternalStorage st = EternalStorage(storageAddress);
        st.setAddress(keccak256("case.referees", caseId, index), referee);
        st.setBool(keccak256("case.referees", caseId, referee), true);
    }

    function getRefereeVoteHash(address storageAddress, bytes32 caseId, address referee) public view returns (bytes32) {
        return EternalStorage(storageAddress).getBytes32(keccak256("case.referees.vote.hash", caseId, referee));
    }

    function setRefereeVoteHash(address storageAddress, bytes32 caseId, address referee, bytes32 voteHash) public {
        uint caseCount = getRefereeVoteHashCount(storageAddress, caseId);
        EternalStorage(storageAddress).setBool(keccak256("case.referees.voted", caseId, referee), true);
        EternalStorage(storageAddress).setBytes32(keccak256("case.referees.vote.hash", caseId, referee), voteHash);
        EternalStorage(storageAddress).setUint(keccak256("case.referees.vote.hash.count", caseId), caseCount + 1);
    }

    function getRefereeVoteHashCount(address storageAddress, bytes32 caseId) public view returns(uint) {
        return EternalStorage(storageAddress).getUint(keccak256("case.referees.vote.hash.count", caseId));
    }

    function getRefereesFor(address storageAddress, bytes32 caseId, bool forApplicant)
    public view returns(address[]) {
        uint n = getRefereeVotesFor(storageAddress, caseId, forApplicant);
        address[] memory referees = new address[](n);
        for (uint i = 0; i < n; i++) {
            referees[i] = getRefereeVoteForByIndex(storageAddress, caseId, forApplicant, i);
        }
        return referees;
    }

    function getRefereesByCase(address storageAddress, bytes32 caseId)
    public view returns (address[]) {
        uint n = getRefereeCountByCase(storageAddress, caseId);
        address[] memory referees = new address[](n);
        for (uint i = 0; i < n; i++) {
            referees[i] = getRefereeByCase(storageAddress, caseId, i);
        }
        return referees;
    }

}
contract Withdrawable is Ownable {
    function withdrawEth(uint value) external onlyOwner {
        require(address(this).balance >= value);
        msg.sender.transfer(value);
    }

    function withdrawToken(address token, uint value) external onlyOwner {
        require(Token(token).balanceOf(address(this)) >= value, "Not enough tokens");
        require(Token(token).transfer(msg.sender, value));
    }
}

library CasesLib {

    enum CaseStatus {OPENED, VOTING, REVEALING, CLOSED, CANCELED}
    enum CaseCanceledCode { NOT_ENOUGH_VOTES, EQUAL_NUMBER_OF_VOTES }

    function getCase(address storageAddress, bytes32 caseId)
    public view returns ( address applicant, address respondent,
        bytes32 deal, uint amount,
        uint refereeAward,
        bytes32 title, uint8 status, uint8 canceledCode,
        bool won, bytes32 applicantDescriptionHash,
        bytes32 respondentDescriptionHash, bool isEthRefereeAward)
    {
        EternalStorage st = EternalStorage(storageAddress);
        applicant = st.getAddress(keccak256("case.applicant", caseId));
        respondent = st.getAddress(keccak256("case.respondent", caseId));
        deal = st.getBytes32(keccak256("case.deal", caseId));
        amount = st.getUint(keccak256("case.amount", caseId));
        won = st.getBool(keccak256("case.won", caseId));
        status = st.getUint8(keccak256("case.status", caseId));
        canceledCode = st.getUint8(keccak256("case.canceled.cause.code", caseId));
        refereeAward = st.getUint(keccak256("case.referee.award", caseId));
        title = st.getBytes32(keccak256("case.title", caseId));
        applicantDescriptionHash = st.getBytes32(keccak256("case.applicant.description", caseId));
        respondentDescriptionHash = st.getBytes32(keccak256("case.respondent.description", caseId));
        isEthRefereeAward = st.getBool(keccak256("case.referee.award.eth", caseId));
    }

    function getCaseDates(address storageAddress, bytes32 caseId)
    public view returns (uint date, uint votingDate, uint revealingDate, uint closeDate)
    {
        EternalStorage st = EternalStorage(storageAddress);
        date = st.getUint(keccak256("case.date", caseId));
        votingDate = st.getUint(keccak256("case.date.voting", caseId));
        revealingDate = st.getUint(keccak256("case.date.revealing", caseId));
        closeDate = st.getUint(keccak256("case.date.close", caseId));
    }

    function addCase(
        address storageAddress, address applicant, 
        address respondent, bytes32 deal, 
        uint amount, uint refereeAward,
        bytes32 title, string applicantDescription,
        uint[] dates, uint refereeCountNeed, bool isEthRefereeAward
    )
    public returns(bytes32 caseId)
    {
        EternalStorage st = EternalStorage(storageAddress);
        caseId = keccak256(applicant, respondent, deal, dates[0], title, amount);
        st.setAddress(keccak256("case.applicant", caseId), applicant);
        st.setAddress(keccak256("case.respondent", caseId), respondent);
        st.setBytes32(keccak256("case.deal", caseId), deal);
        st.setUint(keccak256("case.amount", caseId), amount);
        st.setUint(keccak256("case.date", caseId), dates[0]);
        st.setUint(keccak256("case.date.voting", caseId), dates[1]);
        st.setUint(keccak256("case.date.revealing", caseId), dates[2]);
        st.setUint(keccak256("case.date.close", caseId), dates[3]);
        st.setUint8(keccak256("case.status", caseId), 0);//OPENED
        st.setUint(keccak256("case.referee.award", caseId), refereeAward);
        st.setBytes32(keccak256("case.title", caseId), title);
        st.setBytes32(keccak256("case.applicant.description", caseId), keccak256(applicantDescription));
        st.setBool(keccak256("case.referee.award.eth", caseId), isEthRefereeAward);
        st.setUint(keccak256("case.referee.count.need", caseId), refereeCountNeed);
    }

    function setCaseWon(address storageAddress, bytes32 caseId, bool won) public
    {
        EternalStorage st = EternalStorage(storageAddress);
        st.setBool(keccak256("case.won", caseId), won);
    }

    function setCaseStatus(address storageAddress, bytes32 caseId, CaseStatus status) public
    {
        uint8 statusCode = uint8(status);
        require(statusCode >= 0 && statusCode <= uint8(CaseStatus.CANCELED));
        EternalStorage(storageAddress).setUint8(keccak256("case.status", caseId), statusCode);
    }

    function getCaseStatus(address storageAddress, bytes32 caseId) public view returns(CaseStatus) {
        return CaseStatus(EternalStorage(storageAddress).getUint8(keccak256("case.status", caseId)));
    }

    function setCaseCanceledCode(address storageAddress, bytes32 caseId, CaseCanceledCode cause) public
    {
        uint8 causeCode = uint8(cause);
        require(causeCode >= 0 && causeCode <= uint8(CaseCanceledCode.EQUAL_NUMBER_OF_VOTES));
        EternalStorage(storageAddress).setUint8(keccak256("case.canceled.cause.code", caseId), causeCode);
    }

    function getCaseDate(address storageAddress, bytes32 caseId) public view returns(uint) {
        return EternalStorage(storageAddress).getUint(keccak256("case.date", caseId));
    }

    function getRespondentDescription(address storageAddress, bytes32 caseId) public view returns(bytes32) {
        return EternalStorage(storageAddress).getBytes32(keccak256("case.respondent.description", caseId));
    }

    function setRespondentDescription(address storageAddress, bytes32 caseId, string description) public {
        EternalStorage(storageAddress).setBytes32(keccak256("case.respondent.description", caseId), keccak256(description));
    }

    function getApplicant(address storageAddress, bytes32 caseId) public view returns(address) {
        return EternalStorage(storageAddress).getAddress(keccak256("case.applicant", caseId));
    }

    function getRespondent(address storageAddress, bytes32 caseId) public view returns(address) {
        return EternalStorage(storageAddress).getAddress(keccak256("case.respondent", caseId));
    }

    function getRefereeAward(address storageAddress, bytes32 caseId) public view returns(uint) {
        return EternalStorage(storageAddress).getUint(keccak256("case.referee.award", caseId));
    }

    function getVotingDate(address storageAddress, bytes32 caseId) public view returns(uint) {
        return EternalStorage(storageAddress).getUint(keccak256("case.date.voting", caseId));
    }

    function getRevealingDate(address storageAddress, bytes32 caseId) public view returns(uint) {
        return EternalStorage(storageAddress).getUint(keccak256("case.date.revealing", caseId));
    }

    function getCloseDate(address storageAddress, bytes32 caseId) public view returns(uint) {
        return EternalStorage(storageAddress).getUint(keccak256("case.date.close", caseId));
    }

    function getRefereeCountNeed(address storageAddress, bytes32 caseId) public view returns(uint) {
        return EternalStorage(storageAddress).getUint(keccak256("case.referee.count.need", caseId));
    }

    function isEthRefereeAward(address storageAddress, bytes32 caseId) public view returns(bool) {
        return EternalStorage(storageAddress).getBool(keccak256("case.referee.award.eth", caseId));
    }
}
library VoteTokenLib  {

    function getVotes(address storageAddress, address account) public view returns(uint) {
        return EternalStorage(storageAddress).getUint(keccak256("vote.token.balance", account));
    }

    function increaseVotes(address storageAddress, address account, uint256 diff) public {
        setVotes(storageAddress, account, getVotes(storageAddress, account) + diff);
    }

    function decreaseVotes(address storageAddress, address account, uint256 diff) public {
        setVotes(storageAddress, account, getVotes(storageAddress, account) - diff);
    }

    function setVotes(address storageAddress, address account, uint256 value) public {
        EternalStorage(storageAddress).setUint(keccak256("vote.token.balance", account), value);
    }

}
contract PaymentHolder is Ownable {

    modifier onlyAllowed() {
        require(allowed[msg.sender]);
        _;
    }

    modifier onlyUpdater() {
        require(msg.sender == updater);
        _;
    }

    mapping(address => bool) public allowed;
    address public updater;

    /*-----------------MAINTAIN METHODS------------------*/

    function setUpdater(address _updater)
    external onlyOwner {
        updater = _updater;
    }

    function migrate(address newHolder, address[] tokens, address[] _allowed)
    external onlyOwner {
        require(PaymentHolder(newHolder).update.value(address(this).balance)(_allowed));
        for (uint256 i = 0; i < tokens.length; i++) {
            address token = tokens[i];
            uint256 balance = Token(token).balanceOf(this);
            if (balance > 0) {
                require(Token(token).transfer(newHolder, balance));
            }
        }
    }

    function update(address[] _allowed)
    external payable onlyUpdater returns(bool) {
        for (uint256 i = 0; i < _allowed.length; i++) {
            allowed[_allowed[i]] = true;
        }
        return true;
    }

    /*-----------------OWNER FLOW------------------*/

    function allow(address to) 
    external onlyOwner { allowed[to] = true; }

    function prohibit(address to)
    external onlyOwner { allowed[to] = false; }

    /*-----------------ALLOWED FLOW------------------*/

    function depositEth()
    public payable onlyAllowed returns (bool) {
        //Default function to receive eth
        return true;
    }

    function withdrawEth(address to, uint256 amount)
    public onlyAllowed returns(bool) {
        require(address(this).balance >= amount, "Not enough ETH balance");
        to.transfer(amount);
        return true;
    }

    function withdrawToken(address to, uint256 amount, address token)
    public onlyAllowed returns(bool) {
        require(Token(token).balanceOf(this) >= amount, "Not enough token balance");
        require(Token(token).transfer(to, amount));
        return true;
    }

}
library RefereesLib {

    struct Referees {
        address[] addresses;
    }

    function addReferee(address storageAddress, address referee) public {
        uint id = getRefereeCount(storageAddress);
        setReferee(storageAddress, referee, id, true);
        setRefereeCount(storageAddress, id + 1);
    }

    function getRefereeCount(address storageAddress) public view returns(uint) {
        return EternalStorage(storageAddress).getUint(keccak256("referee.count"));
    }

    function setRefereeCount(address storageAddress, uint value) public {
        EternalStorage(storageAddress).setUint(keccak256("referee.count"), value);
    }

    function setReferee(address storageAddress, address referee, uint id, bool applied) public {
        EternalStorage st = EternalStorage(storageAddress);
        st.setBool(keccak256("referee.applied", referee), applied);
        st.setAddress(keccak256("referee.address", id), referee);
    }

    function isRefereeApplied(address storageAddress, address referee) public view returns(bool) {
        return EternalStorage(storageAddress).getBool(keccak256("referee.applied", referee));
    }

    function setRefereeApplied(address storageAddress, address referee, bool applied) public {
        EternalStorage(storageAddress).setBool(keccak256("referee.applied", referee), applied);
    }

    function getRefereeAddress(address storageAddress, uint id) public view returns(address) {
        return EternalStorage(storageAddress).getAddress(keccak256("referee.address", id));
    }
    
    function getRandomRefereesToCase(address storageAddress, address applicant, address respondent, uint256 targetCount) 
    public view returns(address[] foundReferees)  {
        uint refereesCount = getRefereeCount(storageAddress);
        require(refereesCount >= targetCount);
        foundReferees = new address[](targetCount);
        uint id = Utils.almostRnd(0, refereesCount);
        uint found = 0;
        for (uint i = 0; i < refereesCount; i++) {
            address referee = getRefereeAddress(storageAddress, id);
            id = id + 1;
            id = id % refereesCount;
            uint voteBalance = VoteTokenLib.getVotes(storageAddress, referee);
            if (referee != applicant && referee != respondent && voteBalance > 0) {
                foundReferees[found] = referee;
                found++;
            }
            if (found == targetCount) {
                break;
            }
        }
        require(found == targetCount);
    }
}
contract BkxToken is EIP20 {
    function increaseApproval (address _spender, uint _addedValue) public returns (bool success);
    function decreaseApproval (address _spender, uint _subtractedValue)public returns (bool success);
}

contract IBoard is Ownable {

    event CaseOpened(bytes32 caseId, address applicant, address respondent, bytes32 deal, uint amount, uint refereeAward, bytes32 title, string applicantDescription, uint[] dates, uint refereeCountNeed, bool isEthRefereeAward);
    event CaseCommentedByRespondent(bytes32 caseId, address respondent, string comment);
    event CaseVoting(bytes32 caseId);
    event CaseVoteCommitted(bytes32 caseId, address referee, bytes32 voteHash);
    event CaseRevealingVotes(bytes32 caseId);
    event CaseVoteRevealed(bytes32 caseId, address referee, uint8 voteOption, bytes32 salt);
    event CaseClosed(bytes32 caseId, bool won);
    event CaseCanceled(bytes32 caseId, uint8 causeCode);

    event RefereesAssignedToCase(bytes32 caseId, address[] referees);
    event RefereeVoteBalanceChanged(address referee, uint balance);
    event RefereeAwarded(address referee, bytes32 caseId, uint award);

    address public lib;
    uint public version;
    IBoardConfig public config;
    BkxToken public bkxToken;
    address public admin;
    address public paymentHolder;

    modifier onlyOwnerOrAdmin() {
        require(msg.sender == admin || msg.sender == owner);
        _;
    }

    function withdrawEth(uint value) external;

    function withdrawBkx(uint value) external;

    function setStorageAddress(address storageAddress) external;

    function setConfigAddress(address configAddress) external;

    function setBkxToken(address tokenAddress) external;

    function setPaymentHolder(address paymentHolder) external;

    function setAdmin(address admin) external;

    function applyForReferee() external payable;

    function addVoteTokens(address referee) external;

    function openCase(address respondent, bytes32 deal, uint amount, uint refereeAward, bytes32 title, string description) external payable;

    function setRespondentDescription(bytes32 caseId, string description) external;

    function startVotingCase(bytes32 caseId) external;

    function createVoteHash(uint8 voteOption, bytes32 salt) public view returns(bytes32);

    function commitVote(bytes32 caseId, bytes32 voteHash) external;

    function verifyVote(bytes32 caseId, address referee, uint8 voteOption, bytes32 salt) public view returns(bool);

    function startRevealingVotes(bytes32 caseId) external;

    function revealVote(bytes32 caseId, address referee, uint8 voteOption, bytes32 salt) external;

    function revealVotes(bytes32 caseId, address[] referees, uint8[] voteOptions, bytes32[] salts) external;

    function verdict(bytes32 caseId) external;
}


contract Board is IBoard {

    using SafeMath for uint;
    using VoteTokenLib for address;
    using CasesLib for address;
    using RefereesLib for address;
    using RefereeCasesLib for address;

    modifier onlyRespondent(bytes32 caseId) {
        require(msg.sender == lib.getRespondent(caseId));
        _;
    }

    modifier hasStatus(bytes32 caseId, CasesLib.CaseStatus state) {
        require(state == lib.getCaseStatus(caseId));
        _;
    }

    modifier before(uint date) {
        require(now <= date);
        _;
    }

    modifier laterOn(uint date) {
        require(now >= date);
        _;
    }

    function Board(address storageAddress, address configAddress, address _paymentHolder) public {
        version = 2;
        config = IBoardConfig(configAddress);
        lib = storageAddress;
        //check real BKX address https://etherscan.io/token/0x45245bc59219eeaAF6cD3f382e078A461FF9De7B
        bkxToken = BkxToken(0x45245bc59219eeaAF6cD3f382e078A461FF9De7B);
        admin = 0xE0b6C095D722961C2C11E55b97fCd0C8bd7a1cD2;
        paymentHolder = _paymentHolder;
    }

    function withdrawEth(uint value) external onlyOwner {
        require(address(this).balance >= value);
        msg.sender.transfer(value);
    }

    function withdrawBkx(uint value) external onlyOwner {
        require(bkxToken.balanceOf(address(this)) >= value);
        require(bkxToken.transfer(msg.sender, value));
    }

    /* configuration */
    function setStorageAddress(address storageAddress) external onlyOwner {
        lib = storageAddress;
    }

    function setConfigAddress(address configAddress) external onlyOwner {
        config = IBoardConfig(configAddress);
    }

    /* dependency tokens */
    function setBkxToken(address tokenAddress) external onlyOwner {
        bkxToken = BkxToken(tokenAddress);
    }

    function setPaymentHolder(address _paymentHolder) external onlyOwner {
        paymentHolder = _paymentHolder;
    }

    function setAdmin(address newAdmin) external onlyOwner {
        admin = newAdmin;
    }

    function applyForReferee() external payable {
        uint refereeFee = msg.value == 0 ? config.getRefereeFee() : config.getRefereeFeeEth();
        withdrawPayment(refereeFee);
        addVotes(msg.sender);
    }

    function addVoteTokens(address referee) external onlyOwnerOrAdmin {
        addVotes(referee);
    }

    function addVotes(address referee) private {
        uint refereeTokens = config.getVoteTokensPerRequest();
        if (!lib.isRefereeApplied(referee)) {
            lib.addReferee(referee);
        }
        uint balance = refereeTokens.add(lib.getVotes(referee));
        lib.setVotes(referee, balance);
        emit RefereeVoteBalanceChanged(referee, balance);
    }

    function openCase(address respondent, bytes32 deal, uint amount, uint refereeAward, bytes32 title, string description)
    external payable {
        require(msg.sender != respondent);
        withdrawPayment(refereeAward);
        uint[] memory dates = config.getCaseDatesFromNow();
        uint refereeCountNeed = config.getRefereeNeedCountPerCase();
        bytes32 caseId = lib.addCase(msg.sender, respondent, deal, amount, refereeAward, title, description, dates, refereeCountNeed, msg.value != 0);
        emit CaseOpened(caseId, msg.sender, respondent, deal, amount, refereeAward, title, description, dates, refereeCountNeed, msg.value != 0);
        assignRefereesToCase(caseId, msg.sender, respondent);
    }

    function withdrawPayment(uint256 amount) private {
        if(msg.value != 0) {
            require(msg.value == amount, "ETH amount must be equal amount");
            require(PaymentHolder(paymentHolder).depositEth.value(msg.value)());
        } else {
            require(bkxToken.allowance(msg.sender, address(this)) >= amount);
            require(bkxToken.balanceOf(msg.sender) >= amount);
            require(bkxToken.transferFrom(msg.sender, paymentHolder, amount));
        }
    }

    function assignRefereesToCase(bytes32 caseId, address applicant, address respondent) private  {
        uint targetCount = config.getRefereeCountPerCase();
        address[] memory foundReferees = lib.getRandomRefereesToCase(applicant, respondent, targetCount);
        for (uint i = 0; i < foundReferees.length; i++) {
            address referee = foundReferees[i];
            uint voteBalance = lib.getVotes(referee);
            voteBalance -= 1;
            lib.setVotes(referee, voteBalance);
            emit RefereeVoteBalanceChanged(referee, voteBalance);
        }
        lib.setRefereesToCase(foundReferees, caseId);
        emit RefereesAssignedToCase(caseId, foundReferees);
    }

    function setRespondentDescription(bytes32 caseId, string description)
    external onlyRespondent(caseId) hasStatus(caseId, CasesLib.CaseStatus.OPENED) before(lib.getVotingDate(caseId)) {
        require(lib.getRespondentDescription(caseId) == 0);
        lib.setRespondentDescription(caseId, description);
        lib.setCaseStatus(caseId, CasesLib.CaseStatus.VOTING);
        emit CaseCommentedByRespondent(caseId, msg.sender, description);
        emit CaseVoting(caseId);
    }

    function startVotingCase(bytes32 caseId)
    external hasStatus(caseId, CasesLib.CaseStatus.OPENED) laterOn(lib.getVotingDate(caseId)) {
        lib.setCaseStatus(caseId, CasesLib.CaseStatus.VOTING);
        emit CaseVoting(caseId);
    }

    function commitVote(bytes32 caseId, bytes32 voteHash)
    external hasStatus(caseId, CasesLib.CaseStatus.VOTING) before(lib.getRevealingDate(caseId))
    {
        require(lib.isRefereeSetToCase(msg.sender, caseId)); //referee must be set to case
        require(!lib.isRefereeVoted(msg.sender, caseId)); //referee can not vote twice
        lib.setRefereeVoteHash(caseId, msg.sender, voteHash);
        emit CaseVoteCommitted(caseId, msg.sender, voteHash);
        if (lib.getRefereeVoteHashCount(caseId) == lib.getRefereeCountByCase(caseId)) {
            lib.setCaseStatus(caseId, CasesLib.CaseStatus.REVEALING);
            emit CaseRevealingVotes(caseId);
        }
    }

    function startRevealingVotes(bytes32 caseId)
    external hasStatus(caseId, CasesLib.CaseStatus.VOTING) laterOn(lib.getRevealingDate(caseId))
    {
        lib.setCaseStatus(caseId, CasesLib.CaseStatus.REVEALING);
        emit CaseRevealingVotes(caseId);
    }

    function revealVote(bytes32 caseId, address referee, uint8 voteOption, bytes32 salt)
    external hasStatus(caseId, CasesLib.CaseStatus.REVEALING) before(lib.getCloseDate(caseId))
    {
        doRevealVote(caseId, referee, voteOption, salt);
        checkShouldMakeVerdict(caseId);
    }

    function revealVotes(bytes32 caseId, address[] referees, uint8[] voteOptions, bytes32[] salts)
    external hasStatus(caseId, CasesLib.CaseStatus.REVEALING) before(lib.getCloseDate(caseId))
    {
        require((referees.length == voteOptions.length) && (referees.length == salts.length));
        for (uint i = 0; i < referees.length; i++) {
            doRevealVote(caseId, referees[i], voteOptions[i], salts[i]);
        }
        checkShouldMakeVerdict(caseId);
    }

    function checkShouldMakeVerdict(bytes32 caseId)
    private {
        if (lib.getRefereeVotesFor(caseId, true) + lib.getRefereeVotesFor(caseId, false) == lib.getRefereeVoteHashCount(caseId)) {
            makeVerdict(caseId);
        }
    }

    function doRevealVote(bytes32 caseId, address referee, uint8 voteOption, bytes32 salt) private {
        require(verifyVote(caseId, referee, voteOption, salt));
        lib.setRefereeVote(caseId, referee,  voteOption == 0);
        emit CaseVoteRevealed(caseId, referee, voteOption, salt);
    }

    function createVoteHash(uint8 voteOption, bytes32 salt)
    public view returns(bytes32) {
        return keccak256(voteOption, salt);
    }

    function verifyVote(bytes32 caseId, address referee, uint8 voteOption, bytes32 salt)
    public view returns(bool){
        return lib.getRefereeVoteHash(caseId, referee) == keccak256(voteOption, salt);
    }

    function verdict(bytes32 caseId)
    external hasStatus(caseId, CasesLib.CaseStatus.REVEALING) laterOn(lib.getCloseDate(caseId)) {
        makeVerdict(caseId);
    }

    function makeVerdict(bytes32 caseId)
    private {
        uint forApplicant = lib.getRefereeVotesFor(caseId, true);
        uint forRespondent = lib.getRefereeVotesFor(caseId, false);
        uint refereeAward = lib.getRefereeAward(caseId);
        bool isNotEnoughVotes = (forApplicant + forRespondent) < lib.getRefereeCountNeed(caseId);
        bool isEthRefereeAward = lib.isEthRefereeAward(caseId);
        if (isNotEnoughVotes || (forApplicant == forRespondent)) {
            withdrawTo(isEthRefereeAward, lib.getApplicant(caseId), refereeAward);
            lib.setCaseStatus(caseId, CasesLib.CaseStatus.CANCELED);
            CasesLib.CaseCanceledCode causeCode = isNotEnoughVotes ?
                CasesLib.CaseCanceledCode.NOT_ENOUGH_VOTES : CasesLib.CaseCanceledCode.EQUAL_NUMBER_OF_VOTES;
            lib.setCaseCanceledCode(caseId, causeCode);
            emit CaseCanceled(caseId, uint8(causeCode));
            withdrawAllRefereeVotes(caseId);
            return;
        }
        bool won = false;
        uint awardPerReferee;
        if (forApplicant > forRespondent) {
            won = true;
            awardPerReferee = refereeAward / forApplicant;
        } else {
            awardPerReferee = refereeAward / forRespondent;
        }
        lib.setCaseStatus(caseId, CasesLib.CaseStatus.CLOSED);
        lib.setCaseWon(caseId, won);
        emit CaseClosed(caseId, won);
        address[] memory wonReferees = lib.getRefereesFor(caseId, won);
        for (uint i = 0; i < wonReferees.length; i++) {
            withdrawTo(isEthRefereeAward, wonReferees[i], awardPerReferee);
            emit RefereeAwarded(wonReferees[i], caseId, awardPerReferee);
        }
        withdrawRefereeVotes(caseId);
    }

    function withdrawTo(bool isEth, address to, uint amount) private {
        if (isEth) {
            require(PaymentHolder(paymentHolder).withdrawEth(to, amount));
        } else {
            require(PaymentHolder(paymentHolder).withdrawToken(to, amount, address(bkxToken)));
        }
    } 

    function withdrawAllRefereeVotes(bytes32 caseId) private {
        address[] memory referees = lib.getRefereesByCase(caseId);
        for (uint i = 0; i < referees.length; i++) {
            withdrawRefereeVote(referees[i]);
        }
    }

    function withdrawRefereeVotes(bytes32 caseId)
    private {
        address[] memory referees = lib.getRefereesByCase(caseId);
        for (uint i = 0; i < referees.length; i++) {
            if (!lib.isRefereeVoted(referees[i], caseId)) {
                withdrawRefereeVote(referees[i]);
            }
        }
    }

    function withdrawRefereeVote(address referee)
    private {
        uint voteBalance = lib.getVotes(referee);
        voteBalance += 1;
        lib.setVotes(referee, voteBalance);
        emit RefereeVoteBalanceChanged(referee, voteBalance);
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"withdrawBkx","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"caseId","type":"bytes32"},{"name":"voteHash","type":"bytes32"}],"name":"commitVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"applyForReferee","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"caseId","type":"bytes32"}],"name":"startRevealingVotes","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"storageAddress","type":"address"}],"name":"setStorageAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"}],"name":"setBkxToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paymentHolder","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"setAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"config","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"caseId","type":"bytes32"}],"name":"verdict","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_paymentHolder","type":"address"}],"name":"setPaymentHolder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"voteOption","type":"uint8"},{"name":"salt","type":"bytes32"}],"name":"createVoteHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"configAddress","type":"address"}],"name":"setConfigAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"caseId","type":"bytes32"},{"name":"referees","type":"address[]"},{"name":"voteOptions","type":"uint8[]"},{"name":"salts","type":"bytes32[]"}],"name":"revealVotes","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lib","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"caseId","type":"bytes32"},{"name":"referee","type":"address"},{"name":"voteOption","type":"uint8"},{"name":"salt","type":"bytes32"}],"name":"verifyVote","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"caseId","type":"bytes32"}],"name":"startVotingCase","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bkxToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"respondent","type":"address"},{"name":"deal","type":"bytes32"},{"name":"amount","type":"uint256"},{"name":"refereeAward","type":"uint256"},{"name":"title","type":"bytes32"},{"name":"description","type":"string"}],"name":"openCase","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"caseId","type":"bytes32"},{"name":"description","type":"string"}],"name":"setRespondentDescription","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"withdrawEth","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"referee","type":"address"}],"name":"addVoteTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"caseId","type":"bytes32"},{"name":"referee","type":"address"},{"name":"voteOption","type":"uint8"},{"name":"salt","type":"bytes32"}],"name":"revealVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"storageAddress","type":"address"},{"name":"configAddress","type":"address"},{"name":"_paymentHolder","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"caseId","type":"bytes32"},{"indexed":false,"name":"applicant","type":"address"},{"indexed":false,"name":"respondent","type":"address"},{"indexed":false,"name":"deal","type":"bytes32"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"refereeAward","type":"uint256"},{"indexed":false,"name":"title","type":"bytes32"},{"indexed":false,"name":"applicantDescription","type":"string"},{"indexed":false,"name":"dates","type":"uint256[]"},{"indexed":false,"name":"refereeCountNeed","type":"uint256"},{"indexed":false,"name":"isEthRefereeAward","type":"bool"}],"name":"CaseOpened","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"caseId","type":"bytes32"},{"indexed":false,"name":"respondent","type":"address"},{"indexed":false,"name":"comment","type":"string"}],"name":"CaseCommentedByRespondent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"caseId","type":"bytes32"}],"name":"CaseVoting","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"caseId","type":"bytes32"},{"indexed":false,"name":"referee","type":"address"},{"indexed":false,"name":"voteHash","type":"bytes32"}],"name":"CaseVoteCommitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"caseId","type":"bytes32"}],"name":"CaseRevealingVotes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"caseId","type":"bytes32"},{"indexed":false,"name":"referee","type":"address"},{"indexed":false,"name":"voteOption","type":"uint8"},{"indexed":false,"name":"salt","type":"bytes32"}],"name":"CaseVoteRevealed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"caseId","type":"bytes32"},{"indexed":false,"name":"won","type":"bool"}],"name":"CaseClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"caseId","type":"bytes32"},{"indexed":false,"name":"causeCode","type":"uint8"}],"name":"CaseCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"caseId","type":"bytes32"},{"indexed":false,"name":"referees","type":"address[]"}],"name":"RefereesAssignedToCase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"referee","type":"address"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"RefereeVoteBalanceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"referee","type":"address"},{"indexed":false,"name":"caseId","type":"bytes32"},{"indexed":false,"name":"award","type":"uint256"}],"name":"RefereeAwarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

608060405234801561001057600080fd5b5060405160608061426183398101604090815281516020830151919092015160008054600160a060020a031990811633179091556002805560038054600160a060020a0394851690831617905560018054948416948216949094179093556004805484167345245bc59219eeaaf6cd3f382e078a461ff9de7b17905560058054841673e0b6c095d722961c2c11e55b97fcd0c8bd7a1cd2179055600680549290911691909216179055614199806100c86000396000f3006080604052600436106101455763ffffffff60e060020a60003504166314e291e6811461014a5780633bbd2235146101645780634a0b890f1461017f57806354fd4d50146101875780635983adbd146101ae57806359b910d6146101c6578063653766d5146101e75780636c8d9a8414610208578063704b6c021461023957806379502c551461025a57806379cc6bca1461026f5780637db5c88e1461028757806382d7721a146102a857806383a12de9146102c65780638c2794cb146102e75780638da5cb5b1461032357806392801230146103385780639349a4081461034d578063a075048f1461038e578063a818d0c1146103a6578063ab6d4201146103bb578063b2fb1c52146103eb578063c311d0491461040f578063df2f945914610427578063e703ecb114610448578063f2fde38b14610475578063f851a44014610496575b600080fd5b34801561015657600080fd5b506101626004356104ab565b005b34801561017057600080fd5b5061016260043560243561060a565b610162610be8565b34801561019357600080fd5b5061019c610d08565b60408051918252519081900360200190f35b3480156101ba57600080fd5b50610162600435610d0e565b3480156101d257600080fd5b50610162600160a060020a0360043516610f3d565b3480156101f357600080fd5b50610162600160a060020a0360043516610f83565b34801561021457600080fd5b5061021d610fc9565b60408051600160a060020a039092168252519081900360200190f35b34801561024557600080fd5b50610162600160a060020a0360043516610fd8565b34801561026657600080fd5b5061021d61101e565b34801561027b57600080fd5b5061016260043561102d565b34801561029357600080fd5b50610162600160a060020a03600435166111ab565b3480156102b457600080fd5b5061019c60ff600435166024356111f1565b3480156102d257600080fd5b50610162600160a060020a0360043516611235565b3480156102f357600080fd5b5061016260048035906024803580820192908101359160443580820192908101359160643590810191013561127b565b34801561032f57600080fd5b5061021d61148b565b34801561034457600080fd5b5061021d61149a565b34801561035957600080fd5b5061037a600435600160a060020a036024351660ff604435166064356114a9565b604080519115158252519081900360200190f35b34801561039a57600080fd5b506101626004356115a3565b3480156103b257600080fd5b5061021d6117d5565b61016260048035600160a060020a031690602480359160443591606435916084359160a4359081019101356117e4565b3480156103f757600080fd5b50610162600480359060248035908101910135611c2a565b34801561041b57600080fd5b506101626004356120f0565b34801561043357600080fd5b50610162600160a060020a0360043516612146565b34801561045457600080fd5b50610162600435600160a060020a036024351660ff6044351660643561217d565b34801561048157600080fd5b50610162600160a060020a036004351661230a565b3480156104a257600080fd5b5061021d61239e565b600054600160a060020a031633146104c257600080fd5b60048054604080517f70a082310000000000000000000000000000000000000000000000000000000081523093810193909352518392600160a060020a03909216916370a082319160248083019260209291908290030181600087803b15801561052b57600080fd5b505af115801561053f573d6000803e3d6000fd5b505050506040513d602081101561055557600080fd5b5051101561056257600080fd5b60048054604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233938101939093526024830184905251600160a060020a039091169163a9059cbb9160448083019260209291908290030181600087803b1580156105d057600080fd5b505af11580156105e4573d6000803e3d6000fd5b505050506040513d60208110156105fa57600080fd5b5051151561060757600080fd5b50565b600180546040805160e360020a630922c6c1028152600160a060020a039092166004830152602482018590525184929173ebbb7e95a4d61850fad81b2bff318ed8fd76228791634916360891604480820192602092909190829003018186803b15801561067657600080fd5b505af415801561068a573d6000803e3d6000fd5b505050506040513d60208110156106a057600080fd5b505160048111156106ad57fe5b8160048111156106b957fe5b146106c357600080fd5b600154604080517f95d94285000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018690525173ebbb7e95a4d61850fad81b2bff318ed8fd762287916395d94285916044808301926020929190829003018186803b15801561074057600080fd5b505af4158015610754573d6000803e3d6000fd5b505050506040513d602081101561076a57600080fd5b50514281101561077957600080fd5b600154604080517f6a15a671000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152336024830152604482018790525173728427d1e48daa939aade5a692d54a14e452efaf91636a15a671916064808301926020929190829003018186803b1580156107fc57600080fd5b505af4158015610810573d6000803e3d6000fd5b505050506040513d602081101561082657600080fd5b5051151561083357600080fd5b600154604080517f61548c06000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152336024830152604482018790525173728427d1e48daa939aade5a692d54a14e452efaf916361548c06916064808301926020929190829003018186803b1580156108b657600080fd5b505af41580156108ca573d6000803e3d6000fd5b505050506040513d60208110156108e057600080fd5b5051156108ec57600080fd5b600154604080517fbb333e94000000000000000000000000000000000000000000000000000000008152600160a060020a03909216600483015260248201879052336044830152606482018690525173728427d1e48daa939aade5a692d54a14e452efaf9163bb333e94916084808301926000929190829003018186803b15801561097657600080fd5b505af415801561098a573d6000803e3d6000fd5b50506040805188815233602082015280820188905290517f25a48c6816dd5a19678a7d2a3c04c071cff7f4fa08dbc4e2ced1f8b7828143c09350908190036060019150a1600154604080517f10c3b71a000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018790525173728427d1e48daa939aade5a692d54a14e452efaf916310c3b71a916044808301926020929190829003018186803b158015610a4b57600080fd5b505af4158015610a5f573d6000803e3d6000fd5b505050506040513d6020811015610a7557600080fd5b5051600154604080517f5ef0b8b1000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018890525173728427d1e48daa939aade5a692d54a14e452efaf91635ef0b8b1916044808301926020929190829003018186803b158015610af457600080fd5b505af4158015610b08573d6000803e3d6000fd5b505050506040513d6020811015610b1e57600080fd5b50511415610be1576001546040805160e060020a63d03912b9028152600160a060020a03909216600483015260248201879052600260448301525173ebbb7e95a4d61850fad81b2bff318ed8fd7622879163d03912b9916064808301926000929190829003018186803b158015610b9457600080fd5b505af4158015610ba8573d6000803e3d6000fd5b50506040805188815290517fd13f92958cb3f9d795be810e016990e9af7a3fe912a8fdf1a0703b603a2fe5f89350908190036020019150a15b5050505050565b60003415610c7457600360009054906101000a9004600160a060020a0316600160a060020a0316636f2ee5de6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610c4357600080fd5b505af1158015610c57573d6000803e3d6000fd5b505050506040513d6020811015610c6d57600080fd5b5051610cf4565b600360009054906101000a9004600160a060020a0316600160a060020a031663dfe5b0446040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610cc757600080fd5b505af1158015610cdb573d6000803e3d6000fd5b505050506040513d6020811015610cf157600080fd5b50515b9050610cff816123ad565b6106073361266f565b60025481565b600180546040805160e360020a630922c6c1028152600160a060020a039092166004830152602482018490525183929173ebbb7e95a4d61850fad81b2bff318ed8fd76228791634916360891604480820192602092909190829003018186803b158015610d7a57600080fd5b505af4158015610d8e573d6000803e3d6000fd5b505050506040513d6020811015610da457600080fd5b50516004811115610db157fe5b816004811115610dbd57fe5b14610dc757600080fd5b600154604080517f95d94285000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018590525173ebbb7e95a4d61850fad81b2bff318ed8fd762287916395d94285916044808301926020929190829003018186803b158015610e4457600080fd5b505af4158015610e58573d6000803e3d6000fd5b505050506040513d6020811015610e6e57600080fd5b505142811115610e7d57600080fd5b6001546040805160e060020a63d03912b9028152600160a060020a03909216600483015260248201869052600260448301525173ebbb7e95a4d61850fad81b2bff318ed8fd7622879163d03912b9916064808301926000929190829003018186803b158015610eeb57600080fd5b505af4158015610eff573d6000803e3d6000fd5b50506040805187815290517fd13f92958cb3f9d795be810e016990e9af7a3fe912a8fdf1a0703b603a2fe5f89350908190036020019150a150505050565b600054600160a060020a03163314610f5457600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314610f9a57600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600654600160a060020a031681565b600054600160a060020a03163314610fef57600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600354600160a060020a031681565b6001546040805160e360020a630922c6c1028152600160a060020a0390921660048301526024820183905251829160029173ebbb7e95a4d61850fad81b2bff318ed8fd762287916349163608916044808301926020929190829003018186803b15801561109957600080fd5b505af41580156110ad573d6000803e3d6000fd5b505050506040513d60208110156110c357600080fd5b505160048111156110d057fe5b8160048111156110dc57fe5b146110e657600080fd5b600154604080517f5fda6620000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018590525173ebbb7e95a4d61850fad81b2bff318ed8fd76228791635fda6620916044808301926020929190829003018186803b15801561116357600080fd5b505af4158015611177573d6000803e3d6000fd5b505050506040513d602081101561118d57600080fd5b50514281111561119c57600080fd5b6111a5846129e2565b50505050565b600054600160a060020a031633146111c257600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b604080517f010000000000000000000000000000000000000000000000000000000000000060ff851602815260018101839052905190819003602101902092915050565b600054600160a060020a0316331461124c57600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6001546040805160e360020a630922c6c1028152600160a060020a0390921660048301526024820189905251600091899160029173ebbb7e95a4d61850fad81b2bff318ed8fd76228791634916360891604480820192602092909190829003018186803b1580156112eb57600080fd5b505af41580156112ff573d6000803e3d6000fd5b505050506040513d602081101561131557600080fd5b5051600481111561132257fe5b81600481111561132e57fe5b1461133857600080fd5b600154604080517f5fda6620000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018c90525173ebbb7e95a4d61850fad81b2bff318ed8fd76228791635fda6620916044808301926020929190829003018186803b1580156113b557600080fd5b505af41580156113c9573d6000803e3d6000fd5b505050506040513d60208110156113df57600080fd5b5051428110156113ee57600080fd5b88871480156113fc57508885145b151561140757600080fd5b600093505b888410156114755761146a8b8b8b8781811061142457fe5b90506020020135600160a060020a03168a8a88818110151561144257fe5b9050602002013560ff16898989818110151561145a57fe5b9050602002013560001916613339565b60019093019261140c565b61147e8b61344f565b5050505050505050505050565b600054600160a060020a031681565b600154600160a060020a031681565b604080517f010000000000000000000000000000000000000000000000000000000000000060ff85160281526001808201849052825191829003602101822090547f0cf84a50000000000000000000000000000000000000000000000000000000008352600160a060020a039081166004840152602483018890528616604483015291516000929173728427d1e48daa939aade5a692d54a14e452efaf91630cf84a5091606480820192602092909190829003018186803b15801561156d57600080fd5b505af4158015611581573d6000803e3d6000fd5b505050506040513d602081101561159757600080fd5b50511495945050505050565b6001546040805160e360020a630922c6c1028152600160a060020a0390921660048301526024820183905251829160009173ebbb7e95a4d61850fad81b2bff318ed8fd762287916349163608916044808301926020929190829003018186803b15801561160f57600080fd5b505af4158015611623573d6000803e3d6000fd5b505050506040513d602081101561163957600080fd5b5051600481111561164657fe5b81600481111561165257fe5b1461165c57600080fd5b600154604080517fd3f0d1cb000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018590525173ebbb7e95a4d61850fad81b2bff318ed8fd7622879163d3f0d1cb916044808301926020929190829003018186803b1580156116d957600080fd5b505af41580156116ed573d6000803e3d6000fd5b505050506040513d602081101561170357600080fd5b50514281111561171257600080fd5b600180546040805160e060020a63d03912b9028152600160a060020a039092166004830152602482018790526044820192909252905173ebbb7e95a4d61850fad81b2bff318ed8fd7622879163d03912b9916064808301926000929190829003018186803b15801561178357600080fd5b505af4158015611797573d6000803e3d6000fd5b50506040805187815290517f35bcd7e8326284609d6098ff8b26bc5bd69336b3efd3c12e45425fe4681816cf9350908190036020019150a150505050565b600454600160a060020a031681565b606060008033600160a060020a038b1614156117ff57600080fd5b611808876123ad565b600360009054906101000a9004600160a060020a0316600160a060020a031663e07cfabe6040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801561185b57600080fd5b505af115801561186f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561189857600080fd5b8101908080516401000000008111156118b057600080fd5b820160208101848111156118c357600080fd5b81518560208202830111640100000000821117156118e057600080fd5b5050600354604080517faa29a6650000000000000000000000000000000000000000000000000000000081529051929850600160a060020a03909116945063aa29a665935060048082019350602092918290030181600087803b15801561194657600080fd5b505af115801561195a573d6000803e3d6000fd5b505050506040513d602081101561197057600080fd5b81019080805190602001909291905050509150600160009054906101000a9004600160a060020a0316600160a060020a031673ebbb7e95a4d61850fad81b2bff318ed8fd76228763d15cd3be9091338d8d8d8d8d8d8d8d8d34600014156040518d63ffffffff1660e060020a028152600401808d600160a060020a0316600160a060020a031681526020018c600160a060020a0316600160a060020a031681526020018b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600019166000191681526020018060200180602001858152602001841515151581526020018381038352888882818152602001925080828437909101848103835287518152875160209182019250818901910280838360005b83811015611ab7578181015183820152602001611a9f565b505050509050019e50505050505050505050505050505060206040518083038186803b158015611ae657600080fd5b505af4158015611afa573d6000803e3d6000fd5b505050506040513d6020811015611b1057600080fd5b5051604080518281523360208201819052600160a060020a038e1692820192909252606081018c9052608081018b905260a081018a905260c081018990526101208101859052341515610140820181905261016060e083018181529083018990529394507fd442e1e65d09ce5f7df2526ac5185ea8a60aca4b8ff2d6ec043983f0e551f604938593928f928f928f928f928f928f928f928f928f929061010082016101808301888880828437909101848103835287518152875160209182019250818901910280838360005b83811015611bf4578181015183820152602001611bdc565b505050509050019e50505050505050505050505050505060405180910390a1611c1e81338c61363f565b50505050505050505050565b600154604080517fd94c78ad000000000000000000000000000000000000000000000000000000008152600160a060020a0390921660048301526024820185905251849173ebbb7e95a4d61850fad81b2bff318ed8fd7622879163d94c78ad91604480820192602092909190829003018186803b158015611caa57600080fd5b505af4158015611cbe573d6000803e3d6000fd5b505050506040513d6020811015611cd457600080fd5b5051600160a060020a03163314611cea57600080fd5b6001546040805160e360020a630922c6c1028152600160a060020a0390921660048301526024820186905251859160009173ebbb7e95a4d61850fad81b2bff318ed8fd762287916349163608916044808301926020929190829003018186803b158015611d5657600080fd5b505af4158015611d6a573d6000803e3d6000fd5b505050506040513d6020811015611d8057600080fd5b50516004811115611d8d57fe5b816004811115611d9957fe5b14611da357600080fd5b600154604080517fd3f0d1cb000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018890525173ebbb7e95a4d61850fad81b2bff318ed8fd7622879163d3f0d1cb916044808301926020929190829003018186803b158015611e2057600080fd5b505af4158015611e34573d6000803e3d6000fd5b505050506040513d6020811015611e4a57600080fd5b505142811015611e5957600080fd5b600154604080517fa6fd718b000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018990525173ebbb7e95a4d61850fad81b2bff318ed8fd7622879163a6fd718b916044808301926020929190829003018186803b158015611ed657600080fd5b505af4158015611eea573d6000803e3d6000fd5b505050506040513d6020811015611f0057600080fd5b505115611f0c57600080fd5b6001546040517f188b40d7000000000000000000000000000000000000000000000000000000008152600160a060020a0390911660048201818152602483018a90526060604484019081526064840189905273ebbb7e95a4d61850fad81b2bff318ed8fd7622879363188b40d793928c928c928c92919060840184848082843782019150509550505050505060006040518083038186803b158015611fb057600080fd5b505af4158015611fc4573d6000803e3d6000fd5b5050600180546040805160e060020a63d03912b9028152600160a060020a039092166004830152602482018c90526044820192909252905173ebbb7e95a4d61850fad81b2bff318ed8fd762287935063d03912b992506064808301926000929190829003018186803b15801561203957600080fd5b505af415801561204d573d6000803e3d6000fd5b5050604080518a8152336020820181905260609282018381529282018a90527fbcb086748b4ee9a32661e6fe5e16e69a0bcd7bc07ba81145a707c7313b03c31894508b9350918a918a9160808201848480828437604051920182900397509095505050505050a16040805188815290517f35bcd7e8326284609d6098ff8b26bc5bd69336b3efd3c12e45425fe4681816cf9181900360200190a150505050505050565b600054600160a060020a0316331461210757600080fd5b303181111561211557600080fd5b604051339082156108fc029083906000818181858888f19350505050158015612142573d6000803e3d6000fd5b5050565b600554600160a060020a03163314806121695750600054600160a060020a031633145b151561217457600080fd5b6106078161266f565b6001546040805160e360020a630922c6c1028152600160a060020a0390921660048301526024820186905251859160029173ebbb7e95a4d61850fad81b2bff318ed8fd762287916349163608916044808301926020929190829003018186803b1580156121e957600080fd5b505af41580156121fd573d6000803e3d6000fd5b505050506040513d602081101561221357600080fd5b5051600481111561222057fe5b81600481111561222c57fe5b1461223657600080fd5b600154604080517f5fda6620000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018890525173ebbb7e95a4d61850fad81b2bff318ed8fd76228791635fda6620916044808301926020929190829003018186803b1580156122b357600080fd5b505af41580156122c7573d6000803e3d6000fd5b505050506040513d60208110156122dd57600080fd5b5051428110156122ec57600080fd5b6122f887878787613339565b6123018761344f565b50505050505050565b600054600160a060020a0316331461232157600080fd5b600160a060020a038116151561233657600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600554600160a060020a031681565b34156124b15734811461242157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45544820616d6f756e74206d75737420626520657175616c20616d6f756e7400604482015290519081900360640190fd5b600660009054906101000a9004600160a060020a0316600160a060020a031663439370b1346040518263ffffffff1660e060020a0281526004016020604051808303818588803b15801561247457600080fd5b505af1158015612488573d6000803e3d6000fd5b50505050506040513d602081101561249f57600080fd5b505115156124ac57600080fd5b610607565b60048054604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523393810193909352306024840152518392600160a060020a039092169163dd62ed3e9160448083019260209291908290030181600087803b15801561252057600080fd5b505af1158015612534573d6000803e3d6000fd5b505050506040513d602081101561254a57600080fd5b5051101561255757600080fd5b60048054604080517f70a082310000000000000000000000000000000000000000000000000000000081523393810193909352518392600160a060020a03909216916370a082319160248083019260209291908290030181600087803b1580156125c057600080fd5b505af11580156125d4573d6000803e3d6000fd5b505050506040513d60208110156125ea57600080fd5b505110156125f757600080fd5b60048054600654604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523394810194909452600160a060020a03918216602485015260448401859052519116916323b872dd9160648083019260209291908290030181600087803b1580156105d057600080fd5b600080600360009054906101000a9004600160a060020a0316600160a060020a031663b1e730006040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156126c557600080fd5b505af11580156126d9573d6000803e3d6000fd5b505050506040513d60208110156126ef57600080fd5b5051600154604080517f2843c77e000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529186166024830152519193507356781cbb608324eeb418e323e28aaa4c6043a02291632843c77e91604480820192602092909190829003018186803b15801561277357600080fd5b505af4158015612787573d6000803e3d6000fd5b505050506040513d602081101561279d57600080fd5b5051151561283c57600154604080517fce90a2cb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529185166024830152517356781cbb608324eeb418e323e28aaa4c6043a0229163ce90a2cb916044808301926000929190829003018186803b15801561282357600080fd5b505af4158015612837573d6000803e3d6000fd5b505050505b600154604080517fbb83dc2a000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529185166024830152516128f8917344bc22e0e33d546eb5e13d5f1e71fdaa0221ae749163bb83dc2a91604480820192602092909190829003018186803b1580156128bf57600080fd5b505af41580156128d3573d6000803e3d6000fd5b505050506040513d60208110156128e957600080fd5b5051839063ffffffff613b1316565b600154604080517f83264100000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152918616602483015260448201839052519192507344bc22e0e33d546eb5e13d5f1e71fdaa0221ae7491638326410091606480820192600092909190829003018186803b15801561298157600080fd5b505af4158015612995573d6000803e3d6000fd5b505060408051600160a060020a03871681526020810185905281517f58ac23a1ec4c8abd25f0e0f9d5c6b826d259c4d878ca97e045de9b51b05e123c9450908190039091019150a1505050565b600180546040805160e160020a6355d5f15f028152600160a060020a03909216600483015260248201849052604482019290925290516000918291829182918291829182918291606091839173728427d1e48daa939aade5a692d54a14e452efaf9163ababe2be916064808301926020929190829003018186803b158015612a6957600080fd5b505af4158015612a7d573d6000803e3d6000fd5b505050506040513d6020811015612a9357600080fd5b50516001546040805160e160020a6355d5f15f028152600160a060020a039092166004830152602482018e90526000604483015251919b5073728427d1e48daa939aade5a692d54a14e452efaf9163ababe2be91606480820192602092909190829003018186803b158015612b0757600080fd5b505af4158015612b1b573d6000803e3d6000fd5b505050506040513d6020811015612b3157600080fd5b5051600154604080517f792922bd000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018e905251919a5073ebbb7e95a4d61850fad81b2bff318ed8fd7622879163792922bd91604480820192602092909190829003018186803b158015612bb457600080fd5b505af4158015612bc8573d6000803e3d6000fd5b505050506040513d6020811015612bde57600080fd5b5051600154604080517f54c7c81a000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018e90525191995073ebbb7e95a4d61850fad81b2bff318ed8fd762287916354c7c81a91604480820192602092909190829003018186803b158015612c6157600080fd5b505af4158015612c75573d6000803e3d6000fd5b505050506040513d6020811015612c8b57600080fd5b5051600154604080517ff0c5beff000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018e9052518c8c0192909210985073ebbb7e95a4d61850fad81b2bff318ed8fd7622879163f0c5beff91604480820192602092909190829003018186803b158015612d1457600080fd5b505af4158015612d28573d6000803e3d6000fd5b505050506040513d6020811015612d3e57600080fd5b505195508680612d4d5750888a145b15612ff357600154604080517f34b72eb0000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018d905251612e0791889173ebbb7e95a4d61850fad81b2bff318ed8fd762287916334b72eb0916044808301926020929190829003018186803b158015612dd557600080fd5b505af4158015612de9573d6000803e3d6000fd5b505050506040513d6020811015612dff57600080fd5b50518a613b29565b600160009054906101000a9004600160a060020a0316600160a060020a031673ebbb7e95a4d61850fad81b2bff318ed8fd76228763d03912b990918d60046040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018360001916600019168152602001826004811115612e8d57fe5b60ff168152602001935050505060006040518083038186803b158015612eb257600080fd5b505af4158015612ec6573d6000803e3d6000fd5b5050505086612ed6576001612ed9565b60005b9450600160009054906101000a9004600160a060020a0316600160a060020a031673ebbb7e95a4d61850fad81b2bff318ed8fd762287637f7932c390918d886040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018360001916600019168152602001826001811115612f6057fe5b60ff168152602001935050505060006040518083038186803b158015612f8557600080fd5b505af4158015612f99573d6000803e3d6000fd5b505050507f9a0b6093880c657951b6d2b547905b101cedea8589e6ffb4e3d7f89ae4ec5e528b866001811115612fcb57fe5b6040805192835260ff90911660208301528051918290030190a1612fee8b613c92565b61147e565b60009350888a11156130165760019350898881151561300e57fe5b049250613025565b888881151561302157fe5b0492505b6001546040805160e060020a63d03912b9028152600160a060020a039092166004830152602482018d9052600360448301525173ebbb7e95a4d61850fad81b2bff318ed8fd7622879163d03912b9916064808301926000929190829003018186803b15801561309357600080fd5b505af41580156130a7573d6000803e3d6000fd5b5050600154604080517f16a0f4e0000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018f905287151560448301525173ebbb7e95a4d61850fad81b2bff318ed8fd76228793506316a0f4e092506064808301926000929190829003018186803b15801561313057600080fd5b505af4158015613144573d6000803e3d6000fd5b5050604080518e8152871515602082015281517f9218c14f6671255598a3fbd34b2f1f00cc6e700ee12839e5193b52973d21921e9450908190039091019150a1600154604080517f2755132f000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018d905285151560448301525173728427d1e48daa939aade5a692d54a14e452efaf91632755132f916064808301926000929190829003018186803b15801561320957600080fd5b505af415801561321d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561324657600080fd5b81019080805164010000000081111561325e57600080fd5b8201602081018481111561327157600080fd5b815185602082028301116401000000008211171561328e57600080fd5b5090955060009450505050505b8151811015613330576132c68683838151811015156132b657fe5b9060200190602002015185613b29565b7f018a9a757da55a0e88a7e72771d12b08173672b2ebc49b931b7f61365de8bc1382828151811015156132f557fe5b602090810290910181015160408051600160a060020a0390921682529181018e905280820186905290519081900360600190a160010161329b565b61147e8b613dd7565b613345848484846114a9565b151561335057600080fd5b600154604080517f8a84ebeb000000000000000000000000000000000000000000000000000000008152600160a060020a03928316600482015260248101879052918516604483015260ff84161560648301525173728427d1e48daa939aade5a692d54a14e452efaf91638a84ebeb916084808301926000929190829003018186803b1580156133df57600080fd5b505af41580156133f3573d6000803e3d6000fd5b505060408051878152600160a060020a038716602082015260ff8616818301526060810185905290517fc9ad58887596f3e1f1519b58ea560cf4b8c0a11cb9490133062b5e303fe580cb9350908190036080019150a150505050565b600154604080517f5ef0b8b1000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018390525173728427d1e48daa939aade5a692d54a14e452efaf91635ef0b8b1916044808301926020929190829003018186803b1580156134cc57600080fd5b505af41580156134e0573d6000803e3d6000fd5b505050506040513d60208110156134f657600080fd5b50516001546040805160e160020a6355d5f15f028152600160a060020a03909216600483015260248201849052600060448301525173728427d1e48daa939aade5a692d54a14e452efaf9163ababe2be916064808301926020929190829003018186803b15801561356657600080fd5b505af415801561357a573d6000803e3d6000fd5b505050506040513d602081101561359057600080fd5b5051600180546040805160e160020a6355d5f15f028152600160a060020a039092166004830152602482018690526044820192909252905173728427d1e48daa939aade5a692d54a14e452efaf9163ababe2be916064808301926020929190829003018186803b15801561360357600080fd5b505af4158015613617573d6000803e3d6000fd5b505050506040513d602081101561362d57600080fd5b505101141561060757610607816129e2565b600060606000806000600360009054906101000a9004600160a060020a0316600160a060020a0316632e5e26a06040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561369b57600080fd5b505af11580156136af573d6000803e3d6000fd5b505050506040513d60208110156136c557600080fd5b5051600154604080517fc93fccc5000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201528a83166024820152918916604483015260648201839052519196507356781cbb608324eeb418e323e28aaa4c6043a0229163c93fccc591608480820192600092909190829003018186803b15801561375857600080fd5b505af415801561376c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561379557600080fd5b8101908080516401000000008111156137ad57600080fd5b820160208101848111156137c057600080fd5b81518560208202830111640100000000821117156137dd57600080fd5b5090975060009650505050505b83518310156139ab57838381518110151561380157fe5b6020908102909101810151600154604080517fbb83dc2a000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529183166024830152519194507344bc22e0e33d546eb5e13d5f1e71fdaa0221ae749263bb83dc2a92604480840193829003018186803b15801561388857600080fd5b505af415801561389c573d6000803e3d6000fd5b505050506040513d60208110156138b257600080fd5b5051600154604080517f83264100000000000000000000000000000000000000000000000000000000008152600160a060020a03928316600482015291851660248301526000199092016044820181905291519192507344bc22e0e33d546eb5e13d5f1e71fdaa0221ae7491638326410091606480820192600092909190829003018186803b15801561394457600080fd5b505af4158015613958573d6000803e3d6000fd5b505060408051600160a060020a03861681526020810185905281517f58ac23a1ec4c8abd25f0e0f9d5c6b826d259c4d878ca97e045de9b51b05e123c9450908190039091019150a16001909201916137ea565b6001546040517f3632d699000000000000000000000000000000000000000000000000000000008152600160a060020a0390911660048201818152604483018b905260606024840190815287516064850152875173728427d1e48daa939aade5a692d54a14e452efaf94633632d69994938a938f93919290916084909101906020808701910280838360005b83811015613a4f578181015183820152602001613a37565b5050505090500194505050505060006040518083038186803b158015613a7457600080fd5b505af4158015613a88573d6000803e3d6000fd5b5050604080518b8152602080820183815289519383019390935288517f18a44f502a507e713d9aee63c6d4a46f2ea60098c05b892884ae4e85bbe310a495508d94508993916060840191818601910280838360005b83811015613af5578181015183820152602001613add565b50505050905001935050505060405180910390a15050505050505050565b600082820183811015613b2257fe5b9392505050565b8215613bda57600654604080517f1b9a91a4000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301526024820185905291519190921691631b9a91a49160448083019260209291908290030181600087803b158015613b9e57600080fd5b505af1158015613bb2573d6000803e3d6000fd5b505050506040513d6020811015613bc857600080fd5b50511515613bd557600080fd5b613c8d565b60065460048054604080517f3ccdbb28000000000000000000000000000000000000000000000000000000008152600160a060020a0387811694820194909452602481018690529183166044830152519190921691633ccdbb289160648083019260209291908290030181600087803b158015613c5657600080fd5b505af1158015613c6a573d6000803e3d6000fd5b505050506040513d6020811015613c8057600080fd5b50511515613c8d57600080fd5b505050565b600154604080517ff1c6b116000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018390525160609160009173728427d1e48daa939aade5a692d54a14e452efaf9163f1c6b1169160448083019286929190829003018186803b158015613d1457600080fd5b505af4158015613d28573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613d5157600080fd5b810190808051640100000000811115613d6957600080fd5b82016020810184811115613d7c57600080fd5b8151856020820283011164010000000082111715613d9957600080fd5b5090955060009450505050505b8151811015613c8d57613dcf8282815181101515613dc057fe5b90602001906020020151613fd1565b600101613da6565b600154604080517ff1c6b116000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018390525160609160009173728427d1e48daa939aade5a692d54a14e452efaf9163f1c6b1169160448083019286929190829003018186803b158015613e5957600080fd5b505af4158015613e6d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613e9657600080fd5b810190808051640100000000811115613eae57600080fd5b82016020810184811115613ec157600080fd5b8151856020820283011164010000000082111715613ede57600080fd5b5090955060009450505050505b8151811015613c8d57600154825173728427d1e48daa939aade5a692d54a14e452efaf916361548c0691600160a060020a0390911690859085908110613f2d57fe5b60209081029091018101516040805160e060020a63ffffffff8716028152600160a060020a0394851660048201529390911660248401526044830188905251606480840193829003018186803b158015613f8657600080fd5b505af4158015613f9a573d6000803e3d6000fd5b505050506040513d6020811015613fb057600080fd5b50511515613fc957613fc98282815181101515613dc057fe5b600101613eeb565b600154604080517fbb83dc2a000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529183166024830152516000917344bc22e0e33d546eb5e13d5f1e71fdaa0221ae749163bb83dc2a91604480820192602092909190829003018186803b15801561405357600080fd5b505af4158015614067573d6000803e3d6000fd5b505050506040513d602081101561407d57600080fd5b505160018054604080517f83264100000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529186166024830152919092016044830181905290519092507344bc22e0e33d546eb5e13d5f1e71fdaa0221ae74916383264100916064808301926000929190829003018186803b15801561410d57600080fd5b505af4158015614121573d6000803e3d6000fd5b505060408051600160a060020a03861681526020810185905281517f58ac23a1ec4c8abd25f0e0f9d5c6b826d259c4d878ca97e045de9b51b05e123c9450908190039091019150a150505600a165627a7a723058200d9d38165819919fb0480ef0af5fee48358e9aad50d40c86bc9e850e50116021002900000000000000000000000024caa9ad2831489823c560c65c9211904ffc13bd0000000000000000000000005e57d82421e40eddf792b2a5681192f4457f791500000000000000000000000064542fd1991949482e51e24973d047e286b4ef50

Deployed Bytecode

0x6080604052600436106101455763ffffffff60e060020a60003504166314e291e6811461014a5780633bbd2235146101645780634a0b890f1461017f57806354fd4d50146101875780635983adbd146101ae57806359b910d6146101c6578063653766d5146101e75780636c8d9a8414610208578063704b6c021461023957806379502c551461025a57806379cc6bca1461026f5780637db5c88e1461028757806382d7721a146102a857806383a12de9146102c65780638c2794cb146102e75780638da5cb5b1461032357806392801230146103385780639349a4081461034d578063a075048f1461038e578063a818d0c1146103a6578063ab6d4201146103bb578063b2fb1c52146103eb578063c311d0491461040f578063df2f945914610427578063e703ecb114610448578063f2fde38b14610475578063f851a44014610496575b600080fd5b34801561015657600080fd5b506101626004356104ab565b005b34801561017057600080fd5b5061016260043560243561060a565b610162610be8565b34801561019357600080fd5b5061019c610d08565b60408051918252519081900360200190f35b3480156101ba57600080fd5b50610162600435610d0e565b3480156101d257600080fd5b50610162600160a060020a0360043516610f3d565b3480156101f357600080fd5b50610162600160a060020a0360043516610f83565b34801561021457600080fd5b5061021d610fc9565b60408051600160a060020a039092168252519081900360200190f35b34801561024557600080fd5b50610162600160a060020a0360043516610fd8565b34801561026657600080fd5b5061021d61101e565b34801561027b57600080fd5b5061016260043561102d565b34801561029357600080fd5b50610162600160a060020a03600435166111ab565b3480156102b457600080fd5b5061019c60ff600435166024356111f1565b3480156102d257600080fd5b50610162600160a060020a0360043516611235565b3480156102f357600080fd5b5061016260048035906024803580820192908101359160443580820192908101359160643590810191013561127b565b34801561032f57600080fd5b5061021d61148b565b34801561034457600080fd5b5061021d61149a565b34801561035957600080fd5b5061037a600435600160a060020a036024351660ff604435166064356114a9565b604080519115158252519081900360200190f35b34801561039a57600080fd5b506101626004356115a3565b3480156103b257600080fd5b5061021d6117d5565b61016260048035600160a060020a031690602480359160443591606435916084359160a4359081019101356117e4565b3480156103f757600080fd5b50610162600480359060248035908101910135611c2a565b34801561041b57600080fd5b506101626004356120f0565b34801561043357600080fd5b50610162600160a060020a0360043516612146565b34801561045457600080fd5b50610162600435600160a060020a036024351660ff6044351660643561217d565b34801561048157600080fd5b50610162600160a060020a036004351661230a565b3480156104a257600080fd5b5061021d61239e565b600054600160a060020a031633146104c257600080fd5b60048054604080517f70a082310000000000000000000000000000000000000000000000000000000081523093810193909352518392600160a060020a03909216916370a082319160248083019260209291908290030181600087803b15801561052b57600080fd5b505af115801561053f573d6000803e3d6000fd5b505050506040513d602081101561055557600080fd5b5051101561056257600080fd5b60048054604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233938101939093526024830184905251600160a060020a039091169163a9059cbb9160448083019260209291908290030181600087803b1580156105d057600080fd5b505af11580156105e4573d6000803e3d6000fd5b505050506040513d60208110156105fa57600080fd5b5051151561060757600080fd5b50565b600180546040805160e360020a630922c6c1028152600160a060020a039092166004830152602482018590525184929173ebbb7e95a4d61850fad81b2bff318ed8fd76228791634916360891604480820192602092909190829003018186803b15801561067657600080fd5b505af415801561068a573d6000803e3d6000fd5b505050506040513d60208110156106a057600080fd5b505160048111156106ad57fe5b8160048111156106b957fe5b146106c357600080fd5b600154604080517f95d94285000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018690525173ebbb7e95a4d61850fad81b2bff318ed8fd762287916395d94285916044808301926020929190829003018186803b15801561074057600080fd5b505af4158015610754573d6000803e3d6000fd5b505050506040513d602081101561076a57600080fd5b50514281101561077957600080fd5b600154604080517f6a15a671000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152336024830152604482018790525173728427d1e48daa939aade5a692d54a14e452efaf91636a15a671916064808301926020929190829003018186803b1580156107fc57600080fd5b505af4158015610810573d6000803e3d6000fd5b505050506040513d602081101561082657600080fd5b5051151561083357600080fd5b600154604080517f61548c06000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152336024830152604482018790525173728427d1e48daa939aade5a692d54a14e452efaf916361548c06916064808301926020929190829003018186803b1580156108b657600080fd5b505af41580156108ca573d6000803e3d6000fd5b505050506040513d60208110156108e057600080fd5b5051156108ec57600080fd5b600154604080517fbb333e94000000000000000000000000000000000000000000000000000000008152600160a060020a03909216600483015260248201879052336044830152606482018690525173728427d1e48daa939aade5a692d54a14e452efaf9163bb333e94916084808301926000929190829003018186803b15801561097657600080fd5b505af415801561098a573d6000803e3d6000fd5b50506040805188815233602082015280820188905290517f25a48c6816dd5a19678a7d2a3c04c071cff7f4fa08dbc4e2ced1f8b7828143c09350908190036060019150a1600154604080517f10c3b71a000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018790525173728427d1e48daa939aade5a692d54a14e452efaf916310c3b71a916044808301926020929190829003018186803b158015610a4b57600080fd5b505af4158015610a5f573d6000803e3d6000fd5b505050506040513d6020811015610a7557600080fd5b5051600154604080517f5ef0b8b1000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018890525173728427d1e48daa939aade5a692d54a14e452efaf91635ef0b8b1916044808301926020929190829003018186803b158015610af457600080fd5b505af4158015610b08573d6000803e3d6000fd5b505050506040513d6020811015610b1e57600080fd5b50511415610be1576001546040805160e060020a63d03912b9028152600160a060020a03909216600483015260248201879052600260448301525173ebbb7e95a4d61850fad81b2bff318ed8fd7622879163d03912b9916064808301926000929190829003018186803b158015610b9457600080fd5b505af4158015610ba8573d6000803e3d6000fd5b50506040805188815290517fd13f92958cb3f9d795be810e016990e9af7a3fe912a8fdf1a0703b603a2fe5f89350908190036020019150a15b5050505050565b60003415610c7457600360009054906101000a9004600160a060020a0316600160a060020a0316636f2ee5de6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610c4357600080fd5b505af1158015610c57573d6000803e3d6000fd5b505050506040513d6020811015610c6d57600080fd5b5051610cf4565b600360009054906101000a9004600160a060020a0316600160a060020a031663dfe5b0446040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610cc757600080fd5b505af1158015610cdb573d6000803e3d6000fd5b505050506040513d6020811015610cf157600080fd5b50515b9050610cff816123ad565b6106073361266f565b60025481565b600180546040805160e360020a630922c6c1028152600160a060020a039092166004830152602482018490525183929173ebbb7e95a4d61850fad81b2bff318ed8fd76228791634916360891604480820192602092909190829003018186803b158015610d7a57600080fd5b505af4158015610d8e573d6000803e3d6000fd5b505050506040513d6020811015610da457600080fd5b50516004811115610db157fe5b816004811115610dbd57fe5b14610dc757600080fd5b600154604080517f95d94285000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018590525173ebbb7e95a4d61850fad81b2bff318ed8fd762287916395d94285916044808301926020929190829003018186803b158015610e4457600080fd5b505af4158015610e58573d6000803e3d6000fd5b505050506040513d6020811015610e6e57600080fd5b505142811115610e7d57600080fd5b6001546040805160e060020a63d03912b9028152600160a060020a03909216600483015260248201869052600260448301525173ebbb7e95a4d61850fad81b2bff318ed8fd7622879163d03912b9916064808301926000929190829003018186803b158015610eeb57600080fd5b505af4158015610eff573d6000803e3d6000fd5b50506040805187815290517fd13f92958cb3f9d795be810e016990e9af7a3fe912a8fdf1a0703b603a2fe5f89350908190036020019150a150505050565b600054600160a060020a03163314610f5457600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314610f9a57600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600654600160a060020a031681565b600054600160a060020a03163314610fef57600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600354600160a060020a031681565b6001546040805160e360020a630922c6c1028152600160a060020a0390921660048301526024820183905251829160029173ebbb7e95a4d61850fad81b2bff318ed8fd762287916349163608916044808301926020929190829003018186803b15801561109957600080fd5b505af41580156110ad573d6000803e3d6000fd5b505050506040513d60208110156110c357600080fd5b505160048111156110d057fe5b8160048111156110dc57fe5b146110e657600080fd5b600154604080517f5fda6620000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018590525173ebbb7e95a4d61850fad81b2bff318ed8fd76228791635fda6620916044808301926020929190829003018186803b15801561116357600080fd5b505af4158015611177573d6000803e3d6000fd5b505050506040513d602081101561118d57600080fd5b50514281111561119c57600080fd5b6111a5846129e2565b50505050565b600054600160a060020a031633146111c257600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b604080517f010000000000000000000000000000000000000000000000000000000000000060ff851602815260018101839052905190819003602101902092915050565b600054600160a060020a0316331461124c57600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6001546040805160e360020a630922c6c1028152600160a060020a0390921660048301526024820189905251600091899160029173ebbb7e95a4d61850fad81b2bff318ed8fd76228791634916360891604480820192602092909190829003018186803b1580156112eb57600080fd5b505af41580156112ff573d6000803e3d6000fd5b505050506040513d602081101561131557600080fd5b5051600481111561132257fe5b81600481111561132e57fe5b1461133857600080fd5b600154604080517f5fda6620000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018c90525173ebbb7e95a4d61850fad81b2bff318ed8fd76228791635fda6620916044808301926020929190829003018186803b1580156113b557600080fd5b505af41580156113c9573d6000803e3d6000fd5b505050506040513d60208110156113df57600080fd5b5051428110156113ee57600080fd5b88871480156113fc57508885145b151561140757600080fd5b600093505b888410156114755761146a8b8b8b8781811061142457fe5b90506020020135600160a060020a03168a8a88818110151561144257fe5b9050602002013560ff16898989818110151561145a57fe5b9050602002013560001916613339565b60019093019261140c565b61147e8b61344f565b5050505050505050505050565b600054600160a060020a031681565b600154600160a060020a031681565b604080517f010000000000000000000000000000000000000000000000000000000000000060ff85160281526001808201849052825191829003602101822090547f0cf84a50000000000000000000000000000000000000000000000000000000008352600160a060020a039081166004840152602483018890528616604483015291516000929173728427d1e48daa939aade5a692d54a14e452efaf91630cf84a5091606480820192602092909190829003018186803b15801561156d57600080fd5b505af4158015611581573d6000803e3d6000fd5b505050506040513d602081101561159757600080fd5b50511495945050505050565b6001546040805160e360020a630922c6c1028152600160a060020a0390921660048301526024820183905251829160009173ebbb7e95a4d61850fad81b2bff318ed8fd762287916349163608916044808301926020929190829003018186803b15801561160f57600080fd5b505af4158015611623573d6000803e3d6000fd5b505050506040513d602081101561163957600080fd5b5051600481111561164657fe5b81600481111561165257fe5b1461165c57600080fd5b600154604080517fd3f0d1cb000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018590525173ebbb7e95a4d61850fad81b2bff318ed8fd7622879163d3f0d1cb916044808301926020929190829003018186803b1580156116d957600080fd5b505af41580156116ed573d6000803e3d6000fd5b505050506040513d602081101561170357600080fd5b50514281111561171257600080fd5b600180546040805160e060020a63d03912b9028152600160a060020a039092166004830152602482018790526044820192909252905173ebbb7e95a4d61850fad81b2bff318ed8fd7622879163d03912b9916064808301926000929190829003018186803b15801561178357600080fd5b505af4158015611797573d6000803e3d6000fd5b50506040805187815290517f35bcd7e8326284609d6098ff8b26bc5bd69336b3efd3c12e45425fe4681816cf9350908190036020019150a150505050565b600454600160a060020a031681565b606060008033600160a060020a038b1614156117ff57600080fd5b611808876123ad565b600360009054906101000a9004600160a060020a0316600160a060020a031663e07cfabe6040518163ffffffff1660e060020a028152600401600060405180830381600087803b15801561185b57600080fd5b505af115801561186f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561189857600080fd5b8101908080516401000000008111156118b057600080fd5b820160208101848111156118c357600080fd5b81518560208202830111640100000000821117156118e057600080fd5b5050600354604080517faa29a6650000000000000000000000000000000000000000000000000000000081529051929850600160a060020a03909116945063aa29a665935060048082019350602092918290030181600087803b15801561194657600080fd5b505af115801561195a573d6000803e3d6000fd5b505050506040513d602081101561197057600080fd5b81019080805190602001909291905050509150600160009054906101000a9004600160a060020a0316600160a060020a031673ebbb7e95a4d61850fad81b2bff318ed8fd76228763d15cd3be9091338d8d8d8d8d8d8d8d8d34600014156040518d63ffffffff1660e060020a028152600401808d600160a060020a0316600160a060020a031681526020018c600160a060020a0316600160a060020a031681526020018b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600019166000191681526020018060200180602001858152602001841515151581526020018381038352888882818152602001925080828437909101848103835287518152875160209182019250818901910280838360005b83811015611ab7578181015183820152602001611a9f565b505050509050019e50505050505050505050505050505060206040518083038186803b158015611ae657600080fd5b505af4158015611afa573d6000803e3d6000fd5b505050506040513d6020811015611b1057600080fd5b5051604080518281523360208201819052600160a060020a038e1692820192909252606081018c9052608081018b905260a081018a905260c081018990526101208101859052341515610140820181905261016060e083018181529083018990529394507fd442e1e65d09ce5f7df2526ac5185ea8a60aca4b8ff2d6ec043983f0e551f604938593928f928f928f928f928f928f928f928f928f929061010082016101808301888880828437909101848103835287518152875160209182019250818901910280838360005b83811015611bf4578181015183820152602001611bdc565b505050509050019e50505050505050505050505050505060405180910390a1611c1e81338c61363f565b50505050505050505050565b600154604080517fd94c78ad000000000000000000000000000000000000000000000000000000008152600160a060020a0390921660048301526024820185905251849173ebbb7e95a4d61850fad81b2bff318ed8fd7622879163d94c78ad91604480820192602092909190829003018186803b158015611caa57600080fd5b505af4158015611cbe573d6000803e3d6000fd5b505050506040513d6020811015611cd457600080fd5b5051600160a060020a03163314611cea57600080fd5b6001546040805160e360020a630922c6c1028152600160a060020a0390921660048301526024820186905251859160009173ebbb7e95a4d61850fad81b2bff318ed8fd762287916349163608916044808301926020929190829003018186803b158015611d5657600080fd5b505af4158015611d6a573d6000803e3d6000fd5b505050506040513d6020811015611d8057600080fd5b50516004811115611d8d57fe5b816004811115611d9957fe5b14611da357600080fd5b600154604080517fd3f0d1cb000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018890525173ebbb7e95a4d61850fad81b2bff318ed8fd7622879163d3f0d1cb916044808301926020929190829003018186803b158015611e2057600080fd5b505af4158015611e34573d6000803e3d6000fd5b505050506040513d6020811015611e4a57600080fd5b505142811015611e5957600080fd5b600154604080517fa6fd718b000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018990525173ebbb7e95a4d61850fad81b2bff318ed8fd7622879163a6fd718b916044808301926020929190829003018186803b158015611ed657600080fd5b505af4158015611eea573d6000803e3d6000fd5b505050506040513d6020811015611f0057600080fd5b505115611f0c57600080fd5b6001546040517f188b40d7000000000000000000000000000000000000000000000000000000008152600160a060020a0390911660048201818152602483018a90526060604484019081526064840189905273ebbb7e95a4d61850fad81b2bff318ed8fd7622879363188b40d793928c928c928c92919060840184848082843782019150509550505050505060006040518083038186803b158015611fb057600080fd5b505af4158015611fc4573d6000803e3d6000fd5b5050600180546040805160e060020a63d03912b9028152600160a060020a039092166004830152602482018c90526044820192909252905173ebbb7e95a4d61850fad81b2bff318ed8fd762287935063d03912b992506064808301926000929190829003018186803b15801561203957600080fd5b505af415801561204d573d6000803e3d6000fd5b5050604080518a8152336020820181905260609282018381529282018a90527fbcb086748b4ee9a32661e6fe5e16e69a0bcd7bc07ba81145a707c7313b03c31894508b9350918a918a9160808201848480828437604051920182900397509095505050505050a16040805188815290517f35bcd7e8326284609d6098ff8b26bc5bd69336b3efd3c12e45425fe4681816cf9181900360200190a150505050505050565b600054600160a060020a0316331461210757600080fd5b303181111561211557600080fd5b604051339082156108fc029083906000818181858888f19350505050158015612142573d6000803e3d6000fd5b5050565b600554600160a060020a03163314806121695750600054600160a060020a031633145b151561217457600080fd5b6106078161266f565b6001546040805160e360020a630922c6c1028152600160a060020a0390921660048301526024820186905251859160029173ebbb7e95a4d61850fad81b2bff318ed8fd762287916349163608916044808301926020929190829003018186803b1580156121e957600080fd5b505af41580156121fd573d6000803e3d6000fd5b505050506040513d602081101561221357600080fd5b5051600481111561222057fe5b81600481111561222c57fe5b1461223657600080fd5b600154604080517f5fda6620000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018890525173ebbb7e95a4d61850fad81b2bff318ed8fd76228791635fda6620916044808301926020929190829003018186803b1580156122b357600080fd5b505af41580156122c7573d6000803e3d6000fd5b505050506040513d60208110156122dd57600080fd5b5051428110156122ec57600080fd5b6122f887878787613339565b6123018761344f565b50505050505050565b600054600160a060020a0316331461232157600080fd5b600160a060020a038116151561233657600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600554600160a060020a031681565b34156124b15734811461242157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45544820616d6f756e74206d75737420626520657175616c20616d6f756e7400604482015290519081900360640190fd5b600660009054906101000a9004600160a060020a0316600160a060020a031663439370b1346040518263ffffffff1660e060020a0281526004016020604051808303818588803b15801561247457600080fd5b505af1158015612488573d6000803e3d6000fd5b50505050506040513d602081101561249f57600080fd5b505115156124ac57600080fd5b610607565b60048054604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523393810193909352306024840152518392600160a060020a039092169163dd62ed3e9160448083019260209291908290030181600087803b15801561252057600080fd5b505af1158015612534573d6000803e3d6000fd5b505050506040513d602081101561254a57600080fd5b5051101561255757600080fd5b60048054604080517f70a082310000000000000000000000000000000000000000000000000000000081523393810193909352518392600160a060020a03909216916370a082319160248083019260209291908290030181600087803b1580156125c057600080fd5b505af11580156125d4573d6000803e3d6000fd5b505050506040513d60208110156125ea57600080fd5b505110156125f757600080fd5b60048054600654604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523394810194909452600160a060020a03918216602485015260448401859052519116916323b872dd9160648083019260209291908290030181600087803b1580156105d057600080fd5b600080600360009054906101000a9004600160a060020a0316600160a060020a031663b1e730006040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156126c557600080fd5b505af11580156126d9573d6000803e3d6000fd5b505050506040513d60208110156126ef57600080fd5b5051600154604080517f2843c77e000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529186166024830152519193507356781cbb608324eeb418e323e28aaa4c6043a02291632843c77e91604480820192602092909190829003018186803b15801561277357600080fd5b505af4158015612787573d6000803e3d6000fd5b505050506040513d602081101561279d57600080fd5b5051151561283c57600154604080517fce90a2cb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529185166024830152517356781cbb608324eeb418e323e28aaa4c6043a0229163ce90a2cb916044808301926000929190829003018186803b15801561282357600080fd5b505af4158015612837573d6000803e3d6000fd5b505050505b600154604080517fbb83dc2a000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529185166024830152516128f8917344bc22e0e33d546eb5e13d5f1e71fdaa0221ae749163bb83dc2a91604480820192602092909190829003018186803b1580156128bf57600080fd5b505af41580156128d3573d6000803e3d6000fd5b505050506040513d60208110156128e957600080fd5b5051839063ffffffff613b1316565b600154604080517f83264100000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152918616602483015260448201839052519192507344bc22e0e33d546eb5e13d5f1e71fdaa0221ae7491638326410091606480820192600092909190829003018186803b15801561298157600080fd5b505af4158015612995573d6000803e3d6000fd5b505060408051600160a060020a03871681526020810185905281517f58ac23a1ec4c8abd25f0e0f9d5c6b826d259c4d878ca97e045de9b51b05e123c9450908190039091019150a1505050565b600180546040805160e160020a6355d5f15f028152600160a060020a03909216600483015260248201849052604482019290925290516000918291829182918291829182918291606091839173728427d1e48daa939aade5a692d54a14e452efaf9163ababe2be916064808301926020929190829003018186803b158015612a6957600080fd5b505af4158015612a7d573d6000803e3d6000fd5b505050506040513d6020811015612a9357600080fd5b50516001546040805160e160020a6355d5f15f028152600160a060020a039092166004830152602482018e90526000604483015251919b5073728427d1e48daa939aade5a692d54a14e452efaf9163ababe2be91606480820192602092909190829003018186803b158015612b0757600080fd5b505af4158015612b1b573d6000803e3d6000fd5b505050506040513d6020811015612b3157600080fd5b5051600154604080517f792922bd000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018e905251919a5073ebbb7e95a4d61850fad81b2bff318ed8fd7622879163792922bd91604480820192602092909190829003018186803b158015612bb457600080fd5b505af4158015612bc8573d6000803e3d6000fd5b505050506040513d6020811015612bde57600080fd5b5051600154604080517f54c7c81a000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018e90525191995073ebbb7e95a4d61850fad81b2bff318ed8fd762287916354c7c81a91604480820192602092909190829003018186803b158015612c6157600080fd5b505af4158015612c75573d6000803e3d6000fd5b505050506040513d6020811015612c8b57600080fd5b5051600154604080517ff0c5beff000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018e9052518c8c0192909210985073ebbb7e95a4d61850fad81b2bff318ed8fd7622879163f0c5beff91604480820192602092909190829003018186803b158015612d1457600080fd5b505af4158015612d28573d6000803e3d6000fd5b505050506040513d6020811015612d3e57600080fd5b505195508680612d4d5750888a145b15612ff357600154604080517f34b72eb0000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018d905251612e0791889173ebbb7e95a4d61850fad81b2bff318ed8fd762287916334b72eb0916044808301926020929190829003018186803b158015612dd557600080fd5b505af4158015612de9573d6000803e3d6000fd5b505050506040513d6020811015612dff57600080fd5b50518a613b29565b600160009054906101000a9004600160a060020a0316600160a060020a031673ebbb7e95a4d61850fad81b2bff318ed8fd76228763d03912b990918d60046040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018360001916600019168152602001826004811115612e8d57fe5b60ff168152602001935050505060006040518083038186803b158015612eb257600080fd5b505af4158015612ec6573d6000803e3d6000fd5b5050505086612ed6576001612ed9565b60005b9450600160009054906101000a9004600160a060020a0316600160a060020a031673ebbb7e95a4d61850fad81b2bff318ed8fd762287637f7932c390918d886040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018360001916600019168152602001826001811115612f6057fe5b60ff168152602001935050505060006040518083038186803b158015612f8557600080fd5b505af4158015612f99573d6000803e3d6000fd5b505050507f9a0b6093880c657951b6d2b547905b101cedea8589e6ffb4e3d7f89ae4ec5e528b866001811115612fcb57fe5b6040805192835260ff90911660208301528051918290030190a1612fee8b613c92565b61147e565b60009350888a11156130165760019350898881151561300e57fe5b049250613025565b888881151561302157fe5b0492505b6001546040805160e060020a63d03912b9028152600160a060020a039092166004830152602482018d9052600360448301525173ebbb7e95a4d61850fad81b2bff318ed8fd7622879163d03912b9916064808301926000929190829003018186803b15801561309357600080fd5b505af41580156130a7573d6000803e3d6000fd5b5050600154604080517f16a0f4e0000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018f905287151560448301525173ebbb7e95a4d61850fad81b2bff318ed8fd76228793506316a0f4e092506064808301926000929190829003018186803b15801561313057600080fd5b505af4158015613144573d6000803e3d6000fd5b5050604080518e8152871515602082015281517f9218c14f6671255598a3fbd34b2f1f00cc6e700ee12839e5193b52973d21921e9450908190039091019150a1600154604080517f2755132f000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018d905285151560448301525173728427d1e48daa939aade5a692d54a14e452efaf91632755132f916064808301926000929190829003018186803b15801561320957600080fd5b505af415801561321d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561324657600080fd5b81019080805164010000000081111561325e57600080fd5b8201602081018481111561327157600080fd5b815185602082028301116401000000008211171561328e57600080fd5b5090955060009450505050505b8151811015613330576132c68683838151811015156132b657fe5b9060200190602002015185613b29565b7f018a9a757da55a0e88a7e72771d12b08173672b2ebc49b931b7f61365de8bc1382828151811015156132f557fe5b602090810290910181015160408051600160a060020a0390921682529181018e905280820186905290519081900360600190a160010161329b565b61147e8b613dd7565b613345848484846114a9565b151561335057600080fd5b600154604080517f8a84ebeb000000000000000000000000000000000000000000000000000000008152600160a060020a03928316600482015260248101879052918516604483015260ff84161560648301525173728427d1e48daa939aade5a692d54a14e452efaf91638a84ebeb916084808301926000929190829003018186803b1580156133df57600080fd5b505af41580156133f3573d6000803e3d6000fd5b505060408051878152600160a060020a038716602082015260ff8616818301526060810185905290517fc9ad58887596f3e1f1519b58ea560cf4b8c0a11cb9490133062b5e303fe580cb9350908190036080019150a150505050565b600154604080517f5ef0b8b1000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018390525173728427d1e48daa939aade5a692d54a14e452efaf91635ef0b8b1916044808301926020929190829003018186803b1580156134cc57600080fd5b505af41580156134e0573d6000803e3d6000fd5b505050506040513d60208110156134f657600080fd5b50516001546040805160e160020a6355d5f15f028152600160a060020a03909216600483015260248201849052600060448301525173728427d1e48daa939aade5a692d54a14e452efaf9163ababe2be916064808301926020929190829003018186803b15801561356657600080fd5b505af415801561357a573d6000803e3d6000fd5b505050506040513d602081101561359057600080fd5b5051600180546040805160e160020a6355d5f15f028152600160a060020a039092166004830152602482018690526044820192909252905173728427d1e48daa939aade5a692d54a14e452efaf9163ababe2be916064808301926020929190829003018186803b15801561360357600080fd5b505af4158015613617573d6000803e3d6000fd5b505050506040513d602081101561362d57600080fd5b505101141561060757610607816129e2565b600060606000806000600360009054906101000a9004600160a060020a0316600160a060020a0316632e5e26a06040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561369b57600080fd5b505af11580156136af573d6000803e3d6000fd5b505050506040513d60208110156136c557600080fd5b5051600154604080517fc93fccc5000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201528a83166024820152918916604483015260648201839052519196507356781cbb608324eeb418e323e28aaa4c6043a0229163c93fccc591608480820192600092909190829003018186803b15801561375857600080fd5b505af415801561376c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561379557600080fd5b8101908080516401000000008111156137ad57600080fd5b820160208101848111156137c057600080fd5b81518560208202830111640100000000821117156137dd57600080fd5b5090975060009650505050505b83518310156139ab57838381518110151561380157fe5b6020908102909101810151600154604080517fbb83dc2a000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529183166024830152519194507344bc22e0e33d546eb5e13d5f1e71fdaa0221ae749263bb83dc2a92604480840193829003018186803b15801561388857600080fd5b505af415801561389c573d6000803e3d6000fd5b505050506040513d60208110156138b257600080fd5b5051600154604080517f83264100000000000000000000000000000000000000000000000000000000008152600160a060020a03928316600482015291851660248301526000199092016044820181905291519192507344bc22e0e33d546eb5e13d5f1e71fdaa0221ae7491638326410091606480820192600092909190829003018186803b15801561394457600080fd5b505af4158015613958573d6000803e3d6000fd5b505060408051600160a060020a03861681526020810185905281517f58ac23a1ec4c8abd25f0e0f9d5c6b826d259c4d878ca97e045de9b51b05e123c9450908190039091019150a16001909201916137ea565b6001546040517f3632d699000000000000000000000000000000000000000000000000000000008152600160a060020a0390911660048201818152604483018b905260606024840190815287516064850152875173728427d1e48daa939aade5a692d54a14e452efaf94633632d69994938a938f93919290916084909101906020808701910280838360005b83811015613a4f578181015183820152602001613a37565b5050505090500194505050505060006040518083038186803b158015613a7457600080fd5b505af4158015613a88573d6000803e3d6000fd5b5050604080518b8152602080820183815289519383019390935288517f18a44f502a507e713d9aee63c6d4a46f2ea60098c05b892884ae4e85bbe310a495508d94508993916060840191818601910280838360005b83811015613af5578181015183820152602001613add565b50505050905001935050505060405180910390a15050505050505050565b600082820183811015613b2257fe5b9392505050565b8215613bda57600654604080517f1b9a91a4000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301526024820185905291519190921691631b9a91a49160448083019260209291908290030181600087803b158015613b9e57600080fd5b505af1158015613bb2573d6000803e3d6000fd5b505050506040513d6020811015613bc857600080fd5b50511515613bd557600080fd5b613c8d565b60065460048054604080517f3ccdbb28000000000000000000000000000000000000000000000000000000008152600160a060020a0387811694820194909452602481018690529183166044830152519190921691633ccdbb289160648083019260209291908290030181600087803b158015613c5657600080fd5b505af1158015613c6a573d6000803e3d6000fd5b505050506040513d6020811015613c8057600080fd5b50511515613c8d57600080fd5b505050565b600154604080517ff1c6b116000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018390525160609160009173728427d1e48daa939aade5a692d54a14e452efaf9163f1c6b1169160448083019286929190829003018186803b158015613d1457600080fd5b505af4158015613d28573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613d5157600080fd5b810190808051640100000000811115613d6957600080fd5b82016020810184811115613d7c57600080fd5b8151856020820283011164010000000082111715613d9957600080fd5b5090955060009450505050505b8151811015613c8d57613dcf8282815181101515613dc057fe5b90602001906020020151613fd1565b600101613da6565b600154604080517ff1c6b116000000000000000000000000000000000000000000000000000000008152600160a060020a039092166004830152602482018390525160609160009173728427d1e48daa939aade5a692d54a14e452efaf9163f1c6b1169160448083019286929190829003018186803b158015613e5957600080fd5b505af4158015613e6d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613e9657600080fd5b810190808051640100000000811115613eae57600080fd5b82016020810184811115613ec157600080fd5b8151856020820283011164010000000082111715613ede57600080fd5b5090955060009450505050505b8151811015613c8d57600154825173728427d1e48daa939aade5a692d54a14e452efaf916361548c0691600160a060020a0390911690859085908110613f2d57fe5b60209081029091018101516040805160e060020a63ffffffff8716028152600160a060020a0394851660048201529390911660248401526044830188905251606480840193829003018186803b158015613f8657600080fd5b505af4158015613f9a573d6000803e3d6000fd5b505050506040513d6020811015613fb057600080fd5b50511515613fc957613fc98282815181101515613dc057fe5b600101613eeb565b600154604080517fbb83dc2a000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529183166024830152516000917344bc22e0e33d546eb5e13d5f1e71fdaa0221ae749163bb83dc2a91604480820192602092909190829003018186803b15801561405357600080fd5b505af4158015614067573d6000803e3d6000fd5b505050506040513d602081101561407d57600080fd5b505160018054604080517f83264100000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529186166024830152919092016044830181905290519092507344bc22e0e33d546eb5e13d5f1e71fdaa0221ae74916383264100916064808301926000929190829003018186803b15801561410d57600080fd5b505af4158015614121573d6000803e3d6000fd5b505060408051600160a060020a03861681526020810185905281517f58ac23a1ec4c8abd25f0e0f9d5c6b826d259c4d878ca97e045de9b51b05e123c9450908190039091019150a150505600a165627a7a723058200d9d38165819919fb0480ef0af5fee48358e9aad50d40c86bc9e850e501160210029

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

00000000000000000000000024caa9ad2831489823c560c65c9211904ffc13bd0000000000000000000000005e57d82421e40eddf792b2a5681192f4457f791500000000000000000000000064542fd1991949482e51e24973d047e286b4ef50

-----Decoded View---------------
Arg [0] : storageAddress (address): 0x24caa9AD2831489823C560c65C9211904FFc13bD
Arg [1] : configAddress (address): 0x5E57D82421E40EDdf792B2A5681192F4457f7915
Arg [2] : _paymentHolder (address): 0x64542Fd1991949482E51E24973D047e286b4eF50

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000024caa9ad2831489823c560c65c9211904ffc13bd
Arg [1] : 0000000000000000000000005e57d82421e40eddf792b2a5681192f4457f7915
Arg [2] : 00000000000000000000000064542fd1991949482e51e24973d047e286b4ef50


Libraries Used

RefereeCasesLib : 0x728427d1e48daa939aade5a692d54a14e452efafUnverified

Swarm Source

bzzr://0d9d38165819919fb0480ef0af5fee48358e9aad50d40c86bc9e850e50116021

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.