DAOfiV1Router01.removeLiquidityETH() does not support tokens with no return value
While the rest of the system uses the `safeTransfer*` pattern, allowing tokens that do not return a boolean value on `transfer()` or `transferFrom()`, `DAOfiV1Router01.removeLiquidityETH()` throws and consumes all remaining gas if the base token does not return `true`.\\nNote that the deposit in this case can still be withdrawn without unwrapping the Eth using `removeLiquidity()`.\\n```\\nfunction removeLiquidityETH(\\n    LiquidityParams calldata lp,\\n    uint deadline\\n) external override ensure(deadline) returns (uint amountToken, uint amountETH) {\\n    IDAOfiV1Pair pair = IDAOfiV1Pair(DAOfiV1Library.pairFor(factory, lp.tokenBase, WETH, lp.slopeNumerator, lp.n, lp.fee));\\n    require(msg.sender == pair.pairOwner(), 'DAOfiV1Router: FORBIDDEN');\\n    (amountToken, amountETH) = pair.withdraw(address(this));\\n    assert(IERC20(lp.tokenBase).transfer(lp.to, amountToken));\\n    IWETH10(WETH).withdraw(amountETH);\\n    TransferHelper.safeTransferETH(lp.to, amountETH);\\n}\\n```\\n
Be consistent with the use of `safeTransfer*`, and do not use `assert()` in cases where the condition can be false.
```\\nfunction removeLiquidityETH(\\n    LiquidityParams calldata lp,\\n    uint deadline\\n) external override ensure(deadline) returns (uint amountToken, uint amountETH) {\\n    IDAOfiV1Pair pair = IDAOfiV1Pair(DAOfiV1Library.pairFor(factory, lp.tokenBase, WETH, lp.slopeNumerator, lp.n, lp.fee));\\n    require(msg.sender == pair.pairOwner(), 'DAOfiV1Router: FORBIDDEN');\\n    (amountToken, amountETH) = pair.withdraw(address(this));\\n    assert(IERC20(lp.tokenBase).transfer(lp.to, amountToken));\\n    IWETH10(WETH).withdraw(amountETH);\\n    TransferHelper.safeTransferETH(lp.to, amountETH);\\n}\\n```\\n