@sunbird-cb/cbp-ai 0.1.58 → 0.1.60

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.
@@ -55,12 +55,6 @@ export class ReviewRequestComponent {
55
55
  if (source === 'mdo') {
56
56
  this.portalData?.parentAppData?.fromPortal === 'mdo';
57
57
  this.sharedService.fromMdoPortal = true;
58
- this.requestData = this.portalData?.parentAppData.requestRowData;
59
- this.sharedService.requestData = this.portalData?.parentAppData.requestRowData;
60
- this.sharedService.mdoBaseUrl = this.portalData?.configDetails?.mdoPath;
61
- this.sharedService.mdoConfigDetails = this.portalData?.configDetails;
62
- this.sharedService.baseUrl = this.portalData?.configDetails?.mdoPath + "/";
63
- this.sharedService.configDetails = this.portalData?.configDetails;
64
58
  this.getMDORequestDetails(requestId);
65
59
  }
66
60
  else {
@@ -99,9 +93,15 @@ export class ReviewRequestComponent {
99
93
  }
100
94
  getMDORequestDetails(requestId) {
101
95
  this.loading = true;
96
+ this.sharedService.mdoBaseUrl = this.portalData?.configDetails?.mdoPath;
97
+ this.sharedService.mdoConfigDetails = this.portalData?.configDetails;
98
+ this.sharedService.baseUrl = this.portalData?.configDetails?.mdoPath + "/";
99
+ this.sharedService.configDetails = this.portalData?.configDetails;
102
100
  this.sharedService.viewMDOApprovalRequests(requestId).subscribe({
103
101
  next: (res) => {
104
102
  console.log('res', res);
103
+ this.requestData = res;
104
+ this.sharedService.requestData = res;
105
105
  this.request = res;
106
106
  this.loading = false;
107
107
  this.dataSource = new MatTableDataSource(res?.items);
@@ -405,4 +405,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
405
405
  type: ViewChild,
406
406
  args: [MatPaginator]
407
407
  }] } });
408
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2aWV3LXJlcXVlc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvcmV2aWV3LXJlcXVlc3QvcmV2aWV3LXJlcXVlc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvcmV2aWV3LXJlcXVlc3QvcmV2aWV3LXJlcXVlc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWhGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ3BILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVExQyxNQUFNLE9BQU8sc0JBQXNCO0lBc0JqQyxZQUFtQixhQUE0QixFQUFVLFFBQXFCLEVBQVUsS0FBcUIs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LElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLFVBQVU7b0JBQ2pHLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLFVBQVUsS0FBSyxLQUFLLEVBQ3BEO29CQUNBLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDdEM7WUFFSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7Z0JBQ3BCLE1BQU0sWUFBWSxHQUNoQixHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU07b0JBQ2xCLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTztvQkFDbkIsNkJBQTZCLENBQUM7Z0JBRWhDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixZQUFZLEVBQ1osR0FBRyxFQUNIO29CQUNFLFFBQVEsRUFBRSxJQUFJO29CQUNkLFVBQVUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUMvQixDQUNGLENBQUM7WUFDSixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBRVAsQ0FBQzsrR0F4ZFUsc0JBQXNCO21HQUF0QixzQkFBc0IscUdBTXRCLFlBQVksZ0RDNUJ6QixzdmZBaVVNOzs0RkQzU08sc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLG9CQUFvQjt3TUFVTCxTQUFTO3NCQUFqQyxTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gJy4uLy4uL21vZHVsZXMvc2hhcmVkL3NlcnZpY2VzL3NoYXJlZC5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IFZpZXdDYnBQbGFuQ29tcG9uZW50IH0gZnJvbSAnLi4vdmlldy1jYnAtcGxhbi92aWV3LWNicC1wbGFuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFZGl0Q2JwUGxhbkNvbXBvbmVudCB9IGZyb20gJy4uL2VkaXQtY2JwLXBsYW4vZWRpdC1jYnAtcGxhbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFZpZXdDb3Vyc2VSZWNvbW1lbmRhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL3ZpZXctY291cnNlLXJlY29tbWVuZGF0aW9uL3ZpZXctY291cnNlLXJlY29tbWVuZGF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZWplY3RJdGVtUmVxdWVzdEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9yZWplY3QtaXRlbS1yZXF1ZXN0LWZvcm0vcmVqZWN0LWl0ZW0tcmVxdWVzdC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQdWJsaXNoQXBwcm92ZVJlcXVlc3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vcHVibGlzaC1yZXF1ZXN0LWZvcm0vcHVibGlzaC1hcHByb3ZlLXJlcXVlc3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVqZWN0UmVxdWVzdEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9yZWplY3QtcmVxdWVzdC1mb3JtL3JlamVjdC1yZXF1ZXN0LWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IExpc3RQb3B1cENvbXBvbmVudCB9IGZyb20gJy4uL2xpc3QtcG9wdXAvbGlzdC1wb3B1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcmV2aWV3LXJlcXVlc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmV2aWV3LXJlcXVlc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXZpZXctcmVxdWVzdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJldmlld1JlcXVlc3RDb21wb25lbnQge1xuICByZXF1ZXN0OiBhbnkgPSB7XG4gIH07XG4gIHNlYXJjaFRleHQgPSAnJ1xuICBleHBhbmRlZFJlc3BvbnNpYmlsaXR5Um93czogeyBbaWQ6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICBleHBhbmRlZEFjdGl2aXR5Um93czogeyBbaWQ6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgcGFnaW5hdG9yITogTWF0UGFnaW5hdG9yO1xuICBsb2FkaW5nID0gZmFsc2VcbiAgYWN0aXZlVGFiID0gJ21hdGNoZWQnXG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdID0gW1xuICAgICdkZXNpZ25hdGlvbl9uYW1lJyxcbiAgICAncm9sZV9yZXNwb25zaWJpbGl0aWVzJyxcbiAgICAnYWN0aXZpdGllcycsXG4gICAgJ2JlaGF2aW9yYWwnLFxuICAgICdmdW5jdGlvbmFsJyxcbiAgICAnZG9tYWluJyxcbiAgICAnYWN0aW9uJ1xuICBdO1xuICBkYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KFtdKTtcbiAgcG9ydGFsRGF0YTogYW55XG4gIGFjdGl2ZVJvd0VsZW1lbnQ6IGFueVxuICByZXF1ZXN0RGF0YTogYW55XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLCBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhciwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgKSB7XG5cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucG9ydGFsRGF0YSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YVsncGFyZW50RGF0YSddXG4gICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ3JlcXVlc3RfaWQnKTtcblxuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ3NvdXJjZScpO1xuXG4gICAgaWYgKHNvdXJjZSA9PT0gJ21kbycpIHtcbiAgICAgIHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YT8uZnJvbVBvcnRhbCA9PT0gJ21kbydcbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mcm9tTWRvUG9ydGFsID0gdHJ1ZVxuICAgICAgdGhpcy5yZXF1ZXN0RGF0YSA9IHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YS5yZXF1ZXN0Um93RGF0YVxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlcXVlc3REYXRhID0gdGhpcy5wb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhLnJlcXVlc3RSb3dEYXRhXG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2UubWRvQmFzZVVybCA9IHRoaXMucG9ydGFsRGF0YT8uY29uZmlnRGV0YWlscz8ubWRvUGF0aFxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLm1kb0NvbmZpZ0RldGFpbHMgPSB0aGlzLnBvcnRhbERhdGE/LmNvbmZpZ0RldGFpbHNcbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5iYXNlVXJsID0gdGhpcy5wb3J0YWxEYXRhPy5jb25maWdEZXRhaWxzPy5tZG9QYXRoICsgXCIvXCJcbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jb25maWdEZXRhaWxzID0gdGhpcy5wb3J0YWxEYXRhPy5jb25maWdEZXRhaWxzXG4gICAgICB0aGlzLmdldE1ET1JlcXVlc3REZXRhaWxzKHJlcXVlc3RJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2V0UmVxdWVzdERldGFpbHMocmVxdWVzdElkKTtcbiAgICB9XG5cbiAgICAvLyBpZiAodGhpcy5wb3J0YWxEYXRhICYmIHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YSAmJiB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGE/LmZyb21Qb3J0YWwgJiZcbiAgICAvLyAgIHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YT8uZnJvbVBvcnRhbCA9PT0gJ21kbydcblxuXG4gICAgLy8gKSB7XG5cbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgaWYgKHJlcXVlc3RJZCkge1xuICAgIC8vICAgICB0aGlzLmdldFJlcXVlc3REZXRhaWxzKHJlcXVlc3RJZCk7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG5cbiAgfVxuXG5cbiAgZ2V0UmVxdWVzdERldGFpbHMocmVxdWVzdElkKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS52aWV3QXBwcm92YWxSZXF1ZXN0cyhyZXF1ZXN0SWQpLnN1YnNjcmliZSh7XG5cbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygncmVzJywgcmVzKVxuICAgICAgICB0aGlzLnJlcXVlc3QgPSByZXNcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShyZXM/Lml0ZW1zKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplVGFibGVGaWx0ZXIoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgICAgICB9LCAxMDApO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignRmFpbGVkIHRvIGxvYWQgdGhlIGFwcHJvdmFsIHJlcXVlc3QgaW5mb3JtYXRpb24uJywgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0TURPUmVxdWVzdERldGFpbHMocmVxdWVzdElkKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS52aWV3TURPQXBwcm92YWxSZXF1ZXN0cyhyZXF1ZXN0SWQpLnN1YnNjcmliZSh7XG5cbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygncmVzJywgcmVzKVxuICAgICAgICB0aGlzLnJlcXVlc3QgPSByZXNcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShyZXM/Lml0ZW1zKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplVGFibGVGaWx0ZXIoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgICAgICB9LCAxMDApO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignRmFpbGVkIHRvIGxvYWQgdGhlIGFwcHJvdmFsIHJlcXVlc3QgaW5mb3JtYXRpb24uJywgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICB0b2dnbGVSZXNwb25zaWJpbGl0eUV4cGFuZChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRlZFJlc3BvbnNpYmlsaXR5Um93c1tpZF0gPSAhdGhpcy5leHBhbmRlZFJlc3BvbnNpYmlsaXR5Um93c1tpZF07XG4gIH1cblxuICBpc1Jlc3BvbmlzYmlsaXR5RXhwYW5kZWQoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXG5cbiAgICAvLyBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKExpc3RQb3B1cENvbXBvbmVudCwge1xuICAgIC8vICAgd2lkdGg6ICcxMDAwcHgnLFxuICAgIC8vICAgZGF0YTogdGhpcy5hY3RpdmVSb3dFbGVtZW50LFxuICAgIC8vICAgIHBhbmVsQ2xhc3M6ICd2aWV3LWNicC1wbGFuLXBvcHVwJyxcbiAgICAvLyAgIG1pbkhlaWdodDogJzQwMHB4JywgICAgICAgICAgLy8gU2V0IG1pbmltdW0gaGVpZ2h0XG4gICAgLy8gICBtYXhIZWlnaHQ6ICc5MHZoJywgICAgICAgICAgIC8vIFByZXZlbnQgaXQgZnJvbSBnb2luZyBiZXlvbmQgdmlld3BvcnRcbiAgICAvLyAgIGRpc2FibGVDbG9zZTogdHJ1ZSAvLyBPcHRpb25hbDogcHJldmVudCBjbG9zaW5nIHdpdGggb3V0c2lkZSBjbGlja1xuICAgIC8vIH0pO1xuXG4gICAgLy8gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgLy8gICByZXR1cm4gZmFsc2VcbiAgICAvLyB9KTtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRlZFJlc3BvbnNpYmlsaXR5Um93c1tpZF07XG4gIH1cblxuICB0b2dnbGVBY3Rpdml0eUV4cGFuZChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRlZEFjdGl2aXR5Um93c1tpZF0gPSAhdGhpcy5leHBhbmRlZEFjdGl2aXR5Um93c1tpZF07XG4gIH1cblxuICBpc0FjdGl2aXR5RXhwYW5kZWQoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkQWN0aXZpdHlSb3dzW2lkXTtcbiAgfVxuXG4gIGdldENvbXBldGVuY2llc0J5VHlwZShjb21wZXRlbmNpZXM6IGFueVtdLCB0eXBlOiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgcmV0dXJuIGNvbXBldGVuY2llcz8uZmlsdGVyKGMgPT4gYy50eXBlID09PSB0eXBlKSB8fCBbXTtcbiAgfVxuXG4gIGJhY2tUb0FwcHJvdmFsUmVxdWVzdCgpIHtcbiAgICBpZiAodGhpcy5wb3J0YWxEYXRhICYmIHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YSAmJiB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGE/LmZyb21Qb3J0YWwgJiZcbiAgICAgIHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YT8uZnJvbVBvcnRhbCA9PT0gJ21kbydcblxuICAgICkge1xuICAgICAgaGlzdG9yeS5iYWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FpL2FwcHJvdmUtcmVxdWVzdHMnXSk7XG4gICAgfVxuXG4gIH1cblxuICBhcHBseUZpbHRlcigpOiB2b2lkIHtcblxuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gKHRoaXMuc2VhcmNoVGV4dCB8fCAnJylcbiAgICAgIC50cmltKClcbiAgICAgIC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgdGhpcy5kYXRhU291cmNlLmZpbHRlciA9IGZpbHRlclZhbHVlO1xuXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTZWFyY2goKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgdGhpcy5kYXRhU291cmNlLmZpbHRlciA9ICcnO1xuXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XG4gICAgfVxuICB9XG5cbiAgaW5pdGlhbGl6ZVRhYmxlRmlsdGVyKCk6IHZvaWQge1xuXG4gICAgdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IChkYXRhOiBhbnksIGZpbHRlcjogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG5cbiAgICAgIGNvbnN0IGRlc2lnbmF0aW9uID1cbiAgICAgICAgKGRhdGE/LmRlc2lnbmF0aW9uX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGNvbnN0IHdpbmcgPVxuICAgICAgICAoZGF0YT8ud2luZ19kaXZpc2lvbl9zZWN0aW9uIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBjb25zdCByZXNwb25zaWJpbGl0aWVzID1cbiAgICAgICAgKGRhdGE/LnJvbGVfcmVzcG9uc2liaWxpdGllcyB8fCBbXSlcbiAgICAgICAgICAuam9pbignICcpXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGNvbnN0IGFjdGl2aXRpZXMgPVxuICAgICAgICAoZGF0YT8uYWN0aXZpdGllcyB8fCBbXSlcbiAgICAgICAgICAuam9pbignICcpXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGNvbnN0IGNvbXBldGVuY2llcyA9XG4gICAgICAgIChkYXRhPy5jb21wZXRlbmNpZXMgfHwgW10pXG4gICAgICAgICAgLm1hcCgoYzogYW55KSA9PlxuICAgICAgICAgICAgYCR7Yz8udGhlbWUgfHwgJyd9ICR7Yz8uc3ViX3RoZW1lIHx8ICcnfWBcbiAgICAgICAgICApXG4gICAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBjb25zdCBjb21iaW5lZFRleHQgPSBgXG4gICAgICAke2Rlc2lnbmF0aW9ufVxuICAgICAgJHt3aW5nfVxuICAgICAgJHtyZXNwb25zaWJpbGl0aWVzfVxuICAgICAgJHthY3Rpdml0aWVzfVxuICAgICAgJHtjb21wZXRlbmNpZXN9XG4gICAgYDtcblxuICAgICAgcmV0dXJuIGNvbWJpbmVkVGV4dC5pbmNsdWRlcyhmaWx0ZXIpO1xuICAgIH07XG4gIH1cblxuXG4gIG9wZW5GdWxsTGlzdChlbGVtZW50OiBhbnksIHR5cGU6IGFueSkge1xuICAgIGNvbnN0IGxpc3RUb1Nob3c6IHN0cmluZ1tdID0gZWxlbWVudFt0eXBlXSB8fCBbXTtcbiAgICBjb25zdCB0aXRsZSA9IHR5cGUgPT09ICdyb2xlX3Jlc3BvbnNpYmlsaXRpZXMnID8gJ1JvbGUgJiBSZXNwb25zaWJpbGl0aWVzJyA6ICdBY3Rpdml0aWVzJztcblxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTGlzdFBvcHVwQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzYwMHB4JyxcbiAgICAgIGRhdGE6IHsgZWxlbWVudDogZWxlbWVudCwgdHlwZTogdHlwZSB9LFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgbWF4SGVpZ2h0OiAnODB2aCdcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAvLyBObyBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgaGVyZSB0byByZXNldCBpbmxpbmUgZXhwYW5kZWQgc3RhdGVcbiAgICAgIC8vIEJlY2F1c2UgeW91J3JlIHVzaW5nIGRpYWxvZywgbm90IGlubGluZSBleHBhbmQg4oCTIHZpZXcgcmVtYWlucyBpbiBpbml0aWFsIChjb2xsYXBzZWQpIHN0YXRlXG4gICAgfSk7XG4gIH1cblxuXG5cbiAgZWRpdFJvbGVNYXBwaW5nKGVsZW1lbnQ6IGFueSwgbWVudVRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyKSB7XG4gICAgbWVudVRyaWdnZXIuY2xvc2VNZW51KCk7XG4gICAgdGhpcy5hY3RpdmVSb3dFbGVtZW50ID0gZWxlbWVudFxuICAgIGNvbnNvbGUubG9nKCdFZGl0IFJvbGUgTWFwcGluZyBjbGlja2VkJywgZWxlbWVudCk7XG4gICAgLy8gTmF2aWdhdGUgb3Igb3BlbiBtb2RhbFxuICAgIGNvbnNvbGUubG9nKCdWaWV3IENCUCBQbGFuIGNsaWNrZWQnLCBlbGVtZW50KTtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEVkaXRDYnBQbGFuQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzEwMDBweCcsXG4gICAgICBkYXRhOiB7IHJlcXVlc3REYXRhOiB0aGlzLnJlcXVlc3REYXRhLCBlbGVtZW50OiBlbGVtZW50IH0sXG4gICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsXG4gICAgICBtaW5IZWlnaHQ6ICczMDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgbWF4SGVpZ2h0OiAnODB2aCcsICAgICAgICAgICAvLyBQcmV2ZW50IGl0IGZyb20gZ29pbmcgYmV5b25kIHZpZXdwb3J0XG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUgLy8gT3B0aW9uYWw6IHByZXZlbnQgY2xvc2luZyB3aXRoIG91dHNpZGUgY2xpY2tcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgLy8gaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgLy8gICBjb25zb2xlLmxvZygnQ2hhbmdlcyBzYXZlZCEnKTtcbiAgICAgIC8vICAgLy8gUmVmcmVzaCBkYXRhIG9yIHNob3cgYSB0b2FzdCBoZXJlXG5cbiAgICAgIC8vIH1cbiAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdyZXF1ZXN0X2lkJyk7XG4gICAgICBpZiAodGhpcy5wb3J0YWxEYXRhICYmIHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YSAmJiB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGE/LmZyb21Qb3J0YWwgJiZcbiAgICAgICAgdGhpcy5wb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhPy5mcm9tUG9ydGFsID09PSAnbWRvJ1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZ2V0TURPUmVxdWVzdERldGFpbHMocmVxdWVzdElkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHZpZXdDQlBQbGFuKGVsZW1lbnQ6IGFueSwgbWVudVRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyKSB7XG4gICAgbWVudVRyaWdnZXIuY2xvc2VNZW51KCk7XG4gICAgdGhpcy5hY3RpdmVSb3dFbGVtZW50ID0gZWxlbWVudFxuICAgIGNvbnNvbGUubG9nKCdWaWV3IENCUCBQbGFuIGNsaWNrZWQnLCBlbGVtZW50KTtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFZpZXdDYnBQbGFuQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzEwMDBweCcsXG4gICAgICBkYXRhOiBlbGVtZW50LFxuICAgICAgcGFuZWxDbGFzczogJ3ZpZXctY2JwLXBsYW4tcG9wdXAnLFxuICAgICAgbWluSGVpZ2h0OiAnMzAwcHgnLCAgICAgICAgICAvLyBTZXQgbWluaW11bSBoZWlnaHRcbiAgICAgIG1heEhlaWdodDogJzgwdmgnLCAgICAgICAgICAgLy8gUHJldmVudCBpdCBmcm9tIGdvaW5nIGJleW9uZCB2aWV3cG9ydFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlIC8vIE9wdGlvbmFsOiBwcmV2ZW50IGNsb3Npbmcgd2l0aCBvdXRzaWRlIGNsaWNrXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT09ICdzYXZlZCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0NoYW5nZXMgc2F2ZWQhJyk7XG4gICAgICAgIC8vIFJlZnJlc2ggZGF0YSBvciBzaG93IGEgdG9hc3QgaGVyZVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdmlld0NvdXJzZVJlY29tbWVuZGF0aW9uKGVsZW1lbnQsIG1lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcikge1xuICAgIGNvbnNvbGUubG9nKCdWaWV3IENvdXJzZSBSZWNvbW1lbmRhdGlvbiBjbGlja2VkJywgZWxlbWVudCk7XG4gICAgbWVudVRyaWdnZXIuY2xvc2VNZW51KCk7XG4gICAgdGhpcy5hY3RpdmVSb3dFbGVtZW50ID0gZWxlbWVudFxuICAgIGNvbnNvbGUubG9nKCdFZGl0IFJvbGUgTWFwcGluZyBjbGlja2VkJywgZWxlbWVudCk7XG4gICAgLy8gTmF2aWdhdGUgb3Igb3BlbiBtb2RhbFxuICAgIGNvbnNvbGUubG9nKCdWaWV3IENCUCBQbGFuIGNsaWNrZWQnLCBlbGVtZW50KTtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFZpZXdDb3Vyc2VSZWNvbW1lbmRhdGlvbkNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICcxMDAwcHgnLFxuICAgICAgZGF0YTogZWxlbWVudCxcbiAgICAgIHBhbmVsQ2xhc3M6ICd2aWV3LWNicC1wbGFuLXBvcHVwJyxcbiAgICAgIG1pbkhlaWdodDogJzQwMHB4JywgICAgICAgICAgLy8gU2V0IG1pbmltdW0gaGVpZ2h0XG4gICAgICBtYXhIZWlnaHQ6ICc5MHZoJywgICAgICAgICAgIC8vIFByZXZlbnQgaXQgZnJvbSBnb2luZyBiZXlvbmQgdmlld3BvcnRcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSAvLyBPcHRpb25hbDogcHJldmVudCBjbG9zaW5nIHdpdGggb3V0c2lkZSBjbGlja1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDaGFuZ2VzIHNhdmVkIScpO1xuICAgICAgICAvLyBSZWZyZXNoIGRhdGEgb3Igc2hvdyBhIHRvYXN0IGhlcmVcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iailcbiAgICAgICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ3JlcXVlc3RfaWQnKTtcbiAgICAgICAgaWYgKHRoaXMucG9ydGFsRGF0YSAmJiB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGEgJiYgdGhpcy5wb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhPy5mcm9tUG9ydGFsICYmXG4gICAgICAgICAgdGhpcy5wb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhPy5mcm9tUG9ydGFsID09PSAnbWRvJ1xuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmdldE1ET1JlcXVlc3REZXRhaWxzKHJlcXVlc3RJZCk7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXBwcm92ZUFuZFB1Ymxpc2goKSB7XG4gICAgY29uc29sZS5sb2coJ2FwcHJvdmVBbmRQdWJsaXNoIGNsaWNrZWQnLCB0aGlzLnJlcXVlc3REYXRhKTtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFB1Ymxpc2hBcHByb3ZlUmVxdWVzdEZvcm1Db21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNzUwcHgnLFxuICAgICAgbWF4V2lkdGg6ICc5MHZ3JyxcbiAgICAgIGRhdGE6IHRoaXMucmVxdWVzdERhdGEsXG4gICAgICBwYW5lbENsYXNzOiAncHVibGlzaC1yZXF1ZXN0LXBvcHVwJyxcbiAgICAgIG1pbkhlaWdodDogJzQwMHB4JywgICAgICAgICAgLy8gU2V0IG1pbmltdW0gaGVpZ2h0XG4gICAgICBtYXhIZWlnaHQ6ICc5MHZoJywgICAgICAgICAgIC8vIFByZXZlbnQgaXQgZnJvbSBnb2luZyBiZXlvbmQgdmlld3BvcnRcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSAvLyBPcHRpb25hbDogcHJldmVudCBjbG9zaW5nIHdpdGggb3V0c2lkZSBjbGlja1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDaGFuZ2VzIHNhdmVkIScpO1xuICAgICAgICAvLyBSZWZyZXNoIGRhdGEgb3Igc2hvdyBhIHRvYXN0IGhlcmVcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iailcbiAgICAgICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ3JlcXVlc3RfaWQnKTtcbiAgICAgICAgaWYgKHRoaXMucG9ydGFsRGF0YSAmJiB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGEgJiYgdGhpcy5wb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhPy5mcm9tUG9ydGFsICYmXG4gICAgICAgICAgdGhpcy5wb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhPy5mcm9tUG9ydGFsID09PSAnbWRvJ1xuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmdldE1ET1JlcXVlc3REZXRhaWxzKHJlcXVlc3RJZCk7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICByZWplY3RSZXF1ZXN0KCkge1xuICAgIGNvbnNvbGUubG9nKCdhcHByb3ZlQW5kUHVibGlzaCBjbGlja2VkJywgdGhpcy5yZXF1ZXN0RGF0YSk7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihSZWplY3RSZXF1ZXN0Rm9ybUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc3NTBweCcsXG4gICAgICBtYXhXaWR0aDogJzkwdncnLFxuICAgICAgZGF0YTogdGhpcy5yZXF1ZXN0RGF0YSxcbiAgICAgIHBhbmVsQ2xhc3M6ICdwdWJsaXNoLXJlcXVlc3QtcG9wdXAnLFxuICAgICAgbWluSGVpZ2h0OiAnNDAwcHgnLCAgICAgICAgICAvLyBTZXQgbWluaW11bSBoZWlnaHRcbiAgICAgIG1heEhlaWdodDogJzkwdmgnLCAgICAgICAgICAgLy8gUHJldmVudCBpdCBmcm9tIGdvaW5nIGJleW9uZCB2aWV3cG9ydFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlIC8vIE9wdGlvbmFsOiBwcmV2ZW50IGNsb3Npbmcgd2l0aCBvdXRzaWRlIGNsaWNrXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT09ICdzYXZlZCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0NoYW5nZXMgc2F2ZWQhJyk7XG4gICAgICAgIC8vIFJlZnJlc2ggZGF0YSBvciBzaG93IGEgdG9hc3QgaGVyZVxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqKVxuICAgICAgICBjb25zdCByZXF1ZXN0SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncmVxdWVzdF9pZCcpO1xuICAgICAgICBpZiAodGhpcy5wb3J0YWxEYXRhICYmIHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YSAmJiB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGE/LmZyb21Qb3J0YWwgJiZcbiAgICAgICAgICB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGE/LmZyb21Qb3J0YWwgPT09ICdtZG8nXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZ2V0TURPUmVxdWVzdERldGFpbHMocmVxdWVzdElkKTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfSk7XG5cbiAgfVxuXG4gIHJlamVjdEl0ZW1SZXF1ZXN0KGVsZW1lbnQsIG1lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcikge1xuICAgIGNvbnNvbGUubG9nKCdhcHByb3ZlQW5kUHVibGlzaCBjbGlja2VkJywgZWxlbWVudCk7XG5cbiAgICBjb25zb2xlLmxvZygnVmlldyBDb3Vyc2UgUmVjb21tZW5kYXRpb24gY2xpY2tlZCcsIGVsZW1lbnQpO1xuICAgIG1lbnVUcmlnZ2VyLmNsb3NlTWVudSgpO1xuICAgIHRoaXMuYWN0aXZlUm93RWxlbWVudCA9IGVsZW1lbnRcbiAgICBjb25zb2xlLmxvZygnRWRpdCBSb2xlIE1hcHBpbmcgY2xpY2tlZCcsIGVsZW1lbnQpO1xuICAgIC8vIE5hdmlnYXRlIG9yIG9wZW4gbW9kYWxcbiAgICBjb25zb2xlLmxvZygnVmlldyBDQlAgUGxhbiBjbGlja2VkJywgZWxlbWVudCk7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihSZWplY3RJdGVtUmVxdWVzdEZvcm1Db21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNzUwcHgnLFxuICAgICAgbWF4V2lkdGg6ICc5MHZ3JyxcbiAgICAgIGRhdGE6IHsgcmVxdWVzdERhdGE6IHRoaXMucmVxdWVzdERhdGEsIGVsZW1lbnQ6IGVsZW1lbnQgfSxcbiAgICAgIHBhbmVsQ2xhc3M6ICdwdWJsaXNoLXJlcXVlc3QtcG9wdXAnLFxuICAgICAgbWluSGVpZ2h0OiAnNDAwcHgnLCAgICAgICAgICAvLyBTZXQgbWluaW11bSBoZWlnaHRcbiAgICAgIG1heEhlaWdodDogJzkwdmgnLCAgICAgICAgICAgLy8gUHJldmVudCBpdCBmcm9tIGdvaW5nIGJleW9uZCB2aWV3cG9ydFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlIC8vIE9wdGlvbmFsOiBwcmV2ZW50IGNsb3Npbmcgd2l0aCBvdXRzaWRlIGNsaWNrXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT09ICdzYXZlZCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0NoYW5nZXMgc2F2ZWQhJyk7XG4gICAgICAgIC8vIFJlZnJlc2ggZGF0YSBvciBzaG93IGEgdG9hc3QgaGVyZVxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqKVxuICAgICAgICBjb25zdCByZXF1ZXN0SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncmVxdWVzdF9pZCcpO1xuICAgICAgICBpZiAodGhpcy5wb3J0YWxEYXRhICYmIHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YSAmJiB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGE/LmZyb21Qb3J0YWwgJiZcbiAgICAgICAgICB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGE/LmZyb21Qb3J0YWwgPT09ICdtZG8nXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZ2V0TURPUmVxdWVzdERldGFpbHMocmVxdWVzdElkKTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfSk7XG5cbiAgfVxuXG4gIHJlUHVibGlzaChlbGVtZW50KSB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ3JlcXVlc3RfaWQnKTtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgXCJyZXF1ZXN0X2lkXCI6IHJlcXVlc3RJZCxcbiAgICAgIFwiaXRlbV9pZFwiOiBlbGVtZW50Py5kZW1hbmRfaWRcblxuICAgIH1cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UucmVqZWN0SXRlbU1ET0FwcHJvdmFsUmVxdWVzdHMocGF5bG9hZClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdSZWplY3QgUmVzcG9uc2UgPT4nLCByZXMpO1xuXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgICAgICAgJ1JlcXVlc3QgUmVwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICAgICAgICAgICdYJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh0aGlzLnBvcnRhbERhdGEgJiYgdGhpcy5wb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhICYmIHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YT8uZnJvbVBvcnRhbCAmJlxuICAgICAgICAgICAgdGhpcy5wb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhPy5mcm9tUG9ydGFsID09PSAnbWRvJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5nZXRNRE9SZXF1ZXN0RGV0YWlscyhyZXF1ZXN0SWQpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcblxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgIGVycj8uZXJyb3I/LmRldGFpbCB8fFxuICAgICAgICAgICAgZXJyPy5lcnJvcj8ubWVzc2FnZSB8fFxuICAgICAgICAgICAgJ0ZhaWxlZCB0byByZXB1Ymxpc2ggcmVxdWVzdCc7XG5cbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICAnWCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGR1cmF0aW9uOiA1MDAwLFxuICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICB9XG5cblxufVxuIiwiPGRpdiBjbGFzcz1cInJldmlldy1jb250YWluZXJcIj5cblxuICAgIDwhLS0gSEVBREVSIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJwYWdlLWhlYWRlclwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImJhY2staWNvblwiIChjbGljayk9XCJiYWNrVG9BcHByb3ZhbFJlcXVlc3QoKVwiPmFycm93X2JhY2s8L21hdC1pY29uPlxuXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlJldmlldyBSZXF1ZXN0PC9wPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicmVxdWVzdC1pZFwiPnt7cmVxdWVzdD8uaWR9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLWJhZGdlXCIgKm5nSWY9XCIocmVxdWVzdD8uc3RhdHVzID09PSAncGVuZGluZycgfHwgcmVxdWVzdD8uc3RhdHVzID09PSAnUEVORElORycgKVwiPlxuICAgICAgICAgICAge3tyZXF1ZXN0Py5zdGF0dXMgfCB0aXRsZWNhc2V9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1cy1iYWRnZS1zdWNjZXNzXCIgKm5nSWY9XCIocmVxdWVzdD8uc3RhdHVzID09PSAnYXBwcm92ZWQnIHx8IHJlcXVlc3Q/LnN0YXR1cyA9PT0gJ0FQUFJPVkVEJyApXCI+XG4gICAgICAgICAgICB7e3JlcXVlc3Q/LnN0YXR1cyB8IHRpdGxlY2FzZX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLWJhZGdlLXJlamVjdGVkXCIgKm5nSWY9XCIocmVxdWVzdD8uc3RhdHVzID09PSAncmVqZWN0ZWQnIHx8IHJlcXVlc3Q/LnN0YXR1cyA9PT0gJ1JFSkVDVEVEJyApXCI+XG4gICAgICAgICAgICB7e3JlcXVlc3Q/LnN0YXR1cyB8IHRpdGxlY2FzZX19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiKHJlcXVlc3Q/LnN0YXR1cyA9PT0gJ3BlbmRpbmcnIHx8IHJlcXVlc3Q/LnN0YXR1cyA9PT0gJ1BFTkRJTkcnICkgJiYgcG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YT8uZnJvbVBvcnRhbCA9PT0gJ21kbydcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnRuLXdyYXBwZXJcIj5cblxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY2xhc3M9XCJhcHByb3ZlLWJ0blwiIChjbGljayk9XCJhcHByb3ZlQW5kUHVibGlzaCgpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnB1Ymxpc2g8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICBBcHByb3ZlICYgUHVibGlzaFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJyZWplY3QtYnRuXCIgKGNsaWNrKT1cInJlamVjdFJlcXVlc3QoKVwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIFJlamVjdCBSZXF1ZXN0XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuXG5cbiAgICA8IS0tIFJFUVVFU1QgREVUQUlMUyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiaW5uZXItY29udGFpbmVyXCI+XG4gICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cImRldGFpbHMtY2FyZFwiPlxuXG4gICAgICAgICAgICA8cCBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5SZXF1ZXN0IERldGFpbHM8L3A+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzLWdyaWRcIj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtYm94XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj50YWc8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJsYWJlbFwiPlJlcXVlc3QgSUQ8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInZhbHVlXCI+e3tyZXF1ZXN0Py5pZH19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtYm94XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hc3NpZ25tZW50PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibGFiZWxcIj5SZXF1ZXN0IE5hbWU8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInZhbHVlXCI+e3tyZXF1ZXN0Py5yZXF1ZXN0X25hbWV9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLWJveFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+bWFpbDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImxhYmVsXCI+UmVxdWVzdGVkIEJ5PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ2YWx1ZVwiPnt7cmVxdWVzdD8udXNlcj8uZW1haWx9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLWJveFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZXZlbnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJsYWJlbFwiPlN1Ym1pdHRlZCBPbjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidmFsdWVcIj57e3JlcXVlc3Q/LmNyZWF0ZWRfYXQgfCBkYXRlOiAnTU1NIGQsIHkgaGg6bW06cyBhJ319PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtYm94XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5wZXJzb248L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJsYWJlbFwiPk5vLiBvZiBEZXNpZ25hdGlvbnM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInZhbHVlXCI+e3tyZXF1ZXN0Py5kZXNpZ25hdGlvbl9jb3VudH19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlciBjbGFzcz1cImRpdmlkZXJcIj48L21hdC1kaXZpZGVyPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3JnYW5pemF0aW9uXCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJsYWJlbFwiPk9yZ2FuaXphdGlvbjwvcD5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm9yZy12YWx1ZVwiPnt7cmVxdWVzdD8uc3RhdGVfY2VudGVyX25hbWV9fSA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyZXF1ZXN0Py5kZXBhcnRtZW50X25hbWVcIj57e3JlcXVlc3Q/LmRlcGFydG1lbnRfbmFtZX19PC9zcGFuPjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvbWF0LWNhcmQ+XG5cblxuICAgICAgICA8IS0tIFJPTEUgTUFQUElORyBTRUNUSU9OIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm9sZS1oZWFkZXJcIj5cblxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5Sb2xlIE1hcHBpbmdzIGZvciBSZXZpZXc8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoIGZsZXggbWFyZ2luLXJpZ2h0LW1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJzZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci02MCBzZWFyY2gtaWNvbiBtYXQtaWNvbiBub3RyYW5zbGF0ZSBtYXRlcmlhbC1pY29ucyBtYXQtaWNvbi1uby1jb2xvclwiPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwic2lucHV0IGNvbG9yLTYwIHctZnVsbFwiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIGxhYmVsPVwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImFwcGx5RmlsdGVyKClcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBieSBkZXNpZ25hdGlvbiBuYW1lXCIgdHlwZT1cIlN0YW5kYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItNjAgY2xlYXItaWNvbiBtYXQtaWNvbiBub3RyYW5zbGF0ZSBtYXRlcmlhbC1pY29ucyBtYXQtaWNvbi1uby1jb2xvciBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNlYXJjaCgpXCI+Y2xlYXI8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGwtMiBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtkaXNhYmxlZF09XCJzZWFyY2hUZXh0LnRyaW0oKT8ubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VhcmNoVGV4dC50cmltKCk/Lmxlbmd0aCA9PT0gMCA/ICdidG4tZGlzYWJsZSc6J2J0bi1hY3RpdmUnXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiU2VhcmNoXCIgKGNsaWNrKT1cImFwcGx5RmlsdGVyKClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNsYXNzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YVNvdXJjZT8uZGF0YT8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXIgbXQtNFwiIHN0eWxlPVwib3ZlcmZsb3c6IGF1dG87XCI+XG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MSB0YWJsZS1ib2R5XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZGVzaWduYXRpb25fbmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRhYmxlLWhlYWRlclwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gRGVzaWduYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ2aWV3Q0JQUGxhbihlbGVtZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJhY3RpdmVUYWIgPT09ICdtYXRjaGVkJz8gJ2Rlc2lnbmF0aW9uLXRleHQnOiAnZGVzaWduYXRpb24tdGV4dC11bm1hdGNoZWQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImRlc2lnbmF0aW9uXCI+e3sgZWxlbWVudD8uZGVzaWduYXRpb25fbmFtZSB9fSA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIndpbmctdGV4dCBtdC0yXCI+V2luZy9EaXZpc2lvbiAtIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudD8ud2luZ19kaXZpc2lvbl9zZWN0aW9uIH19IDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKGVsZW1lbnQ/LnN0YXR1cyA9PT0gJ2ZhaWxlZCcgfHwgZWxlbWVudD8uc3RhdHVzID09PSAnRkFJTEVEJykgJiYgcG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YT8uZnJvbVBvcnRhbCA9PT0gJ21kbydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY2xhc3M9XCJhcHByb3ZlLWJ0blwiIChjbGljayk9XCJyZVB1Ymxpc2goZWxlbWVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHVibGlzaDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmUtUHVibGlzaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJyb2xlX3Jlc3BvbnNpYmlsaXRpZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggW25nQ2xhc3NdPVwiYWN0aXZlVGFiID09PSAnbWF0Y2hlZCc/ICd0YWJsZS1oZWFkZXInOiAndGFibGUtaGVhZGVyLXVubWF0Y2hlZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IFJvbGUgJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNwb25zaWJpbGl0aWVzIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicm9sZS1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcm9sZSBvZiAoaXNSZXNwb25pc2JpbGl0eUV4cGFuZGVkKGVsZW1lbnQuaWQpID8gZWxlbWVudC5yb2xlX3Jlc3BvbnNpYmlsaXRpZXMgOiBlbGVtZW50LnJvbGVfcmVzcG9uc2liaWxpdGllcy5zbGljZSgwLCAyKSk7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2krMX19LiB7eyByb2xlIH19PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImVsZW1lbnQucm9sZV9yZXNwb25zaWJpbGl0aWVzLmxlbmd0aCA+IDJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmlldy1tb3JlLWxlc3MgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRnVsbExpc3QoZWxlbWVudCwgJ3JvbGVfcmVzcG9uc2liaWxpdGllcycpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjogIzFCNENBMTtmb250LXNpemU6IDE2cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgTW9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJhY3Rpdml0aWVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIFtuZ0NsYXNzXT1cImFjdGl2ZVRhYiA9PT0gJ21hdGNoZWQnPyAndGFibGUtaGVhZGVyJzogJ3RhYmxlLWhlYWRlci11bm1hdGNoZWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiBBY3Rpdml0aWVzIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicm9sZS1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aXZpdHkgb2YgKGlzQWN0aXZpdHlFeHBhbmRlZChlbGVtZW50LmlkKSA/IGVsZW1lbnQuYWN0aXZpdGllcyA6IGVsZW1lbnQuYWN0aXZpdGllcy5zbGljZSgwLCAyKSk7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2krMX19LiB7eyBhY3Rpdml0eSB9fTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJlbGVtZW50LmFjdGl2aXRpZXMubGVuZ3RoID4gMlwiIGNsYXNzPVwidmlldy1tb3JlLWxlc3MgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRnVsbExpc3QoZWxlbWVudCwgJ2FjdGl2aXR5JylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjMUI0Q0ExO2ZvbnQtc2l6ZTogMTZweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBNb3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImJlaGF2aW9yYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggW25nQ2xhc3NdPVwiYWN0aXZlVGFiID09PSAnbWF0Y2hlZCc/ICd0YWJsZS1oZWFkZXInOiAndGFibGUtaGVhZGVyLXVubWF0Y2hlZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IEJlaGF2aW9yYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGV0ZW5jaWVzIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY29tcGV0ZW5jeS1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJiZWhhdmlvdXJhbC1waWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXRDb21wZXRlbmNpZXNCeVR5cGUoZWxlbWVudC5jb21wZXRlbmNpZXMsICdCZWhhdmlvcmFsJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dC1iZWhhdmlvcmFsXCI+IHt7IGNvbXAudGhlbWUgfX0gLSB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLnN1Yl90aGVtZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZnVuY3Rpb25hbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBbbmdDbGFzc109XCJhY3RpdmVUYWIgPT09ICdtYXRjaGVkJz8gJ3RhYmxlLWhlYWRlcic6ICd0YWJsZS1oZWFkZXItdW5tYXRjaGVkJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gRnVuY3Rpb25hbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wZXRlbmNpZXMgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjb21wZXRlbmN5LWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImZ1bmN0aW9uYWwtcGlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKGVsZW1lbnQuY29tcGV0ZW5jaWVzLCAnRnVuY3Rpb25hbCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRleHQtZnVuY3Rpb25hbFwiPiB7eyBjb21wLnRoZW1lIH19IC0ge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcC5zdWJfdGhlbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZG9tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIFtuZ0NsYXNzXT1cImFjdGl2ZVRhYiA9PT0gJ21hdGNoZWQnPyAndGFibGUtaGVhZGVyJzogJ3RhYmxlLWhlYWRlci11bm1hdGNoZWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiBEb21haW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGV0ZW5jaWVzIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY29tcGV0ZW5jeS1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJkb21haW4tcGlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKGVsZW1lbnQuY29tcGV0ZW5jaWVzLCAnRG9tYWluJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dC1kb21haW5cIj4ge3sgY29tcC50aGVtZSB9fSAtIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXAuc3ViX3RoZW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFjdGlvbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImFjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBbbmdDbGFzc109XCJhY3RpdmVUYWIgPT09ICdtYXRjaGVkJz8gJ3RhYmxlLWhlYWRlcic6ICd0YWJsZS1oZWFkZXItdW5tYXRjaGVkJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gQWN0aW9uIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiAjbWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInZpZXdDb3Vyc2VSZWNvbW1lbmRhdGlvbihlbGVtZW50LCBtZW51VHJpZ2dlcilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnByZXZpZXc8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5WaWV3IENvdXJzZSBSZWNvbW1lbmRhdGlvbjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZWRpdFJvbGVNYXBwaW5nKGVsZW1lbnQsIG1lbnVUcmlnZ2VyKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkVkaXQgUm9sZSBNYXBwaW5nPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJ2aWV3Q0JQUGxhbihlbGVtZW50LCBtZW51VHJpZ2dlcilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnZpc2liaWxpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5WaWV3IFJvbGUgTWFwcGluZzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hhcmVkU2VydmljZS5mcm9tTWRvUG9ydGFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJlcXVlc3Q/LnN0YXR1cz8udG9Mb3dlckNhc2UoKSA9PT0gJ3BlbmRpbmcnICYmIHNoYXJlZFNlcnZpY2UuZnJvbU1kb1BvcnRhbFwiIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlamVjdEl0ZW1SZXF1ZXN0KGVsZW1lbnQsIG1lbnVUcmlnZ2VyKVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5zZW5kPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+UmVqZWN0IFJlcXVlc3Q8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1ucztcIj48L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICBjbGFzcz1cIm5vLWRhdGEtd3JhcHBlclwiXG4gICpuZ0lmPVwiZGF0YVNvdXJjZS5maWx0ZXJlZERhdGEubGVuZ3RoID09PSAwXCI+XG5cbiAgTm8gRGF0YSBGb3VuZFxuXG48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGFTb3VyY2U/LmZpbHRlcmVkRGF0YT8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYWdpbmF0b3IgW2xlbmd0aF09XCJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGhcIiBbcGFnZVNpemVdPVwiNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJbNSwgMTAsIDIwXVwiIHNob3dGaXJzdExhc3RCdXR0b25zPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFnaW5hdG9yPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm92ZXJsYXktbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuPC9kaXY+Il19
408
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2aWV3LXJlcXVlc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvcmV2aWV3LXJlcXVlc3QvcmV2aWV3LXJlcXVlc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvcmV2aWV3LXJlcXVlc3QvcmV2aWV3LXJlcXVlc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWhGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ3BILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVExQyxNQUFNLE9BQU8sc0JBQXNCO0lBc0JqQyxZQUFtQixhQUE0QixFQUFVLFFBQXFCLEVBQVUsS0FBcUIs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RUFBRSxhQUFhLEVBQUUsVUFBVSxLQUFLLEtBQUssRUFDcEQ7b0JBQ0EsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN0QztZQUVILENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUVuQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtnQkFDcEIsTUFBTSxZQUFZLEdBQ2hCLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTTtvQkFDbEIsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPO29CQUNuQiw2QkFBNkIsQ0FBQztnQkFFaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLFlBQVksRUFDWixHQUFHLEVBQ0g7b0JBQ0UsUUFBUSxFQUFFLElBQUk7b0JBQ2QsVUFBVSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQy9CLENBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDLENBQUM7SUFFUCxDQUFDOytHQTdkVSxzQkFBc0I7bUdBQXRCLHNCQUFzQixxR0FNdEIsWUFBWSxnREM1QnpCLHN2ZkFpVU07OzRGRDNTTyxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0Usb0JBQW9CO3dNQVVMLFNBQVM7c0JBQWpDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgVmlld0NicFBsYW5Db21wb25lbnQgfSBmcm9tICcuLi92aWV3LWNicC1wbGFuL3ZpZXctY2JwLXBsYW4uY29tcG9uZW50JztcbmltcG9ydCB7IEVkaXRDYnBQbGFuQ29tcG9uZW50IH0gZnJvbSAnLi4vZWRpdC1jYnAtcGxhbi9lZGl0LWNicC1wbGFuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgVmlld0NvdXJzZVJlY29tbWVuZGF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vdmlldy1jb3Vyc2UtcmVjb21tZW5kYXRpb24vdmlldy1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFJlamVjdEl0ZW1SZXF1ZXN0Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL3JlamVjdC1pdGVtLXJlcXVlc3QtZm9ybS9yZWplY3QtaXRlbS1yZXF1ZXN0LWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFB1Ymxpc2hBcHByb3ZlUmVxdWVzdEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9wdWJsaXNoLXJlcXVlc3QtZm9ybS9wdWJsaXNoLWFwcHJvdmUtcmVxdWVzdC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZWplY3RSZXF1ZXN0Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL3JlamVjdC1yZXF1ZXN0LWZvcm0vcmVqZWN0LXJlcXVlc3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlzdFBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vbGlzdC1wb3B1cC9saXN0LXBvcHVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1yZXZpZXctcmVxdWVzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXZpZXctcmVxdWVzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Jldmlldy1yZXF1ZXN0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUmV2aWV3UmVxdWVzdENvbXBvbmVudCB7XG4gIHJlcXVlc3Q6IGFueSA9IHtcbiAgfTtcbiAgc2VhcmNoVGV4dCA9ICcnXG4gIGV4cGFuZGVkUmVzcG9uc2liaWxpdHlSb3dzOiB7IFtpZDogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG4gIGV4cGFuZGVkQWN0aXZpdHlSb3dzOiB7IFtpZDogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKSBwYWdpbmF0b3IhOiBNYXRQYWdpbmF0b3I7XG4gIGxvYWRpbmcgPSBmYWxzZVxuICBhY3RpdmVUYWIgPSAnbWF0Y2hlZCdcbiAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW10gPSBbXG4gICAgJ2Rlc2lnbmF0aW9uX25hbWUnLFxuICAgICdyb2xlX3Jlc3BvbnNpYmlsaXRpZXMnLFxuICAgICdhY3Rpdml0aWVzJyxcbiAgICAnYmVoYXZpb3JhbCcsXG4gICAgJ2Z1bmN0aW9uYWwnLFxuICAgICdkb21haW4nLFxuICAgICdhY3Rpb24nXG4gIF07XG4gIGRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPGFueT4oW10pO1xuICBwb3J0YWxEYXRhOiBhbnlcbiAgYWN0aXZlUm93RWxlbWVudDogYW55XG4gIHJlcXVlc3REYXRhOiBhbnlcbiAgY29uc3RydWN0b3IocHVibGljIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UsIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLCBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICApIHtcblxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5wb3J0YWxEYXRhID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhWydwYXJlbnREYXRhJ11cbiAgICBjb25zdCByZXF1ZXN0SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncmVxdWVzdF9pZCcpO1xuXG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgnc291cmNlJyk7XG5cbiAgICBpZiAoc291cmNlID09PSAnbWRvJykge1xuICAgICAgdGhpcy5wb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhPy5mcm9tUG9ydGFsID09PSAnbWRvJ1xuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZyb21NZG9Qb3J0YWwgPSB0cnVlXG4gICAgIFxuICAgICAgdGhpcy5nZXRNRE9SZXF1ZXN0RGV0YWlscyhyZXF1ZXN0SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldFJlcXVlc3REZXRhaWxzKHJlcXVlc3RJZCk7XG4gICAgfVxuXG4gICAgLy8gaWYgKHRoaXMucG9ydGFsRGF0YSAmJiB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGEgJiYgdGhpcy5wb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhPy5mcm9tUG9ydGFsICYmXG4gICAgLy8gICB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGE/LmZyb21Qb3J0YWwgPT09ICdtZG8nXG5cblxuICAgIC8vICkge1xuXG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIGlmIChyZXF1ZXN0SWQpIHtcbiAgICAvLyAgICAgdGhpcy5nZXRSZXF1ZXN0RGV0YWlscyhyZXF1ZXN0SWQpO1xuICAgIC8vICAgfVxuICAgIC8vIH1cblxuXG4gIH1cblxuXG4gIGdldFJlcXVlc3REZXRhaWxzKHJlcXVlc3RJZCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICAgXG4gICAgXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnZpZXdBcHByb3ZhbFJlcXVlc3RzKHJlcXVlc3RJZCkuc3Vic2NyaWJlKHtcblxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIFxuICAgICAgICBjb25zb2xlLmxvZygncmVzJywgcmVzKVxuICAgICAgICB0aGlzLnJlcXVlc3QgPSByZXNcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShyZXM/Lml0ZW1zKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplVGFibGVGaWx0ZXIoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgICAgICB9LCAxMDApO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignRmFpbGVkIHRvIGxvYWQgdGhlIGFwcHJvdmFsIHJlcXVlc3QgaW5mb3JtYXRpb24uJywgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0TURPUmVxdWVzdERldGFpbHMocmVxdWVzdElkKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgICAgXG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2UubWRvQmFzZVVybCA9IHRoaXMucG9ydGFsRGF0YT8uY29uZmlnRGV0YWlscz8ubWRvUGF0aFxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLm1kb0NvbmZpZ0RldGFpbHMgPSB0aGlzLnBvcnRhbERhdGE/LmNvbmZpZ0RldGFpbHNcbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5iYXNlVXJsID0gdGhpcy5wb3J0YWxEYXRhPy5jb25maWdEZXRhaWxzPy5tZG9QYXRoICsgXCIvXCJcbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jb25maWdEZXRhaWxzID0gdGhpcy5wb3J0YWxEYXRhPy5jb25maWdEZXRhaWxzXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnZpZXdNRE9BcHByb3ZhbFJlcXVlc3RzKHJlcXVlc3RJZCkuc3Vic2NyaWJlKHtcblxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdyZXMnLCByZXMpXG4gICAgICAgIHRoaXMucmVxdWVzdERhdGEgPSByZXNcbiAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlcXVlc3REYXRhID0gcmVzXG4gICAgICAgIHRoaXMucmVxdWVzdCA9IHJlc1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHJlcz8uaXRlbXMpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVUYWJsZUZpbHRlcigpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XG4gICAgICAgIH0sIDEwMCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdGYWlsZWQgdG8gbG9hZCB0aGUgYXBwcm92YWwgcmVxdWVzdCBpbmZvcm1hdGlvbi4nLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIHRvZ2dsZVJlc3BvbnNpYmlsaXR5RXhwYW5kKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZGVkUmVzcG9uc2liaWxpdHlSb3dzW2lkXSA9ICF0aGlzLmV4cGFuZGVkUmVzcG9uc2liaWxpdHlSb3dzW2lkXTtcbiAgfVxuXG4gIGlzUmVzcG9uaXNiaWxpdHlFeHBhbmRlZChpZDogc3RyaW5nKTogYm9vbGVhbiB7XG5cblxuICAgIC8vIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTGlzdFBvcHVwQ29tcG9uZW50LCB7XG4gICAgLy8gICB3aWR0aDogJzEwMDBweCcsXG4gICAgLy8gICBkYXRhOiB0aGlzLmFjdGl2ZVJvd0VsZW1lbnQsXG4gICAgLy8gICAgcGFuZWxDbGFzczogJ3ZpZXctY2JwLXBsYW4tcG9wdXAnLFxuICAgIC8vICAgbWluSGVpZ2h0OiAnNDAwcHgnLCAgICAgICAgICAvLyBTZXQgbWluaW11bSBoZWlnaHRcbiAgICAvLyAgIG1heEhlaWdodDogJzkwdmgnLCAgICAgICAgICAgLy8gUHJldmVudCBpdCBmcm9tIGdvaW5nIGJleW9uZCB2aWV3cG9ydFxuICAgIC8vICAgZGlzYWJsZUNsb3NlOiB0cnVlIC8vIE9wdGlvbmFsOiBwcmV2ZW50IGNsb3Npbmcgd2l0aCBvdXRzaWRlIGNsaWNrXG4gICAgLy8gfSk7XG5cbiAgICAvLyBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAvLyAgIHJldHVybiBmYWxzZVxuICAgIC8vIH0pO1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkUmVzcG9uc2liaWxpdHlSb3dzW2lkXTtcbiAgfVxuXG4gIHRvZ2dsZUFjdGl2aXR5RXhwYW5kKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZGVkQWN0aXZpdHlSb3dzW2lkXSA9ICF0aGlzLmV4cGFuZGVkQWN0aXZpdHlSb3dzW2lkXTtcbiAgfVxuXG4gIGlzQWN0aXZpdHlFeHBhbmRlZChpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRBY3Rpdml0eVJvd3NbaWRdO1xuICB9XG5cbiAgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKGNvbXBldGVuY2llczogYW55W10sIHR5cGU6IHN0cmluZyk6IGFueVtdIHtcbiAgICByZXR1cm4gY29tcGV0ZW5jaWVzPy5maWx0ZXIoYyA9PiBjLnR5cGUgPT09IHR5cGUpIHx8IFtdO1xuICB9XG5cbiAgYmFja1RvQXBwcm92YWxSZXF1ZXN0KCkge1xuICAgIGlmICh0aGlzLnBvcnRhbERhdGEgJiYgdGhpcy5wb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhICYmIHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YT8uZnJvbVBvcnRhbCAmJlxuICAgICAgdGhpcy5wb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhPy5mcm9tUG9ydGFsID09PSAnbWRvJ1xuXG4gICAgKSB7XG4gICAgICBoaXN0b3J5LmJhY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYWkvYXBwcm92ZS1yZXF1ZXN0cyddKTtcbiAgICB9XG5cbiAgfVxuXG4gIGFwcGx5RmlsdGVyKCk6IHZvaWQge1xuXG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSAodGhpcy5zZWFyY2hUZXh0IHx8ICcnKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnRvTG93ZXJDYXNlKCk7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gZmlsdGVyVmFsdWU7XG5cbiAgICBpZiAodGhpcy5kYXRhU291cmNlLnBhZ2luYXRvcikge1xuICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclNlYXJjaCgpIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcbiAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gJyc7XG5cbiAgICBpZiAodGhpcy5kYXRhU291cmNlLnBhZ2luYXRvcikge1xuICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcbiAgICB9XG4gIH1cblxuICBpbml0aWFsaXplVGFibGVGaWx0ZXIoKTogdm9pZCB7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gKGRhdGE6IGFueSwgZmlsdGVyOiBzdHJpbmcpOiBib29sZWFuID0+IHtcblxuICAgICAgY29uc3QgZGVzaWduYXRpb24gPVxuICAgICAgICAoZGF0YT8uZGVzaWduYXRpb25fbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcblxuICAgICAgY29uc3Qgd2luZyA9XG4gICAgICAgIChkYXRhPy53aW5nX2RpdmlzaW9uX3NlY3Rpb24gfHwgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNpYmlsaXRpZXMgPVxuICAgICAgICAoZGF0YT8ucm9sZV9yZXNwb25zaWJpbGl0aWVzIHx8IFtdKVxuICAgICAgICAgIC5qb2luKCcgJylcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcblxuICAgICAgY29uc3QgYWN0aXZpdGllcyA9XG4gICAgICAgIChkYXRhPy5hY3Rpdml0aWVzIHx8IFtdKVxuICAgICAgICAgIC5qb2luKCcgJylcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcblxuICAgICAgY29uc3QgY29tcGV0ZW5jaWVzID1cbiAgICAgICAgKGRhdGE/LmNvbXBldGVuY2llcyB8fCBbXSlcbiAgICAgICAgICAubWFwKChjOiBhbnkpID0+XG4gICAgICAgICAgICBgJHtjPy50aGVtZSB8fCAnJ30gJHtjPy5zdWJfdGhlbWUgfHwgJyd9YFxuICAgICAgICAgIClcbiAgICAgICAgICAuam9pbignICcpXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGNvbnN0IGNvbWJpbmVkVGV4dCA9IGBcbiAgICAgICR7ZGVzaWduYXRpb259XG4gICAgICAke3dpbmd9XG4gICAgICAke3Jlc3BvbnNpYmlsaXRpZXN9XG4gICAgICAke2FjdGl2aXRpZXN9XG4gICAgICAke2NvbXBldGVuY2llc31cbiAgICBgO1xuXG4gICAgICByZXR1cm4gY29tYmluZWRUZXh0LmluY2x1ZGVzKGZpbHRlcik7XG4gICAgfTtcbiAgfVxuXG5cbiAgb3BlbkZ1bGxMaXN0KGVsZW1lbnQ6IGFueSwgdHlwZTogYW55KSB7XG4gICAgY29uc3QgbGlzdFRvU2hvdzogc3RyaW5nW10gPSBlbGVtZW50W3R5cGVdIHx8IFtdO1xuICAgIGNvbnN0IHRpdGxlID0gdHlwZSA9PT0gJ3JvbGVfcmVzcG9uc2liaWxpdGllcycgPyAnUm9sZSAmIFJlc3BvbnNpYmlsaXRpZXMnIDogJ0FjdGl2aXRpZXMnO1xuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihMaXN0UG9wdXBDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNjAwcHgnLFxuICAgICAgZGF0YTogeyBlbGVtZW50OiBlbGVtZW50LCB0eXBlOiB0eXBlIH0sXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICBtYXhIZWlnaHQ6ICc4MHZoJ1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gZG8gYW55dGhpbmcgc3BlY2lhbCBoZXJlIHRvIHJlc2V0IGlubGluZSBleHBhbmRlZCBzdGF0ZVxuICAgICAgLy8gQmVjYXVzZSB5b3UncmUgdXNpbmcgZGlhbG9nLCBub3QgaW5saW5lIGV4cGFuZCDigJMgdmlldyByZW1haW5zIGluIGluaXRpYWwgKGNvbGxhcHNlZCkgc3RhdGVcbiAgICB9KTtcbiAgfVxuXG5cblxuICBlZGl0Um9sZU1hcHBpbmcoZWxlbWVudDogYW55LCBtZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXIpIHtcbiAgICBtZW51VHJpZ2dlci5jbG9zZU1lbnUoKTtcbiAgICB0aGlzLmFjdGl2ZVJvd0VsZW1lbnQgPSBlbGVtZW50XG4gICAgY29uc29sZS5sb2coJ0VkaXQgUm9sZSBNYXBwaW5nIGNsaWNrZWQnLCBlbGVtZW50KTtcbiAgICAvLyBOYXZpZ2F0ZSBvciBvcGVuIG1vZGFsXG4gICAgY29uc29sZS5sb2coJ1ZpZXcgQ0JQIFBsYW4gY2xpY2tlZCcsIGVsZW1lbnQpO1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRWRpdENicFBsYW5Db21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMTAwMHB4JyxcbiAgICAgIGRhdGE6IHsgcmVxdWVzdERhdGE6IHRoaXMucmVxdWVzdERhdGEsIGVsZW1lbnQ6IGVsZW1lbnQgfSxcbiAgICAgIHBhbmVsQ2xhc3M6ICd2aWV3LWNicC1wbGFuLXBvcHVwJyxcbiAgICAgIG1pbkhlaWdodDogJzMwMHB4JywgICAgICAgICAgLy8gU2V0IG1pbmltdW0gaGVpZ2h0XG4gICAgICBtYXhIZWlnaHQ6ICc4MHZoJywgICAgICAgICAgIC8vIFByZXZlbnQgaXQgZnJvbSBnb2luZyBiZXlvbmQgdmlld3BvcnRcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSAvLyBPcHRpb25hbDogcHJldmVudCBjbG9zaW5nIHdpdGggb3V0c2lkZSBjbGlja1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAvLyBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG4gICAgICAvLyAgIGNvbnNvbGUubG9nKCdDaGFuZ2VzIHNhdmVkIScpO1xuICAgICAgLy8gICAvLyBSZWZyZXNoIGRhdGEgb3Igc2hvdyBhIHRvYXN0IGhlcmVcblxuICAgICAgLy8gfVxuICAgICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ3JlcXVlc3RfaWQnKTtcbiAgICAgIGlmICh0aGlzLnBvcnRhbERhdGEgJiYgdGhpcy5wb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhICYmIHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YT8uZnJvbVBvcnRhbCAmJlxuICAgICAgICB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGE/LmZyb21Qb3J0YWwgPT09ICdtZG8nXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5nZXRNRE9SZXF1ZXN0RGV0YWlscyhyZXF1ZXN0SWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdmlld0NCUFBsYW4oZWxlbWVudDogYW55LCBtZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXIpIHtcbiAgICBtZW51VHJpZ2dlci5jbG9zZU1lbnUoKTtcbiAgICB0aGlzLmFjdGl2ZVJvd0VsZW1lbnQgPSBlbGVtZW50XG4gICAgY29uc29sZS5sb2coJ1ZpZXcgQ0JQIFBsYW4gY2xpY2tlZCcsIGVsZW1lbnQpO1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVmlld0NicFBsYW5Db21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMTAwMHB4JyxcbiAgICAgIGRhdGE6IGVsZW1lbnQsXG4gICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsXG4gICAgICBtaW5IZWlnaHQ6ICczMDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgbWF4SGVpZ2h0OiAnODB2aCcsICAgICAgICAgICAvLyBQcmV2ZW50IGl0IGZyb20gZ29pbmcgYmV5b25kIHZpZXdwb3J0XG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUgLy8gT3B0aW9uYWw6IHByZXZlbnQgY2xvc2luZyB3aXRoIG91dHNpZGUgY2xpY2tcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICBjb25zb2xlLmxvZygnQ2hhbmdlcyBzYXZlZCEnKTtcbiAgICAgICAgLy8gUmVmcmVzaCBkYXRhIG9yIHNob3cgYSB0b2FzdCBoZXJlXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB2aWV3Q291cnNlUmVjb21tZW5kYXRpb24oZWxlbWVudCwgbWVudVRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyKSB7XG4gICAgY29uc29sZS5sb2coJ1ZpZXcgQ291cnNlIFJlY29tbWVuZGF0aW9uIGNsaWNrZWQnLCBlbGVtZW50KTtcbiAgICBtZW51VHJpZ2dlci5jbG9zZU1lbnUoKTtcbiAgICB0aGlzLmFjdGl2ZVJvd0VsZW1lbnQgPSBlbGVtZW50XG4gICAgY29uc29sZS5sb2coJ0VkaXQgUm9sZSBNYXBwaW5nIGNsaWNrZWQnLCBlbGVtZW50KTtcbiAgICAvLyBOYXZpZ2F0ZSBvciBvcGVuIG1vZGFsXG4gICAgY29uc29sZS5sb2coJ1ZpZXcgQ0JQIFBsYW4gY2xpY2tlZCcsIGVsZW1lbnQpO1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVmlld0NvdXJzZVJlY29tbWVuZGF0aW9uQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzEwMDBweCcsXG4gICAgICBkYXRhOiBlbGVtZW50LFxuICAgICAgcGFuZWxDbGFzczogJ3ZpZXctY2JwLXBsYW4tcG9wdXAnLFxuICAgICAgbWluSGVpZ2h0OiAnNDAwcHgnLCAgICAgICAgICAvLyBTZXQgbWluaW11bSBoZWlnaHRcbiAgICAgIG1heEhlaWdodDogJzkwdmgnLCAgICAgICAgICAgLy8gUHJldmVudCBpdCBmcm9tIGdvaW5nIGJleW9uZCB2aWV3cG9ydFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlIC8vIE9wdGlvbmFsOiBwcmV2ZW50IGNsb3Npbmcgd2l0aCBvdXRzaWRlIGNsaWNrXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT09ICdzYXZlZCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0NoYW5nZXMgc2F2ZWQhJyk7XG4gICAgICAgIC8vIFJlZnJlc2ggZGF0YSBvciBzaG93IGEgdG9hc3QgaGVyZVxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqKVxuICAgICAgICBjb25zdCByZXF1ZXN0SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncmVxdWVzdF9pZCcpO1xuICAgICAgICBpZiAodGhpcy5wb3J0YWxEYXRhICYmIHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YSAmJiB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGE/LmZyb21Qb3J0YWwgJiZcbiAgICAgICAgICB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGE/LmZyb21Qb3J0YWwgPT09ICdtZG8nXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZ2V0TURPUmVxdWVzdERldGFpbHMocmVxdWVzdElkKTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhcHByb3ZlQW5kUHVibGlzaCgpIHtcbiAgICBjb25zb2xlLmxvZygnYXBwcm92ZUFuZFB1Ymxpc2ggY2xpY2tlZCcsIHRoaXMucmVxdWVzdERhdGEpO1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUHVibGlzaEFwcHJvdmVSZXF1ZXN0Rm9ybUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc3NTBweCcsXG4gICAgICBtYXhXaWR0aDogJzkwdncnLFxuICAgICAgZGF0YTogdGhpcy5yZXF1ZXN0RGF0YSxcbiAgICAgIHBhbmVsQ2xhc3M6ICdwdWJsaXNoLXJlcXVlc3QtcG9wdXAnLFxuICAgICAgbWluSGVpZ2h0OiAnNDAwcHgnLCAgICAgICAgICAvLyBTZXQgbWluaW11bSBoZWlnaHRcbiAgICAgIG1heEhlaWdodDogJzkwdmgnLCAgICAgICAgICAgLy8gUHJldmVudCBpdCBmcm9tIGdvaW5nIGJleW9uZCB2aWV3cG9ydFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlIC8vIE9wdGlvbmFsOiBwcmV2ZW50IGNsb3Npbmcgd2l0aCBvdXRzaWRlIGNsaWNrXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT09ICdzYXZlZCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0NoYW5nZXMgc2F2ZWQhJyk7XG4gICAgICAgIC8vIFJlZnJlc2ggZGF0YSBvciBzaG93IGEgdG9hc3QgaGVyZVxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqKVxuICAgICAgICBjb25zdCByZXF1ZXN0SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncmVxdWVzdF9pZCcpO1xuICAgICAgICBpZiAodGhpcy5wb3J0YWxEYXRhICYmIHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YSAmJiB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGE/LmZyb21Qb3J0YWwgJiZcbiAgICAgICAgICB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGE/LmZyb21Qb3J0YWwgPT09ICdtZG8nXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZ2V0TURPUmVxdWVzdERldGFpbHMocmVxdWVzdElkKTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfSk7XG5cbiAgfVxuXG4gIHJlamVjdFJlcXVlc3QoKSB7XG4gICAgY29uc29sZS5sb2coJ2FwcHJvdmVBbmRQdWJsaXNoIGNsaWNrZWQnLCB0aGlzLnJlcXVlc3REYXRhKTtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFJlamVjdFJlcXVlc3RGb3JtQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzc1MHB4JyxcbiAgICAgIG1heFdpZHRoOiAnOTB2dycsXG4gICAgICBkYXRhOiB0aGlzLnJlcXVlc3REYXRhLFxuICAgICAgcGFuZWxDbGFzczogJ3B1Ymxpc2gtcmVxdWVzdC1wb3B1cCcsXG4gICAgICBtaW5IZWlnaHQ6ICc0MDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsICAgICAgICAgICAvLyBQcmV2ZW50IGl0IGZyb20gZ29pbmcgYmV5b25kIHZpZXdwb3J0XG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUgLy8gT3B0aW9uYWw6IHByZXZlbnQgY2xvc2luZyB3aXRoIG91dHNpZGUgY2xpY2tcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICBjb25zb2xlLmxvZygnQ2hhbmdlcyBzYXZlZCEnKTtcbiAgICAgICAgLy8gUmVmcmVzaCBkYXRhIG9yIHNob3cgYSB0b2FzdCBoZXJlXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopXG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdyZXF1ZXN0X2lkJyk7XG4gICAgICAgIGlmICh0aGlzLnBvcnRhbERhdGEgJiYgdGhpcy5wb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhICYmIHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YT8uZnJvbVBvcnRhbCAmJlxuICAgICAgICAgIHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YT8uZnJvbVBvcnRhbCA9PT0gJ21kbydcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5nZXRNRE9SZXF1ZXN0RGV0YWlscyhyZXF1ZXN0SWQpO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgcmVqZWN0SXRlbVJlcXVlc3QoZWxlbWVudCwgbWVudVRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyKSB7XG4gICAgY29uc29sZS5sb2coJ2FwcHJvdmVBbmRQdWJsaXNoIGNsaWNrZWQnLCBlbGVtZW50KTtcblxuICAgIGNvbnNvbGUubG9nKCdWaWV3IENvdXJzZSBSZWNvbW1lbmRhdGlvbiBjbGlja2VkJywgZWxlbWVudCk7XG4gICAgbWVudVRyaWdnZXIuY2xvc2VNZW51KCk7XG4gICAgdGhpcy5hY3RpdmVSb3dFbGVtZW50ID0gZWxlbWVudFxuICAgIGNvbnNvbGUubG9nKCdFZGl0IFJvbGUgTWFwcGluZyBjbGlja2VkJywgZWxlbWVudCk7XG4gICAgLy8gTmF2aWdhdGUgb3Igb3BlbiBtb2RhbFxuICAgIGNvbnNvbGUubG9nKCdWaWV3IENCUCBQbGFuIGNsaWNrZWQnLCBlbGVtZW50KTtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFJlamVjdEl0ZW1SZXF1ZXN0Rm9ybUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc3NTBweCcsXG4gICAgICBtYXhXaWR0aDogJzkwdncnLFxuICAgICAgZGF0YTogeyByZXF1ZXN0RGF0YTogdGhpcy5yZXF1ZXN0RGF0YSwgZWxlbWVudDogZWxlbWVudCB9LFxuICAgICAgcGFuZWxDbGFzczogJ3B1Ymxpc2gtcmVxdWVzdC1wb3B1cCcsXG4gICAgICBtaW5IZWlnaHQ6ICc0MDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsICAgICAgICAgICAvLyBQcmV2ZW50IGl0IGZyb20gZ29pbmcgYmV5b25kIHZpZXdwb3J0XG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUgLy8gT3B0aW9uYWw6IHByZXZlbnQgY2xvc2luZyB3aXRoIG91dHNpZGUgY2xpY2tcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICBjb25zb2xlLmxvZygnQ2hhbmdlcyBzYXZlZCEnKTtcbiAgICAgICAgLy8gUmVmcmVzaCBkYXRhIG9yIHNob3cgYSB0b2FzdCBoZXJlXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopXG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdyZXF1ZXN0X2lkJyk7XG4gICAgICAgIGlmICh0aGlzLnBvcnRhbERhdGEgJiYgdGhpcy5wb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhICYmIHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YT8uZnJvbVBvcnRhbCAmJlxuICAgICAgICAgIHRoaXMucG9ydGFsRGF0YT8ucGFyZW50QXBwRGF0YT8uZnJvbVBvcnRhbCA9PT0gJ21kbydcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5nZXRNRE9SZXF1ZXN0RGV0YWlscyhyZXF1ZXN0SWQpO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgcmVQdWJsaXNoKGVsZW1lbnQpIHtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncmVxdWVzdF9pZCcpO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgbGV0IHBheWxvYWQgPSB7XG4gICAgICBcInJlcXVlc3RfaWRcIjogcmVxdWVzdElkLFxuICAgICAgXCJpdGVtX2lkXCI6IGVsZW1lbnQ/LmRlbWFuZF9pZFxuXG4gICAgfVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5yZWplY3RJdGVtTURPQXBwcm92YWxSZXF1ZXN0cyhwYXlsb2FkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1JlamVjdCBSZXNwb25zZSA9PicsIHJlcyk7XG5cbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXG4gICAgICAgICAgICAnUmVxdWVzdCBSZXB1Ymxpc2hlZCBzdWNjZXNzZnVsbHknLFxuICAgICAgICAgICAgJ1gnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHRoaXMucG9ydGFsRGF0YSAmJiB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGEgJiYgdGhpcy5wb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhPy5mcm9tUG9ydGFsICYmXG4gICAgICAgICAgICB0aGlzLnBvcnRhbERhdGE/LnBhcmVudEFwcERhdGE/LmZyb21Qb3J0YWwgPT09ICdtZG8nXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmdldE1ET1JlcXVlc3REZXRhaWxzKHJlcXVlc3RJZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgICAgZXJyPy5lcnJvcj8uZGV0YWlsIHx8XG4gICAgICAgICAgICBlcnI/LmVycm9yPy5tZXNzYWdlIHx8XG4gICAgICAgICAgICAnRmFpbGVkIHRvIHJlcHVibGlzaCByZXF1ZXN0JztcblxuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgICdYJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZHVyYXRpb246IDUwMDAsXG4gICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gIH1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwicmV2aWV3LWNvbnRhaW5lclwiPlxuXG4gICAgPCEtLSBIRUFERVIgLS0+XG4gICAgPGRpdiBjbGFzcz1cInBhZ2UtaGVhZGVyXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxlZnQtc2VjdGlvblwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYmFjay1pY29uXCIgKGNsaWNrKT1cImJhY2tUb0FwcHJvdmFsUmVxdWVzdCgpXCI+YXJyb3dfYmFjazwvbWF0LWljb24+XG5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+UmV2aWV3IFJlcXVlc3Q8L3A+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJyZXF1ZXN0LWlkXCI+e3tyZXF1ZXN0Py5pZH19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtYmFkZ2VcIiAqbmdJZj1cIihyZXF1ZXN0Py5zdGF0dXMgPT09ICdwZW5kaW5nJyB8fCByZXF1ZXN0Py5zdGF0dXMgPT09ICdQRU5ESU5HJyApXCI+XG4gICAgICAgICAgICB7e3JlcXVlc3Q/LnN0YXR1cyB8IHRpdGxlY2FzZX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLWJhZGdlLXN1Y2Nlc3NcIiAqbmdJZj1cIihyZXF1ZXN0Py5zdGF0dXMgPT09ICdhcHByb3ZlZCcgfHwgcmVxdWVzdD8uc3RhdHVzID09PSAnQVBQUk9WRUQnIClcIj5cbiAgICAgICAgICAgIHt7cmVxdWVzdD8uc3RhdHVzIHwgdGl0bGVjYXNlfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtYmFkZ2UtcmVqZWN0ZWRcIiAqbmdJZj1cIihyZXF1ZXN0Py5zdGF0dXMgPT09ICdyZWplY3RlZCcgfHwgcmVxdWVzdD8uc3RhdHVzID09PSAnUkVKRUNURUQnIClcIj5cbiAgICAgICAgICAgIHt7cmVxdWVzdD8uc3RhdHVzIHwgdGl0bGVjYXNlfX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCIocmVxdWVzdD8uc3RhdHVzID09PSAncGVuZGluZycgfHwgcmVxdWVzdD8uc3RhdHVzID09PSAnUEVORElORycgKSAmJiBwb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhPy5mcm9tUG9ydGFsID09PSAnbWRvJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1idG4td3JhcHBlclwiPlxuXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cImFwcHJvdmUtYnRuXCIgKGNsaWNrKT1cImFwcHJvdmVBbmRQdWJsaXNoKClcIj5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHVibGlzaDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIEFwcHJvdmUgJiBQdWJsaXNoXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInJlamVjdC1idG5cIiAoY2xpY2spPVwicmVqZWN0UmVxdWVzdCgpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgUmVqZWN0IFJlcXVlc3RcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG5cblxuICAgIDwhLS0gUkVRVUVTVCBERVRBSUxTIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJpbm5lci1jb250YWluZXJcIj5cbiAgICAgICAgPG1hdC1jYXJkIGNsYXNzPVwiZGV0YWlscy1jYXJkXCI+XG5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlJlcXVlc3QgRGV0YWlsczwvcD5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHMtZ3JpZFwiPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbC1ib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnRhZzwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImxhYmVsXCI+UmVxdWVzdCBJRDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidmFsdWVcIj57e3JlcXVlc3Q/LmlkfX08L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbC1ib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmFzc2lnbm1lbnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJsYWJlbFwiPlJlcXVlc3QgTmFtZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidmFsdWVcIj57e3JlcXVlc3Q/LnJlcXVlc3RfbmFtZX19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtYm94XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5tYWlsPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibGFiZWxcIj5SZXF1ZXN0ZWQgQnk8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInZhbHVlXCI+e3tyZXF1ZXN0Py51c2VyPy5lbWFpbH19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtYm94XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5ldmVudDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImxhYmVsXCI+U3VibWl0dGVkIE9uPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ2YWx1ZVwiPnt7cmVxdWVzdD8uY3JlYXRlZF9hdCB8IGRhdGU6ICdNTU0gZCwgeSBoaDptbTpzIGEnfX08L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbC1ib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnBlcnNvbjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImxhYmVsXCI+Tm8uIG9mIERlc2lnbmF0aW9uczwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidmFsdWVcIj57e3JlcXVlc3Q/LmRlc2lnbmF0aW9uX2NvdW50fX08L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwiZGl2aWRlclwiPjwvbWF0LWRpdmlkZXI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmdhbml6YXRpb25cIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImxhYmVsXCI+T3JnYW5pemF0aW9uPC9wPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwib3JnLXZhbHVlXCI+e3tyZXF1ZXN0Py5zdGF0ZV9jZW50ZXJfbmFtZX19IDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJlcXVlc3Q/LmRlcGFydG1lbnRfbmFtZVwiPnt7cmVxdWVzdD8uZGVwYXJ0bWVudF9uYW1lfX08L3NwYW4+PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9tYXQtY2FyZD5cblxuXG4gICAgICAgIDwhLS0gUk9MRSBNQVBQSU5HIFNFQ1RJT04gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb2xlLWhlYWRlclwiPlxuXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlJvbGUgTWFwcGluZ3MgZm9yIFJldmlldzwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2ggZmxleCBtYXJnaW4tcmlnaHQtbVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnNlYXJjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLTYwIHNlYXJjaC1pY29uIG1hdC1pY29uIG5vdHJhbnNsYXRlIG1hdGVyaWFsLWljb25zIG1hdC1pY29uLW5vLWNvbG9yXCI+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJzaW5wdXQgY29sb3ItNjAgdy1mdWxsXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCIgbGFiZWw9XCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiYXBwbHlGaWx0ZXIoKVwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGJ5IGRlc2lnbmF0aW9uIG5hbWVcIiB0eXBlPVwiU3RhbmRhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci02MCBjbGVhci1pY29uIG1hdC1pY29uIG5vdHJhbnNsYXRlIG1hdGVyaWFsLWljb25zIG1hdC1pY29uLW5vLWNvbG9yIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIj5jbGVhcjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbC0yIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2Rpc2FibGVkXT1cInNlYXJjaFRleHQudHJpbSgpPy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWFyY2hUZXh0LnRyaW0oKT8ubGVuZ3RoID09PSAwID8gJ2J0bi1kaXNhYmxlJzonYnRuLWFjdGl2ZSdcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJTZWFyY2hcIiAoY2xpY2spPVwiYXBwbHlGaWx0ZXIoKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY2xhc3NcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lciBtdC00XCIgc3R5bGU9XCJvdmVyZmxvdzogYXV0bztcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXoxIHRhYmxlLWJvZHlcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJkZXNpZ25hdGlvbl9uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGFibGUtaGVhZGVyXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiBEZXNpZ25hdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpZXdDQlBQbGFuKGVsZW1lbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImFjdGl2ZVRhYiA9PT0gJ21hdGNoZWQnPyAnZGVzaWduYXRpb24tdGV4dCc6ICdkZXNpZ25hdGlvbi10ZXh0LXVubWF0Y2hlZCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZGVzaWduYXRpb25cIj57eyBlbGVtZW50Py5kZXNpZ25hdGlvbl9uYW1lIH19IDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwid2luZy10ZXh0IG10LTJcIj5XaW5nL0RpdmlzaW9uIC0ge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Py53aW5nX2RpdmlzaW9uX3NlY3Rpb24gfX0gPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoZWxlbWVudD8uc3RhdHVzID09PSAnZmFpbGVkJyB8fCBlbGVtZW50Py5zdGF0dXMgPT09ICdGQUlMRUQnKSAmJiBwb3J0YWxEYXRhPy5wYXJlbnRBcHBEYXRhPy5mcm9tUG9ydGFsID09PSAnbWRvJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cImFwcHJvdmUtYnRuXCIgKGNsaWNrKT1cInJlUHVibGlzaChlbGVtZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5wdWJsaXNoPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZS1QdWJsaXNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInJvbGVfcmVzcG9uc2liaWxpdGllc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBbbmdDbGFzc109XCJhY3RpdmVUYWIgPT09ICdtYXRjaGVkJz8gJ3RhYmxlLWhlYWRlcic6ICd0YWJsZS1oZWFkZXItdW5tYXRjaGVkJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gUm9sZSAmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNpYmlsaXRpZXMgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJyb2xlLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByb2xlIG9mIChpc1Jlc3BvbmlzYmlsaXR5RXhwYW5kZWQoZWxlbWVudC5pZCkgPyBlbGVtZW50LnJvbGVfcmVzcG9uc2liaWxpdGllcyA6IGVsZW1lbnQucm9sZV9yZXNwb25zaWJpbGl0aWVzLnNsaWNlKDAsIDIpKTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aSsxfX0uIHt7IHJvbGUgfX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiZWxlbWVudC5yb2xlX3Jlc3BvbnNpYmlsaXRpZXMubGVuZ3RoID4gMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2aWV3LW1vcmUtbGVzcyBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5GdWxsTGlzdChlbGVtZW50LCAncm9sZV9yZXNwb25zaWJpbGl0aWVzJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjMUI0Q0ExO2ZvbnQtc2l6ZTogMTZweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBNb3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImFjdGl2aXRpZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggW25nQ2xhc3NdPVwiYWN0aXZlVGFiID09PSAnbWF0Y2hlZCc/ICd0YWJsZS1oZWFkZXInOiAndGFibGUtaGVhZGVyLXVubWF0Y2hlZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IEFjdGl2aXRpZXMgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJyb2xlLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpdml0eSBvZiAoaXNBY3Rpdml0eUV4cGFuZGVkKGVsZW1lbnQuaWQpID8gZWxlbWVudC5hY3Rpdml0aWVzIDogZWxlbWVudC5hY3Rpdml0aWVzLnNsaWNlKDAsIDIpKTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aSsxfX0uIHt7IGFjdGl2aXR5IH19PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImVsZW1lbnQuYWN0aXZpdGllcy5sZW5ndGggPiAyXCIgY2xhc3M9XCJ2aWV3LW1vcmUtbGVzcyBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5GdWxsTGlzdChlbGVtZW50LCAnYWN0aXZpdHknKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6ICMxQjRDQTE7Zm9udC1zaXplOiAxNnB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IE1vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiYmVoYXZpb3JhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBbbmdDbGFzc109XCJhY3RpdmVUYWIgPT09ICdtYXRjaGVkJz8gJ3RhYmxlLWhlYWRlcic6ICd0YWJsZS1oZWFkZXItdW5tYXRjaGVkJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gQmVoYXZpb3JhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wZXRlbmNpZXMgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjb21wZXRlbmN5LWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImJlaGF2aW91cmFsLXBpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb21wIG9mIGdldENvbXBldGVuY2llc0J5VHlwZShlbGVtZW50LmNvbXBldGVuY2llcywgJ0JlaGF2aW9yYWwnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0LWJlaGF2aW9yYWxcIj4ge3sgY29tcC50aGVtZSB9fSAtIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXAuc3ViX3RoZW1lIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJmdW5jdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIFtuZ0NsYXNzXT1cImFjdGl2ZVRhYiA9PT0gJ21hdGNoZWQnPyAndGFibGUtaGVhZGVyJzogJ3RhYmxlLWhlYWRlci11bm1hdGNoZWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiBGdW5jdGlvbmFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBldGVuY2llcyA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImNvbXBldGVuY3ktbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiZnVuY3Rpb25hbC1waWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXRDb21wZXRlbmNpZXNCeVR5cGUoZWxlbWVudC5jb21wZXRlbmNpZXMsICdGdW5jdGlvbmFsJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dC1mdW5jdGlvbmFsXCI+IHt7IGNvbXAudGhlbWUgfX0gLSB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLnN1Yl90aGVtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJkb21haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggW25nQ2xhc3NdPVwiYWN0aXZlVGFiID09PSAnbWF0Y2hlZCc/ICd0YWJsZS1oZWFkZXInOiAndGFibGUtaGVhZGVyLXVubWF0Y2hlZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IERvbWFpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wZXRlbmNpZXMgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjb21wZXRlbmN5LWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImRvbWFpbi1waWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXRDb21wZXRlbmNpZXNCeVR5cGUoZWxlbWVudC5jb21wZXRlbmNpZXMsICdEb21haW4nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0LWRvbWFpblwiPiB7eyBjb21wLnRoZW1lIH19IC0ge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcC5zdWJfdGhlbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aW9ucyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiYWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIFtuZ0NsYXNzXT1cImFjdGl2ZVRhYiA9PT0gJ21hdGNoZWQnPyAndGFibGUtaGVhZGVyJzogJ3RhYmxlLWhlYWRlci11bm1hdGNoZWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiBBY3Rpb24gPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiICNtZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwidmlld0NvdXJzZVJlY29tbWVuZGF0aW9uKGVsZW1lbnQsIG1lbnVUcmlnZ2VyKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJldmlldzwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlZpZXcgQ291cnNlIFJlY29tbWVuZGF0aW9uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJlZGl0Um9sZU1hcHBpbmcoZWxlbWVudCwgbWVudVRyaWdnZXIpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+RWRpdCBSb2xlIE1hcHBpbmc8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInZpZXdDQlBQbGFuKGVsZW1lbnQsIG1lbnVUcmlnZ2VyKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+dmlzaWJpbGl0eTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlZpZXcgUm9sZSBNYXBwaW5nPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaGFyZWRTZXJ2aWNlLmZyb21NZG9Qb3J0YWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVxdWVzdD8uc3RhdHVzPy50b0xvd2VyQ2FzZSgpID09PSAncGVuZGluZycgJiYgc2hhcmVkU2VydmljZS5mcm9tTWRvUG9ydGFsXCIgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVqZWN0SXRlbVJlcXVlc3QoZWxlbWVudCwgbWVudVRyaWdnZXIpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnNlbmQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5SZWplY3QgUmVxdWVzdDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zO1wiPjwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gIGNsYXNzPVwibm8tZGF0YS13cmFwcGVyXCJcbiAgKm5nSWY9XCJkYXRhU291cmNlLmZpbHRlcmVkRGF0YS5sZW5ndGggPT09IDBcIj5cblxuICBObyBEYXRhIEZvdW5kXG5cbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YVNvdXJjZT8uZmlsdGVyZWREYXRhPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT1cImRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aFwiIFtwYWdlU2l6ZV09XCI1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT1cIls1LCAxMCwgMjBdXCIgc2hvd0ZpcnN0TGFzdEJ1dHRvbnM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1wYWdpbmF0b3I+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwib3ZlcmxheS1sb2FkZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI1MFwiPjwvbWF0LXNwaW5uZXI+XG48L2Rpdj4iXX0=
@@ -6113,12 +6113,6 @@ class ReviewRequestComponent {
6113
6113
  if (source === 'mdo') {
6114
6114
  this.portalData?.parentAppData?.fromPortal === 'mdo';
6115
6115
  this.sharedService.fromMdoPortal = true;
6116
- this.requestData = this.portalData?.parentAppData.requestRowData;
6117
- this.sharedService.requestData = this.portalData?.parentAppData.requestRowData;
6118
- this.sharedService.mdoBaseUrl = this.portalData?.configDetails?.mdoPath;
6119
- this.sharedService.mdoConfigDetails = this.portalData?.configDetails;
6120
- this.sharedService.baseUrl = this.portalData?.configDetails?.mdoPath + "/";
6121
- this.sharedService.configDetails = this.portalData?.configDetails;
6122
6116
  this.getMDORequestDetails(requestId);
6123
6117
  }
6124
6118
  else {
@@ -6157,9 +6151,15 @@ class ReviewRequestComponent {
6157
6151
  }
6158
6152
  getMDORequestDetails(requestId) {
6159
6153
  this.loading = true;
6154
+ this.sharedService.mdoBaseUrl = this.portalData?.configDetails?.mdoPath;
6155
+ this.sharedService.mdoConfigDetails = this.portalData?.configDetails;
6156
+ this.sharedService.baseUrl = this.portalData?.configDetails?.mdoPath + "/";
6157
+ this.sharedService.configDetails = this.portalData?.configDetails;
6160
6158
  this.sharedService.viewMDOApprovalRequests(requestId).subscribe({
6161
6159
  next: (res) => {
6162
6160
  console.log('res', res);
6161
+ this.requestData = res;
6162
+ this.sharedService.requestData = res;
6163
6163
  this.request = res;
6164
6164
  this.loading = false;
6165
6165
  this.dataSource = new MatTableDataSource(res?.items);
@@ -6865,11 +6865,11 @@ class ApprovalRequestsComponent {
6865
6865
  this.showRejectPopupFlag = false;
6866
6866
  }
6867
6867
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApprovalRequestsComponent, deps: [{ token: i1$1.MatDialog }, { token: SharedService }, { token: i3$1.MatSnackBar }, { token: i2.FormBuilder }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
6868
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ApprovalRequestsComponent, selector: "app-approval-requests", viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }], ngImport: i0, template: "<div class=\"upload-container\">\n <div class=\"header\">\n <div class=\"sub-heading mt-10 mb-10 ml-10 cursor-pointer\">\n <p (click)=\"routeToInitial()\"><mat-icon style=\"vertical-align: middle;\">arrow_back</mat-icon><span\n class=\"pl-10\">Back to Role Mapping Generation</span></p>\n </div>\n\n </div>\n <mat-card class=\"mat-card-container mt-20\" [formGroup]=\"roleMappingForm\">\n <div class=\"header\">\n <div class=\"sub-heading\">\n <p>Approval Requests</p>\n </div>\n\n\n </div>\n <!-- <div class=\"edit-section mt-4\">\n <div class=\"select-map-route-container\">\n <div class=\"select-map-flex-container\">\n <div class=\"select-map-flex\">\n <div class=\"selected-mapping-route\">\n <p>{{cbpPlanFinalObj?.ministry?.orgName}} <span *ngIf=\"cbpPlanFinalObj?.department_name\">\n / {{cbpPlanFinalObj?.department_name}}</span>\n </p>\n </div>\n <div class=\"edit-plan cursor-pointer\" (click)=\"routeToInitial()\">\n <mat-icon>edit</mat-icon>Edit\n </div>\n \n </div>\n \n </div>\n </div>\n </div> -->\n\n\n\n\n\n </mat-card>\n <mat-card class=\"\" style=\"z-index: 0;\">\n <form [formGroup]=\"filterForm\">\n <div class=\"search flex margin-right-m filter-container\">\n <div>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n class=\"lucide lucide-filter h-4 w-4\">\n <polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"></polygon>\n </svg>\n </div>\n <div>\n <b> Filters</b>\n </div>\n <div class=\"w-50\">\n\n <div class=\"search-container\">\n <div class=\"rsearch\">\n <mat-icon\n class=\"color-60 search-icon mat-icon notranslate material-icons mat-icon-no-color\">search</mat-icon>\n <input class=\"sinput color-60 w-full\" label=\"\" formControlName=\"search\"\n (keyup)=\"getApprovalRequests()\" placeholder=\"Search by Request ID\" type=\"Standard\">\n\n </div>\n\n </div>\n\n\n\n </div>\n <div class=\"search-and-buttons-container\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-select\">\n <!-- <mat-label style=\"font-weight: normal;\">\n {{ filterForm.get('status')?.value ? '' : 'Select Status' }}\n </mat-label> -->\n\n <mat-select formControlName=\"status\" panelClass=\"select-search-panel\"\n (selectionChange)=\"getApprovalRequests()\">\n\n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\" matInput\n placeholder=\"Search Status\" (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'status')\" />\n\n <!-- Values -->\n <mat-option *ngFor=\"let r of filteredStatus\" [value]=\"r?.code\">\n {{ r?.label }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"search-and-buttons-container\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-select\">\n <!-- <mat-label style=\"font-weight: normal;\">\n {{ filterForm.get('time')?.value ? '' : 'Select Time' }}\n </mat-label> -->\n\n <mat-select formControlName=\"time\" panelClass=\"select-search-panel\"\n (selectionChange)=\"applyFilters()\">\n\n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\" matInput\n placeholder=\"Search Time\" (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'time')\" />\n\n <!-- Values -->\n <mat-option *ngFor=\"let r of filteredTime\" [value]=\"r?.code\">\n {{ r?.label }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n </form>\n <p class=\"mt-10\" style=\"font-family: 'Lato'; font-size: 18px; margin-left: 10px;\">\n {{totalRecords}} Approval Requests</p>\n <table style=\"border-radius: 25px 25px 0 0;\n overflow: hidden;\n box-shadow: 0 5px 5px rgba(0, 0, 0, 0.12);\" mat-table [dataSource]=\"dataSource\"\n class=\"mat-elevation-z2 full-width-table mt-10\">\n\n <!-- Document Column -->\n <ng-container matColumnDef=\"request_id\">\n <th mat-header-cell *matHeaderCellDef> Request Name </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <div>\n <div class=\"doc-title\" *ngIf=\"request.request_name\">{{ request.request_name }}</div>\n <div class=\"doc-title\" *ngIf=\"!request.request_name\">{{ request.request_name }}</div>\n </div>\n </td>\n </ng-container>\n\n\n\n <!-- Summary Text Column -->\n <!-- <ng-container matColumnDef=\"summary_text\">\n <th mat-header-cell *matHeaderCellDef> Summary </th>\n <td mat-cell *matCellDef=\"let doc\">\n <div class=\"doc-summary-text\" style=\"width: 80%;\">\n <markdown [data]=\"doc?.summary_text | slice : 0 : 200\"></markdown>\n </div>\n </td>\n </ng-container> -->\n\n <!-- Date Column -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef> Date & Time</th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\"> {{ request.created_at | date: 'MMM d, y hh:mm:s a'}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"designation\">\n <th mat-header-cell *matHeaderCellDef> No of Designation </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <span class=\"designation-count\">{{request?.designation_count}}</span>\n </td>\n </ng-container>\n\n\n <!-- Summary Status Column -->\n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef> Request Status </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <span *ngIf=\"request.status === 'draft' || request.status === 'DRAFT' || request.status === 'revoke' || request.status === 'REVOKE' || request.status === 'REVOKED' || request.status === 'revoked'\" class=\"draft\"> {{ request.status | titlecase\n }} </span>\n <span *ngIf=\"request.status === 'approved' || request.status === 'APPROVED'\" class=\"success\"> {{ request.status | titlecase\n }} </span>\n <span *ngIf=\"request.status === 'pending' || request.status === 'PENDING'\" class=\"in-progress\"> {{ request.status |\n titlecase }} </span>\n <span *ngIf=\"request.status === 'rejected' || request.status === 'REJECTED'\" class=\"rejected\"> {{ request.status |\n titlecase }} </span>\n <span (click)=\"showRejectPopup(request)\" *ngIf=\"request.status === 'rejected' || request.status === 'REJECTED'\" style=\"margin-left: 10px;cursor: pointer;\"><mat-icon class=\"vertical-middle\">remove_red_eye</mat-icon></span>\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <div class=\"action-flex\">\n <div>\n <button class=\"btn-active\" mat-raised-button color=\"primary\" (click)=\"viewRequest(request)\"\n matTooltip=\"View/Review Request\">\n View Request\n </button>\n </div>\n <div>\n <button style=\"margin-left: 15px;\" class=\"btn-gray\" *ngIf=\"request.status === 'PENDING' || request.status === 'pending'\" \n (click)=\"revokeApprovalRequest(request)\" matTooltip=\"Revoke Request\">\n <mat-icon>cancel</mat-icon>\n Revoke Request\n </button>\n </div>\n </div>\n\n\n\n\n\n </td>\n </ng-container>\n\n <!-- Header and Row Definitions -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n\n <!-- No Data Message -->\n\n </table>\n <div *ngIf=\"dataSource.data.length === 0\" class=\"no-data-message\">\n No record found\n </div>\n <!-- Pagination -->\n <div class=\"mt-1\">\n <!-- <mat-paginator class=\"custom-pagination\" [pageSize]=\"5\" [pageSizeOptions]=\"[5, 10, 20]\"></mat-paginator> -->\n <mat-paginator [length]=\"totalRecords\" [pageSize]=\"pageSize\" [pageIndex]=\"pageIndex\"\n [pageSizeOptions]=\"[5, 10, 20]\" (page)=\"onPageChange($event)\">\n </mat-paginator>\n </div>\n\n\n </mat-card>\n</div>\n\n<!-- Popup Overlay -->\n<div class=\"popup-overlay\" *ngIf=\"showRejectPopupFlag\">\n <div class=\"popup-card\">\n \n <!-- Close Button -->\n <button class=\"close-btn\" (click)=\"closeRejectPopup()\">&times;</button>\n\n <!-- Title -->\n <h2>Rejection Reason</h2>\n\n <!-- Subtitle -->\n <p class=\"subtitle\">\n This request was rejected for the following reason:\n </p>\n\n <!-- Error Box -->\n <div class=\"error-box\">\n {{rejectionDetail?.reviewer_comment}}\n </div>\n\n </div>\n</div>\n\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>", styles: [".upload-container{background:transparent;min-height:100vh;padding:24px 0;margin:0 30px 0 50px}.header{display:flex;flex-direction:row;justify-content:space-between}.primary-btn{background-color:#1b4ca1;color:#fff}:host .search .rsearch{position:relative}:host .search .search-icon{position:absolute;top:15px;font-size:20px;left:10px}:host .search .clear-icon{position:absolute;top:15px;font-size:20px;right:10px;color:#666}:host .search .clear-icon:hover{color:#333}:host .search .sinput{border-radius:32px;border:1px solid #d5d0d0;padding:12px 36px;font:400 14px Lato;width:100%}.no-data-message{text-align:center;padding:16px;font-style:italic;color:#888}.btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:48px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none;width:100%}.btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:34px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none;width:100%}.btn-gray{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, rgba(91, 90, 90, .7019607843));color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:34px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none;width:100%}.btn-gray:hover{background:var(--Primary-KB-Primary-Light, #1B4CA1)}.sub-heading p{color:#000;font-family:Montserrat;font-size:18px;font-style:normal;font-weight:600;line-height:normal}.ml-10{margin-left:10px}.mt-10{margin-top:10px}.mt-20{margin-top:20px}.mb-10{margin-bottom:10px}.cursor-pointer{cursor:pointer}.doc-title{font-weight:700}:host ::ng-deep .mat-mdc-header-row{position:sticky;top:0;z-index:10;background:#fff;font-size:16px;box-shadow:0 2px 4px #0000001a;padding:5px 10px}:host ::ng-deep .mat-mdc-row{font-size:16px}:host ::ng-deep .mat-mdc-cell{padding:5px 10px}:host ::ng-deep .mat-mdc-header-cell{background:#fff;font-weight:600;font-size:18px;border-bottom:2px solid #e0e0e0}:host ::ng-deep th.mat-mdc-header-cell:not(:last-child){position:relative;border-right:none;padding:5px 10px}:host ::ng-deep th.mat-mdc-header-cell:not(:last-child):after{content:\"\";position:absolute;top:12px;bottom:12px;right:0;width:1px;background-color:#e0e0e0}::ng-deep .doc-summary-text ::ng-deep markdown p{line-height:1.5rem;font-family:Lato;font-size:1rem!important;font-style:normal;font-weight:400}:host .mat-select-panel .search-wrapper{width:100%!important;box-sizing:border-box;padding:8px;position:sticky;top:0;z-index:2;background:#fff}.search-input{width:100%;padding:6px 10px;border:1px solid #ccc;border-radius:6px;outline:none;box-sizing:border-box}:host ::ng-deep .mat-select-panel-wrap{overflow:visible!important;padding:0;margin-top:42px}:host ::ng-deep .mat-select-panel{border:1px solid #ccc!important;box-sizing:border-box;max-height:250px}.edit-plan{display:flex;padding:4px 10px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:17px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px;height:30px}.select-map-route-container{display:flex;flex-direction:row;width:100%}.select-map-flex{display:flex;flex-direction:row}.select-map-flex-container{display:flex;justify-content:space-between;width:100%}.selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.success{background:green;padding:4px 10px;color:#fff;border-radius:20px}.draft{background:#666;padding:4px 10px;color:#fff;border-radius:20px}.in-progress{background:orange;padding:4px 10px;color:#fff;border-radius:20px}.rejected{background:#d32f2f;padding:4px 10px;color:#fff;border-radius:20px}.filter-container{display:flex;align-items:center;flex-direction:row;width:100%;gap:10px;background:#e3ecfa;padding:10px;border-radius:10px}.w-50{width:50%}.search-and-buttons-container{display:flex;justify-content:space-between;gap:4px;flex-direction:column;flex-wrap:wrap;width:20%;margin:0 5px}::ng-deep .select-search-panel{border:1px solid #ccc!important;border-radius:12px!important;box-shadow:0 8px 20px #0000001f}:host ::ng-deep .mat-select-arrow-wrapper{margin-top:5px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{color:#ccc}:host ::ng-deep .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#1b4ca1;border-color:#1b4ca1!important}:host ::ng-deep .select-search-panel .mat-option.mat-selected:not(.mat-option-disabled){background-color:#1b4ca1!important;color:#fff!important}:host ::ng-deep .mat-form-field-focused .mat-form-field-appearance-outline{border-color:#1b4ca1!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-start{border-radius:25px 0 0 25px;border:none!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-end{border-right:none!important;border:none!important;border-radius:0 25px 25px 0}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-gap{border:none!important;border-radius:25px}:host::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix{background-color:transparent!important}:host ::ng-deep .search-and-buttons-container .mat-option-text{color:#fff!important}.header-container{display:flex;flex-direction:row;justify-content:space-between;width:100%;margin:10px 0}.right-side-container{display:flex;justify-content:space-between}:host ::ng-deep .language-select .mat-select-trigger{font-weight:400!important}:host ::ng-deep .language-select .mat-select-value{color:#fff!important}:host ::ng-deep .custom-pagination{background-color:transparent!important}.action-flex{display:flex;gap:10px}.designation-count{background:#d1ddf2;padding:9px 13px;border-radius:50%;margin:10px;color:#0f2b5b;text-align:center}.vertical-middle{vertical-align:middle}.popup-overlay{position:fixed;inset:0;background:#00000059;display:flex;justify-content:center;align-items:center;z-index:999}.popup-card{position:relative;width:500px;background:#fff;border-radius:16px;padding:28px 24px 24px;box-shadow:0 10px 30px #00000026;font-family:Arial,sans-serif}.popup-card h2{margin:0;font-size:20px;font-weight:700;color:#1f2937}.popup-card .subtitle{margin-top:10px;font-size:14px;color:#6b7280;line-height:1.4}.close-btn{position:absolute;top:16px;right:16px;width:32px;height:32px;border:2px solid #94a3b8;border-radius:50%;background:transparent;color:#64748b;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.2s ease}.close-btn:hover{background:#f1f5f9}.error-box{margin-top:24px;padding:18px;border:1px solid #f5b5b5;background:#fff5f5;border-radius:12px;color:#c53030;font-size:18px;line-height:1.5}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatLegacyCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i7.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8$1.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i7$1.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i11$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i11$2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i11$2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i11$2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i11$2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i11$2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i11$2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i11$2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i11$2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i11$2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i11$2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i12$1.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "directive", type: i8$2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i5.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i5.DatePipe, name: "date" }] }); }
6868
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ApprovalRequestsComponent, selector: "app-approval-requests", viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }], ngImport: i0, template: "<div class=\"upload-container\">\n <div class=\"header\">\n <div class=\"sub-heading mt-10 mb-10 ml-10 cursor-pointer\">\n <p (click)=\"routeToInitial()\"><mat-icon style=\"vertical-align: middle;\">arrow_back</mat-icon><span\n class=\"pl-10\">Back to Role Mapping Generation</span></p>\n </div>\n\n </div>\n <mat-card class=\"mat-card-container mt-20\" [formGroup]=\"roleMappingForm\">\n <div class=\"header\">\n <div class=\"sub-heading\">\n <p>Approval Requests</p>\n </div>\n\n\n </div>\n <!-- <div class=\"edit-section mt-4\">\n <div class=\"select-map-route-container\">\n <div class=\"select-map-flex-container\">\n <div class=\"select-map-flex\">\n <div class=\"selected-mapping-route\">\n <p>{{cbpPlanFinalObj?.ministry?.orgName}} <span *ngIf=\"cbpPlanFinalObj?.department_name\">\n / {{cbpPlanFinalObj?.department_name}}</span>\n </p>\n </div>\n <div class=\"edit-plan cursor-pointer\" (click)=\"routeToInitial()\">\n <mat-icon>edit</mat-icon>Edit\n </div>\n \n </div>\n \n </div>\n </div>\n </div> -->\n\n\n\n\n\n </mat-card>\n <mat-card class=\"\" style=\"z-index: 0;\">\n <form [formGroup]=\"filterForm\">\n <div class=\"search flex margin-right-m filter-container\">\n <div>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n class=\"lucide lucide-filter h-4 w-4\">\n <polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"></polygon>\n </svg>\n </div>\n <div>\n <b> Filters</b>\n </div>\n <div class=\"w-50\">\n\n <div class=\"search-container\">\n <div class=\"rsearch\">\n <mat-icon\n class=\"color-60 search-icon mat-icon notranslate material-icons mat-icon-no-color\">search</mat-icon>\n <input class=\"sinput color-60 w-full\" label=\"\" formControlName=\"search\"\n (keyup)=\"getApprovalRequests()\" placeholder=\"Search by Request ID\" type=\"Standard\">\n\n </div>\n\n </div>\n\n\n\n </div>\n <div class=\"search-and-buttons-container\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-select\">\n <!-- <mat-label style=\"font-weight: normal;\">\n {{ filterForm.get('status')?.value ? '' : 'Select Status' }}\n </mat-label> -->\n\n <mat-select formControlName=\"status\" panelClass=\"select-search-panel\"\n (selectionChange)=\"getApprovalRequests()\">\n\n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\" matInput\n placeholder=\"Search Status\" (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'status')\" />\n\n <!-- Values -->\n <mat-option *ngFor=\"let r of filteredStatus\" [value]=\"r?.code\">\n {{ r?.label }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"search-and-buttons-container\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-select\">\n <!-- <mat-label style=\"font-weight: normal;\">\n {{ filterForm.get('time')?.value ? '' : 'Select Time' }}\n </mat-label> -->\n\n <mat-select formControlName=\"time\" panelClass=\"select-search-panel\"\n (selectionChange)=\"applyFilters()\">\n\n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\" matInput\n placeholder=\"Search Time\" (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'time')\" />\n\n <!-- Values -->\n <mat-option *ngFor=\"let r of filteredTime\" [value]=\"r?.code\">\n {{ r?.label }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n </form>\n <p class=\"mt-10\" style=\"font-family: 'Lato'; font-size: 18px; margin-left: 10px;\">\n {{totalRecords}} Approval Requests</p>\n <table style=\"border-radius: 25px 25px 0 0;\n overflow: hidden;\n box-shadow: 0 5px 5px rgba(0, 0, 0, 0.12);\" mat-table [dataSource]=\"dataSource\"\n class=\"mat-elevation-z2 full-width-table mt-10\">\n\n <!-- Document Column -->\n <ng-container matColumnDef=\"request_id\">\n <th mat-header-cell *matHeaderCellDef> Request Name </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <div>\n <div class=\"doc-title\" *ngIf=\"request.request_name\">{{ request.request_name }}</div>\n <div class=\"doc-title\" *ngIf=\"!request.request_name\">{{ request.request_name }}</div>\n </div>\n </td>\n </ng-container>\n\n\n\n <!-- Summary Text Column -->\n <!-- <ng-container matColumnDef=\"summary_text\">\n <th mat-header-cell *matHeaderCellDef> Summary </th>\n <td mat-cell *matCellDef=\"let doc\">\n <div class=\"doc-summary-text\" style=\"width: 80%;\">\n <markdown [data]=\"doc?.summary_text | slice : 0 : 200\"></markdown>\n </div>\n </td>\n </ng-container> -->\n\n <!-- Date Column -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef> Date & Time</th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\"> {{ request.created_at | date: 'MMM d, y hh:mm:s a'}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"designation\">\n <th mat-header-cell *matHeaderCellDef> No of Designation </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <span class=\"designation-count\">{{request?.designation_count}}</span>\n </td>\n </ng-container>\n\n\n <!-- Summary Status Column -->\n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef> Request Status </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <span *ngIf=\"request.status === 'draft' || request.status === 'DRAFT' || request.status === 'revoke' || request.status === 'REVOKE' || request.status === 'REVOKED' || request.status === 'revoked'\" class=\"draft\"> {{ request.status | titlecase\n }} </span>\n <span *ngIf=\"request.status === 'approved' || request.status === 'APPROVED'\" class=\"success\"> {{ request.status | titlecase\n }} </span>\n <span *ngIf=\"request.status === 'pending' || request.status === 'PENDING'\" class=\"in-progress\"> {{ request.status |\n titlecase }} </span>\n <span *ngIf=\"request.status === 'rejected' || request.status === 'REJECTED'\" class=\"rejected\"> {{ request.status |\n titlecase }} </span>\n <span (click)=\"showRejectPopup(request)\" *ngIf=\"request.status === 'rejected' || request.status === 'REJECTED'\" style=\"margin-left: 10px;cursor: pointer;\"><mat-icon class=\"vertical-middle\">remove_red_eye</mat-icon></span>\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <div class=\"action-flex\">\n <div>\n <button class=\"btn-active\" mat-raised-button color=\"primary\" (click)=\"viewRequest(request)\"\n matTooltip=\"View/Review Request\">\n View Request\n </button>\n </div>\n <div>\n <button style=\"margin-left: 15px;\" class=\"btn-gray\" *ngIf=\"request.status === 'PENDING' || request.status === 'pending'\" \n (click)=\"revokeApprovalRequest(request)\" matTooltip=\"Revoke Request\">\n <mat-icon>cancel</mat-icon>\n Revoke Request\n </button>\n </div>\n </div>\n\n\n\n\n\n </td>\n </ng-container>\n\n <!-- Header and Row Definitions -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n\n <!-- No Data Message -->\n\n </table>\n <div *ngIf=\"dataSource.data.length === 0\" class=\"no-data-message\">\n No record found\n </div>\n <!-- Pagination -->\n <div class=\"mt-1\">\n <!-- <mat-paginator class=\"custom-pagination\" [pageSize]=\"5\" [pageSizeOptions]=\"[5, 10, 20]\"></mat-paginator> -->\n <mat-paginator [length]=\"totalRecords\" [pageSize]=\"pageSize\" [pageIndex]=\"pageIndex\"\n [pageSizeOptions]=\"[5, 10, 20]\" (page)=\"onPageChange($event)\">\n </mat-paginator>\n </div>\n\n\n </mat-card>\n</div>\n\n<!-- Popup Overlay -->\n<div class=\"popup-overlay\" *ngIf=\"showRejectPopupFlag\">\n <div class=\"popup-card\">\n \n <!-- Close Button -->\n <button class=\"close-btn\" (click)=\"closeRejectPopup()\">&times;</button>\n\n <!-- Title -->\n <h2>Rejection Reason</h2>\n\n <!-- Subtitle -->\n <p class=\"subtitle\">\n This request was rejected for the following reason:\n </p>\n\n <!-- Error Box -->\n <div class=\"error-box\">\n {{rejectionDetail?.reviewer_comments}}\n </div>\n\n </div>\n</div>\n\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>", styles: [".upload-container{background:transparent;min-height:100vh;padding:24px 0;margin:0 30px 0 50px}.header{display:flex;flex-direction:row;justify-content:space-between}.primary-btn{background-color:#1b4ca1;color:#fff}:host .search .rsearch{position:relative}:host .search .search-icon{position:absolute;top:15px;font-size:20px;left:10px}:host .search .clear-icon{position:absolute;top:15px;font-size:20px;right:10px;color:#666}:host .search .clear-icon:hover{color:#333}:host .search .sinput{border-radius:32px;border:1px solid #d5d0d0;padding:12px 36px;font:400 14px Lato;width:100%}.no-data-message{text-align:center;padding:16px;font-style:italic;color:#888}.btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:48px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none;width:100%}.btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:34px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none;width:100%}.btn-gray{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, rgba(91, 90, 90, .7019607843));color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:34px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none;width:100%}.btn-gray:hover{background:var(--Primary-KB-Primary-Light, #1B4CA1)}.sub-heading p{color:#000;font-family:Montserrat;font-size:18px;font-style:normal;font-weight:600;line-height:normal}.ml-10{margin-left:10px}.mt-10{margin-top:10px}.mt-20{margin-top:20px}.mb-10{margin-bottom:10px}.cursor-pointer{cursor:pointer}.doc-title{font-weight:700}:host ::ng-deep .mat-mdc-header-row{position:sticky;top:0;z-index:10;background:#fff;font-size:16px;box-shadow:0 2px 4px #0000001a;padding:5px 10px}:host ::ng-deep .mat-mdc-row{font-size:16px}:host ::ng-deep .mat-mdc-cell{padding:5px 10px}:host ::ng-deep .mat-mdc-header-cell{background:#fff;font-weight:600;font-size:18px;border-bottom:2px solid #e0e0e0}:host ::ng-deep th.mat-mdc-header-cell:not(:last-child){position:relative;border-right:none;padding:5px 10px}:host ::ng-deep th.mat-mdc-header-cell:not(:last-child):after{content:\"\";position:absolute;top:12px;bottom:12px;right:0;width:1px;background-color:#e0e0e0}::ng-deep .doc-summary-text ::ng-deep markdown p{line-height:1.5rem;font-family:Lato;font-size:1rem!important;font-style:normal;font-weight:400}:host .mat-select-panel .search-wrapper{width:100%!important;box-sizing:border-box;padding:8px;position:sticky;top:0;z-index:2;background:#fff}.search-input{width:100%;padding:6px 10px;border:1px solid #ccc;border-radius:6px;outline:none;box-sizing:border-box}:host ::ng-deep .mat-select-panel-wrap{overflow:visible!important;padding:0;margin-top:42px}:host ::ng-deep .mat-select-panel{border:1px solid #ccc!important;box-sizing:border-box;max-height:250px}.edit-plan{display:flex;padding:4px 10px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:17px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px;height:30px}.select-map-route-container{display:flex;flex-direction:row;width:100%}.select-map-flex{display:flex;flex-direction:row}.select-map-flex-container{display:flex;justify-content:space-between;width:100%}.selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.success{background:green;padding:4px 10px;color:#fff;border-radius:20px}.draft{background:#666;padding:4px 10px;color:#fff;border-radius:20px}.in-progress{background:orange;padding:4px 10px;color:#fff;border-radius:20px}.rejected{background:#d32f2f;padding:4px 10px;color:#fff;border-radius:20px}.filter-container{display:flex;align-items:center;flex-direction:row;width:100%;gap:10px;background:#e3ecfa;padding:10px;border-radius:10px}.w-50{width:50%}.search-and-buttons-container{display:flex;justify-content:space-between;gap:4px;flex-direction:column;flex-wrap:wrap;width:20%;margin:0 5px}::ng-deep .select-search-panel{border:1px solid #ccc!important;border-radius:12px!important;box-shadow:0 8px 20px #0000001f}:host ::ng-deep .mat-select-arrow-wrapper{margin-top:5px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{color:#ccc}:host ::ng-deep .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#1b4ca1;border-color:#1b4ca1!important}:host ::ng-deep .select-search-panel .mat-option.mat-selected:not(.mat-option-disabled){background-color:#1b4ca1!important;color:#fff!important}:host ::ng-deep .mat-form-field-focused .mat-form-field-appearance-outline{border-color:#1b4ca1!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-start{border-radius:25px 0 0 25px;border:none!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-end{border-right:none!important;border:none!important;border-radius:0 25px 25px 0}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-gap{border:none!important;border-radius:25px}:host::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix{background-color:transparent!important}:host ::ng-deep .search-and-buttons-container .mat-option-text{color:#fff!important}.header-container{display:flex;flex-direction:row;justify-content:space-between;width:100%;margin:10px 0}.right-side-container{display:flex;justify-content:space-between}:host ::ng-deep .language-select .mat-select-trigger{font-weight:400!important}:host ::ng-deep .language-select .mat-select-value{color:#fff!important}:host ::ng-deep .custom-pagination{background-color:transparent!important}.action-flex{display:flex;gap:10px}.designation-count{background:#d1ddf2;padding:9px 13px;border-radius:50%;margin:10px;color:#0f2b5b;text-align:center}.vertical-middle{vertical-align:middle}.popup-overlay{position:fixed;inset:0;background:#00000059;display:flex;justify-content:center;align-items:center;z-index:999}.popup-card{position:relative;width:500px;background:#fff;border-radius:16px;padding:28px 24px 24px;box-shadow:0 10px 30px #00000026;font-family:Arial,sans-serif}.popup-card h2{margin:0;font-size:20px;font-weight:700;color:#1f2937}.popup-card .subtitle{margin-top:10px;font-size:14px;color:#6b7280;line-height:1.4}.close-btn{position:absolute;top:16px;right:16px;width:32px;height:32px;border:2px solid #94a3b8;border-radius:50%;background:transparent;color:#64748b;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.2s ease}.close-btn:hover{background:#f1f5f9}.error-box{margin-top:24px;padding:18px;border:1px solid #f5b5b5;background:#fff5f5;border-radius:12px;color:#c53030;font-size:18px;line-height:1.5}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatLegacyCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i7.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8$1.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i7$1.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i11$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i11$2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i11$2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i11$2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i11$2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i11$2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i11$2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i11$2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i11$2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i11$2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i11$2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i12$1.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "directive", type: i8$2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i5.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i5.DatePipe, name: "date" }] }); }
6869
6869
  }
6870
6870
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApprovalRequestsComponent, decorators: [{
6871
6871
  type: Component,
6872
- args: [{ selector: 'app-approval-requests', template: "<div class=\"upload-container\">\n <div class=\"header\">\n <div class=\"sub-heading mt-10 mb-10 ml-10 cursor-pointer\">\n <p (click)=\"routeToInitial()\"><mat-icon style=\"vertical-align: middle;\">arrow_back</mat-icon><span\n class=\"pl-10\">Back to Role Mapping Generation</span></p>\n </div>\n\n </div>\n <mat-card class=\"mat-card-container mt-20\" [formGroup]=\"roleMappingForm\">\n <div class=\"header\">\n <div class=\"sub-heading\">\n <p>Approval Requests</p>\n </div>\n\n\n </div>\n <!-- <div class=\"edit-section mt-4\">\n <div class=\"select-map-route-container\">\n <div class=\"select-map-flex-container\">\n <div class=\"select-map-flex\">\n <div class=\"selected-mapping-route\">\n <p>{{cbpPlanFinalObj?.ministry?.orgName}} <span *ngIf=\"cbpPlanFinalObj?.department_name\">\n / {{cbpPlanFinalObj?.department_name}}</span>\n </p>\n </div>\n <div class=\"edit-plan cursor-pointer\" (click)=\"routeToInitial()\">\n <mat-icon>edit</mat-icon>Edit\n </div>\n \n </div>\n \n </div>\n </div>\n </div> -->\n\n\n\n\n\n </mat-card>\n <mat-card class=\"\" style=\"z-index: 0;\">\n <form [formGroup]=\"filterForm\">\n <div class=\"search flex margin-right-m filter-container\">\n <div>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n class=\"lucide lucide-filter h-4 w-4\">\n <polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"></polygon>\n </svg>\n </div>\n <div>\n <b> Filters</b>\n </div>\n <div class=\"w-50\">\n\n <div class=\"search-container\">\n <div class=\"rsearch\">\n <mat-icon\n class=\"color-60 search-icon mat-icon notranslate material-icons mat-icon-no-color\">search</mat-icon>\n <input class=\"sinput color-60 w-full\" label=\"\" formControlName=\"search\"\n (keyup)=\"getApprovalRequests()\" placeholder=\"Search by Request ID\" type=\"Standard\">\n\n </div>\n\n </div>\n\n\n\n </div>\n <div class=\"search-and-buttons-container\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-select\">\n <!-- <mat-label style=\"font-weight: normal;\">\n {{ filterForm.get('status')?.value ? '' : 'Select Status' }}\n </mat-label> -->\n\n <mat-select formControlName=\"status\" panelClass=\"select-search-panel\"\n (selectionChange)=\"getApprovalRequests()\">\n\n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\" matInput\n placeholder=\"Search Status\" (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'status')\" />\n\n <!-- Values -->\n <mat-option *ngFor=\"let r of filteredStatus\" [value]=\"r?.code\">\n {{ r?.label }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"search-and-buttons-container\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-select\">\n <!-- <mat-label style=\"font-weight: normal;\">\n {{ filterForm.get('time')?.value ? '' : 'Select Time' }}\n </mat-label> -->\n\n <mat-select formControlName=\"time\" panelClass=\"select-search-panel\"\n (selectionChange)=\"applyFilters()\">\n\n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\" matInput\n placeholder=\"Search Time\" (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'time')\" />\n\n <!-- Values -->\n <mat-option *ngFor=\"let r of filteredTime\" [value]=\"r?.code\">\n {{ r?.label }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n </form>\n <p class=\"mt-10\" style=\"font-family: 'Lato'; font-size: 18px; margin-left: 10px;\">\n {{totalRecords}} Approval Requests</p>\n <table style=\"border-radius: 25px 25px 0 0;\n overflow: hidden;\n box-shadow: 0 5px 5px rgba(0, 0, 0, 0.12);\" mat-table [dataSource]=\"dataSource\"\n class=\"mat-elevation-z2 full-width-table mt-10\">\n\n <!-- Document Column -->\n <ng-container matColumnDef=\"request_id\">\n <th mat-header-cell *matHeaderCellDef> Request Name </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <div>\n <div class=\"doc-title\" *ngIf=\"request.request_name\">{{ request.request_name }}</div>\n <div class=\"doc-title\" *ngIf=\"!request.request_name\">{{ request.request_name }}</div>\n </div>\n </td>\n </ng-container>\n\n\n\n <!-- Summary Text Column -->\n <!-- <ng-container matColumnDef=\"summary_text\">\n <th mat-header-cell *matHeaderCellDef> Summary </th>\n <td mat-cell *matCellDef=\"let doc\">\n <div class=\"doc-summary-text\" style=\"width: 80%;\">\n <markdown [data]=\"doc?.summary_text | slice : 0 : 200\"></markdown>\n </div>\n </td>\n </ng-container> -->\n\n <!-- Date Column -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef> Date & Time</th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\"> {{ request.created_at | date: 'MMM d, y hh:mm:s a'}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"designation\">\n <th mat-header-cell *matHeaderCellDef> No of Designation </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <span class=\"designation-count\">{{request?.designation_count}}</span>\n </td>\n </ng-container>\n\n\n <!-- Summary Status Column -->\n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef> Request Status </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <span *ngIf=\"request.status === 'draft' || request.status === 'DRAFT' || request.status === 'revoke' || request.status === 'REVOKE' || request.status === 'REVOKED' || request.status === 'revoked'\" class=\"draft\"> {{ request.status | titlecase\n }} </span>\n <span *ngIf=\"request.status === 'approved' || request.status === 'APPROVED'\" class=\"success\"> {{ request.status | titlecase\n }} </span>\n <span *ngIf=\"request.status === 'pending' || request.status === 'PENDING'\" class=\"in-progress\"> {{ request.status |\n titlecase }} </span>\n <span *ngIf=\"request.status === 'rejected' || request.status === 'REJECTED'\" class=\"rejected\"> {{ request.status |\n titlecase }} </span>\n <span (click)=\"showRejectPopup(request)\" *ngIf=\"request.status === 'rejected' || request.status === 'REJECTED'\" style=\"margin-left: 10px;cursor: pointer;\"><mat-icon class=\"vertical-middle\">remove_red_eye</mat-icon></span>\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <div class=\"action-flex\">\n <div>\n <button class=\"btn-active\" mat-raised-button color=\"primary\" (click)=\"viewRequest(request)\"\n matTooltip=\"View/Review Request\">\n View Request\n </button>\n </div>\n <div>\n <button style=\"margin-left: 15px;\" class=\"btn-gray\" *ngIf=\"request.status === 'PENDING' || request.status === 'pending'\" \n (click)=\"revokeApprovalRequest(request)\" matTooltip=\"Revoke Request\">\n <mat-icon>cancel</mat-icon>\n Revoke Request\n </button>\n </div>\n </div>\n\n\n\n\n\n </td>\n </ng-container>\n\n <!-- Header and Row Definitions -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n\n <!-- No Data Message -->\n\n </table>\n <div *ngIf=\"dataSource.data.length === 0\" class=\"no-data-message\">\n No record found\n </div>\n <!-- Pagination -->\n <div class=\"mt-1\">\n <!-- <mat-paginator class=\"custom-pagination\" [pageSize]=\"5\" [pageSizeOptions]=\"[5, 10, 20]\"></mat-paginator> -->\n <mat-paginator [length]=\"totalRecords\" [pageSize]=\"pageSize\" [pageIndex]=\"pageIndex\"\n [pageSizeOptions]=\"[5, 10, 20]\" (page)=\"onPageChange($event)\">\n </mat-paginator>\n </div>\n\n\n </mat-card>\n</div>\n\n<!-- Popup Overlay -->\n<div class=\"popup-overlay\" *ngIf=\"showRejectPopupFlag\">\n <div class=\"popup-card\">\n \n <!-- Close Button -->\n <button class=\"close-btn\" (click)=\"closeRejectPopup()\">&times;</button>\n\n <!-- Title -->\n <h2>Rejection Reason</h2>\n\n <!-- Subtitle -->\n <p class=\"subtitle\">\n This request was rejected for the following reason:\n </p>\n\n <!-- Error Box -->\n <div class=\"error-box\">\n {{rejectionDetail?.reviewer_comment}}\n </div>\n\n </div>\n</div>\n\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>", styles: [".upload-container{background:transparent;min-height:100vh;padding:24px 0;margin:0 30px 0 50px}.header{display:flex;flex-direction:row;justify-content:space-between}.primary-btn{background-color:#1b4ca1;color:#fff}:host .search .rsearch{position:relative}:host .search .search-icon{position:absolute;top:15px;font-size:20px;left:10px}:host .search .clear-icon{position:absolute;top:15px;font-size:20px;right:10px;color:#666}:host .search .clear-icon:hover{color:#333}:host .search .sinput{border-radius:32px;border:1px solid #d5d0d0;padding:12px 36px;font:400 14px Lato;width:100%}.no-data-message{text-align:center;padding:16px;font-style:italic;color:#888}.btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:48px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none;width:100%}.btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:34px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none;width:100%}.btn-gray{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, rgba(91, 90, 90, .7019607843));color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:34px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none;width:100%}.btn-gray:hover{background:var(--Primary-KB-Primary-Light, #1B4CA1)}.sub-heading p{color:#000;font-family:Montserrat;font-size:18px;font-style:normal;font-weight:600;line-height:normal}.ml-10{margin-left:10px}.mt-10{margin-top:10px}.mt-20{margin-top:20px}.mb-10{margin-bottom:10px}.cursor-pointer{cursor:pointer}.doc-title{font-weight:700}:host ::ng-deep .mat-mdc-header-row{position:sticky;top:0;z-index:10;background:#fff;font-size:16px;box-shadow:0 2px 4px #0000001a;padding:5px 10px}:host ::ng-deep .mat-mdc-row{font-size:16px}:host ::ng-deep .mat-mdc-cell{padding:5px 10px}:host ::ng-deep .mat-mdc-header-cell{background:#fff;font-weight:600;font-size:18px;border-bottom:2px solid #e0e0e0}:host ::ng-deep th.mat-mdc-header-cell:not(:last-child){position:relative;border-right:none;padding:5px 10px}:host ::ng-deep th.mat-mdc-header-cell:not(:last-child):after{content:\"\";position:absolute;top:12px;bottom:12px;right:0;width:1px;background-color:#e0e0e0}::ng-deep .doc-summary-text ::ng-deep markdown p{line-height:1.5rem;font-family:Lato;font-size:1rem!important;font-style:normal;font-weight:400}:host .mat-select-panel .search-wrapper{width:100%!important;box-sizing:border-box;padding:8px;position:sticky;top:0;z-index:2;background:#fff}.search-input{width:100%;padding:6px 10px;border:1px solid #ccc;border-radius:6px;outline:none;box-sizing:border-box}:host ::ng-deep .mat-select-panel-wrap{overflow:visible!important;padding:0;margin-top:42px}:host ::ng-deep .mat-select-panel{border:1px solid #ccc!important;box-sizing:border-box;max-height:250px}.edit-plan{display:flex;padding:4px 10px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:17px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px;height:30px}.select-map-route-container{display:flex;flex-direction:row;width:100%}.select-map-flex{display:flex;flex-direction:row}.select-map-flex-container{display:flex;justify-content:space-between;width:100%}.selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.success{background:green;padding:4px 10px;color:#fff;border-radius:20px}.draft{background:#666;padding:4px 10px;color:#fff;border-radius:20px}.in-progress{background:orange;padding:4px 10px;color:#fff;border-radius:20px}.rejected{background:#d32f2f;padding:4px 10px;color:#fff;border-radius:20px}.filter-container{display:flex;align-items:center;flex-direction:row;width:100%;gap:10px;background:#e3ecfa;padding:10px;border-radius:10px}.w-50{width:50%}.search-and-buttons-container{display:flex;justify-content:space-between;gap:4px;flex-direction:column;flex-wrap:wrap;width:20%;margin:0 5px}::ng-deep .select-search-panel{border:1px solid #ccc!important;border-radius:12px!important;box-shadow:0 8px 20px #0000001f}:host ::ng-deep .mat-select-arrow-wrapper{margin-top:5px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{color:#ccc}:host ::ng-deep .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#1b4ca1;border-color:#1b4ca1!important}:host ::ng-deep .select-search-panel .mat-option.mat-selected:not(.mat-option-disabled){background-color:#1b4ca1!important;color:#fff!important}:host ::ng-deep .mat-form-field-focused .mat-form-field-appearance-outline{border-color:#1b4ca1!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-start{border-radius:25px 0 0 25px;border:none!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-end{border-right:none!important;border:none!important;border-radius:0 25px 25px 0}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-gap{border:none!important;border-radius:25px}:host::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix{background-color:transparent!important}:host ::ng-deep .search-and-buttons-container .mat-option-text{color:#fff!important}.header-container{display:flex;flex-direction:row;justify-content:space-between;width:100%;margin:10px 0}.right-side-container{display:flex;justify-content:space-between}:host ::ng-deep .language-select .mat-select-trigger{font-weight:400!important}:host ::ng-deep .language-select .mat-select-value{color:#fff!important}:host ::ng-deep .custom-pagination{background-color:transparent!important}.action-flex{display:flex;gap:10px}.designation-count{background:#d1ddf2;padding:9px 13px;border-radius:50%;margin:10px;color:#0f2b5b;text-align:center}.vertical-middle{vertical-align:middle}.popup-overlay{position:fixed;inset:0;background:#00000059;display:flex;justify-content:center;align-items:center;z-index:999}.popup-card{position:relative;width:500px;background:#fff;border-radius:16px;padding:28px 24px 24px;box-shadow:0 10px 30px #00000026;font-family:Arial,sans-serif}.popup-card h2{margin:0;font-size:20px;font-weight:700;color:#1f2937}.popup-card .subtitle{margin-top:10px;font-size:14px;color:#6b7280;line-height:1.4}.close-btn{position:absolute;top:16px;right:16px;width:32px;height:32px;border:2px solid #94a3b8;border-radius:50%;background:transparent;color:#64748b;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.2s ease}.close-btn:hover{background:#f1f5f9}.error-box{margin-top:24px;padding:18px;border:1px solid #f5b5b5;background:#fff5f5;border-radius:12px;color:#c53030;font-size:18px;line-height:1.5}\n"] }]
6872
+ args: [{ selector: 'app-approval-requests', template: "<div class=\"upload-container\">\n <div class=\"header\">\n <div class=\"sub-heading mt-10 mb-10 ml-10 cursor-pointer\">\n <p (click)=\"routeToInitial()\"><mat-icon style=\"vertical-align: middle;\">arrow_back</mat-icon><span\n class=\"pl-10\">Back to Role Mapping Generation</span></p>\n </div>\n\n </div>\n <mat-card class=\"mat-card-container mt-20\" [formGroup]=\"roleMappingForm\">\n <div class=\"header\">\n <div class=\"sub-heading\">\n <p>Approval Requests</p>\n </div>\n\n\n </div>\n <!-- <div class=\"edit-section mt-4\">\n <div class=\"select-map-route-container\">\n <div class=\"select-map-flex-container\">\n <div class=\"select-map-flex\">\n <div class=\"selected-mapping-route\">\n <p>{{cbpPlanFinalObj?.ministry?.orgName}} <span *ngIf=\"cbpPlanFinalObj?.department_name\">\n / {{cbpPlanFinalObj?.department_name}}</span>\n </p>\n </div>\n <div class=\"edit-plan cursor-pointer\" (click)=\"routeToInitial()\">\n <mat-icon>edit</mat-icon>Edit\n </div>\n \n </div>\n \n </div>\n </div>\n </div> -->\n\n\n\n\n\n </mat-card>\n <mat-card class=\"\" style=\"z-index: 0;\">\n <form [formGroup]=\"filterForm\">\n <div class=\"search flex margin-right-m filter-container\">\n <div>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n class=\"lucide lucide-filter h-4 w-4\">\n <polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"></polygon>\n </svg>\n </div>\n <div>\n <b> Filters</b>\n </div>\n <div class=\"w-50\">\n\n <div class=\"search-container\">\n <div class=\"rsearch\">\n <mat-icon\n class=\"color-60 search-icon mat-icon notranslate material-icons mat-icon-no-color\">search</mat-icon>\n <input class=\"sinput color-60 w-full\" label=\"\" formControlName=\"search\"\n (keyup)=\"getApprovalRequests()\" placeholder=\"Search by Request ID\" type=\"Standard\">\n\n </div>\n\n </div>\n\n\n\n </div>\n <div class=\"search-and-buttons-container\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-select\">\n <!-- <mat-label style=\"font-weight: normal;\">\n {{ filterForm.get('status')?.value ? '' : 'Select Status' }}\n </mat-label> -->\n\n <mat-select formControlName=\"status\" panelClass=\"select-search-panel\"\n (selectionChange)=\"getApprovalRequests()\">\n\n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\" matInput\n placeholder=\"Search Status\" (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'status')\" />\n\n <!-- Values -->\n <mat-option *ngFor=\"let r of filteredStatus\" [value]=\"r?.code\">\n {{ r?.label }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"search-and-buttons-container\">\n <div>\n <mat-form-field appearance=\"outline\" class=\"language-select\">\n <!-- <mat-label style=\"font-weight: normal;\">\n {{ filterForm.get('time')?.value ? '' : 'Select Time' }}\n </mat-label> -->\n\n <mat-select formControlName=\"time\" panelClass=\"select-search-panel\"\n (selectionChange)=\"applyFilters()\">\n\n <!-- Search box -->\n <input style=\"border:1px solid #ccc; padding: 5px;width: 92%;margin: 5px;\" matInput\n placeholder=\"Search Time\" (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (keyup)=\"filterList($any($event.target).value, 'time')\" />\n\n <!-- Values -->\n <mat-option *ngFor=\"let r of filteredTime\" [value]=\"r?.code\">\n {{ r?.label }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n </form>\n <p class=\"mt-10\" style=\"font-family: 'Lato'; font-size: 18px; margin-left: 10px;\">\n {{totalRecords}} Approval Requests</p>\n <table style=\"border-radius: 25px 25px 0 0;\n overflow: hidden;\n box-shadow: 0 5px 5px rgba(0, 0, 0, 0.12);\" mat-table [dataSource]=\"dataSource\"\n class=\"mat-elevation-z2 full-width-table mt-10\">\n\n <!-- Document Column -->\n <ng-container matColumnDef=\"request_id\">\n <th mat-header-cell *matHeaderCellDef> Request Name </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <div>\n <div class=\"doc-title\" *ngIf=\"request.request_name\">{{ request.request_name }}</div>\n <div class=\"doc-title\" *ngIf=\"!request.request_name\">{{ request.request_name }}</div>\n </div>\n </td>\n </ng-container>\n\n\n\n <!-- Summary Text Column -->\n <!-- <ng-container matColumnDef=\"summary_text\">\n <th mat-header-cell *matHeaderCellDef> Summary </th>\n <td mat-cell *matCellDef=\"let doc\">\n <div class=\"doc-summary-text\" style=\"width: 80%;\">\n <markdown [data]=\"doc?.summary_text | slice : 0 : 200\"></markdown>\n </div>\n </td>\n </ng-container> -->\n\n <!-- Date Column -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef> Date & Time</th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\"> {{ request.created_at | date: 'MMM d, y hh:mm:s a'}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"designation\">\n <th mat-header-cell *matHeaderCellDef> No of Designation </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <span class=\"designation-count\">{{request?.designation_count}}</span>\n </td>\n </ng-container>\n\n\n <!-- Summary Status Column -->\n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef> Request Status </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <span *ngIf=\"request.status === 'draft' || request.status === 'DRAFT' || request.status === 'revoke' || request.status === 'REVOKE' || request.status === 'REVOKED' || request.status === 'revoked'\" class=\"draft\"> {{ request.status | titlecase\n }} </span>\n <span *ngIf=\"request.status === 'approved' || request.status === 'APPROVED'\" class=\"success\"> {{ request.status | titlecase\n }} </span>\n <span *ngIf=\"request.status === 'pending' || request.status === 'PENDING'\" class=\"in-progress\"> {{ request.status |\n titlecase }} </span>\n <span *ngIf=\"request.status === 'rejected' || request.status === 'REJECTED'\" class=\"rejected\"> {{ request.status |\n titlecase }} </span>\n <span (click)=\"showRejectPopup(request)\" *ngIf=\"request.status === 'rejected' || request.status === 'REJECTED'\" style=\"margin-left: 10px;cursor: pointer;\"><mat-icon class=\"vertical-middle\">remove_red_eye</mat-icon></span>\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let request\" style=\"width: 15%;\">\n <div class=\"action-flex\">\n <div>\n <button class=\"btn-active\" mat-raised-button color=\"primary\" (click)=\"viewRequest(request)\"\n matTooltip=\"View/Review Request\">\n View Request\n </button>\n </div>\n <div>\n <button style=\"margin-left: 15px;\" class=\"btn-gray\" *ngIf=\"request.status === 'PENDING' || request.status === 'pending'\" \n (click)=\"revokeApprovalRequest(request)\" matTooltip=\"Revoke Request\">\n <mat-icon>cancel</mat-icon>\n Revoke Request\n </button>\n </div>\n </div>\n\n\n\n\n\n </td>\n </ng-container>\n\n <!-- Header and Row Definitions -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n\n <!-- No Data Message -->\n\n </table>\n <div *ngIf=\"dataSource.data.length === 0\" class=\"no-data-message\">\n No record found\n </div>\n <!-- Pagination -->\n <div class=\"mt-1\">\n <!-- <mat-paginator class=\"custom-pagination\" [pageSize]=\"5\" [pageSizeOptions]=\"[5, 10, 20]\"></mat-paginator> -->\n <mat-paginator [length]=\"totalRecords\" [pageSize]=\"pageSize\" [pageIndex]=\"pageIndex\"\n [pageSizeOptions]=\"[5, 10, 20]\" (page)=\"onPageChange($event)\">\n </mat-paginator>\n </div>\n\n\n </mat-card>\n</div>\n\n<!-- Popup Overlay -->\n<div class=\"popup-overlay\" *ngIf=\"showRejectPopupFlag\">\n <div class=\"popup-card\">\n \n <!-- Close Button -->\n <button class=\"close-btn\" (click)=\"closeRejectPopup()\">&times;</button>\n\n <!-- Title -->\n <h2>Rejection Reason</h2>\n\n <!-- Subtitle -->\n <p class=\"subtitle\">\n This request was rejected for the following reason:\n </p>\n\n <!-- Error Box -->\n <div class=\"error-box\">\n {{rejectionDetail?.reviewer_comments}}\n </div>\n\n </div>\n</div>\n\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>", styles: [".upload-container{background:transparent;min-height:100vh;padding:24px 0;margin:0 30px 0 50px}.header{display:flex;flex-direction:row;justify-content:space-between}.primary-btn{background-color:#1b4ca1;color:#fff}:host .search .rsearch{position:relative}:host .search .search-icon{position:absolute;top:15px;font-size:20px;left:10px}:host .search .clear-icon{position:absolute;top:15px;font-size:20px;right:10px;color:#666}:host .search .clear-icon:hover{color:#333}:host .search .sinput{border-radius:32px;border:1px solid #d5d0d0;padding:12px 36px;font:400 14px Lato;width:100%}.no-data-message{text-align:center;padding:16px;font-style:italic;color:#888}.btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:48px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none;width:100%}.btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:34px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none;width:100%}.btn-gray{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, rgba(91, 90, 90, .7019607843));color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:34px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none;width:100%}.btn-gray:hover{background:var(--Primary-KB-Primary-Light, #1B4CA1)}.sub-heading p{color:#000;font-family:Montserrat;font-size:18px;font-style:normal;font-weight:600;line-height:normal}.ml-10{margin-left:10px}.mt-10{margin-top:10px}.mt-20{margin-top:20px}.mb-10{margin-bottom:10px}.cursor-pointer{cursor:pointer}.doc-title{font-weight:700}:host ::ng-deep .mat-mdc-header-row{position:sticky;top:0;z-index:10;background:#fff;font-size:16px;box-shadow:0 2px 4px #0000001a;padding:5px 10px}:host ::ng-deep .mat-mdc-row{font-size:16px}:host ::ng-deep .mat-mdc-cell{padding:5px 10px}:host ::ng-deep .mat-mdc-header-cell{background:#fff;font-weight:600;font-size:18px;border-bottom:2px solid #e0e0e0}:host ::ng-deep th.mat-mdc-header-cell:not(:last-child){position:relative;border-right:none;padding:5px 10px}:host ::ng-deep th.mat-mdc-header-cell:not(:last-child):after{content:\"\";position:absolute;top:12px;bottom:12px;right:0;width:1px;background-color:#e0e0e0}::ng-deep .doc-summary-text ::ng-deep markdown p{line-height:1.5rem;font-family:Lato;font-size:1rem!important;font-style:normal;font-weight:400}:host .mat-select-panel .search-wrapper{width:100%!important;box-sizing:border-box;padding:8px;position:sticky;top:0;z-index:2;background:#fff}.search-input{width:100%;padding:6px 10px;border:1px solid #ccc;border-radius:6px;outline:none;box-sizing:border-box}:host ::ng-deep .mat-select-panel-wrap{overflow:visible!important;padding:0;margin-top:42px}:host ::ng-deep .mat-select-panel{border:1px solid #ccc!important;box-sizing:border-box;max-height:250px}.edit-plan{display:flex;padding:4px 10px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:17px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px;height:30px}.select-map-route-container{display:flex;flex-direction:row;width:100%}.select-map-flex{display:flex;flex-direction:row}.select-map-flex-container{display:flex;justify-content:space-between;width:100%}.selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.success{background:green;padding:4px 10px;color:#fff;border-radius:20px}.draft{background:#666;padding:4px 10px;color:#fff;border-radius:20px}.in-progress{background:orange;padding:4px 10px;color:#fff;border-radius:20px}.rejected{background:#d32f2f;padding:4px 10px;color:#fff;border-radius:20px}.filter-container{display:flex;align-items:center;flex-direction:row;width:100%;gap:10px;background:#e3ecfa;padding:10px;border-radius:10px}.w-50{width:50%}.search-and-buttons-container{display:flex;justify-content:space-between;gap:4px;flex-direction:column;flex-wrap:wrap;width:20%;margin:0 5px}::ng-deep .select-search-panel{border:1px solid #ccc!important;border-radius:12px!important;box-shadow:0 8px 20px #0000001f}:host ::ng-deep .mat-select-arrow-wrapper{margin-top:5px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{color:#ccc}:host ::ng-deep .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#1b4ca1;border-color:#1b4ca1!important}:host ::ng-deep .select-search-panel .mat-option.mat-selected:not(.mat-option-disabled){background-color:#1b4ca1!important;color:#fff!important}:host ::ng-deep .mat-form-field-focused .mat-form-field-appearance-outline{border-color:#1b4ca1!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-start{border-radius:25px 0 0 25px;border:none!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-end{border-right:none!important;border:none!important;border-radius:0 25px 25px 0}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-gap{border:none!important;border-radius:25px}:host::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix{background-color:transparent!important}:host ::ng-deep .search-and-buttons-container .mat-option-text{color:#fff!important}.header-container{display:flex;flex-direction:row;justify-content:space-between;width:100%;margin:10px 0}.right-side-container{display:flex;justify-content:space-between}:host ::ng-deep .language-select .mat-select-trigger{font-weight:400!important}:host ::ng-deep .language-select .mat-select-value{color:#fff!important}:host ::ng-deep .custom-pagination{background-color:transparent!important}.action-flex{display:flex;gap:10px}.designation-count{background:#d1ddf2;padding:9px 13px;border-radius:50%;margin:10px;color:#0f2b5b;text-align:center}.vertical-middle{vertical-align:middle}.popup-overlay{position:fixed;inset:0;background:#00000059;display:flex;justify-content:center;align-items:center;z-index:999}.popup-card{position:relative;width:500px;background:#fff;border-radius:16px;padding:28px 24px 24px;box-shadow:0 10px 30px #00000026;font-family:Arial,sans-serif}.popup-card h2{margin:0;font-size:20px;font-weight:700;color:#1f2937}.popup-card .subtitle{margin-top:10px;font-size:14px;color:#6b7280;line-height:1.4}.close-btn{position:absolute;top:16px;right:16px;width:32px;height:32px;border:2px solid #94a3b8;border-radius:50%;background:transparent;color:#64748b;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.2s ease}.close-btn:hover{background:#f1f5f9}.error-box{margin-top:24px;padding:18px;border:1px solid #f5b5b5;background:#fff5f5;border-radius:12px;color:#c53030;font-size:18px;line-height:1.5}\n"] }]
6873
6873
  }], ctorParameters: function () { return [{ type: i1$1.MatDialog }, { type: SharedService }, { type: i3$1.MatSnackBar }, { type: i2.FormBuilder }, { type: i3.Router }]; }, propDecorators: { paginator: [{
6874
6874
  type: ViewChild,
6875
6875
  args: [MatPaginator]