@schneideress/dashboardframework 0.0.203 → 0.0.205
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 +26 -13
- package/bundles/schneideress-dashboardframework.umd.js.map +1 -1
- package/bundles/schneideress-dashboardframework.umd.min.js +1 -1
- package/bundles/schneideress-dashboardframework.umd.min.js.map +1 -1
- package/esm2015/lib/ra-dashboard-area/ra.dashboard.area.js +2 -1
- package/esm2015/lib/ra-widget-container/ra.widget.container.component.js +26 -14
- package/esm5/lib/ra-dashboard-area/ra.dashboard.area.js +2 -1
- package/esm5/lib/ra-widget-container/ra.widget.container.component.js +26 -14
- package/fesm2015/schneideress-dashboardframework.js +26 -13
- package/fesm2015/schneideress-dashboardframework.js.map +1 -1
- package/fesm5/schneideress-dashboardframework.js +26 -13
- package/fesm5/schneideress-dashboardframework.js.map +1 -1
- package/lib/ra-widget-container/ra.widget.container.component.d.ts +1 -0
- package/package.json +1 -1
- package/schneideress-dashboardframework.metadata.json +1 -1
|
@@ -58,6 +58,7 @@ export class RAWidgetContainer {
|
|
|
58
58
|
this.deleteToolTipWidth = '0px';
|
|
59
59
|
this.noPadding = false;
|
|
60
60
|
this.isMouseHover = false;
|
|
61
|
+
this.showSettingsLink = true;
|
|
61
62
|
this.widgetDeleted = new EventEmitter();
|
|
62
63
|
this.isWidgetStateApplicable = false;
|
|
63
64
|
this.widgetEmptyState = '';
|
|
@@ -590,6 +591,11 @@ export class RAWidgetContainer {
|
|
|
590
591
|
if (downloadType != RADownloadType.None) {
|
|
591
592
|
this.isDownloadIconVisible = true;
|
|
592
593
|
}
|
|
594
|
+
else {
|
|
595
|
+
if (!this.isWidgetMgmnt && !this.detailPageUrl) {
|
|
596
|
+
this.showSettingsLink = false;
|
|
597
|
+
}
|
|
598
|
+
}
|
|
593
599
|
if (downloadType == RADownloadType.Chart) {
|
|
594
600
|
this.isChartDownloadVisible = true;
|
|
595
601
|
}
|
|
@@ -714,22 +720,26 @@ export class RAWidgetContainer {
|
|
|
714
720
|
getContenxtHtml(style) {
|
|
715
721
|
/** @type {?} */
|
|
716
722
|
let html = '<div id="ra-db-widget-menu"' + 'style="' + style + '" class="download-content dropdown-content widget-config-item dropdown-click" style="z-index: 1002;">';
|
|
717
|
-
|
|
718
|
-
|
|
723
|
+
/** @type {?} */
|
|
724
|
+
let settings = '';
|
|
719
725
|
if (this.isWidgetMgmnt) {
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
726
|
+
settings += this.getHtmlForButton('wcEditWidget', 'fal fa-edit', this.editText);
|
|
727
|
+
settings += this.getHtmlForButton('wcCopyWidget', 'fal fa-copy', this.copyText);
|
|
728
|
+
settings += this.getHtmlForButton('wcMoveWidget', 'fal fa-arrows-alt', this.moveText);
|
|
723
729
|
}
|
|
724
730
|
if (this.detailPageUrl) {
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
731
|
+
settings += '<a style="max-height: 30px;align-items: center;align-content: center; display: flex;" id="wcVisitWidget">';
|
|
732
|
+
settings += '<i style="padding-left: 4px;font-size: 27px !important;" class="fal fa-angle-right"></i> ';
|
|
733
|
+
settings += '<span style="padding-left: 11px;margin-top: 2px;" style="padding-left: 6px;">';
|
|
734
|
+
settings += this.translateService.translate('Common.visitpage');
|
|
735
|
+
settings += '</span></a>';
|
|
736
|
+
}
|
|
737
|
+
if (this.detailPageUrl || this.isWidgetMgmnt) {
|
|
738
|
+
html += '<div style="color: #9FA0A4;font-size: 12px;padding-top: 8px;padding-left: 12px;">';
|
|
739
|
+
html += this.translateService.translate('Common.settings') + '</div>';
|
|
740
|
+
html += settings;
|
|
741
|
+
html += this.getHr();
|
|
730
742
|
}
|
|
731
|
-
html += this.getHr();
|
|
732
|
-
;
|
|
733
743
|
if (this.isDownloadIconVisible) {
|
|
734
744
|
html += '<span style="color: #9FA0A4;font-size: 12px;">';
|
|
735
745
|
html += this.translateService.translate('Common.downloads');
|
|
@@ -816,7 +826,7 @@ export class RAWidgetContainer {
|
|
|
816
826
|
RAWidgetContainer.decorators = [
|
|
817
827
|
{ type: Component, args: [{
|
|
818
828
|
selector: 'ra-widget-container',
|
|
819
|
-
template: "<div #wcWrapper class=\"wc-wrapper\" (mouseenter)=\"mouseHover(true)\" (mouseleave)=\"mouseHover(false)\"\r\n [ngStyle]=\"{'margin-left': noPadding?'0px':'15px','margin-right': noPadding?'0px':'15px'}\">\r\n <div class=\"wcheader widget-move\" [ngClass]=\"{'underLine': enableTitleLine || isWidgetStateApplicable}\">\r\n <div class=\"col-md-12 wc-mover\" style=\"padding-left: 0px;height:inherit;padding-right: 0px;\">\r\n <div style=\"display:flex;margin-top:10px;\"\r\n [ngStyle]=\"{'margin-left': noPadding?'15px':'0px','margin-right': noPadding?'15px':'0px'}\">\r\n <div class=\"col-md-10 float-left title-label\">\r\n <ra-tooltip [value]=\"toolTipValue\" [width]=\"toolTipWidth\">\r\n <div style=\"text-overflow: ellipsis;white-space: nowrap;overflow: hidden;\" (mouseover)=\"mouseOver($event)\"\r\n #searchInput>{{WidgetDisplayName}}</div>\r\n </ra-tooltip>\r\n </div>\r\n <div class=\"col-md-2\" style=\"cursor:default;padding-right: 0px;\">\r\n <div class=\"float-right\" style=\"display: flex;\">\r\n <div class=\"title-bar-lock-icon lock-dropdown\" [hidden]=\"!lockDetails && !lockTemplateInfo\">\r\n <i class=\"fal fa-lock lock\"></i>\r\n <div class=\"lock-dropdown-content light widget-config-item\">\r\n <div *ngIf=\"lockDetails && !lockTemplateInfo\">\r\n <label style=\"color: #D9F0FA;\">\r\n {{'Common.lockedfields'|translate}}\r\n </label>\r\n <div style=\"color: white;\">\r\n <label class=\"bold\" style=\"margin-bottom: 0px;width: 100%;\" *ngFor=\"let item of lockDetails\">\r\n {{item}}\r\n </label>\r\n </div>\r\n <hr>\r\n <div style=\"color: #D9F0FA;\">\r\n <label>{{'Common.lockedfieldseditinfo'|translate}}</label>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!lockDetails && lockTemplateInfo\">\r\n <ng-container *ngTemplateOutlet=\"lockTemplateInfo\">\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"widget-menu\" style=\"width:10px;\" [ngClass]=\"{'widget-menu-show': isMouseHover}\">\r\n <div class=\"dropbtn title-bar-icon\">\r\n <i (click)=\"showDropDown($event)\" #widgetDropdown class=\"fal fa-ellipsis-v widget-menu-ellipse\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"wcBody\" [ngStyle]=\"{'bottom': noPadding?'0px':'10px'}\">\r\n <div [hidden]=\"isWidgetStateApplicable\" class=\"m-fadeOut widget-overlay\" [ngClass]=\"{'m-fadeIn': showPanel}\">\r\n <div class=\"lds-roller\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </div>\r\n <div class=\"wc\" [hidden]=\"isWidgetStateApplicable\">\r\n <div #ctlWidget></div>\r\n </div>\r\n <div *ngIf=\"isWidgetStateApplicable\" class=\"defaultConfig\">\r\n <ra-widget-state style=\"width: 100%;\" [isWidgetStateApplicable]=\"isWidgetStateApplicable\" [isGlobalFilterApplied]=\"isGlobalFilterApplied\"\r\n [widgetEmptyState]=\"widgetEmptyState\" (editWidgetClicked)=editWidget()>\r\n </ra-widget-state>\r\n </div>\r\n <div>\r\n </div>\r\n </div>\r\n</div>"
|
|
829
|
+
template: "<div #wcWrapper class=\"wc-wrapper\" (mouseenter)=\"mouseHover(true)\" (mouseleave)=\"mouseHover(false)\"\r\n [ngStyle]=\"{'margin-left': noPadding?'0px':'15px','margin-right': noPadding?'0px':'15px'}\">\r\n <div class=\"wcheader widget-move\" [ngClass]=\"{'underLine': enableTitleLine || isWidgetStateApplicable}\">\r\n <div class=\"col-md-12 wc-mover\" style=\"padding-left: 0px;height:inherit;padding-right: 0px;\">\r\n <div style=\"display:flex;margin-top:10px;\"\r\n [ngStyle]=\"{'margin-left': noPadding?'15px':'0px','margin-right': noPadding?'15px':'0px'}\">\r\n <div class=\"col-md-10 float-left title-label\">\r\n <ra-tooltip [value]=\"toolTipValue\" [width]=\"toolTipWidth\">\r\n <div style=\"text-overflow: ellipsis;white-space: nowrap;overflow: hidden;\" (mouseover)=\"mouseOver($event)\"\r\n #searchInput>{{WidgetDisplayName}}</div>\r\n </ra-tooltip>\r\n </div>\r\n <div class=\"col-md-2\" style=\"cursor:default;padding-right: 0px;\">\r\n <div class=\"float-right\" style=\"display: flex;\">\r\n <div class=\"title-bar-lock-icon lock-dropdown\" [hidden]=\"!lockDetails && !lockTemplateInfo\">\r\n <i class=\"fal fa-lock lock\"></i>\r\n <div class=\"lock-dropdown-content light widget-config-item\">\r\n <div *ngIf=\"lockDetails && !lockTemplateInfo\">\r\n <label style=\"color: #D9F0FA;\">\r\n {{'Common.lockedfields'|translate}}\r\n </label>\r\n <div style=\"color: white;\">\r\n <label class=\"bold\" style=\"margin-bottom: 0px;width: 100%;\" *ngFor=\"let item of lockDetails\">\r\n {{item}}\r\n </label>\r\n </div>\r\n <hr>\r\n <div style=\"color: #D9F0FA;\">\r\n <label>{{'Common.lockedfieldseditinfo'|translate}}</label>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!lockDetails && lockTemplateInfo\">\r\n <ng-container *ngTemplateOutlet=\"lockTemplateInfo\">\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"widget-menu\" style=\"width:10px;\" [ngClass]=\"{'widget-menu-show': isMouseHover && showSettingsLink}\">\r\n <div class=\"dropbtn title-bar-icon\">\r\n <i (click)=\"showDropDown($event)\" #widgetDropdown class=\"fal fa-ellipsis-v widget-menu-ellipse\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"wcBody\" [ngStyle]=\"{'bottom': noPadding?'0px':'10px'}\">\r\n <div [hidden]=\"isWidgetStateApplicable\" class=\"m-fadeOut widget-overlay\" [ngClass]=\"{'m-fadeIn': showPanel}\">\r\n <div class=\"lds-roller\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </div>\r\n <div class=\"wc\" [hidden]=\"isWidgetStateApplicable\">\r\n <div #ctlWidget></div>\r\n </div>\r\n <div *ngIf=\"isWidgetStateApplicable\" class=\"defaultConfig\">\r\n <ra-widget-state style=\"width: 100%;\" [isWidgetStateApplicable]=\"isWidgetStateApplicable\" [isGlobalFilterApplied]=\"isGlobalFilterApplied\"\r\n [widgetEmptyState]=\"widgetEmptyState\" (editWidgetClicked)=editWidget()>\r\n </ra-widget-state>\r\n </div>\r\n <div>\r\n </div>\r\n </div>\r\n</div>"
|
|
820
830
|
}] }
|
|
821
831
|
];
|
|
822
832
|
/** @nocollapse */
|
|
@@ -926,6 +936,8 @@ if (false) {
|
|
|
926
936
|
/** @type {?} */
|
|
927
937
|
RAWidgetContainer.prototype.isMouseHover;
|
|
928
938
|
/** @type {?} */
|
|
939
|
+
RAWidgetContainer.prototype.showSettingsLink;
|
|
940
|
+
/** @type {?} */
|
|
929
941
|
RAWidgetContainer.prototype.ctlWidget;
|
|
930
942
|
/** @type {?} */
|
|
931
943
|
RAWidgetContainer.prototype.widgetDropdown;
|
|
@@ -1007,4 +1019,4 @@ if (false) {
|
|
|
1007
1019
|
*/
|
|
1008
1020
|
RAWidgetContainer.prototype.raPermissionService;
|
|
1009
1021
|
}
|
|
1010
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS13aWRnZXQtY29udGFpbmVyL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBb0UsTUFBTSxFQUFFLFNBQVMsRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUN4TSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBZ0QsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBa0IsTUFBTSwrQkFBK0IsQ0FBQztBQUNwTCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBU2xGLE1BQU0sT0FBTyxpQkFBaUI7Ozs7Ozs7Ozs7SUF1RTVCLFlBQW9CLGdCQUFvQyxFQUM5QyxVQUE4QixFQUM5QixnQkFBb0MsRUFDcEMsTUFBYyxFQUNkLFFBQXlCLEVBQ3pCLFFBQW1CLEVBQ25CLG1CQUF3QztRQU45QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQzlDLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7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QXNDOzs7OztJQUN0Qyw2Q0FBNEM7Ozs7O0lBQzVDLG1DQUFzQjs7Ozs7SUFDdEIscUNBQWlDOzs7OztJQUNqQyxxQ0FBMkI7Ozs7O0lBQzNCLGdEQUFnRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBTaW1wbGVDaGFuZ2UsIE9uRGVzdHJveSwgTmdab25lLCBSZW5kZXJlcjIsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJhRGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4vLi4vcmEuZGFzaGJvYXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSQURhc2hib2FyZEV2ZW50QnVzIH0gZnJvbSAnLi4vcmEuZGFzaGJhcmQuZXZlbnQuYnVzJztcclxuaW1wb3J0IHsgUkFFdmVudCwgUkFFdmVudEtleSB9IGZyb20gJy4uL3JhLmV2ZW50LmVudW0nO1xyXG5pbXBvcnQgeyBJQXBwQ29uZmlnLCBJV2lkZ2V0Q29uZmlnRmlsdGVyLCBJV2lkZ2V0SW5mbywgUkFEb3dubG9hZFR5cGUsIFJBRG93bmxvYWRPcHRpb24sIFJhV2lkZ2V0bG9ja1N0YXR1cywgV2lkZ2V0Vmlld1N0YXRlLCBJY29uZmlnQ2hhbmdlcyB9IGZyb20gJ0BzY2huZWlkZXJlc3Mvd2lkZ2V0ZnJhbWV3b3JrJztcclxuaW1wb3J0IHsgTmd4VWlMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXVpLWxvYWRlcic7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItbm90aWZpZXInO1xyXG5pbXBvcnQgeyBSQVRyYW5zbGF0ZVNlcnZpY2UsIFJBUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICdAc2NobmVpZGVyZXNzL3JhLWNvbW1vbic7XHJcblxyXG5kZWNsYXJlIHZhciBqUXVlcnk6IGFueTtcclxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhLXdpZGdldC1jb250YWluZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yYS53aWRnZXQuY29udGFpbmVyLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUkFXaWRnZXRDb250YWluZXIgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgcHVibGljIHNob3dQYW5lbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBpc1dpZGdldExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgd2lkZ2V0RWxlbWVudDogYW55O1xyXG4gIHByaXZhdGUgY29uZmlnQ2hhbmdlZDogYW55O1xyXG4gIHB1YmxpYyB3aWRnZXRIZWlnaHQ6IG51bWJlcjtcclxuICBwdWJsaWMgbG9ja0NsYXNzOiBzdHJpbmcgPSBcInVubG9ja2VkXCI7XHJcbiAgcHVibGljIGxvY2tTdGF0dXM6IFJhV2lkZ2V0bG9ja1N0YXR1cyA9IFJhV2lkZ2V0bG9ja1N0YXR1cy5VbmxvY2tlZDtcclxuICBwdWJsaWMgaXNEb3dubG9hZEljb25WaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzQ2hhcnREb3dubG9hZFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNHcmlkRG93bmxvYWRWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRvd25sb2FkSWNvblR5cGU6IFJBRG93bmxvYWRUeXBlO1xyXG4gIHB1YmxpYyBlbmFibGVUaXRsZUxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNHbG9iYWxGaWx0ZXJBcHBsaWVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAgJztcclxuICBwdWJsaWMgdG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgbG9ja0RldGFpbHM6IGFueTtcclxuICBwdWJsaWMgbG9ja1RlbXBsYXRlSW5mbzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBwdWJsaWMgZWRpdFRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBjb3B5VG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIG1vdmVUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgZXhjZWxUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgZGVsZXRlVG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGVkaXRUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgY29weVRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBtb3ZlVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGV4Y2VsVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGRlbGV0ZVRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBlZGl0VG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgY29weVRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIG1vdmVUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBleGNlbFRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIGRlbGV0ZVRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIHdpZGdldFNldHRpbmdzOiBhbnk7XHJcbiAgcHVibGljIG5vUGFkZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc01vdXNlSG92ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG5cclxuICBAVmlld0NoaWxkKCdjdGxXaWRnZXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgY3RsV2lkZ2V0OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3dpZGdldERyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIHdpZGdldERyb3Bkb3duOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pIHNlYXJjaElucHV0OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3djV3JhcHBlcicsIHsgc3RhdGljOiBmYWxzZSB9KSB3Y1dyYXBwZXI6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgnd2lkZ2V0LWluc3RhbmNlLWlkJykgd2lkZ2V0SW5zdGFuY2VJZDogbnVtYmVyO1xyXG4gIEBJbnB1dCgnZ2xvYmFsLWZpbHRlcicpIGdsb2JhbEZpbHRlcjogYW55O1xyXG4gIEBJbnB1dCgnZGF0YScpIGRhdGE6IGFueTtcclxuICBASW5wdXQoJ2V2ZW50LWJ1cycpIHJhRGFzaGJvYXJkRXZlbnRCdXM6IFJBRGFzaGJvYXJkRXZlbnRCdXM7XHJcbiAgQElucHV0KCdhcHAtY29uZmlnJykgYXBwQ29uZmlnOiBJQXBwQ29uZmlnO1xyXG4gIEBJbnB1dCgnd2lkZ2V0LXdpZHRoJykgd2lkdGg6IG51bWJlcjtcclxuICBASW5wdXQoJ3dpZGdldC1oZWlnaHQnKSBoZWlnaHQ6IG51bWJlcjtcclxuICBASW5wdXQoJ2dyaWQtY2VsbC1oZWlnaHQnKSBncmlkQ2VsbEhlaWdodDogbnVtYmVyO1xyXG5cclxuXHJcbiAgQE91dHB1dCgpIHdpZGdldERlbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBwdWJsaWMgbG9ja1RpdGxlOiBzdHJpbmc7XHJcbiAgcHVibGljIGlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHdpZGdldEVtcHR5U3RhdGU6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBkb21SZXNpemVkOiBib29sZWFuO1xyXG4gIHB1YmxpYyBsb2NrVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBsb2NrZWRGaWVsZHM6IGFueTtcclxuICBwdWJsaWMgZGV0YWlsUGFnZVVybDogc3RyaW5nO1xyXG4gIHB1YmxpYyBiYXNlVXJsOiBzdHJpbmc7XHJcbiAgcHVibGljIGlzV2lkZ2V0TWdtbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgV2lkZ2V0RGlzcGxheU5hbWU6IHN0cmluZztcclxuICBASW5wdXQoJ2RvbS1yZXNpemVkJylcclxuICBzZXQgc2V0UmVzaXplZChyZXNpemVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmludm9rZVdpZGdldFJlc2l6ZWRFdmVudCgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBSYURhc2hib2FyZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5neFNlcnZpY2U6IE5neFVpTG9hZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogUkFUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcclxuICAgIHByaXZhdGUgbm90aWZpZXI6IE5vdGlmaWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgcmFQZXJtaXNzaW9uU2VydmljZTogUkFQZXJtaXNzaW9uU2VydmljZSkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdjbGljaycsIChlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTmFtZSkge1xyXG4gICAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUgIT0gJ2ZhbCBmYS1lbGxpcHNpcy12IHdpZGdldC1tZW51LWVsbGlwc2UnKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuV2lkZ2V0RGlzcGxheU5hbWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uJyArIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFRpdGxlLCB0cnVlKTtcclxuICB9XHJcbiAgZ2V0IHdpZGdldFZpZXdTdGF0ZSgpIHsgcmV0dXJuIFdpZGdldFZpZXdTdGF0ZTsgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzV2lkZ2V0TWdtbnQgPSB0aGlzLnJhUGVybWlzc2lvblNlcnZpY2UuaGFzUGVybWlzc2lvbigncmEud2lkZ2V0bWFuYWdlbWVudCcpO1xyXG4gICAgaWYgKGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cyAmJiBjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMuY3VycmVudFZhbHVlICE9IGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlZCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmVXaXRoS2V5KFJBRXZlbnQuQ29uZmlnQ2hhbmdlZCwgUkFFdmVudEtleS5XaWRnZXRJbnN0YW5jZUlkLCB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkLnRvU3RyaW5nKCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ0NoYW5nZUV2ZW50SGFuZGxlcihlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiBjaGFuZ2VzLmdsb2JhbEZpbHRlciAmJiBjaGFuZ2VzLmdsb2JhbEZpbHRlci5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5nbG9iYWxGaWx0ZXIucHJldmlvdXNWYWx1ZSkge1xyXG5cclxuICAgICAgbGV0IGZpbHRlck9iaiA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHRoaXMuZ2xvYmFsRmlsdGVyKTtcclxuICAgICAgaWYgKGZpbHRlck9iai5XaWRnZXRJbnN0YW5jZUlkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQgIT0gZmlsdGVyT2JqLldpZGdldEluc3RhbmNlSWQpXHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVmcmVzaFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlcy53aWR0aCAmJiBjaGFuZ2VzLndpZHRoLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLndpZHRoLnByZXZpb3VzVmFsdWUgfHxcclxuICAgICAgKGNoYW5nZXMuaGVpZ2h0ICYmIGNoYW5nZXMuaGVpZ2h0LmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmhlaWdodC5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLmludm9rZVdpZGdldFJlc2l6ZWRFdmVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW52b2tlV2lkZ2V0UmVzaXplZEV2ZW50KCkge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCkge1xyXG4gICAgICBsZXQgc2l6ZTogYW55ID0ge307XHJcbiAgICAgIHNpemUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgIHNpemUud2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICBzaXplLmNlbGxIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgICB0aGlzLndpZGdldEVsZW1lbnQud2lkZ2V0UmVzaXplZChzaXplKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBtb3VzZUhvdmVyKGlzSG92ZXIgPSB0cnVlKSB7XHJcbiAgICB0aGlzLmlzTW91c2VIb3ZlciA9IGlzSG92ZXI7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCkge1xyXG4gICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0RWxlbWVudC5ob3ZlclN0YXR1cyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmhvdmVyU3RhdHVzKGlzSG92ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUud2Fybignd2lkZ2V0IGZyYW1ld29yayBvdXRkYXRlZCwgcGxlYXNlIHVwZGF0ZSB0byB2ZXJzaW9uIDAuMC45NicpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5sb2FkV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgIH0pXHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGxldCBpdGVtID0galF1ZXJ5KHRoaXMud2NXcmFwcGVyLm5hdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoJ2dyaWRzdGVyLWl0ZW0nKTtcclxuICAgICAgaXRlbS5iaW5kKCdtb3VzZWVudGVyJywgKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5ncmlkc3Rlckl0ZW1FbnRlciA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaXRlbS5iaW5kKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5ncmlkc3Rlckl0ZW1FbnRlciA9IGZhbHNlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF3aW5kb3cubW91c2VPdmVyV2lkZ2V0TWVudSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ0NoYW5nZWQpXHJcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlZC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKiBUbyBFZGl0IGN1cnJlbnQgd2lkZ2V0IGNvbmZpZ3VyYXRpb24qL1xyXG4gIHB1YmxpYyBlZGl0V2lkZ2V0KCkge1xyXG4gICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlcjogSVdpZGdldENvbmZpZ0ZpbHRlcjtcclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgdHlwZW9mICh0aGlzLndpZGdldEVsZW1lbnQuZ2V0Q29uZmlnRmlsdGVyKSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGxldCBjb25maWdEYXRhID0gdGhpcy53aWRnZXRFbGVtZW50LmdldENvbmZpZ0ZpbHRlcigpO1xyXG4gICAgICBpZiAoY29uZmlnRGF0YSkge1xyXG4gICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlciA9IGNvbmZpZ0RhdGE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh3aWRnZXRDb25maWdGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5XaWRnZXRFZGl0Q2xpY2tlZCwgd2lkZ2V0Q29uZmlnRmlsdGVyKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyRGF0YSA9IHRoaXMuZ2VuZXJhdGVDb25maWdGaWx0ZXIoZmFsc2UpO1xyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LldpZGdldEVkaXRDbGlja2VkLCB3aWRnZXRDb25maWdGaWx0ZXJEYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBUbyBEZWxldGUgY3VycmVudCB3aWRnZXQgZnJvbSBET00qL1xyXG4gIHB1YmxpYyBkZWxldGVXaWRnZXQoKSB7XHJcbiAgICBsZXQgd2lkZ2V0Q29udGFpbmVyQ29udGV4dCA9IHRoaXM7XHJcbiAgICB3aWRnZXRDb250YWluZXJDb250ZXh0Lm5neFNlcnZpY2Uuc3RhcnQoKTtcclxuICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQuZGFzaGJvYXJkU2VydmljZS5kZWxldGVXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8sIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUoc3RhdHVzID0+IHtcclxuICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5uZ3hTZXJ2aWNlLnN0b3AoKTtcclxuICAgICAgaWYgKHN0YXR1cykge1xyXG4gICAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQud2lkZ2V0RGVsZXRlZC5lbWl0KHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQubm90aWZpZXIubm90aWZ5KCdlcnJvcicsIFwiIFwiICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnRmFpbGVkVG9SZW1vdmVXaWRnZXQnKSArIFwiICAoXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uJyArIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFRpdGxlLCB0cnVlKSArIFwiKSFcIik7XHJcblxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBNb3ZlIG9yIGNoYW5nZSBwb3NpdGlvbiBpZiBjdXJyZW50IHdpZGdldCBjb250YWluZXIqL1xyXG4gIHB1YmxpYyBtb3ZlV2lkZ2V0KCkge1xyXG4gICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5Nb3ZlV2lkZ2V0LCB0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAvLyB0aGlzLmRhc2hib2FyZFNlcnZpY2UubW92ZVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBDb3B5IEN1cnJlbnQgd2lkZ2V0IHdpdGggc2FtZSBjb25maWd1cmF0aW9uKi9cclxuICBwdWJsaWMgY29weVdpZGdldCgpIHtcclxuICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuQ29weVdpZGdldCwgdGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgLy90aGlzLmRhc2hib2FyZFNlcnZpY2UuY29weVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB2aXNpdFBhZ2UoKSB7XHJcbiAgICB0aGlzLmJhc2VVcmwgPSB0aGlzLmdldEhvc3RVcmwoKTtcclxuICAgIGxldCB1cmwgPSB0aGlzLmJhc2VVcmwgKyB0aGlzLmRldGFpbFBhZ2VVcmw7XHJcbiAgICBpZiAodGhpcy5kYXRhLndpZGdldEluZm8gJiYgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgdGhpcy53aWRnZXRTZXR0aW5ncyA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKTtcclxuICAgICAgaWYgKHRoaXMud2lkZ2V0U2V0dGluZ3MuY3VzdG9tUGFnZVBhcmFtcykge1xyXG4gICAgICAgIGxldCBwYXJhbXMgPSB0aGlzLndpZGdldEVsZW1lbnQuZ2V0UGFnZVBhcmFtc0NsaWNrZWQoKTtcclxuICAgICAgICBpZiAocGFyYW1zKVxyXG4gICAgICAgICAgdXJsID0gdXJsICsgJz8nICsgcGFyYW1zO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEhvc3RVcmwoKSB7XHJcbiAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICh3aW5kb3cubG9jYXRpb24ucG9ydCA/ICc6JyArIHdpbmRvdy5sb2NhdGlvbi5wb3J0IDogJycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbmZpZ0NoYW5nZUV2ZW50SGFuZGxlcih3aWRnZXRJbmZvKSB7XHJcbiAgICB0aGlzLmRhdGEud2lkZ2V0SW5mbyA9IHdpZGdldEluZm87XHJcbiAgICBpZiAodGhpcy5ncmlkQ2VsbEhlaWdodCA+IDApIHtcclxuICAgICAgdGhpcy5kYXRhLndpZGdldEluZm8ucm93SGVpZ2h0ID0gdGhpcy5ncmlkQ2VsbEhlaWdodDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgdHlwZW9mICh0aGlzLndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIodGhpcy5nZW5lcmF0ZUNvbmZpZ0ZpbHRlcih0cnVlKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCd3aWRnZXQgZnJhbWV3b3JrIG91dGRhdGVkLCBwbGVhc2UgdXBkYXRlIHRvIHZlcnNpb24gMC4wLjk4Jyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlZnJlc2hXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8sIHRydWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVDb25maWdGaWx0ZXIoY29uZmlnQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyRGF0YSA9IDxJV2lkZ2V0Q29uZmlnRmlsdGVyPntcclxuICAgICAgYXBwQ29uZmlnOiB0aGlzLmFwcENvbmZpZyxcclxuICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmdsb2JhbEZpbHRlcixcclxuICAgICAgd2lkZ2V0SW5mbzogdGhpcy5kYXRhLndpZGdldEluZm8sXHJcbiAgICAgIGNvbmZpZzogdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcsXHJcbiAgICAgIGNvbmZpZ0NoYW5nZXM6IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhjb25maWdDaGFuZ2VkKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHdpZGdldENvbmZpZ0ZpbHRlckRhdGE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqICBUbyBsb2FkIGV4dGVybmFsIGN1c3RvbSBlbGVtZW50IHRvIHRoZSB3aWRnZXQgY29udGFpbmVyKi9cclxuICBhc3luYyBsb2FkV2lkZ2V0KHdpZGdldEluZm86IGFueSkge1xyXG4gICAgd2lkZ2V0SW5mby5yb3dIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlciA9IDxJV2lkZ2V0Q29uZmlnRmlsdGVyPntcclxuICAgICAgY29uZmlnOiB3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnLFxyXG4gICAgICBnbG9iYWxGaWx0ZXI6IHRoaXMuZ2xvYmFsRmlsdGVyLFxyXG4gICAgICBjb25maWdDaGFuZ2VzOiB0aGlzLmdldENvbmZpZ0NoYW5nZXMoZmFsc2UpXHJcbiAgICB9XHJcbiAgICBpZiAod2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncykge1xyXG4gICAgICB0aGlzLndpZGdldFNldHRpbmdzID0gdGhpcy5nZXRQYXJzZWRDb25maWcod2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICAgIHRoaXMuYXBwbGF5V2lkZ2V0U2V0dGluZ3ModGhpcy53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRldGFpbFBhZ2VVcmwgPSB3aWRnZXRJbmZvLmRldGFpbFBhZ2VVcmw7XHJcbiAgICBsZXQgd2lkZ2V0Q29udGFpbmVyID0gdGhpcztcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5sb2FkRXh0ZXJuYWxTY3JpcHQod2lkZ2V0SW5mby5zY3JpcHRVcmwsICgpID0+IHtcclxuICAgICAgdGhpcy5zZXROb3RDb25maWd1cmVkU3RhdGUod2lkZ2V0SW5mbyk7XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5sb2FkVHJhbnNsYXRpb25zKHRoaXMuYXBwQ29uZmlnLmFwcE1hbmFnZW1lbnRCYXNlVXJsLCB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXROYW1lLCBmYWxzZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyLndpZGdldEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHdpZGdldEluZm8uY3VzdG9tVGFnKTtcclxuICAgICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ3aWRnZXQtaW5zdGFuY2UtaWRcIiwgd2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCd3aWRnZXRpbml0aWF0ZWQnICsgd2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLndpZGdldEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignb24tZGF0YS1sb2FkJywgKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlLmRldGFpbClcclxuICAgICAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci5zaG93UGFuZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci5zaG93UGFuZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbmZpZy1lZGl0LWNsaWNrZWQnLCAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLmVkaXRXaWRnZXQoKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdlbmFibGUtZGVmYXVsdC1zdGF0ZScsIChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB3aWRnZXRDb250YWluZXIuc2V0RW1wdHlTdGF0ZShlLmRldGFpbCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbGV0IHRpdGxlTGluZUVuYWJsZWQgPSB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudC50aXRsZUxpbmVFbmFibGVkKCk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKHRpdGxlTGluZUVuYWJsZWQpICE9ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbmFibGVUaXRsZUxpbmUgPSB0aXRsZUxpbmVFbmFibGVkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVkaXRUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0JykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgIHRoaXMuZWRpdFRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5lZGl0VG9vbFRpcFZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKTtcclxuICAgICAgICAgICAgICB0aGlzLmVkaXRUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb3B5VGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvcHlUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29weVRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb3B5VG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubW92ZVRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMubW92ZVRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZXhjZWxUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5leGNlbFRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZXhjZWxUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKTtcclxuICAgICAgICAgICAgICB0aGlzLmV4Y2VsVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci5pc1dpZGdldExvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5hcHBDb25maWcgPSB0aGlzLmFwcENvbmZpZztcclxuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8gPSB3aWRnZXRJbmZvO1xyXG4gICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnQ2hhbmdlcyA9IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhmYWxzZSk7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci53aWRnZXRJbmZvLndpZGdldE5hbWUgPSB3aWRnZXRJbmZvLndpZGdldE5hbWU7XHJcbiAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LmxvYWRDb250ZW50KHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICAgICAgICAgIGF3YWl0IHdpZGdldENvbnRhaW5lci5zZXRMb2NrKHdpZGdldENvbmZpZ0ZpbHRlci5jb25maWcpO1xyXG4gICAgICAgICAgICBhd2FpdCB3aWRnZXRDb250YWluZXIuc2V0RG93bmxvYWRJY29uKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmN0bFdpZGdldC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMud2lkZ2V0RWxlbWVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipUbyBzZXQgRGVmYXVsdCBTdGF0ZSBmb3IgdGhlIHdpZGdldCB3aGVuIGl0IGlzIG5vdCBjb25maWd1cmVkICovXHJcbiAgc2V0Tm90Q29uZmlndXJlZFN0YXRlKHdpZGdldEluZm86IElXaWRnZXRJbmZvLCBmb3JjZUVuYWJsZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoKHdpZGdldEluZm8uc2hvd0RlZmF1bHRTdGF0ZSAmJiAod2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyA9PSBcIlwiIHx8IE9iamVjdC5rZXlzKEpTT04ucGFyc2Uod2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZykpLmxlbmd0aCA9PSAwKSkgfHwgKGZvcmNlRW5hYmxlKSkge1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy53aWRnZXRFbXB0eVN0YXRlID0gV2lkZ2V0Vmlld1N0YXRlLmVtcHR5Q29uZmlnLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy53aWRnZXRFbXB0eVN0YXRlID0gJyc7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlRvIGNvbmZpZ3VyZSBlbXB0eSBzdGF0ZSBmb3IgdGhlIHdpZGdldCAgKi9cclxuICBzZXRFbXB0eVN0YXRlKHdpZGdldFN0YXRlOiBhbnkpIHtcclxuICAgIHRoaXMud2lkZ2V0RW1wdHlTdGF0ZSA9IHdpZGdldFN0YXRlLndpZGdldFZpZXdTdGF0ZTtcclxuICAgIHRoaXMuaXNHbG9iYWxGaWx0ZXJBcHBsaWVkID0gd2lkZ2V0U3RhdGUuaXNHbG9iYWxGaWx0ZXJBcHBsaWVkO1xyXG4gICAgaWYgKHdpZGdldFN0YXRlICE9IFdpZGdldFZpZXdTdGF0ZS5ub3JtYWwpIHtcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoICh3aWRnZXRTdGF0ZSkge1xyXG4gICAgICBjYXNlIFdpZGdldFZpZXdTdGF0ZS5lbXB0eUNvbmZpZzpcclxuICAgICAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgV2lkZ2V0Vmlld1N0YXRlLmVtcHR5RGF0YTpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBXaWRnZXRWaWV3U3RhdGUuZXJyb3I6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWdDaGFuZ2VzKGNvbmZpZ0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgbGV0IGNvbmZpZ0NoYW5nZXMgPSA8SWNvbmZpZ0NoYW5nZXM+e1xyXG4gICAgICBpc0NvbmZpZ1VwZGF0ZWQ6IGNvbmZpZ0NoYW5nZWQsXHJcbiAgICAgIHVwZGF0ZWRDb25maWdQcm9wZXJ0eTogW11cclxuICAgIH1cclxuICAgIHJldHVybiBjb25maWdDaGFuZ2VzO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIHJlZnJlc2ggd2lkZ2V0IG9uIGlucHV0IGNvbmZpZyBjaGFuZ2VzICovXHJcbiAgYXN5bmMgcmVmcmVzaFdpZGdldCh3aWRnZXRJbmZvOiBJV2lkZ2V0SW5mbywgY29uZmlnQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLldpZGdldERpc3BsYXlOYW1lID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLicgKyB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRUaXRsZSwgdHJ1ZSk7XHJcbiAgICB3aWRnZXRJbmZvLnJvd0hlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh3aWRnZXRJbmZvKTtcclxuICAgIGxldCB3aWRnZXRDb250YWluZXJDb250ZXh0ID0gdGhpcztcclxuXHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyID0gPElXaWRnZXRDb25maWdGaWx0ZXI+e1xyXG4gICAgICBjb25maWc6IHdpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcsXHJcbiAgICAgIGdsb2JhbEZpbHRlcjogdGhpcy5nbG9iYWxGaWx0ZXIsXHJcbiAgICAgIGFwcENvbmZpZzogdGhpcy5hcHBDb25maWcsXHJcbiAgICAgIHdpZGdldEluZm86IHdpZGdldEluZm8sXHJcbiAgICAgIGNvbmZpZ0NoYW5nZXM6IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhjb25maWdDaGFuZ2VkKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aWRnZXRDb250YWluZXJDb250ZXh0LmlzV2lkZ2V0TG9hZGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgdHlwZW9mICh0aGlzLndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC53aWRnZXRFbGVtZW50LnNldENvbmZpZ0ZpbHRlcih3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQud2lkZ2V0RWxlbWVudC5sb2FkQ29udGVudCh3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgICBhd2FpdCB0aGlzLnNldExvY2sod2lkZ2V0Q29uZmlnRmlsdGVyLmNvbmZpZyk7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2V0RG93bmxvYWRJY29uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbW91c2VPdmVyKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMudG9vbFRpcFZhbHVlID0gJyAnO1xyXG4gICAgdGhpcy50b29sVGlwV2lkdGggPSAnMHB4JztcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5zZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKGVsZW1lbnQub2Zmc2V0V2lkdGggPCBlbGVtZW50LnNjcm9sbFdpZHRoKSB7XHJcbiAgICAgIHRoaXMudG9vbFRpcFZhbHVlID0gZWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICAgIHRoaXMudG9vbFRpcFdpZHRoID0gJzMwMHB4JztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnRvb2xUaXBXaWR0aCA9ICcwcHgnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzZXRMb2NrKGNvbmZpZzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmxvY2tUZW1wbGF0ZUluZm8gPSB0aGlzLndpZGdldEVsZW1lbnQubG9hZExvY2tJbmZvKCk7XHJcbiAgICB2YXIgY29uZmlnT2JqOiBhbnk7XHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIGNvbmZpZ09iaiA9IEpTT04ucGFyc2UoY29uZmlnKTtcclxuICAgICAgaWYgKGNvbmZpZ09iaiAmJiBjb25maWdPYmouTG9ja3MgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc0RhdGVMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzRGF0ZXNMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzUGFydGljaXBhbnRMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzU291cmNlTG9ja2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzID0gW107XHJcbiAgICAgICAgICBpZiAoY29uZmlnT2JqLkxvY2tzLklzRGF0ZUxvY2tlZCB8fCBjb25maWdPYmouTG9ja3MuSXNEYXRlc0xvY2tlZClcclxuICAgICAgICAgICAgdGhpcy5sb2NrRGV0YWlscy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EYXRlUmFuZ2UnKSk7XHJcblxyXG4gICAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc1BhcnRpY2lwYW50TG9ja2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uRGl2aXNpb25Pckdyb3Vwb3JTaXRlJykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc1NvdXJjZUxvY2tlZClcclxuICAgICAgICAgICAgdGhpcy5sb2NrRGV0YWlscy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EYXRhU3RyZWFtJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9ja0RldGFpbHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXREb3dubG9hZEljb24oKSB7XHJcbiAgICBsZXQgZG93bmxvYWRUeXBlID0gYXdhaXQgdGhpcy53aWRnZXRFbGVtZW50LmdldERvd25sb2FkVHlwZSgpO1xyXG4gICAgdGhpcy5kb3dubG9hZEljb25UeXBlID0gZG93bmxvYWRUeXBlO1xyXG4gICAgdGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNDaGFydERvd25sb2FkVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgPSBmYWxzZTtcclxuICAgIGlmIChkb3dubG9hZFR5cGUgIT0gUkFEb3dubG9hZFR5cGUuTm9uZSkge1xyXG4gICAgICB0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRvd25sb2FkVHlwZSA9PSBSQURvd25sb2FkVHlwZS5DaGFydCkge1xyXG4gICAgICB0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb3dubG9hZFR5cGUgPT0gUkFEb3dubG9hZFR5cGUuR3JpZCkge1xyXG4gICAgICB0aGlzLmlzR3JpZERvd25sb2FkVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRvd25sb2FkSWNvbkNsaWNrZWQodHlwZTogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBcIkNTVlwiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLkNTVik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJQTkdcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5QTkcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiUERGXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uUERGKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlNWR1wiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLlNWRyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJKUEVHXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uSlBFRyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZU1lbnUoKSB7XHJcbiAgICBqUXVlcnkoJyNyYS1kYi13aWRnZXQtbWVudScpLnJlbW92ZSgpO1xyXG4gIH1cclxuICAvKipTaG93IGRyb3Bkb3duIG9uIGdlYXIgaWNvbiBjbGljayAgKi9cclxuICBwdWJsaWMgc2hvd0Ryb3BEb3duKGU6IGFueSkge1xyXG4gICAgdGhpcy5zZXREb3dubG9hZEljb24oKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgdGFyZ2V0UG9zID0gZS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIGxldCBzdHlsZTogc3RyaW5nID0gXCJwb3NpdGlvbjpmaXhlZDt0b3A6XCIgKyAodGFyZ2V0UG9zLnkgKyAxNSkgKyAncHgnICsgJztsZWZ0OicgKyAoZS5wYWdlWCAtIDEyMikgKyAncHg7ei1pbmRleDoxMDAwOyc7XHJcbiAgICAgIGxldCBodG1sID0gdGhpcy5nZXRDb250ZW54dEh0bWwoc3R5bGUpO1xyXG5cclxuICAgICAgalF1ZXJ5KGh0bWwpLmFwcGVuZFRvKCdib2R5Jyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc1dpZGdldE1nbW50KSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0VkaXRXaWRnZXQnLCB0aGlzLmVkaXRXaWRnZXQpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NDb3B5V2lkZ2V0JywgdGhpcy5jb3B5V2lkZ2V0KTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djTW92ZVdpZGdldCcsIHRoaXMubW92ZVdpZGdldCk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y1dpZGdldERlbGV0ZScsIHRoaXMuZGVsZXRlV2lkZ2V0KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kZXRhaWxQYWdlVXJsKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y1Zpc2l0V2lkZ2V0JywgdGhpcy52aXNpdFBhZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUpIHtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRQbmcnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdQTkcnKTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRKcGcnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdKUEVHJyk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkUGRmJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnUERGJyk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkU3ZnJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnU1ZHJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkRXhjZWwnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdDU1YnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhLWRiLXdpZGdldC1tZW51JykuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcclxuICAgICAgICB3aW5kb3cubW91c2VPdmVyV2lkZ2V0TWVudSA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmEtZGItd2lkZ2V0LW1lbnUnKS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5tb3VzZU92ZXJXaWRnZXRNZW51ID0gZmFsc2U7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXdpbmRvdy5ncmlkc3Rlckl0ZW1FbnRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEV2ZW50TGlzdGVuZXIoaWQ6IHN0cmluZywgZXZlbnQ6IGFueSwgcGFyYW1zPzogYW55KSB7XHJcbiAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgZXZlbnQuY2FsbCh0aGlzLCBwYXJhbXMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29udGVueHRIdG1sKHN0eWxlOiBzdHJpbmcpIHtcclxuICAgIGxldCBodG1sOiBzdHJpbmcgPSAnPGRpdiBpZD1cInJhLWRiLXdpZGdldC1tZW51XCInICsgJ3N0eWxlPVwiJyArIHN0eWxlICsgJ1wiIGNsYXNzPVwiZG93bmxvYWQtY29udGVudCBkcm9wZG93bi1jb250ZW50IHdpZGdldC1jb25maWctaXRlbSBkcm9wZG93bi1jbGlja1wiIHN0eWxlPVwiei1pbmRleDogMTAwMjtcIj4nO1xyXG4gICAgaHRtbCArPSAnPGRpdiBzdHlsZT1cImNvbG9yOiAjOUZBMEE0O2ZvbnQtc2l6ZTogMTJweDtwYWRkaW5nLXRvcDogOHB4O3BhZGRpbmctbGVmdDogMTJweDtcIj4nO1xyXG4gICAgaHRtbCArPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uc2V0dGluZ3MnKSArICc8L2Rpdj4nO1xyXG5cclxuICAgIGlmICh0aGlzLmlzV2lkZ2V0TWdtbnQpIHtcclxuICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRWRpdFdpZGdldCcsICdmYWwgZmEtZWRpdCcsIHRoaXMuZWRpdFRleHQpO1xyXG4gICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NDb3B5V2lkZ2V0JywgJ2ZhbCBmYS1jb3B5JywgdGhpcy5jb3B5VGV4dCk7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y01vdmVXaWRnZXQnLCAnZmFsIGZhLWFycm93cy1hbHQnLCB0aGlzLm1vdmVUZXh0KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRldGFpbFBhZ2VVcmwpIHtcclxuICAgICAgaHRtbCArPSAnPGEgc3R5bGU9XCJtYXgtaGVpZ2h0OiAzMHB4O2FsaWduLWl0ZW1zOiBjZW50ZXI7YWxpZ24tY29udGVudDogY2VudGVyOyBkaXNwbGF5OiBmbGV4O1wiIGlkPVwid2NWaXNpdFdpZGdldFwiPic7XHJcbiAgICAgIGh0bWwgKz0gJzxpIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA0cHg7Zm9udC1zaXplOiAyN3B4ICFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJmYWwgZmEtYW5nbGUtcmlnaHRcIj48L2k+ICc7XHJcbiAgICAgIGh0bWwgKz0gJzxzcGFuIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAxMXB4O21hcmdpbi10b3A6IDJweDtcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogNnB4O1wiPic7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLnZpc2l0cGFnZScpO1xyXG4gICAgICBodG1sICs9ICc8L3NwYW4+PC9hPic7XHJcbiAgICB9XHJcbiAgICBodG1sICs9IHRoaXMuZ2V0SHIoKTs7XHJcbiAgICBpZiAodGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUpIHtcclxuICAgICAgaHRtbCArPSAnPHNwYW4gc3R5bGU9XCJjb2xvcjogIzlGQTBBNDtmb250LXNpemU6IDEycHg7XCI+JztcclxuICAgICAgaHRtbCArPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZG93bmxvYWRzJyk7XHJcbiAgICAgIGh0bWwgKz0gJzwvc3Bhbj4nO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNDaGFydERvd25sb2FkVmlzaWJsZSkge1xyXG4gICAgICAgIGh0bWwgKz0gJzxkaXYgc3R5bGU9XCJwYWRkaW5nLXRvcDogMTBweDtcIiBjbGFzcz1cImNoYXJ0RG93bmxvYWRcIj4nO1xyXG4gICAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0Rvd25sb2FkUG5nJywgJ2ZhbCBmYS1maWxlLWltYWdlJywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLnBuZycpKTtcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZEpwZycsICdmYWwgZmEtZmlsZS1pbWFnZScsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5qcGVnJykpO1xyXG4gICAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0Rvd25sb2FkUGRmJywgJ2ZhbCBmYS1maWxlLXBkZicsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5wZGYnKSk7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRTdmcnLCAnZmFsIGZhLWZpbGUtYWx0JywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLnN2ZycpKTtcclxuICAgICAgICBodG1sICs9ICc8L2Rpdj4nO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmlzR3JpZERvd25sb2FkVmlzaWJsZSkge1xyXG4gICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJncmlkRG93bmxvYWRcIj4nO1xyXG4gICAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0Rvd25sb2FkRXhjZWwnLCAnZmFsIGZhLWRvd25sb2FkJywgdGhpcy5leGNlbFRleHQpO1xyXG4gICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSAmJiB0aGlzLmlzV2lkZ2V0TWdtbnQpIHtcclxuICAgICAgaHRtbCArPSB0aGlzLmdldEhyKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1dpZGdldE1nbW50KSB7XHJcbiAgICAgIGh0bWwgKz0gJzxhIGlkPVwid2NXaWRnZXREZWxldGVcIj48aSBjbGFzcz1cImZhbCBmYS10aW1lc1wiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAzcHg7Y29sb3I6IHJlZDtcIj48L2k+PHNwYW4+JztcclxuICAgICAgaHRtbCArPSB0aGlzLmRlbGV0ZVRleHQ7XHJcbiAgICAgIGh0bWwgKz0gJzwvc3Bhbj48L2E+JztcclxuICAgIH1cclxuXHJcbiAgICBodG1sICs9ICc8L2Rpdj4nO1xyXG4gICAgcmV0dXJuIGh0bWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEhyKCkge1xyXG4gICAgcmV0dXJuICc8aHIgY2xhc3M9XCJoclwiIHN0eWxlPVwibWFyZ2luLXRvcDogNXB4O21hcmdpbi1ib3R0b206IDVweDtcIj4nO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRIdG1sRm9yQnV0dG9uKGlkOiBzdHJpbmcsIGZvbnRDbGFzczogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpIHtcclxuICAgIGxldCBodG1sID0gJzxhIGlkPVwiJyArIGlkICsgJ1wiPjxpIHN0eWxlPVwid2lkdGg6MTZweFwiIGNsYXNzPVwiJyArIGZvbnRDbGFzcyArICdcIj48L2k+IDxzcGFuIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA2cHg7XCI+JztcclxuICAgIGh0bWwgKz0gdGV4dDtcclxuICAgIGh0bWwgKz0gJzwvc3Bhbj48L2E+JztcclxuICAgIHJldHVybiBodG1sO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZ2V0UGFyc2VkQ29uZmlnKGNvbmZpZzogYW55KSB7XHJcbiAgICBsZXQgcGFyc2VkQ29uZmlnOiBhbnk7XHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBwYXJzZWRDb25maWcgPSBKU09OLnBhcnNlKGNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIHtcclxuICAgICAgICAgIHBhcnNlZENvbmZpZyA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyc2VkQ29uZmlnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBsYXlXaWRnZXRTZXR0aW5ncyhzZXR0aW5nczogYW55KSB7XHJcbiAgICBpZiAoc2V0dGluZ3MuTm9QYWRkaW5nKVxyXG4gICAgICB0aGlzLm5vUGFkZGluZyA9IHRydWVcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5ub1BhZGRpbmcgPSBmYWxzZVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
1022
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS13aWRnZXQtY29udGFpbmVyL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBb0UsTUFBTSxFQUFFLFNBQVMsRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUN4TSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBZ0QsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBa0IsTUFBTSwrQkFBK0IsQ0FBQztBQUNwTCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBU2xGLE1BQU0sT0FBTyxpQkFBaUI7Ozs7Ozs7Ozs7SUF3RTVCLFlBQW9CLGdCQUFvQyxFQUM5QyxVQUE4QixFQUM5QixnQkFBb0MsRUFDcEMsTUFBYyxFQUNkLFFBQXlCLEVBQ3pCLFFBQW1CLEVBQ25CLG1CQUF3QztRQU45QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQzlDLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7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O0lBQ3pCLGdEQUE2RDs7SUFDN0Qsc0NBQTJDOztJQUMzQyxrQ0FBcUM7O0lBQ3JDLG1DQUF1Qzs7SUFDdkMsMkNBQWtEOztJQUdsRCwwQ0FBcUQ7O0lBQ3JELHNDQUF5Qjs7SUFDekIsb0RBQWdEOztJQUNoRCw2Q0FBcUM7O0lBQ3JDLHVDQUEyQjs7SUFDM0Isd0NBQW9DOztJQUNwQyx5Q0FBeUI7O0lBQ3pCLDBDQUE2Qjs7SUFDN0Isb0NBQXVCOztJQUN2QiwwQ0FBc0M7O0lBQ3RDLDhDQUFpQzs7Ozs7SUFNckIsNkNBQTRDOzs7OztJQUN0RCx1Q0FBc0M7Ozs7O0lBQ3RDLDZDQUE0Qzs7Ozs7SUFDNUMsbUNBQXNCOzs7OztJQUN0QixxQ0FBaUM7Ozs7O0lBQ2pDLHFDQUEyQjs7Ozs7SUFDM0IsZ0RBQWdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIEFmdGVyVmlld0luaXQsIFNpbXBsZUNoYW5nZSwgT25EZXN0cm95LCBOZ1pvbmUsIFJlbmRlcmVyMiwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmFEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi8uLi9yYS5kYXNoYm9hcmQuc2VydmljZSc7XHJcbmltcG9ydCB7IFJBRGFzaGJvYXJkRXZlbnRCdXMgfSBmcm9tICcuLi9yYS5kYXNoYmFyZC5ldmVudC5idXMnO1xyXG5pbXBvcnQgeyBSQUV2ZW50LCBSQUV2ZW50S2V5IH0gZnJvbSAnLi4vcmEuZXZlbnQuZW51bSc7XHJcbmltcG9ydCB7IElBcHBDb25maWcsIElXaWRnZXRDb25maWdGaWx0ZXIsIElXaWRnZXRJbmZvLCBSQURvd25sb2FkVHlwZSwgUkFEb3dubG9hZE9wdGlvbiwgUmFXaWRnZXRsb2NrU3RhdHVzLCBXaWRnZXRWaWV3U3RhdGUsIEljb25maWdDaGFuZ2VzIH0gZnJvbSAnQHNjaG5laWRlcmVzcy93aWRnZXRmcmFtZXdvcmsnO1xyXG5pbXBvcnQgeyBOZ3hVaUxvYWRlclNlcnZpY2UgfSBmcm9tICduZ3gtdWktbG9hZGVyJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1ub3RpZmllcic7XHJcbmltcG9ydCB7IFJBVHJhbnNsYXRlU2VydmljZSwgUkFQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJ0BzY2huZWlkZXJlc3MvcmEtY29tbW9uJztcclxuXHJcbmRlY2xhcmUgdmFyIGpRdWVyeTogYW55O1xyXG5kZWNsYXJlIHZhciB3aW5kb3c6IGFueTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmEtd2lkZ2V0LWNvbnRhaW5lcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSQVdpZGdldENvbnRhaW5lciBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBwdWJsaWMgc2hvd1BhbmVsOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIGlzV2lkZ2V0TG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSB3aWRnZXRFbGVtZW50OiBhbnk7XHJcbiAgcHJpdmF0ZSBjb25maWdDaGFuZ2VkOiBhbnk7XHJcbiAgcHVibGljIHdpZGdldEhlaWdodDogbnVtYmVyO1xyXG4gIHB1YmxpYyBsb2NrQ2xhc3M6IHN0cmluZyA9IFwidW5sb2NrZWRcIjtcclxuICBwdWJsaWMgbG9ja1N0YXR1czogUmFXaWRnZXRsb2NrU3RhdHVzID0gUmFXaWRnZXRsb2NrU3RhdHVzLlVubG9ja2VkO1xyXG4gIHB1YmxpYyBpc0Rvd25sb2FkSWNvblZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNDaGFydERvd25sb2FkVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0dyaWREb3dubG9hZFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZG93bmxvYWRJY29uVHlwZTogUkFEb3dubG9hZFR5cGU7XHJcbiAgcHVibGljIGVuYWJsZVRpdGxlTGluZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0dsb2JhbEZpbHRlckFwcGxpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICAnO1xyXG4gIHB1YmxpYyB0b29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBsb2NrRGV0YWlsczogYW55O1xyXG4gIHB1YmxpYyBsb2NrVGVtcGxhdGVJbmZvOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHB1YmxpYyBlZGl0VG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGNvcHlUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgbW92ZVRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBleGNlbFRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBkZWxldGVUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgZWRpdFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBjb3B5VGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIG1vdmVUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZXhjZWxUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZGVsZXRlVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGVkaXRUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBjb3B5VG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgbW92ZVRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIGV4Y2VsVG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgZGVsZXRlVG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgd2lkZ2V0U2V0dGluZ3M6IGFueTtcclxuICBwdWJsaWMgbm9QYWRkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzTW91c2VIb3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93U2V0dGluZ3NMaW5rOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblxyXG5cclxuICBAVmlld0NoaWxkKCdjdGxXaWRnZXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgY3RsV2lkZ2V0OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3dpZGdldERyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIHdpZGdldERyb3Bkb3duOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pIHNlYXJjaElucHV0OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3djV3JhcHBlcicsIHsgc3RhdGljOiBmYWxzZSB9KSB3Y1dyYXBwZXI6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgnd2lkZ2V0LWluc3RhbmNlLWlkJykgd2lkZ2V0SW5zdGFuY2VJZDogbnVtYmVyO1xyXG4gIEBJbnB1dCgnZ2xvYmFsLWZpbHRlcicpIGdsb2JhbEZpbHRlcjogYW55O1xyXG4gIEBJbnB1dCgnZGF0YScpIGRhdGE6IGFueTtcclxuICBASW5wdXQoJ2V2ZW50LWJ1cycpIHJhRGFzaGJvYXJkRXZlbnRCdXM6IFJBRGFzaGJvYXJkRXZlbnRCdXM7XHJcbiAgQElucHV0KCdhcHAtY29uZmlnJykgYXBwQ29uZmlnOiBJQXBwQ29uZmlnO1xyXG4gIEBJbnB1dCgnd2lkZ2V0LXdpZHRoJykgd2lkdGg6IG51bWJlcjtcclxuICBASW5wdXQoJ3dpZGdldC1oZWlnaHQnKSBoZWlnaHQ6IG51bWJlcjtcclxuICBASW5wdXQoJ2dyaWQtY2VsbC1oZWlnaHQnKSBncmlkQ2VsbEhlaWdodDogbnVtYmVyO1xyXG5cclxuXHJcbiAgQE91dHB1dCgpIHdpZGdldERlbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBwdWJsaWMgbG9ja1RpdGxlOiBzdHJpbmc7XHJcbiAgcHVibGljIGlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHdpZGdldEVtcHR5U3RhdGU6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBkb21SZXNpemVkOiBib29sZWFuO1xyXG4gIHB1YmxpYyBsb2NrVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBsb2NrZWRGaWVsZHM6IGFueTtcclxuICBwdWJsaWMgZGV0YWlsUGFnZVVybDogc3RyaW5nO1xyXG4gIHB1YmxpYyBiYXNlVXJsOiBzdHJpbmc7XHJcbiAgcHVibGljIGlzV2lkZ2V0TWdtbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgV2lkZ2V0RGlzcGxheU5hbWU6IHN0cmluZztcclxuICBASW5wdXQoJ2RvbS1yZXNpemVkJylcclxuICBzZXQgc2V0UmVzaXplZChyZXNpemVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmludm9rZVdpZGdldFJlc2l6ZWRFdmVudCgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBSYURhc2hib2FyZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5neFNlcnZpY2U6IE5neFVpTG9hZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogUkFUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcclxuICAgIHByaXZhdGUgbm90aWZpZXI6IE5vdGlmaWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgcmFQZXJtaXNzaW9uU2VydmljZTogUkFQZXJtaXNzaW9uU2VydmljZSkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdjbGljaycsIChlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTmFtZSkge1xyXG4gICAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUgIT0gJ2ZhbCBmYS1lbGxpcHNpcy12IHdpZGdldC1tZW51LWVsbGlwc2UnKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuV2lkZ2V0RGlzcGxheU5hbWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uJyArIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFRpdGxlLCB0cnVlKTtcclxuICB9XHJcbiAgZ2V0IHdpZGdldFZpZXdTdGF0ZSgpIHsgcmV0dXJuIFdpZGdldFZpZXdTdGF0ZTsgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzV2lkZ2V0TWdtbnQgPSB0aGlzLnJhUGVybWlzc2lvblNlcnZpY2UuaGFzUGVybWlzc2lvbigncmEud2lkZ2V0bWFuYWdlbWVudCcpO1xyXG4gICAgaWYgKGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cyAmJiBjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMuY3VycmVudFZhbHVlICE9IGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlZCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmVXaXRoS2V5KFJBRXZlbnQuQ29uZmlnQ2hhbmdlZCwgUkFFdmVudEtleS5XaWRnZXRJbnN0YW5jZUlkLCB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkLnRvU3RyaW5nKCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ0NoYW5nZUV2ZW50SGFuZGxlcihlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiBjaGFuZ2VzLmdsb2JhbEZpbHRlciAmJiBjaGFuZ2VzLmdsb2JhbEZpbHRlci5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5nbG9iYWxGaWx0ZXIucHJldmlvdXNWYWx1ZSkge1xyXG5cclxuICAgICAgbGV0IGZpbHRlck9iaiA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHRoaXMuZ2xvYmFsRmlsdGVyKTtcclxuICAgICAgaWYgKGZpbHRlck9iai5XaWRnZXRJbnN0YW5jZUlkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQgIT0gZmlsdGVyT2JqLldpZGdldEluc3RhbmNlSWQpXHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVmcmVzaFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlcy53aWR0aCAmJiBjaGFuZ2VzLndpZHRoLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLndpZHRoLnByZXZpb3VzVmFsdWUgfHxcclxuICAgICAgKGNoYW5nZXMuaGVpZ2h0ICYmIGNoYW5nZXMuaGVpZ2h0LmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmhlaWdodC5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLmludm9rZVdpZGdldFJlc2l6ZWRFdmVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW52b2tlV2lkZ2V0UmVzaXplZEV2ZW50KCkge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCkge1xyXG4gICAgICBsZXQgc2l6ZTogYW55ID0ge307XHJcbiAgICAgIHNpemUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgIHNpemUud2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICBzaXplLmNlbGxIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgICB0aGlzLndpZGdldEVsZW1lbnQud2lkZ2V0UmVzaXplZChzaXplKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBtb3VzZUhvdmVyKGlzSG92ZXIgPSB0cnVlKSB7XHJcbiAgICB0aGlzLmlzTW91c2VIb3ZlciA9IGlzSG92ZXI7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCkge1xyXG4gICAgICBpZiAodHlwZW9mIHRoaXMud2lkZ2V0RWxlbWVudC5ob3ZlclN0YXR1cyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmhvdmVyU3RhdHVzKGlzSG92ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUud2Fybignd2lkZ2V0IGZyYW1ld29yayBvdXRkYXRlZCwgcGxlYXNlIHVwZGF0ZSB0byB2ZXJzaW9uIDAuMC45NicpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5sb2FkV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgIH0pXHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGxldCBpdGVtID0galF1ZXJ5KHRoaXMud2NXcmFwcGVyLm5hdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoJ2dyaWRzdGVyLWl0ZW0nKTtcclxuICAgICAgaXRlbS5iaW5kKCdtb3VzZWVudGVyJywgKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5ncmlkc3Rlckl0ZW1FbnRlciA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaXRlbS5iaW5kKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5ncmlkc3Rlckl0ZW1FbnRlciA9IGZhbHNlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF3aW5kb3cubW91c2VPdmVyV2lkZ2V0TWVudSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ0NoYW5nZWQpXHJcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlZC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKiBUbyBFZGl0IGN1cnJlbnQgd2lkZ2V0IGNvbmZpZ3VyYXRpb24qL1xyXG4gIHB1YmxpYyBlZGl0V2lkZ2V0KCkge1xyXG4gICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlcjogSVdpZGdldENvbmZpZ0ZpbHRlcjtcclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgdHlwZW9mICh0aGlzLndpZGdldEVsZW1lbnQuZ2V0Q29uZmlnRmlsdGVyKSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGxldCBjb25maWdEYXRhID0gdGhpcy53aWRnZXRFbGVtZW50LmdldENvbmZpZ0ZpbHRlcigpO1xyXG4gICAgICBpZiAoY29uZmlnRGF0YSkge1xyXG4gICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlciA9IGNvbmZpZ0RhdGE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh3aWRnZXRDb25maWdGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5XaWRnZXRFZGl0Q2xpY2tlZCwgd2lkZ2V0Q29uZmlnRmlsdGVyKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyRGF0YSA9IHRoaXMuZ2VuZXJhdGVDb25maWdGaWx0ZXIoZmFsc2UpO1xyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LldpZGdldEVkaXRDbGlja2VkLCB3aWRnZXRDb25maWdGaWx0ZXJEYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBUbyBEZWxldGUgY3VycmVudCB3aWRnZXQgZnJvbSBET00qL1xyXG4gIHB1YmxpYyBkZWxldGVXaWRnZXQoKSB7XHJcbiAgICBsZXQgd2lkZ2V0Q29udGFpbmVyQ29udGV4dCA9IHRoaXM7XHJcbiAgICB3aWRnZXRDb250YWluZXJDb250ZXh0Lm5neFNlcnZpY2Uuc3RhcnQoKTtcclxuICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQuZGFzaGJvYXJkU2VydmljZS5kZWxldGVXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8sIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUoc3RhdHVzID0+IHtcclxuICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5uZ3hTZXJ2aWNlLnN0b3AoKTtcclxuICAgICAgaWYgKHN0YXR1cykge1xyXG4gICAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQud2lkZ2V0RGVsZXRlZC5lbWl0KHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQubm90aWZpZXIubm90aWZ5KCdlcnJvcicsIFwiIFwiICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnRmFpbGVkVG9SZW1vdmVXaWRnZXQnKSArIFwiICAoXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uJyArIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFRpdGxlLCB0cnVlKSArIFwiKSFcIik7XHJcblxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBNb3ZlIG9yIGNoYW5nZSBwb3NpdGlvbiBpZiBjdXJyZW50IHdpZGdldCBjb250YWluZXIqL1xyXG4gIHB1YmxpYyBtb3ZlV2lkZ2V0KCkge1xyXG4gICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5Nb3ZlV2lkZ2V0LCB0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAvLyB0aGlzLmRhc2hib2FyZFNlcnZpY2UubW92ZVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBDb3B5IEN1cnJlbnQgd2lkZ2V0IHdpdGggc2FtZSBjb25maWd1cmF0aW9uKi9cclxuICBwdWJsaWMgY29weVdpZGdldCgpIHtcclxuICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuQ29weVdpZGdldCwgdGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgLy90aGlzLmRhc2hib2FyZFNlcnZpY2UuY29weVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB2aXNpdFBhZ2UoKSB7XHJcbiAgICB0aGlzLmJhc2VVcmwgPSB0aGlzLmdldEhvc3RVcmwoKTtcclxuICAgIGxldCB1cmwgPSB0aGlzLmJhc2VVcmwgKyB0aGlzLmRldGFpbFBhZ2VVcmw7XHJcbiAgICBpZiAodGhpcy5kYXRhLndpZGdldEluZm8gJiYgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgdGhpcy53aWRnZXRTZXR0aW5ncyA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKTtcclxuICAgICAgaWYgKHRoaXMud2lkZ2V0U2V0dGluZ3MuY3VzdG9tUGFnZVBhcmFtcykge1xyXG4gICAgICAgIGxldCBwYXJhbXMgPSB0aGlzLndpZGdldEVsZW1lbnQuZ2V0UGFnZVBhcmFtc0NsaWNrZWQoKTtcclxuICAgICAgICBpZiAocGFyYW1zKVxyXG4gICAgICAgICAgdXJsID0gdXJsICsgJz8nICsgcGFyYW1zO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEhvc3RVcmwoKSB7XHJcbiAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICh3aW5kb3cubG9jYXRpb24ucG9ydCA/ICc6JyArIHdpbmRvdy5sb2NhdGlvbi5wb3J0IDogJycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbmZpZ0NoYW5nZUV2ZW50SGFuZGxlcih3aWRnZXRJbmZvKSB7XHJcbiAgICB0aGlzLmRhdGEud2lkZ2V0SW5mbyA9IHdpZGdldEluZm87XHJcbiAgICBpZiAodGhpcy5ncmlkQ2VsbEhlaWdodCA+IDApIHtcclxuICAgICAgdGhpcy5kYXRhLndpZGdldEluZm8ucm93SGVpZ2h0ID0gdGhpcy5ncmlkQ2VsbEhlaWdodDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgdHlwZW9mICh0aGlzLndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIodGhpcy5nZW5lcmF0ZUNvbmZpZ0ZpbHRlcih0cnVlKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCd3aWRnZXQgZnJhbWV3b3JrIG91dGRhdGVkLCBwbGVhc2UgdXBkYXRlIHRvIHZlcnNpb24gMC4wLjk4Jyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlZnJlc2hXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8sIHRydWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVDb25maWdGaWx0ZXIoY29uZmlnQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyRGF0YSA9IDxJV2lkZ2V0Q29uZmlnRmlsdGVyPntcclxuICAgICAgYXBwQ29uZmlnOiB0aGlzLmFwcENvbmZpZyxcclxuICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmdsb2JhbEZpbHRlcixcclxuICAgICAgd2lkZ2V0SW5mbzogdGhpcy5kYXRhLndpZGdldEluZm8sXHJcbiAgICAgIGNvbmZpZzogdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcsXHJcbiAgICAgIGNvbmZpZ0NoYW5nZXM6IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhjb25maWdDaGFuZ2VkKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHdpZGdldENvbmZpZ0ZpbHRlckRhdGE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqICBUbyBsb2FkIGV4dGVybmFsIGN1c3RvbSBlbGVtZW50IHRvIHRoZSB3aWRnZXQgY29udGFpbmVyKi9cclxuICBhc3luYyBsb2FkV2lkZ2V0KHdpZGdldEluZm86IGFueSkge1xyXG4gICAgd2lkZ2V0SW5mby5yb3dIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlciA9IDxJV2lkZ2V0Q29uZmlnRmlsdGVyPntcclxuICAgICAgY29uZmlnOiB3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnLFxyXG4gICAgICBnbG9iYWxGaWx0ZXI6IHRoaXMuZ2xvYmFsRmlsdGVyLFxyXG4gICAgICBjb25maWdDaGFuZ2VzOiB0aGlzLmdldENvbmZpZ0NoYW5nZXMoZmFsc2UpXHJcbiAgICB9XHJcbiAgICBpZiAod2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncykge1xyXG4gICAgICB0aGlzLndpZGdldFNldHRpbmdzID0gdGhpcy5nZXRQYXJzZWRDb25maWcod2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICAgIHRoaXMuYXBwbGF5V2lkZ2V0U2V0dGluZ3ModGhpcy53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRldGFpbFBhZ2VVcmwgPSB3aWRnZXRJbmZvLmRldGFpbFBhZ2VVcmw7XHJcbiAgICBsZXQgd2lkZ2V0Q29udGFpbmVyID0gdGhpcztcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5sb2FkRXh0ZXJuYWxTY3JpcHQod2lkZ2V0SW5mby5zY3JpcHRVcmwsICgpID0+IHtcclxuICAgICAgdGhpcy5zZXROb3RDb25maWd1cmVkU3RhdGUod2lkZ2V0SW5mbyk7XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5sb2FkVHJhbnNsYXRpb25zKHRoaXMuYXBwQ29uZmlnLmFwcE1hbmFnZW1lbnRCYXNlVXJsLCB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXROYW1lLCBmYWxzZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyLndpZGdldEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHdpZGdldEluZm8uY3VzdG9tVGFnKTtcclxuICAgICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ3aWRnZXQtaW5zdGFuY2UtaWRcIiwgd2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCd3aWRnZXRpbml0aWF0ZWQnICsgd2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLndpZGdldEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignb24tZGF0YS1sb2FkJywgKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlLmRldGFpbClcclxuICAgICAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci5zaG93UGFuZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci5zaG93UGFuZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbmZpZy1lZGl0LWNsaWNrZWQnLCAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLmVkaXRXaWRnZXQoKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdlbmFibGUtZGVmYXVsdC1zdGF0ZScsIChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB3aWRnZXRDb250YWluZXIuc2V0RW1wdHlTdGF0ZShlLmRldGFpbCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbGV0IHRpdGxlTGluZUVuYWJsZWQgPSB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudC50aXRsZUxpbmVFbmFibGVkKCk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKHRpdGxlTGluZUVuYWJsZWQpICE9ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbmFibGVUaXRsZUxpbmUgPSB0aXRsZUxpbmVFbmFibGVkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVkaXRUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0JykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgIHRoaXMuZWRpdFRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5lZGl0VG9vbFRpcFZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKTtcclxuICAgICAgICAgICAgICB0aGlzLmVkaXRUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb3B5VGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvcHlUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29weVRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb3B5VG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubW92ZVRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMubW92ZVRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZXhjZWxUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5leGNlbFRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZXhjZWxUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKTtcclxuICAgICAgICAgICAgICB0aGlzLmV4Y2VsVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci5pc1dpZGdldExvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5hcHBDb25maWcgPSB0aGlzLmFwcENvbmZpZztcclxuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8gPSB3aWRnZXRJbmZvO1xyXG4gICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnQ2hhbmdlcyA9IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhmYWxzZSk7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci53aWRnZXRJbmZvLndpZGdldE5hbWUgPSB3aWRnZXRJbmZvLndpZGdldE5hbWU7XHJcbiAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LmxvYWRDb250ZW50KHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICAgICAgICAgIGF3YWl0IHdpZGdldENvbnRhaW5lci5zZXRMb2NrKHdpZGdldENvbmZpZ0ZpbHRlci5jb25maWcpO1xyXG4gICAgICAgICAgICBhd2FpdCB3aWRnZXRDb250YWluZXIuc2V0RG93bmxvYWRJY29uKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmN0bFdpZGdldC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMud2lkZ2V0RWxlbWVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipUbyBzZXQgRGVmYXVsdCBTdGF0ZSBmb3IgdGhlIHdpZGdldCB3aGVuIGl0IGlzIG5vdCBjb25maWd1cmVkICovXHJcbiAgc2V0Tm90Q29uZmlndXJlZFN0YXRlKHdpZGdldEluZm86IElXaWRnZXRJbmZvLCBmb3JjZUVuYWJsZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoKHdpZGdldEluZm8uc2hvd0RlZmF1bHRTdGF0ZSAmJiAod2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyA9PSBcIlwiIHx8IE9iamVjdC5rZXlzKEpTT04ucGFyc2Uod2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZykpLmxlbmd0aCA9PSAwKSkgfHwgKGZvcmNlRW5hYmxlKSkge1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy53aWRnZXRFbXB0eVN0YXRlID0gV2lkZ2V0Vmlld1N0YXRlLmVtcHR5Q29uZmlnLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy53aWRnZXRFbXB0eVN0YXRlID0gJyc7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlRvIGNvbmZpZ3VyZSBlbXB0eSBzdGF0ZSBmb3IgdGhlIHdpZGdldCAgKi9cclxuICBzZXRFbXB0eVN0YXRlKHdpZGdldFN0YXRlOiBhbnkpIHtcclxuICAgIHRoaXMud2lkZ2V0RW1wdHlTdGF0ZSA9IHdpZGdldFN0YXRlLndpZGdldFZpZXdTdGF0ZTtcclxuICAgIHRoaXMuaXNHbG9iYWxGaWx0ZXJBcHBsaWVkID0gd2lkZ2V0U3RhdGUuaXNHbG9iYWxGaWx0ZXJBcHBsaWVkO1xyXG4gICAgaWYgKHdpZGdldFN0YXRlICE9IFdpZGdldFZpZXdTdGF0ZS5ub3JtYWwpIHtcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoICh3aWRnZXRTdGF0ZSkge1xyXG4gICAgICBjYXNlIFdpZGdldFZpZXdTdGF0ZS5lbXB0eUNvbmZpZzpcclxuICAgICAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgV2lkZ2V0Vmlld1N0YXRlLmVtcHR5RGF0YTpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBXaWRnZXRWaWV3U3RhdGUuZXJyb3I6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWdDaGFuZ2VzKGNvbmZpZ0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgbGV0IGNvbmZpZ0NoYW5nZXMgPSA8SWNvbmZpZ0NoYW5nZXM+e1xyXG4gICAgICBpc0NvbmZpZ1VwZGF0ZWQ6IGNvbmZpZ0NoYW5nZWQsXHJcbiAgICAgIHVwZGF0ZWRDb25maWdQcm9wZXJ0eTogW11cclxuICAgIH1cclxuICAgIHJldHVybiBjb25maWdDaGFuZ2VzO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIHJlZnJlc2ggd2lkZ2V0IG9uIGlucHV0IGNvbmZpZyBjaGFuZ2VzICovXHJcbiAgYXN5bmMgcmVmcmVzaFdpZGdldCh3aWRnZXRJbmZvOiBJV2lkZ2V0SW5mbywgY29uZmlnQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLldpZGdldERpc3BsYXlOYW1lID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLicgKyB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRUaXRsZSwgdHJ1ZSk7XHJcbiAgICB3aWRnZXRJbmZvLnJvd0hlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh3aWRnZXRJbmZvKTtcclxuICAgIGxldCB3aWRnZXRDb250YWluZXJDb250ZXh0ID0gdGhpcztcclxuXHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyID0gPElXaWRnZXRDb25maWdGaWx0ZXI+e1xyXG4gICAgICBjb25maWc6IHdpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcsXHJcbiAgICAgIGdsb2JhbEZpbHRlcjogdGhpcy5nbG9iYWxGaWx0ZXIsXHJcbiAgICAgIGFwcENvbmZpZzogdGhpcy5hcHBDb25maWcsXHJcbiAgICAgIHdpZGdldEluZm86IHdpZGdldEluZm8sXHJcbiAgICAgIGNvbmZpZ0NoYW5nZXM6IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhjb25maWdDaGFuZ2VkKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aWRnZXRDb250YWluZXJDb250ZXh0LmlzV2lkZ2V0TG9hZGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgdHlwZW9mICh0aGlzLndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC53aWRnZXRFbGVtZW50LnNldENvbmZpZ0ZpbHRlcih3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQud2lkZ2V0RWxlbWVudC5sb2FkQ29udGVudCh3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgICBhd2FpdCB0aGlzLnNldExvY2sod2lkZ2V0Q29uZmlnRmlsdGVyLmNvbmZpZyk7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2V0RG93bmxvYWRJY29uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbW91c2VPdmVyKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMudG9vbFRpcFZhbHVlID0gJyAnO1xyXG4gICAgdGhpcy50b29sVGlwV2lkdGggPSAnMHB4JztcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5zZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKGVsZW1lbnQub2Zmc2V0V2lkdGggPCBlbGVtZW50LnNjcm9sbFdpZHRoKSB7XHJcbiAgICAgIHRoaXMudG9vbFRpcFZhbHVlID0gZWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICAgIHRoaXMudG9vbFRpcFdpZHRoID0gJzMwMHB4JztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnRvb2xUaXBXaWR0aCA9ICcwcHgnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzZXRMb2NrKGNvbmZpZzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmxvY2tUZW1wbGF0ZUluZm8gPSB0aGlzLndpZGdldEVsZW1lbnQubG9hZExvY2tJbmZvKCk7XHJcbiAgICB2YXIgY29uZmlnT2JqOiBhbnk7XHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIGNvbmZpZ09iaiA9IEpTT04ucGFyc2UoY29uZmlnKTtcclxuICAgICAgaWYgKGNvbmZpZ09iaiAmJiBjb25maWdPYmouTG9ja3MgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc0RhdGVMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzRGF0ZXNMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzUGFydGljaXBhbnRMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzU291cmNlTG9ja2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzID0gW107XHJcbiAgICAgICAgICBpZiAoY29uZmlnT2JqLkxvY2tzLklzRGF0ZUxvY2tlZCB8fCBjb25maWdPYmouTG9ja3MuSXNEYXRlc0xvY2tlZClcclxuICAgICAgICAgICAgdGhpcy5sb2NrRGV0YWlscy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EYXRlUmFuZ2UnKSk7XHJcblxyXG4gICAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc1BhcnRpY2lwYW50TG9ja2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uRGl2aXNpb25Pckdyb3Vwb3JTaXRlJykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc1NvdXJjZUxvY2tlZClcclxuICAgICAgICAgICAgdGhpcy5sb2NrRGV0YWlscy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EYXRhU3RyZWFtJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9ja0RldGFpbHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXREb3dubG9hZEljb24oKSB7XHJcbiAgICBsZXQgZG93bmxvYWRUeXBlID0gYXdhaXQgdGhpcy53aWRnZXRFbGVtZW50LmdldERvd25sb2FkVHlwZSgpO1xyXG4gICAgdGhpcy5kb3dubG9hZEljb25UeXBlID0gZG93bmxvYWRUeXBlO1xyXG4gICAgdGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNDaGFydERvd25sb2FkVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgPSBmYWxzZTtcclxuICAgIGlmIChkb3dubG9hZFR5cGUgIT0gUkFEb3dubG9hZFR5cGUuTm9uZSkge1xyXG4gICAgICB0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLmlzV2lkZ2V0TWdtbnQgJiYgIXRoaXMuZGV0YWlsUGFnZVVybCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1NldHRpbmdzTGluayA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRvd25sb2FkVHlwZSA9PSBSQURvd25sb2FkVHlwZS5DaGFydCkge1xyXG4gICAgICB0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb3dubG9hZFR5cGUgPT0gUkFEb3dubG9hZFR5cGUuR3JpZCkge1xyXG4gICAgICB0aGlzLmlzR3JpZERvd25sb2FkVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRvd25sb2FkSWNvbkNsaWNrZWQodHlwZTogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBcIkNTVlwiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLkNTVik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJQTkdcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5QTkcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiUERGXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uUERGKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlNWR1wiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLlNWRyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJKUEVHXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uSlBFRyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZU1lbnUoKSB7XHJcbiAgICBqUXVlcnkoJyNyYS1kYi13aWRnZXQtbWVudScpLnJlbW92ZSgpO1xyXG4gIH1cclxuICAvKipTaG93IGRyb3Bkb3duIG9uIGdlYXIgaWNvbiBjbGljayAgKi9cclxuICBwdWJsaWMgc2hvd0Ryb3BEb3duKGU6IGFueSkge1xyXG4gICAgdGhpcy5zZXREb3dubG9hZEljb24oKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgdGFyZ2V0UG9zID0gZS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIGxldCBzdHlsZTogc3RyaW5nID0gXCJwb3NpdGlvbjpmaXhlZDt0b3A6XCIgKyAodGFyZ2V0UG9zLnkgKyAxNSkgKyAncHgnICsgJztsZWZ0OicgKyAoZS5wYWdlWCAtIDEyMikgKyAncHg7ei1pbmRleDoxMDAwOyc7XHJcbiAgICAgIGxldCBodG1sID0gdGhpcy5nZXRDb250ZW54dEh0bWwoc3R5bGUpO1xyXG5cclxuICAgICAgalF1ZXJ5KGh0bWwpLmFwcGVuZFRvKCdib2R5Jyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc1dpZGdldE1nbW50KSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0VkaXRXaWRnZXQnLCB0aGlzLmVkaXRXaWRnZXQpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NDb3B5V2lkZ2V0JywgdGhpcy5jb3B5V2lkZ2V0KTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djTW92ZVdpZGdldCcsIHRoaXMubW92ZVdpZGdldCk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y1dpZGdldERlbGV0ZScsIHRoaXMuZGVsZXRlV2lkZ2V0KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kZXRhaWxQYWdlVXJsKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y1Zpc2l0V2lkZ2V0JywgdGhpcy52aXNpdFBhZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUpIHtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRQbmcnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdQTkcnKTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRKcGcnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdKUEVHJyk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkUGRmJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnUERGJyk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkU3ZnJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnU1ZHJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkRXhjZWwnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdDU1YnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhLWRiLXdpZGdldC1tZW51JykuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcclxuICAgICAgICB3aW5kb3cubW91c2VPdmVyV2lkZ2V0TWVudSA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmEtZGItd2lkZ2V0LW1lbnUnKS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5tb3VzZU92ZXJXaWRnZXRNZW51ID0gZmFsc2U7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXdpbmRvdy5ncmlkc3Rlckl0ZW1FbnRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEV2ZW50TGlzdGVuZXIoaWQ6IHN0cmluZywgZXZlbnQ6IGFueSwgcGFyYW1zPzogYW55KSB7XHJcbiAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgZXZlbnQuY2FsbCh0aGlzLCBwYXJhbXMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29udGVueHRIdG1sKHN0eWxlOiBzdHJpbmcpIHtcclxuICAgIGxldCBodG1sOiBzdHJpbmcgPSAnPGRpdiBpZD1cInJhLWRiLXdpZGdldC1tZW51XCInICsgJ3N0eWxlPVwiJyArIHN0eWxlICsgJ1wiIGNsYXNzPVwiZG93bmxvYWQtY29udGVudCBkcm9wZG93bi1jb250ZW50IHdpZGdldC1jb25maWctaXRlbSBkcm9wZG93bi1jbGlja1wiIHN0eWxlPVwiei1pbmRleDogMTAwMjtcIj4nO1xyXG5cclxuICAgIGxldCBzZXR0aW5ncyA9ICcnO1xyXG4gICAgaWYgKHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICBzZXR0aW5ncyArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRWRpdFdpZGdldCcsICdmYWwgZmEtZWRpdCcsIHRoaXMuZWRpdFRleHQpO1xyXG4gICAgICBzZXR0aW5ncyArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djQ29weVdpZGdldCcsICdmYWwgZmEtY29weScsIHRoaXMuY29weVRleHQpO1xyXG4gICAgICBzZXR0aW5ncyArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djTW92ZVdpZGdldCcsICdmYWwgZmEtYXJyb3dzLWFsdCcsIHRoaXMubW92ZVRleHQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGV0YWlsUGFnZVVybCkge1xyXG4gICAgICBzZXR0aW5ncyArPSAnPGEgc3R5bGU9XCJtYXgtaGVpZ2h0OiAzMHB4O2FsaWduLWl0ZW1zOiBjZW50ZXI7YWxpZ24tY29udGVudDogY2VudGVyOyBkaXNwbGF5OiBmbGV4O1wiIGlkPVwid2NWaXNpdFdpZGdldFwiPic7XHJcbiAgICAgIHNldHRpbmdzICs9ICc8aSBzdHlsZT1cInBhZGRpbmctbGVmdDogNHB4O2ZvbnQtc2l6ZTogMjdweCAhaW1wb3J0YW50O1wiIGNsYXNzPVwiZmFsIGZhLWFuZ2xlLXJpZ2h0XCI+PC9pPiAnO1xyXG4gICAgICBzZXR0aW5ncyArPSAnPHNwYW4gc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDExcHg7bWFyZ2luLXRvcDogMnB4O1wiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA2cHg7XCI+JztcclxuICAgICAgc2V0dGluZ3MgKz0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLnZpc2l0cGFnZScpO1xyXG4gICAgICBzZXR0aW5ncyArPSAnPC9zcGFuPjwvYT4nO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGV0YWlsUGFnZVVybCB8fCB0aGlzLmlzV2lkZ2V0TWdtbnQpIHtcclxuICAgICAgaHRtbCArPSAnPGRpdiBzdHlsZT1cImNvbG9yOiAjOUZBMEE0O2ZvbnQtc2l6ZTogMTJweDtwYWRkaW5nLXRvcDogOHB4O3BhZGRpbmctbGVmdDogMTJweDtcIj4nO1xyXG4gICAgICBodG1sICs9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5zZXR0aW5ncycpICsgJzwvZGl2Pic7XHJcbiAgICAgIGh0bWwgKz0gc2V0dGluZ3M7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy5nZXRIcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSkge1xyXG4gICAgICBodG1sICs9ICc8c3BhbiBzdHlsZT1cImNvbG9yOiAjOUZBMEE0O2ZvbnQtc2l6ZTogMTJweDtcIj4nO1xyXG4gICAgICBodG1sICs9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kb3dubG9hZHMnKTtcclxuICAgICAgaHRtbCArPSAnPC9zcGFuPic7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0NoYXJ0RG93bmxvYWRWaXNpYmxlKSB7XHJcbiAgICAgICAgaHRtbCArPSAnPGRpdiBzdHlsZT1cInBhZGRpbmctdG9wOiAxMHB4O1wiIGNsYXNzPVwiY2hhcnREb3dubG9hZFwiPic7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRQbmcnLCAnZmFsIGZhLWZpbGUtaW1hZ2UnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ucG5nJykpO1xyXG4gICAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0Rvd25sb2FkSnBnJywgJ2ZhbCBmYS1maWxlLWltYWdlJywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmpwZWcnKSk7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRQZGYnLCAnZmFsIGZhLWZpbGUtcGRmJywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLnBkZicpKTtcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZFN2ZycsICdmYWwgZmEtZmlsZS1hbHQnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uc3ZnJykpO1xyXG4gICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlKSB7XHJcbiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cImdyaWREb3dubG9hZFwiPic7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRFeGNlbCcsICdmYWwgZmEtZG93bmxvYWQnLCB0aGlzLmV4Y2VsVGV4dCk7XHJcbiAgICAgICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlICYmIHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICBodG1sICs9IHRoaXMuZ2V0SHIoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzV2lkZ2V0TWdtbnQpIHtcclxuICAgICAgaHRtbCArPSAnPGEgaWQ9XCJ3Y1dpZGdldERlbGV0ZVwiPjxpIGNsYXNzPVwiZmFsIGZhLXRpbWVzXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDNweDtjb2xvcjogcmVkO1wiPjwvaT48c3Bhbj4nO1xyXG4gICAgICBodG1sICs9IHRoaXMuZGVsZXRlVGV4dDtcclxuICAgICAgaHRtbCArPSAnPC9zcGFuPjwvYT4nO1xyXG4gICAgfVxyXG5cclxuICAgIGh0bWwgKz0gJzwvZGl2Pic7XHJcbiAgICByZXR1cm4gaHRtbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SHIoKSB7XHJcbiAgICByZXR1cm4gJzxociBjbGFzcz1cImhyXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiA1cHg7bWFyZ2luLWJvdHRvbTogNXB4O1wiPic7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEh0bWxGb3JCdXR0b24oaWQ6IHN0cmluZywgZm9udENsYXNzOiBzdHJpbmcsIHRleHQ6IHN0cmluZykge1xyXG4gICAgbGV0IGh0bWwgPSAnPGEgaWQ9XCInICsgaWQgKyAnXCI+PGkgc3R5bGU9XCJ3aWR0aDoxNnB4XCIgY2xhc3M9XCInICsgZm9udENsYXNzICsgJ1wiPjwvaT4gPHNwYW4gc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDZweDtcIj4nO1xyXG4gICAgaHRtbCArPSB0ZXh0O1xyXG4gICAgaHRtbCArPSAnPC9zcGFuPjwvYT4nO1xyXG4gICAgcmV0dXJuIGh0bWw7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJzZWRDb25maWcoY29uZmlnOiBhbnkpIHtcclxuICAgIGxldCBwYXJzZWRDb25maWc6IGFueTtcclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHBhcnNlZENvbmZpZyA9IEpTT04ucGFyc2UoY29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgcGFyc2VkQ29uZmlnID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJzZWRDb25maWc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjb25maWc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGxheVdpZGdldFNldHRpbmdzKHNldHRpbmdzOiBhbnkpIHtcclxuICAgIGlmIChzZXR0aW5ncy5Ob1BhZGRpbmcpXHJcbiAgICAgIHRoaXMubm9QYWRkaW5nID0gdHJ1ZVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLm5vUGFkZGluZyA9IGZhbHNlXHJcbiAgfVxyXG59XHJcbiJdfQ==
|