contract Withdrawable is Ownable {

    /// @notice Withdraw ether contained in this contract and send it back to owner
    /// @dev onlyOwner modifier only allows the contract owner to run the code
    /// @param _token The address of the token that the user wants to withdraw
    /// @param _amount The amount of tokens that the caller wants to withdraw
    /// @return bool value indicating whether the transfer was successful
    function withdrawToken(address _token, uint256 _amount) external onlyOwner returns (bool) {
        return ERC20SafeTransfer.safeTransfer(_token, owner, _amount);
    }

    /// @notice Withdraw ether contained in this contract and send it back to owner
    /// @dev onlyOwner modifier only allows the contract owner to run the code
    /// @param _amount The amount of ether that the caller wants to withdraw
    function withdrawETH(uint256 _amount) external onlyOwner {
        owner.transfer(_amount);
    }
}
/// @title A contract which allows its owner to withdraw any ether which is contained inside
function withdrawToken(address _token, uint256 _amount) external onlyOwner returns (bool) {
    return ERC20SafeTransfer.safeTransfer(_token, owner, _amount);
}

/// @notice Withdraw ether contained in this contract and send it back to owner
/// @dev onlyOwner modifier only allows the contract owner to run the code
/// @param _token The address of the token that the user wants to withdraw
/// @param _amount The amount of tokens that the caller wants to withdraw
/// @return bool value indicating whether the transfer was successful