cdktn 0.26.0-pre.2 → 0.26.0-pre.20
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 +11 -11
- package/lib/annotations.js +1 -1
- package/lib/app.js +1 -1
- package/lib/aspect.js +1 -1
- package/lib/asset-hash.js +1 -1
- package/lib/asset-staging.js +1 -1
- package/lib/assets.js +4 -4
- package/lib/backends/azurerm-backend.js +2 -2
- package/lib/backends/cloud-backend.js +4 -4
- package/lib/backends/consul-backend.js +2 -2
- package/lib/backends/cos-backend.js +2 -2
- package/lib/backends/gcs-backend.js +2 -2
- package/lib/backends/http-backend.js +2 -2
- package/lib/backends/local-backend.js +2 -2
- package/lib/backends/oss-backend.js +2 -2
- package/lib/backends/pg-backend.js +2 -2
- package/lib/backends/remote-backend.js +4 -4
- package/lib/backends/s3-backend.js +2 -2
- package/lib/backends/swift-backend.js +2 -2
- package/lib/complex-computed-list.js +26 -26
- package/lib/functions/provider-function.js +1 -1
- package/lib/functions/terraform-functions.generated.js +1 -1
- package/lib/hcl/quoted-string-key.d.ts +25 -0
- package/lib/hcl/quoted-string-key.js +42 -0
- package/lib/hcl/render.js +12 -2
- package/lib/ignore-strategy.js +1 -1
- package/lib/importable-resource.js +1 -1
- package/lib/manifest.js +1 -1
- package/lib/resource.js +1 -1
- package/lib/terraform-asset.js +1 -1
- package/lib/terraform-backend.js +1 -1
- package/lib/terraform-count.js +1 -1
- package/lib/terraform-data-resource.js +1 -1
- package/lib/terraform-data-source.js +1 -1
- package/lib/terraform-element.js +1 -1
- package/lib/terraform-ephemeral-resource.js +1 -1
- package/lib/terraform-functions.js +6 -4
- package/lib/terraform-hcl-module.js +1 -1
- package/lib/terraform-iterator.js +5 -5
- package/lib/terraform-local.js +1 -1
- package/lib/terraform-module.js +1 -1
- package/lib/terraform-operators.js +1 -1
- package/lib/terraform-output.d.ts +1 -0
- package/lib/terraform-output.js +19 -2
- package/lib/terraform-provider.js +1 -1
- package/lib/terraform-provisioner.js +1 -1
- package/lib/terraform-remote-state.js +1 -1
- package/lib/terraform-resource-targets.js +1 -1
- package/lib/terraform-resource.js +1 -1
- package/lib/terraform-stack.js +1 -1
- package/lib/terraform-variable.js +2 -2
- package/lib/testing/index.js +1 -1
- package/lib/testing/matchers.js +1 -1
- package/lib/tfExpression.d.ts +2 -0
- package/lib/tfExpression.js +64 -21
- package/lib/tokens/lazy.js +2 -2
- package/lib/tokens/resolvable.js +2 -2
- package/lib/tokens/string-fragments.js +1 -1
- package/lib/tokens/token.js +2 -2
- package/lib/upgrade-id-aspect.js +1 -1
- package/package.json +1 -1
|
@@ -76,7 +76,7 @@ class ComplexComputedAttribute extends ComplexResolvable {
|
|
|
76
76
|
class StringMap extends ComplexResolvable {
|
|
77
77
|
terraformResource;
|
|
78
78
|
terraformAttribute;
|
|
79
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.StringMap", version: "0.26.0-pre.
|
|
79
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.StringMap", version: "0.26.0-pre.20" };
|
|
80
80
|
constructor(terraformResource, terraformAttribute) {
|
|
81
81
|
super(terraformResource, terraformAttribute);
|
|
82
82
|
this.terraformResource = terraformResource;
|
|
@@ -94,7 +94,7 @@ exports.StringMap = StringMap;
|
|
|
94
94
|
class NumberMap extends ComplexResolvable {
|
|
95
95
|
terraformResource;
|
|
96
96
|
terraformAttribute;
|
|
97
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.NumberMap", version: "0.26.0-pre.
|
|
97
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.NumberMap", version: "0.26.0-pre.20" };
|
|
98
98
|
constructor(terraformResource, terraformAttribute) {
|
|
99
99
|
super(terraformResource, terraformAttribute);
|
|
100
100
|
this.terraformResource = terraformResource;
|
|
@@ -112,7 +112,7 @@ exports.NumberMap = NumberMap;
|
|
|
112
112
|
class BooleanMap extends ComplexResolvable {
|
|
113
113
|
terraformResource;
|
|
114
114
|
terraformAttribute;
|
|
115
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanMap", version: "0.26.0-pre.
|
|
115
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanMap", version: "0.26.0-pre.20" };
|
|
116
116
|
constructor(terraformResource, terraformAttribute) {
|
|
117
117
|
super(terraformResource, terraformAttribute);
|
|
118
118
|
this.terraformResource = terraformResource;
|
|
@@ -130,7 +130,7 @@ exports.BooleanMap = BooleanMap;
|
|
|
130
130
|
class AnyMap extends ComplexResolvable {
|
|
131
131
|
terraformResource;
|
|
132
132
|
terraformAttribute;
|
|
133
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AnyMap", version: "0.26.0-pre.
|
|
133
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AnyMap", version: "0.26.0-pre.20" };
|
|
134
134
|
constructor(terraformResource, terraformAttribute) {
|
|
135
135
|
super(terraformResource, terraformAttribute);
|
|
136
136
|
this.terraformResource = terraformResource;
|
|
@@ -148,7 +148,7 @@ exports.AnyMap = AnyMap;
|
|
|
148
148
|
class StringMapMap extends ComplexResolvable {
|
|
149
149
|
terraformResource;
|
|
150
150
|
terraformAttribute;
|
|
151
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.StringMapMap", version: "0.26.0-pre.
|
|
151
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.StringMapMap", version: "0.26.0-pre.20" };
|
|
152
152
|
constructor(terraformResource, terraformAttribute) {
|
|
153
153
|
super(terraformResource, terraformAttribute);
|
|
154
154
|
this.terraformResource = terraformResource;
|
|
@@ -166,7 +166,7 @@ exports.StringMapMap = StringMapMap;
|
|
|
166
166
|
class NumberMapMap extends ComplexResolvable {
|
|
167
167
|
terraformResource;
|
|
168
168
|
terraformAttribute;
|
|
169
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.NumberMapMap", version: "0.26.0-pre.
|
|
169
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.NumberMapMap", version: "0.26.0-pre.20" };
|
|
170
170
|
constructor(terraformResource, terraformAttribute) {
|
|
171
171
|
super(terraformResource, terraformAttribute);
|
|
172
172
|
this.terraformResource = terraformResource;
|
|
@@ -184,7 +184,7 @@ exports.NumberMapMap = NumberMapMap;
|
|
|
184
184
|
class BooleanMapMap extends ComplexResolvable {
|
|
185
185
|
terraformResource;
|
|
186
186
|
terraformAttribute;
|
|
187
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanMapMap", version: "0.26.0-pre.
|
|
187
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanMapMap", version: "0.26.0-pre.20" };
|
|
188
188
|
constructor(terraformResource, terraformAttribute) {
|
|
189
189
|
super(terraformResource, terraformAttribute);
|
|
190
190
|
this.terraformResource = terraformResource;
|
|
@@ -202,7 +202,7 @@ exports.BooleanMapMap = BooleanMapMap;
|
|
|
202
202
|
class AnyMapMap extends ComplexResolvable {
|
|
203
203
|
terraformResource;
|
|
204
204
|
terraformAttribute;
|
|
205
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AnyMapMap", version: "0.26.0-pre.
|
|
205
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AnyMapMap", version: "0.26.0-pre.20" };
|
|
206
206
|
constructor(terraformResource, terraformAttribute) {
|
|
207
207
|
super(terraformResource, terraformAttribute);
|
|
208
208
|
this.terraformResource = terraformResource;
|
|
@@ -225,7 +225,7 @@ class ComplexComputedList extends ComplexComputedAttribute {
|
|
|
225
225
|
terraformAttribute;
|
|
226
226
|
complexComputedListIndex;
|
|
227
227
|
wrapsSet;
|
|
228
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ComplexComputedList", version: "0.26.0-pre.
|
|
228
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ComplexComputedList", version: "0.26.0-pre.20" };
|
|
229
229
|
constructor(terraformResource, terraformAttribute, complexComputedListIndex, wrapsSet) {
|
|
230
230
|
super(terraformResource, terraformAttribute);
|
|
231
231
|
this.terraformResource = terraformResource;
|
|
@@ -253,7 +253,7 @@ class ComplexList extends ComplexResolvable {
|
|
|
253
253
|
terraformResource;
|
|
254
254
|
terraformAttribute;
|
|
255
255
|
wrapsSet;
|
|
256
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ComplexList", version: "0.26.0-pre.
|
|
256
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ComplexList", version: "0.26.0-pre.20" };
|
|
257
257
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
258
258
|
super(terraformResource, terraformAttribute);
|
|
259
259
|
this.terraformResource = terraformResource;
|
|
@@ -284,7 +284,7 @@ class BooleanList extends ComplexList {
|
|
|
284
284
|
terraformResource;
|
|
285
285
|
terraformAttribute;
|
|
286
286
|
wrapsSet;
|
|
287
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanList", version: "0.26.0-pre.
|
|
287
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanList", version: "0.26.0-pre.20" };
|
|
288
288
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
289
289
|
super(terraformResource, terraformAttribute, wrapsSet);
|
|
290
290
|
this.terraformResource = terraformResource;
|
|
@@ -301,7 +301,7 @@ class StringListList extends ComplexList {
|
|
|
301
301
|
terraformResource;
|
|
302
302
|
terraformAttribute;
|
|
303
303
|
wrapsSet;
|
|
304
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.StringListList", version: "0.26.0-pre.
|
|
304
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.StringListList", version: "0.26.0-pre.20" };
|
|
305
305
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
306
306
|
super(terraformResource, terraformAttribute, wrapsSet);
|
|
307
307
|
this.terraformResource = terraformResource;
|
|
@@ -318,7 +318,7 @@ class NumberListList extends ComplexList {
|
|
|
318
318
|
terraformResource;
|
|
319
319
|
terraformAttribute;
|
|
320
320
|
wrapsSet;
|
|
321
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.NumberListList", version: "0.26.0-pre.
|
|
321
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.NumberListList", version: "0.26.0-pre.20" };
|
|
322
322
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
323
323
|
super(terraformResource, terraformAttribute, wrapsSet);
|
|
324
324
|
this.terraformResource = terraformResource;
|
|
@@ -335,7 +335,7 @@ class BooleanListList extends ComplexList {
|
|
|
335
335
|
terraformResource;
|
|
336
336
|
terraformAttribute;
|
|
337
337
|
wrapsSet;
|
|
338
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanListList", version: "0.26.0-pre.
|
|
338
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanListList", version: "0.26.0-pre.20" };
|
|
339
339
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
340
340
|
super(terraformResource, terraformAttribute, wrapsSet);
|
|
341
341
|
this.terraformResource = terraformResource;
|
|
@@ -353,7 +353,7 @@ class AnyListList extends ComplexList {
|
|
|
353
353
|
terraformResource;
|
|
354
354
|
terraformAttribute;
|
|
355
355
|
wrapsSet;
|
|
356
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AnyListList", version: "0.26.0-pre.
|
|
356
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AnyListList", version: "0.26.0-pre.20" };
|
|
357
357
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
358
358
|
super(terraformResource, terraformAttribute, wrapsSet);
|
|
359
359
|
this.terraformResource = terraformResource;
|
|
@@ -370,7 +370,7 @@ exports.AnyListList = AnyListList;
|
|
|
370
370
|
class ComplexMap extends ComplexResolvable {
|
|
371
371
|
terraformResource;
|
|
372
372
|
terraformAttribute;
|
|
373
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ComplexMap", version: "0.26.0-pre.
|
|
373
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ComplexMap", version: "0.26.0-pre.20" };
|
|
374
374
|
constructor(terraformResource, terraformAttribute) {
|
|
375
375
|
super(terraformResource, terraformAttribute);
|
|
376
376
|
this.terraformResource = terraformResource;
|
|
@@ -390,7 +390,7 @@ class ComplexObject extends ComplexComputedAttribute {
|
|
|
390
390
|
terraformAttribute;
|
|
391
391
|
complexObjectIsFromSet;
|
|
392
392
|
complexObjectIndex;
|
|
393
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ComplexObject", version: "0.26.0-pre.
|
|
393
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ComplexObject", version: "0.26.0-pre.20" };
|
|
394
394
|
/**
|
|
395
395
|
* @param terraformResource
|
|
396
396
|
* @param terraformAttribute
|
|
@@ -431,7 +431,7 @@ class MapList extends ComplexResolvable {
|
|
|
431
431
|
terraformResource;
|
|
432
432
|
terraformAttribute;
|
|
433
433
|
wrapsSet;
|
|
434
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.MapList", version: "0.26.0-pre.
|
|
434
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.MapList", version: "0.26.0-pre.20" };
|
|
435
435
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
436
436
|
super(terraformResource, terraformAttribute);
|
|
437
437
|
this.terraformResource = terraformResource;
|
|
@@ -462,7 +462,7 @@ class StringMapList extends MapList {
|
|
|
462
462
|
terraformResource;
|
|
463
463
|
terraformAttribute;
|
|
464
464
|
wrapsSet;
|
|
465
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.StringMapList", version: "0.26.0-pre.
|
|
465
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.StringMapList", version: "0.26.0-pre.20" };
|
|
466
466
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
467
467
|
super(terraformResource, terraformAttribute, wrapsSet);
|
|
468
468
|
this.terraformResource = terraformResource;
|
|
@@ -479,7 +479,7 @@ class NumberMapList extends MapList {
|
|
|
479
479
|
terraformResource;
|
|
480
480
|
terraformAttribute;
|
|
481
481
|
wrapsSet;
|
|
482
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.NumberMapList", version: "0.26.0-pre.
|
|
482
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.NumberMapList", version: "0.26.0-pre.20" };
|
|
483
483
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
484
484
|
super(terraformResource, terraformAttribute, wrapsSet);
|
|
485
485
|
this.terraformResource = terraformResource;
|
|
@@ -496,7 +496,7 @@ class BooleanMapList extends MapList {
|
|
|
496
496
|
terraformResource;
|
|
497
497
|
terraformAttribute;
|
|
498
498
|
wrapsSet;
|
|
499
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanMapList", version: "0.26.0-pre.
|
|
499
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanMapList", version: "0.26.0-pre.20" };
|
|
500
500
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
501
501
|
super(terraformResource, terraformAttribute, wrapsSet);
|
|
502
502
|
this.terraformResource = terraformResource;
|
|
@@ -513,7 +513,7 @@ class AnyMapList extends MapList {
|
|
|
513
513
|
terraformResource;
|
|
514
514
|
terraformAttribute;
|
|
515
515
|
wrapsSet;
|
|
516
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AnyMapList", version: "0.26.0-pre.
|
|
516
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AnyMapList", version: "0.26.0-pre.20" };
|
|
517
517
|
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
518
518
|
super(terraformResource, terraformAttribute, wrapsSet);
|
|
519
519
|
this.terraformResource = terraformResource;
|
|
@@ -529,7 +529,7 @@ exports.AnyMapList = AnyMapList;
|
|
|
529
529
|
class StringListMap extends ComplexMap {
|
|
530
530
|
terraformResource;
|
|
531
531
|
terraformAttribute;
|
|
532
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.StringListMap", version: "0.26.0-pre.
|
|
532
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.StringListMap", version: "0.26.0-pre.20" };
|
|
533
533
|
constructor(terraformResource, terraformAttribute) {
|
|
534
534
|
super(terraformResource, terraformAttribute);
|
|
535
535
|
this.terraformResource = terraformResource;
|
|
@@ -544,7 +544,7 @@ exports.StringListMap = StringListMap;
|
|
|
544
544
|
class NumberListMap extends ComplexMap {
|
|
545
545
|
terraformResource;
|
|
546
546
|
terraformAttribute;
|
|
547
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.NumberListMap", version: "0.26.0-pre.
|
|
547
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.NumberListMap", version: "0.26.0-pre.20" };
|
|
548
548
|
constructor(terraformResource, terraformAttribute) {
|
|
549
549
|
super(terraformResource, terraformAttribute);
|
|
550
550
|
this.terraformResource = terraformResource;
|
|
@@ -559,7 +559,7 @@ exports.NumberListMap = NumberListMap;
|
|
|
559
559
|
class BooleanListMap extends ComplexMap {
|
|
560
560
|
terraformResource;
|
|
561
561
|
terraformAttribute;
|
|
562
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanListMap", version: "0.26.0-pre.
|
|
562
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanListMap", version: "0.26.0-pre.20" };
|
|
563
563
|
constructor(terraformResource, terraformAttribute) {
|
|
564
564
|
super(terraformResource, terraformAttribute);
|
|
565
565
|
this.terraformResource = terraformResource;
|
|
@@ -575,7 +575,7 @@ exports.BooleanListMap = BooleanListMap;
|
|
|
575
575
|
class AnyListMap extends ComplexMap {
|
|
576
576
|
terraformResource;
|
|
577
577
|
terraformAttribute;
|
|
578
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AnyListMap", version: "0.26.0-pre.
|
|
578
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AnyListMap", version: "0.26.0-pre.20" };
|
|
579
579
|
constructor(terraformResource, terraformAttribute) {
|
|
580
580
|
super(terraformResource, terraformAttribute);
|
|
581
581
|
this.terraformResource = terraformResource;
|
|
@@ -10,7 +10,7 @@ const helpers_1 = require("./helpers");
|
|
|
10
10
|
* through which every provider-defined function call flows.
|
|
11
11
|
*/
|
|
12
12
|
class TerraformProviderFunction {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TerraformProviderFunction", version: "0.26.0-pre.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TerraformProviderFunction", version: "0.26.0-pre.20" };
|
|
14
14
|
/**
|
|
15
15
|
* Invokes a provider-defined function (Terraform's
|
|
16
16
|
* `provider::<providerLocalName>::<functionName>(...)` syntax).
|
|
@@ -11,7 +11,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
11
11
|
const helpers_1 = require("./helpers");
|
|
12
12
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
13
13
|
class FnGenerated {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.FnGenerated", version: "0.26.0-pre.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.FnGenerated", version: "0.26.0-pre.20" };
|
|
15
15
|
/**
|
|
16
16
|
* {@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it.
|
|
17
17
|
* @param {number} num
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) HashiCorp, Inc.
|
|
3
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Serializes an object key fragment as the inner content of a Terraform
|
|
7
|
+
* quoted-string literal, without the surrounding quotes.
|
|
8
|
+
*
|
|
9
|
+
* `JSON.stringify` covers quotes, backslashes and most control characters.
|
|
10
|
+
* Terraform quoted strings reject the `\b` and `\f` escapes that JSON emits, so
|
|
11
|
+
* those use four-digit Unicode escapes. `$${` and `%%{` are the Terraform
|
|
12
|
+
* escapes for sequences that would otherwise start a template interpolation or
|
|
13
|
+
* directive.
|
|
14
|
+
*
|
|
15
|
+
* Set `keepTemplates` when the fragment may hold a resolved token, which
|
|
16
|
+
* renders as a `${...}` reference that must stay an interpolation.
|
|
17
|
+
*/
|
|
18
|
+
export declare function quotedStringKeyFragment(fragment: string, keepTemplates?: boolean): string;
|
|
19
|
+
/**
|
|
20
|
+
* Serializes an object key as a Terraform quoted-string literal.
|
|
21
|
+
*
|
|
22
|
+
* Set `keepTemplates` when the key may hold a resolved token, which renders as
|
|
23
|
+
* a `${...}` reference that must stay an interpolation.
|
|
24
|
+
*/
|
|
25
|
+
export declare function quotedStringKey(key: string, keepTemplates?: boolean): string;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) HashiCorp, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.quotedStringKeyFragment = quotedStringKeyFragment;
|
|
8
|
+
exports.quotedStringKey = quotedStringKey;
|
|
9
|
+
/**
|
|
10
|
+
* Serializes an object key fragment as the inner content of a Terraform
|
|
11
|
+
* quoted-string literal, without the surrounding quotes.
|
|
12
|
+
*
|
|
13
|
+
* `JSON.stringify` covers quotes, backslashes and most control characters.
|
|
14
|
+
* Terraform quoted strings reject the `\b` and `\f` escapes that JSON emits, so
|
|
15
|
+
* those use four-digit Unicode escapes. `$${` and `%%{` are the Terraform
|
|
16
|
+
* escapes for sequences that would otherwise start a template interpolation or
|
|
17
|
+
* directive.
|
|
18
|
+
*
|
|
19
|
+
* Set `keepTemplates` when the fragment may hold a resolved token, which
|
|
20
|
+
* renders as a `${...}` reference that must stay an interpolation.
|
|
21
|
+
*/
|
|
22
|
+
function quotedStringKeyFragment(fragment, keepTemplates = false) {
|
|
23
|
+
// Replacer functions, not replacement strings: in a replacement string `$$`
|
|
24
|
+
// is itself an escape for a literal `$` and would undo the escape below.
|
|
25
|
+
const escaped = JSON.stringify(fragment)
|
|
26
|
+
.slice(1, -1)
|
|
27
|
+
.replace(/\\(\\|b|f)/g, (match, selector) => selector === "b" ? "\\u0008" : selector === "f" ? "\\u000c" : match);
|
|
28
|
+
if (keepTemplates) {
|
|
29
|
+
return escaped;
|
|
30
|
+
}
|
|
31
|
+
return escaped.replace(/\$\{/g, () => "$${").replace(/%\{/g, () => "%%{");
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Serializes an object key as a Terraform quoted-string literal.
|
|
35
|
+
*
|
|
36
|
+
* Set `keepTemplates` when the key may hold a resolved token, which renders as
|
|
37
|
+
* a `${...}` reference that must stay an interpolation.
|
|
38
|
+
*/
|
|
39
|
+
function quotedStringKey(key, keepTemplates = false) {
|
|
40
|
+
return `"${quotedStringKeyFragment(key, keepTemplates)}"`;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGVkLXN0cmluZy1rZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGNsL3F1b3RlZC1zdHJpbmcta2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7O0FBZUgsMERBZUM7QUFRRCwwQ0FFQztBQXRDRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFnQix1QkFBdUIsQ0FDckMsUUFBZ0IsRUFDaEIsYUFBYSxHQUFHLEtBQUs7SUFFckIsNEVBQTRFO0lBQzVFLHlFQUF5RTtJQUN6RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztTQUNyQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ1osT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFnQixFQUFFLEVBQUUsQ0FDbEQsUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FDcEUsQ0FBQztJQUNKLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixlQUFlLENBQUMsR0FBVyxFQUFFLGFBQWEsR0FBRyxLQUFLO0lBQ2hFLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQztBQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbiAqL1xuXG4vKipcbiAqIFNlcmlhbGl6ZXMgYW4gb2JqZWN0IGtleSBmcmFnbWVudCBhcyB0aGUgaW5uZXIgY29udGVudCBvZiBhIFRlcnJhZm9ybVxuICogcXVvdGVkLXN0cmluZyBsaXRlcmFsLCB3aXRob3V0IHRoZSBzdXJyb3VuZGluZyBxdW90ZXMuXG4gKlxuICogYEpTT04uc3RyaW5naWZ5YCBjb3ZlcnMgcXVvdGVzLCBiYWNrc2xhc2hlcyBhbmQgbW9zdCBjb250cm9sIGNoYXJhY3RlcnMuXG4gKiBUZXJyYWZvcm0gcXVvdGVkIHN0cmluZ3MgcmVqZWN0IHRoZSBgXFxiYCBhbmQgYFxcZmAgZXNjYXBlcyB0aGF0IEpTT04gZW1pdHMsIHNvXG4gKiB0aG9zZSB1c2UgZm91ci1kaWdpdCBVbmljb2RlIGVzY2FwZXMuIGAkJHtgIGFuZCBgJSV7YCBhcmUgdGhlIFRlcnJhZm9ybVxuICogZXNjYXBlcyBmb3Igc2VxdWVuY2VzIHRoYXQgd291bGQgb3RoZXJ3aXNlIHN0YXJ0IGEgdGVtcGxhdGUgaW50ZXJwb2xhdGlvbiBvclxuICogZGlyZWN0aXZlLlxuICpcbiAqIFNldCBga2VlcFRlbXBsYXRlc2Agd2hlbiB0aGUgZnJhZ21lbnQgbWF5IGhvbGQgYSByZXNvbHZlZCB0b2tlbiwgd2hpY2hcbiAqIHJlbmRlcnMgYXMgYSBgJHsuLi59YCByZWZlcmVuY2UgdGhhdCBtdXN0IHN0YXkgYW4gaW50ZXJwb2xhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1b3RlZFN0cmluZ0tleUZyYWdtZW50KFxuICBmcmFnbWVudDogc3RyaW5nLFxuICBrZWVwVGVtcGxhdGVzID0gZmFsc2UsXG4pOiBzdHJpbmcge1xuICAvLyBSZXBsYWNlciBmdW5jdGlvbnMsIG5vdCByZXBsYWNlbWVudCBzdHJpbmdzOiBpbiBhIHJlcGxhY2VtZW50IHN0cmluZyBgJCRgXG4gIC8vIGlzIGl0c2VsZiBhbiBlc2NhcGUgZm9yIGEgbGl0ZXJhbCBgJGAgYW5kIHdvdWxkIHVuZG8gdGhlIGVzY2FwZSBiZWxvdy5cbiAgY29uc3QgZXNjYXBlZCA9IEpTT04uc3RyaW5naWZ5KGZyYWdtZW50KVxuICAgIC5zbGljZSgxLCAtMSlcbiAgICAucmVwbGFjZSgvXFxcXChcXFxcfGJ8ZikvZywgKG1hdGNoLCBzZWxlY3Rvcjogc3RyaW5nKSA9PlxuICAgICAgc2VsZWN0b3IgPT09IFwiYlwiID8gXCJcXFxcdTAwMDhcIiA6IHNlbGVjdG9yID09PSBcImZcIiA/IFwiXFxcXHUwMDBjXCIgOiBtYXRjaCxcbiAgICApO1xuICBpZiAoa2VlcFRlbXBsYXRlcykge1xuICAgIHJldHVybiBlc2NhcGVkO1xuICB9XG4gIHJldHVybiBlc2NhcGVkLnJlcGxhY2UoL1xcJFxcey9nLCAoKSA9PiBcIiQke1wiKS5yZXBsYWNlKC8lXFx7L2csICgpID0+IFwiJSV7XCIpO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgYW4gb2JqZWN0IGtleSBhcyBhIFRlcnJhZm9ybSBxdW90ZWQtc3RyaW5nIGxpdGVyYWwuXG4gKlxuICogU2V0IGBrZWVwVGVtcGxhdGVzYCB3aGVuIHRoZSBrZXkgbWF5IGhvbGQgYSByZXNvbHZlZCB0b2tlbiwgd2hpY2ggcmVuZGVycyBhc1xuICogYSBgJHsuLi59YCByZWZlcmVuY2UgdGhhdCBtdXN0IHN0YXkgYW4gaW50ZXJwb2xhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1b3RlZFN0cmluZ0tleShrZXk6IHN0cmluZywga2VlcFRlbXBsYXRlcyA9IGZhbHNlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBcIiR7cXVvdGVkU3RyaW5nS2V5RnJhZ21lbnQoa2V5LCBrZWVwVGVtcGxhdGVzKX1cImA7XG59XG4iXX0=
|
package/lib/hcl/render.js
CHANGED
|
@@ -25,6 +25,7 @@ exports.renderAttributes = renderAttributes;
|
|
|
25
25
|
* Copyright (c) HashiCorp, Inc.
|
|
26
26
|
* SPDX-License-Identifier: MPL-2.0
|
|
27
27
|
*/
|
|
28
|
+
const quoted_string_key_1 = require("./quoted-string-key");
|
|
28
29
|
const token_1 = require("../tokens/token");
|
|
29
30
|
/**
|
|
30
31
|
*
|
|
@@ -40,7 +41,16 @@ function escapeQuotes(str) {
|
|
|
40
41
|
*
|
|
41
42
|
*/
|
|
42
43
|
function wrapIdentifierInQuotesIfNeeded(key) {
|
|
43
|
-
|
|
44
|
+
if (!/(^\d)|[^A-Za-z0-9_-]/.test(key)) {
|
|
45
|
+
return key;
|
|
46
|
+
}
|
|
47
|
+
// A key containing `${` may be a resolved token reference rather than a
|
|
48
|
+
// literal string, so its `${...}` body is expression syntax, not text to
|
|
49
|
+
// escape. Leave it on the old (unescaped) path to avoid corrupting it.
|
|
50
|
+
if (key.includes("${")) {
|
|
51
|
+
return `"${key}"`;
|
|
52
|
+
}
|
|
53
|
+
return (0, quoted_string_key_1.quotedStringKey)(key, true);
|
|
44
54
|
}
|
|
45
55
|
/**
|
|
46
56
|
*
|
|
@@ -697,4 +707,4 @@ ${name} = ${renderFuzzyJsonExpression(value)}
|
|
|
697
707
|
.filter((v) => v !== undefined)
|
|
698
708
|
.join("\n");
|
|
699
709
|
}
|
|
700
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hjbC9yZW5kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFvREEsNENBNkNDO0FBS0QsZ0NBZ0RDO0FBS0QsMENBU0M7QUFLRCw4QkFjQztBQUtELHdDQXNCQztBQUtELHdDQXFDQztBQUtELDRDQTJCQztBQUtELDBDQTJCQztBQUtELHdEQXlCQztBQUtELGtEQXFCQztBQUtELHdDQW1CQztBQUtELG9DQWdCQztBQUtELG9DQU9DO0FBS0Qsb0NBb0JDO0FBS0Qsd0NBT0M7QUFLRCxrQ0FRQztBQUtELG9DQVFDO0FBS0QsMENBMEJDO0FBS0Qsa0NBSUM7QUF5RUQsd0RBV0M7QUE0Q0QsNENBOEhDO0FBbHhCRDs7O0dBR0c7QUFDSCwyQ0FBK0M7QUFFL0M7O0dBRUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxHQUFXO0lBQy9CLG1EQUFtRDtJQUNuRCxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN0QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsOEJBQThCLENBQUMsR0FBVztJQUNqRCxPQUFPLHNCQUFzQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzdELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsWUFBWSxDQUFDLEdBQVc7SUFDL0IsSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDZixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUVBQXVFLENBQ3hFLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUV2QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUV4RCxPQUFPLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzNDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLEtBQVU7SUFDekMsTUFBTSxHQUFHLEdBQTRCLEVBQUUsQ0FBQztJQUV4QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFaEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDM0IsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEUsZ0VBQWdFO1lBQ2hFLElBQUksb0JBQVksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDckMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDZCxTQUFTO1lBQ1gsQ0FBQztZQUVELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQyxTQUFTO1FBQ1gsQ0FBQzthQUFNLElBQ0wsT0FBTyxLQUFLLEtBQUssUUFBUTtZQUN6QixLQUFLLElBQUksSUFBSTtZQUNiLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQ3BCLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNyQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7YUFBTSxDQUFDO1lBQ04sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLENBQU0sRUFBRSxJQUFhO0lBQzlDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3RSxNQUFNLEtBQUssR0FBRyxPQUFPLElBQUksUUFBUSxDQUFDO0lBQ2xDLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixJQUFJLGtCQUFrQixDQUFDO0lBRXpELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsb0VBQW9FO1FBQ3BFLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE9BQU8sR0FBRyxJQUFJLElBQUksR0FBRyxLQUFLLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDekQsQ0FBQztZQUVELE9BQU8sS0FBSztpQkFDVCxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDZCxPQUFPLEdBQUcsSUFBSSxJQUFJLEdBQUcsS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3JELENBQUMsQ0FBQztpQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxHQUFHLElBQUksTUFBTSxlQUFlLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDMUQsQ0FBQztRQUVELE9BQU8sR0FBRyxJQUFJO0VBQ2hCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0VBQ2hFLENBQUM7SUFDRCxDQUFDO0lBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixvQ0FBb0M7UUFDcEMsT0FBTyxlQUFlLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxPQUFPO0VBQ1AsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDaEUsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxLQUFVLEVBQUUsZ0JBQXdCO0lBQ2xFLElBQUksZ0JBQWdCLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDdEMsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksZ0JBQWdCLEtBQUssWUFBWSxJQUFJLGdCQUFnQixLQUFLLGFBQWEsRUFBRSxDQUFDO1FBQzVFLE9BQU8sR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsU0FBUyxDQUFDLEdBQVE7SUFDaEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QixvRUFBb0U7UUFDcEUsT0FBTyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxPQUFPO0VBQ1AsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7U0FDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNkLE1BQU0sVUFBVSxHQUFHLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJELE9BQU8sR0FBRyxVQUFVLE1BQU0sY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDaEQsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQztFQUNYLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixjQUFjLENBQUMsS0FBVTtJQUN2QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU8sR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMvQixPQUFPLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxlQUFlLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ25CLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsT0FBTyxHQUFHLEtBQUssRUFBRSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxRQUFhO0lBQzFDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDakQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFM0QsSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQyxrQkFBa0IsQ0FBQyxVQUFVLEdBQUc7WUFDOUIsS0FBSyxFQUFFLGtCQUFrQixDQUFDLFVBQVU7WUFDcEMsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEdBQUcsVUFBVSxFQUFFLEdBQUcsa0JBQWtCLENBQUM7SUFFbkUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxhQUFhLFlBQVksTUFBTSxZQUFZLEtBQUssQ0FBQyxDQUFDO0lBRS9ELE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTNDLElBQUksS0FBSztRQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsSUFBSSxXQUFXO1FBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQy9ELElBQUksT0FBTztRQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRXZELEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFZCxPQUFPO1FBQ0wsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25CLFFBQVEsRUFBRTtZQUNSLFFBQVEsRUFBRTtnQkFDUixDQUFDLFlBQVksQ0FBQyxFQUFFO29CQUNkLENBQUMsWUFBWSxDQUFDLEVBQUU7d0JBQ2QsSUFBSSxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQztxQkFDL0I7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLFVBQWU7SUFDOUMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNLG1CQUFtQixHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2RCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxvQkFBb0IsR0FBRyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUVqRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsVUFBVSxFQUFFLEdBQUcsb0JBQW9CLENBQUM7SUFFeEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxTQUFTLGNBQWMsTUFBTSxjQUFjLEtBQUssQ0FBQyxDQUFDO0lBRS9ELE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLElBQUksS0FBSztRQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsSUFBSSxPQUFPO1FBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdkQsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVkLE9BQU87UUFDTCxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbkIsUUFBUSxFQUFFO1lBQ1IsSUFBSSxFQUFFO2dCQUNKLENBQUMsY0FBYyxDQUFDLEVBQUU7b0JBQ2hCLENBQUMsY0FBYyxDQUFDLEVBQUU7d0JBQ2hCLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7cUJBQ2pDO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixlQUFlLENBQUMsU0FBYztJQUM1QyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sa0JBQWtCLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRTlELE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxVQUFVLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQztJQUV2RCxNQUFNLEdBQUcsR0FBRyxDQUFDLGNBQWMsYUFBYSxNQUFNLGFBQWEsS0FBSyxDQUFDLENBQUM7SUFFbEUsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsSUFBSSxLQUFLO1FBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixJQUFJLE9BQU87UUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN2RCxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWQsT0FBTztRQUNMLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNuQixRQUFRLEVBQUU7WUFDUixTQUFTLEVBQUU7Z0JBQ1QsQ0FBQyxhQUFhLENBQUMsRUFBRTtvQkFDZixDQUFDLGFBQWEsQ0FBQyxFQUFFO3dCQUNmLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7cUJBQ2hDO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxZQUFpQjtJQUN0RCxPQUFPLFlBQVk7U0FDaEIsR0FBRyxDQUFDLENBQUMsV0FBZ0IsRUFBRSxFQUFFO1FBQ3hCLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFdEQsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQyxnQkFBZ0IsQ0FBQyxVQUFVLEdBQUc7Z0JBQzVCLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxVQUFVO2dCQUNsQyxPQUFPLEVBQUUsSUFBSTthQUNkLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLFVBQVUsRUFBRSxHQUFHLGdCQUFnQixDQUFDO1FBRXBELE1BQU0sR0FBRyxHQUFHLENBQUMsZ0JBQWdCLGVBQWUsS0FBSyxDQUFDLENBQUM7UUFFbkQsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxVQUFVLENBQUMsQ0FBQztRQUMvRCxJQUFJLEtBQUs7WUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLElBQUksT0FBTztZQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFZCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLE9BQVk7SUFDOUMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FDaEMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQWdCLEVBQUUsRUFBRTtRQUM3QyxNQUFNLEdBQUcsR0FBRyxDQUFDLFlBQVksV0FBVyxLQUFLLENBQUMsQ0FBQztRQUMzQyxHQUFHLENBQUMsSUFBSSxDQUNOLGNBQWMseUJBQXlCLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQ2xFLENBQUM7UUFDRixJQUFJLFlBQVksRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUMzQixHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELElBQUksWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSx5QkFBeUIsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ1gsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztJQUN0QyxDQUFDLENBQUM7UUFDQSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWQsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLFFBQWE7SUFDMUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUVsRCxPQUFPLGtCQUFrQjtTQUN0QixHQUFHLENBQUMsQ0FBQyxnQkFBcUIsRUFBRSxFQUFFO1FBQzdCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxVQUFVLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQztRQUVwRCxNQUFNLEdBQUcsR0FBRyxDQUFDLGFBQWEsWUFBWSxLQUFLLENBQUMsQ0FBQztRQUU3QyxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQyxJQUFJLEtBQUs7WUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLElBQUksT0FBTztZQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRXZELEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFZCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FBQyxNQUFXO0lBQ3RDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFNUMsT0FBTztRQUNMLEdBQUcsRUFBRSxXQUFXLFVBQVU7RUFDNUIsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUM7RUFDbEM7UUFDRSxRQUFRLEVBQUU7WUFDUixNQUFNLEVBQUU7Z0JBQ04sQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDWixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO2lCQUM3QjthQUNGO1NBQ0Y7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLE1BQVc7SUFDdEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUU1QyxPQUFPLFdBQVcsVUFBVTtFQUM1QixnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQztFQUNsQyxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLE1BQVc7SUFDdEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV2QyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsT0FBTztNQUNILFVBQVU7U0FDVCxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ3RDLEdBQUcsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFO1FBQ3BCLE1BQU0sS0FBSyxHQUFHLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RCxPQUFPLEdBQUcsSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDO0lBQzlCLENBQUMsQ0FBQztTQUNELElBQUksQ0FBQyxJQUFJLENBQUM7RUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLFFBQWE7SUFDMUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUVsRCxPQUFPLGFBQWEsWUFBWTtFQUNoQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQztFQUNwQyxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLElBQVM7SUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQWMsRUFBRSxFQUFFO1FBQzlDLE9BQU87RUFDVCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7RUFDM0IsQ0FBQztJQUNELENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FBQyxPQUFZO0lBQ3ZDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFnQixFQUFFLEVBQUU7UUFDcEQsT0FBTztFQUNULGdCQUFnQixDQUFDLFdBQVcsQ0FBQztFQUM3QixDQUFDO0lBQ0QsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLFNBQWM7SUFDNUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkUsTUFBTSxpQkFBaUIsR0FBRztFQUMxQixzQkFBc0IsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7RUFDcEQsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtRQUN4RSxPQUFPLFlBQVksV0FBVztFQUNoQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQ2hELENBQUM7SUFDRCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxLQUFLO1FBQ2xDLENBQUMsQ0FBQztFQUNKLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7RUFDakM7UUFDRSxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRWQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQ25ELENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQ3hDLENBQUM7SUFDRixPQUFPO0VBQ1AsaUJBQWlCO0VBQ2pCLENBQUMsR0FBRyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN0QyxzQkFBc0IsQ0FBQyxlQUFlLENBQUM7RUFDdkMsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxLQUFVLEVBQUUsaUJBQXlCO0lBQy9ELE9BQU87RUFDUCxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7RUFDdkIsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMscUJBQXFCLENBQUMsVUFBZTtJQUM1QyxPQUFPO1FBQ0wsR0FBRztRQUNILEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ2xELE1BQU0sVUFBVSxHQUFHLDhCQUE4QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hELE9BQU8sR0FBRyxVQUFVLE1BQU0seUJBQXlCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMvRCxDQUFDLENBQUM7UUFDRixHQUFHO0tBQ0osQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDZixDQUFDO0FBQ0Q7O0dBRUc7QUFDSCxTQUFTLHlCQUF5QixDQUFDLGNBQW1CO0lBQ3BELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE9BQU87WUFDTCxHQUFHO1lBQ0gsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFDeEUsR0FBRztTQUNKLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksT0FBTyxjQUFjLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdkMsT0FBTyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxPQUFPLGNBQWMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN2QyxJQUFJLGNBQWMsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxPQUFPLElBQUksY0FBYyxHQUFHLENBQUM7UUFDL0IsQ0FBQztRQUVELElBQUksUUFBUSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxjQUFjLEVBQUUsQ0FBQztZQUMvRCxPQUFPLGNBQWMsQ0FBQztRQUN4QixDQUFDO1FBRUQsSUFBSSxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTyxjQUFjLENBQUM7UUFDeEIsQ0FBQztRQUVELElBQUksY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLENBQUM7UUFFRCxJQUFJLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPLGNBQWMsQ0FBQztRQUN4QixDQUFDO1FBRUQsT0FBTyxJQUFJLFlBQVksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLGNBQWMsS0FBSyxNQUFNLElBQUksY0FBYyxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzVELE9BQU8sY0FBd0IsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxjQUFjLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDOUIsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELE9BQU8sR0FBRyxjQUFjLEVBQUUsQ0FBQztBQUM3QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxVQUFlO0lBQ3BELElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7U0FDOUIsR0FBRyxDQUNGLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUNoQixLQUFLLElBQUksTUFBTSx5QkFBeUIsQ0FBQyxLQUFZLENBQUMsRUFBRSxDQUMzRDtTQUNBLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQixDQUFDO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCxTQUFTLDZCQUE2QixDQUFDLENBQVU7SUFDL0MsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3hDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzdFLE9BQU8sQ0FDTCxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDaEIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDakIsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNkLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUMzQixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsVUFBZTtJQUM5QyxJQUFJLFVBQVUsS0FBSyxTQUFTLElBQUksVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3BELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7U0FDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNqQixJQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNsQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFaEQsRUFBRTtRQUNGLGlFQUFpRTtRQUNqRSx5QkFBeUI7UUFDekIsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbkQsT0FBTyxHQUFHLElBQUksTUFBTSx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JELENBQUM7YUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDMUIsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sR0FBRyxJQUFJLE1BQU0seUJBQXlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyRCxDQUFDO2FBQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdEIsT0FBTyxHQUFHLElBQUksU0FBUyxDQUFDO1FBQzFCLENBQUM7YUFBTSxJQUNMLE9BQU8sQ0FBQyxLQUFLLFFBQVE7WUFDckIsaURBQWlEO1lBQ2pELENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7WUFDMUIsaURBQWlEO1lBQ2pELENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFDNUIsQ0FBQztZQUNELDREQUE0RDtZQUM1RCxtRUFBbUU7WUFDbkUsK0RBQStEO1lBQy9ELDJEQUEyRDtZQUMzRCxvRUFBb0U7WUFDcEUsSUFBSSw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBQ0QsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sR0FBRyxJQUFJO0VBQ3RCLHNCQUFzQixDQUFDLENBQUMsQ0FBQztFQUN6QixDQUFDO1lBQ0ssQ0FBQztZQUNELE9BQU8sR0FBRyxJQUFJLE1BQU0seUJBQXlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyRCxDQUFDO2FBQU0sSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDM0IsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELCtGQUErRjtRQUMvRixxQkFBcUI7UUFDckIsTUFBTSxFQUNKLE9BQU8sRUFDUCxLQUFLLEVBQ0wsSUFBSSxFQUNKLE9BQU8sRUFDUCxnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLGtCQUFrQixHQUNuQixHQUFHLENBQVEsQ0FBQztRQUNiLE1BQU0sS0FBSyxHQUFHLE9BQU8sSUFBSSxRQUFRLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRCxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsSUFBSSxrQkFBa0IsQ0FBQztRQUV6RCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxtQkFBbUIsQ0FBQztnQkFDekIsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSzthQUN0QixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0Qsd0RBQXdEO1FBQ3hELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN0RCxPQUFPLEdBQUcsSUFBSSxNQUFNLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFFRCxJQUFJLEtBQUssSUFBSSxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMvQyxPQUFPLEdBQUcsSUFBSTtFQUNwQixnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7RUFDdkIsQ0FBQztRQUNHLENBQUM7UUFDRCxJQUFJLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3RDLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsT0FBTyxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCxPQUFPLEdBQUcsSUFBSSxNQUFNLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNuQixPQUFPLEdBQUcsSUFBSSxNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pDLENBQUM7UUFFRCxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN0QixJQUFJLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxHQUFHLElBQUksTUFBTSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxDQUFDO1lBQ0QsSUFBSSxTQUFTLEtBQUssUUFBUSxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdEQsT0FBTyxHQUFHLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQztZQUM5QixDQUFDO1lBRUQsb0VBQW9FO1lBQ3BFLHNFQUFzRTtZQUN0RSxtRUFBbUU7WUFDbkUsOERBQThEO1lBQzlELFNBQVM7WUFDVCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM5QixPQUFPOzs7Ozs7Ozs7RUFTZixJQUFJLE1BQU0seUJBQXlCLENBQUMsS0FBSyxDQUFDO0NBQzNDLENBQUM7WUFDTSxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ25CLE9BQU8sR0FBRyxJQUFJLE1BQU0seUJBQXlCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6RCxDQUFDO1FBRUQsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDekIsT0FBTyxHQUFHLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBRUQsT0FBTyxHQUFHLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQztJQUM5QixDQUFDLENBQUM7U0FDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUM7U0FDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5pbXBvcnQgeyBUb2tlbml6YXRpb24gfSBmcm9tIFwiLi4vdG9rZW5zL3Rva2VuXCI7XG5cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gZXNjYXBlUXVvdGVzKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gRG9uJ3QgYXR0ZW1wdCB0byBlc2NhcGUgaWYgd2UgaGF2ZSBhbiBleHByZXNzaW9uXG4gIGlmIChzdHIubWF0Y2goL1xcJFxcey8pKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICByZXR1cm4gc3RyLnJlcGxhY2UoLyg/PCFcXFxcKVwiL2csICdcXFxcXCInKTtcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiB3cmFwSWRlbnRpZmllckluUXVvdGVzSWZOZWVkZWQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gLyheXFxkKXxbXkEtWmEtejAtOV8tXS8udGVzdChrZXkpID8gYFwiJHtrZXl9XCJgIDoga2V5O1xufVxuXG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0cmluZyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChzdHIgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gYFwiXCJgO1xuICB9XG5cbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHIgIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIlVuYWJsZSB0byBwcm9jZXNzIGF0dHJpYnV0ZSB0aGF0IHNob3VsZCBoYXZlIGJlZW4gYSBzdHJpbmcsIGJ1dCBpc24ndFwiLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBsaW5lcyA9IHN0ci5zcGxpdCgvXFxyXFxufFtcXG5cXHJdLyk7XG5cbiAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGBcIiR7ZXNjYXBlUXVvdGVzKHN0cil9XCJgO1xuXG4gIHJldHVybiBgPDxFT0ZcXG4ke2xpbmVzLmpvaW4oXCJcXG5cIil9XFxuRU9GYDtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5Gb3JNZXRhZGF0YShibG9jazogYW55KTogYW55IHtcbiAgY29uc3QgcmVzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gIGlmICh0eXBlb2YgYmxvY2sgIT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoYmxvY2spKSB7XG4gICAgcmV0dXJuIGJsb2NrO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYmxvY2spKSB7XG4gICAgcmV0dXJuIGJsb2NrLm1hcCgoaSkgPT4gY2xlYW5Gb3JNZXRhZGF0YShpKSk7XG4gIH1cblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYmxvY2spO1xuXG4gIGlmIChrZXlzLmluY2x1ZGVzKFwidmFsdWVcIikpIHtcbiAgICByZXR1cm4gY2xlYW5Gb3JNZXRhZGF0YShibG9jay52YWx1ZSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBibG9ja1trZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBhIHJlc29sdmFibGUgd2UgZG9uJ3Qgd2FudCB0byByZWN1cnNlIGludG8gaXRcbiAgICAgIGlmIChUb2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHZhbHVlKSkge1xuICAgICAgICByZXNba2V5XSA9IHt9O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcmVzW2tleV0gPSBjbGVhbkZvck1ldGFkYXRhKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHZhbHVlICE9IG51bGwgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXNba2V5XSkpIHtcbiAgICAgICAgcmVzW2tleV0gPSBbLi4ucmVzW2tleV0sIC4uLnZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgcmVzW2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckxpc3QodjogYW55LCBuYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgeyBpc0Jsb2NrLCBpc19ibG9jaywgdmFsdWUsIHN0b3JhZ2VfY2xhc3NfdHlwZSwgc3RvcmFnZUNsYXNzVHlwZSB9ID0gdjtcbiAgY29uc3QgYmxvY2sgPSBpc0Jsb2NrIHx8IGlzX2Jsb2NrO1xuICBjb25zdCBjbGFzc1R5cGUgPSBzdG9yYWdlQ2xhc3NUeXBlIHx8IHN0b3JhZ2VfY2xhc3NfdHlwZTtcblxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIC8vIHRoaXMgY291bGQgYmUgYW4gZXhwcmVzc2lvbiwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlXG4gICAgcmV0dXJuIHJlbmRlclN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICBpZiAobmFtZSkge1xuICAgIGlmIChibG9jaykge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0ge2AgKyBgXFxuJHtyZW5kZXJBdHRyaWJ1dGVzKHZhbHVlKX1cXG59YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIC5tYXAoKHY6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSB7YCArIGBcXG4ke3JlbmRlckF0dHJpYnV0ZXModil9XFxufWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBgJHtuYW1lfSA9ICR7cmVuZGVyTGlzdFZhbHVlKHZhbHVlLCBjbGFzc1R5cGUpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke25hbWV9ID0gW1xuJHt2YWx1ZS5tYXAoKHY6IGFueSkgPT4gcmVuZGVyTGlzdFZhbHVlKHYsIGNsYXNzVHlwZSkpLmpvaW4oXCIsXFxuXCIpfVxuXWA7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gQSBsaXN0IHR5cGUgb2Ygb25seSBhIHNpbmdsZSBpdGVtXG4gICAgcmV0dXJuIHJlbmRlckxpc3RWYWx1ZSh2YWx1ZSwgY2xhc3NUeXBlKTtcbiAgfVxuXG4gIGlmIChibG9jaykge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoKHY6IGFueSkgPT4gcmVuZGVyTGlzdFZhbHVlKHYsIGNsYXNzVHlwZSkpLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gYFtcbiR7dmFsdWUubWFwKCh2OiBhbnkpID0+IHJlbmRlckxpc3RWYWx1ZSh2LCBjbGFzc1R5cGUpKS5qb2luKFwiLFxcblwiKX1cbl1gO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJMaXN0VmFsdWUodmFsdWU6IGFueSwgc3RvcmFnZUNsYXNzVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHN0b3JhZ2VDbGFzc1R5cGUgPT09IFwic3RyaW5nTGlzdFwiKSB7XG4gICAgcmV0dXJuIHJlbmRlclN0cmluZyh2YWx1ZSk7XG4gIH1cbiAgaWYgKHN0b3JhZ2VDbGFzc1R5cGUgPT09IFwibnVtYmVyTGlzdFwiIHx8IHN0b3JhZ2VDbGFzc1R5cGUgPT09IFwiYm9vbGVhbkxpc3RcIikge1xuICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlckJsb2NrKHZhbHVlLCBzdG9yYWdlQ2xhc3NUeXBlKTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTWFwKG1hcDogYW55KTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBtYXAgPT09IFwic3RyaW5nXCIpIHtcbiAgICAvLyB0aGlzIGNvdWxkIGJlIGFuIGV4cHJlc3Npb24sIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZVxuICAgIHJldHVybiBgXCIke2VzY2FwZVF1b3RlcyhtYXApfVwiYDtcbiAgfVxuICByZXR1cm4gYHtcbiR7T2JqZWN0LmVudHJpZXMobWFwKVxuICAubWFwKChbaywgdl0pID0+IHtcbiAgICBjb25zdCB3cmFwcGVkS2V5ID0gd3JhcElkZW50aWZpZXJJblF1b3Rlc0lmTmVlZGVkKGspO1xuXG4gICAgcmV0dXJuIGAke3dyYXBwZWRLZXl9ID0gJHtyZW5kZXJNYXBWYWx1ZSh2KX1gO1xuICB9KVxuICAuam9pbihcIlxcblwiKX1cbn1gO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNYXBWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiByZW5kZXJTdHJpbmcodmFsdWUpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHJlbmRlckxpc3RWYWx1ZSh2YWx1ZSwgXCJ1bmtub3duU3RvcmFnZUNsYXNzXCIpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlck1hcCh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gYCR7dmFsdWV9YDtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyUmVzb3VyY2UocmVzb3VyY2U6IGFueSkge1xuICBjb25zdCByZXNvdXJjZVR5cGUgPSBPYmplY3Qua2V5cyhyZXNvdXJjZSlbMF07XG4gIGNvbnN0IHJlc291cmNlc1dpdGhUeXBlID0gcmVzb3VyY2VbcmVzb3VyY2VUeXBlXTtcbiAgY29uc3QgcmVzb3VyY2VOYW1lID0gT2JqZWN0LmtleXMocmVzb3VyY2VzV2l0aFR5cGUpWzBdO1xuICBjb25zdCByZXNvdXJjZUF0dHJpYnV0ZXMgPSByZXNvdXJjZXNXaXRoVHlwZVtyZXNvdXJjZU5hbWVdO1xuXG4gIGlmIChyZXNvdXJjZUF0dHJpYnV0ZXMuY29ubmVjdGlvbikge1xuICAgIHJlc291cmNlQXR0cmlidXRlcy5jb25uZWN0aW9uID0ge1xuICAgICAgdmFsdWU6IHJlc291cmNlQXR0cmlidXRlcy5jb25uZWN0aW9uLFxuICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgeyBwcm92aXNpb25lciwgZHluYW1pYywgLi4ub3RoZXJBdHRycyB9ID0gcmVzb3VyY2VBdHRyaWJ1dGVzO1xuXG4gIGNvbnN0IGhjbCA9IFtgcmVzb3VyY2UgXCIke3Jlc291cmNlVHlwZX1cIiBcIiR7cmVzb3VyY2VOYW1lfVwiIHtgXTtcblxuICBjb25zdCBhdHRycyA9IHJlbmRlckF0dHJpYnV0ZXMob3RoZXJBdHRycyk7XG5cbiAgaWYgKGF0dHJzKSBoY2wucHVzaChhdHRycyk7XG4gIGlmIChwcm92aXNpb25lcikgaGNsLnB1c2gocmVuZGVyUHJvdmlzaW9uZXJCbG9jayhwcm92aXNpb25lcikpO1xuICBpZiAoZHluYW1pYykgaGNsLnB1c2goLi4ucmVuZGVyRHluYW1pY0Jsb2NrcyhkeW5hbWljKSk7XG5cbiAgaGNsLnB1c2goXCJ9XCIpO1xuXG4gIHJldHVybiB7XG4gICAgaGNsOiBoY2wuam9pbihcIlxcblwiKSxcbiAgICBtZXRhZGF0YToge1xuICAgICAgcmVzb3VyY2U6IHtcbiAgICAgICAgW3Jlc291cmNlVHlwZV06IHtcbiAgICAgICAgICBbcmVzb3VyY2VOYW1lXToge1xuICAgICAgICAgICAgXCIvL1wiOiByZXNvdXJjZUF0dHJpYnV0ZXNbXCIvL1wiXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJEYXRhc291cmNlKGRhdGFTb3VyY2U6IGFueSkge1xuICBjb25zdCBkYXRhU291cmNlVHlwZSA9IE9iamVjdC5rZXlzKGRhdGFTb3VyY2UpWzBdO1xuICBjb25zdCBkYXRhU291cmNlc1dpdGhUeXBlID0gZGF0YVNvdXJjZVtkYXRhU291cmNlVHlwZV07XG4gIGNvbnN0IGRhdGFTb3VyY2VOYW1lID0gT2JqZWN0LmtleXMoZGF0YVNvdXJjZXNXaXRoVHlwZSlbMF07XG4gIGNvbnN0IGRhdGFTb3VyY2VBdHRyaWJ1dGVzID0gZGF0YVNvdXJjZXNXaXRoVHlwZVtkYXRhU291cmNlTmFtZV07XG5cbiAgY29uc3QgeyBkeW5hbWljLCAuLi5vdGhlckF0dHJzIH0gPSBkYXRhU291cmNlQXR0cmlidXRlcztcblxuICBjb25zdCBoY2wgPSBbYGRhdGEgXCIke2RhdGFTb3VyY2VUeXBlfVwiIFwiJHtkYXRhU291cmNlTmFtZX1cIiB7YF07XG5cbiAgY29uc3QgYXR0cnMgPSByZW5kZXJBdHRyaWJ1dGVzKG90aGVyQXR0cnMpO1xuICBpZiAoYXR0cnMpIGhjbC5wdXNoKGF0dHJzKTtcbiAgaWYgKGR5bmFtaWMpIGhjbC5wdXNoKC4uLnJlbmRlckR5bmFtaWNCbG9ja3MoZHluYW1pYykpO1xuICBoY2wucHVzaChcIn1cIik7XG5cbiAgcmV0dXJuIHtcbiAgICBoY2w6IGhjbC5qb2luKFwiXFxuXCIpLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIFtkYXRhU291cmNlVHlwZV06IHtcbiAgICAgICAgICBbZGF0YVNvdXJjZU5hbWVdOiB7XG4gICAgICAgICAgICBcIi8vXCI6IGRhdGFTb3VyY2VBdHRyaWJ1dGVzW1wiLy9cIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRXBoZW1lcmFsKGVwaGVtZXJhbDogYW55KSB7XG4gIGNvbnN0IGVwaGVtZXJhbFR5cGUgPSBPYmplY3Qua2V5cyhlcGhlbWVyYWwpWzBdO1xuICBjb25zdCBlcGhlbWVyYWxzV2l0aFR5cGUgPSBlcGhlbWVyYWxbZXBoZW1lcmFsVHlwZV07XG4gIGNvbnN0IGVwaGVtZXJhbE5hbWUgPSBPYmplY3Qua2V5cyhlcGhlbWVyYWxzV2l0aFR5cGUpWzBdO1xuICBjb25zdCBlcGhlbWVyYWxBdHRyaWJ1dGVzID0gZXBoZW1lcmFsc1dpdGhUeXBlW2VwaGVtZXJhbE5hbWVdO1xuXG4gIGNvbnN0IHsgZHluYW1pYywgLi4ub3RoZXJBdHRycyB9ID0gZXBoZW1lcmFsQXR0cmlidXRlcztcblxuICBjb25zdCBoY2wgPSBbYGVwaGVtZXJhbCBcIiR7ZXBoZW1lcmFsVHlwZX1cIiBcIiR7ZXBoZW1lcmFsTmFtZX1cIiB7YF07XG5cbiAgY29uc3QgYXR0cnMgPSByZW5kZXJBdHRyaWJ1dGVzKG90aGVyQXR0cnMpO1xuICBpZiAoYXR0cnMpIGhjbC5wdXNoKGF0dHJzKTtcbiAgaWYgKGR5bmFtaWMpIGhjbC5wdXNoKC4uLnJlbmRlckR5bmFtaWNCbG9ja3MoZHluYW1pYykpO1xuICBoY2wucHVzaChcIn1cIik7XG5cbiAgcmV0dXJuIHtcbiAgICBoY2w6IGhjbC5qb2luKFwiXFxuXCIpLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICBlcGhlbWVyYWw6IHtcbiAgICAgICAgW2VwaGVtZXJhbFR5cGVdOiB7XG4gICAgICAgICAgW2VwaGVtZXJhbE5hbWVdOiB7XG4gICAgICAgICAgICBcIi8vXCI6IGVwaGVtZXJhbEF0dHJpYnV0ZXNbXCIvL1wiXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJQcm92aXNpb25lckJsb2NrKHByb3Zpc2lvbmVyczogYW55KSB7XG4gIHJldHVybiBwcm92aXNpb25lcnNcbiAgICAubWFwKChwcm92aXNpb25lcjogYW55KSA9PiB7XG4gICAgICBjb25zdCBwcm92aXNpb25lclR5cGUgPSBPYmplY3Qua2V5cyhwcm92aXNpb25lcilbMF07XG4gICAgICBjb25zdCBwcm92aXNpb25lckF0dHJzID0gcHJvdmlzaW9uZXJbcHJvdmlzaW9uZXJUeXBlXTtcblxuICAgICAgaWYgKHByb3Zpc2lvbmVyQXR0cnMuY29ubmVjdGlvbikge1xuICAgICAgICBwcm92aXNpb25lckF0dHJzLmNvbm5lY3Rpb24gPSB7XG4gICAgICAgICAgdmFsdWU6IHByb3Zpc2lvbmVyQXR0cnMuY29ubmVjdGlvbixcbiAgICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGR5bmFtaWMsIC4uLm90aGVyQXR0cnMgfSA9IHByb3Zpc2lvbmVyQXR0cnM7XG5cbiAgICAgIGNvbnN0IGhjbCA9IFtgcHJvdmlzaW9uZXIgXCIke3Byb3Zpc2lvbmVyVHlwZX1cIiB7YF07XG5cbiAgICAgIGNvbnN0IGF0dHJzID0gcmVuZGVyQXR0cmlidXRlcyhvdGhlckF0dHJzLnZhbHVlIHx8IG90aGVyQXR0cnMpO1xuICAgICAgaWYgKGF0dHJzKSBoY2wucHVzaChhdHRycyk7XG4gICAgICBpZiAoZHluYW1pYykgaGNsLnB1c2goLi4ucmVuZGVyRHluYW1pY0Jsb2NrcyhkeW5hbWljKSk7XG4gICAgICBoY2wucHVzaChcIn1cIik7XG5cbiAgICAgIHJldHVybiBoY2wuam9pbihcIlxcblwiKTtcbiAgICB9KVxuICAgIC5qb2luKFwiXFxuXFxuXCIpO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJEeW5hbWljQmxvY2tzKGR5bmFtaWM6IGFueSkge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZHluYW1pYykubWFwKFxuICAgIChbZHluYW1pY05hbWUsIGR5bmFtaWNBdHRyc106IFtzdHJpbmcsIGFueV0pID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IFtgZHluYW1pYyBcIiR7ZHluYW1pY05hbWV9XCIge2BdO1xuICAgICAgcmVzLnB1c2goXG4gICAgICAgIGBmb3JfZWFjaCA9ICR7cmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbihkeW5hbWljQXR0cnM/LmZvcl9lYWNoKX1gLFxuICAgICAgKTtcbiAgICAgIGlmIChkeW5hbWljQXR0cnM/Lml0ZXJhdG9yKSB7XG4gICAgICAgIHJlcy5wdXNoKGBpdGVyYXRvciA9ICR7ZHluYW1pY0F0dHJzPy5pdGVyYXRvcn1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChkeW5hbWljQXR0cnM/LmxhYmVscykge1xuICAgICAgICByZXMucHVzaChgbGFiZWxzID0gJHtyZW5kZXJGdXp6eUpzb25FeHByZXNzaW9uKGR5bmFtaWNBdHRycz8ubGFiZWxzKX1gKTtcbiAgICAgIH1cbiAgICAgIHJlcy5wdXNoKGBjb250ZW50IHtcbiAgJHtyZW5kZXJBdHRyaWJ1dGVzKGR5bmFtaWNBdHRycy5jb250ZW50KX1cbiAgfWApO1xuICAgICAgcmVzLnB1c2goYH1gKTtcblxuICAgICAgcmV0dXJuIHJlcy5qb2luKFwiXFxuXCIpO1xuICAgIH0sXG4gICk7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclByb3ZpZGVyKHByb3ZpZGVyOiBhbnkpIHtcbiAgY29uc3QgcHJvdmlkZXJOYW1lID0gT2JqZWN0LmtleXMocHJvdmlkZXIpWzBdO1xuICBjb25zdCBwcm92aWRlckF0dHJpYnV0ZXMgPSBwcm92aWRlcltwcm92aWRlck5hbWVdO1xuXG4gIHJldHVybiBwcm92aWRlckF0dHJpYnV0ZXNcbiAgICAubWFwKChwcm92aWRlckluc3RhbmNlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHsgZHluYW1pYywgLi4ub3RoZXJBdHRycyB9ID0gcHJvdmlkZXJJbnN0YW5jZTtcblxuICAgICAgY29uc3QgaGNsID0gW2Bwcm92aWRlciBcIiR7cHJvdmlkZXJOYW1lfVwiIHtgXTtcblxuICAgICAgY29uc3QgYXR0cnMgPSByZW5kZXJBdHRyaWJ1dGVzKG90aGVyQXR0cnMpO1xuICAgICAgaWYgKGF0dHJzKSBoY2wucHVzaChhdHRycyk7XG4gICAgICBpZiAoZHluYW1pYykgaGNsLnB1c2goLi4ucmVuZGVyRHluYW1pY0Jsb2NrcyhkeW5hbWljKSk7XG5cbiAgICAgIGhjbC5wdXNoKFwifVwiKTtcblxuICAgICAgcmV0dXJuIGhjbC5qb2luKFwiXFxuXCIpO1xuICAgIH0pXG4gICAgLmpvaW4oXCJcXG5cXG5cIik7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1vZHVsZShtb2R1bGU6IGFueSkge1xuICBjb25zdCBtb2R1bGVOYW1lID0gT2JqZWN0LmtleXMobW9kdWxlKVswXTtcbiAgY29uc3QgbW9kdWxlQXR0cmlidXRlcyA9IG1vZHVsZVttb2R1bGVOYW1lXTtcblxuICByZXR1cm4ge1xuICAgIGhjbDogYG1vZHVsZSBcIiR7bW9kdWxlTmFtZX1cIiB7XG4ke3JlbmRlckF0dHJpYnV0ZXMobW9kdWxlQXR0cmlidXRlcyl9XG59YCxcbiAgICBtZXRhZGF0YToge1xuICAgICAgbW9kdWxlOiB7XG4gICAgICAgIFttb2R1bGVOYW1lXToge1xuICAgICAgICAgIFwiLy9cIjogbW9kdWxlQXR0cmlidXRlc1tcIi8vXCJdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJPdXRwdXQob3V0cHV0OiBhbnkpIHtcbiAgY29uc3Qgb3V0cHV0TmFtZSA9IE9iamVjdC5rZXlzKG91dHB1dClbMF07XG4gIGNvbnN0IG91dHB1dEF0dHJpYnV0ZXMgPSBvdXRwdXRbb3V0cHV0TmFtZV07XG5cbiAgcmV0dXJuIGBvdXRwdXQgXCIke291dHB1dE5hbWV9XCIge1xuJHtyZW5kZXJBdHRyaWJ1dGVzKG91dHB1dEF0dHJpYnV0ZXMpfVxufWA7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckxvY2Fscyhsb2NhbHM6IGFueSkge1xuICBpZiAoIWxvY2Fscykge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3QgbG9jYWxOYW1lcyA9IE9iamVjdC5rZXlzKGxvY2Fscyk7XG5cbiAgaWYgKGxvY2FsTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICByZXR1cm4gYGxvY2FscyB7XG4gICAgJHtsb2NhbE5hbWVzXG4gICAgICAuZmlsdGVyKChuYW1lKSA9PiAhIWxvY2Fsc1tuYW1lXS52YWx1ZSlcbiAgICAgIC5tYXAoKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24obG9jYWxzW25hbWVdLnZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGAke25hbWV9ID0gJHt2YWx1ZX1gO1xuICAgICAgfSlcbiAgICAgIC5qb2luKFwiXFxuXCIpfVxufWA7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclZhcmlhYmxlKHZhcmlhYmxlOiBhbnkpIHtcbiAgY29uc3QgdmFyaWFibGVOYW1lID0gT2JqZWN0LmtleXModmFyaWFibGUpWzBdO1xuICBjb25zdCB2YXJpYWJsZUF0dHJpYnV0ZXMgPSB2YXJpYWJsZVt2YXJpYWJsZU5hbWVdO1xuXG4gIHJldHVybiBgdmFyaWFibGUgXCIke3ZhcmlhYmxlTmFtZX1cIiB7XG4ke3JlbmRlckF0dHJpYnV0ZXModmFyaWFibGVBdHRyaWJ1dGVzKX1cbn1gO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNb3ZlZChtb3ZlOiBhbnkpIHtcbiAgY29uc3QgbW92ZWRCbG9ja3MgPSBtb3ZlLm1hcCgobW92ZUJsb2NrOiBhbnkpID0+IHtcbiAgICByZXR1cm4gYG1vdmVkIHtcbiR7cmVuZGVyQXR0cmlidXRlcyhtb3ZlQmxvY2spfVxufWA7XG4gIH0pO1xuXG4gIHJldHVybiBtb3ZlZEJsb2Nrcy5qb2luKFwiXFxuXCIpO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJJbXBvcnQoaW1wb3J0czogYW55KSB7XG4gIGNvbnN0IGltcG9ydEJsb2NrcyA9IGltcG9ydHMubWFwKChpbXBvcnRCbG9jazogYW55KSA9PiB7XG4gICAgcmV0dXJuIGBpbXBvcnQge1xuJHtyZW5kZXJBdHRyaWJ1dGVzKGltcG9ydEJsb2NrKX1cbn1gO1xuICB9KTtcblxuICByZXR1cm4gaW1wb3J0QmxvY2tzLmpvaW4oXCJcXG5cIik7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclRlcnJhZm9ybSh0ZXJyYWZvcm06IGFueSkge1xuICBjb25zdCBibG9ja0F0dHJpYnV0ZXMgPSBbXCJyZXF1aXJlZF9wcm92aWRlcnNcIiwgXCJiYWNrZW5kXCIsIFwiY2xvdWRcIl07XG4gIGNvbnN0IHJlcXVpcmVkUHJvdmlkZXJzID0gYHJlcXVpcmVkX3Byb3ZpZGVycyB7XG4ke3JlbmRlclNpbXBsZUF0dHJpYnV0ZXModGVycmFmb3JtLnJlcXVpcmVkX3Byb3ZpZGVycyl9XG59YDtcblxuICBjb25zdCBiYWNrZW5kcyA9IE9iamVjdC5rZXlzKHRlcnJhZm9ybS5iYWNrZW5kIHx8IHt9KS5tYXAoKGJhY2tlbmROYW1lKSA9PiB7XG4gICAgcmV0dXJuIGBiYWNrZW5kIFwiJHtiYWNrZW5kTmFtZX1cIiB7XG4ke3JlbmRlckF0dHJpYnV0ZXModGVycmFmb3JtLmJhY2tlbmRbYmFja2VuZE5hbWVdKX1cbn1gO1xuICB9KTtcblxuICBjb25zdCBjbG91ZEJhY2tlbmQgPSB0ZXJyYWZvcm0uY2xvdWRcbiAgICA/IGBjbG91ZCB7XG4ke3JlbmRlckF0dHJpYnV0ZXModGVycmFmb3JtLmNsb3VkKX1cbn1gXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgb3RoZXJBdHRyaWJ1dGVzID0gT2JqZWN0LmtleXModGVycmFmb3JtKS5maWx0ZXIoXG4gICAgKGtleSkgPT4gIWJsb2NrQXR0cmlidXRlcy5pbmNsdWRlcyhrZXkpLFxuICApO1xuICByZXR1cm4gYHRlcnJhZm9ybSB7XG4ke3JlcXVpcmVkUHJvdmlkZXJzfVxuJHtbLi4uYmFja2VuZHMsIGNsb3VkQmFja2VuZF0uam9pbihcIlxcblwiKX1cbiR7cmVuZGVyU2ltcGxlQXR0cmlidXRlcyhvdGhlckF0dHJpYnV0ZXMpfVxufWA7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckJsb2NrKGJsb2NrOiBhbnksIF9zdG9yYWdlQ2xhc3NUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYHtcbiR7cmVuZGVyQXR0cmlidXRlcyhibG9jayl9XG59YDtcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiByZW5kZXJGdXp6eUpzb25PYmplY3QoanNvbk9iamVjdDogYW55KTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICBcIntcIixcbiAgICAuLi5PYmplY3QuZW50cmllcyhqc29uT2JqZWN0KS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICAgIGNvbnN0IHdyYXBwZWRLZXkgPSB3cmFwSWRlbnRpZmllckluUXVvdGVzSWZOZWVkZWQobmFtZSk7XG4gICAgICByZXR1cm4gYCR7d3JhcHBlZEtleX0gPSAke3JlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24odmFsdWUpfWA7XG4gICAgfSksXG4gICAgXCJ9XCIsXG4gIF0uam9pbihcIlxcblwiKTtcbn1cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gcmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbihqc29uRXhwcmVzc2lvbjogYW55KTogc3RyaW5nIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoanNvbkV4cHJlc3Npb24pKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFwiW1wiLFxuICAgICAgLi4uanNvbkV4cHJlc3Npb24ubWFwKCh2YWx1ZSkgPT4gYCR7cmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbih2YWx1ZSl9LGApLFxuICAgICAgXCJdXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBqc29uRXhwcmVzc2lvbiA9PT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiByZW5kZXJGdXp6eUpzb25PYmplY3QoanNvbkV4cHJlc3Npb24pO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBqc29uRXhwcmVzc2lvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgIGlmIChqc29uRXhwcmVzc2lvbiA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIGBcIlwiYDtcbiAgICB9XG5cbiAgICBpZiAoanNvbkV4cHJlc3Npb24uaW5jbHVkZXMoXCIke1wiKSkge1xuICAgICAgcmV0dXJuIGBcIiR7anNvbkV4cHJlc3Npb259XCJgO1xuICAgIH1cblxuICAgIGlmIChwYXJzZUludChqc29uRXhwcmVzc2lvbiwgMTApLnRvU3RyaW5nKCkgPT09IGpzb25FeHByZXNzaW9uKSB7XG4gICAgICByZXR1cm4ganNvbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKGpzb25FeHByZXNzaW9uLnN0YXJ0c1dpdGgoXCJbXCIpKSB7XG4gICAgICByZXR1cm4ganNvbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKGpzb25FeHByZXNzaW9uLnN0YXJ0c1dpdGgoXCJ7XCIpKSB7XG4gICAgICByZXR1cm4ganNvbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKGpzb25FeHByZXNzaW9uLnN0YXJ0c1dpdGgoJ1wiJykpIHtcbiAgICAgIHJldHVybiBqc29uRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gYFwiJHtlc2NhcGVRdW90ZXMoanNvbkV4cHJlc3Npb24pfVwiYDtcbiAgfVxuXG4gIGlmIChqc29uRXhwcmVzc2lvbiA9PT0gXCJ0cnVlXCIgfHwganNvbkV4cHJlc3Npb24gPT09IFwiZmFsc2VcIikge1xuICAgIHJldHVybiBqc29uRXhwcmVzc2lvbiBhcyBzdHJpbmc7XG4gIH1cblxuICBpZiAoanNvbkV4cHJlc3Npb24gPT09IFwibnVsbFwiKSB7XG4gICAgcmV0dXJuIGpzb25FeHByZXNzaW9uO1xuICB9XG5cbiAgcmV0dXJuIGAke2pzb25FeHByZXNzaW9ufWA7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclNpbXBsZUF0dHJpYnV0ZXMoYXR0cmlidXRlczogYW55KTogc3RyaW5nIHtcbiAgaWYgKGF0dHJpYnV0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpXG4gICAgLm1hcChcbiAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICBgICAke25hbWV9ID0gJHtyZW5kZXJGdXp6eUpzb25FeHByZXNzaW9uKHZhbHVlIGFzIGFueSl9YCxcbiAgICApXG4gICAgLmpvaW4oXCJcXG5cIik7XG59XG4vKipcbiAqIERldGVjdHMgYSByZXNvbHZlZC1idXQtZW1wdGllZCBhdHRyaWJ1dGUgZGVzY3JpcHRvcjogYW4gb2JqZWN0IHNoYXBlZCBsaWtlXG4gKiB3aGF0IGBBdHRyaWJ1dGVzRW1pdHRlciNlbWl0VG9IY2xUZXJyYWZvcm1gIGFsd2F5cyBlbWl0cyBmb3IgSENMIHN5bnRoZXNpc1xuICogLSBgeyB2YWx1ZSwgaXNCbG9jaywgdHlwZSwgc3RvcmFnZUNsYXNzVHlwZSB9YCAtIHRoYXQgaGFzIGxvc3QgaXRzIGB2YWx1ZWBcbiAqIGtleS5cbiAqXG4gKiBUaGUgb25seSB3YXkgYSBkZXNjcmlwdG9yIGxvc2VzIGB2YWx1ZWAgaGVyZSBpcyB0aGF0IGl0IHJlc29sdmVkIHRvXG4gKiBgdW5kZWZpbmVkYDogYHJlc29sdmUoKWAgKHNlZSBgdG9rZW5zL3ByaXZhdGUvcmVzb2x2ZS50c2ApIGRlZXAtcmVzb2x2ZXNcbiAqIGV2ZXJ5IGtleSBvZiBhIHBsYWluIG9iamVjdCBhbmQgc2lsZW50bHkgZHJvcHMgYW55IGtleSB3aG9zZSByZXNvbHZlZFxuICogdmFsdWUgaXMgYHVuZGVmaW5lZGAsIGJ1dCBvbmx5IGB2YWx1ZWAgY2FuIGV2ZXIgZG8gdGhhdCAtIGBpc0Jsb2NrYCxcbiAqIGB0eXBlYCwgYW5kIGBzdG9yYWdlQ2xhc3NUeXBlYCBhcmUgZW1pdHRlZCBhcyBsaXRlcmFsIHN0cmluZ3MvYm9vbGVhbnMgYnlcbiAqIHRoZSBnZW5lcmF0b3IsIG5ldmVyIGFzIHRva2Vucy4gU28gYW4gb2JqZWN0IGNhcnJ5aW5nIGV4YWN0bHkgdGhpc1xuICogbWV0YWRhdGEgY29tYmluYXRpb24sIHdpdGggYHZhbHVlYCBhbmQgYGR5bmFtaWNgIGJvdGggYWJzZW50LCBpcyBhbHdheXNcbiAqIHRoZSBsZWZ0b3ZlciBzaGVsbCBvZiBhIGRlc2NyaXB0b3Igd2hvc2UgdmFsdWUgdmFuaXNoZWQsIG5ldmVyIGEgZ2VudWluZVxuICogdXNlci1zdXBwbGllZCBtYXAgKHRob3NlIGRvbid0IGhhcHBlbiB0byBhbHNvIGNhcnJ5IGBpc0Jsb2NrYCArXG4gKiBgc3RvcmFnZUNsYXNzVHlwZWApLlxuICpcbiAqIFRoaXMgaXMgaW50ZW50aW9uYWxseSBub3Qgc3BlY2lmaWMgdG8gd3JpdGUtb25seSBhdHRyaWJ1dGVzOiBhIHdyaXRlLW9ubHlcbiAqIGF0dHJpYnV0ZSB3cmFwcGVkIGJ5IGBtYXJrV3JpdGVPbmx5QXR0cmlidXRlKClgIGFyb3VuZCBhIGBMYXp5YC90b2tlblxuICogcHJvZHVjZXIgdGhhdCByZXNvbHZlcyB0byBgdW5kZWZpbmVkYCBpcyBzaW1wbHkgb25lIGV4YW1wbGUgKGl0IHN1cnZpdmVzXG4gKiB0aGUgZ2VuZXJhdGVkIFwicmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXCIgcHJlLWZpbHRlciBpblxuICogYHN5bnRoZXNpemVIY2xBdHRyaWJ1dGVzKClgIGJlY2F1c2UgdGhhdCBmaWx0ZXIgb25seSBzZWVzIHRoZSBzdGlsbC1cbiAqIHVucmVzb2x2ZWQgdG9rZW4sIG5vdCB3aGF0IGl0IGxhdGVyIHJlc29sdmVzIHRvKSAtIGJ1dCBBTlkgYXR0cmlidXRlXG4gKiBkZXNjcmlwdG9yIHdob3NlIHRva2VuIHJlc29sdmVzIHRvIGB1bmRlZmluZWRgIGluIEhDTCBtb2RlIGhpdHMgdGhpcyBzYW1lXG4gKiBwYXRoIChzZWUgdGhlICMzMTMgSENMLWRlZmVjdHMgZmFtaWx5KS5cbiAqL1xuZnVuY3Rpb24gaXNPcnBoYW5lZEF0dHJpYnV0ZURlc2NyaXB0b3IodjogdW5rbm93bik6IHYgaXMgUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGlmICh0eXBlb2YgdiAhPT0gXCJvYmplY3RcIiB8fCB2ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGhhc093biA9IChrZXk6IHN0cmluZykgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHYsIGtleSk7XG4gIHJldHVybiAoXG4gICAgIWhhc093bihcInZhbHVlXCIpICYmXG4gICAgIWhhc093bihcImR5bmFtaWNcIikgJiZcbiAgICBoYXNPd24oXCJpc0Jsb2NrXCIpICYmXG4gICAgaGFzT3duKFwidHlwZVwiKSAmJlxuICAgIGhhc093bihcInN0b3JhZ2VDbGFzc1R5cGVcIilcbiAgKTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQXR0cmlidXRlcyhhdHRyaWJ1dGVzOiBhbnkpOiBzdHJpbmcge1xuICBpZiAoYXR0cmlidXRlcyA9PT0gdW5kZWZpbmVkIHx8IGF0dHJpYnV0ZXMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcylcbiAgICAubWFwKChbbmFtZSwgdl0pID0+IHtcbiAgICAgIGlmIChuYW1lID09PSBcIi8vXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1ldGFCbG9ja3MgPSBbXCJsaWZlY3ljbGVcIiwgXCJwcm92aXNpb25lclwiXTtcblxuICAgICAgLy9cbiAgICAgIC8vIFdlIG1pZ2h0IGhhdmUgc29tZSBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSB0eXBlIGluZm9ybWF0aW9uXG4gICAgICAvLyBqdXN0IHRyeSB0byBndWVzcyB0aGVtXG4gICAgICBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHYgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGAke25hbWV9ID0gJHtyZW5kZXJGdXp6eUpzb25FeHByZXNzaW9uKHYpfWA7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3Z9YDtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3JlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24odil9YDtcbiAgICAgIH0gZWxzZSBpZiAodiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSBudWxsYDtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgIXYuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKSAmJlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAgICF2Lmhhc093blByb3BlcnR5KFwiZHluYW1pY1wiKVxuICAgICAgKSB7XG4gICAgICAgIC8vIEFuIG9ycGhhbmVkIGF0dHJpYnV0ZSBkZXNjcmlwdG9yIChpdHMgJ3ZhbHVlJyByZXNvbHZlZCB0b1xuICAgICAgICAvLyBgdW5kZWZpbmVkYCkgY2FycmllcyBvbmx5IGludGVybmFsIG1ldGFkYXRhIGF0IHRoaXMgcG9pbnQgLSBvbWl0XG4gICAgICAgIC8vIHRoZSBhdHRyaWJ1dGUgZW50aXJlbHksIGV4YWN0bHkgYXMgaWYgaXQgaGFkIG5ldmVyIGJlZW4gc2V0LFxuICAgICAgICAvLyBpbnN0ZWFkIG9mIGxlYWtpbmcgdGhhdCBtZXRhZGF0YSBpbnRvIHRoZSBIQ0wgb3V0cHV0IHZpYVxuICAgICAgICAvLyByZW5kZXJGdXp6eUpzb25FeHByZXNzaW9uKCkuIFNlZSBpc09ycGhhbmVkQXR0cmlidXRlRGVzY3JpcHRvcigpLlxuICAgICAgICBpZiAoaXNPcnBoYW5lZEF0dHJpYnV0ZURlc2NyaXB0b3IodikpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhQmxvY2tzLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IHtcbiR7cmVuZGVyU2ltcGxlQXR0cmlidXRlcyh2KX1cbn1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtuYW1lfSA9ICR7cmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbih2KX1gO1xuICAgICAgfSBlbHNlIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gUmVmZXJlbmNpbmcgYm90aCBpc0Jsb2NrIGFuZCBpc19ibG9jaywgYmVjYXVzZSBzb21ldGltZXMgd2UgcGFzcyB0aHJvdWdoIGEgc25ha2UgY2FzZSBmaWx0ZXJcbiAgICAgIC8vIHdpdGhpbiBhdHRyaWJ1dGVzLlxuICAgICAgY29uc3Qge1xuICAgICAgICBkeW5hbWljLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgaXNCbG9jayxcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZSxcbiAgICAgICAgaXNfYmxvY2ssXG4gICAgICAgIHN0b3JhZ2VfY2xhc3NfdHlwZSxcbiAgICAgIH0gPSB2IGFzIGFueTtcbiAgICAgIGNvbnN0IGJsb2NrID0gaXNCbG9jayB8fCBpc19ibG9jayB8fCBtZXRhQmxvY2tzLmluY2x1ZGVzKG5hbWUpO1xuICAgICAgY29uc3QgY2xhc3NUeXBlID0gc3RvcmFnZUNsYXNzVHlwZSB8fCBzdG9yYWdlX2NsYXNzX3R5cGU7XG5cbiAgICAgIGlmIChkeW5hbWljKSB7XG4gICAgICAgIHJldHVybiByZW5kZXJEeW5hbWljQmxvY2tzKHtcbiAgICAgICAgICBbbmFtZV06IGR5bmFtaWMudmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gU2hvcnQgY2lyY3VpdCB0eXBlIGNoZWNraW5nIGlmIHZhbHVlIGlzIGFuIGV4cHJlc3Npb25cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUuaW5jbHVkZXMoXCIke1wiKSkge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3JlbmRlclN0cmluZyh2YWx1ZSl9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKGJsb2NrICYmIHR5cGUgIT09IFwibGlzdFwiICYmIHR5cGUgIT09IFwic2V0XCIpIHtcbiAgICAgICAgcmV0dXJuIGAke25hbWV9IHtcbiR7cmVuZGVyQXR0cmlidXRlcyh2YWx1ZSl9XG59YDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09PSBcImxpc3RcIiB8fCB0eXBlID09PSBcInNldFwiKSB7XG4gICAgICAgIGlmIChibG9jaykge1xuICAgICAgICAgIHJldHVybiByZW5kZXJMaXN0KHYsIG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtuYW1lfSA9ICR7cmVuZGVyTGlzdCh2KX1gO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09IFwibWFwXCIpIHtcbiAgICAgICAgcmV0dXJuIGAke25hbWV9ID0gJHtyZW5kZXJNYXAodmFsdWUpfWA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSBcInNpbXBsZVwiKSB7XG4gICAgICAgIGlmIChjbGFzc1R5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3JlbmRlclN0cmluZyh2YWx1ZSl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xhc3NUeXBlID09PSBcIm51bWJlclwiIHx8IGNsYXNzVHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3ZhbHVlfWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3Qgc3VyZSB3aHkgd2UncmUgaGVyZSwgYnV0IHRoZXJlJ3MgZWl0aGVyIGEgYnVnIGluIHRoZSBwcm92aWRlclxuICAgICAgICAvLyBvciB3ZSBoYXZlIHNraXBwZWQgdGhlIGF0dHJpYnV0ZSB0byByZWR1Y2UgdGhlIHNpemUgb2Ygb3VyIHByb3ZpZGVyXG4gICAgICAgIC8vIEluIGVpdGhlciBjYXNlLCB3ZSBzaG91bGQgdHJ5IHRvIG5vdCBvdXRwdXQgW29iamVjdCBPYmplY3RdIGhlcmVcbiAgICAgICAgLy8gYW5kIHRyeSBhIGJlc3QgYXBwcm94aW1hdGlvbi4gVGhvdWdoLCBpdCB3b3VsZCBub3Qgd29yayBmb3JcbiAgICAgICAgLy8gYmxvY2tzXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICByZXR1cm4gYFxuIyBXYXJuaW5nOiBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZSBpcyBvZiBhbiB1bmV4cGVjdGVkIHR5cGUuIEVpdGhlciB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIHRoZSBwcm92aWRlclxuIyBvciBDREtUTiBoYXMgY2hvc2VuIHRvIHNraXAgZ2VuZXJhdGluZyBhIGRldGFpbGVkIHR5cGUgZm9yIHRoaXMgYmVjYXVzZSBpdCBpbmNyZWFzZXMgdGhlIHNpemUgb2YgdGhlIHByb3ZpZGVyIGxpYnJhcnkgc2lnbmlmaWNhbnRseS4gXG4jIFBsZWFzZSBjaGVjayBpZiB0aGlzIHJlc291cmNlIGlzIGluY2x1ZGVkIGluIG91ciBza2lwIGxpc3Q6IFxuIyBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1jZGsvYmxvYi8xZmI4NTg4MDk1YTU1ZDQ3NWRjNGJlMjg4ODJlYzRmNDIwMDZlYzhkL3BhY2thZ2VzLyU0MGNka3RmL3Byb3ZpZGVyLWdlbmVyYXRvci9saWIvZ2V0L2dlbmVyYXRvci9za2lwcGVkLWF0dHJpYnV0ZXMudHNcbiMgYW5kIGlmIG5vdCwgcGxlYXNlIGNoZWNrIHdpdGggdGhlIHByb3ZpZGVyIGF1dGhvcnMgdG8gc2VlIGlmIHRoZSBwcm92aWRlciBzY2hlbWEgaXMgYWNjdXJhdGUuXG4jIFxuIyBXZSB1bmRlcnN0YW5kIHRoaXMgaXMgbm90IGlkZWFsLCBzbyB3ZSBzdWdnZXN0IHVzaW5nIEpTT04gc3ludGhlc2lzIGluc3RlYWQgb2YgSENMIHN5bnRoZXNpcyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGNhc2UuXG5cbiR7bmFtZX0gPSAke3JlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24odmFsdWUpfVxuYDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gXCJhbnlcIikge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3JlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24odmFsdWUpfWA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSBcInJlZmVyZW5jZVwiKSB7XG4gICAgICAgIHJldHVybiBgJHtuYW1lfSA9ICR7dmFsdWV9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke25hbWV9ID0gJHt2YWx1ZX1gO1xuICAgIH0pXG4gICAgLmZpbHRlcigodikgPT4gdiAhPT0gdW5kZWZpbmVkKVxuICAgIC5qb2luKFwiXFxuXCIpO1xufVxuIl19
|
|
710
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hjbC9yZW5kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE4REEsNENBNkNDO0FBS0QsZ0NBZ0RDO0FBS0QsMENBU0M7QUFLRCw4QkFjQztBQUtELHdDQXNCQztBQUtELHdDQXFDQztBQUtELDRDQTJCQztBQUtELDBDQTJCQztBQUtELHdEQXlCQztBQUtELGtEQXFCQztBQUtELHdDQW1CQztBQUtELG9DQWdCQztBQUtELG9DQU9DO0FBS0Qsb0NBb0JDO0FBS0Qsd0NBT0M7QUFLRCxrQ0FRQztBQUtELG9DQVFDO0FBS0QsMENBMEJDO0FBS0Qsa0NBSUM7QUF5RUQsd0RBV0M7QUE0Q0QsNENBOEhDO0FBNXhCRDs7O0dBR0c7QUFDSCwyREFBc0Q7QUFDdEQsMkNBQStDO0FBRS9DOztHQUVHO0FBQ0gsU0FBUyxZQUFZLENBQUMsR0FBVztJQUMvQixtREFBbUQ7SUFDbkQsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDdEIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLDhCQUE4QixDQUFDLEdBQVc7SUFDakQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELHdFQUF3RTtJQUN4RSx5RUFBeUU7SUFDekUsdUVBQXVFO0lBQ3ZFLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNwQixDQUFDO0lBQ0QsT0FBTyxJQUFBLG1DQUFlLEVBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxD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Ozs7Ozs7RUFTZixJQUFJLE1BQU0seUJBQXlCLENBQUMsS0FBSyxDQUFDO0NBQzNDLENBQUM7WUFDTSxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ25CLE9BQU8sR0FBRyxJQUFJLE1BQU0seUJBQXlCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6RCxDQUFDO1FBRUQsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDekIsT0FBTyxHQUFHLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBRUQsT0FBTyxHQUFHLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQztJQUM5QixDQUFDLENBQUM7U0FDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUM7U0FDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5pbXBvcnQgeyBxdW90ZWRTdHJpbmdLZXkgfSBmcm9tIFwiLi9xdW90ZWQtc3RyaW5nLWtleVwiO1xuaW1wb3J0IHsgVG9rZW5pemF0aW9uIH0gZnJvbSBcIi4uL3Rva2Vucy90b2tlblwiO1xuXG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVF1b3RlcyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIERvbid0IGF0dGVtcHQgdG8gZXNjYXBlIGlmIHdlIGhhdmUgYW4gZXhwcmVzc2lvblxuICBpZiAoc3RyLm1hdGNoKC9cXCRcXHsvKSkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oPzwhXFxcXClcIi9nLCAnXFxcXFwiJyk7XG59XG5cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gd3JhcElkZW50aWZpZXJJblF1b3Rlc0lmTmVlZGVkKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCEvKF5cXGQpfFteQS1aYS16MC05Xy1dLy50ZXN0KGtleSkpIHtcbiAgICByZXR1cm4ga2V5O1xuICB9XG4gIC8vIEEga2V5IGNvbnRhaW5pbmcgYCR7YCBtYXkgYmUgYSByZXNvbHZlZCB0b2tlbiByZWZlcmVuY2UgcmF0aGVyIHRoYW4gYVxuICAvLyBsaXRlcmFsIHN0cmluZywgc28gaXRzIGAkey4uLn1gIGJvZHkgaXMgZXhwcmVzc2lvbiBzeW50YXgsIG5vdCB0ZXh0IHRvXG4gIC8vIGVzY2FwZS4gTGVhdmUgaXQgb24gdGhlIG9sZCAodW5lc2NhcGVkKSBwYXRoIHRvIGF2b2lkIGNvcnJ1cHRpbmcgaXQuXG4gIGlmIChrZXkuaW5jbHVkZXMoXCIke1wiKSkge1xuICAgIHJldHVybiBgXCIke2tleX1cImA7XG4gIH1cbiAgcmV0dXJuIHF1b3RlZFN0cmluZ0tleShrZXksIHRydWUpO1xufVxuXG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0cmluZyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChzdHIgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gYFwiXCJgO1xuICB9XG5cbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHIgIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIlVuYWJsZSB0byBwcm9jZXNzIGF0dHJpYnV0ZSB0aGF0IHNob3VsZCBoYXZlIGJlZW4gYSBzdHJpbmcsIGJ1dCBpc24ndFwiLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBsaW5lcyA9IHN0ci5zcGxpdCgvXFxyXFxufFtcXG5cXHJdLyk7XG5cbiAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGBcIiR7ZXNjYXBlUXVvdGVzKHN0cil9XCJgO1xuXG4gIHJldHVybiBgPDxFT0ZcXG4ke2xpbmVzLmpvaW4oXCJcXG5cIil9XFxuRU9GYDtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5Gb3JNZXRhZGF0YShibG9jazogYW55KTogYW55IHtcbiAgY29uc3QgcmVzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gIGlmICh0eXBlb2YgYmxvY2sgIT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoYmxvY2spKSB7XG4gICAgcmV0dXJuIGJsb2NrO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYmxvY2spKSB7XG4gICAgcmV0dXJuIGJsb2NrLm1hcCgoaSkgPT4gY2xlYW5Gb3JNZXRhZGF0YShpKSk7XG4gIH1cblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYmxvY2spO1xuXG4gIGlmIChrZXlzLmluY2x1ZGVzKFwidmFsdWVcIikpIHtcbiAgICByZXR1cm4gY2xlYW5Gb3JNZXRhZGF0YShibG9jay52YWx1ZSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBibG9ja1trZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBhIHJlc29sdmFibGUgd2UgZG9uJ3Qgd2FudCB0byByZWN1cnNlIGludG8gaXRcbiAgICAgIGlmIChUb2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHZhbHVlKSkge1xuICAgICAgICByZXNba2V5XSA9IHt9O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcmVzW2tleV0gPSBjbGVhbkZvck1ldGFkYXRhKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHZhbHVlICE9IG51bGwgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXNba2V5XSkpIHtcbiAgICAgICAgcmVzW2tleV0gPSBbLi4ucmVzW2tleV0sIC4uLnZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgcmVzW2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckxpc3QodjogYW55LCBuYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgeyBpc0Jsb2NrLCBpc19ibG9jaywgdmFsdWUsIHN0b3JhZ2VfY2xhc3NfdHlwZSwgc3RvcmFnZUNsYXNzVHlwZSB9ID0gdjtcbiAgY29uc3QgYmxvY2sgPSBpc0Jsb2NrIHx8IGlzX2Jsb2NrO1xuICBjb25zdCBjbGFzc1R5cGUgPSBzdG9yYWdlQ2xhc3NUeXBlIHx8IHN0b3JhZ2VfY2xhc3NfdHlwZTtcblxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIC8vIHRoaXMgY291bGQgYmUgYW4gZXhwcmVzc2lvbiwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlXG4gICAgcmV0dXJuIHJlbmRlclN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICBpZiAobmFtZSkge1xuICAgIGlmIChibG9jaykge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0ge2AgKyBgXFxuJHtyZW5kZXJBdHRyaWJ1dGVzKHZhbHVlKX1cXG59YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIC5tYXAoKHY6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSB7YCArIGBcXG4ke3JlbmRlckF0dHJpYnV0ZXModil9XFxufWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBgJHtuYW1lfSA9ICR7cmVuZGVyTGlzdFZhbHVlKHZhbHVlLCBjbGFzc1R5cGUpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke25hbWV9ID0gW1xuJHt2YWx1ZS5tYXAoKHY6IGFueSkgPT4gcmVuZGVyTGlzdFZhbHVlKHYsIGNsYXNzVHlwZSkpLmpvaW4oXCIsXFxuXCIpfVxuXWA7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gQSBsaXN0IHR5cGUgb2Ygb25seSBhIHNpbmdsZSBpdGVtXG4gICAgcmV0dXJuIHJlbmRlckxpc3RWYWx1ZSh2YWx1ZSwgY2xhc3NUeXBlKTtcbiAgfVxuXG4gIGlmIChibG9jaykge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoKHY6IGFueSkgPT4gcmVuZGVyTGlzdFZhbHVlKHYsIGNsYXNzVHlwZSkpLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gYFtcbiR7dmFsdWUubWFwKCh2OiBhbnkpID0+IHJlbmRlckxpc3RWYWx1ZSh2LCBjbGFzc1R5cGUpKS5qb2luKFwiLFxcblwiKX1cbl1gO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJMaXN0VmFsdWUodmFsdWU6IGFueSwgc3RvcmFnZUNsYXNzVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHN0b3JhZ2VDbGFzc1R5cGUgPT09IFwic3RyaW5nTGlzdFwiKSB7XG4gICAgcmV0dXJuIHJlbmRlclN0cmluZyh2YWx1ZSk7XG4gIH1cbiAgaWYgKHN0b3JhZ2VDbGFzc1R5cGUgPT09IFwibnVtYmVyTGlzdFwiIHx8IHN0b3JhZ2VDbGFzc1R5cGUgPT09IFwiYm9vbGVhbkxpc3RcIikge1xuICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlckJsb2NrKHZhbHVlLCBzdG9yYWdlQ2xhc3NUeXBlKTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTWFwKG1hcDogYW55KTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBtYXAgPT09IFwic3RyaW5nXCIpIHtcbiAgICAvLyB0aGlzIGNvdWxkIGJlIGFuIGV4cHJlc3Npb24sIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZVxuICAgIHJldHVybiBgXCIke2VzY2FwZVF1b3RlcyhtYXApfVwiYDtcbiAgfVxuICByZXR1cm4gYHtcbiR7T2JqZWN0LmVudHJpZXMobWFwKVxuICAubWFwKChbaywgdl0pID0+IHtcbiAgICBjb25zdCB3cmFwcGVkS2V5ID0gd3JhcElkZW50aWZpZXJJblF1b3Rlc0lmTmVlZGVkKGspO1xuXG4gICAgcmV0dXJuIGAke3dyYXBwZWRLZXl9ID0gJHtyZW5kZXJNYXBWYWx1ZSh2KX1gO1xuICB9KVxuICAuam9pbihcIlxcblwiKX1cbn1gO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNYXBWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiByZW5kZXJTdHJpbmcodmFsdWUpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHJlbmRlckxpc3RWYWx1ZSh2YWx1ZSwgXCJ1bmtub3duU3RvcmFnZUNsYXNzXCIpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlck1hcCh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gYCR7dmFsdWV9YDtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyUmVzb3VyY2UocmVzb3VyY2U6IGFueSkge1xuICBjb25zdCByZXNvdXJjZVR5cGUgPSBPYmplY3Qua2V5cyhyZXNvdXJjZSlbMF07XG4gIGNvbnN0IHJlc291cmNlc1dpdGhUeXBlID0gcmVzb3VyY2VbcmVzb3VyY2VUeXBlXTtcbiAgY29uc3QgcmVzb3VyY2VOYW1lID0gT2JqZWN0LmtleXMocmVzb3VyY2VzV2l0aFR5cGUpWzBdO1xuICBjb25zdCByZXNvdXJjZUF0dHJpYnV0ZXMgPSByZXNvdXJjZXNXaXRoVHlwZVtyZXNvdXJjZU5hbWVdO1xuXG4gIGlmIChyZXNvdXJjZUF0dHJpYnV0ZXMuY29ubmVjdGlvbikge1xuICAgIHJlc291cmNlQXR0cmlidXRlcy5jb25uZWN0aW9uID0ge1xuICAgICAgdmFsdWU6IHJlc291cmNlQXR0cmlidXRlcy5jb25uZWN0aW9uLFxuICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgeyBwcm92aXNpb25lciwgZHluYW1pYywgLi4ub3RoZXJBdHRycyB9ID0gcmVzb3VyY2VBdHRyaWJ1dGVzO1xuXG4gIGNvbnN0IGhjbCA9IFtgcmVzb3VyY2UgXCIke3Jlc291cmNlVHlwZX1cIiBcIiR7cmVzb3VyY2VOYW1lfVwiIHtgXTtcblxuICBjb25zdCBhdHRycyA9IHJlbmRlckF0dHJpYnV0ZXMob3RoZXJBdHRycyk7XG5cbiAgaWYgKGF0dHJzKSBoY2wucHVzaChhdHRycyk7XG4gIGlmIChwcm92aXNpb25lcikgaGNsLnB1c2gocmVuZGVyUHJvdmlzaW9uZXJCbG9jayhwcm92aXNpb25lcikpO1xuICBpZiAoZHluYW1pYykgaGNsLnB1c2goLi4ucmVuZGVyRHluYW1pY0Jsb2NrcyhkeW5hbWljKSk7XG5cbiAgaGNsLnB1c2goXCJ9XCIpO1xuXG4gIHJldHVybiB7XG4gICAgaGNsOiBoY2wuam9pbihcIlxcblwiKSxcbiAgICBtZXRhZGF0YToge1xuICAgICAgcmVzb3VyY2U6IHtcbiAgICAgICAgW3Jlc291cmNlVHlwZV06IHtcbiAgICAgICAgICBbcmVzb3VyY2VOYW1lXToge1xuICAgICAgICAgICAgXCIvL1wiOiByZXNvdXJjZUF0dHJpYnV0ZXNbXCIvL1wiXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJEYXRhc291cmNlKGRhdGFTb3VyY2U6IGFueSkge1xuICBjb25zdCBkYXRhU291cmNlVHlwZSA9IE9iamVjdC5rZXlzKGRhdGFTb3VyY2UpWzBdO1xuICBjb25zdCBkYXRhU291cmNlc1dpdGhUeXBlID0gZGF0YVNvdXJjZVtkYXRhU291cmNlVHlwZV07XG4gIGNvbnN0IGRhdGFTb3VyY2VOYW1lID0gT2JqZWN0LmtleXMoZGF0YVNvdXJjZXNXaXRoVHlwZSlbMF07XG4gIGNvbnN0IGRhdGFTb3VyY2VBdHRyaWJ1dGVzID0gZGF0YVNvdXJjZXNXaXRoVHlwZVtkYXRhU291cmNlTmFtZV07XG5cbiAgY29uc3QgeyBkeW5hbWljLCAuLi5vdGhlckF0dHJzIH0gPSBkYXRhU291cmNlQXR0cmlidXRlcztcblxuICBjb25zdCBoY2wgPSBbYGRhdGEgXCIke2RhdGFTb3VyY2VUeXBlfVwiIFwiJHtkYXRhU291cmNlTmFtZX1cIiB7YF07XG5cbiAgY29uc3QgYXR0cnMgPSByZW5kZXJBdHRyaWJ1dGVzKG90aGVyQXR0cnMpO1xuICBpZiAoYXR0cnMpIGhjbC5wdXNoKGF0dHJzKTtcbiAgaWYgKGR5bmFtaWMpIGhjbC5wdXNoKC4uLnJlbmRlckR5bmFtaWNCbG9ja3MoZHluYW1pYykpO1xuICBoY2wucHVzaChcIn1cIik7XG5cbiAgcmV0dXJuIHtcbiAgICBoY2w6IGhjbC5qb2luKFwiXFxuXCIpLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIFtkYXRhU291cmNlVHlwZV06IHtcbiAgICAgICAgICBbZGF0YVNvdXJjZU5hbWVdOiB7XG4gICAgICAgICAgICBcIi8vXCI6IGRhdGFTb3VyY2VBdHRyaWJ1dGVzW1wiLy9cIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRXBoZW1lcmFsKGVwaGVtZXJhbDogYW55KSB7XG4gIGNvbnN0IGVwaGVtZXJhbFR5cGUgPSBPYmplY3Qua2V5cyhlcGhlbWVyYWwpWzBdO1xuICBjb25zdCBlcGhlbWVyYWxzV2l0aFR5cGUgPSBlcGhlbWVyYWxbZXBoZW1lcmFsVHlwZV07XG4gIGNvbnN0IGVwaGVtZXJhbE5hbWUgPSBPYmplY3Qua2V5cyhlcGhlbWVyYWxzV2l0aFR5cGUpWzBdO1xuICBjb25zdCBlcGhlbWVyYWxBdHRyaWJ1dGVzID0gZXBoZW1lcmFsc1dpdGhUeXBlW2VwaGVtZXJhbE5hbWVdO1xuXG4gIGNvbnN0IHsgZHluYW1pYywgLi4ub3RoZXJBdHRycyB9ID0gZXBoZW1lcmFsQXR0cmlidXRlcztcblxuICBjb25zdCBoY2wgPSBbYGVwaGVtZXJhbCBcIiR7ZXBoZW1lcmFsVHlwZX1cIiBcIiR7ZXBoZW1lcmFsTmFtZX1cIiB7YF07XG5cbiAgY29uc3QgYXR0cnMgPSByZW5kZXJBdHRyaWJ1dGVzKG90aGVyQXR0cnMpO1xuICBpZiAoYXR0cnMpIGhjbC5wdXNoKGF0dHJzKTtcbiAgaWYgKGR5bmFtaWMpIGhjbC5wdXNoKC4uLnJlbmRlckR5bmFtaWNCbG9ja3MoZHluYW1pYykpO1xuICBoY2wucHVzaChcIn1cIik7XG5cbiAgcmV0dXJuIHtcbiAgICBoY2w6IGhjbC5qb2luKFwiXFxuXCIpLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICBlcGhlbWVyYWw6IHtcbiAgICAgICAgW2VwaGVtZXJhbFR5cGVdOiB7XG4gICAgICAgICAgW2VwaGVtZXJhbE5hbWVdOiB7XG4gICAgICAgICAgICBcIi8vXCI6IGVwaGVtZXJhbEF0dHJpYnV0ZXNbXCIvL1wiXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJQcm92aXNpb25lckJsb2NrKHByb3Zpc2lvbmVyczogYW55KSB7XG4gIHJldHVybiBwcm92aXNpb25lcnNcbiAgICAubWFwKChwcm92aXNpb25lcjogYW55KSA9PiB7XG4gICAgICBjb25zdCBwcm92aXNpb25lclR5cGUgPSBPYmplY3Qua2V5cyhwcm92aXNpb25lcilbMF07XG4gICAgICBjb25zdCBwcm92aXNpb25lckF0dHJzID0gcHJvdmlzaW9uZXJbcHJvdmlzaW9uZXJUeXBlXTtcblxuICAgICAgaWYgKHByb3Zpc2lvbmVyQXR0cnMuY29ubmVjdGlvbikge1xuICAgICAgICBwcm92aXNpb25lckF0dHJzLmNvbm5lY3Rpb24gPSB7XG4gICAgICAgICAgdmFsdWU6IHByb3Zpc2lvbmVyQXR0cnMuY29ubmVjdGlvbixcbiAgICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGR5bmFtaWMsIC4uLm90aGVyQXR0cnMgfSA9IHByb3Zpc2lvbmVyQXR0cnM7XG5cbiAgICAgIGNvbnN0IGhjbCA9IFtgcHJvdmlzaW9uZXIgXCIke3Byb3Zpc2lvbmVyVHlwZX1cIiB7YF07XG5cbiAgICAgIGNvbnN0IGF0dHJzID0gcmVuZGVyQXR0cmlidXRlcyhvdGhlckF0dHJzLnZhbHVlIHx8IG90aGVyQXR0cnMpO1xuICAgICAgaWYgKGF0dHJzKSBoY2wucHVzaChhdHRycyk7XG4gICAgICBpZiAoZHluYW1pYykgaGNsLnB1c2goLi4ucmVuZGVyRHluYW1pY0Jsb2NrcyhkeW5hbWljKSk7XG4gICAgICBoY2wucHVzaChcIn1cIik7XG5cbiAgICAgIHJldHVybiBoY2wuam9pbihcIlxcblwiKTtcbiAgICB9KVxuICAgIC5qb2luKFwiXFxuXFxuXCIpO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJEeW5hbWljQmxvY2tzKGR5bmFtaWM6IGFueSkge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZHluYW1pYykubWFwKFxuICAgIChbZHluYW1pY05hbWUsIGR5bmFtaWNBdHRyc106IFtzdHJpbmcsIGFueV0pID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IFtgZHluYW1pYyBcIiR7ZHluYW1pY05hbWV9XCIge2BdO1xuICAgICAgcmVzLnB1c2goXG4gICAgICAgIGBmb3JfZWFjaCA9ICR7cmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbihkeW5hbWljQXR0cnM/LmZvcl9lYWNoKX1gLFxuICAgICAgKTtcbiAgICAgIGlmIChkeW5hbWljQXR0cnM/Lml0ZXJhdG9yKSB7XG4gICAgICAgIHJlcy5wdXNoKGBpdGVyYXRvciA9ICR7ZHluYW1pY0F0dHJzPy5pdGVyYXRvcn1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChkeW5hbWljQXR0cnM/LmxhYmVscykge1xuICAgICAgICByZXMucHVzaChgbGFiZWxzID0gJHtyZW5kZXJGdXp6eUpzb25FeHByZXNzaW9uKGR5bmFtaWNBdHRycz8ubGFiZWxzKX1gKTtcbiAgICAgIH1cbiAgICAgIHJlcy5wdXNoKGBjb250ZW50IHtcbiAgJHtyZW5kZXJBdHRyaWJ1dGVzKGR5bmFtaWNBdHRycy5jb250ZW50KX1cbiAgfWApO1xuICAgICAgcmVzLnB1c2goYH1gKTtcblxuICAgICAgcmV0dXJuIHJlcy5qb2luKFwiXFxuXCIpO1xuICAgIH0sXG4gICk7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclByb3ZpZGVyKHByb3ZpZGVyOiBhbnkpIHtcbiAgY29uc3QgcHJvdmlkZXJOYW1lID0gT2JqZWN0LmtleXMocHJvdmlkZXIpWzBdO1xuICBjb25zdCBwcm92aWRlckF0dHJpYnV0ZXMgPSBwcm92aWRlcltwcm92aWRlck5hbWVdO1xuXG4gIHJldHVybiBwcm92aWRlckF0dHJpYnV0ZXNcbiAgICAubWFwKChwcm92aWRlckluc3RhbmNlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHsgZHluYW1pYywgLi4ub3RoZXJBdHRycyB9ID0gcHJvdmlkZXJJbnN0YW5jZTtcblxuICAgICAgY29uc3QgaGNsID0gW2Bwcm92aWRlciBcIiR7cHJvdmlkZXJOYW1lfVwiIHtgXTtcblxuICAgICAgY29uc3QgYXR0cnMgPSByZW5kZXJBdHRyaWJ1dGVzKG90aGVyQXR0cnMpO1xuICAgICAgaWYgKGF0dHJzKSBoY2wucHVzaChhdHRycyk7XG4gICAgICBpZiAoZHluYW1pYykgaGNsLnB1c2goLi4ucmVuZGVyRHluYW1pY0Jsb2NrcyhkeW5hbWljKSk7XG5cbiAgICAgIGhjbC5wdXNoKFwifVwiKTtcblxuICAgICAgcmV0dXJuIGhjbC5qb2luKFwiXFxuXCIpO1xuICAgIH0pXG4gICAgLmpvaW4oXCJcXG5cXG5cIik7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1vZHVsZShtb2R1bGU6IGFueSkge1xuICBjb25zdCBtb2R1bGVOYW1lID0gT2JqZWN0LmtleXMobW9kdWxlKVswXTtcbiAgY29uc3QgbW9kdWxlQXR0cmlidXRlcyA9IG1vZHVsZVttb2R1bGVOYW1lXTtcblxuICByZXR1cm4ge1xuICAgIGhjbDogYG1vZHVsZSBcIiR7bW9kdWxlTmFtZX1cIiB7XG4ke3JlbmRlckF0dHJpYnV0ZXMobW9kdWxlQXR0cmlidXRlcyl9XG59YCxcbiAgICBtZXRhZGF0YToge1xuICAgICAgbW9kdWxlOiB7XG4gICAgICAgIFttb2R1bGVOYW1lXToge1xuICAgICAgICAgIFwiLy9cIjogbW9kdWxlQXR0cmlidXRlc1tcIi8vXCJdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJPdXRwdXQob3V0cHV0OiBhbnkpIHtcbiAgY29uc3Qgb3V0cHV0TmFtZSA9IE9iamVjdC5rZXlzKG91dHB1dClbMF07XG4gIGNvbnN0IG91dHB1dEF0dHJpYnV0ZXMgPSBvdXRwdXRbb3V0cHV0TmFtZV07XG5cbiAgcmV0dXJuIGBvdXRwdXQgXCIke291dHB1dE5hbWV9XCIge1xuJHtyZW5kZXJBdHRyaWJ1dGVzKG91dHB1dEF0dHJpYnV0ZXMpfVxufWA7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckxvY2Fscyhsb2NhbHM6IGFueSkge1xuICBpZiAoIWxvY2Fscykge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3QgbG9jYWxOYW1lcyA9IE9iamVjdC5rZXlzKGxvY2Fscyk7XG5cbiAgaWYgKGxvY2FsTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICByZXR1cm4gYGxvY2FscyB7XG4gICAgJHtsb2NhbE5hbWVzXG4gICAgICAuZmlsdGVyKChuYW1lKSA9PiAhIWxvY2Fsc1tuYW1lXS52YWx1ZSlcbiAgICAgIC5tYXAoKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24obG9jYWxzW25hbWVdLnZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGAke25hbWV9ID0gJHt2YWx1ZX1gO1xuICAgICAgfSlcbiAgICAgIC5qb2luKFwiXFxuXCIpfVxufWA7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclZhcmlhYmxlKHZhcmlhYmxlOiBhbnkpIHtcbiAgY29uc3QgdmFyaWFibGVOYW1lID0gT2JqZWN0LmtleXModmFyaWFibGUpWzBdO1xuICBjb25zdCB2YXJpYWJsZUF0dHJpYnV0ZXMgPSB2YXJpYWJsZVt2YXJpYWJsZU5hbWVdO1xuXG4gIHJldHVybiBgdmFyaWFibGUgXCIke3ZhcmlhYmxlTmFtZX1cIiB7XG4ke3JlbmRlckF0dHJpYnV0ZXModmFyaWFibGVBdHRyaWJ1dGVzKX1cbn1gO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNb3ZlZChtb3ZlOiBhbnkpIHtcbiAgY29uc3QgbW92ZWRCbG9ja3MgPSBtb3ZlLm1hcCgobW92ZUJsb2NrOiBhbnkpID0+IHtcbiAgICByZXR1cm4gYG1vdmVkIHtcbiR7cmVuZGVyQXR0cmlidXRlcyhtb3ZlQmxvY2spfVxufWA7XG4gIH0pO1xuXG4gIHJldHVybiBtb3ZlZEJsb2Nrcy5qb2luKFwiXFxuXCIpO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJJbXBvcnQoaW1wb3J0czogYW55KSB7XG4gIGNvbnN0IGltcG9ydEJsb2NrcyA9IGltcG9ydHMubWFwKChpbXBvcnRCbG9jazogYW55KSA9PiB7XG4gICAgcmV0dXJuIGBpbXBvcnQge1xuJHtyZW5kZXJBdHRyaWJ1dGVzKGltcG9ydEJsb2NrKX1cbn1gO1xuICB9KTtcblxuICByZXR1cm4gaW1wb3J0QmxvY2tzLmpvaW4oXCJcXG5cIik7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclRlcnJhZm9ybSh0ZXJyYWZvcm06IGFueSkge1xuICBjb25zdCBibG9ja0F0dHJpYnV0ZXMgPSBbXCJyZXF1aXJlZF9wcm92aWRlcnNcIiwgXCJiYWNrZW5kXCIsIFwiY2xvdWRcIl07XG4gIGNvbnN0IHJlcXVpcmVkUHJvdmlkZXJzID0gYHJlcXVpcmVkX3Byb3ZpZGVycyB7XG4ke3JlbmRlclNpbXBsZUF0dHJpYnV0ZXModGVycmFmb3JtLnJlcXVpcmVkX3Byb3ZpZGVycyl9XG59YDtcblxuICBjb25zdCBiYWNrZW5kcyA9IE9iamVjdC5rZXlzKHRlcnJhZm9ybS5iYWNrZW5kIHx8IHt9KS5tYXAoKGJhY2tlbmROYW1lKSA9PiB7XG4gICAgcmV0dXJuIGBiYWNrZW5kIFwiJHtiYWNrZW5kTmFtZX1cIiB7XG4ke3JlbmRlckF0dHJpYnV0ZXModGVycmFmb3JtLmJhY2tlbmRbYmFja2VuZE5hbWVdKX1cbn1gO1xuICB9KTtcblxuICBjb25zdCBjbG91ZEJhY2tlbmQgPSB0ZXJyYWZvcm0uY2xvdWRcbiAgICA/IGBjbG91ZCB7XG4ke3JlbmRlckF0dHJpYnV0ZXModGVycmFmb3JtLmNsb3VkKX1cbn1gXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgb3RoZXJBdHRyaWJ1dGVzID0gT2JqZWN0LmtleXModGVycmFmb3JtKS5maWx0ZXIoXG4gICAgKGtleSkgPT4gIWJsb2NrQXR0cmlidXRlcy5pbmNsdWRlcyhrZXkpLFxuICApO1xuICByZXR1cm4gYHRlcnJhZm9ybSB7XG4ke3JlcXVpcmVkUHJvdmlkZXJzfVxuJHtbLi4uYmFja2VuZHMsIGNsb3VkQmFja2VuZF0uam9pbihcIlxcblwiKX1cbiR7cmVuZGVyU2ltcGxlQXR0cmlidXRlcyhvdGhlckF0dHJpYnV0ZXMpfVxufWA7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckJsb2NrKGJsb2NrOiBhbnksIF9zdG9yYWdlQ2xhc3NUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYHtcbiR7cmVuZGVyQXR0cmlidXRlcyhibG9jayl9XG59YDtcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiByZW5kZXJGdXp6eUpzb25PYmplY3QoanNvbk9iamVjdDogYW55KTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICBcIntcIixcbiAgICAuLi5PYmplY3QuZW50cmllcyhqc29uT2JqZWN0KS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICAgIGNvbnN0IHdyYXBwZWRLZXkgPSB3cmFwSWRlbnRpZmllckluUXVvdGVzSWZOZWVkZWQobmFtZSk7XG4gICAgICByZXR1cm4gYCR7d3JhcHBlZEtleX0gPSAke3JlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24odmFsdWUpfWA7XG4gICAgfSksXG4gICAgXCJ9XCIsXG4gIF0uam9pbihcIlxcblwiKTtcbn1cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gcmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbihqc29uRXhwcmVzc2lvbjogYW55KTogc3RyaW5nIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoanNvbkV4cHJlc3Npb24pKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFwiW1wiLFxuICAgICAgLi4uanNvbkV4cHJlc3Npb24ubWFwKCh2YWx1ZSkgPT4gYCR7cmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbih2YWx1ZSl9LGApLFxuICAgICAgXCJdXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBqc29uRXhwcmVzc2lvbiA9PT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiByZW5kZXJGdXp6eUpzb25PYmplY3QoanNvbkV4cHJlc3Npb24pO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBqc29uRXhwcmVzc2lvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgIGlmIChqc29uRXhwcmVzc2lvbiA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIGBcIlwiYDtcbiAgICB9XG5cbiAgICBpZiAoanNvbkV4cHJlc3Npb24uaW5jbHVkZXMoXCIke1wiKSkge1xuICAgICAgcmV0dXJuIGBcIiR7anNvbkV4cHJlc3Npb259XCJgO1xuICAgIH1cblxuICAgIGlmIChwYXJzZUludChqc29uRXhwcmVzc2lvbiwgMTApLnRvU3RyaW5nKCkgPT09IGpzb25FeHByZXNzaW9uKSB7XG4gICAgICByZXR1cm4ganNvbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKGpzb25FeHByZXNzaW9uLnN0YXJ0c1dpdGgoXCJbXCIpKSB7XG4gICAgICByZXR1cm4ganNvbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKGpzb25FeHByZXNzaW9uLnN0YXJ0c1dpdGgoXCJ7XCIpKSB7XG4gICAgICByZXR1cm4ganNvbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKGpzb25FeHByZXNzaW9uLnN0YXJ0c1dpdGgoJ1wiJykpIHtcbiAgICAgIHJldHVybiBqc29uRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gYFwiJHtlc2NhcGVRdW90ZXMoanNvbkV4cHJlc3Npb24pfVwiYDtcbiAgfVxuXG4gIGlmIChqc29uRXhwcmVzc2lvbiA9PT0gXCJ0cnVlXCIgfHwganNvbkV4cHJlc3Npb24gPT09IFwiZmFsc2VcIikge1xuICAgIHJldHVybiBqc29uRXhwcmVzc2lvbiBhcyBzdHJpbmc7XG4gIH1cblxuICBpZiAoanNvbkV4cHJlc3Npb24gPT09IFwibnVsbFwiKSB7XG4gICAgcmV0dXJuIGpzb25FeHByZXNzaW9uO1xuICB9XG5cbiAgcmV0dXJuIGAke2pzb25FeHByZXNzaW9ufWA7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclNpbXBsZUF0dHJpYnV0ZXMoYXR0cmlidXRlczogYW55KTogc3RyaW5nIHtcbiAgaWYgKGF0dHJpYnV0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpXG4gICAgLm1hcChcbiAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICBgICAke25hbWV9ID0gJHtyZW5kZXJGdXp6eUpzb25FeHByZXNzaW9uKHZhbHVlIGFzIGFueSl9YCxcbiAgICApXG4gICAgLmpvaW4oXCJcXG5cIik7XG59XG4vKipcbiAqIERldGVjdHMgYSByZXNvbHZlZC1idXQtZW1wdGllZCBhdHRyaWJ1dGUgZGVzY3JpcHRvcjogYW4gb2JqZWN0IHNoYXBlZCBsaWtlXG4gKiB3aGF0IGBBdHRyaWJ1dGVzRW1pdHRlciNlbWl0VG9IY2xUZXJyYWZvcm1gIGFsd2F5cyBlbWl0cyBmb3IgSENMIHN5bnRoZXNpc1xuICogLSBgeyB2YWx1ZSwgaXNCbG9jaywgdHlwZSwgc3RvcmFnZUNsYXNzVHlwZSB9YCAtIHRoYXQgaGFzIGxvc3QgaXRzIGB2YWx1ZWBcbiAqIGtleS5cbiAqXG4gKiBUaGUgb25seSB3YXkgYSBkZXNjcmlwdG9yIGxvc2VzIGB2YWx1ZWAgaGVyZSBpcyB0aGF0IGl0IHJlc29sdmVkIHRvXG4gKiBgdW5kZWZpbmVkYDogYHJlc29sdmUoKWAgKHNlZSBgdG9rZW5zL3ByaXZhdGUvcmVzb2x2ZS50c2ApIGRlZXAtcmVzb2x2ZXNcbiAqIGV2ZXJ5IGtleSBvZiBhIHBsYWluIG9iamVjdCBhbmQgc2lsZW50bHkgZHJvcHMgYW55IGtleSB3aG9zZSByZXNvbHZlZFxuICogdmFsdWUgaXMgYHVuZGVmaW5lZGAsIGJ1dCBvbmx5IGB2YWx1ZWAgY2FuIGV2ZXIgZG8gdGhhdCAtIGBpc0Jsb2NrYCxcbiAqIGB0eXBlYCwgYW5kIGBzdG9yYWdlQ2xhc3NUeXBlYCBhcmUgZW1pdHRlZCBhcyBsaXRlcmFsIHN0cmluZ3MvYm9vbGVhbnMgYnlcbiAqIHRoZSBnZW5lcmF0b3IsIG5ldmVyIGFzIHRva2Vucy4gU28gYW4gb2JqZWN0IGNhcnJ5aW5nIGV4YWN0bHkgdGhpc1xuICogbWV0YWRhdGEgY29tYmluYXRpb24sIHdpdGggYHZhbHVlYCBhbmQgYGR5bmFtaWNgIGJvdGggYWJzZW50LCBpcyBhbHdheXNcbiAqIHRoZSBsZWZ0b3ZlciBzaGVsbCBvZiBhIGRlc2NyaXB0b3Igd2hvc2UgdmFsdWUgdmFuaXNoZWQsIG5ldmVyIGEgZ2VudWluZVxuICogdXNlci1zdXBwbGllZCBtYXAgKHRob3NlIGRvbid0IGhhcHBlbiB0byBhbHNvIGNhcnJ5IGBpc0Jsb2NrYCArXG4gKiBgc3RvcmFnZUNsYXNzVHlwZWApLlxuICpcbiAqIFRoaXMgaXMgaW50ZW50aW9uYWxseSBub3Qgc3BlY2lmaWMgdG8gd3JpdGUtb25seSBhdHRyaWJ1dGVzOiBhIHdyaXRlLW9ubHlcbiAqIGF0dHJpYnV0ZSB3cmFwcGVkIGJ5IGBtYXJrV3JpdGVPbmx5QXR0cmlidXRlKClgIGFyb3VuZCBhIGBMYXp5YC90b2tlblxuICogcHJvZHVjZXIgdGhhdCByZXNvbHZlcyB0byBgdW5kZWZpbmVkYCBpcyBzaW1wbHkgb25lIGV4YW1wbGUgKGl0IHN1cnZpdmVzXG4gKiB0aGUgZ2VuZXJhdGVkIFwicmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXCIgcHJlLWZpbHRlciBpblxuICogYHN5bnRoZXNpemVIY2xBdHRyaWJ1dGVzKClgIGJlY2F1c2UgdGhhdCBmaWx0ZXIgb25seSBzZWVzIHRoZSBzdGlsbC1cbiAqIHVucmVzb2x2ZWQgdG9rZW4sIG5vdCB3aGF0IGl0IGxhdGVyIHJlc29sdmVzIHRvKSAtIGJ1dCBBTlkgYXR0cmlidXRlXG4gKiBkZXNjcmlwdG9yIHdob3NlIHRva2VuIHJlc29sdmVzIHRvIGB1bmRlZmluZWRgIGluIEhDTCBtb2RlIGhpdHMgdGhpcyBzYW1lXG4gKiBwYXRoIChzZWUgdGhlICMzMTMgSENMLWRlZmVjdHMgZmFtaWx5KS5cbiAqL1xuZnVuY3Rpb24gaXNPcnBoYW5lZEF0dHJpYnV0ZURlc2NyaXB0b3IodjogdW5rbm93bik6IHYgaXMgUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGlmICh0eXBlb2YgdiAhPT0gXCJvYmplY3RcIiB8fCB2ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGhhc093biA9IChrZXk6IHN0cmluZykgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHYsIGtleSk7XG4gIHJldHVybiAoXG4gICAgIWhhc093bihcInZhbHVlXCIpICYmXG4gICAgIWhhc093bihcImR5bmFtaWNcIikgJiZcbiAgICBoYXNPd24oXCJpc0Jsb2NrXCIpICYmXG4gICAgaGFzT3duKFwidHlwZVwiKSAmJlxuICAgIGhhc093bihcInN0b3JhZ2VDbGFzc1R5cGVcIilcbiAgKTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQXR0cmlidXRlcyhhdHRyaWJ1dGVzOiBhbnkpOiBzdHJpbmcge1xuICBpZiAoYXR0cmlidXRlcyA9PT0gdW5kZWZpbmVkIHx8IGF0dHJpYnV0ZXMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcylcbiAgICAubWFwKChbbmFtZSwgdl0pID0+IHtcbiAgICAgIGlmIChuYW1lID09PSBcIi8vXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1ldGFCbG9ja3MgPSBbXCJsaWZlY3ljbGVcIiwgXCJwcm92aXNpb25lclwiXTtcblxuICAgICAgLy9cbiAgICAgIC8vIFdlIG1pZ2h0IGhhdmUgc29tZSBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSB0eXBlIGluZm9ybWF0aW9uXG4gICAgICAvLyBqdXN0IHRyeSB0byBndWVzcyB0aGVtXG4gICAgICBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHYgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGAke25hbWV9ID0gJHtyZW5kZXJGdXp6eUpzb25FeHByZXNzaW9uKHYpfWA7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3Z9YDtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3JlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24odil9YDtcbiAgICAgIH0gZWxzZSBpZiAodiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSBudWxsYDtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgIXYuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKSAmJlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAgICF2Lmhhc093blByb3BlcnR5KFwiZHluYW1pY1wiKVxuICAgICAgKSB7XG4gICAgICAgIC8vIEFuIG9ycGhhbmVkIGF0dHJpYnV0ZSBkZXNjcmlwdG9yIChpdHMgJ3ZhbHVlJyByZXNvbHZlZCB0b1xuICAgICAgICAvLyBgdW5kZWZpbmVkYCkgY2FycmllcyBvbmx5IGludGVybmFsIG1ldGFkYXRhIGF0IHRoaXMgcG9pbnQgLSBvbWl0XG4gICAgICAgIC8vIHRoZSBhdHRyaWJ1dGUgZW50aXJlbHksIGV4YWN0bHkgYXMgaWYgaXQgaGFkIG5ldmVyIGJlZW4gc2V0LFxuICAgICAgICAvLyBpbnN0ZWFkIG9mIGxlYWtpbmcgdGhhdCBtZXRhZGF0YSBpbnRvIHRoZSBIQ0wgb3V0cHV0IHZpYVxuICAgICAgICAvLyByZW5kZXJGdXp6eUpzb25FeHByZXNzaW9uKCkuIFNlZSBpc09ycGhhbmVkQXR0cmlidXRlRGVzY3JpcHRvcigpLlxuICAgICAgICBpZiAoaXNPcnBoYW5lZEF0dHJpYnV0ZURlc2NyaXB0b3IodikpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhQmxvY2tzLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IHtcbiR7cmVuZGVyU2ltcGxlQXR0cmlidXRlcyh2KX1cbn1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtuYW1lfSA9ICR7cmVuZGVyRnV6enlKc29uRXhwcmVzc2lvbih2KX1gO1xuICAgICAgfSBlbHNlIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gUmVmZXJlbmNpbmcgYm90aCBpc0Jsb2NrIGFuZCBpc19ibG9jaywgYmVjYXVzZSBzb21ldGltZXMgd2UgcGFzcyB0aHJvdWdoIGEgc25ha2UgY2FzZSBmaWx0ZXJcbiAgICAgIC8vIHdpdGhpbiBhdHRyaWJ1dGVzLlxuICAgICAgY29uc3Qge1xuICAgICAgICBkeW5hbWljLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgaXNCbG9jayxcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZSxcbiAgICAgICAgaXNfYmxvY2ssXG4gICAgICAgIHN0b3JhZ2VfY2xhc3NfdHlwZSxcbiAgICAgIH0gPSB2IGFzIGFueTtcbiAgICAgIGNvbnN0IGJsb2NrID0gaXNCbG9jayB8fCBpc19ibG9jayB8fCBtZXRhQmxvY2tzLmluY2x1ZGVzKG5hbWUpO1xuICAgICAgY29uc3QgY2xhc3NUeXBlID0gc3RvcmFnZUNsYXNzVHlwZSB8fCBzdG9yYWdlX2NsYXNzX3R5cGU7XG5cbiAgICAgIGlmIChkeW5hbWljKSB7XG4gICAgICAgIHJldHVybiByZW5kZXJEeW5hbWljQmxvY2tzKHtcbiAgICAgICAgICBbbmFtZV06IGR5bmFtaWMudmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gU2hvcnQgY2lyY3VpdCB0eXBlIGNoZWNraW5nIGlmIHZhbHVlIGlzIGFuIGV4cHJlc3Npb25cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUuaW5jbHVkZXMoXCIke1wiKSkge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3JlbmRlclN0cmluZyh2YWx1ZSl9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKGJsb2NrICYmIHR5cGUgIT09IFwibGlzdFwiICYmIHR5cGUgIT09IFwic2V0XCIpIHtcbiAgICAgICAgcmV0dXJuIGAke25hbWV9IHtcbiR7cmVuZGVyQXR0cmlidXRlcyh2YWx1ZSl9XG59YDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09PSBcImxpc3RcIiB8fCB0eXBlID09PSBcInNldFwiKSB7XG4gICAgICAgIGlmIChibG9jaykge1xuICAgICAgICAgIHJldHVybiByZW5kZXJMaXN0KHYsIG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtuYW1lfSA9ICR7cmVuZGVyTGlzdCh2KX1gO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09IFwibWFwXCIpIHtcbiAgICAgICAgcmV0dXJuIGAke25hbWV9ID0gJHtyZW5kZXJNYXAodmFsdWUpfWA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSBcInNpbXBsZVwiKSB7XG4gICAgICAgIGlmIChjbGFzc1R5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3JlbmRlclN0cmluZyh2YWx1ZSl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xhc3NUeXBlID09PSBcIm51bWJlclwiIHx8IGNsYXNzVHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3ZhbHVlfWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3Qgc3VyZSB3aHkgd2UncmUgaGVyZSwgYnV0IHRoZXJlJ3MgZWl0aGVyIGEgYnVnIGluIHRoZSBwcm92aWRlclxuICAgICAgICAvLyBvciB3ZSBoYXZlIHNraXBwZWQgdGhlIGF0dHJpYnV0ZSB0byByZWR1Y2UgdGhlIHNpemUgb2Ygb3VyIHByb3ZpZGVyXG4gICAgICAgIC8vIEluIGVpdGhlciBjYXNlLCB3ZSBzaG91bGQgdHJ5IHRvIG5vdCBvdXRwdXQgW29iamVjdCBPYmplY3RdIGhlcmVcbiAgICAgICAgLy8gYW5kIHRyeSBhIGJlc3QgYXBwcm94aW1hdGlvbi4gVGhvdWdoLCBpdCB3b3VsZCBub3Qgd29yayBmb3JcbiAgICAgICAgLy8gYmxvY2tzXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICByZXR1cm4gYFxuIyBXYXJuaW5nOiBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZSBpcyBvZiBhbiB1bmV4cGVjdGVkIHR5cGUuIEVpdGhlciB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIHRoZSBwcm92aWRlclxuIyBvciBDREtUTiBoYXMgY2hvc2VuIHRvIHNraXAgZ2VuZXJhdGluZyBhIGRldGFpbGVkIHR5cGUgZm9yIHRoaXMgYmVjYXVzZSBpdCBpbmNyZWFzZXMgdGhlIHNpemUgb2YgdGhlIHByb3ZpZGVyIGxpYnJhcnkgc2lnbmlmaWNhbnRseS4gXG4jIFBsZWFzZSBjaGVjayBpZiB0aGlzIHJlc291cmNlIGlzIGluY2x1ZGVkIGluIG91ciBza2lwIGxpc3Q6IFxuIyBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1jZGsvYmxvYi8xZmI4NTg4MDk1YTU1ZDQ3NWRjNGJlMjg4ODJlYzRmNDIwMDZlYzhkL3BhY2thZ2VzLyU0MGNka3RmL3Byb3ZpZGVyLWdlbmVyYXRvci9saWIvZ2V0L2dlbmVyYXRvci9za2lwcGVkLWF0dHJpYnV0ZXMudHNcbiMgYW5kIGlmIG5vdCwgcGxlYXNlIGNoZWNrIHdpdGggdGhlIHByb3ZpZGVyIGF1dGhvcnMgdG8gc2VlIGlmIHRoZSBwcm92aWRlciBzY2hlbWEgaXMgYWNjdXJhdGUuXG4jIFxuIyBXZSB1bmRlcnN0YW5kIHRoaXMgaXMgbm90IGlkZWFsLCBzbyB3ZSBzdWdnZXN0IHVzaW5nIEpTT04gc3ludGhlc2lzIGluc3RlYWQgb2YgSENMIHN5bnRoZXNpcyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGNhc2UuXG5cbiR7bmFtZX0gPSAke3JlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24odmFsdWUpfVxuYDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gXCJhbnlcIikge1xuICAgICAgICByZXR1cm4gYCR7bmFtZX0gPSAke3JlbmRlckZ1enp5SnNvbkV4cHJlc3Npb24odmFsdWUpfWA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSBcInJlZmVyZW5jZVwiKSB7XG4gICAgICAgIHJldHVybiBgJHtuYW1lfSA9ICR7dmFsdWV9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke25hbWV9ID0gJHt2YWx1ZX1gO1xuICAgIH0pXG4gICAgLmZpbHRlcigodikgPT4gdiAhPT0gdW5kZWZpbmVkKVxuICAgIC5qb2luKFwiXFxuXCIpO1xufVxuIl19
|
package/lib/ignore-strategy.js
CHANGED
|
@@ -10,7 +10,7 @@ const fs_1 = require("./private/fs");
|
|
|
10
10
|
* directories (with everything inside them).
|
|
11
11
|
*/
|
|
12
12
|
class ExcludeIgnoreStrategy {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ExcludeIgnoreStrategy", version: "0.26.0-pre.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ExcludeIgnoreStrategy", version: "0.26.0-pre.20" };
|
|
14
14
|
matcher;
|
|
15
15
|
cacheKey;
|
|
16
16
|
// Undefined (the interface default) prunes excluded directories, which is
|
|
@@ -9,7 +9,7 @@ const target_versions_1 = require("./validations/target-versions");
|
|
|
9
9
|
*/
|
|
10
10
|
class ImportableResource extends terraform_element_1.TerraformElement {
|
|
11
11
|
config;
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ImportableResource", version: "0.26.0-pre.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ImportableResource", version: "0.26.0-pre.20" };
|
|
13
13
|
constructor(scope, name, config) {
|
|
14
14
|
super(scope, name, config.terraformResourceType);
|
|
15
15
|
this.config = config;
|
package/lib/manifest.js
CHANGED
|
@@ -48,7 +48,7 @@ class Manifest {
|
|
|
48
48
|
version;
|
|
49
49
|
outdir;
|
|
50
50
|
hclOutput;
|
|
51
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.Manifest", version: "0.26.0-pre.
|
|
51
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.Manifest", version: "0.26.0-pre.20" };
|
|
52
52
|
static fileName = "manifest.json";
|
|
53
53
|
static stacksFolder = "stacks";
|
|
54
54
|
static stackMetadataPath = "metadata.json";
|