From b4a5f2ea024ad0c9a3f4f578bee5705f77f69e76 Mon Sep 17 00:00:00 2001 From: Jac Fitzgerald Date: Thu, 30 Jul 2026 20:11:54 -0700 Subject: [PATCH 1/6] feat: add --idp-configuration-id flag for multi-IDP Tableau Cloud sites Tableau Cloud 2024.3+ supports up to 20 identity providers per site, and the REST API takes an idpConfigurationId attribute when creating users. Neither `createsiteusers` nor `createUsers` previously exposed the field, so operators on multi-IDP sites had to bypass tabcmd and script the REST API directly. Adds `--idp-configuration-id UUID` to both commands. The flag applies to every user in the batch. Argparse's add_mutually_exclusive_group enforces that --auth-type and --idp-configuration-id cannot both be passed (TSC's create_req rejects that combination on the wire). The CSV format is unchanged (still 8 columns) so it stays consistent with Tableau Server's web-UI user-import and tabcmd 1. Per-user IDP assignment via a 9th CSV column was considered and deferred; it would require a coordinated cross-tool format update. While here, extracts the per-user `--role`/`--auth-type`/`--idp-configuration-id` application into UserCommand.apply_cli_overrides, removing the block duplicated between the two commands, and drops an unused tableauserverclient import from create_users_command.py. Adds 6 new tests: 4 for the parser (both commands, valid parse + mutual exclusion), 2 for apply_cli_overrides (IDP clears pre-existing auth_setting, role flag applied). All 347 tests pass. Closes #393 Co-Authored-By: Claude Opus 4.7 (1M context) --- tabcmd/commands/user/create_site_users.py | 7 +-- tabcmd/commands/user/create_users_command.py | 9 +-- tabcmd/commands/user/user_data.py | 29 +++++++++- .../locales/en/tabcmd_messages_en.properties | 1 + tests/commands/test_run_commands.py | 4 ++ tests/commands/test_user_utils.py | 55 +++++++++++++++++++ .../parsers/test_parser_create_site_users.py | 21 +++++++ tests/parsers/test_parser_create_user.py | 21 +++++++ 8 files changed, 132 insertions(+), 15 deletions(-) diff --git a/tabcmd/commands/user/create_site_users.py b/tabcmd/commands/user/create_site_users.py index c63436b0..f51257ae 100644 --- a/tabcmd/commands/user/create_site_users.py +++ b/tabcmd/commands/user/create_site_users.py @@ -24,7 +24,7 @@ def define_args(create_site_users_parser): UserCommand.set_role_arg(args_group) set_users_file_positional(args_group) set_completeness_options(args_group) - UserCommand.set_auth_arg(args_group) + UserCommand.set_auth_and_idp_args(args_group) @classmethod def run_command(cls, args): @@ -46,10 +46,7 @@ def run_command(cls, args): error_list = [] for user_obj in user_obj_list: try: - if args.role: - user_obj.site_role = args.role # tsc is case sensitive - if args.auth_type: - user_obj.auth_setting = args.auth_type + UserCommand.apply_cli_overrides(user_obj, args) number_of_users_listed += 1 result = server.users.add(user_obj) logger.info(_("common.output.succeeded").format(user_obj.name)) diff --git a/tabcmd/commands/user/create_users_command.py b/tabcmd/commands/user/create_users_command.py index 9dafcb3f..fa47def0 100644 --- a/tabcmd/commands/user/create_users_command.py +++ b/tabcmd/commands/user/create_users_command.py @@ -1,5 +1,3 @@ -import tableauserverclient as TSC - from tabcmd.commands.auth.session import Session from tabcmd.commands.constants import Errors from tabcmd.execution.global_options import * @@ -24,7 +22,7 @@ def define_args(create_users_parser): UserCommand.set_role_arg(args_group) set_users_file_positional(args_group) set_completeness_options(args_group) - UserCommand.set_auth_arg(args_group) + UserCommand.set_auth_and_idp_args(args_group) @classmethod def run_command(cls, args): @@ -54,10 +52,7 @@ def run_command(cls, args): for user_obj in user_obj_list: try: number_of_users_listed += 1 - if args.role: - user_obj.site_role = args.role - if args.auth_type: - user_obj.auth_setting = args.auth_type + UserCommand.apply_cli_overrides(user_obj, args) server.users.add(user_obj) logger.info(_("common.output.succeeded").format(user_obj.name)) number_of_users_added += 1 diff --git a/tabcmd/commands/user/user_data.py b/tabcmd/commands/user/user_data.py index 272a5375..40a4f23d 100644 --- a/tabcmd/commands/user/user_data.py +++ b/tabcmd/commands/user/user_data.py @@ -117,17 +117,40 @@ def set_role_arg(parser): return parser @staticmethod - def set_auth_arg(parser): - parser.add_argument( + def set_auth_and_idp_args(parser): + # --auth-type and --idp-configuration-id both drive the user's authentication; + # the REST API rejects requests that set both, so argparse enforces exclusion here. + auth_group = parser.add_mutually_exclusive_group() + auth_group.add_argument( "--auth-type", metavar="TYPE", choices=auth_types, type=case_insensitive_string_type(auth_types), - # default="TableauID", # default is Local for on-prem, TableauID for Online. Does the server apply the default? help=_("tabcmd.user.help.auth_type") + " " + ", ".join(auth_types), ) + auth_group.add_argument( + "--idp-configuration-id", + metavar="UUID", + help=_("tabcmd.user.help.idp_configuration_id"), + ) return parser + @staticmethod + def apply_cli_overrides(user_obj, args) -> None: + """Apply --role / --auth-type / --idp-configuration-id CLI overrides onto a UserItem. + + --idp-configuration-id and --auth-type are mutually exclusive per the REST API. + When an IDP is provided (via the CLI flag), any auth_setting on the user is + cleared so the outgoing request has only one of the two attributes set. + """ + if args.role: + user_obj.site_role = args.role # TSC is case sensitive + if args.idp_configuration_id: + user_obj.idp_configuration_id = args.idp_configuration_id + user_obj.auth_setting = None + elif args.auth_type: + user_obj.auth_setting = args.auth_type + # read the file containing usernames or user details and validate each line # log out any errors encountered # returns the number of valid lines in the file diff --git a/tabcmd/locales/en/tabcmd_messages_en.properties b/tabcmd/locales/en/tabcmd_messages_en.properties index 7eda4bff..ed783ebd 100644 --- a/tabcmd/locales/en/tabcmd_messages_en.properties +++ b/tabcmd/locales/en/tabcmd_messages_en.properties @@ -214,6 +214,7 @@ tabcmd.status.job_completed=Job completed tabcmd.status.waiting_for_refresh_job=Waiting for refresh job to begin tabcmd.user.error.site_role_required=Site role is required tabcmd.user.help.auth_type=Assigns the authentication type for all users in the CSV file. Possible values: +tabcmd.user.help.idp_configuration_id=Assigns an identity provider (IDP) configuration ID to all users in the CSV file. Required when your Tableau Cloud site has multiple IDPs enabled. Mutually exclusive with --auth-type. tabcmd.user.help.site_role=Specifies a site role for all users in the .csv file. Possible roles: tabcmd.warning.calculations_not_supported=Adding or removing Calculations tasks are not supported tabcmdparser.global.behaviors=Global behaviors: diff --git a/tests/commands/test_run_commands.py b/tests/commands/test_run_commands.py index f1777d13..c412aa75 100644 --- a/tests/commands/test_run_commands.py +++ b/tests/commands/test_run_commands.py @@ -428,6 +428,7 @@ def test_create_site_users(self, mock_session, mock_server): mock_args.site_name = None mock_args.role = "Viewer" mock_args.auth_type = "SAML" + mock_args.idp_configuration_id = None create_site_users.CreateSiteUsersCommand.run_command(mock_args) mock_session.assert_called() @@ -446,6 +447,9 @@ def test_create_user(self, mock_session, mock_server): mock_args.filename = RunCommandsTest._set_up_file() mock_args.site_name = None mock_args.require_all_valid = False + mock_args.role = None + mock_args.auth_type = None + mock_args.idp_configuration_id = None create_users_command.CreateUsersCommand.run_command(mock_args) mock_session.assert_called() diff --git a/tests/commands/test_user_utils.py b/tests/commands/test_user_utils.py index 67de8d56..44df96ae 100644 --- a/tests/commands/test_user_utils.py +++ b/tests/commands/test_user_utils.py @@ -1,3 +1,4 @@ +import argparse import unittest from unittest.mock import * from tabcmd.commands.user.user_data import UserCommand, Userdata @@ -150,3 +151,57 @@ def test_parse_line_preserves_role(self): user = UserCommand._parse_line("username, pword, fname, creator, none, yes, email") assert user is not None assert user.site_role == "Creator", f"Expected Creator, got {user.site_role}" + + +class ApplyCliOverridesTest(unittest.TestCase): + """ + Covers UserCommand.apply_cli_overrides, which both createsiteusers and + createUsers invoke before calling server.users.add. + """ + + def _mk_args(self, role=None, auth_type=None, idp_configuration_id=None): + return argparse.Namespace(role=role, auth_type=auth_type, idp_configuration_id=idp_configuration_id) + + def test_idp_flag_applied_when_present(self): + user = TSC.UserItem("alice", "Viewer") + UserCommand.apply_cli_overrides(user, self._mk_args(idp_configuration_id="idp-uuid-1")) + assert user.idp_configuration_id == "idp-uuid-1" + assert user.auth_setting is None + + def test_idp_flag_overrides_auth_type_flag(self): + # Argparse's mutually_exclusive_group prevents both flags from being passed + # via the CLI in practice, but the runtime clear is still the last-line-of-defense + # so the wire request never has both attributes. + user = TSC.UserItem("alice", "Viewer") + UserCommand.apply_cli_overrides(user, self._mk_args(auth_type="SAML", idp_configuration_id="idp-uuid-2")) + assert user.idp_configuration_id == "idp-uuid-2" + assert user.auth_setting is None + + def test_idp_flag_clears_existing_auth_setting(self): + # A user_obj may already have an auth_setting picked up from the CSV row's + # 8th column before apply_cli_overrides runs. If the operator passes + # --idp-configuration-id, that IDP wins and the pre-existing auth is cleared. + user = TSC.UserItem("alice", "Viewer") + user.auth_setting = "OpenID" # e.g. set from CSV col 8 + UserCommand.apply_cli_overrides(user, self._mk_args(idp_configuration_id="idp-uuid-3")) + assert user.idp_configuration_id == "idp-uuid-3" + assert user.auth_setting is None + + def test_auth_type_still_works_when_no_idp(self): + user = TSC.UserItem("alice", "Viewer") + UserCommand.apply_cli_overrides(user, self._mk_args(auth_type="SAML")) + assert user.auth_setting == "SAML" + assert user.idp_configuration_id is None + + def test_neither_flag_leaves_user_unchanged(self): + # Backward-compat: users invoking without either flag see no change. + user = TSC.UserItem("alice", "Viewer") + user.auth_setting = "OpenID" + UserCommand.apply_cli_overrides(user, self._mk_args()) + assert user.auth_setting == "OpenID" + assert user.idp_configuration_id is None + + def test_role_flag_applied(self): + user = TSC.UserItem("alice", "Viewer") + UserCommand.apply_cli_overrides(user, self._mk_args(role="Creator")) + assert user.site_role == "Creator" diff --git a/tests/parsers/test_parser_create_site_users.py b/tests/parsers/test_parser_create_site_users.py index 93a51db2..7e31bf74 100644 --- a/tests/parsers/test_parser_create_site_users.py +++ b/tests/parsers/test_parser_create_site_users.py @@ -48,3 +48,24 @@ def test_create_site_user_parser_auth_TabId_NotAvailable(self): mock_args = [commandname, "users.csv", "--site", "site-name", "--auth-type", "TableauId"] with self.assertRaises(SystemExit): args = self.parser_under_test.parse_args(mock_args) + + def test_create_site_user_parser_idp_configuration_id(self): + with mock.patch("builtins.open", mock.mock_open(read_data="test")): + mock_args = [commandname, "users.csv", "--idp-configuration-id", "abc-123-idp"] + args = self.parser_under_test.parse_args(mock_args) + assert args.idp_configuration_id == "abc-123-idp", args + assert args.auth_type is None, args + + def test_create_site_user_parser_auth_and_idp_mutually_exclusive(self): + # argparse should reject requests that pass both flags at once. + with mock.patch("builtins.open", mock.mock_open(read_data="test")): + mock_args = [ + commandname, + "users.csv", + "--auth-type", + "SAML", + "--idp-configuration-id", + "abc-123-idp", + ] + with self.assertRaises(SystemExit): + self.parser_under_test.parse_args(mock_args) diff --git a/tests/parsers/test_parser_create_user.py b/tests/parsers/test_parser_create_user.py index d4a533a1..1f29e7a9 100644 --- a/tests/parsers/test_parser_create_user.py +++ b/tests/parsers/test_parser_create_user.py @@ -28,3 +28,24 @@ def test_create_user_parser_role(self): mock_args = [commandname, "users.csv", "-r", "SiteAdministrator"] args = self.parser_under_test.parse_args(mock_args) assert args.role.lower() == "SiteAdministrator".lower(), args + + def test_create_user_parser_idp_configuration_id(self): + with mock.patch("builtins.open", mock.mock_open(read_data="test")): + mock_args = [commandname, "users.csv", "--idp-configuration-id", "abc-123-idp"] + args = self.parser_under_test.parse_args(mock_args) + assert args.idp_configuration_id == "abc-123-idp", args + assert args.auth_type is None, args + + def test_create_user_parser_auth_and_idp_mutually_exclusive(self): + # argparse should reject requests that pass both flags at once. + with mock.patch("builtins.open", mock.mock_open(read_data="test")): + mock_args = [ + commandname, + "users.csv", + "--auth-type", + "SAML", + "--idp-configuration-id", + "abc-123-idp", + ] + with self.assertRaises(SystemExit): + self.parser_under_test.parse_args(mock_args) From 82672b16d305627dc0ce26f5f332abf10ceab066 Mon Sep 17 00:00:00 2001 From: Jac Fitzgerald Date: Thu, 10 Sep 2026 12:35:36 -0700 Subject: [PATCH 2/6] Require UUID format for --idp-configuration-id Address Copilot review comments on #444 requesting UUID validation on the flag value. Malformed input now exits with an actionable error at argument-parse time instead of failing later with a server-side validation error. Co-Authored-By: Claude Opus 4.7 (1M context) --- tabcmd/commands/user/user_data.py | 16 ++++++++++++++++ tabcmd/locales/en/tabcmd_messages_en.properties | 1 + tests/parsers/test_parser_create_site_users.py | 15 ++++++++++++--- tests/parsers/test_parser_create_user.py | 15 ++++++++++++--- 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/tabcmd/commands/user/user_data.py b/tabcmd/commands/user/user_data.py index 40a4f23d..52437fe3 100644 --- a/tabcmd/commands/user/user_data.py +++ b/tabcmd/commands/user/user_data.py @@ -1,6 +1,7 @@ import argparse import io import logging +import uuid from enum import IntEnum from typing import List, Callable, Optional @@ -12,6 +13,20 @@ from tabcmd.execution.global_options import case_insensitive_string_type +def _idp_configuration_id_type(value: str) -> str: + """argparse ``type=`` callable that requires ``--idp-configuration-id`` to be a UUID. + + The REST API expects a UUID for this field; validating at argument-parse time + gives an immediate, actionable error rather than deferring to a server-side + 400 later in the run. + """ + try: + uuid.UUID(value) + except (ValueError, AttributeError, TypeError): + raise argparse.ArgumentTypeError(_("tabcmd.user.error.idp_configuration_id_invalid_uuid").format(value)) + return value + + class Userdata: def __init__(self): self.name = None @@ -131,6 +146,7 @@ def set_auth_and_idp_args(parser): auth_group.add_argument( "--idp-configuration-id", metavar="UUID", + type=_idp_configuration_id_type, help=_("tabcmd.user.help.idp_configuration_id"), ) return parser diff --git a/tabcmd/locales/en/tabcmd_messages_en.properties b/tabcmd/locales/en/tabcmd_messages_en.properties index ed783ebd..4736672d 100644 --- a/tabcmd/locales/en/tabcmd_messages_en.properties +++ b/tabcmd/locales/en/tabcmd_messages_en.properties @@ -212,6 +212,7 @@ tabcmd.server.error.site_not_found=Could not get site from server tabcmd.status.fetched_user_details=Fetched user details from server tabcmd.status.job_completed=Job completed tabcmd.status.waiting_for_refresh_job=Waiting for refresh job to begin +tabcmd.user.error.idp_configuration_id_invalid_uuid=--idp-configuration-id must be a valid UUID (got: ''{0}'') tabcmd.user.error.site_role_required=Site role is required tabcmd.user.help.auth_type=Assigns the authentication type for all users in the CSV file. Possible values: tabcmd.user.help.idp_configuration_id=Assigns an identity provider (IDP) configuration ID to all users in the CSV file. Required when your Tableau Cloud site has multiple IDPs enabled. Mutually exclusive with --auth-type. diff --git a/tests/parsers/test_parser_create_site_users.py b/tests/parsers/test_parser_create_site_users.py index 7e31bf74..9a4e659c 100644 --- a/tests/parsers/test_parser_create_site_users.py +++ b/tests/parsers/test_parser_create_site_users.py @@ -51,9 +51,9 @@ def test_create_site_user_parser_auth_TabId_NotAvailable(self): def test_create_site_user_parser_idp_configuration_id(self): with mock.patch("builtins.open", mock.mock_open(read_data="test")): - mock_args = [commandname, "users.csv", "--idp-configuration-id", "abc-123-idp"] + mock_args = [commandname, "users.csv", "--idp-configuration-id", "12345678-1234-5678-1234-567812345678"] args = self.parser_under_test.parse_args(mock_args) - assert args.idp_configuration_id == "abc-123-idp", args + assert args.idp_configuration_id == "12345678-1234-5678-1234-567812345678", args assert args.auth_type is None, args def test_create_site_user_parser_auth_and_idp_mutually_exclusive(self): @@ -65,7 +65,16 @@ def test_create_site_user_parser_auth_and_idp_mutually_exclusive(self): "--auth-type", "SAML", "--idp-configuration-id", - "abc-123-idp", + "12345678-1234-5678-1234-567812345678", ] with self.assertRaises(SystemExit): self.parser_under_test.parse_args(mock_args) + + def test_create_site_user_parser_idp_configuration_id_rejects_non_uuid(self): + # argparse should reject non-UUID values (typos, free text) at parse time + # rather than sending them to the REST API and failing with a server-side + # validation error. + with mock.patch("builtins.open", mock.mock_open(read_data="test")): + for bad_value in ("not-a-uuid", "abc-123-idp", ""): + with self.assertRaises(SystemExit): + self.parser_under_test.parse_args([commandname, "users.csv", "--idp-configuration-id", bad_value]) diff --git a/tests/parsers/test_parser_create_user.py b/tests/parsers/test_parser_create_user.py index 1f29e7a9..ee55d3c6 100644 --- a/tests/parsers/test_parser_create_user.py +++ b/tests/parsers/test_parser_create_user.py @@ -31,9 +31,9 @@ def test_create_user_parser_role(self): def test_create_user_parser_idp_configuration_id(self): with mock.patch("builtins.open", mock.mock_open(read_data="test")): - mock_args = [commandname, "users.csv", "--idp-configuration-id", "abc-123-idp"] + mock_args = [commandname, "users.csv", "--idp-configuration-id", "12345678-1234-5678-1234-567812345678"] args = self.parser_under_test.parse_args(mock_args) - assert args.idp_configuration_id == "abc-123-idp", args + assert args.idp_configuration_id == "12345678-1234-5678-1234-567812345678", args assert args.auth_type is None, args def test_create_user_parser_auth_and_idp_mutually_exclusive(self): @@ -45,7 +45,16 @@ def test_create_user_parser_auth_and_idp_mutually_exclusive(self): "--auth-type", "SAML", "--idp-configuration-id", - "abc-123-idp", + "12345678-1234-5678-1234-567812345678", ] with self.assertRaises(SystemExit): self.parser_under_test.parse_args(mock_args) + + def test_create_user_parser_idp_configuration_id_rejects_non_uuid(self): + # argparse should reject non-UUID values (typos, free text) at parse time + # rather than sending them to the REST API and failing with a server-side + # validation error. + with mock.patch("builtins.open", mock.mock_open(read_data="test")): + for bad_value in ("not-a-uuid", "abc-123-idp", ""): + with self.assertRaises(SystemExit): + self.parser_under_test.parse_args([commandname, "users.csv", "--idp-configuration-id", bad_value]) From 2fe7797e491f2fba457783d1901e6ad9e80be7be Mon Sep 17 00:00:00 2001 From: Jac Fitzgerald Date: Thu, 10 Sep 2026 14:23:28 -0700 Subject: [PATCH 3/6] Regenerate localized .mo files after doit localize Compiles the new tabcmd.user.error.idp_configuration_id_invalid_uuid key into the runtime gettext catalogs. Non-English locales fall back to English until translators supply their versions. Addresses Copilot's line comment on tabcmd_messages_en.properties:218. Co-Authored-By: Claude Opus 4.7 (1M context) --- tabcmd/locales/de/LC_MESSAGES/tabcmd.mo | Bin 19443 -> 19591 bytes tabcmd/locales/en/LC_MESSAGES/tabcmd.mo | Bin 20732 -> 22921 bytes tabcmd/locales/es/LC_MESSAGES/tabcmd.mo | Bin 19175 -> 19346 bytes tabcmd/locales/fr/LC_MESSAGES/tabcmd.mo | Bin 19599 -> 19776 bytes tabcmd/locales/ga/LC_MESSAGES/tabcmd.mo | Bin 19517 -> 19659 bytes tabcmd/locales/it/LC_MESSAGES/tabcmd.mo | Bin 19329 -> 19510 bytes tabcmd/locales/ja/LC_MESSAGES/tabcmd.mo | Bin 21856 -> 22037 bytes tabcmd/locales/ko/LC_MESSAGES/tabcmd.mo | Bin 19611 -> 19810 bytes tabcmd/locales/pt/LC_MESSAGES/tabcmd.mo | Bin 18559 -> 18733 bytes tabcmd/locales/sv/LC_MESSAGES/tabcmd.mo | Bin 17966 -> 18161 bytes tabcmd/locales/zh/LC_MESSAGES/tabcmd.mo | Bin 16694 -> 16916 bytes 11 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tabcmd/locales/de/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/de/LC_MESSAGES/tabcmd.mo index cac49e59979b37c6f1ff8c94d05485f8d51a94ca..bb3aab6b0d2c871bf7163f386c2a8b79917a78a7 100644 GIT binary patch delta 3701 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 lJy@FW*FTjuW+9Ln} diff --git a/tabcmd/locales/en/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/en/LC_MESSAGES/tabcmd.mo index a067f324e46517169c6aa3b84575f9fb3f72e1a8..92dc22cec7ae572afe045262dbe528d59f7d7f71 100644 GIT binary patch delta 7530 zcmb7{3zSvWdB^u4$Wva!J1Co%GXulrAukbmgFJ+c!&@ukxpU9V9Jq7O<=k@z1|K(% zrYkDwiYF>vu2xBEmXbD2a--NJZPP@TCTde{F(zfDMWt#hXsun;rP%)d_na99CG9F} znBU&}?DIYT``de;`S?iHo#m?1Z-@83-|+7f{*UMXpnmF||M&3_W5&@v2l+8$h8i;w z*20l+J-hTDUIZ?qvLKh%56rRNy~`Bk*rd&``wx4i(v8 z^pQgg^}-5R3%5cG?|@p8hoPkYVbXsYYKcxmy?+iW;0gSi3g^Sg@b{qneF2ta;E!m` zfKNbW_ByPAgLz2P%!dkOW759`V%zLX#t$WY1de6A49Ug32&K?#Pzrqn2gCjhE{0>q zpg(nBwlW}tEl`==22}$O!q34c;g#@ZD2YFWl5jNM)L#HC+zM4Q9Z(7VA(Z`Rq3pbx z^gn>aV)~3je{7k{@j4UEhb*gUfs*_HR4sfHN{JVt484(19ZP>aRL0jr1>OkpVfI2f zx;x=Fp{4&LhzWC|L_>zpLaohU7DgG&fs$$~)S70Xg(1|u`=J8=3&@XoIT?R9VKuT$ zWPAa%a3_>f2NE8JTGG;!G!)^_lYx^^k$nIy96~yheioF$?NAwZ@=JjnhFaSnLk0Yc zWc=4qN}huXa2V?)MN$dZLJ}yMblfnvLVTL9L)F6fp_F+JO4@&d3iJcWj~QfR1?r*J zcr{dj+n{#QeyDkOK_zq)%HA^&vCRoMR{Q_IXlTN4-kt(yKt-N4URAs)I0$ZsQYZtZND)fm`(a5hew&7h=@(E2Uxy0h6R1GO z5pE^3gbfL^Q15*eYTgkj#eS6Z{~pTT>4g0#B-O-ZXyJk@(O((uV1VF_4+p{sDzJy4 z4E`0AqgS9Dy$h8|e@-d&>!9YZgchcus{6}O0XzV;B;SMb_e&_n|D^`~m03UZ(!?oH z2A3w>nT!{b{yk6uJqC%v`~=GJn@Rst4huP&0a;bE0m@zurr=j0qMBn+HFTmx19i** z&RxAQE8%9Sz&fCw-v_UPPeB=Y2P)uU+)#R657lpkm^AHBfjkJM)Dy|`P zf5U#TH*%mL_dgBB%v|_9OhW~d;yiALYvBU;Bvc@0pfbK>R$SF}kmWRs;A)tLOW|Ws zHS-o!EmX~p52_JRN>74T`+qeJDbNC0M)O6e7mh+H@t4W-m*5=w@4zK+0v&9dT~Gnt z3sn)_CZvBW!|mg;cA??Y^x7ohC*x;hSEIn?_h9IpAW5q|q>^dCdx69yFVXwn%8 z=RgIv7HWHKhmx)%dH%<61pOaC8T>ia$#(*dgC9Z_<%nxyMV7;A`e~?L(E;V>>(`*a z0yxTm4uqdUVlk)St#HEPxF#Ng)9F7ACFOewM_(H+$r5;+@q=&+Op`w1nPX5jat6xJ z1S(UtvJj@=t`ZG7J_N6af1dDTxPtz=WyY+62jPwIB{&||FK5TVbx?-yfIKn}!Y{#B zAtuaC7+DA(f@9%7Kq-3$O3~7}^t^I$BhN|)$oCa&w#1k6fR{B0n!)M?ZVJ#In z5gvt_{{rj}&qCR$S{pl_4z;7uRWmSpQ; zEzCegeh5y2N8tqcBBb8TX?Q8DT^|Q96I%MKAh8=4stErSDxjahsrWZ1Xiy)f*M?ZC z<V3&*a|O!?NFKTg;L}mC`BHFQtl-<1pYIW0`I~8@GKkvt2V{sgP;Pb zhF8KVo6!F<8XFi;COe^uC4`@chath6w-U}{P||-1UI8D43hZepX-~pq@IN6t*!)>T zyer;@+K$t1h_7!4YMXZ6fc}#BZyAumfgDTIH4zr!HnDDuCa@ z0Dc4|Z4T?QcNoru$CCb=@Ei0mrLu2^kC$ku82WCDUziLn{S{EkG$;MNQ2Y2ks5N{Z zDu9zv8PDDx-+phy1@vd`i0_bASWUkZj)sSzlzBAaxRW%bz~wvRs=X0vjs2a`xWTFN zk-_g*mA^BzsaLtS`su3jq>DVD&vGs!7m2Qt_k$?nsJQMbbllzYx?u1Iwe_k~p633xd=Xy=yP{dqqK z;}vNkQmsdKR2M!A-QZ$R{J_JQBX1XboM$PU3f_T>S}pbpve8p^-p#FUm~!{CUhBUQUb`f|f)~0?pOK+ZskBs! z8_HahHd9w*-B#i$yZtmWs7%7r`65Z)-{*Ltmup4hfU0i^TxyLMx=hGy5{8$lsM+GR z7K4f^P3)|$GA$Op?gi@cP9^lfr~b7iy`YEx%B+e)PBCn|U~8U#bTOY7gjO-o?WOC{ zJ}1bLRI2C7R21xADCSk;tnzzPN0#55`fyeGyEW&kq7Um{i{71fWS4CT{C2AVY`c@A zT(z^TpR@8|HuK9CLO?Uh-Tw+m(^Ma667k28oo~7)@Vj;9? z*Sa3_16yug2`#Yog<`ZYv+0y`gt`;QUcleH#Lg_}%Es}*q+X5KcRBAGZoEV zJZ{ea|Go0TYe)1dpIZ8ApJ}lkp>L7HY)X`^TrieFHg>!~bfRZh@1MC^_l!;MnMG!k zPm0OiB2kkEHXryMUWU3^vgTXSp_<79S9RYUHu~DU>Z(lCFne)nO?<+~Mmh7*QC_8% zSr^|%wwd*#$T~cCpWWJceYffJ6a4nHm#geCNt|2(GL_r{wsv_w@8&Y~_VXO^`vS_M z-fD&BvP5;{5ZX>Rv^}qeI55SMTnK8$$4vD4nzmAW+E)gtZ?{s4@qOTCD(h;Luo7V* zHO;;m>KR;`(4HWRQ+=}4#0 z5A>+6^V1A^MaSk$iq>AYIQrGRxyv@^-Dah$dB5kI~hH32~dHKuNWvfQ9#cXm-sB(2pu=AsTU0Zjv;6mZvG>alH7rZMWbVPSOry1yCT=I^t9dN-FhJ}XyFdEol5 zRBidJ$3|E8(Es7Ia)(+^*cbE#BJtWO6*6q8wp-fp7@6bZ?x>E<)o# zexv%0bCz@)ubc}>Ra|&3BuOXL+@(t8w1`fxn-C3MJTV%(>9#3bP^NpkRy??gV>#g< zlFwZ=W1?GUR+pdIWUESDn_S6tU8kx{?pm|bFJ?2A+moXwtQ?^65g(VnSrcEM@hO$4 ze8GhEewwawCS^gZ@g9}bT z)lB#2g1N5p)yX2aaj5$NmXeWX|GtK{VP1|%+T(@k@VKX=e8a?RO=B@|)A@ iZ;H$k^3rEZO=a=a()R`TX5}dJnpJL^7roFh>wf^h+oneV delta 5410 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 diff --git a/tabcmd/locales/es/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/es/LC_MESSAGES/tabcmd.mo index db1cd9b874478be8c6aee87ea29b4edfa754f199..971f2d80edd2c1a4d424761741a12dd87085b2b4 100644 GIT binary patch delta 3705 zcmZwJdvKK18OQOH1cS&m7YqqRPJnP{Ng~FYq-w(bQZB{TQfuQT`(}5?&A!{cAnA-< zE5a0nQr)7cb;f3D!BPLPuMRUhN-vCvH644wF||f)r^QZ1p~a4)Ez|FB-`7|>WtRQC z=e*}V=XsuU_JuPCOYXhDBtKF)=AhxvbNrpb-wT(h_358i#v4;da|kEnJJ^69;#91g zV9XWRgcdhp4Wk_ehpcVRq89oXE!Ix)ZA10ngqnW<75F}^W_|Mn7b^YFP?3$G7CeV~ppwq{ z*oYQ4qPE0Em3nW`9z@nQ&!e6nLIwOjHexxG&Bn#3^)_Q(6ZCVj1b3k_^Kc%Hpe87< z@&lwebgsrH|HlPkw z6sO~EoQs2~Ql3PW@J!Gi%fps-BkIhoLM0SO&3`{?o+Cl~I4bc|Q>niqJWIz?EGIpJ zGp(qSuS1=M4DvA#^QDQN4ty0Y?RSw_%tU5Y;ImMb=tM1aQ(y)y?YmKlKB4;atT}<& zn-Nq7r9`DtHKO)(8CqO{8s{J%vxhJ3t{xu($wKxpjdtWOq$|Hy5mF z9tb*~LPd5QExv`CNS(#ZPl3UCuDps%AUcPA>K`;bSC7dV8(WX=Stj0BW7wOmkr zb2X|GUqF>If(mQ^wb%EcCU^?9r!S)ddjmP(=HJNNW-_a5o`tA0(1{AfMTVF?sPT_t zoqqpExlm@mLEb^;Jo0ig7f}IRMwnW77HXn)wD=`d3Advb-h+J1kN8pmKSzxp4*Umd z+(Z^r|9q@rebdE-PWM*>zm1GFM^FP_#1NjwIXIbeD6?g#aXrY#+`*R?cqHh54i(67 z(0>j!-+1e9RU_sfqT?DaRGL%xIXsVRaUu29-eyt1jzg%!_!3@xYnmh2 zghQx_F5*VKlGPOGov8Q4_fd(wfQ#|B!F}D-{Yt)6@s2zfD*0FNcDx52oJ_hpbUAFp z@1jb75*cEKQ5lr+FO&kDhYB!?*Wf-JhcBYez^iyIp20qxOH@x{em@r)@BKNs5jKVv&iU}HOQ4R+x!)PgU`5@Y^`+h|W}_0LKSHSRIgLhqs~av9kuz~!hd zyB)Q)hcSv18MKAW?7j&)n6O=fH6B3>`YH3zqvYnu9o{gzRt) z{l8`(iid`}vrDEQRjD7N0)HM4;5pohcdYV%mSa{2|A)jk=ucq*H!!Ixb2`igzZ_Gu z)<3PQagcT&-i+hc`7f3zR?!~78r+X;pLrCO+1tqRFjF~57B^u7rq&l893S!;Cj7m` z3r*@S^^QzAUg8Z_&M5U>tA1~cce=K@>}yUs?WRLL;YfGd`9{vkWJB@f_HZH|>F#xt zStpt8&JLs;lMVOu_D4eg=!lbWvQ8+Pc5|uE-sua+6S=e#%4EaYT&6It{;Ha&lMOjL zm?;x?lcA)W?e24P$%xllpDxY&)271djFS#U6K+p95$bVb;q7rZoe8G?>|LTtI=xxu z`k(tTCy@&Ey8Zp(WaR(dia43xbUdXeM<-rTT(|gSBA&c;wExrYOv>qv_r-g?!!vD( zci!$OE4{1`(anvrTNvx{Oo9cZ6@gXubkS@vK?prfq-TO*>Y(+Kj_RHk-<{EnUhEB%E+A6pd$N zxt>tmRS#RewD?eQxSOb*j-BU^wH-l}*V-kqc_HH@Y|`!TVY#GhQ#mK% MSdLcV*>y|)1F|A91ONa4 delta 3472 zcmaLZeQZ=!8prW7#WvLzXaTX5)}HD}1!M$7SVW-|ib4q$kSHcPOlNLkmf=phGvzII zXAxr{20=$utfC+&z7St7M$)Je4I=&lipJoIY=kB1nspZ%R@r3L?~l1=|Jm5I^Ev0f zob#OLIrmN07ulj3encqXt}#SK#L0ypOv6 zGaP_tQGpisGo}tLYNAFQfeTOz{4-j73Tv6)yc3)_jznb6qgGVLay7vy)C4U!9PdU2 zwjOoeUL1^{qbB+XR$*0zF~nrXpvIYk7Vkm@`X}|7-)s#o=s`_%47GyqQ7b4TDn)Kl z0p7%iCT>MtzZ|c|`_SSZ)C7l7ssAqMhq##7ObzP(YcQwC=g_zw9lQ#=@k-o}n)ozo zprV0f1FKOhy#=)gGN^I7kxR|%LH_`%w8w+vX9J5_)ew$X4I=+q;aEPDvYSyUTZB}> zxOgLWp#tbZl46dc20n#a>3P&18N|V%cpVPIR#fU&pfdVM(BF%e{?SXxzcy7b2eh)m zEJG7aM-8+f=r2bFa4#y*C-7SIkwuwPs1p2$+9Q^WX_{H6abkg8Xz6c7Vm3WF8jAb~ zDkVQ4zowK~q(zH=K&^BkYTzuYL=T`A@CqtpM^QEY8ZDkdT{nQiX`1nPp6czcafrn6moJ6X2;U;BdFgGiuqfmi0p=y37>i#vT(&kZt?Ziqw z{~ypGICBg&Q168kM9M5WUW2@w%mn0RXQrbjxD_?<5>&uz(PB3$LvNw(KZ5+4zw@E- zOG$^WuanGgCeqM_^MeyEYJ&BsUHnYoLDWD$pav*sc@Z3jVO)UP#A{IJccU`<9(LpB zNYadF*-!W&=1OQBq@hi87-!-c)aIB(p0vxOs7b_&B z081JCXPkgq=y(R-h;y$b|1C8B$^q4GB+Jla)QE~aiM+f_7wUzx37fG8qo}u)UOILO3v9%G%r*yGQ2}p5y$4=JE$lCN4gNDYU&BeAkL37NP3}O|B#T|R2OS*AvbD(` z!W-~KR4Gm)mzZ;?mDKT#bRkgGb?Z<8zk?I;6kd$AM4?UCfRiydnMON}F5H8E!*lpB zJ4v-$&qo`+iML`kg;gq-25!LX=|7Ki@hj9qt|d(tm!KB70hi(~ybdeJ1kZmnjXDk_ z12>>*{{m_SZ{q|!iFzuk#}*umdj4mj#YM>eGHX#Q-iaFb1S)`^k!qQ0X6FGiO?ct^ zKSqOnVRASRci~F>2`RtnpwN@>F}x8!#U`v^*_v>^4Dls{3+ZniU)U49sO!cNy)w2E zm6KxHGhteX8amwVFOX$ zjvh|Mk5GY>vkGm>5tvhrr_f-r#>FAH18eXt)Ta6ZU&0|b6*kWS)Bwk^Kb{E;v7=Oy zO02~Od>5Os3QHJFB2|h+;X)EwqrHkAN02)`_Sxf%JJU|jk6rk?rfh{c+niiijXn?#alSu zkGyJc+>Q$1Mbu+-3KiIYa1)N2K{@bkWDREO&4vFJ*W#D-_h243FsK$@J7H$wRe2j; z&Vl=I2R@5;;S36CaVOT}0TniuNaR21SC#*^tm2NgSbXVXFWu=T953Rgv&r^kJeEzS z-AH>Xz0&K%STfb=Igv~@mhH@#wpb$SImZ>T)op`kJnH@3|2zwGN4mHl?4(@XgiD?STF{?B-e9oO-a@o2(HIaw#F@H#S4 z$Me#jUpydOG|*YaJQ)Q^#L;#|?}rEVUX(vlRa(Z##&g;|C$l8Kx$jVa_>j6j`Il=( z`9IbCvB)p8b)k|OMC~N08L=Q;6CFO#;}Sjw)p@$|B^jd9M2JJxY+DrOhVn{Ap?$z@45KQuhk zzxV3XMR|YfB!BV9`NjFsP2>EY(I+qNAI$vQ`1$=;Toz8-6-ko)yF>fkH=HZUpJTj4 MQ=ig&Ys<7>0ZyIg@&Et; diff --git a/tabcmd/locales/fr/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/fr/LC_MESSAGES/tabcmd.mo index 70813c3563967e07d984ae432b60a78401fee473..7fb39edf7958bbfde5e383f8ae663230d7ec43b2 100644 GIT binary patch delta 3681 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 R=L{cT{zZrQmFW{b=5HlF(8T}% diff --git a/tabcmd/locales/ga/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/ga/LC_MESSAGES/tabcmd.mo index ecc45de222bfa7f4ac973c88497140198c7e605d..be01907c551b0281acad4361fcf4566c9606fddc 100644 GIT binary patch delta 3662 zcmZwIe{dA#9mnw}0g_4tghVk3ktc)*Shzrh2uZ30k3b_9E!LR;l3sGl-AymI=j|RC z{yBl-0PSe&jmnRqWl~$|ly=mUu`?O8bZDtRm{O}%2Bpqai>2a^!qkr1AMelIPOP0W zmwW9#yZe2<-|zF>a&%AG3wz6QXQzyP$nbB3ziIqk8mF_*{=HabOdY2uaT30Rjrb3| z66-EE<{F%j7FXj`Ob7178qN>mWITd;?gTa%lQVB{U>W!XzlhT&lmf2A8Jx#Z*LNci zn4jPjd=97M>!=An#p`hL#8M%hXgTjiJ+~zo--E?Ou#x%AiQtC6paNG?<{Yd;B^1U+ zOygDfAZnr?SbIgucGUPfRQw@S;@`#^<~N5qQ0tGOGCPZ!@B`EX zQy83$&1mr}s3mbxt==7+4!1Rz8Pn;kn?vl7}tl&8R)ojVdUCivI{I&Y|G^II8ehuB89U@B#xZ zSV4ItXWCFL??LSa5BZn_d@0aVfv3=N{w|V>nLtz}J_FT>F4RQp0zI^xe+yOUVfCM9 z%?Z@noJCboPF8AFGips2qQx-kJ_q@jU3_URhlBBF1OJ4Lj8~F{#W|?X^#sO|)it^M zIABh*HyC&VmDzE$_(xPA4Hhdytz{P~!PTgQHlRAU4VBQt$fKqZcoNCUoC{PNNhoJ( zIiUOI22>|*MYS@DN^A(V*55@1cmlPi&!ZAMgKTi~Pb9XP#O#W59cmABp%QVCTg)!h z{XfJy{r;ckK$X3Oyo1b#$jiDZ6PQfnvvDf(n`InmcdrfHiri}sp>F&&hVV_CiIZrDDqD!UuOIoCd->7?2ZQku zR3fK?@efe(s%&YgnlZPZfh8QMm9O9p_z|wg76#{I4wvBLsE(XR1ukc&sx!5yC2K{s zb_Hrldr|RRyb&M6*YMA%f}d@o|64S`4hmz0@`!DIgl+g6RE7V>#n`}W>`uHBSK&`l zZ?=#5qBvuTstzp0>v0{bQxBkCXh(4ozKy!SeparumK|Kx4eR;33BQTzz;XN%*6=b= zLSIEyvT)(@|tBeO?QriP7WO0jKjDV>-e8X zm1R+h>_@fwuebom&MhU}hDvw?s^agV5`77k&}Eb_n^6gO;SRhP_h7Dqouz~Cqt<$H zi!pa#0$1TPNViNC7iBA|g}rzSK7dN#3@*faveWzEHta(mRmjVz4u6a+znRfmOe|-X zbD+#4r~nV4Zg?KG7cSs*oWxCZ&$OTd^`bWARwSkwL5mlVCYp%^Q=BEJ1lA*=%r@-C zBe+w)|4%tkMLYP?+KnJF%%#BD^pmce_4qpO#0WYpPR?nnK6 zU&RDgaC02fxQ6-7X%243dF+%J=1`TM!!Ddm6a`*`44ENZhEJiE=p+0xhS^A3qWiHP zk05iJ-v#62*~#ozvmkIS=J+$)`FaG8p(g5Or_^B%r{ccg{7KZ3oJ5w}ypQ|P-c(9> z1o@?!w^5sL{L<2H??M$cg#Gvfbg`m~{@>5RCdyQc#!(jCGz;-6Ork2@j!NtqR0VHg zFHX3*w8k;ieY>#&e}&WWMN}d0qL#Fh-)a+fpbF><=SqRT!@ybw&LbP%EMLz18?(3) z7qeq-#jQvz^IM#W)hkLZUX0r~zZ*B>CDhU-d6-|K`58WqXOJmPp7m0Ps=wY-ny?42 zVPFdm<6gWAJNb=G#(h|ghfz!N3uM{NYpBX<*a&PRvl6vL+wfX^G{3j1rOXt5*^CqN{D`0R@|QI%ni_NbkaG`_ zyo8$yrCh&nqnk}d3vCUV@?0rwI+F36OemIg`y2>to1WR-FTd}962 z^|+HvhX&li!AL6l|1L!xZy=LM>⪙bBgm8pG+oF-xwYLY}iXX1Bs1^fx=_co68D+ zx2MJw&dn?zTeyDCfiZ=ud2Qng+1941%KYzbQ~uQ4j*4!Y;6(Gi;m&+l>!QNL z;SH6!6~)@@Xl?B#82PVy+Rdtj=UaE9y`$J|J6g?}xVza7I-VDaIX1~niBxR#s-<9C z>Ya6q^?7rxA9qsLxhLV9ZZ~5Gm$(_ns!r=U9Qc0PYj0_x`$;E~4aE|EJlh{ixEf)Z kTZ#`AZ+G(t!!`9b>p6B->7wln(z?;ki_Z$>FW%DgA8K7A?f?J) delta 3419 zcmaLYd2EzL7{~Exp-@>sE}=lNZ)v#%mb;wNN|(D(4M&8i>$ZJMSC(D6M_U_pg{WyX zB4N2J;sF5??j;e47)3=JxkN;w#3)2X3`8kWtCINrv9IwTW7FJ4O1{^^xbODvYPpAxBM5V|rRDk#Lp@mCP0{+IFb*QY&xoBk0QHZf;b7ELBhz0I12k?DXR1}sEV$2`iIb>fA%iwuS3<$1!dNqG_-&RHPHg6UyTZ2 zB`VO(I1H0WQsy#h3w}eL5sSez%`DVBKF24~qQ41=*&K<}P~@jkCAp6LnoL%a7FswC zmFXhX#8K21y?{z!AF5(!QG5I?TKEfUTo)#%X$nwVT8g?J4>*n0s7McCE}lUPZ=g!p zmDS}4)E<|j0xWa-^~kSzkq--ZqULErCHNC+YumAi0?k4Kh?@a4RKnS)$h^p!<_X93 zsL1y_HlYH!gzVbwhg6a7JgkxqMFlnmwdadb&)1{2Hh~Ik8+O+B|2PeTGZ#=3HQ&BL zq^zRr*~q)ej745{#)Deme$>QOsDM|Xg^j2Ry^VVQH1cb%@}c=NDTl`ANY*#wX=va) z=SC2cj9(Ogs!$%H7@ftB3_iY^Dko z_-fQbXHXSzk-h>iLXuO1VcthY`aNo3Iv<*-0Cj&U z>a4879Ndpo)to`i^9SnC_T?egG7q7JtB|6aeW-c9#D4nz-=e`_TnfWz;%%aB(6|LO1K1IvRf5fmPU< z4V;Jd_yC^5C1~-KGHt;7@E~g9o2WhS#Q~av3sBE(L~YqsoQY#O$=bRV*c*3ZoS@7H z&W&5hK{olE3^@n6WNL5&9zrcxQkXi$VeCQwMW??VwKeY|$G}{|&Dgal75HA{n`|y1 zMKiaGs6SORqe(}Z1+Wa)V+dPt75Yg_Z@S-6;|CO{UPNA0<~69m4xj@60vDmalR2;$ zdtp81;W|`+Z+YUWfmgY(m72fhtFlq;*-st1Y?c{H+=Ct;q<(ewu4*Hha$*(#D z(_Q~uiG>5n@tw}4x&LFnC3esb`^&u*cEFC>UWKKXAe#Op8Z&Q(q-kRwV6iLc15DH zI6pZo_e`sHWg|w78+zrnofGCJa;Ik9v`Rc*JTdvokb;avThEx}=Og;I%drbakNlr`5=-6g~8n^;*g^Kaef-S_|i diff --git a/tabcmd/locales/it/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/it/LC_MESSAGES/tabcmd.mo index 50a2e9f7482bc20238163ed7a34ee46fb1377735..81bf77442ad08df8ef4e9919fbe0bd999d22b69f 100644 GIT binary patch delta 3678 zcmZwI3vg7`9mnyL015ABASNbq6A}YTHiSpO5P?8Q1cF$_nTo}9lfB7qyV<+$y-Pu7 zx-2vv$;_ z>cJav2i}bRs8qg&O5x?8UdUjJdNu0Kw4yc?L(RVjHP4}-ej2s$ccznnML0x59Tu=X zf-?=Ml&?kI1sD04eSB%6qk(UtMg31mEM@|;D)35FCYn(T-5=FcP#E+7}&{1chmOk#D-a|`MYG@}A>kS=Bys{cVO z)${*T3fkE@=XJawzo0SxFyEg@HNBWvWsE)5-2rpq3P9h!J*+NvmPUK_0#g`V?AGDu91#&)U zzlxe~oRvGOYRvqAhTAA8HSb^(Uc)sQBENbAZpFoT0G0ZSI2MOc8T%AR<0x*f{`;7S z%1jYzTn(sJc(NH8ZN+mUSloTfNSw#WNq_G z;1yIrV@anLC=OhN%EUdm2)~9T)9k-FlS{=(8Wz&<7Ouq6y#DUSb$B~Ik4pJPY{ap= z9PYr?*pA;tU8)PHj18flh7w*L4OokMj3YQ7JygbD$WT~8;S}z`k-UE+_#~>sRn(D; zXI5om4U!DA35nHYa0UJlbw@7aQk*e2cZu&t1@Ztc!xW})0FPj%if#Rl!f%nW<_NQF z#z9nyn|LiMm5&D=M5XW)uE)Ql&bVz}?oF9N1$Y>v_#5OwGK)D+UCxcDBX)4Ip8v-v zXuxjN4o(Ce{)l=HC|}yabkvJx4(jaIV;jbii*1gg9@DpRISwHUm|8B5&VCt^WOFZW zzzlv{&;J_~6u?F)0w*QLF*n>+r*jC(+TJSO|kQ&mVyV8bC zZPKXmhw(u?7ud4Im@d{g$0_L2mEOk9#LcL)eHGRI5t0lupPNT4CW3e3Uepm?L1khA z(d*7Uj3u}Sb$13(fqjU2S|-xSJvQ?&Lonvc6b|6`a0V{o%1^^~EXJ?mB;1M`xDzY! zC-^eHg*W1EZde%}LEWV{0vXQ=r1S#hbYWnksELUb-47q#PuuoRy|9mO$JpdTRj(u`V_VK)>SR?!(xq84my zAx(M4bmNz(r&s6B{0!2?)N$}d=%Vh*PW%r347Xz|=b_BLidsl7i(f!J?!}K$?N5c* zy*g9mxXZIL$iL&K^gui8+Bv^(R<~)7tx<8yE5` z#($jWhbDI9`-di<&hz`HmgW2J7JWF5{}0r z9bHbsvlCv2w=HQKFWlMH8wurlN9?%m*`c14lTLo|m+o*Zo=({z*9&`Tw{J}OqT(Lg z3)x$l$&ERQP{Q##x}9_);y0A1@-w+sxD^Vrv zE|0nX=l7@`Plmdj-rjH`^8bE{*lt%Umek1MiRWb3&5n%65?>!~|Ge2v+Fh~kSeO68 z%&I*96YJCn|MjYUBmC!Q-#5aaKliRt{_*;OG5*n|wS|4>tXX}3yLD+nD@m{;eV0}? z^*vI*&@Wq6H9FIl-J3PMw?-4R{MUXOO?%AsET`Mrn9a5|yqkNX&Nr-H+jYY|wiTyS zEYUOktHp+`T<$CibY1g)Da(%6)Aj)M{ZL}uTw|w2o{{WnnDO>;m delta 3402 zcmZwI3v5$W9LMp~!Ejg}gN<2WvJ2D+!YWUByE%q{C{vL{h&a3TZWKy8Zab9)tPp}k zgA(h5IYFaFXM$1eK!PFy5k-yYKx1SvfyE#$lF3xW_xES7F)=P(Kj+-X`Tx)VoO`=x zn`ix#p5#{pdp>UX+sl6;|Lxi8{rmT{*O(!6w_|_Yi{tQpyb>?sa2(#pm_axjhv5>m z@Ls$On_PEcKK-LOz?h`@iiU3N!ppH&-^`7E97BH&YQWVv0=K&7)2QoD;6OZ&N;JEl zF-2&h0+r!axEM9T`_aPfcscRS+wO^WBqMVXH6t(6Re%yyfCV@j??ffG8FgJN7U1Wo zK;NMceYwVvlNpa1rxYz*hD!84^@(qq+za-h0)2s+K__YkUb0f=7AnD6d?|1x>iX3< z3OAyKub={aj4J(Ex9{O%ax;af`^REZnJ=U<8Ew1*n{gx_L=yy4!yjwY2T-@$;_P%xW;lefiX1Gn~MeN;Vf&vb&H~Fj1U|>re^oLyBVB zPy=_MW_l5|NAfv16enUaR-#IOH>#qKx&2nO=(i1`{@PUC9MH@Pn1%vWpaxp(_E)14 z*nmp(DZCof$fQgMY6&i&_K3yBG|dgDae}Vv(4yaj4K(n1TT zqGq}THE;s8L=T}R@G7ceZKyRqg%*B~x^5tY(=^whmb4OeJQ;BtTTz*|;&A)~Ej*7Z zVII-tc+?tKq7tlj`;ExQY~jno7SuRLQ4{P$E$yWQQKCL1fuy;ThDx{qm01-M)2wxU z0+sn|u18UcoJLmd@0(PS0&Z4GOHhfGqt<*W>i$O5(xy;}y?_Js{2!q~a^?%vK;3_z zAXB2~cp>s`GEDUZ~4;rIg~@!7fIrqX*6`< zBKJfT6<{-J7eDLz9%`U-r~&#gy#N-Y9~YxGaU<${3#zh*uo*u`ie?-u^He>I$zB}z zkcKu<8_vfcQE#|X>NEvcqDuEXUW%=#iX6Zk{0Q~4@fm97CsFsE!#P;Y;D2HSHGv2V zuY?{PN&OYDnDn)l^*A0kAulbn7ZvyeoQNl}0{iopx&d!PVwh)K526z5Kn3b@?ME3^ z`ms0}XCp;4Yl@SZ5^dwaBo6Gvay*5%qMz5>EW8I*+TA!EJ8&Kj>+nY0fl9m+ zRl(m;OE8+3g07o|dOQ<20XHUTXieV0GCYo(FrW8p2%AyoHQG!lL{(%7QVg>K$<;i9 zWw-~G;04s)m@w9u85l$_Zbv2bGG2?x{WKgJzv1f`W13&$2<~PK^E)oX(Y)?d@&{0* zZFB8Hm9*bDV{XC<)Y?Ca%*A|wO7sU@j)PfWE#(H}K}(uFG_?DVqxQf#%*CG6M>h^a z&15?2d>HkdCs8wb4D}{!L9OXWI2SvS4R0nAO^@j!EX4?F{GC{!=YKy9WqJZD@ekaH z3)v7#;5e#;KO>Vhlb9}Jn-H?R=1Kes-@!V3gN42xiztHv)}j)55w(YoAR){TIEwgY z)Kq@M@fO#^SVMpEw9IB~!WHz}QENSy1=c2wBE>ShklaiME<_*M-iURmC2K`h#kduf}^E(5C9fRXCuGi!g~T_y_8`m#)ifw&U2Fes9X4<9W!V zZc5QY8<*lHEW%Sb1U<7ei4-FH(M+A4*zhzElZGS;7 zG1V+^KE8hbY9q0GoCXYr zBMpunh$n)HhPbH?hN>KUb%PyG1VVO#lYwyb?qDPws;Y@a6LvIFl~_}6r!RQBJ$+*J z8Y&)$23OhXlYOIE-hYlXIFaM{OruQx&o!cEYYwdiC)t+i_w}I(wi$ zE6=`{IB_LO##Ob-KJCx%?wLB~%keU@aqL>hjxSGb?K?C*dT>#X)Xu_^^v{JWveI5_ zq^H;QWNn91`Q`p}VEEx40~W?s*%r~PdM8$AClaxAmw!i(Ve=zaRA*{}(O5KG6SL}V z$BG0kCmfGC@znkjUwX@^r9Dzp%V(s|jJY{GwYz*$ddm1+y>tJ2XR3YN(5#r1+EY@L VJ~KUVNve@s&X)UgQa>)Z?l031)`b87 diff --git a/tabcmd/locales/ja/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/ja/LC_MESSAGES/tabcmd.mo index ce6b79faf1cfce2aa07564598b25344c194db3db..8551145560074a86171d8b8a577d3379b00d78b9 100644 GIT binary patch delta 3730 zcmZwJ4{X%s9mnyfth6A-QVNt-3cnUhTPar@SVw6QYAGEQTd{18iruyMqj$5tJMXSc zaND)Oj8%+-!%bqyNM#DxfOuORFrpYDbF;>6V#YQ*Vn@mnaX3db>d4-o{(jcEtSR?; zp6B=c`99z0xnH?(IOU0fl=#rp)F%u-C;2yvfBzb<+7~~sPckNt>L6y~B`m;?aXRK@ z7&99eqJ@o^gJIW)aT@jgn1#PUjXR6^#>CA#6f7D(#rZgEvNK^l7Ez$2Mp+)^$sBv4}_9t;P5G-JQbJp$fchtn`Y_k;ePyy9q0fun~ z?nW(i2xsD3$lB&IYN1cj!rUp2m8kX>)cjjef$zj=tZxP=DD|gNkqx01yn-4qmBtb* zLJRLe9Z3k4>POsqKeDztg&IGI3iuybglSAR7t2uVHDO#6bWvD;iN!dCnjkIP z2_zp?Ux+%xRc`x6*D&VNz8!TW`%oEr0hOWOB1tyqu?jC`lYcg8is-EgD^NRYKwYX1 zya6A=dDxFiElCZ+3&W$t#4e>MU2F0&GMDbT2A%+fV`h7#V7ku7gNSX2ex#B%rv-r9k%0 zt*A__MWxb*3TzANtaqU%IEFgY-=G5fGjhSrzmd63CaY_nn^1RP1uBpb(#7(2_Msm?LG8Gm zw-vFOAD{x+k1H^V6?hdFVj17*2Hc2x(H$;{J7;^224&!VT#MO!>D$nY>+lR#VGg6T zqh{2O_Mig4h`PkJ{J~J*8&HA&6j$R(RA6akPGGsnX_%Hc1ugI(ZpSz9Wn4#oG+{Oe zAHY)71PNS<&!7T+7Zq?iZ?9@xk9S}KHU3>xzmIVl=97k_cn@B}c*f1VbSPZKTkx%~ z8nXkhTSS`haU^(i*)?~u({Ckip#4GAop~F-hVz+(Y#SeL!JVk1N#h*UUV_A8nvlB_ zH$4>CwAq7|cp9hSXQ;Eyy4Cr*l_9a2wWt?P4-%6(fC})BsGX(~g)&r%v(ZMi@4zK^ z2z6w`_`1ITHMAB*lAh~Z$0ZL=Ig^s?pE_$?^6hEwrzS7t-u#t&>_{XO@w9n;tr7eFZaW(D z1cIBrodI8Kdng#QgR$1wmauJN-nRBGpU3I#vpemW?dgbwy2D?7vdJ6h?2g!;Xv`by zjwUAN-;&c|$2|4}%oGiTf}UU~*19Rw9rPtD@+0Ho&a`1~Bx*-I9i5>zZ>Oit_Io!6 zLXoID^_QO#RnTsaG1vb*_uHLePkX4V%Nz9lzeheh+8zmnHF9j?($RHCM|K8+_l>oG z(Hsri?SV~!_T;m3R;DCp6kJM8=FNLPH8H+AD>1leLZZ5;I@vUTW@_^3@?&Yqhbu}l z5=WQLO*9tGN-nwm)d`6Yt+@$*`O>sH5@Y)k*Va@enkyEMAL%=O@kru>y4>X54FeP6 zt44QjjqSYBxGn#++e*_Ah{mkYCaZb$EUdA;-sKN{*XpvPQE!KBb==7$kq*nr ztQ8vFeYDJq`R$-(KM;tSx=_UGiiaY$r7T!cn?fuWj#ieJb2go}x7*VZi21wQJb{o} zxCG^+gGRfDf|l3%JVl=`X>~_!tJvvlRk=|vvljS^J?7$%9=q80*zmU9BZp3m>^(Ky P``mEv-r+>v`nvxB8uU<2 delta 3425 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 TJH|Q}<~t7-?&}!Koj&R>VHW0% diff --git a/tabcmd/locales/pt/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/pt/LC_MESSAGES/tabcmd.mo index fa709d8ac9072a1809f9e6a84bcb9f9820df907a..6bfc41ef43a06090a8ccecfb9f466e6bdc52a870 100644 GIT binary patch delta 3682 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 diff --git a/tabcmd/locales/sv/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/sv/LC_MESSAGES/tabcmd.mo index e329a6a88f01698761fa98826e41d1f6b652ae22..0fa1d20a14bff8ec143200625ac794e0373ba9d3 100644 GIT binary patch delta 3712 zcmZwI4Qy5A9mnyfEo(Js_oQ2822XQ*(r*R6tjOup`D~(B;H@LA>ypK2Fywd!DYj8g09@O*QNC)#A zPQ~MR4gL-_!N0Kvr%cWV(u9`s7f}7~4(h*+xrJbe`OUGQ!JknBmk{PctUxWO6+@WB znfM55qVMBud>xtFyp5XZeY7~IJZ}T4elu$P?Wl!6gwvVdJkO0%{|ahlqo@hrL3Nl) z<@H#F7H>ywiHl10?w~w~%x#XK`kzEC`0rSS#SFFp7op}`hiMJa$IW8A9~D^^t8o-H zK=HKvLMl<^I@BKC64c)rn8Z2M-;3Ikr%)L>gv!vbkR+QCY{K)?$Ui}vDq3s6WvIy7 zQHQDr=i&o+9S)*Wc^s9(b3wU;&X#f&>ddsE0*ax=e+)Iw!Js^Z3Ve75`PT~HrlJ;$ z36I5@WvG~_XhAK+MVgph zsP+f2Lht{NxKU)Mk#CT>fPCD{ho}WiV40eDK5C#ww0H+9g#)OGcOk!KKNl_FXQ=ig zf&W0YD`hg(Uyrkx-`vEFPWKlB??Kv{gQ$kTz%agv*J2szP-OL}cAdzt*}+8mE9N)wBxP<)b^xud2F1&yfa0K;l;;o?k7c8NC z5exAH9FIE5`tVG^I;_JtFoMeH>ILL~D>s{%y%A5L_I?s!D$)=a?Nu8pLz}Q2)A%_& zfr@Y@vydFK7)P&!`3j8r@LBpv2<5%bVRjnrf8fXm_>u^7+!$mxb z<)7hI#51T5PZ@dE0=HlpK8iXc`|&}14F_=3P5Hfl4K?0GPTUXhI^2n`qxyaR%dPno z?Zm68ID~`v8@v_#+H7djy9L?s z&`VP_j7 zc`-K;PPl$Yx7(lS$}X!+6{hpUCL<}&NrijjZf7JO?sR%112H${1w()GDXU62QJ=B? z=XtLaPllszUtc8A_5U7qIbJjsORDGCzzcKp=6c3siLZ>+e_ZV)ooK8(7R^3;O?5%` zvYkQj`PS{W8*`brW07s>b+_6+$MYgR zj*ZhOmgpIKY6;%v^Jv{%tllE)_c{sdY>WA(%}v?9w3~9QVz!>cjqfMDhT2+oBJM=` z!#y#-x4$zSb5+BZ*XBCqn!5=bu^%PmqbY5_=h*6eTiX<@ve_=~tqz++q%Yz4w)^J? SQZ~k6vICJ+#AZs{LjM8YkTYrk delta 3411 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 delta 3412 zcmZwIdr*{B7{~Dg32C4ppb-+h24PyPqA3Dh&`O;&DT_+G&?+yoMZ3DYq?xu>WX_Nc z)21e5lVy`NUC6am>}nS;O<81(O^!_&X;P-5Q~uG^_s5>5nI>o5&pGdV-t#=?IcHy< zXi9kV!Gy?xj6N$3|F-Zym;d{d)cg0}Qz^#e&|QmZxCKYyP8^1(aVQQ=HD(ZAfq6I+ z9bAZK;~MMhm_>gV4m2iW4$#np$M9TC?jL`!5HF;E6>7rycpkRc`!Uq`y_kU~P>CiD zFeV=zRG>;6fz_x5E=32|;<>~(@7Nprk&Mh~)QVDAt^yRJ0!+o>csnYw<*0F+a4>$2 z3iK;xV|KbRiLT>qRgk$7>h2Rk8N0h@1p{Dp(aYqq#BrmTIm$j z83>`~X+wsZjkf<0YHRn~>nE&9tm+)DXJ=7=t#CA7D%oUI$?iaQ!T9kKT!KoV11XB> zL`{4UwbIk5Gm^!{Avgw$unJZBdr%d9!uB_zL%(wn_1B^5;eu8+m}Mxym8glTZGS#0 zfd^5Ew&F;PA&W8xQCsjk>WnxHrfIH5&EvH$L5KbtBxlnRp`pz8ph|KS`Ix>$kq$aI z9<|b$sENaEMf>f60!6GcgYSbZKgu1^0RoU&>hF_y97IfmT@Z}gu=E7DQ zIz;bbB_2c#ETm4vGUcd4H52=x&l*BKzr@;PuQ#K91uJnhzKgHp3DkV+308+6oJak~ z&=|o;iaxx6jn@Q^BgvXKQKkG5_17=8 zByK6bMSnISJ)Rk|SR z!ELBgA4F9ypZYskfx3Sy62mm17PJ}1<8d5>Blzj0VkPSQnQLgM0*$B%TdXf52iWYy zMfe+Pf;&s&Ki8$GL)C%aXKEr zo3NPl{rE8I{z=sM^m1d)#4=QZ6Hsr)dQ8J*sMEa)dFh$2Fb7Xz2BufUx1yke`fJao zaN!bMiP_kRA7VH1G40$`DStujVbP`WKvPi_yafaJ5YE6J9E+34Lh~)g<+u{>!@SGm z6=*G`!Fe<9VICgCXECjkGT}z-&6wAoEYR!ETU#6bVnBBEa7y~kv%Pcfni~u>`fJ^w z#~%p$>U?v&VPC-SscQ%<2sWbE*U%VrJ)y8S+!!*my|pz#cYdQA3VUkZFgHCu|2^IY zUv15tfIsZ|!!_Z1=ee=pQ+g6o1M@Uh$m93k?Z&?C?@vtm=SpL+Ay$^YH^K8i^UZbr zZqPTUrq*q6!)}ezn-{8agTX*BmXuMLnCUJgPDn|TaZR1Fj}>P1^oj1t?wi8QCg|1$ z-B5kBrT>uF@N@Fdh`yX#9Qz~p&cs-XGcX}}5?Q;o(US7QSnkmF#I&E+Z9UZX>Y>)A zu9g*tUTBYfQqY|^yz7yULyxt0J+;B9o-xh&amy>*Km111PaQ34ywG&`(TD8tH;T3= zMyty!Vhe_s_K9|uUmSb2c)|b3PdD2KGsos9MOT+sJeORN96dUr F=x-1P;p+eZ From 0f9dd65bb4d335039f385f96ca7b7685e4c4c336 Mon Sep 17 00:00:00 2001 From: Jac Fitzgerald Date: Mon, 19 Oct 2026 17:41:26 -0700 Subject: [PATCH 4/6] fix: use valid UUIDs in idp_configuration_id tests Tests were using fake UUID-like strings ('idp-uuid-1', etc.) that don't validate as UUIDs. Replace with real UUIDs so the tests pass the argparse validator. --- tests/commands/test_user_utils.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/commands/test_user_utils.py b/tests/commands/test_user_utils.py index 44df96ae..9e78f5f3 100644 --- a/tests/commands/test_user_utils.py +++ b/tests/commands/test_user_utils.py @@ -164,8 +164,8 @@ def _mk_args(self, role=None, auth_type=None, idp_configuration_id=None): def test_idp_flag_applied_when_present(self): user = TSC.UserItem("alice", "Viewer") - UserCommand.apply_cli_overrides(user, self._mk_args(idp_configuration_id="idp-uuid-1")) - assert user.idp_configuration_id == "idp-uuid-1" + UserCommand.apply_cli_overrides(user, self._mk_args(idp_configuration_id="c8a1af41-8e75-4b35-932f-ab968d8b0f5f")) + assert user.idp_configuration_id == "c8a1af41-8e75-4b35-932f-ab968d8b0f5f" assert user.auth_setting is None def test_idp_flag_overrides_auth_type_flag(self): @@ -173,8 +173,8 @@ def test_idp_flag_overrides_auth_type_flag(self): # via the CLI in practice, but the runtime clear is still the last-line-of-defense # so the wire request never has both attributes. user = TSC.UserItem("alice", "Viewer") - UserCommand.apply_cli_overrides(user, self._mk_args(auth_type="SAML", idp_configuration_id="idp-uuid-2")) - assert user.idp_configuration_id == "idp-uuid-2" + UserCommand.apply_cli_overrides(user, self._mk_args(auth_type="SAML", idp_configuration_id="bf687b7a-e5ce-4f14-817f-fec82c8de2ac")) + assert user.idp_configuration_id == "bf687b7a-e5ce-4f14-817f-fec82c8de2ac" assert user.auth_setting is None def test_idp_flag_clears_existing_auth_setting(self): @@ -183,8 +183,8 @@ def test_idp_flag_clears_existing_auth_setting(self): # --idp-configuration-id, that IDP wins and the pre-existing auth is cleared. user = TSC.UserItem("alice", "Viewer") user.auth_setting = "OpenID" # e.g. set from CSV col 8 - UserCommand.apply_cli_overrides(user, self._mk_args(idp_configuration_id="idp-uuid-3")) - assert user.idp_configuration_id == "idp-uuid-3" + UserCommand.apply_cli_overrides(user, self._mk_args(idp_configuration_id="7cb8e00f-af5f-467d-9a88-566aa4085eed")) + assert user.idp_configuration_id == "7cb8e00f-af5f-467d-9a88-566aa4085eed" assert user.auth_setting is None def test_auth_type_still_works_when_no_idp(self): From 0d92124e47c613c7d2b6ef178c41848ad9ef15c1 Mon Sep 17 00:00:00 2001 From: Jac Fitzgerald Date: Tue, 20 Oct 2026 15:56:05 -0700 Subject: [PATCH 5/6] style: apply black to test_user_utils.py --- tests/commands/test_user_utils.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tests/commands/test_user_utils.py b/tests/commands/test_user_utils.py index 9e78f5f3..6d2d59c0 100644 --- a/tests/commands/test_user_utils.py +++ b/tests/commands/test_user_utils.py @@ -164,7 +164,9 @@ def _mk_args(self, role=None, auth_type=None, idp_configuration_id=None): def test_idp_flag_applied_when_present(self): user = TSC.UserItem("alice", "Viewer") - UserCommand.apply_cli_overrides(user, self._mk_args(idp_configuration_id="c8a1af41-8e75-4b35-932f-ab968d8b0f5f")) + UserCommand.apply_cli_overrides( + user, self._mk_args(idp_configuration_id="c8a1af41-8e75-4b35-932f-ab968d8b0f5f") + ) assert user.idp_configuration_id == "c8a1af41-8e75-4b35-932f-ab968d8b0f5f" assert user.auth_setting is None @@ -173,7 +175,9 @@ def test_idp_flag_overrides_auth_type_flag(self): # via the CLI in practice, but the runtime clear is still the last-line-of-defense # so the wire request never has both attributes. user = TSC.UserItem("alice", "Viewer") - UserCommand.apply_cli_overrides(user, self._mk_args(auth_type="SAML", idp_configuration_id="bf687b7a-e5ce-4f14-817f-fec82c8de2ac")) + UserCommand.apply_cli_overrides( + user, self._mk_args(auth_type="SAML", idp_configuration_id="bf687b7a-e5ce-4f14-817f-fec82c8de2ac") + ) assert user.idp_configuration_id == "bf687b7a-e5ce-4f14-817f-fec82c8de2ac" assert user.auth_setting is None @@ -183,7 +187,9 @@ def test_idp_flag_clears_existing_auth_setting(self): # --idp-configuration-id, that IDP wins and the pre-existing auth is cleared. user = TSC.UserItem("alice", "Viewer") user.auth_setting = "OpenID" # e.g. set from CSV col 8 - UserCommand.apply_cli_overrides(user, self._mk_args(idp_configuration_id="7cb8e00f-af5f-467d-9a88-566aa4085eed")) + UserCommand.apply_cli_overrides( + user, self._mk_args(idp_configuration_id="7cb8e00f-af5f-467d-9a88-566aa4085eed") + ) assert user.idp_configuration_id == "7cb8e00f-af5f-467d-9a88-566aa4085eed" assert user.auth_setting is None From 3211d7a0927159af1ccbd0f1533bd18f52e05011 Mon Sep 17 00:00:00 2001 From: Jac Fitzgerald Date: Fri, 23 Oct 2026 15:57:52 -0700 Subject: [PATCH 6/6] i18n: add idp-configuration-id strings to non-English locales Copies the English text for tabcmd.user.error.idp_configuration_id_invalid_uuid and tabcmd.user.help.idp_configuration_id into the 10 non-English locale properties files and regenerates their .mo catalogs, so createsiteusers doesn't fall back to raw message keys for these two strings outside English. Translation is a separate downstream process. Co-Authored-By: Claude Code --- tabcmd/locales/de/LC_MESSAGES/tabcmd.mo | Bin 20097 -> 20460 bytes .../locales/de/tabcmd_messages_de.properties | 2 ++ tabcmd/locales/es/LC_MESSAGES/tabcmd.mo | Bin 19838 -> 20201 bytes .../locales/es/tabcmd_messages_es.properties | 2 ++ tabcmd/locales/fr/LC_MESSAGES/tabcmd.mo | Bin 20281 -> 20644 bytes .../locales/fr/tabcmd_messages_fr.properties | 2 ++ tabcmd/locales/ga/LC_MESSAGES/tabcmd.mo | Bin 20125 -> 20488 bytes .../locales/ga/tabcmd_messages_ga.properties | 2 ++ tabcmd/locales/it/LC_MESSAGES/tabcmd.mo | Bin 19991 -> 20354 bytes .../locales/it/tabcmd_messages_it.properties | 2 ++ tabcmd/locales/ja/LC_MESSAGES/tabcmd.mo | Bin 22545 -> 22908 bytes .../locales/ja/tabcmd_messages_ja.properties | 2 ++ tabcmd/locales/ko/LC_MESSAGES/tabcmd.mo | Bin 20295 -> 20658 bytes .../locales/ko/tabcmd_messages_ko.properties | 2 ++ tabcmd/locales/pt/LC_MESSAGES/tabcmd.mo | Bin 19146 -> 19509 bytes .../locales/pt/tabcmd_messages_pt.properties | 2 ++ tabcmd/locales/sv/LC_MESSAGES/tabcmd.mo | Bin 18631 -> 18994 bytes .../locales/sv/tabcmd_messages_sv.properties | 2 ++ tabcmd/locales/zh/LC_MESSAGES/tabcmd.mo | Bin 17342 -> 17705 bytes .../locales/zh/tabcmd_messages_zh.properties | 2 ++ 20 files changed, 20 insertions(+) diff --git a/tabcmd/locales/de/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/de/LC_MESSAGES/tabcmd.mo index 1e8df0671b7b4f80ea5fefb3590de3d907a77455..57215adcb93aa696c8d0105466539916ab735292 100644 GIT binary patch delta 3478 zcmZwI32YQq9LMpuoK~pVQjT(zhg91tTR>Ef0u~D`C?KaIhq!bHcH(xo>`^RM7cUSL zMFo`*AmV{Wv^7mYK@?D{f)d4Gl?dSqVjwCSj7CwvKXwvBVzcaL=IzY?{r~^>W_Vzo z@5}~Y>Tq_e)rP4G9u;0i3l8K{IFMpfK^opC>Eq93p;=3Gv9(2t5! zf)?-aT;z?fMa6#ymH20v!~Et92g=w-TFNYsFHP7Vb;D#VL|`{9*Xj(sqUnr|hh6yOaG{P+>7vR|;T* zQ0EnB(LwE*C8&a4L&a}K#X04jx1ud7yi;fTuMGVR^uux_SyO{*;c`^#H>38%0pw%; z;Y$HK6GatYi#i{N7DGs`W*MrG^{DH1ARp80`IGu@8E8uus=N?2K^bbTW}qs%AJw`S zP;1HR~VCqmAtwxr~G@?53DXNu6 zP>G#Gt$ij@Rk0tn#^tEQZbu#fQ;W=P9z(@>1+^!3pb|Na-SzypW>($M8+F4#RAm#8 zmzAl)cDM+Yz!KEN>rsKWqQx&!9s30pr!_%1G!~V>2-Nk{Jfql+`OPwK;3d=q@1b`4 z*PiE5f$}L^0dB%#oQ3)L7^<=c9EgWe&wI8_-!~W;GPj`;t3kzk3RB9go&){Rgqq+e zYVH2Swb+5aYNFS%6u-c6n8nW2d*V*i)3XHm$!tM&>>JM$*p~C3J%2}amW`6S@QTf3 z$0+k5*wRPKQ57v<)}^=sZ^Z)2V%f|>?2D^VOScPk{a09tKH7H|I;hHbLuulWs!VozQQN@zL`z*mvE%|TRRiheElaRT0j z+Qjv!-#j<7J-i>w_@7BjwHrs^cc{(Ro#8~dSK)CSjg$JP zTl}2oR=l3^W-P}{+H)OFMV8$xLv?yHhV=aJT!>8Q*Wpw?kJubkOT+C{jB$nZe$UZgS<4xFMxG^{5WE_j@aH4+4 zlqwp`!m9(bP%W!QRkjh?pJp%iz;j3rCi_OZg5yz7$zQ1Fy=$p4mtsCDUO()NW!M{M z;A>ci7Oxsf|8qI07@4jhfLeklQ5S4MHi>D*l~_tSPve)U1cQ{z@|zWyfjf~^Fnh2k z`bMRftQX$Rc^O`T^{7JjkD~u=ILKrx_re_PhS%XhycPT4Lzs`7um(TF0G6>))R~vD zyN@--Nt_?9NdMk{OnRcHQJea6)YEYsU%=cH3$m7j?MRX4b{0yRufYSj6+g!nx1`_s zGsmSj-*U`jd>d}WZ*ex(u|e2p<{)mxjuX;P%U;xy9KtSm7TG?gFoV~aDjkjNJ5!75 zKqD%VeP{x~;4^10>)Lop`*%A|DNe?nSg{j}MPtQouzF5qG&0YfpNs_(ZZtB-4bE{R zHGwcDlWx!?0&^>?g6VrgPPqDiZ)x1o>qURc?)Y|G;w1$(IEgU;)Vv)TlswF@oY6Ic0 zRV{JrMr=fI{&Vr;HbAonZ$cfn6XfkG}2IhvHK+=|lqsgF+y9vjJ z0&&s{C*10=L(qwF>qK-_u-J}ICX!50Yn^*4!^yZ?0 S&JBbqE)=M78>`0W`2Gc+8OXW- delta 3106 zcmYM#4NO&a7{~GFnnNs+my3a1lmqBhQYcL#2^3P44BygOIyFtE;9D;%U0Iyj6m+x6 zVh+>L)ajD6ElFuEP0U=3tWC#kEHRzLOsQqQtW?(b=Q&#r@8|zNob&%b&+~uo;rhLbLz>U4O(ZiD?%`V`Lw*R7}Kvn2Q5(8antYCSbMirx?%t z1jb@3>bXuFVCLF=1`ZcOQD(z154B(!rePI2SdTnlEf|MaF$M3THc0Mk_85*pB{CNs zd>i%LHvjrp_#hBWWq<4RZ|F^WT6hR%U@j`4QcT5ad=w9%HfqL1yotnMQ8C^|A#|9J z_MPKjUxQlzBUIoAFrNMG2L_7x5-PH8)P^xk^uS0Qibd$)O4N~TMwPnWpPxixu?wi@ zyHEi~v&di!V>*_g_InLoE${(@Ox%mg>>LikZqx$dpchC!YCa8hhD-eG@A+0^f3ELA z9mz3Nh0dZXbPXxC{eyWJ8BhI5){3}W3(i7iwj9+1RT#p37{-&Rv%HEbVJ{xidHTwRf`a4|cL}eaHG}<5?bym5kjOL?Cw-$BA)#%_S zsQa3bAM4;lXWQ*x53#F$KNgkHB6M&)s&ei=e{c#pZo7<%@RmQ1A}R&u@ZsPysD^{Q5#pF7OF)Dzd%*+ENYz&i%rsshGt6R_ zleD!!8fIZ04#H)q%&JlM9Y=ob7d{loJ^y-w<5eOXb-e^#Ex3e%&T1`g$1SLZM^MiK zoP{M=i+V3yL48~L(3uP^4^^T0zDuze^HshTs7h9%-l#SBBz}`d{T~XL{mlhsaEH#R z!olo56%Qh(WA|}5Ch;26QB6eMKN}Ze6)wPQsLV?!AMIhwQBAo4_4TbqtB{aEj>_zsze!bkG+ezxCa$bJC49CUJC4G3s4JI;z(@3Dfk;`|{;QAL%p_=MXR6vp3wGPK)1vaCOs+jtX!BByCN|vD#mF9+RH( z0=R)HeM%1RkN|7pdgjGX^D@F8Q2|7Z_L?~dRoR)C!~W(n$iqfljW_WfT+TsG#!j4p z*)+!MxDh!eyNly6gNNx$TY=Bw7Mz4X<8zpv&!24l9+l8>4B};URkGU*l-W=^h5obY zn2c+Xy=^Ogj^{9h?~nDq?>q2e=Jlur52Ko^8Fl8r;(qK=;2p&Q>~CggPziJvP=A%K zU!iwH9;!*^VKtt{5Aj9PQh>iB$7?~-?u`?W>f1CNfK`}|dvO^yV;W|U_Y!#tBbe7< z3T_+kdd+l{3mm_-q88{)s}I6VT!k;-LTpA=W*7|<3UJ0aoq6d*@ApSg6-zAkntBG( zE>@1aa3^lZLe7QU?1IZck*9EAt(cEzF!;Rpj=zLzzL*m4k5U2dX8tnH!yYt9EG|GD z!5f%>l}LNo4pd@oNLyLoDPF?GsC^?BF|dWDr8Tk9i48;hd>w2U<9wXi&@v@8@E?qM BOHBX( diff --git a/tabcmd/locales/de/tabcmd_messages_de.properties b/tabcmd/locales/de/tabcmd_messages_de.properties index 01efd21f..d75e9e88 100644 --- a/tabcmd/locales/de/tabcmd_messages_de.properties +++ b/tabcmd/locales/de/tabcmd_messages_de.properties @@ -166,3 +166,5 @@ tabcmdparser.help.commands=List of Tabcmd commands tabcmdparser.help.description=Show message listing commands and global options, then exit tabcmdparser.help.link=For more help see https://tableau.github.io/tabcmd/ tabcmdparser.help.specific=For help on a specific command use 'tabcmd -h'. +tabcmd.user.error.idp_configuration_id_invalid_uuid=--idp-configuration-id must be a valid UUID (got: ''{0}'') +tabcmd.user.help.idp_configuration_id=Assigns an identity provider (IDP) configuration ID to all users in the CSV file. Required when your Tableau Cloud site has multiple IDPs enabled. Mutually exclusive with --auth-type. diff --git a/tabcmd/locales/es/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/es/LC_MESSAGES/tabcmd.mo index f0ec35241ef54be0a1bb83628b05fafb9e1f757f..801d455491281c6271bfb235aa1e8823f41728e5 100644 GIT binary patch delta 3478 zcmZwJd2EzL7{~Fc;b>zETFOzNWr`fFx(k8=0%EaHtQ6!{4lUd6OZ&pIyX;XY0xQ9w zh>8XwQ4Yl$5n4q_qEP3rofn#DWG8)7=qW}4Ag`VV0V1c`};oR26F;)F{_O+-LNZafuVRcjz=Z3 z2rWK=y6-J-{A;`v2o|xvX-!(XpaeDXC@jHgsDSQ6W!!`v@H5mx$FLLTT|srwhni;y zTAb>+&>LTen*U8y;QKL;_035dia3L?6j>o(TCgwbh6z}V4qAK!wIz+HQt$Knhme@e z1=RgH+^m56U{5T^t1yIG?@>%?f~_=s_#P^=-?29qwo6Y?jtrT*ynYn5hxdEq8$6pZ zpYeB5Tk<`sLT6AFx|~6(Zt`&`7Uxlak~a-Pj8cp-P;^#VTQM zRDTp&bWmqzIVz#esQJG_&2!Z2x1cOaynP4iuLyk%^ucl@SW}NG;e)8szk)gwUm_p# zH(#2t1G6aOeyDyWTC782H7ihwY(!nxjC{;jo~KlQ%Rp)9n zq4u~5E$%{H_apK#Em=i-TZkGT;#q}CXc=039#y&2Zm)3|wa1qcg(7T^>ibZEmGWhA zI%=Xtcquc~-ZrBG`~bD^x2Q^9LEj0)rgcG2_Sl2vs>5$cBisLaM9 zFDo+_FUN(b0G6W`-iVrL2U`3TRk1Uud0H|FO=D333`1Q%*)xKjS>LSi2A)GLuoHFK z4|rZcP1J+5HNh?D#~IiISE4d&!v6RJ>Uqz#>H7vDLuLvpuzJ*dk6}uYHPX-@cB2;f z5w&;ca2>X#u2kJ@!9lnOD^Mp>dwm<~=?S9_=SIxLZC-ze*WZIJ8UF;eWe2)bf8BV5 z0cF&Y*)C!^Dxi_1_b|@H(fBLsEDR<+J(jnlwr&CH#q}VL#5b@C&!Jvq(C>qD8+)bFhvsVrRFc2&dhEnq%4`g3OXeYeGApnYo3Ij3L8rRa;jJn_e@-avGQps~kOC|T?Vys06e?}d`(fkWF7=x(N zKZUx#5tYCimmUus#y~U9!t=NlYdBeF@k;hbThyBUs>T60 z4xd0(?zm?r>EA%V7mmjns06m5#UrT1GOsgcj-LM>G!*Hh*bQIz`~r0d|3F2a+0U4P z=tFIZ_=sK3N>#DkA@bmKz7YISg7a!VH(Qd7392_eK-Ms!}qX^ zjhv5Jq@^>k6o=qTI1~@#UMw2GqlqU_0r-iwdj?g&sq_<+p%gztUDuZA3RvGvprH~) zk&oHTm-g@{)L!SX!L=C2@%SB%MjuhcumRaEa}q~jK2a%vyHRIjDUQUq@eaJ~CS!)< zG)yV;^)z%E-$L#2$4K(#BIaX14n|k3#GBE@Ew~wVb|y2Z`$O0kmwG;i?dfmA0^EVS z@JsB3YfGuW7HBMG5!{PZ&z#3@*q<$nnoQa@e)DynjaF&hiY(uePA)B-b6 zm1w}JxZdmkiKH5Y%~_BrxUZq6(h!#*#FFGnII9dfl$aQ zm$-GqHc^*yY}v#qc9t7*{C0vfFX_gdpq*dmgl$748MBiD)gdR4v}K`4GHBy&!m)LM zIN^m7ZZzaD>A1Lc!n!Kxw_}otBnvcHXF*LU8F%X)JKs&zS)VVEOw{=j4N=E$Muj5P Rfe^{n1?t`HGb;--{sBCg%_;x@ delta 3106 zcmYM#4Ukq<83*vQBk?h@EuVrc%F8N?1c9I{vVd&TmIfqJ(LkGKAq1$AWsa4;p{6wj zY%z>wvsyV>0!<%SS|bjb&BQ=s;V^wEg(DIXljDeujjjFu``(#$-hF@PoW1v)=RD83 zcTe;+_21W2KQe02j^byp--&()4NmX>KmUAlDHC*0v4um2mok~-IhLI~hs#;x$2pF@ zmEY$W{e2wC!_0lhd3GuF@?VXbf!5|yrgH%^;m6pjOUnGJo3ng3B{p5Ijc7nqHo9xMNeu-Ud|v7Le|E148-U{e1T=1lyQKIN~z zGU2Ptjz^g-{TZzBa*DC6XEt&>b6p>O%A=J}C;v4A$C;fE6-^d6m#I}Jv!kn-)NN*J z+{+rj#a#DG`jlh7QrrG&yw$4t`yysTA7zbSU@}*KsA@b#Wla7B?EDhl%KBDo@$YWa42amHU{$ z4l}hs#q7A*?5S}(6WClj_+=HXSvE5B+|8VcJ|=(zY|Zn3Od~fmSv@z5W_C7{-c4m0 zz5L2*CV;if!nZRM-OCz(%w+HoGtV*l3`~{)&M|4O@2I?z6Rcm>R|9u33*66~_McTg z$4oTHwlhH+XL140<3?s@z07q_(5F1>D}lUTjgPA}GSR_|FJ(OwuG2`ZHuIa@LD?;{ zM#y9D&WJ=V-+;;=Bfxb5R@7FkJAQ2rf z`xd^)CH$1_4b+}_3=cD<>Stb5BfQqSIiJ^XGxOp)N>wexq%nuGow>h*VlG!RnfiQt zUDO))8_3R{VM_3C`ji&4b@5^@OwgIZ zSKeJ=Mqf$!*O`<*!rOR?*Kwom=Ft6~o%{!r>M8z1xukS38@PrE@J=ScUvVD) z&S7k`dJf|ZUdsAnjkOwg@CQ7>)4bP-N{zPo`UoHAa!yjfq;6B?R(9y`=2d*2*}z58 zQsWKG#Gqv8%b$pFi@md96 z!acl+Z%~!WO`>`SA7C=@0&_Noh_aiP@dNxK-_E}=0kkb_9L6rzQ{(q**mSvzXYnyk z&@YLqLx z_$=?_^=?|km+BhRH7>Y9TG_+xyyV?pIy^{ER5@cw -h'. +tabcmd.user.error.idp_configuration_id_invalid_uuid=--idp-configuration-id must be a valid UUID (got: ''{0}'') +tabcmd.user.help.idp_configuration_id=Assigns an identity provider (IDP) configuration ID to all users in the CSV file. Required when your Tableau Cloud site has multiple IDPs enabled. Mutually exclusive with --auth-type. diff --git a/tabcmd/locales/fr/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/fr/LC_MESSAGES/tabcmd.mo index ebd31ac007c51d5798048f5fa750f50b46d2807d..3e5ea37ee53b84217e8381aebee0f058bf12049b 100644 GIT binary patch delta 3478 zcmZwId2Ccw6vy#fq!waJrIa1Ytx(#kQ#KU@ghFevicnUS#X58zou|W0ou#yF69kbh zE&+@i5Dbb04UJ7S7^@_PMnDobz-T};Y7lWl{lkUg_s4sQA+ag_ynAQfx#ygF-{ZiJ zjNQ93(x>w}Z!`S7%fA8q%fDKq|9-Nwjp@fQ2XnCm3vmqg#CceN4QTNR?2RqH?_)mW zGuR#fK;4&>W6VHf(q-XT#wh`9{=+r$PMNP%)_qTj2VOjPz#L5>v0CE zkQHe0S=4=R`SYLQi>kNc~txZsKh_OeAYMTxlqO#q@~OX_@f1fqi&dqCFr2V$5C6dAJyt3{`hMo zCvy>Xe-1Y*;bB;WRX7+UsP&%2v;w@wMF0<>D*FwKv7m<+pbD8X3;l5eY7Zat=ePT| zU|;6nLv6_^REI90I&=+_blvpD@mP{i|0&)$OekO@s=GTuTd@T%9qu` zV$^sFT69onW*w@ay{PynQE|@tD|{i~=maUA(I zm-wTAy@;ZUN2114(P9|M)oef&vIF(KHssfw^!-`=w@hS_g(@#WEl`2lt9hu3R-szA z3$@2BXz?KGdtV{HCX-dPw*{#AalW;vg4UqLmr$KcxBD00p!T>ESt!GvsBr+5SUGo?QI(>!K0{!KSy=41C>x7?O_Qs%(ogzIBn{@3$p^1(Kck8Oe?Arhf%FO zgG%fV)ZXV1RTT$Ndt8M|>>lI+FwMx?W)mvT%cwKahDziI?62oPlT~#?A?k)vsLG}x zFDtVIufb)g1lFMz-hm4ACR+Rm)v*hxIGF_D(pXdi6Hwou;~T?%tZz2>6T49hyn{OJ zCwwoW0u7;T1(=LwxB!RXCRAlDI0{drp7%WK-8TlAGILRhHKO7@g=uBBp9_7^j#}U= z)ZYD#&tooqRlt2X0YAdIcr7RMMy$tixE1ND`4H97A5k5-g!*qKkAra)_QftZa4`M9 zg^Qs~DDXne%P{5zR6_eHZz~?bYOEy-CA=5)xE@4x>=)Flx(jW)6K}%#m_}9p1?q+N zH|mfMX27KxS)BIXc=!1eYf*{pLmj$vs7_o$axy)58K~0HI2{u>7T-e!?7%Tt#LJ=_ z@5iaQ6BXw?@_TtvjjvDhzSYD8RLjE1T4ov2HS;1)!b7+TvncaX+=8mSFa58=5vZr2 z3CY21K#Q-V68glS&*q@0z?(4#(@8G$xIN;3@C=3-pTyl*&Ph9l-=emvmA-55&*5yG zG~DaV)4p%v&CH+1YRn(ucLE7%cA~cS7(T4$|11}3-Mo?Bsa);56LlEdP&b}LzG^Z@ zdGn)D9hl+kqV{?nQx1RqkTqvV`$ahUU-hqGNA*`Sr zwZ1Fm>kMqeN<4tKV+WqV%F*6l_ov_bUKoGG&A1(x-Rd3AJ{%a`SBIAM&0a2U!y`Ba zyO1{9ZEA2OF2^oA3~l$a|&70bSmc^fD=)lcjts=W2x^gn8UaNwS_a#;zM{8 zH{&3@cQXAS$VJm+o<)2bb$AYAAzs48SV$R5aXr3(>c5`hSOQ9Nv&-Lv^^?QP1VfyS&HoDO8L1;CgJH%3BRP-R)IA z8VeZLr&?|FX=-(-9cyJORI?*+6GwPia{XQku~E>!6SR4a#)zFPJG7U3$D z6AXp6{MxNgYnSY|d(0|JC7gJf6OYH@Wp1dUwk{T3?AE8^!K53D*1DluH`*ACU@GN? zOftBrZb`_yC+tKT{`Z#Fwm~&z=|F&Rfh)o>W0#~7NxR6gL3=r@oinGp(w5Z6l4EW0 z^5H9sOUqPafP?^0ul}xcfvvr#4BB_Mi=-8!hGHe5ZU@937B%2$YGBYI-TNI2?TsYY1 Kw)UGgDC1v?708kR delta 3106 zcmYM#3rtpZ7{~F4NkZi-2%47{;fMiRh@p{+sHmYLC~P`P#Wp8-NoS<%K0R4nbcC{u zObg94%S$tJg{d@SYLT{+NO(79^nXy)5L9C(}vhs^HA9MptMFd3`S!@bB2b{gZb9h2}TYJr5FW_MvGDv?t3 z@M+Y2TiyA?*cAv4Vtu>fF1VHSG;taZ#cWhSWjF}y@D6+*wNMN8!@rOiEEF3o6h@En z80TDf{#n%gTTp@T$KI@OXE;#AKcXV*L@gN0KsSuQA()3Au0UA^hDlN|6$fJ>YQ1vwH9;*0!|*LsW?y3(cA_RojSm7DhZ+~7_HeN~zuH-c{W-rA zwIxlc3Y|q&=oh5eb{%stx;OPFSRr(iEJ@EnZvCDjE!oN`& z$1$76>FD7!Bt~0`N@NY{x(4K9jm|Gse~%MaP?<*)jTRV;+N*3-Mh~G%w-&X>b?D(6 zsOvsKKGw#U_O{cV53{O%pMXkeA$nMes+_;u9h^Y6+kQetc+HJNM5VwyzC0X@ny3`J zGDGcc11i9Ms0ELpDtQSN(4WYZ7DJijP$Wj*CI<&rii+rQWP5BAsuFupr96%b>>O(E zJ5U*im|c6EiVAEL()cz9S<{xG=BYyUL<1^-(-_wC-^PJ%h+uWy5Rb|%19>;u4CLi! zb5Q{-LM^-oHPL4D@F1#!XHoOCA)l_v6hI=A>iR5a5e{H|Tk1|!pcdGM>h=$v7f};M zlC~yD#th8CJ8>B*vpUpuA0r?8o-YM*)1B|@1(nD`oi9XR6E5aJd$kr{!+O*UBa?cL z#|N+kU%_zIxCyc9HH1&+pjn2W7gh$*}*G|x)Zd!x#Y-*e*= zsES?nIbhDNu&9a+A-suLfHhc)mDrzjmHBp@f{m!I??l$L81}`((Wrptpw7R9D)mv+ zV|oMibVbuJI`1cPu!Mv8xC>9=7r2ZL(_W3C?%MluoQin-W| zOl2vV!Pd^g#~80bRqh9*S$&Hd5p-<|su?GvZk&%?V>Rx46RH9ioWG&=I%;H4!8FuX z6(Rj;HAr#nU7Ud5q3-X0ZxB!>j@0vC$iXyzcn(iu3)bL9(o&{j%5XnUz&xzL^Y}Ry z;*L?lbyu;2aUAt;KpPV@=Qh-R?daif8fY9A<5bqS4IHQ|&*N&0AdMH$$LZKDC)o3u zSjM;>71#|_#)-_P9-51j@p;r%oWj`{%SJ1JhfzJT55xEk`Xph$bD#;+sFO-mfINA& z5Lv_4;a7Ol{k}OjcrzYw9>Wm7x1hH00($rdp2oO|!B$#Pad039MxC%Sn?<=SB>@u#$VyvKn9>jA<)h&bit0K!$6@CV{ z;z3kz6|%1s-M;lX=)*zZf}q61a2?}+kv_C_beJ-4!bI%AH?hYIo)A2My)ZO0c;O_W yws0h>HwsXRRii3*6jh;Xn1a#qMSL$PE8Em7rr)6(29D1rKJ>oxy7fZ -h'. +tabcmd.user.error.idp_configuration_id_invalid_uuid=--idp-configuration-id must be a valid UUID (got: ''{0}'') +tabcmd.user.help.idp_configuration_id=Assigns an identity provider (IDP) configuration ID to all users in the CSV file. Required when your Tableau Cloud site has multiple IDPs enabled. Mutually exclusive with --auth-type. diff --git a/tabcmd/locales/ga/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/ga/LC_MESSAGES/tabcmd.mo index d6eb5def1413be61b0a56e0e840783d48434b6e6..aea819c8c8fffe4b34a500290312ad4b634558d3 100644 GIT binary patch delta 3478 zcmZwI32anF9LMpgv4YxyKxu(OJDe@bw&hTeB2)@R5R|h>l{DM#lYMd7t$VZ-!8LL! ziV#Fl10GR9(NI$pQK8r!#cG16y{))=ckxO z|3~bC7f{c2$TX&pF-g;hhGn1>Z^HXf6RyU7xXt_iAo76u4ZGsCos7xH-lzq};Egx~ zmB*d7S>Wqs3uv~Yxub zPbpfQ=egJ$e;zged#J!a!z|V}ztd2}X@sT7^0;Wh64V1Tu@D`!xE8e~J5i-R==Dz^ zF_}xK=QDX&0T<&ytib*lLanzBlbYZy8a~{Q%IrKAU|zS>1Qp1TneX-MPcFN%^K7^uc6LF3o4M`Fjwz?I;-k|zNiO=qcXb- z`LQw!@p@d03ScE_;jO5N-bIUFp(=I`HBUN|&@>hmz*yA%b37y1i}lT8-oPuU1wKTb z_QRf+P!kOxZA~y9i|{@ifNM~hHQ{jl9`(L=wW;SuAw#AT6<9rLzV(Z;Q2;4%_F$Gb6|lUagu@K#)jO5kJEyhl-$I)mE6jvNeCx({lLi~Cc5 zO*oN(vA7hE;%-z0Hj>_A^>G4@BrOH91aHBus7$`aQFtCJaR?7j#bwBl`4UxuKT(Nh z^XsNc4J}BfO6M@Z$86woGk$=2;4E6~!jFKyABN+w3RQvU@HYGv6;L5R5=y8VmCzztZqs4tlam`8Wr}w`z;VOV($eQLJtiUz6AHT-c zxS6`qG=140?crQxO|uSn;wN4|&X??t*^bBY8}#GbL{o;{*lz_k8waw!SxZ9;zk{Xt z6H;~4pN@+&F^Icy77pY<%)mxmfQL|-59cJ_j`L9oy?{(*_TzZe{%Xt0aWbyMr1tI@ zja*C{m&&XUYP=FT*k-BcYsg&Y3*3a6WvPW;#a{FeVGf@5`j=5#)RU+<9;OtZ!w@Rq z4&$jmueKRVcsiApNEOYKs2lcU4W7XW&Mc=|xEEES8N6G%{}If_U8sz|Kvm$niKzri za31}6*bkdg_Z^;?H0Bx_UD)t^?19Q;6l!m0p-$^6R0cax6CKAYyk!yx4cFsd+=F-E zaxT;Gb0k)iOT7nRHR|jv$49XxNuz;A*_71Y?LuB%^EbYW1-wJVXnsIdsG1Gbg3n+c zw&Kfp3g_c$R@DNhQP1b!mHNp&g5Bugo%V3FmZoP z?ZQCnnV=J@``<^JTk?1Ml0F~P`L39b5xX!Ei`yE<`fdBPcFvs16KvsvNPM&{c&KD) z!C-THEaol<$E-hW-GCF0yYWU_7md`@iQ2-+6Q&QgSIlaeARe*)P{=Bmn03Q89!xs6 zd{(8s-wioMcBb=S!i_os+YofZwlR{3+S&e^kmFC-@=zoZurW98*q}c~c%isk7jl?% zddxau-4!UZ(-QFn3p841QEey@bL$=3;Kqa2=kq7xL0`PF&M7jJLXjGOh~$F)dbhc8 I+JLlw0d`-^djJ3c delta 3106 zcmYM$eUMgF9S873GK9v8uq%r!!o!P;CZbSAEC>RvfUF{;?&P+a5{kT({)3FY@I<3x zW73Yqkk*>YWQtak3@$mYBThCsG*j6)QZ3lq#yG?uIcbv__4%@Qrk!W+=bZc8d(Q9o zJLlfr`yL(E+dHg&bnNh5#ZSNAiGGKVNbmnYfBR4=6Le2-G)ImqWeUghY_@R{uVIb1 zvza}WPqIn>C63|i%zejrZYlNhAB~z5Ee)ky$OX)Rw{a@Bv&Ox2Lpj8;e2bI$J~P3@ zGfVj}XETX(v&Ora`yQ^&AK0^2uFim+OlF&yJ+PfEe1fffnOV!X zm=b=_P3g~IjqS{yxs^%iYs~n4%s4-<`hQ^(f9GuVPlOH9x|ppLTV-gxyzrJ2;Zst4Wde5 zHHRAKGXr(=RA$WD_A&uJ%}n?_Q^})DKyTBKWwbKI3n<2VSvu4x-AqKAX?e;{rV>vv zrF@AA>~&`CPcRub7(Hv;$^T9p>^{uHyZ?gumxJj{_Zsvjm4vY8)rUErDgUfga6VMNtj0TyE&h?T=;N7%8%VSKS{Y>ER zvW-n%vk7cfT_Xc*pk*$Pa{&)>3s16(clt||%zn)T@=vDJ%Vt_8-oym_AQSNOOvdjq zfzFb40=lJg8xwH7SK}Uy0e*{X?5y~2X05+@aVgjF6?Slfld4zNRqkLaxSuO|oC#pA zs6NUq%=_ROeulqd61il~setRHQ^S5JTY0KvOyvE{0DrH(Z*?+zVFf31BUQ89&t$%z z*_20Uj?(Pr8dp#e%LZniT}%K6I495lQH?8{7$c2W_(|T!N$Qr&zR#@T5gNOUvtB>q zl}!IVT8%QxMFZ^O&73Qm%lQx!*zX)Nagz-or_#px<}aVq$n*RZ*YhxM5vvfBxmEO*JGTT#qF+dx+oVIAl znRIWtp1Zk|ndrjHhj#C3HtTPy`gb!+^j+EpjG{{Ui(LzpQ2OsA~ewt^RbqqJLkz3i!2Wh*M xy-Z?%Wj5i2tB028I=1SMyi=pxymsx*F{8)tJAc#*jr$hXp1f$^8&}UB_CGB(O!xo* diff --git a/tabcmd/locales/ga/tabcmd_messages_ga.properties b/tabcmd/locales/ga/tabcmd_messages_ga.properties index 04bb515a..9f3f3ab2 100644 --- a/tabcmd/locales/ga/tabcmd_messages_ga.properties +++ b/tabcmd/locales/ga/tabcmd_messages_ga.properties @@ -166,3 +166,5 @@ tabcmdparser.help.commands=List of Tabcmd commands tabcmdparser.help.description=Show message listing commands and global options, then exit tabcmdparser.help.link=For more help see https://tableau.github.io/tabcmd/ tabcmdparser.help.specific=For help on a specific command use 'tabcmd -h'. +tabcmd.user.error.idp_configuration_id_invalid_uuid=--idp-configuration-id must be a valid UUID (got: ''{0}'') +tabcmd.user.help.idp_configuration_id=Assigns an identity provider (IDP) configuration ID to all users in the CSV file. Required when your Tableau Cloud site has multiple IDPs enabled. Mutually exclusive with --auth-type. diff --git a/tabcmd/locales/it/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/it/LC_MESSAGES/tabcmd.mo index 1443fa3421a4d85e61f6c38315b68813f5bd2d76..90b18000810860b4fcd2e7a0b40fd4bd3689a650 100644 GIT binary patch delta 3478 zcmZwIdu&u?8prXc3L>`UQd;ERm*Pr`PC*eDfz?9Gr3eVP#R!r*?HoEshnYH;Y5_eF z4I+q2NTZE-f#9;P61#L0*Gmy4;x%}SNH7va6EA2~l>K7~i{Bq}5@WJW>E}J~%z5AE z@}9#ZTMO1cSr8m4>D6KUyvn~3{3|_ASHJ%h6`2j=vKaegC630)ScXe+6t<$nhwwt| z3VjPpxju>m@g(ZLKE-Au%>o z<8Towku~VB6LsH9;rt;y8wieOf9pe9`a%_I;n`S)OHl#ci^{kQ2jfSmjlRVpSUP~} zU<9?!RCIV_=&Er3G1U4mq5^*pOWEJPXP}4+2uqQT;*U0*fVyEZR-%UvA4Ij}c~q(2 z39pYKG1+O<{l(m@fXCyXa2Afi1ZuyBG0+0L7)0<5RA#^6SR6GdzrZYH%9e-Mt*9Q} z7tTK(+J!@z--l|+=co#uKvk%aNvdu`aT->ZQh$;+j|nZR>kTzL2 zsuFLbN_i9&*hy6Hi&<3}M^HVUg$nEjgDWN+JuTIX-5Gtq+zK6R351vj{_Tr~s};eZL_zg~Qn2?hhw+ zpf=cpI_(ETPooyPh_to946MeR@FLuZ%B%|~;t|yIUgGliO-80{2`aEQ)OwpSP-M?D z&(|8~5#{c4B+{NAOVe5HKF2{f2 zTr8Q8ui)~~)u;+~;(UA`)#8!#i(IV%>81r32iw7bN70H&TZeEQs>d^N04_t_kU(Xy zIsAMt>b-CfmB4Y-i{}igbz>&-{{qfHo&F7|$Mzq14erAMdj8L)vFd#(D#AXy5?^qEBp&aW`kB^TWc-x5TWjF4?<2V=}CY?dJ6EDPVe*}Z#>G{JoE_4ZwWPUBK#Ha8s>_>Wk$4#iicx7$=ur*;{t{+9s zZ%1AQb^smzic7JqE+0rMQcT-Y7nq&L-~bcl_z4cflc-hh`BOdzw{zWs%kcu9InI~G@dez51Mx-++?ajul)tqD5n|EkE}g(tUo>D}%1D&SkuGwUu1|tYdY1&McP%?*Db7ae^}MAKsM!~ ziG))w8RsWmHXeAc_WC7mg`e=M-D2;yoS*h$?)JEsbnU5J+Wj@!l<=ZCSDQ%XVlLxn zJr|E=2rrTKTN56OF3dPDsc*%q-TYiO#|G`ryQ4Xg%lK`cyWP*mT_h6CW#f@-d#hJ% VvlFSNXoBS8(Kf&P)VvV|zX5*X$u0l@ delta 3106 zcmYM!4Um;p83*vQ1-hmS3%j!5DqPlFJ_HrXfE5vgE!GybhM0j?C&wMW%n}>>(1{!6 z7fw#AWQ2%Wrhzr3Qrh@6#FT^4sH2%Pp*B=RR@CGuGZs<5Klhz!=kEQTbME_|^PJ~7 z@B8I%HEp`Pss8%tVRsgPPx(LD|FC1y`~TnHjxXgT-Gdy-<`YVp$gw<;Jsi(VSmUSJ z!J*1+Y}en(QGA)X?*LCJrC$D{Q8UolQp)L^%S^b6UA&n!K1er|Jsiz9IDvBaj$(sJ0%H`Gg_00U6nZSR*cI%g4X(Zx(Ok_ux1zUA;!`Yn7Ue@?2rX*iuQvG1n z-$k*M*O>bcG69b?$!YB7sqAOgyPEY(aGS<--p}mpB~IcIW`gdvMj+=g{Y#h{uB^tt zSUJRT#_wZF@)VPy7nuzGm6BcF;aoPi%fHQ*URP(rrOeJg$((_k*~tgk&0S0_-(XUB zteeuG#2R~u`wsj`EDY&wfN#PnM^{%Gtd8ijoi>=_1w_L?CcDB zH~iF26oe%3SLN{!TNJ-6^q z%5Iq4ng27Dw=*UAQFmQE zG@daa%jGbWiB7M-_wh`AfP?%fzsK|VFDB))y&QVDf{XZV_VX{ynVRLLk&N{*^IpsM za|81j@2qQ_t?>er@^^dx&gTT)#7}UL2bkac&6bj^Vlr_*C8<10v6sD^&v#90oRI}Q zSN|Fw&mS^@JkEKnKc{hxMvLt{!Y}c+oauy_tBmkkyp%n>kl$od`G?A;vl<)j+-rLu4e++%>>pwr*U>BbEfsnQjJV-E7x*I!?W+_#!tyq&xFV`kyc&97?DoUMoE%YPcL z8aRc`7nE`pySa{E=Qg(4X0CgZvS0qp<2ZgnV|+3_`eg}gypGGcg -h'. +tabcmd.user.error.idp_configuration_id_invalid_uuid=--idp-configuration-id must be a valid UUID (got: ''{0}'') +tabcmd.user.help.idp_configuration_id=Assigns an identity provider (IDP) configuration ID to all users in the CSV file. Required when your Tableau Cloud site has multiple IDPs enabled. Mutually exclusive with --auth-type. diff --git a/tabcmd/locales/ja/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/ja/LC_MESSAGES/tabcmd.mo index 5e0003520f9823800bba249fe48ea0de2f0a67fd..91d899c14d89e43eb00f7e28a5592e7f70ee6cda 100644 GIT binary patch delta 3478 zcmZwI3v3ic9LMn~5rOcKM?ol1hVtkYy%wn2N)dt9)*>K}Ql*N`m0P&Q>2Bq}Np0~$q98ze?0YKR(qD}I0MCdNc^+-GNY=Rg1X&+K(` zTh5;^=43njU$DjS?{)qUM0-zYP`t6;$F!FqiqwcU&mr9MV!|`Fv@@@u&gwFn|tPd;qm2dr+l5d)ehLx%!pP%GPjIs?z(P&|lZ@f51WJ$P6p zEJU?y(4vDnGiy)_dKMM`I4aIJe)|H-qJ<9}ME#Xvkd6|pMv^rdR0;1xm3}wsOniuZ z%sIXka1c?n;)$sCOtct5ay9Ev3)z8st^@g)D?QK4)zrwc>wV+jK@hMd0vIqT(FHw8kg)EfeKvX-3N^B}$ z7H>iYT7lRDy?56Q4j;@^4f^{V5Mqm=fPwB;l-C>|K}@sEoEC+hp2Nm3S9b z%9E(X&Z73dH&M0XAZm}RQHkAvya1*JncJ*K#d#WaCOS}we2YW%{&!_o4H$_UP>NdF zY~;tvEXSVMib`M&YT_NJKrf@kW2lP#h>FvdAY2-YN?;1=`31gl%wvAD&hOZXnqWWb zw14FL7b?(bmaPEOu^4a0(YPM9vNkNmPSpF}-+JT9kuFn@N-Tqlw;8j_Y!4T@aS%1Z z7pT4a1GnKt)KwGh!a6*P2^_=8)Wi?tbUf&{dvE~QB~ylqGapr%rPu>o{r2in)cNk7H2|ZvnF@@I02$hAZ(FoIqKa!)(GTY)4J>E6%`Nezlsh5hHjMwXiFBhsoL0 zp%Tg9G+YbW!88d%4hq@8J~u3HRW{3H)5*DeT0<6OFkXpW}qB z#*?@Roy)wxl5hB)K|ME=uLhipIy1Ym9CIi)yJ99`i{AexF0?nF`8WPXk~L$?yu(wE z6vHgTNw^hr@qN_ZevKBp5S<*&DC8KKdL&2Fid5gcfLiDYRE5rAzTW?eE4>>H$j4;) z(w@D7Z{c8OJ%XL6#C9=SiF}GxIEan^1aCsMFQ?90VJp_<81n=^MEe)YI~O-_Ks3G+ z$1%SdGS%y-LTy17mB@b7z+Zju=U}wbF5q3e5x1l6|BRY&eWkb8?Kqfr4%sM99%|3) zP-p2$tihi#tASIl@lN9s)M2>?IpF3f>i+M@xibaT-u*eKv#|p?E@my!w1s;yA5UOU z{0()#>$Totz5>6aU5|xWSxf!3SGU&kD&a<)if@bxcoX}_?W;< zZ(Iud(%y~iis?X&{|!}%(X8rLyb25OS=1IBnMM6Cl_i}4oJf&v*X zO1XFuby&Xg+jgOsNFAC`IQ-xbeFnF8@AcY%`Nip^lPGo)iFl&e4L3I~j>nd`OVf!^ z%8kbw-EgBD%Y>qsPP<`~3N_R~HaRwA z&xf@O7SvYRz|weXk}bS*{9T1bW?C}oE{!E^C}!QT6HB?N7TcVNXJ{mBptfpGk^N6p zOMq0|hN4lcwIr<@v#Chdv6b`d?GiWY6x(^uZD}{*gzfDSCuUpX>4dEdHAS6J+Ezy6 z>99?@DaS@aNz#j^+~%l5&^bx##Pn3S*v?9)(oE1|ojVps(@8hu*xTJy#0G<*bSe@| ZwKO}$rY0J13Po95B$RR6Pt=#?`~!j)*0%rv delta 3106 zcmYM#eN0zX9LMqRuaqz)1Vl&_FJL^Fsi3AHA_}AuBp8u8bv`g3GhB^7Oy%ZM!Ieo< z*U~W4Fo1!?sEzq?({dNFLnPz>&77KhOoi5VD+Md)BTMq!O_9rj?{jA3{I z_1sPDW9HhwTsTa`gqS^xnWzQlV?0)&gZ0P*b_T=oHulAK)CRquGV712s6?irgG*7* zZT9DnU`HSr$NqNHzo851Y2hSH!3?5eib02Qy6;qf zei>^0k5GZ{!5-{yXSqDv?>p-S0|3hV-^_id<* zLs(rsPDBMZ969(l1=-UUq1IW0Iuo_10M1~H-v3rE^gw{!^*{tFvw_HWlNBOgel`^q zz+BYEm8gY2Lpziw$`LPy06iB;2ALV$J7>1fJKvxUS<3hb!iCb_JYT;DsS%Rhb z2JS{}6w8Smiv_6hdZZiHgj(kksuFG31$7`aeiBDxA1uP@3DiF&V78YDE%Y#>&2V-@zOBP%l zWkTP4LA>PZZ7Qk)`B;eMI2)UA5<1+RiEpAZYCvUl9~Jl*{&46JZ$kxs7!~+Gn2%8d zyufC=Tqv>%q)pa{+TbF-gZ(K>Gwww#SWe>?;A&K6_i!XW#xkLXMBM zAhC7qssM+wyE2`Ls?chT#S{MgFPN_PzjM0Rv(fl1H*CeTSjO%OES0Af$SlmokMR;- z_s3sy5R{?nT@v8$1#V=xg8CL?I0r<}mm$Z)KJmxjW0uQA=WIp7;;08JeIqy+Z!xaJ z$(S(K`~7m%hG98guhTJ_aTRKvZK$4KMxCV;q8^9KQO}*i7`%(F4oh&J_t&iyb;H}p zd9ymy?|(v_jeak9uT2Q6#WBu8m2@U{MHe|n_Ad6t<9HWaFbPkO_geKE(k+XeK>f41 zD4gJx=6$SXd=$6ftGp}6@BzMvd->3Ve`9w{EAV=ogDS0yszg05!f!Ah2a$zZFbRWj z9V)<$h19 -h'. +tabcmd.user.error.idp_configuration_id_invalid_uuid=--idp-configuration-id must be a valid UUID (got: ''{0}'') +tabcmd.user.help.idp_configuration_id=Assigns an identity provider (IDP) configuration ID to all users in the CSV file. Required when your Tableau Cloud site has multiple IDPs enabled. Mutually exclusive with --auth-type. diff --git a/tabcmd/locales/ko/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/ko/LC_MESSAGES/tabcmd.mo index 2a7894f0c7357a00e0ec80b56ee1aa349e0a79bd..f1351cf2f77c9ce44ff376b20a32216e3a2be367 100644 GIT binary patch delta 3478 zcmZwId2AGA7{~FqmP3vT^x&qvpwO+l3yKGnn_{s@5k)|*;I=z-2bbMtk75zr2nIw= z(U9VSG-?pyfi{)|rn$?~k3tkl3{QnR$2Sd7tNb-=tBoBHlUW|T~w<-_0G>B zIho6-`}4S22@k^jzV7{{ik^2Fra{SsLGx}?SZY>2M^(3Jcnv=2QF3% zOHk*N(4vFdGpkVry@85<5*6n=@4O9dQQ<}1>Ay1cGcW`zkYr6As)bLXTK_g`PkfI2 znt%9E!0tp*#kZo)r=Z0!lB-#ZDx?W@-CpF^ob>!j{kIIXCks{XLrqYQTB|vziXKC? z?p4$pH>1V(282)Ysf+w7NO4lsKmzc zVR0@h&~m&|8ES3!q7poUn)nM;C;vtzluvt@!VK}OL=w)Jn(TpDj>@PJStiqh>cl6g zR-Q#Ab`iDqc|=vke$*OQpc0#fJOHL1ncF;#in9f^C-$Ne`5yb|`ESdtx?uq7hGD46 zrXnvZvlu(!GE@SqQ4=?z0_{MH$50)+fQr+WARHQtN?;7?`Wc=v?9KdUtv9e4HNigA zZa?9985QUT%2t307{GaW13rzatQm*lY1H$cZ?pFeM~2KyRAP0gc+X)*nZ3(_zBq)M z;A_;{UBZpng}&T!WwMH&b%2Hp`M=SQA=?c^>5^qcYX%d$)7P7FQfKM&h_+v z6bD_{F%>uk|HSpE${P6CfGs!~CsUR>)QGp>HdFy;@J{>SG?hvNYxN%JRat^4s3P@p^TE_@K@V-t?Rzwi!y&r3obT8x#r z4JYC6sEWt(dey{Ls6Lb28YmheZK=|;&Igd zrECNxQifXNB{&|}p*nU9M`JDGH&8n)`{G!M+JswB?}7bDapnZl zMUzYa^ak{!t{d$+3-$dH z2k{cVg9qp<`^dyupDVi^)!M`OA$DNnXm1=vO_a~Z=#j&}ah%Qh-DTP9UqgmWD;6`q zDW*Sk(~L%C97SdP5{7XiaLT5B`DbP|-MEqgaU++tY@w=tC{d2<(KFSco%F zOR@-e;~LbGmQSGnnjk(QJJ5h^P_rBR<9S?)9m-i2d>q$fN6J(pO{fZwqYB8S|CQJc zmGE2~fJ<=^zK8>{4eg-&rlca1eN$C4pb1^wmefXUnyn_Y_PIq?1k};3N{UM8FNj7u3X}3*FjuBA9Yx(FJa3fg7z0MlhXr zLnalhu2~$)-V=5r@&CQ0WpDq5fsEfzIR91Q7_p1f$&{^jY|vf_YiG=;oM?Tuu~eBY zd35NCl2S81nRIKTNgIq>H{?W9ZmQnK6R|o@64qBaaayUpDyk(wDrSR`h*d2~>qc!V zoN;XV^qF>{8*u{merHMAO*kRDH0(reeJq`@4+N_tPB3lDBe8VICf$@{!@(r!MN)1& z;t+IN(mGLH6$;p@bSljR_11Z$CX!CNb&g%?roz_m52jOLf2uz21k9vJtU4H>xNxw} KZ5cYXN6x=Y=E;r# delta 3106 zcmYM#eUMgF9S88k$mlw_uD~MT^78QFf(RrK87p953t|wGGx#zy{dcE{Wulmt`y*CwqyZjIF-}~J3{{Q#)KBZiudx9-&x}cO19K-?a;4og#8rO0l zdn$jzR{h=V%frll$2qi=dU;=?=0sa_DVK9PGvF$YFGktMA0%glY>tIq$5X9M8~^Oxh*1?NjI1CQZl>|g>~!4d4?#oW$Jw4Z}`l42;$ z7d0koV@-cr|~91FiWzLDfQ!3 ze-Fh{jxhJ1U;=J2$fa!OD9&f*`z-4j;C_t>{4tZ+A&%i0W`OqojX-8F{p*=ETv?sJ zr?Q8Go!`nV$u6cs2bl`JNyRSz=5#i-s=s7Qr>isIVkWasGkah?+xQsUxrbTHH<%Kh z=ce?>u*Obi&)m)=)Xj{)lNsmbs{b03_&WpCKM^)d>jP}3;L2jAgk4POH!yqRY5J7E zIAp+6Ove3;mi~CwcrC?PRx^p*%UrjGK4oX+fz-d|#BnC`CedVqQOsI(Fc~dlO1F+# z;~v)dD0AJf=~Iq5WNpt>=iAJh@2_SOx|KD4ovB>?v8wSKTJG{UCc<~BezT|&Sk0lv ztC)e7@N8zx+HPS2e1e(q8K#m)nSlODLzWh0ikDH0^>R(4QI;?feSwyzJit`qr%Wk# zGl3mu*8T*OakJ60#_ddCSJK8WH`APD4KvO+m_4zD3E&mB<@rCRksErMJva1cGMh;6 zrm}!ue&rS>fZLgg?_~yhh&BG4so+6ooMZGkJ6Hl3X3$(ewQ?aZF@ITIo%k9v!6VFW z|7GP7W}x2E&Hy7hk<&SvYnaS>nCqUWPx-S$0(q}GKd{!Q#8l?|eAYAIN{y`5I&S7B z=7LG;c{S(rR&L;UzRf%>L+#9zegX5dv8?Lf##HW3p2Pc?J+hwDxruXlaHRUbt1;M) zNhYlh4{{o>;~$ucw0V6^;uNNoxA98e&6WHG7jTHOiLG=|(aHuUu_yRJzQBxgk~OxE zsh9F$jk#WTf+}BO)^;m1&~xnMQ7+|ZFN10PDnFF(nF{@j^EkyzVlMAtGTz5be2598 z$?LU)Lzv3lSl37=eyQr8pjEGzrYVhGJ)U{)=TH)53019hGjF^d%x2wNd8GROG(Ev( zggWQvdM0g$(#2Gyhhiz)*q?u8#yQC;dHydHeo8T$`?!wVI9FZmlX8k@ce`~;X%}!0 zH!^$U6E;vL`Ys3d^4Rib{omUtxqfU%W6yMPnEsEbh-EJ?H-9;)k%(*Rwu*DOhEMTR zZ1c=~jCXS-UuKP0SlEwp5fk8p%)l>l4o~ws&XnB^?B-A&VfMm*SXYH|zAc>HKa;s& zIonvL>Xyyi#RIJI{*N>^-!^7xUSJ;{U@QN`EXmt^md(nLCEd@Af2!)Y&Q^c>ugsd= zcw?>Q7xg#tn>_CtzXR-H0vRpcWOx&kK{w~|AtvBgIfC!Ai^Hu?68jbvxje~p`8tR5 zAD#8a?rc%7OfZhgU>Psv=eURu^FF@GOt5xtDX;N6T*y1GZM=Y9q^g!yQC-X%XgicH zKFO`TgNv+7uG?ML7^d-G?&mNIy`8Vq{wka2H`ewLbKN-$O8Fs2aw+$*FGqRy`g1A= zavp7;vYbh53+>19N4B$%sFP^Z -h'. +tabcmd.user.error.idp_configuration_id_invalid_uuid=--idp-configuration-id must be a valid UUID (got: ''{0}'') +tabcmd.user.help.idp_configuration_id=Assigns an identity provider (IDP) configuration ID to all users in the CSV file. Required when your Tableau Cloud site has multiple IDPs enabled. Mutually exclusive with --auth-type. diff --git a/tabcmd/locales/pt/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/pt/LC_MESSAGES/tabcmd.mo index 808044198898b3d9c7858b0d090fc91fb11c9e34..24bd6a3b22db833dc34101778fefb6cc00e55d34 100644 GIT binary patch delta 3478 zcmZwJ32anF9LMpg;l7Ur%2ftLXw_{CC?Z8H6bj|G2*{PX?LO#>%WmDHP_B)Upd12f z01ZMwK_o!hq!LsFF$#f#F=`Yc&~Qj1;(-_pY5>1K_9ceIrrpoH+4uhQpa0D4wr+je zzBkg6_3aw0H~f6UUpM}IjdbJ@$}EEy4Va61pcpgJL5pipOHz$0b)9#85y{Ei zLOtJ-hm~*+K7fUIKZa1_t;3`O?4{wyBdD4EfqgNfeJVg9(q(3Q*A=KWe97zI>{)}I z>HiG1B5M}#(?|W8ym9DIz)IB2R-^X7PV91a$Ant3K_fCAK7%|Oj)DXMha zP-|R+77wHDyMX+fhK!=M%|P|%d6u9i^def^fvQ~csMq)bwZ`|6g);1by7r?I%jd=7 zOjMx7cz0%~wLOSR@C0h$GpI`5MkUma@-T$S@hn0TPMWe*!z@N+v>sU|Q;Vv^aa1YK zqY}G;TKkqn)r|e9H7-OYHVrudrV1I`tU|?k7qur2q7u1^U3LB&GO8ZviF#lFYGxCV z4=Xbdo8v-M0?SbYZ$Smxj~2f|RqQ${PD6swG!~V>P}KcXJR{hJ@y!aaV>@bqL#W;U zo#!o7px#Vd0fu8X&cfcf3N^DD9Dwzx^WM&;o*RU8nW?D6DpB!X#iTN;rlB{Eq6WBt zTDyO66Sk(VLW#LM_!6ROM<>d*U!Q#xGG{FQ-ryukS_uAEt4Q zj>oV&JLe`&L1jFF>8-&qj>cQ40ScKOkC>ULwO@+7W!B<#`->A(vhAj1g7DjE> z4XF6r`y^AP_?!;*mAQzT$!%nkCYPsFp<<-VxHt&c;dnfbgRv7I5=y8TwKNHQ9Jk{b ztVbo9#fOOE3`XshK#~UUnKhs|R z)M?r1U00)Kd<0d&E2t%CP5BhR2(`&w)P2h^UFZM3yA5MLMGbHUN8^2*r6V{NtFY}O z-f=?(u0hT8CtQe@i+tRK+KgxMS4Lvs2|MB1q10c; zYbQI8jcg8~61akTpv{xUlwme5!q@N>Y?Yt-*X%9S5*))ucpFuThD@(34#adU#)X;rtiel=AQGY$ynXTFbEq1|tWZBJ3uYWCSX{s@d7f_|2#DZ!w?Zb0;8uM}g2xCg{ zCMwP|BU6=HjT|Ji1y|$ABn_?c^upA?L|Bee&6T+B-P{e<)16OJA`FAaAS@xc&mH_dH4TM5gbBS3uY~$rg#}-VU zYUj8iC)*Y~&nMid6SVWoov^KnB%=1|KxxPcBy2$_k_g(E8+UAZAVzwjxLXl&2s$Zd zov`i-X4~Nj-Btu%dOuZNW{zi@u~_Z+l&fDN&_J#S01QzYxfjo Gr2Pv@F38dV delta 3106 zcmYM$53H6|9S87p*A0ju{tI#e-wSlFfIwFRF1???j@3j>TpcZ%%|- zW_L3}Z$n+KJJU92gt(>+T{aCijl!`R5EYS2axrZE5!UC+`)u94_x+r6?(>}UJHPXL z9@zhI)30|o)lUp>-d+5>=y#mo=6>n@|L2_#moirOEQfHwpi){nhNC!_6S#&oZsBP5 zR6fa(`Ug3TN16N1aC|BCazUeJpk;6=(>R}*@D5JoF4p)I-B1p3IN#saI6%zeGp`18CJ2wSaR&QuqC$o4XEJEw3i6Hqr>*~82DQ)Z#pIELpbhBA0) zW1$w-^ygIGT#etu%>M`z_)j>}`sJ`jB0j}Lc9B_ds7`LUnpd)uHEw2(dHUh}qe1+0Kj11Z^W4fh=J9YnU_KP>p}R zvWJ%&e}XxZ7nuwlVKVeLN_P1-=X1bF`M259>FP{)6SK1~Gc~Y_E$m|(UuMqoZ6<~N z-IRViYwTod=5}U7-(u!Jz|8Y%)&DcI@%Ki_ekM%!Y1bjrTK|tM^rnU(#`xKQa-%SM>*rDuLB} z)i{rtXdN%@j5*uAOn^@_3;vwR){d(OCx3G7-b{IZtTESs2lb}}`wmkHnyTk`y$*2oP_R?iJ1n4Qg_ zcT-tKFTZj#6Tt1v!rPgN_OQlhnG7Cb<~dEDOOqvl2`0_;vnsnd*7{{*HL!zO;8CX9 zpQ}91Ow?@KnP4Jka6Tt<6SK1(=DJ_dr~KYm0(rk0A6;u?Viq%g1M8V^gGSEkUjBf) zY0c6hpR>4zOSzK?><~M6jyamiDm0mz!_>es_UC8WkL#HXck?Q4~*GDMzND~*~M=##rFpD0z1zX=QvSk{;5ocR#5qr zJKE}vo$N4RGvztvtd7yAyzA=|yv%H?*u}Zr%LH_cIg0;s4ySrqtY9}2=rhbb2btP9 zL!a^=UwMot)xA{&S*~G@VlA)cR_dw&&|r(-;G{VZn3 zE13*#VUA!ov%u?2mA}heH&9yh*v_cDp6z-5zo4<)AHK;~_#58MJ=ZjfY}m&e6VGOL zdMCfiJ}zRb!4%`I{5yB?MsAzkNd2o!<_0PGWNtMjt!!e4^-HgYO_syl$_w1ayX0{h z|H^rsX?scGCg%D#nDHhBkpLFZt>soOU@uqm7!yFdixa>`=5gQ2dQ#o1k>~xT>ViL1 z{R>=VeB69>!Sx)*iyX?KR%vD{hp>$!Ih*6Tl23CZM{|^l%hNTT>a{FgDE|pyi-Fwm zecr~O@g9!3&VNq$J*v|(aZ%$4R9^)14 zTP*)$HGXBlahFroA4VxGdD1)f0HSuc}qM(yoHOnV5v5@GxMBaGBv!j@oJvT z2lPM9tvpFdET5?_YgBs=4;eVXJ-qMw#zZYD(-Tv=IDvKkkdJab7k{d;&|@5-|16X0 zSLpQ0aVDV4S2T)v6>Ivt*vbJ0K)4= A^8f$< diff --git a/tabcmd/locales/pt/tabcmd_messages_pt.properties b/tabcmd/locales/pt/tabcmd_messages_pt.properties index edc2443b..8f89d876 100644 --- a/tabcmd/locales/pt/tabcmd_messages_pt.properties +++ b/tabcmd/locales/pt/tabcmd_messages_pt.properties @@ -166,3 +166,5 @@ tabcmdparser.help.commands=List of Tabcmd commands tabcmdparser.help.description=Show message listing commands and global options, then exit tabcmdparser.help.link=For more help see https://tableau.github.io/tabcmd/ tabcmdparser.help.specific=For help on a specific command use 'tabcmd -h'. +tabcmd.user.error.idp_configuration_id_invalid_uuid=--idp-configuration-id must be a valid UUID (got: ''{0}'') +tabcmd.user.help.idp_configuration_id=Assigns an identity provider (IDP) configuration ID to all users in the CSV file. Required when your Tableau Cloud site has multiple IDPs enabled. Mutually exclusive with --auth-type. diff --git a/tabcmd/locales/sv/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/sv/LC_MESSAGES/tabcmd.mo index a8f6cf7890ee4389d2870dff33cce2d928ed531d..a732ce7fd7b67bd8ab88bbf2dde897fa2aec777b 100644 GIT binary patch delta 3478 zcmZwJd2EzL7{~D`S_-rUDJ{2UTA|&dyC8UgMdWO$K`5u;O4)Yb(l=Rl+dW#V;CcXp zco85`8%abCjTowx7||jI1O<%|1g~HaiBTaM!Q&6&@%?q*#F*GD`}||29Ew_C0*=Hv zs6BV(D37XsLU>7DHiriPf&pjnPpzT5w(Ypc;nA` zw&Nhi523c?45~txP!-B%kgA(OI01e6)Su*y!+<7iMrHOG>J040A$SB!@EoedJ-JvV zEJgJz(V~MoGwVKb)Cq|eCGMH>TemyA_`^hLoF~BwO5N#8QqU6 z-SenDZbyp;QP+Kgyi6vmXm1Nq<;sDvIyi#t)3OC9kV=TUpyjVKgh0jlpu1vZH{ zi%U=wt-`L%Piy(hai;7135?n@k6)5+9&S zc@`DeZ>YV`WmaYEN9}P1DzLkeFMw%9);1ea^Xx*MiB41?7jTHa|Cy|+8;Vdjj74QO z3wcMWc?Ugi(pv~@$7L=_9*Ok99fxE+3!HoJbcVjcG8CVfj{I1$&QDsdEv z)qH{4WBr0@%L>urLR11Rn2o7dX{bbwUw1pf1O*9epHCl{)a3!j=tG&;+ zV{iHgP!;$HRjF@L3taIW%swjf@yK~KO{j`&Ms3lnsNWy+1r0^?6Y5Z8vT;+d8n9V6vMKVdR18+d8ZqB04QZ{8cfj&&&733q+$bq4FW+x6|eRGlq2h{wG zI^_j~ZE+4pF@|wGhdN9P$E7pdf=lUth!)G(Snchdyr~jvkXy_P$lB&B)ct*LGiEZ* z##9lFO*B;M4papWp#u622Vo9TSu8=;GL^UwAHacl%Y^iAz-;V6e;M||dhCl$sDK{E zjkq0kU*LA?uSO+dQBAWPRoX46GjSMo+RtMP&X~x5F!3OAE=~0v=?qt+7TkyImN|$D z{4x%~+)4a!VHqmHwMcH}#Yri?(=@(iU>N?0gRvL&Q9vV56D&gAm_$wVG*;uUsOzUs zNuQPFs0x*Efb<}$L2bbvRE5u@&d9I09*3o-@jRySB9?1ldV0bo_zL}IdLa0zM)`cNcN6y>*<^_^*Cl+vGv1lydh8k(?5&A~7x zlWxc)g0*!kL+N`OoN(j+-qO)I>_TbE?`Jyyf2L!^u1v-gw$`yh+cm9Su%K$1^{t2| zZnLHLjb2?^W+unu?utm<1|!xDIgx~$Xtj;8XfvId^;J!)F0=oc)iOaMYJ=ghRW5Ps zMr@)X<=Cn77TS6@>;&vwrzz>ioRDp4a3Z!fnvB``!P>ABOxmg8XfkBuZo;t*!8qZC z6K-SJVbbcjbt1Yd6tH(C6G;|mwaz_t;bh!xc5I8AXs~{NFqvrZCt4ewfT;{eYlC5u OYX~;G9s4TtGX4SF48S)4 delta 3106 zcmYM#f2@{e83*v2Bs_qJBODAk$KW|=hl3&|bt29|L=hARg*sXMC}%JPbYZD6EqzBT z!HM%2I;V{0RE&V60K+*cbGCkv)+lT%@J9;F1^-z7Xd&zK<$br#-t&C!=Q;0l-Pd*9 z_w$^c5BB@b1N~~R4eS3<@w3C-1Fn>AP_`*QtCGa?oXAhImQg*P9pWserqTg{O|4liR z<}>RPwXKhx^1 zjq?{NmvV@?|2UIyiy)t3C(q#=X1<$QOMv?fF5qUSvOjYiPci{ITkDBj#GKD#*6@bL z^*bB(ag^&%FiWzR>Ck?rL;s{^m;Z1on}+MZV#`e5PQdw0Wj8Ty8}mMN^uKc9C{uZpY%;+)%v$v@6@8Uy z-5O?%`&jWY=6k=QPdV(6wLRIm-fq_X{bHt|C9L>;rgOEY8iSW;xywJ84Bu;EvrnLhn+@(xOdqJmpv`GwOq~n91liTAs3j>BNtj zR=&U_c7R#?<4ncPqGydenZzd3#xDzK&T=CY=Wb?CY+@4F$M!t`hYfN=KeOkCR;IFv z^lmD1>E%}zG6^hWCccXa^e`*_jOpNhCeC5{oC=l%MhlwncQ^bJ+st29G%kFPnc#=a zZvT11LrkFl%1(f>oXDv>mp3w%^)cW31%1jvha_^MaeYKp??g9qeGY30c!NRKY7IB? zA!ZFP)X&MhmRIvW<|%lCc~1i;2w zy)LAs8_l|!yV=VL%FEg>XDYqZAxrf*)1lp*!@qMjyF^c`ze!Ci_b{7s3r$h>Fa`XL zR=xD^tf|tVL$p+U4Kv|triJS{h1)rkNBDV8@Om_7S;D+2*Evk$Pk9mFVm4)mmq*?o zlN{3FMNH>bF@JxwX5dq{Ib`ks!q4&;Z($|fC47*1Dn8^i4iP1tm`gd8>zK8_n_03a zS@9rKz(>p`p6owbIy8fcQ(I{84TDGc1P4#>e}Frfz}MPYbNL;9k-w)WuZ*$-V>i2b z74!GC{2X6pmSC{gY9>67U*jcAXP>0|Yvm<_JT`Bzh5uq&dzu}R3A#9hmoXihA7d*2CGF4h0n?FD);CKunOWNFn1pU+_FuWzV1^4%^VfWrYxt}Mt=MBdhKN)4Y{yw8gNzPfaW5+c+s`0qwtX8+*-PHX2m?D_8MD-ooX| z$!0ppRMz$dj}WhB#U0Gr{)y?tASe0WcxFkiXYPNPm+$~PIHITC=_#z`v6yX;jBes6 z{(u#?Q|$6GpW%Ss`eXV$o1GtE6W`(>9^+7cz$7$qs&281Be}cb%hbGbWUBtBwQbVO zrnr*X?JK#Ouke1(n&y$?t4xKbU0k2AmwD`FF^S*Kc5dJz?qCWWJl!&KA_s5<$MELq zwfd{D&xK^PjS28NbK`%RK%@0<9`9fq_c43r2-BhMm)2iIhnWN?*-$N9$?TCkxQ?6o zEl#|w{({?FGf2QU`4gVtce!XlnU=2O4u>#BX@P3@qFv9Y1P}~cD2qP)9-(g%SS-~ diff --git a/tabcmd/locales/sv/tabcmd_messages_sv.properties b/tabcmd/locales/sv/tabcmd_messages_sv.properties index 7af17ff2..ba01ab43 100644 --- a/tabcmd/locales/sv/tabcmd_messages_sv.properties +++ b/tabcmd/locales/sv/tabcmd_messages_sv.properties @@ -166,3 +166,5 @@ tabcmdparser.help.commands=List of Tabcmd commands tabcmdparser.help.description=Show message listing commands and global options, then exit tabcmdparser.help.link=For more help see https://tableau.github.io/tabcmd/ tabcmdparser.help.specific=For help on a specific command use 'tabcmd -h'. +tabcmd.user.error.idp_configuration_id_invalid_uuid=--idp-configuration-id must be a valid UUID (got: ''{0}'') +tabcmd.user.help.idp_configuration_id=Assigns an identity provider (IDP) configuration ID to all users in the CSV file. Required when your Tableau Cloud site has multiple IDPs enabled. Mutually exclusive with --auth-type. diff --git a/tabcmd/locales/zh/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/zh/LC_MESSAGES/tabcmd.mo index ff3767c3a6a425f366c615f9104fbb8a8377ced6..24faa83b99daca6fa35c21c30b8e5b25267cb8bb 100644 GIT binary patch delta 3478 zcmZwId2EzL7{~FcLTk0A|8bT77E2CfXJn-kh<-@bl+szt$P&8;Tko7 zNI*i+AOVkXgm|=C6C+Xt6#`XBln4YPfkqP%5+WY|DCqaseG@|>S@tvU>^sjq^US<& z53f%AL#wUsjeegSgDbzF34KupINS4u@egTHJyK*zS1( zbGg2V{qYafxQuLLh8mMJLupt#D)1g$f(p0+N8*0(_bz0Bxq>;E*~ggSI0QApWE_W& zp%$_RE$%>#JLvVF!=6NN1oN8=mZcktQGsV+G1j3HdI7cKcFf0bQ4?LpLd@+)b^B^X!v>@RR3lwxsdwFs+Qao;|1QsV z97zA?s4e*cRiW#s3f)B~RW}21G8W}he->{XIux)4wX#j9Gq4{A<8izjyHO?1AQUH76aT6kVQ^;d>II!dt`N!GNWO1KeK`gc%g;ydJH z{^3gj^NFGr--o)MjTVDQuI5G5LUyC>>qI{0tmie=-_nsm7Fu}`YJw`%Ue%#i^bD$W zZ=&|N9W5R~-FFH3nBL5yy&Zj6z*N-zi##JZi22QnUdJBP1cy}n;KV+beYAd#9C1CwqjD5wb9TI$59hp zLhapOxD)$QS8d7LScXTj60dvx6F8ydXlhW0Gl-eE((^ggpOsCX+r0kQMpA!0R(t5U z4^QFyn8pcGzz$r7-=bDFk>zTF<*1df+tdLwL&T??#S?xru#nL}}{1Q06%k z_4L$vMo}x>hRd6wMs*yn=_g&gTHk#?z>Ami>}*v5@)A8XDTO?WlkUQ5kpRW0+1o7vd9Gjqf6J zo8OTVn!7pb8W+KylA|hm8ZBP)e((2CYGLJAPJa}Wc{JXpk%dQ5fli?+@h2)!f9{q( zs{W`g8jSjV9OhyrMsbnXe_|r_*9{lw(Bb+WIpAi{q|}5} zIG5{sd>r4yFs8FiC6qwjzZEm^AS%JnP>1m{DzS{osl#1>Izx+*P^NV<^-rhqAsxf< z6C8x!qn_J8F$c#@No~;-)Lu3qKbbZx#H;uP_T~{{PSb^~#iT!+8dr%*#6eX!ff3x5 zq%ogHc4g|Zc?uQq72JSrxEjlOt*JsEVkw?SJx+H{=k15ZxD>xacEgOT;tvxxVt*Vw zBlR@-uz>4ns6>luX=tU}Q5l~^t@!qtDf7|z1A%S7_9^VRBkRzB1tp1?6D@I~(MYt! z4K&v`M#9V7rbN^qcO&6?H&E|}Tl^tRB;0_B`x_dU2U25#PN?~Rhjerf|7~Q_=Odi& zmT>gg<%w9_HaOOAd&1g9i)v=rqNYfEk{!FcZ0*=$Gc6W#o5C^c4_i0jgyU|!)iy^X zEnGxxQO%5b#rBq{mH_dH^@l=MYl&GmY~#VCW2+V{w#(d*Q)1^kPbb`{6R<0SPT00a z5>dO*-w<;A30oD4Bmy?(#vL2<$4D;}cbh{FLFdJ+6V_dU5<4dmPcT8NbyhZp5;3>M lu`Aqo(E5D-L_Fw=w>CQ^W>zTD;1995puffK=$xLG_Ai%&x!M2# delta 3106 zcmYM$dra0<9LMo5$qY*_atY*7`~e9{q@g}3h>91`KTOG(g+rE$Aw&yxW0jguHtXqv zlZ~m}D9cHC+0s~0P4SYs7;bKw{!uE`B65mI3jd8K61P9bA;b9{6-E}?f;)^51OS??Z;S*8flh}DVT%>n1-e3VLc{elk*Eq zq<#!X;dxZQJ{)TnvVSOeGz6l}9>GG?fHjzbVf1hx(!shh9i2K36}1#A26F z{rgb?$1=!x%)(4ujGAu^hBUxd3XkF*)XL6bHV&c&$V%`7nT4vCqV{mLYk$?*grjNS zjoOkUs0^J&W#}rBY`cSn7?nu=S*#Uvw+38}TGlj_;% zVKM5=RHGL3HfsD1)Hpx7`X8u;4q~MT3z8JvfcJOD#8I*k0vSw=JDm>Ow>RX zIJ7d<-nO6u+>e^@J5(kwqXN2t3~8~XNlrv!4B33YU=^r{8j$U=W>hBjqEdMb71(*y z-uI(c9L?z3<1AEQ(~*O3<;a{?hZ^Ti)R|~O1<;KFJ^#HF)FFb|)gb}3vPsCh$(}%7 zezpP?Ks9ROO{jr(qKAi289a*`rx*DQ4WfTO=ksgF1}YaRd%Jqd2kpGZOC{jk@lko}wI_f@K-x{}6>R4H__?lT(e) z;8Z+{n&5BLN{8{KEt!CNK?QLxuEfXj6I7}%paShj-9L=iA4Q8p%@ah9kClxN`H`%l zL3_6w)v+Bl!D$TQO;kWR?29r|i8R?Z9C|OHR@8&KFP_d?aS3YTQdA%f$j4rH^?f1N z(18k|2Q|l4QhfN7{*Q{SysY+$+dVGKf=XW z&Ou=>TIpgC;uF1+eL#W?!qP5i%;XU0{+{#ckcsz*Oqwi6B z`4{rB;4FU+*WpR(?;>MbDYFr?HKO{RLIrXamEpTskC}7KmSHmn@y`&26bfUC%-+Hv zZop1diVAqWO~z+24V&;Y{1R8 -h'. +tabcmd.user.error.idp_configuration_id_invalid_uuid=--idp-configuration-id must be a valid UUID (got: ''{0}'') +tabcmd.user.help.idp_configuration_id=Assigns an identity provider (IDP) configuration ID to all users in the CSV file. Required when your Tableau Cloud site has multiple IDPs enabled. Mutually exclusive with --auth-type.