abstract contract ReclaimerToken is ERC20 {
    /**
     * @dev send all eth balance in the contract to another address
     * @param _to address to send eth balance to
     */
    function reclaimEther(address payable _to) external onlyOwner {
        _to.transfer(address(this).balance);
    }

    /**
     * @dev send all token balance of an arbitrary erc20 token
     * in the contract to another address
     * @param token token to reclaim
     * @param _to address to send eth balance to
     */
    function reclaimToken(IERC20 token, address _to) external onlyOwner {
        uint256 balance = token.balanceOf(address(this));
        token.transfer(_to, balance);
    }
}
/**
 * @title ReclaimerToken
 * @dev ERC20 token which allows owner to reclaim ERC20 tokens
 * or ether sent to this contract
 */
function reclaimToken(IERC20 token, address _to) external onlyOwner {
    uint256 balance = token.balanceOf(address(this));
    token.transfer(_to, balance);
}

/**
 * @dev send all token balance of an arbitrary erc20 token
 * in the contract to another address
 * @param token token to reclaim
 * @param _to address to send eth balance to
 */