@schneideress/dashboardframework 17.0.32 → 17.0.34

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.
@@ -30,6 +30,7 @@ export class RADashboardArea {
30
30
  this.showEmptyDashboard = false;
31
31
  this.showDownloadOnlyState = false;
32
32
  this.isWidgetMgmnt = false;
33
+ this.isOnlyWidgets = true;
33
34
  this.initialWidgetCount = 10;
34
35
  this.currentLoadingCount = 0;
35
36
  this.downloadDatastreamLimit = 200;
@@ -387,6 +388,9 @@ export class RADashboardArea {
387
388
  areaHeight = 600;
388
389
  }
389
390
  this.gridheight = areaHeight;
391
+ if (this.dashboardInfo.templateName == 'Emission Report') {
392
+ this.isOnlyWidgets = false;
393
+ }
390
394
  });
391
395
  }
392
396
  /** To remove a widget instance from dashboard and to save info in database */
@@ -568,11 +572,11 @@ export class RADashboardArea {
568
572
  }
569
573
  }
570
574
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: RADashboardArea, deps: [{ token: i1.RaDashboardService }, { token: i0.NgZone }, { token: i2.NgxUiLoaderService }, { token: i3.RATranslateService }, { token: i4.NotifierService }, { token: i0.ChangeDetectorRef }, { token: i5.RADashboardResponsiveService }, { token: i3.RAPermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
571
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: RADashboardArea, selector: "ra-dashboard-area", inputs: { userDashboardId: ["user-dashboard-id", "userDashboardId"], areaKey: ["area-key", "areaKey"], downloadDatastreamLimit: ["download-datastream-limit", "downloadDatastreamLimit"], reportDatastreamLimit: ["report-datastream-limit", "reportDatastreamLimit"], globalFilter: ["global-filter", "globalFilter"], raDashboardEventBus: ["event-bus", "raDashboardEventBus"], widgetHeight: ["widget-height", "widgetHeight"], widgetWidth: ["widget-width", "widgetWidth"], appConfig: ["app-config", "appConfig"], dashboardInfo: ["dashboard-info", "dashboardInfo"], isIndicatorDashboard: "isIndicatorDashboard", templateConfig: "templateConfig", bulkActionData: ["bulk_Action_Data", "bulkActionData"] }, outputs: { hideDashboardBanner: "hideDashboardBanner" }, host: { listeners: { "document:scroll": "scroll()" } }, viewQueries: [{ propertyName: "gridWrapper", first: true, predicate: ["gridWrapper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #gridWrapper class=\"wrap gridster gridster-mobile\"\r\n [ngStyle]=\"{'height': userWidgets.length > 0 &&!showDownloadOnlyState ? (gridheight + 'px') : 'unset'}\">\r\n <!-- <div #gridWrapper class=\"wrap gridster\"> -->\r\n <gridster [options]=\"options\" style=\"height:100%;\" *ngIf=\"userWidgets.length > 0 && !showDownloadOnlyState\">\r\n <gridster-item [item]=\"item\" *ngFor=\"let item of widgetList\">\r\n <ra-widget-container (widgetLoaded)=\"widgetLoaded($event, item)\" [canLoadData]=\"item.canLoadData\" (dataLoaded)=\"dataLoaded($event)\"\r\n [bulk-action-data]=\"bulkActionData\" [dashboard-info]=\"dashboardInfo\" [app-config]=\"appConfig\"\r\n [event-bus]=\"raDashboardEventBus\" (widgetDeleted)=\"deleteWidget($event)\" [data]=\"item\"\r\n [global-filter]=\"globalFilter\" [grid-cell-height]=\"gridcellHeight\" *ngIf=\"gridcellHeight && gridcellHeight > 0\"\r\n [widget-width]=\"item.cols\" [widget-height]=\"item.rows\" [widget-instance-id]=\"item.widgetInstanceId\"\r\n [dom-resized]=\"domResized\" (updateAppliedFilters)=\"updateAppliedFilters($event)\">\r\n </ra-widget-container>\r\n </gridster-item>\r\n </gridster>\r\n\r\n <div class=\"empty-padding kiosk-hide\" *ngIf=\"showEmptyDashboard\">\r\n <div class=\"empty-wrapper\">\r\n <div></div>\r\n <div class=\"empty-prefix\">\r\n <!-- <i class=\"fal fa-edit edit-icon\"></i> -->\r\n <span>{{emptyDashboardTitle}}</span>\r\n </div>\r\n <hr class=\"horizontalLine-solid\" />\r\n <div class=\"empty-content light\">\r\n <div>\r\n <div class=\"col-sm-12 empty-msg\">\r\n {{emptyDashboardMsg1}} <br />\r\n {{emptyDashboardMsg2}}\r\n </div>\r\n <button *ngIf=\"isWidgetMgmnt\" class=\"btn btnLib btn-sm dashboard-button light\" (click)=\"buttonClick()\">\r\n <i class=\"{{emptyDashboardButtonIcon}}\"></i>{{emptyDashboardButtonText}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"empty-padding kiosk-hide\" *ngIf=\"showDownloadOnlyState\">\r\n <div class=\"empty-wrapper\">\r\n <div></div>\r\n <div class=\"empty-prefix\">\r\n <!-- <i class=\"fal fa-edit edit-icon\"></i> -->\r\n <span>{{DownloadOnlyStateTitle}}</span>\r\n </div>\r\n <hr class=\"horizontalLine-solid\" />\r\n <div class=\"empty-content light\">\r\n <div>\r\n <div class=\"col-sm-12 empty-msg\">\r\n {{DownloadOnlyStateMsg1}} <br />\r\n {{DownloadOnlyStateMsg2}}\r\n </div>\r\n <button *ngIf=\"isWidgetMgmnt\" class=\"btn btnLib btn-sm dashboard-button light\" (click)=\"buttonActionClick(DownloadOnlyStateButtonAction1)\">\r\n <i class=\"{{DownloadOnlyStateButtonIcon1}}\"></i>{{DownloadOnlyStateButtonText1}}</button>\r\n <button class=\"btn btnLib btn-sm dashboard-button light button-margin\" (click)=\"buttonActionClick(DownloadOnlyStateButtonAction2)\">\r\n <i class=\"{{DownloadOnlyStateButtonIcon2}}\"></i>{{DownloadOnlyStateButtonText2}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <notifier-container></notifier-container>\r\n</div>\r\n", styles: ["gridster{width:inherit;resize:height;display:flex;background-color:#fff;overflow-y:hidden!important;flex-direction:column}.dvheader{width:100%;height:35px;background:#000;color:#fff;padding:7px 3px 5px 6px;text-transform:uppercase}gridster-item{box-sizing:border-box;z-index:1;position:absolute;overflow:hidden;transition:.3s;display:none;background:#fff;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;box-shadow:none}gridster-item:hover{box-shadow:0 1px 10px #00000026!important}.button-margin{margin-left:10px}@media screen and (max-width: 685px){.gridster-mobile{height:auto!important;margin-bottom:50px!important}}@media screen and (max-width: 350px){.gridster-mobile{min-height:330px!important;margin-bottom:0!important}}.empty-padding{padding:15px 0;background-color:#fff;display:flex}.empty-wrapper{background-color:#fff;border:1px solid #9FA0A4;min-height:125px;width:100%}.empty-prefix{color:#32ad3c;font-size:18px;padding:15px}.empty-content{color:#626469;width:100%;padding:15px}.empty-msg{padding:0 0 15px;font-size:16px}.horizontalLine-solid{border-top:1px solid #cbcbcb;margin:0 15px}.dashboard-button{padding:5px 10px 5px 5px!important}.btnLib{background-color:#ededed;color:#333!important}.btn-sm,.btn-group-sm>.btn{padding:5px 20px 5px 5px}.edit-icon{color:#32ad3c;font-size:24px;margin-right:15px}.empty-title{margin-top:10px}@media screen and (max-width: 600px){.empty-padding{padding:15px 0;background-color:#fff;width:100%;display:block}.empty-wrapper{display:flex;background-color:#fff;border:1px solid #9FA0A4;min-height:125px;width:100%}.empty-prefix{color:#32ad3c;font-size:16px;display:flex;height:40px;padding:15px}.empty-content{color:#333;display:flex;padding:15px}.empty-msg{padding:0 0 15px;font-size:14px}.edit-icon{color:#32ad3c;font-size:20px;margin-right:6px}.empty-title{margin-top:6px}}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i7.GridsterComponent, selector: "gridster", inputs: ["options"] }, { kind: "component", type: i8.GridsterItemComponent, selector: "gridster-item", inputs: ["item"], outputs: ["itemInit", "itemChange", "itemResize"] }, { kind: "component", type: i4.NotifierContainerComponent, selector: "notifier-container" }, { kind: "component", type: i9.RAWidgetContainer, selector: "ra-widget-container", inputs: ["widget-instance-id", "global-filter", "dashboard-info", "data", "event-bus", "app-config", "widget-width", "widget-height", "grid-cell-height", "bulk-action-data", "canLoadData", "dom-resized"], outputs: ["widgetDeleted", "updateAppliedFilters", "dataLoaded", "widgetLoaded"] }] }); }
575
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: RADashboardArea, selector: "ra-dashboard-area", inputs: { userDashboardId: ["user-dashboard-id", "userDashboardId"], areaKey: ["area-key", "areaKey"], downloadDatastreamLimit: ["download-datastream-limit", "downloadDatastreamLimit"], reportDatastreamLimit: ["report-datastream-limit", "reportDatastreamLimit"], globalFilter: ["global-filter", "globalFilter"], raDashboardEventBus: ["event-bus", "raDashboardEventBus"], widgetHeight: ["widget-height", "widgetHeight"], widgetWidth: ["widget-width", "widgetWidth"], appConfig: ["app-config", "appConfig"], dashboardInfo: ["dashboard-info", "dashboardInfo"], isIndicatorDashboard: "isIndicatorDashboard", templateConfig: "templateConfig", bulkActionData: ["bulk_Action_Data", "bulkActionData"] }, outputs: { hideDashboardBanner: "hideDashboardBanner" }, host: { listeners: { "document:scroll": "scroll()" } }, viewQueries: [{ propertyName: "gridWrapper", first: true, predicate: ["gridWrapper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #gridWrapper class=\"wrap gridster gridster-mobile\"\r\n [ngStyle]=\"{'height': userWidgets.length > 0 &&!showDownloadOnlyState && isOnlyWidgets ? (gridheight + 'px') : 'unset'}\">\r\n <!-- <div #gridWrapper class=\"wrap gridster\"> -->\r\n <gridster [options]=\"options\" style=\"height:100%;\" *ngIf=\"userWidgets.length > 0 && !showDownloadOnlyState\">\r\n <gridster-item [item]=\"item\" *ngFor=\"let item of widgetList\">\r\n <ra-widget-container (widgetLoaded)=\"widgetLoaded($event, item)\" [canLoadData]=\"item.canLoadData\" (dataLoaded)=\"dataLoaded($event)\"\r\n [bulk-action-data]=\"bulkActionData\" [dashboard-info]=\"dashboardInfo\" [app-config]=\"appConfig\"\r\n [event-bus]=\"raDashboardEventBus\" (widgetDeleted)=\"deleteWidget($event)\" [data]=\"item\"\r\n [global-filter]=\"globalFilter\" [grid-cell-height]=\"gridcellHeight\" *ngIf=\"gridcellHeight && gridcellHeight > 0\"\r\n [widget-width]=\"item.cols\" [widget-height]=\"item.rows\" [widget-instance-id]=\"item.widgetInstanceId\"\r\n [dom-resized]=\"domResized\" (updateAppliedFilters)=\"updateAppliedFilters($event)\">\r\n </ra-widget-container>\r\n </gridster-item>\r\n </gridster>\r\n\r\n <div class=\"empty-padding kiosk-hide\" *ngIf=\"showEmptyDashboard\">\r\n <div class=\"empty-wrapper\">\r\n <div></div>\r\n <div class=\"empty-prefix\">\r\n <!-- <i class=\"fal fa-edit edit-icon\"></i> -->\r\n <span>{{emptyDashboardTitle}}</span>\r\n </div>\r\n <hr class=\"horizontalLine-solid\" />\r\n <div class=\"empty-content light\">\r\n <div>\r\n <div class=\"col-sm-12 empty-msg\">\r\n {{emptyDashboardMsg1}} <br />\r\n {{emptyDashboardMsg2}}\r\n </div>\r\n <button *ngIf=\"isWidgetMgmnt\" class=\"btn btnLib btn-sm dashboard-button light\" (click)=\"buttonClick()\">\r\n <i class=\"{{emptyDashboardButtonIcon}}\"></i>{{emptyDashboardButtonText}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"empty-padding kiosk-hide\" *ngIf=\"showDownloadOnlyState\">\r\n <div class=\"empty-wrapper\">\r\n <div></div>\r\n <div class=\"empty-prefix\">\r\n <!-- <i class=\"fal fa-edit edit-icon\"></i> -->\r\n <span>{{DownloadOnlyStateTitle}}</span>\r\n </div>\r\n <hr class=\"horizontalLine-solid\" />\r\n <div class=\"empty-content light\">\r\n <div>\r\n <div class=\"col-sm-12 empty-msg\">\r\n {{DownloadOnlyStateMsg1}} <br />\r\n {{DownloadOnlyStateMsg2}}\r\n </div>\r\n <button *ngIf=\"isWidgetMgmnt\" class=\"btn btnLib btn-sm dashboard-button light\" (click)=\"buttonActionClick(DownloadOnlyStateButtonAction1)\">\r\n <i class=\"{{DownloadOnlyStateButtonIcon1}}\"></i>{{DownloadOnlyStateButtonText1}}</button>\r\n <button class=\"btn btnLib btn-sm dashboard-button light button-margin\" (click)=\"buttonActionClick(DownloadOnlyStateButtonAction2)\">\r\n <i class=\"{{DownloadOnlyStateButtonIcon2}}\"></i>{{DownloadOnlyStateButtonText2}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <notifier-container></notifier-container>\r\n</div>\r\n", styles: ["gridster{width:inherit;resize:height;display:flex;background-color:#fff;overflow-y:hidden!important;flex-direction:column}.dvheader{width:100%;height:35px;background:#000;color:#fff;padding:7px 3px 5px 6px;text-transform:uppercase}gridster-item{box-sizing:border-box;z-index:1;position:absolute;overflow:hidden;transition:.3s;display:none;background:#fff;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;box-shadow:none}gridster-item:hover{box-shadow:0 1px 10px #00000026!important}.button-margin{margin-left:10px}@media screen and (max-width: 685px){.gridster-mobile{height:auto!important;margin-bottom:50px!important}}@media screen and (max-width: 350px){.gridster-mobile{min-height:330px!important;margin-bottom:0!important}}.empty-padding{padding:15px 0;background-color:#fff;display:flex}.empty-wrapper{background-color:#fff;border:1px solid #9FA0A4;min-height:125px;width:100%}.empty-prefix{color:#32ad3c;font-size:18px;padding:15px}.empty-content{color:#626469;width:100%;padding:15px}.empty-msg{padding:0 0 15px;font-size:16px}.horizontalLine-solid{border-top:1px solid #cbcbcb;margin:0 15px}.dashboard-button{padding:5px 10px 5px 5px!important}.btnLib{background-color:#ededed;color:#333!important}.btn-sm,.btn-group-sm>.btn{padding:5px 20px 5px 5px}.edit-icon{color:#32ad3c;font-size:24px;margin-right:15px}.empty-title{margin-top:10px}@media screen and (max-width: 600px){.empty-padding{padding:15px 0;background-color:#fff;width:100%;display:block}.empty-wrapper{display:flex;background-color:#fff;border:1px solid #9FA0A4;min-height:125px;width:100%}.empty-prefix{color:#32ad3c;font-size:16px;display:flex;height:40px;padding:15px}.empty-content{color:#333;display:flex;padding:15px}.empty-msg{padding:0 0 15px;font-size:14px}.edit-icon{color:#32ad3c;font-size:20px;margin-right:6px}.empty-title{margin-top:6px}}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i7.GridsterComponent, selector: "gridster", inputs: ["options"] }, { kind: "component", type: i8.GridsterItemComponent, selector: "gridster-item", inputs: ["item"], outputs: ["itemInit", "itemChange", "itemResize"] }, { kind: "component", type: i4.NotifierContainerComponent, selector: "notifier-container" }, { kind: "component", type: i9.RAWidgetContainer, selector: "ra-widget-container", inputs: ["widget-instance-id", "global-filter", "dashboard-info", "data", "event-bus", "app-config", "widget-width", "widget-height", "grid-cell-height", "bulk-action-data", "canLoadData", "dom-resized"], outputs: ["widgetDeleted", "updateAppliedFilters", "dataLoaded", "widgetLoaded"] }] }); }
572
576
  }
573
577
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: RADashboardArea, decorators: [{
574
578
  type: Component,
575
- args: [{ selector: 'ra-dashboard-area', template: "<div #gridWrapper class=\"wrap gridster gridster-mobile\"\r\n [ngStyle]=\"{'height': userWidgets.length > 0 &&!showDownloadOnlyState ? (gridheight + 'px') : 'unset'}\">\r\n <!-- <div #gridWrapper class=\"wrap gridster\"> -->\r\n <gridster [options]=\"options\" style=\"height:100%;\" *ngIf=\"userWidgets.length > 0 && !showDownloadOnlyState\">\r\n <gridster-item [item]=\"item\" *ngFor=\"let item of widgetList\">\r\n <ra-widget-container (widgetLoaded)=\"widgetLoaded($event, item)\" [canLoadData]=\"item.canLoadData\" (dataLoaded)=\"dataLoaded($event)\"\r\n [bulk-action-data]=\"bulkActionData\" [dashboard-info]=\"dashboardInfo\" [app-config]=\"appConfig\"\r\n [event-bus]=\"raDashboardEventBus\" (widgetDeleted)=\"deleteWidget($event)\" [data]=\"item\"\r\n [global-filter]=\"globalFilter\" [grid-cell-height]=\"gridcellHeight\" *ngIf=\"gridcellHeight && gridcellHeight > 0\"\r\n [widget-width]=\"item.cols\" [widget-height]=\"item.rows\" [widget-instance-id]=\"item.widgetInstanceId\"\r\n [dom-resized]=\"domResized\" (updateAppliedFilters)=\"updateAppliedFilters($event)\">\r\n </ra-widget-container>\r\n </gridster-item>\r\n </gridster>\r\n\r\n <div class=\"empty-padding kiosk-hide\" *ngIf=\"showEmptyDashboard\">\r\n <div class=\"empty-wrapper\">\r\n <div></div>\r\n <div class=\"empty-prefix\">\r\n <!-- <i class=\"fal fa-edit edit-icon\"></i> -->\r\n <span>{{emptyDashboardTitle}}</span>\r\n </div>\r\n <hr class=\"horizontalLine-solid\" />\r\n <div class=\"empty-content light\">\r\n <div>\r\n <div class=\"col-sm-12 empty-msg\">\r\n {{emptyDashboardMsg1}} <br />\r\n {{emptyDashboardMsg2}}\r\n </div>\r\n <button *ngIf=\"isWidgetMgmnt\" class=\"btn btnLib btn-sm dashboard-button light\" (click)=\"buttonClick()\">\r\n <i class=\"{{emptyDashboardButtonIcon}}\"></i>{{emptyDashboardButtonText}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"empty-padding kiosk-hide\" *ngIf=\"showDownloadOnlyState\">\r\n <div class=\"empty-wrapper\">\r\n <div></div>\r\n <div class=\"empty-prefix\">\r\n <!-- <i class=\"fal fa-edit edit-icon\"></i> -->\r\n <span>{{DownloadOnlyStateTitle}}</span>\r\n </div>\r\n <hr class=\"horizontalLine-solid\" />\r\n <div class=\"empty-content light\">\r\n <div>\r\n <div class=\"col-sm-12 empty-msg\">\r\n {{DownloadOnlyStateMsg1}} <br />\r\n {{DownloadOnlyStateMsg2}}\r\n </div>\r\n <button *ngIf=\"isWidgetMgmnt\" class=\"btn btnLib btn-sm dashboard-button light\" (click)=\"buttonActionClick(DownloadOnlyStateButtonAction1)\">\r\n <i class=\"{{DownloadOnlyStateButtonIcon1}}\"></i>{{DownloadOnlyStateButtonText1}}</button>\r\n <button class=\"btn btnLib btn-sm dashboard-button light button-margin\" (click)=\"buttonActionClick(DownloadOnlyStateButtonAction2)\">\r\n <i class=\"{{DownloadOnlyStateButtonIcon2}}\"></i>{{DownloadOnlyStateButtonText2}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <notifier-container></notifier-container>\r\n</div>\r\n", styles: ["gridster{width:inherit;resize:height;display:flex;background-color:#fff;overflow-y:hidden!important;flex-direction:column}.dvheader{width:100%;height:35px;background:#000;color:#fff;padding:7px 3px 5px 6px;text-transform:uppercase}gridster-item{box-sizing:border-box;z-index:1;position:absolute;overflow:hidden;transition:.3s;display:none;background:#fff;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;box-shadow:none}gridster-item:hover{box-shadow:0 1px 10px #00000026!important}.button-margin{margin-left:10px}@media screen and (max-width: 685px){.gridster-mobile{height:auto!important;margin-bottom:50px!important}}@media screen and (max-width: 350px){.gridster-mobile{min-height:330px!important;margin-bottom:0!important}}.empty-padding{padding:15px 0;background-color:#fff;display:flex}.empty-wrapper{background-color:#fff;border:1px solid #9FA0A4;min-height:125px;width:100%}.empty-prefix{color:#32ad3c;font-size:18px;padding:15px}.empty-content{color:#626469;width:100%;padding:15px}.empty-msg{padding:0 0 15px;font-size:16px}.horizontalLine-solid{border-top:1px solid #cbcbcb;margin:0 15px}.dashboard-button{padding:5px 10px 5px 5px!important}.btnLib{background-color:#ededed;color:#333!important}.btn-sm,.btn-group-sm>.btn{padding:5px 20px 5px 5px}.edit-icon{color:#32ad3c;font-size:24px;margin-right:15px}.empty-title{margin-top:10px}@media screen and (max-width: 600px){.empty-padding{padding:15px 0;background-color:#fff;width:100%;display:block}.empty-wrapper{display:flex;background-color:#fff;border:1px solid #9FA0A4;min-height:125px;width:100%}.empty-prefix{color:#32ad3c;font-size:16px;display:flex;height:40px;padding:15px}.empty-content{color:#333;display:flex;padding:15px}.empty-msg{padding:0 0 15px;font-size:14px}.edit-icon{color:#32ad3c;font-size:20px;margin-right:6px}.empty-title{margin-top:6px}}\n"] }]
579
+ args: [{ selector: 'ra-dashboard-area', template: "<div #gridWrapper class=\"wrap gridster gridster-mobile\"\r\n [ngStyle]=\"{'height': userWidgets.length > 0 &&!showDownloadOnlyState && isOnlyWidgets ? (gridheight + 'px') : 'unset'}\">\r\n <!-- <div #gridWrapper class=\"wrap gridster\"> -->\r\n <gridster [options]=\"options\" style=\"height:100%;\" *ngIf=\"userWidgets.length > 0 && !showDownloadOnlyState\">\r\n <gridster-item [item]=\"item\" *ngFor=\"let item of widgetList\">\r\n <ra-widget-container (widgetLoaded)=\"widgetLoaded($event, item)\" [canLoadData]=\"item.canLoadData\" (dataLoaded)=\"dataLoaded($event)\"\r\n [bulk-action-data]=\"bulkActionData\" [dashboard-info]=\"dashboardInfo\" [app-config]=\"appConfig\"\r\n [event-bus]=\"raDashboardEventBus\" (widgetDeleted)=\"deleteWidget($event)\" [data]=\"item\"\r\n [global-filter]=\"globalFilter\" [grid-cell-height]=\"gridcellHeight\" *ngIf=\"gridcellHeight && gridcellHeight > 0\"\r\n [widget-width]=\"item.cols\" [widget-height]=\"item.rows\" [widget-instance-id]=\"item.widgetInstanceId\"\r\n [dom-resized]=\"domResized\" (updateAppliedFilters)=\"updateAppliedFilters($event)\">\r\n </ra-widget-container>\r\n </gridster-item>\r\n </gridster>\r\n\r\n <div class=\"empty-padding kiosk-hide\" *ngIf=\"showEmptyDashboard\">\r\n <div class=\"empty-wrapper\">\r\n <div></div>\r\n <div class=\"empty-prefix\">\r\n <!-- <i class=\"fal fa-edit edit-icon\"></i> -->\r\n <span>{{emptyDashboardTitle}}</span>\r\n </div>\r\n <hr class=\"horizontalLine-solid\" />\r\n <div class=\"empty-content light\">\r\n <div>\r\n <div class=\"col-sm-12 empty-msg\">\r\n {{emptyDashboardMsg1}} <br />\r\n {{emptyDashboardMsg2}}\r\n </div>\r\n <button *ngIf=\"isWidgetMgmnt\" class=\"btn btnLib btn-sm dashboard-button light\" (click)=\"buttonClick()\">\r\n <i class=\"{{emptyDashboardButtonIcon}}\"></i>{{emptyDashboardButtonText}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"empty-padding kiosk-hide\" *ngIf=\"showDownloadOnlyState\">\r\n <div class=\"empty-wrapper\">\r\n <div></div>\r\n <div class=\"empty-prefix\">\r\n <!-- <i class=\"fal fa-edit edit-icon\"></i> -->\r\n <span>{{DownloadOnlyStateTitle}}</span>\r\n </div>\r\n <hr class=\"horizontalLine-solid\" />\r\n <div class=\"empty-content light\">\r\n <div>\r\n <div class=\"col-sm-12 empty-msg\">\r\n {{DownloadOnlyStateMsg1}} <br />\r\n {{DownloadOnlyStateMsg2}}\r\n </div>\r\n <button *ngIf=\"isWidgetMgmnt\" class=\"btn btnLib btn-sm dashboard-button light\" (click)=\"buttonActionClick(DownloadOnlyStateButtonAction1)\">\r\n <i class=\"{{DownloadOnlyStateButtonIcon1}}\"></i>{{DownloadOnlyStateButtonText1}}</button>\r\n <button class=\"btn btnLib btn-sm dashboard-button light button-margin\" (click)=\"buttonActionClick(DownloadOnlyStateButtonAction2)\">\r\n <i class=\"{{DownloadOnlyStateButtonIcon2}}\"></i>{{DownloadOnlyStateButtonText2}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <notifier-container></notifier-container>\r\n</div>\r\n", styles: ["gridster{width:inherit;resize:height;display:flex;background-color:#fff;overflow-y:hidden!important;flex-direction:column}.dvheader{width:100%;height:35px;background:#000;color:#fff;padding:7px 3px 5px 6px;text-transform:uppercase}gridster-item{box-sizing:border-box;z-index:1;position:absolute;overflow:hidden;transition:.3s;display:none;background:#fff;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;box-shadow:none}gridster-item:hover{box-shadow:0 1px 10px #00000026!important}.button-margin{margin-left:10px}@media screen and (max-width: 685px){.gridster-mobile{height:auto!important;margin-bottom:50px!important}}@media screen and (max-width: 350px){.gridster-mobile{min-height:330px!important;margin-bottom:0!important}}.empty-padding{padding:15px 0;background-color:#fff;display:flex}.empty-wrapper{background-color:#fff;border:1px solid #9FA0A4;min-height:125px;width:100%}.empty-prefix{color:#32ad3c;font-size:18px;padding:15px}.empty-content{color:#626469;width:100%;padding:15px}.empty-msg{padding:0 0 15px;font-size:16px}.horizontalLine-solid{border-top:1px solid #cbcbcb;margin:0 15px}.dashboard-button{padding:5px 10px 5px 5px!important}.btnLib{background-color:#ededed;color:#333!important}.btn-sm,.btn-group-sm>.btn{padding:5px 20px 5px 5px}.edit-icon{color:#32ad3c;font-size:24px;margin-right:15px}.empty-title{margin-top:10px}@media screen and (max-width: 600px){.empty-padding{padding:15px 0;background-color:#fff;width:100%;display:block}.empty-wrapper{display:flex;background-color:#fff;border:1px solid #9FA0A4;min-height:125px;width:100%}.empty-prefix{color:#32ad3c;font-size:16px;display:flex;height:40px;padding:15px}.empty-content{color:#333;display:flex;padding:15px}.empty-msg{padding:0 0 15px;font-size:14px}.edit-icon{color:#32ad3c;font-size:20px;margin-right:6px}.empty-title{margin-top:6px}}\n"] }]
576
580
  }], ctorParameters: () => [{ type: i1.RaDashboardService }, { type: i0.NgZone }, { type: i2.NgxUiLoaderService }, { type: i3.RATranslateService }, { type: i4.NotifierService }, { type: i0.ChangeDetectorRef }, { type: i5.RADashboardResponsiveService }, { type: i3.RAPermissionService }], propDecorators: { userDashboardId: [{
577
581
  type: Input,
578
582
  args: ['user-dashboard-id']
@@ -620,4 +624,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
620
624
  type: HostListener,
621
625
  args: ['document:scroll']
622
626
  }] } });
623
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZGFzaGJvYXJkLmFyZWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYS1kYXNoYm9hcmQtZnJhbWV3b3JrL3NyYy9saWIvcmEtZGFzaGJvYXJkLWFyZWEvcmEuZGFzaGJvYXJkLmFyZWEudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYS1kYXNoYm9hcmQtZnJhbWV3b3JrL3NyYy9saWIvcmEtZGFzaGJvYXJkLWFyZWEvcmEuZGFzaGJvYXJkLmFyZWEuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBK0MsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUtwTCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7O0FBYzNDLE1BQU0sT0FBTyxlQUFlO0lBMEQxQixZQUFvQixnQkFBb0MsRUFDOUMsTUFBYyxFQUNkLFVBQThCLEVBQzlCLGdCQUFvQyxFQUNwQyxRQUF5QixFQUN6QixHQUFzQixFQUN0QixpQkFBK0MsRUFDL0MsaUJBQXNDO1FBUDVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDOUMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUE4QjtRQUMvQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXFCO1FBL0R6QyxlQUFVLEdBQUcsS0FBSyxFQUFnQixDQUFDO1FBRW5DLGVBQVUsR0FBVyxHQUFHLENBQUM7UUFDekIsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0IsZ0JBQVcsR0FBVSxFQUFF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TTtnQkFFc0MsV0FBVztzQkFBdkQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQWUzQyxNQUFNO3NCQURMLFlBQVk7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXQsIE9uSW5pdCwgQ29tcG9uZW50LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE5nWm9uZSwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBHcmlkc3RlckNvbmZpZywgR3JpZHN0ZXJJdGVtIH0gZnJvbSAnLi4vLi4vZ3JpZHN0ZXIvaW5kZXgnO1xyXG5pbXBvcnQgeyBSYURhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuLi9yYS5kYXNoYm9hcmQuc2VydmljZSc7XHJcbmltcG9ydCB7IFJBRGFzaGJvYXJkRXZlbnRCdXMgfSBmcm9tICcuLi9yYS5kYXNoYmFyZC5ldmVudC5idXMnO1xyXG5pbXBvcnQgeyBSQUV2ZW50IH0gZnJvbSAnLi4vcmEuZXZlbnQuZW51bSc7XHJcbmltcG9ydCB7IElXaWRnZXRJbmZvLCBJQXBwQ29uZmlnLCBJQnVsa0FjdGlvbiB9IGZyb20gJ0BzY2huZWlkZXJlc3Mvd2lkZ2V0ZnJhbWV3b3JrJztcclxuaW1wb3J0IHsgTmd4VWlMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXVpLWxvYWRlcic7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItbm90aWZpZXInO1xyXG5pbXBvcnQgeyBSQVRyYW5zbGF0ZVNlcnZpY2UsIFJBUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICdAc2NobmVpZGVyZXNzL3JhLWNvbW1vbic7XHJcbmltcG9ydCB7IFJBRGFzaGJvYXJkUmVzcG9uc2l2ZVNlcnZpY2UgfSBmcm9tICcuLi9yYS5kYXNoYm9hcmQucmVzcG9uc2l2ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSURhc2hib2FyZEluZm8gfSBmcm9tICdAc2NobmVpZGVyZXNzL3dpZGdldGZyYW1ld29yayc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhLWRhc2hib2FyZC1hcmVhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmEuZGFzaGJvYXJkLmFyZWEuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmEuZGFzaGJvYXJkLmFyZWEuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJBRGFzaGJvYXJkQXJlYSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICBwdWJsaWMgd2lkZ2V0TGlzdCA9IEFycmF5PEdyaWRzdGVySXRlbT4oKTtcclxuICBwdWJsaWMgb3B0aW9ucyE6IEdyaWRzdGVyQ29uZmlnO1xyXG4gIHB1YmxpYyBncmlkaGVpZ2h0OiBudW1iZXIgPSAzMDA7XHJcbiAgcHVibGljIGdyaWRjZWxsSGVpZ2h0OiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyB1c2VyV2lkZ2V0czogYW55W10gPSBbXTtcclxuICBwdWJsaWMgUEFNV2lkZ2V0czogYW55ID0gW107XHJcblxyXG4gIHByaXZhdGUgY29uaWZnQWRkQ2xpY2s6IGFueTtcclxuICBwcml2YXRlIGN1cmF0ZWRGaWx0ZXJDaGFuZ2U6IGFueTtcclxuICBwcml2YXRlIGJ1bGtBY3Rpb25DbGljazogYW55O1xyXG4gIHByaXZhdGUgY2FsY3VsYXRlTGF5b3V0OmFueTtcclxuICBwcml2YXRlIHJlYXJyYW5nZVdpZGdldENsaWNrOiBhbnk7XHJcbiAgcHJpdmF0ZSB3aWRnZXREZWxldGVFdmVudDogYW55O1xyXG4gIHByaXZhdGUgd2lkZ2V0QWRkRXZlbnQ6IGFueTtcclxuICBwcml2YXRlIHdpZGdldExpYnJhcnlEb25lQ2xpY2s6IGFueTtcclxuICBwcml2YXRlIGlzV2lkZ2V0TG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRvbVJlc2l6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0VtcHR5RGFzaGJvYXJkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dEb3dubG9hZE9ubHlTdGF0ZTpib29sZWFuPWZhbHNlO1xyXG4gIHB1YmxpYyBpc1dpZGdldE1nbW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGxhc3RWaWV3VHlwZSE6IHN0cmluZztcclxuICBwdWJsaWMgZW1wdHlEYXNoYm9hcmRUaXRsZTogYW55O1xyXG4gIHB1YmxpYyBlbXB0eURhc2hib2FyZE1zZzE6IGFueTtcclxuICBwdWJsaWMgZW1wdHlEYXNoYm9hcmRNc2cyOiBhbnk7XHJcbiAgcHVibGljIGVtcHR5RGFzaGJvYXJkQnV0dG9uVGV4dDogYW55O1xyXG4gIHB1YmxpYyBlbXB0eURhc2hib2FyZEJ1dHRvbkljb246IGFueTtcclxuICBwdWJsaWMgRG93bmxvYWRPbmx5U3RhdGVUaXRsZTogYW55O1xyXG4gIHB1YmxpYyBEb3dubG9hZE9ubHlTdGF0ZU1zZzE6IGFueTtcclxuICBwdWJsaWMgRG93bmxvYWRPbmx5U3RhdGVNc2cyOiBhbnk7XHJcbiAgcHVibGljIERvd25sb2FkT25seVN0YXRlQnV0dG9uVGV4dDE6IGFueTtcclxuICBwdWJsaWMgRG93bmxvYWRPbmx5U3RhdGVCdXR0b25JY29uMTogYW55O1xyXG4gIHB1YmxpYyBEb3dubG9hZE9ubHlTdGF0ZUJ1dHRvblRleHQyOiBhbnk7XHJcbiAgcHVibGljIERvd25sb2FkT25seVN0YXRlQnV0dG9uSWNvbjI6IGFueTtcclxuICBwdWJsaWMgZW1wdHlEYXNoYm9hcmRCdXR0b25BY3Rpb246IGFueTtcclxuICBwdWJsaWMgRG93bmxvYWRPbmx5U3RhdGVCdXR0b25BY3Rpb24xOiBhbnk7XHJcbiAgcHVibGljIERvd25sb2FkT25seVN0YXRlQnV0dG9uQWN0aW9uMjogYW55O1xyXG4gIHByaXZhdGUgaW5pdGlhbFdpZGdldENvdW50OiBudW1iZXIgPSAxMDtcclxuICBwcml2YXRlIGN1cnJlbnRMb2FkaW5nQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgQElucHV0KCd1c2VyLWRhc2hib2FyZC1pZCcpIHVzZXJEYXNoYm9hcmRJZCE6IG51bWJlcjtcclxuICBASW5wdXQoJ2FyZWEta2V5JykgYXJlYUtleSE6IHN0cmluZztcclxuICBASW5wdXQoJ2Rvd25sb2FkLWRhdGFzdHJlYW0tbGltaXQnKSBkb3dubG9hZERhdGFzdHJlYW1MaW1pdDogYW55PTIwMDtcclxuICBASW5wdXQoJ3JlcG9ydC1kYXRhc3RyZWFtLWxpbWl0JykgcmVwb3J0RGF0YXN0cmVhbUxpbWl0OiBhbnk9NTA7XHJcbiAgQElucHV0KCdnbG9iYWwtZmlsdGVyJykgZ2xvYmFsRmlsdGVyITogYW55O1xyXG4gIEBJbnB1dCgnZXZlbnQtYnVzJykgcmFEYXNoYm9hcmRFdmVudEJ1cyE6IFJBRGFzaGJvYXJkRXZlbnRCdXM7XHJcbiAgQElucHV0KCd3aWRnZXQtaGVpZ2h0Jykgd2lkZ2V0SGVpZ2h0OiBudW1iZXIgPSAyO1xyXG4gIEBJbnB1dCgnd2lkZ2V0LXdpZHRoJykgd2lkZ2V0V2lkdGg6IG51bWJlciA9IDQ7XHJcbiAgQElucHV0KCdhcHAtY29uZmlnJykgYXBwQ29uZmlnITogSUFwcENvbmZpZztcclxuICBASW5wdXQoJ2Rhc2hib2FyZC1pbmZvJykgZGFzaGJvYXJkSW5mbyE6IElEYXNoYm9hcmRJbmZvO1xyXG4gIEBJbnB1dCgnaXNJbmRpY2F0b3JEYXNoYm9hcmQnKSBpc0luZGljYXRvckRhc2hib2FyZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRlbXBsYXRlQ29uZmlnOiBhbnk7XHJcbiAgQElucHV0KCdidWxrX0FjdGlvbl9EYXRhJykgYnVsa0FjdGlvbkRhdGEhOiBJQnVsa0FjdGlvbjtcclxuICBAT3V0cHV0KCkgaGlkZURhc2hib2FyZEJhbm5lciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZ3JpZFdyYXBwZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgZ3JpZFdyYXBwZXIhOiBFbGVtZW50UmVmO1xyXG4gIHByaXZhdGUgc2Nyb2xsVHJpZ2dlcjogYW55O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IFJhRGFzaGJvYXJkU2VydmljZSxcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIG5neFNlcnZpY2U6IE5neFVpTG9hZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogUkFUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZmllcjogTm90aWZpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByZXNwb25zaXZlU2VydmljZTogUkFEYXNoYm9hcmRSZXNwb25zaXZlU2VydmljZSxcclxuICAgIHByaXZhdGUgcGVybWlzc2lvblNlcnZpY2U6IFJBUGVybWlzc2lvblNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OnNjcm9sbCcpXHJcbiAgc2Nyb2xsKCkge1xyXG4gICAgaWYgKHRoaXMuc2Nyb2xsVHJpZ2dlcilcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2Nyb2xsVHJpZ2dlcik7XHJcblxyXG4gICAgdGhpcy5zY3JvbGxUcmlnZ2VyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcclxuICAgIH0sIDUwMCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmlzV2lkZ2V0TWdtbnQgPSB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmhhc1Blcm1pc3Npb24oJ3JhLndpZGdldG1hbmFnZW1lbnQnKTtcclxuICAgIHRoaXMuaW5pdGlhdGVHcmlkc3RlckNvbmZpZygpO1xyXG4gICAgdGhpcy5zZXRFbXB0eURhc2hib2FyZENvbmZpZygpO1xyXG4gICAgdGhpcy5zZXREb3dubG9hZE9ubHlTdGF0ZUNvbmZpZygpO1xyXG4gICAgdGhpcy5sYXN0Vmlld1R5cGUgPSB0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLklzRGVza3RvcFZpZXcgPyAnZGVza3RvcCcgOiAnbW9iaWxlJztcclxuICAgIHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UucmVzaXplZC5zdWJzY3JpYmUoKGlzRGVza3RvcCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5sYXN0Vmlld1R5cGUgIT0gKGlzRGVza3RvcCA/ICdkZXNrdG9wJyA6ICdtb2JpbGUnKSB8fCAhaXNEZXNrdG9wKSB7XHJcbiAgICAgICAgdGhpcy5sYXN0Vmlld1R5cGUgPSAoaXNEZXNrdG9wID8gJ2Rlc2t0b3AnIDogJ21vYmlsZScpO1xyXG4gICAgICAgIHRoaXMud2lkZ2V0TGlzdCA9IFtdO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pbml0aWF0ZUdyaWRzdGVyQ29uZmlnKCk7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXBpIS5vcHRpb25zQ2hhbmdlZCEoKTtcclxuICAgICAgICAgIGlmICh0aGlzLnVzZXJXaWRnZXRzKSB7XHJcbiAgICAgICAgICAgIGxldCB3aWRnZXRzID0gdGhpcy5tYXBPYmplY3RMaXN0VG9Hcmlkc3Rlckl0ZW1MaXN0KHRoaXMudXNlcldpZGdldHMpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMb2FkaW5nQ291bnQgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLndpZGdldExpc3QgPSB3aWRnZXRzO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkV2lkZ2V0cyh0aGlzLnVzZXJEYXNoYm9hcmRJZCwgdGhpcy5hcmVhS2V5KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZG9tUmVzaXplZCA9ICF0aGlzLmRvbVJlc2l6ZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmdyaWRjZWxsSGVpZ2h0ID0gdGhpcy5vcHRpb25zLmFwaSEuZ2V0Q3VycmVudFJvd0hlaWdodCEoKTtcclxuICAgICAgICAgIHRoaXMuZG9tUmVzaXplZCA9ICF0aGlzLmRvbVJlc2l6ZWQ7XHJcbiAgICAgICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5idWxrQWN0aW9uQ2xpY2sgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQuQnVsa0FjdGlvbkNsaWNrKS5zdWJzY3JpYmUoKGRhdGE6IElCdWxrQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgdGhpcy5idWxrQWN0aW9uRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpOyAvLyBUbyBjcmVhdGUgYSBuZXcgcmVmZXJlbmNlO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2FsY3VsYXRlTGF5b3V0ID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LkxheW91dENoYW5nZSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXBpIS5vcHRpb25zQ2hhbmdlZCEoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNXaWRnZXRNZ21udCA9IHRoaXMucGVybWlzc2lvblNlcnZpY2UuaGFzUGVybWlzc2lvbigncmEud2lkZ2V0bWFuYWdlbWVudCcpO1xyXG4gICAgaWYgKHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cyAmJiB0aGlzLmFwcENvbmZpZyAmJiAhdGhpcy5pc1dpZGdldExvYWRlZCkge1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkV2lkZ2V0cyh0aGlzLnVzZXJEYXNoYm9hcmRJZCwgdGhpcy5hcmVhS2V5KTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdGlhdGVHcmlkc3RlckNvbmZpZygpO1xyXG5cclxuICAgIGlmIChjaGFuZ2VzWydyYURhc2hib2FyZEV2ZW50QnVzJ10gJiYgY2hhbmdlc1sncmFEYXNoYm9hcmRFdmVudEJ1cyddLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzWydyYURhc2hib2FyZEV2ZW50QnVzJ10ucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICB0aGlzLmluaXRpdGF0ZUV2ZW50QnVzU3Vic2NyaXRpb25zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcclxuICAgIC8vdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0RW1wdHlEYXNoYm9hcmRDb25maWcoKSB7XHJcbiAgICBpZiAodGhpcy5kYXNoYm9hcmRJbmZvICYmIHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5lbXB0eURhc2hib2FyZEhlYWRlcikge1xyXG4gICAgICB0aGlzLmVtcHR5RGFzaGJvYXJkVGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKFwiZGFzaGJvYXJkLlwiICsgdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmVtcHR5RGFzaGJvYXJkSGVhZGVyLnRpdGxlS2V5KTtcclxuICAgICAgdGhpcy5lbXB0eURhc2hib2FyZE1zZzEgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKFwiZGFzaGJvYXJkLlwiICsgdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmVtcHR5RGFzaGJvYXJkSGVhZGVyLmRlc2NyaXB0aW9uS2V5MSk7XHJcbiAgICAgIHRoaXMuZW1wdHlEYXNoYm9hcmRNc2cyID0gKHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5lbXB0eURhc2hib2FyZEhlYWRlci5kZXNjcmlwdGlvbktleTIpID8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZShcImRhc2hib2FyZC5cIiArIHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5lbXB0eURhc2hib2FyZEhlYWRlci5kZXNjcmlwdGlvbktleTIpIDogJyc7XHJcbiAgICAgIHRoaXMuZW1wdHlEYXNoYm9hcmRCdXR0b25UZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZShcImRhc2hib2FyZC5cIiArIHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5lbXB0eURhc2hib2FyZEhlYWRlci5idXR0b25UZXh0S2V5KTtcclxuICAgICAgdGhpcy5lbXB0eURhc2hib2FyZEJ1dHRvbkljb24gPSB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZW1wdHlEYXNoYm9hcmRIZWFkZXIuYnV0dG9uSWNvbiA/IHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5lbXB0eURhc2hib2FyZEhlYWRlci5idXR0b25JY29uIDogJyc7XHJcbiAgICAgIHRoaXMuZW1wdHlEYXNoYm9hcmRCdXR0b25BY3Rpb24gPSB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZW1wdHlEYXNoYm9hcmRIZWFkZXIuYnV0dG9uQWN0aW9uID8gdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmVtcHR5RGFzaGJvYXJkSGVhZGVyLmJ1dHRvbkFjdGlvbiA6ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgc2V0RG93bmxvYWRPbmx5U3RhdGVDb25maWcoKSB7XHJcbiAgICBpZiAodGhpcy5kYXNoYm9hcmRJbmZvICYmIHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5kb3dubG9hZE9ubHlTdGF0ZUhlYWRlcikge1xyXG4gICAgICB0aGlzLkRvd25sb2FkT25seVN0YXRlVGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKFwiZGFzaGJvYXJkLlwiICsgdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmRvd25sb2FkT25seVN0YXRlSGVhZGVyLnRpdGxlS2V5KTtcclxuICAgICAgdGhpcy5Eb3dubG9hZE9ubHlTdGF0ZU1zZzEgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKFwiZGFzaGJvYXJkLlwiICsgdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmRvd25sb2FkT25seVN0YXRlSGVhZGVyLmRlc2NyaXB0aW9uS2V5MSkucmVwbGFjZSgnezB9Jyx0aGlzLnJlcG9ydERhdGFzdHJlYW1MaW1pdCk7XHJcbiAgICAgIHRoaXMuRG93bmxvYWRPbmx5U3RhdGVNc2cyID0gKHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5kb3dubG9hZE9ubHlTdGF0ZUhlYWRlci5kZXNjcmlwdGlvbktleTIpID8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZShcImRhc2hib2FyZC5cIiArIHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5kb3dubG9hZE9ubHlTdGF0ZUhlYWRlci5kZXNjcmlwdGlvbktleTIpIDogJyc7XHJcbiAgICAgIHRoaXMuRG93bmxvYWRPbmx5U3RhdGVCdXR0b25UZXh0MSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoXCJkYXNoYm9hcmQuXCIgKyB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZG93bmxvYWRPbmx5U3RhdGVIZWFkZXIuYnV0dG9uVGV4dEtleTEpO1xyXG4gICAgICB0aGlzLkRvd25sb2FkT25seVN0YXRlQnV0dG9uVGV4dDIgPSh0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZG93bmxvYWRPbmx5U3RhdGVIZWFkZXIuYnV0dG9uVGV4dEtleTIpID8gIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoXCJkYXNoYm9hcmQuXCIgKyB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZG93bmxvYWRPbmx5U3RhdGVIZWFkZXIuYnV0dG9uVGV4dEtleTIpOicnO1xyXG4gICAgICB0aGlzLkRvd25sb2FkT25seVN0YXRlQnV0dG9uSWNvbjEgPSB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZG93bmxvYWRPbmx5U3RhdGVIZWFkZXIuYnV0dG9uSWNvbjEgPyB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZG93bmxvYWRPbmx5U3RhdGVIZWFkZXIuYnV0dG9uSWNvbjEgOiAnJztcclxuICAgICAgdGhpcy5Eb3dubG9hZE9ubHlTdGF0ZUJ1dHRvbkljb24yID0gdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmRvd25sb2FkT25seVN0YXRlSGVhZGVyLmJ1dHRvbkljb24yID8gdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmRvd25sb2FkT25seVN0YXRlSGVhZGVyLmJ1dHRvbkljb24yIDogJyc7XHJcbiAgICAgIHRoaXMuRG93bmxvYWRPbmx5U3RhdGVCdXR0b25BY3Rpb24xID0gdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmRvd25sb2FkT25seVN0YXRlSGVhZGVyLmJ1dHRvbkFjdGlvbjEgPyB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZG93bmxvYWRPbmx5U3RhdGVIZWFkZXIuYnV0dG9uQWN0aW9uMTogJyc7XHJcbiAgICAgIHRoaXMuRG93bmxvYWRPbmx5U3RhdGVCdXR0b25BY3Rpb24yID0gdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmRvd25sb2FkT25seVN0YXRlSGVhZGVyLmJ1dHRvbkFjdGlvbjIgPyB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZG93bmxvYWRPbmx5U3RhdGVIZWFkZXIuYnV0dG9uQWN0aW9uMiA6ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipUbyBzZXQgR3JpZHN0ZXJDb25maWcgKi9cclxuICBwdWJsaWMgaW5pdGlhdGVHcmlkc3RlckNvbmZpZygpIHtcclxuICAgIGlmICh0aGlzLmRhc2hib2FyZEluZm8pIHtcclxuICAgICAgLyoqVG8gb3ZlcnJpZGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHZhbHVlcyB0byB0aGUgZ3JpZHN0ZXIgY29udHJvbCAqL1xyXG4gICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLmdldEdyaWRzdGVyQ29uZmlnKHRoaXMuaXNXaWRnZXRNZ21udCxcclxuICAgICAgICB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcud2lkZ2V0LmNhblJlc2l6ZSwgdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLndpZGdldC5jYW5Nb3ZlKTtcclxuICAgICAgdGhpcy5vcHRpb25zLmluaXRDYWxsYmFjayA9IChncmlkc3RlcjogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcclxuICAgICAgICAgIHRoaXMuZ3JpZGNlbGxIZWlnaHQgPSB0aGlzLm9wdGlvbnMuYXBpLmdldEN1cnJlbnRSb3dIZWlnaHQhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaXRlbUNoYW5nZUNhbGxiYWNrID0gKGl0ZW06IEdyaWRzdGVySXRlbSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLklzRGVza3RvcFZpZXcpIHtcclxuICAgICAgICAgIGlmIChpdGVtLndpZGdldEluZm8gJiYgaXRlbS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVXaWRnZXRQb3NpdGlvbihpdGVtLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHdpZGdldExvYWRlZCh3aWRnZXRFbGVtZW50OiBhbnksIHdpZGdldDogYW55KSB7XHJcbiAgICB3aWRnZXQud2lkZ2V0RWxlbWVudCA9IHdpZGdldEVsZW1lbnQ7XHJcbiAgICBsZXQgaXRlbXMgPSB0aGlzLndpZGdldExpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkID09IHdpZGdldC53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpXHJcbiAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmxvYWREYXRhKGl0ZW1zWzBdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZERhdGEoaXRlbT86IGFueSkge1xyXG4gICAgbGV0IGl0ZW1zID0gW107XHJcbiAgICBsZXQgdG90YWxMb2FkZWRDb3VudCA9IHRoaXMud2lkZ2V0TGlzdC5maWx0ZXIoKHcgPT4gdy5jYW5Mb2FkRGF0YSkpLmxlbmd0aDtcclxuICAgIGlmICghaXRlbSlcclxuICAgICAgaXRlbXMgPSB0aGlzLndpZGdldExpc3QuZmlsdGVyKCh3ID0+ICF3LmNhbkxvYWREYXRhKSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmluaXRpYWxXaWRnZXRDb3VudCA9PT0gdGhpcy5jdXJyZW50TG9hZGluZ0NvdW50ID8gdGhpcy5jaGFuZ2VJbml0aWFsV2lkZ2V0Q291bnQoKTpudWxsO1xyXG4gICAgICBpZiAodGhpcy5pbml0aWFsV2lkZ2V0Q291bnQgPiB0aGlzLmN1cnJlbnRMb2FkaW5nQ291bnQpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pc0VsZW1lbnRMb2FkZWQoaXRlbXNbaV0ud2lkZ2V0RWxlbWVudCkgfHxcclxuICAgICAgICAgICAgKHRvdGFsTG9hZGVkQ291bnQgPD0gdGhpcy5pbml0aWFsV2lkZ2V0Q291bnQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExvYWRpbmdDb3VudCsrO1xyXG4gICAgICAgICAgICBpdGVtc1tpXS5jYW5Mb2FkRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRvdGFsTG9hZGVkQ291bnQgPSB0aGlzLndpZGdldExpc3QuZmlsdGVyKCh3ID0+IHcuY2FuTG9hZERhdGEpKS5sZW5ndGg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VJbml0aWFsV2lkZ2V0Q291bnQoKXtcclxuICAgIHRoaXMuaXNFbGVtZW50TG9hZGVkKHRoaXMud2lkZ2V0TGlzdFt0aGlzLmN1cnJlbnRMb2FkaW5nQ291bnRdLndpZGdldEVsZW1lbnQpPyBcclxuICAgIHRoaXMuaW5pdGlhbFdpZGdldENvdW50KysgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRhdGFMb2FkZWQod2lkZ2V0SW5mbzogYW55KSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5jdXJyZW50TG9hZGluZ0NvdW50LS07XHJcbiAgICB9LCAxMDApO1xyXG4gICAgLy8gdGhpcy5sb2FkRGF0YSgpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRWxlbWVudExvYWRlZChlbDogYW55KSB7XHJcbiAgICBpZiAoZWwpIHtcclxuICAgICAgbGV0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgcmV0dXJuIHJlY3QgJiYgcmVjdC50b3AgPCB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRXaWRnZXRXcmFwcGVycyhpc0luaXRpYWxMb2FkOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgbGV0IHdpZGdldHM6IEdyaWRzdGVySXRlbVtdID0gdGhpcy5tYXBPYmplY3RMaXN0VG9Hcmlkc3Rlckl0ZW1MaXN0KHRoaXMudXNlcldpZGdldHMpO1xyXG5cclxuICAgIHRoaXMud2lkZ2V0TGlzdC5wdXNoKC4uLndpZGdldHMpO1xyXG4gICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gaW5pdGlhdGUgZXZlbnRidXMgc3Vic2N0aXB0aW9ucyAqL1xyXG4gIGluaXRpdGF0ZUV2ZW50QnVzU3Vic2NyaXRpb25zKCkge1xyXG4gICAgdGhpcy53aWRnZXREZWxldGVFdmVudCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5XaWRnZXREZWxldGUpLnN1YnNjcmliZSgoaW5zdGFuY2VJZCkgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGVsZXRlV2lkZ2V0KGluc3RhbmNlSWQsIHRydWUpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMud2lkZ2V0QWRkRXZlbnQgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQuQWRkV2lkZ2V0KS5zdWJzY3JpYmUoKHdpZGdldEluZm8pID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNvcHlXaWRnZXQod2lkZ2V0SW5mbyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb25pZmdBZGRDbGljayA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5Db25maWdBZGRDbGljaykuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hZGRXaWRnZXQoZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jdXJhdGVkRmlsdGVyQ2hhbmdlID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LkN1cmF0ZWRGaWx0ZXJDaGFuZ2UpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZFdpZGdldHModGhpcy51c2VyRGFzaGJvYXJkSWQsIHRoaXMuYXJlYUtleSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yZWFycmFuZ2VXaWRnZXRDbGljayA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5SZWFycmFuZ2VDbGlja2VkKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlYXJyYW5nZVdpZGdldHMoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLndpZGdldExpYnJhcnlEb25lQ2xpY2sgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQud2lkZ2V0TGlicmFyeURvbmVDbGljaykuc3Vic2NyaWJlKCh3aWRnZXRMaXN0KSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgaWYgKHdpZGdldExpc3QpIHtcclxuICAgICAgICAgIHRoaXMuYWRkV2lkZ2V0TGlzdFRvR3JpZHN0ZXIod2lkZ2V0TGlzdCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdGVtcCBmaXgtIHJlY3Vyc2l2ZSBtZXRob2QgdG8gaXRlcmF0ZSBvdmVyIHRoZSBsaXN0IG9mIGl0ZW1zXHJcbiAgICogYW5kIGFkZCB0aGVtIHRvIGdyaWRzdGVyIGluIHRoZSBnaXZlbiBvcmRlclxyXG4gICAqIEBwYXJhbSB3aWRnZXRMaXN0ICAtbGlzdCBvZiB3aWRnZXRzXHJcbiAgICogQHBhcmFtIGluZGV4IC1pbmRleCBvZiB0aGUgY3VycmVudCB2YWx1ZSB0byBiZSBhZGRlZFxyXG4gICAqL1xyXG4gIGFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3Q6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgbGV0IGFyZWFDb250ZXh0ID0gdGhpcztcclxuICAgIGxldCBpbmRleFZhbCA9IGluZGV4ICsgMTtcclxuICAgIGlmIChpbmRleCA+IHdpZGdldExpc3QubGVuZ3RoIC0gMSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChpbmRleCA9PSAwKSB7XHJcbiAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0KHdpZGdldExpc3RbaW5kZXhdKTtcclxuICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0LCBpbmRleFZhbCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXQod2lkZ2V0TGlzdFtpbmRleF0pO1xyXG4gICAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0TGlzdFRvR3JpZHN0ZXIod2lkZ2V0TGlzdCwgaW5kZXhWYWwpO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmlmZ0FkZENsaWNrKVxyXG4gICAgICB0aGlzLmNvbmlmZ0FkZENsaWNrLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkZ2V0QWRkRXZlbnQpXHJcbiAgICAgIHRoaXMud2lkZ2V0QWRkRXZlbnQudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXREZWxldGVFdmVudClcclxuICAgICAgdGhpcy53aWRnZXREZWxldGVFdmVudC51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLndpZGdldExpYnJhcnlEb25lQ2xpY2spXHJcbiAgICAgIHRoaXMud2lkZ2V0TGlicmFyeURvbmVDbGljay51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLnJlYXJyYW5nZVdpZGdldENsaWNrKVxyXG4gICAgICB0aGlzLnJlYXJyYW5nZVdpZGdldENsaWNrLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY3VyYXRlZEZpbHRlckNoYW5nZSlcclxuICAgICAgdGhpcy5jdXJhdGVkRmlsdGVyQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuYnVsa0FjdGlvbkNsaWNrKVxyXG4gICAgICB0aGlzLmJ1bGtBY3Rpb25DbGljay51bnN1YnNjcmliZSgpO1xyXG4gICAgaWYgKHRoaXMuY2FsY3VsYXRlTGF5b3V0KVxyXG4gICAgICB0aGlzLmNhbGN1bGF0ZUxheW91dC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqVG8gdXBkYXRlIHBvc2l0aW9uL2RpbWVudGlvbiBvZiBhbGwgd2lkZ2V0cyBpbiB0aGUgYXJlYSAqL1xyXG4gIHVwZGF0ZVdpZGdldHMoKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UudXBkYXRlV2lkZ2V0cyh0aGlzLmZvcm1hdFdpZGdldERhdGFGb3JQb3NpdGlvbkRldGFpbHModGhpcy5tYXBHcmlkc3Rlckxpc3RUb09iamVjdCh0aGlzLndpZGdldExpc3QpKSxcclxuICAgICAgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXRzID0+IHtcclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlRvIHVwZGF0ZSB3aWRnZXQgZGltZW5zaW9ucyAqL1xyXG4gIHVwZGF0ZVdpZGdldFBvc2l0aW9uKHdpZGdldEluc3RhbmNlSWQ6IG51bWJlcikge1xyXG5cclxuICAgIGxldCB3aWRnZXRGaWx0ZXJlZExpc3QgPSBbXTtcclxuICAgIGxldCB3aWRnZXQgPSB0aGlzLndpZGdldExpc3QuZmlsdGVyKGZpbHRlcmVkID0+IGZpbHRlcmVkLndpZGdldEluZm8gJiYgZmlsdGVyZWQud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkID09IHdpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgaWYgKHdpZGdldCAmJiB3aWRnZXQubGVuZ3RoID4gMCkge1xyXG4gICAgICB3aWRnZXRGaWx0ZXJlZExpc3QucHVzaCh3aWRnZXRbMF0pO1xyXG4gICAgICBsZXQgd2lkZ2V0TGlzdCA9IHRoaXMubWFwR3JpZHN0ZXJMaXN0VG9PYmplY3Qod2lkZ2V0RmlsdGVyZWRMaXN0KTtcclxuICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZVdpZGdldHModGhpcy5mb3JtYXRXaWRnZXREYXRhRm9yUG9zaXRpb25EZXRhaWxzKHdpZGdldExpc3QpLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldHMgPT4ge1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqVG8gcmVzdHJpY3QgcmVxdWVzdCBwYXlsb2FkIHRvIGJlIG9mIG1pbiBzaXplIChwb3NpdGlvbiAmIHNpemUgZGV0YWlscykgKi9cclxuICBmb3JtYXRXaWRnZXREYXRhRm9yUG9zaXRpb25EZXRhaWxzKHdpZGdldEl0ZW1MaXN0OiBJV2lkZ2V0SW5mb1tdKSB7XHJcbiAgICBsZXQgaXRlbUxpc3Q6IGFueSA9IFtdO1xyXG4gICAgd2lkZ2V0SXRlbUxpc3QuZm9yRWFjaChmdW5jdGlvbiAod2lkZ2V0SXRlbSkge1xyXG4gICAgICBsZXQgaXRlbSA9IHt9IGFzIElXaWRnZXRJbmZvO1xyXG4gICAgICBpdGVtLndpZGdldEluc3RhbmNlSWQgPSB3aWRnZXRJdGVtLndpZGdldEluc3RhbmNlSWQ7XHJcbiAgICAgIGl0ZW0ucG9zaXRpb25feCA9IHdpZGdldEl0ZW0ucG9zaXRpb25feDtcclxuICAgICAgaXRlbS5wb3NpdGlvbl95ID0gd2lkZ2V0SXRlbS5wb3NpdGlvbl95O1xyXG4gICAgICBpdGVtLndpZHRoID0gd2lkZ2V0SXRlbS53aWR0aDtcclxuICAgICAgaXRlbS5oZWlnaHQgPSB3aWRnZXRJdGVtLmhlaWdodDtcclxuICAgICAgaXRlbUxpc3QucHVzaChpdGVtKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGl0ZW1MaXN0O1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIHJldHJpZXZlIHdpZGdldHMgYmFzZWQgb24gdXNlckRhc2hib2FyZGlkIGFuZCBhcmVhIG5hbWUgKi9cclxuICBsb2FkV2lkZ2V0cyh1c2VyRGFzaGJvYXJJZDogbnVtYmVyLCBhcmVhS2V5OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLnRlbXBsYXRlQ29uZmlnICYmIHRoaXMudGVtcGxhdGVDb25maWcuaW5pdGlhbFdpZGdldENvdW50KVxyXG4gICAgICB0aGlzLmluaXRpYWxXaWRnZXRDb3VudCA9IHRoaXMudGVtcGxhdGVDb25maWcuaW5pdGlhbFdpZGdldENvdW50O1xyXG4gICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xyXG4gICAgaWYgKGxvY2F0aW9uLmhyZWYuaW5kZXhPZignL2tpb3NrLycpID4gLTEpXHJcbiAgICAgIHRoaXMuaW5pdGlhbFdpZGdldENvdW50ID0gMTAwMDtcclxuXHJcbiAgICBsZXQgd2lkZ2V0SW5mbyA9IDxJV2lkZ2V0SW5mbz57XHJcbiAgICAgIGRhc2hib2FyZElkOiB1c2VyRGFzaGJvYXJJZC50b1N0cmluZygpLFxyXG4gICAgICBkYXNoYm9hcmRBcmVhS2V5OiBhcmVhS2V5LFxyXG4gICAgICBpc0luZGljYXRvckRhc2hib2FyZDogdGhpcy5pc0luZGljYXRvckRhc2hib2FyZFxyXG4gICAgfVxyXG4gICBcclxuICAgIGxldCBfdGhlID0gdGhpcztcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRXaWRnZXRzQnlEYXNoYm9hcmRBcmVhKHdpZGdldEluZm8sIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0cyA9PiB7XHJcbiAgICAgIF90aGUud2lkZ2V0TGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnVzZXJXaWRnZXRzID0gd2lkZ2V0cztcclxuICAgICAgdGhpcy5QQU1XaWRnZXRzID0gW107XHJcbiAgICAgIHdpZGdldHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgdmFyIHNldHRpbmdzOiBhbnkgPSB1bmRlZmluZWRcclxuICAgICAgICBpZiAoZWxlbWVudC53aWRnZXRTZXR0aW5ncykge1xyXG4gICAgICAgICAgc2V0dGluZ3MgPSBKU09OLnBhcnNlKGVsZW1lbnQud2lkZ2V0U2V0dGluZ3MpO1xyXG4gICAgICAgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLmlzUEFNV2lkZ2V0KVxyXG4gICAgICAgICAgICB0aGlzLlBBTVdpZGdldHMucHVzaChlbGVtZW50LndpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY2hlY2tQQU1XaWRnZXRzKCk7XHJcbiAgICAgIGlmKCB0aGlzLmRhc2hib2FyZEluZm8/LmlzUmVwb3J0ICYmIHdpZGdldHMgJiYgd2lkZ2V0cy5sZW5ndGg+IHRoaXMucmVwb3J0RGF0YXN0cmVhbUxpbWl0KXtcclxuICAgICAgICB0aGlzLnNob3dEb3dubG9hZE9ubHlTdGF0ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5Eb3dubG9hZE9ubHlTdGF0ZSwgdGhpcy5zaG93RG93bmxvYWRPbmx5U3RhdGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHdpZGdldHMgJiYgd2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RG93bmxvYWRPbmx5U3RhdGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuY2xpZW50SWQgPSB3aWRnZXRzWzBdLmNsaWVudElkO1xyXG4gICAgICAgIHRoaXMubG9hZFdpZGdldFdyYXBwZXJzKCk7XHJcbiAgICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5IaWRlRGFzaGJvYXJkQmFubmVyLCBmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zaG93RG93bmxvYWRPbmx5U3RhdGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dFbXB0eURhc2hib2FyZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5IaWRlRGFzaGJvYXJkQmFubmVyLCB0aGlzLnNob3dFbXB0eURhc2hib2FyZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIHNldCBBcmVhKEdyaWRzdGVyKSBoZWlnaHQgZHluYW1pY2FsbHkgYXMgd2lkZ2V0cyBhcmUgYWRkZWQvcmVtb3ZlZCAqL1xyXG4gIHNldEFyZWFIZWlnaHQoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgbGV0IGlzTW9iaWxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubW9iaWxlQnJlYWtwb2ludCEgPiB0aGlzLmdyaWRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgpIHtcclxuICAgICAgICBpc01vYmlsZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGFyZWFTY3JvbGxIZWlnaHQgPSAwO1xyXG4gICAgICBsZXQgYXJlYUhlaWdodCA9IDA7XHJcbiAgICAgIGxldCBjdXJSb3dIZWlnaHQgPSAwO1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xyXG4gICAgICAgIGN1clJvd0hlaWdodCA9IHRoaXMub3B0aW9ucy5hcGkuZ2V0Q3VycmVudFJvd0hlaWdodCEoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zaG93RW1wdHlEYXNoYm9hcmQgPSB0aGlzLnVzZXJXaWRnZXRzLmxlbmd0aCA+IDAgPyBmYWxzZSA6IHRydWU7XHJcblxyXG4gICAgICB0aGlzLndpZGdldExpc3QuZm9yRWFjaCgodCkgPT4ge1xyXG4gICAgICAgIGxldCBjdXJyZW50SGVpZ2h0ID0gdC55ISArIHQucm93cztcclxuICAgICAgICBpZiAoY3VycmVudEhlaWdodCA+IGFyZWFTY3JvbGxIZWlnaHQpIHtcclxuICAgICAgICAgIGFyZWFTY3JvbGxIZWlnaHQgPSBjdXJyZW50SGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY3VyUm93SGVpZ2h0ID09IDApIHtcclxuICAgICAgICAgIGN1cnJlbnRIZWlnaHQgPSB0aGlzLndpZGdldExpc3RbMF0uY3VyUm93SGVpZ2h0ITtcclxuICAgICAgICB9XHJcbiAgICAgICAgdC53aWRnZXRJbmZvLnJvd0hlaWdodCA9IGN1clJvd0hlaWdodDtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZ3JpZGNlbGxIZWlnaHQgPSBjdXJSb3dIZWlnaHQ7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XHJcbiAgICAgICAgYXJlYUhlaWdodCA9IGFyZWFTY3JvbGxIZWlnaHQgKiB0aGlzLm9wdGlvbnMuYXBpLmdldEN1cnJlbnRSb3dIZWlnaHQhKCkgKyAxMDA7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGFyZWFTY3JvbGxIZWlnaHRNb2IgPSAwO1xyXG4gICAgICBpZiAoaXNNb2JpbGUpIHtcclxuICAgICAgICBhcmVhU2Nyb2xsSGVpZ2h0TW9iID0gdGhpcy53aWRnZXRMaXN0Lmxlbmd0aCAqIDMwMCArIDIwMDtcclxuICAgICAgICBhcmVhSGVpZ2h0ID0gYXJlYVNjcm9sbEhlaWdodE1vYjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYXJlYUhlaWdodCA8IDYwMCkge1xyXG4gICAgICAgIGFyZWFIZWlnaHQgPSA2MDA7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5ncmlkaGVpZ2h0ID0gYXJlYUhlaWdodDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIHJlbW92ZSBhIHdpZGdldCBpbnN0YW5jZSBmcm9tIGRhc2hib2FyZCBhbmQgdG8gc2F2ZSBpbmZvIGluIGRhdGFiYXNlICovXHJcbiAgZGVsZXRlV2lkZ2V0KHdpZGdldEluc3RhbmNlSWQ6IGFueSwgaXNhbGVydERpc2FibGVkOiBib29sZWFuID0gZmFsc2UpIHtcclxuXHJcbiAgICBsZXQgd2lkZ2V0ID0gdGhpcy51c2VyV2lkZ2V0cy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW0ud2lkZ2V0SW5zdGFuY2VJZCA9PT0gd2lkZ2V0SW5zdGFuY2VJZDtcclxuICAgIH0pO1xyXG4gICAgaWYgKHdpZGdldC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudXNlcldpZGdldHMuc3BsaWNlKHRoaXMudXNlcldpZGdldHMuaW5kZXhPZih3aWRnZXRbMF0pLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5QQU1XaWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdmFyIGluZHggPSB0aGlzLlBBTVdpZGdldHMuaW5kZXhPZih3aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgaWYgKGluZHggPiAtMSlcclxuICAgICAgICB0aGlzLlBBTVdpZGdldHMuc3BsaWNlKGluZHgsIDEpO1xyXG4gICAgICB0aGlzLmNoZWNrUEFNV2lkZ2V0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBncmlkc3Rlckl0ZW0gPSB0aGlzLndpZGdldExpc3QuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgIHJldHVybiBpdGVtLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCA9PT0gd2lkZ2V0SW5zdGFuY2VJZDtcclxuICAgIH0pO1xyXG4gICAgaWYgKGdyaWRzdGVySXRlbS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0TGlzdC5zcGxpY2UodGhpcy53aWRnZXRMaXN0LmluZGV4T2YoZ3JpZHN0ZXJJdGVtWzBdKSwgMSk7XHJcbiAgICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG4gICAgICBpZiAoIWlzYWxlcnREaXNhYmxlZCkge1xyXG4gICAgICAgIHRoaXMubm90aWZpZXIubm90aWZ5KCdzdWNjZXNzJywgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uV2lkZ2V0dGV4dCcpICsgXCIgXCIgKyBncmlkc3Rlckl0ZW1bMF0ud2lkZ2V0SW5mby53aWRnZXRUaXRsZSArIFwiIFwiICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZWRTdWNjZXNmdWxseScpICsgXCIgXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dFbXB0eURhc2hib2FyZCA9IHRoaXMudXNlcldpZGdldHMubGVuZ3RoID4gMCA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIGlmICh0aGlzLnNob3dFbXB0eURhc2hib2FyZCA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuSGlkZURhc2hib2FyZEJhbm5lciwgdGhpcy5zaG93RW1wdHlEYXNoYm9hcmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqVG8gcmVhcnJhbmdlIHdpZGdldHMgcG9zaXRpb24gaW4gdGhlIGRhc2hib2FyZCwgY29tcGFjdExlZnQmVXAsY29tcGFjdExlZnQsY29tcGFjdFVwLGV0YyovXHJcbiAgcmVhcnJhbmdlV2lkZ2V0cygpIHtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudXNlcldpZGdldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy51c2VyV2lkZ2V0c1tpXS5wb3NpdGlvbl94ID0gMDtcclxuICAgICAgdGhpcy51c2VyV2lkZ2V0c1tpXS5wb3NpdGlvbl95ID0gMDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLndpZGdldExpc3QgPSBbXTtcclxuICAgIHRoaXMubG9hZFdpZGdldFdyYXBwZXJzKCk7XHJcbiAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LkhpZGVEYXNoYm9hcmRCYW5uZXIsIGZhbHNlKTtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXRMaXN0Lmxlbmd0aCA+IDApXHJcbiAgICAgIHRoaXMudXBkYXRlV2lkZ2V0UG9zaXRpb24odGhpcy53aWRnZXRMaXN0WzBdLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipUbyBhZGQgd2lkZ2V0IGluc3RhbmNlIHRvIHRoZSBkYXRhYmFzZSB3aXRoIHRoZSBuZXh0IGF2YWlsYWJsZSBwb3NpdGlvbiBhbmQgdG8gbWFrZSBjaGFuZ2VzIGluXHJcbiAgICogZGFzaGJvYXJkIGFyZWEuXHJcbiAgICovXHJcbiAgYWRkV2lkZ2V0KGRhdGE6IGFueSkge1xyXG4gICAgZGF0YS5oZWlnaHQgPSB0aGlzLndpZGdldEhlaWdodDtcclxuICAgIGRhdGEud2lkdGggPSB0aGlzLndpZGdldFdpZHRoO1xyXG4gICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5IaWRlRGFzaGJvYXJkQmFubmVyLCBmYWxzZSk7XHJcbiAgICBpZiAoZGF0YS53aWRnZXRTZXR0aW5ncykge1xyXG4gICAgICBpZiAodHlwZW9mIGRhdGEud2lkZ2V0U2V0dGluZ3MgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIGRhdGEud2lkZ2V0U2V0dGluZ3MgPSBKU09OLnBhcnNlKGRhdGEud2lkZ2V0U2V0dGluZ3MpO1xyXG5cclxuICAgICAgaWYgKGRhdGEud2lkZ2V0U2V0dGluZ3MuZGVmYXVsdENvbHMpIHtcclxuICAgICAgICBkYXRhLndpZHRoID0gZGF0YS53aWRnZXRTZXR0aW5ncy5kZWZhdWx0Q29scztcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGF0YS53aWRnZXRTZXR0aW5ncy5kZWZhdWx0Um93cykge1xyXG4gICAgICAgIGRhdGEuaGVpZ2h0ID0gZGF0YS53aWRnZXRTZXR0aW5ncy5kZWZhdWx0Um93cztcclxuICAgICAgfVxyXG4gICAgICBkYXRhLndpZGdldFNldHRpbmdzID0gbnVsbDtcclxuICAgIH1cclxuICAgIGRhdGEgPSB0aGlzLnNldFBvc2l0aW9ucyhkYXRhKTtcclxuXHJcbiAgICAvKiogdG8gZmluZCB0aGUgYXZhaWxhYmxlIHBvc2l0aW9uIGluIGdyaWRzdGVyLCB0ZW1wIGNvbW1lbnRpbmcgdGhlIGNvZGUtcmV0dXJuaW5nIGhpZ2hlciB5IHZhbHVlIHRoYW4gbm9ybWFsICovXHJcbiAgICBkYXRhLmRhc2hib2FyZEFyZWFLZXkgPSB0aGlzLmFyZWFLZXk7XHJcbiAgICBkYXRhLmRhc2hib2FyZElkID0gdGhpcy51c2VyRGFzaGJvYXJkSWQ7XHJcbiAgICB0aGlzLm5neFNlcnZpY2Uuc3RhcnQoKTtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5hZGRXaWRnZXQoZGF0YSwgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXQgPT4ge1xyXG4gICAgICB0aGlzLnVzZXJXaWRnZXRzLnB1c2god2lkZ2V0KTtcclxuICAgICAgbGV0IGdyaWRzdGVySXRlbSA9IHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UuZ2V0R3JpZHN0ZXJJdGVtKHdpZGdldCk7XHJcbiAgICAgIHRoaXMud2lkZ2V0TGlzdC5wdXNoKGdyaWRzdGVySXRlbSk7XHJcbiAgICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcclxuICAgICAgICBsZXQgY3VyUm93SGVpZ2h0OiBudW1iZXIgPSBOdW1iZXIodGhpcy5vcHRpb25zLmFwaS5nZXRDdXJyZW50Um93SGVpZ2h0ISgpKTtcclxuICAgICAgICBpZiAoY3VyUm93SGVpZ2h0ID4gMCkge1xyXG4gICAgICAgICAgd2lkZ2V0LnJvd0hlaWdodCA9IGN1clJvd0hlaWdodDtcclxuICAgICAgICAgIHRoaXMuZ3JpZGNlbGxIZWlnaHQgPSBjdXJSb3dIZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHZhciB3aWRnZXRJbnN0YW5jZUlkID0gMDtcclxuICAgICAgaWYgKHdpZGdldCAmJiB3aWRnZXQud2lkZ2V0SW5zdGFuY2VJZCkge1xyXG4gICAgICAgIHdpZGdldEluc3RhbmNlSWQgPSB3aWRnZXQud2lkZ2V0SW5zdGFuY2VJZDtcclxuICAgICAgICAvKipUbyBzYXZlIGFkZGVkIHdpZGdldCBwb3NpdGlvbiBpbiBkYiAqL1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLklzRGVza3RvcFZpZXcpIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVdpZGdldFBvc2l0aW9uKHdpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh3aWRnZXQuc2V0dGluZ3MgJiYgd2lkZ2V0LnNldHRpbmdzLmlzUEFNV2lkZ2V0KSB7XHJcbiAgICAgICAgdGhpcy5QQU1XaWRnZXRzLnB1c2god2lkZ2V0LndpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tQQU1XaWRnZXRzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0QWRkZWQsIHdpZGdldCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UG9zaXRpb25zKGRhdGE6IGFueSkge1xyXG4gICAgZGF0YS5wb3NpdGlvbl94ID0gMDtcclxuICAgIGRhdGEucG9zaXRpb25feSA9IDA7XHJcbiAgICBpZiAoIXRoaXMucmVzcG9uc2l2ZVNlcnZpY2UuSXNEZXNrdG9wVmlldykge1xyXG4gICAgICBpZiAodGhpcy51c2VyV2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgbGV0IHdpZGdldCA9IHRoaXMudXNlcldpZGdldHNbdGhpcy51c2VyV2lkZ2V0cy5sZW5ndGggLSAxXTtcclxuICAgICAgICBpZiAod2lkZ2V0LnBvc2l0aW9uX3ggKyB3aWRnZXQud2lkdGggPiAodGhpcy5yZXNwb25zaXZlU2VydmljZS5tYXhDb2xzRGVza3RvcCAvIDIpKSB7XHJcbiAgICAgICAgICBkYXRhLnBvc2l0aW9uX3kgPSB3aWRnZXQucG9zaXRpb25feSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZGF0YS5wb3NpdGlvbl95ID0gd2lkZ2V0LnBvc2l0aW9uX3k7XHJcbiAgICAgICAgICBkYXRhLnBvc2l0aW9uX3ggPSB0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLm1heENvbHNEZXNrdG9wIC0gKHdpZGdldC5wb3NpdGlvbl94ICsgd2lkZ2V0LndpZHRoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIGFkZCB3aWRnZXQgdG8gY3VycmVudCB3aWRnZXQgbGlzdCAsaW52b2tlZCBmcm9tIGNvcHkgd2lkZ2V0IHdpbmRvdyovXHJcbiAgY29weVdpZGdldChkYXRhOiBhbnkpIHtcclxuICAgIGRhdGEgPSB0aGlzLnNldFBvc2l0aW9ucyhkYXRhKTtcclxuICAgIGlmICghdGhpcy5yZXNwb25zaXZlU2VydmljZS5Jc0Rlc2t0b3BWaWV3KSB7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS51cGRhdGVXaWRnZXRzKHRoaXMuZm9ybWF0V2lkZ2V0RGF0YUZvclBvc2l0aW9uRGV0YWlscyhbZGF0YV0pLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldHMgPT4ge1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMudXNlcldpZGdldHMucHVzaChkYXRhKTtcclxuICAgIGxldCBncmlkc3Rlckl0ZW0gPSB0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLmdldEdyaWRzdGVySXRlbShkYXRhKTtcclxuICAgIHRoaXMud2lkZ2V0TGlzdC5wdXNoKGdyaWRzdGVySXRlbSk7XHJcbiAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuICAgIGlmIChkYXRhLnNldHRpbmdzICYmIGRhdGEuc2V0dGluZ3MuaXNQQU1XaWRnZXQpIHtcclxuICAgICAgdGhpcy5QQU1XaWRnZXRzLnB1c2goZGF0YS53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgdGhpcy5jaGVja1BBTVdpZGdldHMoKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBtYXBPYmplY3RMaXN0VG9Hcmlkc3Rlckl0ZW1MaXN0KHdpZGdldExpc3Q6IEFycmF5PElXaWRnZXRJbmZvPikge1xyXG4gICAgbGV0IHdpZGdldEFycmF5ID0gQXJyYXk8R3JpZHN0ZXJJdGVtPigpO1xyXG4gICAgd2lkZ2V0TGlzdC5mb3JFYWNoKHdpZGdldCA9PiB7XHJcbiAgICAgIHdpZGdldEFycmF5LnB1c2godGhpcy5yZXNwb25zaXZlU2VydmljZS5nZXRHcmlkc3Rlckl0ZW0od2lkZ2V0KSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB3aWRnZXRBcnJheTtcclxuICB9XHJcblxyXG4gIG1hcEdyaWRzdGVySXRlbVRvT2JqZWN0KHdpZGdldEl0ZW06IEdyaWRzdGVySXRlbSkge1xyXG4gICAgbGV0IHdpZGdldDogSVdpZGdldEluZm87XHJcbiAgICB3aWRnZXQgPSB3aWRnZXRJdGVtLndpZGdldEluZm87XHJcbiAgICB3aWRnZXQuaGVpZ2h0ID0gd2lkZ2V0SXRlbS5yb3dzO1xyXG4gICAgd2lkZ2V0LndpZHRoID0gd2lkZ2V0SXRlbS5jb2xzO1xyXG4gICAgd2lkZ2V0LnBvc2l0aW9uX3ggPSB3aWRnZXRJdGVtLnghO1xyXG4gICAgd2lkZ2V0LnBvc2l0aW9uX3kgPSB3aWRnZXRJdGVtLnkhO1xyXG4gICAgd2lkZ2V0LnJvd0hlaWdodCA9IHdpZGdldEl0ZW0uY3VyUm93SGVpZ2h0ITtcclxuICAgIHJldHVybiB3aWRnZXQ7XHJcbiAgfVxyXG5cclxuICBtYXBHcmlkc3Rlckxpc3RUb09iamVjdCh3aWRnZXRJdGVtTGlzdDogQXJyYXk8R3JpZHN0ZXJJdGVtPikge1xyXG4gICAgbGV0IHdpZGdldExpc3RBcnJheSA9IEFycmF5PElXaWRnZXRJbmZvPigpO1xyXG4gICAgd2lkZ2V0SXRlbUxpc3QuZm9yRWFjaCh3aWRnZXQgPT4ge1xyXG4gICAgICB3aWRnZXRMaXN0QXJyYXkucHVzaCh0aGlzLm1hcEdyaWRzdGVySXRlbVRvT2JqZWN0KHdpZGdldCkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gd2lkZ2V0TGlzdEFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGJ1dHRvbkNsaWNrKCkge1xyXG4gICAgaWYgKHRoaXMuZW1wdHlEYXNoYm9hcmRCdXR0b25BY3Rpb24gPT0gXCJ3aWRnZXRzXCIpXHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuQWRkTmV3V2lkZ2V0VG9EYXNoYm9hcmQsIG51bGwpO1xyXG4gICAgZWxzZSBpZiAodGhpcy5lbXB0eURhc2hib2FyZEJ1dHRvbkFjdGlvbiA9PSBcImZpbHRlclwiKVxyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50Lkdsb2JhbEZpbHRlckNsaWNrLCBudWxsKTtcclxuICAgIGVsc2UgaWYgKHRoaXMuZW1wdHlEYXNoYm9hcmRCdXR0b25BY3Rpb24gPT0gXCJkb3dubG9hZFwiKVxyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LkRvd25sb2FkRXhjZWxDbGljaywgbnVsbCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBidXR0b25BY3Rpb25DbGljayhhY3Rpb246YW55KSB7XHJcbiAgICBpZiAoYWN0aW9uID09IFwiZmlsdGVyXCIpXHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuR2xvYmFsRmlsdGVyQ2xpY2ssIG51bGwpO1xyXG4gICAgZWxzZSBpZiAoYWN0aW9uID09IFwiZG93bmxvYWRcIilcclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5Eb3dubG9hZEV4Y2VsQ2xpY2ssIG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZUFwcGxpZWRGaWx0ZXJzKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5VcGRhdGVBcHBsZWRGaXRlckZvckluYXBwbGljYWJsZUZpbHRlciwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hlY2tQQU1XaWRnZXRzKCkge1xyXG4gICAgaWYgKHRoaXMuUEFNV2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuU2hvd0luYXBwbGljYWJsZUZpbHRlck1lc3NhZ2UsIHRydWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuU2hvd0luYXBwbGljYWJsZUZpbHRlck1lc3NhZ2UsIGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59IiwiPGRpdiAjZ3JpZFdyYXBwZXIgY2xhc3M9XCJ3cmFwIGdyaWRzdGVyIGdyaWRzdGVyLW1vYmlsZVwiXHJcbiAgW25nU3R5bGVdPVwieydoZWlnaHQnOiB1c2VyV2lkZ2V0cy5sZW5ndGggPiAwICYmIXNob3dEb3dubG9hZE9ubHlTdGF0ZSA/IChncmlkaGVpZ2h0ICsgJ3B4JykgOiAndW5zZXQnfVwiPlxyXG4gIDwhLS0gPGRpdiAjZ3JpZFdyYXBwZXIgY2xhc3M9XCJ3cmFwIGdyaWRzdGVyXCI+IC0tPlxyXG4gIDxncmlkc3RlciBbb3B0aW9uc109XCJvcHRpb25zXCIgc3R5bGU9XCJoZWlnaHQ6MTAwJTtcIiAqbmdJZj1cInVzZXJXaWRnZXRzLmxlbmd0aCA+IDAgJiYgIXNob3dEb3dubG9hZE9ubHlTdGF0ZVwiPlxyXG4gICAgPGdyaWRzdGVyLWl0ZW0gW2l0ZW1dPVwiaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHdpZGdldExpc3RcIj5cclxuICAgICAgPHJhLXdpZGdldC1jb250YWluZXIgKHdpZGdldExvYWRlZCk9XCJ3aWRnZXRMb2FkZWQoJGV2ZW50LCAgaXRlbSlcIiBbY2FuTG9hZERhdGFdPVwiaXRlbS5jYW5Mb2FkRGF0YVwiIChkYXRhTG9hZGVkKT1cImRhdGFMb2FkZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgW2J1bGstYWN0aW9uLWRhdGFdPVwiYnVsa0FjdGlvbkRhdGFcIiBbZGFzaGJvYXJkLWluZm9dPVwiZGFzaGJvYXJkSW5mb1wiIFthcHAtY29uZmlnXT1cImFwcENvbmZpZ1wiXHJcbiAgICAgICAgW2V2ZW50LWJ1c109XCJyYURhc2hib2FyZEV2ZW50QnVzXCIgKHdpZGdldERlbGV0ZWQpPVwiZGVsZXRlV2lkZ2V0KCRldmVudClcIiBbZGF0YV09XCJpdGVtXCJcclxuICAgICAgICBbZ2xvYmFsLWZpbHRlcl09XCJnbG9iYWxGaWx0ZXJcIiBbZ3JpZC1jZWxsLWhlaWdodF09XCJncmlkY2VsbEhlaWdodFwiICpuZ0lmPVwiZ3JpZGNlbGxIZWlnaHQgJiYgZ3JpZGNlbGxIZWlnaHQgPiAwXCJcclxuICAgICAgICBbd2lkZ2V0LXdpZHRoXT1cIml0ZW0uY29sc1wiIFt3aWRnZXQtaGVpZ2h0XT1cIml0ZW0ucm93c1wiIFt3aWRnZXQtaW5zdGFuY2UtaWRdPVwiaXRlbS53aWRnZXRJbnN0YW5jZUlkXCJcclxuICAgICAgICBbZG9tLXJlc2l6ZWRdPVwiZG9tUmVzaXplZFwiICh1cGRhdGVBcHBsaWVkRmlsdGVycyk9XCJ1cGRhdGVBcHBsaWVkRmlsdGVycygkZXZlbnQpXCI+XHJcbiAgICAgIDwvcmEtd2lkZ2V0LWNvbnRhaW5lcj5cclxuICAgIDwvZ3JpZHN0ZXItaXRlbT5cclxuICA8L2dyaWRzdGVyPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZW1wdHktcGFkZGluZyBraW9zay1oaWRlXCIgKm5nSWY9XCJzaG93RW1wdHlEYXNoYm9hcmRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJlbXB0eS13cmFwcGVyXCI+XHJcbiAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1wcmVmaXhcIj5cclxuICAgICAgICA8IS0tIDxpIGNsYXNzPVwiZmFsIGZhLWVkaXQgZWRpdC1pY29uXCI+PC9pPiAtLT5cclxuICAgICAgICA8c3Bhbj57e2VtcHR5RGFzaGJvYXJkVGl0bGV9fTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxociBjbGFzcz1cImhvcml6b250YWxMaW5lLXNvbGlkXCIgLz5cclxuICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LWNvbnRlbnQgbGlnaHRcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBlbXB0eS1tc2dcIj5cclxuICAgICAgICAgICAge3tlbXB0eURhc2hib2FyZE1zZzF9fSA8YnIgLz5cclxuICAgICAgICAgICAge3tlbXB0eURhc2hib2FyZE1zZzJ9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNXaWRnZXRNZ21udFwiIGNsYXNzPVwiYnRuIGJ0bkxpYiBidG4tc20gZGFzaGJvYXJkLWJ1dHRvbiBsaWdodFwiIChjbGljayk9XCJidXR0b25DbGljaygpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwie3tlbXB0eURhc2hib2FyZEJ1dHRvbkljb259fVwiPjwvaT57e2VtcHR5RGFzaGJvYXJkQnV0dG9uVGV4dH19PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImVtcHR5LXBhZGRpbmcga2lvc2staGlkZVwiICpuZ0lmPVwic2hvd0Rvd25sb2FkT25seVN0YXRlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZW1wdHktd3JhcHBlclwiPlxyXG4gICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktcHJlZml4XCI+XHJcbiAgICAgICAgPCEtLSA8aSBjbGFzcz1cImZhbCBmYS1lZGl0IGVkaXQtaWNvblwiPjwvaT4gLS0+XHJcbiAgICAgICAgPHNwYW4+e3tEb3dubG9hZE9ubHlTdGF0ZVRpdGxlfX08L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8aHIgY2xhc3M9XCJob3Jpem9udGFsTGluZS1zb2xpZFwiIC8+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1jb250ZW50IGxpZ2h0XCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgZW1wdHktbXNnXCI+XHJcbiAgICAgICAgICAgIHt7RG93bmxvYWRPbmx5U3RhdGVNc2cxfX0gPGJyIC8+XHJcbiAgICAgICAgICAgIHt7RG93bmxvYWRPbmx5U3RhdGVNc2cyfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzV2lkZ2V0TWdtbnRcIiBjbGFzcz1cImJ0biBidG5MaWIgYnRuLXNtIGRhc2hib2FyZC1idXR0b24gbGlnaHRcIiAoY2xpY2spPVwiYnV0dG9uQWN0aW9uQ2xpY2soRG93bmxvYWRPbmx5U3RhdGVCdXR0b25BY3Rpb24xKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cInt7RG93bmxvYWRPbmx5U3RhdGVCdXR0b25JY29uMX19XCI+PC9pPnt7RG93bmxvYWRPbmx5U3RhdGVCdXR0b25UZXh0MX19PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uICBjbGFzcz1cImJ0biBidG5MaWIgYnRuLXNtIGRhc2hib2FyZC1idXR0b24gbGlnaHQgYnV0dG9uLW1hcmdpblwiIChjbGljayk9XCJidXR0b25BY3Rpb25DbGljayhEb3dubG9hZE9ubHlTdGF0ZUJ1dHRvbkFjdGlvbjIpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ7e0Rvd25sb2FkT25seVN0YXRlQnV0dG9uSWNvbjJ9fVwiPjwvaT57e0Rvd25sb2FkT25seVN0YXRlQnV0dG9uVGV4dDJ9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxub3RpZmllci1jb250YWluZXI+PC9ub3RpZmllci1jb250YWluZXI+XHJcbjwvZGl2PlxyXG4iXX0=
627
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZGFzaGJvYXJkLmFyZWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYS1kYXNoYm9hcmQtZnJhbWV3b3JrL3NyYy9saWIvcmEtZGFzaGJvYXJkLWFyZWEvcmEuZGFzaGJvYXJkLmFyZWEudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYS1kYXNoYm9hcmQtZnJhbWV3b3JrL3NyYy9saWIvcmEtZGFzaGJvYXJkLWFyZWEvcmEuZGFzaGJvYXJkLmFyZWEuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBK0MsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUtwTCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7O0FBYzNDLE1BQU0sT0FBTyxlQUFlO0lBMkQxQixZQUFvQixnQkFBb0MsRUFDOUMsTUFBYyxFQUNkLFVBQThCLEVBQzlCLGdCQUFvQyxFQUNwQyxRQUF5QixFQUN6QixHQUFzQixFQUN0QixpQkFBK0MsRUFDL0MsaUJBQXNDO1FBUDVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDOUMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUE4QjtRQUMvQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXFCO1FBaEV6QyxlQUFVLEdBQUcsS0FBSyxFQUFnQixDQUFDO1FBRW5DLGVBQVUsR0FBVyxHQUFHLENBQUM7UUFDekIsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0IsZ0JBQVcsR0FBVSxFQUFF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QUMsZ0JBQWdCO2dCQUNRLG9CQUFvQjtzQkFBbEQsS0FBSzt1QkFBQyxzQkFBc0I7Z0JBQ3BCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ3FCLGNBQWM7c0JBQXhDLEtBQUs7dUJBQUMsa0JBQWtCO2dCQUNmLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFc0MsV0FBVztzQkFBdkQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQWUzQyxNQUFNO3NCQURMLFlBQVk7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXQsIE9uSW5pdCwgQ29tcG9uZW50LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE5nWm9uZSwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBHcmlkc3RlckNvbmZpZywgR3JpZHN0ZXJJdGVtIH0gZnJvbSAnLi4vLi4vZ3JpZHN0ZXIvaW5kZXgnO1xyXG5pbXBvcnQgeyBSYURhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuLi9yYS5kYXNoYm9hcmQuc2VydmljZSc7XHJcbmltcG9ydCB7IFJBRGFzaGJvYXJkRXZlbnRCdXMgfSBmcm9tICcuLi9yYS5kYXNoYmFyZC5ldmVudC5idXMnO1xyXG5pbXBvcnQgeyBSQUV2ZW50IH0gZnJvbSAnLi4vcmEuZXZlbnQuZW51bSc7XHJcbmltcG9ydCB7IElXaWRnZXRJbmZvLCBJQXBwQ29uZmlnLCBJQnVsa0FjdGlvbiB9IGZyb20gJ0BzY2huZWlkZXJlc3Mvd2lkZ2V0ZnJhbWV3b3JrJztcclxuaW1wb3J0IHsgTmd4VWlMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXVpLWxvYWRlcic7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItbm90aWZpZXInO1xyXG5pbXBvcnQgeyBSQVRyYW5zbGF0ZVNlcnZpY2UsIFJBUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICdAc2NobmVpZGVyZXNzL3JhLWNvbW1vbic7XHJcbmltcG9ydCB7IFJBRGFzaGJvYXJkUmVzcG9uc2l2ZVNlcnZpY2UgfSBmcm9tICcuLi9yYS5kYXNoYm9hcmQucmVzcG9uc2l2ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSURhc2hib2FyZEluZm8gfSBmcm9tICdAc2NobmVpZGVyZXNzL3dpZGdldGZyYW1ld29yayc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhLWRhc2hib2FyZC1hcmVhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmEuZGFzaGJvYXJkLmFyZWEuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmEuZGFzaGJvYXJkLmFyZWEuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJBRGFzaGJvYXJkQXJlYSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICBwdWJsaWMgd2lkZ2V0TGlzdCA9IEFycmF5PEdyaWRzdGVySXRlbT4oKTtcclxuICBwdWJsaWMgb3B0aW9ucyE6IEdyaWRzdGVyQ29uZmlnO1xyXG4gIHB1YmxpYyBncmlkaGVpZ2h0OiBudW1iZXIgPSAzMDA7XHJcbiAgcHVibGljIGdyaWRjZWxsSGVpZ2h0OiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyB1c2VyV2lkZ2V0czogYW55W10gPSBbXTtcclxuICBwdWJsaWMgUEFNV2lkZ2V0czogYW55ID0gW107XHJcblxyXG4gIHByaXZhdGUgY29uaWZnQWRkQ2xpY2s6IGFueTtcclxuICBwcml2YXRlIGN1cmF0ZWRGaWx0ZXJDaGFuZ2U6IGFueTtcclxuICBwcml2YXRlIGJ1bGtBY3Rpb25DbGljazogYW55O1xyXG4gIHByaXZhdGUgY2FsY3VsYXRlTGF5b3V0OmFueTtcclxuICBwcml2YXRlIHJlYXJyYW5nZVdpZGdldENsaWNrOiBhbnk7XHJcbiAgcHJpdmF0ZSB3aWRnZXREZWxldGVFdmVudDogYW55O1xyXG4gIHByaXZhdGUgd2lkZ2V0QWRkRXZlbnQ6IGFueTtcclxuICBwcml2YXRlIHdpZGdldExpYnJhcnlEb25lQ2xpY2s6IGFueTtcclxuICBwcml2YXRlIGlzV2lkZ2V0TG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRvbVJlc2l6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0VtcHR5RGFzaGJvYXJkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dEb3dubG9hZE9ubHlTdGF0ZTpib29sZWFuPWZhbHNlO1xyXG4gIHB1YmxpYyBpc1dpZGdldE1nbW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGxhc3RWaWV3VHlwZSE6IHN0cmluZztcclxuICBwdWJsaWMgZW1wdHlEYXNoYm9hcmRUaXRsZTogYW55O1xyXG4gIHB1YmxpYyBlbXB0eURhc2hib2FyZE1zZzE6IGFueTtcclxuICBwdWJsaWMgZW1wdHlEYXNoYm9hcmRNc2cyOiBhbnk7XHJcbiAgcHVibGljIGVtcHR5RGFzaGJvYXJkQnV0dG9uVGV4dDogYW55O1xyXG4gIHB1YmxpYyBlbXB0eURhc2hib2FyZEJ1dHRvbkljb246IGFueTtcclxuICBwdWJsaWMgRG93bmxvYWRPbmx5U3RhdGVUaXRsZTogYW55O1xyXG4gIHB1YmxpYyBEb3dubG9hZE9ubHlTdGF0ZU1zZzE6IGFueTtcclxuICBwdWJsaWMgRG93bmxvYWRPbmx5U3RhdGVNc2cyOiBhbnk7XHJcbiAgcHVibGljIERvd25sb2FkT25seVN0YXRlQnV0dG9uVGV4dDE6IGFueTtcclxuICBwdWJsaWMgRG93bmxvYWRPbmx5U3RhdGVCdXR0b25JY29uMTogYW55O1xyXG4gIHB1YmxpYyBEb3dubG9hZE9ubHlTdGF0ZUJ1dHRvblRleHQyOiBhbnk7XHJcbiAgcHVibGljIERvd25sb2FkT25seVN0YXRlQnV0dG9uSWNvbjI6IGFueTtcclxuICBwdWJsaWMgZW1wdHlEYXNoYm9hcmRCdXR0b25BY3Rpb246IGFueTtcclxuICBwdWJsaWMgRG93bmxvYWRPbmx5U3RhdGVCdXR0b25BY3Rpb24xOiBhbnk7XHJcbiAgcHVibGljIERvd25sb2FkT25seVN0YXRlQnV0dG9uQWN0aW9uMjogYW55O1xyXG4gIHB1YmxpYyBpc09ubHlXaWRnZXRzOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIGluaXRpYWxXaWRnZXRDb3VudDogbnVtYmVyID0gMTA7XHJcbiAgcHJpdmF0ZSBjdXJyZW50TG9hZGluZ0NvdW50OiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgndXNlci1kYXNoYm9hcmQtaWQnKSB1c2VyRGFzaGJvYXJkSWQhOiBudW1iZXI7XHJcbiAgQElucHV0KCdhcmVhLWtleScpIGFyZWFLZXkhOiBzdHJpbmc7XHJcbiAgQElucHV0KCdkb3dubG9hZC1kYXRhc3RyZWFtLWxpbWl0JykgZG93bmxvYWREYXRhc3RyZWFtTGltaXQ6IGFueT0yMDA7XHJcbiAgQElucHV0KCdyZXBvcnQtZGF0YXN0cmVhbS1saW1pdCcpIHJlcG9ydERhdGFzdHJlYW1MaW1pdDogYW55PTUwO1xyXG4gIEBJbnB1dCgnZ2xvYmFsLWZpbHRlcicpIGdsb2JhbEZpbHRlciE6IGFueTtcclxuICBASW5wdXQoJ2V2ZW50LWJ1cycpIHJhRGFzaGJvYXJkRXZlbnRCdXMhOiBSQURhc2hib2FyZEV2ZW50QnVzO1xyXG4gIEBJbnB1dCgnd2lkZ2V0LWhlaWdodCcpIHdpZGdldEhlaWdodDogbnVtYmVyID0gMjtcclxuICBASW5wdXQoJ3dpZGdldC13aWR0aCcpIHdpZGdldFdpZHRoOiBudW1iZXIgPSA0O1xyXG4gIEBJbnB1dCgnYXBwLWNvbmZpZycpIGFwcENvbmZpZyE6IElBcHBDb25maWc7XHJcbiAgQElucHV0KCdkYXNoYm9hcmQtaW5mbycpIGRhc2hib2FyZEluZm8hOiBJRGFzaGJvYXJkSW5mbztcclxuICBASW5wdXQoJ2lzSW5kaWNhdG9yRGFzaGJvYXJkJykgaXNJbmRpY2F0b3JEYXNoYm9hcmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB0ZW1wbGF0ZUNvbmZpZzogYW55O1xyXG4gIEBJbnB1dCgnYnVsa19BY3Rpb25fRGF0YScpIGJ1bGtBY3Rpb25EYXRhITogSUJ1bGtBY3Rpb247XHJcbiAgQE91dHB1dCgpIGhpZGVEYXNoYm9hcmRCYW5uZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2dyaWRXcmFwcGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGdyaWRXcmFwcGVyITogRWxlbWVudFJlZjtcclxuICBwcml2YXRlIHNjcm9sbFRyaWdnZXI6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBSYURhc2hib2FyZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBuZ3hTZXJ2aWNlOiBOZ3hVaUxvYWRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFJBVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZpZXI6IE5vdGlmaWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgcmVzcG9uc2l2ZVNlcnZpY2U6IFJBRGFzaGJvYXJkUmVzcG9uc2l2ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBlcm1pc3Npb25TZXJ2aWNlOiBSQVBlcm1pc3Npb25TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpzY3JvbGwnKVxyXG4gIHNjcm9sbCgpIHtcclxuICAgIGlmICh0aGlzLnNjcm9sbFRyaWdnZXIpXHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRyaWdnZXIpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsVHJpZ2dlciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWREYXRhKCk7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5pc1dpZGdldE1nbW50ID0gdGhpcy5wZXJtaXNzaW9uU2VydmljZS5oYXNQZXJtaXNzaW9uKCdyYS53aWRnZXRtYW5hZ2VtZW50Jyk7XHJcbiAgICB0aGlzLmluaXRpYXRlR3JpZHN0ZXJDb25maWcoKTtcclxuICAgIHRoaXMuc2V0RW1wdHlEYXNoYm9hcmRDb25maWcoKTtcclxuICAgIHRoaXMuc2V0RG93bmxvYWRPbmx5U3RhdGVDb25maWcoKTtcclxuICAgIHRoaXMubGFzdFZpZXdUeXBlID0gdGhpcy5yZXNwb25zaXZlU2VydmljZS5Jc0Rlc2t0b3BWaWV3ID8gJ2Rlc2t0b3AnIDogJ21vYmlsZSc7XHJcbiAgICB0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLnJlc2l6ZWQuc3Vic2NyaWJlKChpc0Rlc2t0b3ApID0+IHtcclxuICAgICAgaWYgKHRoaXMubGFzdFZpZXdUeXBlICE9IChpc0Rlc2t0b3AgPyAnZGVza3RvcCcgOiAnbW9iaWxlJykgfHwgIWlzRGVza3RvcCkge1xyXG4gICAgICAgIHRoaXMubGFzdFZpZXdUeXBlID0gKGlzRGVza3RvcCA/ICdkZXNrdG9wJyA6ICdtb2JpbGUnKTtcclxuICAgICAgICB0aGlzLndpZGdldExpc3QgPSBbXTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaW5pdGlhdGVHcmlkc3RlckNvbmZpZygpO1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmFwaSEub3B0aW9uc0NoYW5nZWQhKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy51c2VyV2lkZ2V0cykge1xyXG4gICAgICAgICAgICBsZXQgd2lkZ2V0cyA9IHRoaXMubWFwT2JqZWN0TGlzdFRvR3JpZHN0ZXJJdGVtTGlzdCh0aGlzLnVzZXJXaWRnZXRzKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TG9hZGluZ0NvdW50ID0gMDtcclxuICAgICAgICAgICAgdGhpcy53aWRnZXRMaXN0ID0gd2lkZ2V0cztcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFdpZGdldHModGhpcy51c2VyRGFzaGJvYXJkSWQsIHRoaXMuYXJlYUtleSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmRvbVJlc2l6ZWQgPSAhdGhpcy5kb21SZXNpemVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5ncmlkY2VsbEhlaWdodCA9IHRoaXMub3B0aW9ucy5hcGkhLmdldEN1cnJlbnRSb3dIZWlnaHQhKCk7XHJcbiAgICAgICAgICB0aGlzLmRvbVJlc2l6ZWQgPSAhdGhpcy5kb21SZXNpemVkO1xyXG4gICAgICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYnVsa0FjdGlvbkNsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LkJ1bGtBY3Rpb25DbGljaykuc3Vic2NyaWJlKChkYXRhOiBJQnVsa0FjdGlvbikgPT4ge1xyXG4gICAgICAgIHRoaXMuYnVsa0FjdGlvbkRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTsgLy8gVG8gY3JlYXRlIGEgbmV3IHJlZmVyZW5jZTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNhbGN1bGF0ZUxheW91dCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5MYXlvdXRDaGFuZ2UpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmFwaSEub3B0aW9uc0NoYW5nZWQhKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzV2lkZ2V0TWdtbnQgPSB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmhhc1Blcm1pc3Npb24oJ3JhLndpZGdldG1hbmFnZW1lbnQnKTtcclxuICAgIGlmICh0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMgJiYgdGhpcy5hcHBDb25maWcgJiYgIXRoaXMuaXNXaWRnZXRMb2FkZWQpIHtcclxuICAgICAgdGhpcy5pc1dpZGdldExvYWRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMubG9hZFdpZGdldHModGhpcy51c2VyRGFzaGJvYXJkSWQsIHRoaXMuYXJlYUtleSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXRpYXRlR3JpZHN0ZXJDb25maWcoKTtcclxuXHJcbiAgICBpZiAoY2hhbmdlc1sncmFEYXNoYm9hcmRFdmVudEJ1cyddICYmIGNoYW5nZXNbJ3JhRGFzaGJvYXJkRXZlbnRCdXMnXS5jdXJyZW50VmFsdWUgIT0gY2hhbmdlc1sncmFEYXNoYm9hcmRFdmVudEJ1cyddLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgdGhpcy5pbml0aXRhdGVFdmVudEJ1c1N1YnNjcml0aW9ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XHJcbiAgICAvL3RoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgcHVibGljIHNldEVtcHR5RGFzaGJvYXJkQ29uZmlnKCkge1xyXG4gICAgaWYgKHRoaXMuZGFzaGJvYXJkSW5mbyAmJiB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZW1wdHlEYXNoYm9hcmRIZWFkZXIpIHtcclxuICAgICAgdGhpcy5lbXB0eURhc2hib2FyZFRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZShcImRhc2hib2FyZC5cIiArIHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5lbXB0eURhc2hib2FyZEhlYWRlci50aXRsZUtleSk7XHJcbiAgICAgIHRoaXMuZW1wdHlEYXNoYm9hcmRNc2cxID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZShcImRhc2hib2FyZC5cIiArIHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5lbXB0eURhc2hib2FyZEhlYWRlci5kZXNjcmlwdGlvbktleTEpO1xyXG4gICAgICB0aGlzLmVtcHR5RGFzaGJvYXJkTXNnMiA9ICh0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZW1wdHlEYXNoYm9hcmRIZWFkZXIuZGVzY3JpcHRpb25LZXkyKSA/IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoXCJkYXNoYm9hcmQuXCIgKyB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZW1wdHlEYXNoYm9hcmRIZWFkZXIuZGVzY3JpcHRpb25LZXkyKSA6ICcnO1xyXG4gICAgICB0aGlzLmVtcHR5RGFzaGJvYXJkQnV0dG9uVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoXCJkYXNoYm9hcmQuXCIgKyB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZW1wdHlEYXNoYm9hcmRIZWFkZXIuYnV0dG9uVGV4dEtleSk7XHJcbiAgICAgIHRoaXMuZW1wdHlEYXNoYm9hcmRCdXR0b25JY29uID0gdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmVtcHR5RGFzaGJvYXJkSGVhZGVyLmJ1dHRvbkljb24gPyB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZW1wdHlEYXNoYm9hcmRIZWFkZXIuYnV0dG9uSWNvbiA6ICcnO1xyXG4gICAgICB0aGlzLmVtcHR5RGFzaGJvYXJkQnV0dG9uQWN0aW9uID0gdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmVtcHR5RGFzaGJvYXJkSGVhZGVyLmJ1dHRvbkFjdGlvbiA/IHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5lbXB0eURhc2hib2FyZEhlYWRlci5idXR0b25BY3Rpb24gOiAnJztcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIHNldERvd25sb2FkT25seVN0YXRlQ29uZmlnKCkge1xyXG4gICAgaWYgKHRoaXMuZGFzaGJvYXJkSW5mbyAmJiB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZG93bmxvYWRPbmx5U3RhdGVIZWFkZXIpIHtcclxuICAgICAgdGhpcy5Eb3dubG9hZE9ubHlTdGF0ZVRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZShcImRhc2hib2FyZC5cIiArIHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5kb3dubG9hZE9ubHlTdGF0ZUhlYWRlci50aXRsZUtleSk7XHJcbiAgICAgIHRoaXMuRG93bmxvYWRPbmx5U3RhdGVNc2cxID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZShcImRhc2hib2FyZC5cIiArIHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5kb3dubG9hZE9ubHlTdGF0ZUhlYWRlci5kZXNjcmlwdGlvbktleTEpLnJlcGxhY2UoJ3swfScsdGhpcy5yZXBvcnREYXRhc3RyZWFtTGltaXQpO1xyXG4gICAgICB0aGlzLkRvd25sb2FkT25seVN0YXRlTXNnMiA9ICh0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZG93bmxvYWRPbmx5U3RhdGVIZWFkZXIuZGVzY3JpcHRpb25LZXkyKSA/IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoXCJkYXNoYm9hcmQuXCIgKyB0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVDb25maWcuZG93bmxvYWRPbmx5U3RhdGVIZWFkZXIuZGVzY3JpcHRpb25LZXkyKSA6ICcnO1xyXG4gICAgICB0aGlzLkRvd25sb2FkT25seVN0YXRlQnV0dG9uVGV4dDEgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKFwiZGFzaGJvYXJkLlwiICsgdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmRvd25sb2FkT25seVN0YXRlSGVhZGVyLmJ1dHRvblRleHRLZXkxKTtcclxuICAgICAgdGhpcy5Eb3dubG9hZE9ubHlTdGF0ZUJ1dHRvblRleHQyID0odGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmRvd25sb2FkT25seVN0YXRlSGVhZGVyLmJ1dHRvblRleHRLZXkyKSA/ICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKFwiZGFzaGJvYXJkLlwiICsgdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmRvd25sb2FkT25seVN0YXRlSGVhZGVyLmJ1dHRvblRleHRLZXkyKTonJztcclxuICAgICAgdGhpcy5Eb3dubG9hZE9ubHlTdGF0ZUJ1dHRvbkljb24xID0gdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmRvd25sb2FkT25seVN0YXRlSGVhZGVyLmJ1dHRvbkljb24xID8gdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmRvd25sb2FkT25seVN0YXRlSGVhZGVyLmJ1dHRvbkljb24xIDogJyc7XHJcbiAgICAgIHRoaXMuRG93bmxvYWRPbmx5U3RhdGVCdXR0b25JY29uMiA9IHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5kb3dubG9hZE9ubHlTdGF0ZUhlYWRlci5idXR0b25JY29uMiA/IHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5kb3dubG9hZE9ubHlTdGF0ZUhlYWRlci5idXR0b25JY29uMiA6ICcnO1xyXG4gICAgICB0aGlzLkRvd25sb2FkT25seVN0YXRlQnV0dG9uQWN0aW9uMSA9IHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5kb3dubG9hZE9ubHlTdGF0ZUhlYWRlci5idXR0b25BY3Rpb24xID8gdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmRvd25sb2FkT25seVN0YXRlSGVhZGVyLmJ1dHRvbkFjdGlvbjE6ICcnO1xyXG4gICAgICB0aGlzLkRvd25sb2FkT25seVN0YXRlQnV0dG9uQWN0aW9uMiA9IHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy5kb3dubG9hZE9ubHlTdGF0ZUhlYWRlci5idXR0b25BY3Rpb24yID8gdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLmRvd25sb2FkT25seVN0YXRlSGVhZGVyLmJ1dHRvbkFjdGlvbjIgOiAnJztcclxuICAgIH1cclxuICB9XHJcbiAgLyoqVG8gc2V0IEdyaWRzdGVyQ29uZmlnICovXHJcbiAgcHVibGljIGluaXRpYXRlR3JpZHN0ZXJDb25maWcoKSB7XHJcbiAgICBpZiAodGhpcy5kYXNoYm9hcmRJbmZvKSB7XHJcbiAgICAgIC8qKlRvIG92ZXJyaWRlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB2YWx1ZXMgdG8gdGhlIGdyaWRzdGVyIGNvbnRyb2wgKi9cclxuICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5yZXNwb25zaXZlU2VydmljZS5nZXRHcmlkc3RlckNvbmZpZyh0aGlzLmlzV2lkZ2V0TWdtbnQsXHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRJbmZvLnRlbXBsYXRlQ29uZmlnLndpZGdldC5jYW5SZXNpemUsIHRoaXMuZGFzaGJvYXJkSW5mby50ZW1wbGF0ZUNvbmZpZy53aWRnZXQuY2FuTW92ZSk7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5pbml0Q2FsbGJhY2sgPSAoZ3JpZHN0ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XHJcbiAgICAgICAgICB0aGlzLmdyaWRjZWxsSGVpZ2h0ID0gdGhpcy5vcHRpb25zLmFwaS5nZXRDdXJyZW50Um93SGVpZ2h0ISgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgdGhpcy5vcHRpb25zLml0ZW1DaGFuZ2VDYWxsYmFjayA9IChpdGVtOiBHcmlkc3Rlckl0ZW0pID0+IHtcclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaXZlU2VydmljZS5Jc0Rlc2t0b3BWaWV3KSB7XHJcbiAgICAgICAgICBpZiAoaXRlbS53aWRnZXRJbmZvICYmIGl0ZW0ud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlV2lkZ2V0UG9zaXRpb24oaXRlbS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB3aWRnZXRMb2FkZWQod2lkZ2V0RWxlbWVudDogYW55LCB3aWRnZXQ6IGFueSkge1xyXG4gICAgd2lkZ2V0LndpZGdldEVsZW1lbnQgPSB3aWRnZXRFbGVtZW50O1xyXG4gICAgbGV0IGl0ZW1zID0gdGhpcy53aWRnZXRMaXN0LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCA9PSB3aWRnZXQud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKVxyXG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5sb2FkRGF0YShpdGVtc1swXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWREYXRhKGl0ZW0/OiBhbnkpIHtcclxuICAgIGxldCBpdGVtcyA9IFtdO1xyXG4gICAgbGV0IHRvdGFsTG9hZGVkQ291bnQgPSB0aGlzLndpZGdldExpc3QuZmlsdGVyKCh3ID0+IHcuY2FuTG9hZERhdGEpKS5sZW5ndGg7XHJcbiAgICBpZiAoIWl0ZW0pXHJcbiAgICAgIGl0ZW1zID0gdGhpcy53aWRnZXRMaXN0LmZpbHRlcigodyA9PiAhdy5jYW5Mb2FkRGF0YSkpO1xyXG4gICAgZWxzZVxyXG4gICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5pbml0aWFsV2lkZ2V0Q291bnQgPT09IHRoaXMuY3VycmVudExvYWRpbmdDb3VudCA/IHRoaXMuY2hhbmdlSW5pdGlhbFdpZGdldENvdW50KCk6bnVsbDtcclxuICAgICAgaWYgKHRoaXMuaW5pdGlhbFdpZGdldENvdW50ID4gdGhpcy5jdXJyZW50TG9hZGluZ0NvdW50KSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXNFbGVtZW50TG9hZGVkKGl0ZW1zW2ldLndpZGdldEVsZW1lbnQpIHx8XHJcbiAgICAgICAgICAgICh0b3RhbExvYWRlZENvdW50IDw9IHRoaXMuaW5pdGlhbFdpZGdldENvdW50KSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMb2FkaW5nQ291bnQrKztcclxuICAgICAgICAgICAgaXRlbXNbaV0uY2FuTG9hZERhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0b3RhbExvYWRlZENvdW50ID0gdGhpcy53aWRnZXRMaXN0LmZpbHRlcigodyA9PiB3LmNhbkxvYWREYXRhKSkubGVuZ3RoO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlSW5pdGlhbFdpZGdldENvdW50KCl7XHJcbiAgICB0aGlzLmlzRWxlbWVudExvYWRlZCh0aGlzLndpZGdldExpc3RbdGhpcy5jdXJyZW50TG9hZGluZ0NvdW50XS53aWRnZXRFbGVtZW50KT8gXHJcbiAgICB0aGlzLmluaXRpYWxXaWRnZXRDb3VudCsrIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkYXRhTG9hZGVkKHdpZGdldEluZm86IGFueSkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY3VycmVudExvYWRpbmdDb3VudC0tO1xyXG4gICAgfSwgMTAwKTtcclxuICAgIC8vIHRoaXMubG9hZERhdGEoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0VsZW1lbnRMb2FkZWQoZWw6IGFueSkge1xyXG4gICAgaWYgKGVsKSB7XHJcbiAgICAgIGxldCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIHJldHVybiByZWN0ICYmIHJlY3QudG9wIDwgd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkV2lkZ2V0V3JhcHBlcnMoaXNJbml0aWFsTG9hZDogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGxldCB3aWRnZXRzOiBHcmlkc3Rlckl0ZW1bXSA9IHRoaXMubWFwT2JqZWN0TGlzdFRvR3JpZHN0ZXJJdGVtTGlzdCh0aGlzLnVzZXJXaWRnZXRzKTtcclxuXHJcbiAgICB0aGlzLndpZGdldExpc3QucHVzaCguLi53aWRnZXRzKTtcclxuICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIGluaXRpYXRlIGV2ZW50YnVzIHN1YnNjdGlwdGlvbnMgKi9cclxuICBpbml0aXRhdGVFdmVudEJ1c1N1YnNjcml0aW9ucygpIHtcclxuICAgIHRoaXMud2lkZ2V0RGVsZXRlRXZlbnQgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQuV2lkZ2V0RGVsZXRlKS5zdWJzY3JpYmUoKGluc3RhbmNlSWQpID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmRlbGV0ZVdpZGdldChpbnN0YW5jZUlkLCB0cnVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLndpZGdldEFkZEV2ZW50ID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LkFkZFdpZGdldCkuc3Vic2NyaWJlKCh3aWRnZXRJbmZvKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb3B5V2lkZ2V0KHdpZGdldEluZm8pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY29uaWZnQWRkQ2xpY2sgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQuQ29uZmlnQWRkQ2xpY2spLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYWRkV2lkZ2V0KGUpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY3VyYXRlZEZpbHRlckNoYW5nZSA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5DdXJhdGVkRmlsdGVyQ2hhbmdlKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRXaWRnZXRzKHRoaXMudXNlckRhc2hib2FyZElkLCB0aGlzLmFyZWFLZXkpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVhcnJhbmdlV2lkZ2V0Q2xpY2sgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQuUmVhcnJhbmdlQ2xpY2tlZCkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWFycmFuZ2VXaWRnZXRzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LndpZGdldExpYnJhcnlEb25lQ2xpY2spLnN1YnNjcmliZSgod2lkZ2V0TGlzdCkgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIGlmICh3aWRnZXRMaXN0KSB7XHJcbiAgICAgICAgICB0aGlzLmFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3QsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRlbXAgZml4LSByZWN1cnNpdmUgbWV0aG9kIHRvIGl0ZXJhdGUgb3ZlciB0aGUgbGlzdCBvZiBpdGVtc1xyXG4gICAqIGFuZCBhZGQgdGhlbSB0byBncmlkc3RlciBpbiB0aGUgZ2l2ZW4gb3JkZXJcclxuICAgKiBAcGFyYW0gd2lkZ2V0TGlzdCAgLWxpc3Qgb2Ygd2lkZ2V0c1xyXG4gICAqIEBwYXJhbSBpbmRleCAtaW5kZXggb2YgdGhlIGN1cnJlbnQgdmFsdWUgdG8gYmUgYWRkZWRcclxuICAgKi9cclxuICBhZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0OiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGxldCBhcmVhQ29udGV4dCA9IHRoaXM7XHJcbiAgICBsZXQgaW5kZXhWYWwgPSBpbmRleCArIDE7XHJcbiAgICBpZiAoaW5kZXggPiB3aWRnZXRMaXN0Lmxlbmd0aCAtIDEpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoaW5kZXggPT0gMCkge1xyXG4gICAgICAgIGFyZWFDb250ZXh0LmFkZFdpZGdldCh3aWRnZXRMaXN0W2luZGV4XSk7XHJcbiAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0TGlzdFRvR3JpZHN0ZXIod2lkZ2V0TGlzdCwgaW5kZXhWYWwpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0KHdpZGdldExpc3RbaW5kZXhdKTtcclxuICAgICAgICAgIGFyZWFDb250ZXh0LmFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3QsIGluZGV4VmFsKTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25pZmdBZGRDbGljaylcclxuICAgICAgdGhpcy5jb25pZmdBZGRDbGljay51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLndpZGdldEFkZEV2ZW50KVxyXG4gICAgICB0aGlzLndpZGdldEFkZEV2ZW50LnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGVsZXRlRXZlbnQpXHJcbiAgICAgIHRoaXMud2lkZ2V0RGVsZXRlRXZlbnQudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrKVxyXG4gICAgICB0aGlzLndpZGdldExpYnJhcnlEb25lQ2xpY2sudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy5yZWFycmFuZ2VXaWRnZXRDbGljaylcclxuICAgICAgdGhpcy5yZWFycmFuZ2VXaWRnZXRDbGljay51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLmN1cmF0ZWRGaWx0ZXJDaGFuZ2UpXHJcbiAgICAgIHRoaXMuY3VyYXRlZEZpbHRlckNoYW5nZS51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLmJ1bGtBY3Rpb25DbGljaylcclxuICAgICAgdGhpcy5idWxrQWN0aW9uQ2xpY2sudW5zdWJzY3JpYmUoKTtcclxuICAgIGlmICh0aGlzLmNhbGN1bGF0ZUxheW91dClcclxuICAgICAgdGhpcy5jYWxjdWxhdGVMYXlvdXQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlRvIHVwZGF0ZSBwb3NpdGlvbi9kaW1lbnRpb24gb2YgYWxsIHdpZGdldHMgaW4gdGhlIGFyZWEgKi9cclxuICB1cGRhdGVXaWRnZXRzKCkge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZVdpZGdldHModGhpcy5mb3JtYXRXaWRnZXREYXRhRm9yUG9zaXRpb25EZXRhaWxzKHRoaXMubWFwR3JpZHN0ZXJMaXN0VG9PYmplY3QodGhpcy53aWRnZXRMaXN0KSksXHJcbiAgICAgIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0cyA9PiB7XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipUbyB1cGRhdGUgd2lkZ2V0IGRpbWVuc2lvbnMgKi9cclxuICB1cGRhdGVXaWRnZXRQb3NpdGlvbih3aWRnZXRJbnN0YW5jZUlkOiBudW1iZXIpIHtcclxuXHJcbiAgICBsZXQgd2lkZ2V0RmlsdGVyZWRMaXN0ID0gW107XHJcbiAgICBsZXQgd2lkZ2V0ID0gdGhpcy53aWRnZXRMaXN0LmZpbHRlcihmaWx0ZXJlZCA9PiBmaWx0ZXJlZC53aWRnZXRJbmZvICYmIGZpbHRlcmVkLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCA9PSB3aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgd2lkZ2V0RmlsdGVyZWRMaXN0LnB1c2god2lkZ2V0WzBdKTtcclxuICAgICAgbGV0IHdpZGdldExpc3QgPSB0aGlzLm1hcEdyaWRzdGVyTGlzdFRvT2JqZWN0KHdpZGdldEZpbHRlcmVkTGlzdCk7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS51cGRhdGVXaWRnZXRzKHRoaXMuZm9ybWF0V2lkZ2V0RGF0YUZvclBvc2l0aW9uRGV0YWlscyh3aWRnZXRMaXN0KSwgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXRzID0+IHtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlRvIHJlc3RyaWN0IHJlcXVlc3QgcGF5bG9hZCB0byBiZSBvZiBtaW4gc2l6ZSAocG9zaXRpb24gJiBzaXplIGRldGFpbHMpICovXHJcbiAgZm9ybWF0V2lkZ2V0RGF0YUZvclBvc2l0aW9uRGV0YWlscyh3aWRnZXRJdGVtTGlzdDogSVdpZGdldEluZm9bXSkge1xyXG4gICAgbGV0IGl0ZW1MaXN0OiBhbnkgPSBbXTtcclxuICAgIHdpZGdldEl0ZW1MaXN0LmZvckVhY2goZnVuY3Rpb24gKHdpZGdldEl0ZW0pIHtcclxuICAgICAgbGV0IGl0ZW0gPSB7fSBhcyBJV2lkZ2V0SW5mbztcclxuICAgICAgaXRlbS53aWRnZXRJbnN0YW5jZUlkID0gd2lkZ2V0SXRlbS53aWRnZXRJbnN0YW5jZUlkO1xyXG4gICAgICBpdGVtLnBvc2l0aW9uX3ggPSB3aWRnZXRJdGVtLnBvc2l0aW9uX3g7XHJcbiAgICAgIGl0ZW0ucG9zaXRpb25feSA9IHdpZGdldEl0ZW0ucG9zaXRpb25feTtcclxuICAgICAgaXRlbS53aWR0aCA9IHdpZGdldEl0ZW0ud2lkdGg7XHJcbiAgICAgIGl0ZW0uaGVpZ2h0ID0gd2lkZ2V0SXRlbS5oZWlnaHQ7XHJcbiAgICAgIGl0ZW1MaXN0LnB1c2goaXRlbSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpdGVtTGlzdDtcclxuICB9XHJcblxyXG4gIC8qKiBUbyByZXRyaWV2ZSB3aWRnZXRzIGJhc2VkIG9uIHVzZXJEYXNoYm9hcmRpZCBhbmQgYXJlYSBuYW1lICovXHJcbiAgbG9hZFdpZGdldHModXNlckRhc2hib2FySWQ6IG51bWJlciwgYXJlYUtleTogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy50ZW1wbGF0ZUNvbmZpZyAmJiB0aGlzLnRlbXBsYXRlQ29uZmlnLmluaXRpYWxXaWRnZXRDb3VudClcclxuICAgICAgdGhpcy5pbml0aWFsV2lkZ2V0Q291bnQgPSB0aGlzLnRlbXBsYXRlQ29uZmlnLmluaXRpYWxXaWRnZXRDb3VudDtcclxuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcclxuICAgIGlmIChsb2NhdGlvbi5ocmVmLmluZGV4T2YoJy9raW9zay8nKSA+IC0xKVxyXG4gICAgICB0aGlzLmluaXRpYWxXaWRnZXRDb3VudCA9IDEwMDA7XHJcblxyXG4gICAgbGV0IHdpZGdldEluZm8gPSA8SVdpZGdldEluZm8+e1xyXG4gICAgICBkYXNoYm9hcmRJZDogdXNlckRhc2hib2FySWQudG9TdHJpbmcoKSxcclxuICAgICAgZGFzaGJvYXJkQXJlYUtleTogYXJlYUtleSxcclxuICAgICAgaXNJbmRpY2F0b3JEYXNoYm9hcmQ6IHRoaXMuaXNJbmRpY2F0b3JEYXNoYm9hcmRcclxuICAgIH1cclxuICAgXHJcbiAgICBsZXQgX3RoZSA9IHRoaXM7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0V2lkZ2V0c0J5RGFzaGJvYXJkQXJlYSh3aWRnZXRJbmZvLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldHMgPT4ge1xyXG4gICAgICBfdGhlLndpZGdldExpc3QgPSBbXTtcclxuICAgICAgdGhpcy51c2VyV2lkZ2V0cyA9IHdpZGdldHM7XHJcbiAgICAgIHRoaXMuUEFNV2lkZ2V0cyA9IFtdO1xyXG4gICAgICB3aWRnZXRzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHZhciBzZXR0aW5nczogYW55ID0gdW5kZWZpbmVkXHJcbiAgICAgICAgaWYgKGVsZW1lbnQud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgICAgIHNldHRpbmdzID0gSlNPTi5wYXJzZShlbGVtZW50LndpZGdldFNldHRpbmdzKTtcclxuICAgICAgICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy5pc1BBTVdpZGdldClcclxuICAgICAgICAgICAgdGhpcy5QQU1XaWRnZXRzLnB1c2goZWxlbWVudC53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNoZWNrUEFNV2lkZ2V0cygpO1xyXG4gICAgICBpZiggdGhpcy5kYXNoYm9hcmRJbmZvPy5pc1JlcG9ydCAmJiB3aWRnZXRzICYmIHdpZGdldHMubGVuZ3RoPiB0aGlzLnJlcG9ydERhdGFzdHJlYW1MaW1pdCl7XHJcbiAgICAgICAgdGhpcy5zaG93RG93bmxvYWRPbmx5U3RhdGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuRG93bmxvYWRPbmx5U3RhdGUsIHRoaXMuc2hvd0Rvd25sb2FkT25seVN0YXRlKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh3aWRnZXRzICYmIHdpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0Rvd25sb2FkT25seVN0YXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmNsaWVudElkID0gd2lkZ2V0c1swXS5jbGllbnRJZDtcclxuICAgICAgICB0aGlzLmxvYWRXaWRnZXRXcmFwcGVycygpO1xyXG4gICAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuSGlkZURhc2hib2FyZEJhbm5lciwgZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd0Rvd25sb2FkT25seVN0YXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93RW1wdHlEYXNoYm9hcmQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuSGlkZURhc2hib2FyZEJhbm5lciwgdGhpcy5zaG93RW1wdHlEYXNoYm9hcmQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBzZXQgQXJlYShHcmlkc3RlcikgaGVpZ2h0IGR5bmFtaWNhbGx5IGFzIHdpZGdldHMgYXJlIGFkZGVkL3JlbW92ZWQgKi9cclxuICBzZXRBcmVhSGVpZ2h0KCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGxldCBpc01vYmlsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLm1vYmlsZUJyZWFrcG9pbnQhID4gdGhpcy5ncmlkV3JhcHBlci5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoKSB7XHJcbiAgICAgICAgaXNNb2JpbGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBhcmVhU2Nyb2xsSGVpZ2h0ID0gMDtcclxuICAgICAgbGV0IGFyZWFIZWlnaHQgPSAwO1xyXG4gICAgICBsZXQgY3VyUm93SGVpZ2h0ID0gMDtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcclxuICAgICAgICBjdXJSb3dIZWlnaHQgPSB0aGlzLm9wdGlvbnMuYXBpLmdldEN1cnJlbnRSb3dIZWlnaHQhKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2hvd0VtcHR5RGFzaGJvYXJkID0gdGhpcy51c2VyV2lkZ2V0cy5sZW5ndGggPiAwID8gZmFsc2UgOiB0cnVlO1xyXG5cclxuICAgICAgdGhpcy53aWRnZXRMaXN0LmZvckVhY2goKHQpID0+IHtcclxuICAgICAgICBsZXQgY3VycmVudEhlaWdodCA9IHQueSEgKyB0LnJvd3M7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRIZWlnaHQgPiBhcmVhU2Nyb2xsSGVpZ2h0KSB7XHJcbiAgICAgICAgICBhcmVhU2Nyb2xsSGVpZ2h0ID0gY3VycmVudEhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGN1clJvd0hlaWdodCA9PSAwKSB7XHJcbiAgICAgICAgICBjdXJyZW50SGVpZ2h0ID0gdGhpcy53aWRnZXRMaXN0WzBdLmN1clJvd0hlaWdodCE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHQud2lkZ2V0SW5mby5yb3dIZWlnaHQgPSBjdXJSb3dIZWlnaHQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmdyaWRjZWxsSGVpZ2h0ID0gY3VyUm93SGVpZ2h0O1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xyXG4gICAgICAgIGFyZWFIZWlnaHQgPSBhcmVhU2Nyb2xsSGVpZ2h0ICogdGhpcy5vcHRpb25zLmFwaS5nZXRDdXJyZW50Um93SGVpZ2h0ISgpICsgMTAwO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBhcmVhU2Nyb2xsSGVpZ2h0TW9iID0gMDtcclxuICAgICAgaWYgKGlzTW9iaWxlKSB7XHJcbiAgICAgICAgYXJlYVNjcm9sbEhlaWdodE1vYiA9IHRoaXMud2lkZ2V0TGlzdC5sZW5ndGggKiAzMDAgKyAyMDA7XHJcbiAgICAgICAgYXJlYUhlaWdodCA9IGFyZWFTY3JvbGxIZWlnaHRNb2I7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFyZWFIZWlnaHQgPCA2MDApIHtcclxuICAgICAgICBhcmVhSGVpZ2h0ID0gNjAwO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZ3JpZGhlaWdodCA9IGFyZWFIZWlnaHQ7XHJcbiAgICAgIGlmICh0aGlzLmRhc2hib2FyZEluZm8udGVtcGxhdGVOYW1lID09ICdFbWlzc2lvbiBSZXBvcnQnKSB7XHJcbiAgICAgICAgdGhpcy5pc09ubHlXaWRnZXRzID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIHJlbW92ZSBhIHdpZGdldCBpbnN0YW5jZSBmcm9tIGRhc2hib2FyZCBhbmQgdG8gc2F2ZSBpbmZvIGluIGRhdGFiYXNlICovXHJcbiAgZGVsZXRlV2lkZ2V0KHdpZGdldEluc3RhbmNlSWQ6IGFueSwgaXNhbGVydERpc2FibGVkOiBib29sZWFuID0gZmFsc2UpIHtcclxuXHJcbiAgICBsZXQgd2lkZ2V0ID0gdGhpcy51c2VyV2lkZ2V0cy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW0ud2lkZ2V0SW5zdGFuY2VJZCA9PT0gd2lkZ2V0SW5zdGFuY2VJZDtcclxuICAgIH0pO1xyXG4gICAgaWYgKHdpZGdldC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudXNlcldpZGdldHMuc3BsaWNlKHRoaXMudXNlcldpZGdldHMuaW5kZXhPZih3aWRnZXRbMF0pLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5QQU1XaWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdmFyIGluZHggPSB0aGlzLlBBTVdpZGdldHMuaW5kZXhPZih3aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgaWYgKGluZHggPiAtMSlcclxuICAgICAgICB0aGlzLlBBTVdpZGdldHMuc3BsaWNlKGluZHgsIDEpO1xyXG4gICAgICB0aGlzLmNoZWNrUEFNV2lkZ2V0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBncmlkc3Rlckl0ZW0gPSB0aGlzLndpZGdldExpc3QuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgIHJldHVybiBpdGVtLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCA9PT0gd2lkZ2V0SW5zdGFuY2VJZDtcclxuICAgIH0pO1xyXG4gICAgaWYgKGdyaWRzdGVySXRlbS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0TGlzdC5zcGxpY2UodGhpcy53aWRnZXRMaXN0LmluZGV4T2YoZ3JpZHN0ZXJJdGVtWzBdKSwgMSk7XHJcbiAgICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG4gICAgICBpZiAoIWlzYWxlcnREaXNhYmxlZCkge1xyXG4gICAgICAgIHRoaXMubm90aWZpZXIubm90aWZ5KCdzdWNjZXNzJywgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uV2lkZ2V0dGV4dCcpICsgXCIgXCIgKyBncmlkc3Rlckl0ZW1bMF0ud2lkZ2V0SW5mby53aWRnZXRUaXRsZSArIFwiIFwiICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZWRTdWNjZXNmdWxseScpICsgXCIgXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dFbXB0eURhc2hib2FyZCA9IHRoaXMudXNlcldpZGdldHMubGVuZ3RoID4gMCA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIGlmICh0aGlzLnNob3dFbXB0eURhc2hib2FyZCA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuSGlkZURhc2hib2FyZEJhbm5lciwgdGhpcy5zaG93RW1wdHlEYXNoYm9hcmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqVG8gcmVhcnJhbmdlIHdpZGdldHMgcG9zaXRpb24gaW4gdGhlIGRhc2hib2FyZCwgY29tcGFjdExlZnQmVXAsY29tcGFjdExlZnQsY29tcGFjdFVwLGV0YyovXHJcbiAgcmVhcnJhbmdlV2lkZ2V0cygpIHtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudXNlcldpZGdldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy51c2VyV2lkZ2V0c1tpXS5wb3NpdGlvbl94ID0gMDtcclxuICAgICAgdGhpcy51c2VyV2lkZ2V0c1tpXS5wb3NpdGlvbl95ID0gMDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLndpZGdldExpc3QgPSBbXTtcclxuICAgIHRoaXMubG9hZFdpZGdldFdyYXBwZXJzKCk7XHJcbiAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LkhpZGVEYXNoYm9hcmRCYW5uZXIsIGZhbHNlKTtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXRMaXN0Lmxlbmd0aCA+IDApXHJcbiAgICAgIHRoaXMudXBkYXRlV2lkZ2V0UG9zaXRpb24odGhpcy53aWRnZXRMaXN0WzBdLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipUbyBhZGQgd2lkZ2V0IGluc3RhbmNlIHRvIHRoZSBkYXRhYmFzZSB3aXRoIHRoZSBuZXh0IGF2YWlsYWJsZSBwb3NpdGlvbiBhbmQgdG8gbWFrZSBjaGFuZ2VzIGluXHJcbiAgICogZGFzaGJvYXJkIGFyZWEuXHJcbiAgICovXHJcbiAgYWRkV2lkZ2V0KGRhdGE6IGFueSkge1xyXG4gICAgZGF0YS5oZWlnaHQgPSB0aGlzLndpZGdldEhlaWdodDtcclxuICAgIGRhdGEud2lkdGggPSB0aGlzLndpZGdldFdpZHRoO1xyXG4gICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5IaWRlRGFzaGJvYXJkQmFubmVyLCBmYWxzZSk7XHJcbiAgICBpZiAoZGF0YS53aWRnZXRTZXR0aW5ncykge1xyXG4gICAgICBpZiAodHlwZW9mIGRhdGEud2lkZ2V0U2V0dGluZ3MgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIGRhdGEud2lkZ2V0U2V0dGluZ3MgPSBKU09OLnBhcnNlKGRhdGEud2lkZ2V0U2V0dGluZ3MpO1xyXG5cclxuICAgICAgaWYgKGRhdGEud2lkZ2V0U2V0dGluZ3MuZGVmYXVsdENvbHMpIHtcclxuICAgICAgICBkYXRhLndpZHRoID0gZGF0YS53aWRnZXRTZXR0aW5ncy5kZWZhdWx0Q29scztcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGF0YS53aWRnZXRTZXR0aW5ncy5kZWZhdWx0Um93cykge1xyXG4gICAgICAgIGRhdGEuaGVpZ2h0ID0gZGF0YS53aWRnZXRTZXR0aW5ncy5kZWZhdWx0Um93cztcclxuICAgICAgfVxyXG4gICAgICBkYXRhLndpZGdldFNldHRpbmdzID0gbnVsbDtcclxuICAgIH1cclxuICAgIGRhdGEgPSB0aGlzLnNldFBvc2l0aW9ucyhkYXRhKTtcclxuXHJcbiAgICAvKiogdG8gZmluZCB0aGUgYXZhaWxhYmxlIHBvc2l0aW9uIGluIGdyaWRzdGVyLCB0ZW1wIGNvbW1lbnRpbmcgdGhlIGNvZGUtcmV0dXJuaW5nIGhpZ2hlciB5IHZhbHVlIHRoYW4gbm9ybWFsICovXHJcbiAgICBkYXRhLmRhc2hib2FyZEFyZWFLZXkgPSB0aGlzLmFyZWFLZXk7XHJcbiAgICBkYXRhLmRhc2hib2FyZElkID0gdGhpcy51c2VyRGFzaGJvYXJkSWQ7XHJcbiAgICB0aGlzLm5neFNlcnZpY2Uuc3RhcnQoKTtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5hZGRXaWRnZXQoZGF0YSwgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXQgPT4ge1xyXG4gICAgICB0aGlzLnVzZXJXaWRnZXRzLnB1c2god2lkZ2V0KTtcclxuICAgICAgbGV0IGdyaWRzdGVySXRlbSA9IHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UuZ2V0R3JpZHN0ZXJJdGVtKHdpZGdldCk7XHJcbiAgICAgIHRoaXMud2lkZ2V0TGlzdC5wdXNoKGdyaWRzdGVySXRlbSk7XHJcbiAgICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcclxuICAgICAgICBsZXQgY3VyUm93SGVpZ2h0OiBudW1iZXIgPSBOdW1iZXIodGhpcy5vcHRpb25zLmFwaS5nZXRDdXJyZW50Um93SGVpZ2h0ISgpKTtcclxuICAgICAgICBpZiAoY3VyUm93SGVpZ2h0ID4gMCkge1xyXG4gICAgICAgICAgd2lkZ2V0LnJvd0hlaWdodCA9IGN1clJvd0hlaWdodDtcclxuICAgICAgICAgIHRoaXMuZ3JpZGNlbGxIZWlnaHQgPSBjdXJSb3dIZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHZhciB3aWRnZXRJbnN0YW5jZUlkID0gMDtcclxuICAgICAgaWYgKHdpZGdldCAmJiB3aWRnZXQud2lkZ2V0SW5zdGFuY2VJZCkge1xyXG4gICAgICAgIHdpZGdldEluc3RhbmNlSWQgPSB3aWRnZXQud2lkZ2V0SW5zdGFuY2VJZDtcclxuICAgICAgICAvKipUbyBzYXZlIGFkZGVkIHdpZGdldCBwb3NpdGlvbiBpbiBkYiAqL1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLklzRGVza3RvcFZpZXcpIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVdpZGdldFBvc2l0aW9uKHdpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh3aWRnZXQuc2V0dGluZ3MgJiYgd2lkZ2V0LnNldHRpbmdzLmlzUEFNV2lkZ2V0KSB7XHJcbiAgICAgICAgdGhpcy5QQU1XaWRnZXRzLnB1c2god2lkZ2V0LndpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tQQU1XaWRnZXRzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0QWRkZWQsIHdpZGdldCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UG9zaXRpb25zKGRhdGE6IGFueSkge1xyXG4gICAgZGF0YS5wb3NpdGlvbl94ID0gMDtcclxuICAgIGRhdGEucG9zaXRpb25feSA9IDA7XHJcbiAgICBpZiAoIXRoaXMucmVzcG9uc2l2ZVNlcnZpY2UuSXNEZXNrdG9wVmlldykge1xyXG4gICAgICBpZiAodGhpcy51c2VyV2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgbGV0IHdpZGdldCA9IHRoaXMudXNlcldpZGdldHNbdGhpcy51c2VyV2lkZ2V0cy5sZW5ndGggLSAxXTtcclxuICAgICAgICBpZiAod2lkZ2V0LnBvc2l0aW9uX3ggKyB3aWRnZXQud2lkdGggPiAodGhpcy5yZXNwb25zaXZlU2VydmljZS5tYXhDb2xzRGVza3RvcCAvIDIpKSB7XHJcbiAgICAgICAgICBkYXRhLnBvc2l0aW9uX3kgPSB3aWRnZXQucG9zaXRpb25feSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZGF0YS5wb3NpdGlvbl95ID0gd2lkZ2V0LnBvc2l0aW9uX3k7XHJcbiAgICAgICAgICBkYXRhLnBvc2l0aW9uX3ggPSB0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLm1heENvbHNEZXNrdG9wIC0gKHdpZGdldC5wb3NpdGlvbl94ICsgd2lkZ2V0LndpZHRoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIGFkZCB3aWRnZXQgdG8gY3VycmVudCB3aWRnZXQgbGlzdCAsaW52b2tlZCBmcm9tIGNvcHkgd2lkZ2V0IHdpbmRvdyovXHJcbiAgY29weVdpZGdldChkYXRhOiBhbnkpIHtcclxuICAgIGRhdGEgPSB0aGlzLnNldFBvc2l0aW9ucyhkYXRhKTtcclxuICAgIGlmICghdGhpcy5yZXNwb25zaXZlU2VydmljZS5Jc0Rlc2t0b3BWaWV3KSB7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS51cGRhdGVXaWRnZXRzKHRoaXMuZm9ybWF0V2lkZ2V0RGF0YUZvclBvc2l0aW9uRGV0YWlscyhbZGF0YV0pLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldHMgPT4ge1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMudXNlcldpZGdldHMucHVzaChkYXRhKTtcclxuICAgIGxldCBncmlkc3Rlckl0ZW0gPSB0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLmdldEdyaWRzdGVySXRlbShkYXRhKTtcclxuICAgIHRoaXMud2lkZ2V0TGlzdC5wdXNoKGdyaWRzdGVySXRlbSk7XHJcbiAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuICAgIGlmIChkYXRhLnNldHRpbmdzICYmIGRhdGEuc2V0dGluZ3MuaXNQQU1XaWRnZXQpIHtcclxuICAgICAgdGhpcy5QQU1XaWRnZXRzLnB1c2goZGF0YS53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgdGhpcy5jaGVja1BBTVdpZGdldHMoKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBtYXBPYmplY3RMaXN0VG9Hcmlkc3Rlckl0ZW1MaXN0KHdpZGdldExpc3Q6IEFycmF5PElXaWRnZXRJbmZvPikge1xyXG4gICAgbGV0IHdpZGdldEFycmF5ID0gQXJyYXk8R3JpZHN0ZXJJdGVtPigpO1xyXG4gICAgd2lkZ2V0TGlzdC5mb3JFYWNoKHdpZGdldCA9PiB7XHJcbiAgICAgIHdpZGdldEFycmF5LnB1c2godGhpcy5yZXNwb25zaXZlU2VydmljZS5nZXRHcmlkc3Rlckl0ZW0od2lkZ2V0KSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB3aWRnZXRBcnJheTtcclxuICB9XHJcblxyXG4gIG1hcEdyaWRzdGVySXRlbVRvT2JqZWN0KHdpZGdldEl0ZW06IEdyaWRzdGVySXRlbSkge1xyXG4gICAgbGV0IHdpZGdldDogSVdpZGdldEluZm87XHJcbiAgICB3aWRnZXQgPSB3aWRnZXRJdGVtLndpZGdldEluZm87XHJcbiAgICB3aWRnZXQuaGVpZ2h0ID0gd2lkZ2V0SXRlbS5yb3dzO1xyXG4gICAgd2lkZ2V0LndpZHRoID0gd2lkZ2V0SXRlbS5jb2xzO1xyXG4gICAgd2lkZ2V0LnBvc2l0aW9uX3ggPSB3aWRnZXRJdGVtLnghO1xyXG4gICAgd2lkZ2V0LnBvc2l0aW9uX3kgPSB3aWRnZXRJdGVtLnkhO1xyXG4gICAgd2lkZ2V0LnJvd0hlaWdodCA9IHdpZGdldEl0ZW0uY3VyUm93SGVpZ2h0ITtcclxuICAgIHJldHVybiB3aWRnZXQ7XHJcbiAgfVxyXG5cclxuICBtYXBHcmlkc3Rlckxpc3RUb09iamVjdCh3aWRnZXRJdGVtTGlzdDogQXJyYXk8R3JpZHN0ZXJJdGVtPikge1xyXG4gICAgbGV0IHdpZGdldExpc3RBcnJheSA9IEFycmF5PElXaWRnZXRJbmZvPigpO1xyXG4gICAgd2lkZ2V0SXRlbUxpc3QuZm9yRWFjaCh3aWRnZXQgPT4ge1xyXG4gICAgICB3aWRnZXRMaXN0QXJyYXkucHVzaCh0aGlzLm1hcEdyaWRzdGVySXRlbVRvT2JqZWN0KHdpZGdldCkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gd2lkZ2V0TGlzdEFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGJ1dHRvbkNsaWNrKCkge1xyXG4gICAgaWYgKHRoaXMuZW1wdHlEYXNoYm9hcmRCdXR0b25BY3Rpb24gPT0gXCJ3aWRnZXRzXCIpXHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuQWRkTmV3V2lkZ2V0VG9EYXNoYm9hcmQsIG51bGwpO1xyXG4gICAgZWxzZSBpZiAodGhpcy5lbXB0eURhc2hib2FyZEJ1dHRvbkFjdGlvbiA9PSBcImZpbHRlclwiKVxyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50Lkdsb2JhbEZpbHRlckNsaWNrLCBudWxsKTtcclxuICAgIGVsc2UgaWYgKHRoaXMuZW1wdHlEYXNoYm9hcmRCdXR0b25BY3Rpb24gPT0gXCJkb3dubG9hZFwiKVxyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LkRvd25sb2FkRXhjZWxDbGljaywgbnVsbCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBidXR0b25BY3Rpb25DbGljayhhY3Rpb246YW55KSB7XHJcbiAgICBpZiAoYWN0aW9uID09IFwiZmlsdGVyXCIpXHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuR2xvYmFsRmlsdGVyQ2xpY2ssIG51bGwpO1xyXG4gICAgZWxzZSBpZiAoYWN0aW9uID09IFwiZG93bmxvYWRcIilcclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5Eb3dubG9hZEV4Y2VsQ2xpY2ssIG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZUFwcGxpZWRGaWx0ZXJzKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5VcGRhdGVBcHBsZWRGaXRlckZvckluYXBwbGljYWJsZUZpbHRlciwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hlY2tQQU1XaWRnZXRzKCkge1xyXG4gICAgaWYgKHRoaXMuUEFNV2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuU2hvd0luYXBwbGljYWJsZUZpbHRlck1lc3NhZ2UsIHRydWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuU2hvd0luYXBwbGljYWJsZUZpbHRlck1lc3NhZ2UsIGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59IiwiPGRpdiAjZ3JpZFdyYXBwZXIgY2xhc3M9XCJ3cmFwIGdyaWRzdGVyIGdyaWRzdGVyLW1vYmlsZVwiXHJcbiAgW25nU3R5bGVdPVwieydoZWlnaHQnOiB1c2VyV2lkZ2V0cy5sZW5ndGggPiAwICYmIXNob3dEb3dubG9hZE9ubHlTdGF0ZSAmJiBpc09ubHlXaWRnZXRzID8gKGdyaWRoZWlnaHQgKyAncHgnKSA6ICd1bnNldCd9XCI+XHJcbiAgPCEtLSA8ZGl2ICNncmlkV3JhcHBlciBjbGFzcz1cIndyYXAgZ3JpZHN0ZXJcIj4gLS0+XHJcbiAgPGdyaWRzdGVyIFtvcHRpb25zXT1cIm9wdGlvbnNcIiBzdHlsZT1cImhlaWdodDoxMDAlO1wiICpuZ0lmPVwidXNlcldpZGdldHMubGVuZ3RoID4gMCAmJiAhc2hvd0Rvd25sb2FkT25seVN0YXRlXCI+XHJcbiAgICA8Z3JpZHN0ZXItaXRlbSBbaXRlbV09XCJpdGVtXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygd2lkZ2V0TGlzdFwiPlxyXG4gICAgICA8cmEtd2lkZ2V0LWNvbnRhaW5lciAod2lkZ2V0TG9hZGVkKT1cIndpZGdldExvYWRlZCgkZXZlbnQsICBpdGVtKVwiIFtjYW5Mb2FkRGF0YV09XCJpdGVtLmNhbkxvYWREYXRhXCIgKGRhdGFMb2FkZWQpPVwiZGF0YUxvYWRlZCgkZXZlbnQpXCJcclxuICAgICAgICBbYnVsay1hY3Rpb24tZGF0YV09XCJidWxrQWN0aW9uRGF0YVwiIFtkYXNoYm9hcmQtaW5mb109XCJkYXNoYm9hcmRJbmZvXCIgW2FwcC1jb25maWddPVwiYXBwQ29uZmlnXCJcclxuICAgICAgICBbZXZlbnQtYnVzXT1cInJhRGFzaGJvYXJkRXZlbnRCdXNcIiAod2lkZ2V0RGVsZXRlZCk9XCJkZWxldGVXaWRnZXQoJGV2ZW50KVwiIFtkYXRhXT1cIml0ZW1cIlxyXG4gICAgICAgIFtnbG9iYWwtZmlsdGVyXT1cImdsb2JhbEZpbHRlclwiIFtncmlkLWNlbGwtaGVpZ2h0XT1cImdyaWRjZWxsSGVpZ2h0XCIgKm5nSWY9XCJncmlkY2VsbEhlaWdodCAmJiBncmlkY2VsbEhlaWdodCA+IDBcIlxyXG4gICAgICAgIFt3aWRnZXQtd2lkdGhdPVwiaXRlbS5jb2xzXCIgW3dpZGdldC1oZWlnaHRdPVwiaXRlbS5yb3dzXCIgW3dpZGdldC1pbnN0YW5jZS1pZF09XCJpdGVtLndpZGdldEluc3RhbmNlSWRcIlxyXG4gICAgICAgIFtkb20tcmVzaXplZF09XCJkb21SZXNpemVkXCIgKHVwZGF0ZUFwcGxpZWRGaWx0ZXJzKT1cInVwZGF0ZUFwcGxpZWRGaWx0ZXJzKCRldmVudClcIj5cclxuICAgICAgPC9yYS13aWRnZXQtY29udGFpbmVyPlxyXG4gICAgPC9ncmlkc3Rlci1pdGVtPlxyXG4gIDwvZ3JpZHN0ZXI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJlbXB0eS1wYWRkaW5nIGtpb3NrLWhpZGVcIiAqbmdJZj1cInNob3dFbXB0eURhc2hib2FyZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImVtcHR5LXdyYXBwZXJcIj5cclxuICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXByZWZpeFwiPlxyXG4gICAgICAgIDwhLS0gPGkgY2xhc3M9XCJmYWwgZmEtZWRpdCBlZGl0LWljb25cIj48L2k+IC0tPlxyXG4gICAgICAgIDxzcGFuPnt7ZW1wdHlEYXNoYm9hcmRUaXRsZX19PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGhyIGNsYXNzPVwiaG9yaXpvbnRhbExpbmUtc29saWRcIiAvPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktY29udGVudCBsaWdodFwiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGVtcHR5LW1zZ1wiPlxyXG4gICAgICAgICAgICB7e2VtcHR5RGFzaGJvYXJkTXNnMX19IDxiciAvPlxyXG4gICAgICAgICAgICB7e2VtcHR5RGFzaGJvYXJkTXNnMn19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc1dpZGdldE1nbW50XCIgY2xhc3M9XCJidG4gYnRuTGliIGJ0bi1zbSBkYXNoYm9hcmQtYnV0dG9uIGxpZ2h0XCIgKGNsaWNrKT1cImJ1dHRvbkNsaWNrKClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJ7e2VtcHR5RGFzaGJvYXJkQnV0dG9uSWNvbn19XCI+PC9pPnt7ZW1wdHlEYXNoYm9hcmRCdXR0b25UZXh0fX08L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZW1wdHktcGFkZGluZyBraW9zay1oaWRlXCIgKm5nSWY9XCJzaG93RG93bmxvYWRPbmx5U3RhdGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJlbXB0eS13cmFwcGVyXCI+XHJcbiAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1wcmVmaXhcIj5cclxuICAgICAgICA8IS0tIDxpIGNsYXNzPVwiZmFsIGZhLWVkaXQgZWRpdC1pY29uXCI+PC9pPiAtLT5cclxuICAgICAgICA8c3Bhbj57e0Rvd25sb2FkT25seVN0YXRlVGl0bGV9fTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxociBjbGFzcz1cImhvcml6b250YWxMaW5lLXNvbGlkXCIgLz5cclxuICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LWNvbnRlbnQgbGlnaHRcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBlbXB0eS1tc2dcIj5cclxuICAgICAgICAgICAge3tEb3dubG9hZE9ubHlTdGF0ZU1zZzF9fSA8YnIgLz5cclxuICAgICAgICAgICAge3tEb3dubG9hZE9ubHlTdGF0ZU1zZzJ9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNXaWRnZXRNZ21udFwiIGNsYXNzPVwiYnRuIGJ0bkxpYiBidG4tc20gZGFzaGJvYXJkLWJ1dHRvbiBsaWdodFwiIChjbGljayk9XCJidXR0b25BY3Rpb25DbGljayhEb3dubG9hZE9ubHlTdGF0ZUJ1dHRvbkFjdGlvbjEpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwie3tEb3dubG9hZE9ubHlTdGF0ZUJ1dHRvbkljb24xfX1cIj48L2k+e3tEb3dubG9hZE9ubHlTdGF0ZUJ1dHRvblRleHQxfX08L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gIGNsYXNzPVwiYnRuIGJ0bkxpYiBidG4tc20gZGFzaGJvYXJkLWJ1dHRvbiBsaWdodCBidXR0b24tbWFyZ2luXCIgKGNsaWNrKT1cImJ1dHRvbkFjdGlvbkNsaWNrKERvd25sb2FkT25seVN0YXRlQnV0dG9uQWN0aW9uMilcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cInt7RG93bmxvYWRPbmx5U3RhdGVCdXR0b25JY29uMn19XCI+PC9pPnt7RG93bmxvYWRPbmx5U3RhdGVCdXR0b25UZXh0Mn19PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPG5vdGlmaWVyLWNvbnRhaW5lcj48L25vdGlmaWVyLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbiJdfQ==