@pagopa/dx-cli 0.26.4 → 0.27.1

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.
@@ -16,6 +16,7 @@ export declare const resourceGraphDataSchema: z.ZodObject<{
16
16
  export declare class AzureCloudAccountService implements CloudAccountService {
17
17
  #private;
18
18
  constructor(credential: TokenCredential);
19
+ configureGitHubEnvironment(cloudAccount: CloudAccount, { name, prefix }: EnvironmentId, github: GitHubRepo, gitHubService: GitHubService, runnerAppCredentials?: GitHubAppCredentials): Promise<void>;
19
20
  getTerraformBackend(cloudAccountId: CloudAccount["id"], { name, prefix }: EnvironmentId): Promise<TerraformBackend | undefined>;
20
21
  hasUserPermissionToInitialize(cloudAccountId: CloudAccount["id"]): Promise<boolean>;
21
22
  initialize(cloudAccount: CloudAccount, { name, prefix }: EnvironmentId, runnerAppCredentials: GitHubAppCredentials, github: GitHubRepo, gitHubService: GitHubService, tags?: Record<string, string>): Promise<void>;
@@ -14,7 +14,7 @@ import { createHash } from "node:crypto";
14
14
  import { lookup } from "node:dns/promises";
15
15
  import { setTimeout as sleep } from "node:timers/promises";
16
16
  import { z } from "zod/v4";
17
- import { environmentShort, } from "../../domain/environment.js";
17
+ import { getEnvironmentShort, } from "../../domain/environment.js";
18
18
  import { terraformBackendSchema, } from "../../domain/remote-backend.js";
19
19
  import { isAzureLocation, locations, locationShort, } from "./locations.js";
20
20
  // We are only interested in these properties for now;
@@ -83,9 +83,52 @@ export class AzureCloudAccountService {
83
83
  this.#resourceGraphClient = new ResourceGraphClient(credential);
84
84
  this.#credential = credential;
85
85
  }
86
+ async configureGitHubEnvironment(cloudAccount, { name, prefix }, github, gitHubService, runnerAppCredentials) {
87
+ assert.equal(cloudAccount.csp, "azure", "Cloud account must be Azure");
88
+ assert.ok(isAzureLocation(cloudAccount.defaultLocation), "The default location of the cloud account is not a valid Azure location");
89
+ const short = {
90
+ env: getEnvironmentShort(name),
91
+ location: locationShort[cloudAccount.defaultLocation],
92
+ };
93
+ const resourceGroupName = `${prefix}-${short.env}-${short.location}-common-rg-01`;
94
+ const cdIdentityName = `${prefix}-${short.env}-${short.location}-bootstrap-id-01`;
95
+ const ciIdentityName = `${prefix}-${short.env}-${short.location}-bootstrap-ci-id-01`;
96
+ const msiClient = new ManagedServiceIdentityClient(this.#credential, cloudAccount.id);
97
+ const [cdIdentity, ciIdentity] = await Promise.all([
98
+ this.#getBootstrapperIdentity({
99
+ cloudAccountId: cloudAccount.id,
100
+ identityName: cdIdentityName,
101
+ msiClient,
102
+ resourceGroupName,
103
+ }),
104
+ this.#getBootstrapperIdentity({
105
+ cloudAccountId: cloudAccount.id,
106
+ identityName: ciIdentityName,
107
+ msiClient,
108
+ resourceGroupName,
109
+ }),
110
+ ]);
111
+ const subscriptionClient = new SubscriptionClient(this.#credential);
112
+ const subscription = await subscriptionClient.subscriptions.get(cloudAccount.id);
113
+ assert.ok(subscription.tenantId, "Subscription tenant ID is undefined");
114
+ await this.#configureBootstrapperGitHubEnvironments({
115
+ cdIdentityClientId: cdIdentity.clientId,
116
+ cdIdentityName: cdIdentity.name,
117
+ ciIdentityClientId: ciIdentity.clientId,
118
+ ciIdentityName: ciIdentity.name,
119
+ cloudAccountId: cloudAccount.id,
120
+ github,
121
+ gitHubService,
122
+ msiClient,
123
+ name,
124
+ resourceGroupName,
125
+ runnerAppCredentials,
126
+ tenantId: subscription.tenantId,
127
+ });
128
+ }
86
129
  async getTerraformBackend(cloudAccountId, { name, prefix }) {
87
130
  const allLocations = Object.values(locationShort).join("|");
88
- const shortEnv = environmentShort[name];
131
+ const shortEnv = getEnvironmentShort(name);
89
132
  // Check if a storage account with the expected name exists
90
133
  // $prefix + environment short + location + "tfstatest" + suffix (e.g., "dxpitntfstatest01")
91
134
  // it can return multiple results (e.g. for different location or instance number)
@@ -175,7 +218,7 @@ export class AzureCloudAccountService {
175
218
  await this.#registerProviders(cloudAccount.id);
176
219
  const resourceManagementClient = new ResourceManagementClient(this.#credential, cloudAccount.id);
177
220
  const short = {
178
- env: environmentShort[name],
221
+ env: getEnvironmentShort(name),
179
222
  location: locationShort[cloudAccount.defaultLocation],
180
223
  };
181
224
  const resourceGroupName = `${prefix}-${short.env}-${short.location}-common-rg-01`;
@@ -270,7 +313,7 @@ export class AzureCloudAccountService {
270
313
  }
271
314
  async isInitialized(cloudAccountId, { name, prefix }) {
272
315
  const allLocations = Object.values(locationShort).join("|");
273
- const shortEnv = environmentShort[name];
316
+ const shortEnv = getEnvironmentShort(name);
274
317
  const identityResourceName = `${prefix}-${shortEnv}-(${allLocations})-bootstrap-id-(0[1-9]|[1-9]\\d)`;
275
318
  const identityQuery = `resources
276
319
  | where type == 'microsoft.managedidentity/userassignedidentities'
@@ -308,7 +351,7 @@ export class AzureCloudAccountService {
308
351
  const logger = getLogger(["gen", "env"]);
309
352
  const resourceManagementClient = new ResourceManagementClient(this.#credential, cloudAccount.id);
310
353
  const short = {
311
- env: environmentShort[name],
354
+ env: getEnvironmentShort(name),
312
355
  location: locationShort[cloudAccount.defaultLocation],
313
356
  };
314
357
  const parameters = {
@@ -467,6 +510,16 @@ export class AzureCloudAccountService {
467
510
  #createRoleDefinitionResourceId(subscriptionId, roleDefinitionId) {
468
511
  return `/subscriptions/${subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/${roleDefinitionId}`;
469
512
  }
513
+ async #getBootstrapperIdentity({ cloudAccountId, identityName, msiClient, resourceGroupName, }) {
514
+ const logger = getLogger(["gen", "env"]);
515
+ const identity = await msiClient.userAssignedIdentities.get(resourceGroupName, identityName);
516
+ assert.ok(identity.clientId, "Managed identity client ID is undefined");
517
+ logger.debug("Read identity {identityName} in subscription {subscriptionId}", { identityName, subscriptionId: cloudAccountId });
518
+ return {
519
+ clientId: identity.clientId,
520
+ name: identityName,
521
+ };
522
+ }
470
523
  async #getCurrentPrincipalIds() {
471
524
  // Create Graph client with custom auth provider that fetches fresh tokens
472
525
  const graphClient = Client.init({
@@ -584,4 +637,4 @@ export class AzureCloudAccountService {
584
637
  }
585
638
  }
586
639
  }
587
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWQtYWNjb3VudC1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FkYXB0ZXJzL2F6dXJlL2Nsb3VkLWFjY291bnQtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRCxPQUFPLEtBQUssTUFBTSxNQUFNLG9CQUFvQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLElBQUksS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQU0zQixPQUFPLEVBRUwsZ0JBQWdCLEdBRWpCLE1BQU0sNkJBQTZCLENB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QUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6QyxNQUFNLFFBQVEsR0FBRyxHQUFHLFlBQVksa0JBQWtCLENBQUM7UUFFbkQsNkVBQTZFO1FBQzdFLHdFQUF3RTtRQUN4RSxLQUFLLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLElBQUksMkJBQTJCLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUN4RSxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3ZCLE9BQU87WUFDVCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixJQUNFLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU87b0JBQ2hELE9BQU8sS0FBSywyQkFBMkIsRUFDdkMsQ0FBQztvQkFDRCxNQUFNLElBQUksS0FBSyxDQUNiLHVCQUF1QixRQUFRLHFCQUFxQixFQUNwRCxFQUFFLEtBQUssRUFBRSxDQUNWLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxNQUFNLENBQUMsS0FBSyxDQUNWLGlHQUFpRyxFQUNqRyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLENBQzdDLENBQUM7Z0JBQ0YsTUFBTSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUM1QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVG9rZW5DcmVkZW50aWFsIH0gZnJvbSBcIkBhenVyZS9pZGVudGl0eVwiO1xuXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uTWFuYWdlbWVudENsaWVudCB9IGZyb20gXCJAYXp1cmUvYXJtLWF1dGhvcml6YXRpb25cIjtcbmltcG9ydCB7IEtleVZhdWx0TWFuYWdlbWVudENsaWVudCB9IGZyb20gXCJAYXp1cmUvYXJtLWtleXZhdWx0XCI7XG5pbXBvcnQgeyBNYW5hZ2VkU2VydmljZUlkZW50aXR5Q2xpZW50IH0gZnJvbSBcIkBhenVyZS9hcm0tbXNpXCI7XG5pbXBvcnQgeyBSZXNvdXJjZUdyYXBoQ2xpZW50IH0gZnJvbSBcIkBhenVyZS9hcm0tcmVzb3VyY2VncmFwaFwiO1xuaW1wb3J0IHsgUmVzb3VyY2VNYW5hZ2VtZW50Q2xpZW50IH0gZnJvbSBcIkBhenVyZS9hcm0tcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25DbGllbnQgfSBmcm9tIFwiQGF6dXJlL2FybS1yZXNvdXJjZXMtc3Vic2NyaXB0aW9uc1wiO1xuaW1wb3J0IHsgU3RvcmFnZU1hbmFnZW1lbnRDbGllbnQgfSBmcm9tIFwiQGF6dXJlL2FybS1zdG9yYWdlXCI7XG5pbXBvcnQgeyBTZWNyZXRDbGllbnQgfSBmcm9tIFwiQGF6dXJlL2tleXZhdWx0LXNlY3JldHNcIjtcbmltcG9ydCB7IEJsb2JTZXJ2aWNlQ2xpZW50IH0gZnJvbSBcIkBhenVyZS9zdG9yYWdlLWJsb2JcIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tIFwiQG1pY3Jvc29mdC9taWNyb3NvZnQtZ3JhcGgtY2xpZW50XCI7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSBcIm5vZGU6YXNzZXJ0L3N0cmljdFwiO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgbG9va3VwIH0gZnJvbSBcIm5vZGU6ZG5zL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IGFzIHNsZWVwIH0gZnJvbSBcIm5vZGU6dGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZC92NFwiO1xuXG5pbXBvcnQge1xuICBDbG91ZEFjY291bnQsXG4gIHR5cGUgQ2xvdWRBY2NvdW50U2VydmljZSxcbn0gZnJvbSBcIi4uLy4uL2RvbWFpbi9jbG91ZC1hY2NvdW50LmpzXCI7XG5pbXBvcnQge1xuICB0eXBlIEVudmlyb25tZW50SWQsXG4gIGVudmlyb25tZW50U2hvcnQsXG4gIEVudmlyb25tZW50U2hvcnRWYWx1ZSxcbn0gZnJvbSBcIi4uLy4uL2RvbWFpbi9lbnZpcm9ubWVudC5qc1wiO1xuaW1wb3J0IHsgdHlwZSBHaXRIdWJSZXBvIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9naXRodWItcmVwby5qc1wiO1xuaW1wb3J0IHtcbiAgR2l0SHViQXBwQ3JlZGVudGlhbHMsXG4gIHR5cGUgR2l0SHViU2VydmljZSxcbn0gZnJvbSBcIi4uLy4uL2RvbWFpbi9naXRodWIuanNcIjtcbmltcG9ydCB7XG4gIHR5cGUgVGVycmFmb3JtQmFja2VuZCxcbiAgdGVycmFmb3JtQmFja2VuZFNjaGVtYSxcbn0gZnJvbSBcIi4uLy4uL2RvbWFpbi9yZW1vdGUtYmFja2VuZC5qc1wiO1xuaW1wb3J0IHtcbiAgaXNBenVyZUxvY2F0aW9uLFxuICBsb2NhdGlvbnMsXG4gIGxvY2F0aW9uU2hvcnQsXG4gIExvY2F0aW9uU2hvcnRWYWx1ZSxcbn0gZnJvbSBcIi4vbG9jYXRpb25zLmpzXCI7XG5cbi8vIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlc2UgcHJvcGVydGllcyBmb3Igbm93O1xuLy8gdGhlIGFjdHVhbCByZXN1bHQgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBmdWxsIGNsb3VkIHJlc291cmNlIG9iamVjdFxuZXhwb3J0IGNvbnN0IHJlc291cmNlR3JhcGhEYXRhU2NoZW1hID0gei5vYmplY3Qoe1xuICBsb2NhdGlvbjogei5lbnVtKGxvY2F0aW9ucyksXG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIHJlc291cmNlR3JvdXA6IHouc3RyaW5nKCksXG59KTtcblxuY29uc3QgZ3JhcGhVc2VyUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxufSk7XG5cbmNvbnN0IGdyYXBoR3JvdXBNZW1iZXJzaGlwSXRlbVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG59KTtcblxuY29uc3QgZ3JhcGhHcm91cE1lbWJlcnNoaXBSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgXCJAb2RhdGEubmV4dExpbmtcIjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB2YWx1ZTogei5hcnJheShncmFwaEdyb3VwTWVtYmVyc2hpcEl0ZW1TY2hlbWEpLFxufSk7XG5cbmNvbnN0IGJ1aWx0SW5Sb2xlRGVmaW5pdGlvbklkcyA9IHtcbiAgY29udHJpYnV0b3I6IFwiYjI0OTg4YWMtNjE4MC00MmEwLWFiODgtMjBmNzM4MmRkMjRjXCIsXG4gIGtleVZhdWx0U2VjcmV0c09mZmljZXI6IFwiYjg2YThmZTQtNDRjZS00OTQ4LWFlZTUtZWNjYjJjMTU1Y2Q3XCIsXG4gIG93bmVyOiBcIjhlM2FmNjU3LWE4ZmYtNDQzYy1hNzVjLTJmZThjNGJjYjYzNVwiLFxuICByZWFkZXI6IFwiYWNkZDcyYTctMzM4NS00OGVmLWJkNDItZjYwNmZiYTgxYWU3XCIsXG4gIHJvbGVCYXNlZEFjY2Vzc0NvbnRyb2xBZG1pbmlzdHJhdG9yOiBcImY1ODMxMGQ5LWE5ZjYtNDM5YS05ZThkLWY2MmU3YjQxYTE2OFwiLFxuICBzdG9yYWdlQmxvYkRhdGFDb250cmlidXRvcjogXCJiYTkyZjViNC0yZDExLTQ1M2QtYTQwMy1lOTZiMDAyOWM5ZmVcIixcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IGJvb3RzdHJhcElkZW50aXR5Um9sZURlZmluaXRpb25JZHMgPSBbXG4gIC8vIFRoZXNlIHJvbGVzIGxldCB0aGUgYm9vdHN0cmFwIGlkZW50aXR5IHJ1biB0aGUgYm9vdHN0cmFwcGVyIG1vZHVsZSBmcm9tIEdpdEh1YiBBY3Rpb25zIHdpdGhvdXQgZXh0cmEgbWFudWFsIGdyYW50cy5cbiAgYnVpbHRJblJvbGVEZWZpbml0aW9uSWRzLnJvbGVCYXNlZEFjY2Vzc0NvbnRyb2xBZG1pbmlzdHJhdG9yLFxuICBidWlsdEluUm9sZURlZmluaXRpb25JZHMuY29udHJpYnV0b3IsXG4gIGJ1aWx0SW5Sb2xlRGVmaW5pdGlvbklkcy5zdG9yYWdlQmxvYkRhdGFDb250cmlidXRvcixcbl0gYXMgY29uc3Q7XG5cbmNvbnN0IGJvb3RzdHJhcENpSWRlbnRpdHlSb2xlRGVmaW5pdGlvbklkcyA9IFtcbiAgLy8gUGxhbiBuZWVkcyByZWFkIGFjY2VzcyBmb3IgcmVmcmVzaCBhbmQgYmxvYiBhY2Nlc3MgZm9yIFRlcnJhZm9ybSBiYWNrZW5kIGxvY2tzL3N0YXRlLlxuICBidWlsdEluUm9sZURlZmluaXRpb25JZHMucmVhZGVyLFxuICBidWlsdEluUm9sZURlZmluaXRpb25JZHMuc3RvcmFnZUJsb2JEYXRhQ29udHJpYnV0b3IsXG5dIGFzIGNvbnN0O1xuXG50eXBlIEJvb3RzdHJhcHBlcklkZW50aXR5ID0ge1xuICBjbGllbnRJZDogc3RyaW5nO1xuICBuYW1lOiBCb290c3RyYXBwZXJJZGVudGl0eU5hbWU7XG4gIHByaW5jaXBhbElkOiBzdHJpbmc7XG59O1xuXG50eXBlIEJvb3RzdHJhcHBlcklkZW50aXR5TmFtZSA9XG4gIHwgYCR7c3RyaW5nfS0ke0Vudmlyb25tZW50U2hvcnRWYWx1ZX0tJHtMb2NhdGlvblNob3J0VmFsdWV9LWJvb3RzdHJhcC1jaS1pZC0ke3N0cmluZ31gXG4gIHwgYCR7c3RyaW5nfS0ke0Vudmlyb25tZW50U2hvcnRWYWx1ZX0tJHtMb2NhdGlvblNob3J0VmFsdWV9LWJvb3RzdHJhcC1pZC0ke3N0cmluZ31gO1xuXG50eXBlIEJvb3RzdHJhcHBlcklkZW50aXR5UGFyYW1ldGVycyA9IHtcbiAgbG9jYXRpb246IHN0cmluZztcbiAgdGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG5cbmNvbnN0IGtleVZhdWx0RG5zRXJyb3JTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvZGU6IHouZW51bShbXCJFQUlfQUdBSU5cIiwgXCJFTk9URk9VTkRcIl0pLFxufSk7XG5jb25zdCBrZXlWYXVsdERuc1JlYWR5TWF4QXR0ZW1wdHMgPSAzMDtcbmNvbnN0IGtleVZhdWx0RG5zUmVhZHlSZXRyeURlbGF5TXMgPSAxMF8wMDA7XG5cbmV4cG9ydCBjbGFzcyBBenVyZUNsb3VkQWNjb3VudFNlcnZpY2UgaW1wbGVtZW50cyBDbG91ZEFjY291bnRTZXJ2aWNlIHtcbiAgI2NyZWRlbnRpYWw6IFRva2VuQ3JlZGVudGlhbDtcbiAgI3JlcXVpcmVkUmVzb3VyY2VQcm92aWRlcnMgPSBbXG4gICAgXCJNaWNyb3NvZnQuQWR2aXNvclwiLFxuICAgIFwiTWljcm9zb2Z0LkFsZXJ0c01hbmFnZW1lbnRcIixcbiAgICBcIk1pY3Jvc29mdC5BcGlNYW5hZ2VtZW50XCIsXG4gICAgXCJNaWNyb3NvZnQuQXBwXCIsXG4gICAgXCJNaWNyb3NvZnQuQXV0aG9yaXphdGlvblwiLFxuICAgIFwiTWljcm9zb2Z0LkF6dXJlVGVycmFmb3JtXCIsXG4gICAgXCJNaWNyb3NvZnQuQ2FjaGVcIixcbiAgICBcIk1pY3Jvc29mdC5DZG5cIixcbiAgICBcIk1pY3Jvc29mdC5Db250YWluZXJJbnN0YW5jZVwiLFxuICAgIFwiTWljcm9zb2Z0LkNvc3RNYW5hZ2VtZW50XCIsXG4gICAgXCJNaWNyb3NvZnQuREJmb3JQb3N0Z3JlU1FMXCIsXG4gICAgXCJNaWNyb3NvZnQuS2V5VmF1bHRcIixcbiAgICBcIk1pY3Jvc29mdC5TZXJ2aWNlQnVzXCIsXG4gICAgXCJNaWNyb3NvZnQuU3FsXCIsXG4gICAgXCJNaWNyb3NvZnQuU3RvcmFnZVwiLFxuICAgIFwiTWljcm9zb2Z0LldlYlwiLFxuICBdIGFzIGNvbnN0O1xuICAjcmVzb3VyY2VHcmFwaENsaWVudDogUmVzb3VyY2VHcmFwaENsaWVudDtcblxuICBjb25zdHJ1Y3RvcihjcmVkZW50aWFsOiBUb2tlbkNyZWRlbnRpYWwpIHtcbiAgICB0aGlzLiNyZXNvdXJjZUdyYXBoQ2xpZW50ID0gbmV3IFJlc291cmNlR3JhcGhDbGllbnQoY3JlZGVudGlhbCk7XG4gICAgdGhpcy4jY3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7XG4gIH1cblxuICBhc3luYyBnZXRUZXJyYWZvcm1CYWNrZW5kKFxuICAgIGNsb3VkQWNjb3VudElkOiBDbG91ZEFjY291bnRbXCJpZFwiXSxcbiAgICB7IG5hbWUsIHByZWZpeCB9OiBFbnZpcm9ubWVudElkLFxuICApOiBQcm9taXNlPFRlcnJhZm9ybUJhY2tlbmQgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBhbGxMb2NhdGlvbnMgPSBPYmplY3QudmFsdWVzKGxvY2F0aW9uU2hvcnQpLmpvaW4oXCJ8XCIpO1xuICAgIGNvbnN0IHNob3J0RW52ID0gZW52aXJvbm1lbnRTaG9ydFtuYW1lXTtcbiAgICAvLyBDaGVjayBpZiBhIHN0b3JhZ2UgYWNjb3VudCB3aXRoIHRoZSBleHBlY3RlZCBuYW1lIGV4aXN0c1xuICAgIC8vICRwcmVmaXggKyBlbnZpcm9ubWVudCBzaG9ydCArIGxvY2F0aW9uICsgXCJ0ZnN0YXRlc3RcIiArIHN1ZmZpeCAoZS5nLiwgXCJkeHBpdG50ZnN0YXRlc3QwMVwiKVxuICAgIC8vIGl0IGNhbiByZXR1cm4gbXVsdGlwbGUgcmVzdWx0cyAoZS5nLiBmb3IgZGlmZmVyZW50IGxvY2F0aW9uIG9yIGluc3RhbmNlIG51bWJlcilcbiAgICBjb25zdCByZXNvdXJjZU5hbWUgPSBgJHtwcmVmaXh9JHtzaG9ydEVudn0oJHthbGxMb2NhdGlvbnN9KXRmc3RhdGVzdCgwWzEtOV18WzEtOV1cXFxcZClgO1xuICAgIGNvbnN0IHF1ZXJ5ID0gYHJlc291cmNlc1xuICAgICAgICAgICAgIHwgd2hlcmUgdHlwZSA9PSAnbWljcm9zb2Z0LnN0b3JhZ2Uvc3RvcmFnZWFjY291bnRzJ1xuICAgICAgICAgICAgIHwgd2hlcmUgbmFtZSBtYXRjaGVzIHJlZ2V4IEAnJHtyZXNvdXJjZU5hbWV9J1xuICAgICAgICAgICAgYDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLiNyZXNvdXJjZUdyYXBoQ2xpZW50LnJlc291cmNlcyh7XG4gICAgICBxdWVyeSxcbiAgICAgIHN1YnNjcmlwdGlvbnM6IFtjbG91ZEFjY291bnRJZF0sXG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC50b3RhbFJlY29yZHMgPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHN0b3JhZ2VBY2NvdW50cyA9IHouYXJyYXkocmVzb3VyY2VHcmFwaERhdGFTY2hlbWEpLnBhcnNlKHJlc3VsdC5kYXRhKTtcbiAgICAvLyBvbiBtdWx0aXBsZSByZXN1bHRzLCByYW5rIHN0b3JhZ2UgYWNjb3VudHMgYnkgbG9jYXRpb24gcHJpb3JpdHkgYW5kIGluc3RhbmNlIG51bWJlclxuICAgIGlmIChzdG9yYWdlQWNjb3VudHMubGVuZ3RoID4gMCkge1xuICAgICAgc3RvcmFnZUFjY291bnRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgLy8gY29tcGFyZSBsb2NhdGlvbnMgcHJpb3JpdHlcbiAgICAgICAgY29uc3QgbG9jYXRpb25Db21wYXJpc29uID1cbiAgICAgICAgICBsb2NhdGlvbnMuaW5kZXhPZihhLmxvY2F0aW9uKSAtIGxvY2F0aW9ucy5pbmRleE9mKGIubG9jYXRpb24pO1xuICAgICAgICBpZiAobG9jYXRpb25Db21wYXJpc29uID09PSAwKSB7XG4gICAgICAgICAgLy8gc2FtZSBsb2NhdGlvbiwgY29tcGFyZSBieSBuYW1lICh0byBnZXQgdGhlIGhpZ2hlc3QgaW5zdGFuY2UgbnVtYmVyKVxuICAgICAgICAgIHJldHVybiBiLm5hbWUubG9jYWxlQ29tcGFyZShhLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhdGlvbkNvbXBhcmlzb247XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRlcnJhZm9ybUJhY2tlbmRTY2hlbWEucGFyc2Uoe1xuICAgICAgcmVzb3VyY2VHcm91cE5hbWU6IHN0b3JhZ2VBY2NvdW50c1swXS5yZXNvdXJjZUdyb3VwLFxuICAgICAgc3RvcmFnZUFjY291bnROYW1lOiBzdG9yYWdlQWNjb3VudHNbMF0ubmFtZSxcbiAgICAgIHN1YnNjcmlwdGlvbklkOiBjbG91ZEFjY291bnRJZCxcbiAgICAgIHR5cGU6IFwiYXp1cmVybVwiLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgaGFzVXNlclBlcm1pc3Npb25Ub0luaXRpYWxpemUoXG4gICAgY2xvdWRBY2NvdW50SWQ6IENsb3VkQWNjb3VudFtcImlkXCJdLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgLy8gQWxsIHByaW5jaXBhbCBJRHMgdG8gY2hlY2sgKHVzZXIgKyBhbGwgZ3JvdXBzKVxuICAgICAgY29uc3QgYWxsUHJpbmNpcGFsSWRzID0gYXdhaXQgdGhpcy4jZ2V0Q3VycmVudFByaW5jaXBhbElkcygpO1xuXG4gICAgICAvLyBHZXQgcm9sZSBhc3NpZ25tZW50cyBmb3IgdGhlIHN1YnNjcmlwdGlvblxuICAgICAgY29uc3QgYXV0aENsaWVudCA9IG5ldyBBdXRob3JpemF0aW9uTWFuYWdlbWVudENsaWVudChcbiAgICAgICAgdGhpcy4jY3JlZGVudGlhbCxcbiAgICAgICAgY2xvdWRBY2NvdW50SWQsXG4gICAgICApO1xuXG4gICAgICBjb25zdCByZXF1aXJlZFJvbGVzID0gW1xuICAgICAgICBidWlsdEluUm9sZURlZmluaXRpb25JZHMub3duZXIsIC8vIE93bmVyXG4gICAgICAgIGJ1aWx0SW5Sb2xlRGVmaW5pdGlvbklkcy5zdG9yYWdlQmxvYkRhdGFDb250cmlidXRvciwgLy8gU3RvcmFnZSBCbG9iIERhdGEgQ29udHJpYnV0b3JcbiAgICAgICAgYnVpbHRJblJvbGVEZWZpbml0aW9uSWRzLmtleVZhdWx0U2VjcmV0c09mZmljZXIsIC8vIEtleSBWYXVsdCBTZWNyZXRzIE9mZmljZXJcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gYC9zdWJzY3JpcHRpb25zLyR7Y2xvdWRBY2NvdW50SWR9YDtcblxuICAgICAgLy8gQ29sbGVjdCBhbGwgcm9sZSBkZWZpbml0aW9uIElEcyBhc3NpZ25lZCB0byB0aGUgdXNlciBvciB0aGVpciBncm91cHNcbiAgICAgIGNvbnN0IGFzc2lnbmVkUm9sZURlZmluaXRpb25JZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgZm9yIGF3YWl0IChjb25zdCBhc3NpZ25tZW50IG9mIGF1dGhDbGllbnQucm9sZUFzc2lnbm1lbnRzLmxpc3RGb3JTY29wZShcbiAgICAgICAgc2NvcGUsXG4gICAgICApKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgYXNzaWdubWVudCBpcyBmb3IgdGhlIHVzZXIgb3IgYW55IG9mIHRoZWlyIGdyb3Vwc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgYXNzaWdubWVudC5wcmluY2lwYWxJZCAmJlxuICAgICAgICAgIGFsbFByaW5jaXBhbElkcy5oYXMoYXNzaWdubWVudC5wcmluY2lwYWxJZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gRXh0cmFjdCByb2xlIGRlZmluaXRpb24gSUQgZnJvbSB0aGUgZnVsbCByZXNvdXJjZSBJRFxuICAgICAgICAgIC8vIEZvcm1hdDogL3N1YnNjcmlwdGlvbnMve3N1Yn0vcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3JvbGVEZWZpbml0aW9ucy97cm9sZUlkfVxuICAgICAgICAgIGNvbnN0IHJvbGVEZWZJZCA9IGFzc2lnbm1lbnQucm9sZURlZmluaXRpb25JZD8uc3BsaXQoXCIvXCIpLnBvcCgpO1xuICAgICAgICAgIGlmIChyb2xlRGVmSWQpIHtcbiAgICAgICAgICAgIGFzc2lnbmVkUm9sZURlZmluaXRpb25JZHMuYWRkKHJvbGVEZWZJZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2hvcnQtY2lyY3VpdDogc3RvcCBpZiBhbGwgcmVxdWlyZWQgcm9sZXMgaGF2ZSBiZWVuIGZvdW5kXG4gICAgICAgIGlmIChcbiAgICAgICAgICByZXF1aXJlZFJvbGVzLmV2ZXJ5KChyZXF1aXJlZFJvbGUpID0+XG4gICAgICAgICAgICBhc3NpZ25lZFJvbGVEZWZpbml0aW9uSWRzLmhhcyhyZXF1aXJlZFJvbGUpLFxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgYWxsIHJlcXVpcmVkIHJvbGVzIGFyZSBwcmVzZW50XG4gICAgICBjb25zdCBoYXNBbGxSb2xlcyA9IHJlcXVpcmVkUm9sZXMuZXZlcnkoKHJlcXVpcmVkUm9sZSkgPT5cbiAgICAgICAgYXNzaWduZWRSb2xlRGVmaW5pdGlvbklkcy5oYXMocmVxdWlyZWRSb2xlKSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBoYXNBbGxSb2xlcztcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgLy8gSGFuZGxlIGF1dGhvcml6YXRpb24gZXJyb3JzICg0MDMgRm9yYmlkZGVuKSAtIHVzZXIgbGFja3MgcGVybWlzc2lvbnNcbiAgICAgIGlmIChcbiAgICAgICAgZXJyb3IgJiZcbiAgICAgICAgdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIFwic3RhdHVzQ29kZVwiIGluIGVycm9yICYmXG4gICAgICAgIGVycm9yLnN0YXR1c0NvZGUgPT09IDQwM1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIFJlLXRocm93IG90aGVyIGVycm9yc1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZShcbiAgICBjbG91ZEFjY291bnQ6IENsb3VkQWNjb3VudCxcbiAgICB7IG5hbWUsIHByZWZpeCB9OiBFbnZpcm9ubWVudElkLFxuICAgIHJ1bm5lckFwcENyZWRlbnRpYWxzOiBHaXRIdWJBcHBDcmVkZW50aWFscyxcbiAgICBnaXRodWI6IEdpdEh1YlJlcG8sXG4gICAgZ2l0SHViU2VydmljZTogR2l0SHViU2VydmljZSxcbiAgICB0YWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGFzc2VydC5lcXVhbChjbG91ZEFjY291bnQuY3NwLCBcImF6dXJlXCIsIFwiQ2xvdWQgYWNjb3VudCBtdXN0IGJlIEF6dXJlXCIpO1xuICAgIGFzc2VydC5vayhcbiAgICAgIGlzQXp1cmVMb2NhdGlvbihjbG91ZEFjY291bnQuZGVmYXVsdExvY2F0aW9uKSxcbiAgICAgIFwiVGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGNsb3VkIGFjY291bnQgaXMgbm90IGEgdmFsaWQgQXp1cmUgbG9jYXRpb25cIixcbiAgICApO1xuXG4gICAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcImdlblwiLCBcImVudlwiXSk7XG5cbiAgICAvLyBSZWdpc3RlciByZXF1aXJlZCByZXNvdXJjZSBwcm92aWRlcnMgYmVmb3JlIGNyZWF0aW5nIGFueSByZXNvdXJjZXNcbiAgICBhd2FpdCB0aGlzLiNyZWdpc3RlclByb3ZpZGVycyhjbG91ZEFjY291bnQuaWQpO1xuXG4gICAgY29uc3QgcmVzb3VyY2VNYW5hZ2VtZW50Q2xpZW50ID0gbmV3IFJlc291cmNlTWFuYWdlbWVudENsaWVudChcbiAgICAgIHRoaXMuI2NyZWRlbnRpYWwsXG4gICAgICBjbG91ZEFjY291bnQuaWQsXG4gICAgKTtcblxuICAgIGNvbnN0IHNob3J0ID0ge1xuICAgICAgZW52OiBlbnZpcm9ubWVudFNob3J0W25hbWVdLFxuICAgICAgbG9jYXRpb246IGxvY2F0aW9uU2hvcnRbY2xvdWRBY2NvdW50LmRlZmF1bHRMb2NhdGlvbl0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc291cmNlR3JvdXBOYW1lID0gYCR7cHJlZml4fS0ke3Nob3J0LmVudn0tJHtzaG9ydC5sb2NhdGlvbn0tY29tbW9uLXJnLTAxYDtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7XG4gICAgICBsb2NhdGlvbjogY2xvdWRBY2NvdW50LmRlZmF1bHRMb2NhdGlvbixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgQ3JlYXRlZEJ5OiBcIkRYIENMSVwiLFxuICAgICAgICBFbnZpcm9ubWVudDogbmFtZSxcbiAgICAgICAgLi4udGFncyxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGF3YWl0IHJlc291cmNlTWFuYWdlbWVudENsaWVudC5yZXNvdXJjZUdyb3Vwcy5jcmVhdGVPclVwZGF0ZShcbiAgICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgcGFyYW1ldGVycyxcbiAgICApO1xuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgXCJDcmVhdGVkIHJlc291cmNlIGdyb3VwIHtyZXNvdXJjZUdyb3VwTmFtZX0gaW4gc3Vic2NyaXB0aW9uIHtzdWJzY3JpcHRpb25JZH1cIixcbiAgICAgIHsgcmVzb3VyY2VHcm91cE5hbWUsIHN1YnNjcmlwdGlvbklkOiBjbG91ZEFjY291bnQuaWQgfSxcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGlkZW50aXR5TmFtZTogQm9vdHN0cmFwcGVySWRlbnRpdHlOYW1lID0gYCR7cHJlZml4fS0ke3Nob3J0LmVudn0tJHtzaG9ydC5sb2NhdGlvbn0tYm9vdHN0cmFwLWlkLTAxYDtcbiAgICAgIGNvbnN0IGNpSWRlbnRpdHlOYW1lOiBCb290c3RyYXBwZXJJZGVudGl0eU5hbWUgPSBgJHtwcmVmaXh9LSR7c2hvcnQuZW52fS0ke3Nob3J0LmxvY2F0aW9ufS1ib290c3RyYXAtY2ktaWQtMDFgO1xuXG4gICAgICBjb25zdCBtc2lDbGllbnQgPSBuZXcgTWFuYWdlZFNlcnZpY2VJZGVudGl0eUNsaWVudChcbiAgICAgICAgdGhpcy4jY3JlZGVudGlhbCxcbiAgICAgICAgY2xvdWRBY2NvdW50LmlkLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgW2NkSWRlbnRpdHksIGNpSWRlbnRpdHldID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICB0aGlzLiNjcmVhdGVCb290c3RyYXBwZXJJZGVudGl0eSh7XG4gICAgICAgICAgY2xvdWRBY2NvdW50SWQ6IGNsb3VkQWNjb3VudC5pZCxcbiAgICAgICAgICBpZGVudGl0eU5hbWUsXG4gICAgICAgICAgbXNpQ2xpZW50LFxuICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgcmVzb3VyY2VHcm91cE5hbWUsXG4gICAgICAgIH0pLFxuICAgICAgICB0aGlzLiNjcmVhdGVCb290c3RyYXBwZXJJZGVudGl0eSh7XG4gICAgICAgICAgY2xvdWRBY2NvdW50SWQ6IGNsb3VkQWNjb3VudC5pZCxcbiAgICAgICAgICBpZGVudGl0eU5hbWU6IGNpSWRlbnRpdHlOYW1lLFxuICAgICAgICAgIG1zaUNsaWVudCxcbiAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgICB9KSxcbiAgICAgIF0pO1xuXG4gICAgICBjb25zdCBhdXRob3JpemF0aW9uTWFuYWdlbWVudENsaWVudCA9IG5ldyBBdXRob3JpemF0aW9uTWFuYWdlbWVudENsaWVudChcbiAgICAgICAgdGhpcy4jY3JlZGVudGlhbCxcbiAgICAgICAgY2xvdWRBY2NvdW50LmlkLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbkNsaWVudCA9IG5ldyBTdWJzY3JpcHRpb25DbGllbnQodGhpcy4jY3JlZGVudGlhbCk7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBhd2FpdCBzdWJzY3JpcHRpb25DbGllbnQuc3Vic2NyaXB0aW9ucy5nZXQoXG4gICAgICAgIGNsb3VkQWNjb3VudC5pZCxcbiAgICAgICk7XG4gICAgICBhc3NlcnQub2soc3Vic2NyaXB0aW9uLnRlbmFudElkLCBcIlN1YnNjcmlwdGlvbiB0ZW5hbnQgSUQgaXMgdW5kZWZpbmVkXCIpO1xuICAgICAgY29uc3QgdGVuYW50SWQgPSBzdWJzY3JpcHRpb24udGVuYW50SWQ7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb25TY29wZSA9IGAvc3Vic2NyaXB0aW9ucy8ke2Nsb3VkQWNjb3VudC5pZH1gO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHRoaXMuI2Fzc2lnbkJvb3RzdHJhcHBlclJvbGVzKHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uTWFuYWdlbWVudENsaWVudCxcbiAgICAgICAgICBjbG91ZEFjY291bnRJZDogY2xvdWRBY2NvdW50LmlkLFxuICAgICAgICAgIGlkZW50aXR5OiBjZElkZW50aXR5LFxuICAgICAgICAgIHJvbGVEZWZpbml0aW9uSWRzOiBib290c3RyYXBJZGVudGl0eVJvbGVEZWZpbml0aW9uSWRzLFxuICAgICAgICAgIHNjb3BlOiBzdWJzY3JpcHRpb25TY29wZSxcbiAgICAgICAgfSksXG4gICAgICAgIHRoaXMuI2Fzc2lnbkJvb3RzdHJhcHBlclJvbGVzKHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uTWFuYWdlbWVudENsaWVudCxcbiAgICAgICAgICBjbG91ZEFjY291bnRJZDogY2xvdWRBY2NvdW50LmlkLFxuICAgICAgICAgIGlkZW50aXR5OiBjaUlkZW50aXR5LFxuICAgICAgICAgIHJvbGVEZWZpbml0aW9uSWRzOiBib290c3RyYXBDaUlkZW50aXR5Um9sZURlZmluaXRpb25JZHMsXG4gICAgICAgICAgc2NvcGU6IHN1YnNjcmlwdGlvblNjb3BlLFxuICAgICAgICB9KSxcbiAgICAgIF0pO1xuXG4gICAgICBhd2FpdCB0aGlzLiNjb25maWd1cmVCb290c3RyYXBwZXJHaXRIdWJFbnZpcm9ubWVudHMoe1xuICAgICAgICBjZElkZW50aXR5Q2xpZW50SWQ6IGNkSWRlbnRpdHkuY2xpZW50SWQsXG4gICAgICAgIGNkSWRlbnRpdHlOYW1lOiBjZElkZW50aXR5Lm5hbWUsXG4gICAgICAgIGNpSWRlbnRpdHlDbGllbnRJZDogY2lJZGVudGl0eS5jbGllbnRJZCxcbiAgICAgICAgY2lJZGVudGl0eU5hbWU6IGNpSWRlbnRpdHkubmFtZSxcbiAgICAgICAgY2xvdWRBY2NvdW50SWQ6IGNsb3VkQWNjb3VudC5pZCxcbiAgICAgICAgZ2l0aHViLFxuICAgICAgICBnaXRIdWJTZXJ2aWNlLFxuICAgICAgICBtc2lDbGllbnQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgICBydW5uZXJBcHBDcmVkZW50aWFscyxcbiAgICAgICAgdGVuYW50SWQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qga2V5VmF1bHROYW1lID0gYXdhaXQgdGhpcy4jY3JlYXRlQ29tbW9uS2V5VmF1bHQoe1xuICAgICAgICBjbG91ZEFjY291bnQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgcmVzb3VyY2VHcm91cE5hbWUsXG4gICAgICAgIHNob3J0RW52OiBzaG9ydC5lbnYsXG4gICAgICAgIHNob3J0TG9jYXRpb246IHNob3J0LmxvY2F0aW9uLFxuICAgICAgICB0YWdzLFxuICAgICAgICB0ZW5hbnRJZCxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB0aGlzLiNzdG9yZVJ1bm5lckFwcFNlY3JldHMoe1xuICAgICAgICBjbG91ZEFjY291bnRJZDogY2xvdWRBY2NvdW50LmlkLFxuICAgICAgICBrZXlWYXVsdE5hbWUsXG4gICAgICAgIHJ1bm5lckFwcENyZWRlbnRpYWxzLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgIC8vIENsZWFudXAgcmVzb3VyY2UgZ3JvdXAgaWYgaW5pdGlhbGl6YXRpb24gZmFpbHNcbiAgICAgIGF3YWl0IHJlc291cmNlTWFuYWdlbWVudENsaWVudC5yZXNvdXJjZUdyb3Vwcy5iZWdpbkRlbGV0ZUFuZFdhaXQoXG4gICAgICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgXCJEZWxldGVkIHJlc291cmNlIGdyb3VwIHtyZXNvdXJjZUdyb3VwTmFtZX0gaW4gc3Vic2NyaXB0aW9uIHtzdWJzY3JpcHRpb25JZH0gZHVlIHRvIGluaXRpYWxpemF0aW9uIGZhaWx1cmVcIixcbiAgICAgICAgeyByZXNvdXJjZUdyb3VwTmFtZSwgc3Vic2NyaXB0aW9uSWQ6IGNsb3VkQWNjb3VudC5pZCB9LFxuICAgICAgKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBpbml0aWFsaXplIGNsb3VkIGFjY291bnRcIiwgeyBjYXVzZSB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpc0luaXRpYWxpemVkKFxuICAgIGNsb3VkQWNjb3VudElkOiBDbG91ZEFjY291bnRbXCJpZFwiXSxcbiAgICB7IG5hbWUsIHByZWZpeCB9OiBFbnZpcm9ubWVudElkLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBhbGxMb2NhdGlvbnMgPSBPYmplY3QudmFsdWVzKGxvY2F0aW9uU2hvcnQpLmpvaW4oXCJ8XCIpO1xuICAgIGNvbnN0IHNob3J0RW52ID0gZW52aXJvbm1lbnRTaG9ydFtuYW1lXTtcblxuICAgIGNvbnN0IGlkZW50aXR5UmVzb3VyY2VOYW1lID0gYCR7cHJlZml4fS0ke3Nob3J0RW52fS0oJHthbGxMb2NhdGlvbnN9KS1ib290c3RyYXAtaWQtKDBbMS05XXxbMS05XVxcXFxkKWA7XG4gICAgY29uc3QgaWRlbnRpdHlRdWVyeSA9IGByZXNvdXJjZXNcbiAgICAgICAgICAgICB8IHdoZXJlIHR5cGUgPT0gJ21pY3Jvc29mdC5tYW5hZ2VkaWRlbnRpdHkvdXNlcmFzc2lnbmVkaWRlbnRpdGllcydcbiAgICAgICAgICAgICB8IHdoZXJlIG5hbWUgbWF0Y2hlcyByZWdleCBAJyR7aWRlbnRpdHlSZXNvdXJjZU5hbWV9J1xuICAgICAgICAgICAgYDtcblxuICAgIGNvbnN0IGtleVZhdWx0UmVzb3VyY2VOYW1lID0gYCR7cHJlZml4fS0ke3Nob3J0RW52fS0oJHthbGxMb2NhdGlvbnN9KS1jb21tb24ta3YtKDBbMS05XXxbMS05XVxcXFxkKWA7XG4gICAgY29uc3Qga2V5VmF1bHRRdWVyeSA9IGByZXNvdXJjZXNcbiAgICAgICAgICAgICB8IHdoZXJlIHR5cGUgPT0gJ21pY3Jvc29mdC5rZXl2YXVsdC92YXVsdHMnXG4gICAgICAgICAgICAgfCB3aGVyZSBuYW1lIG1hdGNoZXMgcmVnZXggQCcke2tleVZhdWx0UmVzb3VyY2VOYW1lfSdcbiAgICAgICAgICAgIGA7XG5cbiAgICBjb25zdCBbaWRlbnRpdHlSZXN1bHQsIGtleVZhdWx0UmVzdWx0LCBhcmVQcm92aWRlcnNSZWdpc3RlcmVkXSA9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHRoaXMuI3Jlc291cmNlR3JhcGhDbGllbnQucmVzb3VyY2VzKHtcbiAgICAgICAgICBxdWVyeTogaWRlbnRpdHlRdWVyeSxcbiAgICAgICAgICBzdWJzY3JpcHRpb25zOiBbY2xvdWRBY2NvdW50SWRdLFxuICAgICAgICB9KSxcbiAgICAgICAgdGhpcy4jcmVzb3VyY2VHcmFwaENsaWVudC5yZXNvdXJjZXMoe1xuICAgICAgICAgIHF1ZXJ5OiBrZXlWYXVsdFF1ZXJ5LFxuICAgICAgICAgIHN1YnNjcmlwdGlvbnM6IFtjbG91ZEFjY291bnRJZF0sXG4gICAgICAgIH0pLFxuICAgICAgICB0aGlzLiNhcmVQcm92aWRlcnNSZWdpc3RlcmVkKGNsb3VkQWNjb3VudElkKSxcbiAgICAgIF0pO1xuXG4gICAgY29uc3QgaW5pdGlhbGl6ZWQgPVxuICAgICAgaWRlbnRpdHlSZXN1bHQudG90YWxSZWNvcmRzID4gMCAmJlxuICAgICAga2V5VmF1bHRSZXN1bHQudG90YWxSZWNvcmRzID4gMCAmJlxuICAgICAgYXJlUHJvdmlkZXJzUmVnaXN0ZXJlZDtcblxuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJnZW5cIiwgXCJlbnZcIl0pO1xuXG4gICAgbG9nZ2VyLmRlYnVnKFwic3Vic2NyaXB0aW9uIHtzdWJzY3JpcHRpb25JZH0gaW5pdGlhbGl6ZWQ6IHtpbml0aWFsaXplZH1cIiwge1xuICAgICAgaW5pdGlhbGl6ZWQsXG4gICAgICBzdWJzY3JpcHRpb25JZDogY2xvdWRBY2NvdW50SWQsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBhc3luYyBwcm92aXNpb25UZXJyYWZvcm1CYWNrZW5kKFxuICAgIGNsb3VkQWNjb3VudDogQ2xvdWRBY2NvdW50LFxuICAgIHsgbmFtZSwgcHJlZml4IH06IEVudmlyb25tZW50SWQsXG4gICAgdGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9LFxuICApOiBQcm9taXNlPFRlcnJhZm9ybUJhY2tlbmQ+IHtcbiAgICBhc3NlcnQuZXF1YWwoY2xvdWRBY2NvdW50LmNzcCwgXCJhenVyZVwiLCBcIkNsb3VkIGFjY291bnQgbXVzdCBiZSBBenVyZVwiKTtcbiAgICBhc3NlcnQub2soXG4gICAgICBpc0F6dXJlTG9jYXRpb24oY2xvdWRBY2NvdW50LmRlZmF1bHRMb2NhdGlvbiksXG4gICAgICBcIlRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBjbG91ZCBhY2NvdW50IGlzIG5vdCBhIHZhbGlkIEF6dXJlIGxvY2F0aW9uXCIsXG4gICAgKTtcblxuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJnZW5cIiwgXCJlbnZcIl0pO1xuXG4gICAgY29uc3QgcmVzb3VyY2VNYW5hZ2VtZW50Q2xpZW50ID0gbmV3IFJlc291cmNlTWFuYWdlbWVudENsaWVudChcbiAgICAgIHRoaXMuI2NyZWRlbnRpYWwsXG4gICAgICBjbG91ZEFjY291bnQuaWQsXG4gICAgKTtcblxuICAgIGNvbnN0IHNob3J0ID0ge1xuICAgICAgZW52OiBlbnZpcm9ubWVudFNob3J0W25hbWVdLFxuICAgICAgbG9jYXRpb246IGxvY2F0aW9uU2hvcnRbY2xvdWRBY2NvdW50LmRlZmF1bHRMb2NhdGlvbl0sXG4gICAgfTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7XG4gICAgICBsb2NhdGlvbjogY2xvdWRBY2NvdW50LmRlZmF1bHRMb2NhdGlvbixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgRW52aXJvbm1lbnQ6IG5hbWUsXG4gICAgICAgIC4uLnRhZ3MsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZXNvdXJjZUdyb3VwTmFtZSA9IGAke3ByZWZpeH0tJHtzaG9ydC5lbnZ9LSR7c2hvcnQubG9jYXRpb259LXRmc3RhdGUtcmctMDFgO1xuXG4gICAgYXdhaXQgcmVzb3VyY2VNYW5hZ2VtZW50Q2xpZW50LnJlc291cmNlR3JvdXBzLmNyZWF0ZU9yVXBkYXRlKFxuICAgICAgcmVzb3VyY2VHcm91cE5hbWUsXG4gICAgICBwYXJhbWV0ZXJzLFxuICAgICk7XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBcIkNyZWF0ZWQgcmVzb3VyY2UgZ3JvdXAge3Jlc291cmNlR3JvdXBOYW1lfSBpbiBzdWJzY3JpcHRpb24ge3N1YnNjcmlwdGlvbklkfVwiLFxuICAgICAgeyByZXNvdXJjZUdyb3VwTmFtZSwgc3Vic2NyaXB0aW9uSWQ6IGNsb3VkQWNjb3VudC5pZCB9LFxuICAgICk7XG5cbiAgICBjb25zdCBzdG9yYWdlTWFuYWdlbWVudENsaWVudCA9IG5ldyBTdG9yYWdlTWFuYWdlbWVudENsaWVudChcbiAgICAgIHRoaXMuI2NyZWRlbnRpYWwsXG4gICAgICBjbG91ZEFjY291bnQuaWQsXG4gICAgKTtcblxuICAgIGNvbnN0IHN0b3JhZ2VBY2NvdW50ID1cbiAgICAgIGF3YWl0IHN0b3JhZ2VNYW5hZ2VtZW50Q2xpZW50LnN0b3JhZ2VBY2NvdW50cy5iZWdpbkNyZWF0ZUFuZFdhaXQoXG4gICAgICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgICBgJHtwcmVmaXh9JHtzaG9ydC5lbnZ9JHtzaG9ydC5sb2NhdGlvbn10ZnN0YXRlc3QwMWAsXG4gICAgICAgIHtcbiAgICAgICAgICBraW5kOiBcIlN0b3JhZ2VWMlwiLFxuICAgICAgICAgIHNrdToge1xuICAgICAgICAgICAgbmFtZTogXCJTdGFuZGFyZF9MUlNcIixcbiAgICAgICAgICAgIHRpZXI6IFwiU3RhbmRhcmRcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLnBhcmFtZXRlcnMsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgc3RvcmFnZUFjY291bnQucHJpbWFyeUVuZHBvaW50cz8uYmxvYixcbiAgICAgIFwiU3RvcmFnZSBhY2NvdW50IGJsb2IgZW5kcG9pbnQgaXMgdW5kZWZpbmVkXCIsXG4gICAgKTtcblxuICAgIGFzc2VydC5vayhzdG9yYWdlQWNjb3VudC5uYW1lLCBcIlN0b3JhZ2UgYWNjb3VudCBuYW1lIGlzIHVuZGVmaW5lZFwiKTtcblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIFwiQ3JlYXRlZCBzdG9yYWdlIGFjY291bnQge3N0b3JhZ2VBY2NvdW50TmFtZX0gaW4gc3Vic2NyaXB0aW9uIHtzdWJzY3JpcHRpb25JZH1cIixcbiAgICAgIHtcbiAgICAgICAgc3RvcmFnZUFjY291bnROYW1lOiBzdG9yYWdlQWNjb3VudC5uYW1lLFxuICAgICAgICBzdWJzY3JpcHRpb25JZDogY2xvdWRBY2NvdW50LmlkLFxuICAgICAgfSxcbiAgICApO1xuICAgIGNvbnN0IGJsb2JTZXJ2aWNlQ2xpZW50ID0gbmV3IEJsb2JTZXJ2aWNlQ2xpZW50KFxuICAgICAgc3RvcmFnZUFjY291bnQucHJpbWFyeUVuZHBvaW50cz8uYmxvYixcbiAgICAgIHRoaXMuI2NyZWRlbnRpYWwsXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbnRhaW5lckNsaWVudCA9XG4gICAgICBibG9iU2VydmljZUNsaWVudC5nZXRDb250YWluZXJDbGllbnQoXCJ0ZXJyYWZvcm0tc3RhdGVcIik7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29udGFpbmVyQ2xpZW50LmNyZWF0ZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIENsZWFudXAgcmVzb3VyY2UgZ3JvdXAgaWYgYmxvYiBjb250YWluZXIgY3JlYXRpb24gZmFpbHNcbiAgICAgIC8vIHJlc291cmNlIGdyb3VwIGRlbGV0aW9uIGFsc28gZGVsZXRlcyBhbGwgY29udGFpbmVkIHJlc291cmNlc1xuICAgICAgYXdhaXQgcmVzb3VyY2VNYW5hZ2VtZW50Q2xpZW50LnJlc291cmNlR3JvdXBzLmJlZ2luRGVsZXRlQW5kV2FpdChcbiAgICAgICAgcmVzb3VyY2VHcm91cE5hbWUsXG4gICAgICApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIHRoZSBibG9iIGNvbnRhaW5lcmAsIHtcbiAgICAgICAgY2F1c2U6IGUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVycmFmb3JtQmFja2VuZFNjaGVtYS5wYXJzZSh7XG4gICAgICByZXNvdXJjZUdyb3VwTmFtZSxcbiAgICAgIHN0b3JhZ2VBY2NvdW50TmFtZTogc3RvcmFnZUFjY291bnQubmFtZSxcbiAgICAgIHN1YnNjcmlwdGlvbklkOiBjbG91ZEFjY291bnQuaWQsXG4gICAgICB0eXBlOiBcImF6dXJlcm1cIixcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jICNhcmVQcm92aWRlcnNSZWdpc3RlcmVkKHN1YnNjcmlwdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgUmVzb3VyY2VNYW5hZ2VtZW50Q2xpZW50KFxuICAgICAgdGhpcy4jY3JlZGVudGlhbCxcbiAgICAgIHN1YnNjcmlwdGlvbklkLFxuICAgICk7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdGhpcy4jcmVxdWlyZWRSZXNvdXJjZVByb3ZpZGVycy5tYXAoYXN5bmMgKG5hbWVzcGFjZSkgPT4ge1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IGNsaWVudC5wcm92aWRlcnMuZ2V0KG5hbWVzcGFjZSk7XG4gICAgICAgIHJldHVybiBwcm92aWRlci5yZWdpc3RyYXRpb25TdGF0ZSA9PT0gXCJSZWdpc3RlcmVkXCI7XG4gICAgICB9KSxcbiAgICApO1xuICAgIHJldHVybiByZXN1bHRzLmV2ZXJ5KEJvb2xlYW4pO1xuICB9XG5cbiAgYXN5bmMgI2Fzc2lnbkJvb3RzdHJhcHBlclJvbGVzKHtcbiAgICBhdXRob3JpemF0aW9uTWFuYWdlbWVudENsaWVudCxcbiAgICBjbG91ZEFjY291bnRJZCxcbiAgICBpZGVudGl0eSxcbiAgICByb2xlRGVmaW5pdGlvbklkcyxcbiAgICBzY29wZSxcbiAgfToge1xuICAgIGF1dGhvcml6YXRpb25NYW5hZ2VtZW50Q2xpZW50OiBBdXRob3JpemF0aW9uTWFuYWdlbWVudENsaWVudDtcbiAgICBjbG91ZEFjY291bnRJZDogc3RyaW5nO1xuICAgIGlkZW50aXR5OiBCb290c3RyYXBwZXJJZGVudGl0eTtcbiAgICByb2xlRGVmaW5pdGlvbklkczogcmVhZG9ubHkgc3RyaW5nW107XG4gICAgc2NvcGU6IHN0cmluZztcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJnZW5cIiwgXCJlbnZcIl0pO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICByb2xlRGVmaW5pdGlvbklkcy5tYXAoKHJvbGVEZWZpbml0aW9uSWQpID0+XG4gICAgICAgIGF1dGhvcml6YXRpb25NYW5hZ2VtZW50Q2xpZW50LnJvbGVBc3NpZ25tZW50cy5jcmVhdGUoXG4gICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgdGhpcy4jY3JlYXRlUm9sZUFzc2lnbm1lbnROYW1lKFxuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBpZGVudGl0eS5wcmluY2lwYWxJZCxcbiAgICAgICAgICAgIHJvbGVEZWZpbml0aW9uSWQsXG4gICAgICAgICAgKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcmluY2lwYWxJZDogaWRlbnRpdHkucHJpbmNpcGFsSWQsXG4gICAgICAgICAgICBwcmluY2lwYWxUeXBlOiBcIlNlcnZpY2VQcmluY2lwYWxcIixcbiAgICAgICAgICAgIHJvbGVEZWZpbml0aW9uSWQ6IHRoaXMuI2NyZWF0ZVJvbGVEZWZpbml0aW9uUmVzb3VyY2VJZChcbiAgICAgICAgICAgICAgY2xvdWRBY2NvdW50SWQsXG4gICAgICAgICAgICAgIHJvbGVEZWZpbml0aW9uSWQsXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICApLFxuICAgICk7XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBcIkFzc2lnbmVkIGJvb3RzdHJhcCByb2xlcyB0byBpZGVudGl0eSB7aWRlbnRpdHlOYW1lfSBpbiBzdWJzY3JpcHRpb24ge3N1YnNjcmlwdGlvbklkfVwiLFxuICAgICAgeyBpZGVudGl0eU5hbWU6IGlkZW50aXR5Lm5hbWUsIHN1YnNjcmlwdGlvbklkOiBjbG91ZEFjY291bnRJZCB9LFxuICAgICk7XG4gIH1cblxuICBhc3luYyAjY29uZmlndXJlQm9vdHN0cmFwcGVyR2l0SHViRW52aXJvbm1lbnRzKHtcbiAgICBjZElkZW50aXR5Q2xpZW50SWQsXG4gICAgY2RJZGVudGl0eU5hbWUsXG4gICAgY2lJZGVudGl0eUNsaWVudElkLFxuICAgIGNpSWRlbnRpdHlOYW1lLFxuICAgIGNsb3VkQWNjb3VudElkLFxuICAgIGdpdGh1YixcbiAgICBnaXRIdWJTZXJ2aWNlLFxuICAgIG1zaUNsaWVudCxcbiAgICBuYW1lLFxuICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgIHJ1bm5lckFwcENyZWRlbnRpYWxzLFxuICAgIHRlbmFudElkLFxuICB9OiB7XG4gICAgY2RJZGVudGl0eUNsaWVudElkOiBzdHJpbmc7XG4gICAgY2RJZGVudGl0eU5hbWU6IHN0cmluZztcbiAgICBjaUlkZW50aXR5Q2xpZW50SWQ6IHN0cmluZztcbiAgICBjaUlkZW50aXR5TmFtZTogc3RyaW5nO1xuICAgIGNsb3VkQWNjb3VudElkOiBzdHJpbmc7XG4gICAgZ2l0aHViOiBHaXRIdWJSZXBvO1xuICAgIGdpdEh1YlNlcnZpY2U6IEdpdEh1YlNlcnZpY2U7XG4gICAgbXNpQ2xpZW50OiBNYW5hZ2VkU2VydmljZUlkZW50aXR5Q2xpZW50O1xuICAgIG5hbWU6IEVudmlyb25tZW50SWRbXCJuYW1lXCJdO1xuICAgIHJlc291cmNlR3JvdXBOYW1lOiBzdHJpbmc7XG4gICAgcnVubmVyQXBwQ3JlZGVudGlhbHM6IEdpdEh1YkFwcENyZWRlbnRpYWxzO1xuICAgIHRlbmFudElkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wiZ2VuXCIsIFwiZW52XCJdKTtcbiAgICBjb25zdCBjZEVudmlyb25tZW50TmFtZSA9IGBib290c3RyYXBwZXItJHtuYW1lfS1jZGA7XG4gICAgY29uc3QgY2lFbnZpcm9ubWVudE5hbWUgPSBgYm9vdHN0cmFwcGVyLSR7bmFtZX0tY2lgO1xuICAgIGNvbnN0IGVudmlyb25tZW50SWRlbnRpdGllcyA9IFtcbiAgICAgIHtcbiAgICAgICAgZW52aXJvbm1lbnROYW1lOiBjZEVudmlyb25tZW50TmFtZSxcbiAgICAgICAgaWRlbnRpdHlDbGllbnRJZDogY2RJZGVudGl0eUNsaWVudElkLFxuICAgICAgICBpZGVudGl0eU5hbWU6IGNkSWRlbnRpdHlOYW1lLFxuICAgICAgICBydW5uZXJBcHBDcmVkZW50aWFscyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGVudmlyb25tZW50TmFtZTogY2lFbnZpcm9ubWVudE5hbWUsXG4gICAgICAgIGlkZW50aXR5Q2xpZW50SWQ6IGNpSWRlbnRpdHlDbGllbnRJZCxcbiAgICAgICAgaWRlbnRpdHlOYW1lOiBjaUlkZW50aXR5TmFtZSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIC8vIEluY2x1ZGUgYSByZXBvc2l0b3J5LWRlcml2ZWQgc3VmZml4IHNvIGRpZmZlcmVudCByZXBvc2l0b3JpZXMgY2FuIHNoYXJlXG4gICAgLy8gdGhlIHNhbWUgYm9vdHN0cmFwIGlkZW50aXR5IHdpdGhvdXQgb3ZlcndyaXRpbmcgZWFjaCBvdGhlcidzIE9JREMgdHJ1c3QuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBlbnZpcm9ubWVudElkZW50aXRpZXMubWFwKCh7IGVudmlyb25tZW50TmFtZSwgaWRlbnRpdHlOYW1lIH0pID0+XG4gICAgICAgIG1zaUNsaWVudC5mZWRlcmF0ZWRJZGVudGl0eUNyZWRlbnRpYWxzLmNyZWF0ZU9yVXBkYXRlKFxuICAgICAgICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgICAgIGlkZW50aXR5TmFtZSxcbiAgICAgICAgICB0aGlzLiNjcmVhdGVGZWRlcmF0ZWRDcmVkZW50aWFsTmFtZSh7XG4gICAgICAgICAgICBnaXRodWIsXG4gICAgICAgICAgICBnaXRodWJFbnZpcm9ubWVudE5hbWU6IGVudmlyb25tZW50TmFtZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhdWRpZW5jZXM6IFtcImFwaTovL0F6dXJlQURUb2tlbkV4Y2hhbmdlXCJdLFxuICAgICAgICAgICAgaXNzdWVyOiBcImh0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb21cIixcbiAgICAgICAgICAgIHN1YmplY3Q6IGByZXBvOiR7Z2l0aHViLm93bmVyfS8ke2dpdGh1Yi5yZXBvfTplbnZpcm9ubWVudDoke2Vudmlyb25tZW50TmFtZX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICApLFxuICAgICk7XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBcIkNvbmZpZ3VyZWQgYm9vdHN0cmFwcGVyIGZlZGVyYXRlZCBpZGVudGl0eSBjcmVkZW50aWFscyBpbiBzdWJzY3JpcHRpb24ge3N1YnNjcmlwdGlvbklkfVwiLFxuICAgICAgeyBzdWJzY3JpcHRpb25JZDogY2xvdWRBY2NvdW50SWQgfSxcbiAgICApO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBlbnZpcm9ubWVudElkZW50aXRpZXMubWFwKFxuICAgICAgICAoeyBlbnZpcm9ubWVudE5hbWUsIGlkZW50aXR5Q2xpZW50SWQsIHJ1bm5lckFwcENyZWRlbnRpYWxzIH0pID0+XG4gICAgICAgICAgdGhpcy4jc3RvcmVCb290c3RyYXBwZXJFbnZpcm9ubWVudFNlY3JldHMoe1xuICAgICAgICAgICAgY2xvdWRBY2NvdW50SWQsXG4gICAgICAgICAgICBnaXRodWIsXG4gICAgICAgICAgICBnaXRodWJFbnZpcm9ubWVudE5hbWU6IGVudmlyb25tZW50TmFtZSxcbiAgICAgICAgICAgIGdpdEh1YlNlcnZpY2UsXG4gICAgICAgICAgICBpZGVudGl0eUNsaWVudElkLFxuICAgICAgICAgICAgcnVubmVyQXBwQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICB9KSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jICNjcmVhdGVCb290c3RyYXBwZXJJZGVudGl0eSh7XG4gICAgY2xvdWRBY2NvdW50SWQsXG4gICAgaWRlbnRpdHlOYW1lLFxuICAgIG1zaUNsaWVudCxcbiAgICBwYXJhbWV0ZXJzLFxuICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICB9OiB7XG4gICAgY2xvdWRBY2NvdW50SWQ6IHN0cmluZztcbiAgICBpZGVudGl0eU5hbWU6IEJvb3RzdHJhcHBlcklkZW50aXR5TmFtZTtcbiAgICBtc2lDbGllbnQ6IE1hbmFnZWRTZXJ2aWNlSWRlbnRpdHlDbGllbnQ7XG4gICAgcGFyYW1ldGVyczogQm9vdHN0cmFwcGVySWRlbnRpdHlQYXJhbWV0ZXJzO1xuICAgIHJlc291cmNlR3JvdXBOYW1lOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPEJvb3RzdHJhcHBlcklkZW50aXR5PiB7XG4gICAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcImdlblwiLCBcImVudlwiXSk7XG4gICAgY29uc3QgaWRlbnRpdHkgPSBhd2FpdCBtc2lDbGllbnQudXNlckFzc2lnbmVkSWRlbnRpdGllcy5jcmVhdGVPclVwZGF0ZShcbiAgICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgaWRlbnRpdHlOYW1lLFxuICAgICAgcGFyYW1ldGVycyxcbiAgICApO1xuXG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgaWRlbnRpdHkucHJpbmNpcGFsSWQsXG4gICAgICBcIk1hbmFnZWQgaWRlbnRpdHkgcHJpbmNpcGFsIElEIGlzIHVuZGVmaW5lZFwiLFxuICAgICk7XG4gICAgYXNzZXJ0Lm9rKGlkZW50aXR5LmNsaWVudElkLCBcIk1hbmFnZWQgaWRlbnRpdHkgY2xpZW50IElEIGlzIHVuZGVmaW5lZFwiKTtcblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIFwiQ3JlYXRlZCBpZGVudGl0eSB7aWRlbnRpdHlOYW1lfSBpbiBzdWJzY3JpcHRpb24ge3N1YnNjcmlwdGlvbklkfVwiLFxuICAgICAgeyBpZGVudGl0eU5hbWUsIHN1YnNjcmlwdGlvbklkOiBjbG91ZEFjY291bnRJZCB9LFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2xpZW50SWQ6IGlkZW50aXR5LmNsaWVudElkLFxuICAgICAgbmFtZTogaWRlbnRpdHlOYW1lLFxuICAgICAgcHJpbmNpcGFsSWQ6IGlkZW50aXR5LnByaW5jaXBhbElkLFxuICAgIH07XG4gIH1cblxuICBhc3luYyAjY3JlYXRlQ29tbW9uS2V5VmF1bHQoe1xuICAgIGNsb3VkQWNjb3VudCxcbiAgICBuYW1lLFxuICAgIHByZWZpeCxcbiAgICByZXNvdXJjZUdyb3VwTmFtZSxcbiAgICBzaG9ydEVudixcbiAgICBzaG9ydExvY2F0aW9uLFxuICAgIHRhZ3MsXG4gICAgdGVuYW50SWQsXG4gIH06IHtcbiAgICBjbG91ZEFjY291bnQ6IENsb3VkQWNjb3VudDtcbiAgICBuYW1lOiBFbnZpcm9ubWVudElkW1wibmFtZVwiXTtcbiAgICBwcmVmaXg6IHN0cmluZztcbiAgICByZXNvdXJjZUdyb3VwTmFtZTogc3RyaW5nO1xuICAgIHNob3J0RW52OiBzdHJpbmc7XG4gICAgc2hvcnRMb2NhdGlvbjogc3RyaW5nO1xuICAgIHRhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgdGVuYW50SWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcImdlblwiLCBcImVudlwiXSk7XG5cbiAgICBjb25zdCBrdkNsaWVudCA9IG5ldyBLZXlWYXVsdE1hbmFnZW1lbnRDbGllbnQoXG4gICAgICB0aGlzLiNjcmVkZW50aWFsLFxuICAgICAgY2xvdWRBY2NvdW50LmlkLFxuICAgICk7XG5cbiAgICBjb25zdCBrZXlWYXVsdE5hbWUgPSBgJHtwcmVmaXh9LSR7c2hvcnRFbnZ9LSR7c2hvcnRMb2NhdGlvbn0tY29tbW9uLWt2LTAxYDtcbiAgICBjb25zdCBzZWNyZXRzUHJvdGVjdGlvbkVuYWJsZWQgPSBzaG9ydEVudiA9PT0gXCJwXCI7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBrdkNsaWVudC52YXVsdHMuY2hlY2tOYW1lQXZhaWxhYmlsaXR5KHtcbiAgICAgIG5hbWU6IGtleVZhdWx0TmFtZSxcbiAgICAgIHR5cGU6IFwiTWljcm9zb2Z0LktleVZhdWx0L3ZhdWx0c1wiLFxuICAgIH0pO1xuXG4gICAgYXdhaXQga3ZDbGllbnQudmF1bHRzLmJlZ2luQ3JlYXRlT3JVcGRhdGVBbmRXYWl0KFxuICAgICAgcmVzb3VyY2VHcm91cE5hbWUsXG4gICAgICBrZXlWYXVsdE5hbWUsXG4gICAgICB7XG4gICAgICAgIGxvY2F0aW9uOiBjbG91ZEFjY291bnQuZGVmYXVsdExvY2F0aW9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgY3JlYXRlTW9kZTogcmVzdWx0Lm5hbWVBdmFpbGFibGUgPyBcImRlZmF1bHRcIiA6IFwicmVjb3ZlclwiLFxuICAgICAgICAgIGVuYWJsZWRGb3JEaXNrRW5jcnlwdGlvbjogdHJ1ZSxcbiAgICAgICAgICBlbmFibGVQdXJnZVByb3RlY3Rpb246IHNlY3JldHNQcm90ZWN0aW9uRW5hYmxlZCA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgZW5hYmxlUmJhY0F1dGhvcml6YXRpb246IHRydWUsXG4gICAgICAgICAgc2t1OiB7XG4gICAgICAgICAgICBmYW1pbHk6IFwiQVwiLFxuICAgICAgICAgICAgbmFtZTogXCJzdGFuZGFyZFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc29mdERlbGV0ZVJldGVudGlvbkluRGF5czogc2VjcmV0c1Byb3RlY3Rpb25FbmFibGVkID8gMTQgOiA3LFxuICAgICAgICAgIHRlbmFudElkLFxuICAgICAgICB9LFxuICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgRW52aXJvbm1lbnQ6IG5hbWUsXG4gICAgICAgICAgLi4udGFncyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIFwiQ3JlYXRlZCBrZXkgdmF1bHQge2tleVZhdWx0TmFtZX0gaW4gc3Vic2NyaXB0aW9uIHtzdWJzY3JpcHRpb25JZH1cIixcbiAgICAgIHsga2V5VmF1bHROYW1lLCBzdWJzY3JpcHRpb25JZDogY2xvdWRBY2NvdW50LmlkIH0sXG4gICAgKTtcblxuICAgIHJldHVybiBrZXlWYXVsdE5hbWU7XG4gIH1cblxuICAjY3JlYXRlRmVkZXJhdGVkQ3JlZGVudGlhbE5hbWUoe1xuICAgIGdpdGh1YixcbiAgICBnaXRodWJFbnZpcm9ubWVudE5hbWUsXG4gIH06IHtcbiAgICBnaXRodWI6IEdpdEh1YlJlcG87XG4gICAgZ2l0aHViRW52aXJvbm1lbnROYW1lOiBzdHJpbmc7XG4gIH0pOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlcG9OYW1lID0gZ2l0aHViLnJlcG8ucmVwbGFjZUFsbCgvW15hLXpBLVowLTktXS9nLCBcIi1cIik7XG5cbiAgICByZXR1cm4gYCR7cmVwb05hbWV9LSR7Z2l0aHViRW52aXJvbm1lbnROYW1lfWA7XG4gIH1cblxuICAjY3JlYXRlUm9sZUFzc2lnbm1lbnROYW1lKFxuICAgIHNjb3BlOiBzdHJpbmcsXG4gICAgcHJpbmNpcGFsSWQ6IHN0cmluZyxcbiAgICByb2xlRGVmaW5pdGlvbklkOiBzdHJpbmcsXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIilcbiAgICAgIC51cGRhdGUoYCR7c2NvcGV9OiR7cHJpbmNpcGFsSWR9OiR7cm9sZURlZmluaXRpb25JZH1gKVxuICAgICAgLmRpZ2VzdChcImhleFwiKTtcblxuICAgIHJldHVybiBgJHtoYXNoLnNsaWNlKDAsIDgpfS0ke2hhc2guc2xpY2UoOCwgMTIpfS0ke2hhc2guc2xpY2UoXG4gICAgICAxMixcbiAgICAgIDE2LFxuICAgICl9LSR7aGFzaC5zbGljZSgxNiwgMjApfS0ke2hhc2guc2xpY2UoMjAsIDMyKX1gO1xuICB9XG5cbiAgI2NyZWF0ZVJvbGVEZWZpbml0aW9uUmVzb3VyY2VJZChcbiAgICBzdWJzY3JpcHRpb25JZDogc3RyaW5nLFxuICAgIHJvbGVEZWZpbml0aW9uSWQ6IHN0cmluZyxcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYC9zdWJzY3JpcHRpb25zLyR7c3Vic2NyaXB0aW9uSWR9L3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9yb2xlRGVmaW5pdGlvbnMvJHtyb2xlRGVmaW5pdGlvbklkfWA7XG4gIH1cblxuICBhc3luYyAjZ2V0Q3VycmVudFByaW5jaXBhbElkcygpOiBQcm9taXNlPFNldDxzdHJpbmc+PiB7XG4gICAgLy8gQ3JlYXRlIEdyYXBoIGNsaWVudCB3aXRoIGN1c3RvbSBhdXRoIHByb3ZpZGVyIHRoYXQgZmV0Y2hlcyBmcmVzaCB0b2tlbnNcbiAgICBjb25zdCBncmFwaENsaWVudCA9IENsaWVudC5pbml0KHtcbiAgICAgIGF1dGhQcm92aWRlcjogYXN5bmMgKGRvbmUpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB0b2tlblJlc3BvbnNlID0gYXdhaXQgdGhpcy4jY3JlZGVudGlhbC5nZXRUb2tlbihcbiAgICAgICAgICAgIFwiaHR0cHM6Ly9ncmFwaC5taWNyb3NvZnQuY29tLy5kZWZhdWx0XCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIXRva2VuUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGRvbmUoXG4gICAgICAgICAgICAgIG5ldyBFcnJvcihcIkZhaWxlZCB0byBhY3F1aXJlIHRva2VuIGZvciBNaWNyb3NvZnQgR3JhcGhcIiksXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkb25lKG51bGwsIHRva2VuUmVzcG9uc2UudG9rZW4pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGRvbmUoZXJyb3IgYXMgRXJyb3IsIG51bGwpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gR2V0IGN1cnJlbnQgdXNlcidzIGluZm9cbiAgICBjb25zdCBtZVJlc3BvbnNlID0gYXdhaXQgZ3JhcGhDbGllbnQuYXBpKFwiL21lXCIpLmdldCgpO1xuICAgIGNvbnN0IG1lID0gZ3JhcGhVc2VyUmVzcG9uc2VTY2hlbWEucGFyc2UobWVSZXNwb25zZSk7XG4gICAgY29uc3QgdXNlck9iamVjdElkID0gbWUuaWQ7XG5cbiAgICAvLyBHZXQgYWxsIGdyb3VwIG1lbWJlcnNoaXBzICh0cmFuc2l0aXZlIC0gaW5jbHVkZXMgbmVzdGVkIGdyb3VwcylcbiAgICBjb25zdCBncm91cElkczogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgbmV4dExpbms6IHN0cmluZyB8IHVuZGVmaW5lZCA9IFwiL21lL3RyYW5zaXRpdmVNZW1iZXJPZj8kc2VsZWN0PWlkXCI7XG5cbiAgICB3aGlsZSAobmV4dExpbmspIHtcbiAgICAgIGNvbnN0IHJhd1Jlc3BvbnNlID0gYXdhaXQgZ3JhcGhDbGllbnQuYXBpKG5leHRMaW5rKS5nZXQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gZ3JhcGhHcm91cE1lbWJlcnNoaXBSZXNwb25zZVNjaGVtYS5wYXJzZShyYXdSZXNwb25zZSk7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcmVzcG9uc2UudmFsdWUpIHtcbiAgICAgICAgZ3JvdXBJZHMucHVzaChpdGVtLmlkKTtcbiAgICAgIH1cbiAgICAgIG5leHRMaW5rID0gcmVzcG9uc2VbXCJAb2RhdGEubmV4dExpbmtcIl07XG4gICAgfVxuXG4gICAgLy8gQWxsIHByaW5jaXBhbCBJRHMgdG8gY2hlY2sgKHVzZXIgKyBhbGwgZ3JvdXBzKVxuICAgIGNvbnN0IGFsbFByaW5jaXBhbElkcyA9IG5ldyBTZXQoW3VzZXJPYmplY3RJZCwgLi4uZ3JvdXBJZHNdKTtcbiAgICByZXR1cm4gYWxsUHJpbmNpcGFsSWRzO1xuICB9XG5cbiAgYXN5bmMgI3JlZ2lzdGVyUHJvdmlkZXJzKHN1YnNjcmlwdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wiZHgtY2xpXCIsIFwicmVnaXN0ZXItcHJvdmlkZXJzXCJdKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgUmVzb3VyY2VNYW5hZ2VtZW50Q2xpZW50KFxuICAgICAgdGhpcy4jY3JlZGVudGlhbCxcbiAgICAgIHN1YnNjcmlwdGlvbklkLFxuICAgICk7XG5cbiAgICBsb2dnZXIuaW5mbyhcbiAgICAgIFwiUmVnaXN0ZXJpbmcge2NvdW50fSByZXNvdXJjZSBwcm92aWRlcnMgb24gc3Vic2NyaXB0aW9uIHtzdWJzY3JpcHRpb25JZH1cIixcbiAgICAgIHsgY291bnQ6IHRoaXMuI3JlcXVpcmVkUmVzb3VyY2VQcm92aWRlcnMubGVuZ3RoLCBzdWJzY3JpcHRpb25JZCB9LFxuICAgICk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRoaXMuI3JlcXVpcmVkUmVzb3VyY2VQcm92aWRlcnMubWFwKGFzeW5jIChuYW1lc3BhY2UpID0+IHtcbiAgICAgICAgYXdhaXQgY2xpZW50LnByb3ZpZGVycy5yZWdpc3RlcihuYW1lc3BhY2UpO1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJSZWdpc3RlcmVkIHByb3ZpZGVyIHtuYW1lc3BhY2V9XCIsIHsgbmFtZXNwYWNlIH0pO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgXCJBbGwgcmVzb3VyY2UgcHJvdmlkZXJzIHJlZ2lzdGVyZWQgb24gc3Vic2NyaXB0aW9uIHtzdWJzY3JpcHRpb25JZH1cIixcbiAgICAgIHsgc3Vic2NyaXB0aW9uSWQgfSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgI3N0b3JlQm9vdHN0cmFwcGVyRW52aXJvbm1lbnRTZWNyZXRzKHtcbiAgICBjbG91ZEFjY291bnRJZCxcbiAgICBnaXRodWIsXG4gICAgZ2l0aHViRW52aXJvbm1lbnROYW1lLFxuICAgIGdpdEh1YlNlcnZpY2UsXG4gICAgaWRlbnRpdHlDbGllbnRJZCxcbiAgICBydW5uZXJBcHBDcmVkZW50aWFscyxcbiAgICB0ZW5hbnRJZCxcbiAgfToge1xuICAgIGNsb3VkQWNjb3VudElkOiBzdHJpbmc7XG4gICAgZ2l0aHViOiBHaXRIdWJSZXBvO1xuICAgIGdpdGh1YkVudmlyb25tZW50TmFtZTogc3RyaW5nO1xuICAgIGdpdEh1YlNlcnZpY2U6IEdpdEh1YlNlcnZpY2U7XG4gICAgaWRlbnRpdHlDbGllbnRJZDogc3RyaW5nO1xuICAgIHJ1bm5lckFwcENyZWRlbnRpYWxzPzogR2l0SHViQXBwQ3JlZGVudGlhbHM7XG4gICAgdGVuYW50SWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJnZW5cIiwgXCJlbnZcIl0pO1xuXG4gICAgY29uc3QgY29tbW9uU2VjcmV0cyA9IFtcbiAgICAgIHsgc2VjcmV0TmFtZTogXCJBUk1fQ0xJRU5UX0lEXCIsIHNlY3JldFZhbHVlOiBpZGVudGl0eUNsaWVudElkIH0sXG4gICAgICB7IHNlY3JldE5hbWU6IFwiQVJNX1RFTkFOVF9JRFwiLCBzZWNyZXRWYWx1ZTogdGVuYW50SWQgfSxcbiAgICAgIHsgc2VjcmV0TmFtZTogXCJBUk1fU1VCU0NSSVBUSU9OX0lEXCIsIHNlY3JldFZhbHVlOiBjbG91ZEFjY291bnRJZCB9LFxuICAgIF07XG4gICAgY29uc3QgcmVsZWFzZVNlY3JldHMgPSBydW5uZXJBcHBDcmVkZW50aWFsc1xuICAgICAgPyBbXG4gICAgICAgICAgeyBzZWNyZXROYW1lOiBcIkdIX0FQUF9JRFwiLCBzZWNyZXRWYWx1ZTogcnVubmVyQXBwQ3JlZGVudGlhbHMuaWQgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWNyZXROYW1lOiBcIkdIX0FQUF9DTElFTlRfSURcIixcbiAgICAgICAgICAgIHNlY3JldFZhbHVlOiBydW5uZXJBcHBDcmVkZW50aWFscy5jbGllbnRJZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlY3JldE5hbWU6IFwiR0hfQVBQX0lOU1RBTExBVElPTl9JRFwiLFxuICAgICAgICAgICAgc2VjcmV0VmFsdWU6IHJ1bm5lckFwcENyZWRlbnRpYWxzLmluc3RhbGxhdGlvbklkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VjcmV0TmFtZTogXCJHSF9BUFBfS0VZXCIsXG4gICAgICAgICAgICBzZWNyZXRWYWx1ZTogcnVubmVyQXBwQ3JlZGVudGlhbHMua2V5LnRyaW1FbmQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdXG4gICAgICA6IFtdO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBbLi4uY29tbW9uU2VjcmV0cywgLi4ucmVsZWFzZVNlY3JldHNdLm1hcCgoeyBzZWNyZXROYW1lLCBzZWNyZXRWYWx1ZSB9KSA9PlxuICAgICAgICBnaXRIdWJTZXJ2aWNlLmNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnRTZWNyZXQoe1xuICAgICAgICAgIGVudmlyb25tZW50TmFtZTogZ2l0aHViRW52aXJvbm1lbnROYW1lLFxuICAgICAgICAgIG93bmVyOiBnaXRodWIub3duZXIsXG4gICAgICAgICAgcmVwbzogZ2l0aHViLnJlcG8sXG4gICAgICAgICAgc2VjcmV0TmFtZSxcbiAgICAgICAgICBzZWNyZXRWYWx1ZSxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICk7XG5cbiAgICBsb2dnZXIuZGVidWcoXCJTZXQgR2l0SHViIGVudmlyb25tZW50IHNlY3JldHMgZm9yIHtlbnZpcm9ubWVudE5hbWV9XCIsIHtcbiAgICAgIGVudmlyb25tZW50TmFtZTogZ2l0aHViRW52aXJvbm1lbnROYW1lLFxuICAgICAgc3Vic2NyaXB0aW9uSWQ6IGNsb3VkQWNjb3VudElkLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgI3N0b3JlUnVubmVyQXBwU2VjcmV0cyh7XG4gICAgY2xvdWRBY2NvdW50SWQsXG4gICAga2V5VmF1bHROYW1lLFxuICAgIHJ1bm5lckFwcENyZWRlbnRpYWxzLFxuICB9OiB7XG4gICAgY2xvdWRBY2NvdW50SWQ6IHN0cmluZztcbiAgICBrZXlWYXVsdE5hbWU6IHN0cmluZztcbiAgICBydW5uZXJBcHBDcmVkZW50aWFsczogR2l0SHViQXBwQ3JlZGVudGlhbHM7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wiZ2VuXCIsIFwiZW52XCJdKTtcblxuICAgIGF3YWl0IHRoaXMuI3dhaXRGb3JLZXlWYXVsdERuc1Jlc29sdXRpb24oe1xuICAgICAgY2xvdWRBY2NvdW50SWQsXG4gICAgICBrZXlWYXVsdE5hbWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzZWNyZXRDbGllbnQgPSBuZXcgU2VjcmV0Q2xpZW50KFxuICAgICAgYGh0dHBzOi8vJHtrZXlWYXVsdE5hbWV9LnZhdWx0LmF6dXJlLm5ldC9gLFxuICAgICAgdGhpcy4jY3JlZGVudGlhbCxcbiAgICApO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgc2VjcmV0Q2xpZW50LnNldFNlY3JldChcImdpdGh1Yi1ydW5uZXItYXBwLWlkXCIsIHJ1bm5lckFwcENyZWRlbnRpYWxzLmlkKSxcbiAgICAgIHNlY3JldENsaWVudC5zZXRTZWNyZXQoXG4gICAgICAgIFwiZ2l0aHViLXJ1bm5lci1hcHAtaW5zdGFsbGF0aW9uLWlkXCIsXG4gICAgICAgIHJ1bm5lckFwcENyZWRlbnRpYWxzLmluc3RhbGxhdGlvbklkLFxuICAgICAgKSxcbiAgICAgIHNlY3JldENsaWVudC5zZXRTZWNyZXQoXG4gICAgICAgIFwiZ2l0aHViLXJ1bm5lci1hcHAta2V5XCIsXG4gICAgICAgIHJ1bm5lckFwcENyZWRlbnRpYWxzLmtleS50cmltRW5kKCksIC8vIHN0cmlwIHRyYWlsaW5nIG5ld2xpbmVzIGZyb20gUEVNIGtleXNcbiAgICAgICksXG4gICAgXSk7XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBcIkNyZWF0ZWQgc2VjcmV0cyBpbiBrZXkgdmF1bHQge2tleVZhdWx0TmFtZX0gaW4gc3Vic2NyaXB0aW9uIHtzdWJzY3JpcHRpb25JZH1cIixcbiAgICAgIHsga2V5VmF1bHROYW1lLCBzdWJzY3JpcHRpb25JZDogY2xvdWRBY2NvdW50SWQgfSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgI3dhaXRGb3JLZXlWYXVsdERuc1Jlc29sdXRpb24oe1xuICAgIGNsb3VkQWNjb3VudElkLFxuICAgIGtleVZhdWx0TmFtZSxcbiAgfToge1xuICAgIGNsb3VkQWNjb3VudElkOiBDbG91ZEFjY291bnRbXCJpZFwiXTtcbiAgICBrZXlWYXVsdE5hbWU6IHN0cmluZztcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJnZW5cIiwgXCJlbnZcIl0pO1xuICAgIGNvbnN0IGhvc3RuYW1lID0gYCR7a2V5VmF1bHROYW1lfS52YXVsdC5henVyZS5uZXRgO1xuXG4gICAgLy8gQXp1cmUgY2FuIHJlcG9ydCB0aGUgdmF1bHQgYXMgY3JlYXRlZCBiZWZvcmUgaXRzIHB1YmxpYyBETlMgbmFtZSBpcyByZWFkeS5cbiAgICAvLyBXYWl0IGhlcmUgc28gd3JpdGluZyBydW5uZXIgYXBwIHNlY3JldHMgZG9lcyBub3QgZmFpbCB3aXRoIEVOT1RGT1VORC5cbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBrZXlWYXVsdERuc1JlYWR5TWF4QXR0ZW1wdHM7IGF0dGVtcHQrKykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgbG9va3VwKGhvc3RuYW1lKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFrZXlWYXVsdERuc0Vycm9yU2NoZW1hLnNhZmVQYXJzZShjYXVzZSkuc3VjY2VzcyB8fFxuICAgICAgICAgIGF0dGVtcHQgPT09IGtleVZhdWx0RG5zUmVhZHlNYXhBdHRlbXB0c1xuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgS2V5IHZhdWx0IGVuZHBvaW50ICcke2hvc3RuYW1lfScgaXMgbm90IHJlc29sdmFibGVgLFxuICAgICAgICAgICAgeyBjYXVzZSB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgXCJXYWl0aW5nIGZvciBrZXkgdmF1bHQgZW5kcG9pbnQge2hvc3RuYW1lfSB0byBiZWNvbWUgcmVzb2x2YWJsZSBpbiBzdWJzY3JpcHRpb24ge3N1YnNjcmlwdGlvbklkfVwiLFxuICAgICAgICAgIHsgaG9zdG5hbWUsIHN1YnNjcmlwdGlvbklkOiBjbG91ZEFjY291bnRJZCB9LFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBzbGVlcChrZXlWYXVsdERuc1JlYWR5UmV0cnlEZWxheU1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
640
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWQtYWNjb3VudC1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FkYXB0ZXJzL2F6dXJlL2Nsb3VkLWFjY291bnQtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRCxPQUFPLEtBQUssTUFBTSxNQUFNLG9CQUFvQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLElBQUksS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQU0zQixPQUFPLEVBR0wsbUJBQW1CLEdBQ3BCLE1BQU0sNkJBQTZCLENB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LE9BQU8sRUFBRSxDQUNuQztTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxLQUFLLENBQ1YsOEVBQThFLEVBQzlFLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsQ0FDakQsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsNkJBQTZCLENBQUMsRUFDbEMsY0FBYyxFQUNkLFlBQVksR0FJYjtRQUNDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLEdBQUcsWUFBWSxrQkFBa0IsQ0FBQztRQUVuRCw2RUFBNkU7UUFDN0Usd0VBQXdFO1FBQ3hFLEtBQUssSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLE9BQU8sSUFBSSwyQkFBMkIsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3hFLElBQUksQ0FBQztnQkFDSCxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdkIsT0FBTztZQUNULENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLElBQ0UsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTztvQkFDaEQsT0FBTyxLQUFLLDJCQUEyQixFQUN2QyxDQUFDO29CQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsdUJBQXVCLFFBQVEscUJBQXFCLEVBQ3BELEVBQUUsS0FBSyxFQUFFLENBQ1YsQ0FBQztnQkFDSixDQUFDO2dCQUVELE1BQU0sQ0FBQyxLQUFLLENBQ1YsaUdBQWlHLEVBQ2pHLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsQ0FDN0MsQ0FBQztnQkFDRixNQUFNLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBQzVDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBUb2tlbkNyZWRlbnRpYWwgfSBmcm9tIFwiQGF6dXJlL2lkZW50aXR5XCI7XG5cbmltcG9ydCB7IEF1dGhvcml6YXRpb25NYW5hZ2VtZW50Q2xpZW50IH0gZnJvbSBcIkBhenVyZS9hcm0tYXV0aG9yaXphdGlvblwiO1xuaW1wb3J0IHsgS2V5VmF1bHRNYW5hZ2VtZW50Q2xpZW50IH0gZnJvbSBcIkBhenVyZS9hcm0ta2V5dmF1bHRcIjtcbmltcG9ydCB7IE1hbmFnZWRTZXJ2aWNlSWRlbnRpdHlDbGllbnQgfSBmcm9tIFwiQGF6dXJlL2FybS1tc2lcIjtcbmltcG9ydCB7IFJlc291cmNlR3JhcGhDbGllbnQgfSBmcm9tIFwiQGF6dXJlL2FybS1yZXNvdXJjZWdyYXBoXCI7XG5pbXBvcnQgeyBSZXNvdXJjZU1hbmFnZW1lbnRDbGllbnQgfSBmcm9tIFwiQGF6dXJlL2FybS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbkNsaWVudCB9IGZyb20gXCJAYXp1cmUvYXJtLXJlc291cmNlcy1zdWJzY3JpcHRpb25zXCI7XG5pbXBvcnQgeyBTdG9yYWdlTWFuYWdlbWVudENsaWVudCB9IGZyb20gXCJAYXp1cmUvYXJtLXN0b3JhZ2VcIjtcbmltcG9ydCB7IFNlY3JldENsaWVudCB9IGZyb20gXCJAYXp1cmUva2V5dmF1bHQtc2VjcmV0c1wiO1xuaW1wb3J0IHsgQmxvYlNlcnZpY2VDbGllbnQgfSBmcm9tIFwiQGF6dXJlL3N0b3JhZ2UtYmxvYlwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IENsaWVudCB9IGZyb20gXCJAbWljcm9zb2Z0L21pY3Jvc29mdC1ncmFwaC1jbGllbnRcIjtcbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tIFwibm9kZTphc3NlcnQvc3RyaWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyBsb29rdXAgfSBmcm9tIFwibm9kZTpkbnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHNldFRpbWVvdXQgYXMgc2xlZXAgfSBmcm9tIFwibm9kZTp0aW1lcnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kL3Y0XCI7XG5cbmltcG9ydCB7XG4gIENsb3VkQWNjb3VudCxcbiAgdHlwZSBDbG91ZEFjY291bnRTZXJ2aWNlLFxufSBmcm9tIFwiLi4vLi4vZG9tYWluL2Nsb3VkLWFjY291bnQuanNcIjtcbmltcG9ydCB7XG4gIHR5cGUgRW52aXJvbm1lbnRJZCxcbiAgRW52aXJvbm1lbnRTaG9ydFZhbHVlLFxuICBnZXRFbnZpcm9ubWVudFNob3J0LFxufSBmcm9tIFwiLi4vLi4vZG9tYWluL2Vudmlyb25tZW50LmpzXCI7XG5pbXBvcnQgeyB0eXBlIEdpdEh1YlJlcG8gfSBmcm9tIFwiLi4vLi4vZG9tYWluL2dpdGh1Yi1yZXBvLmpzXCI7XG5pbXBvcnQge1xuICBHaXRIdWJBcHBDcmVkZW50aWFscyxcbiAgdHlwZSBHaXRIdWJTZXJ2aWNlLFxufSBmcm9tIFwiLi4vLi4vZG9tYWluL2dpdGh1Yi5qc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBUZXJyYWZvcm1CYWNrZW5kLFxuICB0ZXJyYWZvcm1CYWNrZW5kU2NoZW1hLFxufSBmcm9tIFwiLi4vLi4vZG9tYWluL3JlbW90ZS1iYWNrZW5kLmpzXCI7XG5pbXBvcnQge1xuICBpc0F6dXJlTG9jYXRpb24sXG4gIGxvY2F0aW9ucyxcbiAgbG9jYXRpb25TaG9ydCxcbiAgTG9jYXRpb25TaG9ydFZhbHVlLFxufSBmcm9tIFwiLi9sb2NhdGlvbnMuanNcIjtcblxuLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGVzZSBwcm9wZXJ0aWVzIGZvciBub3c7XG4vLyB0aGUgYWN0dWFsIHJlc3VsdCBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIGZ1bGwgY2xvdWQgcmVzb3VyY2Ugb2JqZWN0XG5leHBvcnQgY29uc3QgcmVzb3VyY2VHcmFwaERhdGFTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGxvY2F0aW9uOiB6LmVudW0obG9jYXRpb25zKSxcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgcmVzb3VyY2VHcm91cDogei5zdHJpbmcoKSxcbn0pO1xuXG5jb25zdCBncmFwaFVzZXJSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG59KTtcblxuY29uc3QgZ3JhcGhHcm91cE1lbWJlcnNoaXBJdGVtU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbn0pO1xuXG5jb25zdCBncmFwaEdyb3VwTWVtYmVyc2hpcFJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBcIkBvZGF0YS5uZXh0TGlua1wiOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHZhbHVlOiB6LmFycmF5KGdyYXBoR3JvdXBNZW1iZXJzaGlwSXRlbVNjaGVtYSksXG59KTtcblxuY29uc3QgYnVpbHRJblJvbGVEZWZpbml0aW9uSWRzID0ge1xuICBjb250cmlidXRvcjogXCJiMjQ5ODhhYy02MTgwLTQyYTAtYWI4OC0yMGY3MzgyZGQyNGNcIixcbiAga2V5VmF1bHRTZWNyZXRzT2ZmaWNlcjogXCJiODZhOGZlNC00NGNlLTQ5NDgtYWVlNS1lY2NiMmMxNTVjZDdcIixcbiAgb3duZXI6IFwiOGUzYWY2NTctYThmZi00NDNjLWE3NWMtMmZlOGM0YmNiNjM1XCIsXG4gIHJlYWRlcjogXCJhY2RkNzJhNy0zMzg1LTQ4ZWYtYmQ0Mi1mNjA2ZmJhODFhZTdcIixcbiAgcm9sZUJhc2VkQWNjZXNzQ29udHJvbEFkbWluaXN0cmF0b3I6IFwiZjU4MzEwZDktYTlmNi00MzlhLTllOGQtZjYyZTdiNDFhMTY4XCIsXG4gIHN0b3JhZ2VCbG9iRGF0YUNvbnRyaWJ1dG9yOiBcImJhOTJmNWI0LTJkMTEtNDUzZC1hNDAzLWU5NmIwMDI5YzlmZVwiLFxufSBhcyBjb25zdDtcblxuY29uc3QgYm9vdHN0cmFwSWRlbnRpdHlSb2xlRGVmaW5pdGlvbklkcyA9IFtcbiAgLy8gVGhlc2Ugcm9sZXMgbGV0IHRoZSBib290c3RyYXAgaWRlbnRpdHkgcnVuIHRoZSBib290c3RyYXBwZXIgbW9kdWxlIGZyb20gR2l0SHViIEFjdGlvbnMgd2l0aG91dCBleHRyYSBtYW51YWwgZ3JhbnRzLlxuICBidWlsdEluUm9sZURlZmluaXRpb25JZHMucm9sZUJhc2VkQWNjZXNzQ29udHJvbEFkbWluaXN0cmF0b3IsXG4gIGJ1aWx0SW5Sb2xlRGVmaW5pdGlvbklkcy5jb250cmlidXRvcixcbiAgYnVpbHRJblJvbGVEZWZpbml0aW9uSWRzLnN0b3JhZ2VCbG9iRGF0YUNvbnRyaWJ1dG9yLFxuXSBhcyBjb25zdDtcblxuY29uc3QgYm9vdHN0cmFwQ2lJZGVudGl0eVJvbGVEZWZpbml0aW9uSWRzID0gW1xuICAvLyBQbGFuIG5lZWRzIHJlYWQgYWNjZXNzIGZvciByZWZyZXNoIGFuZCBibG9iIGFjY2VzcyBmb3IgVGVycmFmb3JtIGJhY2tlbmQgbG9ja3Mvc3RhdGUuXG4gIGJ1aWx0SW5Sb2xlRGVmaW5pdGlvbklkcy5yZWFkZXIsXG4gIGJ1aWx0SW5Sb2xlRGVmaW5pdGlvbklkcy5zdG9yYWdlQmxvYkRhdGFDb250cmlidXRvcixcbl0gYXMgY29uc3Q7XG5cbnR5cGUgQm9vdHN0cmFwcGVySWRlbnRpdHkgPSB7XG4gIGNsaWVudElkOiBzdHJpbmc7XG4gIG5hbWU6IEJvb3RzdHJhcHBlcklkZW50aXR5TmFtZTtcbiAgcHJpbmNpcGFsSWQ6IHN0cmluZztcbn07XG5cbnR5cGUgQm9vdHN0cmFwcGVySWRlbnRpdHlOYW1lID1cbiAgfCBgJHtzdHJpbmd9LSR7RW52aXJvbm1lbnRTaG9ydFZhbHVlfS0ke0xvY2F0aW9uU2hvcnRWYWx1ZX0tYm9vdHN0cmFwLWNpLWlkLSR7c3RyaW5nfWBcbiAgfCBgJHtzdHJpbmd9LSR7RW52aXJvbm1lbnRTaG9ydFZhbHVlfS0ke0xvY2F0aW9uU2hvcnRWYWx1ZX0tYm9vdHN0cmFwLWlkLSR7c3RyaW5nfWA7XG5cbnR5cGUgQm9vdHN0cmFwcGVySWRlbnRpdHlQYXJhbWV0ZXJzID0ge1xuICBsb2NhdGlvbjogc3RyaW5nO1xuICB0YWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxudHlwZSBCb290c3RyYXBwZXJSZXNvdXJjZUdyb3VwTmFtZSA9XG4gIGAke3N0cmluZ30tJHtFbnZpcm9ubWVudFNob3J0VmFsdWV9LSR7TG9jYXRpb25TaG9ydFZhbHVlfS1jb21tb24tcmctJHtzdHJpbmd9YDtcblxuY29uc3Qga2V5VmF1bHREbnNFcnJvclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY29kZTogei5lbnVtKFtcIkVBSV9BR0FJTlwiLCBcIkVOT1RGT1VORFwiXSksXG59KTtcbmNvbnN0IGtleVZhdWx0RG5zUmVhZHlNYXhBdHRlbXB0cyA9IDMwO1xuY29uc3Qga2V5VmF1bHREbnNSZWFkeVJldHJ5RGVsYXlNcyA9IDEwXzAwMDtcblxuZXhwb3J0IGNsYXNzIEF6dXJlQ2xvdWRBY2NvdW50U2VydmljZSBpbXBsZW1lbnRzIENsb3VkQWNjb3VudFNlcnZpY2Uge1xuICAjY3JlZGVudGlhbDogVG9rZW5DcmVkZW50aWFsO1xuICAjcmVxdWlyZWRSZXNvdXJjZVByb3ZpZGVycyA9IFtcbiAgICBcIk1pY3Jvc29mdC5BZHZpc29yXCIsXG4gICAgXCJNaWNyb3NvZnQuQWxlcnRzTWFuYWdlbWVudFwiLFxuICAgIFwiTWljcm9zb2Z0LkFwaU1hbmFnZW1lbnRcIixcbiAgICBcIk1pY3Jvc29mdC5BcHBcIixcbiAgICBcIk1pY3Jvc29mdC5BdXRob3JpemF0aW9uXCIsXG4gICAgXCJNaWNyb3NvZnQuQXp1cmVUZXJyYWZvcm1cIixcbiAgICBcIk1pY3Jvc29mdC5DYWNoZVwiLFxuICAgIFwiTWljcm9zb2Z0LkNkblwiLFxuICAgIFwiTWljcm9zb2Z0LkNvbnRhaW5lckluc3RhbmNlXCIsXG4gICAgXCJNaWNyb3NvZnQuQ29zdE1hbmFnZW1lbnRcIixcbiAgICBcIk1pY3Jvc29mdC5EQmZvclBvc3RncmVTUUxcIixcbiAgICBcIk1pY3Jvc29mdC5LZXlWYXVsdFwiLFxuICAgIFwiTWljcm9zb2Z0LlNlcnZpY2VCdXNcIixcbiAgICBcIk1pY3Jvc29mdC5TcWxcIixcbiAgICBcIk1pY3Jvc29mdC5TdG9yYWdlXCIsXG4gICAgXCJNaWNyb3NvZnQuV2ViXCIsXG4gIF0gYXMgY29uc3Q7XG4gICNyZXNvdXJjZUdyYXBoQ2xpZW50OiBSZXNvdXJjZUdyYXBoQ2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKGNyZWRlbnRpYWw6IFRva2VuQ3JlZGVudGlhbCkge1xuICAgIHRoaXMuI3Jlc291cmNlR3JhcGhDbGllbnQgPSBuZXcgUmVzb3VyY2VHcmFwaENsaWVudChjcmVkZW50aWFsKTtcbiAgICB0aGlzLiNjcmVkZW50aWFsID0gY3JlZGVudGlhbDtcbiAgfVxuXG4gIGFzeW5jIGNvbmZpZ3VyZUdpdEh1YkVudmlyb25tZW50KFxuICAgIGNsb3VkQWNjb3VudDogQ2xvdWRBY2NvdW50LFxuICAgIHsgbmFtZSwgcHJlZml4IH06IEVudmlyb25tZW50SWQsXG4gICAgZ2l0aHViOiBHaXRIdWJSZXBvLFxuICAgIGdpdEh1YlNlcnZpY2U6IEdpdEh1YlNlcnZpY2UsXG4gICAgcnVubmVyQXBwQ3JlZGVudGlhbHM/OiBHaXRIdWJBcHBDcmVkZW50aWFscyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXNzZXJ0LmVxdWFsKGNsb3VkQWNjb3VudC5jc3AsIFwiYXp1cmVcIiwgXCJDbG91ZCBhY2NvdW50IG11c3QgYmUgQXp1cmVcIik7XG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgaXNBenVyZUxvY2F0aW9uKGNsb3VkQWNjb3VudC5kZWZhdWx0TG9jYXRpb24pLFxuICAgICAgXCJUaGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgY2xvdWQgYWNjb3VudCBpcyBub3QgYSB2YWxpZCBBenVyZSBsb2NhdGlvblwiLFxuICAgICk7XG5cbiAgICBjb25zdCBzaG9ydCA9IHtcbiAgICAgIGVudjogZ2V0RW52aXJvbm1lbnRTaG9ydChuYW1lKSxcbiAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblNob3J0W2Nsb3VkQWNjb3VudC5kZWZhdWx0TG9jYXRpb25dLFxuICAgIH07XG4gICAgY29uc3QgcmVzb3VyY2VHcm91cE5hbWU6IEJvb3RzdHJhcHBlclJlc291cmNlR3JvdXBOYW1lID0gYCR7cHJlZml4fS0ke3Nob3J0LmVudn0tJHtzaG9ydC5sb2NhdGlvbn0tY29tbW9uLXJnLTAxYDtcbiAgICBjb25zdCBjZElkZW50aXR5TmFtZTogQm9vdHN0cmFwcGVySWRlbnRpdHlOYW1lID0gYCR7cHJlZml4fS0ke3Nob3J0LmVudn0tJHtzaG9ydC5sb2NhdGlvbn0tYm9vdHN0cmFwLWlkLTAxYDtcbiAgICBjb25zdCBjaUlkZW50aXR5TmFtZTogQm9vdHN0cmFwcGVySWRlbnRpdHlOYW1lID0gYCR7cHJlZml4fS0ke3Nob3J0LmVudn0tJHtzaG9ydC5sb2NhdGlvbn0tYm9vdHN0cmFwLWNpLWlkLTAxYDtcbiAgICBjb25zdCBtc2lDbGllbnQgPSBuZXcgTWFuYWdlZFNlcnZpY2VJZGVudGl0eUNsaWVudChcbiAgICAgIHRoaXMuI2NyZWRlbnRpYWwsXG4gICAgICBjbG91ZEFjY291bnQuaWQsXG4gICAgKTtcblxuICAgIGNvbnN0IFtjZElkZW50aXR5LCBjaUlkZW50aXR5XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuI2dldEJvb3RzdHJhcHBlcklkZW50aXR5KHtcbiAgICAgICAgY2xvdWRBY2NvdW50SWQ6IGNsb3VkQWNjb3VudC5pZCxcbiAgICAgICAgaWRlbnRpdHlOYW1lOiBjZElkZW50aXR5TmFtZSxcbiAgICAgICAgbXNpQ2xpZW50LFxuICAgICAgICByZXNvdXJjZUdyb3VwTmFtZSxcbiAgICAgIH0pLFxuICAgICAgdGhpcy4jZ2V0Qm9vdHN0cmFwcGVySWRlbnRpdHkoe1xuICAgICAgICBjbG91ZEFjY291bnRJZDogY2xvdWRBY2NvdW50LmlkLFxuICAgICAgICBpZGVudGl0eU5hbWU6IGNpSWRlbnRpdHlOYW1lLFxuICAgICAgICBtc2lDbGllbnQsXG4gICAgICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBjb25zdCBzdWJzY3JpcHRpb25DbGllbnQgPSBuZXcgU3Vic2NyaXB0aW9uQ2xpZW50KHRoaXMuI2NyZWRlbnRpYWwpO1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGF3YWl0IHN1YnNjcmlwdGlvbkNsaWVudC5zdWJzY3JpcHRpb25zLmdldChcbiAgICAgIGNsb3VkQWNjb3VudC5pZCxcbiAgICApO1xuICAgIGFzc2VydC5vayhzdWJzY3JpcHRpb24udGVuYW50SWQsIFwiU3Vic2NyaXB0aW9uIHRlbmFudCBJRCBpcyB1bmRlZmluZWRcIik7XG5cbiAgICBhd2FpdCB0aGlzLiNjb25maWd1cmVCb290c3RyYXBwZXJHaXRIdWJFbnZpcm9ubWVudHMoe1xuICAgICAgY2RJZGVudGl0eUNsaWVudElkOiBjZElkZW50aXR5LmNsaWVudElkLFxuICAgICAgY2RJZGVudGl0eU5hbWU6IGNkSWRlbnRpdHkubmFtZSxcbiAgICAgIGNpSWRlbnRpdHlDbGllbnRJZDogY2lJZGVudGl0eS5jbGllbnRJZCxcbiAgICAgIGNpSWRlbnRpdHlOYW1lOiBjaUlkZW50aXR5Lm5hbWUsXG4gICAgICBjbG91ZEFjY291bnRJZDogY2xvdWRBY2NvdW50LmlkLFxuICAgICAgZ2l0aHViLFxuICAgICAgZ2l0SHViU2VydmljZSxcbiAgICAgIG1zaUNsaWVudCxcbiAgICAgIG5hbWUsXG4gICAgICByZXNvdXJjZUdyb3VwTmFtZSxcbiAgICAgIHJ1bm5lckFwcENyZWRlbnRpYWxzLFxuICAgICAgdGVuYW50SWQ6IHN1YnNjcmlwdGlvbi50ZW5hbnRJZCxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldFRlcnJhZm9ybUJhY2tlbmQoXG4gICAgY2xvdWRBY2NvdW50SWQ6IENsb3VkQWNjb3VudFtcImlkXCJdLFxuICAgIHsgbmFtZSwgcHJlZml4IH06IEVudmlyb25tZW50SWQsXG4gICk6IFByb21pc2U8VGVycmFmb3JtQmFja2VuZCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGFsbExvY2F0aW9ucyA9IE9iamVjdC52YWx1ZXMobG9jYXRpb25TaG9ydCkuam9pbihcInxcIik7XG4gICAgY29uc3Qgc2hvcnRFbnYgPSBnZXRFbnZpcm9ubWVudFNob3J0KG5hbWUpO1xuICAgIC8vIENoZWNrIGlmIGEgc3RvcmFnZSBhY2NvdW50IHdpdGggdGhlIGV4cGVjdGVkIG5hbWUgZXhpc3RzXG4gICAgLy8gJHByZWZpeCArIGVudmlyb25tZW50IHNob3J0ICsgbG9jYXRpb24gKyBcInRmc3RhdGVzdFwiICsgc3VmZml4IChlLmcuLCBcImR4cGl0bnRmc3RhdGVzdDAxXCIpXG4gICAgLy8gaXQgY2FuIHJldHVybiBtdWx0aXBsZSByZXN1bHRzIChlLmcuIGZvciBkaWZmZXJlbnQgbG9jYXRpb24gb3IgaW5zdGFuY2UgbnVtYmVyKVxuICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGAke3ByZWZpeH0ke3Nob3J0RW52fSgke2FsbExvY2F0aW9uc30pdGZzdGF0ZXN0KDBbMS05XXxbMS05XVxcXFxkKWA7XG4gICAgY29uc3QgcXVlcnkgPSBgcmVzb3VyY2VzXG4gICAgICAgICAgICAgfCB3aGVyZSB0eXBlID09ICdtaWNyb3NvZnQuc3RvcmFnZS9zdG9yYWdlYWNjb3VudHMnXG4gICAgICAgICAgICAgfCB3aGVyZSBuYW1lIG1hdGNoZXMgcmVnZXggQCcke3Jlc291cmNlTmFtZX0nXG4gICAgICAgICAgICBgO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuI3Jlc291cmNlR3JhcGhDbGllbnQucmVzb3VyY2VzKHtcbiAgICAgIHF1ZXJ5LFxuICAgICAgc3Vic2NyaXB0aW9uczogW2Nsb3VkQWNjb3VudElkXSxcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LnRvdGFsUmVjb3JkcyA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgc3RvcmFnZUFjY291bnRzID0gei5hcnJheShyZXNvdXJjZUdyYXBoRGF0YVNjaGVtYSkucGFyc2UocmVzdWx0LmRhdGEpO1xuICAgIC8vIG9uIG11bHRpcGxlIHJlc3VsdHMsIHJhbmsgc3RvcmFnZSBhY2NvdW50cyBieSBsb2NhdGlvbiBwcmlvcml0eSBhbmQgaW5zdGFuY2UgbnVtYmVyXG4gICAgaWYgKHN0b3JhZ2VBY2NvdW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBzdG9yYWdlQWNjb3VudHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAvLyBjb21wYXJlIGxvY2F0aW9ucyBwcmlvcml0eVxuICAgICAgICBjb25zdCBsb2NhdGlvbkNvbXBhcmlzb24gPVxuICAgICAgICAgIGxvY2F0aW9ucy5pbmRleE9mKGEubG9jYXRpb24pIC0gbG9jYXRpb25zLmluZGV4T2YoYi5sb2NhdGlvbik7XG4gICAgICAgIGlmIChsb2NhdGlvbkNvbXBhcmlzb24gPT09IDApIHtcbiAgICAgICAgICAvLyBzYW1lIGxvY2F0aW9uLCBjb21wYXJlIGJ5IG5hbWUgKHRvIGdldCB0aGUgaGlnaGVzdCBpbnN0YW5jZSBudW1iZXIpXG4gICAgICAgICAgcmV0dXJuIGIubmFtZS5sb2NhbGVDb21wYXJlKGEubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uQ29tcGFyaXNvbjtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGVycmFmb3JtQmFja2VuZFNjaGVtYS5wYXJzZSh7XG4gICAgICByZXNvdXJjZUdyb3VwTmFtZTogc3RvcmFnZUFjY291bnRzWzBdLnJlc291cmNlR3JvdXAsXG4gICAgICBzdG9yYWdlQWNjb3VudE5hbWU6IHN0b3JhZ2VBY2NvdW50c1swXS5uYW1lLFxuICAgICAgc3Vic2NyaXB0aW9uSWQ6IGNsb3VkQWNjb3VudElkLFxuICAgICAgdHlwZTogXCJhenVyZXJtXCIsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBoYXNVc2VyUGVybWlzc2lvblRvSW5pdGlhbGl6ZShcbiAgICBjbG91ZEFjY291bnRJZDogQ2xvdWRBY2NvdW50W1wiaWRcIl0sXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBBbGwgcHJpbmNpcGFsIElEcyB0byBjaGVjayAodXNlciArIGFsbCBncm91cHMpXG4gICAgICBjb25zdCBhbGxQcmluY2lwYWxJZHMgPSBhd2FpdCB0aGlzLiNnZXRDdXJyZW50UHJpbmNpcGFsSWRzKCk7XG5cbiAgICAgIC8vIEdldCByb2xlIGFzc2lnbm1lbnRzIGZvciB0aGUgc3Vic2NyaXB0aW9uXG4gICAgICBjb25zdCBhdXRoQ2xpZW50ID0gbmV3IEF1dGhvcml6YXRpb25NYW5hZ2VtZW50Q2xpZW50KFxuICAgICAgICB0aGlzLiNjcmVkZW50aWFsLFxuICAgICAgICBjbG91ZEFjY291bnRJZCxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJlcXVpcmVkUm9sZXMgPSBbXG4gICAgICAgIGJ1aWx0SW5Sb2xlRGVmaW5pdGlvbklkcy5vd25lciwgLy8gT3duZXJcbiAgICAgICAgYnVpbHRJblJvbGVEZWZpbml0aW9uSWRzLnN0b3JhZ2VCbG9iRGF0YUNvbnRyaWJ1dG9yLCAvLyBTdG9yYWdlIEJsb2IgRGF0YSBDb250cmlidXRvclxuICAgICAgICBidWlsdEluUm9sZURlZmluaXRpb25JZHMua2V5VmF1bHRTZWNyZXRzT2ZmaWNlciwgLy8gS2V5IFZhdWx0IFNlY3JldHMgT2ZmaWNlclxuICAgICAgXTtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBgL3N1YnNjcmlwdGlvbnMvJHtjbG91ZEFjY291bnRJZH1gO1xuXG4gICAgICAvLyBDb2xsZWN0IGFsbCByb2xlIGRlZmluaXRpb24gSURzIGFzc2lnbmVkIHRvIHRoZSB1c2VyIG9yIHRoZWlyIGdyb3Vwc1xuICAgICAgY29uc3QgYXNzaWduZWRSb2xlRGVmaW5pdGlvbklkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IGFzc2lnbm1lbnQgb2YgYXV0aENsaWVudC5yb2xlQXNzaWdubWVudHMubGlzdEZvclNjb3BlKFxuICAgICAgICBzY29wZSxcbiAgICAgICkpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBhc3NpZ25tZW50IGlzIGZvciB0aGUgdXNlciBvciBhbnkgb2YgdGhlaXIgZ3JvdXBzXG4gICAgICAgIGlmIChcbiAgICAgICAgICBhc3NpZ25tZW50LnByaW5jaXBhbElkICYmXG4gICAgICAgICAgYWxsUHJpbmNpcGFsSWRzLmhhcyhhc3NpZ25tZW50LnByaW5jaXBhbElkKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBFeHRyYWN0IHJvbGUgZGVmaW5pdGlvbiBJRCBmcm9tIHRoZSBmdWxsIHJlc291cmNlIElEXG4gICAgICAgICAgLy8gRm9ybWF0OiAvc3Vic2NyaXB0aW9ucy97c3VifS9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcm9sZURlZmluaXRpb25zL3tyb2xlSWR9XG4gICAgICAgICAgY29uc3Qgcm9sZURlZklkID0gYXNzaWdubWVudC5yb2xlRGVmaW5pdGlvbklkPy5zcGxpdChcIi9cIikucG9wKCk7XG4gICAgICAgICAgaWYgKHJvbGVEZWZJZCkge1xuICAgICAgICAgICAgYXNzaWduZWRSb2xlRGVmaW5pdGlvbklkcy5hZGQocm9sZURlZklkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaG9ydC1jaXJjdWl0OiBzdG9wIGlmIGFsbCByZXF1aXJlZCByb2xlcyBoYXZlIGJlZW4gZm91bmRcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcXVpcmVkUm9sZXMuZXZlcnkoKHJlcXVpcmVkUm9sZSkgPT5cbiAgICAgICAgICAgIGFzc2lnbmVkUm9sZURlZmluaXRpb25JZHMuaGFzKHJlcXVpcmVkUm9sZSksXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBhbGwgcmVxdWlyZWQgcm9sZXMgYXJlIHByZXNlbnRcbiAgICAgIGNvbnN0IGhhc0FsbFJvbGVzID0gcmVxdWlyZWRSb2xlcy5ldmVyeSgocmVxdWlyZWRSb2xlKSA9PlxuICAgICAgICBhc3NpZ25lZFJvbGVEZWZpbml0aW9uSWRzLmhhcyhyZXF1aXJlZFJvbGUpLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGhhc0FsbFJvbGVzO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAvLyBIYW5kbGUgYXV0aG9yaXphdGlvbiBlcnJvcnMgKDQwMyBGb3JiaWRkZW4pIC0gdXNlciBsYWNrcyBwZXJtaXNzaW9uc1xuICAgICAgaWYgKFxuICAgICAgICBlcnJvciAmJlxuICAgICAgICB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgXCJzdGF0dXNDb2RlXCIgaW4gZXJyb3IgJiZcbiAgICAgICAgZXJyb3Iuc3RhdHVzQ29kZSA9PT0gNDAzXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gUmUtdGhyb3cgb3RoZXIgZXJyb3JzXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplKFxuICAgIGNsb3VkQWNjb3VudDogQ2xvdWRBY2NvdW50LFxuICAgIHsgbmFtZSwgcHJlZml4IH06IEVudmlyb25tZW50SWQsXG4gICAgcnVubmVyQXBwQ3JlZGVudGlhbHM6IEdpdEh1YkFwcENyZWRlbnRpYWxzLFxuICAgIGdpdGh1YjogR2l0SHViUmVwbyxcbiAgICBnaXRIdWJTZXJ2aWNlOiBHaXRIdWJTZXJ2aWNlLFxuICAgIHRhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXNzZXJ0LmVxdWFsKGNsb3VkQWNjb3VudC5jc3AsIFwiYXp1cmVcIiwgXCJDbG91ZCBhY2NvdW50IG11c3QgYmUgQXp1cmVcIik7XG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgaXNBenVyZUxvY2F0aW9uKGNsb3VkQWNjb3VudC5kZWZhdWx0TG9jYXRpb24pLFxuICAgICAgXCJUaGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgY2xvdWQgYWNjb3VudCBpcyBub3QgYSB2YWxpZCBBenVyZSBsb2NhdGlvblwiLFxuICAgICk7XG5cbiAgICBjb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wiZ2VuXCIsIFwiZW52XCJdKTtcblxuICAgIC8vIFJlZ2lzdGVyIHJlcXVpcmVkIHJlc291cmNlIHByb3ZpZGVycyBiZWZvcmUgY3JlYXRpbmcgYW55IHJlc291cmNlc1xuICAgIGF3YWl0IHRoaXMuI3JlZ2lzdGVyUHJvdmlkZXJzKGNsb3VkQWNjb3VudC5pZCk7XG5cbiAgICBjb25zdCByZXNvdXJjZU1hbmFnZW1lbnRDbGllbnQgPSBuZXcgUmVzb3VyY2VNYW5hZ2VtZW50Q2xpZW50KFxuICAgICAgdGhpcy4jY3JlZGVudGlhbCxcbiAgICAgIGNsb3VkQWNjb3VudC5pZCxcbiAgICApO1xuXG4gICAgY29uc3Qgc2hvcnQgPSB7XG4gICAgICBlbnY6IGdldEVudmlyb25tZW50U2hvcnQobmFtZSksXG4gICAgICBsb2NhdGlvbjogbG9jYXRpb25TaG9ydFtjbG91ZEFjY291bnQuZGVmYXVsdExvY2F0aW9uXSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzb3VyY2VHcm91cE5hbWU6IEJvb3RzdHJhcHBlclJlc291cmNlR3JvdXBOYW1lID0gYCR7cHJlZml4fS0ke3Nob3J0LmVudn0tJHtzaG9ydC5sb2NhdGlvbn0tY29tbW9uLXJnLTAxYDtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7XG4gICAgICBsb2NhdGlvbjogY2xvdWRBY2NvdW50LmRlZmF1bHRMb2NhdGlvbixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgQ3JlYXRlZEJ5OiBcIkRYIENMSVwiLFxuICAgICAgICBFbnZpcm9ubWVudDogbmFtZSxcbiAgICAgICAgLi4udGFncyxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGF3YWl0IHJlc291cmNlTWFuYWdlbWVudENsaWVudC5yZXNvdXJjZUdyb3Vwcy5jcmVhdGVPclVwZGF0ZShcbiAgICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgcGFyYW1ldGVycyxcbiAgICApO1xuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgXCJDcmVhdGVkIHJlc291cmNlIGdyb3VwIHtyZXNvdXJjZUdyb3VwTmFtZX0gaW4gc3Vic2NyaXB0aW9uIHtzdWJzY3JpcHRpb25JZH1cIixcbiAgICAgIHsgcmVzb3VyY2VHcm91cE5hbWUsIHN1YnNjcmlwdGlvbklkOiBjbG91ZEFjY291bnQuaWQgfSxcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGlkZW50aXR5TmFtZTogQm9vdHN0cmFwcGVySWRlbnRpdHlOYW1lID0gYCR7cHJlZml4fS0ke3Nob3J0LmVudn0tJHtzaG9ydC5sb2NhdGlvbn0tYm9vdHN0cmFwLWlkLTAxYDtcbiAgICAgIGNvbnN0IGNpSWRlbnRpdHlOYW1lOiBCb290c3RyYXBwZXJJZGVudGl0eU5hbWUgPSBgJHtwcmVmaXh9LSR7c2hvcnQuZW52fS0ke3Nob3J0LmxvY2F0aW9ufS1ib290c3RyYXAtY2ktaWQtMDFgO1xuXG4gICAgICBjb25zdCBtc2lDbGllbnQgPSBuZXcgTWFuYWdlZFNlcnZpY2VJZGVudGl0eUNsaWVudChcbiAgICAgICAgdGhpcy4jY3JlZGVudGlhbCxcbiAgICAgICAgY2xvdWRBY2NvdW50LmlkLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgW2NkSWRlbnRpdHksIGNpSWRlbnRpdHldID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICB0aGlzLiNjcmVhdGVCb290c3RyYXBwZXJJZGVudGl0eSh7XG4gICAgICAgICAgY2xvdWRBY2NvdW50SWQ6IGNsb3VkQWNjb3VudC5pZCxcbiAgICAgICAgICBpZGVudGl0eU5hbWUsXG4gICAgICAgICAgbXNpQ2xpZW50LFxuICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgcmVzb3VyY2VHcm91cE5hbWUsXG4gICAgICAgIH0pLFxuICAgICAgICB0aGlzLiNjcmVhdGVCb290c3RyYXBwZXJJZGVudGl0eSh7XG4gICAgICAgICAgY2xvdWRBY2NvdW50SWQ6IGNsb3VkQWNjb3VudC5pZCxcbiAgICAgICAgICBpZGVudGl0eU5hbWU6IGNpSWRlbnRpdHlOYW1lLFxuICAgICAgICAgIG1zaUNsaWVudCxcbiAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgICB9KSxcbiAgICAgIF0pO1xuXG4gICAgICBjb25zdCBhdXRob3JpemF0aW9uTWFuYWdlbWVudENsaWVudCA9IG5ldyBBdXRob3JpemF0aW9uTWFuYWdlbWVudENsaWVudChcbiAgICAgICAgdGhpcy4jY3JlZGVudGlhbCxcbiAgICAgICAgY2xvdWRBY2NvdW50LmlkLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbkNsaWVudCA9IG5ldyBTdWJzY3JpcHRpb25DbGllbnQodGhpcy4jY3JlZGVudGlhbCk7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBhd2FpdCBzdWJzY3JpcHRpb25DbGllbnQuc3Vic2NyaXB0aW9ucy5nZXQoXG4gICAgICAgIGNsb3VkQWNjb3VudC5pZCxcbiAgICAgICk7XG4gICAgICBhc3NlcnQub2soc3Vic2NyaXB0aW9uLnRlbmFudElkLCBcIlN1YnNjcmlwdGlvbiB0ZW5hbnQgSUQgaXMgdW5kZWZpbmVkXCIpO1xuICAgICAgY29uc3QgdGVuYW50SWQgPSBzdWJzY3JpcHRpb24udGVuYW50SWQ7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb25TY29wZSA9IGAvc3Vic2NyaXB0aW9ucy8ke2Nsb3VkQWNjb3VudC5pZH1gO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHRoaXMuI2Fzc2lnbkJvb3RzdHJhcHBlclJvbGVzKHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uTWFuYWdlbWVudENsaWVudCxcbiAgICAgICAgICBjbG91ZEFjY291bnRJZDogY2xvdWRBY2NvdW50LmlkLFxuICAgICAgICAgIGlkZW50aXR5OiBjZElkZW50aXR5LFxuICAgICAgICAgIHJvbGVEZWZpbml0aW9uSWRzOiBib290c3RyYXBJZGVudGl0eVJvbGVEZWZpbml0aW9uSWRzLFxuICAgICAgICAgIHNjb3BlOiBzdWJzY3JpcHRpb25TY29wZSxcbiAgICAgICAgfSksXG4gICAgICAgIHRoaXMuI2Fzc2lnbkJvb3RzdHJhcHBlclJvbGVzKHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uTWFuYWdlbWVudENsaWVudCxcbiAgICAgICAgICBjbG91ZEFjY291bnRJZDogY2xvdWRBY2NvdW50LmlkLFxuICAgICAgICAgIGlkZW50aXR5OiBjaUlkZW50aXR5LFxuICAgICAgICAgIHJvbGVEZWZpbml0aW9uSWRzOiBib290c3RyYXBDaUlkZW50aXR5Um9sZURlZmluaXRpb25JZHMsXG4gICAgICAgICAgc2NvcGU6IHN1YnNjcmlwdGlvblNjb3BlLFxuICAgICAgICB9KSxcbiAgICAgIF0pO1xuXG4gICAgICBhd2FpdCB0aGlzLiNjb25maWd1cmVCb290c3RyYXBwZXJHaXRIdWJFbnZpcm9ubWVudHMoe1xuICAgICAgICBjZElkZW50aXR5Q2xpZW50SWQ6IGNkSWRlbnRpdHkuY2xpZW50SWQsXG4gICAgICAgIGNkSWRlbnRpdHlOYW1lOiBjZElkZW50aXR5Lm5hbWUsXG4gICAgICAgIGNpSWRlbnRpdHlDbGllbnRJZDogY2lJZGVudGl0eS5jbGllbnRJZCxcbiAgICAgICAgY2lJZGVudGl0eU5hbWU6IGNpSWRlbnRpdHkubmFtZSxcbiAgICAgICAgY2xvdWRBY2NvdW50SWQ6IGNsb3VkQWNjb3VudC5pZCxcbiAgICAgICAgZ2l0aHViLFxuICAgICAgICBnaXRIdWJTZXJ2aWNlLFxuICAgICAgICBtc2lDbGllbnQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgICBydW5uZXJBcHBDcmVkZW50aWFscyxcbiAgICAgICAgdGVuYW50SWQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qga2V5VmF1bHROYW1lID0gYXdhaXQgdGhpcy4jY3JlYXRlQ29tbW9uS2V5VmF1bHQoe1xuICAgICAgICBjbG91ZEFjY291bnQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgcmVzb3VyY2VHcm91cE5hbWUsXG4gICAgICAgIHNob3J0RW52OiBzaG9ydC5lbnYsXG4gICAgICAgIHNob3J0TG9jYXRpb246IHNob3J0LmxvY2F0aW9uLFxuICAgICAgICB0YWdzLFxuICAgICAgICB0ZW5hbnRJZCxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB0aGlzLiNzdG9yZVJ1bm5lckFwcFNlY3JldHMoe1xuICAgICAgICBjbG91ZEFjY291bnRJZDogY2xvdWRBY2NvdW50LmlkLFxuICAgICAgICBrZXlWYXVsdE5hbWUsXG4gICAgICAgIHJ1bm5lckFwcENyZWRlbnRpYWxzLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgIC8vIENsZWFudXAgcmVzb3VyY2UgZ3JvdXAgaWYgaW5pdGlhbGl6YXRpb24gZmFpbHNcbiAgICAgIGF3YWl0IHJlc291cmNlTWFuYWdlbWVudENsaWVudC5yZXNvdXJjZUdyb3Vwcy5iZWdpbkRlbGV0ZUFuZFdhaXQoXG4gICAgICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgXCJEZWxldGVkIHJlc291cmNlIGdyb3VwIHtyZXNvdXJjZUdyb3VwTmFtZX0gaW4gc3Vic2NyaXB0aW9uIHtzdWJzY3JpcHRpb25JZH0gZHVlIHRvIGluaXRpYWxpemF0aW9uIGZhaWx1cmVcIixcbiAgICAgICAgeyByZXNvdXJjZUdyb3VwTmFtZSwgc3Vic2NyaXB0aW9uSWQ6IGNsb3VkQWNjb3VudC5pZCB9LFxuICAgICAgKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBpbml0aWFsaXplIGNsb3VkIGFjY291bnRcIiwgeyBjYXVzZSB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpc0luaXRpYWxpemVkKFxuICAgIGNsb3VkQWNjb3VudElkOiBDbG91ZEFjY291bnRbXCJpZFwiXSxcbiAgICB7IG5hbWUsIHByZWZpeCB9OiBFbnZpcm9ubWVudElkLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBhbGxMb2NhdGlvbnMgPSBPYmplY3QudmFsdWVzKGxvY2F0aW9uU2hvcnQpLmpvaW4oXCJ8XCIpO1xuICAgIGNvbnN0IHNob3J0RW52ID0gZ2V0RW52aXJvbm1lbnRTaG9ydChuYW1lKTtcblxuICAgIGNvbnN0IGlkZW50aXR5UmVzb3VyY2VOYW1lID0gYCR7cHJlZml4fS0ke3Nob3J0RW52fS0oJHthbGxMb2NhdGlvbnN9KS1ib290c3RyYXAtaWQtKDBbMS05XXxbMS05XVxcXFxkKWA7XG4gICAgY29uc3QgaWRlbnRpdHlRdWVyeSA9IGByZXNvdXJjZXNcbiAgICAgICAgICAgICB8IHdoZXJlIHR5cGUgPT0gJ21pY3Jvc29mdC5tYW5hZ2VkaWRlbnRpdHkvdXNlcmFzc2lnbmVkaWRlbnRpdGllcydcbiAgICAgICAgICAgICB8IHdoZXJlIG5hbWUgbWF0Y2hlcyByZWdleCBAJyR7aWRlbnRpdHlSZXNvdXJjZU5hbWV9J1xuICAgICAgICAgICAgYDtcblxuICAgIGNvbnN0IGtleVZhdWx0UmVzb3VyY2VOYW1lID0gYCR7cHJlZml4fS0ke3Nob3J0RW52fS0oJHthbGxMb2NhdGlvbnN9KS1jb21tb24ta3YtKDBbMS05XXxbMS05XVxcXFxkKWA7XG4gICAgY29uc3Qga2V5VmF1bHRRdWVyeSA9IGByZXNvdXJjZXNcbiAgICAgICAgICAgICB8IHdoZXJlIHR5cGUgPT0gJ21pY3Jvc29mdC5rZXl2YXVsdC92YXVsdHMnXG4gICAgICAgICAgICAgfCB3aGVyZSBuYW1lIG1hdGNoZXMgcmVnZXggQCcke2tleVZhdWx0UmVzb3VyY2VOYW1lfSdcbiAgICAgICAgICAgIGA7XG5cbiAgICBjb25zdCBbaWRlbnRpdHlSZXN1bHQsIGtleVZhdWx0UmVzdWx0LCBhcmVQcm92aWRlcnNSZWdpc3RlcmVkXSA9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHRoaXMuI3Jlc291cmNlR3JhcGhDbGllbnQucmVzb3VyY2VzKHtcbiAgICAgICAgICBxdWVyeTogaWRlbnRpdHlRdWVyeSxcbiAgICAgICAgICBzdWJzY3JpcHRpb25zOiBbY2xvdWRBY2NvdW50SWRdLFxuICAgICAgICB9KSxcbiAgICAgICAgdGhpcy4jcmVzb3VyY2VHcmFwaENsaWVudC5yZXNvdXJjZXMoe1xuICAgICAgICAgIHF1ZXJ5OiBrZXlWYXVsdFF1ZXJ5LFxuICAgICAgICAgIHN1YnNjcmlwdGlvbnM6IFtjbG91ZEFjY291bnRJZF0sXG4gICAgICAgIH0pLFxuICAgICAgICB0aGlzLiNhcmVQcm92aWRlcnNSZWdpc3RlcmVkKGNsb3VkQWNjb3VudElkKSxcbiAgICAgIF0pO1xuXG4gICAgY29uc3QgaW5pdGlhbGl6ZWQgPVxuICAgICAgaWRlbnRpdHlSZXN1bHQudG90YWxSZWNvcmRzID4gMCAmJlxuICAgICAga2V5VmF1bHRSZXN1bHQudG90YWxSZWNvcmRzID4gMCAmJlxuICAgICAgYXJlUHJvdmlkZXJzUmVnaXN0ZXJlZDtcblxuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJnZW5cIiwgXCJlbnZcIl0pO1xuXG4gICAgbG9nZ2VyLmRlYnVnKFwic3Vic2NyaXB0aW9uIHtzdWJzY3JpcHRpb25JZH0gaW5pdGlhbGl6ZWQ6IHtpbml0aWFsaXplZH1cIiwge1xuICAgICAgaW5pdGlhbGl6ZWQsXG4gICAgICBzdWJzY3JpcHRpb25JZDogY2xvdWRBY2NvdW50SWQsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBhc3luYyBwcm92aXNpb25UZXJyYWZvcm1CYWNrZW5kKFxuICAgIGNsb3VkQWNjb3VudDogQ2xvdWRBY2NvdW50LFxuICAgIHsgbmFtZSwgcHJlZml4IH06IEVudmlyb25tZW50SWQsXG4gICAgdGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9LFxuICApOiBQcm9taXNlPFRlcnJhZm9ybUJhY2tlbmQ+IHtcbiAgICBhc3NlcnQuZXF1YWwoY2xvdWRBY2NvdW50LmNzcCwgXCJhenVyZVwiLCBcIkNsb3VkIGFjY291bnQgbXVzdCBiZSBBenVyZVwiKTtcbiAgICBhc3NlcnQub2soXG4gICAgICBpc0F6dXJlTG9jYXRpb24oY2xvdWRBY2NvdW50LmRlZmF1bHRMb2NhdGlvbiksXG4gICAgICBcIlRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBjbG91ZCBhY2NvdW50IGlzIG5vdCBhIHZhbGlkIEF6dXJlIGxvY2F0aW9uXCIsXG4gICAgKTtcblxuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJnZW5cIiwgXCJlbnZcIl0pO1xuXG4gICAgY29uc3QgcmVzb3VyY2VNYW5hZ2VtZW50Q2xpZW50ID0gbmV3IFJlc291cmNlTWFuYWdlbWVudENsaWVudChcbiAgICAgIHRoaXMuI2NyZWRlbnRpYWwsXG4gICAgICBjbG91ZEFjY291bnQuaWQsXG4gICAgKTtcblxuICAgIGNvbnN0IHNob3J0ID0ge1xuICAgICAgZW52OiBnZXRFbnZpcm9ubWVudFNob3J0KG5hbWUpLFxuICAgICAgbG9jYXRpb246IGxvY2F0aW9uU2hvcnRbY2xvdWRBY2NvdW50LmRlZmF1bHRMb2NhdGlvbl0sXG4gICAgfTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7XG4gICAgICBsb2NhdGlvbjogY2xvdWRBY2NvdW50LmRlZmF1bHRMb2NhdGlvbixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgRW52aXJvbm1lbnQ6IG5hbWUsXG4gICAgICAgIC4uLnRhZ3MsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZXNvdXJjZUdyb3VwTmFtZSA9IGAke3ByZWZpeH0tJHtzaG9ydC5lbnZ9LSR7c2hvcnQubG9jYXRpb259LXRmc3RhdGUtcmctMDFgO1xuXG4gICAgYXdhaXQgcmVzb3VyY2VNYW5hZ2VtZW50Q2xpZW50LnJlc291cmNlR3JvdXBzLmNyZWF0ZU9yVXBkYXRlKFxuICAgICAgcmVzb3VyY2VHcm91cE5hbWUsXG4gICAgICBwYXJhbWV0ZXJzLFxuICAgICk7XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBcIkNyZWF0ZWQgcmVzb3VyY2UgZ3JvdXAge3Jlc291cmNlR3JvdXBOYW1lfSBpbiBzdWJzY3JpcHRpb24ge3N1YnNjcmlwdGlvbklkfVwiLFxuICAgICAgeyByZXNvdXJjZUdyb3VwTmFtZSwgc3Vic2NyaXB0aW9uSWQ6IGNsb3VkQWNjb3VudC5pZCB9LFxuICAgICk7XG5cbiAgICBjb25zdCBzdG9yYWdlTWFuYWdlbWVudENsaWVudCA9IG5ldyBTdG9yYWdlTWFuYWdlbWVudENsaWVudChcbiAgICAgIHRoaXMuI2NyZWRlbnRpYWwsXG4gICAgICBjbG91ZEFjY291bnQuaWQsXG4gICAgKTtcblxuICAgIGNvbnN0IHN0b3JhZ2VBY2NvdW50ID1cbiAgICAgIGF3YWl0IHN0b3JhZ2VNYW5hZ2VtZW50Q2xpZW50LnN0b3JhZ2VBY2NvdW50cy5iZWdpbkNyZWF0ZUFuZFdhaXQoXG4gICAgICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgICBgJHtwcmVmaXh9JHtzaG9ydC5lbnZ9JHtzaG9ydC5sb2NhdGlvbn10ZnN0YXRlc3QwMWAsXG4gICAgICAgIHtcbiAgICAgICAgICBraW5kOiBcIlN0b3JhZ2VWMlwiLFxuICAgICAgICAgIHNrdToge1xuICAgICAgICAgICAgbmFtZTogXCJTdGFuZGFyZF9MUlNcIixcbiAgICAgICAgICAgIHRpZXI6IFwiU3RhbmRhcmRcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLnBhcmFtZXRlcnMsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgc3RvcmFnZUFjY291bnQucHJpbWFyeUVuZHBvaW50cz8uYmxvYixcbiAgICAgIFwiU3RvcmFnZSBhY2NvdW50IGJsb2IgZW5kcG9pbnQgaXMgdW5kZWZpbmVkXCIsXG4gICAgKTtcblxuICAgIGFzc2VydC5vayhzdG9yYWdlQWNjb3VudC5uYW1lLCBcIlN0b3JhZ2UgYWNjb3VudCBuYW1lIGlzIHVuZGVmaW5lZFwiKTtcblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIFwiQ3JlYXRlZCBzdG9yYWdlIGFjY291bnQge3N0b3JhZ2VBY2NvdW50TmFtZX0gaW4gc3Vic2NyaXB0aW9uIHtzdWJzY3JpcHRpb25JZH1cIixcbiAgICAgIHtcbiAgICAgICAgc3RvcmFnZUFjY291bnROYW1lOiBzdG9yYWdlQWNjb3VudC5uYW1lLFxuICAgICAgICBzdWJzY3JpcHRpb25JZDogY2xvdWRBY2NvdW50LmlkLFxuICAgICAgfSxcbiAgICApO1xuICAgIGNvbnN0IGJsb2JTZXJ2aWNlQ2xpZW50ID0gbmV3IEJsb2JTZXJ2aWNlQ2xpZW50KFxuICAgICAgc3RvcmFnZUFjY291bnQucHJpbWFyeUVuZHBvaW50cz8uYmxvYixcbiAgICAgIHRoaXMuI2NyZWRlbnRpYWwsXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbnRhaW5lckNsaWVudCA9XG4gICAgICBibG9iU2VydmljZUNsaWVudC5nZXRDb250YWluZXJDbGllbnQoXCJ0ZXJyYWZvcm0tc3RhdGVcIik7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29udGFpbmVyQ2xpZW50LmNyZWF0ZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIENsZWFudXAgcmVzb3VyY2UgZ3JvdXAgaWYgYmxvYiBjb250YWluZXIgY3JlYXRpb24gZmFpbHNcbiAgICAgIC8vIHJlc291cmNlIGdyb3VwIGRlbGV0aW9uIGFsc28gZGVsZXRlcyBhbGwgY29udGFpbmVkIHJlc291cmNlc1xuICAgICAgYXdhaXQgcmVzb3VyY2VNYW5hZ2VtZW50Q2xpZW50LnJlc291cmNlR3JvdXBzLmJlZ2luRGVsZXRlQW5kV2FpdChcbiAgICAgICAgcmVzb3VyY2VHcm91cE5hbWUsXG4gICAgICApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIHRoZSBibG9iIGNvbnRhaW5lcmAsIHtcbiAgICAgICAgY2F1c2U6IGUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVycmFmb3JtQmFja2VuZFNjaGVtYS5wYXJzZSh7XG4gICAgICByZXNvdXJjZUdyb3VwTmFtZSxcbiAgICAgIHN0b3JhZ2VBY2NvdW50TmFtZTogc3RvcmFnZUFjY291bnQubmFtZSxcbiAgICAgIHN1YnNjcmlwdGlvbklkOiBjbG91ZEFjY291bnQuaWQsXG4gICAgICB0eXBlOiBcImF6dXJlcm1cIixcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jICNhcmVQcm92aWRlcnNSZWdpc3RlcmVkKHN1YnNjcmlwdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgUmVzb3VyY2VNYW5hZ2VtZW50Q2xpZW50KFxuICAgICAgdGhpcy4jY3JlZGVudGlhbCxcbiAgICAgIHN1YnNjcmlwdGlvbklkLFxuICAgICk7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdGhpcy4jcmVxdWlyZWRSZXNvdXJjZVByb3ZpZGVycy5tYXAoYXN5bmMgKG5hbWVzcGFjZSkgPT4ge1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IGNsaWVudC5wcm92aWRlcnMuZ2V0KG5hbWVzcGFjZSk7XG4gICAgICAgIHJldHVybiBwcm92aWRlci5yZWdpc3RyYXRpb25TdGF0ZSA9PT0gXCJSZWdpc3RlcmVkXCI7XG4gICAgICB9KSxcbiAgICApO1xuICAgIHJldHVybiByZXN1bHRzLmV2ZXJ5KEJvb2xlYW4pO1xuICB9XG5cbiAgYXN5bmMgI2Fzc2lnbkJvb3RzdHJhcHBlclJvbGVzKHtcbiAgICBhdXRob3JpemF0aW9uTWFuYWdlbWVudENsaWVudCxcbiAgICBjbG91ZEFjY291bnRJZCxcbiAgICBpZGVudGl0eSxcbiAgICByb2xlRGVmaW5pdGlvbklkcyxcbiAgICBzY29wZSxcbiAgfToge1xuICAgIGF1dGhvcml6YXRpb25NYW5hZ2VtZW50Q2xpZW50OiBBdXRob3JpemF0aW9uTWFuYWdlbWVudENsaWVudDtcbiAgICBjbG91ZEFjY291bnRJZDogQ2xvdWRBY2NvdW50W1wiaWRcIl07XG4gICAgaWRlbnRpdHk6IEJvb3RzdHJhcHBlcklkZW50aXR5O1xuICAgIHJvbGVEZWZpbml0aW9uSWRzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgICBzY29wZTogc3RyaW5nO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcImdlblwiLCBcImVudlwiXSk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHJvbGVEZWZpbml0aW9uSWRzLm1hcCgocm9sZURlZmluaXRpb25JZCkgPT5cbiAgICAgICAgYXV0aG9yaXphdGlvbk1hbmFnZW1lbnRDbGllbnQucm9sZUFzc2lnbm1lbnRzLmNyZWF0ZShcbiAgICAgICAgICBzY29wZSxcbiAgICAgICAgICB0aGlzLiNjcmVhdGVSb2xlQXNzaWdubWVudE5hbWUoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGlkZW50aXR5LnByaW5jaXBhbElkLFxuICAgICAgICAgICAgcm9sZURlZmluaXRpb25JZCxcbiAgICAgICAgICApLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByaW5jaXBhbElkOiBpZGVudGl0eS5wcmluY2lwYWxJZCxcbiAgICAgICAgICAgIHByaW5jaXBhbFR5cGU6IFwiU2VydmljZVByaW5jaXBhbFwiLFxuICAgICAgICAgICAgcm9sZURlZmluaXRpb25JZDogdGhpcy4jY3JlYXRlUm9sZURlZmluaXRpb25SZXNvdXJjZUlkKFxuICAgICAgICAgICAgICBjbG91ZEFjY291bnRJZCxcbiAgICAgICAgICAgICAgcm9sZURlZmluaXRpb25JZCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIFwiQXNzaWduZWQgYm9vdHN0cmFwIHJvbGVzIHRvIGlkZW50aXR5IHtpZGVudGl0eU5hbWV9IGluIHN1YnNjcmlwdGlvbiB7c3Vic2NyaXB0aW9uSWR9XCIsXG4gICAgICB7IGlkZW50aXR5TmFtZTogaWRlbnRpdHkubmFtZSwgc3Vic2NyaXB0aW9uSWQ6IGNsb3VkQWNjb3VudElkIH0sXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jICNjb25maWd1cmVCb290c3RyYXBwZXJHaXRIdWJFbnZpcm9ubWVudHMoe1xuICAgIGNkSWRlbnRpdHlDbGllbnRJZCxcbiAgICBjZElkZW50aXR5TmFtZSxcbiAgICBjaUlkZW50aXR5Q2xpZW50SWQsXG4gICAgY2lJZGVudGl0eU5hbWUsXG4gICAgY2xvdWRBY2NvdW50SWQsXG4gICAgZ2l0aHViLFxuICAgIGdpdEh1YlNlcnZpY2UsXG4gICAgbXNpQ2xpZW50LFxuICAgIG5hbWUsXG4gICAgcmVzb3VyY2VHcm91cE5hbWUsXG4gICAgcnVubmVyQXBwQ3JlZGVudGlhbHMsXG4gICAgdGVuYW50SWQsXG4gIH06IHtcbiAgICBjZElkZW50aXR5Q2xpZW50SWQ6IHN0cmluZztcbiAgICBjZElkZW50aXR5TmFtZTogc3RyaW5nO1xuICAgIGNpSWRlbnRpdHlDbGllbnRJZDogc3RyaW5nO1xuICAgIGNpSWRlbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgY2xvdWRBY2NvdW50SWQ6IENsb3VkQWNjb3VudFtcImlkXCJdO1xuICAgIGdpdGh1YjogR2l0SHViUmVwbztcbiAgICBnaXRIdWJTZXJ2aWNlOiBHaXRIdWJTZXJ2aWNlO1xuICAgIG1zaUNsaWVudDogTWFuYWdlZFNlcnZpY2VJZGVudGl0eUNsaWVudDtcbiAgICBuYW1lOiBFbnZpcm9ubWVudElkW1wibmFtZVwiXTtcbiAgICByZXNvdXJjZUdyb3VwTmFtZTogQm9vdHN0cmFwcGVyUmVzb3VyY2VHcm91cE5hbWU7XG4gICAgcnVubmVyQXBwQ3JlZGVudGlhbHM/OiBHaXRIdWJBcHBDcmVkZW50aWFscztcbiAgICB0ZW5hbnRJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcImdlblwiLCBcImVudlwiXSk7XG4gICAgY29uc3QgY2RFbnZpcm9ubWVudE5hbWUgPSBgYm9vdHN0cmFwcGVyLSR7bmFtZX0tY2RgO1xuICAgIGNvbnN0IGNpRW52aXJvbm1lbnROYW1lID0gYGJvb3RzdHJhcHBlci0ke25hbWV9LWNpYDtcbiAgICBjb25zdCBlbnZpcm9ubWVudElkZW50aXRpZXMgPSBbXG4gICAgICB7XG4gICAgICAgIGVudmlyb25tZW50TmFtZTogY2RFbnZpcm9ubWVudE5hbWUsXG4gICAgICAgIGlkZW50aXR5Q2xpZW50SWQ6IGNkSWRlbnRpdHlDbGllbnRJZCxcbiAgICAgICAgaWRlbnRpdHlOYW1lOiBjZElkZW50aXR5TmFtZSxcbiAgICAgICAgcnVubmVyQXBwQ3JlZGVudGlhbHMsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBlbnZpcm9ubWVudE5hbWU6IGNpRW52aXJvbm1lbnROYW1lLFxuICAgICAgICBpZGVudGl0eUNsaWVudElkOiBjaUlkZW50aXR5Q2xpZW50SWQsXG4gICAgICAgIGlkZW50aXR5TmFtZTogY2lJZGVudGl0eU5hbWUsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICAvLyBJbmNsdWRlIGEgcmVwb3NpdG9yeS1kZXJpdmVkIHN1ZmZpeCBzbyBkaWZmZXJlbnQgcmVwb3NpdG9yaWVzIGNhbiBzaGFyZVxuICAgIC8vIHRoZSBzYW1lIGJvb3RzdHJhcCBpZGVudGl0eSB3aXRob3V0IG92ZXJ3cml0aW5nIGVhY2ggb3RoZXIncyBPSURDIHRydXN0LlxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZW52aXJvbm1lbnRJZGVudGl0aWVzLm1hcCgoeyBlbnZpcm9ubWVudE5hbWUsIGlkZW50aXR5TmFtZSB9KSA9PlxuICAgICAgICBtc2lDbGllbnQuZmVkZXJhdGVkSWRlbnRpdHlDcmVkZW50aWFscy5jcmVhdGVPclVwZGF0ZShcbiAgICAgICAgICByZXNvdXJjZUdyb3VwTmFtZSxcbiAgICAgICAgICBpZGVudGl0eU5hbWUsXG4gICAgICAgICAgdGhpcy4jY3JlYXRlRmVkZXJhdGVkQ3JlZGVudGlhbE5hbWUoe1xuICAgICAgICAgICAgZ2l0aHViLFxuICAgICAgICAgICAgZ2l0aHViRW52aXJvbm1lbnROYW1lOiBlbnZpcm9ubWVudE5hbWUsXG4gICAgICAgICAgfSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXVkaWVuY2VzOiBbXCJhcGk6Ly9BenVyZUFEVG9rZW5FeGNoYW5nZVwiXSxcbiAgICAgICAgICAgIGlzc3VlcjogXCJodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tXCIsXG4gICAgICAgICAgICBzdWJqZWN0OiBgcmVwbzoke2dpdGh1Yi5vd25lcn0vJHtnaXRodWIucmVwb306ZW52aXJvbm1lbnQ6JHtlbnZpcm9ubWVudE5hbWV9YCxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgXCJDb25maWd1cmVkIGJvb3RzdHJhcHBlciBmZWRlcmF0ZWQgaWRlbnRpdHkgY3JlZGVudGlhbHMgaW4gc3Vic2NyaXB0aW9uIHtzdWJzY3JpcHRpb25JZH1cIixcbiAgICAgIHsgc3Vic2NyaXB0aW9uSWQ6IGNsb3VkQWNjb3VudElkIH0sXG4gICAgKTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZW52aXJvbm1lbnRJZGVudGl0aWVzLm1hcChcbiAgICAgICAgKHsgZW52aXJvbm1lbnROYW1lLCBpZGVudGl0eUNsaWVudElkLCBydW5uZXJBcHBDcmVkZW50aWFscyB9KSA9PlxuICAgICAgICAgIHRoaXMuI3N0b3JlQm9vdHN0cmFwcGVyRW52aXJvbm1lbnRTZWNyZXRzKHtcbiAgICAgICAgICAgIGNsb3VkQWNjb3VudElkLFxuICAgICAgICAgICAgZ2l0aHViLFxuICAgICAgICAgICAgZ2l0aHViRW52aXJvbm1lbnROYW1lOiBlbnZpcm9ubWVudE5hbWUsXG4gICAgICAgICAgICBnaXRIdWJTZXJ2aWNlLFxuICAgICAgICAgICAgaWRlbnRpdHlDbGllbnRJZCxcbiAgICAgICAgICAgIHJ1bm5lckFwcENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgfSksXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBhc3luYyAjY3JlYXRlQm9vdHN0cmFwcGVySWRlbnRpdHkoe1xuICAgIGNsb3VkQWNjb3VudElkLFxuICAgIGlkZW50aXR5TmFtZSxcbiAgICBtc2lDbGllbnQsXG4gICAgcGFyYW1ldGVycyxcbiAgICByZXNvdXJjZUdyb3VwTmFtZSxcbiAgfToge1xuICAgIGNsb3VkQWNjb3VudElkOiBDbG91ZEFjY291bnRbXCJpZFwiXTtcbiAgICBpZGVudGl0eU5hbWU6IEJvb3RzdHJhcHBlcklkZW50aXR5TmFtZTtcbiAgICBtc2lDbGllbnQ6IE1hbmFnZWRTZXJ2aWNlSWRlbnRpdHlDbGllbnQ7XG4gICAgcGFyYW1ldGVyczogQm9vdHN0cmFwcGVySWRlbnRpdHlQYXJhbWV0ZXJzO1xuICAgIHJlc291cmNlR3JvdXBOYW1lOiBCb290c3RyYXBwZXJSZXNvdXJjZUdyb3VwTmFtZTtcbiAgfSk6IFByb21pc2U8Qm9vdHN0cmFwcGVySWRlbnRpdHk+IHtcbiAgICBjb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wiZ2VuXCIsIFwiZW52XCJdKTtcbiAgICBjb25zdCBpZGVudGl0eSA9IGF3YWl0IG1zaUNsaWVudC51c2VyQXNzaWduZWRJZGVudGl0aWVzLmNyZWF0ZU9yVXBkYXRlKFxuICAgICAgcmVzb3VyY2VHcm91cE5hbWUsXG4gICAgICBpZGVudGl0eU5hbWUsXG4gICAgICBwYXJhbWV0ZXJzLFxuICAgICk7XG5cbiAgICBhc3NlcnQub2soXG4gICAgICBpZGVudGl0eS5wcmluY2lwYWxJZCxcbiAgICAgIFwiTWFuYWdlZCBpZGVudGl0eSBwcmluY2lwYWwgSUQgaXMgdW5kZWZpbmVkXCIsXG4gICAgKTtcbiAgICBhc3NlcnQub2soaWRlbnRpdHkuY2xpZW50SWQsIFwiTWFuYWdlZCBpZGVudGl0eSBjbGllbnQgSUQgaXMgdW5kZWZpbmVkXCIpO1xuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgXCJDcmVhdGVkIGlkZW50aXR5IHtpZGVudGl0eU5hbWV9IGluIHN1YnNjcmlwdGlvbiB7c3Vic2NyaXB0aW9uSWR9XCIsXG4gICAgICB7IGlkZW50aXR5TmFtZSwgc3Vic2NyaXB0aW9uSWQ6IGNsb3VkQWNjb3VudElkIH0sXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBjbGllbnRJZDogaWRlbnRpdHkuY2xpZW50SWQsXG4gICAgICBuYW1lOiBpZGVudGl0eU5hbWUsXG4gICAgICBwcmluY2lwYWxJZDogaWRlbnRpdHkucHJpbmNpcGFsSWQsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jICNjcmVhdGVDb21tb25LZXlWYXVsdCh7XG4gICAgY2xvdWRBY2NvdW50LFxuICAgIG5hbWUsXG4gICAgcHJlZml4LFxuICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgIHNob3J0RW52LFxuICAgIHNob3J0TG9jYXRpb24sXG4gICAgdGFncyxcbiAgICB0ZW5hbnRJZCxcbiAgfToge1xuICAgIGNsb3VkQWNjb3VudDogQ2xvdWRBY2NvdW50O1xuICAgIG5hbWU6IEVudmlyb25tZW50SWRbXCJuYW1lXCJdO1xuICAgIHByZWZpeDogc3RyaW5nO1xuICAgIHJlc291cmNlR3JvdXBOYW1lOiBCb290c3RyYXBwZXJSZXNvdXJjZUdyb3VwTmFtZTtcbiAgICBzaG9ydEVudjogc3RyaW5nO1xuICAgIHNob3J0TG9jYXRpb246IHN0cmluZztcbiAgICB0YWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHRlbmFudElkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJnZW5cIiwgXCJlbnZcIl0pO1xuXG4gICAgY29uc3Qga3ZDbGllbnQgPSBuZXcgS2V5VmF1bHRNYW5hZ2VtZW50Q2xpZW50KFxuICAgICAgdGhpcy4jY3JlZGVudGlhbCxcbiAgICAgIGNsb3VkQWNjb3VudC5pZCxcbiAgICApO1xuXG4gICAgY29uc3Qga2V5VmF1bHROYW1lID0gYCR7cHJlZml4fS0ke3Nob3J0RW52fS0ke3Nob3J0TG9jYXRpb259LWNvbW1vbi1rdi0wMWA7XG4gICAgY29uc3Qgc2VjcmV0c1Byb3RlY3Rpb25FbmFibGVkID0gc2hvcnRFbnYgPT09IFwicFwiO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQga3ZDbGllbnQudmF1bHRzLmNoZWNrTmFtZUF2YWlsYWJpbGl0eSh7XG4gICAgICBuYW1lOiBrZXlWYXVsdE5hbWUsXG4gICAgICB0eXBlOiBcIk1pY3Jvc29mdC5LZXlWYXVsdC92YXVsdHNcIixcbiAgICB9KTtcblxuICAgIGF3YWl0IGt2Q2xpZW50LnZhdWx0cy5iZWdpbkNyZWF0ZU9yVXBkYXRlQW5kV2FpdChcbiAgICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAga2V5VmF1bHROYW1lLFxuICAgICAge1xuICAgICAgICBsb2NhdGlvbjogY2xvdWRBY2NvdW50LmRlZmF1bHRMb2NhdGlvbixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGNyZWF0ZU1vZGU6IHJlc3VsdC5uYW1lQXZhaWxhYmxlID8gXCJkZWZhdWx0XCIgOiBcInJlY292ZXJcIixcbiAgICAgICAgICBlbmFibGVkRm9yRGlza0VuY3J5cHRpb246IHRydWUsXG4gICAgICAgICAgZW5hYmxlUHVyZ2VQcm90ZWN0aW9uOiBzZWNyZXRzUHJvdGVjdGlvbkVuYWJsZWQgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGVuYWJsZVJiYWNBdXRob3JpemF0aW9uOiB0cnVlLFxuICAgICAgICAgIHNrdToge1xuICAgICAgICAgICAgZmFtaWx5OiBcIkFcIixcbiAgICAgICAgICAgIG5hbWU6IFwic3RhbmRhcmRcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNvZnREZWxldGVSZXRlbnRpb25JbkRheXM6IHNlY3JldHNQcm90ZWN0aW9uRW5hYmxlZCA/IDE0IDogNyxcbiAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgfSxcbiAgICAgICAgdGFnczoge1xuICAgICAgICAgIEVudmlyb25tZW50OiBuYW1lLFxuICAgICAgICAgIC4uLnRhZ3MsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBcIkNyZWF0ZWQga2V5IHZhdWx0IHtrZXlWYXVsdE5hbWV9IGluIHN1YnNjcmlwdGlvbiB7c3Vic2NyaXB0aW9uSWR9XCIsXG4gICAgICB7IGtleVZhdWx0TmFtZSwgc3Vic2NyaXB0aW9uSWQ6IGNsb3VkQWNjb3VudC5pZCB9LFxuICAgICk7XG5cbiAgICByZXR1cm4ga2V5VmF1bHROYW1lO1xuICB9XG5cbiAgI2NyZWF0ZUZlZGVyYXRlZENyZWRlbnRpYWxOYW1lKHtcbiAgICBnaXRodWIsXG4gICAgZ2l0aHViRW52aXJvbm1lbnROYW1lLFxuICB9OiB7XG4gICAgZ2l0aHViOiBHaXRIdWJSZXBvO1xuICAgIGdpdGh1YkVudmlyb25tZW50TmFtZTogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICBjb25zdCByZXBvTmFtZSA9IGdpdGh1Yi5yZXBvLnJlcGxhY2VBbGwoL1teYS16QS1aMC05LV0vZywgXCItXCIpO1xuXG4gICAgcmV0dXJuIGAke3JlcG9OYW1lfS0ke2dpdGh1YkVudmlyb25tZW50TmFtZX1gO1xuICB9XG5cbiAgI2NyZWF0ZVJvbGVBc3NpZ25tZW50TmFtZShcbiAgICBzY29wZTogc3RyaW5nLFxuICAgIHByaW5jaXBhbElkOiBzdHJpbmcsXG4gICAgcm9sZURlZmluaXRpb25JZDogc3RyaW5nLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKFwic2hhMjU2XCIpXG4gICAgICAudXBkYXRlKGAke3Njb3BlfToke3ByaW5jaXBhbElkfToke3JvbGVEZWZpbml0aW9uSWR9YClcbiAgICAgIC5kaWdlc3QoXCJoZXhcIik7XG5cbiAgICByZXR1cm4gYCR7aGFzaC5zbGljZSgwLCA4KX0tJHtoYXNoLnNsaWNlKDgsIDEyKX0tJHtoYXNoLnNsaWNlKFxuICAgICAgMTIsXG4gICAgICAxNixcbiAgICApfS0ke2hhc2guc2xpY2UoMTYsIDIwKX0tJHtoYXNoLnNsaWNlKDIwLCAzMil9YDtcbiAgfVxuXG4gICNjcmVhdGVSb2xlRGVmaW5pdGlvblJlc291cmNlSWQoXG4gICAgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZyxcbiAgICByb2xlRGVmaW5pdGlvbklkOiBzdHJpbmcsXG4gICk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAvc3Vic2NyaXB0aW9ucy8ke3N1YnNjcmlwdGlvbklkfS9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcm9sZURlZmluaXRpb25zLyR7cm9sZURlZmluaXRpb25JZH1gO1xuICB9XG5cbiAgYXN5bmMgI2dldEJvb3RzdHJhcHBlcklkZW50aXR5KHtcbiAgICBjbG91ZEFjY291bnRJZCxcbiAgICBpZGVudGl0eU5hbWUsXG4gICAgbXNpQ2xpZW50LFxuICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICB9OiB7XG4gICAgY2xvdWRBY2NvdW50SWQ6IENsb3VkQWNjb3VudFtcImlkXCJdO1xuICAgIGlkZW50aXR5TmFtZTogQm9vdHN0cmFwcGVySWRlbnRpdHlOYW1lO1xuICAgIG1zaUNsaWVudDogTWFuYWdlZFNlcnZpY2VJZGVudGl0eUNsaWVudDtcbiAgICByZXNvdXJjZUdyb3VwTmFtZTogQm9vdHN0cmFwcGVyUmVzb3VyY2VHcm91cE5hbWU7XG4gIH0pOiBQcm9taXNlPFBpY2s8Qm9vdHN0cmFwcGVySWRlbnRpdHksIFwiY2xpZW50SWRcIiB8IFwibmFtZVwiPj4ge1xuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJnZW5cIiwgXCJlbnZcIl0pO1xuICAgIGNvbnN0IGlkZW50aXR5ID0gYXdhaXQgbXNpQ2xpZW50LnVzZXJBc3NpZ25lZElkZW50aXRpZXMuZ2V0KFxuICAgICAgcmVzb3VyY2VHcm91cE5hbWUsXG4gICAgICBpZGVudGl0eU5hbWUsXG4gICAgKTtcblxuICAgIGFzc2VydC5vayhpZGVudGl0eS5jbGllbnRJZCwgXCJNYW5hZ2VkIGlkZW50aXR5IGNsaWVudCBJRCBpcyB1bmRlZmluZWRcIik7XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBcIlJlYWQgaWRlbnRpdHkge2lkZW50aXR5TmFtZX0gaW4gc3Vic2NyaXB0aW9uIHtzdWJzY3JpcHRpb25JZH1cIixcbiAgICAgIHsgaWRlbnRpdHlOYW1lLCBzdWJzY3JpcHRpb25JZDogY2xvdWRBY2NvdW50SWQgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsaWVudElkOiBpZGVudGl0eS5jbGllbnRJZCxcbiAgICAgIG5hbWU6IGlkZW50aXR5TmFtZSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgI2dldEN1cnJlbnRQcmluY2lwYWxJZHMoKTogUHJvbWlzZTxTZXQ8c3RyaW5nPj4ge1xuICAgIC8vIENyZWF0ZSBHcmFwaCBjbGllbnQgd2l0aCBjdXN0b20gYXV0aCBwcm92aWRlciB0aGF0IGZldGNoZXMgZnJlc2ggdG9rZW5zXG4gICAgY29uc3QgZ3JhcGhDbGllbnQgPSBDbGllbnQuaW5pdCh7XG4gICAgICBhdXRoUHJvdmlkZXI6IGFzeW5jIChkb25lKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdG9rZW5SZXNwb25zZSA9IGF3YWl0IHRoaXMuI2NyZWRlbnRpYWwuZ2V0VG9rZW4oXG4gICAgICAgICAgICBcImh0dHBzOi8vZ3JhcGgubWljcm9zb2Z0LmNvbS8uZGVmYXVsdFwiLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCF0b2tlblJlc3BvbnNlKSB7XG4gICAgICAgICAgICBkb25lKFxuICAgICAgICAgICAgICBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gYWNxdWlyZSB0b2tlbiBmb3IgTWljcm9zb2Z0IEdyYXBoXCIpLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZG9uZShudWxsLCB0b2tlblJlc3BvbnNlLnRva2VuKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBkb25lKGVycm9yIGFzIEVycm9yLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEdldCBjdXJyZW50IHVzZXIncyBpbmZvXG4gICAgY29uc3QgbWVSZXNwb25zZSA9IGF3YWl0IGdyYXBoQ2xpZW50LmFwaShcIi9tZVwiKS5nZXQoKTtcbiAgICBjb25zdCBtZSA9IGdyYXBoVXNlclJlc3BvbnNlU2NoZW1hLnBhcnNlKG1lUmVzcG9uc2UpO1xuICAgIGNvbnN0IHVzZXJPYmplY3RJZCA9IG1lLmlkO1xuXG4gICAgLy8gR2V0IGFsbCBncm91cCBtZW1iZXJzaGlwcyAodHJhbnNpdGl2ZSAtIGluY2x1ZGVzIG5lc3RlZCBncm91cHMpXG4gICAgY29uc3QgZ3JvdXBJZHM6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IG5leHRMaW5rOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBcIi9tZS90cmFuc2l0aXZlTWVtYmVyT2Y/JHNlbGVjdD1pZFwiO1xuXG4gICAgd2hpbGUgKG5leHRMaW5rKSB7XG4gICAgICBjb25zdCByYXdSZXNwb25zZSA9IGF3YWl0IGdyYXBoQ2xpZW50LmFwaShuZXh0TGluaykuZ2V0KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGdyYXBoR3JvdXBNZW1iZXJzaGlwUmVzcG9uc2VTY2hlbWEucGFyc2UocmF3UmVzcG9uc2UpO1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJlc3BvbnNlLnZhbHVlKSB7XG4gICAgICAgIGdyb3VwSWRzLnB1c2goaXRlbS5pZCk7XG4gICAgICB9XG4gICAgICBuZXh0TGluayA9IHJlc3BvbnNlW1wiQG9kYXRhLm5leHRMaW5rXCJdO1xuICAgIH1cblxuICAgIC8vIEFsbCBwcmluY2lwYWwgSURzIHRvIGNoZWNrICh1c2VyICsgYWxsIGdyb3VwcylcbiAgICBjb25zdCBhbGxQcmluY2lwYWxJZHMgPSBuZXcgU2V0KFt1c2VyT2JqZWN0SWQsIC4uLmdyb3VwSWRzXSk7XG4gICAgcmV0dXJuIGFsbFByaW5jaXBhbElkcztcbiAgfVxuXG4gIGFzeW5jICNyZWdpc3RlclByb3ZpZGVycyhzdWJzY3JpcHRpb25JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcImR4LWNsaVwiLCBcInJlZ2lzdGVyLXByb3ZpZGVyc1wiXSk7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFJlc291cmNlTWFuYWdlbWVudENsaWVudChcbiAgICAgIHRoaXMuI2NyZWRlbnRpYWwsXG4gICAgICBzdWJzY3JpcHRpb25JZCxcbiAgICApO1xuXG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBcIlJlZ2lzdGVyaW5nIHtjb3VudH0gcmVzb3VyY2UgcHJvdmlkZXJzIG9uIHN1YnNjcmlwdGlvbiB7c3Vic2NyaXB0aW9uSWR9XCIsXG4gICAgICB7IGNvdW50OiB0aGlzLiNyZXF1aXJlZFJlc291cmNlUHJvdmlkZXJzLmxlbmd0aCwgc3Vic2NyaXB0aW9uSWQgfSxcbiAgICApO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0aGlzLiNyZXF1aXJlZFJlc291cmNlUHJvdmlkZXJzLm1hcChhc3luYyAobmFtZXNwYWNlKSA9PiB7XG4gICAgICAgIGF3YWl0IGNsaWVudC5wcm92aWRlcnMucmVnaXN0ZXIobmFtZXNwYWNlKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiUmVnaXN0ZXJlZCBwcm92aWRlciB7bmFtZXNwYWNlfVwiLCB7IG5hbWVzcGFjZSB9KTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBsb2dnZXIuaW5mbyhcbiAgICAgIFwiQWxsIHJlc291cmNlIHByb3ZpZGVycyByZWdpc3RlcmVkIG9uIHN1YnNjcmlwdGlvbiB7c3Vic2NyaXB0aW9uSWR9XCIsXG4gICAgICB7IHN1YnNjcmlwdGlvbklkIH0sXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jICNzdG9yZUJvb3RzdHJhcHBlckVudmlyb25tZW50U2VjcmV0cyh7XG4gICAgY2xvdWRBY2NvdW50SWQsXG4gICAgZ2l0aHViLFxuICAgIGdpdGh1YkVudmlyb25tZW50TmFtZSxcbiAgICBnaXRIdWJTZXJ2aWNlLFxuICAgIGlkZW50aXR5Q2xpZW50SWQsXG4gICAgcnVubmVyQXBwQ3JlZGVudGlhbHMsXG4gICAgdGVuYW50SWQsXG4gIH06IHtcbiAgICBjbG91ZEFjY291bnRJZDogc3RyaW5nO1xuICAgIGdpdGh1YjogR2l0SHViUmVwbztcbiAgICBnaXRodWJFbnZpcm9ubWVudE5hbWU6IHN0cmluZztcbiAgICBnaXRIdWJTZXJ2aWNlOiBHaXRIdWJTZXJ2aWNlO1xuICAgIGlkZW50aXR5Q2xpZW50SWQ6IHN0cmluZztcbiAgICBydW5uZXJBcHBDcmVkZW50aWFscz86IEdpdEh1YkFwcENyZWRlbnRpYWxzO1xuICAgIHRlbmFudElkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wiZ2VuXCIsIFwiZW52XCJdKTtcblxuICAgIGNvbnN0IGNvbW1vblNlY3JldHMgPSBbXG4gICAgICB7IHNlY3JldE5hbWU6IFwiQVJNX0NMSUVOVF9JRFwiLCBzZWNyZXRWYWx1ZTogaWRlbnRpdHlDbGllbnRJZCB9LFxuICAgICAgeyBzZWNyZXROYW1lOiBcIkFSTV9URU5BTlRfSURcIiwgc2VjcmV0VmFsdWU6IHRlbmFudElkIH0sXG4gICAgICB7IHNlY3JldE5hbWU6IFwiQVJNX1NVQlNDUklQVElPTl9JRFwiLCBzZWNyZXRWYWx1ZTogY2xvdWRBY2NvdW50SWQgfSxcbiAgICBdO1xuICAgIGNvbnN0IHJlbGVhc2VTZWNyZXRzID0gcnVubmVyQXBwQ3JlZGVudGlhbHNcbiAgICAgID8gW1xuICAgICAgICAgIHsgc2VjcmV0TmFtZTogXCJHSF9BUFBfSURcIiwgc2VjcmV0VmFsdWU6IHJ1bm5lckFwcENyZWRlbnRpYWxzLmlkIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VjcmV0TmFtZTogXCJHSF9BUFBfQ0xJRU5UX0lEXCIsXG4gICAgICAgICAgICBzZWNyZXRWYWx1ZTogcnVubmVyQXBwQ3JlZGVudGlhbHMuY2xpZW50SWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWNyZXROYW1lOiBcIkdIX0FQUF9JTlNUQUxMQVRJT05fSURcIixcbiAgICAgICAgICAgIHNlY3JldFZhbHVlOiBydW5uZXJBcHBDcmVkZW50aWFscy5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlY3JldE5hbWU6IFwiR0hfQVBQX0tFWVwiLFxuICAgICAgICAgICAgc2VjcmV0VmFsdWU6IHJ1bm5lckFwcENyZWRlbnRpYWxzLmtleS50cmltRW5kKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgXVxuICAgICAgOiBbXTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgWy4uLmNvbW1vblNlY3JldHMsIC4uLnJlbGVhc2VTZWNyZXRzXS5tYXAoKHsgc2VjcmV0TmFtZSwgc2VjcmV0VmFsdWUgfSkgPT5cbiAgICAgICAgZ2l0SHViU2VydmljZS5jcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0KHtcbiAgICAgICAgICBlbnZpcm9ubWVudE5hbWU6IGdpdGh1YkVudmlyb25tZW50TmFtZSxcbiAgICAgICAgICBvd25lcjogZ2l0aHViLm93bmVyLFxuICAgICAgICAgIHJlcG86IGdpdGh1Yi5yZXBvLFxuICAgICAgICAgIHNlY3JldE5hbWUsXG4gICAgICAgICAgc2VjcmV0VmFsdWUsXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgbG9nZ2VyLmRlYnVnKFwiU2V0IEdpdEh1YiBlbnZpcm9ubWVudCBzZWNyZXRzIGZvciB7ZW52aXJvbm1lbnROYW1lfVwiLCB7XG4gICAgICBlbnZpcm9ubWVudE5hbWU6IGdpdGh1YkVudmlyb25tZW50TmFtZSxcbiAgICAgIHN1YnNjcmlwdGlvbklkOiBjbG91ZEFjY291bnRJZCxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jICNzdG9yZVJ1bm5lckFwcFNlY3JldHMoe1xuICAgIGNsb3VkQWNjb3VudElkLFxuICAgIGtleVZhdWx0TmFtZSxcbiAgICBydW5uZXJBcHBDcmVkZW50aWFscyxcbiAgfToge1xuICAgIGNsb3VkQWNjb3VudElkOiBzdHJpbmc7XG4gICAga2V5VmF1bHROYW1lOiBzdHJpbmc7XG4gICAgcnVubmVyQXBwQ3JlZGVudGlhbHM6IEdpdEh1YkFwcENyZWRlbnRpYWxzO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcImdlblwiLCBcImVudlwiXSk7XG5cbiAgICBhd2FpdCB0aGlzLiN3YWl0Rm9yS2V5VmF1bHREbnNSZXNvbHV0aW9uKHtcbiAgICAgIGNsb3VkQWNjb3VudElkLFxuICAgICAga2V5VmF1bHROYW1lLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2VjcmV0Q2xpZW50ID0gbmV3IFNlY3JldENsaWVudChcbiAgICAgIGBodHRwczovLyR7a2V5VmF1bHROYW1lfS52YXVsdC5henVyZS5uZXQvYCxcbiAgICAgIHRoaXMuI2NyZWRlbnRpYWwsXG4gICAgKTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHNlY3JldENsaWVudC5zZXRTZWNyZXQoXCJnaXRodWItcnVubmVyLWFwcC1pZFwiLCBydW5uZXJBcHBDcmVkZW50aWFscy5pZCksXG4gICAgICBzZWNyZXRDbGllbnQuc2V0U2VjcmV0KFxuICAgICAgICBcImdpdGh1Yi1ydW5uZXItYXBwLWluc3RhbGxhdGlvbi1pZFwiLFxuICAgICAgICBydW5uZXJBcHBDcmVkZW50aWFscy5pbnN0YWxsYXRpb25JZCxcbiAgICAgICksXG4gICAgICBzZWNyZXRDbGllbnQuc2V0U2VjcmV0KFxuICAgICAgICBcImdpdGh1Yi1ydW5uZXItYXBwLWtleVwiLFxuICAgICAgICBydW5uZXJBcHBDcmVkZW50aWFscy5rZXkudHJpbUVuZCgpLCAvLyBzdHJpcCB0cmFpbGluZyBuZXdsaW5lcyBmcm9tIFBFTSBrZXlzXG4gICAgICApLFxuICAgIF0pO1xuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgXCJDcmVhdGVkIHNlY3JldHMgaW4ga2V5IHZhdWx0IHtrZXlWYXVsdE5hbWV9IGluIHN1YnNjcmlwdGlvbiB7c3Vic2NyaXB0aW9uSWR9XCIsXG4gICAgICB7IGtleVZhdWx0TmFtZSwgc3Vic2NyaXB0aW9uSWQ6IGNsb3VkQWNjb3VudElkIH0sXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jICN3YWl0Rm9yS2V5VmF1bHREbnNSZXNvbHV0aW9uKHtcbiAgICBjbG91ZEFjY291bnRJZCxcbiAgICBrZXlWYXVsdE5hbWUsXG4gIH06IHtcbiAgICBjbG91ZEFjY291bnRJZDogQ2xvdWRBY2NvdW50W1wiaWRcIl07XG4gICAga2V5VmF1bHROYW1lOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wiZ2VuXCIsIFwiZW52XCJdKTtcbiAgICBjb25zdCBob3N0bmFtZSA9IGAke2tleVZhdWx0TmFtZX0udmF1bHQuYXp1cmUubmV0YDtcblxuICAgIC8vIEF6dXJlIGNhbiByZXBvcnQgdGhlIHZhdWx0IGFzIGNyZWF0ZWQgYmVmb3JlIGl0cyBwdWJsaWMgRE5TIG5hbWUgaXMgcmVhZHkuXG4gICAgLy8gV2FpdCBoZXJlIHNvIHdyaXRpbmcgcnVubmVyIGFwcCBzZWNyZXRzIGRvZXMgbm90IGZhaWwgd2l0aCBFTk9URk9VTkQuXG4gICAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0ga2V5VmF1bHREbnNSZWFkeU1heEF0dGVtcHRzOyBhdHRlbXB0KyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGxvb2t1cChob3N0bmFtZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAha2V5VmF1bHREbnNFcnJvclNjaGVtYS5zYWZlUGFyc2UoY2F1c2UpLnN1Y2Nlc3MgfHxcbiAgICAgICAgICBhdHRlbXB0ID09PSBrZXlWYXVsdERuc1JlYWR5TWF4QXR0ZW1wdHNcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEtleSB2YXVsdCBlbmRwb2ludCAnJHtob3N0bmFtZX0nIGlzIG5vdCByZXNvbHZhYmxlYCxcbiAgICAgICAgICAgIHsgY2F1c2UgfSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIFwiV2FpdGluZyBmb3Iga2V5IHZhdWx0IGVuZHBvaW50IHtob3N0bmFtZX0gdG8gYmVjb21lIHJlc29sdmFibGUgaW4gc3Vic2NyaXB0aW9uIHtzdWJzY3JpcHRpb25JZH1cIixcbiAgICAgICAgICB7IGhvc3RuYW1lLCBzdWJzY3JpcHRpb25JZDogY2xvdWRBY2NvdW50SWQgfSxcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgc2xlZXAoa2V5VmF1bHREbnNSZWFkeVJldHJ5RGVsYXlNcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -22,12 +22,27 @@ import { UndiciInstrumentation } from "@opentelemetry/instrumentation-undici";
22
22
  // import-in-the-middle and module must be the first imports so that
23
23
  // createAddHookMessageChannel / register run as early as possible.
24
24
  import { createAddHookMessageChannel } from "import-in-the-middle";
25
+ import { register as registerSyncHooks, supportsSyncHooks, } from "import-in-the-middle/register-hooks.mjs";
25
26
  import { register } from "module";
26
27
  import os from "node:os";
27
- const { registerOptions, waitForAllMessagesAcknowledged } = createAddHookMessageChannel();
28
28
  // Register the ESM module hook so that subsequent dynamic imports are
29
29
  // intercepted by OpenTelemetry's module instrumentation.
30
- register("import-in-the-middle/hook.mjs", import.meta.url, registerOptions);
30
+ //
31
+ // Prefer the synchronous, non-deprecated `module.registerHooks()` path
32
+ // (import-in-the-middle's register-hooks.mjs) when the running Node.js
33
+ // correctly supports it. Otherwise fall back to the deprecated but broadly
34
+ // compatible `module.register()` + message channel approach, since apps/cli's
35
+ // declared `engines.node` (>=22.0.0) spans patch versions that predate the
36
+ // Node fix `supportsSyncHooks()` checks for (nodejs/node#59929).
37
+ let waitForAllMessagesAcknowledged = () => Promise.resolve();
38
+ if (supportsSyncHooks()) {
39
+ registerSyncHooks();
40
+ }
41
+ else {
42
+ const { registerOptions, waitForAllMessagesAcknowledged: wait } = createAddHookMessageChannel();
43
+ register("import-in-the-middle/hook.mjs", import.meta.url, registerOptions);
44
+ waitForAllMessagesAcknowledged = wait;
45
+ }
31
46
  // Set service name before useAzureMonitor() initialises the Resource so
32
47
  // that Azure Monitor picks it up as the cloud_RoleName.
33
48
  process.env["OTEL_SERVICE_NAME"] = "cli";
@@ -77,8 +92,9 @@ export const enableAzureMonitor = () => {
77
92
  tracerProvider: trace.getTracerProvider(),
78
93
  });
79
94
  };
80
- // Block module evaluation until the hook is fully acknowledged.
81
- // This ensures that when bin/index.js proceeds to import the CLI entry
82
- // module, all transitive imports go through the registered hook.
95
+ // Block module evaluation until the hook is fully acknowledged (a no-op on
96
+ // the synchronous path, which needs no acknowledgement). This ensures that
97
+ // when bin/index.js proceeds to import the CLI entry module, all transitive
98
+ // imports go through the registered hook.
83
99
  await waitForAllMessagesAcknowledged();
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FkYXB0ZXJzL2F6dXJlLW1vbml0b3IvaW5zdHJ1bWVudGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsb0VBQW9FO0FBQ3BFLG1FQUFtRTtBQUNuRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV6QixNQUFNLEVBQUUsZUFBZSxFQUFFLDhCQUE4QixFQUFFLEdBQ3ZELDJCQUEyQixFQUFFLENBQUM7QUFFaEMsc0VBQXNFO0FBQ3RFLHlEQUF5RDtBQUN6RCxRQUFRLENBQUMsK0JBQStCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFFNUUsd0VBQXdFO0FBQ3hFLHdEQUF3RDtBQUN4RCxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsR0FBRztJQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO0lBQ3ZDLHNCQUFzQjtDQUN2QjtLQUNFLE1BQU0sQ0FBQyxPQUFPLENBQUM7S0FDZixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFYixrRkFBa0Y7QUFDbEYsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2pDLE1BQU0sTUFBTSxHQUFHLFVBQVUsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQy9ELE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsR0FBRztJQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO0lBQ3ZDLFdBQVcsTUFBTSxFQUFFO0lBQ25CLGNBQWMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO0lBQzVCLGNBQWMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO0NBQzdCO0tBQ0UsTUFBTSxDQUFDLE9BQU8sQ0FBQztLQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUViLElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0FBRWhDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxHQUFTLEVBQUU7SUFDM0MsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBQ3hCLE9BQU87SUFDVCxDQUFDO0lBQ0QsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0lBRTNCLGVBQWUsQ0FBQztRQUNkLDJCQUEyQixFQUFFO1lBQzNCLGdCQUFnQixFQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMscUNBQXFDO2dCQUNqRCx3UEFBd1A7U0FDM1A7UUFDRCxpQkFBaUIsRUFBRSxJQUFJO0tBQ3hCLENBQUMsQ0FBQztJQUVILHlFQUF5RTtJQUN6RSw0RUFBNEU7SUFDNUUsd0JBQXdCLENBQUM7UUFDdkIsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDL0MsYUFBYSxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtRQUN6QyxjQUFjLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFO0tBQzFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLGdFQUFnRTtBQUNoRSx1RUFBdUU7QUFDdkUsaUVBQWlFO0FBQ2pFLE1BQU0sOEJBQThCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT1RlbCBwcmVsb2FkIG1vZHVsZSBmb3IgdGhlIGR4IENMSS5cbiAqXG4gKiBUaGlzIG1vZHVsZSBpcyBhIGRlbGliZXJhdGUgc2lkZS1lZmZlY3QgZW50cnlwb2ludC4gSXQgTVVTVCBiZSB0aGUgZmlyc3RcbiAqIG1vZHVsZSBsb2FkZWQgYnkgdGhlIHByb2Nlc3MgKHZpYSBhIHNlcXVlbnRpYWwgZHluYW1pYyBpbXBvcnQgaW4gYmluL2luZGV4LmpzKVxuICogc28gdGhhdCBpbXBvcnQtaW4tdGhlLW1pZGRsZSBjYW4gcmVnaXN0ZXIgaXRzIGhvb2sgYmVmb3JlIGFueSBIVFRQIGNsaWVudFxuICogbGlicmFyaWVzICh1bmRpY2kvZmV0Y2gsIG9jdG9raXQsIEF6dXJlIFNES3MpIGFyZSBsb2FkZWQuXG4gKlxuICogSW5pdGlhbGlzaW5nIHRoZSBBenVyZSBNb25pdG9yIGV4cG9ydGVyIGlzIGRlZmVycmVkIHRvIGBlbmFibGVBenVyZU1vbml0b3IoKWBcbiAqIHNvIHRoZSBDTEkgY2FuIGRlY2lkZSBhdCBydW50aW1lIHdoZXRoZXIgdG8gZW1pdCB0ZWxlbWV0cnkgKG9ubHkgUGFnb1BBIG9yZ1xuICogbWVtYmVycyBkbykuIFRoZSBpbXBvcnQtaW4tdGhlLW1pZGRsZSBob29rIGlzIHN0aWxsIHJlZ2lzdGVyZWQgZWFnZXJseSBhdFxuICogcHJlbG9hZCBiZWNhdXNlIGl0IG11c3QgcnVuIGJlZm9yZSBhbnkgaW5zdHJ1bWVudGVkIG1vZHVsZSBpcyBpbXBvcnRlZC5cbiAqXG4gKiBSZWFkcyBBUFBMSUNBVElPTklOU0lHSFRTX0NPTk5FQ1RJT05fU1RSSU5HIGZyb20gcHJvY2Vzcy5lbnYgYmVjYXVzZSB0aGlzIElTXG4gKiB0aGUgY29uZmlndXJhdGlvbiBib3VuZGFyeSDigJQgbm8gaGlnaGVyIGNhbGxlciBjYW4gaW5qZWN0IGNvbmZpZyBhdCB0aGlzIHBvaW50XG4gKiBpbiB0aGUgcHJvY2VzcyBsaWZlY3ljbGUuXG4gKi9cblxuaW1wb3J0IHsgdXNlQXp1cmVNb25pdG9yIH0gZnJvbSBcIkBhenVyZS9tb25pdG9yLW9wZW50ZWxlbWV0cnlcIjtcbmltcG9ydCB7IG1ldHJpY3MsIHRyYWNlIH0gZnJvbSBcIkBvcGVudGVsZW1ldHJ5L2FwaVwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zIH0gZnJvbSBcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvblwiO1xuaW1wb3J0IHsgVW5kaWNpSW5zdHJ1bWVudGF0aW9uIH0gZnJvbSBcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi11bmRpY2lcIjtcbi8vIGltcG9ydC1pbi10aGUtbWlkZGxlIGFuZCBtb2R1bGUgbXVzdCBiZSB0aGUgZmlyc3QgaW1wb3J0cyBzbyB0aGF0XG4vLyBjcmVhdGVBZGRIb29rTWVzc2FnZUNoYW5uZWwgLyByZWdpc3RlciBydW4gYXMgZWFybHkgYXMgcG9zc2libGUuXG5pbXBvcnQgeyBjcmVhdGVBZGRIb29rTWVzc2FnZUNoYW5uZWwgfSBmcm9tIFwiaW1wb3J0LWluLXRoZS1taWRkbGVcIjtcbmltcG9ydCB7IHJlZ2lzdGVyIH0gZnJvbSBcIm1vZHVsZVwiO1xuaW1wb3J0IG9zIGZyb20gXCJub2RlOm9zXCI7XG5cbmNvbnN0IHsgcmVnaXN0ZXJPcHRpb25zLCB3YWl0Rm9yQWxsTWVzc2FnZXNBY2tub3dsZWRnZWQgfSA9XG4gIGNyZWF0ZUFkZEhvb2tNZXNzYWdlQ2hhbm5lbCgpO1xuXG4vLyBSZWdpc3RlciB0aGUgRVNNIG1vZHVsZSBob29rIHNvIHRoYXQgc3Vic2VxdWVudCBkeW5hbWljIGltcG9ydHMgYXJlXG4vLyBpbnRlcmNlcHRlZCBieSBPcGVuVGVsZW1ldHJ5J3MgbW9kdWxlIGluc3RydW1lbnRhdGlvbi5cbnJlZ2lzdGVyKFwiaW1wb3J0LWluLXRoZS1taWRkbGUvaG9vay5tanNcIiwgaW1wb3J0Lm1ldGEudXJsLCByZWdpc3Rlck9wdGlvbnMpO1xuXG4vLyBTZXQgc2VydmljZSBuYW1lIGJlZm9yZSB1c2VBenVyZU1vbml0b3IoKSBpbml0aWFsaXNlcyB0aGUgUmVzb3VyY2Ugc29cbi8vIHRoYXQgQXp1cmUgTW9uaXRvciBwaWNrcyBpdCB1cCBhcyB0aGUgY2xvdWRfUm9sZU5hbWUuXG5wcm9jZXNzLmVudltcIk9URUxfU0VSVklDRV9OQU1FXCJdID0gXCJjbGlcIjtcbnByb2Nlc3MuZW52W1wiT1RFTF9SRVNPVVJDRV9BVFRSSUJVVEVTXCJdID0gW1xuICBwcm9jZXNzLmVudltcIk9URUxfUkVTT1VSQ0VfQVRUUklCVVRFU1wiXSxcbiAgXCJzZXJ2aWNlLm5hbWVzcGFjZT1keFwiLFxuXVxuICAuZmlsdGVyKEJvb2xlYW4pXG4gIC5qb2luKFwiLFwiKTtcblxuLy8gb3MucGxhdGZvcm0oKSByZXR1cm5zIFwid2luMzJcIiBvbiBXaW5kb3dzOyB0aGUgT1RlbCBvcy50eXBlIGVudW0gdXNlcyBcIndpbmRvd3NcIi5cbmNvbnN0IG9zUGxhdGZvcm0gPSBvcy5wbGF0Zm9ybSgpO1xuY29uc3Qgb3NUeXBlID0gb3NQbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiID8gXCJ3aW5kb3dzXCIgOiBvc1BsYXRmb3JtO1xucHJvY2Vzcy5lbnZbXCJPVEVMX1JFU09VUkNFX0FUVFJJQlVURVNcIl0gPSBbXG4gIHByb2Nlc3MuZW52W1wiT1RFTF9SRVNPVVJDRV9BVFRSSUJVVEVTXCJdLFxuICBgb3MudHlwZT0ke29zVHlwZX1gLFxuICBgb3MudmVyc2lvbj0ke29zLnJlbGVhc2UoKX1gLFxuICBgb3MubWFjaGluZT0ke29zLm1hY2hpbmUoKX1gLFxuXVxuICAuZmlsdGVyKEJvb2xlYW4pXG4gIC5qb2luKFwiLFwiKTtcblxubGV0IGF6dXJlTW9uaXRvckVuYWJsZWQgPSBmYWxzZTtcblxuLyoqXG4gKiBJbml0aWFsaXNlcyB0aGUgQXp1cmUgTW9uaXRvciBleHBvcnRlciBhbmQgcmVnaXN0ZXJzIEhUVFAgaW5zdHJ1bWVudGF0aW9uLlxuICpcbiAqIERlZmVycmVkIChub3QgcnVuIGF0IHByZWxvYWQpIHNvIHRoZSBDTEkgb25seSBlbWl0cyB0ZWxlbWV0cnkgb25jZSBpdCBoYXNcbiAqIGNvbmZpcm1lZCB0aGUgdXNlciBpcyBhIFBhZ29QQSBvcmcgbWVtYmVyLiBJZGVtcG90ZW50OiBzYWZlIHRvIGNhbGwgbW9yZSB0aGFuXG4gKiBvbmNlLiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgbG9nZ2luZyBpcyBjb25maWd1cmVkIHNvIHRoZSBsb2d0YXBlIE9UZWwgc2lua1xuICogYmluZHMgdG8gdGhlIHJlYWwgKHJhdGhlciB0aGFuIG5vLW9wKSBMb2dnZXJQcm92aWRlci5cbiAqL1xuZXhwb3J0IGNvbnN0IGVuYWJsZUF6dXJlTW9uaXRvciA9ICgpOiB2b2lkID0+IHtcbiAgaWYgKGF6dXJlTW9uaXRvckVuYWJsZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXp1cmVNb25pdG9yRW5hYmxlZCA9IHRydWU7XG5cbiAgdXNlQXp1cmVNb25pdG9yKHtcbiAgICBhenVyZU1vbml0b3JFeHBvcnRlck9wdGlvbnM6IHtcbiAgICAgIGNvbm5lY3Rpb25TdHJpbmc6XG4gICAgICAgIHByb2Nlc3MuZW52LkFQUExJQ0FUSU9OSU5TSUdIVFNfQ09OTkVDVElPTl9TVFJJTkcgfHxcbiAgICAgICAgXCJJbnN0cnVtZW50YXRpb25LZXk9ZTBmZjgwOTQtNzhmYS00NWU1LWEyMWQtZTYyYjQ1M2RjNWQxO0luZ2VzdGlvbkVuZHBvaW50PWh0dHBzOi8vaXRhbHlub3J0aC0wLmluLmFwcGxpY2F0aW9uaW5zaWdodHMuYXp1cmUuY29tLztMaXZlRW5kcG9pbnQ9aHR0cHM6Ly9pdGFseW5vcnRoLmxpdmVkaWFnbm9zdGljcy5tb25pdG9yLmF6dXJlLmNvbS87QXBwbGljYXRpb25JZD1jZTQ2OWQ1NS0yZmY3LTRkZmQtYTI0OS1jYzc4NzI5MWU2NzJcIixcbiAgICB9LFxuICAgIGVuYWJsZUxpdmVNZXRyaWNzOiB0cnVlLFxuICB9KTtcblxuICAvLyBSZWdpc3RlcmVkIGFmdGVyIHVzZUF6dXJlTW9uaXRvcigpIHNvIHRoZSBpbnN0cnVtZW50YXRpb24gYmluZHMgdG8gdGhlXG4gIC8vIHJlYWwgdHJhY2VyL21ldGVyIHByb3ZpZGVycyBpdCBpbnN0YWxscyAocmF0aGVyIHRoYW4gdGhlIG5vLW9wIGRlZmF1bHRzKS5cbiAgcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zKHtcbiAgICBpbnN0cnVtZW50YXRpb25zOiBbbmV3IFVuZGljaUluc3RydW1lbnRhdGlvbigpXSxcbiAgICBtZXRlclByb3ZpZGVyOiBtZXRyaWNzLmdldE1ldGVyUHJvdmlkZXIoKSxcbiAgICB0cmFjZXJQcm92aWRlcjogdHJhY2UuZ2V0VHJhY2VyUHJvdmlkZXIoKSxcbiAgfSk7XG59O1xuXG4vLyBCbG9jayBtb2R1bGUgZXZhbHVhdGlvbiB1bnRpbCB0aGUgaG9vayBpcyBmdWxseSBhY2tub3dsZWRnZWQuXG4vLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGJpbi9pbmRleC5qcyBwcm9jZWVkcyB0byBpbXBvcnQgdGhlIENMSSBlbnRyeVxuLy8gbW9kdWxlLCBhbGwgdHJhbnNpdGl2ZSBpbXBvcnRzIGdvIHRocm91Z2ggdGhlIHJlZ2lzdGVyZWQgaG9vay5cbmF3YWl0IHdhaXRGb3JBbGxNZXNzYWdlc0Fja25vd2xlZGdlZCgpO1xuIl19
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FkYXB0ZXJzL2F6dXJlLW1vbml0b3IvaW5zdHJ1bWVudGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsb0VBQW9FO0FBQ3BFLG1FQUFtRTtBQUNuRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsUUFBUSxJQUFJLGlCQUFpQixFQUM3QixpQkFBaUIsR0FDbEIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV6QixzRUFBc0U7QUFDdEUseURBQXlEO0FBQ3pELEVBQUU7QUFDRix1RUFBdUU7QUFDdkUsdUVBQXVFO0FBQ3ZFLDJFQUEyRTtBQUMzRSw4RUFBOEU7QUFDOUUsMkVBQTJFO0FBQzNFLGlFQUFpRTtBQUNqRSxJQUFJLDhCQUE4QixHQUF3QixHQUFHLEVBQUUsQ0FDN0QsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBRXBCLElBQUksaUJBQWlCLEVBQUUsRUFBRSxDQUFDO0lBQ3hCLGlCQUFpQixFQUFFLENBQUM7QUFDdEIsQ0FBQztLQUFNLENBQUM7SUFDTixNQUFNLEVBQUUsZUFBZSxFQUFFLDhCQUE4QixFQUFFLElBQUksRUFBRSxHQUM3RCwyQkFBMkIsRUFBRSxDQUFDO0lBQ2hDLFFBQVEsQ0FBQywrQkFBK0IsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM1RSw4QkFBOEIsR0FBRyxJQUFJLENBQUM7QUFDeEMsQ0FBQztBQUVELHdFQUF3RTtBQUN4RSx3REFBd0Q7QUFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN6QyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLEdBQUc7SUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQztJQUN2QyxzQkFBc0I7Q0FDdkI7S0FDRSxNQUFNLENBQUMsT0FBTyxDQUFDO0tBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRWIsa0ZBQWtGO0FBQ2xGLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNqQyxNQUFNLE1BQU0sR0FBRyxVQUFVLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLEdBQUc7SUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQztJQUN2QyxXQUFXLE1BQU0sRUFBRTtJQUNuQixjQUFjLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtJQUM1QixjQUFjLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtDQUM3QjtLQUNFLE1BQU0sQ0FBQyxPQUFPLENBQUM7S0FDZixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFYixJQUFJLG1CQUFtQixHQUFHLEtBQUssQ0FBQztBQUVoQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsR0FBUyxFQUFFO0lBQzNDLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUN4QixPQUFPO0lBQ1QsQ0FBQztJQUNELG1CQUFtQixHQUFHLElBQUksQ0FBQztJQUUzQixlQUFlLENBQUM7UUFDZCwyQkFBMkIsRUFBRTtZQUMzQixnQkFBZ0IsRUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLHFDQUFxQztnQkFDakQsd1BBQXdQO1NBQzNQO1FBQ0QsaUJBQWlCLEVBQUUsSUFBSTtLQUN4QixDQUFDLENBQUM7SUFFSCx5RUFBeUU7SUFDekUsNEVBQTRFO0lBQzVFLHdCQUF3QixDQUFDO1FBQ3ZCLGdCQUFnQixFQUFFLENBQUMsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQy9DLGFBQWEsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7UUFDekMsY0FBYyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtLQUMxQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRiwyRUFBMkU7QUFDM0UsMkVBQTJFO0FBQzNFLDRFQUE0RTtBQUM1RSwwQ0FBMEM7QUFDMUMsTUFBTSw4QkFBOEIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBPVGVsIHByZWxvYWQgbW9kdWxlIGZvciB0aGUgZHggQ0xJLlxuICpcbiAqIFRoaXMgbW9kdWxlIGlzIGEgZGVsaWJlcmF0ZSBzaWRlLWVmZmVjdCBlbnRyeXBvaW50LiBJdCBNVVNUIGJlIHRoZSBmaXJzdFxuICogbW9kdWxlIGxvYWRlZCBieSB0aGUgcHJvY2VzcyAodmlhIGEgc2VxdWVudGlhbCBkeW5hbWljIGltcG9ydCBpbiBiaW4vaW5kZXguanMpXG4gKiBzbyB0aGF0IGltcG9ydC1pbi10aGUtbWlkZGxlIGNhbiByZWdpc3RlciBpdHMgaG9vayBiZWZvcmUgYW55IEhUVFAgY2xpZW50XG4gKiBsaWJyYXJpZXMgKHVuZGljaS9mZXRjaCwgb2N0b2tpdCwgQXp1cmUgU0RLcykgYXJlIGxvYWRlZC5cbiAqXG4gKiBJbml0aWFsaXNpbmcgdGhlIEF6dXJlIE1vbml0b3IgZXhwb3J0ZXIgaXMgZGVmZXJyZWQgdG8gYGVuYWJsZUF6dXJlTW9uaXRvcigpYFxuICogc28gdGhlIENMSSBjYW4gZGVjaWRlIGF0IHJ1bnRpbWUgd2hldGhlciB0byBlbWl0IHRlbGVtZXRyeSAob25seSBQYWdvUEEgb3JnXG4gKiBtZW1iZXJzIGRvKS4gVGhlIGltcG9ydC1pbi10aGUtbWlkZGxlIGhvb2sgaXMgc3RpbGwgcmVnaXN0ZXJlZCBlYWdlcmx5IGF0XG4gKiBwcmVsb2FkIGJlY2F1c2UgaXQgbXVzdCBydW4gYmVmb3JlIGFueSBpbnN0cnVtZW50ZWQgbW9kdWxlIGlzIGltcG9ydGVkLlxuICpcbiAqIFJlYWRzIEFQUExJQ0FUSU9OSU5TSUdIVFNfQ09OTkVDVElPTl9TVFJJTkcgZnJvbSBwcm9jZXNzLmVudiBiZWNhdXNlIHRoaXMgSVNcbiAqIHRoZSBjb25maWd1cmF0aW9uIGJvdW5kYXJ5IOKAlCBubyBoaWdoZXIgY2FsbGVyIGNhbiBpbmplY3QgY29uZmlnIGF0IHRoaXMgcG9pbnRcbiAqIGluIHRoZSBwcm9jZXNzIGxpZmVjeWNsZS5cbiAqL1xuXG5pbXBvcnQgeyB1c2VBenVyZU1vbml0b3IgfSBmcm9tIFwiQGF6dXJlL21vbml0b3Itb3BlbnRlbGVtZXRyeVwiO1xuaW1wb3J0IHsgbWV0cmljcywgdHJhY2UgfSBmcm9tIFwiQG9wZW50ZWxlbWV0cnkvYXBpXCI7XG5pbXBvcnQgeyByZWdpc3Rlckluc3RydW1lbnRhdGlvbnMgfSBmcm9tIFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uXCI7XG5pbXBvcnQgeyBVbmRpY2lJbnN0cnVtZW50YXRpb24gfSBmcm9tIFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXVuZGljaVwiO1xuLy8gaW1wb3J0LWluLXRoZS1taWRkbGUgYW5kIG1vZHVsZSBtdXN0IGJlIHRoZSBmaXJzdCBpbXBvcnRzIHNvIHRoYXRcbi8vIGNyZWF0ZUFkZEhvb2tNZXNzYWdlQ2hhbm5lbCAvIHJlZ2lzdGVyIHJ1biBhcyBlYXJseSBhcyBwb3NzaWJsZS5cbmltcG9ydCB7IGNyZWF0ZUFkZEhvb2tNZXNzYWdlQ2hhbm5lbCB9IGZyb20gXCJpbXBvcnQtaW4tdGhlLW1pZGRsZVwiO1xuaW1wb3J0IHtcbiAgcmVnaXN0ZXIgYXMgcmVnaXN0ZXJTeW5jSG9va3MsXG4gIHN1cHBvcnRzU3luY0hvb2tzLFxufSBmcm9tIFwiaW1wb3J0LWluLXRoZS1taWRkbGUvcmVnaXN0ZXItaG9va3MubWpzXCI7XG5pbXBvcnQgeyByZWdpc3RlciB9IGZyb20gXCJtb2R1bGVcIjtcbmltcG9ydCBvcyBmcm9tIFwibm9kZTpvc1wiO1xuXG4vLyBSZWdpc3RlciB0aGUgRVNNIG1vZHVsZSBob29rIHNvIHRoYXQgc3Vic2VxdWVudCBkeW5hbWljIGltcG9ydHMgYXJlXG4vLyBpbnRlcmNlcHRlZCBieSBPcGVuVGVsZW1ldHJ5J3MgbW9kdWxlIGluc3RydW1lbnRhdGlvbi5cbi8vXG4vLyBQcmVmZXIgdGhlIHN5bmNocm9ub3VzLCBub24tZGVwcmVjYXRlZCBgbW9kdWxlLnJlZ2lzdGVySG9va3MoKWAgcGF0aFxuLy8gKGltcG9ydC1pbi10aGUtbWlkZGxlJ3MgcmVnaXN0ZXItaG9va3MubWpzKSB3aGVuIHRoZSBydW5uaW5nIE5vZGUuanNcbi8vIGNvcnJlY3RseSBzdXBwb3J0cyBpdC4gT3RoZXJ3aXNlIGZhbGwgYmFjayB0byB0aGUgZGVwcmVjYXRlZCBidXQgYnJvYWRseVxuLy8gY29tcGF0aWJsZSBgbW9kdWxlLnJlZ2lzdGVyKClgICsgbWVzc2FnZSBjaGFubmVsIGFwcHJvYWNoLCBzaW5jZSBhcHBzL2NsaSdzXG4vLyBkZWNsYXJlZCBgZW5naW5lcy5ub2RlYCAoPj0yMi4wLjApIHNwYW5zIHBhdGNoIHZlcnNpb25zIHRoYXQgcHJlZGF0ZSB0aGVcbi8vIE5vZGUgZml4IGBzdXBwb3J0c1N5bmNIb29rcygpYCBjaGVja3MgZm9yIChub2RlanMvbm9kZSM1OTkyOSkuXG5sZXQgd2FpdEZvckFsbE1lc3NhZ2VzQWNrbm93bGVkZ2VkOiAoKSA9PiBQcm9taXNlPHZvaWQ+ID0gKCkgPT5cbiAgUHJvbWlzZS5yZXNvbHZlKCk7XG5cbmlmIChzdXBwb3J0c1N5bmNIb29rcygpKSB7XG4gIHJlZ2lzdGVyU3luY0hvb2tzKCk7XG59IGVsc2Uge1xuICBjb25zdCB7IHJlZ2lzdGVyT3B0aW9ucywgd2FpdEZvckFsbE1lc3NhZ2VzQWNrbm93bGVkZ2VkOiB3YWl0IH0gPVxuICAgIGNyZWF0ZUFkZEhvb2tNZXNzYWdlQ2hhbm5lbCgpO1xuICByZWdpc3RlcihcImltcG9ydC1pbi10aGUtbWlkZGxlL2hvb2subWpzXCIsIGltcG9ydC5tZXRhLnVybCwgcmVnaXN0ZXJPcHRpb25zKTtcbiAgd2FpdEZvckFsbE1lc3NhZ2VzQWNrbm93bGVkZ2VkID0gd2FpdDtcbn1cblxuLy8gU2V0IHNlcnZpY2UgbmFtZSBiZWZvcmUgdXNlQXp1cmVNb25pdG9yKCkgaW5pdGlhbGlzZXMgdGhlIFJlc291cmNlIHNvXG4vLyB0aGF0IEF6dXJlIE1vbml0b3IgcGlja3MgaXQgdXAgYXMgdGhlIGNsb3VkX1JvbGVOYW1lLlxucHJvY2Vzcy5lbnZbXCJPVEVMX1NFUlZJQ0VfTkFNRVwiXSA9IFwiY2xpXCI7XG5wcm9jZXNzLmVudltcIk9URUxfUkVTT1VSQ0VfQVRUUklCVVRFU1wiXSA9IFtcbiAgcHJvY2Vzcy5lbnZbXCJPVEVMX1JFU09VUkNFX0FUVFJJQlVURVNcIl0sXG4gIFwic2VydmljZS5uYW1lc3BhY2U9ZHhcIixcbl1cbiAgLmZpbHRlcihCb29sZWFuKVxuICAuam9pbihcIixcIik7XG5cbi8vIG9zLnBsYXRmb3JtKCkgcmV0dXJucyBcIndpbjMyXCIgb24gV2luZG93czsgdGhlIE9UZWwgb3MudHlwZSBlbnVtIHVzZXMgXCJ3aW5kb3dzXCIuXG5jb25zdCBvc1BsYXRmb3JtID0gb3MucGxhdGZvcm0oKTtcbmNvbnN0IG9zVHlwZSA9IG9zUGxhdGZvcm0gPT09IFwid2luMzJcIiA/IFwid2luZG93c1wiIDogb3NQbGF0Zm9ybTtcbnByb2Nlc3MuZW52W1wiT1RFTF9SRVNPVVJDRV9BVFRSSUJVVEVTXCJdID0gW1xuICBwcm9jZXNzLmVudltcIk9URUxfUkVTT1VSQ0VfQVRUUklCVVRFU1wiXSxcbiAgYG9zLnR5cGU9JHtvc1R5cGV9YCxcbiAgYG9zLnZlcnNpb249JHtvcy5yZWxlYXNlKCl9YCxcbiAgYG9zLm1hY2hpbmU9JHtvcy5tYWNoaW5lKCl9YCxcbl1cbiAgLmZpbHRlcihCb29sZWFuKVxuICAuam9pbihcIixcIik7XG5cbmxldCBhenVyZU1vbml0b3JFbmFibGVkID0gZmFsc2U7XG5cbi8qKlxuICogSW5pdGlhbGlzZXMgdGhlIEF6dXJlIE1vbml0b3IgZXhwb3J0ZXIgYW5kIHJlZ2lzdGVycyBIVFRQIGluc3RydW1lbnRhdGlvbi5cbiAqXG4gKiBEZWZlcnJlZCAobm90IHJ1biBhdCBwcmVsb2FkKSBzbyB0aGUgQ0xJIG9ubHkgZW1pdHMgdGVsZW1ldHJ5IG9uY2UgaXQgaGFzXG4gKiBjb25maXJtZWQgdGhlIHVzZXIgaXMgYSBQYWdvUEEgb3JnIG1lbWJlci4gSWRlbXBvdGVudDogc2FmZSB0byBjYWxsIG1vcmUgdGhhblxuICogb25jZS4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGxvZ2dpbmcgaXMgY29uZmlndXJlZCBzbyB0aGUgbG9ndGFwZSBPVGVsIHNpbmtcbiAqIGJpbmRzIHRvIHRoZSByZWFsIChyYXRoZXIgdGhhbiBuby1vcCkgTG9nZ2VyUHJvdmlkZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBlbmFibGVBenVyZU1vbml0b3IgPSAoKTogdm9pZCA9PiB7XG4gIGlmIChhenVyZU1vbml0b3JFbmFibGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF6dXJlTW9uaXRvckVuYWJsZWQgPSB0cnVlO1xuXG4gIHVzZUF6dXJlTW9uaXRvcih7XG4gICAgYXp1cmVNb25pdG9yRXhwb3J0ZXJPcHRpb25zOiB7XG4gICAgICBjb25uZWN0aW9uU3RyaW5nOlxuICAgICAgICBwcm9jZXNzLmVudi5BUFBMSUNBVElPTklOU0lHSFRTX0NPTk5FQ1RJT05fU1RSSU5HIHx8XG4gICAgICAgIFwiSW5zdHJ1bWVudGF0aW9uS2V5PWUwZmY4MDk0LTc4ZmEtNDVlNS1hMjFkLWU2MmI0NTNkYzVkMTtJbmdlc3Rpb25FbmRwb2ludD1odHRwczovL2l0YWx5bm9ydGgtMC5pbi5hcHBsaWNhdGlvbmluc2lnaHRzLmF6dXJlLmNvbS87TGl2ZUVuZHBvaW50PWh0dHBzOi8vaXRhbHlub3J0aC5saXZlZGlhZ25vc3RpY3MubW9uaXRvci5henVyZS5jb20vO0FwcGxpY2F0aW9uSWQ9Y2U0NjlkNTUtMmZmNy00ZGZkLWEyNDktY2M3ODcyOTFlNjcyXCIsXG4gICAgfSxcbiAgICBlbmFibGVMaXZlTWV0cmljczogdHJ1ZSxcbiAgfSk7XG5cbiAgLy8gUmVnaXN0ZXJlZCBhZnRlciB1c2VBenVyZU1vbml0b3IoKSBzbyB0aGUgaW5zdHJ1bWVudGF0aW9uIGJpbmRzIHRvIHRoZVxuICAvLyByZWFsIHRyYWNlci9tZXRlciBwcm92aWRlcnMgaXQgaW5zdGFsbHMgKHJhdGhlciB0aGFuIHRoZSBuby1vcCBkZWZhdWx0cykuXG4gIHJlZ2lzdGVySW5zdHJ1bWVudGF0aW9ucyh7XG4gICAgaW5zdHJ1bWVudGF0aW9uczogW25ldyBVbmRpY2lJbnN0cnVtZW50YXRpb24oKV0sXG4gICAgbWV0ZXJQcm92aWRlcjogbWV0cmljcy5nZXRNZXRlclByb3ZpZGVyKCksXG4gICAgdHJhY2VyUHJvdmlkZXI6IHRyYWNlLmdldFRyYWNlclByb3ZpZGVyKCksXG4gIH0pO1xufTtcblxuLy8gQmxvY2sgbW9kdWxlIGV2YWx1YXRpb24gdW50aWwgdGhlIGhvb2sgaXMgZnVsbHkgYWNrbm93bGVkZ2VkIChhIG5vLW9wIG9uXG4vLyB0aGUgc3luY2hyb25vdXMgcGF0aCwgd2hpY2ggbmVlZHMgbm8gYWNrbm93bGVkZ2VtZW50KS4gVGhpcyBlbnN1cmVzIHRoYXRcbi8vIHdoZW4gYmluL2luZGV4LmpzIHByb2NlZWRzIHRvIGltcG9ydCB0aGUgQ0xJIGVudHJ5IG1vZHVsZSwgYWxsIHRyYW5zaXRpdmVcbi8vIGltcG9ydHMgZ28gdGhyb3VnaCB0aGUgcmVnaXN0ZXJlZCBob29rLlxuYXdhaXQgd2FpdEZvckFsbE1lc3NhZ2VzQWNrbm93bGVkZ2VkKCk7XG4iXX0=
@@ -24,11 +24,11 @@ declare const addEnvironmentCommandOptionsSchema: z.ZodObject<{
24
24
  location: "italynorth" | "westeurope";
25
25
  }, string>>>>;
26
26
  managementTeam: z.ZodOptional<z.ZodString>;
27
- name: z.ZodOptional<z.ZodEnum<{
27
+ name: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodUnion<readonly [z.ZodEnum<{
28
28
  dev: "dev";
29
29
  prod: "prod";
30
30
  uat: "uat";
31
- }>>;
31
+ }>, z.ZodTemplateLiteral<`${string}-dev` | `${string}-prod` | `${string}-uat`>]>>>;
32
32
  prefix: z.ZodOptional<z.ZodString>;
33
33
  privateKeyPath: z.ZodOptional<z.ZodString>;
34
34
  runnerAppId: z.ZodOptional<z.ZodString>;