ETH Price: $2,820.05 (+0.77%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Send Eth Proport...144220082022-03-20 7:53:461053 days ago1647762826IN
0xeE52D732...0d6502E33
0 ETH0.0008156115.74477152
Send Eth Proport...144220012022-03-20 7:51:561053 days ago1647762716IN
0xeE52D732...0d6502E33
0 ETH0.0007912514.55723905
Send Eth Proport...144219882022-03-20 7:49:341053 days ago1647762574IN
0xeE52D732...0d6502E33
0 ETH0.0008806516.83346043
Send Eth Proport...144219682022-03-20 7:45:141053 days ago1647762314IN
0xeE52D732...0d6502E33
0 ETH0.0009322915.10175862
Send Eth Proport...144219302022-03-20 7:38:271053 days ago1647761907IN
0xeE52D732...0d6502E33
0 ETH0.0008245415.89612152
Send Eth Proport...144218992022-03-20 7:32:331053 days ago1647761553IN
0xeE52D732...0d6502E33
0 ETH0.0007834815.23598842
Transfer Token A...97894512020-04-02 1:04:461770 days ago1585789486IN
0xeE52D732...0d6502E33
0 ETH0.000223422.53000023
Transfer83403562019-08-13 5:36:572003 days ago1565674617IN
0xeE52D732...0d6502E33
0 ETH0.000158717.5415
Buy On Approve71136542019-01-23 11:44:302205 days ago1548243870IN
0xeE52D732...0d6502E33
0.3 ETH0.003894443
Buy On Approve71125222019-01-23 6:22:382205 days ago1548224558IN
0xeE52D732...0d6502E33
0.029698 ETH0.004671575.1
Buy On Approve71047942019-01-21 17:44:352206 days ago1548092675IN
0xeE52D732...0d6502E33
0.02 ETH0.01029743
Buy On Approve71038052019-01-21 12:56:202207 days ago1548075380IN
0xeE52D732...0d6502E33
0.009 ETH0.002259372.4
Buy On Approve70917972019-01-19 8:23:152209 days ago1547886195IN
0xeE52D732...0d6502E33
0.1 ETH0.006864422
Buy On Approve70863702019-01-18 9:14:292210 days ago1547802869IN
0xeE52D732...0d6502E33
0.01 ETH0.011670393.4
Buy On Approve70849752019-01-18 3:16:142210 days ago1547781374IN
0xeE52D732...0d6502E33
0.51 ETH0.006697161.7
Buy On Approve70848772019-01-18 2:54:572210 days ago1547780097IN
0xeE52D732...0d6502E33
0.01 ETH0.005835191.7
Buy On Approve70600092019-01-13 16:16:032214 days ago1547396163IN
0xeE52D732...0d6502E33
0.16374869 ETH0.002083845.5
Buy On Approve70546112019-01-12 17:03:242215 days ago1547312604IN
0xeE52D732...0d6502E33
0.78686 ETH0.004805991.4
Buy On Approve70496412019-01-11 19:35:362216 days ago1547235336IN
0xeE52D732...0d6502E33
0.0044 ETH0.000805791.9
Buy On Approve70464822019-01-11 5:58:312217 days ago1547186311IN
0xeE52D732...0d6502E33
0.40059656 ETH0.00146611.6
Buy On Approve70275832019-01-07 20:35:262220 days ago1546893326IN
0xeE52D732...0d6502E33
0.00064023 ETH0.000678561.6
Buy On Approve70247902019-01-07 8:51:112221 days ago1546851071IN
0xeE52D732...0d6502E33
0.1 ETH0.002198392.4
Buy On Approve70229252019-01-07 0:47:362221 days ago1546822056IN
0xeE52D732...0d6502E33
0.2 ETH0.004727011.2
Buy On Approve70229112019-01-07 0:44:472221 days ago1546821887IN
0xeE52D732...0d6502E33
0.2 ETH0.001687421.3
Buy On Approve70187542019-01-06 6:41:492222 days ago1546756909IN
0xeE52D732...0d6502E33
0.1 ETH0.001639761.8
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
71136542019-01-23 11:44:302205 days ago1548243870
0xeE52D732...0d6502E33
2 wei
71136542019-01-23 11:44:302205 days ago1548243870
0xeE52D732...0d6502E33
0.03070376 ETH
71136542019-01-23 11:44:302205 days ago1548243870
0xeE52D732...0d6502E33
0.09243815 ETH
71136542019-01-23 11:44:302205 days ago1548243870
0xeE52D732...0d6502E33
0.17685807 ETH
71125222019-01-23 6:22:382205 days ago1548224558
0xeE52D732...0d6502E33
1 wei
71125222019-01-23 6:22:382205 days ago1548224558
0xeE52D732...0d6502E33
0.01519104 ETH
71125222019-01-23 6:22:382205 days ago1548224558
0xeE52D732...0d6502E33
0.01450695 ETH
71047942019-01-21 17:44:352206 days ago1548092675
0xeE52D732...0d6502E33
7 wei
71047942019-01-21 17:44:352206 days ago1548092675
0xeE52D732...0d6502E33
0.00058519 ETH
71047942019-01-21 17:44:352206 days ago1548092675
0xeE52D732...0d6502E33
0.00057038 ETH
71047942019-01-21 17:44:352206 days ago1548092675
0xeE52D732...0d6502E33
0.00072484 ETH
71047942019-01-21 17:44:352206 days ago1548092675
0xeE52D732...0d6502E33
0.00158366 ETH
71047942019-01-21 17:44:352206 days ago1548092675
0xeE52D732...0d6502E33
0.0017426 ETH
71047942019-01-21 17:44:352206 days ago1548092675
0xeE52D732...0d6502E33
0.00154553 ETH
71047942019-01-21 17:44:352206 days ago1548092675
0xeE52D732...0d6502E33
0.00511548 ETH
71047942019-01-21 17:44:352206 days ago1548092675
0xeE52D732...0d6502E33
0.00160411 ETH
71047942019-01-21 17:44:352206 days ago1548092675
0xeE52D732...0d6502E33
0.00254181 ETH
71047942019-01-21 17:44:352206 days ago1548092675
0xeE52D732...0d6502E33
0.00398633 ETH
71038052019-01-21 12:56:202207 days ago1548075380
0xeE52D732...0d6502E33
1 wei
71038052019-01-21 12:56:202207 days ago1548075380
0xeE52D732...0d6502E33
0.00437786 ETH
71038052019-01-21 12:56:202207 days ago1548075380
0xeE52D732...0d6502E33
0.00462213 ETH
70917972019-01-19 8:23:152209 days ago1547886195
0xeE52D732...0d6502E33
6 wei
70917972019-01-19 8:23:152209 days ago1547886195
0xeE52D732...0d6502E33
0.0029227 ETH
70917972019-01-19 8:23:152209 days ago1547886195
0xeE52D732...0d6502E33
0.00294332 ETH
70917972019-01-19 8:23:152209 days ago1547886195
0xeE52D732...0d6502E33
0.00369255 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MultiBuyer

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

pragma solidity ^0.4.24;

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * See https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address _who) public view returns (uint256);
  function transfer(address _to, uint256 _value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address _owner, address _spender)
    public view returns (uint256);

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

  function approve(address _spender, uint256 _value) public returns (bool);
  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}

// File: contracts/interface/IBasicMultiToken.sol

contract IBasicMultiToken is ERC20 {
    event Bundle(address indexed who, address indexed beneficiary, uint256 value);
    event Unbundle(address indexed who, address indexed beneficiary, uint256 value);

    ERC20[] public tokens;

    function tokensCount() public view returns(uint256);

    function bundleFirstTokens(address _beneficiary, uint256 _amount, uint256[] _tokenAmounts) public;
    function bundle(address _beneficiary, uint256 _amount) public;

    function unbundle(address _beneficiary, uint256 _value) public;
    function unbundleSome(address _beneficiary, uint256 _value, ERC20[] _tokens) public;

    function disableBundling() public;
    function enableBundling() public;
}

// File: contracts/interface/IMultiToken.sol

contract IMultiToken is IBasicMultiToken {
    event Update();
    event Change(address indexed _fromToken, address indexed _toToken, address indexed _changer, uint256 _amount, uint256 _return);

    mapping(address => uint256) public weights;

    function getReturn(address _fromToken, address _toToken, uint256 _amount) public view returns (uint256 returnAmount);
    function change(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn) public returns (uint256 returnAmount);

    function disableChanges() public;
}

// File: openzeppelin-solidity/contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
    // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (_a == 0) {
      return 0;
    }

    c = _a * _b;
    assert(c / _a == _b);
    return c;
  }

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

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

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

// File: contracts/ext/CheckedERC20.sol

library CheckedERC20 {
    using SafeMath for uint;

    function isContract(address addr) internal view returns(bool result) {
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            result := gt(extcodesize(addr), 0)
        }
    }

    function handleReturnBool() internal pure returns(bool result) {
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            switch returndatasize()
            case 0 { // not a std erc20
                result := 1
            }
            case 32 { // std erc20
                returndatacopy(0, 0, 32)
                result := mload(0)
            }
            default { // anything else, should revert for safety
                revert(0, 0)
            }
        }
    }

    function handleReturnBytes32() internal pure returns(bytes32 result) {
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            if eq(returndatasize(), 32) { // not a std erc20
                returndatacopy(0, 0, 32)
                result := mload(0)
            }
            if gt(returndatasize(), 32) { // std erc20
                returndatacopy(0, 64, 32)
                result := mload(0)
            }
            if lt(returndatasize(), 32) { // anything else, should revert for safety
                revert(0, 0)
            }
        }
    }

    function asmTransfer(address _token, address _to, uint256 _value) internal returns(bool) {
        require(isContract(_token));
        // solium-disable-next-line security/no-low-level-calls
        require(_token.call(bytes4(keccak256("transfer(address,uint256)")), _to, _value));
        return handleReturnBool();
    }

    function asmTransferFrom(address _token, address _from, address _to, uint256 _value) internal returns(bool) {
        require(isContract(_token));
        // solium-disable-next-line security/no-low-level-calls
        require(_token.call(bytes4(keccak256("transferFrom(address,address,uint256)")), _from, _to, _value));
        return handleReturnBool();
    }

    function asmApprove(address _token, address _spender, uint256 _value) internal returns(bool) {
        require(isContract(_token));
        // solium-disable-next-line security/no-low-level-calls
        require(_token.call(bytes4(keccak256("approve(address,uint256)")), _spender, _value));
        return handleReturnBool();
    }

    //

    function checkedTransfer(ERC20 _token, address _to, uint256 _value) internal {
        if (_value > 0) {
            uint256 balance = _token.balanceOf(this);
            asmTransfer(_token, _to, _value);
            require(_token.balanceOf(this) == balance.sub(_value), "checkedTransfer: Final balance didn't match");
        }
    }

    function checkedTransferFrom(ERC20 _token, address _from, address _to, uint256 _value) internal {
        if (_value > 0) {
            uint256 toBalance = _token.balanceOf(_to);
            asmTransferFrom(_token, _from, _to, _value);
            require(_token.balanceOf(_to) == toBalance.add(_value), "checkedTransfer: Final balance didn't match");
        }
    }

    //

    function asmName(address _token) internal view returns(bytes32) {
        require(isContract(_token));
        // solium-disable-next-line security/no-low-level-calls
        require(_token.call(bytes4(keccak256("name()"))));
        return handleReturnBytes32();
    }

    function asmSymbol(address _token) internal view returns(bytes32) {
        require(isContract(_token));
        // solium-disable-next-line security/no-low-level-calls
        require(_token.call(bytes4(keccak256("symbol()"))));
        return handleReturnBytes32();
    }
}

// File: openzeppelin-solidity/contracts/ownership/Ownable.sol

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


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


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() 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 relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @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 {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}

// File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
  function safeTransfer(
    ERC20Basic _token,
    address _to,
    uint256 _value
  )
    internal
  {
    require(_token.transfer(_to, _value));
  }

  function safeTransferFrom(
    ERC20 _token,
    address _from,
    address _to,
    uint256 _value
  )
    internal
  {
    require(_token.transferFrom(_from, _to, _value));
  }

  function safeApprove(
    ERC20 _token,
    address _spender,
    uint256 _value
  )
    internal
  {
    require(_token.approve(_spender, _value));
  }
}

// File: openzeppelin-solidity/contracts/ownership/CanReclaimToken.sol

/**
 * @title Contracts that should be able to recover tokens
 * @author SylTi
 * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner.
 * This will prevent any accidental loss of tokens.
 */
contract CanReclaimToken is Ownable {
  using SafeERC20 for ERC20Basic;

  /**
   * @dev Reclaim all ERC20Basic compatible tokens
   * @param _token ERC20Basic The address of the token contract
   */
  function reclaimToken(ERC20Basic _token) external onlyOwner {
    uint256 balance = _token.balanceOf(this);
    _token.safeTransfer(owner, balance);
  }

}

// File: contracts/registry/MultiChanger.sol

contract IEtherToken is ERC20 {
    function deposit() public payable;
    function withdraw(uint256 _amount) public;
}


contract IBancorNetwork {
    function convert(
        address[] _path,
        uint256 _amount,
        uint256 _minReturn
    ) 
        public
        payable
        returns(uint256);

    function claimAndConvert(
        address[] _path,
        uint256 _amount,
        uint256 _minReturn
    ) 
        public
        payable
        returns(uint256);
}


contract IKyberNetworkProxy {
    function trade(
        address src,
        uint srcAmount,
        address dest,
        address destAddress,
        uint maxDestAmount,
        uint minConversionRate,
        address walletId
    )
        public
        payable
        returns(uint);
}


contract MultiChanger is CanReclaimToken {
    using SafeMath for uint256;
    using CheckedERC20 for ERC20;

    // Source: https://github.com/gnosis/MultiSigWallet/blob/master/contracts/MultiSigWallet.sol
    // call has been separated into its own function in order to take advantage
    // of the Solidity's code generator to produce a loop that copies tx.data into memory.
    function externalCall(address destination, uint value, bytes data, uint dataOffset, uint dataLength) internal returns (bool result) {
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            let x := mload(0x40)   // "Allocate" memory for output (0x40 is where "free memory" pointer is stored by convention)
            let d := add(data, 32) // First 32 bytes are the padded length of data, so exclude that
            result := call(
                sub(gas, 34710),   // 34710 is the value that solidity is currently emitting
                                   // It includes callGas (700) + callVeryLow (3, to pay for SUB) + callValueTransferGas (9000) +
                                   // callNewAccountGas (25000, in case the destination address does not exist and needs creating)
                destination,
                value,
                add(d, dataOffset),
                dataLength,        // Size of the input (in bytes) - this is what fixes the padding problem
                x,
                0                  // Output is ignored, therefore the output size is zero
            )
        }
    }

    function change(
        bytes _callDatas,
        uint[] _starts // including 0 and LENGTH values
    )
        internal
    {
        for (uint i = 0; i < _starts.length - 1; i++) {
            require(externalCall(this, 0, _callDatas, _starts[i], _starts[i + 1] - _starts[i]));
        }
    }

    function sendEthValue(address _target, bytes _data, uint256 _value) external {
        // solium-disable-next-line security/no-call-value
        require(_target.call.value(_value)(_data));
    }

    function sendEthProportion(address _target, bytes _data, uint256 _mul, uint256 _div) external {
        uint256 value = address(this).balance.mul(_mul).div(_div);
        // solium-disable-next-line security/no-call-value
        require(_target.call.value(value)(_data));
    }

    function approveTokenAmount(address _target, bytes _data, ERC20 _fromToken, uint256 _amount) external {
        if (_fromToken.allowance(this, _target) != 0) {
            _fromToken.asmApprove(_target, 0);
        }
        _fromToken.asmApprove(_target, _amount);
        // solium-disable-next-line security/no-low-level-calls
        require(_target.call(_data));
    }

    function approveTokenProportion(address _target, bytes _data, ERC20 _fromToken, uint256 _mul, uint256 _div) external {
        uint256 amount = _fromToken.balanceOf(this).mul(_mul).div(_div);
        if (_fromToken.allowance(this, _target) != 0) {
            _fromToken.asmApprove(_target, 0);
        }
        _fromToken.asmApprove(_target, amount);
        // solium-disable-next-line security/no-low-level-calls
        require(_target.call(_data));
    }

    function transferTokenAmount(address _target, bytes _data, ERC20 _fromToken, uint256 _amount) external {
        _fromToken.asmTransfer(_target, _amount);
        // solium-disable-next-line security/no-low-level-calls
        require(_target.call(_data));
    }

    function transferTokenProportion(address _target, bytes _data, ERC20 _fromToken, uint256 _mul, uint256 _div) external {
        uint256 amount = _fromToken.balanceOf(this).mul(_mul).div(_div);
        _fromToken.asmTransfer(_target, amount);
        // solium-disable-next-line security/no-low-level-calls
        require(_target.call(_data));
    }

    // Ether token

    function withdrawEtherTokenAmount(IEtherToken _etherToken, uint256 _amount) external {
        _etherToken.withdraw(_amount);
    }

    function withdrawEtherTokenProportion(IEtherToken _etherToken, uint256 _mul, uint256 _div) external {
        uint256 amount = _etherToken.balanceOf(this).mul(_mul).div(_div);
        _etherToken.withdraw(amount);
    }

    // Bancor Network

    function bancorSendEthValue(IBancorNetwork _bancor, address[] _path, uint256 _value) external {
        _bancor.convert.value(_value)(_path, _value, 1);
    }

    function bancorSendEthProportion(IBancorNetwork _bancor, address[] _path, uint256 _mul, uint256 _div) external {
        uint256 value = address(this).balance.mul(_mul).div(_div);
        _bancor.convert.value(value)(_path, value, 1);
    }

    function bancorApproveTokenAmount(IBancorNetwork _bancor, address[] _path, uint256 _amount) external {
        if (ERC20(_path[0]).allowance(this, _bancor) == 0) {
            ERC20(_path[0]).asmApprove(_bancor, uint256(-1));
        }
        _bancor.claimAndConvert(_path, _amount, 1);
    }

    function bancorApproveTokenProportion(IBancorNetwork _bancor, address[] _path, uint256 _mul, uint256 _div) external {
        uint256 amount = ERC20(_path[0]).balanceOf(this).mul(_mul).div(_div);
        if (ERC20(_path[0]).allowance(this, _bancor) == 0) {
            ERC20(_path[0]).asmApprove(_bancor, uint256(-1));
        }
        _bancor.claimAndConvert(_path, amount, 1);
    }

    function bancorTransferTokenAmount(IBancorNetwork _bancor, address[] _path, uint256 _amount) external {
        ERC20(_path[0]).asmTransfer(_bancor, _amount);
        _bancor.convert(_path, _amount, 1);
    }

    function bancorTransferTokenProportion(IBancorNetwork _bancor, address[] _path, uint256 _mul, uint256 _div) external {
        uint256 amount = ERC20(_path[0]).balanceOf(this).mul(_mul).div(_div);
        ERC20(_path[0]).asmTransfer(_bancor, amount);
        _bancor.convert(_path, amount, 1);
    }

    function bancorAlreadyTransferedTokenAmount(IBancorNetwork _bancor, address[] _path, uint256 _amount) external {
        _bancor.convert(_path, _amount, 1);
    }

    function bancorAlreadyTransferedTokenProportion(IBancorNetwork _bancor, address[] _path, uint256 _mul, uint256 _div) external {
        uint256 amount = ERC20(_path[0]).balanceOf(_bancor).mul(_mul).div(_div);
        _bancor.convert(_path, amount, 1);
    }

    // Kyber Network

    function kyberSendEthProportion(IKyberNetworkProxy _kyber, ERC20 _fromToken, address _toToken, uint256 _mul, uint256 _div) external {
        uint256 value = address(this).balance.mul(_mul).div(_div);
        _kyber.trade.value(value)(
            _fromToken,
            value,
            _toToken,
            this,
            1 << 255,
            0,
            0
        );
    }

    function kyberApproveTokenAmount(IKyberNetworkProxy _kyber, ERC20 _fromToken, address _toToken, uint256 _amount) external {
        if (_fromToken.allowance(this, _kyber) == 0) {
            _fromToken.asmApprove(_kyber, uint256(-1));
        }
        _kyber.trade(
            _fromToken,
            _amount,
            _toToken,
            this,
            1 << 255,
            0,
            0
        );
    }

    function kyberApproveTokenProportion(IKyberNetworkProxy _kyber, ERC20 _fromToken, address _toToken, uint256 _mul, uint256 _div) external {
        uint256 amount = _fromToken.balanceOf(this).mul(_mul).div(_div);
        this.kyberApproveTokenAmount(_kyber, _fromToken, _toToken, amount);
    }
}

// File: contracts/registry/MultiBuyer.sol

contract MultiBuyer is MultiChanger {
    using CheckedERC20 for ERC20;

    function buy(
        IMultiToken _mtkn,
        uint256 _minimumReturn,
        bytes _callDatas,
        uint[] _starts // including 0 and LENGTH values
    )
        public
        payable
    {
        change(_callDatas, _starts);

        uint mtknTotalSupply = _mtkn.totalSupply(); // optimization totalSupply
        uint256 bestAmount = uint256(-1);
        for (uint i = _mtkn.tokensCount(); i > 0; i--) {
            ERC20 token = _mtkn.tokens(i - 1);
            if (token.allowance(this, _mtkn) == 0) {
                token.asmApprove(_mtkn, uint256(-1));
            }

            uint256 amount = mtknTotalSupply.mul(token.balanceOf(this)).div(token.balanceOf(_mtkn));
            if (amount < bestAmount) {
                bestAmount = amount;
            }
        }

        require(bestAmount >= _minimumReturn, "buy: return value is too low");
        _mtkn.bundle(msg.sender, bestAmount);
        if (address(this).balance > 0) {
            msg.sender.transfer(address(this).balance);
        }
        for (i = _mtkn.tokensCount(); i > 0; i--) {
            token = _mtkn.tokens(i - 1);
            if (token.balanceOf(this) > 0) {
                token.asmTransfer(msg.sender, token.balanceOf(this));
            }
        }
    }

    function buyFirstTokens(
        IMultiToken _mtkn,
        bytes _callDatas,
        uint[] _starts // including 0 and LENGTH values
    )
        public
        payable
    {
        change(_callDatas, _starts);

        uint tokensCount = _mtkn.tokensCount();
        uint256[] memory amounts = new uint256[](tokensCount);
        for (uint i = 0; i < tokensCount; i++) {
            ERC20 token = _mtkn.tokens(i);
            amounts[i] = token.balanceOf(this);
            if (token.allowance(this, _mtkn) == 0) {
                token.asmApprove(_mtkn, uint256(-1));
            }
        }

        _mtkn.bundleFirstTokens(msg.sender, msg.value.mul(1000), amounts);
        if (address(this).balance > 0) {
            msg.sender.transfer(address(this).balance);
        }
        for (i = _mtkn.tokensCount(); i > 0; i--) {
            token = _mtkn.tokens(i - 1);
            if (token.balanceOf(this) > 0) {
                token.asmTransfer(msg.sender, token.balanceOf(this));
            }
        }
    }

    // DEPRECATED:

    function buyOnApprove(
        IMultiToken _mtkn,
        uint256 _minimumReturn,
        ERC20 _throughToken,
        address[] _exchanges,
        bytes _datas,
        uint[] _datasIndexes, // including 0 and LENGTH values
        uint256[] _values
    )
        public
        payable
    {
        require(_datasIndexes.length == _exchanges.length + 1, "buy: _datasIndexes should start with 0 and end with LENGTH");
        require(_values.length == _exchanges.length, "buy: _values should have the same length as _exchanges");

        for (uint i = 0; i < _exchanges.length; i++) {
            bytes memory data = new bytes(_datasIndexes[i + 1] - _datasIndexes[i]);
            for (uint j = _datasIndexes[i]; j < _datasIndexes[i + 1]; j++) {
                data[j - _datasIndexes[i]] = _datas[j];
            }

            if (_throughToken != address(0) && _values[i] == 0) {
                if (_throughToken.allowance(this, _exchanges[i]) == 0) {
                    _throughToken.asmApprove(_exchanges[i], uint256(-1));
                }
                require(_exchanges[i].call(data), "buy: exchange arbitrary call failed");
            } else {
                require(_exchanges[i].call.value(_values[i])(data), "buy: exchange arbitrary call failed");
            }
        }

        j = _mtkn.totalSupply(); // optimization totalSupply
        uint256 bestAmount = uint256(-1);
        for (i = _mtkn.tokensCount(); i > 0; i--) {
            ERC20 token = _mtkn.tokens(i - 1);
            if (token.allowance(this, _mtkn) == 0) {
                token.asmApprove(_mtkn, uint256(-1));
            }

            uint256 amount = j.mul(token.balanceOf(this)).div(token.balanceOf(_mtkn));
            if (amount < bestAmount) {
                bestAmount = amount;
            }
        }

        require(bestAmount >= _minimumReturn, "buy: return value is too low");
        _mtkn.bundle(msg.sender, bestAmount);
        if (address(this).balance > 0) {
            msg.sender.transfer(address(this).balance);
        }
        if (_throughToken != address(0) && _throughToken.balanceOf(this) > 0) {
            _throughToken.asmTransfer(msg.sender, _throughToken.balanceOf(this));
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"reclaimToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bancor","type":"address"},{"name":"_path","type":"address[]"},{"name":"_amount","type":"uint256"}],"name":"bancorAlreadyTransferedTokenAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bancor","type":"address"},{"name":"_path","type":"address[]"},{"name":"_mul","type":"uint256"},{"name":"_div","type":"uint256"}],"name":"bancorSendEthProportion","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"},{"name":"_data","type":"bytes"},{"name":"_fromToken","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approveTokenAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bancor","type":"address"},{"name":"_path","type":"address[]"},{"name":"_mul","type":"uint256"},{"name":"_div","type":"uint256"}],"name":"bancorApproveTokenProportion","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bancor","type":"address"},{"name":"_path","type":"address[]"},{"name":"_amount","type":"uint256"}],"name":"bancorTransferTokenAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_etherToken","type":"address"},{"name":"_mul","type":"uint256"},{"name":"_div","type":"uint256"}],"name":"withdrawEtherTokenProportion","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bancor","type":"address"},{"name":"_path","type":"address[]"},{"name":"_mul","type":"uint256"},{"name":"_div","type":"uint256"}],"name":"bancorTransferTokenProportion","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_mtkn","type":"address"},{"name":"_callDatas","type":"bytes"},{"name":"_starts","type":"uint256[]"}],"name":"buyFirstTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"},{"name":"_data","type":"bytes"},{"name":"_mul","type":"uint256"},{"name":"_div","type":"uint256"}],"name":"sendEthProportion","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bancor","type":"address"},{"name":"_path","type":"address[]"},{"name":"_value","type":"uint256"}],"name":"bancorSendEthValue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kyber","type":"address"},{"name":"_fromToken","type":"address"},{"name":"_toToken","type":"address"},{"name":"_mul","type":"uint256"},{"name":"_div","type":"uint256"}],"name":"kyberSendEthProportion","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":"_mtkn","type":"address"},{"name":"_minimumReturn","type":"uint256"},{"name":"_callDatas","type":"bytes"},{"name":"_starts","type":"uint256[]"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"},{"name":"_data","type":"bytes"},{"name":"_fromToken","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferTokenAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bancor","type":"address"},{"name":"_path","type":"address[]"},{"name":"_mul","type":"uint256"},{"name":"_div","type":"uint256"}],"name":"bancorAlreadyTransferedTokenProportion","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_etherToken","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawEtherTokenAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kyber","type":"address"},{"name":"_fromToken","type":"address"},{"name":"_toToken","type":"address"},{"name":"_mul","type":"uint256"},{"name":"_div","type":"uint256"}],"name":"kyberApproveTokenProportion","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"},{"name":"_data","type":"bytes"},{"name":"_fromToken","type":"address"},{"name":"_mul","type":"uint256"},{"name":"_div","type":"uint256"}],"name":"approveTokenProportion","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"},{"name":"_data","type":"bytes"},{"name":"_value","type":"uint256"}],"name":"sendEthValue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"},{"name":"_data","type":"bytes"},{"name":"_fromToken","type":"address"},{"name":"_mul","type":"uint256"},{"name":"_div","type":"uint256"}],"name":"transferTokenProportion","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kyber","type":"address"},{"name":"_fromToken","type":"address"},{"name":"_toToken","type":"address"},{"name":"_amount","type":"uint256"}],"name":"kyberApproveTokenAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bancor","type":"address"},{"name":"_path","type":"address[]"},{"name":"_amount","type":"uint256"}],"name":"bancorApproveTokenAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_mtkn","type":"address"},{"name":"_minimumReturn","type":"uint256"},{"name":"_throughToken","type":"address"},{"name":"_exchanges","type":"address[]"},{"name":"_datas","type":"bytes"},{"name":"_datasIndexes","type":"uint256[]"},{"name":"_values","type":"uint256[]"}],"name":"buyOnApprove","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

608060405260008054600160a060020a03191633179055613407806100256000396000f30060806040526004361061013a5763ffffffff60e060020a60003504166317ffc320811461013f5780631f91695d146101625780632545f8eb146101925780633669f27b146101c557806338085649146101fb57806340f0b0f11461022e5780635499716a1461025e578063618e8ad3146102855780636babf513146102b8578063715018a61461034b578063846f11851461036057806386b0e00a146103935780638721fbe9146103c35780638da5cb5b146103f657806394480a69146104275780639a509aff146104bc5780639d99ce04146104f2578063bd3e904f14610525578063bed31bc714610549578063d04c6c181461057c578063d2e9236b146105b5578063d91bd1b0146105e5578063dc3193f91461061e578063f2fde38b1461064e578063f8b2cb071461066f578063fc6719151461069f575b600080fd5b34801561014b57600080fd5b50610160600160a060020a03600435166107b5565b005b34801561016e57600080fd5b5061016060048035600160a060020a0316906024803590810191013560443561086b565b34801561019e57600080fd5b5061016060048035600160a060020a03169060248035908101910135604435606435610914565b3480156101d157600080fd5b50610160600160a060020a03600480358216916024803590810192013590604435166064356109e5565b34801561020757600080fd5b5061016060048035600160a060020a03169060248035908101910135604435606435610ae5565b34801561023a57600080fd5b5061016060048035600160a060020a03169060248035908101910135604435610cff565b34801561026a57600080fd5b50610160600160a060020a0360043516602435604435610db1565b34801561029157600080fd5b5061016060048035600160a060020a03169060248035908101910135604435606435610e75565b60408051602060046024803582810135601f8101859004850286018501909652858552610160958335600160a060020a0316953695604494919390910191908190840183828082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750949750610f179650505050505050565b34801561035757600080fd5b506101606114a1565b34801561036c57600080fd5b5061016060048035600160a060020a0316906024803590810191013560443560643561150d565b34801561039f57600080fd5b5061016060048035600160a060020a03169060248035908101910135604435611562565b3480156103cf57600080fd5b50610160600160a060020a0360043581169060243581169060443516606435608435611604565b34801561040257600080fd5b5061040b6116cc565b60408051600160a060020a039092168252519081900360200190f35b604080516020600460443581810135601f8101849004840285018401909552848452610160948235600160a060020a0316946024803595369594606494920191908190840183828082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506116db9650505050505050565b3480156104c857600080fd5b50610160600160a060020a0360048035821691602480359081019201359060443516606435611d6e565b3480156104fe57600080fd5b5061016060048035600160a060020a03169060248035908101910135604435606435611d88565b34801561053157600080fd5b50610160600160a060020a0360043516602435611e81565b34801561055557600080fd5b50610160600160a060020a0360043581169060243581169060443516606435608435611ede565b34801561058857600080fd5b50610160600160a060020a0360048035821691602480359081019201359060443516606435608435611fde565b3480156105c157600080fd5b5061016060048035600160a060020a0316906024803590810191013560443561213f565b3480156105f157600080fd5b50610160600160a060020a0360048035821691602480359081019201359060443516606435608435612181565b34801561062a57600080fd5b50610160600160a060020a0360043581169060243581169060443516606435612202565b34801561065a57600080fd5b50610160600160a060020a0360043516612358565b34801561067b57600080fd5b5061016060048035600160a060020a0316906024803590810191013560443561237b565b604080516064356004818101356020818102858101820190965281855261016095600160a060020a0384358116966024803597604435909316963696909560849593949092019290918291908501908490808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506124a29650505050505050565b60008054600160a060020a031633146107cd57600080fd5b6040805160e060020a6370a082310281523060048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561081857600080fd5b505af115801561082c573d6000803e3d6000fd5b505050506040513d602081101561084257600080fd5b505160005490915061086790600160a060020a0384811691168363ffffffff61302e16565b5050565b83600160a060020a031663f3898a9784848460016040518563ffffffff1660e060020a02815260040180806020018481526020018381526020018281038252868682818152602001925060200280828437820191505095505050505050602060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050506040513d602081101561090c57600080fd5b505050505050565b60006109378261092b30318663ffffffff6130cd16565b9063ffffffff6130fc16565b905085600160a060020a031663f3898a978287878560016040518663ffffffff1660e060020a028152600401808060200184815260200183815260200182810382528686828181526020019250602002808284378201915050955050505050506020604051808303818588803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b50505050506040513d60208110156109db57600080fd5b5050505050505050565b6040805160e160020a636eb1769f028152306004820152600160a060020a03878116602483015291519184169163dd62ed3e916044808201926020929091908290030181600087803b158015610a3a57600080fd5b505af1158015610a4e573d6000803e3d6000fd5b505050506040513d6020811015610a6457600080fd5b505115610a8857610a86600160a060020a03831686600063ffffffff61311116565b505b610aa2600160a060020a038316868363ffffffff61311116565b5084600160a060020a03168484604051808383808284378201915050925050506000604051808303816000865af19150501515610ade57600080fd5b5050505050565b6000610b848261092b85888886818110610afb57fe5b6040805160e060020a6370a08231028152306004820152905160209283029490940135600160a060020a0316936370a082319350602480830193928290030181600087803b158015610b4c57600080fd5b505af1158015610b60573d6000803e3d6000fd5b505050506040513d6020811015610b7657600080fd5b50519063ffffffff6130cd16565b905084846000818110610b9357fe5b6040805160e160020a636eb1769f028152306004820152600160a060020a038b811660248301529151602093840295909501359091169363dd62ed3e9350604480830193928290030181600087803b158015610bee57600080fd5b505af1158015610c02573d6000803e3d6000fd5b505050506040513d6020811015610c1857600080fd5b50511515610c5e57610c5c8660001987876000818110610c3457fe5b90506020020135600160a060020a0316600160a060020a03166131119092919063ffffffff16565b505b85600160a060020a031663c7ba24bc86868460016040518563ffffffff1660e060020a02815260040180806020018481526020018381526020018281038252868682818152602001925060200280828437820191505095505050505050602060405180830381600087803b158015610cd557600080fd5b505af1158015610ce9573d6000803e3d6000fd5b505050506040513d60208110156109db57600080fd5b610d39848285856000818110610d1157fe5b90506020020135600160a060020a0316600160a060020a03166131d59092919063ffffffff16565b5083600160a060020a031663f3898a9784848460016040518563ffffffff1660e060020a02815260040180806020018481526020018381526020018281038252868682818152602001925060200280828437820191505095505050505050602060405180830381600087803b1580156108e257600080fd5b6000610e168261092b8587600160a060020a03166370a08231306040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610b4c57600080fd5b905083600160a060020a0316632e1a7d4d826040518263ffffffff1660e060020a02815260040180828152602001915050600060405180830381600087803b158015610e6157600080fd5b505af11580156109db573d6000803e3d6000fd5b6000610e8b8261092b85888886818110610afb57fe5b9050610e9f868287876000818110610d1157fe5b5085600160a060020a031663f3898a9786868460016040518563ffffffff1660e060020a02815260040180806020018481526020018381526020018281038252868682818152602001925060200280828437820191505095505050505050602060405180830381600087803b158015610cd557600080fd5b60006060600080610f288686613289565b86600160a060020a031663a64ed8ba6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610f6657600080fd5b505af1158015610f7a573d6000803e3d6000fd5b505050506040513d6020811015610f9057600080fd5b5051604080518281526020808402820101909152909450848015610fbe578160200160208202803883390190505b509250600091505b838210156111845786600160a060020a0316634f64b2be836040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561101757600080fd5b505af115801561102b573d6000803e3d6000fd5b505050506040513d602081101561104157600080fd5b50516040805160e060020a6370a082310281523060048201529051919250600160a060020a038316916370a08231916024808201926020929091908290030181600087803b15801561109257600080fd5b505af11580156110a6573d6000803e3d6000fd5b505050506040513d60208110156110bc57600080fd5b505183518490849081106110cc57fe5b60209081029091018101919091526040805160e160020a636eb1769f028152306004820152600160a060020a038a8116602483015291519184169263dd62ed3e926044808401938290030181600087803b15801561112957600080fd5b505af115801561113d573d6000803e3d6000fd5b505050506040513d602081101561115357600080fd5b5051151561117957611177600160a060020a0382168860001963ffffffff61311116565b505b600190910190610fc6565b600160a060020a0387166322393ef4336111a6346103e863ffffffff6130cd16565b60405160e060020a63ffffffff8516028152600160a060020a03831660048201908152602482018390526060604483019081528951606484015289518a93608401906020808601910280838360005b8381101561120d5781810151838201526020016111f5565b50505050905001945050505050600060405180830381600087803b15801561123457600080fd5b505af1158015611248573d6000803e3d6000fd5b5050506000303111159050611286576040513390303180156108fc02916000818181858888f19350505050158015611284573d6000803e3d6000fd5b505b86600160a060020a031663a64ed8ba6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156112c457600080fd5b505af11580156112d8573d6000803e3d6000fd5b505050506040513d60208110156112ee57600080fd5b505191505b60008211156114985786600160a060020a0316634f64b2be600184036040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561134857600080fd5b505af115801561135c573d6000803e3d6000fd5b505050506040513d602081101561137257600080fd5b50516040805160e060020a6370a082310281523060048201529051919250600091600160a060020a038416916370a0823191602480830192602092919082900301818787803b1580156113c457600080fd5b505af11580156113d8573d6000803e3d6000fd5b505050506040513d60208110156113ee57600080fd5b5051111561148c576040805160e060020a6370a08231028152306004820152905161148a913391600160a060020a038516916370a082319160248083019260209291908290030181600087803b15801561144757600080fd5b505af115801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b5051600160a060020a038416919063ffffffff6131d516565b505b600019909101906112f3565b50505050505050565b600054600160a060020a031633146114b857600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60006115248261092b30318663ffffffff6130cd16565b905085600160a060020a03168186866040518083838082843782019150509250505060006040518083038185875af192505050151561090c57600080fd5b83600160a060020a031663f3898a978285858560016040518663ffffffff1660e060020a028152600401808060200184815260200183815260200182810382528686828181526020019250602002808284378201915050955050505050506020604051808303818588803b1580156115d957600080fd5b505af11580156115ed573d6000803e3d6000fd5b50505050506040513d602081101561090c57600080fd5b600061161b8261092b30318663ffffffff6130cd16565b604080517fcb3c28c7000000000000000000000000000000000000000000000000000000008152600160a060020a0388811660048301526024820184905287811660448301523060648301527f80000000000000000000000000000000000000000000000000000000000000006084830152600060a4830181905260c483015291519293509088169163cb3c28c791849160e480830192602092919082900301818588803b1580156109b057600080fd5b600054600160a060020a031681565b60008060008060006116ed8787613289565b88600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561172b57600080fd5b505af115801561173f573d6000803e3d6000fd5b505050506040513d602081101561175557600080fd5b5051604080517fa64ed8ba00000000000000000000000000000000000000000000000000000000815290519196506000199550600160a060020a038b169163a64ed8ba916004808201926020929091908290030181600087803b1580156117bb57600080fd5b505af11580156117cf573d6000803e3d6000fd5b505050506040513d60208110156117e557600080fd5b505192505b6000831115611a405788600160a060020a0316634f64b2be600185036040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561183f57600080fd5b505af1158015611853573d6000803e3d6000fd5b505050506040513d602081101561186957600080fd5b50516040805160e160020a636eb1769f028152306004820152600160a060020a038c8116602483015291519294509084169163dd62ed3e916044808201926020929091908290030181600087803b1580156118c357600080fd5b505af11580156118d7573d6000803e3d6000fd5b505050506040513d60208110156118ed57600080fd5b5051151561191357611911600160a060020a0383168a60001963ffffffff61311116565b505b611a2682600160a060020a03166370a082318b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561197157600080fd5b505af1158015611985573d6000803e3d6000fd5b505050506040513d602081101561199b57600080fd5b50516040805160e060020a6370a08231028152306004820152905161092b91600160a060020a038716916370a08231916024808201926020929091908290030181600087803b1580156119ed57600080fd5b505af1158015611a01573d6000803e3d6000fd5b505050506040513d6020811015611a1757600080fd5b5051889063ffffffff6130cd16565b905083811015611a34578093505b600019909201916117ea565b87841015611a98576040805160e560020a62461bcd02815260206004820152601c60248201527f6275793a2072657475726e2076616c756520697320746f6f206c6f7700000000604482015290519081900360640190fd5b604080517feba3cdfe000000000000000000000000000000000000000000000000000000008152336004820152602481018690529051600160a060020a038b169163eba3cdfe91604480830192600092919082900301818387803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b5050506000303111159050611b51576040513390303180156108fc02916000818181858888f19350505050158015611b4f573d6000803e3d6000fd5b505b88600160a060020a031663a64ed8ba6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611b8f57600080fd5b505af1158015611ba3573d6000803e3d6000fd5b505050506040513d6020811015611bb957600080fd5b505192505b6000831115611d635788600160a060020a0316634f64b2be600185036040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b158015611c1357600080fd5b505af1158015611c27573d6000803e3d6000fd5b505050506040513d6020811015611c3d57600080fd5b50516040805160e060020a6370a082310281523060048201529051919350600091600160a060020a038516916370a0823191602480830192602092919082900301818787803b158015611c8f57600080fd5b505af1158015611ca3573d6000803e3d6000fd5b505050506040513d6020811015611cb957600080fd5b50511115611d57576040805160e060020a6370a082310281523060048201529051611d55913391600160a060020a038616916370a082319160248083019260209291908290030181600087803b158015611d1257600080fd5b505af1158015611d26573d6000803e3d6000fd5b505050506040513d6020811015611d3c57600080fd5b5051600160a060020a038516919063ffffffff6131d516565b505b60001990920191611bbe565b505050505050505050565b610aa2600160a060020a038316868363ffffffff6131d516565b6000611e088261092b85888886818110611d9e57fe5b90506020020135600160a060020a0316600160a060020a03166370a082318b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610b4c57600080fd5b905085600160a060020a031663f3898a9786868460016040518563ffffffff1660e060020a02815260040180806020018481526020018381526020018281038252868682818152602001925060200280828437820191505095505050505050602060405180830381600087803b158015610cd557600080fd5b81600160a060020a0316632e1a7d4d826040518263ffffffff1660e060020a02815260040180828152602001915050600060405180830381600087803b158015611eca57600080fd5b505af115801561090c573d6000803e3d6000fd5b6000611f438261092b8588600160a060020a03166370a08231306040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610b4c57600080fd5b604080517fdc3193f9000000000000000000000000000000000000000000000000000000008152600160a060020a038981166004830152888116602483015287166044820152606481018390529051919250309163dc3193f99160848082019260009290919082900301818387803b158015611fbe57600080fd5b505af1158015611fd2573d6000803e3d6000fd5b50505050505050505050565b60006120438261092b8587600160a060020a03166370a08231306040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610b4c57600080fd5b6040805160e160020a636eb1769f028152306004820152600160a060020a038a8116602483015291519293509086169163dd62ed3e916044808201926020929091908290030181600087803b15801561209b57600080fd5b505af11580156120af573d6000803e3d6000fd5b505050506040513d60208110156120c557600080fd5b5051156120e9576120e7600160a060020a03851688600063ffffffff61311116565b505b612103600160a060020a038516888363ffffffff61311116565b5086600160a060020a03168686604051808383808284378201915050925050506000604051808303816000865af1915050151561149857600080fd5b83600160a060020a03168184846040518083838082843782019150509250505060006040518083038185875af192505050151561217b57600080fd5b50505050565b60006121e68261092b8587600160a060020a03166370a08231306040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610b4c57600080fd5b9050612103600160a060020a038516888363ffffffff6131d516565b6040805160e160020a636eb1769f028152306004820152600160a060020a03868116602483015291519185169163dd62ed3e916044808201926020929091908290030181600087803b15801561225757600080fd5b505af115801561226b573d6000803e3d6000fd5b505050506040513d602081101561228157600080fd5b505115156122a7576122a5600160a060020a0384168560001963ffffffff61311116565b505b604080517fcb3c28c7000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301526024820184905284811660448301523060648301527f80000000000000000000000000000000000000000000000000000000000000006084830152600060a4830181905260c4830181905292519087169263cb3c28c79260e480820193602093909283900390910190829087803b1580156108e257600080fd5b600054600160a060020a0316331461236f57600080fd5b61237881613303565b50565b8282600081811061238857fe5b6040805160e160020a636eb1769f028152306004820152600160a060020a0389811660248301529151602093840295909501359091169363dd62ed3e9350604480830193928290030181600087803b1580156123e357600080fd5b505af11580156123f7573d6000803e3d6000fd5b505050506040513d602081101561240d57600080fd5b5051151561242b576124298460001985856000818110610c3457fe5b505b83600160a060020a031663c7ba24bc84848460016040518563ffffffff1660e060020a02815260040180806020018481526020018381526020018281038252868682818152602001925060200280828437820191505095505050505050602060405180830381600087803b1580156108e257600080fd5b6000606060008060008089516001018851141515612530576040805160e560020a62461bcd02815260206004820152603a60248201527f6275793a205f6461746173496e64657865732073686f756c642073746172742060448201527f77697468203020616e6420656e642077697468204c454e475448000000000000606482015290519081900360840190fd5b89518751146125af576040805160e560020a62461bcd02815260206004820152603660248201527f6275793a205f76616c7565732073686f756c642068617665207468652073616d60448201527f65206c656e677468206173205f65786368616e67657300000000000000000000606482015290519081900360840190fd5b600095505b8951861015612a635787868151811015156125cb57fe5b9060200190602002015188876001018151811015156125e657fe5b90602001906020020151036040519080825280601f01601f19166020018201604052801561261e578160200160208202803883390190505b509450878681518110151561262f57fe5b9060200190602002015193505b878660010181518110151561264d57fe5b9060200190602002015184101561271957888481518110151561266c57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028589888151811015156126c657fe5b9060200190602002015186038151811015156126de57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060019093019261263c565b600160a060020a038b16158015906127485750868681518110151561273a57fe5b906020019060200201516000145b15612936578a600160a060020a031663dd62ed3e308c8981518110151561276b57fe5b60209081029091018101516040805160e060020a63ffffffff8716028152600160a060020a039485166004820152939091166024840152516044808401938290030181600087803b1580156127bf57600080fd5b505af11580156127d3573d6000803e3d6000fd5b505050506040513d60208110156127e957600080fd5b50511515612827576128258a8781518110151561280257fe5b60209081029091010151600160a060020a038d169060001963ffffffff61311116565b505b898681518110151561283557fe5b90602001906020020151600160a060020a03168560405180828051906020019080838360005b8381101561287357818101518382015260200161285b565b50505050905090810190601f1680156128a05780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af19150501515612931576040805160e560020a62461bcd02815260206004820152602360248201527f6275793a2065786368616e6765206172626974726172792063616c6c2066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b612a58565b898681518110151561294457fe5b90602001906020020151600160a060020a0316878781518110151561296557fe5b906020019060200201518660405180828051906020019080838360005b8381101561299a578181015183820152602001612982565b50505050905090810190601f1680156129c75780820380516001836020036101000a031916815260200191505b5091505060006040518083038185875af1925050501515612a58576040805160e560020a62461bcd02815260206004820152602360248201527f6275793a2065786368616e6765206172626974726172792063616c6c2066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6001909501946125b4565b8c600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015612aa157600080fd5b505af1158015612ab5573d6000803e3d6000fd5b505050506040513d6020811015612acb57600080fd5b5051604080517fa64ed8ba00000000000000000000000000000000000000000000000000000000815290519195506000199450600160a060020a038f169163a64ed8ba916004808201926020929091908290030181600087803b158015612b3157600080fd5b505af1158015612b45573d6000803e3d6000fd5b505050506040513d6020811015612b5b57600080fd5b505195505b6000861115612de4578c600160a060020a0316634f64b2be600188036040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b158015612bb557600080fd5b505af1158015612bc9573d6000803e3d6000fd5b505050506040513d6020811015612bdf57600080fd5b8101908080519060200190929190505050915081600160a060020a031663dd62ed3e308f6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182600160a060020a0316600160a060020a0316815260200192505050602060405180830381600087803b158015612c6757600080fd5b505af1158015612c7b573d6000803e3d6000fd5b505050506040513d6020811015612c9157600080fd5b50511515612cb757612cb5600160a060020a0383168e60001963ffffffff61311116565b505b612dca82600160a060020a03166370a082318f6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015612d1557600080fd5b505af1158015612d29573d6000803e3d6000fd5b505050506040513d6020811015612d3f57600080fd5b50516040805160e060020a6370a08231028152306004820152905161092b91600160a060020a038716916370a08231916024808201926020929091908290030181600087803b158015612d9157600080fd5b505af1158015612da5573d6000803e3d6000fd5b505050506040513d6020811015612dbb57600080fd5b5051879063ffffffff6130cd16565b905082811015612dd8578092505b60001990950194612b60565b8b831015612e3c576040805160e560020a62461bcd02815260206004820152601c60248201527f6275793a2072657475726e2076616c756520697320746f6f206c6f7700000000604482015290519081900360640190fd5b604080517feba3cdfe000000000000000000000000000000000000000000000000000000008152336004820152602481018590529051600160a060020a038f169163eba3cdfe91604480830192600092919082900301818387803b158015612ea357600080fd5b505af1158015612eb7573d6000803e3d6000fd5b5050506000303111159050612ef5576040513390303180156108fc02916000818181858888f19350505050158015612ef3573d6000803e3d6000fd5b505b600160a060020a038b1615801590612f8457506040805160e060020a6370a082310281523060048201529051600091600160a060020a038e16916370a082319160248082019260209290919082900301818787803b158015612f5657600080fd5b505af1158015612f6a573d6000803e3d6000fd5b505050506040513d6020811015612f8057600080fd5b5051115b1561301f576040805160e060020a6370a08231028152306004820152905161301d913391600160a060020a038f16916370a082319160248083019260209291908290030181600087803b158015612fda57600080fd5b505af1158015612fee573d6000803e3d6000fd5b505050506040513d602081101561300457600080fd5b5051600160a060020a038e16919063ffffffff6131d516565b505b50505050505050505050505050565b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561309157600080fd5b505af11580156130a5573d6000803e3d6000fd5b505050506040513d60208110156130bb57600080fd5b505115156130c857600080fd5b505050565b60008215156130de575060006130f6565b508181028183828115156130ee57fe5b04146130f657fe5b92915050565b6000818381151561310957fe5b049392505050565b600061311c84613380565b151561312757600080fd5b83600160a060020a031660405180807f617070726f766528616464726573732c75696e743235362900000000000000008152506018019050604051809103902060e060020a900484846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a03168152602001828152602001925050506000604051808303816000875af19250505015156131c557600080fd5b6131cd613388565b949350505050565b60006131e084613380565b15156131eb57600080fd5b83600160a060020a031660405180807f7472616e7366657228616464726573732c75696e7432353629000000000000008152506019019050604051809103902060e060020a900484846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a03168152602001828152602001925050506000604051808303816000875af19250505015156131c557600080fd5b60005b60018251038110156130c8576132f03060008585858151811015156132ad57fe5b9060200190602002015186868151811015156132c557fe5b9060200190602002015187876001018151811015156132e057fe5b90602001906020020151036133b7565b15156132fb57600080fd5b60010161328c565b600160a060020a038116151561331857600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000903b1190565b60003d801561339e57602081146133a757600080fd5b600191506133b3565b60206000803e60005191505b5090565b600060405160208501600082858784018a8c6187965a03f1989750505050505050505600a165627a7a72305820a52dda8776ba8c333f2029fd37701055c4e42440fd18427d0f848ce5343c52620029

Deployed Bytecode

0x60806040526004361061013a5763ffffffff60e060020a60003504166317ffc320811461013f5780631f91695d146101625780632545f8eb146101925780633669f27b146101c557806338085649146101fb57806340f0b0f11461022e5780635499716a1461025e578063618e8ad3146102855780636babf513146102b8578063715018a61461034b578063846f11851461036057806386b0e00a146103935780638721fbe9146103c35780638da5cb5b146103f657806394480a69146104275780639a509aff146104bc5780639d99ce04146104f2578063bd3e904f14610525578063bed31bc714610549578063d04c6c181461057c578063d2e9236b146105b5578063d91bd1b0146105e5578063dc3193f91461061e578063f2fde38b1461064e578063f8b2cb071461066f578063fc6719151461069f575b600080fd5b34801561014b57600080fd5b50610160600160a060020a03600435166107b5565b005b34801561016e57600080fd5b5061016060048035600160a060020a0316906024803590810191013560443561086b565b34801561019e57600080fd5b5061016060048035600160a060020a03169060248035908101910135604435606435610914565b3480156101d157600080fd5b50610160600160a060020a03600480358216916024803590810192013590604435166064356109e5565b34801561020757600080fd5b5061016060048035600160a060020a03169060248035908101910135604435606435610ae5565b34801561023a57600080fd5b5061016060048035600160a060020a03169060248035908101910135604435610cff565b34801561026a57600080fd5b50610160600160a060020a0360043516602435604435610db1565b34801561029157600080fd5b5061016060048035600160a060020a03169060248035908101910135604435606435610e75565b60408051602060046024803582810135601f8101859004850286018501909652858552610160958335600160a060020a0316953695604494919390910191908190840183828082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750949750610f179650505050505050565b34801561035757600080fd5b506101606114a1565b34801561036c57600080fd5b5061016060048035600160a060020a0316906024803590810191013560443560643561150d565b34801561039f57600080fd5b5061016060048035600160a060020a03169060248035908101910135604435611562565b3480156103cf57600080fd5b50610160600160a060020a0360043581169060243581169060443516606435608435611604565b34801561040257600080fd5b5061040b6116cc565b60408051600160a060020a039092168252519081900360200190f35b604080516020600460443581810135601f8101849004840285018401909552848452610160948235600160a060020a0316946024803595369594606494920191908190840183828082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506116db9650505050505050565b3480156104c857600080fd5b50610160600160a060020a0360048035821691602480359081019201359060443516606435611d6e565b3480156104fe57600080fd5b5061016060048035600160a060020a03169060248035908101910135604435606435611d88565b34801561053157600080fd5b50610160600160a060020a0360043516602435611e81565b34801561055557600080fd5b50610160600160a060020a0360043581169060243581169060443516606435608435611ede565b34801561058857600080fd5b50610160600160a060020a0360048035821691602480359081019201359060443516606435608435611fde565b3480156105c157600080fd5b5061016060048035600160a060020a0316906024803590810191013560443561213f565b3480156105f157600080fd5b50610160600160a060020a0360048035821691602480359081019201359060443516606435608435612181565b34801561062a57600080fd5b50610160600160a060020a0360043581169060243581169060443516606435612202565b34801561065a57600080fd5b50610160600160a060020a0360043516612358565b34801561067b57600080fd5b5061016060048035600160a060020a0316906024803590810191013560443561237b565b604080516064356004818101356020818102858101820190965281855261016095600160a060020a0384358116966024803597604435909316963696909560849593949092019290918291908501908490808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506124a29650505050505050565b60008054600160a060020a031633146107cd57600080fd5b6040805160e060020a6370a082310281523060048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561081857600080fd5b505af115801561082c573d6000803e3d6000fd5b505050506040513d602081101561084257600080fd5b505160005490915061086790600160a060020a0384811691168363ffffffff61302e16565b5050565b83600160a060020a031663f3898a9784848460016040518563ffffffff1660e060020a02815260040180806020018481526020018381526020018281038252868682818152602001925060200280828437820191505095505050505050602060405180830381600087803b1580156108e257600080fd5b505af11580156108f6573d6000803e3d6000fd5b505050506040513d602081101561090c57600080fd5b505050505050565b60006109378261092b30318663ffffffff6130cd16565b9063ffffffff6130fc16565b905085600160a060020a031663f3898a978287878560016040518663ffffffff1660e060020a028152600401808060200184815260200183815260200182810382528686828181526020019250602002808284378201915050955050505050506020604051808303818588803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b50505050506040513d60208110156109db57600080fd5b5050505050505050565b6040805160e160020a636eb1769f028152306004820152600160a060020a03878116602483015291519184169163dd62ed3e916044808201926020929091908290030181600087803b158015610a3a57600080fd5b505af1158015610a4e573d6000803e3d6000fd5b505050506040513d6020811015610a6457600080fd5b505115610a8857610a86600160a060020a03831686600063ffffffff61311116565b505b610aa2600160a060020a038316868363ffffffff61311116565b5084600160a060020a03168484604051808383808284378201915050925050506000604051808303816000865af19150501515610ade57600080fd5b5050505050565b6000610b848261092b85888886818110610afb57fe5b6040805160e060020a6370a08231028152306004820152905160209283029490940135600160a060020a0316936370a082319350602480830193928290030181600087803b158015610b4c57600080fd5b505af1158015610b60573d6000803e3d6000fd5b505050506040513d6020811015610b7657600080fd5b50519063ffffffff6130cd16565b905084846000818110610b9357fe5b6040805160e160020a636eb1769f028152306004820152600160a060020a038b811660248301529151602093840295909501359091169363dd62ed3e9350604480830193928290030181600087803b158015610bee57600080fd5b505af1158015610c02573d6000803e3d6000fd5b505050506040513d6020811015610c1857600080fd5b50511515610c5e57610c5c8660001987876000818110610c3457fe5b90506020020135600160a060020a0316600160a060020a03166131119092919063ffffffff16565b505b85600160a060020a031663c7ba24bc86868460016040518563ffffffff1660e060020a02815260040180806020018481526020018381526020018281038252868682818152602001925060200280828437820191505095505050505050602060405180830381600087803b158015610cd557600080fd5b505af1158015610ce9573d6000803e3d6000fd5b505050506040513d60208110156109db57600080fd5b610d39848285856000818110610d1157fe5b90506020020135600160a060020a0316600160a060020a03166131d59092919063ffffffff16565b5083600160a060020a031663f3898a9784848460016040518563ffffffff1660e060020a02815260040180806020018481526020018381526020018281038252868682818152602001925060200280828437820191505095505050505050602060405180830381600087803b1580156108e257600080fd5b6000610e168261092b8587600160a060020a03166370a08231306040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610b4c57600080fd5b905083600160a060020a0316632e1a7d4d826040518263ffffffff1660e060020a02815260040180828152602001915050600060405180830381600087803b158015610e6157600080fd5b505af11580156109db573d6000803e3d6000fd5b6000610e8b8261092b85888886818110610afb57fe5b9050610e9f868287876000818110610d1157fe5b5085600160a060020a031663f3898a9786868460016040518563ffffffff1660e060020a02815260040180806020018481526020018381526020018281038252868682818152602001925060200280828437820191505095505050505050602060405180830381600087803b158015610cd557600080fd5b60006060600080610f288686613289565b86600160a060020a031663a64ed8ba6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610f6657600080fd5b505af1158015610f7a573d6000803e3d6000fd5b505050506040513d6020811015610f9057600080fd5b5051604080518281526020808402820101909152909450848015610fbe578160200160208202803883390190505b509250600091505b838210156111845786600160a060020a0316634f64b2be836040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561101757600080fd5b505af115801561102b573d6000803e3d6000fd5b505050506040513d602081101561104157600080fd5b50516040805160e060020a6370a082310281523060048201529051919250600160a060020a038316916370a08231916024808201926020929091908290030181600087803b15801561109257600080fd5b505af11580156110a6573d6000803e3d6000fd5b505050506040513d60208110156110bc57600080fd5b505183518490849081106110cc57fe5b60209081029091018101919091526040805160e160020a636eb1769f028152306004820152600160a060020a038a8116602483015291519184169263dd62ed3e926044808401938290030181600087803b15801561112957600080fd5b505af115801561113d573d6000803e3d6000fd5b505050506040513d602081101561115357600080fd5b5051151561117957611177600160a060020a0382168860001963ffffffff61311116565b505b600190910190610fc6565b600160a060020a0387166322393ef4336111a6346103e863ffffffff6130cd16565b60405160e060020a63ffffffff8516028152600160a060020a03831660048201908152602482018390526060604483019081528951606484015289518a93608401906020808601910280838360005b8381101561120d5781810151838201526020016111f5565b50505050905001945050505050600060405180830381600087803b15801561123457600080fd5b505af1158015611248573d6000803e3d6000fd5b5050506000303111159050611286576040513390303180156108fc02916000818181858888f19350505050158015611284573d6000803e3d6000fd5b505b86600160a060020a031663a64ed8ba6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156112c457600080fd5b505af11580156112d8573d6000803e3d6000fd5b505050506040513d60208110156112ee57600080fd5b505191505b60008211156114985786600160a060020a0316634f64b2be600184036040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561134857600080fd5b505af115801561135c573d6000803e3d6000fd5b505050506040513d602081101561137257600080fd5b50516040805160e060020a6370a082310281523060048201529051919250600091600160a060020a038416916370a0823191602480830192602092919082900301818787803b1580156113c457600080fd5b505af11580156113d8573d6000803e3d6000fd5b505050506040513d60208110156113ee57600080fd5b5051111561148c576040805160e060020a6370a08231028152306004820152905161148a913391600160a060020a038516916370a082319160248083019260209291908290030181600087803b15801561144757600080fd5b505af115801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b5051600160a060020a038416919063ffffffff6131d516565b505b600019909101906112f3565b50505050505050565b600054600160a060020a031633146114b857600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60006115248261092b30318663ffffffff6130cd16565b905085600160a060020a03168186866040518083838082843782019150509250505060006040518083038185875af192505050151561090c57600080fd5b83600160a060020a031663f3898a978285858560016040518663ffffffff1660e060020a028152600401808060200184815260200183815260200182810382528686828181526020019250602002808284378201915050955050505050506020604051808303818588803b1580156115d957600080fd5b505af11580156115ed573d6000803e3d6000fd5b50505050506040513d602081101561090c57600080fd5b600061161b8261092b30318663ffffffff6130cd16565b604080517fcb3c28c7000000000000000000000000000000000000000000000000000000008152600160a060020a0388811660048301526024820184905287811660448301523060648301527f80000000000000000000000000000000000000000000000000000000000000006084830152600060a4830181905260c483015291519293509088169163cb3c28c791849160e480830192602092919082900301818588803b1580156109b057600080fd5b600054600160a060020a031681565b60008060008060006116ed8787613289565b88600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561172b57600080fd5b505af115801561173f573d6000803e3d6000fd5b505050506040513d602081101561175557600080fd5b5051604080517fa64ed8ba00000000000000000000000000000000000000000000000000000000815290519196506000199550600160a060020a038b169163a64ed8ba916004808201926020929091908290030181600087803b1580156117bb57600080fd5b505af11580156117cf573d6000803e3d6000fd5b505050506040513d60208110156117e557600080fd5b505192505b6000831115611a405788600160a060020a0316634f64b2be600185036040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561183f57600080fd5b505af1158015611853573d6000803e3d6000fd5b505050506040513d602081101561186957600080fd5b50516040805160e160020a636eb1769f028152306004820152600160a060020a038c8116602483015291519294509084169163dd62ed3e916044808201926020929091908290030181600087803b1580156118c357600080fd5b505af11580156118d7573d6000803e3d6000fd5b505050506040513d60208110156118ed57600080fd5b5051151561191357611911600160a060020a0383168a60001963ffffffff61311116565b505b611a2682600160a060020a03166370a082318b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561197157600080fd5b505af1158015611985573d6000803e3d6000fd5b505050506040513d602081101561199b57600080fd5b50516040805160e060020a6370a08231028152306004820152905161092b91600160a060020a038716916370a08231916024808201926020929091908290030181600087803b1580156119ed57600080fd5b505af1158015611a01573d6000803e3d6000fd5b505050506040513d6020811015611a1757600080fd5b5051889063ffffffff6130cd16565b905083811015611a34578093505b600019909201916117ea565b87841015611a98576040805160e560020a62461bcd02815260206004820152601c60248201527f6275793a2072657475726e2076616c756520697320746f6f206c6f7700000000604482015290519081900360640190fd5b604080517feba3cdfe000000000000000000000000000000000000000000000000000000008152336004820152602481018690529051600160a060020a038b169163eba3cdfe91604480830192600092919082900301818387803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b5050506000303111159050611b51576040513390303180156108fc02916000818181858888f19350505050158015611b4f573d6000803e3d6000fd5b505b88600160a060020a031663a64ed8ba6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611b8f57600080fd5b505af1158015611ba3573d6000803e3d6000fd5b505050506040513d6020811015611bb957600080fd5b505192505b6000831115611d635788600160a060020a0316634f64b2be600185036040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b158015611c1357600080fd5b505af1158015611c27573d6000803e3d6000fd5b505050506040513d6020811015611c3d57600080fd5b50516040805160e060020a6370a082310281523060048201529051919350600091600160a060020a038516916370a0823191602480830192602092919082900301818787803b158015611c8f57600080fd5b505af1158015611ca3573d6000803e3d6000fd5b505050506040513d6020811015611cb957600080fd5b50511115611d57576040805160e060020a6370a082310281523060048201529051611d55913391600160a060020a038616916370a082319160248083019260209291908290030181600087803b158015611d1257600080fd5b505af1158015611d26573d6000803e3d6000fd5b505050506040513d6020811015611d3c57600080fd5b5051600160a060020a038516919063ffffffff6131d516565b505b60001990920191611bbe565b505050505050505050565b610aa2600160a060020a038316868363ffffffff6131d516565b6000611e088261092b85888886818110611d9e57fe5b90506020020135600160a060020a0316600160a060020a03166370a082318b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610b4c57600080fd5b905085600160a060020a031663f3898a9786868460016040518563ffffffff1660e060020a02815260040180806020018481526020018381526020018281038252868682818152602001925060200280828437820191505095505050505050602060405180830381600087803b158015610cd557600080fd5b81600160a060020a0316632e1a7d4d826040518263ffffffff1660e060020a02815260040180828152602001915050600060405180830381600087803b158015611eca57600080fd5b505af115801561090c573d6000803e3d6000fd5b6000611f438261092b8588600160a060020a03166370a08231306040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610b4c57600080fd5b604080517fdc3193f9000000000000000000000000000000000000000000000000000000008152600160a060020a038981166004830152888116602483015287166044820152606481018390529051919250309163dc3193f99160848082019260009290919082900301818387803b158015611fbe57600080fd5b505af1158015611fd2573d6000803e3d6000fd5b50505050505050505050565b60006120438261092b8587600160a060020a03166370a08231306040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610b4c57600080fd5b6040805160e160020a636eb1769f028152306004820152600160a060020a038a8116602483015291519293509086169163dd62ed3e916044808201926020929091908290030181600087803b15801561209b57600080fd5b505af11580156120af573d6000803e3d6000fd5b505050506040513d60208110156120c557600080fd5b5051156120e9576120e7600160a060020a03851688600063ffffffff61311116565b505b612103600160a060020a038516888363ffffffff61311116565b5086600160a060020a03168686604051808383808284378201915050925050506000604051808303816000865af1915050151561149857600080fd5b83600160a060020a03168184846040518083838082843782019150509250505060006040518083038185875af192505050151561217b57600080fd5b50505050565b60006121e68261092b8587600160a060020a03166370a08231306040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610b4c57600080fd5b9050612103600160a060020a038516888363ffffffff6131d516565b6040805160e160020a636eb1769f028152306004820152600160a060020a03868116602483015291519185169163dd62ed3e916044808201926020929091908290030181600087803b15801561225757600080fd5b505af115801561226b573d6000803e3d6000fd5b505050506040513d602081101561228157600080fd5b505115156122a7576122a5600160a060020a0384168560001963ffffffff61311116565b505b604080517fcb3c28c7000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301526024820184905284811660448301523060648301527f80000000000000000000000000000000000000000000000000000000000000006084830152600060a4830181905260c4830181905292519087169263cb3c28c79260e480820193602093909283900390910190829087803b1580156108e257600080fd5b600054600160a060020a0316331461236f57600080fd5b61237881613303565b50565b8282600081811061238857fe5b6040805160e160020a636eb1769f028152306004820152600160a060020a0389811660248301529151602093840295909501359091169363dd62ed3e9350604480830193928290030181600087803b1580156123e357600080fd5b505af11580156123f7573d6000803e3d6000fd5b505050506040513d602081101561240d57600080fd5b5051151561242b576124298460001985856000818110610c3457fe5b505b83600160a060020a031663c7ba24bc84848460016040518563ffffffff1660e060020a02815260040180806020018481526020018381526020018281038252868682818152602001925060200280828437820191505095505050505050602060405180830381600087803b1580156108e257600080fd5b6000606060008060008089516001018851141515612530576040805160e560020a62461bcd02815260206004820152603a60248201527f6275793a205f6461746173496e64657865732073686f756c642073746172742060448201527f77697468203020616e6420656e642077697468204c454e475448000000000000606482015290519081900360840190fd5b89518751146125af576040805160e560020a62461bcd02815260206004820152603660248201527f6275793a205f76616c7565732073686f756c642068617665207468652073616d60448201527f65206c656e677468206173205f65786368616e67657300000000000000000000606482015290519081900360840190fd5b600095505b8951861015612a635787868151811015156125cb57fe5b9060200190602002015188876001018151811015156125e657fe5b90602001906020020151036040519080825280601f01601f19166020018201604052801561261e578160200160208202803883390190505b509450878681518110151561262f57fe5b9060200190602002015193505b878660010181518110151561264d57fe5b9060200190602002015184101561271957888481518110151561266c57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028589888151811015156126c657fe5b9060200190602002015186038151811015156126de57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060019093019261263c565b600160a060020a038b16158015906127485750868681518110151561273a57fe5b906020019060200201516000145b15612936578a600160a060020a031663dd62ed3e308c8981518110151561276b57fe5b60209081029091018101516040805160e060020a63ffffffff8716028152600160a060020a039485166004820152939091166024840152516044808401938290030181600087803b1580156127bf57600080fd5b505af11580156127d3573d6000803e3d6000fd5b505050506040513d60208110156127e957600080fd5b50511515612827576128258a8781518110151561280257fe5b60209081029091010151600160a060020a038d169060001963ffffffff61311116565b505b898681518110151561283557fe5b90602001906020020151600160a060020a03168560405180828051906020019080838360005b8381101561287357818101518382015260200161285b565b50505050905090810190601f1680156128a05780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af19150501515612931576040805160e560020a62461bcd02815260206004820152602360248201527f6275793a2065786368616e6765206172626974726172792063616c6c2066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b612a58565b898681518110151561294457fe5b90602001906020020151600160a060020a0316878781518110151561296557fe5b906020019060200201518660405180828051906020019080838360005b8381101561299a578181015183820152602001612982565b50505050905090810190601f1680156129c75780820380516001836020036101000a031916815260200191505b5091505060006040518083038185875af1925050501515612a58576040805160e560020a62461bcd02815260206004820152602360248201527f6275793a2065786368616e6765206172626974726172792063616c6c2066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6001909501946125b4565b8c600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015612aa157600080fd5b505af1158015612ab5573d6000803e3d6000fd5b505050506040513d6020811015612acb57600080fd5b5051604080517fa64ed8ba00000000000000000000000000000000000000000000000000000000815290519195506000199450600160a060020a038f169163a64ed8ba916004808201926020929091908290030181600087803b158015612b3157600080fd5b505af1158015612b45573d6000803e3d6000fd5b505050506040513d6020811015612b5b57600080fd5b505195505b6000861115612de4578c600160a060020a0316634f64b2be600188036040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b158015612bb557600080fd5b505af1158015612bc9573d6000803e3d6000fd5b505050506040513d6020811015612bdf57600080fd5b8101908080519060200190929190505050915081600160a060020a031663dd62ed3e308f6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182600160a060020a0316600160a060020a0316815260200192505050602060405180830381600087803b158015612c6757600080fd5b505af1158015612c7b573d6000803e3d6000fd5b505050506040513d6020811015612c9157600080fd5b50511515612cb757612cb5600160a060020a0383168e60001963ffffffff61311116565b505b612dca82600160a060020a03166370a082318f6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015612d1557600080fd5b505af1158015612d29573d6000803e3d6000fd5b505050506040513d6020811015612d3f57600080fd5b50516040805160e060020a6370a08231028152306004820152905161092b91600160a060020a038716916370a08231916024808201926020929091908290030181600087803b158015612d9157600080fd5b505af1158015612da5573d6000803e3d6000fd5b505050506040513d6020811015612dbb57600080fd5b5051879063ffffffff6130cd16565b905082811015612dd8578092505b60001990950194612b60565b8b831015612e3c576040805160e560020a62461bcd02815260206004820152601c60248201527f6275793a2072657475726e2076616c756520697320746f6f206c6f7700000000604482015290519081900360640190fd5b604080517feba3cdfe000000000000000000000000000000000000000000000000000000008152336004820152602481018590529051600160a060020a038f169163eba3cdfe91604480830192600092919082900301818387803b158015612ea357600080fd5b505af1158015612eb7573d6000803e3d6000fd5b5050506000303111159050612ef5576040513390303180156108fc02916000818181858888f19350505050158015612ef3573d6000803e3d6000fd5b505b600160a060020a038b1615801590612f8457506040805160e060020a6370a082310281523060048201529051600091600160a060020a038e16916370a082319160248082019260209290919082900301818787803b158015612f5657600080fd5b505af1158015612f6a573d6000803e3d6000fd5b505050506040513d6020811015612f8057600080fd5b5051115b1561301f576040805160e060020a6370a08231028152306004820152905161301d913391600160a060020a038f16916370a082319160248083019260209291908290030181600087803b158015612fda57600080fd5b505af1158015612fee573d6000803e3d6000fd5b505050506040513d602081101561300457600080fd5b5051600160a060020a038e16919063ffffffff6131d516565b505b50505050505050505050505050565b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561309157600080fd5b505af11580156130a5573d6000803e3d6000fd5b505050506040513d60208110156130bb57600080fd5b505115156130c857600080fd5b505050565b60008215156130de575060006130f6565b508181028183828115156130ee57fe5b04146130f657fe5b92915050565b6000818381151561310957fe5b049392505050565b600061311c84613380565b151561312757600080fd5b83600160a060020a031660405180807f617070726f766528616464726573732c75696e743235362900000000000000008152506018019050604051809103902060e060020a900484846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a03168152602001828152602001925050506000604051808303816000875af19250505015156131c557600080fd5b6131cd613388565b949350505050565b60006131e084613380565b15156131eb57600080fd5b83600160a060020a031660405180807f7472616e7366657228616464726573732c75696e7432353629000000000000008152506019019050604051809103902060e060020a900484846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a03168152602001828152602001925050506000604051808303816000875af19250505015156131c557600080fd5b60005b60018251038110156130c8576132f03060008585858151811015156132ad57fe5b9060200190602002015186868151811015156132c557fe5b9060200190602002015187876001018151811015156132e057fe5b90602001906020020151036133b7565b15156132fb57600080fd5b60010161328c565b600160a060020a038116151561331857600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000903b1190565b60003d801561339e57602081146133a757600080fd5b600191506133b3565b60206000803e60005191505b5090565b600060405160208501600082858784018a8c6187965a03f1989750505050505050505600a165627a7a72305820a52dda8776ba8c333f2029fd37701055c4e42440fd18427d0f848ce5343c52620029

Swarm Source

bzzr://a52dda8776ba8c333f2029fd37701055c4e42440fd18427d0f848ce5343c5262

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.