construct-hub 0.4.303 → 0.4.304

Sign up to get free protection for your applications and to get access to all the features.
package/.jsii CHANGED
@@ -3725,7 +3725,7 @@
3725
3725
  "kind": "interface",
3726
3726
  "locationInModule": {
3727
3727
  "filename": "src/construct-hub.ts",
3728
- "line": 248
3728
+ "line": 255
3729
3729
  },
3730
3730
  "name": "CodeArtifactDomainProps",
3731
3731
  "properties": [
@@ -3738,7 +3738,7 @@
3738
3738
  "immutable": true,
3739
3739
  "locationInModule": {
3740
3740
  "filename": "src/construct-hub.ts",
3741
- "line": 252
3741
+ "line": 259
3742
3742
  },
3743
3743
  "name": "name",
3744
3744
  "type": {
@@ -3754,7 +3754,7 @@
3754
3754
  "immutable": true,
3755
3755
  "locationInModule": {
3756
3756
  "filename": "src/construct-hub.ts",
3757
- "line": 258
3757
+ "line": 265
3758
3758
  },
3759
3759
  "name": "upstreams",
3760
3760
  "optional": true,
@@ -3784,7 +3784,7 @@
3784
3784
  },
3785
3785
  "locationInModule": {
3786
3786
  "filename": "src/construct-hub.ts",
3787
- "line": 268
3787
+ "line": 275
3788
3788
  },
3789
3789
  "parameters": [
3790
3790
  {
@@ -3814,7 +3814,7 @@
3814
3814
  "kind": "class",
3815
3815
  "locationInModule": {
3816
3816
  "filename": "src/construct-hub.ts",
3817
- "line": 264
3817
+ "line": 271
3818
3818
  },
3819
3819
  "name": "ConstructHub",
3820
3820
  "properties": [
@@ -3826,7 +3826,7 @@
3826
3826
  "immutable": true,
3827
3827
  "locationInModule": {
3828
3828
  "filename": "src/construct-hub.ts",
3829
- "line": 556
3829
+ "line": 564
3830
3830
  },
3831
3831
  "name": "allAlarms",
3832
3832
  "type": {
@@ -3846,7 +3846,7 @@
3846
3846
  "immutable": true,
3847
3847
  "locationInModule": {
3848
3848
  "filename": "src/construct-hub.ts",
3849
- "line": 560
3849
+ "line": 568
3850
3850
  },
3851
3851
  "name": "grantPrincipal",
3852
3852
  "overrides": "aws-cdk-lib.aws_iam.IGrantable",
@@ -3863,7 +3863,7 @@
3863
3863
  "immutable": true,
3864
3864
  "locationInModule": {
3865
3865
  "filename": "src/construct-hub.ts",
3866
- "line": 537
3866
+ "line": 545
3867
3867
  },
3868
3868
  "name": "highSeverityAlarms",
3869
3869
  "type": {
@@ -3882,7 +3882,7 @@
3882
3882
  "immutable": true,
3883
3883
  "locationInModule": {
3884
3884
  "filename": "src/construct-hub.ts",
3885
- "line": 564
3885
+ "line": 572
3886
3886
  },
3887
3887
  "name": "ingestionQueue",
3888
3888
  "type": {
@@ -3898,7 +3898,7 @@
3898
3898
  "immutable": true,
3899
3899
  "locationInModule": {
3900
3900
  "filename": "src/construct-hub.ts",
3901
- "line": 548
3901
+ "line": 556
3902
3902
  },
3903
3903
  "name": "lowSeverityAlarms",
3904
3904
  "type": {
@@ -3938,7 +3938,7 @@
3938
3938
  "immutable": true,
3939
3939
  "locationInModule": {
3940
3940
  "filename": "src/construct-hub.ts",
3941
- "line": 221
3941
+ "line": 228
3942
3942
  },
3943
3943
  "name": "additionalDomains",
3944
3944
  "optional": true,
@@ -4001,7 +4001,7 @@
4001
4001
  "immutable": true,
4002
4002
  "locationInModule": {
4003
4003
  "filename": "src/construct-hub.ts",
4004
- "line": 236
4004
+ "line": 243
4005
4005
  },
4006
4006
  "name": "appRegistryApplication",
4007
4007
  "optional": true,
@@ -4173,7 +4173,7 @@
4173
4173
  "immutable": true,
4174
4174
  "locationInModule": {
4175
4175
  "filename": "src/construct-hub.ts",
4176
- "line": 242
4176
+ "line": 249
4177
4177
  },
4178
4178
  "name": "feedConfiguration",
4179
4179
  "optional": true,
@@ -4337,7 +4337,7 @@
4337
4337
  "immutable": true,
4338
4338
  "locationInModule": {
4339
4339
  "filename": "src/construct-hub.ts",
4340
- "line": 228
4340
+ "line": 235
4341
4341
  },
4342
4342
  "name": "preloadScript",
4343
4343
  "optional": true,
@@ -4345,6 +4345,24 @@
4345
4345
  "fqn": "construct-hub.PreloadFile"
4346
4346
  }
4347
4347
  },
4348
+ {
4349
+ "abstract": true,
4350
+ "docs": {
4351
+ "default": "Duration.days(90)",
4352
+ "stability": "experimental",
4353
+ "summary": "Package versions that have been published before this time window will not be reprocessed."
4354
+ },
4355
+ "immutable": true,
4356
+ "locationInModule": {
4357
+ "filename": "src/construct-hub.ts",
4358
+ "line": 220
4359
+ },
4360
+ "name": "reprocessAge",
4361
+ "optional": true,
4362
+ "type": {
4363
+ "fqn": "aws-cdk-lib.Duration"
4364
+ }
4365
+ },
4348
4366
  {
4349
4367
  "abstract": true,
4350
4368
  "docs": {
@@ -5382,7 +5400,7 @@
5382
5400
  "kind": "enum",
5383
5401
  "locationInModule": {
5384
5402
  "filename": "src/construct-hub.ts",
5385
- "line": 701
5403
+ "line": 709
5386
5404
  },
5387
5405
  "members": [
5388
5406
  {
@@ -17238,6 +17256,6 @@
17238
17256
  "symbolId": "src/package-sources/npmjs:NpmJsProps"
17239
17257
  }
17240
17258
  },
17241
- "version": "0.4.303",
17242
- "fingerprint": "jmcMjJxqhxFAS02FgY9U3WxbGkMLXzZ1TekLbjdy1SY="
17259
+ "version": "0.4.304",
17260
+ "fingerprint": "e2kS+JeIaPfzy+oKptvBBvENF/iM0FlhvTD+Ib0q+4k="
17243
17261
  }
package/API.md CHANGED
@@ -1102,6 +1102,7 @@ const constructHubProps: ConstructHubProps = { ... }
1102
1102
  | <code><a href="#construct-hub.ConstructHubProps.property.packageTagGroups">packageTagGroups</a></code> | <code><a href="#construct-hub.PackageTagGroup">PackageTagGroup</a>[]</code> | Optional configuration for grouping custom package tags. |
1103
1103
  | <code><a href="#construct-hub.ConstructHubProps.property.packageTags">packageTags</a></code> | <code><a href="#construct-hub.PackageTag">PackageTag</a>[]</code> | Configuration for custom package tags. |
1104
1104
  | <code><a href="#construct-hub.ConstructHubProps.property.preloadScript">preloadScript</a></code> | <code><a href="#construct-hub.PreloadFile">PreloadFile</a></code> | Javascript to run on webapp before app loads. |
1105
+ | <code><a href="#construct-hub.ConstructHubProps.property.reprocessAge">reprocessAge</a></code> | <code>aws-cdk-lib.Duration</code> | Package versions that have been published before this time window will not be reprocessed. |
1105
1106
  | <code><a href="#construct-hub.ConstructHubProps.property.reprocessFrequency">reprocessFrequency</a></code> | <code>aws-cdk-lib.Duration</code> | How frequently all packages should get fully reprocessed. |
1106
1107
  | <code><a href="#construct-hub.ConstructHubProps.property.sensitiveTaskIsolation">sensitiveTaskIsolation</a></code> | <code><a href="#construct-hub.Isolation">Isolation</a></code> | Whether compute environments for sensitive tasks (which operate on un-trusted complex data, such as the transliterator, which operates with externally-sourced npm package tarballs) should run in network-isolated environments. |
1107
1108
 
@@ -1391,6 +1392,19 @@ Javascript to run on webapp before app loads.
1391
1392
 
1392
1393
  ---
1393
1394
 
1395
+ ##### `reprocessAge`<sup>Optional</sup> <a name="reprocessAge" id="construct-hub.ConstructHubProps.property.reprocessAge"></a>
1396
+
1397
+ ```typescript
1398
+ public readonly reprocessAge: Duration;
1399
+ ```
1400
+
1401
+ - *Type:* aws-cdk-lib.Duration
1402
+ - *Default:* Duration.days(90)
1403
+
1404
+ Package versions that have been published before this time window will not be reprocessed.
1405
+
1406
+ ---
1407
+
1394
1408
  ##### `reprocessFrequency`<sup>Optional</sup> <a name="reprocessFrequency" id="construct-hub.ConstructHubProps.property.reprocessFrequency"></a>
1395
1409
 
1396
1410
  ```typescript
@@ -55,6 +55,12 @@ export interface IngestionProps {
55
55
  * @default - never
56
56
  */
57
57
  readonly reprocessFrequency?: Duration;
58
+ /**
59
+ * Package versions that have been published before this time window will not be reprocessed.
60
+ *
61
+ * @default Duration.days(90)
62
+ */
63
+ readonly reprocessAge?: Duration;
58
64
  /**
59
65
  * The SQS queue where new package will be added to fetch release notes.
60
66
  */
@@ -114,7 +114,11 @@ class Ingestion extends constructs_1.Construct {
114
114
  });
115
115
  props.bucket.grantRead(this.function, `${constants_2.STORAGE_KEY_PREFIX}*${constants_2.PACKAGE_KEY_SUFFIX}`);
116
116
  this.function.addEventSource(new aws_lambda_event_sources_1.SqsEventSource(reprocessQueue, { batchSize: 1 }));
117
- const reprocessWorkflow = new ReprocessIngestionWorkflow(this, 'ReprocessWorkflow', { bucket: props.bucket, queue: reprocessQueue });
117
+ const reprocessWorkflow = new ReprocessIngestionWorkflow(this, 'ReprocessWorkflow', {
118
+ bucket: props.bucket,
119
+ queue: reprocessQueue,
120
+ reprocessAge: props.reprocessAge ?? aws_cdk_lib_1.Duration.days(90),
121
+ });
118
122
  // Run reprocess workflow on a daily basis
119
123
  const updatePeriod = props.reprocessFrequency;
120
124
  if (updatePeriod) {
@@ -242,6 +246,7 @@ class ReprocessIngestionWorkflow extends constructs_1.Construct {
242
246
  environment: {
243
247
  BUCKET_NAME: props.bucket.bucketName,
244
248
  QUEUE_URL: props.queue.queueUrl,
249
+ REPROCESS_AGE_MILLIS: `${props.reprocessAge.toMilliseconds()}`,
245
250
  },
246
251
  memorySize: 10240,
247
252
  tracing: aws_lambda_1.Tracing.ACTIVE,
@@ -354,4 +359,4 @@ function waitTimeBetweenReprocessBatches() {
354
359
  (batchSize / workers);
355
360
  return aws_cdk_lib_1.Duration.seconds(Math.floor(seconds));
356
361
  }
357
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZC9pbmdlc3Rpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXlEO0FBQ3pELCtEQU9vQztBQUNwQyx1REFBeUU7QUFDekUsdUVBQWlFO0FBRWpFLHVEQUEyRTtBQUMzRSxtRkFBc0U7QUFDdEUsbURBQXFEO0FBQ3JELCtDQUFnRTtBQUNoRSxxRUFBeUU7QUFDekUsaURBQXFFO0FBQ3JFLHFFQVd1QztBQUN2QyxpRkFJNkM7QUFDN0MsMkNBQXVDO0FBQ3ZDLDJDQUE0RDtBQUM1RCwyQ0FBbUQ7QUFDbkQsMkNBQXVDO0FBRXZDLCtDQUFpRTtBQUlqRSxtREFBZ0Q7QUFDaEQsOENBQW9EO0FBQ3BELCtDQUEyQztBQUUzQyxrRUFBb0U7QUFFcEUsbURBSTZCO0FBNEQ3Qjs7Ozs7O0dBTUc7QUFDSCxNQUFhLFNBQVUsU0FBUSxzQkFBUztJQW1CdEMsWUFBbUIsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDcEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUxILHlCQUFvQixHQUFHLHNCQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBT3ZELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtZQUM1QyxVQUFVLEVBQUUseUJBQWUsQ0FBQyxXQUFXO1lBQ3ZDLGVBQWUsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1lBQzFDLGlCQUFpQixFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUN4QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZUFBSyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7WUFDcEMsZUFBZSxFQUFFO2dCQUNmLGVBQWUsRUFBRSxDQUFDO2dCQUNsQixLQUFLLEVBQUUsSUFBSSxD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LGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNuRCxDQUFDO0NBQ0Y7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxRQUFnQjtJQUM1Qyw0QkFBNEI7SUFDNUIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsK0JBQStCO0lBQ3RDLG9FQUFvRTtJQUNwRSwrQkFBK0I7SUFFL0IscUVBQXFFO0lBQ3JFLHlDQUF5QztJQUN6QyxNQUFNLGNBQWMsR0FBRyxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUzQyw2REFBNkQ7SUFDN0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBRXZCLDJDQUEyQztJQUMzQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFFckIsd0VBQXdFO0lBQ3hFLDJFQUEyRTtJQUMzRSw0RUFBNEU7SUFDNUUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7SUFFOUIsMkVBQTJFO0lBQzNFLDRCQUE0QjtJQUM1QixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUM7SUFFdkIsTUFBTSxPQUFPLEdBQ1gsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ3hCLE9BQU8sc0JBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgU3RhY2ssIEFybkZvcm1hdCB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIENvbXBhcmlzb25PcGVyYXRvcixcbiAgTWF0aEV4cHJlc3Npb24sXG4gIE1ldHJpYyxcbiAgTWV0cmljT3B0aW9ucyxcbiAgU3RhdGlzdGljLFxuICBUcmVhdE1pc3NpbmdEYXRhLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBSdWxlLCBSdWxlVGFyZ2V0SW5wdXQsIFNjaGVkdWxlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgeyBTZm5TdGF0ZU1hY2hpbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0IHsgSUdyYW50YWJsZSwgSVByaW5jaXBhbCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgRnVuY3Rpb25Qcm9wcywgSUZ1bmN0aW9uLCBUcmFjaW5nIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBTcXNFdmVudFNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEtZXZlbnQtc291cmNlcyc7XG5pbXBvcnQgeyBSZXRlbnRpb25EYXlzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgQmxvY2tQdWJsaWNBY2Nlc3MsIElCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQnVja2V0RGVwbG95bWVudCwgU291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWRlcGxveW1lbnQnO1xuaW1wb3J0IHsgSVF1ZXVlLCBRdWV1ZSwgUXVldWVFbmNyeXB0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNxcyc7XG5pbXBvcnQge1xuICBTdGF0ZU1hY2hpbmUsXG4gIEpzb25QYXRoLFxuICBDaG9pY2UsXG4gIFN1Y2NlZWQsXG4gIENvbmRpdGlvbixcbiAgTWFwLFxuICBUYXNrSW5wdXQsXG4gIEludGVncmF0aW9uUGF0dGVybixcbiAgV2FpdCxcbiAgV2FpdFRpbWUsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCB7XG4gIENhbGxBd3NTZXJ2aWNlLFxuICBMYW1iZGFJbnZva2UsXG4gIFN0ZXBGdW5jdGlvbnNTdGFydEV4ZWN1dGlvbixcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBNZXRyaWNOYW1lLCBNRVRSSUNTX05BTUVTUEFDRSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEluZ2VzdGlvbiBhcyBIYW5kbGVyIH0gZnJvbSAnLi9pbmdlc3Rpb24nO1xuaW1wb3J0IHsgUmVJbmdlc3QgfSBmcm9tICcuL3JlLWluZ2VzdCc7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSAnLi4vLi4vY29kZWFydGlmYWN0L3JlcG9zaXRvcnknO1xuaW1wb3J0IHsgbGFtYmRhRnVuY3Rpb25VcmwsIHNxc1F1ZXVlVXJsIH0gZnJvbSAnLi4vLi4vZGVlcC1saW5rJztcbmltcG9ydCB7IE1vbml0b3JpbmcgfSBmcm9tICcuLi8uLi9tb25pdG9yaW5nJztcbmltcG9ydCB7IE92ZXJ2aWV3RGFzaGJvYXJkIH0gZnJvbSAnLi4vLi4vb3ZlcnZpZXctZGFzaGJvYXJkJztcbmltcG9ydCB7IFBhY2thZ2VUYWdDb25maWcgfSBmcm9tICcuLi8uLi9wYWNrYWdlLXRhZyc7XG5pbXBvcnQgeyBSVU5CT09LX1VSTCB9IGZyb20gJy4uLy4uL3J1bmJvb2stdXJsJztcbmltcG9ydCB7IFMzU3RvcmFnZUZhY3RvcnkgfSBmcm9tICcuLi8uLi9zMy9zdG9yYWdlJztcbmltcG9ydCB7IFRlbXBGaWxlIH0gZnJvbSAnLi4vLi4vdGVtcC1maWxlJztcbmltcG9ydCB0eXBlIHsgUGFja2FnZUxpbmtDb25maWcgfSBmcm9tICcuLi8uLi93ZWJhcHAnO1xuaW1wb3J0IHsgZ3Jhdml0b25MYW1iZGFJZkF2YWlsYWJsZSB9IGZyb20gJy4uL19sYW1iZGEtYXJjaGl0ZWN0dXJlJztcbmltcG9ydCB7IE9yY2hlc3RyYXRpb24gfSBmcm9tICcuLi9vcmNoZXN0cmF0aW9uJztcbmltcG9ydCB7XG4gIFNUT1JBR0VfS0VZX1BSRUZJWCxcbiAgTUVUQURBVEFfS0VZX1NVRkZJWCxcbiAgUEFDS0FHRV9LRVlfU1VGRklYLFxufSBmcm9tICcuLi9zaGFyZWQvY29uc3RhbnRzJztcblxuZXhwb3J0IGludGVyZmFjZSBJbmdlc3Rpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgYnVja2V0IGluIHdoaWNoIGluZ2VzdGVkIG9iamVjdHMgYXJlIGR1ZSB0byBiZSBpbnNlcnRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldDogSUJ1Y2tldDtcblxuICAvKipcbiAgICogVGhlIENvZGVBcnRpZmFjdCByZXBvc2l0b3J5IHRvIHdoaWNoIHBhY2thZ2VzIHNob3VsZCBiZSBwdWJsaXNoZWQuIFRoaXMgaXNcbiAgICogdGhlIENvbnN0cnVjdEh1YiBpbnRlcm5hbCBDb2RlQXJ0aWZhY3QgcmVwb3NpdG9yeSwgaWYgb25lIGV4aXN0cy5cbiAgICovXG4gIHJlYWRvbmx5IGNvZGVBcnRpZmFjdD86IFJlcG9zaXRvcnk7XG5cbiAgLyoqXG4gICAqIFRoZSBtb25pdG9yaW5nIGhhbmRsZXIgdG8gcmVnaXN0ZXIgYWxhcm1zIHdpdGguXG4gICAqL1xuICByZWFkb25seSBtb25pdG9yaW5nOiBNb25pdG9yaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYmFja2VuZCBvcmNoZXN0cmF0aW9uIHRvIGludm9rZSBvbmNlIHRoZSBwYWNrYWdlIG1ldGFkYXRhIGhhcyBiZWVuXG4gICAqIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JjaGVzdHJhdGlvbjogT3JjaGVzdHJhdGlvbjtcblxuICByZWFkb25seSBvdmVydmlld0Rhc2hib2FyZDogT3ZlcnZpZXdEYXNoYm9hcmQ7XG5cbiAgLyoqXG4gICAqIEhvdyBsb25nIHRvIHJldGFpbiB0aGUgQ2xvdWRXYXRjaCBsb2dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBSZXRlbnRpb25EYXlzLlRFTl9ZRUFSU1xuICAgKi9cbiAgcmVhZG9ubHkgbG9nUmV0ZW50aW9uPzogUmV0ZW50aW9uRGF5cztcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgY3VzdG9tIHBhY2thZ2UgcGFnZSBsaW5rcy5cbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VMaW5rcz86IFBhY2thZ2VMaW5rQ29uZmlnW107XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZWQgY29uZmlndXJhdGlvbiBmb3IgY3VzdG9tIHBhY2thZ2UgdGFncy5cbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VUYWdzPzogUGFja2FnZVRhZ0NvbmZpZ1tdO1xuXG4gIC8qKlxuICAgKiBIb3cgZnJlcXVlbnRseSBhbGwgcGFja2FnZXMgc2hvdWxkIGdldCBmdWxseSByZXByb2Nlc3NlZC5cbiAgICpcbiAgICogU2VlIHRoZSBvcGVyYXRvciBydW5ib29rIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHJlcHJvY2Vzc2luZy5cbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2RrbGFicy9jb25zdHJ1Y3QtaHViL2Jsb2IvbWFpbi9kb2NzL29wZXJhdG9yLXJ1bmJvb2subWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBuZXZlclxuICAgKi9cbiAgcmVhZG9ubHkgcmVwcm9jZXNzRnJlcXVlbmN5PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBTUVMgcXVldWUgd2hlcmUgbmV3IHBhY2thZ2Ugd2lsbCBiZSBhZGRlZCB0byBmZXRjaCByZWxlYXNlIG5vdGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVsZWFzZU5vdGVzRmV0Y2hRdWV1ZT86IElRdWV1ZTtcbn1cblxuLyoqXG4gKiBUaGUgaW5nZXN0aW9uIGZ1bmN0aW9uIHJlY2VpdmVzIG1lc3NhZ2VzIGZyb20gZGlzY292ZXJ5IGludGVncmF0aW9ucyBhbmRcbiAqIHByb2Nlc3NlcyB0aGVpciBwYXlsb2FkcyBpbnRvIHRoZSBwcm92aWRlZCBTMyBCdWNrZXQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGFuIGBJR3JhbnRhYmxlYCwgc28gdGhhdCBpdCBjYW4gYmUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICogdG8gcmVhZCBmcm9tIHRoZSBzb3VyY2UgUzMgYnVja2V0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEluZ2VzdGlvbiBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElHcmFudGFibGUge1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IElQcmluY2lwYWw7XG5cbiAgLyoqXG4gICAqIFRoZSBTUVMgcXVldWUgdGhhdCB0cmlnZ2VycyB0aGUgaW5nZXN0aW9uIGZ1bmN0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHF1ZXVlOiBJUXVldWU7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmdlc3Rpb24gZGVhZCBsZXR0ZXIgcXVldWUsIHdoaWNoIHdpbGwgaG9sZCBtZXNzYWdlcyB0aGF0IGZhaWxlZFxuICAgKiBpbmdlc3Rpb24gb25lIHRvbyBtYW55IHRpbWVzLCBzbyB0aGF0IHBvaXNvbiBwaWxscyBkb24ndCBlbmRsZXNzbHkgY29uc3VtZVxuICAgKiByZXNvdXJjZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVhZExldHRlclF1ZXVlOiBJUXVldWU7XG5cbiAgcHVibGljIHJlYWRvbmx5IHF1ZXVlUmV0ZW50aW9uUGVyaW9kID0gRHVyYXRpb24uZGF5cygxNCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZ1bmN0aW9uOiBJRnVuY3Rpb247XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbmdlc3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmRlYWRMZXR0ZXJRdWV1ZSA9IG5ldyBRdWV1ZSh0aGlzLCAnRExRJywge1xuICAgICAgZW5jcnlwdGlvbjogUXVldWVFbmNyeXB0aW9uLktNU19NQU5BR0VELFxuICAgICAgcmV0ZW50aW9uUGVyaW9kOiB0aGlzLnF1ZXVlUmV0ZW50aW9uUGVyaW9kLFxuICAgICAgdmlzaWJpbGl0eVRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5xdWV1ZSA9IG5ldyBRdWV1ZSh0aGlzLCAnUXVldWUnLCB7XG4gICAgICBkZWFkTGV0dGVyUXVldWU6IHtcbiAgICAgICAgbWF4UmVjZWl2ZUNvdW50OiA1LFxuICAgICAgICBxdWV1ZTogdGhpcy5kZWFkTGV0dGVyUXVldWUsXG4gICAgICB9LFxuICAgICAgZW5jcnlwdGlvbjogUXVldWVFbmNyeXB0aW9uLktNU19NQU5BR0VELFxuICAgICAgcmV0ZW50aW9uUGVyaW9kOiB0aGlzLnF1ZXVlUmV0ZW50aW9uUGVyaW9kLFxuICAgICAgdmlzaWJpbGl0eVRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgY29uZmlnRmlsZW5hbWUgPSAnY29uZmlnLmpzb24nO1xuICAgIGNvbnN0IGNvbmZpZyA9IG5ldyBUZW1wRmlsZShcbiAgICAgIGNvbmZpZ0ZpbGVuYW1lLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBwYWNrYWdlTGlua3M6IHByb3BzLnBhY2thZ2VMaW5rcyA/PyBbXSxcbiAgICAgICAgcGFja2FnZVRhZ3M6IHByb3BzLnBhY2thZ2VUYWdzID8/IFtdLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3Qgc3RvcmFnZUZhY3RvcnkgPSBTM1N0b3JhZ2VGYWN0b3J5LmdldE9yQ3JlYXRlKHRoaXMpO1xuICAgIGNvbnN0IGNvbmZpZ0J1Y2tldCA9IHN0b3JhZ2VGYWN0b3J5Lm5ld0J1Y2tldCh0aGlzLCAnQ29uZmlnQnVja2V0Jywge1xuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IEJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgICB2ZXJzaW9uZWQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCAnRGVwbG95SW5nZXN0aW9uQ29uZmlndXJhdGlvbicsIHtcbiAgICAgIHNvdXJjZXM6IFtTb3VyY2UuYXNzZXQoY29uZmlnLmRpcildLFxuICAgICAgZGVzdGluYXRpb25CdWNrZXQ6IGNvbmZpZ0J1Y2tldCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGVudmlyb25tZW50OiBGdW5jdGlvblByb3BzWydlbnZpcm9ubWVudCddID0ge1xuICAgICAgQVdTX0VNRl9FTlZJUk9OTUVOVDogJ0xvY2FsJyxcbiAgICAgIEJVQ0tFVF9OQU1FOiBwcm9wcy5idWNrZXQuYnVja2V0TmFtZSxcbiAgICAgIENPTkZJR19CVUNLRVRfTkFNRTogY29uZmlnQnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICBDT05GSUdfRklMRV9LRVk6IGNvbmZpZ0ZpbGVuYW1lLFxuICAgICAgU1RBVEVfTUFDSElORV9BUk46IHByb3BzLm9yY2hlc3RyYXRpb24uc3RhdGVNYWNoaW5lLnN0YXRlTWFjaGluZUFybixcbiAgICB9O1xuXG4gICAgaWYgKHByb3BzLmNvZGVBcnRpZmFjdCkge1xuICAgICAgZW52aXJvbm1lbnQuQ09ERV9BUlRJRkFDVF9SRVBPU0lUT1JZX0VORFBPSU5UID1cbiAgICAgICAgcHJvcHMuY29kZUFydGlmYWN0LnB1Ymxpc2hpbmdSZXBvc2l0b3J5TnBtRW5kcG9pbnQ7XG4gICAgICBlbnZpcm9ubWVudC5DT0RFX0FSVElGQUNUX0RPTUFJTl9OQU1FID1cbiAgICAgICAgcHJvcHMuY29kZUFydGlmYWN0LnJlcG9zaXRvcnlEb21haW5OYW1lO1xuICAgICAgZW52aXJvbm1lbnQuQ09ERV9BUlRJRkFDVF9ET01BSU5fT1dORVIgPVxuICAgICAgICBwcm9wcy5jb2RlQXJ0aWZhY3QucmVwb3NpdG9yeURvbWFpbk93bmVyO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5yZWxlYXNlTm90ZXNGZXRjaFF1ZXVlKSB7XG4gICAgICBlbnZpcm9ubWVudC5SRUxFQVNFX05PVEVTX0ZFVENIX1FVRVVFX1VSTCA9XG4gICAgICAgIHByb3BzLnJlbGVhc2VOb3Rlc0ZldGNoUXVldWUucXVldWVVcmw7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBIYW5kbGVyKHRoaXMsICdEZWZhdWx0Jywge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdbQ29uc3RydWN0SHViL0luZ2VzdGlvbl0gSW5nZXN0cyBuZXcgcGFja2FnZSB2ZXJzaW9ucyBpbnRvIHRoZSBDb25zdHJ1Y3QgSHViJyxcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgbG9nUmV0ZW50aW9uOiBwcm9wcy5sb2dSZXRlbnRpb24gPz8gUmV0ZW50aW9uRGF5cy5URU5fWUVBUlMsXG4gICAgICBtZW1vcnlTaXplOiAxMF8yNDAsIC8vIEN1cnJlbnRseSB0aGUgbWF4aW11bSBwb3NzaWJsZSBzZXR0aW5nXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICAgIHRyYWNpbmc6IFRyYWNpbmcuQUNUSVZFLFxuICAgIH0pO1xuICAgIHRoaXMuZnVuY3Rpb24gPSBoYW5kbGVyO1xuXG4gICAgY29uZmlnQnVja2V0LmdyYW50UmVhZChoYW5kbGVyKTtcbiAgICBwcm9wcy5idWNrZXQuZ3JhbnRXcml0ZSh0aGlzLmZ1bmN0aW9uKTtcbiAgICBwcm9wcy5jb2RlQXJ0aWZhY3Q/LmdyYW50UHVibGlzaFRvUmVwb3NpdG9yeShoYW5kbGVyKTtcbiAgICBwcm9wcy5vcmNoZXN0cmF0aW9uLnN0YXRlTWFjaGluZS5ncmFudFN0YXJ0RXhlY3V0aW9uKHRoaXMuZnVuY3Rpb24pO1xuXG4gICAgdGhpcy5mdW5jdGlvbi5hZGRFdmVudFNvdXJjZShcbiAgICAgIG5ldyBTcXNFdmVudFNvdXJjZSh0aGlzLnF1ZXVlLCB7IGJhdGNoU2l6ZTogMSB9KVxuICAgICk7XG4gICAgLy8gVGhpcyBldmVudCBzb3VyY2UgaXMgZGlzYWJsZWQsIGFuZCBjYW4gYmUgdXNlZCB0byByZS1wcm9jZXNzIGRlYWQtbGV0dGVyLXF1ZXVlIG1lc3NhZ2VzXG4gICAgdGhpcy5mdW5jdGlvbi5hZGRFdmVudFNvdXJjZShcbiAgICAgIG5ldyBTcXNFdmVudFNvdXJjZSh0aGlzLmRlYWRMZXR0ZXJRdWV1ZSwgeyBiYXRjaFNpemU6IDEsIGVuYWJsZWQ6IGZhbHNlIH0pXG4gICAgKTtcblxuICAgIGlmIChwcm9wcy5yZWxlYXNlTm90ZXNGZXRjaFF1ZXVlKSB7XG4gICAgICBwcm9wcy5yZWxlYXNlTm90ZXNGZXRjaFF1ZXVlLmdyYW50U2VuZE1lc3NhZ2VzKHRoaXMuZnVuY3Rpb24pO1xuICAgIH1cblxuICAgIC8vIFJlcHJvY2VzcyB3b3JrZmxvd1xuICAgIGNvbnN0IHJlcHJvY2Vzc1F1ZXVlID0gbmV3IFF1ZXVlKHRoaXMsICdSZXByb2Nlc3NRdWV1ZScsIHtcbiAgICAgIGRlYWRMZXR0ZXJRdWV1ZToge1xuICAgICAgICBtYXhSZWNlaXZlQ291bnQ6IDUsXG4gICAgICAgIHF1ZXVlOiB0aGlzLmRlYWRMZXR0ZXJRdWV1ZSxcbiAgICAgIH0sXG4gICAgICBlbmNyeXB0aW9uOiBRdWV1ZUVuY3J5cHRpb24uS01TX01BTkFHRUQsXG4gICAgICByZXRlbnRpb25QZXJpb2Q6IHRoaXMucXVldWVSZXRlbnRpb25QZXJpb2QsXG4gICAgICAvLyBWaXNpYmlsaXR5IHRpbWVvdXQgb2YgMTUgbWludXRlcyBtYXRjaGVzIHRoZSBMYW1iZGEgbWF4aW11bSBleGVjdXRpb24gdGltZS5cbiAgICAgIHZpc2liaWxpdHlUaW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICB9KTtcbiAgICBwcm9wcy5idWNrZXQuZ3JhbnRSZWFkKFxuICAgICAgdGhpcy5mdW5jdGlvbixcbiAgICAgIGAke1NUT1JBR0VfS0VZX1BSRUZJWH0qJHtQQUNLQUdFX0tFWV9TVUZGSVh9YFxuICAgICk7XG4gICAgdGhpcy5mdW5jdGlvbi5hZGRFdmVudFNvdXJjZShcbiAgICAgIG5ldyBTcXNFdmVudFNvdXJjZShyZXByb2Nlc3NRdWV1ZSwgeyBiYXRjaFNpemU6IDEgfSlcbiAgICApO1xuICAgIGNvbnN0IHJlcHJvY2Vzc1dvcmtmbG93ID0gbmV3IFJlcHJvY2Vzc0luZ2VzdGlvbldvcmtmbG93KFxuICAgICAgdGhpcyxcbiAgICAgICdSZXByb2Nlc3NXb3JrZmxvdycsXG4gICAgICB7IGJ1Y2tldDogcHJvcHMuYnVja2V0LCBxdWV1ZTogcmVwcm9jZXNzUXVldWUgfVxuICAgICk7XG5cbiAgICAvLyBSdW4gcmVwcm9jZXNzIHdvcmtmbG93IG9uIGEgZGFpbHkgYmFzaXNcbiAgICBjb25zdCB1cGRhdGVQZXJpb2QgPSBwcm9wcy5yZXByb2Nlc3NGcmVxdWVuY3k7XG4gICAgaWYgKHVwZGF0ZVBlcmlvZCkge1xuICAgICAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKHRoaXMsICdSZXByb2Nlc3NDcm9uSm9iJywge1xuICAgICAgICBzY2hlZHVsZTogU2NoZWR1bGUucmF0ZSh1cGRhdGVQZXJpb2QpLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1BlcmlvZGljYWxseSByZXByb2Nlc3MgYWxsIHBhY2thZ2VzJyxcbiAgICAgIH0pO1xuICAgICAgcnVsZS5hZGRUYXJnZXQoXG4gICAgICAgIG5ldyBTZm5TdGF0ZU1hY2hpbmUocmVwcm9jZXNzV29ya2Zsb3cuc3RhdGVNYWNoaW5lLCB7XG4gICAgICAgICAgaW5wdXQ6IFJ1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgIGNvbW1lbnQ6ICdTY2hlZHVsZWQgcmVwcm9jZXNzaW5nIGV2ZW50IGZyb20gY3JvbiBqb2IuJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMuZnVuY3Rpb24uZ3JhbnRQcmluY2lwYWw7XG5cbiAgICBwcm9wcy5tb25pdG9yaW5nLmFkZExvd1NldmVyaXR5QWxhcm0oXG4gICAgICAnSW5nZXN0aW9uIERlYWQtTGV0dGVyIFF1ZXVlIG5vdCBlbXB0eScsXG4gICAgICBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICBleHByZXNzaW9uOiAnbTEgKyBtMicsXG4gICAgICAgIHVzaW5nTWV0cmljczoge1xuICAgICAgICAgIG0xOiB0aGlzLmRlYWRMZXR0ZXJRdWV1ZS5tZXRyaWNBcHByb3hpbWF0ZU51bWJlck9mTWVzc2FnZXNWaXNpYmxlKHtcbiAgICAgICAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBtMjogdGhpcy5kZWFkTGV0dGVyUXVldWUubWV0cmljQXBwcm94aW1hdGVOdW1iZXJPZk1lc3NhZ2VzTm90VmlzaWJsZSh7XG4gICAgICAgICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KS5jcmVhdGVBbGFybSh0aGlzLCAnRExRQWxhcm0nLCB7XG4gICAgICAgIGFsYXJtTmFtZTogYCR7dGhpcy5ub2RlLnBhdGh9L0RMUU5vdEVtcHR5YCxcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogW1xuICAgICAgICAgICdUaGUgZGVhZC1sZXR0ZXIgcXVldWUgZm9yIHRoZSBJbmdlc3Rpb24gZnVuY3Rpb24gaXMgbm90IGVtcHR5IScsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgYFJ1bkJvb2s6ICR7UlVOQk9PS19VUkx9YCxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICBgRGlyZWN0IGxpbmsgdG8gdGhlIHF1ZXVlOiAke3Nxc1F1ZXVlVXJsKHRoaXMuZGVhZExldHRlclF1ZXVlKX1gLFxuICAgICAgICAgIGBEaXJlY3QgbGluayB0byB0aGUgZnVuY3Rpb246ICR7bGFtYmRhRnVuY3Rpb25VcmwodGhpcy5mdW5jdGlvbil9YCxcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOlxuICAgICAgICAgIENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICAvLyBTUVMgZG9lcyBub3QgZW1pdCBtZXRyaWNzIGlmIHRoZSBxdWV1ZSBoYXMgYmVlbiBlbXB0eSBmb3IgYSB3aGlsZSwgd2hpY2ggaXMgR09PRC5cbiAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgcHJvcHMub3ZlcnZpZXdEYXNoYm9hcmQuYWRkRExRTWV0cmljVG9EYXNoYm9hcmQoXG4gICAgICAnSW5nZXN0aW9uIERMUScsXG4gICAgICB0aGlzLmRlYWRMZXR0ZXJRdWV1ZVxuICAgICk7XG4gICAgcHJvcHMubW9uaXRvcmluZy5hZGRIaWdoU2V2ZXJpdHlBbGFybShcbiAgICAgICdJbmdlc3Rpb24gZmFpbHVyZXMnLFxuICAgICAgdGhpcy5mdW5jdGlvbi5tZXRyaWNFcnJvcnMoKS5jcmVhdGVBbGFybSh0aGlzLCAnRmFpbHVyZUFsYXJtJywge1xuICAgICAgICBhbGFybU5hbWU6IGAke3RoaXMubm9kZS5wYXRofS9GYWlsdXJlYCxcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogW1xuICAgICAgICAgICdUaGUgSW5nZXN0aW9uIGZ1bmN0aW9uIGlzIGZhaWxpbmchJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICBgUnVuQm9vazogJHtSVU5CT09LX1VSTH1gLFxuICAgICAgICAgICcnLFxuICAgICAgICAgIGBEaXJlY3QgbGluayB0byB0aGUgZnVuY3Rpb246ICR7bGFtYmRhRnVuY3Rpb25VcmwodGhpcy5mdW5jdGlvbil9YCxcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOlxuICAgICAgICAgIENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMixcbiAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICAvLyBMYW1iZGEgb25seSBlbWl0cyBtZXRyaWNzIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGludm9rZWQuIE5vIGludm9rYXRpb24gPT4gbm8gZXJyb3JzLlxuICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBwcm9wcy5vdmVydmlld0Rhc2hib2FyZC5hZGRDb25jdXJyZW50RXhlY3V0aW9uTWV0cmljVG9EYXNoYm9hcmQoXG4gICAgICBoYW5kbGVyLFxuICAgICAgJ0luZ2VzdGlvbkxhbWJkYSdcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0ZvdW5kTGljZW5zZUZpbGUob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLlNVTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBNZXRyaWNOYW1lLkZPVU5EX0xJQ0VOU0VfRklMRSxcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljSW5lbGlnaWJsZUxpY2Vuc2Uob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLlNVTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBNZXRyaWNOYW1lLklORUxJR0lCTEVfTElDRU5TRSxcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljSW52YWxpZEFzc2VtYmx5KG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5TVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogTWV0cmljTmFtZS5JTlZBTElEX0FTU0VNQkxZLFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNJbnZhbGlkVGFyYmFsbChvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuU1VNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IE1ldHJpY05hbWUuSU5WQUxJRF9UQVJCQUxMLFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldHJpY3MgaXMgdGhlIHRvdGFsIGNvdW50IG9mIHBhY2thZ2VzIHRoYXQgd2VyZSByZWplY3RlZCBkdWUgdG9cbiAgICogbWlzbWF0Y2hlZCBpZGVudGl0eSAobmFtZSwgdmVyc2lvbiwgbGljZW5zZSkgYmV0d2VlbiB0aGUgYHBhY2thZ2UuanNvbmBcbiAgICogZmlsZSBhbmQgdGhlIGAuanNpaWAgYXR0cmlidXRlLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY01pc21hdGNoZWRJZGVudGl0eVJlamVjdGlvbnMob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLlNVTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBNZXRyaWNOYW1lLk1JU01BVENIRURfSURFTlRJVFlfUkVKRUNUSU9OUyxcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFJlcHJvY2Vzc0luZ2VzdGlvbldvcmtmbG93UHJvcHMge1xuICByZWFkb25seSBidWNrZXQ6IElCdWNrZXQ7XG4gIHJlYWRvbmx5IHF1ZXVlOiBJUXVldWU7XG59XG5cbi8qKlxuICogQSBTdGVwRnVuY3Rpb25zIFN0YXRlIE1hY2hpbmUgdG8gcmVwcm9jZXNzIGV2ZXJ5IGN1cnJlbnRseSBpbmRleGVkIHBhY2thZ2VcbiAqIHRocm91Z2ggdGhlIGluZ2VzdGlvbiBmdW5jdGlvbi4gVGhpcyBzaG91bGQgbm90IGJlIGZyZXF1ZW50bHkgcmVxdWlyZWQsIGJ1dFxuICogY2FuIGNvbWUgaW4gaGFuZHkgYXQgdGltZXMuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvIHRoZSBydW5ib29rIGF0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2RrbGFicy9jb25zdHJ1Y3QtaHViL2Jsb2IvbWFpbi9kb2NzL29wZXJhdG9yLXJ1bmJvb2subWRcbiAqL1xuY2xhc3MgUmVwcm9jZXNzSW5nZXN0aW9uV29ya2Zsb3cgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdGVNYWNoaW5lOiBTdGF0ZU1hY2hpbmU7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogUmVwcm9jZXNzSW5nZXN0aW9uV29ya2Zsb3dQcm9wc1xuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgbGFtYmRhRnVuY3Rpb24gPSBuZXcgUmVJbmdlc3QodGhpcywgJ0Z1bmN0aW9uJywge1xuICAgICAgYXJjaGl0ZWN0dXJlOiBncmF2aXRvbkxhbWJkYUlmQXZhaWxhYmxlKHRoaXMpLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdbQ29uc3RydWN0SHViL0luZ2VzdGlvbi9SZUluZ2VzdF0gVGhlIGZ1bmN0aW9uIHVzZWQgdG8gcmVwcm9jZXNzIHBhY2thZ2VzIHRocm91Z2ggaW5nZXN0aW9uJyxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIEJVQ0tFVF9OQU1FOiBwcm9wcy5idWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgUVVFVUVfVVJMOiBwcm9wcy5xdWV1ZS5xdWV1ZVVybCxcbiAgICAgIH0sXG4gICAgICBtZW1vcnlTaXplOiAxMF8yNDAsXG4gICAgICB0cmFjaW5nOiBUcmFjaW5nLkFDVElWRSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMyksXG4gICAgfSk7XG5cbiAgICBwcm9wcy5xdWV1ZS5ncmFudFNlbmRNZXNzYWdlcyhsYW1iZGFGdW5jdGlvbik7XG4gICAgcHJvcHMuYnVja2V0LmdyYW50UmVhZChcbiAgICAgIGxhbWJkYUZ1bmN0aW9uLFxuICAgICAgYCR7U1RPUkFHRV9LRVlfUFJFRklYfSoke01FVEFEQVRBX0tFWV9TVUZGSVh9YFxuICAgICk7XG4gICAgcHJvcHMuYnVja2V0LmdyYW50UmVhZChcbiAgICAgIGxhbWJkYUZ1bmN0aW9uLFxuICAgICAgYCR7U1RPUkFHRV9LRVlfUFJFRklYfSoke1BBQ0tBR0VfS0VZX1NVRkZJWH1gXG4gICAgKTtcblxuICAgIC8vIE5lZWQgdG8gcGh5c2ljYWwtbmFtZSB0aGUgc3RhdGUgbWFjaGluZSBzbyBpdCBjYW4gc2VsZi1pbnZva2UuXG4gICAgY29uc3Qgc3RhdGVNYWNoaW5lTmFtZSA9IHN0YXRlTWFjaGluZU5hbWVGcm9tKHRoaXMubm9kZS5wYXRoKTtcblxuICAgIGNvbnN0IGxpc3RCdWNrZXQgPSBuZXcgQ2hvaWNlKHRoaXMsICdIYXMgYSBDb250aW51YXRpb25Ub2tlbj8nKVxuICAgICAgLndoZW4oXG4gICAgICAgIENvbmRpdGlvbi5pc1ByZXNlbnQoJyQuQ29udGludWF0aW9uVG9rZW4nKSxcbiAgICAgICAgbmV3IENhbGxBd3NTZXJ2aWNlKHRoaXMsICdTMy5MaXN0T2JqZWN0c1YyKE5leHRQYWdlKScsIHtcbiAgICAgICAgICBzZXJ2aWNlOiAnczMnLFxuICAgICAgICAgIGFjdGlvbjogJ2xpc3RPYmplY3RzVjInLFxuICAgICAgICAgIGlhbUFjdGlvbjogJ3MzOkxpc3RCdWNrZXQnLFxuICAgICAgICAgIGlhbVJlc291cmNlczogW3Byb3BzLmJ1Y2tldC5idWNrZXRBcm5dLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIEJ1Y2tldDogcHJvcHMuYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgICAgICBDb250aW51YXRpb25Ub2tlbjogSnNvblBhdGguc3RyaW5nQXQoJyQuQ29udGludWF0aW9uVG9rZW4nKSxcbiAgICAgICAgICAgIFByZWZpeDogU1RPUkFHRV9LRVlfUFJFRklYLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzdWx0UGF0aDogJyQucmVzcG9uc2UnLFxuICAgICAgICB9KS5hZGRSZXRyeSh7IGVycm9yczogWydTMy5TZGtDbGllbnRFeGNlcHRpb24nXSB9KVxuICAgICAgKVxuICAgICAgLm90aGVyd2lzZShcbiAgICAgICAgbmV3IENhbGxBd3NTZXJ2aWNlKHRoaXMsICdTMy5MaXN0T2JqZWN0c1YyKEZpcnN0UGFnZSknLCB7XG4gICAgICAgICAgc2VydmljZTogJ3MzJyxcbiAgICAgICAgICBhY3Rpb246ICdsaXN0T2JqZWN0c1YyJyxcbiAgICAgICAgICBpYW1BY3Rpb246ICdzMzpMaXN0QnVja2V0JyxcbiAgICAgICAgICBpYW1SZXNvdXJjZXM6IFtwcm9wcy5idWNrZXQuYnVja2V0QXJuXSxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBCdWNrZXQ6IHByb3BzLmJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICAgICAgUHJlZml4OiBTVE9SQUdFX0tFWV9QUkVGSVgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5yZXNwb25zZScsXG4gICAgICAgIH0pLmFkZFJldHJ5KHsgZXJyb3JzOiBbJ1MzLlNka0NsaWVudEV4Y2VwdGlvbiddIH0pXG4gICAgICApXG4gICAgICAuYWZ0ZXJ3YXJkcygpO1xuXG4gICAgY29uc3QgcHJvY2VzcyA9IG5ldyBNYXAodGhpcywgJ1Byb2Nlc3MgUmVzdWx0Jywge1xuICAgICAgaXRlbXNQYXRoOiAnJC5yZXNwb25zZS5Db250ZW50cycsXG4gICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgIH0pLml0ZXJhdG9yKFxuICAgICAgbmV3IENob2ljZSh0aGlzLCAnSXMgbWV0YWRhdGEgb2JqZWN0PycpXG4gICAgICAgIC53aGVuKFxuICAgICAgICAgIENvbmRpdGlvbi5zdHJpbmdNYXRjaGVzKCckLktleScsIGAqJHtNRVRBREFUQV9LRVlfU1VGRklYfWApLFxuICAgICAgICAgIG5ldyBMYW1iZGFJbnZva2UodGhpcywgJ1NlbmQgZm9yIHJlcHJvY2Vzc2luZycsIHsgbGFtYmRhRnVuY3Rpb24gfSlcbiAgICAgICAgICAgIC8vIEFtcGxlIHJldHJpZXMgaGVyZS4uLiBXZSBzaG91bGQgbmV2ZXIgZmFpbCBiZWNhdXNlIG9mIHRocm90dGxpbmcuLi4uXG4gICAgICAgICAgICAuYWRkUmV0cnkoe1xuICAgICAgICAgICAgICBlcnJvcnM6IFsnTGFtYmRhLlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvbiddLFxuICAgICAgICAgICAgICBiYWNrb2ZmUmF0ZTogMS4xLFxuICAgICAgICAgICAgICBpbnRlcnZhbDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgICAgICAgICAgbWF4QXR0ZW1wdHM6IDMwLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAub3RoZXJ3aXNlKG5ldyBTdWNjZWVkKHRoaXMsICdOb3RoaW5nIHRvIGRvJykpXG4gICAgKTtcblxuICAgIGxpc3RCdWNrZXQubmV4dChcbiAgICAgIG5ldyBDaG9pY2UodGhpcywgJ0lzIHRoZXJlIG1vcmU/JylcbiAgICAgICAgLndoZW4oXG4gICAgICAgICAgQ29uZGl0aW9uLmlzUHJlc2VudCgnJC5yZXNwb25zZS5OZXh0Q29udGludWF0aW9uVG9rZW4nKSxcblxuICAgICAgICAgIG5ldyBXYWl0KHRoaXMsICdHaXZlIHJvb20gZm9yIG9uLWRlbWFuZCB3b3JrJywge1xuICAgICAgICAgICAgLy8gU2xlZXAgYSBsaXR0bGUgYmVmb3JlIGVucXVldWluZyB0aGUgbmV4dCBiYXRjaCwgc28gdGhhdCB3ZSBsZWF2ZSByb29tIGluIHRoZSB3b3JrZXJcbiAgICAgICAgICAgIC8vIHBvb2wgZm9yIGhhbmRsaW5nIG9uLWRlbWFuZCB3b3JrLiBJZiB3ZSBkb24ndCBkbyB0aGlzLCA2MGsgaXRlbXMgd2lsbCBiZSBxdWV1ZWQgYXRcbiAgICAgICAgICAgIC8vIG9uY2UgYW5kIGxpdmUgdXBkYXRlcyBmcm9tIE5QTSB3aWxsIHN0cnVnZ2xlIHRvIGdldCBpbiBpbiBhIHJlYXNvbmFibGUgdGltZS5cbiAgICAgICAgICAgIHRpbWU6IFdhaXRUaW1lLmR1cmF0aW9uKHdhaXRUaW1lQmV0d2VlblJlcHJvY2Vzc0JhdGNoZXMoKSksXG4gICAgICAgICAgfSkubmV4dChcbiAgICAgICAgICAgIG5ldyBTdGVwRnVuY3Rpb25zU3RhcnRFeGVjdXRpb24odGhpcywgJ0NvbnRpbnVlIGFzIG5ldycsIHtcbiAgICAgICAgICAgICAgYXNzb2NpYXRlV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lOiBTdGF0ZU1hY2hpbmUuZnJvbVN0YXRlTWFjaGluZUFybihcbiAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICdUaGlzU3RhdGVNYWNoaW5lJyxcbiAgICAgICAgICAgICAgICBTdGFjay5vZih0aGlzKS5mb3JtYXRBcm4oe1xuICAgICAgICAgICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgICAgICAgICAgIHNlcnZpY2U6ICdzdGF0ZXMnLFxuICAgICAgICAgICAgICAgICAgcmVzb3VyY2U6ICdzdGF0ZU1hY2hpbmUnLFxuICAgICAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiBzdGF0ZU1hY2hpbmVOYW1lLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGlucHV0OiBUYXNrSW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgQ29udGludWF0aW9uVG9rZW46IEpzb25QYXRoLnN0cmluZ0F0KFxuICAgICAgICAgICAgICAgICAgJyQucmVzcG9uc2UuTmV4dENvbnRpbnVhdGlvblRva2VuJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBpbnRlZ3JhdGlvblBhdHRlcm46IEludGVncmF0aW9uUGF0dGVybi5SRVFVRVNUX1JFU1BPTlNFLFxuICAgICAgICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgICAgICAgfSkuYWRkUmV0cnkoeyBlcnJvcnM6IFsnU3RlcEZ1bmN0aW9ucy5FeGVjdXRpb25MaW1pdEV4Y2VlZGVkJ10gfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLmFmdGVyd2FyZHMoeyBpbmNsdWRlT3RoZXJ3aXNlOiB0cnVlIH0pXG4gICAgICAgIC5uZXh0KHByb2Nlc3MpXG4gICAgKTtcblxuICAgIHRoaXMuc3RhdGVNYWNoaW5lID0gbmV3IFN0YXRlTWFjaGluZSh0aGlzLCAnU3RhdGVNYWNoaW5lJywge1xuICAgICAgZGVmaW5pdGlvbjogbGlzdEJ1Y2tldCxcbiAgICAgIHN0YXRlTWFjaGluZU5hbWUsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5ob3VycygxKSxcbiAgICB9KTtcblxuICAgIHByb3BzLmJ1Y2tldC5ncmFudFJlYWQodGhpcy5zdGF0ZU1hY2hpbmUpO1xuICAgIHByb3BzLnF1ZXVlLmdyYW50U2VuZE1lc3NhZ2VzKHRoaXMuc3RhdGVNYWNoaW5lKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgdHVybnMgYSBub2RlIHBhdGggaW50byBhIHZhbGlkIHN0YXRlIG1hY2hpbmUgbmFtZSwgdG8gdHJ5IGFuZCBpbXByb3ZlXG4gKiB0aGUgU3RlcEZ1bmN0aW9uJ3MgQVdTIGNvbnNvbGUgZXhwZXJpZW5jZSB3aGlsZSBtaW5pbWl6aW5nIHRoZSByaXNrIGZvclxuICogY29sbGlzb25zLlxuICovXG5mdW5jdGlvbiBzdGF0ZU1hY2hpbmVOYW1lRnJvbShub2RlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gUG9vciBtYW4ncyByZXBsYWNlIGFsbC4uLlxuICByZXR1cm4gbm9kZVBhdGguc3BsaXQoL1teYS16MC05KyFALigpPV8nLV0rL2kpLmpvaW4oJy4nKTtcbn1cblxuLyoqXG4gKiBUaGUgdGltZSB3ZSB3YWl0IGJldHdlZW4gZW5xdWV1ZWluZyBkaWZmZXJlbnQgYmF0Y2hlcyBvZiB0aGUgcmVwcm9jZXNzaW5nIG1hY2hpbmVcbiAqL1xuZnVuY3Rpb24gd2FpdFRpbWVCZXR3ZWVuUmVwcm9jZXNzQmF0Y2hlcygpIHtcbiAgLy8gQXZlcmFnZSB0aW1lIHBlciBFQ1MgdGFzay4gV2UgZG9uJ3ZlIGhhdmUgc3RhdGlzdGljcyBvbiB0aGlzLCBidXRcbiAgLy8gY2FuIGJlIHJvdWdobHkgZGVyaXZlZCBmcm9tOlxuXG4gIC8vIEV2ZXJ5IGRheSB3ZSBwcm9jZXNzIGFib3V0IDYwayBpdGVtcyB3aXRoIDEwMDAgd29ya2VycyBpbiA0IGhvdXJzLlxuICAvLyA0IGhvdXJzIC8gKDYwXzAwMCAvIDEwMDApIH49IDQgbWludXRlc1xuICBjb25zdCBhdmdUaW1lUGVyVGFzayA9IER1cmF0aW9uLm1pbnV0ZXMoNCk7XG5cbiAgLy8gSG93IG1hbnkgb2JqZWN0cyBhcmUgcmV0dXJuZWQgYnkgJ2xpc3RPYmplY3RzVjInLCBwZXIgY2FsbFxuICBjb25zdCBiYXRjaFNpemUgPSAxMDAwO1xuXG4gIC8vIEhvdyBtYW55IHdvcmtlcnMgd2UgaGF2ZSBhdCBvdXIgZGlzcG9zYWxcbiAgY29uc3Qgd29ya2VycyA9IDEwMDA7XG5cbiAgLy8gVGhlIHN0ZXAgZnVuY3Rpb25zIHN0YXRlIG1hY2hpbmUgY2FuJ3QgaW5zdGFudGFuZW91c2x5IHN0YXJ0IGFsbCAxMDAwXG4gIC8vIHRhc2tzLCB0aGV5IGFyZSBzdGFnZ2VyZWQgb3ZlciB0aW1lIC0tIHNvIGluIHByYWN0aWNlIHRoZSBhdmVyYWdlIGxvYWQgYVxuICAvLyBzaW5nbGUgYmF0Y2ggcHV0cyBvbiB0aGUgRUNTIGNsdXN0ZXIgYXQgYW55IHBvaW50IGluIHRpbWUgaXMgYSBsb3QgbG93ZXIuXG4gIGNvbnN0IHNmblN0YWdnZXJGYWN0b3IgPSAwLjA1O1xuXG4gIC8vIFdoYXQgZnJhY3Rpb24gb2YgY2FwYWNpdHkgWzAuLjEpIHdlIHdhbnQgdG8ga2VlcCBhdmFpbGFibGUgZm9yIG9uLWRlbWFuZFxuICAvLyB3b3JrLCB3aGlsZSByZXByb2Nlc3NpbmcuXG4gIGNvbnN0IG1hcmdpbkZyYWMgPSAwLjI7XG5cbiAgY29uc3Qgc2Vjb25kcyA9XG4gICAgKChhdmdUaW1lUGVyVGFzay50b1NlY29uZHMoKSAqIHNmblN0YWdnZXJGYWN0b3IpIC8gKDEgLSBtYXJnaW5GcmFjKSkgKlxuICAgIChiYXRjaFNpemUgLyB3b3JrZXJzKTtcbiAgcmV0dXJuIER1cmF0aW9uLnNlY29uZHMoTWF0aC5mbG9vcihzZWNvbmRzKSk7XG59XG4iXX0=
362
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZC9pbmdlc3Rpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXlEO0FBQ3pELCtEQU9vQztBQUNwQyx1REFBeUU7QUFDekUsdUVBQWlFO0FBRWpFLHVEQUEyRTtBQUMzRSxtRkFBc0U7QUFDdEUsbURBQXFEO0FBQ3JELCtDQUFnRTtBQUNoRSxxRUFBeUU7QUFDekUsaURBQXFFO0FBQ3JFLHFFQVd1QztBQUN2QyxpRkFJNkM7QUFDN0MsMkNBQXVDO0FBQ3ZDLDJDQUE0RDtBQUM1RCwyQ0FBbUQ7QUFDbkQsMkNBQXVDO0FBRXZDLCtDQUFpRTtBQUlqRSxtREFBZ0Q7QUFDaEQsOENBQW9EO0FBQ3BELCtDQUEyQztBQUUzQyxrRUFBb0U7QUFFcEUsbURBSTZCO0FBbUU3Qjs7Ozs7O0dBTUc7QUFDSCxNQUFhLFNBQVUsU0FBUSxzQkFBUztJQW1CdEMsWUFBbUIsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDcEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUxILHlCQUFvQixHQUFHLHNCQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBT3ZELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtZQUM1QyxVQUFVLEVBQUUseUJBQWUsQ0FBQyxXQUFXO1lBQ3ZDLGVBQWUsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1lBQzFDLGlCQUFpQixFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUN4QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZUFBSyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7WUFDcEMsZUFBZSxFQUFFO2dCQUNmLGVBQWUsRUFBRSxDQUFDO2dCQUNsQixLQUFLLEVBQUUsSUFBSSxD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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIFN0YWNrLCBBcm5Gb3JtYXQgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBDb21wYXJpc29uT3BlcmF0b3IsXG4gIE1hdGhFeHByZXNzaW9uLFxuICBNZXRyaWMsXG4gIE1ldHJpY09wdGlvbnMsXG4gIFN0YXRpc3RpYyxcbiAgVHJlYXRNaXNzaW5nRGF0YSxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0IHsgUnVsZSwgUnVsZVRhcmdldElucHV0LCBTY2hlZHVsZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0IHsgU2ZuU3RhdGVNYWNoaW5lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCB7IElHcmFudGFibGUsIElQcmluY2lwYWwgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEZ1bmN0aW9uUHJvcHMsIElGdW5jdGlvbiwgVHJhY2luZyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgU3FzRXZlbnRTb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLWV2ZW50LXNvdXJjZXMnO1xuaW1wb3J0IHsgUmV0ZW50aW9uRGF5cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IEJsb2NrUHVibGljQWNjZXNzLCBJQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IEJ1Y2tldERlcGxveW1lbnQsIFNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1kZXBsb3ltZW50JztcbmltcG9ydCB7IElRdWV1ZSwgUXVldWUsIFF1ZXVlRW5jcnlwdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zcXMnO1xuaW1wb3J0IHtcbiAgU3RhdGVNYWNoaW5lLFxuICBKc29uUGF0aCxcbiAgQ2hvaWNlLFxuICBTdWNjZWVkLFxuICBDb25kaXRpb24sXG4gIE1hcCxcbiAgVGFza0lucHV0LFxuICBJbnRlZ3JhdGlvblBhdHRlcm4sXG4gIFdhaXQsXG4gIFdhaXRUaW1lLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQge1xuICBDYWxsQXdzU2VydmljZSxcbiAgTGFtYmRhSW52b2tlLFxuICBTdGVwRnVuY3Rpb25zU3RhcnRFeGVjdXRpb24sXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTWV0cmljTmFtZSwgTUVUUklDU19OQU1FU1BBQ0UgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBJbmdlc3Rpb24gYXMgSGFuZGxlciB9IGZyb20gJy4vaW5nZXN0aW9uJztcbmltcG9ydCB7IFJlSW5nZXN0IH0gZnJvbSAnLi9yZS1pbmdlc3QnO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gJy4uLy4uL2NvZGVhcnRpZmFjdC9yZXBvc2l0b3J5JztcbmltcG9ydCB7IGxhbWJkYUZ1bmN0aW9uVXJsLCBzcXNRdWV1ZVVybCB9IGZyb20gJy4uLy4uL2RlZXAtbGluayc7XG5pbXBvcnQgeyBNb25pdG9yaW5nIH0gZnJvbSAnLi4vLi4vbW9uaXRvcmluZyc7XG5pbXBvcnQgeyBPdmVydmlld0Rhc2hib2FyZCB9IGZyb20gJy4uLy4uL292ZXJ2aWV3LWRhc2hib2FyZCc7XG5pbXBvcnQgeyBQYWNrYWdlVGFnQ29uZmlnIH0gZnJvbSAnLi4vLi4vcGFja2FnZS10YWcnO1xuaW1wb3J0IHsgUlVOQk9PS19VUkwgfSBmcm9tICcuLi8uLi9ydW5ib29rLXVybCc7XG5pbXBvcnQgeyBTM1N0b3JhZ2VGYWN0b3J5IH0gZnJvbSAnLi4vLi4vczMvc3RvcmFnZSc7XG5pbXBvcnQgeyBUZW1wRmlsZSB9IGZyb20gJy4uLy4uL3RlbXAtZmlsZSc7XG5pbXBvcnQgdHlwZSB7IFBhY2thZ2VMaW5rQ29uZmlnIH0gZnJvbSAnLi4vLi4vd2ViYXBwJztcbmltcG9ydCB7IGdyYXZpdG9uTGFtYmRhSWZBdmFpbGFibGUgfSBmcm9tICcuLi9fbGFtYmRhLWFyY2hpdGVjdHVyZSc7XG5pbXBvcnQgeyBPcmNoZXN0cmF0aW9uIH0gZnJvbSAnLi4vb3JjaGVzdHJhdGlvbic7XG5pbXBvcnQge1xuICBTVE9SQUdFX0tFWV9QUkVGSVgsXG4gIE1FVEFEQVRBX0tFWV9TVUZGSVgsXG4gIFBBQ0tBR0VfS0VZX1NVRkZJWCxcbn0gZnJvbSAnLi4vc2hhcmVkL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5nZXN0aW9uUHJvcHMge1xuICAvKipcbiAgICogVGhlIGJ1Y2tldCBpbiB3aGljaCBpbmdlc3RlZCBvYmplY3RzIGFyZSBkdWUgdG8gYmUgaW5zZXJ0ZWQuXG4gICAqL1xuICByZWFkb25seSBidWNrZXQ6IElCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBDb2RlQXJ0aWZhY3QgcmVwb3NpdG9yeSB0byB3aGljaCBwYWNrYWdlcyBzaG91bGQgYmUgcHVibGlzaGVkLiBUaGlzIGlzXG4gICAqIHRoZSBDb25zdHJ1Y3RIdWIgaW50ZXJuYWwgQ29kZUFydGlmYWN0IHJlcG9zaXRvcnksIGlmIG9uZSBleGlzdHMuXG4gICAqL1xuICByZWFkb25seSBjb2RlQXJ0aWZhY3Q/OiBSZXBvc2l0b3J5O1xuXG4gIC8qKlxuICAgKiBUaGUgbW9uaXRvcmluZyBoYW5kbGVyIHRvIHJlZ2lzdGVyIGFsYXJtcyB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9uaXRvcmluZzogTW9uaXRvcmluZztcblxuICAvKipcbiAgICogVGhlIGJhY2tlbmQgb3JjaGVzdHJhdGlvbiB0byBpbnZva2Ugb25jZSB0aGUgcGFja2FnZSBtZXRhZGF0YSBoYXMgYmVlblxuICAgKiBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZC5cbiAgICovXG4gIHJlYWRvbmx5IG9yY2hlc3RyYXRpb246IE9yY2hlc3RyYXRpb247XG5cbiAgcmVhZG9ubHkgb3ZlcnZpZXdEYXNoYm9hcmQ6IE92ZXJ2aWV3RGFzaGJvYXJkO1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0byByZXRhaW4gdGhlIENsb3VkV2F0Y2ggbG9ncy5cbiAgICpcbiAgICogQGRlZmF1bHQgUmV0ZW50aW9uRGF5cy5URU5fWUVBUlNcbiAgICovXG4gIHJlYWRvbmx5IGxvZ1JldGVudGlvbj86IFJldGVudGlvbkRheXM7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIGN1c3RvbSBwYWNrYWdlIHBhZ2UgbGlua3MuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlTGlua3M/OiBQYWNrYWdlTGlua0NvbmZpZ1tdO1xuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVkIGNvbmZpZ3VyYXRpb24gZm9yIGN1c3RvbSBwYWNrYWdlIHRhZ3MuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlVGFncz86IFBhY2thZ2VUYWdDb25maWdbXTtcblxuICAvKipcbiAgICogSG93IGZyZXF1ZW50bHkgYWxsIHBhY2thZ2VzIHNob3VsZCBnZXQgZnVsbHkgcmVwcm9jZXNzZWQuXG4gICAqXG4gICAqIFNlZSB0aGUgb3BlcmF0b3IgcnVuYm9vayBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCByZXByb2Nlc3NpbmcuXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nka2xhYnMvY29uc3RydWN0LWh1Yi9ibG9iL21haW4vZG9jcy9vcGVyYXRvci1ydW5ib29rLm1kXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbmV2ZXJcbiAgICovXG4gIHJlYWRvbmx5IHJlcHJvY2Vzc0ZyZXF1ZW5jeT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBQYWNrYWdlIHZlcnNpb25zIHRoYXQgaGF2ZSBiZWVuIHB1Ymxpc2hlZCBiZWZvcmUgdGhpcyB0aW1lIHdpbmRvdyB3aWxsIG5vdCBiZSByZXByb2Nlc3NlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uZGF5cyg5MClcbiAgICovXG4gIHJlYWRvbmx5IHJlcHJvY2Vzc0FnZT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgU1FTIHF1ZXVlIHdoZXJlIG5ldyBwYWNrYWdlIHdpbGwgYmUgYWRkZWQgdG8gZmV0Y2ggcmVsZWFzZSBub3Rlcy5cbiAgICovXG4gIHJlYWRvbmx5IHJlbGVhc2VOb3Rlc0ZldGNoUXVldWU/OiBJUXVldWU7XG59XG5cbi8qKlxuICogVGhlIGluZ2VzdGlvbiBmdW5jdGlvbiByZWNlaXZlcyBtZXNzYWdlcyBmcm9tIGRpc2NvdmVyeSBpbnRlZ3JhdGlvbnMgYW5kXG4gKiBwcm9jZXNzZXMgdGhlaXIgcGF5bG9hZHMgaW50byB0aGUgcHJvdmlkZWQgUzMgQnVja2V0LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBhbiBgSUdyYW50YWJsZWAsIHNvIHRoYXQgaXQgY2FuIGJlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAqIHRvIHJlYWQgZnJvbSB0aGUgc291cmNlIFMzIGJ1Y2tldHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbmdlc3Rpb24gZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJR3JhbnRhYmxlIHtcbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBJUHJpbmNpcGFsO1xuXG4gIC8qKlxuICAgKiBUaGUgU1FTIHF1ZXVlIHRoYXQgdHJpZ2dlcnMgdGhlIGluZ2VzdGlvbiBmdW5jdGlvbi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBxdWV1ZTogSVF1ZXVlO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5nZXN0aW9uIGRlYWQgbGV0dGVyIHF1ZXVlLCB3aGljaCB3aWxsIGhvbGQgbWVzc2FnZXMgdGhhdCBmYWlsZWRcbiAgICogaW5nZXN0aW9uIG9uZSB0b28gbWFueSB0aW1lcywgc28gdGhhdCBwb2lzb24gcGlsbHMgZG9uJ3QgZW5kbGVzc2x5IGNvbnN1bWVcbiAgICogcmVzb3VyY2VzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlYWRMZXR0ZXJRdWV1ZTogSVF1ZXVlO1xuXG4gIHB1YmxpYyByZWFkb25seSBxdWV1ZVJldGVudGlvblBlcmlvZCA9IER1cmF0aW9uLmRheXMoMTQpO1xuXG4gIHB1YmxpYyByZWFkb25seSBmdW5jdGlvbjogSUZ1bmN0aW9uO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSW5nZXN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5kZWFkTGV0dGVyUXVldWUgPSBuZXcgUXVldWUodGhpcywgJ0RMUScsIHtcbiAgICAgIGVuY3J5cHRpb246IFF1ZXVlRW5jcnlwdGlvbi5LTVNfTUFOQUdFRCxcbiAgICAgIHJldGVudGlvblBlcmlvZDogdGhpcy5xdWV1ZVJldGVudGlvblBlcmlvZCxcbiAgICAgIHZpc2liaWxpdHlUaW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICB9KTtcblxuICAgIHRoaXMucXVldWUgPSBuZXcgUXVldWUodGhpcywgJ1F1ZXVlJywge1xuICAgICAgZGVhZExldHRlclF1ZXVlOiB7XG4gICAgICAgIG1heFJlY2VpdmVDb3VudDogNSxcbiAgICAgICAgcXVldWU6IHRoaXMuZGVhZExldHRlclF1ZXVlLFxuICAgICAgfSxcbiAgICAgIGVuY3J5cHRpb246IFF1ZXVlRW5jcnlwdGlvbi5LTVNfTUFOQUdFRCxcbiAgICAgIHJldGVudGlvblBlcmlvZDogdGhpcy5xdWV1ZVJldGVudGlvblBlcmlvZCxcbiAgICAgIHZpc2liaWxpdHlUaW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbmZpZ0ZpbGVuYW1lID0gJ2NvbmZpZy5qc29uJztcbiAgICBjb25zdCBjb25maWcgPSBuZXcgVGVtcEZpbGUoXG4gICAgICBjb25maWdGaWxlbmFtZSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgcGFja2FnZUxpbmtzOiBwcm9wcy5wYWNrYWdlTGlua3MgPz8gW10sXG4gICAgICAgIHBhY2thZ2VUYWdzOiBwcm9wcy5wYWNrYWdlVGFncyA/PyBbXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHN0b3JhZ2VGYWN0b3J5ID0gUzNTdG9yYWdlRmFjdG9yeS5nZXRPckNyZWF0ZSh0aGlzKTtcbiAgICBjb25zdCBjb25maWdCdWNrZXQgPSBzdG9yYWdlRmFjdG9yeS5uZXdCdWNrZXQodGhpcywgJ0NvbmZpZ0J1Y2tldCcsIHtcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBCbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgICAgdmVyc2lvbmVkOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgbmV3IEJ1Y2tldERlcGxveW1lbnQodGhpcywgJ0RlcGxveUluZ2VzdGlvbkNvbmZpZ3VyYXRpb24nLCB7XG4gICAgICBzb3VyY2VzOiBbU291cmNlLmFzc2V0KGNvbmZpZy5kaXIpXSxcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiBjb25maWdCdWNrZXQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudDogRnVuY3Rpb25Qcm9wc1snZW52aXJvbm1lbnQnXSA9IHtcbiAgICAgIEFXU19FTUZfRU5WSVJPTk1FTlQ6ICdMb2NhbCcsXG4gICAgICBCVUNLRVRfTkFNRTogcHJvcHMuYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICBDT05GSUdfQlVDS0VUX05BTUU6IGNvbmZpZ0J1Y2tldC5idWNrZXROYW1lLFxuICAgICAgQ09ORklHX0ZJTEVfS0VZOiBjb25maWdGaWxlbmFtZSxcbiAgICAgIFNUQVRFX01BQ0hJTkVfQVJOOiBwcm9wcy5vcmNoZXN0cmF0aW9uLnN0YXRlTWFjaGluZS5zdGF0ZU1hY2hpbmVBcm4sXG4gICAgfTtcblxuICAgIGlmIChwcm9wcy5jb2RlQXJ0aWZhY3QpIHtcbiAgICAgIGVudmlyb25tZW50LkNPREVfQVJUSUZBQ1RfUkVQT1NJVE9SWV9FTkRQT0lOVCA9XG4gICAgICAgIHByb3BzLmNvZGVBcnRpZmFjdC5wdWJsaXNoaW5nUmVwb3NpdG9yeU5wbUVuZHBvaW50O1xuICAgICAgZW52aXJvbm1lbnQuQ09ERV9BUlRJRkFDVF9ET01BSU5fTkFNRSA9XG4gICAgICAgIHByb3BzLmNvZGVBcnRpZmFjdC5yZXBvc2l0b3J5RG9tYWluTmFtZTtcbiAgICAgIGVudmlyb25tZW50LkNPREVfQVJUSUZBQ1RfRE9NQUlOX09XTkVSID1cbiAgICAgICAgcHJvcHMuY29kZUFydGlmYWN0LnJlcG9zaXRvcnlEb21haW5Pd25lcjtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMucmVsZWFzZU5vdGVzRmV0Y2hRdWV1ZSkge1xuICAgICAgZW52aXJvbm1lbnQuUkVMRUFTRV9OT1RFU19GRVRDSF9RVUVVRV9VUkwgPVxuICAgICAgICBwcm9wcy5yZWxlYXNlTm90ZXNGZXRjaFF1ZXVlLnF1ZXVlVXJsO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgSGFuZGxlcih0aGlzLCAnRGVmYXVsdCcsIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnW0NvbnN0cnVjdEh1Yi9Jbmdlc3Rpb25dIEluZ2VzdHMgbmV3IHBhY2thZ2UgdmVyc2lvbnMgaW50byB0aGUgQ29uc3RydWN0IEh1YicsXG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIGxvZ1JldGVudGlvbjogcHJvcHMubG9nUmV0ZW50aW9uID8/IFJldGVudGlvbkRheXMuVEVOX1lFQVJTLFxuICAgICAgbWVtb3J5U2l6ZTogMTBfMjQwLCAvLyBDdXJyZW50bHkgdGhlIG1heGltdW0gcG9zc2libGUgc2V0dGluZ1xuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICB0cmFjaW5nOiBUcmFjaW5nLkFDVElWRSxcbiAgICB9KTtcbiAgICB0aGlzLmZ1bmN0aW9uID0gaGFuZGxlcjtcblxuICAgIGNvbmZpZ0J1Y2tldC5ncmFudFJlYWQoaGFuZGxlcik7XG4gICAgcHJvcHMuYnVja2V0LmdyYW50V3JpdGUodGhpcy5mdW5jdGlvbik7XG4gICAgcHJvcHMuY29kZUFydGlmYWN0Py5ncmFudFB1Ymxpc2hUb1JlcG9zaXRvcnkoaGFuZGxlcik7XG4gICAgcHJvcHMub3JjaGVzdHJhdGlvbi5zdGF0ZU1hY2hpbmUuZ3JhbnRTdGFydEV4ZWN1dGlvbih0aGlzLmZ1bmN0aW9uKTtcblxuICAgIHRoaXMuZnVuY3Rpb24uYWRkRXZlbnRTb3VyY2UoXG4gICAgICBuZXcgU3FzRXZlbnRTb3VyY2UodGhpcy5xdWV1ZSwgeyBiYXRjaFNpemU6IDEgfSlcbiAgICApO1xuICAgIC8vIFRoaXMgZXZlbnQgc291cmNlIGlzIGRpc2FibGVkLCBhbmQgY2FuIGJlIHVzZWQgdG8gcmUtcHJvY2VzcyBkZWFkLWxldHRlci1xdWV1ZSBtZXNzYWdlc1xuICAgIHRoaXMuZnVuY3Rpb24uYWRkRXZlbnRTb3VyY2UoXG4gICAgICBuZXcgU3FzRXZlbnRTb3VyY2UodGhpcy5kZWFkTGV0dGVyUXVldWUsIHsgYmF0Y2hTaXplOiAxLCBlbmFibGVkOiBmYWxzZSB9KVxuICAgICk7XG5cbiAgICBpZiAocHJvcHMucmVsZWFzZU5vdGVzRmV0Y2hRdWV1ZSkge1xuICAgICAgcHJvcHMucmVsZWFzZU5vdGVzRmV0Y2hRdWV1ZS5ncmFudFNlbmRNZXNzYWdlcyh0aGlzLmZ1bmN0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBSZXByb2Nlc3Mgd29ya2Zsb3dcbiAgICBjb25zdCByZXByb2Nlc3NRdWV1ZSA9IG5ldyBRdWV1ZSh0aGlzLCAnUmVwcm9jZXNzUXVldWUnLCB7XG4gICAgICBkZWFkTGV0dGVyUXVldWU6IHtcbiAgICAgICAgbWF4UmVjZWl2ZUNvdW50OiA1LFxuICAgICAgICBxdWV1ZTogdGhpcy5kZWFkTGV0dGVyUXVldWUsXG4gICAgICB9LFxuICAgICAgZW5jcnlwdGlvbjogUXVldWVFbmNyeXB0aW9uLktNU19NQU5BR0VELFxuICAgICAgcmV0ZW50aW9uUGVyaW9kOiB0aGlzLnF1ZXVlUmV0ZW50aW9uUGVyaW9kLFxuICAgICAgLy8gVmlzaWJpbGl0eSB0aW1lb3V0IG9mIDE1IG1pbnV0ZXMgbWF0Y2hlcyB0aGUgTGFtYmRhIG1heGltdW0gZXhlY3V0aW9uIHRpbWUuXG4gICAgICB2aXNpYmlsaXR5VGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgfSk7XG4gICAgcHJvcHMuYnVja2V0LmdyYW50UmVhZChcbiAgICAgIHRoaXMuZnVuY3Rpb24sXG4gICAgICBgJHtTVE9SQUdFX0tFWV9QUkVGSVh9KiR7UEFDS0FHRV9LRVlfU1VGRklYfWBcbiAgICApO1xuICAgIHRoaXMuZnVuY3Rpb24uYWRkRXZlbnRTb3VyY2UoXG4gICAgICBuZXcgU3FzRXZlbnRTb3VyY2UocmVwcm9jZXNzUXVldWUsIHsgYmF0Y2hTaXplOiAxIH0pXG4gICAgKTtcbiAgICBjb25zdCByZXByb2Nlc3NXb3JrZmxvdyA9IG5ldyBSZXByb2Nlc3NJbmdlc3Rpb25Xb3JrZmxvdyhcbiAgICAgIHRoaXMsXG4gICAgICAnUmVwcm9jZXNzV29ya2Zsb3cnLFxuICAgICAge1xuICAgICAgICBidWNrZXQ6IHByb3BzLmJ1Y2tldCxcbiAgICAgICAgcXVldWU6IHJlcHJvY2Vzc1F1ZXVlLFxuICAgICAgICByZXByb2Nlc3NBZ2U6IHByb3BzLnJlcHJvY2Vzc0FnZSA/PyBEdXJhdGlvbi5kYXlzKDkwKSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gUnVuIHJlcHJvY2VzcyB3b3JrZmxvdyBvbiBhIGRhaWx5IGJhc2lzXG4gICAgY29uc3QgdXBkYXRlUGVyaW9kID0gcHJvcHMucmVwcm9jZXNzRnJlcXVlbmN5O1xuICAgIGlmICh1cGRhdGVQZXJpb2QpIHtcbiAgICAgIGNvbnN0IHJ1bGUgPSBuZXcgUnVsZSh0aGlzLCAnUmVwcm9jZXNzQ3JvbkpvYicsIHtcbiAgICAgICAgc2NoZWR1bGU6IFNjaGVkdWxlLnJhdGUodXBkYXRlUGVyaW9kKSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdQZXJpb2RpY2FsbHkgcmVwcm9jZXNzIGFsbCBwYWNrYWdlcycsXG4gICAgICB9KTtcbiAgICAgIHJ1bGUuYWRkVGFyZ2V0KFxuICAgICAgICBuZXcgU2ZuU3RhdGVNYWNoaW5lKHJlcHJvY2Vzc1dvcmtmbG93LnN0YXRlTWFjaGluZSwge1xuICAgICAgICAgIGlucHV0OiBSdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICBjb21tZW50OiAnU2NoZWR1bGVkIHJlcHJvY2Vzc2luZyBldmVudCBmcm9tIGNyb24gam9iLicsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLmZ1bmN0aW9uLmdyYW50UHJpbmNpcGFsO1xuXG4gICAgcHJvcHMubW9uaXRvcmluZy5hZGRMb3dTZXZlcml0eUFsYXJtKFxuICAgICAgJ0luZ2VzdGlvbiBEZWFkLUxldHRlciBRdWV1ZSBub3QgZW1wdHknLFxuICAgICAgbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgZXhwcmVzc2lvbjogJ20xICsgbTInLFxuICAgICAgICB1c2luZ01ldHJpY3M6IHtcbiAgICAgICAgICBtMTogdGhpcy5kZWFkTGV0dGVyUXVldWUubWV0cmljQXBwcm94aW1hdGVOdW1iZXJPZk1lc3NhZ2VzVmlzaWJsZSh7XG4gICAgICAgICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbTI6IHRoaXMuZGVhZExldHRlclF1ZXVlLm1ldHJpY0FwcHJveGltYXRlTnVtYmVyT2ZNZXNzYWdlc05vdFZpc2libGUoe1xuICAgICAgICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSkuY3JlYXRlQWxhcm0odGhpcywgJ0RMUUFsYXJtJywge1xuICAgICAgICBhbGFybU5hbWU6IGAke3RoaXMubm9kZS5wYXRofS9ETFFOb3RFbXB0eWAsXG4gICAgICAgIGFsYXJtRGVzY3JpcHRpb246IFtcbiAgICAgICAgICAnVGhlIGRlYWQtbGV0dGVyIHF1ZXVlIGZvciB0aGUgSW5nZXN0aW9uIGZ1bmN0aW9uIGlzIG5vdCBlbXB0eSEnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgIGBSdW5Cb29rOiAke1JVTkJPT0tfVVJMfWAsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgYERpcmVjdCBsaW5rIHRvIHRoZSBxdWV1ZTogJHtzcXNRdWV1ZVVybCh0aGlzLmRlYWRMZXR0ZXJRdWV1ZSl9YCxcbiAgICAgICAgICBgRGlyZWN0IGxpbmsgdG8gdGhlIGZ1bmN0aW9uOiAke2xhbWJkYUZ1bmN0aW9uVXJsKHRoaXMuZnVuY3Rpb24pfWAsXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjpcbiAgICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDEsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgLy8gU1FTIGRvZXMgbm90IGVtaXQgbWV0cmljcyBpZiB0aGUgcXVldWUgaGFzIGJlZW4gZW1wdHkgZm9yIGEgd2hpbGUsIHdoaWNoIGlzIEdPT0QuXG4gICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHByb3BzLm92ZXJ2aWV3RGFzaGJvYXJkLmFkZERMUU1ldHJpY1RvRGFzaGJvYXJkKFxuICAgICAgJ0luZ2VzdGlvbiBETFEnLFxuICAgICAgdGhpcy5kZWFkTGV0dGVyUXVldWVcbiAgICApO1xuICAgIHByb3BzLm1vbml0b3JpbmcuYWRkSGlnaFNldmVyaXR5QWxhcm0oXG4gICAgICAnSW5nZXN0aW9uIGZhaWx1cmVzJyxcbiAgICAgIHRoaXMuZnVuY3Rpb24ubWV0cmljRXJyb3JzKCkuY3JlYXRlQWxhcm0odGhpcywgJ0ZhaWx1cmVBbGFybScsIHtcbiAgICAgICAgYWxhcm1OYW1lOiBgJHt0aGlzLm5vZGUucGF0aH0vRmFpbHVyZWAsXG4gICAgICAgIGFsYXJtRGVzY3JpcHRpb246IFtcbiAgICAgICAgICAnVGhlIEluZ2VzdGlvbiBmdW5jdGlvbiBpcyBmYWlsaW5nIScsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgYFJ1bkJvb2s6ICR7UlVOQk9PS19VUkx9YCxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICBgRGlyZWN0IGxpbmsgdG8gdGhlIGZ1bmN0aW9uOiAke2xhbWJkYUZ1bmN0aW9uVXJsKHRoaXMuZnVuY3Rpb24pfWAsXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjpcbiAgICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDIsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgLy8gTGFtYmRhIG9ubHkgZW1pdHMgbWV0cmljcyB3aGVuIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkLiBObyBpbnZva2F0aW9uID0+IG5vIGVycm9ycy5cbiAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgcHJvcHMub3ZlcnZpZXdEYXNoYm9hcmQuYWRkQ29uY3VycmVudEV4ZWN1dGlvbk1ldHJpY1RvRGFzaGJvYXJkKFxuICAgICAgaGFuZGxlcixcbiAgICAgICdJbmdlc3Rpb25MYW1iZGEnXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNGb3VuZExpY2Vuc2VGaWxlKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5TVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogTWV0cmljTmFtZS5GT1VORF9MSUNFTlNFX0ZJTEUsXG4gICAgICBuYW1lc3BhY2U6IE1FVFJJQ1NfTkFNRVNQQUNFLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0luZWxpZ2libGVMaWNlbnNlKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5TVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogTWV0cmljTmFtZS5JTkVMSUdJQkxFX0xJQ0VOU0UsXG4gICAgICBuYW1lc3BhY2U6IE1FVFJJQ1NfTkFNRVNQQUNFLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0ludmFsaWRBc3NlbWJseShvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuU1VNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IE1ldHJpY05hbWUuSU5WQUxJRF9BU1NFTUJMWSxcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljSW52YWxpZFRhcmJhbGwob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLlNVTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBNZXRyaWNOYW1lLklOVkFMSURfVEFSQkFMTCxcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRyaWNzIGlzIHRoZSB0b3RhbCBjb3VudCBvZiBwYWNrYWdlcyB0aGF0IHdlcmUgcmVqZWN0ZWQgZHVlIHRvXG4gICAqIG1pc21hdGNoZWQgaWRlbnRpdHkgKG5hbWUsIHZlcnNpb24sIGxpY2Vuc2UpIGJldHdlZW4gdGhlIGBwYWNrYWdlLmpzb25gXG4gICAqIGZpbGUgYW5kIHRoZSBgLmpzaWlgIGF0dHJpYnV0ZS5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNNaXNtYXRjaGVkSWRlbnRpdHlSZWplY3Rpb25zKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5TVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogTWV0cmljTmFtZS5NSVNNQVRDSEVEX0lERU5USVRZX1JFSkVDVElPTlMsXG4gICAgICBuYW1lc3BhY2U6IE1FVFJJQ1NfTkFNRVNQQUNFLFxuICAgIH0pO1xuICB9XG59XG5cbmludGVyZmFjZSBSZXByb2Nlc3NJbmdlc3Rpb25Xb3JrZmxvd1Byb3BzIHtcbiAgcmVhZG9ubHkgYnVja2V0OiBJQnVja2V0O1xuICByZWFkb25seSBxdWV1ZTogSVF1ZXVlO1xuICByZWFkb25seSByZXByb2Nlc3NBZ2U6IER1cmF0aW9uO1xufVxuXG4vKipcbiAqIEEgU3RlcEZ1bmN0aW9ucyBTdGF0ZSBNYWNoaW5lIHRvIHJlcHJvY2VzcyBldmVyeSBjdXJyZW50bHkgaW5kZXhlZCBwYWNrYWdlXG4gKiB0aHJvdWdoIHRoZSBpbmdlc3Rpb24gZnVuY3Rpb24uIFRoaXMgc2hvdWxkIG5vdCBiZSBmcmVxdWVudGx5IHJlcXVpcmVkLCBidXRcbiAqIGNhbiBjb21lIGluIGhhbmR5IGF0IHRpbWVzLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB0aGUgcnVuYm9vayBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2Nka2xhYnMvY29uc3RydWN0LWh1Yi9ibG9iL21haW4vZG9jcy9vcGVyYXRvci1ydW5ib29rLm1kXG4gKi9cbmNsYXNzIFJlcHJvY2Vzc0luZ2VzdGlvbldvcmtmbG93IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHN0YXRlTWFjaGluZTogU3RhdGVNYWNoaW5lO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IFJlcHJvY2Vzc0luZ2VzdGlvbldvcmtmbG93UHJvcHNcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGxhbWJkYUZ1bmN0aW9uID0gbmV3IFJlSW5nZXN0KHRoaXMsICdGdW5jdGlvbicsIHtcbiAgICAgIGFyY2hpdGVjdHVyZTogZ3Jhdml0b25MYW1iZGFJZkF2YWlsYWJsZSh0aGlzKSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnW0NvbnN0cnVjdEh1Yi9Jbmdlc3Rpb24vUmVJbmdlc3RdIFRoZSBmdW5jdGlvbiB1c2VkIHRvIHJlcHJvY2VzcyBwYWNrYWdlcyB0aHJvdWdoIGluZ2VzdGlvbicsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBCVUNLRVRfTkFNRTogcHJvcHMuYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgIFFVRVVFX1VSTDogcHJvcHMucXVldWUucXVldWVVcmwsXG4gICAgICAgIFJFUFJPQ0VTU19BR0VfTUlMTElTOiBgJHtwcm9wcy5yZXByb2Nlc3NBZ2UudG9NaWxsaXNlY29uZHMoKX1gLFxuICAgICAgfSxcbiAgICAgIG1lbW9yeVNpemU6IDEwXzI0MCxcbiAgICAgIHRyYWNpbmc6IFRyYWNpbmcuQUNUSVZFLFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygzKSxcbiAgICB9KTtcblxuICAgIHByb3BzLnF1ZXVlLmdyYW50U2VuZE1lc3NhZ2VzKGxhbWJkYUZ1bmN0aW9uKTtcbiAgICBwcm9wcy5idWNrZXQuZ3JhbnRSZWFkKFxuICAgICAgbGFtYmRhRnVuY3Rpb24sXG4gICAgICBgJHtTVE9SQUdFX0tFWV9QUkVGSVh9KiR7TUVUQURBVEFfS0VZX1NVRkZJWH1gXG4gICAgKTtcbiAgICBwcm9wcy5idWNrZXQuZ3JhbnRSZWFkKFxuICAgICAgbGFtYmRhRnVuY3Rpb24sXG4gICAgICBgJHtTVE9SQUdFX0tFWV9QUkVGSVh9KiR7UEFDS0FHRV9LRVlfU1VGRklYfWBcbiAgICApO1xuXG4gICAgLy8gTmVlZCB0byBwaHlzaWNhbC1uYW1lIHRoZSBzdGF0ZSBtYWNoaW5lIHNvIGl0IGNhbiBzZWxmLWludm9rZS5cbiAgICBjb25zdCBzdGF0ZU1hY2hpbmVOYW1lID0gc3RhdGVNYWNoaW5lTmFtZUZyb20odGhpcy5ub2RlLnBhdGgpO1xuXG4gICAgY29uc3QgbGlzdEJ1Y2tldCA9IG5ldyBDaG9pY2UodGhpcywgJ0hhcyBhIENvbnRpbnVhdGlvblRva2VuPycpXG4gICAgICAud2hlbihcbiAgICAgICAgQ29uZGl0aW9uLmlzUHJlc2VudCgnJC5Db250aW51YXRpb25Ub2tlbicpLFxuICAgICAgICBuZXcgQ2FsbEF3c1NlcnZpY2UodGhpcywgJ1MzLkxpc3RPYmplY3RzVjIoTmV4dFBhZ2UpJywge1xuICAgICAgICAgIHNlcnZpY2U6ICdzMycsXG4gICAgICAgICAgYWN0aW9uOiAnbGlzdE9iamVjdHNWMicsXG4gICAgICAgICAgaWFtQWN0aW9uOiAnczM6TGlzdEJ1Y2tldCcsXG4gICAgICAgICAgaWFtUmVzb3VyY2VzOiBbcHJvcHMuYnVja2V0LmJ1Y2tldEFybl0sXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgQnVja2V0OiBwcm9wcy5idWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgICAgIENvbnRpbnVhdGlvblRva2VuOiBKc29uUGF0aC5zdHJpbmdBdCgnJC5Db250aW51YXRpb25Ub2tlbicpLFxuICAgICAgICAgICAgUHJlZml4OiBTVE9SQUdFX0tFWV9QUkVGSVgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXN1bHRQYXRoOiAnJC5yZXNwb25zZScsXG4gICAgICAgIH0pLmFkZFJldHJ5KHsgZXJyb3JzOiBbJ1MzLlNka0NsaWVudEV4Y2VwdGlvbiddIH0pXG4gICAgICApXG4gICAgICAub3RoZXJ3aXNlKFxuICAgICAgICBuZXcgQ2FsbEF3c1NlcnZpY2UodGhpcywgJ1MzLkxpc3RPYmplY3RzVjIoRmlyc3RQYWdlKScsIHtcbiAgICAgICAgICBzZXJ2aWNlOiAnczMnLFxuICAgICAgICAgIGFjdGlvbjogJ2xpc3RPYmplY3RzVjInLFxuICAgICAgICAgIGlhbUFjdGlvbjogJ3MzOkxpc3RCdWNrZXQnLFxuICAgICAgICAgIGlhbVJlc291cmNlczogW3Byb3BzLmJ1Y2tldC5idWNrZXRBcm5dLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIEJ1Y2tldDogcHJvcHMuYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgICAgICBQcmVmaXg6IFNUT1JBR0VfS0VZX1BSRUZJWCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdFBhdGg6ICckLnJlc3BvbnNlJyxcbiAgICAgICAgfSkuYWRkUmV0cnkoeyBlcnJvcnM6IFsnUzMuU2RrQ2xpZW50RXhjZXB0aW9uJ10gfSlcbiAgICAgIClcbiAgICAgIC5hZnRlcndhcmRzKCk7XG5cbiAgICBjb25zdCBwcm9jZXNzID0gbmV3IE1hcCh0aGlzLCAnUHJvY2VzcyBSZXN1bHQnLCB7XG4gICAgICBpdGVtc1BhdGg6ICckLnJlc3BvbnNlLkNvbnRlbnRzJyxcbiAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgfSkuaXRlcmF0b3IoXG4gICAgICBuZXcgQ2hvaWNlKHRoaXMsICdJcyBtZXRhZGF0YSBvYmplY3Q/JylcbiAgICAgICAgLndoZW4oXG4gICAgICAgICAgQ29uZGl0aW9uLnN0cmluZ01hdGNoZXMoJyQuS2V5JywgYCoke01FVEFEQVRBX0tFWV9TVUZGSVh9YCksXG4gICAgICAgICAgbmV3IExhbWJkYUludm9rZSh0aGlzLCAnU2VuZCBmb3IgcmVwcm9jZXNzaW5nJywgeyBsYW1iZGFGdW5jdGlvbiB9KVxuICAgICAgICAgICAgLy8gQW1wbGUgcmV0cmllcyBoZXJlLi4uIFdlIHNob3VsZCBuZXZlciBmYWlsIGJlY2F1c2Ugb2YgdGhyb3R0bGluZy4uLi5cbiAgICAgICAgICAgIC5hZGRSZXRyeSh7XG4gICAgICAgICAgICAgIGVycm9yczogWydMYW1iZGEuVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uJ10sXG4gICAgICAgICAgICAgIGJhY2tvZmZSYXRlOiAxLjEsXG4gICAgICAgICAgICAgIGludGVydmFsOiBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgICAgICAgICBtYXhBdHRlbXB0czogMzAsXG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5vdGhlcndpc2UobmV3IFN1Y2NlZWQodGhpcywgJ05vdGhpbmcgdG8gZG8nKSlcbiAgICApO1xuXG4gICAgbGlzdEJ1Y2tldC5uZXh0KFxuICAgICAgbmV3IENob2ljZSh0aGlzLCAnSXMgdGhlcmUgbW9yZT8nKVxuICAgICAgICAud2hlbihcbiAgICAgICAgICBDb25kaXRpb24uaXNQcmVzZW50KCckLnJlc3BvbnNlLk5leHRDb250aW51YXRpb25Ub2tlbicpLFxuXG4gICAgICAgICAgbmV3IFdhaXQodGhpcywgJ0dpdmUgcm9vbSBmb3Igb24tZGVtYW5kIHdvcmsnLCB7XG4gICAgICAgICAgICAvLyBTbGVlcCBhIGxpdHRsZSBiZWZvcmUgZW5xdWV1aW5nIHRoZSBuZXh0IGJhdGNoLCBzbyB0aGF0IHdlIGxlYXZlIHJvb20gaW4gdGhlIHdvcmtlclxuICAgICAgICAgICAgLy8gcG9vbCBmb3IgaGFuZGxpbmcgb24tZGVtYW5kIHdvcmsuIElmIHdlIGRvbid0IGRvIHRoaXMsIDYwayBpdGVtcyB3aWxsIGJlIHF1ZXVlZCBhdFxuICAgICAgICAgICAgLy8gb25jZSBhbmQgbGl2ZSB1cGRhdGVzIGZyb20gTlBNIHdpbGwgc3RydWdnbGUgdG8gZ2V0IGluIGluIGEgcmVhc29uYWJsZSB0aW1lLlxuICAgICAgICAgICAgdGltZTogV2FpdFRpbWUuZHVyYXRpb24od2FpdFRpbWVCZXR3ZWVuUmVwcm9jZXNzQmF0Y2hlcygpKSxcbiAgICAgICAgICB9KS5uZXh0KFxuICAgICAgICAgICAgbmV3IFN0ZXBGdW5jdGlvbnNTdGFydEV4ZWN1dGlvbih0aGlzLCAnQ29udGludWUgYXMgbmV3Jywge1xuICAgICAgICAgICAgICBhc3NvY2lhdGVXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmU6IFN0YXRlTWFjaGluZS5mcm9tU3RhdGVNYWNoaW5lQXJuKFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgJ1RoaXNTdGF0ZU1hY2hpbmUnLFxuICAgICAgICAgICAgICAgIFN0YWNrLm9mKHRoaXMpLmZvcm1hdEFybih7XG4gICAgICAgICAgICAgICAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FLFxuICAgICAgICAgICAgICAgICAgc2VydmljZTogJ3N0YXRlcycsXG4gICAgICAgICAgICAgICAgICByZXNvdXJjZTogJ3N0YXRlTWFjaGluZScsXG4gICAgICAgICAgICAgICAgICByZXNvdXJjZU5hbWU6IHN0YXRlTWFjaGluZU5hbWUsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgaW5wdXQ6IFRhc2tJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBDb250aW51YXRpb25Ub2tlbjogSnNvblBhdGguc3RyaW5nQXQoXG4gICAgICAgICAgICAgICAgICAnJC5yZXNwb25zZS5OZXh0Q29udGludWF0aW9uVG9rZW4nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGludGVncmF0aW9uUGF0dGVybjogSW50ZWdyYXRpb25QYXR0ZXJuLlJFUVVFU1RfUkVTUE9OU0UsXG4gICAgICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgICAgICB9KS5hZGRSZXRyeSh7IGVycm9yczogWydTdGVwRnVuY3Rpb25zLkV4ZWN1dGlvbkxpbWl0RXhjZWVkZWQnXSB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuYWZ0ZXJ3YXJkcyh7IGluY2x1ZGVPdGhlcndpc2U6IHRydWUgfSlcbiAgICAgICAgLm5leHQocHJvY2VzcylcbiAgICApO1xuXG4gICAgdGhpcy5zdGF0ZU1hY2hpbmUgPSBuZXcgU3RhdGVNYWNoaW5lKHRoaXMsICdTdGF0ZU1hY2hpbmUnLCB7XG4gICAgICBkZWZpbml0aW9uOiBsaXN0QnVja2V0LFxuICAgICAgc3RhdGVNYWNoaW5lTmFtZSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLmhvdXJzKDEpLFxuICAgIH0pO1xuXG4gICAgcHJvcHMuYnVja2V0LmdyYW50UmVhZCh0aGlzLnN0YXRlTWFjaGluZSk7XG4gICAgcHJvcHMucXVldWUuZ3JhbnRTZW5kTWVzc2FnZXModGhpcy5zdGF0ZU1hY2hpbmUpO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyB0dXJucyBhIG5vZGUgcGF0aCBpbnRvIGEgdmFsaWQgc3RhdGUgbWFjaGluZSBuYW1lLCB0byB0cnkgYW5kIGltcHJvdmVcbiAqIHRoZSBTdGVwRnVuY3Rpb24ncyBBV1MgY29uc29sZSBleHBlcmllbmNlIHdoaWxlIG1pbmltaXppbmcgdGhlIHJpc2sgZm9yXG4gKiBjb2xsaXNvbnMuXG4gKi9cbmZ1bmN0aW9uIHN0YXRlTWFjaGluZU5hbWVGcm9tKG5vZGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBQb29yIG1hbidzIHJlcGxhY2UgYWxsLi4uXG4gIHJldHVybiBub2RlUGF0aC5zcGxpdCgvW15hLXowLTkrIUAuKCk9XyctXSsvaSkuam9pbignLicpO1xufVxuXG4vKipcbiAqIFRoZSB0aW1lIHdlIHdhaXQgYmV0d2VlbiBlbnF1ZXVlaW5nIGRpZmZlcmVudCBiYXRjaGVzIG9mIHRoZSByZXByb2Nlc3NpbmcgbWFjaGluZVxuICovXG5mdW5jdGlvbiB3YWl0VGltZUJldHdlZW5SZXByb2Nlc3NCYXRjaGVzKCkge1xuICAvLyBBdmVyYWdlIHRpbWUgcGVyIEVDUyB0YXNrLiBXZSBkb24ndmUgaGF2ZSBzdGF0aXN0aWNzIG9uIHRoaXMsIGJ1dFxuICAvLyBjYW4gYmUgcm91Z2hseSBkZXJpdmVkIGZyb206XG5cbiAgLy8gRXZlcnkgZGF5IHdlIHByb2Nlc3MgYWJvdXQgNjBrIGl0ZW1zIHdpdGggMTAwMCB3b3JrZXJzIGluIDQgaG91cnMuXG4gIC8vIDQgaG91cnMgLyAoNjBfMDAwIC8gMTAwMCkgfj0gNCBtaW51dGVzXG4gIGNvbnN0IGF2Z1RpbWVQZXJUYXNrID0gRHVyYXRpb24ubWludXRlcyg0KTtcblxuICAvLyBIb3cgbWFueSBvYmplY3RzIGFyZSByZXR1cm5lZCBieSAnbGlzdE9iamVjdHNWMicsIHBlciBjYWxsXG4gIGNvbnN0IGJhdGNoU2l6ZSA9IDEwMDA7XG5cbiAgLy8gSG93IG1hbnkgd29ya2VycyB3ZSBoYXZlIGF0IG91ciBkaXNwb3NhbFxuICBjb25zdCB3b3JrZXJzID0gMTAwMDtcblxuICAvLyBUaGUgc3RlcCBmdW5jdGlvbnMgc3RhdGUgbWFjaGluZSBjYW4ndCBpbnN0YW50YW5lb3VzbHkgc3RhcnQgYWxsIDEwMDBcbiAgLy8gdGFza3MsIHRoZXkgYXJlIHN0YWdnZXJlZCBvdmVyIHRpbWUgLS0gc28gaW4gcHJhY3RpY2UgdGhlIGF2ZXJhZ2UgbG9hZCBhXG4gIC8vIHNpbmdsZSBiYXRjaCBwdXRzIG9uIHRoZSBFQ1MgY2x1c3RlciBhdCBhbnkgcG9pbnQgaW4gdGltZSBpcyBhIGxvdCBsb3dlci5cbiAgY29uc3Qgc2ZuU3RhZ2dlckZhY3RvciA9IDAuMDU7XG5cbiAgLy8gV2hhdCBmcmFjdGlvbiBvZiBjYXBhY2l0eSBbMC4uMSkgd2Ugd2FudCB0byBrZWVwIGF2YWlsYWJsZSBmb3Igb24tZGVtYW5kXG4gIC8vIHdvcmssIHdoaWxlIHJlcHJvY2Vzc2luZy5cbiAgY29uc3QgbWFyZ2luRnJhYyA9IDAuMjtcblxuICBjb25zdCBzZWNvbmRzID1cbiAgICAoKGF2Z1RpbWVQZXJUYXNrLnRvU2Vjb25kcygpICogc2ZuU3RhZ2dlckZhY3RvcikgLyAoMSAtIG1hcmdpbkZyYWMpKSAqXG4gICAgKGJhdGNoU2l6ZSAvIHdvcmtlcnMpO1xuICByZXR1cm4gRHVyYXRpb24uc2Vjb25kcyhNYXRoLmZsb29yKHNlY29uZHMpKTtcbn1cbiJdfQ==