ETH Price: $3,268.66 (+2.60%)
 

Overview

ETH Balance

0.208132282856705144 ETH

Eth Value

$680.31 (@ $3,268.66/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deposit80111202019-06-23 0:25:492049 days ago1561249549IN
0x42a30952...4709b35BC
0.001 ETH0.000268126
Refund65316782018-10-17 11:47:252297 days ago1539776845IN
0x42a30952...4709b35BC
0 ETH0.000178437
Deposit65181302018-10-15 6:27:292300 days ago1539584849IN
0x42a30952...4709b35BC
3.68 ETH0.0006703215
Refund64774812018-10-08 16:11:552306 days ago1539015115IN
0x42a30952...4709b35BC
0 ETH0.0006558713
Refund64774802018-10-08 16:11:402306 days ago1539015100IN
0x42a30952...4709b35BC
0 ETH0.0004608713
Refund64774782018-10-08 16:10:542306 days ago1539015054IN
0x42a30952...4709b35BC
0 ETH0.0006558713
Refund64774772018-10-08 16:10:252306 days ago1539015025IN
0x42a30952...4709b35BC
0 ETH0.0005549711
Refund64774742018-10-08 16:09:402306 days ago1539014980IN
0x42a30952...4709b35BC
0 ETH0.0004608713
Refund64774732018-10-08 16:09:312306 days ago1539014971IN
0x42a30952...4709b35BC
0 ETH0.0003288713
Refund64774702018-10-08 16:07:592306 days ago1539014879IN
0x42a30952...4709b35BC
0 ETH0.0005549711
Refund64774692018-10-08 16:07:572306 days ago1539014877IN
0x42a30952...4709b35BC
0 ETH0.0005549711
Refund64774672018-10-08 16:07:162306 days ago1539014836IN
0x42a30952...4709b35BC
0 ETH0.000229419
Refund64774662018-10-08 16:07:132306 days ago1539014833IN
0x42a30952...4709b35BC
0 ETH0.0003892611
Refund64774642018-10-08 16:06:512306 days ago1539014811IN
0x42a30952...4709b35BC
0 ETH0.0004270711
Refund64774632018-10-08 16:06:302306 days ago1539014790IN
0x42a30952...4709b35BC
0 ETH0.0002900911
Refund64774612018-10-08 16:05:362306 days ago1539014736IN
0x42a30952...4709b35BC
0 ETH0.000319069
Refund64774582018-10-08 16:04:482306 days ago1539014688IN
0x42a30952...4709b35BC
0 ETH0.000229419
Refund64774552018-10-08 16:04:122306 days ago1539014652IN
0x42a30952...4709b35BC
0 ETH0.000229419
Refund64774552018-10-08 16:04:122306 days ago1539014652IN
0x42a30952...4709b35BC
0 ETH0.000455949
Refund64774532018-10-08 16:03:392306 days ago1539014619IN
0x42a30952...4709b35BC
0 ETH0.000319069
Refund64774512018-10-08 16:02:482306 days ago1539014568IN
0x42a30952...4709b35BC
0 ETH0.000319069
Refund64774512018-10-08 16:02:482306 days ago1539014568IN
0x42a30952...4709b35BC
0 ETH0.000454069
Refund64774492018-10-08 16:02:202306 days ago1539014540IN
0x42a30952...4709b35BC
0 ETH0.0002542610
Refund64774492018-10-08 16:02:202306 days ago1539014540IN
0x42a30952...4709b35BC
0 ETH0.000254910
Refund64774472018-10-08 16:02:032306 days ago1539014523IN
0x42a30952...4709b35BC
0 ETH0.000506610
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
65316782018-10-17 11:47:252297 days ago1539776845
0x42a30952...4709b35BC
3.68 ETH
64774672018-10-08 16:07:162306 days ago1539014836
0x42a30952...4709b35BC
1.05008 ETH
64774582018-10-08 16:04:482306 days ago1539014688
0x42a30952...4709b35BC
0.0012 ETH
64774552018-10-08 16:04:122306 days ago1539014652
0x42a30952...4709b35BC
0.00770535 ETH
64774492018-10-08 16:02:202306 days ago1539014540
0x42a30952...4709b35BC
0.008 ETH
64774492018-10-08 16:02:202306 days ago1539014540
0x42a30952...4709b35BC
0.01030701 ETH
64774462018-10-08 16:02:012306 days ago1539014521
0x42a30952...4709b35BC
0.00221314 ETH
64774462018-10-08 16:02:012306 days ago1539014521
0x42a30952...4709b35BC
9.31660988 ETH
64774402018-10-08 16:01:092306 days ago1539014469
0x42a30952...4709b35BC
0.09468 ETH
64774372018-10-08 16:00:302306 days ago1539014430
0x42a30952...4709b35BC
0.6706 ETH
64774352018-10-08 16:00:212306 days ago1539014421
0x42a30952...4709b35BC
0.0024771 ETH
64774352018-10-08 16:00:212306 days ago1539014421
0x42a30952...4709b35BC
0.00784 ETH
64774312018-10-08 15:59:272306 days ago1539014367
0x42a30952...4709b35BC
0.011166 ETH
64774292018-10-08 15:59:122306 days ago1539014352
0x42a30952...4709b35BC
0.063 ETH
64774272018-10-08 15:58:262306 days ago1539014306
0x42a30952...4709b35BC
0.00069405 ETH
64774192018-10-08 15:57:202306 days ago1539014240
0x42a30952...4709b35BC
3.695695 ETH
64774172018-10-08 15:56:522306 days ago1539014212
0x42a30952...4709b35BC
0.001 ETH
64774152018-10-08 15:56:012306 days ago1539014161
0x42a30952...4709b35BC
2 ETH
64774152018-10-08 15:56:012306 days ago1539014161
0x42a30952...4709b35BC
1 ETH
64774112018-10-08 15:54:382306 days ago1539014078
0x42a30952...4709b35BC
0.000825 ETH
64774042018-10-08 15:52:532306 days ago1539013973
0x42a30952...4709b35BC
7.52 ETH
64774002018-10-08 15:51:432306 days ago1539013903
0x42a30952...4709b35BC
20 ETH
64773982018-10-08 15:51:282306 days ago1539013888
0x42a30952...4709b35BC
0.2938 ETH
64679792018-10-07 3:24:242308 days ago1538882664
0x42a30952...4709b35BC
3.99895 ETH
64548992018-10-05 0:26:132310 days ago1538699173
0x42a30952...4709b35BC
0.0748 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
R1Exchange

Compiler Version
v0.4.20+commit.3155dd80

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-09-04
*/

///auto-generated single file for verifying contract on etherscan
pragma solidity ^0.4.20;

contract SafeMath {

    function safeAdd(uint256 _x, uint256 _y) internal pure returns (uint256) {
        uint256 z = _x + _y;
        assert(z >= _x);
        return z;
    }

    function safeSub(uint256 _x, uint256 _y) internal pure returns (uint256) {
        assert(_x >= _y);
        return _x - _y;
    }

    function safeMul(uint256 _x, uint256 _y) internal pure returns (uint256) {
        uint256 z = _x * _y;
        assert(_x == 0 || z / _x == _y);
        return z;
    }
}

contract Ownable {
    address public owner;


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


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

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

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

contract Token {
    uint256 public totalSupply;

    function balanceOf(address _owner) public constant returns (uint256 balance);

    function transfer(address _to, uint256 _value) public returns (bool success);

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);

    function approve(address _spender, uint256 _value) public returns (bool success);

    function allowance(address _owner, address _spender) public constant returns (uint256 remaining);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}
contract R1Exchange is SafeMath, Ownable {
    mapping(address => bool) public admins;
    mapping(address => bool) public feeAccounts;
    mapping(address => mapping(address => uint256)) public tokenList;
    mapping(address => mapping(bytes32 => uint256)) public orderFilled;//tokens filled
    mapping(bytes32 => bool) public withdrawn;
    mapping(address => mapping(address => uint256)) public withdrawAllowance;
    mapping(address => mapping(address => uint256)) public applyList;//withdraw apply list
    mapping(address => mapping(address => uint)) public latestApply;//save the latest apply timestamp
    mapping(address => uint256) public canceled;
    uint public applyWait = 1 days;
    uint public feeRate = 10;
    bool public withdrawEnabled = false;
    bool public stop = false;
    event Deposit(address indexed token, address indexed user, uint256 amount, uint256 balance);
    event Withdraw(address indexed token, address indexed user, uint256 amount, uint256 balance);
    event ApplyWithdraw(address indexed token, address indexed user, uint256 amount, uint256 time);
    event Trade(address indexed maker, address indexed taker, uint256 amount, uint256 makerFee, uint256 takerFee, uint256 makerNonce, uint256 takerNonce);
    modifier onlyAdmin {
        require(admins[msg.sender]);
        _;
    }
    modifier isWithdrawEnabled {
        require(withdrawEnabled);
        _;
    }
    modifier isFeeAccount(address fa) {
        require(feeAccounts[fa]);
        _;
    }
    modifier notStop() {
        require(!stop);
        _;
    }
    function() public {
        revert();
    }
    function setAdmin(address admin, bool isAdmin) public onlyOwner {
        require(admin != 0);
        admins[admin] = isAdmin;
    }
    function setFeeAccount(address acc, bool asFee) public onlyOwner {
        require(acc != 0);
        feeAccounts[acc] = asFee;
    }
    function enableWithdraw(bool enabled) public onlyOwner {
        withdrawEnabled = enabled;
    }
    function changeLockTime(uint lock) public onlyOwner {
        require(lock <= 7 days);
        applyWait = lock;
    }
    function changeFeeRate(uint fr) public onlyOwner {
        //max fee rate MUST <=10%
        require(fr >= 10);
        feeRate = fr;
    }
    function stopTrade() public onlyOwner {
        stop = true;
    }
    /**
    * cancel the order that before nonce.
    **/
    function batchCancel(address[] users, uint256[] nonces) public onlyAdmin {
        require(users.length == nonces.length);
        for (uint i = 0; i < users.length; i++) {
            require(nonces[i] >= canceled[users[i]]);
            canceled[users[i]] = nonces[i];
        }
    }
    function deposit() public payable {
        tokenList[0][msg.sender] = safeAdd(tokenList[0][msg.sender], msg.value);
        Deposit(0, msg.sender, msg.value, tokenList[0][msg.sender]);
    }
    function depositToken(address token, uint256 amount) public {
        require(token != 0);
        tokenList[token][msg.sender] = safeAdd(tokenList[token][msg.sender], amount);
        require(Token(token).transferFrom(msg.sender, this, amount));
        Deposit(token, msg.sender, amount, tokenList[token][msg.sender]);
    }
    function applyWithdraw(address token, uint256 amount) public {
        uint256 apply = safeAdd(applyList[token][msg.sender], amount);
        require(safeAdd(apply, withdrawAllowance[token][msg.sender]) <= tokenList[token][msg.sender]);
        applyList[token][msg.sender] = apply;
        latestApply[token][msg.sender] = block.timestamp;
        ApplyWithdraw(token, msg.sender, amount, block.timestamp);
    }
    /**
    * approve user's withdraw application
    **/
    function approveWithdraw(address token, address user) public onlyAdmin {
        withdrawAllowance[token][user] = safeAdd(withdrawAllowance[token][user], applyList[token][user]);
        applyList[token][user] = 0;
        latestApply[token][user] = 0;
    }
    /**
    * user's withdraw will success in two cases:
    *    1. when the admin calls the approveWithdraw function;
    * or 2. when the lock time has passed since the application;
    **/
    function withdraw(address token, uint256 amount) public {
        require(amount <= tokenList[token][msg.sender]);
        if (amount > withdrawAllowance[token][msg.sender]) {
            //withdraw wait over time
            require(latestApply[token][msg.sender] != 0 && safeSub(block.timestamp, latestApply[token][msg.sender]) > applyWait);
            withdrawAllowance[token][msg.sender] = safeAdd(withdrawAllowance[token][msg.sender], applyList[token][msg.sender]);
            applyList[token][msg.sender] = 0;
        }
        require(amount <= withdrawAllowance[token][msg.sender]);
        withdrawAllowance[token][msg.sender] = safeSub(withdrawAllowance[token][msg.sender], amount);
        tokenList[token][msg.sender] = safeSub(tokenList[token][msg.sender], amount);
        latestApply[token][msg.sender] = 0;
        if (token == 0) {//withdraw ether
            require(msg.sender.send(amount));
        } else {//withdraw token
            require(Token(token).transfer(msg.sender, amount));
        }
        Withdraw(token, msg.sender, amount, tokenList[token][msg.sender]);
    }
    /**
    * withdraw directly when withdrawEnabled=true
    **/
    function withdrawNoLimit(address token, uint256 amount) public isWithdrawEnabled {
        require(amount <= tokenList[token][msg.sender]);
        tokenList[token][msg.sender] = safeSub(tokenList[token][msg.sender], amount);
        if (token == 0) {//withdraw ether
            require(msg.sender.send(amount));
        } else {//withdraw token
            require(Token(token).transfer(msg.sender, amount));
        }
        Withdraw(token, msg.sender, amount, tokenList[token][msg.sender]);
    }
    /**
    * admin withdraw according to user's signed withdraw info
    * PARAMS:
    * addresses:
    * [0] user
    * [1] token
    * [2] feeAccount
    * values:
    * [0] amount
    * [1] nonce
    * [2] fee
    **/
    function adminWithdraw(address[3] addresses, uint256[3] values, uint8 v, bytes32 r, bytes32 s)
    public
    onlyAdmin
    isFeeAccount(addresses[2])
    {
        address user = addresses[0];
        address token = addresses[1];
        address feeAccount = addresses[2];
        uint256 amount = values[0];
        uint256 nonce = values[1];
        uint256 fee = values[2];
        require(amount <= tokenList[token][user]);
        fee = checkFee(amount, fee);
        bytes32 hash = keccak256(this,user, token, amount, nonce);
        require(!withdrawn[hash]);
        withdrawn[hash] = true;
        require(ecrecover(keccak256("\x19Ethereum Signed Message:\n32", hash), v, r, s) == user);
        tokenList[token][user] = safeSub(tokenList[token][user], amount);
        tokenList[token][feeAccount] = safeAdd(tokenList[token][feeAccount], fee);
        amount = safeSub(amount, fee);
        if (token == 0) {//withdraw ether
            require(user.send(amount));
        } else {//withdraw token
            require(Token(token).transfer(user, amount));
        }
        Withdraw(token, user, amount, tokenList[token][user]);
    }
    function checkFee(uint256 amount, uint256 fee) private returns (uint256){
        uint256 maxFee = fee;
        if (safeMul(fee, feeRate) > amount) {
            maxFee = amount / feeRate;
        }
        return maxFee;
    }
    function getOrderHash(address tokenBuy, uint256 amountBuy, address tokenSell, uint256 amountSell, address base, uint256 expires, uint256 nonce, address feeToken) public view returns (bytes32) {
        return keccak256(this,tokenBuy, amountBuy, tokenSell, amountSell, base, expires, nonce, feeToken);
    }
    function balanceOf(address token, address user) public constant returns (uint256) {
        return tokenList[token][user];
    }
    struct Order {
        address tokenBuy;
        address tokenSell;
        uint256 amountBuy;
        uint256 amountSell;
        address user;
        uint256 fee;
        uint256 expires;
        uint256 nonce;
        bytes32 orderHash;
        address baseToken;
        address feeToken;//0:default;others:payed with erc-20 token
    }
    /**
    * swap maker and taker's tokens according to their signed order info.
    *
    * PARAMS:
    * addresses:
    * [0]:maker tokenBuy
    * [1]:taker tokenBuy
    * [2]:maker tokenSell
    * [3]:taker tokenSell
    * [4]:maker user
    * [5]:taker user
    * [6]:maker baseTokenAddr .default:0 ,then baseToken is ETH
    * [7]:taker baseTokenAddr .default:0 ,then baseToken is ETH
    * [8]:maker feeToken .
    * [9]:taker feeToken .
    * [10]:feeAccount
    * values:
    * [0]:maker amountBuy
    * [1]:taker amountBuy
    * [2]:maker amountSell
    * [3]:taker amountSell
    * [4]:maker fee
    * [5]:taker fee
    * [6]:maker expires
    * [7]:taker expires
    * [8]:maker nonce
    * [9]:taker nonce
    * [10]:tradeAmount of token
    * v,r,s:maker and taker's signature
    **/
    function trade(
        address[11] addresses,
        uint256[11] values,
        uint8[2] v,
        bytes32[2] r,
        bytes32[2] s
    ) public
    onlyAdmin
    isFeeAccount(addresses[10])
    notStop
    {
        Order memory makerOrder = Order({
            tokenBuy : addresses[0],
            tokenSell : addresses[2],
            user : addresses[4],
            amountBuy : values[0],
            amountSell : values[2],
            fee : values[4],
            expires : values[6],
            nonce : values[8],
            orderHash : 0,
            baseToken : addresses[6],
            feeToken : addresses[8]
            });
        Order memory takerOrder = Order({
            tokenBuy : addresses[1],
            tokenSell : addresses[3],
            user : addresses[5],
            amountBuy : values[1],
            amountSell : values[3],
            fee : values[5],
            expires : values[7],
            nonce : values[9],
            orderHash : 0,
            baseToken : addresses[7],
            feeToken : addresses[9]
            });
        uint256 tradeAmount = values[10];
        //check expires
        require(makerOrder.expires >= block.number && takerOrder.expires >= block.number);
        //check order nonce canceled
        require(makerOrder.nonce >= canceled[makerOrder.user] && takerOrder.nonce >= canceled[takerOrder.user]);
        //make sure both is the same trade pair
        require(makerOrder.baseToken == takerOrder.baseToken && makerOrder.tokenBuy == takerOrder.tokenSell && makerOrder.tokenSell == takerOrder.tokenBuy);
        require(takerOrder.baseToken == takerOrder.tokenBuy || takerOrder.baseToken == takerOrder.tokenSell);
        makerOrder.orderHash = getOrderHash(makerOrder.tokenBuy, makerOrder.amountBuy, makerOrder.tokenSell, makerOrder.amountSell, makerOrder.baseToken, makerOrder.expires, makerOrder.nonce, makerOrder.feeToken);
        takerOrder.orderHash = getOrderHash(takerOrder.tokenBuy, takerOrder.amountBuy, takerOrder.tokenSell, takerOrder.amountSell, takerOrder.baseToken, takerOrder.expires, takerOrder.nonce, takerOrder.feeToken);
        require(ecrecover(keccak256("\x19Ethereum Signed Message:\n32", makerOrder.orderHash), v[0], r[0], s[0]) == makerOrder.user);
        require(ecrecover(keccak256("\x19Ethereum Signed Message:\n32", takerOrder.orderHash), v[1], r[1], s[1]) == takerOrder.user);
        balance(makerOrder, takerOrder, addresses[10], tradeAmount);
        //emit event
        Trade(makerOrder.user, takerOrder.user, tradeAmount, makerOrder.fee, takerOrder.fee, makerOrder.nonce, takerOrder.nonce);
    }
    function balance(Order makerOrder, Order takerOrder, address feeAccount, uint256 tradeAmount) internal {
        ///check the price meets the condition.
        ///match condition: (makerOrder.amountSell*takerOrder.amountSell)/(makerOrder.amountBuy*takerOrder.amountBuy) >=1
        require(safeMul(makerOrder.amountSell, takerOrder.amountSell) >= safeMul(makerOrder.amountBuy, takerOrder.amountBuy));
        ///If the price is ok,always use maker's price first!
        uint256 takerBuy = 0;
        uint256 takerSell = 0;
        if (takerOrder.baseToken == takerOrder.tokenBuy) {
            //taker sell tokens
            uint256 makerAmount = safeSub(makerOrder.amountBuy, orderFilled[makerOrder.user][makerOrder.orderHash]);
            uint256 takerAmount = safeSub(takerOrder.amountSell, orderFilled[takerOrder.user][takerOrder.orderHash]);
            require(tradeAmount > 0 && tradeAmount <= makerAmount && tradeAmount <= takerAmount);
            takerSell = tradeAmount;
            takerBuy = safeMul(makerOrder.amountSell, takerSell) / makerOrder.amountBuy;
            orderFilled[takerOrder.user][takerOrder.orderHash] = safeAdd(orderFilled[takerOrder.user][takerOrder.orderHash], takerSell);
            orderFilled[makerOrder.user][makerOrder.orderHash] = safeAdd(orderFilled[makerOrder.user][makerOrder.orderHash], takerSell);
        } else {
            // taker buy tokens
            takerAmount = safeSub(takerOrder.amountBuy, orderFilled[takerOrder.user][takerOrder.orderHash]);
            makerAmount = safeSub(makerOrder.amountSell, orderFilled[makerOrder.user][makerOrder.orderHash]);
            require(tradeAmount > 0 && tradeAmount <= makerAmount && tradeAmount <= takerAmount);
            takerBuy = tradeAmount;
            takerSell = safeMul(makerOrder.amountBuy, takerBuy) / makerOrder.amountSell;
            orderFilled[takerOrder.user][takerOrder.orderHash] = safeAdd(orderFilled[takerOrder.user][takerOrder.orderHash], takerBuy);
            orderFilled[makerOrder.user][makerOrder.orderHash] = safeAdd(orderFilled[makerOrder.user][makerOrder.orderHash], takerBuy);
        }
        uint256 makerFee = chargeFee(makerOrder, feeAccount, takerSell);
        uint256 takerFee = chargeFee(takerOrder, feeAccount, takerBuy);
        //taker give tokens
        tokenList[takerOrder.tokenSell][takerOrder.user] = safeSub(tokenList[takerOrder.tokenSell][takerOrder.user], takerSell);
        //taker get tokens
        tokenList[takerOrder.tokenBuy][takerOrder.user] = safeAdd(tokenList[takerOrder.tokenBuy][takerOrder.user], safeSub(takerBuy, takerFee));
        //maker give tokens
        tokenList[makerOrder.tokenSell][makerOrder.user] = safeSub(tokenList[makerOrder.tokenSell][makerOrder.user], takerBuy);
        //maker get tokens
        tokenList[makerOrder.tokenBuy][makerOrder.user] = safeAdd(tokenList[makerOrder.tokenBuy][makerOrder.user], safeSub(takerSell, makerFee));
    }
    ///charge fees.fee can be payed as other erc20 token or the tokens that user get
    ///returns:fees to reduce from the user's tokenBuy
    function chargeFee(Order order, address feeAccount, uint256 amountBuy) internal returns (uint256){
        uint256 classicFee = 0;
        if (order.feeToken != 0) {
            ///use erc-20 token as fee .
            //make sure the user has enough tokens
            require(order.fee <= tokenList[order.feeToken][order.user]);
            tokenList[order.feeToken][feeAccount] = safeAdd(tokenList[order.feeToken][feeAccount], order.fee);
            tokenList[order.feeToken][order.user] = safeSub(tokenList[order.feeToken][order.user], order.fee);
        } else {
            order.fee = checkFee(amountBuy, order.fee);
            classicFee = order.fee;
            tokenList[order.tokenBuy][feeAccount] = safeAdd(tokenList[order.tokenBuy][feeAccount], order.fee);
        }
        return classicFee;
    }
    function batchTrade(
        address[11][] addresses,
        uint256[11][] values,
        uint8[2][] v,
        bytes32[2][] r,
        bytes32[2][] s
    ) public onlyAdmin {
        for (uint i = 0; i < addresses.length; i++) {
            trade(addresses[i], values[i], v[i], r[i], s[i]);
        }
    }
    ///help to refund token to users.this method is called when contract needs updating
    function refund(address user, address[] tokens) public onlyAdmin {
        for (uint i = 0; i < tokens.length; i++) {
            address token = tokens[i];
            uint256 amount = tokenList[token][user];
            if (amount > 0) {
                tokenList[token][user] = 0;
                if (token == 0) {//withdraw ether
                    require(user.send(amount));
                } else {//withdraw token
                    require(Token(token).transfer(user, amount));
                }
                Withdraw(token, user, amount, tokenList[token][user]);
            }
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"stop","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"withdrawEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"withdrawAllowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"name":"depositToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"withdrawn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"admins","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"admin","type":"address"},{"name":"isAdmin","type":"bool"}],"name":"setAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"bytes32"}],"name":"orderFilled","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"latestApply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdrawNoLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addresses","type":"address[3]"},{"name":"values","type":"uint256[3]"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"adminWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"stopTrade","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":"enabled","type":"bool"}],"name":"enableWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"lock","type":"uint256"}],"name":"changeLockTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"canceled","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"acc","type":"address"},{"name":"asFee","type":"bool"}],"name":"setFeeAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"name":"applyWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addresses","type":"address[11]"},{"name":"values","type":"uint256[11]"},{"name":"v","type":"uint8[2]"},{"name":"r","type":"bytes32[2]"},{"name":"s","type":"bytes32[2]"}],"name":"trade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenBuy","type":"address"},{"name":"amountBuy","type":"uint256"},{"name":"tokenSell","type":"address"},{"name":"amountSell","type":"uint256"},{"name":"base","type":"address"},{"name":"expires","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"feeToken","type":"address"}],"name":"getOrderHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"fr","type":"uint256"}],"name":"changeFeeRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"tokens","type":"address[]"}],"name":"refund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addresses","type":"address[11][]"},{"name":"values","type":"uint256[11][]"},{"name":"v","type":"uint8[2][]"},{"name":"r","type":"bytes32[2][]"},{"name":"s","type":"bytes32[2][]"}],"name":"batchTrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"users","type":"address[]"},{"name":"nonces","type":"uint256[]"}],"name":"batchCancel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"user","type":"address"}],"name":"approveWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"applyList","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"tokenList","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"feeAccounts","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"applyWait","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"},{"name":"user","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"token","type":"address"},{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"token","type":"address"},{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"token","type":"address"},{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"ApplyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"maker","type":"address"},{"indexed":true,"name":"taker","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"makerFee","type":"uint256"},{"indexed":false,"name":"takerFee","type":"uint256"},{"indexed":false,"name":"makerNonce","type":"uint256"},{"indexed":false,"name":"takerNonce","type":"uint256"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

606060405262015180600a908155600b55600c805461ffff1916905560008054600160a060020a033316600160a060020a0319909116179055612de9806100476000396000f3006060604052600436106101925763ffffffff60e060020a60003504166307da68f581146101a25780632287e96a146101c9578063233ac008146101dc578063338b5dea146102135780633823d66c14610237578063429b62e51461024d5780634b0bddd21461026c578063560b3cba146102905780637420a0ec146102b257806374cf6f49146102d75780637955a65f146102f95780638baeefce146103695780638da5cb5b1461037c57806392e33d14146103ab57806396cf5227146103c3578063978bbdb9146103d95780639e47b4b6146103ec578063a4de3c191461040b578063a537b7161461042f578063aa22678014610451578063add371001461053b578063affca9321461057c578063b40f035214610592578063b67590aa146105ef578063bcfe070f14610842578063be1ef5c1146108d1578063d0e30db0146108f6578063da141bd5146108fe578063dc3ef12614610923578063e2e71f9314610948578063f2eaee0214610967578063f2fde38b1461097a578063f3fef3a314610999578063f7888aec146109bb575b341561019d57600080fd5b600080fd5b34156101ad57600080fd5b6101b56109e0565b604051901515815260200160405180910390f35b34156101d457600080fd5b6101b56109ee565b34156101e757600080fd5b610201600160a060020a03600435811690602435166109f7565b60405190815260200160405180910390f35b341561021e57600080fd5b610235600160a060020a0360043516602435610a14565b005b341561024257600080fd5b6101b5600435610b78565b341561025857600080fd5b6101b5600160a060020a0360043516610b8d565b341561027757600080fd5b610235600160a060020a03600435166024351515610ba2565b341561029b57600080fd5b610201600160a060020a0360043516602435610bfd565b34156102bd57600080fd5b610201600160a060020a0360043581169060243516610c1a565b34156102e257600080fd5b610235600160a060020a0360043516602435610c37565b341561030457600080fd5b6102356004606481600360606040519081016040529190828260608082843782019150505050509190806060019060038060200260405190810160405291908282606080828437509395505050823560ff169260208101359250604001359050610e02565b341561037457600080fd5b6102356111f5565b341561038757600080fd5b61038f611221565b604051600160a060020a03909116815260200160405180910390f35b34156103b657600080fd5b6102356004351515611230565b34156103ce57600080fd5b61023560043561125e565b34156103e457600080fd5b61020161128e565b34156103f757600080fd5b610201600160a060020a0360043516611294565b341561041657600080fd5b610235600160a060020a036004351660243515156112a6565b341561043a57600080fd5b610235600160a060020a0360043516602435611301565b341561045c57600080fd5b610235600461016481600b610160604051908101604052919082826101608082843782019150505050509190806101600190600b80602002604051908101604052919082826101608082843782019150505050509190806040019060028060200260405190810160405280929190826002602002808284378201915050505050919080604001906002806020026040519081016040528092919082600260200280828437820191505050505091908060400190600280602002604051908101604052809291908260026020028082843750939550611411945050505050565b341561054657600080fd5b610201600160a060020a03600435811690602435906044358116906064359060843581169060a4359060c4359060e435166119e0565b341561058757600080fd5b610235600435611a65565b341561059d57600080fd5b61023560048035600160a060020a0316906044602480359081019083013580602080820201604051908101604052809392919081815260200183836020028082843750949650611a9395505050505050565b34156105fa57600080fd5b61023560046024813581810190830135806020818102016040519081016040528181529291906000602085015b8282101561066557610160808302860190600b9060405190810160405291908282610160808284375050509183525050600190910190602001610627565b505050505091908035906020019082018035906020019080806020026020016040519081016040528181529291906000602085015b828210156106d857610160808302860190600b906040519081016040529190828261016080828437505050918352505060019091019060200161069a565b505050505091908035906020019082018035906020019080806020026020016040519081016040528181529291906000602085015b8282101561074c57604080830286019060029080519081016040528092919082600260200280828437505050918352505060019091019060200161070d565b505050505091908035906020019082018035906020019080806020026020016040519081016040528181529291906000602085015b828210156107c0576040808302860190600290805190810160405280929190826002602002808284375050509183525050600190910190602001610781565b505050505091908035906020019082018035906020019080806020026020016040519081016040528181529291906000602085015b828210156108345760408083028601906002908051908101604052809291908260026020028082843750505091835250506001909101906020016107f5565b505050505091905050611c79565b341561084d57600080fd5b610235600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843750949650611d3395505050505050565b34156108dc57600080fd5b610235600160a060020a0360043581169060243516611e28565b610235611eef565b341561090957600080fd5b610201600160a060020a0360043581169060243516611fab565b341561092e57600080fd5b610201600160a060020a0360043581169060243516611fc8565b341561095357600080fd5b6101b5600160a060020a0360043516611fe5565b341561097257600080fd5b610201611ffa565b341561098557600080fd5b610235600160a060020a0360043516612000565b34156109a457600080fd5b610235600160a060020a036004351660243561209b565b34156109c657600080fd5b610201600160a060020a036004358116906024351661231f565b600c54610100900460ff1681565b600c5460ff1681565b600660209081526000928352604080842090915290825290205481565b600160a060020a0382161515610a2957600080fd5b600160a060020a0380831660009081526003602090815260408083203390941683529290522054610a5a908261234a565b600160a060020a0380841660008181526003602090815260408083203395861684529091528082209490945590926323b872dd92913091869190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610ae857600080fd5b6102c65a03f11515610af957600080fd5b505050604051805190501515610b0e57600080fd5b600160a060020a038281166000818152600360209081526040808320339095168084529490915290819020547fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7918591905191825260208201526040908101905180910390a35050565b60056020526000908152604090205460ff1681565b60016020526000908152604090205460ff1681565b60005433600160a060020a03908116911614610bbd57600080fd5b600160a060020a0382161515610bd257600080fd5b600160a060020a03919091166000908152600160205260409020805460ff1916911515919091179055565b600460209081526000928352604080842090915290825290205481565b600860209081526000928352604080842090915290825290205481565b600c5460ff161515610c4857600080fd5b600160a060020a0380831660009081526003602090815260408083203390941683529290522054811115610c7b57600080fd5b600160a060020a0380831660009081526003602090815260408083203390941683529290522054610cac9082612360565b600160a060020a03808416600081815260036020908152604080832033909516835293905291909120919091551515610d1557600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515610d1057600080fd5b610d98565b81600160a060020a031663a9059cbb338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610d7257600080fd5b6102c65a03f11515610d8357600080fd5b505050604051805190501515610d9857600080fd5b600160a060020a038281166000818152600360209081526040808320339095168084529490915290819020547ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567918591905191825260208201526040908101905180910390a35050565b600160a060020a03331660009081526001602052604081205481908190819081908190819060ff161515610e3557600080fd5b60408c0151600160a060020a03811660009081526002602052604090205460ff161515610e6157600080fd5b8c51975060208d0151965060408d015195508b51945060208c0151935060408c0151600160a060020a038089166000908152600360209081526040808320938d1683529290522054909350851115610eb857600080fd5b610ec28584612372565b925030888887876040516c01000000000000000000000000600160a060020a039687168102825294861685026014820152929094169092026028820152603c810191909152605c810191909152607c0160405190819003902060008181526005602052604090205490925060ff1615610f3a57600080fd5b60008281526005602052604090819020805460ff19166001908117909155600160a060020a038a16918490517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0160405180910390208d8d8d6040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f11515610ffe57600080fd5b505060206040510351600160a060020a03161461101a57600080fd5b600160a060020a038088166000908152600360209081526040808320938c168352929052205461104a9086612360565b600160a060020a0388811660009081526003602090815260408083208d851684529091528082209390935590881681522054611086908461234a565b600160a060020a038089166000908152600360209081526040808320938b16835292905220556110b68584612360565b9450600160a060020a03871615156110fe57600160a060020a03881685156108fc0286604051600060405180830381858888f1935050505015156110f957600080fd5b611181565b86600160a060020a031663a9059cbb898760006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561115b57600080fd5b6102c65a03f1151561116c57600080fd5b50505060405180519050151561118157600080fd5b600160a060020a038781166000818152600360209081526040808320948d168084529490915290819020547ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567918991905191825260208201526040908101905180910390a350505050505050505050505050565b60005433600160a060020a0390811691161461121057600080fd5b600c805461ff001916610100179055565b600054600160a060020a031681565b60005433600160a060020a0390811691161461124b57600080fd5b600c805460ff1916911515919091179055565b60005433600160a060020a0390811691161461127957600080fd5b62093a8081111561128957600080fd5b600a55565b600b5481565b60096020526000908152604090205481565b60005433600160a060020a039081169116146112c157600080fd5b600160a060020a03821615156112d657600080fd5b600160a060020a03919091166000908152600260205260409020805460ff1916911515919091179055565b600160a060020a03808316600090815260076020908152604080832033909416835292905290812054611334908361234a565b600160a060020a03808516600081815260036020908152604080832033909516808452948252808320549383526006825280832094835293905291909120549192509061138290839061234a565b111561138d57600080fd5b600160a060020a03808416600081815260076020908152604080832033909516808452948252808320869055838352600882528083208584529091529081902042908190557f9279426ccdba165d0a4e2dadd069b13c58656379fa8a37530455ae6539ca8f28918691905191825260208201526040908101905180910390a3505050565b611419612d61565b611421612d61565b600160a060020a03331660009081526001602052604081205460ff16151561144857600080fd5b610140880151600160a060020a03811660009081526002602052604090205460ff16151561147557600080fd5b600c54610100900460ff161561148a57600080fd5b610160604051908101604052808a51600160a060020a0316815260200160408b0151600160a060020a031681526020018951815260200160408a0151815260200160808b0151600160a060020a0316815260200160808a0151815260200160c08a015181526020016101008a015181526000602082015260400160c08b0151600160a060020a031681526020016101008b0151600160a060020a0316905293506101606040519081016040528060208b0151600160a060020a0316815260200160608b0151600160a060020a031681526020018960016020020151815260200160608a0151815260200160a08b0151600160a060020a0316815260200160a08a0151815260200160e08a015181526020016101208a015181526000602082015260400160e08b0151600160a060020a031681526020016101208b0151600160a060020a0316905292506101408801519150438460c00151101580156115f35750438360c0015110155b15156115fe57600080fd5b600960008560800151600160a060020a0316600160a060020a03168152602001908152602001600020548460e00151101580156116685750600960008460800151600160a060020a0316600160a060020a03168152602001908152602001600020548360e0015110155b151561167357600080fd5b826101200151600160a060020a0316846101200151600160a060020a03161480156116b457508260200151600160a060020a03168451600160a060020a0316145b80156116d657508251600160a060020a03168460200151600160a060020a0316145b15156116e157600080fd5b8251600160a060020a0316836101200151600160a060020a0316148061172157508260200151600160a060020a0316836101200151600160a060020a0316145b151561172c57600080fd5b61175b84518560400151866020015187606001518861012001518960c001518a60e001518b61014001516119e0565b61010085015261179083518460400151856020015186606001518761012001518860c001518960e001518a61014001516119e0565b6101008401526080840151600160a060020a031660018561010001516040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c016040519081900390208951895189516040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561184b57600080fd5b505060206040510351600160a060020a03161461186757600080fd5b8260800151600160a060020a031660018461010001516040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0160405190819003902060208a015160208a015160208a01516040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561192557600080fd5b505060206040510351600160a060020a03161461194157600080fd5b61195284846101408c0151856123a1565b8260800151600160a060020a03168460800151600160a060020a03167f01f5d7c359dba416997ea6c723ea4663e9ad524f956ed8bb3b5234e6475a7285848760a001518760a001518960e001518960e00151604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a3505050505050505050565b60003089898989898989896040516c01000000000000000000000000600160a060020a039a8b1681028252988a1689026014820152602881019790975294881687026048870152605c8601939093529086168502607c850152609084015260b08301529092160260d082015260e4016040518091039020905098975050505050505050565b60005433600160a060020a03908116911614611a8057600080fd5b600a811015611a8e57600080fd5b600b55565b600160a060020a0333166000908152600160205260408120548190819060ff161515611abe57600080fd5b600092505b8351831015611c7257838381518110611ad857fe5b90602001906020020151600160a060020a038082166000908152600360209081526040808320938a16835292905290812054919350909150811115611c6757600160a060020a038083166000818152600360209081526040808320948a168352939052918220919091551515611b7e57600160a060020a03851681156108fc0282604051600060405180830381858888f193505050501515611b7957600080fd5b611c01565b81600160a060020a031663a9059cbb868360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611bdb57600080fd5b6102c65a03f11515611bec57600080fd5b505050604051805190501515611c0157600080fd5b600160a060020a038281166000818152600360209081526040808320948a168084529490915290819020547ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567918591905191825260208201526040908101905180910390a35b600190920191611ac3565b5050505050565b600160a060020a03331660009081526001602052604081205460ff161515611ca057600080fd5b5060005b8551811015611d2b57611d23868281518110611cbc57fe5b90602001906020020151868381518110611cd257fe5b90602001906020020151868481518110611ce857fe5b90602001906020020151868581518110611cfe57fe5b90602001906020020151868681518110611d1457fe5b90602001906020020151611411565b600101611ca4565b505050505050565b600160a060020a03331660009081526001602052604081205460ff161515611d5a57600080fd5b8151835114611d6857600080fd5b5060005b8251811015611e235760096000848381518110611d8557fe5b90602001906020020151600160a060020a0316600160a060020a0316815260200190815260200160002054828281518110611dbc57fe5b906020019060200201511015611dd157600080fd5b818181518110611ddd57fe5b9060200190602002015160096000858481518110611df757fe5b90602001906020020151600160a060020a03168152602081019190915260400160002055600101611d6c565b505050565b600160a060020a03331660009081526001602052604090205460ff161515611e4f57600080fd5b600160a060020a03808316600081815260066020908152604080832094861680845294825280832054938352600782528083209483529390529190912054611e97919061234a565b600160a060020a03928316600081815260066020908152604080832095909616808352948152858220939093558181526007835284812084825283528481208190559081526008825283812092815291905290812055565b33600160a060020a031660009081527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff6020526040902054611f31903461234a565b600160a060020a03331660008181527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff6020526040808220849055919290917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79134915191825260208201526040908101905180910390a3565b600760209081526000928352604080842090915290825290205481565b600360209081526000928352604080842090915290825290205481565b60026020526000908152604090205460ff1681565b600a5481565b60005433600160a060020a0390811691161461201b57600080fd5b600160a060020a038116151561203057600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a03808316600090815260036020908152604080832033909416835292905220548111156120ce57600080fd5b600160a060020a03808316600090815260066020908152604080832033909416835292905220548111156121f957600160a060020a0380831660009081526008602090815260408083203390941683529290522054158015906121635750600a54600160a060020a0380841660009081526008602090815260408083203390941683529290522054612161904290612360565b115b151561216e57600080fd5b600160a060020a03808316600081815260066020908152604080832033909516808452948252808320549383526007825280832094835293905291909120546121b7919061234a565b600160a060020a038084166000818152600660209081526040808320339095168084529482528083209590955591815260078252838120928152919052908120555b600160a060020a038083166000908152600660209081526040808320339094168352929052205481111561222c57600080fd5b600160a060020a038083166000908152600660209081526040808320339094168352929052205461225d9082612360565b600160a060020a03808416600081815260066020908152604080832033909516808452948252808320959095559181526003825283812092815291905220546122a69082612360565b600160a060020a03808416600081815260036020908152604080832033909516808452948252808320959095558282526008815284822093825292909252918120551515610d1557600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515610d1057600080fd5b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b60008282018381101561235957fe5b9392505050565b60008183101561236c57fe5b50900390565b6000808290508361238584600b54612af5565b111561235957600b548481151561239857fe5b04949350505050565b6000806000806000806123bc8a604001518a60400151612af5565b6123ce8b606001518b60600151612af5565b10156123d957600080fd5b600095508594508851600160a060020a0316896101200151600160a060020a0316141561260f5761244f8a60400151600460008d60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008d61010001518152602081019190915260400160002054612360565b93506124a08960600151600460008c60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008c61010001518152602081019190915260400160002054612360565b92506000871180156124b25750838711155b80156124be5750828711155b15156124c957600080fd5b86945089604001516124df8b6060015187612af5565b8115156124e857fe5b049550612536600460008b60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008b610100015181526020810191909152604001600020548661234a565b600460008b60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008b6101000151815260208101919091526040016000908120919091556125c89060049060808d0151600160a060020a0316600160a060020a0316815260200190815260200160002060008c610100015181526020810191909152604001600020548661234a565b600460008c60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008c6101000151815260208101919091526040016000205561281a565b61265e8960400151600460008c60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008c61010001518152602081019190915260400160002054612360565b92506126af8a60600151600460008d60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008d61010001518152602081019190915260400160002054612360565b93506000871180156126c15750838711155b80156126cd5750828711155b15156126d857600080fd5b86955089606001516126ee8b6040015188612af5565b8115156126f757fe5b049450612745600460008b60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008b610100015181526020810191909152604001600020548761234a565b600460008b60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008b6101000151815260208101919091526040016000908120919091556127d79060049060808d0151600160a060020a0316600160a060020a0316815260200190815260200160002060008c610100015181526020810191909152604001600020548761234a565b600460008c60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008c610100015181526020810191909152604001600020555b6128258a8987612b19565b9150612832898988612b19565b905061288e600360008b60200151600160a060020a0316600160a060020a0316815260200190815260200160002060008b60800151600160a060020a0316600160a060020a031681526020019081526020016000205486612360565b600360008b60200151600160a060020a0316600160a060020a0316815260200190815260200160002060008b60800151600160a060020a0316600160a060020a0316815260200190815260200160002081905550612945600360008b60000151600160a060020a0316600160a060020a0316815260200190815260200160002060008b60800151600160a060020a0316600160a060020a03168152602001908152602001600020546129408884612360565b61234a565b600360008b51600160a060020a0316600160a060020a0316815260200190815260200160002060008b60800151600160a060020a0316600160a060020a03168152602001908152602001600020819055506129f0600360008c60200151600160a060020a0316600160a060020a0316815260200190815260200160002060008c60800151600160a060020a0316600160a060020a031681526020019081526020016000205487612360565b600360008c60200151600160a060020a0316600160a060020a0316815260200190815260200160002060008c60800151600160a060020a0316600160a060020a0316815260200190815260200160002081905550612aa2600360008c60000151600160a060020a0316600160a060020a0316815260200190815260200160002060008c60800151600160a060020a0316600160a060020a03168152602001908152602001600020546129408785612360565b600360008c51600160a060020a0316600160a060020a0316815260200190815260200160002060008c60800151600160a060020a0316815260208101919091526040016000205550505050505050505050565b6000828202831580612b115750828482811515612b0e57fe5b04145b151561235957fe5b600080610140850151600160a060020a031615612cd35760036000866101400151600160a060020a0316600160a060020a0316815260200190815260200160002060008660800151600160a060020a0316600160a060020a03168152602001908152602001600020548560a001511115612b9257600080fd5b612bd360036000876101400151600160a060020a039081168252602080830193909352604091820160009081209189168152925290205460a087015161234a565b60036000876101400151600160a060020a0316600160a060020a03168152602001908152602001600020600086600160a060020a0316600160a060020a0316815260200190815260200160002081905550612c8360036000876101400151600160a060020a0316600160a060020a0316815260200190815260200160002060008760800151600160a060020a0316600160a060020a03168152602001908152602001600020548660a00151612360565b60036000876101400151600160a060020a0316600160a060020a0316815260200190815260200160002060008760800151600160a060020a03168152602081019190915260400160002055612d59565b612ce1838660a00151612372565b60a08601908152519050612d28600360008751600160a060020a039081168252602080830193909352604091820160009081209189168152925290205460a087015161234a565b600360008751600160a060020a03908116825260208083019390935260409182016000908120918916815292529020555b949350505050565b6101606040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082018190526101208201819052610140820152905600a165627a7a723058203cd82973b3527dd267bda41b9d0d8cef72134d9071080d3743592c97b31dea740029

Deployed Bytecode

0x6060604052600436106101925763ffffffff60e060020a60003504166307da68f581146101a25780632287e96a146101c9578063233ac008146101dc578063338b5dea146102135780633823d66c14610237578063429b62e51461024d5780634b0bddd21461026c578063560b3cba146102905780637420a0ec146102b257806374cf6f49146102d75780637955a65f146102f95780638baeefce146103695780638da5cb5b1461037c57806392e33d14146103ab57806396cf5227146103c3578063978bbdb9146103d95780639e47b4b6146103ec578063a4de3c191461040b578063a537b7161461042f578063aa22678014610451578063add371001461053b578063affca9321461057c578063b40f035214610592578063b67590aa146105ef578063bcfe070f14610842578063be1ef5c1146108d1578063d0e30db0146108f6578063da141bd5146108fe578063dc3ef12614610923578063e2e71f9314610948578063f2eaee0214610967578063f2fde38b1461097a578063f3fef3a314610999578063f7888aec146109bb575b341561019d57600080fd5b600080fd5b34156101ad57600080fd5b6101b56109e0565b604051901515815260200160405180910390f35b34156101d457600080fd5b6101b56109ee565b34156101e757600080fd5b610201600160a060020a03600435811690602435166109f7565b60405190815260200160405180910390f35b341561021e57600080fd5b610235600160a060020a0360043516602435610a14565b005b341561024257600080fd5b6101b5600435610b78565b341561025857600080fd5b6101b5600160a060020a0360043516610b8d565b341561027757600080fd5b610235600160a060020a03600435166024351515610ba2565b341561029b57600080fd5b610201600160a060020a0360043516602435610bfd565b34156102bd57600080fd5b610201600160a060020a0360043581169060243516610c1a565b34156102e257600080fd5b610235600160a060020a0360043516602435610c37565b341561030457600080fd5b6102356004606481600360606040519081016040529190828260608082843782019150505050509190806060019060038060200260405190810160405291908282606080828437509395505050823560ff169260208101359250604001359050610e02565b341561037457600080fd5b6102356111f5565b341561038757600080fd5b61038f611221565b604051600160a060020a03909116815260200160405180910390f35b34156103b657600080fd5b6102356004351515611230565b34156103ce57600080fd5b61023560043561125e565b34156103e457600080fd5b61020161128e565b34156103f757600080fd5b610201600160a060020a0360043516611294565b341561041657600080fd5b610235600160a060020a036004351660243515156112a6565b341561043a57600080fd5b610235600160a060020a0360043516602435611301565b341561045c57600080fd5b610235600461016481600b610160604051908101604052919082826101608082843782019150505050509190806101600190600b80602002604051908101604052919082826101608082843782019150505050509190806040019060028060200260405190810160405280929190826002602002808284378201915050505050919080604001906002806020026040519081016040528092919082600260200280828437820191505050505091908060400190600280602002604051908101604052809291908260026020028082843750939550611411945050505050565b341561054657600080fd5b610201600160a060020a03600435811690602435906044358116906064359060843581169060a4359060c4359060e435166119e0565b341561058757600080fd5b610235600435611a65565b341561059d57600080fd5b61023560048035600160a060020a0316906044602480359081019083013580602080820201604051908101604052809392919081815260200183836020028082843750949650611a9395505050505050565b34156105fa57600080fd5b61023560046024813581810190830135806020818102016040519081016040528181529291906000602085015b8282101561066557610160808302860190600b9060405190810160405291908282610160808284375050509183525050600190910190602001610627565b505050505091908035906020019082018035906020019080806020026020016040519081016040528181529291906000602085015b828210156106d857610160808302860190600b906040519081016040529190828261016080828437505050918352505060019091019060200161069a565b505050505091908035906020019082018035906020019080806020026020016040519081016040528181529291906000602085015b8282101561074c57604080830286019060029080519081016040528092919082600260200280828437505050918352505060019091019060200161070d565b505050505091908035906020019082018035906020019080806020026020016040519081016040528181529291906000602085015b828210156107c0576040808302860190600290805190810160405280929190826002602002808284375050509183525050600190910190602001610781565b505050505091908035906020019082018035906020019080806020026020016040519081016040528181529291906000602085015b828210156108345760408083028601906002908051908101604052809291908260026020028082843750505091835250506001909101906020016107f5565b505050505091905050611c79565b341561084d57600080fd5b610235600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843750949650611d3395505050505050565b34156108dc57600080fd5b610235600160a060020a0360043581169060243516611e28565b610235611eef565b341561090957600080fd5b610201600160a060020a0360043581169060243516611fab565b341561092e57600080fd5b610201600160a060020a0360043581169060243516611fc8565b341561095357600080fd5b6101b5600160a060020a0360043516611fe5565b341561097257600080fd5b610201611ffa565b341561098557600080fd5b610235600160a060020a0360043516612000565b34156109a457600080fd5b610235600160a060020a036004351660243561209b565b34156109c657600080fd5b610201600160a060020a036004358116906024351661231f565b600c54610100900460ff1681565b600c5460ff1681565b600660209081526000928352604080842090915290825290205481565b600160a060020a0382161515610a2957600080fd5b600160a060020a0380831660009081526003602090815260408083203390941683529290522054610a5a908261234a565b600160a060020a0380841660008181526003602090815260408083203395861684529091528082209490945590926323b872dd92913091869190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610ae857600080fd5b6102c65a03f11515610af957600080fd5b505050604051805190501515610b0e57600080fd5b600160a060020a038281166000818152600360209081526040808320339095168084529490915290819020547fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7918591905191825260208201526040908101905180910390a35050565b60056020526000908152604090205460ff1681565b60016020526000908152604090205460ff1681565b60005433600160a060020a03908116911614610bbd57600080fd5b600160a060020a0382161515610bd257600080fd5b600160a060020a03919091166000908152600160205260409020805460ff1916911515919091179055565b600460209081526000928352604080842090915290825290205481565b600860209081526000928352604080842090915290825290205481565b600c5460ff161515610c4857600080fd5b600160a060020a0380831660009081526003602090815260408083203390941683529290522054811115610c7b57600080fd5b600160a060020a0380831660009081526003602090815260408083203390941683529290522054610cac9082612360565b600160a060020a03808416600081815260036020908152604080832033909516835293905291909120919091551515610d1557600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515610d1057600080fd5b610d98565b81600160a060020a031663a9059cbb338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610d7257600080fd5b6102c65a03f11515610d8357600080fd5b505050604051805190501515610d9857600080fd5b600160a060020a038281166000818152600360209081526040808320339095168084529490915290819020547ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567918591905191825260208201526040908101905180910390a35050565b600160a060020a03331660009081526001602052604081205481908190819081908190819060ff161515610e3557600080fd5b60408c0151600160a060020a03811660009081526002602052604090205460ff161515610e6157600080fd5b8c51975060208d0151965060408d015195508b51945060208c0151935060408c0151600160a060020a038089166000908152600360209081526040808320938d1683529290522054909350851115610eb857600080fd5b610ec28584612372565b925030888887876040516c01000000000000000000000000600160a060020a039687168102825294861685026014820152929094169092026028820152603c810191909152605c810191909152607c0160405190819003902060008181526005602052604090205490925060ff1615610f3a57600080fd5b60008281526005602052604090819020805460ff19166001908117909155600160a060020a038a16918490517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0160405180910390208d8d8d6040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f11515610ffe57600080fd5b505060206040510351600160a060020a03161461101a57600080fd5b600160a060020a038088166000908152600360209081526040808320938c168352929052205461104a9086612360565b600160a060020a0388811660009081526003602090815260408083208d851684529091528082209390935590881681522054611086908461234a565b600160a060020a038089166000908152600360209081526040808320938b16835292905220556110b68584612360565b9450600160a060020a03871615156110fe57600160a060020a03881685156108fc0286604051600060405180830381858888f1935050505015156110f957600080fd5b611181565b86600160a060020a031663a9059cbb898760006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561115b57600080fd5b6102c65a03f1151561116c57600080fd5b50505060405180519050151561118157600080fd5b600160a060020a038781166000818152600360209081526040808320948d168084529490915290819020547ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567918991905191825260208201526040908101905180910390a350505050505050505050505050565b60005433600160a060020a0390811691161461121057600080fd5b600c805461ff001916610100179055565b600054600160a060020a031681565b60005433600160a060020a0390811691161461124b57600080fd5b600c805460ff1916911515919091179055565b60005433600160a060020a0390811691161461127957600080fd5b62093a8081111561128957600080fd5b600a55565b600b5481565b60096020526000908152604090205481565b60005433600160a060020a039081169116146112c157600080fd5b600160a060020a03821615156112d657600080fd5b600160a060020a03919091166000908152600260205260409020805460ff1916911515919091179055565b600160a060020a03808316600090815260076020908152604080832033909416835292905290812054611334908361234a565b600160a060020a03808516600081815260036020908152604080832033909516808452948252808320549383526006825280832094835293905291909120549192509061138290839061234a565b111561138d57600080fd5b600160a060020a03808416600081815260076020908152604080832033909516808452948252808320869055838352600882528083208584529091529081902042908190557f9279426ccdba165d0a4e2dadd069b13c58656379fa8a37530455ae6539ca8f28918691905191825260208201526040908101905180910390a3505050565b611419612d61565b611421612d61565b600160a060020a03331660009081526001602052604081205460ff16151561144857600080fd5b610140880151600160a060020a03811660009081526002602052604090205460ff16151561147557600080fd5b600c54610100900460ff161561148a57600080fd5b610160604051908101604052808a51600160a060020a0316815260200160408b0151600160a060020a031681526020018951815260200160408a0151815260200160808b0151600160a060020a0316815260200160808a0151815260200160c08a015181526020016101008a015181526000602082015260400160c08b0151600160a060020a031681526020016101008b0151600160a060020a0316905293506101606040519081016040528060208b0151600160a060020a0316815260200160608b0151600160a060020a031681526020018960016020020151815260200160608a0151815260200160a08b0151600160a060020a0316815260200160a08a0151815260200160e08a015181526020016101208a015181526000602082015260400160e08b0151600160a060020a031681526020016101208b0151600160a060020a0316905292506101408801519150438460c00151101580156115f35750438360c0015110155b15156115fe57600080fd5b600960008560800151600160a060020a0316600160a060020a03168152602001908152602001600020548460e00151101580156116685750600960008460800151600160a060020a0316600160a060020a03168152602001908152602001600020548360e0015110155b151561167357600080fd5b826101200151600160a060020a0316846101200151600160a060020a03161480156116b457508260200151600160a060020a03168451600160a060020a0316145b80156116d657508251600160a060020a03168460200151600160a060020a0316145b15156116e157600080fd5b8251600160a060020a0316836101200151600160a060020a0316148061172157508260200151600160a060020a0316836101200151600160a060020a0316145b151561172c57600080fd5b61175b84518560400151866020015187606001518861012001518960c001518a60e001518b61014001516119e0565b61010085015261179083518460400151856020015186606001518761012001518860c001518960e001518a61014001516119e0565b6101008401526080840151600160a060020a031660018561010001516040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c016040519081900390208951895189516040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561184b57600080fd5b505060206040510351600160a060020a03161461186757600080fd5b8260800151600160a060020a031660018461010001516040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0160405190819003902060208a015160208a015160208a01516040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561192557600080fd5b505060206040510351600160a060020a03161461194157600080fd5b61195284846101408c0151856123a1565b8260800151600160a060020a03168460800151600160a060020a03167f01f5d7c359dba416997ea6c723ea4663e9ad524f956ed8bb3b5234e6475a7285848760a001518760a001518960e001518960e00151604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a3505050505050505050565b60003089898989898989896040516c01000000000000000000000000600160a060020a039a8b1681028252988a1689026014820152602881019790975294881687026048870152605c8601939093529086168502607c850152609084015260b08301529092160260d082015260e4016040518091039020905098975050505050505050565b60005433600160a060020a03908116911614611a8057600080fd5b600a811015611a8e57600080fd5b600b55565b600160a060020a0333166000908152600160205260408120548190819060ff161515611abe57600080fd5b600092505b8351831015611c7257838381518110611ad857fe5b90602001906020020151600160a060020a038082166000908152600360209081526040808320938a16835292905290812054919350909150811115611c6757600160a060020a038083166000818152600360209081526040808320948a168352939052918220919091551515611b7e57600160a060020a03851681156108fc0282604051600060405180830381858888f193505050501515611b7957600080fd5b611c01565b81600160a060020a031663a9059cbb868360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611bdb57600080fd5b6102c65a03f11515611bec57600080fd5b505050604051805190501515611c0157600080fd5b600160a060020a038281166000818152600360209081526040808320948a168084529490915290819020547ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567918591905191825260208201526040908101905180910390a35b600190920191611ac3565b5050505050565b600160a060020a03331660009081526001602052604081205460ff161515611ca057600080fd5b5060005b8551811015611d2b57611d23868281518110611cbc57fe5b90602001906020020151868381518110611cd257fe5b90602001906020020151868481518110611ce857fe5b90602001906020020151868581518110611cfe57fe5b90602001906020020151868681518110611d1457fe5b90602001906020020151611411565b600101611ca4565b505050505050565b600160a060020a03331660009081526001602052604081205460ff161515611d5a57600080fd5b8151835114611d6857600080fd5b5060005b8251811015611e235760096000848381518110611d8557fe5b90602001906020020151600160a060020a0316600160a060020a0316815260200190815260200160002054828281518110611dbc57fe5b906020019060200201511015611dd157600080fd5b818181518110611ddd57fe5b9060200190602002015160096000858481518110611df757fe5b90602001906020020151600160a060020a03168152602081019190915260400160002055600101611d6c565b505050565b600160a060020a03331660009081526001602052604090205460ff161515611e4f57600080fd5b600160a060020a03808316600081815260066020908152604080832094861680845294825280832054938352600782528083209483529390529190912054611e97919061234a565b600160a060020a03928316600081815260066020908152604080832095909616808352948152858220939093558181526007835284812084825283528481208190559081526008825283812092815291905290812055565b33600160a060020a031660009081527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff6020526040902054611f31903461234a565b600160a060020a03331660008181527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff6020526040808220849055919290917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79134915191825260208201526040908101905180910390a3565b600760209081526000928352604080842090915290825290205481565b600360209081526000928352604080842090915290825290205481565b60026020526000908152604090205460ff1681565b600a5481565b60005433600160a060020a0390811691161461201b57600080fd5b600160a060020a038116151561203057600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a03808316600090815260036020908152604080832033909416835292905220548111156120ce57600080fd5b600160a060020a03808316600090815260066020908152604080832033909416835292905220548111156121f957600160a060020a0380831660009081526008602090815260408083203390941683529290522054158015906121635750600a54600160a060020a0380841660009081526008602090815260408083203390941683529290522054612161904290612360565b115b151561216e57600080fd5b600160a060020a03808316600081815260066020908152604080832033909516808452948252808320549383526007825280832094835293905291909120546121b7919061234a565b600160a060020a038084166000818152600660209081526040808320339095168084529482528083209590955591815260078252838120928152919052908120555b600160a060020a038083166000908152600660209081526040808320339094168352929052205481111561222c57600080fd5b600160a060020a038083166000908152600660209081526040808320339094168352929052205461225d9082612360565b600160a060020a03808416600081815260066020908152604080832033909516808452948252808320959095559181526003825283812092815291905220546122a69082612360565b600160a060020a03808416600081815260036020908152604080832033909516808452948252808320959095558282526008815284822093825292909252918120551515610d1557600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515610d1057600080fd5b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b60008282018381101561235957fe5b9392505050565b60008183101561236c57fe5b50900390565b6000808290508361238584600b54612af5565b111561235957600b548481151561239857fe5b04949350505050565b6000806000806000806123bc8a604001518a60400151612af5565b6123ce8b606001518b60600151612af5565b10156123d957600080fd5b600095508594508851600160a060020a0316896101200151600160a060020a0316141561260f5761244f8a60400151600460008d60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008d61010001518152602081019190915260400160002054612360565b93506124a08960600151600460008c60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008c61010001518152602081019190915260400160002054612360565b92506000871180156124b25750838711155b80156124be5750828711155b15156124c957600080fd5b86945089604001516124df8b6060015187612af5565b8115156124e857fe5b049550612536600460008b60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008b610100015181526020810191909152604001600020548661234a565b600460008b60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008b6101000151815260208101919091526040016000908120919091556125c89060049060808d0151600160a060020a0316600160a060020a0316815260200190815260200160002060008c610100015181526020810191909152604001600020548661234a565b600460008c60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008c6101000151815260208101919091526040016000205561281a565b61265e8960400151600460008c60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008c61010001518152602081019190915260400160002054612360565b92506126af8a60600151600460008d60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008d61010001518152602081019190915260400160002054612360565b93506000871180156126c15750838711155b80156126cd5750828711155b15156126d857600080fd5b86955089606001516126ee8b6040015188612af5565b8115156126f757fe5b049450612745600460008b60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008b610100015181526020810191909152604001600020548761234a565b600460008b60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008b6101000151815260208101919091526040016000908120919091556127d79060049060808d0151600160a060020a0316600160a060020a0316815260200190815260200160002060008c610100015181526020810191909152604001600020548761234a565b600460008c60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008c610100015181526020810191909152604001600020555b6128258a8987612b19565b9150612832898988612b19565b905061288e600360008b60200151600160a060020a0316600160a060020a0316815260200190815260200160002060008b60800151600160a060020a0316600160a060020a031681526020019081526020016000205486612360565b600360008b60200151600160a060020a0316600160a060020a0316815260200190815260200160002060008b60800151600160a060020a0316600160a060020a0316815260200190815260200160002081905550612945600360008b60000151600160a060020a0316600160a060020a0316815260200190815260200160002060008b60800151600160a060020a0316600160a060020a03168152602001908152602001600020546129408884612360565b61234a565b600360008b51600160a060020a0316600160a060020a0316815260200190815260200160002060008b60800151600160a060020a0316600160a060020a03168152602001908152602001600020819055506129f0600360008c60200151600160a060020a0316600160a060020a0316815260200190815260200160002060008c60800151600160a060020a0316600160a060020a031681526020019081526020016000205487612360565b600360008c60200151600160a060020a0316600160a060020a0316815260200190815260200160002060008c60800151600160a060020a0316600160a060020a0316815260200190815260200160002081905550612aa2600360008c60000151600160a060020a0316600160a060020a0316815260200190815260200160002060008c60800151600160a060020a0316600160a060020a03168152602001908152602001600020546129408785612360565b600360008c51600160a060020a0316600160a060020a0316815260200190815260200160002060008c60800151600160a060020a0316815260208101919091526040016000205550505050505050505050565b6000828202831580612b115750828482811515612b0e57fe5b04145b151561235957fe5b600080610140850151600160a060020a031615612cd35760036000866101400151600160a060020a0316600160a060020a0316815260200190815260200160002060008660800151600160a060020a0316600160a060020a03168152602001908152602001600020548560a001511115612b9257600080fd5b612bd360036000876101400151600160a060020a039081168252602080830193909352604091820160009081209189168152925290205460a087015161234a565b60036000876101400151600160a060020a0316600160a060020a03168152602001908152602001600020600086600160a060020a0316600160a060020a0316815260200190815260200160002081905550612c8360036000876101400151600160a060020a0316600160a060020a0316815260200190815260200160002060008760800151600160a060020a0316600160a060020a03168152602001908152602001600020548660a00151612360565b60036000876101400151600160a060020a0316600160a060020a0316815260200190815260200160002060008760800151600160a060020a03168152602081019190915260400160002055612d59565b612ce1838660a00151612372565b60a08601908152519050612d28600360008751600160a060020a039081168252602080830193909352604091820160009081209189168152925290205460a087015161234a565b600360008751600160a060020a03908116825260208083019390935260409182016000908120918916815292529020555b949350505050565b6101606040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082018190526101208201819052610140820152905600a165627a7a723058203cd82973b3527dd267bda41b9d0d8cef72134d9071080d3743592c97b31dea740029

Swarm Source

bzzr://3cd82973b3527dd267bda41b9d0d8cef72134d9071080d3743592c97b31dea74

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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