Contract 0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe

 

TxHash Block Age From To Value [TxFee]
0x69082482cec2ba4dfd1beb5d5e93bf7238671ee6e23c71f93720cd4e968812f6738892020 hrs 10 mins ago0xed6e7115571cd237a0fb85a745b32bcd549d0ae1 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.005 Ether0.001136946
0xff9c5bc007dad5ca19b3d0bc7701794654ddda7c3938546db267839a3d4a61b3716314544 days 7 hrs ago0x6c6483d256e44dac02d1a8b4781cb2c858f896e3 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0 Ether0.000378816
0xa694f75063c35ac065f62ba3c82a26ce91857fd1449d14996dc44b13921e477a716314344 days 7 hrs ago0x6c6483d256e44dac02d1a8b4781cb2c858f896e3 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.005 Ether0.0016675208
0x8be15280f278fb28cad1e423970171539a5ff4073a8467c63cc5c1ce8768e8bf715795645 days 8 hrs ago0x6c6483d256e44dac02d1a8b4781cb2c858f896e3 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.00525 Ether0.00109568
0xc3fc8b1bb07e755beef1fd62709cf90adfbdc0d5ca16989cc6a5a726533b5e8f715318246 days 8 hrs ago0xad430e91b04f1b740bd95bab89b3298117b2c851 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.00525 Ether0.000219136
0x1a8e584518cefafb524f87bc53d961697aba2d3eb29249c1af4316e93cd1a08a715036246 days 21 hrs ago0x6c6483d256e44dac02d1a8b4781cb2c858f896e3 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.00525 Ether0.000876544
0xa1b00b3975149218c7cb41aed39610dc743e6448132be9ec3aeb43dff7938214714547747 days 21 hrs ago0xad430e91b04f1b740bd95bab89b3298117b2c851 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.00525 Ether0.00027392
0x7b811ceb342af0ea72657989345e0632138c119fbc4d31e323e59b8296ebd10b714063648 days 21 hrs ago0x6c6483d256e44dac02d1a8b4781cb2c858f896e3 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.00525 Ether0.00109568
0xb3a7118f39763065b7ee8d9ea1e3d1bc0c04aafc2adc3878d33640f566fa3075713576349 days 21 hrs ago0x4b8e1329f97c158f75725c0be7787ac7486f0e05 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.00525 Ether0.000766976
0x9c2f1e2c148fd19869e9d9036752b37d45a9069fe8ee5e3a05cec254d34e001b713087150 days 20 hrs ago0x6c6483d256e44dac02d1a8b4781cb2c858f896e3 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.00525 Ether0.000766976
0x3ff0eb024cc0c3c6ff9f3f7bf896c77dab3c9482626efdcefa0901d48b4fb12b712597151 days 19 hrs ago0xad430e91b04f1b740bd95bab89b3298117b2c851 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.00525 Ether0.000986112
0x26a014c8102f08b45350769eba5f2d59bf4cf1a9f76ca57fa3a9b6cc2819a456712335452 days 8 hrs ago0x4b8e1329f97c158f75725c0be7787ac7486f0e05 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.00525 Ether0.00109568
0xed757761c71590d653b2b1b441d17ab2e8aaabc68d9f07e2be9259906d6aaee0711877253 days 5 hrs ago0xad430e91b04f1b740bd95bab89b3298117b2c851 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.005 Ether0.000120982
0x9be8af93d09b6ffdb9f06517121aa057a9202b3cf8d8045e061c9b10df3022e7711870753 days 6 hrs ago0xfd619f91c38a86be881d8ed4b8ef88de1e1afd50 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.005 Ether0.000328704
0x4d81ec9d1a66a0903b8adf026a6ad003f7bde53b44d619f659e5121dfc269ffd711382854 days 5 hrs ago0xad430e91b04f1b740bd95bab89b3298117b2c851 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.005 Ether0.000328704
0x9044f57b2ec61851f50621e0159c6e76b3e63d0de8d026312ba6f6c3e7688008710889055 days 4 hrs ago0x6c6483d256e44dac02d1a8b4781cb2c858f896e3 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.005 Ether0.000986112
0x8be1800c67fed8af88cee70e34732dcd06c1f4d8c8dd9a1f02627bd858d15aa5710601455 days 18 hrs ago0x4b8e1329f97c158f75725c0be7787ac7486f0e05 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.005 Ether0.000986112
0x3c160d323ce739ab424458c61b67e44740f24da6d4d8cf848b3d8091ac98d36f710487155 days 23 hrs ago0x6c6483d256e44dac02d1a8b4781cb2c858f896e3 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.005 Ether0.00054784
0xda72b671fe172a043d60fca60be857050657a0bea36e9cbcf93279c7eeca1a07710372856 days 5 hrs ago0xfd619f91c38a86be881d8ed4b8ef88de1e1afd50 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.005 Ether0.000328704
0xa82ae03451688a0fb1b0a9032140e0cfb2f16f4caeb07e1281fa179b062112ef710335756 days 6 hrs ago0x6c6483d256e44dac02d1a8b4781cb2c858f896e3 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.005 Ether0.000766976
0xa24b4b6ab566774e114f51d077d1d0423e79d4b3f9749d49e5f188143077f9e9710335556 days 6 hrs ago0x6c6483d256e44dac02d1a8b4781cb2c858f896e3 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0 Ether0.00055244
0x320999278be99ad302f40b5b4b4c8f27a3e27e1c23f02d241a13b8c5fb4a8878710333156 days 6 hrs ago0xfc3e8f2ed7e1a4233b4c1ddeeabf2bf79d1a8445 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.005 Ether0.000328704
0x522a039c6e1dec29f5f4795e2cb3c4a32789bbd2341f98986b99b1e9072023f7710318756 days 7 hrs ago0xc1671766e5aa2fd3aeec80cead92c6e1cd18c00d IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.005 Ether0.001181946
0x494a78533792f0214c0e4e2c4034561112d8386b18823a504e3038520dbd50c9709197858 days 8 hrs ago0xc2f82bfff0f8fb0c4921d8544b76fff53425b6a0 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0 Ether0.00011838
0x38555b9addabe6aae1cf78a693b5d40c5d874b79274c90fed4ae6974a759b8a66729443119 days 21 hrs ago0xba333f8ff556bf35d38e102a98daf1c5f6d9d708 IN  0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0.005 Ether0.001181946
[ Download CSV Export 

Latest 24 internal transactions Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0xff9c5bc007dad5ca19b3d0bc7701794654ddda7c3938546db267839a3d4a61b3716314544 days 7 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x6c6483d256e44dac02d1a8b4781cb2c858f896e30.082683856783919665 Ether
0xa24b4b6ab566774e114f51d077d1d0423e79d4b3f9749d49e5f188143077f9e9710335556 days 6 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x6c6483d256e44dac02d1a8b4781cb2c858f896e30.004271463567825848 Ether
0x494a78533792f0214c0e4e2c4034561112d8386b18823a504e3038520dbd50c9709197858 days 8 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0xc2f82bfff0f8fb0c4921d8544b76fff53425b6a00.00427135731783913 Ether
0xc734fbf10b5aef361819856c2100612b6ab1a2a127138543c051cacfec5c94b06305270189 days 8 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0xb04b473418b6f09e5a1f809ae2d01f14211e03ff0.5649748125 Ether
0xd4e70fa6fd61dfeb9035f2913c7a34f1bedd0e7fbc1b70671abf72d1d58fb8136266998195 days 18 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x9083b81de64ef9a854d828d07054618aca6080b10.00854271303390625 Ether
0x3e42aaa633e84d5f3cf9f7ee12ba84f6e6601f5484534a711098dc26121a48356239055200 days 11 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x6c6483d256e44dac02d1a8b4781cb2c858f896e30.00854260678125 Ether
0x6399113ef73b6827205bc9883a35900e5dcd25b60d73dfffadfeea29107c5a9d6138241217 days 12 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x87ba9b4ca9f1da8a17657c9522d1c43dd10c7f3c0.00427125 Ether
0x8ae42232b412f5cdea3841a762846ae94b486c80ac84a0a9b1341ea147172cdb6109128222 days 10 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x6c6483d256e44dac02d1a8b4781cb2c858f896e30.0425 Ether
0x63c0520712d5ee936b1c34dc5c9c6ba40c64fb63182b742476560e7cbf9968506054312231 days 16 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x6af1d08b131ca5987543dc05fbee67f9e46e5a250.06314424375 Ether
0x1fe122f0b588a26e91635ec2936cdb169db8c669411029942ce463b24a5643d76044003233 days 10 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x6af1d08b131ca5987543dc05fbee67f9e46e5a250.00334838125 Ether
0x6328052eec324bd64c738def19a100fec8e32df316ac81ab76aa0a86ca60d5066008378239 days 11 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x6af1d08b131ca5987543dc05fbee67f9e46e5a250.001490763225197165 Ether
0x1b2ead0f39f20891d272724c5149273650ffa60308e84311369316e723bb89816004482240 days 2 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x87ba9b4ca9f1da8a17657c9522d1c43dd10c7f3c0.12499770027634622 Ether
0x423a2e04b2e4fa52e12f431efc284b25bc7a7d1309ea79d7559755935b8db66b6004472240 days 2 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x5adf43dd006c6c36506e2b2dfa352e60002d22dc0.0184509520420642 Ether
0xad35dd1f26c1bde2b7a1c0c252b40ee051b3281d8f1759a2ee98e217d88d241c6004459240 days 3 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x6af1d08b131ca5987543dc05fbee67f9e46e5a250.013235050617495482 Ether
0x2a40a7232ec29a405f96d31e40d84f9712e1bb713d97d87855742bb335cff5265996631241 days 10 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0xbbc3feb3dab16dc5b206e3a0deeb9b21c05030580.178266644132012282 Ether
0xbd2b7f83fbbdb093faca42ef1e7dae4eda0b8b457b4e29df70892c7505f2b6515995346241 days 16 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x6af1d08b131ca5987543dc05fbee67f9e46e5a250.019976663058220078 Ether
0x0fb201acfdd27aa954d376d54080888530dea72f425bf523765aba8041712e145995301241 days 16 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x87ba9b4ca9f1da8a17657c9522d1c43dd10c7f3c0.008684666441320123 Ether
0xf63a8444f28b44a8bb8fd3ec974b627891e776acd3865c7387feb75f8586008d5990811242 days 10 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0xb2ae7fc6c617d65525008ed2161adb5264c6fb910.001738654127809437 Ether
0x4ad66db041a3bd29e19917654385e4604d1346e94c90bca4835270bb939809d85989241242 days 17 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x5adf43dd006c6c36506e2b2dfa352e60002d22dc0.019992395973199505 Ether
0x642c27df31f2bde03b5cf01a5ac5dd1ea1c6c3e8f0aa8d591cbba69b2953d7f15989228242 days 17 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x6af1d08b131ca5987543dc05fbee67f9e46e5a250.035986312751759108 Ether
0x3991398b05592ccb29c66cceba7f2385467c28965bae9c94f1253f9e2333c4575989099242 days 17 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x4eb443b7659cf6297bc1f1a891ebd26ebc848f030.001717386541278094 Ether
0xecb950f90eeb0b8b4c48a6424ff34fee24d6f39e09d14825890caad26e973c5e5988586242 days 20 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0xb2ae7fc6c617d65525008ed2161adb5264c6fb910.003865412780943604 Ether
0x8147b1550dd3416be590ec361121d2f726fc7875ef10a358293058fd9262c1b05987401243 days 49 mins ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0xca3edfe8acbac8ddd4c7147a33f81a2b0f4ed1c70.216541278094360446 Ether
0xfb2d1326a6718b17732773ddd6200e332768499f0755b481f2699b22df65e4b85983485243 days 17 hrs ago0x2b0ec0993a00b2ea625e3b37fcc74742f43a72fe0x6c6483d256e44dac02d1a8b4781cb2c858f896e30.116008 Ether
[ Download CSV Export 
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: TheButton
Compiler Version: v0.4.24+commit.e67f0147
Optimization Enabled: Yes
Runs (Optimizer):  200


Contract Source Code
pragma solidity^0.4.24;


contract DSAuthority {
    function canCall(
        address src, address dst, bytes4 sig
    ) public view returns (bool); 
}

contract DSAuthEvents {
    event LogSetAuthority (address indexed authority);
    event LogSetOwner     (address indexed owner);
}

contract DSAuth is DSAuthEvents {
    DSAuthority  public  authority;
    address      public  owner;

    function DSAuth() public {
        owner = msg.sender;
        emit LogSetOwner(msg.sender);
    }

    function setOwner(address owner_)
        public
        auth
    {
        owner = owner_;
        emit LogSetOwner(owner);
    }

    function setAuthority(DSAuthority authority_)
        public
        auth
    {
        authority = authority_;
        emit LogSetAuthority(authority);
    }

    modifier auth {
        require(isAuthorized(msg.sender, msg.sig));
        _;
    }

    function isAuthorized(address src, bytes4 sig) internal view returns (bool) {
        if (src == address(this)) {
            return true;
        } else if (src == owner) {
            return true;
        } else if (authority == DSAuthority(0)) {
            return false;
        } else {
            return authority.canCall(src, this, sig);
        }
    }
}

library DSMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x);
    }
    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x);
    }
    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x);
    }

    function min(uint x, uint y) internal pure returns (uint z) {
        return x <= y ? x : y;
    }
    function max(uint x, uint y) internal pure returns (uint z) {
        return x >= y ? x : y;
    }
    function imin(int x, int y) internal pure returns (int z) {
        return x <= y ? x : y;
    }
    function imax(int x, int y) internal pure returns (int z) {
        return x >= y ? x : y;
    }

    uint constant WAD = 10 ** 18;
    uint constant RAY = 10 ** 27;

    function wmul(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, y), WAD / 2) / WAD;
    }
    function rmul(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, y), RAY / 2) / RAY;
    }
    function wdiv(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, WAD), y / 2) / y;
    }
    function rdiv(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, RAY), y / 2) / y;
    }

    // This famous algorithm is called "exponentiation by squaring"
    // and calculates x^n with x as fixed-point and n as regular unsigned.
    //
    // It's O(log n), instead of O(n) for naive repeated multiplication.
    //
    // These facts are why it works:
    //
    //  If n is even, then x^n = (x^2)^(n/2).
    //  If n is odd,  then x^n = x * x^(n-1),
    //   and applying the equation for even x gives
    //    x^n = x * (x^2)^((n-1) / 2).
    //
    //  Also, EVM division is flooring and
    //    floor[(n-1) / 2] = floor[n / 2].
    //
    function rpow(uint x, uint n) internal pure returns (uint z) {
        z = n % 2 != 0 ? x : RAY;

        for (n /= 2; n != 0; n /= 2) {
            x = rmul(x, x);

            if (n % 2 != 0) {
                z = rmul(z, x);
            }
        }
    }
}

interface ERC20 {
    function balanceOf(address src) external view returns (uint);
    function totalSupply() external view returns (uint);
    function allowance(address tokenOwner, address spender) external constant returns (uint remaining);
    function transfer(address to, uint tokens) external returns (bool success);
    function approve(address spender, uint tokens) external returns (bool success);
    function transferFrom(address from, address to, uint tokens) external returns (bool success);
}

contract Accounting {

    using DSMath for uint;

    bool internal _in;
    
    modifier noReentrance() {
        require(!_in);
        _in = true;
        _;
        _in = false;
    }
    
    //keeping track of total ETH and token balances
    uint public totalETH;
    mapping (address => uint) public totalTokenBalances;

    struct Account {
        bytes32 name;
        uint balanceETH;
        mapping (address => uint) tokenBalances;
    }

    Account base = Account({
        name: "Base",
        balanceETH: 0       
    });

    event ETHDeposited(bytes32 indexed account, address indexed from, uint value);
    event ETHSent(bytes32 indexed account, address indexed to, uint value);
    event ETHTransferred(bytes32 indexed fromAccount, bytes32 indexed toAccount, uint value);
    event TokenTransferred(bytes32 indexed fromAccount, bytes32 indexed toAccount, address indexed token, uint value);
    event TokenDeposited(bytes32 indexed account, address indexed token, address indexed from, uint value);    
    event TokenSent(bytes32 indexed account, address indexed token, address indexed to, uint value);

    function baseETHBalance() public constant returns(uint) {
        return base.balanceETH;
    }

    function baseTokenBalance(address token) public constant returns(uint) {
        return base.tokenBalances[token];
    }

    function depositETH(Account storage a, address _from, uint _value) internal {
        a.balanceETH = a.balanceETH.add(_value);
        totalETH = totalETH.add(_value);
        emit ETHDeposited(a.name, _from, _value);
    }

    function depositToken(Account storage a, address _token, address _from, uint _value) 
    internal noReentrance 
    {        
        require(ERC20(_token).transferFrom(_from, address(this), _value));
        totalTokenBalances[_token] = totalTokenBalances[_token].add(_value);
        a.tokenBalances[_token] = a.tokenBalances[_token].add(_value);
        emit TokenDeposited(a.name, _token, _from, _value);
    }

    function sendETH(Account storage a, address _to, uint _value) 
    internal noReentrance 
    {
        require(a.balanceETH >= _value);
        require(_to != address(0));
        
        a.balanceETH = a.balanceETH.sub(_value);
        totalETH = totalETH.sub(_value);

        _to.transfer(_value);
        
        emit ETHSent(a.name, _to, _value);
    }

    function transact(Account storage a, address _to, uint _value, bytes data) 
    internal noReentrance 
    {
        require(a.balanceETH >= _value);
        require(_to != address(0));
        
        a.balanceETH = a.balanceETH.sub(_value);
        totalETH = totalETH.sub(_value);

        require(_to.call.value(_value)(data));
        
        emit ETHSent(a.name, _to, _value);
    }

    function sendToken(Account storage a, address _token, address _to, uint _value) 
    internal noReentrance 
    {
        require(a.tokenBalances[_token] >= _value);
        require(_to != address(0));
        
        a.tokenBalances[_token] = a.tokenBalances[_token].sub(_value);
        totalTokenBalances[_token] = totalTokenBalances[_token].sub(_value);

        require(ERC20(_token).transfer(_to, _value));
        emit TokenSent(a.name, _token, _to, _value);
    }

    function transferETH(Account storage _from, Account storage _to, uint _value) 
    internal 
    {
        require(_from.balanceETH >= _value);
        _from.balanceETH = _from.balanceETH.sub(_value);
        _to.balanceETH = _to.balanceETH.add(_value);
        emit ETHTransferred(_from.name, _to.name, _value);
    }

    function transferToken(Account storage _from, Account storage _to, address _token, uint _value)
    internal
    {
        require(_from.tokenBalances[_token] >= _value);
        _from.tokenBalances[_token] = _from.tokenBalances[_token].sub(_value);
        _to.tokenBalances[_token] = _to.tokenBalances[_token].add(_value);
        emit TokenTransferred(_from.name, _to.name, _token, _value);
    }

    function balanceETH(Account storage toAccount,  uint _value) internal {
        require(address(this).balance >= totalETH.add(_value));
        depositETH(toAccount, address(this), _value);
    }

    function balanceToken(Account storage toAccount, address _token, uint _value) internal noReentrance {
        uint balance = ERC20(_token).balanceOf(this);
        require(balance >= totalTokenBalances[_token].add(_value));

        toAccount.tokenBalances[_token] = toAccount.tokenBalances[_token].add(_value);
        emit TokenDeposited(toAccount.name, _token, address(this), _value);
    }
    
}


///Base contract with all the events, getters, and simple logic
contract ButtonBase is DSAuth, Accounting {
    ///Using a the original DSMath as a library
    using DSMath for uint;

    uint constant ONE_PERCENT_WAD = 10 ** 16;// 1 wad is 10^18, so 1% in wad is 10^16
    uint constant ONE_WAD = 10 ** 18;

    uint public totalRevenue;
    uint public totalCharity;
    uint public totalWon;

    uint public totalPresses;

    ///Button parameters - note that these can change
    uint public startingPrice = 2 finney;
    uint internal _priceMultiplier = 106 * 10 **16;
    uint32 internal _n = 4; //increase the price after every n presses
    uint32 internal _period = 30 minutes;// what's the period for pressing the button
    uint internal _newCampaignFraction = ONE_PERCENT_WAD; //1%
    uint internal _devFraction = 10 * ONE_PERCENT_WAD - _newCampaignFraction; //9%
    uint internal _charityFraction = 5 * ONE_PERCENT_WAD; //5%
    uint internal _jackpotFraction = 85 * ONE_PERCENT_WAD; //85%
    
    address public charityBeneficiary;

    ///Internal accounts to hold value:
    Account revenue = 
    Account({
        name: "Revenue",
        balanceETH: 0
    });

    Account nextCampaign = 
    Account({
        name: "Next Campaign",
        balanceETH: 0       
    });

    Account charity = 
    Account({
        name: "Charity",
        balanceETH: 0
    });

    ///Accounts of winners
    mapping (address => Account) winners;

    /// Function modifier to put limits on how values can be set
    modifier limited(uint value, uint min, uint max) {
        require(value >= min && value <= max);
        _;
    }

    /// A function modifier which limits how often a function can be executed
    mapping (bytes4 => uint) internal _lastExecuted;
    modifier timeLimited(uint _howOften) {
        require(_lastExecuted[msg.sig].add(_howOften) <= now);
        _lastExecuted[msg.sig] = now;
        _;
    }

    ///Button events
    event Pressed(address by, uint paid, uint64 timeLeft);
    event Started(uint startingETH, uint32 period, uint i);
    event Winrar(address guy, uint jackpot);
    ///Settings changed events
    event CharityChanged(address newCharityBeneficiary);
    event ButtonParamsChanged(uint startingPrice, uint32 n, uint32 period, uint priceMul);
    event AccountingParamsChanged(uint devFraction, uint charityFraction, uint jackpotFraction);

    ///Struct that represents a button champaign
    struct ButtonCampaign {
        uint price; ///Every campaign starts with some price  
        uint priceMultiplier;/// Price will be increased by this much every n presses
        uint devFraction; /// this much will go to the devs (10^16 = 1%)
        uint charityFraction;/// This much will go to charity
        uint jackpotFraction;/// This much will go to the winner (last presser)
        uint newCampaignFraction;/// This much will go to the next campaign starting balance

        address lastPresser;
        uint64 deadline;
        uint40 presses;
        uint32 n;
        uint32 period;
        bool finalized;

        Account total;/// base account to hold all the value until the campaign is finalized 
    }

    uint public lastCampaignID;
    ButtonCampaign[] campaigns;

    /// implemented in the child contract
    function press() public payable;
    
    function () public payable {
        press();
    }

    ///Getters:

    ///Check if there's an active campaign
    function active() public view returns(bool) {
        if(campaigns.length == 0) { 
            return false;
        } else {
            return campaigns[lastCampaignID].deadline >= now;
        }
    }

    ///Get information about the latest campaign or the next campaign if the last campaign has ended, but no new one has started
    function latestData() external view returns(
        uint price, uint jackpot, uint char, uint64 deadline, uint presses, address lastPresser
        ) {
        price = this.price();
        jackpot = this.jackpot();
        char = this.charityBalance();
        deadline = this.deadline();
        presses = this.presses();
        lastPresser = this.lastPresser();
    }

    ///Get the latest parameters
    function latestParams() external view returns(
        uint jackF, uint revF, uint charF, uint priceMul, uint nParam
    ) {
        jackF = this.jackpotFraction();
        revF = this.revenueFraction();
        charF = this.charityFraction();
        priceMul = this.priceMultiplier();
        nParam = this.n();
    }

    ///Get the last winner address
    function lastWinner() external view returns(address) {
        if(campaigns.length == 0) {
            return address(0x0);
        } else {
            if(active()) {
                return this.winner(lastCampaignID - 1);
            } else {
                return this.winner(lastCampaignID);
            }
        }
    }

    ///Get the total stats (cumulative for all campaigns)
    function totalsData() external view returns(uint _totalWon, uint _totalCharity, uint _totalPresses) {
        _totalWon = this.totalWon();
        _totalCharity = this.totalCharity();
        _totalPresses = this.totalPresses();
    }
   
   /// The latest price for pressing the button
    function price() external view returns(uint) {
        if(active()) {
            return campaigns[lastCampaignID].price;
        } else {
            return startingPrice;
        }
    }

    /// The latest jackpot fraction - note the fractions can be changed, but they don't affect any currently running campaign
    function jackpotFraction() public view returns(uint) {
        if(active()) {
            return campaigns[lastCampaignID].jackpotFraction;
        } else {
            return _jackpotFraction;
        }
    }

    /// The latest revenue fraction
    function revenueFraction() public view returns(uint) {
        if(active()) {
            return campaigns[lastCampaignID].devFraction;
        } else {
            return _devFraction;
        }
    }

    /// The latest charity fraction
    function charityFraction() public view returns(uint) {
        if(active()) {
            return campaigns[lastCampaignID].charityFraction;
        } else {
            return _charityFraction;
        }
    }

    /// The latest price multiplier
    function priceMultiplier() public view returns(uint) {
        if(active()) {
            return campaigns[lastCampaignID].priceMultiplier;
        } else {
            return _priceMultiplier;
        }
    }

    /// The latest preiod
    function period() public view returns(uint) {
        if(active()) {
            return campaigns[lastCampaignID].period;
        } else {
            return _period;
        }
    }

    /// The latest N - the price will increase every Nth presses
    function n() public view returns(uint) {
        if(active()) {
            return campaigns[lastCampaignID].n;
        } else {
            return _n;
        }
    }

    /// How much time is left in seconds if there's a running campaign
    function timeLeft() external view returns(uint) {
        if (active()) {
            return campaigns[lastCampaignID].deadline - now;
        } else {
            return 0;
        }
    }

    /// What is the latest campaign's deadline
    function deadline() external view returns(uint64) {
        return campaigns[lastCampaignID].deadline;
    }

    /// The number of presses for the current campaign
    function presses() external view returns(uint) {
        if(active()) {
            return campaigns[lastCampaignID].presses;
        } else {
            return 0;
        }
    }

    /// Last presser
    function lastPresser() external view returns(address) {
        return campaigns[lastCampaignID].lastPresser;
    }

    /// Returns the winner for any given campaign ID
    function winner(uint campaignID) external view returns(address) {
        return campaigns[campaignID].lastPresser;
    }

    /// The current (or next) campaign's jackpot
    function jackpot() external view returns(uint) {
        if(active()){
            return campaigns[lastCampaignID].total.balanceETH.wmul(campaigns[lastCampaignID].jackpotFraction);
        } else {
            if(!campaigns[lastCampaignID].finalized) {
                return campaigns[lastCampaignID].total.balanceETH.wmul(campaigns[lastCampaignID].jackpotFraction)
                    .wmul(campaigns[lastCampaignID].newCampaignFraction);
            } else {
                return nextCampaign.balanceETH.wmul(_jackpotFraction);
            }
        }
    }

    /// Current/next campaign charity balance
    function charityBalance() external view returns(uint) {
        if(active()){
            return campaigns[lastCampaignID].total.balanceETH.wmul(campaigns[lastCampaignID].charityFraction);
        } else {
            if(!campaigns[lastCampaignID].finalized) {
                return campaigns[lastCampaignID].total.balanceETH.wmul(campaigns[lastCampaignID].charityFraction)
                    .wmul(campaigns[lastCampaignID].newCampaignFraction);
            } else {
                return nextCampaign.balanceETH.wmul(_charityFraction);
            }
        }
    }

    /// Revenue account current balance
    function revenueBalance() external view returns(uint) {
        return revenue.balanceETH;
    }

    /// The starting balance of the next campaign
    function nextCampaignBalance() external view returns(uint) {        
        if(!campaigns[lastCampaignID].finalized) {
            return campaigns[lastCampaignID].total.balanceETH.wmul(campaigns[lastCampaignID].newCampaignFraction);
        } else {
            return nextCampaign.balanceETH;
        }
    }

    /// Total cumulative presses for all campaigns
    function totalPresses() external view returns(uint) {
        if (!campaigns[lastCampaignID].finalized) {
            return totalPresses.add(campaigns[lastCampaignID].presses);
        } else {
            return totalPresses;
        }
    }

    /// Total cumulative charity for all campaigns
    function totalCharity() external view returns(uint) {
        if (!campaigns[lastCampaignID].finalized) {
            return totalCharity.add(campaigns[lastCampaignID].total.balanceETH.wmul(campaigns[lastCampaignID].charityFraction));
        } else {
            return totalCharity;
        }
    }

    /// Total cumulative revenue for all campaigns
    function totalRevenue() external view returns(uint) {
        if (!campaigns[lastCampaignID].finalized) {
            return totalRevenue.add(campaigns[lastCampaignID].total.balanceETH.wmul(campaigns[lastCampaignID].devFraction));
        } else {
            return totalRevenue;
        }
    }

    /// Returns the balance of any winner
    function hasWon(address _guy) external view returns(uint) {
        return winners[_guy].balanceETH;
    }

    /// Functions for handling value

    /// Withdrawal function for winners
    function withdrawJackpot() public {
        require(winners[msg.sender].balanceETH > 0, "Nothing to withdraw!");
        sendETH(winners[msg.sender], msg.sender, winners[msg.sender].balanceETH);
    }

    /// Any winner can chose to donate their jackpot
    function donateJackpot() public {
        require(winners[msg.sender].balanceETH > 0, "Nothing to donate!");
        transferETH(winners[msg.sender], charity, winners[msg.sender].balanceETH);
    }

    /// Dev revenue withdrawal function
    function withdrawRevenue() public auth {
        sendETH(revenue, owner, revenue.balanceETH);
    }

    /// Dev charity transfer function - sends all of the charity balance to the pre-set charity address
    /// Note that there's nothing stopping the devs to wait and set the charity beneficiary to their own address
    /// and drain the charity balance for themselves. We would not do that as it would not make sense and it would
    /// damage our reputation, but this is the only "weak" spot of the contract where it requires trust in the devs
    function sendCharityETH(bytes callData) public auth {
        // donation receiver might be a contract, so transact instead of a simple send
        transact(charity, charityBeneficiary, charity.balanceETH, callData);
    }

    /// This allows the owner to withdraw surplus ETH
    function redeemSurplusETH() public auth {
        uint surplus = address(this).balance.sub(totalETH);
        balanceETH(base, surplus);
        sendETH(base, msg.sender, base.balanceETH);
    }

    /// This allows the owner to withdraw surplus Tokens
    function redeemSurplusERC20(address token) public auth {
        uint realTokenBalance = ERC20(token).balanceOf(this);
        uint surplus = realTokenBalance.sub(totalTokenBalances[token]);
        balanceToken(base, token, surplus);
        sendToken(base, token, msg.sender, base.tokenBalances[token]);
    }

    /// withdraw surplus ETH
    function withdrawBaseETH() public auth {
        sendETH(base, msg.sender, base.balanceETH);
    }

    /// withdraw surplus tokens
    function withdrawBaseERC20(address token) public auth {
        sendToken(base, token, msg.sender, base.tokenBalances[token]);
    }

    ///Setters

    /// Set button parameters
    function setButtonParams(uint startingPrice_, uint priceMul_, uint32 period_, uint32 n_) public 
    auth
    limited(startingPrice_, 1 szabo, 10 ether) ///Parameters are limited
    limited(priceMul_, ONE_WAD, 10 * ONE_WAD) // 100% to 10000% (1x to 10x)
    limited(period_, 30 seconds, 1 weeks)
    {
        startingPrice = startingPrice_;
        _priceMultiplier = priceMul_;
        _period = period_;
        _n = n_;
        emit ButtonParamsChanged(startingPrice_, n_, period_, priceMul_);
    }

    /// Fractions must add up to 100%, and can only be set every 2 weeks
    function setAccountingParams(uint _devF, uint _charityF, uint _newCampF) public 
    auth
    limited(_devF.add(_charityF).add(_newCampF), 0, ONE_WAD) // up to 100% - charity fraction could be set to 100% for special occasions
    timeLimited(2 weeks) { // can only be changed once every 4 weeks
        require(_charityF <= ONE_WAD); // charity fraction can be up to 100%
        require(_devF <= 20 * ONE_PERCENT_WAD); //can't set the dev fraction to more than 20%
        require(_newCampF <= 10 * ONE_PERCENT_WAD);//less than 10%
        _devFraction = _devF;
        _charityFraction = _charityF;
        _newCampaignFraction = _newCampF;
        _jackpotFraction = ONE_WAD.sub(_devF).sub(_charityF).sub(_newCampF);
        emit AccountingParamsChanged(_devF, _charityF, _jackpotFraction);
    }

    ///Charity beneficiary can only be changed every 13 weeks
    function setCharityBeneficiary(address _charity) public 
    auth
    timeLimited(13 weeks) 
    {   
        require(_charity != address(0));
        charityBeneficiary = _charity;
        emit CharityChanged(_charity);
    }

}

/// Main contract with key logic
contract TheButton is ButtonBase {
    
    using DSMath for uint;

    ///If the contract is stopped no new campaigns can be started, but any running campaing is not affected
    bool public stopped;

    constructor() public {
        stopped = true;
    }

    /// Press logic
    function press() public payable {
        //the last campaign
        ButtonCampaign storage c = campaigns[lastCampaignID];
        if (active()) {// if active
            _press(c);//register press
            depositETH(c.total, msg.sender, msg.value);// handle ETH
        } else { //if inactive (after deadline)
            require(!stopped, "Contract stopped!");//make sure we're not stopped
            if(!c.finalized) {//if not finalized
                _finalizeCampaign(c);// finalize last campaign
            } 
            _newCampaign();// start new campaign
            c = campaigns[lastCampaignID];
                    
            _press(c);//resigter press
            depositETH(c.total, msg.sender, msg.value);//handle ETH
        } 
    }

    function start() external payable auth {
        require(stopped, "Already started!");
        stopped = false;
        
        if(campaigns.length != 0) {//if there was a past campaign
            ButtonCampaign storage c = campaigns[lastCampaignID];
            require(c.finalized, "Last campaign not finalized!");//make sure it was finalized
        }             
        _newCampaign();//start new campaign
        c = campaigns[lastCampaignID];
        _press(c);
        depositETH(c.total, msg.sender, msg.value);// deposit ETH        
    }

    ///Stopping will only affect new campaigns, not already running ones
    function stop() external auth {
        require(!stopped, "Already stopped!");
        stopped = true;
    }
    
    /// Anyone can finalize campaigns in case the devs stop the contract
    function finalizeLastCampaign() external {
        require(stopped);
        ButtonCampaign storage c = campaigns[lastCampaignID];
        _finalizeCampaign(c);
    }

    function finalizeCampaign(uint id) external {
        require(stopped);
        ButtonCampaign storage c = campaigns[id];
        _finalizeCampaign(c);
    }

    //Press logic
    function _press(ButtonCampaign storage c) internal {
        require(c.deadline >= now, "After deadline!");//must be before the deadline
        require(msg.value >= c.price, "Not enough value!");// must have at least the price value
        c.presses += 1;//no need for safe math, as it is not a critical calculation
        c.lastPresser = msg.sender;
             
        if(c.presses % c.n == 0) {// increase the price every n presses
            c.price = c.price.wmul(c.priceMultiplier);
        }           

        emit Pressed(msg.sender, msg.value, c.deadline - uint64(now));
        c.deadline = uint64(now.add(c.period)); // set the new deadline
    }

    /// starting a new campaign
    function _newCampaign() internal {
        require(!active(), "A campaign is already running!");
        require(_devFraction.add(_charityFraction).add(_jackpotFraction).add(_newCampaignFraction) == ONE_WAD, "Accounting is incorrect!");
        
        uint _campaignID = campaigns.length++;
        ButtonCampaign storage c = campaigns[_campaignID];
        lastCampaignID = _campaignID;

        c.price = startingPrice;
        c.priceMultiplier = _priceMultiplier;
        c.devFraction = _devFraction;
        c.charityFraction = _charityFraction;
        c.jackpotFraction = _jackpotFraction;
        c.newCampaignFraction = _newCampaignFraction;
        c.deadline = uint64(now.add(_period));
        c.n = _n;
        c.period = _period;
        c.total.name = keccak256(abi.encodePacked("Total", lastCampaignID));//setting the name of the campaign's accaount     
        transferETH(nextCampaign, c.total, nextCampaign.balanceETH);
        emit Started(c.total.balanceETH, _period, lastCampaignID); 
    }

    /// Finalize campaign logic
    function _finalizeCampaign(ButtonCampaign storage c) internal {
        require(c.deadline < now, "Before deadline!");
        require(!c.finalized, "Already finalized!");
        
        if(c.presses != 0) {//If there were presses
            uint totalBalance = c.total.balanceETH;
            //Handle all of the accounting            
            transferETH(c.total, winners[c.lastPresser], totalBalance.wmul(c.jackpotFraction));
            winners[c.lastPresser].name = bytes32(c.lastPresser);
            totalWon = totalWon.add(totalBalance.wmul(c.jackpotFraction));

            transferETH(c.total, revenue, totalBalance.wmul(c.devFraction));
            totalRevenue = totalRevenue.add(totalBalance.wmul(c.devFraction));

            transferETH(c.total, charity, totalBalance.wmul(c.charityFraction));
            totalCharity = totalCharity.add(totalBalance.wmul(c.charityFraction));

            //avoiding rounding errors - just transfer the leftover
            // transferETH(c.total, nextCampaign, c.total.balanceETH);

            totalPresses = totalPresses.add(c.presses);

            emit Winrar(c.lastPresser, totalBalance.wmul(c.jackpotFraction));
        } 
        // if there will be no next campaign
        if(stopped) {
            //transfer leftover to devs' base account
            transferETH(c.total, base, c.total.balanceETH);
        } else {
            //otherwise transfer to next campaign
            transferETH(c.total, nextCampaign, c.total.balanceETH);
        }
        c.finalized = true;
    }
}

Contract ABI
[{"constant":true,"inputs":[],"name":"active","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"stop","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"nextCampaignBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"timeLeft","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"revenueFraction","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"owner_","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"latestData","outputs":[{"name":"price","type":"uint256"},{"name":"jackpot","type":"uint256"},{"name":"char","type":"uint256"},{"name":"deadline","type":"uint64"},{"name":"presses","type":"uint256"},{"name":"lastPresser","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"latestParams","outputs":[{"name":"jackF","type":"uint256"},{"name":"revF","type":"uint256"},{"name":"charF","type":"uint256"},{"name":"priceMul","type":"uint256"},{"name":"nParam","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"campaignID","type":"uint256"}],"name":"winner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalPresses","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"deadline","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"n","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalETH","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"donateJackpot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawRevenue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"press","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_charity","type":"address"}],"name":"setCharityBeneficiary","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"presses","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"jackpot","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"}],"name":"finalizeCampaign","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stopped","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"jackpotFraction","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"charityBeneficiary","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"authority_","type":"address"}],"name":"setAuthority","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"redeemSurplusERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"charityBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"redeemSurplusETH","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"totalTokenBalances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_guy","type":"address"}],"name":"hasWon","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"revenueBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"startingPrice_","type":"uint256"},{"name":"priceMul_","type":"uint256"},{"name":"period_","type":"uint32"},{"name":"n_","type":"uint32"}],"name":"setButtonParams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"withdrawBaseERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalWon","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"}],"name":"baseTokenBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"start","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"totalRevenue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawJackpot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"baseETHBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"priceMultiplier","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalCharity","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startingPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawBaseETH","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_devF","type":"uint256"},{"name":"_charityF","type":"uint256"},{"name":"_newCampF","type":"uint256"}],"name":"setAccountingParams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lastCampaignID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastPresser","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalizeLastCampaign","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"period","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"charityFraction","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"callData","type":"bytes"}],"name":"sendCharityETH","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalsData","outputs":[{"name":"_totalWon","type":"uint256"},{"name":"_totalCharity","type":"uint256"},{"name":"_totalPresses","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastWinner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"by","type":"address"},{"indexed":false,"name":"paid","type":"uint256"},{"indexed":false,"name":"timeLeft","type":"uint64"}],"name":"Pressed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"startingETH","type":"uint256"},{"indexed":false,"name":"period","type":"uint32"},{"indexed":false,"name":"i","type":"uint256"}],"name":"Started","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"guy","type":"address"},{"indexed":false,"name":"jackpot","type":"uint256"}],"name":"Winrar","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newCharityBeneficiary","type":"address"}],"name":"CharityChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"startingPrice","type":"uint256"},{"indexed":false,"name":"n","type":"uint32"},{"indexed":false,"name":"period","type":"uint32"},{"indexed":false,"name":"priceMul","type":"uint256"}],"name":"ButtonParamsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"devFraction","type":"uint256"},{"indexed":false,"name":"charityFraction","type":"uint256"},{"indexed":false,"name":"jackpotFraction","type":"uint256"}],"name":"AccountingParamsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"bytes32"},{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"ETHDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"bytes32"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"ETHSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fromAccount","type":"bytes32"},{"indexed":true,"name":"toAccount","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"}],"name":"ETHTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fromAccount","type":"bytes32"},{"indexed":true,"name":"toAccount","type":"bytes32"},{"indexed":true,"name":"token","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"TokenTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"bytes32"},{"indexed":true,"name":"token","type":"address"},{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"TokenDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"bytes32"},{"indexed":true,"name":"token","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"TokenSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"authority","type":"address"}],"name":"LogSetAuthority","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"}],"name":"LogSetOwner","type":"event"}]

Contract Creation Code
7f42617365000000000000000000000000000000000000000000000000000000006080819052600060a08190526004918255600581905566071afd498d0000600b55670eb5e06245ea0000600c55600d805463ffffffff191690921767ffffffff0000000019166507080000000017909155662386f26fc10000600e5567013fbe85edc90000600f5566b1a2bc2ec50000601055670bcbce7f1b1500006011557f526576656e75650000000000000000000000000000000000000000000000000060c081905260e082905260135560148190557f4e6578742043616d706169676e0000000000000000000000000000000000000061010081905261012082905260165560178190556101806040527f4368617269747900000000000000000000000000000000000000000000000000610140819052610160829052601955601a5534801561014c57600080fd5b5060018054600160a060020a031916339081179091556040517fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9490600090a26020805460ff19166001179055613532806101a76000396000f30060806040526004361061026e5763ffffffff60e060020a60003504166302fb0c5e811461027857806307da68f5146102a15780630b781385146102b65780631300a6d1146102dd578063136dbbab146102f257806313af403514610307578063142bc2ae1461032857806314beb3a3146103825780631cbeae5e146103c25780632741876a146103f657806329dcb0cf1461040b5780632e52d6061461043d57806336bdee74146104525780634ec4878b146104675780634f573cb21461047c5780635b3725321461026e57806361c3b7f114610491578063682e60a9146104b25780636b31ee01146104c75780636b5ca27d146104dc57806375f12b21146104f4578063772506bb1461050957806377c713961461051e5780637a9e5e4b146105335780638da5cb5b1461055457806391b7d3e01461056957806399b8a3f01461058a578063a0129b001461059f578063a035b1fe146105b4578063a2d2dbe2146105c9578063a52b2b88146105ea578063a6cfbb7f1461060b578063a78adfec14610620578063ae1803371461064a578063b3ff277d1461066b578063b80e63df14610680578063be9a6555146106a1578063bf2d9e0b146106a9578063bf7e214f146106be578063c0b3870a146106d3578063cb146814146106e8578063d50cb88b146106fd578063d608b3b214610712578063d6fbf20214610727578063de47e0bf1461073c578063debe1c6914610751578063e99a7dca1461076f578063ec18ca9c14610784578063ed2c92b114610799578063ef78d4fd146107ae578063f4aac034146107c3578063f63ef744146107d8578063f8b45b0614610831578063fe18818414610864575b610276610879565b005b34801561028457600080fd5b5061028d61098b565b604080519115158252519081900360200190f35b3480156102ad57600080fd5b506102766109de565b3480156102c257600080fd5b506102cb610a69565b60408051918252519081900360200190f35b3480156102e957600080fd5b506102cb610b08565b3480156102fe57600080fd5b506102cb610b5e565b34801561031357600080fd5b50610276600160a060020a0360043516610ba0565b34801561033457600080fd5b5061033d610c1e565b6040805196875260208701959095528585019390935267ffffffffffffffff90911660608501526080840152600160a060020a031660a0830152519081900360c00190f35b34801561038e57600080fd5b50610397610f29565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b3480156103ce57600080fd5b506103da6004356111b0565b60408051600160a060020a039092168252519081900360200190f35b34801561040257600080fd5b506102cb6111e4565b34801561041757600080fd5b50610420611263565b6040805167ffffffffffffffff9092168252519081900360200190f35b34801561044957600080fd5b506102cb6112a1565b34801561045e57600080fd5b506102cb6112fa565b34801561047357600080fd5b50610276611300565b34801561048857600080fd5b5061027661138b565b34801561049d57600080fd5b50610276600160a060020a03600435166113ca565b3480156104be57600080fd5b506102cb6114b4565b3480156104d357600080fd5b506102cb6114f6565b3480156104e857600080fd5b506102766004356115cd565b34801561050057600080fd5b5061028d61160c565b34801561051557600080fd5b506102cb611615565b34801561052a57600080fd5b506103da611657565b34801561053f57600080fd5b50610276600160a060020a0360043516611666565b34801561056057600080fd5b506103da6116e0565b34801561057557600080fd5b50610276600160a060020a03600435166116ef565b34801561059657600080fd5b506102cb611809565b3480156105ab57600080fd5b506102766118d4565b3480156105c057600080fd5b506102cb61192a565b3480156105d557600080fd5b506102cb600160a060020a036004351661196c565b3480156105f657600080fd5b506102cb600160a060020a036004351661197e565b34801561061757600080fd5b506102cb61199c565b34801561062c57600080fd5b5061027660043560243563ffffffff604435811690606435166119a2565b34801561065657600080fd5b50610276600160a060020a0360043516611b0a565b34801561067757600080fd5b506102cb611b54565b34801561068c57600080fd5b506102cb600160a060020a0360043516611b5a565b610276611b75565b3480156106b557600080fd5b506102cb611c8f565b3480156106ca57600080fd5b506103da611d19565b3480156106df57600080fd5b50610276611d28565b3480156106f457600080fd5b506102cb611dae565b34801561070957600080fd5b506102cb611db4565b34801561071e57600080fd5b506102cb611df6565b34801561073357600080fd5b506102cb611e5d565b34801561074857600080fd5b50610276611e63565b34801561075d57600080fd5b50610276600435602435604435611e95565b34801561077b57600080fd5b506102cb612014565b34801561079057600080fd5b506103da61201a565b3480156107a557600080fd5b5061027661204f565b3480156107ba57600080fd5b506102cb61208d565b3480156107cf57600080fd5b506102cb6120f2565b3480156107e457600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102769436949293602493928401919081908401838280828437509497506121349650505050505050565b34801561083d57600080fd5b50610846612174565b60408051938452602084019290925282820152519081900360600190f35b34801561087057600080fd5b506103da6122f0565b6000601f601e5481548110151561088c57fe5b90600052602060002090600b020190506108a461098b565b156108c5576108b2816123dd565b6108c08160080133346125d9565b610988565b60205460ff1615610920576040805160e560020a62461bcd02815260206004820152601160248201527f436f6e74726163742073746f7070656421000000000000000000000000000000604482015290519081900360640190fd5b60078101546d0100000000000000000000000000900460ff1615156109485761094881612650565b61095061293e565b601f601e5481548110151561096157fe5b90600052602060002090600b0201905061097a816123dd565b6109888160080133346125d9565b50565b601f54600090151561099f575060006109db565b42601f601e548154811015156109b157fe5b60009182526020909120600b909102016006015460a060020a900467ffffffffffffffff16101590505b90565b6109f433600035600160e060020a031916612c5b565b15156109ff57600080fd5b60205460ff1615610a5a576040805160e560020a62461bcd02815260206004820152601060248201527f416c72656164792073746f707065642100000000000000000000000000000000604482015290519081900360640190fd5b6020805460ff19166001179055565b6000601f601e54815481101515610a7c57fe5b90600052602060002090600b0201600701600d9054906101000a900460ff161515610aff57610af8601f601e54815481101515610ab557fe5b90600052602060002090600b020160050154601f601e54815481101515610ad857fe5b600091825260209091206009600b9092020101549063ffffffff612d6416565b90506109db565b506017546109db565b6000610b1261098b565b15610b565742601f601e54815481101515610b2957fe5b60009182526020909120600b909102016006015460a060020a900467ffffffffffffffff160390506109db565b5060006109db565b6000610b6861098b565b15610b9757601f601e54815481101515610b7e57fe5b90600052602060002090600b02016002015490506109db565b50600f546109db565b610bb633600035600160e060020a031916612c5b565b1515610bc157600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290556040519116907fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9490600090a250565b60008060008060008030600160a060020a031663a035b1fe6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610c6557600080fd5b505af1158015610c79573d6000803e3d6000fd5b505050506040513d6020811015610c8f57600080fd5b5051604080517f6b31ee0100000000000000000000000000000000000000000000000000000000815290519197503091636b31ee01916004808201926020929091908290030181600087803b158015610ce757600080fd5b505af1158015610cfb573d6000803e3d6000fd5b505050506040513d6020811015610d1157600080fd5b5051604080517f99b8a3f0000000000000000000000000000000000000000000000000000000008152905191965030916399b8a3f0916004808201926020929091908290030181600087803b158015610d6957600080fd5b505af1158015610d7d573d6000803e3d6000fd5b505050506040513d6020811015610d9357600080fd5b5051604080517f29dcb0cf000000000000000000000000000000000000000000000000000000008152905191955030916329dcb0cf916004808201926020929091908290030181600087803b158015610deb57600080fd5b505af1158015610dff573d6000803e3d6000fd5b505050506040513d6020811015610e1557600080fd5b5051604080517f682e60a90000000000000000000000000000000000000000000000000000000081529051919450309163682e60a9916004808201926020929091908290030181600087803b158015610e6d57600080fd5b505af1158015610e81573d6000803e3d6000fd5b505050506040513d6020811015610e9757600080fd5b5051604080517fec18ca9c0000000000000000000000000000000000000000000000000000000081529051919350309163ec18ca9c916004808201926020929091908290030181600087803b158015610eef57600080fd5b505af1158015610f03573d6000803e3d6000fd5b505050506040513d6020811015610f1957600080fd5b5051959694959394929391929050565b600080600080600030600160a060020a031663772506bb6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610f6f57600080fd5b505af1158015610f83573d6000803e3d6000fd5b505050506040513d6020811015610f9957600080fd5b5051604080517f136dbbab0000000000000000000000000000000000000000000000000000000081529051919650309163136dbbab916004808201926020929091908290030181600087803b158015610ff157600080fd5b505af1158015611005573d6000803e3d6000fd5b505050506040513d602081101561101b57600080fd5b5051604080517ff4aac0340000000000000000000000000000000000000000000000000000000081529051919550309163f4aac034916004808201926020929091908290030181600087803b15801561107357600080fd5b505af1158015611087573d6000803e3d6000fd5b505050506040513d602081101561109d57600080fd5b5051604080517fd50cb88b0000000000000000000000000000000000000000000000000000000081529051919450309163d50cb88b916004808201926020929091908290030181600087803b1580156110f557600080fd5b505af1158015611109573d6000803e3d6000fd5b505050506040513d602081101561111f57600080fd5b5051604080517f2e52d60600000000000000000000000000000000000000000000000000000000815290519193503091632e52d606916004808201926020929091908290030181600087803b15801561117757600080fd5b505af115801561118b573d6000803e3d6000fd5b505050506040513d60208110156111a157600080fd5b50519495939492939192919050565b6000601f828154811015156111c157fe5b60009182526020909120600b9091020160060154600160a060020a031692915050565b6000601f601e548154811015156111f757fe5b90600052602060002090600b0201600701600d9054906101000a900460ff16151561125a57610af8601f601e5481548110151561123057fe5b600091825260209091206007600b909202010154600a549064ffffffffff1663ffffffff612d9b16565b50600a546109db565b6000601f601e5481548110151561127657fe5b90600052602060002090600b020160060160149054906101000a900467ffffffffffffffff16905090565b60006112ab61098b565b156112eb57601f601e548154811015156112c157fe5b60009182526020909120600b909102016007015465010000000000900463ffffffff1690506109db565b50600d5463ffffffff166109db565b60025481565b336000908152601c602052604081206001015411611368576040805160e560020a62461bcd02815260206004820152601260248201527f4e6f7468696e6720746f20646f6e617465210000000000000000000000000000604482015290519081900360640190fd5b336000908152601c6020526040902060018101546113899190601990612dab565b565b6113a133600035600160e060020a031916612c5b565b15156113ac57600080fd5b60015460145461138991601391600160a060020a0390911690612e2e565b6113e033600035600160e060020a031916612c5b565b15156113eb57600080fd5b60008035600160e060020a0319168152601d60205260409020546277f8809042906114169083612d9b565b111561142157600080fd5b60008035600160e060020a0319168152601d60205260409020429055600160a060020a038216151561145257600080fd5b60128054600160a060020a03841673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517fe9bff25f57a144aa43858ad7e8e92a992af00ce7a2704f116861b96000f457ec9181900360200190a15050565b60006114be61098b565b15610b5657601f601e548154811015156114d457fe5b600091825260209091206007600b90920201015464ffffffffff1690506109db565b600061150061098b565b1561153c57610af8601f601e5481548110151561151957fe5b90600052602060002090600b020160040154601f601e54815481101515610ad857fe5b601f601e5481548110151561154d57fe5b90600052602060002090600b0201600701600d9054906101000a900460ff1615156115b857610af8601f601e5481548110151561158657fe5b90600052602060002090600b0201600501546115ac601f601e5481548110151561151957fe5b9063ffffffff612d6416565b601154601754610af89163ffffffff612d6416565b60205460009060ff1615156115e157600080fd5b601f8054839081106115ef57fe5b90600052602060002090600b0201905061160881612650565b5050565b60205460ff1681565b600061161f61098b565b1561164e57601f601e5481548110151561163557fe5b90600052602060002090600b02016004015490506109db565b506011546109db565b601254600160a060020a031681565b61167c33600035600160e060020a031916612c5b565b151561168757600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091178083556040519116917f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada491a250565b600154600160a060020a031681565b60008061170833600035600160e060020a031916612c5b565b151561171357600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038516916370a082319160248083019260209291908290030181600087803b15801561177457600080fd5b505af1158015611788573d6000803e3d6000fd5b505050506040513d602081101561179e57600080fd5b5051600160a060020a0384166000908152600360205260409020549092506117cd90839063ffffffff612f3d16565b90506117db60048483612f4d565b600160a060020a03831660009081526006602052604090205461180490600490859033906130db565b505050565b600061181361098b565b1561184f57610af8601f601e5481548110151561182c57fe5b90600052602060002090600b020160030154601f601e54815481101515610ad857fe5b601f601e5481548110151561186057fe5b90600052602060002090600b0201600701600d9054906101000a900460ff1615156118bf57610af8601f601e5481548110151561189957fe5b90600052602060002090600b0201600501546115ac601f601e5481548110151561182c57fe5b601054601754610af89163ffffffff612d6416565b60006118ec33600035600160e060020a031916612c5b565b15156118f757600080fd5b60025461190c9030319063ffffffff612f3d16565b90506119196004826132b7565b610988600433600460010154612e2e565b600061193461098b565b1561196357601f601e5481548110151561194a57fe5b90600052602060002090600b02016000015490506109db565b50600b546109db565b60036020526000908152604090205481565b600160a060020a03166000908152601c602052604090206001015490565b60145490565b6119b833600035600160e060020a031916612c5b565b15156119c357600080fd5b8364e8d4a51000678ac7230489e800008183101580156119e35750808311155b15156119ee57600080fd5b85670de0b6b3a7640000678ac7230489e80000818310801590611a115750808311155b1515611a1c57600080fd5b8763ffffffff16601e62093a80818310158015611a395750808311155b1515611a4457600080fd5b8c600b819055508b600c819055508a600d60046101000a81548163ffffffff021916908363ffffffff16021790555089600d60006101000a81548163ffffffff021916908363ffffffff1602179055507fba0488b18639349657ed3fa0cacf2d3fd8352aad74cf78575306bca3535688938d8b8d8f604051808581526020018463ffffffff1663ffffffff1681526020018363ffffffff1663ffffffff16815260200182815260200194505050505060405180910390a150505050505050505050505050565b611b2033600035600160e060020a031916612c5b565b1515611b2b57600080fd5b600160a060020a03811660009081526006602052604090205461098890600490839033906130db565b60095481565b600160a060020a031660009081526006602052604090205490565b6000611b8d33600035600160e060020a031916612c5b565b1515611b9857600080fd5b60205460ff161515611bf4576040805160e560020a62461bcd02815260206004820152601060248201527f416c726561647920737461727465642100000000000000000000000000000000604482015290519081900360640190fd5b6020805460ff19169055601f541561094857601f601e54815481101515611c1757fe5b90600052602060002090600b0201905080600701600d9054906101000a900460ff161515610948576040805160e560020a62461bcd02815260206004820152601c60248201527f4c6173742063616d706169676e206e6f742066696e616c697a65642100000000604482015290519081900360640190fd5b6000601f601e54815481101515611ca257fe5b90600052602060002090600b0201600701600d9054906101000a900460ff161515611d1057610af8611d01601f601e54815481101515611cde57fe5b90600052602060002090600b020160020154601f601e54815481101515610ad857fe5b6007549063ffffffff612d9b16565b506007546109db565b600054600160a060020a031681565b336000908152601c602052604081206001015411611d90576040805160e560020a62461bcd02815260206004820152601460248201527f4e6f7468696e6720746f20776974686472617721000000000000000000000000604482015290519081900360640190fd5b336000818152601c6020526040902060018101546113899290612e2e565b60055490565b6000611dbe61098b565b15611ded57601f601e54815481101515611dd457fe5b90600052602060002090600b02016001015490506109db565b50600c546109db565b6000601f601e54815481101515611e0957fe5b90600052602060002090600b0201600701600d9054906101000a900460ff161515611e5457610af8611e45601f601e5481548110151561182c57fe5b6008549063ffffffff612d9b16565b506008546109db565b600b5481565b611e7933600035600160e060020a031916612c5b565b1515611e8457600080fd5b611389600433600460010154612e2e565b611eab33600035600160e060020a031916612c5b565b1515611eb657600080fd5b611ed681611eca858563ffffffff612d9b16565b9063ffffffff612d9b16565b6000670de0b6b3a7640000818310158015611ef15750808311155b1515611efc57600080fd5b60008035600160e060020a0319168152601d602052604090205462127500904290611f279083612d9b565b1115611f3257600080fd5b60008035600160e060020a0319168152601d60205260409020429055670de0b6b3a7640000861115611f6357600080fd5b6702c68af0bb140000871115611f7857600080fd5b67016345785d8a0000851115611f8d57600080fd5b600f8790556010869055600e859055611fc685611fba8881670de0b6b3a76400008c63ffffffff612f3d16565b9063ffffffff612f3d16565b6011819055604080518981526020810189905280820192909252517f0b22d042ca4d52f7ed18250a188ec6ea8d8be78595e40514596b8d768e4564689181900360600190a150505050505050565b601e5481565b6000601f601e5481548110151561202d57fe5b600091825260209091206006600b909202010154600160a060020a0316905090565b60205460009060ff16151561206357600080fd5b601f601e5481548110151561207457fe5b90600052602060002090600b0201905061098881612650565b600061209761098b565b156120db57601f601e548154811015156120ad57fe5b60009182526020909120600b90910201600701546901000000000000000000900463ffffffff1690506109db565b50600d54640100000000900463ffffffff166109db565b60006120fc61098b565b1561212b57601f601e5481548110151561211257fe5b90600052602060002090600b02016003015490506109db565b506010546109db565b61214a33600035600160e060020a031916612c5b565b151561215557600080fd5b601254601a5461098891601991600160a060020a0390911690846132e2565b600080600030600160a060020a031663b3ff277d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156121b757600080fd5b505af11580156121cb573d6000803e3d6000fd5b505050506040513d60208110156121e157600080fd5b5051604080517fd608b3b20000000000000000000000000000000000000000000000000000000081529051919450309163d608b3b2916004808201926020929091908290030181600087803b15801561223957600080fd5b505af115801561224d573d6000803e3d6000fd5b505050506040513d602081101561226357600080fd5b5051604080517f2741876a00000000000000000000000000000000000000000000000000000000815290519193503091632741876a916004808201926020929091908290030181600087803b1580156122bb57600080fd5b505af11580156122cf573d6000803e3d6000fd5b505050506040513d60208110156122e557600080fd5b505192939192919050565b601f546000901515612304575060006109db565b61230c61098b565b156123925730600160a060020a0316631cbeae5e6001601e54036040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561235f57600080fd5b505af1158015612373573d6000803e3d6000fd5b505050506040513d602081101561238957600080fd5b505190506109db565b30600160a060020a0316631cbeae5e601e546040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561235f57600080fd5b60068101544260a060020a90910467ffffffffffffffff16101561244b576040805160e560020a62461bcd02815260206004820152600f60248201527f416674657220646561646c696e65210000000000000000000000000000000000604482015290519081900360640190fd5b80543410156124a4576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f7567682076616c756521000000000000000000000000000000604482015290519081900360640190fd5b60078101805464ffffffffff198116600164ffffffffff92831601821617918290556006830180543373ffffffffffffffffffffffffffffffffffffffff1990911617905565010000000000820463ffffffff16911681151561250357fe5b0664ffffffffff166000141561252c57600181015481546125299163ffffffff612d6416565b81555b6006810154604080513381523460208201524267ffffffffffffffff60a060020a90940484160390921682820152517fdffc821040ac850d3cdb1e8c2d587ab1312ed7267098abadf3fd9137172c51c89181900360600190a160078101546125ac90429063ffffffff6901000000000000000000909104811690612d9b16565b8160060160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60018301546125ee908263ffffffff612d9b16565b6001840155600254612606908263ffffffff612d9b16565b6002558254604080518381529051600160a060020a03851692917f8534743902a2fb19639aba9d7882a1a9b06d7a841874192da0738ce3973db0ae919081900360200190a3505050565b60068101546000904260a060020a90910467ffffffffffffffff16106126c0576040805160e560020a62461bcd02815260206004820152601060248201527f4265666f726520646561646c696e652100000000000000000000000000000000604482015290519081900360640190fd5b60078201546d0100000000000000000000000000900460ff161561272e576040805160e560020a62461bcd02815260206004820152601260248201527f416c72656164792066696e616c697a6564210000000000000000000000000000604482015290519081900360640190fd5b600782015464ffffffffff16156128d7575060098101546006820154600160a060020a03166000908152601c60205260409020600483015461278591600885019161278090859063ffffffff612d6416565b612dab565b6006820154600160a060020a03166000818152601c602052604090205560048201546127cb906127bc90839063ffffffff612d6416565b6009549063ffffffff612d9b16565b60095560028201546127f090600884019060139061278090859063ffffffff612d6416565b61280a611d01836002015483612d6490919063ffffffff16565b600755600382015461282f90600884019060199061278090859063ffffffff612d6416565b612849611e45836003015483612d6490919063ffffffff16565b6008556007820154600a5461286a9164ffffffffff1663ffffffff612d9b16565b600a55600682015460048301547f56b84851a1cd72311b185b7510e0e8d5aa69f8755dcc43463ebfe959bb1614f891600160a060020a0316906128b490849063ffffffff612d6416565b60408051600160a060020a03909316835260208301919091528051918290030190a15b60205460ff16156128fd576128f88260080160048460080160010154612dab565b612913565b6129138260080160168460080160010154612dab565b5060070180546dff0000000000000000000000000019166d0100000000000000000000000000179055565b60008061294961098b565b1561299e576040805160e560020a62461bcd02815260206004820152601e60248201527f412063616d706169676e20697320616c72656164792072756e6e696e67210000604482015290519081900360640190fd5b670de0b6b3a76400006129ca600e54611eca601154611eca601054600f54612d9b90919063ffffffff16565b14612a1f576040805160e560020a62461bcd02815260206004820152601860248201527f4163636f756e74696e6720697320696e636f7272656374210000000000000000604482015290519081900360640190fd5b601f805490612a319060018301613469565b9150601f82815481101515612a4257fe5b60009182526020909120601e849055600b8054920201908155600c546001820155600f54600282015560105460038201556011546004820155600e546005820155600d54909150612aa690429063ffffffff640100000000909104811690612d9b16565b6006820180547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff1660a060020a67ffffffffffffffff9390931692909202919091179055600d805460078301805468ffffffff0000000000191663ffffffff92831665010000000000021780825592546cffffffff00000000000000000019909316640100000000909304909116690100000000000000000002919091179055601e54604080517f546f74616c00000000000000000000000000000000000000000000000000000060208083019190915260258083019490945282518083039094018452604590910191829052825182918401908083835b60208310612bbd5780518252601f199092019160209182019101612b9e565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912060088501908155601754612c01945060169350909150612dab565b6009810154600d54601e546040805193845264010000000090920463ffffffff16602084015282820152517f6a2b8b9a3942a8abc58fb4ae0c546618d960d0bc856f995b545464becc5be272916060908290030190a15050565b6000600160a060020a038316301415612c7657506001612d5e565b600154600160a060020a0384811691161415612c9457506001612d5e565b600054600160a060020a03161515612cae57506000612d5e565b60008054604080517fb7009613000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152306024830152600160e060020a0319871660448301529151919092169263b700961392606480820193602093909283900390910190829087803b158015612d2f57600080fd5b505af1158015612d43573d6000803e3d6000fd5b505050506040513d6020811015612d5957600080fd5b505190505b92915050565b6000670de0b6b3a7640000612d8a612d7c8585613441565b6706f05b59d3b20000612d9b565b811515612d9357fe5b049392505050565b80820182811015612d5e57600080fd5b6001830154811115612dbc57600080fd5b6001830154612dd1908263ffffffff612f3d16565b600180850191909155820154612ded908263ffffffff612d9b16565b6001830155815483546040805184815290517f91394ae08f7d57415c1c2ac6886394ef2c7634274779088733b60f7504831cef9181900360200190a3505050565b60015460a060020a900460ff1615612e4557600080fd5b6001805460a060020a60ff02191660a060020a178155830154811115612e6a57600080fd5b600160a060020a0382161515612e7f57600080fd5b6001830154612e94908263ffffffff612f3d16565b6001840155600254612eac908263ffffffff612f3d16565b600255604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015612ee5573d6000803e3d6000fd5b508254604080518381529051600160a060020a03851692917fa3e8292cffffe79590527099bf9d852a1160f38b284cc5124afa894201c0f256919081900360200190a350506001805460a060020a60ff021916905550565b80820382811115612d5e57600080fd5b60015460009060a060020a900460ff1615612f6757600080fd5b6001805460a060020a60ff02191660a060020a179055604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038516916370a082319160248083019260209291908290030181600087803b158015612fde57600080fd5b505af1158015612ff2573d6000803e3d6000fd5b505050506040513d602081101561300857600080fd5b5051600160a060020a038416600090815260036020526040902054909150613036908363ffffffff612d9b16565b81101561304257600080fd5b600160a060020a038316600090815260028501602052604090205461306d908363ffffffff612d9b16565b600160a060020a038416600081815260028701602090815260409182902093909355865481518681529151309491927f528fa5ea862bde3887a0891407d0cc4cbe935d1dd428a0fda5624c0a256facc892908290030190a450506001805460a060020a60ff02191690555050565b60015460a060020a900460ff16156130f257600080fd5b6001805460a060020a60ff02191660a060020a179055600160a060020a038316600090815260028501602052604090205481111561312f57600080fd5b600160a060020a038216151561314457600080fd5b600160a060020a038316600090815260028501602052604090205461316f908263ffffffff612f3d16565b600160a060020a03841660009081526002860160209081526040808320939093556003905220546131a6908263ffffffff612f3d16565b600160a060020a0380851660008181526003602090815260408083209590955584517fa9059cbb0000000000000000000000000000000000000000000000000000000081529387166004850152602484018690529351919363a9059cbb936044808201949293918390030190829087803b15801561322357600080fd5b505af1158015613237573d6000803e3d6000fd5b505050506040513d602081101561324d57600080fd5b5051151561325a57600080fd5b8354604080518381529051600160a060020a03808616939087169290917f920718295e8e03a7fda1fe1d8d41ba008f378b1d679ea1a5f70eca3a389a25789181900360200190a450506001805460a060020a60ff02191690555050565b6002546132ca908263ffffffff612d9b16565b303110156132d757600080fd5b6116088230836125d9565b60015460a060020a900460ff16156132f957600080fd5b6001805460a060020a60ff02191660a060020a17815584015482111561331e57600080fd5b600160a060020a038316151561333357600080fd5b6001840154613348908363ffffffff612f3d16565b6001850155600254613360908363ffffffff612f3d16565b60028190555082600160a060020a0316828260405180828051906020019080838360005b8381101561339c578181015183820152602001613384565b50505050905090810190601f1680156133c95780820380516001836020036101000a031916815260200191505b5091505060006040518083038185875af19250505015156133e957600080fd5b8354604080518481529051600160a060020a03861692917fa3e8292cffffe79590527099bf9d852a1160f38b284cc5124afa894201c0f256919081900360200190a350506001805460a060020a60ff02191690555050565b600081158061345e57505080820282828281151561345b57fe5b04145b1515612d5e57600080fd5b81548183558181111561180457600083815260209020611804916109db91600b9182028101918502015b808211156135025760008082556001820181905560028201819055600382018190556004820181905560058201819055600682018054600160e060020a03191690556007820180546dffffffffffffffffffffffffffff19169055600882018190556009820155600b01613493565b50905600a165627a7a72305820afe0ed8a03cbfe0653593a76f81941e2b57b87e9322b15135418a61449d686a80029


   Swarm Source:
bzzr://afe0ed8a03cbfe0653593a76f81941e2b57b87e9322b15135418a61449d686a8
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.