@schneideress/dashboardframework 0.0.274 → 0.0.276
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/bundles/schneideress-dashboardframework.umd.js +139 -443
- package/bundles/schneideress-dashboardframework.umd.js.map +1 -1
- package/bundles/schneideress-dashboardframework.umd.min.js +15 -1
- package/bundles/schneideress-dashboardframework.umd.min.js.map +1 -1
- package/esm2015/gridster/lib/gridsterItem.component.js +1 -1
- package/esm2015/gridster/lib/gridsterRenderer.service.js +1 -1
- package/esm2015/lib/ra-dashboard-area/ra.dashboard.area.js +75 -171
- package/esm2015/lib/ra-widget-container/ra.widget.container.component.js +36 -66
- package/esm2015/lib/ra.base.dashboard.template.js +2 -4
- package/esm2015/lib/ra.dashboard.responsive.service.js +2 -12
- package/esm2015/lib/ra.dashboard.service.js +2 -7
- package/esm2015/lib/ra.event.enum.js +1 -7
- package/esm2015/lib/ra.gridster.config.js +3 -3
- package/esm5/gridster/lib/gridsterItem.component.js +1 -1
- package/esm5/gridster/lib/gridsterRenderer.service.js +1 -1
- package/esm5/lib/ra-dashboard-area/ra.dashboard.area.js +75 -173
- package/esm5/lib/ra-widget-container/ra.widget.container.component.js +36 -66
- package/esm5/lib/ra.base.dashboard.template.js +2 -4
- package/esm5/lib/ra.dashboard.responsive.service.js +2 -12
- package/esm5/lib/ra.dashboard.service.js +2 -7
- package/esm5/lib/ra.event.enum.js +1 -7
- package/esm5/lib/ra.gridster.config.js +3 -3
- package/fesm2015/schneideress-dashboardframework.js +114 -263
- package/fesm2015/schneideress-dashboardframework.js.map +1 -1
- package/fesm5/schneideress-dashboardframework.js +115 -266
- package/fesm5/schneideress-dashboardframework.js.map +1 -1
- package/lib/ra-dashboard-area/ra.dashboard.area.d.ts +5 -25
- package/lib/ra-widget-container/ra.widget.container.component.d.ts +2 -6
- package/lib/ra.base.dashboard.template.d.ts +2 -4
- package/lib/ra.dashboard.responsive.service.d.ts +1 -1
- package/lib/ra.dashboard.service.d.ts +1 -0
- package/lib/ra.event.enum.d.ts +1 -7
- package/package.json +1 -1
- package/schneideress-dashboardframework.metadata.json +1 -1
|
@@ -52,11 +52,8 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
52
52
|
this.showExcell = true;
|
|
53
53
|
this.hideTitle = false;
|
|
54
54
|
this.inapplicableFilters = [];
|
|
55
|
-
this.canLoadData = false;
|
|
56
55
|
this.widgetDeleted = new EventEmitter();
|
|
57
56
|
this.updateAppliedFilters = new EventEmitter();
|
|
58
|
-
this.dataLoaded = new EventEmitter();
|
|
59
|
-
this.widgetLoaded = new EventEmitter();
|
|
60
57
|
this.isWidgetStateApplicable = false;
|
|
61
58
|
this.widgetEmptyState = '';
|
|
62
59
|
this.lockVisible = false;
|
|
@@ -81,7 +78,7 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
81
78
|
configurable: true
|
|
82
79
|
});
|
|
83
80
|
RAWidgetContainer.prototype.ngOnInit = function () {
|
|
84
|
-
this.WidgetDisplayName = this.
|
|
81
|
+
this.WidgetDisplayName = this.getwidgetTitleTranslation(this.data.widgetInfo.widgetTitle);
|
|
85
82
|
this.lockIconTitle = this.translateService.translate('Common.lockedfields');
|
|
86
83
|
this.lockIconFooter = this.translateService.translate('Common.lockedfieldseditinfo');
|
|
87
84
|
this.inapplicableIconTitle = this.translateService.translate('Common.InapplicableFilters');
|
|
@@ -102,32 +99,19 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
102
99
|
});
|
|
103
100
|
});
|
|
104
101
|
}
|
|
105
|
-
if (this.widgetElement) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
if (changes.globalFilter && changes.globalFilter.currentValue != changes.globalFilter.previousValue) {
|
|
112
|
-
if (!this.dashboardInfo.curatedFilters) {
|
|
113
|
-
var filterObj = this.getParsedConfig(this.globalFilter);
|
|
114
|
-
if (filterObj.WidgetInstanceId) {
|
|
115
|
-
if (this.data.widgetInfo.widgetInstanceId != filterObj.WidgetInstanceId)
|
|
116
|
-
this.refreshWidget(this.data.widgetInfo);
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
//this.refreshWidget(this.data.widgetInfo);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
102
|
+
if (this.widgetElement && changes.globalFilter && changes.globalFilter.currentValue != changes.globalFilter.previousValue) {
|
|
103
|
+
var filterObj = this.getParsedConfig(this.globalFilter);
|
|
104
|
+
if (filterObj.WidgetInstanceId) {
|
|
105
|
+
if (this.data.widgetInfo.widgetInstanceId != filterObj.WidgetInstanceId)
|
|
106
|
+
this.refreshWidget(this.data.widgetInfo);
|
|
122
107
|
}
|
|
123
|
-
|
|
124
|
-
(
|
|
125
|
-
this.invokeWidgetResizedEvent();
|
|
108
|
+
else {
|
|
109
|
+
this.refreshWidget(this.data.widgetInfo);
|
|
126
110
|
}
|
|
127
111
|
}
|
|
128
|
-
if (changes.
|
|
129
|
-
|
|
130
|
-
|
|
112
|
+
if (changes.width && changes.width.currentValue != changes.width.previousValue ||
|
|
113
|
+
(changes.height && changes.height.currentValue != changes.height.previousValue)) {
|
|
114
|
+
this.invokeWidgetResizedEvent();
|
|
131
115
|
}
|
|
132
116
|
};
|
|
133
117
|
RAWidgetContainer.prototype.invokeWidgetResizedEvent = function () {
|
|
@@ -319,10 +303,6 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
319
303
|
_this.showPanel = true;
|
|
320
304
|
else
|
|
321
305
|
_this.showPanel = false;
|
|
322
|
-
if (!_this.data.dataLoaded) {
|
|
323
|
-
_this.data.dataLoaded = true;
|
|
324
|
-
_this.dataLoaded.emit(_this.widgetElement);
|
|
325
|
-
}
|
|
326
306
|
break;
|
|
327
307
|
case 'onConfigEditClicked':
|
|
328
308
|
_this.editWidget();
|
|
@@ -395,9 +375,7 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
395
375
|
widgetConfigFilter.configChanges = this.getConfigChanges(false);
|
|
396
376
|
widgetConfigFilter.widgetInfo.widgetName = widgetInfo.widgetName;
|
|
397
377
|
widgetConfigFilter.globalFilter = this.globalFilter;
|
|
398
|
-
|
|
399
|
-
//this.widgetElement.loadContent(widgetConfigFilter);
|
|
400
|
-
this.widgetLoaded.emit();
|
|
378
|
+
this.widgetElement.loadContent(widgetConfigFilter);
|
|
401
379
|
return [4 /*yield*/, this.setLock(widgetConfigFilter.config)];
|
|
402
380
|
case 1:
|
|
403
381
|
_a.sent();
|
|
@@ -480,8 +458,7 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
480
458
|
globalFilter: this.globalFilter,
|
|
481
459
|
appConfig: this.appConfig,
|
|
482
460
|
widgetInfo: widgetInfo,
|
|
483
|
-
configChanges: this.getConfigChanges(configChanged)
|
|
484
|
-
dashboardInfo: this.dashboardInfo
|
|
461
|
+
configChanges: this.getConfigChanges(configChanged)
|
|
485
462
|
};
|
|
486
463
|
if (!widgetContainerContext.isWidgetLoaded) return [3 /*break*/, 3];
|
|
487
464
|
if (this.widgetElement && typeof (this.widgetElement.setConfigFilter) == 'function') {
|
|
@@ -668,12 +645,9 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
668
645
|
var html = '<div id="ra-db-widget-menu"' + 'style="' + style + '" class="download-content dropdown-content widget-config-item dropdown-click" style="z-index: 1002;">';
|
|
669
646
|
var settings = '';
|
|
670
647
|
if (this.isWidgetMgmnt) {
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
settings += this.getHtmlForButton('wcCopyWidget', 'fal fa-copy', this.copyText);
|
|
675
|
-
if (!this.data.widgetInfo.templateWidgetSettings || !this.data.widgetInfo.templateWidgetSettings.hideMove)
|
|
676
|
-
settings += this.getHtmlForButton('wcMoveWidget', 'fal fa-arrows-alt', this.moveText);
|
|
648
|
+
settings += this.getHtmlForButton('wcEditWidget', 'fal fa-edit', this.editText);
|
|
649
|
+
settings += this.getHtmlForButton('wcCopyWidget', 'fal fa-copy', this.copyText);
|
|
650
|
+
settings += this.getHtmlForButton('wcMoveWidget', 'fal fa-arrows-alt', this.moveText);
|
|
677
651
|
}
|
|
678
652
|
var customPageParams = false;
|
|
679
653
|
if (this.data.widgetInfo && this.data.widgetInfo.widgetSettings) {
|
|
@@ -682,14 +656,14 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
682
656
|
customPageParams = true;
|
|
683
657
|
}
|
|
684
658
|
}
|
|
685
|
-
if (
|
|
659
|
+
if ((this.detailPageUrl || customPageParams) && this.checkVisitLinkVisiblity()) {
|
|
686
660
|
settings += '<a style="max-height: 30px;align-items: center;align-content: center; display: flex;" id="wcVisitWidget">';
|
|
687
661
|
settings += '<i style="padding-left: 4px;font-size: 27px !important;" class="fal fa-angle-right"></i> ';
|
|
688
662
|
settings += '<span style="padding-left: 11px;margin-top: 2px;" style="padding-left: 6px;">';
|
|
689
663
|
settings += this.translateService.translate('Common.visitpage');
|
|
690
664
|
settings += '</span></a>';
|
|
691
665
|
}
|
|
692
|
-
if (
|
|
666
|
+
if ((this.detailPageUrl && this.checkVisitLinkVisiblity()) || this.isWidgetMgmnt) {
|
|
693
667
|
html += '<div style="color: #9FA0A4;font-size: 12px;padding-top: 8px;padding-left: 12px;">';
|
|
694
668
|
html += this.translateService.translate('Common.settings') + '</div>';
|
|
695
669
|
html += settings;
|
|
@@ -721,7 +695,7 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
721
695
|
if (this.isDownloadIconVisible && this.isWidgetMgmnt && this.showExcell) {
|
|
722
696
|
html += this.getHr();
|
|
723
697
|
}
|
|
724
|
-
if (this.isWidgetMgmnt
|
|
698
|
+
if (this.isWidgetMgmnt) {
|
|
725
699
|
html += '<a id="wcWidgetDelete"><i class="fal fa-times" style="padding-left: 3px;color: red;"></i><span>';
|
|
726
700
|
html += this.deleteText;
|
|
727
701
|
html += '</span></a>';
|
|
@@ -802,6 +776,22 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
802
776
|
if (this.currentComponent)
|
|
803
777
|
this.popupInstance.removeMe(this.currentComponent);
|
|
804
778
|
};
|
|
779
|
+
RAWidgetContainer.prototype.getwidgetTitleTranslation = function (item) {
|
|
780
|
+
var rKey = 'DBW_' + this.translateService.makeCode(item);
|
|
781
|
+
var translatedString = '';
|
|
782
|
+
if (this.dashboardService.clientId) {
|
|
783
|
+
var translationModule = this.dashboardService.clientId + '_DBW';
|
|
784
|
+
translatedString = this.translateService.translate(translationModule + '.' + rKey);
|
|
785
|
+
if (translatedString.toLowerCase() === rKey.toLowerCase()) {
|
|
786
|
+
return item;
|
|
787
|
+
}
|
|
788
|
+
else {
|
|
789
|
+
return translatedString;
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
else
|
|
793
|
+
return item;
|
|
794
|
+
};
|
|
805
795
|
RAWidgetContainer.ctorParameters = function () { return [
|
|
806
796
|
{ type: RaDashboardService },
|
|
807
797
|
{ type: NgxUiLoaderService },
|
|
@@ -844,10 +834,6 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
844
834
|
Input('global-filter'),
|
|
845
835
|
tslib_1.__metadata("design:type", Object)
|
|
846
836
|
], RAWidgetContainer.prototype, "globalFilter", void 0);
|
|
847
|
-
tslib_1.__decorate([
|
|
848
|
-
Input('dashboard-info'),
|
|
849
|
-
tslib_1.__metadata("design:type", Object)
|
|
850
|
-
], RAWidgetContainer.prototype, "dashboardInfo", void 0);
|
|
851
837
|
tslib_1.__decorate([
|
|
852
838
|
Input('data'),
|
|
853
839
|
tslib_1.__metadata("design:type", Object)
|
|
@@ -872,14 +858,6 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
872
858
|
Input('grid-cell-height'),
|
|
873
859
|
tslib_1.__metadata("design:type", Number)
|
|
874
860
|
], RAWidgetContainer.prototype, "gridCellHeight", void 0);
|
|
875
|
-
tslib_1.__decorate([
|
|
876
|
-
Input('bulk-action-data'),
|
|
877
|
-
tslib_1.__metadata("design:type", Object)
|
|
878
|
-
], RAWidgetContainer.prototype, "bulkActionData", void 0);
|
|
879
|
-
tslib_1.__decorate([
|
|
880
|
-
Input(),
|
|
881
|
-
tslib_1.__metadata("design:type", Boolean)
|
|
882
|
-
], RAWidgetContainer.prototype, "canLoadData", void 0);
|
|
883
861
|
tslib_1.__decorate([
|
|
884
862
|
Output(),
|
|
885
863
|
tslib_1.__metadata("design:type", Object)
|
|
@@ -888,14 +866,6 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
888
866
|
Output(),
|
|
889
867
|
tslib_1.__metadata("design:type", Object)
|
|
890
868
|
], RAWidgetContainer.prototype, "updateAppliedFilters", void 0);
|
|
891
|
-
tslib_1.__decorate([
|
|
892
|
-
Output(),
|
|
893
|
-
tslib_1.__metadata("design:type", Object)
|
|
894
|
-
], RAWidgetContainer.prototype, "dataLoaded", void 0);
|
|
895
|
-
tslib_1.__decorate([
|
|
896
|
-
Output(),
|
|
897
|
-
tslib_1.__metadata("design:type", Object)
|
|
898
|
-
], RAWidgetContainer.prototype, "widgetLoaded", void 0);
|
|
899
869
|
tslib_1.__decorate([
|
|
900
870
|
Input('dom-resized'),
|
|
901
871
|
tslib_1.__metadata("design:type", Boolean),
|
|
@@ -918,4 +888,4 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
918
888
|
return RAWidgetContainer;
|
|
919
889
|
}());
|
|
920
890
|
export { RAWidgetContainer };
|
|
921
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS13aWRnZXQtY29udGFpbmVyL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeE0sT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQWdELGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQStDLE1BQU0sK0JBQStCLENBQUM7QUFDak4sT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBU25FO0lBNEZFLDJCQUFvQixnQkFBb0MsRUFDOUMsVUFBOEIsRUFDOUIsZ0JBQW9DLEVBQ3BDLE1BQWMsRUFDZCxRQUF5QixFQUN6QixRQUFtQixFQUNuQixtQkFBd0Ms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QUMzQztRQUFULE1BQU0sRUFBRTs7bUVBQTJDO0lBQzFDO1FBQVQsTUFBTSxFQUFFOzt5REFBaUM7SUFDaEM7UUFBVCxNQUFNLEVBQUU7OzJEQUFtQztJQWU1QztRQURDLEtBQUssQ0FBQyxhQUFhLENBQUM7Ozt1REFHcEI7SUExRlUsaUJBQWlCO1FBSjdCLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxxQkFBcUI7WUFDL0IsdXpIQUFtRDtTQUNwRCxDQUFDO2lEQTZGc0Msa0JBQWtCO1lBQ2xDLGtCQUFrQjtZQUNaLGtCQUFrQjtZQUM1QixNQUFNO1lBQ0osZUFBZTtZQUNmLFNBQVM7WUFDRSxtQkFBbUI7WUFDNUIsVUFBVTtPQW5HckIsaUJBQWlCLENBczBCN0I7SUFBRCx3QkFBQztDQUFBLEFBdDBCRCxJQXMwQkM7U0F0MEJZLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBTaW1wbGVDaGFuZ2UsIE9uRGVzdHJveSwgTmdab25lLCBSZW5kZXJlcjIsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJhRGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4vLi4vcmEuZGFzaGJvYXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSQURhc2hib2FyZEV2ZW50QnVzIH0gZnJvbSAnLi4vcmEuZGFzaGJhcmQuZXZlbnQuYnVzJztcclxuaW1wb3J0IHsgUkFFdmVudCwgUkFFdmVudEtleSB9IGZyb20gJy4uL3JhLmV2ZW50LmVudW0nO1xyXG5pbXBvcnQgeyBJQXBwQ29uZmlnLCBJV2lkZ2V0Q29uZmlnRmlsdGVyLCBJV2lkZ2V0SW5mbywgUkFEb3dubG9hZFR5cGUsIFJBRG93bmxvYWRPcHRpb24sIFJhV2lkZ2V0bG9ja1N0YXR1cywgV2lkZ2V0Vmlld1N0YXRlLCBJY29uZmlnQ2hhbmdlcywgSUJ1bGtBY3Rpb24sIElEYXNoYm9hcmRJbmZvIH0gZnJvbSAnQHNjaG5laWRlcmVzcy93aWRnZXRmcmFtZXdvcmsnO1xyXG5pbXBvcnQgeyBOZ3hVaUxvYWRlclNlcnZpY2UgfSBmcm9tICduZ3gtdWktbG9hZGVyJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1ub3RpZmllcic7XHJcbmltcG9ydCB7IFJBVHJhbnNsYXRlU2VydmljZSwgUkFQZXJtaXNzaW9uU2VydmljZSwgRG9tU2VydmljZSB9IGZyb20gJ0BzY2huZWlkZXJlc3MvcmEtY29tbW9uJztcclxuaW1wb3J0IHsgTG9ja1Rvb2x0aXAgfSBmcm9tICcuL2xvY2stdG9vbHRpcC9sb2NrLnRvb2x0aXAuY29tcG9uZW50J1xyXG5cclxuZGVjbGFyZSB2YXIgalF1ZXJ5OiBhbnk7XHJcbmRlY2xhcmUgdmFyIHdpbmRvdzogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyYS13aWRnZXQtY29udGFpbmVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJBV2lkZ2V0Q29udGFpbmVyIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyBzaG93UGFuZWw6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgaXNXaWRnZXRMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHdpZGdldEVsZW1lbnQ6IGFueTtcclxuICBwcml2YXRlIGNvbmZpZ0NoYW5nZWQ6IGFueTtcclxuICBwdWJsaWMgd2lkZ2V0SGVpZ2h0OiBudW1iZXI7XHJcbiAgcHVibGljIGxvY2tDbGFzczogc3RyaW5nID0gXCJ1bmxvY2tlZFwiO1xyXG4gIHB1YmxpYyBsb2NrU3RhdHVzOiBSYVdpZGdldGxvY2tTdGF0dXMgPSBSYVdpZGdldGxvY2tTdGF0dXMuVW5sb2NrZWQ7XHJcbiAgcHVibGljIGlzRG93bmxvYWRJY29uVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0NoYXJ0RG93bmxvYWRWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzR3JpZERvd25sb2FkVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkb3dubG9hZEljb25UeXBlOiBSQURvd25sb2FkVHlwZTtcclxuICBwdWJsaWMgZW5hYmxlVGl0bGVMaW5lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzR2xvYmFsRmlsdGVyQXBwbGllZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB0b29sVGlwVmFsdWU6IHN0cmluZyA9ICcgICc7XHJcbiAgcHVibGljIHRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIGxvY2tEZXRhaWxzOiBhbnk7XHJcbiAgcHVibGljIGxvY2tUZW1wbGF0ZUluZm86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgcHVibGljIGVkaXRUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgY29weVRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBtb3ZlVG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGV4Y2VsVG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGRlbGV0ZVRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBlZGl0VGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGNvcHlUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgbW92ZVRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBleGNlbFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBkZWxldGVUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZWRpdFRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIGNvcHlUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBtb3ZlVG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgZXhjZWxUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBkZWxldGVUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyB3aWRnZXRTZXR0aW5nczogYW55O1xyXG4gIHB1YmxpYyBub1BhZGRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNNb3VzZUhvdmVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dTZXR0aW5nc0xpbms6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBpc0twaVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0V4Y2VsbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGhpZGVUaXRsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbmFwcGxpY2FibGVGaWx0ZXJzOiBhbnkgPSBbXTtcclxuICBwdWJsaWMgcG9wdXBJbnN0YW5jZTogTG9ja1Rvb2x0aXA7XHJcbiAgcHVibGljIGN1cnJlbnRDb21wb25lbnQ6IGFueTtcclxuXHJcbiAgcHVibGljIGxvY2tJY29uVGl0bGU6IGFueTtcclxuICBwdWJsaWMgbG9ja0ljb25Gb290ZXI6IGFueTtcclxuICBwdWJsaWMgaW5hcHBsaWNhYmxlSWNvblRpdGxlOiBhbnk7XHJcbiAgcHVibGljIGluYXBwbGljYWJsZUljb25Gb290ZXI6IGFueTtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2N0bFdpZGdldCcsIHsgc3RhdGljOiBmYWxzZSB9KSBjdGxXaWRnZXQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnd2lkZ2V0RHJvcGRvd24nLCB7IHN0YXRpYzogZmFsc2UgfSkgd2lkZ2V0RHJvcGRvd246IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgc2VhcmNoSW5wdXQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnd2NXcmFwcGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIHdjV3JhcHBlcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdiYW5Qb3B1cERpdicsIHsgc3RhdGljOiBmYWxzZSB9KSBiYW5Qb3B1cERpdjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdsb2NrUG9wdXBEaXYnLCB7IHN0YXRpYzogZmFsc2UgfSkgbG9ja1BvcHVwRGl2OiBFbGVtZW50UmVmO1xyXG5cclxuICBASW5wdXQoJ3dpZGdldC1pbnN0YW5jZS1pZCcpIHdpZGdldEluc3RhbmNlSWQ6IG51bWJlcjtcclxuICBASW5wdXQoJ2dsb2JhbC1maWx0ZXInKSBnbG9iYWxGaWx0ZXI6IGFueTtcclxuICBASW5wdXQoJ2Rhc2hib2FyZC1pbmZvJykgZGFzaGJvYXJkSW5mbzogSURhc2hib2FyZEluZm87XHJcbiAgQElucHV0KCdkYXRhJykgZGF0YTogYW55O1xyXG4gIEBJbnB1dCgnZXZlbnQtYnVzJykgcmFEYXNoYm9hcmRFdmVudEJ1czogUkFEYXNoYm9hcmRFdmVudEJ1cztcclxuICBASW5wdXQoJ2FwcC1jb25maWcnKSBhcHBDb25maWc6IElBcHBDb25maWc7XHJcbiAgQElucHV0KCd3aWRnZXQtd2lkdGgnKSB3aWR0aDogbnVtYmVyO1xyXG4gIEBJbnB1dCgnd2lkZ2V0LWhlaWdodCcpIGhlaWdodDogbnVtYmVyO1xyXG4gIEBJbnB1dCgnZ3JpZC1jZWxsLWhlaWdodCcpIGdyaWRDZWxsSGVpZ2h0OiBudW1iZXI7XHJcbiAgQElucHV0KCdidWxrLWFjdGlvbi1kYXRhJykgYnVsa0FjdGlvbkRhdGE6IElCdWxrQWN0aW9uO1xyXG4gIEBJbnB1dCgpIGNhbkxvYWREYXRhOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSB3aWRnZXREZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIHVwZGF0ZUFwcGxpZWRGaWx0ZXJzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkYXRhTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB3aWRnZXRMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHB1YmxpYyBsb2NrVGl0bGU6IHN0cmluZztcclxuICBwdWJsaWMgaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgd2lkZ2V0RW1wdHlTdGF0ZTogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGRvbVJlc2l6ZWQ6IGJvb2xlYW47XHJcbiAgcHVibGljIGxvY2tWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGxvY2tlZEZpZWxkczogYW55O1xyXG4gIHB1YmxpYyBkZXRhaWxQYWdlVXJsOiBzdHJpbmc7XHJcbiAgcHVibGljIGJhc2VVcmw6IHN0cmluZztcclxuICBwdWJsaWMgaXNXaWRnZXRNZ21udDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBXaWRnZXREaXNwbGF5TmFtZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBlbmFibGVUaXRsZUxpbmVBY3R1YWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgd2lkZ2V0RWxlbWVudEhhbmRsZXI6IGFueTtcclxuICBASW5wdXQoJ2RvbS1yZXNpemVkJylcclxuICBzZXQgc2V0UmVzaXplZChyZXNpemVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmludm9rZVdpZGdldFJlc2l6ZWRFdmVudCgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBSYURhc2hib2FyZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5neFNlcnZpY2U6IE5neFVpTG9hZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogUkFUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcclxuICAgIHByaXZhdGUgbm90aWZpZXI6IE5vdGlmaWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgcmFQZXJtaXNzaW9uU2VydmljZTogUkFQZXJtaXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZG9tU2VydmljZTogRG9tU2VydmljZSkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdjbGljaycsIChlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTmFtZSkge1xyXG4gICAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUgIT0gJ2ZhbCBmYS1lbGxpcHNpcy12IHdpZGdldC1tZW51LWVsbGlwc2UnKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuV2lkZ2V0RGlzcGxheU5hbWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uJyArIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFRpdGxlLCB0cnVlKTtcclxuICAgIHRoaXMubG9ja0ljb25UaXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5sb2NrZWRmaWVsZHMnKTtcclxuICAgIHRoaXMubG9ja0ljb25Gb290ZXIgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubG9ja2VkZmllbGRzZWRpdGluZm8nKTtcclxuICAgIHRoaXMuaW5hcHBsaWNhYmxlSWNvblRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkluYXBwbGljYWJsZUZpbHRlcnMnKTtcclxuICAgIHRoaXMuaW5hcHBsaWNhYmxlSWNvbkZvb3RlciA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5JbmFwcGxpY2FibGVGaWx0ZXJzRGVzYycpO1xyXG4gIH1cclxuICBnZXQgd2lkZ2V0Vmlld1N0YXRlKCkgeyByZXR1cm4gV2lkZ2V0Vmlld1N0YXRlOyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNXaWRnZXRNZ21udCA9IHRoaXMucmFQZXJtaXNzaW9uU2VydmljZS5oYXNQZXJtaXNzaW9uKCdyYS53aWRnZXRtYW5hZ2VtZW50Jyk7XHJcbiAgICBpZiAoY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzICYmIGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cy5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgdGhpcy5jb25maWdDaGFuZ2VkID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZVdpdGhLZXkoUkFFdmVudC5Db25maWdDaGFuZ2VkLCBSQUV2ZW50S2V5LldpZGdldEluc3RhbmNlSWQsIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQudG9TdHJpbmcoKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29uZmlnQ2hhbmdlRXZlbnRIYW5kbGVyKGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50KSB7XHJcbiAgICAgIGlmIChjaGFuZ2VzLmJ1bGtBY3Rpb25EYXRhICYmIGNoYW5nZXMuYnVsa0FjdGlvbkRhdGEuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuYnVsa0FjdGlvbkRhdGEucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRFbGVtZW50LmJ1bGtBY3Rpb25DbGlja2VkID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5idWxrQWN0aW9uQ2xpY2tlZCh0aGlzLmJ1bGtBY3Rpb25EYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoYW5nZXMuZ2xvYmFsRmlsdGVyICYmIGNoYW5nZXMuZ2xvYmFsRmlsdGVyLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmdsb2JhbEZpbHRlci5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRhc2hib2FyZEluZm8uY3VyYXRlZEZpbHRlcnMpIHtcclxuICAgICAgICAgIGxldCBmaWx0ZXJPYmogPSB0aGlzLmdldFBhcnNlZENvbmZpZyh0aGlzLmdsb2JhbEZpbHRlcik7XHJcbiAgICAgICAgICBpZiAoZmlsdGVyT2JqLldpZGdldEluc3RhbmNlSWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQgIT0gZmlsdGVyT2JqLldpZGdldEluc3RhbmNlSWQpXHJcbiAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvL3RoaXMucmVmcmVzaFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2hhbmdlcy53aWR0aCAmJiBjaGFuZ2VzLndpZHRoLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLndpZHRoLnByZXZpb3VzVmFsdWUgfHxcclxuICAgICAgICAoY2hhbmdlcy5oZWlnaHQgJiYgY2hhbmdlcy5oZWlnaHQuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuaGVpZ2h0LnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgICAgdGhpcy5pbnZva2VXaWRnZXRSZXNpemVkRXZlbnQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXMuY2FuTG9hZERhdGEgJiYgY2hhbmdlcy5jYW5Mb2FkRGF0YS5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5jYW5Mb2FkRGF0YS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgIGlmICh0aGlzLmNhbkxvYWREYXRhKVxyXG4gICAgICAgIHRoaXMucmVmcmVzaFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnZva2VXaWRnZXRSZXNpemVkRXZlbnQoKSB7XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50KSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRFbGVtZW50LndpZGdldFJlc2l6ZWQgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIGxldCBzaXplOiBhbnkgPSB7fTtcclxuICAgICAgICBzaXplLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xyXG4gICAgICAgIHNpemUud2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgIHNpemUuY2VsbEhlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LndpZGdldFJlc2l6ZWQoc2l6ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGVpZ2h0ID09IDEgfHwgdGhpcy53aWR0aCA9PSAxKVxyXG4gICAgICAgICAgdGhpcy5pc0twaVZpZXcgPSB0cnVlXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5pc0twaVZpZXcgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbW91c2VIb3Zlcihpc0hvdmVyID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5pc01vdXNlSG92ZXIgPSBpc0hvdmVyO1xyXG5cclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQpIHtcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLndpZGdldEVsZW1lbnQuaG92ZXJTdGF0dXMgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5ob3ZlclN0YXR1cyhpc0hvdmVyKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ3dpZGdldCBmcmFtZXdvcmsgb3V0ZGF0ZWQsIHBsZWFzZSB1cGRhdGUgdG8gdmVyc2lvbiAwLjAuOTYnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsICgpID0+IHtcclxuICAgICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICAgIHRoaXMuY2xvc2VQb3B1cCgpO1xyXG4gICAgfSlcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgbGV0IGl0ZW0gPSBqUXVlcnkodGhpcy53Y1dyYXBwZXIubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgnZ3JpZHN0ZXItaXRlbScpO1xyXG4gICAgICBpdGVtLmJpbmQoJ21vdXNlZW50ZXInLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LmdyaWRzdGVySXRlbUVudGVyID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpdGVtLmJpbmQoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LmdyaWRzdGVySXRlbUVudGVyID0gZmFsc2U7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXdpbmRvdy5tb3VzZU92ZXJXaWRnZXRNZW51KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnQ2hhbmdlZClcclxuICAgICAgdGhpcy5jb25maWdDaGFuZ2VkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50SGFuZGxlciAmJiB0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLndpZGdldEluZm8gJiYgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCkge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dpZGdldGluaXRpYXRlZCcgKyB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkLCB0aGlzLndpZGdldEVsZW1lbnRIYW5kbGVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKiogVG8gRWRpdCBjdXJyZW50IHdpZGdldCBjb25maWd1cmF0aW9uKi9cclxuICBwdWJsaWMgZWRpdFdpZGdldCgpIHtcclxuICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXI6IElXaWRnZXRDb25maWdGaWx0ZXI7XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIHR5cGVvZiAodGhpcy53aWRnZXRFbGVtZW50LmdldENvbmZpZ0ZpbHRlcikgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBsZXQgY29uZmlnRGF0YSA9IHRoaXMud2lkZ2V0RWxlbWVudC5nZXRDb25maWdGaWx0ZXIoKTtcclxuICAgICAgaWYgKGNvbmZpZ0RhdGEpIHtcclxuICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIgPSBjb25maWdEYXRhO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAod2lkZ2V0Q29uZmlnRmlsdGVyKSB7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0RWRpdENsaWNrZWQsIHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlckRhdGEgPSB0aGlzLmdlbmVyYXRlQ29uZmlnRmlsdGVyKGZhbHNlKTtcclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5XaWRnZXRFZGl0Q2xpY2tlZCwgd2lkZ2V0Q29uZmlnRmlsdGVyRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogVG8gRGVsZXRlIGN1cnJlbnQgd2lkZ2V0IGZyb20gRE9NKi9cclxuICBwdWJsaWMgZGVsZXRlV2lkZ2V0KCkge1xyXG4gICAgbGV0IHdpZGdldENvbnRhaW5lckNvbnRleHQgPSB0aGlzO1xyXG4gICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5uZ3hTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LmRhc2hib2FyZFNlcnZpY2UuZGVsZXRlV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XHJcbiAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQubmd4U2VydmljZS5zdG9wKCk7XHJcbiAgICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LndpZGdldERlbGV0ZWQuZW1pdCh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgICB0aGlzLnNldEluYXBwbGljYWJsZUZpbHRlcnModW5kZWZpbmVkLCB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0Lm5vdGlmaWVyLm5vdGlmeSgnZXJyb3InLCBcIiBcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0ZhaWxlZFRvUmVtb3ZlV2lkZ2V0JykgKyBcIiAgKFwiICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLicgKyB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRUaXRsZSwgdHJ1ZSkgKyBcIikhXCIpO1xyXG5cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gTW92ZSBvciBjaGFuZ2UgcG9zaXRpb24gaWYgY3VycmVudCB3aWRnZXQgY29udGFpbmVyKi9cclxuICBwdWJsaWMgbW92ZVdpZGdldCgpIHtcclxuICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuTW92ZVdpZGdldCwgdGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgdGhpcy5zZXRJbmFwcGxpY2FibGVGaWx0ZXJzKHVuZGVmaW5lZCwgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAvLyB0aGlzLmRhc2hib2FyZFNlcnZpY2UubW92ZVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBDb3B5IEN1cnJlbnQgd2lkZ2V0IHdpdGggc2FtZSBjb25maWd1cmF0aW9uKi9cclxuICBwdWJsaWMgY29weVdpZGdldCgpIHtcclxuICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuQ29weVdpZGdldCwgdGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgLy90aGlzLmRhc2hib2FyZFNlcnZpY2UuY29weVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB2aXNpdFBhZ2UoKSB7XHJcbiAgICB0aGlzLmJhc2VVcmwgPSB0aGlzLmdldEhvc3RVcmwoKTtcclxuICAgIGxldCB1cmwgPSB0aGlzLmJhc2VVcmwgKyB0aGlzLmRldGFpbFBhZ2VVcmw7XHJcbiAgICBpZiAodGhpcy5kYXRhLndpZGdldEluZm8gJiYgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgdGhpcy53aWRnZXRTZXR0aW5ncyA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKTtcclxuICAgICAgaWYgKHRoaXMud2lkZ2V0U2V0dGluZ3MuY3VzdG9tUGFnZVBhcmFtcyB8fCB0aGlzLndpZGdldFNldHRpbmdzLmN1c3RvbVBhZ2VVUkwpIHtcclxuICAgICAgICBsZXQgcGFyYW1zID0gdGhpcy53aWRnZXRFbGVtZW50LmdldFBhZ2VQYXJhbXNDbGlja2VkKCk7XHJcbiAgICAgICAgaWYgKHBhcmFtcykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFR5cGUgPT0gJ0FWIFdpZGdldCcgfHwgdGhpcy53aWRnZXRTZXR0aW5ncy5jdXN0b21QYWdlVVJMKVxyXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyBwYXJhbXM7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHVybCA9IHVybCArICc/JyArIHBhcmFtcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEhvc3RVcmwoKSB7XHJcbiAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICh3aW5kb3cubG9jYXRpb24ucG9ydCA/ICc6JyArIHdpbmRvdy5sb2NhdGlvbi5wb3J0IDogJycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbmZpZ0NoYW5nZUV2ZW50SGFuZGxlcih3aWRnZXRJbmZvKSB7XHJcbiAgICB0aGlzLmRhdGEud2lkZ2V0SW5mbyA9IHdpZGdldEluZm87XHJcbiAgICBpZiAodGhpcy5ncmlkQ2VsbEhlaWdodCA+IDApIHtcclxuICAgICAgdGhpcy5kYXRhLndpZGdldEluZm8ucm93SGVpZ2h0ID0gdGhpcy5ncmlkQ2VsbEhlaWdodDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgdHlwZW9mICh0aGlzLndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIodGhpcy5nZW5lcmF0ZUNvbmZpZ0ZpbHRlcih0cnVlKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCd3aWRnZXQgZnJhbWV3b3JrIG91dGRhdGVkLCBwbGVhc2UgdXBkYXRlIHRvIHZlcnNpb24gMC4wLjk4Jyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlZnJlc2hXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8sIHRydWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVDb25maWdGaWx0ZXIoY29uZmlnQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyRGF0YSA9IDxJV2lkZ2V0Q29uZmlnRmlsdGVyPntcclxuICAgICAgYXBwQ29uZmlnOiB0aGlzLmFwcENvbmZpZyxcclxuICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmdsb2JhbEZpbHRlcixcclxuICAgICAgd2lkZ2V0SW5mbzogdGhpcy5kYXRhLndpZGdldEluZm8sXHJcbiAgICAgIGNvbmZpZzogdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcsXHJcbiAgICAgIGNvbmZpZ0NoYW5nZXM6IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhjb25maWdDaGFuZ2VkKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHdpZGdldENvbmZpZ0ZpbHRlckRhdGE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqICBUbyBsb2FkIGV4dGVybmFsIGN1c3RvbSBlbGVtZW50IHRvIHRoZSB3aWRnZXQgY29udGFpbmVyKi9cclxuICBhc3luYyBsb2FkV2lkZ2V0KHdpZGdldEluZm86IGFueSkge1xyXG4gICAgd2lkZ2V0SW5mby5yb3dIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlciA9IDxJV2lkZ2V0Q29uZmlnRmlsdGVyPntcclxuICAgICAgY29uZmlnOiB3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnLFxyXG4gICAgICBnbG9iYWxGaWx0ZXI6IHRoaXMuZ2xvYmFsRmlsdGVyLFxyXG4gICAgICBjb25maWdDaGFuZ2VzOiB0aGlzLmdldENvbmZpZ0NoYW5nZXMoZmFsc2UpXHJcbiAgICB9XHJcbiAgICBpZiAod2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncykge1xyXG4gICAgICB0aGlzLndpZGdldFNldHRpbmdzID0gdGhpcy5nZXRQYXJzZWRDb25maWcod2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICAgIHRoaXMuYXBwbGF5V2lkZ2V0U2V0dGluZ3ModGhpcy53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRldGFpbFBhZ2VVcmwgPSB3aWRnZXRJbmZvLmRldGFpbFBhZ2VVcmw7XHJcbiAgICBsZXQgbWUgPSB0aGlzO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmxvYWRFeHRlcm5hbFNjcmlwdCh3aWRnZXRJbmZvLnNjcmlwdFVybCwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh3aWRnZXRJbmZvKTtcclxuICAgICAgbGV0IGFwcE1vZHVsZSA9IHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldE5hbWU7XHJcbiAgICAgIGlmICh0aGlzLmRhdGEud2lkZ2V0SW5mby5hcHBsaWNhdGlvbk1vZHVsZSAmJiB0aGlzLmRhdGEud2lkZ2V0SW5mby5hcHBsaWNhdGlvbk1vZHVsZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgYXBwTW9kdWxlID0gdGhpcy5kYXRhLndpZGdldEluZm8uYXBwbGljYXRpb25Nb2R1bGU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmxvYWRUcmFuc2xhdGlvbnModGhpcy5hcHBDb25maWcuYXBwTWFuYWdlbWVudEJhc2VVcmwsIGFwcE1vZHVsZSwgZmFsc2UpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIG1lLndpZGdldEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHdpZGdldEluZm8uY3VzdG9tVGFnKTtcclxuICAgICAgICBtZS53aWRnZXRFbGVtZW50LnNldEF0dHJpYnV0ZShcIndpZGdldC1pbnN0YW5jZS1pZFwiLCB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG5cclxuICAgICAgICBsZXQgaGFuZGxlciA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdvbi13aWRnZXQtcmVzcG9uZCcsIChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB2YXIgdHlwZTogc3RyaW5nID0gZS5kZXRhaWwudHlwZTtcclxuICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ29uRGF0YUxvYWQnOlxyXG4gICAgICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwuZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dQYW5lbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dQYW5lbCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGEuZGF0YUxvYWRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5kYXRhTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFMb2FkZWQuZW1pdCh0aGlzLndpZGdldEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnb25Db25maWdFZGl0Q2xpY2tlZCc6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdFdpZGdldCgpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ29uRW5hYmxlRGVmYXVsdFN0YXRlJzpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFbXB0eVN0YXRlKGUuZGV0YWlsLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ29uU2V0VGl0bGVVbmRlcmxpbmUnOlxyXG4gICAgICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwuZGF0YSA9PSB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlVGl0bGVMaW5lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlVGl0bGVMaW5lID0gdGhpcy5lbmFibGVUaXRsZUxpbmVBY3R1YWw7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnb25XaWRnZXRUaXRsZUhpZGRlbic6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChlLmRldGFpbC5kYXRhID09IHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlVGl0bGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlVGl0bGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdvblVwZGF0ZUxvY2tEYXRhJzpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2NrKGUuZGV0YWlsLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ29uR2xvYmFsRmlsdGVyQXBwbGljYWJsZUNoZWNrJzpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJbmFwcGxpY2FibGVGaWx0ZXJzKGUuZGV0YWlsLmRhdGEsIHdpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKHRoaXMud2lkZ2V0RWxlbWVudC50aXRsZUxpbmVFbmFibGVkKSAhPSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgIGxldCB0aXRsZUxpbmVFbmFibGVkID0gdGhpcy53aWRnZXRFbGVtZW50LnRpdGxlTGluZUVuYWJsZWQoKTtcclxuICAgICAgICAgICAgICBpZiAodGl0bGVMaW5lRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUaXRsZUxpbmUgPSB0aXRsZUxpbmVFbmFibGVkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUaXRsZUxpbmVBY3R1YWwgPSB0aXRsZUxpbmVFbmFibGVkO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmVkaXRUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0JykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgIHRoaXMuZWRpdFRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5lZGl0VG9vbFRpcFZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKTtcclxuICAgICAgICAgICAgICB0aGlzLmVkaXRUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb3B5VGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvcHlUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29weVRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb3B5VG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubW92ZVRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMubW92ZVRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZXhjZWxUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5leGNlbFRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZXhjZWxUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKTtcclxuICAgICAgICAgICAgICB0aGlzLmV4Y2VsVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNXaWRnZXRMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIuYXBwQ29uZmlnID0gdGhpcy5hcHBDb25maWc7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci53aWRnZXRJbmZvID0gd2lkZ2V0SW5mbztcclxuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLmNvbmZpZ0NoYW5nZXMgPSB0aGlzLmdldENvbmZpZ0NoYW5nZXMoZmFsc2UpO1xyXG4gICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIud2lkZ2V0SW5mby53aWRnZXROYW1lID0gd2lkZ2V0SW5mby53aWRnZXROYW1lO1xyXG4gICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIuZ2xvYmFsRmlsdGVyID0gdGhpcy5nbG9iYWxGaWx0ZXI7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5kYXNoYm9hcmRJbmZvID0gbWUuZGFzaGJvYXJkSW5mbztcclxuICAgICAgICAgICAgLy90aGlzLndpZGdldEVsZW1lbnQubG9hZENvbnRlbnQod2lkZ2V0Q29uZmlnRmlsdGVyKTtcclxuICAgICAgICAgICAgdGhpcy53aWRnZXRMb2FkZWQuZW1pdCgpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldExvY2sod2lkZ2V0Q29uZmlnRmlsdGVyLmNvbmZpZyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0RG93bmxvYWRJY29uKCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnRIYW5kbGVyID0gaGFuZGxlcjtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ3dpZGdldGluaXRpYXRlZCcgKyB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQsIGhhbmRsZXIpO1xyXG4gICAgICAgIHRoaXMuY3RsV2lkZ2V0Lm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy53aWRnZXRFbGVtZW50KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlRvIHNldCBEZWZhdWx0IFN0YXRlIGZvciB0aGUgd2lkZ2V0IHdoZW4gaXQgaXMgbm90IGNvbmZpZ3VyZWQgKi9cclxuICBzZXROb3RDb25maWd1cmVkU3RhdGUod2lkZ2V0SW5mbzogSVdpZGdldEluZm8sIGZvcmNlRW5hYmxlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICgod2lkZ2V0SW5mby5zaG93RGVmYXVsdFN0YXRlICYmICh3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnID09IFwiXCIgfHwgT2JqZWN0LmtleXMoSlNPTi5wYXJzZSh3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnKSkubGVuZ3RoID09IDApKSB8fCAoZm9yY2VFbmFibGUpKSB7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLndpZGdldEVtcHR5U3RhdGUgPSBXaWRnZXRWaWV3U3RhdGUuZW1wdHlDb25maWcudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLndpZGdldEVtcHR5U3RhdGUgPSAnJztcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqVG8gY29uZmlndXJlIGVtcHR5IHN0YXRlIGZvciB0aGUgd2lkZ2V0ICAqL1xyXG4gIHNldEVtcHR5U3RhdGUod2lkZ2V0U3RhdGU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaGVpZ2h0ID09IDEgfHwgdGhpcy53aWR0aCA9PSAxKVxyXG4gICAgICB0aGlzLmlzS3BpVmlldyA9IHRydWVcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5pc0twaVZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMud2lkZ2V0RW1wdHlTdGF0ZSA9IHdpZGdldFN0YXRlLndpZGdldFZpZXdTdGF0ZTtcclxuICAgIHRoaXMuaXNHbG9iYWxGaWx0ZXJBcHBsaWVkID0gd2lkZ2V0U3RhdGUuaXNHbG9iYWxGaWx0ZXJBcHBsaWVkO1xyXG4gICAgaWYgKHdpZGdldFN0YXRlICE9IFdpZGdldFZpZXdTdGF0ZS5ub3JtYWwpIHtcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoICh3aWRnZXRTdGF0ZSkge1xyXG4gICAgICBjYXNlIFdpZGdldFZpZXdTdGF0ZS5lbXB0eUNvbmZpZzpcclxuICAgICAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgV2lkZ2V0Vmlld1N0YXRlLmVtcHR5RGF0YTpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBXaWRnZXRWaWV3U3RhdGUuZXJyb3I6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWdDaGFuZ2VzKGNvbmZpZ0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgbGV0IGNvbmZpZ0NoYW5nZXMgPSA8SWNvbmZpZ0NoYW5nZXM+e1xyXG4gICAgICBpc0NvbmZpZ1VwZGF0ZWQ6IGNvbmZpZ0NoYW5nZWQsXHJcbiAgICAgIHVwZGF0ZWRDb25maWdQcm9wZXJ0eTogW11cclxuICAgIH1cclxuICAgIHJldHVybiBjb25maWdDaGFuZ2VzO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIHJlZnJlc2ggd2lkZ2V0IG9uIGlucHV0IGNvbmZpZyBjaGFuZ2VzICovXHJcbiAgYXN5bmMgcmVmcmVzaFdpZGdldCh3aWRnZXRJbmZvOiBJV2lkZ2V0SW5mbywgY29uZmlnQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLldpZGdldERpc3BsYXlOYW1lID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLicgKyB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRUaXRsZSwgdHJ1ZSk7XHJcbiAgICB3aWRnZXRJbmZvLnJvd0hlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh3aWRnZXRJbmZvKTtcclxuICAgIGxldCB3aWRnZXRDb250YWluZXJDb250ZXh0ID0gdGhpcztcclxuXHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyID0gPElXaWRnZXRDb25maWdGaWx0ZXI+e1xyXG4gICAgICBjb25maWc6IHdpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcsXHJcbiAgICAgIGdsb2JhbEZpbHRlcjogdGhpcy5nbG9iYWxGaWx0ZXIsXHJcbiAgICAgIGFwcENvbmZpZzogdGhpcy5hcHBDb25maWcsXHJcbiAgICAgIHdpZGdldEluZm86IHdpZGdldEluZm8sXHJcbiAgICAgIGNvbmZpZ0NoYW5nZXM6IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhjb25maWdDaGFuZ2VkKSxcclxuICAgICAgZGFzaGJvYXJkSW5mbzogdGhpcy5kYXNoYm9hcmRJbmZvXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpZGdldENvbnRhaW5lckNvbnRleHQuaXNXaWRnZXRMb2FkZWQpIHtcclxuICAgICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiB0eXBlb2YgKHRoaXMud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIpID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICAgIH1cclxuICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC53aWRnZXRFbGVtZW50LmxvYWRDb250ZW50KHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2V0TG9jayh3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnKTtcclxuICAgICAgYXdhaXQgdGhpcy5zZXREb3dubG9hZEljb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3VzZU92ZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy50b29sVGlwVmFsdWUgPSAnICc7XHJcbiAgICB0aGlzLnRvb2xUaXBXaWR0aCA9ICcwcHgnO1xyXG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoZWxlbWVudC5vZmZzZXRXaWR0aCA8IGVsZW1lbnQuc2Nyb2xsV2lkdGgpIHtcclxuICAgICAgdGhpcy50b29sVGlwVmFsdWUgPSBlbGVtZW50LmlubmVySFRNTDtcclxuICAgICAgdGhpcy50b29sVGlwV2lkdGggPSAnMzAwcHgnO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudG9vbFRpcFdpZHRoID0gJzBweCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNldExvY2soY29uZmlnOiBzdHJpbmcpIHtcclxuICAgIHRoaXMubG9ja1RlbXBsYXRlSW5mbyA9IHRoaXMud2lkZ2V0RWxlbWVudC5sb2FkTG9ja0luZm8oKTtcclxuICAgIHZhciBjb25maWdPYmo6IGFueTtcclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgY29uZmlnT2JqID0gSlNPTi5wYXJzZShjb25maWcpO1xyXG4gICAgICBpZiAoY29uZmlnT2JqICYmIGNvbmZpZ09iai5Mb2NrcyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAoY29uZmlnT2JqLkxvY2tzLklzRGF0ZUxvY2tlZCB8fCBjb25maWdPYmouTG9ja3MuSXNEYXRlc0xvY2tlZCB8fCBjb25maWdPYmouTG9ja3MuSXNQYXJ0aWNpcGFudExvY2tlZCB8fCBjb25maWdPYmouTG9ja3MuSXNTb3VyY2VMb2NrZWQpIHtcclxuICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMgPSBbXTtcclxuICAgICAgICAgIGlmIChjb25maWdPYmouTG9ja3MuSXNEYXRlTG9ja2VkIHx8IGNvbmZpZ09iai5Mb2Nrcy5Jc0RhdGVzTG9ja2VkKVxyXG4gICAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRhdGVSYW5nZScpKTtcclxuXHJcbiAgICAgICAgICBpZiAoY29uZmlnT2JqLkxvY2tzLklzUGFydGljaXBhbnRMb2NrZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NrRGV0YWlscy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EaXZpc2lvbk9yR3JvdXBvclNpdGUnKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29uZmlnT2JqLkxvY2tzLklzU291cmNlTG9ja2VkKVxyXG4gICAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRhdGFTdHJlYW0nKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5sb2NrRGV0YWlscyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2NrRGV0YWlscyA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldERvd25sb2FkSWNvbigpIHtcclxuICAgIGxldCBkb3dubG9hZFR5cGUgPSBhd2FpdCB0aGlzLndpZGdldEVsZW1lbnQuZ2V0RG93bmxvYWRUeXBlKCk7XHJcbiAgICB0aGlzLmRvd25sb2FkSWNvblR5cGUgPSBkb3dubG9hZFR5cGU7XHJcbiAgICB0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NoYXJ0RG93bmxvYWRWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzR3JpZERvd25sb2FkVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93RXhjZWxsID0gdHJ1ZTtcclxuICAgIGlmIChkb3dubG9hZFR5cGUgIT0gUkFEb3dubG9hZFR5cGUuTm9uZSkge1xyXG4gICAgICB0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLmlzV2lkZ2V0TWdtbnQgJiYgIXRoaXMuZGV0YWlsUGFnZVVybCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1NldHRpbmdzTGluayA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRvd25sb2FkVHlwZSA9PSBSQURvd25sb2FkVHlwZS5DaGFydCkge1xyXG4gICAgICB0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb3dubG9hZFR5cGUgPT0gUkFEb3dubG9hZFR5cGUuR3JpZCkge1xyXG4gICAgICB0aGlzLmlzR3JpZERvd25sb2FkVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRvd25sb2FkVHlwZSA9PSBSQURvd25sb2FkVHlwZS5TdGF0aXN0aWNzKSB7XHJcbiAgICAgIHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zaG93RXhjZWxsID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZG93bmxvYWRJY29uQ2xpY2tlZCh0eXBlOiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFwiQ1NWXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uQ1NWKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlBOR1wiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLlBORyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJQREZcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5QREYpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiU1ZHXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uU1ZHKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkpQRUdcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5KUEVHKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlTWVudSgpIHtcclxuICAgIGpRdWVyeSgnI3JhLWRiLXdpZGdldC1tZW51JykucmVtb3ZlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrVmlzaXRMaW5rVmlzaWJsaXR5KCkge1xyXG4gICAgbGV0IGlzVmlzaXRBcHBsaWNhYmxlID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgdHlwZW9mIHRoaXMud2lkZ2V0RWxlbWVudC5nZXRWaXNpdExpbmtWaXNpYmlsaXR5U3RhdHVzID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgaXNWaXNpdEFwcGxpY2FibGUgPSB0aGlzLndpZGdldEVsZW1lbnQuZ2V0VmlzaXRMaW5rVmlzaWJpbGl0eVN0YXR1cygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzVmlzaXRBcHBsaWNhYmxlO1xyXG4gIH1cclxuXHJcbiAgLyoqU2hvdyBkcm9wZG93biBvbiBnZWFyIGljb24gY2xpY2sgICovXHJcbiAgcHVibGljIHNob3dEcm9wRG93bihlOiBhbnkpIHtcclxuICAgIHRoaXMuc2V0RG93bmxvYWRJY29uKCk7XHJcblxyXG4gICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcblxyXG4gICAgICBsZXQgdGFyZ2V0UG9zID0gZS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIGxldCBzdHlsZTogc3RyaW5nID0gXCJwb3NpdGlvbjpmaXhlZDt0b3A6XCIgKyAodGFyZ2V0UG9zLnkgKyAxNSkgKyAncHgnICsgJztsZWZ0OicgKyAoZS5wYWdlWCAtIDEyMikgKyAncHg7ei1pbmRleDoxMDAwOyc7XHJcbiAgICAgIGxldCBodG1sID0gdGhpcy5nZXRDb250ZW54dEh0bWwoc3R5bGUpO1xyXG5cclxuICAgICAgalF1ZXJ5KGh0bWwpLmFwcGVuZFRvKCdib2R5Jyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc1dpZGdldE1nbW50KSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0VkaXRXaWRnZXQnLCB0aGlzLmVkaXRXaWRnZXQpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NDb3B5V2lkZ2V0JywgdGhpcy5jb3B5V2lkZ2V0KTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djTW92ZVdpZGdldCcsIHRoaXMubW92ZVdpZGdldCk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y1dpZGdldERlbGV0ZScsIHRoaXMuZGVsZXRlV2lkZ2V0KTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgY3VzdG9tUGFnZVBhcmFtcyA9IGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5kYXRhLndpZGdldEluZm8gJiYgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgICB0aGlzLndpZGdldFNldHRpbmdzID0gdGhpcy5nZXRQYXJzZWRDb25maWcodGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpO1xyXG4gICAgICAgIGlmICh0aGlzLndpZGdldFNldHRpbmdzLmN1c3RvbVBhZ2VQYXJhbXMgfHwgdGhpcy53aWRnZXRTZXR0aW5ncy5jdXN0b21QYWdlVVJMKSB7XHJcbiAgICAgICAgICBjdXN0b21QYWdlUGFyYW1zID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICgodGhpcy5kZXRhaWxQYWdlVXJsIHx8IGN1c3RvbVBhZ2VQYXJhbXMpICYmIHRoaXMuY2hlY2tWaXNpdExpbmtWaXNpYmxpdHkoKSkge1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NWaXNpdFdpZGdldCcsIHRoaXMudmlzaXRQYWdlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc0NoYXJ0RG93bmxvYWRWaXNpYmxlKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkUG5nJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnUE5HJyk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkSnBnJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnSlBFRycpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NEb3dubG9hZFBkZicsIHRoaXMuZG93bmxvYWRJY29uQ2xpY2tlZCwgJ1BERicpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NEb3dubG9hZFN2ZycsIHRoaXMuZG93bmxvYWRJY29uQ2xpY2tlZCwgJ1NWRycpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmlzR3JpZERvd25sb2FkVmlzaWJsZSAmJiB0aGlzLnNob3dFeGNlbGwpIHtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRFeGNlbCcsIHRoaXMuZG93bmxvYWRJY29uQ2xpY2tlZCwgJ0NTVicpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmEtZGItd2lkZ2V0LW1lbnUnKS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5tb3VzZU92ZXJXaWRnZXRNZW51ID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYS1kYi13aWRnZXQtbWVudScpLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93Lm1vdXNlT3ZlcldpZGdldE1lbnUgPSBmYWxzZTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGlmICghd2luZG93LmdyaWRzdGVySXRlbUVudGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkRXZlbnRMaXN0ZW5lcihpZDogc3RyaW5nLCBldmVudDogYW55LCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG4gICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICBldmVudC5jYWxsKHRoaXMsIHBhcmFtcyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb250ZW54dEh0bWwoc3R5bGU6IHN0cmluZykge1xyXG4gICAgbGV0IGh0bWw6IHN0cmluZyA9ICc8ZGl2IGlkPVwicmEtZGItd2lkZ2V0LW1lbnVcIicgKyAnc3R5bGU9XCInICsgc3R5bGUgKyAnXCIgY2xhc3M9XCJkb3dubG9hZC1jb250ZW50IGRyb3Bkb3duLWNvbnRlbnQgd2lkZ2V0LWNvbmZpZy1pdGVtIGRyb3Bkb3duLWNsaWNrXCIgc3R5bGU9XCJ6LWluZGV4OiAxMDAyO1wiPic7XHJcblxyXG4gICAgbGV0IHNldHRpbmdzID0gJyc7XHJcbiAgICBpZiAodGhpcy5pc1dpZGdldE1nbW50KSB7XHJcbiAgICAgIGlmICghdGhpcy5kYXRhLndpZGdldEluZm8udGVtcGxhdGVXaWRnZXRTZXR0aW5ncyB8fCAhdGhpcy5kYXRhLndpZGdldEluZm8udGVtcGxhdGVXaWRnZXRTZXR0aW5ncy5oaWRlRWRpdClcclxuICAgICAgICBzZXR0aW5ncyArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRWRpdFdpZGdldCcsICdmYWwgZmEtZWRpdCcsIHRoaXMuZWRpdFRleHQpO1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MgfHwgIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MuaGlkZUNvcHkpXHJcbiAgICAgICAgc2V0dGluZ3MgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0NvcHlXaWRnZXQnLCAnZmFsIGZhLWNvcHknLCB0aGlzLmNvcHlUZXh0KTtcclxuICAgICAgaWYgKCF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzIHx8ICF0aGlzLmRhdGEud2lkZ2V0SW5mby50ZW1wbGF0ZVdpZGdldFNldHRpbmdzLmhpZGVNb3ZlKVxyXG4gICAgICAgIHNldHRpbmdzICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NNb3ZlV2lkZ2V0JywgJ2ZhbCBmYS1hcnJvd3MtYWx0JywgdGhpcy5tb3ZlVGV4dCk7XHJcbiAgICB9XHJcbiAgICBsZXQgY3VzdG9tUGFnZVBhcmFtcyA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvICYmIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0U2V0dGluZ3MgPSB0aGlzLmdldFBhcnNlZENvbmZpZyh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICAgIGlmICh0aGlzLndpZGdldFNldHRpbmdzLmN1c3RvbVBhZ2VQYXJhbXMgfHwgdGhpcy53aWRnZXRTZXR0aW5ncy5jdXN0b21QYWdlVVJMKSB7XHJcbiAgICAgICAgY3VzdG9tUGFnZVBhcmFtcyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghdGhpcy5kYXRhLndpZGdldEluZm8udGVtcGxhdGVXaWRnZXRTZXR0aW5ncyB8fCAhdGhpcy5kYXRhLndpZGdldEluZm8udGVtcGxhdGVXaWRnZXRTZXR0aW5ncy5oaWRlVmlzaXRQYWdlICYmICh0aGlzLmRldGFpbFBhZ2VVcmwgfHwgY3VzdG9tUGFnZVBhcmFtcykgJiYgdGhpcy5jaGVja1Zpc2l0TGlua1Zpc2libGl0eSgpKSB7XHJcbiAgICAgIHNldHRpbmdzICs9ICc8YSBzdHlsZT1cIm1heC1oZWlnaHQ6IDMwcHg7YWxpZ24taXRlbXM6IGNlbnRlcjthbGlnbi1jb250ZW50OiBjZW50ZXI7IGRpc3BsYXk6IGZsZXg7XCIgaWQ9XCJ3Y1Zpc2l0V2lkZ2V0XCI+JztcclxuICAgICAgc2V0dGluZ3MgKz0gJzxpIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA0cHg7Zm9udC1zaXplOiAyN3B4ICFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJmYWwgZmEtYW5nbGUtcmlnaHRcIj48L2k+ICc7XHJcbiAgICAgIHNldHRpbmdzICs9ICc8c3BhbiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTFweDttYXJnaW4tdG9wOiAycHg7XCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDZweDtcIj4nO1xyXG4gICAgICBzZXR0aW5ncyArPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24udmlzaXRwYWdlJyk7XHJcbiAgICAgIHNldHRpbmdzICs9ICc8L3NwYW4+PC9hPic7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MgfHwgIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MuaGlkZVZpc2l0UGFnZSAmJiAodGhpcy5kZXRhaWxQYWdlVXJsICYmIHRoaXMuY2hlY2tWaXNpdExpbmtWaXNpYmxpdHkoKSkgfHwgdGhpcy5pc1dpZGdldE1nbW50KSB7XHJcbiAgICAgIGh0bWwgKz0gJzxkaXYgc3R5bGU9XCJjb2xvcjogIzlGQTBBNDtmb250LXNpemU6IDEycHg7cGFkZGluZy10b3A6IDhweDtwYWRkaW5nLWxlZnQ6IDEycHg7XCI+JztcclxuICAgICAgaHRtbCArPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uc2V0dGluZ3MnKSArICc8L2Rpdj4nO1xyXG4gICAgICBodG1sICs9IHNldHRpbmdzO1xyXG4gICAgICBodG1sICs9IHRoaXMuZ2V0SHIoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUpIHtcclxuICAgICAgaWYgKHRoaXMuc2hvd0V4Y2VsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRldGFpbFBhZ2VVcmwgfHwgdGhpcy5pc1dpZGdldE1nbW50KVxyXG4gICAgICAgICAgaHRtbCArPSAnPHNwYW4gc3R5bGU9XCJjb2xvcjogIzlGQTBBNDtmb250LXNpemU6IDEycHg7XCI+JztcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBodG1sICs9ICc8c3BhbiBzdHlsZT1cImNvbG9yOiAjOUZBMEE0O2ZvbnQtc2l6ZTogMTJweDtwYWRkaW5nLXRvcDo1cHg7ZGlzcGxheTpibG9jaztcIj4nO1xyXG5cclxuICAgICAgICBodG1sICs9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kb3dubG9hZHMnKTtcclxuICAgICAgICBodG1sICs9ICc8L3NwYW4+JztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuaXNDaGFydERvd25sb2FkVmlzaWJsZSkge1xyXG4gICAgICAgIGh0bWwgKz0gJzxkaXYgc3R5bGU9XCJwYWRkaW5nLXRvcDogMTBweDtcIiBjbGFzcz1cImNoYXJ0RG93bmxvYWRcIj4nO1xyXG4gICAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0Rvd25sb2FkUG5nJywgJ2ZhbCBmYS1maWxlLWltYWdlJywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLnBuZycpKTtcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZEpwZycsICdmYWwgZmEtZmlsZS1pbWFnZScsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5qcGVnJykpO1xyXG4gICAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0Rvd25sb2FkUGRmJywgJ2ZhbCBmYS1maWxlLXBkZicsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5wZGYnKSk7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRTdmcnLCAnZmFsIGZhLWZpbGUtYWx0JywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLnN2ZycpKTtcclxuICAgICAgICBodG1sICs9ICc8L2Rpdj4nO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmlzR3JpZERvd25sb2FkVmlzaWJsZSAmJiB0aGlzLnNob3dFeGNlbGwpIHtcclxuICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPVwiZ3JpZERvd25sb2FkXCI+JztcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZEV4Y2VsJywgJ2ZhbCBmYS1kb3dubG9hZCcsIHRoaXMuZXhjZWxUZXh0KTtcclxuICAgICAgICBodG1sICs9ICc8L2Rpdj4nO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgJiYgdGhpcy5pc1dpZGdldE1nbW50ICYmIHRoaXMuc2hvd0V4Y2VsbCkge1xyXG4gICAgICBodG1sICs9IHRoaXMuZ2V0SHIoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzV2lkZ2V0TWdtbnQgJiYgIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MgfHwgIXRoaXMuZGF0YS53aWRnZXRJbmZvLnRlbXBsYXRlV2lkZ2V0U2V0dGluZ3MuaGlkZURlbGV0ZSkge1xyXG4gICAgICBodG1sICs9ICc8YSBpZD1cIndjV2lkZ2V0RGVsZXRlXCI+PGkgY2xhc3M9XCJmYWwgZmEtdGltZXNcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogM3B4O2NvbG9yOiByZWQ7XCI+PC9pPjxzcGFuPic7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy5kZWxldGVUZXh0O1xyXG4gICAgICBodG1sICs9ICc8L3NwYW4+PC9hPic7XHJcbiAgICB9XHJcblxyXG4gICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgIHJldHVybiBodG1sO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRIcigpIHtcclxuICAgIHJldHVybiAnPGhyIGNsYXNzPVwiaHJcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDVweDttYXJnaW4tYm90dG9tOiA1cHg7XCI+JztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SHRtbEZvckJ1dHRvbihpZDogc3RyaW5nLCBmb250Q2xhc3M6IHN0cmluZywgdGV4dDogc3RyaW5nKSB7XHJcbiAgICBsZXQgaHRtbCA9ICc8YSBpZD1cIicgKyBpZCArICdcIj48aSBzdHlsZT1cIndpZHRoOjE2cHhcIiBjbGFzcz1cIicgKyBmb250Q2xhc3MgKyAnXCI+PC9pPiA8c3BhbiBzdHlsZT1cInBhZGRpbmctbGVmdDogNnB4O1wiPic7XHJcbiAgICBodG1sICs9IHRleHQ7XHJcbiAgICBodG1sICs9ICc8L3NwYW4+PC9hPic7XHJcbiAgICByZXR1cm4gaHRtbDtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGdldFBhcnNlZENvbmZpZyhjb25maWc6IGFueSkge1xyXG4gICAgbGV0IHBhcnNlZENvbmZpZzogYW55O1xyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgcGFyc2VkQ29uZmlnID0gSlNPTi5wYXJzZShjb25maWcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCB7XHJcbiAgICAgICAgICBwYXJzZWRDb25maWcgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZENvbmZpZztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbmZpZztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbGF5V2lkZ2V0U2V0dGluZ3Moc2V0dGluZ3M6IGFueSkge1xyXG4gICAgaWYgKHNldHRpbmdzLk5vUGFkZGluZylcclxuICAgICAgdGhpcy5ub1BhZGRpbmcgPSB0cnVlXHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMubm9QYWRkaW5nID0gZmFsc2VcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SW5hcHBsaWNhYmxlRmlsdGVycyhkYXRhOiBhbnksIGluc3RhbmNlSWQ6IGFueSkge1xyXG4gICAgdmFyIHdpZGdldERhdGE6IGFueSA9IHt9O1xyXG4gICAgdGhpcy5pbmFwcGxpY2FibGVGaWx0ZXJzID0gW107XHJcbiAgICB3aWRnZXREYXRhLmluc3RhbmNlSWQgPSBpbnN0YW5jZUlkO1xyXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGRhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudCA9PSAnZGF0ZVJhbmdlJylcclxuICAgICAgICAgIHRoaXMuaW5hcHBsaWNhYmxlRmlsdGVycy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EYXRlUmFuZ2UnKSk7XHJcbiAgICAgICAgZWxzZSBpZiAoZWxlbWVudCA9PSAncGFydGljaXBhbnQnKSB7XHJcbiAgICAgICAgICB0aGlzLmluYXBwbGljYWJsZUZpbHRlcnMucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uRGl2aXNpb25Hcm91cCcpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZWxlbWVudCA9PSAnc291cmNlJylcclxuICAgICAgICAgIHRoaXMuaW5hcHBsaWNhYmxlRmlsdGVycy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EYXRhU3RyZWFtJykpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMuaW5hcHBsaWNhYmxlRmlsdGVycy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICB9KTtcclxuICAgICAgd2lkZ2V0RGF0YS5kYXRhID0gZGF0YTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB3aWRnZXREYXRhLmRhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUFwcGxpZWRGaWx0ZXJzLmVtaXQod2lkZ2V0RGF0YSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3BlblBvcHVwKHRpdGxlOiBhbnksIGRhdGE6IGFueSwgZm9vdGVyOiBhbnksIHR5cGU6IGFueSwgdGVtcGxhdGU6IGFueSA9IHVuZGVmaW5lZCkge1xyXG4gICAgbGV0IHByb3BzOiBhbnkgPSB7fTtcclxuICAgIGlmICh0eXBlID09ICdpbm5hcGxpY2FibGUnICYmIHRoaXMuYmFuUG9wdXBEaXYpXHJcbiAgICAgIHByb3BzLmVsZW1lbnQgPSB0aGlzLmJhblBvcHVwRGl2Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAodHlwZSA9PSAnbG9jaycgJiYgdGhpcy5sb2NrUG9wdXBEaXYpXHJcbiAgICAgIHByb3BzLmVsZW1lbnQgPSB0aGlzLmxvY2tQb3B1cERpdi5uYXRpdmVFbGVtZW50O1xyXG4gICAgcHJvcHMudGl0bGUgPSB0aXRsZTtcclxuICAgIHByb3BzLmRhdGEgPSBkYXRhO1xyXG4gICAgcHJvcHMuZm9vdGVyID0gZm9vdGVyO1xyXG4gICAgaWYgKHRlbXBsYXRlKVxyXG4gICAgICBwcm9wcy50ZW1wbGF0ZSA9IHRlbXBsYXRlO1xyXG4gICAgdGhpcy5jdXJyZW50Q29tcG9uZW50ID0gdGhpcy5kb21TZXJ2aWNlLmFwcGVuZENvbXBvbmVudChMb2NrVG9vbHRpcCwgZG9jdW1lbnQuYm9keSwgcHJvcHMpO1xyXG4gICAgdGhpcy5wb3B1cEluc3RhbmNlID0gPGFueT50aGlzLmN1cnJlbnRDb21wb25lbnQuaW5zdGFuY2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBjbG9zZVBvcHVwKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudENvbXBvbmVudClcclxuICAgICAgdGhpcy5wb3B1cEluc3RhbmNlLnJlbW92ZU1lKHRoaXMuY3VycmVudENvbXBvbmVudCk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
891
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS13aWRnZXQtY29udGFpbmVyL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeE0sT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQWdELGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQWtCLE1BQU0sK0JBQStCLENBQUM7QUFDcEwsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBU25FO0lBdUZFLDJCQUFvQixnQkFBb0MsRUFDOUMsVUFBOEIsRUFDOUIsZ0JBQW9DLEVBQ3BDLE1BQWMsRUFDZCxRQUF5QixFQUN6QixRQUFtQixFQUNuQixtQkFBd0Ms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WUFDWixrQkFBa0I7WUFDNUIsTUFBTTtZQUNKLGVBQWU7WUFDZixTQUFTO1lBQ0UsbUJBQW1CO1lBQzVCLFVBQVU7T0E5RnJCLGlCQUFpQixDQTZ6QjdCO0lBQUQsd0JBQUM7Q0FBQSxBQTd6QkQsSUE2ekJDO1NBN3pCWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgU2ltcGxlQ2hhbmdlLCBPbkRlc3Ryb3ksIE5nWm9uZSwgUmVuZGVyZXIyLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSYURhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuLy4uL3JhLmRhc2hib2FyZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUkFEYXNoYm9hcmRFdmVudEJ1cyB9IGZyb20gJy4uL3JhLmRhc2hiYXJkLmV2ZW50LmJ1cyc7XHJcbmltcG9ydCB7IFJBRXZlbnQsIFJBRXZlbnRLZXkgfSBmcm9tICcuLi9yYS5ldmVudC5lbnVtJztcclxuaW1wb3J0IHsgSUFwcENvbmZpZywgSVdpZGdldENvbmZpZ0ZpbHRlciwgSVdpZGdldEluZm8sIFJBRG93bmxvYWRUeXBlLCBSQURvd25sb2FkT3B0aW9uLCBSYVdpZGdldGxvY2tTdGF0dXMsIFdpZGdldFZpZXdTdGF0ZSwgSWNvbmZpZ0NoYW5nZXMgfSBmcm9tICdAc2NobmVpZGVyZXNzL3dpZGdldGZyYW1ld29yayc7XHJcbmltcG9ydCB7IE5neFVpTG9hZGVyU2VydmljZSB9IGZyb20gJ25neC11aS1sb2FkZXInO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW5vdGlmaWVyJztcclxuaW1wb3J0IHsgUkFUcmFuc2xhdGVTZXJ2aWNlLCBSQVBlcm1pc3Npb25TZXJ2aWNlLCBEb21TZXJ2aWNlIH0gZnJvbSAnQHNjaG5laWRlcmVzcy9yYS1jb21tb24nO1xyXG5pbXBvcnQgeyBMb2NrVG9vbHRpcCB9IGZyb20gJy4vbG9jay10b29sdGlwL2xvY2sudG9vbHRpcC5jb21wb25lbnQnXHJcblxyXG5kZWNsYXJlIHZhciBqUXVlcnk6IGFueTtcclxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhLXdpZGdldC1jb250YWluZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yYS53aWRnZXQuY29udGFpbmVyLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUkFXaWRnZXRDb250YWluZXIgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgcHVibGljIHNob3dQYW5lbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBpc1dpZGdldExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgd2lkZ2V0RWxlbWVudDogYW55O1xyXG4gIHByaXZhdGUgY29uZmlnQ2hhbmdlZDogYW55O1xyXG4gIHB1YmxpYyB3aWRnZXRIZWlnaHQ6IG51bWJlcjtcclxuICBwdWJsaWMgbG9ja0NsYXNzOiBzdHJpbmcgPSBcInVubG9ja2VkXCI7XHJcbiAgcHVibGljIGxvY2tTdGF0dXM6IFJhV2lkZ2V0bG9ja1N0YXR1cyA9IFJhV2lkZ2V0bG9ja1N0YXR1cy5VbmxvY2tlZDtcclxuICBwdWJsaWMgaXNEb3dubG9hZEljb25WaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzQ2hhcnREb3dubG9hZFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNHcmlkRG93bmxvYWRWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRvd25sb2FkSWNvblR5cGU6IFJBRG93bmxvYWRUeXBlO1xyXG4gIHB1YmxpYyBlbmFibGVUaXRsZUxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNHbG9iYWxGaWx0ZXJBcHBsaWVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAgJztcclxuICBwdWJsaWMgdG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgbG9ja0RldGFpbHM6IGFueTtcclxuICBwdWJsaWMgbG9ja1RlbXBsYXRlSW5mbzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBwdWJsaWMgZWRpdFRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBjb3B5VG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIG1vdmVUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgZXhjZWxUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgZGVsZXRlVG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGVkaXRUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgY29weVRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBtb3ZlVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGV4Y2VsVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGRlbGV0ZVRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBlZGl0VG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgY29weVRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIG1vdmVUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBleGNlbFRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIGRlbGV0ZVRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIHdpZGdldFNldHRpbmdzOiBhbnk7XHJcbiAgcHVibGljIG5vUGFkZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc01vdXNlSG92ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1NldHRpbmdzTGluazogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGlzS3BpVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93RXhjZWxsOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgaGlkZVRpdGxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGluYXBwbGljYWJsZUZpbHRlcnM6IGFueSA9IFtdO1xyXG4gIHB1YmxpYyBwb3B1cEluc3RhbmNlOiBMb2NrVG9vbHRpcDtcclxuICBwdWJsaWMgY3VycmVudENvbXBvbmVudDogYW55O1xyXG5cclxuICBwdWJsaWMgbG9ja0ljb25UaXRsZTogYW55O1xyXG4gIHB1YmxpYyBsb2NrSWNvbkZvb3RlcjogYW55O1xyXG4gIHB1YmxpYyBpbmFwcGxpY2FibGVJY29uVGl0bGU6IGFueTtcclxuICBwdWJsaWMgaW5hcHBsaWNhYmxlSWNvbkZvb3RlcjogYW55O1xyXG5cclxuXHJcbiAgQFZpZXdDaGlsZCgnY3RsV2lkZ2V0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGN0bFdpZGdldDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd3aWRnZXREcm9wZG93bicsIHsgc3RhdGljOiBmYWxzZSB9KSB3aWRnZXREcm9wZG93bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBzZWFyY2hJbnB1dDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd3Y1dyYXBwZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgd2NXcmFwcGVyOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2JhblBvcHVwRGl2JywgeyBzdGF0aWM6IGZhbHNlIH0pIGJhblBvcHVwRGl2OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2xvY2tQb3B1cERpdicsIHsgc3RhdGljOiBmYWxzZSB9KSBsb2NrUG9wdXBEaXY6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgnd2lkZ2V0LWluc3RhbmNlLWlkJykgd2lkZ2V0SW5zdGFuY2VJZDogbnVtYmVyO1xyXG4gIEBJbnB1dCgnZ2xvYmFsLWZpbHRlcicpIGdsb2JhbEZpbHRlcjogYW55O1xyXG4gIEBJbnB1dCgnZGF0YScpIGRhdGE6IGFueTtcclxuICBASW5wdXQoJ2V2ZW50LWJ1cycpIHJhRGFzaGJvYXJkRXZlbnRCdXM6IFJBRGFzaGJvYXJkRXZlbnRCdXM7XHJcbiAgQElucHV0KCdhcHAtY29uZmlnJykgYXBwQ29uZmlnOiBJQXBwQ29uZmlnO1xyXG4gIEBJbnB1dCgnd2lkZ2V0LXdpZHRoJykgd2lkdGg6IG51bWJlcjtcclxuICBASW5wdXQoJ3dpZGdldC1oZWlnaHQnKSBoZWlnaHQ6IG51bWJlcjtcclxuICBASW5wdXQoJ2dyaWQtY2VsbC1oZWlnaHQnKSBncmlkQ2VsbEhlaWdodDogbnVtYmVyO1xyXG5cclxuXHJcbiAgQE91dHB1dCgpIHdpZGdldERlbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgdXBkYXRlQXBwbGllZEZpbHRlcnMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgcHVibGljIGxvY2tUaXRsZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc1dpZGdldFN0YXRlQXBwbGljYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB3aWRnZXRFbXB0eVN0YXRlOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZG9tUmVzaXplZDogYm9vbGVhbjtcclxuICBwdWJsaWMgbG9ja1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgbG9ja2VkRmllbGRzOiBhbnk7XHJcbiAgcHVibGljIGRldGFpbFBhZ2VVcmw6IHN0cmluZztcclxuICBwdWJsaWMgYmFzZVVybDogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc1dpZGdldE1nbW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIFdpZGdldERpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIGVuYWJsZVRpdGxlTGluZUFjdHVhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB3aWRnZXRFbGVtZW50SGFuZGxlcjogYW55O1xyXG4gIEBJbnB1dCgnZG9tLXJlc2l6ZWQnKVxyXG4gIHNldCBzZXRSZXNpemVkKHJlc2l6ZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaW52b2tlV2lkZ2V0UmVzaXplZEV2ZW50KCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IFJhRGFzaGJvYXJkU2VydmljZSxcclxuICAgIHByaXZhdGUgbmd4U2VydmljZTogTmd4VWlMb2FkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBSQVRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBub3RpZmllcjogTm90aWZpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSByYVBlcm1pc3Npb25TZXJ2aWNlOiBSQVBlcm1pc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkb21TZXJ2aWNlOiBEb21TZXJ2aWNlKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ2NsaWNrJywgKGU6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZS50YXJnZXQuY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTmFtZSAhPSAnZmFsIGZhLWVsbGlwc2lzLXYgd2lkZ2V0LW1lbnUtZWxsaXBzZScpIHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5XaWRnZXREaXNwbGF5TmFtZSA9IHRoaXMuZ2V0d2lkZ2V0VGl0bGVUcmFuc2xhdGlvbih0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRUaXRsZSk7XHJcbiAgICB0aGlzLmxvY2tJY29uVGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubG9ja2VkZmllbGRzJyk7XHJcbiAgICB0aGlzLmxvY2tJY29uRm9vdGVyID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmxvY2tlZGZpZWxkc2VkaXRpbmZvJyk7XHJcbiAgICB0aGlzLmluYXBwbGljYWJsZUljb25UaXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5JbmFwcGxpY2FibGVGaWx0ZXJzJyk7XHJcbiAgICB0aGlzLmluYXBwbGljYWJsZUljb25Gb290ZXIgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uSW5hcHBsaWNhYmxlRmlsdGVyc0Rlc2MnKTtcclxuICB9XHJcbiAgZ2V0IHdpZGdldFZpZXdTdGF0ZSgpIHsgcmV0dXJuIFdpZGdldFZpZXdTdGF0ZTsgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzV2lkZ2V0TWdtbnQgPSB0aGlzLnJhUGVybWlzc2lvblNlcnZpY2UuaGFzUGVybWlzc2lvbigncmEud2lkZ2V0bWFuYWdlbWVudCcpO1xyXG4gICAgaWYgKGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cyAmJiBjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMuY3VycmVudFZhbHVlICE9IGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlZCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmVXaXRoS2V5KFJBRXZlbnQuQ29uZmlnQ2hhbmdlZCwgUkFFdmVudEtleS5XaWRnZXRJbnN0YW5jZUlkLCB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkLnRvU3RyaW5nKCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ0NoYW5nZUV2ZW50SGFuZGxlcihlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiBjaGFuZ2VzLmdsb2JhbEZpbHRlciAmJiBjaGFuZ2VzLmdsb2JhbEZpbHRlci5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5nbG9iYWxGaWx0ZXIucHJldmlvdXNWYWx1ZSkge1xyXG5cclxuICAgICAgbGV0IGZpbHRlck9iaiA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHRoaXMuZ2xvYmFsRmlsdGVyKTtcclxuICAgICAgaWYgKGZpbHRlck9iai5XaWRnZXRJbnN0YW5jZUlkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQgIT0gZmlsdGVyT2JqLldpZGdldEluc3RhbmNlSWQpXHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVmcmVzaFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlcy53aWR0aCAmJiBjaGFuZ2VzLndpZHRoLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLndpZHRoLnByZXZpb3VzVmFsdWUgfHxcclxuICAgICAgKGNoYW5nZXMuaGVpZ2h0ICYmIGNoYW5nZXMuaGVpZ2h0LmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmhlaWdodC5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLmludm9rZVdpZGdldFJlc2l6ZWRFdmVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW52b2tlV2lkZ2V0UmVzaXplZEV2ZW50KCkge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCkge1xyXG4gICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0RWxlbWVudC53aWRnZXRSZXNpemVkID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBsZXQgc2l6ZTogYW55ID0ge307XHJcbiAgICAgICAgc2l6ZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICBzaXplLndpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICBzaXplLmNlbGxIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC53aWRnZXRSZXNpemVkKHNpemUpO1xyXG4gICAgICAgIGlmICh0aGlzLmhlaWdodCA9PSAxIHx8IHRoaXMud2lkdGggPT0gMSlcclxuICAgICAgICAgIHRoaXMuaXNLcGlWaWV3ID0gdHJ1ZVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMuaXNLcGlWaWV3ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vdXNlSG92ZXIoaXNIb3ZlciA9IHRydWUpIHtcclxuICAgIHRoaXMuaXNNb3VzZUhvdmVyID0gaXNIb3ZlcjtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50KSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRFbGVtZW50LmhvdmVyU3RhdHVzID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuaG92ZXJTdGF0dXMoaXNIb3Zlcik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCd3aWRnZXQgZnJhbWV3b3JrIG91dGRhdGVkLCBwbGVhc2UgdXBkYXRlIHRvIHZlcnNpb24gMC4wLjk2Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICB0aGlzLmNsb3NlUG9wdXAoKTtcclxuICAgIH0pXHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGxldCBpdGVtID0galF1ZXJ5KHRoaXMud2NXcmFwcGVyLm5hdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoJ2dyaWRzdGVyLWl0ZW0nKTtcclxuICAgICAgaXRlbS5iaW5kKCdtb3VzZWVudGVyJywgKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5ncmlkc3Rlckl0ZW1FbnRlciA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaXRlbS5iaW5kKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5ncmlkc3Rlckl0ZW1FbnRlciA9IGZhbHNlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF3aW5kb3cubW91c2VPdmVyV2lkZ2V0TWVudSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ0NoYW5nZWQpXHJcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlZC51bnN1YnNjcmliZSgpO1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudEhhbmRsZXIgJiYgdGhpcy5kYXRhICYmIHRoaXMuZGF0YS53aWRnZXRJbmZvICYmIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCd3aWRnZXRpbml0aWF0ZWQnICsgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCwgdGhpcy53aWRnZXRFbGVtZW50SGFuZGxlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIFRvIEVkaXQgY3VycmVudCB3aWRnZXQgY29uZmlndXJhdGlvbiovXHJcbiAgcHVibGljIGVkaXRXaWRnZXQoKSB7XHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyOiBJV2lkZ2V0Q29uZmlnRmlsdGVyO1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiB0eXBlb2YgKHRoaXMud2lkZ2V0RWxlbWVudC5nZXRDb25maWdGaWx0ZXIpID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgbGV0IGNvbmZpZ0RhdGEgPSB0aGlzLndpZGdldEVsZW1lbnQuZ2V0Q29uZmlnRmlsdGVyKCk7XHJcbiAgICAgIGlmIChjb25maWdEYXRhKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyID0gY29uZmlnRGF0YTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHdpZGdldENvbmZpZ0ZpbHRlcikge1xyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LldpZGdldEVkaXRDbGlja2VkLCB3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXJEYXRhID0gdGhpcy5nZW5lcmF0ZUNvbmZpZ0ZpbHRlcihmYWxzZSk7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0RWRpdENsaWNrZWQsIHdpZGdldENvbmZpZ0ZpbHRlckRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFRvIERlbGV0ZSBjdXJyZW50IHdpZGdldCBmcm9tIERPTSovXHJcbiAgcHVibGljIGRlbGV0ZVdpZGdldCgpIHtcclxuICAgIGxldCB3aWRnZXRDb250YWluZXJDb250ZXh0ID0gdGhpcztcclxuICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQubmd4U2VydmljZS5zdGFydCgpO1xyXG4gICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5kYXNoYm9hcmRTZXJ2aWNlLmRlbGV0ZVdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZShzdGF0dXMgPT4ge1xyXG4gICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0Lm5neFNlcnZpY2Uuc3RvcCgpO1xyXG4gICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC53aWRnZXREZWxldGVkLmVtaXQodGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgICAgdGhpcy5zZXRJbmFwcGxpY2FibGVGaWx0ZXJzKHVuZGVmaW5lZCwgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5ub3RpZmllci5ub3RpZnkoJ2Vycm9yJywgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdGYWlsZWRUb1JlbW92ZVdpZGdldCcpICsgXCIgIChcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi4nICsgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0VGl0bGUsIHRydWUpICsgXCIpIVwiKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIE1vdmUgb3IgY2hhbmdlIHBvc2l0aW9uIGlmIGN1cnJlbnQgd2lkZ2V0IGNvbnRhaW5lciovXHJcbiAgcHVibGljIG1vdmVXaWRnZXQoKSB7XHJcbiAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50Lk1vdmVXaWRnZXQsIHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgIHRoaXMuc2V0SW5hcHBsaWNhYmxlRmlsdGVycyh1bmRlZmluZWQsIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgLy8gdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLm1vdmVXaWRnZXQod2lkZ2V0SW5mbyk7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gQ29weSBDdXJyZW50IHdpZGdldCB3aXRoIHNhbWUgY29uZmlndXJhdGlvbiovXHJcbiAgcHVibGljIGNvcHlXaWRnZXQoKSB7XHJcbiAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LkNvcHlXaWRnZXQsIHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgIC8vdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmNvcHlXaWRnZXQod2lkZ2V0SW5mbyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdmlzaXRQYWdlKCkge1xyXG4gICAgdGhpcy5iYXNlVXJsID0gdGhpcy5nZXRIb3N0VXJsKCk7XHJcbiAgICBsZXQgdXJsID0gdGhpcy5iYXNlVXJsICsgdGhpcy5kZXRhaWxQYWdlVXJsO1xyXG4gICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvICYmIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0U2V0dGluZ3MgPSB0aGlzLmdldFBhcnNlZENvbmZpZyh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICAgIGlmICh0aGlzLndpZGdldFNldHRpbmdzLmN1c3RvbVBhZ2VQYXJhbXMgfHwgdGhpcy53aWRnZXRTZXR0aW5ncy5jdXN0b21QYWdlVVJMKSB7XHJcbiAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMud2lkZ2V0RWxlbWVudC5nZXRQYWdlUGFyYW1zQ2xpY2tlZCgpO1xyXG4gICAgICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRUeXBlID09ICdBViBXaWRnZXQnIHx8IHRoaXMud2lkZ2V0U2V0dGluZ3MuY3VzdG9tUGFnZVVSTClcclxuICAgICAgICAgICAgdXJsID0gdXJsICsgcGFyYW1zO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnPycgKyBwYXJhbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRIb3N0VXJsKCkge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgKyAod2luZG93LmxvY2F0aW9uLnBvcnQgPyAnOicgKyB3aW5kb3cubG9jYXRpb24ucG9ydCA6ICcnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25maWdDaGFuZ2VFdmVudEhhbmRsZXIod2lkZ2V0SW5mbykge1xyXG4gICAgdGhpcy5kYXRhLndpZGdldEluZm8gPSB3aWRnZXRJbmZvO1xyXG4gICAgaWYgKHRoaXMuZ3JpZENlbGxIZWlnaHQgPiAwKSB7XHJcbiAgICAgIHRoaXMuZGF0YS53aWRnZXRJbmZvLnJvd0hlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIHR5cGVvZiAodGhpcy53aWRnZXRFbGVtZW50LnNldENvbmZpZ0ZpbHRlcikgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aGlzLndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKHRoaXMuZ2VuZXJhdGVDb25maWdGaWx0ZXIodHJ1ZSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2Fybignd2lkZ2V0IGZyYW1ld29yayBvdXRkYXRlZCwgcGxlYXNlIHVwZGF0ZSB0byB2ZXJzaW9uIDAuMC45OCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWZyZXNoV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvLCB0cnVlKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlQ29uZmlnRmlsdGVyKGNvbmZpZ0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlckRhdGEgPSA8SVdpZGdldENvbmZpZ0ZpbHRlcj57XHJcbiAgICAgIGFwcENvbmZpZzogdGhpcy5hcHBDb25maWcsXHJcbiAgICAgIGdsb2JhbEZpbHRlcjogdGhpcy5nbG9iYWxGaWx0ZXIsXHJcbiAgICAgIHdpZGdldEluZm86IHRoaXMuZGF0YS53aWRnZXRJbmZvLFxyXG4gICAgICBjb25maWc6IHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnLFxyXG4gICAgICBjb25maWdDaGFuZ2VzOiB0aGlzLmdldENvbmZpZ0NoYW5nZXMoY29uZmlnQ2hhbmdlZClcclxuICAgIH1cclxuICAgIHJldHVybiB3aWRnZXRDb25maWdGaWx0ZXJEYXRhO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKiAgVG8gbG9hZCBleHRlcm5hbCBjdXN0b20gZWxlbWVudCB0byB0aGUgd2lkZ2V0IGNvbnRhaW5lciovXHJcbiAgYXN5bmMgbG9hZFdpZGdldCh3aWRnZXRJbmZvOiBhbnkpIHtcclxuICAgIHdpZGdldEluZm8ucm93SGVpZ2h0ID0gdGhpcy5ncmlkQ2VsbEhlaWdodDtcclxuICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXIgPSA8SVdpZGdldENvbmZpZ0ZpbHRlcj57XHJcbiAgICAgIGNvbmZpZzogd2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyxcclxuICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmdsb2JhbEZpbHRlcixcclxuICAgICAgY29uZmlnQ2hhbmdlczogdGhpcy5nZXRDb25maWdDaGFuZ2VzKGZhbHNlKVxyXG4gICAgfVxyXG4gICAgaWYgKHdpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgdGhpcy53aWRnZXRTZXR0aW5ncyA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHdpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpO1xyXG4gICAgICB0aGlzLmFwcGxheVdpZGdldFNldHRpbmdzKHRoaXMud2lkZ2V0U2V0dGluZ3MpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kZXRhaWxQYWdlVXJsID0gd2lkZ2V0SW5mby5kZXRhaWxQYWdlVXJsO1xyXG4gICAgbGV0IG1lID0gdGhpcztcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5sb2FkRXh0ZXJuYWxTY3JpcHQod2lkZ2V0SW5mby5zY3JpcHRVcmwsICgpID0+IHtcclxuICAgICAgdGhpcy5zZXROb3RDb25maWd1cmVkU3RhdGUod2lkZ2V0SW5mbyk7XHJcbiAgICAgIGxldCBhcHBNb2R1bGUgPSB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXROYW1lO1xyXG4gICAgICBpZiAodGhpcy5kYXRhLndpZGdldEluZm8uYXBwbGljYXRpb25Nb2R1bGUgJiYgdGhpcy5kYXRhLndpZGdldEluZm8uYXBwbGljYXRpb25Nb2R1bGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGFwcE1vZHVsZSA9IHRoaXMuZGF0YS53aWRnZXRJbmZvLmFwcGxpY2F0aW9uTW9kdWxlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5sb2FkVHJhbnNsYXRpb25zKHRoaXMuYXBwQ29uZmlnLmFwcE1hbmFnZW1lbnRCYXNlVXJsLCBhcHBNb2R1bGUsIGZhbHNlKS50aGVuKCgpID0+IHtcclxuICAgICAgICBtZS53aWRnZXRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh3aWRnZXRJbmZvLmN1c3RvbVRhZyk7XHJcbiAgICAgICAgbWUud2lkZ2V0RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ3aWRnZXQtaW5zdGFuY2UtaWRcIiwgd2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuXHJcbiAgICAgICAgbGV0IGhhbmRsZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignb24td2lkZ2V0LXJlc3BvbmQnLCAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdmFyIHR5cGU6IHN0cmluZyA9IGUuZGV0YWlsLnR5cGU7XHJcbiAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdvbkRhdGFMb2FkJzpcclxuICAgICAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsLmRhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93UGFuZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93UGFuZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdvbkNvbmZpZ0VkaXRDbGlja2VkJzpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0V2lkZ2V0KCk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnb25FbmFibGVEZWZhdWx0U3RhdGUnOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNldEVtcHR5U3RhdGUoZS5kZXRhaWwuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnb25TZXRUaXRsZVVuZGVybGluZSc6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChlLmRldGFpbC5kYXRhID09IHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUaXRsZUxpbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUaXRsZUxpbmUgPSB0aGlzLmVuYWJsZVRpdGxlTGluZUFjdHVhbDtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdvbldpZGdldFRpdGxlSGlkZGVuJzpcclxuICAgICAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsLmRhdGEgPT0gdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVUaXRsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVUaXRsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ29uVXBkYXRlTG9ja0RhdGEnOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNldExvY2soZS5kZXRhaWwuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnb25HbG9iYWxGaWx0ZXJBcHBsaWNhYmxlQ2hlY2snOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNldEluYXBwbGljYWJsZUZpbHRlcnMoZS5kZXRhaWwuZGF0YSwgd2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhpcy53aWRnZXRFbGVtZW50LnRpdGxlTGluZUVuYWJsZWQpICE9ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRpdGxlTGluZUVuYWJsZWQgPSB0aGlzLndpZGdldEVsZW1lbnQudGl0bGVMaW5lRW5hYmxlZCgpO1xyXG4gICAgICAgICAgICAgIGlmICh0aXRsZUxpbmVFbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVRpdGxlTGluZSA9IHRpdGxlTGluZUVuYWJsZWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVRpdGxlTGluZUFjdHVhbCA9IHRpdGxlTGluZUVuYWJsZWQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdFRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZWRpdCcpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lZGl0VGV4dCA9ICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZWRpdCcpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICB0aGlzLmVkaXRUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZWRpdCcpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZWRpdFRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNvcHlUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmNvcHknKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5JykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29weVRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmNvcHknKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb3B5VG9vbFRpcFZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmNvcHknKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvcHlUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5tb3ZlVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJylcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgIHRoaXMubW92ZVRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLm1vdmUnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlVG9vbFRpcFZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLm1vdmUnKTtcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5leGNlbFRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5leGNlbCcpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLmV4Y2VsVGV4dCA9ICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5leGNlbFRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5leGNlbCcpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZXhjZWxUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kZWxldGVUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZScpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZScpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKTtcclxuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5pc1dpZGdldExvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5hcHBDb25maWcgPSB0aGlzLmFwcENvbmZpZztcclxuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8gPSB3aWRnZXRJbmZvO1xyXG4gICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnQ2hhbmdlcyA9IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhmYWxzZSk7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci53aWRnZXRJbmZvLndpZGdldE5hbWUgPSB3aWRnZXRJbmZvLndpZGdldE5hbWU7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5nbG9iYWxGaWx0ZXIgPSB0aGlzLmdsb2JhbEZpbHRlcjtcclxuICAgICAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmxvYWRDb250ZW50KHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0TG9jayh3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXREb3dubG9hZEljb24oKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudEhhbmRsZXIgPSBoYW5kbGVyO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignd2lkZ2V0aW5pdGlhdGVkJyArIHdpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCwgaGFuZGxlcik7XHJcbiAgICAgICAgdGhpcy5jdGxXaWRnZXQubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLndpZGdldEVsZW1lbnQpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqVG8gc2V0IERlZmF1bHQgU3RhdGUgZm9yIHRoZSB3aWRnZXQgd2hlbiBpdCBpcyBub3QgY29uZmlndXJlZCAqL1xyXG4gIHNldE5vdENvbmZpZ3VyZWRTdGF0ZSh3aWRnZXRJbmZvOiBJV2lkZ2V0SW5mbywgZm9yY2VFbmFibGU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgaWYgKCh3aWRnZXRJbmZvLnNob3dEZWZhdWx0U3RhdGUgJiYgKHdpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcgPT0gXCJcIiB8fCBPYmplY3Qua2V5cyhKU09OLnBhcnNlKHdpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcpKS5sZW5ndGggPT0gMCkpIHx8IChmb3JjZUVuYWJsZSkpIHtcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMud2lkZ2V0RW1wdHlTdGF0ZSA9IFdpZGdldFZpZXdTdGF0ZS5lbXB0eUNvbmZpZy50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0RW1wdHlTdGF0ZSA9ICcnO1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipUbyBjb25maWd1cmUgZW1wdHkgc3RhdGUgZm9yIHRoZSB3aWRnZXQgICovXHJcbiAgc2V0RW1wdHlTdGF0ZSh3aWRnZXRTdGF0ZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5oZWlnaHQgPT0gMSB8fCB0aGlzLndpZHRoID09IDEpXHJcbiAgICAgIHRoaXMuaXNLcGlWaWV3ID0gdHJ1ZVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmlzS3BpVmlldyA9IGZhbHNlO1xyXG4gICAgdGhpcy53aWRnZXRFbXB0eVN0YXRlID0gd2lkZ2V0U3RhdGUud2lkZ2V0Vmlld1N0YXRlO1xyXG4gICAgdGhpcy5pc0dsb2JhbEZpbHRlckFwcGxpZWQgPSB3aWRnZXRTdGF0ZS5pc0dsb2JhbEZpbHRlckFwcGxpZWQ7XHJcbiAgICBpZiAod2lkZ2V0U3RhdGUgIT0gV2lkZ2V0Vmlld1N0YXRlLm5vcm1hbCkge1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKHdpZGdldFN0YXRlKSB7XHJcbiAgICAgIGNhc2UgV2lkZ2V0Vmlld1N0YXRlLmVtcHR5Q29uZmlnOlxyXG4gICAgICAgIHRoaXMuc2V0Tm90Q29uZmlndXJlZFN0YXRlKHRoaXMuZGF0YS53aWRnZXRJbmZvLCB0cnVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBXaWRnZXRWaWV3U3RhdGUuZW1wdHlEYXRhOlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFdpZGdldFZpZXdTdGF0ZS5lcnJvcjpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbmZpZ0NoYW5nZXMoY29uZmlnQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBsZXQgY29uZmlnQ2hhbmdlcyA9IDxJY29uZmlnQ2hhbmdlcz57XHJcbiAgICAgIGlzQ29uZmlnVXBkYXRlZDogY29uZmlnQ2hhbmdlZCxcclxuICAgICAgdXBkYXRlZENvbmZpZ1Byb3BlcnR5OiBbXVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbmZpZ0NoYW5nZXM7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gcmVmcmVzaCB3aWRnZXQgb24gaW5wdXQgY29uZmlnIGNoYW5nZXMgKi9cclxuICBhc3luYyByZWZyZXNoV2lkZ2V0KHdpZGdldEluZm86IElXaWRnZXRJbmZvLCBjb25maWdDaGFuZ2VkOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMuV2lkZ2V0RGlzcGxheU5hbWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uJyArIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFRpdGxlLCB0cnVlKTtcclxuICAgIHdpZGdldEluZm8ucm93SGVpZ2h0ID0gdGhpcy5ncmlkQ2VsbEhlaWdodDtcclxuICAgIHRoaXMuc2V0Tm90Q29uZmlndXJlZFN0YXRlKHdpZGdldEluZm8pO1xyXG4gICAgbGV0IHdpZGdldENvbnRhaW5lckNvbnRleHQgPSB0aGlzO1xyXG5cclxuICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXIgPSA8SVdpZGdldENvbmZpZ0ZpbHRlcj57XHJcbiAgICAgIGNvbmZpZzogd2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyxcclxuICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmdsb2JhbEZpbHRlcixcclxuICAgICAgYXBwQ29uZmlnOiB0aGlzLmFwcENvbmZpZyxcclxuICAgICAgd2lkZ2V0SW5mbzogd2lkZ2V0SW5mbyxcclxuICAgICAgY29uZmlnQ2hhbmdlczogdGhpcy5nZXRDb25maWdDaGFuZ2VzKGNvbmZpZ0NoYW5nZWQpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpZGdldENvbnRhaW5lckNvbnRleHQuaXNXaWRnZXRMb2FkZWQpIHtcclxuICAgICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiB0eXBlb2YgKHRoaXMud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIpID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICAgIH1cclxuICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC53aWRnZXRFbGVtZW50LmxvYWRDb250ZW50KHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2V0TG9jayh3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnKTtcclxuICAgICAgYXdhaXQgdGhpcy5zZXREb3dubG9hZEljb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3VzZU92ZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy50b29sVGlwVmFsdWUgPSAnICc7XHJcbiAgICB0aGlzLnRvb2xUaXBXaWR0aCA9ICcwcHgnO1xyXG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoZWxlbWVudC5vZmZzZXRXaWR0aCA8IGVsZW1lbnQuc2Nyb2xsV2lkdGgpIHtcclxuICAgICAgdGhpcy50b29sVGlwVmFsdWUgPSBlbGVtZW50LmlubmVySFRNTDtcclxuICAgICAgdGhpcy50b29sVGlwV2lkdGggPSAnMzAwcHgnO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudG9vbFRpcFdpZHRoID0gJzBweCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNldExvY2soY29uZmlnOiBzdHJpbmcpIHtcclxuICAgIHRoaXMubG9ja1RlbXBsYXRlSW5mbyA9IHRoaXMud2lkZ2V0RWxlbWVudC5sb2FkTG9ja0luZm8oKTtcclxuICAgIHZhciBjb25maWdPYmo6IGFueTtcclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgY29uZmlnT2JqID0gSlNPTi5wYXJzZShjb25maWcpO1xyXG4gICAgICBpZiAoY29uZmlnT2JqICYmIGNvbmZpZ09iai5Mb2NrcyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAoY29uZmlnT2JqLkxvY2tzLklzRGF0ZUxvY2tlZCB8fCBjb25maWdPYmouTG9ja3MuSXNEYXRlc0xvY2tlZCB8fCBjb25maWdPYmouTG9ja3MuSXNQYXJ0aWNpcGFudExvY2tlZCB8fCBjb25maWdPYmouTG9ja3MuSXNTb3VyY2VMb2NrZWQpIHtcclxuICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMgPSBbXTtcclxuICAgICAgICAgIGlmIChjb25maWdPYmouTG9ja3MuSXNEYXRlTG9ja2VkIHx8IGNvbmZpZ09iai5Mb2Nrcy5Jc0RhdGVzTG9ja2VkKVxyXG4gICAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRhdGVSYW5nZScpKTtcclxuXHJcbiAgICAgICAgICBpZiAoY29uZmlnT2JqLkxvY2tzLklzUGFydGljaXBhbnRMb2NrZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NrRGV0YWlscy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EaXZpc2lvbk9yR3JvdXBvclNpdGUnKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29uZmlnT2JqLkxvY2tzLklzU291cmNlTG9ja2VkKVxyXG4gICAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRhdGFTdHJlYW0nKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5sb2NrRGV0YWlscyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2NrRGV0YWlscyA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldERvd25sb2FkSWNvbigpIHtcclxuICAgIGxldCBkb3dubG9hZFR5cGUgPSBhd2FpdCB0aGlzLndpZGdldEVsZW1lbnQuZ2V0RG93bmxvYWRUeXBlKCk7XHJcbiAgICB0aGlzLmRvd25sb2FkSWNvblR5cGUgPSBkb3dubG9hZFR5cGU7XHJcbiAgICB0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NoYXJ0RG93bmxvYWRWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzR3JpZERvd25sb2FkVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93RXhjZWxsID0gdHJ1ZTtcclxuICAgIGlmIChkb3dubG9hZFR5cGUgIT0gUkFEb3dubG9hZFR5cGUuTm9uZSkge1xyXG4gICAgICB0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLmlzV2lkZ2V0TWdtbnQgJiYgIXRoaXMuZGV0YWlsUGFnZVVybCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1NldHRpbmdzTGluayA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRvd25sb2FkVHlwZSA9PSBSQURvd25sb2FkVHlwZS5DaGFydCkge1xyXG4gICAgICB0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb3dubG9hZFR5cGUgPT0gUkFEb3dubG9hZFR5cGUuR3JpZCkge1xyXG4gICAgICB0aGlzLmlzR3JpZERvd25sb2FkVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRvd25sb2FkVHlwZSA9PSBSQURvd25sb2FkVHlwZS5TdGF0aXN0aWNzKSB7XHJcbiAgICAgIHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zaG93RXhjZWxsID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZG93bmxvYWRJY29uQ2xpY2tlZCh0eXBlOiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFwiQ1NWXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uQ1NWKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlBOR1wiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLlBORyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJQREZcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5QREYpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiU1ZHXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uU1ZHKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkpQRUdcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5KUEVHKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlTWVudSgpIHtcclxuICAgIGpRdWVyeSgnI3JhLWRiLXdpZGdldC1tZW51JykucmVtb3ZlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrVmlzaXRMaW5rVmlzaWJsaXR5KCkge1xyXG4gICAgbGV0IGlzVmlzaXRBcHBsaWNhYmxlID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgdHlwZW9mIHRoaXMud2lkZ2V0RWxlbWVudC5nZXRWaXNpdExpbmtWaXNpYmlsaXR5U3RhdHVzID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgaXNWaXNpdEFwcGxpY2FibGUgPSB0aGlzLndpZGdldEVsZW1lbnQuZ2V0VmlzaXRMaW5rVmlzaWJpbGl0eVN0YXR1cygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzVmlzaXRBcHBsaWNhYmxlO1xyXG4gIH1cclxuXHJcbiAgLyoqU2hvdyBkcm9wZG93biBvbiBnZWFyIGljb24gY2xpY2sgICovXHJcbiAgcHVibGljIHNob3dEcm9wRG93bihlOiBhbnkpIHtcclxuICAgIHRoaXMuc2V0RG93bmxvYWRJY29uKCk7XHJcblxyXG4gICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcblxyXG4gICAgICBsZXQgdGFyZ2V0UG9zID0gZS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIGxldCBzdHlsZTogc3RyaW5nID0gXCJwb3NpdGlvbjpmaXhlZDt0b3A6XCIgKyAodGFyZ2V0UG9zLnkgKyAxNSkgKyAncHgnICsgJztsZWZ0OicgKyAoZS5wYWdlWCAtIDEyMikgKyAncHg7ei1pbmRleDoxMDAwOyc7XHJcbiAgICAgIGxldCBodG1sID0gdGhpcy5nZXRDb250ZW54dEh0bWwoc3R5bGUpO1xyXG5cclxuICAgICAgalF1ZXJ5KGh0bWwpLmFwcGVuZFRvKCdib2R5Jyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc1dpZGdldE1nbW50KSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0VkaXRXaWRnZXQnLCB0aGlzLmVkaXRXaWRnZXQpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NDb3B5V2lkZ2V0JywgdGhpcy5jb3B5V2lkZ2V0KTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djTW92ZVdpZGdldCcsIHRoaXMubW92ZVdpZGdldCk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y1dpZGdldERlbGV0ZScsIHRoaXMuZGVsZXRlV2lkZ2V0KTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgY3VzdG9tUGFnZVBhcmFtcyA9IGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5kYXRhLndpZGdldEluZm8gJiYgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgICB0aGlzLndpZGdldFNldHRpbmdzID0gdGhpcy5nZXRQYXJzZWRDb25maWcodGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpO1xyXG4gICAgICAgIGlmICh0aGlzLndpZGdldFNldHRpbmdzLmN1c3RvbVBhZ2VQYXJhbXMgfHx0aGlzLndpZGdldFNldHRpbmdzLmN1c3RvbVBhZ2VVUkwpIHtcclxuICAgICAgICAgIGN1c3RvbVBhZ2VQYXJhbXMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCh0aGlzLmRldGFpbFBhZ2VVcmwgfHwgY3VzdG9tUGFnZVBhcmFtcykgJiYgdGhpcy5jaGVja1Zpc2l0TGlua1Zpc2libGl0eSgpKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y1Zpc2l0V2lkZ2V0JywgdGhpcy52aXNpdFBhZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUpIHtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRQbmcnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdQTkcnKTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRKcGcnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdKUEVHJyk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkUGRmJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnUERGJyk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkU3ZnJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnU1ZHJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlICYmIHRoaXMuc2hvd0V4Y2VsbCkge1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NEb3dubG9hZEV4Y2VsJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnQ1NWJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYS1kYi13aWRnZXQtbWVudScpLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93Lm1vdXNlT3ZlcldpZGdldE1lbnUgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhLWRiLXdpZGdldC1tZW51JykuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsICgpID0+IHtcclxuICAgICAgICB3aW5kb3cubW91c2VPdmVyV2lkZ2V0TWVudSA9IGZhbHNlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF3aW5kb3cuZ3JpZHN0ZXJJdGVtRW50ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRFdmVudExpc3RlbmVyKGlkOiBzdHJpbmcsIGV2ZW50OiBhbnksIHBhcmFtcz86IGFueSkge1xyXG4gICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIGV2ZW50LmNhbGwodGhpcywgcGFyYW1zKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvbnRlbnh0SHRtbChzdHlsZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgaHRtbDogc3RyaW5nID0gJzxkaXYgaWQ9XCJyYS1kYi13aWRnZXQtbWVudVwiJyArICdzdHlsZT1cIicgKyBzdHlsZSArICdcIiBjbGFzcz1cImRvd25sb2FkLWNvbnRlbnQgZHJvcGRvd24tY29udGVudCB3aWRnZXQtY29uZmlnLWl0ZW0gZHJvcGRvd24tY2xpY2tcIiBzdHlsZT1cInotaW5kZXg6IDEwMDI7XCI+JztcclxuXHJcbiAgICBsZXQgc2V0dGluZ3MgPSAnJztcclxuICAgIGlmICh0aGlzLmlzV2lkZ2V0TWdtbnQpIHtcclxuICAgICAgc2V0dGluZ3MgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0VkaXRXaWRnZXQnLCAnZmFsIGZhLWVkaXQnLCB0aGlzLmVkaXRUZXh0KTtcclxuICAgICAgc2V0dGluZ3MgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0NvcHlXaWRnZXQnLCAnZmFsIGZhLWNvcHknLCB0aGlzLmNvcHlUZXh0KTtcclxuICAgICAgc2V0dGluZ3MgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y01vdmVXaWRnZXQnLCAnZmFsIGZhLWFycm93cy1hbHQnLCB0aGlzLm1vdmVUZXh0KTtcclxuICAgIH1cclxuICAgIGxldCBjdXN0b21QYWdlUGFyYW1zID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5kYXRhLndpZGdldEluZm8gJiYgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgdGhpcy53aWRnZXRTZXR0aW5ncyA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKTtcclxuICAgICAgaWYgKHRoaXMud2lkZ2V0U2V0dGluZ3MuY3VzdG9tUGFnZVBhcmFtcyB8fCB0aGlzLndpZGdldFNldHRpbmdzLmN1c3RvbVBhZ2VVUkwpIHtcclxuICAgICAgICBjdXN0b21QYWdlUGFyYW1zID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCh0aGlzLmRldGFpbFBhZ2VVcmwgfHwgY3VzdG9tUGFnZVBhcmFtcykgJiYgdGhpcy5jaGVja1Zpc2l0TGlua1Zpc2libGl0eSgpKSB7XHJcbiAgICAgIHNldHRpbmdzICs9ICc8YSBzdHlsZT1cIm1heC1oZWlnaHQ6IDMwcHg7YWxpZ24taXRlbXM6IGNlbnRlcjthbGlnbi1jb250ZW50OiBjZW50ZXI7IGRpc3BsYXk6IGZsZXg7XCIgaWQ9XCJ3Y1Zpc2l0V2lkZ2V0XCI+JztcclxuICAgICAgc2V0dGluZ3MgKz0gJzxpIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA0cHg7Zm9udC1zaXplOiAyN3B4ICFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJmYWwgZmEtYW5nbGUtcmlnaHRcIj48L2k+ICc7XHJcbiAgICAgIHNldHRpbmdzICs9ICc8c3BhbiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTFweDttYXJnaW4tdG9wOiAycHg7XCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDZweDtcIj4nO1xyXG4gICAgICBzZXR0aW5ncyArPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24udmlzaXRwYWdlJyk7XHJcbiAgICAgIHNldHRpbmdzICs9ICc8L3NwYW4+PC9hPic7XHJcbiAgICB9XHJcbiAgICBpZiAoKHRoaXMuZGV0YWlsUGFnZVVybCAmJiB0aGlzLmNoZWNrVmlzaXRMaW5rVmlzaWJsaXR5KCkpIHx8IHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPVwiY29sb3I6ICM5RkEwQTQ7Zm9udC1zaXplOiAxMnB4O3BhZGRpbmctdG9wOiA4cHg7cGFkZGluZy1sZWZ0OiAxMnB4O1wiPic7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLnNldHRpbmdzJykgKyAnPC9kaXY+JztcclxuICAgICAgaHRtbCArPSBzZXR0aW5ncztcclxuICAgICAgaHRtbCArPSB0aGlzLmdldEhyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlKSB7XHJcbiAgICAgIGlmICh0aGlzLnNob3dFeGNlbGwpIHtcclxuICAgICAgICBpZiAodGhpcy5kZXRhaWxQYWdlVXJsIHx8IHRoaXMuaXNXaWRnZXRNZ21udClcclxuICAgICAgICAgIGh0bWwgKz0gJzxzcGFuIHN0eWxlPVwiY29sb3I6ICM5RkEwQTQ7Zm9udC1zaXplOiAxMnB4O1wiPic7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaHRtbCArPSAnPHNwYW4gc3R5bGU9XCJjb2xvcjogIzlGQTBBNDtmb250LXNpemU6IDEycHg7cGFkZGluZy10b3A6NXB4O2Rpc3BsYXk6YmxvY2s7XCI+JztcclxuXHJcbiAgICAgICAgaHRtbCArPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZG93bmxvYWRzJyk7XHJcbiAgICAgICAgaHRtbCArPSAnPC9zcGFuPic7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUpIHtcclxuICAgICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPVwicGFkZGluZy10b3A6IDEwcHg7XCIgY2xhc3M9XCJjaGFydERvd25sb2FkXCI+JztcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZFBuZycsICdmYWwgZmEtZmlsZS1pbWFnZScsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5wbmcnKSk7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRKcGcnLCAnZmFsIGZhLWZpbGUtaW1hZ2UnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uanBlZycpKTtcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZFBkZicsICdmYWwgZmEtZmlsZS1wZGYnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ucGRmJykpO1xyXG4gICAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0Rvd25sb2FkU3ZnJywgJ2ZhbCBmYS1maWxlLWFsdCcsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5zdmcnKSk7XHJcbiAgICAgICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgJiYgdGhpcy5zaG93RXhjZWxsKSB7XHJcbiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cImdyaWREb3dubG9hZFwiPic7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRFeGNlbCcsICdmYWwgZmEtZG93bmxvYWQnLCB0aGlzLmV4Y2VsVGV4dCk7XHJcbiAgICAgICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlICYmIHRoaXMuaXNXaWRnZXRNZ21udCAmJiB0aGlzLnNob3dFeGNlbGwpIHtcclxuICAgICAgaHRtbCArPSB0aGlzLmdldEhyKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1dpZGdldE1nbW50KSB7XHJcbiAgICAgIGh0bWwgKz0gJzxhIGlkPVwid2NXaWRnZXREZWxldGVcIj48aSBjbGFzcz1cImZhbCBmYS10aW1lc1wiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAzcHg7Y29sb3I6IHJlZDtcIj48L2k+PHNwYW4+JztcclxuICAgICAgaHRtbCArPSB0aGlzLmRlbGV0ZVRleHQ7XHJcbiAgICAgIGh0bWwgKz0gJzwvc3Bhbj48L2E+JztcclxuICAgIH1cclxuXHJcbiAgICBodG1sICs9ICc8L2Rpdj4nO1xyXG4gICAgcmV0dXJuIGh0bWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEhyKCkge1xyXG4gICAgcmV0dXJuICc8aHIgY2xhc3M9XCJoclwiIHN0eWxlPVwibWFyZ2luLXRvcDogNXB4O21hcmdpbi1ib3R0b206IDVweDtcIj4nO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRIdG1sRm9yQnV0dG9uKGlkOiBzdHJpbmcsIGZvbnRDbGFzczogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpIHtcclxuICAgIGxldCBodG1sID0gJzxhIGlkPVwiJyArIGlkICsgJ1wiPjxpIHN0eWxlPVwid2lkdGg6MTZweFwiIGNsYXNzPVwiJyArIGZvbnRDbGFzcyArICdcIj48L2k+IDxzcGFuIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA2cHg7XCI+JztcclxuICAgIGh0bWwgKz0gdGV4dDtcclxuICAgIGh0bWwgKz0gJzwvc3Bhbj48L2E+JztcclxuICAgIHJldHVybiBodG1sO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZ2V0UGFyc2VkQ29uZmlnKGNvbmZpZzogYW55KSB7XHJcbiAgICBsZXQgcGFyc2VkQ29uZmlnOiBhbnk7XHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBwYXJzZWRDb25maWcgPSBKU09OLnBhcnNlKGNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIHtcclxuICAgICAgICAgIHBhcnNlZENvbmZpZyA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyc2VkQ29uZmlnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBsYXlXaWRnZXRTZXR0aW5ncyhzZXR0aW5nczogYW55KSB7XHJcbiAgICBpZiAoc2V0dGluZ3MuTm9QYWRkaW5nKVxyXG4gICAgICB0aGlzLm5vUGFkZGluZyA9IHRydWVcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5ub1BhZGRpbmcgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRJbmFwcGxpY2FibGVGaWx0ZXJzKGRhdGE6IGFueSwgaW5zdGFuY2VJZDogYW55KSB7XHJcbiAgICB2YXIgd2lkZ2V0RGF0YTogYW55ID0ge307XHJcbiAgICB0aGlzLmluYXBwbGljYWJsZUZpbHRlcnMgPSBbXTtcclxuICAgIHdpZGdldERhdGEuaW5zdGFuY2VJZCA9IGluc3RhbmNlSWQ7XHJcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50ID09ICdkYXRlUmFuZ2UnKVxyXG4gICAgICAgICAgdGhpcy5pbmFwcGxpY2FibGVGaWx0ZXJzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRhdGVSYW5nZScpKTtcclxuICAgICAgICBlbHNlIGlmIChlbGVtZW50ID09ICdwYXJ0aWNpcGFudCcpIHtcclxuICAgICAgICAgIHRoaXMuaW5hcHBsaWNhYmxlRmlsdGVycy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EaXZpc2lvbkdyb3VwJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbGVtZW50ID09ICdzb3VyY2UnKVxyXG4gICAgICAgICAgdGhpcy5pbmFwcGxpY2FibGVGaWx0ZXJzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRhdGFTdHJlYW0nKSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5pbmFwcGxpY2FibGVGaWx0ZXJzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB3aWRnZXREYXRhLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHdpZGdldERhdGEuZGF0YSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlQXBwbGllZEZpbHRlcnMuZW1pdCh3aWRnZXREYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcGVuUG9wdXAodGl0bGU6IGFueSwgZGF0YTogYW55LCBmb290ZXI6IGFueSwgdHlwZTogYW55LCB0ZW1wbGF0ZTogYW55ID0gdW5kZWZpbmVkKSB7XHJcbiAgICBsZXQgcHJvcHM6IGFueSA9IHt9O1xyXG4gICAgaWYgKHR5cGUgPT0gJ2lubmFwbGljYWJsZScgJiYgdGhpcy5iYW5Qb3B1cERpdilcclxuICAgICAgcHJvcHMuZWxlbWVudCA9IHRoaXMuYmFuUG9wdXBEaXYubmF0aXZlRWxlbWVudDtcclxuICAgIGlmICh0eXBlID09ICdsb2NrJyAmJiB0aGlzLmxvY2tQb3B1cERpdilcclxuICAgICAgcHJvcHMuZWxlbWVudCA9IHRoaXMubG9ja1BvcHVwRGl2Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBwcm9wcy50aXRsZSA9IHRpdGxlO1xyXG4gICAgcHJvcHMuZGF0YSA9IGRhdGE7XHJcbiAgICBwcm9wcy5mb290ZXIgPSBmb290ZXI7XHJcbiAgICBpZiAodGVtcGxhdGUpXHJcbiAgICAgIHByb3BzLnRlbXBsYXRlID0gdGVtcGxhdGU7XHJcbiAgICB0aGlzLmN1cnJlbnRDb21wb25lbnQgPSB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ29tcG9uZW50KExvY2tUb29sdGlwLCBkb2N1bWVudC5ib2R5LCBwcm9wcyk7XHJcbiAgICB0aGlzLnBvcHVwSW5zdGFuY2UgPSA8YW55PnRoaXMuY3VycmVudENvbXBvbmVudC5pbnN0YW5jZTtcclxuICB9XHJcbiAgcHVibGljIGNsb3NlUG9wdXAoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50Q29tcG9uZW50KVxyXG4gICAgICB0aGlzLnBvcHVwSW5zdGFuY2UucmVtb3ZlTWUodGhpcy5jdXJyZW50Q29tcG9uZW50KTtcclxuICB9XHJcblxyXG4gIGdldHdpZGdldFRpdGxlVHJhbnNsYXRpb24oaXRlbTogYW55KSB7XHJcbiAgICAgIGxldCByS2V5ID0gJ0RCV18nICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLm1ha2VDb2RlKGl0ZW0pO1xyXG4gICAgXHJcbiAgICBsZXQgdHJhbnNsYXRlZFN0cmluZyA9ICcnO1xyXG4gICAgaWYodGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmNsaWVudElkKXtcclxuICAgICAgY29uc3QgdHJhbnNsYXRpb25Nb2R1bGUgPSB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY2xpZW50SWQgKyAnX0RCVydcclxuICAgICAgdHJhbnNsYXRlZFN0cmluZyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUodHJhbnNsYXRpb25Nb2R1bGUgKyAnLicgKyByS2V5KTtcclxuICAgICAgXHJcbiAgICAgIGlmICh0cmFuc2xhdGVkU3RyaW5nLnRvTG93ZXJDYXNlKCkgPT09IHJLZXkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICB9IFxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJhbnNsYXRlZFN0cmluZztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gaXRlbTsgICBcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|