@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.
@@ -3,6 +3,7 @@
3
3
  import { CodePipeline } from 'aws-cdk-lib/pipelines';
4
4
  import { Construct } from 'constructs';
5
5
  import { PluginLookup } from './plugin-lookup.js';
6
+ import { pluginArtifactAlias } from '../core/artifact-manager.js';
6
7
  import { UniqueId } from '../core/id-generator.js';
7
8
  import { merge, resolveFailureBehavior } from '../core/metadata-helpers.js';
8
9
  import { createCodeBuildStep } from '../core/pipeline-helpers.js';
@@ -75,12 +76,22 @@ export class StageBuilder {
75
76
  // silently ignored and the build falls back to plugin defaults.
76
77
  // Order (last wins): global < plugin-ref metadata < step-level metadata.
77
78
  const stepMetadata = merge(this.globalMetadata, stepConfig.plugin.metadata ?? {}, stepConfig.metadata ?? {});
78
- const pluginAlias = stepConfig.plugin.alias ?? stepConfig.plugin.name;
79
+ // TWO different identities, deliberately kept apart:
80
+ // - `stepIdAlias` names the CDK construct. It stays as it always was
81
+ // (`alias ?? name`), because changing it renames the CodeBuild project's
82
+ // logical id and CloudFormation would REPLACE every unaliased step's
83
+ // project on the next deploy — for no benefit.
84
+ // - `pluginAlias` is the ARTIFACT-KEY segment and must follow the one rule
85
+ // every key consumer uses (`pluginArtifactAlias`). It used to reuse the
86
+ // construct value, so an unaliased step registered `…:nodejs-build:dist`
87
+ // while the UI asked for `…:nodejs-build-alias:dist` and synth failed.
88
+ const stepIdAlias = stepConfig.plugin.alias ?? stepConfig.plugin.name;
89
+ const pluginAlias = pluginArtifactAlias(stepConfig.plugin);
79
90
  if (stepConfig.inputArtifact && !this.artifactManager) {
80
- throw new Error(`Step "${pluginAlias}" requires inputArtifact but no artifactManager is configured.`);
91
+ throw new Error(`Step "${stepIdAlias}" requires inputArtifact but no artifactManager is configured.`);
81
92
  }
82
93
  if (stepConfig.additionalInputArtifacts?.length && !this.artifactManager) {
83
- throw new Error(`Step "${pluginAlias}" requires additionalInputArtifacts but no artifactManager is configured.`);
94
+ throw new Error(`Step "${stepIdAlias}" requires additionalInputArtifacts but no artifactManager is configured.`);
84
95
  }
85
96
  const input = stepConfig.inputArtifact && this.artifactManager
86
97
  ? this.artifactManager.getOutput(stepConfig.inputArtifact)
@@ -92,7 +103,7 @@ export class StageBuilder {
92
103
  ]))
93
104
  : undefined;
94
105
  return createCodeBuildStep({
95
- id: this.uniqueId.generate(`stage:${stageAlias}:${pluginAlias}`),
106
+ id: this.uniqueId.generate(`stage:${stageAlias}:${stepIdAlias}`),
96
107
  uniqueId: this.uniqueId,
97
108
  plugin,
98
109
  metadata: stepMetadata,
@@ -126,4 +137,4 @@ export class StageBuilder {
126
137
  }
127
138
  }
128
139
  }
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9zdGFnZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFHdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR2xELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFvQ2xFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ04sS0FBSyxDQUFZO0lBQ2pCLFlBQVksQ0FBZTtJQUMzQixRQUFRLENBQVc7SUFDbkIsY0FBYyxDQUFlO0lBQzdCLGtCQUFrQixDQUFrQjtJQUNwQyxlQUFlLENBQW1CO0lBQ2xDLEtBQUssQ0FBVTtJQUNmLGFBQWEsQ0FBMEI7SUFFeEQsWUFBWSxLQUF3QjtRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDM0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNuRCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxlQUFl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QUUsSUFBSSxDQUFDLGFBQWE7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUyxDQUFDLFFBQXNCLEVBQUUsTUFBc0I7UUFDdEQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgQ29tcHV0ZVR5cGUgYXMgQ2RrQ29tcHV0ZVR5cGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCB7IENvZGVQaXBlbGluZSB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFBsdWdpbkxvb2t1cCB9IGZyb20gJy4vcGx1Z2luLWxvb2t1cC5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlT3B0aW9ucyB9IGZyb20gJy4vc3RlcC10eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEFydGlmYWN0TWFuYWdlciB9IGZyb20gJy4uL2NvcmUvYXJ0aWZhY3QtbWFuYWdlci5qcyc7XG5pbXBvcnQgeyBVbmlxdWVJZCB9IGZyb20gJy4uL2NvcmUvaWQtZ2VuZXJhdG9yLmpzJztcbmltcG9ydCB7IG1lcmdlLCByZXNvbHZlRmFpbHVyZUJlaGF2aW9yIH0gZnJvbSAnLi4vY29yZS9tZXRhZGF0YS1oZWxwZXJzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUNvZGVCdWlsZFN0ZXAgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLWhlbHBlcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRhRGF0YVR5cGUgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLXR5cGVzLmpzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBTdGFnZUJ1aWxkZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFnZUJ1aWxkZXJQcm9wcyB7XG4gIC8qKiBDREsgY29uc3RydWN0IHNjb3BlIGZvciBjcmVhdGluZyBjaGlsZCBjb25zdHJ1Y3RzICovXG4gIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG5cbiAgLyoqIFBsdWdpbiBsb29rdXAgc2VydmljZSBmb3IgcmVzb2x2aW5nIHBsdWdpbiByZWZlcmVuY2VzIHRvIENESyBjb25zdHJ1Y3RzICovXG4gIHJlYWRvbmx5IHBsdWdpbkxvb2t1cDogUGx1Z2luTG9va3VwO1xuXG4gIC8qKiBVbmlxdWUgSUQgZ2VuZXJhdG9yIGZvciBjcmVhdGluZyBkZXRlcm1pbmlzdGljIGNvbnN0cnVjdCBJRHMgKi9cbiAgcmVhZG9ubHkgdW5pcXVlSWQ6IFVuaXF1ZUlkO1xuXG4gIC8qKiBHbG9iYWwgbWV0YWRhdGEgaW5oZXJpdGVkIGJ5IGFsbCBzdGFnZSBzdGVwcyAqL1xuICByZWFkb25seSBnbG9iYWxNZXRhZGF0YTogTWV0YURhdGFUeXBlO1xuXG4gIC8qKiBEZWZhdWx0IENvZGVCdWlsZCBjb21wdXRlIHR5cGUgZm9yIHN0ZXBzIHRoYXQgZG9uJ3Qgc3BlY2lmeSBvbmUgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdENvbXB1dGVUeXBlPzogQ2RrQ29tcHV0ZVR5cGU7XG5cbiAgLyoqIEFydGlmYWN0IG1hbmFnZXIgZm9yIHJlc29sdmluZyBpbnB1dCBhcnRpZmFjdCBrZXlzIHRvIEZpbGVTZXRzICovXG4gIHJlYWRvbmx5IGFydGlmYWN0TWFuYWdlcj86IEFydGlmYWN0TWFuYWdlcjtcblxuICAvKiogVGVuYW50IGlkZW50aWZpZXIgZm9yIHJlc29sdmluZyBwZXItb3JnIHNlY3JldHMgZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyICovXG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQaXBlbGluZS1sZXZlbCBzY29wZSB1c2VkIHRvIHJlc29sdmUgYHt7IHBpcGVsaW5lLiogfX1gIHRlbXBsYXRlIHRva2Vuc1xuICAgKiBpbnNpZGUgcGx1Z2luIHNwZWNzLiBSZXF1aXJlZCDigJQgcGFzc2VkIHRocm91Z2ggdG8gYGNyZWF0ZUNvZGVCdWlsZFN0ZXBgXG4gICAqIG9uIGV2ZXJ5IHN0ZXAuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZVNjb3BlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIGFkZHMgcGlwZWxpbmUgc3RhZ2VzICh3YXZlcykgdG8gYSBDb2RlUGlwZWxpbmUuXG4gKlxuICogRWFjaCBzdGFnZSBpcyByZXNvbHZlZCBmcm9tIGhpZ2gtbGV2ZWwgY29uZmlndXJhdGlvbiAocGx1Z2luIG5hbWVzKVxuICogaW50byBDREsgQ29kZUJ1aWxkIHN0ZXBzIHZpYSBQbHVnaW5Mb29rdXAsIHRoZW4gYWRkZWQgYXMgYSB3YXZlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzdGFnZUJ1aWxkZXIgPSBuZXcgU3RhZ2VCdWlsZGVyKHtcbiAqICAgc2NvcGU6IHRoaXMsXG4gKiAgIHBsdWdpbkxvb2t1cCxcbiAqICAgdW5pcXVlSWQsXG4gKiAgIGdsb2JhbE1ldGFkYXRhOiBtZXJnZWRNZXRhZGF0YSxcbiAqIH0pO1xuICogc3RhZ2VCdWlsZGVyLmFkZFN0YWdlKHBpcGVsaW5lLCB7XG4gKiAgIHN0YWdlTmFtZTogJ0ludGVncmF0aW9uIFRlc3RzJyxcbiAqICAgYWxpYXM6ICdpbnRlZ3JhdGlvbicsXG4gKiAgIHN0ZXBzOiBbXG4gKiAgICAgeyBwbHVnaW46IHsgbmFtZTogJ2plc3QtaW50ZWdyYXRpb24nIH0gfSxcbiAqICAgICB7IHBsdWdpbjogeyBuYW1lOiAnZTJlLXRlc3RzJywgYWxpYXM6ICdjeXByZXNzJyB9IH0sXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgU3RhZ2VCdWlsZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzY29wZTogQ29uc3RydWN0O1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbkxvb2t1cDogUGx1Z2luTG9va3VwO1xuICBwcml2YXRlIHJlYWRvbmx5IHVuaXF1ZUlkOiBVbmlxdWVJZDtcbiAgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxNZXRhZGF0YTogTWV0YURhdGFUeXBlO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRDb21wdXRlVHlwZT86IENka0NvbXB1dGVUeXBlO1xuICBwcml2YXRlIHJlYWRvbmx5IGFydGlmYWN0TWFuYWdlcj86IEFydGlmYWN0TWFuYWdlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBvcmdJZD86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwaXBlbGluZVNjb3BlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogU3RhZ2VCdWlsZGVyUHJvcHMpIHtcbiAgICB0aGlzLnNjb3BlID0gcHJvcHMuc2NvcGU7XG4gICAgdGhpcy5wbHVnaW5Mb29rdXAgPSBwcm9wcy5wbHVnaW5Mb29rdXA7XG4gICAgdGhpcy51bmlxdWVJZCA9IHByb3BzLnVuaXF1ZUlkO1xuICAgIHRoaXMuZ2xvYmFsTWV0YWRhdGEgPSBwcm9wcy5nbG9iYWxNZXRhZGF0YTtcbiAgICB0aGlzLmRlZmF1bHRDb21wdXRlVHlwZSA9IHByb3BzLmRlZmF1bHRDb21wdXRlVHlwZTtcbiAgICB0aGlzLmFydGlmYWN0TWFuYWdlciA9IHByb3BzLmFydGlmYWN0TWFuYWdlcjtcbiAgICB0aGlzLm9yZ0lkID0gcHJvcHMub3JnSWQ7XG4gICAgdGhpcy5waXBlbGluZVNjb3BlID0gcHJvcHMucGlwZWxpbmVTY29wZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhIHN0YWdlJ3MgcGx1Z2luLWJhc2VkIHN0ZXAgY29uZmlncyBpbnRvIENvZGVCdWlsZCBzdGVwc1xuICAgKiBhbmQgYWRkcyB0aGVtIGFzIGEgd2F2ZSB0byB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICBhZGRTdGFnZShwaXBlbGluZTogQ29kZVBpcGVsaW5lLCBzdGFnZTogU3RhZ2VPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhZ2VBbGlhcyA9IHN0YWdlLmFsaWFzID8/IGAke3N0YWdlLnN0YWdlTmFtZX0tYWxpYXNgO1xuXG4gICAgY29uc3QgcHJlU3RlcHMgPSBzdGFnZS5zdGVwc1xuICAgICAgLmZpbHRlcihzID0+IChzLnBvc2l0aW9uID8/ICdwcmUnKSA9PT0gJ3ByZScpXG4gICAgICAubWFwKHMgPT4gdGhpcy5yZXNvbHZlU3RlcChzLCBzdGFnZS5zdGFnZU5hbWUsIHN0YWdlQWxpYXMpKTtcbiAgICBjb25zdCBwb3N0U3RlcHMgPSBzdGFnZS5zdGVwc1xuICAgICAgLmZpbHRlcihzID0+IHMucG9zaXRpb24gPT09ICdwb3N0JylcbiAgICAgIC5tYXAocyA9PiB0aGlzLnJlc29sdmVTdGVwKHMsIHN0YWdlLnN0YWdlTmFtZSwgc3RhZ2VBbGlhcykpO1xuXG4gICAgcGlwZWxpbmUuYWRkV2F2ZShzdGFnZUFsaWFzLCB7XG4gICAgICAuLi4ocHJlU3RlcHMubGVuZ3RoID4gMCAmJiB7IHByZTogcHJlU3RlcHMgfSksXG4gICAgICAuLi4ocG9zdFN0ZXBzLmxlbmd0aCA+IDAgJiYgeyBwb3N0OiBwb3N0U3RlcHMgfSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTdGVwKHN0ZXBDb25maWc6IFN0YWdlT3B0aW9uc1snc3RlcHMnXVtudW1iZXJdLCBzdGFnZU5hbWU6IHN0cmluZywgc3RhZ2VBbGlhczogc3RyaW5nKSB7XG4gICAgY29uc3QgcGx1Z2luID0gdGhpcy5wbHVnaW5Mb29rdXAucGx1Z2luKHN0ZXBDb25maWcucGx1Z2luKTtcbiAgICAvLyBQZXItc3RlcCBwbHVnaW4gY29uZmlnIGxpdmVzIG9uIHRoZSBwbHVnaW4gcmVmZXJlbmNlIChgcGx1Z2luLm1ldGFkYXRhYCDigJRcbiAgICAvLyBlLmcuIEpBVkFfVkVSU0lPTi9LT1RMSU5fVkVSU0lPTi9jb21wdXRldHlwZSBvdmVycmlkZXMpLiBwbHVnaW5Mb29rdXAucGx1Z2luKClcbiAgICAvLyByZXR1cm5zIHRoZSByZXNvbHZlZCBDQVRBTE9HIHBsdWdpbiBhbmQgZHJvcHMgdGhlIHJlZmVyZW5jZSBtZXRhZGF0YSBpbiB0aGVcbiAgICAvLyBwcmUtcmVzb2x2ZWQgcGF0aCwgc28gbWVyZ2UgaXQgaGVyZSB0b28g4oCUIG90aGVyd2lzZSBwZXItc3RlcCBvdmVycmlkZXMgYXJlXG4gICAgLy8gc2lsZW50bHkgaWdub3JlZCBhbmQgdGhlIGJ1aWxkIGZhbGxzIGJhY2sgdG8gcGx1Z2luIGRlZmF1bHRzLlxuICAgIC8vIE9yZGVyIChsYXN0IHdpbnMpOiBnbG9iYWwgPCBwbHVnaW4tcmVmIG1ldGFkYXRhIDwgc3RlcC1sZXZlbCBtZXRhZGF0YS5cbiAgICBjb25zdCBzdGVwTWV0YWRhdGEgPSBtZXJnZSh0aGlzLmdsb2JhbE1ldGFkYXRhLCBzdGVwQ29uZmlnLnBsdWdpbi5tZXRhZGF0YSA/PyB7fSwgc3RlcENvbmZpZy5tZXRhZGF0YSA/PyB7fSk7XG4gICAgY29uc3QgcGx1Z2luQWxpYXMgPSBzdGVwQ29uZmlnLnBsdWdpbi5hbGlhcyA/PyBzdGVwQ29uZmlnLnBsdWdpbi5uYW1lO1xuXG4gICAgaWYgKHN0ZXBDb25maWcuaW5wdXRBcnRpZmFjdCAmJiAhdGhpcy5hcnRpZmFjdE1hbmFnZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFN0ZXAgXCIke3BsdWdpbkFsaWFzfVwiIHJlcXVpcmVzIGlucHV0QXJ0aWZhY3QgYnV0IG5vIGFydGlmYWN0TWFuYWdlciBpcyBjb25maWd1cmVkLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoc3RlcENvbmZpZy5hZGRpdGlvbmFsSW5wdXRBcnRpZmFjdHM/Lmxlbmd0aCAmJiAhdGhpcy5hcnRpZmFjdE1hbmFnZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFN0ZXAgXCIke3BsdWdpbkFsaWFzfVwiIHJlcXVpcmVzIGFkZGl0aW9uYWxJbnB1dEFydGlmYWN0cyBidXQgbm8gYXJ0aWZhY3RNYW5hZ2VyIGlzIGNvbmZpZ3VyZWQuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBzdGVwQ29uZmlnLmlucHV0QXJ0aWZhY3QgJiYgdGhpcy5hcnRpZmFjdE1hbmFnZXJcbiAgICAgID8gdGhpcy5hcnRpZmFjdE1hbmFnZXIuZ2V0T3V0cHV0KHN0ZXBDb25maWcuaW5wdXRBcnRpZmFjdClcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgYWRkaXRpb25hbElucHV0cyA9IHN0ZXBDb25maWcuYWRkaXRpb25hbElucHV0QXJ0aWZhY3RzPy5sZW5ndGggJiYgdGhpcy5hcnRpZmFjdE1hbmFnZXJcbiAgICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBzdGVwQ29uZmlnLmFkZGl0aW9uYWxJbnB1dEFydGlmYWN0cy5tYXAoKHsgYXJ0aWZhY3QsIGRpcmVjdG9yeSB9KSA9PiBbXG4gICAgICAgICAgZGlyZWN0b3J5IHx8IGFydGlmYWN0Lm91dHB1dERpcmVjdG9yeSxcbiAgICAgICAgICB0aGlzLmFydGlmYWN0TWFuYWdlciEuZ2V0T3V0cHV0KGFydGlmYWN0KSxcbiAgICAgICAgXSksXG4gICAgICApXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBjcmVhdGVDb2RlQnVpbGRTdGVwKHtcbiAgICAgIGlkOiB0aGlzLnVuaXF1ZUlkLmdlbmVyYXRlKGBzdGFnZToke3N0YWdlQWxpYXN9OiR7cGx1Z2luQWxpYXN9YCksXG4gICAgICB1bmlxdWVJZDogdGhpcy51bmlxdWVJZCxcbiAgICAgIHBsdWdpbixcbiAgICAgIG1ldGFkYXRhOiBzdGVwTWV0YWRhdGEsXG4gICAgICBuZXR3b3JrOiBzdGVwQ29uZmlnLm5ldHdvcmssXG4gICAgICBzY29wZTogdGhpcy5zY29wZSxcbiAgICAgIGRlZmF1bHRDb21wdXRlVHlwZTogdGhpcy5kZWZhdWx0Q29tcHV0ZVR5cGUsXG4gICAgICBpbnB1dCxcbiAgICAgIGFkZGl0aW9uYWxJbnB1dHMsXG4gICAgICBhcnRpZmFjdE1hbmFnZXI6IHRoaXMuYXJ0aWZhY3RNYW5hZ2VyLFxuICAgICAgc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VBbGlhcyxcbiAgICAgIHBsdWdpbkFsaWFzLFxuICAgICAgcHJlSW5zdGFsbENvbW1hbmRzOiBzdGVwQ29uZmlnLnByZUluc3RhbGxDb21tYW5kcyxcbiAgICAgIHBvc3RJbnN0YWxsQ29tbWFuZHM6IHN0ZXBDb25maWcucG9zdEluc3RhbGxDb21tYW5kcyxcbiAgICAgIHByZUNvbW1hbmRzOiBzdGVwQ29uZmlnLnByZUNvbW1hbmRzLFxuICAgICAgcG9zdENvbW1hbmRzOiBzdGVwQ29uZmlnLnBvc3RDb21tYW5kcyxcbiAgICAgIGVudjogc3RlcENvbmZpZy5lbnYsXG4gICAgICB0aW1lb3V0OiBzdGVwQ29uZmlnLnRpbWVvdXQgPz8gcGx1Z2luLnRpbWVvdXQgPz8gdW5kZWZpbmVkLFxuICAgICAgLy8gQSBzY2FuL3NlY3VyaXR5LWNhdGVnb3J5IHBsdWdpbiBjYW4gbmV2ZXIgYmUgZG93bmdyYWRlZCBmcm9tICdmYWlsJyDigJQgc2VlIHJlc29sdmVGYWlsdXJlQmVoYXZpb3IuXG4gICAgICBmYWlsdXJlQmVoYXZpb3I6IHJlc29sdmVGYWlsdXJlQmVoYXZpb3IocGx1Z2luLmNhdGVnb3J5LCBzdGVwQ29uZmlnLmZhaWx1cmVCZWhhdmlvciA/PyBwbHVnaW4uZmFpbHVyZUJlaGF2aW9yKSxcbiAgICAgIG9yZ0lkOiB0aGlzLm9yZ0lkLFxuICAgICAgcGlwZWxpbmVTY29wZTogdGhpcy5waXBlbGluZVNjb3BlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGFuZCBhZGRzIG11bHRpcGxlIHN0YWdlcyBhcyB3YXZlcyB0byB0aGUgcGlwZWxpbmUsIGluIG9yZGVyLlxuICAgKi9cbiAgYWRkU3RhZ2VzKHBpcGVsaW5lOiBDb2RlUGlwZWxpbmUsIHN0YWdlczogU3RhZ2VPcHRpb25zW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHN0YWdlcykge1xuICAgICAgdGhpcy5hZGRTdGFnZShwaXBlbGluZSwgc3RhZ2UpO1xuICAgIH1cbiAgfVxufVxuIl19
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9zdGFnZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFHdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxELE9BQU8sRUFBRSxtQkFBbUIsRUFBd0IsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBb0NsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUNOLEtBQUssQ0FBWTtJQUNqQixZQUFZLENBQWU7SUFDM0IsUUFBUSxDQUFXO0lBQ25CLGNBQWMsQ0FBZTtJQUM3QixrQkFBa0IsQ0FBa0I7SUFDcEMsZUFBZSxDQUFtQjtJQUNsQyxLQUFLLENBQVU7SUFDZixhQUFhLENBQTBCO0lBRXhELFlBQVksS0FBd0I7UUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQzNDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsa0JBQWtC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VUFBVSxDQUFDLEdBQUc7WUFDbkIsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxTQUFTO1lBQzFELG9HQUFvRztZQUNwRyxlQUFlLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsZUFBZSxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDOUcsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtTQUNsQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLENBQUMsUUFBc0IsRUFBRSxNQUFzQjtRQUN0RCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBDb21wdXRlVHlwZSBhcyBDZGtDb21wdXRlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgQ29kZVBpcGVsaW5lIH0gZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUGx1Z2luTG9va3VwIH0gZnJvbSAnLi9wbHVnaW4tbG9va3VwLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VPcHRpb25zIH0gZnJvbSAnLi9zdGVwLXR5cGVzLmpzJztcbmltcG9ydCB7IHBsdWdpbkFydGlmYWN0QWxpYXMsIHR5cGUgQXJ0aWZhY3RNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZS9hcnRpZmFjdC1tYW5hZ2VyLmpzJztcbmltcG9ydCB7IFVuaXF1ZUlkIH0gZnJvbSAnLi4vY29yZS9pZC1nZW5lcmF0b3IuanMnO1xuaW1wb3J0IHsgbWVyZ2UsIHJlc29sdmVGYWlsdXJlQmVoYXZpb3IgfSBmcm9tICcuLi9jb3JlL21ldGFkYXRhLWhlbHBlcnMuanMnO1xuaW1wb3J0IHsgY3JlYXRlQ29kZUJ1aWxkU3RlcCB9IGZyb20gJy4uL2NvcmUvcGlwZWxpbmUtaGVscGVycy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1ldGFEYXRhVHlwZSB9IGZyb20gJy4uL2NvcmUvcGlwZWxpbmUtdHlwZXMuanMnO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIFN0YWdlQnVpbGRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlQnVpbGRlclByb3BzIHtcbiAgLyoqIENESyBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGNyZWF0aW5nIGNoaWxkIGNvbnN0cnVjdHMgKi9cbiAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcblxuICAvKiogUGx1Z2luIGxvb2t1cCBzZXJ2aWNlIGZvciByZXNvbHZpbmcgcGx1Z2luIHJlZmVyZW5jZXMgdG8gQ0RLIGNvbnN0cnVjdHMgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTG9va3VwOiBQbHVnaW5Mb29rdXA7XG5cbiAgLyoqIFVuaXF1ZSBJRCBnZW5lcmF0b3IgZm9yIGNyZWF0aW5nIGRldGVybWluaXN0aWMgY29uc3RydWN0IElEcyAqL1xuICByZWFkb25seSB1bmlxdWVJZDogVW5pcXVlSWQ7XG5cbiAgLyoqIEdsb2JhbCBtZXRhZGF0YSBpbmhlcml0ZWQgYnkgYWxsIHN0YWdlIHN0ZXBzICovXG4gIHJlYWRvbmx5IGdsb2JhbE1ldGFkYXRhOiBNZXRhRGF0YVR5cGU7XG5cbiAgLyoqIERlZmF1bHQgQ29kZUJ1aWxkIGNvbXB1dGUgdHlwZSBmb3Igc3RlcHMgdGhhdCBkb24ndCBzcGVjaWZ5IG9uZSAqL1xuICByZWFkb25seSBkZWZhdWx0Q29tcHV0ZVR5cGU/OiBDZGtDb21wdXRlVHlwZTtcblxuICAvKiogQXJ0aWZhY3QgbWFuYWdlciBmb3IgcmVzb2x2aW5nIGlucHV0IGFydGlmYWN0IGtleXMgdG8gRmlsZVNldHMgKi9cbiAgcmVhZG9ubHkgYXJ0aWZhY3RNYW5hZ2VyPzogQXJ0aWZhY3RNYW5hZ2VyO1xuXG4gIC8qKiBUZW5hbnQgaWRlbnRpZmllciBmb3IgcmVzb2x2aW5nIHBlci1vcmcgc2VjcmV0cyBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKi9cbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lLWxldmVsIHNjb3BlIHVzZWQgdG8gcmVzb2x2ZSBge3sgcGlwZWxpbmUuKiB9fWAgdGVtcGxhdGUgdG9rZW5zXG4gICAqIGluc2lkZSBwbHVnaW4gc3BlY3MuIFJlcXVpcmVkIOKAlCBwYXNzZWQgdGhyb3VnaCB0byBgY3JlYXRlQ29kZUJ1aWxkU3RlcGBcbiAgICogb24gZXZlcnkgc3RlcC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgYWRkcyBwaXBlbGluZSBzdGFnZXMgKHdhdmVzKSB0byBhIENvZGVQaXBlbGluZS5cbiAqXG4gKiBFYWNoIHN0YWdlIGlzIHJlc29sdmVkIGZyb20gaGlnaC1sZXZlbCBjb25maWd1cmF0aW9uIChwbHVnaW4gbmFtZXMpXG4gKiBpbnRvIENESyBDb2RlQnVpbGQgc3RlcHMgdmlhIFBsdWdpbkxvb2t1cCwgdGhlbiBhZGRlZCBhcyBhIHdhdmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHN0YWdlQnVpbGRlciA9IG5ldyBTdGFnZUJ1aWxkZXIoe1xuICogICBzY29wZTogdGhpcyxcbiAqICAgcGx1Z2luTG9va3VwLFxuICogICB1bmlxdWVJZCxcbiAqICAgZ2xvYmFsTWV0YWRhdGE6IG1lcmdlZE1ldGFkYXRhLFxuICogfSk7XG4gKiBzdGFnZUJ1aWxkZXIuYWRkU3RhZ2UocGlwZWxpbmUsIHtcbiAqICAgc3RhZ2VOYW1lOiAnSW50ZWdyYXRpb24gVGVzdHMnLFxuICogICBhbGlhczogJ2ludGVncmF0aW9uJyxcbiAqICAgc3RlcHM6IFtcbiAqICAgICB7IHBsdWdpbjogeyBuYW1lOiAnamVzdC1pbnRlZ3JhdGlvbicgfSB9LFxuICogICAgIHsgcGx1Z2luOiB7IG5hbWU6ICdlMmUtdGVzdHMnLCBhbGlhczogJ2N5cHJlc3MnIH0gfSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFnZUJ1aWxkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luTG9va3VwOiBQbHVnaW5Mb29rdXA7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5pcXVlSWQ6IFVuaXF1ZUlkO1xuICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbE1ldGFkYXRhOiBNZXRhRGF0YVR5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENvbXB1dGVUeXBlPzogQ2RrQ29tcHV0ZVR5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXJ0aWZhY3RNYW5hZ2VyPzogQXJ0aWZhY3RNYW5hZ2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBpcGVsaW5lU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTdGFnZUJ1aWxkZXJQcm9wcykge1xuICAgIHRoaXMuc2NvcGUgPSBwcm9wcy5zY29wZTtcbiAgICB0aGlzLnBsdWdpbkxvb2t1cCA9IHByb3BzLnBsdWdpbkxvb2t1cDtcbiAgICB0aGlzLnVuaXF1ZUlkID0gcHJvcHMudW5pcXVlSWQ7XG4gICAgdGhpcy5nbG9iYWxNZXRhZGF0YSA9IHByb3BzLmdsb2JhbE1ldGFkYXRhO1xuICAgIHRoaXMuZGVmYXVsdENvbXB1dGVUeXBlID0gcHJvcHMuZGVmYXVsdENvbXB1dGVUeXBlO1xuICAgIHRoaXMuYXJ0aWZhY3RNYW5hZ2VyID0gcHJvcHMuYXJ0aWZhY3RNYW5hZ2VyO1xuICAgIHRoaXMub3JnSWQgPSBwcm9wcy5vcmdJZDtcbiAgICB0aGlzLnBpcGVsaW5lU2NvcGUgPSBwcm9wcy5waXBlbGluZVNjb3BlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGEgc3RhZ2UncyBwbHVnaW4tYmFzZWQgc3RlcCBjb25maWdzIGludG8gQ29kZUJ1aWxkIHN0ZXBzXG4gICAqIGFuZCBhZGRzIHRoZW0gYXMgYSB3YXZlIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIGFkZFN0YWdlKHBpcGVsaW5lOiBDb2RlUGlwZWxpbmUsIHN0YWdlOiBTdGFnZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFnZUFsaWFzID0gc3RhZ2UuYWxpYXMgPz8gYCR7c3RhZ2Uuc3RhZ2VOYW1lfS1hbGlhc2A7XG5cbiAgICBjb25zdCBwcmVTdGVwcyA9IHN0YWdlLnN0ZXBzXG4gICAgICAuZmlsdGVyKHMgPT4gKHMucG9zaXRpb24gPz8gJ3ByZScpID09PSAncHJlJylcbiAgICAgIC5tYXAocyA9PiB0aGlzLnJlc29sdmVTdGVwKHMsIHN0YWdlLnN0YWdlTmFtZSwgc3RhZ2VBbGlhcykpO1xuICAgIGNvbnN0IHBvc3RTdGVwcyA9IHN0YWdlLnN0ZXBzXG4gICAgICAuZmlsdGVyKHMgPT4gcy5wb3NpdGlvbiA9PT0gJ3Bvc3QnKVxuICAgICAgLm1hcChzID0+IHRoaXMucmVzb2x2ZVN0ZXAocywgc3RhZ2Uuc3RhZ2VOYW1lLCBzdGFnZUFsaWFzKSk7XG5cbiAgICBwaXBlbGluZS5hZGRXYXZlKHN0YWdlQWxpYXMsIHtcbiAgICAgIC4uLihwcmVTdGVwcy5sZW5ndGggPiAwICYmIHsgcHJlOiBwcmVTdGVwcyB9KSxcbiAgICAgIC4uLihwb3N0U3RlcHMubGVuZ3RoID4gMCAmJiB7IHBvc3Q6IHBvc3RTdGVwcyB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVN0ZXAoc3RlcENvbmZpZzogU3RhZ2VPcHRpb25zWydzdGVwcyddW251bWJlcl0sIHN0YWdlTmFtZTogc3RyaW5nLCBzdGFnZUFsaWFzOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwbHVnaW4gPSB0aGlzLnBsdWdpbkxvb2t1cC5wbHVnaW4oc3RlcENvbmZpZy5wbHVnaW4pO1xuICAgIC8vIFBlci1zdGVwIHBsdWdpbiBjb25maWcgbGl2ZXMgb24gdGhlIHBsdWdpbiByZWZlcmVuY2UgKGBwbHVnaW4ubWV0YWRhdGFgIOKAlFxuICAgIC8vIGUuZy4gSkFWQV9WRVJTSU9OL0tPVExJTl9WRVJTSU9OL2NvbXB1dGV0eXBlIG92ZXJyaWRlcykuIHBsdWdpbkxvb2t1cC5wbHVnaW4oKVxuICAgIC8vIHJldHVybnMgdGhlIHJlc29sdmVkIENBVEFMT0cgcGx1Z2luIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIG1ldGFkYXRhIGluIHRoZVxuICAgIC8vIHByZS1yZXNvbHZlZCBwYXRoLCBzbyBtZXJnZSBpdCBoZXJlIHRvbyDigJQgb3RoZXJ3aXNlIHBlci1zdGVwIG92ZXJyaWRlcyBhcmVcbiAgICAvLyBzaWxlbnRseSBpZ25vcmVkIGFuZCB0aGUgYnVpbGQgZmFsbHMgYmFjayB0byBwbHVnaW4gZGVmYXVsdHMuXG4gICAgLy8gT3JkZXIgKGxhc3Qgd2lucyk6IGdsb2JhbCA8IHBsdWdpbi1yZWYgbWV0YWRhdGEgPCBzdGVwLWxldmVsIG1ldGFkYXRhLlxuICAgIGNvbnN0IHN0ZXBNZXRhZGF0YSA9IG1lcmdlKHRoaXMuZ2xvYmFsTWV0YWRhdGEsIHN0ZXBDb25maWcucGx1Z2luLm1ldGFkYXRhID8/IHt9LCBzdGVwQ29uZmlnLm1ldGFkYXRhID8/IHt9KTtcbiAgICAvLyBUV08gZGlmZmVyZW50IGlkZW50aXRpZXMsIGRlbGliZXJhdGVseSBrZXB0IGFwYXJ0OlxuICAgIC8vICAtIGBzdGVwSWRBbGlhc2AgbmFtZXMgdGhlIENESyBjb25zdHJ1Y3QuIEl0IHN0YXlzIGFzIGl0IGFsd2F5cyB3YXNcbiAgICAvLyAgICAoYGFsaWFzID8/IG5hbWVgKSwgYmVjYXVzZSBjaGFuZ2luZyBpdCByZW5hbWVzIHRoZSBDb2RlQnVpbGQgcHJvamVjdCdzXG4gICAgLy8gICAgbG9naWNhbCBpZCBhbmQgQ2xvdWRGb3JtYXRpb24gd291bGQgUkVQTEFDRSBldmVyeSB1bmFsaWFzZWQgc3RlcCdzXG4gICAgLy8gICAgcHJvamVjdCBvbiB0aGUgbmV4dCBkZXBsb3kg4oCUIGZvciBubyBiZW5lZml0LlxuICAgIC8vICAtIGBwbHVnaW5BbGlhc2AgaXMgdGhlIEFSVElGQUNULUtFWSBzZWdtZW50IGFuZCBtdXN0IGZvbGxvdyB0aGUgb25lIHJ1bGVcbiAgICAvLyAgICBldmVyeSBrZXkgY29uc3VtZXIgdXNlcyAoYHBsdWdpbkFydGlmYWN0QWxpYXNgKS4gSXQgdXNlZCB0byByZXVzZSB0aGVcbiAgICAvLyAgICBjb25zdHJ1Y3QgdmFsdWUsIHNvIGFuIHVuYWxpYXNlZCBzdGVwIHJlZ2lzdGVyZWQgYOKApjpub2RlanMtYnVpbGQ6ZGlzdGBcbiAgICAvLyAgICB3aGlsZSB0aGUgVUkgYXNrZWQgZm9yIGDigKY6bm9kZWpzLWJ1aWxkLWFsaWFzOmRpc3RgIGFuZCBzeW50aCBmYWlsZWQuXG4gICAgY29uc3Qgc3RlcElkQWxpYXMgPSBzdGVwQ29uZmlnLnBsdWdpbi5hbGlhcyA/PyBzdGVwQ29uZmlnLnBsdWdpbi5uYW1lO1xuICAgIGNvbnN0IHBsdWdpbkFsaWFzID0gcGx1Z2luQXJ0aWZhY3RBbGlhcyhzdGVwQ29uZmlnLnBsdWdpbik7XG5cbiAgICBpZiAoc3RlcENvbmZpZy5pbnB1dEFydGlmYWN0ICYmICF0aGlzLmFydGlmYWN0TWFuYWdlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU3RlcCBcIiR7c3RlcElkQWxpYXN9XCIgcmVxdWlyZXMgaW5wdXRBcnRpZmFjdCBidXQgbm8gYXJ0aWZhY3RNYW5hZ2VyIGlzIGNvbmZpZ3VyZWQuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGVwQ29uZmlnLmFkZGl0aW9uYWxJbnB1dEFydGlmYWN0cz8ubGVuZ3RoICYmICF0aGlzLmFydGlmYWN0TWFuYWdlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU3RlcCBcIiR7c3RlcElkQWxpYXN9XCIgcmVxdWlyZXMgYWRkaXRpb25hbElucHV0QXJ0aWZhY3RzIGJ1dCBubyBhcnRpZmFjdE1hbmFnZXIgaXMgY29uZmlndXJlZC5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dCA9IHN0ZXBDb25maWcuaW5wdXRBcnRpZmFjdCAmJiB0aGlzLmFydGlmYWN0TWFuYWdlclxuICAgICAgPyB0aGlzLmFydGlmYWN0TWFuYWdlci5nZXRPdXRwdXQoc3RlcENvbmZpZy5pbnB1dEFydGlmYWN0KVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBhZGRpdGlvbmFsSW5wdXRzID0gc3RlcENvbmZpZy5hZGRpdGlvbmFsSW5wdXRBcnRpZmFjdHM/Lmxlbmd0aCAmJiB0aGlzLmFydGlmYWN0TWFuYWdlclxuICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIHN0ZXBDb25maWcuYWRkaXRpb25hbElucHV0QXJ0aWZhY3RzLm1hcCgoeyBhcnRpZmFjdCwgZGlyZWN0b3J5IH0pID0+IFtcbiAgICAgICAgICBkaXJlY3RvcnkgfHwgYXJ0aWZhY3Qub3V0cHV0RGlyZWN0b3J5LFxuICAgICAgICAgIHRoaXMuYXJ0aWZhY3RNYW5hZ2VyIS5nZXRPdXRwdXQoYXJ0aWZhY3QpLFxuICAgICAgICBdKSxcbiAgICAgIClcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIGNyZWF0ZUNvZGVCdWlsZFN0ZXAoe1xuICAgICAgaWQ6IHRoaXMudW5pcXVlSWQuZ2VuZXJhdGUoYHN0YWdlOiR7c3RhZ2VBbGlhc306JHtzdGVwSWRBbGlhc31gKSxcbiAgICAgIHVuaXF1ZUlkOiB0aGlzLnVuaXF1ZUlkLFxuICAgICAgcGx1Z2luLFxuICAgICAgbWV0YWRhdGE6IHN0ZXBNZXRhZGF0YSxcbiAgICAgIG5ldHdvcms6IHN0ZXBDb25maWcubmV0d29yayxcbiAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxuICAgICAgZGVmYXVsdENvbXB1dGVUeXBlOiB0aGlzLmRlZmF1bHRDb21wdXRlVHlwZSxcbiAgICAgIGlucHV0LFxuICAgICAgYWRkaXRpb25hbElucHV0cyxcbiAgICAgIGFydGlmYWN0TWFuYWdlcjogdGhpcy5hcnRpZmFjdE1hbmFnZXIsXG4gICAgICBzdGFnZU5hbWUsXG4gICAgICBzdGFnZUFsaWFzLFxuICAgICAgcGx1Z2luQWxpYXMsXG4gICAgICBwcmVJbnN0YWxsQ29tbWFuZHM6IHN0ZXBDb25maWcucHJlSW5zdGFsbENvbW1hbmRzLFxuICAgICAgcG9zdEluc3RhbGxDb21tYW5kczogc3RlcENvbmZpZy5wb3N0SW5zdGFsbENvbW1hbmRzLFxuICAgICAgcHJlQ29tbWFuZHM6IHN0ZXBDb25maWcucHJlQ29tbWFuZHMsXG4gICAgICBwb3N0Q29tbWFuZHM6IHN0ZXBDb25maWcucG9zdENvbW1hbmRzLFxuICAgICAgZW52OiBzdGVwQ29uZmlnLmVudixcbiAgICAgIHRpbWVvdXQ6IHN0ZXBDb25maWcudGltZW91dCA/PyBwbHVnaW4udGltZW91dCA/PyB1bmRlZmluZWQsXG4gICAgICAvLyBBIHNjYW4vc2VjdXJpdHktY2F0ZWdvcnkgcGx1Z2luIGNhbiBuZXZlciBiZSBkb3duZ3JhZGVkIGZyb20gJ2ZhaWwnIOKAlCBzZWUgcmVzb2x2ZUZhaWx1cmVCZWhhdmlvci5cbiAgICAgIGZhaWx1cmVCZWhhdmlvcjogcmVzb2x2ZUZhaWx1cmVCZWhhdmlvcihwbHVnaW4uY2F0ZWdvcnksIHN0ZXBDb25maWcuZmFpbHVyZUJlaGF2aW9yID8/IHBsdWdpbi5mYWlsdXJlQmVoYXZpb3IpLFxuICAgICAgb3JnSWQ6IHRoaXMub3JnSWQsXG4gICAgICBwaXBlbGluZVNjb3BlOiB0aGlzLnBpcGVsaW5lU2NvcGUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW5kIGFkZHMgbXVsdGlwbGUgc3RhZ2VzIGFzIHdhdmVzIHRvIHRoZSBwaXBlbGluZSwgaW4gb3JkZXIuXG4gICAqL1xuICBhZGRTdGFnZXMocGlwZWxpbmU6IENvZGVQaXBlbGluZSwgc3RhZ2VzOiBTdGFnZU9wdGlvbnNbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2Ygc3RhZ2VzKSB7XG4gICAgICB0aGlzLmFkZFN0YWdlKHBpcGVsaW5lLCBzdGFnZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- import { resolveTemplates } from './index.js';
3
+ import { resolveSelfReferencing, resolveTemplates } from './index.js';
4
4
  /**
5
5
  * Fields inside a Plugin record that accept `{{ ... }}` templates.
6
6
  *
@@ -30,19 +30,33 @@ export function resolvePluginTemplates(plugin, pipelineScope) {
30
30
  // Deep clone so mutations don't leak back to the caller's Plugin.
31
31
  // Structural fields we care about are plain JSON; structuredClone is safe.
32
32
  const clone = structuredClone(plugin);
33
+ // The `env` scope root IS the clone's env map, not the original. It used to be
34
+ // `plugin.env` — the UNRESOLVED values — so `B: '{{ env.A }}'` substituted A's
35
+ // raw template text, and the literal `{{ … }}` was baked into the CodeBuild
36
+ // environment and shell commands with no error. A cycle (A↔B) did the same.
37
+ const env = (clone.env ?? {});
33
38
  const scope = {
34
39
  ...pipelineScope,
35
40
  plugin: { name: plugin.name, version: plugin.version },
36
- env: plugin.env ?? {},
41
+ env,
37
42
  };
38
- const { errors } = resolveTemplates(clone, scope, isPluginTemplatableField);
43
+ // Pass 1 — `env` first, as a self-referencing document: topologically ordered
44
+ // so each value resolves after the ones it reads, with cycles reported rather
45
+ // than silently left as template text. Resolving writes back into `env`, which
46
+ // is the scope root, so later references see resolved values.
47
+ const envPass = resolveSelfReferencing({ env }, scope, (field) => field === 'env' || field.startsWith('env.'), (field) => field);
48
+ // Pass 2 — everything else, against the now-resolved `env`. `env` itself is
49
+ // excluded: its values are final, and one produced by an escape (`{{{{x}}` →
50
+ // `{{x}}`) must not be tokenized a second time as if it were an expression.
51
+ const rest = resolveTemplates(clone, scope, (field) => isPluginTemplatableField(field) && !(field === 'env' || field.startsWith('env.')));
52
+ const errors = [...envPass.errors, ...rest.errors];
39
53
  if (errors.length > 0) {
40
54
  // First error wins — resolver errors should never be batched at synth time
41
55
  // because a broken template is a programmer error, not a validation step.
42
56
  const e = errors[0];
43
- const msg = `Template resolution failed in plugin "${plugin.name}" at field '${e.field}': ${e.message}`;
57
+ const msg = `Template resolution failed in plugin "${plugin.name}" at field '${e.field ?? e.path ?? 'env'}': ${e.message}`;
44
58
  throw new Error(msg);
45
59
  }
46
60
  return clone;
47
61
  }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbXBsYXRlL3BsdWdpbi1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBR3RDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU5Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRztJQUN6QixhQUFhO0lBQ2IsVUFBVSxFQUFFLFdBQVc7SUFDdkIsaUJBQWlCLEVBQUUsV0FBVztJQUM5QixLQUFLLEVBQUUseUJBQXlCO0lBQ2hDLFdBQVcsRUFBRSx5QkFBeUI7Q0FDOUIsQ0FBQztBQUVYLE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxLQUFhO0lBQ3BELG9GQUFvRjtJQUNwRiw2REFBNkQ7SUFDN0QsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0csQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLE1BQWMsRUFDZCxhQUFzQztJQUV0QyxrRUFBa0U7SUFDbEUsMkVBQTJFO0lBQzNFLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQXFDLENBQUM7SUFFMUUsTUFBTSxLQUFLLEdBQUc7UUFDWixHQUFHLGFBQWE7UUFDaEIsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDdEQsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLElBQUksRUFBRTtLQUN0QixDQUFDO0lBRUYsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUM1RSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEIsMkVBQTJFO1FBQzNFLDBFQUEwRTtRQUMxRSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFFLENBQUM7UUFDckIsTUFBTSxHQUFHLEdBQUcseUNBQXlDLE1BQU0sQ0FBQyxJQUFJLGVBQWUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEcsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgeyByZXNvbHZlVGVtcGxhdGVzIH0gZnJvbSAnLi9pbmRleC5qcyc7XG5cbi8qKlxuICogRmllbGRzIGluc2lkZSBhIFBsdWdpbiByZWNvcmQgdGhhdCBhY2NlcHQgYHt7IC4uLiB9fWAgdGVtcGxhdGVzLlxuICpcbiAqIFB1cmUtc3RyaW5nIGxlYXZlcyBvbmx5LiBgbmFtZWAsIGB2ZXJzaW9uYCwgYHBsdWdpblR5cGVgLCBgY29tcHV0ZVR5cGVgLFxuICogYHRpbWVvdXRgLCBgc2VjcmV0c2AsIGBmYWlsdXJlQmVoYXZpb3JgLCBgcmVxdWlyZWRNZXRhZGF0YWAsIGByZXF1aXJlZFZhcnNgXG4gKiBzdGF5IGxpdGVyYWwuIGBtZXRhZGF0YS4qYCBpcyBleGNsdWRlZCBiZWNhdXNlIENESy1tZXRhZGF0YSB2YWx1ZXMgYXJlXG4gKiBzdHJ1Y3R1cmFsLCBub3QgdXNlci1pbnRlcnBvbGF0ZWQuXG4gKi9cbmNvbnN0IFRFTVBMQVRBQkxFX0ZJRUxEUyA9IFtcbiAgJ2Rlc2NyaXB0aW9uJyxcbiAgJ2NvbW1hbmRzJywgLy8gc3RyaW5nW11cbiAgJ2luc3RhbGxDb21tYW5kcycsIC8vIHN0cmluZ1tdXG4gICdlbnYnLCAvLyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gICdidWlsZEFyZ3MnLCAvLyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQbHVnaW5UZW1wbGF0YWJsZUZpZWxkKGZpZWxkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gYGNvbW1hbmRzYCAvIGBpbnN0YWxsQ29tbWFuZHNgIGFyZSBhcnJheXMgb2Ygc3RyaW5ncyDihpIgZW50cmllcyBsaWtlICdjb21tYW5kc1swXSdcbiAgLy8gYGVudmAgLyBgYnVpbGRBcmdzYCBhcmUgb2JqZWN0cyDihpIgZW50cmllcyBsaWtlICdlbnYuU1RBR0UnXG4gIHJldHVybiBURU1QTEFUQUJMRV9GSUVMRFMuc29tZShmID0+IGZpZWxkID09PSBmIHx8IGZpZWxkLnN0YXJ0c1dpdGgoYCR7Zn1bYCkgfHwgZmllbGQuc3RhcnRzV2l0aChgJHtmfS5gKSk7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgc2hhbGxvdyBjbG9uZSBvZiBgcGx1Z2luYCB3aXRoIGFsbCBge3sgLi4uIH19YCB0ZW1wbGF0ZXNcbiAqIHJlc29sdmVkIGFnYWluc3QgdGhlIGdpdmVuIHBpcGVsaW5lIHNjb3BlLiBDYWxsZXIgbXVzdCBwcmUtcG9wdWxhdGVcbiAqIGBwaXBlbGluZVNjb3BlYCB3aXRoIGB7IHBpcGVsaW5lLCBwbHVnaW4sIGVudiB9YCBrZXlzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBsdWdpblRlbXBsYXRlcyhcbiAgcGx1Z2luOiBQbHVnaW4sXG4gIHBpcGVsaW5lU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogUGx1Z2luIHtcbiAgLy8gRGVlcCBjbG9uZSBzbyBtdXRhdGlvbnMgZG9uJ3QgbGVhayBiYWNrIHRvIHRoZSBjYWxsZXIncyBQbHVnaW4uXG4gIC8vIFN0cnVjdHVyYWwgZmllbGRzIHdlIGNhcmUgYWJvdXQgYXJlIHBsYWluIEpTT047IHN0cnVjdHVyZWRDbG9uZSBpcyBzYWZlLlxuICBjb25zdCBjbG9uZSA9IHN0cnVjdHVyZWRDbG9uZShwbHVnaW4pIGFzIFBsdWdpbiAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIGNvbnN0IHNjb3BlID0ge1xuICAgIC4uLnBpcGVsaW5lU2NvcGUsXG4gICAgcGx1Z2luOiB7IG5hbWU6IHBsdWdpbi5uYW1lLCB2ZXJzaW9uOiBwbHVnaW4udmVyc2lvbiB9LFxuICAgIGVudjogcGx1Z2luLmVudiA/PyB7fSxcbiAgfTtcblxuICBjb25zdCB7IGVycm9ycyB9ID0gcmVzb2x2ZVRlbXBsYXRlcyhjbG9uZSwgc2NvcGUsIGlzUGx1Z2luVGVtcGxhdGFibGVGaWVsZCk7XG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIC8vIEZpcnN0IGVycm9yIHdpbnMg4oCUIHJlc29sdmVyIGVycm9ycyBzaG91bGQgbmV2ZXIgYmUgYmF0Y2hlZCBhdCBzeW50aCB0aW1lXG4gICAgLy8gYmVjYXVzZSBhIGJyb2tlbiB0ZW1wbGF0ZSBpcyBhIHByb2dyYW1tZXIgZXJyb3IsIG5vdCBhIHZhbGlkYXRpb24gc3RlcC5cbiAgICBjb25zdCBlID0gZXJyb3JzWzBdITtcbiAgICBjb25zdCBtc2cgPSBgVGVtcGxhdGUgcmVzb2x1dGlvbiBmYWlsZWQgaW4gcGx1Z2luIFwiJHtwbHVnaW4ubmFtZX1cIiBhdCBmaWVsZCAnJHtlLmZpZWxkfSc6ICR7ZS5tZXNzYWdlfWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gIH1cbiAgcmV0dXJuIGNsb25lO1xufVxuIl19
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbXBsYXRlL3BsdWdpbi1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBR3RDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV0RTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRztJQUN6QixhQUFhO0lBQ2IsVUFBVSxFQUFFLFdBQVc7SUFDdkIsaUJBQWlCLEVBQUUsV0FBVztJQUM5QixLQUFLLEVBQUUseUJBQXlCO0lBQ2hDLFdBQVcsRUFBRSx5QkFBeUI7Q0FDOUIsQ0FBQztBQUVYLE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxLQUFhO0lBQ3BELG9GQUFvRjtJQUNwRiw2REFBNkQ7SUFDN0QsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0csQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLE1BQWMsRUFDZCxhQUFzQztJQUV0QyxrRUFBa0U7SUFDbEUsMkVBQTJFO0lBQzNFLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQXFDLENBQUM7SUFFMUUsK0VBQStFO0lBQy9FLCtFQUErRTtJQUMvRSw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQTJCLENBQUM7SUFDeEQsTUFBTSxLQUFLLEdBQUc7UUFDWixHQUFHLGFBQWE7UUFDaEIsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDdEQsR0FBRztLQUNKLENBQUM7SUFFRiw4RUFBOEU7SUFDOUUsOEVBQThFO0lBQzlFLCtFQUErRTtJQUMvRSw4REFBOEQ7SUFDOUQsTUFBTSxPQUFPLEdBQUcsc0JBQXNCLENBQ3BDLEVBQUUsR0FBRyxFQUFFLEVBQ1AsS0FBSyxFQUNMLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQ3RELENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQ2pCLENBQUM7SUFFRiw0RUFBNEU7SUFDNUUsNkVBQTZFO0lBQzdFLDRFQUE0RTtJQUM1RSxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FDM0IsS0FBSyxFQUNMLEtBQUssRUFDTCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUM3RixDQUFDO0lBRUYsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RCLDJFQUEyRTtRQUMzRSwwRUFBMEU7UUFDMUUsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBRSxDQUFDO1FBQ3JCLE1BQU0sR0FBRyxHQUFHLHlDQUF5QyxNQUFNLENBQUMsSUFBSSxlQUFlLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNILE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHsgcmVzb2x2ZVNlbGZSZWZlcmVuY2luZywgcmVzb2x2ZVRlbXBsYXRlcyB9IGZyb20gJy4vaW5kZXguanMnO1xuXG4vKipcbiAqIEZpZWxkcyBpbnNpZGUgYSBQbHVnaW4gcmVjb3JkIHRoYXQgYWNjZXB0IGB7eyAuLi4gfX1gIHRlbXBsYXRlcy5cbiAqXG4gKiBQdXJlLXN0cmluZyBsZWF2ZXMgb25seS4gYG5hbWVgLCBgdmVyc2lvbmAsIGBwbHVnaW5UeXBlYCwgYGNvbXB1dGVUeXBlYCxcbiAqIGB0aW1lb3V0YCwgYHNlY3JldHNgLCBgZmFpbHVyZUJlaGF2aW9yYCwgYHJlcXVpcmVkTWV0YWRhdGFgLCBgcmVxdWlyZWRWYXJzYFxuICogc3RheSBsaXRlcmFsLiBgbWV0YWRhdGEuKmAgaXMgZXhjbHVkZWQgYmVjYXVzZSBDREstbWV0YWRhdGEgdmFsdWVzIGFyZVxuICogc3RydWN0dXJhbCwgbm90IHVzZXItaW50ZXJwb2xhdGVkLlxuICovXG5jb25zdCBURU1QTEFUQUJMRV9GSUVMRFMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdjb21tYW5kcycsIC8vIHN0cmluZ1tdXG4gICdpbnN0YWxsQ29tbWFuZHMnLCAvLyBzdHJpbmdbXVxuICAnZW52JywgLy8gUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAnYnVpbGRBcmdzJywgLy8gUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGx1Z2luVGVtcGxhdGFibGVGaWVsZChmaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIGBjb21tYW5kc2AgLyBgaW5zdGFsbENvbW1hbmRzYCBhcmUgYXJyYXlzIG9mIHN0cmluZ3Mg4oaSIGVudHJpZXMgbGlrZSAnY29tbWFuZHNbMF0nXG4gIC8vIGBlbnZgIC8gYGJ1aWxkQXJnc2AgYXJlIG9iamVjdHMg4oaSIGVudHJpZXMgbGlrZSAnZW52LlNUQUdFJ1xuICByZXR1cm4gVEVNUExBVEFCTEVfRklFTERTLnNvbWUoZiA9PiBmaWVsZCA9PT0gZiB8fCBmaWVsZC5zdGFydHNXaXRoKGAke2Z9W2ApIHx8IGZpZWxkLnN0YXJ0c1dpdGgoYCR7Zn0uYCkpO1xufVxuXG4vKipcbiAqIFJldHVybiBhIHNoYWxsb3cgY2xvbmUgb2YgYHBsdWdpbmAgd2l0aCBhbGwgYHt7IC4uLiB9fWAgdGVtcGxhdGVzXG4gKiByZXNvbHZlZCBhZ2FpbnN0IHRoZSBnaXZlbiBwaXBlbGluZSBzY29wZS4gQ2FsbGVyIG11c3QgcHJlLXBvcHVsYXRlXG4gKiBgcGlwZWxpbmVTY29wZWAgd2l0aCBgeyBwaXBlbGluZSwgcGx1Z2luLCBlbnYgfWAga2V5cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQbHVnaW5UZW1wbGF0ZXMoXG4gIHBsdWdpbjogUGx1Z2luLFxuICBwaXBlbGluZVNjb3BlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFBsdWdpbiB7XG4gIC8vIERlZXAgY2xvbmUgc28gbXV0YXRpb25zIGRvbid0IGxlYWsgYmFjayB0byB0aGUgY2FsbGVyJ3MgUGx1Z2luLlxuICAvLyBTdHJ1Y3R1cmFsIGZpZWxkcyB3ZSBjYXJlIGFib3V0IGFyZSBwbGFpbiBKU09OOyBzdHJ1Y3R1cmVkQ2xvbmUgaXMgc2FmZS5cbiAgY29uc3QgY2xvbmUgPSBzdHJ1Y3R1cmVkQ2xvbmUocGx1Z2luKSBhcyBQbHVnaW4gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvLyBUaGUgYGVudmAgc2NvcGUgcm9vdCBJUyB0aGUgY2xvbmUncyBlbnYgbWFwLCBub3QgdGhlIG9yaWdpbmFsLiBJdCB1c2VkIHRvIGJlXG4gIC8vIGBwbHVnaW4uZW52YCDigJQgdGhlIFVOUkVTT0xWRUQgdmFsdWVzIOKAlCBzbyBgQjogJ3t7IGVudi5BIH19J2Agc3Vic3RpdHV0ZWQgQSdzXG4gIC8vIHJhdyB0ZW1wbGF0ZSB0ZXh0LCBhbmQgdGhlIGxpdGVyYWwgYHt7IOKApiB9fWAgd2FzIGJha2VkIGludG8gdGhlIENvZGVCdWlsZFxuICAvLyBlbnZpcm9ubWVudCBhbmQgc2hlbGwgY29tbWFuZHMgd2l0aCBubyBlcnJvci4gQSBjeWNsZSAoQeKGlEIpIGRpZCB0aGUgc2FtZS5cbiAgY29uc3QgZW52ID0gKGNsb25lLmVudiA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgY29uc3Qgc2NvcGUgPSB7XG4gICAgLi4ucGlwZWxpbmVTY29wZSxcbiAgICBwbHVnaW46IHsgbmFtZTogcGx1Z2luLm5hbWUsIHZlcnNpb246IHBsdWdpbi52ZXJzaW9uIH0sXG4gICAgZW52LFxuICB9O1xuXG4gIC8vIFBhc3MgMSDigJQgYGVudmAgZmlyc3QsIGFzIGEgc2VsZi1yZWZlcmVuY2luZyBkb2N1bWVudDogdG9wb2xvZ2ljYWxseSBvcmRlcmVkXG4gIC8vIHNvIGVhY2ggdmFsdWUgcmVzb2x2ZXMgYWZ0ZXIgdGhlIG9uZXMgaXQgcmVhZHMsIHdpdGggY3ljbGVzIHJlcG9ydGVkIHJhdGhlclxuICAvLyB0aGFuIHNpbGVudGx5IGxlZnQgYXMgdGVtcGxhdGUgdGV4dC4gUmVzb2x2aW5nIHdyaXRlcyBiYWNrIGludG8gYGVudmAsIHdoaWNoXG4gIC8vIGlzIHRoZSBzY29wZSByb290LCBzbyBsYXRlciByZWZlcmVuY2VzIHNlZSByZXNvbHZlZCB2YWx1ZXMuXG4gIGNvbnN0IGVudlBhc3MgPSByZXNvbHZlU2VsZlJlZmVyZW5jaW5nKFxuICAgIHsgZW52IH0sXG4gICAgc2NvcGUsXG4gICAgKGZpZWxkKSA9PiBmaWVsZCA9PT0gJ2VudicgfHwgZmllbGQuc3RhcnRzV2l0aCgnZW52LicpLFxuICAgIChmaWVsZCkgPT4gZmllbGQsXG4gICk7XG5cbiAgLy8gUGFzcyAyIOKAlCBldmVyeXRoaW5nIGVsc2UsIGFnYWluc3QgdGhlIG5vdy1yZXNvbHZlZCBgZW52YC4gYGVudmAgaXRzZWxmIGlzXG4gIC8vIGV4Y2x1ZGVkOiBpdHMgdmFsdWVzIGFyZSBmaW5hbCwgYW5kIG9uZSBwcm9kdWNlZCBieSBhbiBlc2NhcGUgKGB7e3t7eH19YCDihpJcbiAgLy8gYHt7eH19YCkgbXVzdCBub3QgYmUgdG9rZW5pemVkIGEgc2Vjb25kIHRpbWUgYXMgaWYgaXQgd2VyZSBhbiBleHByZXNzaW9uLlxuICBjb25zdCByZXN0ID0gcmVzb2x2ZVRlbXBsYXRlcyhcbiAgICBjbG9uZSxcbiAgICBzY29wZSxcbiAgICAoZmllbGQpID0+IGlzUGx1Z2luVGVtcGxhdGFibGVGaWVsZChmaWVsZCkgJiYgIShmaWVsZCA9PT0gJ2VudicgfHwgZmllbGQuc3RhcnRzV2l0aCgnZW52LicpKSxcbiAgKTtcblxuICBjb25zdCBlcnJvcnMgPSBbLi4uZW52UGFzcy5lcnJvcnMsIC4uLnJlc3QuZXJyb3JzXTtcbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gRmlyc3QgZXJyb3Igd2lucyDigJQgcmVzb2x2ZXIgZXJyb3JzIHNob3VsZCBuZXZlciBiZSBiYXRjaGVkIGF0IHN5bnRoIHRpbWVcbiAgICAvLyBiZWNhdXNlIGEgYnJva2VuIHRlbXBsYXRlIGlzIGEgcHJvZ3JhbW1lciBlcnJvciwgbm90IGEgdmFsaWRhdGlvbiBzdGVwLlxuICAgIGNvbnN0IGUgPSBlcnJvcnNbMF0hO1xuICAgIGNvbnN0IG1zZyA9IGBUZW1wbGF0ZSByZXNvbHV0aW9uIGZhaWxlZCBpbiBwbHVnaW4gXCIke3BsdWdpbi5uYW1lfVwiIGF0IGZpZWxkICcke2UuZmllbGQgPz8gZS5wYXRoID8/ICdlbnYnfSc6ICR7ZS5tZXNzYWdlfWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gIH1cbiAgcmV0dXJuIGNsb25lO1xufVxuIl19
@@ -9,7 +9,8 @@
9
9
  * Filter := "|" ws "default" ws ":" ws Quoted
10
10
  * Quoted := "'" ... "'" | "\"" ... "\""
11
11
  *
12
- * `{{{{` is the escape sequence for a literal `{{`.
12
+ * `{{{{` is the escape sequence for a literal `{{`; the `}}` that closes it is
13
+ * then literal too, so `{{{{ .X }}` renders `{{ .X }}`.
13
14
  */
14
15
  export declare const MAX_FIELD_SIZE_BYTES: number;
15
16
  export declare const MAX_PATH_DEPTH = 5;
@@ -11,7 +11,8 @@
11
11
  * Filter := "|" ws "default" ws ":" ws Quoted
12
12
  * Quoted := "'" ... "'" | "\"" ... "\""
13
13
  *
14
- * `{{{{` is the escape sequence for a literal `{{`.
14
+ * `{{{{` is the escape sequence for a literal `{{`; the `}}` that closes it is
15
+ * then literal too, so `{{{{ .X }}` renders `{{ .X }}`.
15
16
  */
16
17
  export const MAX_FIELD_SIZE_BYTES = 4 * 1024;
17
18
  export const MAX_PATH_DEPTH = 5;
@@ -65,10 +66,19 @@ export function tokenize(source) {
65
66
  literalStartPos = { line, col };
66
67
  };
67
68
  startLiteral();
69
+ // How many escaped `{{{{` are still waiting for their closing `}}`. The escape
70
+ // exists so plugin commands can carry Go / Helm / GitHub-style templates
71
+ // (`docker inspect -f '{{{{.State.Status}}'` → `{{.State.Status}}`), but any
72
+ // `}}` outside an expression used to throw — so the escape could only ever
73
+ // produce an UNCLOSED `{{`, and every real use of it was rejected at upload
74
+ // and at synth. A `}}` that closes an escaped open is literal text; an
75
+ // unmatched one is still an error, which keeps catching `{ x }}` typos.
76
+ let escapedOpen = 0;
68
77
  while (i < source.length) {
69
78
  // Escape: `{{{{` → literal `{{`
70
79
  if (source.startsWith('{{{{', i)) {
71
80
  advance(4);
81
+ escapedOpen++;
72
82
  continue;
73
83
  }
74
84
  // Expression start
@@ -89,8 +99,13 @@ export function tokenize(source) {
89
99
  startLiteral();
90
100
  continue;
91
101
  }
92
- // Stray `}}` outside an expression
102
+ // `}}` outside an expression: the close of an escaped `{{{{`, or a stray.
93
103
  if (source.startsWith('}}', i)) {
104
+ if (escapedOpen > 0) {
105
+ escapedOpen--;
106
+ advance(2);
107
+ continue;
108
+ }
94
109
  throw new TokenizerError("Unexpected '}}' outside expression", { line, col });
95
110
  }
96
111
  advance(1);
@@ -230,4 +245,4 @@ export function hasTemplate(source) {
230
245
  // tokenize() will produce a literal-only token list and round-trip correctly.
231
246
  return source.includes('{{');
232
247
  }
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbXBsYXRlL3Rva2VuaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7R0FZRztBQUVILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0MsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUNoQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7QUEwQnhDLE1BQU0sT0FBTyxjQUFlLFNBQVEsS0FBSztJQUdyQixHQUFHO0lBRnJCLFlBQ0UsT0FBZSxFQUNDLEdBQW1CO1FBRW5DLEtBQUssQ0FBQyxHQUFHLE9BQU8sWUFBWSxHQUFHLENBQUMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO21CQUZ4QyxHQUFHO1FBR25CLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztDQUNGO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxNQUFjO0lBQ3JDLDZFQUE2RTtJQUM3RSxnRkFBZ0Y7SUFDaEYsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQzdELE1BQU0sSUFBSSxjQUFjLENBQ3RCLDZCQUE2QixvQkFBb0IsUUFBUSxFQUN6RCxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7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LFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25ELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQWM7SUFDeEMsOEVBQThFO0lBQzlFLDhFQUE4RTtJQUM5RSxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRva2VuaXplciBmb3IgdGhlIHBpcGVsaW5lLWJ1aWxkZXIgdGVtcGxhdGUgZ3JhbW1hci5cbiAqXG4gKiBHcmFtbWFyOlxuICogICBUZW1wbGF0ZSAgIDo9IChMaXRlcmFsIHwgRXhwcikqXG4gKiAgIEV4cHIgICAgICAgOj0gXCJ7e1wiIHdzIFBhdGggKHdzIEZpbHRlcik/IHdzIFwifX1cIlxuICogICBQYXRoICAgICAgIDo9IElkZW50aWZpZXIgKFwiLlwiIElkZW50aWZpZXIpKlxuICogICBJZGVudGlmaWVyIDo9IFthLXpBLVpfXVthLXpBLVowLTlfXXswLDYzfVxuICogICBGaWx0ZXIgICAgIDo9IFwifFwiIHdzIFwiZGVmYXVsdFwiIHdzIFwiOlwiIHdzIFF1b3RlZFxuICogICBRdW90ZWQgICAgIDo9IFwiJ1wiIC4uLiBcIidcIiB8IFwiXFxcIlwiIC4uLiBcIlxcXCJcIlxuICpcbiAqIGB7e3t7YCBpcyB0aGUgZXNjYXBlIHNlcXVlbmNlIGZvciBhIGxpdGVyYWwgYHt7YC5cbiAqL1xuXG5leHBvcnQgY29uc3QgTUFYX0ZJRUxEX1NJWkVfQllURVMgPSA0ICogMTAyNDtcbmV4cG9ydCBjb25zdCBNQVhfUEFUSF9ERVBUSCA9IDU7XG5leHBvcnQgY29uc3QgTUFYX0lERU5USUZJRVJfTEVOR1RIID0gNjQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlUG9zaXRpb24ge1xuICBsaW5lOiBudW1iZXI7XG4gIGNvbDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpdGVyYWxUb2tlbiB7XG4gIGtpbmQ6ICdsaXRlcmFsJztcbiAgdmFsdWU6IHN0cmluZztcbiAgcG9zOiBTb3VyY2VQb3NpdGlvbjtcbn1cblxuZXhwb3J0IHR5cGUgQ29lcmNlS2luZCA9ICdudW1iZXInIHwgJ2Jvb2wnIHwgJ2pzb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4cHJUb2tlbiB7XG4gIGtpbmQ6ICdleHByJztcbiAgcGF0aDogc3RyaW5nW107IC8vIGUuZy4gWydwaXBlbGluZScsICdtZXRhZGF0YScsICdlbnYnXVxuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7IC8vIHZhbHVlIGZvciBgfCBkZWZhdWx0OiAnLi4uJ2AgZmlsdGVyXG4gIGNvZXJjZT86IENvZXJjZUtpbmQ7IC8vIGB8IG51bWJlcmAsIGB8IGJvb2xgLCBgfCBqc29uYFxuICBzb3VyY2U6IHN0cmluZzsgLy8gb3JpZ2luYWwgXCJ7eyAuLi4gfX1cIiB0ZXh0IChmb3IgZXJyb3IgbWVzc2FnZXMpXG4gIHBvczogU291cmNlUG9zaXRpb247XG59XG5cbmV4cG9ydCB0eXBlIFRva2VuID0gTGl0ZXJhbFRva2VuIHwgRXhwclRva2VuO1xuXG5leHBvcnQgY2xhc3MgVG9rZW5pemVyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgcG9zOiBTb3VyY2VQb3NpdGlvbixcbiAgKSB7XG4gICAgc3VwZXIoYCR7bWVzc2FnZX0gYXQgbGluZSAke3Bvcy5saW5lfSwgY29sICR7cG9zLmNvbH1gKTtcbiAgICB0aGlzLm5hbWUgPSAnVG9rZW5pemVyRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogVG9rZW5pemUgYSB0ZW1wbGF0ZSBzb3VyY2Ugc3RyaW5nLiBOZXZlciB0aHJvd3Mgb24gdmFsaWQgaW5wdXQ7XG4gKiB0aHJvd3MgYFRva2VuaXplckVycm9yYCB3aXRoIHNvdXJjZSBwb3NpdGlvbiBvbiBtYWxmb3JtZWQgdGVtcGxhdGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUoc291cmNlOiBzdHJpbmcpOiBUb2tlbltdIHtcbiAgLy8gQnl0ZSBjb3VudCwgbm90IGAubGVuZ3RoYCAoVVRGLTE2IGNvZGUgdW5pdHMpOiB0aGUgY2FwIGlzIHN0YXRlZCBpbiBieXRlcyxcbiAgLy8gYW5kIG11bHRpLWJ5dGUgY2hhcmFjdGVycyAoZW1vamksIG5vbi1BU0NJSSkgd291bGQgb3RoZXJ3aXNlIGJlIHVuZGVyY291bnRlZC5cbiAgaWYgKEJ1ZmZlci5ieXRlTGVuZ3RoKHNvdXJjZSwgJ3V0ZjgnKSA+IE1BWF9GSUVMRF9TSVpFX0JZVEVTKSB7XG4gICAgdGhyb3cgbmV3IFRva2VuaXplckVycm9yKFxuICAgICAgYEZpZWxkIGV4Y2VlZHMgbWF4IHNpemUgb2YgJHtNQVhfRklFTERfU0laRV9CWVRFU30gYnl0ZXNgLFxuICAgICAgeyBsaW5lOiAxLCBjb2w6IDEgfSxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgdG9rZW5zOiBUb2tlbltdID0gW107XG4gIGxldCBpID0gMDtcbiAgbGV0IGxpbmUgPSAxO1xuICBsZXQgY29sID0gMTtcbiAgbGV0IGxpdGVyYWxTdGFydCA9IDA7XG4gIGxldCBsaXRlcmFsU3RhcnRQb3M6IFNvdXJjZVBvc2l0aW9uID0geyBsaW5lOiAxLCBjb2w6IDEgfTtcblxuICBjb25zdCBhZHZhbmNlID0gKG46IG51bWJlcik6IHZvaWQgPT4ge1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICBpZiAoc291cmNlW2kgKyBrXSA9PT0gJ1xcbicpIHtcbiAgICAgICAgbGluZSsrO1xuICAgICAgICBjb2wgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sKys7XG4gICAgICB9XG4gICAgfVxuICAgIGkgKz0gbjtcbiAgfTtcblxuICBjb25zdCBmbHVzaExpdGVyYWwgPSAoZW5kSWR4OiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICBpZiAoZW5kSWR4ID4gbGl0ZXJhbFN0YXJ0KSB7XG4gICAgICAvLyBVbmVzY2FwZSBge3t7e2Ag4oaSIGB7e2BcbiAgICAgIGNvbnN0IHJhdyA9IHNvdXJjZS5zbGljZShsaXRlcmFsU3RhcnQsIGVuZElkeCk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJhdy5yZXBsYWNlKC9cXHtcXHtcXHtcXHsvZywgJ3t7Jyk7XG4gICAgICB0b2tlbnMucHVzaCh7IGtpbmQ6ICdsaXRlcmFsJywgdmFsdWUsIHBvczogbGl0ZXJhbFN0YXJ0UG9zIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzdGFydExpdGVyYWwgPSAoKTogdm9pZCA9PiB7XG4gICAgbGl0ZXJhbFN0YXJ0ID0gaTtcbiAgICBsaXRlcmFsU3RhcnRQb3MgPSB7IGxpbmUsIGNvbCB9O1xuICB9O1xuXG4gIHN0YXJ0TGl0ZXJhbCgpO1xuXG4gIHdoaWxlIChpIDwgc291cmNlLmxlbmd0aCkge1xuICAgIC8vIEVzY2FwZTogYHt7e3tgIOKGkiBsaXRlcmFsIGB7e2BcbiAgICBpZiAoc291cmNlLnN0YXJ0c1dpdGgoJ3t7e3snLCBpKSkge1xuICAgICAgYWR2YW5jZSg0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBFeHByZXNzaW9uIHN0YXJ0XG4gICAgaWYgKHNvdXJjZS5zdGFydHNXaXRoKCd7eycsIGkpKSB7XG4gICAgICBmbHVzaExpdGVyYWwoaSk7XG4gICAgICBjb25zdCBleHByUG9zOiBTb3VyY2VQb3NpdGlvbiA9IHsgbGluZSwgY29sIH07XG4gICAgICBhZHZhbmNlKDIpO1xuICAgICAgY29uc3QgZXhwciA9IHJlYWRFeHByZXNzaW9uKHNvdXJjZSwgaSwgbGluZSwgY29sKTtcbiAgICAgIHRva2Vucy5wdXNoKHtcbiAgICAgICAga2luZDogJ2V4cHInLFxuICAgICAgICBwYXRoOiBleHByLnBhdGgsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZXhwci5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGNvZXJjZTogZXhwci5jb2VyY2UsXG4gICAgICAgIHNvdXJjZTogc291cmNlLnNsaWNlKGkgLSAyLCBleHByLmVuZElkeCksXG4gICAgICAgIHBvczogZXhwclBvcyxcbiAgICAgIH0pO1xuICAgICAgYWR2YW5jZShleHByLmVuZElkeCAtIGkpO1xuICAgICAgc3RhcnRMaXRlcmFsKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy8gU3RyYXkgYH19YCBvdXRzaWRlIGFuIGV4cHJlc3Npb25cbiAgICBpZiAoc291cmNlLnN0YXJ0c1dpdGgoJ319JywgaSkpIHtcbiAgICAgIHRocm93IG5ldyBUb2tlbml6ZXJFcnJvcihcIlVuZXhwZWN0ZWQgJ319JyBvdXRzaWRlIGV4cHJlc3Npb25cIiwgeyBsaW5lLCBjb2wgfSk7XG4gICAgfVxuICAgIGFkdmFuY2UoMSk7XG4gIH1cblxuICBmbHVzaExpdGVyYWwoaSk7XG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmludGVyZmFjZSBQYXJzZWRFeHByIHtcbiAgcGF0aDogc3RyaW5nW107XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcbiAgY29lcmNlPzogQ29lcmNlS2luZDtcbiAgZW5kSWR4OiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIHJlYWRFeHByZXNzaW9uKFxuICBzb3VyY2U6IHN0cmluZyxcbiAgc3RhcnRJZHg6IG51bWJlcixcbiAgc3RhcnRMaW5lOiBudW1iZXIsXG4gIHN0YXJ0Q29sOiBudW1iZXIsXG4pOiBQYXJzZWRFeHByIHtcbiAgbGV0IGkgPSBzdGFydElkeDtcbiAgbGV0IGxpbmUgPSBzdGFydExpbmU7XG4gIGxldCBjb2wgPSBzdGFydENvbDtcblxuICBjb25zdCBza2lwV3MgPSAoKTogdm9pZCA9PiB7XG4gICAgd2hpbGUgKGkgPCBzb3VyY2UubGVuZ3RoICYmIChzb3VyY2VbaV0gPT09ICcgJyB8fCBzb3VyY2VbaV0gPT09ICdcXHQnKSkge1xuICAgICAgaSsrO1xuICAgICAgY29sKys7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHJlYWRJZGVudGlmaWVyID0gKCk6IHN0cmluZyA9PiB7XG4gICAgY29uc3Qgc3RhcnRJID0gaTtcbiAgICBpZiAoaSA+PSBzb3VyY2UubGVuZ3RoIHx8ICEvW2EtekEtWl9dLy50ZXN0KHNvdXJjZVtpXSEpKSB7XG4gICAgICB0aHJvdyBuZXcgVG9rZW5pemVyRXJyb3IoXG4gICAgICAgICdFeHBlY3RlZCBpZGVudGlmaWVyIGluc2lkZSB0ZW1wbGF0ZSBleHByZXNzaW9uJyxcbiAgICAgICAgeyBsaW5lLCBjb2wgfSxcbiAgICAgICk7XG4gICAgfVxuICAgIHdoaWxlIChpIDwgc291cmNlLmxlbmd0aCAmJiAvW2EtekEtWjAtOV9dLy50ZXN0KHNvdXJjZVtpXSEpKSB7XG4gICAgICBpKys7XG4gICAgICBjb2wrKztcbiAgICB9XG4gICAgY29uc3QgaWRlbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnRJLCBpKTtcbiAgICBpZiAoaWRlbnQubGVuZ3RoID4gTUFYX0lERU5USUZJRVJfTEVOR1RIKSB7XG4gICAgICB0aHJvdyBuZXcgVG9rZW5pemVyRXJyb3IoXG4gICAgICAgIGBJZGVudGlmaWVyIGV4Y2VlZHMgbWF4IGxlbmd0aCBvZiAke01BWF9JREVOVElGSUVSX0xFTkdUSH1gLFxuICAgICAgICB7IGxpbmUsIGNvbDogY29sIC0gaWRlbnQubGVuZ3RoIH0sXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gaWRlbnQ7XG4gIH07XG5cbiAgY29uc3QgcmVhZFF1b3RlZCA9ICgpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IHF1b3RlID0gc291cmNlW2ldO1xuICAgIGlmIChxdW90ZSAhPT0gJ1wiJyAmJiBxdW90ZSAhPT0gXCInXCIpIHtcbiAgICAgIHRocm93IG5ldyBUb2tlbml6ZXJFcnJvcignRXhwZWN0ZWQgcXVvdGVkIHN0cmluZycsIHsgbGluZSwgY29sIH0pO1xuICAgIH1cbiAgICBpKys7IGNvbCsrO1xuICAgIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHdoaWxlIChpIDwgc291cmNlLmxlbmd0aCAmJiBzb3VyY2VbaV0gIT09IHF1b3RlKSB7XG4gICAgICBpZiAoc291cmNlW2ldID09PSAnXFxcXCcpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHNvdXJjZVtpICsgMV07XG4gICAgICAgIGlmIChuZXh0ID09PSAnXFxcXCcgfHwgbmV4dCA9PT0gcXVvdGUpIHtcbiAgICAgICAgICBwYXJ0cy5wdXNoKG5leHQpO1xuICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICBjb2wgKz0gMjtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVG9rZW5pemVyRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgZXNjYXBlICdcXFxcJHtuZXh0ID8/ICcnfScgaW4gcXVvdGVkIHN0cmluZ2AsXG4gICAgICAgICAgeyBsaW5lLCBjb2wgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2VbaV0gPT09ICdcXG4nKSB7XG4gICAgICAgIHRocm93IG5ldyBUb2tlbml6ZXJFcnJvcignVW50ZXJtaW5hdGVkIHF1b3RlZCBzdHJpbmcnLCB7IGxpbmUsIGNvbCB9KTtcbiAgICAgIH1cbiAgICAgIHBhcnRzLnB1c2goc291cmNlW2ldISk7XG4gICAgICBpKys7IGNvbCsrO1xuICAgIH1cbiAgICBpZiAoaSA+PSBzb3VyY2UubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgVG9rZW5pemVyRXJyb3IoJ1VudGVybWluYXRlZCBxdW90ZWQgc3RyaW5nJywgeyBsaW5lLCBjb2wgfSk7XG4gICAgfVxuICAgIGkrKzsgY29sKys7IC8vIGNvbnN1bWUgY2xvc2luZyBxdW90ZVxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfTtcblxuICBza2lwV3MoKTtcbiAgY29uc3QgcGF0aDogc3RyaW5nW10gPSBbcmVhZElkZW50aWZpZXIoKV07XG4gIHdoaWxlIChpIDwgc291cmNlLmxlbmd0aCAmJiBzb3VyY2VbaV0gPT09ICcuJykge1xuICAgIGkrKzsgY29sKys7XG4gICAgcGF0aC5wdXNoKHJlYWRJZGVudGlmaWVyKCkpO1xuICAgIGlmIChwYXRoLmxlbmd0aCA+IE1BWF9QQVRIX0RFUFRIKSB7XG4gICAgICB0aHJvdyBuZXcgVG9rZW5pemVyRXJyb3IoXG4gICAgICAgIGBQYXRoIGRlcHRoIGV4Y2VlZHMgbWF4IG9mICR7TUFYX1BBVEhfREVQVEh9YCxcbiAgICAgICAgeyBsaW5lLCBjb2wgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHNraXBXcygpO1xuXG4gIGxldCBkZWZhdWx0VmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IGNvZXJjZTogQ29lcmNlS2luZCB8IHVuZGVmaW5lZDtcblxuICAvLyBGaWx0ZXJzIGNoYWluOiBgfCBkZWZhdWx0OiAneCcgfCBudW1iZXJgLCBgfCBib29sYCwgYHwganNvbmAsIGV0Yy5cbiAgLy8gLSBgZGVmYXVsdGAgdGFrZXMgYSBxdW90ZWQgYXJndW1lbnQg4oCUIGFwcGxpZWQgZmlyc3QgKGJlZm9yZSBjb2VyY2lvbilcbiAgLy8gLSBgbnVtYmVyYCwgYGJvb2xgLCBganNvbmAgYXJlIGFyZ3VtZW50LWxlc3MgY29lcmNpb24gZmlsdGVycyDigJQgYXBwbGllZCBsYXN0XG4gIHdoaWxlIChzb3VyY2VbaV0gPT09ICd8Jykge1xuICAgIGkrKzsgY29sKys7XG4gICAgc2tpcFdzKCk7XG5cbiAgICBpZiAoc291cmNlLnN0YXJ0c1dpdGgoJ2RlZmF1bHQnLCBpKSkge1xuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBUb2tlbml6ZXJFcnJvcihcIidkZWZhdWx0JyBmaWx0ZXIgbWF5IG9ubHkgYXBwZWFyIG9uY2VcIiwgeyBsaW5lLCBjb2wgfSk7XG4gICAgICB9XG4gICAgICBpICs9ICdkZWZhdWx0Jy5sZW5ndGg7XG4gICAgICBjb2wgKz0gJ2RlZmF1bHQnLmxlbmd0aDtcbiAgICAgIHNraXBXcygpO1xuICAgICAgaWYgKHNvdXJjZVtpXSAhPT0gJzonKSB7XG4gICAgICAgIHRocm93IG5ldyBUb2tlbml6ZXJFcnJvcihcIkV4cGVjdGVkICc6JyBhZnRlciAnZGVmYXVsdCdcIiwgeyBsaW5lLCBjb2wgfSk7XG4gICAgICB9XG4gICAgICBpKys7IGNvbCsrO1xuICAgICAgc2tpcFdzKCk7XG4gICAgICBkZWZhdWx0VmFsdWUgPSByZWFkUXVvdGVkKCk7XG4gICAgICBza2lwV3MoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGxldCBtYXRjaGVkQ29lcmNlOiBDb2VyY2VLaW5kIHwgbnVsbCA9IG51bGw7XG4gICAgZm9yIChjb25zdCBraW5kIG9mIFsnbnVtYmVyJywgJ2Jvb2wnLCAnanNvbiddIGFzIGNvbnN0KSB7XG4gICAgICBpZiAoc291cmNlLnN0YXJ0c1dpdGgoa2luZCwgaSkpIHtcbiAgICAgICAgLy8gRW5zdXJlIGlkZW50aWZpZXIgYm91bmRhcnkg4oCUIGBudW1iZXJpc2hgIG11c3Qgbm90IG1hdGNoIGBudW1iZXJgXG4gICAgICAgIGNvbnN0IG5leHQgPSBzb3VyY2VbaSArIGtpbmQubGVuZ3RoXTtcbiAgICAgICAgaWYgKCFuZXh0IHx8ICEvW2EtekEtWjAtOV9dLy50ZXN0KG5leHQpKSB7XG4gICAgICAgICAgbWF0Y2hlZENvZXJjZSA9IGtpbmQ7XG4gICAgICAgICAgaSArPSBraW5kLmxlbmd0aDtcbiAgICAgICAgICBjb2wgKz0ga2luZC5sZW5ndGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW1hdGNoZWRDb2VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBUb2tlbml6ZXJFcnJvcihcbiAgICAgICAgXCJVbmtub3duIGZpbHRlciDigJQgc3VwcG9ydGVkOiAnZGVmYXVsdCcsICdudW1iZXInLCAnYm9vbCcsICdqc29uJ1wiLFxuICAgICAgICB7IGxpbmUsIGNvbCB9LFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNvZXJjZSkge1xuICAgICAgdGhyb3cgbmV3IFRva2VuaXplckVycm9yKCdPbmx5IG9uZSBjb2VyY2lvbiBmaWx0ZXIgaXMgYWxsb3dlZCBwZXIgZXhwcmVzc2lvbicsIHsgbGluZSwgY29sIH0pO1xuICAgIH1cbiAgICBjb2VyY2UgPSBtYXRjaGVkQ29lcmNlO1xuICAgIHNraXBXcygpO1xuICB9XG5cbiAgaWYgKCFzb3VyY2Uuc3RhcnRzV2l0aCgnfX0nLCBpKSkge1xuICAgIHRocm93IG5ldyBUb2tlbml6ZXJFcnJvcihcIkV4cGVjdGVkICd9fSdcIiwgeyBsaW5lLCBjb2wgfSk7XG4gIH1cbiAgaSArPSAyO1xuICByZXR1cm4geyBwYXRoLCBkZWZhdWx0VmFsdWUsIGNvZXJjZSwgZW5kSWR4OiBpIH07XG59XG5cbi8qKlxuICogQ29udmVuaWVuY2U6IHJldHVybnMgdHJ1ZSBpZiB0aGUgc291cmNlIGNvbnRhaW5zIGFueSB0ZW1wbGF0ZXMuXG4gKiBVc2VkIGFzIGEgZmFzdC1wYXRoIHRvIHNraXAgdG9rZW5pemF0aW9uIGZvciBzdHJpbmdzIHRoYXQgYXJlIG9idmlvdXNseSBsaXRlcmFsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzVGVtcGxhdGUoc291cmNlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gTm90IGNvbXBsZXRlbHkgYWNjdXJhdGUgKGEgbG9uZSBge3t7e2Agd291bGQgcmV0dXJuIHRydWUpIGJ1dCB0aGF0J3MgZmluZSDigJRcbiAgLy8gdG9rZW5pemUoKSB3aWxsIHByb2R1Y2UgYSBsaXRlcmFsLW9ubHkgdG9rZW4gbGlzdCBhbmQgcm91bmQtdHJpcCBjb3JyZWN0bHkuXG4gIHJldHVybiBzb3VyY2UuaW5jbHVkZXMoJ3t7Jyk7XG59XG4iXX0=
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbXBsYXRlL3Rva2VuaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFDaEMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBMEJ4QyxNQUFNLE9BQU8sY0FBZSxTQUFRLEtBQUs7SUFHckIsR0FBRztJQUZyQixZQUNFLE9BQWUsRUFDQyxHQUFtQjtRQUVuQyxLQUFLLENBQUMsR0FBRyxPQUFPLFlBQVksR0FBRyxDQUFDLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzttQkFGeEMsR0FBRztRQUduQixJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7Q0FDRjtBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsTUFBYztJQUNyQyw2RUFBNkU7SUFDN0UsZ0ZBQWdGO0lBQ2hGLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztRQUM3RCxNQUFNLElBQUksY0FBYyxDQUN0Qiw2QkFBNkIsb0JBQW9CLFFBQVEsRUFDekQsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBWSxFQUFFLENBQUM7SUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFD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UUFDRCxNQUFNLEdBQUcsYUFBYSxDQUFDO1FBQ3ZCLE1BQU0sRUFBRSxDQUFDO0lBQ1gsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUNELENBQUMsSUFBSSxDQUFDLENBQUM7SUFDUCxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ25ELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQWM7SUFDeEMsOEVBQThFO0lBQzlFLDhFQUE4RTtJQUM5RSxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRva2VuaXplciBmb3IgdGhlIHBpcGVsaW5lLWJ1aWxkZXIgdGVtcGxhdGUgZ3JhbW1hci5cbiAqXG4gKiBHcmFtbWFyOlxuICogICBUZW1wbGF0ZSAgIDo9IChMaXRlcmFsIHwgRXhwcikqXG4gKiAgIEV4cHIgICAgICAgOj0gXCJ7e1wiIHdzIFBhdGggKHdzIEZpbHRlcik/IHdzIFwifX1cIlxuICogICBQYXRoICAgICAgIDo9IElkZW50aWZpZXIgKFwiLlwiIElkZW50aWZpZXIpKlxuICogICBJZGVudGlmaWVyIDo9IFthLXpBLVpfXVthLXpBLVowLTlfXXswLDYzfVxuICogICBGaWx0ZXIgICAgIDo9IFwifFwiIHdzIFwiZGVmYXVsdFwiIHdzIFwiOlwiIHdzIFF1b3RlZFxuICogICBRdW90ZWQgICAgIDo9IFwiJ1wiIC4uLiBcIidcIiB8IFwiXFxcIlwiIC4uLiBcIlxcXCJcIlxuICpcbiAqIGB7e3t7YCBpcyB0aGUgZXNjYXBlIHNlcXVlbmNlIGZvciBhIGxpdGVyYWwgYHt7YDsgdGhlIGB9fWAgdGhhdCBjbG9zZXMgaXQgaXNcbiAqIHRoZW4gbGl0ZXJhbCB0b28sIHNvIGB7e3t7IC5YIH19YCByZW5kZXJzIGB7eyAuWCB9fWAuXG4gKi9cblxuZXhwb3J0IGNvbnN0IE1BWF9GSUVMRF9TSVpFX0JZVEVTID0gNCAqIDEwMjQ7XG5leHBvcnQgY29uc3QgTUFYX1BBVEhfREVQVEggPSA1O1xuZXhwb3J0IGNvbnN0IE1BWF9JREVOVElGSUVSX0xFTkdUSCA9IDY0O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvdXJjZVBvc2l0aW9uIHtcbiAgbGluZTogbnVtYmVyO1xuICBjb2w6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXRlcmFsVG9rZW4ge1xuICBraW5kOiAnbGl0ZXJhbCc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHBvczogU291cmNlUG9zaXRpb247XG59XG5cbmV4cG9ydCB0eXBlIENvZXJjZUtpbmQgPSAnbnVtYmVyJyB8ICdib29sJyB8ICdqc29uJztcblxuZXhwb3J0IGludGVyZmFjZSBFeHByVG9rZW4ge1xuICBraW5kOiAnZXhwcic7XG4gIHBhdGg6IHN0cmluZ1tdOyAvLyBlLmcuIFsncGlwZWxpbmUnLCAnbWV0YWRhdGEnLCAnZW52J11cbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nOyAvLyB2YWx1ZSBmb3IgYHwgZGVmYXVsdDogJy4uLidgIGZpbHRlclxuICBjb2VyY2U/OiBDb2VyY2VLaW5kOyAvLyBgfCBudW1iZXJgLCBgfCBib29sYCwgYHwganNvbmBcbiAgc291cmNlOiBzdHJpbmc7IC8vIG9yaWdpbmFsIFwie3sgLi4uIH19XCIgdGV4dCAoZm9yIGVycm9yIG1lc3NhZ2VzKVxuICBwb3M6IFNvdXJjZVBvc2l0aW9uO1xufVxuXG5leHBvcnQgdHlwZSBUb2tlbiA9IExpdGVyYWxUb2tlbiB8IEV4cHJUb2tlbjtcblxuZXhwb3J0IGNsYXNzIFRva2VuaXplckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHBvczogU291cmNlUG9zaXRpb24sXG4gICkge1xuICAgIHN1cGVyKGAke21lc3NhZ2V9IGF0IGxpbmUgJHtwb3MubGluZX0sIGNvbCAke3Bvcy5jb2x9YCk7XG4gICAgdGhpcy5uYW1lID0gJ1Rva2VuaXplckVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFRva2VuaXplIGEgdGVtcGxhdGUgc291cmNlIHN0cmluZy4gTmV2ZXIgdGhyb3dzIG9uIHZhbGlkIGlucHV0O1xuICogdGhyb3dzIGBUb2tlbml6ZXJFcnJvcmAgd2l0aCBzb3VyY2UgcG9zaXRpb24gb24gbWFsZm9ybWVkIHRlbXBsYXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplKHNvdXJjZTogc3RyaW5nKTogVG9rZW5bXSB7XG4gIC8vIEJ5dGUgY291bnQsIG5vdCBgLmxlbmd0aGAgKFVURi0xNiBjb2RlIHVuaXRzKTogdGhlIGNhcCBpcyBzdGF0ZWQgaW4gYnl0ZXMsXG4gIC8vIGFuZCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgKGVtb2ppLCBub24tQVNDSUkpIHdvdWxkIG90aGVyd2lzZSBiZSB1bmRlcmNvdW50ZWQuXG4gIGlmIChCdWZmZXIuYnl0ZUxlbmd0aChzb3VyY2UsICd1dGY4JykgPiBNQVhfRklFTERfU0laRV9CWVRFUykge1xuICAgIHRocm93IG5ldyBUb2tlbml6ZXJFcnJvcihcbiAgICAgIGBGaWVsZCBleGNlZWRzIG1heCBzaXplIG9mICR7TUFYX0ZJRUxEX1NJWkVfQllURVN9IGJ5dGVzYCxcbiAgICAgIHsgbGluZTogMSwgY29sOiAxIH0sXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHRva2VuczogVG9rZW5bXSA9IFtdO1xuICBsZXQgaSA9IDA7XG4gIGxldCBsaW5lID0gMTtcbiAgbGV0IGNvbCA9IDE7XG4gIGxldCBsaXRlcmFsU3RhcnQgPSAwO1xuICBsZXQgbGl0ZXJhbFN0YXJ0UG9zOiBTb3VyY2VQb3NpdGlvbiA9IHsgbGluZTogMSwgY29sOiAxIH07XG5cbiAgY29uc3QgYWR2YW5jZSA9IChuOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgaWYgKHNvdXJjZVtpICsga10gPT09ICdcXG4nKSB7XG4gICAgICAgIGxpbmUrKztcbiAgICAgICAgY29sID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbCsrO1xuICAgICAgfVxuICAgIH1cbiAgICBpICs9IG47XG4gIH07XG5cbiAgY29uc3QgZmx1c2hMaXRlcmFsID0gKGVuZElkeDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgaWYgKGVuZElkeCA+IGxpdGVyYWxTdGFydCkge1xuICAgICAgLy8gVW5lc2NhcGUgYHt7e3tgIOKGkiBge3tgXG4gICAgICBjb25zdCByYXcgPSBzb3VyY2Uuc2xpY2UobGl0ZXJhbFN0YXJ0LCBlbmRJZHgpO1xuICAgICAgY29uc3QgdmFsdWUgPSByYXcucmVwbGFjZSgvXFx7XFx7XFx7XFx7L2csICd7eycpO1xuICAgICAgdG9rZW5zLnB1c2goeyBraW5kOiAnbGl0ZXJhbCcsIHZhbHVlLCBwb3M6IGxpdGVyYWxTdGFydFBvcyB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc3RhcnRMaXRlcmFsID0gKCk6IHZvaWQgPT4ge1xuICAgIGxpdGVyYWxTdGFydCA9IGk7XG4gICAgbGl0ZXJhbFN0YXJ0UG9zID0geyBsaW5lLCBjb2wgfTtcbiAgfTtcblxuICBzdGFydExpdGVyYWwoKTtcblxuICAvLyBIb3cgbWFueSBlc2NhcGVkIGB7e3t7YCBhcmUgc3RpbGwgd2FpdGluZyBmb3IgdGhlaXIgY2xvc2luZyBgfX1gLiBUaGUgZXNjYXBlXG4gIC8vIGV4aXN0cyBzbyBwbHVnaW4gY29tbWFuZHMgY2FuIGNhcnJ5IEdvIC8gSGVsbSAvIEdpdEh1Yi1zdHlsZSB0ZW1wbGF0ZXNcbiAgLy8gKGBkb2NrZXIgaW5zcGVjdCAtZiAne3t7ey5TdGF0ZS5TdGF0dXN9fSdgIOKGkiBge3suU3RhdGUuU3RhdHVzfX1gKSwgYnV0IGFueVxuICAvLyBgfX1gIG91dHNpZGUgYW4gZXhwcmVzc2lvbiB1c2VkIHRvIHRocm93IOKAlCBzbyB0aGUgZXNjYXBlIGNvdWxkIG9ubHkgZXZlclxuICAvLyBwcm9kdWNlIGFuIFVOQ0xPU0VEIGB7e2AsIGFuZCBldmVyeSByZWFsIHVzZSBvZiBpdCB3YXMgcmVqZWN0ZWQgYXQgdXBsb2FkXG4gIC8vIGFuZCBhdCBzeW50aC4gQSBgfX1gIHRoYXQgY2xvc2VzIGFuIGVzY2FwZWQgb3BlbiBpcyBsaXRlcmFsIHRleHQ7IGFuXG4gIC8vIHVubWF0Y2hlZCBvbmUgaXMgc3RpbGwgYW4gZXJyb3IsIHdoaWNoIGtlZXBzIGNhdGNoaW5nIGB7IHggfX1gIHR5cG9zLlxuICBsZXQgZXNjYXBlZE9wZW4gPSAwO1xuXG4gIHdoaWxlIChpIDwgc291cmNlLmxlbmd0aCkge1xuICAgIC8vIEVzY2FwZTogYHt7e3tgIOKGkiBsaXRlcmFsIGB7e2BcbiAgICBpZiAoc291cmNlLnN0YXJ0c1dpdGgoJ3t7e3snLCBpKSkge1xuICAgICAgYWR2YW5jZSg0KTtcbiAgICAgIGVzY2FwZWRPcGVuKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy8gRXhwcmVzc2lvbiBzdGFydFxuICAgIGlmIChzb3VyY2Uuc3RhcnRzV2l0aCgne3snLCBpKSkge1xuICAgICAgZmx1c2hMaXRlcmFsKGkpO1xuICAgICAgY29uc3QgZXhwclBvczogU291cmNlUG9zaXRpb24gPSB7IGxpbmUsIGNvbCB9O1xuICAgICAgYWR2YW5jZSgyKTtcbiAgICAgIGNvbnN0IGV4cHIgPSByZWFkRXhwcmVzc2lvbihzb3VyY2UsIGksIGxpbmUsIGNvbCk7XG4gICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgIGtpbmQ6ICdleHByJyxcbiAgICAgICAgcGF0aDogZXhwci5wYXRoLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGV4cHIuZGVmYXVsdFZhbHVlLFxuICAgICAgICBjb2VyY2U6IGV4cHIuY29lcmNlLFxuICAgICAgICBzb3VyY2U6IHNvdXJjZS5zbGljZShpIC0gMiwgZXhwci5lbmRJZHgpLFxuICAgICAgICBwb3M6IGV4cHJQb3MsXG4gICAgICB9KTtcbiAgICAgIGFkdmFuY2UoZXhwci5lbmRJZHggLSBpKTtcbiAgICAgIHN0YXJ0TGl0ZXJhbCgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIGB9fWAgb3V0c2lkZSBhbiBleHByZXNzaW9uOiB0aGUgY2xvc2Ugb2YgYW4gZXNjYXBlZCBge3t7e2AsIG9yIGEgc3RyYXkuXG4gICAgaWYgKHNvdXJjZS5zdGFydHNXaXRoKCd9fScsIGkpKSB7XG4gICAgICBpZiAoZXNjYXBlZE9wZW4gPiAwKSB7XG4gICAgICAgIGVzY2FwZWRPcGVuLS07XG4gICAgICAgIGFkdmFuY2UoMik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFRva2VuaXplckVycm9yKFwiVW5leHBlY3RlZCAnfX0nIG91dHNpZGUgZXhwcmVzc2lvblwiLCB7IGxpbmUsIGNvbCB9KTtcbiAgICB9XG4gICAgYWR2YW5jZSgxKTtcbiAgfVxuXG4gIGZsdXNoTGl0ZXJhbChpKTtcbiAgcmV0dXJuIHRva2Vucztcbn1cblxuaW50ZXJmYWNlIFBhcnNlZEV4cHIge1xuICBwYXRoOiBzdHJpbmdbXTtcbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuICBjb2VyY2U/OiBDb2VyY2VLaW5kO1xuICBlbmRJZHg6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gcmVhZEV4cHJlc3Npb24oXG4gIHNvdXJjZTogc3RyaW5nLFxuICBzdGFydElkeDogbnVtYmVyLFxuICBzdGFydExpbmU6IG51bWJlcixcbiAgc3RhcnRDb2w6IG51bWJlcixcbik6IFBhcnNlZEV4cHIge1xuICBsZXQgaSA9IHN0YXJ0SWR4O1xuICBsZXQgbGluZSA9IHN0YXJ0TGluZTtcbiAgbGV0IGNvbCA9IHN0YXJ0Q29sO1xuXG4gIGNvbnN0IHNraXBXcyA9ICgpOiB2b2lkID0+IHtcbiAgICB3aGlsZSAoaSA8IHNvdXJjZS5sZW5ndGggJiYgKHNvdXJjZVtpXSA9PT0gJyAnIHx8IHNvdXJjZVtpXSA9PT0gJ1xcdCcpKSB7XG4gICAgICBpKys7XG4gICAgICBjb2wrKztcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVhZElkZW50aWZpZXIgPSAoKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBzdGFydEkgPSBpO1xuICAgIGlmIChpID49IHNvdXJjZS5sZW5ndGggfHwgIS9bYS16QS1aX10vLnRlc3Qoc291cmNlW2ldISkpIHtcbiAgICAgIHRocm93IG5ldyBUb2tlbml6ZXJFcnJvcihcbiAgICAgICAgJ0V4cGVjdGVkIGlkZW50aWZpZXIgaW5zaWRlIHRlbXBsYXRlIGV4cHJlc3Npb24nLFxuICAgICAgICB7IGxpbmUsIGNvbCB9LFxuICAgICAgKTtcbiAgICB9XG4gICAgd2hpbGUgKGkgPCBzb3VyY2UubGVuZ3RoICYmIC9bYS16QS1aMC05X10vLnRlc3Qoc291cmNlW2ldISkpIHtcbiAgICAgIGkrKztcbiAgICAgIGNvbCsrO1xuICAgIH1cbiAgICBjb25zdCBpZGVudCA9IHNvdXJjZS5zbGljZShzdGFydEksIGkpO1xuICAgIGlmIChpZGVudC5sZW5ndGggPiBNQVhfSURFTlRJRklFUl9MRU5HVEgpIHtcbiAgICAgIHRocm93IG5ldyBUb2tlbml6ZXJFcnJvcihcbiAgICAgICAgYElkZW50aWZpZXIgZXhjZWVkcyBtYXggbGVuZ3RoIG9mICR7TUFYX0lERU5USUZJRVJfTEVOR1RIfWAsXG4gICAgICAgIHsgbGluZSwgY29sOiBjb2wgLSBpZGVudC5sZW5ndGggfSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBpZGVudDtcbiAgfTtcblxuICBjb25zdCByZWFkUXVvdGVkID0gKCk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgcXVvdGUgPSBzb3VyY2VbaV07XG4gICAgaWYgKHF1b3RlICE9PSAnXCInICYmIHF1b3RlICE9PSBcIidcIikge1xuICAgICAgdGhyb3cgbmV3IFRva2VuaXplckVycm9yKCdFeHBlY3RlZCBxdW90ZWQgc3RyaW5nJywgeyBsaW5lLCBjb2wgfSk7XG4gICAgfVxuICAgIGkrKzsgY29sKys7XG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgd2hpbGUgKGkgPCBzb3VyY2UubGVuZ3RoICYmIHNvdXJjZVtpXSAhPT0gcXVvdGUpIHtcbiAgICAgIGlmIChzb3VyY2VbaV0gPT09ICdcXFxcJykge1xuICAgICAgICBjb25zdCBuZXh0ID0gc291cmNlW2kgKyAxXTtcbiAgICAgICAgaWYgKG5leHQgPT09ICdcXFxcJyB8fCBuZXh0ID09PSBxdW90ZSkge1xuICAgICAgICAgIHBhcnRzLnB1c2gobmV4dCk7XG4gICAgICAgICAgaSArPSAyO1xuICAgICAgICAgIGNvbCArPSAyO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUb2tlbml6ZXJFcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBlc2NhcGUgJ1xcXFwke25leHQgPz8gJyd9JyBpbiBxdW90ZWQgc3RyaW5nYCxcbiAgICAgICAgICB7IGxpbmUsIGNvbCB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZVtpXSA9PT0gJ1xcbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRva2VuaXplckVycm9yKCdVbnRlcm1pbmF0ZWQgcXVvdGVkIHN0cmluZycsIHsgbGluZSwgY29sIH0pO1xuICAgICAgfVxuICAgICAgcGFydHMucHVzaChzb3VyY2VbaV0hKTtcbiAgICAgIGkrKzsgY29sKys7XG4gICAgfVxuICAgIGlmIChpID49IHNvdXJjZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUb2tlbml6ZXJFcnJvcignVW50ZXJtaW5hdGVkIHF1b3RlZCBzdHJpbmcnLCB7IGxpbmUsIGNvbCB9KTtcbiAgICB9XG4gICAgaSsrOyBjb2wrKzsgLy8gY29uc3VtZSBjbG9zaW5nIHF1b3RlXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJycpO1xuICB9O1xuXG4gIHNraXBXcygpO1xuICBjb25zdCBwYXRoOiBzdHJpbmdbXSA9IFtyZWFkSWRlbnRpZmllcigpXTtcbiAgd2hpbGUgKGkgPCBzb3VyY2UubGVuZ3RoICYmIHNvdXJjZVtpXSA9PT0gJy4nKSB7XG4gICAgaSsrOyBjb2wrKztcbiAgICBwYXRoLnB1c2gocmVhZElkZW50aWZpZXIoKSk7XG4gICAgaWYgKHBhdGgubGVuZ3RoID4gTUFYX1BBVEhfREVQVEgpIHtcbiAgICAgIHRocm93IG5ldyBUb2tlbml6ZXJFcnJvcihcbiAgICAgICAgYFBhdGggZGVwdGggZXhjZWVkcyBtYXggb2YgJHtNQVhfUEFUSF9ERVBUSH1gLFxuICAgICAgICB7IGxpbmUsIGNvbCB9LFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgc2tpcFdzKCk7XG5cbiAgbGV0IGRlZmF1bHRWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsZXQgY29lcmNlOiBDb2VyY2VLaW5kIHwgdW5kZWZpbmVkO1xuXG4gIC8vIEZpbHRlcnMgY2hhaW46IGB8IGRlZmF1bHQ6ICd4JyB8IG51bWJlcmAsIGB8IGJvb2xgLCBgfCBqc29uYCwgZXRjLlxuICAvLyAtIGBkZWZhdWx0YCB0YWtlcyBhIHF1b3RlZCBhcmd1bWVudCDigJQgYXBwbGllZCBmaXJzdCAoYmVmb3JlIGNvZXJjaW9uKVxuICAvLyAtIGBudW1iZXJgLCBgYm9vbGAsIGBqc29uYCBhcmUgYXJndW1lbnQtbGVzcyBjb2VyY2lvbiBmaWx0ZXJzIOKAlCBhcHBsaWVkIGxhc3RcbiAgd2hpbGUgKHNvdXJjZVtpXSA9PT0gJ3wnKSB7XG4gICAgaSsrOyBjb2wrKztcbiAgICBza2lwV3MoKTtcblxuICAgIGlmIChzb3VyY2Uuc3RhcnRzV2l0aCgnZGVmYXVsdCcsIGkpKSB7XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRva2VuaXplckVycm9yKFwiJ2RlZmF1bHQnIGZpbHRlciBtYXkgb25seSBhcHBlYXIgb25jZVwiLCB7IGxpbmUsIGNvbCB9KTtcbiAgICAgIH1cbiAgICAgIGkgKz0gJ2RlZmF1bHQnLmxlbmd0aDtcbiAgICAgIGNvbCArPSAnZGVmYXVsdCcubGVuZ3RoO1xuICAgICAgc2tpcFdzKCk7XG4gICAgICBpZiAoc291cmNlW2ldICE9PSAnOicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRva2VuaXplckVycm9yKFwiRXhwZWN0ZWQgJzonIGFmdGVyICdkZWZhdWx0J1wiLCB7IGxpbmUsIGNvbCB9KTtcbiAgICAgIH1cbiAgICAgIGkrKzsgY29sKys7XG4gICAgICBza2lwV3MoKTtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IHJlYWRRdW90ZWQoKTtcbiAgICAgIHNraXBXcygpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IG1hdGNoZWRDb2VyY2U6IENvZXJjZUtpbmQgfCBudWxsID0gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGtpbmQgb2YgWydudW1iZXInLCAnYm9vbCcsICdqc29uJ10gYXMgY29uc3QpIHtcbiAgICAgIGlmIChzb3VyY2Uuc3RhcnRzV2l0aChraW5kLCBpKSkge1xuICAgICAgICAvLyBFbnN1cmUgaWRlbnRpZmllciBib3VuZGFyeSDigJQgYG51bWJlcmlzaGAgbXVzdCBub3QgbWF0Y2ggYG51bWJlcmBcbiAgICAgICAgY29uc3QgbmV4dCA9IHNvdXJjZVtpICsga2luZC5sZW5ndGhdO1xuICAgICAgICBpZiAoIW5leHQgfHwgIS9bYS16QS1aMC05X10vLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICBtYXRjaGVkQ29lcmNlID0ga2luZDtcbiAgICAgICAgICBpICs9IGtpbmQubGVuZ3RoO1xuICAgICAgICAgIGNvbCArPSBraW5kLmxlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghbWF0Y2hlZENvZXJjZSkge1xuICAgICAgdGhyb3cgbmV3IFRva2VuaXplckVycm9yKFxuICAgICAgICBcIlVua25vd24gZmlsdGVyIOKAlCBzdXBwb3J0ZWQ6ICdkZWZhdWx0JywgJ251bWJlcicsICdib29sJywgJ2pzb24nXCIsXG4gICAgICAgIHsgbGluZSwgY29sIH0sXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY29lcmNlKSB7XG4gICAgICB0aHJvdyBuZXcgVG9rZW5pemVyRXJyb3IoJ09ubHkgb25lIGNvZXJjaW9uIGZpbHRlciBpcyBhbGxvd2VkIHBlciBleHByZXNzaW9uJywgeyBsaW5lLCBjb2wgfSk7XG4gICAgfVxuICAgIGNvZXJjZSA9IG1hdGNoZWRDb2VyY2U7XG4gICAgc2tpcFdzKCk7XG4gIH1cblxuICBpZiAoIXNvdXJjZS5zdGFydHNXaXRoKCd9fScsIGkpKSB7XG4gICAgdGhyb3cgbmV3IFRva2VuaXplckVycm9yKFwiRXhwZWN0ZWQgJ319J1wiLCB7IGxpbmUsIGNvbCB9KTtcbiAgfVxuICBpICs9IDI7XG4gIHJldHVybiB7IHBhdGgsIGRlZmF1bHRWYWx1ZSwgY29lcmNlLCBlbmRJZHg6IGkgfTtcbn1cblxuLyoqXG4gKiBDb252ZW5pZW5jZTogcmV0dXJucyB0cnVlIGlmIHRoZSBzb3VyY2UgY29udGFpbnMgYW55IHRlbXBsYXRlcy5cbiAqIFVzZWQgYXMgYSBmYXN0LXBhdGggdG8gc2tpcCB0b2tlbml6YXRpb24gZm9yIHN0cmluZ3MgdGhhdCBhcmUgb2J2aW91c2x5IGxpdGVyYWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNUZW1wbGF0ZShzb3VyY2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBOb3QgY29tcGxldGVseSBhY2N1cmF0ZSAoYSBsb25lIGB7e3t7YCB3b3VsZCByZXR1cm4gdHJ1ZSkgYnV0IHRoYXQncyBmaW5lIOKAlFxuICAvLyB0b2tlbml6ZSgpIHdpbGwgcHJvZHVjZSBhIGxpdGVyYWwtb25seSB0b2tlbiBsaXN0IGFuZCByb3VuZC10cmlwIGNvcnJlY3RseS5cbiAgcmV0dXJuIHNvdXJjZS5pbmNsdWRlcygne3snKTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -33,8 +33,8 @@
33
33
  "dependencies": {
34
34
  "axios": "1.19.0",
35
35
  "jsonwebtoken": "9.0.3",
36
- "@pipeline-builder/api-core": "4.1.10",
37
- "@pipeline-builder/pipeline-data": "4.1.13"
36
+ "@pipeline-builder/api-core": "4.1.13",
37
+ "@pipeline-builder/pipeline-data": "4.1.15"
38
38
  },
39
39
  "keywords": [
40
40
  "ci-cd",
@@ -90,7 +90,7 @@
90
90
  "access": "public",
91
91
  "registry": "https://registry.npmjs.org/"
92
92
  },
93
- "version": "4.1.13",
93
+ "version": "4.1.15",
94
94
  "bugs": {
95
95
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
96
96
  },