contract EthPledgePool is PledgePoolBase {
  using SafeMath for uint256;
  using AddressUtils for address;
  // -----------------------------------------
  // TokenPool external interface
  // -----------------------------------------

  /**
   * @dev fallback function
   */
  function() external payable {}


  /**
   * @dev recycle, Executed in some extreme unforsee cases, to avoid eth locked.
   * @param _amount Number of eth to withdraw
   * @param _contract Multi-signature contracts, for the fair and just treatment of funds.
   */
  function recycle(uint256 _amount,address _contract) public onlyOwner returns(bool) {
    require(_amount <= address(this).balance && _contract.isContract());
    _contract.transfer(_amount);
    return true;
  }


  /**
   * @dev kill, kills the contract and send everything to `_address`..
   */
  function kills() public onlyOwner {
    selfdestruct(owner);
  }


  // -----------------------------------------
  // token pool internal interface (extensible)
  // -----------------------------------------


  /**
   * @dev Executed when a Refund has been validated and is ready to be executed.
   *  Not necessarily emits/sends tokens.
   */
  function _processRefund(uint256 _returnSum, address _targetAddress, uint256 _pledgeId) internal {
    super._processRefund(_returnSum, _targetAddress, _pledgeId);
    require(address(this).balance >= _returnSum);
    _targetAddress.transfer(_returnSum);
  }

  /**
   * @dev Withdraw pledge token.
   */
  function _processWithdraw(address _maker, uint256 _num, uint256 _pledgeId) internal {
    super._processWithdraw(_maker, _num, _pledgeId);
    require(address(this).balance >= _num);
    _maker.transfer(_num);
  }

}
/**
 * @title eth pledge pool.
 * @dev the tokenPool for ETH.
 */
function _processRefund(uint256 _returnSum, address _targetAddress, uint256 _pledgeId) internal {
    super._processRefund(_returnSum, _targetAddress, _pledgeId);
    require(address(this).balance >= _returnSum);
    _targetAddress.transfer(_returnSum);
  }
/**
 * @dev Executed when a Refund has been validated and is ready to be executed.
 *  Not necessarily emits/sends tokens.
 */