```\nfunction removeToken(\n    bytes4 tokenSource, \n    bytes32 tokenSourceAddress, \n    address newAuthority) external onlyRole(TOKEN_MANAGER) {\n    require(newAuthority != address(0), "Bridge: zero address authority");\n    address tokenAddress = tokenSourceMap[tokenSource][tokenSourceAddress];\n    require(tokenAddress != address(0), "Bridge: token not found");\n    TokenInfo memory tokenInfo = tokenInfos[tokenAddress];\n\n    if (tokenInfo.tokenType == TokenType.Base && address(this).balance > 0) {\n        payable(newAuthority).transfer(address(this).balance);\n    }\n\n    uint256 tokenBalance = IERC20(tokenAddress).balanceOf(address(this));\n    if (tokenBalance > 0) {\n        IERC20(tokenAddress).safeTransfer(newAuthority, tokenBalance);\n    }\n\n    if (tokenInfo.tokenType == TokenType.Wrapped) {\n        WrappedToken(tokenAddress).transferOwnership(newAuthority);\n    } else if (tokenInfo.tokenType == TokenType.WrappedV0) {\n        IWrappedTokenV0(tokenAddress).changeAuthority(newAuthority);\n    }\n\n    delete tokenInfos[tokenAddress];\n    delete tokenSourceMap[tokenSource][tokenSourceAddress];\n}\n```\n