@pipeline-builder/pipeline-core 3.4.9 → 3.4.11

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.
@@ -43,15 +43,15 @@ export declare function extractMetadataEnv(metadata: MetaDataType): Record<strin
43
43
  * explicitly in metadata, the metadata-builder passthrough handles it
44
44
  * (via `metadataForBuildEnvironment`). This function returns
45
45
  * `undefined` and the metadata wins.
46
- * 2. Otherwise, if the plugin has an `imageTag` AND the registry config
47
- * is populated, build a `LinuxBuildImage.fromDockerRegistry()` image
48
- * pointing at `<registry-host>:<port>/system/<imageTag>:latest`. CodeBuild
49
- * authenticates by sending the per-org platform Secret as Basic auth to
50
- * `pipeline-image-registry`'s `/token` endpoint, which the registry's
51
- * bearer challenge points at; the JWT in `password` resolves to a
52
- * registry token scoped to the org.
53
- * 3. If neither (e.g., a `metadata_only` plugin or one with no image),
54
- * return `undefined` so CodeBuild uses its default (`standard:7.0`).
46
+ * 2. Otherwise, if the plugin has a `name`+`version` AND the registry
47
+ * config is populated, build a `LinuxBuildImage.fromDockerRegistry()`
48
+ * image pointing at `<registry-host>:<port>/<ns>/<name>:<version>`
49
+ * where `<ns>` is `system` or `org-<orgId>`. CodeBuild authenticates by
50
+ * sending the per-org platform Secret as Basic auth to
51
+ * `pipeline-image-registry`'s `/token` endpoint; the JWT in `password`
52
+ * resolves to a registry token scoped to the org.
53
+ * 3. If `metadata_only`, return `undefined` so CodeBuild uses its default
54
+ * (`standard:7.0`).
55
55
  *
56
56
  * `scope` and `orgId` are required: the per-org platform Secret is named
57
57
  * `pipeline-builder/<orgId>/platform`, and `Secret.fromSecretNameV2()`
@@ -156,33 +156,30 @@ function toSecretEnvVars(secrets, orgId) {
156
156
  * explicitly in metadata, the metadata-builder passthrough handles it
157
157
  * (via `metadataForBuildEnvironment`). This function returns
158
158
  * `undefined` and the metadata wins.
159
- * 2. Otherwise, if the plugin has an `imageTag` AND the registry config
160
- * is populated, build a `LinuxBuildImage.fromDockerRegistry()` image
161
- * pointing at `<registry-host>:<port>/system/<imageTag>:latest`. CodeBuild
162
- * authenticates by sending the per-org platform Secret as Basic auth to
163
- * `pipeline-image-registry`'s `/token` endpoint, which the registry's
164
- * bearer challenge points at; the JWT in `password` resolves to a
165
- * registry token scoped to the org.
166
- * 3. If neither (e.g., a `metadata_only` plugin or one with no image),
167
- * return `undefined` so CodeBuild uses its default (`standard:7.0`).
159
+ * 2. Otherwise, if the plugin has a `name`+`version` AND the registry
160
+ * config is populated, build a `LinuxBuildImage.fromDockerRegistry()`
161
+ * image pointing at `<registry-host>:<port>/<ns>/<name>:<version>`
162
+ * where `<ns>` is `system` or `org-<orgId>`. CodeBuild authenticates by
163
+ * sending the per-org platform Secret as Basic auth to
164
+ * `pipeline-image-registry`'s `/token` endpoint; the JWT in `password`
165
+ * resolves to a registry token scoped to the org.
166
+ * 3. If `metadata_only`, return `undefined` so CodeBuild uses its default
167
+ * (`standard:7.0`).
168
168
  *
169
169
  * `scope` and `orgId` are required: the per-org platform Secret is named
170
170
  * `pipeline-builder/<orgId>/platform`, and `Secret.fromSecretNameV2()`
171
171
  * needs a Construct to anchor the imported secret to.
172
172
  */
173
173
  function resolvePluginImage(scope, plugin, orgId) {
174
- const imageTag = plugin.imageTag;
175
174
  // `metadata_only` plugins legitimately have no image — their work runs
176
175
  // in the default CodeBuild image. Quiet skip.
177
176
  if (plugin.buildType === 'metadata_only')
178
177
  return undefined;
179
- // No image tag means there's nothing to pull. This SHOULDN'T happen for
180
- // build_image / prebuilt plugins (the platform writes imageTag at upload
181
- // time); if it does, the plugin record is malformed.
182
- if (!imageTag || imageTag === '') {
183
- log.warn(`Plugin "${plugin.name}" has buildType=${plugin.buildType} but no imageTag ` +
184
- 'CodeBuild will run on aws/codebuild/standard:7.0 and won\'t have the plugin\'s baked tools. ' +
185
- 'Verify the plugin was uploaded correctly via load-plugins.sh.');
178
+ // build_image / prebuilt plugins must have name + version (DB constraint
179
+ // makes both NOT NULL). Defensive check in case a malformed row slips in.
180
+ if (!plugin.name || !plugin.version) {
181
+ log.warn(`Plugin "${plugin.name}" has buildType=${plugin.buildType} but missing name/version — ` +
182
+ 'CodeBuild will run on aws/codebuild/standard:7.0 and won\'t have the plugin\'s baked tools.');
186
183
  return undefined;
187
184
  }
188
185
  let registry;
@@ -191,13 +188,13 @@ function resolvePluginImage(scope, plugin, orgId) {
191
188
  }
192
189
  catch {
193
190
  // Config namespace not loaded (e.g., unit tests without full config).
194
- log.warn(`Plugin "${plugin.name}" has imageTag="${imageTag}" but registry config not loaded — ` +
191
+ log.warn(`Plugin "${plugin.name}:${plugin.version}" needs the registry config but it's not loaded — ` +
195
192
  'CodeBuild will fall back to aws/codebuild/standard:7.0. ' +
196
193
  'Set IMAGE_REGISTRY_HOST + IMAGE_REGISTRY_PORT in pipeline-manager\'s environment.');
197
194
  return undefined;
198
195
  }
199
196
  if (!registry?.host) {
200
- log.warn(`Plugin "${plugin.name}" has imageTag="${imageTag}" but IMAGE_REGISTRY_HOST is empty — ` +
197
+ log.warn(`Plugin "${plugin.name}:${plugin.version}" needs IMAGE_REGISTRY_HOST but it's empty — ` +
201
198
  'CodeBuild will fall back to aws/codebuild/standard:7.0. ' +
202
199
  'Set IMAGE_REGISTRY_HOST in pipeline-manager\'s environment to use the plugin image.');
203
200
  return undefined;
@@ -213,10 +210,10 @@ function resolvePluginImage(scope, plugin, orgId) {
213
210
  return undefined;
214
211
  }
215
212
  // Compose the image URI. Namespace by ownership:
216
- // - Plugins owned by the system org → `system/<imageTag>:latest`.
213
+ // - Plugins owned by the system org → `system/<name>:<version>`.
217
214
  // pipeline-image-registry's token service grants pull on `system/*`
218
215
  // to any authenticated org user (read-only catalog of shared plugins).
219
- // - Plugins owned by a tenant org → `org-<orgId>/<imageTag>:latest`.
216
+ // - Plugins owned by a tenant org → `org-<orgId>/<name>:<version>`.
220
217
  // The token service grants pull,push only to members of that org.
221
218
  // The plugin's own `orgId` (not the caller's) decides the namespace —
222
219
  // tenant pipelines pulling shared system plugins still get the `system/`
@@ -228,7 +225,7 @@ function resolvePluginImage(scope, plugin, orgId) {
228
225
  const namespace = plugin.orgId === SYSTEM_ORG_ID
229
226
  ? 'system'
230
227
  : `org-${plugin.orgId}`;
231
- const imageUri = `${registry.host}${portPart}/${namespace}/${imageTag}:latest`;
228
+ const imageUri = `${registry.host}${portPart}/${namespace}/${plugin.name}:${plugin.version}`;
232
229
  // CodeBuild reads `pipeline-builder/<orgId>/platform` and sends its
233
230
  // `username`/`password` fields as HTTP Basic to the registry. The
234
231
  // registry challenges with a Bearer realm pointing at
@@ -317,7 +314,7 @@ function createCodeBuildStep(options) {
317
314
  ...(0, metadata_builder_1.metadataForShellStep)(merged),
318
315
  });
319
316
  }
320
- log.debug(`[CreateCodeBuildStep] SHELL_STEP plugin "${plugin.name}" has imageTag — promoting to CodeBuildStep so the plugin image is actually used`);
317
+ log.debug(`[CreateCodeBuildStep] SHELL_STEP plugin "${plugin.name}" has a registry image — promoting to CodeBuildStep so the plugin image is actually used`);
321
318
  // Fall through to the CodeBuildStep path below.
322
319
  }
323
320
  const computeType = getComputeType(plugin.computeType ?? options.defaultComputeType ?? 'SMALL');
@@ -401,4 +398,4 @@ function replaceNonAlphanumeric(input, replaceValue = '_') {
401
398
  function unwrapSecret(value) {
402
399
  return typeof value === 'string' ? value : value.unsafeUnwrap();
403
400
  }
404
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3BpcGVsaW5lLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBc0J0QyxzQkFFQztBQVNELGdEQVFDO0FBa0pELGdEQTJGQztBQUVELGtEQTRJQztBQUtELHdDQXFCQztBQVFELHdEQUVDO0FBT0Qsb0NBRUM7QUEvY0QseURBQTBEO0FBRTFELDZDQUEyRDtBQUMzRCw2REFBc0k7QUFDdEksdUVBQXdEO0FBQ3hELHFEQUFxRjtBQUdyRix5REFBaUg7QUFDakgsdUNBQTJDO0FBQzNDLHFEQUE4RjtBQUM5RixxREFBNkQ7QUFFN0QsaUVBQXFFO0FBRXJFLE1BQU0sR0FBRyxHQUFHLElBQUEsdUJBQVksRUFBQyxRQUFRLENBQUMsQ0FBQztBQUVuQzs7R0FFRztBQUNILFNBQWdCLEtBQUssQ0FBQyxHQUFHLE9BQXFDO0lBQzVELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQWlCLENBQUM7QUFDdkQsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLFFBQXNCO0lBQ3ZELE1BQU0sR0FBRyxHQUEyQixFQUFFLENBQUM7SUFDdkMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxvQ0FBbUIsQ0FBQyxFQUFFLENBQUM7WUFDekMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLGFBQWEsR0FB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QVcsQ0FBQyxNQUFNLENBQUMsRUFBRSwyQkFBYyxDQUFDLE1BQU07UUFDM0MsQ0FBQyw0QkFBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLDJCQUFjLENBQUMsS0FBSztRQUN6QyxDQUFDLDRCQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsMkJBQWMsQ0FBQyxRQUFRO0tBQ2hELENBQUM7SUFFRixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osR0FBRyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsS0FBSywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sMkJBQWMsQ0FBQyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLEtBQWEsRUFBRSxlQUF1QixHQUFHO0lBQzlFLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixZQUFZLENBQUMsS0FBMkI7SUFDdEQsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ2xFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhJztcbmltcG9ydCB7IER1cmF0aW9uLCBTZWNyZXRWYWx1ZSwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBCdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlLCBDb21wdXRlVHlwZSBhcyBDREtDb21wdXRlVHlwZSwgTGludXhCdWlsZEltYWdlLCBJQnVpbGRJbWFnZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IENvZGVCdWlsZFN0ZXAsIE1hbnVhbEFwcHJvdmFsU3RlcCwgU2hlbGxTdGVwIH0gZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IEFydGlmYWN0S2V5IH0gZnJvbSAnLi9hcnRpZmFjdC1tYW5hZ2VyJztcbmltcG9ydCB7IG1ldGFkYXRhRm9yU2hlbGxTdGVwLCBtZXRhZGF0YUZvckNvZGVCdWlsZFN0ZXAsIG1ldGFkYXRhRm9yQnVpbGRFbnZpcm9ubWVudCB9IGZyb20gJy4vbWV0YWRhdGEtYnVpbGRlcic7XG5pbXBvcnQgeyByZXNvbHZlTmV0d29yayB9IGZyb20gJy4vbmV0d29yayc7XG5pbXBvcnQgeyBQbHVnaW5UeXBlLCBDb21wdXRlVHlwZSwgTWV0YURhdGFUeXBlLCBDREtfTUVUQURBVEFfUFJFRklYIH0gZnJvbSAnLi9waXBlbGluZS10eXBlcyc7XG5pbXBvcnQgeyBDb25maWcsIENvcmVDb25zdGFudHMgfSBmcm9tICcuLi9jb25maWcvYXBwLWNvbmZpZyc7XG5pbXBvcnQgdHlwZSB7IENvZGVCdWlsZFN0ZXBPcHRpb25zLCBTdGVwQ3VzdG9taXphdGlvbiB9IGZyb20gJy4uL3BpcGVsaW5lL3N0ZXAtdHlwZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVBsdWdpblRlbXBsYXRlcyB9IGZyb20gJy4uL3RlbXBsYXRlL3BsdWdpbi1yZXNvbHZlcic7XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcignSGVscGVyJyk7XG5cbi8qKlxuICogTWVyZ2UgbXVsdGlwbGUgbWV0YWRhdGEgb2JqZWN0cyBpbnRvIG9uZS4gTGF0ZXIgc291cmNlcyBvdmVycmlkZSBlYXJsaWVyIG9uZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSguLi5zb3VyY2VzOiBBcnJheTxQYXJ0aWFsPE1ldGFEYXRhVHlwZT4+KTogTWV0YURhdGFUeXBlIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIC4uLnNvdXJjZXMpIGFzIE1ldGFEYXRhVHlwZTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IG5vbi1uYW1lc3BhY2VkIG1ldGFkYXRhIGtleXMgYXMgZW52aXJvbm1lbnQgdmFyaWFibGUgc3RyaW5ncy5cbiAqIEtleXMgc3RhcnRpbmcgd2l0aCAnYXdzOmNkazonIGFyZSByZXNlcnZlZCBmb3IgQ0RLIGNvbnN0cnVjdCBwcm9wc1xuICogKHByb2Nlc3NlZCBieSBtZXRhZGF0YSBleHRyYWN0aW9uIGZ1bmN0aW9ucykgYW5kIGFyZSBleGNsdWRlZCBoZXJlLlxuICpcbiAqIEFsbCB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBzdHJpbmdzIGZvciBDb2RlQnVpbGQgY29tcGF0aWJpbGl0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RNZXRhZGF0YUVudihtZXRhZGF0YTogTWV0YURhdGFUeXBlKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXRhZGF0YSkpIHtcbiAgICBpZiAoIWtleS5zdGFydHNXaXRoKENES19NRVRBREFUQV9QUkVGSVgpKSB7XG4gICAgICBlbnZba2V5XSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbnY7XG59XG5cbi8qKlxuICogQnVpbGQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gcGx1Z2luIGNvbmZpZywgbWVyZ2VkIG1ldGFkYXRhLCBhbmQgY3VzdG9tIGVudi5cbiAqXG4gKiBNZXJnZSBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgMS4gcGx1Z2luLmVudiDigJQgcGx1Z2luIGRlZmF1bHQgZW52IHZhcnMgKGxvd2VzdCBwcmlvcml0eSlcbiAqICAgMi4gbm9uLW5hbWVzcGFjZWQgbWV0YWRhdGEga2V5cyDigJQgZS5nLiBQWVRIT05fVkVSU0lPTiwgV09SS0RJUlxuICogICAzLiBjdXN0b21FbnYg4oCUIHBlci1zdGVwIGN1c3RvbSBlbnYgdmFycyAoaGlnaGVzdCBwcmlvcml0eSlcbiAqL1xuY29uc3QgQk9PVFNUUkFQX0NNRCA9ICdleHBvcnQgV09SS0RJUj0ke1dPUktESVI6LS4vfTsgY2QgJHtXT1JLRElSfSc7XG5cbmZ1bmN0aW9uIGJ1aWxkRW52KHBsdWdpbjogUGx1Z2luLCBtZXRhZGF0YTogTWV0YURhdGFUeXBlLCBjdXN0b21FbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiB7XG4gICAgLi4uKHBsdWdpbi5lbnYgPz8ge30pLFxuICAgIC4uLmV4dHJhY3RNZXRhZGF0YUVudihtZXRhZGF0YSksXG4gICAgLi4uKGN1c3RvbUVudiA/PyB7fSksXG4gIH07XG59XG5cbi8qKlxuICogV3JhcCBidWlsZCBjb21tYW5kcyBiYXNlZCBvbiBmYWlsdXJlIGJlaGF2aW9yLlxuICogLSAnZmFpbCcgKGRlZmF1bHQpOiBObyB3cmFwcGluZyDigJQgY29tbWFuZHMgZmFpbCB0aGUgcGlwZWxpbmUgbmF0dXJhbGx5LlxuICogLSAnd2Fybic6IFJ1biBjb21tYW5kcyB3aXRoIGBzZXQgK2VgLCBjYXB0dXJlIGZhaWx1cmVzLCBsb2cgd2FybmluZ3MsIGNvbnRpbnVlLlxuICogLSAnaWdub3JlJzogQXBwZW5kIGB8fCB0cnVlYCB0byBlYWNoIGNvbW1hbmQg4oCUIGZhaWx1cmVzIGFyZSBzaWxlbnRseSBzd2FsbG93ZWQuXG4gKlxuICogT25seSBhcHBsaWVkIHRvIGJ1aWxkIGNvbW1hbmRzLCBub3QgaW5zdGFsbCBjb21tYW5kcyAoaW5zdGFsbCBmYWlsdXJlcyBzaG91bGQgYWx3YXlzIHN0b3AgdGhlIGJ1aWxkKS5cbiAqL1xuZnVuY3Rpb24gd3JhcENvbW1hbmRzRm9yRmFpbHVyZUJlaGF2aW9yKGNvbW1hbmRzOiBzdHJpbmdbXSwgYmVoYXZpb3I/OiAnZmFpbCcgfCAnd2FybicgfCAnaWdub3JlJyk6IHN0cmluZ1tdIHtcbiAgaWYgKCFiZWhhdmlvciB8fCBiZWhhdmlvciA9PT0gJ2ZhaWwnKSByZXR1cm4gY29tbWFuZHM7XG5cbiAgaWYgKGJlaGF2aW9yID09PSAnaWdub3JlJykge1xuICAgIHJldHVybiBjb21tYW5kcy5tYXAoY21kID0+IGAke2NtZH0gfHwgdHJ1ZWApO1xuICB9XG5cbiAgLy8gJ3dhcm4nOiBydW4gYWxsIGNvbW1hbmRzLCBjYXB0dXJlIGZhaWx1cmVzLCBidXQgZG9uJ3Qgc3RvcFxuICByZXR1cm4gW1xuICAgICdzZXQgK2UnLFxuICAgICdfU1RFUF9FWElUPTAnLFxuICAgIC4uLmNvbW1hbmRzLm1hcChjbWQgPT4gYCR7Y21kfSB8fCB7IGVjaG8gXCJXQVJOSU5HOiBDb21tYW5kIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAkP1wiOyBfU1RFUF9FWElUPTE7IH1gKSxcbiAgICAnc2V0IC1lJyxcbiAgICAnaWYgWyBcIiRfU1RFUF9FWElUXCIgLW5lIDAgXTsgdGhlbiBlY2hvIFwiV0FSTklORzogT25lIG9yIG1vcmUgY29tbWFuZHMgaW4gdGhpcyBzdGVwIGZhaWxlZFwiOyBmaScsXG4gIF07XG59XG5cbi8qKlxuICogQnVpbGQgYm9vdHN0cmFwLXByZWZpeGVkIGluc3RhbGwgYW5kIGJ1aWxkIGNvbW1hbmRzIGZyb20gcGx1Z2luIGNvbmZpZy5cbiAqIEVhY2ggY29tbWFuZCBsaXN0IGlzIHByZXBlbmRlZCB3aXRoIGEgV09SS0RJUiBib290c3RyYXAgdGhhdCBkZWZhdWx0cyB0byAnLi8nLlxuICogV2hlbiBjdXN0b20gY29tbWFuZHMgYXJlIHByb3ZpZGVkLCB0aGV5IGFyZSBpbmplY3RlZCBiZWZvcmUvYWZ0ZXIgdGhlIHBsdWdpbidzIGNvbW1hbmRzLlxuICogQnVpbGQgY29tbWFuZHMgYXJlIG9wdGlvbmFsbHkgd3JhcHBlZCBieSBmYWlsdXJlQmVoYXZpb3IgbG9naWMuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQ29tbWFuZHMocGx1Z2luOiBQbHVnaW4sIGN1c3RvbT86IFN0ZXBDdXN0b21pemF0aW9uLCBmYWlsdXJlQmVoYXZpb3I/OiAnZmFpbCcgfCAnd2FybicgfCAnaWdub3JlJyk6IHsgaW5zdGFsbENvbW1hbmRzOiBzdHJpbmdbXTsgY29tbWFuZHM6IHN0cmluZ1tdIH0ge1xuICBjb25zdCB1c2VyQ29tbWFuZHMgPSBbXG4gICAgLi4uKGN1c3RvbT8ucHJlQ29tbWFuZHMgPz8gW10pLFxuICAgIC4uLihwbHVnaW4uY29tbWFuZHM/Lmxlbmd0aCA/IHBsdWdpbi5jb21tYW5kcyA6IFtdKSxcbiAgICAuLi4oY3VzdG9tPy5wb3N0Q29tbWFuZHMgPz8gW10pLFxuICBdO1xuXG4gIHJldHVybiB7XG4gICAgaW5zdGFsbENvbW1hbmRzOiBbXG4gICAgICBCT09UU1RSQVBfQ01ELFxuICAgICAgLi4uKGN1c3RvbT8ucHJlSW5zdGFsbENvbW1hbmRzID8/IFtdKSxcbiAgICAgIC4uLihwbHVnaW4uaW5zdGFsbENvbW1hbmRzID8/IFtdKSxcbiAgICAgIC4uLihjdXN0b20/LnBvc3RJbnN0YWxsQ29tbWFuZHMgPz8gW10pLFxuICAgIF0sXG4gICAgY29tbWFuZHM6IFtCT09UU1RSQVBfQ01ELCAuLi53cmFwQ29tbWFuZHNGb3JGYWlsdXJlQmVoYXZpb3IodXNlckNvbW1hbmRzLCBmYWlsdXJlQmVoYXZpb3IpXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgcGxhaW4gZW52IHJlY29yZCB0byBDb2RlQnVpbGQncyBlbnZpcm9ubWVudFZhcmlhYmxlcyBmb3JtYXQgKFBMQUlOVEVYVCkuXG4gKi9cbmZ1bmN0aW9uIHRvQ29kZUJ1aWxkRW52VmFycyhlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiBzdHJpbmcgfT4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGVudikubWFwKChbbmFtZSwgdmFsdWVdKSA9PiBbbmFtZSwgeyB2YWx1ZSB9XSksXG4gICk7XG59XG5cbi8qKlxuICogQnVpbGQgU0VDUkVUU19NQU5BR0VSLXR5cGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gcGx1Z2luIHNlY3JldCBkZWNsYXJhdGlvbnMuXG4gKiBVc2VzIG5hbWluZyBjb252ZW50aW9uOiBwaXBlbGluZS1idWlsZGVyL3tvcmdJZH0ve3NlY3JldE5hbWV9XG4gKiBFYWNoIG9yZyBtYW5hZ2VzIHRoZXNlIHNlY3JldHMgaW4gdGhlaXIgb3duIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKi9cbmNvbnN0IFZBTElEX1NFQ1JFVF9OQU1FID0gL15bYS16QS1aMC05L18rPS5ALV0rJC87XG5cbmZ1bmN0aW9uIHRvU2VjcmV0RW52VmFycyhcbiAgc2VjcmV0czogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHJlcXVpcmVkOiBib29sZWFuIH0+LFxuICBvcmdJZDogc3RyaW5nLFxuKTogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogc3RyaW5nOyB0eXBlOiBCdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlIH0+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBzZWNyZXRzLm1hcCgoeyBuYW1lIH0pID0+IHtcbiAgICAgIGNvbnN0IHNlY3JldFBhdGggPSBDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgob3JnSWQsIG5hbWUpO1xuICAgICAgaWYgKCFWQUxJRF9TRUNSRVRfTkFNRS50ZXN0KHNlY3JldFBhdGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VjcmV0IHBhdGggXCIke3NlY3JldFBhdGh9XCIgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIGZvciBBV1MgU2VjcmV0cyBNYW5hZ2VyYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW1xuICAgICAgICBuYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6IHNlY3JldFBhdGgsXG4gICAgICAgICAgdHlwZTogQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlVHlwZS5TRUNSRVRTX01BTkFHRVIsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pLFxuICApO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIENvZGVCdWlsZCBzdGVwIG9yIFNoZWxsIHN0ZXAgYmFzZWQgb24gcGx1Z2luIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogTWV0YWRhdGEgbWVyZ2Ugb3JkZXIgKGxhc3Qgd2lucyk6XG4gKiAgIDEuIFN0ZXAtbGV2ZWwgbWV0YWRhdGEgKGZyb20gb3B0aW9ucy5tZXRhZGF0YSlcbiAqICAgMi4gUGx1Z2luIG1ldGFkYXRhIChmcm9tIHBsdWdpbi5tZXRhZGF0YSBpbiBkYXRhYmFzZSlcbiAqXG4gKiBFbnZpcm9ubWVudCBtZXJnZSBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgMS4gUGx1Z2luIGVudiB2YXJzIChmcm9tIHBsdWdpbi5lbnYpXG4gKiAgIDIuIEN1c3RvbSBlbnYgdmFycyAoZnJvbSBvcHRpb25zLmVudilcbiAqICAgMy4gV09SS0RJUiBmcm9tIG1lcmdlZCBtZXRhZGF0YVxuICpcbiAqIENESyBwcm9wIHNwcmVhZCBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgcHJvZ3JhbW1hdGljIGRlZmF1bHRzIChpbnB1dCwgY29tbWFuZHMsIGVudiwgbmV0d29yaykg4oaSIG1ldGFkYXRhIG92ZXJyaWRlc1xuICpcbiAqIFRoaXMgbWVhbnMgbWV0YWRhdGEga2V5cyBsaWtlIGBhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmNvbW1hbmRzYFxuICogd2lsbCBvdmVycmlkZSB0aGUgcGx1Z2luLWRlcml2ZWQgY29tbWFuZHMgd2hlbiBleHBsaWNpdGx5IHNldC5cbiAqL1xuLyoqXG4gKiBSZXNvbHZlIHRoZSBDb2RlQnVpbGQgaW1hZ2UgdG8gdXNlIGZvciBhIHBsdWdpbi5cbiAqXG4gKiBTdHJhdGVneTpcbiAqICAgMS4gSWYgdGhlIHBsdWdpbiBzZXRzIGBhd3M6Y2RrOmNvZGVidWlsZDpidWlsZGVudmlyb25tZW50OmJ1aWxkSW1hZ2VgXG4gKiAgICAgIGV4cGxpY2l0bHkgaW4gbWV0YWRhdGEsIHRoZSBtZXRhZGF0YS1idWlsZGVyIHBhc3N0aHJvdWdoIGhhbmRsZXMgaXRcbiAqICAgICAgKHZpYSBgbWV0YWRhdGFGb3JCdWlsZEVudmlyb25tZW50YCkuIFRoaXMgZnVuY3Rpb24gcmV0dXJuc1xuICogICAgICBgdW5kZWZpbmVkYCBhbmQgdGhlIG1ldGFkYXRhIHdpbnMuXG4gKiAgIDIuIE90aGVyd2lzZSwgaWYgdGhlIHBsdWdpbiBoYXMgYW4gYGltYWdlVGFnYCBBTkQgdGhlIHJlZ2lzdHJ5IGNvbmZpZ1xuICogICAgICBpcyBwb3B1bGF0ZWQsIGJ1aWxkIGEgYExpbnV4QnVpbGRJbWFnZS5mcm9tRG9ja2VyUmVnaXN0cnkoKWAgaW1hZ2VcbiAqICAgICAgcG9pbnRpbmcgYXQgYDxyZWdpc3RyeS1ob3N0Pjo8cG9ydD4vc3lzdGVtLzxpbWFnZVRhZz46bGF0ZXN0YC4gQ29kZUJ1aWxkXG4gKiAgICAgIGF1dGhlbnRpY2F0ZXMgYnkgc2VuZGluZyB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBTZWNyZXQgYXMgQmFzaWMgYXV0aCB0b1xuICogICAgICBgcGlwZWxpbmUtaW1hZ2UtcmVnaXN0cnlgJ3MgYC90b2tlbmAgZW5kcG9pbnQsIHdoaWNoIHRoZSByZWdpc3RyeSdzXG4gKiAgICAgIGJlYXJlciBjaGFsbGVuZ2UgcG9pbnRzIGF0OyB0aGUgSldUIGluIGBwYXNzd29yZGAgcmVzb2x2ZXMgdG8gYVxuICogICAgICByZWdpc3RyeSB0b2tlbiBzY29wZWQgdG8gdGhlIG9yZy5cbiAqICAgMy4gSWYgbmVpdGhlciAoZS5nLiwgYSBgbWV0YWRhdGFfb25seWAgcGx1Z2luIG9yIG9uZSB3aXRoIG5vIGltYWdlKSxcbiAqICAgICAgcmV0dXJuIGB1bmRlZmluZWRgIHNvIENvZGVCdWlsZCB1c2VzIGl0cyBkZWZhdWx0IChgc3RhbmRhcmQ6Ny4wYCkuXG4gKlxuICogYHNjb3BlYCBhbmQgYG9yZ0lkYCBhcmUgcmVxdWlyZWQ6IHRoZSBwZXItb3JnIHBsYXRmb3JtIFNlY3JldCBpcyBuYW1lZFxuICogYHBpcGVsaW5lLWJ1aWxkZXIvPG9yZ0lkPi9wbGF0Zm9ybWAsIGFuZCBgU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoKWBcbiAqIG5lZWRzIGEgQ29uc3RydWN0IHRvIGFuY2hvciB0aGUgaW1wb3J0ZWQgc2VjcmV0IHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBsdWdpbkltYWdlKHNjb3BlOiBDb25zdHJ1Y3QgfCB1bmRlZmluZWQsIHBsdWdpbjogUGx1Z2luLCBvcmdJZD86IHN0cmluZyk6IElCdWlsZEltYWdlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgaW1hZ2VUYWcgPSBwbHVnaW4uaW1hZ2VUYWc7XG5cbiAgLy8gYG1ldGFkYXRhX29ubHlgIHBsdWdpbnMgbGVnaXRpbWF0ZWx5IGhhdmUgbm8gaW1hZ2Ug4oCUIHRoZWlyIHdvcmsgcnVuc1xuICAvLyBpbiB0aGUgZGVmYXVsdCBDb2RlQnVpbGQgaW1hZ2UuIFF1aWV0IHNraXAuXG4gIGlmIChwbHVnaW4uYnVpbGRUeXBlID09PSAnbWV0YWRhdGFfb25seScpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgLy8gTm8gaW1hZ2UgdGFnIG1lYW5zIHRoZXJlJ3Mgbm90aGluZyB0byBwdWxsLiBUaGlzIFNIT1VMRE4nVCBoYXBwZW4gZm9yXG4gIC8vIGJ1aWxkX2ltYWdlIC8gcHJlYnVpbHQgcGx1Z2lucyAodGhlIHBsYXRmb3JtIHdyaXRlcyBpbWFnZVRhZyBhdCB1cGxvYWRcbiAgLy8gdGltZSk7IGlmIGl0IGRvZXMsIHRoZSBwbHVnaW4gcmVjb3JkIGlzIG1hbGZvcm1lZC5cbiAgaWYgKCFpbWFnZVRhZyB8fCBpbWFnZVRhZyA9PT0gJycpIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBQbHVnaW4gXCIke3BsdWdpbi5uYW1lfVwiIGhhcyBidWlsZFR5cGU9JHtwbHVnaW4uYnVpbGRUeXBlfSBidXQgbm8gaW1hZ2VUYWcg4oCUIGAgK1xuICAgICAgJ0NvZGVCdWlsZCB3aWxsIHJ1biBvbiBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjcuMCBhbmQgd29uXFwndCBoYXZlIHRoZSBwbHVnaW5cXCdzIGJha2VkIHRvb2xzLiAnICtcbiAgICAgICdWZXJpZnkgdGhlIHBsdWdpbiB3YXMgdXBsb2FkZWQgY29ycmVjdGx5IHZpYSBsb2FkLXBsdWdpbnMuc2guJyxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQgcmVnaXN0cnk7XG4gIHRyeSB7XG4gICAgcmVnaXN0cnkgPSBDb25maWcuZ2V0KCdyZWdpc3RyeScpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBDb25maWcgbmFtZXNwYWNlIG5vdCBsb2FkZWQgKGUuZy4sIHVuaXQgdGVzdHMgd2l0aG91dCBmdWxsIGNvbmZpZykuXG4gICAgbG9nLndhcm4oXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX1cIiBoYXMgaW1hZ2VUYWc9XCIke2ltYWdlVGFnfVwiIGJ1dCByZWdpc3RyeSBjb25maWcgbm90IGxvYWRlZCDigJQgYCArXG4gICAgICAnQ29kZUJ1aWxkIHdpbGwgZmFsbCBiYWNrIHRvIGF3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6Ny4wLiAnICtcbiAgICAgICdTZXQgSU1BR0VfUkVHSVNUUllfSE9TVCArIElNQUdFX1JFR0lTVFJZX1BPUlQgaW4gcGlwZWxpbmUtbWFuYWdlclxcJ3MgZW52aXJvbm1lbnQuJyxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoIXJlZ2lzdHJ5Py5ob3N0KSB7XG4gICAgbG9nLndhcm4oXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX1cIiBoYXMgaW1hZ2VUYWc9XCIke2ltYWdlVGFnfVwiIGJ1dCBJTUFHRV9SRUdJU1RSWV9IT1NUIGlzIGVtcHR5IOKAlCBgICtcbiAgICAgICdDb2RlQnVpbGQgd2lsbCBmYWxsIGJhY2sgdG8gYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo3LjAuICcgK1xuICAgICAgJ1NldCBJTUFHRV9SRUdJU1RSWV9IT1NUIGluIHBpcGVsaW5lLW1hbmFnZXJcXCdzIGVudmlyb25tZW50IHRvIHVzZSB0aGUgcGx1Z2luIGltYWdlLicsXG4gICAgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2NvcGUpIHtcbiAgICBsb2cud2FybihgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX1cIiBpbWFnZSByZXNvbHV0aW9uIHNraXBwZWQ6IG5vIGNvbnN0cnVjdCBzY29wZSBwcm92aWRlZGApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBQZXItb3JnIGF1dGggcmVxdWlyZXMgb3JnSWQg4oCUIHRoZSBTZWNyZXQgaXMgbmFtZWQgcGVyIG9yZy5cbiAgaWYgKCFvcmdJZCkge1xuICAgIGxvZy53YXJuKFxuICAgICAgYFBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9XCIgaW1hZ2UgcmVzb2x1dGlvbiBza2lwcGVkOiBvcmdJZCBpcyByZXF1aXJlZCB0byBgICtcbiAgICAgICdyZXNvbHZlIHRoZSBwZXItb3JnIHBsYXRmb3JtIFNlY3JldCB1c2VkIGZvciBDb2RlQnVpbGQgQmFzaWMgYXV0aC4nLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIENvbXBvc2UgdGhlIGltYWdlIFVSSS4gTmFtZXNwYWNlIGJ5IG93bmVyc2hpcDpcbiAgLy8gICAtIFBsdWdpbnMgb3duZWQgYnkgdGhlIHN5c3RlbSBvcmcg4oaSIGBzeXN0ZW0vPGltYWdlVGFnPjpsYXRlc3RgLlxuICAvLyAgICAgcGlwZWxpbmUtaW1hZ2UtcmVnaXN0cnkncyB0b2tlbiBzZXJ2aWNlIGdyYW50cyBwdWxsIG9uIGBzeXN0ZW0vKmBcbiAgLy8gICAgIHRvIGFueSBhdXRoZW50aWNhdGVkIG9yZyB1c2VyIChyZWFkLW9ubHkgY2F0YWxvZyBvZiBzaGFyZWQgcGx1Z2lucykuXG4gIC8vICAgLSBQbHVnaW5zIG93bmVkIGJ5IGEgdGVuYW50IG9yZyDihpIgYG9yZy08b3JnSWQ+LzxpbWFnZVRhZz46bGF0ZXN0YC5cbiAgLy8gICAgIFRoZSB0b2tlbiBzZXJ2aWNlIGdyYW50cyBwdWxsLHB1c2ggb25seSB0byBtZW1iZXJzIG9mIHRoYXQgb3JnLlxuICAvLyBUaGUgcGx1Z2luJ3Mgb3duIGBvcmdJZGAgKG5vdCB0aGUgY2FsbGVyJ3MpIGRlY2lkZXMgdGhlIG5hbWVzcGFjZSDigJRcbiAgLy8gdGVuYW50IHBpcGVsaW5lcyBwdWxsaW5nIHNoYXJlZCBzeXN0ZW0gcGx1Z2lucyBzdGlsbCBnZXQgdGhlIGBzeXN0ZW0vYFxuICAvLyBwYXRoIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBpbWFnZSBhY3R1YWxseSBsaXZlcy5cbiAgY29uc3QgcG9ydFBhcnQgPSByZWdpc3RyeS5wb3J0ICYmIHJlZ2lzdHJ5LnBvcnQgIT09IDgwICYmIHJlZ2lzdHJ5LnBvcnQgIT09IDQ0M1xuICAgID8gYDoke3JlZ2lzdHJ5LnBvcnR9YFxuICAgIDogJyc7XG4gIGNvbnN0IFNZU1RFTV9PUkdfSUQgPSAnc3lzdGVtJztcbiAgY29uc3QgbmFtZXNwYWNlID0gcGx1Z2luLm9yZ0lkID09PSBTWVNURU1fT1JHX0lEXG4gICAgPyAnc3lzdGVtJ1xuICAgIDogYG9yZy0ke3BsdWdpbi5vcmdJZH1gO1xuICBjb25zdCBpbWFnZVVyaSA9IGAke3JlZ2lzdHJ5Lmhvc3R9JHtwb3J0UGFydH0vJHtuYW1lc3BhY2V9LyR7aW1hZ2VUYWd9OmxhdGVzdGA7XG5cbiAgLy8gQ29kZUJ1aWxkIHJlYWRzIGBwaXBlbGluZS1idWlsZGVyLzxvcmdJZD4vcGxhdGZvcm1gIGFuZCBzZW5kcyBpdHNcbiAgLy8gYHVzZXJuYW1lYC9gcGFzc3dvcmRgIGZpZWxkcyBhcyBIVFRQIEJhc2ljIHRvIHRoZSByZWdpc3RyeS4gVGhlXG4gIC8vIHJlZ2lzdHJ5IGNoYWxsZW5nZXMgd2l0aCBhIEJlYXJlciByZWFsbSBwb2ludGluZyBhdFxuICAvLyBwaXBlbGluZS1pbWFnZS1yZWdpc3RyeSdzIGAvdG9rZW5gIGVuZHBvaW50OyB0aGUgRG9ja2VyIGNsaWVudCBmb3J3YXJkc1xuICAvLyB0aG9zZSBjcmVkcywgdGhlIHBhc3N3b3JkIGlzIHZlcmlmaWVkIGFzIGEgcGxhdGZvcm0gSldULCBhbmQgYSByZWdpc3RyeVxuICAvLyB0b2tlbiBzY29wZWQgdG8gdGhlIG9yZyBpcyBpc3N1ZWQuXG4gIC8vXG4gIC8vIFNhbWUgU2VjcmV0IGlzIHJlYWQgYnkgdGhlIHBsdWdpbi1sb29rdXAgTGFtYmRhICh2aWEgdGhlIGBwYXNzd29yZGBcbiAgLy8gZmllbGQpIOKAlCBvbmUgU2VjcmV0IHNlcnZlcyBib3RoIGZsb3dzLlxuICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgY29uc3Qgc2VjcmV0TmFtZSA9IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aChvcmdJZCwgJ3BsYXRmb3JtJyk7XG4gIC8vIENESyBjb25zdHJ1Y3QgSURzIGFsbG93IG9ubHkgW0EtWmEtejAtOV8tXTsgc2FuaXRpemUgdGhlIHNlY3JldCBuYW1lLlxuICBjb25zdCBzZWNyZXRDb25zdHJ1Y3RJZCA9IGBQbGF0Zm9ybUNyZWRzXyR7c2VjcmV0TmFtZS5yZXBsYWNlKC9bXkEtWmEtejAtOV8tXS9nLCAnXycpfWA7XG4gIGNvbnN0IGNyZWRlbnRpYWxzU2VjcmV0ID0gKHN0YWNrLm5vZGUudHJ5RmluZENoaWxkKHNlY3JldENvbnN0cnVjdElkKSBhcyBTZWNyZXQgfCB1bmRlZmluZWQpXG4gICAgPz8gU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoc3RhY2ssIHNlY3JldENvbnN0cnVjdElkLCBzZWNyZXROYW1lKTtcblxuICByZXR1cm4gTGludXhCdWlsZEltYWdlLmZyb21Eb2NrZXJSZWdpc3RyeShpbWFnZVVyaSwge1xuICAgIHNlY3JldHNNYW5hZ2VyQ3JlZGVudGlhbHM6IGNyZWRlbnRpYWxzU2VjcmV0LFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvZGVCdWlsZFN0ZXAob3B0aW9uczogQ29kZUJ1aWxkU3RlcE9wdGlvbnMpOiBTaGVsbFN0ZXAgfCBDb2RlQnVpbGRTdGVwIHwgTWFudWFsQXBwcm92YWxTdGVwIHtcbiAgY29uc3Qge1xuICAgIGlkLCBpbnB1dCwgbWV0YWRhdGEsIG5ldHdvcmssIHNjb3BlLFxuICAgIHByZUluc3RhbGxDb21tYW5kcywgcG9zdEluc3RhbGxDb21tYW5kcywgcHJlQ29tbWFuZHMsIHBvc3RDb21tYW5kcyxcbiAgICBlbnY6IGN1c3RvbUVudiwgYWRkaXRpb25hbElucHV0cywgdGltZW91dCwgZmFpbHVyZUJlaGF2aW9yLFxuICAgIGFydGlmYWN0TWFuYWdlciwgc3RhZ2VOYW1lLCBzdGFnZUFsaWFzLCBwbHVnaW5BbGlhcywgb3JnSWQsIHBpcGVsaW5lU2NvcGUsXG4gIH0gPSBvcHRpb25zO1xuXG4gIC8vIFJlc29sdmUge3sgLi4uIH19IHRlbXBsYXRlcyBpbiBwbHVnaW4gc3BlYyBmaWVsZHMgYWdhaW5zdCB0aGUgcGlwZWxpbmUgc2NvcGUuXG4gIC8vIEV2ZXJ5IGNhbGwgZ29lcyB0aHJvdWdoIHRoZSByZXNvbHZlciDigJQgcGx1Z2lucyB3aXRob3V0IHRlbXBsYXRlIHRva2VucyBhcmVcbiAgLy8gYSBuby1vcCBmYXN0IHBhdGggaW5zaWRlIHJlc29sdmVQbHVnaW5UZW1wbGF0ZXMoKS5cbiAgY29uc3QgcGx1Z2luID0gcmVzb2x2ZVBsdWdpblRlbXBsYXRlcyhvcHRpb25zLnBsdWdpbiwgcGlwZWxpbmVTY29wZSk7XG5cbiAgY29uc3QgbWVyZ2VkID0gbWVyZ2UobWV0YWRhdGEgPz8ge30sIHBsdWdpbi5tZXRhZGF0YSA/PyB7fSk7XG5cbiAgLy8gTWFudWFsQXBwcm92YWxTdGVwOiBubyBjb21tYW5kcywgZW52LCBjb21wdXRlLCBvciBuZXR3b3JrIOKAlCBqdXN0IGlkICsgb3B0aW9uYWwgY29tbWVudFxuICBpZiAocGx1Z2luLnBsdWdpblR5cGUgPT09IFBsdWdpblR5cGUuTUFOVUFMX0FQUFJPVkFMX1NURVApIHtcbiAgICByZXR1cm4gbmV3IE1hbnVhbEFwcHJvdmFsU3RlcChpZCwge1xuICAgICAgY29tbWVudDogdHlwZW9mIG1lcmdlZC5BUFBST1ZBTF9DT01NRU5UID09PSAnc3RyaW5nJyA/IG1lcmdlZC5BUFBST1ZBTF9DT01NRU5UIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgbG9nLmRlYnVnKCdbQ3JlYXRlQ29kZUJ1aWxkU3RlcF0gQnVpbGRpbmcgc3RlcCB3aXRoIG1lcmdlZCBtZXRhZGF0YScpO1xuXG4gIC8vIFdhcm4gYWJvdXQgcmVxdWlyZWQgc2VjcmV0cyB3aXRob3V0IG9yZ0lkIChjYW4ndCByZXNvbHZlKVxuICBjb25zdCByZXF1aXJlZFNlY3JldHMgPSBwbHVnaW4uc2VjcmV0cz8uZmlsdGVyKHMgPT4gcy5yZXF1aXJlZCkgPz8gW107XG4gIGlmIChyZXF1aXJlZFNlY3JldHMubGVuZ3RoID4gMCAmJiAhb3JnSWQpIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBQbHVnaW4gXCIke3BsdWdpbi5uYW1lfVwiIGRlY2xhcmVzICR7cmVxdWlyZWRTZWNyZXRzLmxlbmd0aH0gcmVxdWlyZWQgc2VjcmV0KHMpIGJ1dCBubyBvcmdJZCBpcyBhdmFpbGFibGUuIGAgK1xuICAgICAgYFNlY3JldHMgd2lsbCBub3QgYmUgaW5qZWN0ZWQ6ICR7cmVxdWlyZWRTZWNyZXRzLm1hcChzID0+IHMubmFtZSkuam9pbignLCAnKX1gLFxuICAgICk7XG4gIH1cblxuICAvLyBSZXNvbHZlIHBsdWdpbiBzZWNyZXRzIGFzIFNFQ1JFVFNfTUFOQUdFUiBlbnYgdmFyc1xuICBjb25zdCBzZWNyZXRFbnZWYXJzID0gKHBsdWdpbi5zZWNyZXRzPy5sZW5ndGggJiYgb3JnSWQpXG4gICAgPyB0b1NlY3JldEVudlZhcnMocGx1Z2luLnNlY3JldHMsIG9yZ0lkKVxuICAgIDoge307XG5cbiAgY29uc3QgZW52ID0gYnVpbGRFbnYocGx1Z2luLCBtZXJnZWQsIGN1c3RvbUVudik7XG5cbiAgLy8gQ29kZVBpcGVsaW5lIHJlc29sdmVkIHZhcmlhYmxlcyDigJQgbXVzdCBiZSBpbiBDb2RlQnVpbGRTdGVwLmVudiAoYWN0aW9uLWxldmVsKSxcbiAgLy8gbm90IGJ1aWxkRW52aXJvbm1lbnQuZW52aXJvbm1lbnRWYXJpYWJsZXMgKHByb2plY3QtbGV2ZWwpXG4gIGNvbnN0IGFjdGlvbkVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBQSVBFTElORV9FWEVDVVRJT05fSUQ6ICcje2NvZGVwaXBlbGluZS5QaXBlbGluZUV4ZWN1dGlvbklkfScsXG4gIH07XG5cbiAgY29uc3Qgb3V0cHV0RGlyID0gcGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3Rvcnk7XG4gIGNvbnN0IGVuc3VyZU91dHB1dERpciA9IChvdXRwdXREaXIgJiYgIW91dHB1dERpci5pbmNsdWRlcygnKicpKVxuICAgID8gW2Bta2RpciAtcCBcIiR7b3V0cHV0RGlyfVwiICYmIHRvdWNoIFwiJHtvdXRwdXREaXJ9Ly5naXRrZWVwXCJgXVxuICAgIDogW107XG5cbiAgY29uc3QgeyBpbnN0YWxsQ29tbWFuZHMsIGNvbW1hbmRzIH0gPSBidWlsZENvbW1hbmRzKHBsdWdpbiwge1xuICAgIHByZUluc3RhbGxDb21tYW5kczogWy4uLmVuc3VyZU91dHB1dERpciwgLi4uKHByZUluc3RhbGxDb21tYW5kcyA/PyBbXSldLFxuICAgIHBvc3RJbnN0YWxsQ29tbWFuZHMsXG4gICAgcHJlQ29tbWFuZHMsXG4gICAgcG9zdENvbW1hbmRzLFxuICB9LCBmYWlsdXJlQmVoYXZpb3IpO1xuXG4gIGNvbnN0IHByb2dyYW1tYXRpYyA9IHsgaW5wdXQsIGluc3RhbGxDb21tYW5kcywgY29tbWFuZHMgfTtcblxuICAvLyBSZXNvbHZlIHRoZSBwbHVnaW4ncyBydW50aW1lIGltYWdlLiBDb2RlQnVpbGQgZGVmYXVsdHMgdG9cbiAgLy8gYGF3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6Ny4wYCB3aGVuIG5vIGBidWlsZEltYWdlYCBpcyBzZXQg4oCUIHRoYXQncyB0aGVcbiAgLy8gQVdTLW1hbmFnZWQgVWJ1bnR1IGltYWdlIGFuZCBET0VTIE5PVCBoYXZlIGFueSBwbHVnaW4tYmFrZWQgdG9vbHNcbiAgLy8gKHBpcGVsaW5lLW1hbmFnZXIsIHNueWssIHRlcnJhZm9ybSwgZXRjLikuIFdpcmluZyB0aGUgcGx1Z2luJ3MgaW1hZ2VcbiAgLy8gaGVyZSBtZWFucyBDb2RlQnVpbGQgcHVsbHMgZnJvbSBvdXIgcHJpdmF0ZSByZWdpc3RyeSBhbmQgdGhlIHRvb2xzXG4gIC8vIGluc3RhbGxlZCBpbiB0aGUgcGx1Z2luJ3MgRG9ja2VyZmlsZSBhcmUgYWN0dWFsbHkgYXZhaWxhYmxlLlxuICBjb25zdCBwbHVnaW5CdWlsZEltYWdlID0gcmVzb2x2ZVBsdWdpbkltYWdlKHNjb3BlLCBwbHVnaW4sIG9yZ0lkKTtcblxuICAvLyBTaGVsbFN0ZXAgYnJhbmNoLlxuICAvLyBTaGVsbFN0ZXAgaXRzZWxmIGRvZXNuJ3QgYWNjZXB0IGBidWlsZEVudmlyb25tZW50YC9gYnVpbGRJbWFnZWAuIENES1xuICAvLyBwaXBlbGluZXMgd3JhcHMgU2hlbGxTdGVwcyBpbiBhIGRlZmF1bHQgQ29kZUJ1aWxkIGFjdGlvbiB0aGF0IHJ1bnMgb25cbiAgLy8gYGF3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6Ny4wYCDigJQgd2hpY2ggd29uJ3QgaGF2ZSB0aGUgcGx1Z2luJ3MgdG9vbHMuXG4gIC8vXG4gIC8vIFNvIHdoZW4gYSBTSEVMTF9TVEVQIHBsdWdpbiBET0VTIGhhdmUgYW4gaW1hZ2UgKGJlY2F1c2UgaXRzIGF1dGhvclxuICAvLyBiYWtlZCB0b29scyBpbnRvIGEgRG9ja2VyZmlsZSksIHdlIFBST01PVEUgaXQgdG8gYSBDb2RlQnVpbGRTdGVwIHdpdGhcbiAgLy8gdGhlIHJlc29sdmVkIGltYWdlLiBUaGUgcGx1Z2luIGF1dGhvcidzIGludGVudCAoXCJ1c2UgbXkgYmFrZWQgdG9vbHNcIilcbiAgLy8gaXMgcHJlc2VydmVkIHdpdGhvdXQgZm9yY2luZyB0aGVtIHRvIGNoYW5nZSBwbHVnaW5UeXBlLlxuICAvL1xuICAvLyBXaGVuIHRoZSBwbHVnaW4gaGFzIG5vIGltYWdlIChvciByZWdpc3RyeSBpc24ndCBjb25maWd1cmVkKSwgd2Uga2VlcFxuICAvLyB0aGUgb3JpZ2luYWwgU2hlbGxTdGVwIOKAlCBpdCdzIGxpZ2h0ZXIgd2VpZ2h0IGFuZCB0aGUgZGVmYXVsdFxuICAvLyBDb2RlQnVpbGQgaW1hZ2UgaXMgZmluZS5cbiAgaWYgKHBsdWdpbi5wbHVnaW5UeXBlID09PSBQbHVnaW5UeXBlLlNIRUxMX1NURVApIHtcbiAgICBpZiAoIXBsdWdpbkJ1aWxkSW1hZ2UpIHtcbiAgICAgIHJldHVybiBuZXcgU2hlbGxTdGVwKGlkLCB7XG4gICAgICAgIC4uLnByb2dyYW1tYXRpYyxcbiAgICAgICAgZW52OiB7IC4uLmVudiwgLi4uYWN0aW9uRW52IH0sXG4gICAgICAgIC4uLm1ldGFkYXRhRm9yU2hlbGxTdGVwKG1lcmdlZCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBbQ3JlYXRlQ29kZUJ1aWxkU3RlcF0gU0hFTExfU1RFUCBwbHVnaW4gXCIke3BsdWdpbi5uYW1lfVwiIGhhcyBpbWFnZVRhZyDigJQgcHJvbW90aW5nIHRvIENvZGVCdWlsZFN0ZXAgc28gdGhlIHBsdWdpbiBpbWFnZSBpcyBhY3R1YWxseSB1c2VkYCk7XG4gICAgLy8gRmFsbCB0aHJvdWdoIHRvIHRoZSBDb2RlQnVpbGRTdGVwIHBhdGggYmVsb3cuXG4gIH1cblxuICBjb25zdCBjb21wdXRlVHlwZSA9IGdldENvbXB1dGVUeXBlKFxuICAgIHBsdWdpbi5jb21wdXRlVHlwZSA/PyBvcHRpb25zLmRlZmF1bHRDb21wdXRlVHlwZSA/PyAnU01BTEwnLFxuICApO1xuXG4gIGNvbnN0IG5ldHdvcmtQcm9wcyA9IG5ldHdvcmtcbiAgICA/IHJlc29sdmVOZXR3b3JrKHNjb3BlLCBvcHRpb25zLnVuaXF1ZUlkLCBuZXR3b3JrKVxuICAgIDoge307XG5cbiAgLy8gTWV0YWRhdGEgc3ByZWFkIGxhc3Qgc28gaXQgY2FuIG92ZXJyaWRlIHByb2dyYW1tYXRpYyBkZWZhdWx0cy5cbiAgLy8gTk9URTogQ2FjaGluZyBpcyBzdXBwb3J0ZWQgdmlhIHR3byBtZXRhZGF0YSBwYXRoczpcbiAgLy8gICAxLiBNZXRhZGF0YUtleXMuQ0FDSEUgKCdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmNhY2hlJykg4oCUIHBhc3NlZCBkaXJlY3RseVxuICAvLyAgICAgIGFzIHRoZSBDb2RlQnVpbGRTdGVwIGBjYWNoZWAgcHJvcCAoZXhwZWN0cyBhIGNvZGVidWlsZC5DYWNoZSBvYmplY3QpLlxuICAvLyAgIDIuIE1ldGFkYXRhS2V5cy5QQVJUSUFMX0JVSUxEX1NQRUMgKCdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOnBhcnRpYWxidWlsZHNwZWMnKVxuICAvLyAgICAgIOKAlCBwYXNzZWQgYXMgYHBhcnRpYWxCdWlsZFNwZWNgLCB3aGljaCBjYW4gaW5jbHVkZSBhIGBjYWNoZTpgIHNlY3Rpb24gZm9yXG4gIC8vICAgICAgUzMgb3IgbG9jYWwgY2FjaGluZyAoZS5nLiwgQnVpbGRTcGVjLmZyb21PYmplY3QoeyBjYWNoZTogeyBwYXRoczogWy4uLl0gfSB9KSkuXG4gIGNvbnN0IHN0ZXAgPSBuZXcgQ29kZUJ1aWxkU3RlcChpZCwge1xuICAgIC4uLnByb2dyYW1tYXRpYyxcbiAgICAuLi5uZXR3b3JrUHJvcHMsXG4gICAgLi4uKGFkZGl0aW9uYWxJbnB1dHMgJiYgeyBhZGRpdGlvbmFsSW5wdXRzIH0pLFxuICAgIC4uLih0aW1lb3V0ICYmIHsgdGltZW91dDogRHVyYXRpb24ubWludXRlcyh0aW1lb3V0KSB9KSxcbiAgICBlbnY6IGFjdGlvbkVudixcbiAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiBwbHVnaW4ucHJpbWFyeU91dHB1dERpcmVjdG9yeSA/PyB1bmRlZmluZWQsXG4gICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgY29tcHV0ZVR5cGUsXG4gICAgICAuLi4ocGx1Z2luQnVpbGRJbWFnZSAmJiB7IGJ1aWxkSW1hZ2U6IHBsdWdpbkJ1aWxkSW1hZ2UgfSksXG4gICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICAuLi50b0NvZGVCdWlsZEVudlZhcnMoZW52KSxcbiAgICAgICAgLi4uc2VjcmV0RW52VmFycyxcbiAgICAgIH0sXG4gICAgICAuLi5tZXRhZGF0YUZvckJ1aWxkRW52aXJvbm1lbnQobWVyZ2VkKSxcbiAgICB9LFxuICAgIC4uLm1ldGFkYXRhRm9yQ29kZUJ1aWxkU3RlcChtZXJnZWQpLFxuICB9KTtcblxuICAvLyBSZWdpc3RlciB3aXRoIGFydGlmYWN0IG1hbmFnZXIgaWYgcHJpbWFyeU91dHB1dERpcmVjdG9yeSBpcyBzZXRcbiAgaWYgKHBsdWdpbi5wcmltYXJ5T3V0cHV0RGlyZWN0b3J5ICYmIGFydGlmYWN0TWFuYWdlciAmJiBzdGFnZU5hbWUpIHtcbiAgICBjb25zdCBhcnRpZmFjdEtleTogQXJ0aWZhY3RLZXkgPSB7XG4gICAgICBzdGFnZU5hbWUsXG4gICAgICBzdGFnZUFsaWFzOiBzdGFnZUFsaWFzID8/IGAke3N0YWdlTmFtZX0tYWxpYXNgLFxuICAgICAgcGx1Z2luTmFtZTogcGx1Z2luLm5hbWUsXG4gICAgICBwbHVnaW5BbGlhczogcGx1Z2luQWxpYXMgPz8gYCR7cGx1Z2luLm5hbWV9LWFsaWFzYCxcbiAgICAgIG91dHB1dERpcmVjdG9yeTogcGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3RvcnksXG4gICAgfTtcbiAgICBhcnRpZmFjdE1hbmFnZXIuYWRkKGFydGlmYWN0S2V5LCBzdGVwKTtcbiAgfVxuXG4gIHJldHVybiBzdGVwO1xufVxuXG4vKipcbiAqIENvbnZlcnQgc3RyaW5nIG9yIENvbXB1dGVUeXBlIGVudW0gdG8gQ0RLIENvbXB1dGVUeXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wdXRlVHlwZShpbnB1dDogc3RyaW5nIHwgQ0RLQ29tcHV0ZVR5cGUgPSAnU01BTEwnKTogQ0RLQ29tcHV0ZVR5cGUge1xuICAvLyBJZiBhbHJlYWR5IGEgQ0RLIENvbXB1dGVUeXBlLCByZXR1cm4gYXMtaXNcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkID0gaW5wdXQudG9VcHBlckNhc2UoKSBhcyBDb21wdXRlVHlwZTtcblxuICBjb25zdCBtYXBwaW5nOiBSZWNvcmQ8Q29tcHV0ZVR5cGUsIENES0NvbXB1dGVUeXBlPiA9IHtcbiAgICBbQ29tcHV0ZVR5cGUuU01BTExdOiBDREtDb21wdXRlVHlwZS5TTUFMTCxcbiAgICBbQ29tcHV0ZVR5cGUuTUVESVVNXTogQ0RLQ29tcHV0ZVR5cGUuTUVESVVNLFxuICAgIFtDb21wdXRlVHlwZS5MQVJHRV06IENES0NvbXB1dGVUeXBlLkxBUkdFLFxuICAgIFtDb21wdXRlVHlwZS5YMl9MQVJHRV06IENES0NvbXB1dGVUeXBlLlgyX0xBUkdFLFxuICB9O1xuXG4gIGNvbnN0IHJlc3VsdCA9IG1hcHBpbmdbbm9ybWFsaXplZF07XG4gIGlmICghcmVzdWx0KSB7XG4gICAgbG9nLndhcm4oYFVua25vd24gY29tcHV0ZSB0eXBlIFwiJHtpbnB1dH1cIiwgZmFsbGluZyBiYWNrIHRvIFNNQUxMYCk7XG4gICAgcmV0dXJuIENES0NvbXB1dGVUeXBlLlNNQUxMO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGxldHRlcnMgb3IgbnVtYmVycyB3aXRoIHRoZSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBwYXJhbSBpbnB1dCAtIFRoZSBzdHJpbmcgdG8gcHJvY2Vzc1xuICogQHBhcmFtIHJlcGxhY2VWYWx1ZSAtIFRoZSBjaGFyYWN0ZXIocykgdG8gcmVwbGFjZSBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgd2l0aCAoZGVmYXVsdDogJ18nKVxuICogQHJldHVybnMgVGhlIHN0cmluZyB3aXRoIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyByZXBsYWNlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZU5vbkFscGhhbnVtZXJpYyhpbnB1dDogc3RyaW5nLCByZXBsYWNlVmFsdWU6IHN0cmluZyA9ICdfJyk6IHN0cmluZyB7XG4gIHJldHVybiBpbnB1dC5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgcmVwbGFjZVZhbHVlKTtcbn1cblxuLyoqXG4gKiBVbndyYXAgYSBTZWNyZXRWYWx1ZSB8IHN0cmluZyBpbnRvIGEgcGxhaW4gc3RyaW5nLlxuICogV2hlbiBhIFNlY3JldFZhbHVlIGlzIHByb3ZpZGVkIChlLmcuIGZyb20gU2VjcmV0cyBNYW5hZ2VyKSwgY2FsbHMgdW5zYWZlVW53cmFwKClcbiAqIHRvIGV4dHJhY3QgdGhlIHVuZGVybHlpbmcgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBTZWNyZXQodmFsdWU6IFNlY3JldFZhbHVlIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IHZhbHVlLnVuc2FmZVVud3JhcCgpO1xufVxuIl19
401
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3BpcGVsaW5lLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBc0J0QyxzQkFFQztBQVNELGdEQVFDO0FBa0pELGdEQXVGQztBQUVELGtEQTRJQztBQUtELHdDQXFCQztBQVFELHdEQUVDO0FBT0Qsb0NBRUM7QUEzY0QseURBQTBEO0FBRTFELDZDQUEyRDtBQUMzRCw2REFBc0k7QUFDdEksdUVBQXdEO0FBQ3hELHFEQUFxRjtBQUdyRix5REFBaUg7QUFDakgsdUNBQTJDO0FBQzNDLHFEQUE4RjtBQUM5RixxREFBNkQ7QUFFN0QsaUVBQXFFO0FBRXJFLE1BQU0sR0FBRyxHQUFHLElBQUEsdUJBQVksRUFBQyxRQUFRLENBQUMsQ0FBQztBQUVuQzs7R0FFRztBQUNILFNBQWdCLEtBQUssQ0FBQyxHQUFHLE9BQXFDO0lBQzVELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQWlCLENBQUM7QUFDdkQsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLFFBQXNCO0lBQ3ZELE1BQU0sR0FBRyxHQUEyQixFQUFFLENBQUM7SUFDdkMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxvQ0FBbUIsQ0FBQyxFQUFFLENBQUM7WUFDekMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLGFBQWEsR0FB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QyxNQUFNLENBQUMsRUFBRSwyQkFBYyxDQUFDLE1BQU07UUFDM0MsQ0FBQyw0QkFBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLDJCQUFjLENBQUMsS0FBSztRQUN6QyxDQUFDLDRCQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsMkJBQWMsQ0FBQyxRQUFRO0tBQ2hELENBQUM7SUFFRixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osR0FBRyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsS0FBSywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sMkJBQWMsQ0FBQyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLEtBQWEsRUFBRSxlQUF1QixHQUFHO0lBQzlFLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixZQUFZLENBQUMsS0FBMkI7SUFDdEQsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ2xFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhJztcbmltcG9ydCB7IER1cmF0aW9uLCBTZWNyZXRWYWx1ZSwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBCdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlLCBDb21wdXRlVHlwZSBhcyBDREtDb21wdXRlVHlwZSwgTGludXhCdWlsZEltYWdlLCBJQnVpbGRJbWFnZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IENvZGVCdWlsZFN0ZXAsIE1hbnVhbEFwcHJvdmFsU3RlcCwgU2hlbGxTdGVwIH0gZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IEFydGlmYWN0S2V5IH0gZnJvbSAnLi9hcnRpZmFjdC1tYW5hZ2VyJztcbmltcG9ydCB7IG1ldGFkYXRhRm9yU2hlbGxTdGVwLCBtZXRhZGF0YUZvckNvZGVCdWlsZFN0ZXAsIG1ldGFkYXRhRm9yQnVpbGRFbnZpcm9ubWVudCB9IGZyb20gJy4vbWV0YWRhdGEtYnVpbGRlcic7XG5pbXBvcnQgeyByZXNvbHZlTmV0d29yayB9IGZyb20gJy4vbmV0d29yayc7XG5pbXBvcnQgeyBQbHVnaW5UeXBlLCBDb21wdXRlVHlwZSwgTWV0YURhdGFUeXBlLCBDREtfTUVUQURBVEFfUFJFRklYIH0gZnJvbSAnLi9waXBlbGluZS10eXBlcyc7XG5pbXBvcnQgeyBDb25maWcsIENvcmVDb25zdGFudHMgfSBmcm9tICcuLi9jb25maWcvYXBwLWNvbmZpZyc7XG5pbXBvcnQgdHlwZSB7IENvZGVCdWlsZFN0ZXBPcHRpb25zLCBTdGVwQ3VzdG9taXphdGlvbiB9IGZyb20gJy4uL3BpcGVsaW5lL3N0ZXAtdHlwZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVBsdWdpblRlbXBsYXRlcyB9IGZyb20gJy4uL3RlbXBsYXRlL3BsdWdpbi1yZXNvbHZlcic7XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcignSGVscGVyJyk7XG5cbi8qKlxuICogTWVyZ2UgbXVsdGlwbGUgbWV0YWRhdGEgb2JqZWN0cyBpbnRvIG9uZS4gTGF0ZXIgc291cmNlcyBvdmVycmlkZSBlYXJsaWVyIG9uZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSguLi5zb3VyY2VzOiBBcnJheTxQYXJ0aWFsPE1ldGFEYXRhVHlwZT4+KTogTWV0YURhdGFUeXBlIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIC4uLnNvdXJjZXMpIGFzIE1ldGFEYXRhVHlwZTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IG5vbi1uYW1lc3BhY2VkIG1ldGFkYXRhIGtleXMgYXMgZW52aXJvbm1lbnQgdmFyaWFibGUgc3RyaW5ncy5cbiAqIEtleXMgc3RhcnRpbmcgd2l0aCAnYXdzOmNkazonIGFyZSByZXNlcnZlZCBmb3IgQ0RLIGNvbnN0cnVjdCBwcm9wc1xuICogKHByb2Nlc3NlZCBieSBtZXRhZGF0YSBleHRyYWN0aW9uIGZ1bmN0aW9ucykgYW5kIGFyZSBleGNsdWRlZCBoZXJlLlxuICpcbiAqIEFsbCB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBzdHJpbmdzIGZvciBDb2RlQnVpbGQgY29tcGF0aWJpbGl0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RNZXRhZGF0YUVudihtZXRhZGF0YTogTWV0YURhdGFUeXBlKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXRhZGF0YSkpIHtcbiAgICBpZiAoIWtleS5zdGFydHNXaXRoKENES19NRVRBREFUQV9QUkVGSVgpKSB7XG4gICAgICBlbnZba2V5XSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbnY7XG59XG5cbi8qKlxuICogQnVpbGQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gcGx1Z2luIGNvbmZpZywgbWVyZ2VkIG1ldGFkYXRhLCBhbmQgY3VzdG9tIGVudi5cbiAqXG4gKiBNZXJnZSBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgMS4gcGx1Z2luLmVudiDigJQgcGx1Z2luIGRlZmF1bHQgZW52IHZhcnMgKGxvd2VzdCBwcmlvcml0eSlcbiAqICAgMi4gbm9uLW5hbWVzcGFjZWQgbWV0YWRhdGEga2V5cyDigJQgZS5nLiBQWVRIT05fVkVSU0lPTiwgV09SS0RJUlxuICogICAzLiBjdXN0b21FbnYg4oCUIHBlci1zdGVwIGN1c3RvbSBlbnYgdmFycyAoaGlnaGVzdCBwcmlvcml0eSlcbiAqL1xuY29uc3QgQk9PVFNUUkFQX0NNRCA9ICdleHBvcnQgV09SS0RJUj0ke1dPUktESVI6LS4vfTsgY2QgJHtXT1JLRElSfSc7XG5cbmZ1bmN0aW9uIGJ1aWxkRW52KHBsdWdpbjogUGx1Z2luLCBtZXRhZGF0YTogTWV0YURhdGFUeXBlLCBjdXN0b21FbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiB7XG4gICAgLi4uKHBsdWdpbi5lbnYgPz8ge30pLFxuICAgIC4uLmV4dHJhY3RNZXRhZGF0YUVudihtZXRhZGF0YSksXG4gICAgLi4uKGN1c3RvbUVudiA/PyB7fSksXG4gIH07XG59XG5cbi8qKlxuICogV3JhcCBidWlsZCBjb21tYW5kcyBiYXNlZCBvbiBmYWlsdXJlIGJlaGF2aW9yLlxuICogLSAnZmFpbCcgKGRlZmF1bHQpOiBObyB3cmFwcGluZyDigJQgY29tbWFuZHMgZmFpbCB0aGUgcGlwZWxpbmUgbmF0dXJhbGx5LlxuICogLSAnd2Fybic6IFJ1biBjb21tYW5kcyB3aXRoIGBzZXQgK2VgLCBjYXB0dXJlIGZhaWx1cmVzLCBsb2cgd2FybmluZ3MsIGNvbnRpbnVlLlxuICogLSAnaWdub3JlJzogQXBwZW5kIGB8fCB0cnVlYCB0byBlYWNoIGNvbW1hbmQg4oCUIGZhaWx1cmVzIGFyZSBzaWxlbnRseSBzd2FsbG93ZWQuXG4gKlxuICogT25seSBhcHBsaWVkIHRvIGJ1aWxkIGNvbW1hbmRzLCBub3QgaW5zdGFsbCBjb21tYW5kcyAoaW5zdGFsbCBmYWlsdXJlcyBzaG91bGQgYWx3YXlzIHN0b3AgdGhlIGJ1aWxkKS5cbiAqL1xuZnVuY3Rpb24gd3JhcENvbW1hbmRzRm9yRmFpbHVyZUJlaGF2aW9yKGNvbW1hbmRzOiBzdHJpbmdbXSwgYmVoYXZpb3I/OiAnZmFpbCcgfCAnd2FybicgfCAnaWdub3JlJyk6IHN0cmluZ1tdIHtcbiAgaWYgKCFiZWhhdmlvciB8fCBiZWhhdmlvciA9PT0gJ2ZhaWwnKSByZXR1cm4gY29tbWFuZHM7XG5cbiAgaWYgKGJlaGF2aW9yID09PSAnaWdub3JlJykge1xuICAgIHJldHVybiBjb21tYW5kcy5tYXAoY21kID0+IGAke2NtZH0gfHwgdHJ1ZWApO1xuICB9XG5cbiAgLy8gJ3dhcm4nOiBydW4gYWxsIGNvbW1hbmRzLCBjYXB0dXJlIGZhaWx1cmVzLCBidXQgZG9uJ3Qgc3RvcFxuICByZXR1cm4gW1xuICAgICdzZXQgK2UnLFxuICAgICdfU1RFUF9FWElUPTAnLFxuICAgIC4uLmNvbW1hbmRzLm1hcChjbWQgPT4gYCR7Y21kfSB8fCB7IGVjaG8gXCJXQVJOSU5HOiBDb21tYW5kIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAkP1wiOyBfU1RFUF9FWElUPTE7IH1gKSxcbiAgICAnc2V0IC1lJyxcbiAgICAnaWYgWyBcIiRfU1RFUF9FWElUXCIgLW5lIDAgXTsgdGhlbiBlY2hvIFwiV0FSTklORzogT25lIG9yIG1vcmUgY29tbWFuZHMgaW4gdGhpcyBzdGVwIGZhaWxlZFwiOyBmaScsXG4gIF07XG59XG5cbi8qKlxuICogQnVpbGQgYm9vdHN0cmFwLXByZWZpeGVkIGluc3RhbGwgYW5kIGJ1aWxkIGNvbW1hbmRzIGZyb20gcGx1Z2luIGNvbmZpZy5cbiAqIEVhY2ggY29tbWFuZCBsaXN0IGlzIHByZXBlbmRlZCB3aXRoIGEgV09SS0RJUiBib290c3RyYXAgdGhhdCBkZWZhdWx0cyB0byAnLi8nLlxuICogV2hlbiBjdXN0b20gY29tbWFuZHMgYXJlIHByb3ZpZGVkLCB0aGV5IGFyZSBpbmplY3RlZCBiZWZvcmUvYWZ0ZXIgdGhlIHBsdWdpbidzIGNvbW1hbmRzLlxuICogQnVpbGQgY29tbWFuZHMgYXJlIG9wdGlvbmFsbHkgd3JhcHBlZCBieSBmYWlsdXJlQmVoYXZpb3IgbG9naWMuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQ29tbWFuZHMocGx1Z2luOiBQbHVnaW4sIGN1c3RvbT86IFN0ZXBDdXN0b21pemF0aW9uLCBmYWlsdXJlQmVoYXZpb3I/OiAnZmFpbCcgfCAnd2FybicgfCAnaWdub3JlJyk6IHsgaW5zdGFsbENvbW1hbmRzOiBzdHJpbmdbXTsgY29tbWFuZHM6IHN0cmluZ1tdIH0ge1xuICBjb25zdCB1c2VyQ29tbWFuZHMgPSBbXG4gICAgLi4uKGN1c3RvbT8ucHJlQ29tbWFuZHMgPz8gW10pLFxuICAgIC4uLihwbHVnaW4uY29tbWFuZHM/Lmxlbmd0aCA/IHBsdWdpbi5jb21tYW5kcyA6IFtdKSxcbiAgICAuLi4oY3VzdG9tPy5wb3N0Q29tbWFuZHMgPz8gW10pLFxuICBdO1xuXG4gIHJldHVybiB7XG4gICAgaW5zdGFsbENvbW1hbmRzOiBbXG4gICAgICBCT09UU1RSQVBfQ01ELFxuICAgICAgLi4uKGN1c3RvbT8ucHJlSW5zdGFsbENvbW1hbmRzID8/IFtdKSxcbiAgICAgIC4uLihwbHVnaW4uaW5zdGFsbENvbW1hbmRzID8/IFtdKSxcbiAgICAgIC4uLihjdXN0b20/LnBvc3RJbnN0YWxsQ29tbWFuZHMgPz8gW10pLFxuICAgIF0sXG4gICAgY29tbWFuZHM6IFtCT09UU1RSQVBfQ01ELCAuLi53cmFwQ29tbWFuZHNGb3JGYWlsdXJlQmVoYXZpb3IodXNlckNvbW1hbmRzLCBmYWlsdXJlQmVoYXZpb3IpXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgcGxhaW4gZW52IHJlY29yZCB0byBDb2RlQnVpbGQncyBlbnZpcm9ubWVudFZhcmlhYmxlcyBmb3JtYXQgKFBMQUlOVEVYVCkuXG4gKi9cbmZ1bmN0aW9uIHRvQ29kZUJ1aWxkRW52VmFycyhlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiBzdHJpbmcgfT4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGVudikubWFwKChbbmFtZSwgdmFsdWVdKSA9PiBbbmFtZSwgeyB2YWx1ZSB9XSksXG4gICk7XG59XG5cbi8qKlxuICogQnVpbGQgU0VDUkVUU19NQU5BR0VSLXR5cGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gcGx1Z2luIHNlY3JldCBkZWNsYXJhdGlvbnMuXG4gKiBVc2VzIG5hbWluZyBjb252ZW50aW9uOiBwaXBlbGluZS1idWlsZGVyL3tvcmdJZH0ve3NlY3JldE5hbWV9XG4gKiBFYWNoIG9yZyBtYW5hZ2VzIHRoZXNlIHNlY3JldHMgaW4gdGhlaXIgb3duIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKi9cbmNvbnN0IFZBTElEX1NFQ1JFVF9OQU1FID0gL15bYS16QS1aMC05L18rPS5ALV0rJC87XG5cbmZ1bmN0aW9uIHRvU2VjcmV0RW52VmFycyhcbiAgc2VjcmV0czogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHJlcXVpcmVkOiBib29sZWFuIH0+LFxuICBvcmdJZDogc3RyaW5nLFxuKTogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogc3RyaW5nOyB0eXBlOiBCdWlsZEVudmlyb25tZW50VmFyaWFibGVUeXBlIH0+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBzZWNyZXRzLm1hcCgoeyBuYW1lIH0pID0+IHtcbiAgICAgIGNvbnN0IHNlY3JldFBhdGggPSBDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgob3JnSWQsIG5hbWUpO1xuICAgICAgaWYgKCFWQUxJRF9TRUNSRVRfTkFNRS50ZXN0KHNlY3JldFBhdGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VjcmV0IHBhdGggXCIke3NlY3JldFBhdGh9XCIgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIGZvciBBV1MgU2VjcmV0cyBNYW5hZ2VyYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW1xuICAgICAgICBuYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6IHNlY3JldFBhdGgsXG4gICAgICAgICAgdHlwZTogQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlVHlwZS5TRUNSRVRTX01BTkFHRVIsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pLFxuICApO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIENvZGVCdWlsZCBzdGVwIG9yIFNoZWxsIHN0ZXAgYmFzZWQgb24gcGx1Z2luIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogTWV0YWRhdGEgbWVyZ2Ugb3JkZXIgKGxhc3Qgd2lucyk6XG4gKiAgIDEuIFN0ZXAtbGV2ZWwgbWV0YWRhdGEgKGZyb20gb3B0aW9ucy5tZXRhZGF0YSlcbiAqICAgMi4gUGx1Z2luIG1ldGFkYXRhIChmcm9tIHBsdWdpbi5tZXRhZGF0YSBpbiBkYXRhYmFzZSlcbiAqXG4gKiBFbnZpcm9ubWVudCBtZXJnZSBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgMS4gUGx1Z2luIGVudiB2YXJzIChmcm9tIHBsdWdpbi5lbnYpXG4gKiAgIDIuIEN1c3RvbSBlbnYgdmFycyAoZnJvbSBvcHRpb25zLmVudilcbiAqICAgMy4gV09SS0RJUiBmcm9tIG1lcmdlZCBtZXRhZGF0YVxuICpcbiAqIENESyBwcm9wIHNwcmVhZCBvcmRlciAobGFzdCB3aW5zKTpcbiAqICAgcHJvZ3JhbW1hdGljIGRlZmF1bHRzIChpbnB1dCwgY29tbWFuZHMsIGVudiwgbmV0d29yaykg4oaSIG1ldGFkYXRhIG92ZXJyaWRlc1xuICpcbiAqIFRoaXMgbWVhbnMgbWV0YWRhdGEga2V5cyBsaWtlIGBhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmNvbW1hbmRzYFxuICogd2lsbCBvdmVycmlkZSB0aGUgcGx1Z2luLWRlcml2ZWQgY29tbWFuZHMgd2hlbiBleHBsaWNpdGx5IHNldC5cbiAqL1xuLyoqXG4gKiBSZXNvbHZlIHRoZSBDb2RlQnVpbGQgaW1hZ2UgdG8gdXNlIGZvciBhIHBsdWdpbi5cbiAqXG4gKiBTdHJhdGVneTpcbiAqICAgMS4gSWYgdGhlIHBsdWdpbiBzZXRzIGBhd3M6Y2RrOmNvZGVidWlsZDpidWlsZGVudmlyb25tZW50OmJ1aWxkSW1hZ2VgXG4gKiAgICAgIGV4cGxpY2l0bHkgaW4gbWV0YWRhdGEsIHRoZSBtZXRhZGF0YS1idWlsZGVyIHBhc3N0aHJvdWdoIGhhbmRsZXMgaXRcbiAqICAgICAgKHZpYSBgbWV0YWRhdGFGb3JCdWlsZEVudmlyb25tZW50YCkuIFRoaXMgZnVuY3Rpb24gcmV0dXJuc1xuICogICAgICBgdW5kZWZpbmVkYCBhbmQgdGhlIG1ldGFkYXRhIHdpbnMuXG4gKiAgIDIuIE90aGVyd2lzZSwgaWYgdGhlIHBsdWdpbiBoYXMgYSBgbmFtZWArYHZlcnNpb25gIEFORCB0aGUgcmVnaXN0cnlcbiAqICAgICAgY29uZmlnIGlzIHBvcHVsYXRlZCwgYnVpbGQgYSBgTGludXhCdWlsZEltYWdlLmZyb21Eb2NrZXJSZWdpc3RyeSgpYFxuICogICAgICBpbWFnZSBwb2ludGluZyBhdCBgPHJlZ2lzdHJ5LWhvc3Q+Ojxwb3J0Pi88bnM+LzxuYW1lPjo8dmVyc2lvbj5gXG4gKiAgICAgIHdoZXJlIGA8bnM+YCBpcyBgc3lzdGVtYCBvciBgb3JnLTxvcmdJZD5gLiBDb2RlQnVpbGQgYXV0aGVudGljYXRlcyBieVxuICogICAgICBzZW5kaW5nIHRoZSBwZXItb3JnIHBsYXRmb3JtIFNlY3JldCBhcyBCYXNpYyBhdXRoIHRvXG4gKiAgICAgIGBwaXBlbGluZS1pbWFnZS1yZWdpc3RyeWAncyBgL3Rva2VuYCBlbmRwb2ludDsgdGhlIEpXVCBpbiBgcGFzc3dvcmRgXG4gKiAgICAgIHJlc29sdmVzIHRvIGEgcmVnaXN0cnkgdG9rZW4gc2NvcGVkIHRvIHRoZSBvcmcuXG4gKiAgIDMuIElmIGBtZXRhZGF0YV9vbmx5YCwgcmV0dXJuIGB1bmRlZmluZWRgIHNvIENvZGVCdWlsZCB1c2VzIGl0cyBkZWZhdWx0XG4gKiAgICAgIChgc3RhbmRhcmQ6Ny4wYCkuXG4gKlxuICogYHNjb3BlYCBhbmQgYG9yZ0lkYCBhcmUgcmVxdWlyZWQ6IHRoZSBwZXItb3JnIHBsYXRmb3JtIFNlY3JldCBpcyBuYW1lZFxuICogYHBpcGVsaW5lLWJ1aWxkZXIvPG9yZ0lkPi9wbGF0Zm9ybWAsIGFuZCBgU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoKWBcbiAqIG5lZWRzIGEgQ29uc3RydWN0IHRvIGFuY2hvciB0aGUgaW1wb3J0ZWQgc2VjcmV0IHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBsdWdpbkltYWdlKHNjb3BlOiBDb25zdHJ1Y3QgfCB1bmRlZmluZWQsIHBsdWdpbjogUGx1Z2luLCBvcmdJZD86IHN0cmluZyk6IElCdWlsZEltYWdlIHwgdW5kZWZpbmVkIHtcbiAgLy8gYG1ldGFkYXRhX29ubHlgIHBsdWdpbnMgbGVnaXRpbWF0ZWx5IGhhdmUgbm8gaW1hZ2Ug4oCUIHRoZWlyIHdvcmsgcnVuc1xuICAvLyBpbiB0aGUgZGVmYXVsdCBDb2RlQnVpbGQgaW1hZ2UuIFF1aWV0IHNraXAuXG4gIGlmIChwbHVnaW4uYnVpbGRUeXBlID09PSAnbWV0YWRhdGFfb25seScpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgLy8gYnVpbGRfaW1hZ2UgLyBwcmVidWlsdCBwbHVnaW5zIG11c3QgaGF2ZSBuYW1lICsgdmVyc2lvbiAoREIgY29uc3RyYWludFxuICAvLyBtYWtlcyBib3RoIE5PVCBOVUxMKS4gRGVmZW5zaXZlIGNoZWNrIGluIGNhc2UgYSBtYWxmb3JtZWQgcm93IHNsaXBzIGluLlxuICBpZiAoIXBsdWdpbi5uYW1lIHx8ICFwbHVnaW4udmVyc2lvbikge1xuICAgIGxvZy53YXJuKFxuICAgICAgYFBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9XCIgaGFzIGJ1aWxkVHlwZT0ke3BsdWdpbi5idWlsZFR5cGV9IGJ1dCBtaXNzaW5nIG5hbWUvdmVyc2lvbiDigJQgYCArXG4gICAgICAnQ29kZUJ1aWxkIHdpbGwgcnVuIG9uIGF3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6Ny4wIGFuZCB3b25cXCd0IGhhdmUgdGhlIHBsdWdpblxcJ3MgYmFrZWQgdG9vbHMuJyxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQgcmVnaXN0cnk7XG4gIHRyeSB7XG4gICAgcmVnaXN0cnkgPSBDb25maWcuZ2V0KCdyZWdpc3RyeScpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBDb25maWcgbmFtZXNwYWNlIG5vdCBsb2FkZWQgKGUuZy4sIHVuaXQgdGVzdHMgd2l0aG91dCBmdWxsIGNvbmZpZykuXG4gICAgbG9nLndhcm4oXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX06JHtwbHVnaW4udmVyc2lvbn1cIiBuZWVkcyB0aGUgcmVnaXN0cnkgY29uZmlnIGJ1dCBpdCdzIG5vdCBsb2FkZWQg4oCUIGAgK1xuICAgICAgJ0NvZGVCdWlsZCB3aWxsIGZhbGwgYmFjayB0byBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjcuMC4gJyArXG4gICAgICAnU2V0IElNQUdFX1JFR0lTVFJZX0hPU1QgKyBJTUFHRV9SRUdJU1RSWV9QT1JUIGluIHBpcGVsaW5lLW1hbmFnZXJcXCdzIGVudmlyb25tZW50LicsXG4gICAgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFyZWdpc3RyeT8uaG9zdCkge1xuICAgIGxvZy53YXJuKFxuICAgICAgYFBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9OiR7cGx1Z2luLnZlcnNpb259XCIgbmVlZHMgSU1BR0VfUkVHSVNUUllfSE9TVCBidXQgaXQncyBlbXB0eSDigJQgYCArXG4gICAgICAnQ29kZUJ1aWxkIHdpbGwgZmFsbCBiYWNrIHRvIGF3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6Ny4wLiAnICtcbiAgICAgICdTZXQgSU1BR0VfUkVHSVNUUllfSE9TVCBpbiBwaXBlbGluZS1tYW5hZ2VyXFwncyBlbnZpcm9ubWVudCB0byB1c2UgdGhlIHBsdWdpbiBpbWFnZS4nLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNjb3BlKSB7XG4gICAgbG9nLndhcm4oYFBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9XCIgaW1hZ2UgcmVzb2x1dGlvbiBza2lwcGVkOiBubyBjb25zdHJ1Y3Qgc2NvcGUgcHJvdmlkZWRgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gUGVyLW9yZyBhdXRoIHJlcXVpcmVzIG9yZ0lkIOKAlCB0aGUgU2VjcmV0IGlzIG5hbWVkIHBlciBvcmcuXG4gIGlmICghb3JnSWQpIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBQbHVnaW4gXCIke3BsdWdpbi5uYW1lfVwiIGltYWdlIHJlc29sdXRpb24gc2tpcHBlZDogb3JnSWQgaXMgcmVxdWlyZWQgdG8gYCArXG4gICAgICAncmVzb2x2ZSB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBTZWNyZXQgdXNlZCBmb3IgQ29kZUJ1aWxkIEJhc2ljIGF1dGguJyxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBDb21wb3NlIHRoZSBpbWFnZSBVUkkuIE5hbWVzcGFjZSBieSBvd25lcnNoaXA6XG4gIC8vICAgLSBQbHVnaW5zIG93bmVkIGJ5IHRoZSBzeXN0ZW0gb3JnIOKGkiBgc3lzdGVtLzxuYW1lPjo8dmVyc2lvbj5gLlxuICAvLyAgICAgcGlwZWxpbmUtaW1hZ2UtcmVnaXN0cnkncyB0b2tlbiBzZXJ2aWNlIGdyYW50cyBwdWxsIG9uIGBzeXN0ZW0vKmBcbiAgLy8gICAgIHRvIGFueSBhdXRoZW50aWNhdGVkIG9yZyB1c2VyIChyZWFkLW9ubHkgY2F0YWxvZyBvZiBzaGFyZWQgcGx1Z2lucykuXG4gIC8vICAgLSBQbHVnaW5zIG93bmVkIGJ5IGEgdGVuYW50IG9yZyDihpIgYG9yZy08b3JnSWQ+LzxuYW1lPjo8dmVyc2lvbj5gLlxuICAvLyAgICAgVGhlIHRva2VuIHNlcnZpY2UgZ3JhbnRzIHB1bGwscHVzaCBvbmx5IHRvIG1lbWJlcnMgb2YgdGhhdCBvcmcuXG4gIC8vIFRoZSBwbHVnaW4ncyBvd24gYG9yZ0lkYCAobm90IHRoZSBjYWxsZXIncykgZGVjaWRlcyB0aGUgbmFtZXNwYWNlIOKAlFxuICAvLyB0ZW5hbnQgcGlwZWxpbmVzIHB1bGxpbmcgc2hhcmVkIHN5c3RlbSBwbHVnaW5zIHN0aWxsIGdldCB0aGUgYHN5c3RlbS9gXG4gIC8vIHBhdGggYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIGltYWdlIGFjdHVhbGx5IGxpdmVzLlxuICBjb25zdCBwb3J0UGFydCA9IHJlZ2lzdHJ5LnBvcnQgJiYgcmVnaXN0cnkucG9ydCAhPT0gODAgJiYgcmVnaXN0cnkucG9ydCAhPT0gNDQzXG4gICAgPyBgOiR7cmVnaXN0cnkucG9ydH1gXG4gICAgOiAnJztcbiAgY29uc3QgU1lTVEVNX09SR19JRCA9ICdzeXN0ZW0nO1xuICBjb25zdCBuYW1lc3BhY2UgPSBwbHVnaW4ub3JnSWQgPT09IFNZU1RFTV9PUkdfSURcbiAgICA/ICdzeXN0ZW0nXG4gICAgOiBgb3JnLSR7cGx1Z2luLm9yZ0lkfWA7XG4gIGNvbnN0IGltYWdlVXJpID0gYCR7cmVnaXN0cnkuaG9zdH0ke3BvcnRQYXJ0fS8ke25hbWVzcGFjZX0vJHtwbHVnaW4ubmFtZX06JHtwbHVnaW4udmVyc2lvbn1gO1xuXG4gIC8vIENvZGVCdWlsZCByZWFkcyBgcGlwZWxpbmUtYnVpbGRlci88b3JnSWQ+L3BsYXRmb3JtYCBhbmQgc2VuZHMgaXRzXG4gIC8vIGB1c2VybmFtZWAvYHBhc3N3b3JkYCBmaWVsZHMgYXMgSFRUUCBCYXNpYyB0byB0aGUgcmVnaXN0cnkuIFRoZVxuICAvLyByZWdpc3RyeSBjaGFsbGVuZ2VzIHdpdGggYSBCZWFyZXIgcmVhbG0gcG9pbnRpbmcgYXRcbiAgLy8gcGlwZWxpbmUtaW1hZ2UtcmVnaXN0cnkncyBgL3Rva2VuYCBlbmRwb2ludDsgdGhlIERvY2tlciBjbGllbnQgZm9yd2FyZHNcbiAgLy8gdGhvc2UgY3JlZHMsIHRoZSBwYXNzd29yZCBpcyB2ZXJpZmllZCBhcyBhIHBsYXRmb3JtIEpXVCwgYW5kIGEgcmVnaXN0cnlcbiAgLy8gdG9rZW4gc2NvcGVkIHRvIHRoZSBvcmcgaXMgaXNzdWVkLlxuICAvL1xuICAvLyBTYW1lIFNlY3JldCBpcyByZWFkIGJ5IHRoZSBwbHVnaW4tbG9va3VwIExhbWJkYSAodmlhIHRoZSBgcGFzc3dvcmRgXG4gIC8vIGZpZWxkKSDigJQgb25lIFNlY3JldCBzZXJ2ZXMgYm90aCBmbG93cy5cbiAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gIGNvbnN0IHNlY3JldE5hbWUgPSBDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgob3JnSWQsICdwbGF0Zm9ybScpO1xuICAvLyBDREsgY29uc3RydWN0IElEcyBhbGxvdyBvbmx5IFtBLVphLXowLTlfLV07IHNhbml0aXplIHRoZSBzZWNyZXQgbmFtZS5cbiAgY29uc3Qgc2VjcmV0Q29uc3RydWN0SWQgPSBgUGxhdGZvcm1DcmVkc18ke3NlY3JldE5hbWUucmVwbGFjZSgvW15BLVphLXowLTlfLV0vZywgJ18nKX1gO1xuICBjb25zdCBjcmVkZW50aWFsc1NlY3JldCA9IChzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChzZWNyZXRDb25zdHJ1Y3RJZCkgYXMgU2VjcmV0IHwgdW5kZWZpbmVkKVxuICAgID8/IFNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKHN0YWNrLCBzZWNyZXRDb25zdHJ1Y3RJZCwgc2VjcmV0TmFtZSk7XG5cbiAgcmV0dXJuIExpbnV4QnVpbGRJbWFnZS5mcm9tRG9ja2VyUmVnaXN0cnkoaW1hZ2VVcmksIHtcbiAgICBzZWNyZXRzTWFuYWdlckNyZWRlbnRpYWxzOiBjcmVkZW50aWFsc1NlY3JldCxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb2RlQnVpbGRTdGVwKG9wdGlvbnM6IENvZGVCdWlsZFN0ZXBPcHRpb25zKTogU2hlbGxTdGVwIHwgQ29kZUJ1aWxkU3RlcCB8IE1hbnVhbEFwcHJvdmFsU3RlcCB7XG4gIGNvbnN0IHtcbiAgICBpZCwgaW5wdXQsIG1ldGFkYXRhLCBuZXR3b3JrLCBzY29wZSxcbiAgICBwcmVJbnN0YWxsQ29tbWFuZHMsIHBvc3RJbnN0YWxsQ29tbWFuZHMsIHByZUNvbW1hbmRzLCBwb3N0Q29tbWFuZHMsXG4gICAgZW52OiBjdXN0b21FbnYsIGFkZGl0aW9uYWxJbnB1dHMsIHRpbWVvdXQsIGZhaWx1cmVCZWhhdmlvcixcbiAgICBhcnRpZmFjdE1hbmFnZXIsIHN0YWdlTmFtZSwgc3RhZ2VBbGlhcywgcGx1Z2luQWxpYXMsIG9yZ0lkLCBwaXBlbGluZVNjb3BlLFxuICB9ID0gb3B0aW9ucztcblxuICAvLyBSZXNvbHZlIHt7IC4uLiB9fSB0ZW1wbGF0ZXMgaW4gcGx1Z2luIHNwZWMgZmllbGRzIGFnYWluc3QgdGhlIHBpcGVsaW5lIHNjb3BlLlxuICAvLyBFdmVyeSBjYWxsIGdvZXMgdGhyb3VnaCB0aGUgcmVzb2x2ZXIg4oCUIHBsdWdpbnMgd2l0aG91dCB0ZW1wbGF0ZSB0b2tlbnMgYXJlXG4gIC8vIGEgbm8tb3AgZmFzdCBwYXRoIGluc2lkZSByZXNvbHZlUGx1Z2luVGVtcGxhdGVzKCkuXG4gIGNvbnN0IHBsdWdpbiA9IHJlc29sdmVQbHVnaW5UZW1wbGF0ZXMob3B0aW9ucy5wbHVnaW4sIHBpcGVsaW5lU2NvcGUpO1xuXG4gIGNvbnN0IG1lcmdlZCA9IG1lcmdlKG1ldGFkYXRhID8/IHt9LCBwbHVnaW4ubWV0YWRhdGEgPz8ge30pO1xuXG4gIC8vIE1hbnVhbEFwcHJvdmFsU3RlcDogbm8gY29tbWFuZHMsIGVudiwgY29tcHV0ZSwgb3IgbmV0d29yayDigJQganVzdCBpZCArIG9wdGlvbmFsIGNvbW1lbnRcbiAgaWYgKHBsdWdpbi5wbHVnaW5UeXBlID09PSBQbHVnaW5UeXBlLk1BTlVBTF9BUFBST1ZBTF9TVEVQKSB7XG4gICAgcmV0dXJuIG5ldyBNYW51YWxBcHByb3ZhbFN0ZXAoaWQsIHtcbiAgICAgIGNvbW1lbnQ6IHR5cGVvZiBtZXJnZWQuQVBQUk9WQUxfQ09NTUVOVCA9PT0gJ3N0cmluZycgPyBtZXJnZWQuQVBQUk9WQUxfQ09NTUVOVCA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIGxvZy5kZWJ1ZygnW0NyZWF0ZUNvZGVCdWlsZFN0ZXBdIEJ1aWxkaW5nIHN0ZXAgd2l0aCBtZXJnZWQgbWV0YWRhdGEnKTtcblxuICAvLyBXYXJuIGFib3V0IHJlcXVpcmVkIHNlY3JldHMgd2l0aG91dCBvcmdJZCAoY2FuJ3QgcmVzb2x2ZSlcbiAgY29uc3QgcmVxdWlyZWRTZWNyZXRzID0gcGx1Z2luLnNlY3JldHM/LmZpbHRlcihzID0+IHMucmVxdWlyZWQpID8/IFtdO1xuICBpZiAocmVxdWlyZWRTZWNyZXRzLmxlbmd0aCA+IDAgJiYgIW9yZ0lkKSB7XG4gICAgbG9nLndhcm4oXG4gICAgICBgUGx1Z2luIFwiJHtwbHVnaW4ubmFtZX1cIiBkZWNsYXJlcyAke3JlcXVpcmVkU2VjcmV0cy5sZW5ndGh9IHJlcXVpcmVkIHNlY3JldChzKSBidXQgbm8gb3JnSWQgaXMgYXZhaWxhYmxlLiBgICtcbiAgICAgIGBTZWNyZXRzIHdpbGwgbm90IGJlIGluamVjdGVkOiAke3JlcXVpcmVkU2VjcmV0cy5tYXAocyA9PiBzLm5hbWUpLmpvaW4oJywgJyl9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gUmVzb2x2ZSBwbHVnaW4gc2VjcmV0cyBhcyBTRUNSRVRTX01BTkFHRVIgZW52IHZhcnNcbiAgY29uc3Qgc2VjcmV0RW52VmFycyA9IChwbHVnaW4uc2VjcmV0cz8ubGVuZ3RoICYmIG9yZ0lkKVxuICAgID8gdG9TZWNyZXRFbnZWYXJzKHBsdWdpbi5zZWNyZXRzLCBvcmdJZClcbiAgICA6IHt9O1xuXG4gIGNvbnN0IGVudiA9IGJ1aWxkRW52KHBsdWdpbiwgbWVyZ2VkLCBjdXN0b21FbnYpO1xuXG4gIC8vIENvZGVQaXBlbGluZSByZXNvbHZlZCB2YXJpYWJsZXMg4oCUIG11c3QgYmUgaW4gQ29kZUJ1aWxkU3RlcC5lbnYgKGFjdGlvbi1sZXZlbCksXG4gIC8vIG5vdCBidWlsZEVudmlyb25tZW50LmVudmlyb25tZW50VmFyaWFibGVzIChwcm9qZWN0LWxldmVsKVxuICBjb25zdCBhY3Rpb25FbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgUElQRUxJTkVfRVhFQ1VUSU9OX0lEOiAnI3tjb2RlcGlwZWxpbmUuUGlwZWxpbmVFeGVjdXRpb25JZH0nLFxuICB9O1xuXG4gIGNvbnN0IG91dHB1dERpciA9IHBsdWdpbi5wcmltYXJ5T3V0cHV0RGlyZWN0b3J5O1xuICBjb25zdCBlbnN1cmVPdXRwdXREaXIgPSAob3V0cHV0RGlyICYmICFvdXRwdXREaXIuaW5jbHVkZXMoJyonKSlcbiAgICA/IFtgbWtkaXIgLXAgXCIke291dHB1dERpcn1cIiAmJiB0b3VjaCBcIiR7b3V0cHV0RGlyfS8uZ2l0a2VlcFwiYF1cbiAgICA6IFtdO1xuXG4gIGNvbnN0IHsgaW5zdGFsbENvbW1hbmRzLCBjb21tYW5kcyB9ID0gYnVpbGRDb21tYW5kcyhwbHVnaW4sIHtcbiAgICBwcmVJbnN0YWxsQ29tbWFuZHM6IFsuLi5lbnN1cmVPdXRwdXREaXIsIC4uLihwcmVJbnN0YWxsQ29tbWFuZHMgPz8gW10pXSxcbiAgICBwb3N0SW5zdGFsbENvbW1hbmRzLFxuICAgIHByZUNvbW1hbmRzLFxuICAgIHBvc3RDb21tYW5kcyxcbiAgfSwgZmFpbHVyZUJlaGF2aW9yKTtcblxuICBjb25zdCBwcm9ncmFtbWF0aWMgPSB7IGlucHV0LCBpbnN0YWxsQ29tbWFuZHMsIGNvbW1hbmRzIH07XG5cbiAgLy8gUmVzb2x2ZSB0aGUgcGx1Z2luJ3MgcnVudGltZSBpbWFnZS4gQ29kZUJ1aWxkIGRlZmF1bHRzIHRvXG4gIC8vIGBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjcuMGAgd2hlbiBubyBgYnVpbGRJbWFnZWAgaXMgc2V0IOKAlCB0aGF0J3MgdGhlXG4gIC8vIEFXUy1tYW5hZ2VkIFVidW50dSBpbWFnZSBhbmQgRE9FUyBOT1QgaGF2ZSBhbnkgcGx1Z2luLWJha2VkIHRvb2xzXG4gIC8vIChwaXBlbGluZS1tYW5hZ2VyLCBzbnlrLCB0ZXJyYWZvcm0sIGV0Yy4pLiBXaXJpbmcgdGhlIHBsdWdpbidzIGltYWdlXG4gIC8vIGhlcmUgbWVhbnMgQ29kZUJ1aWxkIHB1bGxzIGZyb20gb3VyIHByaXZhdGUgcmVnaXN0cnkgYW5kIHRoZSB0b29sc1xuICAvLyBpbnN0YWxsZWQgaW4gdGhlIHBsdWdpbidzIERvY2tlcmZpbGUgYXJlIGFjdHVhbGx5IGF2YWlsYWJsZS5cbiAgY29uc3QgcGx1Z2luQnVpbGRJbWFnZSA9IHJlc29sdmVQbHVnaW5JbWFnZShzY29wZSwgcGx1Z2luLCBvcmdJZCk7XG5cbiAgLy8gU2hlbGxTdGVwIGJyYW5jaC5cbiAgLy8gU2hlbGxTdGVwIGl0c2VsZiBkb2Vzbid0IGFjY2VwdCBgYnVpbGRFbnZpcm9ubWVudGAvYGJ1aWxkSW1hZ2VgLiBDREtcbiAgLy8gcGlwZWxpbmVzIHdyYXBzIFNoZWxsU3RlcHMgaW4gYSBkZWZhdWx0IENvZGVCdWlsZCBhY3Rpb24gdGhhdCBydW5zIG9uXG4gIC8vIGBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjcuMGAg4oCUIHdoaWNoIHdvbid0IGhhdmUgdGhlIHBsdWdpbidzIHRvb2xzLlxuICAvL1xuICAvLyBTbyB3aGVuIGEgU0hFTExfU1RFUCBwbHVnaW4gRE9FUyBoYXZlIGFuIGltYWdlIChiZWNhdXNlIGl0cyBhdXRob3JcbiAgLy8gYmFrZWQgdG9vbHMgaW50byBhIERvY2tlcmZpbGUpLCB3ZSBQUk9NT1RFIGl0IHRvIGEgQ29kZUJ1aWxkU3RlcCB3aXRoXG4gIC8vIHRoZSByZXNvbHZlZCBpbWFnZS4gVGhlIHBsdWdpbiBhdXRob3IncyBpbnRlbnQgKFwidXNlIG15IGJha2VkIHRvb2xzXCIpXG4gIC8vIGlzIHByZXNlcnZlZCB3aXRob3V0IGZvcmNpbmcgdGhlbSB0byBjaGFuZ2UgcGx1Z2luVHlwZS5cbiAgLy9cbiAgLy8gV2hlbiB0aGUgcGx1Z2luIGhhcyBubyBpbWFnZSAob3IgcmVnaXN0cnkgaXNuJ3QgY29uZmlndXJlZCksIHdlIGtlZXBcbiAgLy8gdGhlIG9yaWdpbmFsIFNoZWxsU3RlcCDigJQgaXQncyBsaWdodGVyIHdlaWdodCBhbmQgdGhlIGRlZmF1bHRcbiAgLy8gQ29kZUJ1aWxkIGltYWdlIGlzIGZpbmUuXG4gIGlmIChwbHVnaW4ucGx1Z2luVHlwZSA9PT0gUGx1Z2luVHlwZS5TSEVMTF9TVEVQKSB7XG4gICAgaWYgKCFwbHVnaW5CdWlsZEltYWdlKSB7XG4gICAgICByZXR1cm4gbmV3IFNoZWxsU3RlcChpZCwge1xuICAgICAgICAuLi5wcm9ncmFtbWF0aWMsXG4gICAgICAgIGVudjogeyAuLi5lbnYsIC4uLmFjdGlvbkVudiB9LFxuICAgICAgICAuLi5tZXRhZGF0YUZvclNoZWxsU3RlcChtZXJnZWQpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgW0NyZWF0ZUNvZGVCdWlsZFN0ZXBdIFNIRUxMX1NURVAgcGx1Z2luIFwiJHtwbHVnaW4ubmFtZX1cIiBoYXMgYSByZWdpc3RyeSBpbWFnZSDigJQgcHJvbW90aW5nIHRvIENvZGVCdWlsZFN0ZXAgc28gdGhlIHBsdWdpbiBpbWFnZSBpcyBhY3R1YWxseSB1c2VkYCk7XG4gICAgLy8gRmFsbCB0aHJvdWdoIHRvIHRoZSBDb2RlQnVpbGRTdGVwIHBhdGggYmVsb3cuXG4gIH1cblxuICBjb25zdCBjb21wdXRlVHlwZSA9IGdldENvbXB1dGVUeXBlKFxuICAgIHBsdWdpbi5jb21wdXRlVHlwZSA/PyBvcHRpb25zLmRlZmF1bHRDb21wdXRlVHlwZSA/PyAnU01BTEwnLFxuICApO1xuXG4gIGNvbnN0IG5ldHdvcmtQcm9wcyA9IG5ldHdvcmtcbiAgICA/IHJlc29sdmVOZXR3b3JrKHNjb3BlLCBvcHRpb25zLnVuaXF1ZUlkLCBuZXR3b3JrKVxuICAgIDoge307XG5cbiAgLy8gTWV0YWRhdGEgc3ByZWFkIGxhc3Qgc28gaXQgY2FuIG92ZXJyaWRlIHByb2dyYW1tYXRpYyBkZWZhdWx0cy5cbiAgLy8gTk9URTogQ2FjaGluZyBpcyBzdXBwb3J0ZWQgdmlhIHR3byBtZXRhZGF0YSBwYXRoczpcbiAgLy8gICAxLiBNZXRhZGF0YUtleXMuQ0FDSEUgKCdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmNhY2hlJykg4oCUIHBhc3NlZCBkaXJlY3RseVxuICAvLyAgICAgIGFzIHRoZSBDb2RlQnVpbGRTdGVwIGBjYWNoZWAgcHJvcCAoZXhwZWN0cyBhIGNvZGVidWlsZC5DYWNoZSBvYmplY3QpLlxuICAvLyAgIDIuIE1ldGFkYXRhS2V5cy5QQVJUSUFMX0JVSUxEX1NQRUMgKCdhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOnBhcnRpYWxidWlsZHNwZWMnKVxuICAvLyAgICAgIOKAlCBwYXNzZWQgYXMgYHBhcnRpYWxCdWlsZFNwZWNgLCB3aGljaCBjYW4gaW5jbHVkZSBhIGBjYWNoZTpgIHNlY3Rpb24gZm9yXG4gIC8vICAgICAgUzMgb3IgbG9jYWwgY2FjaGluZyAoZS5nLiwgQnVpbGRTcGVjLmZyb21PYmplY3QoeyBjYWNoZTogeyBwYXRoczogWy4uLl0gfSB9KSkuXG4gIGNvbnN0IHN0ZXAgPSBuZXcgQ29kZUJ1aWxkU3RlcChpZCwge1xuICAgIC4uLnByb2dyYW1tYXRpYyxcbiAgICAuLi5uZXR3b3JrUHJvcHMsXG4gICAgLi4uKGFkZGl0aW9uYWxJbnB1dHMgJiYgeyBhZGRpdGlvbmFsSW5wdXRzIH0pLFxuICAgIC4uLih0aW1lb3V0ICYmIHsgdGltZW91dDogRHVyYXRpb24ubWludXRlcyh0aW1lb3V0KSB9KSxcbiAgICBlbnY6IGFjdGlvbkVudixcbiAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiBwbHVnaW4ucHJpbWFyeU91dHB1dERpcmVjdG9yeSA/PyB1bmRlZmluZWQsXG4gICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgY29tcHV0ZVR5cGUsXG4gICAgICAuLi4ocGx1Z2luQnVpbGRJbWFnZSAmJiB7IGJ1aWxkSW1hZ2U6IHBsdWdpbkJ1aWxkSW1hZ2UgfSksXG4gICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICAuLi50b0NvZGVCdWlsZEVudlZhcnMoZW52KSxcbiAgICAgICAgLi4uc2VjcmV0RW52VmFycyxcbiAgICAgIH0sXG4gICAgICAuLi5tZXRhZGF0YUZvckJ1aWxkRW52aXJvbm1lbnQobWVyZ2VkKSxcbiAgICB9LFxuICAgIC4uLm1ldGFkYXRhRm9yQ29kZUJ1aWxkU3RlcChtZXJnZWQpLFxuICB9KTtcblxuICAvLyBSZWdpc3RlciB3aXRoIGFydGlmYWN0IG1hbmFnZXIgaWYgcHJpbWFyeU91dHB1dERpcmVjdG9yeSBpcyBzZXRcbiAgaWYgKHBsdWdpbi5wcmltYXJ5T3V0cHV0RGlyZWN0b3J5ICYmIGFydGlmYWN0TWFuYWdlciAmJiBzdGFnZU5hbWUpIHtcbiAgICBjb25zdCBhcnRpZmFjdEtleTogQXJ0aWZhY3RLZXkgPSB7XG4gICAgICBzdGFnZU5hbWUsXG4gICAgICBzdGFnZUFsaWFzOiBzdGFnZUFsaWFzID8/IGAke3N0YWdlTmFtZX0tYWxpYXNgLFxuICAgICAgcGx1Z2luTmFtZTogcGx1Z2luLm5hbWUsXG4gICAgICBwbHVnaW5BbGlhczogcGx1Z2luQWxpYXMgPz8gYCR7cGx1Z2luLm5hbWV9LWFsaWFzYCxcbiAgICAgIG91dHB1dERpcmVjdG9yeTogcGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3RvcnksXG4gICAgfTtcbiAgICBhcnRpZmFjdE1hbmFnZXIuYWRkKGFydGlmYWN0S2V5LCBzdGVwKTtcbiAgfVxuXG4gIHJldHVybiBzdGVwO1xufVxuXG4vKipcbiAqIENvbnZlcnQgc3RyaW5nIG9yIENvbXB1dGVUeXBlIGVudW0gdG8gQ0RLIENvbXB1dGVUeXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wdXRlVHlwZShpbnB1dDogc3RyaW5nIHwgQ0RLQ29tcHV0ZVR5cGUgPSAnU01BTEwnKTogQ0RLQ29tcHV0ZVR5cGUge1xuICAvLyBJZiBhbHJlYWR5IGEgQ0RLIENvbXB1dGVUeXBlLCByZXR1cm4gYXMtaXNcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkID0gaW5wdXQudG9VcHBlckNhc2UoKSBhcyBDb21wdXRlVHlwZTtcblxuICBjb25zdCBtYXBwaW5nOiBSZWNvcmQ8Q29tcHV0ZVR5cGUsIENES0NvbXB1dGVUeXBlPiA9IHtcbiAgICBbQ29tcHV0ZVR5cGUuU01BTExdOiBDREtDb21wdXRlVHlwZS5TTUFMTCxcbiAgICBbQ29tcHV0ZVR5cGUuTUVESVVNXTogQ0RLQ29tcHV0ZVR5cGUuTUVESVVNLFxuICAgIFtDb21wdXRlVHlwZS5MQVJHRV06IENES0NvbXB1dGVUeXBlLkxBUkdFLFxuICAgIFtDb21wdXRlVHlwZS5YMl9MQVJHRV06IENES0NvbXB1dGVUeXBlLlgyX0xBUkdFLFxuICB9O1xuXG4gIGNvbnN0IHJlc3VsdCA9IG1hcHBpbmdbbm9ybWFsaXplZF07XG4gIGlmICghcmVzdWx0KSB7XG4gICAgbG9nLndhcm4oYFVua25vd24gY29tcHV0ZSB0eXBlIFwiJHtpbnB1dH1cIiwgZmFsbGluZyBiYWNrIHRvIFNNQUxMYCk7XG4gICAgcmV0dXJuIENES0NvbXB1dGVUeXBlLlNNQUxMO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGxldHRlcnMgb3IgbnVtYmVycyB3aXRoIHRoZSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBwYXJhbSBpbnB1dCAtIFRoZSBzdHJpbmcgdG8gcHJvY2Vzc1xuICogQHBhcmFtIHJlcGxhY2VWYWx1ZSAtIFRoZSBjaGFyYWN0ZXIocykgdG8gcmVwbGFjZSBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgd2l0aCAoZGVmYXVsdDogJ18nKVxuICogQHJldHVybnMgVGhlIHN0cmluZyB3aXRoIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyByZXBsYWNlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZU5vbkFscGhhbnVtZXJpYyhpbnB1dDogc3RyaW5nLCByZXBsYWNlVmFsdWU6IHN0cmluZyA9ICdfJyk6IHN0cmluZyB7XG4gIHJldHVybiBpbnB1dC5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgcmVwbGFjZVZhbHVlKTtcbn1cblxuLyoqXG4gKiBVbndyYXAgYSBTZWNyZXRWYWx1ZSB8IHN0cmluZyBpbnRvIGEgcGxhaW4gc3RyaW5nLlxuICogV2hlbiBhIFNlY3JldFZhbHVlIGlzIHByb3ZpZGVkIChlLmcuIGZyb20gU2VjcmV0cyBNYW5hZ2VyKSwgY2FsbHMgdW5zYWZlVW53cmFwKClcbiAqIHRvIGV4dHJhY3QgdGhlIHVuZGVybHlpbmcgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBTZWNyZXQodmFsdWU6IFNlY3JldFZhbHVlIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IHZhbHVlLnVuc2FmZVVud3JhcCgpO1xufVxuIl19
@@ -285,7 +285,6 @@ const handler = async (event) => {
285
285
  secrets: plugin.secrets,
286
286
  failureBehavior: plugin.failureBehavior,
287
287
  timeout: plugin.timeout,
288
- imageTag: plugin.imageTag,
289
288
  };
290
289
  const encoded = Buffer.from(JSON.stringify(slim), 'utf-8').toString('base64');
291
290
  lambdaLog.debug('ENCODE', 'Encoded plugin data', { length: encoded.length });
@@ -315,4 +314,4 @@ const handler = async (event) => {
315
314
  }
316
315
  };
317
316
  exports.handler = handler;
318
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hhbmRsZXJzL3BsdWdpbi1sb29rdXAtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEN0Qyx3REFBc0U7QUExQ3RFLDRFQUE4RjtBQUc5RiwrQ0FBeUQ7QUFDekQscURBQXFEO0FBRXJEOzs7R0FHRztBQUNILFNBQVMsUUFBUSxDQUFDLEtBQWEsRUFBRSxHQUFXLEVBQUUsT0FBZSxFQUFFLElBQWM7SUFDM0UsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekYsUUFBUSxLQUFLLEVBQUUsQ0FBQztRQUNkLEtBQUssT0FBTztZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBQyxNQUFNO1FBQ3pDLEtBQUssT0FBTztZQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEtBQUssT0FBTztnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQUMsTUFBTTtRQUNoRixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxTQUFTLEdBQUc7SUFDaEIsSUFBSSxFQUFFLENBQUMsR0FBVyxFQUFFLE9BQWUsRUFBRSxJQUFjLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7SUFDNUYsS0FBSyxFQUFFLENBQUMs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QUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlFLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRTdFLE9BQU87WUFDTCxHQUFHLFlBQVk7WUFDZixNQUFNLEVBQUUsU0FBUztZQUNqQixNQUFNLEVBQUUsV0FBVyxNQUFNLENBQUMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxPQUFPLDBCQUEwQjtZQUM3RSxJQUFJLEVBQUU7Z0JBQ0osV0FBVyxFQUFFLE9BQU87YUFDckI7U0FDc0MsQ0FBQztJQUM1QyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sTUFBTSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixDQUFDO1FBQ3BGLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFO1lBQ3pDLE1BQU07WUFDTixLQUFLLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztTQUN4RCxDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ0wsR0FBRyxZQUFZO1lBQ2YsTUFBTSxFQUFFLFFBQVE7WUFDaEIsTUFBTSxFQUFFLE1BQU07U0FDeUIsQ0FBQztJQUM1QyxDQUFDO1lBQVMsQ0FBQztRQUNULFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLHFDQUFxQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztBQUNILENBQUMsQ0FBQztBQWpHVyxRQUFBLE9BQU8sV0FpR2xCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IEdldFNlY3JldFZhbHVlQ29tbWFuZCwgU2VjcmV0c01hbmFnZXJDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc2VjcmV0cy1tYW5hZ2VyJztcbmltcG9ydCB7IFBsdWdpbkZpbHRlciwgUGx1Z2luIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQsIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNwb25zZSB9IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zSW5zdGFuY2UsIEF4aW9zRXJyb3IgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcnO1xuXG4vKipcbiAqIFN0cnVjdHVyZWQgbG9nZ2VyIGZvciBMYW1iZGEgKG91dHB1dHMgSlNPTiB0byBDbG91ZFdhdGNoKS5cbiAqIERlYnVnIG1lc3NhZ2VzIG9ubHkgZW1pdHRlZCB3aGVuIExPR19MRVZFTD1kZWJ1Zy5cbiAqL1xuZnVuY3Rpb24gbG9nRW50cnkobGV2ZWw6IHN0cmluZywgdGFnOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pIHtcbiAgY29uc3QgbGluZSA9IEpTT04uc3RyaW5naWZ5KHsgbGV2ZWwsIHRhZywgbWVzc2FnZSwgZGF0YSwgdHM6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9KTtcbiAgc3dpdGNoIChsZXZlbCkge1xuICAgIGNhc2UgJ0VSUk9SJzogY29uc29sZS5lcnJvcihsaW5lKTsgYnJlYWs7XG4gICAgY2FzZSAnREVCVUcnOiBpZiAocHJvY2Vzcy5lbnYuTE9HX0xFVkVMID09PSAnZGVidWcnKSBjb25zb2xlLmRlYnVnKGxpbmUpOyBicmVhaztcbiAgICBkZWZhdWx0OiBjb25zb2xlLmxvZyhsaW5lKTtcbiAgfVxufVxuXG5jb25zdCBsYW1iZGFMb2cgPSB7XG4gIGluZm86ICh0YWc6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bikgPT4gbG9nRW50cnkoJ0lORk8nLCB0YWcsIG1lc3NhZ2UsIGRhdGEpLFxuICBlcnJvcjogKHRhZzogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSA9PiBsb2dFbnRyeSgnRVJST1InLCB0YWcsIG1lc3NhZ2UsIGRhdGEpLFxuICBkZWJ1ZzogKHRhZzogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSA9PiBsb2dFbnRyeSgnREVCVUcnLCB0YWcsIG1lc3NhZ2UsIGRhdGEpLFxufTtcblxuY29uc3QgUkVUUllBQkxFX1NUQVRVU0VTID0gbmV3IFNldChbNDI5LCA1MDIsIDUwMywgNTA0XSk7XG5jb25zdCBSRVRSWUFCTEVfQ09ERVMgPSBuZXcgU2V0KFsnRUNPTk5SRVNFVCcsICdFQ09OTlJFRlVTRUQnLCAnRVRJTUVET1VUJ10pO1xuXG5mdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuLyoqIFBsYXRmb3JtIHNlY3JldCBuYW1lIOKAlCBpbmplY3RlZCBhcyBQTEFURk9STV9TRUNSRVRfTkFNRSBlbnYgdmFyIGJ5IFBsdWdpbkxvb2t1cCBjb25zdHJ1Y3QuICovXG5jb25zdCBQTEFURk9STV9TRUNSRVRfTkFNRSA9IHByb2Nlc3MuZW52LlBMQVRGT1JNX1NFQ1JFVF9OQU1FO1xuaWYgKCFQTEFURk9STV9TRUNSRVRfTkFNRSkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ1BMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHJlcXVpcmVkJyk7XG59XG5cbi8qKiBDYWNoZWQgdG9rZW4gdG8gYXZvaWQgcmVwZWF0ZWQgU2VjcmV0cyBNYW5hZ2VyIGNhbGxzIHdpdGhpbiBhIHNpbmdsZSBpbnZvY2F0aW9uLiAqL1xubGV0IGNhY2hlZFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuLyoqIEBpbnRlcm5hbCBSZXNldCBjYWNoZWQgdG9rZW4gKGZvciB0ZXN0aW5nIG9ubHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldENyZWRlbnRpYWxzQ2FjaGUoKTogdm9pZCB7IGNhY2hlZFRva2VuID0gbnVsbDsgfVxuXG4vKipcbiAqIEZldGNoIEpXVCB0b2tlbiBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKiBDYWNoZXMgdGhlIHJlc3VsdCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBMYW1iZGEgZXhlY3V0aW9uIGNvbnRleHQuXG4gKlxuICogVGhlIHNlY3JldCBuYW1lIGlzIHNldCB2aWEgUExBVEZPUk1fU0VDUkVUX05BTUUgZW52IHZhciAoZS5nLiBge3ByZWZpeH0ve29yZ0lkfS9wbGF0Zm9ybWApXG4gKiBDcmVhdGUgaXQgd2l0aDogYHBpcGVsaW5lLW1hbmFnZXIgc3RvcmUtdG9rZW5gXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFRva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChjYWNoZWRUb2tlbikgcmV0dXJuIGNhY2hlZFRva2VuO1xuXG4gIGxhbWJkYUxvZy5pbmZvKCdBVVRIJywgYEZldGNoaW5nIHRva2VuIGZyb20gU2VjcmV0cyBNYW5hZ2VyOiAke1BMQVRGT1JNX1NFQ1JFVF9OQU1FfWApO1xuXG4gIGNvbnN0IGNsaWVudCA9IG5ldyBTZWNyZXRzTWFuYWdlckNsaWVudCh7fSk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IEdldFNlY3JldFZhbHVlQ29tbWFuZCh7IFNlY3JldElkOiBQTEFURk9STV9TRUNSRVRfTkFNRSB9KSk7XG5cbiAgaWYgKCFyZXNwb25zZS5TZWNyZXRTdHJpbmcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNlY3JldCBcIiR7UExBVEZPUk1fU0VDUkVUX05BTUV9XCIgaXMgZW1wdHlgKTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVzcG9uc2UuU2VjcmV0U3RyaW5nKSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvLyBTY2hlbWEgaXMgYHsgdXNlcm5hbWUsIHBhc3N3b3JkLCAuLi4gfWAg4oCUIHRoZSBgcGFzc3dvcmRgIGZpZWxkIGlzIHRoZVxuICAvLyBwbGF0Zm9ybSBKV1QuIFNhbWUgc2VjcmV0IGlzIHJlYWQgYnkgQ29kZUJ1aWxkJ3MgYHNlY3JldHNNYW5hZ2VyQ3JlZGVudGlhbHNgXG4gIC8vIGZvciByZWdpc3RyeSBwdWxscyAoQmFzaWMgYXV0aDogdXNlcm5hbWU6cGFzc3dvcmQgPSBvcmdJZDpKV1QpLiBUaGVcbiAgLy8gcGlwZWxpbmUtaW1hZ2UtcmVnaXN0cnkgdG9rZW4gZW5kcG9pbnQgdmFsaWRhdGVzIHRoZSBwYXNzd29yZCBhcyBhIEpXVFxuICAvLyBhbmQgaXNzdWVzIGEgcmVnaXN0cnkgdG9rZW4gc2NvcGVkIHRvIHRoZSBKV1QncyBvcmcuXG4gIGlmICghcGFyc2VkLnBhc3N3b3JkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTZWNyZXQgXCIke1BMQVRGT1JNX1NFQ1JFVF9OQU1FfVwiIG1pc3NpbmcgcGFzc3dvcmQg4oCUIHJ1biBcInBpcGVsaW5lLW1hbmFnZXIgc3RvcmUtdG9rZW5cIiB0byBnZW5lcmF0ZWApO1xuICB9XG5cbiAgY2FjaGVkVG9rZW4gPSBwYXJzZWQucGFzc3dvcmQ7XG4gIGxhbWJkYUxvZy5pbmZvKCdBVVRIJywgJ1Rva2VuIHJldHJpZXZlZCBmcm9tIFNlY3JldHMgTWFuYWdlcicpO1xuICByZXR1cm4gY2FjaGVkVG9rZW47XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHByZS1jb25maWd1cmVkIEF4aW9zIGluc3RhbmNlIGZvciBBUEkgcmVxdWVzdHMuXG4gKlxuICogQHBhcmFtIGJhc2VVUkwgLSBCYXNlIFVSTCBvZiB0aGUgdGFyZ2V0IEFQSVxuICogQHBhcmFtIHRva2VuIC0gSldUIHRva2VuIGZvciBhdXRob3JpemF0aW9uXG4gKiBAcmV0dXJucyBDb25maWd1cmVkIEF4aW9zIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZShiYXNlVVJMOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiBBeGlvc0luc3RhbmNlIHtcbiAgcmV0dXJuIGF4aW9zLmNyZWF0ZSh7XG4gICAgYmFzZVVSTCxcbiAgICB0aW1lb3V0OiBDb3JlQ29uc3RhbnRzLkhBTkRMRVJfVElNRU9VVF9NUyxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIHBsdWdpbiBjb25maWd1cmF0aW9uIGZyb20gdGhlIGV4dGVybmFsIEFQSSB3aXRoIHJldHJ5IGxvZ2ljLlxuICogUmV0cmllcyBvbiB0cmFuc2llbnQgZmFpbHVyZXMgKDQyOSwgNTAyLCA1MDMsIDUwNCwgbmV0d29yayBlcnJvcnMpXG4gKiB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYuXG4gKlxuICogQHBhcmFtIGFwaSAtIENvbmZpZ3VyZWQgQXhpb3MgaW5zdGFuY2VcbiAqIEBwYXJhbSBwbHVnaW5GaWx0ZXIgLSBGaWx0ZXIgY3JpdGVyaWEgZm9yIHRoZSBwbHVnaW4gbG9va3VwXG4gKiBAcmV0dXJucyBUaGUgcGx1Z2luIGRhdGEgcmV0dXJuZWQgYnkgdGhlIEFQSVxuICogQHRocm93cyBFcnJvciBvbiBwZXJzaXN0ZW50IGZhaWx1cmUsIHRpbWVvdXQgb3IgaW52YWxpZCByZXNwb25zZVxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaChhcGk6IEF4aW9zSW5zdGFuY2UsIHBsdWdpbkZpbHRlcjogUGx1Z2luRmlsdGVyKTogUHJvbWlzZTxQbHVnaW4+IHtcbiAgbGFtYmRhTG9nLmRlYnVnKCdGRVRDSCcsICdTdGFydGluZyBwbHVnaW4gZmV0Y2gnLCB7IGZpbHRlcjogcGx1Z2luRmlsdGVyIH0pO1xuXG4gIGxldCBsYXN0RXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDw9IENvcmVDb25zdGFudHMuSEFORExFUl9NQVhfUkVUUklFUzsgYXR0ZW1wdCsrKSB7XG4gICAgaWYgKGF0dGVtcHQgPiAwKSB7XG4gICAgICBjb25zdCBkZWxheSA9IENvcmVDb25zdGFudHMuSEFORExFUl9SRVRSWV9ERUxBWV9NUyAqIE1hdGgucG93KDIsIGF0dGVtcHQgLSAxKTtcbiAgICAgIGxhbWJkYUxvZy5pbmZvKCdSRVRSWScsIGBBdHRlbXB0ICR7YXR0ZW1wdCArIDF9LyR7Q29yZUNvbnN0YW50cy5IQU5ETEVSX01BWF9SRVRSSUVTICsgMX0gYWZ0ZXIgJHtkZWxheX1tc2ApO1xuICAgICAgYXdhaXQgc2xlZXAoZGVsYXkpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGRhdGEsIHN0YXR1cyB9ID0gYXdhaXQgYXBpLnBvc3Q8UGx1Z2luPignL2FwaS9wbHVnaW5zL2xvb2t1cCcsIHtcbiAgICAgICAgZmlsdGVyOiBwbHVnaW5GaWx0ZXIsXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW1wdHkgcmVzcG9uc2UgZGF0YSBmcm9tIEFQSScpO1xuICAgICAgfVxuXG4gICAgICBsYW1iZGFMb2cuaW5mbygnRkVUQ0gnLCAnUGx1Z2luIGZldGNoZWQgc3VjY2Vzc2Z1bGx5Jywge1xuICAgICAgICBzdGF0dXMsXG4gICAgICAgIHBsdWdpbjogZGF0YS5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBkYXRhLnZlcnNpb24sXG4gICAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBeGlvc0Vycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRUNPTk5BQk9SVEVEJykge1xuICAgICAgICAgIGxhbWJkYUxvZy5lcnJvcignRkVUQ0gnLCBgUGx1Z2luIGxvb2t1cCB0aW1lZCBvdXQgYWZ0ZXIgJHtDb3JlQ29uc3RhbnRzLkhBTkRMRVJfVElNRU9VVF9NU31tc2ApO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luIGxvb2t1cCB0aW1lZCBvdXQgYWZ0ZXIgJHtDb3JlQ29uc3RhbnRzLkhBTkRMRVJfVElNRU9VVF9NU31tc2ApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmV0cnlhYmxlID0gZXJyb3IucmVzcG9uc2VcbiAgICAgICAgICA/IFJFVFJZQUJMRV9TVEFUVVNFUy5oYXMoZXJyb3IucmVzcG9uc2Uuc3RhdHVzKVxuICAgICAgICAgIDogUkVUUllBQkxFX0NPREVTLmhhcyhlcnJvci5jb2RlID8/ICcnKTtcblxuICAgICAgICBjb25zdCBtc2cgPSBlcnJvci5yZXNwb25zZVxuICAgICAgICAgID8gYEFQSSBlcnJvciAke2Vycm9yLnJlc3BvbnNlLnN0YXR1c306ICR7ZXJyb3IucmVzcG9uc2Uuc3RhdHVzVGV4dH1gXG4gICAgICAgICAgOiBlcnJvci5jb2RlIHx8IGVycm9yLm1lc3NhZ2U7XG5cbiAgICAgICAgaWYgKHJldHJ5YWJsZSAmJiBhdHRlbXB0IDwgQ29yZUNvbnN0YW50cy5IQU5ETEVSX01BWF9SRVRSSUVTKSB7XG4gICAgICAgICAgbGFtYmRhTG9nLmluZm8oJ1JFVFJZJywgYFJldHJ5YWJsZSBlcnJvcjogJHttc2d9YCwgeyBhdHRlbXB0OiBhdHRlbXB0ICsgMSB9KTtcbiAgICAgICAgICBsYXN0RXJyb3IgPSBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCBwbHVnaW46ICR7bXNnfWApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFtYmRhTG9nLmVycm9yKCdGRVRDSCcsIG1zZywgeyByZXNwb25zZURhdGE6IGVycm9yLnJlc3BvbnNlPy5kYXRhIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCBwbHVnaW46ICR7bXNnfWApO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoJ1Vua25vd24gZXJyb3IgZHVyaW5nIHBsdWdpbiBmZXRjaCcpO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IGxhc3RFcnJvciA/PyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBwbHVnaW4gYWZ0ZXIgcmV0cmllcycpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgcGx1Z2luIGZpbHRlciBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcGx1Z2luRmlsdGVyIC0gRmlsdGVyIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB0cnVlIGlmIHZhbGlkXG4gKiBAdGhyb3dzIEVycm9yIGlmIGludmFsaWRcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQbHVnaW5GaWx0ZXIocGx1Z2luRmlsdGVyOiB1bmtub3duKTogcGx1Z2luRmlsdGVyIGlzIFBsdWdpbkZpbHRlciB7XG4gIGlmICghcGx1Z2luRmlsdGVyIHx8IHR5cGVvZiBwbHVnaW5GaWx0ZXIgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgcGx1Z2luRmlsdGVyJyk7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBwbHVnaW5GaWx0ZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmICghZmlsdGVyLm5hbWUgJiYgIWZpbHRlci5pZCAmJiAhZmlsdGVyLnZlcnNpb24gJiYgIWZpbHRlci5vcmdJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGx1Z2luRmlsdGVyIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgY3JpdGVyaW9uIChuYW1lLCBpZCwgdmVyc2lvbiwgb3Igb3JnSWQpJyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBMYW1iZGEgaGFuZGxlciBmb3IgQ2xvdWRGb3JtYXRpb24gQ3VzdG9tIFJlc291cmNlIHRoYXQgcGVyZm9ybXMgcGx1Z2luIGxvb2t1cC5cbiAqXG4gKiBBdXRoZW50aWNhdGVzIHVzaW5nIEpXVCB0b2tlbiBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXIpLlxuICogQ3JlYXRlIHRoZSBzZWNyZXQgd2l0aDogYHBpcGVsaW5lLW1hbmFnZXIgc3RvcmUtdG9rZW5gXG4gKlxuICogUmVxdWVzdCBUeXBlczpcbiAqIC0gQ3JlYXRlL1VwZGF0ZTogZmV0Y2hlcyBhbmQgcmV0dXJucyBwbHVnaW4gY29uZmlndXJhdGlvbiBmcm9tIEFQSVxuICogLSBEZWxldGU6IG5vLW9wIChhbHdheXMgc3VjY2VlZHMpXG4gKlxuICogUmVzcG9uc2U6XG4gKiAtIFN1Y2Nlc3M6IFJldHVybnMgYmFzZTY0LWVuY29kZWQgcGx1Z2luIEpTT04gaW4gRGF0YS5SZXN1bHRWYWx1ZVxuICogLSBGYWlsdXJlOiBSZXR1cm5zIGVycm9yIG1lc3NhZ2UgaW4gUmVhc29uXG4gKlxuICogQHBhcmFtIGV2ZW50IC0gQ2xvdWRGb3JtYXRpb24gY3VzdG9tIHJlc291cmNlIGV2ZW50XG4gKiBAcmV0dXJucyBDbG91ZEZvcm1hdGlvbiByZXNwb25zZVxuICpcbiAqIEBleGFtcGxlXG4gKiBDdXN0b20gUmVzb3VyY2UgUHJvcGVydGllczpcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJiYXNlVVJMXCI6IFwiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb21cIixcbiAqICAgXCJwbHVnaW5GaWx0ZXJcIjoge1xuICogICAgIFwibmFtZVwiOiBcIm5vZGVqcy1idWlsZFwiLFxuICogICAgIFwidmVyc2lvblwiOiBcIjEuMC4wXCIsXG4gKiAgICAgXCJpc0FjdGl2ZVwiOiB0cnVlXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFzeW5jIChcbiAgZXZlbnQ6IENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCxcbik6IFByb21pc2U8Q2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlPiA9PiB7XG4gIGxhbWJkYUxvZy5pbmZvKCdTVEFSVCcsIGAke2V2ZW50LlJlcXVlc3RUeXBlfSByZXF1ZXN0IHJlY2VpdmVkYCwge1xuICAgIGxvZ2ljYWxSZXNvdXJjZUlkOiBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCxcbiAgICByZXF1ZXN0SWQ6IGV2ZW50LlJlcXVlc3RJZCxcbiAgICBzdGFja0lkOiBldmVudC5TdGFja0lkLFxuICB9KTtcblxuICBjb25zdCBiYXNlUmVzcG9uc2U6IFBhcnRpYWw8Q2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlPiA9IHtcbiAgICBTdGFja0lkOiBldmVudC5TdGFja0lkLFxuICAgIFJlcXVlc3RJZDogZXZlbnQuUmVxdWVzdElkLFxuICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICB9O1xuXG4gIHRyeSB7XG4gICAgLy8gSGFuZGxlIERlbGV0ZSAtIGFsd2F5cyBzdWNjZWVkIChuby1vcClcbiAgICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgPT09ICdEZWxldGUnKSB7XG4gICAgICBsYW1iZGFMb2cuaW5mbygnREVMRVRFJywgJ05vLW9wIC0gcmV0dXJuaW5nIFNVQ0NFU1MnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2VSZXNwb25zZSxcbiAgICAgICAgU3RhdHVzOiAnU1VDQ0VTUycsXG4gICAgICAgIFJlYXNvbjogJ0RlbGV0ZSBjb21wbGV0ZWQgKG5vLW9wKScsXG4gICAgICB9IGFzIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNwb25zZTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IGFuZCB2YWxpZGF0ZSBwcm9wZXJ0aWVzXG4gICAgY29uc3QgcGx1Z2luRmlsdGVyID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLnBsdWdpbkZpbHRlcjtcbiAgICBjb25zdCBiYXNlVVJMID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLmJhc2VVUkwgfHwgQ29yZUNvbnN0YW50cy5IQU5ETEVSX0RFRkFVTFRfQkFTRV9VUkw7XG5cbiAgICBpZiAoIWJhc2VVUkwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSAmJiAhYmFzZVVSTC5zdGFydHNXaXRoKCdodHRwOi8vJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBiYXNlVVJMOiBcIiR7YmFzZVVSTH1cIiDigJQgbXVzdCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly9gKTtcbiAgICB9XG5cbiAgICBsYW1iZGFMb2cuaW5mbygnQ09ORklHJywgJ0NvbmZpZ3VyYXRpb24gbG9hZGVkJywgeyBiYXNlVVJMLCBwbHVnaW5GaWx0ZXIgfSk7XG5cbiAgICB2YWxpZGF0ZVBsdWdpbkZpbHRlcihwbHVnaW5GaWx0ZXIpO1xuXG4gICAgLy8gR2V0IHRva2VuIGZyb20gU2VjcmV0cyBNYW5hZ2VyIGFuZCBjcmVhdGUgQVBJIGNsaWVudFxuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0VG9rZW4oKTtcbiAgICBjb25zdCBhcGkgPSBjcmVhdGUoYmFzZVVSTCwgdG9rZW4pO1xuXG4gICAgLy8gRmV0Y2ggcGx1Z2luXG4gICAgbGFtYmRhTG9nLmluZm8oJ0ZFVENIJywgJ0luaXRpYXRpbmcgcGx1Z2luIGxvb2t1cC4uLicpO1xuICAgIGNvbnN0IHBsdWdpbiA9IGF3YWl0IGZldGNoKGFwaSwgcGx1Z2luRmlsdGVyKTtcbiAgICBsYW1iZGFMb2cuaW5mbygnRkVUQ0gnLCAnUGx1Z2luIHJldHJpZXZlZCBzdWNjZXNzZnVsbHknLCB7XG4gICAgICBuYW1lOiBwbHVnaW4ubmFtZSxcbiAgICAgIHZlcnNpb246IHBsdWdpbi52ZXJzaW9uLFxuICAgICAgaWQ6IHBsdWdpbi5pZCxcbiAgICB9KTtcblxuICAgIC8vIFN0cmlwIGxhcmdlIGZpZWxkcyB0byBzdGF5IHdpdGhpbiBDbG91ZEZvcm1hdGlvbidzIDQwOTYtYnl0ZSBEYXRhIGxpbWl0LlxuICAgIC8vIENESyBjb25zdHJ1Y3RzIG9ubHkgbmVlZCB0aGUgZmllbGRzIHVzZWQgYnkgY3JlYXRlQ29kZUJ1aWxkU3RlcCgpLlxuICAgIGNvbnN0IHNsaW0gPSB7XG4gICAgICBpZDogcGx1Z2luLmlkLFxuICAgICAgbmFtZTogcGx1Z2luLm5hbWUsXG4gICAgICB2ZXJzaW9uOiBwbHVnaW4udmVyc2lvbixcbiAgICAgIHBsdWdpblR5cGU6IHBsdWdpbi5wbHVnaW5UeXBlLFxuICAgICAgY29tcHV0ZVR5cGU6IHBsdWdpbi5jb21wdXRlVHlwZSxcbiAgICAgIGNvbW1hbmRzOiBwbHVnaW4uY29tbWFuZHMsXG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IHBsdWdpbi5pbnN0YWxsQ29tbWFuZHMsXG4gICAgICBlbnY6IHBsdWdpbi5lbnYsXG4gICAgICBtZXRhZGF0YTogcGx1Z2luLm1ldGFkYXRhLFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogcGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3RvcnksXG4gICAgICBzZWNyZXRzOiBwbHVnaW4uc2VjcmV0cyxcbiAgICAgIGZhaWx1cmVCZWhhdmlvcjogcGx1Z2luLmZhaWx1cmVCZWhhdmlvcixcbiAgICAgIHRpbWVvdXQ6IHBsdWdpbi50aW1lb3V0LFxuICAgICAgaW1hZ2VUYWc6IHBsdWdpbi5pbWFnZVRhZyxcbiAgICB9O1xuXG4gICAgY29uc3QgZW5jb2RlZCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNsaW0pLCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgbGFtYmRhTG9nLmRlYnVnKCdFTkNPREUnLCAnRW5jb2RlZCBwbHVnaW4gZGF0YScsIHsgbGVuZ3RoOiBlbmNvZGVkLmxlbmd0aCB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5iYXNlUmVzcG9uc2UsXG4gICAgICBTdGF0dXM6ICdTVUNDRVNTJyxcbiAgICAgIFJlYXNvbjogYFBsdWdpbiAnJHtwbHVnaW4ubmFtZX0nICh2JHtwbHVnaW4udmVyc2lvbn0pIHJldHJpZXZlZCBzdWNjZXNzZnVsbHlgLFxuICAgICAgRGF0YToge1xuICAgICAgICBSZXN1bHRWYWx1ZTogZW5jb2RlZCxcbiAgICAgIH0sXG4gICAgfSBhcyBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgcmVhc29uID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZCc7XG4gICAgbGFtYmRhTG9nLmVycm9yKCdFUlJPUicsICdIYW5kbGVyIGZhaWxlZCcsIHtcbiAgICAgIHJlYXNvbixcbiAgICAgIHN0YWNrOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3Iuc3RhY2sgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZVJlc3BvbnNlLFxuICAgICAgU3RhdHVzOiAnRkFJTEVEJyxcbiAgICAgIFJlYXNvbjogcmVhc29uLFxuICAgIH0gYXMgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlO1xuICB9IGZpbmFsbHkge1xuICAgIGxhbWJkYUxvZy5pbmZvKCdFTkQnLCAnQ3VzdG9tIHJlc291cmNlIGV4ZWN1dGlvbiBjb21wbGV0ZWQnKTtcbiAgfVxufTtcbiJdfQ==
317
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hhbmRsZXJzL3BsdWdpbi1sb29rdXAtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEN0Qyx3REFBc0U7QUExQ3RFLDRFQUE4RjtBQUc5RiwrQ0FBeUQ7QUFDekQscURBQXFEO0FBRXJEOzs7R0FHRztBQUNILFNBQVMsUUFBUSxDQUFDLEtBQWEsRUFBRSxHQUFXLEVBQUUsT0FBZSxFQUFFLElBQWM7SUFDM0UsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekYsUUFBUSxLQUFLLEVBQUUsQ0FBQztRQUNkLEtBQUssT0FBTztZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBQyxNQUFNO1FBQ3pDLEtBQUssT0FBTztZQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEtBQUssT0FBTztnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQUMsTUFBTTtRQUNoRixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxTQUFTLEdBQUc7SUFDaEIsSUFBSSxFQUFFLENBQUMsR0FBVyxFQUFFLE9BQWUsRUFBRSxJQUFjLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7SUFDNUYsS0FBSyxFQUFFLENBQUMs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RSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFN0UsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE1BQU0sRUFBRSxXQUFXLE1BQU0sQ0FBQyxJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sMEJBQTBCO1lBQzdFLElBQUksRUFBRTtnQkFDSixXQUFXLEVBQUUsT0FBTzthQUNyQjtTQUNzQyxDQUFDO0lBQzVDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxNQUFNLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUM7UUFDcEYsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUU7WUFDekMsTUFBTTtZQUNOLEtBQUssRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ3hELENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxHQUFHLFlBQVk7WUFDZixNQUFNLEVBQUUsUUFBUTtZQUNoQixNQUFNLEVBQUUsTUFBTTtTQUN5QixDQUFDO0lBQzVDLENBQUM7WUFBUyxDQUFDO1FBQ1QsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUscUNBQXFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBaEdXLFFBQUEsT0FBTyxXQWdHbEIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgR2V0U2VjcmV0VmFsdWVDb21tYW5kLCBTZWNyZXRzTWFuYWdlckNsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zZWNyZXRzLW1hbmFnZXInO1xuaW1wb3J0IHsgUGx1Z2luRmlsdGVyLCBQbHVnaW4gfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCwgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlIH0gZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQgYXhpb3MsIHsgQXhpb3NJbnN0YW5jZSwgQXhpb3NFcnJvciB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IENvcmVDb25zdGFudHMgfSBmcm9tICcuLi9jb25maWcvYXBwLWNvbmZpZyc7XG5cbi8qKlxuICogU3RydWN0dXJlZCBsb2dnZXIgZm9yIExhbWJkYSAob3V0cHV0cyBKU09OIHRvIENsb3VkV2F0Y2gpLlxuICogRGVidWcgbWVzc2FnZXMgb25seSBlbWl0dGVkIHdoZW4gTE9HX0xFVkVMPWRlYnVnLlxuICovXG5mdW5jdGlvbiBsb2dFbnRyeShsZXZlbDogc3RyaW5nLCB0YWc6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bikge1xuICBjb25zdCBsaW5lID0gSlNPTi5zdHJpbmdpZnkoeyBsZXZlbCwgdGFnLCBtZXNzYWdlLCBkYXRhLCB0czogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0pO1xuICBzd2l0Y2ggKGxldmVsKSB7XG4gICAgY2FzZSAnRVJST1InOiBjb25zb2xlLmVycm9yKGxpbmUpOyBicmVhaztcbiAgICBjYXNlICdERUJVRyc6IGlmIChwcm9jZXNzLmVudi5MT0dfTEVWRUwgPT09ICdkZWJ1ZycpIGNvbnNvbGUuZGVidWcobGluZSk7IGJyZWFrO1xuICAgIGRlZmF1bHQ6IGNvbnNvbGUubG9nKGxpbmUpO1xuICB9XG59XG5cbmNvbnN0IGxhbWJkYUxvZyA9IHtcbiAgaW5mbzogKHRhZzogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSA9PiBsb2dFbnRyeSgnSU5GTycsIHRhZywgbWVzc2FnZSwgZGF0YSksXG4gIGVycm9yOiAodGFnOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pID0+IGxvZ0VudHJ5KCdFUlJPUicsIHRhZywgbWVzc2FnZSwgZGF0YSksXG4gIGRlYnVnOiAodGFnOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pID0+IGxvZ0VudHJ5KCdERUJVRycsIHRhZywgbWVzc2FnZSwgZGF0YSksXG59O1xuXG5jb25zdCBSRVRSWUFCTEVfU1RBVFVTRVMgPSBuZXcgU2V0KFs0MjksIDUwMiwgNTAzLCA1MDRdKTtcbmNvbnN0IFJFVFJZQUJMRV9DT0RFUyA9IG5ldyBTZXQoWydFQ09OTlJFU0VUJywgJ0VDT05OUkVGVVNFRCcsICdFVElNRURPVVQnXSk7XG5cbmZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG4vKiogUGxhdGZvcm0gc2VjcmV0IG5hbWUg4oCUIGluamVjdGVkIGFzIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXIgYnkgUGx1Z2luTG9va3VwIGNvbnN0cnVjdC4gKi9cbmNvbnN0IFBMQVRGT1JNX1NFQ1JFVF9OQU1FID0gcHJvY2Vzcy5lbnYuUExBVEZPUk1fU0VDUkVUX05BTUU7XG5pZiAoIVBMQVRGT1JNX1NFQ1JFVF9OQU1FKSB7XG4gIHRocm93IG5ldyBFcnJvcignUExBVEZPUk1fU0VDUkVUX05BTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgcmVxdWlyZWQnKTtcbn1cblxuLyoqIENhY2hlZCB0b2tlbiB0byBhdm9pZCByZXBlYXRlZCBTZWNyZXRzIE1hbmFnZXIgY2FsbHMgd2l0aGluIGEgc2luZ2xlIGludm9jYXRpb24uICovXG5sZXQgY2FjaGVkVG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4vKiogQGludGVybmFsIFJlc2V0IGNhY2hlZCB0b2tlbiAoZm9yIHRlc3Rpbmcgb25seSkuICovXG5leHBvcnQgZnVuY3Rpb24gX3Jlc2V0Q3JlZGVudGlhbHNDYWNoZSgpOiB2b2lkIHsgY2FjaGVkVG9rZW4gPSBudWxsOyB9XG5cbi8qKlxuICogRmV0Y2ggSldUIHRva2VuIGZyb20gQVdTIFNlY3JldHMgTWFuYWdlci5cbiAqIENhY2hlcyB0aGUgcmVzdWx0IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIExhbWJkYSBleGVjdXRpb24gY29udGV4dC5cbiAqXG4gKiBUaGUgc2VjcmV0IG5hbWUgaXMgc2V0IHZpYSBQTEFURk9STV9TRUNSRVRfTkFNRSBlbnYgdmFyIChlLmcuIGB7cHJlZml4fS97b3JnSWR9L3BsYXRmb3JtYClcbiAqIENyZWF0ZSBpdCB3aXRoOiBgcGlwZWxpbmUtbWFuYWdlciBzdG9yZS10b2tlbmBcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0VG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKGNhY2hlZFRva2VuKSByZXR1cm4gY2FjaGVkVG9rZW47XG5cbiAgbGFtYmRhTG9nLmluZm8oJ0FVVEgnLCBgRmV0Y2hpbmcgdG9rZW4gZnJvbSBTZWNyZXRzIE1hbmFnZXI6ICR7UExBVEZPUk1fU0VDUkVUX05BTUV9YCk7XG5cbiAgY29uc3QgY2xpZW50ID0gbmV3IFNlY3JldHNNYW5hZ2VyQ2xpZW50KHt9KTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgR2V0U2VjcmV0VmFsdWVDb21tYW5kKHsgU2VjcmV0SWQ6IFBMQVRGT1JNX1NFQ1JFVF9OQU1FIH0pKTtcblxuICBpZiAoIXJlc3BvbnNlLlNlY3JldFN0cmluZykge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2VjcmV0IFwiJHtQTEFURk9STV9TRUNSRVRfTkFNRX1cIiBpcyBlbXB0eWApO1xuICB9XG5cbiAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyZXNwb25zZS5TZWNyZXRTdHJpbmcpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8vIFNjaGVtYSBpcyBgeyB1c2VybmFtZSwgcGFzc3dvcmQsIC4uLiB9YCDigJQgdGhlIGBwYXNzd29yZGAgZmllbGQgaXMgdGhlXG4gIC8vIHBsYXRmb3JtIEpXVC4gU2FtZSBzZWNyZXQgaXMgcmVhZCBieSBDb2RlQnVpbGQncyBgc2VjcmV0c01hbmFnZXJDcmVkZW50aWFsc2BcbiAgLy8gZm9yIHJlZ2lzdHJ5IHB1bGxzIChCYXNpYyBhdXRoOiB1c2VybmFtZTpwYXNzd29yZCA9IG9yZ0lkOkpXVCkuIFRoZVxuICAvLyBwaXBlbGluZS1pbWFnZS1yZWdpc3RyeSB0b2tlbiBlbmRwb2ludCB2YWxpZGF0ZXMgdGhlIHBhc3N3b3JkIGFzIGEgSldUXG4gIC8vIGFuZCBpc3N1ZXMgYSByZWdpc3RyeSB0b2tlbiBzY29wZWQgdG8gdGhlIEpXVCdzIG9yZy5cbiAgaWYgKCFwYXJzZWQucGFzc3dvcmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNlY3JldCBcIiR7UExBVEZPUk1fU0VDUkVUX05BTUV9XCIgbWlzc2luZyBwYXNzd29yZCDigJQgcnVuIFwicGlwZWxpbmUtbWFuYWdlciBzdG9yZS10b2tlblwiIHRvIGdlbmVyYXRlYCk7XG4gIH1cblxuICBjYWNoZWRUb2tlbiA9IHBhcnNlZC5wYXNzd29yZDtcbiAgbGFtYmRhTG9nLmluZm8oJ0FVVEgnLCAnVG9rZW4gcmV0cmlldmVkIGZyb20gU2VjcmV0cyBNYW5hZ2VyJyk7XG4gIHJldHVybiBjYWNoZWRUb2tlbjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcHJlLWNvbmZpZ3VyZWQgQXhpb3MgaW5zdGFuY2UgZm9yIEFQSSByZXF1ZXN0cy5cbiAqXG4gKiBAcGFyYW0gYmFzZVVSTCAtIEJhc2UgVVJMIG9mIHRoZSB0YXJnZXQgQVBJXG4gKiBAcGFyYW0gdG9rZW4gLSBKV1QgdG9rZW4gZm9yIGF1dGhvcml6YXRpb25cbiAqIEByZXR1cm5zIENvbmZpZ3VyZWQgQXhpb3MgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlKGJhc2VVUkw6IHN0cmluZywgdG9rZW46IHN0cmluZyk6IEF4aW9zSW5zdGFuY2Uge1xuICByZXR1cm4gYXhpb3MuY3JlYXRlKHtcbiAgICBiYXNlVVJMLFxuICAgIHRpbWVvdXQ6IENvcmVDb25zdGFudHMuSEFORExFUl9USU1FT1VUX01TLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIEZldGNoZXMgcGx1Z2luIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgZXh0ZXJuYWwgQVBJIHdpdGggcmV0cnkgbG9naWMuXG4gKiBSZXRyaWVzIG9uIHRyYW5zaWVudCBmYWlsdXJlcyAoNDI5LCA1MDIsIDUwMywgNTA0LCBuZXR3b3JrIGVycm9ycylcbiAqIHdpdGggZXhwb25lbnRpYWwgYmFja29mZi5cbiAqXG4gKiBAcGFyYW0gYXBpIC0gQ29uZmlndXJlZCBBeGlvcyBpbnN0YW5jZVxuICogQHBhcmFtIHBsdWdpbkZpbHRlciAtIEZpbHRlciBjcml0ZXJpYSBmb3IgdGhlIHBsdWdpbiBsb29rdXBcbiAqIEByZXR1cm5zIFRoZSBwbHVnaW4gZGF0YSByZXR1cm5lZCBieSB0aGUgQVBJXG4gKiBAdGhyb3dzIEVycm9yIG9uIHBlcnNpc3RlbnQgZmFpbHVyZSwgdGltZW91dCBvciBpbnZhbGlkIHJlc3BvbnNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoKGFwaTogQXhpb3NJbnN0YW5jZSwgcGx1Z2luRmlsdGVyOiBQbHVnaW5GaWx0ZXIpOiBQcm9taXNlPFBsdWdpbj4ge1xuICBsYW1iZGFMb2cuZGVidWcoJ0ZFVENIJywgJ1N0YXJ0aW5nIHBsdWdpbiBmZXRjaCcsIHsgZmlsdGVyOiBwbHVnaW5GaWx0ZXIgfSk7XG5cbiAgbGV0IGxhc3RFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPD0gQ29yZUNvbnN0YW50cy5IQU5ETEVSX01BWF9SRVRSSUVTOyBhdHRlbXB0KyspIHtcbiAgICBpZiAoYXR0ZW1wdCA+IDApIHtcbiAgICAgIGNvbnN0IGRlbGF5ID0gQ29yZUNvbnN0YW50cy5IQU5ETEVSX1JFVFJZX0RFTEFZX01TICogTWF0aC5wb3coMiwgYXR0ZW1wdCAtIDEpO1xuICAgICAgbGFtYmRhTG9nLmluZm8oJ1JFVFJZJywgYEF0dGVtcHQgJHthdHRlbXB0ICsgMX0vJHtDb3JlQ29uc3RhbnRzLkhBTkRMRVJfTUFYX1JFVFJJRVMgKyAxfSBhZnRlciAke2RlbGF5fW1zYCk7XG4gICAgICBhd2FpdCBzbGVlcChkZWxheSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YSwgc3RhdHVzIH0gPSBhd2FpdCBhcGkucG9zdDxQbHVnaW4+KCcvYXBpL3BsdWdpbnMvbG9va3VwJywge1xuICAgICAgICBmaWx0ZXI6IHBsdWdpbkZpbHRlcixcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbXB0eSByZXNwb25zZSBkYXRhIGZyb20gQVBJJyk7XG4gICAgICB9XG5cbiAgICAgIGxhbWJkYUxvZy5pbmZvKCdGRVRDSCcsICdQbHVnaW4gZmV0Y2hlZCBzdWNjZXNzZnVsbHknLCB7XG4gICAgICAgIHN0YXR1cyxcbiAgICAgICAgcGx1Z2luOiBkYXRhLm5hbWUsXG4gICAgICAgIHZlcnNpb246IGRhdGEudmVyc2lvbixcbiAgICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdFQ09OTkFCT1JURUQnKSB7XG4gICAgICAgICAgbGFtYmRhTG9nLmVycm9yKCdGRVRDSCcsIGBQbHVnaW4gbG9va3VwIHRpbWVkIG91dCBhZnRlciAke0NvcmVDb25zdGFudHMuSEFORExFUl9USU1FT1VUX01TfW1zYCk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gbG9va3VwIHRpbWVkIG91dCBhZnRlciAke0NvcmVDb25zdGFudHMuSEFORExFUl9USU1FT1VUX01TfW1zYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXRyeWFibGUgPSBlcnJvci5yZXNwb25zZVxuICAgICAgICAgID8gUkVUUllBQkxFX1NUQVRVU0VTLmhhcyhlcnJvci5yZXNwb25zZS5zdGF0dXMpXG4gICAgICAgICAgOiBSRVRSWUFCTEVfQ09ERVMuaGFzKGVycm9yLmNvZGUgPz8gJycpO1xuXG4gICAgICAgIGNvbnN0IG1zZyA9IGVycm9yLnJlc3BvbnNlXG4gICAgICAgICAgPyBgQVBJIGVycm9yICR7ZXJyb3IucmVzcG9uc2Uuc3RhdHVzfTogJHtlcnJvci5yZXNwb25zZS5zdGF0dXNUZXh0fWBcbiAgICAgICAgICA6IGVycm9yLmNvZGUgfHwgZXJyb3IubWVzc2FnZTtcblxuICAgICAgICBpZiAocmV0cnlhYmxlICYmIGF0dGVtcHQgPCBDb3JlQ29uc3RhbnRzLkhBTkRMRVJfTUFYX1JFVFJJRVMpIHtcbiAgICAgICAgICBsYW1iZGFMb2cuaW5mbygnUkVUUlknLCBgUmV0cnlhYmxlIGVycm9yOiAke21zZ31gLCB7IGF0dGVtcHQ6IGF0dGVtcHQgKyAxIH0pO1xuICAgICAgICAgIGxhc3RFcnJvciA9IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIHBsdWdpbjogJHttc2d9YCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsYW1iZGFMb2cuZXJyb3IoJ0ZFVENIJywgbXNnLCB7IHJlc3BvbnNlRGF0YTogZXJyb3IucmVzcG9uc2U/LmRhdGEgfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIHBsdWdpbjogJHttc2d9YCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcignVW5rbm93biBlcnJvciBkdXJpbmcgcGx1Z2luIGZldGNoJyk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbGFzdEVycm9yID8/IG5ldyBFcnJvcignRmFpbGVkIHRvIGZldGNoIHBsdWdpbiBhZnRlciByZXRyaWVzJyk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBwbHVnaW4gZmlsdGVyIG9iamVjdFxuICpcbiAqIEBwYXJhbSBwbHVnaW5GaWx0ZXIgLSBGaWx0ZXIgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHRydWUgaWYgdmFsaWRcbiAqIEB0aHJvd3MgRXJyb3IgaWYgaW52YWxpZFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBsdWdpbkZpbHRlcihwbHVnaW5GaWx0ZXI6IHVua25vd24pOiBwbHVnaW5GaWx0ZXIgaXMgUGx1Z2luRmlsdGVyIHtcbiAgaWYgKCFwbHVnaW5GaWx0ZXIgfHwgdHlwZW9mIHBsdWdpbkZpbHRlciAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCBwbHVnaW5GaWx0ZXInKTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlciA9IHBsdWdpbkZpbHRlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKCFmaWx0ZXIubmFtZSAmJiAhZmlsdGVyLmlkICYmICFmaWx0ZXIudmVyc2lvbiAmJiAhZmlsdGVyLm9yZ0lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQbHVnaW5GaWx0ZXIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBjcml0ZXJpb24gKG5hbWUsIGlkLCB2ZXJzaW9uLCBvciBvcmdJZCknKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIExhbWJkYSBoYW5kbGVyIGZvciBDbG91ZEZvcm1hdGlvbiBDdXN0b20gUmVzb3VyY2UgdGhhdCBwZXJmb3JtcyBwbHVnaW4gbG9va3VwLlxuICpcbiAqIEF1dGhlbnRpY2F0ZXMgdXNpbmcgSldUIHRva2VuIGZyb20gQVdTIFNlY3JldHMgTWFuYWdlciAoUExBVEZPUk1fU0VDUkVUX05BTUUgZW52IHZhcikuXG4gKiBDcmVhdGUgdGhlIHNlY3JldCB3aXRoOiBgcGlwZWxpbmUtbWFuYWdlciBzdG9yZS10b2tlbmBcbiAqXG4gKiBSZXF1ZXN0IFR5cGVzOlxuICogLSBDcmVhdGUvVXBkYXRlOiBmZXRjaGVzIGFuZCByZXR1cm5zIHBsdWdpbiBjb25maWd1cmF0aW9uIGZyb20gQVBJXG4gKiAtIERlbGV0ZTogbm8tb3AgKGFsd2F5cyBzdWNjZWVkcylcbiAqXG4gKiBSZXNwb25zZTpcbiAqIC0gU3VjY2VzczogUmV0dXJucyBiYXNlNjQtZW5jb2RlZCBwbHVnaW4gSlNPTiBpbiBEYXRhLlJlc3VsdFZhbHVlXG4gKiAtIEZhaWx1cmU6IFJldHVybnMgZXJyb3IgbWVzc2FnZSBpbiBSZWFzb25cbiAqXG4gKiBAcGFyYW0gZXZlbnQgLSBDbG91ZEZvcm1hdGlvbiBjdXN0b20gcmVzb3VyY2UgZXZlbnRcbiAqIEByZXR1cm5zIENsb3VkRm9ybWF0aW9uIHJlc3BvbnNlXG4gKlxuICogQGV4YW1wbGVcbiAqIEN1c3RvbSBSZXNvdXJjZSBQcm9wZXJ0aWVzOlxuICogYGBganNvblxuICoge1xuICogICBcImJhc2VVUkxcIjogXCJodHRwczovL2FwaS5leGFtcGxlLmNvbVwiLFxuICogICBcInBsdWdpbkZpbHRlclwiOiB7XG4gKiAgICAgXCJuYW1lXCI6IFwibm9kZWpzLWJ1aWxkXCIsXG4gKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMS4wLjBcIixcbiAqICAgICBcImlzQWN0aXZlXCI6IHRydWVcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXN5bmMgKFxuICBldmVudDogQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50LFxuKTogUHJvbWlzZTxDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2U+ID0+IHtcbiAgbGFtYmRhTG9nLmluZm8oJ1NUQVJUJywgYCR7ZXZlbnQuUmVxdWVzdFR5cGV9IHJlcXVlc3QgcmVjZWl2ZWRgLCB7XG4gICAgbG9naWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIHJlcXVlc3RJZDogZXZlbnQuUmVxdWVzdElkLFxuICAgIHN0YWNrSWQ6IGV2ZW50LlN0YWNrSWQsXG4gIH0pO1xuXG4gIGNvbnN0IGJhc2VSZXNwb25zZTogUGFydGlhbDxDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2U+ID0ge1xuICAgIFN0YWNrSWQ6IGV2ZW50LlN0YWNrSWQsXG4gICAgUmVxdWVzdElkOiBldmVudC5SZXF1ZXN0SWQsXG4gICAgTG9naWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogZXZlbnQuTG9naWNhbFJlc291cmNlSWQsXG4gIH07XG5cbiAgdHJ5IHtcbiAgICAvLyBIYW5kbGUgRGVsZXRlIC0gYWx3YXlzIHN1Y2NlZWQgKG5vLW9wKVxuICAgIGlmIChldmVudC5SZXF1ZXN0VHlwZSA9PT0gJ0RlbGV0ZScpIHtcbiAgICAgIGxhbWJkYUxvZy5pbmZvKCdERUxFVEUnLCAnTm8tb3AgLSByZXR1cm5pbmcgU1VDQ0VTUycpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZVJlc3BvbnNlLFxuICAgICAgICBTdGF0dXM6ICdTVUNDRVNTJyxcbiAgICAgICAgUmVhc29uOiAnRGVsZXRlIGNvbXBsZXRlZCAobm8tb3ApJyxcbiAgICAgIH0gYXMgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3QgYW5kIHZhbGlkYXRlIHByb3BlcnRpZXNcbiAgICBjb25zdCBwbHVnaW5GaWx0ZXIgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMucGx1Z2luRmlsdGVyO1xuICAgIGNvbnN0IGJhc2VVUkwgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuYmFzZVVSTCB8fCBDb3JlQ29uc3RhbnRzLkhBTkRMRVJfREVGQVVMVF9CQVNFX1VSTDtcblxuICAgIGlmICghYmFzZVVSTC5zdGFydHNXaXRoKCdodHRwczovLycpICYmICFiYXNlVVJMLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGJhc2VVUkw6IFwiJHtiYXNlVVJMfVwiIOKAlCBtdXN0IHN0YXJ0IHdpdGggaHR0cDovLyBvciBodHRwczovL2ApO1xuICAgIH1cblxuICAgIGxhbWJkYUxvZy5pbmZvKCdDT05GSUcnLCAnQ29uZmlndXJhdGlvbiBsb2FkZWQnLCB7IGJhc2VVUkwsIHBsdWdpbkZpbHRlciB9KTtcblxuICAgIHZhbGlkYXRlUGx1Z2luRmlsdGVyKHBsdWdpbkZpbHRlcik7XG5cbiAgICAvLyBHZXQgdG9rZW4gZnJvbSBTZWNyZXRzIE1hbmFnZXIgYW5kIGNyZWF0ZSBBUEkgY2xpZW50XG4gICAgY29uc3QgdG9rZW4gPSBhd2FpdCBnZXRUb2tlbigpO1xuICAgIGNvbnN0IGFwaSA9IGNyZWF0ZShiYXNlVVJMLCB0b2tlbik7XG5cbiAgICAvLyBGZXRjaCBwbHVnaW5cbiAgICBsYW1iZGFMb2cuaW5mbygnRkVUQ0gnLCAnSW5pdGlhdGluZyBwbHVnaW4gbG9va3VwLi4uJyk7XG4gICAgY29uc3QgcGx1Z2luID0gYXdhaXQgZmV0Y2goYXBpLCBwbHVnaW5GaWx0ZXIpO1xuICAgIGxhbWJkYUxvZy5pbmZvKCdGRVRDSCcsICdQbHVnaW4gcmV0cmlldmVkIHN1Y2Nlc3NmdWxseScsIHtcbiAgICAgIG5hbWU6IHBsdWdpbi5uYW1lLFxuICAgICAgdmVyc2lvbjogcGx1Z2luLnZlcnNpb24sXG4gICAgICBpZDogcGx1Z2luLmlkLFxuICAgIH0pO1xuXG4gICAgLy8gU3RyaXAgbGFyZ2UgZmllbGRzIHRvIHN0YXkgd2l0aGluIENsb3VkRm9ybWF0aW9uJ3MgNDA5Ni1ieXRlIERhdGEgbGltaXQuXG4gICAgLy8gQ0RLIGNvbnN0cnVjdHMgb25seSBuZWVkIHRoZSBmaWVsZHMgdXNlZCBieSBjcmVhdGVDb2RlQnVpbGRTdGVwKCkuXG4gICAgY29uc3Qgc2xpbSA9IHtcbiAgICAgIGlkOiBwbHVnaW4uaWQsXG4gICAgICBuYW1lOiBwbHVnaW4ubmFtZSxcbiAgICAgIHZlcnNpb246IHBsdWdpbi52ZXJzaW9uLFxuICAgICAgcGx1Z2luVHlwZTogcGx1Z2luLnBsdWdpblR5cGUsXG4gICAgICBjb21wdXRlVHlwZTogcGx1Z2luLmNvbXB1dGVUeXBlLFxuICAgICAgY29tbWFuZHM6IHBsdWdpbi5jb21tYW5kcyxcbiAgICAgIGluc3RhbGxDb21tYW5kczogcGx1Z2luLmluc3RhbGxDb21tYW5kcyxcbiAgICAgIGVudjogcGx1Z2luLmVudixcbiAgICAgIG1ldGFkYXRhOiBwbHVnaW4ubWV0YWRhdGEsXG4gICAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiBwbHVnaW4ucHJpbWFyeU91dHB1dERpcmVjdG9yeSxcbiAgICAgIHNlY3JldHM6IHBsdWdpbi5zZWNyZXRzLFxuICAgICAgZmFpbHVyZUJlaGF2aW9yOiBwbHVnaW4uZmFpbHVyZUJlaGF2aW9yLFxuICAgICAgdGltZW91dDogcGx1Z2luLnRpbWVvdXQsXG4gICAgfTtcblxuICAgIGNvbnN0IGVuY29kZWQgPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShzbGltKSwgJ3V0Zi04JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIGxhbWJkYUxvZy5kZWJ1ZygnRU5DT0RFJywgJ0VuY29kZWQgcGx1Z2luIGRhdGEnLCB7IGxlbmd0aDogZW5jb2RlZC5sZW5ndGggfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZVJlc3BvbnNlLFxuICAgICAgU3RhdHVzOiAnU1VDQ0VTUycsXG4gICAgICBSZWFzb246IGBQbHVnaW4gJyR7cGx1Z2luLm5hbWV9JyAodiR7cGx1Z2luLnZlcnNpb259KSByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5YCxcbiAgICAgIERhdGE6IHtcbiAgICAgICAgUmVzdWx0VmFsdWU6IGVuY29kZWQsXG4gICAgICB9LFxuICAgIH0gYXMgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IHJlYXNvbiA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1VuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQnO1xuICAgIGxhbWJkYUxvZy5lcnJvcignRVJST1InLCAnSGFuZGxlciBmYWlsZWQnLCB7XG4gICAgICByZWFzb24sXG4gICAgICBzdGFjazogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLnN0YWNrIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmJhc2VSZXNwb25zZSxcbiAgICAgIFN0YXR1czogJ0ZBSUxFRCcsXG4gICAgICBSZWFzb246IHJlYXNvbixcbiAgICB9IGFzIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNwb25zZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBsYW1iZGFMb2cuaW5mbygnRU5EJywgJ0N1c3RvbSByZXNvdXJjZSBleGVjdXRpb24gY29tcGxldGVkJyk7XG4gIH1cbn07XG4iXX0=
@@ -29,7 +29,7 @@ export interface PluginLookupProps {
29
29
  * Keyed by `alias || name` (matches the construct's normalize() output).
30
30
  * When a lookup hits this map, `plugin()` returns the resolved Plugin
31
31
  * directly — no custom resource is created. This is what makes the
32
- * imageTag, commands, env, etc. available at synth time so the resulting
32
+ * name, version, commands, env, etc. available at synth time so the resulting
33
33
  * CFN template ships with the real values baked in.
34
34
  */
35
35
  readonly resolvedPlugins?: Record<string, Plugin>;
@@ -92,7 +92,7 @@ class PluginLookup extends constructs_1.Construct {
92
92
  const props = this.normalize(plugin);
93
93
  // Pre-resolved by `pipeline-manager synth` from the platform API.
94
94
  // Skip the custom resource entirely — we already know the plugin's
95
- // imageTag, commands, env, etc. at synth time, so the resulting CFN
95
+ // name, version, commands, env, etc. at synth time, so the resulting CFN
96
96
  // template can ship with the real CodeBuild image baked in.
97
97
  const cacheKey = props.alias || props.name;
98
98
  const preResolved = this._resolvedPlugins?.[cacheKey];
@@ -232,7 +232,6 @@ class PluginLookup extends constructs_1.Construct {
232
232
  buildArgs: {},
233
233
  installCommands: [],
234
234
  commands: [],
235
- imageTag: '',
236
235
  dockerfile: null,
237
236
  buildType: 'metadata_only',
238
237
  accessModifier: 'public',
@@ -268,4 +267,4 @@ class PluginLookup extends constructs_1.Construct {
268
267
  }
269
268
  }
270
269
  exports.PluginLookup = PluginLookup;
271
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9wbHVnaW4tbG9va3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7QUFFdEMsK0JBQTRCO0FBQzVCLHlEQUEwRDtBQUUxRCw2Q0FBOEQ7QUFDOUQsaURBQThEO0FBQzlELHVEQUErRDtBQUMvRCxxRUFBK0Q7QUFDL0QsbURBQStEO0FBQy9ELG1FQUF3RDtBQUN4RCwyQ0FBdUM7QUFFdkMscURBQTZEO0FBRzdELE1BQU0sR0FBRyxHQUFHLElBQUEsdUJBQVksRUFBQyxRQUFRLENBQUMsQ0FBQztBQXFDbkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQWEsWUFBYSxTQUFRLHNCQUFTO0lBQ3hCLFNBQVMsQ0FBVztJQUNwQixTQUFTLENBQVc7SUFDcEIsWUFBWSxDQUFTO0lBQ3JCLFFBQVEsQ0FBVTtJQUNsQixRQUFRLENBQVc7SUFDbkIsV0FBVyxDQUFTO0lBQ3BCLDZCQUE2QixDQUFVO0lBQ3ZDLE1BQU0sQ0FBVTtJQUNoQixnQkFBZ0IsQ0FBMEI7SUFFM0QsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3QjtRQUNoRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFB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LFFBQVEsRUFBRSxTQUFTO1lBQ25CLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLGVBQWU7WUFDM0IsV0FBVyxFQUFFLE9BQU87WUFDcEIsT0FBTyxFQUFFLElBQUk7WUFDYixlQUFlLEVBQUUsTUFBTTtZQUN2QixPQUFPLEVBQUUsRUFBRTtZQUNYLHNCQUFzQixFQUFFLFNBQVM7WUFDakMsR0FBRyxFQUFFLEVBQUU7WUFDUCxTQUFTLEVBQUUsRUFBRTtZQUNiLGVBQWUsRUFBRSxFQUFFO1lBQ25CLFFBQVEsRUFBRSxFQUFFO1lBQ1osUUFBUSxFQUFFLEVBQUU7WUFDWixVQUFVLEVBQUUsSUFBSTtZQUNoQixTQUFTLEVBQUUsZUFBZTtZQUMxQixjQUFjLEVBQUUsUUFBUTtZQUN4QixTQUFTLEVBQUUsS0FBSztZQUNoQixRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRSxJQUFJO1lBQ2YsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQztJQUNKLENBQUM7SUFFRCxxRUFBcUU7SUFDN0QsUUFBUTtRQUNkLE9BQU87WUFDTCxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUU7WUFDNUIsUUFBUSxFQUFFLENBQUMsaUZBQWlGLENBQUM7U0FDOUYsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxhQUFhO1FBQ2xCLE9BQU87WUFDTCxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUU7WUFDNUIsSUFBSSxFQUFFLFdBQVc7WUFDakIsc0JBQXNCLEVBQUUsU0FBUztZQUNqQyxRQUFRLEVBQUU7Z0JBQ1IsZ0dBQWdHO2FBQ2pHO1NBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQW5RRCxvQ0FtUUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgUGx1Z2luRmlsdGVyLCBQbHVnaW4gfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhJztcbmltcG9ydCB7IEN1c3RvbVJlc291cmNlLCBUb2tlbiwgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQsIEVmZmVjdCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgUnVudGltZSwgQXJjaGl0ZWN0dXJlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBOb2RlanNGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzJztcbmltcG9ydCB7IExvZ0dyb3VwLCBSZXRlbnRpb25EYXlzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5PcHRpb25zIH0gZnJvbSAnLi9zdGVwLXR5cGVzJztcbmltcG9ydCB7IENvbmZpZywgQ29yZUNvbnN0YW50cyB9IGZyb20gJy4uL2NvbmZpZy9hcHAtY29uZmlnJztcbmltcG9ydCB7IFVuaXF1ZUlkIH0gZnJvbSAnLi4vY29yZS9pZC1nZW5lcmF0b3InO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoJ0xvb2t1cCcpO1xuXG5pbnRlcmZhY2UgSW5wdXRQcm9wcyB7XG4gIHJlYWRvbmx5IGJhc2VVUkw6IHN0cmluZztcbiAgcmVhZG9ubHkgcGx1Z2luRmlsdGVyOiBQbHVnaW5GaWx0ZXI7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgUGx1Z2luTG9va3VwIGNvbnN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkxvb2t1cFByb3BzIHtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb2plY3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgcGxhdGZvcm1Vcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgdW5pcXVlSWQ6IFVuaXF1ZUlkO1xuICAvKiogT3JnYW5pemF0aW9uIElEIGZvciByZXNvbHZpbmcgcGVyLW9yZyBzZWNyZXRzIGZyb20gU2VjcmV0cyBNYW5hZ2VyICovXG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lPzogUnVudGltZTtcbiAgLyoqIExhbWJkYSB0aW1lb3V0IChkZWZhdWx0OiAzMHMpICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBEdXJhdGlvbjtcbiAgLyoqIExhbWJkYSBtZW1vcnkgaW4gTUIgKGRlZmF1bHQ6IDUxMikgKi9cbiAgcmVhZG9ubHkgbWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgLyoqIExvZyByZXRlbnRpb24gKGRlZmF1bHQ6IE9ORV9XRUVLKSAqL1xuICByZWFkb25seSBsb2dSZXRlbnRpb24/OiBSZXRlbnRpb25EYXlzO1xuICAvKiogUmVzZXJ2ZWQgY29uY3VycmVudCBleGVjdXRpb25zIGZvciB0aGUgbG9va3VwIExhbWJkYSAoZGVmYXVsdDogMzApICovXG4gIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQbHVnaW5zIHByZS1yZXNvbHZlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBzeW50aGAgZnJvbSB0aGUgcGxhdGZvcm0gQVBJLlxuICAgKiBLZXllZCBieSBgYWxpYXMgfHwgbmFtZWAgKG1hdGNoZXMgdGhlIGNvbnN0cnVjdCdzIG5vcm1hbGl6ZSgpIG91dHB1dCkuXG4gICAqIFdoZW4gYSBsb29rdXAgaGl0cyB0aGlzIG1hcCwgYHBsdWdpbigpYCByZXR1cm5zIHRoZSByZXNvbHZlZCBQbHVnaW5cbiAgICogZGlyZWN0bHkg4oCUIG5vIGN1c3RvbSByZXNvdXJjZSBpcyBjcmVhdGVkLiBUaGlzIGlzIHdoYXQgbWFrZXMgdGhlXG4gICAqIGltYWdlVGFnLCBjb21tYW5kcywgZW52LCBldGMuIGF2YWlsYWJsZSBhdCBzeW50aCB0aW1lIHNvIHRoZSByZXN1bHRpbmdcbiAgICogQ0ZOIHRlbXBsYXRlIHNoaXBzIHdpdGggdGhlIHJlYWwgdmFsdWVzIGJha2VkIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZWRQbHVnaW5zPzogUmVjb3JkPHN0cmluZywgUGx1Z2luPjtcbn1cblxuLyoqXG4gKiBDREsgQ29uc3RydWN0IHJlc3BvbnNpYmxlIGZvciBsb29raW5nIHVwIHBsdWdpbiBjb25maWd1cmF0aW9ucyBmcm9tIGFuIGV4dGVybmFsIHBsYXRmb3JtXG4gKiB1c2luZyBBV1MgQ2xvdWRGb3JtYXRpb24gQ3VzdG9tIFJlc291cmNlcyBiYWNrZWQgYnkgYSBMYW1iZGEgZnVuY3Rpb24uXG4gKlxuICogVGhpcyBjb25zdHJ1Y3QgY3JlYXRlczpcbiAqIC0gQSBMYW1iZGEgZnVuY3Rpb24gKHBsdWdpbi1sb29rdXAtaGFuZGxlcikgdGhhdCBmZXRjaGVzIHBsdWdpbiBjb25maWdzXG4gKiAtIEEgQ2xvdWRXYXRjaCBMb2cgR3JvdXAgZm9yIHRoZSBMYW1iZGFcbiAqIC0gQSBDdXN0b20gUmVzb3VyY2UgUHJvdmlkZXIgdGhhdCBpbnZva2VzIHRoZSBMYW1iZGFcbiAqIC0gQW4gSUFNIHBvbGljeSBncmFudGluZyB0aGUgTGFtYmRhIGFjY2VzcyB0byB0aGUgY3JlZGVudGlhbHMgc2VjcmV0XG4gKlxuICogIyMgUHJlcmVxdWlzaXRlc1xuICpcbiAqIEJlZm9yZSBkZXBsb3lpbmcsIHN0b3JlIGEgSldUIHRva2VuIGluIFNlY3JldHMgTWFuYWdlcjpcbiAqIGBgYHNoXG4gKiBwaXBlbGluZS1tYW5hZ2VyIHN0b3JlLXRva2VuIC0tZGF5cyAzMCAtLXJlZ2lvbiA8cmVnaW9uPlxuICogYGBgXG4gKlxuICogVGhlIExhbWJkYSByZXNvbHZlcyB0aGUgc2VjcmV0IGJ5IG5hbWUgYXQgcnVudGltZTpcbiAqIGB7U0VDUkVUU19QQVRIX1BSRUZJWH0ve29yZ0lkfS9wbGF0Zm9ybWBcbiAqXG4gKiBAc2VlIGhhbmRsZXJzL3BsdWdpbi1sb29rdXAtaGFuZGxlci50cyBmb3IgdGhlIExhbWJkYSBpbXBsZW1lbnRhdGlvblxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luTG9va3VwIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdW5pcXVlSWQ6IFVuaXF1ZUlkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wcm92aWRlcjogUHJvdmlkZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BsYXRmb3JtVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J1bnRpbWU6IFJ1bnRpbWU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVvdXQ6IER1cmF0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZW1vcnlTaXplOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29yZ0lkPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQbHVnaW5Mb29rdXBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoIXByb3BzLm9yZ2FuaXphdGlvbiB8fCAhcHJvcHMucHJvamVjdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCb3RoIG9yZ2FuaXphdGlvbiBhbmQgcHJvamVjdCBhcmUgcmVxdWlyZWQuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdW5pcXVlSWQgPSBwcm9wcy51bmlxdWVJZDtcbiAgICB0aGlzLl9wbGF0Zm9ybVVybCA9IHByb3BzLnBsYXRmb3JtVXJsO1xuICAgIHRoaXMuX29yZ0lkID0gcHJvcHMub3JnSWQ7XG4gICAgdGhpcy5fcnVudGltZSA9IHByb3BzLnJ1bnRpbWUgPz8gUnVudGltZS5OT0RFSlNfMjRfWDtcbiAgICB0aGlzLl90aW1lb3V0ID0gcHJvcHMudGltZW91dCA/PyBEdXJhdGlvbi5zZWNvbmRzKDMwKTtcbiAgICB0aGlzLl9tZW1vcnlTaXplID0gcHJvcHMubWVtb3J5U2l6ZSA/PyBDb25maWcuZ2V0KCdhd3MnKS5sYW1iZGEubWVtb3J5U2l6ZTtcbiAgICB0aGlzLl9yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zID0gcHJvcHMucmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucztcbiAgICB0aGlzLl9yZXNvbHZlZFBsdWdpbnMgPSBwcm9wcy5yZXNvbHZlZFBsdWdpbnM7XG5cbiAgICBjb25zdCBvbkV2ZW50SGFuZGxlciA9IHRoaXMuY3JlYXRlTGFtYmRhRnVuY3Rpb24oKTtcblxuICAgIC8vIExvZy1ncm91cCBzdHJhdGVneTpcbiAgICAvLyAgIFByZXZpb3VzIGNvZGUgY3JlYXRlZCBhbiBgQVdTOjpMb2dzOjpMb2dHcm91cGAgcmVzb3VyY2Ugd2l0aCBhblxuICAgIC8vICAgRVhQTElDSVQgbmFtZSAoYC9hd3MvbGFtYmRhL3BsdWdpbi1sb29rdXAtTmApLiBUaGF0IGJyZWFrcyBldmVyeVxuICAgIC8vICAgcmUtZGVwbG95IGFmdGVyIGEgcm9sbGVkLWJhY2sgc3RhY2s6IEFXUyBhdXRvLWNyZWF0ZXMgdGhlIGdyb3VwIG9uXG4gICAgLy8gICBmaXJzdCBMYW1iZGEgaW52b2NhdGlvbiwgdGhlIHJvbGxiYWNrIGxlYXZlcyBpdCBhcyBhbiBvcnBoYW4sIGFuZFxuICAgIC8vICAgdGhlIG5leHQgQ0RLIHJ1biBmYWlscyB3aXRoIFwiUmVzb3VyY2UgLi4uIGFscmVhZHkgZXhpc3RzXCIgYmVjYXVzZVxuICAgIC8vICAgdGhlIGV4cGxpY2l0IG5hbWUgY29sbGlkZXMgd2l0aCB0aGUgb3JwaGFuLlxuICAgIC8vXG4gICAgLy8gICBGaXg6IHVzZSBgTG9nR3JvdXAuZnJvbUxvZ0dyb3VwTmFtZSgpYCB0byBhZG9wdC1vci1wYXNzLXRocm91Z2guXG4gICAgLy8gICBJZiB0aGUgZ3JvdXAgZXhpc3RzLCBDREsgcmVmZXJlbmNlcyBpdCB3aXRob3V0IHRyeWluZyB0byByZWNyZWF0ZS5cbiAgICAvLyAgIElmIGl0IGRvZXNuJ3QsIEFXUyBMYW1iZGEgYXV0by1jcmVhdGVzIGl0IG9uIGZpcnN0IGludm9jYXRpb24uXG4gICAgLy8gICBSZXRlbnRpb24gaXMgdGhlbiBzZXQgdmlhIGEgc2VwYXJhdGUgcmV0ZW50aW9uLXBvbGljeSBjdXN0b21cbiAgICAvLyAgIHJlc291cmNlIHdoaWNoIGlzIGlkZW1wb3RlbnQgKHNhZmUgdG8gYXBwbHkgdG8gZXhpc3RpbmcgZ3JvdXBzKS5cbiAgICBjb25zdCBsb2dHcm91cE5hbWUgPSBgL2F3cy9sYW1iZGEvJHt0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgncGx1Z2luOmxvb2t1cCcpLnJlcGxhY2UoLzovZywgJy0nKX1gO1xuICAgIGNvbnN0IGxvZ0dyb3VwID0gTG9nR3JvdXAuZnJvbUxvZ0dyb3VwTmFtZShcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgnbG9nOmdyb3VwJyksXG4gICAgICBsb2dHcm91cE5hbWUsXG4gICAgKTtcblxuICAgIHRoaXMuX3Byb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsIHRoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdyZXNvdXJjZTpwcm92aWRlcicpLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcixcbiAgICAgIGxvZ0dyb3VwLFxuICAgIH0pO1xuXG4gICAgbG9nLmRlYnVnKGBQbHVnaW5Mb29rdXAgaW5pdGlhbGl6ZWQgZm9yICR7cHJvcHMub3JnYW5pemF0aW9ufS8ke3Byb3BzLnByb2plY3R9YCk7XG4gIH1cblxuICAvKipcbiAgICogTG9va3MgdXAgYW5kIHJlc29sdmVzIHBsdWdpbiBjb25maWd1cmF0aW9uIHVzaW5nIGVpdGhlciBhIHNpbXBsZSBuYW1lIG9yIGZ1bGwgUGx1Z2luT3B0aW9ucyBvYmplY3RcbiAgICogRHVyaW5nIHN5bnRoZXNpcywgaWYgdGhlIHZhbHVlIGlzIHVucmVzb2x2ZWQgKHRva2VuKSwgcmV0dXJucyBmYWxsYmFjayBwbHVnaW5cbiAgICogRHVyaW5nIGRlcGxveW1lbnQsIGF0dGVtcHRzIHRvIHBhcnNlIHRoZSBhY3R1YWwgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGN1c3RvbSByZXNvdXJjZVxuICAgKiBAcGFyYW0gcGx1Z2luIC0gUGx1Z2luIG5hbWUgKHN0cmluZykgb3IgY29tcGxldGUgUGx1Z2luT3B0aW9ucyBjb25maWd1cmF0aW9uXG4gICAqIEByZXR1cm5zIFJlc29sdmVkIFBsdWdpbiBvYmplY3Qgb3IgZmFsbGJhY2sgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgcGx1Z2luKHBsdWdpbjogc3RyaW5nIHwgUGx1Z2luT3B0aW9ucyk6IFBsdWdpbiB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLm5vcm1hbGl6ZShwbHVnaW4pO1xuXG4gICAgLy8gUHJlLXJlc29sdmVkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHN5bnRoYCBmcm9tIHRoZSBwbGF0Zm9ybSBBUEkuXG4gICAgLy8gU2tpcCB0aGUgY3VzdG9tIHJlc291cmNlIGVudGlyZWx5IOKAlCB3ZSBhbHJlYWR5IGtub3cgdGhlIHBsdWdpbidzXG4gICAgLy8gaW1hZ2VUYWcsIGNvbW1hbmRzLCBlbnYsIGV0Yy4gYXQgc3ludGggdGltZSwgc28gdGhlIHJlc3VsdGluZyBDRk5cbiAgICAvLyB0ZW1wbGF0ZSBjYW4gc2hpcCB3aXRoIHRoZSByZWFsIENvZGVCdWlsZCBpbWFnZSBiYWtlZCBpbi5cbiAgICBjb25zdCBjYWNoZUtleSA9IHByb3BzLmFsaWFzIHx8IHByb3BzLm5hbWU7XG4gICAgY29uc3QgcHJlUmVzb2x2ZWQgPSB0aGlzLl9yZXNvbHZlZFBsdWdpbnM/LltjYWNoZUtleV07XG4gICAgaWYgKHByZVJlc29sdmVkKSB7XG4gICAgICBsb2cuZGVidWcoYFBsdWdpbiBcIiR7cHJvcHMubmFtZX1cIiBwcmUtcmVzb2x2ZWQgKGFsaWFzPSR7Y2FjaGVLZXl9KSDigJQgc2tpcHBpbmcgY3VzdG9tIHJlc291cmNlYCk7XG4gICAgICByZXR1cm4gcHJlUmVzb2x2ZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY3VzdG9tID0gdGhpcy5jcmVhdGVDdXN0b21SZXNvdXJjZShwcm9wcyk7XG4gICAgY29uc3QgZW5jb2RlZCA9IGN1c3RvbS5nZXRBdHRTdHJpbmcoJ1Jlc3VsdFZhbHVlJyk7XG5cbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGVuY29kZWQpKSB7XG4gICAgICBsb2cuZGVidWcoYFBsdWdpbiBcIiR7cHJvcHMubmFtZX1cIiB2YWx1ZSBpcyB1bnJlc29sdmVkICh0b2tlbikgZHVyaW5nIHN5bnRoZXNpcyDigJQgdXNpbmcgZmFsbGJhY2suIFRoZSBhY3R1YWwgcGx1Z2luIHdpbGwgYmUgcmVzb2x2ZWQgYXQgZGVwbG95bWVudCB0aW1lLmApO1xuICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2soKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb2RlZCA9IEJ1ZmZlci5mcm9tKGVuY29kZWQsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRlY29kZWQpO1xuXG4gICAgICBpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8ICFkYXRhLm5hbWUgfHwgIUFycmF5LmlzQXJyYXkoZGF0YS5jb21tYW5kcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHBsdWdpbiByZXNwb25zZTogbWlzc2luZyByZXF1aXJlZCBmaWVsZHMgKG5hbWUsIGNvbW1hbmRzKScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YSBhcyBQbHVnaW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTXNnID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcic7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBwYXJzZSBwbHVnaW4gXCIke3Byb3BzLm5hbWV9XCIgZGF0YTogJHtlcnJvck1zZ31gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgTGFtYmRhIGZ1bmN0aW9uIHRoYXQgc2VydmVzIGFzIHRoZSBldmVudCBoYW5kbGVyIGZvciB0aGUgY3VzdG9tIHJlc291cmNlIHByb3ZpZGVyLlxuICAgKlxuICAgKiBKV1QgdG9rZW4gaXMgc3RvcmVkIGluIGEgcHJlLWV4aXN0aW5nIFNlY3JldHMgTWFuYWdlciBzZWNyZXQgYXRcbiAgICogYHtTRUNSRVRTX1BBVEhfUFJFRklYfS97b3JnSWR9L3BsYXRmb3JtYC4gVGhlIExhbWJkYSByZXNvbHZlcyB0aGVcbiAgICogc2VjcmV0IGJ5IG5hbWUgYXQgcnVudGltZSB1c2luZyBgQ29yZUNvbnN0YW50cy5TRUNSRVRTX1BBVEhfUFJFRklYYC5cbiAgICpcbiAgICogQ3JlYXRlIHRoZSBzZWNyZXQgYmVmb3JlIGRlcGxveWluZyB3aXRoOlxuICAgKiAgIHBpcGVsaW5lLW1hbmFnZXIgc3RvcmUtdG9rZW4gLS1kYXlzIDMwIC0tcmVnaW9uIDxyZWdpb24+XG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUxhbWJkYUZ1bmN0aW9uKCk6IE5vZGVqc0Z1bmN0aW9uIHtcbiAgICBpZiAoIXRoaXMuX29yZ0lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29yZ0lkIGlzIHJlcXVpcmVkIGZvciBQbHVnaW5Mb29rdXAg4oCUIG5lZWRlZCB0byByZXNvbHZlIHRoZSBwZXItb3JnIHBsYXRmb3JtIHNlY3JldCcpO1xuICAgIH1cbiAgICBjb25zdCBzZWNyZXROYW1lID0gQ29yZUNvbnN0YW50cy5zZWNyZXRQYXRoKHRoaXMuX29yZ0lkLCAncGxhdGZvcm0nKTtcblxuICAgIGNvbnN0IGZuID0gbmV3IE5vZGVqc0Z1bmN0aW9uKHRoaXMsIHRoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdvbmV2ZW50OmhhbmRsZXInKSwge1xuICAgICAgcnVudGltZTogdGhpcy5fcnVudGltZSxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuX3RpbWVvdXQsXG4gICAgICBtZW1vcnlTaXplOiB0aGlzLl9tZW1vcnlTaXplLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgZW50cnk6IGpvaW4oX19kaXJuYW1lLCAnLy4uL2hhbmRsZXJzL3BsdWdpbi1sb29rdXAtaGFuZGxlci5qcycpLFxuICAgICAgZGVwc0xvY2tGaWxlUGF0aDogam9pbihfX2Rpcm5hbWUsICcvLi4vaGFuZGxlcnMvcG5wbS1sb2NrLnlhbWwnKSxcbiAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM6IHRoaXMuX3Jlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBQTEFURk9STV9TRUNSRVRfTkFNRTogc2VjcmV0TmFtZSxcbiAgICAgICAgLy8gQWxsb3cgc2VsZi1zaWduZWQgY2VydHMgd2hlbiBwbGF0Zm9ybSB1c2VzIEhUVFBTIHdpdGhvdXQgYSBDQS1zaWduZWQgY2VydGlmaWNhdGVcbiAgICAgICAgLi4uKHByb2Nlc3MuZW52Lk5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQgPT09ICcwJyAmJiB7XG4gICAgICAgICAgTk9ERV9UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRDogJzAnLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgICBidW5kbGluZzoge1xuICAgICAgICBtaW5pZnk6IHRydWUsXG4gICAgICAgIHNvdXJjZU1hcDogZmFsc2UsXG4gICAgICAgIHRhcmdldDogJ2VzMjAyMicsXG4gICAgICAgIGV4dGVybmFsTW9kdWxlczogWydAYXdzLXNkay8qJ10sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gR3JhbnQgdGhlIExhbWJkYSBwZXJtaXNzaW9uIHRvIHJlYWQgdGhlIHBlci1vcmcgcGxhdGZvcm0gc2VjcmV0LlxuICAgIC8vIFRoZSB3aWxkY2FyZCBzdWZmaXggaGFuZGxlcyB0aGUgNi1jaGFyIHJhbmRvbSBJRCB0aGF0IFNlY3JldHMgTWFuYWdlciBhcHBlbmRzLlxuICAgIGZuLmFkZFRvUm9sZVBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZSddLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6c2VjcmV0c21hbmFnZXI6KjoqOnNlY3JldDoke3NlY3JldE5hbWV9LSpgXSxcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gZm47XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGRlZmF1bHQgcGx1Z2luIGZpbHRlci5cbiAgICogQWNjZXNzIGNvbnRyb2wgKG9yZ0lkIHNjb3BpbmcsIHB1YmxpYy9wcml2YXRlIHZpc2liaWxpdHkpIGlzIGhhbmRsZWQgYnlcbiAgICogdGhlIHBsYXRmb3JtJ3MgYWNjZXNzIGNvbnRyb2wgcXVlcnkgYnVpbGRlciBiYXNlZCBvbiB0aGUgSldUJ3Mgb3JnYW5pemF0aW9uSWQuXG4gICAqL1xuICBwcml2YXRlIGRlZmF1bHRGaWx0ZXIobmFtZTogc3RyaW5nKTogUGx1Z2luRmlsdGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiB0cnVlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZShwbHVnaW46IHN0cmluZyB8IFBsdWdpbk9wdGlvbnMpOiBQbHVnaW5PcHRpb25zIHtcbiAgICBpZiAodHlwZW9mIHBsdWdpbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHBsdWdpbixcbiAgICAgICAgZmlsdGVyOiB0aGlzLmRlZmF1bHRGaWx0ZXIocGx1Z2luKSxcbiAgICAgICAgYWxpYXM6IGAke3BsdWdpbn0tYWxpYXNgLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogcGx1Z2luLm5hbWUsXG4gICAgICBhbGlhczogcGx1Z2luLmFsaWFzID8/IGAke3BsdWdpbi5uYW1lfS1hbGlhc2AsXG4gICAgICBmaWx0ZXI6IHBsdWdpbi5maWx0ZXIgPz8gdGhpcy5kZWZhdWx0RmlsdGVyKHBsdWdpbi5uYW1lKSxcbiAgICAgIG1ldGFkYXRhOiBwbHVnaW4ubWV0YWRhdGEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ3VzdG9tUmVzb3VyY2UgaW5zdGFuY2UgdGhhdCB0cmlnZ2VycyBwbHVnaW4gbG9va3VwIGR1cmluZyBkZXBsb3ltZW50XG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUN1c3RvbVJlc291cmNlKHByb3BzOiBQbHVnaW5PcHRpb25zKTogQ3VzdG9tUmVzb3VyY2Uge1xuICAgIGNvbnN0IHJlc291cmNlSWQgPSB0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZShwcm9wcy5hbGlhcyB8fCBwcm9wcy5uYW1lKTtcblxuICAgIHJldHVybiBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgcmVzb3VyY2VJZCwge1xuICAgICAgc2VydmljZVRva2VuOiB0aGlzLl9wcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICByZXNvdXJjZVR5cGU6ICdDdXN0b206OlBsdWdpbkxvb2t1cCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGJhc2VVUkw6IHRoaXMuX3BsYXRmb3JtVXJsLFxuICAgICAgICBwbHVnaW5GaWx0ZXI6IHByb3BzLmZpbHRlcixcbiAgICAgIH0gYXMgSW5wdXRQcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBCYXNlIHBsdWdpbiBzaGFwZSB3aXRoIG5vLW9wIGRlZmF1bHRzIGZvciBmaWVsZHMgQ0RLIGRvZXNuJ3QgdXNlLiAqL1xuICBwcml2YXRlIHN0YXRpYyBiYXNlUGx1Z2luKCk6IFBsdWdpbiB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnLFxuICAgICAgb3JnSWQ6ICdzeXN0ZW0nLFxuICAgICAgY3JlYXRlZEJ5OiAnc3lzdGVtJyxcbiAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgdXBkYXRlZEJ5OiAnc3lzdGVtJyxcbiAgICAgIHVwZGF0ZWRBdDogbm93LFxuICAgICAgbmFtZTogJ2ZhbGxiYWNrJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBudWxsLFxuICAgICAga2V5d29yZHM6IFtdLFxuICAgICAgY2F0ZWdvcnk6ICd1bmtub3duJyxcbiAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICBtZXRhZGF0YToge30sXG4gICAgICBwbHVnaW5UeXBlOiAnQ29kZUJ1aWxkU3RlcCcsXG4gICAgICBjb21wdXRlVHlwZTogJ1NNQUxMJyxcbiAgICAgIHRpbWVvdXQ6IG51bGwsXG4gICAgICBmYWlsdXJlQmVoYXZpb3I6ICdmYWlsJyxcbiAgICAgIHNlY3JldHM6IFtdLFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogJ2Nkay5vdXQnLFxuICAgICAgZW52OiB7fSxcbiAgICAgIGJ1aWxkQXJnczoge30sXG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IFtdLFxuICAgICAgY29tbWFuZHM6IFtdLFxuICAgICAgaW1hZ2VUYWc6ICcnLFxuICAgICAgZG9ja2VyZmlsZTogbnVsbCxcbiAgICAgIGJ1aWxkVHlwZTogJ21ldGFkYXRhX29ubHknLFxuICAgICAgYWNjZXNzTW9kaWZpZXI6ICdwdWJsaWMnLFxuICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgZGVsZXRlZEF0OiBudWxsLFxuICAgICAgZGVsZXRlZEJ5OiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvKiogRmFsbGJhY2sgZm9yIHVucmVzb2x2ZWQgcGx1Z2luIGxvb2t1cCB0b2tlbnMgZHVyaW5nIHN5bnRoZXNpcy4gKi9cbiAgcHJpdmF0ZSBmYWxsYmFjaygpOiBQbHVnaW4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5QbHVnaW5Mb29rdXAuYmFzZVBsdWdpbigpLFxuICAgICAgY29tbWFuZHM6IFsnZWNobyBcIkZBTExCQUNLOiBQbHVnaW4gbG9va3VwIHVucmVzb2x2ZWQg4oCUIHdpbGwgYmUgcmVzb2x2ZWQgYXQgZGVwbG95bWVudCB0aW1lXCInXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bnRoIHBsdWdpbiB3aXRoIHBpcGVsaW5lLW1hbmFnZXIgY29tbWFuZHMuIENvbGQtc3RhcnQgZmFsbGJhY2sgZm9yIHRoZVxuICAgKiBzeW50aCBzdGVwIHdoZW4gcHJlLXJlc29sdXRpb24gYnkgYHBpcGVsaW5lLW1hbmFnZXIgc3ludGgvZGVwbG95YCBkaWRuJ3RcbiAgICogcG9wdWxhdGUgYHJlc29sdmVkUGx1Z2luc2AgZm9yIHRoZSBzeW50aCBwbHVnaW4uIFJ1bnMgb24gYHN0YW5kYXJkOjcuMGBcbiAgICogdmlhIHRoZSBkZWZhdWx0IENvZGVCdWlsZCBpbWFnZSBhbmQgc2VsZi1ib290c3RyYXBzIHRoZSByZWFsIHN5bnRoIHZpYVxuICAgKiBgcGlwZWxpbmUtbWFuYWdlciBzeW50aCAtLWlkICR7UElQRUxJTkVfSUR9YC5cbiAgICovXG4gIHB1YmxpYyBmYWxsYmFja1N5bnRoKCk6IFBsdWdpbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLlBsdWdpbkxvb2t1cC5iYXNlUGx1Z2luKCksXG4gICAgICBuYW1lOiAnY2RrLXN5bnRoJyxcbiAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6ICdjZGsub3V0JyxcbiAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICdwaXBlbGluZS1tYW5hZ2VyIHN5bnRoIC0taWQgJHtQSVBFTElORV9JRH0gLS1zdG9yZS10b2tlbnMgLS1xdWlldCAtLW5vLW5vdGljZXMgLS1uby12ZXJpZnktc3NsJyxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl19
270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9wbHVnaW4tbG9va3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7QUFFdEMsK0JBQTRCO0FBQzVCLHlEQUEwRDtBQUUxRCw2Q0FBOEQ7QUFDOUQsaURBQThEO0FBQzlELHVEQUErRDtBQUMvRCxxRUFBK0Q7QUFDL0QsbURBQStEO0FBQy9ELG1FQUF3RDtBQUN4RCwyQ0FBdUM7QUFFdkMscURBQTZEO0FBRzdELE1BQU0sR0FBRyxHQUFHLElBQUEsdUJBQVksRUFBQyxRQUFRLENBQUMsQ0FBQztBQXFDbkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQWEsWUFBYSxTQUFRLHNCQUFTO0lBQ3hCLFNBQVMsQ0FBVztJQUNwQixTQUFTLENBQVc7SUFDcEIsWUFBWSxDQUFTO0lBQ3JCLFFBQVEsQ0FBVTtJQUNsQixRQUFRLENBQVc7SUFDbkIsV0FBVyxDQUFTO0lBQ3BCLDZCQUE2QixDQUFVO0lBQ3ZDLE1BQU0sQ0FBVTtJQUNoQixnQkFBZ0IsQ0FBMEI7SUFFM0QsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3QjtRQUNoRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFB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LFFBQVEsRUFBRSxTQUFTO1lBQ25CLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLGVBQWU7WUFDM0IsV0FBVyxFQUFFLE9BQU87WUFDcEIsT0FBTyxFQUFFLElBQUk7WUFDYixlQUFlLEVBQUUsTUFBTTtZQUN2QixPQUFPLEVBQUUsRUFBRTtZQUNYLHNCQUFzQixFQUFFLFNBQVM7WUFDakMsR0FBRyxFQUFFLEVBQUU7WUFDUCxTQUFTLEVBQUUsRUFBRTtZQUNiLGVBQWUsRUFBRSxFQUFFO1lBQ25CLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLElBQUk7WUFDaEIsU0FBUyxFQUFFLGVBQWU7WUFDMUIsY0FBYyxFQUFFLFFBQVE7WUFDeEIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsUUFBUSxFQUFFLElBQUk7WUFDZCxTQUFTLEVBQUUsSUFBSTtZQUNmLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUM7SUFDSixDQUFDO0lBRUQscUVBQXFFO0lBQzdELFFBQVE7UUFDZCxPQUFPO1lBQ0wsR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQzVCLFFBQVEsRUFBRSxDQUFDLGlGQUFpRixDQUFDO1NBQzlGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksYUFBYTtRQUNsQixPQUFPO1lBQ0wsR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQzVCLElBQUksRUFBRSxXQUFXO1lBQ2pCLHNCQUFzQixFQUFFLFNBQVM7WUFDakMsUUFBUSxFQUFFO2dCQUNSLGdHQUFnRzthQUNqRztTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFsUUQsb0NBa1FDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IFBsdWdpbkZpbHRlciwgUGx1Z2luIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgVG9rZW4sIER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50LCBFZmZlY3QgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFJ1bnRpbWUsIEFyY2hpdGVjdHVyZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgTm9kZWpzRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqcyc7XG5pbXBvcnQgeyBMb2dHcm91cCwgUmV0ZW50aW9uRGF5cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luT3B0aW9ucyB9IGZyb20gJy4vc3RlcC10eXBlcyc7XG5pbXBvcnQgeyBDb25maWcsIENvcmVDb25zdGFudHMgfSBmcm9tICcuLi9jb25maWcvYXBwLWNvbmZpZyc7XG5pbXBvcnQgeyBVbmlxdWVJZCB9IGZyb20gJy4uL2NvcmUvaWQtZ2VuZXJhdG9yJztcblxuY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKCdMb29rdXAnKTtcblxuaW50ZXJmYWNlIElucHV0UHJvcHMge1xuICByZWFkb25seSBiYXNlVVJMOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsdWdpbkZpbHRlcjogUGx1Z2luRmlsdGVyO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIFBsdWdpbkxvb2t1cCBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Mb29rdXBQcm9wcyB7XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogc3RyaW5nO1xuICByZWFkb25seSBwcm9qZWN0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsYXRmb3JtVXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVuaXF1ZUlkOiBVbmlxdWVJZDtcbiAgLyoqIE9yZ2FuaXphdGlvbiBJRCBmb3IgcmVzb2x2aW5nIHBlci1vcmcgc2VjcmV0cyBmcm9tIFNlY3JldHMgTWFuYWdlciAqL1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgcnVudGltZT86IFJ1bnRpbWU7XG4gIC8qKiBMYW1iZGEgdGltZW91dCAoZGVmYXVsdDogMzBzKSAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG4gIC8qKiBMYW1iZGEgbWVtb3J5IGluIE1CIChkZWZhdWx0OiA1MTIpICovXG4gIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XG4gIC8qKiBMb2cgcmV0ZW50aW9uIChkZWZhdWx0OiBPTkVfV0VFSykgKi9cbiAgcmVhZG9ubHkgbG9nUmV0ZW50aW9uPzogUmV0ZW50aW9uRGF5cztcbiAgLyoqIFJlc2VydmVkIGNvbmN1cnJlbnQgZXhlY3V0aW9ucyBmb3IgdGhlIGxvb2t1cCBMYW1iZGEgKGRlZmF1bHQ6IDMwKSAqL1xuICByZWFkb25seSByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zPzogbnVtYmVyO1xuICAvKipcbiAgICogUGx1Z2lucyBwcmUtcmVzb2x2ZWQgYnkgYHBpcGVsaW5lLW1hbmFnZXIgc3ludGhgIGZyb20gdGhlIHBsYXRmb3JtIEFQSS5cbiAgICogS2V5ZWQgYnkgYGFsaWFzIHx8IG5hbWVgIChtYXRjaGVzIHRoZSBjb25zdHJ1Y3QncyBub3JtYWxpemUoKSBvdXRwdXQpLlxuICAgKiBXaGVuIGEgbG9va3VwIGhpdHMgdGhpcyBtYXAsIGBwbHVnaW4oKWAgcmV0dXJucyB0aGUgcmVzb2x2ZWQgUGx1Z2luXG4gICAqIGRpcmVjdGx5IOKAlCBubyBjdXN0b20gcmVzb3VyY2UgaXMgY3JlYXRlZC4gVGhpcyBpcyB3aGF0IG1ha2VzIHRoZVxuICAgKiBuYW1lLCB2ZXJzaW9uLCBjb21tYW5kcywgZW52LCBldGMuIGF2YWlsYWJsZSBhdCBzeW50aCB0aW1lIHNvIHRoZSByZXN1bHRpbmdcbiAgICogQ0ZOIHRlbXBsYXRlIHNoaXBzIHdpdGggdGhlIHJlYWwgdmFsdWVzIGJha2VkIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZWRQbHVnaW5zPzogUmVjb3JkPHN0cmluZywgUGx1Z2luPjtcbn1cblxuLyoqXG4gKiBDREsgQ29uc3RydWN0IHJlc3BvbnNpYmxlIGZvciBsb29raW5nIHVwIHBsdWdpbiBjb25maWd1cmF0aW9ucyBmcm9tIGFuIGV4dGVybmFsIHBsYXRmb3JtXG4gKiB1c2luZyBBV1MgQ2xvdWRGb3JtYXRpb24gQ3VzdG9tIFJlc291cmNlcyBiYWNrZWQgYnkgYSBMYW1iZGEgZnVuY3Rpb24uXG4gKlxuICogVGhpcyBjb25zdHJ1Y3QgY3JlYXRlczpcbiAqIC0gQSBMYW1iZGEgZnVuY3Rpb24gKHBsdWdpbi1sb29rdXAtaGFuZGxlcikgdGhhdCBmZXRjaGVzIHBsdWdpbiBjb25maWdzXG4gKiAtIEEgQ2xvdWRXYXRjaCBMb2cgR3JvdXAgZm9yIHRoZSBMYW1iZGFcbiAqIC0gQSBDdXN0b20gUmVzb3VyY2UgUHJvdmlkZXIgdGhhdCBpbnZva2VzIHRoZSBMYW1iZGFcbiAqIC0gQW4gSUFNIHBvbGljeSBncmFudGluZyB0aGUgTGFtYmRhIGFjY2VzcyB0byB0aGUgY3JlZGVudGlhbHMgc2VjcmV0XG4gKlxuICogIyMgUHJlcmVxdWlzaXRlc1xuICpcbiAqIEJlZm9yZSBkZXBsb3lpbmcsIHN0b3JlIGEgSldUIHRva2VuIGluIFNlY3JldHMgTWFuYWdlcjpcbiAqIGBgYHNoXG4gKiBwaXBlbGluZS1tYW5hZ2VyIHN0b3JlLXRva2VuIC0tZGF5cyAzMCAtLXJlZ2lvbiA8cmVnaW9uPlxuICogYGBgXG4gKlxuICogVGhlIExhbWJkYSByZXNvbHZlcyB0aGUgc2VjcmV0IGJ5IG5hbWUgYXQgcnVudGltZTpcbiAqIGB7U0VDUkVUU19QQVRIX1BSRUZJWH0ve29yZ0lkfS9wbGF0Zm9ybWBcbiAqXG4gKiBAc2VlIGhhbmRsZXJzL3BsdWdpbi1sb29rdXAtaGFuZGxlci50cyBmb3IgdGhlIExhbWJkYSBpbXBsZW1lbnRhdGlvblxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luTG9va3VwIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdW5pcXVlSWQ6IFVuaXF1ZUlkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wcm92aWRlcjogUHJvdmlkZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BsYXRmb3JtVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J1bnRpbWU6IFJ1bnRpbWU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVvdXQ6IER1cmF0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZW1vcnlTaXplOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29yZ0lkPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQbHVnaW5Mb29rdXBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoIXByb3BzLm9yZ2FuaXphdGlvbiB8fCAhcHJvcHMucHJvamVjdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCb3RoIG9yZ2FuaXphdGlvbiBhbmQgcHJvamVjdCBhcmUgcmVxdWlyZWQuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdW5pcXVlSWQgPSBwcm9wcy51bmlxdWVJZDtcbiAgICB0aGlzLl9wbGF0Zm9ybVVybCA9IHByb3BzLnBsYXRmb3JtVXJsO1xuICAgIHRoaXMuX29yZ0lkID0gcHJvcHMub3JnSWQ7XG4gICAgdGhpcy5fcnVudGltZSA9IHByb3BzLnJ1bnRpbWUgPz8gUnVudGltZS5OT0RFSlNfMjRfWDtcbiAgICB0aGlzLl90aW1lb3V0ID0gcHJvcHMudGltZW91dCA/PyBEdXJhdGlvbi5zZWNvbmRzKDMwKTtcbiAgICB0aGlzLl9tZW1vcnlTaXplID0gcHJvcHMubWVtb3J5U2l6ZSA/PyBDb25maWcuZ2V0KCdhd3MnKS5sYW1iZGEubWVtb3J5U2l6ZTtcbiAgICB0aGlzLl9yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zID0gcHJvcHMucmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucztcbiAgICB0aGlzLl9yZXNvbHZlZFBsdWdpbnMgPSBwcm9wcy5yZXNvbHZlZFBsdWdpbnM7XG5cbiAgICBjb25zdCBvbkV2ZW50SGFuZGxlciA9IHRoaXMuY3JlYXRlTGFtYmRhRnVuY3Rpb24oKTtcblxuICAgIC8vIExvZy1ncm91cCBzdHJhdGVneTpcbiAgICAvLyAgIFByZXZpb3VzIGNvZGUgY3JlYXRlZCBhbiBgQVdTOjpMb2dzOjpMb2dHcm91cGAgcmVzb3VyY2Ugd2l0aCBhblxuICAgIC8vICAgRVhQTElDSVQgbmFtZSAoYC9hd3MvbGFtYmRhL3BsdWdpbi1sb29rdXAtTmApLiBUaGF0IGJyZWFrcyBldmVyeVxuICAgIC8vICAgcmUtZGVwbG95IGFmdGVyIGEgcm9sbGVkLWJhY2sgc3RhY2s6IEFXUyBhdXRvLWNyZWF0ZXMgdGhlIGdyb3VwIG9uXG4gICAgLy8gICBmaXJzdCBMYW1iZGEgaW52b2NhdGlvbiwgdGhlIHJvbGxiYWNrIGxlYXZlcyBpdCBhcyBhbiBvcnBoYW4sIGFuZFxuICAgIC8vICAgdGhlIG5leHQgQ0RLIHJ1biBmYWlscyB3aXRoIFwiUmVzb3VyY2UgLi4uIGFscmVhZHkgZXhpc3RzXCIgYmVjYXVzZVxuICAgIC8vICAgdGhlIGV4cGxpY2l0IG5hbWUgY29sbGlkZXMgd2l0aCB0aGUgb3JwaGFuLlxuICAgIC8vXG4gICAgLy8gICBGaXg6IHVzZSBgTG9nR3JvdXAuZnJvbUxvZ0dyb3VwTmFtZSgpYCB0byBhZG9wdC1vci1wYXNzLXRocm91Z2guXG4gICAgLy8gICBJZiB0aGUgZ3JvdXAgZXhpc3RzLCBDREsgcmVmZXJlbmNlcyBpdCB3aXRob3V0IHRyeWluZyB0byByZWNyZWF0ZS5cbiAgICAvLyAgIElmIGl0IGRvZXNuJ3QsIEFXUyBMYW1iZGEgYXV0by1jcmVhdGVzIGl0IG9uIGZpcnN0IGludm9jYXRpb24uXG4gICAgLy8gICBSZXRlbnRpb24gaXMgdGhlbiBzZXQgdmlhIGEgc2VwYXJhdGUgcmV0ZW50aW9uLXBvbGljeSBjdXN0b21cbiAgICAvLyAgIHJlc291cmNlIHdoaWNoIGlzIGlkZW1wb3RlbnQgKHNhZmUgdG8gYXBwbHkgdG8gZXhpc3RpbmcgZ3JvdXBzKS5cbiAgICBjb25zdCBsb2dHcm91cE5hbWUgPSBgL2F3cy9sYW1iZGEvJHt0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgncGx1Z2luOmxvb2t1cCcpLnJlcGxhY2UoLzovZywgJy0nKX1gO1xuICAgIGNvbnN0IGxvZ0dyb3VwID0gTG9nR3JvdXAuZnJvbUxvZ0dyb3VwTmFtZShcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgnbG9nOmdyb3VwJyksXG4gICAgICBsb2dHcm91cE5hbWUsXG4gICAgKTtcblxuICAgIHRoaXMuX3Byb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsIHRoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdyZXNvdXJjZTpwcm92aWRlcicpLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcixcbiAgICAgIGxvZ0dyb3VwLFxuICAgIH0pO1xuXG4gICAgbG9nLmRlYnVnKGBQbHVnaW5Mb29rdXAgaW5pdGlhbGl6ZWQgZm9yICR7cHJvcHMub3JnYW5pemF0aW9ufS8ke3Byb3BzLnByb2plY3R9YCk7XG4gIH1cblxuICAvKipcbiAgICogTG9va3MgdXAgYW5kIHJlc29sdmVzIHBsdWdpbiBjb25maWd1cmF0aW9uIHVzaW5nIGVpdGhlciBhIHNpbXBsZSBuYW1lIG9yIGZ1bGwgUGx1Z2luT3B0aW9ucyBvYmplY3RcbiAgICogRHVyaW5nIHN5bnRoZXNpcywgaWYgdGhlIHZhbHVlIGlzIHVucmVzb2x2ZWQgKHRva2VuKSwgcmV0dXJucyBmYWxsYmFjayBwbHVnaW5cbiAgICogRHVyaW5nIGRlcGxveW1lbnQsIGF0dGVtcHRzIHRvIHBhcnNlIHRoZSBhY3R1YWwgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGN1c3RvbSByZXNvdXJjZVxuICAgKiBAcGFyYW0gcGx1Z2luIC0gUGx1Z2luIG5hbWUgKHN0cmluZykgb3IgY29tcGxldGUgUGx1Z2luT3B0aW9ucyBjb25maWd1cmF0aW9uXG4gICAqIEByZXR1cm5zIFJlc29sdmVkIFBsdWdpbiBvYmplY3Qgb3IgZmFsbGJhY2sgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgcGx1Z2luKHBsdWdpbjogc3RyaW5nIHwgUGx1Z2luT3B0aW9ucyk6IFBsdWdpbiB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLm5vcm1hbGl6ZShwbHVnaW4pO1xuXG4gICAgLy8gUHJlLXJlc29sdmVkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHN5bnRoYCBmcm9tIHRoZSBwbGF0Zm9ybSBBUEkuXG4gICAgLy8gU2tpcCB0aGUgY3VzdG9tIHJlc291cmNlIGVudGlyZWx5IOKAlCB3ZSBhbHJlYWR5IGtub3cgdGhlIHBsdWdpbidzXG4gICAgLy8gbmFtZSwgdmVyc2lvbiwgY29tbWFuZHMsIGVudiwgZXRjLiBhdCBzeW50aCB0aW1lLCBzbyB0aGUgcmVzdWx0aW5nIENGTlxuICAgIC8vIHRlbXBsYXRlIGNhbiBzaGlwIHdpdGggdGhlIHJlYWwgQ29kZUJ1aWxkIGltYWdlIGJha2VkIGluLlxuICAgIGNvbnN0IGNhY2hlS2V5ID0gcHJvcHMuYWxpYXMgfHwgcHJvcHMubmFtZTtcbiAgICBjb25zdCBwcmVSZXNvbHZlZCA9IHRoaXMuX3Jlc29sdmVkUGx1Z2lucz8uW2NhY2hlS2V5XTtcbiAgICBpZiAocHJlUmVzb2x2ZWQpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgUGx1Z2luIFwiJHtwcm9wcy5uYW1lfVwiIHByZS1yZXNvbHZlZCAoYWxpYXM9JHtjYWNoZUtleX0pIOKAlCBza2lwcGluZyBjdXN0b20gcmVzb3VyY2VgKTtcbiAgICAgIHJldHVybiBwcmVSZXNvbHZlZDtcbiAgICB9XG5cbiAgICBjb25zdCBjdXN0b20gPSB0aGlzLmNyZWF0ZUN1c3RvbVJlc291cmNlKHByb3BzKTtcbiAgICBjb25zdCBlbmNvZGVkID0gY3VzdG9tLmdldEF0dFN0cmluZygnUmVzdWx0VmFsdWUnKTtcblxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoZW5jb2RlZCkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgUGx1Z2luIFwiJHtwcm9wcy5uYW1lfVwiIHZhbHVlIGlzIHVucmVzb2x2ZWQgKHRva2VuKSBkdXJpbmcgc3ludGhlc2lzIOKAlCB1c2luZyBmYWxsYmFjay4gVGhlIGFjdHVhbCBwbHVnaW4gd2lsbCBiZSByZXNvbHZlZCBhdCBkZXBsb3ltZW50IHRpbWUuYCk7XG4gICAgICByZXR1cm4gdGhpcy5mYWxsYmFjaygpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkID0gQnVmZmVyLmZyb20oZW5jb2RlZCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGVjb2RlZCk7XG5cbiAgICAgIGlmICghZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgIWRhdGEubmFtZSB8fCAhQXJyYXkuaXNBcnJheShkYXRhLmNvbW1hbmRzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcGx1Z2luIHJlc3BvbnNlOiBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkcyAobmFtZSwgY29tbWFuZHMpJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhIGFzIFBsdWdpbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNc2cgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJztcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIHBsdWdpbiBcIiR7cHJvcHMubmFtZX1cIiBkYXRhOiAke2Vycm9yTXNnfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBMYW1iZGEgZnVuY3Rpb24gdGhhdCBzZXJ2ZXMgYXMgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBjdXN0b20gcmVzb3VyY2UgcHJvdmlkZXIuXG4gICAqXG4gICAqIEpXVCB0b2tlbiBpcyBzdG9yZWQgaW4gYSBwcmUtZXhpc3RpbmcgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBhdFxuICAgKiBge1NFQ1JFVFNfUEFUSF9QUkVGSVh9L3tvcmdJZH0vcGxhdGZvcm1gLiBUaGUgTGFtYmRhIHJlc29sdmVzIHRoZVxuICAgKiBzZWNyZXQgYnkgbmFtZSBhdCBydW50aW1lIHVzaW5nIGBDb3JlQ29uc3RhbnRzLlNFQ1JFVFNfUEFUSF9QUkVGSVhgLlxuICAgKlxuICAgKiBDcmVhdGUgdGhlIHNlY3JldCBiZWZvcmUgZGVwbG95aW5nIHdpdGg6XG4gICAqICAgcGlwZWxpbmUtbWFuYWdlciBzdG9yZS10b2tlbiAtLWRheXMgMzAgLS1yZWdpb24gPHJlZ2lvbj5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlTGFtYmRhRnVuY3Rpb24oKTogTm9kZWpzRnVuY3Rpb24ge1xuICAgIGlmICghdGhpcy5fb3JnSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignb3JnSWQgaXMgcmVxdWlyZWQgZm9yIFBsdWdpbkxvb2t1cCDigJQgbmVlZGVkIHRvIHJlc29sdmUgdGhlIHBlci1vcmcgcGxhdGZvcm0gc2VjcmV0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHNlY3JldE5hbWUgPSBDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgodGhpcy5fb3JnSWQsICdwbGF0Zm9ybScpO1xuXG4gICAgY29uc3QgZm4gPSBuZXcgTm9kZWpzRnVuY3Rpb24odGhpcywgdGhpcy5fdW5pcXVlSWQuZ2VuZXJhdGUoJ29uZXZlbnQ6aGFuZGxlcicpLCB7XG4gICAgICBydW50aW1lOiB0aGlzLl9ydW50aW1lLFxuICAgICAgdGltZW91dDogdGhpcy5fdGltZW91dCxcbiAgICAgIG1lbW9yeVNpemU6IHRoaXMuX21lbW9yeVNpemUsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICBlbnRyeTogam9pbihfX2Rpcm5hbWUsICcvLi4vaGFuZGxlcnMvcGx1Z2luLWxvb2t1cC1oYW5kbGVyLmpzJyksXG4gICAgICBkZXBzTG9ja0ZpbGVQYXRoOiBqb2luKF9fZGlybmFtZSwgJy8uLi9oYW5kbGVycy9wbnBtLWxvY2sueWFtbCcpLFxuICAgICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9uczogdGhpcy5fcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucyxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFBMQVRGT1JNX1NFQ1JFVF9OQU1FOiBzZWNyZXROYW1lLFxuICAgICAgICAvLyBBbGxvdyBzZWxmLXNpZ25lZCBjZXJ0cyB3aGVuIHBsYXRmb3JtIHVzZXMgSFRUUFMgd2l0aG91dCBhIENBLXNpZ25lZCBjZXJ0aWZpY2F0ZVxuICAgICAgICAuLi4ocHJvY2Vzcy5lbnYuTk9ERV9UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRCA9PT0gJzAnICYmIHtcbiAgICAgICAgICBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEOiAnMCcsXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgIG1pbmlmeTogdHJ1ZSxcbiAgICAgICAgc291cmNlTWFwOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiAnZXMyMDIyJyxcbiAgICAgICAgZXh0ZXJuYWxNb2R1bGVzOiBbJ0Bhd3Mtc2RrLyonXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCB0aGUgTGFtYmRhIHBlcm1pc3Npb24gdG8gcmVhZCB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBzZWNyZXQuXG4gICAgLy8gVGhlIHdpbGRjYXJkIHN1ZmZpeCBoYW5kbGVzIHRoZSA2LWNoYXIgcmFuZG9tIElEIHRoYXQgU2VjcmV0cyBNYW5hZ2VyIGFwcGVuZHMuXG4gICAgZm4uYWRkVG9Sb2xlUG9saWN5KG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ3NlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlJ10sXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjoqOio6c2VjcmV0OiR7c2VjcmV0TmFtZX0tKmBdLFxuICAgIH0pKTtcblxuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgZGVmYXVsdCBwbHVnaW4gZmlsdGVyLlxuICAgKiBBY2Nlc3MgY29udHJvbCAob3JnSWQgc2NvcGluZywgcHVibGljL3ByaXZhdGUgdmlzaWJpbGl0eSkgaXMgaGFuZGxlZCBieVxuICAgKiB0aGUgcGxhdGZvcm0ncyBhY2Nlc3MgY29udHJvbCBxdWVyeSBidWlsZGVyIGJhc2VkIG9uIHRoZSBKV1QncyBvcmdhbml6YXRpb25JZC5cbiAgICovXG4gIHByaXZhdGUgZGVmYXVsdEZpbHRlcihuYW1lOiBzdHJpbmcpOiBQbHVnaW5GaWx0ZXIge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBpc0RlZmF1bHQ6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplKHBsdWdpbjogc3RyaW5nIHwgUGx1Z2luT3B0aW9ucyk6IFBsdWdpbk9wdGlvbnMge1xuICAgIGlmICh0eXBlb2YgcGx1Z2luID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogcGx1Z2luLFxuICAgICAgICBmaWx0ZXI6IHRoaXMuZGVmYXVsdEZpbHRlcihwbHVnaW4pLFxuICAgICAgICBhbGlhczogYCR7cGx1Z2lufS1hbGlhc2AsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBwbHVnaW4ubmFtZSxcbiAgICAgIGFsaWFzOiBwbHVnaW4uYWxpYXMgPz8gYCR7cGx1Z2luLm5hbWV9LWFsaWFzYCxcbiAgICAgIGZpbHRlcjogcGx1Z2luLmZpbHRlciA/PyB0aGlzLmRlZmF1bHRGaWx0ZXIocGx1Z2luLm5hbWUpLFxuICAgICAgbWV0YWRhdGE6IHBsdWdpbi5tZXRhZGF0YSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDdXN0b21SZXNvdXJjZSBpbnN0YW5jZSB0aGF0IHRyaWdnZXJzIHBsdWdpbiBsb29rdXAgZHVyaW5nIGRlcGxveW1lbnRcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlQ3VzdG9tUmVzb3VyY2UocHJvcHM6IFBsdWdpbk9wdGlvbnMpOiBDdXN0b21SZXNvdXJjZSB7XG4gICAgY29uc3QgcmVzb3VyY2VJZCA9IHRoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKHByb3BzLmFsaWFzIHx8IHByb3BzLm5hbWUpO1xuXG4gICAgcmV0dXJuIG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCByZXNvdXJjZUlkLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHRoaXMuX3Byb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHJlc291cmNlVHlwZTogJ0N1c3RvbTo6UGx1Z2luTG9va3VwJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYmFzZVVSTDogdGhpcy5fcGxhdGZvcm1VcmwsXG4gICAgICAgIHBsdWdpbkZpbHRlcjogcHJvcHMuZmlsdGVyLFxuICAgICAgfSBhcyBJbnB1dFByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEJhc2UgcGx1Z2luIHNoYXBlIHdpdGggbm8tb3AgZGVmYXVsdHMgZm9yIGZpZWxkcyBDREsgZG9lc24ndCB1c2UuICovXG4gIHByaXZhdGUgc3RhdGljIGJhc2VQbHVnaW4oKTogUGx1Z2luIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcsXG4gICAgICBvcmdJZDogJ3N5c3RlbScsXG4gICAgICBjcmVhdGVkQnk6ICdzeXN0ZW0nLFxuICAgICAgY3JlYXRlZEF0OiBub3csXG4gICAgICB1cGRhdGVkQnk6ICdzeXN0ZW0nLFxuICAgICAgdXBkYXRlZEF0OiBub3csXG4gICAgICBuYW1lOiAnZmFsbGJhY2snLFxuICAgICAgZGVzY3JpcHRpb246IG51bGwsXG4gICAgICBrZXl3b3JkczogW10sXG4gICAgICBjYXRlZ29yeTogJ3Vua25vd24nLFxuICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgIHBsdWdpblR5cGU6ICdDb2RlQnVpbGRTdGVwJyxcbiAgICAgIGNvbXB1dGVUeXBlOiAnU01BTEwnLFxuICAgICAgdGltZW91dDogbnVsbCxcbiAgICAgIGZhaWx1cmVCZWhhdmlvcjogJ2ZhaWwnLFxuICAgICAgc2VjcmV0czogW10sXG4gICAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiAnY2RrLm91dCcsXG4gICAgICBlbnY6IHt9LFxuICAgICAgYnVpbGRBcmdzOiB7fSxcbiAgICAgIGluc3RhbGxDb21tYW5kczogW10sXG4gICAgICBjb21tYW5kczogW10sXG4gICAgICBkb2NrZXJmaWxlOiBudWxsLFxuICAgICAgYnVpbGRUeXBlOiAnbWV0YWRhdGFfb25seScsXG4gICAgICBhY2Nlc3NNb2RpZmllcjogJ3B1YmxpYycsXG4gICAgICBpc0RlZmF1bHQ6IGZhbHNlLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBkZWxldGVkQXQ6IG51bGwsXG4gICAgICBkZWxldGVkQnk6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBGYWxsYmFjayBmb3IgdW5yZXNvbHZlZCBwbHVnaW4gbG9va3VwIHRva2VucyBkdXJpbmcgc3ludGhlc2lzLiAqL1xuICBwcml2YXRlIGZhbGxiYWNrKCk6IFBsdWdpbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLlBsdWdpbkxvb2t1cC5iYXNlUGx1Z2luKCksXG4gICAgICBjb21tYW5kczogWydlY2hvIFwiRkFMTEJBQ0s6IFBsdWdpbiBsb29rdXAgdW5yZXNvbHZlZCDigJQgd2lsbCBiZSByZXNvbHZlZCBhdCBkZXBsb3ltZW50IHRpbWVcIiddLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3ludGggcGx1Z2luIHdpdGggcGlwZWxpbmUtbWFuYWdlciBjb21tYW5kcy4gQ29sZC1zdGFydCBmYWxsYmFjayBmb3IgdGhlXG4gICAqIHN5bnRoIHN0ZXAgd2hlbiBwcmUtcmVzb2x1dGlvbiBieSBgcGlwZWxpbmUtbWFuYWdlciBzeW50aC9kZXBsb3lgIGRpZG4ndFxuICAgKiBwb3B1bGF0ZSBgcmVzb2x2ZWRQbHVnaW5zYCBmb3IgdGhlIHN5bnRoIHBsdWdpbi4gUnVucyBvbiBgc3RhbmRhcmQ6Ny4wYFxuICAgKiB2aWEgdGhlIGRlZmF1bHQgQ29kZUJ1aWxkIGltYWdlIGFuZCBzZWxmLWJvb3RzdHJhcHMgdGhlIHJlYWwgc3ludGggdmlhXG4gICAqIGBwaXBlbGluZS1tYW5hZ2VyIHN5bnRoIC0taWQgJHtQSVBFTElORV9JRH1gLlxuICAgKi9cbiAgcHVibGljIGZhbGxiYWNrU3ludGgoKTogUGx1Z2luIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uUGx1Z2luTG9va3VwLmJhc2VQbHVnaW4oKSxcbiAgICAgIG5hbWU6ICdjZGstc3ludGgnLFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogJ2Nkay5vdXQnLFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgJ3BpcGVsaW5lLW1hbmFnZXIgc3ludGggLS1pZCAke1BJUEVMSU5FX0lEfSAtLXN0b3JlLXRva2VucyAtLXF1aWV0IC0tbm8tbm90aWNlcyAtLW5vLXZlcmlmeS1zc2wnLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -36,7 +36,7 @@ function resolvePluginTemplates(plugin, pipelineScope) {
36
36
  const clone = structuredClone(plugin);
37
37
  const scope = {
38
38
  ...pipelineScope,
39
- plugin: { name: plugin.name, version: plugin.version, imageTag: plugin.imageTag },
39
+ plugin: { name: plugin.name, version: plugin.version },
40
40
  env: plugin.env ?? {},
41
41
  };
42
42
  const { errors } = (0, index_1.resolveTemplates)(clone, scope, isPluginTemplatableField, 'plugin');
@@ -49,4 +49,4 @@ function resolvePluginTemplates(plugin, pipelineScope) {
49
49
  }
50
50
  return clone;
51
51
  }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbXBsYXRlL3BsdWdpbi1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7QUFxQnRDLDREQUlDO0FBT0Qsd0RBdUJDO0FBcERELG1DQUEyQztBQUUzQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRztJQUN6QixhQUFhO0lBQ2IsVUFBVSxFQUFFLFdBQVc7SUFDdkIsaUJBQWlCLEVBQUUsV0FBVztJQUM5QixLQUFLLEVBQUUseUJBQXlCO0lBQ2hDLFdBQVcsRUFBRSx5QkFBeUI7Q0FDOUIsQ0FBQztBQUVYLFNBQWdCLHdCQUF3QixDQUFDLEtBQWE7SUFDcEQsb0ZBQW9GO0lBQ3BGLDZEQUE2RDtJQUM3RCxPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLHNCQUFzQixDQUNwQyxNQUFjLEVBQ2QsYUFBc0M7SUFFdEMsa0VBQWtFO0lBQ2xFLDJFQUEyRTtJQUMzRSxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFxQyxDQUFDO0lBRTFFLE1BQU0sS0FBSyxHQUFHO1FBQ1osR0FBRyxhQUFhO1FBQ2hCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO1FBQ2pGLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxJQUFJLEVBQUU7S0FDdEIsQ0FBQztJQUVGLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFBLHdCQUFnQixFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEYsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RCLDJFQUEyRTtRQUMzRSwwRUFBMEU7UUFDMUUsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBRSxDQUFDO1FBQ3JCLE1BQU0sR0FBRyxHQUFHLHlDQUF5QyxNQUFNLENBQUMsSUFBSSxlQUFlLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hHLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHsgcmVzb2x2ZVRlbXBsYXRlcyB9IGZyb20gJy4vaW5kZXgnO1xuXG4vKipcbiAqIEZpZWxkcyBpbnNpZGUgYSBQbHVnaW4gcmVjb3JkIHRoYXQgYWNjZXB0IGB7eyAuLi4gfX1gIHRlbXBsYXRlcy5cbiAqXG4gKiBQdXJlLXN0cmluZyBsZWF2ZXMgb25seS4gYG5hbWVgLCBgdmVyc2lvbmAsIGBwbHVnaW5UeXBlYCwgYGNvbXB1dGVUeXBlYCxcbiAqIGB0aW1lb3V0YCwgYHNlY3JldHNgLCBgZmFpbHVyZUJlaGF2aW9yYCwgYHJlcXVpcmVkTWV0YWRhdGFgLCBgcmVxdWlyZWRWYXJzYFxuICogc3RheSBsaXRlcmFsLiBgbWV0YWRhdGEuKmAgaXMgZXhjbHVkZWQgYmVjYXVzZSBDREstbWV0YWRhdGEgdmFsdWVzIGFyZVxuICogc3RydWN0dXJhbCwgbm90IHVzZXItaW50ZXJwb2xhdGVkLlxuICovXG5jb25zdCBURU1QTEFUQUJMRV9GSUVMRFMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdjb21tYW5kcycsIC8vIHN0cmluZ1tdXG4gICdpbnN0YWxsQ29tbWFuZHMnLCAvLyBzdHJpbmdbXVxuICAnZW52JywgLy8gUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAnYnVpbGRBcmdzJywgLy8gUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGx1Z2luVGVtcGxhdGFibGVGaWVsZChmaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIGBjb21tYW5kc2AgLyBgaW5zdGFsbENvbW1hbmRzYCBhcmUgYXJyYXlzIG9mIHN0cmluZ3Mg4oaSIGVudHJpZXMgbGlrZSAnY29tbWFuZHNbMF0nXG4gIC8vIGBlbnZgIC8gYGJ1aWxkQXJnc2AgYXJlIG9iamVjdHMg4oaSIGVudHJpZXMgbGlrZSAnZW52LlNUQUdFJ1xuICByZXR1cm4gVEVNUExBVEFCTEVfRklFTERTLnNvbWUoZiA9PiBmaWVsZCA9PT0gZiB8fCBmaWVsZC5zdGFydHNXaXRoKGAke2Z9W2ApIHx8IGZpZWxkLnN0YXJ0c1dpdGgoYCR7Zn0uYCkpO1xufVxuXG4vKipcbiAqIFJldHVybiBhIHNoYWxsb3cgY2xvbmUgb2YgYHBsdWdpbmAgd2l0aCBhbGwgYHt7IC4uLiB9fWAgdGVtcGxhdGVzXG4gKiByZXNvbHZlZCBhZ2FpbnN0IHRoZSBnaXZlbiBwaXBlbGluZSBzY29wZS4gQ2FsbGVyIG11c3QgcHJlLXBvcHVsYXRlXG4gKiBgcGlwZWxpbmVTY29wZWAgd2l0aCBgeyBwaXBlbGluZSwgcGx1Z2luLCBlbnYgfWAga2V5cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQbHVnaW5UZW1wbGF0ZXMoXG4gIHBsdWdpbjogUGx1Z2luLFxuICBwaXBlbGluZVNjb3BlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFBsdWdpbiB7XG4gIC8vIERlZXAgY2xvbmUgc28gbXV0YXRpb25zIGRvbid0IGxlYWsgYmFjayB0byB0aGUgY2FsbGVyJ3MgUGx1Z2luLlxuICAvLyBTdHJ1Y3R1cmFsIGZpZWxkcyB3ZSBjYXJlIGFib3V0IGFyZSBwbGFpbiBKU09OOyBzdHJ1Y3R1cmVkQ2xvbmUgaXMgc2FmZS5cbiAgY29uc3QgY2xvbmUgPSBzdHJ1Y3R1cmVkQ2xvbmUocGx1Z2luKSBhcyBQbHVnaW4gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBjb25zdCBzY29wZSA9IHtcbiAgICAuLi5waXBlbGluZVNjb3BlLFxuICAgIHBsdWdpbjogeyBuYW1lOiBwbHVnaW4ubmFtZSwgdmVyc2lvbjogcGx1Z2luLnZlcnNpb24sIGltYWdlVGFnOiBwbHVnaW4uaW1hZ2VUYWcgfSxcbiAgICBlbnY6IHBsdWdpbi5lbnYgPz8ge30sXG4gIH07XG5cbiAgY29uc3QgeyBlcnJvcnMgfSA9IHJlc29sdmVUZW1wbGF0ZXMoY2xvbmUsIHNjb3BlLCBpc1BsdWdpblRlbXBsYXRhYmxlRmllbGQsICdwbHVnaW4nKTtcbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gRmlyc3QgZXJyb3Igd2lucyDigJQgcmVzb2x2ZXIgZXJyb3JzIHNob3VsZCBuZXZlciBiZSBiYXRjaGVkIGF0IHN5bnRoIHRpbWVcbiAgICAvLyBiZWNhdXNlIGEgYnJva2VuIHRlbXBsYXRlIGlzIGEgcHJvZ3JhbW1lciBlcnJvciwgbm90IGEgdmFsaWRhdGlvbiBzdGVwLlxuICAgIGNvbnN0IGUgPSBlcnJvcnNbMF0hO1xuICAgIGNvbnN0IG1zZyA9IGBUZW1wbGF0ZSByZXNvbHV0aW9uIGZhaWxlZCBpbiBwbHVnaW4gXCIke3BsdWdpbi5uYW1lfVwiIGF0IGZpZWxkICcke2UuZmllbGR9JzogJHtlLm1lc3NhZ2V9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgfVxuICByZXR1cm4gY2xvbmU7XG59XG4iXX0=
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbXBsYXRlL3BsdWdpbi1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7QUFxQnRDLDREQUlDO0FBT0Qsd0RBdUJDO0FBcERELG1DQUEyQztBQUUzQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRztJQUN6QixhQUFhO0lBQ2IsVUFBVSxFQUFFLFdBQVc7SUFDdkIsaUJBQWlCLEVBQUUsV0FBVztJQUM5QixLQUFLLEVBQUUseUJBQXlCO0lBQ2hDLFdBQVcsRUFBRSx5QkFBeUI7Q0FDOUIsQ0FBQztBQUVYLFNBQWdCLHdCQUF3QixDQUFDLEtBQWE7SUFDcEQsb0ZBQW9GO0lBQ3BGLDZEQUE2RDtJQUM3RCxPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLHNCQUFzQixDQUNwQyxNQUFjLEVBQ2QsYUFBc0M7SUFFdEMsa0VBQWtFO0lBQ2xFLDJFQUEyRTtJQUMzRSxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFxQyxDQUFDO0lBRTFFLE1BQU0sS0FBSyxHQUFHO1FBQ1osR0FBRyxhQUFhO1FBQ2hCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ3RELEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxJQUFJLEVBQUU7S0FDdEIsQ0FBQztJQUVGLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFBLHdCQUFnQixFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEYsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RCLDJFQUEyRTtRQUMzRSwwRUFBMEU7UUFDMUUsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBRSxDQUFDO1FBQ3JCLE1BQU0sR0FBRyxHQUFHLHlDQUF5QyxNQUFNLENBQUMsSUFBSSxlQUFlLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hHLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHsgcmVzb2x2ZVRlbXBsYXRlcyB9IGZyb20gJy4vaW5kZXgnO1xuXG4vKipcbiAqIEZpZWxkcyBpbnNpZGUgYSBQbHVnaW4gcmVjb3JkIHRoYXQgYWNjZXB0IGB7eyAuLi4gfX1gIHRlbXBsYXRlcy5cbiAqXG4gKiBQdXJlLXN0cmluZyBsZWF2ZXMgb25seS4gYG5hbWVgLCBgdmVyc2lvbmAsIGBwbHVnaW5UeXBlYCwgYGNvbXB1dGVUeXBlYCxcbiAqIGB0aW1lb3V0YCwgYHNlY3JldHNgLCBgZmFpbHVyZUJlaGF2aW9yYCwgYHJlcXVpcmVkTWV0YWRhdGFgLCBgcmVxdWlyZWRWYXJzYFxuICogc3RheSBsaXRlcmFsLiBgbWV0YWRhdGEuKmAgaXMgZXhjbHVkZWQgYmVjYXVzZSBDREstbWV0YWRhdGEgdmFsdWVzIGFyZVxuICogc3RydWN0dXJhbCwgbm90IHVzZXItaW50ZXJwb2xhdGVkLlxuICovXG5jb25zdCBURU1QTEFUQUJMRV9GSUVMRFMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdjb21tYW5kcycsIC8vIHN0cmluZ1tdXG4gICdpbnN0YWxsQ29tbWFuZHMnLCAvLyBzdHJpbmdbXVxuICAnZW52JywgLy8gUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAnYnVpbGRBcmdzJywgLy8gUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGx1Z2luVGVtcGxhdGFibGVGaWVsZChmaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIGBjb21tYW5kc2AgLyBgaW5zdGFsbENvbW1hbmRzYCBhcmUgYXJyYXlzIG9mIHN0cmluZ3Mg4oaSIGVudHJpZXMgbGlrZSAnY29tbWFuZHNbMF0nXG4gIC8vIGBlbnZgIC8gYGJ1aWxkQXJnc2AgYXJlIG9iamVjdHMg4oaSIGVudHJpZXMgbGlrZSAnZW52LlNUQUdFJ1xuICByZXR1cm4gVEVNUExBVEFCTEVfRklFTERTLnNvbWUoZiA9PiBmaWVsZCA9PT0gZiB8fCBmaWVsZC5zdGFydHNXaXRoKGAke2Z9W2ApIHx8IGZpZWxkLnN0YXJ0c1dpdGgoYCR7Zn0uYCkpO1xufVxuXG4vKipcbiAqIFJldHVybiBhIHNoYWxsb3cgY2xvbmUgb2YgYHBsdWdpbmAgd2l0aCBhbGwgYHt7IC4uLiB9fWAgdGVtcGxhdGVzXG4gKiByZXNvbHZlZCBhZ2FpbnN0IHRoZSBnaXZlbiBwaXBlbGluZSBzY29wZS4gQ2FsbGVyIG11c3QgcHJlLXBvcHVsYXRlXG4gKiBgcGlwZWxpbmVTY29wZWAgd2l0aCBgeyBwaXBlbGluZSwgcGx1Z2luLCBlbnYgfWAga2V5cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQbHVnaW5UZW1wbGF0ZXMoXG4gIHBsdWdpbjogUGx1Z2luLFxuICBwaXBlbGluZVNjb3BlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFBsdWdpbiB7XG4gIC8vIERlZXAgY2xvbmUgc28gbXV0YXRpb25zIGRvbid0IGxlYWsgYmFjayB0byB0aGUgY2FsbGVyJ3MgUGx1Z2luLlxuICAvLyBTdHJ1Y3R1cmFsIGZpZWxkcyB3ZSBjYXJlIGFib3V0IGFyZSBwbGFpbiBKU09OOyBzdHJ1Y3R1cmVkQ2xvbmUgaXMgc2FmZS5cbiAgY29uc3QgY2xvbmUgPSBzdHJ1Y3R1cmVkQ2xvbmUocGx1Z2luKSBhcyBQbHVnaW4gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBjb25zdCBzY29wZSA9IHtcbiAgICAuLi5waXBlbGluZVNjb3BlLFxuICAgIHBsdWdpbjogeyBuYW1lOiBwbHVnaW4ubmFtZSwgdmVyc2lvbjogcGx1Z2luLnZlcnNpb24gfSxcbiAgICBlbnY6IHBsdWdpbi5lbnYgPz8ge30sXG4gIH07XG5cbiAgY29uc3QgeyBlcnJvcnMgfSA9IHJlc29sdmVUZW1wbGF0ZXMoY2xvbmUsIHNjb3BlLCBpc1BsdWdpblRlbXBsYXRhYmxlRmllbGQsICdwbHVnaW4nKTtcbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gRmlyc3QgZXJyb3Igd2lucyDigJQgcmVzb2x2ZXIgZXJyb3JzIHNob3VsZCBuZXZlciBiZSBiYXRjaGVkIGF0IHN5bnRoIHRpbWVcbiAgICAvLyBiZWNhdXNlIGEgYnJva2VuIHRlbXBsYXRlIGlzIGEgcHJvZ3JhbW1lciBlcnJvciwgbm90IGEgdmFsaWRhdGlvbiBzdGVwLlxuICAgIGNvbnN0IGUgPSBlcnJvcnNbMF0hO1xuICAgIGNvbnN0IG1zZyA9IGBUZW1wbGF0ZSByZXNvbHV0aW9uIGZhaWxlZCBpbiBwbHVnaW4gXCIke3BsdWdpbi5uYW1lfVwiIGF0IGZpZWxkICcke2UuZmllbGR9JzogJHtlLm1lc3NhZ2V9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgfVxuICByZXR1cm4gY2xvbmU7XG59XG4iXX0=
package/package.json CHANGED
@@ -25,13 +25,13 @@
25
25
  "typescript": "5.9.3"
26
26
  },
27
27
  "dependencies": {
28
- "@pipeline-builder/api-core": "3.4.8",
29
- "@pipeline-builder/pipeline-data": "3.4.8",
28
+ "@pipeline-builder/api-core": "3.4.10",
30
29
  "aws-cdk-lib": "2.251.0",
31
30
  "axios": "1.13.5",
32
31
  "constructs": "10.5.1",
33
32
  "jsonwebtoken": "9.0.3",
34
- "uuid": "13.0.0"
33
+ "uuid": "13.0.0",
34
+ "@pipeline-builder/pipeline-data": "3.4.11"
35
35
  },
36
36
  "keywords": [
37
37
  "aws",
@@ -75,7 +75,7 @@
75
75
  "access": "public",
76
76
  "registry": "https://registry.npmjs.org/"
77
77
  },
78
- "version": "3.4.9",
78
+ "version": "3.4.11",
79
79
  "bugs": {
80
80
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
81
81
  },