token-injectable-docker-builder 2.0.1 → 2.0.3

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/.jsii CHANGED
@@ -8567,7 +8567,7 @@
8567
8567
  },
8568
8568
  "locationInModule": {
8569
8569
  "filename": "src/builder.ts",
8570
- "line": 219
8570
+ "line": 241
8571
8571
  },
8572
8572
  "parameters": [
8573
8573
  {
@@ -8598,13 +8598,13 @@
8598
8598
  "methods": [
8599
8599
  {
8600
8600
  "docs": {
8601
- "remarks": "The consumer's stack must have `crossRegionReferences: true` when\n`region` differs from the builder's region.",
8601
+ "remarks": "The consumer's stack must have `crossRegionReferences: true` when\n`region` differs from the builder's region.\n\nCross-region consumers receive `imageTagPlain` (a synth-time string)\nrather than `imageTag` (a CFN token). Using the token would cause CDK to\nauto-create a `CrossRegionExportWriter` whose safety check wedges every\ntime the tag value changes — i.e. every real code change.",
8602
8602
  "stability": "stable",
8603
8603
  "summary": "Import the replicated repository as an ECS-compatible `ContainerImage` in a consumer scope (typically a stack in `region`)."
8604
8604
  },
8605
8605
  "locationInModule": {
8606
8606
  "filename": "src/builder.ts",
8607
- "line": 392
8607
+ "line": 422
8608
8608
  },
8609
8609
  "name": "containerImageFor",
8610
8610
  "parameters": [
@@ -8629,13 +8629,13 @@
8629
8629
  },
8630
8630
  {
8631
8631
  "docs": {
8632
- "remarks": "The consumer's stack must have `crossRegionReferences: true` when\n`region` differs from the builder's region.",
8632
+ "remarks": "The consumer's stack must have `crossRegionReferences: true` when\n`region` differs from the builder's region.\n\nCross-region consumers receive `imageTagPlain` (a synth-time string)\nrather than `imageTag` (a CFN token). Using the token would cause CDK to\nauto-create a `CrossRegionExportWriter` whose safety check wedges every\ntime the tag value changes — i.e. every real code change.",
8633
8633
  "stability": "stable",
8634
8634
  "summary": "Import the replicated repository as a Lambda-compatible `DockerImageCode` in a consumer scope (typically a stack in `region`)."
8635
8635
  },
8636
8636
  "locationInModule": {
8637
8637
  "filename": "src/builder.ts",
8638
- "line": 406
8638
+ "line": 440
8639
8639
  },
8640
8640
  "name": "dockerImageCodeFor",
8641
8641
  "parameters": [
@@ -8666,7 +8666,7 @@
8666
8666
  },
8667
8667
  "locationInModule": {
8668
8668
  "filename": "src/builder.ts",
8669
- "line": 380
8669
+ "line": 405
8670
8670
  },
8671
8671
  "name": "repositoryUriFor",
8672
8672
  "parameters": [
@@ -8718,20 +8718,36 @@
8718
8718
  },
8719
8719
  {
8720
8720
  "docs": {
8721
- "remarks": "available at deploy time).",
8721
+ "remarks": "Safe to use anywhere the consumer is in the **same region** as the\nbuilder (same stack or different stack). For cross-region consumers\nuse `imageTagPlain` — `imageTag` would trigger CDK's\n`CrossRegionExportWriter` and wedge on any tag change.",
8722
8722
  "stability": "stable",
8723
- "summary": "The resolved image tag (CFN token;"
8723
+ "summary": "The resolved image tag (CFN token; available at deploy time)."
8724
8724
  },
8725
8725
  "immutable": true,
8726
8726
  "locationInModule": {
8727
8727
  "filename": "src/builder.ts",
8728
- "line": 213
8728
+ "line": 220
8729
8729
  },
8730
8730
  "name": "imageTag",
8731
8731
  "type": {
8732
8732
  "primitive": "string"
8733
8733
  }
8734
8734
  },
8735
+ {
8736
+ "docs": {
8737
+ "remarks": "Same value as `imageTag` but resolved immediately — useful for cross-region\nconsumers, where the CFN-token form would trigger CDK to auto-create a\n`CrossRegionExportWriter`. That writer has an over-strict safety check\nthat fails any update where the tag value changes (i.e. every real code\nchange), wedging the stack in `UPDATE_ROLLBACK_FAILED`.\n\n`containerImageFor` and `dockerImageCodeFor` use this string automatically\nwhen the consumer region differs from the primary region, so callers\nnormally don't reference this property directly.",
8738
+ "stability": "stable",
8739
+ "summary": "The deterministic image tag as a plain synth-time string (no CFN token)."
8740
+ },
8741
+ "immutable": true,
8742
+ "locationInModule": {
8743
+ "filename": "src/builder.ts",
8744
+ "line": 235
8745
+ },
8746
+ "name": "imageTagPlain",
8747
+ "type": {
8748
+ "primitive": "string"
8749
+ }
8750
+ },
8735
8751
  {
8736
8752
  "docs": {
8737
8753
  "stability": "stable",
@@ -9303,6 +9319,6 @@
9303
9319
  "symbolId": "src/provider:TokenInjectableDockerBuilderProviderProps"
9304
9320
  }
9305
9321
  },
9306
- "version": "2.0.1",
9307
- "fingerprint": "62YhBtigRm2kGCSfO10HLVPH3uW3jKlwknU+k7bWMX4="
9322
+ "version": "2.0.3",
9323
+ "fingerprint": "d8zYSGIjkv7F2RPmQFFF+EahMjwkDJ652Rh6hNwiV+k="
9308
9324
  }
package/API.md CHANGED
@@ -92,6 +92,11 @@ Import the replicated repository as an ECS-compatible `ContainerImage` in a cons
92
92
  The consumer's stack must have `crossRegionReferences: true` when
93
93
  `region` differs from the builder's region.
94
94
 
95
+ Cross-region consumers receive `imageTagPlain` (a synth-time string)
96
+ rather than `imageTag` (a CFN token). Using the token would cause CDK to
97
+ auto-create a `CrossRegionExportWriter` whose safety check wedges every
98
+ time the tag value changes — i.e. every real code change.
99
+
95
100
  ###### `scope`<sup>Required</sup> <a name="scope" id="token-injectable-docker-builder.TokenInjectableDockerBuilder.containerImageFor.parameter.scope"></a>
96
101
 
97
102
  - *Type:* constructs.Construct
@@ -115,6 +120,11 @@ Import the replicated repository as a Lambda-compatible `DockerImageCode` in a c
115
120
  The consumer's stack must have `crossRegionReferences: true` when
116
121
  `region` differs from the builder's region.
117
122
 
123
+ Cross-region consumers receive `imageTagPlain` (a synth-time string)
124
+ rather than `imageTag` (a CFN token). Using the token would cause CDK to
125
+ auto-create a `CrossRegionExportWriter` whose safety check wedges every
126
+ time the tag value changes — i.e. every real code change.
127
+
118
128
  ###### `scope`<sup>Required</sup> <a name="scope" id="token-injectable-docker-builder.TokenInjectableDockerBuilder.dockerImageCodeFor.parameter.scope"></a>
119
129
 
120
130
  - *Type:* constructs.Construct
@@ -191,7 +201,8 @@ Any object.
191
201
  | <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
192
202
  | <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.property.containerImage">containerImage</a></code> | <code>aws-cdk-lib.aws_ecs.ContainerImage</code> | ECS-compatible container image reference (primary region). |
193
203
  | <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.property.dockerImageCode">dockerImageCode</a></code> | <code>aws-cdk-lib.aws_lambda.DockerImageCode</code> | Lambda-compatible DockerImageCode reference (primary region). |
194
- | <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.property.imageTag">imageTag</a></code> | <code>string</code> | The resolved image tag (CFN token; |
204
+ | <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.property.imageTag">imageTag</a></code> | <code>string</code> | The resolved image tag (CFN token; available at deploy time). |
205
+ | <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.property.imageTagPlain">imageTagPlain</a></code> | <code>string</code> | The deterministic image tag as a plain synth-time string (no CFN token). |
195
206
  | <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.property.repositoryName">repositoryName</a></code> | <code>string</code> | The ECR repository name — preserved across replica regions. |
196
207
 
197
208
  ---
@@ -240,9 +251,34 @@ public readonly imageTag: string;
240
251
 
241
252
  - *Type:* string
242
253
 
243
- The resolved image tag (CFN token;
254
+ The resolved image tag (CFN token; available at deploy time).
255
+
256
+ Safe to use anywhere the consumer is in the **same region** as the
257
+ builder (same stack or different stack). For cross-region consumers
258
+ use `imageTagPlain` — `imageTag` would trigger CDK's
259
+ `CrossRegionExportWriter` and wedge on any tag change.
260
+
261
+ ---
262
+
263
+ ##### `imageTagPlain`<sup>Required</sup> <a name="imageTagPlain" id="token-injectable-docker-builder.TokenInjectableDockerBuilder.property.imageTagPlain"></a>
264
+
265
+ ```typescript
266
+ public readonly imageTagPlain: string;
267
+ ```
268
+
269
+ - *Type:* string
270
+
271
+ The deterministic image tag as a plain synth-time string (no CFN token).
272
+
273
+ Same value as `imageTag` but resolved immediately — useful for cross-region
274
+ consumers, where the CFN-token form would trigger CDK to auto-create a
275
+ `CrossRegionExportWriter`. That writer has an over-strict safety check
276
+ that fails any update where the tag value changes (i.e. every real code
277
+ change), wedging the stack in `UPDATE_ROLLBACK_FAILED`.
244
278
 
245
- available at deploy time).
279
+ `containerImageFor` and `dockerImageCodeFor` use this string automatically
280
+ when the consumer region differs from the primary region, so callers
281
+ normally don't reference this property directly.
246
282
 
247
283
  ---
248
284
 
package/lib/build-spec.js CHANGED
@@ -61,13 +61,30 @@ function buildBuildSpec(opts) {
61
61
  const platformFlag = `--platform ${platform}`;
62
62
  // --provenance=false --sbom=false: Docker Buildx v0.10+ adds attestations by default,
63
63
  // producing OCI image indexes that AWS Lambda does not support.
64
- // ignore-error=true on --cache-from: on the very first build, the
65
- // `:cache` tag doesn't exist yet and a strict cache-from would fail
66
- // with `invalid response status 404`. ignore-error tells buildx to
67
- // treat a missing cache as "no cache available" instead of a fatal error.
64
+ // $CACHE_FROM_FLAG is set in pre_build: empty on first build (when
65
+ // the `:cache` tag doesn't exist yet buildx 0.20 still rejects this
66
+ // even with `ignore-error=true` at the importer-configure step),
67
+ // populated on subsequent builds so cache is reused. This avoids the
68
+ // `failed to configure registry cache importer: ...:cache: not found`
69
+ // / `invalid response status 404` crash on the first deploy.
68
70
  const buildCommand = cacheDisabled
69
71
  ? `docker build ${platformFlag} ${dockerFileFlag} ${buildArgsString} -t $ECR_REPO_URI:${imageTag} $CODEBUILD_SRC_DIR`
70
- : `docker buildx build --push ${platformFlag} --provenance=false --sbom=false --cache-from type=registry,ref=$ECR_REPO_URI:cache,ignore-error=true --cache-to type=registry,ref=$ECR_REPO_URI:cache,mode=max,image-manifest=true ${dockerFileFlag} ${buildArgsString} -t $ECR_REPO_URI:${imageTag} $CODEBUILD_SRC_DIR`;
72
+ : `docker buildx build --push ${platformFlag} --provenance=false --sbom=false $CACHE_FROM_FLAG --cache-to type=registry,ref=$ECR_REPO_URI:cache,mode=max,image-manifest=true ${dockerFileFlag} ${buildArgsString} -t $ECR_REPO_URI:${imageTag} $CODEBUILD_SRC_DIR`;
73
+ // Pre-build cache probe: only attach --cache-from when the :cache tag
74
+ // already exists in this repo. Skipped when caching is disabled entirely.
75
+ const cacheProbeCommands = cacheDisabled
76
+ ? []
77
+ : [
78
+ 'echo "Probing for existing :cache tag in ECR..."',
79
+ 'export ECR_REPO_NAME=$(echo $ECR_REPO_URI | cut -d/ -f2-)',
80
+ 'if aws ecr describe-images --repository-name $ECR_REPO_NAME --image-ids imageTag=cache --region $AWS_DEFAULT_REGION >/dev/null 2>&1; then '
81
+ + 'export CACHE_FROM_FLAG="--cache-from type=registry,ref=$ECR_REPO_URI:cache"; '
82
+ + 'echo "Cache tag exists, will pull cache from registry."; '
83
+ + 'else '
84
+ + 'export CACHE_FROM_FLAG=""; '
85
+ + 'echo "No :cache tag yet (first build); skipping --cache-from."; '
86
+ + 'fi',
87
+ ];
71
88
  return {
72
89
  version: '0.2',
73
90
  phases: {
@@ -86,6 +103,7 @@ function buildBuildSpec(opts) {
86
103
  'export ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)',
87
104
  'echo "Logging into Amazon ECR..."',
88
105
  'aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com',
106
+ ...cacheProbeCommands,
89
107
  ],
90
108
  },
91
109
  build: {
@@ -105,4 +123,4 @@ function buildBuildSpec(opts) {
105
123
  },
106
124
  };
107
125
  }
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZC1zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBU0EsMENBd0JDO0FBaUJELHdDQXNGQztBQXhJRCx5QkFBeUI7QUFDekIsNkJBQTZCO0FBRTdCOzs7OztHQUtHO0FBQ0gsU0FBZ0IsZUFBZSxDQUM3QixVQUFrQixFQUNsQixVQUFrQixFQUNsQixPQUE2QjtJQUU3QixJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUM7SUFDeEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNoRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDOUQsU0FBUyxHQUFHLFdBQVc7aUJBQ3BCLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ1gsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBQzFCLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsU0FBUztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRWpDLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0QsTUFB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dGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG4vKipcbiAqIFBhcnNlIGEgLmRvY2tlcmlnbm9yZSBmaWxlIGF0IGBzb3VyY2VQYXRoYCAoaWYgcHJlc2VudCkgYW5kIGNvbWJpbmUgaXQgd2l0aFxuICogYSB1c2VyLXN1cHBsaWVkIGV4Y2x1ZGUgbGlzdC4gVGhlIERvY2tlcmZpbGUgaXRzZWxmIGlzIG5ldmVyIGV4Y2x1ZGVkIOKAlFxuICogYC5kb2NrZXJpZ25vcmVgIHBhdHRlcm5zIG1hdGNoaW5nIGBkb2NrZXJGaWxlYCBhcmUgZmlsdGVyZWQgb3V0IHNvIHRoZVxuICogUzMgYXNzZXQgYWx3YXlzIGNvbnRhaW5zIHRoZSBEb2NrZXJmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUV4Y2x1ZGVzKFxuICBzb3VyY2VQYXRoOiBzdHJpbmcsXG4gIGRvY2tlckZpbGU6IHN0cmluZyxcbiAgZXhjbHVkZTogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGxldCBlZmZlY3RpdmUgPSBleGNsdWRlO1xuICBpZiAoIWVmZmVjdGl2ZSkge1xuICAgIGNvbnN0IGRvY2tlcmlnbm9yZVBhdGggPSBwYXRoLmpvaW4oc291cmNlUGF0aCwgJy5kb2NrZXJpZ25vcmUnKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhkb2NrZXJpZ25vcmVQYXRoKSkge1xuICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZG9ja2VyaWdub3JlUGF0aCwgJ3V0ZjgnKTtcbiAgICAgIGVmZmVjdGl2ZSA9IGZpbGVDb250ZW50XG4gICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpXG4gICAgICAgIC5maWx0ZXIoKGxpbmUpID0+IGxpbmUubGVuZ3RoID4gMCAmJiAhbGluZS5zdGFydHNXaXRoKCcjJykpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZWZmZWN0aXZlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIHJldHVybiBlZmZlY3RpdmUuZmlsdGVyKChwYXR0ZXJuKSA9PiB7XG4gICAgY29uc3QgZXNjYXBlZCA9IHBhdHRlcm4ucmVwbGFjZSgvWy4rXiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHtlc2NhcGVkLnJlcGxhY2UoL1xcKi9nLCAnLionKS5yZXBsYWNlKC9cXD8vZywgJy4nKX0kYCwgJ2knKTtcbiAgICByZXR1cm4gIXJlZ2V4LnRlc3QoZG9ja2VyRmlsZSk7XG4gIH0pO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkU3BlY09wdGlvbnMge1xuICByZWFkb25seSBpbWFnZVRhZzogc3RyaW5nO1xuICByZWFkb25seSBkb2NrZXJGaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBidWlsZEFyZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICByZWFkb25seSBkb2NrZXJMb2dpblNlY3JldEFybj86IHN0cmluZztcbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmRzPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IHByZUJ1aWxkQ29tbWFuZHM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgY2FjaGVEaXNhYmxlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcGxhdGZvcm06ICdsaW51eC9hbWQ2NCcgfCAnbGludXgvYXJtNjQnO1xufVxuXG4vKipcbiAqIEFzc2VtYmxlIHRoZSBwbGFpbiBidWlsZHNwZWMgb2JqZWN0IHRoYXQgdGhlIGNvbnN0cnVjdCBwYXNzZXMgdG9cbiAqIGBCdWlsZFNwZWMuZnJvbU9iamVjdGAuIFB1cmUgZnVuY3Rpb24g4oCUIGVhc3kgdG8gdW5pdCB0ZXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRCdWlsZFNwZWMob3B0czogQnVpbGRTcGVjT3B0aW9ucyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3Qge1xuICAgIGltYWdlVGFnLFxuICAgIGRvY2tlckZpbGUsXG4gICAgYnVpbGRBcmdzLFxuICAgIGRvY2tlckxvZ2luU2VjcmV0QXJuLFxuICAgIGluc3RhbGxDb21tYW5kcyxcbiAgICBwcmVCdWlsZENvbW1hbmRzLFxuICAgIGNhY2hlRGlzYWJsZWQsXG4gICAgcGxhdGZvcm0sXG4gIH0gPSBvcHRzO1xuXG4gIGNvbnN0IGJ1aWxkQXJnc1N0cmluZyA9IGJ1aWxkQXJnc1xuICAgID8gT2JqZWN0LmVudHJpZXMoYnVpbGRBcmdzKVxuICAgICAgLm1hcCgoW2ssIHZdKSA9PiBgLS1idWlsZC1hcmcgJHtrfT0ke3Z9YClcbiAgICAgIC5qb2luKCcgJylcbiAgICA6ICcnO1xuXG4gIGNvbnN0IGRvY2tlckZpbGVGbGFnID0gZG9ja2VyRmlsZSA/IGAtZiAkQ09ERUJVSUxEX1NSQ19ESVIvJHtkb2NrZXJGaWxlfWAgOiAnJztcblxuICBjb25zdCBkb2NrZXJMb2dpbkNvbW1hbmRzID0gZG9ja2VyTG9naW5TZWNyZXRBcm5cbiAgICA/IFtcbiAgICAgICdlY2hvIFwiUmV0cmlldmluZyBEb2NrZXIgY3JlZGVudGlhbHMuLi5cIicsXG4gICAgICAnYXB0LWdldCB1cGRhdGUgLXkgJiYgYXB0LWdldCBpbnN0YWxsIC15IGpxJyxcbiAgICAgIGBET0NLRVJfVVNFUk5BTUU9JChhd3Mgc2VjcmV0c21hbmFnZXIgZ2V0LXNlY3JldC12YWx1ZSAtLXNlY3JldC1pZCAke2RvY2tlckxvZ2luU2VjcmV0QXJufSAtLXF1ZXJ5IFNlY3JldFN0cmluZyAtLW91dHB1dCB0ZXh0IHwganEgLXIgLnVzZXJuYW1lKWAsXG4gICAgICBgRE9DS0VSX1BBU1NXT1JEPSQoYXdzIHNlY3JldHNtYW5hZ2VyIGdldC1zZWNyZXQtdmFsdWUgLS1zZWNyZXQtaWQgJHtkb2NrZXJMb2dpblNlY3JldEFybn0gLS1xdWVyeSBTZWNyZXRTdHJpbmcgLS1vdXRwdXQgdGV4dCB8IGpxIC1yIC5wYXNzd29yZClgLFxuICAgICAgJ2VjaG8gXCJMb2dnaW5nIGluIHRvIERvY2tlciBIdWIuLi5cIicsXG4gICAgICAnZWNobyAkRE9DS0VSX1BBU1NXT1JEIHwgZG9ja2VyIGxvZ2luIC0tdXNlcm5hbWUgJERPQ0tFUl9VU0VSTkFNRSAtLXBhc3N3b3JkLXN0ZGluJyxcbiAgICBdXG4gICAgOiBbJ2VjaG8gXCJObyBEb2NrZXIgY3JlZGVudGlhbHMuIFNraXBwaW5nIERvY2tlciBIdWIgbG9naW4uXCInXTtcblxuICBjb25zdCBidWlsZHhJbnN0YWxsQ29tbWFuZHMgPSBjYWNoZURpc2FibGVkXG4gICAgPyBbXVxuICAgIDogW1xuICAgICAgJ2VjaG8gXCJTZXR0aW5nIHVwIERvY2tlciBidWlsZHggZm9yIEVDUiBsYXllciBjYWNoZS4uLlwiJyxcbiAgICAgICdkb2NrZXIgYnVpbGR4IGNyZWF0ZSAtLWRyaXZlciBkb2NrZXItY29udGFpbmVyIC0tbmFtZSBlY3ItY2FjaGUtYnVpbGRlciAtLXVzZSAyPi9kZXYvbnVsbCB8fCBkb2NrZXIgYnVpbGR4IHVzZSBlY3ItY2FjaGUtYnVpbGRlcicsXG4gICAgXTtcblxuICBjb25zdCBwbGF0Zm9ybUZsYWcgPSBgLS1wbGF0Zm9ybSAke3BsYXRmb3JtfWA7XG5cbiAgLy8gLS1wcm92ZW5hbmNlPWZhbHNlIC0tc2JvbT1mYWxzZTogRG9ja2VyIEJ1aWxkeCB2MC4xMCsgYWRkcyBhdHRlc3RhdGlvbnMgYnkgZGVmYXVsdCxcbiAgLy8gcHJvZHVjaW5nIE9DSSBpbWFnZSBpbmRleGVzIHRoYXQgQVdTIExhbWJkYSBkb2VzIG5vdCBzdXBwb3J0LlxuICAvLyBpZ25vcmUtZXJyb3I9dHJ1ZSBvbiAtLWNhY2hlLWZyb206IG9uIHRoZSB2ZXJ5IGZpcnN0IGJ1aWxkLCB0aGVcbiAgLy8gYDpjYWNoZWAgdGFnIGRvZXNuJ3QgZXhpc3QgeWV0IGFuZCBhIHN0cmljdCBjYWNoZS1mcm9tIHdvdWxkIGZhaWxcbiAgLy8gd2l0aCBgaW52YWxpZCByZXNwb25zZSBzdGF0dXMgNDA0YC4gaWdub3JlLWVycm9yIHRlbGxzIGJ1aWxkeCB0b1xuICAvLyB0cmVhdCBhIG1pc3NpbmcgY2FjaGUgYXMgXCJubyBjYWNoZSBhdmFpbGFibGVcIiBpbnN0ZWFkIG9mIGEgZmF0YWwgZXJyb3IuXG4gIGNvbnN0IGJ1aWxkQ29tbWFuZCA9IGNhY2hlRGlzYWJsZWRcbiAgICA/IGBkb2NrZXIgYnVpbGQgJHtwbGF0Zm9ybUZsYWd9ICR7ZG9ja2VyRmlsZUZsYWd9ICR7YnVpbGRBcmdzU3RyaW5nfSAtdCAkRUNSX1JFUE9fVVJJOiR7aW1hZ2VUYWd9ICRDT0RFQlVJTERfU1JDX0RJUmBcbiAgICA6IGBkb2NrZXIgYnVpbGR4IGJ1aWxkIC0tcHVzaCAke3BsYXRmb3JtRmxhZ30gLS1wcm92ZW5hbmNlPWZhbHNlIC0tc2JvbT1mYWxzZSAtLWNhY2hlLWZyb20gdHlwZT1yZWdpc3RyeSxyZWY9JEVDUl9SRVBPX1VSSTpjYWNoZSxpZ25vcmUtZXJyb3I9dHJ1ZSAtLWNhY2hlLXRvIHR5cGU9cmVnaXN0cnkscmVmPSRFQ1JfUkVQT19VUkk6Y2FjaGUsbW9kZT1tYXgsaW1hZ2UtbWFuaWZlc3Q9dHJ1ZSAke2RvY2tlckZpbGVGbGFnfSAke2J1aWxkQXJnc1N0cmluZ30gLXQgJEVDUl9SRVBPX1VSSToke2ltYWdlVGFnfSAkQ09ERUJVSUxEX1NSQ19ESVJgO1xuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogJzAuMicsXG4gICAgcGhhc2VzOiB7XG4gICAgICBpbnN0YWxsOiB7XG4gICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgJ2VjaG8gXCJCZWdpbm5pbmcgaW5zdGFsbCBwaGFzZS4uLlwiJyxcbiAgICAgICAgICAuLi4oaW5zdGFsbENvbW1hbmRzID8/IFtdKSxcbiAgICAgICAgICAuLi5idWlsZHhJbnN0YWxsQ29tbWFuZHMsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgcHJlX2J1aWxkOiB7XG4gICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgLi4uKHByZUJ1aWxkQ29tbWFuZHMgPz8gW10pLFxuICAgICAgICAgIC4uLmRvY2tlckxvZ2luQ29tbWFuZHMsXG4gICAgICAgICAgJ2VjaG8gXCJSZXRyaWV2aW5nIEFXUyBBY2NvdW50IElELi4uXCInLFxuICAgICAgICAgICdleHBvcnQgQUNDT1VOVF9JRD0kKGF3cyBzdHMgZ2V0LWNhbGxlci1pZGVudGl0eSAtLXF1ZXJ5IEFjY291bnQgLS1vdXRwdXQgdGV4dCknLFxuICAgICAgICAgICdlY2hvIFwiTG9nZ2luZyBpbnRvIEFtYXpvbiBFQ1IuLi5cIicsXG4gICAgICAgICAgJ2F3cyBlY3IgZ2V0LWxvZ2luLXBhc3N3b3JkIC0tcmVnaW9uICRBV1NfREVGQVVMVF9SRUdJT04gfCBkb2NrZXIgbG9naW4gLS11c2VybmFtZSBBV1MgLS1wYXNzd29yZC1zdGRpbiAkQUNDT1VOVF9JRC5ka3IuZWNyLiRBV1NfREVGQVVMVF9SRUdJT04uYW1hem9uYXdzLmNvbScsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgYnVpbGQ6IHtcbiAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICBgZWNobyBcIkJ1aWxkaW5nIERvY2tlciBpbWFnZSB3aXRoIHRhZyAke2ltYWdlVGFnfS4uLlwiYCxcbiAgICAgICAgICBidWlsZENvbW1hbmQsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgLi4uKGNhY2hlRGlzYWJsZWQgJiYge1xuICAgICAgICBwb3N0X2J1aWxkOiB7XG4gICAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAgIGBlY2hvIFwiUHVzaGluZyBEb2NrZXIgaW1hZ2Ugd2l0aCB0YWcgJHtpbWFnZVRhZ30uLi5cImAsXG4gICAgICAgICAgICBgZG9ja2VyIHB1c2ggJEVDUl9SRVBPX1VSSToke2ltYWdlVGFnfWAsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIH0sXG4gIH07XG59XG4iXX0=
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZC1zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBU0EsMENBd0JDO0FBaUJELHdDQXlHQztBQTNKRCx5QkFBeUI7QUFDekIsNkJBQTZCO0FBRTdCOzs7OztHQUtHO0FBQ0gsU0FBZ0IsZUFBZSxDQUM3QixVQUFrQixFQUNsQixVQUFrQixFQUNsQixPQUE2QjtJQUU3QixJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUM7SUFDeEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNoRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDOUQsU0FBUyxHQUFHLFdBQVc7aUJBQ3BCLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ1gsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBQzFCLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsU0FBUztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRWpDLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0QsTUFB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a0JBQWtCO2lCQUN0QjthQUNGO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLFFBQVEsRUFBRTtvQkFDUix3Q0FBd0MsUUFBUSxNQUFNO29CQUN0RCxZQUFZO2lCQUNiO2FBQ0Y7WUFDRCxHQUFHLENBQUMsYUFBYSxJQUFJO2dCQUNuQixVQUFVLEVBQUU7b0JBQ1YsUUFBUSxFQUFFO3dCQUNSLHVDQUF1QyxRQUFRLE1BQU07d0JBQ3JELDZCQUE2QixRQUFRLEVBQUU7cUJBQ3hDO2lCQUNGO2FBQ0YsQ0FBQztTQUNIO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG4vKipcbiAqIFBhcnNlIGEgLmRvY2tlcmlnbm9yZSBmaWxlIGF0IGBzb3VyY2VQYXRoYCAoaWYgcHJlc2VudCkgYW5kIGNvbWJpbmUgaXQgd2l0aFxuICogYSB1c2VyLXN1cHBsaWVkIGV4Y2x1ZGUgbGlzdC4gVGhlIERvY2tlcmZpbGUgaXRzZWxmIGlzIG5ldmVyIGV4Y2x1ZGVkIOKAlFxuICogYC5kb2NrZXJpZ25vcmVgIHBhdHRlcm5zIG1hdGNoaW5nIGBkb2NrZXJGaWxlYCBhcmUgZmlsdGVyZWQgb3V0IHNvIHRoZVxuICogUzMgYXNzZXQgYWx3YXlzIGNvbnRhaW5zIHRoZSBEb2NrZXJmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUV4Y2x1ZGVzKFxuICBzb3VyY2VQYXRoOiBzdHJpbmcsXG4gIGRvY2tlckZpbGU6IHN0cmluZyxcbiAgZXhjbHVkZTogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGxldCBlZmZlY3RpdmUgPSBleGNsdWRlO1xuICBpZiAoIWVmZmVjdGl2ZSkge1xuICAgIGNvbnN0IGRvY2tlcmlnbm9yZVBhdGggPSBwYXRoLmpvaW4oc291cmNlUGF0aCwgJy5kb2NrZXJpZ25vcmUnKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhkb2NrZXJpZ25vcmVQYXRoKSkge1xuICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZG9ja2VyaWdub3JlUGF0aCwgJ3V0ZjgnKTtcbiAgICAgIGVmZmVjdGl2ZSA9IGZpbGVDb250ZW50XG4gICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpXG4gICAgICAgIC5maWx0ZXIoKGxpbmUpID0+IGxpbmUubGVuZ3RoID4gMCAmJiAhbGluZS5zdGFydHNXaXRoKCcjJykpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZWZmZWN0aXZlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIHJldHVybiBlZmZlY3RpdmUuZmlsdGVyKChwYXR0ZXJuKSA9PiB7XG4gICAgY29uc3QgZXNjYXBlZCA9IHBhdHRlcm4ucmVwbGFjZSgvWy4rXiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHtlc2NhcGVkLnJlcGxhY2UoL1xcKi9nLCAnLionKS5yZXBsYWNlKC9cXD8vZywgJy4nKX0kYCwgJ2knKTtcbiAgICByZXR1cm4gIXJlZ2V4LnRlc3QoZG9ja2VyRmlsZSk7XG4gIH0pO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkU3BlY09wdGlvbnMge1xuICByZWFkb25seSBpbWFnZVRhZzogc3RyaW5nO1xuICByZWFkb25seSBkb2NrZXJGaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBidWlsZEFyZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICByZWFkb25seSBkb2NrZXJMb2dpblNlY3JldEFybj86IHN0cmluZztcbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmRzPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IHByZUJ1aWxkQ29tbWFuZHM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgY2FjaGVEaXNhYmxlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcGxhdGZvcm06ICdsaW51eC9hbWQ2NCcgfCAnbGludXgvYXJtNjQnO1xufVxuXG4vKipcbiAqIEFzc2VtYmxlIHRoZSBwbGFpbiBidWlsZHNwZWMgb2JqZWN0IHRoYXQgdGhlIGNvbnN0cnVjdCBwYXNzZXMgdG9cbiAqIGBCdWlsZFNwZWMuZnJvbU9iamVjdGAuIFB1cmUgZnVuY3Rpb24g4oCUIGVhc3kgdG8gdW5pdCB0ZXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRCdWlsZFNwZWMob3B0czogQnVpbGRTcGVjT3B0aW9ucyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3Qge1xuICAgIGltYWdlVGFnLFxuICAgIGRvY2tlckZpbGUsXG4gICAgYnVpbGRBcmdzLFxuICAgIGRvY2tlckxvZ2luU2VjcmV0QXJuLFxuICAgIGluc3RhbGxDb21tYW5kcyxcbiAgICBwcmVCdWlsZENvbW1hbmRzLFxuICAgIGNhY2hlRGlzYWJsZWQsXG4gICAgcGxhdGZvcm0sXG4gIH0gPSBvcHRzO1xuXG4gIGNvbnN0IGJ1aWxkQXJnc1N0cmluZyA9IGJ1aWxkQXJnc1xuICAgID8gT2JqZWN0LmVudHJpZXMoYnVpbGRBcmdzKVxuICAgICAgLm1hcCgoW2ssIHZdKSA9PiBgLS1idWlsZC1hcmcgJHtrfT0ke3Z9YClcbiAgICAgIC5qb2luKCcgJylcbiAgICA6ICcnO1xuXG4gIGNvbnN0IGRvY2tlckZpbGVGbGFnID0gZG9ja2VyRmlsZSA/IGAtZiAkQ09ERUJVSUxEX1NSQ19ESVIvJHtkb2NrZXJGaWxlfWAgOiAnJztcblxuICBjb25zdCBkb2NrZXJMb2dpbkNvbW1hbmRzID0gZG9ja2VyTG9naW5TZWNyZXRBcm5cbiAgICA/IFtcbiAgICAgICdlY2hvIFwiUmV0cmlldmluZyBEb2NrZXIgY3JlZGVudGlhbHMuLi5cIicsXG4gICAgICAnYXB0LWdldCB1cGRhdGUgLXkgJiYgYXB0LWdldCBpbnN0YWxsIC15IGpxJyxcbiAgICAgIGBET0NLRVJfVVNFUk5BTUU9JChhd3Mgc2VjcmV0c21hbmFnZXIgZ2V0LXNlY3JldC12YWx1ZSAtLXNlY3JldC1pZCAke2RvY2tlckxvZ2luU2VjcmV0QXJufSAtLXF1ZXJ5IFNlY3JldFN0cmluZyAtLW91dHB1dCB0ZXh0IHwganEgLXIgLnVzZXJuYW1lKWAsXG4gICAgICBgRE9DS0VSX1BBU1NXT1JEPSQoYXdzIHNlY3JldHNtYW5hZ2VyIGdldC1zZWNyZXQtdmFsdWUgLS1zZWNyZXQtaWQgJHtkb2NrZXJMb2dpblNlY3JldEFybn0gLS1xdWVyeSBTZWNyZXRTdHJpbmcgLS1vdXRwdXQgdGV4dCB8IGpxIC1yIC5wYXNzd29yZClgLFxuICAgICAgJ2VjaG8gXCJMb2dnaW5nIGluIHRvIERvY2tlciBIdWIuLi5cIicsXG4gICAgICAnZWNobyAkRE9DS0VSX1BBU1NXT1JEIHwgZG9ja2VyIGxvZ2luIC0tdXNlcm5hbWUgJERPQ0tFUl9VU0VSTkFNRSAtLXBhc3N3b3JkLXN0ZGluJyxcbiAgICBdXG4gICAgOiBbJ2VjaG8gXCJObyBEb2NrZXIgY3JlZGVudGlhbHMuIFNraXBwaW5nIERvY2tlciBIdWIgbG9naW4uXCInXTtcblxuICBjb25zdCBidWlsZHhJbnN0YWxsQ29tbWFuZHMgPSBjYWNoZURpc2FibGVkXG4gICAgPyBbXVxuICAgIDogW1xuICAgICAgJ2VjaG8gXCJTZXR0aW5nIHVwIERvY2tlciBidWlsZHggZm9yIEVDUiBsYXllciBjYWNoZS4uLlwiJyxcbiAgICAgICdkb2NrZXIgYnVpbGR4IGNyZWF0ZSAtLWRyaXZlciBkb2NrZXItY29udGFpbmVyIC0tbmFtZSBlY3ItY2FjaGUtYnVpbGRlciAtLXVzZSAyPi9kZXYvbnVsbCB8fCBkb2NrZXIgYnVpbGR4IHVzZSBlY3ItY2FjaGUtYnVpbGRlcicsXG4gICAgXTtcblxuICBjb25zdCBwbGF0Zm9ybUZsYWcgPSBgLS1wbGF0Zm9ybSAke3BsYXRmb3JtfWA7XG5cbiAgLy8gLS1wcm92ZW5hbmNlPWZhbHNlIC0tc2JvbT1mYWxzZTogRG9ja2VyIEJ1aWxkeCB2MC4xMCsgYWRkcyBhdHRlc3RhdGlvbnMgYnkgZGVmYXVsdCxcbiAgLy8gcHJvZHVjaW5nIE9DSSBpbWFnZSBpbmRleGVzIHRoYXQgQVdTIExhbWJkYSBkb2VzIG5vdCBzdXBwb3J0LlxuICAvLyAkQ0FDSEVfRlJPTV9GTEFHIGlzIHNldCBpbiBwcmVfYnVpbGQ6IGVtcHR5IG9uIGZpcnN0IGJ1aWxkICh3aGVuXG4gIC8vIHRoZSBgOmNhY2hlYCB0YWcgZG9lc24ndCBleGlzdCB5ZXQg4oCUIGJ1aWxkeCAwLjIwIHN0aWxsIHJlamVjdHMgdGhpc1xuICAvLyBldmVuIHdpdGggYGlnbm9yZS1lcnJvcj10cnVlYCBhdCB0aGUgaW1wb3J0ZXItY29uZmlndXJlIHN0ZXApLFxuICAvLyBwb3B1bGF0ZWQgb24gc3Vic2VxdWVudCBidWlsZHMgc28gY2FjaGUgaXMgcmV1c2VkLiBUaGlzIGF2b2lkcyB0aGVcbiAgLy8gYGZhaWxlZCB0byBjb25maWd1cmUgcmVnaXN0cnkgY2FjaGUgaW1wb3J0ZXI6IC4uLjpjYWNoZTogbm90IGZvdW5kYFxuICAvLyAvIGBpbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyA0MDRgIGNyYXNoIG9uIHRoZSBmaXJzdCBkZXBsb3kuXG4gIGNvbnN0IGJ1aWxkQ29tbWFuZCA9IGNhY2hlRGlzYWJsZWRcbiAgICA/IGBkb2NrZXIgYnVpbGQgJHtwbGF0Zm9ybUZsYWd9ICR7ZG9ja2VyRmlsZUZsYWd9ICR7YnVpbGRBcmdzU3RyaW5nfSAtdCAkRUNSX1JFUE9fVVJJOiR7aW1hZ2VUYWd9ICRDT0RFQlVJTERfU1JDX0RJUmBcbiAgICA6IGBkb2NrZXIgYnVpbGR4IGJ1aWxkIC0tcHVzaCAke3BsYXRmb3JtRmxhZ30gLS1wcm92ZW5hbmNlPWZhbHNlIC0tc2JvbT1mYWxzZSAkQ0FDSEVfRlJPTV9GTEFHIC0tY2FjaGUtdG8gdHlwZT1yZWdpc3RyeSxyZWY9JEVDUl9SRVBPX1VSSTpjYWNoZSxtb2RlPW1heCxpbWFnZS1tYW5pZmVzdD10cnVlICR7ZG9ja2VyRmlsZUZsYWd9ICR7YnVpbGRBcmdzU3RyaW5nfSAtdCAkRUNSX1JFUE9fVVJJOiR7aW1hZ2VUYWd9ICRDT0RFQlVJTERfU1JDX0RJUmA7XG5cbiAgLy8gUHJlLWJ1aWxkIGNhY2hlIHByb2JlOiBvbmx5IGF0dGFjaCAtLWNhY2hlLWZyb20gd2hlbiB0aGUgOmNhY2hlIHRhZ1xuICAvLyBhbHJlYWR5IGV4aXN0cyBpbiB0aGlzIHJlcG8uIFNraXBwZWQgd2hlbiBjYWNoaW5nIGlzIGRpc2FibGVkIGVudGlyZWx5LlxuICBjb25zdCBjYWNoZVByb2JlQ29tbWFuZHMgPSBjYWNoZURpc2FibGVkXG4gICAgPyBbXVxuICAgIDogW1xuICAgICAgJ2VjaG8gXCJQcm9iaW5nIGZvciBleGlzdGluZyA6Y2FjaGUgdGFnIGluIEVDUi4uLlwiJyxcbiAgICAgICdleHBvcnQgRUNSX1JFUE9fTkFNRT0kKGVjaG8gJEVDUl9SRVBPX1VSSSB8IGN1dCAtZC8gLWYyLSknLFxuICAgICAgJ2lmIGF3cyBlY3IgZGVzY3JpYmUtaW1hZ2VzIC0tcmVwb3NpdG9yeS1uYW1lICRFQ1JfUkVQT19OQU1FIC0taW1hZ2UtaWRzIGltYWdlVGFnPWNhY2hlIC0tcmVnaW9uICRBV1NfREVGQVVMVF9SRUdJT04gPi9kZXYvbnVsbCAyPiYxOyB0aGVuICdcbiAgICAgICAgKyAnZXhwb3J0IENBQ0hFX0ZST01fRkxBRz1cIi0tY2FjaGUtZnJvbSB0eXBlPXJlZ2lzdHJ5LHJlZj0kRUNSX1JFUE9fVVJJOmNhY2hlXCI7ICdcbiAgICAgICAgKyAnZWNobyBcIkNhY2hlIHRhZyBleGlzdHMsIHdpbGwgcHVsbCBjYWNoZSBmcm9tIHJlZ2lzdHJ5LlwiOyAnXG4gICAgICAgICsgJ2Vsc2UgJ1xuICAgICAgICArICdleHBvcnQgQ0FDSEVfRlJPTV9GTEFHPVwiXCI7ICdcbiAgICAgICAgKyAnZWNobyBcIk5vIDpjYWNoZSB0YWcgeWV0IChmaXJzdCBidWlsZCk7IHNraXBwaW5nIC0tY2FjaGUtZnJvbS5cIjsgJ1xuICAgICAgICArICdmaScsXG4gICAgXTtcblxuICByZXR1cm4ge1xuICAgIHZlcnNpb246ICcwLjInLFxuICAgIHBoYXNlczoge1xuICAgICAgaW5zdGFsbDoge1xuICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICdlY2hvIFwiQmVnaW5uaW5nIGluc3RhbGwgcGhhc2UuLi5cIicsXG4gICAgICAgICAgLi4uKGluc3RhbGxDb21tYW5kcyA/PyBbXSksXG4gICAgICAgICAgLi4uYnVpbGR4SW5zdGFsbENvbW1hbmRzLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHByZV9idWlsZDoge1xuICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgIC4uLihwcmVCdWlsZENvbW1hbmRzID8/IFtdKSxcbiAgICAgICAgICAuLi5kb2NrZXJMb2dpbkNvbW1hbmRzLFxuICAgICAgICAgICdlY2hvIFwiUmV0cmlldmluZyBBV1MgQWNjb3VudCBJRC4uLlwiJyxcbiAgICAgICAgICAnZXhwb3J0IEFDQ09VTlRfSUQ9JChhd3Mgc3RzIGdldC1jYWxsZXItaWRlbnRpdHkgLS1xdWVyeSBBY2NvdW50IC0tb3V0cHV0IHRleHQpJyxcbiAgICAgICAgICAnZWNobyBcIkxvZ2dpbmcgaW50byBBbWF6b24gRUNSLi4uXCInLFxuICAgICAgICAgICdhd3MgZWNyIGdldC1sb2dpbi1wYXNzd29yZCAtLXJlZ2lvbiAkQVdTX0RFRkFVTFRfUkVHSU9OIHwgZG9ja2VyIGxvZ2luIC0tdXNlcm5hbWUgQVdTIC0tcGFzc3dvcmQtc3RkaW4gJEFDQ09VTlRfSUQuZGtyLmVjci4kQVdTX0RFRkFVTFRfUkVHSU9OLmFtYXpvbmF3cy5jb20nLFxuICAgICAgICAgIC4uLmNhY2hlUHJvYmVDb21tYW5kcyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBidWlsZDoge1xuICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgIGBlY2hvIFwiQnVpbGRpbmcgRG9ja2VyIGltYWdlIHdpdGggdGFnICR7aW1hZ2VUYWd9Li4uXCJgLFxuICAgICAgICAgIGJ1aWxkQ29tbWFuZCxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICAuLi4oY2FjaGVEaXNhYmxlZCAmJiB7XG4gICAgICAgIHBvc3RfYnVpbGQ6IHtcbiAgICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICAgYGVjaG8gXCJQdXNoaW5nIERvY2tlciBpbWFnZSB3aXRoIHRhZyAke2ltYWdlVGFnfS4uLlwiYCxcbiAgICAgICAgICAgIGBkb2NrZXIgcHVzaCAkRUNSX1JFUE9fVVJJOiR7aW1hZ2VUYWd9YCxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
package/lib/builder.d.ts CHANGED
@@ -170,8 +170,29 @@ export declare class TokenInjectableDockerBuilder extends Construct {
170
170
  readonly dockerImageCode: DockerImageCode;
171
171
  /** The ECR repository name — preserved across replica regions. */
172
172
  readonly repositoryName: string;
173
- /** The resolved image tag (CFN token; available at deploy time). */
173
+ /**
174
+ * The resolved image tag (CFN token; available at deploy time).
175
+ *
176
+ * Safe to use anywhere the consumer is in the **same region** as the
177
+ * builder (same stack or different stack). For cross-region consumers
178
+ * use `imageTagPlain` — `imageTag` would trigger CDK's
179
+ * `CrossRegionExportWriter` and wedge on any tag change.
180
+ */
174
181
  readonly imageTag: string;
182
+ /**
183
+ * The deterministic image tag as a plain synth-time string (no CFN token).
184
+ *
185
+ * Same value as `imageTag` but resolved immediately — useful for cross-region
186
+ * consumers, where the CFN-token form would trigger CDK to auto-create a
187
+ * `CrossRegionExportWriter`. That writer has an over-strict safety check
188
+ * that fails any update where the tag value changes (i.e. every real code
189
+ * change), wedging the stack in `UPDATE_ROLLBACK_FAILED`.
190
+ *
191
+ * `containerImageFor` and `dockerImageCodeFor` use this string automatically
192
+ * when the consumer region differs from the primary region, so callers
193
+ * normally don't reference this property directly.
194
+ */
195
+ readonly imageTagPlain: string;
175
196
  private readonly primaryRegion;
176
197
  private readonly accountId;
177
198
  private readonly replicaRegions;
@@ -187,6 +208,11 @@ export declare class TokenInjectableDockerBuilder extends Construct {
187
208
  *
188
209
  * The consumer's stack must have `crossRegionReferences: true` when
189
210
  * `region` differs from the builder's region.
211
+ *
212
+ * Cross-region consumers receive `imageTagPlain` (a synth-time string)
213
+ * rather than `imageTag` (a CFN token). Using the token would cause CDK to
214
+ * auto-create a `CrossRegionExportWriter` whose safety check wedges every
215
+ * time the tag value changes — i.e. every real code change.
190
216
  */
191
217
  containerImageFor(scope: Construct, region: string): ContainerImage;
192
218
  /**
@@ -195,6 +221,11 @@ export declare class TokenInjectableDockerBuilder extends Construct {
195
221
  *
196
222
  * The consumer's stack must have `crossRegionReferences: true` when
197
223
  * `region` differs from the builder's region.
224
+ *
225
+ * Cross-region consumers receive `imageTagPlain` (a synth-time string)
226
+ * rather than `imageTag` (a CFN token). Using the token would cause CDK to
227
+ * auto-create a `CrossRegionExportWriter` whose safety check wedges every
228
+ * time the tag value changes — i.e. every real code change.
198
229
  */
199
230
  dockerImageCodeFor(scope: Construct, region: string): DockerImageCode;
200
231
  private importRepoFor;
package/lib/builder.js CHANGED
@@ -135,6 +135,9 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
135
135
  // remain in ECR for the life of the repository.
136
136
  const imageTagRef = buildTriggerResource.getAttString('ImageTag');
137
137
  this.imageTag = imageTagRef;
138
+ // Plain synth-time form, used by cross-region helpers to bypass CDK's
139
+ // CrossRegionExportWriter (see imageTagPlain docs).
140
+ this.imageTagPlain = imageTag;
138
141
  this.repositoryName = this.ecrRepository.repositoryName;
139
142
  this.containerImage = aws_ecs_1.ContainerImage.fromEcrRepository(this.ecrRepository, imageTagRef);
140
143
  this.dockerImageCode = aws_lambda_1.DockerImageCode.fromEcr(this.ecrRepository, {
@@ -155,9 +158,16 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
155
158
  *
156
159
  * The consumer's stack must have `crossRegionReferences: true` when
157
160
  * `region` differs from the builder's region.
161
+ *
162
+ * Cross-region consumers receive `imageTagPlain` (a synth-time string)
163
+ * rather than `imageTag` (a CFN token). Using the token would cause CDK to
164
+ * auto-create a `CrossRegionExportWriter` whose safety check wedges every
165
+ * time the tag value changes — i.e. every real code change.
158
166
  */
159
167
  containerImageFor(scope, region) {
160
- return aws_ecs_1.ContainerImage.fromEcrRepository(this.importRepoFor(scope, region), this.imageTag);
168
+ this.assertRegionIsKnown(region);
169
+ const tag = region === this.primaryRegion ? this.imageTag : this.imageTagPlain;
170
+ return aws_ecs_1.ContainerImage.fromEcrRepository(this.importRepoFor(scope, region), tag);
161
171
  }
162
172
  /**
163
173
  * Import the replicated repository as a Lambda-compatible
@@ -165,11 +175,16 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
165
175
  *
166
176
  * The consumer's stack must have `crossRegionReferences: true` when
167
177
  * `region` differs from the builder's region.
178
+ *
179
+ * Cross-region consumers receive `imageTagPlain` (a synth-time string)
180
+ * rather than `imageTag` (a CFN token). Using the token would cause CDK to
181
+ * auto-create a `CrossRegionExportWriter` whose safety check wedges every
182
+ * time the tag value changes — i.e. every real code change.
168
183
  */
169
184
  dockerImageCodeFor(scope, region) {
170
- return aws_lambda_1.DockerImageCode.fromEcr(this.importRepoFor(scope, region), {
171
- tagOrDigest: this.imageTag,
172
- });
185
+ this.assertRegionIsKnown(region);
186
+ const tag = region === this.primaryRegion ? this.imageTag : this.imageTagPlain;
187
+ return aws_lambda_1.DockerImageCode.fromEcr(this.importRepoFor(scope, region), { tagOrDigest: tag });
173
188
  }
174
189
  importRepoFor(scope, region) {
175
190
  this.assertRegionIsKnown(region);
@@ -233,6 +248,10 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
233
248
  'ecr:GetDownloadUrlForLayer',
234
249
  'ecr:BatchCheckLayerAvailability',
235
250
  'ecr:BatchGetImage',
251
+ // DescribeImages: pre_build probes for the :cache tag's existence
252
+ // and only attaches --cache-from when it exists; without this
253
+ // permission the probe AccessDenies and the build crashes.
254
+ 'ecr:DescribeImages',
236
255
  ],
237
256
  resources: ['*'],
238
257
  }));
@@ -267,7 +286,7 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
267
286
  }
268
287
  exports.TokenInjectableDockerBuilder = TokenInjectableDockerBuilder;
269
288
  _a = JSII_RTTI_SYMBOL_1;
270
- TokenInjectableDockerBuilder[_a] = { fqn: "token-injectable-docker-builder.TokenInjectableDockerBuilder", version: "2.0.1" };
289
+ TokenInjectableDockerBuilder[_a] = { fqn: "token-injectable-docker-builder.TokenInjectableDockerBuilder", version: "2.0.3" };
271
290
  /**
272
291
  * Best-effort partition inference from an AWS region name. Returns
273
292
  * undefined if the region doesn't look like a known partition prefix —
@@ -286,4 +305,4 @@ function inferPartition(region) {
286
305
  return 'aws';
287
306
  return undefined;
288
307
  }
289
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaUNBQWlDO0FBRWpDLDZDQUEyRDtBQUMzRCw2REFNbUM7QUFFbkMsaURBQWlEO0FBQ2pELGlEQUFxRDtBQUNyRCxpREFBc0Q7QUFDdEQsaURBQTBDO0FBQzFDLHVEQUF5RDtBQUV6RCw2REFBa0Q7QUFDbEQsMkNBQXVDO0FBRXZDLDZDQUErRDtBQUMvRCwyQ0FBcUQ7QUFDckQsK0JBQW1EO0FBQ25ELHlDQUFrRTtBQTBLbEU7Ozs7R0FJRztBQUNILE1BQWEsNEJBQTZCLFNBQVEsc0JBQVM7SUFvQnpELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0M7UUFDaEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLEVBQ0osSUFBSSxFQUFFLFVBQVUsRUFDaEIsU0FBUyxFQUNULG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsY0FBYyxFQUNkLGVBQWUsRUFDZixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGFBQWEsR0FBRyxLQUFLLEVBQ3JCLE9BQU8sRUFDUCxJQUFJLEVBQUUsVUFBVSxFQUNoQixhQUFhLEdBQUcsS0FBSyxFQUNyQixhQUFhLEVBQ2IsUUFBUSxHQUFHLGFBQWEsRUFDeEIsUUFBUSxFQUNSLDJCQUEyQixFQUMzQixlQUFlLEdBQUcsS0FBSyxFQUN2QixjQUFjLEdBQUcsRUFBRSxHQUNwQixHQUFHLEtBQUssQ0FBQztRQUVWLE1BQU0sS0FBSyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFFMUMsTUFBTSxhQUFhLEdBQUcsYUFBYTtZQUNqQyxDQUFDLENBQUMsSUFBSSxhQUFHLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDaEUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVkLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBQSxnQ0FBMEIsRUFBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQ3JFLGFBQWE7WUFDYixhQUFhO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQUcsVUFBVSxJQUFJLFlBQVksQ0FBQztRQUNsRCxNQUFNLGdCQUFnQixHQUFHLElBQUEsNEJBQWUsRUFBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTlFLE1BQU0sV0FBVyxHQUFHLElBQUkscUJBQUssQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ2pELElBQUksRUFBRSxVQUFVO1lBQ2hCLE9BQU8sRUFBRSxnQkFBZ0I7U0FDMUIsQ0FBQyxDQUFDO1FBRUgseUVBQXlFO1FBQ3pFLG9FQUFvRTtRQUNwRSxzRUFBc0U7UUFDdEUseUVBQXlFO1FBQ3pFLHFCQUFxQjtRQUNyQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2pFLFNBQVMsRUFBRSxXQUFXLENBQUMsU0FBUztZQUNoQyxVQUFVLEVBQUUsY0FBYztZQUMxQixTQUFTLEVBQUUsU0FBUyxJQUFJLEVBQUU7WUFDMUIsUUFBUTtZQUNSLGVBQWUsRUFBRSxlQUFlLElBQUksRUFBRTtZQUN0QyxnQkFBZ0IsRUFBRSxnQkFBZ0IsSUFBSSxFQUFFO1lBQ3hDLGFBQWE7WUFDYixvQkFBb0IsRUFBRSxvQkFBb0IsSUFBSSxJQUFJO1lBQ2xELDJCQUEyQixFQUFFLDJCQUEyQixJQUFJLEVBQUU7U0FDL0QsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxCLE1BQU0sWUFBWSxHQUFHLElBQUEsMkJBQWMsRUFBQztZQUNsQyxRQUFRO1lBQ1IsVUFBVTtZQUNWLFNBQVM7WUFDVCxvQkFBb0I7WUFDcEIsZUFBZTtZQUNmLGdCQUFnQjtZQUNoQixhQUFhO1lBQ2IsUUFBUTtTQUNULENBQUMsQ0FBQztRQUVILE1BQU0sY0FBYyxHQUFHLFFBQVEsS0FBSyxhQUFhO1lBQy9DLENBQUMsQ0FBQyxrQ0FBa0IsQ0FBQywyQkFBMkI7WUFDaEQsQ0FBQyxDQUFDLCtCQUFlLENBQUMsWUFBWSxDQUFDO1FBRWpDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSx1QkFBTyxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUM3RCxNQUFNLEVBQUUsc0JBQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTTtnQkFDMUIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxXQUFXO2FBQzlCLENBQUM7WUFDRixXQUFXLEVBQUU7Z0JBQ1gsVUFBVSxFQUFFLGNBQWM7Z0JBQzFCLFVBQVUsRUFBRSxJQUFJO2FBQ2pCO1lBQ0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRTthQUMxRDtZQUNELFNBQVMsRUFBRSx5QkFBUyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7WUFDN0MsR0FBRyxDQUFDLGFBQWEsSUFBSTtnQkFDbkIsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxFQUFFO2FBQ3JELENBQUM7WUFDRixHQUFHO1lBQ0gsY0FBYztZQUNkLGVBQWU7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsMkJBQTJCLENBQUMsZ0JBQWdCLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztRQUVoRixJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDekIsZ0JBQWdCLENBQUMsZUFBZSxDQUM5QixJQUFJLHlCQUFlLENBQUM7Z0JBQ2xCLE9BQU8sRUFBRSxDQUFDLCtCQUErQixDQUFDO2dCQUMxQyxTQUFTLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzthQUNsQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFLLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBRUQsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLElBQUksK0NBQW9DLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdGLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRXZGLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDNUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUVELHNFQUFzRTtRQUN0RSx3RUFBd0U7UUFDeEUsd0VBQXdFO1FBQ3hFLHlFQUF5RTtRQUN6RSxzRUFBc0U7UUFDdEUsc0VBQXNFO1FBQ3RFLHVFQUF1RTtRQUN2RSx3RUFBd0U7UUFDeEUsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLDRCQUFjLENBQUMsSUFBSSxFQUFFLHdCQUF3QixFQUFFO1lBQzlFLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxZQUFZO1lBQzVDLFVBQVUsRUFBRTtnQkFDVixXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztnQkFDekMsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLE9BQU8sRUFBRSxXQUFXLENBQUMsU0FBUztnQkFDOUIsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPO2dCQUNuRCxjQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjO2dCQUNqRCxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7YUFDL0M7U0FDRixDQUFDLENBQUM7UUFDSCxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFMUQseUVBQXlFO1FBQ3pFLHdFQUF3RTtRQUN4RSxnREFBZ0Q7UUFDaEQsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUM7UUFDeEQsSUFBSSxDQUFDLGNBQWMsR0FBRyx3QkFBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLGVBQWUsR0FBRyw0QkFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2pFLFdBQVcsRUFBRSxXQUFXO1NBQ3pCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxnQkFBZ0IsQ0FBQyxNQUFjO1FBQ3BDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsWUFBWSxNQUFNLGtCQUFrQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDcEYsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGlCQUFpQixDQUFDLEtBQWdCLEVBQUUsTUFBYztRQUN2RCxPQUFPLHdCQUFjLENBQUMsaUJBQWlCLENBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUNqQyxJQUFJLENBQUMsUUFBUSxDQUNkLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksa0JBQWtCLENBQUMsS0FBZ0IsRUFBRSxNQUFjO1FBQ3hELE9BQU8sNEJBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDaEUsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBZ0IsRUFBRSxNQUFjO1FBQ3BELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUU3RCx3RUFBd0U7UUFDeEUsd0VBQXdFO1FBQ3hFLHlFQUF5RTtRQUN6RSw4Q0FBOEM7UUFDOUMsTUFBTSxRQUFRLEdBQUcsZUFBZSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxJQUFJLFFBQVE7WUFBRSxPQUFPLFFBQXNCLENBQUM7UUFFNUMsT0FBTyxvQkFBVSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDMUQsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ25DLGFBQWEsRUFBRSxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ3ZDLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixZQUFZLEVBQUUsSUFBSSxDQUFDLGNBQWM7Z0JBQ2pDLE1BQU07Z0JBQ04sT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQ3hCLENBQUM7U0FDSCxDQUFlLENBQUM7SUFDbkIsQ0FBQztJQUVPLG1CQUFtQixDQUFDLE1BQWM7UUFDeEMsSUFBSSxNQUFNLEtBQUssSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBQzFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQUUsT0FBTztRQUNqRCxNQUFNLElBQUksS0FBSyxDQUNiLFdBQVcsTUFBTSxnQ0FBZ0MsSUFBSSxDQUFDLGFBQWEsSUFBSTtZQUN2RSw0Q0FBNEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxLQUFLO1lBQzNGLDRFQUE0RSxDQUM3RSxDQUFDO0lBQ0osQ0FBQztJQUVPLHNCQUFzQixDQUFDLGNBQXdCO1FBQ3JELE1BQU0sS0FBSyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUN6QyxLQUFLLE1BQU0sTUFBTSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3BDLElBQUksTUFBTSxLQUFLLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxJQUFJLEtBQUssQ0FDYixxREFBcUQsSUFBSSxDQUFDLGFBQWEsS0FBSztvQkFDNUUsMEJBQTBCLENBQzNCLENBQUM7WUFDSixDQUFDO1lBQ0QsdUVBQXVFO1lBQ3ZFLDBFQUEwRTtZQUMxRSxzRUFBc0U7WUFDdEUscURBQXFEO1lBQ3JELElBQUksQ0FBQyxtQkFBSyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLGlCQUFpQixJQUFJLGlCQUFpQixLQUFLLGdCQUFnQixFQUFFLENBQUM7b0JBQ2hFLE1BQU0sSUFBSSxLQUFLLENBQ2Isb0RBQW9EO3dCQUNwRCx5QkFBeUIsZ0JBQWdCLHVCQUF1Qjt3QkFDaEUsSUFBSSxNQUFNLGlDQUFpQyxpQkFBaUIsSUFBSSxDQUNqRSxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxjQUFjLENBQUMsT0FBZ0I7UUFDckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsT0FBTyxDQUFDLGVBQWUsQ0FDckIsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE9BQU8sRUFBRTtnQkFDUCwyQkFBMkI7Z0JBQzNCLDRCQUE0QjtnQkFDNUIsaUNBQWlDO2dCQUNqQyxtQkFBbUI7YUFDcEI7WUFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDakIsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU8sMkJBQTJCLENBQUMsT0FBZ0IsRUFBRSxRQUE4QjtRQUNsRixJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDL0MsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsT0FBTyxDQUFDLGVBQWUsQ0FDckIsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE9BQU8sRUFBRTtnQkFDUCxtQkFBbUI7Z0JBQ25CLDRCQUE0QjtnQkFDNUIsaUNBQWlDO2dCQUNqQyw4QkFBOEI7Z0JBQzlCLHNCQUFzQjthQUN2QjtZQUNELFNBQVMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUNyQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsZUFBZSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLGVBQWUsTUFBTSxJQUFJLENBQ2xGO1NBQ0YsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU8sb0JBQW9CLENBQUMsT0FBZ0IsRUFBRSxlQUF3QjtRQUNyRSxJQUFJLENBQUMsZUFBZTtZQUFFLE9BQU87UUFDN0IsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsT0FBTyxDQUFDLGVBQWUsQ0FDckIsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLG1CQUFtQixDQUFDO1lBQzdFLFNBQVMsRUFBRTtnQkFDVCxnQkFBZ0IsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxjQUFjLGtDQUFzQixHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQ3pHLGdCQUFnQixLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLGNBQWMsa0NBQXNCLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSTthQUM1RztTQUNGLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs7QUFoVUgsb0VBaVVDOzs7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxjQUFjLENBQUMsTUFBYztJQUNwQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFDOUMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUFFLE9BQU8sWUFBWSxDQUFDO0lBQ3RELElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNuRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDdEQsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgU3RhY2ssIFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtcbiAgUHJvamVjdCxcbiAgU291cmNlLFxuICBMaW51eEJ1aWxkSW1hZ2UsXG4gIExpbnV4QXJtQnVpbGRJbWFnZSxcbiAgQnVpbGRTcGVjLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCB7IElWcGMsIElTZWN1cml0eUdyb3VwLCBTdWJuZXRTZWxlY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNyJztcbmltcG9ydCB7IENvbnRhaW5lckltYWdlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcyc7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEtleSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHsgRG9ja2VySW1hZ2VDb2RlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBJTG9nR3JvdXAgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBBc3NldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmltcG9ydCB7IGJ1aWxkQnVpbGRTcGVjLCByZXNvbHZlRXhjbHVkZXMgfSBmcm9tICcuL2J1aWxkLXNwZWMnO1xuaW1wb3J0IHsgQlVJTERfTE9HX0dST1VQX1BSRUZJWCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGNyZWF0ZUJ1aWxkZXJFY3JSZXBvc2l0b3J5IH0gZnJvbSAnLi9lY3InO1xuaW1wb3J0IHsgVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3ZpZGVyIH0gZnJvbSAnLi9wcm92aWRlcic7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIGBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyYCBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgRG9ja2VyZmlsZSBvciBzb3VyY2UgY29kZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQnVpbGQgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIERvY2tlciBidWlsZCBwcm9jZXNzLlxuICAgKiBUaGVzZSBhcmUgdHJhbnNmb3JtZWQgaW50byBgLS1idWlsZC1hcmcgS0VZPVZBTFVFYCBmbGFncy5cbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIFRPS0VOOiAnbXktc2VjcmV0LXRva2VuJyxcbiAgICogICBFTlY6ICdwcm9kdWN0aW9uJ1xuICAgKiB9XG4gICAqL1xuICByZWFkb25seSBidWlsZEFyZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBBV1MgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIERvY2tlciBsb2dpbiBjcmVkZW50aWFscy5cbiAgICogVGhlIHNlY3JldCBtdXN0IHN0b3JlIGEgSlNPTiBvYmplY3Q6IGB7XCJ1c2VybmFtZVwiOlwiLi4uXCIsXCJwYXNzd29yZFwiOlwiLi4uXCJ9YC5cbiAgICogTXVzdCBiZSBpbiB0aGUgc2FtZSByZWdpb24gYXMgdGhlIHN0YWNrLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIERvY2tlciBIdWIgbG9naW4uXG4gICAqL1xuICByZWFkb25seSBkb2NrZXJMb2dpblNlY3JldEFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFZQQyBpbiB3aGljaCB0aGUgQ29kZUJ1aWxkIHByb2plY3Qgd2lsbCBiZSBkZXBsb3llZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBDb2RlQnVpbGQgdXNlcyBwdWJsaWMgaW50ZXJuZXQuXG4gICAqL1xuICByZWFkb25seSB2cGM/OiBJVnBjO1xuXG4gIC8qKlxuICAgKiBTZWN1cml0eSBncm91cHMgYXR0YWNoZWQgdG8gdGhlIENvZGVCdWlsZCBwcm9qZWN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHNlY3VyaXR5IGdyb3VwcyBhdHRhY2hlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogSVNlY3VyaXR5R3JvdXBbXTtcblxuICAvKipcbiAgICogU3VibmV0IHNlbGVjdGlvbiB3aXRoaW4gdGhlIFZQQy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBbGwgc3VibmV0cyBpbiB0aGUgVlBDLlxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0U2VsZWN0aW9uPzogU3VibmV0U2VsZWN0aW9uO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gY29tbWFuZHMgdG8gcnVuIGR1cmluZyB0aGUgaW5zdGFsbCBwaGFzZSBvZiBDb2RlQnVpbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gYWRkaXRpb25hbCBpbnN0YWxsIGNvbW1hbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBjb21tYW5kcyB0byBydW4gZHVyaW5nIHRoZSBwcmVfYnVpbGQgcGhhc2Ugb2YgQ29kZUJ1aWxkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGFkZGl0aW9uYWwgcHJlLWJ1aWxkIGNvbW1hbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlQnVpbGRDb21tYW5kcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBLTVMgZW5jcnlwdGlvbiBmb3IgdGhlIEVDUiByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkga21zRW5jcnlwdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZpbGUgcGF0aHMgaW4gdGhlIERvY2tlciBkaXJlY3RvcnkgdG8gZXhjbHVkZSBmcm9tIHRoZSBidWlsZCBhc3NldC5cbiAgICogRmFsbHMgYmFjayB0byBgLmRvY2tlcmlnbm9yZWAgaWYgcHJlc2VudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBmaWxlIHBhdGggZXhjbHVzaW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgRG9ja2VyZmlsZSAocGFzc2VkIGFzIGAtZmApLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnRG9ja2VyZmlsZS5wcm9kdWN0aW9uJ1xuICAgKiBAZGVmYXVsdCAnRG9ja2VyZmlsZSdcbiAgICovXG4gIHJlYWRvbmx5IGZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCBkaXNhYmxlcyBEb2NrZXIgbGF5ZXIgY2FjaGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlRGlzYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDbG91ZFdhdGNoIGxvZyBncm91cCBmb3IgQ29kZUJ1aWxkIGJ1aWxkIGxvZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ29kZUJ1aWxkIGRlZmF1bHQgbG9nZ2luZy5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkTG9nR3JvdXA/OiBJTG9nR3JvdXA7XG5cbiAgLyoqXG4gICAqIFRhcmdldCBwbGF0Zm9ybSBmb3IgdGhlIERvY2tlciBpbWFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgJ2xpbnV4L2FtZDY0J1xuICAgKi9cbiAgcmVhZG9ubHkgcGxhdGZvcm0/OiAnbGludXgvYW1kNjQnIHwgJ2xpbnV4L2FybTY0JztcblxuICAvKipcbiAgICogU2hhcmVkIHByb3ZpZGVyIGZvciB0aGUgY3VzdG9tIHJlc291cmNlIExhbWJkYXMuXG4gICAqXG4gICAqIFBhc3MgYFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXJQcm92aWRlci5nZXRPckNyZWF0ZSh0aGlzLCB7IHF1ZXJ5SW50ZXJ2YWwgfSlgXG4gICAqIGlmIHlvdSBuZWVkIGEgbm9uLWRlZmF1bHQgcXVlcnkgaW50ZXJ2YWwuIE90aGVyd2lzZSwgdGhlIGNvbnN0cnVjdCB3aWxsXG4gICAqIGNhbGwgYGdldE9yQ3JlYXRlKHRoaXMpYCBpdHNlbGYgYW5kIHJldXNlIHRoZSBwZXItc3RhY2sgc2luZ2xldG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFBlci1zdGFjayBzaW5nbGV0b24gcHJvdmlkZXIsIGNyZWF0ZWQgb24gZmlyc3QgdXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXI/OiBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIEVDUiBwdWxsLXRocm91Z2ggY2FjaGUgcmVwb3NpdG9yeSBwcmVmaXhlcyB0byBncmFudCBwdWxsIGFjY2VzcyB0by5cbiAgICpcbiAgICogQGV4YW1wbGUgWydkb2NrZXItaHViJywgJ2doY3InXVxuICAgKiBAZGVmYXVsdCAtIE5vIHB1bGwtdGhyb3VnaCBjYWNoZSBhY2Nlc3MuXG4gICAqL1xuICByZWFkb25seSBlY3JQdWxsVGhyb3VnaENhY2hlUHJlZml4ZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIGNyZWF0ZXMgYSBDbG91ZFdhdGNoIGxvZyBncm91cCBvdXRzaWRlIG9mIENsb3VkRm9ybWF0aW9uXG4gICAqIChgL2RvY2tlci1idWlsZGVyLzxwcm9qZWN0TmFtZT5gKSBhbmQgZGlyZWN0cyBDb2RlQnVpbGQgb3V0cHV0IHRoZXJlLlxuICAgKiBTdXJ2aXZlcyBzdGFjayByb2xsYmFja3MgZm9yIGRlYnVnZ2luZy4gNy1kYXkgcmV0ZW50aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmV0YWluQnVpbGRMb2dzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBBV1MgcmVnaW9ucyB0byByZXBsaWNhdGUgdGhlIGJ1aWx0IGltYWdlIHRvIHZpYSBFQ1Inc1xuICAgKiBuYXRpdmUgcmVnaXN0cnkgcmVwbGljYXRpb24uIFRoZSBpbWFnZSBpcyBwdXNoZWQgdG8gdGhlIHByaW1hcnlcbiAgICogcmVnaW9uJ3MgRUNSIGFzIHVzdWFsOyBFQ1IgYXN5bmNocm9ub3VzbHkgcmVwbGljYXRlcyB0aGUgc2FtZVxuICAgKiBgcmVwb3NpdG9yeU5hbWVgICsgYGltYWdlVGFnYCB0byBlYWNoIHJlZ2lvbiBsaXN0ZWQgaGVyZS5cbiAgICpcbiAgICogQ29uc3VtZXJzIGluIGFub3RoZXIgcmVnaW9uIChhIExhbWJkYSBpbiBgdXMtd2VzdC0yYCByZWZlcmVuY2luZyBhblxuICAgKiBpbWFnZSBidWlsdCBpbiBgdXMtZWFzdC0xYCkgY2FuIHVzZSBgZG9ja2VySW1hZ2VDb2RlRm9yKHJlZ2lvbilgIG9yXG4gICAqIGBjb250YWluZXJJbWFnZUZvcihyZWdpb24pYCB0byBpbXBvcnQgdGhlIHJlcGxpY2F0ZWQgaW1hZ2UuXG4gICAqXG4gICAqIFRoZSBjdXN0b20gcmVzb3VyY2Ugd2FpdHMgZm9yIHJlcGxpY2F0aW9uIHRvIGNvbXBsZXRlIGJlZm9yZVxuICAgKiBzaWduYWxsaW5nIGRlcGxveS1jb21wbGV0ZSwgc28gZG93bnN0cmVhbSBzdGFja3MgY2FuIHNhZmVseSBkZXBsb3lcbiAgICogaW1tZWRpYXRlbHkgYWZ0ZXIuXG4gICAqXG4gICAqICoqQ2F2ZWF0czoqKlxuICAgKiAtIENyb3NzLXJlZ2lvbiByZXBsaWNhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJldHdlZW4gQVdTIHBhcnRpdGlvbnMuXG4gICAqIC0gUmVwbGljYXMgZG8gKipub3QqKiBpbmhlcml0IHRoZSBwcmltYXJ5J3MgZW5jcnlwdGlvbiAoZGVmYXVsdHMgdG9cbiAgICogICBBRVMtMjU2KSwgbGlmZWN5Y2xlIHBvbGljaWVzLCBvciByZXBvc2l0b3J5IHBvbGljaWVzLlxuICAgKiAtIFJlcGxpY2F0ZWQgcmVwb3NpdG9yaWVzIHBlcnNpc3Qgb24gc3RhY2sgZGVsZXRpb24g4oCUIEFXUyBkb2VzIG5vdFxuICAgKiAgIGF1dG8tZGVsZXRlIHRoZW0uIENsZWFuIHVwIG1hbnVhbGx5IHZpYSB0aGUgRUNSIGNvbnNvbGUgLyBDTEkgaWZcbiAgICogICBuZWVkZWQuXG4gICAqIC0gQm90aCB0aGUgYnVpbGRlciBzdGFjayBhbmQgYW55IGNvbnN1bWVyIHN0YWNrIGluIGFub3RoZXIgcmVnaW9uXG4gICAqICAgbXVzdCBzZXQgYGNyb3NzUmVnaW9uUmVmZXJlbmNlczogdHJ1ZWAgZm9yIHRoZSBpbWFnZSB0YWcgdG8gZmxvdy5cbiAgICogLSBTdGFja3MgbXVzdCBoYXZlIGEgY29uY3JldGUgcmVnaW9uIChgZW52OiB7IGFjY291bnQsIHJlZ2lvbiB9YCksXG4gICAqICAgbm90IHRoZSBlbnYtYWdub3N0aWMgZGVmYXVsdC5cbiAgICpcbiAgICogQGV4YW1wbGUgWyd1cy13ZXN0LTInLCAnZXUtd2VzdC0xJ11cbiAgICogQGRlZmF1bHQgW10gLSBubyByZXBsaWNhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbGljYVJlZ2lvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIENESyBjb25zdHJ1Y3QgdG8gYnVpbGQgYW5kIHB1c2ggRG9ja2VyIGltYWdlcyB0byBhbiBFQ1IgcmVwb3NpdG9yeSB1c2luZ1xuICogQ29kZUJ1aWxkIGFuZCBMYW1iZGEgY3VzdG9tIHJlc291cmNlcywgKip0aGVuKiogcmV0cmlldmUgdGhlIGZpbmFsIGltYWdlIHRhZ1xuICogc28gdGhhdCBFQ1MvTGFtYmRhIHJlZmVyZW5jZXMgdXNlIHRoZSBleGFjdCBidWlsdCBpbWFnZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKiogVGhlIEVDUiByZXBvc2l0b3J5IHRoYXQgc3RvcmVzIHRoZSByZXN1bHRpbmcgRG9ja2VyIGltYWdlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGVjclJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG5cbiAgLyoqIEVDUy1jb21wYXRpYmxlIGNvbnRhaW5lciBpbWFnZSByZWZlcmVuY2UgKHByaW1hcnkgcmVnaW9uKS4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbnRhaW5lckltYWdlOiBDb250YWluZXJJbWFnZTtcblxuICAvKiogTGFtYmRhLWNvbXBhdGlibGUgRG9ja2VySW1hZ2VDb2RlIHJlZmVyZW5jZSAocHJpbWFyeSByZWdpb24pLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZG9ja2VySW1hZ2VDb2RlOiBEb2NrZXJJbWFnZUNvZGU7XG5cbiAgLyoqIFRoZSBFQ1IgcmVwb3NpdG9yeSBuYW1lIOKAlCBwcmVzZXJ2ZWQgYWNyb3NzIHJlcGxpY2EgcmVnaW9ucy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlcG9zaXRvcnlOYW1lOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSByZXNvbHZlZCBpbWFnZSB0YWcgKENGTiB0b2tlbjsgYXZhaWxhYmxlIGF0IGRlcGxveSB0aW1lKS4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGltYWdlVGFnOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwcmltYXJ5UmVnaW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWNjb3VudElkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVwbGljYVJlZ2lvbnM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qge1xuICAgICAgcGF0aDogc291cmNlUGF0aCxcbiAgICAgIGJ1aWxkQXJncyxcbiAgICAgIGRvY2tlckxvZ2luU2VjcmV0QXJuLFxuICAgICAgdnBjLFxuICAgICAgc2VjdXJpdHlHcm91cHMsXG4gICAgICBzdWJuZXRTZWxlY3Rpb24sXG4gICAgICBpbnN0YWxsQ29tbWFuZHMsXG4gICAgICBwcmVCdWlsZENvbW1hbmRzLFxuICAgICAga21zRW5jcnlwdGlvbiA9IGZhbHNlLFxuICAgICAgZXhjbHVkZSxcbiAgICAgIGZpbGU6IGRvY2tlckZpbGUsXG4gICAgICBjYWNoZURpc2FibGVkID0gZmFsc2UsXG4gICAgICBidWlsZExvZ0dyb3VwLFxuICAgICAgcGxhdGZvcm0gPSAnbGludXgvYW1kNjQnLFxuICAgICAgcHJvdmlkZXIsXG4gICAgICBlY3JQdWxsVGhyb3VnaENhY2hlUHJlZml4ZXMsXG4gICAgICByZXRhaW5CdWlsZExvZ3MgPSBmYWxzZSxcbiAgICAgIHJlcGxpY2FSZWdpb25zID0gW10sXG4gICAgfSA9IHByb3BzO1xuXG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICB0aGlzLnByaW1hcnlSZWdpb24gPSBzdGFjay5yZWdpb247XG4gICAgdGhpcy5hY2NvdW50SWQgPSBzdGFjay5hY2NvdW50O1xuICAgIHRoaXMucmVwbGljYVJlZ2lvbnMgPSBbLi4ucmVwbGljYVJlZ2lvbnNdO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9IGttc0VuY3J5cHRpb25cbiAgICAgID8gbmV3IEtleSh0aGlzLCAnRWNyRW5jcnlwdGlvbktleScsIHsgZW5hYmxlS2V5Um90YXRpb246IHRydWUgfSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5lY3JSZXBvc2l0b3J5ID0gY3JlYXRlQnVpbGRlckVjclJlcG9zaXRvcnkodGhpcywgJ0VDUlJlcG9zaXRvcnknLCB7XG4gICAgICBrbXNFbmNyeXB0aW9uLFxuICAgICAgZW5jcnlwdGlvbktleSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRvY2tlckZpbGVOYW1lID0gZG9ja2VyRmlsZSA/PyAnRG9ja2VyZmlsZSc7XG4gICAgY29uc3QgZWZmZWN0aXZlRXhjbHVkZSA9IHJlc29sdmVFeGNsdWRlcyhzb3VyY2VQYXRoLCBkb2NrZXJGaWxlTmFtZSwgZXhjbHVkZSk7XG5cbiAgICBjb25zdCBzb3VyY2VBc3NldCA9IG5ldyBBc3NldCh0aGlzLCAnU291cmNlQXNzZXQnLCB7XG4gICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgZXhjbHVkZTogZWZmZWN0aXZlRXhjbHVkZSxcbiAgICB9KTtcblxuICAgIC8vIERldGVybWluaXN0aWMgaW1hZ2UgdGFnOiBhIGhhc2ggb2YgZXZlcnkgaW5wdXQgdGhhdCBtYXRlcmlhbGx5IGFmZmVjdHNcbiAgICAvLyB0aGUgYnVpbHQgaW1hZ2UuIFN0YWJsZSBhY3Jvc3Mgc3ludGhzIOKGkiBubyBzcHVyaW91cyByZWJ1aWxkcywgYW5kXG4gICAgLy8gY3Jvc3MtcmVnaW9uIFNTTSBleHBvcnRzIGRvbid0IGNodXJuIGJldHdlZW4gZGVwbG95cyAod2hpY2ggdXNlZCB0b1xuICAgIC8vIHdlZGdlIHRoZSBDREsgQ3Jvc3NSZWdpb25FeHBvcnRSZWFkZXIvV3JpdGVyIHdoZW4gYSBkZXBsb3kgd2FzIHJldHJpZWRcbiAgICAvLyBhZnRlciBhIHJvbGxiYWNrKS5cbiAgICBjb25zdCBpbWFnZVRhZyA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgYXNzZXRIYXNoOiBzb3VyY2VBc3NldC5hc3NldEhhc2gsXG4gICAgICBkb2NrZXJGaWxlOiBkb2NrZXJGaWxlTmFtZSxcbiAgICAgIGJ1aWxkQXJnczogYnVpbGRBcmdzID8/IHt9LFxuICAgICAgcGxhdGZvcm0sXG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IGluc3RhbGxDb21tYW5kcyA/PyBbXSxcbiAgICAgIHByZUJ1aWxkQ29tbWFuZHM6IHByZUJ1aWxkQ29tbWFuZHMgPz8gW10sXG4gICAgICBjYWNoZURpc2FibGVkLFxuICAgICAgZG9ja2VyTG9naW5TZWNyZXRBcm46IGRvY2tlckxvZ2luU2VjcmV0QXJuID8/IG51bGwsXG4gICAgICBlY3JQdWxsVGhyb3VnaENhY2hlUHJlZml4ZXM6IGVjclB1bGxUaHJvdWdoQ2FjaGVQcmVmaXhlcyA/PyBbXSxcbiAgICB9KSkuZGlnZXN0KCdoZXgnKTtcblxuICAgIGNvbnN0IGJ1aWxkU3BlY09iaiA9IGJ1aWxkQnVpbGRTcGVjKHtcbiAgICAgIGltYWdlVGFnLFxuICAgICAgZG9ja2VyRmlsZSxcbiAgICAgIGJ1aWxkQXJncyxcbiAgICAgIGRvY2tlckxvZ2luU2VjcmV0QXJuLFxuICAgICAgaW5zdGFsbENvbW1hbmRzLFxuICAgICAgcHJlQnVpbGRDb21tYW5kcyxcbiAgICAgIGNhY2hlRGlzYWJsZWQsXG4gICAgICBwbGF0Zm9ybSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvZGVCdWlsZEltYWdlID0gcGxhdGZvcm0gPT09ICdsaW51eC9hcm02NCdcbiAgICAgID8gTGludXhBcm1CdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yX1NUQU5EQVJEXzNfMFxuICAgICAgOiBMaW51eEJ1aWxkSW1hZ2UuU1RBTkRBUkRfN18wO1xuXG4gICAgY29uc3QgY29kZUJ1aWxkUHJvamVjdCA9IG5ldyBQcm9qZWN0KHRoaXMsICdDb2RlQnVpbGRQcm9qZWN0Jywge1xuICAgICAgc291cmNlOiBTb3VyY2UuczMoe1xuICAgICAgICBidWNrZXQ6IHNvdXJjZUFzc2V0LmJ1Y2tldCxcbiAgICAgICAgcGF0aDogc291cmNlQXNzZXQuczNPYmplY3RLZXksXG4gICAgICB9KSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IGNvZGVCdWlsZEltYWdlLFxuICAgICAgICBwcml2aWxlZ2VkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgIEVDUl9SRVBPX1VSSTogeyB2YWx1ZTogdGhpcy5lY3JSZXBvc2l0b3J5LnJlcG9zaXRvcnlVcmkgfSxcbiAgICAgIH0sXG4gICAgICBidWlsZFNwZWM6IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KGJ1aWxkU3BlY09iaiksXG4gICAgICAuLi4oYnVpbGRMb2dHcm91cCAmJiB7XG4gICAgICAgIGxvZ2dpbmc6IHsgY2xvdWRXYXRjaDogeyBsb2dHcm91cDogYnVpbGRMb2dHcm91cCB9IH0sXG4gICAgICB9KSxcbiAgICAgIHZwYyxcbiAgICAgIHNlY3VyaXR5R3JvdXBzLFxuICAgICAgc3VibmV0U2VsZWN0aW9uLFxuICAgIH0pO1xuXG4gICAgdGhpcy5ncmFudEJ1aWxkTG9nc0FjY2Vzcyhjb2RlQnVpbGRQcm9qZWN0LCByZXRhaW5CdWlsZExvZ3MpO1xuICAgIHRoaXMuZ3JhbnRFY3JBY2Nlc3MoY29kZUJ1aWxkUHJvamVjdCk7XG4gICAgdGhpcy5ncmFudFB1bGxUaHJvdWdoQ2FjaGVBY2Nlc3MoY29kZUJ1aWxkUHJvamVjdCwgZWNyUHVsbFRocm91Z2hDYWNoZVByZWZpeGVzKTtcblxuICAgIGlmIChkb2NrZXJMb2dpblNlY3JldEFybikge1xuICAgICAgY29kZUJ1aWxkUHJvamVjdC5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFsnc2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWUnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtkb2NrZXJMb2dpblNlY3JldEFybl0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZW5jcnlwdGlvbktleSkge1xuICAgICAgZW5jcnlwdGlvbktleS5ncmFudEVuY3J5cHREZWNyeXB0KGNvZGVCdWlsZFByb2plY3Qucm9sZSEpO1xuICAgIH1cblxuICAgIGNvbnN0IGVmZmVjdGl2ZVByb3ZpZGVyID0gcHJvdmlkZXIgPz8gVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3ZpZGVyLmdldE9yQ3JlYXRlKHRoaXMpO1xuICAgIGVmZmVjdGl2ZVByb3ZpZGVyLnJlZ2lzdGVyUHJvamVjdChjb2RlQnVpbGRQcm9qZWN0LCB0aGlzLmVjclJlcG9zaXRvcnksIGVuY3J5cHRpb25LZXkpO1xuXG4gICAgaWYgKHJlcGxpY2FSZWdpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudmFsaWRhdGVSZXBsaWNhUmVnaW9ucyhyZXBsaWNhUmVnaW9ucyk7XG4gICAgICBlZmZlY3RpdmVQcm92aWRlci5yZWdpc3RlclJlcGxpY2F0aW9uKHRoaXMuZWNyUmVwb3NpdG9yeS5yZXBvc2l0b3J5TmFtZSwgcmVwbGljYVJlZ2lvbnMpO1xuICAgIH1cblxuICAgIC8vIFRoZSBDUidzIGNvbnN0cnVjdCBJRCBoYXMgYSBcIlYyXCIgc3VmZml4IHNvIHRoYXQgYSB2MS1kZXBsb3llZCBzdGFja1xuICAgIC8vIHVwZ3JhZGluZyB0byB2MiBzZWVzIGEgTkVXIHJlc291cmNlIChSZXBsYWNlKSwgbm90IGFuIGluLXBsYWNlIHVwZGF0ZVxuICAgIC8vIG9mIHRoZSBvbGQgYEJ1aWxkVHJpZ2dlclJlc291cmNlYC4gQ2xvdWRGb3JtYXRpb24gZm9yYmlkcyBtb2RpZnlpbmcgYVxuICAgIC8vIGN1c3RvbSByZXNvdXJjZSdzIGBTZXJ2aWNlVG9rZW5gIGluLXBsYWNlIChcIk1vZGlmeWluZyBzZXJ2aWNlIHRva2VuIGlzXG4gICAgLy8gbm90IGFsbG93ZWQuXCIpLCBhbmQgdGhlIHNlcnZpY2VUb2tlbiBjaGFuZ2VzIGZyb20gdjEncyBwZXItaW5zdGFuY2VcbiAgICAvLyBwcm92aWRlciB0byB2MidzIHNpbmdsZXRvbiBwcm92aWRlci4gUmVwbGFjZSBkb2RnZXMgdGhlIGNvbnN0cmFpbnQ6XG4gICAgLy8gdGhlIG9sZCBDUiBpcyBkZWxldGVkLCBhbmQgYSBuZXcgb25lIGlzIGNyZWF0ZWQgd2l0aCB0aGUgc2luZ2xldG9uJ3NcbiAgICAvLyBzZXJ2aWNlVG9rZW4g4oCUIGF0IHRoZSBjb3N0IG9mIG9uZSBmcmVzaCBidWlsZCBwZXIgYnVpbGRlciBvbiB1cGdyYWRlLlxuICAgIGNvbnN0IGJ1aWxkVHJpZ2dlclJlc291cmNlID0gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsICdCdWlsZFRyaWdnZXJSZXNvdXJjZVYyJywge1xuICAgICAgc2VydmljZVRva2VuOiBlZmZlY3RpdmVQcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFByb2plY3ROYW1lOiBjb2RlQnVpbGRQcm9qZWN0LnByb2plY3ROYW1lLFxuICAgICAgICBJbWFnZVRhZzogaW1hZ2VUYWcsXG4gICAgICAgIFRyaWdnZXI6IHNvdXJjZUFzc2V0LmFzc2V0SGFzaCxcbiAgICAgICAgUmV0YWluQnVpbGRMb2dzOiByZXRhaW5CdWlsZExvZ3MgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgICBSZXBvc2l0b3J5TmFtZTogdGhpcy5lY3JSZXBvc2l0b3J5LnJlcG9zaXRvcnlOYW1lLFxuICAgICAgICBSZXBsaWNhUmVnaW9uczogSlNPTi5zdHJpbmdpZnkocmVwbGljYVJlZ2lvbnMpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBidWlsZFRyaWdnZXJSZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3koY29kZUJ1aWxkUHJvamVjdCk7XG5cbiAgICAvLyBTQUZFVFk6IHJlZmVyZW5jZSBieSB0YWcsIG5vdCBkaWdlc3QuIFRoZSBsaWZlY3ljbGUgcG9saWN5IGFib3ZlIG5ldmVyXG4gICAgLy8gZGVsZXRlcyB0YWdnZWQgaW1hZ2VzLCBzbyB0aGUgZGlnZXN0IGJlaGluZCB0aGlzIHRhZyBpcyBndWFyYW50ZWVkIHRvXG4gICAgLy8gcmVtYWluIGluIEVDUiBmb3IgdGhlIGxpZmUgb2YgdGhlIHJlcG9zaXRvcnkuXG4gICAgY29uc3QgaW1hZ2VUYWdSZWYgPSBidWlsZFRyaWdnZXJSZXNvdXJjZS5nZXRBdHRTdHJpbmcoJ0ltYWdlVGFnJyk7XG4gICAgdGhpcy5pbWFnZVRhZyA9IGltYWdlVGFnUmVmO1xuICAgIHRoaXMucmVwb3NpdG9yeU5hbWUgPSB0aGlzLmVjclJlcG9zaXRvcnkucmVwb3NpdG9yeU5hbWU7XG4gICAgdGhpcy5jb250YWluZXJJbWFnZSA9IENvbnRhaW5lckltYWdlLmZyb21FY3JSZXBvc2l0b3J5KHRoaXMuZWNyUmVwb3NpdG9yeSwgaW1hZ2VUYWdSZWYpO1xuICAgIHRoaXMuZG9ja2VySW1hZ2VDb2RlID0gRG9ja2VySW1hZ2VDb2RlLmZyb21FY3IodGhpcy5lY3JSZXBvc2l0b3J5LCB7XG4gICAgICB0YWdPckRpZ2VzdDogaW1hZ2VUYWdSZWYsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHRoZSBFQ1IgcmVwb3NpdG9yeSBVUkkgZm9yIGEgZ2l2ZW4gcmVnaW9uLiBUaGUgcmVnaW9uIG11c3RcbiAgICogYmUgZWl0aGVyIHRoZSBwcmltYXJ5IHJlZ2lvbiBvciBvbmUgb2YgYHJlcGxpY2FSZWdpb25zYC5cbiAgICovXG4gIHB1YmxpYyByZXBvc2l0b3J5VXJpRm9yKHJlZ2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0aGlzLmFzc2VydFJlZ2lvbklzS25vd24ocmVnaW9uKTtcbiAgICByZXR1cm4gYCR7dGhpcy5hY2NvdW50SWR9LmRrci5lY3IuJHtyZWdpb259LmFtYXpvbmF3cy5jb20vJHt0aGlzLnJlcG9zaXRvcnlOYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IHRoZSByZXBsaWNhdGVkIHJlcG9zaXRvcnkgYXMgYW4gRUNTLWNvbXBhdGlibGVcbiAgICogYENvbnRhaW5lckltYWdlYCBpbiBhIGNvbnN1bWVyIHNjb3BlICh0eXBpY2FsbHkgYSBzdGFjayBpbiBgcmVnaW9uYCkuXG4gICAqXG4gICAqIFRoZSBjb25zdW1lcidzIHN0YWNrIG11c3QgaGF2ZSBgY3Jvc3NSZWdpb25SZWZlcmVuY2VzOiB0cnVlYCB3aGVuXG4gICAqIGByZWdpb25gIGRpZmZlcnMgZnJvbSB0aGUgYnVpbGRlcidzIHJlZ2lvbi5cbiAgICovXG4gIHB1YmxpYyBjb250YWluZXJJbWFnZUZvcihzY29wZTogQ29uc3RydWN0LCByZWdpb246IHN0cmluZyk6IENvbnRhaW5lckltYWdlIHtcbiAgICByZXR1cm4gQ29udGFpbmVySW1hZ2UuZnJvbUVjclJlcG9zaXRvcnkoXG4gICAgICB0aGlzLmltcG9ydFJlcG9Gb3Ioc2NvcGUsIHJlZ2lvbiksXG4gICAgICB0aGlzLmltYWdlVGFnLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IHRoZSByZXBsaWNhdGVkIHJlcG9zaXRvcnkgYXMgYSBMYW1iZGEtY29tcGF0aWJsZVxuICAgKiBgRG9ja2VySW1hZ2VDb2RlYCBpbiBhIGNvbnN1bWVyIHNjb3BlICh0eXBpY2FsbHkgYSBzdGFjayBpbiBgcmVnaW9uYCkuXG4gICAqXG4gICAqIFRoZSBjb25zdW1lcidzIHN0YWNrIG11c3QgaGF2ZSBgY3Jvc3NSZWdpb25SZWZlcmVuY2VzOiB0cnVlYCB3aGVuXG4gICAqIGByZWdpb25gIGRpZmZlcnMgZnJvbSB0aGUgYnVpbGRlcidzIHJlZ2lvbi5cbiAgICovXG4gIHB1YmxpYyBkb2NrZXJJbWFnZUNvZGVGb3Ioc2NvcGU6IENvbnN0cnVjdCwgcmVnaW9uOiBzdHJpbmcpOiBEb2NrZXJJbWFnZUNvZGUge1xuICAgIHJldHVybiBEb2NrZXJJbWFnZUNvZGUuZnJvbUVjcih0aGlzLmltcG9ydFJlcG9Gb3Ioc2NvcGUsIHJlZ2lvbiksIHtcbiAgICAgIHRhZ09yRGlnZXN0OiB0aGlzLmltYWdlVGFnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbXBvcnRSZXBvRm9yKHNjb3BlOiBDb25zdHJ1Y3QsIHJlZ2lvbjogc3RyaW5nKTogUmVwb3NpdG9yeSB7XG4gICAgdGhpcy5hc3NlcnRSZWdpb25Jc0tub3duKHJlZ2lvbik7XG4gICAgaWYgKHJlZ2lvbiA9PT0gdGhpcy5wcmltYXJ5UmVnaW9uKSByZXR1cm4gdGhpcy5lY3JSZXBvc2l0b3J5O1xuXG4gICAgLy8gSW5jbHVkZSB0aGUgYnVpbGRlcidzIG93biBub2RlLmFkZHIgaW4gdGhlIGltcG9ydCBpZCBzbyB0d28gZGlmZmVyZW50XG4gICAgLy8gYnVpbGRlcnMgaW1wb3J0aW5nIHRoZSBzYW1lIHJlZ2lvbiBpbnRvIHRoZSBzYW1lIHNjb3BlIGVhY2ggZ2V0IHRoZWlyXG4gICAgLy8gb3duIFJlcG9zaXRvcnkgY2hpbGQgKG90aGVyd2lzZSB0aGUgc2Vjb25kIGNhbGwgd291bGQgY29sbGlkZSB3aXRoIHRoZVxuICAgIC8vIGZpcnN0IGFuZCByZXR1cm4gdGhlIHdyb25nIGJ1aWxkZXIncyByZXBvKS5cbiAgICBjb25zdCBpbXBvcnRJZCA9IGBJbXBvcnRlZFJlcG8ke3JlZ2lvbn0ke3RoaXMubm9kZS5hZGRyfWA7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBzY29wZS5ub2RlLnRyeUZpbmRDaGlsZChpbXBvcnRJZCk7XG4gICAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3RpbmcgYXMgUmVwb3NpdG9yeTtcblxuICAgIHJldHVybiBSZXBvc2l0b3J5LmZyb21SZXBvc2l0b3J5QXR0cmlidXRlcyhzY29wZSwgaW1wb3J0SWQsIHtcbiAgICAgIHJlcG9zaXRvcnlOYW1lOiB0aGlzLnJlcG9zaXRvcnlOYW1lLFxuICAgICAgcmVwb3NpdG9yeUFybjogU3RhY2sub2Yoc2NvcGUpLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6ICdlY3InLFxuICAgICAgICByZXNvdXJjZTogJ3JlcG9zaXRvcnknLFxuICAgICAgICByZXNvdXJjZU5hbWU6IHRoaXMucmVwb3NpdG9yeU5hbWUsXG4gICAgICAgIHJlZ2lvbixcbiAgICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50SWQsXG4gICAgICB9KSxcbiAgICB9KSBhcyBSZXBvc2l0b3J5O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NlcnRSZWdpb25Jc0tub3duKHJlZ2lvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHJlZ2lvbiA9PT0gdGhpcy5wcmltYXJ5UmVnaW9uKSByZXR1cm47XG4gICAgaWYgKHRoaXMucmVwbGljYVJlZ2lvbnMuaW5jbHVkZXMocmVnaW9uKSkgcmV0dXJuO1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBSZWdpb24gXCIke3JlZ2lvbn1cIiBpcyBub3QgdGhlIHByaW1hcnkgcmVnaW9uICgke3RoaXMucHJpbWFyeVJlZ2lvbn0pIGAgK1xuICAgICAgYG9yIG9uZSBvZiB0aGUgY29uZmlndXJlZCByZXBsaWNhUmVnaW9ucyAoJHt0aGlzLnJlcGxpY2FSZWdpb25zLmpvaW4oJywgJykgfHwgJzxub25lPid9KS4gYCArXG4gICAgICAnQWRkIHRoZSByZWdpb24gdG8gdGhlIGJ1aWxkZXJcXCdzIHJlcGxpY2FSZWdpb25zIHByb3AgdG8gbWFrZSBpdCBhdmFpbGFibGUuJyxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJlcGxpY2FSZWdpb25zKHJlcGxpY2FSZWdpb25zOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgcHJpbWFyeVBhcnRpdGlvbiA9IHN0YWNrLnBhcnRpdGlvbjtcbiAgICBmb3IgKGNvbnN0IHJlZ2lvbiBvZiByZXBsaWNhUmVnaW9ucykge1xuICAgICAgaWYgKHJlZ2lvbiA9PT0gdGhpcy5wcmltYXJ5UmVnaW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgcmVwbGljYVJlZ2lvbnMgY2Fubm90IGluY2x1ZGUgdGhlIHByaW1hcnkgcmVnaW9uIFwiJHt0aGlzLnByaW1hcnlSZWdpb259XCIuIGAgK1xuICAgICAgICAgICdSZW1vdmUgaXQgZnJvbSB0aGUgbGlzdC4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLy8gUGFydGl0aW9uIGNhbm5vdCBiZSBjbGVhbmx5IGluZmVycmVkIGZyb20gcmVnaW9uIGFsb25lIGF0IHN5bnRoIHRpbWVcbiAgICAgIC8vIChpdCdzIGEgQ0RLIHBzZXVkby1wYXJhbWV0ZXIgYW5kIG1heSBiZSBhIHRva2VuKS4gV2UgZG8gdGhlIGJlc3QtZWZmb3J0XG4gICAgICAvLyBjaGVjazogaWYgYm90aCBwYXJ0aXRpb24gdmFsdWVzIGFyZSBjb25jcmV0ZSBhbmQgdGhleSBkaWZmZXIsIGZhaWwuXG4gICAgICAvLyBDcm9zcy1wYXJ0aXRpb24gcmVwbGljYXRpb24gaXMgdW5zdXBwb3J0ZWQgYnkgRUNSLlxuICAgICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQocHJpbWFyeVBhcnRpdGlvbikpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRQYXJ0aXRpb24gPSBpbmZlclBhcnRpdGlvbihyZWdpb24pO1xuICAgICAgICBpZiAoZXhwZWN0ZWRQYXJ0aXRpb24gJiYgZXhwZWN0ZWRQYXJ0aXRpb24gIT09IHByaW1hcnlQYXJ0aXRpb24pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ3Jvc3MtcGFydGl0aW9uIEVDUiByZXBsaWNhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiAnICtcbiAgICAgICAgICAgIGBQcmltYXJ5IHBhcnRpdGlvbiBpcyBcIiR7cHJpbWFyeVBhcnRpdGlvbn1cIiBidXQgcmVwbGljYSByZWdpb24gYCArXG4gICAgICAgICAgICBgXCIke3JlZ2lvbn1cIiBhcHBlYXJzIHRvIGJlIGluIHBhcnRpdGlvbiBcIiR7ZXhwZWN0ZWRQYXJ0aXRpb259XCIuYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBncmFudEVjckFjY2Vzcyhwcm9qZWN0OiBQcm9qZWN0KTogdm9pZCB7XG4gICAgdGhpcy5lY3JSZXBvc2l0b3J5LmdyYW50UHVsbFB1c2gocHJvamVjdCk7XG4gICAgcHJvamVjdC5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdlY3I6R2V0QXV0aG9yaXphdGlvblRva2VuJyxcbiAgICAgICAgICAnZWNyOkdldERvd25sb2FkVXJsRm9yTGF5ZXInLFxuICAgICAgICAgICdlY3I6QmF0Y2hDaGVja0xheWVyQXZhaWxhYmlsaXR5JyxcbiAgICAgICAgICAnZWNyOkJhdGNoR2V0SW1hZ2UnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JhbnRQdWxsVGhyb3VnaENhY2hlQWNjZXNzKHByb2plY3Q6IFByb2plY3QsIHByZWZpeGVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICghcHJlZml4ZXMgfHwgcHJlZml4ZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICBwcm9qZWN0LmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2VjcjpCYXRjaEdldEltYWdlJyxcbiAgICAgICAgICAnZWNyOkdldERvd25sb2FkVXJsRm9yTGF5ZXInLFxuICAgICAgICAgICdlY3I6QmF0Y2hDaGVja0xheWVyQXZhaWxhYmlsaXR5JyxcbiAgICAgICAgICAnZWNyOkJhdGNoSW1wb3J0VXBzdHJlYW1JbWFnZScsXG4gICAgICAgICAgJ2VjcjpDcmVhdGVSZXBvc2l0b3J5JyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBwcmVmaXhlcy5tYXAoXG4gICAgICAgICAgKHByZWZpeCkgPT4gYGFybjphd3M6ZWNyOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OnJlcG9zaXRvcnkvJHtwcmVmaXh9LypgLFxuICAgICAgICApLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JhbnRCdWlsZExvZ3NBY2Nlc3MocHJvamVjdDogUHJvamVjdCwgcmV0YWluQnVpbGRMb2dzOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCFyZXRhaW5CdWlsZExvZ3MpIHJldHVybjtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgIHByb2plY3QuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFsnbG9nczpDcmVhdGVMb2dHcm91cCcsICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsICdsb2dzOlB1dExvZ0V2ZW50cyddLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czpsb2dzOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OmxvZy1ncm91cDoke0JVSUxEX0xPR19HUk9VUF9QUkVGSVh9JHtwcm9qZWN0LnByb2plY3ROYW1lfWAsXG4gICAgICAgICAgYGFybjphd3M6bG9nczoke3N0YWNrLnJlZ2lvbn06JHtzdGFjay5hY2NvdW50fTpsb2ctZ3JvdXA6JHtCVUlMRF9MT0dfR1JPVVBfUFJFRklYfSR7cHJvamVjdC5wcm9qZWN0TmFtZX06KmAsXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQmVzdC1lZmZvcnQgcGFydGl0aW9uIGluZmVyZW5jZSBmcm9tIGFuIEFXUyByZWdpb24gbmFtZS4gUmV0dXJuc1xuICogdW5kZWZpbmVkIGlmIHRoZSByZWdpb24gZG9lc24ndCBsb29rIGxpa2UgYSBrbm93biBwYXJ0aXRpb24gcHJlZml4IOKAlFxuICogY2FsbGVycyBzaG91bGQgdHJlYXQgdGhhdCBhcyBcInNraXAgdGhlIHBhcnRpdGlvbiBjaGVja1wiLlxuICovXG5mdW5jdGlvbiBpbmZlclBhcnRpdGlvbihyZWdpb246IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChyZWdpb24uc3RhcnRzV2l0aCgnY24tJykpIHJldHVybiAnYXdzLWNuJztcbiAgaWYgKHJlZ2lvbi5zdGFydHNXaXRoKCd1cy1nb3YtJykpIHJldHVybiAnYXdzLXVzLWdvdic7XG4gIGlmIChyZWdpb24uc3RhcnRzV2l0aCgndXMtaXNvLScpKSByZXR1cm4gJ2F3cy1pc28nO1xuICBpZiAocmVnaW9uLnN0YXJ0c1dpdGgoJ3VzLWlzb2ItJykpIHJldHVybiAnYXdzLWlzby1iJztcbiAgaWYgKC9eW2Etel17Mn0tW2Etel0rLVxcZCskLy50ZXN0KHJlZ2lvbikpIHJldHVybiAnYXdzJztcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaUNBQWlDO0FBRWpDLDZDQUEyRDtBQUMzRCw2REFNbUM7QUFFbkMsaURBQWlEO0FBQ2pELGlEQUFxRDtBQUNyRCxpREFBc0Q7QUFDdEQsaURBQTBDO0FBQzFDLHVEQUF5RDtBQUV6RCw2REFBa0Q7QUFDbEQsMkNBQXVDO0FBRXZDLDZDQUErRDtBQUMvRCwyQ0FBcUQ7QUFDckQsK0JBQW1EO0FBQ25ELHlDQUFrRTtBQTBLbEU7Ozs7R0FJRztBQUNILE1BQWEsNEJBQTZCLFNBQVEsc0JBQVM7SUEwQ3pELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0M7UUFDaEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLEVBQ0osSUFBSSxFQUFFLFVBQVUsRUFDaEIsU0FBUyxFQUNULG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsY0FBYyxFQUNkLGVBQWUsRUFDZixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGFBQWEsR0FBRyxLQUFLLEVBQ3JCLE9BQU8sRUFDUCxJQUFJLEVBQUUsVUFBVSxFQUNoQixhQUFhLEdBQUcsS0FBSyxFQUNyQixhQUFhLEVBQ2IsUUFBUSxHQUFHLGFBQWEsRUFDeEIsUUFBUSxFQUNSLDJCQUEyQixFQUMzQixlQUFlLEdBQUcsS0FBSyxFQUN2QixjQUFjLEdBQUcsRUFBRSxHQUNwQixHQUFHLEtBQUssQ0FBQztRQUVWLE1BQU0sS0FBSyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEdBQUcsY0FBYyxD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Q0FBQyxTQUFTLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNuRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDdEQsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgU3RhY2ssIFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtcbiAgUHJvamVjdCxcbiAgU291cmNlLFxuICBMaW51eEJ1aWxkSW1hZ2UsXG4gIExpbnV4QXJtQnVpbGRJbWFnZSxcbiAgQnVpbGRTcGVjLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCB7IElWcGMsIElTZWN1cml0eUdyb3VwLCBTdWJuZXRTZWxlY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNyJztcbmltcG9ydCB7IENvbnRhaW5lckltYWdlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcyc7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEtleSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHsgRG9ja2VySW1hZ2VDb2RlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBJTG9nR3JvdXAgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBBc3NldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmltcG9ydCB7IGJ1aWxkQnVpbGRTcGVjLCByZXNvbHZlRXhjbHVkZXMgfSBmcm9tICcuL2J1aWxkLXNwZWMnO1xuaW1wb3J0IHsgQlVJTERfTE9HX0dST1VQX1BSRUZJWCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGNyZWF0ZUJ1aWxkZXJFY3JSZXBvc2l0b3J5IH0gZnJvbSAnLi9lY3InO1xuaW1wb3J0IHsgVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3ZpZGVyIH0gZnJvbSAnLi9wcm92aWRlcic7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIGBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyYCBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgRG9ja2VyZmlsZSBvciBzb3VyY2UgY29kZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQnVpbGQgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIERvY2tlciBidWlsZCBwcm9jZXNzLlxuICAgKiBUaGVzZSBhcmUgdHJhbnNmb3JtZWQgaW50byBgLS1idWlsZC1hcmcgS0VZPVZBTFVFYCBmbGFncy5cbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIFRPS0VOOiAnbXktc2VjcmV0LXRva2VuJyxcbiAgICogICBFTlY6ICdwcm9kdWN0aW9uJ1xuICAgKiB9XG4gICAqL1xuICByZWFkb25seSBidWlsZEFyZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBBV1MgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIERvY2tlciBsb2dpbiBjcmVkZW50aWFscy5cbiAgICogVGhlIHNlY3JldCBtdXN0IHN0b3JlIGEgSlNPTiBvYmplY3Q6IGB7XCJ1c2VybmFtZVwiOlwiLi4uXCIsXCJwYXNzd29yZFwiOlwiLi4uXCJ9YC5cbiAgICogTXVzdCBiZSBpbiB0aGUgc2FtZSByZWdpb24gYXMgdGhlIHN0YWNrLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIERvY2tlciBIdWIgbG9naW4uXG4gICAqL1xuICByZWFkb25seSBkb2NrZXJMb2dpblNlY3JldEFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFZQQyBpbiB3aGljaCB0aGUgQ29kZUJ1aWxkIHByb2plY3Qgd2lsbCBiZSBkZXBsb3llZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBDb2RlQnVpbGQgdXNlcyBwdWJsaWMgaW50ZXJuZXQuXG4gICAqL1xuICByZWFkb25seSB2cGM/OiBJVnBjO1xuXG4gIC8qKlxuICAgKiBTZWN1cml0eSBncm91cHMgYXR0YWNoZWQgdG8gdGhlIENvZGVCdWlsZCBwcm9qZWN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHNlY3VyaXR5IGdyb3VwcyBhdHRhY2hlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogSVNlY3VyaXR5R3JvdXBbXTtcblxuICAvKipcbiAgICogU3VibmV0IHNlbGVjdGlvbiB3aXRoaW4gdGhlIFZQQy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBbGwgc3VibmV0cyBpbiB0aGUgVlBDLlxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0U2VsZWN0aW9uPzogU3VibmV0U2VsZWN0aW9uO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gY29tbWFuZHMgdG8gcnVuIGR1cmluZyB0aGUgaW5zdGFsbCBwaGFzZSBvZiBDb2RlQnVpbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gYWRkaXRpb25hbCBpbnN0YWxsIGNvbW1hbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBjb21tYW5kcyB0byBydW4gZHVyaW5nIHRoZSBwcmVfYnVpbGQgcGhhc2Ugb2YgQ29kZUJ1aWxkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGFkZGl0aW9uYWwgcHJlLWJ1aWxkIGNvbW1hbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlQnVpbGRDb21tYW5kcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBLTVMgZW5jcnlwdGlvbiBmb3IgdGhlIEVDUiByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkga21zRW5jcnlwdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZpbGUgcGF0aHMgaW4gdGhlIERvY2tlciBkaXJlY3RvcnkgdG8gZXhjbHVkZSBmcm9tIHRoZSBidWlsZCBhc3NldC5cbiAgICogRmFsbHMgYmFjayB0byBgLmRvY2tlcmlnbm9yZWAgaWYgcHJlc2VudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBmaWxlIHBhdGggZXhjbHVzaW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgRG9ja2VyZmlsZSAocGFzc2VkIGFzIGAtZmApLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnRG9ja2VyZmlsZS5wcm9kdWN0aW9uJ1xuICAgKiBAZGVmYXVsdCAnRG9ja2VyZmlsZSdcbiAgICovXG4gIHJlYWRvbmx5IGZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCBkaXNhYmxlcyBEb2NrZXIgbGF5ZXIgY2FjaGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlRGlzYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDbG91ZFdhdGNoIGxvZyBncm91cCBmb3IgQ29kZUJ1aWxkIGJ1aWxkIGxvZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ29kZUJ1aWxkIGRlZmF1bHQgbG9nZ2luZy5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkTG9nR3JvdXA/OiBJTG9nR3JvdXA7XG5cbiAgLyoqXG4gICAqIFRhcmdldCBwbGF0Zm9ybSBmb3IgdGhlIERvY2tlciBpbWFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgJ2xpbnV4L2FtZDY0J1xuICAgKi9cbiAgcmVhZG9ubHkgcGxhdGZvcm0/OiAnbGludXgvYW1kNjQnIHwgJ2xpbnV4L2FybTY0JztcblxuICAvKipcbiAgICogU2hhcmVkIHByb3ZpZGVyIGZvciB0aGUgY3VzdG9tIHJlc291cmNlIExhbWJkYXMuXG4gICAqXG4gICAqIFBhc3MgYFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXJQcm92aWRlci5nZXRPckNyZWF0ZSh0aGlzLCB7IHF1ZXJ5SW50ZXJ2YWwgfSlgXG4gICAqIGlmIHlvdSBuZWVkIGEgbm9uLWRlZmF1bHQgcXVlcnkgaW50ZXJ2YWwuIE90aGVyd2lzZSwgdGhlIGNvbnN0cnVjdCB3aWxsXG4gICAqIGNhbGwgYGdldE9yQ3JlYXRlKHRoaXMpYCBpdHNlbGYgYW5kIHJldXNlIHRoZSBwZXItc3RhY2sgc2luZ2xldG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFBlci1zdGFjayBzaW5nbGV0b24gcHJvdmlkZXIsIGNyZWF0ZWQgb24gZmlyc3QgdXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXI/OiBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIEVDUiBwdWxsLXRocm91Z2ggY2FjaGUgcmVwb3NpdG9yeSBwcmVmaXhlcyB0byBncmFudCBwdWxsIGFjY2VzcyB0by5cbiAgICpcbiAgICogQGV4YW1wbGUgWydkb2NrZXItaHViJywgJ2doY3InXVxuICAgKiBAZGVmYXVsdCAtIE5vIHB1bGwtdGhyb3VnaCBjYWNoZSBhY2Nlc3MuXG4gICAqL1xuICByZWFkb25seSBlY3JQdWxsVGhyb3VnaENhY2hlUHJlZml4ZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIGNyZWF0ZXMgYSBDbG91ZFdhdGNoIGxvZyBncm91cCBvdXRzaWRlIG9mIENsb3VkRm9ybWF0aW9uXG4gICAqIChgL2RvY2tlci1idWlsZGVyLzxwcm9qZWN0TmFtZT5gKSBhbmQgZGlyZWN0cyBDb2RlQnVpbGQgb3V0cHV0IHRoZXJlLlxuICAgKiBTdXJ2aXZlcyBzdGFjayByb2xsYmFja3MgZm9yIGRlYnVnZ2luZy4gNy1kYXkgcmV0ZW50aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmV0YWluQnVpbGRMb2dzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBBV1MgcmVnaW9ucyB0byByZXBsaWNhdGUgdGhlIGJ1aWx0IGltYWdlIHRvIHZpYSBFQ1Inc1xuICAgKiBuYXRpdmUgcmVnaXN0cnkgcmVwbGljYXRpb24uIFRoZSBpbWFnZSBpcyBwdXNoZWQgdG8gdGhlIHByaW1hcnlcbiAgICogcmVnaW9uJ3MgRUNSIGFzIHVzdWFsOyBFQ1IgYXN5bmNocm9ub3VzbHkgcmVwbGljYXRlcyB0aGUgc2FtZVxuICAgKiBgcmVwb3NpdG9yeU5hbWVgICsgYGltYWdlVGFnYCB0byBlYWNoIHJlZ2lvbiBsaXN0ZWQgaGVyZS5cbiAgICpcbiAgICogQ29uc3VtZXJzIGluIGFub3RoZXIgcmVnaW9uIChhIExhbWJkYSBpbiBgdXMtd2VzdC0yYCByZWZlcmVuY2luZyBhblxuICAgKiBpbWFnZSBidWlsdCBpbiBgdXMtZWFzdC0xYCkgY2FuIHVzZSBgZG9ja2VySW1hZ2VDb2RlRm9yKHJlZ2lvbilgIG9yXG4gICAqIGBjb250YWluZXJJbWFnZUZvcihyZWdpb24pYCB0byBpbXBvcnQgdGhlIHJlcGxpY2F0ZWQgaW1hZ2UuXG4gICAqXG4gICAqIFRoZSBjdXN0b20gcmVzb3VyY2Ugd2FpdHMgZm9yIHJlcGxpY2F0aW9uIHRvIGNvbXBsZXRlIGJlZm9yZVxuICAgKiBzaWduYWxsaW5nIGRlcGxveS1jb21wbGV0ZSwgc28gZG93bnN0cmVhbSBzdGFja3MgY2FuIHNhZmVseSBkZXBsb3lcbiAgICogaW1tZWRpYXRlbHkgYWZ0ZXIuXG4gICAqXG4gICAqICoqQ2F2ZWF0czoqKlxuICAgKiAtIENyb3NzLXJlZ2lvbiByZXBsaWNhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJldHdlZW4gQVdTIHBhcnRpdGlvbnMuXG4gICAqIC0gUmVwbGljYXMgZG8gKipub3QqKiBpbmhlcml0IHRoZSBwcmltYXJ5J3MgZW5jcnlwdGlvbiAoZGVmYXVsdHMgdG9cbiAgICogICBBRVMtMjU2KSwgbGlmZWN5Y2xlIHBvbGljaWVzLCBvciByZXBvc2l0b3J5IHBvbGljaWVzLlxuICAgKiAtIFJlcGxpY2F0ZWQgcmVwb3NpdG9yaWVzIHBlcnNpc3Qgb24gc3RhY2sgZGVsZXRpb24g4oCUIEFXUyBkb2VzIG5vdFxuICAgKiAgIGF1dG8tZGVsZXRlIHRoZW0uIENsZWFuIHVwIG1hbnVhbGx5IHZpYSB0aGUgRUNSIGNvbnNvbGUgLyBDTEkgaWZcbiAgICogICBuZWVkZWQuXG4gICAqIC0gQm90aCB0aGUgYnVpbGRlciBzdGFjayBhbmQgYW55IGNvbnN1bWVyIHN0YWNrIGluIGFub3RoZXIgcmVnaW9uXG4gICAqICAgbXVzdCBzZXQgYGNyb3NzUmVnaW9uUmVmZXJlbmNlczogdHJ1ZWAgZm9yIHRoZSBpbWFnZSB0YWcgdG8gZmxvdy5cbiAgICogLSBTdGFja3MgbXVzdCBoYXZlIGEgY29uY3JldGUgcmVnaW9uIChgZW52OiB7IGFjY291bnQsIHJlZ2lvbiB9YCksXG4gICAqICAgbm90IHRoZSBlbnYtYWdub3N0aWMgZGVmYXVsdC5cbiAgICpcbiAgICogQGV4YW1wbGUgWyd1cy13ZXN0LTInLCAnZXUtd2VzdC0xJ11cbiAgICogQGRlZmF1bHQgW10gLSBubyByZXBsaWNhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbGljYVJlZ2lvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIENESyBjb25zdHJ1Y3QgdG8gYnVpbGQgYW5kIHB1c2ggRG9ja2VyIGltYWdlcyB0byBhbiBFQ1IgcmVwb3NpdG9yeSB1c2luZ1xuICogQ29kZUJ1aWxkIGFuZCBMYW1iZGEgY3VzdG9tIHJlc291cmNlcywgKip0aGVuKiogcmV0cmlldmUgdGhlIGZpbmFsIGltYWdlIHRhZ1xuICogc28gdGhhdCBFQ1MvTGFtYmRhIHJlZmVyZW5jZXMgdXNlIHRoZSBleGFjdCBidWlsdCBpbWFnZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKiogVGhlIEVDUiByZXBvc2l0b3J5IHRoYXQgc3RvcmVzIHRoZSByZXN1bHRpbmcgRG9ja2VyIGltYWdlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGVjclJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG5cbiAgLyoqIEVDUy1jb21wYXRpYmxlIGNvbnRhaW5lciBpbWFnZSByZWZlcmVuY2UgKHByaW1hcnkgcmVnaW9uKS4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbnRhaW5lckltYWdlOiBDb250YWluZXJJbWFnZTtcblxuICAvKiogTGFtYmRhLWNvbXBhdGlibGUgRG9ja2VySW1hZ2VDb2RlIHJlZmVyZW5jZSAocHJpbWFyeSByZWdpb24pLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZG9ja2VySW1hZ2VDb2RlOiBEb2NrZXJJbWFnZUNvZGU7XG5cbiAgLyoqIFRoZSBFQ1IgcmVwb3NpdG9yeSBuYW1lIOKAlCBwcmVzZXJ2ZWQgYWNyb3NzIHJlcGxpY2EgcmVnaW9ucy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlcG9zaXRvcnlOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvbHZlZCBpbWFnZSB0YWcgKENGTiB0b2tlbjsgYXZhaWxhYmxlIGF0IGRlcGxveSB0aW1lKS5cbiAgICpcbiAgICogU2FmZSB0byB1c2UgYW55d2hlcmUgdGhlIGNvbnN1bWVyIGlzIGluIHRoZSAqKnNhbWUgcmVnaW9uKiogYXMgdGhlXG4gICAqIGJ1aWxkZXIgKHNhbWUgc3RhY2sgb3IgZGlmZmVyZW50IHN0YWNrKS4gRm9yIGNyb3NzLXJlZ2lvbiBjb25zdW1lcnNcbiAgICogdXNlIGBpbWFnZVRhZ1BsYWluYCDigJQgYGltYWdlVGFnYCB3b3VsZCB0cmlnZ2VyIENESydzXG4gICAqIGBDcm9zc1JlZ2lvbkV4cG9ydFdyaXRlcmAgYW5kIHdlZGdlIG9uIGFueSB0YWcgY2hhbmdlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGltYWdlVGFnOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXRlcm1pbmlzdGljIGltYWdlIHRhZyBhcyBhIHBsYWluIHN5bnRoLXRpbWUgc3RyaW5nIChubyBDRk4gdG9rZW4pLlxuICAgKlxuICAgKiBTYW1lIHZhbHVlIGFzIGBpbWFnZVRhZ2AgYnV0IHJlc29sdmVkIGltbWVkaWF0ZWx5IOKAlCB1c2VmdWwgZm9yIGNyb3NzLXJlZ2lvblxuICAgKiBjb25zdW1lcnMsIHdoZXJlIHRoZSBDRk4tdG9rZW4gZm9ybSB3b3VsZCB0cmlnZ2VyIENESyB0byBhdXRvLWNyZWF0ZSBhXG4gICAqIGBDcm9zc1JlZ2lvbkV4cG9ydFdyaXRlcmAuIFRoYXQgd3JpdGVyIGhhcyBhbiBvdmVyLXN0cmljdCBzYWZldHkgY2hlY2tcbiAgICogdGhhdCBmYWlscyBhbnkgdXBkYXRlIHdoZXJlIHRoZSB0YWcgdmFsdWUgY2hhbmdlcyAoaS5lLiBldmVyeSByZWFsIGNvZGVcbiAgICogY2hhbmdlKSwgd2VkZ2luZyB0aGUgc3RhY2sgaW4gYFVQREFURV9ST0xMQkFDS19GQUlMRURgLlxuICAgKlxuICAgKiBgY29udGFpbmVySW1hZ2VGb3JgIGFuZCBgZG9ja2VySW1hZ2VDb2RlRm9yYCB1c2UgdGhpcyBzdHJpbmcgYXV0b21hdGljYWxseVxuICAgKiB3aGVuIHRoZSBjb25zdW1lciByZWdpb24gZGlmZmVycyBmcm9tIHRoZSBwcmltYXJ5IHJlZ2lvbiwgc28gY2FsbGVyc1xuICAgKiBub3JtYWxseSBkb24ndCByZWZlcmVuY2UgdGhpcyBwcm9wZXJ0eSBkaXJlY3RseS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbWFnZVRhZ1BsYWluOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwcmltYXJ5UmVnaW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWNjb3VudElkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVwbGljYVJlZ2lvbnM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qge1xuICAgICAgcGF0aDogc291cmNlUGF0aCxcbiAgICAgIGJ1aWxkQXJncyxcbiAgICAgIGRvY2tlckxvZ2luU2VjcmV0QXJuLFxuICAgICAgdnBjLFxuICAgICAgc2VjdXJpdHlHcm91cHMsXG4gICAgICBzdWJuZXRTZWxlY3Rpb24sXG4gICAgICBpbnN0YWxsQ29tbWFuZHMsXG4gICAgICBwcmVCdWlsZENvbW1hbmRzLFxuICAgICAga21zRW5jcnlwdGlvbiA9IGZhbHNlLFxuICAgICAgZXhjbHVkZSxcbiAgICAgIGZpbGU6IGRvY2tlckZpbGUsXG4gICAgICBjYWNoZURpc2FibGVkID0gZmFsc2UsXG4gICAgICBidWlsZExvZ0dyb3VwLFxuICAgICAgcGxhdGZvcm0gPSAnbGludXgvYW1kNjQnLFxuICAgICAgcHJvdmlkZXIsXG4gICAgICBlY3JQdWxsVGhyb3VnaENhY2hlUHJlZml4ZXMsXG4gICAgICByZXRhaW5CdWlsZExvZ3MgPSBmYWxzZSxcbiAgICAgIHJlcGxpY2FSZWdpb25zID0gW10sXG4gICAgfSA9IHByb3BzO1xuXG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICB0aGlzLnByaW1hcnlSZWdpb24gPSBzdGFjay5yZWdpb247XG4gICAgdGhpcy5hY2NvdW50SWQgPSBzdGFjay5hY2NvdW50O1xuICAgIHRoaXMucmVwbGljYVJlZ2lvbnMgPSBbLi4ucmVwbGljYVJlZ2lvbnNdO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9IGttc0VuY3J5cHRpb25cbiAgICAgID8gbmV3IEtleSh0aGlzLCAnRWNyRW5jcnlwdGlvbktleScsIHsgZW5hYmxlS2V5Um90YXRpb246IHRydWUgfSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5lY3JSZXBvc2l0b3J5ID0gY3JlYXRlQnVpbGRlckVjclJlcG9zaXRvcnkodGhpcywgJ0VDUlJlcG9zaXRvcnknLCB7XG4gICAgICBrbXNFbmNyeXB0aW9uLFxuICAgICAgZW5jcnlwdGlvbktleSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRvY2tlckZpbGVOYW1lID0gZG9ja2VyRmlsZSA/PyAnRG9ja2VyZmlsZSc7XG4gICAgY29uc3QgZWZmZWN0aXZlRXhjbHVkZSA9IHJlc29sdmVFeGNsdWRlcyhzb3VyY2VQYXRoLCBkb2NrZXJGaWxlTmFtZSwgZXhjbHVkZSk7XG5cbiAgICBjb25zdCBzb3VyY2VBc3NldCA9IG5ldyBBc3NldCh0aGlzLCAnU291cmNlQXNzZXQnLCB7XG4gICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgZXhjbHVkZTogZWZmZWN0aXZlRXhjbHVkZSxcbiAgICB9KTtcblxuICAgIC8vIERldGVybWluaXN0aWMgaW1hZ2UgdGFnOiBhIGhhc2ggb2YgZXZlcnkgaW5wdXQgdGhhdCBtYXRlcmlhbGx5IGFmZmVjdHNcbiAgICAvLyB0aGUgYnVpbHQgaW1hZ2UuIFN0YWJsZSBhY3Jvc3Mgc3ludGhzIOKGkiBubyBzcHVyaW91cyByZWJ1aWxkcywgYW5kXG4gICAgLy8gY3Jvc3MtcmVnaW9uIFNTTSBleHBvcnRzIGRvbid0IGNodXJuIGJldHdlZW4gZGVwbG95cyAod2hpY2ggdXNlZCB0b1xuICAgIC8vIHdlZGdlIHRoZSBDREsgQ3Jvc3NSZWdpb25FeHBvcnRSZWFkZXIvV3JpdGVyIHdoZW4gYSBkZXBsb3kgd2FzIHJldHJpZWRcbiAgICAvLyBhZnRlciBhIHJvbGxiYWNrKS5cbiAgICBjb25zdCBpbWFnZVRhZyA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgYXNzZXRIYXNoOiBzb3VyY2VBc3NldC5hc3NldEhhc2gsXG4gICAgICBkb2NrZXJGaWxlOiBkb2NrZXJGaWxlTmFtZSxcbiAgICAgIGJ1aWxkQXJnczogYnVpbGRBcmdzID8/IHt9LFxuICAgICAgcGxhdGZvcm0sXG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IGluc3RhbGxDb21tYW5kcyA/PyBbXSxcbiAgICAgIHByZUJ1aWxkQ29tbWFuZHM6IHByZUJ1aWxkQ29tbWFuZHMgPz8gW10sXG4gICAgICBjYWNoZURpc2FibGVkLFxuICAgICAgZG9ja2VyTG9naW5TZWNyZXRBcm46IGRvY2tlckxvZ2luU2VjcmV0QXJuID8/IG51bGwsXG4gICAgICBlY3JQdWxsVGhyb3VnaENhY2hlUHJlZml4ZXM6IGVjclB1bGxUaHJvdWdoQ2FjaGVQcmVmaXhlcyA/PyBbXSxcbiAgICB9KSkuZGlnZXN0KCdoZXgnKTtcblxuICAgIGNvbnN0IGJ1aWxkU3BlY09iaiA9IGJ1aWxkQnVpbGRTcGVjKHtcbiAgICAgIGltYWdlVGFnLFxuICAgICAgZG9ja2VyRmlsZSxcbiAgICAgIGJ1aWxkQXJncyxcbiAgICAgIGRvY2tlckxvZ2luU2VjcmV0QXJuLFxuICAgICAgaW5zdGFsbENvbW1hbmRzLFxuICAgICAgcHJlQnVpbGRDb21tYW5kcyxcbiAgICAgIGNhY2hlRGlzYWJsZWQsXG4gICAgICBwbGF0Zm9ybSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvZGVCdWlsZEltYWdlID0gcGxhdGZvcm0gPT09ICdsaW51eC9hcm02NCdcbiAgICAgID8gTGludXhBcm1CdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yX1NUQU5EQVJEXzNfMFxuICAgICAgOiBMaW51eEJ1aWxkSW1hZ2UuU1RBTkRBUkRfN18wO1xuXG4gICAgY29uc3QgY29kZUJ1aWxkUHJvamVjdCA9IG5ldyBQcm9qZWN0KHRoaXMsICdDb2RlQnVpbGRQcm9qZWN0Jywge1xuICAgICAgc291cmNlOiBTb3VyY2UuczMoe1xuICAgICAgICBidWNrZXQ6IHNvdXJjZUFzc2V0LmJ1Y2tldCxcbiAgICAgICAgcGF0aDogc291cmNlQXNzZXQuczNPYmplY3RLZXksXG4gICAgICB9KSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IGNvZGVCdWlsZEltYWdlLFxuICAgICAgICBwcml2aWxlZ2VkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgIEVDUl9SRVBPX1VSSTogeyB2YWx1ZTogdGhpcy5lY3JSZXBvc2l0b3J5LnJlcG9zaXRvcnlVcmkgfSxcbiAgICAgIH0sXG4gICAgICBidWlsZFNwZWM6IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KGJ1aWxkU3BlY09iaiksXG4gICAgICAuLi4oYnVpbGRMb2dHcm91cCAmJiB7XG4gICAgICAgIGxvZ2dpbmc6IHsgY2xvdWRXYXRjaDogeyBsb2dHcm91cDogYnVpbGRMb2dHcm91cCB9IH0sXG4gICAgICB9KSxcbiAgICAgIHZwYyxcbiAgICAgIHNlY3VyaXR5R3JvdXBzLFxuICAgICAgc3VibmV0U2VsZWN0aW9uLFxuICAgIH0pO1xuXG4gICAgdGhpcy5ncmFudEJ1aWxkTG9nc0FjY2Vzcyhjb2RlQnVpbGRQcm9qZWN0LCByZXRhaW5CdWlsZExvZ3MpO1xuICAgIHRoaXMuZ3JhbnRFY3JBY2Nlc3MoY29kZUJ1aWxkUHJvamVjdCk7XG4gICAgdGhpcy5ncmFudFB1bGxUaHJvdWdoQ2FjaGVBY2Nlc3MoY29kZUJ1aWxkUHJvamVjdCwgZWNyUHVsbFRocm91Z2hDYWNoZVByZWZpeGVzKTtcblxuICAgIGlmIChkb2NrZXJMb2dpblNlY3JldEFybikge1xuICAgICAgY29kZUJ1aWxkUHJvamVjdC5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFsnc2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWUnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtkb2NrZXJMb2dpblNlY3JldEFybl0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZW5jcnlwdGlvbktleSkge1xuICAgICAgZW5jcnlwdGlvbktleS5ncmFudEVuY3J5cHREZWNyeXB0KGNvZGVCdWlsZFByb2plY3Qucm9sZSEpO1xuICAgIH1cblxuICAgIGNvbnN0IGVmZmVjdGl2ZVByb3ZpZGVyID0gcHJvdmlkZXIgPz8gVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3ZpZGVyLmdldE9yQ3JlYXRlKHRoaXMpO1xuICAgIGVmZmVjdGl2ZVByb3ZpZGVyLnJlZ2lzdGVyUHJvamVjdChjb2RlQnVpbGRQcm9qZWN0LCB0aGlzLmVjclJlcG9zaXRvcnksIGVuY3J5cHRpb25LZXkpO1xuXG4gICAgaWYgKHJlcGxpY2FSZWdpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudmFsaWRhdGVSZXBsaWNhUmVnaW9ucyhyZXBsaWNhUmVnaW9ucyk7XG4gICAgICBlZmZlY3RpdmVQcm92aWRlci5yZWdpc3RlclJlcGxpY2F0aW9uKHRoaXMuZWNyUmVwb3NpdG9yeS5yZXBvc2l0b3J5TmFtZSwgcmVwbGljYVJlZ2lvbnMpO1xuICAgIH1cblxuICAgIC8vIFRoZSBDUidzIGNvbnN0cnVjdCBJRCBoYXMgYSBcIlYyXCIgc3VmZml4IHNvIHRoYXQgYSB2MS1kZXBsb3llZCBzdGFja1xuICAgIC8vIHVwZ3JhZGluZyB0byB2MiBzZWVzIGEgTkVXIHJlc291cmNlIChSZXBsYWNlKSwgbm90IGFuIGluLXBsYWNlIHVwZGF0ZVxuICAgIC8vIG9mIHRoZSBvbGQgYEJ1aWxkVHJpZ2dlclJlc291cmNlYC4gQ2xvdWRGb3JtYXRpb24gZm9yYmlkcyBtb2RpZnlpbmcgYVxuICAgIC8vIGN1c3RvbSByZXNvdXJjZSdzIGBTZXJ2aWNlVG9rZW5gIGluLXBsYWNlIChcIk1vZGlmeWluZyBzZXJ2aWNlIHRva2VuIGlzXG4gICAgLy8gbm90IGFsbG93ZWQuXCIpLCBhbmQgdGhlIHNlcnZpY2VUb2tlbiBjaGFuZ2VzIGZyb20gdjEncyBwZXItaW5zdGFuY2VcbiAgICAvLyBwcm92aWRlciB0byB2MidzIHNpbmdsZXRvbiBwcm92aWRlci4gUmVwbGFjZSBkb2RnZXMgdGhlIGNvbnN0cmFpbnQ6XG4gICAgLy8gdGhlIG9sZCBDUiBpcyBkZWxldGVkLCBhbmQgYSBuZXcgb25lIGlzIGNyZWF0ZWQgd2l0aCB0aGUgc2luZ2xldG9uJ3NcbiAgICAvLyBzZXJ2aWNlVG9rZW4g4oCUIGF0IHRoZSBjb3N0IG9mIG9uZSBmcmVzaCBidWlsZCBwZXIgYnVpbGRlciBvbiB1cGdyYWRlLlxuICAgIGNvbnN0IGJ1aWxkVHJpZ2dlclJlc291cmNlID0gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsICdCdWlsZFRyaWdnZXJSZXNvdXJjZVYyJywge1xuICAgICAgc2VydmljZVRva2VuOiBlZmZlY3RpdmVQcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFByb2plY3ROYW1lOiBjb2RlQnVpbGRQcm9qZWN0LnByb2plY3ROYW1lLFxuICAgICAgICBJbWFnZVRhZzogaW1hZ2VUYWcsXG4gICAgICAgIFRyaWdnZXI6IHNvdXJjZUFzc2V0LmFzc2V0SGFzaCxcbiAgICAgICAgUmV0YWluQnVpbGRMb2dzOiByZXRhaW5CdWlsZExvZ3MgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgICBSZXBvc2l0b3J5TmFtZTogdGhpcy5lY3JSZXBvc2l0b3J5LnJlcG9zaXRvcnlOYW1lLFxuICAgICAgICBSZXBsaWNhUmVnaW9uczogSlNPTi5zdHJpbmdpZnkocmVwbGljYVJlZ2lvbnMpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBidWlsZFRyaWdnZXJSZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3koY29kZUJ1aWxkUHJvamVjdCk7XG5cbiAgICAvLyBTQUZFVFk6IHJlZmVyZW5jZSBieSB0YWcsIG5vdCBkaWdlc3QuIFRoZSBsaWZlY3ljbGUgcG9saWN5IGFib3ZlIG5ldmVyXG4gICAgLy8gZGVsZXRlcyB0YWdnZWQgaW1hZ2VzLCBzbyB0aGUgZGlnZXN0IGJlaGluZCB0aGlzIHRhZyBpcyBndWFyYW50ZWVkIHRvXG4gICAgLy8gcmVtYWluIGluIEVDUiBmb3IgdGhlIGxpZmUgb2YgdGhlIHJlcG9zaXRvcnkuXG4gICAgY29uc3QgaW1hZ2VUYWdSZWYgPSBidWlsZFRyaWdnZXJSZXNvdXJjZS5nZXRBdHRTdHJpbmcoJ0ltYWdlVGFnJyk7XG4gICAgdGhpcy5pbWFnZVRhZyA9IGltYWdlVGFnUmVmO1xuICAgIC8vIFBsYWluIHN5bnRoLXRpbWUgZm9ybSwgdXNlZCBieSBjcm9zcy1yZWdpb24gaGVscGVycyB0byBieXBhc3MgQ0RLJ3NcbiAgICAvLyBDcm9zc1JlZ2lvbkV4cG9ydFdyaXRlciAoc2VlIGltYWdlVGFnUGxhaW4gZG9jcykuXG4gICAgdGhpcy5pbWFnZVRhZ1BsYWluID0gaW1hZ2VUYWc7XG4gICAgdGhpcy5yZXBvc2l0b3J5TmFtZSA9IHRoaXMuZWNyUmVwb3NpdG9yeS5yZXBvc2l0b3J5TmFtZTtcbiAgICB0aGlzLmNvbnRhaW5lckltYWdlID0gQ29udGFpbmVySW1hZ2UuZnJvbUVjclJlcG9zaXRvcnkodGhpcy5lY3JSZXBvc2l0b3J5LCBpbWFnZVRhZ1JlZik7XG4gICAgdGhpcy5kb2NrZXJJbWFnZUNvZGUgPSBEb2NrZXJJbWFnZUNvZGUuZnJvbUVjcih0aGlzLmVjclJlcG9zaXRvcnksIHtcbiAgICAgIHRhZ09yRGlnZXN0OiBpbWFnZVRhZ1JlZixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgdGhlIEVDUiByZXBvc2l0b3J5IFVSSSBmb3IgYSBnaXZlbiByZWdpb24uIFRoZSByZWdpb24gbXVzdFxuICAgKiBiZSBlaXRoZXIgdGhlIHByaW1hcnkgcmVnaW9uIG9yIG9uZSBvZiBgcmVwbGljYVJlZ2lvbnNgLlxuICAgKi9cbiAgcHVibGljIHJlcG9zaXRvcnlVcmlGb3IocmVnaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRoaXMuYXNzZXJ0UmVnaW9uSXNLbm93bihyZWdpb24pO1xuICAgIHJldHVybiBgJHt0aGlzLmFjY291bnRJZH0uZGtyLmVjci4ke3JlZ2lvbn0uYW1hem9uYXdzLmNvbS8ke3RoaXMucmVwb3NpdG9yeU5hbWV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgdGhlIHJlcGxpY2F0ZWQgcmVwb3NpdG9yeSBhcyBhbiBFQ1MtY29tcGF0aWJsZVxuICAgKiBgQ29udGFpbmVySW1hZ2VgIGluIGEgY29uc3VtZXIgc2NvcGUgKHR5cGljYWxseSBhIHN0YWNrIGluIGByZWdpb25gKS5cbiAgICpcbiAgICogVGhlIGNvbnN1bWVyJ3Mgc3RhY2sgbXVzdCBoYXZlIGBjcm9zc1JlZ2lvblJlZmVyZW5jZXM6IHRydWVgIHdoZW5cbiAgICogYHJlZ2lvbmAgZGlmZmVycyBmcm9tIHRoZSBidWlsZGVyJ3MgcmVnaW9uLlxuICAgKlxuICAgKiBDcm9zcy1yZWdpb24gY29uc3VtZXJzIHJlY2VpdmUgYGltYWdlVGFnUGxhaW5gIChhIHN5bnRoLXRpbWUgc3RyaW5nKVxuICAgKiByYXRoZXIgdGhhbiBgaW1hZ2VUYWdgIChhIENGTiB0b2tlbikuIFVzaW5nIHRoZSB0b2tlbiB3b3VsZCBjYXVzZSBDREsgdG9cbiAgICogYXV0by1jcmVhdGUgYSBgQ3Jvc3NSZWdpb25FeHBvcnRXcml0ZXJgIHdob3NlIHNhZmV0eSBjaGVjayB3ZWRnZXMgZXZlcnlcbiAgICogdGltZSB0aGUgdGFnIHZhbHVlIGNoYW5nZXMg4oCUIGkuZS4gZXZlcnkgcmVhbCBjb2RlIGNoYW5nZS5cbiAgICovXG4gIHB1YmxpYyBjb250YWluZXJJbWFnZUZvcihzY29wZTogQ29uc3RydWN0LCByZWdpb246IHN0cmluZyk6IENvbnRhaW5lckltYWdlIHtcbiAgICB0aGlzLmFzc2VydFJlZ2lvbklzS25vd24ocmVnaW9uKTtcbiAgICBjb25zdCB0YWcgPSByZWdpb24gPT09IHRoaXMucHJpbWFyeVJlZ2lvbiA/IHRoaXMuaW1hZ2VUYWcgOiB0aGlzLmltYWdlVGFnUGxhaW47XG4gICAgcmV0dXJuIENvbnRhaW5lckltYWdlLmZyb21FY3JSZXBvc2l0b3J5KHRoaXMuaW1wb3J0UmVwb0ZvcihzY29wZSwgcmVnaW9uKSwgdGFnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgdGhlIHJlcGxpY2F0ZWQgcmVwb3NpdG9yeSBhcyBhIExhbWJkYS1jb21wYXRpYmxlXG4gICAqIGBEb2NrZXJJbWFnZUNvZGVgIGluIGEgY29uc3VtZXIgc2NvcGUgKHR5cGljYWxseSBhIHN0YWNrIGluIGByZWdpb25gKS5cbiAgICpcbiAgICogVGhlIGNvbnN1bWVyJ3Mgc3RhY2sgbXVzdCBoYXZlIGBjcm9zc1JlZ2lvblJlZmVyZW5jZXM6IHRydWVgIHdoZW5cbiAgICogYHJlZ2lvbmAgZGlmZmVycyBmcm9tIHRoZSBidWlsZGVyJ3MgcmVnaW9uLlxuICAgKlxuICAgKiBDcm9zcy1yZWdpb24gY29uc3VtZXJzIHJlY2VpdmUgYGltYWdlVGFnUGxhaW5gIChhIHN5bnRoLXRpbWUgc3RyaW5nKVxuICAgKiByYXRoZXIgdGhhbiBgaW1hZ2VUYWdgIChhIENGTiB0b2tlbikuIFVzaW5nIHRoZSB0b2tlbiB3b3VsZCBjYXVzZSBDREsgdG9cbiAgICogYXV0by1jcmVhdGUgYSBgQ3Jvc3NSZWdpb25FeHBvcnRXcml0ZXJgIHdob3NlIHNhZmV0eSBjaGVjayB3ZWRnZXMgZXZlcnlcbiAgICogdGltZSB0aGUgdGFnIHZhbHVlIGNoYW5nZXMg4oCUIGkuZS4gZXZlcnkgcmVhbCBjb2RlIGNoYW5nZS5cbiAgICovXG4gIHB1YmxpYyBkb2NrZXJJbWFnZUNvZGVGb3Ioc2NvcGU6IENvbnN0cnVjdCwgcmVnaW9uOiBzdHJpbmcpOiBEb2NrZXJJbWFnZUNvZGUge1xuICAgIHRoaXMuYXNzZXJ0UmVnaW9uSXNLbm93bihyZWdpb24pO1xuICAgIGNvbnN0IHRhZyA9IHJlZ2lvbiA9PT0gdGhpcy5wcmltYXJ5UmVnaW9uID8gdGhpcy5pbWFnZVRhZyA6IHRoaXMuaW1hZ2VUYWdQbGFpbjtcbiAgICByZXR1cm4gRG9ja2VySW1hZ2VDb2RlLmZyb21FY3IodGhpcy5pbXBvcnRSZXBvRm9yKHNjb3BlLCByZWdpb24pLCB7IHRhZ09yRGlnZXN0OiB0YWcgfSk7XG4gIH1cblxuICBwcml2YXRlIGltcG9ydFJlcG9Gb3Ioc2NvcGU6IENvbnN0cnVjdCwgcmVnaW9uOiBzdHJpbmcpOiBSZXBvc2l0b3J5IHtcbiAgICB0aGlzLmFzc2VydFJlZ2lvbklzS25vd24ocmVnaW9uKTtcbiAgICBpZiAocmVnaW9uID09PSB0aGlzLnByaW1hcnlSZWdpb24pIHJldHVybiB0aGlzLmVjclJlcG9zaXRvcnk7XG5cbiAgICAvLyBJbmNsdWRlIHRoZSBidWlsZGVyJ3Mgb3duIG5vZGUuYWRkciBpbiB0aGUgaW1wb3J0IGlkIHNvIHR3byBkaWZmZXJlbnRcbiAgICAvLyBidWlsZGVycyBpbXBvcnRpbmcgdGhlIHNhbWUgcmVnaW9uIGludG8gdGhlIHNhbWUgc2NvcGUgZWFjaCBnZXQgdGhlaXJcbiAgICAvLyBvd24gUmVwb3NpdG9yeSBjaGlsZCAob3RoZXJ3aXNlIHRoZSBzZWNvbmQgY2FsbCB3b3VsZCBjb2xsaWRlIHdpdGggdGhlXG4gICAgLy8gZmlyc3QgYW5kIHJldHVybiB0aGUgd3JvbmcgYnVpbGRlcidzIHJlcG8pLlxuICAgIGNvbnN0IGltcG9ydElkID0gYEltcG9ydGVkUmVwbyR7cmVnaW9ufSR7dGhpcy5ub2RlLmFkZHJ9YDtcbiAgICBjb25zdCBleGlzdGluZyA9IHNjb3BlLm5vZGUudHJ5RmluZENoaWxkKGltcG9ydElkKTtcbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZyBhcyBSZXBvc2l0b3J5O1xuXG4gICAgcmV0dXJuIFJlcG9zaXRvcnkuZnJvbVJlcG9zaXRvcnlBdHRyaWJ1dGVzKHNjb3BlLCBpbXBvcnRJZCwge1xuICAgICAgcmVwb3NpdG9yeU5hbWU6IHRoaXMucmVwb3NpdG9yeU5hbWUsXG4gICAgICByZXBvc2l0b3J5QXJuOiBTdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2VjcicsXG4gICAgICAgIHJlc291cmNlOiAncmVwb3NpdG9yeScsXG4gICAgICAgIHJlc291cmNlTmFtZTogdGhpcy5yZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgcmVnaW9uLFxuICAgICAgICBhY2NvdW50OiB0aGlzLmFjY291bnRJZCxcbiAgICAgIH0pLFxuICAgIH0pIGFzIFJlcG9zaXRvcnk7XG4gIH1cblxuICBwcml2YXRlIGFzc2VydFJlZ2lvbklzS25vd24ocmVnaW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAocmVnaW9uID09PSB0aGlzLnByaW1hcnlSZWdpb24pIHJldHVybjtcbiAgICBpZiAodGhpcy5yZXBsaWNhUmVnaW9ucy5pbmNsdWRlcyhyZWdpb24pKSByZXR1cm47XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFJlZ2lvbiBcIiR7cmVnaW9ufVwiIGlzIG5vdCB0aGUgcHJpbWFyeSByZWdpb24gKCR7dGhpcy5wcmltYXJ5UmVnaW9ufSkgYCArXG4gICAgICBgb3Igb25lIG9mIHRoZSBjb25maWd1cmVkIHJlcGxpY2FSZWdpb25zICgke3RoaXMucmVwbGljYVJlZ2lvbnMuam9pbignLCAnKSB8fCAnPG5vbmU+J30pLiBgICtcbiAgICAgICdBZGQgdGhlIHJlZ2lvbiB0byB0aGUgYnVpbGRlclxcJ3MgcmVwbGljYVJlZ2lvbnMgcHJvcCB0byBtYWtlIGl0IGF2YWlsYWJsZS4nLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlUmVwbGljYVJlZ2lvbnMocmVwbGljYVJlZ2lvbnM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICBjb25zdCBwcmltYXJ5UGFydGl0aW9uID0gc3RhY2sucGFydGl0aW9uO1xuICAgIGZvciAoY29uc3QgcmVnaW9uIG9mIHJlcGxpY2FSZWdpb25zKSB7XG4gICAgICBpZiAocmVnaW9uID09PSB0aGlzLnByaW1hcnlSZWdpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGByZXBsaWNhUmVnaW9ucyBjYW5ub3QgaW5jbHVkZSB0aGUgcHJpbWFyeSByZWdpb24gXCIke3RoaXMucHJpbWFyeVJlZ2lvbn1cIi4gYCArXG4gICAgICAgICAgJ1JlbW92ZSBpdCBmcm9tIHRoZSBsaXN0LicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyBQYXJ0aXRpb24gY2Fubm90IGJlIGNsZWFubHkgaW5mZXJyZWQgZnJvbSByZWdpb24gYWxvbmUgYXQgc3ludGggdGltZVxuICAgICAgLy8gKGl0J3MgYSBDREsgcHNldWRvLXBhcmFtZXRlciBhbmQgbWF5IGJlIGEgdG9rZW4pLiBXZSBkbyB0aGUgYmVzdC1lZmZvcnRcbiAgICAgIC8vIGNoZWNrOiBpZiBib3RoIHBhcnRpdGlvbiB2YWx1ZXMgYXJlIGNvbmNyZXRlIGFuZCB0aGV5IGRpZmZlciwgZmFpbC5cbiAgICAgIC8vIENyb3NzLXBhcnRpdGlvbiByZXBsaWNhdGlvbiBpcyB1bnN1cHBvcnRlZCBieSBFQ1IuXG4gICAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwcmltYXJ5UGFydGl0aW9uKSkge1xuICAgICAgICBjb25zdCBleHBlY3RlZFBhcnRpdGlvbiA9IGluZmVyUGFydGl0aW9uKHJlZ2lvbik7XG4gICAgICAgIGlmIChleHBlY3RlZFBhcnRpdGlvbiAmJiBleHBlY3RlZFBhcnRpdGlvbiAhPT0gcHJpbWFyeVBhcnRpdGlvbikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDcm9zcy1wYXJ0aXRpb24gRUNSIHJlcGxpY2F0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuICcgK1xuICAgICAgICAgICAgYFByaW1hcnkgcGFydGl0aW9uIGlzIFwiJHtwcmltYXJ5UGFydGl0aW9ufVwiIGJ1dCByZXBsaWNhIHJlZ2lvbiBgICtcbiAgICAgICAgICAgIGBcIiR7cmVnaW9ufVwiIGFwcGVhcnMgdG8gYmUgaW4gcGFydGl0aW9uIFwiJHtleHBlY3RlZFBhcnRpdGlvbn1cIi5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdyYW50RWNyQWNjZXNzKHByb2plY3Q6IFByb2plY3QpOiB2b2lkIHtcbiAgICB0aGlzLmVjclJlcG9zaXRvcnkuZ3JhbnRQdWxsUHVzaChwcm9qZWN0KTtcbiAgICBwcm9qZWN0LmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2VjcjpHZXRBdXRob3JpemF0aW9uVG9rZW4nLFxuICAgICAgICAgICdlY3I6R2V0RG93bmxvYWRVcmxGb3JMYXllcicsXG4gICAgICAgICAgJ2VjcjpCYXRjaENoZWNrTGF5ZXJBdmFpbGFiaWxpdHknLFxuICAgICAgICAgICdlY3I6QmF0Y2hHZXRJbWFnZScsXG4gICAgICAgICAgLy8gRGVzY3JpYmVJbWFnZXM6IHByZV9idWlsZCBwcm9iZXMgZm9yIHRoZSA6Y2FjaGUgdGFnJ3MgZXhpc3RlbmNlXG4gICAgICAgICAgLy8gYW5kIG9ubHkgYXR0YWNoZXMgLS1jYWNoZS1mcm9tIHdoZW4gaXQgZXhpc3RzOyB3aXRob3V0IHRoaXNcbiAgICAgICAgICAvLyBwZXJtaXNzaW9uIHRoZSBwcm9iZSBBY2Nlc3NEZW5pZXMgYW5kIHRoZSBidWlsZCBjcmFzaGVzLlxuICAgICAgICAgICdlY3I6RGVzY3JpYmVJbWFnZXMnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JhbnRQdWxsVGhyb3VnaENhY2hlQWNjZXNzKHByb2plY3Q6IFByb2plY3QsIHByZWZpeGVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICghcHJlZml4ZXMgfHwgcHJlZml4ZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICBwcm9qZWN0LmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2VjcjpCYXRjaEdldEltYWdlJyxcbiAgICAgICAgICAnZWNyOkdldERvd25sb2FkVXJsRm9yTGF5ZXInLFxuICAgICAgICAgICdlY3I6QmF0Y2hDaGVja0xheWVyQXZhaWxhYmlsaXR5JyxcbiAgICAgICAgICAnZWNyOkJhdGNoSW1wb3J0VXBzdHJlYW1JbWFnZScsXG4gICAgICAgICAgJ2VjcjpDcmVhdGVSZXBvc2l0b3J5JyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBwcmVmaXhlcy5tYXAoXG4gICAgICAgICAgKHByZWZpeCkgPT4gYGFybjphd3M6ZWNyOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OnJlcG9zaXRvcnkvJHtwcmVmaXh9LypgLFxuICAgICAgICApLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JhbnRCdWlsZExvZ3NBY2Nlc3MocHJvamVjdDogUHJvamVjdCwgcmV0YWluQnVpbGRMb2dzOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCFyZXRhaW5CdWlsZExvZ3MpIHJldHVybjtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgIHByb2plY3QuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFsnbG9nczpDcmVhdGVMb2dHcm91cCcsICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsICdsb2dzOlB1dExvZ0V2ZW50cyddLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czpsb2dzOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OmxvZy1ncm91cDoke0JVSUxEX0xPR19HUk9VUF9QUkVGSVh9JHtwcm9qZWN0LnByb2plY3ROYW1lfWAsXG4gICAgICAgICAgYGFybjphd3M6bG9nczoke3N0YWNrLnJlZ2lvbn06JHtzdGFjay5hY2NvdW50fTpsb2ctZ3JvdXA6JHtCVUlMRF9MT0dfR1JPVVBfUFJFRklYfSR7cHJvamVjdC5wcm9qZWN0TmFtZX06KmAsXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQmVzdC1lZmZvcnQgcGFydGl0aW9uIGluZmVyZW5jZSBmcm9tIGFuIEFXUyByZWdpb24gbmFtZS4gUmV0dXJuc1xuICogdW5kZWZpbmVkIGlmIHRoZSByZWdpb24gZG9lc24ndCBsb29rIGxpa2UgYSBrbm93biBwYXJ0aXRpb24gcHJlZml4IOKAlFxuICogY2FsbGVycyBzaG91bGQgdHJlYXQgdGhhdCBhcyBcInNraXAgdGhlIHBhcnRpdGlvbiBjaGVja1wiLlxuICovXG5mdW5jdGlvbiBpbmZlclBhcnRpdGlvbihyZWdpb246IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChyZWdpb24uc3RhcnRzV2l0aCgnY24tJykpIHJldHVybiAnYXdzLWNuJztcbiAgaWYgKHJlZ2lvbi5zdGFydHNXaXRoKCd1cy1nb3YtJykpIHJldHVybiAnYXdzLXVzLWdvdic7XG4gIGlmIChyZWdpb24uc3RhcnRzV2l0aCgndXMtaXNvLScpKSByZXR1cm4gJ2F3cy1pc28nO1xuICBpZiAocmVnaW9uLnN0YXJ0c1dpdGgoJ3VzLWlzb2ItJykpIHJldHVybiAnYXdzLWlzby1iJztcbiAgaWYgKC9eW2Etel17Mn0tW2Etel0rLVxcZCskLy50ZXN0KHJlZ2lvbikpIHJldHVybiAnYXdzJztcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
package/lib/provider.js CHANGED
@@ -208,5 +208,5 @@ class TokenInjectableDockerBuilderProvider extends constructs_1.Construct {
208
208
  }
209
209
  exports.TokenInjectableDockerBuilderProvider = TokenInjectableDockerBuilderProvider;
210
210
  _a = JSII_RTTI_SYMBOL_1;
211
- TokenInjectableDockerBuilderProvider[_a] = { fqn: "token-injectable-docker-builder.TokenInjectableDockerBuilderProvider", version: "2.0.1" };
211
+ TokenInjectableDockerBuilderProvider[_a] = { fqn: "token-injectable-docker-builder.TokenInjectableDockerBuilderProvider", version: "2.0.3" };
212
212
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFFN0IsNkNBQThEO0FBRzlELGlEQUFzRDtBQUV0RCx1REFBd0Q7QUFDeEQsbUVBQXdEO0FBQ3hELDJDQUF1QztBQUV2QywyQ0FNcUI7QUFFckIsTUFBTSx5QkFBeUIsR0FBRyxzQkFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxNQUFNLGlCQUFpQixHQUFHLG1CQUFtQixDQUFDO0FBQzlDLE1BQU0saUJBQWlCLEdBQUcsMEJBQTBCLENBQUM7QUFFckQsa0VBQWtFO0FBQ2xFLDBFQUEwRTtBQUMxRSxNQUFNLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztBQUNuQyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFjckI7Ozs7OztHQU1HO0FBQ0gsTUFBYSxvQ0FBcUMsU0FBUSxzQkFBUztJQUNqRTs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FDdkIsS0FBZ0IsRUFDaEIsS0FBaUQ7UUFFakQsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsaUNBQXFCLENBRWpELENBQUM7UUFDZCxJQUFJLFFBQVE7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUM5QixPQUFPLElBQUksb0NBQW9DLENBQUMsS0FBSyxFQUFFLGlDQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFhRCxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUFpRDtRQUVqRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBUEYscUJBQWdCLEdBQW1HLEVBQUUsQ0FBQztRQVNySSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxx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LENBQUM7O0FBNU9ILG9GQTZPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IEN1c3RvbVJlc291cmNlLCBEdXJhdGlvbiwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZCc7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcic7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEtleSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHsgQ29kZSwgRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuaW1wb3J0IHtcbiAgQlVJTERfTE9HX0dST1VQX1BSRUZJWCxcbiAgREVGQVVMVF9RVUVSWV9JTlRFUlZBTCxcbiAgTEFNQkRBX1JVTlRJTUUsXG4gIExBTUJEQV9USU1FT1VULFxuICBQUk9WSURFUl9TSU5HTEVUT05fSUQsXG59IGZyb20gJy4vY29uc3RhbnRzJztcblxuY29uc3QgUkVQTElDQVRJT05fVE9UQUxfVElNRU9VVCA9IER1cmF0aW9uLmhvdXJzKDEpO1xuY29uc3QgUkVQTElDQVRJT05fQ1JfSUQgPSAnUmVwbGljYXRpb25Db25maWcnO1xuY29uc3QgUkVQTElDQVRJT05fRk5fSUQgPSAnUmVwbGljYXRpb25Db25maWdIYW5kbGVyJztcblxuLy8gRUNSIHJlZ2lzdHJ5IHJlcGxpY2F0aW9uIGNhcHMgKHBlciByZWdpc3RyeSAvIHBlciBBV1MgYWNjb3VudCk6XG4vLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNSL2xhdGVzdC91c2VyZ3VpZGUvcmVwbGljYXRpb24uaHRtbFxuY29uc3QgTUFYX1VOSVFVRV9ERVNUSU5BVElPTlMgPSAyNTtcbmNvbnN0IE1BWF9SVUxFUyA9IDEwO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgYFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXJQcm92aWRlcmAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3ZpZGVyUHJvcHMge1xuICAvKipcbiAgICogSG93IG9mdGVuIHRoZSBwcm92aWRlciBwb2xscyBmb3IgYnVpbGQgY29tcGxldGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uc2Vjb25kcygzMClcbiAgICovXG4gIHJlYWRvbmx5IHF1ZXJ5SW50ZXJ2YWw/OiBEdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBTaGFyZWQgcHJvdmlkZXIgZm9yIGBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyYCBpbnN0YW5jZXMuXG4gKlxuICogQ3JlYXRlcyB0aGUgb25FdmVudCBhbmQgaXNDb21wbGV0ZSBMYW1iZGEgZnVuY3Rpb25zIG9uY2UgcGVyIHN0YWNrLlxuICogRWFjaCBidWlsZGVyIGluc3RhbmNlIHJlZ2lzdGVycyBpdHMgQ29kZUJ1aWxkIHByb2plY3QgQVJOIHNvIHRoZVxuICogc2hhcmVkIExhbWJkYXMgaGF2ZSBwZXJtaXNzaW9uIHRvIHN0YXJ0IGJ1aWxkcyBhbmQgcmVhZCBsb2dzLlxuICovXG5leHBvcnQgY2xhc3MgVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3ZpZGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIEdldCBvciBjcmVhdGUgdGhlIHNpbmdsZXRvbiBwcm92aWRlciBmb3IgdGhpcyBzdGFjay5cbiAgICogQWxsIGBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyYCBpbnN0YW5jZXMgaW4gdGhlIHNhbWUgc3RhY2tcbiAgICogc2hhcmUgYSBzaW5nbGUgcGFpciBvZiBMYW1iZGEgZnVuY3Rpb25zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRPckNyZWF0ZShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIHByb3BzPzogVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3ZpZGVyUHJvcHMsXG4gICk6IFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXJQcm92aWRlciB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChQUk9WSURFUl9TSU5HTEVUT05fSUQpIGFzXG4gICAgICB8IFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXJQcm92aWRlclxuICAgICAgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3Rpbmc7XG4gICAgcmV0dXJuIG5ldyBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyUHJvdmlkZXIoc3RhY2ssIFBST1ZJREVSX1NJTkdMRVRPTl9JRCwgcHJvcHMpO1xuICB9XG5cbiAgLyoqIFRoZSBzZXJ2aWNlIHRva2VuIHVzZWQgYnkgQ3VzdG9tUmVzb3VyY2UgaW5zdGFuY2VzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZVRva2VuOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvbkV2ZW50SGFuZGxlckZ1bmN0aW9uOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBpc0NvbXBsZXRlSGFuZGxlckZ1bmN0aW9uOiBGdW5jdGlvbjtcblxuICAvLyBSZXBsaWNhdGlvbi1jb25maWcgQ1IgaXMgY3JlYXRlZCBsYXppbHkgb24gZmlyc3QgcmVnaXN0ZXJSZXBsaWNhdGlvbiBjYWxsLlxuICBwcml2YXRlIHJlcGxpY2F0aW9uRm4/OiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSByZXBsaWNhdGlvbkNyPzogQ3VzdG9tUmVzb3VyY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVwbGljYXRpb25TcGVjczogQXJyYXk8eyByZXBvc2l0b3J5TmFtZTogc3RyaW5nOyBkZXN0aW5hdGlvbnM6IEFycmF5PHsgcmVnaW9uOiBzdHJpbmc7IHJlZ2lzdHJ5SWQ6IHN0cmluZyB9PiB9PiA9IFtdO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzPzogVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3ZpZGVyUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLm9uRXZlbnRIYW5kbGVyRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24odGhpcywgJ09uRXZlbnRIYW5kbGVyJywge1xuICAgICAgcnVudGltZTogTEFNQkRBX1JVTlRJTUUsXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4vb25FdmVudCcpKSxcbiAgICAgIGhhbmRsZXI6ICdvbkV2ZW50LmhhbmRsZXInLFxuICAgICAgdGltZW91dDogTEFNQkRBX1RJTUVPVVQsXG4gICAgfSk7XG4gICAgdGhpcy5vbkV2ZW50SGFuZGxlckZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2xvZ3M6Q3JlYXRlTG9nR3JvdXAnLFxuICAgICAgICAgICdsb2dzOlB1dFJldGVudGlvblBvbGljeScsXG4gICAgICAgICAgJ2xvZ3M6RGVsZXRlTG9nR3JvdXAnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtgYXJuOmF3czpsb2dzOio6Kjpsb2ctZ3JvdXA6JHtCVUlMRF9MT0dfR1JPVVBfUFJFRklYfSpgXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICB0aGlzLmlzQ29tcGxldGVIYW5kbGVyRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24odGhpcywgJ0lzQ29tcGxldGVIYW5kbGVyJywge1xuICAgICAgcnVudGltZTogTEFNQkRBX1JVTlRJTUUsXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4vaXNDb21wbGV0ZScpKSxcbiAgICAgIGhhbmRsZXI6ICdpc0NvbXBsZXRlLmhhbmRsZXInLFxuICAgICAgdGltZW91dDogTEFNQkRBX1RJTUVPVVQsXG4gICAgfSk7XG4gICAgdGhpcy5pc0NvbXBsZXRlSGFuZGxlckZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ2NvZGVidWlsZDpCYXRjaEdldEJ1aWxkcycsXG4gICAgICAgICAgJ2NvZGVidWlsZDpMaXN0QnVpbGRzRm9yUHJvamVjdCcsXG4gICAgICAgICAgJ2xvZ3M6R2V0TG9nRXZlbnRzJyxcbiAgICAgICAgICAnbG9nczpEZXNjcmliZUxvZ1N0cmVhbXMnLFxuICAgICAgICAgICdsb2dzOkRlc2NyaWJlTG9nR3JvdXBzJyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBQcm92aWRlcih0aGlzLCAnUHJvdmlkZXInLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcjogdGhpcy5vbkV2ZW50SGFuZGxlckZ1bmN0aW9uLFxuICAgICAgaXNDb21wbGV0ZUhhbmRsZXI6IHRoaXMuaXNDb21wbGV0ZUhhbmRsZXJGdW5jdGlvbixcbiAgICAgIHF1ZXJ5SW50ZXJ2YWw6IHByb3BzPy5xdWVyeUludGVydmFsID8/IERFRkFVTFRfUVVFUllfSU5URVJWQUwsXG4gICAgICAvLyBFQ1IgY3Jvc3MtcmVnaW9uIHJlcGxpY2F0aW9uIGNhbiB0YWtlIHVwIHRvIDMwIG1pbiBpbiByYXJlIGNhc2VzLlxuICAgICAgLy8gVGhlIGRlZmF1bHQgMzAgbWluIHRvdGFsVGltZW91dCBpcyB0b28gdGlnaHQgd2hlbiBhIGJ1aWxkZXIgdXNlc1xuICAgICAgLy8gcmVwbGljYVJlZ2lvbnMgYW5kIGlzQ29tcGxldGUgaXMgd2FpdGluZyBmb3IgcmVwbGljYXMgdG8gbGFuZC5cbiAgICAgIHRvdGFsVGltZW91dDogUkVQTElDQVRJT05fVE9UQUxfVElNRU9VVCxcbiAgICB9KTtcblxuICAgIHRoaXMuc2VydmljZVRva2VuID0gcHJvdmlkZXIuc2VydmljZVRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBzaGFyZWQgTGFtYmRhcyBwZXJtaXNzaW9uIHRvIHN0YXJ0IGJ1aWxkcyBmb3IgYSBzcGVjaWZpY1xuICAgKiBDb2RlQnVpbGQgcHJvamVjdCBhbmQgcHVsbC9wdXNoIHRvIGl0cyBFQ1IgcmVwb3NpdG9yeS5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlclByb2plY3QocHJvamVjdDogUHJvamVjdCwgZWNyUmVwbzogUmVwb3NpdG9yeSwgZW5jcnlwdGlvbktleT86IEtleSk6IHZvaWQge1xuICAgIHRoaXMub25FdmVudEhhbmRsZXJGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydjb2RlYnVpbGQ6U3RhcnRCdWlsZCddLFxuICAgICAgICByZXNvdXJjZXM6IFtwcm9qZWN0LnByb2plY3RBcm5dLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBlY3JSZXBvLmdyYW50UHVsbFB1c2godGhpcy5vbkV2ZW50SGFuZGxlckZ1bmN0aW9uKTtcbiAgICBlY3JSZXBvLmdyYW50UHVsbFB1c2godGhpcy5pc0NvbXBsZXRlSGFuZGxlckZ1bmN0aW9uKTtcblxuICAgIGlmIChlbmNyeXB0aW9uS2V5KSB7XG4gICAgICBlbmNyeXB0aW9uS2V5LmdyYW50RW5jcnlwdERlY3J5cHQodGhpcy5vbkV2ZW50SGFuZGxlckZ1bmN0aW9uKTtcbiAgICAgIGVuY3J5cHRpb25LZXkuZ3JhbnRFbmNyeXB0RGVjcnlwdCh0aGlzLmlzQ29tcGxldGVIYW5kbGVyRnVuY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGJ1aWxkZXIncyByZXBsaWNhIHJlZ2lvbnMgd2l0aCB0aGUgc2luZ2xldG9uJ3MgcmVwbGljYXRpb24tY29uZmlnXG4gICAqIGN1c3RvbSByZXNvdXJjZS4gTXVsdGlwbGUgYnVpbGRlcnMgY29udHJpYnV0ZSBzcGVjczsgdGhlIENSIG1lcmdlcyB0aGVtIGludG9cbiAgICogYSBzaW5nbGUgcmVnaXN0cnktd2lkZSBjb25maWd1cmF0aW9uIG9uIGV2ZXJ5IGRlcGxveS5cbiAgICpcbiAgICogQWxzbyBncmFudHMgdGhlIGBpc0NvbXBsZXRlYCBMYW1iZGEgcGVybWlzc2lvbiB0byBCYXRjaEdldEltYWdlIG9uIGVhY2hcbiAgICogcmVwbGljYSByZWdpb24ncyByZXBvIHNvIGl0IGNhbiBwb2xsIGZvciByZXBsaWNhdGlvbiBhdmFpbGFiaWxpdHkuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJSZXBsaWNhdGlvbihyZXBvTmFtZTogc3RyaW5nLCByZXBsaWNhUmVnaW9uczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAocmVwbGljYVJlZ2lvbnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbnMgPSByZXBsaWNhUmVnaW9ucy5tYXAoKHIpID0+ICh7IHJlZ2lvbjogciwgcmVnaXN0cnlJZDogc3RhY2suYWNjb3VudCB9KSk7XG4gICAgdGhpcy5yZXBsaWNhdGlvblNwZWNzLnB1c2goeyByZXBvc2l0b3J5TmFtZTogcmVwb05hbWUsIGRlc3RpbmF0aW9ucyB9KTtcblxuICAgIHRoaXMuYXNzZXJ0UmVwbGljYXRpb25DYXBzV2l0aGluTGltaXRzKCk7XG5cbiAgICAvLyBHcmFudCBpc0NvbXBsZXRlIEJhdGNoR2V0SW1hZ2Ugb24gZXZlcnkgcmVwbGljYSByZXBvIEFSTiBzbyBpdCBjYW5cbiAgICAvLyBwb2xsIGZvciB0aGUgcmVwbGljYXRlZCBpbWFnZSB0byBhcHBlYXIuXG4gICAgdGhpcy5pc0NvbXBsZXRlSGFuZGxlckZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ2VjcjpCYXRjaEdldEltYWdlJywgJ2VjcjpEZXNjcmliZUltYWdlcyddLFxuICAgICAgICByZXNvdXJjZXM6IHJlcGxpY2FSZWdpb25zLm1hcChcbiAgICAgICAgICAocikgPT4gYGFybjphd3M6ZWNyOiR7cn06JHtzdGFjay5hY2NvdW50fTpyZXBvc2l0b3J5LyR7cmVwb05hbWV9YCxcbiAgICAgICAgKSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICB0aGlzLmVuc3VyZVJlcGxpY2F0aW9uQ3IoKTtcblxuICAgIC8vIFJlZnJlc2ggdGhlIENSJ3MgTWFuYWdlZFNwZWNzIGV2ZXJ5IHRpbWUgYSBidWlsZGVyIHJlZ2lzdGVycy4gQ3VzdG9tXG4gICAgLy8gcmVzb3VyY2UgdXBkYXRlIGRldGVjdGlvbiBkaWZmcyBSZXNvdXJjZVByb3BlcnRpZXMg4oCUIGEgbmV3IHZhbHVlIGhlcmVcbiAgICAvLyB0cmlnZ2VycyBhIENSIHVwZGF0ZSwgd2hpY2ggcmUtcnVucyB0aGUgbWVyZ2UgaW4gdGhlIHJlcGxpY2F0aW9uIExhbWJkYS5cbiAgICBpZiAodGhpcy5yZXBsaWNhdGlvbkNyKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gKHRoaXMucmVwbGljYXRpb25Dci5ub2RlLmRlZmF1bHRDaGlsZCBhcyBhbnkpO1xuICAgICAgLy8gQ0RLIGRvZXNuJ3QgZXhwb3NlIGEgcHVibGljIEFQSSB0byBtdXRhdGUgQ3VzdG9tUmVzb3VyY2UgcHJvcGVydGllc1xuICAgICAgLy8gYWZ0ZXIgY3JlYXRpb24uIEluc3RlYWQgd2UgdXNlIGFkZFByb3BlcnR5T3ZlcnJpZGUgdG8gd3JpdGUgdGhlXG4gICAgICAvLyBzZXJpYWxpemVkIHN0YXRlIG9mIGFsbCByZWdpc3RlcmVkIHNwZWNzIHRvIGRhdGUuXG4gICAgICBwcm9wZXJ0aWVzLmFkZFByb3BlcnR5T3ZlcnJpZGUoXG4gICAgICAgICdNYW5hZ2VkU3BlY3MnLFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnJlcGxpY2F0aW9uU3BlY3MpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVJlcGxpY2F0aW9uQ3IoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVwbGljYXRpb25DcikgcmV0dXJuO1xuXG4gICAgdGhpcy5yZXBsaWNhdGlvbkZuID0gbmV3IEZ1bmN0aW9uKHRoaXMsIFJFUExJQ0FUSU9OX0ZOX0lELCB7XG4gICAgICBydW50aW1lOiBMQU1CREFfUlVOVElNRSxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi9lY3JSZXBsaWNhdGlvbicpKSxcbiAgICAgIGhhbmRsZXI6ICdlY3JSZXBsaWNhdGlvbi5oYW5kbGVyJyxcbiAgICAgIHRpbWVvdXQ6IExBTUJEQV9USU1FT1VULFxuICAgIH0pO1xuICAgIHRoaXMucmVwbGljYXRpb25Gbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdlY3I6RGVzY3JpYmVSZWdpc3RyeScsXG4gICAgICAgICAgJ2VjcjpQdXRSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24nLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSksXG4gICAgKTtcbiAgICAvLyBGaXJzdC1ldmVyIFB1dFJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBpbiBhbiBhY2NvdW50IGNyZWF0ZXMgYVxuICAgIC8vIHNlcnZpY2UtbGlua2VkIHJvbGU7IGlkZW1wb3RlbnQgaWYgaXQgYWxyZWFkeSBleGlzdHMuXG4gICAgdGhpcy5yZXBsaWNhdGlvbkZuLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ2lhbTpDcmVhdGVTZXJ2aWNlTGlua2VkUm9sZSddLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICAnaWFtOkFXU1NlcnZpY2VOYW1lJzogJ3JlcGxpY2F0aW9uLmVjci5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHJlcGxpY2F0aW9uUHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgJ1JlcGxpY2F0aW9uUHJvdmlkZXInLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcjogdGhpcy5yZXBsaWNhdGlvbkZuLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZXBsaWNhdGlvbkNyID0gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIFJFUExJQ0FUSU9OX0NSX0lELCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHJlcGxpY2F0aW9uUHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpUaWRiUmVwbGljYXRpb25Db25maWcnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBNYW5hZ2VkU3BlY3M6IEpTT04uc3RyaW5naWZ5KHRoaXMucmVwbGljYXRpb25TcGVjcyksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuZm9yY2UgRUNSIHJlZ2lzdHJ5IHJlcGxpY2F0aW9uIGNhcHMgYXQgc3ludGggdGltZSBzbyB1c2VycyBnZXQgYSBjbGVhclxuICAgKiBlcnJvciBiZWZvcmUgZGVwbG95LiBDYXBzIGFyZSBwZXItcmVnaXN0cnkgKHBlciBBV1MgYWNjb3VudCksIG5vdFxuICAgKiBwZXItc3RhY2sg4oCUIGJ1dCB0aGlzIGNvbnN0cnVjdCBjYW4gb25seSBzZWUgc3BlY3MgcmVnaXN0ZXJlZCB0aHJvdWdoXG4gICAqIGl0cyBvd24gc2luZ2xldG9ucy4gQ3Jvc3Mtc3RhY2svY3Jvc3MtYXBwIHJ1bGVzIG91dHNpZGUgdGhpcyBjb25zdHJ1Y3RcbiAgICogYXJlIGludmlzaWJsZSBoZXJlOyB0aGUgcmVwbGljYXRpb24gQ1Igd2lsbCBzdGlsbCBzdXJmYWNlIHRob3NlIGF0XG4gICAqIGRlcGxveSB0aW1lIHZpYSB0aGUgRUNSIEFQSSdzIG93biBlcnJvci5cbiAgICovXG4gIHByaXZhdGUgYXNzZXJ0UmVwbGljYXRpb25DYXBzV2l0aGluTGltaXRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHVuaXF1ZURlc3RpbmF0aW9ucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHVuaXF1ZURlc3RpbmF0aW9uU2V0cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3Qgc3BlYyBvZiB0aGlzLnJlcGxpY2F0aW9uU3BlY3MpIHtcbiAgICAgIGZvciAoY29uc3QgZGVzdCBvZiBzcGVjLmRlc3RpbmF0aW9ucykge1xuICAgICAgICB1bmlxdWVEZXN0aW5hdGlvbnMuYWRkKGAke2Rlc3QucmVnaW9ufToke2Rlc3QucmVnaXN0cnlJZH1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNldEtleSA9IHNwZWMuZGVzdGluYXRpb25zXG4gICAgICAgIC5tYXAoKGQpID0+IGAke2QucmVnaW9ufToke2QucmVnaXN0cnlJZH1gKVxuICAgICAgICAuc29ydCgpXG4gICAgICAgIC5qb2luKCd8Jyk7XG4gICAgICB1bmlxdWVEZXN0aW5hdGlvblNldHMuYWRkKHNldEtleSk7XG4gICAgfVxuXG4gICAgaWYgKHVuaXF1ZURlc3RpbmF0aW9ucy5zaXplID4gTUFYX1VOSVFVRV9ERVNUSU5BVElPTlMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEVDUiByZWdpc3RyeSByZXBsaWNhdGlvbiBzdXBwb3J0cyBhdCBtb3N0ICR7TUFYX1VOSVFVRV9ERVNUSU5BVElPTlN9IHVuaXF1ZSBgICtcbiAgICAgICAgJ2Rlc3RpbmF0aW9ucyBhY3Jvc3MgYWxsIHJ1bGVzIHBlciBBV1MgYWNjb3VudCwgYnV0IHRoaXMgc3RhY2sgd291bGQgY3JlYXRlICcgK1xuICAgICAgICBgJHt1bmlxdWVEZXN0aW5hdGlvbnMuc2l6ZX0uIFJlZHVjZSB0aGUgdW5pb24gb2YgcmVwbGljYVJlZ2lvbnMgYWNyb3NzIGFsbCBgICtcbiAgICAgICAgJ1Rva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXIgaW5zdGFuY2VzLiAoTGltaXQgaXMgcGVyLXJlZ2lzdHJ5IC8gcGVyLWFjY291bnQsICcgK1xuICAgICAgICAnc28gb3RoZXIgc3RhY2tzIGluIHRoZSBzYW1lIGFjY291bnQgY291bnQgdG9vIOKAlCBidXQgb25seSBzcGVjcyByZWdpc3RlcmVkICcgK1xuICAgICAgICAndGhyb3VnaCB0aGlzIGNvbnN0cnVjdCBhcmUgdmlzaWJsZSBhdCBzeW50aCB0aW1lLiknLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodW5pcXVlRGVzdGluYXRpb25TZXRzLnNpemUgPiBNQVhfUlVMRVMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEVDUiByZWdpc3RyeSByZXBsaWNhdGlvbiBzdXBwb3J0cyBhdCBtb3N0ICR7TUFYX1JVTEVTfSBydWxlcyBwZXIgcmVnaXN0cnkuIGAgK1xuICAgICAgICAnVGhlIGNvbnN0cnVjdCBncm91cHMgYnVpbGRlcnMgYnkgdGhlaXIgZGVzdGluYXRpb24gc2V0IGludG8gb25lIHJ1bGUgZWFjaCwgJyArXG4gICAgICAgIGBidXQgdGhpcyBzdGFjayBoYXMgJHt1bmlxdWVEZXN0aW5hdGlvblNldHMuc2l6ZX0gdW5pcXVlIGRlc3RpbmF0aW9uIHNldHMuIGAgK1xuICAgICAgICAnQ29uc29saWRhdGUgYnVpbGRlcnMgdG8gc2hhcmUgZGVzdGluYXRpb24gc2V0cyAoaS5lLiBnaXZlIHRoZW0gdGhlIHNhbWUgJyArXG4gICAgICAgICdyZXBsaWNhUmVnaW9ucykgc28gdGhleSBzaGFyZSBhIHJ1bGUuJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -34,7 +34,8 @@
34
34
  "local-destroy": "npx cdk destroy --all --app \"npx ts-node test/integ.default.ts\"",
35
35
  "local-synth": "npx cdk synth --app \"npx ts-node test/integ.default.ts\"",
36
36
  "integ": "npx integ-runner --update-on-failed --directory test",
37
- "integ-migration": "npx cdk deploy TidbMigrationStack --app \"npx ts-node test/migration/before-v1.ts\" --require-approval=never && npx cdk deploy TidbMigrationStack --app \"npx ts-node test/migration/after-v2.ts\" --require-approval=never && npx cdk destroy TidbMigrationStack --app \"npx ts-node test/migration/after-v2.ts\" --force"
37
+ "integ-migration": "npx cdk deploy TidbMigrationStack --app \"npx ts-node test/migration/before-v1.ts\" --require-approval=never && npx cdk deploy TidbMigrationStack --app \"npx ts-node test/migration/after-v2.ts\" --require-approval=never && npx cdk destroy TidbMigrationStack --app \"npx ts-node test/migration/after-v2.ts\" --force",
38
+ "integ-redeploy": "BUILDER_BUILD_ARG=v1 npx cdk deploy TidbRedeployStack TidbRedeployConsumerStack --app \"npx ts-node test/redeploy/redeploy.ts\" --require-approval=never && BUILDER_BUILD_ARG=v2 npx cdk deploy TidbRedeployStack TidbRedeployConsumerStack --app \"npx ts-node test/redeploy/redeploy.ts\" --require-approval=never && BUILDER_BUILD_ARG=v2 npx cdk destroy TidbRedeployStack TidbRedeployConsumerStack --app \"npx ts-node test/redeploy/redeploy.ts\" --force"
38
39
  },
39
40
  "author": {
40
41
  "name": "AlexTech314",
@@ -103,7 +104,7 @@
103
104
  "publishConfig": {
104
105
  "access": "public"
105
106
  },
106
- "version": "2.0.1",
107
+ "version": "2.0.3",
107
108
  "jest": {
108
109
  "coverageProvider": "v8",
109
110
  "testMatch": [