ETH Price: $3,463.97 (+1.25%)
Gas: 10 Gwei

Contract

0x2AB9f67A27f606272189b307052694D3a2B158bA
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
__callback30063972017-01-16 11:36:562738 days ago1484566616IN
0x2AB9f67A...3a2B158bA
0 ETH0.003247150
Transfer30048942017-01-16 5:31:192739 days ago1484544679IN
0x2AB9f67A...3a2B158bA
0.001 ETH0.0012110
Execute Emergenc...28427622016-12-20 10:52:212766 days ago1482231141IN
0x2AB9f67A...3a2B158bA
0 ETH0.0011637546
Vote Emergency W...27960482016-12-12 18:16:322773 days ago1481566592IN
0x2AB9f67A...3a2B158bA
0 ETH0.0019120644
Propose Emergenc...27960342016-12-12 18:14:272773 days ago1481566467IN
0x2AB9f67A...3a2B158bA
0 ETH0.0031125644
Stop Contract27960242016-12-12 18:10:582773 days ago1481566258IN
0x2AB9f67A...3a2B158bA
0 ETH0.0011946444
New Investor27959832016-12-12 17:59:202773 days ago1481565560IN
0x2AB9f67A...3a2B158bA
0.01 ETH0.0055111744
Force Divest Of ...27955202016-12-12 16:10:582773 days ago1481559058IN
0x2AB9f67A...3a2B158bA
0 ETH0.015987941
__callback27941172016-12-12 10:31:182774 days ago1481538678IN
0x2AB9f67A...3a2B158bA
0 ETH0.001907220
Transfer27941072016-12-12 10:29:222774 days ago1481538562IN
0x2AB9f67A...3a2B158bA
5 ETH0.0031258921
__callback27940752016-12-12 10:23:172774 days ago1481538197IN
0x2AB9f67A...3a2B158bA
0 ETH0.0019084820
Transfer27940662016-12-12 10:20:382774 days ago1481538038IN
0x2AB9f67A...3a2B158bA
5 ETH0.0031258921
__callback27914872016-12-11 23:56:462774 days ago1481500606IN
0x2AB9f67A...3a2B158bA
0 ETH0.0019084820
Transfer27914792016-12-11 23:55:342774 days ago1481500534IN
0x2AB9f67A...3a2B158bA
0.5 ETH0.0029770420
__callback27910322016-12-11 22:08:432774 days ago1481494123IN
0x2AB9f67A...3a2B158bA
0 ETH0.0019084820
Transfer27910232016-12-11 22:07:032774 days ago1481494023IN
0x2AB9f67A...3a2B158bA
1 ETH0.0029770420
__callback27910132016-12-11 22:04:562774 days ago1481493896IN
0x2AB9f67A...3a2B158bA
0 ETH0.0019059220
Transfer27910072016-12-11 22:03:432774 days ago1481493823IN
0x2AB9f67A...3a2B158bA
0.7 ETH0.0029770420
__callback27882312016-12-11 11:07:352775 days ago1481454455IN
0x2AB9f67A...3a2B158bA
0 ETH0.0019343820
__callback27876302016-12-11 8:39:022775 days ago1481445542IN
0x2AB9f67A...3a2B158bA
0 ETH0.0019369420
__callback27869132016-12-11 6:00:002775 days ago1481436000IN
0x2AB9f67A...3a2B158bA
0 ETH0.0019369420
__callback27868952016-12-11 5:56:322775 days ago1481435792IN
0x2AB9f67A...3a2B158bA
0 ETH0.0019369420
__callback27847452016-12-10 21:24:402775 days ago1481405080IN
0x2AB9f67A...3a2B158bA
0 ETH0.0019084820
__callback27847432016-12-10 21:23:082775 days ago1481404988IN
0x2AB9f67A...3a2B158bA
0 ETH0.0019356620
Transfer27847422016-12-10 21:22:502775 days ago1481404970IN
0x2AB9f67A...3a2B158bA
1.3 ETH0.0029770420
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
28427622016-12-20 10:52:212766 days ago1482231141
0x2AB9f67A...3a2B158bA
11.52384677 ETH
27955202016-12-12 16:10:582773 days ago1481559058
0x2AB9f67A...3a2B158bA
0.13012648 ETH
27955202016-12-12 16:10:582773 days ago1481559058
0x2AB9f67A...3a2B158bA
12.88252174 ETH
27955202016-12-12 16:10:582773 days ago1481559058
0x2AB9f67A...3a2B158bA
0.12063104 ETH
27955202016-12-12 16:10:582773 days ago1481559058
0x2AB9f67A...3a2B158bA
11.94247346 ETH
27955202016-12-12 16:10:582773 days ago1481559058
0x2AB9f67A...3a2B158bA
0.0028053 ETH
27955202016-12-12 16:10:582773 days ago1481559058
0x2AB9f67A...3a2B158bA
0.27772567 ETH
27955202016-12-12 16:10:582773 days ago1481559058
0x2AB9f67A...3a2B158bA
0.05486253 ETH
27955202016-12-12 16:10:582773 days ago1481559058
0x2AB9f67A...3a2B158bA
5.43139092 ETH
27955202016-12-12 16:10:582773 days ago1481559058
0x2AB9f67A...3a2B158bA
0.76756064 ETH
27955202016-12-12 16:10:582773 days ago1481559058
0x2AB9f67A...3a2B158bA
75.98850365 ETH
27955202016-12-12 16:10:582773 days ago1481559058
0x2AB9f67A...3a2B158bA
0.14479643 ETH
27955202016-12-12 16:10:582773 days ago1481559058
0x2AB9f67A...3a2B158bA
14.33484741 ETH
27941172016-12-12 10:31:182774 days ago1481538678
0x2AB9f67A...3a2B158bA
5.44248545 ETH
27941072016-12-12 10:29:222774 days ago1481538562
0x2AB9f67A...3a2B158bA
0.00689408 ETH
27940752016-12-12 10:23:172774 days ago1481538197
0x2AB9f67A...3a2B158bA
5.44248545 ETH
27940662016-12-12 10:20:382774 days ago1481538038
0x2AB9f67A...3a2B158bA
0.00689408 ETH
27914872016-12-11 23:56:462774 days ago1481500606
0x2AB9f67A...3a2B158bA
0.53748545 ETH
27914792016-12-11 23:55:342774 days ago1481500534
0x2AB9f67A...3a2B158bA
0.00689408 ETH
27910322016-12-11 22:08:432774 days ago1481494123
0x2AB9f67A...3a2B158bA
1.08248545 ETH
27910232016-12-11 22:07:032774 days ago1481494023
0x2AB9f67A...3a2B158bA
0.00689408 ETH
27910132016-12-11 22:04:562774 days ago1481493896
0x2AB9f67A...3a2B158bA
0.75548545 ETH
27910072016-12-11 22:03:432774 days ago1481493823
0x2AB9f67A...3a2B158bA
0.00689408 ETH
27882312016-12-11 11:07:352775 days ago1481454455
0x2AB9f67A...3a2B158bA
1.62748545 ETH
27882292016-12-11 11:05:492775 days ago1481454349
0x2AB9f67A...3a2B158bA
0.00689408 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Dice

Compiler Version
v0.3.5-2016-07-21-6610add

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2016-08-05
*/

// <ORACLIZE_API>
/*
Copyright (c) 2015-2016 Oraclize srl, Thomas Bertani



Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:



The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.



THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

contract OraclizeI {
    address public cbAddress;
    function query(uint _timestamp, string _datasource, string _arg) returns (bytes32 _id);
    function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) returns (bytes32 _id);
    function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) returns (bytes32 _id);
    function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) returns (bytes32 _id);
    function getPrice(string _datasource) returns (uint _dsprice);
    function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice);
    function useCoupon(string _coupon);
    function setProofType(byte _proofType);
    function setCustomGasPrice(uint _gasPrice);
}
contract OraclizeAddrResolverI {
    function getAddress() returns (address _addr);
}
contract usingOraclize {
    uint constant day = 60*60*24;
    uint constant week = 60*60*24*7;
    uint constant month = 60*60*24*30;
    byte constant proofType_NONE = 0x00;
    byte constant proofType_TLSNotary = 0x10;
    byte constant proofStorage_IPFS = 0x01;
    uint8 constant networkID_auto = 0;
    uint8 constant networkID_mainnet = 1;
    uint8 constant networkID_testnet = 2;
    uint8 constant networkID_morden = 2;
    uint8 constant networkID_consensys = 161;

    OraclizeAddrResolverI OAR;

    OraclizeI oraclize;
    modifier oraclizeAPI {
        address oraclizeAddr = OAR.getAddress();
        if (oraclizeAddr == 0){
            oraclize_setNetwork(networkID_auto);
            oraclizeAddr = OAR.getAddress();
        }
        oraclize = OraclizeI(oraclizeAddr);
        _
    }
    modifier coupon(string code){
        oraclize = OraclizeI(OAR.getAddress());
        oraclize.useCoupon(code);
        _
    }

    function oraclize_setNetwork(uint8 networkID) internal returns(bool){
        if (getCodeSize(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed)>0){
            OAR = OraclizeAddrResolverI(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed);
            return true;
        }
        if (getCodeSize(0x9efbea6358bed926b293d2ce63a730d6d98d43dd)>0){
            OAR = OraclizeAddrResolverI(0x9efbea6358bed926b293d2ce63a730d6d98d43dd);
            return true;
        }
        if (getCodeSize(0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf)>0){
            OAR = OraclizeAddrResolverI(0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf);
            return true;
        }
        return false;
    }

    function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        return oraclize.query.value(price)(0, datasource, arg);
    }
    function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        return oraclize.query.value(price)(timestamp, datasource, arg);
    }
    function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit);
    }
    function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit);
    }
    function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        return oraclize.query2.value(price)(0, datasource, arg1, arg2);
    }
    function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2);
    }
    function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit);
    }
    function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit);
    }
    function oraclize_cbAddress() oraclizeAPI internal returns (address){
        return oraclize.cbAddress();
    }
    function oraclize_setProof(byte proofP) oraclizeAPI internal {
        return oraclize.setProofType(proofP);
    }
    function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal {
        return oraclize.setCustomGasPrice(gasPrice);
    }

    function getCodeSize(address _addr) constant internal returns(uint _size) {
        assembly {
            _size := extcodesize(_addr)
        }
    }


    function parseAddr(string _a) internal returns (address){
        bytes memory tmp = bytes(_a);
        uint160 iaddr = 0;
        uint160 b1;
        uint160 b2;
        for (uint i=2; i<2+2*20; i+=2){
            iaddr *= 256;
            b1 = uint160(tmp[i]);
            b2 = uint160(tmp[i+1]);
            if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87;
            else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48;
            if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87;
            else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48;
            iaddr += (b1*16+b2);
        }
        return address(iaddr);
    }


    function strCompare(string _a, string _b) internal returns (int) {
        bytes memory a = bytes(_a);
        bytes memory b = bytes(_b);
        uint minLength = a.length;
        if (b.length < minLength) minLength = b.length;
        for (uint i = 0; i < minLength; i ++)
            if (a[i] < b[i])
                return -1;
            else if (a[i] > b[i])
                return 1;
        if (a.length < b.length)
            return -1;
        else if (a.length > b.length)
            return 1;
        else
            return 0;
   }

    function indexOf(string _haystack, string _needle) internal returns (int)
    {
        bytes memory h = bytes(_haystack);
        bytes memory n = bytes(_needle);
        if(h.length < 1 || n.length < 1 || (n.length > h.length))
            return -1;
        else if(h.length > (2**128 -1))
            return -1;
        else
        {
            uint subindex = 0;
            for (uint i = 0; i < h.length; i ++)
            {
                if (h[i] == n[0])
                {
                    subindex = 1;
                    while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex])
                    {
                        subindex++;
                    }
                    if(subindex == n.length)
                        return int(i);
                }
            }
            return -1;
        }
    }

    function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string){
        bytes memory _ba = bytes(_a);
        bytes memory _bb = bytes(_b);
        bytes memory _bc = bytes(_c);
        bytes memory _bd = bytes(_d);
        bytes memory _be = bytes(_e);
        string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length);
        bytes memory babcde = bytes(abcde);
        uint k = 0;
        for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i];
        for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i];
        for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i];
        for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i];
        for (i = 0; i < _be.length; i++) babcde[k++] = _be[i];
        return string(babcde);
    }

    function strConcat(string _a, string _b, string _c, string _d) internal returns (string) {
        return strConcat(_a, _b, _c, _d, "");
    }

    function strConcat(string _a, string _b, string _c) internal returns (string) {
        return strConcat(_a, _b, _c, "", "");
    }

    function strConcat(string _a, string _b) internal returns (string) {
        return strConcat(_a, _b, "", "", "");
    }

    // parseInt
    function parseInt(string _a) internal returns (uint) {
        return parseInt(_a, 0);
    }

    // parseInt(parseFloat*10^_b)
    function parseInt(string _a, uint _b) internal returns (uint) {
        bytes memory bresult = bytes(_a);
        uint mint = 0;
        bool decimals = false;
        for (uint i=0; i<bresult.length; i++){
            if ((bresult[i] >= 48)&&(bresult[i] <= 57)){
                if (decimals){
                   if (_b == 0) break;
                    else _b--;
                }
                mint *= 10;
                mint += uint(bresult[i]) - 48;
            } else if (bresult[i] == 46) decimals = true;
        }
        if (_b > 0) mint *= 10**_b;
        return mint;
    }


}
// </ORACLIZE_API>

contract Dice is usingOraclize {

    uint public pwin = 5000; //probability of winning (10000 = 100%)
    uint public edge = 200; //edge percentage (10000 = 100%)
    uint public maxWin = 100; //max win (before edge is taken) as percentage of bankroll (10000 = 100%)
    uint public minBet = 1 finney;
    uint public maxInvestors = 5; //maximum number of investors
    uint public houseEdge = 50; //edge percentage (10000 = 100%)
    uint public divestFee = 50; //divest fee percentage (10000 = 100%)
    uint public emergencyWithdrawalRatio = 90; //ratio percentage (100 = 100%)

    uint safeGas = 25000;
    uint constant ORACLIZE_GAS_LIMIT = 125000;
    uint constant INVALID_BET_MARKER = 99999;
    uint constant EMERGENCY_TIMEOUT = 7 days;

    struct Investor {
        address investorAddress;
        uint amountInvested;
        bool votedForEmergencyWithdrawal;
    }

    struct Bet {
        address playerAddress;
        uint amountBetted;
        uint numberRolled;
    }

    struct WithdrawalProposal {
        address toAddress;
        uint atTime;
    }

    //Starting at 1
    mapping(address => uint) public investorIDs;
    mapping(uint => Investor) public investors;
    uint public numInvestors = 0;

    uint public invested = 0;

    address owner;
    address houseAddress;
    bool public isStopped;

    WithdrawalProposal public proposedWithdrawal;

    mapping (bytes32 => Bet) bets;
    bytes32[] betsKeys;

    uint public amountWagered = 0;
    uint public investorsProfit = 0;
    uint public investorsLoses = 0;
    bool profitDistributed;

    event BetWon(address playerAddress, uint numberRolled, uint amountWon);
    event BetLost(address playerAddress, uint numberRolled);
    event EmergencyWithdrawalProposed();
    event EmergencyWithdrawalFailed(address withdrawalAddress);
    event EmergencyWithdrawalSucceeded(address withdrawalAddress, uint amountWithdrawn);
    event FailedSend(address receiver, uint amount);
    event ValueIsTooBig();

    function Dice(uint pwinInitial,
                  uint edgeInitial,
                  uint maxWinInitial,
                  uint minBetInitial,
                  uint maxInvestorsInitial,
                  uint houseEdgeInitial,
                  uint divestFeeInitial,
                  uint emergencyWithdrawalRatioInitial
                  ) {

        oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS);

        pwin = pwinInitial;
        edge = edgeInitial;
        maxWin = maxWinInitial;
        minBet = minBetInitial;
        maxInvestors = maxInvestorsInitial;
        houseEdge = houseEdgeInitial;
        divestFee = divestFeeInitial;
        emergencyWithdrawalRatio = emergencyWithdrawalRatioInitial;
        owner = msg.sender;
        houseAddress = msg.sender;
    }

    //SECTION I: MODIFIERS AND HELPER FUNCTIONS

    //MODIFIERS

    modifier onlyIfNotStopped {
        if (isStopped) throw;
        _
    }

    modifier onlyIfStopped {
        if (!isStopped) throw;
        _
    }

    modifier onlyInvestors {
        if (investorIDs[msg.sender] == 0) throw;
        _
    }

    modifier onlyNotInvestors {
        if (investorIDs[msg.sender] != 0) throw;
        _
    }

    modifier onlyOwner {
        if (owner != msg.sender) throw;
        _
    }

    modifier onlyOraclize {
        if (msg.sender != oraclize_cbAddress()) throw;
        _
    }

    modifier onlyMoreThanMinInvestment {
        if (msg.value <= getMinInvestment()) throw;
        _
    }

    modifier onlyMoreThanZero {
        if (msg.value == 0) throw;
        _
    }

    modifier onlyIfBetSizeIsStillCorrect(bytes32 myid) {
        Bet thisBet = bets[myid];
        if ((((thisBet.amountBetted * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000)) {
             _
        }
        else {
            bets[myid].numberRolled = INVALID_BET_MARKER;
            safeSend(thisBet.playerAddress, thisBet.amountBetted);
            return;
        }
    }

    modifier onlyIfValidRoll(bytes32 myid, string result) {
        Bet thisBet = bets[myid];
        uint numberRolled = parseInt(result);
        if ((numberRolled < 1 || numberRolled > 10000) && thisBet.numberRolled == 0) {
            bets[myid].numberRolled = INVALID_BET_MARKER;
            safeSend(thisBet.playerAddress, thisBet.amountBetted);
            return;
        }
        _
    }

    modifier onlyIfInvestorBalanceIsPositive(address currentInvestor) {
        if (getBalance(currentInvestor) >= 0) {
            _
        }
    }

    modifier onlyWinningBets(uint numberRolled) {
        if (numberRolled - 1 < pwin) {
            _
        }
    }

    modifier onlyLosingBets(uint numberRolled) {
        if (numberRolled - 1 >= pwin) {
            _
        }
    }

    modifier onlyAfterProposed {
        if (proposedWithdrawal.toAddress == 0) throw;
        _
    }

    modifier rejectValue {
        if (msg.value != 0) throw;
        _
    }

    modifier onlyIfProfitNotDistributed {
        if (!profitDistributed) {
            _
        }
    }

    modifier onlyIfValidGas(uint newGasLimit) {
        if (newGasLimit < 25000) throw;
        _
    }

    modifier onlyIfNotProcessed(bytes32 myid) {
        Bet thisBet = bets[myid];
        if (thisBet.numberRolled > 0) throw;
        _
    }

    modifier onlyIfEmergencyTimeOutHasPassed {
        if (proposedWithdrawal.atTime + EMERGENCY_TIMEOUT > now) throw;
        _
    }


    //CONSTANT HELPER FUNCTIONS

    function getBankroll() constant returns(uint) {
        return invested + investorsProfit - investorsLoses;
    }

    function getMinInvestment() constant returns(uint) {
        if (numInvestors == maxInvestors) {
            uint investorID = searchSmallestInvestor();
            return getBalance(investors[investorID].investorAddress);
        }
        else {
            return 0;
        }
    }

    function getStatus() constant returns(uint, uint, uint, uint, uint, uint, uint, uint, uint) {

        uint bankroll = getBankroll();

        uint minInvestment = getMinInvestment();

        return (bankroll, pwin, edge, maxWin, minBet, amountWagered, (investorsProfit - investorsLoses), minInvestment, betsKeys.length);
    }

    function getBet(uint id) constant returns(address, uint, uint) {
        if (id < betsKeys.length) {
            bytes32 betKey = betsKeys[id];
            return (bets[betKey].playerAddress, bets[betKey].amountBetted, bets[betKey].numberRolled);
        }
    }

    function numBets() constant returns(uint) {
        return betsKeys.length;
    }

    function getMinBetAmount() constant returns(uint) {
        uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice("URL", ORACLIZE_GAS_LIMIT + safeGas);
        return oraclizeFee + minBet;
    }

    function getMaxBetAmount() constant returns(uint) {
        uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice("URL", ORACLIZE_GAS_LIMIT + safeGas);
        uint betValue =  (maxWin * getBankroll()) * pwin / (10000 * (10000 - edge - pwin));
        return betValue + oraclizeFee;
    }

    function getLosesShare(address currentInvestor) constant returns (uint) {
        return investors[investorIDs[currentInvestor]].amountInvested * (investorsLoses) / invested;
    }

    function getProfitShare(address currentInvestor) constant returns (uint) {
        return investors[investorIDs[currentInvestor]].amountInvested * (investorsProfit) / invested;
    }

    function getBalance(address currentInvestor) constant returns (uint) {
        return investors[investorIDs[currentInvestor]].amountInvested + getProfitShare(currentInvestor) - getLosesShare(currentInvestor);
    }

    function searchSmallestInvestor() constant returns(uint) {
        uint investorID = 1;
        for (uint i = 1; i <= numInvestors; i++) {
            if (getBalance(investors[i].investorAddress) < getBalance(investors[investorID].investorAddress)) {
                investorID = i;
            }
        }

        return investorID;
    }

    // PRIVATE HELPERS FUNCTION

    function safeSend(address addr, uint value) private {
        if (this.balance < value) {
            ValueIsTooBig();
            return;
        }

        if (!(addr.call.gas(safeGas).value(value)())) {
            FailedSend(addr, value);
            if (addr != houseAddress) {
                //Forward to house address all change
                if (!(houseAddress.call.gas(safeGas).value(value)())) FailedSend(houseAddress, value);
            }
        }
    }

    function addInvestorAtID(uint id) private {
        investorIDs[msg.sender] = id;
        investors[id].investorAddress = msg.sender;
        investors[id].amountInvested = msg.value;
        invested += msg.value;
    }

    function profitDistribution() private onlyIfProfitNotDistributed {
        uint copyInvested;

        for (uint i = 1; i <= numInvestors; i++) {
            address currentInvestor = investors[i].investorAddress;
            uint profitOfInvestor = getProfitShare(currentInvestor);
            uint losesOfInvestor = getLosesShare(currentInvestor);
            investors[i].amountInvested += profitOfInvestor - losesOfInvestor;
            copyInvested += investors[i].amountInvested;
        }

        delete investorsProfit;
        delete investorsLoses;
        invested = copyInvested;

        profitDistributed = true;
    }

    // SECTION II: BET & BET PROCESSING

    function() {
        bet();
    }

    function bet() onlyIfNotStopped onlyMoreThanZero {
        uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice("URL", ORACLIZE_GAS_LIMIT + safeGas);
        uint betValue = msg.value - oraclizeFee;
        if ((((betValue * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000) && (betValue >= minBet)) {
            // encrypted arg: '\n{"jsonrpc":2.0,"method":"generateSignedIntegers","params":{"apiKey":"YOUR_API_KEY","n":1,"min":1,"max":10000},"id":1}'
            bytes32 myid = oraclize_query("URL", "json(https://api.random.org/json-rpc/1/invoke).result.random.data.0","BAMe+COA7GTmPrm1MtEyeRfPpOjXWs99NXtPmkY1LL7BEyA5Ir/oIYHZ5v8cfJ7gzkBJY7sMBqyUKcPIcORQ8CPC4x11Nmlys12n8zMopJBROF+19EDhLEaJR4pMwFvhlW/mkhFHb1hxB3ZR/toj//x+l6fi+h0eXWxx2qqKulId4KY+VcsYIJb/seH+7qEWmu78HQ6LXSdkRAa0lG6tkNFpB0feuh2VztWxd3CC/j1MIT1l0laucp2zFD2FfJngwpix99iYcNq9mvHhDxYpR9eGSRMZ9BnLgsvIW/QB3Zk=", ORACLIZE_GAS_LIMIT + safeGas);
            bets[myid] = Bet(msg.sender, betValue, 0);
            betsKeys.push(myid);
        }
        else {
            throw;
        }
    }

    function __callback (bytes32 myid, string result, bytes proof)
        onlyOraclize
        onlyIfNotProcessed(myid)
        onlyIfValidRoll(myid, result)
        onlyIfBetSizeIsStillCorrect(myid)  {

        Bet thisBet = bets[myid];
        uint numberRolled = parseInt(result);
        bets[myid].numberRolled = numberRolled;
        isWinningBet(thisBet, numberRolled);
        isLosingBet(thisBet, numberRolled);
        amountWagered += thisBet.amountBetted;
        delete profitDistributed;
    }

    function isWinningBet(Bet thisBet, uint numberRolled) private onlyWinningBets(numberRolled) {
        uint winAmount = (thisBet.amountBetted * (10000 - edge)) / pwin;
        BetWon(thisBet.playerAddress, numberRolled, winAmount);
        safeSend(thisBet.playerAddress, winAmount);
        investorsLoses += (winAmount - thisBet.amountBetted);
    }

    function isLosingBet(Bet thisBet, uint numberRolled) private onlyLosingBets(numberRolled) {
        BetLost(thisBet.playerAddress, numberRolled);
        safeSend(thisBet.playerAddress, 1);
        investorsProfit += (thisBet.amountBetted - 1)*(10000 - houseEdge)/10000;
        uint houseProfit = (thisBet.amountBetted - 1)*(houseEdge)/10000;
        safeSend(houseAddress, houseProfit);
    }

    //SECTION III: INVEST & DIVEST

    function increaseInvestment() onlyIfNotStopped onlyMoreThanZero onlyInvestors  {
        profitDistribution();
        investors[investorIDs[msg.sender]].amountInvested += msg.value;
        invested += msg.value;
    }

    function newInvestor()
        onlyIfNotStopped
        onlyMoreThanZero
        onlyNotInvestors
        onlyMoreThanMinInvestment {

        profitDistribution();

        if (numInvestors == maxInvestors) {
            uint smallestInvestorID = searchSmallestInvestor();
            divest(investors[smallestInvestorID].investorAddress);
        }

        numInvestors++;
        addInvestorAtID(numInvestors);
    }

    function divest() onlyInvestors rejectValue {
        divest(msg.sender);
    }


    function divest(address currentInvestor)
        private
        onlyIfInvestorBalanceIsPositive(currentInvestor) {

        profitDistribution();
        uint currentID = investorIDs[currentInvestor];
        uint amountToReturn = getBalance(currentInvestor);
        invested -= investors[currentID].amountInvested;
        uint divestFeeAmount =  (amountToReturn*divestFee)/10000;
        amountToReturn -= divestFeeAmount;

        delete investors[currentID];
        delete investorIDs[currentInvestor];
        //Reorder investors

        if (currentID != numInvestors) {
            // Get last investor
            Investor lastInvestor = investors[numInvestors];
            //Set last investor ID to investorID of divesting account
            investorIDs[lastInvestor.investorAddress] = currentID;
            //Copy investor at the new position in the mapping
            investors[currentID] = lastInvestor;
            //Delete old position in the mappping
            delete investors[numInvestors];
        }

        numInvestors--;
        safeSend(currentInvestor, amountToReturn);
        safeSend(houseAddress, divestFeeAmount);
    }

    function forceDivestOfAllInvestors() onlyOwner rejectValue {
        uint copyNumInvestors = numInvestors;
        for (uint i = 1; i <= copyNumInvestors; i++) {
            divest(investors[1].investorAddress);
        }
    }

    /*
    The owner can use this function to force the exit of an investor from the
    contract during an emergency withdrawal in the following situations:
        - Unresponsive investor
        - Investor demanding to be paid in other to vote, the facto-blackmailing
        other investors
    */
    function forceDivestOfOneInvestor(address currentInvestor)
        onlyOwner
        onlyIfStopped
        rejectValue {

        divest(currentInvestor);
        //Resets emergency withdrawal proposal. Investors must vote again
        delete proposedWithdrawal;
    }

    //SECTION IV: CONTRACT MANAGEMENT

    function stopContract() onlyOwner rejectValue {
        isStopped = true;
    }

    function resumeContract() onlyOwner rejectValue {
        isStopped = false;
    }

    function changeHouseAddress(address newHouse) onlyOwner rejectValue {
        houseAddress = newHouse;
    }

    function changeOwnerAddress(address newOwner) onlyOwner rejectValue {
        owner = newOwner;
    }

    function changeGasLimitOfSafeSend(uint newGasLimit)
        onlyOwner
        onlyIfValidGas(newGasLimit)
        rejectValue {
        safeGas = newGasLimit;
    }

    //SECTION V: EMERGENCY WITHDRAWAL

    function voteEmergencyWithdrawal(bool vote)
        onlyInvestors
        onlyAfterProposed
        onlyIfStopped
        rejectValue {
        investors[investorIDs[msg.sender]].votedForEmergencyWithdrawal = vote;
    }

    function proposeEmergencyWithdrawal(address withdrawalAddress)
        onlyIfStopped
        onlyOwner
        rejectValue {

        //Resets previous votes
        for (uint i = 1; i <= numInvestors; i++) {
            delete investors[i].votedForEmergencyWithdrawal;
        }

        proposedWithdrawal = WithdrawalProposal(withdrawalAddress, now);
        EmergencyWithdrawalProposed();
    }

    function executeEmergencyWithdrawal()
        onlyOwner
        onlyAfterProposed
        onlyIfStopped
        onlyIfEmergencyTimeOutHasPassed
        rejectValue {

        uint numOfVotesInFavour;
        uint amountToWithdrawal = this.balance;

        for (uint i = 1; i <= numInvestors; i++) {
            if (investors[i].votedForEmergencyWithdrawal == true) {
                numOfVotesInFavour++;
                delete investors[i].votedForEmergencyWithdrawal;
            }
        }

        if (numOfVotesInFavour >= emergencyWithdrawalRatio * numInvestors / 100) {
            if (!proposedWithdrawal.toAddress.send(this.balance)) {
                EmergencyWithdrawalFailed(proposedWithdrawal.toAddress);
            }
            else {
                EmergencyWithdrawalSucceeded(proposedWithdrawal.toAddress, amountToWithdrawal);
            }
        }
        else {
            throw;
        }
    }

}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[],"name":"divest","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getBet","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"getBankroll","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"bet","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"currentInvestor","type":"address"}],"name":"getProfitShare","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"stopContract","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"numInvestors","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"maxWin","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"emergencyWithdrawalRatio","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"vote","type":"bool"}],"name":"voteEmergencyWithdrawal","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"newHouse","type":"address"}],"name":"changeHouseAddress","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"forceDivestOfAllInvestors","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"investorsLoses","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"myid","type":"bytes32"},{"name":"result","type":"string"},{"name":"proof","type":"bytes"}],"name":"__callback","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"isStopped","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"investors","outputs":[{"name":"investorAddress","type":"address"},{"name":"amountInvested","type":"uint256"},{"name":"votedForEmergencyWithdrawal","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"searchSmallestInvestor","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"withdrawalAddress","type":"address"}],"name":"proposeEmergencyWithdrawal","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"divestFee","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"getStatus","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"currentInvestor","type":"address"}],"name":"forceDivestOfOneInvestor","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"proposedWithdrawal","outputs":[{"name":"toAddress","type":"address"},{"name":"atTime","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"getMaxBetAmount","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"investorsProfit","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"investorIDs","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"getMinInvestment","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"getMinBetAmount","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"changeOwnerAddress","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"minBet","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"increaseInvestment","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"pwin","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"edge","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"maxInvestors","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"resumeContract","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"invested","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"newGasLimit","type":"uint256"}],"name":"changeGasLimitOfSafeSend","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"amountWagered","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"houseEdge","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"numBets","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"currentInvestor","type":"address"}],"name":"getLosesShare","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"executeEmergencyWithdrawal","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"currentInvestor","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"newInvestor","outputs":[],"type":"function"},{"inputs":[{"name":"pwinInitial","type":"uint256"},{"name":"edgeInitial","type":"uint256"},{"name":"maxWinInitial","type":"uint256"},{"name":"minBetInitial","type":"uint256"},{"name":"maxInvestorsInitial","type":"uint256"},{"name":"houseEdgeInitial","type":"uint256"},{"name":"divestFeeInitial","type":"uint256"},{"name":"emergencyWithdrawalRatioInitial","type":"uint256"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"numberRolled","type":"uint256"},{"indexed":false,"name":"amountWon","type":"uint256"}],"name":"BetWon","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"numberRolled","type":"uint256"}],"name":"BetLost","type":"event"},{"anonymous":false,"inputs":[],"name":"EmergencyWithdrawalProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"withdrawalAddress","type":"address"}],"name":"EmergencyWithdrawalFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"withdrawalAddress","type":"address"},{"indexed":false,"name":"amountWithdrawn","type":"uint256"}],"name":"EmergencyWithdrawalSucceeded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"receiver","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"FailedSend","type":"event"},{"anonymous":false,"inputs":[],"name":"ValueIsTooBig","type":"event"}]

6060604081905261138860025560c8600355606460045566038d7ea4c68000600590815560065560326007819055600855605a6009556161a8600a556000600d819055600e81905560158190556016819055601755610100806125f18339610160604052905160805160a05160c05160e05194516101205161014051959694959394929361013a7f1100000000000000000000000000000000000000000000000000000000000000600080547f38cc483100000000000000000000000000000000000000000000000000000000610160908152600160a060020a03909116906338cc4831906101649060209060048187876161da5a03f1156100025750506040515191600160a060020a0383161415905061024d576101dc6000600060006102c9731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed5b3b90565b876002600050819055508660036000508190555085600460005081905550846005600050819055508360066000508190555082600760005081905550816008600050819055508060096000508190555033600f60006101000a815481600160a060020a030219169083021790555033601060006101000a815481600160a060020a0302191690830217905550505050505050505061224f806103a26000396000f35b50600060009054906101000a9004600160a060020a0316600160a060020a03166338cc4831604051817c01000000000000000000000000000000000000000000000000000000000281526004018090506020604051808303816000876161da5a03f115610002575050604051519150505b60018054600160a060020a031916821790819055604080517f688dcfd7000000000000000000000000000000000000000000000000000000008152600481018590529051600160a060020a03929092169163688dcfd791602481810192600092909190829003018183876161da5a03f115610002575050505050565b11156102fc57508054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed17815560015b919050565b600061031b739efbea6358bed926b293d2ce63a730d6d98d43dd610136565b111561034f57508054739efbea6358bed926b293d2ce63a730d6d98d43dd600160a060020a031990911617815560016102f7565b600061036e7320e12a1f859b3feae5fb2a0a32c18f5a65555bbf610136565b11156102f7575080547320e12a1f859b3feae5fb2a0a32c18f5a65555bbf600160a060020a031990911617815560016102f756606060405236156101ed5760e060020a6000350463058aace181146101f8578063061e494f1461021f5780630d1fce421461029f57806311610c25146102b2578063116c6eab146102d657806312253a6c14610314578063132ae5e91461033357806316d190e31461033c57806317c5fed814610345578063187a62d51461034e5780631efb17ee14610378578063232523e81461039a578063333e1a72146103be57806338bbfa50146103c75780633f683b6a146104cc5780633feb5f2b146104df57806340a49a96146105135780634671e65e146105475780634dc6b523146105685780634e69d5601461057157806351404cbe14610592578063518496b2146105b4578063550ed1f0146105cb57806366aee0fc146106b85780636be80de7146106c1578063724ae9d0146106d957806382a5285d146106f657806385eac05f146107d25780639619367d146107f4578063a4beffa7146107fd578063a96a5a5b14610817578063adc2c98a14610820578063bc99cc3714610829578063c4bc5da514610832578063cafb220214610851578063d21d79501461085a578063d4c80edf1461087c578063d667dcd714610885578063df06f9061461088e578063e0e3ba5a14610899578063f4993bbd146108d6578063f8b2cb4f146108fc578063fb099c841461090e575b61092c61092e6102b6565b61092c33600160a060020a03166000908152600b60205260408120541415610d5e57610002565b6109306004356014546000908190819081908510156102975760148054869081101561000257505050507fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec83015490819052601360205260409091208054600182015460029290920154600160a060020a0391909116925b509193909250565b6109595b601754601654600e5401035b90565b61092c5b600060006000601060149054906101000a900460ff1615610a1757610002565b6109596004355b600e54601654600160a060020a0383166000908152600b60209081526040808320548352600c90915290206001015402045b919050565b61092c600f54600160a060020a039081163390911614610d8457610002565b610959600d5481565b61095960045481565b61095960095481565b61092c60043533600160a060020a03166000908152600b60205260408120541415610ded57610002565b61092c600435600f54600160a060020a039081163390911614610e2b57610002565b61092c600f546000908190600160a060020a039081163390911614610e4d57610002565b61095960175481565b60408051602060248035600481810135601f810185900485028601850190965285855261092c9581359591946044949293909201918190840183828082843750506040805160209735808a0135601f81018a90048a0283018a01909352828252969897606497919650602491909101945090925082915084018382808284375094965050505050505060006000610f4460006000600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060405151915050600160a060020a038116821415611d7a57611d226000610c6a565b61096b60105460a060020a900460ff1681565b600c602052600435600090815260409020600181015481546002929092015461097f92600160a060020a0316919060ff1683565b6109595b60006001805b600d548111611296576000828152600c602052604090205461129f90600160a060020a0316610903565b61092c60043560105460009060a060020a900460ff1615156112d257610002565b61095960085481565b6109aa6000600060006000600060006000600060006000600061137f6102a3565b61092c600435600f54600160a060020a0390811633909116146113e057610002565b6011546012546109f191600160a060020a03169082565b610959600060006000600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604080518051600a5460e260020a630bbceb330283526201e848016024830152600482018390526003604483015260ea60020a621554930260648301529151600160a060020a03929092169250632ef3accc916084828101926020929190829003018187876161da5a03f1156100025750506040515160025460035491945061271091820381900390910291506114266102a3565b61095960165481565b610959600435600b6020526000908152604090205481565b6109595b600654600d5460009182911415610d5557611438610517565b61095960006000600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604080518051600a5460e260020a630bbceb330283526201e848016024830152600482018390526003604483015260ea60020a621554930260648301529151600160a060020a03929092169250632ef3accc916084828101926020929190829003018187876161da5a03f11561000257505060405151600554810193509150610d5a9050565b61092c600435600f54600160a060020a03908116339091161461146357610002565b61095960055481565b61092c60105460a060020a900460ff161561148557610002565b61095960025481565b61095960035481565b61095960065481565b61092c600f54600160a060020a03908116339091161461153f57610002565b610959600e5481565b61092c600435600f54600160a060020a03908116339091161461156c57610002565b61095960155481565b61095960075481565b6109596014546102af565b6109596004355b600e54601754600160a060020a0383166000908152600b60209081526040808320548352600c909152902060010154020461030f565b61092c600f5460009081908190600160a060020a03908116339091161461158f57610002565b6109596004355b6000611710826108a0565b61092c60105460009060ff60a060020a909104161561174b57610002565b005b565b60408051600160a060020a03949094168452602084019290925282820152519081900360600190f35b60408051918252519081900360200190f35b604080519115158252519081900360200190f35b60408051600160a060020a039490941684526020840192909252151582820152519081900360600190f35b60408051998a5260208a0198909852888801969096526060880194909452608087019290925260a086015260c085015260e084015261010083015251908190036101200190f35b6040518083600160a060020a031681526020018281526020019250505060405180910390f35b3460001415610a2557610002565b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604080518051600a5460e260020a630bbceb330283526201e848016024830152600482018390526003604483015260ea60020a621554930260648301529151600160a060020a03929092169250632ef3accc91608480830192602092919082900301816000876161da5a03f11561000257505060405151935050348390039150612710610aff6102a3565b6004600050540204600260005054600260005054600360005054612710030384020411158015610b3157506005548210155b15610c8b576040805180820182526003815260ea60020a62155493026020828101919091528251608081018452604381527f6a736f6e2868747470733a2f2f6170692e72616e646f6d2e6f72672f6a736f6e818301527f2d7270632f312f696e766f6b65292e726573756c742e72616e646f6d2e646174818501527f612e30000000000000000000000000000000000000000000000000000000000060608201528351610160810190945261012c808552610c9094919261212390830139600a546201e84801600060006000600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060405151915050600160a060020a0381168214156118835761182b60005b60006000611fa8731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed5b3b90565b610002565b604080516060810182523381526020818101868152600083850181815286825260139093529390932091518254600160a060020a031916178255915160018281019190915591516002919091015560148054918201808255929350918281838015829011610d3d576000839052610d3d907fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec9081019083015b80821115610d5a5760008155600101610d29565b5050506000928352506020909120018190555b505050565b600091505b5090565b34600014610d6b57610002565b61092e335b6000600060006000846000611b0282610903565b34600014610d9157610002565b6010805474ff0000000000000000000000000000000000000000191660a060020a179055565b33600160a060020a03166000908152600b60209081526040808320548352600c9091529020600201805460ff1916821790555b50565b601154600160a060020a031660001415610e0657610002565b60105460a060020a900460ff161515610e1e57610002565b34600014610db757610002565b34600014610e3857610002565b60108054600160a060020a0319168217905550565b34600014610e5a57610002565b5050600d5460015b818111610f12576001600052600c6020527fd421a5181c571bba3f01190c922c3b2a896fc1d84e86c9f17ac10e67ebef8b5c54610f1690600160a060020a0316610d70565b60008281526013602052604090206201869f600291909101558054600182015461128991600160a060020a0316905b8030600160a060020a0316311015611e00576040517f9bc0f7b8676ac8a3d913fc962a472bc40103acaa27e5477c1eadfbb7d4897a0490600090a15b5050565b600101610e62565b6015805460018c01540190556018805460ff1916905550505050505050505b5050505050565b600160a060020a031633600160a060020a0316141515610f6357610002565b600085815260136020526040812060028101548792901115610f8457610002565b6000878152601360205260408120889188919061105a835b6000611df98260006040805160208101909152600090819052828180805b835181101561103c57603060f860020a028482815181101561000257016020015160f860020a9081900402600160f860020a031916108015906110275750603960f860020a028482815181101561000257016020015160f860020a9081900402600160f860020a03191611155b1561208e5781156120ef5785600014156120e6575b600086111561104f57600a86900a909202915b509095945050505050565b9050600181108061106c575061271081115b801561107c575060028201546000145b156110b45760008481526013602052604090206201869f60029190910155815460018301546110cf91600160a060020a031690610ed6565b60008b81526013602052604090208b906127106110da6102a3565b505050505050610f3d565b6004600050540204600260005054600260005054600360005054612710030383600101600050540204111515610ea75760008d815260136020526040902099506111238c610f9c565b60008e815260136020908152604091829020600290810184905582516060810184528e54600160a060020a0316815260018f0154928101929092528d0154918101919091529099506111f3908a600081600260005054600182031015611f0a57604080516002546003548751602089810151600160a060020a03929092168552840186905261271091909103020481830181905291519193507f8f25eec129b997ba51175c8f2583cafbfc0c076ef19e2c455869730f969ec44d919081900360600190a18351611ef89083610ed6565b604080516060810182528b54600160a060020a0316815260018c0154602082015260028c015491810191909152610f1e908a6002546000908290600019820110611f0a57604080518551600160a060020a031681526020810183905281517fcb9c7189736051e86837ee4847c751bad47c86cb506933875ff8fabf9eeda008929181900390910190a18351611f10906001610ed6565b5050505050505050610f3d565b8192505b505090565b6000828152600c60205260409020546112c090600160a060020a0316610903565b10156112ca579050805b60010161051d565b600f54600160a060020a0390811633909116146112ee57610002565b346000146112fb57610002565b5060015b600d548111611329576000818152600c60205260409020600201805460ff191690556001016112ff565b6040805180820182528381524260209190910181905260118054600160a060020a03191685179055601255517ffc136941d6f5a7fa31fea543bdc05be2e77ce86110b5fe83706976590c0d399590600090a15050565b91506113896106dd565b90508160026000505460036000505460046000505460056000505460156000505460176000505460166000505403876014600050805490509a509a509a509a509a509a509a509a509a505050909192939495969798565b60105460a060020a900460ff1615156113f857610002565b3460001461140557610002565b61140e81610d70565b60118054600160a060020a0319169055600060125550565b6004540202048083019350905061129a565b6000818152600c602052604090205490915061145c90600160a060020a0316610903565b9150610d5a565b3460001461147057610002565b600f8054600160a060020a0319168217905550565b346000141561149357610002565b33600160a060020a03166000908152600b602052604081205414156114b757610002565b6115035b601854600090819081908190819060ff161515610f3d57600193505b600d548411611f50576000848152600c6020526040902054600160a060020a03169250611f70836102dd565b33600160a060020a03166000908152600b60209081526040808320548352600c9091529020600101805434908101909155600e80549091019055565b3460001461154c57610002565b6010805474ff000000000000000000000000000000000000000019169055565b806161a881101561157c57610002565b3460001461158957610002565b50600a55565b601154600160a060020a0316600014156115a857610002565b60105460a060020a900460ff1615156115c057610002565b6012544262093a8090910111156115d657610002565b346000146115e357610002565b505030600160a060020a03163160015b600d548111611644576000818152600c602052604090206002015460ff1615156001141561163c576040600090812060020180549183905260ff19919091169055600192909201915b6001016115f3565b600d5460095460649102048310610c8b57604051601154600160a060020a03908116916000913016319082818181858883f1935050505015156116c45760408051601154600160a060020a0316815290517f3b66c41562b841e29923849dc45ac54e17eb64f534c62109ba2cc1e977f8ddaf9181900360200190a161170b565b60408051601154600160a060020a031681526020810184905281517f969fa9d259520e00fd561cbd5c523032e2682528b2be25d2380088b332503814929181900390910190a15b610d50565b611719836102dd565b600160a060020a0384166000908152600b60209081526040808320548352600c9091529020600101540103905061030f565b346000141561175957610002565b33600160a060020a03166000908152600b60205260408120541461177c57610002565b6117846106dd565b341161178f57610002565b6117976114bb565b600d5460065414156117cf576117ab610517565b6000818152600c60205260409020549091506117cf90600160a060020a0316610d70565b600d805460019081019182905533600160a060020a0381166000908152600b60209081526040808320869055948252600c9052929092208054600160a060020a0319169092178255349101819055600e80549091019055610dea565b50600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604051519150505b60018054600160a060020a0319168217908190556040805160e260020a630bbceb330281526024810187905260048181019283528a5160448301528a51600160a060020a039490941693632ef3accc938c938a939192839260649290920191602087810192918291859183918691600091601f850104600f02600301f150905090810190601f16801561192a5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303816000876161da5a03f115610002575050604051519250503a8402670de0b6b3a7640000018211156119735750600091505b50949350505050565b600160009054906101000a9004600160a060020a0316600160a060020a03166385dee34c8360008a8a8a8a6040518760e060020a028152600401808681526020018060200180602001806020018581526020018481038452888181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015611a1e5780820380516001836020036101000a031916815260200191505b508481038352878181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015611a775780820380516001836020036101000a031916815260200191505b508481038252868181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015611ad05780820380516001836020036101000a031916815260200191505b509850505050505050505060206040518083038185886185025a03f11561000257505060405151945061196a92505050565b10611d1a57611b0f6114bb565b600160a060020a0386166000908152600b60205260409020549450611b3386610903565b6000868152600c60209081526040808320600181018054600e80549190910390556008548254600160a060020a031916835590859055600291909101805460ff19169055600160a060020a038b168452600b909252822091909155600d54612710918302919091049182900395509093508514611cf057600c6000506000600d600050548152602001908152602001600020600050915084600b60005060008460000160009054906101000a9004600160a060020a0316600160a060020a031681526020019081526020016000206000508190555081600c60005060008781526020019081526020016000206000506000820160009054906101000a9004600160a060020a03168160000160006101000a815481600160a060020a0302191690830217905550600182016000505481600101600050556002820160009054906101000a900460ff168160020160006101000a81548160ff02191690830217905550905050600c6000506000600d60005054815260200190815260200160002060006000820160006101000a815490600160a060020a03021916905560018201600050600090556002820160006101000a81549060ff021916905550505b600d8054600019019055611d048685610ed6565b601054611d1a90600160a060020a031684610ed6565b505050505050565b50600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604051519150505b60018054600160a060020a031916821790819055604080517fc281d19e0000000000000000000000000000000000000000000000000000000081529051600160a060020a03929092169163c281d19e9160048181019260209290919082900301816000876161da5a03f1156100025750506040515192506102af915050565b905061030f565b604051600a54600160a060020a0384169183906000818181858888f193505050501515610f125760408051600160a060020a03841681526020810183905281517f3d14263aec0db87097e504ee7aca5316e879b2cc7f3b29f9c62d40e9bae04cee929181900390910190a1601054600160a060020a03838116911614610f1257604051601054600a54600160a060020a03919091169183906000818181858888f193505050501515610f125760105460408051600160a060020a039290921682526020820183905280517f3d14263aec0db87097e504ee7aca5316e879b2cc7f3b29f9c62d40e9bae04cee9281900390910190a15050565b60208401516017805491840390910190555b50505050565b600754602085015160168054612710600019939093018484038102849004919091019091556010549202049250611f0a90600160a060020a031683610ed6565b5050600060168190556017555050600e556018805460ff19166001179055565b9150611f7b836108a0565b6000858152600c6020526040902060010180548285030190819055909501949050600193909301926114d7565b1115611fdc575060008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed179055600161030f565b6000611ffb739efbea6358bed926b293d2ce63a730d6d98d43dd610c87565b1115612031575060008054739efbea6358bed926b293d2ce63a730d6d98d43dd600160a060020a0319909116179055600161030f565b60006120507320e12a1f859b3feae5fb2a0a32c18f5a65555bbf610c87565b11156120865750600080547320e12a1f859b3feae5fb2a0a32c18f5a65555bbf600160a060020a0319909116179055600161030f565b50600061030f565b8381815181101561000257016020015160f860020a9081900402600160f860020a0319167f2e0000000000000000000000000000000000000000000000000000000000000014156120de57600191505b600101610fba565b60001995909501945b600a83029250825060308482815181101561000257016020015160f860020a90819004810204909301602f190192506120de5642414d652b434f413747546d50726d314d74457965526650704f6a58577339394e5874506d6b59314c4c37424579413549722f6f4959485a35763863664a37677a6b424a5937734d427179554b635049634f525138435043347831314e6d6c797331326e387a4d6f704a42524f462b31394544684c45614a5234704d774676686c572f6d6b6846486231687842335a522f746f6a2f2f782b6c3666692b683065585778783271714b756c4964344b592b56637359494a622f7365482b377145576d7537384851364c5853646b524161306c4736746b4e467042306665756832567a745778643343432f6a314d4954316c306c61756370327a46443246664a6e677770697839396959634e71396d764868447859705239654753524d5a39426e4c67737649572f5142335a6b3d

Deployed Bytecode

0x606060405236156101ed5760e060020a6000350463058aace181146101f8578063061e494f1461021f5780630d1fce421461029f57806311610c25146102b2578063116c6eab146102d657806312253a6c14610314578063132ae5e91461033357806316d190e31461033c57806317c5fed814610345578063187a62d51461034e5780631efb17ee14610378578063232523e81461039a578063333e1a72146103be57806338bbfa50146103c75780633f683b6a146104cc5780633feb5f2b146104df57806340a49a96146105135780634671e65e146105475780634dc6b523146105685780634e69d5601461057157806351404cbe14610592578063518496b2146105b4578063550ed1f0146105cb57806366aee0fc146106b85780636be80de7146106c1578063724ae9d0146106d957806382a5285d146106f657806385eac05f146107d25780639619367d146107f4578063a4beffa7146107fd578063a96a5a5b14610817578063adc2c98a14610820578063bc99cc3714610829578063c4bc5da514610832578063cafb220214610851578063d21d79501461085a578063d4c80edf1461087c578063d667dcd714610885578063df06f9061461088e578063e0e3ba5a14610899578063f4993bbd146108d6578063f8b2cb4f146108fc578063fb099c841461090e575b61092c61092e6102b6565b61092c33600160a060020a03166000908152600b60205260408120541415610d5e57610002565b6109306004356014546000908190819081908510156102975760148054869081101561000257505050507fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec83015490819052601360205260409091208054600182015460029290920154600160a060020a0391909116925b509193909250565b6109595b601754601654600e5401035b90565b61092c5b600060006000601060149054906101000a900460ff1615610a1757610002565b6109596004355b600e54601654600160a060020a0383166000908152600b60209081526040808320548352600c90915290206001015402045b919050565b61092c600f54600160a060020a039081163390911614610d8457610002565b610959600d5481565b61095960045481565b61095960095481565b61092c60043533600160a060020a03166000908152600b60205260408120541415610ded57610002565b61092c600435600f54600160a060020a039081163390911614610e2b57610002565b61092c600f546000908190600160a060020a039081163390911614610e4d57610002565b61095960175481565b60408051602060248035600481810135601f810185900485028601850190965285855261092c9581359591946044949293909201918190840183828082843750506040805160209735808a0135601f81018a90048a0283018a01909352828252969897606497919650602491909101945090925082915084018382808284375094965050505050505060006000610f4460006000600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060405151915050600160a060020a038116821415611d7a57611d226000610c6a565b61096b60105460a060020a900460ff1681565b600c602052600435600090815260409020600181015481546002929092015461097f92600160a060020a0316919060ff1683565b6109595b60006001805b600d548111611296576000828152600c602052604090205461129f90600160a060020a0316610903565b61092c60043560105460009060a060020a900460ff1615156112d257610002565b61095960085481565b6109aa6000600060006000600060006000600060006000600061137f6102a3565b61092c600435600f54600160a060020a0390811633909116146113e057610002565b6011546012546109f191600160a060020a03169082565b610959600060006000600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604080518051600a5460e260020a630bbceb330283526201e848016024830152600482018390526003604483015260ea60020a621554930260648301529151600160a060020a03929092169250632ef3accc916084828101926020929190829003018187876161da5a03f1156100025750506040515160025460035491945061271091820381900390910291506114266102a3565b61095960165481565b610959600435600b6020526000908152604090205481565b6109595b600654600d5460009182911415610d5557611438610517565b61095960006000600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604080518051600a5460e260020a630bbceb330283526201e848016024830152600482018390526003604483015260ea60020a621554930260648301529151600160a060020a03929092169250632ef3accc916084828101926020929190829003018187876161da5a03f11561000257505060405151600554810193509150610d5a9050565b61092c600435600f54600160a060020a03908116339091161461146357610002565b61095960055481565b61092c60105460a060020a900460ff161561148557610002565b61095960025481565b61095960035481565b61095960065481565b61092c600f54600160a060020a03908116339091161461153f57610002565b610959600e5481565b61092c600435600f54600160a060020a03908116339091161461156c57610002565b61095960155481565b61095960075481565b6109596014546102af565b6109596004355b600e54601754600160a060020a0383166000908152600b60209081526040808320548352600c909152902060010154020461030f565b61092c600f5460009081908190600160a060020a03908116339091161461158f57610002565b6109596004355b6000611710826108a0565b61092c60105460009060ff60a060020a909104161561174b57610002565b005b565b60408051600160a060020a03949094168452602084019290925282820152519081900360600190f35b60408051918252519081900360200190f35b604080519115158252519081900360200190f35b60408051600160a060020a039490941684526020840192909252151582820152519081900360600190f35b60408051998a5260208a0198909852888801969096526060880194909452608087019290925260a086015260c085015260e084015261010083015251908190036101200190f35b6040518083600160a060020a031681526020018281526020019250505060405180910390f35b3460001415610a2557610002565b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604080518051600a5460e260020a630bbceb330283526201e848016024830152600482018390526003604483015260ea60020a621554930260648301529151600160a060020a03929092169250632ef3accc91608480830192602092919082900301816000876161da5a03f11561000257505060405151935050348390039150612710610aff6102a3565b6004600050540204600260005054600260005054600360005054612710030384020411158015610b3157506005548210155b15610c8b576040805180820182526003815260ea60020a62155493026020828101919091528251608081018452604381527f6a736f6e2868747470733a2f2f6170692e72616e646f6d2e6f72672f6a736f6e818301527f2d7270632f312f696e766f6b65292e726573756c742e72616e646f6d2e646174818501527f612e30000000000000000000000000000000000000000000000000000000000060608201528351610160810190945261012c808552610c9094919261212390830139600a546201e84801600060006000600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f11561000257505060405151915050600160a060020a0381168214156118835761182b60005b60006000611fa8731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed5b3b90565b610002565b604080516060810182523381526020818101868152600083850181815286825260139093529390932091518254600160a060020a031916178255915160018281019190915591516002919091015560148054918201808255929350918281838015829011610d3d576000839052610d3d907fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec9081019083015b80821115610d5a5760008155600101610d29565b5050506000928352506020909120018190555b505050565b600091505b5090565b34600014610d6b57610002565b61092e335b6000600060006000846000611b0282610903565b34600014610d9157610002565b6010805474ff0000000000000000000000000000000000000000191660a060020a179055565b33600160a060020a03166000908152600b60209081526040808320548352600c9091529020600201805460ff1916821790555b50565b601154600160a060020a031660001415610e0657610002565b60105460a060020a900460ff161515610e1e57610002565b34600014610db757610002565b34600014610e3857610002565b60108054600160a060020a0319168217905550565b34600014610e5a57610002565b5050600d5460015b818111610f12576001600052600c6020527fd421a5181c571bba3f01190c922c3b2a896fc1d84e86c9f17ac10e67ebef8b5c54610f1690600160a060020a0316610d70565b60008281526013602052604090206201869f600291909101558054600182015461128991600160a060020a0316905b8030600160a060020a0316311015611e00576040517f9bc0f7b8676ac8a3d913fc962a472bc40103acaa27e5477c1eadfbb7d4897a0490600090a15b5050565b600101610e62565b6015805460018c01540190556018805460ff1916905550505050505050505b5050505050565b600160a060020a031633600160a060020a0316141515610f6357610002565b600085815260136020526040812060028101548792901115610f8457610002565b6000878152601360205260408120889188919061105a835b6000611df98260006040805160208101909152600090819052828180805b835181101561103c57603060f860020a028482815181101561000257016020015160f860020a9081900402600160f860020a031916108015906110275750603960f860020a028482815181101561000257016020015160f860020a9081900402600160f860020a03191611155b1561208e5781156120ef5785600014156120e6575b600086111561104f57600a86900a909202915b509095945050505050565b9050600181108061106c575061271081115b801561107c575060028201546000145b156110b45760008481526013602052604090206201869f60029190910155815460018301546110cf91600160a060020a031690610ed6565b60008b81526013602052604090208b906127106110da6102a3565b505050505050610f3d565b6004600050540204600260005054600260005054600360005054612710030383600101600050540204111515610ea75760008d815260136020526040902099506111238c610f9c565b60008e815260136020908152604091829020600290810184905582516060810184528e54600160a060020a0316815260018f0154928101929092528d0154918101919091529099506111f3908a600081600260005054600182031015611f0a57604080516002546003548751602089810151600160a060020a03929092168552840186905261271091909103020481830181905291519193507f8f25eec129b997ba51175c8f2583cafbfc0c076ef19e2c455869730f969ec44d919081900360600190a18351611ef89083610ed6565b604080516060810182528b54600160a060020a0316815260018c0154602082015260028c015491810191909152610f1e908a6002546000908290600019820110611f0a57604080518551600160a060020a031681526020810183905281517fcb9c7189736051e86837ee4847c751bad47c86cb506933875ff8fabf9eeda008929181900390910190a18351611f10906001610ed6565b5050505050505050610f3d565b8192505b505090565b6000828152600c60205260409020546112c090600160a060020a0316610903565b10156112ca579050805b60010161051d565b600f54600160a060020a0390811633909116146112ee57610002565b346000146112fb57610002565b5060015b600d548111611329576000818152600c60205260409020600201805460ff191690556001016112ff565b6040805180820182528381524260209190910181905260118054600160a060020a03191685179055601255517ffc136941d6f5a7fa31fea543bdc05be2e77ce86110b5fe83706976590c0d399590600090a15050565b91506113896106dd565b90508160026000505460036000505460046000505460056000505460156000505460176000505460166000505403876014600050805490509a509a509a509a509a509a509a509a509a505050909192939495969798565b60105460a060020a900460ff1615156113f857610002565b3460001461140557610002565b61140e81610d70565b60118054600160a060020a0319169055600060125550565b6004540202048083019350905061129a565b6000818152600c602052604090205490915061145c90600160a060020a0316610903565b9150610d5a565b3460001461147057610002565b600f8054600160a060020a0319168217905550565b346000141561149357610002565b33600160a060020a03166000908152600b602052604081205414156114b757610002565b6115035b601854600090819081908190819060ff161515610f3d57600193505b600d548411611f50576000848152600c6020526040902054600160a060020a03169250611f70836102dd565b33600160a060020a03166000908152600b60209081526040808320548352600c9091529020600101805434908101909155600e80549091019055565b3460001461154c57610002565b6010805474ff000000000000000000000000000000000000000019169055565b806161a881101561157c57610002565b3460001461158957610002565b50600a55565b601154600160a060020a0316600014156115a857610002565b60105460a060020a900460ff1615156115c057610002565b6012544262093a8090910111156115d657610002565b346000146115e357610002565b505030600160a060020a03163160015b600d548111611644576000818152600c602052604090206002015460ff1615156001141561163c576040600090812060020180549183905260ff19919091169055600192909201915b6001016115f3565b600d5460095460649102048310610c8b57604051601154600160a060020a03908116916000913016319082818181858883f1935050505015156116c45760408051601154600160a060020a0316815290517f3b66c41562b841e29923849dc45ac54e17eb64f534c62109ba2cc1e977f8ddaf9181900360200190a161170b565b60408051601154600160a060020a031681526020810184905281517f969fa9d259520e00fd561cbd5c523032e2682528b2be25d2380088b332503814929181900390910190a15b610d50565b611719836102dd565b600160a060020a0384166000908152600b60209081526040808320548352600c9091529020600101540103905061030f565b346000141561175957610002565b33600160a060020a03166000908152600b60205260408120541461177c57610002565b6117846106dd565b341161178f57610002565b6117976114bb565b600d5460065414156117cf576117ab610517565b6000818152600c60205260409020549091506117cf90600160a060020a0316610d70565b600d805460019081019182905533600160a060020a0381166000908152600b60209081526040808320869055948252600c9052929092208054600160a060020a0319169092178255349101819055600e80549091019055610dea565b50600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604051519150505b60018054600160a060020a0319168217908190556040805160e260020a630bbceb330281526024810187905260048181019283528a5160448301528a51600160a060020a039490941693632ef3accc938c938a939192839260649290920191602087810192918291859183918691600091601f850104600f02600301f150905090810190601f16801561192a5780820380516001836020036101000a031916815260200191505b5093505050506020604051808303816000876161da5a03f115610002575050604051519250503a8402670de0b6b3a7640000018211156119735750600091505b50949350505050565b600160009054906101000a9004600160a060020a0316600160a060020a03166385dee34c8360008a8a8a8a6040518760e060020a028152600401808681526020018060200180602001806020018581526020018481038452888181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015611a1e5780820380516001836020036101000a031916815260200191505b508481038352878181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015611a775780820380516001836020036101000a031916815260200191505b508481038252868181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015611ad05780820380516001836020036101000a031916815260200191505b509850505050505050505060206040518083038185886185025a03f11561000257505060405151945061196a92505050565b10611d1a57611b0f6114bb565b600160a060020a0386166000908152600b60205260409020549450611b3386610903565b6000868152600c60209081526040808320600181018054600e80549190910390556008548254600160a060020a031916835590859055600291909101805460ff19169055600160a060020a038b168452600b909252822091909155600d54612710918302919091049182900395509093508514611cf057600c6000506000600d600050548152602001908152602001600020600050915084600b60005060008460000160009054906101000a9004600160a060020a0316600160a060020a031681526020019081526020016000206000508190555081600c60005060008781526020019081526020016000206000506000820160009054906101000a9004600160a060020a03168160000160006101000a815481600160a060020a0302191690830217905550600182016000505481600101600050556002820160009054906101000a900460ff168160020160006101000a81548160ff02191690830217905550905050600c6000506000600d60005054815260200190815260200160002060006000820160006101000a815490600160a060020a03021916905560018201600050600090556002820160006101000a81549060ff021916905550505b600d8054600019019055611d048685610ed6565b601054611d1a90600160a060020a031684610ed6565b505050505050565b50600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604051519150505b60018054600160a060020a031916821790819055604080517fc281d19e0000000000000000000000000000000000000000000000000000000081529051600160a060020a03929092169163c281d19e9160048181019260209290919082900301816000876161da5a03f1156100025750506040515192506102af915050565b905061030f565b604051600a54600160a060020a0384169183906000818181858888f193505050501515610f125760408051600160a060020a03841681526020810183905281517f3d14263aec0db87097e504ee7aca5316e879b2cc7f3b29f9c62d40e9bae04cee929181900390910190a1601054600160a060020a03838116911614610f1257604051601054600a54600160a060020a03919091169183906000818181858888f193505050501515610f125760105460408051600160a060020a039290921682526020820183905280517f3d14263aec0db87097e504ee7aca5316e879b2cc7f3b29f9c62d40e9bae04cee9281900390910190a15050565b60208401516017805491840390910190555b50505050565b600754602085015160168054612710600019939093018484038102849004919091019091556010549202049250611f0a90600160a060020a031683610ed6565b5050600060168190556017555050600e556018805460ff19166001179055565b9150611f7b836108a0565b6000858152600c6020526040902060010180548285030190819055909501949050600193909301926114d7565b1115611fdc575060008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed179055600161030f565b6000611ffb739efbea6358bed926b293d2ce63a730d6d98d43dd610c87565b1115612031575060008054739efbea6358bed926b293d2ce63a730d6d98d43dd600160a060020a0319909116179055600161030f565b60006120507320e12a1f859b3feae5fb2a0a32c18f5a65555bbf610c87565b11156120865750600080547320e12a1f859b3feae5fb2a0a32c18f5a65555bbf600160a060020a0319909116179055600161030f565b50600061030f565b8381815181101561000257016020015160f860020a9081900402600160f860020a0319167f2e0000000000000000000000000000000000000000000000000000000000000014156120de57600191505b600101610fba565b60001995909501945b600a83029250825060308482815181101561000257016020015160f860020a90819004810204909301602f190192506120de5642414d652b434f413747546d50726d314d74457965526650704f6a58577339394e5874506d6b59314c4c37424579413549722f6f4959485a35763863664a37677a6b424a5937734d427179554b635049634f525138435043347831314e6d6c797331326e387a4d6f704a42524f462b31394544684c45614a5234704d774676686c572f6d6b6846486231687842335a522f746f6a2f2f782b6c3666692b683065585778783271714b756c4964344b592b56637359494a622f7365482b377145576d7537384851364c5853646b524161306c4736746b4e467042306665756832567a745778643343432f6a314d4954316c306c61756370327a46443246664a6e677770697839396959634e71396d764868447859705239654753524d5a39426e4c67737649572f5142335a6b3d

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

000000000000000000000000000000000000000000000000000000000000232800000000000000000000000000000000000000000000000000000000000000be000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000002c68af0bb140000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000050

-----Decoded View---------------
Arg [0] : pwinInitial (uint256): 9000
Arg [1] : edgeInitial (uint256): 190
Arg [2] : maxWinInitial (uint256): 100
Arg [3] : minBetInitial (uint256): 200000000000000000
Arg [4] : maxInvestorsInitial (uint256): 10
Arg [5] : houseEdgeInitial (uint256): 50
Arg [6] : divestFeeInitial (uint256): 100
Arg [7] : emergencyWithdrawalRatioInitial (uint256): 80

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000002328
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000be
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [3] : 00000000000000000000000000000000000000000000000002c68af0bb140000
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000050


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
[ 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.