@pipeline-builder/pipeline-core 4.1.13 → 4.1.15
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.
- package/lib/config/config-types.d.ts +11 -0
- package/lib/config/config-types.js +1 -1
- package/lib/config/infrastructure-config.d.ts +2 -0
- package/lib/config/infrastructure-config.js +4 -1
- package/lib/config/server-config.js +3 -1
- package/lib/core/artifact-manager.d.ts +17 -0
- package/lib/core/artifact-manager.js +17 -1
- package/lib/core/metadata-builder.d.ts +7 -0
- package/lib/core/metadata-builder.js +8 -2
- package/lib/core/pipeline-helpers.d.ts +7 -2
- package/lib/core/pipeline-helpers.js +32 -8
- package/lib/pipeline/pipeline-builder.js +12 -7
- package/lib/pipeline/plugin-lookup.js +16 -1
- package/lib/pipeline/stage-builder.d.ts +1 -1
- package/lib/pipeline/stage-builder.js +16 -5
- package/lib/template/plugin-resolver.js +19 -5
- package/lib/template/tokenizer.d.ts +2 -1
- package/lib/template/tokenizer.js +18 -3
- package/package.json +3 -3
|
@@ -17,9 +17,9 @@ import { SourceBuilder } from './source-builder.js';
|
|
|
17
17
|
import { StageBuilder } from './stage-builder.js';
|
|
18
18
|
import { Config, CoreConstants } from '../config/app-config.js';
|
|
19
19
|
import { lambdaArchitecture, lambdaRuntime, lambdaTimeout } from '../config/aws-config-cdk.js';
|
|
20
|
-
import { ArtifactManager } from '../core/artifact-manager.js';
|
|
20
|
+
import { ArtifactManager, pluginArtifactAlias } from '../core/artifact-manager.js';
|
|
21
21
|
import { UniqueId } from '../core/id-generator.js';
|
|
22
|
-
import { asInt, metadataForCodePipeline, networkConfigFromMetadata, parsePipelineVariables, roleConfigFromMetadata, securityGroupConfigFromMetadata, } from '../core/metadata-builder.js';
|
|
22
|
+
import { asInt, isTrue, metadataForCodePipeline, networkConfigFromMetadata, parsePipelineVariables, roleConfigFromMetadata, securityGroupConfigFromMetadata, } from '../core/metadata-builder.js';
|
|
23
23
|
import { resolveNetwork, networkConfigFromEnv } from '../core/network.js';
|
|
24
24
|
import { createCodeBuildStep, getComputeType, resolveDefaultBuildImage } from '../core/pipeline-helpers.js';
|
|
25
25
|
import { MetadataKeys, TriggerType } from '../core/pipeline-types.js';
|
|
@@ -223,7 +223,6 @@ export class PipelineBuilder extends Construct {
|
|
|
223
223
|
: pluginLookup.bootstrap();
|
|
224
224
|
const defaultComputeType = getComputeType(awsConfig.codeBuild.computeType);
|
|
225
225
|
const artifactManager = new ArtifactManager();
|
|
226
|
-
const synthAlias = this.config.plugin.alias ?? this.config.plugin.name;
|
|
227
226
|
// Scope exposed to plugin-spec templates as `pipeline.*`. Sourced from the
|
|
228
227
|
// config so the synth step, every stage step, and the source token all
|
|
229
228
|
// resolve against the same snapshot (see PipelineConfiguration.getPipelineScope).
|
|
@@ -241,7 +240,10 @@ export class PipelineBuilder extends Construct {
|
|
|
241
240
|
artifactManager,
|
|
242
241
|
stageName: 'no-stage',
|
|
243
242
|
stageAlias: 'no-stage-alias',
|
|
244
|
-
|
|
243
|
+
// The canonical key segment. `${alias ?? name}-alias` suffixed an
|
|
244
|
+
// EXPLICIT alias too (`my-synth` → `my-synth-alias`), so a stage that
|
|
245
|
+
// picked the synth output in the UI asked for a key never registered.
|
|
246
|
+
pluginAlias: pluginArtifactAlias(this.config.plugin),
|
|
245
247
|
orgId: props.orgId,
|
|
246
248
|
pipelineScope,
|
|
247
249
|
});
|
|
@@ -356,7 +358,9 @@ export class PipelineBuilder extends Construct {
|
|
|
356
358
|
});
|
|
357
359
|
}
|
|
358
360
|
// ── Execution Event Tracking (forward pipeline state changes to SNS) ──
|
|
359
|
-
|
|
361
|
+
// `isTrue`, not truthiness: `"false"` is a truthy string, so the metadata
|
|
362
|
+
// `"aws:cdk:operations:executionevents": "false"` used to CREATE the rule.
|
|
363
|
+
if (isTrue(meta[MetadataKeys.ENABLE_EXECUTION_EVENTS]) && typeof notificationTopicArn === 'string') {
|
|
360
364
|
new events.Rule(this, 'ExecutionEventRule', {
|
|
361
365
|
eventPattern: {
|
|
362
366
|
source: ['aws.codepipeline'],
|
|
@@ -367,7 +371,8 @@ export class PipelineBuilder extends Construct {
|
|
|
367
371
|
});
|
|
368
372
|
}
|
|
369
373
|
// ── Pipeline Metrics & Alarms ──
|
|
370
|
-
|
|
374
|
+
// Same trap: `"aws:cdk:operations:metrics": "false"` created the alarm.
|
|
375
|
+
const enableMetrics = isTrue(this.config.metadata.merged[MetadataKeys.ENABLE_METRICS]);
|
|
371
376
|
if (enableMetrics) {
|
|
372
377
|
new cloudwatch.Alarm(this, 'PipelineFailureAlarm', {
|
|
373
378
|
metric: new cloudwatch.Metric({
|
|
@@ -474,4 +479,4 @@ export class PipelineBuilder extends Construct {
|
|
|
474
479
|
};
|
|
475
480
|
}
|
|
476
481
|
}
|
|
477
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9waXBlbGluZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEtBQUssVUFBVSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEcsT0FBTyxLQUFLLE1BQU0sTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssT0FBTyxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUM7QUFDM0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6QyxPQUFPLEtBQUssR0FBRyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQXlCLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxhQUFh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QUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDekQsR0FBRyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO1lBQ2xGLHNFQUFzRTtZQUN0RSx1REFBdUQ7WUFDdkQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLEtBQUssR0FBRyxJQUFJO2dCQUN0RCw0QkFBNEIsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7YUFDN0MsQ0FBQztTQUNILENBQUM7UUFFRixNQUFNLGNBQWMsR0FBRztZQUNyQixHQUFHLENBQUMsWUFBWSxFQUFFLGNBQWMsSUFBSSxFQUFFLENBQUM7WUFDdkMsR0FBRyxDQUFDLHdCQUF3QixJQUFJLEVBQUUsQ0FBQztTQUNwQyxDQUFDO1FBRUYsT0FBTztZQUNMLEdBQUcsQ0FBQyxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLEdBQUcsRUFBRSxlQUFlLEVBQUUsWUFBWSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzdGLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDO1lBQ3BELHFFQUFxRTtZQUNyRSx3REFBd0Q7WUFDeEQsdUVBQXVFO1lBQ3ZFLG1FQUFtRTtZQUNuRSwrREFBK0Q7WUFDL0QsaUVBQWlFO1lBQ2pFLGdCQUFnQixFQUFFO2dCQUNoQixVQUFVLEVBQUUsd0JBQXdCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztnQkFDakQsb0JBQW9CLEVBQUUsZUFBZTthQUN0QztTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhJztcbmltcG9ydCB7IER1cmF0aW9uLCBSZW1vdmFsUG9saWN5LCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgY2xvdWR3YXRjaCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cywgUGlwZWxpbmVUeXBlLCBWYXJpYWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUnO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHNucyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc25zJztcbmltcG9ydCB7IENvZGVQaXBlbGluZSwgdHlwZSBDb2RlQnVpbGRPcHRpb25zIH0gZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUGlwZWxpbmVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9waXBlbGluZS1jb25maWd1cmF0aW9uLmpzJztcbmltcG9ydCB7IFBsdWdpbkxvb2t1cCB9IGZyb20gJy4vcGx1Z2luLWxvb2t1cC5qcyc7XG5pbXBvcnQgeyBTb3VyY2VCdWlsZGVyIH0gZnJvbSAnLi9zb3VyY2UtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBTdGFnZUJ1aWxkZXIgfSBmcm9tICcuL3N0YWdlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZU9wdGlvbnMsIFN5bnRoT3B0aW9ucyB9IGZyb20gJy4vc3RlcC10eXBlcy5qcyc7XG5pbXBvcnQgeyBDb25maWcsIENvcmVDb25zdGFudHMgfSBmcm9tICcuLi9jb25maWcvYXBwLWNvbmZpZy5qcyc7XG5pbXBvcnQgeyBsYW1iZGFBcmNoaXRlY3R1cmUsIGxhbWJkYVJ1bnRpbWUsIGxhbWJkYVRpbWVvdXQgfSBmcm9tICcuLi9jb25maWcvYXdzLWNvbmZpZy1jZGsuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWdpc3RyeUNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy9jb25maWctdHlwZXMuanMnO1xuaW1wb3J0IHsgQXJ0aWZhY3RNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZS9hcnRpZmFjdC1tYW5hZ2VyLmpzJztcbmltcG9ydCB7IFVuaXF1ZUlkIH0gZnJvbSAnLi4vY29yZS9pZC1nZW5lcmF0b3IuanMnO1xuaW1wb3J0IHtcbiAgYXNJbnQsXG4gIG1ldGFkYXRhRm9yQ29kZVBpcGVsaW5lLFxuICBuZXR3b3JrQ29uZmlnRnJvbU1ldGFkYXRhLFxuICBwYXJzZVBpcGVsaW5lVmFyaWFibGVzLFxuICByb2xlQ29uZmlnRnJvbU1ldGFkYXRhLFxuICBzZWN1cml0eUdyb3VwQ29uZmlnRnJvbU1ldGFkYXRhLFxufSBmcm9tICcuLi9jb3JlL21ldGFkYXRhLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBDb2RlQnVpbGREZWZhdWx0cyB9IGZyb20gJy4uL2NvcmUvbmV0d29yay10eXBlcy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlTmV0d29yaywgbmV0d29ya0NvbmZpZ0Zyb21FbnYgfSBmcm9tICcuLi9jb3JlL25ldHdvcmsuanMnO1xuaW1wb3J0IHsgY3JlYXRlQ29kZUJ1aWxkU3RlcCwgZ2V0Q29tcHV0ZVR5cGUsIHJlc29sdmVEZWZhdWx0QnVpbGRJbWFnZSB9IGZyb20gJy4uL2NvcmUvcGlwZWxpbmUtaGVscGVycy5qcyc7XG5pbXBvcnQgeyBNZXRhZGF0YUtleXMsIFRyaWdnZXJUeXBlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS10eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1ldGFEYXRhVHlwZSB9IGZyb20gJy4uL2NvcmUvcGlwZWxpbmUtdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBSb2xlQ29uZmlnIH0gZnJvbSAnLi4vY29yZS9yb2xlLXR5cGVzLmpzJztcbmltcG9ydCB7IHJlc29sdmVSb2xlIH0gZnJvbSAnLi4vY29yZS9yb2xlLmpzJztcbmltcG9ydCB7IHJlc29sdmVTZWN1cml0eUdyb3VwIH0gZnJvbSAnLi4vY29yZS9zZWN1cml0eS1ncm91cC5qcyc7XG5cbmNvbnN0IFBJUEVMSU5FX0VWRU5UX01BUDogUmVjb3JkPHN0cmluZywgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHM+ID0ge1xuICBGQUlMRUQ6IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9GQUlMRUQsXG4gIFNVQ0NFRURFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX1NVQ0NFRURFRCxcbiAgU1RBUlRFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX1NUQVJURUQsXG4gIENBTkNFTEVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fQ0FOQ0VMRUQsXG4gIFNVUEVSU0VERUQ6IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9TVVBFUlNFREVELFxufTtcblxuZnVuY3Rpb24gcGFyc2VOb3RpZmljYXRpb25FdmVudHModmFsdWU6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJykubWFwKHMgPT4gcy50cmltKCkpO1xuICByZXR1cm4gWydGQUlMRUQnLCAnU1VDQ0VFREVEJ107XG59XG5cbi8qKlxuICogU2FuaXRpemUgYSBzaW5nbGUgYHBiLmRlcGxveXNgIHRva2VuIChzdGFnZSBuYW1lIG9yIGVudmlyb25tZW50KSB0b1xuICogQ29kZVBpcGVsaW5lLXRhZy1zYWZlIGNoYXJhY3RlcnMuIGA6YCBhbmQgYCtgIGFyZSB0aGUgcGFpci9saXN0IGRlbGltaXRlcnMsIHNvXG4gKiB0aGV5IChhbmQgYW55IG90aGVyIGRpc2FsbG93ZWQgY2hhcikgYXJlIHN0cmlwcGVkIHRvIGAtYCBpbnNpZGUgYSB0b2tlbiB0b1xuICoga2VlcCB0aGUgdmFsdWUgdW5hbWJpZ3VvdXNseSBwYXJzZWFibGUgYW5kIEpTT04tZnJlZS5cbiAqL1xuZnVuY3Rpb24gdGFnU2FmZVRva2VuKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZSgvW15BLVphLXowLTkuXy9APS1dL2csICctJyk7XG59XG5cbi8qKiBBV1MgdGFnLXZhbHVlIGhhcmQgbGltaXQ7IGBwYi5kZXBsb3lzYCBtdXN0IG5ldmVyIGV4Y2VlZCB0aGlzLiAqL1xuY29uc3QgTUFYX1RBR19WQUxVRV9MRU5HVEggPSAyNTY7XG5cbi8qKiBBIHJlc29sdmVkIGRlcGxveSBhdHRyaWJ1dGlvbjogYSBzYW5pdGl6ZWQgYDxzdGFnZT46PGVudj5gIHRva2VuIHBsdXMgaXRzIGVudi4gKi9cbmludGVyZmFjZSBEZXBsb3lQYWlyIHtcbiAgcmVhZG9ubHkgc3RyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBgcGIuZGVwbG95c2AgdGFnIHZhbHVlOiBgPHN0YWdlPjo8ZW52PmAgcGFpcnMgam9pbmVkIGJ5IGArYC5cbiAqXG4gKiBBIHN0YWdlIGlzIGEgZGVwbG95IGlmZiBpdCBkZWNsYXJlcyBhbiBgZW52aXJvbm1lbnRgLiBQcmVjZWRlbmNlOlxuICogIC0gTXVsdGktZW52OiBhbnkgc3RhZ2Ugd2l0aCBhIHBlci1zdGFnZSBgZW52aXJvbm1lbnRgIOKAlCBsaXN0IGVhY2ggc3VjaCBzdGFnZS5cbiAqICAtIFNpbmdsZS1lbnY6IG5vIHBlci1zdGFnZSBlbnZpcm9ubWVudCBidXQgYSBwaXBlbGluZS1sZXZlbCBgZW52aXJvbm1lbnRgIOKAlFxuICogICAgYXR0cmlidXRlIGl0IHRvIHRoZSBzb2xlIHN0YWdlIChgPG9ubHlTdGFnZT46PGVudj5gKSwgdGhlIExBU1Qgc3RhZ2Ugb2YgYVxuICogICAgbXVsdGktc3RhZ2UgcGlwZWxpbmUgKGRlcGxveXMgYXJlIGNvbnZlbnRpb25hbGx5IHRoZSBmaW5hbCBzdGFnZSDigJQgZW1pdHRlZFxuICogICAgd2l0aCBhIHN5bnRoIHdhcm5pbmcgcmVjb21tZW5kaW5nIGV4cGxpY2l0IHBlci1zdGFnZSBgZW52aXJvbm1lbnRgKSwgb3IgYVxuICogICAgbGl0ZXJhbCBgRGVwbG95OjxlbnY+YCB3aGVuIHRoZXJlIGFyZSBubyBzdGFnZXMgdG8gbmFtZS5cbiAqXG4gKiBUaGUgYXNzZW1ibGVkIHZhbHVlIGlzIGNhcHBlZCBhdCBBV1MncyAyNTYtY2hhciB0YWctdmFsdWUgbGltaXQgKEQ2KTogdGhlXG4gKiBoZWFkbGluZS9wcm9kdWN0aW9uIHBhaXIgaXMga2VwdCBmaXJzdCBhbmQgdHJhaWxpbmcgb3ZlcmZsb3cgcGFpcnMgYXJlIGRyb3BwZWRcbiAqIHdpdGggYSBzeW50aCB3YXJuaW5nIG5hbWluZyB0aGVtLiBOZXZlciByZXR1cm5zIGEgdmFsdWUgbG9uZ2VyIHRoYW4gMjU2IGNoYXJzLlxuICpcbiAqIFJldHVybnMgdW5kZWZpbmVkIHdoZW4gbm90aGluZyBkZWNsYXJlcyBhbiBlbnZpcm9ubWVudCAobm8gZGVwbG95IHNpZ25hbCkuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRGVwbG95c1RhZyhwcm9wczogQnVpbGRlclByb3BzKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc3RhZ2VzID0gcHJvcHMuc3RhZ2VzID8/IFtdO1xuICBjb25zdCBzdGFnZXNXaXRoRW52ID0gc3RhZ2VzLmZpbHRlcihzID0+IHR5cGVvZiBzLmVudmlyb25tZW50ID09PSAnc3RyaW5nJyAmJiBzLmVudmlyb25tZW50Lmxlbmd0aCA+IDApO1xuXG4gIGxldCBwYWlyczogRGVwbG95UGFpcltdO1xuICBpZiAoc3RhZ2VzV2l0aEVudi5sZW5ndGggPiAwKSB7XG4gICAgcGFpcnMgPSBzdGFnZXNXaXRoRW52Lm1hcChzID0+ICh7XG4gICAgICBzdHI6IGAke3RhZ1NhZmVUb2tlbihzLnN0YWdlTmFtZSl9OiR7dGFnU2FmZVRva2VuKHMuZW52aXJvbm1lbnQgYXMgc3RyaW5nKX1gLFxuICAgICAgZW52OiBzLmVudmlyb25tZW50IGFzIHN0cmluZyxcbiAgICB9KSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuZW52aXJvbm1lbnQpIHtcbiAgICBsZXQgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gICAgaWYgKHN0YWdlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHN0YWdlTmFtZSA9IHN0YWdlc1swXS5zdGFnZU5hbWU7XG4gICAgfSBlbHNlIGlmIChzdGFnZXMubGVuZ3RoID4gMSkge1xuICAgICAgLy8gUGlwZWxpbmUtbGV2ZWwgZW52aXJvbm1lbnQgb24gYSBtdWx0aS1zdGFnZSBwaXBlbGluZTogYXR0cmlidXRlIGl0IHRvIHRoZVxuICAgICAgLy8gTEFTVCBzdGFnZSAoZGVwbG95cyBhcmUgY29udmVudGlvbmFsbHkgZmluYWwpIHJhdGhlciB0aGFuIGFuIHVubWF0Y2hlZFxuICAgICAgLy8gbGl0ZXJhbCBgRGVwbG95YC4gV2FybiBzbyBhdXRob3JzIG1vdmUgdG8gZXhwbGljaXQgcGVyLXN0YWdlIGBlbnZpcm9ubWVudGAuXG4gICAgICBzdGFnZU5hbWUgPSBzdGFnZXNbc3RhZ2VzLmxlbmd0aCAtIDFdLnN0YWdlTmFtZTtcbiAgICAgIGNyZWF0ZUxvZ2dlcigncGlwZWxpbmUtYnVpbGRlcicpLndhcm4oXG4gICAgICAgIGBQaXBlbGluZS1sZXZlbCBlbnZpcm9ubWVudCBcIiR7cHJvcHMuZW52aXJvbm1lbnR9XCIgYXR0cmlidXRlZCB0byB0aGUgbGFzdCBzdGFnZSBgICtcbiAgICAgICAgYFwiJHtzdGFnZU5hbWV9XCIgb2YgYSAke3N0YWdlcy5sZW5ndGh9LXN0YWdlIHBpcGVsaW5lLiBEZWNsYXJlIGEgcGVyLXN0YWdlIGAgK1xuICAgICAgICAnYGVudmlyb25tZW50YCBvbiB0aGUgYWN0dWFsIGRlcGxveSBzdGFnZShzKSBmb3IgcHJlY2lzZSBET1JBIGF0dHJpYnV0aW9uLicsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFnZU5hbWUgPSAnRGVwbG95JztcbiAgICB9XG4gICAgcGFpcnMgPSBbeyBzdHI6IGAke3RhZ1NhZmVUb2tlbihzdGFnZU5hbWUpfToke3RhZ1NhZmVUb2tlbihwcm9wcy5lbnZpcm9ubWVudCl9YCwgZW52OiBwcm9wcy5lbnZpcm9ubWVudCB9XTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGNhcERlcGxveXNWYWx1ZShwYWlycyk7XG59XG5cbi8qKlxuICogSm9pbiBgcGIuZGVwbG95c2AgcGFpcnMgd2l0aCBgK2AsIGNhcHBlZCBhdCB7QGxpbmsgTUFYX1RBR19WQUxVRV9MRU5HVEh9LiBXaGVuXG4gKiB0aGUgZnVsbCB2YWx1ZSB3b3VsZCBleGNlZWQgdGhlIGNhcCwgdGhlIGhlYWRsaW5lL3Byb2R1Y3Rpb24gcGFpciBpcyBwbGFjZWRcbiAqIGZpcnN0IGFuZCBvbmx5IHRoZSBsZWFkaW5nIHBhaXJzIHRoYXQgZml0IGFyZSBrZXB0OyB0aGUgdHJhaWxpbmcgb3ZlcmZsb3cgcGFpcnNcbiAqIGFyZSBkcm9wcGVkIGFuZCBuYW1lZCBpbiBhIHN5bnRoIHdhcm5pbmcuIE5ldmVyIGVtaXRzIG1vcmUgdGhhbiAyNTYgY2hhcnMuXG4gKi9cbmZ1bmN0aW9uIGNhcERlcGxveXNWYWx1ZShwYWlyczogRGVwbG95UGFpcltdKTogc3RyaW5nIHtcbiAgY29uc3QgZnVsbCA9IHBhaXJzLm1hcChwID0+IHAuc3RyKS5qb2luKCcrJyk7XG4gIGlmIChmdWxsLmxlbmd0aCA8PSBNQVhfVEFHX1ZBTFVFX0xFTkdUSCkgcmV0dXJuIGZ1bGw7XG5cbiAgLy8gUHJpb3JpdGl6ZSB0aGUgaGVhZGxpbmUgcGFpciDigJQgdGhlIHByb2R1Y3Rpb24gZGVwbG95IGlmIHByZXNlbnQsIGVsc2UgdGhlXG4gIC8vIGZpcnN0IHBhaXIg4oCUIHNvIGEgY2FwIG5ldmVyIGRyb3BzIHRoZSBtb3N0IG9wZXJhdGlvbmFsbHktc2lnbmlmaWNhbnQgZGVwbG95LlxuICBjb25zdCBoZWFkbGluZUlkeCA9IHBhaXJzLmZpbmRJbmRleChwID0+IHAuZW52LnRvTG93ZXJDYXNlKCkgPT09ICdwcm9kdWN0aW9uJyk7XG4gIGNvbnN0IG9yZGVyZWQgPSBoZWFkbGluZUlkeCA+IDBcbiAgICA/IFtwYWlyc1toZWFkbGluZUlkeF0sIC4uLnBhaXJzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaGVhZGxpbmVJZHgpXVxuICAgIDogcGFpcnM7XG5cbiAgY29uc3Qga2VwdDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZHJvcHBlZDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBwIG9mIG9yZGVyZWQpIHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBrZXB0Lmxlbmd0aCA9PT0gMCA/IHAuc3RyIDogYCR7a2VwdC5qb2luKCcrJyl9KyR7cC5zdHJ9YDtcbiAgICBpZiAoY2FuZGlkYXRlLmxlbmd0aCA8PSBNQVhfVEFHX1ZBTFVFX0xFTkdUSCkge1xuICAgICAga2VwdC5wdXNoKHAuc3RyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZHJvcHBlZC5wdXNoKHAuc3RyKTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGVMb2dnZXIoJ3BpcGVsaW5lLWJ1aWxkZXInKS53YXJuKFxuICAgIGBwYi5kZXBsb3lzIHRhZyB2YWx1ZSBleGNlZWRlZCB0aGUgJHtNQVhfVEFHX1ZBTFVFX0xFTkdUSH0tY2hhciBBV1MgdGFnLXZhbHVlIGxpbWl0OyBgICtcbiAgICBgZHJvcHBlZCAke2Ryb3BwZWQubGVuZ3RofSBkZXBsb3kgcGFpcihzKTogJHtkcm9wcGVkLmpvaW4oJywgJyl9LiBgICtcbiAgICAnVGhlc2UgZW52aXJvbm1lbnRzIHdpbGwgbm90IHByb2R1Y2UgRE9SQSBkZXBsb3kgc2lnbmFscyDigJQgcmVkdWNlIHN0YWdlL2Vudmlyb25tZW50ICcgK1xuICAgICduYW1lIGxlbmd0aHMgb3Igc3BsaXQgaW50byBzZXBhcmF0ZSBwaXBlbGluZXMuJyxcbiAgKTtcbiAgcmV0dXJuIGtlcHQuam9pbignKycpO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIFBpcGVsaW5lQnVpbGRlciBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyUHJvcHMge1xuICAvKiogUHJvamVjdCBpZGVudGlmaWVyICh3aWxsIGJlIHNhbml0aXplZCB0byBsb3dlcmNhc2UgYWxwaGFudW1lcmljIHdpdGggdW5kZXJzY29yZXMpICovXG4gIHJlYWRvbmx5IHByb2plY3Q6IHN0cmluZztcblxuICAvKiogT3JnYW5pemF0aW9uIGlkZW50aWZpZXIgKHdpbGwgYmUgc2FuaXRpemVkIHRvIGxvd2VyY2FzZSBhbHBoYW51bWVyaWMgd2l0aCB1bmRlcnNjb3JlcykgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlcGxveSBlbnZpcm9ubWVudCAoZS5nLiBgcHJvZHVjdGlvbmAsIGBzdGFnaW5nYCkgZm9yIHRoZVxuICAgKiBzaW5nbGUtZW52aXJvbm1lbnQgY2FzZS4gV2hlbiBzZXQgKGFuZCBubyBzdGFnZSBkZWNsYXJlcyBpdHMgb3duXG4gICAqIGBlbnZpcm9ubWVudGApLCBwaXBlbGluZS1jb3JlIGRlcml2ZXMgdGhlIGBwYi5kZXBsb3lzYCB0YWcgZnJvbSBpdCwgbWFya2luZ1xuICAgKiB0aGUgc29sZSBzdGFnZSDigJQgb3IgdGhlIExBU1Qgc3RhZ2Ugb2YgYSBtdWx0aS1zdGFnZSBwaXBlbGluZSAod2l0aCBhIHN5bnRoXG4gICAqIHdhcm5pbmcpLCBvciBhIGxpdGVyYWwgYERlcGxveWAgc3RhZ2Ugd2hlbiB0aGVyZSBhcmUgbm8gc3RhZ2VzIHRvIG5hbWUg4oCUIGFzXG4gICAqIHRoZSBkZXBsb3kgZm9yIERPUkEgbWV0cmljcy4gRm9yIG11bHRpLWVudmlyb25tZW50IHBpcGVsaW5lcywgZGVjbGFyZVxuICAgKiBgZW52aXJvbm1lbnRgIHBlciBzdGFnZSBpbnN0ZWFkIChzZWUgYFN0YWdlT3B0aW9ucy5lbnZpcm9ubWVudGApLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBzdHJpbmc7XG5cbiAgLyoqIFRlbmFudCBpZGVudGlmaWVyIGZvciByZXNvbHZpbmcgcGVyLW9yZyBzZWNyZXRzIGZyb20gQVdTIFNlY3JldHMgTWFuYWdlciAqL1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZztcblxuICAvKiogUGlwZWxpbmUgZGF0YWJhc2UgcmVjb3JkIElEIOKAlCBpbmplY3RlZCBhcyBQSVBFTElORV9JRCBlbnYgdmFyIGZvciBhdXRvbm9tb3VzIHN5bnRoICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lSWQ/OiBzdHJpbmc7XG5cbiAgLyoqIE9wdGlvbmFsIGN1c3RvbSBwaXBlbGluZSBuYW1lLiBEZWZhdWx0cyB0bzoge29yZ2FuaXphdGlvbn0te3Byb2plY3R9LXBpcGVsaW5lICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lTmFtZT86IHN0cmluZztcblxuICAvKiogR2xvYmFsIG1ldGFkYXRhIGluaGVyaXRlZCBieSBhbGwgcGlwZWxpbmUgc3RlcHMgKi9cbiAgcmVhZG9ubHkgZ2xvYmFsPzogTWV0YURhdGFUeXBlO1xuXG4gIC8qKlxuICAgKiBQaXBlbGluZS1sZXZlbCB0ZW1wbGF0ZSB2YXJpYWJsZXMsIGV4cG9zZWQgdG8gYHt7IHBpcGVsaW5lLnZhcnMuKiB9fWAgaW5cbiAgICogcGlwZWxpbmUgY29uZmlncyBhbmQgcGx1Z2luIHNwZWNzIChzZWUgYFBsdWdpblNwZWMucmVxdWlyZWRWYXJzYCkuIERlY2xhcmVkXG4gICAqIGhlcmUgc28gdGhlIGBwaXBlbGluZS52YXJzYCB0ZW1wbGF0ZSBzY29wZSBpcyB0eXBlLWNoZWNrZWQgZW5kLXRvLWVuZC5cbiAgICovXG4gIHJlYWRvbmx5IHZhcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKipcbiAgICogUGlwZWxpbmUtbGV2ZWwgQ29kZUJ1aWxkIGRlZmF1bHRzIGFwcGxpZWQgdG8gYWxsIENvZGVCdWlsZCBhY3Rpb25zXG4gICAqIChzeW50aCwgc2VsZi1tdXRhdGlvbiwgYXNzZXQgcHVibGlzaGluZykgdmlhIGBjb2RlQnVpbGREZWZhdWx0c2AuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0cz86IENvZGVCdWlsZERlZmF1bHRzO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBJQU0gcm9sZSBmb3IgdGhlIENvZGVQaXBlbGluZS5cbiAgICogV2hlbiBwcm92aWRlZCwgcmVzb2x2ZXMgdG8gYSBDREsgSVJvbGUgYW5kIGlzIHBhc3NlZCB0byB0aGUgQ29kZVBpcGVsaW5lIGNvbnN0cnVjdC5cbiAgICogV2hlbiBvbWl0dGVkLCBDREsgYXV0by1jcmVhdGVzIGEgcm9sZSB3aXRoIHRoZSBjb3JyZWN0IGNvZGVwaXBlbGluZS5hbWF6b25hd3MuY29tIHByaW5jaXBhbC5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBSb2xlQ29uZmlnO1xuXG4gIC8qKiBTeW50aGVzaXMgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgc291cmNlIGFuZCBwbHVnaW4gZGV0YWlscyAqL1xuICByZWFkb25seSBzeW50aDogU3ludGhPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBwaXBlbGluZSBzdGFnZXMsIGVhY2ggY29udGFpbmluZyBvbmUgb3IgbW9yZSBDb2RlQnVpbGQgc3RlcHMuXG4gICAqIFN0YWdlcyBhcmUgYWRkZWQgYXMgd2F2ZXMgdG8gdGhlIENvZGVQaXBlbGluZSBhZnRlciB0aGUgc3ludGggc3RlcC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlcz86IFN0YWdlT3B0aW9uc1tdO1xuXG4gIC8qKiBPcHRpb25hbCBjcm9uL3JhdGUgZXhwcmVzc2lvbiBmb3Igc2NoZWR1bGVkIHBpcGVsaW5lIGV4ZWN1dGlvbi4gKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGU/OiBzdHJpbmc7XG5cbiAgLyoqIEN1c3RvbSB0YWdzIGFwcGxpZWQgdG8gYWxsIHBpcGVsaW5lIHJlc291cmNlcy4gKi9cbiAgcmVhZG9ubHkgdGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFBsdWdpbnMgcHJlLXJlc29sdmVkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoYCBmcm9tIHRoZSBwbGF0Zm9ybSBBUEksXG4gICAqIGtleWVkIGJ5IGBhbGlhcyB8fCBuYW1lYC4gV2hlbiBwcmVzZW50LCBgUGx1Z2luTG9va3VwLnBsdWdpbigpYCByZXR1cm5zXG4gICAqIHRoZSBtYXRjaGluZyBlbnRyeSBkaXJlY3RseSBhbmQgc2tpcHMgdGhlIGN1c3RvbSByZXNvdXJjZSDigJQgc28gdGhlXG4gICAqIHN5bnRoZXNpemVkIENGTiB0ZW1wbGF0ZSBzaGlwcyB3aXRoIHRoZSByZWFsIENvZGVCdWlsZCBpbWFnZSBiYWtlZCBpbi5cbiAgICogUG9wdWxhdGVkIGJ5IHRoZSBDTEkgYmVmb3JlIGludm9raW5nIHRoZSBib2lsZXJwbGF0ZSBhcHA7IENESyBjb25zdW1lcnNcbiAgICogd2hvIGNvbnN0cnVjdCBQaXBlbGluZUJ1aWxkZXIgZGlyZWN0bHkgbm9ybWFsbHkgbGVhdmUgdGhpcyB1bnNldC5cbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdmVkUGx1Z2lucz86IFJlY29yZDxzdHJpbmcsIFBsdWdpbj47XG5cbiAgLyoqXG4gICAqIFBsYXRmb3JtLXNvdXJjZWQgcmVnaXN0cnkgb3ZlcnJpZGVzLCBhcHBsaWVkIG92ZXIgdGhlIGVudi1sb2FkZWQgYHJlZ2lzdHJ5YFxuICAgKiBjb25maWcgYXQgc3ludGggc3RhcnQuIHBpcGVsaW5lLW1hbmFnZXIgcG9wdWxhdGVzIHRoaXMgZnJvbSB0aGUgcGxhdGZvcm0gVVJMXG4gICAqIGl0IGRlcGxveXMgYWdhaW5zdCBzbyB0aGUgQ29kZUJ1aWxkIGltYWdlIFVSSXMgdXNlIGEgcHVsbCBob3N0IEFXUyBDb2RlQnVpbGRcbiAgICogY2FuIHJlc29sdmUgKGluc3RlYWQgb2YgdGhlIGluLWNsdXN0ZXIgYHJlZ2lzdHJ5OjUwMDBgIGRlZmF1bHQpLiBDREtcbiAgICogY29uc3VtZXJzIGNvbnN0cnVjdGluZyBQaXBlbGluZUJ1aWxkZXIgZGlyZWN0bHkgbm9ybWFsbHkgbGVhdmUgdGhpcyB1bnNldC5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lzdHJ5PzogUGFydGlhbDxSZWdpc3RyeUNvbmZpZz47XG59XG5cbi8qKlxuICogQ0RLIGNvbnN0cnVjdCB0aGF0IGNyZWF0ZXMgYW5kIGNvbmZpZ3VyZXMgYSBDb2RlUGlwZWxpbmUgZm9yIGNvbnRpbnVvdXMgZGVwbG95bWVudC5cbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gTXVsdGktc291cmNlIHN1cHBvcnQgKFMzLCBHaXRIdWIsIENvZGVTdGFyKVxuICogLSBQbHVnaW4tYmFzZWQgYnVpbGQgc3RlcHNcbiAqIC0gTWV0YWRhdGEtZHJpdmVuIGNvbmZpZ3VyYXRpb25cbiAqIC0gQXV0b21hdGljIHRhZ2dpbmdcbiAqIC0gQXV0b21hdGljIHNhbml0aXphdGlvbiBvZiBwcm9qZWN0IGFuZCBvcmdhbml6YXRpb24gbmFtZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogbmV3IFBpcGVsaW5lQnVpbGRlcih0aGlzLCAnTXlQaXBlbGluZScsIHtcbiAqICAgcHJvamVjdDogJ215LWFwcCcsXG4gKiAgIG9yZ2FuaXphdGlvbjogJ215LW9yZycsXG4gKiAgIHN5bnRoOiB7XG4gKiAgICAgc291cmNlOiB7XG4gKiAgICAgICB0eXBlOiAnZ2l0aHViJyxcbiAqICAgICAgIG9wdGlvbnM6IHsgcmVwbzogJ293bmVyL3JlcG8nLCBicmFuY2g6ICdtYWluJyB9XG4gKiAgICAgfSxcbiAqICAgICBwbHVnaW46IHsgbmFtZTogJ3N5bnRoJyB9XG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBQaXBlbGluZUJ1aWxkZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgcGlwZWxpbmU6IENvZGVQaXBlbGluZTtcbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogUGlwZWxpbmVDb25maWd1cmF0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBCdWlsZGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gQXBwbHkgcGxhdGZvcm0tc291cmNlZCByZWdpc3RyeSBvdmVycmlkZXMgQkVGT1JFIGFueSBDb25maWcuZ2V0KCdyZWdpc3RyeScpXG4gICAgLy8gKHBsdWdpbi9kZWZhdWx0IGJ1aWxkLWltYWdlIHJlc29sdXRpb24gYmVsb3cpIHNvIHRoZSBzeW50aCB1c2VzIHRoZSBwdWxsXG4gICAgLy8gaG9zdCB0aGUgcGxhdGZvcm0gZGVwbG95cyBhZ2FpbnN0LCBub3QgdGhlIGluLWNsdXN0ZXIgZW52IGRlZmF1bHQuIFRoZSBDTElcbiAgICAvLyBvbmx5IHNldHMgcHJvcHMucmVnaXN0cnkgd2hlbiBJTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1QgaXMgdW5zZXQsIHNvIGFuXG4gICAgLy8gZXhwbGljaXQgb3BlcmF0b3IgcHVsbCBob3N0IGlzIG5ldmVyIGNsb2JiZXJlZCAoc2VlIGJha2VQbGF0Zm9ybVJlZ2lzdHJ5KS5cbiAgICAvL1xuICAgIC8vIFNjb3BlZCArIHJlc3RvcmVkIHNvIHRoZSBvdmVycmlkZSBkb2VzIE5PVCBsZWFrIGludG8gdGhlIHByb2Nlc3Mtd2lkZVxuICAgIC8vIENvbmZpZyBjYWNoZTogaW4gYSBtdWx0aS1waXBlbGluZSBDREsgYXBwLCBwaXBlbGluZSBCJ3MgcmVnaXN0cnkgbXVzdCBub3RcbiAgICAvLyBibGVlZCBpbnRvIHBpcGVsaW5lIEEncyBpbWFnZSByZXNvbHV0aW9uLiBBbGwgcmVnaXN0cnkgcmVhZHMgaGFwcGVuXG4gICAgLy8gc3luY2hyb25vdXNseSBiZWxvdyAoYnVpbGQtaW1hZ2UgcmVzb2x1dGlvbiksIHNvIHJlc3RvcmluZyBhdCB0aGUgZW5kIG9mXG4gICAgLy8gdGhlIGNvbnN0cnVjdG9yIGtlZXBzIHNpbmdsZS1waXBlbGluZSBiZWhhdmlvciBpZGVudGljYWwuXG4gICAgY29uc3QgcmVzdG9yZVJlZ2lzdHJ5ID0gcHJvcHMucmVnaXN0cnlcbiAgICAgID8gQ29uZmlnLm92ZXJyaWRlU2NvcGVkKCdyZWdpc3RyeScsIHByb3BzLnJlZ2lzdHJ5KVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSBQaXBlbGluZUNvbmZpZ3VyYXRpb24gZm9yIGFsbCBidXNpbmVzcyBsb2dpYyAodmFsaWRhdGlvbiwgc2FuaXRpemF0aW9uLCBtZXRhZGF0YSBtZXJnaW5nKVxuICAgICAgdGhpcy5jb25maWcgPSBuZXcgUGlwZWxpbmVDb25maWd1cmF0aW9uKHByb3BzKTtcblxuICAgICAgY29uc3Qgc2VydmVyQ29uZmlnID0gQ29uZmlnLmdldCgnc2VydmVyJyk7XG4gICAgICBjb25zdCBhd3NDb25maWcgPSBDb25maWcuZ2V0KCdhd3MnKTtcbiAgICAgIC8vIFBhc3Mgb3JnK3Byb2plY3Qgc28gbG9nIGdyb3VwIC8gSUFNIHJvbGUgbmFtZXMgZ2V0IGEgc3RhYmxlIGhhc2hcbiAgICAgIC8vIHN1ZmZpeCBwZXIgcGlwZWxpbmUuIFByZXZlbnRzIGBSZXNvdXJjZSBhbHJlYWR5IGV4aXN0c2AgY29sbGlzaW9uc1xuICAgICAgLy8gYWNyb3NzIHN0YWNrcyBkZXBsb3llZCB0byB0aGUgc2FtZSBBV1MgYWNjb3VudC5cbiAgICAgIGNvbnN0IHVuaXF1ZUlkID0gbmV3IFVuaXF1ZUlkKHtcbiAgICAgICAgb3JnYW5pemF0aW9uOiB0aGlzLmNvbmZpZy5vcmdhbml6YXRpb24sXG4gICAgICAgIHByb2plY3Q6IHRoaXMuY29uZmlnLnByb2plY3QsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBsdWdpbkxvb2t1cCA9IG5ldyBQbHVnaW5Mb29rdXAoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHVuaXF1ZUlkLmdlbmVyYXRlKCdwbHVnaW46bG9va3VwJyksXG4gICAgICAgIHtcbiAgICAgICAgICBvcmdhbml6YXRpb246IHRoaXMuY29uZmlnLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICBwcm9qZWN0OiB0aGlzLmNvbmZpZy5wcm9qZWN0LFxuICAgICAgICAgIHBsYXRmb3JtVXJsOiBzZXJ2ZXJDb25maWcucGxhdGZvcm1VcmwsXG4gICAgICAgICAgdW5pcXVlSWQsXG4gICAgICAgICAgb3JnSWQ6IHByb3BzLm9yZ0lkLFxuICAgICAgICAgIHJ1bnRpbWU6IGxhbWJkYVJ1bnRpbWUoYXdzQ29uZmlnLmxhbWJkYS5ydW50aW1lKSxcbiAgICAgICAgICB0aW1lb3V0OiBsYW1iZGFUaW1lb3V0KGF3c0NvbmZpZy5sYW1iZGEudGltZW91dFNlY29uZHMpLFxuICAgICAgICAgIGFyY2hpdGVjdHVyZTogbGFtYmRhQXJjaGl0ZWN0dXJlKGF3c0NvbmZpZy5sYW1iZGEuYXJjaGl0ZWN0dXJlKSxcbiAgICAgICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiBhd3NDb25maWcubGFtYmRhLnJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMsXG4gICAgICAgICAgcmVzb2x2ZWRQbHVnaW5zOiBwcm9wcy5yZXNvbHZlZFBsdWdpbnMsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICAvLyBDcmVhdGUgc291cmNlIGFuZCBidWlsZCBzdGVwXG4gICAgICBjb25zdCBzb3VyY2VCdWlsZGVyID0gbmV3IFNvdXJjZUJ1aWxkZXIodGhpcywgdGhpcy5jb25maWcpO1xuICAgICAgY29uc3Qgc291cmNlID0gc291cmNlQnVpbGRlci5jcmVhdGUodW5pcXVlSWQpO1xuXG4gICAgICAvLyBTeW50aC1wbHVnaW4gcmVzb2x1dGlvbjpcbiAgICAgIC8vICAgMS4gUHJlLXJlc29sdmVkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoL2RlcGxveWAgZnJvbSB0aGUgcGxhdGZvcm1cbiAgICAgIC8vICAgICAgQVBJIOKGkiB1c2UgaXQuIFN5bnRoIHN0ZXAgcnVucyBvbiB0aGUgcmVhbCBgY2RrLXN5bnRoYCBpbWFnZSB3aXRoXG4gICAgICAvLyAgICAgIHJlYWwgY29tbWFuZHMgYmFrZWQgaW50byB0aGUgdGVtcGxhdGUuXG4gICAgICAvLyAgIDIuIE90aGVyd2lzZSDihpIgYGJvb3RzdHJhcCgpYDogY29sZC1zdGFydCBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aGBcbiAgICAgIC8vICAgICAgb24gdGhlIGNvbmZpZ3VyZWQgQ09ERUJVSUxEX0RFRkFVTFRfSU1BR0UgKGRlZmF1bHRcbiAgICAgIC8vICAgICAgcGlwZWxpbmUtYm9vdHN0cmFwOjEuMCkuIFVzZWQgd2hlbiB0aGUgcGxhdGZvcm0gaXNuJ3QgcmVhY2hhYmxlXG4gICAgICAvLyAgICAgIGF0IHN5bnRoIHRpbWUgKENMSSBsb2dzIGEgd2FybmluZyBwZXIgbWlzc2VkIHBsdWdpbikuXG4gICAgICAvL1xuICAgICAgLy8gcGx1Z2luTG9va3VwLnBsdWdpbigpIHJlYWRzIGByZXNvbHZlZFBsdWdpbnNgIGludGVybmFsbHkgYW5kIHJldHVybnNcbiAgICAgIC8vIHRoZSBjYWNoZWQgZW50cnkgd2hlbiBwcmVzZW50IOKAlCBzbyBjYWxsaW5nIGl0IGFsd2F5cyB3aW5zIG92ZXJcbiAgICAgIC8vIGJvb3RzdHJhcCgpIHdoZW4gcHJlLXJlc29sdXRpb24gc3VjY2VlZGVkLlxuICAgICAgY29uc3Qgc3ludGhDYWNoZUtleSA9XG4gICAgICB0aGlzLmNvbmZpZy5wbHVnaW4uYWxpYXMgfHwgYCR7dGhpcy5jb25maWcucGx1Z2luLm5hbWV9LWFsaWFzYDtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IHByb3BzLnJlc29sdmVkUGx1Z2lucz8uW3N5bnRoQ2FjaGVLZXldXG4gICAgICAgID8gcGx1Z2luTG9va3VwLnBsdWdpbih0aGlzLmNvbmZpZy5wbHVnaW4pXG4gICAgICAgIDogcGx1Z2luTG9va3VwLmJvb3RzdHJhcCgpO1xuICAgICAgY29uc3QgZGVmYXVsdENvbXB1dGVUeXBlID0gZ2V0Q29tcHV0ZVR5cGUoYXdzQ29uZmlnLmNvZGVCdWlsZC5jb21wdXRlVHlwZSk7XG4gICAgICBjb25zdCBhcnRpZmFjdE1hbmFnZXIgPSBuZXcgQXJ0aWZhY3RNYW5hZ2VyKCk7XG4gICAgICBjb25zdCBzeW50aEFsaWFzID0gdGhpcy5jb25maWcucGx1Z2luLmFsaWFzID8/IHRoaXMuY29uZmlnLnBsdWdpbi5uYW1lO1xuXG4gICAgICAvLyBTY29wZSBleHBvc2VkIHRvIHBsdWdpbi1zcGVjIHRlbXBsYXRlcyBhcyBgcGlwZWxpbmUuKmAuIFNvdXJjZWQgZnJvbSB0aGVcbiAgICAgIC8vIGNvbmZpZyBzbyB0aGUgc3ludGggc3RlcCwgZXZlcnkgc3RhZ2Ugc3RlcCwgYW5kIHRoZSBzb3VyY2UgdG9rZW4gYWxsXG4gICAgICAvLyByZXNvbHZlIGFnYWluc3QgdGhlIHNhbWUgc25hcHNob3QgKHNlZSBQaXBlbGluZUNvbmZpZ3VyYXRpb24uZ2V0UGlwZWxpbmVTY29wZSkuXG4gICAgICBjb25zdCBwaXBlbGluZVNjb3BlID0gdGhpcy5jb25maWcuZ2V0UGlwZWxpbmVTY29wZSgpO1xuXG4gICAgICBjb25zdCBzeW50aCA9IGNyZWF0ZUNvZGVCdWlsZFN0ZXAoe1xuICAgICAgICAuLi50aGlzLmNvbmZpZy5zeW50aEN1c3RvbWl6YXRpb24sXG4gICAgICAgIGlkOiB1bmlxdWVJZC5nZW5lcmF0ZSgnY2RrOnN5bnRoJyksXG4gICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICBwbHVnaW4sXG4gICAgICAgIGlucHV0OiBzb3VyY2UsXG4gICAgICAgIG1ldGFkYXRhOiB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQsXG4gICAgICAgIG5ldHdvcms6IHRoaXMuY29uZmlnLm5ldHdvcmssXG4gICAgICAgIHNjb3BlOiB0aGlzLFxuICAgICAgICBkZWZhdWx0Q29tcHV0ZVR5cGUsXG4gICAgICAgIGFydGlmYWN0TWFuYWdlcixcbiAgICAgICAgc3RhZ2VOYW1lOiAnbm8tc3RhZ2UnLFxuICAgICAgICBzdGFnZUFsaWFzOiAnbm8tc3RhZ2UtYWxpYXMnLFxuICAgICAgICBwbHVnaW5BbGlhczogYCR7c3ludGhBbGlhc30tYWxpYXNgLFxuICAgICAgICBvcmdJZDogcHJvcHMub3JnSWQsXG4gICAgICAgIHBpcGVsaW5lU2NvcGUsXG4gICAgICB9KTtcblxuICAgICAgLy8gUmVzb2x2ZSBwaXBlbGluZS1sZXZlbCBkZWZhdWx0cyBpbnRvIGNvZGVCdWlsZERlZmF1bHRzXG4gICAgICAvLyBCdWlsZCB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBzZWNyZXQgbmFtZSBmb3IgQ29kZUJ1aWxkIGVudiB2YXJzXG4gICAgICBjb25zdCBwbGF0Zm9ybVNlY3JldE5hbWUgPSBwcm9wcy5vcmdJZFxuICAgICAgICA/IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aChwcm9wcy5vcmdJZCwgJ3BsYXRmb3JtJylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGNvZGVCdWlsZERlZmF1bHRzID0gdGhpcy5yZXNvbHZlRGVmYXVsdHModGhpcy5jb25maWcuZGVmYXVsdHMsIHVuaXF1ZUlkLCBwcm9wcy5waXBlbGluZUlkLCBwbGF0Zm9ybVNlY3JldE5hbWUsIHNlcnZlckNvbmZpZy5wbGF0Zm9ybVVybCwgcHJvcHMub3JnSWQpO1xuXG4gICAgICAvLyBSZXNvbHZlIElBTSByb2xlOiBleHBsaWNpdCBwcm9wIHdpbnMsIGVsc2UgYGlhbTpyb2xlYCBtZXRhZGF0YSwgZWxzZSBsZXRcbiAgICAgIC8vIENESyBhdXRvLWNyZWF0ZSB0aGUgcGlwZWxpbmUgcm9sZSAoY29kZXBpcGVsaW5lLmFtYXpvbmF3cy5jb20gcHJpbmNpcGFsKS5cbiAgICAgIGNvbnN0IHJvbGVDb25maWcgPSBwcm9wcy5yb2xlID8/IHJvbGVDb25maWdGcm9tTWV0YWRhdGEodGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkKTtcbiAgICAgIGlmIChyb2xlQ29uZmlnPy50eXBlID09PSAnY29kZUJ1aWxkRGVmYXVsdCcpIHtcbiAgICAgICAgY3JlYXRlTG9nZ2VyKCdwaXBlbGluZS1idWlsZGVyJykud2FybihcbiAgICAgICAgICAnY29kZUJ1aWxkRGVmYXVsdCByb2xlIHR5cGUgdXNlcyBjb2RlYnVpbGQuYW1hem9uYXdzLmNvbSB0cnVzdCBwcmluY2lwYWwg4oCUICcgK1xuICAgICAgICAndGhpcyBpcyBub3Qgc3VpdGFibGUgYXMgdGhlIHBpcGVsaW5lLWxldmVsIHJvbGUuIENvbnNpZGVyIHVzaW5nIHJvbGVBcm4vcm9sZU5hbWUgJyArXG4gICAgICAgICdvciBvbWl0dGluZyB0aGUgcm9sZSB0byBsZXQgQ0RLIGF1dG8tY3JlYXRlIG9uZSB3aXRoIGNvZGVwaXBlbGluZS5hbWF6b25hd3MuY29tLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCByb2xlID0gcm9sZUNvbmZpZ1xuICAgICAgICA/IHJlc29sdmVSb2xlKHRoaXMsIHVuaXF1ZUlkLCByb2xlQ29uZmlnKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgLy8g4pSA4pSAIEFydGlmYWN0IGJ1Y2tldCAoS01TIGVuY3J5cHRpb24gKyByZXRlbnRpb24pIOKUgOKUgFxuICAgICAgLy8gV2hlbiBgZW5jcnlwdGlvbi5rbXNLZXlBcm5gIGFuZC9vciBgb3BlcmF0aW9ucy5hcnRpZmFjdFJldGVudGlvbkRheXNgIGFyZVxuICAgICAgLy8gc2V0IHdlIGNyZWF0ZSBhIGN1c3RvbSBhcnRpZmFjdCBidWNrZXQgYW5kIHBhc3MgaXQgdG8gQ29kZVBpcGVsaW5lOyB0aGF0XG4gICAgICAvLyBpcyB0aGUgb25seSB3YXkgdG8gYXR0YWNoIGEgY3VzdG9tZXItbWFuYWdlZCBrZXkgKHRoZSBMMyBjb25zdHJ1Y3QgZXhwb3Nlc1xuICAgICAgLy8gYGFydGlmYWN0QnVja2V0YCwgbm90IGBlbmNyeXB0aW9uS2V5YCkuIEFic2VudCBib3RoIGtleXMsIENESyBhdXRvLWNyZWF0ZXNcbiAgICAgIC8vIHRoZSBidWNrZXQgYW5kIGJlaGF2aW9yIGlzIHVuY2hhbmdlZC5cbiAgICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gdGhpcy5idWlsZEFydGlmYWN0QnVja2V0KCk7XG5cbiAgICAgIC8vIENyZWF0ZSBDb2RlUGlwZWxpbmUgY29uc3RydWN0XG4gICAgICB0aGlzLnBpcGVsaW5lID0gbmV3IENvZGVQaXBlbGluZSh0aGlzLCB1bmlxdWVJZC5nZW5lcmF0ZSgncGlwZWxpbmVzOmNvZGVwaXBlbGluZScpLCB7XG4gICAgICAgIC4uLihjb2RlQnVpbGREZWZhdWx0cyAmJiB7IGNvZGVCdWlsZERlZmF1bHRzIH0pLFxuICAgICAgICAuLi4ocm9sZSAmJiB7IHJvbGUgfSksXG4gICAgICAgIC4uLihhcnRpZmFjdEJ1Y2tldCAmJiB7IGFydGlmYWN0QnVja2V0IH0pLFxuICAgICAgICBwaXBlbGluZVR5cGU6IFBpcGVsaW5lVHlwZS5WMixcbiAgICAgICAgcGlwZWxpbmVOYW1lOiB0aGlzLmNvbmZpZy5waXBlbGluZU5hbWUsXG4gICAgICAgIHN5bnRoLFxuICAgICAgICAuLi5tZXRhZGF0YUZvckNvZGVQaXBlbGluZSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChwcm9wcy5zdGFnZXMpIHtcbiAgICAgICAgY29uc3Qgc3RhZ2VCdWlsZGVyID0gbmV3IFN0YWdlQnVpbGRlcih7XG4gICAgICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICAgICAgcGx1Z2luTG9va3VwLFxuICAgICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICAgIGdsb2JhbE1ldGFkYXRhOiB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQsXG4gICAgICAgICAgZGVmYXVsdENvbXB1dGVUeXBlLFxuICAgICAgICAgIGFydGlmYWN0TWFuYWdlcixcbiAgICAgICAgICBvcmdJZDogcHJvcHMub3JnSWQsXG4gICAgICAgICAgcGlwZWxpbmVTY29wZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHN0YWdlQnVpbGRlci5hZGRTdGFnZXModGhpcy5waXBlbGluZSwgcHJvcHMuc3RhZ2VzKTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIFRhZ3Mg4pSA4pSAXG4gICAgICAvLyBUaGUgZmlyc3QgdGhyZWUgYXJlIG9wZXJhdGlvbnMtZXNzZW50aWFsIGFuZCB1c2VkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyXG4gICAgICAvLyBhdWRpdCBzdGFja3NgIHRvIGRpZmYgQ0ZOIHN0YWNrcyBhZ2FpbnN0IHRoZSBwaXBlbGluZV9yZWdpc3RyeSB0YWJsZS5cbiAgICAgIC8vIGBPcmdJZGAgaXMgdGhlIGNhbm9uaWNhbCBrZXkgZm9yIGNvc3QgYXR0cmlidXRpb24gKEFXUyBDb3N0IEV4cGxvcmVyXG4gICAgICAvLyBncm91cHMgYnkgdGFnIGtleS92YWx1ZSB3aGVuIGFjdGl2YXRlZCBpbiBCaWxsaW5nIHNldHRpbmdzKS5cbiAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdwaXBlbGluZS1idWlsZGVyJywgJ3RydWUnKTtcbiAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdwcm9qZWN0JywgdGhpcy5jb25maWcucHJvamVjdCk7XG4gICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnb3JnYW5pemF0aW9uJywgdGhpcy5jb25maWcub3JnYW5pemF0aW9uKTtcbiAgICAgIGlmIChwcm9wcy5vcmdJZCkge1xuICAgICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnT3JnSWQnLCBwcm9wcy5vcmdJZCk7XG4gICAgICB9XG4gICAgICAvLyBTdGFibGUgZXZlbnQtcmVwb3J0aW5nIGtleS4gQXBwbGllZCBhdCBzeW50aCAodGhlIHBpcGVsaW5lSWQgaXMga25vd25cbiAgICAgIC8vIGhlcmUpLCBzbyBpdCdzIHByZXNlbnQgZnJvbSBzdGFjayBjcmVhdGlvbiDigJQgdGhlIGV2ZW50cyBMYW1iZGEgcmVhZHMgdGhpc1xuICAgICAgLy8gdGFnIHRvIGF0dHJpYnV0ZSBDb2RlUGlwZWxpbmUgc3RhdGUtY2hhbmdlIGV2ZW50cyB0byB0aGUgcGlwZWxpbmUgd2l0aG91dFxuICAgICAgLy8gZXZlciBoYW5kbGluZyB0aGUgQVJOL2FjY291bnQuIFNlZSBwYWNrYWdlcy9waXBlbGluZS1ldmVudHMuXG4gICAgICBpZiAocHJvcHMucGlwZWxpbmVJZCkge1xuICAgICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgncGIucGlwZWxpbmUtaWQnLCBwcm9wcy5waXBlbGluZUlkKTtcbiAgICAgIH1cbiAgICAgIC8vIERlcGxveS1lbnZpcm9ubWVudCBhdHRyaWJ1dGlvbiBmb3IgRE9SQSBtZXRyaWNzLiBgcGIuZGVwbG95c2AgbGlzdHMgZXZlcnlcbiAgICAgIC8vIGRlcGxveSBzdGFnZSBhcyBgPHN0YWdlTmFtZT46PGVudmlyb25tZW50PmAgcGFpcnMgam9pbmVkIGJ5IGArYCwgcmVhZCBieVxuICAgICAgLy8gdGhlIGV2ZW50cyBMYW1iZGEgZnJvbSB0aGUgc2FtZSBMaXN0VGFncyBjYWxsIHRvIG1hcmsgd2hpY2ggc3RhZ2VzIGFyZVxuICAgICAgLy8gZGVwbG95cyBhbmQgdG8gd2hpY2ggZW52aXJvbm1lbnQuIEFic2VudCB3aGVuIG5vIGVudmlyb25tZW50IGlzIGRlY2xhcmVkXG4gICAgICAvLyDigJQgc3VjaCBwaXBlbGluZXMgcHJvZHVjZSBubyBET1JBIGRlcGxveSBzaWduYWwgdW50aWwgdGhleSByZS1zeW50aC5cbiAgICAgIGNvbnN0IGRlcGxveXNUYWcgPSBidWlsZERlcGxveXNUYWcocHJvcHMpO1xuICAgICAgaWYgKGRlcGxveXNUYWcpIHtcbiAgICAgICAgVGFncy5vZih0aGlzLnBpcGVsaW5lKS5hZGQoJ3BiLmRlcGxveXMnLCBkZXBsb3lzVGFnKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy50YWdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzLnRhZ3MpKSB7XG4gICAgICAgICAgVGFncy5vZih0aGlzLnBpcGVsaW5lKS5hZGQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgdGhlIGludGVybmFsIHBpcGVsaW5lIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIHByb3BlcnRpZXNcbiAgICAgIHRoaXMucGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuICAgICAgY29uc3QgY2RrUGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lLnBpcGVsaW5lO1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZDtcblxuICAgICAgLy8g4pSA4pSAIFBpcGVsaW5lLWxldmVsIFZhcmlhYmxlcyAoQ29kZVBpcGVsaW5lIFYyKSDilIDilIBcbiAgICAgIGZvciAoY29uc3QgdiBvZiBwYXJzZVBpcGVsaW5lVmFyaWFibGVzKG1ldGFbTWV0YWRhdGFLZXlzLlBJUEVMSU5FX1ZBUklBQkxFU10pKSB7XG4gICAgICAgIGNka1BpcGVsaW5lLmFkZFZhcmlhYmxlKG5ldyBWYXJpYWJsZSh7XG4gICAgICAgICAgdmFyaWFibGVOYW1lOiB2Lm5hbWUsXG4gICAgICAgICAgLi4uKHYuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgeyBkZWZhdWx0VmFsdWU6IHYuZGVmYXVsdFZhbHVlIH0pLFxuICAgICAgICAgIC4uLih2LmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYgeyBkZXNjcmlwdGlvbjogdi5kZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICAvLyDilIDilIAgU05TIE5vdGlmaWNhdGlvbnMg4pSA4pSAXG4gICAgICBjb25zdCBub3RpZmljYXRpb25Ub3BpY0FybiA9IG1ldGFbTWV0YWRhdGFLZXlzLk5PVElGSUNBVElPTl9UT1BJQ19BUk5dO1xuICAgICAgaWYgKHR5cGVvZiBub3RpZmljYXRpb25Ub3BpY0FybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgdG9waWMgPSBzbnMuVG9waWMuZnJvbVRvcGljQXJuKHRoaXMsICdOb3RpZmljYXRpb25Ub3BpYycsIG5vdGlmaWNhdGlvblRvcGljQXJuKTtcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uRXZlbnRzID0gcGFyc2VOb3RpZmljYXRpb25FdmVudHMobWV0YVtNZXRhZGF0YUtleXMuTk9USUZJQ0FUSU9OX0VWRU5UU10pXG4gICAgICAgICAgLm1hcChlID0+IFBJUEVMSU5FX0VWRU5UX01BUFtlLnRvVXBwZXJDYXNlKCldKVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgIGlmIChub3RpZmljYXRpb25FdmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNka1BpcGVsaW5lLm5vdGlmeU9uKCdQaXBlbGluZU5vdGlmaWNhdGlvbicsIHRvcGljLCB7IGV2ZW50czogbm90aWZpY2F0aW9uRXZlbnRzIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIOKUgOKUgCBTY2hlZHVsZWQgRXhlY3V0aW9uIOKUgOKUgFxuICAgICAgaWYgKHByb3BzLnN5bnRoLnNvdXJjZS5vcHRpb25zPy50cmlnZ2VyID09PSBUcmlnZ2VyVHlwZS5TQ0hFRFVMRSB8fCBwcm9wcy5zY2hlZHVsZSkge1xuICAgICAgICBjb25zdCBleHByID0gcHJvcHMuc2NoZWR1bGUgfHwgKHByb3BzLnN5bnRoLnNvdXJjZS5vcHRpb25zIGFzIHsgc2NoZWR1bGU/OiBzdHJpbmcgfSk/LnNjaGVkdWxlIHx8ICdyYXRlKDEgZGF5KSc7XG4gICAgICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnU2NoZWR1bGVSdWxlJywge1xuICAgICAgICAgIHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUuZXhwcmVzc2lvbihleHByKSxcbiAgICAgICAgICB0YXJnZXRzOiBbbmV3IHRhcmdldHMuQ29kZVBpcGVsaW5lKGNka1BpcGVsaW5lKV0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyDilIDilIAgRXhlY3V0aW9uIEV2ZW50IFRyYWNraW5nIChmb3J3YXJkIHBpcGVsaW5lIHN0YXRlIGNoYW5nZXMgdG8gU05TKSDilIDilIBcbiAgICAgIGlmIChtZXRhW01ldGFkYXRhS2V5cy5FTkFCTEVfRVhFQ1VUSU9OX0VWRU5UU10gJiYgdHlwZW9mIG5vdGlmaWNhdGlvblRvcGljQXJuID09PSAnc3RyaW5nJykge1xuICAgICAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ0V4ZWN1dGlvbkV2ZW50UnVsZScsIHtcbiAgICAgICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgICAgIHNvdXJjZTogWydhd3MuY29kZXBpcGVsaW5lJ10sXG4gICAgICAgICAgICBkZXRhaWxUeXBlOiBbJ0NvZGVQaXBlbGluZSBQaXBlbGluZSBFeGVjdXRpb24gU3RhdGUgQ2hhbmdlJ10sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtjZGtQaXBlbGluZS5waXBlbGluZUFybl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0YXJnZXRzOiBbbmV3IHRhcmdldHMuU25zVG9waWMoXG4gICAgICAgICAgICBzbnMuVG9waWMuZnJvbVRvcGljQXJuKHRoaXMsICdFeGVjdXRpb25FdmVudFRvcGljJywgbm90aWZpY2F0aW9uVG9waWNBcm4pLFxuICAgICAgICAgICldLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIFBpcGVsaW5lIE1ldHJpY3MgJiBBbGFybXMg4pSA4pSAXG4gICAgICBjb25zdCBlbmFibGVNZXRyaWNzID0gdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkW01ldGFkYXRhS2V5cy5FTkFCTEVfTUVUUklDU107XG4gICAgICBpZiAoZW5hYmxlTWV0cmljcykge1xuICAgICAgICBuZXcgY2xvdWR3YXRjaC5BbGFybSh0aGlzLCAnUGlwZWxpbmVGYWlsdXJlQWxhcm0nLCB7XG4gICAgICAgICAgbWV0cmljOiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgICAgICAgbmFtZXNwYWNlOiAnQVdTL0NvZGVQaXBlbGluZScsXG4gICAgICAgICAgICBtZXRyaWNOYW1lOiAnRmFpbGVkUGlwZWxpbmVFeGVjdXRpb25Db3VudCcsXG4gICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7IFBpcGVsaW5lTmFtZTogdGhpcy5jb25maWcucGlwZWxpbmVOYW1lIH0sXG4gICAgICAgICAgICBzdGF0aXN0aWM6ICdTdW0nLFxuICAgICAgICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBgUGlwZWxpbmUgJHt0aGlzLmNvbmZpZy5waXBlbGluZU5hbWV9IGV4ZWN1dGlvbiBmYWlsZWRgLFxuICAgICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBjbG91ZHdhdGNoLlRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFJldmVydCB0aGUgcGVyLWJ1aWxkZXIgcmVnaXN0cnkgb3ZlcnJpZGUgc28gaXQgbmV2ZXIgbGVha3MgaW50byB0aGVcbiAgICAgIC8vIHByb2Nlc3Mtd2lkZSBDb25maWcgY2FjaGUgKHNlZSB0aGUgb3ZlcnJpZGUgYXQgdGhlIHRvcCBvZiB0aGUgY29uc3RydWN0b3IpLlxuICAgICAgcmVzdG9yZVJlZ2lzdHJ5Py4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjdXN0b20gYXJ0aWZhY3QgYnVja2V0IHdoZW4gYGVuY3J5cHRpb24ua21zS2V5QXJuYCBhbmQvb3JcbiAgICogYG9wZXJhdGlvbnMuYXJ0aWZhY3RSZXRlbnRpb25EYXlzYCBhcmUgc2V0LiBSZXR1cm5zIHVuZGVmaW5lZCBvdGhlcndpc2Ugc29cbiAgICogQ0RLIGF1dG8tY3JlYXRlcyB0aGUgZGVmYXVsdCBhcnRpZmFjdCBidWNrZXQgKHVuY2hhbmdlZCBiZWhhdmlvcikuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQXJ0aWZhY3RCdWNrZXQoKTogczMuSUJ1Y2tldCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZDtcbiAgICBjb25zdCBrbXNLZXlBcm4gPSB0eXBlb2YgbWV0YVtNZXRhZGF0YUtleXMuS01TX0tFWV9BUk5dID09PSAnc3RyaW5nJ1xuICAgICAgPyAobWV0YVtNZXRhZGF0YUtleXMuS01TX0tFWV9BUk5dIGFzIHN0cmluZylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJldGVudGlvbkRheXMgPSBhc0ludChtZXRhW01ldGFkYXRhS2V5cy5BUlRJRkFDVF9SRVRFTlRJT05fREFZU10pO1xuXG4gICAgaWYgKCFrbXNLZXlBcm4gJiYgcmV0ZW50aW9uRGF5cyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9IGttc0tleUFyblxuICAgICAgPyBrbXMuS2V5LmZyb21LZXlBcm4odGhpcywgJ0FydGlmYWN0S2V5Jywga21zS2V5QXJuKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBidWNrZXQgPSBuZXcgczMuQnVja2V0KHRoaXMsICdBcnRpZmFjdEJ1Y2tldCcsIHtcbiAgICAgIGVuY3J5cHRpb246IGVuY3J5cHRpb25LZXkgPyBzMy5CdWNrZXRFbmNyeXB0aW9uLktNUyA6IHMzLkJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgIC4uLihlbmNyeXB0aW9uS2V5ICYmIHsgZW5jcnlwdGlvbktleSB9KSxcbiAgICAgIC4uLihyZXRlbnRpb25EYXlzICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBsaWZlY3ljbGVSdWxlczogW3sgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cyhyZXRlbnRpb25EYXlzKSB9XSxcbiAgICAgIH0pLFxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBzMy5CbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICB9KTtcbiAgICBUYWdzLm9mKGJ1Y2tldCkuYWRkKCdwaXBlbGluZScsIHRoaXMuY29uZmlnLnBpcGVsaW5lTmFtZSk7XG4gICAgcmV0dXJuIGJ1Y2tldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBDb2RlQnVpbGREZWZhdWx0cyBpbnRvIHRoZSBzaGFwZSBleHBlY3RlZCBieSBDREsncyBjb2RlQnVpbGREZWZhdWx0cy5cbiAgICogQ29tYmluZXMgbmV0d29yayBjb25maWcsIHNlY3VyaXR5IGdyb3VwcywgYW5kIHBpcGVsaW5lLWxldmVsIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKiAoUElQRUxJTkVfSUQsIEVYRUNVVElPTl9JRCwgUExBVEZPUk1fQkFTRV9VUkwpIGF2YWlsYWJsZSB0byBhbGwgQ29kZUJ1aWxkIGFjdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVEZWZhdWx0cyhcbiAgICBkZWZhdWx0czogQ29kZUJ1aWxkRGVmYXVsdHMgfCB1bmRlZmluZWQsXG4gICAgaWQ6IFVuaXF1ZUlkLFxuICAgIHBpcGVsaW5lSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBwbGF0Zm9ybVNlY3JldE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBwbGF0Zm9ybVVybDogc3RyaW5nLFxuICAgIG9yZ0lkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICk6IENvZGVCdWlsZE9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgIC8vIFBlci1waXBlbGluZSBuZXR3b3JrIGNvbmZpZyB3aW5zOyBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGFuIGVudi1kcml2ZW5cbiAgICAvLyBnbG9iYWwgVlBDIChpbnRlcm5hbCAvIGluc2lkZS1BV1Mtb25seSBtb2RlKSBzbyBldmVyeSBwaXBlbGluZSdzXG4gICAgLy8gQ29kZUJ1aWxkIHJ1bnMgaW4gdGhlIFZQQyBhbmQgY2FuIHJlYWNoIHRoZSBwcml2YXRlIGdhdGV3YXkuIFVuc2V0IGluXG4gICAgLy8gcHVibGljIGRlcGxveXMg4oaSIENvZGVCdWlsZCBzdGF5cyBpbiB0aGUgQVdTLW1hbmFnZWQgbmV0d29yay5cbiAgICAvLyBQcmVjZWRlbmNlOiBleHBsaWNpdCBwcm9wID4gYGVjMjpuZXR3b3JrYCBtZXRhZGF0YSA+IGVudi1kcml2ZW4gZ2xvYmFsIFZQQy5cbiAgICBjb25zdCBuZXR3b3JrID0gZGVmYXVsdHM/Lm5ldHdvcmsgPz8gbmV0d29ya0NvbmZpZ0Zyb21NZXRhZGF0YSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpID8/IG5ldHdvcmtDb25maWdGcm9tRW52KCk7XG4gICAgY29uc3QgbmV0d29ya1Byb3BzID0gbmV0d29ya1xuICAgICAgPyByZXNvbHZlTmV0d29yayh0aGlzLCBpZCwgbmV0d29yaylcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gU2FtZSBwcmVjZWRlbmNlIGZvciBzdGFuZGFsb25lIHNlY3VyaXR5IGdyb3VwcyAocHJvcCA+IGBlYzI6c2VjdXJpdHlncm91cGAgbWV0YWRhdGEpLlxuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXBDb25maWcgPSBkZWZhdWx0cz8uc2VjdXJpdHlHcm91cHMgPz8gc2VjdXJpdHlHcm91cENvbmZpZ0Zyb21NZXRhZGF0YSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpO1xuICAgIGNvbnN0IHN0YW5kYWxvbmVTZWN1cml0eUdyb3VwcyA9IHNlY3VyaXR5R3JvdXBDb25maWdcbiAgICAgID8gcmVzb2x2ZVNlY3VyaXR5R3JvdXAodGhpcywgaWQsIHNlY3VyaXR5R3JvdXBDb25maWcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIFBpcGVsaW5lLWxldmVsIGVudiB2YXJzIGF2YWlsYWJsZSB0byBhbGwgQ29kZUJ1aWxkIGFjdGlvbnNcbiAgICAvLyBOb3RlOiAje2NvZGVwaXBlbGluZS4qfSByZXNvbHZlZCB2YXJpYWJsZXMgbXVzdCBnbyB0aHJvdWdoIENvZGVCdWlsZFN0ZXAuZW52XG4gICAgLy8gKGFjdGlvbi1sZXZlbCksIG5vdCBidWlsZEVudmlyb25tZW50LmVudmlyb25tZW50VmFyaWFibGVzIChwcm9qZWN0LWxldmVsKS5cbiAgICBjb25zdCBwaXBlbGluZUVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHN0cmluZyB9PiA9IHtcbiAgICAgIFBMQVRGT1JNX0JBU0VfVVJMOiB7IHZhbHVlOiBwbGF0Zm9ybVVybCB9LFxuICAgICAgLi4uKHBpcGVsaW5lSWQgJiYgeyBQSVBFTElORV9JRDogeyB2YWx1ZTogcGlwZWxpbmVJZCB9IH0pLFxuICAgICAgLi4uKHBsYXRmb3JtU2VjcmV0TmFtZSAmJiB7IFBMQVRGT1JNX1NFQ1JFVF9OQU1FOiB7IHZhbHVlOiBwbGF0Zm9ybVNlY3JldE5hbWUgfSB9KSxcbiAgICAgIC8vIFByb3BhZ2F0ZSBUTFMgdmVyaWZpY2F0aW9uIHNldHRpbmcgc28gYWxsIENvZGVCdWlsZCBzdGVwcyBjYW4gcmVhY2hcbiAgICAgIC8vIHRoZSBwbGF0Zm9ybSBBUEkgd2hlbiB1c2luZyBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZXNcbiAgICAgIC4uLihwcm9jZXNzLmVudi5OT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEID09PSAnMCcgJiYge1xuICAgICAgICBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEOiB7IHZhbHVlOiAnMCcgfSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IFtcbiAgICAgIC4uLihuZXR3b3JrUHJvcHM/LnNlY3VyaXR5R3JvdXBzID8/IFtdKSxcbiAgICAgIC4uLihzdGFuZGFsb25lU2VjdXJpdHlHcm91cHMgPz8gW10pLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uKG5ldHdvcmtQcm9wcyAmJiB7IHZwYzogbmV0d29ya1Byb3BzLnZwYywgc3VibmV0U2VsZWN0aW9uOiBuZXR3b3JrUHJvcHMuc3VibmV0U2VsZWN0aW9uIH0pLFxuICAgICAgLi4uKHNlY3VyaXR5R3JvdXBzLmxlbmd0aCA+IDAgJiYgeyBzZWN1cml0eUdyb3VwcyB9KSxcbiAgICAgIC8vIGJ1aWxkSW1hZ2UgYXQgdGhpcyBsZXZlbCByZWFjaGVzIENESyBQaXBlbGluZXMnIGludGVybmFsbHktd3JhcHBlZFxuICAgICAgLy8gU2hlbGxTdGVwIENvZGVCdWlsZCBhY3Rpb24sIHdoaWNoIG90aGVyd2lzZSBoYXJkY29kZXNcbiAgICAgIC8vIENESydzIGRlZmF1bHQgY3VyYXRlZCBzdGFuZGFyZCBpbWFnZS4gU2V0dGluZyBpdCBoZXJlIGNsb3NlcyB0aGUgZ2FwXG4gICAgICAvLyBleHBvc2VkIGluIHRoZSBzYW1lIGVudiB2YXIgKGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRWApIHRoYXQgdGhlXG4gICAgICAvLyBDb2RlQnVpbGRTdGVwIHBhdGggYWxyZWFkeSBob25vcnMgdmlhIHJlc29sdmVQbHVnaW5JbWFnZSgpJ3NcbiAgICAgIC8vIGZhbGxiYWNrLiBQZXItc3RlcCBgYnVpbGRJbWFnZWAgb24gYSBDb2RlQnVpbGRTdGVwIHN0aWxsIHdpbnMuXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IHJlc29sdmVEZWZhdWx0QnVpbGRJbWFnZSh0aGlzLCBvcmdJZCksXG4gICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiBwaXBlbGluZUVudlZhcnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
482
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9waXBlbGluZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEtBQUssVUFBVSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEcsT0FBTyxLQUFLLE1BQU0sTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssT0FBTyxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUM7QUFDM0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6QyxPQUFPLEtBQUssR0FBRyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQXlCLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxhQUFh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LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHsgRHVyYXRpb24sIFJlbW92YWxQb2xpY3ksIFRhZ3MgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLCBQaXBlbGluZVR5cGUsIFZhcmlhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZSc7XG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0ICogYXMgc25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMnO1xuaW1wb3J0IHsgQ29kZVBpcGVsaW5lLCB0eXBlIENvZGVCdWlsZE9wdGlvbnMgfSBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBQaXBlbGluZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3BpcGVsaW5lLWNvbmZpZ3VyYXRpb24uanMnO1xuaW1wb3J0IHsgUGx1Z2luTG9va3VwIH0gZnJvbSAnLi9wbHVnaW4tbG9va3VwLmpzJztcbmltcG9ydCB7IFNvdXJjZUJ1aWxkZXIgfSBmcm9tICcuL3NvdXJjZS1idWlsZGVyLmpzJztcbmltcG9ydCB7IFN0YWdlQnVpbGRlciB9IGZyb20gJy4vc3RhZ2UtYnVpbGRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlT3B0aW9ucywgU3ludGhPcHRpb25zIH0gZnJvbSAnLi9zdGVwLXR5cGVzLmpzJztcbmltcG9ydCB7IENvbmZpZywgQ29yZUNvbnN0YW50cyB9IGZyb20gJy4uL2NvbmZpZy9hcHAtY29uZmlnLmpzJztcbmltcG9ydCB7IGxhbWJkYUFyY2hpdGVjdHVyZSwgbGFtYmRhUnVudGltZSwgbGFtYmRhVGltZW91dCB9IGZyb20gJy4uL2NvbmZpZy9hd3MtY29uZmlnLWNkay5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlZ2lzdHJ5Q29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL2NvbmZpZy10eXBlcy5qcyc7XG5pbXBvcnQgeyBBcnRpZmFjdE1hbmFnZXIsIHBsdWdpbkFydGlmYWN0QWxpYXMgfSBmcm9tICcuLi9jb3JlL2FydGlmYWN0LW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgVW5pcXVlSWQgfSBmcm9tICcuLi9jb3JlL2lkLWdlbmVyYXRvci5qcyc7XG5pbXBvcnQge1xuICBhc0ludCxcbiAgaXNUcnVlLFxuICBtZXRhZGF0YUZvckNvZGVQaXBlbGluZSxcbiAgbmV0d29ya0NvbmZpZ0Zyb21NZXRhZGF0YSxcbiAgcGFyc2VQaXBlbGluZVZhcmlhYmxlcyxcbiAgcm9sZUNvbmZpZ0Zyb21NZXRhZGF0YSxcbiAgc2VjdXJpdHlHcm91cENvbmZpZ0Zyb21NZXRhZGF0YSxcbn0gZnJvbSAnLi4vY29yZS9tZXRhZGF0YS1idWlsZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgQ29kZUJ1aWxkRGVmYXVsdHMgfSBmcm9tICcuLi9jb3JlL25ldHdvcmstdHlwZXMuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZU5ldHdvcmssIG5ldHdvcmtDb25maWdGcm9tRW52IH0gZnJvbSAnLi4vY29yZS9uZXR3b3JrLmpzJztcbmltcG9ydCB7IGNyZWF0ZUNvZGVCdWlsZFN0ZXAsIGdldENvbXB1dGVUeXBlLCByZXNvbHZlRGVmYXVsdEJ1aWxkSW1hZ2UgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLWhlbHBlcnMuanMnO1xuaW1wb3J0IHsgTWV0YWRhdGFLZXlzLCBUcmlnZ2VyVHlwZSB9IGZyb20gJy4uL2NvcmUvcGlwZWxpbmUtdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRhRGF0YVR5cGUgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLXR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUm9sZUNvbmZpZyB9IGZyb20gJy4uL2NvcmUvcm9sZS10eXBlcy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlUm9sZSB9IGZyb20gJy4uL2NvcmUvcm9sZS5qcyc7XG5pbXBvcnQgeyByZXNvbHZlU2VjdXJpdHlHcm91cCB9IGZyb20gJy4uL2NvcmUvc2VjdXJpdHktZ3JvdXAuanMnO1xuXG5jb25zdCBQSVBFTElORV9FVkVOVF9NQVA6IFJlY29yZDxzdHJpbmcsIFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzPiA9IHtcbiAgRkFJTEVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fRkFJTEVELFxuICBTVUNDRUVERUQ6IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9TVUNDRUVERUQsXG4gIFNUQVJURUQ6IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9TVEFSVEVELFxuICBDQU5DRUxFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX0NBTkNFTEVELFxuICBTVVBFUlNFREVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fU1VQRVJTRURFRCxcbn07XG5cbmZ1bmN0aW9uIHBhcnNlTm90aWZpY2F0aW9uRXZlbnRzKHZhbHVlOiB1bmtub3duKTogc3RyaW5nW10ge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiB2YWx1ZS5zcGxpdCgnLCcpLm1hcChzID0+IHMudHJpbSgpKTtcbiAgcmV0dXJuIFsnRkFJTEVEJywgJ1NVQ0NFRURFRCddO1xufVxuXG4vKipcbiAqIFNhbml0aXplIGEgc2luZ2xlIGBwYi5kZXBsb3lzYCB0b2tlbiAoc3RhZ2UgbmFtZSBvciBlbnZpcm9ubWVudCkgdG9cbiAqIENvZGVQaXBlbGluZS10YWctc2FmZSBjaGFyYWN0ZXJzLiBgOmAgYW5kIGArYCBhcmUgdGhlIHBhaXIvbGlzdCBkZWxpbWl0ZXJzLCBzb1xuICogdGhleSAoYW5kIGFueSBvdGhlciBkaXNhbGxvd2VkIGNoYXIpIGFyZSBzdHJpcHBlZCB0byBgLWAgaW5zaWRlIGEgdG9rZW4gdG9cbiAqIGtlZXAgdGhlIHZhbHVlIHVuYW1iaWd1b3VzbHkgcGFyc2VhYmxlIGFuZCBKU09OLWZyZWUuXG4gKi9cbmZ1bmN0aW9uIHRhZ1NhZmVUb2tlbih2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1teQS1aYS16MC05Ll8vQD0tXS9nLCAnLScpO1xufVxuXG4vKiogQVdTIHRhZy12YWx1ZSBoYXJkIGxpbWl0OyBgcGIuZGVwbG95c2AgbXVzdCBuZXZlciBleGNlZWQgdGhpcy4gKi9cbmNvbnN0IE1BWF9UQUdfVkFMVUVfTEVOR1RIID0gMjU2O1xuXG4vKiogQSByZXNvbHZlZCBkZXBsb3kgYXR0cmlidXRpb246IGEgc2FuaXRpemVkIGA8c3RhZ2U+OjxlbnY+YCB0b2tlbiBwbHVzIGl0cyBlbnYuICovXG5pbnRlcmZhY2UgRGVwbG95UGFpciB7XG4gIHJlYWRvbmx5IHN0cjogc3RyaW5nO1xuICByZWFkb25seSBlbnY6IHN0cmluZztcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgYHBiLmRlcGxveXNgIHRhZyB2YWx1ZTogYDxzdGFnZT46PGVudj5gIHBhaXJzIGpvaW5lZCBieSBgK2AuXG4gKlxuICogQSBzdGFnZSBpcyBhIGRlcGxveSBpZmYgaXQgZGVjbGFyZXMgYW4gYGVudmlyb25tZW50YC4gUHJlY2VkZW5jZTpcbiAqICAtIE11bHRpLWVudjogYW55IHN0YWdlIHdpdGggYSBwZXItc3RhZ2UgYGVudmlyb25tZW50YCDigJQgbGlzdCBlYWNoIHN1Y2ggc3RhZ2UuXG4gKiAgLSBTaW5nbGUtZW52OiBubyBwZXItc3RhZ2UgZW52aXJvbm1lbnQgYnV0IGEgcGlwZWxpbmUtbGV2ZWwgYGVudmlyb25tZW50YCDigJRcbiAqICAgIGF0dHJpYnV0ZSBpdCB0byB0aGUgc29sZSBzdGFnZSAoYDxvbmx5U3RhZ2U+OjxlbnY+YCksIHRoZSBMQVNUIHN0YWdlIG9mIGFcbiAqICAgIG11bHRpLXN0YWdlIHBpcGVsaW5lIChkZXBsb3lzIGFyZSBjb252ZW50aW9uYWxseSB0aGUgZmluYWwgc3RhZ2Ug4oCUIGVtaXR0ZWRcbiAqICAgIHdpdGggYSBzeW50aCB3YXJuaW5nIHJlY29tbWVuZGluZyBleHBsaWNpdCBwZXItc3RhZ2UgYGVudmlyb25tZW50YCksIG9yIGFcbiAqICAgIGxpdGVyYWwgYERlcGxveTo8ZW52PmAgd2hlbiB0aGVyZSBhcmUgbm8gc3RhZ2VzIHRvIG5hbWUuXG4gKlxuICogVGhlIGFzc2VtYmxlZCB2YWx1ZSBpcyBjYXBwZWQgYXQgQVdTJ3MgMjU2LWNoYXIgdGFnLXZhbHVlIGxpbWl0IChENik6IHRoZVxuICogaGVhZGxpbmUvcHJvZHVjdGlvbiBwYWlyIGlzIGtlcHQgZmlyc3QgYW5kIHRyYWlsaW5nIG92ZXJmbG93IHBhaXJzIGFyZSBkcm9wcGVkXG4gKiB3aXRoIGEgc3ludGggd2FybmluZyBuYW1pbmcgdGhlbS4gTmV2ZXIgcmV0dXJucyBhIHZhbHVlIGxvbmdlciB0aGFuIDI1NiBjaGFycy5cbiAqXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIG5vdGhpbmcgZGVjbGFyZXMgYW4gZW52aXJvbm1lbnQgKG5vIGRlcGxveSBzaWduYWwpLlxuICovXG5mdW5jdGlvbiBidWlsZERlcGxveXNUYWcocHJvcHM6IEJ1aWxkZXJQcm9wcyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHN0YWdlcyA9IHByb3BzLnN0YWdlcyA/PyBbXTtcbiAgY29uc3Qgc3RhZ2VzV2l0aEVudiA9IHN0YWdlcy5maWx0ZXIocyA9PiB0eXBlb2Ygcy5lbnZpcm9ubWVudCA9PT0gJ3N0cmluZycgJiYgcy5lbnZpcm9ubWVudC5sZW5ndGggPiAwKTtcblxuICBsZXQgcGFpcnM6IERlcGxveVBhaXJbXTtcbiAgaWYgKHN0YWdlc1dpdGhFbnYubGVuZ3RoID4gMCkge1xuICAgIHBhaXJzID0gc3RhZ2VzV2l0aEVudi5tYXAocyA9PiAoe1xuICAgICAgc3RyOiBgJHt0YWdTYWZlVG9rZW4ocy5zdGFnZU5hbWUpfToke3RhZ1NhZmVUb2tlbihzLmVudmlyb25tZW50IGFzIHN0cmluZyl9YCxcbiAgICAgIGVudjogcy5lbnZpcm9ubWVudCBhcyBzdHJpbmcsXG4gICAgfSkpO1xuICB9IGVsc2UgaWYgKHByb3BzLmVudmlyb25tZW50KSB7XG4gICAgbGV0IHN0YWdlTmFtZTogc3RyaW5nO1xuICAgIGlmIChzdGFnZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICBzdGFnZU5hbWUgPSBzdGFnZXNbMF0uc3RhZ2VOYW1lO1xuICAgIH0gZWxzZSBpZiAoc3RhZ2VzLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIFBpcGVsaW5lLWxldmVsIGVudmlyb25tZW50IG9uIGEgbXVsdGktc3RhZ2UgcGlwZWxpbmU6IGF0dHJpYnV0ZSBpdCB0byB0aGVcbiAgICAgIC8vIExBU1Qgc3RhZ2UgKGRlcGxveXMgYXJlIGNvbnZlbnRpb25hbGx5IGZpbmFsKSByYXRoZXIgdGhhbiBhbiB1bm1hdGNoZWRcbiAgICAgIC8vIGxpdGVyYWwgYERlcGxveWAuIFdhcm4gc28gYXV0aG9ycyBtb3ZlIHRvIGV4cGxpY2l0IHBlci1zdGFnZSBgZW52aXJvbm1lbnRgLlxuICAgICAgc3RhZ2VOYW1lID0gc3RhZ2VzW3N0YWdlcy5sZW5ndGggLSAxXS5zdGFnZU5hbWU7XG4gICAgICBjcmVhdGVMb2dnZXIoJ3BpcGVsaW5lLWJ1aWxkZXInKS53YXJuKFxuICAgICAgICBgUGlwZWxpbmUtbGV2ZWwgZW52aXJvbm1lbnQgXCIke3Byb3BzLmVudmlyb25tZW50fVwiIGF0dHJpYnV0ZWQgdG8gdGhlIGxhc3Qgc3RhZ2UgYCArXG4gICAgICAgIGBcIiR7c3RhZ2VOYW1lfVwiIG9mIGEgJHtzdGFnZXMubGVuZ3RofS1zdGFnZSBwaXBlbGluZS4gRGVjbGFyZSBhIHBlci1zdGFnZSBgICtcbiAgICAgICAgJ2BlbnZpcm9ubWVudGAgb24gdGhlIGFjdHVhbCBkZXBsb3kgc3RhZ2UocykgZm9yIHByZWNpc2UgRE9SQSBhdHRyaWJ1dGlvbi4nLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhZ2VOYW1lID0gJ0RlcGxveSc7XG4gICAgfVxuICAgIHBhaXJzID0gW3sgc3RyOiBgJHt0YWdTYWZlVG9rZW4oc3RhZ2VOYW1lKX06JHt0YWdTYWZlVG9rZW4ocHJvcHMuZW52aXJvbm1lbnQpfWAsIGVudjogcHJvcHMuZW52aXJvbm1lbnQgfV07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBjYXBEZXBsb3lzVmFsdWUocGFpcnMpO1xufVxuXG4vKipcbiAqIEpvaW4gYHBiLmRlcGxveXNgIHBhaXJzIHdpdGggYCtgLCBjYXBwZWQgYXQge0BsaW5rIE1BWF9UQUdfVkFMVUVfTEVOR1RIfS4gV2hlblxuICogdGhlIGZ1bGwgdmFsdWUgd291bGQgZXhjZWVkIHRoZSBjYXAsIHRoZSBoZWFkbGluZS9wcm9kdWN0aW9uIHBhaXIgaXMgcGxhY2VkXG4gKiBmaXJzdCBhbmQgb25seSB0aGUgbGVhZGluZyBwYWlycyB0aGF0IGZpdCBhcmUga2VwdDsgdGhlIHRyYWlsaW5nIG92ZXJmbG93IHBhaXJzXG4gKiBhcmUgZHJvcHBlZCBhbmQgbmFtZWQgaW4gYSBzeW50aCB3YXJuaW5nLiBOZXZlciBlbWl0cyBtb3JlIHRoYW4gMjU2IGNoYXJzLlxuICovXG5mdW5jdGlvbiBjYXBEZXBsb3lzVmFsdWUocGFpcnM6IERlcGxveVBhaXJbXSk6IHN0cmluZyB7XG4gIGNvbnN0IGZ1bGwgPSBwYWlycy5tYXAocCA9PiBwLnN0cikuam9pbignKycpO1xuICBpZiAoZnVsbC5sZW5ndGggPD0gTUFYX1RBR19WQUxVRV9MRU5HVEgpIHJldHVybiBmdWxsO1xuXG4gIC8vIFByaW9yaXRpemUgdGhlIGhlYWRsaW5lIHBhaXIg4oCUIHRoZSBwcm9kdWN0aW9uIGRlcGxveSBpZiBwcmVzZW50LCBlbHNlIHRoZVxuICAvLyBmaXJzdCBwYWlyIOKAlCBzbyBhIGNhcCBuZXZlciBkcm9wcyB0aGUgbW9zdCBvcGVyYXRpb25hbGx5LXNpZ25pZmljYW50IGRlcGxveS5cbiAgY29uc3QgaGVhZGxpbmVJZHggPSBwYWlycy5maW5kSW5kZXgocCA9PiBwLmVudi50b0xvd2VyQ2FzZSgpID09PSAncHJvZHVjdGlvbicpO1xuICBjb25zdCBvcmRlcmVkID0gaGVhZGxpbmVJZHggPiAwXG4gICAgPyBbcGFpcnNbaGVhZGxpbmVJZHhdLCAuLi5wYWlycy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGhlYWRsaW5lSWR4KV1cbiAgICA6IHBhaXJzO1xuXG4gIGNvbnN0IGtlcHQ6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGRyb3BwZWQ6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgcCBvZiBvcmRlcmVkKSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0ga2VwdC5sZW5ndGggPT09IDAgPyBwLnN0ciA6IGAke2tlcHQuam9pbignKycpfSske3Auc3RyfWA7XG4gICAgaWYgKGNhbmRpZGF0ZS5sZW5ndGggPD0gTUFYX1RBR19WQUxVRV9MRU5HVEgpIHtcbiAgICAgIGtlcHQucHVzaChwLnN0cik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyb3BwZWQucHVzaChwLnN0cik7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlTG9nZ2VyKCdwaXBlbGluZS1idWlsZGVyJykud2FybihcbiAgICBgcGIuZGVwbG95cyB0YWcgdmFsdWUgZXhjZWVkZWQgdGhlICR7TUFYX1RBR19WQUxVRV9MRU5HVEh9LWNoYXIgQVdTIHRhZy12YWx1ZSBsaW1pdDsgYCArXG4gICAgYGRyb3BwZWQgJHtkcm9wcGVkLmxlbmd0aH0gZGVwbG95IHBhaXIocyk6ICR7ZHJvcHBlZC5qb2luKCcsICcpfS4gYCArXG4gICAgJ1RoZXNlIGVudmlyb25tZW50cyB3aWxsIG5vdCBwcm9kdWNlIERPUkEgZGVwbG95IHNpZ25hbHMg4oCUIHJlZHVjZSBzdGFnZS9lbnZpcm9ubWVudCAnICtcbiAgICAnbmFtZSBsZW5ndGhzIG9yIHNwbGl0IGludG8gc2VwYXJhdGUgcGlwZWxpbmVzLicsXG4gICk7XG4gIHJldHVybiBrZXB0LmpvaW4oJysnKTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBQaXBlbGluZUJ1aWxkZXIgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclByb3BzIHtcbiAgLyoqIFByb2plY3QgaWRlbnRpZmllciAod2lsbCBiZSBzYW5pdGl6ZWQgdG8gbG93ZXJjYXNlIGFscGhhbnVtZXJpYyB3aXRoIHVuZGVyc2NvcmVzKSAqL1xuICByZWFkb25seSBwcm9qZWN0OiBzdHJpbmc7XG5cbiAgLyoqIE9yZ2FuaXphdGlvbiBpZGVudGlmaWVyICh3aWxsIGJlIHNhbml0aXplZCB0byBsb3dlcmNhc2UgYWxwaGFudW1lcmljIHdpdGggdW5kZXJzY29yZXMpICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXBsb3kgZW52aXJvbm1lbnQgKGUuZy4gYHByb2R1Y3Rpb25gLCBgc3RhZ2luZ2ApIGZvciB0aGVcbiAgICogc2luZ2xlLWVudmlyb25tZW50IGNhc2UuIFdoZW4gc2V0IChhbmQgbm8gc3RhZ2UgZGVjbGFyZXMgaXRzIG93blxuICAgKiBgZW52aXJvbm1lbnRgKSwgcGlwZWxpbmUtY29yZSBkZXJpdmVzIHRoZSBgcGIuZGVwbG95c2AgdGFnIGZyb20gaXQsIG1hcmtpbmdcbiAgICogdGhlIHNvbGUgc3RhZ2Ug4oCUIG9yIHRoZSBMQVNUIHN0YWdlIG9mIGEgbXVsdGktc3RhZ2UgcGlwZWxpbmUgKHdpdGggYSBzeW50aFxuICAgKiB3YXJuaW5nKSwgb3IgYSBsaXRlcmFsIGBEZXBsb3lgIHN0YWdlIHdoZW4gdGhlcmUgYXJlIG5vIHN0YWdlcyB0byBuYW1lIOKAlCBhc1xuICAgKiB0aGUgZGVwbG95IGZvciBET1JBIG1ldHJpY3MuIEZvciBtdWx0aS1lbnZpcm9ubWVudCBwaXBlbGluZXMsIGRlY2xhcmVcbiAgICogYGVudmlyb25tZW50YCBwZXIgc3RhZ2UgaW5zdGVhZCAoc2VlIGBTdGFnZU9wdGlvbnMuZW52aXJvbm1lbnRgKS5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50Pzogc3RyaW5nO1xuXG4gIC8qKiBUZW5hbnQgaWRlbnRpZmllciBmb3IgcmVzb2x2aW5nIHBlci1vcmcgc2VjcmV0cyBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKi9cbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG5cbiAgLyoqIFBpcGVsaW5lIGRhdGFiYXNlIHJlY29yZCBJRCDigJQgaW5qZWN0ZWQgYXMgUElQRUxJTkVfSUQgZW52IHZhciBmb3IgYXV0b25vbW91cyBzeW50aCAqL1xuICByZWFkb25seSBwaXBlbGluZUlkPzogc3RyaW5nO1xuXG4gIC8qKiBPcHRpb25hbCBjdXN0b20gcGlwZWxpbmUgbmFtZS4gRGVmYXVsdHMgdG86IHtvcmdhbml6YXRpb259LXtwcm9qZWN0fS1waXBlbGluZSAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIEdsb2JhbCBtZXRhZGF0YSBpbmhlcml0ZWQgYnkgYWxsIHBpcGVsaW5lIHN0ZXBzICovXG4gIHJlYWRvbmx5IGdsb2JhbD86IE1ldGFEYXRhVHlwZTtcblxuICAvKipcbiAgICogUGlwZWxpbmUtbGV2ZWwgdGVtcGxhdGUgdmFyaWFibGVzLCBleHBvc2VkIHRvIGB7eyBwaXBlbGluZS52YXJzLiogfX1gIGluXG4gICAqIHBpcGVsaW5lIGNvbmZpZ3MgYW5kIHBsdWdpbiBzcGVjcyAoc2VlIGBQbHVnaW5TcGVjLnJlcXVpcmVkVmFyc2ApLiBEZWNsYXJlZFxuICAgKiBoZXJlIHNvIHRoZSBgcGlwZWxpbmUudmFyc2AgdGVtcGxhdGUgc2NvcGUgaXMgdHlwZS1jaGVja2VkIGVuZC10by1lbmQuXG4gICAqL1xuICByZWFkb25seSB2YXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lLWxldmVsIENvZGVCdWlsZCBkZWZhdWx0cyBhcHBsaWVkIHRvIGFsbCBDb2RlQnVpbGQgYWN0aW9uc1xuICAgKiAoc3ludGgsIHNlbGYtbXV0YXRpb24sIGFzc2V0IHB1Ymxpc2hpbmcpIHZpYSBgY29kZUJ1aWxkRGVmYXVsdHNgLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdHM/OiBDb2RlQnVpbGREZWZhdWx0cztcblxuICAvKipcbiAgICogT3B0aW9uYWwgSUFNIHJvbGUgZm9yIHRoZSBDb2RlUGlwZWxpbmUuXG4gICAqIFdoZW4gcHJvdmlkZWQsIHJlc29sdmVzIHRvIGEgQ0RLIElSb2xlIGFuZCBpcyBwYXNzZWQgdG8gdGhlIENvZGVQaXBlbGluZSBjb25zdHJ1Y3QuXG4gICAqIFdoZW4gb21pdHRlZCwgQ0RLIGF1dG8tY3JlYXRlcyBhIHJvbGUgd2l0aCB0aGUgY29ycmVjdCBjb2RlcGlwZWxpbmUuYW1hem9uYXdzLmNvbSBwcmluY2lwYWwuXG4gICAqL1xuICByZWFkb25seSByb2xlPzogUm9sZUNvbmZpZztcblxuICAvKiogU3ludGhlc2lzIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIHNvdXJjZSBhbmQgcGx1Z2luIGRldGFpbHMgKi9cbiAgcmVhZG9ubHkgc3ludGg6IFN5bnRoT3B0aW9ucztcblxuICAvKipcbiAgICogT3B0aW9uYWwgcGlwZWxpbmUgc3RhZ2VzLCBlYWNoIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgQ29kZUJ1aWxkIHN0ZXBzLlxuICAgKiBTdGFnZXMgYXJlIGFkZGVkIGFzIHdhdmVzIHRvIHRoZSBDb2RlUGlwZWxpbmUgYWZ0ZXIgdGhlIHN5bnRoIHN0ZXAuXG4gICAqL1xuICByZWFkb25seSBzdGFnZXM/OiBTdGFnZU9wdGlvbnNbXTtcblxuICAvKiogT3B0aW9uYWwgY3Jvbi9yYXRlIGV4cHJlc3Npb24gZm9yIHNjaGVkdWxlZCBwaXBlbGluZSBleGVjdXRpb24uICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlPzogc3RyaW5nO1xuXG4gIC8qKiBDdXN0b20gdGFncyBhcHBsaWVkIHRvIGFsbCBwaXBlbGluZSByZXNvdXJjZXMuICovXG4gIHJlYWRvbmx5IHRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBQbHVnaW5zIHByZS1yZXNvbHZlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aGAgZnJvbSB0aGUgcGxhdGZvcm0gQVBJLFxuICAgKiBrZXllZCBieSBgYWxpYXMgfHwgbmFtZWAuIFdoZW4gcHJlc2VudCwgYFBsdWdpbkxvb2t1cC5wbHVnaW4oKWAgcmV0dXJuc1xuICAgKiB0aGUgbWF0Y2hpbmcgZW50cnkgZGlyZWN0bHkgYW5kIHNraXBzIHRoZSBjdXN0b20gcmVzb3VyY2Ug4oCUIHNvIHRoZVxuICAgKiBzeW50aGVzaXplZCBDRk4gdGVtcGxhdGUgc2hpcHMgd2l0aCB0aGUgcmVhbCBDb2RlQnVpbGQgaW1hZ2UgYmFrZWQgaW4uXG4gICAqIFBvcHVsYXRlZCBieSB0aGUgQ0xJIGJlZm9yZSBpbnZva2luZyB0aGUgYm9pbGVycGxhdGUgYXBwOyBDREsgY29uc3VtZXJzXG4gICAqIHdobyBjb25zdHJ1Y3QgUGlwZWxpbmVCdWlsZGVyIGRpcmVjdGx5IG5vcm1hbGx5IGxlYXZlIHRoaXMgdW5zZXQuXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xuXG4gIC8qKlxuICAgKiBQbGF0Zm9ybS1zb3VyY2VkIHJlZ2lzdHJ5IG92ZXJyaWRlcywgYXBwbGllZCBvdmVyIHRoZSBlbnYtbG9hZGVkIGByZWdpc3RyeWBcbiAgICogY29uZmlnIGF0IHN5bnRoIHN0YXJ0LiBwaXBlbGluZS1tYW5hZ2VyIHBvcHVsYXRlcyB0aGlzIGZyb20gdGhlIHBsYXRmb3JtIFVSTFxuICAgKiBpdCBkZXBsb3lzIGFnYWluc3Qgc28gdGhlIENvZGVCdWlsZCBpbWFnZSBVUklzIHVzZSBhIHB1bGwgaG9zdCBBV1MgQ29kZUJ1aWxkXG4gICAqIGNhbiByZXNvbHZlIChpbnN0ZWFkIG9mIHRoZSBpbi1jbHVzdGVyIGByZWdpc3RyeTo1MDAwYCBkZWZhdWx0KS4gQ0RLXG4gICAqIGNvbnN1bWVycyBjb25zdHJ1Y3RpbmcgUGlwZWxpbmVCdWlsZGVyIGRpcmVjdGx5IG5vcm1hbGx5IGxlYXZlIHRoaXMgdW5zZXQuXG4gICAqL1xuICByZWFkb25seSByZWdpc3RyeT86IFBhcnRpYWw8UmVnaXN0cnlDb25maWc+O1xufVxuXG4vKipcbiAqIENESyBjb25zdHJ1Y3QgdGhhdCBjcmVhdGVzIGFuZCBjb25maWd1cmVzIGEgQ29kZVBpcGVsaW5lIGZvciBjb250aW51b3VzIGRlcGxveW1lbnQuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIE11bHRpLXNvdXJjZSBzdXBwb3J0IChTMywgR2l0SHViLCBDb2RlU3RhcilcbiAqIC0gUGx1Z2luLWJhc2VkIGJ1aWxkIHN0ZXBzXG4gKiAtIE1ldGFkYXRhLWRyaXZlbiBjb25maWd1cmF0aW9uXG4gKiAtIEF1dG9tYXRpYyB0YWdnaW5nXG4gKiAtIEF1dG9tYXRpYyBzYW5pdGl6YXRpb24gb2YgcHJvamVjdCBhbmQgb3JnYW5pemF0aW9uIG5hbWVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIG5ldyBQaXBlbGluZUJ1aWxkZXIodGhpcywgJ015UGlwZWxpbmUnLCB7XG4gKiAgIHByb2plY3Q6ICdteS1hcHAnLFxuICogICBvcmdhbml6YXRpb246ICdteS1vcmcnLFxuICogICBzeW50aDoge1xuICogICAgIHNvdXJjZToge1xuICogICAgICAgdHlwZTogJ2dpdGh1YicsXG4gKiAgICAgICBvcHRpb25zOiB7IHJlcG86ICdvd25lci9yZXBvJywgYnJhbmNoOiAnbWFpbicgfVxuICogICAgIH0sXG4gKiAgICAgcGx1Z2luOiB7IG5hbWU6ICdzeW50aCcgfVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVCdWlsZGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHBpcGVsaW5lOiBDb2RlUGlwZWxpbmU7XG4gIHB1YmxpYyByZWFkb25seSBjb25maWc6IFBpcGVsaW5lQ29uZmlndXJhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQnVpbGRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIEFwcGx5IHBsYXRmb3JtLXNvdXJjZWQgcmVnaXN0cnkgb3ZlcnJpZGVzIEJFRk9SRSBhbnkgQ29uZmlnLmdldCgncmVnaXN0cnknKVxuICAgIC8vIChwbHVnaW4vZGVmYXVsdCBidWlsZC1pbWFnZSByZXNvbHV0aW9uIGJlbG93KSBzbyB0aGUgc3ludGggdXNlcyB0aGUgcHVsbFxuICAgIC8vIGhvc3QgdGhlIHBsYXRmb3JtIGRlcGxveXMgYWdhaW5zdCwgbm90IHRoZSBpbi1jbHVzdGVyIGVudiBkZWZhdWx0LiBUaGUgQ0xJXG4gICAgLy8gb25seSBzZXRzIHByb3BzLnJlZ2lzdHJ5IHdoZW4gSU1BR0VfUkVHSVNUUllfUFVMTF9IT1NUIGlzIHVuc2V0LCBzbyBhblxuICAgIC8vIGV4cGxpY2l0IG9wZXJhdG9yIHB1bGwgaG9zdCBpcyBuZXZlciBjbG9iYmVyZWQgKHNlZSBiYWtlUGxhdGZvcm1SZWdpc3RyeSkuXG4gICAgLy9cbiAgICAvLyBTY29wZWQgKyByZXN0b3JlZCBzbyB0aGUgb3ZlcnJpZGUgZG9lcyBOT1QgbGVhayBpbnRvIHRoZSBwcm9jZXNzLXdpZGVcbiAgICAvLyBDb25maWcgY2FjaGU6IGluIGEgbXVsdGktcGlwZWxpbmUgQ0RLIGFwcCwgcGlwZWxpbmUgQidzIHJlZ2lzdHJ5IG11c3Qgbm90XG4gICAgLy8gYmxlZWQgaW50byBwaXBlbGluZSBBJ3MgaW1hZ2UgcmVzb2x1dGlvbi4gQWxsIHJlZ2lzdHJ5IHJlYWRzIGhhcHBlblxuICAgIC8vIHN5bmNocm9ub3VzbHkgYmVsb3cgKGJ1aWxkLWltYWdlIHJlc29sdXRpb24pLCBzbyByZXN0b3JpbmcgYXQgdGhlIGVuZCBvZlxuICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBrZWVwcyBzaW5nbGUtcGlwZWxpbmUgYmVoYXZpb3IgaWRlbnRpY2FsLlxuICAgIGNvbnN0IHJlc3RvcmVSZWdpc3RyeSA9IHByb3BzLnJlZ2lzdHJ5XG4gICAgICA/IENvbmZpZy5vdmVycmlkZVNjb3BlZCgncmVnaXN0cnknLCBwcm9wcy5yZWdpc3RyeSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgUGlwZWxpbmVDb25maWd1cmF0aW9uIGZvciBhbGwgYnVzaW5lc3MgbG9naWMgKHZhbGlkYXRpb24sIHNhbml0aXphdGlvbiwgbWV0YWRhdGEgbWVyZ2luZylcbiAgICAgIHRoaXMuY29uZmlnID0gbmV3IFBpcGVsaW5lQ29uZmlndXJhdGlvbihwcm9wcyk7XG5cbiAgICAgIGNvbnN0IHNlcnZlckNvbmZpZyA9IENvbmZpZy5nZXQoJ3NlcnZlcicpO1xuICAgICAgY29uc3QgYXdzQ29uZmlnID0gQ29uZmlnLmdldCgnYXdzJyk7XG4gICAgICAvLyBQYXNzIG9yZytwcm9qZWN0IHNvIGxvZyBncm91cCAvIElBTSByb2xlIG5hbWVzIGdldCBhIHN0YWJsZSBoYXNoXG4gICAgICAvLyBzdWZmaXggcGVyIHBpcGVsaW5lLiBQcmV2ZW50cyBgUmVzb3VyY2UgYWxyZWFkeSBleGlzdHNgIGNvbGxpc2lvbnNcbiAgICAgIC8vIGFjcm9zcyBzdGFja3MgZGVwbG95ZWQgdG8gdGhlIHNhbWUgQVdTIGFjY291bnQuXG4gICAgICBjb25zdCB1bmlxdWVJZCA9IG5ldyBVbmlxdWVJZCh7XG4gICAgICAgIG9yZ2FuaXphdGlvbjogdGhpcy5jb25maWcub3JnYW5pemF0aW9uLFxuICAgICAgICBwcm9qZWN0OiB0aGlzLmNvbmZpZy5wcm9qZWN0LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwbHVnaW5Mb29rdXAgPSBuZXcgUGx1Z2luTG9va3VwKFxuICAgICAgICB0aGlzLFxuICAgICAgICB1bmlxdWVJZC5nZW5lcmF0ZSgncGx1Z2luOmxvb2t1cCcpLFxuICAgICAgICB7XG4gICAgICAgICAgb3JnYW5pemF0aW9uOiB0aGlzLmNvbmZpZy5vcmdhbml6YXRpb24sXG4gICAgICAgICAgcHJvamVjdDogdGhpcy5jb25maWcucHJvamVjdCxcbiAgICAgICAgICBwbGF0Zm9ybVVybDogc2VydmVyQ29uZmlnLnBsYXRmb3JtVXJsLFxuICAgICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICAgIG9yZ0lkOiBwcm9wcy5vcmdJZCxcbiAgICAgICAgICBydW50aW1lOiBsYW1iZGFSdW50aW1lKGF3c0NvbmZpZy5sYW1iZGEucnVudGltZSksXG4gICAgICAgICAgdGltZW91dDogbGFtYmRhVGltZW91dChhd3NDb25maWcubGFtYmRhLnRpbWVvdXRTZWNvbmRzKSxcbiAgICAgICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYUFyY2hpdGVjdHVyZShhd3NDb25maWcubGFtYmRhLmFyY2hpdGVjdHVyZSksXG4gICAgICAgICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9uczogYXdzQ29uZmlnLmxhbWJkYS5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zLFxuICAgICAgICAgIHJlc29sdmVkUGx1Z2luczogcHJvcHMucmVzb2x2ZWRQbHVnaW5zLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgLy8gQ3JlYXRlIHNvdXJjZSBhbmQgYnVpbGQgc3RlcFxuICAgICAgY29uc3Qgc291cmNlQnVpbGRlciA9IG5ldyBTb3VyY2VCdWlsZGVyKHRoaXMsIHRoaXMuY29uZmlnKTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZUJ1aWxkZXIuY3JlYXRlKHVuaXF1ZUlkKTtcblxuICAgICAgLy8gU3ludGgtcGx1Z2luIHJlc29sdXRpb246XG4gICAgICAvLyAgIDEuIFByZS1yZXNvbHZlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aC9kZXBsb3lgIGZyb20gdGhlIHBsYXRmb3JtXG4gICAgICAvLyAgICAgIEFQSSDihpIgdXNlIGl0LiBTeW50aCBzdGVwIHJ1bnMgb24gdGhlIHJlYWwgYGNkay1zeW50aGAgaW1hZ2Ugd2l0aFxuICAgICAgLy8gICAgICByZWFsIGNvbW1hbmRzIGJha2VkIGludG8gdGhlIHRlbXBsYXRlLlxuICAgICAgLy8gICAyLiBPdGhlcndpc2Ug4oaSIGBib290c3RyYXAoKWA6IGNvbGQtc3RhcnQgYHBpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgc3ludGhgXG4gICAgICAvLyAgICAgIG9uIHRoZSBjb25maWd1cmVkIENPREVCVUlMRF9ERUZBVUxUX0lNQUdFIChkZWZhdWx0XG4gICAgICAvLyAgICAgIHBpcGVsaW5lLWJvb3RzdHJhcDoxLjApLiBVc2VkIHdoZW4gdGhlIHBsYXRmb3JtIGlzbid0IHJlYWNoYWJsZVxuICAgICAgLy8gICAgICBhdCBzeW50aCB0aW1lIChDTEkgbG9ncyBhIHdhcm5pbmcgcGVyIG1pc3NlZCBwbHVnaW4pLlxuICAgICAgLy9cbiAgICAgIC8vIHBsdWdpbkxvb2t1cC5wbHVnaW4oKSByZWFkcyBgcmVzb2x2ZWRQbHVnaW5zYCBpbnRlcm5hbGx5IGFuZCByZXR1cm5zXG4gICAgICAvLyB0aGUgY2FjaGVkIGVudHJ5IHdoZW4gcHJlc2VudCDigJQgc28gY2FsbGluZyBpdCBhbHdheXMgd2lucyBvdmVyXG4gICAgICAvLyBib290c3RyYXAoKSB3aGVuIHByZS1yZXNvbHV0aW9uIHN1Y2NlZWRlZC5cbiAgICAgIGNvbnN0IHN5bnRoQ2FjaGVLZXkgPVxuICAgICAgdGhpcy5jb25maWcucGx1Z2luLmFsaWFzIHx8IGAke3RoaXMuY29uZmlnLnBsdWdpbi5uYW1lfS1hbGlhc2A7XG4gICAgICBjb25zdCBwbHVnaW4gPSBwcm9wcy5yZXNvbHZlZFBsdWdpbnM/LltzeW50aENhY2hlS2V5XVxuICAgICAgICA/IHBsdWdpbkxvb2t1cC5wbHVnaW4odGhpcy5jb25maWcucGx1Z2luKVxuICAgICAgICA6IHBsdWdpbkxvb2t1cC5ib290c3RyYXAoKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRDb21wdXRlVHlwZSA9IGdldENvbXB1dGVUeXBlKGF3c0NvbmZpZy5jb2RlQnVpbGQuY29tcHV0ZVR5cGUpO1xuICAgICAgY29uc3QgYXJ0aWZhY3RNYW5hZ2VyID0gbmV3IEFydGlmYWN0TWFuYWdlcigpO1xuXG4gICAgICAvLyBTY29wZSBleHBvc2VkIHRvIHBsdWdpbi1zcGVjIHRlbXBsYXRlcyBhcyBgcGlwZWxpbmUuKmAuIFNvdXJjZWQgZnJvbSB0aGVcbiAgICAgIC8vIGNvbmZpZyBzbyB0aGUgc3ludGggc3RlcCwgZXZlcnkgc3RhZ2Ugc3RlcCwgYW5kIHRoZSBzb3VyY2UgdG9rZW4gYWxsXG4gICAgICAvLyByZXNvbHZlIGFnYWluc3QgdGhlIHNhbWUgc25hcHNob3QgKHNlZSBQaXBlbGluZUNvbmZpZ3VyYXRpb24uZ2V0UGlwZWxpbmVTY29wZSkuXG4gICAgICBjb25zdCBwaXBlbGluZVNjb3BlID0gdGhpcy5jb25maWcuZ2V0UGlwZWxpbmVTY29wZSgpO1xuXG4gICAgICBjb25zdCBzeW50aCA9IGNyZWF0ZUNvZGVCdWlsZFN0ZXAoe1xuICAgICAgICAuLi50aGlzLmNvbmZpZy5zeW50aEN1c3RvbWl6YXRpb24sXG4gICAgICAgIGlkOiB1bmlxdWVJZC5nZW5lcmF0ZSgnY2RrOnN5bnRoJyksXG4gICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICBwbHVnaW4sXG4gICAgICAgIGlucHV0OiBzb3VyY2UsXG4gICAgICAgIG1ldGFkYXRhOiB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQsXG4gICAgICAgIG5ldHdvcms6IHRoaXMuY29uZmlnLm5ldHdvcmssXG4gICAgICAgIHNjb3BlOiB0aGlzLFxuICAgICAgICBkZWZhdWx0Q29tcHV0ZVR5cGUsXG4gICAgICAgIGFydGlmYWN0TWFuYWdlcixcbiAgICAgICAgc3RhZ2VOYW1lOiAnbm8tc3RhZ2UnLFxuICAgICAgICBzdGFnZUFsaWFzOiAnbm8tc3RhZ2UtYWxpYXMnLFxuICAgICAgICAvLyBUaGUgY2Fub25pY2FsIGtleSBzZWdtZW50LiBgJHthbGlhcyA/PyBuYW1lfS1hbGlhc2Agc3VmZml4ZWQgYW5cbiAgICAgICAgLy8gRVhQTElDSVQgYWxpYXMgdG9vIChgbXktc3ludGhgIOKGkiBgbXktc3ludGgtYWxpYXNgKSwgc28gYSBzdGFnZSB0aGF0XG4gICAgICAgIC8vIHBpY2tlZCB0aGUgc3ludGggb3V0cHV0IGluIHRoZSBVSSBhc2tlZCBmb3IgYSBrZXkgbmV2ZXIgcmVnaXN0ZXJlZC5cbiAgICAgICAgcGx1Z2luQWxpYXM6IHBsdWdpbkFydGlmYWN0QWxpYXModGhpcy5jb25maWcucGx1Z2luKSxcbiAgICAgICAgb3JnSWQ6IHByb3BzLm9yZ0lkLFxuICAgICAgICBwaXBlbGluZVNjb3BlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFJlc29sdmUgcGlwZWxpbmUtbGV2ZWwgZGVmYXVsdHMgaW50byBjb2RlQnVpbGREZWZhdWx0c1xuICAgICAgLy8gQnVpbGQgdGhlIHBlci1vcmcgcGxhdGZvcm0gc2VjcmV0IG5hbWUgZm9yIENvZGVCdWlsZCBlbnYgdmFyc1xuICAgICAgY29uc3QgcGxhdGZvcm1TZWNyZXROYW1lID0gcHJvcHMub3JnSWRcbiAgICAgICAgPyBDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgocHJvcHMub3JnSWQsICdwbGF0Zm9ybScpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBjb2RlQnVpbGREZWZhdWx0cyA9IHRoaXMucmVzb2x2ZURlZmF1bHRzKHRoaXMuY29uZmlnLmRlZmF1bHRzLCB1bmlxdWVJZCwgcHJvcHMucGlwZWxpbmVJZCwgcGxhdGZvcm1TZWNyZXROYW1lLCBzZXJ2ZXJDb25maWcucGxhdGZvcm1VcmwsIHByb3BzLm9yZ0lkKTtcblxuICAgICAgLy8gUmVzb2x2ZSBJQU0gcm9sZTogZXhwbGljaXQgcHJvcCB3aW5zLCBlbHNlIGBpYW06cm9sZWAgbWV0YWRhdGEsIGVsc2UgbGV0XG4gICAgICAvLyBDREsgYXV0by1jcmVhdGUgdGhlIHBpcGVsaW5lIHJvbGUgKGNvZGVwaXBlbGluZS5hbWF6b25hd3MuY29tIHByaW5jaXBhbCkuXG4gICAgICBjb25zdCByb2xlQ29uZmlnID0gcHJvcHMucm9sZSA/PyByb2xlQ29uZmlnRnJvbU1ldGFkYXRhKHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZCk7XG4gICAgICBpZiAocm9sZUNvbmZpZz8udHlwZSA9PT0gJ2NvZGVCdWlsZERlZmF1bHQnKSB7XG4gICAgICAgIGNyZWF0ZUxvZ2dlcigncGlwZWxpbmUtYnVpbGRlcicpLndhcm4oXG4gICAgICAgICAgJ2NvZGVCdWlsZERlZmF1bHQgcm9sZSB0eXBlIHVzZXMgY29kZWJ1aWxkLmFtYXpvbmF3cy5jb20gdHJ1c3QgcHJpbmNpcGFsIOKAlCAnICtcbiAgICAgICAgJ3RoaXMgaXMgbm90IHN1aXRhYmxlIGFzIHRoZSBwaXBlbGluZS1sZXZlbCByb2xlLiBDb25zaWRlciB1c2luZyByb2xlQXJuL3JvbGVOYW1lICcgK1xuICAgICAgICAnb3Igb21pdHRpbmcgdGhlIHJvbGUgdG8gbGV0IENESyBhdXRvLWNyZWF0ZSBvbmUgd2l0aCBjb2RlcGlwZWxpbmUuYW1hem9uYXdzLmNvbS4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3Qgcm9sZSA9IHJvbGVDb25maWdcbiAgICAgICAgPyByZXNvbHZlUm9sZSh0aGlzLCB1bmlxdWVJZCwgcm9sZUNvbmZpZylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIC8vIOKUgOKUgCBBcnRpZmFjdCBidWNrZXQgKEtNUyBlbmNyeXB0aW9uICsgcmV0ZW50aW9uKSDilIDilIBcbiAgICAgIC8vIFdoZW4gYGVuY3J5cHRpb24ua21zS2V5QXJuYCBhbmQvb3IgYG9wZXJhdGlvbnMuYXJ0aWZhY3RSZXRlbnRpb25EYXlzYCBhcmVcbiAgICAgIC8vIHNldCB3ZSBjcmVhdGUgYSBjdXN0b20gYXJ0aWZhY3QgYnVja2V0IGFuZCBwYXNzIGl0IHRvIENvZGVQaXBlbGluZTsgdGhhdFxuICAgICAgLy8gaXMgdGhlIG9ubHkgd2F5IHRvIGF0dGFjaCBhIGN1c3RvbWVyLW1hbmFnZWQga2V5ICh0aGUgTDMgY29uc3RydWN0IGV4cG9zZXNcbiAgICAgIC8vIGBhcnRpZmFjdEJ1Y2tldGAsIG5vdCBgZW5jcnlwdGlvbktleWApLiBBYnNlbnQgYm90aCBrZXlzLCBDREsgYXV0by1jcmVhdGVzXG4gICAgICAvLyB0aGUgYnVja2V0IGFuZCBiZWhhdmlvciBpcyB1bmNoYW5nZWQuXG4gICAgICBjb25zdCBhcnRpZmFjdEJ1Y2tldCA9IHRoaXMuYnVpbGRBcnRpZmFjdEJ1Y2tldCgpO1xuXG4gICAgICAvLyBDcmVhdGUgQ29kZVBpcGVsaW5lIGNvbnN0cnVjdFxuICAgICAgdGhpcy5waXBlbGluZSA9IG5ldyBDb2RlUGlwZWxpbmUodGhpcywgdW5pcXVlSWQuZ2VuZXJhdGUoJ3BpcGVsaW5lczpjb2RlcGlwZWxpbmUnKSwge1xuICAgICAgICAuLi4oY29kZUJ1aWxkRGVmYXVsdHMgJiYgeyBjb2RlQnVpbGREZWZhdWx0cyB9KSxcbiAgICAgICAgLi4uKHJvbGUgJiYgeyByb2xlIH0pLFxuICAgICAgICAuLi4oYXJ0aWZhY3RCdWNrZXQgJiYgeyBhcnRpZmFjdEJ1Y2tldCB9KSxcbiAgICAgICAgcGlwZWxpbmVUeXBlOiBQaXBlbGluZVR5cGUuVjIsXG4gICAgICAgIHBpcGVsaW5lTmFtZTogdGhpcy5jb25maWcucGlwZWxpbmVOYW1lLFxuICAgICAgICBzeW50aCxcbiAgICAgICAgLi4ubWV0YWRhdGFGb3JDb2RlUGlwZWxpbmUodGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkKSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocHJvcHMuc3RhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHN0YWdlQnVpbGRlciA9IG5ldyBTdGFnZUJ1aWxkZXIoe1xuICAgICAgICAgIHNjb3BlOiB0aGlzLFxuICAgICAgICAgIHBsdWdpbkxvb2t1cCxcbiAgICAgICAgICB1bmlxdWVJZCxcbiAgICAgICAgICBnbG9iYWxNZXRhZGF0YTogdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkLFxuICAgICAgICAgIGRlZmF1bHRDb21wdXRlVHlwZSxcbiAgICAgICAgICBhcnRpZmFjdE1hbmFnZXIsXG4gICAgICAgICAgb3JnSWQ6IHByb3BzLm9yZ0lkLFxuICAgICAgICAgIHBpcGVsaW5lU2NvcGUsXG4gICAgICAgIH0pO1xuICAgICAgICBzdGFnZUJ1aWxkZXIuYWRkU3RhZ2VzKHRoaXMucGlwZWxpbmUsIHByb3BzLnN0YWdlcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIOKUgOKUgCBUYWdzIOKUgOKUgFxuICAgICAgLy8gVGhlIGZpcnN0IHRocmVlIGFyZSBvcGVyYXRpb25zLWVzc2VudGlhbCBhbmQgdXNlZCBieSBgcGlwZWxpbmUtbWFuYWdlclxuICAgICAgLy8gYXVkaXQgc3RhY2tzYCB0byBkaWZmIENGTiBzdGFja3MgYWdhaW5zdCB0aGUgcGlwZWxpbmVfcmVnaXN0cnkgdGFibGUuXG4gICAgICAvLyBgT3JnSWRgIGlzIHRoZSBjYW5vbmljYWwga2V5IGZvciBjb3N0IGF0dHJpYnV0aW9uIChBV1MgQ29zdCBFeHBsb3JlclxuICAgICAgLy8gZ3JvdXBzIGJ5IHRhZyBrZXkvdmFsdWUgd2hlbiBhY3RpdmF0ZWQgaW4gQmlsbGluZyBzZXR0aW5ncykuXG4gICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgncGlwZWxpbmUtYnVpbGRlcicsICd0cnVlJyk7XG4gICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgncHJvamVjdCcsIHRoaXMuY29uZmlnLnByb2plY3QpO1xuICAgICAgVGFncy5vZih0aGlzLnBpcGVsaW5lKS5hZGQoJ29yZ2FuaXphdGlvbicsIHRoaXMuY29uZmlnLm9yZ2FuaXphdGlvbik7XG4gICAgICBpZiAocHJvcHMub3JnSWQpIHtcbiAgICAgICAgVGFncy5vZih0aGlzLnBpcGVsaW5lKS5hZGQoJ09yZ0lkJywgcHJvcHMub3JnSWQpO1xuICAgICAgfVxuICAgICAgLy8gU3RhYmxlIGV2ZW50LXJlcG9ydGluZyBrZXkuIEFwcGxpZWQgYXQgc3ludGggKHRoZSBwaXBlbGluZUlkIGlzIGtub3duXG4gICAgICAvLyBoZXJlKSwgc28gaXQncyBwcmVzZW50IGZyb20gc3RhY2sgY3JlYXRpb24g4oCUIHRoZSBldmVudHMgTGFtYmRhIHJlYWRzIHRoaXNcbiAgICAgIC8vIHRhZyB0byBhdHRyaWJ1dGUgQ29kZVBpcGVsaW5lIHN0YXRlLWNoYW5nZSBldmVudHMgdG8gdGhlIHBpcGVsaW5lIHdpdGhvdXRcbiAgICAgIC8vIGV2ZXIgaGFuZGxpbmcgdGhlIEFSTi9hY2NvdW50LiBTZWUgcGFja2FnZXMvcGlwZWxpbmUtZXZlbnRzLlxuICAgICAgaWYgKHByb3BzLnBpcGVsaW5lSWQpIHtcbiAgICAgICAgVGFncy5vZih0aGlzLnBpcGVsaW5lKS5hZGQoJ3BiLnBpcGVsaW5lLWlkJywgcHJvcHMucGlwZWxpbmVJZCk7XG4gICAgICB9XG4gICAgICAvLyBEZXBsb3ktZW52aXJvbm1lbnQgYXR0cmlidXRpb24gZm9yIERPUkEgbWV0cmljcy4gYHBiLmRlcGxveXNgIGxpc3RzIGV2ZXJ5XG4gICAgICAvLyBkZXBsb3kgc3RhZ2UgYXMgYDxzdGFnZU5hbWU+OjxlbnZpcm9ubWVudD5gIHBhaXJzIGpvaW5lZCBieSBgK2AsIHJlYWQgYnlcbiAgICAgIC8vIHRoZSBldmVudHMgTGFtYmRhIGZyb20gdGhlIHNhbWUgTGlzdFRhZ3MgY2FsbCB0byBtYXJrIHdoaWNoIHN0YWdlcyBhcmVcbiAgICAgIC8vIGRlcGxveXMgYW5kIHRvIHdoaWNoIGVudmlyb25tZW50LiBBYnNlbnQgd2hlbiBubyBlbnZpcm9ubWVudCBpcyBkZWNsYXJlZFxuICAgICAgLy8g4oCUIHN1Y2ggcGlwZWxpbmVzIHByb2R1Y2Ugbm8gRE9SQSBkZXBsb3kgc2lnbmFsIHVudGlsIHRoZXkgcmUtc3ludGguXG4gICAgICBjb25zdCBkZXBsb3lzVGFnID0gYnVpbGREZXBsb3lzVGFnKHByb3BzKTtcbiAgICAgIGlmIChkZXBsb3lzVGFnKSB7XG4gICAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdwYi5kZXBsb3lzJywgZGVwbG95c1RhZyk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMudGFncykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcm9wcy50YWdzKSkge1xuICAgICAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEJ1aWxkIHRoZSBpbnRlcm5hbCBwaXBlbGluZSBiZWZvcmUgYWNjZXNzaW5nIGl0cyBwcm9wZXJ0aWVzXG4gICAgICB0aGlzLnBpcGVsaW5lLmJ1aWxkUGlwZWxpbmUoKTtcbiAgICAgIGNvbnN0IGNka1BpcGVsaW5lID0gdGhpcy5waXBlbGluZS5waXBlbGluZTtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQ7XG5cbiAgICAgIC8vIOKUgOKUgCBQaXBlbGluZS1sZXZlbCBWYXJpYWJsZXMgKENvZGVQaXBlbGluZSBWMikg4pSA4pSAXG4gICAgICBmb3IgKGNvbnN0IHYgb2YgcGFyc2VQaXBlbGluZVZhcmlhYmxlcyhtZXRhW01ldGFkYXRhS2V5cy5QSVBFTElORV9WQVJJQUJMRVNdKSkge1xuICAgICAgICBjZGtQaXBlbGluZS5hZGRWYXJpYWJsZShuZXcgVmFyaWFibGUoe1xuICAgICAgICAgIHZhcmlhYmxlTmFtZTogdi5uYW1lLFxuICAgICAgICAgIC4uLih2LmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHsgZGVmYXVsdFZhbHVlOiB2LmRlZmF1bHRWYWx1ZSB9KSxcbiAgICAgICAgICAuLi4odi5kZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkICYmIHsgZGVzY3JpcHRpb246IHYuZGVzY3JpcHRpb24gfSksXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIFNOUyBOb3RpZmljYXRpb25zIOKUgOKUgFxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uVG9waWNBcm4gPSBtZXRhW01ldGFkYXRhS2V5cy5OT1RJRklDQVRJT05fVE9QSUNfQVJOXTtcbiAgICAgIGlmICh0eXBlb2Ygbm90aWZpY2F0aW9uVG9waWNBcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IHRvcGljID0gc25zLlRvcGljLmZyb21Ub3BpY0Fybih0aGlzLCAnTm90aWZpY2F0aW9uVG9waWMnLCBub3RpZmljYXRpb25Ub3BpY0Fybik7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbkV2ZW50cyA9IHBhcnNlTm90aWZpY2F0aW9uRXZlbnRzKG1ldGFbTWV0YWRhdGFLZXlzLk5PVElGSUNBVElPTl9FVkVOVFNdKVxuICAgICAgICAgIC5tYXAoZSA9PiBQSVBFTElORV9FVkVOVF9NQVBbZS50b1VwcGVyQ2FzZSgpXSlcbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICBpZiAobm90aWZpY2F0aW9uRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjZGtQaXBlbGluZS5ub3RpZnlPbignUGlwZWxpbmVOb3RpZmljYXRpb24nLCB0b3BpYywgeyBldmVudHM6IG5vdGlmaWNhdGlvbkV2ZW50cyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDilIDilIAgU2NoZWR1bGVkIEV4ZWN1dGlvbiDilIDilIBcbiAgICAgIGlmIChwcm9wcy5zeW50aC5zb3VyY2Uub3B0aW9ucz8udHJpZ2dlciA9PT0gVHJpZ2dlclR5cGUuU0NIRURVTEUgfHwgcHJvcHMuc2NoZWR1bGUpIHtcbiAgICAgICAgY29uc3QgZXhwciA9IHByb3BzLnNjaGVkdWxlIHx8IChwcm9wcy5zeW50aC5zb3VyY2Uub3B0aW9ucyBhcyB7IHNjaGVkdWxlPzogc3RyaW5nIH0pPy5zY2hlZHVsZSB8fCAncmF0ZSgxIGRheSknO1xuICAgICAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ1NjaGVkdWxlUnVsZScsIHtcbiAgICAgICAgICBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLmV4cHJlc3Npb24oZXhwciksXG4gICAgICAgICAgdGFyZ2V0czogW25ldyB0YXJnZXRzLkNvZGVQaXBlbGluZShjZGtQaXBlbGluZSldLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIEV4ZWN1dGlvbiBFdmVudCBUcmFja2luZyAoZm9yd2FyZCBwaXBlbGluZSBzdGF0ZSBjaGFuZ2VzIHRvIFNOUykg4pSA4pSAXG4gICAgICAvLyBgaXNUcnVlYCwgbm90IHRydXRoaW5lc3M6IGBcImZhbHNlXCJgIGlzIGEgdHJ1dGh5IHN0cmluZywgc28gdGhlIG1ldGFkYXRhXG4gICAgICAvLyBgXCJhd3M6Y2RrOm9wZXJhdGlvbnM6ZXhlY3V0aW9uZXZlbnRzXCI6IFwiZmFsc2VcImAgdXNlZCB0byBDUkVBVEUgdGhlIHJ1bGUuXG4gICAgICBpZiAoaXNUcnVlKG1ldGFbTWV0YWRhdGFLZXlzLkVOQUJMRV9FWEVDVVRJT05fRVZFTlRTXSkgJiYgdHlwZW9mIG5vdGlmaWNhdGlvblRvcGljQXJuID09PSAnc3RyaW5nJykge1xuICAgICAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ0V4ZWN1dGlvbkV2ZW50UnVsZScsIHtcbiAgICAgICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgICAgIHNvdXJjZTogWydhd3MuY29kZXBpcGVsaW5lJ10sXG4gICAgICAgICAgICBkZXRhaWxUeXBlOiBbJ0NvZGVQaXBlbGluZSBQaXBlbGluZSBFeGVjdXRpb24gU3RhdGUgQ2hhbmdlJ10sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtjZGtQaXBlbGluZS5waXBlbGluZUFybl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0YXJnZXRzOiBbbmV3IHRhcmdldHMuU25zVG9waWMoXG4gICAgICAgICAgICBzbnMuVG9waWMuZnJvbVRvcGljQXJuKHRoaXMsICdFeGVjdXRpb25FdmVudFRvcGljJywgbm90aWZpY2F0aW9uVG9waWNBcm4pLFxuICAgICAgICAgICldLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIFBpcGVsaW5lIE1ldHJpY3MgJiBBbGFybXMg4pSA4pSAXG4gICAgICAvLyBTYW1lIHRyYXA6IGBcImF3czpjZGs6b3BlcmF0aW9uczptZXRyaWNzXCI6IFwiZmFsc2VcImAgY3JlYXRlZCB0aGUgYWxhcm0uXG4gICAgICBjb25zdCBlbmFibGVNZXRyaWNzID0gaXNUcnVlKHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZFtNZXRhZGF0YUtleXMuRU5BQkxFX01FVFJJQ1NdKTtcbiAgICAgIGlmIChlbmFibGVNZXRyaWNzKSB7XG4gICAgICAgIG5ldyBjbG91ZHdhdGNoLkFsYXJtKHRoaXMsICdQaXBlbGluZUZhaWx1cmVBbGFybScsIHtcbiAgICAgICAgICBtZXRyaWM6IG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICAgICAgICBuYW1lc3BhY2U6ICdBV1MvQ29kZVBpcGVsaW5lJyxcbiAgICAgICAgICAgIG1ldHJpY05hbWU6ICdGYWlsZWRQaXBlbGluZUV4ZWN1dGlvbkNvdW50JyxcbiAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IHsgUGlwZWxpbmVOYW1lOiB0aGlzLmNvbmZpZy5waXBlbGluZU5hbWUgfSxcbiAgICAgICAgICAgIHN0YXRpc3RpYzogJ1N1bScsXG4gICAgICAgICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgICAgICAgIGFsYXJtRGVzY3JpcHRpb246IGBQaXBlbGluZSAke3RoaXMuY29uZmlnLnBpcGVsaW5lTmFtZX0gZXhlY3V0aW9uIGZhaWxlZGAsXG4gICAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBjbG91ZHdhdGNoLkNvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IGNsb3Vkd2F0Y2guVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gUmV2ZXJ0IHRoZSBwZXItYnVpbGRlciByZWdpc3RyeSBvdmVycmlkZSBzbyBpdCBuZXZlciBsZWFrcyBpbnRvIHRoZVxuICAgICAgLy8gcHJvY2Vzcy13aWRlIENvbmZpZyBjYWNoZSAoc2VlIHRoZSBvdmVycmlkZSBhdCB0aGUgdG9wIG9mIHRoZSBjb25zdHJ1Y3RvcikuXG4gICAgICByZXN0b3JlUmVnaXN0cnk/LigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGN1c3RvbSBhcnRpZmFjdCBidWNrZXQgd2hlbiBgZW5jcnlwdGlvbi5rbXNLZXlBcm5gIGFuZC9vclxuICAgKiBgb3BlcmF0aW9ucy5hcnRpZmFjdFJldGVudGlvbkRheXNgIGFyZSBzZXQuIFJldHVybnMgdW5kZWZpbmVkIG90aGVyd2lzZSBzb1xuICAgKiBDREsgYXV0by1jcmVhdGVzIHRoZSBkZWZhdWx0IGFydGlmYWN0IGJ1Y2tldCAodW5jaGFuZ2VkIGJlaGF2aW9yKS5cbiAgICovXG4gIHByaXZhdGUgYnVpbGRBcnRpZmFjdEJ1Y2tldCgpOiBzMy5JQnVja2V0IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkO1xuICAgIGNvbnN0IGttc0tleUFybiA9IHR5cGVvZiBtZXRhW01ldGFkYXRhS2V5cy5LTVNfS0VZX0FSTl0gPT09ICdzdHJpbmcnXG4gICAgICA/IChtZXRhW01ldGFkYXRhS2V5cy5LTVNfS0VZX0FSTl0gYXMgc3RyaW5nKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmV0ZW50aW9uRGF5cyA9IGFzSW50KG1ldGFbTWV0YWRhdGFLZXlzLkFSVElGQUNUX1JFVEVOVElPTl9EQVlTXSk7XG5cbiAgICBpZiAoIWttc0tleUFybiAmJiByZXRlbnRpb25EYXlzID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0ga21zS2V5QXJuXG4gICAgICA/IGttcy5LZXkuZnJvbUtleUFybih0aGlzLCAnQXJ0aWZhY3RLZXknLCBrbXNLZXlBcm4pXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGhpcywgJ0FydGlmYWN0QnVja2V0Jywge1xuICAgICAgZW5jcnlwdGlvbjogZW5jcnlwdGlvbktleSA/IHMzLkJ1Y2tldEVuY3J5cHRpb24uS01TIDogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgLi4uKGVuY3J5cHRpb25LZXkgJiYgeyBlbmNyeXB0aW9uS2V5IH0pLFxuICAgICAgLi4uKHJldGVudGlvbkRheXMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIGxpZmVjeWNsZVJ1bGVzOiBbeyBleHBpcmF0aW9uOiBEdXJhdGlvbi5kYXlzKHJldGVudGlvbkRheXMpIH1dLFxuICAgICAgfSksXG4gICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IHMzLkJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgIH0pO1xuICAgIFRhZ3Mub2YoYnVja2V0KS5hZGQoJ3BpcGVsaW5lJywgdGhpcy5jb25maWcucGlwZWxpbmVOYW1lKTtcbiAgICByZXR1cm4gYnVja2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIENvZGVCdWlsZERlZmF1bHRzIGludG8gdGhlIHNoYXBlIGV4cGVjdGVkIGJ5IENESydzIGNvZGVCdWlsZERlZmF1bHRzLlxuICAgKiBDb21iaW5lcyBuZXR3b3JrIGNvbmZpZywgc2VjdXJpdHkgZ3JvdXBzLCBhbmQgcGlwZWxpbmUtbGV2ZWwgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqIChQSVBFTElORV9JRCwgRVhFQ1VUSU9OX0lELCBQTEFURk9STV9CQVNFX1VSTCkgYXZhaWxhYmxlIHRvIGFsbCBDb2RlQnVpbGQgYWN0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZURlZmF1bHRzKFxuICAgIGRlZmF1bHRzOiBDb2RlQnVpbGREZWZhdWx0cyB8IHVuZGVmaW5lZCxcbiAgICBpZDogVW5pcXVlSWQsXG4gICAgcGlwZWxpbmVJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHBsYXRmb3JtU2VjcmV0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHBsYXRmb3JtVXJsOiBzdHJpbmcsXG4gICAgb3JnSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgKTogQ29kZUJ1aWxkT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gUGVyLXBpcGVsaW5lIG5ldHdvcmsgY29uZmlnIHdpbnM7IG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gYW4gZW52LWRyaXZlblxuICAgIC8vIGdsb2JhbCBWUEMgKGludGVybmFsIC8gaW5zaWRlLUFXUy1vbmx5IG1vZGUpIHNvIGV2ZXJ5IHBpcGVsaW5lJ3NcbiAgICAvLyBDb2RlQnVpbGQgcnVucyBpbiB0aGUgVlBDIGFuZCBjYW4gcmVhY2ggdGhlIHByaXZhdGUgZ2F0ZXdheS4gVW5zZXQgaW5cbiAgICAvLyBwdWJsaWMgZGVwbG95cyDihpIgQ29kZUJ1aWxkIHN0YXlzIGluIHRoZSBBV1MtbWFuYWdlZCBuZXR3b3JrLlxuICAgIC8vIFByZWNlZGVuY2U6IGV4cGxpY2l0IHByb3AgPiBgZWMyOm5ldHdvcmtgIG1ldGFkYXRhID4gZW52LWRyaXZlbiBnbG9iYWwgVlBDLlxuICAgIGNvbnN0IG5ldHdvcmsgPSBkZWZhdWx0cz8ubmV0d29yayA/PyBuZXR3b3JrQ29uZmlnRnJvbU1ldGFkYXRhKHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZCkgPz8gbmV0d29ya0NvbmZpZ0Zyb21FbnYoKTtcbiAgICBjb25zdCBuZXR3b3JrUHJvcHMgPSBuZXR3b3JrXG4gICAgICA/IHJlc29sdmVOZXR3b3JrKHRoaXMsIGlkLCBuZXR3b3JrKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBTYW1lIHByZWNlZGVuY2UgZm9yIHN0YW5kYWxvbmUgc2VjdXJpdHkgZ3JvdXBzIChwcm9wID4gYGVjMjpzZWN1cml0eWdyb3VwYCBtZXRhZGF0YSkuXG4gICAgY29uc3Qgc2VjdXJpdHlHcm91cENvbmZpZyA9IGRlZmF1bHRzPy5zZWN1cml0eUdyb3VwcyA/PyBzZWN1cml0eUdyb3VwQ29uZmlnRnJvbU1ldGFkYXRhKHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZCk7XG4gICAgY29uc3Qgc3RhbmRhbG9uZVNlY3VyaXR5R3JvdXBzID0gc2VjdXJpdHlHcm91cENvbmZpZ1xuICAgICAgPyByZXNvbHZlU2VjdXJpdHlHcm91cCh0aGlzLCBpZCwgc2VjdXJpdHlHcm91cENvbmZpZylcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gUGlwZWxpbmUtbGV2ZWwgZW52IHZhcnMgYXZhaWxhYmxlIHRvIGFsbCBDb2RlQnVpbGQgYWN0aW9uc1xuICAgIC8vIE5vdGU6ICN7Y29kZXBpcGVsaW5lLip9IHJlc29sdmVkIHZhcmlhYmxlcyBtdXN0IGdvIHRocm91Z2ggQ29kZUJ1aWxkU3RlcC5lbnZcbiAgICAvLyAoYWN0aW9uLWxldmVsKSwgbm90IGJ1aWxkRW52aXJvbm1lbnQuZW52aXJvbm1lbnRWYXJpYWJsZXMgKHByb2plY3QtbGV2ZWwpLlxuICAgIGNvbnN0IHBpcGVsaW5lRW52VmFyczogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogc3RyaW5nIH0+ID0ge1xuICAgICAgUExBVEZPUk1fQkFTRV9VUkw6IHsgdmFsdWU6IHBsYXRmb3JtVXJsIH0sXG4gICAgICAuLi4ocGlwZWxpbmVJZCAmJiB7IFBJUEVMSU5FX0lEOiB7IHZhbHVlOiBwaXBlbGluZUlkIH0gfSksXG4gICAgICAuLi4ocGxhdGZvcm1TZWNyZXROYW1lICYmIHsgUExBVEZPUk1fU0VDUkVUX05BTUU6IHsgdmFsdWU6IHBsYXRmb3JtU2VjcmV0TmFtZSB9IH0pLFxuICAgICAgLy8gUHJvcGFnYXRlIFRMUyB2ZXJpZmljYXRpb24gc2V0dGluZyBzbyBhbGwgQ29kZUJ1aWxkIHN0ZXBzIGNhbiByZWFjaFxuICAgICAgLy8gdGhlIHBsYXRmb3JtIEFQSSB3aGVuIHVzaW5nIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlc1xuICAgICAgLi4uKHByb2Nlc3MuZW52Lk5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQgPT09ICcwJyAmJiB7XG4gICAgICAgIE5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQ6IHsgdmFsdWU6ICcwJyB9LFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXBzID0gW1xuICAgICAgLi4uKG5ldHdvcmtQcm9wcz8uc2VjdXJpdHlHcm91cHMgPz8gW10pLFxuICAgICAgLi4uKHN0YW5kYWxvbmVTZWN1cml0eUdyb3VwcyA/PyBbXSksXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi4obmV0d29ya1Byb3BzICYmIHsgdnBjOiBuZXR3b3JrUHJvcHMudnBjLCBzdWJuZXRTZWxlY3Rpb246IG5ldHdvcmtQcm9wcy5zdWJuZXRTZWxlY3Rpb24gfSksXG4gICAgICAuLi4oc2VjdXJpdHlHcm91cHMubGVuZ3RoID4gMCAmJiB7IHNlY3VyaXR5R3JvdXBzIH0pLFxuICAgICAgLy8gYnVpbGRJbWFnZSBhdCB0aGlzIGxldmVsIHJlYWNoZXMgQ0RLIFBpcGVsaW5lcycgaW50ZXJuYWxseS13cmFwcGVkXG4gICAgICAvLyBTaGVsbFN0ZXAgQ29kZUJ1aWxkIGFjdGlvbiwgd2hpY2ggb3RoZXJ3aXNlIGhhcmRjb2Rlc1xuICAgICAgLy8gQ0RLJ3MgZGVmYXVsdCBjdXJhdGVkIHN0YW5kYXJkIGltYWdlLiBTZXR0aW5nIGl0IGhlcmUgY2xvc2VzIHRoZSBnYXBcbiAgICAgIC8vIGV4cG9zZWQgaW4gdGhlIHNhbWUgZW52IHZhciAoYENPREVCVUlMRF9ERUZBVUxUX0lNQUdFYCkgdGhhdCB0aGVcbiAgICAgIC8vIENvZGVCdWlsZFN0ZXAgcGF0aCBhbHJlYWR5IGhvbm9ycyB2aWEgcmVzb2x2ZVBsdWdpbkltYWdlKCknc1xuICAgICAgLy8gZmFsbGJhY2suIFBlci1zdGVwIGBidWlsZEltYWdlYCBvbiBhIENvZGVCdWlsZFN0ZXAgc3RpbGwgd2lucy5cbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgYnVpbGRJbWFnZTogcmVzb2x2ZURlZmF1bHRCdWlsZEltYWdlKHRoaXMsIG9yZ0lkKSxcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHBpcGVsaW5lRW52VmFycyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -100,6 +100,19 @@ export class PluginLookup extends Construct {
|
|
|
100
100
|
// template can ship with the real CodeBuild image baked in.
|
|
101
101
|
const cacheKey = props.alias || props.name;
|
|
102
102
|
const preResolved = this._resolvedPlugins?.[cacheKey];
|
|
103
|
+
// The map is keyed by ALIAS, so check it actually holds THIS plugin. Two
|
|
104
|
+
// steps sharing an alias across different plugins used to get the first
|
|
105
|
+
// one's record back — the second step silently ran the wrong image and
|
|
106
|
+
// commands. The CLI refuses such a pipeline too; this covers any other
|
|
107
|
+
// caller that supplies `resolvedPlugins`.
|
|
108
|
+
// Compare against the name the lookup actually TARGETED: an explicit
|
|
109
|
+
// `filter.name` overrides the ref's `name` by design, and that is not a
|
|
110
|
+
// collision.
|
|
111
|
+
const targetName = props.filter?.name ?? props.name;
|
|
112
|
+
if (preResolved && preResolved.name !== targetName) {
|
|
113
|
+
throw new Error(`Plugin alias "${cacheKey}" resolves to "${preResolved.name}", not "${targetName}". `
|
|
114
|
+
+ 'Each alias must name exactly one plugin.');
|
|
115
|
+
}
|
|
103
116
|
if (preResolved) {
|
|
104
117
|
log.debug(`Plugin "${props.name}" pre-resolved (alias=${cacheKey}) — skipping custom resource`);
|
|
105
118
|
return preResolved;
|
|
@@ -252,6 +265,8 @@ export class PluginLookup extends Construct {
|
|
|
252
265
|
commands: [],
|
|
253
266
|
dockerfile: null,
|
|
254
267
|
buildType: 'metadata_only',
|
|
268
|
+
imageDigest: null,
|
|
269
|
+
imageSource: null,
|
|
255
270
|
ownerId: null,
|
|
256
271
|
ownerType: null,
|
|
257
272
|
lifecycle: 'production',
|
|
@@ -315,4 +330,4 @@ export class PluginLookup extends Construct {
|
|
|
315
330
|
};
|
|
316
331
|
}
|
|
317
332
|
}
|
|
318
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9wbHVnaW4tbG9va3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFMUMsMkVBQTJFO0FBQzNFLGlDQUFpQztBQUNqQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFxQzNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLE9BQU8sWUFBYSxTQUFRLFNBQVM7SUFDeEIsU0FBUyxDQUFXO0lBQ3BCLFNBQVMsQ0FBVztJQUNwQixZQUFZLENBQVM7SUFDckIsUUFBUSxDQUFVO0lBQ2xCLFFBQVEsQ0FBVztJQUNuQixXQUFXLENBQVM7SUFDcEIsYUFBYSxDQUFlO0lBQzVCLDZCQUE2QixDQUFVO0lBQ3ZDLE1BQU0sQ0FBVTtJQUNoQixnQkFBZ0IsQ0FBMEI7SUFFM0QsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3QjtRQUNoRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDckQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUMzRSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUMvRCxJQUFJLENBQUMsNkJBQTZCLEdBQUcsS0FBSyxDQUFDLDRCQUE0QixDQUFDO1FBQ3hFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBRTlDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRW5ELHNCQUFzQjtRQUN0QixvRUFBb0U7UUFDcEUscUVBQXFFO1FBQ3JFLHVFQUF1RTtRQUN2RSxzRUFBc0U7UUFDdEUsc0VBQXNFO1FBQ3RFLGdEQUFnRDtRQUNoRCxFQUFFO1FBQ0YscUVBQXFFO1FBQ3JFLHVFQUF1RTtRQUN2RSxtRUFBbUU7UUFDbkUsaUVBQWlFO1FBQ2pFLHFFQUFxRTtRQUNyRSxNQUFNLFlBQVksR0FBRyxlQUFlLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsRyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQ3hDLElBQUksRUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFDcEMsWUFBWSxDQUNiLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQ2hGLGNBQWM7WUFDZCxRQUFRO1NBQ1QsQ0FBQyxDQUFDO1FBRUgsR0FBRyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsS0FBSyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLE1BQThCO1FBQzFDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckMsMkVBQTJFO1FBQzNFLG1FQUFtRTtRQUNuRSx5RUFBeUU7UUFDekUsNERBQTREO1FBQzVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztRQUMzQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxLQUFLLENBQUMsSUFBSSx5QkFBeUIsUUFBUSw4QkFBOEIsQ0FBQyxDQUFDO1lBQ2hHLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVuRCxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsS0FBSyxDQUFDLElBQUkseUhBQXlILENBQUMsQ0FBQztZQUMxSixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFakMsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDckYsTUFBTSxJQUFJLEtBQUssQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1lBQ3ZGLENBQUM7WUFFRCxPQUFPLElBQWMsQ0FBQztRQUN4QixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sUUFBUSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztZQUMxRSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixLQUFLLENBQUMsSUFBSSxXQUFXLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDOUUsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9GQUFvRixDQUFDLENBQUM7UUFDeEcsQ0FBQztRQUNELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVyRSxNQUFNLEVBQUUsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUM5RSxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdEIsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3RCLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM1QixZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDaEMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsdUNBQXVDLENBQUM7WUFDaEUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSw2QkFBNkIsQ0FBQztZQUNqRSw0QkFBNEIsRUFBRSxJQUFJLENBQUMsNkJBQTZCO1lBQ2hFLFdBQVcsRUFBRTtnQkFDWCxvQkFBb0IsRUFBRSxVQUFVO2dCQUNoQyxtRkFBbUY7Z0JBQ25GLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixLQUFLLEdBQUcsSUFBSTtvQkFDdEQsNEJBQTRCLEVBQUUsR0FBRztpQkFDbEMsQ0FBQzthQUNIO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFNBQVMsRUFBRSxLQUFLO2dCQUNoQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsZUFBZSxFQUFFO29CQUNmLHlEQUF5RDtvQkFDekQsWUFBWTtvQkFDWixrRUFBa0U7b0JBQ2xFLHNFQUFzRTtvQkFDdEUsc0VBQXNFO29CQUN0RSxrRUFBa0U7b0JBQ2xFLHVFQUF1RTtvQkFDdkUsc0VBQXNFO29CQUN0RSx1RUFBdUU7b0JBQ3ZFLHdFQUF3RTtvQkFDeEUsYUFBYTtvQkFDYixlQUFlO29CQUNmLFlBQVk7aUJBQ2I7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILG1FQUFtRTtRQUNuRSxpRkFBaUY7UUFDakYsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLGVBQWUsQ0FBQztZQUNyQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDcEIsT0FBTyxFQUFFLENBQUMsK0JBQStCLENBQUM7WUFDMUMsU0FBUyxFQUFFLENBQUMscUNBQXFDLFVBQVUsSUFBSSxDQUFDO1NBQ2pFLENBQUMsQ0FBQyxDQUFDO1FBRUosT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGFBQWEsQ0FBQyxJQUFZO1FBQ2hDLE9BQU87WUFDTCxJQUFJO1lBQ0osUUFBUSxFQUFFLElBQUk7WUFDZCxTQUFTLEVBQUUsSUFBSTtTQUNoQixDQUFDO0lBQ0osQ0FBQztJQUVPLFNBQVMsQ0FBQyxNQUE4QjtRQUM5QyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLE1BQU07Z0JBQ1osTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO2dCQUNsQyxLQUFLLEVBQUUsR0FBRyxNQUFNLFFBQVE7YUFDekIsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksUUFBUTtZQUM3QyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDeEQsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1NBQzFCLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSyxvQkFBb0IsQ0FBQyxLQUFvQjtRQUMvQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0RSxPQUFPLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDMUMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWTtZQUN6QyxZQUFZLEVBQUUsc0JBQXNCO1lBQ3BDLFVBQVUsRUFBRTtnQkFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQzFCLFlBQVksRUFBRSxLQUFLLENBQUMsTUFBTTthQUNiO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3RUFBd0U7SUFDaEUsTUFBTSxDQUFDLFVBQVU7UUFDdkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixPQUFPO1lBQ0wsRUFBRSxFQUFFLHNDQUFzQztZQUMxQyxLQUFLLEVBQUUsYUFBYTtZQUNwQixTQUFTLEVBQUUsUUFBUTtZQUNuQixTQUFTLEVBQUUsR0FBRztZQUNkLFNBQVMsRUFBRSxRQUFRO1lBQ25CLFNBQVMsRUFBRSxHQUFHO1lBQ2QsSUFBSSxFQUFFLFVBQVU7WUFDaEIsV0FBVyxFQUFFLElBQUk7WUFDakIsUUFBUSxFQUFFLEVBQUU7WUFDWixRQUFRLEVBQUUsU0FBUztZQUNuQixPQUFPLEVBQUUsT0FBTztZQUNoQixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxlQUFlO1lBQzNCLFdBQVcsRUFBRSxPQUFPO1lBQ3BCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsZUFBZSxFQUFFLE1BQU07WUFDdkIsT0FBTyxFQUFFLEVBQUU7WUFDWCxzQkFBc0IsRUFBRSxTQUFTO1lBQ2pDLEdBQUcsRUFBRSxFQUFFO1lBQ1AsU0FBUyxFQUFFLEVBQUU7WUFDYixlQUFlLEVBQUUsRUFBRTtZQUNuQixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFNBQVMsRUFBRSxlQUFlO1lBQzFCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsU0FBUyxFQUFFLElBQUk7WUFDZixTQUFTLEVBQUUsWUFBWTtZQUN2QixXQUFXLEVBQUUsSUFBSTtZQUNqQixNQUFNLEVBQUUsRUFBRTtZQUNWLEtBQUssRUFBRSxFQUFFO1lBQ1QsVUFBVSxFQUFFLFFBQVE7WUFDcEIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsUUFBUSxFQUFFLElBQUk7WUFDZCxTQUFTLEVBQUUsSUFBSTtZQUNmLFNBQVMsRUFBRSxJQUFJO1lBQ2YsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNLLFFBQVE7UUFDZCxPQUFPO1lBQ0wsR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQzVCLFFBQVEsRUFBRTtnQkFDUix1SUFBdUk7Z0JBQ3ZJLG9JQUFvSTtnQkFDcEksMkdBQTJHO2dCQUMzRyxRQUFRO2FBQ1Q7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0ksU0FBUztRQUNkLE9BQU87WUFDTCxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUU7WUFDNUIsSUFBSSxFQUFFLFdBQVc7WUFDakIsc0JBQXNCLEVBQUUsU0FBUztZQUNqQyxRQUFRLEVBQUU7Z0JBQ1IseUdBQXlHO2FBQzFHO1NBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAndXJsJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgU1lTVEVNX09SR19JRCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luRmlsdGVyLCBQbHVnaW4gfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhJztcbmltcG9ydCB7IEN1c3RvbVJlc291cmNlLCBUb2tlbiwgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQsIEVmZmVjdCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgUnVudGltZSwgQXJjaGl0ZWN0dXJlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBOb2RlanNGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzJztcbmltcG9ydCB7IExvZ0dyb3VwIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5PcHRpb25zIH0gZnJvbSAnLi9zdGVwLXR5cGVzLmpzJztcbmltcG9ydCB7IENvbmZpZywgQ29yZUNvbnN0YW50cyB9IGZyb20gJy4uL2NvbmZpZy9hcHAtY29uZmlnLmpzJztcbmltcG9ydCB7IFVuaXF1ZUlkIH0gZnJvbSAnLi4vY29yZS9pZC1nZW5lcmF0b3IuanMnO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoJ3BsdWdpbi1sb29rdXAnKTtcblxuLy8gRVNNLXNhZmUgbW9kdWxlIGRpcmVjdG9yeSAodGhlIHBhY2thZ2UgaXMgYHR5cGU6IG1vZHVsZWA7IGBfX2Rpcm5hbWVgIGlzXG4vLyBub3QgZGVmaW5lZCB1bmRlciBFUyBtb2R1bGVzKS5cbmNvbnN0IE1PRFVMRV9ESVIgPSBkaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5cbmludGVyZmFjZSBJbnB1dFByb3BzIHtcbiAgcmVhZG9ubHkgYmFzZVVSTDogc3RyaW5nO1xuICByZWFkb25seSBwbHVnaW5GaWx0ZXI6IFBsdWdpbkZpbHRlcjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBQbHVnaW5Mb29rdXAgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luTG9va3VwUHJvcHMge1xuICByZWFkb25seSBvcmdhbml6YXRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvamVjdDogc3RyaW5nO1xuICByZWFkb25seSBwbGF0Zm9ybVVybDogc3RyaW5nO1xuICByZWFkb25seSB1bmlxdWVJZDogVW5pcXVlSWQ7XG4gIC8qKiBPcmdhbml6YXRpb24gSUQgZm9yIHJlc29sdmluZyBwZXItb3JnIHNlY3JldHMgZnJvbSBTZWNyZXRzIE1hbmFnZXIgKi9cbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJ1bnRpbWU/OiBSdW50aW1lO1xuICAvKiogTGFtYmRhIHRpbWVvdXQgKGRlZmF1bHQ6IDMwcykgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IER1cmF0aW9uO1xuICAvKiogTGFtYmRhIG1lbW9yeSBpbiBNQiAoZGVmYXVsdDogNTEyKSAqL1xuICByZWFkb25seSBtZW1vcnlTaXplPzogbnVtYmVyO1xuICAvKiogTGFtYmRhIENQVSBhcmNoaXRlY3R1cmUgKGRlZmF1bHQ6IEFSTV82NCkgKi9cbiAgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlPzogQXJjaGl0ZWN0dXJlO1xuICAvKiogUmVzZXJ2ZWQgY29uY3VycmVudCBleGVjdXRpb25zIGZvciB0aGUgbG9va3VwIExhbWJkYSAoZGVmYXVsdDogMzApICovXG4gIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQbHVnaW5zIHByZS1yZXNvbHZlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aGAgZnJvbSB0aGUgcGxhdGZvcm0gQVBJLlxuICAgKiBLZXllZCBieSBgYWxpYXMgfHwgbmFtZWAgKG1hdGNoZXMgdGhlIGNvbnN0cnVjdCdzIG5vcm1hbGl6ZSgpIG91dHB1dCkuXG4gICAqIFdoZW4gYSBsb29rdXAgaGl0cyB0aGlzIG1hcCwgYHBsdWdpbigpYCByZXR1cm5zIHRoZSByZXNvbHZlZCBQbHVnaW5cbiAgICogZGlyZWN0bHkg4oCUIG5vIGN1c3RvbSByZXNvdXJjZSBpcyBjcmVhdGVkLiBUaGlzIGlzIHdoYXQgbWFrZXMgdGhlXG4gICAqIG5hbWUsIHZlcnNpb24sIGNvbW1hbmRzLCBlbnYsIGV0Yy4gYXZhaWxhYmxlIGF0IHN5bnRoIHRpbWUgc28gdGhlIHJlc3VsdGluZ1xuICAgKiBDRk4gdGVtcGxhdGUgc2hpcHMgd2l0aCB0aGUgcmVhbCB2YWx1ZXMgYmFrZWQgaW4uXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xufVxuXG4vKipcbiAqIENESyBDb25zdHJ1Y3QgcmVzcG9uc2libGUgZm9yIGxvb2tpbmcgdXAgcGx1Z2luIGNvbmZpZ3VyYXRpb25zIGZyb20gYW4gZXh0ZXJuYWwgcGxhdGZvcm1cbiAqIHVzaW5nIEFXUyBDbG91ZEZvcm1hdGlvbiBDdXN0b20gUmVzb3VyY2VzIGJhY2tlZCBieSBhIExhbWJkYSBmdW5jdGlvbi5cbiAqXG4gKiBUaGlzIGNvbnN0cnVjdCBjcmVhdGVzOlxuICogLSBBIExhbWJkYSBmdW5jdGlvbiAocGx1Z2luLWxvb2t1cC1oYW5kbGVyKSB0aGF0IGZldGNoZXMgcGx1Z2luIGNvbmZpZ3NcbiAqIC0gQSBDbG91ZFdhdGNoIExvZyBHcm91cCBmb3IgdGhlIExhbWJkYVxuICogLSBBIEN1c3RvbSBSZXNvdXJjZSBQcm92aWRlciB0aGF0IGludm9rZXMgdGhlIExhbWJkYVxuICogLSBBbiBJQU0gcG9saWN5IGdyYW50aW5nIHRoZSBMYW1iZGEgYWNjZXNzIHRvIHRoZSBjcmVkZW50aWFscyBzZWNyZXRcbiAqXG4gKiAjIyBQcmVyZXF1aXNpdGVzXG4gKlxuICogQmVmb3JlIGRlcGxveWluZywgc3RvcmUgYSBKV1QgdG9rZW4gaW4gU2VjcmV0cyBNYW5hZ2VyOlxuICogYGBgc2hcbiAqIHBpcGVsaW5lLW1hbmFnZXIgaW5mcmEgc3RvcmUtdG9rZW4gLS1kYXlzIDMwIC0tcmVnaW9uIDxyZWdpb24+XG4gKiBgYGBcbiAqXG4gKiBUaGUgTGFtYmRhIHJlc29sdmVzIHRoZSBzZWNyZXQgYnkgbmFtZSBhdCBydW50aW1lOlxuICogYHtTRUNSRVRTX1BBVEhfUFJFRklYfS97b3JnSWR9L3BsYXRmb3JtYFxuICpcbiAqIEBzZWUgaGFuZGxlcnMvcGx1Z2luLWxvb2t1cC1oYW5kbGVyLnRzIGZvciB0aGUgTGFtYmRhIGltcGxlbWVudGF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5Mb29rdXAgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF91bmlxdWVJZDogVW5pcXVlSWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Byb3ZpZGVyOiBQcm92aWRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGxhdGZvcm1Vcmw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnVudGltZTogUnVudGltZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogRHVyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lbW9yeVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29yZ0lkPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQbHVnaW5Mb29rdXBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoIXByb3BzLm9yZ2FuaXphdGlvbiB8fCAhcHJvcHMucHJvamVjdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCb3RoIG9yZ2FuaXphdGlvbiBhbmQgcHJvamVjdCBhcmUgcmVxdWlyZWQuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdW5pcXVlSWQgPSBwcm9wcy51bmlxdWVJZDtcbiAgICB0aGlzLl9wbGF0Zm9ybVVybCA9IHByb3BzLnBsYXRmb3JtVXJsO1xuICAgIHRoaXMuX29yZ0lkID0gcHJvcHMub3JnSWQ7XG4gICAgdGhpcy5fcnVudGltZSA9IHByb3BzLnJ1bnRpbWUgPz8gUnVudGltZS5OT0RFSlNfMjRfWDtcbiAgICB0aGlzLl90aW1lb3V0ID0gcHJvcHMudGltZW91dCA/PyBEdXJhdGlvbi5zZWNvbmRzKDMwKTtcbiAgICB0aGlzLl9tZW1vcnlTaXplID0gcHJvcHMubWVtb3J5U2l6ZSA/PyBDb25maWcuZ2V0KCdhd3MnKS5sYW1iZGEubWVtb3J5U2l6ZTtcbiAgICB0aGlzLl9hcmNoaXRlY3R1cmUgPSBwcm9wcy5hcmNoaXRlY3R1cmUgPz8gQXJjaGl0ZWN0dXJlLkFSTV82NDtcbiAgICB0aGlzLl9yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zID0gcHJvcHMucmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucztcbiAgICB0aGlzLl9yZXNvbHZlZFBsdWdpbnMgPSBwcm9wcy5yZXNvbHZlZFBsdWdpbnM7XG5cbiAgICBjb25zdCBvbkV2ZW50SGFuZGxlciA9IHRoaXMuY3JlYXRlTGFtYmRhRnVuY3Rpb24oKTtcblxuICAgIC8vIExvZy1ncm91cCBzdHJhdGVneTpcbiAgICAvLyAgIFByZXZpb3VzIGNvZGUgY3JlYXRlZCBhbiBgQVdTOjpMb2dzOjpMb2dHcm91cGAgcmVzb3VyY2Ugd2l0aCBhblxuICAgIC8vICAgRVhQTElDSVQgbmFtZSAoYC9hd3MvbGFtYmRhL3BsdWdpbi1sb29rdXAtTmApLiBUaGF0IGJyZWFrcyBldmVyeVxuICAgIC8vICAgcmUtZGVwbG95IGFmdGVyIGEgcm9sbGVkLWJhY2sgc3RhY2s6IEFXUyBhdXRvLWNyZWF0ZXMgdGhlIGdyb3VwIG9uXG4gICAgLy8gICBmaXJzdCBMYW1iZGEgaW52b2NhdGlvbiwgdGhlIHJvbGxiYWNrIGxlYXZlcyBpdCBhcyBhbiBvcnBoYW4sIGFuZFxuICAgIC8vICAgdGhlIG5leHQgQ0RLIHJ1biBmYWlscyB3aXRoIFwiUmVzb3VyY2UgLi4uIGFscmVhZHkgZXhpc3RzXCIgYmVjYXVzZVxuICAgIC8vICAgdGhlIGV4cGxpY2l0IG5hbWUgY29sbGlkZXMgd2l0aCB0aGUgb3JwaGFuLlxuICAgIC8vXG4gICAgLy8gICBGaXg6IHVzZSBgTG9nR3JvdXAuZnJvbUxvZ0dyb3VwTmFtZSgpYCB0byBhZG9wdC1vci1wYXNzLXRocm91Z2guXG4gICAgLy8gICBJZiB0aGUgZ3JvdXAgZXhpc3RzLCBDREsgcmVmZXJlbmNlcyBpdCB3aXRob3V0IHRyeWluZyB0byByZWNyZWF0ZS5cbiAgICAvLyAgIElmIGl0IGRvZXNuJ3QsIEFXUyBMYW1iZGEgYXV0by1jcmVhdGVzIGl0IG9uIGZpcnN0IGludm9jYXRpb24uXG4gICAgLy8gICBSZXRlbnRpb24gaXMgdGhlbiBzZXQgdmlhIGEgc2VwYXJhdGUgcmV0ZW50aW9uLXBvbGljeSBjdXN0b21cbiAgICAvLyAgIHJlc291cmNlIHdoaWNoIGlzIGlkZW1wb3RlbnQgKHNhZmUgdG8gYXBwbHkgdG8gZXhpc3RpbmcgZ3JvdXBzKS5cbiAgICBjb25zdCBsb2dHcm91cE5hbWUgPSBgL2F3cy9sYW1iZGEvJHt0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgncGx1Z2luOmxvb2t1cCcpLnJlcGxhY2UoLzovZywgJy0nKX1gO1xuICAgIGNvbnN0IGxvZ0dyb3VwID0gTG9nR3JvdXAuZnJvbUxvZ0dyb3VwTmFtZShcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgnbG9nOmdyb3VwJyksXG4gICAgICBsb2dHcm91cE5hbWUsXG4gICAgKTtcblxuICAgIHRoaXMuX3Byb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsIHRoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdyZXNvdXJjZTpwcm92aWRlcicpLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcixcbiAgICAgIGxvZ0dyb3VwLFxuICAgIH0pO1xuXG4gICAgbG9nLmRlYnVnKGBQbHVnaW5Mb29rdXAgaW5pdGlhbGl6ZWQgZm9yICR7cHJvcHMub3JnYW5pemF0aW9ufS8ke3Byb3BzLnByb2plY3R9YCk7XG4gIH1cblxuICAvKipcbiAgICogTG9va3MgdXAgYW5kIHJlc29sdmVzIHBsdWdpbiBjb25maWd1cmF0aW9uIHVzaW5nIGVpdGhlciBhIHNpbXBsZSBuYW1lIG9yIGZ1bGwgUGx1Z2luT3B0aW9ucyBvYmplY3RcbiAgICogRHVyaW5nIHN5bnRoZXNpcywgaWYgdGhlIHZhbHVlIGlzIHVucmVzb2x2ZWQgKHRva2VuKSwgcmV0dXJucyBmYWxsYmFjayBwbHVnaW5cbiAgICogRHVyaW5nIGRlcGxveW1lbnQsIGF0dGVtcHRzIHRvIHBhcnNlIHRoZSBhY3R1YWwgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGN1c3RvbSByZXNvdXJjZVxuICAgKiBAcGFyYW0gcGx1Z2luIC0gUGx1Z2luIG5hbWUgKHN0cmluZykgb3IgY29tcGxldGUgUGx1Z2luT3B0aW9ucyBjb25maWd1cmF0aW9uXG4gICAqIEByZXR1cm5zIFJlc29sdmVkIFBsdWdpbiBvYmplY3Qgb3IgZmFsbGJhY2sgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgcGx1Z2luKHBsdWdpbjogc3RyaW5nIHwgUGx1Z2luT3B0aW9ucyk6IFBsdWdpbiB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLm5vcm1hbGl6ZShwbHVnaW4pO1xuXG4gICAgLy8gUHJlLXJlc29sdmVkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoYCBmcm9tIHRoZSBwbGF0Zm9ybSBBUEkuXG4gICAgLy8gU2tpcCB0aGUgY3VzdG9tIHJlc291cmNlIGVudGlyZWx5IOKAlCB3ZSBhbHJlYWR5IGtub3cgdGhlIHBsdWdpbidzXG4gICAgLy8gbmFtZSwgdmVyc2lvbiwgY29tbWFuZHMsIGVudiwgZXRjLiBhdCBzeW50aCB0aW1lLCBzbyB0aGUgcmVzdWx0aW5nIENGTlxuICAgIC8vIHRlbXBsYXRlIGNhbiBzaGlwIHdpdGggdGhlIHJlYWwgQ29kZUJ1aWxkIGltYWdlIGJha2VkIGluLlxuICAgIGNvbnN0IGNhY2hlS2V5ID0gcHJvcHMuYWxpYXMgfHwgcHJvcHMubmFtZTtcbiAgICBjb25zdCBwcmVSZXNvbHZlZCA9IHRoaXMuX3Jlc29sdmVkUGx1Z2lucz8uW2NhY2hlS2V5XTtcbiAgICBpZiAocHJlUmVzb2x2ZWQpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgUGx1Z2luIFwiJHtwcm9wcy5uYW1lfVwiIHByZS1yZXNvbHZlZCAoYWxpYXM9JHtjYWNoZUtleX0pIOKAlCBza2lwcGluZyBjdXN0b20gcmVzb3VyY2VgKTtcbiAgICAgIHJldHVybiBwcmVSZXNvbHZlZDtcbiAgICB9XG5cbiAgICBjb25zdCBjdXN0b20gPSB0aGlzLmNyZWF0ZUN1c3RvbVJlc291cmNlKHByb3BzKTtcbiAgICBjb25zdCBlbmNvZGVkID0gY3VzdG9tLmdldEF0dFN0cmluZygnUmVzdWx0VmFsdWUnKTtcblxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoZW5jb2RlZCkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgUGx1Z2luIFwiJHtwcm9wcy5uYW1lfVwiIHZhbHVlIGlzIHVucmVzb2x2ZWQgKHRva2VuKSBkdXJpbmcgc3ludGhlc2lzIOKAlCB1c2luZyBmYWxsYmFjay4gVGhlIGFjdHVhbCBwbHVnaW4gd2lsbCBiZSByZXNvbHZlZCBhdCBkZXBsb3ltZW50IHRpbWUuYCk7XG4gICAgICByZXR1cm4gdGhpcy5mYWxsYmFjaygpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkID0gQnVmZmVyLmZyb20oZW5jb2RlZCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGVjb2RlZCk7XG5cbiAgICAgIGlmICghZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgIWRhdGEubmFtZSB8fCAhQXJyYXkuaXNBcnJheShkYXRhLmNvbW1hbmRzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcGx1Z2luIHJlc3BvbnNlOiBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkcyAobmFtZSwgY29tbWFuZHMpJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhIGFzIFBsdWdpbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNc2cgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJztcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIHBsdWdpbiBcIiR7cHJvcHMubmFtZX1cIiBkYXRhOiAke2Vycm9yTXNnfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBMYW1iZGEgZnVuY3Rpb24gdGhhdCBzZXJ2ZXMgYXMgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBjdXN0b20gcmVzb3VyY2UgcHJvdmlkZXIuXG4gICAqXG4gICAqIEpXVCB0b2tlbiBpcyBzdG9yZWQgaW4gYSBwcmUtZXhpc3RpbmcgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBhdFxuICAgKiBge1NFQ1JFVFNfUEFUSF9QUkVGSVh9L3tvcmdJZH0vcGxhdGZvcm1gLiBUaGUgTGFtYmRhIHJlc29sdmVzIHRoZVxuICAgKiBzZWNyZXQgYnkgbmFtZSBhdCBydW50aW1lIHVzaW5nIGBDb3JlQ29uc3RhbnRzLlNFQ1JFVFNfUEFUSF9QUkVGSVhgLlxuICAgKlxuICAgKiBDcmVhdGUgdGhlIHNlY3JldCBiZWZvcmUgZGVwbG95aW5nIHdpdGg6XG4gICAqICAgcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbiAtLWRheXMgMzAgLS1yZWdpb24gPHJlZ2lvbj5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlTGFtYmRhRnVuY3Rpb24oKTogTm9kZWpzRnVuY3Rpb24ge1xuICAgIGlmICghdGhpcy5fb3JnSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignb3JnSWQgaXMgcmVxdWlyZWQgZm9yIFBsdWdpbkxvb2t1cCDigJQgbmVlZGVkIHRvIHJlc29sdmUgdGhlIHBlci1vcmcgcGxhdGZvcm0gc2VjcmV0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHNlY3JldE5hbWUgPSBDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgodGhpcy5fb3JnSWQsICdwbGF0Zm9ybScpO1xuXG4gICAgY29uc3QgZm4gPSBuZXcgTm9kZWpzRnVuY3Rpb24odGhpcywgdGhpcy5fdW5pcXVlSWQuZ2VuZXJhdGUoJ29uZXZlbnQ6aGFuZGxlcicpLCB7XG4gICAgICBydW50aW1lOiB0aGlzLl9ydW50aW1lLFxuICAgICAgdGltZW91dDogdGhpcy5fdGltZW91dCxcbiAgICAgIG1lbW9yeVNpemU6IHRoaXMuX21lbW9yeVNpemUsXG4gICAgICBhcmNoaXRlY3R1cmU6IHRoaXMuX2FyY2hpdGVjdHVyZSxcbiAgICAgIGVudHJ5OiBqb2luKE1PRFVMRV9ESVIsICcvLi4vaGFuZGxlcnMvcGx1Z2luLWxvb2t1cC1oYW5kbGVyLmpzJyksXG4gICAgICBkZXBzTG9ja0ZpbGVQYXRoOiBqb2luKE1PRFVMRV9ESVIsICcvLi4vaGFuZGxlcnMvcG5wbS1sb2NrLnlhbWwnKSxcbiAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM6IHRoaXMuX3Jlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBQTEFURk9STV9TRUNSRVRfTkFNRTogc2VjcmV0TmFtZSxcbiAgICAgICAgLy8gQWxsb3cgc2VsZi1zaWduZWQgY2VydHMgd2hlbiBwbGF0Zm9ybSB1c2VzIEhUVFBTIHdpdGhvdXQgYSBDQS1zaWduZWQgY2VydGlmaWNhdGVcbiAgICAgICAgLi4uKHByb2Nlc3MuZW52Lk5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQgPT09ICcwJyAmJiB7XG4gICAgICAgICAgTk9ERV9UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRDogJzAnLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgICBidW5kbGluZzoge1xuICAgICAgICBtaW5pZnk6IHRydWUsXG4gICAgICAgIHNvdXJjZU1hcDogZmFsc2UsXG4gICAgICAgIHRhcmdldDogJ2VzMjAyMicsXG4gICAgICAgIGV4dGVybmFsTW9kdWxlczogW1xuICAgICAgICAgIC8vIFByb3ZpZGVkIGJ5IHRoZSBMYW1iZGEgTm9kZS5qcyBydW50aW1lIOKAlCBuZXZlciBidW5kbGUuXG4gICAgICAgICAgJ0Bhd3Mtc2RrLyonLFxuICAgICAgICAgIC8vIFN5bnRoLW9ubHkgbGlicmFyaWVzIHRoYXQgbXVzdCBORVZFUiBlbmQgdXAgaW4gYSBMYW1iZGEgYnVuZGxlLlxuICAgICAgICAgIC8vIFRoZSBoYW5kbGVyIGRvZXNuJ3QgdXNlIHRoZW07IHRoaXMgaXMgYSBndWFyZCBzbyBhIHN0cmF5IHRyYW5zaXRpdmVcbiAgICAgICAgICAvLyBpbXBvcnQgKGUuZy4gdmlhIGEgY29uZmlnIG1vZHVsZSB0aGF0IHB1bGxzIGluZnJhc3RydWN0dXJlLWNvbmZpZyDihpJcbiAgICAgICAgICAvLyBhd3MtY2RrLWxpYikgY2FuJ3QgZHJhZyB0aGUgZW50aXJlIH5odW5kcmVkcy1vZi1NQiBDREsgaW50byB0aGVcbiAgICAgICAgICAvLyBidW5kbGUgYW5kIE9PTS1raWxsIGVzYnVpbGQgZHVyaW5nIGNvbGQtc3RhcnQgc3ludGguIElmIG9uZSBvZiB0aGVzZVxuICAgICAgICAgIC8vIGlzIGV2ZXIgZ2VudWluZWx5IHJlYWNoZWQgYXQgcnVudGltZSB0aGUgTGFtYmRhIHdpbGwgZmFpbCBsb3VkbHkgYXRcbiAgICAgICAgICAvLyBpbml0IChtb2R1bGUgbm90IGZvdW5kKSByYXRoZXIgdGhhbiBzaWxlbnRseSBPT00gYXQgc3ludGgg4oCUIHdoaWNoIGlzXG4gICAgICAgICAgLy8gdGhlIGNvcnJlY3Qgc2lnbmFsLCBzaW5jZSBDREsgaGFzIG5vIGJ1c2luZXNzIHJ1bm5pbmcgaW4gdGhpcyBMYW1iZGEuXG4gICAgICAgICAgJ2F3cy1jZGstbGliJyxcbiAgICAgICAgICAnYXdzLWNkay1saWIvKicsXG4gICAgICAgICAgJ2NvbnN0cnVjdHMnLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEdyYW50IHRoZSBMYW1iZGEgcGVybWlzc2lvbiB0byByZWFkIHRoZSBwZXItb3JnIHBsYXRmb3JtIHNlY3JldC5cbiAgICAvLyBUaGUgd2lsZGNhcmQgc3VmZml4IGhhbmRsZXMgdGhlIDYtY2hhciByYW5kb20gSUQgdGhhdCBTZWNyZXRzIE1hbmFnZXIgYXBwZW5kcy5cbiAgICBmbi5hZGRUb1JvbGVQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnc2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWUnXSxcbiAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOnNlY3JldHNtYW5hZ2VyOio6KjpzZWNyZXQ6JHtzZWNyZXROYW1lfS0qYF0sXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBkZWZhdWx0IHBsdWdpbiBmaWx0ZXIuXG4gICAqIEFjY2VzcyBjb250cm9sIChvcmdJZCBzY29waW5nLCBwdWJsaWMvcHJpdmF0ZSB2aXNpYmlsaXR5KSBpcyBoYW5kbGVkIGJ5XG4gICAqIHRoZSBwbGF0Zm9ybSdzIGFjY2VzcyBjb250cm9sIHF1ZXJ5IGJ1aWxkZXIgYmFzZWQgb24gdGhlIEpXVCdzIG9yZ2FuaXphdGlvbklkLlxuICAgKi9cbiAgcHJpdmF0ZSBkZWZhdWx0RmlsdGVyKG5hbWU6IHN0cmluZyk6IFBsdWdpbkZpbHRlciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWUsXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemUocGx1Z2luOiBzdHJpbmcgfCBQbHVnaW5PcHRpb25zKTogUGx1Z2luT3B0aW9ucyB7XG4gICAgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBwbHVnaW4sXG4gICAgICAgIGZpbHRlcjogdGhpcy5kZWZhdWx0RmlsdGVyKHBsdWdpbiksXG4gICAgICAgIGFsaWFzOiBgJHtwbHVnaW59LWFsaWFzYCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHBsdWdpbi5uYW1lLFxuICAgICAgYWxpYXM6IHBsdWdpbi5hbGlhcyA/PyBgJHtwbHVnaW4ubmFtZX0tYWxpYXNgLFxuICAgICAgZmlsdGVyOiBwbHVnaW4uZmlsdGVyID8/IHRoaXMuZGVmYXVsdEZpbHRlcihwbHVnaW4ubmFtZSksXG4gICAgICBtZXRhZGF0YTogcGx1Z2luLm1ldGFkYXRhLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEN1c3RvbVJlc291cmNlIGluc3RhbmNlIHRoYXQgdHJpZ2dlcnMgcGx1Z2luIGxvb2t1cCBkdXJpbmcgZGVwbG95bWVudFxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVDdXN0b21SZXNvdXJjZShwcm9wczogUGx1Z2luT3B0aW9ucyk6IEN1c3RvbVJlc291cmNlIHtcbiAgICBjb25zdCByZXNvdXJjZUlkID0gdGhpcy5fdW5pcXVlSWQuZ2VuZXJhdGUocHJvcHMuYWxpYXMgfHwgcHJvcHMubmFtZSk7XG5cbiAgICByZXR1cm4gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIHJlc291cmNlSWQsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogdGhpcy5fcHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpQbHVnaW5Mb29rdXAnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBiYXNlVVJMOiB0aGlzLl9wbGF0Zm9ybVVybCxcbiAgICAgICAgcGx1Z2luRmlsdGVyOiBwcm9wcy5maWx0ZXIsXG4gICAgICB9IGFzIElucHV0UHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKiogQmFzZSBwbHVnaW4gc2hhcGUgd2l0aCBuby1vcCBkZWZhdWx0cyBmb3IgZmllbGRzIENESyBkb2Vzbid0IHVzZS4gKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYmFzZVBsdWdpbigpOiBQbHVnaW4ge1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJyxcbiAgICAgIG9yZ0lkOiBTWVNURU1fT1JHX0lELFxuICAgICAgY3JlYXRlZEJ5OiAnc3lzdGVtJyxcbiAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgdXBkYXRlZEJ5OiAnc3lzdGVtJyxcbiAgICAgIHVwZGF0ZWRBdDogbm93LFxuICAgICAgbmFtZTogJ2ZhbGxiYWNrJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBudWxsLFxuICAgICAga2V5d29yZHM6IFtdLFxuICAgICAgY2F0ZWdvcnk6ICd1bmtub3duJyxcbiAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICBtZXRhZGF0YToge30sXG4gICAgICBwbHVnaW5UeXBlOiAnQ29kZUJ1aWxkU3RlcCcsXG4gICAgICBjb21wdXRlVHlwZTogJ1NNQUxMJyxcbiAgICAgIHRpbWVvdXQ6IG51bGwsXG4gICAgICBmYWlsdXJlQmVoYXZpb3I6ICdmYWlsJyxcbiAgICAgIHNlY3JldHM6IFtdLFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogJ2Nkay5vdXQnLFxuICAgICAgZW52OiB7fSxcbiAgICAgIGJ1aWxkQXJnczoge30sXG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IFtdLFxuICAgICAgY29tbWFuZHM6IFtdLFxuICAgICAgZG9ja2VyZmlsZTogbnVsbCxcbiAgICAgIGJ1aWxkVHlwZTogJ21ldGFkYXRhX29ubHknLFxuICAgICAgb3duZXJJZDogbnVsbCxcbiAgICAgIG93bmVyVHlwZTogbnVsbCxcbiAgICAgIGxpZmVjeWNsZTogJ3Byb2R1Y3Rpb24nLFxuICAgICAgY3JpdGljYWxpdHk6IG51bGwsXG4gICAgICBsYWJlbHM6IHt9LFxuICAgICAgbGlua3M6IFtdLFxuICAgICAgdmlzaWJpbGl0eTogJ3B1YmxpYycsXG4gICAgICBpc0RlZmF1bHQ6IGZhbHNlLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBkZWxldGVkQXQ6IG51bGwsXG4gICAgICBkZWxldGVkQnk6IG51bGwsXG4gICAgICBwdXJnZUFmdGVyOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmFsbGJhY2sgZm9yIGEgcGx1Z2luIHdob3NlIGxvb2t1cCByZXR1cm5lZCBubyByZWNvcmQgKG5vdCBpbiB0aGUgcGxhdGZvcm1cbiAgICogY2F0YWxvZyBmb3IgdGhpcyBvcmcpIGFuZCBzbyBjb3VsZCBub3QgYmUgcHJlLXJlc29sdmVkIGF0IHN5bnRoLlxuICAgKlxuICAgKiBUaGlzIHN0ZXAgRkFJTFMgdGhlIGJ1aWxkIChleGl0IDEpIG9uIHB1cnBvc2UuIFRoZSBwcmV2aW91cyBiZWhhdmlvdXIg4oCUXG4gICAqIGBlY2hvIFwi4oCmXCIgJiYgZXhpdCAwYCDigJQgd2FzIGEgZmFsc2UgcG9zaXRpdmU6IGFuIHVucmVzb2x2ZWQgc2VjdXJpdHkvcXVhbGl0eVxuICAgKiBzdGVwIChkZXBlbmRlbmN5LWNoZWNrLCBzZW1ncmVwLCBzcG90YnVncywg4oCmKSByZXBvcnRlZCB0aGUgc3RhZ2UgZ3JlZW4gd2hpbGVcbiAgICogcnVubmluZyBub3RoaW5nLCBnaXZpbmcgZmFsc2UgYXNzdXJhbmNlIHRoYXQgc2NhbnMvYnVpbGRzIGhhZCBwYXNzZWQuIEFcbiAgICogcGx1Z2luIHN0ZXAgdGhhdCBjYW4ndCBydW4gaXRzIHBsdWdpbiBtdXN0IGdvIHJlZCwgY29uc2lzdGVudCB3aXRoXG4gICAqIGBiYXNlUGx1Z2luKCkuZmFpbHVyZUJlaGF2aW9yID09PSAnZmFpbCdgLiBUaGUgbWVzc2FnZSBpcyBhY3Rpb25hYmxlIHNvIHRoZVxuICAgKiBvcGVyYXRvciBrbm93cyB0aGUgY2F0YWxvZyBpcyBlbXB0eS9pbmNvbXBsZXRlLCBub3QgdGhhdCB0aGUgdG9vbCBjcmFzaGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBmYWxsYmFjaygpOiBQbHVnaW4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5QbHVnaW5Mb29rdXAuYmFzZVBsdWdpbigpLFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgJ2VjaG8gXCJFUlJPUjogcGx1Z2luIGxvb2t1cCByZXR1cm5lZCBubyByZWNvcmQg4oCUIHRoaXMgcGx1Z2luIGlzIG5vdCBpbiB0aGUgcGxhdGZvcm0gY2F0YWxvZyBmb3IgdGhpcyBvcmcsIHNvIHRoZSBzdGVwIGNhbm5vdCBydW4uXCIgPiYyJyxcbiAgICAgICAgJ2VjaG8gXCJUaGlzIHN0ZXAgZmFpbHMgaW5zdGVhZCBvZiBwYXNzaW5nIGFzIGEgbm8tb3AgKGFuIHVucmVzb2x2ZWQgcGx1Z2luIHJlcG9ydGluZyBzdWNjZXNzIHdvdWxkIGJlIGEgZmFsc2UtcG9zaXRpdmUgZ3JlZW4pLlwiID4mMicsXG4gICAgICAgICdlY2hvIFwiRml4OiBsb2FkIHRoZSBwbHVnaW4gaW50byB0aGUgcGxhdGZvcm0gKGRlcGxveS9iaW4vbG9hZC1wbHVnaW5zLnNoKSwgdGhlbiByZS1ydW4gdGhlIHBpcGVsaW5lLlwiID4mMicsXG4gICAgICAgICdleGl0IDEnLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bnRoIHBsdWdpbiB3aXRoIHBpcGVsaW5lLW1hbmFnZXIgY29tbWFuZHMuIENvbGQtc3RhcnQgYm9vdHN0cmFwIGZvclxuICAgKiB0aGUgc3ludGggc3RlcCB3aGVuIHByZS1yZXNvbHV0aW9uIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoL2RlcGxveWBcbiAgICogZGlkbid0IHBvcHVsYXRlIGByZXNvbHZlZFBsdWdpbnNgIGZvciB0aGUgc3ludGggcGx1Z2luLiBSdW5zIG9uIHRoZVxuICAgKiBjb25maWd1cmVkIGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRWAgKGRlZmF1bHQgYHBpcGVsaW5lLWJvb3RzdHJhcDoxLjBgKVxuICAgKiBhbmQgc2VsZi1ib290c3RyYXBzIHRoZSByZWFsIHN5bnRoIHZpYVxuICAgKiBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aCAtLWlkICR7UElQRUxJTkVfSUR9YC5cbiAgICpcbiAgICogTm8gYGluc3RhbGxDb21tYW5kc2A6IHRoZSBkZWZhdWx0IGltYWdlIGFscmVhZHkgaGFzIGBwaXBlbGluZS1tYW5hZ2VyYFxuICAgKiBiYWtlZCBpbiAodGhhdCdzIHRoZSB3aG9sZSBwb2ludCBvZiBgcGlwZWxpbmUtYm9vdHN0cmFwOjEuMGApLiBJZiB0aGVcbiAgICogb3BlcmF0b3IgcG9pbnRzIENPREVCVUlMRF9ERUZBVUxUX0lNQUdFIGF0IGFuIGltYWdlIGxhY2tpbmcgaXQgKGUuZy5cbiAgICogdmFuaWxsYSBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjcuMCksIHRoaXMgc3RlcCBleGl0cyAxMjcg4oCUIGZpeCB0aGF0XG4gICAqIGJ5IHVzaW5nIGFuIGltYWdlIHdpdGggcGlwZWxpbmUtbWFuYWdlciByYXRoZXIgdGhhbiBwYXBlcmluZyBvdmVyIGl0XG4gICAqIHdpdGggYSBwZXItYnVpbGQgYG5wbSBpbnN0YWxsIC1nYC5cbiAgICovXG4gIHB1YmxpYyBib290c3RyYXAoKTogUGx1Z2luIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uUGx1Z2luTG9va3VwLmJhc2VQbHVnaW4oKSxcbiAgICAgIG5hbWU6ICdjZGstc3ludGgnLFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogJ2Nkay5vdXQnLFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgJ3BpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgc3ludGggLS1pZCAke1BJUEVMSU5FX0lEfSAtLXN0b3JlLXRva2VucyAtLXF1aWV0IC0tbm8tbm90aWNlcyAtLW5vLXZlcmlmeS1zc2wnLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
333
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9wbHVnaW4tbG9va3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFMUMsMkVBQTJFO0FBQzNFLGlDQUFpQztBQUNqQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFxQzNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLE9BQU8sWUFBYSxTQUFRLFNBQVM7SUFDeEIsU0FBUyxDQUFXO0lBQ3BCLFNBQVMsQ0FBVztJQUNwQixZQUFZLENBQVM7SUFDckIsUUFBUSxDQUFVO0lBQ2xCLFFBQVEsQ0FBVztJQUNuQixXQUFXLENBQVM7SUFDcEIsYUFBYSxDQUFlO0lBQzVCLDZCQUE2QixDQUFVO0lBQ3ZDLE1BQU0sQ0FBVTtJQUNoQixnQkFBZ0IsQ0FBMEI7SUFFM0QsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3QjtRQUNoRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDckQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUMzRSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUMvRCxJQUFJLENBQUMsNkJBQTZCLEdBQUcsS0FBSyxDQUFDLDRCQUE0QixDQUFDO1FBQ3hFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBRTlDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRW5ELHNCQUFzQjtRQUN0QixvRUFBb0U7UUFDcEUscUVBQXFFO1FBQ3JFLHVFQUF1RTtRQUN2RSxzRUFBc0U7UUFDdEUsc0VBQXNFO1FBQ3RFLGdEQUFnRDtRQUNoRCxFQUFFO1FBQ0YscUVBQXFFO1FBQ3JFLHVFQUF1RTtRQUN2RSxtRUFBbUU7UUFDbkUsaUVBQWlFO1FBQ2pFLHFFQUFxRTtRQUNyRSxNQUFNLFlBQVksR0FBRyxlQUFlLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsRyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQ3hDLElBQUksRUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFDcEMsWUFBWSxDQUNiLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQ2hGLGNBQWM7WUFDZCxRQUFRO1NBQ1QsQ0FBQyxDQUFDO1FBRUgsR0FBRyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsS0FBSyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLE1BQThCO1FBQzFDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckMsMkVBQTJFO1FBQzNFLG1FQUFtRTtRQUNuRSx5RUFBeUU7UUFDekUsNERBQTREO1FBQzVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztRQUMzQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCx5RUFBeUU7UUFDekUsd0VBQXdFO1FBQ3hFLHVFQUF1RTtRQUN2RSx1RUFBdUU7UUFDdkUsMENBQTBDO1FBQzFDLHFFQUFxRTtRQUNyRSx3RUFBd0U7UUFDeEUsYUFBYTtRQUNiLE1BQU0sVUFBVSxHQUFJLEtBQUssQ0FBQyxNQUF3QyxFQUFFLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZGLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FDYixpQkFBaUIsUUFBUSxrQkFBa0IsV0FBVyxDQUFDLElBQUksV0FBVyxVQUFVLEtBQUs7a0JBQ25GLDBDQUEwQyxDQUM3QyxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEtBQUssQ0FBQyxJQUFJLHlCQUF5QixRQUFRLDhCQUE4QixDQUFDLENBQUM7WUFDaEcsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRW5ELElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxLQUFLLENBQUMsSUFBSSx5SEFBeUgsQ0FBQyxDQUFDO1lBQzFKLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVqQyxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNyRixNQUFNLElBQUksS0FBSyxDQUFDLG1FQUFtRSxDQUFDLENBQUM7WUFDdkYsQ0FBQztZQUVELE9BQU8sSUFBYyxDQUFDO1FBQ3hCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxRQUFRLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO1lBQzFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLEtBQUssQ0FBQyxJQUFJLFdBQVcsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM5RSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNLLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0ZBQW9GLENBQUMsQ0FBQztRQUN4RyxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXJFLE1BQU0sRUFBRSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQzlFLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN0QixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdEIsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzVCLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNoQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSx1Q0FBdUMsQ0FBQztZQUNoRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLDZCQUE2QixDQUFDO1lBQ2pFLDRCQUE0QixFQUFFLElBQUksQ0FBQyw2QkFBNkI7WUFDaEUsV0FBVyxFQUFFO2dCQUNYLG9CQUFvQixFQUFFLFVBQVU7Z0JBQ2hDLG1GQUFtRjtnQkFDbkYsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLEtBQUssR0FBRyxJQUFJO29CQUN0RCw0QkFBNEIsRUFBRSxHQUFHO2lCQUNsQyxDQUFDO2FBQ0g7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsTUFBTSxFQUFFLElBQUk7Z0JBQ1osU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixlQUFlLEVBQUU7b0JBQ2YseURBQXlEO29CQUN6RCxZQUFZO29CQUNaLGtFQUFrRTtvQkFDbEUsc0VBQXNFO29CQUN0RSxzRUFBc0U7b0JBQ3RFLGtFQUFrRTtvQkFDbEUsdUVBQXVFO29CQUN2RSxzRUFBc0U7b0JBQ3RFLHVFQUF1RTtvQkFDdkUsd0VBQXdFO29CQUN4RSxhQUFhO29CQUNiLGVBQWU7b0JBQ2YsWUFBWTtpQkFDYjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsbUVBQW1FO1FBQ25FLGlGQUFpRjtRQUNqRixFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksZUFBZSxDQUFDO1lBQ3JDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSztZQUNwQixPQUFPLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztZQUMxQyxTQUFTLEVBQUUsQ0FBQyxxQ0FBcUMsVUFBVSxJQUFJLENBQUM7U0FDakUsQ0FBQyxDQUFDLENBQUM7UUFFSixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssYUFBYSxDQUFDLElBQVk7UUFDaEMsT0FBTztZQUNMLElBQUk7WUFDSixRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUM7SUFDSixDQUFDO0lBRU8sU0FBUyxDQUFDLE1BQThCO1FBQzlDLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0IsT0FBTztnQkFDTCxJQUFJLEVBQUUsTUFBTTtnQkFDWixNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7Z0JBQ2xDLEtBQUssRUFBRSxHQUFHLE1BQU0sUUFBUTthQUN6QixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU87WUFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxRQUFRO1lBQzdDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUN4RCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNLLG9CQUFvQixDQUFDLEtBQW9CO1FBQy9DLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRFLE9BQU8sSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUMxQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZO1lBQ3pDLFlBQVksRUFBRSxzQkFBc0I7WUFDcEMsVUFBVSxFQUFFO2dCQUNWLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDMUIsWUFBWSxFQUFFLEtBQUssQ0FBQyxNQUFNO2FBQ2I7U0FDaEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHdFQUF3RTtJQUNoRSxNQUFNLENBQUMsVUFBVTtRQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE9BQU87WUFDTCxFQUFFLEVBQUUsc0NBQXNDO1lBQzFDLEtBQUssRUFBRSxhQUFhO1lBQ3BCLFNBQVMsRUFBRSxRQUFRO1lBQ25CLFNBQVMsRUFBRSxHQUFHO1lBQ2QsU0FBUyxFQUFFLFFBQVE7WUFDbkIsU0FBUyxFQUFFLEdBQUc7WUFDZCxJQUFJLEVBQUUsVUFBVTtZQUNoQixXQUFXLEVBQUUsSUFBSTtZQUNqQixRQUFRLEVBQUUsRUFBRTtZQUNaLFFBQVEsRUFBRSxTQUFTO1lBQ25CLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLGVBQWU7WUFDM0IsV0FBVyxFQUFFLE9BQU87WUFDcEIsT0FBTyxFQUFFLElBQUk7WUFDYixlQUFlLEVBQUUsTUFBTTtZQUN2QixPQUFPLEVBQUUsRUFBRTtZQUNYLHNCQUFzQixFQUFFLFNBQVM7WUFDakMsR0FBRyxFQUFFLEVBQUU7WUFDUCxTQUFTLEVBQUUsRUFBRTtZQUNiLGVBQWUsRUFBRSxFQUFFO1lBQ25CLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLElBQUk7WUFDaEIsU0FBUyxFQUFFLGVBQWU7WUFDMUIsV0FBVyxFQUFFLElBQUk7WUFDakIsV0FBVyxFQUFFLElBQUk7WUFDakIsT0FBTyxFQUFFLElBQUk7WUFDYixTQUFTLEVBQUUsSUFBSTtZQUNmLFNBQVMsRUFBRSxZQUFZO1lBQ3ZCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsS0FBSyxFQUFFLEVBQUU7WUFDVCxVQUFVLEVBQUUsUUFBUTtZQUNwQixTQUFTLEVBQUUsS0FBSztZQUNoQixRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRSxJQUFJO1lBQ2YsU0FBUyxFQUFFLElBQUk7WUFDZixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ssUUFBUTtRQUNkLE9BQU87WUFDTCxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUU7WUFDNUIsUUFBUSxFQUFFO2dCQUNSLHVJQUF1STtnQkFDdkksb0lBQW9JO2dCQUNwSSwyR0FBMkc7Z0JBQzNHLFFBQVE7YUFDVDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxTQUFTO1FBQ2QsT0FBTztZQUNMLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRTtZQUM1QixJQUFJLEVBQUUsV0FBVztZQUNqQixzQkFBc0IsRUFBRSxTQUFTO1lBQ2pDLFFBQVEsRUFBRTtnQkFDUix5R0FBeUc7YUFDMUc7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCBTWVNURU1fT1JHX0lEIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5GaWx0ZXIsIFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UsIFRva2VuLCBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgRWZmZWN0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBSdW50aW1lLCBBcmNoaXRlY3R1cmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IE5vZGVqc0Z1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMnO1xuaW1wb3J0IHsgTG9nR3JvdXAgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ2F3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbk9wdGlvbnMgfSBmcm9tICcuL3N0ZXAtdHlwZXMuanMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcuanMnO1xuaW1wb3J0IHsgVW5pcXVlSWQgfSBmcm9tICcuLi9jb3JlL2lkLWdlbmVyYXRvci5qcyc7XG5cbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcigncGx1Z2luLWxvb2t1cCcpO1xuXG4vLyBFU00tc2FmZSBtb2R1bGUgZGlyZWN0b3J5ICh0aGUgcGFja2FnZSBpcyBgdHlwZTogbW9kdWxlYDsgYF9fZGlybmFtZWAgaXNcbi8vIG5vdCBkZWZpbmVkIHVuZGVyIEVTIG1vZHVsZXMpLlxuY29uc3QgTU9EVUxFX0RJUiA9IGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuaW50ZXJmYWNlIElucHV0UHJvcHMge1xuICByZWFkb25seSBiYXNlVVJMOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsdWdpbkZpbHRlcjogUGx1Z2luRmlsdGVyO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIFBsdWdpbkxvb2t1cCBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Mb29rdXBQcm9wcyB7XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogc3RyaW5nO1xuICByZWFkb25seSBwcm9qZWN0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsYXRmb3JtVXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVuaXF1ZUlkOiBVbmlxdWVJZDtcbiAgLyoqIE9yZ2FuaXphdGlvbiBJRCBmb3IgcmVzb2x2aW5nIHBlci1vcmcgc2VjcmV0cyBmcm9tIFNlY3JldHMgTWFuYWdlciAqL1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgcnVudGltZT86IFJ1bnRpbWU7XG4gIC8qKiBMYW1iZGEgdGltZW91dCAoZGVmYXVsdDogMzBzKSAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG4gIC8qKiBMYW1iZGEgbWVtb3J5IGluIE1CIChkZWZhdWx0OiA1MTIpICovXG4gIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XG4gIC8qKiBMYW1iZGEgQ1BVIGFyY2hpdGVjdHVyZSAoZGVmYXVsdDogQVJNXzY0KSAqL1xuICByZWFkb25seSBhcmNoaXRlY3R1cmU/OiBBcmNoaXRlY3R1cmU7XG4gIC8qKiBSZXNlcnZlZCBjb25jdXJyZW50IGV4ZWN1dGlvbnMgZm9yIHRoZSBsb29rdXAgTGFtYmRhIChkZWZhdWx0OiAzMCkgKi9cbiAgcmVhZG9ubHkgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFBsdWdpbnMgcHJlLXJlc29sdmVkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoYCBmcm9tIHRoZSBwbGF0Zm9ybSBBUEkuXG4gICAqIEtleWVkIGJ5IGBhbGlhcyB8fCBuYW1lYCAobWF0Y2hlcyB0aGUgY29uc3RydWN0J3Mgbm9ybWFsaXplKCkgb3V0cHV0KS5cbiAgICogV2hlbiBhIGxvb2t1cCBoaXRzIHRoaXMgbWFwLCBgcGx1Z2luKClgIHJldHVybnMgdGhlIHJlc29sdmVkIFBsdWdpblxuICAgKiBkaXJlY3RseSDigJQgbm8gY3VzdG9tIHJlc291cmNlIGlzIGNyZWF0ZWQuIFRoaXMgaXMgd2hhdCBtYWtlcyB0aGVcbiAgICogbmFtZSwgdmVyc2lvbiwgY29tbWFuZHMsIGVudiwgZXRjLiBhdmFpbGFibGUgYXQgc3ludGggdGltZSBzbyB0aGUgcmVzdWx0aW5nXG4gICAqIENGTiB0ZW1wbGF0ZSBzaGlwcyB3aXRoIHRoZSByZWFsIHZhbHVlcyBiYWtlZCBpbi5cbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdmVkUGx1Z2lucz86IFJlY29yZDxzdHJpbmcsIFBsdWdpbj47XG59XG5cbi8qKlxuICogQ0RLIENvbnN0cnVjdCByZXNwb25zaWJsZSBmb3IgbG9va2luZyB1cCBwbHVnaW4gY29uZmlndXJhdGlvbnMgZnJvbSBhbiBleHRlcm5hbCBwbGF0Zm9ybVxuICogdXNpbmcgQVdTIENsb3VkRm9ybWF0aW9uIEN1c3RvbSBSZXNvdXJjZXMgYmFja2VkIGJ5IGEgTGFtYmRhIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgY29uc3RydWN0IGNyZWF0ZXM6XG4gKiAtIEEgTGFtYmRhIGZ1bmN0aW9uIChwbHVnaW4tbG9va3VwLWhhbmRsZXIpIHRoYXQgZmV0Y2hlcyBwbHVnaW4gY29uZmlnc1xuICogLSBBIENsb3VkV2F0Y2ggTG9nIEdyb3VwIGZvciB0aGUgTGFtYmRhXG4gKiAtIEEgQ3VzdG9tIFJlc291cmNlIFByb3ZpZGVyIHRoYXQgaW52b2tlcyB0aGUgTGFtYmRhXG4gKiAtIEFuIElBTSBwb2xpY3kgZ3JhbnRpbmcgdGhlIExhbWJkYSBhY2Nlc3MgdG8gdGhlIGNyZWRlbnRpYWxzIHNlY3JldFxuICpcbiAqICMjIFByZXJlcXVpc2l0ZXNcbiAqXG4gKiBCZWZvcmUgZGVwbG95aW5nLCBzdG9yZSBhIEpXVCB0b2tlbiBpbiBTZWNyZXRzIE1hbmFnZXI6XG4gKiBgYGBzaFxuICogcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbiAtLWRheXMgMzAgLS1yZWdpb24gPHJlZ2lvbj5cbiAqIGBgYFxuICpcbiAqIFRoZSBMYW1iZGEgcmVzb2x2ZXMgdGhlIHNlY3JldCBieSBuYW1lIGF0IHJ1bnRpbWU6XG4gKiBge1NFQ1JFVFNfUEFUSF9QUkVGSVh9L3tvcmdJZH0vcGxhdGZvcm1gXG4gKlxuICogQHNlZSBoYW5kbGVycy9wbHVnaW4tbG9va3VwLWhhbmRsZXIudHMgZm9yIHRoZSBMYW1iZGEgaW1wbGVtZW50YXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbkxvb2t1cCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VuaXF1ZUlkOiBVbmlxdWVJZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcHJvdmlkZXI6IFByb3ZpZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wbGF0Zm9ybVVybDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydW50aW1lOiBSdW50aW1lO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lb3V0OiBEdXJhdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWVtb3J5U2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucz86IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3JnSWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc29sdmVkUGx1Z2lucz86IFJlY29yZDxzdHJpbmcsIFBsdWdpbj47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFBsdWdpbkxvb2t1cFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmICghcHJvcHMub3JnYW5pemF0aW9uIHx8ICFwcm9wcy5wcm9qZWN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggb3JnYW5pemF0aW9uIGFuZCBwcm9qZWN0IGFyZSByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl91bmlxdWVJZCA9IHByb3BzLnVuaXF1ZUlkO1xuICAgIHRoaXMuX3BsYXRmb3JtVXJsID0gcHJvcHMucGxhdGZvcm1Vcmw7XG4gICAgdGhpcy5fb3JnSWQgPSBwcm9wcy5vcmdJZDtcbiAgICB0aGlzLl9ydW50aW1lID0gcHJvcHMucnVudGltZSA/PyBSdW50aW1lLk5PREVKU18yNF9YO1xuICAgIHRoaXMuX3RpbWVvdXQgPSBwcm9wcy50aW1lb3V0ID8/IER1cmF0aW9uLnNlY29uZHMoMzApO1xuICAgIHRoaXMuX21lbW9yeVNpemUgPSBwcm9wcy5tZW1vcnlTaXplID8/IENvbmZpZy5nZXQoJ2F3cycpLmxhbWJkYS5tZW1vcnlTaXplO1xuICAgIHRoaXMuX2FyY2hpdGVjdHVyZSA9IHByb3BzLmFyY2hpdGVjdHVyZSA/PyBBcmNoaXRlY3R1cmUuQVJNXzY0O1xuICAgIHRoaXMuX3Jlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMgPSBwcm9wcy5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zO1xuICAgIHRoaXMuX3Jlc29sdmVkUGx1Z2lucyA9IHByb3BzLnJlc29sdmVkUGx1Z2lucztcblxuICAgIGNvbnN0IG9uRXZlbnRIYW5kbGVyID0gdGhpcy5jcmVhdGVMYW1iZGFGdW5jdGlvbigpO1xuXG4gICAgLy8gTG9nLWdyb3VwIHN0cmF0ZWd5OlxuICAgIC8vICAgUHJldmlvdXMgY29kZSBjcmVhdGVkIGFuIGBBV1M6OkxvZ3M6OkxvZ0dyb3VwYCByZXNvdXJjZSB3aXRoIGFuXG4gICAgLy8gICBFWFBMSUNJVCBuYW1lIChgL2F3cy9sYW1iZGEvcGx1Z2luLWxvb2t1cC1OYCkuIFRoYXQgYnJlYWtzIGV2ZXJ5XG4gICAgLy8gICByZS1kZXBsb3kgYWZ0ZXIgYSByb2xsZWQtYmFjayBzdGFjazogQVdTIGF1dG8tY3JlYXRlcyB0aGUgZ3JvdXAgb25cbiAgICAvLyAgIGZpcnN0IExhbWJkYSBpbnZvY2F0aW9uLCB0aGUgcm9sbGJhY2sgbGVhdmVzIGl0IGFzIGFuIG9ycGhhbiwgYW5kXG4gICAgLy8gICB0aGUgbmV4dCBDREsgcnVuIGZhaWxzIHdpdGggXCJSZXNvdXJjZSAuLi4gYWxyZWFkeSBleGlzdHNcIiBiZWNhdXNlXG4gICAgLy8gICB0aGUgZXhwbGljaXQgbmFtZSBjb2xsaWRlcyB3aXRoIHRoZSBvcnBoYW4uXG4gICAgLy9cbiAgICAvLyAgIEZpeDogdXNlIGBMb2dHcm91cC5mcm9tTG9nR3JvdXBOYW1lKClgIHRvIGFkb3B0LW9yLXBhc3MtdGhyb3VnaC5cbiAgICAvLyAgIElmIHRoZSBncm91cCBleGlzdHMsIENESyByZWZlcmVuY2VzIGl0IHdpdGhvdXQgdHJ5aW5nIHRvIHJlY3JlYXRlLlxuICAgIC8vICAgSWYgaXQgZG9lc24ndCwgQVdTIExhbWJkYSBhdXRvLWNyZWF0ZXMgaXQgb24gZmlyc3QgaW52b2NhdGlvbi5cbiAgICAvLyAgIFJldGVudGlvbiBpcyB0aGVuIHNldCB2aWEgYSBzZXBhcmF0ZSByZXRlbnRpb24tcG9saWN5IGN1c3RvbVxuICAgIC8vICAgcmVzb3VyY2Ugd2hpY2ggaXMgaWRlbXBvdGVudCAoc2FmZSB0byBhcHBseSB0byBleGlzdGluZyBncm91cHMpLlxuICAgIGNvbnN0IGxvZ0dyb3VwTmFtZSA9IGAvYXdzL2xhbWJkYS8ke3RoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdwbHVnaW46bG9va3VwJykucmVwbGFjZSgvOi9nLCAnLScpfWA7XG4gICAgY29uc3QgbG9nR3JvdXAgPSBMb2dHcm91cC5mcm9tTG9nR3JvdXBOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdsb2c6Z3JvdXAnKSxcbiAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICApO1xuXG4gICAgdGhpcy5fcHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgdGhpcy5fdW5pcXVlSWQuZ2VuZXJhdGUoJ3Jlc291cmNlOnByb3ZpZGVyJyksIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyLFxuICAgICAgbG9nR3JvdXAsXG4gICAgfSk7XG5cbiAgICBsb2cuZGVidWcoYFBsdWdpbkxvb2t1cCBpbml0aWFsaXplZCBmb3IgJHtwcm9wcy5vcmdhbml6YXRpb259LyR7cHJvcHMucHJvamVjdH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rcyB1cCBhbmQgcmVzb2x2ZXMgcGx1Z2luIGNvbmZpZ3VyYXRpb24gdXNpbmcgZWl0aGVyIGEgc2ltcGxlIG5hbWUgb3IgZnVsbCBQbHVnaW5PcHRpb25zIG9iamVjdFxuICAgKiBEdXJpbmcgc3ludGhlc2lzLCBpZiB0aGUgdmFsdWUgaXMgdW5yZXNvbHZlZCAodG9rZW4pLCByZXR1cm5zIGZhbGxiYWNrIHBsdWdpblxuICAgKiBEdXJpbmcgZGVwbG95bWVudCwgYXR0ZW1wdHMgdG8gcGFyc2UgdGhlIGFjdHVhbCB2YWx1ZSByZXR1cm5lZCBieSB0aGUgY3VzdG9tIHJlc291cmNlXG4gICAqIEBwYXJhbSBwbHVnaW4gLSBQbHVnaW4gbmFtZSAoc3RyaW5nKSBvciBjb21wbGV0ZSBQbHVnaW5PcHRpb25zIGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgUmVzb2x2ZWQgUGx1Z2luIG9iamVjdCBvciBmYWxsYmFjayBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHB1YmxpYyBwbHVnaW4ocGx1Z2luOiBzdHJpbmcgfCBQbHVnaW5PcHRpb25zKTogUGx1Z2luIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMubm9ybWFsaXplKHBsdWdpbik7XG5cbiAgICAvLyBQcmUtcmVzb2x2ZWQgYnkgYHBpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgc3ludGhgIGZyb20gdGhlIHBsYXRmb3JtIEFQSS5cbiAgICAvLyBTa2lwIHRoZSBjdXN0b20gcmVzb3VyY2UgZW50aXJlbHkg4oCUIHdlIGFscmVhZHkga25vdyB0aGUgcGx1Z2luJ3NcbiAgICAvLyBuYW1lLCB2ZXJzaW9uLCBjb21tYW5kcywgZW52LCBldGMuIGF0IHN5bnRoIHRpbWUsIHNvIHRoZSByZXN1bHRpbmcgQ0ZOXG4gICAgLy8gdGVtcGxhdGUgY2FuIHNoaXAgd2l0aCB0aGUgcmVhbCBDb2RlQnVpbGQgaW1hZ2UgYmFrZWQgaW4uXG4gICAgY29uc3QgY2FjaGVLZXkgPSBwcm9wcy5hbGlhcyB8fCBwcm9wcy5uYW1lO1xuICAgIGNvbnN0IHByZVJlc29sdmVkID0gdGhpcy5fcmVzb2x2ZWRQbHVnaW5zPy5bY2FjaGVLZXldO1xuICAgIC8vIFRoZSBtYXAgaXMga2V5ZWQgYnkgQUxJQVMsIHNvIGNoZWNrIGl0IGFjdHVhbGx5IGhvbGRzIFRISVMgcGx1Z2luLiBUd29cbiAgICAvLyBzdGVwcyBzaGFyaW5nIGFuIGFsaWFzIGFjcm9zcyBkaWZmZXJlbnQgcGx1Z2lucyB1c2VkIHRvIGdldCB0aGUgZmlyc3RcbiAgICAvLyBvbmUncyByZWNvcmQgYmFjayDigJQgdGhlIHNlY29uZCBzdGVwIHNpbGVudGx5IHJhbiB0aGUgd3JvbmcgaW1hZ2UgYW5kXG4gICAgLy8gY29tbWFuZHMuIFRoZSBDTEkgcmVmdXNlcyBzdWNoIGEgcGlwZWxpbmUgdG9vOyB0aGlzIGNvdmVycyBhbnkgb3RoZXJcbiAgICAvLyBjYWxsZXIgdGhhdCBzdXBwbGllcyBgcmVzb2x2ZWRQbHVnaW5zYC5cbiAgICAvLyBDb21wYXJlIGFnYWluc3QgdGhlIG5hbWUgdGhlIGxvb2t1cCBhY3R1YWxseSBUQVJHRVRFRDogYW4gZXhwbGljaXRcbiAgICAvLyBgZmlsdGVyLm5hbWVgIG92ZXJyaWRlcyB0aGUgcmVmJ3MgYG5hbWVgIGJ5IGRlc2lnbiwgYW5kIHRoYXQgaXMgbm90IGFcbiAgICAvLyBjb2xsaXNpb24uXG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IChwcm9wcy5maWx0ZXIgYXMgeyBuYW1lPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpPy5uYW1lID8/IHByb3BzLm5hbWU7XG4gICAgaWYgKHByZVJlc29sdmVkICYmIHByZVJlc29sdmVkLm5hbWUgIT09IHRhcmdldE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFBsdWdpbiBhbGlhcyBcIiR7Y2FjaGVLZXl9XCIgcmVzb2x2ZXMgdG8gXCIke3ByZVJlc29sdmVkLm5hbWV9XCIsIG5vdCBcIiR7dGFyZ2V0TmFtZX1cIi4gYFxuICAgICAgICArICdFYWNoIGFsaWFzIG11c3QgbmFtZSBleGFjdGx5IG9uZSBwbHVnaW4uJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwcmVSZXNvbHZlZCkge1xuICAgICAgbG9nLmRlYnVnKGBQbHVnaW4gXCIke3Byb3BzLm5hbWV9XCIgcHJlLXJlc29sdmVkIChhbGlhcz0ke2NhY2hlS2V5fSkg4oCUIHNraXBwaW5nIGN1c3RvbSByZXNvdXJjZWApO1xuICAgICAgcmV0dXJuIHByZVJlc29sdmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGN1c3RvbSA9IHRoaXMuY3JlYXRlQ3VzdG9tUmVzb3VyY2UocHJvcHMpO1xuICAgIGNvbnN0IGVuY29kZWQgPSBjdXN0b20uZ2V0QXR0U3RyaW5nKCdSZXN1bHRWYWx1ZScpO1xuXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChlbmNvZGVkKSkge1xuICAgICAgbG9nLmRlYnVnKGBQbHVnaW4gXCIke3Byb3BzLm5hbWV9XCIgdmFsdWUgaXMgdW5yZXNvbHZlZCAodG9rZW4pIGR1cmluZyBzeW50aGVzaXMg4oCUIHVzaW5nIGZhbGxiYWNrLiBUaGUgYWN0dWFsIHBsdWdpbiB3aWxsIGJlIHJlc29sdmVkIGF0IGRlcGxveW1lbnQgdGltZS5gKTtcbiAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBCdWZmZXIuZnJvbShlbmNvZGVkLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkZWNvZGVkKTtcblxuICAgICAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCAhZGF0YS5uYW1lIHx8ICFBcnJheS5pc0FycmF5KGRhdGEuY29tbWFuZHMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwbHVnaW4gcmVzcG9uc2U6IG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzIChuYW1lLCBjb21tYW5kcyknKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGEgYXMgUGx1Z2luO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1zZyA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgcGx1Z2luIFwiJHtwcm9wcy5uYW1lfVwiIGRhdGE6ICR7ZXJyb3JNc2d9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIExhbWJkYSBmdW5jdGlvbiB0aGF0IHNlcnZlcyBhcyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlci5cbiAgICpcbiAgICogSldUIHRva2VuIGlzIHN0b3JlZCBpbiBhIHByZS1leGlzdGluZyBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IGF0XG4gICAqIGB7U0VDUkVUU19QQVRIX1BSRUZJWH0ve29yZ0lkfS9wbGF0Zm9ybWAuIFRoZSBMYW1iZGEgcmVzb2x2ZXMgdGhlXG4gICAqIHNlY3JldCBieSBuYW1lIGF0IHJ1bnRpbWUgdXNpbmcgYENvcmVDb25zdGFudHMuU0VDUkVUU19QQVRIX1BSRUZJWGAuXG4gICAqXG4gICAqIENyZWF0ZSB0aGUgc2VjcmV0IGJlZm9yZSBkZXBsb3lpbmcgd2l0aDpcbiAgICogICBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHN0b3JlLXRva2VuIC0tZGF5cyAzMCAtLXJlZ2lvbiA8cmVnaW9uPlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVMYW1iZGFGdW5jdGlvbigpOiBOb2RlanNGdW5jdGlvbiB7XG4gICAgaWYgKCF0aGlzLl9vcmdJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcmdJZCBpcyByZXF1aXJlZCBmb3IgUGx1Z2luTG9va3VwIOKAlCBuZWVkZWQgdG8gcmVzb2x2ZSB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBzZWNyZXQnKTtcbiAgICB9XG4gICAgY29uc3Qgc2VjcmV0TmFtZSA9IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aCh0aGlzLl9vcmdJZCwgJ3BsYXRmb3JtJyk7XG5cbiAgICBjb25zdCBmbiA9IG5ldyBOb2RlanNGdW5jdGlvbih0aGlzLCB0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgnb25ldmVudDpoYW5kbGVyJyksIHtcbiAgICAgIHJ1bnRpbWU6IHRoaXMuX3J1bnRpbWUsXG4gICAgICB0aW1lb3V0OiB0aGlzLl90aW1lb3V0LFxuICAgICAgbWVtb3J5U2l6ZTogdGhpcy5fbWVtb3J5U2l6ZSxcbiAgICAgIGFyY2hpdGVjdHVyZTogdGhpcy5fYXJjaGl0ZWN0dXJlLFxuICAgICAgZW50cnk6IGpvaW4oTU9EVUxFX0RJUiwgJy8uLi9oYW5kbGVycy9wbHVnaW4tbG9va3VwLWhhbmRsZXIuanMnKSxcbiAgICAgIGRlcHNMb2NrRmlsZVBhdGg6IGpvaW4oTU9EVUxFX0RJUiwgJy8uLi9oYW5kbGVycy9wbnBtLWxvY2sueWFtbCcpLFxuICAgICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9uczogdGhpcy5fcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucyxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFBMQVRGT1JNX1NFQ1JFVF9OQU1FOiBzZWNyZXROYW1lLFxuICAgICAgICAvLyBBbGxvdyBzZWxmLXNpZ25lZCBjZXJ0cyB3aGVuIHBsYXRmb3JtIHVzZXMgSFRUUFMgd2l0aG91dCBhIENBLXNpZ25lZCBjZXJ0aWZpY2F0ZVxuICAgICAgICAuLi4ocHJvY2Vzcy5lbnYuTk9ERV9UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRCA9PT0gJzAnICYmIHtcbiAgICAgICAgICBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEOiAnMCcsXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgIG1pbmlmeTogdHJ1ZSxcbiAgICAgICAgc291cmNlTWFwOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiAnZXMyMDIyJyxcbiAgICAgICAgZXh0ZXJuYWxNb2R1bGVzOiBbXG4gICAgICAgICAgLy8gUHJvdmlkZWQgYnkgdGhlIExhbWJkYSBOb2RlLmpzIHJ1bnRpbWUg4oCUIG5ldmVyIGJ1bmRsZS5cbiAgICAgICAgICAnQGF3cy1zZGsvKicsXG4gICAgICAgICAgLy8gU3ludGgtb25seSBsaWJyYXJpZXMgdGhhdCBtdXN0IE5FVkVSIGVuZCB1cCBpbiBhIExhbWJkYSBidW5kbGUuXG4gICAgICAgICAgLy8gVGhlIGhhbmRsZXIgZG9lc24ndCB1c2UgdGhlbTsgdGhpcyBpcyBhIGd1YXJkIHNvIGEgc3RyYXkgdHJhbnNpdGl2ZVxuICAgICAgICAgIC8vIGltcG9ydCAoZS5nLiB2aWEgYSBjb25maWcgbW9kdWxlIHRoYXQgcHVsbHMgaW5mcmFzdHJ1Y3R1cmUtY29uZmlnIOKGklxuICAgICAgICAgIC8vIGF3cy1jZGstbGliKSBjYW4ndCBkcmFnIHRoZSBlbnRpcmUgfmh1bmRyZWRzLW9mLU1CIENESyBpbnRvIHRoZVxuICAgICAgICAgIC8vIGJ1bmRsZSBhbmQgT09NLWtpbGwgZXNidWlsZCBkdXJpbmcgY29sZC1zdGFydCBzeW50aC4gSWYgb25lIG9mIHRoZXNlXG4gICAgICAgICAgLy8gaXMgZXZlciBnZW51aW5lbHkgcmVhY2hlZCBhdCBydW50aW1lIHRoZSBMYW1iZGEgd2lsbCBmYWlsIGxvdWRseSBhdFxuICAgICAgICAgIC8vIGluaXQgKG1vZHVsZSBub3QgZm91bmQpIHJhdGhlciB0aGFuIHNpbGVudGx5IE9PTSBhdCBzeW50aCDigJQgd2hpY2ggaXNcbiAgICAgICAgICAvLyB0aGUgY29ycmVjdCBzaWduYWwsIHNpbmNlIENESyBoYXMgbm8gYnVzaW5lc3MgcnVubmluZyBpbiB0aGlzIExhbWJkYS5cbiAgICAgICAgICAnYXdzLWNkay1saWInLFxuICAgICAgICAgICdhd3MtY2RrLWxpYi8qJyxcbiAgICAgICAgICAnY29uc3RydWN0cycsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gR3JhbnQgdGhlIExhbWJkYSBwZXJtaXNzaW9uIHRvIHJlYWQgdGhlIHBlci1vcmcgcGxhdGZvcm0gc2VjcmV0LlxuICAgIC8vIFRoZSB3aWxkY2FyZCBzdWZmaXggaGFuZGxlcyB0aGUgNi1jaGFyIHJhbmRvbSBJRCB0aGF0IFNlY3JldHMgTWFuYWdlciBhcHBlbmRzLlxuICAgIGZuLmFkZFRvUm9sZVBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZSddLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6c2VjcmV0c21hbmFnZXI6KjoqOnNlY3JldDoke3NlY3JldE5hbWV9LSpgXSxcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gZm47XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGRlZmF1bHQgcGx1Z2luIGZpbHRlci5cbiAgICogQWNjZXNzIGNvbnRyb2wgKG9yZ0lkIHNjb3BpbmcsIHB1YmxpYy9wcml2YXRlIHZpc2liaWxpdHkpIGlzIGhhbmRsZWQgYnlcbiAgICogdGhlIHBsYXRmb3JtJ3MgYWNjZXNzIGNvbnRyb2wgcXVlcnkgYnVpbGRlciBiYXNlZCBvbiB0aGUgSldUJ3Mgb3JnYW5pemF0aW9uSWQuXG4gICAqL1xuICBwcml2YXRlIGRlZmF1bHRGaWx0ZXIobmFtZTogc3RyaW5nKTogUGx1Z2luRmlsdGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiB0cnVlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZShwbHVnaW46IHN0cmluZyB8IFBsdWdpbk9wdGlvbnMpOiBQbHVnaW5PcHRpb25zIHtcbiAgICBpZiAodHlwZW9mIHBsdWdpbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHBsdWdpbixcbiAgICAgICAgZmlsdGVyOiB0aGlzLmRlZmF1bHRGaWx0ZXIocGx1Z2luKSxcbiAgICAgICAgYWxpYXM6IGAke3BsdWdpbn0tYWxpYXNgLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogcGx1Z2luLm5hbWUsXG4gICAgICBhbGlhczogcGx1Z2luLmFsaWFzID8/IGAke3BsdWdpbi5uYW1lfS1hbGlhc2AsXG4gICAgICBmaWx0ZXI6IHBsdWdpbi5maWx0ZXIgPz8gdGhpcy5kZWZhdWx0RmlsdGVyKHBsdWdpbi5uYW1lKSxcbiAgICAgIG1ldGFkYXRhOiBwbHVnaW4ubWV0YWRhdGEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ3VzdG9tUmVzb3VyY2UgaW5zdGFuY2UgdGhhdCB0cmlnZ2VycyBwbHVnaW4gbG9va3VwIGR1cmluZyBkZXBsb3ltZW50XG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUN1c3RvbVJlc291cmNlKHByb3BzOiBQbHVnaW5PcHRpb25zKTogQ3VzdG9tUmVzb3VyY2Uge1xuICAgIGNvbnN0IHJlc291cmNlSWQgPSB0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZShwcm9wcy5hbGlhcyB8fCBwcm9wcy5uYW1lKTtcblxuICAgIHJldHVybiBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgcmVzb3VyY2VJZCwge1xuICAgICAgc2VydmljZVRva2VuOiB0aGlzLl9wcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICByZXNvdXJjZVR5cGU6ICdDdXN0b206OlBsdWdpbkxvb2t1cCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGJhc2VVUkw6IHRoaXMuX3BsYXRmb3JtVXJsLFxuICAgICAgICBwbHVnaW5GaWx0ZXI6IHByb3BzLmZpbHRlcixcbiAgICAgIH0gYXMgSW5wdXRQcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBCYXNlIHBsdWdpbiBzaGFwZSB3aXRoIG5vLW9wIGRlZmF1bHRzIGZvciBmaWVsZHMgQ0RLIGRvZXNuJ3QgdXNlLiAqL1xuICBwcml2YXRlIHN0YXRpYyBiYXNlUGx1Z2luKCk6IFBsdWdpbiB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnLFxuICAgICAgb3JnSWQ6IFNZU1RFTV9PUkdfSUQsXG4gICAgICBjcmVhdGVkQnk6ICdzeXN0ZW0nLFxuICAgICAgY3JlYXRlZEF0OiBub3csXG4gICAgICB1cGRhdGVkQnk6ICdzeXN0ZW0nLFxuICAgICAgdXBkYXRlZEF0OiBub3csXG4gICAgICBuYW1lOiAnZmFsbGJhY2snLFxuICAgICAgZGVzY3JpcHRpb246IG51bGwsXG4gICAgICBrZXl3b3JkczogW10sXG4gICAgICBjYXRlZ29yeTogJ3Vua25vd24nLFxuICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgIG1ldGFkYXRhOiB7fSxcbiAgICAgIHBsdWdpblR5cGU6ICdDb2RlQnVpbGRTdGVwJyxcbiAgICAgIGNvbXB1dGVUeXBlOiAnU01BTEwnLFxuICAgICAgdGltZW91dDogbnVsbCxcbiAgICAgIGZhaWx1cmVCZWhhdmlvcjogJ2ZhaWwnLFxuICAgICAgc2VjcmV0czogW10sXG4gICAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiAnY2RrLm91dCcsXG4gICAgICBlbnY6IHt9LFxuICAgICAgYnVpbGRBcmdzOiB7fSxcbiAgICAgIGluc3RhbGxDb21tYW5kczogW10sXG4gICAgICBjb21tYW5kczogW10sXG4gICAgICBkb2NrZXJmaWxlOiBudWxsLFxuICAgICAgYnVpbGRUeXBlOiAnbWV0YWRhdGFfb25seScsXG4gICAgICBpbWFnZURpZ2VzdDogbnVsbCxcbiAgICAgIGltYWdlU291cmNlOiBudWxsLFxuICAgICAgb3duZXJJZDogbnVsbCxcbiAgICAgIG93bmVyVHlwZTogbnVsbCxcbiAgICAgIGxpZmVjeWNsZTogJ3Byb2R1Y3Rpb24nLFxuICAgICAgY3JpdGljYWxpdHk6IG51bGwsXG4gICAgICBsYWJlbHM6IHt9LFxuICAgICAgbGlua3M6IFtdLFxuICAgICAgdmlzaWJpbGl0eTogJ3B1YmxpYycsXG4gICAgICBpc0RlZmF1bHQ6IGZhbHNlLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBkZWxldGVkQXQ6IG51bGwsXG4gICAgICBkZWxldGVkQnk6IG51bGwsXG4gICAgICBwdXJnZUFmdGVyOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmFsbGJhY2sgZm9yIGEgcGx1Z2luIHdob3NlIGxvb2t1cCByZXR1cm5lZCBubyByZWNvcmQgKG5vdCBpbiB0aGUgcGxhdGZvcm1cbiAgICogY2F0YWxvZyBmb3IgdGhpcyBvcmcpIGFuZCBzbyBjb3VsZCBub3QgYmUgcHJlLXJlc29sdmVkIGF0IHN5bnRoLlxuICAgKlxuICAgKiBUaGlzIHN0ZXAgRkFJTFMgdGhlIGJ1aWxkIChleGl0IDEpIG9uIHB1cnBvc2UuIFRoZSBwcmV2aW91cyBiZWhhdmlvdXIg4oCUXG4gICAqIGBlY2hvIFwi4oCmXCIgJiYgZXhpdCAwYCDigJQgd2FzIGEgZmFsc2UgcG9zaXRpdmU6IGFuIHVucmVzb2x2ZWQgc2VjdXJpdHkvcXVhbGl0eVxuICAgKiBzdGVwIChkZXBlbmRlbmN5LWNoZWNrLCBzZW1ncmVwLCBzcG90YnVncywg4oCmKSByZXBvcnRlZCB0aGUgc3RhZ2UgZ3JlZW4gd2hpbGVcbiAgICogcnVubmluZyBub3RoaW5nLCBnaXZpbmcgZmFsc2UgYXNzdXJhbmNlIHRoYXQgc2NhbnMvYnVpbGRzIGhhZCBwYXNzZWQuIEFcbiAgICogcGx1Z2luIHN0ZXAgdGhhdCBjYW4ndCBydW4gaXRzIHBsdWdpbiBtdXN0IGdvIHJlZCwgY29uc2lzdGVudCB3aXRoXG4gICAqIGBiYXNlUGx1Z2luKCkuZmFpbHVyZUJlaGF2aW9yID09PSAnZmFpbCdgLiBUaGUgbWVzc2FnZSBpcyBhY3Rpb25hYmxlIHNvIHRoZVxuICAgKiBvcGVyYXRvciBrbm93cyB0aGUgY2F0YWxvZyBpcyBlbXB0eS9pbmNvbXBsZXRlLCBub3QgdGhhdCB0aGUgdG9vbCBjcmFzaGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBmYWxsYmFjaygpOiBQbHVnaW4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5QbHVnaW5Mb29rdXAuYmFzZVBsdWdpbigpLFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgJ2VjaG8gXCJFUlJPUjogcGx1Z2luIGxvb2t1cCByZXR1cm5lZCBubyByZWNvcmQg4oCUIHRoaXMgcGx1Z2luIGlzIG5vdCBpbiB0aGUgcGxhdGZvcm0gY2F0YWxvZyBmb3IgdGhpcyBvcmcsIHNvIHRoZSBzdGVwIGNhbm5vdCBydW4uXCIgPiYyJyxcbiAgICAgICAgJ2VjaG8gXCJUaGlzIHN0ZXAgZmFpbHMgaW5zdGVhZCBvZiBwYXNzaW5nIGFzIGEgbm8tb3AgKGFuIHVucmVzb2x2ZWQgcGx1Z2luIHJlcG9ydGluZyBzdWNjZXNzIHdvdWxkIGJlIGEgZmFsc2UtcG9zaXRpdmUgZ3JlZW4pLlwiID4mMicsXG4gICAgICAgICdlY2hvIFwiRml4OiBsb2FkIHRoZSBwbHVnaW4gaW50byB0aGUgcGxhdGZvcm0gKGRlcGxveS9iaW4vbG9hZC1wbHVnaW5zLnNoKSwgdGhlbiByZS1ydW4gdGhlIHBpcGVsaW5lLlwiID4mMicsXG4gICAgICAgICdleGl0IDEnLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bnRoIHBsdWdpbiB3aXRoIHBpcGVsaW5lLW1hbmFnZXIgY29tbWFuZHMuIENvbGQtc3RhcnQgYm9vdHN0cmFwIGZvclxuICAgKiB0aGUgc3ludGggc3RlcCB3aGVuIHByZS1yZXNvbHV0aW9uIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoL2RlcGxveWBcbiAgICogZGlkbid0IHBvcHVsYXRlIGByZXNvbHZlZFBsdWdpbnNgIGZvciB0aGUgc3ludGggcGx1Z2luLiBSdW5zIG9uIHRoZVxuICAgKiBjb25maWd1cmVkIGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRWAgKGRlZmF1bHQgYHBpcGVsaW5lLWJvb3RzdHJhcDoxLjBgKVxuICAgKiBhbmQgc2VsZi1ib290c3RyYXBzIHRoZSByZWFsIHN5bnRoIHZpYVxuICAgKiBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aCAtLWlkICR7UElQRUxJTkVfSUR9YC5cbiAgICpcbiAgICogTm8gYGluc3RhbGxDb21tYW5kc2A6IHRoZSBkZWZhdWx0IGltYWdlIGFscmVhZHkgaGFzIGBwaXBlbGluZS1tYW5hZ2VyYFxuICAgKiBiYWtlZCBpbiAodGhhdCdzIHRoZSB3aG9sZSBwb2ludCBvZiBgcGlwZWxpbmUtYm9vdHN0cmFwOjEuMGApLiBJZiB0aGVcbiAgICogb3BlcmF0b3IgcG9pbnRzIENPREVCVUlMRF9ERUZBVUxUX0lNQUdFIGF0IGFuIGltYWdlIGxhY2tpbmcgaXQgKGUuZy5cbiAgICogdmFuaWxsYSBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjcuMCksIHRoaXMgc3RlcCBleGl0cyAxMjcg4oCUIGZpeCB0aGF0XG4gICAqIGJ5IHVzaW5nIGFuIGltYWdlIHdpdGggcGlwZWxpbmUtbWFuYWdlciByYXRoZXIgdGhhbiBwYXBlcmluZyBvdmVyIGl0XG4gICAqIHdpdGggYSBwZXItYnVpbGQgYG5wbSBpbnN0YWxsIC1nYC5cbiAgICovXG4gIHB1YmxpYyBib290c3RyYXAoKTogUGx1Z2luIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uUGx1Z2luTG9va3VwLmJhc2VQbHVnaW4oKSxcbiAgICAgIG5hbWU6ICdjZGstc3ludGgnLFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogJ2Nkay5vdXQnLFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgJ3BpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgc3ludGggLS1pZCAke1BJUEVMSU5FX0lEfSAtLXN0b3JlLXRva2VucyAtLXF1aWV0IC0tbm8tbm90aWNlcyAtLW5vLXZlcmlmeS1zc2wnLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -3,7 +3,7 @@ import { CodePipeline } from 'aws-cdk-lib/pipelines';
|
|
|
3
3
|
import { Construct } from 'constructs';
|
|
4
4
|
import { PluginLookup } from './plugin-lookup.js';
|
|
5
5
|
import type { StageOptions } from './step-types.js';
|
|
6
|
-
import type
|
|
6
|
+
import { type ArtifactManager } from '../core/artifact-manager.js';
|
|
7
7
|
import { UniqueId } from '../core/id-generator.js';
|
|
8
8
|
import type { MetaDataType } from '../core/pipeline-types.js';
|
|
9
9
|
/**
|