@pagopa/dx-cli 0.25.0 → 0.25.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -19,4 +19,4 @@ export const cloudRegions = locations.map((l) => ({
19
19
  name: l,
20
20
  short: locationShort[l],
21
21
  }));
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FkYXB0ZXJzL2F6dXJlL2xvY2F0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFJekQsdUVBQXVFO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQVUsQ0FBQztBQUkvRCxNQUFNLFVBQVUsZUFBZSxDQUFDLFFBQWdCO0lBQzlDLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUF5QixDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELHdDQUF3QztBQUN4QyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTVDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBa0M7SUFDMUQsVUFBVSxFQUFFLEtBQUs7SUFDakIsVUFBVSxFQUFFLEtBQUs7Q0FDbEIsQ0FBQztBQUVGLE1BQU0sV0FBVyxHQUFrQztJQUNqRCxVQUFVLEVBQUUsYUFBYTtJQUN6QixVQUFVLEVBQUUsYUFBYTtDQUMxQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFrQixTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzNCLElBQUksRUFBRSxDQUFDO0lBQ1AsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7Q0FDeEIsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGVzZSBhcmUgdGhlIG9ubHkgcmVnaW9ucyB3ZSBjdXJyZW50bHkgc3VwcG9ydCBmb3IgRFhcblxuaW1wb3J0IHR5cGUgeyBDbG91ZFJlZ2lvbiB9IGZyb20gXCIuLi8uLi9kb21haW4vY2xvdWQtYWNjb3VudC5qc1wiO1xuXG4vLyBPcmRlciBtYXR0ZXJzISB0aGV5IGdvIGZyb20gdGhlIHByZWZlcnJlZCB0byB0aGUgbGVzcyBwcmVmZXJyZWQgb25lc1xuZXhwb3J0IGNvbnN0IGxvY2F0aW9ucyA9IFtcIml0YWx5bm9ydGhcIiwgXCJ3ZXN0ZXVyb3BlXCJdIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBBenVyZUxvY2F0aW9uID0gKHR5cGVvZiBsb2NhdGlvbnMpW251bWJlcl07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0F6dXJlTG9jYXRpb24obG9jYXRpb246IHN0cmluZyk6IGxvY2F0aW9uIGlzIEF6dXJlTG9jYXRpb24ge1xuICByZXR1cm4gbG9jYXRpb25zLmluY2x1ZGVzKGxvY2F0aW9uIGFzIEF6dXJlTG9jYXRpb24pO1xufVxuXG4vLyBUaGUgZGVmYXVsdCBsb2NhdGlvbiBpcyB0aGUgZmlyc3Qgb25lXG5leHBvcnQgY29uc3QgZGVmYXVsdExvY2F0aW9uID0gbG9jYXRpb25zWzBdO1xuXG5leHBvcnQgY29uc3QgbG9jYXRpb25TaG9ydDogUmVjb3JkPEF6dXJlTG9jYXRpb24sIHN0cmluZz4gPSB7XG4gIGl0YWx5bm9ydGg6IFwiaXRuXCIsXG4gIHdlc3RldXJvcGU6IFwid2V1XCIsXG59O1xuXG5jb25zdCBkaXNwbGF5TmFtZTogUmVjb3JkPEF6dXJlTG9jYXRpb24sIHN0cmluZz4gPSB7XG4gIGl0YWx5bm9ydGg6IFwiSXRhbHkgTm9ydGhcIixcbiAgd2VzdGV1cm9wZTogXCJXZXN0IEV1cm9wZVwiLFxufTtcblxuZXhwb3J0IGNvbnN0IGNsb3VkUmVnaW9uczogQ2xvdWRSZWdpb25bXSA9IGxvY2F0aW9ucy5tYXAoKGwpID0+ICh7XG4gIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZVtsXSxcbiAgbmFtZTogbCxcbiAgc2hvcnQ6IGxvY2F0aW9uU2hvcnRbbF0sXG59KSk7XG4iXX0=
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FkYXB0ZXJzL2F6dXJlL2xvY2F0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFJekQsdUVBQXVFO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQVUsQ0FBQztBQUkvRCxNQUFNLFVBQVUsZUFBZSxDQUFDLFFBQWdCO0lBQzlDLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUF5QixDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELHdDQUF3QztBQUN4QyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTVDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRztJQUMzQixVQUFVLEVBQUUsS0FBSztJQUNqQixVQUFVLEVBQUUsS0FBSztDQUMrQixDQUFDO0FBS25ELE1BQU0sV0FBVyxHQUFrQztJQUNqRCxVQUFVLEVBQUUsYUFBYTtJQUN6QixVQUFVLEVBQUUsYUFBYTtDQUMxQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFrQixTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzNCLElBQUksRUFBRSxDQUFDO0lBQ1AsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7Q0FDeEIsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGVzZSBhcmUgdGhlIG9ubHkgcmVnaW9ucyB3ZSBjdXJyZW50bHkgc3VwcG9ydCBmb3IgRFhcblxuaW1wb3J0IHR5cGUgeyBDbG91ZFJlZ2lvbiB9IGZyb20gXCIuLi8uLi9kb21haW4vY2xvdWQtYWNjb3VudC5qc1wiO1xuXG4vLyBPcmRlciBtYXR0ZXJzISB0aGV5IGdvIGZyb20gdGhlIHByZWZlcnJlZCB0byB0aGUgbGVzcyBwcmVmZXJyZWQgb25lc1xuZXhwb3J0IGNvbnN0IGxvY2F0aW9ucyA9IFtcIml0YWx5bm9ydGhcIiwgXCJ3ZXN0ZXVyb3BlXCJdIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBBenVyZUxvY2F0aW9uID0gKHR5cGVvZiBsb2NhdGlvbnMpW251bWJlcl07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0F6dXJlTG9jYXRpb24obG9jYXRpb246IHN0cmluZyk6IGxvY2F0aW9uIGlzIEF6dXJlTG9jYXRpb24ge1xuICByZXR1cm4gbG9jYXRpb25zLmluY2x1ZGVzKGxvY2F0aW9uIGFzIEF6dXJlTG9jYXRpb24pO1xufVxuXG4vLyBUaGUgZGVmYXVsdCBsb2NhdGlvbiBpcyB0aGUgZmlyc3Qgb25lXG5leHBvcnQgY29uc3QgZGVmYXVsdExvY2F0aW9uID0gbG9jYXRpb25zWzBdO1xuXG5leHBvcnQgY29uc3QgbG9jYXRpb25TaG9ydCA9IHtcbiAgaXRhbHlub3J0aDogXCJpdG5cIixcbiAgd2VzdGV1cm9wZTogXCJ3ZXVcIixcbn0gYXMgY29uc3Qgc2F0aXNmaWVzIFJlY29yZDxBenVyZUxvY2F0aW9uLCBzdHJpbmc+O1xuXG5leHBvcnQgdHlwZSBMb2NhdGlvblNob3J0VmFsdWUgPVxuICAodHlwZW9mIGxvY2F0aW9uU2hvcnQpW2tleW9mIHR5cGVvZiBsb2NhdGlvblNob3J0XTtcblxuY29uc3QgZGlzcGxheU5hbWU6IFJlY29yZDxBenVyZUxvY2F0aW9uLCBzdHJpbmc+ID0ge1xuICBpdGFseW5vcnRoOiBcIkl0YWx5IE5vcnRoXCIsXG4gIHdlc3RldXJvcGU6IFwiV2VzdCBFdXJvcGVcIixcbn07XG5cbmV4cG9ydCBjb25zdCBjbG91ZFJlZ2lvbnM6IENsb3VkUmVnaW9uW10gPSBsb2NhdGlvbnMubWFwKChsKSA9PiAoe1xuICBkaXNwbGF5TmFtZTogZGlzcGxheU5hbWVbbF0sXG4gIG5hbWU6IGwsXG4gIHNob3J0OiBsb2NhdGlvblNob3J0W2xdLFxufSkpO1xuIl19
@@ -10,6 +10,7 @@ import { Repository, } from "../../../domain/github.js";
10
10
  import { tf$ } from "../../execa/terraform.js";
11
11
  import { collectMonorepoPayload, getPlopInstance, runMonorepoActions, } from "../../plop/index.js";
12
12
  import { asError, reportCommandError } from "../command-errors.js";
13
+ import { toErrorMessage } from "../error-reporting.js";
13
14
  import { createCommandPresenter, resolveOutputMode, } from "../presenters/index.js";
14
15
  const isGitHubRepoCreationSkipped = (input) => "gitHubRepoCreationSkipped" in input;
15
16
  const trackStep = (presenter, name, task, mapError) => ResultAsync.fromPromise(presenter.trackStep(name, task), mapError);
@@ -57,16 +58,39 @@ const azureAccountSchema = z.object({
57
58
  name: z.string().min(1),
58
59
  }),
59
60
  });
61
+ const AZ_LOGIN_REQUIRED_MESSAGE = "Please log in to Azure CLI using `az login` before running this command.";
62
+ const mapAzAccessError = (cause) => new Error(toErrorMessage(cause), { cause });
63
+ const parseAzureAccountOutput = (stdout) => {
64
+ let parsedOutput;
65
+ try {
66
+ parsedOutput = JSON.parse(stdout);
67
+ }
68
+ catch (cause) {
69
+ throw new Error("Azure CLI returned invalid account JSON.", { cause });
70
+ }
71
+ const result = azureAccountSchema.safeParse(parsedOutput);
72
+ if (!result.success) {
73
+ throw new Error("Azure CLI returned an unexpected account payload.", {
74
+ cause: result.error,
75
+ });
76
+ }
77
+ return result.data.user.name;
78
+ };
60
79
  const ensureAzLogin = async () => {
61
- const { stdout } = await tf$ `az account show`;
80
+ const { stdout } = await tf$ `az account show`.catch((cause) => {
81
+ throw asError(AZ_LOGIN_REQUIRED_MESSAGE)(cause);
82
+ });
62
83
  // `az account show` reads the cached CLI context, but `az group list`
63
84
  // fails when the current session token has expired.
64
- await tf$ `az group list`;
65
- const parsed = JSON.parse(stdout);
66
- const { user } = azureAccountSchema.parse(parsed);
67
- return user.name;
85
+ await tf$ `az group list`.catch((cause) => {
86
+ throw mapAzAccessError(cause);
87
+ });
88
+ return parseAzureAccountOutput(stdout);
68
89
  };
69
- const trackAzLogin = (presenter) => trackStep(presenter, "Checking Azure login status...", ensureAzLogin, asError("Please log in to Azure CLI using `az login` before running this command."));
90
+ const mapAzLoginCheckError = (cause) => cause instanceof Error
91
+ ? cause
92
+ : new Error("Failed to check Azure CLI login status.", { cause });
93
+ const trackAzLogin = (presenter) => trackStep(presenter, "Checking Azure login status...", ensureAzLogin, mapAzLoginCheckError);
70
94
  // TODO(CES-1810): Make these checks concurrent to speed up the preconditions check phase
71
95
  export const runInitPreconditions = (presenter) => trackTerraformCliIsInstalled(presenter).andThen(() => trackCorepackIsInstalled(presenter));
72
96
  // TODO(CES-1810): Make these checks concurrent to speed up the preconditions check phase
@@ -105,22 +129,47 @@ export const getMonorepoInitialAnswers = ({ description, name, owner, publish, }
105
129
  }
106
130
  return initialAnswers;
107
131
  };
132
+ const formatTerraformRepositoryCreationFailureDetails = (cause) => {
133
+ const details = cause instanceof ExecaError
134
+ ? [cause.shortMessage, cause.stderr]
135
+ : [toErrorMessage(cause)];
136
+ return details
137
+ .filter((detail) => typeof detail === "string" && detail.trim().length > 0)
138
+ .map((detail) => detail.trim())
139
+ .join("\n");
140
+ };
141
+ const mapTerraformRepositoryCreationError = (step) => (cause) => {
142
+ const details = formatTerraformRepositoryCreationFailureDetails(cause);
143
+ const message = [
144
+ `Terraform ${step} failed while creating the GitHub repository.`,
145
+ details,
146
+ ]
147
+ .filter(Boolean)
148
+ .join("\n");
149
+ return new Error(message, { cause });
150
+ };
108
151
  const createRemoteRepositoryWithPresenter = (presenter) => ({ repoName, repoOwner, }) => {
109
152
  const logger = getLogger(["dx-cli", "init"]);
110
153
  const repo$ = tf$({ cwd: path.resolve("infra", "repository") });
111
- const applyTerraform = async () => {
154
+ const runTerraformRepositoryCreationStep = async (step, executeStep) => {
112
155
  try {
113
- await repo$ `terraform init`;
114
- await repo$ `terraform apply -auto-approve`;
156
+ await executeStep();
115
157
  }
116
- catch (error) {
117
- if (error instanceof ExecaError) {
118
- logger.error(error.shortMessage);
119
- }
158
+ catch (cause) {
159
+ const error = mapTerraformRepositoryCreationError(step)(cause);
160
+ logger.error(error.message);
120
161
  throw error;
121
162
  }
122
163
  };
123
- return trackStep(presenter, "Creating GitHub repository...", applyTerraform, asError("Failed to create GitHub repository.")).map(() => new Repository(repoName, repoOwner));
164
+ const applyTerraform = async () => {
165
+ const initializeRepositoryTerraform = () => repo$ `terraform init`;
166
+ const applyRepositoryTerraform = () => repo$ `terraform apply -auto-approve`;
167
+ await runTerraformRepositoryCreationStep("init", initializeRepositoryTerraform);
168
+ await runTerraformRepositoryCreationStep("apply", applyRepositoryTerraform);
169
+ };
170
+ return trackStep(presenter, "Creating GitHub repository...", applyTerraform, (cause) => cause instanceof Error
171
+ ? cause
172
+ : asError("Failed to create GitHub repository.")(cause)).map(() => new Repository(repoName, repoOwner));
124
173
  };
125
174
  /**
126
175
  * Exit code returned by `git remote add` when a remote with the requested name
@@ -274,4 +323,4 @@ export const makeInitCommand = (requireGitHubAuth, env) => new Command()
274
323
  })))
275
324
  .match(reportSummary(presenter, outputMode), reportCommandError(this, presenter, outputMode));
276
325
  });
277
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZGFwdGVycy9jb21tYW5kZXIvY29tbWFuZHMvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3RDLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUQsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQU94QixPQUFPLEVBR0wsVUFBVSxHQUNYLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRS9DLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsZUFBZSxFQUNmLGtCQUFrQixHQUNuQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGlCQUFpQixHQUNsQixNQUFNLHdCQUF3QixDQUFDO0FBY2hDLE1BQU0sMkJBQTJCLEdBQUcsQ0FDbEMsS0FBbUIsRUFDdUIsRUFBRSxDQUM1QywyQkFBMkIsSUFBSSxLQUFLLENBQUM7QUFzQnZDLE1BQU0sU0FBUyxHQUFHLENBQ2hCLFNBQTJCLEVBQzNCLElBQVksRUFDWixJQUFzQixFQUN0QixRQUErQixFQUNaLEVBQUUs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QUFFLFVBQVUsQ0FBQyxDQUNoRCxDQUFDO0FBQ04sQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgJCwgRXhlY2FFcnJvciB9IGZyb20gXCJleGVjYVwiO1xuaW1wb3J0IGlucXVpcmVyIGZyb20gXCJpbnF1aXJlclwiO1xuaW1wb3J0IHsgZXJyQXN5bmMsIG9rQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHR5cGUgeyBDb21tYW5kUHJlc2VudGVyIH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9jb21tYW5kLXByZXNlbnRlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDbGlFbnYgfSBmcm9tIFwiLi4vZW52LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEdsb2JhbE9wdGlvbnMgfSBmcm9tIFwiLi4vZ2xvYmFsLW9wdGlvbnMuanNcIjtcblxuaW1wb3J0IHsgR2l0SHViQXV0aEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluL2RlcGVuZGVuY2llcy5qc1wiO1xuaW1wb3J0IHtcbiAgR2l0SHViU2VydmljZSxcbiAgUHVsbFJlcXVlc3QsXG4gIFJlcG9zaXRvcnksXG59IGZyb20gXCIuLi8uLi8uLi9kb21haW4vZ2l0aHViLmpzXCI7XG5pbXBvcnQgeyB0ZiQgfSBmcm9tIFwiLi4vLi4vZXhlY2EvdGVycmFmb3JtLmpzXCI7XG5pbXBvcnQgeyBQYXlsb2FkIGFzIE1vbm9yZXBvUGF5bG9hZCB9IGZyb20gXCIuLi8uLi9wbG9wL2dlbmVyYXRvcnMvbW9ub3JlcG8vaW5kZXguanNcIjtcbmltcG9ydCB7XG4gIGNvbGxlY3RNb25vcmVwb1BheWxvYWQsXG4gIGdldFBsb3BJbnN0YW5jZSxcbiAgcnVuTW9ub3JlcG9BY3Rpb25zLFxufSBmcm9tIFwiLi4vLi4vcGxvcC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgYXNFcnJvciwgcmVwb3J0Q29tbWFuZEVycm9yIH0gZnJvbSBcIi4uL2NvbW1hbmQtZXJyb3JzLmpzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVDb21tYW5kUHJlc2VudGVyLFxuICByZXNvbHZlT3V0cHV0TW9kZSxcbn0gZnJvbSBcIi4uL3ByZXNlbnRlcnMvaW5kZXguanNcIjtcblxudHlwZSBHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkUmVzdWx0ID0ge1xuICBnaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkOiB0cnVlO1xuICBwYXlsb2FkOiBNb25vcmVwb1BheWxvYWQ7XG59O1xuXG50eXBlIEluaXRSZXN1bHQgPSB7XG4gIHByPzogUHVsbFJlcXVlc3Q7XG4gIHJlcG9zaXRvcnk/OiBSZXBvc2l0b3J5O1xufTtcblxudHlwZSBTdW1tYXJ5SW5wdXQgPSBHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkUmVzdWx0IHwgSW5pdFJlc3VsdDtcblxuY29uc3QgaXNHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkID0gKFxuICBpbnB1dDogU3VtbWFyeUlucHV0LFxuKTogaW5wdXQgaXMgR2l0SHViUmVwb0NyZWF0aW9uU2tpcHBlZFJlc3VsdCA9PlxuICBcImdpdEh1YlJlcG9DcmVhdGlvblNraXBwZWRcIiBpbiBpbnB1dDtcblxudHlwZSBJbml0QWN0aW9uQ29udGV4dCA9IHtcbiAgZ2l0SHViU2VydmljZTogR2l0SHViU2VydmljZTtcbiAgaW5pdGlhbEFuc3dlcnM/OiBJbml0SW5pdGlhbEFuc3dlcnM7XG4gIHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcjtcbn07XG5cbnR5cGUgSW5pdEluaXRpYWxBbnN3ZXJzID0gUGFydGlhbDxNb25vcmVwb1BheWxvYWQ+ICYge1xuICBwdWJsaXNoVG9HaXRIdWI/OiBib29sZWFuO1xufTtcblxudHlwZSBMb2NhbFdvcmtzcGFjZSA9IHtcbiAgYnJhbmNoTmFtZTogc3RyaW5nO1xuICByZXBvc2l0b3J5OiBSZXBvc2l0b3J5O1xufTtcblxudHlwZSBSZXBvc2l0b3J5UHVsbFJlcXVlc3QgPSB7XG4gIHByPzogUHVsbFJlcXVlc3Q7XG4gIHJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG59O1xuXG5jb25zdCB0cmFja1N0ZXAgPSA8VCwgRT4oXG4gIHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcixcbiAgbmFtZTogc3RyaW5nLFxuICB0YXNrOiAoKSA9PiBQcm9taXNlPFQ+LFxuICBtYXBFcnJvcjogKGNhdXNlOiB1bmtub3duKSA9PiBFLFxuKTogUmVzdWx0QXN5bmM8VCwgRT4gPT5cbiAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UocHJlc2VudGVyLnRyYWNrU3RlcChuYW1lLCB0YXNrKSwgbWFwRXJyb3IpO1xuXG5jb25zdCBkaXNwbGF5U3VtbWFyeSA9IChpbnB1dDogU3VtbWFyeUlucHV0KSA9PiB7XG4gIGNvbnN0IGRvY3NVcmwgPSBcImh0dHBzOi8vZHgucGFnb3BhLml0L2dldHRpbmctc3RhcnRlZFwiO1xuXG4gIGlmIChpc0dpdEh1YlJlcG9DcmVhdGlvblNraXBwZWQoaW5wdXQpKSB7XG4gICAgY29uc3QgeyBwYXlsb2FkIH0gPSBpbnB1dDtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIlxcbkdpdEh1YiByZXBvc2l0b3J5IGNyZWF0aW9uIHNraXBwZWQuXCIpKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBUaGUgd29ya3NwYWNlIGZpbGVzIGhhdmUgYmVlbiBzY2FmZm9sZGVkIGluICR7Y2hhbGsuY3lhbihwYXlsb2FkLnJlcG9OYW1lICsgXCIvXCIpfS5gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIlxcblRvIGZpbmlzaCB0aGUgc2V0dXAgbWFudWFsbHk6XCIpKTtcbiAgICBsZXQgc3RlcCA9IDE7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBDcmVhdGUgdGhlIEdpdEh1YiByZXBvc2l0b3J5IGJ5IGFwcGx5aW5nIHRoZSBUZXJyYWZvcm0gY29uZmlnIHNjYWZmb2xkZWQgYXQgJHtjaGFsay5jeWFuKGAke3BheWxvYWQucmVwb05hbWV9L2luZnJhL3JlcG9zaXRvcnlgKX06YCxcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYCAgICAgICAke2NoYWxrLmN5YW4oYGNkICR7cGF5bG9hZC5yZXBvTmFtZX0vaW5mcmEvcmVwb3NpdG9yeSAmJiB0ZXJyYWZvcm0gaW5pdCAmJiB0ZXJyYWZvcm0gYXBwbHlgKX1gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBQdXNoIHRoZSBzY2FmZm9sZGVkIGNvZGUgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgcmVwb3NpdG9yeTpgLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgICAgICAgICR7Y2hhbGsuY3lhbihgY2QgJHtwYXlsb2FkLnJlcG9OYW1lfSAmJiBnaXQgaW5pdCAmJiBnaXQgcmVtb3RlIGFkZCBvcmlnaW4gPHVybD4gJiYgZ2l0IHB1c2hgKX1gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwfS4gVmlzaXQgJHtjaGFsay51bmRlcmxpbmUoZG9jc1VybCl9IHRvIGRlcGxveSB5b3VyIGZpcnN0IHByb2plY3RcXG5gLFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBwciwgcmVwb3NpdG9yeSB9ID0gaW5wdXQ7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoXCJcXG5Xb3Jrc3BhY2UgY3JlYXRlZCBzdWNjZXNzZnVsbHkhXCIpKTtcblxuICBpZiAocmVwb3NpdG9yeSkge1xuICAgIGNvbnNvbGUubG9nKGAtIE5hbWU6ICR7Y2hhbGsuY3lhbihyZXBvc2l0b3J5Lm5hbWUpfWApO1xuICAgIGNvbnNvbGUubG9nKGAtIEdpdEh1YiBSZXBvc2l0b3J5OiAke2NoYWxrLmN5YW4ocmVwb3NpdG9yeS51cmwpfVxcbmApO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICBgXFxu4pqg77iPIEdpdEh1YiByZXBvc2l0b3J5IG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgYXV0b21hdGljYWxseS5gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgaWYgKHByKSB7XG4gICAgbGV0IHN0ZXAgPSAxO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoXCJcXG5OZXh0IFN0ZXBzOlwiKSk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBSZXZpZXcgdGhlIFB1bGwgUmVxdWVzdCBpbiB0aGUgR2l0SHViIHJlcG9zaXRvcnk6ICR7Y2hhbGsudW5kZXJsaW5lKHByLnVybCl9YCxcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYCR7c3RlcH0uIFZpc2l0ICR7Y2hhbGsudW5kZXJsaW5lKGRvY3NVcmwpfSB0byBkZXBsb3kgeW91ciBmaXJzdCBwcm9qZWN0XFxuYCxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsueWVsbG93KGBcXG7imqDvuI8gVGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyBQdWxsIFJlcXVlc3QgY3JlYXRpb24uYCksXG4gICAgKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBQbGVhc2UsIG1hbnVhbGx5IGNyZWF0ZSBhIFB1bGwgUmVxdWVzdCBpbiB0aGUgR2l0SHViIHJlcG9zaXRvcnkgdG8gcmV2aWV3IHRoZSBzY2FmZm9sZGVkIGNvZGUuXFxuYCxcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBjaGVja1RlcnJhZm9ybUNsaSA9ICgpID0+IHRmJGB0ZXJyYWZvcm0gLXZlcnNpb25gO1xuXG5jb25zdCB0cmFja1RlcnJhZm9ybUNsaUlzSW5zdGFsbGVkID0gKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcikgPT5cbiAgdHJhY2tTdGVwKFxuICAgIHByZXNlbnRlcixcbiAgICBcIkNoZWNraW5nIFRlcnJhZm9ybSBpbnN0YWxsYXRpb24uLi5cIixcbiAgICBjaGVja1RlcnJhZm9ybUNsaSxcbiAgICBhc0Vycm9yKFxuICAgICAgXCJQbGVhc2UgaW5zdGFsbCB0ZXJyYWZvcm0gQ0xJIGJlZm9yZSBydW5uaW5nIHRoaXMgY29tbWFuZC4gSWYgeW91IHVzZSB0ZmVudiwgcnVuOiB0ZmVudiBpbnN0YWxsIGxhdGVzdCAmJiB0ZmVudiB1c2UgbGF0ZXN0XCIsXG4gICAgKSxcbiAgKTtcblxuY29uc3QgY2hlY2tDb3JlcGFjayA9ICgpID0+IHRmJGBjb3JlcGFjayAtdmA7XG5cbmNvbnN0IHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZCA9IChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gIHRyYWNrU3RlcChcbiAgICBwcmVzZW50ZXIsXG4gICAgXCJDaGVja2luZyBDb3JlcGFjayBpbnN0YWxsYXRpb24uLi5cIixcbiAgICBjaGVja0NvcmVwYWNrLFxuICAgIGFzRXJyb3IoXCJQbGVhc2UgaW5zdGFsbCBDb3JlcGFjayBiZWZvcmUgcnVubmluZyB0aGlzIGNvbW1hbmQuXCIpLFxuICApO1xuXG5jb25zdCBhenVyZUFjY291bnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHVzZXI6IHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgfSksXG59KTtcblxuY29uc3QgZW5zdXJlQXpMb2dpbiA9IGFzeW5jICgpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgdGYkYGF6IGFjY291bnQgc2hvd2A7XG4gIC8vIGBheiBhY2NvdW50IHNob3dgIHJlYWRzIHRoZSBjYWNoZWQgQ0xJIGNvbnRleHQsIGJ1dCBgYXogZ3JvdXAgbGlzdGBcbiAgLy8gZmFpbHMgd2hlbiB0aGUgY3VycmVudCBzZXNzaW9uIHRva2VuIGhhcyBleHBpcmVkLlxuICBhd2FpdCB0ZiRgYXogZ3JvdXAgbGlzdGA7XG4gIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgY29uc3QgeyB1c2VyIH0gPSBhenVyZUFjY291bnRTY2hlbWEucGFyc2UocGFyc2VkKTtcbiAgcmV0dXJuIHVzZXIubmFtZTtcbn07XG5cbmNvbnN0IHRyYWNrQXpMb2dpbiA9IChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gIHRyYWNrU3RlcChcbiAgICBwcmVzZW50ZXIsXG4gICAgXCJDaGVja2luZyBBenVyZSBsb2dpbiBzdGF0dXMuLi5cIixcbiAgICBlbnN1cmVBekxvZ2luLFxuICAgIGFzRXJyb3IoXG4gICAgICBcIlBsZWFzZSBsb2cgaW4gdG8gQXp1cmUgQ0xJIHVzaW5nIGBheiBsb2dpbmAgYmVmb3JlIHJ1bm5pbmcgdGhpcyBjb21tYW5kLlwiLFxuICAgICksXG4gICk7XG5cbi8vIFRPRE8oQ0VTLTE4MTApOiBNYWtlIHRoZXNlIGNoZWNrcyBjb25jdXJyZW50IHRvIHNwZWVkIHVwIHRoZSBwcmVjb25kaXRpb25zIGNoZWNrIHBoYXNlXG5leHBvcnQgY29uc3QgcnVuSW5pdFByZWNvbmRpdGlvbnMgPSAocHJlc2VudGVyOiBDb21tYW5kUHJlc2VudGVyKSA9PlxuICB0cmFja1RlcnJhZm9ybUNsaUlzSW5zdGFsbGVkKHByZXNlbnRlcikuYW5kVGhlbigoKSA9PlxuICAgIHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZChwcmVzZW50ZXIpLFxuICApO1xuXG4vLyBUT0RPKENFUy0xODEwKTogTWFrZSB0aGVzZSBjaGVja3MgY29uY3VycmVudCB0byBzcGVlZCB1cCB0aGUgcHJlY29uZGl0aW9ucyBjaGVjayBwaGFzZVxuZXhwb3J0IGNvbnN0IHJ1bkFkZEVudmlyb25tZW50UHJlY29uZGl0aW9ucyA9IChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gIHRyYWNrVGVycmFmb3JtQ2xpSXNJbnN0YWxsZWQocHJlc2VudGVyKVxuICAgIC5hbmRUaGVuKCgpID0+IHRyYWNrQXpMb2dpbihwcmVzZW50ZXIpKVxuICAgIC5hbmRUaGVuKCgpID0+IHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZChwcmVzZW50ZXIpKTtcblxuY29uc3QgREVGQVVMVF9HSVRIVUJfUFVCTElTSF9DT05GSVJNQVRJT04gPSB0cnVlO1xuXG5leHBvcnQgY29uc3QgaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hID0gei5vYmplY3Qoe1xuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuYW1lOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgXCJSZXBvc2l0b3J5IG5hbWUgY2Fubm90IGJlIGVtcHR5XCIpLm9wdGlvbmFsKCksXG4gIG93bmVyOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgXCJHaXRIdWIgb3duZXIgY2Fubm90IGJlIGVtcHR5XCIpLm9wdGlvbmFsKCksXG4gIHB1Ymxpc2g6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IHR5cGUgSW5pdENvbW1hbmRPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IHBhcnNlSW5pdENvbW1hbmRPcHRpb25zID0gKGlucHV0OiB1bmtub3duKTogSW5pdENvbW1hbmRPcHRpb25zID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hLnNhZmVQYXJzZShpbnB1dCk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBpbml0IGNvbW1hbmQgb3B0aW9uczpcXG4ke3oucHJldHRpZnlFcnJvcihyZXN1bHQuZXJyb3IpfWAsXG4gICAgICB7XG4gICAgICAgIGNhdXNlOiByZXN1bHQuZXJyb3IsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TW9ub3JlcG9Jbml0aWFsQW5zd2VycyA9ICh7XG4gIGRlc2NyaXB0aW9uLFxuICBuYW1lLFxuICBvd25lcixcbiAgcHVibGlzaCxcbn06IEluaXRDb21tYW5kT3B0aW9ucyk6IEluaXRJbml0aWFsQW5zd2VycyA9PiB7XG4gIGNvbnN0IGluaXRpYWxBbnN3ZXJzOiBJbml0SW5pdGlhbEFuc3dlcnMgPSB7fTtcblxuICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICBpbml0aWFsQW5zd2Vycy5yZXBvRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGlmIChvd25lcikge1xuICAgIGluaXRpYWxBbnN3ZXJzLnJlcG9Pd25lciA9IG93bmVyO1xuICB9XG5cbiAgaWYgKG5hbWUpIHtcbiAgICBpbml0aWFsQW5zd2Vycy5yZXBvTmFtZSA9IG5hbWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHB1Ymxpc2ggPT09IFwiYm9vbGVhblwiKSB7XG4gICAgaW5pdGlhbEFuc3dlcnMucHVibGlzaFRvR2l0SHViID0gcHVibGlzaDtcbiAgfVxuXG4gIHJldHVybiBpbml0aWFsQW5zd2Vycztcbn07XG5cbmNvbnN0IGNyZWF0ZVJlbW90ZVJlcG9zaXRvcnlXaXRoUHJlc2VudGVyID1cbiAgKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcikgPT5cbiAgKHtcbiAgICByZXBvTmFtZSxcbiAgICByZXBvT3duZXIsXG4gIH06IE1vbm9yZXBvUGF5bG9hZCk6IFJlc3VsdEFzeW5jPFJlcG9zaXRvcnksIEVycm9yPiA9PiB7XG4gICAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcImR4LWNsaVwiLCBcImluaXRcIl0pO1xuICAgIGNvbnN0IHJlcG8kID0gdGYkKHsgY3dkOiBwYXRoLnJlc29sdmUoXCJpbmZyYVwiLCBcInJlcG9zaXRvcnlcIikgfSk7XG4gICAgY29uc3QgYXBwbHlUZXJyYWZvcm0gPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCByZXBvJGB0ZXJyYWZvcm0gaW5pdGA7XG4gICAgICAgIGF3YWl0IHJlcG8kYHRlcnJhZm9ybSBhcHBseSAtYXV0by1hcHByb3ZlYDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEV4ZWNhRXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoZXJyb3Iuc2hvcnRNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0cmFja1N0ZXAoXG4gICAgICBwcmVzZW50ZXIsXG4gICAgICBcIkNyZWF0aW5nIEdpdEh1YiByZXBvc2l0b3J5Li4uXCIsXG4gICAgICBhcHBseVRlcnJhZm9ybSxcbiAgICAgIGFzRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIEdpdEh1YiByZXBvc2l0b3J5LlwiKSxcbiAgICApLm1hcCgoKSA9PiBuZXcgUmVwb3NpdG9yeShyZXBvTmFtZSwgcmVwb093bmVyKSk7XG4gIH07XG4vKipcbiAqIEV4aXQgY29kZSByZXR1cm5lZCBieSBgZ2l0IHJlbW90ZSBhZGRgIHdoZW4gYSByZW1vdGUgd2l0aCB0aGUgcmVxdWVzdGVkIG5hbWVcbiAqIGFscmVhZHkgZXhpc3RzLiBgZ2l0IHJlbW90ZWAgZG9jdW1lbnRzIHRoaXMgZGVkaWNhdGVkIHN0YXR1cyBjb2RlLCBzbyB3ZSBjYW5cbiAqIHR1cm4gaXQgaW50byBhY3Rpb25hYmxlIGd1aWRhbmNlIGluc3RlYWQgb2YgYSBnZW5lcmljIGZhaWx1cmUgbWVzc2FnZS5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1yZW1vdGUjX2V4aXRfc3RhdHVzXG4gKi9cbmNvbnN0IEdJVF9SRU1PVEVfQUxSRUFEWV9FWElTVFNfRVhJVF9DT0RFID0gMztcblxuLyoqXG4gKiBUcmFuc2xhdGVzIGEgZmFpbHVyZSBvZiB0aGUgZ2l0IHJlbW90ZSBzZXR1cCBzdGVwIGludG8gYW4gYWN0aW9uYWJsZSBlcnJvci5cbiAqXG4gKiBXaGVuIGBnaXQgcmVtb3RlIGFkZCBvcmlnaW5gIGV4aXRzIHdpdGggY29kZSAzIHRoZSByZW1vdGUgYWxyZWFkeSBleGlzdHMsXG4gKiB3aGljaCBpcyBhIHJlY292ZXJhYmxlIHNpdHVhdGlvbjogdGhlIG1lc3NhZ2UgdGVsbHMgdGhlIHVzZXIgaG93IHRvIGZpeCBpdC5cbiAqIFRoZSBvcmlnaW5hbCBFeGVjYUVycm9yIGlzIHByZXNlcnZlZCBhcyBgY2F1c2VgIHNvIGAtLXZlcmJvc2VgIHN0aWxsIHN1cmZhY2VzXG4gKiB0aGUgZXhpdCBjb2RlIGFuZCBnaXQncyBvd24gc3RkZXJyLlxuICovXG5leHBvcnQgY29uc3QgbWFwR2l0UmVtb3RlQWRkRXJyb3IgPSAoY2F1c2U6IHVua25vd24pOiBFcnJvciA9PiB7XG4gIGlmIChcbiAgICBjYXVzZSBpbnN0YW5jZW9mIEV4ZWNhRXJyb3IgJiZcbiAgICBjYXVzZS5leGl0Q29kZSA9PT0gR0lUX1JFTU9URV9BTFJFQURZX0VYSVNUU19FWElUX0NPREVcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgIFwiQSBnaXQgcmVtb3RlIG5hbWVkICdvcmlnaW4nIGFscmVhZHkgZXhpc3RzLiBSZW1vdmUgaXQgd2l0aCBgZ2l0IHJlbW90ZSByZW1vdmUgb3JpZ2luYCBhbmQgcnVuIHRoZSBjb21tYW5kIGFnYWluLCBvciBzdGFydCBmcm9tIGEgY2xlYW4gZGlyZWN0b3J5LlwiLFxuICAgICAgeyBjYXVzZSB9LFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICBcIkZhaWxlZCB0byBzZXQgdXAgdGhlIGxvY2FsIGdpdCByZXBvc2l0b3J5IGFuZCBpdHMgJ29yaWdpbicgcmVtb3RlLlwiLFxuICAgIHsgY2F1c2UgfSxcbiAgKTtcbn07XG5cbmNvbnN0IGluaXRpYWxpemVHaXRSZXBvc2l0b3J5V2l0aFByZXNlbnRlciA9XG4gIChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+IChyZXBvc2l0b3J5OiBSZXBvc2l0b3J5KSA9PiB7XG4gICAgY29uc3QgYnJhbmNoTmFtZSA9IFwiZmVhdHVyZXMvc2NhZmZvbGQtd29ya3NwYWNlXCI7XG4gICAgY29uc3QgZ2l0JCA9ICQoe1xuICAgICAgc2hlbGw6IHRydWUsXG4gICAgfSk7XG4gICAgLy8gYGdpdCByZW1vdGUgYWRkYCBpcyB0cmFja2VkIHNlcGFyYXRlbHkgZnJvbSB0aGUgcHVzaCBzbyBpdHMgZG9jdW1lbnRlZFxuICAgIC8vIGV4aXQgY29kZXMgKGUuZy4gMyA9IHJlbW90ZSBhbHJlYWR5IGV4aXN0cykgc3VyZmFjZSBhIHNwZWNpZmljLCBhY3Rpb25hYmxlXG4gICAgLy8gbWVzc2FnZSBpbnN0ZWFkIG9mIGJlaW5nIG1pc3JlcG9ydGVkIGFzIGEgcHVzaCBmYWlsdXJlLlxuICAgIGNvbnN0IGNvbmZpZ3VyZVJlbW90ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGdpdCRgZ2l0IGluaXRgO1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgcmVtb3RlIGFkZCBvcmlnaW4gJHtyZXBvc2l0b3J5Lm9yaWdpbn1gO1xuICAgIH07XG4gICAgY29uc3QgcHVzaFRvT3JpZ2luID0gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgZmV0Y2ggb3JpZ2luIG1haW5gO1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgY2hlY2tvdXQgLWIgJHticmFuY2hOYW1lfWA7XG4gICAgICAvLyBUZXJyYWZvcm0gY3JlYXRlcyBgbWFpbmAgd2l0aCBhbiBpbml0aWFsIFJFQURNRSBjb21taXQuXG4gICAgICAvLyBSZXNldCB0byBgb3JpZ2luL21haW5gIHNvIHRoaXMgYnJhbmNoIGlzIGJhc2VkIG9uIHRoZSByZW1vdGUgZGVmYXVsdCBicmFuY2gsXG4gICAgICAvLyB3aGlsZSBrZWVwaW5nIHRoZSBzY2FmZm9sZGVkIGxvY2FsIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgZm9yIGEgY2xlYW4gUFIgZGlmZi5cbiAgICAgIGF3YWl0IGdpdCRgZ2l0IHJlc2V0IG9yaWdpbi9tYWluYDtcbiAgICAgIGF3YWl0IGdpdCRgZ2l0IGFkZCAuYDtcbiAgICAgIGF3YWl0IGdpdCRgZ2l0IGNvbW1pdCAtLW5vLWdwZy1zaWduIC1tIFwiU2NhZmZvbGQgd29ya3NwYWNlXCJgO1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgcHVzaCAtdSBvcmlnaW4gJHticmFuY2hOYW1lfWA7XG4gICAgfTtcbiAgICByZXR1cm4gdHJhY2tTdGVwKFxuICAgICAgcHJlc2VudGVyLFxuICAgICAgXCJDb25maWd1cmluZyB0aGUgZ2l0IHJlbW90ZS4uLlwiLFxuICAgICAgY29uZmlndXJlUmVtb3RlLFxuICAgICAgbWFwR2l0UmVtb3RlQWRkRXJyb3IsXG4gICAgKVxuICAgICAgLmFuZFRoZW4oKCkgPT5cbiAgICAgICAgdHJhY2tTdGVwKFxuICAgICAgICAgIHByZXNlbnRlcixcbiAgICAgICAgICBcIlB1c2hpbmcgY29kZSB0byBHaXRIdWIuLi5cIixcbiAgICAgICAgICBwdXNoVG9PcmlnaW4sXG4gICAgICAgICAgYXNFcnJvcihcIkZhaWxlZCB0byBwdXNoIGNvZGUgdG8gR2l0SHViLlwiKSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKCkgPT4gKHsgYnJhbmNoTmFtZSwgcmVwb3NpdG9yeSB9KSk7XG4gIH07XG5cbmNvbnN0IGNyZWF0ZVB1bGxSZXF1ZXN0V2l0aFByZXNlbnRlciA9XG4gICh7IGdpdEh1YlNlcnZpY2UsIHByZXNlbnRlciB9OiBJbml0QWN0aW9uQ29udGV4dCkgPT5cbiAgKHtcbiAgICBicmFuY2hOYW1lLFxuICAgIHJlcG9zaXRvcnksXG4gIH06IExvY2FsV29ya3NwYWNlKTogUmVzdWx0QXN5bmM8UHVsbFJlcXVlc3QgfCB1bmRlZmluZWQsIEVycm9yPiA9PlxuICAgIHRyYWNrU3RlcChcbiAgICAgIHByZXNlbnRlcixcbiAgICAgIFwiQ3JlYXRpbmcgUHVsbCBSZXF1ZXN0Li4uXCIsXG4gICAgICAoKSA9PlxuICAgICAgICBnaXRIdWJTZXJ2aWNlLmNyZWF0ZVB1bGxSZXF1ZXN0KHtcbiAgICAgICAgICBiYXNlOiBcIm1haW5cIixcbiAgICAgICAgICBib2R5OiBcIlRoaXMgUFIgY29udGFpbnMgdGhlIHNjYWZmb2xkZWQgbW9ub3JlcG8gc3RydWN0dXJlLlwiLFxuICAgICAgICAgIGhlYWQ6IGJyYW5jaE5hbWUsXG4gICAgICAgICAgb3duZXI6IHJlcG9zaXRvcnkub3duZXIsXG4gICAgICAgICAgcmVwbzogcmVwb3NpdG9yeS5uYW1lLFxuICAgICAgICAgIHRpdGxlOiBcIlNjYWZmb2xkIHJlcG9zaXRvcnlcIixcbiAgICAgICAgfSksXG4gICAgICBhc0Vycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBQdWxsIFJlcXVlc3QuXCIpLFxuICAgIClcbiAgICAgIC8vIElmIFBSIGNyZWF0aW9uIGZhaWxzLCBkb24ndCBibG9jayB0aGUgd29ya2Zsb3dcbiAgICAgIC5vckVsc2UoKCkgPT4gb2tBc3luYyh1bmRlZmluZWQpKTtcblxuY29uc3QgaGFuZGxlTmV3R2l0SHViUmVwb3NpdG9yeVdpdGhQcmVzZW50ZXIgPVxuICAoY29udGV4dDogSW5pdEFjdGlvbkNvbnRleHQpID0+XG4gIChwYXlsb2FkOiBNb25vcmVwb1BheWxvYWQpOiBSZXN1bHRBc3luYzxSZXBvc2l0b3J5UHVsbFJlcXVlc3QsIEVycm9yPiA9PlxuICAgIGNyZWF0ZVJlbW90ZVJlcG9zaXRvcnlXaXRoUHJlc2VudGVyKGNvbnRleHQucHJlc2VudGVyKShwYXlsb2FkKVxuICAgICAgLmFuZFRoZW4oaW5pdGlhbGl6ZUdpdFJlcG9zaXRvcnlXaXRoUHJlc2VudGVyKGNvbnRleHQucHJlc2VudGVyKSlcbiAgICAgIC5hbmRUaGVuKChsb2NhbFdvcmtzcGFjZSkgPT5cbiAgICAgICAgY3JlYXRlUHVsbFJlcXVlc3RXaXRoUHJlc2VudGVyKGNvbnRleHQpKGxvY2FsV29ya3NwYWNlKS5tYXAoKHByKSA9PiAoe1xuICAgICAgICAgIHByLFxuICAgICAgICAgIHJlcG9zaXRvcnk6IGxvY2FsV29ya3NwYWNlLnJlcG9zaXRvcnksXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG5cbmNvbnN0IGhhbmRsZUdlbmVyYXRvckVycm9yID0gKGVycjogdW5rbm93bikgPT4ge1xuICBjb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wiZHgtY2xpXCIsIFwiaW5pdFwiXSk7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcihlcnIubWVzc2FnZSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBFcnJvcihcIkZhaWxlZCB0byBydW4gdGhlIGdlbmVyYXRvclwiLCB7IGNhdXNlOiBlcnIgfSk7XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdoZXRoZXIgdGhlIHNjYWZmb2xkZWQgcmVwb3NpdG9yeSBzaG91bGQgYmUgcHVibGlzaGVkIHRvIEdpdEh1Yi5cbiAqXG4gKiBXaGVuIHRoZSBjYWxsZXIgYWxyZWFkeSBrbm93cyB0aGUgYW5zd2VyIChlLmcuIHRoZSB1c2VyIHBhc3NlZCBgLS1wdWJsaXNoYFxuICogb24gdGhlIGNvbW1hbmQgbGluZSksIHRoYXQgdmFsdWUgaXMgdXNlZCBhcy1pcyBhbmQgbm8gcHJvbXB0IGlzIHNob3duLiBXaGVuXG4gKiB0aGUgcHJlZmVyZW5jZSBpcyBsZWZ0IHVuZGVmaW5lZCAoZmxhZyBvbWl0dGVkKSwgdGhlIHVzZXIgaXMgYXNrZWRcbiAqIGludGVyYWN0aXZlbHkuXG4gKi9cbmV4cG9ydCBjb25zdCBjb25maXJtR2l0SHViUmVwb0NyZWF0aW9uID0gKFxuICBwYXlsb2FkOiBNb25vcmVwb1BheWxvYWQsXG4gIHB1Ymxpc2hQcmVmZXJlbmNlPzogYm9vbGVhbixcbik6IFJlc3VsdEFzeW5jPGJvb2xlYW4sIEVycm9yPiA9PlxuICAvLyBBIHByZWZlcmVuY2UgcHJvdmlkZWQgdXAtZnJvbnQgKHZpYSBgLS1wdWJsaXNoYCkgc2tpcHMgdGhlIGludGVyYWN0aXZlIHByb21wdC5cbiAgcHVibGlzaFByZWZlcmVuY2UgIT09IHVuZGVmaW5lZFxuICAgID8gb2tBc3luYyhwdWJsaXNoUHJlZmVyZW5jZSlcbiAgICA6IFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBpbnF1aXJlci5wcm9tcHQoe1xuICAgICAgICAgIGRlZmF1bHQ6IERFRkFVTFRfR0lUSFVCX1BVQkxJU0hfQ09ORklSTUFUSU9OLFxuICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgcHJvamVjdCBpcyBjcmVhdGVkIG9uICR7Y2hhbGsuZ3JlZW4ocGF5bG9hZC5yZXBvTmFtZSl9LiBXb3VsZCB5b3UgbGlrZSB0byBwdWJsaXNoIGl0IHRvIEdpdEh1YiBhdCAke2NoYWxrLmdyZWVuKGAke3BheWxvYWQucmVwb093bmVyfS8ke3BheWxvYWQucmVwb05hbWV9YCl9IG5vdz9gLFxuICAgICAgICAgIG5hbWU6IFwiY29uZmlybVwiLFxuICAgICAgICAgIHR5cGU6IFwiY29uZmlybVwiLFxuICAgICAgICB9KSxcbiAgICAgICAgKGNhdXNlKSA9PlxuICAgICAgICAgIG5ldyBFcnJvcihcIkZhaWxlZCB0byByZWFkIEdpdEh1YiBwdWJsaXNoIGNvbmZpcm1hdGlvblwiLCB7IGNhdXNlIH0pLFxuICAgICAgKS5hbmRUaGVuKChhbnN3ZXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkQW5zd2VyID0gelxuICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgY29uZmlybTogei5ib29sZWFuKCksXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2FmZVBhcnNlKGFuc3dlcik7XG4gICAgICAgIGlmICghcGFyc2VkQW5zd2VyLnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICAgICAgICBuZXcgRXJyb3IoXCJJbnZhbGlkIEdpdEh1YiBwdWJsaXNoIGNvbmZpcm1hdGlvblwiLCB7XG4gICAgICAgICAgICAgIGNhdXNlOiBwYXJzZWRBbnN3ZXIuZXJyb3IsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9rQXN5bmMocGFyc2VkQW5zd2VyLmRhdGEuY29uZmlybSk7XG4gICAgICB9KTtcblxuY29uc3QgcnVuSW5pdEFjdGlvbiA9ICh7XG4gIGdpdEh1YlNlcnZpY2UsXG4gIGluaXRpYWxBbnN3ZXJzID0ge30sXG4gIHByZXNlbnRlcixcbn06IEluaXRBY3Rpb25Db250ZXh0KTogUmVzdWx0QXN5bmM8U3VtbWFyeUlucHV0LCBFcnJvcj4gPT4ge1xuICBjb25zdCB7IHB1Ymxpc2hUb0dpdEh1YiwgLi4ubW9ub3JlcG9Jbml0aWFsQW5zd2VycyB9ID0gaW5pdGlhbEFuc3dlcnM7XG5cbiAgcmV0dXJuIHRyYWNrU3RlcChcbiAgICBwcmVzZW50ZXIsXG4gICAgXCJJbml0aWFsaXppbmcgd29ya3NwYWNlIGdlbmVyYXRvci4uLlwiLFxuICAgIGdldFBsb3BJbnN0YW5jZSxcbiAgICBhc0Vycm9yKFwiRmFpbGVkIHRvIGluaXRpYWxpemUgcGxvcFwiKSxcbiAgKVxuICAgIC5hbmRUaGVuKChwbG9wKSA9PlxuICAgICAgLy8gVGhlIHByb21wdCBwaGFzZSBtdXN0IHJ1biBvdXRzaWRlIHRyYWNrU3RlcDogaW4gdGV4dCBtb2RlIHRyYWNrU3RlcFxuICAgICAgLy8gcmVuZGVycyBhIHNwaW5uZXIgdGhhdCBvY2N1cGllcyB0aGUgVFRZIGFuZCBoaWRlcyB0aGUgcHJvbXB0cy5cbiAgICAgIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBjb2xsZWN0TW9ub3JlcG9QYXlsb2FkKHBsb3AsIGdpdEh1YlNlcnZpY2UsIG1vbm9yZXBvSW5pdGlhbEFuc3dlcnMpLFxuICAgICAgICBoYW5kbGVHZW5lcmF0b3JFcnJvcixcbiAgICAgICksXG4gICAgKVxuICAgIC5hbmRUaGVuKCh7IGdlbmVyYXRvciwgcGF5bG9hZCB9KSA9PlxuICAgICAgdHJhY2tTdGVwKFxuICAgICAgICBwcmVzZW50ZXIsXG4gICAgICAgIFwiU2NhZmZvbGRpbmcgd29ya3NwYWNlLi4uXCIsXG4gICAgICAgICgpID0+IHJ1bk1vbm9yZXBvQWN0aW9ucyhnZW5lcmF0b3IsIHBheWxvYWQpLFxuICAgICAgICBoYW5kbGVHZW5lcmF0b3JFcnJvcixcbiAgICAgICksXG4gICAgKVxuICAgIC5hbmRUZWUoKHBheWxvYWQpID0+IHtcbiAgICAgIHByb2Nlc3MuY2hkaXIocGF5bG9hZC5yZXBvTmFtZSk7XG4gICAgfSlcbiAgICAuYW5kVGhlbigocGF5bG9hZCkgPT5cbiAgICAgIGNvbmZpcm1HaXRIdWJSZXBvQ3JlYXRpb24ocGF5bG9hZCwgcHVibGlzaFRvR2l0SHViKS5hbmRUaGVuPFxuICAgICAgICBTdW1tYXJ5SW5wdXQsXG4gICAgICAgIEVycm9yXG4gICAgICA+KChjb25maXJtZWQpID0+XG4gICAgICAgIGNvbmZpcm1lZFxuICAgICAgICAgID8gaGFuZGxlTmV3R2l0SHViUmVwb3NpdG9yeVdpdGhQcmVzZW50ZXIoe1xuICAgICAgICAgICAgICBnaXRIdWJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcmVzZW50ZXIsXG4gICAgICAgICAgICB9KShwYXlsb2FkKVxuICAgICAgICAgIDogb2tBc3luYyh7IGdpdEh1YlJlcG9DcmVhdGlvblNraXBwZWQ6IHRydWUsIHBheWxvYWQgfSksXG4gICAgICApLFxuICAgICk7XG59O1xuXG5jb25zdCByZXBvcnRTdW1tYXJ5ID1cbiAgKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlciwgb3V0cHV0TW9kZTogXCJqc29uXCIgfCBcInRleHRcIikgPT5cbiAgKHJlc3VsdDogU3VtbWFyeUlucHV0KSA9PiB7XG4gICAgaWYgKG91dHB1dE1vZGUgPT09IFwianNvblwiKSB7XG4gICAgICBwcmVzZW50ZXIucmVwb3J0UmVzdWx0KHJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BsYXlTdW1tYXJ5KHJlc3VsdCk7XG4gICAgfVxuICB9O1xuXG5leHBvcnQgY29uc3QgbWFrZUluaXRDb21tYW5kID0gKFxuICByZXF1aXJlR2l0SHViQXV0aDogR2l0SHViQXV0aEZhY3RvcnksXG4gIGVudjogQ2xpRW52LFxuKTogQ29tbWFuZCA9PlxuICBuZXcgQ29tbWFuZCgpXG4gICAgLm5hbWUoXCJpbml0XCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiSW5pdGlhbGl6ZSBhIG5ldyBEWCB3b3Jrc3BhY2VcIilcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oXCItLW5hbWUgPG5hbWU+XCIsIFwiUmVwb3NpdG9yeSBuYW1lXCIpKVxuICAgIC5hZGRPcHRpb24oXG4gICAgICBuZXcgT3B0aW9uKFxuICAgICAgICBcIi0tb3duZXIgPG93bmVyPlwiLFxuICAgICAgICBcIkdpdEh1YiBvcmdhbml6YXRpb24gb3IgdXNlciB0aGF0IHdpbGwgb3duIHRoZSByZXBvc2l0b3J5XCIsXG4gICAgICApLFxuICAgIClcbiAgICAuYWRkT3B0aW9uKFxuICAgICAgbmV3IE9wdGlvbihcIi0tZGVzY3JpcHRpb24gPGRlc2NyaXB0aW9uPlwiLCBcIlJlcG9zaXRvcnkgZGVzY3JpcHRpb25cIiksXG4gICAgKVxuICAgIC5hZGRPcHRpb24oXG4gICAgICBuZXcgT3B0aW9uKFxuICAgICAgICBcIi0tcHVibGlzaFwiLFxuICAgICAgICBcIlB1Ymxpc2ggdGhlIHNjYWZmb2xkZWQgcmVwb3NpdG9yeSB0byBHaXRIdWIgd2l0aG91dCBwcm9tcHRpbmdcIixcbiAgICAgICkuZGVmYXVsdCh1bmRlZmluZWQpLFxuICAgIClcbiAgICAuYWN0aW9uKGFzeW5jIGZ1bmN0aW9uIChvcHRpb25zOiB1bmtub3duKSB7XG4gICAgICBjb25zdCB7IG91dHB1dCB9ID0gdGhpcy5vcHRzV2l0aEdsb2JhbHM8R2xvYmFsT3B0aW9ucz4oKTtcbiAgICAgIGNvbnN0IG91dHB1dE1vZGUgPSByZXNvbHZlT3V0cHV0TW9kZShlbnYsIG91dHB1dCk7XG4gICAgICBjb25zdCBwcmVzZW50ZXIgPSBjcmVhdGVDb21tYW5kUHJlc2VudGVyKG91dHB1dE1vZGUpO1xuXG4gICAgICBhd2FpdCBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBwYXJzZUluaXRDb21tYW5kT3B0aW9ucyhvcHRpb25zKSksXG4gICAgICAgIChjYXVzZSkgPT5cbiAgICAgICAgICBjYXVzZSBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICA/IGNhdXNlXG4gICAgICAgICAgICA6IG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBpbml0IGNvbW1hbmQgb3B0aW9uc1wiLCB7IGNhdXNlIH0pLFxuICAgICAgKVxuICAgICAgICAuYW5kVGhlbigoaW5pdE9wdGlvbnMpID0+XG4gICAgICAgICAgcnVuSW5pdFByZWNvbmRpdGlvbnMocHJlc2VudGVyKVxuICAgICAgICAgICAgLmFuZFRoZW4oKCkgPT4gcmVxdWlyZUdpdEh1YkF1dGgoKSlcbiAgICAgICAgICAgIC5hbmRUaGVuKChhdXRoKSA9PlxuICAgICAgICAgICAgICBydW5Jbml0QWN0aW9uKHtcbiAgICAgICAgICAgICAgICBnaXRIdWJTZXJ2aWNlOiBhdXRoLmdpdEh1YlNlcnZpY2UsXG4gICAgICAgICAgICAgICAgaW5pdGlhbEFuc3dlcnM6IGdldE1vbm9yZXBvSW5pdGlhbEFuc3dlcnMoaW5pdE9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIHByZXNlbnRlcixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICApXG4gICAgICAgIC5tYXRjaChcbiAgICAgICAgICByZXBvcnRTdW1tYXJ5KHByZXNlbnRlciwgb3V0cHV0TW9kZSksXG4gICAgICAgICAgcmVwb3J0Q29tbWFuZEVycm9yKHRoaXMsIHByZXNlbnRlciwgb3V0cHV0TW9kZSksXG4gICAgICAgICk7XG4gICAgfSk7XG4iXX0=
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZGFwdGVycy9jb21tYW5kZXIvY29tbWFuZHMvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3RDLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUQsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQU94QixPQUFPLEVBR0wsVUFBVSxHQUNYLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRS9DLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsZUFBZSxFQUNmLGtCQUFrQixHQUNuQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixpQkFBaUIsR0FDbEIsTUFBTSx3QkFBd0IsQ0FBQztBQWNoQyxNQUFNLDJCQUEyQixHQUFHLENBQ2xDLEtBQW1CLEVBQ3VCLEVBQUUsQ0FDNUMsMkJBQTJCLElBQUksS0FBSyxDQUFDO0FBc0J2QyxNQUFNLFNBQVMsR0FBRyxDQUNoQixTQUEyQixF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QUFJLEVBQUUsRUFBRSxDQUNoQixhQUFhLENBQUM7UUFDWixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7UUFDakMsY0FBYyxFQUFFLHlCQUF5QixDQUFDLFdBQVcsQ0FBQztRQUN0RCxTQUFTO0tBQ1YsQ0FBQyxDQUNILENBQ0o7U0FDQSxLQUFLLENBQ0osYUFBYSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFDcEMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FDaEQsQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7ICQsIEV4ZWNhRXJyb3IgfSBmcm9tIFwiZXhlY2FcIjtcbmltcG9ydCBpbnF1aXJlciBmcm9tIFwiaW5xdWlyZXJcIjtcbmltcG9ydCB7IGVyckFzeW5jLCBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB0eXBlIHsgQ29tbWFuZFByZXNlbnRlciB9IGZyb20gXCIuLi8uLi8uLi9kb21haW4vY29tbWFuZC1wcmVzZW50ZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgQ2xpRW52IH0gZnJvbSBcIi4uL2Vudi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBHbG9iYWxPcHRpb25zIH0gZnJvbSBcIi4uL2dsb2JhbC1vcHRpb25zLmpzXCI7XG5cbmltcG9ydCB7IEdpdEh1YkF1dGhGYWN0b3J5IH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9kZXBlbmRlbmNpZXMuanNcIjtcbmltcG9ydCB7XG4gIEdpdEh1YlNlcnZpY2UsXG4gIFB1bGxSZXF1ZXN0LFxuICBSZXBvc2l0b3J5LFxufSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluL2dpdGh1Yi5qc1wiO1xuaW1wb3J0IHsgdGYkIH0gZnJvbSBcIi4uLy4uL2V4ZWNhL3RlcnJhZm9ybS5qc1wiO1xuaW1wb3J0IHsgUGF5bG9hZCBhcyBNb25vcmVwb1BheWxvYWQgfSBmcm9tIFwiLi4vLi4vcGxvcC9nZW5lcmF0b3JzL21vbm9yZXBvL2luZGV4LmpzXCI7XG5pbXBvcnQge1xuICBjb2xsZWN0TW9ub3JlcG9QYXlsb2FkLFxuICBnZXRQbG9wSW5zdGFuY2UsXG4gIHJ1bk1vbm9yZXBvQWN0aW9ucyxcbn0gZnJvbSBcIi4uLy4uL3Bsb3AvaW5kZXguanNcIjtcbmltcG9ydCB7IGFzRXJyb3IsIHJlcG9ydENvbW1hbmRFcnJvciB9IGZyb20gXCIuLi9jb21tYW5kLWVycm9ycy5qc1wiO1xuaW1wb3J0IHsgdG9FcnJvck1lc3NhZ2UgfSBmcm9tIFwiLi4vZXJyb3ItcmVwb3J0aW5nLmpzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVDb21tYW5kUHJlc2VudGVyLFxuICByZXNvbHZlT3V0cHV0TW9kZSxcbn0gZnJvbSBcIi4uL3ByZXNlbnRlcnMvaW5kZXguanNcIjtcblxudHlwZSBHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkUmVzdWx0ID0ge1xuICBnaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkOiB0cnVlO1xuICBwYXlsb2FkOiBNb25vcmVwb1BheWxvYWQ7XG59O1xuXG50eXBlIEluaXRSZXN1bHQgPSB7XG4gIHByPzogUHVsbFJlcXVlc3Q7XG4gIHJlcG9zaXRvcnk/OiBSZXBvc2l0b3J5O1xufTtcblxudHlwZSBTdW1tYXJ5SW5wdXQgPSBHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkUmVzdWx0IHwgSW5pdFJlc3VsdDtcblxuY29uc3QgaXNHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkID0gKFxuICBpbnB1dDogU3VtbWFyeUlucHV0LFxuKTogaW5wdXQgaXMgR2l0SHViUmVwb0NyZWF0aW9uU2tpcHBlZFJlc3VsdCA9PlxuICBcImdpdEh1YlJlcG9DcmVhdGlvblNraXBwZWRcIiBpbiBpbnB1dDtcblxudHlwZSBJbml0QWN0aW9uQ29udGV4dCA9IHtcbiAgZ2l0SHViU2VydmljZTogR2l0SHViU2VydmljZTtcbiAgaW5pdGlhbEFuc3dlcnM/OiBJbml0SW5pdGlhbEFuc3dlcnM7XG4gIHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcjtcbn07XG5cbnR5cGUgSW5pdEluaXRpYWxBbnN3ZXJzID0gUGFydGlhbDxNb25vcmVwb1BheWxvYWQ+ICYge1xuICBwdWJsaXNoVG9HaXRIdWI/OiBib29sZWFuO1xufTtcblxudHlwZSBMb2NhbFdvcmtzcGFjZSA9IHtcbiAgYnJhbmNoTmFtZTogc3RyaW5nO1xuICByZXBvc2l0b3J5OiBSZXBvc2l0b3J5O1xufTtcblxudHlwZSBSZXBvc2l0b3J5UHVsbFJlcXVlc3QgPSB7XG4gIHByPzogUHVsbFJlcXVlc3Q7XG4gIHJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG59O1xuXG5jb25zdCB0cmFja1N0ZXAgPSA8VCwgRT4oXG4gIHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcixcbiAgbmFtZTogc3RyaW5nLFxuICB0YXNrOiAoKSA9PiBQcm9taXNlPFQ+LFxuICBtYXBFcnJvcjogKGNhdXNlOiB1bmtub3duKSA9PiBFLFxuKTogUmVzdWx0QXN5bmM8VCwgRT4gPT5cbiAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UocHJlc2VudGVyLnRyYWNrU3RlcChuYW1lLCB0YXNrKSwgbWFwRXJyb3IpO1xuXG5jb25zdCBkaXNwbGF5U3VtbWFyeSA9IChpbnB1dDogU3VtbWFyeUlucHV0KSA9PiB7XG4gIGNvbnN0IGRvY3NVcmwgPSBcImh0dHBzOi8vZHgucGFnb3BhLml0L2dldHRpbmctc3RhcnRlZFwiO1xuXG4gIGlmIChpc0dpdEh1YlJlcG9DcmVhdGlvblNraXBwZWQoaW5wdXQpKSB7XG4gICAgY29uc3QgeyBwYXlsb2FkIH0gPSBpbnB1dDtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIlxcbkdpdEh1YiByZXBvc2l0b3J5IGNyZWF0aW9uIHNraXBwZWQuXCIpKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBUaGUgd29ya3NwYWNlIGZpbGVzIGhhdmUgYmVlbiBzY2FmZm9sZGVkIGluICR7Y2hhbGsuY3lhbihwYXlsb2FkLnJlcG9OYW1lICsgXCIvXCIpfS5gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIlxcblRvIGZpbmlzaCB0aGUgc2V0dXAgbWFudWFsbHk6XCIpKTtcbiAgICBsZXQgc3RlcCA9IDE7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBDcmVhdGUgdGhlIEdpdEh1YiByZXBvc2l0b3J5IGJ5IGFwcGx5aW5nIHRoZSBUZXJyYWZvcm0gY29uZmlnIHNjYWZmb2xkZWQgYXQgJHtjaGFsay5jeWFuKGAke3BheWxvYWQucmVwb05hbWV9L2luZnJhL3JlcG9zaXRvcnlgKX06YCxcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYCAgICAgICAke2NoYWxrLmN5YW4oYGNkICR7cGF5bG9hZC5yZXBvTmFtZX0vaW5mcmEvcmVwb3NpdG9yeSAmJiB0ZXJyYWZvcm0gaW5pdCAmJiB0ZXJyYWZvcm0gYXBwbHlgKX1gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBQdXNoIHRoZSBzY2FmZm9sZGVkIGNvZGUgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgcmVwb3NpdG9yeTpgLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgICAgICAgICR7Y2hhbGsuY3lhbihgY2QgJHtwYXlsb2FkLnJlcG9OYW1lfSAmJiBnaXQgaW5pdCAmJiBnaXQgcmVtb3RlIGFkZCBvcmlnaW4gPHVybD4gJiYgZ2l0IHB1c2hgKX1gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwfS4gVmlzaXQgJHtjaGFsay51bmRlcmxpbmUoZG9jc1VybCl9IHRvIGRlcGxveSB5b3VyIGZpcnN0IHByb2plY3RcXG5gLFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBwciwgcmVwb3NpdG9yeSB9ID0gaW5wdXQ7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoXCJcXG5Xb3Jrc3BhY2UgY3JlYXRlZCBzdWNjZXNzZnVsbHkhXCIpKTtcblxuICBpZiAocmVwb3NpdG9yeSkge1xuICAgIGNvbnNvbGUubG9nKGAtIE5hbWU6ICR7Y2hhbGsuY3lhbihyZXBvc2l0b3J5Lm5hbWUpfWApO1xuICAgIGNvbnNvbGUubG9nKGAtIEdpdEh1YiBSZXBvc2l0b3J5OiAke2NoYWxrLmN5YW4ocmVwb3NpdG9yeS51cmwpfVxcbmApO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICBgXFxu4pqg77iPIEdpdEh1YiByZXBvc2l0b3J5IG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgYXV0b21hdGljYWxseS5gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgaWYgKHByKSB7XG4gICAgbGV0IHN0ZXAgPSAxO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoXCJcXG5OZXh0IFN0ZXBzOlwiKSk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBSZXZpZXcgdGhlIFB1bGwgUmVxdWVzdCBpbiB0aGUgR2l0SHViIHJlcG9zaXRvcnk6ICR7Y2hhbGsudW5kZXJsaW5lKHByLnVybCl9YCxcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYCR7c3RlcH0uIFZpc2l0ICR7Y2hhbGsudW5kZXJsaW5lKGRvY3NVcmwpfSB0byBkZXBsb3kgeW91ciBmaXJzdCBwcm9qZWN0XFxuYCxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsueWVsbG93KGBcXG7imqDvuI8gVGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyBQdWxsIFJlcXVlc3QgY3JlYXRpb24uYCksXG4gICAgKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBQbGVhc2UsIG1hbnVhbGx5IGNyZWF0ZSBhIFB1bGwgUmVxdWVzdCBpbiB0aGUgR2l0SHViIHJlcG9zaXRvcnkgdG8gcmV2aWV3IHRoZSBzY2FmZm9sZGVkIGNvZGUuXFxuYCxcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBjaGVja1RlcnJhZm9ybUNsaSA9ICgpID0+IHRmJGB0ZXJyYWZvcm0gLXZlcnNpb25gO1xuXG5jb25zdCB0cmFja1RlcnJhZm9ybUNsaUlzSW5zdGFsbGVkID0gKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcikgPT5cbiAgdHJhY2tTdGVwKFxuICAgIHByZXNlbnRlcixcbiAgICBcIkNoZWNraW5nIFRlcnJhZm9ybSBpbnN0YWxsYXRpb24uLi5cIixcbiAgICBjaGVja1RlcnJhZm9ybUNsaSxcbiAgICBhc0Vycm9yKFxuICAgICAgXCJQbGVhc2UgaW5zdGFsbCB0ZXJyYWZvcm0gQ0xJIGJlZm9yZSBydW5uaW5nIHRoaXMgY29tbWFuZC4gSWYgeW91IHVzZSB0ZmVudiwgcnVuOiB0ZmVudiBpbnN0YWxsIGxhdGVzdCAmJiB0ZmVudiB1c2UgbGF0ZXN0XCIsXG4gICAgKSxcbiAgKTtcblxuY29uc3QgY2hlY2tDb3JlcGFjayA9ICgpID0+IHRmJGBjb3JlcGFjayAtdmA7XG5cbmNvbnN0IHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZCA9IChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gIHRyYWNrU3RlcChcbiAgICBwcmVzZW50ZXIsXG4gICAgXCJDaGVja2luZyBDb3JlcGFjayBpbnN0YWxsYXRpb24uLi5cIixcbiAgICBjaGVja0NvcmVwYWNrLFxuICAgIGFzRXJyb3IoXCJQbGVhc2UgaW5zdGFsbCBDb3JlcGFjayBiZWZvcmUgcnVubmluZyB0aGlzIGNvbW1hbmQuXCIpLFxuICApO1xuXG5jb25zdCBhenVyZUFjY291bnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHVzZXI6IHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgfSksXG59KTtcblxuY29uc3QgQVpfTE9HSU5fUkVRVUlSRURfTUVTU0FHRSA9XG4gIFwiUGxlYXNlIGxvZyBpbiB0byBBenVyZSBDTEkgdXNpbmcgYGF6IGxvZ2luYCBiZWZvcmUgcnVubmluZyB0aGlzIGNvbW1hbmQuXCI7XG5cbmNvbnN0IG1hcEF6QWNjZXNzRXJyb3IgPSAoY2F1c2U6IHVua25vd24pOiBFcnJvciA9PlxuICBuZXcgRXJyb3IodG9FcnJvck1lc3NhZ2UoY2F1c2UpLCB7IGNhdXNlIH0pO1xuXG5jb25zdCBwYXJzZUF6dXJlQWNjb3VudE91dHB1dCA9IChzdGRvdXQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGxldCBwYXJzZWRPdXRwdXQ6IHVua25vd247XG5cbiAgdHJ5IHtcbiAgICBwYXJzZWRPdXRwdXQgPSBKU09OLnBhcnNlKHN0ZG91dCk7XG4gIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQXp1cmUgQ0xJIHJldHVybmVkIGludmFsaWQgYWNjb3VudCBKU09OLlwiLCB7IGNhdXNlIH0pO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gYXp1cmVBY2NvdW50U2NoZW1hLnNhZmVQYXJzZShwYXJzZWRPdXRwdXQpO1xuICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQXp1cmUgQ0xJIHJldHVybmVkIGFuIHVuZXhwZWN0ZWQgYWNjb3VudCBwYXlsb2FkLlwiLCB7XG4gICAgICBjYXVzZTogcmVzdWx0LmVycm9yLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5kYXRhLnVzZXIubmFtZTtcbn07XG5cbmNvbnN0IGVuc3VyZUF6TG9naW4gPSBhc3luYyAoKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IHRmJGBheiBhY2NvdW50IHNob3dgLmNhdGNoKChjYXVzZTogdW5rbm93bikgPT4ge1xuICAgIHRocm93IGFzRXJyb3IoQVpfTE9HSU5fUkVRVUlSRURfTUVTU0FHRSkoY2F1c2UpO1xuICB9KTtcbiAgLy8gYGF6IGFjY291bnQgc2hvd2AgcmVhZHMgdGhlIGNhY2hlZCBDTEkgY29udGV4dCwgYnV0IGBheiBncm91cCBsaXN0YFxuICAvLyBmYWlscyB3aGVuIHRoZSBjdXJyZW50IHNlc3Npb24gdG9rZW4gaGFzIGV4cGlyZWQuXG4gIGF3YWl0IHRmJGBheiBncm91cCBsaXN0YC5jYXRjaCgoY2F1c2U6IHVua25vd24pID0+IHtcbiAgICB0aHJvdyBtYXBBekFjY2Vzc0Vycm9yKGNhdXNlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlQXp1cmVBY2NvdW50T3V0cHV0KHN0ZG91dCk7XG59O1xuXG5jb25zdCBtYXBBekxvZ2luQ2hlY2tFcnJvciA9IChjYXVzZTogdW5rbm93bik6IEVycm9yID0+XG4gIGNhdXNlIGluc3RhbmNlb2YgRXJyb3JcbiAgICA/IGNhdXNlXG4gICAgOiBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY2hlY2sgQXp1cmUgQ0xJIGxvZ2luIHN0YXR1cy5cIiwgeyBjYXVzZSB9KTtcblxuY29uc3QgdHJhY2tBekxvZ2luID0gKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcikgPT5cbiAgdHJhY2tTdGVwKFxuICAgIHByZXNlbnRlcixcbiAgICBcIkNoZWNraW5nIEF6dXJlIGxvZ2luIHN0YXR1cy4uLlwiLFxuICAgIGVuc3VyZUF6TG9naW4sXG4gICAgbWFwQXpMb2dpbkNoZWNrRXJyb3IsXG4gICk7XG5cbi8vIFRPRE8oQ0VTLTE4MTApOiBNYWtlIHRoZXNlIGNoZWNrcyBjb25jdXJyZW50IHRvIHNwZWVkIHVwIHRoZSBwcmVjb25kaXRpb25zIGNoZWNrIHBoYXNlXG5leHBvcnQgY29uc3QgcnVuSW5pdFByZWNvbmRpdGlvbnMgPSAocHJlc2VudGVyOiBDb21tYW5kUHJlc2VudGVyKSA9PlxuICB0cmFja1RlcnJhZm9ybUNsaUlzSW5zdGFsbGVkKHByZXNlbnRlcikuYW5kVGhlbigoKSA9PlxuICAgIHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZChwcmVzZW50ZXIpLFxuICApO1xuXG4vLyBUT0RPKENFUy0xODEwKTogTWFrZSB0aGVzZSBjaGVja3MgY29uY3VycmVudCB0byBzcGVlZCB1cCB0aGUgcHJlY29uZGl0aW9ucyBjaGVjayBwaGFzZVxuZXhwb3J0IGNvbnN0IHJ1bkFkZEVudmlyb25tZW50UHJlY29uZGl0aW9ucyA9IChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gIHRyYWNrVGVycmFmb3JtQ2xpSXNJbnN0YWxsZWQocHJlc2VudGVyKVxuICAgIC5hbmRUaGVuKCgpID0+IHRyYWNrQXpMb2dpbihwcmVzZW50ZXIpKVxuICAgIC5hbmRUaGVuKCgpID0+IHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZChwcmVzZW50ZXIpKTtcblxuY29uc3QgREVGQVVMVF9HSVRIVUJfUFVCTElTSF9DT05GSVJNQVRJT04gPSB0cnVlO1xuXG5leHBvcnQgY29uc3QgaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hID0gei5vYmplY3Qoe1xuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuYW1lOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgXCJSZXBvc2l0b3J5IG5hbWUgY2Fubm90IGJlIGVtcHR5XCIpLm9wdGlvbmFsKCksXG4gIG93bmVyOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgXCJHaXRIdWIgb3duZXIgY2Fubm90IGJlIGVtcHR5XCIpLm9wdGlvbmFsKCksXG4gIHB1Ymxpc2g6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IHR5cGUgSW5pdENvbW1hbmRPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IHBhcnNlSW5pdENvbW1hbmRPcHRpb25zID0gKGlucHV0OiB1bmtub3duKTogSW5pdENvbW1hbmRPcHRpb25zID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hLnNhZmVQYXJzZShpbnB1dCk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBpbml0IGNvbW1hbmQgb3B0aW9uczpcXG4ke3oucHJldHRpZnlFcnJvcihyZXN1bHQuZXJyb3IpfWAsXG4gICAgICB7XG4gICAgICAgIGNhdXNlOiByZXN1bHQuZXJyb3IsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TW9ub3JlcG9Jbml0aWFsQW5zd2VycyA9ICh7XG4gIGRlc2NyaXB0aW9uLFxuICBuYW1lLFxuICBvd25lcixcbiAgcHVibGlzaCxcbn06IEluaXRDb21tYW5kT3B0aW9ucyk6IEluaXRJbml0aWFsQW5zd2VycyA9PiB7XG4gIGNvbnN0IGluaXRpYWxBbnN3ZXJzOiBJbml0SW5pdGlhbEFuc3dlcnMgPSB7fTtcblxuICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICBpbml0aWFsQW5zd2Vycy5yZXBvRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGlmIChvd25lcikge1xuICAgIGluaXRpYWxBbnN3ZXJzLnJlcG9Pd25lciA9IG93bmVyO1xuICB9XG5cbiAgaWYgKG5hbWUpIHtcbiAgICBpbml0aWFsQW5zd2Vycy5yZXBvTmFtZSA9IG5hbWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHB1Ymxpc2ggPT09IFwiYm9vbGVhblwiKSB7XG4gICAgaW5pdGlhbEFuc3dlcnMucHVibGlzaFRvR2l0SHViID0gcHVibGlzaDtcbiAgfVxuXG4gIHJldHVybiBpbml0aWFsQW5zd2Vycztcbn07XG5cbnR5cGUgVGVycmFmb3JtUmVwb3NpdG9yeUNyZWF0aW9uU3RlcCA9IFwiYXBwbHlcIiB8IFwiaW5pdFwiO1xuXG5jb25zdCBmb3JtYXRUZXJyYWZvcm1SZXBvc2l0b3J5Q3JlYXRpb25GYWlsdXJlRGV0YWlscyA9IChcbiAgY2F1c2U6IHVua25vd24sXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBkZXRhaWxzID1cbiAgICBjYXVzZSBpbnN0YW5jZW9mIEV4ZWNhRXJyb3JcbiAgICAgID8gW2NhdXNlLnNob3J0TWVzc2FnZSwgY2F1c2Uuc3RkZXJyXVxuICAgICAgOiBbdG9FcnJvck1lc3NhZ2UoY2F1c2UpXTtcblxuICByZXR1cm4gZGV0YWlsc1xuICAgIC5maWx0ZXIoXG4gICAgICAoZGV0YWlsKTogZGV0YWlsIGlzIHN0cmluZyA9PlxuICAgICAgICB0eXBlb2YgZGV0YWlsID09PSBcInN0cmluZ1wiICYmIGRldGFpbC50cmltKCkubGVuZ3RoID4gMCxcbiAgICApXG4gICAgLm1hcCgoZGV0YWlsKSA9PiBkZXRhaWwudHJpbSgpKVxuICAgIC5qb2luKFwiXFxuXCIpO1xufTtcblxuY29uc3QgbWFwVGVycmFmb3JtUmVwb3NpdG9yeUNyZWF0aW9uRXJyb3IgPVxuICAoc3RlcDogVGVycmFmb3JtUmVwb3NpdG9yeUNyZWF0aW9uU3RlcCkgPT5cbiAgKGNhdXNlOiB1bmtub3duKTogRXJyb3IgPT4ge1xuICAgIGNvbnN0IGRldGFpbHMgPSBmb3JtYXRUZXJyYWZvcm1SZXBvc2l0b3J5Q3JlYXRpb25GYWlsdXJlRGV0YWlscyhjYXVzZSk7XG4gICAgY29uc3QgbWVzc2FnZSA9IFtcbiAgICAgIGBUZXJyYWZvcm0gJHtzdGVwfSBmYWlsZWQgd2hpbGUgY3JlYXRpbmcgdGhlIEdpdEh1YiByZXBvc2l0b3J5LmAsXG4gICAgICBkZXRhaWxzLFxuICAgIF1cbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5qb2luKFwiXFxuXCIpO1xuXG4gICAgcmV0dXJuIG5ldyBFcnJvcihtZXNzYWdlLCB7IGNhdXNlIH0pO1xuICB9O1xuXG5jb25zdCBjcmVhdGVSZW1vdGVSZXBvc2l0b3J5V2l0aFByZXNlbnRlciA9XG4gIChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gICh7XG4gICAgcmVwb05hbWUsXG4gICAgcmVwb093bmVyLFxuICB9OiBNb25vcmVwb1BheWxvYWQpOiBSZXN1bHRBc3luYzxSZXBvc2l0b3J5LCBFcnJvcj4gPT4ge1xuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJkeC1jbGlcIiwgXCJpbml0XCJdKTtcbiAgICBjb25zdCByZXBvJCA9IHRmJCh7IGN3ZDogcGF0aC5yZXNvbHZlKFwiaW5mcmFcIiwgXCJyZXBvc2l0b3J5XCIpIH0pO1xuICAgIGNvbnN0IHJ1blRlcnJhZm9ybVJlcG9zaXRvcnlDcmVhdGlvblN0ZXAgPSBhc3luYyAoXG4gICAgICBzdGVwOiBUZXJyYWZvcm1SZXBvc2l0b3J5Q3JlYXRpb25TdGVwLFxuICAgICAgZXhlY3V0ZVN0ZXA6ICgpID0+IFByb21pc2U8dW5rbm93bj4sXG4gICAgKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBleGVjdXRlU3RlcCgpO1xuICAgICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBtYXBUZXJyYWZvcm1SZXBvc2l0b3J5Q3JlYXRpb25FcnJvcihzdGVwKShjYXVzZSk7XG4gICAgICAgIGxvZ2dlci5lcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGFwcGx5VGVycmFmb3JtID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaW5pdGlhbGl6ZVJlcG9zaXRvcnlUZXJyYWZvcm0gPSAoKSA9PiByZXBvJGB0ZXJyYWZvcm0gaW5pdGA7XG4gICAgICBjb25zdCBhcHBseVJlcG9zaXRvcnlUZXJyYWZvcm0gPSAoKSA9PlxuICAgICAgICByZXBvJGB0ZXJyYWZvcm0gYXBwbHkgLWF1dG8tYXBwcm92ZWA7XG5cbiAgICAgIGF3YWl0IHJ1blRlcnJhZm9ybVJlcG9zaXRvcnlDcmVhdGlvblN0ZXAoXG4gICAgICAgIFwiaW5pdFwiLFxuICAgICAgICBpbml0aWFsaXplUmVwb3NpdG9yeVRlcnJhZm9ybSxcbiAgICAgICk7XG4gICAgICBhd2FpdCBydW5UZXJyYWZvcm1SZXBvc2l0b3J5Q3JlYXRpb25TdGVwKFxuICAgICAgICBcImFwcGx5XCIsXG4gICAgICAgIGFwcGx5UmVwb3NpdG9yeVRlcnJhZm9ybSxcbiAgICAgICk7XG4gICAgfTtcbiAgICByZXR1cm4gdHJhY2tTdGVwKFxuICAgICAgcHJlc2VudGVyLFxuICAgICAgXCJDcmVhdGluZyBHaXRIdWIgcmVwb3NpdG9yeS4uLlwiLFxuICAgICAgYXBwbHlUZXJyYWZvcm0sXG4gICAgICAoY2F1c2UpID0+XG4gICAgICAgIGNhdXNlIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICA/IGNhdXNlXG4gICAgICAgICAgOiBhc0Vycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBHaXRIdWIgcmVwb3NpdG9yeS5cIikoY2F1c2UpLFxuICAgICkubWFwKCgpID0+IG5ldyBSZXBvc2l0b3J5KHJlcG9OYW1lLCByZXBvT3duZXIpKTtcbiAgfTtcbi8qKlxuICogRXhpdCBjb2RlIHJldHVybmVkIGJ5IGBnaXQgcmVtb3RlIGFkZGAgd2hlbiBhIHJlbW90ZSB3aXRoIHRoZSByZXF1ZXN0ZWQgbmFtZVxuICogYWxyZWFkeSBleGlzdHMuIGBnaXQgcmVtb3RlYCBkb2N1bWVudHMgdGhpcyBkZWRpY2F0ZWQgc3RhdHVzIGNvZGUsIHNvIHdlIGNhblxuICogdHVybiBpdCBpbnRvIGFjdGlvbmFibGUgZ3VpZGFuY2UgaW5zdGVhZCBvZiBhIGdlbmVyaWMgZmFpbHVyZSBtZXNzYWdlLlxuICpcbiAqIFNlZSBodHRwczovL2dpdC1zY20uY29tL2RvY3MvZ2l0LXJlbW90ZSNfZXhpdF9zdGF0dXNcbiAqL1xuY29uc3QgR0lUX1JFTU9URV9BTFJFQURZX0VYSVNUU19FWElUX0NPREUgPSAzO1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgYSBmYWlsdXJlIG9mIHRoZSBnaXQgcmVtb3RlIHNldHVwIHN0ZXAgaW50byBhbiBhY3Rpb25hYmxlIGVycm9yLlxuICpcbiAqIFdoZW4gYGdpdCByZW1vdGUgYWRkIG9yaWdpbmAgZXhpdHMgd2l0aCBjb2RlIDMgdGhlIHJlbW90ZSBhbHJlYWR5IGV4aXN0cyxcbiAqIHdoaWNoIGlzIGEgcmVjb3ZlcmFibGUgc2l0dWF0aW9uOiB0aGUgbWVzc2FnZSB0ZWxscyB0aGUgdXNlciBob3cgdG8gZml4IGl0LlxuICogVGhlIG9yaWdpbmFsIEV4ZWNhRXJyb3IgaXMgcHJlc2VydmVkIGFzIGBjYXVzZWAgc28gYC0tdmVyYm9zZWAgc3RpbGwgc3VyZmFjZXNcbiAqIHRoZSBleGl0IGNvZGUgYW5kIGdpdCdzIG93biBzdGRlcnIuXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBHaXRSZW1vdGVBZGRFcnJvciA9IChjYXVzZTogdW5rbm93bik6IEVycm9yID0+IHtcbiAgaWYgKFxuICAgIGNhdXNlIGluc3RhbmNlb2YgRXhlY2FFcnJvciAmJlxuICAgIGNhdXNlLmV4aXRDb2RlID09PSBHSVRfUkVNT1RFX0FMUkVBRFlfRVhJU1RTX0VYSVRfQ09ERVxuICApIHtcbiAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgXCJBIGdpdCByZW1vdGUgbmFtZWQgJ29yaWdpbicgYWxyZWFkeSBleGlzdHMuIFJlbW92ZSBpdCB3aXRoIGBnaXQgcmVtb3RlIHJlbW92ZSBvcmlnaW5gIGFuZCBydW4gdGhlIGNvbW1hbmQgYWdhaW4sIG9yIHN0YXJ0IGZyb20gYSBjbGVhbiBkaXJlY3RvcnkuXCIsXG4gICAgICB7IGNhdXNlIH0sXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbmV3IEVycm9yKFxuICAgIFwiRmFpbGVkIHRvIHNldCB1cCB0aGUgbG9jYWwgZ2l0IHJlcG9zaXRvcnkgYW5kIGl0cyAnb3JpZ2luJyByZW1vdGUuXCIsXG4gICAgeyBjYXVzZSB9LFxuICApO1xufTtcblxuY29uc3QgaW5pdGlhbGl6ZUdpdFJlcG9zaXRvcnlXaXRoUHJlc2VudGVyID1cbiAgKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcikgPT4gKHJlcG9zaXRvcnk6IFJlcG9zaXRvcnkpID0+IHtcbiAgICBjb25zdCBicmFuY2hOYW1lID0gXCJmZWF0dXJlcy9zY2FmZm9sZC13b3Jrc3BhY2VcIjtcbiAgICBjb25zdCBnaXQkID0gJCh7XG4gICAgICBzaGVsbDogdHJ1ZSxcbiAgICB9KTtcbiAgICAvLyBgZ2l0IHJlbW90ZSBhZGRgIGlzIHRyYWNrZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBwdXNoIHNvIGl0cyBkb2N1bWVudGVkXG4gICAgLy8gZXhpdCBjb2RlcyAoZS5nLiAzID0gcmVtb3RlIGFscmVhZHkgZXhpc3RzKSBzdXJmYWNlIGEgc3BlY2lmaWMsIGFjdGlvbmFibGVcbiAgICAvLyBtZXNzYWdlIGluc3RlYWQgb2YgYmVpbmcgbWlzcmVwb3J0ZWQgYXMgYSBwdXNoIGZhaWx1cmUuXG4gICAgY29uc3QgY29uZmlndXJlUmVtb3RlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgaW5pdGA7XG4gICAgICBhd2FpdCBnaXQkYGdpdCByZW1vdGUgYWRkIG9yaWdpbiAke3JlcG9zaXRvcnkub3JpZ2lufWA7XG4gICAgfTtcbiAgICBjb25zdCBwdXNoVG9PcmlnaW4gPSBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBnaXQkYGdpdCBmZXRjaCBvcmlnaW4gbWFpbmA7XG4gICAgICBhd2FpdCBnaXQkYGdpdCBjaGVja291dCAtYiAke2JyYW5jaE5hbWV9YDtcbiAgICAgIC8vIFRlcnJhZm9ybSBjcmVhdGVzIGBtYWluYCB3aXRoIGFuIGluaXRpYWwgUkVBRE1FIGNvbW1pdC5cbiAgICAgIC8vIFJlc2V0IHRvIGBvcmlnaW4vbWFpbmAgc28gdGhpcyBicmFuY2ggaXMgYmFzZWQgb24gdGhlIHJlbW90ZSBkZWZhdWx0IGJyYW5jaCxcbiAgICAgIC8vIHdoaWxlIGtlZXBpbmcgdGhlIHNjYWZmb2xkZWQgbG9jYWwgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBmb3IgYSBjbGVhbiBQUiBkaWZmLlxuICAgICAgYXdhaXQgZ2l0JGBnaXQgcmVzZXQgb3JpZ2luL21haW5gO1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgYWRkIC5gO1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgY29tbWl0IC0tbm8tZ3BnLXNpZ24gLW0gXCJTY2FmZm9sZCB3b3Jrc3BhY2VcImA7XG4gICAgICBhd2FpdCBnaXQkYGdpdCBwdXNoIC11IG9yaWdpbiAke2JyYW5jaE5hbWV9YDtcbiAgICB9O1xuICAgIHJldHVybiB0cmFja1N0ZXAoXG4gICAgICBwcmVzZW50ZXIsXG4gICAgICBcIkNvbmZpZ3VyaW5nIHRoZSBnaXQgcmVtb3RlLi4uXCIsXG4gICAgICBjb25maWd1cmVSZW1vdGUsXG4gICAgICBtYXBHaXRSZW1vdGVBZGRFcnJvcixcbiAgICApXG4gICAgICAuYW5kVGhlbigoKSA9PlxuICAgICAgICB0cmFja1N0ZXAoXG4gICAgICAgICAgcHJlc2VudGVyLFxuICAgICAgICAgIFwiUHVzaGluZyBjb2RlIHRvIEdpdEh1Yi4uLlwiLFxuICAgICAgICAgIHB1c2hUb09yaWdpbixcbiAgICAgICAgICBhc0Vycm9yKFwiRmFpbGVkIHRvIHB1c2ggY29kZSB0byBHaXRIdWIuXCIpLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgLm1hcCgoKSA9PiAoeyBicmFuY2hOYW1lLCByZXBvc2l0b3J5IH0pKTtcbiAgfTtcblxuY29uc3QgY3JlYXRlUHVsbFJlcXVlc3RXaXRoUHJlc2VudGVyID1cbiAgKHsgZ2l0SHViU2VydmljZSwgcHJlc2VudGVyIH06IEluaXRBY3Rpb25Db250ZXh0KSA9PlxuICAoe1xuICAgIGJyYW5jaE5hbWUsXG4gICAgcmVwb3NpdG9yeSxcbiAgfTogTG9jYWxXb3Jrc3BhY2UpOiBSZXN1bHRBc3luYzxQdWxsUmVxdWVzdCB8IHVuZGVmaW5lZCwgRXJyb3I+ID0+XG4gICAgdHJhY2tTdGVwKFxuICAgICAgcHJlc2VudGVyLFxuICAgICAgXCJDcmVhdGluZyBQdWxsIFJlcXVlc3QuLi5cIixcbiAgICAgICgpID0+XG4gICAgICAgIGdpdEh1YlNlcnZpY2UuY3JlYXRlUHVsbFJlcXVlc3Qoe1xuICAgICAgICAgIGJhc2U6IFwibWFpblwiLFxuICAgICAgICAgIGJvZHk6IFwiVGhpcyBQUiBjb250YWlucyB0aGUgc2NhZmZvbGRlZCBtb25vcmVwbyBzdHJ1Y3R1cmUuXCIsXG4gICAgICAgICAgaGVhZDogYnJhbmNoTmFtZSxcbiAgICAgICAgICBvd25lcjogcmVwb3NpdG9yeS5vd25lcixcbiAgICAgICAgICByZXBvOiByZXBvc2l0b3J5Lm5hbWUsXG4gICAgICAgICAgdGl0bGU6IFwiU2NhZmZvbGQgcmVwb3NpdG9yeVwiLFxuICAgICAgICB9KSxcbiAgICAgIGFzRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIFB1bGwgUmVxdWVzdC5cIiksXG4gICAgKVxuICAgICAgLy8gSWYgUFIgY3JlYXRpb24gZmFpbHMsIGRvbid0IGJsb2NrIHRoZSB3b3JrZmxvd1xuICAgICAgLm9yRWxzZSgoKSA9PiBva0FzeW5jKHVuZGVmaW5lZCkpO1xuXG5jb25zdCBoYW5kbGVOZXdHaXRIdWJSZXBvc2l0b3J5V2l0aFByZXNlbnRlciA9XG4gIChjb250ZXh0OiBJbml0QWN0aW9uQ29udGV4dCkgPT5cbiAgKHBheWxvYWQ6IE1vbm9yZXBvUGF5bG9hZCk6IFJlc3VsdEFzeW5jPFJlcG9zaXRvcnlQdWxsUmVxdWVzdCwgRXJyb3I+ID0+XG4gICAgY3JlYXRlUmVtb3RlUmVwb3NpdG9yeVdpdGhQcmVzZW50ZXIoY29udGV4dC5wcmVzZW50ZXIpKHBheWxvYWQpXG4gICAgICAuYW5kVGhlbihpbml0aWFsaXplR2l0UmVwb3NpdG9yeVdpdGhQcmVzZW50ZXIoY29udGV4dC5wcmVzZW50ZXIpKVxuICAgICAgLmFuZFRoZW4oKGxvY2FsV29ya3NwYWNlKSA9PlxuICAgICAgICBjcmVhdGVQdWxsUmVxdWVzdFdpdGhQcmVzZW50ZXIoY29udGV4dCkobG9jYWxXb3Jrc3BhY2UpLm1hcCgocHIpID0+ICh7XG4gICAgICAgICAgcHIsXG4gICAgICAgICAgcmVwb3NpdG9yeTogbG9jYWxXb3Jrc3BhY2UucmVwb3NpdG9yeSxcbiAgICAgICAgfSkpLFxuICAgICAgKTtcblxuY29uc3QgaGFuZGxlR2VuZXJhdG9yRXJyb3IgPSAoZXJyOiB1bmtub3duKSA9PiB7XG4gIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJkeC1jbGlcIiwgXCJpbml0XCJdKTtcbiAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKGVyci5tZXNzYWdlKTtcbiAgfVxuICByZXR1cm4gbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJ1biB0aGUgZ2VuZXJhdG9yXCIsIHsgY2F1c2U6IGVyciB9KTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgd2hldGhlciB0aGUgc2NhZmZvbGRlZCByZXBvc2l0b3J5IHNob3VsZCBiZSBwdWJsaXNoZWQgdG8gR2l0SHViLlxuICpcbiAqIFdoZW4gdGhlIGNhbGxlciBhbHJlYWR5IGtub3dzIHRoZSBhbnN3ZXIgKGUuZy4gdGhlIHVzZXIgcGFzc2VkIGAtLXB1Ymxpc2hgXG4gKiBvbiB0aGUgY29tbWFuZCBsaW5lKSwgdGhhdCB2YWx1ZSBpcyB1c2VkIGFzLWlzIGFuZCBubyBwcm9tcHQgaXMgc2hvd24uIFdoZW5cbiAqIHRoZSBwcmVmZXJlbmNlIGlzIGxlZnQgdW5kZWZpbmVkIChmbGFnIG9taXR0ZWQpLCB0aGUgdXNlciBpcyBhc2tlZFxuICogaW50ZXJhY3RpdmVseS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbmZpcm1HaXRIdWJSZXBvQ3JlYXRpb24gPSAoXG4gIHBheWxvYWQ6IE1vbm9yZXBvUGF5bG9hZCxcbiAgcHVibGlzaFByZWZlcmVuY2U/OiBib29sZWFuLFxuKTogUmVzdWx0QXN5bmM8Ym9vbGVhbiwgRXJyb3I+ID0+XG4gIC8vIEEgcHJlZmVyZW5jZSBwcm92aWRlZCB1cC1mcm9udCAodmlhIGAtLXB1Ymxpc2hgKSBza2lwcyB0aGUgaW50ZXJhY3RpdmUgcHJvbXB0LlxuICBwdWJsaXNoUHJlZmVyZW5jZSAhPT0gdW5kZWZpbmVkXG4gICAgPyBva0FzeW5jKHB1Ymxpc2hQcmVmZXJlbmNlKVxuICAgIDogUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIGlucXVpcmVyLnByb21wdCh7XG4gICAgICAgICAgZGVmYXVsdDogREVGQVVMVF9HSVRIVUJfUFVCTElTSF9DT05GSVJNQVRJT04sXG4gICAgICAgICAgbWVzc2FnZTogYFRoZSBwcm9qZWN0IGlzIGNyZWF0ZWQgb24gJHtjaGFsay5ncmVlbihwYXlsb2FkLnJlcG9OYW1lKX0uIFdvdWxkIHlvdSBsaWtlIHRvIHB1Ymxpc2ggaXQgdG8gR2l0SHViIGF0ICR7Y2hhbGsuZ3JlZW4oYCR7cGF5bG9hZC5yZXBvT3duZXJ9LyR7cGF5bG9hZC5yZXBvTmFtZX1gKX0gbm93P2AsXG4gICAgICAgICAgbmFtZTogXCJjb25maXJtXCIsXG4gICAgICAgICAgdHlwZTogXCJjb25maXJtXCIsXG4gICAgICAgIH0pLFxuICAgICAgICAoY2F1c2UpID0+XG4gICAgICAgICAgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlYWQgR2l0SHViIHB1Ymxpc2ggY29uZmlybWF0aW9uXCIsIHsgY2F1c2UgfSksXG4gICAgICApLmFuZFRoZW4oKGFuc3dlcikgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWRBbnN3ZXIgPSB6XG4gICAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgICBjb25maXJtOiB6LmJvb2xlYW4oKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zYWZlUGFyc2UoYW5zd2VyKTtcbiAgICAgICAgaWYgKCFwYXJzZWRBbnN3ZXIuc3VjY2Vzcykge1xuICAgICAgICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgICAgICAgIG5ldyBFcnJvcihcIkludmFsaWQgR2l0SHViIHB1Ymxpc2ggY29uZmlybWF0aW9uXCIsIHtcbiAgICAgICAgICAgICAgY2F1c2U6IHBhcnNlZEFuc3dlci5lcnJvcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2tBc3luYyhwYXJzZWRBbnN3ZXIuZGF0YS5jb25maXJtKTtcbiAgICAgIH0pO1xuXG5jb25zdCBydW5Jbml0QWN0aW9uID0gKHtcbiAgZ2l0SHViU2VydmljZSxcbiAgaW5pdGlhbEFuc3dlcnMgPSB7fSxcbiAgcHJlc2VudGVyLFxufTogSW5pdEFjdGlvbkNvbnRleHQpOiBSZXN1bHRBc3luYzxTdW1tYXJ5SW5wdXQsIEVycm9yPiA9PiB7XG4gIGNvbnN0IHsgcHVibGlzaFRvR2l0SHViLCAuLi5tb25vcmVwb0luaXRpYWxBbnN3ZXJzIH0gPSBpbml0aWFsQW5zd2VycztcblxuICByZXR1cm4gdHJhY2tTdGVwKFxuICAgIHByZXNlbnRlcixcbiAgICBcIkluaXRpYWxpemluZyB3b3Jrc3BhY2UgZ2VuZXJhdG9yLi4uXCIsXG4gICAgZ2V0UGxvcEluc3RhbmNlLFxuICAgIGFzRXJyb3IoXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwbG9wXCIpLFxuICApXG4gICAgLmFuZFRoZW4oKHBsb3ApID0+XG4gICAgICAvLyBUaGUgcHJvbXB0IHBoYXNlIG11c3QgcnVuIG91dHNpZGUgdHJhY2tTdGVwOiBpbiB0ZXh0IG1vZGUgdHJhY2tTdGVwXG4gICAgICAvLyByZW5kZXJzIGEgc3Bpbm5lciB0aGF0IG9jY3VwaWVzIHRoZSBUVFkgYW5kIGhpZGVzIHRoZSBwcm9tcHRzLlxuICAgICAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIGNvbGxlY3RNb25vcmVwb1BheWxvYWQocGxvcCwgZ2l0SHViU2VydmljZSwgbW9ub3JlcG9Jbml0aWFsQW5zd2VycyksXG4gICAgICAgIGhhbmRsZUdlbmVyYXRvckVycm9yLFxuICAgICAgKSxcbiAgICApXG4gICAgLmFuZFRoZW4oKHsgZ2VuZXJhdG9yLCBwYXlsb2FkIH0pID0+XG4gICAgICB0cmFja1N0ZXAoXG4gICAgICAgIHByZXNlbnRlcixcbiAgICAgICAgXCJTY2FmZm9sZGluZyB3b3Jrc3BhY2UuLi5cIixcbiAgICAgICAgKCkgPT4gcnVuTW9ub3JlcG9BY3Rpb25zKGdlbmVyYXRvciwgcGF5bG9hZCksXG4gICAgICAgIGhhbmRsZUdlbmVyYXRvckVycm9yLFxuICAgICAgKSxcbiAgICApXG4gICAgLmFuZFRlZSgocGF5bG9hZCkgPT4ge1xuICAgICAgcHJvY2Vzcy5jaGRpcihwYXlsb2FkLnJlcG9OYW1lKTtcbiAgICB9KVxuICAgIC5hbmRUaGVuKChwYXlsb2FkKSA9PlxuICAgICAgY29uZmlybUdpdEh1YlJlcG9DcmVhdGlvbihwYXlsb2FkLCBwdWJsaXNoVG9HaXRIdWIpLmFuZFRoZW48XG4gICAgICAgIFN1bW1hcnlJbnB1dCxcbiAgICAgICAgRXJyb3JcbiAgICAgID4oKGNvbmZpcm1lZCkgPT5cbiAgICAgICAgY29uZmlybWVkXG4gICAgICAgICAgPyBoYW5kbGVOZXdHaXRIdWJSZXBvc2l0b3J5V2l0aFByZXNlbnRlcih7XG4gICAgICAgICAgICAgIGdpdEh1YlNlcnZpY2UsXG4gICAgICAgICAgICAgIHByZXNlbnRlcixcbiAgICAgICAgICAgIH0pKHBheWxvYWQpXG4gICAgICAgICAgOiBva0FzeW5jKHsgZ2l0SHViUmVwb0NyZWF0aW9uU2tpcHBlZDogdHJ1ZSwgcGF5bG9hZCB9KSxcbiAgICAgICksXG4gICAgKTtcbn07XG5cbmNvbnN0IHJlcG9ydFN1bW1hcnkgPVxuICAocHJlc2VudGVyOiBDb21tYW5kUHJlc2VudGVyLCBvdXRwdXRNb2RlOiBcImpzb25cIiB8IFwidGV4dFwiKSA9PlxuICAocmVzdWx0OiBTdW1tYXJ5SW5wdXQpID0+IHtcbiAgICBpZiAob3V0cHV0TW9kZSA9PT0gXCJqc29uXCIpIHtcbiAgICAgIHByZXNlbnRlci5yZXBvcnRSZXN1bHQocmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlzcGxheVN1bW1hcnkocmVzdWx0KTtcbiAgICB9XG4gIH07XG5cbmV4cG9ydCBjb25zdCBtYWtlSW5pdENvbW1hbmQgPSAoXG4gIHJlcXVpcmVHaXRIdWJBdXRoOiBHaXRIdWJBdXRoRmFjdG9yeSxcbiAgZW52OiBDbGlFbnYsXG4pOiBDb21tYW5kID0+XG4gIG5ldyBDb21tYW5kKClcbiAgICAubmFtZShcImluaXRcIilcbiAgICAuZGVzY3JpcHRpb24oXCJJbml0aWFsaXplIGEgbmV3IERYIHdvcmtzcGFjZVwiKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbihcIi0tbmFtZSA8bmFtZT5cIiwgXCJSZXBvc2l0b3J5IG5hbWVcIikpXG4gICAgLmFkZE9wdGlvbihcbiAgICAgIG5ldyBPcHRpb24oXG4gICAgICAgIFwiLS1vd25lciA8b3duZXI+XCIsXG4gICAgICAgIFwiR2l0SHViIG9yZ2FuaXphdGlvbiBvciB1c2VyIHRoYXQgd2lsbCBvd24gdGhlIHJlcG9zaXRvcnlcIixcbiAgICAgICksXG4gICAgKVxuICAgIC5hZGRPcHRpb24oXG4gICAgICBuZXcgT3B0aW9uKFwiLS1kZXNjcmlwdGlvbiA8ZGVzY3JpcHRpb24+XCIsIFwiUmVwb3NpdG9yeSBkZXNjcmlwdGlvblwiKSxcbiAgICApXG4gICAgLmFkZE9wdGlvbihcbiAgICAgIG5ldyBPcHRpb24oXG4gICAgICAgIFwiLS1wdWJsaXNoXCIsXG4gICAgICAgIFwiUHVibGlzaCB0aGUgc2NhZmZvbGRlZCByZXBvc2l0b3J5IHRvIEdpdEh1YiB3aXRob3V0IHByb21wdGluZ1wiLFxuICAgICAgKS5kZWZhdWx0KHVuZGVmaW5lZCksXG4gICAgKVxuICAgIC5hY3Rpb24oYXN5bmMgZnVuY3Rpb24gKG9wdGlvbnM6IHVua25vd24pIHtcbiAgICAgIGNvbnN0IHsgb3V0cHV0IH0gPSB0aGlzLm9wdHNXaXRoR2xvYmFsczxHbG9iYWxPcHRpb25zPigpO1xuICAgICAgY29uc3Qgb3V0cHV0TW9kZSA9IHJlc29sdmVPdXRwdXRNb2RlKGVudiwgb3V0cHV0KTtcbiAgICAgIGNvbnN0IHByZXNlbnRlciA9IGNyZWF0ZUNvbW1hbmRQcmVzZW50ZXIob3V0cHV0TW9kZSk7XG5cbiAgICAgIGF3YWl0IFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHBhcnNlSW5pdENvbW1hbmRPcHRpb25zKG9wdGlvbnMpKSxcbiAgICAgICAgKGNhdXNlKSA9PlxuICAgICAgICAgIGNhdXNlIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICAgID8gY2F1c2VcbiAgICAgICAgICAgIDogbmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIGluaXQgY29tbWFuZCBvcHRpb25zXCIsIHsgY2F1c2UgfSksXG4gICAgICApXG4gICAgICAgIC5hbmRUaGVuKChpbml0T3B0aW9ucykgPT5cbiAgICAgICAgICBydW5Jbml0UHJlY29uZGl0aW9ucyhwcmVzZW50ZXIpXG4gICAgICAgICAgICAuYW5kVGhlbigoKSA9PiByZXF1aXJlR2l0SHViQXV0aCgpKVxuICAgICAgICAgICAgLmFuZFRoZW4oKGF1dGgpID0+XG4gICAgICAgICAgICAgIHJ1bkluaXRBY3Rpb24oe1xuICAgICAgICAgICAgICAgIGdpdEh1YlNlcnZpY2U6IGF1dGguZ2l0SHViU2VydmljZSxcbiAgICAgICAgICAgICAgICBpbml0aWFsQW5zd2VyczogZ2V0TW9ub3JlcG9Jbml0aWFsQW5zd2Vycyhpbml0T3B0aW9ucyksXG4gICAgICAgICAgICAgICAgcHJlc2VudGVyLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgIClcbiAgICAgICAgLm1hdGNoKFxuICAgICAgICAgIHJlcG9ydFN1bW1hcnkocHJlc2VudGVyLCBvdXRwdXRNb2RlKSxcbiAgICAgICAgICByZXBvcnRDb21tYW5kRXJyb3IodGhpcywgcHJlc2VudGVyLCBvdXRwdXRNb2RlKSxcbiAgICAgICAgKTtcbiAgICB9KTtcbiJdfQ==
@@ -2,8 +2,18 @@ import { $ } from "execa";
2
2
  import * as assert from "node:assert/strict";
3
3
  import { githubRepoSchema } from "../../domain/github-repo.js";
4
4
  export const getGithubRepo = async () => {
5
- const result = await $ `git config --get remote.origin.url`;
5
+ const result = await readGitRemoteOriginUrl();
6
6
  const repoUrl = result.stdout.trim();
7
+ const stderr = (result.stderr ?? "").trim();
8
+ const isMissingOriginRemote = result.exitCode === 1 && repoUrl === "" && stderr === "";
9
+ // `git config --get` exits 1 with no output when the key is unset: there is
10
+ // simply no origin remote, which is a valid "not in a repo we manage" state.
11
+ if (isMissingOriginRemote) {
12
+ return undefined;
13
+ }
14
+ if (result.exitCode !== 0) {
15
+ throw new Error(stderr === "" ? "Failed to read git remote origin URL" : stderr, { cause: result });
16
+ }
7
17
  if (repoUrl === "") {
8
18
  return undefined;
9
19
  }
@@ -29,4 +39,12 @@ export const getGithubRepo = async () => {
29
39
  repo,
30
40
  });
31
41
  };
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLXJlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlcnMvZ2l0aHViL2dpdGh1Yi1yZXBvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxLQUFLLE1BQU0sTUFBTSxvQkFBb0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUcvRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxJQUFxQyxFQUFFO0lBQ3ZFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFBLG9DQUFvQyxDQUFDO0lBQzNELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFckMsSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDbkIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksS0FBYSxDQUFDO0lBQ2xCLElBQUksSUFBWSxDQUFDO0lBRWpCLGtEQUFrRDtJQUNsRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUFHLDRDQUE0QyxDQUFDO1FBQ2hFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsK0JBQStCLENBQUMsQ0FBQztRQUNsRCxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO1NBQU0sQ0FBQztRQUNOLHdEQUF3RDtRQUN4RCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsS0FBSyxDQUNWLEdBQUcsQ0FBQyxNQUFNLEVBQ1Ysb0JBQW9CLEVBQ3BCLHdDQUF3QyxDQUN6QyxDQUFDO1FBQ0YsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELEtBQUssR0FBRyxRQUFRLENBQUM7UUFDakIsSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxPQUFPLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUM1QixLQUFLO1FBQ0wsSUFBSTtLQUNMLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ICQgfSBmcm9tIFwiZXhlY2FcIjtcbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tIFwibm9kZTphc3NlcnQvc3RyaWN0XCI7XG5cbmltcG9ydCB7IGdpdGh1YlJlcG9TY2hlbWEgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2dpdGh1Yi1yZXBvLmpzXCI7XG5pbXBvcnQgeyBHaXRIdWJSZXBvIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9naXRodWItcmVwby5qc1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0R2l0aHViUmVwbyA9IGFzeW5jICgpOiBQcm9taXNlPEdpdEh1YlJlcG8gfCB1bmRlZmluZWQ+ID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgJGBnaXQgY29uZmlnIC0tZ2V0IHJlbW90ZS5vcmlnaW4udXJsYDtcbiAgY29uc3QgcmVwb1VybCA9IHJlc3VsdC5zdGRvdXQudHJpbSgpO1xuXG4gIGlmIChyZXBvVXJsID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBvd25lcjogc3RyaW5nO1xuICBsZXQgcmVwbzogc3RyaW5nO1xuXG4gIC8vIEhhbmRsZSBTU0ggVVJMcyAoZ2l0QGdpdGh1Yi5jb206b3duZXIvcmVwby5naXQpXG4gIGlmIChyZXBvVXJsLnN0YXJ0c1dpdGgoXCJnaXRAZ2l0aHViLmNvbTpcIikpIHtcbiAgICBjb25zdCBzc2hQYXR0ZXJuID0gL15naXRAZ2l0aHViXFwuY29tOihbXi9dKylcXC8oLis/KSg/OlxcLmdpdCk/JC87XG4gICAgY29uc3QgbWF0Y2ggPSByZXBvVXJsLm1hdGNoKHNzaFBhdHRlcm4pO1xuICAgIGFzc2VydC5vayhtYXRjaCwgXCJJbnZhbGlkIEdpdEh1YiBTU0ggVVJMIGZvcm1hdFwiKTtcbiAgICBbLCBvd25lciwgcmVwb10gPSBtYXRjaDtcbiAgfSBlbHNlIHtcbiAgICAvLyBIYW5kbGUgSFRUUFMgVVJMcyAoaHR0cHM6Ly9naXRodWIuY29tL293bmVyL3JlcG8uZ2l0KVxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVwb1VybCk7XG4gICAgYXNzZXJ0LmVxdWFsKFxuICAgICAgdXJsLm9yaWdpbixcbiAgICAgIFwiaHR0cHM6Ly9naXRodWIuY29tXCIsXG4gICAgICBcIk9ubHkgR2l0SHViIHJlcG9zaXRvcmllcyBhcmUgc3VwcG9ydGVkXCIsXG4gICAgKTtcbiAgICBjb25zdCBbLCB1cmxPd25lciwgdXJsUmVwb10gPSB1cmwucGF0aG5hbWUuc3BsaXQoXCIvXCIpO1xuICAgIG93bmVyID0gdXJsT3duZXI7XG4gICAgcmVwbyA9IHVybFJlcG8ucmVwbGFjZSgvXFwuZ2l0JC8sIFwiXCIpO1xuICB9XG5cbiAgcmV0dXJuIGdpdGh1YlJlcG9TY2hlbWEucGFyc2Uoe1xuICAgIG93bmVyLFxuICAgIHJlcG8sXG4gIH0pO1xufTtcbiJdfQ==
42
+ const readGitRemoteOriginUrl = async () => {
43
+ try {
44
+ return await $({ reject: false }) `git config --get remote.origin.url`;
45
+ }
46
+ catch (error) {
47
+ throw new Error("Failed to read git remote origin URL", { cause: error });
48
+ }
49
+ };
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLXJlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlcnMvZ2l0aHViL2dpdGh1Yi1yZXBvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxLQUFLLE1BQU0sTUFBTSxvQkFBb0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUcvRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxJQUFxQyxFQUFFO0lBQ3ZFLE1BQU0sTUFBTSxHQUFHLE1BQU0sc0JBQXNCLEVBQUUsQ0FBQztJQUM5QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QyxNQUFNLHFCQUFxQixHQUN6QixNQUFNLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxPQUFPLEtBQUssRUFBRSxJQUFJLE1BQU0sS0FBSyxFQUFFLENBQUM7SUFFM0QsNEVBQTRFO0lBQzVFLDZFQUE2RTtJQUM3RSxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDMUIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUNiLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQy9ELEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUNsQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ25CLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLEtBQWEsQ0FBQztJQUNsQixJQUFJLElBQVksQ0FBQztJQUVqQixrREFBa0Q7SUFDbEQsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFVBQVUsR0FBRyw0Q0FBNEMsQ0FBQztRQUNoRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLCtCQUErQixDQUFDLENBQUM7UUFDbEQsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztTQUFNLENBQUM7UUFDTix3REFBd0Q7UUFDeEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsTUFBTSxDQUFDLEtBQUssQ0FDVixHQUFHLENBQUMsTUFBTSxFQUNWLG9CQUFvQixFQUNwQix3Q0FBd0MsQ0FDekMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RCxLQUFLLEdBQUcsUUFBUSxDQUFDO1FBQ2pCLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDNUIsS0FBSztRQUNMLElBQUk7S0FDTCxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLHNCQUFzQixHQUFHLEtBQUssSUFBSSxFQUFFO0lBQ3hDLElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQSxvQ0FBb0MsQ0FBQztJQUN4RSxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgJCB9IGZyb20gXCJleGVjYVwiO1xuaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gXCJub2RlOmFzc2VydC9zdHJpY3RcIjtcblxuaW1wb3J0IHsgZ2l0aHViUmVwb1NjaGVtYSB9IGZyb20gXCIuLi8uLi9kb21haW4vZ2l0aHViLXJlcG8uanNcIjtcbmltcG9ydCB7IEdpdEh1YlJlcG8gfSBmcm9tIFwiLi4vLi4vZG9tYWluL2dpdGh1Yi1yZXBvLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRHaXRodWJSZXBvID0gYXN5bmMgKCk6IFByb21pc2U8R2l0SHViUmVwbyB8IHVuZGVmaW5lZD4gPT4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWFkR2l0UmVtb3RlT3JpZ2luVXJsKCk7XG4gIGNvbnN0IHJlcG9VcmwgPSByZXN1bHQuc3Rkb3V0LnRyaW0oKTtcbiAgY29uc3Qgc3RkZXJyID0gKHJlc3VsdC5zdGRlcnIgPz8gXCJcIikudHJpbSgpO1xuICBjb25zdCBpc01pc3NpbmdPcmlnaW5SZW1vdGUgPVxuICAgIHJlc3VsdC5leGl0Q29kZSA9PT0gMSAmJiByZXBvVXJsID09PSBcIlwiICYmIHN0ZGVyciA9PT0gXCJcIjtcblxuICAvLyBgZ2l0IGNvbmZpZyAtLWdldGAgZXhpdHMgMSB3aXRoIG5vIG91dHB1dCB3aGVuIHRoZSBrZXkgaXMgdW5zZXQ6IHRoZXJlIGlzXG4gIC8vIHNpbXBseSBubyBvcmlnaW4gcmVtb3RlLCB3aGljaCBpcyBhIHZhbGlkIFwibm90IGluIGEgcmVwbyB3ZSBtYW5hZ2VcIiBzdGF0ZS5cbiAgaWYgKGlzTWlzc2luZ09yaWdpblJlbW90ZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAocmVzdWx0LmV4aXRDb2RlICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgc3RkZXJyID09PSBcIlwiID8gXCJGYWlsZWQgdG8gcmVhZCBnaXQgcmVtb3RlIG9yaWdpbiBVUkxcIiA6IHN0ZGVycixcbiAgICAgIHsgY2F1c2U6IHJlc3VsdCB9LFxuICAgICk7XG4gIH1cblxuICBpZiAocmVwb1VybCA9PT0gXCJcIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQgb3duZXI6IHN0cmluZztcbiAgbGV0IHJlcG86IHN0cmluZztcblxuICAvLyBIYW5kbGUgU1NIIFVSTHMgKGdpdEBnaXRodWIuY29tOm93bmVyL3JlcG8uZ2l0KVxuICBpZiAocmVwb1VybC5zdGFydHNXaXRoKFwiZ2l0QGdpdGh1Yi5jb206XCIpKSB7XG4gICAgY29uc3Qgc3NoUGF0dGVybiA9IC9eZ2l0QGdpdGh1YlxcLmNvbTooW14vXSspXFwvKC4rPykoPzpcXC5naXQpPyQvO1xuICAgIGNvbnN0IG1hdGNoID0gcmVwb1VybC5tYXRjaChzc2hQYXR0ZXJuKTtcbiAgICBhc3NlcnQub2sobWF0Y2gsIFwiSW52YWxpZCBHaXRIdWIgU1NIIFVSTCBmb3JtYXRcIik7XG4gICAgWywgb3duZXIsIHJlcG9dID0gbWF0Y2g7XG4gIH0gZWxzZSB7XG4gICAgLy8gSGFuZGxlIEhUVFBTIFVSTHMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vd25lci9yZXBvLmdpdClcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcG9VcmwpO1xuICAgIGFzc2VydC5lcXVhbChcbiAgICAgIHVybC5vcmlnaW4sXG4gICAgICBcImh0dHBzOi8vZ2l0aHViLmNvbVwiLFxuICAgICAgXCJPbmx5IEdpdEh1YiByZXBvc2l0b3JpZXMgYXJlIHN1cHBvcnRlZFwiLFxuICAgICk7XG4gICAgY29uc3QgWywgdXJsT3duZXIsIHVybFJlcG9dID0gdXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKTtcbiAgICBvd25lciA9IHVybE93bmVyO1xuICAgIHJlcG8gPSB1cmxSZXBvLnJlcGxhY2UoL1xcLmdpdCQvLCBcIlwiKTtcbiAgfVxuXG4gIHJldHVybiBnaXRodWJSZXBvU2NoZW1hLnBhcnNlKHtcbiAgICBvd25lcixcbiAgICByZXBvLFxuICB9KTtcbn07XG5cbmNvbnN0IHJlYWRHaXRSZW1vdGVPcmlnaW5VcmwgPSBhc3luYyAoKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0ICQoeyByZWplY3Q6IGZhbHNlIH0pYGdpdCBjb25maWcgLS1nZXQgcmVtb3RlLm9yaWdpbi51cmxgO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byByZWFkIGdpdCByZW1vdGUgb3JpZ2luIFVSTFwiLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgfVxufTtcbiJdfQ==
@@ -1,7 +1,12 @@
1
1
  import { z } from "zod/v4";
2
2
  import { CloudAccount, CloudAccountService } from "./cloud-account.js";
3
3
  import { TerraformBackend } from "./remote-backend.js";
4
- export declare const environmentShort: Record<Environment["name"], string>;
4
+ export declare const environmentShort: {
5
+ readonly dev: "d";
6
+ readonly prod: "p";
7
+ readonly uat: "u";
8
+ };
9
+ export type EnvironmentShortValue = (typeof environmentShort)[keyof typeof environmentShort];
5
10
  export declare const environmentSchema: z.ZodObject<{
6
11
  cloudAccounts: z.ZodArray<z.ZodObject<{
7
12
  csp: z.ZodDefault<z.ZodEnum<{
@@ -62,4 +62,4 @@ export async function hasUserPermissionToInitialize(cloudAccountService, environ
62
62
  }
63
63
  return true;
64
64
  }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG9tYWluL2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFM0IsT0FBTyxFQUVMLGtCQUFrQixHQUVuQixNQUFNLG9CQUFvQixDQUFDO0FBRzVCLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUF3QztJQUNuRSxHQUFHLEVBQUUsR0FBRztJQUNSLElBQUksRUFBRSxHQUFHO0lBQ1QsR0FBRyxFQUFFLEdBQUc7Q0FDVCxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN4QyxhQUFhLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakQsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLHVFQUF1RTtJQUN2RSx1RUFBdUU7SUFDdkUsTUFBTSxFQUFFLENBQUM7U0FDTixNQUFNLEVBQUU7U0FDUixJQUFJLEVBQUU7U0FDTixXQUFXLEVBQUU7U0FDYixHQUFHLENBQUMsQ0FBQyxFQUFFLG1DQUFtQyxDQUFDO1NBQzNDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsa0NBQWtDLENBQUM7Q0FDOUMsQ0FBQyxDQUFDO0FBNEJILE1BQU0sQ0FBQyxLQUFLLFVBQVUsdUJBQXVCLENBQzNDLG1CQUF3QyxFQUN4QyxXQUF3QjtJQUV4QixNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFDO0lBQzFDLEtBQUssTUFBTSxZQUFZLElBQUksV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JELE1BQU0sV0FBVyxHQUFHLE1BQU0sbUJBQW1CLENBQUMsYUFBYSxDQUN6RCxZQUFZLENBQUMsRUFBRSxFQUNmLFdBQVcsQ0FDWixDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ1YsWUFBWTtnQkFDWixJQUFJLEVBQUUsK0JBQStCO2FBQ3RDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLG1CQUFtQixDQUNoRCxtQkFBbUIsRUFDbkIsV0FBVyxDQUNaLENBQUM7SUFDRixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1YsSUFBSSxFQUFFLHdCQUF3QjtTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE9BQU87WUFDTCxXQUFXLEVBQUUsS0FBSztZQUNsQixNQUFNO1NBQ1AsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPO1FBQ0wsV0FBVyxFQUFFLElBQUk7S0FDbEIsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQixDQUN2QyxtQkFBd0MsRUFDeEMsV0FBd0I7SUFFeEIsS0FBSyxNQUFNLFlBQVksSUFBSSxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckQsTUFBTSxPQUFPLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FDM0QsWUFBWSxDQUFDLEVBQUUsRUFDZixXQUFXLENBQ1osQ0FBQztRQUNGLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLDZCQUE2QixDQUNqRCxtQkFBd0MsRUFDeEMsV0FBd0I7SUFFeEIsS0FBSyxNQUFNLFlBQVksSUFBSSxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckQsTUFBTSxNQUFNLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyw2QkFBNkIsQ0FDcEUsWUFBWSxDQUFDLEVBQUUsQ0FDaEIsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB6IH0gZnJvbSBcInpvZC92NFwiO1xuXG5pbXBvcnQge1xuICBDbG91ZEFjY291bnQsXG4gIGNsb3VkQWNjb3VudFNjaGVtYSxcbiAgQ2xvdWRBY2NvdW50U2VydmljZSxcbn0gZnJvbSBcIi4vY2xvdWQtYWNjb3VudC5qc1wiO1xuaW1wb3J0IHsgVGVycmFmb3JtQmFja2VuZCB9IGZyb20gXCIuL3JlbW90ZS1iYWNrZW5kLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBlbnZpcm9ubWVudFNob3J0OiBSZWNvcmQ8RW52aXJvbm1lbnRbXCJuYW1lXCJdLCBzdHJpbmc+ID0ge1xuICBkZXY6IFwiZFwiLFxuICBwcm9kOiBcInBcIixcbiAgdWF0OiBcInVcIixcbn07XG5cbmV4cG9ydCBjb25zdCBlbnZpcm9ubWVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY2xvdWRBY2NvdW50czogei5hcnJheShjbG91ZEFjY291bnRTY2hlbWEpLm1pbigxKSxcbiAgbmFtZTogei5lbnVtKFtcImRldlwiLCBcInByb2RcIiwgXCJ1YXRcIl0pLFxuICAvLyBUcmltIGFuZCBsb3dlcmNhc2UgYXQgdGhlIHNjaGVtYSBsZXZlbCBzbyB0aGUgY29uc3RyYWludCBpcyBlbmZvcmNlZFxuICAvLyByZWdhcmRsZXNzIG9mIGhvdyB0aGUgZGF0YSBlbnRlcnMgdGhlIHN5c3RlbSAocHJvbXB0LCB0ZXN0LCBvciBBUEkpLlxuICBwcmVmaXg6IHpcbiAgICAuc3RyaW5nKClcbiAgICAudHJpbSgpXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAubWluKDIsIFwiUHJlZml4IG11c3QgaGF2ZSBhdCBsZWFzdCAyIGNoYXJzXCIpXG4gICAgLm1heCg0LCBcIlByZWZpeCBtdXN0IGhhdmUgYXQgbW9zdCA0IGNoYXJzXCIpLFxufSk7XG5cbmV4cG9ydCB0eXBlIEVudmlyb25tZW50ID0gei5pbmZlcjx0eXBlb2YgZW52aXJvbm1lbnRTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBFbnZpcm9ubWVudElkID0gUGljazxFbnZpcm9ubWVudCwgXCJuYW1lXCIgfCBcInByZWZpeFwiPjtcblxuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnRJbml0U3RhdHVzID1cbiAgfCB7XG4gICAgICBpbml0aWFsaXplZDogZmFsc2U7XG4gICAgICBpc3N1ZXM6IEVudmlyb25tZW50SW5pdElzc3VlW107XG4gICAgfVxuICB8IHtcbiAgICAgIGluaXRpYWxpemVkOiB0cnVlO1xuICAgIH07XG5cbnR5cGUgQ2xvdWRBY2NvdW50Tm90SW5pdGlhbGl6ZWRJc3N1ZSA9IHtcbiAgY2xvdWRBY2NvdW50OiBDbG91ZEFjY291bnQ7XG4gIHR5cGU6IFwiQ0xPVURfQUNDT1VOVF9OT1RfSU5JVElBTElaRURcIjtcbn07XG5cbnR5cGUgRW52aXJvbm1lbnRJbml0SXNzdWUgPVxuICB8IENsb3VkQWNjb3VudE5vdEluaXRpYWxpemVkSXNzdWVcbiAgfCBNaXNzaW5nUmVtb3RlQmFja2VuZElzc3VlO1xuXG50eXBlIE1pc3NpbmdSZW1vdGVCYWNrZW5kSXNzdWUgPSB7XG4gIHR5cGU6IFwiTUlTU0lOR19SRU1PVEVfQkFDS0VORFwiO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEluaXRpYWxpemF0aW9uU3RhdHVzKFxuICBjbG91ZEFjY291bnRTZXJ2aWNlOiBDbG91ZEFjY291bnRTZXJ2aWNlLFxuICBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4pOiBQcm9taXNlPEVudmlyb25tZW50SW5pdFN0YXR1cz4ge1xuICBjb25zdCBpc3N1ZXM6IEVudmlyb25tZW50SW5pdElzc3VlW10gPSBbXTtcbiAgZm9yIChjb25zdCBjbG91ZEFjY291bnQgb2YgZW52aXJvbm1lbnQuY2xvdWRBY2NvdW50cykge1xuICAgIGNvbnN0IGluaXRpYWxpemVkID0gYXdhaXQgY2xvdWRBY2NvdW50U2VydmljZS5pc0luaXRpYWxpemVkKFxuICAgICAgY2xvdWRBY2NvdW50LmlkLFxuICAgICAgZW52aXJvbm1lbnQsXG4gICAgKTtcbiAgICBpZiAoIWluaXRpYWxpemVkKSB7XG4gICAgICBpc3N1ZXMucHVzaCh7XG4gICAgICAgIGNsb3VkQWNjb3VudCxcbiAgICAgICAgdHlwZTogXCJDTE9VRF9BQ0NPVU5UX05PVF9JTklUSUFMSVpFRFwiLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHRlcnJhZm9ybUJhY2tlbmQgPSBhd2FpdCBnZXRUZXJyYWZvcm1CYWNrZW5kKFxuICAgIGNsb3VkQWNjb3VudFNlcnZpY2UsXG4gICAgZW52aXJvbm1lbnQsXG4gICk7XG4gIGlmICghdGVycmFmb3JtQmFja2VuZCkge1xuICAgIGlzc3Vlcy5wdXNoKHtcbiAgICAgIHR5cGU6IFwiTUlTU0lOR19SRU1PVEVfQkFDS0VORFwiLFxuICAgIH0pO1xuICB9XG4gIGlmIChpc3N1ZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBpbml0aWFsaXplZDogZmFsc2UsXG4gICAgICBpc3N1ZXMsXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGluaXRpYWxpemVkOiB0cnVlLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VGVycmFmb3JtQmFja2VuZChcbiAgY2xvdWRBY2NvdW50U2VydmljZTogQ2xvdWRBY2NvdW50U2VydmljZSxcbiAgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuKTogUHJvbWlzZTxUZXJyYWZvcm1CYWNrZW5kIHwgdW5kZWZpbmVkPiB7XG4gIGZvciAoY29uc3QgY2xvdWRBY2NvdW50IG9mIGVudmlyb25tZW50LmNsb3VkQWNjb3VudHMpIHtcbiAgICBjb25zdCBiYWNrZW5kID0gYXdhaXQgY2xvdWRBY2NvdW50U2VydmljZS5nZXRUZXJyYWZvcm1CYWNrZW5kKFxuICAgICAgY2xvdWRBY2NvdW50LmlkLFxuICAgICAgZW52aXJvbm1lbnQsXG4gICAgKTtcbiAgICBpZiAoYmFja2VuZCkge1xuICAgICAgcmV0dXJuIGJhY2tlbmQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYXNVc2VyUGVybWlzc2lvblRvSW5pdGlhbGl6ZShcbiAgY2xvdWRBY2NvdW50U2VydmljZTogQ2xvdWRBY2NvdW50U2VydmljZSxcbiAgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGZvciAoY29uc3QgY2xvdWRBY2NvdW50IG9mIGVudmlyb25tZW50LmNsb3VkQWNjb3VudHMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbG91ZEFjY291bnRTZXJ2aWNlLmhhc1VzZXJQZXJtaXNzaW9uVG9Jbml0aWFsaXplKFxuICAgICAgY2xvdWRBY2NvdW50LmlkLFxuICAgICk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG9tYWluL2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFM0IsT0FBTyxFQUVMLGtCQUFrQixHQUVuQixNQUFNLG9CQUFvQixDQUFDO0FBRzVCLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLEdBQUcsRUFBRSxHQUFHO0lBQ1IsSUFBSSxFQUFFLEdBQUc7SUFDVCxHQUFHLEVBQUUsR0FBRztDQUM4QyxDQUFDO0FBS3pELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDeEMsYUFBYSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pELElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyx1RUFBdUU7SUFDdkUsdUVBQXVFO0lBQ3ZFLE1BQU0sRUFBRSxDQUFDO1NBQ04sTUFBTSxFQUFFO1NBQ1IsSUFBSSxFQUFFO1NBQ04sV0FBVyxFQUFFO1NBQ2IsR0FBRyxDQUFDLENBQUMsRUFBRSxtQ0FBbUMsQ0FBQztTQUMzQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGtDQUFrQyxDQUFDO0NBQzlDLENBQUMsQ0FBQztBQTRCSCxNQUFNLENBQUMsS0FBSyxVQUFVLHVCQUF1QixDQUMzQyxtQkFBd0MsRUFDeEMsV0FBd0I7SUFFeEIsTUFBTSxNQUFNLEdBQTJCLEVBQUUsQ0FBQztJQUMxQyxLQUFLLE1BQU0sWUFBWSxJQUFJLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyRCxNQUFNLFdBQVcsR0FBRyxNQUFNLG1CQUFtQixDQUFDLGFBQWEsQ0FDekQsWUFBWSxDQUFDLEVBQUUsRUFDZixXQUFXLENBQ1osQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNWLFlBQVk7Z0JBQ1osSUFBSSxFQUFFLCtCQUErQjthQUN0QyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxtQkFBbUIsQ0FDaEQsbUJBQW1CLEVBQ25CLFdBQVcsQ0FDWixDQUFDO0lBQ0YsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLElBQUksRUFBRSx3QkFBd0I7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0QixPQUFPO1lBQ0wsV0FBVyxFQUFFLEtBQUs7WUFDbEIsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTztRQUNMLFdBQVcsRUFBRSxJQUFJO0tBQ2xCLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsbUJBQXdDLEVBQ3hDLFdBQXdCO0lBRXhCLEtBQUssTUFBTSxZQUFZLElBQUksV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JELE1BQU0sT0FBTyxHQUFHLE1BQU0sbUJBQW1CLENBQUMsbUJBQW1CLENBQzNELFlBQVksQ0FBQyxFQUFFLEVBQ2YsV0FBVyxDQUNaLENBQUM7UUFDRixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSw2QkFBNkIsQ0FDakQsbUJBQXdDLEVBQ3hDLFdBQXdCO0lBRXhCLEtBQUssTUFBTSxZQUFZLElBQUksV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JELE1BQU0sTUFBTSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsNkJBQTZCLENBQ3BFLFlBQVksQ0FBQyxFQUFFLENBQ2hCLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2QvdjRcIjtcblxuaW1wb3J0IHtcbiAgQ2xvdWRBY2NvdW50LFxuICBjbG91ZEFjY291bnRTY2hlbWEsXG4gIENsb3VkQWNjb3VudFNlcnZpY2UsXG59IGZyb20gXCIuL2Nsb3VkLWFjY291bnQuanNcIjtcbmltcG9ydCB7IFRlcnJhZm9ybUJhY2tlbmQgfSBmcm9tIFwiLi9yZW1vdGUtYmFja2VuZC5qc1wiO1xuXG5leHBvcnQgY29uc3QgZW52aXJvbm1lbnRTaG9ydCA9IHtcbiAgZGV2OiBcImRcIixcbiAgcHJvZDogXCJwXCIsXG4gIHVhdDogXCJ1XCIsXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8RW52aXJvbm1lbnRbXCJuYW1lXCJdLCBzdHJpbmc+O1xuXG5leHBvcnQgdHlwZSBFbnZpcm9ubWVudFNob3J0VmFsdWUgPVxuICAodHlwZW9mIGVudmlyb25tZW50U2hvcnQpW2tleW9mIHR5cGVvZiBlbnZpcm9ubWVudFNob3J0XTtcblxuZXhwb3J0IGNvbnN0IGVudmlyb25tZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICBjbG91ZEFjY291bnRzOiB6LmFycmF5KGNsb3VkQWNjb3VudFNjaGVtYSkubWluKDEpLFxuICBuYW1lOiB6LmVudW0oW1wiZGV2XCIsIFwicHJvZFwiLCBcInVhdFwiXSksXG4gIC8vIFRyaW0gYW5kIGxvd2VyY2FzZSBhdCB0aGUgc2NoZW1hIGxldmVsIHNvIHRoZSBjb25zdHJhaW50IGlzIGVuZm9yY2VkXG4gIC8vIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBkYXRhIGVudGVycyB0aGUgc3lzdGVtIChwcm9tcHQsIHRlc3QsIG9yIEFQSSkuXG4gIHByZWZpeDogelxuICAgIC5zdHJpbmcoKVxuICAgIC50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5taW4oMiwgXCJQcmVmaXggbXVzdCBoYXZlIGF0IGxlYXN0IDIgY2hhcnNcIilcbiAgICAubWF4KDQsIFwiUHJlZml4IG11c3QgaGF2ZSBhdCBtb3N0IDQgY2hhcnNcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnQgPSB6LmluZmVyPHR5cGVvZiBlbnZpcm9ubWVudFNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIEVudmlyb25tZW50SWQgPSBQaWNrPEVudmlyb25tZW50LCBcIm5hbWVcIiB8IFwicHJlZml4XCI+O1xuXG5leHBvcnQgdHlwZSBFbnZpcm9ubWVudEluaXRTdGF0dXMgPVxuICB8IHtcbiAgICAgIGluaXRpYWxpemVkOiBmYWxzZTtcbiAgICAgIGlzc3VlczogRW52aXJvbm1lbnRJbml0SXNzdWVbXTtcbiAgICB9XG4gIHwge1xuICAgICAgaW5pdGlhbGl6ZWQ6IHRydWU7XG4gICAgfTtcblxudHlwZSBDbG91ZEFjY291bnROb3RJbml0aWFsaXplZElzc3VlID0ge1xuICBjbG91ZEFjY291bnQ6IENsb3VkQWNjb3VudDtcbiAgdHlwZTogXCJDTE9VRF9BQ0NPVU5UX05PVF9JTklUSUFMSVpFRFwiO1xufTtcblxudHlwZSBFbnZpcm9ubWVudEluaXRJc3N1ZSA9XG4gIHwgQ2xvdWRBY2NvdW50Tm90SW5pdGlhbGl6ZWRJc3N1ZVxuICB8IE1pc3NpbmdSZW1vdGVCYWNrZW5kSXNzdWU7XG5cbnR5cGUgTWlzc2luZ1JlbW90ZUJhY2tlbmRJc3N1ZSA9IHtcbiAgdHlwZTogXCJNSVNTSU5HX1JFTU9URV9CQUNLRU5EXCI7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0SW5pdGlhbGl6YXRpb25TdGF0dXMoXG4gIGNsb3VkQWNjb3VudFNlcnZpY2U6IENsb3VkQWNjb3VudFNlcnZpY2UsXG4gIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbik6IFByb21pc2U8RW52aXJvbm1lbnRJbml0U3RhdHVzPiB7XG4gIGNvbnN0IGlzc3VlczogRW52aXJvbm1lbnRJbml0SXNzdWVbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGNsb3VkQWNjb3VudCBvZiBlbnZpcm9ubWVudC5jbG91ZEFjY291bnRzKSB7XG4gICAgY29uc3QgaW5pdGlhbGl6ZWQgPSBhd2FpdCBjbG91ZEFjY291bnRTZXJ2aWNlLmlzSW5pdGlhbGl6ZWQoXG4gICAgICBjbG91ZEFjY291bnQuaWQsXG4gICAgICBlbnZpcm9ubWVudCxcbiAgICApO1xuICAgIGlmICghaW5pdGlhbGl6ZWQpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKHtcbiAgICAgICAgY2xvdWRBY2NvdW50LFxuICAgICAgICB0eXBlOiBcIkNMT1VEX0FDQ09VTlRfTk9UX0lOSVRJQUxJWkVEXCIsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdGVycmFmb3JtQmFja2VuZCA9IGF3YWl0IGdldFRlcnJhZm9ybUJhY2tlbmQoXG4gICAgY2xvdWRBY2NvdW50U2VydmljZSxcbiAgICBlbnZpcm9ubWVudCxcbiAgKTtcbiAgaWYgKCF0ZXJyYWZvcm1CYWNrZW5kKSB7XG4gICAgaXNzdWVzLnB1c2goe1xuICAgICAgdHlwZTogXCJNSVNTSU5HX1JFTU9URV9CQUNLRU5EXCIsXG4gICAgfSk7XG4gIH1cbiAgaWYgKGlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcbiAgICAgIGlzc3VlcyxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgaW5pdGlhbGl6ZWQ6IHRydWUsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRUZXJyYWZvcm1CYWNrZW5kKFxuICBjbG91ZEFjY291bnRTZXJ2aWNlOiBDbG91ZEFjY291bnRTZXJ2aWNlLFxuICBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4pOiBQcm9taXNlPFRlcnJhZm9ybUJhY2tlbmQgfCB1bmRlZmluZWQ+IHtcbiAgZm9yIChjb25zdCBjbG91ZEFjY291bnQgb2YgZW52aXJvbm1lbnQuY2xvdWRBY2NvdW50cykge1xuICAgIGNvbnN0IGJhY2tlbmQgPSBhd2FpdCBjbG91ZEFjY291bnRTZXJ2aWNlLmdldFRlcnJhZm9ybUJhY2tlbmQoXG4gICAgICBjbG91ZEFjY291bnQuaWQsXG4gICAgICBlbnZpcm9ubWVudCxcbiAgICApO1xuICAgIGlmIChiYWNrZW5kKSB7XG4gICAgICByZXR1cm4gYmFja2VuZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhc1VzZXJQZXJtaXNzaW9uVG9Jbml0aWFsaXplKFxuICBjbG91ZEFjY291bnRTZXJ2aWNlOiBDbG91ZEFjY291bnRTZXJ2aWNlLFxuICBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgZm9yIChjb25zdCBjbG91ZEFjY291bnQgb2YgZW52aXJvbm1lbnQuY2xvdWRBY2NvdW50cykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsb3VkQWNjb3VudFNlcnZpY2UuaGFzVXNlclBlcm1pc3Npb25Ub0luaXRpYWxpemUoXG4gICAgICBjbG91ZEFjY291bnQuaWQsXG4gICAgKTtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pagopa/dx-cli",
3
- "version": "0.25.0",
3
+ "version": "0.25.2",
4
4
  "type": "module",
5
5
  "description": "A CLI useful to manage DX tools.",
6
6
  "repository": {
@@ -24,56 +24,56 @@
24
24
  "@azure/arm-authorization": "^9.0.0",
25
25
  "@azure/arm-keyvault": "^4.0.0",
26
26
  "@azure/arm-msi": "^2.2.0",
27
- "@azure/monitor-opentelemetry": "1.18.1",
28
- "@opentelemetry/api": "^1.9.1",
29
- "@opentelemetry/api-logs": "^0.218.0",
30
- "@opentelemetry/instrumentation": "^0.218.0",
31
- "@opentelemetry/instrumentation-undici": "^0.28.0",
32
- "@opentelemetry/sdk-logs": "^0.218.0",
33
- "import-in-the-middle": "^3.0.0",
34
27
  "@azure/arm-resourcegraph": "^4.2.1",
35
28
  "@azure/arm-resources": "^7.0.0",
36
29
  "@azure/arm-resources-subscriptions": "^2.1.0",
37
30
  "@azure/arm-storage": "^19.1.0",
38
31
  "@azure/identity": "^4.13.1",
39
- "@azure/keyvault-secrets": "^4.11.1",
40
- "@azure/storage-blob": "^12.31.0",
41
- "@logtape/logtape": "^1.3.8",
32
+ "@azure/keyvault-secrets": "^4.11.2",
33
+ "@azure/monitor-opentelemetry": "1.18.1",
34
+ "@azure/storage-blob": "^12.33.0",
35
+ "@logtape/logtape": "^1.3.11",
42
36
  "@logtape/otel": "1.3.8",
43
37
  "@microsoft/microsoft-graph-client": "^3.0.7",
38
+ "@opentelemetry/api": "^1.9.1",
39
+ "@opentelemetry/api-logs": "^0.218.0",
40
+ "@opentelemetry/instrumentation": "^0.218.0",
41
+ "@opentelemetry/instrumentation-undici": "^0.28.0",
42
+ "@opentelemetry/sdk-logs": "^0.218.0",
44
43
  "chalk": "^5.6.2",
45
44
  "commander": "^14.0.3",
46
45
  "core-js": "^3.49.0",
47
46
  "execa": "^9.6.1",
48
47
  "glob": "^11.1.0",
48
+ "import-in-the-middle": "^3.2.0",
49
49
  "inquirer": "^9.3.8",
50
50
  "libsodium-wrappers": "^0.8.4",
51
51
  "neverthrow": "^8.2.0",
52
52
  "node-plop": "^0.32.3",
53
53
  "octokit": "^5.0.5",
54
- "ora": "^9.4.0",
54
+ "ora": "^9.4.1",
55
55
  "replace-in-file": "^8.4.0",
56
- "semver": "^7.7.4",
57
- "yaml": "^2.8.4",
58
- "zod": "^4.4.2",
59
- "@pagopa/dx-savemoney": "^0.3.2"
56
+ "semver": "^7.8.5",
57
+ "yaml": "^2.9.0",
58
+ "zod": "^4.4.3",
59
+ "@pagopa/dx-savemoney": "^0.3.3"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@tsconfig/node24": "24.0.4",
63
- "@types/inquirer": "^9.0.9",
63
+ "@types/inquirer": "^9.0.10",
64
64
  "@types/libsodium-wrappers": "^0.8.2",
65
- "@types/node": "^22.19.17",
65
+ "@types/node": "^22.20.0",
66
66
  "@types/semver": "^7.7.1",
67
- "@vitest/coverage-v8": "^4.1.8",
68
- "eslint": "^10.3.0",
67
+ "@vitest/coverage-v8": "^4.1.9",
68
+ "eslint": "^10.6.0",
69
69
  "fast-check": "^4.8.0",
70
- "memfs": "^4.57.2",
70
+ "memfs": "^4.57.8",
71
71
  "plop": "^4.0.5",
72
72
  "prettier": "3.8.3",
73
73
  "typescript": "~5.9.3",
74
- "vitest": "^4.1.8",
74
+ "vitest": "^4.1.9",
75
75
  "vitest-mock-extended": "^4.0.0",
76
- "@pagopa/eslint-config": "^6.1.0"
76
+ "@pagopa/eslint-config": "^6.2.0"
77
77
  },
78
78
  "engines": {
79
79
  "node": ">=22.0.0"
@@ -14,7 +14,7 @@ terraform {
14
14
 
15
15
  github = {
16
16
  source = "integrations/github"
17
- version = "~> 6.0"
17
+ version = "~> 6.12"
18
18
  }
19
19
  }
20
20
  }