Contract Overview
Balance: 51 wei
Transactions: 115 txns
 Latest 25 transactions from a total of 115 transactions

TxHash Age From To Value [TxFee]
0x5794cb08229564eb10d0e4ee25d7d64c6b1dc27e1729b1f496c0bbf4b665dac714 hrs 15 mins ago0x6e4843e90ecacd3a3bbced74a5235363762d5100  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.000029069
0xd2ebb8ba810b979fae34d2990483786fbf09e8ea581a805e7cccd2b80503599114 hrs 15 mins ago0x6e4843e90ecacd3a3bbced74a5235363762d5100  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.000028937
0x427a58dc678073dffc582e82357cf4128c2dbc4ac0a278bca4f10f36e4e0411414 hrs 16 mins ago0x6e4843e90ecacd3a3bbced74a5235363762d5100  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.000028827
0x8b1dfc47a627d523551acee0598ac4a56bb5312798b3c29b6eb28fa74a5927502 days 21 hrs ago0x6e4843e90ecacd3a3bbced74a5235363762d5100  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea1 Ether0.000029926
0x17e290955c6e201e4a1ae3d88d87f7f00a9bab2c1b962cf4585ec1ae549dcd6965 days 19 hrs ago0x6e4843e90ecacd3a3bbced74a5235363762d5100  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.000161479
0xdf92af03ad93ca6782f999d2ffb911502b4cecf09a2865aea3f29e147eba9c9565 days 19 hrs ago0x6e4843e90ecacd3a3bbced74a5235363762d5100  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.000072397
0x990c7c4bd7dccc247c38ca6ae5d0e7cfd1731db6d440ddbaa6b64cb427918e4f65 days 20 hrs ago0x6e4843e90ecacd3a3bbced74a5235363762d5100  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.000019772
0x61a3a2470191386656a9498cdbd84bfdae39a52547e5d726577feee745daf09c65 days 20 hrs ago0x1be6064ca70e40a39473372be0ac8a5e16f7be45  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.000956487
0xfd47a1b2883aebb13dff4720c208e92b275bf366e739e3f601ffb59b849632b165 days 20 hrs ago0x1be6064ca70e40a39473372be0ac8a5e16f7be45  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.000415212
0xb000e81b57daab0306553ea60126a4d5c0a2f131a179c7b554b220b9df22a059137 days 17 hrs ago0x85e9df3ce6f7de026d1cf95c47329e70423de029  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.001870051
0xf27fade3d3063fcc7c1e3925a9e7ec0dceb881bb54c217bb676c43640a3bb3e5139 days 18 hrs ago0xd22abf44e2e2b3a9da3b84383c894f936925333c  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.000976866
0xf7232ccede7b9f23c4cba62d4b5a88e03b0b4b4f0f4ebb7d8fb2ec779487b66d179 days 17 hrs ago0x85e9df3ce6f7de026d1cf95c47329e70423de029  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.0161194
0x8b322bdce28774f52ec9f04d0af0ce206839810c640bcfd77b33fc6d13b3d46d179 days 17 hrs ago0x85e9df3ce6f7de026d1cf95c47329e70423de029  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.0050392
0x580269db1454ec15d7aa1676fc27c0cdd338ee38356b2c8313a5c6e8df2e8aa4179 days 17 hrs ago0x85e9df3ce6f7de026d1cf95c47329e70423de029  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.0050392
0x7899a9a7b902ec2bc038d957de37d1e91d0eca89b95f1e989943be70810d204b179 days 17 hrs ago0x85e9df3ce6f7de026d1cf95c47329e70423de029  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.0050392
0xf3d336e2d460b508fc0e49d9f196b2ba410cea579396ec7c75588b10dcc2794c179 days 17 hrs ago0x85e9df3ce6f7de026d1cf95c47329e70423de029  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.0050392
0xbd524d862eb4abad891d2a25e2209c84019fa41a9ca6a1f5386d78d7dd13f50f179 days 17 hrs ago0x85e9df3ce6f7de026d1cf95c47329e70423de029  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.0050392
0xc27b4e1d0618c74e284a0929f819cbdf6e2a1c3e70aeb6add7ded2e21f1d271e179 days 17 hrs ago0x85e9df3ce6f7de026d1cf95c47329e70423de029  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.0050392
0x4ef7f92e67acdbaaf22b8d1bc625b99741035002e8cdc40285701a3414884fd4179 days 17 hrs ago0x85e9df3ce6f7de026d1cf95c47329e70423de029  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.0050392
0x472eeb030728b8c0605b1438bcb3fbd7a4d452969a93047a70c78d85be30c0a1179 days 17 hrs ago0x85e9df3ce6f7de026d1cf95c47329e70423de029  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.0050232
0x1925d9630a7de8ae72b1a1d73a2f4ad3b25d7a2ce23727bc8cd952095f935391179 days 17 hrs ago0x85e9df3ce6f7de026d1cf95c47329e70423de029  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.0050392
0x75a0be28760776b1aa246c7ec259709b919cf6f09940d58bc20c115ad87ae129179 days 17 hrs ago0x85e9df3ce6f7de026d1cf95c47329e70423de029  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.0050392
0x9e79f33d98874c378c2ad6fb1549ff66ccf25977eb5115246d7eefd4285685bf179 days 17 hrs ago0x85e9df3ce6f7de026d1cf95c47329e70423de029  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.0050392
0x952dd556d0660c91122d2a2d6b7722531e382d7e7200829427aef694eb65b6c0179 days 17 hrs ago0x85e9df3ce6f7de026d1cf95c47329e70423de029  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.0050392
0xd0661e44b20e0d5c88cd53d60dc751f45c2542f9e72224d53a924f6268fc08e0179 days 17 hrs ago0x85e9df3ce6f7de026d1cf95c47329e70423de029  IN   0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether0.0050392
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0x0bbc64520aa625ee7844fd9721ede20c48d4225a0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xb9bcc9dc47e772d4c57526b28d8537325b9128c50xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0x0bbc64520aa625ee7844fd9721ede20c48d4225a0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xb9bcc9dc47e772d4c57526b28d8537325b9128c50xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0xb9bcc9dc47e772d4c57526b28d8537325b9128c50 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0x7e6b8b9510d71bf8ef0f893902ebb9c865eef4df0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xb9bcc9dc47e772d4c57526b28d8537325b9128c50xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0x0bbc64520aa625ee7844fd9721ede20c48d4225a0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xb9bcc9dc47e772d4c57526b28d8537325b9128c50xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0x0bbc64520aa625ee7844fd9721ede20c48d4225a0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xb9bcc9dc47e772d4c57526b28d8537325b9128c50xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0x0bbc64520aa625ee7844fd9721ede20c48d4225a0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xb9bcc9dc47e772d4c57526b28d8537325b9128c50xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0xb9bcc9dc47e772d4c57526b28d8537325b9128c50 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0x7e6b8b9510d71bf8ef0f893902ebb9c865eef4df0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0x0bbc64520aa625ee7844fd9721ede20c48d4225a0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xb9bcc9dc47e772d4c57526b28d8537325b9128c50xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0x0bbc64520aa625ee7844fd9721ede20c48d4225a0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xb9bcc9dc47e772d4c57526b28d8537325b9128c50xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0xb9bcc9dc47e772d4c57526b28d8537325b9128c50 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0x7e6b8b9510d71bf8ef0f893902ebb9c865eef4df0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xb9bcc9dc47e772d4c57526b28d8537325b9128c50xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0x0bbc64520aa625ee7844fd9721ede20c48d4225a0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xb9bcc9dc47e772d4c57526b28d8537325b9128c50xf27dbbea1856f18142cdd3b575146199f7f3a7ea0 Ether
0x741452bbaa3dc409623a3f3bb917efa3625146730b1fe47e4b9c4301f2cf4bbc10420964 58 secs ago0xf27dbbea1856f18142cdd3b575146199f7f3a7ea0x0bbc64520aa625ee7844fd9721ede20c48d4225a0 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: KyberNetwork
Compiler Version: v0.4.18+commit.9cf6e910
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity 0.4.18;

// File: contracts/ERC20Interface.sol

// https://github.com/ethereum/EIPs/issues/20
interface ERC20 {
    function totalSupply() public view returns (uint supply);
    function balanceOf(address _owner) public view returns (uint balance);
    function transfer(address _to, uint _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint _value) public returns (bool success);
    function approve(address _spender, uint _value) public returns (bool success);
    function allowance(address _owner, address _spender) public view returns (uint remaining);
    function decimals() public view returns(uint digits);
    event Approval(address indexed _owner, address indexed _spender, uint _value);
}

// File: contracts/ExpectedRateInterface.sol

interface ExpectedRateInterface {
    function getExpectedRate(ERC20 src, ERC20 dest, uint srcQty) public view
        returns (uint expectedRate, uint slippageRate);
}

// File: contracts/FeeBurnerInterface.sol

interface FeeBurnerInterface {
    function handleFees (uint tradeWeiAmount, address reserve, address wallet) public returns(bool);
}

// File: contracts/KyberNetworkInterface.sol

/// @title Kyber Network interface
interface KyberNetworkInterface {
    function maxGasPrice() public view returns(uint);
    function getUserCapInWei(address user) public view returns(uint);
    function getUserCapInTokenWei(address user, ERC20 token) public view returns(uint);
    function enabled() public view returns(bool);
    function info(bytes32 id) public view returns(uint);

    function getExpectedRate(ERC20 src, ERC20 dest, uint srcQty) public view
        returns (uint expectedRate, uint slippageRate);

    function tradeWithHint(address trader, ERC20 src, uint srcAmount, ERC20 dest, address destAddress,
        uint maxDestAmount, uint minConversionRate, address walletId, bytes hint) public payable returns(uint);
}

// File: contracts/KyberReserveInterface.sol

/// @title Kyber Reserve contract
interface KyberReserveInterface {

    function trade(
        ERC20 srcToken,
        uint srcAmount,
        ERC20 destToken,
        address destAddress,
        uint conversionRate,
        bool validate
    )
        public
        payable
        returns(bool);

    function getConversionRate(ERC20 src, ERC20 dest, uint srcQty, uint blockNumber) public view returns(uint);
}

// File: contracts/Utils.sol

/// @title Kyber constants contract
contract Utils {

    ERC20 constant internal ETH_TOKEN_ADDRESS = ERC20(0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee);
    uint  constant internal PRECISION = (10**18);
    uint  constant internal MAX_QTY   = (10**28); // 10B tokens
    uint  constant internal MAX_RATE  = (PRECISION * 10**6); // up to 1M tokens per ETH
    uint  constant internal MAX_DECIMALS = 18;
    uint  constant internal ETH_DECIMALS = 18;
    mapping(address=>uint) internal decimals;

    function setDecimals(ERC20 token) internal {
        if (token == ETH_TOKEN_ADDRESS) decimals[token] = ETH_DECIMALS;
        else decimals[token] = token.decimals();
    }

    function getDecimals(ERC20 token) internal view returns(uint) {
        if (token == ETH_TOKEN_ADDRESS) return ETH_DECIMALS; // save storage access
        uint tokenDecimals = decimals[token];
        // technically, there might be token with decimals 0
        // moreover, very possible that old tokens have decimals 0
        // these tokens will just have higher gas fees.
        if(tokenDecimals == 0) return token.decimals();

        return tokenDecimals;
    }

    function calcDstQty(uint srcQty, uint srcDecimals, uint dstDecimals, uint rate) internal pure returns(uint) {
        require(srcQty <= MAX_QTY);
        require(rate <= MAX_RATE);

        if (dstDecimals >= srcDecimals) {
            require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
            return (srcQty * rate * (10**(dstDecimals - srcDecimals))) / PRECISION;
        } else {
            require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
            return (srcQty * rate) / (PRECISION * (10**(srcDecimals - dstDecimals)));
        }
    }

    function calcSrcQty(uint dstQty, uint srcDecimals, uint dstDecimals, uint rate) internal pure returns(uint) {
        require(dstQty <= MAX_QTY);
        require(rate <= MAX_RATE);
        
        //source quantity is rounded up. to avoid dest quantity being too low.
        uint numerator;
        uint denominator;
        if (srcDecimals >= dstDecimals) {
            require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
            numerator = (PRECISION * dstQty * (10**(srcDecimals - dstDecimals)));
            denominator = rate;
        } else {
            require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
            numerator = (PRECISION * dstQty);
            denominator = (rate * (10**(dstDecimals - srcDecimals)));
        }
        return (numerator + denominator - 1) / denominator; //avoid rounding down errors
    }
}

// File: contracts/Utils2.sol

contract Utils2 is Utils {

    /// @dev get the balance of a user.
    /// @param token The token type
    /// @return The balance
    function getBalance(ERC20 token, address user) public view returns(uint) {
        if (token == ETH_TOKEN_ADDRESS)
            return user.balance;
        else
            return token.balanceOf(user);
    }

    function getDecimalsSafe(ERC20 token) internal returns(uint) {

        if (decimals[token] == 0) {
            setDecimals(token);
        }

        return decimals[token];
    }

    function calcDestAmount(ERC20 src, ERC20 dest, uint srcAmount, uint rate) internal view returns(uint) {
        return calcDstQty(srcAmount, getDecimals(src), getDecimals(dest), rate);
    }

    function calcSrcAmount(ERC20 src, ERC20 dest, uint destAmount, uint rate) internal view returns(uint) {
        return calcSrcQty(destAmount, getDecimals(src), getDecimals(dest), rate);
    }

    function calcRateFromQty(uint srcAmount, uint destAmount, uint srcDecimals, uint dstDecimals)
        internal pure returns(uint)
    {
        require(srcAmount <= MAX_QTY);
        require(destAmount <= MAX_QTY);

        if (dstDecimals >= srcDecimals) {
            require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
            return (destAmount * PRECISION / ((10 ** (dstDecimals - srcDecimals)) * srcAmount));
        } else {
            require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
            return (destAmount * PRECISION * (10 ** (srcDecimals - dstDecimals)) / srcAmount);
        }
    }
}

// File: contracts/WhiteListInterface.sol

contract WhiteListInterface {
    function getUserCapInWei(address user) external view returns (uint userCapWei);
}

// File: contracts/PermissionGroups.sol

contract PermissionGroups {

    address public admin;
    address public pendingAdmin;
    mapping(address=>bool) internal operators;
    mapping(address=>bool) internal alerters;
    address[] internal operatorsGroup;
    address[] internal alertersGroup;
    uint constant internal MAX_GROUP_SIZE = 50;

    function PermissionGroups() public {
        admin = msg.sender;
    }

    modifier onlyAdmin() {
        require(msg.sender == admin);
        _;
    }

    modifier onlyOperator() {
        require(operators[msg.sender]);
        _;
    }

    modifier onlyAlerter() {
        require(alerters[msg.sender]);
        _;
    }

    function getOperators () external view returns(address[]) {
        return operatorsGroup;
    }

    function getAlerters () external view returns(address[]) {
        return alertersGroup;
    }

    event TransferAdminPending(address pendingAdmin);

    /**
     * @dev Allows the current admin to set the pendingAdmin address.
     * @param newAdmin The address to transfer ownership to.
     */
    function transferAdmin(address newAdmin) public onlyAdmin {
        require(newAdmin != address(0));
        TransferAdminPending(pendingAdmin);
        pendingAdmin = newAdmin;
    }

    /**
     * @dev Allows the current admin to set the admin in one tx. Useful initial deployment.
     * @param newAdmin The address to transfer ownership to.
     */
    function transferAdminQuickly(address newAdmin) public onlyAdmin {
        require(newAdmin != address(0));
        TransferAdminPending(newAdmin);
        AdminClaimed(newAdmin, admin);
        admin = newAdmin;
    }

    event AdminClaimed( address newAdmin, address previousAdmin);

    /**
     * @dev Allows the pendingAdmin address to finalize the change admin process.
     */
    function claimAdmin() public {
        require(pendingAdmin == msg.sender);
        AdminClaimed(pendingAdmin, admin);
        admin = pendingAdmin;
        pendingAdmin = address(0);
    }

    event AlerterAdded (address newAlerter, bool isAdd);

    function addAlerter(address newAlerter) public onlyAdmin {
        require(!alerters[newAlerter]); // prevent duplicates.
        require(alertersGroup.length < MAX_GROUP_SIZE);

        AlerterAdded(newAlerter, true);
        alerters[newAlerter] = true;
        alertersGroup.push(newAlerter);
    }

    function removeAlerter (address alerter) public onlyAdmin {
        require(alerters[alerter]);
        alerters[alerter] = false;

        for (uint i = 0; i < alertersGroup.length; ++i) {
            if (alertersGroup[i] == alerter) {
                alertersGroup[i] = alertersGroup[alertersGroup.length - 1];
                alertersGroup.length--;
                AlerterAdded(alerter, false);
                break;
            }
        }
    }

    event OperatorAdded(address newOperator, bool isAdd);

    function addOperator(address newOperator) public onlyAdmin {
        require(!operators[newOperator]); // prevent duplicates.
        require(operatorsGroup.length < MAX_GROUP_SIZE);

        OperatorAdded(newOperator, true);
        operators[newOperator] = true;
        operatorsGroup.push(newOperator);
    }

    function removeOperator (address operator) public onlyAdmin {
        require(operators[operator]);
        operators[operator] = false;

        for (uint i = 0; i < operatorsGroup.length; ++i) {
            if (operatorsGroup[i] == operator) {
                operatorsGroup[i] = operatorsGroup[operatorsGroup.length - 1];
                operatorsGroup.length -= 1;
                OperatorAdded(operator, false);
                break;
            }
        }
    }
}

// File: contracts/Withdrawable.sol

/**
 * @title Contracts that should be able to recover tokens or ethers
 * @author Ilan Doron
 * @dev This allows to recover any tokens or Ethers received in a contract.
 * This will prevent any accidental loss of tokens.
 */
contract Withdrawable is PermissionGroups {

    event TokenWithdraw(ERC20 token, uint amount, address sendTo);

    /**
     * @dev Withdraw all ERC20 compatible tokens
     * @param token ERC20 The address of the token contract
     */
    function withdrawToken(ERC20 token, uint amount, address sendTo) external onlyAdmin {
        require(token.transfer(sendTo, amount));
        TokenWithdraw(token, amount, sendTo);
    }

    event EtherWithdraw(uint amount, address sendTo);

    /**
     * @dev Withdraw Ethers
     */
    function withdrawEther(uint amount, address sendTo) external onlyAdmin {
        sendTo.transfer(amount);
        EtherWithdraw(amount, sendTo);
    }
}

// File: contracts/KyberNetwork.sol

////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @title Kyber Network main contract
contract KyberNetwork is Withdrawable, Utils2, KyberNetworkInterface {

    uint public negligibleRateDiff = 10; // basic rate steps will be in 0.01%
    KyberReserveInterface[] public reserves;
    mapping(address=>bool) public isReserve;
    WhiteListInterface public whiteListContract;
    ExpectedRateInterface public expectedRateContract;
    FeeBurnerInterface    public feeBurnerContract;
    address               public kyberNetworkProxyContract;
    uint                  public maxGasPriceValue = 50 * 1000 * 1000 * 1000; // 50 gwei
    bool                  public isEnabled = false; // network is enabled
    mapping(bytes32=>uint) public infoFields; // this is only a UI field for external app.
    mapping(address=>address[]) public reservesPerTokenSrc; //reserves supporting token to eth
    mapping(address=>address[]) public reservesPerTokenDest;//reserves support eth to token

    function KyberNetwork(address _admin) public {
        require(_admin != address(0));
        admin = _admin;
    }

    event EtherReceival(address indexed sender, uint amount);

    /* solhint-disable no-complex-fallback */
    // To avoid users trying to swap tokens using default payable function. We added this short code
    //  to verify Ethers will be received only from reserves if transferred without a specific function call.
    function() public payable {
        require(isReserve[msg.sender]);
        EtherReceival(msg.sender, msg.value);
    }
    /* solhint-enable no-complex-fallback */

    struct TradeInput {
        address trader;
        ERC20 src;
        uint srcAmount;
        ERC20 dest;
        address destAddress;
        uint maxDestAmount;
        uint minConversionRate;
        address walletId;
        bytes hint;
    }

    function tradeWithHint(
        address trader,
        ERC20 src,
        uint srcAmount,
        ERC20 dest,
        address destAddress,
        uint maxDestAmount,
        uint minConversionRate,
        address walletId,
        bytes hint
    )
        public
        payable
        returns(uint)
    {
        require(hint.length == 0);
        require(msg.sender == kyberNetworkProxyContract);

        TradeInput memory tradeInput;

        tradeInput.trader = trader;
        tradeInput.src = src;
        tradeInput.srcAmount = srcAmount;
        tradeInput.dest = dest;
        tradeInput.destAddress = destAddress;
        tradeInput.maxDestAmount = maxDestAmount;
        tradeInput.minConversionRate = minConversionRate;
        tradeInput.walletId = walletId;
        tradeInput.hint = hint;

        return trade(tradeInput);
    }

    event AddReserveToNetwork(KyberReserveInterface reserve, bool add);

    /// @notice can be called only by admin
    /// @dev add or deletes a reserve to/from the network.
    /// @param reserve The reserve address.
    /// @param add If true, the add reserve. Otherwise delete reserve.
    function addReserve(KyberReserveInterface reserve, bool add) public onlyAdmin {

        if (add) {
            require(!isReserve[reserve]);
            reserves.push(reserve);
            isReserve[reserve] = true;
            AddReserveToNetwork(reserve, true);
        } else {
            isReserve[reserve] = false;
            // will have trouble if more than 50k reserves...
            for (uint i = 0; i < reserves.length; i++) {
                if (reserves[i] == reserve) {
                    reserves[i] = reserves[reserves.length - 1];
                    reserves.length--;
                    AddReserveToNetwork(reserve, false);
                    break;
                }
            }
        }
    }

    event ListReservePairs(address reserve, ERC20 src, ERC20 dest, bool add);

    /// @notice can be called only by admin
    /// @dev allow or prevent a specific reserve to trade a pair of tokens
    /// @param reserve The reserve address.
    /// @param token token address
    /// @param ethToToken will it support ether to token trade
    /// @param tokenToEth will it support token to ether trade
    /// @param add If true then list this pair, otherwise unlist it.
    function listPairForReserve(address reserve, ERC20 token, bool ethToToken, bool tokenToEth, bool add)
        public onlyAdmin
    {
        require(isReserve[reserve]);

        if (ethToToken) {
            listPairs(reserve, token, false, add);

            ListReservePairs(reserve, ETH_TOKEN_ADDRESS, token, add);
        }

        if (tokenToEth) {
            listPairs(reserve, token, true, add);
            if (add) {
                token.approve(reserve, 2**255); // approve infinity
            } else {
                token.approve(reserve, 0);
            }

            ListReservePairs(reserve, token, ETH_TOKEN_ADDRESS, add);
        }

        setDecimals(token);
    }

    function setWhiteList(WhiteListInterface whiteList) public onlyAdmin {
        require(whiteList != address(0));
        whiteListContract = whiteList;
    }

    function setExpectedRate(ExpectedRateInterface expectedRate) public onlyAdmin {
        require(expectedRate != address(0));
        expectedRateContract = expectedRate;
    }

    function setFeeBurner(FeeBurnerInterface feeBurner) public onlyAdmin {
        require(feeBurner != address(0));
        feeBurnerContract = feeBurner;
    }

    function setParams(
        uint                  _maxGasPrice,
        uint                  _negligibleRateDiff
    )
        public
        onlyAdmin
    {
        require(_negligibleRateDiff <= 100 * 100); // at most 100%

        maxGasPriceValue = _maxGasPrice;
        negligibleRateDiff = _negligibleRateDiff;
    }

    function setEnable(bool _enable) public onlyAdmin {
        if (_enable) {
            require(whiteListContract != address(0));
            require(feeBurnerContract != address(0));
            require(expectedRateContract != address(0));
            require(kyberNetworkProxyContract != address(0));
        }
        isEnabled = _enable;
    }

    function setInfo(bytes32 field, uint value) public onlyOperator {
        infoFields[field] = value;
    }

    event KyberProxySet(address proxy, address sender);

    function setKyberProxy(address networkProxy) public onlyAdmin {
        require(networkProxy != address(0));
        kyberNetworkProxyContract = networkProxy;
        KyberProxySet(kyberNetworkProxyContract, msg.sender);
    }

    /// @dev returns number of reserves
    /// @return number of reserves
    function getNumReserves() public view returns(uint) {
        return reserves.length;
    }

    /// @notice should be called off chain with as much gas as needed
    /// @dev get an array of all reserves
    /// @return An array of all reserves
    function getReserves() public view returns(KyberReserveInterface[]) {
        return reserves;
    }

    function maxGasPrice() public view returns(uint) {
        return maxGasPriceValue;
    }

    function getExpectedRate(ERC20 src, ERC20 dest, uint srcQty)
        public view
        returns(uint expectedRate, uint slippageRate)
    {
        require(expectedRateContract != address(0));
        return expectedRateContract.getExpectedRate(src, dest, srcQty);
    }

    function getUserCapInWei(address user) public view returns(uint) {
        return whiteListContract.getUserCapInWei(user);
    }

    function getUserCapInTokenWei(address user, ERC20 token) public view returns(uint) {
        //future feature
        user;
        token;
        require(false);
    }

    struct BestRateResult {
        uint rate;
        address reserve1;
        address reserve2;
        uint weiAmount;
        uint rateSrcToEth;
        uint rateEthToDest;
        uint destAmount;
    }

    /// @notice use token address ETH_TOKEN_ADDRESS for ether
    /// @dev best conversion rate for a pair of tokens, if number of reserves have small differences. randomize
    /// @param src Src token
    /// @param dest Destination token
    /// @return obsolete - used to return best reserve index. not relevant anymore for this API.
    function findBestRate(ERC20 src, ERC20 dest, uint srcAmount) public view returns(uint obsolete, uint rate) {
        BestRateResult memory result = findBestRateTokenToToken(src, dest, srcAmount);
        return(0, result.rate);
    }

    function enabled() public view returns(bool) {
        return isEnabled;
    }

    function info(bytes32 field) public view returns(uint) {
        return infoFields[field];
    }

    /* solhint-disable code-complexity */
    // Not sure how solhing defines complexity. Anyway, from our point of view, below code follows the required
    //  algorithm to choose a reserve, it has been tested, reviewed and found to be clear enough.
    //@dev this function always src or dest are ether. can't do token to token
    function searchBestRate(ERC20 src, ERC20 dest, uint srcAmount) public view returns(address, uint) {
        uint bestRate = 0;
        uint bestReserve = 0;
        uint numRelevantReserves = 0;

        //return 1 for ether to ether
        if (src == dest) return (reserves[bestReserve], PRECISION);

        address[] memory reserveArr;

        if (src == ETH_TOKEN_ADDRESS) {
            reserveArr = reservesPerTokenDest[dest];
        } else {
            reserveArr = reservesPerTokenSrc[src];
        }

        if (reserveArr.length == 0) return (reserves[bestReserve], bestRate);

        uint[] memory rates = new uint[](reserveArr.length);
        uint[] memory reserveCandidates = new uint[](reserveArr.length);

        for (uint i = 0; i < reserveArr.length; i++) {
            //list all reserves that have this token.
            rates[i] = (KyberReserveInterface(reserveArr[i])).getConversionRate(src, dest, srcAmount, block.number);

            if (rates[i] > bestRate) {
                //best rate is highest rate
                bestRate = rates[i];
            }
        }

        if (bestRate > 0) {
            uint random = 0;
            uint smallestRelevantRate = (bestRate * 10000) / (10000 + negligibleRateDiff);

            for (i = 0; i < reserveArr.length; i++) {
                if (rates[i] >= smallestRelevantRate) {
                    reserveCandidates[numRelevantReserves++] = i;
                }
            }

            if (numRelevantReserves > 1) {
                //when encountering small rate diff from bestRate. draw from relevant reserves
                random = uint(block.blockhash(block.number-1)) % numRelevantReserves;
            }

            bestReserve = reserveCandidates[random];
            bestRate = rates[bestReserve];
        }

        return (reserveArr[bestReserve], bestRate);
    }
    /* solhint-enable code-complexity */

    function findBestRateTokenToToken(ERC20 src, ERC20 dest, uint srcAmount) internal view
        returns(BestRateResult result)
    {
        (result.reserve1, result.rateSrcToEth) = searchBestRate(src, ETH_TOKEN_ADDRESS, srcAmount);
        result.weiAmount = calcDestAmount(src, ETH_TOKEN_ADDRESS, srcAmount, result.rateSrcToEth);

        (result.reserve2, result.rateEthToDest) = searchBestRate(ETH_TOKEN_ADDRESS, dest, result.weiAmount);
        result.destAmount = calcDestAmount(ETH_TOKEN_ADDRESS, dest, result.weiAmount, result.rateEthToDest);

        result.rate = calcRateFromQty(srcAmount, result.destAmount, getDecimals(src), getDecimals(dest));
    }

    function listPairs(address reserve, ERC20 token, bool isTokenToEth, bool add) internal {
        uint i;
        address[] storage reserveArr = reservesPerTokenDest[token];

        if (isTokenToEth) {
            reserveArr = reservesPerTokenSrc[token];
        }

        for (i = 0; i < reserveArr.length; i++) {
            if (reserve == reserveArr[i]) {
                if (add) {
                    break; //already added
                } else {
                    //remove
                    reserveArr[i] = reserveArr[reserveArr.length - 1];
                    reserveArr.length--;
                }
            }
        }

        if (add && i == reserveArr.length) {
            //if reserve wasn't found add it
            reserveArr.push(reserve);
        }
    }

    event KyberTrade(address srcAddress, ERC20 srcToken, uint srcAmount, address destAddress, ERC20 destToken,
        uint destAmount);
    /* solhint-disable function-max-lines */
    // Most of the lins here are functions calls spread over multiple lines. We find this function readable enough
    //  and keep its size as is.
    /// @notice use token address ETH_TOKEN_ADDRESS for ether
    /// @dev trade api for kyber network.
    /// @param tradeInput structure of trade inputs
    function trade(TradeInput tradeInput) internal returns(uint) {
        require(isEnabled);
        require(tx.gasprice <= maxGasPriceValue);
        require(validateTradeInput(tradeInput.src, tradeInput.srcAmount, tradeInput.dest, tradeInput.destAddress));

        BestRateResult memory rateResult =
        findBestRateTokenToToken(tradeInput.src, tradeInput.dest, tradeInput.srcAmount);

        require(rateResult.rate > 0);
        require(rateResult.rate < MAX_RATE);
        require(rateResult.rate >= tradeInput.minConversionRate);

        uint actualDestAmount;
        uint weiAmount;
        uint actualSrcAmount;

        (actualSrcAmount, weiAmount, actualDestAmount) = calcActualAmounts(tradeInput.src,
            tradeInput.dest,
            tradeInput.srcAmount,
            tradeInput.maxDestAmount,
            rateResult);

        if (actualSrcAmount < tradeInput.srcAmount) {
            //if there is "change" send back to trader
            if (tradeInput.src == ETH_TOKEN_ADDRESS) {
                tradeInput.trader.transfer(tradeInput.srcAmount - actualSrcAmount);
            } else {
                tradeInput.src.transfer(tradeInput.trader, (tradeInput.srcAmount - actualSrcAmount));
            }
        }

        // verify trade size is smaller than user cap
        require(weiAmount <= getUserCapInWei(tradeInput.trader));

        //do the trade
        //src to ETH
        require(doReserveTrade(
                tradeInput.src,
                actualSrcAmount,
                ETH_TOKEN_ADDRESS,
                this,
                weiAmount,
                KyberReserveInterface(rateResult.reserve1),
                rateResult.rateSrcToEth,
                true));

        //Eth to dest
        require(doReserveTrade(
                ETH_TOKEN_ADDRESS,
                weiAmount,
                tradeInput.dest,
                tradeInput.destAddress,
                actualDestAmount,
                KyberReserveInterface(rateResult.reserve2),
                rateResult.rateEthToDest,
                true));

        //when src is ether, reserve1 is doing a "fake" trade. (ether to ether) - don't burn.
        //when dest is ether, reserve2 is doing a "fake" trade. (ether to ether) - don't burn.
        if (tradeInput.src != ETH_TOKEN_ADDRESS)
            require(feeBurnerContract.handleFees(weiAmount, rateResult.reserve1, tradeInput.walletId));
        if (tradeInput.dest != ETH_TOKEN_ADDRESS)
            require(feeBurnerContract.handleFees(weiAmount, rateResult.reserve2, tradeInput.walletId));

        KyberTrade(tradeInput.trader, tradeInput.src, actualSrcAmount, tradeInput.destAddress, tradeInput.dest,
            actualDestAmount);

        return actualDestAmount;
    }
    /* solhint-enable function-max-lines */

    function calcActualAmounts (ERC20 src, ERC20 dest, uint srcAmount, uint maxDestAmount, BestRateResult rateResult)
        internal view returns(uint actualSrcAmount, uint weiAmount, uint actualDestAmount)
    {
        if (rateResult.destAmount > maxDestAmount) {
            actualDestAmount = maxDestAmount;
            weiAmount = calcSrcAmount(ETH_TOKEN_ADDRESS, dest, actualDestAmount, rateResult.rateEthToDest);
            actualSrcAmount = calcSrcAmount(src, ETH_TOKEN_ADDRESS, weiAmount, rateResult.rateSrcToEth);
            require(actualSrcAmount <= srcAmount);
        } else {
            actualDestAmount = rateResult.destAmount;
            actualSrcAmount = srcAmount;
            weiAmount = rateResult.weiAmount;
        }
    }

    /// @notice use token address ETH_TOKEN_ADDRESS for ether
    /// @dev do one trade with a reserve
    /// @param src Src token
    /// @param amount amount of src tokens
    /// @param dest   Destination token
    /// @param destAddress Address to send tokens to
    /// @param reserve Reserve to use
    /// @param validate If true, additional validations are applicable
    /// @return true if trade is successful
    function doReserveTrade(
        ERC20 src,
        uint amount,
        ERC20 dest,
        address destAddress,
        uint expectedDestAmount,
        KyberReserveInterface reserve,
        uint conversionRate,
        bool validate
    )
        internal
        returns(bool)
    {
        uint callValue = 0;

        if (src == dest) {
            //this is for a "fake" trade when both src and dest are ethers.
            if (destAddress != (address(this)))
                destAddress.transfer(amount);
            return true;
        }

        if (src == ETH_TOKEN_ADDRESS) {
            callValue = amount;
        }

        // reserve sends tokens/eth to network. network sends it to destination
        require(reserve.trade.value(callValue)(src, amount, dest, this, conversionRate, validate));

        if (destAddress != address(this)) {
            //for token to token dest address is network. and Ether / token already here...
            if (dest == ETH_TOKEN_ADDRESS) {
                destAddress.transfer(expectedDestAmount);
            } else {
                require(dest.transfer(destAddress, expectedDestAmount));
            }
        }

        return true;
    }

    /// @notice use token address ETH_TOKEN_ADDRESS for ether
    /// @dev checks that user sent ether/tokens to contract before trade
    /// @param src Src token
    /// @param srcAmount amount of src tokens
    /// @return true if tradeInput is valid
    function validateTradeInput(ERC20 src, uint srcAmount, ERC20 dest, address destAddress)
        internal
        view
        returns(bool)
    {
        require(srcAmount <= MAX_QTY);
        require(srcAmount != 0);
        require(destAddress != address(0));
        require(src != dest);

        if (src == ETH_TOKEN_ADDRESS) {
            require(msg.value == srcAmount);
        } else {
            require(msg.value == 0);
            //funds should have been moved to this contract already.
            require(src.balanceOf(this) >= srcAmount);
        }

        return true;
    }
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"alerter","type":"address"}],"name":"removeAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"trader","type":"address"},{"name":"src","type":"address"},{"name":"srcAmount","type":"uint256"},{"name":"dest","type":"address"},{"name":"destAddress","type":"address"},{"name":"maxDestAmount","type":"uint256"},{"name":"minConversionRate","type":"uint256"},{"name":"walletId","type":"address"},{"name":"hint","type":"bytes"}],"name":"tradeWithHint","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getReserves","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"infoFields","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"feeBurner","type":"address"}],"name":"setFeeBurner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"enabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOperators","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"reservesPerTokenSrc","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"whiteList","type":"address"}],"name":"setWhiteList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"sendTo","type":"address"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxGasPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAlerter","type":"address"}],"name":"addAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"negligibleRateDiff","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeBurnerContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"expectedRate","type":"address"}],"name":"setExpectedRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"expectedRateContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whiteListContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"field","type":"bytes32"},{"name":"value","type":"uint256"}],"name":"setInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"getUserCapInWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"transferAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_enable","type":"bool"}],"name":"setEnable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kyberNetworkProxyContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isReserve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"transferAdminQuickly","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAlerters","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"srcQty","type":"uint256"}],"name":"getExpectedRate","outputs":[{"name":"expectedRate","type":"uint256"},{"name":"slippageRate","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"reserves","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"token","type":"address"}],"name":"getUserCapInTokenWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"reservesPerTokenDest","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOperator","type":"address"}],"name":"addOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"reserve","type":"address"},{"name":"add","type":"bool"}],"name":"addReserve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"srcAmount","type":"uint256"}],"name":"searchBestRate","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxGasPriceValue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"field","type":"bytes32"}],"name":"info","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"srcAmount","type":"uint256"}],"name":"findBestRate","outputs":[{"name":"obsolete","type":"uint256"},{"name":"rate","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_maxGasPrice","type":"uint256"},{"name":"_negligibleRateDiff","type":"uint256"}],"name":"setParams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"networkProxy","type":"address"}],"name":"setKyberProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"sendTo","type":"address"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getNumReserves","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"},{"name":"user","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"reserve","type":"address"},{"name":"token","type":"address"},{"name":"ethToToken","type":"bool"},{"name":"tokenToEth","type":"bool"},{"name":"add","type":"bool"}],"name":"listPairForReserve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_admin","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"EtherReceival","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"reserve","type":"address"},{"indexed":false,"name":"add","type":"bool"}],"name":"AddReserveToNetwork","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"reserve","type":"address"},{"indexed":false,"name":"src","type":"address"},{"indexed":false,"name":"dest","type":"address"},{"indexed":false,"name":"add","type":"bool"}],"name":"ListReservePairs","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proxy","type":"address"},{"indexed":false,"name":"sender","type":"address"}],"name":"KyberProxySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"srcAddress","type":"address"},{"indexed":false,"name":"srcToken","type":"address"},{"indexed":false,"name":"srcAmount","type":"uint256"},{"indexed":false,"name":"destAddress","type":"address"},{"indexed":false,"name":"destToken","type":"address"},{"indexed":false,"name":"destAmount","type":"uint256"}],"name":"KyberTrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"sendTo","type":"address"}],"name":"TokenWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"sendTo","type":"address"}],"name":"EtherWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"pendingAdmin","type":"address"}],"name":"TransferAdminPending","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAdmin","type":"address"},{"indexed":false,"name":"previousAdmin","type":"address"}],"name":"AdminClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAlerter","type":"address"},{"indexed":false,"name":"isAdd","type":"bool"}],"name":"AlerterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOperator","type":"address"},{"indexed":false,"name":"isAdd","type":"bool"}],"name":"OperatorAdded","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052600a600755640ba43b7400600e55600f805460ff19169055341561002757600080fd5b6040516020806130c98339810160405280805160008054600160a060020a03191633600160a060020a039081169190911790915590925082161515905061006d57600080fd5b60008054600160a060020a03909216600160a060020a031990921691909117905561302c8061009d6000396000f3006060604052600436106102165763ffffffff60e060020a60003504166301a12fd3811461027c578063088322ef1461029d5780630902f1ac1461032d5780631610b59b146103935780631a79464e146103a9578063238dafe0146103c857806326782247146103ef57806327a099d81461041e5780632ab8fc2d1461043157806339e899ee146104535780633ccdbb28146104725780633de39c111461049b578063408ee7fe146104ae5780634cef5a5c146104cd578063579425b7146104e05780635d270cdc146104f35780635dada964146105125780635ed5ea28146105255780635f65d703146105385780636432679f146105515780636aa633b61461057057806375829def146105835780637726bed3146105a257806377f50f97146105ba578063785250da146105cd5780637a2b0587146105e05780637acc8678146105ff5780637c423f541461061e578063809a9e55146106315780638334278d146106715780638eaaeecf14610687578063937e909b146106ac5780639870d7fe146106ce578063a0d7bb1b146106ed578063ab127a0c14610711578063ac8a584a1461075b578063b2d111f61461077a578063b64a097e1461078d578063b8388aca146107a3578063c0324c77146107cb578063c6c3f3f9146107e4578063ce56c45414610803578063cfff25bb14610825578063d4fac45d14610838578063e02584bf1461085d578063f851a44014610891575b600160a060020a03331660009081526009602052604090205460ff16151561023d57600080fd5b33600160a060020a03167f75f33ed68675112c77094e7c5b073890598be1d23e27cd7f6907b4a7d98ac6193460405190815260200160405180910390a2005b341561028757600080fd5b61029b600160a060020a03600435166108a4565b005b61031b600160a060020a0360048035821691602480358216926044359260643581169260843582169260a4359260c4359260e4359091169190610124906101043590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610a1495505050505050565b60405190815260200160405180910390f35b341561033857600080fd5b610340610aa6565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561037f578082015183820152602001610367565b505050509050019250505060405180910390f35b341561039e57600080fd5b61031b600435610b0f565b34156103b457600080fd5b61029b600160a060020a0360043516610b21565b34156103d357600080fd5b6103db610b73565b604051901515815260200160405180910390f35b34156103fa57600080fd5b610402610b7c565b604051600160a060020a03909116815260200160405180910390f35b341561042957600080fd5b610340610b8b565b341561043c57600080fd5b610402600160a060020a0360043516602435610bf1565b341561045e57600080fd5b61029b600160a060020a0360043516610c28565b341561047d57600080fd5b61029b600160a060020a036004358116906024359060443516610c7a565b34156104a657600080fd5b61031b610d71565b34156104b957600080fd5b61029b600160a060020a0360043516610d77565b34156104d857600080fd5b61031b610e73565b34156104eb57600080fd5b610402610e79565b34156104fe57600080fd5b61029b600160a060020a0360043516610e88565b341561051d57600080fd5b610402610eda565b341561053057600080fd5b610402610ee9565b341561054357600080fd5b61029b600435602435610ef8565b341561055c57600080fd5b61031b600160a060020a0360043516610f31565b341561057b57600080fd5b6103db610fac565b341561058e57600080fd5b61029b600160a060020a0360043516610fb5565b34156105ad57600080fd5b61029b6004351515611050565b34156105c557600080fd5b61029b6110e0565b34156105d857600080fd5b61040261117a565b34156105eb57600080fd5b6103db600160a060020a0360043516611189565b341561060a57600080fd5b61029b600160a060020a036004351661119e565b341561062957600080fd5b610340611280565b341561063c57600080fd5b610659600160a060020a03600435811690602435166044356112e6565b60405191825260208201526040908101905180910390f35b341561067c57600080fd5b61040260043561139a565b341561069257600080fd5b61031b600160a060020a03600435811690602435166113c2565b34156106b757600080fd5b610402600160a060020a03600435166024356113ce565b34156106d957600080fd5b61029b600160a060020a03600435166113e9565b34156106f857600080fd5b61029b600160a060020a036004351660243515156114b9565b341561071c57600080fd5b610739600160a060020a03600435811690602435166044356116d1565b604051600160a060020a03909216825260208201526040908101905180910390f35b341561076657600080fd5b61029b600160a060020a0360043516611ae8565b341561078557600080fd5b61031b611c54565b341561079857600080fd5b61031b600435611c5a565b34156107ae57600080fd5b610659600160a060020a0360043581169060243516604435611c6c565b34156107d657600080fd5b61029b600435602435611c95565b34156107ef57600080fd5b61029b600160a060020a0360043516611cca565b341561080e57600080fd5b61029b600435600160a060020a0360243516611d65565b341561083057600080fd5b61031b611df8565b341561084357600080fd5b61031b600160a060020a0360043581169060243516611dfe565b341561086857600080fd5b61029b600160a060020a0360043581169060243516604435151560643515156084351515611ea9565b341561089c57600080fd5b610402612110565b6000805433600160a060020a039081169116146108c057600080fd5b600160a060020a03821660009081526003602052604090205460ff1615156108e757600080fd5b50600160a060020a0381166000908152600360205260408120805460ff191690555b600554811015610a105781600160a060020a031660058281548110151561092c57fe5b600091825260209091200154600160a060020a03161415610a085760058054600019810190811061095957fe5b60009182526020909120015460058054600160a060020a03909216918390811061097f57fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560058054906109bb906000198301612ee9565b507f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762826000604051600160a060020a039092168252151560208201526040908101905180910390a1610a10565b600101610909565b5050565b6000610a1e612f0d565b825115610a2a57600080fd5b600d5433600160a060020a03908116911614610a4557600080fd5b600160a060020a03808c1682528a81166020830152604082018a90528881166060830152878116608083015260a0820187905260c08201869052841660e08201526101008101839052610a978161211f565b9b9a5050505050505050505050565b610aae612f60565b6008805480602002602001604051908101604052809291908181526020018280548015610b0457602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610ae6575b505050505090505b90565b60106020526000908152604090205481565b60005433600160a060020a03908116911614610b3c57600080fd5b600160a060020a0381161515610b5157600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b600f5460ff1690565b600154600160a060020a031681565b610b93612f60565b6004805480602002602001604051908101604052809291908181526020018280548015610b0457602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610ae6575050505050905090565b601160205281600052604060002081815481101515610c0c57fe5b600091825260209091200154600160a060020a03169150829050565b60005433600160a060020a03908116911614610c4357600080fd5b600160a060020a0381161515610c5857600080fd5b600a8054600160a060020a031916600160a060020a0392909216919091179055565b60005433600160a060020a03908116911614610c9557600080fd5b82600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610cf257600080fd5b6102c65a03f11515610d0357600080fd5b505050604051805190501515610d1857600080fd5b7f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e6838383604051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a1505050565b600e5490565b60005433600160a060020a03908116911614610d9257600080fd5b600160a060020a03811660009081526003602052604090205460ff1615610db857600080fd5b60055460329010610dc857600080fd5b7f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600360205260409020805460ff191660019081179091556005805490918101610e478382612ee9565b5060009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055565b60075481565b600c54600160a060020a031681565b60005433600160a060020a03908116911614610ea357600080fd5b600160a060020a0381161515610eb857600080fd5b600b8054600160a060020a031916600160a060020a0392909216919091179055565b600b54600160a060020a031681565b600a54600160a060020a031681565b600160a060020a03331660009081526002602052604090205460ff161515610f1f57600080fd5b60009182526010602052604090912055565b600a54600090600160a060020a0316636432679f83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610f8c57600080fd5b6102c65a03f11515610f9d57600080fd5b50505060405180519392505050565b600f5460ff1681565b60005433600160a060020a03908116911614610fd057600080fd5b600160a060020a0381161515610fe557600080fd5b6001547f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4090600160a060020a0316604051600160a060020a03909116815260200160405180910390a160018054600160a060020a031916600160a060020a0392909216919091179055565b60005433600160a060020a0390811691161461106b57600080fd5b80156110cd57600a54600160a060020a0316151561108857600080fd5b600c54600160a060020a0316151561109f57600080fd5b600b54600160a060020a031615156110b657600080fd5b600d54600160a060020a031615156110cd57600080fd5b600f805460ff1916911515919091179055565b60015433600160a060020a039081169116146110fb57600080fd5b6001546000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed91600160a060020a039081169116604051600160a060020a039283168152911660208201526040908101905180910390a16001805460008054600160a060020a0319908116600160a060020a03841617909155169055565b600d54600160a060020a031681565b60096020526000908152604090205460ff1681565b60005433600160a060020a039081169116146111b957600080fd5b600160a060020a03811615156111ce57600080fd5b7f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4081604051600160a060020a03909116815260200160405180910390a16000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed908290600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a160008054600160a060020a031916600160a060020a0392909216919091179055565b611288612f60565b6005805480602002602001604051908101604052809291908181526020018280548015610b0457602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610ae6575050505050905090565b600b546000908190600160a060020a0316151561130257600080fd5b600b54600160a060020a031663809a9e5586868660006040516040015260405160e060020a63ffffffff8616028152600160a060020a03938416600482015291909216602482015260448101919091526064016040805180830381600087803b151561136d57600080fd5b6102c65a03f1151561137e57600080fd5b5050506040518051906020018051905091509150935093915050565b60088054829081106113a857fe5b600091825260209091200154600160a060020a0316905081565b60008080fd5b92915050565b601260205281600052604060002081815481101515610c0c57fe5b60005433600160a060020a0390811691161461140457600080fd5b600160a060020a03811660009081526002602052604090205460ff161561142a57600080fd5b6004546032901061143a57600080fd5b7f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600260205260409020805460ff191660019081179091556004805490918101610e478382612ee9565b6000805433600160a060020a039081169116146114d557600080fd5b81156115a357600160a060020a03831660009081526009602052604090205460ff161561150157600080fd5b60088054600181016115138382612ee9565b5060009182526020808320919091018054600160a060020a031916600160a060020a038716908117909155825260099052604090819020805460ff191660019081179091557f7752182b29e356eb432239f464340b4481e1b0bfad97f06aa2ff8cdc746114499185919051600160a060020a039092168252151560208201526040908101905180910390a16116cc565b50600160a060020a0382166000908152600960205260408120805460ff191690555b6008548110156116cc5782600160a060020a03166008828154811015156115e857fe5b600091825260209091200154600160a060020a031614156116c45760088054600019810190811061161557fe5b60009182526020909120015460088054600160a060020a03909216918390811061163b57fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790556008805490611677906000198301612ee9565b507f7752182b29e356eb432239f464340b4481e1b0bfad97f06aa2ff8cdc74611449836000604051600160a060020a039092168252151560208201526040908101905180910390a16116cc565b6001016115c5565b505050565b60008060008060006116e1612f60565b6116e9612f60565b6116f1612f60565b600080600080985060009750600096508c600160a060020a03168e600160a060020a0316141561175057600880548990811061172957fe5b600091825260209091200154600160a060020a03169a50670de0b6b3a76400009950611ad7565b600160a060020a038e16600080516020612fe183398151915214156117f457601260008e600160a060020a0316600160a060020a031681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156117e857602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116117ca575b50505050509550611875565b601160008f600160a060020a0316600160a060020a0316815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561186d57602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161184f575b505050505095505b855115156118ac57600880548990811061188b57fe5b600091825260209091200154600160a060020a03169a509798508897611ad7565b85516040518059106118bb5750595b9080825280602002602001820160405250945085516040518059106118dd5750595b90808252806020026020018201604052509350600092505b85518310156119f55785838151811061190a57fe5b90602001906020020151600160a060020a0316637cd442728f8f8f4360006040516020015260405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201526064810191909152608401602060405180830381600087803b151561198357600080fd5b6102c65a03f1151561199457600080fd5b505050604051805190508584815181106119aa57fe5b60209081029091010152888584815181106119c157fe5b9060200190602002015111156119ea578483815181106119dd57fe5b9060200190602002015198505b6001909201916118f5565b6000891115611abb5760009150600754612710018961271002811515611a1757fe5b049050600092505b8551831015611a6d5780858481518110611a3557fe5b9060200190602002015110611a625782848880600101995081518110611a5757fe5b602090810290910101525b600190920191611a1f565b6001871115611a8a5786600019430140811515611a8657fe5b0691505b838281518110611a9657fe5b906020019060200201519750848881518110611aae57fe5b9060200190602002015198505b858881518110611ac757fe5b90602001906020020151899a509a505b505050505050505050935093915050565b6000805433600160a060020a03908116911614611b0457600080fd5b600160a060020a03821660009081526002602052604090205460ff161515611b2b57600080fd5b50600160a060020a0381166000908152600260205260408120805460ff191690555b600454811015610a105781600160a060020a0316600482815481101515611b7057fe5b600091825260209091200154600160a060020a03161415611c4c57600480546000198101908110611b9d57fe5b60009182526020909120015460048054600160a060020a039092169183908110611bc357fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600480546000190190611bff9082612ee9565b507f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b826000604051600160a060020a039092168252151560208201526040908101905180910390a1610a10565b600101611b4d565b600e5481565b60009081526010602052604090205490565b600080611c77612f72565b611c82868686612555565b9050600081519097909650945050505050565b60005433600160a060020a03908116911614611cb057600080fd5b612710811115611cbf57600080fd5b600e91909155600755565b60005433600160a060020a03908116911614611ce557600080fd5b600160a060020a0381161515611cfa57600080fd5b600d8054600160a060020a031916600160a060020a0383811691909117918290557ffdd305502f7797ff3390aa08825f7f6aec92c27a94e103bfaf45452b4cf1d4f4911633604051600160a060020a039283168152911660208201526040908101905180910390a150565b60005433600160a060020a03908116911614611d8057600080fd5b600160a060020a03811682156108fc0283604051600060405180830381858888f193505050501515611db157600080fd5b7fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de8282604051918252600160a060020a031660208201526040908101905180910390a15050565b60085490565b6000600160a060020a038316600080516020612fe18339815191521415611e305750600160a060020a038116316113c8565b82600160a060020a03166370a082318360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611e8757600080fd5b6102c65a03f11515611e9857600080fd5b5050506040518051905090506113c8565b60005433600160a060020a03908116911614611ec457600080fd5b600160a060020a03851660009081526009602052604090205460ff161515611eeb57600080fd5b8215611f6757611efe8585600084612631565b7fadb5a4f14d89b3a5ffb3900ac1ea4574d991f93887f6199fabaf25393644e01c85600080516020612fe18339815191528684604051600160a060020a039485168152928416602084015292166040808301919091529115156060820152608001905180910390a15b811561210057611f7a8585600184612631565b801561201e5783600160a060020a031663095ea7b3867f800000000000000000000000000000000000000000000000000000000000000060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611ffd57600080fd5b6102c65a03f1151561200e57600080fd5b5050506040518051905050612097565b83600160a060020a031663095ea7b3866000806040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561207b57600080fd5b6102c65a03f1151561208c57600080fd5b505050604051805150505b7fadb5a4f14d89b3a5ffb3900ac1ea4574d991f93887f6199fabaf25393644e01c8585600080516020612fe183398151915284604051600160a060020a039485168152928416602084015292166040808301919091529115156060820152608001905180910390a15b6121098461277f565b5050505050565b600054600160a060020a031681565b6000612129612f72565b600f546000908190819060ff16151561214157600080fd5b600e543a111561215057600080fd5b61216c866020015187604001518860600151896080015161283c565b151561217757600080fd5b61218e866020015187606001518860400151612555565b9350600084511161219e57600080fd5b69d3c21bcecceda10000008451106121b557600080fd5b8560c00151845110156121c757600080fd5b6121e48660200151876060015188604001518960a0015188612958565b94509250905060408601518110156122dc57600080516020612fe18339815191526020870151600160a060020a03161415612258578551600160a060020a03166108fc828860400151039081150290604051600060405180830381858888f19350505050151561225357600080fd5b6122dc565b8560200151600160a060020a031663a9059cbb87518389604001510360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156122c057600080fd5b6102c65a03f115156122d157600080fd5b505050604051805150505b6122e68651610f31565b8211156122f257600080fd5b61231d866020015182600080516020612fe1833981519152308689602001518a6080015160016129da565b151561232857600080fd5b612357600080516020612fe183398151915283886060015189608001518789604001518a60a0015160016129da565b151561236257600080fd5b600080516020612fe18339815191526020870151600160a060020a03161461241b57600c54600160a060020a031663fd062d3b8360208701518960e0015160006040516020015260405160e060020a63ffffffff86160281526004810193909352600160a060020a039182166024840152166044820152606401602060405180830381600087803b15156123f557600080fd5b6102c65a03f1151561240657600080fd5b50505060405180519050151561241b57600080fd5b600080516020612fe18339815191526060870151600160a060020a0316146124d457600c54600160a060020a031663fd062d3b8360408701518960e0015160006040516020015260405160e060020a63ffffffff86160281526004810193909352600160a060020a039182166024840152166044820152606401602060405180830381600087803b15156124ae57600080fd5b6102c65a03f115156124bf57600080fd5b5050506040518051905015156124d457600080fd5b7f1c8399ecc5c956b9cb18c820248b10b634cca4af308755e07cd467655e8ec3c7865187602001518389608001518a6060015188604051600160a060020a03968716815294861660208601526040808601949094529185166060850152909316608083015260a082019290925260c001905180910390a15090949350505050565b61255d612f72565b61257684600080516020612fe1833981519152846116d1565b60808301908152600160a060020a0390911660208301526125ab908590600080516020612fe183398151915290859051612c17565b606082019081526125ce90600080516020612fe1833981519152908590516116d1565b60a0830152600160a060020a03166040820152612603600080516020612fe18339815191528460608401518460a00151612c17565b60c082019081526126289083905161261a87612c3e565b61262387612c3e565b612cfc565b81529392505050565b600160a060020a038316600090815260126020526040812083156126695750600160a060020a03841660009081526011602052604090205b600091505b805482101561272d57808281548110151561268557fe5b600091825260209091200154600160a060020a03878116911614156127225782156126af5761272d565b8054819060001981019081106126c157fe5b6000918252602090912001548154600160a060020a03909116908290849081106126e757fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790558054612720826000198301612ee9565b505b60019091019061266e565b82801561273a5750805482145b156127775780548190600181016127518382612ee9565b5060009182526020909120018054600160a060020a031916600160a060020a0388161790555b505050505050565b600160a060020a038116600080516020612fe183398151915214156127bf57600160a060020a038116600090815260066020526040902060129055612839565b80600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561280557600080fd5b6102c65a03f1151561281657600080fd5b5050506040518051600160a060020a038316600090815260066020526040902055505b50565b60006b204fce5e3e2502611000000084111561285757600080fd5b83151561286357600080fd5b600160a060020a038216151561287857600080fd5b600160a060020a03858116908416141561289157600080fd5b600160a060020a038516600080516020612fe183398151915214156128c1573484146128bc57600080fd5b61294c565b34156128cc57600080fd5b8385600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561292457600080fd5b6102c65a03f1151561293557600080fd5b505050604051805190501015151561294c57600080fd5b5060015b949350505050565b6000806000848460c0015111156129bd575083612989600080516020612fe1833981519152888360a0880151612d97565b91506129a988600080516020612fe1833981519152848760800151612d97565b9250858311156129b857600080fd5b6129cf565b8360c001519050859250836060015191505b955095509592505050565b600080600160a060020a038a81169089161415612a465730600160a060020a031687600160a060020a0316141515612a3d57600160a060020a03871689156108fc028a604051600060405180830381858888f193505050501515612a3d57600080fd5b60019150612c0a565b600160a060020a038a16600080516020612fe18339815191521415612a685750875b84600160a060020a0316636cf69811828c8c8c308a8a60006040516020015260405160e060020a63ffffffff8a16028152600160a060020a0396871660048201526024810195909552928516604485015293166064830152608482019290925290151560a482015260c4016020604051808303818588803b1515612aeb57600080fd5b6125ee5a03f11515612afc57600080fd5b50505050604051805190501515612b1257600080fd5b30600160a060020a031687600160a060020a0316141515612c0557600160a060020a038816600080516020612fe18339815191521415612b8257600160a060020a03871686156108fc0287604051600060405180830381858888f193505050501515612b7d57600080fd5b612c05565b87600160a060020a031663a9059cbb888860006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515612bdf57600080fd5b6102c65a03f11515612bf057600080fd5b505050604051805190501515612c0557600080fd5b600191505b5098975050505050505050565b6000612c3583612c2687612c3e565b612c2f87612c3e565b85612db5565b95945050505050565b600080600160a060020a038316600080516020612fe18339815191521415612c695760129150612cf6565b50600160a060020a038216600090815260066020526040902054801515612cf25782600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612cd057600080fd5b6102c65a03f11515612ce157600080fd5b505050604051805190509150612cf6565b8091505b50919050565b60006b204fce5e3e25026110000000851115612d1757600080fd5b6b204fce5e3e25026110000000841115612d3057600080fd5b828210612d6b5760128383031115612d4757600080fd5b84838303600a0a02670de0b6b3a76400008502811515612d6357fe5b049050612950565b60128284031115612d7b57600080fd5b84828403600a0a670de0b6b3a7640000860202811515612d6357fe5b6000612c3583612da687612c3e565b612daf87612c3e565b85612e42565b60006b204fce5e3e25026110000000851115612dd057600080fd5b69d3c21bcecceda1000000821115612de757600080fd5b838310612e165760128484031115612dfe57600080fd5b670de0b6b3a7640000858302858503600a0a02612d63565b60128385031115612e2657600080fd5b828403600a0a670de0b6b3a764000002828602811515612d6357fe5b600080806b204fce5e3e25026110000000871115612e5f57600080fd5b69d3c21bcecceda1000000841115612e7657600080fd5b848610612ea75760128587031115612e8d57600080fd5b5050828403600a0a8502670de0b6b3a76400000282612ecd565b60128686031115612eb757600080fd5b5050670de0b6b3a76400008502848403600a0a83025b80600182840103811515612edd57fe5b04979650505050505050565b8154818355818115116116cc576000838152602090206116cc918101908301612fc2565b6101206040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e08201526101008101612f5b612f60565b905290565b60206040519081016040526000815290565b60e060405190810160405280600081526020016000600160a060020a031681526020016000600160a060020a03168152602001600081526020016000815260200160008152602001600081525090565b610b0c91905b80821115612fdc5760008155600101612fc8565b50905600000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeea165627a7a723058200ebb6394511d39240f4382d855a94d1ea997fa45b61ef594b2067d48904c0fe600290000000000000000000000007985405a348baa90c92164b86b383c8f43ad2d96

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

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007985405a348baa90c92164b86b383c8f43ad2d96


   Swarm Source:
bzzr://0ebb6394511d39240f4382d855a94d1ea997fa45b61ef594b2067d48904c0fe6

 

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