@colijnit/configurator 259.1.2 → 259.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/components/selections/selections.component.d.ts +1 -1
- package/bundles/colijnit-configurator.umd.js +162 -105
- package/bundles/colijnit-configurator.umd.js.map +1 -1
- package/colijnit-configurator.metadata.json +1 -1
- package/esm2015/app/builder.js +42 -25
- package/esm2015/app/components/selections/selections.component.js +2 -2
- package/esm2015/app/services/configurator.service.js +15 -11
- package/esm2015/app/utils/object.utils.js +14 -12
- package/esm2015/helper/variation-helper.js +5 -9
- package/esm2015/utils/base-utils.js +9 -0
- package/esm2015/utils/image.utils.js +27 -29
- package/esm2015/utils/scene-utils.js +38 -15
- package/esm2015/utils/variation-utils.js +1 -1
- package/fesm2015/colijnit-configurator.js +144 -97
- package/fesm2015/colijnit-configurator.js.map +1 -1
- package/helper/variation-helper.d.ts +2 -3
- package/package.json +4 -4
- package/utils/base-utils.d.ts +4 -0
- package/utils/image.utils.d.ts +2 -1
- package/colijnit-configurator-259.1.1.tgz +0 -0
- package/configurator/index.html +0 -14
- package/configurator/main.js +0 -3555
- package/configurator/main.js.map +0 -1
- package/configurator/polyfills.js +0 -5683
- package/configurator/polyfills.js.map +0 -1
- package/configurator/runtime.js +0 -149
- package/configurator/runtime.js.map +0 -1
- package/configurator/styles.css +0 -48
- package/configurator/styles.css.map +0 -1
- package/configurator/vendor.js +0 -210213
- package/configurator/vendor.js.map +0 -1
package/esm2015/app/builder.js
CHANGED
|
@@ -140,15 +140,15 @@ export class Builder {
|
|
|
140
140
|
getQuestionAndAnswers(publicationCode) {
|
|
141
141
|
return __awaiter(this, void 0, void 0, function* () {
|
|
142
142
|
const questionsAndAnswers = yield this._configuratorService.getQuestionAndAnswers(false, publicationCode);
|
|
143
|
-
this._answers = questionsAndAnswers.answers;
|
|
144
|
-
this.answersReceived.next(
|
|
143
|
+
this._answers = questionsAndAnswers && questionsAndAnswers.answers ? questionsAndAnswers.answers : [];
|
|
144
|
+
this.answersReceived.next(this._answers);
|
|
145
145
|
});
|
|
146
146
|
}
|
|
147
147
|
selectAnswer(answer) {
|
|
148
148
|
return __awaiter(this, void 0, void 0, function* () {
|
|
149
149
|
yield this._configuratorService.selectAnswer(answer, false);
|
|
150
150
|
yield this.getQuestionAndAnswers();
|
|
151
|
-
if (this._answers.length === 0) {
|
|
151
|
+
if (this._answers && this._answers.length === 0) {
|
|
152
152
|
this._build();
|
|
153
153
|
}
|
|
154
154
|
});
|
|
@@ -201,9 +201,12 @@ export class Builder {
|
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
203
|
_preloadMaterials() {
|
|
204
|
-
this.
|
|
205
|
-
|
|
206
|
-
|
|
204
|
+
if (this._decos && this._decos.length) {
|
|
205
|
+
const materials = [...new Set(this._decos
|
|
206
|
+
.filter(d => d.gameObjectName && d.type === DecoNodeType.Variation)
|
|
207
|
+
.map(d => d.gameObjectName))];
|
|
208
|
+
this._variationHelper.preloadVariations(materials);
|
|
209
|
+
}
|
|
207
210
|
}
|
|
208
211
|
_setInstanceId(sku, instanceId, goodId) {
|
|
209
212
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -319,6 +322,9 @@ export class Builder {
|
|
|
319
322
|
});
|
|
320
323
|
}
|
|
321
324
|
_prepareTheSelections() {
|
|
325
|
+
if (!this._selections || !this._selections.length) {
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
322
328
|
const selections = this._selections.slice();
|
|
323
329
|
const selectionOfArticle = selections.find(s => s.nodeType === NodeType.Article);
|
|
324
330
|
const adjustableSelections = selections.filter(s => s.addAdjust === '2');
|
|
@@ -444,17 +450,19 @@ export class Builder {
|
|
|
444
450
|
* @private
|
|
445
451
|
*/
|
|
446
452
|
_getMaterialIdFromParent(id) {
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
453
|
+
if (this._selections) {
|
|
454
|
+
const idx = this._selections.findIndex(s => s.node === id);
|
|
455
|
+
let currentLevel = 999;
|
|
456
|
+
if (idx > -1) {
|
|
457
|
+
for (let i = idx; i > 0; i--) {
|
|
458
|
+
const selection = this._selections[i];
|
|
459
|
+
if (selection.presentationLevel >= currentLevel) {
|
|
460
|
+
break;
|
|
461
|
+
}
|
|
462
|
+
currentLevel = selection.presentationLevel;
|
|
463
|
+
if (selection.hdecoGameObject) {
|
|
464
|
+
return selection.hdecoGameObject;
|
|
465
|
+
}
|
|
458
466
|
}
|
|
459
467
|
}
|
|
460
468
|
}
|
|
@@ -536,7 +544,7 @@ export class Builder {
|
|
|
536
544
|
_getGoodIdFromSku(sku) {
|
|
537
545
|
return __awaiter(this, void 0, void 0, function* () {
|
|
538
546
|
const response = yield this._configuratorService.getGoodIdFromSku(sku, false);
|
|
539
|
-
if (response.validationResult.success && response.resultObject) {
|
|
547
|
+
if (response && response.validationResult && response.validationResult.success && response.resultObject) {
|
|
540
548
|
return response.resultObject;
|
|
541
549
|
}
|
|
542
550
|
});
|
|
@@ -555,7 +563,7 @@ export class Builder {
|
|
|
555
563
|
}
|
|
556
564
|
let article;
|
|
557
565
|
const articleResponse = yield this._configuratorService.getArticleQuickSel(goodId, false);
|
|
558
|
-
if (articleResponse.validationResult.success && articleResponse.resultObject) {
|
|
566
|
+
if (articleResponse && articleResponse.validationResult && articleResponse.validationResult.success && articleResponse.resultObject) {
|
|
559
567
|
if (articleResponse.resultObject.hasOwnProperty('oArticle')) {
|
|
560
568
|
const obj = Array.isArray(articleResponse.resultObject['oArticle']) ? articleResponse.resultObject['oArticle'][0] : articleResponse.resultObject['oArticle'];
|
|
561
569
|
article = this._boFactory.makeWithRawBackendData(Article, obj);
|
|
@@ -573,7 +581,7 @@ export class Builder {
|
|
|
573
581
|
return __awaiter(this, void 0, void 0, function* () {
|
|
574
582
|
this._selections = [];
|
|
575
583
|
const selectionResponse = yield this._configuratorService.getSelections(false, publicationCode);
|
|
576
|
-
if (selectionResponse.resultObjects && selectionResponse.resultObjects.length > 0) {
|
|
584
|
+
if (selectionResponse && selectionResponse.resultObjects && selectionResponse.resultObjects.length > 0) {
|
|
577
585
|
this._selections = this._boFactory.makeBOArrayFromRawBackendDataArray(Selection, selectionResponse.resultObjects);
|
|
578
586
|
this._selections.forEach(s => s.instanceId = instanceId);
|
|
579
587
|
// const filtered: Selection[] = this._selections.filter(s => s.nodeType !== NodeType.Article && s.presentationLevel === 1);
|
|
@@ -588,7 +596,7 @@ export class Builder {
|
|
|
588
596
|
return __awaiter(this, void 0, void 0, function* () {
|
|
589
597
|
this._decos = [];
|
|
590
598
|
const decosResponse = yield this._configuratorService.getDecos(false);
|
|
591
|
-
if (decosResponse.resultObjects && decosResponse.resultObjects.length > 0) {
|
|
599
|
+
if (decosResponse && decosResponse.resultObjects && decosResponse.resultObjects.length > 0) {
|
|
592
600
|
this._decos = this._boFactory.makeBOArrayFromRawBackendDataArray(DecoNode, decosResponse.resultObjects);
|
|
593
601
|
this.decosReceived.next(this._decos);
|
|
594
602
|
}
|
|
@@ -598,6 +606,9 @@ export class Builder {
|
|
|
598
606
|
});
|
|
599
607
|
}
|
|
600
608
|
_linkSelectionsAndDecos() {
|
|
609
|
+
if (!this._selections || !this._selections.length) {
|
|
610
|
+
return;
|
|
611
|
+
}
|
|
601
612
|
const len = this._selections.length;
|
|
602
613
|
for (let i = 0; i < len; i++) {
|
|
603
614
|
// const id: string = this.selections[i].artNodeIdDeco;
|
|
@@ -615,9 +626,12 @@ export class Builder {
|
|
|
615
626
|
}
|
|
616
627
|
}
|
|
617
628
|
_getVariations() {
|
|
618
|
-
|
|
619
|
-
return deco
|
|
620
|
-
|
|
629
|
+
if (this._decos && this._decos.length) {
|
|
630
|
+
return this._decos.filter((deco) => {
|
|
631
|
+
return deco.type === DecoNodeType.Variation;
|
|
632
|
+
});
|
|
633
|
+
}
|
|
634
|
+
return [];
|
|
621
635
|
}
|
|
622
636
|
_loadVariations(obj) {
|
|
623
637
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -633,6 +647,9 @@ export class Builder {
|
|
|
633
647
|
});
|
|
634
648
|
}
|
|
635
649
|
_getAdjustables() {
|
|
650
|
+
if (!this._selections || !this._selections.length) {
|
|
651
|
+
return [];
|
|
652
|
+
}
|
|
636
653
|
return this._selections.filter(s => {
|
|
637
654
|
const node = s.decoNode;
|
|
638
655
|
return node && node.gameObjectName && node.type === DecoNodeType.Part && node.kind === DecoNodeKind.Adjustable;
|
|
@@ -669,4 +686,4 @@ Builder.decorators = [
|
|
|
669
686
|
},] }
|
|
670
687
|
];
|
|
671
688
|
Builder.ctorParameters = () => [];
|
|
672
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUMxRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMERBQTBELENBQUM7QUFDdEYsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUN0RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUN0RSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFckMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFDN0UsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sK0RBQStELENBQUM7O0FBT3BHLE1BQU0sT0FBTyxPQUFPO0lBMENoQjtRQXhDTyx1QkFBa0IsR0FBaUMsSUFBSSxlQUFlLENBQWMsRUFBRSxDQUFDLENBQUM7UUFDeEYsa0JBQWEsR0FBNkIsSUFBSSxlQUFl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QyxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNwQztJQUNMLENBQUM7Ozs7WUFwcEJKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtTY2VuZX0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0RlY29Ob2RlfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2RlY28tbm9kZSc7XHJcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL3NlbGVjdGlvbic7XHJcbmltcG9ydCB7RGVjb05vZGVUeXBlfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL2VudW0vZGVjby1ub2RlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7VGhyZWVkVXRpbHN9IGZyb20gJy4uL3V0aWxzL3RocmVlZC51dGlscyc7XHJcbmltcG9ydCB7RGVjb05vZGVLaW5kfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL2VudW0vZGVjby1ub2RlLWtpbmQuZW51bSc7XHJcbmltcG9ydCB7U2NlbmVVdGlsc30gZnJvbSAnLi4vdXRpbHMvc2NlbmUtdXRpbHMnO1xyXG5pbXBvcnQge1ZhcmlhdGlvbkhlbHBlcn0gZnJvbSAnLi4vaGVscGVyL3ZhcmlhdGlvbi1oZWxwZXInO1xyXG5pbXBvcnQge0FydGljbGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdG9yU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlcy9jb25maWd1cmF0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QW5zd2VyfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Fuc3dlcic7XHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0fSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtRdWVzdGlvbkFuZEFuc3dlcnN9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvcXVlc3Rpb24tYW5kLWFuc3dlcnMnO1xyXG5pbXBvcnQge0ltYWdlVXRpbHN9IGZyb20gJy4uL3V0aWxzL2ltYWdlLnV0aWxzJztcclxuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSAnLi91dGlscy9vYmplY3QudXRpbHMnO1xyXG5pbXBvcnQge05vZGVUeXBlfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL2VudW0vbm9kZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge0J1c2luZXNzT2JqZWN0RmFjdG9yeX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvc2VydmljZS9idXNpbmVzcy1vYmplY3QtZmFjdG9yeSc7XHJcbmltcG9ydCB7T3B0aW9uc30gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvb3B0aW9ucyc7XHJcbmltcG9ydCB7RGF0YVNlcnZpY2VSZXNwb25zZURhdGF9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL2RhdGEtc2VydmljZS1yZXNwb25zZS1kYXRhJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCdWlsZGVyIHtcclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0aW9uc1JlY2VpdmVkOiBCZWhhdmlvclN1YmplY3Q8U2VsZWN0aW9uW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWxlY3Rpb25bXT4oW10pO1xyXG4gICAgcHVibGljIGFydGljbGVMb2FkZWQ6IEJlaGF2aW9yU3ViamVjdDxBcnRpY2xlPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJ0aWNsZT4odW5kZWZpbmVkKTtcclxuICAgIHB1YmxpYyBkZWNvc1JlY2VpdmVkOiBCZWhhdmlvclN1YmplY3Q8RGVjb05vZGVbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERlY29Ob2RlW10+KFtdKTtcclxuICAgIHB1YmxpYyBhbnN3ZXJzUmVjZWl2ZWQ6IEJlaGF2aW9yU3ViamVjdDxBbnN3ZXJbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFuc3dlcltdPihbXSk7XHJcbiAgICBwdWJsaWMgbW9kZWxMb2FkZWQ6IEJlaGF2aW9yU3ViamVjdDxUSFJFRS5PYmplY3QzRD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRIUkVFLk9iamVjdDNEPihudWxsKTtcclxuICAgIHB1YmxpYyBzZXQgZGVidWcodmFsdWU6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl92YXJpYXRpb25IZWxwZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvbkhlbHBlci5kZWJ1ZyA9IHRoaXMuX2RlYnVnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBkZWJ1ZygpOiBGdW5jdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlYnVnO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NjZW5lOiBUSFJFRS5TY2VuZTtcclxuICAgIHByaXZhdGUgX2luc3RhbmNlSWQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgX3NrdTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBfZ29vZElkOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIF9zZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfYW5zd2VyczogQW5zd2VyW10gPSBbXTtcclxuICAgIHByaXZhdGUgX2RlY29zOiBEZWNvTm9kZVtdID0gW107XHJcbiAgICBwcml2YXRlIF9wbGFjZWRBZGp1c3RhYmxlczogYW55W10gPSBbXTtcclxuICAgIHByaXZhdGUgX3BsYWNlZEFkZGFibGVzOiBhbnlbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfYWRqdXN0YWJsZXM6IGFueVtdID0gW107XHJcbiAgICBwcml2YXRlIF9hZGRhYmxlczogYW55W10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIF9kZWJ1ZzogRnVuY3Rpb247XHJcblxyXG4gICAgcHJpdmF0ZSBfaW1hZ2VDYWNoZTogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICBwcml2YXRlIF9ib0ZhY3Rvcnk6IEJ1c2luZXNzT2JqZWN0RmFjdG9yeTtcclxuICAgIHByaXZhdGUgX3NvdXJjZTogVEhSRUUuT2JqZWN0M0Q7XHJcbiAgICBwcml2YXRlIF90aHJlZWRVdGlsczogVGhyZWVkVXRpbHM7XHJcbiAgICBwcml2YXRlIF92YXJpYXRpb25IZWxwZXI6IFZhcmlhdGlvbkhlbHBlcjtcclxuICAgIHByaXZhdGUgX2FydGljbGVDYWNoZTogTWFwPHN0cmluZywgQXJ0aWNsZT4gPSBuZXcgTWFwKCk7XHJcbiAgICBwcml2YXRlIF9jb25maWd1cmF0b3JTZXJ2aWNlOiBDb25maWd1cmF0b3JTZXJ2aWNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KHNjZW5lOiBTY2VuZSwgb3B0aW9ucz86IE9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLl9ib0ZhY3RvcnkgPSBuZXcgQnVzaW5lc3NPYmplY3RGYWN0b3J5KCk7XHJcbiAgICAgICAgdGhpcy5fdGhyZWVkVXRpbHMgPSBuZXcgVGhyZWVkVXRpbHMoKTtcclxuICAgICAgICB0aGlzLl92YXJpYXRpb25IZWxwZXIgPSBuZXcgVmFyaWF0aW9uSGVscGVyKCk7XHJcbiAgICAgICAgdGhpcy5fdmFyaWF0aW9uSGVscGVyLmRlYnVnID0gdGhpcy5fZGVidWc7XHJcblxyXG4gICAgICAgIGlmICghc2NlbmUpIHtcclxuICAgICAgICAgICAgdGhyb3cgJ05vIHNjZW5lIG9iamVjdCBwcm92aWRlZCEnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jb25maWd1cmF0b3JTZXJ2aWNlID0gbmV3IENvbmZpZ3VyYXRvclNlcnZpY2UoKTtcclxuICAgICAgICAvLyB0aGlzLl9pbWFnZUNhY2hlU2VydmljZSA9IG5ldyBJbWFnZUNhY2hlU2VydmljZSgpO1xyXG4gICAgICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZ3VyYXRvclNlcnZpY2UuaW5pdEFwaShvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fc2NlbmUgPSBzY2VuZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgYnVpbGRNb2RlbChza3U/OiBzdHJpbmcsIGluc3RhbmNlSWQ/OiBzdHJpbmcsIGdvb2RJZD86IG51bWJlcik6IFByb21pc2U8VEhSRUUuT2JqZWN0M0Q+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX3NjZW5lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2V0SW5zdGFuY2VJZChza3UsIGluc3RhbmNlSWQsIGdvb2RJZCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3ByZXBhcmVDb25maWd1cmF0aW9uKHRoaXMuX3NrdSwgdGhpcy5fZ29vZElkKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29uZmlndXJhdG9yU2VydmljZS5zZXRJbnN0YW5jZVRvQ29uZmlndXJlKHRoaXMuX2luc3RhbmNlSWQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8YW55PltdID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNldCgpO1xyXG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmdldFF1ZXN0aW9uQW5kQW5zd2VycygpKTtcclxuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5fZ2V0U2VsZWN0aW9ucyh0aGlzLl9pbnN0YW5jZUlkKSk7XHJcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuX2dldERlY29zKCkpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Fuc3dlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX2xpbmtTZWxlY3Rpb25zQW5kRGVjb3MoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVUaGVTZWxlY3Rpb25zKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wcmVsb2FkTWF0ZXJpYWxzKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBidWlsZCA9IGF3YWl0IHRoaXMuX2J1aWxkKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyAnR0xCIHNvdXJjZSBub3QgZm91bmQhJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGJ1aWxkTW9kZWxGcm9tRGF0YShzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSwgZGVjb3M6IERlY29Ob2RlW10sIGFzc2V0VXJsOiBzdHJpbmcsIGNkblVybDogc3RyaW5nLCBzY2hlbWE6IHN0cmluZyk6IFByb21pc2U8VEhSRUUuT2JqZWN0M0Q+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fc2NlbmUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdCgnbm8gc2NlbmUgcHJvdmlkZWQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZygnc3RhcnQgYnVpbGQnKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2Rvd25sb2FkQXNzZXQoYXNzZXRVcmwsIGNkblVybCwgc2NoZW1hKTtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25zICYmIHNlbGVjdGlvbnMubGVuZ3RoID4gMSAmJiBkZWNvcyAmJiBkZWNvcy5sZW5ndGggPiAwICYmIHRoaXMuX3NvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9ucyA9IHNlbGVjdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVjb3MgPSBkZWNvcztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9saW5rU2VsZWN0aW9uc0FuZERlY29zKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVRoZVNlbGVjdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcmVsb2FkTWF0ZXJpYWxzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnVpbGQgPSBhd2FpdCB0aGlzLl9idWlsZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFuVXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2coJ2ZpbmlzaCBidWlsZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYnVpbGQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoJ1Vuc3VmZmljaWVudCBkYXRhIHByb3ZpZGVkIScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdE5vZGVJbnN0YW5jZShnb29kSWQ6IG51bWJlcik6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyYXRvclNlcnZpY2UuaW5pdE5vZGVJbnN0YW5jZShnb29kSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3RocmVlZFV0aWxzLmNsZWFyQ2FjaGUoKTtcclxuICAgICAgICB0aGlzLl92YXJpYXRpb25IZWxwZXIuY2xlYXJDYWNoZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBzZWxlY3RTZWxlY3Rpb24oc2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9jb25maWd1cmF0b3JTZXJ2aWNlLnNlbGVjdFNlbGVjdGlvbihzZWxlY3Rpb24sIGZhbHNlKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdldFF1ZXN0aW9uQW5kQW5zd2VycygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRRdWVzdGlvbkFuZEFuc3dlcnMocHVibGljYXRpb25Db2RlPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb25zQW5kQW5zd2VyczogUXVlc3Rpb25BbmRBbnN3ZXJzID0gYXdhaXQgdGhpcy5fY29uZmlndXJhdG9yU2VydmljZS5nZXRRdWVzdGlvbkFuZEFuc3dlcnMoZmFsc2UsIHB1YmxpY2F0aW9uQ29kZSk7XHJcbiAgICAgICAgdGhpcy5fYW5zd2VycyA9IHF1ZXN0aW9uc0FuZEFuc3dlcnMuYW5zd2VycztcclxuICAgICAgICB0aGlzLmFuc3dlcnNSZWNlaXZlZC5uZXh0KHF1ZXN0aW9uc0FuZEFuc3dlcnMuYW5zd2Vycyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNlbGVjdEFuc3dlcihhbnN3ZXI6IEFuc3dlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2NvbmZpZ3VyYXRvclNlcnZpY2Uuc2VsZWN0QW5zd2VyKGFuc3dlciwgZmFsc2UpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2Fuc3dlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbWFnZUZvclNlbGVjdGlvbk9yQW5zd2VyKG9iamVjdDogU2VsZWN0aW9uIHwgQW5zd2VyKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCBpbmNsdWRlTWltZVR5cGU6IGJvb2xlYW4gPSB0cnVlLCB0aHVtYjogYm9vbGVhbiA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICAgICAgICBpZiAob2JqZWN0ICYmIG9iamVjdC5ub2RlSWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5faW1hZ2VDYWNoZS5oYXMob2JqZWN0Lm5vZGVJZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlndXJhdG9yU2VydmljZS5nZXRTaW5nbGVJbWFnZShvYmplY3Qubm9kZUlkLCA0LCBpbmNsdWRlTWltZVR5cGUsIHRodW1iLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzcG9uc2VEYXRhOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0OiBzdHJpbmcgPSB0aGlzLl9oYW5kbGVSZXNwb25zZURhdGEoaW5jbHVkZU1pbWVUeXBlLCB0aHVtYiwgcmVzcG9uc2VEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ltYWdlQ2FjaGUuc2V0KG9iamVjdC5ub2RlSWQsIGJhc2U2NCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGJhc2U2NCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9pbWFnZUNhY2hlLmdldChvYmplY3Qubm9kZUlkKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBfY2xlYW5VcCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9za3UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fZ29vZElkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX2luc3RhbmNlSWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fdmFyaWF0aW9uSGVscGVyLmNsZWFyQ2FjaGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9oYW5kbGVSZXNwb25zZURhdGEoaW5jbHVkZU1pbWV0eXBlOiBib29sZWFuLCB0aHVtYjogYm9vbGVhbiwgcmVzcG9uc2VEYXRhOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlRGF0YSAmJiByZXNwb25zZURhdGEucmVzdWx0T2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZURhdGEucmVzdWx0T2JqZWN0LmZpbGVQYXRoICE9PSBudWxsICYmIHJlc3BvbnNlRGF0YS5yZXN1bHRPYmplY3QuZmlsZVBhdGggIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBJbWFnZVV0aWxzLmdldEZpeGVkSW1hZ2VGaWxlcGF0aFVybChyZXNwb25zZURhdGEucmVzdWx0T2JqZWN0LmZpbGVQYXRoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlTWltZXR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW1hZ2VVdGlscy5nZXREb2NCb2R5V2l0aE1pbWVUeXBlRGVmaW5pdGlvbihyZXNwb25zZURhdGEucmVzdWx0T2JqZWN0LmZpbGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHVtYiA/IHJlc3BvbnNlRGF0YS5yZXN1bHRPYmplY3QudGh1bWJuYWlsQm9keSA6IHJlc3BvbnNlRGF0YS5yZXN1bHRPYmplY3QuZG9jdW1lbnRCb2R5KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRodW1iID8gcmVzcG9uc2VEYXRhLnJlc3VsdE9iamVjdC50aHVtYm5haWxCb2R5IDogcmVzcG9uc2VEYXRhLnJlc3VsdE9iamVjdC5kb2N1bWVudEJvZHk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ByZWxvYWRNYXRlcmlhbHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdmFyaWF0aW9uSGVscGVyLnByZWxvYWRWYXJpYXRpb25zKFxyXG4gICAgICAgICAgdGhpcy5fZGVjb3NcclxuICAgICAgICAgICAgLmZpbHRlcihkID0+IGQuZ2FtZU9iamVjdE5hbWUgJiYgZC50eXBlID09PSBEZWNvTm9kZVR5cGUuVmFyaWF0aW9uKVxyXG4gICAgICAgICAgICAubWFwKGQgPT4gZC5nYW1lT2JqZWN0TmFtZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX3NldEluc3RhbmNlSWQoc2t1OiBzdHJpbmcsIGluc3RhbmNlSWQ/OiBzdHJpbmcsIGdvb2RJZD86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICghaW5zdGFuY2VJZCAmJiAhdGhpcy5faW5zdGFuY2VJZCkge1xyXG4gICAgICAgICAgICBpZiAoIWdvb2RJZCkge1xyXG4gICAgICAgICAgICAgICAgZ29vZElkID0gYXdhaXQgdGhpcy5fZ2V0R29vZElkRnJvbVNrdShza3UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2dvb2RJZCA9IGdvb2RJZDtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuaW5pdE5vZGVJbnN0YW5jZSh0aGlzLl9nb29kSWQpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5yZXN1bHRPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlSWQgPSByZXN1bHQucmVzdWx0T2JqZWN0O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgJ0ZhaWxlZCB0byBpbml0aWFsaXplIG5vZGUgaW5zdGFuY2UnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5faW5zdGFuY2VJZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZUlkID0gaW5zdGFuY2VJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLl9za3UpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2t1ID0gc2t1O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9wcmVwYXJlQ29uZmlndXJhdGlvbihza3U6IHN0cmluZywgZ29vZElkPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3QgYXJ0aWNsZTogQXJ0aWNsZSA9IGF3YWl0IHRoaXMuX2dldEFydGljbGUoc2t1LCBnb29kSWQpO1xyXG4gICAgICAgIGlmIChhcnRpY2xlICYmIGFydGljbGUuYXNzZXRVcmwpIHtcclxuICAgICAgICAgICAgaWYgKGFydGljbGUuY29udGVudERlbGl2ZXJ5VXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvbkhlbHBlci5hc3NldFBhdGggPVxyXG4gICAgICAgICAgICAgIGFydGljbGUuY29udGVudERlbGl2ZXJ5VXJsICtcclxuICAgICAgICAgICAgICAoYXJ0aWNsZS5jb250ZW50RGVsaXZlcnlVcmwuZW5kc1dpdGgoJy8nKSA/ICcnIDogJy8nKSArXHJcbiAgICAgICAgICAgICAgKGFydGljbGUuZGlzdFNjaGVtYSA/IGFydGljbGUuZGlzdFNjaGVtYSA6ICdVUF9EQkEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kb3dubG9hZEFzc2V0KGFydGljbGUuYXNzZXRVcmwsIGFydGljbGUuY29udGVudERlbGl2ZXJ5VXJsLCBhcnRpY2xlLmRpc3RTY2hlbWEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9kb3dubG9hZEFzc2V0KGFzc2V0VXJsOiBzdHJpbmcsIGNkblVybDogc3RyaW5nLCBzY2hlbWE6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IGF3YWl0IHRoaXMuX3RocmVlZFV0aWxzLmRvd25sb2FkM0RTb3VyY2UoYXNzZXRVcmwsIGNkblVybClcclxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChjZG5VcmwpIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFyaWF0aW9uSGVscGVyLmFzc2V0UGF0aCA9XHJcbiAgICAgICAgICAgICAgICBjZG5VcmwgK1xyXG4gICAgICAgICAgICAgICAgKGNkblVybC5lbmRzV2l0aCgnLycpID8gJycgOiAnLycpICtcclxuICAgICAgICAgICAgICAgIChzY2hlbWEgPyBzY2hlbWEgOiAnVVBfREJBJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2J1aWxkKCk6IFByb21pc2U8VEhSRUUuT2JqZWN0M0Q+IHtcclxuICAgICAgICBjb25zdCBhZGp1c3RhYmxlczogU2VsZWN0aW9uW10gPSB0aGlzLl9nZXRBZGp1c3RhYmxlcygpO1xyXG4gICAgICAgIGlmIChhZGp1c3RhYmxlcyAmJiBhZGp1c3RhYmxlcy5sZW5ndGggPT09IDAgJiYgdGhpcy5fc2VsZWN0aW9ucyAmJiB0aGlzLl9zZWxlY3Rpb25zLmxlbmd0aCA+IDApIHsgLy8gY2hlY2sgaWYgYXJ0aWNsZSBoYXMgYSBnYW1lT2JqZWN0XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zZWxlY3Rpb25zWzBdLm5vZGVUeXBlID09PSBOb2RlVHlwZS5BcnRpY2xlICYmIHRoaXMuX3NlbGVjdGlvbnNbMF0uZ2FtZU9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgYWRqdXN0YWJsZXMucHVzaCh0aGlzLl9zZWxlY3Rpb25zWzBdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWRqdXN0YWJsZXMgJiYgYWRqdXN0YWJsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBvYmo6IFRIUkVFLk9iamVjdDNEID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XHJcbiAgICAgICAgICAgIG9iai52aXNpYmxlID0gZmFsc2U7IC8vIG5vIG5lZWQgdG8gcmVuZGVyIHZpc3VhbHlcclxuICAgICAgICAgICAgdGhpcy5fc2NlbmUuYWRkKG9iaik7XHJcbiAgICAgICAgICAgIGxldCBjb25uZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5fbG9nKCdidWlsZCBtYWluIG1vZGVsJyk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW46IG51bWJlciA9IGFkanVzdGFibGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhZGp1c3RhYmxlOiBUSFJFRS5PYmplY3QzRCA9IHRoaXMuX2NyZWF0ZUFkanVzdGFibGUob2JqLCBhZGp1c3RhYmxlc1tpXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWRqdXN0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGlpID0gMCwgbGVuaWk6IG51bWJlciA9IHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aDsgaWkgPCBsZW5paTsgaWkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2NlbmVVdGlscy5UcnlTZWxlY3RvckNvbm5lY3Rpb24odGhpcy5fc2NlbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmosIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzW2lpXSwgYWRqdXN0YWJsZSwgaSA9PT0gMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzW2lpXS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdGFibGUudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFjb25uZWN0ZWQgJiYgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTm8gY29ubmVjdGlvbiBmb3VuZCBmb3I6ICcsIGFkanVzdGFibGUubmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fbG9nKCdwbGFjZSBhZGRhYmxlcycpO1xyXG4gICAgICAgICAgICB0aGlzLl9wbGFjZUFkZGFibGVzKG9iaik7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvZygndXBkYXRlIHBpdm90Jyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVBpdm90KG9iaik7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvZygnbG9hZCB2YXJpYXRpb25zJyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2xvYWRWYXJpYXRpb25zKG9iaik7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuX3ZhcmlhdGlvbkhlbHBlci5jbGVhckNhY2hlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvZygncmVtb3ZlIGZyb20gc2NlbmUnKTtcclxuICAgICAgICAgICAgdGhpcy5fc2NlbmUucmVtb3ZlKG9iaik7XHJcbiAgICAgICAgICAgIE9iamVjdFV0aWxzLkRpc3Bvc2VPYmplY3QodGhpcy5fc291cmNlKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5fY2xlYW5VcCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9sb2coJ3JlYWR5IScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsTG9hZGVkLm5leHQob2JqKTtcclxuICAgICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyAnTm8gYWRqdXN0YWJsZXMgZm91bmQhJztcclxuICAgICAgICAgICAgLy8gdGhpcy5fYnVpbGRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2VsZWN0aW9ucy5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLl9lcnJvclNlcnZpY2UuYWRkRXJyb3IodGhpcy5hY3RpdmVJbnN0YW5jZSwge21lc3NhZ2U6ICdOT19TRUxFQ1RJT05TX09SX0RFQ09TJywgZGVzY3JpcHRpb246ICdOT19TRUxFQ1RJT05TX09SX0RFQ09TX0lORk8nfSk7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmJ1aWxkRmluaXNoZWQubmV4dCh7aW5zdGFuY2VJZDogdGhpcy5hY3RpdmVJbnN0YW5jZSwgcmVzdWx0VHlwZTogUmVzdWx0VHlwZS5Ob1NlbGVjdGlvbnN9KTtcclxuICAgICAgICAgICAgLy8gfSBlbHNlIGlmICh0aGlzLmRlY29zLnNpemUgPT09IDApIHtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuX2Vycm9yU2VydmljZS5hZGRFcnJvcih0aGlzLmFjdGl2ZUluc3RhbmNlLCB7bWVzc2FnZTogJ05PX1NFTEVDVElPTlNfT1JfREVDT1MnLCBkZXNjcmlwdGlvbjogJ05PX1NFTEVDVElPTlNfT1JfREVDT1NfSU5GTyd9KTtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuYnVpbGRGaW5pc2hlZC5uZXh0KHtpbnN0YW5jZUlkOiB0aGlzLmFjdGl2ZUluc3RhbmNlLCByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLk5vRGVjb05vZGVzfSk7XHJcbiAgICAgICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLl9lcnJvclNlcnZpY2UuYWRkRXJyb3IodGhpcy5hY3RpdmVJbnN0YW5jZSwge21lc3NhZ2U6ICdOT19BREpVU1RBQkxFUycsIGRlc2NyaXB0aW9uOiAnTk9fQURKVVNUQUJMRVNfSU5GTyd9KTtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuYnVpbGRGaW5pc2hlZC5uZXh0KHtpbnN0YW5jZUlkOiB0aGlzLmFjdGl2ZUluc3RhbmNlLCByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLk5vQWRqdXN0YWJsZXN9KTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9wcmVwYXJlVGhlU2VsZWN0aW9ucygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzZWxlY3Rpb25zID0gdGhpcy5fc2VsZWN0aW9ucy5zbGljZSgpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbk9mQXJ0aWNsZTogU2VsZWN0aW9uID0gc2VsZWN0aW9ucy5maW5kKHMgPT4gcy5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuQXJ0aWNsZSk7XHJcbiAgICAgICAgY29uc3QgYWRqdXN0YWJsZVNlbGVjdGlvbnM6IFNlbGVjdGlvbltdID0gc2VsZWN0aW9ucy5maWx0ZXIocyA9PiBzLmFkZEFkanVzdCA9PT0gJzInKTtcclxuICAgICAgICBjb25zdCBpc0FydGljbGVXaXRoTWF0ZXJpYWw6IGJvb2xlYW4gPVxyXG4gICAgICAgICAgYWRqdXN0YWJsZVNlbGVjdGlvbnMubGVuZ3RoID09PSAwICYmXHJcbiAgICAgICAgICBzZWxlY3Rpb25PZkFydGljbGUuZ2FtZU9iamVjdCAmJlxyXG4gICAgICAgICAgc2VsZWN0aW9uT2ZBcnRpY2xlLmdhbWVPYmplY3QubGVuZ3RoID4gMDtcclxuICAgICAgICAvLyBnZXQgZ2VuZXJpYyB2YXJpYXRpb25zXHJcbiAgICAgICAgY29uc3QgZ2xvYmFsVmFyaWF0aW9uczogRGVjb05vZGVbXSA9IHRoaXMuX3NlbGVjdGlvbnNcclxuICAgICAgICAgIC5maWx0ZXIocyA9PiAocy5nZW5lcmljIHx8IGFkanVzdGFibGVTZWxlY3Rpb25zLmxlbmd0aCA9PT0gMSkgJiYgKHMuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24gJiYgIXMuZGVjb05vZGUudHlwZSlcclxuICAgICAgICAgIC5tYXAoKHZhbHVlOiBTZWxlY3Rpb24sIGluZGV4OiBudW1iZXIsIGFycmF5OiBTZWxlY3Rpb25bXSkgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIGZpbmQgc2VsZWN0aW9uIG9mIHZhcmlhdGlvblxyXG4gICAgICAgICAgICAgIGNvbnN0IHNlbDogU2VsZWN0aW9uID0gdGhpcy5fc2VsZWN0aW9ucy5maW5kKHMgPT4gcy5hcnROb2RlSWREZWNvID09PSAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24ucGFyZW50SWQpO1xyXG4gICAgICAgICAgICAgIGlmIChzZWwpIHtcclxuICAgICAgICAgICAgICAgICAgKHZhbHVlLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uLnN1cHBsaWVyQXJ0aWNsZU5yID0gc2VsLnN1cHBsaWVyQXJ0aWNsZU5yO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24ubWF0ZXJpYWxJZCA9IHRoaXMuX2dldE1hdGVyaWFsSWRGcm9tUGFyZW50KHZhbHVlLm5vZGUpO1xyXG4gICAgICAgICAgICAgIHJldHVybiAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb247XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAvLyBjb21tZW50ZWQgb3V0IGZvciB0aGUgbW9tZW50XHJcbiAgICAgICAgLy8gZ2xvYmFsVmFyaWF0aW9ucy5mb3JFYWNoKGcgPT4ge1xyXG4gICAgICAgIC8vICAgY29uc3QgcGFyZW50SWR4ID0gc2VsZWN0aW9ucy5maW5kSW5kZXgocyA9PiBzLmRlY29Ob2RlICYmIHMuZGVjb05vZGUuaWQgPT09IGcucGFyZW50SWQpO1xyXG4gICAgICAgIC8vICAgaWYgKHBhcmVudElkeCkgeyAvLyByZW1vdmUgcGFyZW50IHNlbGVjdGlvblxyXG4gICAgICAgIC8vICAgICBzZWxlY3Rpb25zLnNwbGljZShwYXJlbnRJZHgsIDEpO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgY29uc3QgaWR4ID0gc2VsZWN0aW9ucy5maW5kSW5kZXgocyA9PiBzLmRlY29Ob2RlICYmIHMuZGVjb05vZGUuaWQgPT09IGcuaWQpO1xyXG4gICAgICAgIC8vICAgaWYgKGlkeCkgeyAvLyBtb3ZlIGdlbmVyaWMgdmFyaWF0aW9ucyB0byB0b3BcclxuICAgICAgICAvLyAgICAgY29uc3Qgc2VsZWN0aW9uID0gc2VsZWN0aW9uc1tpZHhdO1xyXG4gICAgICAgIC8vICAgICBzZWxlY3Rpb25zLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIC8vICAgICBzZWxlY3Rpb25zLnVuc2hpZnQoc2VsZWN0aW9uKTtcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9KTtcclxuXHJcbiAgICAgICAgLy8gY29uc3QgdXNlZFZhcmlhdGlvbnM6IEZ1cm5pdHVyZVBhcnRWYXJpYXRpb25bXSA9IFtdO1xyXG4gICAgICAgIGxldCBnbG9iYWxWYXJpYXRpb25zUmV3cml0ZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gc2VsZWN0aW9ucy5sZW5ndGg7XHJcbiAgICAgICAgbGV0IGxhc3RBZGRlZDogU2VsZWN0aW9uO1xyXG4gICAgICAgIGxldCBsYXN0QWRqdXN0YWJsZTogU2VsZWN0aW9uO1xyXG4gICAgICAgIGxldCBuZXdQYXJ0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHByZXZpb3VzUHJlc0xldmVsOiBudW1iZXIgPSAtMTtcclxuICAgICAgICBsZXQgcG9zaXRpb25pbmc6IGFueTtcclxuICAgICAgICBsZXQgb3B0aW9uVGV4dDogc3RyaW5nO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSBzZWxlY3Rpb25zW2ldO1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbmluZyA9IHNlbGVjdGlvbi5oZGVjb1Bvc2l0aW9uaW5nO1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uVGV4dCA9IHNlbGVjdGlvbi5xdWVzdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsID4gcHJldmlvdXNQcmVzTGV2ZWwpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5oZGVjb1Bvc2l0aW9uaW5nID0gc2VsZWN0aW9uLmhkZWNvUG9zaXRpb25pbmcgfHwgcG9zaXRpb25pbmc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5kZWNvTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5kZWNvTm9kZS50eXBlID09PSBEZWNvTm9kZVR5cGUuVmFyaWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVjb05vZGUgPSBzZWxlY3Rpb24uZGVjb05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgKGRlY29Ob2RlIGFzIGFueSkub3B0aW9uVGV4dCA9IG9wdGlvblRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZmluZCBzZWxlY3Rpb24gb2YgdmFyaWF0aW9uIGFuZCBzZXQgbWF0ZXJpYWxJZCBpbiBjYXNlIG9mIG11bHRpbWF0ZXJpYWxcclxuICAgICAgICAgICAgICAgICAgICAoZGVjb05vZGUgYXMgYW55KS5tYXRlcmlhbElkID0gdGhpcy5fZ2V0TWF0ZXJpYWxJZEZyb21QYXJlbnQoZGVjb05vZGUubm9kZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEFkZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdQYXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGRlY29Ob2RlIGFzIGFueSkubWF0ZXJpYWxJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGFzdEFkZGVkLnZhcmlhdGlvbnMuZmluZCh2ID0+IHYuaWQgPT09IGRlY29Ob2RlLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0QWRkZWQudmFyaWF0aW9ucy5wdXNoKGRlY29Ob2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBZGRlZC52YXJpYXRpb25zID0gW2RlY29Ob2RlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGFzdEFkZGVkLnZhcmlhdGlvbnMuZmluZCh2ID0+IHYuaWQgPT09IGRlY29Ob2RlLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBZGRlZC52YXJpYXRpb25zLnB1c2goZGVjb05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhcnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsVmFyaWF0aW9uc1Jld3JpdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhdGlvbnMubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhdGlvbnNSZXdyaXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnbG9iYWxWYXJpYXRpb25zLmZpbmQodiA9PiB2LmlkID09PSBkZWNvTm9kZS5pZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhdGlvbnMucHVzaChkZWNvTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgdmFyaWF0aW9uOiBGdXJuaXR1cmVQYXJ0VmFyaWF0aW9uID0gbmV3IEZ1cm5pdHVyZVBhcnRWYXJpYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYXRpb24uQnJhbmRJZCA9IHNlbGVjdGlvbi5kZWNvTm9kZS5icmFuZElkO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhdGlvbi5EZXNjcmlwdGlvbiA9IHNlbGVjdGlvbi5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYXRpb24uTWF0ZXJpYWxJZCA9IChzZWxlY3Rpb24uZGVjb05vZGUgYXMgYW55KS5tYXRlcmlhbElkO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhdGlvbi5TdXBwbGllckFydGljbGVOciA9IChzZWxlY3Rpb24uZGVjb05vZGUgYXMgYW55KS5zdXBwbGllckFydGljbGVOcjtcclxuICAgICAgICAgICAgICAgICAgICAvLyB1c2VkVmFyaWF0aW9ucy5wdXNoKHZhcmlhdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChzZWxlY3Rpb24uZGVjb05vZGUudHlwZSA9PT0gRGVjb05vZGVUeXBlLlBhcnQgJiZcclxuICAgICAgICAgICAgICAgICAgdHlwZW9mIHNlbGVjdGlvbi5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZSA9PT0gJ3N0cmluZycgJiZcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLmxlbmd0aCkgfHwgKGlzQXJ0aWNsZVdpdGhNYXRlcmlhbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uLmRlY29Ob2RlLmtpbmQgPT09IERlY29Ob2RlS2luZC5BZGp1c3RhYmxlIHx8IChpc0FydGljbGVXaXRoTWF0ZXJpYWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi52YXJpYXRpb25zID0gZ2xvYmFsVmFyaWF0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRqdXN0YWJsZXMucHVzaChzZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxhc3RBZGRlZCB8fCAobGFzdEFkZGVkLm5vZGVJZCAhPT0gc2VsZWN0aW9uLm5vZGVJZCB8fCBsYXN0QWRkZWQubm9kZSAhPT0gc2VsZWN0aW9uLm5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0QWRkZWQgPSBzZWxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBZGp1c3RhYmxlID0gc2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmRlY29Ob2RlLmtpbmQgPT09IERlY29Ob2RlS2luZC5BZGRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi52YXJpYXRpb25zID0gbGFzdEFkanVzdGFibGUgPyBsYXN0QWRqdXN0YWJsZS52YXJpYXRpb25zIDogZ2xvYmFsVmFyaWF0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RBZGp1c3RhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0QWRqdXN0YWJsZS5hZGRhYmxlcy5wdXNoKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkYWJsZXMucHVzaChzZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxhc3RBZGRlZCB8fCAobGFzdEFkZGVkLm5vZGVJZCAhPT0gc2VsZWN0aW9uLm5vZGVJZCB8fCBsYXN0QWRkZWQubm9kZSAhPT0gc2VsZWN0aW9uLm5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0QWRkZWQgPSBzZWxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZpb3VzUHJlc0xldmVsID0gc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0aGlzLl91cHNlcnRGdXJuaXR1cmUodGhpcy5hY3RpdmVJbnN0YW5jZSxcclxuICAgICAgICAvLyAgIHtWYXJpYXRpb25zOiB1c2VkVmFyaWF0aW9uc30pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbWF0ZXJpYWxJZCBvZiB0aGUgcGFyZW50IHVwIHRoZSB0cmVlIHVudGlsIHByZXNlbnRpb25sZXZlbCAxIGlzIHJlYWNoZWRcclxuICAgICAqIEBwYXJhbSBpZFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfZ2V0TWF0ZXJpYWxJZEZyb21QYXJlbnQoaWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgaWR4OiBudW1iZXIgPSB0aGlzLl9zZWxlY3Rpb25zLmZpbmRJbmRleChzID0+IHMubm9kZSA9PT0gaWQpO1xyXG4gICAgICAgIGxldCBjdXJyZW50TGV2ZWw6IG51bWJlciA9IDk5OTtcclxuICAgICAgICBpZiAoaWR4ID4gLTEpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGlkeDsgaSA+IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5fc2VsZWN0aW9uc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24ucHJlc2VudGF0aW9uTGV2ZWwgPj0gY3VycmVudExldmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50TGV2ZWwgPSBzZWxlY3Rpb24ucHJlc2VudGF0aW9uTGV2ZWw7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uLmhkZWNvR2FtZU9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24uaGRlY29HYW1lT2JqZWN0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY3JlYXRlQWRqdXN0YWJsZShwYXJlbnQ6IFRIUkVFLk9iamVjdDNELCBhZGo6IFNlbGVjdGlvbik6IFRIUkVFLk9iamVjdDNEIHtcclxuICAgICAgICBsZXQgb2JqOiBhbnkgPSB0aGlzLl9zb3VyY2UgPyB0aGlzLl9zb3VyY2UuZ2V0T2JqZWN0QnlOYW1lKGFkai5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZSB8fCBhZGouZ2FtZU9iamVjdCkgOiBudWxsO1xyXG4gICAgICAgIGlmICghb2JqKSB7XHJcbiAgICAgICAgICAgIC8vIGluIGNhc2Ugb2YgZ2xiIGZpbGVzLCB0aGUgaW1wb3J0ZXIgcmVtb3ZlcyBkb3RzIGZyb20gbmFtZXNcclxuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGFkai5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZS5yZXBsYWNlKC9bLl0vZywgJycpO1xyXG4gICAgICAgICAgICBvYmogPSB0aGlzLl9zb3VyY2UgPyB0aGlzLl9zb3VyY2UuZ2V0T2JqZWN0QnlOYW1lKG5hbWUpIDogbnVsbDtcclxuICAgICAgICAgICAgaWYgKCFvYmopIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgTm8gb2JqZWN0IHdpdGggbmFtZSAke2Fkai5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZX0gZm91bmQhYCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgYWRqdXN0YWJsZTogYW55ID0gb2JqLmNsb25lKCk7XHJcbiAgICAgICAgYWRqdXN0YWJsZS5uYW1lID0gdGhpcy5fY3JlYXRlVW5pcXVlTmFtZShwYXJlbnQsIG9iaik7XHJcbiAgICAgICAgYWRqdXN0YWJsZS51c2VyRGF0YS5zZWxlY3Rpb24gPSBhZGo7XHJcbiAgICAgICAgYWRqdXN0YWJsZS5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XHJcbiAgICAgICAgYWRqdXN0YWJsZS50cmF2ZXJzZShjID0+IHtcclxuICAgICAgICAgICAgYy52aXNpYmxlID0gIWMubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2NfJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcGFyZW50LmFkZChhZGp1c3RhYmxlKTtcclxuICAgICAgICAvLyB0aGUgb2JqZWN0IGJlaW5nIGFkZGVkIHRvIHRoZSBjdXN0b21GbG9vckdyb3VwIGlzIGJlaW5nIHJlY3JlYXRlZCBzbyB3ZSBsb29zZSB0aGUgcmVmZXJlbmNlXHJcbiAgICAgICAgLy8gdGhlcmVmb3Igd2UgbmVlZCB0byByZXRyaWV2ZSB0aGUgY3JlYXRlZCBvYmplY3QgYWdhaW5cclxuICAgICAgICBhZGp1c3RhYmxlID0gcGFyZW50LmdldE9iamVjdEJ5TmFtZShhZGp1c3RhYmxlLm5hbWUpO1xyXG4gICAgICAgIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLnB1c2goYWRqdXN0YWJsZSk7XHJcbiAgICAgICAgcmV0dXJuIGFkanVzdGFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY3JlYXRlQWRkYWJsZShwYXJlbnQ6IFRIUkVFLk9iamVjdDNELCBhZGQ6IFNlbGVjdGlvbiwgcGFydDI/OiBhbnksIHBhcnQxPzogYW55KTogVEhSRUUuT2JqZWN0M0Qge1xyXG4gICAgICAgIGNvbnN0IG9iajogYW55ID0gdGhpcy5fc291cmNlLmdldE9iamVjdEJ5TmFtZShhZGQuZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUpO1xyXG4gICAgICAgIGlmICghb2JqKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbkZyb21JZChhZGouYXJ0Tm9kZUlkRGVjbyk7XHJcbiAgICAgICAgY29uc3QgYWRkYWJsZTogYW55ID0gb2JqLmNsb25lKCk7XHJcbiAgICAgICAgYWRkYWJsZS5uYW1lID0gdGhpcy5fY3JlYXRlVW5pcXVlTmFtZShwYXJlbnQsIG9iaik7XHJcbiAgICAgICAgYWRkYWJsZS51c2VyRGF0YS5zZWxlY3Rpb24gPSBhZGQ7XHJcbiAgICAgICAgYWRkYWJsZS5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XHJcbiAgICAgICAgYWRkYWJsZS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICBpZiAocGFydDEgJiYgcGFydDIpIHtcclxuICAgICAgICAgICAgcGFyZW50LmFkZChhZGRhYmxlKTtcclxuICAgICAgICAgICAgdGhpcy5fcGxhY2VkQWRkYWJsZXMucHVzaChhZGRhYmxlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFkZGFibGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhZGRhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3BsYWNlQWRkYWJsZXMocGFyZW50OiBUSFJFRS5PYmplY3QzRCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3BsYWNlZEFkanVzdGFibGVzW2ldLnVzZXJEYXRhLmhhc093blByb3BlcnR5KCdzZWxlY3Rpb24nKSAmJiB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlc1tpXS51c2VyRGF0YS5zZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFkanVzdGFibGVTZWxlY3Rpb246IFNlbGVjdGlvbiA9IHRoaXMuX3BsYWNlZEFkanVzdGFibGVzW2ldLnVzZXJEYXRhLnNlbGVjdGlvbjtcclxuICAgICAgICAgICAgICAgIGlmIChhZGp1c3RhYmxlU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVuYTogbnVtYmVyID0gYWRqdXN0YWJsZVNlbGVjdGlvbi5hZGRhYmxlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbkFkZGFibGU6IGFueTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpYSA9IDA7IGlhIDwgbGVuYTsgaWErKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBTY2VuZVV0aWxzLlRyeVNlbGVjdG9yQ29ubmVjdGlvbih0aGlzLl9zY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCwgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXNbaV0sIGFkanVzdGFibGVTZWxlY3Rpb24uYWRkYWJsZXNbaWFdLCBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGQsIHBhcnQyPywgcGFydDE/KSA9PiB0aGlzLl9jcmVhdGVBZGRhYmxlKHBhcmVudCwgYWRkLCBwYXJ0MiwgcGFydDEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbkFkZGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjZW5lVXRpbHMuVHJ5U2VsZWN0b3JDb25uZWN0aW9uKHRoaXMuX3NjZW5lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCwgY29uQWRkYWJsZSwgYWRqdXN0YWJsZVNlbGVjdGlvbi5hZGRhYmxlc1tpYV0sIGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGQsIHBhcnQyPywgcGFydDE/KSA9PiB0aGlzLl9jcmVhdGVBZGRhYmxlKHBhcmVudCwgYWRkLCBwYXJ0MiwgcGFydDEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25BZGRhYmxlID0gdGhpcy5fcGxhY2VkQWRkYWJsZXNbdGhpcy5fcGxhY2VkQWRkYWJsZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NyZWF0ZVVuaXF1ZU5hbWUocGFyZW50OiBUSFJFRS5PYmplY3QzRCwgb2JqOiBUSFJFRS5PYmplY3QzRCk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICAgICAgbGV0IG5hbWUgPSBvYmoubmFtZTtcclxuICAgICAgICBsZXQgZXhpc3RpbmdPYmogPSBwYXJlbnQuZ2V0T2JqZWN0QnlOYW1lKG5hbWUpO1xyXG4gICAgICAgIHdoaWxlIChleGlzdGluZ09iaikge1xyXG4gICAgICAgICAgICBpdGVyYXRpb24rKztcclxuICAgICAgICAgICAgbmFtZSA9IG9iai5uYW1lICsgKGl0ZXJhdGlvbiAhPT0gMCA/ICgnXycgKyBpdGVyYXRpb24pIDogJycpO1xyXG4gICAgICAgICAgICBleGlzdGluZ09iaiA9IHBhcmVudC5nZXRPYmplY3RCeU5hbWUobmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2dldEdvb2RJZEZyb21Ta3Uoc2t1OiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuX2NvbmZpZ3VyYXRvclNlcnZpY2UuZ2V0R29vZElkRnJvbVNrdShza3UsIGZhbHNlKTtcclxuICAgICAgICBpZiAocmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzICYmIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9nZXRBcnRpY2xlKHNrdTogc3RyaW5nLCBnb29kSWQ6IG51bWJlcik6IFByb21pc2U8QXJ0aWNsZT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9hcnRpY2xlQ2FjaGUuaGFzKHNrdSkpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnRpY2xlTG9hZGVkLm5leHQodGhpcy5fYXJ0aWNsZUNhY2hlLmdldChza3UpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FydGljbGVDYWNoZS5nZXQoc2t1KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFnb29kSWQpIHtcclxuICAgICAgICAgICAgZ29vZElkID0gYXdhaXQgdGhpcy5fZ2V0R29vZElkRnJvbVNrdShza3UpXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgYEFydGljbGUgd2l0aCBza3UgJHtza3V9IG5vdCBmb3VuZCFgO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBhcnRpY2xlOiBBcnRpY2xlO1xyXG4gICAgICAgIGNvbnN0IGFydGljbGVSZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLl9jb25maWd1cmF0b3JTZXJ2aWNlLmdldEFydGljbGVRdWlja1NlbChnb29kSWQsIGZhbHNlKTtcclxuICAgICAgICBpZiAoYXJ0aWNsZVJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2VzcyAmJiBhcnRpY2xlUmVzcG9uc2UucmVzdWx0T2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChhcnRpY2xlUmVzcG9uc2UucmVzdWx0T2JqZWN0Lmhhc093blByb3BlcnR5KCdvQXJ0aWNsZScpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvYmogPSBBcnJheS5pc0FycmF5KGFydGljbGVSZXNwb25zZS5yZXN1bHRPYmplY3RbJ29BcnRpY2xlJ10pID8gYXJ0aWNsZVJlc3BvbnNlLnJlc3VsdE9iamVjdFsnb0FydGljbGUnXVswXSA6IGFydGljbGVSZXNwb25zZS5yZXN1bHRPYmplY3RbJ29BcnRpY2xlJ107XHJcbiAgICAgICAgICAgICAgICBhcnRpY2xlID0gPEFydGljbGU+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQXJ0aWNsZSwgb2JqKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFydGljbGUgPSA8QXJ0aWNsZT50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShBcnRpY2xlLCBhcnRpY2xlUmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9hcnRpY2xlQ2FjaGUuc2V0KHNrdSwgYXJ0aWNsZSk7XHJcbiAgICAgICAgdGhpcy5hcnRpY2xlTG9hZGVkLm5leHQoYXJ0aWNsZSk7XHJcbiAgICAgICAgcmV0dXJuIGFydGljbGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0U2VsZWN0aW9ucyhpbnN0YW5jZUlkOiBzdHJpbmcsIHB1YmxpY2F0aW9uQ29kZT86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbnMgPSBbXTtcclxuICAgICAgICBjb25zdCBzZWxlY3Rpb25SZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLl9jb25maWd1cmF0b3JTZXJ2aWNlLmdldFNlbGVjdGlvbnMoZmFsc2UsIHB1YmxpY2F0aW9uQ29kZSk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGlvblJlc3BvbnNlLnJlc3VsdE9iamVjdHMgJiYgc2VsZWN0aW9uUmVzcG9uc2UucmVzdWx0T2JqZWN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbnMgPSA8U2VsZWN0aW9uW10+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoU2VsZWN0aW9uLCBzZWxlY3Rpb25SZXNwb25zZS5yZXN1bHRPYmplY3RzKTtcclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9ucy5mb3JFYWNoKHMgPT4gcy5pbnN0YW5jZUlkID0gaW5zdGFuY2VJZCk7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IGZpbHRlcmVkOiBTZWxlY3Rpb25bXSA9IHRoaXMuX3NlbGVjdGlvbnMuZmlsdGVyKHMgPT4gcy5ub2RlVHlwZSAhPT0gTm9kZVR5cGUuQXJ0aWNsZSAmJiBzLnByZXNlbnRhdGlvbkxldmVsID09PSAxKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25zUmVjZWl2ZWQubmV4dCh0aGlzLl9zZWxlY3Rpb25zKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyAnTm8gc2VsZWN0aW9ucyBmb3VuZCEnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9nZXREZWNvcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLl9kZWNvcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGRlY29zUmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5fY29uZmlndXJhdG9yU2VydmljZS5nZXREZWNvcyhmYWxzZSk7XHJcbiAgICAgICAgaWYgKGRlY29zUmVzcG9uc2UucmVzdWx0T2JqZWN0cyAmJiBkZWNvc1Jlc3BvbnNlLnJlc3VsdE9iamVjdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9kZWNvcyA9IDxEZWNvTm9kZVtdPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KERlY29Ob2RlLCBkZWNvc1Jlc3BvbnNlLnJlc3VsdE9iamVjdHMpO1xyXG4gICAgICAgICAgICB0aGlzLmRlY29zUmVjZWl2ZWQubmV4dCh0aGlzLl9kZWNvcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgJ05vIGRlY29ub2RlcyBmb3VuZCEnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9saW5rU2VsZWN0aW9uc0FuZERlY29zKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gdGhpcy5fc2VsZWN0aW9ucy5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAvLyBjb25zdCBpZDogc3RyaW5nID0gdGhpcy5zZWxlY3Rpb25zW2ldLmFydE5vZGVJZERlY287XHJcbiAgICAgICAgICAgIGxldCBkZWNvOiBhbnkgPSB0aGlzLl9kZWNvcy5maW5kKGQgPT4gZC5ub2RlSWQgPT09IHRoaXMuX3NlbGVjdGlvbnNbaV0ubm9kZSk7XHJcbiAgICAgICAgICAgIGlmICghZGVjbykge1xyXG4gICAgICAgICAgICAgICAgZGVjbyA9IG5ldyBEZWNvTm9kZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkZWNvLnR5cGUgIT09IERlY29Ob2RlVHlwZS5WYXJpYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhdGlvbjogYW55ID0gdGhpcy5fZ2V0VmFyaWF0aW9ucygpLmZpbmQodiA9PiB2LnBhcmVudElkID09PSB0aGlzLl9zZWxlY3Rpb25zW2ldLmFydE5vZGVJZERlY28pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlY28udmFyaWF0aW9uID0gdmFyaWF0aW9uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbnNbaV0uZGVjb05vZGUgPSBkZWNvO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRWYXJpYXRpb25zKCk6IERlY29Ob2RlW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWNvcy5maWx0ZXIoKGRlY286IERlY29Ob2RlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZWNvLnR5cGUgPT09IERlY29Ob2RlVHlwZS5WYXJpYXRpb247XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfbG9hZFZhcmlhdGlvbnMob2JqOiBUSFJFRS5PYmplY3QzRCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuX2xvZygnbG9hZCB2YXJpYXRpb24gZm9yIHBhcnRzJyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fdmFyaWF0aW9uSGVscGVyLmxvYWRQYXJ0KG9iaiwgdGhpcy5fYWRqdXN0YWJsZXMsIHRydWUpO1xyXG4gICAgICAgIHRoaXMuX2xvZygnbG9hZCB2YXJpYXRpb24gZm9yIGFkanVzdGFibGVzJyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fdmFyaWF0aW9uSGVscGVyLmxvYWRWYXJpYXRpb24ob2JqLCB0aGlzLl9hZGp1c3RhYmxlcywgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5fbG9nKCdsb2FkIHZhcmlhdGlvbiBmb3IgYWRkYWJsZXMnKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl92YXJpYXRpb25IZWxwZXIubG9hZFZhcmlhdGlvbihvYmosIHRoaXMuX2FkZGFibGVzLCB0cnVlKTtcclxuICAgICAgICB0aGlzLl9sb2coJ2xvYWQgdmFyaWF0aW9uIGNsZWFyIGNhY2hlJyk7XHJcbiAgICAgICAgdGhpcy5fdmFyaWF0aW9uSGVscGVyLmNsZWFyQ2FjaGUoKTtcclxuICAgICAgICB0aGlzLl9sb2coJ2xvYWQgdmFyaWF0aW9ucyBkb25lJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0QWRqdXN0YWJsZXMoKTogU2VsZWN0aW9uW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25zLmZpbHRlcihzID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZTogRGVjb05vZGUgPSBzLmRlY29Ob2RlO1xyXG4gICAgICAgICAgICByZXR1cm4gbm9kZSAmJiBub2RlLmdhbWVPYmplY3ROYW1lICYmIG5vZGUudHlwZSA9PT0gRGVjb05vZGVUeXBlLlBhcnQgJiYgbm9kZS5raW5kID09PSBEZWNvTm9kZUtpbmQuQWRqdXN0YWJsZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF91cGRhdGVQaXZvdChvYmo6IFRIUkVFLk9iamVjdDNEKSB7XHJcbiAgICAgICAgY29uc3QgYm91bmRpbmdCb3ggPSBuZXcgVEhSRUUuQm94MygpLnNldEZyb21PYmplY3Qob2JqKTtcclxuICAgICAgICBjb25zdCBiYkNlbnRlclBpdm90ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICAgICAgICBib3VuZGluZ0JveC5nZXRDZW50ZXIoYmJDZW50ZXJQaXZvdCk7XHJcbiAgICAgICAgY29uc3QgZGVsdGE6IFRIUkVFLlZlY3RvcjMgPSBuZXcgVEhSRUUuVmVjdG9yMygpLnN1YihiYkNlbnRlclBpdm90KS5zZXRZKE1hdGguYWJzKE1hdGgubWluKGJvdW5kaW5nQm94Lm1pbi55LCAwKSkpO1xyXG5cclxuICAgICAgICBvYmouY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjaGlsZC5wb3NpdGlvbi5hZGQoZGVsdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG9iai51cGRhdGVXb3JsZE1hdHJpeChmYWxzZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcmVzZXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fcGxhY2VkQWRkYWJsZXMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRoaXMuX2FkanVzdGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fYWRkYWJsZXMubGVuZ3RoID0gMDtcclxuICAgICAgICAvLyB0aGlzLl9wcmVwYXJlVGhlU2VsZWN0aW9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2xvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgICAgICB0aGlzLmRlYnVnKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhuZXcgRGF0ZSgpLCBtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
689
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUMxRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMERBQTBELENBQUM7QUFDdEYsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUN0RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUN0RSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFckMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFDN0UsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sK0RBQStELENBQUM7O0FBT3BHLE1BQU0sT0FBTyxPQUFPO0lBMENoQjtRQXhDTyx1QkFBa0IsR0FBaUMsSUFBSSxlQUFlLENBQWMsRUFBRSxDQUFDLENBQUM7UUFDeEYsa0JBQWEsR0FBNkIsSUFBSSxlQUFl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QUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFrQixJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkgsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNoQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUNILEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLE1BQU07UUFDVixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUMxQixnQ0FBZ0M7SUFDcEMsQ0FBQztJQUVPLElBQUksQ0FBQyxPQUFlO1FBQ3hCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3BDO0lBQ0wsQ0FBQzs7OztZQXRxQkosVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge1NjZW5lfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7RGVjb05vZGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvZGVjby1ub2RlJztcclxuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0aW9uJztcclxuaW1wb3J0IHtEZWNvTm9kZVR5cGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9kZWNvLW5vZGUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtUaHJlZWRVdGlsc30gZnJvbSAnLi4vdXRpbHMvdGhyZWVkLnV0aWxzJztcclxuaW1wb3J0IHtEZWNvTm9kZUtpbmR9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9kZWNvLW5vZGUta2luZC5lbnVtJztcclxuaW1wb3J0IHtTY2VuZVV0aWxzfSBmcm9tICcuLi91dGlscy9zY2VuZS11dGlscyc7XHJcbmltcG9ydCB7VmFyaWF0aW9uSGVscGVyfSBmcm9tICcuLi9oZWxwZXIvdmFyaWF0aW9uLWhlbHBlcic7XHJcbmltcG9ydCB7QXJ0aWNsZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hcnRpY2xlJztcclxuaW1wb3J0IHtDb25maWd1cmF0b3JTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzL2NvbmZpZ3VyYXRvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtBbnN3ZXJ9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYW5zd2VyJztcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1F1ZXN0aW9uQW5kQW5zd2Vyc30gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9xdWVzdGlvbi1hbmQtYW5zd2Vycyc7XHJcbmltcG9ydCB7SW1hZ2VVdGlsc30gZnJvbSAnLi4vdXRpbHMvaW1hZ2UudXRpbHMnO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tICcuL3V0aWxzL29iamVjdC51dGlscyc7XHJcbmltcG9ydCB7Tm9kZVR5cGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9ub2RlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7QnVzaW5lc3NPYmplY3RGYWN0b3J5fSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9zZXJ2aWNlL2J1c2luZXNzLW9iamVjdC1mYWN0b3J5JztcclxuaW1wb3J0IHtPcHRpb25zfSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC9vcHRpb25zJztcclxuaW1wb3J0IHtEYXRhU2VydmljZVJlc3BvbnNlRGF0YX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvZGF0YS1zZXJ2aWNlLXJlc3BvbnNlLWRhdGEnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCJcclxufSlcclxuZXhwb3J0IGNsYXNzIEJ1aWxkZXIge1xyXG5cclxuICAgIHB1YmxpYyBzZWxlY3Rpb25zUmVjZWl2ZWQ6IEJlaGF2aW9yU3ViamVjdDxTZWxlY3Rpb25bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlbGVjdGlvbltdPihbXSk7XHJcbiAgICBwdWJsaWMgYXJ0aWNsZUxvYWRlZDogQmVoYXZpb3JTdWJqZWN0PEFydGljbGU+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnRpY2xlPih1bmRlZmluZWQpO1xyXG4gICAgcHVibGljIGRlY29zUmVjZWl2ZWQ6IEJlaGF2aW9yU3ViamVjdDxEZWNvTm9kZVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGVjb05vZGVbXT4oW10pO1xyXG4gICAgcHVibGljIGFuc3dlcnNSZWNlaXZlZDogQmVoYXZpb3JTdWJqZWN0PEFuc3dlcltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QW5zd2VyW10+KFtdKTtcclxuICAgIHB1YmxpYyBtb2RlbExvYWRlZDogQmVoYXZpb3JTdWJqZWN0PFRIUkVFLk9iamVjdDNEPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VEhSRUUuT2JqZWN0M0Q+KG51bGwpO1xyXG4gICAgcHVibGljIHNldCBkZWJ1Zyh2YWx1ZTogRnVuY3Rpb24pIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fZGVidWcgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhcmlhdGlvbkhlbHBlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFyaWF0aW9uSGVscGVyLmRlYnVnID0gdGhpcy5fZGVidWc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGRlYnVnKCk6IEZ1bmN0aW9uIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGVidWc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2NlbmU6IFRIUkVFLlNjZW5lO1xyXG4gICAgcHJpdmF0ZSBfaW5zdGFuY2VJZDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBfc2t1OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIF9nb29kSWQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgX3NlbGVjdGlvbnM6IFNlbGVjdGlvbltdID0gW107XHJcbiAgICBwcml2YXRlIF9hbnN3ZXJzOiBBbnN3ZXJbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfZGVjb3M6IERlY29Ob2RlW10gPSBbXTtcclxuICAgIHByaXZhdGUgX3BsYWNlZEFkanVzdGFibGVzOiBhbnlbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfcGxhY2VkQWRkYWJsZXM6IGFueVtdID0gW107XHJcbiAgICBwcml2YXRlIF9hZGp1c3RhYmxlczogYW55W10gPSBbXTtcclxuICAgIHByaXZhdGUgX2FkZGFibGVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgX2RlYnVnOiBGdW5jdGlvbjtcclxuXHJcbiAgICBwcml2YXRlIF9pbWFnZUNhY2hlOiBNYXA8bnVtYmVyLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIHByaXZhdGUgX2JvRmFjdG9yeTogQnVzaW5lc3NPYmplY3RGYWN0b3J5O1xyXG4gICAgcHJpdmF0ZSBfc291cmNlOiBUSFJFRS5PYmplY3QzRDtcclxuICAgIHByaXZhdGUgX3RocmVlZFV0aWxzOiBUaHJlZWRVdGlscztcclxuICAgIHByaXZhdGUgX3ZhcmlhdGlvbkhlbHBlcjogVmFyaWF0aW9uSGVscGVyO1xyXG4gICAgcHJpdmF0ZSBfYXJ0aWNsZUNhY2hlOiBNYXA8c3RyaW5nLCBBcnRpY2xlPiA9IG5ldyBNYXAoKTtcclxuICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRvclNlcnZpY2U6IENvbmZpZ3VyYXRvclNlcnZpY2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoc2NlbmU6IFNjZW5lLCBvcHRpb25zPzogT3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuX2JvRmFjdG9yeSA9IG5ldyBCdXNpbmVzc09iamVjdEZhY3RvcnkoKTtcclxuICAgICAgICB0aGlzLl90aHJlZWRVdGlscyA9IG5ldyBUaHJlZWRVdGlscygpO1xyXG4gICAgICAgIHRoaXMuX3ZhcmlhdGlvbkhlbHBlciA9IG5ldyBWYXJpYXRpb25IZWxwZXIoKTtcclxuICAgICAgICB0aGlzLl92YXJpYXRpb25IZWxwZXIuZGVidWcgPSB0aGlzLl9kZWJ1ZztcclxuXHJcbiAgICAgICAgaWYgKCFzY2VuZSkge1xyXG4gICAgICAgICAgICB0aHJvdyAnTm8gc2NlbmUgb2JqZWN0IHByb3ZpZGVkISc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NvbmZpZ3VyYXRvclNlcnZpY2UgPSBuZXcgQ29uZmlndXJhdG9yU2VydmljZSgpO1xyXG4gICAgICAgIC8vIHRoaXMuX2ltYWdlQ2FjaGVTZXJ2aWNlID0gbmV3IEltYWdlQ2FjaGVTZXJ2aWNlKCk7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29uZmlndXJhdG9yU2VydmljZS5pbml0QXBpKG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9zY2VuZSA9IHNjZW5lO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBidWlsZE1vZGVsKHNrdT86IHN0cmluZywgaW5zdGFuY2VJZD86IHN0cmluZywgZ29vZElkPzogbnVtYmVyKTogUHJvbWlzZTxUSFJFRS5PYmplY3QzRD4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fc2NlbmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9zZXRJbnN0YW5jZUlkKHNrdSwgaW5zdGFuY2VJZCwgZ29vZElkKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcHJlcGFyZUNvbmZpZ3VyYXRpb24odGhpcy5fc2t1LCB0aGlzLl9nb29kSWQpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jb25maWd1cmF0b3JTZXJ2aWNlLnNldEluc3RhbmNlVG9Db25maWd1cmUodGhpcy5faW5zdGFuY2VJZCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlczogUHJvbWlzZTxhbnk+W10gPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzKCkpO1xyXG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl9nZXRTZWxlY3Rpb25zKHRoaXMuX2luc3RhbmNlSWQpKTtcclxuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5fZ2V0RGVjb3MoKSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fYW5zd2Vycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbGlua1NlbGVjdGlvbnNBbmREZWNvcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVRoZVNlbGVjdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ByZWxvYWRNYXRlcmlhbHMoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1aWxkID0gYXdhaXQgdGhpcy5fYnVpbGQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBidWlsZDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93ICdHTEIgc291cmNlIG5vdCBmb3VuZCEnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgYnVpbGRNb2RlbEZyb21EYXRhKHNlbGVjdGlvbnM6IFNlbGVjdGlvbltdLCBkZWNvczogRGVjb05vZGVbXSwgYXNzZXRVcmw6IHN0cmluZywgY2RuVXJsOiBzdHJpbmcsIHNjaGVtYTogc3RyaW5nKTogUHJvbWlzZTxUSFJFRS5PYmplY3QzRD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9zY2VuZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KCdubyBzY2VuZSBwcm92aWRlZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nKCdzdGFydCBidWlsZCcpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZG93bmxvYWRBc3NldChhc3NldFVybCwgY2RuVXJsLCBzY2hlbWEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbnMgJiYgc2VsZWN0aW9ucy5sZW5ndGggPiAxICYmIGRlY29zICYmIGRlY29zLmxlbmd0aCA+IDAgJiYgdGhpcy5fc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25zID0gc2VsZWN0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWNvcyA9IGRlY29zO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xpbmtTZWxlY3Rpb25zQW5kRGVjb3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcmVwYXJlVGhlU2VsZWN0aW9ucygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZWxvYWRNYXRlcmlhbHMoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBidWlsZCA9IGF3YWl0IHRoaXMuX2J1aWxkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYW5VcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZygnZmluaXNoIGJ1aWxkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShidWlsZCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdCgnVW5zdWZmaWNpZW50IGRhdGEgcHJvdmlkZWQhJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0Tm9kZUluc3RhbmNlKGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlndXJhdG9yU2VydmljZS5pbml0Tm9kZUluc3RhbmNlKGdvb2RJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdGhyZWVkVXRpbHMuY2xlYXJDYWNoZSgpO1xyXG4gICAgICAgIHRoaXMuX3ZhcmlhdGlvbkhlbHBlci5jbGVhckNhY2hlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNlbGVjdFNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2NvbmZpZ3VyYXRvclNlcnZpY2Uuc2VsZWN0U2VsZWN0aW9uKHNlbGVjdGlvbiwgZmFsc2UpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldFF1ZXN0aW9uQW5kQW5zd2VycyhwdWJsaWNhdGlvbkNvZGU/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCBxdWVzdGlvbnNBbmRBbnN3ZXJzOiBRdWVzdGlvbkFuZEFuc3dlcnMgPSBhd2FpdCB0aGlzLl9jb25maWd1cmF0b3JTZXJ2aWNlLmdldFF1ZXN0aW9uQW5kQW5zd2VycyhmYWxzZSwgcHVibGljYXRpb25Db2RlKTtcclxuICAgICAgICB0aGlzLl9hbnN3ZXJzID0gcXVlc3Rpb25zQW5kQW5zd2VycyAmJiBxdWVzdGlvbnNBbmRBbnN3ZXJzLmFuc3dlcnMgPyBxdWVzdGlvbnNBbmRBbnN3ZXJzLmFuc3dlcnMgOiBbXTtcclxuICAgICAgICB0aGlzLmFuc3dlcnNSZWNlaXZlZC5uZXh0KHRoaXMuX2Fuc3dlcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBzZWxlY3RBbnN3ZXIoYW5zd2VyOiBBbnN3ZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9jb25maWd1cmF0b3JTZXJ2aWNlLnNlbGVjdEFuc3dlcihhbnN3ZXIsIGZhbHNlKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmdldFF1ZXN0aW9uQW5kQW5zd2VycygpO1xyXG4gICAgICAgIGlmICh0aGlzLl9hbnN3ZXJzICYmIHRoaXMuX2Fuc3dlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbWFnZUZvclNlbGVjdGlvbk9yQW5zd2VyKG9iamVjdDogU2VsZWN0aW9uIHwgQW5zd2VyKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCBpbmNsdWRlTWltZVR5cGU6IGJvb2xlYW4gPSB0cnVlLCB0aHVtYjogYm9vbGVhbiA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICAgICAgICBpZiAob2JqZWN0ICYmIG9iamVjdC5ub2RlSWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5faW1hZ2VDYWNoZS5oYXMob2JqZWN0Lm5vZGVJZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlndXJhdG9yU2VydmljZS5nZXRTaW5nbGVJbWFnZShvYmplY3Qubm9kZUlkLCA0LCBpbmNsdWRlTWltZVR5cGUsIHRodW1iLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzcG9uc2VEYXRhOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0OiBzdHJpbmcgPSB0aGlzLl9oYW5kbGVSZXNwb25zZURhdGEoaW5jbHVkZU1pbWVUeXBlLCB0aHVtYiwgcmVzcG9uc2VEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ltYWdlQ2FjaGUuc2V0KG9iamVjdC5ub2RlSWQsIGJhc2U2NCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGJhc2U2NCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9pbWFnZUNhY2hlLmdldChvYmplY3Qubm9kZUlkKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBfY2xlYW5VcCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9za3UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fZ29vZElkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX2luc3RhbmNlSWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fdmFyaWF0aW9uSGVscGVyLmNsZWFyQ2FjaGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9oYW5kbGVSZXNwb25zZURhdGEoaW5jbHVkZU1pbWV0eXBlOiBib29sZWFuLCB0aHVtYjogYm9vbGVhbiwgcmVzcG9uc2VEYXRhOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlRGF0YSAmJiByZXNwb25zZURhdGEucmVzdWx0T2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZURhdGEucmVzdWx0T2JqZWN0LmZpbGVQYXRoICE9PSBudWxsICYmIHJlc3BvbnNlRGF0YS5yZXN1bHRPYmplY3QuZmlsZVBhdGggIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBJbWFnZVV0aWxzLmdldEZpeGVkSW1hZ2VGaWxlcGF0aFVybChyZXNwb25zZURhdGEucmVzdWx0T2JqZWN0LmZpbGVQYXRoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlTWltZXR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW1hZ2VVdGlscy5nZXREb2NCb2R5V2l0aE1pbWVUeXBlRGVmaW5pdGlvbihyZXNwb25zZURhdGEucmVzdWx0T2JqZWN0LmZpbGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHVtYiA/IHJlc3BvbnNlRGF0YS5yZXN1bHRPYmplY3QudGh1bWJuYWlsQm9keSA6IHJlc3BvbnNlRGF0YS5yZXN1bHRPYmplY3QuZG9jdW1lbnRCb2R5KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRodW1iID8gcmVzcG9uc2VEYXRhLnJlc3VsdE9iamVjdC50aHVtYm5haWxCb2R5IDogcmVzcG9uc2VEYXRhLnJlc3VsdE9iamVjdC5kb2N1bWVudEJvZHk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ByZWxvYWRNYXRlcmlhbHMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RlY29zICYmIHRoaXMuX2RlY29zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBtYXRlcmlhbHM6IHN0cmluZ1tdID0gWy4uLm5ldyBTZXQoXHJcbiAgICAgICAgICAgICAgdGhpcy5fZGVjb3NcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZCA9PiBkLmdhbWVPYmplY3ROYW1lICYmIGQudHlwZSA9PT0gRGVjb05vZGVUeXBlLlZhcmlhdGlvbilcclxuICAgICAgICAgICAgICAgIC5tYXAoZCA9PiBkLmdhbWVPYmplY3ROYW1lKVxyXG4gICAgICAgICAgICApXTtcclxuICAgICAgICAgICAgdGhpcy5fdmFyaWF0aW9uSGVscGVyLnByZWxvYWRWYXJpYXRpb25zKG1hdGVyaWFscyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX3NldEluc3RhbmNlSWQoc2t1OiBzdHJpbmcsIGluc3RhbmNlSWQ/OiBzdHJpbmcsIGdvb2RJZD86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICghaW5zdGFuY2VJZCAmJiAhdGhpcy5faW5zdGFuY2VJZCkge1xyXG4gICAgICAgICAgICBpZiAoIWdvb2RJZCkge1xyXG4gICAgICAgICAgICAgICAgZ29vZElkID0gYXdhaXQgdGhpcy5fZ2V0R29vZElkRnJvbVNrdShza3UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2dvb2RJZCA9IGdvb2RJZDtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuaW5pdE5vZGVJbnN0YW5jZSh0aGlzLl9nb29kSWQpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5yZXN1bHRPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlSWQgPSByZXN1bHQucmVzdWx0T2JqZWN0O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgJ0ZhaWxlZCB0byBpbml0aWFsaXplIG5vZGUgaW5zdGFuY2UnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5faW5zdGFuY2VJZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZUlkID0gaW5zdGFuY2VJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLl9za3UpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2t1ID0gc2t1O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9wcmVwYXJlQ29uZmlndXJhdGlvbihza3U6IHN0cmluZywgZ29vZElkPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3QgYXJ0aWNsZTogQXJ0aWNsZSA9IGF3YWl0IHRoaXMuX2dldEFydGljbGUoc2t1LCBnb29kSWQpO1xyXG4gICAgICAgIGlmIChhcnRpY2xlICYmIGFydGljbGUuYXNzZXRVcmwpIHtcclxuICAgICAgICAgICAgaWYgKGFydGljbGUuY29udGVudERlbGl2ZXJ5VXJsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YXJpYXRpb25IZWxwZXIuYXNzZXRQYXRoID1cclxuICAgICAgICAgICAgICAgICAgYXJ0aWNsZS5jb250ZW50RGVsaXZlcnlVcmwgK1xyXG4gICAgICAgICAgICAgICAgICAoYXJ0aWNsZS5jb250ZW50RGVsaXZlcnlVcmwuZW5kc1dpdGgoJy8nKSA/ICcnIDogJy8nKSArXHJcbiAgICAgICAgICAgICAgICAgIChhcnRpY2xlLmRpc3RTY2hlbWEgPyBhcnRpY2xlLmRpc3RTY2hlbWEgOiAnVVBfREJBJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZG93bmxvYWRBc3NldChhcnRpY2xlLmFzc2V0VXJsLCBhcnRpY2xlLmNvbnRlbnREZWxpdmVyeVVybCwgYXJ0aWNsZS5kaXN0U2NoZW1hKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfZG93bmxvYWRBc3NldChhc3NldFVybDogc3RyaW5nLCBjZG5Vcmw6IHN0cmluZywgc2NoZW1hOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLl9zb3VyY2UgPSBhd2FpdCB0aGlzLl90aHJlZWRVdGlscy5kb3dubG9hZDNEU291cmNlKGFzc2V0VXJsLCBjZG5VcmwpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBpZiAoY2RuVXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvbkhlbHBlci5hc3NldFBhdGggPVxyXG4gICAgICAgICAgICAgICAgY2RuVXJsICtcclxuICAgICAgICAgICAgICAgIChjZG5VcmwuZW5kc1dpdGgoJy8nKSA/ICcnIDogJy8nKSArXHJcbiAgICAgICAgICAgICAgICAoc2NoZW1hID8gc2NoZW1hIDogJ1VQX0RCQScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9idWlsZCgpOiBQcm9taXNlPFRIUkVFLk9iamVjdDNEPiB7XHJcbiAgICAgICAgY29uc3QgYWRqdXN0YWJsZXM6IFNlbGVjdGlvbltdID0gdGhpcy5fZ2V0QWRqdXN0YWJsZXMoKTtcclxuICAgICAgICBpZiAoYWRqdXN0YWJsZXMgJiYgYWRqdXN0YWJsZXMubGVuZ3RoID09PSAwICYmIHRoaXMuX3NlbGVjdGlvbnMgJiYgdGhpcy5fc2VsZWN0aW9ucy5sZW5ndGggPiAwKSB7IC8vIGNoZWNrIGlmIGFydGljbGUgaGFzIGEgZ2FtZU9iamVjdFxyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2VsZWN0aW9uc1swXS5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuQXJ0aWNsZSAmJiB0aGlzLl9zZWxlY3Rpb25zWzBdLmdhbWVPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGFkanVzdGFibGVzLnB1c2godGhpcy5fc2VsZWN0aW9uc1swXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFkanVzdGFibGVzICYmIGFkanVzdGFibGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3Qgb2JqOiBUSFJFRS5PYmplY3QzRCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xyXG4gICAgICAgICAgICBvYmoudmlzaWJsZSA9IGZhbHNlOyAvLyBubyBuZWVkIHRvIHJlbmRlciB2aXN1YWx5XHJcbiAgICAgICAgICAgIHRoaXMuX3NjZW5lLmFkZChvYmopO1xyXG4gICAgICAgICAgICBsZXQgY29ubmVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvZygnYnVpbGQgbWFpbiBtb2RlbCcpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuOiBudW1iZXIgPSBhZGp1c3RhYmxlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWRqdXN0YWJsZTogVEhSRUUuT2JqZWN0M0QgPSB0aGlzLl9jcmVhdGVBZGp1c3RhYmxlKG9iaiwgYWRqdXN0YWJsZXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFkanVzdGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpaSA9IDAsIGxlbmlpOiBudW1iZXIgPSB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlcy5sZW5ndGg7IGlpIDwgbGVuaWk7IGlpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNjZW5lVXRpbHMuVHJ5U2VsZWN0b3JDb25uZWN0aW9uKHRoaXMuX3NjZW5lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLCB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlc1tpaV0sIGFkanVzdGFibGUsIGkgPT09IDEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlc1tpaV0udmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RhYmxlLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghY29ubmVjdGVkICYmIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ05vIGNvbm5lY3Rpb24gZm91bmQgZm9yOiAnLCBhZGp1c3RhYmxlLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2xvZygncGxhY2UgYWRkYWJsZXMnKTtcclxuICAgICAgICAgICAgdGhpcy5fcGxhY2VBZGRhYmxlcyhvYmopO1xyXG4gICAgICAgICAgICB0aGlzLl9sb2coJ3VwZGF0ZSBwaXZvdCcpO1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVQaXZvdChvYmopO1xyXG4gICAgICAgICAgICB0aGlzLl9sb2coJ2xvYWQgdmFyaWF0aW9ucycpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9sb2FkVmFyaWF0aW9ucyhvYmopO1xyXG4gICAgICAgICAgICAvLyB0aGlzLl92YXJpYXRpb25IZWxwZXIuY2xlYXJDYWNoZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9sb2coJ3JlbW92ZSBmcm9tIHNjZW5lJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NjZW5lLnJlbW92ZShvYmopO1xyXG4gICAgICAgICAgICBPYmplY3RVdGlscy5EaXNwb3NlT2JqZWN0KHRoaXMuX3NvdXJjZSk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuX2NsZWFuVXAoKTtcclxuICAgICAgICAgICAgdGhpcy5fbG9nKCdyZWFkeSEnKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbExvYWRlZC5uZXh0KG9iaik7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgJ05vIGFkanVzdGFibGVzIGZvdW5kISc7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuX2J1aWxkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLnNlbGVjdGlvbnMubGVuZ3RoIDwgMikge1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLmFkZEVycm9yKHRoaXMuYWN0aXZlSW5zdGFuY2UsIHttZXNzYWdlOiAnTk9fU0VMRUNUSU9OU19PUl9ERUNPUycsIGRlc2NyaXB0aW9uOiAnTk9fU0VMRUNUSU9OU19PUl9ERUNPU19JTkZPJ30pO1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5idWlsZEZpbmlzaGVkLm5leHQoe2luc3RhbmNlSWQ6IHRoaXMuYWN0aXZlSW5zdGFuY2UsIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUuTm9TZWxlY3Rpb25zfSk7XHJcbiAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAodGhpcy5kZWNvcy5zaXplID09PSAwKSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLl9lcnJvclNlcnZpY2UuYWRkRXJyb3IodGhpcy5hY3RpdmVJbnN0YW5jZSwge21lc3NhZ2U6ICdOT19TRUxFQ1RJT05TX09SX0RFQ09TJywgZGVzY3JpcHRpb246ICdOT19TRUxFQ1RJT05TX09SX0RFQ09TX0lORk8nfSk7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmJ1aWxkRmluaXNoZWQubmV4dCh7aW5zdGFuY2VJZDogdGhpcy5hY3RpdmVJbnN0YW5jZSwgcmVzdWx0VHlwZTogUmVzdWx0VHlwZS5Ob0RlY29Ob2Rlc30pO1xyXG4gICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLmFkZEVycm9yKHRoaXMuYWN0aXZlSW5zdGFuY2UsIHttZXNzYWdlOiAnTk9fQURKVVNUQUJMRVMnLCBkZXNjcmlwdGlvbjogJ05PX0FESlVTVEFCTEVTX0lORk8nfSk7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmJ1aWxkRmluaXNoZWQubmV4dCh7aW5zdGFuY2VJZDogdGhpcy5hY3RpdmVJbnN0YW5jZSwgcmVzdWx0VHlwZTogUmVzdWx0VHlwZS5Ob0FkanVzdGFibGVzfSk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcHJlcGFyZVRoZVNlbGVjdGlvbnMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9zZWxlY3Rpb25zIHx8ICF0aGlzLl9zZWxlY3Rpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbnMgPSB0aGlzLl9zZWxlY3Rpb25zLnNsaWNlKCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uT2ZBcnRpY2xlOiBTZWxlY3Rpb24gPSBzZWxlY3Rpb25zLmZpbmQocyA9PiBzLm5vZGVUeXBlID09PSBOb2RlVHlwZS5BcnRpY2xlKTtcclxuICAgICAgICBjb25zdCBhZGp1c3RhYmxlU2VsZWN0aW9uczogU2VsZWN0aW9uW10gPSBzZWxlY3Rpb25zLmZpbHRlcihzID0+IHMuYWRkQWRqdXN0ID09PSAnMicpO1xyXG4gICAgICAgIGNvbnN0IGlzQXJ0aWNsZVdpdGhNYXRlcmlhbDogYm9vbGVhbiA9XHJcbiAgICAgICAgICBhZGp1c3RhYmxlU2VsZWN0aW9ucy5sZW5ndGggPT09IDAgJiZcclxuICAgICAgICAgIHNlbGVjdGlvbk9mQXJ0aWNsZS5nYW1lT2JqZWN0ICYmXHJcbiAgICAgICAgICBzZWxlY3Rpb25PZkFydGljbGUuZ2FtZU9iamVjdC5sZW5ndGggPiAwO1xyXG4gICAgICAgIC8vIGdldCBnZW5lcmljIHZhcmlhdGlvbnNcclxuICAgICAgICBjb25zdCBnbG9iYWxWYXJpYXRpb25zOiBEZWNvTm9kZVtdID0gdGhpcy5fc2VsZWN0aW9uc1xyXG4gICAgICAgICAgLmZpbHRlcihzID0+IChzLmdlbmVyaWMgfHwgYWRqdXN0YWJsZVNlbGVjdGlvbnMubGVuZ3RoID09PSAxKSAmJiAocy5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbiAmJiAhcy5kZWNvTm9kZS50eXBlKVxyXG4gICAgICAgICAgLm1hcCgodmFsdWU6IFNlbGVjdGlvbiwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFNlbGVjdGlvbltdKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gZmluZCBzZWxlY3Rpb24gb2YgdmFyaWF0aW9uXHJcbiAgICAgICAgICAgICAgY29uc3Qgc2VsOiBTZWxlY3Rpb24gPSB0aGlzLl9zZWxlY3Rpb25zLmZpbmQocyA9PiBzLmFydE5vZGVJZERlY28gPT09ICh2YWx1ZS5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbi5wYXJlbnRJZCk7XHJcbiAgICAgICAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgICAgICAgICAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24uc3VwcGxpZXJBcnRpY2xlTnIgPSBzZWwuc3VwcGxpZXJBcnRpY2xlTnI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICh2YWx1ZS5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbi5tYXRlcmlhbElkID0gdGhpcy5fZ2V0TWF0ZXJpYWxJZEZyb21QYXJlbnQodmFsdWUubm9kZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICh2YWx1ZS5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGNvbW1lbnRlZCBvdXQgZm9yIHRoZSBtb21lbnRcclxuICAgICAgICAvLyBnbG9iYWxWYXJpYXRpb25zLmZvckVhY2goZyA9PiB7XHJcbiAgICAgICAgLy8gICBjb25zdCBwYXJlbnRJZHggPSBzZWxlY3Rpb25zLmZpbmRJbmRleChzID0+IHMuZGVjb05vZGUgJiYgcy5kZWNvTm9kZS5pZCA9PT0gZy5wYXJlbnRJZCk7XHJcbiAgICAgICAgLy8gICBpZiAocGFyZW50SWR4KSB7IC8vIHJlbW92ZSBwYXJlbnQgc2VsZWN0aW9uXHJcbiAgICAgICAgLy8gICAgIHNlbGVjdGlvbnMuc3BsaWNlKHBhcmVudElkeCwgMSk7XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gICBjb25zdCBpZHggPSBzZWxlY3Rpb25zLmZpbmRJbmRleChzID0+IHMuZGVjb05vZGUgJiYgcy5kZWNvTm9kZS5pZCA9PT0gZy5pZCk7XHJcbiAgICAgICAgLy8gICBpZiAoaWR4KSB7IC8vIG1vdmUgZ2VuZXJpYyB2YXJpYXRpb25zIHRvIHRvcFxyXG4gICAgICAgIC8vICAgICBjb25zdCBzZWxlY3Rpb24gPSBzZWxlY3Rpb25zW2lkeF07XHJcbiAgICAgICAgLy8gICAgIHNlbGVjdGlvbnMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgLy8gICAgIHNlbGVjdGlvbnMudW5zaGlmdChzZWxlY3Rpb24pO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIH0pO1xyXG5cclxuICAgICAgICAvLyBjb25zdCB1c2VkVmFyaWF0aW9uczogRnVybml0dXJlUGFydFZhcmlhdGlvbltdID0gW107XHJcbiAgICAgICAgbGV0IGdsb2JhbFZhcmlhdGlvbnNSZXdyaXRlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBzZWxlY3Rpb25zLmxlbmd0aDtcclxuICAgICAgICBsZXQgbGFzdEFkZGVkOiBTZWxlY3Rpb247XHJcbiAgICAgICAgbGV0IGxhc3RBZGp1c3RhYmxlOiBTZWxlY3Rpb247XHJcbiAgICAgICAgbGV0IG5ld1BhcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJldmlvdXNQcmVzTGV2ZWw6IG51bWJlciA9IC0xO1xyXG4gICAgICAgIGxldCBwb3NpdGlvbmluZzogYW55O1xyXG4gICAgICAgIGxldCBvcHRpb25UZXh0OiBzdHJpbmc7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9IHNlbGVjdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24ucHJlc2VudGF0aW9uTGV2ZWwgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uaW5nID0gc2VsZWN0aW9uLmhkZWNvUG9zaXRpb25pbmc7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25UZXh0ID0gc2VsZWN0aW9uLnF1ZXN0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24ucHJlc2VudGF0aW9uTGV2ZWwgPiBwcmV2aW91c1ByZXNMZXZlbCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLmhkZWNvUG9zaXRpb25pbmcgPSBzZWxlY3Rpb24uaGRlY29Qb3NpdGlvbmluZyB8fCBwb3NpdGlvbmluZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uLmRlY29Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uLmRlY29Ob2RlLnR5cGUgPT09IERlY29Ob2RlVHlwZS5WYXJpYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWNvTm9kZSA9IHNlbGVjdGlvbi5kZWNvTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAoZGVjb05vZGUgYXMgYW55KS5vcHRpb25UZXh0ID0gb3B0aW9uVGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAvLyBmaW5kIHNlbGVjdGlvbiBvZiB2YXJpYXRpb24gYW5kIHNldCBtYXRlcmlhbElkIGluIGNhc2Ugb2YgbXVsdGltYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgICAgIChkZWNvTm9kZSBhcyBhbnkpLm1hdGVyaWFsSWQgPSB0aGlzLl9nZXRNYXRlcmlhbElkRnJvbVBhcmVudChkZWNvTm9kZS5ub2RlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0QWRkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1BhcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZGVjb05vZGUgYXMgYW55KS5tYXRlcmlhbElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsYXN0QWRkZWQudmFyaWF0aW9ucy5maW5kKHYgPT4gdi5pZCA9PT0gZGVjb05vZGUuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBZGRlZC52YXJpYXRpb25zLnB1c2goZGVjb05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEFkZGVkLnZhcmlhdGlvbnMgPSBbZGVjb05vZGVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsYXN0QWRkZWQudmFyaWF0aW9ucy5maW5kKHYgPT4gdi5pZCA9PT0gZGVjb05vZGUuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEFkZGVkLnZhcmlhdGlvbnMucHVzaChkZWNvTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFydCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbG9iYWxWYXJpYXRpb25zUmV3cml0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWF0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWF0aW9uc1Jld3JpdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdsb2JhbFZhcmlhdGlvbnMuZmluZCh2ID0+IHYuaWQgPT09IGRlY29Ob2RlLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWF0aW9ucy5wdXNoKGRlY29Ob2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCB2YXJpYXRpb246IEZ1cm5pdHVyZVBhcnRWYXJpYXRpb24gPSBuZXcgRnVybml0dXJlUGFydFZhcmlhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhdGlvbi5CcmFuZElkID0gc2VsZWN0aW9uLmRlY29Ob2RlLmJyYW5kSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWF0aW9uLkRlc2NyaXB0aW9uID0gc2VsZWN0aW9uLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhdGlvbi5NYXRlcmlhbElkID0gKHNlbGVjdGlvbi5kZWNvTm9kZSBhcyBhbnkpLm1hdGVyaWFsSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWF0aW9uLlN1cHBsaWVyQXJ0aWNsZU5yID0gKHNlbGVjdGlvbi5kZWNvTm9kZSBhcyBhbnkpLnN1cHBsaWVyQXJ0aWNsZU5yO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHVzZWRWYXJpYXRpb25zLnB1c2godmFyaWF0aW9uKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHNlbGVjdGlvbi5kZWNvTm9kZS50eXBlID09PSBEZWNvTm9kZVR5cGUuUGFydCAmJlxyXG4gICAgICAgICAgICAgICAgICB0eXBlb2Ygc2VsZWN0aW9uLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lID09PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUubGVuZ3RoKSB8fCAoaXNBcnRpY2xlV2l0aE1hdGVyaWFsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24uZGVjb05vZGUua2luZCA9PT0gRGVjb05vZGVLaW5kLkFkanVzdGFibGUgfHwgKGlzQXJ0aWNsZVdpdGhNYXRlcmlhbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLnZhcmlhdGlvbnMgPSBnbG9iYWxWYXJpYXRpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGp1c3RhYmxlcy5wdXNoKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGFzdEFkZGVkIHx8IChsYXN0QWRkZWQubm9kZUlkICE9PSBzZWxlY3Rpb24ubm9kZUlkIHx8IGxhc3RBZGRlZC5ub2RlICE9PSBzZWxlY3Rpb24ubm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBZGRlZCA9IHNlbGVjdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEFkanVzdGFibGUgPSBzZWxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24uZGVjb05vZGUua2luZCA9PT0gRGVjb05vZGVLaW5kLkFkZGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLnZhcmlhdGlvbnMgPSBsYXN0QWRqdXN0YWJsZSA/IGxhc3RBZGp1c3RhYmxlLnZhcmlhdGlvbnMgOiBnbG9iYWxWYXJpYXRpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEFkanVzdGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBZGp1c3RhYmxlLmFkZGFibGVzLnB1c2goc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRhYmxlcy5wdXNoKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGFzdEFkZGVkIHx8IChsYXN0QWRkZWQubm9kZUlkICE9PSBzZWxlY3Rpb24ubm9kZUlkIHx8IGxhc3RBZGRlZC5ub2RlICE9PSBzZWxlY3Rpb24ubm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBZGRlZCA9IHNlbGVjdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldmlvdXNQcmVzTGV2ZWwgPSBzZWxlY3Rpb24ucHJlc2VudGF0aW9uTGV2ZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMuX3Vwc2VydEZ1cm5pdHVyZSh0aGlzLmFjdGl2ZUluc3RhbmNlLFxyXG4gICAgICAgIC8vICAge1ZhcmlhdGlvbnM6IHVzZWRWYXJpYXRpb25zfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXRlcmlhbElkIG9mIHRoZSBwYXJlbnQgdXAgdGhlIHRyZWUgdW50aWwgcHJlc2VudGlvbmxldmVsIDEgaXMgcmVhY2hlZFxyXG4gICAgICogQHBhcmFtIGlkXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9nZXRNYXRlcmlhbElkRnJvbVBhcmVudChpZDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5fc2VsZWN0aW9ucykge1xyXG4gICAgICAgICAgICBjb25zdCBpZHg6IG51bWJlciA9IHRoaXMuX3NlbGVjdGlvbnMuZmluZEluZGV4KHMgPT4gcy5ub2RlID09PSBpZCk7XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50TGV2ZWw6IG51bWJlciA9IDk5OTtcclxuICAgICAgICAgICAgaWYgKGlkeCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gaWR4OyBpID4gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5fc2VsZWN0aW9uc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsID49IGN1cnJlbnRMZXZlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudExldmVsID0gc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24uaGRlY29HYW1lT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24uaGRlY29HYW1lT2JqZWN0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NyZWF0ZUFkanVzdGFibGUocGFyZW50OiBUSFJFRS5PYmplY3QzRCwgYWRqOiBTZWxlY3Rpb24pOiBUSFJFRS5PYmplY3QzRCB7XHJcbiAgICAgICAgbGV0IG9iajogYW55ID0gdGhpcy5fc291cmNlID8gdGhpcy5fc291cmNlLmdldE9iamVjdEJ5TmFtZShhZGouZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUgfHwgYWRqLmdhbWVPYmplY3QpIDogbnVsbDtcclxuICAgICAgICBpZiAoIW9iaikge1xyXG4gICAgICAgICAgICAvLyBpbiBjYXNlIG9mIGdsYiBmaWxlcywgdGhlIGltcG9ydGVyIHJlbW92ZXMgZG90cyBmcm9tIG5hbWVzXHJcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBhZGouZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUucmVwbGFjZSgvWy5dL2csICcnKTtcclxuICAgICAgICAgICAgb2JqID0gdGhpcy5fc291cmNlID8gdGhpcy5fc291cmNlLmdldE9iamVjdEJ5TmFtZShuYW1lKSA6IG51bGw7XHJcbiAgICAgICAgICAgIGlmICghb2JqKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYE5vIG9iamVjdCB3aXRoIG5hbWUgJHthZGouZGVjb05vZGUuZ2FtZU9iamVjdE5hbWV9IGZvdW5kIWApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFkanVzdGFibGU6IGFueSA9IG9iai5jbG9uZSgpO1xyXG4gICAgICAgIGFkanVzdGFibGUubmFtZSA9IHRoaXMuX2NyZWF0ZVVuaXF1ZU5hbWUocGFyZW50LCBvYmopO1xyXG4gICAgICAgIGFkanVzdGFibGUudXNlckRhdGEuc2VsZWN0aW9uID0gYWRqO1xyXG4gICAgICAgIGFkanVzdGFibGUucG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgICAgIGFkanVzdGFibGUudHJhdmVyc2UoYyA9PiB7XHJcbiAgICAgICAgICAgIGMudmlzaWJsZSA9ICFjLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdjXycpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHBhcmVudC5hZGQoYWRqdXN0YWJsZSk7XHJcbiAgICAgICAgLy8gdGhlIG9iamVjdCBiZWluZyBhZGRlZCB0byB0aGUgY3VzdG9tRmxvb3JHcm91cCBpcyBiZWluZyByZWNyZWF0ZWQgc28gd2UgbG9vc2UgdGhlIHJlZmVyZW5jZVxyXG4gICAgICAgIC8vIHRoZXJlZm9yIHdlIG5lZWQgdG8gcmV0cmlldmUgdGhlIGNyZWF0ZWQgb2JqZWN0IGFnYWluXHJcbiAgICAgICAgYWRqdXN0YWJsZSA9IHBhcmVudC5nZXRPYmplY3RCeU5hbWUoYWRqdXN0YWJsZS5uYW1lKTtcclxuICAgICAgICB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlcy5wdXNoKGFkanVzdGFibGUpO1xyXG4gICAgICAgIHJldHVybiBhZGp1c3RhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NyZWF0ZUFkZGFibGUocGFyZW50OiBUSFJFRS5PYmplY3QzRCwgYWRkOiBTZWxlY3Rpb24sIHBhcnQyPzogYW55LCBwYXJ0MT86IGFueSk6IFRIUkVFLk9iamVjdDNEIHtcclxuICAgICAgICBjb25zdCBvYmo6IGFueSA9IHRoaXMuX3NvdXJjZS5nZXRPYmplY3RCeU5hbWUoYWRkLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lKTtcclxuICAgICAgICBpZiAoIW9iaikge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB0aGlzLl9nZXRTZWxlY3Rpb25Gcm9tSWQoYWRqLmFydE5vZGVJZERlY28pO1xyXG4gICAgICAgIGNvbnN0IGFkZGFibGU6IGFueSA9IG9iai5jbG9uZSgpO1xyXG4gICAgICAgIGFkZGFibGUubmFtZSA9IHRoaXMuX2NyZWF0ZVVuaXF1ZU5hbWUocGFyZW50LCBvYmopO1xyXG4gICAgICAgIGFkZGFibGUudXNlckRhdGEuc2VsZWN0aW9uID0gYWRkO1xyXG4gICAgICAgIGFkZGFibGUucG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgICAgIGFkZGFibGUudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKHBhcnQxICYmIHBhcnQyKSB7XHJcbiAgICAgICAgICAgIHBhcmVudC5hZGQoYWRkYWJsZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BsYWNlZEFkZGFibGVzLnB1c2goYWRkYWJsZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhZGRhYmxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYWRkYWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9wbGFjZUFkZGFibGVzKHBhcmVudDogVEhSRUUuT2JqZWN0M0QpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wbGFjZWRBZGp1c3RhYmxlc1tpXS51c2VyRGF0YS5oYXNPd25Qcm9wZXJ0eSgnc2VsZWN0aW9uJykgJiYgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXNbaV0udXNlckRhdGEuc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhZGp1c3RhYmxlU2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlc1tpXS51c2VyRGF0YS5zZWxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoYWRqdXN0YWJsZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmE6IG51bWJlciA9IGFkanVzdGFibGVTZWxlY3Rpb24uYWRkYWJsZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25BZGRhYmxlOiBhbnk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaWEgPSAwOyBpYSA8IGxlbmE7IGlhKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgU2NlbmVVdGlscy5UcnlTZWxlY3RvckNvbm5lY3Rpb24odGhpcy5fc2NlbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQsIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzW2ldLCBhZGp1c3RhYmxlU2VsZWN0aW9uLmFkZGFibGVzW2lhXSwgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWRkLCBwYXJ0Mj8sIHBhcnQxPykgPT4gdGhpcy5fY3JlYXRlQWRkYWJsZShwYXJlbnQsIGFkZCwgcGFydDIsIHBhcnQxKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25BZGRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2VuZVV0aWxzLlRyeVNlbGVjdG9yQ29ubmVjdGlvbih0aGlzLl9zY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQsIGNvbkFkZGFibGUsIGFkanVzdGFibGVTZWxlY3Rpb24uYWRkYWJsZXNbaWFdLCBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWRkLCBwYXJ0Mj8sIHBhcnQxPykgPT4gdGhpcy5fY3JlYXRlQWRkYWJsZShwYXJlbnQsIGFkZCwgcGFydDIsIHBhcnQxKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uQWRkYWJsZSA9IHRoaXMuX3BsYWNlZEFkZGFibGVzW3RoaXMuX3BsYWNlZEFkZGFibGVzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jcmVhdGVVbmlxdWVOYW1lKHBhcmVudDogVEhSRUUuT2JqZWN0M0QsIG9iajogVEhSRUUuT2JqZWN0M0QpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBpdGVyYXRpb24gPSAwO1xyXG4gICAgICAgIGxldCBuYW1lID0gb2JqLm5hbWU7XHJcbiAgICAgICAgbGV0IGV4aXN0aW5nT2JqID0gcGFyZW50LmdldE9iamVjdEJ5TmFtZShuYW1lKTtcclxuICAgICAgICB3aGlsZSAoZXhpc3RpbmdPYmopIHtcclxuICAgICAgICAgICAgaXRlcmF0aW9uKys7XHJcbiAgICAgICAgICAgIG5hbWUgPSBvYmoubmFtZSArIChpdGVyYXRpb24gIT09IDAgPyAoJ18nICsgaXRlcmF0aW9uKSA6ICcnKTtcclxuICAgICAgICAgICAgZXhpc3RpbmdPYmogPSBwYXJlbnQuZ2V0T2JqZWN0QnlOYW1lKG5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9nZXRHb29kSWRGcm9tU2t1KHNrdTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLl9jb25maWd1cmF0b3JTZXJ2aWNlLmdldEdvb2RJZEZyb21Ta3Uoc2t1LCBmYWxzZSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzICYmIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9nZXRBcnRpY2xlKHNrdTogc3RyaW5nLCBnb29kSWQ6IG51bWJlcik6IFByb21pc2U8QXJ0aWNsZT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9hcnRpY2xlQ2FjaGUuaGFzKHNrdSkpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnRpY2xlTG9hZGVkLm5leHQodGhpcy5fYXJ0aWNsZUNhY2hlLmdldChza3UpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FydGljbGVDYWNoZS5nZXQoc2t1KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFnb29kSWQpIHtcclxuICAgICAgICAgICAgZ29vZElkID0gYXdhaXQgdGhpcy5fZ2V0R29vZElkRnJvbVNrdShza3UpXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgYEFydGljbGUgd2l0aCBza3UgJHtza3V9IG5vdCBmb3VuZCFgO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBhcnRpY2xlOiBBcnRpY2xlO1xyXG4gICAgICAgIGNvbnN0IGFydGljbGVSZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLl9jb25maWd1cmF0b3JTZXJ2aWNlLmdldEFydGljbGVRdWlja1NlbChnb29kSWQsIGZhbHNlKTtcclxuICAgICAgICBpZiAoYXJ0aWNsZVJlc3BvbnNlICYmIGFydGljbGVSZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIGFydGljbGVSZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MgJiYgYXJ0aWNsZVJlc3BvbnNlLnJlc3VsdE9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoYXJ0aWNsZVJlc3BvbnNlLnJlc3VsdE9iamVjdC5oYXNPd25Qcm9wZXJ0eSgnb0FydGljbGUnKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqID0gQXJyYXkuaXNBcnJheShhcnRpY2xlUmVzcG9uc2UucmVzdWx0T2JqZWN0WydvQXJ0aWNsZSddKSA/IGFydGljbGVSZXNwb25zZS5yZXN1bHRPYmplY3RbJ29BcnRpY2xlJ11bMF0gOiBhcnRpY2xlUmVzcG9uc2UucmVzdWx0T2JqZWN0WydvQXJ0aWNsZSddO1xyXG4gICAgICAgICAgICAgICAgYXJ0aWNsZSA9IDxBcnRpY2xlPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGUsIG9iaik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhcnRpY2xlID0gPEFydGljbGU+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQXJ0aWNsZSwgYXJ0aWNsZVJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fYXJ0aWNsZUNhY2hlLnNldChza3UsIGFydGljbGUpO1xyXG4gICAgICAgIHRoaXMuYXJ0aWNsZUxvYWRlZC5uZXh0KGFydGljbGUpO1xyXG4gICAgICAgIHJldHVybiBhcnRpY2xlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2dldFNlbGVjdGlvbnMoaW5zdGFuY2VJZDogc3RyaW5nLCBwdWJsaWNhdGlvbkNvZGU/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25zID0gW107XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uUmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5fY29uZmlndXJhdG9yU2VydmljZS5nZXRTZWxlY3Rpb25zKGZhbHNlLCBwdWJsaWNhdGlvbkNvZGUpO1xyXG4gICAgICAgIGlmIChzZWxlY3Rpb25SZXNwb25zZSAmJiBzZWxlY3Rpb25SZXNwb25zZS5yZXN1bHRPYmplY3RzICYmIHNlbGVjdGlvblJlc3BvbnNlLnJlc3VsdE9iamVjdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25zID0gPFNlbGVjdGlvbltdPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFNlbGVjdGlvbiwgc2VsZWN0aW9uUmVzcG9uc2UucmVzdWx0T2JqZWN0cyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbnMuZm9yRWFjaChzID0+IHMuaW5zdGFuY2VJZCA9IGluc3RhbmNlSWQpO1xyXG4gICAgICAgICAgICAvLyBjb25zdCBmaWx0ZXJlZDogU2VsZWN0aW9uW10gPSB0aGlzLl9zZWxlY3Rpb25zLmZpbHRlcihzID0+IHMubm9kZVR5cGUgIT09IE5vZGVUeXBlLkFydGljbGUgJiYgcy5wcmVzZW50YXRpb25MZXZlbCA9PT0gMSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uc1JlY2VpdmVkLm5leHQodGhpcy5fc2VsZWN0aW9ucyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgJ05vIHNlbGVjdGlvbnMgZm91bmQhJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0RGVjb3MoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5fZGVjb3MgPSBbXTtcclxuICAgICAgICBjb25zdCBkZWNvc1Jlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuX2NvbmZpZ3VyYXRvclNlcnZpY2UuZ2V0RGVjb3MoZmFsc2UpO1xyXG4gICAgICAgIGlmIChkZWNvc1Jlc3BvbnNlICYmIGRlY29zUmVzcG9uc2UucmVzdWx0T2JqZWN0cyAmJiBkZWNvc1Jlc3BvbnNlLnJlc3VsdE9iamVjdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9kZWNvcyA9IDxEZWNvTm9kZVtdPnRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KERlY29Ob2RlLCBkZWNvc1Jlc3BvbnNlLnJlc3VsdE9iamVjdHMpO1xyXG4gICAgICAgICAgICB0aGlzLmRlY29zUmVjZWl2ZWQubmV4dCh0aGlzLl9kZWNvcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgJ05vIGRlY29ub2RlcyBmb3VuZCEnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9saW5rU2VsZWN0aW9uc0FuZERlY29zKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5fc2VsZWN0aW9ucyB8fCAhdGhpcy5fc2VsZWN0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHRoaXMuX3NlbGVjdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gY29uc3QgaWQ6IHN0cmluZyA9IHRoaXMuc2VsZWN0aW9uc1tpXS5hcnROb2RlSWREZWNvO1xyXG4gICAgICAgICAgICBsZXQgZGVjbzogYW55ID0gdGhpcy5fZGVjb3MuZmluZChkID0+IGQubm9kZUlkID09PSB0aGlzLl9zZWxlY3Rpb25zW2ldLm5vZGUpO1xyXG4gICAgICAgICAgICBpZiAoIWRlY28pIHtcclxuICAgICAgICAgICAgICAgIGRlY28gPSBuZXcgRGVjb05vZGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGVjby50eXBlICE9PSBEZWNvTm9kZVR5cGUuVmFyaWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YXJpYXRpb246IGFueSA9IHRoaXMuX2dldFZhcmlhdGlvbnMoKS5maW5kKHYgPT4gdi5wYXJlbnRJZCA9PT0gdGhpcy5fc2VsZWN0aW9uc1tpXS5hcnROb2RlSWREZWNvKTtcclxuICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWNvLnZhcmlhdGlvbiA9IHZhcmlhdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25zW2ldLmRlY29Ob2RlID0gZGVjbztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0VmFyaWF0aW9ucygpOiBEZWNvTm9kZVtdIHtcclxuICAgICAgICBpZiAodGhpcy5fZGVjb3MgJiYgdGhpcy5fZGVjb3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWNvcy5maWx0ZXIoKGRlY286IERlY29Ob2RlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVjby50eXBlID09PSBEZWNvTm9kZVR5cGUuVmFyaWF0aW9uO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2xvYWRWYXJpYXRpb25zKG9iajogVEhSRUUuT2JqZWN0M0QpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLl9sb2coJ2xvYWQgdmFyaWF0aW9uIGZvciBwYXJ0cycpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3ZhcmlhdGlvbkhlbHBlci5sb2FkUGFydChvYmosIHRoaXMuX2FkanVzdGFibGVzLCB0cnVlKTtcclxuICAgICAgICB0aGlzLl9sb2coJ2xvYWQgdmFyaWF0aW9uIGZvciBhZGp1c3RhYmxlcycpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3ZhcmlhdGlvbkhlbHBlci5sb2FkVmFyaWF0aW9uKG9iaiwgdGhpcy5fYWRqdXN0YWJsZXMsIHRydWUpO1xyXG4gICAgICAgIHRoaXMuX2xvZygnbG9hZCB2YXJpYXRpb24gZm9yIGFkZGFibGVzJyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fdmFyaWF0aW9uSGVscGVyLmxvYWRWYXJpYXRpb24ob2JqLCB0aGlzLl9hZGRhYmxlcywgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5fbG9nKCdsb2FkIHZhcmlhdGlvbiBjbGVhciBjYWNoZScpO1xyXG4gICAgICAgIHRoaXMuX3ZhcmlhdGlvbkhlbHBlci5jbGVhckNhY2hlKCk7XHJcbiAgICAgICAgdGhpcy5fbG9nKCdsb2FkIHZhcmlhdGlvbnMgZG9uZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2dldEFkanVzdGFibGVzKCk6IFNlbGVjdGlvbltdIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3NlbGVjdGlvbnMgfHwgIXRoaXMuX3NlbGVjdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbnMuZmlsdGVyKHMgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBub2RlOiBEZWNvTm9kZSA9IHMuZGVjb05vZGU7XHJcbiAgICAgICAgICAgIHJldHVybiBub2RlICYmIG5vZGUuZ2FtZU9iamVjdE5hbWUgJiYgbm9kZS50eXBlID09PSBEZWNvTm9kZVR5cGUuUGFydCAmJiBub2RlLmtpbmQgPT09IERlY29Ob2RlS2luZC5BZGp1c3RhYmxlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3VwZGF0ZVBpdm90KG9iajogVEhSRUUuT2JqZWN0M0QpIHtcclxuICAgICAgICBjb25zdCBib3VuZGluZ0JveCA9IG5ldyBUSFJFRS5Cb3gzKCkuc2V0RnJvbU9iamVjdChvYmopO1xyXG4gICAgICAgIGNvbnN0IGJiQ2VudGVyUGl2b3QgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gICAgICAgIGJvdW5kaW5nQm94LmdldENlbnRlcihiYkNlbnRlclBpdm90KTtcclxuICAgICAgICBjb25zdCBkZWx0YTogVEhSRUUuVmVjdG9yMyA9IG5ldyBUSFJFRS5WZWN0b3IzKCkuc3ViKGJiQ2VudGVyUGl2b3QpLnNldFkoTWF0aC5hYnMoTWF0aC5taW4oYm91bmRpbmdCb3gubWluLnksIDApKSk7XHJcblxyXG4gICAgICAgIG9iai5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNoaWxkLnBvc2l0aW9uLmFkZChkZWx0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgb2JqLnVwZGF0ZVdvcmxkTWF0cml4KGZhbHNlLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9yZXNldCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9wbGFjZWRBZGRhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fYWRqdXN0YWJsZXMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9hZGRhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIC8vIHRoaXMuX3ByZXBhcmVUaGVTZWxlY3Rpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfbG9nKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVidWcobWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG5ldyBEYXRlKCksIG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -12,8 +12,8 @@ class SelectionViewModel {
|
|
|
12
12
|
export class SelectionsComponent {
|
|
13
13
|
constructor(_builder) {
|
|
14
14
|
this._builder = _builder;
|
|
15
|
-
this.selectionViewModels = [];
|
|
16
15
|
this.selectionClick = new EventEmitter();
|
|
16
|
+
this.selectionViewModels = [];
|
|
17
17
|
}
|
|
18
18
|
set selections(value) {
|
|
19
19
|
this._prepareSelections(value);
|
|
@@ -126,4 +126,4 @@ SelectionsComponent.propDecorators = {
|
|
|
126
126
|
selections: [{ type: Input }],
|
|
127
127
|
selectionClick: [{ type: Output }]
|
|
128
128
|
};
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvc2VsZWN0aW9ucy9zZWxlY3Rpb25zLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU3RSxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRS9FLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFdEMsTUFBTSxrQkFBa0I7SUFBeEI7UUFFVyxhQUFRLEdBQWdCLEVBQUUsQ0FBQztRQUMzQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGNBQVMsR0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQztDQUFBO0FBaUVELE1BQU0sT0FBTyxtQkFBbUI7SUFZNUIsWUFBb0IsUUFBaUI7UUFBakIsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUw5Qix3QkFBbUIsR0FBeUIsRUFBRSxDQUFDO1FBRy9DLG1CQUFjLEdBQTRCLElBQUksWUFBWSxFQUFhLENBQUM7SUFFdkMsQ0FBQztJQVh6QyxJQUNXLFVBQVUsQ0FBQyxLQUFrQjtRQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFTTSxhQUFhLENBQUMsa0JBQXNDLEVBQUUsVUFBc0I7UUFDL0UsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVCLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3RDLGtCQUFrQixDQUFDLFFBQVEsR0FBRyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQztJQUMvRCxDQUFDO0lBRU0sZUFBZSxDQUFDLFNBQW9CLEVBQUUsVUFBc0I7UUFDL0QsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVCLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFYSxlQUFlOztZQUN6QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQU8sU0FBNkIsRUFBRSxFQUFFO29CQUNyRSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsNEJBQTRCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQWdCLEVBQUUsRUFBRTt3QkFDNUYsU0FBUyxDQUFDLFNBQVMsR0FBRyxRQUFRLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztvQkFDNUQsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQyxDQUFBLENBQUMsQ0FBQzthQUNOO1FBQ0wsQ0FBQztLQUFBO0lBRU8sa0JBQWtCLENBQUMsS0FBa0I7UUFDekMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxrQkFBc0MsQ0FBQztRQUMzQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2QsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEtBQUssQ0FBQyxFQUFFO2dCQUMzQixrQkFBa0IsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7Z0JBQzlDLGtCQUFrQixDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQzthQUNyRDtpQkFBTSxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEVBQUU7Z0JBQ2hDLElBQUksa0JBQWtCLEVBQUU7b0JBQ3BCLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZDO2FBQ0o7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OztZQWpISixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLFlBQVk7Z0JBQ3RCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBZ0RUO2dCQUlELFVBQVUsRUFBRTtvQkFDUixPQUFPLENBQUMsa0JBQWtCLEVBQUU7d0JBQ3hCLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUMsUUFBUSxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7d0JBQ3JDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUMsUUFBUSxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7d0JBQ2xDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUN6QyxDQUFDO2lCQUNMOzthQUNKOzs7WUF0RU8sT0FBTzs7O3lCQXlFVixLQUFLOzZCQVFMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIkBjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0aW9uXCI7XHJcbmltcG9ydCB7YW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xyXG5pbXBvcnQge0ltYWdlQ2FjaGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9pbWFnZS1jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtCdWlsZGVyfSBmcm9tIFwiLi4vLi4vYnVpbGRlclwiO1xyXG5cclxuY2xhc3MgU2VsZWN0aW9uVmlld01vZGVsIHtcclxuICAgIHB1YmxpYyBzZWxlY3Rpb246IFNlbGVjdGlvbjtcclxuICAgIHB1YmxpYyBjaGlsZHJlbjogU2VsZWN0aW9uW10gPSBbXTtcclxuICAgIHB1YmxpYyBleHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHRodW1ibmFpbDogc3RyaW5nID0gJyc7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwic2VsZWN0aW9uc1wiLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW9uZS1jb25maWd1cmF0b3JcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwLXNlbGVjdGlvbnMtc3VtbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgPGhlYWRlciBjbGFzcz1cImRyYXdlcl9faGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCIgW3RleHRDb250ZW50XT1cIidDb25maWd1cmF0aWUnXCI+PC9oMj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tPGJ1dHRvbj4tLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLTwvYnV0dG9uPi0tPlxyXG4gICAgICAgICAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0aW9ucy1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VsZWN0aW9uVmlld01vZGVsIG9mIHNlbGVjdGlvblZpZXdNb2RlbHNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjby1zdW1tYXJ5LWxpbmVcIiAoY2xpY2spPVwic2VsZWN0U2VsZWN0aW9uKHNlbGVjdGlvblZpZXdNb2RlbC5zZWxlY3Rpb24sICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Rpb24tdGh1bWJuYWlsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJwLWxvYWRlciAqbmdJZj1cInNlbGVjdGlvblZpZXdNb2RlbC50aHVtYm5haWwgPT09ICcnXCI+PC9ycC1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyB2aXNpYmlsaXR5T2JzZXJ2ZXIgKm5nSWY9XCJzZWxlY3Rpb25WaWV3TW9kZWwudGh1bWJuYWlsICE9PSAnJyAmJiBzZWxlY3Rpb25WaWV3TW9kZWwudGh1bWJuYWlsICE9PSBudWxsXCIgY2xhc3M9XCJzZWxlY3Rpb24taW1nXCIgW3NyY109XCJzZWxlY3Rpb25WaWV3TW9kZWwudGh1bWJuYWlsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJxdWVzdGlvblwiIFt0ZXh0Q29udGVudF09XCJzZWxlY3Rpb25WaWV3TW9kZWwuc2VsZWN0aW9uLnF1ZXN0aW9uXCI+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbnN3ZXJcIiBbdGV4dENvbnRlbnRdPVwic2VsZWN0aW9uVmlld01vZGVsLnNlbGVjdGlvbi5hbnN3ZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3Rpb25WaWV3TW9kZWwuY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiBzZWxlY3Rpb25WaWV3TW9kZWwuZXhwYW5kZWRcIiBAc2hvd0hpZGVDaGlsZHJlbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlsZC1zZWxlY3Rpb25cIiAqbmdGb3I9XCJsZXQgc2VsZWN0aW9uIG9mIHNlbGVjdGlvblZpZXdNb2RlbC5jaGlsZHJlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RTZWxlY3Rpb24oc2VsZWN0aW9uLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJxdWVzdGlvblwiIFt0ZXh0Q29udGVudF09XCJzZWxlY3Rpb24uY29tbWVyY2lhbFF1ZXN0aW9uXCI+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFuc3dlclwiIFt0ZXh0Q29udGVudF09XCJzZWxlY3Rpb24uYW5zd2VyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmljZS13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcmljZS12YWx1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYXBzZS13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlLWhhbmRsZVwiIFtjbGFzcy5leHBhbmRlZF09XCJzZWxlY3Rpb25WaWV3TW9kZWwuZXhwYW5kZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0aW9uVmlld01vZGVsLmNoaWxkcmVuLmxlbmd0aCA+IDBcIiAoY2xpY2spPVwiZXhwYW5kQ2xpY2tlZChzZWxlY3Rpb25WaWV3TW9kZWwsICRldmVudClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVVcmxzOiBbXHJcbiAgICAgICAgJy4uLy4uLy4uL3N0eWxlL3NoYXJlZC5zY3NzJ1xyXG4gICAgXSxcclxuICAgIGFuaW1hdGlvbnM6IFtcclxuICAgICAgICB0cmlnZ2VyKCdzaG93SGlkZUNoaWxkcmVuJywgW1xyXG4gICAgICAgICAgICBzdGF0ZSgndm9pZCcsIHN0eWxlKHsnaGVpZ2h0JzogJzAnfSkpLFxyXG4gICAgICAgICAgICBzdGF0ZSgnKicsIHN0eWxlKHsnaGVpZ2h0JzogJyonfSkpLFxyXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2b2lkIDw9PiAqJywgYW5pbWF0ZSgyMDApKVxyXG4gICAgICAgIF0pXHJcbiAgICBdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uc0NvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBzZWxlY3Rpb25zKHZhbHVlOiBTZWxlY3Rpb25bXSkge1xyXG4gICAgICAgIHRoaXMuX3ByZXBhcmVTZWxlY3Rpb25zKHZhbHVlKTtcclxuICAgICAgICB0aGlzLl9sb2FkVGh1bWJuYWlscygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3Rpb25WaWV3TW9kZWxzOiBTZWxlY3Rpb25WaWV3TW9kZWxbXSA9IFtdO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHNlbGVjdGlvbkNsaWNrOiBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uPigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2J1aWxkZXI6IEJ1aWxkZXIpIHt9XHJcblxyXG4gICAgcHVibGljIGV4cGFuZENsaWNrZWQoc2VsZWN0aW9uVmlld01vZGVsOiBTZWxlY3Rpb25WaWV3TW9kZWwsIG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgbW91c2VFdmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBzZWxlY3Rpb25WaWV3TW9kZWwuZXhwYW5kZWQgPSAhc2VsZWN0aW9uVmlld01vZGVsLmV4cGFuZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RTZWxlY3Rpb24oc2VsZWN0aW9uOiBTZWxlY3Rpb24sIG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgbW91c2VFdmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNsaWNrLm5leHQoc2VsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9sb2FkVGh1bWJuYWlscygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25WaWV3TW9kZWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25WaWV3TW9kZWxzLmZvckVhY2goYXN5bmMgKHZpZXdNb2RlbDogU2VsZWN0aW9uVmlld01vZGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9idWlsZGVyLmdldEltYWdlRm9yU2VsZWN0aW9uT3JBbnN3ZXIodmlld01vZGVsLnNlbGVjdGlvbikudGhlbigoaW1hZ2VTcmM6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlbC50aHVtYm5haWwgPSBpbWFnZVNyYyA9PT0gXCJcIiA/IG51bGwgOiBpbWFnZVNyYztcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcHJlcGFyZVNlbGVjdGlvbnModmFsdWU6IFNlbGVjdGlvbltdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25WaWV3TW9kZWxzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgbGV0IHNlbGVjdGlvblZpZXdNb2RlbDogU2VsZWN0aW9uVmlld01vZGVsO1xyXG4gICAgICAgIHZhbHVlLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzLnByZXNlbnRhdGlvbkxldmVsID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25WaWV3TW9kZWwgPSBuZXcgU2VsZWN0aW9uVmlld01vZGVsKCk7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25WaWV3TW9kZWwuc2VsZWN0aW9uID0gcztcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uVmlld01vZGVscy5wdXNoKHNlbGVjdGlvblZpZXdNb2RlbCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocy5wcmVzZW50YXRpb25MZXZlbCA+IDEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25WaWV3TW9kZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25WaWV3TW9kZWwuY2hpbGRyZW4ucHVzaChzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvc2VsZWN0aW9ucy9zZWxlY3Rpb25zLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU3RSxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRS9FLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFdEMsTUFBTSxrQkFBa0I7SUFBeEI7UUFFVyxhQUFRLEdBQWdCLEVBQUUsQ0FBQztRQUMzQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGNBQVMsR0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQztDQUFBO0FBaUVELE1BQU0sT0FBTyxtQkFBbUI7SUFZNUIsWUFBb0IsUUFBaUI7UUFBakIsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUo5QixtQkFBYyxHQUE0QixJQUFJLFlBQVksRUFBYSxDQUFDO1FBRXhFLHdCQUFtQixHQUF5QixFQUFFLENBQUM7SUFFZCxDQUFDO0lBWHpDLElBQ1csVUFBVSxDQUFDLEtBQWtCO1FBQ3BDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQVNNLGFBQWEsQ0FBQyxrQkFBc0MsRUFBRSxVQUFzQjtRQUMvRSxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUIsVUFBVSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDdEMsa0JBQWtCLENBQUMsUUFBUSxHQUFHLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDO0lBQy9ELENBQUM7SUFFTSxlQUFlLENBQUMsU0FBb0IsRUFBRSxVQUFzQjtRQUMvRCxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUIsVUFBVSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVhLGVBQWU7O1lBQ3pCLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBTyxTQUE2QixFQUFFLEVBQUU7b0JBQ3JFLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBZ0IsRUFBRSxFQUFFO3dCQUM1RixTQUFTLENBQUMsU0FBUyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO29CQUM1RCxDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDLENBQUEsQ0FBQyxDQUFDO2FBQ047UUFDTCxDQUFDO0tBQUE7SUFFTyxrQkFBa0IsQ0FBQyxLQUFrQjtRQUN6QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNwQyxJQUFJLGtCQUFzQyxDQUFDO1FBQzNDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDZCxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLEVBQUU7Z0JBQzNCLGtCQUFrQixHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztnQkFDOUMsa0JBQWtCLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2FBQ3JEO2lCQUFNLElBQUksQ0FBQyxDQUFDLGlCQUFpQixHQUFHLENBQUMsRUFBRTtnQkFDaEMsSUFBSSxrQkFBa0IsRUFBRTtvQkFDcEIsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdkM7YUFDSjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7O1lBakhKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FnRFQ7Z0JBSUQsVUFBVSxFQUFFO29CQUNSLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTt3QkFDeEIsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBQyxRQUFRLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQzt3QkFDckMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBQyxRQUFRLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQzt3QkFDbEMsVUFBVSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ3pDLENBQUM7aUJBQ0w7O2FBQ0o7OztZQXRFTyxPQUFPOzs7eUJBeUVWLEtBQUs7NkJBTUwsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9zZWxlY3Rpb25cIjtcclxuaW1wb3J0IHthbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XHJcbmltcG9ydCB7SW1hZ2VDYWNoZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ltYWdlLWNhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0J1aWxkZXJ9IGZyb20gXCIuLi8uLi9idWlsZGVyXCI7XHJcblxyXG5jbGFzcyBTZWxlY3Rpb25WaWV3TW9kZWwge1xyXG4gICAgcHVibGljIHNlbGVjdGlvbjogU2VsZWN0aW9uO1xyXG4gICAgcHVibGljIGNoaWxkcmVuOiBTZWxlY3Rpb25bXSA9IFtdO1xyXG4gICAgcHVibGljIGV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgdGh1bWJuYWlsOiBzdHJpbmcgPSAnJztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJzZWxlY3Rpb25zXCIsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpb25lLWNvbmZpZ3VyYXRvclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnAtc2VsZWN0aW9ucy1zdW1tYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICA8aGVhZGVyIGNsYXNzPVwiZHJhd2VyX19oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIiBbdGV4dENvbnRlbnRdPVwiJ0NvbmZpZ3VyYXRpZSdcIj48L2gyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS08YnV0dG9uPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0tLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tPC9idXR0b24+LS0+XHJcbiAgICAgICAgICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Rpb25zLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWxlY3Rpb25WaWV3TW9kZWwgb2Ygc2VsZWN0aW9uVmlld01vZGVsc1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvLXN1bW1hcnktbGluZVwiIChjbGljayk9XCJzZWxlY3RTZWxlY3Rpb24oc2VsZWN0aW9uVmlld01vZGVsLnNlbGVjdGlvbiwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGlvbi10aHVtYm5haWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnAtbG9hZGVyICpuZ0lmPVwic2VsZWN0aW9uVmlld01vZGVsLnRodW1ibmFpbCA9PT0gJydcIj48L3JwLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHZpc2liaWxpdHlPYnNlcnZlciAqbmdJZj1cInNlbGVjdGlvblZpZXdNb2RlbC50aHVtYm5haWwgIT09ICcnICYmIHNlbGVjdGlvblZpZXdNb2RlbC50aHVtYm5haWwgIT09IG51bGxcIiBjbGFzcz1cInNlbGVjdGlvbi1pbWdcIiBbc3JjXT1cInNlbGVjdGlvblZpZXdNb2RlbC50aHVtYm5haWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInF1ZXN0aW9uXCIgW3RleHRDb250ZW50XT1cInNlbGVjdGlvblZpZXdNb2RlbC5zZWxlY3Rpb24ucXVlc3Rpb25cIj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFuc3dlclwiIFt0ZXh0Q29udGVudF09XCJzZWxlY3Rpb25WaWV3TW9kZWwuc2VsZWN0aW9uLmFuc3dlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGlvblZpZXdNb2RlbC5jaGlsZHJlbi5sZW5ndGggPiAwICYmIHNlbGVjdGlvblZpZXdNb2RlbC5leHBhbmRlZFwiIEBzaG93SGlkZUNoaWxkcmVuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaWxkLXNlbGVjdGlvblwiICpuZ0Zvcj1cImxldCBzZWxlY3Rpb24gb2Ygc2VsZWN0aW9uVmlld01vZGVsLmNoaWxkcmVuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFNlbGVjdGlvbihzZWxlY3Rpb24sICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInF1ZXN0aW9uXCIgW3RleHRDb250ZW50XT1cInNlbGVjdGlvbi5jb21tZXJjaWFsUXVlc3Rpb25cIj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYW5zd2VyXCIgW3RleHRDb250ZW50XT1cInNlbGVjdGlvbi5hbnN3ZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByaWNlLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInByaWNlLXZhbHVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UtaGFuZGxlXCIgW2NsYXNzLmV4cGFuZGVkXT1cInNlbGVjdGlvblZpZXdNb2RlbC5leHBhbmRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3Rpb25WaWV3TW9kZWwuY2hpbGRyZW4ubGVuZ3RoID4gMFwiIChjbGljayk9XCJleHBhbmRDbGlja2VkKHNlbGVjdGlvblZpZXdNb2RlbCwgJGV2ZW50KVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIGAsXHJcbiAgICBzdHlsZVVybHM6IFtcclxuICAgICAgICAnLi4vLi4vLi4vc3R5bGUvc2hhcmVkLnNjc3MnXHJcbiAgICBdLFxyXG4gICAgYW5pbWF0aW9uczogW1xyXG4gICAgICAgIHRyaWdnZXIoJ3Nob3dIaWRlQ2hpbGRyZW4nLCBbXHJcbiAgICAgICAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeydoZWlnaHQnOiAnMCd9KSksXHJcbiAgICAgICAgICAgIHN0YXRlKCcqJywgc3R5bGUoeydoZWlnaHQnOiAnKid9KSksXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPD0+IConLCBhbmltYXRlKDIwMCkpXHJcbiAgICAgICAgXSlcclxuICAgIF1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25zQ29tcG9uZW50IHtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IHNlbGVjdGlvbnModmFsdWU6IFNlbGVjdGlvbltdKSB7XHJcbiAgICAgICAgdGhpcy5fcHJlcGFyZVNlbGVjdGlvbnModmFsdWUpO1xyXG4gICAgICAgIHRoaXMuX2xvYWRUaHVtYm5haWxzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgc2VsZWN0aW9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxTZWxlY3Rpb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3Rpb24+KCk7XHJcblxyXG4gICAgcHVibGljIHNlbGVjdGlvblZpZXdNb2RlbHM6IFNlbGVjdGlvblZpZXdNb2RlbFtdID0gW107XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfYnVpbGRlcjogQnVpbGRlcikge31cclxuXHJcbiAgICBwdWJsaWMgZXhwYW5kQ2xpY2tlZChzZWxlY3Rpb25WaWV3TW9kZWw6IFNlbGVjdGlvblZpZXdNb2RlbCwgbW91c2VFdmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBtb3VzZUV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIHNlbGVjdGlvblZpZXdNb2RlbC5leHBhbmRlZCA9ICFzZWxlY3Rpb25WaWV3TW9kZWwuZXhwYW5kZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlbGVjdFNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbiwgbW91c2VFdmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBtb3VzZUV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2xpY2submV4dChzZWxlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2xvYWRUaHVtYm5haWxzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblZpZXdNb2RlbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblZpZXdNb2RlbHMuZm9yRWFjaChhc3luYyAodmlld01vZGVsOiBTZWxlY3Rpb25WaWV3TW9kZWwpID0+IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2J1aWxkZXIuZ2V0SW1hZ2VGb3JTZWxlY3Rpb25PckFuc3dlcih2aWV3TW9kZWwuc2VsZWN0aW9uKS50aGVuKChpbWFnZVNyYzogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGVsLnRodW1ibmFpbCA9IGltYWdlU3JjID09PSBcIlwiID8gbnVsbCA6IGltYWdlU3JjO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9wcmVwYXJlU2VsZWN0aW9ucyh2YWx1ZTogU2VsZWN0aW9uW10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvblZpZXdNb2RlbHMubGVuZ3RoID0gMDtcclxuICAgICAgICBsZXQgc2VsZWN0aW9uVmlld01vZGVsOiBTZWxlY3Rpb25WaWV3TW9kZWw7XHJcbiAgICAgICAgdmFsdWUuZm9yRWFjaChzID0+IHtcclxuICAgICAgICAgICAgaWYgKHMucHJlc2VudGF0aW9uTGV2ZWwgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvblZpZXdNb2RlbCA9IG5ldyBTZWxlY3Rpb25WaWV3TW9kZWwoKTtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvblZpZXdNb2RlbC5zZWxlY3Rpb24gPSBzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25WaWV3TW9kZWxzLnB1c2goc2VsZWN0aW9uVmlld01vZGVsKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzLnByZXNlbnRhdGlvbkxldmVsID4gMSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvblZpZXdNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblZpZXdNb2RlbC5jaGlsZHJlbi5wdXNoKHMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|