tnx-shared 5.2.28 → 5.2.29

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.
Files changed (85) hide show
  1. package/assets/docker/docker-entrypoint.sh +1 -1
  2. package/classes/base/list-component-base.d.ts +19 -5
  3. package/classes/base/list-component-base.d.ts.map +1 -1
  4. package/classes/environment-schema.d.ts +23 -20
  5. package/classes/environment-schema.d.ts.map +1 -1
  6. package/classes/public-function.d.ts +1 -0
  7. package/classes/public-function.d.ts.map +1 -1
  8. package/components/chat/chat-box/chat-box.component.d.ts.map +1 -1
  9. package/components/common-app-component/common-app-component.d.ts +1 -3
  10. package/components/common-app-component/common-app-component.d.ts.map +1 -1
  11. package/components/crud/advance-search/advance-search.component.d.ts +6 -6
  12. package/components/crud/advance-search/advance-search.component.d.ts.map +1 -1
  13. package/components/crud/crud-form/crud-form.component.d.ts +6 -0
  14. package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
  15. package/components/dropdown/dropdown.component.d.ts +5 -3
  16. package/components/dropdown/dropdown.component.d.ts.map +1 -1
  17. package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
  18. package/components/query-builders/query-builder-rule/query-builder-rule.component.d.ts +3 -0
  19. package/components/query-builders/query-builder-rule/query-builder-rule.component.d.ts.map +1 -1
  20. package/components/tn-custom-scrollbar/tn-custom-scrollbar.component.d.ts.map +1 -1
  21. package/components/tn-tinymce/tn-tinymce.component.d.ts +2 -0
  22. package/components/tn-tinymce/tn-tinymce.component.d.ts.map +1 -1
  23. package/congviec/congviec/congviec-form/congviec-form.component.d.ts +1 -0
  24. package/congviec/congviec/congviec-form/congviec-form.component.d.ts.map +1 -1
  25. package/directives/primeng/tn-table.directive.d.ts +7 -6
  26. package/directives/primeng/tn-table.directive.d.ts.map +1 -1
  27. package/esm2020/classes/base/list-component-base.mjs +56 -32
  28. package/esm2020/classes/environment-schema.mjs +10 -1
  29. package/esm2020/classes/public-function.mjs +3 -1
  30. package/esm2020/components/add-news/add-news.component.mjs +3 -3
  31. package/esm2020/components/autocomplete-picker/autocomplete-picker.component.mjs +2 -2
  32. package/esm2020/components/chat/chat-box/chat-box.component.mjs +3 -4
  33. package/esm2020/components/chat/chat-send-message-box/chat-send-message-box.component.mjs +2 -2
  34. package/esm2020/components/common-app-component/common-app-component.mjs +57 -57
  35. package/esm2020/components/common-dashboard/common-dashboard.component.mjs +3 -3
  36. package/esm2020/components/crud/advance-search/advance-search.component.mjs +28 -19
  37. package/esm2020/components/crud/crud-form/crud-form.component.mjs +12 -4
  38. package/esm2020/components/crud/crud-list/crud-list.component.mjs +3 -3
  39. package/esm2020/components/crud/tree-table/tree-table.component.mjs +3 -3
  40. package/esm2020/components/dropdown/dropdown.component.mjs +29 -24
  41. package/esm2020/components/entity-permission/entity-permission.component.mjs +3 -3
  42. package/esm2020/components/entity-picker/entity-picker-box/entity-picker-box.component.mjs +3 -3
  43. package/esm2020/components/entity-picker/entity-picker-dialog/entity-picker-dialog.component.mjs +3 -3
  44. package/esm2020/components/file-explorer/file-manager/file-manager.component.mjs +3 -3
  45. package/esm2020/components/main-list/main-list.component.mjs +3 -3
  46. package/esm2020/components/query-builders/query-builder-rule/query-builder-rule.component.mjs +8 -3
  47. package/esm2020/components/radio-button-list/radio-button-list.component.mjs +3 -3
  48. package/esm2020/components/report-queue/report-queue.component.mjs +2 -2
  49. package/esm2020/components/settings/settings.component.mjs +3 -3
  50. package/esm2020/components/tn-app-help/tn-app-help.component.mjs +3 -3
  51. package/esm2020/components/tn-app-notification/tn-app-notification.component.mjs +3 -3
  52. package/esm2020/components/tn-custom-scrollbar/tn-custom-scrollbar.component.mjs +5 -4
  53. package/esm2020/components/tn-tinymce/tn-tinymce.component.mjs +7 -3
  54. package/esm2020/components/user-picker/user-picker-box/user-picker-box.component.mjs +3 -3
  55. package/esm2020/components/user-picker/user-picker.component.mjs +2 -2
  56. package/esm2020/components/workflow/workflow-picker/workflow-picker.component.mjs +3 -3
  57. package/esm2020/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.mjs +3 -3
  58. package/esm2020/congviec/congviec/congviec-form/congviec-form.component.mjs +6 -3
  59. package/esm2020/congviec/congviec/congviec.component.mjs +3 -3
  60. package/esm2020/directives/primeng/tn-table.directive.mjs +28 -13
  61. package/esm2020/services/common.service.mjs +11 -3
  62. package/esm2020/services/environment.service.mjs +48 -7
  63. package/esm2020/services/permission.service.mjs +12 -15
  64. package/esm2020/services/position.service.mjs +2 -2
  65. package/esm2020/services/signalr.service.mjs +3 -3
  66. package/esm2020/services/tn-client.service.mjs +30 -25
  67. package/esm2020/tnx-shared.module.mjs +14 -8
  68. package/fesm2015/tnx-shared.mjs +587 -445
  69. package/fesm2015/tnx-shared.mjs.map +1 -1
  70. package/fesm2020/tnx-shared.mjs +587 -445
  71. package/fesm2020/tnx-shared.mjs.map +1 -1
  72. package/package.json +2 -2
  73. package/services/common.service.d.ts +6 -0
  74. package/services/common.service.d.ts.map +1 -1
  75. package/services/environment.service.d.ts +32 -23
  76. package/services/environment.service.d.ts.map +1 -1
  77. package/services/permission.service.d.ts +5 -0
  78. package/services/permission.service.d.ts.map +1 -1
  79. package/services/position.service.d.ts.map +1 -1
  80. package/services/signalr.service.d.ts +1 -1
  81. package/services/signalr.service.d.ts.map +1 -1
  82. package/services/tn-client.service.d.ts +3 -1
  83. package/services/tn-client.service.d.ts.map +1 -1
  84. package/tnx-shared.module.d.ts +12 -11
  85. package/tnx-shared.module.d.ts.map +1 -1
@@ -252,10 +252,10 @@ export class BaseCongviecDinhkemComponent extends DataListBase {
252
252
  }
253
253
  }
254
254
  BaseCongviecDinhkemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BaseCongviecDinhkemComponent, deps: [{ token: i0.Injector }, { token: i1.CongViecDinhKemService }, { token: i2.FileDataService }], target: i0.ɵɵFactoryTarget.Component });
255
- BaseCongviecDinhkemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: BaseCongviecDinhkemComponent, selector: "base-congviec-dinhkem", inputs: { formState: "formState", taskId: "taskId" }, host: { listeners: { "window:message": "onMessage($event)" } }, providers: [ComponentContextService], usesInheritance: true, ngImport: i0, template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"true\"\r\n [hiddenEdit]=\"true\" [hiddenDelete]=\"true\" (onReload)=\"_triggerProcessData($event)\" (onView)=\"viewLinkItem($event)\"\r\n (onDelete)=\"deleteLinkItem($event)\" (onDeleteMultiple)=\"deleteLinkItemMultiple($event)\"\r\n (onReloaded)=\"_handleReloaded($event)\">\r\n <ng-template #tieuDe let-rowData=\"rowData\">\r\n [{{rowData.tenHienThiDoiTuong}}] {{rowData.tieuDe}}\r\n </ng-template>\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text p-button-primary\" (click)=\"themDinhKem()\"></button>\r\n <button type=\"button\"\r\n *ngIf=\"(formState == enumFormState.EDIT || formState == enumFormState.ADD) && model.selectedItems.length > 0\"\r\n pButton pRipple label=\"X\u00F3a\" icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\"\r\n (click)=\"deleteLinkItemMultiple($event)\"></button>\r\n </ng-template>\r\n <ng-template #function let-rowData=\"rowData\">\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\" pTooltip=\"H\u1EE7y \u0111\u00EDnh k\u00E8m\"\r\n tooltipPosition=\"top\" [disabled]=\"!rowData.allowEdit\" (click)=\"deleteLinkItem(rowData)\"></button>\r\n </ng-template>\r\n <ng-template #fileDinhKem let-rowData=\"rowData\">\r\n <file-manager [fileDataService]=\"fileDataService\" [readonly]=\"true\" [serviceCode]=\"rowData.serviceCode\"\r\n [entity]=\"rowData.entity\" [entityKey]=\"rowData.entityKey\" [layout]=\"layoutFile.SIMPLE\">\r\n </file-manager>\r\n\r\n </ng-template>\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-dinhkem-form #formBase [taskId]=\"taskId\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"formModel\" (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"\r\n (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-dinhkem-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB ph\u00E2n h\u1EC7 kh\u00E1c...\" pInputText\r\n class=\"p-col-12\" [(ngModel)]=\"typedLink\" (keyup.enter)=\"addAttachLink()\" />\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" pButton class=\"p-button-primary p-col-12\" label=\"Ok\"\r\n [disabled]=\"typedLink != ''? null : true\" (click)=\"addAttachLink()\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>\r\n\r\n<!-- <tn-dialog *ngIf=\"modelView.showEditForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"modelView.header | translate\" [popupSize]=\"modelView.popupSize\" [useDefaultScrollBar]=\"true\"\r\n (onHide)=\"modelView.showEditForm = false\">\r\n <div>123</div>\r\n <iframe style=\"border: none; width: 100%; height: calc(100% - 0.5rem);\"\r\n [src]=\"modelView.data.link | safeUrl\"></iframe>\r\n</tn-dialog> -->\r\n<!-- <div *ngIf=\"modelView.showEditForm\">\r\n <iframe #ifr style=\"border: none; width: 100%; height: calc(100% - 0.5rem);\"\r\n [src]=\"modelView.data.link | safeUrl\"></iframe>\r\n</div> -->", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.InputText, selector: "[pInputText]" }, { kind: "component", type: i8.AfterViewCheckedComponent, selector: "after-view-checked", inputs: ["renderKey"], outputs: ["loaded", "loading", "unloading", "reRender"] }, { kind: "component", type: i9.CrudListComponent, selector: "crud-list" }, { kind: "component", type: i10.BaseCongviecDinhkemFormComponent, selector: "base-congviec-dinhkem-form", inputs: ["model", "taskId"] }, { kind: "component", type: i11.TnDialogComponent, selector: "tn-dialog", inputs: ["maskClass", "styleClass", "scrollBarStyleClass", "useDefaultScrollBar", "visible", "disabledButton", "modal", "header", "popupSize", "closeOnEscape", "showFooter", "positionTop", "minY", "hiddenSave", "maximizable"], outputs: ["onSave", "onCancel", "onShow", "onHide"] }, { kind: "component", type: i12.FileManagerComponent, selector: "file-manager", inputs: ["control", "fileDataService", "layout", "hiddenCreateFolder", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageSummary", "invalidFileLimitMessageDetail", "dataType", "rootFolderName", "serviceCode", "entity", "entityKey", "readonly", "inTaiLieu", "inTaiLieuChung", "copyToFolderId", "value", "multipleCheckWhenClickRow"], outputs: ["onInit", "onReady", "entityKeyChange", "closePopup", "valueChange", "onChanged", "onSelected"] }, { kind: "pipe", type: i13.TranslatePipe, name: "translate" }] });
255
+ BaseCongviecDinhkemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: BaseCongviecDinhkemComponent, selector: "base-congviec-dinhkem", inputs: { formState: "formState", taskId: "taskId" }, host: { listeners: { "window:message": "onMessage($event)" } }, providers: [ComponentContextService], usesInheritance: true, ngImport: i0, template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"true\"\r\n [hiddenEdit]=\"true\" [hiddenDelete]=\"true\" (onReload)=\"_triggerProcessData($event)\" (onView)=\"viewLinkItem($event)\"\r\n (onDelete)=\"deleteLinkItem($event)\" (onDeleteMultiple)=\"deleteLinkItemMultiple($event)\"\r\n (onReloaded)=\"_handleReloaded($event)\">\r\n <ng-template #tieuDe let-rowData=\"rowData\">\r\n [{{rowData.tenHienThiDoiTuong}}] {{rowData.tieuDe}}\r\n </ng-template>\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text p-button-primary\" (click)=\"themDinhKem()\"></button>\r\n <button type=\"button\"\r\n *ngIf=\"(formState == enumFormState.EDIT || formState == enumFormState.ADD) && model.selectedItems.length > 0\"\r\n pButton pRipple label=\"X\u00F3a\" icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\"\r\n (click)=\"deleteLinkItemMultiple($event)\"></button>\r\n </ng-template>\r\n <ng-template #function let-rowData=\"rowData\">\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\" pTooltip=\"H\u1EE7y \u0111\u00EDnh k\u00E8m\"\r\n tooltipPosition=\"top\" [disabled]=\"!rowData.allowEdit\" (click)=\"deleteLinkItem(rowData)\"></button>\r\n </ng-template>\r\n <ng-template #fileDinhKem let-rowData=\"rowData\">\r\n <file-manager [fileDataService]=\"fileDataService\" [readonly]=\"true\" [serviceCode]=\"rowData.serviceCode\"\r\n [entity]=\"rowData.entity\" [entityKey]=\"rowData.entityKey\" [layout]=\"layoutFile.SIMPLE\">\r\n </file-manager>\r\n\r\n </ng-template>\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-dinhkem-form #formBase [taskId]=\"taskId\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"formModel\" (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"\r\n (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-dinhkem-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"col-12\">\r\n <div class=\"grid\">\r\n <div class=\"md:col-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB ph\u00E2n h\u1EC7 kh\u00E1c...\" pInputText\r\n class=\"col-12\" [(ngModel)]=\"typedLink\" (keyup.enter)=\"addAttachLink()\" />\r\n </div>\r\n <div class=\"md:col-2\">\r\n <button type=\"button\" pButton class=\"p-button-primary col-12\" label=\"Ok\"\r\n [disabled]=\"typedLink != ''? null : true\" (click)=\"addAttachLink()\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>\r\n\r\n<!-- <tn-dialog *ngIf=\"modelView.showEditForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"modelView.header | translate\" [popupSize]=\"modelView.popupSize\" [useDefaultScrollBar]=\"true\"\r\n (onHide)=\"modelView.showEditForm = false\">\r\n <div>123</div>\r\n <iframe style=\"border: none; width: 100%; height: calc(100% - 0.5rem);\"\r\n [src]=\"modelView.data.link | safeUrl\"></iframe>\r\n</tn-dialog> -->\r\n<!-- <div *ngIf=\"modelView.showEditForm\">\r\n <iframe #ifr style=\"border: none; width: 100%; height: calc(100% - 0.5rem);\"\r\n [src]=\"modelView.data.link | safeUrl\"></iframe>\r\n</div> -->", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.InputText, selector: "[pInputText]" }, { kind: "component", type: i8.AfterViewCheckedComponent, selector: "after-view-checked", inputs: ["renderKey"], outputs: ["loaded", "loading", "unloading", "reRender"] }, { kind: "component", type: i9.CrudListComponent, selector: "crud-list" }, { kind: "component", type: i10.BaseCongviecDinhkemFormComponent, selector: "base-congviec-dinhkem-form", inputs: ["model", "taskId"] }, { kind: "component", type: i11.TnDialogComponent, selector: "tn-dialog", inputs: ["maskClass", "styleClass", "scrollBarStyleClass", "useDefaultScrollBar", "visible", "disabledButton", "modal", "header", "popupSize", "closeOnEscape", "showFooter", "positionTop", "minY", "hiddenSave", "maximizable"], outputs: ["onSave", "onCancel", "onShow", "onHide"] }, { kind: "component", type: i12.FileManagerComponent, selector: "file-manager", inputs: ["control", "fileDataService", "layout", "hiddenCreateFolder", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageSummary", "invalidFileLimitMessageDetail", "dataType", "rootFolderName", "serviceCode", "entity", "entityKey", "readonly", "inTaiLieu", "inTaiLieuChung", "copyToFolderId", "value", "multipleCheckWhenClickRow"], outputs: ["onInit", "onReady", "entityKeyChange", "closePopup", "valueChange", "onChanged", "onSelected"] }, { kind: "pipe", type: i13.TranslatePipe, name: "translate" }] });
256
256
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BaseCongviecDinhkemComponent, decorators: [{
257
257
  type: Component,
258
- args: [{ selector: 'base-congviec-dinhkem', providers: [ComponentContextService], template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"true\"\r\n [hiddenEdit]=\"true\" [hiddenDelete]=\"true\" (onReload)=\"_triggerProcessData($event)\" (onView)=\"viewLinkItem($event)\"\r\n (onDelete)=\"deleteLinkItem($event)\" (onDeleteMultiple)=\"deleteLinkItemMultiple($event)\"\r\n (onReloaded)=\"_handleReloaded($event)\">\r\n <ng-template #tieuDe let-rowData=\"rowData\">\r\n [{{rowData.tenHienThiDoiTuong}}] {{rowData.tieuDe}}\r\n </ng-template>\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text p-button-primary\" (click)=\"themDinhKem()\"></button>\r\n <button type=\"button\"\r\n *ngIf=\"(formState == enumFormState.EDIT || formState == enumFormState.ADD) && model.selectedItems.length > 0\"\r\n pButton pRipple label=\"X\u00F3a\" icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\"\r\n (click)=\"deleteLinkItemMultiple($event)\"></button>\r\n </ng-template>\r\n <ng-template #function let-rowData=\"rowData\">\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\" pTooltip=\"H\u1EE7y \u0111\u00EDnh k\u00E8m\"\r\n tooltipPosition=\"top\" [disabled]=\"!rowData.allowEdit\" (click)=\"deleteLinkItem(rowData)\"></button>\r\n </ng-template>\r\n <ng-template #fileDinhKem let-rowData=\"rowData\">\r\n <file-manager [fileDataService]=\"fileDataService\" [readonly]=\"true\" [serviceCode]=\"rowData.serviceCode\"\r\n [entity]=\"rowData.entity\" [entityKey]=\"rowData.entityKey\" [layout]=\"layoutFile.SIMPLE\">\r\n </file-manager>\r\n\r\n </ng-template>\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-dinhkem-form #formBase [taskId]=\"taskId\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"formModel\" (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"\r\n (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-dinhkem-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB ph\u00E2n h\u1EC7 kh\u00E1c...\" pInputText\r\n class=\"p-col-12\" [(ngModel)]=\"typedLink\" (keyup.enter)=\"addAttachLink()\" />\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" pButton class=\"p-button-primary p-col-12\" label=\"Ok\"\r\n [disabled]=\"typedLink != ''? null : true\" (click)=\"addAttachLink()\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>\r\n\r\n<!-- <tn-dialog *ngIf=\"modelView.showEditForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"modelView.header | translate\" [popupSize]=\"modelView.popupSize\" [useDefaultScrollBar]=\"true\"\r\n (onHide)=\"modelView.showEditForm = false\">\r\n <div>123</div>\r\n <iframe style=\"border: none; width: 100%; height: calc(100% - 0.5rem);\"\r\n [src]=\"modelView.data.link | safeUrl\"></iframe>\r\n</tn-dialog> -->\r\n<!-- <div *ngIf=\"modelView.showEditForm\">\r\n <iframe #ifr style=\"border: none; width: 100%; height: calc(100% - 0.5rem);\"\r\n [src]=\"modelView.data.link | safeUrl\"></iframe>\r\n</div> -->" }]
258
+ args: [{ selector: 'base-congviec-dinhkem', providers: [ComponentContextService], template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"true\"\r\n [hiddenEdit]=\"true\" [hiddenDelete]=\"true\" (onReload)=\"_triggerProcessData($event)\" (onView)=\"viewLinkItem($event)\"\r\n (onDelete)=\"deleteLinkItem($event)\" (onDeleteMultiple)=\"deleteLinkItemMultiple($event)\"\r\n (onReloaded)=\"_handleReloaded($event)\">\r\n <ng-template #tieuDe let-rowData=\"rowData\">\r\n [{{rowData.tenHienThiDoiTuong}}] {{rowData.tieuDe}}\r\n </ng-template>\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text p-button-primary\" (click)=\"themDinhKem()\"></button>\r\n <button type=\"button\"\r\n *ngIf=\"(formState == enumFormState.EDIT || formState == enumFormState.ADD) && model.selectedItems.length > 0\"\r\n pButton pRipple label=\"X\u00F3a\" icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\"\r\n (click)=\"deleteLinkItemMultiple($event)\"></button>\r\n </ng-template>\r\n <ng-template #function let-rowData=\"rowData\">\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\" pTooltip=\"H\u1EE7y \u0111\u00EDnh k\u00E8m\"\r\n tooltipPosition=\"top\" [disabled]=\"!rowData.allowEdit\" (click)=\"deleteLinkItem(rowData)\"></button>\r\n </ng-template>\r\n <ng-template #fileDinhKem let-rowData=\"rowData\">\r\n <file-manager [fileDataService]=\"fileDataService\" [readonly]=\"true\" [serviceCode]=\"rowData.serviceCode\"\r\n [entity]=\"rowData.entity\" [entityKey]=\"rowData.entityKey\" [layout]=\"layoutFile.SIMPLE\">\r\n </file-manager>\r\n\r\n </ng-template>\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-dinhkem-form #formBase [taskId]=\"taskId\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"formModel\" (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"\r\n (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-dinhkem-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"col-12\">\r\n <div class=\"grid\">\r\n <div class=\"md:col-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB ph\u00E2n h\u1EC7 kh\u00E1c...\" pInputText\r\n class=\"col-12\" [(ngModel)]=\"typedLink\" (keyup.enter)=\"addAttachLink()\" />\r\n </div>\r\n <div class=\"md:col-2\">\r\n <button type=\"button\" pButton class=\"p-button-primary col-12\" label=\"Ok\"\r\n [disabled]=\"typedLink != ''? null : true\" (click)=\"addAttachLink()\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>\r\n\r\n<!-- <tn-dialog *ngIf=\"modelView.showEditForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"modelView.header | translate\" [popupSize]=\"modelView.popupSize\" [useDefaultScrollBar]=\"true\"\r\n (onHide)=\"modelView.showEditForm = false\">\r\n <div>123</div>\r\n <iframe style=\"border: none; width: 100%; height: calc(100% - 0.5rem);\"\r\n [src]=\"modelView.data.link | safeUrl\"></iframe>\r\n</tn-dialog> -->\r\n<!-- <div *ngIf=\"modelView.showEditForm\">\r\n <iframe #ifr style=\"border: none; width: 100%; height: calc(100% - 0.5rem);\"\r\n [src]=\"modelView.data.link | safeUrl\"></iframe>\r\n</div> -->" }]
259
259
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.CongViecDinhKemService }, { type: i2.FileDataService }]; }, propDecorators: { formState: [{
260
260
  type: Input
261
261
  }], taskId: [{
@@ -264,4 +264,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
264
264
  type: HostListener,
265
265
  args: ['window:message', ['$event']]
266
266
  }] } });
267
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZ3ZpZWMtZGluaGtlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb25ndmllYy9jb25ndmllYy9jb25ndmllYy1kaW5oa2VtL2Nvbmd2aWVjLWRpbmhrZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29uZ3ZpZWMvY29uZ3ZpZWMvY29uZ3ZpZWMtZGluaGtlbS9jb25ndmllYy1kaW5oa2VtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFZLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXJHLE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFXN0UsTUFBTSxPQUFPLDRCQUE2QixTQUFRLFlBQVk7SUF5QjFELFlBQ0ksUUFBa0IsRUFDVix1QkFBK0MsRUFDaEQsZUFBZ0M7UUFFdkMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSFIsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF3QjtRQUNoRCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUEzQjNDLGVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBWXJCLGVBQVUsR0FBRyxjQUFjLENBQUM7UUFDNUIs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SXZCLFNBQVM7c0JBQXJCLEtBQUs7Z0JBU0csTUFBTTtzQkFBZCxLQUFLO2dCQTBFTixTQUFTO3NCQURSLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YUxpc3RCYXNlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2RhdGEtbGlzdC1iYXNlJztcclxuaW1wb3J0IHsgRm9ybVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TY2hlbWFCYXNlLCBEaWFsb2dNb2RlbCwgTW9kZWxTY2hlbWEsIFBvcHVwU2l6ZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBGaWxlRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnVtRmlsZUxheW91dCwgSGVpZ2h0VHlwZSwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9lbnVtcy9jb21tb24nO1xyXG5pbXBvcnQgeyBHcmlkSW5mbyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBDb25nVmllY0RpbmhLZW1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZ3ZpZWMtZGluaGtlbS5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFzZS1jb25ndmllYy1kaW5oa2VtJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb25ndmllYy1kaW5oa2VtLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2Nvbmd2aWVjLWRpbmhrZW0uY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW0NvbXBvbmVudENvbnRleHRTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZUNvbmd2aWVjRGluaGtlbUNvbXBvbmVudCBleHRlbmRzIERhdGFMaXN0QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBfZm9ybVN0YXRlID0gRm9ybVN0YXRlLlZJRVc7XHJcbiAgICBASW5wdXQoKSBzZXQgZm9ybVN0YXRlKHZhbHVlOiBGb3JtU3RhdGUpIHtcclxuICAgICAgICB0aGlzLl9mb3JtU3RhdGUgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ0lmSXNGb3JtVmlldygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBnZXQgZm9ybVN0YXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtU3RhdGU7XHJcbiAgICB9XHJcbiAgICBASW5wdXQoKSB0YXNrSWQ6IGFueTtcclxuXHJcbiAgICBwdWJsaWMgbGF5b3V0RmlsZSA9IEVudW1GaWxlTGF5b3V0O1xyXG4gICAgcHVibGljIGVudW1Gb3JtU3RhdGUgPSBGb3JtU3RhdGU7XHJcblxyXG4gICAgZm9ybU1vZGVsOiBhbnkgPSB7fTtcclxuICAgIHNob3dBdHRhY2hMaW5rQm94ID0gZmFsc2U7XHJcbiAgICB0eXBlZExpbms6IHN0cmluZyA9ICcnO1xyXG4gICAgbW9kZWxWaWV3OiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XHJcbiAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHsgbWF4aW1pemU6IHRydWUgfSlcclxuICAgIH0pO1xyXG4gICAgaWZyYW1lQ29udGFpbmVyOiBhbnk7XHJcbiAgICBpZnJhbWU6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBfY29uZ1ZpZWNEaW5oS2VtU2VydmljZTogQ29uZ1ZpZWNEaW5oS2VtU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgZmlsZURhdGFTZXJ2aWNlOiBGaWxlRGF0YVNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcub2JqZWN0TmFtZSA9ICdt4bulYyDEkcOtbmgga8OobSc7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlID0gdGhpcy5fY29uZ1ZpZWNEaW5oS2VtU2VydmljZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmdQZXJtaXNzaW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1dvcmtmbG93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuUGFnZVNldHRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5BZHZhbmNlU2VhcmNoID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuRmlsdGVyUm93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuZml4SGVpZ2h0VHlwZUluRGlhbG9nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmRpc2FibGVTaGFyZSA9IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy5zZXR0aW5nLm11bHRpcGxlQ2hlY2tXaGVuQ2xpY2tSb3cgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY2hlY2tBbGxvd1NlbGVjdFJvdyA9IChyb3dEYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyb3dEYXRhLmhpZGRlbkNoZWNrQm94KSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhlaWdodFR5cGUgPSBIZWlnaHRUeXBlLmR5bmFtaWM7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0dGluZy5zaG93RXhwb3J0U2VsZWN0ZWRJdGVtcyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmdJZklzRm9ybVZpZXcoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1vZGVsU2NoZW1hcyA9IFtcclxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHsgZmllbGQ6ICd0ZW5IaWVuVGhpRG9pVHVvbmcnLCBuYW1lOiAnxJDhu5FpIHTGsOG7o25nJywgZnVsbE5hbWU6ICfEkOG7kWkgdMaw4bujbmcnLCBkZXNjcmlwdGlvbjogJ8SQ4buRaSB0xrDhu6NuZycgfSksXHJcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7IGZpZWxkOiAndGlldURlJywgbmFtZTogJ1Rpw6p1IMSR4buBJywgZnVsbE5hbWU6ICdUacOqdSDEkeG7gScsIGRlc2NyaXB0aW9uOiAnVGnDqnUgxJHhu4EnIH0pLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMgPSBbXHJcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAndGlldURlJyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVGnDqnUgxJHhu4EnLFxyXG4gICAgICAgICAgICAgICAgc2hvd0VkaXRMaW5rOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICd0aWV1RGUnXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2ZpbGVEaW5oS2VtJyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnRmlsZSDEkcOtbmgga8OobScsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2ZpbGVEaW5oS2VtJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHRoaXMuaWZyYW1lQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgdGhpcy5pZnJhbWVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlmcmFtZUNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XHJcbiAgICAgICAgdGhpcy5pZnJhbWVDb250YWluZXIuc3R5bGUubGVmdCA9ICcwJztcclxuICAgICAgICB0aGlzLmlmcmFtZUNvbnRhaW5lci5zdHlsZS50b3AgPSAnMCc7XHJcbiAgICAgICAgdGhpcy5pZnJhbWVDb250YWluZXIuc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgdGhpcy5pZnJhbWVDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xyXG4gICAgICAgIHRoaXMuaWZyYW1lQ29udGFpbmVyLnN0eWxlWyd6LWluZGV4J10gPSA5OTk5O1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uYXBwZW5kQ2hpbGQodGhpcy5pZnJhbWVDb250YWluZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptZXNzYWdlJywgWyckZXZlbnQnXSlcclxuICAgIG9uTWVzc2FnZShldmVudCkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlTWVzc2FnZUV2ZW50KGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVNZXNzYWdlRXZlbnQoZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGV2ZW50LmRhdGEubWVzc2FnZTtcclxuICAgICAgICAgICAgaWYgKG1lc3NhZ2UgPT0gJ2NhbmNlbCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VJZnJhbWUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlID09ICdzYXZlZCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VJZnJhbWUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjbG9zZUlmcmFtZSgpIHtcclxuICAgICAgICB0aGlzLmlmcmFtZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaWZyYW1lQ29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuaWZyYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXR0aW5nSWZJc0Zvcm1WaWV3KCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCA9IHRoaXMuZm9ybVN0YXRlID09IEZvcm1TdGF0ZS5WSUVXO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5GdW5jdGlvbkNvbHVtbiA9IHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb2RpZnlHcmlkSW5mbyhncmlkSW5mbz86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgZ3JpZEluZm8uZmlsdGVycy5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignaWRDb25nVmllYycsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLnRhc2tJZClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGJlZm9yZVJlbmRlckRhdGFTb3VyY2UoZGF0YVNvdXJjZSkge1xyXG4gICAgICAgIC8vIGNvbnN0IHVzZXJJZCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldElkKCk7XHJcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpdGVtLmFsbG93RWRpdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpdGVtLmhpZGRlbkNoZWNrQm94ID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKCFpdGVtLnJlYWRPbmx5XHJcbiAgICAgICAgICAgICAgICAvLyB8fCBpdGVtLmNyZWF0ZWRCeSA9PSB1c2VySWRcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmFsbG93RWRpdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmhpZGRlbkNoZWNrQm94ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZnRlckdldERhdGEoKSB7XHJcbiAgICAgICAgY29uc3QgZGljR3JvdXBlZCA9IHt9O1xyXG4gICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWRpY0dyb3VwZWRbaXRlbS5zZXJ2aWNlQ29kZV0pIHtcclxuICAgICAgICAgICAgICAgIGRpY0dyb3VwZWRbaXRlbS5zZXJ2aWNlQ29kZV0gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWRpY0dyb3VwZWRbaXRlbS5zZXJ2aWNlQ29kZV1baXRlbS5lbnRpdHldKSB7XHJcbiAgICAgICAgICAgICAgICBkaWNHcm91cGVkW2l0ZW0uc2VydmljZUNvZGVdW2l0ZW0uZW50aXR5XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZEhpZW5UaGk6IGl0ZW0uZmllbGRIaWVuVGhpLFxyXG4gICAgICAgICAgICAgICAgICAgIGxzdElkOiBbXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaWNHcm91cGVkW2l0ZW0uc2VydmljZUNvZGVdW2l0ZW0uZW50aXR5XS5sc3RJZC5wdXNoKGl0ZW0uZW50aXR5S2V5KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBkYXRhRGlzcGxheU5hbWUgPSBhd2FpdCB0aGlzLl9jb25nVmllY0RpbmhLZW1TZXJ2aWNlLmdldERldGFpbEl0ZW1zKGRpY0dyb3VwZWQpO1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm1vZGVsLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgaXRlbS50aWV1RGUgPSBkYXRhRGlzcGxheU5hbWVbaXRlbS5zZXJ2aWNlQ29kZV1baXRlbS5lbnRpdHldLmRpY1RpZXVEZVtpdGVtLmVudGl0eUtleV07XHJcbiAgICAgICAgICAgIGlmICghaXRlbS50ZW5IaWVuVGhpRG9pVHVvbmcpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0udGVuSGllblRoaURvaVR1b25nID0gZGF0YURpc3BsYXlOYW1lW2l0ZW0uc2VydmljZUNvZGVdW2l0ZW0uZW50aXR5XS50ZW5IaWVuVGhpRG9pVHVvbmc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGl0ZW0udGVuSGllblRoaURvaVR1b25nKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLnRlbkhpZW5UaGlEb2lUdW9uZyA9IGl0ZW0udGVuSGllblRoaURvaVR1b25nLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0udGVuSGllblRoaURvaVR1b25nID0gaXRlbS50ZW5IaWVuVGhpRG9pVHVvbmcuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBpdGVtLnRlbkhpZW5UaGlEb2lUdW9uZy5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWZ0ZXJSZWxvYWRlZCgpIHtcclxuICAgICAgICB0aGlzLmZpbGVEYXRhU2VydmljZS5nZXREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlld0xpbmtJdGVtKGV2dCkge1xyXG4gICAgICAgIHRoaXMudmlld1Jhd0xpbmsoZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVMaW5rSXRlbShldnQpIHtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0NvbmZpcm0oJ0LhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiBo4buneSDEkcOtbmgga8OobSBi4bqjbiBnaGkgbsOgeT8nKS50aGVuKGFzeW5jIHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKHJzKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jb25nVmllY0RpbmhLZW1TZXJ2aWNlLmRlbGV0ZShldnQuaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUxpbmtJdGVtTXVsdGlwbGUoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKCdC4bqhbiBjw7MgY2jhuq9jIGNo4bqvbiBtdeG7kW4gaOG7p3kgxJHDrW5oIGvDqG0gYuG6o24gZ2hpIG7DoHk/JykudGhlbihhc3luYyBycyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChycykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29uZ1ZpZWNEaW5oS2VtU2VydmljZS5kZWxldGVNYW55KHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5tYXAoeCA9PiB4LmlkKS5qb2luKCcsJykpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHRoZW1EaW5oS2VtKHNob3dOb3RpOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLnBhc3RlQnlTdG9yYWdlKCk7XHJcbiAgICAgICAgaWYgKGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5wYXJzZUF0dGFjaExpbmsoY29udGVudCk7XHJcbiAgICAgICAgICAgIGlmIChvYmoubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29uZ1ZpZWNEaW5oS2VtU2VydmljZS50aGVtRGluaEtlbU5naGllcFZ1KHRoaXMudGFza0lkLCBvYmopLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG93Tm90aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdUaMOqbSBt4bulYyDEkcOtbmgga8OobSB0aMOgbmggY8O0bmchJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5jbGVhckNsaXBib2FyZFN0b3JhZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0F0dGFjaExpbmtCb3ggPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93QXR0YWNoTGlua0JveCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0F0dGFjaExpbmtCb3ggPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dBdHRhY2hMaW5rQm94ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQXR0YWNoTGluaygpIHtcclxuICAgICAgICBpZiAodGhpcy50eXBlZExpbmsgJiYgdGhpcy50eXBlZExpbmsubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBvYmogPSB0aGlzLnBhcnNlQXR0YWNoTGluayh0aGlzLnR5cGVkTGluayk7XHJcbiAgICAgICAgICAgIGlmIChvYmoubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29uZ1ZpZWNEaW5oS2VtU2VydmljZS50aGVtRGluaEtlbU5naGllcFZ1KHRoaXMudGFza0lkLCBvYmopLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnVGjDqm0gbeG7pWMgxJHDrW5oIGvDqG0gdGjDoG5oIGPDtG5nIScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dBdHRhY2hMaW5rQm94ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZWRMaW5rID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0xpw6puIGvhur90IGtow7RuZyBo4bujcCBs4buHIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdMacOqbiBr4bq/dCBraMO0bmcgaOG7o3AgbOG7hyEnKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdMacOqbiBr4bq/dCBraMO0bmcgaOG7o3AgbOG7hyEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb2N1c0lucHV0KGlucHV0OiBhbnkpIHtcclxuICAgICAgICBpbnB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWZ0ZXJTYXZlZChldnQpIHtcclxuICAgICAgICAvLyB0aGlzLnNob3dEZXRhaWxGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2FmdGVyIHNhdmVkJywgZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICB2aWV3UmF3TGluayhyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICBpZiAoIXJvd0RhdGEubGlua0dvYykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMubW9kZWxWaWV3LmhlYWRlciA9IGBUaMO0bmcgdGluIGNoaSB0aeG6v3QgJHtyb3dEYXRhLnRlbkhpZW5UaGlEb2lUdW9uZ306ICR7cm93RGF0YS50aWV1RGV9YDtcclxuICAgICAgICB0aGlzLm1vZGVsVmlldy5zaG93RWRpdEZvcm0gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW9kZWxWaWV3LmRhdGEubGluayA9IGAke3Jvd0RhdGEubGlua0dvY30/aWQ9JHtyb3dEYXRhLmVudGl0eUtleX0mcGlkPSR7cm93RGF0YS5wZXJtaXNzaW9uSWR9Jmhhc2g9JHt0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKX1gO1xyXG5cclxuICAgICAgICB0aGlzLmlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xyXG4gICAgICAgIHRoaXMuaWZyYW1lLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgIHRoaXMuaWZyYW1lLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcclxuICAgICAgICB0aGlzLmlmcmFtZS5zdHlsZS5ib3JkZXIgPSAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy5pZnJhbWUuc3JjID0gdGhpcy5tb2RlbFZpZXcuZGF0YS5saW5rO1xyXG4gICAgICAgIHRoaXMuaWZyYW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuaWZyYW1lKTtcclxuICAgICAgICB0aGlzLmlmcmFtZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgIH1cclxufVxyXG4iLCI8Y3J1ZC1saXN0ICNjcnVkTGlzdCBbbW9kZWxdPVwibW9kZWxcIiBbc2V0dGluZ109XCJzZXR0aW5nXCIgW2RhdGFTb3VyY2VdPVwibW9kZWwuZGF0YVNvdXJjZVwiIFtoaWRkZW5BZGRdPVwidHJ1ZVwiXHJcbiAgICBbaGlkZGVuRWRpdF09XCJ0cnVlXCIgW2hpZGRlbkRlbGV0ZV09XCJ0cnVlXCIgKG9uUmVsb2FkKT1cIl90cmlnZ2VyUHJvY2Vzc0RhdGEoJGV2ZW50KVwiIChvblZpZXcpPVwidmlld0xpbmtJdGVtKCRldmVudClcIlxyXG4gICAgKG9uRGVsZXRlKT1cImRlbGV0ZUxpbmtJdGVtKCRldmVudClcIiAob25EZWxldGVNdWx0aXBsZSk9XCJkZWxldGVMaW5rSXRlbU11bHRpcGxlKCRldmVudClcIlxyXG4gICAgKG9uUmVsb2FkZWQpPVwiX2hhbmRsZVJlbG9hZGVkKCRldmVudClcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjdGlldURlIGxldC1yb3dEYXRhPVwicm93RGF0YVwiPlxyXG4gICAgICAgIFt7e3Jvd0RhdGEudGVuSGllblRoaURvaVR1b25nfX1dIHt7cm93RGF0YS50aWV1RGV9fVxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYnV0dG9uQWZ0ZXJUb29sYmFyPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJmb3JtU3RhdGUgPT0gZW51bUZvcm1TdGF0ZS5FRElUIHx8IGZvcm1TdGF0ZSA9PSBlbnVtRm9ybVN0YXRlLkFERFwiIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIHBSaXBwbGVcclxuICAgICAgICAgICAgbGFiZWw9XCJUaMOqbSBt4bubaVwiIGljb249XCJwaSBwaS1wbHVzXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXByaW1hcnlcIiAoY2xpY2spPVwidGhlbURpbmhLZW0oKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiKGZvcm1TdGF0ZSA9PSBlbnVtRm9ybVN0YXRlLkVESVQgIHx8IGZvcm1TdGF0ZSA9PSBlbnVtRm9ybVN0YXRlLkFERCkgJiYgbW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwXCJcclxuICAgICAgICAgICAgcEJ1dHRvbiBwUmlwcGxlIGxhYmVsPVwiWMOzYVwiIGljb249XCJwaSBwaS10cmFzaFwiIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlclwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVMaW5rSXRlbU11bHRpcGxlKCRldmVudClcIj48L2J1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2Z1bmN0aW9uIGxldC1yb3dEYXRhPVwicm93RGF0YVwiPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJmb3JtU3RhdGUgPT0gZW51bUZvcm1TdGF0ZS5FRElUIHx8IGZvcm1TdGF0ZSA9PSBlbnVtRm9ybVN0YXRlLkFERFwiIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIHBSaXBwbGVcclxuICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyXCIgcFRvb2x0aXA9XCJI4buneSDEkcOtbmgga8OobVwiXHJcbiAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIFtkaXNhYmxlZF09XCIhcm93RGF0YS5hbGxvd0VkaXRcIiAoY2xpY2spPVwiZGVsZXRlTGlua0l0ZW0ocm93RGF0YSlcIj48L2J1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2ZpbGVEaW5oS2VtIGxldC1yb3dEYXRhPVwicm93RGF0YVwiPlxyXG4gICAgICAgIDxmaWxlLW1hbmFnZXIgW2ZpbGVEYXRhU2VydmljZV09XCJmaWxlRGF0YVNlcnZpY2VcIiBbcmVhZG9ubHldPVwidHJ1ZVwiIFtzZXJ2aWNlQ29kZV09XCJyb3dEYXRhLnNlcnZpY2VDb2RlXCJcclxuICAgICAgICAgICAgW2VudGl0eV09XCJyb3dEYXRhLmVudGl0eVwiIFtlbnRpdHlLZXldPVwicm93RGF0YS5lbnRpdHlLZXlcIiBbbGF5b3V0XT1cImxheW91dEZpbGUuU0lNUExFXCI+XHJcbiAgICAgICAgPC9maWxlLW1hbmFnZXI+XHJcblxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9jcnVkLWxpc3Q+XHJcblxyXG48dG4tZGlhbG9nICpuZ0lmPVwic2hvd0RldGFpbEZvcm1cIiAjZGlhbG9nIFtzdHlsZUNsYXNzXT1cIidjb25ndmllYy1mb3JtIHRuLWZvcm0tZGlhbG9nJ1wiXHJcbiAgICBbaGVhZGVyXT1cInNldHRpbmcucG9wdXBIZWFkZXIgfCB0cmFuc2xhdGVcIiBbcG9wdXBTaXplXT1cInNldHRpbmcucG9wdXBTaXplXCIgKG9uSGlkZSk9XCJzaG93RGV0YWlsRm9ybSA9IGZhbHNlXCI+XHJcbiAgICA8YmFzZS1jb25ndmllYy1kaW5oa2VtLWZvcm0gI2Zvcm1CYXNlIFt0YXNrSWRdPVwidGFza0lkXCIgW3BhcmVudE1vZGVsXT1cIm1vZGVsXCIgW3BhcmVudENvbnRleHRdPVwiY29udGV4dFwiXHJcbiAgICAgICAgW21vZGVsXT1cImZvcm1Nb2RlbFwiIChvblNhdmVkKT1cInNob3dEZXRhaWxGb3JtID0gZmFsc2U7Y3J1ZExpc3QucmVsb2FkKClcIiAob25DYW5jZWwpPVwiX2hhbmRsZUNhbmNlbCgkZXZlbnQpXCJcclxuICAgICAgICAob25BZnRlclNhdmVkKT1cIm9uQWZ0ZXJTYXZlZCgkZXZlbnQpXCI+XHJcbiAgICA8L2Jhc2UtY29uZ3ZpZWMtZGluaGtlbS1mb3JtPlxyXG48L3RuLWRpYWxvZz5cclxuXHJcbjx0bi1kaWFsb2cgKm5nSWY9XCJzaG93QXR0YWNoTGlua0JveFwiICNkaWFsb2cyIFttYXhpbWl6YWJsZV09XCJmYWxzZVwiIFtoZWFkZXJdPVwiJ05o4bqtcCBsacOqbiBr4bq/dCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgW3BvcHVwU2l6ZV09XCJ7IHdpZHRoOiA2MDAsIGhlaWdodDogNTB9XCIgKG9uSGlkZSk9XCJzaG93QXR0YWNoTGlua0JveCA9IGZhbHNlOyB0eXBlZExpbms9JydcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwLWNvbC0xMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLWdyaWRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtbWQtMTBcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCAjaW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIk5o4bqtcCBsacOqbiBr4bq/dCBzYW8gY2jDqXAgdOG7qyBwaMOibiBo4buHIGtow6FjLi4uXCIgcElucHV0VGV4dFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1jb2wtMTJcIiBbKG5nTW9kZWwpXT1cInR5cGVkTGlua1wiIChrZXl1cC5lbnRlcik9XCJhZGRBdHRhY2hMaW5rKClcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBjbGFzcz1cInAtYnV0dG9uLXByaW1hcnkgcC1jb2wtMTJcIiBsYWJlbD1cIk9rXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHlwZWRMaW5rICE9ICcnPyBudWxsIDogdHJ1ZVwiIChjbGljayk9XCJhZGRBdHRhY2hMaW5rKClcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxhZnRlci12aWV3LWNoZWNrZWQgKGxvYWRlZCk9XCJmb2N1c0lucHV0KGlucHV0KVwiPjwvYWZ0ZXItdmlldy1jaGVja2VkPlxyXG48L3RuLWRpYWxvZz5cclxuXHJcbjwhLS0gPHRuLWRpYWxvZyAqbmdJZj1cIm1vZGVsVmlldy5zaG93RWRpdEZvcm1cIiAjZGlhbG9nIFtzdHlsZUNsYXNzXT1cIidjb25ndmllYy1mb3JtIHRuLWZvcm0tZGlhbG9nJ1wiXHJcbiAgICBbaGVhZGVyXT1cIm1vZGVsVmlldy5oZWFkZXIgfCB0cmFuc2xhdGVcIiBbcG9wdXBTaXplXT1cIm1vZGVsVmlldy5wb3B1cFNpemVcIiBbdXNlRGVmYXVsdFNjcm9sbEJhcl09XCJ0cnVlXCJcclxuICAgIChvbkhpZGUpPVwibW9kZWxWaWV3LnNob3dFZGl0Rm9ybSA9IGZhbHNlXCI+XHJcbiAgICA8ZGl2PjEyMzwvZGl2PlxyXG4gICAgPGlmcmFtZSBzdHlsZT1cImJvcmRlcjogbm9uZTsgd2lkdGg6IDEwMCU7IGhlaWdodDogY2FsYygxMDAlIC0gMC41cmVtKTtcIlxyXG4gICAgICAgIFtzcmNdPVwibW9kZWxWaWV3LmRhdGEubGluayB8IHNhZmVVcmxcIj48L2lmcmFtZT5cclxuPC90bi1kaWFsb2c+IC0tPlxyXG48IS0tIDxkaXYgKm5nSWY9XCJtb2RlbFZpZXcuc2hvd0VkaXRGb3JtXCI+XHJcbiAgICA8aWZyYW1lICNpZnIgc3R5bGU9XCJib3JkZXI6IG5vbmU7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IGNhbGMoMTAwJSAtIDAuNXJlbSk7XCJcclxuICAgICAgICBbc3JjXT1cIm1vZGVsVmlldy5kYXRhLmxpbmsgfCBzYWZlVXJsXCI+PC9pZnJhbWU+XHJcbjwvZGl2PiAtLT4iXX0=
267
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZ3ZpZWMtZGluaGtlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb25ndmllYy9jb25ndmllYy9jb25ndmllYy1kaW5oa2VtL2Nvbmd2aWVjLWRpbmhrZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29uZ3ZpZWMvY29uZ3ZpZWMvY29uZ3ZpZWMtZGluaGtlbS9jb25ndmllYy1kaW5oa2VtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFZLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXJHLE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFXN0UsTUFBTSxPQUFPLDRCQUE2QixTQUFRLFlBQVk7SUF5QjFELFlBQ0ksUUFBa0IsRUFDVix1QkFBK0MsRUFDaEQsZUFBZ0M7UUFFdkMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSFIsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF3QjtRQUNoRCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUEzQjNDLGVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBWXJCLGVBQVUsR0FBRyxjQUFjLENBQUM7UUFDNUIs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SXZCLFNBQVM7c0JBQXJCLEtBQUs7Z0JBU0csTUFBTTtzQkFBZCxLQUFLO2dCQTBFTixTQUFTO3NCQURSLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YUxpc3RCYXNlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2RhdGEtbGlzdC1iYXNlJztcclxuaW1wb3J0IHsgRm9ybVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TY2hlbWFCYXNlLCBEaWFsb2dNb2RlbCwgTW9kZWxTY2hlbWEsIFBvcHVwU2l6ZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBGaWxlRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnVtRmlsZUxheW91dCwgSGVpZ2h0VHlwZSwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9lbnVtcy9jb21tb24nO1xyXG5pbXBvcnQgeyBHcmlkSW5mbyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBDb25nVmllY0RpbmhLZW1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZ3ZpZWMtZGluaGtlbS5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFzZS1jb25ndmllYy1kaW5oa2VtJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb25ndmllYy1kaW5oa2VtLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2Nvbmd2aWVjLWRpbmhrZW0uY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW0NvbXBvbmVudENvbnRleHRTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZUNvbmd2aWVjRGluaGtlbUNvbXBvbmVudCBleHRlbmRzIERhdGFMaXN0QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBfZm9ybVN0YXRlID0gRm9ybVN0YXRlLlZJRVc7XHJcbiAgICBASW5wdXQoKSBzZXQgZm9ybVN0YXRlKHZhbHVlOiBGb3JtU3RhdGUpIHtcclxuICAgICAgICB0aGlzLl9mb3JtU3RhdGUgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ0lmSXNGb3JtVmlldygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBnZXQgZm9ybVN0YXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtU3RhdGU7XHJcbiAgICB9XHJcbiAgICBASW5wdXQoKSB0YXNrSWQ6IGFueTtcclxuXHJcbiAgICBwdWJsaWMgbGF5b3V0RmlsZSA9IEVudW1GaWxlTGF5b3V0O1xyXG4gICAgcHVibGljIGVudW1Gb3JtU3RhdGUgPSBGb3JtU3RhdGU7XHJcblxyXG4gICAgZm9ybU1vZGVsOiBhbnkgPSB7fTtcclxuICAgIHNob3dBdHRhY2hMaW5rQm94ID0gZmFsc2U7XHJcbiAgICB0eXBlZExpbms6IHN0cmluZyA9ICcnO1xyXG4gICAgbW9kZWxWaWV3OiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XHJcbiAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHsgbWF4aW1pemU6IHRydWUgfSlcclxuICAgIH0pO1xyXG4gICAgaWZyYW1lQ29udGFpbmVyOiBhbnk7XHJcbiAgICBpZnJhbWU6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBfY29uZ1ZpZWNEaW5oS2VtU2VydmljZTogQ29uZ1ZpZWNEaW5oS2VtU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgZmlsZURhdGFTZXJ2aWNlOiBGaWxlRGF0YVNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcub2JqZWN0TmFtZSA9ICdt4bulYyDEkcOtbmgga8OobSc7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlID0gdGhpcy5fY29uZ1ZpZWNEaW5oS2VtU2VydmljZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmdQZXJtaXNzaW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1dvcmtmbG93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuUGFnZVNldHRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5BZHZhbmNlU2VhcmNoID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuRmlsdGVyUm93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuZml4SGVpZ2h0VHlwZUluRGlhbG9nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmRpc2FibGVTaGFyZSA9IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy5zZXR0aW5nLm11bHRpcGxlQ2hlY2tXaGVuQ2xpY2tSb3cgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY2hlY2tBbGxvd1NlbGVjdFJvdyA9IChyb3dEYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyb3dEYXRhLmhpZGRlbkNoZWNrQm94KSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhlaWdodFR5cGUgPSBIZWlnaHRUeXBlLmR5bmFtaWM7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0dGluZy5zaG93RXhwb3J0U2VsZWN0ZWRJdGVtcyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmdJZklzRm9ybVZpZXcoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1vZGVsU2NoZW1hcyA9IFtcclxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHsgZmllbGQ6ICd0ZW5IaWVuVGhpRG9pVHVvbmcnLCBuYW1lOiAnxJDhu5FpIHTGsOG7o25nJywgZnVsbE5hbWU6ICfEkOG7kWkgdMaw4bujbmcnLCBkZXNjcmlwdGlvbjogJ8SQ4buRaSB0xrDhu6NuZycgfSksXHJcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7IGZpZWxkOiAndGlldURlJywgbmFtZTogJ1Rpw6p1IMSR4buBJywgZnVsbE5hbWU6ICdUacOqdSDEkeG7gScsIGRlc2NyaXB0aW9uOiAnVGnDqnUgxJHhu4EnIH0pLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMgPSBbXHJcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAndGlldURlJyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVGnDqnUgxJHhu4EnLFxyXG4gICAgICAgICAgICAgICAgc2hvd0VkaXRMaW5rOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICd0aWV1RGUnXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2ZpbGVEaW5oS2VtJyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnRmlsZSDEkcOtbmgga8OobScsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2ZpbGVEaW5oS2VtJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHRoaXMuaWZyYW1lQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgdGhpcy5pZnJhbWVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLmlmcmFtZUNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XHJcbiAgICAgICAgdGhpcy5pZnJhbWVDb250YWluZXIuc3R5bGUubGVmdCA9ICcwJztcclxuICAgICAgICB0aGlzLmlmcmFtZUNvbnRhaW5lci5zdHlsZS50b3AgPSAnMCc7XHJcbiAgICAgICAgdGhpcy5pZnJhbWVDb250YWluZXIuc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgdGhpcy5pZnJhbWVDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xyXG4gICAgICAgIHRoaXMuaWZyYW1lQ29udGFpbmVyLnN0eWxlWyd6LWluZGV4J10gPSA5OTk5O1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uYXBwZW5kQ2hpbGQodGhpcy5pZnJhbWVDb250YWluZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptZXNzYWdlJywgWyckZXZlbnQnXSlcclxuICAgIG9uTWVzc2FnZShldmVudCkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlTWVzc2FnZUV2ZW50KGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVNZXNzYWdlRXZlbnQoZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGV2ZW50LmRhdGEubWVzc2FnZTtcclxuICAgICAgICAgICAgaWYgKG1lc3NhZ2UgPT0gJ2NhbmNlbCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VJZnJhbWUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlID09ICdzYXZlZCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VJZnJhbWUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjbG9zZUlmcmFtZSgpIHtcclxuICAgICAgICB0aGlzLmlmcmFtZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIHRoaXMuaWZyYW1lQ29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuaWZyYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXR0aW5nSWZJc0Zvcm1WaWV3KCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCA9IHRoaXMuZm9ybVN0YXRlID09IEZvcm1TdGF0ZS5WSUVXO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5GdW5jdGlvbkNvbHVtbiA9IHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb2RpZnlHcmlkSW5mbyhncmlkSW5mbz86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgZ3JpZEluZm8uZmlsdGVycy5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignaWRDb25nVmllYycsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLnRhc2tJZClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGJlZm9yZVJlbmRlckRhdGFTb3VyY2UoZGF0YVNvdXJjZSkge1xyXG4gICAgICAgIC8vIGNvbnN0IHVzZXJJZCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldElkKCk7XHJcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpdGVtLmFsbG93RWRpdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpdGVtLmhpZGRlbkNoZWNrQm94ID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKCFpdGVtLnJlYWRPbmx5XHJcbiAgICAgICAgICAgICAgICAvLyB8fCBpdGVtLmNyZWF0ZWRCeSA9PSB1c2VySWRcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmFsbG93RWRpdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmhpZGRlbkNoZWNrQm94ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZnRlckdldERhdGEoKSB7XHJcbiAgICAgICAgY29uc3QgZGljR3JvdXBlZCA9IHt9O1xyXG4gICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWRpY0dyb3VwZWRbaXRlbS5zZXJ2aWNlQ29kZV0pIHtcclxuICAgICAgICAgICAgICAgIGRpY0dyb3VwZWRbaXRlbS5zZXJ2aWNlQ29kZV0gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWRpY0dyb3VwZWRbaXRlbS5zZXJ2aWNlQ29kZV1baXRlbS5lbnRpdHldKSB7XHJcbiAgICAgICAgICAgICAgICBkaWNHcm91cGVkW2l0ZW0uc2VydmljZUNvZGVdW2l0ZW0uZW50aXR5XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZEhpZW5UaGk6IGl0ZW0uZmllbGRIaWVuVGhpLFxyXG4gICAgICAgICAgICAgICAgICAgIGxzdElkOiBbXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaWNHcm91cGVkW2l0ZW0uc2VydmljZUNvZGVdW2l0ZW0uZW50aXR5XS5sc3RJZC5wdXNoKGl0ZW0uZW50aXR5S2V5KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBkYXRhRGlzcGxheU5hbWUgPSBhd2FpdCB0aGlzLl9jb25nVmllY0RpbmhLZW1TZXJ2aWNlLmdldERldGFpbEl0ZW1zKGRpY0dyb3VwZWQpO1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm1vZGVsLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgaXRlbS50aWV1RGUgPSBkYXRhRGlzcGxheU5hbWVbaXRlbS5zZXJ2aWNlQ29kZV1baXRlbS5lbnRpdHldLmRpY1RpZXVEZVtpdGVtLmVudGl0eUtleV07XHJcbiAgICAgICAgICAgIGlmICghaXRlbS50ZW5IaWVuVGhpRG9pVHVvbmcpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0udGVuSGllblRoaURvaVR1b25nID0gZGF0YURpc3BsYXlOYW1lW2l0ZW0uc2VydmljZUNvZGVdW2l0ZW0uZW50aXR5XS50ZW5IaWVuVGhpRG9pVHVvbmc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGl0ZW0udGVuSGllblRoaURvaVR1b25nKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLnRlbkhpZW5UaGlEb2lUdW9uZyA9IGl0ZW0udGVuSGllblRoaURvaVR1b25nLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0udGVuSGllblRoaURvaVR1b25nID0gaXRlbS50ZW5IaWVuVGhpRG9pVHVvbmcuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBpdGVtLnRlbkhpZW5UaGlEb2lUdW9uZy5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWZ0ZXJSZWxvYWRlZCgpIHtcclxuICAgICAgICB0aGlzLmZpbGVEYXRhU2VydmljZS5nZXREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlld0xpbmtJdGVtKGV2dCkge1xyXG4gICAgICAgIHRoaXMudmlld1Jhd0xpbmsoZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVMaW5rSXRlbShldnQpIHtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0NvbmZpcm0oJ0LhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiBo4buneSDEkcOtbmgga8OobSBi4bqjbiBnaGkgbsOgeT8nKS50aGVuKGFzeW5jIHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKHJzKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jb25nVmllY0RpbmhLZW1TZXJ2aWNlLmRlbGV0ZShldnQuaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUxpbmtJdGVtTXVsdGlwbGUoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKCdC4bqhbiBjw7MgY2jhuq9jIGNo4bqvbiBtdeG7kW4gaOG7p3kgxJHDrW5oIGvDqG0gYuG6o24gZ2hpIG7DoHk/JykudGhlbihhc3luYyBycyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChycykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29uZ1ZpZWNEaW5oS2VtU2VydmljZS5kZWxldGVNYW55KHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5tYXAoeCA9PiB4LmlkKS5qb2luKCcsJykpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHRoZW1EaW5oS2VtKHNob3dOb3RpOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLnBhc3RlQnlTdG9yYWdlKCk7XHJcbiAgICAgICAgaWYgKGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5wYXJzZUF0dGFjaExpbmsoY29udGVudCk7XHJcbiAgICAgICAgICAgIGlmIChvYmoubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29uZ1ZpZWNEaW5oS2VtU2VydmljZS50aGVtRGluaEtlbU5naGllcFZ1KHRoaXMudGFza0lkLCBvYmopLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG93Tm90aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdUaMOqbSBt4bulYyDEkcOtbmgga8OobSB0aMOgbmggY8O0bmchJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5jbGVhckNsaXBib2FyZFN0b3JhZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0F0dGFjaExpbmtCb3ggPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93QXR0YWNoTGlua0JveCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0F0dGFjaExpbmtCb3ggPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dBdHRhY2hMaW5rQm94ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQXR0YWNoTGluaygpIHtcclxuICAgICAgICBpZiAodGhpcy50eXBlZExpbmsgJiYgdGhpcy50eXBlZExpbmsubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBvYmogPSB0aGlzLnBhcnNlQXR0YWNoTGluayh0aGlzLnR5cGVkTGluayk7XHJcbiAgICAgICAgICAgIGlmIChvYmoubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29uZ1ZpZWNEaW5oS2VtU2VydmljZS50aGVtRGluaEtlbU5naGllcFZ1KHRoaXMudGFza0lkLCBvYmopLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnVGjDqm0gbeG7pWMgxJHDrW5oIGvDqG0gdGjDoG5oIGPDtG5nIScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dBdHRhY2hMaW5rQm94ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZWRMaW5rID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0xpw6puIGvhur90IGtow7RuZyBo4bujcCBs4buHIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdMacOqbiBr4bq/dCBraMO0bmcgaOG7o3AgbOG7hyEnKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdMacOqbiBr4bq/dCBraMO0bmcgaOG7o3AgbOG7hyEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb2N1c0lucHV0KGlucHV0OiBhbnkpIHtcclxuICAgICAgICBpbnB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWZ0ZXJTYXZlZChldnQpIHtcclxuICAgICAgICAvLyB0aGlzLnNob3dEZXRhaWxGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2FmdGVyIHNhdmVkJywgZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICB2aWV3UmF3TGluayhyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICBpZiAoIXJvd0RhdGEubGlua0dvYykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMubW9kZWxWaWV3LmhlYWRlciA9IGBUaMO0bmcgdGluIGNoaSB0aeG6v3QgJHtyb3dEYXRhLnRlbkhpZW5UaGlEb2lUdW9uZ306ICR7cm93RGF0YS50aWV1RGV9YDtcclxuICAgICAgICB0aGlzLm1vZGVsVmlldy5zaG93RWRpdEZvcm0gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW9kZWxWaWV3LmRhdGEubGluayA9IGAke3Jvd0RhdGEubGlua0dvY30/aWQ9JHtyb3dEYXRhLmVudGl0eUtleX0mcGlkPSR7cm93RGF0YS5wZXJtaXNzaW9uSWR9Jmhhc2g9JHt0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKX1gO1xyXG5cclxuICAgICAgICB0aGlzLmlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xyXG4gICAgICAgIHRoaXMuaWZyYW1lLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgIHRoaXMuaWZyYW1lLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcclxuICAgICAgICB0aGlzLmlmcmFtZS5zdHlsZS5ib3JkZXIgPSAnbm9uZSc7XHJcbiAgICAgICAgdGhpcy5pZnJhbWUuc3JjID0gdGhpcy5tb2RlbFZpZXcuZGF0YS5saW5rO1xyXG4gICAgICAgIHRoaXMuaWZyYW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuaWZyYW1lKTtcclxuICAgICAgICB0aGlzLmlmcmFtZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgIH1cclxufVxyXG4iLCI8Y3J1ZC1saXN0ICNjcnVkTGlzdCBbbW9kZWxdPVwibW9kZWxcIiBbc2V0dGluZ109XCJzZXR0aW5nXCIgW2RhdGFTb3VyY2VdPVwibW9kZWwuZGF0YVNvdXJjZVwiIFtoaWRkZW5BZGRdPVwidHJ1ZVwiXHJcbiAgICBbaGlkZGVuRWRpdF09XCJ0cnVlXCIgW2hpZGRlbkRlbGV0ZV09XCJ0cnVlXCIgKG9uUmVsb2FkKT1cIl90cmlnZ2VyUHJvY2Vzc0RhdGEoJGV2ZW50KVwiIChvblZpZXcpPVwidmlld0xpbmtJdGVtKCRldmVudClcIlxyXG4gICAgKG9uRGVsZXRlKT1cImRlbGV0ZUxpbmtJdGVtKCRldmVudClcIiAob25EZWxldGVNdWx0aXBsZSk9XCJkZWxldGVMaW5rSXRlbU11bHRpcGxlKCRldmVudClcIlxyXG4gICAgKG9uUmVsb2FkZWQpPVwiX2hhbmRsZVJlbG9hZGVkKCRldmVudClcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjdGlldURlIGxldC1yb3dEYXRhPVwicm93RGF0YVwiPlxyXG4gICAgICAgIFt7e3Jvd0RhdGEudGVuSGllblRoaURvaVR1b25nfX1dIHt7cm93RGF0YS50aWV1RGV9fVxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYnV0dG9uQWZ0ZXJUb29sYmFyPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJmb3JtU3RhdGUgPT0gZW51bUZvcm1TdGF0ZS5FRElUIHx8IGZvcm1TdGF0ZSA9PSBlbnVtRm9ybVN0YXRlLkFERFwiIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIHBSaXBwbGVcclxuICAgICAgICAgICAgbGFiZWw9XCJUaMOqbSBt4bubaVwiIGljb249XCJwaSBwaS1wbHVzXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXByaW1hcnlcIiAoY2xpY2spPVwidGhlbURpbmhLZW0oKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiKGZvcm1TdGF0ZSA9PSBlbnVtRm9ybVN0YXRlLkVESVQgIHx8IGZvcm1TdGF0ZSA9PSBlbnVtRm9ybVN0YXRlLkFERCkgJiYgbW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwXCJcclxuICAgICAgICAgICAgcEJ1dHRvbiBwUmlwcGxlIGxhYmVsPVwiWMOzYVwiIGljb249XCJwaSBwaS10cmFzaFwiIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlclwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVMaW5rSXRlbU11bHRpcGxlKCRldmVudClcIj48L2J1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2Z1bmN0aW9uIGxldC1yb3dEYXRhPVwicm93RGF0YVwiPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJmb3JtU3RhdGUgPT0gZW51bUZvcm1TdGF0ZS5FRElUIHx8IGZvcm1TdGF0ZSA9PSBlbnVtRm9ybVN0YXRlLkFERFwiIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIHBSaXBwbGVcclxuICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyXCIgcFRvb2x0aXA9XCJI4buneSDEkcOtbmgga8OobVwiXHJcbiAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIFtkaXNhYmxlZF09XCIhcm93RGF0YS5hbGxvd0VkaXRcIiAoY2xpY2spPVwiZGVsZXRlTGlua0l0ZW0ocm93RGF0YSlcIj48L2J1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2ZpbGVEaW5oS2VtIGxldC1yb3dEYXRhPVwicm93RGF0YVwiPlxyXG4gICAgICAgIDxmaWxlLW1hbmFnZXIgW2ZpbGVEYXRhU2VydmljZV09XCJmaWxlRGF0YVNlcnZpY2VcIiBbcmVhZG9ubHldPVwidHJ1ZVwiIFtzZXJ2aWNlQ29kZV09XCJyb3dEYXRhLnNlcnZpY2VDb2RlXCJcclxuICAgICAgICAgICAgW2VudGl0eV09XCJyb3dEYXRhLmVudGl0eVwiIFtlbnRpdHlLZXldPVwicm93RGF0YS5lbnRpdHlLZXlcIiBbbGF5b3V0XT1cImxheW91dEZpbGUuU0lNUExFXCI+XHJcbiAgICAgICAgPC9maWxlLW1hbmFnZXI+XHJcblxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9jcnVkLWxpc3Q+XHJcblxyXG48dG4tZGlhbG9nICpuZ0lmPVwic2hvd0RldGFpbEZvcm1cIiAjZGlhbG9nIFtzdHlsZUNsYXNzXT1cIidjb25ndmllYy1mb3JtIHRuLWZvcm0tZGlhbG9nJ1wiXHJcbiAgICBbaGVhZGVyXT1cInNldHRpbmcucG9wdXBIZWFkZXIgfCB0cmFuc2xhdGVcIiBbcG9wdXBTaXplXT1cInNldHRpbmcucG9wdXBTaXplXCIgKG9uSGlkZSk9XCJzaG93RGV0YWlsRm9ybSA9IGZhbHNlXCI+XHJcbiAgICA8YmFzZS1jb25ndmllYy1kaW5oa2VtLWZvcm0gI2Zvcm1CYXNlIFt0YXNrSWRdPVwidGFza0lkXCIgW3BhcmVudE1vZGVsXT1cIm1vZGVsXCIgW3BhcmVudENvbnRleHRdPVwiY29udGV4dFwiXHJcbiAgICAgICAgW21vZGVsXT1cImZvcm1Nb2RlbFwiIChvblNhdmVkKT1cInNob3dEZXRhaWxGb3JtID0gZmFsc2U7Y3J1ZExpc3QucmVsb2FkKClcIiAob25DYW5jZWwpPVwiX2hhbmRsZUNhbmNlbCgkZXZlbnQpXCJcclxuICAgICAgICAob25BZnRlclNhdmVkKT1cIm9uQWZ0ZXJTYXZlZCgkZXZlbnQpXCI+XHJcbiAgICA8L2Jhc2UtY29uZ3ZpZWMtZGluaGtlbS1mb3JtPlxyXG48L3RuLWRpYWxvZz5cclxuXHJcbjx0bi1kaWFsb2cgKm5nSWY9XCJzaG93QXR0YWNoTGlua0JveFwiICNkaWFsb2cyIFttYXhpbWl6YWJsZV09XCJmYWxzZVwiIFtoZWFkZXJdPVwiJ05o4bqtcCBsacOqbiBr4bq/dCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgW3BvcHVwU2l6ZV09XCJ7IHdpZHRoOiA2MDAsIGhlaWdodDogNTB9XCIgKG9uSGlkZSk9XCJzaG93QXR0YWNoTGlua0JveCA9IGZhbHNlOyB0eXBlZExpbms9JydcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWQ6Y29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgI2lucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJOaOG6rXAgbGnDqm4ga+G6v3Qgc2FvIGNow6lwIHThu6sgcGjDom4gaOG7hyBraMOhYy4uLlwiIHBJbnB1dFRleHRcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMlwiIFsobmdNb2RlbCldPVwidHlwZWRMaW5rXCIgKGtleXVwLmVudGVyKT1cImFkZEF0dGFjaExpbmsoKVwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWQ6Y29sLTJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gY2xhc3M9XCJwLWJ1dHRvbi1wcmltYXJ5IGNvbC0xMlwiIGxhYmVsPVwiT2tcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0eXBlZExpbmsgIT0gJyc/IG51bGwgOiB0cnVlXCIgKGNsaWNrKT1cImFkZEF0dGFjaExpbmsoKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGFmdGVyLXZpZXctY2hlY2tlZCAobG9hZGVkKT1cImZvY3VzSW5wdXQoaW5wdXQpXCI+PC9hZnRlci12aWV3LWNoZWNrZWQ+XHJcbjwvdG4tZGlhbG9nPlxyXG5cclxuPCEtLSA8dG4tZGlhbG9nICpuZ0lmPVwibW9kZWxWaWV3LnNob3dFZGl0Rm9ybVwiICNkaWFsb2cgW3N0eWxlQ2xhc3NdPVwiJ2Nvbmd2aWVjLWZvcm0gdG4tZm9ybS1kaWFsb2cnXCJcclxuICAgIFtoZWFkZXJdPVwibW9kZWxWaWV3LmhlYWRlciB8IHRyYW5zbGF0ZVwiIFtwb3B1cFNpemVdPVwibW9kZWxWaWV3LnBvcHVwU2l6ZVwiIFt1c2VEZWZhdWx0U2Nyb2xsQmFyXT1cInRydWVcIlxyXG4gICAgKG9uSGlkZSk9XCJtb2RlbFZpZXcuc2hvd0VkaXRGb3JtID0gZmFsc2VcIj5cclxuICAgIDxkaXY+MTIzPC9kaXY+XHJcbiAgICA8aWZyYW1lIHN0eWxlPVwiYm9yZGVyOiBub25lOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiBjYWxjKDEwMCUgLSAwLjVyZW0pO1wiXHJcbiAgICAgICAgW3NyY109XCJtb2RlbFZpZXcuZGF0YS5saW5rIHwgc2FmZVVybFwiPjwvaWZyYW1lPlxyXG48L3RuLWRpYWxvZz4gLS0+XHJcbjwhLS0gPGRpdiAqbmdJZj1cIm1vZGVsVmlldy5zaG93RWRpdEZvcm1cIj5cclxuICAgIDxpZnJhbWUgI2lmciBzdHlsZT1cImJvcmRlcjogbm9uZTsgd2lkdGg6IDEwMCU7IGhlaWdodDogY2FsYygxMDAlIC0gMC41cmVtKTtcIlxyXG4gICAgICAgIFtzcmNdPVwibW9kZWxWaWV3LmRhdGEubGluayB8IHNhZmVVcmxcIj48L2lmcmFtZT5cclxuPC9kaXY+IC0tPiJdfQ==
@@ -174,6 +174,9 @@ export class BaseCongViecFormComponent extends DataFormBase {
174
174
  // );
175
175
  // }
176
176
  this.customTemplate = this._componentService.dicTemplate;
177
+ if (this.customTemplate) {
178
+ this.listCongViecCon = this.customTemplate['listCongViecCon'];
179
+ }
177
180
  this.onInit.emit({
178
181
  buttonTemplate: this.buttonTemplate
179
182
  });
@@ -269,10 +272,10 @@ export class BaseCongViecFormComponent extends DataFormBase {
269
272
  }
270
273
  }
271
274
  BaseCongViecFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BaseCongViecFormComponent, deps: [{ token: i0.Injector }, { token: i1.ComponentService }, { token: i2.CongViecService }, { token: i3.DmLoaiCongViecService }, { token: i4.DmLinhVucCongViecService }, { token: i5.DmPriorityService }, { token: i6.WorkflowPermissionDetailService }], target: i0.ɵɵFactoryTarget.Component });
272
- BaseCongViecFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: BaseCongViecFormComponent, selector: "base-congviec-form", inputs: { itemId: "itemId", crudList: "crudList", control: "control", tenCongViec: "tenCongViec" }, outputs: { onInit: "onInit", onAfterInserted: "onAfterInserted" }, providers: [ComponentContextService], viewQueries: [{ propertyName: "formNextFirstStep", first: true, predicate: CongViecNextFirstStepComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"contentTask\"></ng-container>\r\n<ng-template #contentTask>\r\n <tn-custom-scrollbar>\r\n <div *ngIf=\"idLoaiCongViec === 'f51ca5f6-d266-4521-a633-e2f9f8528aaf'\" class=\"note\"\r\n style=\"padding: 0.5rem 1rem;\">\r\n <b>Ghi ch\u00FA</b>: Vui l\u00F2ng chuy\u1EC3n sang ph\u00E2n h\u1EC7 V\u0103n b\u1EA3n \u0111\u1EC3 t\u1EA1o D\u1EF1 th\u1EA3o v\u0103n b\u1EA3n \u0111i. Link:\r\n <a href=\"https://usmart.utc.edu.vn/vanban/vanbandi/du-thao\" target=\"_blank\">\r\n https://usmart.utc.edu.vn/vanban/vanbandi/du-thao</a>\r\n </div>\r\n\r\n <crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n [autoFocus]=\"autoFocus\" (onFormReady)=\"_handleFormReady($event)\">\r\n </crud-form>\r\n <base-congviec-dinhkem [loadDetailFromQueryParam]=\"false\" [formState]=\"model.formState\"\r\n [taskId]=\"model.data.id\">\r\n </base-congviec-dinhkem>\r\n <div class=\"tab-child\">\r\n <tn-tabview [data]=\"tabDataChild\" (onTabChange)=\"onTabChange($event)\">\r\n <ng-template #fileDinhKem>\r\n <file-manager [loadDetailFromQueryParam]=\"false\" [serviceCode]=\"setting.baseService.serviceCode\"\r\n [entity]=\"setting.baseService.entityName\" [entityKey]=\"model.data.id\"\r\n [readonly]=\"model.formState == enumFormState.VIEW\">\r\n </file-manager>\r\n </ng-template>\r\n <ng-template #taskChild>\r\n <ng-container *ngTemplateOutlet=\"customTemplate['listCongViecCon']; context: {\r\n formState: model.formState, loaiDanhSach: enumLoaiDanhSachCongViec.CongViecCon, idCongViec: model.data.id\r\n }\"></ng-container>\r\n </ng-template>\r\n <ng-template #taskLienQuan>\r\n <ng-container *ngTemplateOutlet=\"customTemplate['listCongViecCon']; context: {\r\n formState: model.formState, loaiDanhSach: enumLoaiDanhSachCongViec.CongViecLienQuan, idCongViec: model.data.id\r\n }\"></ng-container>\r\n </ng-template>\r\n <!-- <ng-template #traoDoiCongViec>\r\n <div style=\"height: 350px;\">\r\n <chat-box [showSendMessageBox]=\"false\" [serviceCode]=\"'congviec'\" [entity]=\"'congviec'\"\r\n [taskId]=\"model.data.id\" [parentModel]=\"model\" [parentContext]=\"context\" [users]=\"users\"></chat-box>\r\n </div>\r\n <chat-send-message-box [parentContext]=\"context\">\r\n </chat-send-message-box>\r\n </ng-template> -->\r\n </tn-tabview>\r\n </div>\r\n </tn-custom-scrollbar>\r\n</ng-template>\r\n<ng-template #buttonTemplate>\r\n <button *ngFor=\"let butt of this.buttons\" pButton [icon]=\"butt.icon\" [label]=\"butt.label\" class=\"p-button-text\"\r\n (click)=\"butt.command()\">\r\n </button>\r\n <button *ngIf=\"!model.data.__disableEdit && !__isFormView\" type=\"button\" pButton icon=\"pi pi-save\"\r\n class=\"p-button-text\" [label]=\"'FORM.SAVE' | translate\" (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>", styles: [".tab-child{padding:1em}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i8.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i9.CrudFormComponent, selector: "crud-form", inputs: ["setting", "context", "filesUploaded", "isViewMode", "disableKeypressControl", "disableCaching", "styleClass", "useGridTemplate", "formId", "formClass", "autoFocus", "trapFocus", "data", "formState"], outputs: ["onFormReady", "onControlReady", "onAllControlReady", "onModelChanged", "dataChange", "onChange", "onAfterTrinhKy"] }, { kind: "component", type: i10.BaseCongviecDinhkemComponent, selector: "base-congviec-dinhkem", inputs: ["formState", "taskId"] }, { kind: "component", type: i11.TnCustomScrollbarComponent, selector: "tn-custom-scrollbar", inputs: ["style", "useDefaultScrollBar", "autoMode", "class", "config", "whiteBackGround", "showScrollHorizontal"], outputs: ["scrollY", "scrollUp", "scrollDown", "scrollLeft", "scrollRight", "scrollYReachEnd", "scrollYReachStart", "scrollXReachEnd", "scrollXReachStart"] }, { kind: "component", type: i12.TnTabViewComponent, selector: "tn-tabview", inputs: ["vertical", "data", "allowViewAll", "activeCode", "isDynamicHeight"], outputs: ["activeCodeChange", "tabContentChange"] }, { kind: "component", type: i13.FileManagerComponent, selector: "file-manager", inputs: ["control", "fileDataService", "layout", "hiddenCreateFolder", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageSummary", "invalidFileLimitMessageDetail", "dataType", "rootFolderName", "serviceCode", "entity", "entityKey", "readonly", "inTaiLieu", "inTaiLieuChung", "copyToFolderId", "value", "multipleCheckWhenClickRow"], outputs: ["onInit", "onReady", "entityKeyChange", "closePopup", "valueChange", "onChanged", "onSelected"] }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] });
275
+ BaseCongViecFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: BaseCongViecFormComponent, selector: "base-congviec-form", inputs: { itemId: "itemId", crudList: "crudList", control: "control", tenCongViec: "tenCongViec" }, outputs: { onInit: "onInit", onAfterInserted: "onAfterInserted" }, providers: [ComponentContextService], viewQueries: [{ propertyName: "formNextFirstStep", first: true, predicate: CongViecNextFirstStepComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"contentTask\"></ng-container>\r\n<ng-template #contentTask>\r\n <tn-custom-scrollbar>\r\n <div *ngIf=\"idLoaiCongViec === 'f51ca5f6-d266-4521-a633-e2f9f8528aaf'\" class=\"note\"\r\n style=\"padding: 0.5rem 1rem;\">\r\n <b>Ghi ch\u00FA</b>: Vui l\u00F2ng chuy\u1EC3n sang ph\u00E2n h\u1EC7 V\u0103n b\u1EA3n \u0111\u1EC3 t\u1EA1o D\u1EF1 th\u1EA3o v\u0103n b\u1EA3n \u0111i. Link:\r\n <a href=\"https://usmart.utc.edu.vn/vanban/vanbandi/du-thao\" target=\"_blank\">\r\n https://usmart.utc.edu.vn/vanban/vanbandi/du-thao</a>\r\n </div>\r\n\r\n <crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n [autoFocus]=\"autoFocus\" (onFormReady)=\"_handleFormReady($event)\">\r\n </crud-form>\r\n <base-congviec-dinhkem [loadDetailFromQueryParam]=\"false\" [formState]=\"model.formState\"\r\n [taskId]=\"model.data.id\">\r\n </base-congviec-dinhkem>\r\n <div class=\"tab-child\">\r\n <tn-tabview [data]=\"tabDataChild\" (onTabChange)=\"onTabChange($event)\">\r\n <ng-template #fileDinhKem>\r\n <file-manager [loadDetailFromQueryParam]=\"false\" [serviceCode]=\"setting.baseService.serviceCode\"\r\n [entity]=\"setting.baseService.entityName\" [entityKey]=\"model.data.id\"\r\n [readonly]=\"model.formState == enumFormState.VIEW\">\r\n </file-manager>\r\n </ng-template>\r\n <ng-template #taskChild>\r\n <ng-container *ngTemplateOutlet=\"listCongViecCon; context: {\r\n formState: model.formState, loaiDanhSach: enumLoaiDanhSachCongViec.CongViecCon, idCongViec: model.data.id\r\n }\"></ng-container>\r\n </ng-template>\r\n <ng-template #taskLienQuan>\r\n <ng-container *ngTemplateOutlet=\"listCongViecCon; context: {\r\n formState: model.formState, loaiDanhSach: enumLoaiDanhSachCongViec.CongViecLienQuan, idCongViec: model.data.id\r\n }\"></ng-container>\r\n </ng-template>\r\n <!-- <ng-template #traoDoiCongViec>\r\n <div style=\"height: 350px;\">\r\n <chat-box [showSendMessageBox]=\"false\" [serviceCode]=\"'congviec'\" [entity]=\"'congviec'\"\r\n [taskId]=\"model.data.id\" [parentModel]=\"model\" [parentContext]=\"context\" [users]=\"users\"></chat-box>\r\n </div>\r\n <chat-send-message-box [parentContext]=\"context\">\r\n </chat-send-message-box>\r\n </ng-template> -->\r\n </tn-tabview>\r\n </div>\r\n </tn-custom-scrollbar>\r\n</ng-template>\r\n<ng-template #buttonTemplate>\r\n <button *ngFor=\"let butt of this.buttons\" pButton [icon]=\"butt.icon\" [label]=\"butt.label\" class=\"p-button-text\"\r\n (click)=\"butt.command()\">\r\n </button>\r\n <button *ngIf=\"!model.data.__disableEdit && !__isFormView\" type=\"button\" pButton icon=\"pi pi-save\"\r\n class=\"p-button-text\" [label]=\"'FORM.SAVE' | translate\" (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>", styles: [".tab-child{padding:1em}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i8.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i9.CrudFormComponent, selector: "crud-form", inputs: ["setting", "context", "filesUploaded", "isViewMode", "disableKeypressControl", "disableCaching", "styleClass", "useGridTemplate", "formId", "formClass", "autoFocus", "trapFocus", "data", "formState"], outputs: ["onFormReady", "onControlReady", "onAllControlReady", "onModelChanged", "dataChange", "onChange", "onAfterTrinhKy"] }, { kind: "component", type: i10.BaseCongviecDinhkemComponent, selector: "base-congviec-dinhkem", inputs: ["formState", "taskId"] }, { kind: "component", type: i11.TnCustomScrollbarComponent, selector: "tn-custom-scrollbar", inputs: ["style", "useDefaultScrollBar", "autoMode", "class", "config", "whiteBackGround", "showScrollHorizontal"], outputs: ["scrollY", "scrollUp", "scrollDown", "scrollLeft", "scrollRight", "scrollYReachEnd", "scrollYReachStart", "scrollXReachEnd", "scrollXReachStart"] }, { kind: "component", type: i12.TnTabViewComponent, selector: "tn-tabview", inputs: ["vertical", "data", "allowViewAll", "activeCode", "isDynamicHeight"], outputs: ["activeCodeChange", "tabContentChange"] }, { kind: "component", type: i13.FileManagerComponent, selector: "file-manager", inputs: ["control", "fileDataService", "layout", "hiddenCreateFolder", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageSummary", "invalidFileLimitMessageDetail", "dataType", "rootFolderName", "serviceCode", "entity", "entityKey", "readonly", "inTaiLieu", "inTaiLieuChung", "copyToFolderId", "value", "multipleCheckWhenClickRow"], outputs: ["onInit", "onReady", "entityKeyChange", "closePopup", "valueChange", "onChanged", "onSelected"] }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] });
273
276
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BaseCongViecFormComponent, decorators: [{
274
277
  type: Component,
275
- args: [{ selector: 'base-congviec-form', providers: [ComponentContextService], template: "<ng-container *ngTemplateOutlet=\"contentTask\"></ng-container>\r\n<ng-template #contentTask>\r\n <tn-custom-scrollbar>\r\n <div *ngIf=\"idLoaiCongViec === 'f51ca5f6-d266-4521-a633-e2f9f8528aaf'\" class=\"note\"\r\n style=\"padding: 0.5rem 1rem;\">\r\n <b>Ghi ch\u00FA</b>: Vui l\u00F2ng chuy\u1EC3n sang ph\u00E2n h\u1EC7 V\u0103n b\u1EA3n \u0111\u1EC3 t\u1EA1o D\u1EF1 th\u1EA3o v\u0103n b\u1EA3n \u0111i. Link:\r\n <a href=\"https://usmart.utc.edu.vn/vanban/vanbandi/du-thao\" target=\"_blank\">\r\n https://usmart.utc.edu.vn/vanban/vanbandi/du-thao</a>\r\n </div>\r\n\r\n <crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n [autoFocus]=\"autoFocus\" (onFormReady)=\"_handleFormReady($event)\">\r\n </crud-form>\r\n <base-congviec-dinhkem [loadDetailFromQueryParam]=\"false\" [formState]=\"model.formState\"\r\n [taskId]=\"model.data.id\">\r\n </base-congviec-dinhkem>\r\n <div class=\"tab-child\">\r\n <tn-tabview [data]=\"tabDataChild\" (onTabChange)=\"onTabChange($event)\">\r\n <ng-template #fileDinhKem>\r\n <file-manager [loadDetailFromQueryParam]=\"false\" [serviceCode]=\"setting.baseService.serviceCode\"\r\n [entity]=\"setting.baseService.entityName\" [entityKey]=\"model.data.id\"\r\n [readonly]=\"model.formState == enumFormState.VIEW\">\r\n </file-manager>\r\n </ng-template>\r\n <ng-template #taskChild>\r\n <ng-container *ngTemplateOutlet=\"customTemplate['listCongViecCon']; context: {\r\n formState: model.formState, loaiDanhSach: enumLoaiDanhSachCongViec.CongViecCon, idCongViec: model.data.id\r\n }\"></ng-container>\r\n </ng-template>\r\n <ng-template #taskLienQuan>\r\n <ng-container *ngTemplateOutlet=\"customTemplate['listCongViecCon']; context: {\r\n formState: model.formState, loaiDanhSach: enumLoaiDanhSachCongViec.CongViecLienQuan, idCongViec: model.data.id\r\n }\"></ng-container>\r\n </ng-template>\r\n <!-- <ng-template #traoDoiCongViec>\r\n <div style=\"height: 350px;\">\r\n <chat-box [showSendMessageBox]=\"false\" [serviceCode]=\"'congviec'\" [entity]=\"'congviec'\"\r\n [taskId]=\"model.data.id\" [parentModel]=\"model\" [parentContext]=\"context\" [users]=\"users\"></chat-box>\r\n </div>\r\n <chat-send-message-box [parentContext]=\"context\">\r\n </chat-send-message-box>\r\n </ng-template> -->\r\n </tn-tabview>\r\n </div>\r\n </tn-custom-scrollbar>\r\n</ng-template>\r\n<ng-template #buttonTemplate>\r\n <button *ngFor=\"let butt of this.buttons\" pButton [icon]=\"butt.icon\" [label]=\"butt.label\" class=\"p-button-text\"\r\n (click)=\"butt.command()\">\r\n </button>\r\n <button *ngIf=\"!model.data.__disableEdit && !__isFormView\" type=\"button\" pButton icon=\"pi pi-save\"\r\n class=\"p-button-text\" [label]=\"'FORM.SAVE' | translate\" (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>", styles: [".tab-child{padding:1em}\n"] }]
278
+ args: [{ selector: 'base-congviec-form', providers: [ComponentContextService], template: "<ng-container *ngTemplateOutlet=\"contentTask\"></ng-container>\r\n<ng-template #contentTask>\r\n <tn-custom-scrollbar>\r\n <div *ngIf=\"idLoaiCongViec === 'f51ca5f6-d266-4521-a633-e2f9f8528aaf'\" class=\"note\"\r\n style=\"padding: 0.5rem 1rem;\">\r\n <b>Ghi ch\u00FA</b>: Vui l\u00F2ng chuy\u1EC3n sang ph\u00E2n h\u1EC7 V\u0103n b\u1EA3n \u0111\u1EC3 t\u1EA1o D\u1EF1 th\u1EA3o v\u0103n b\u1EA3n \u0111i. Link:\r\n <a href=\"https://usmart.utc.edu.vn/vanban/vanbandi/du-thao\" target=\"_blank\">\r\n https://usmart.utc.edu.vn/vanban/vanbandi/du-thao</a>\r\n </div>\r\n\r\n <crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n [autoFocus]=\"autoFocus\" (onFormReady)=\"_handleFormReady($event)\">\r\n </crud-form>\r\n <base-congviec-dinhkem [loadDetailFromQueryParam]=\"false\" [formState]=\"model.formState\"\r\n [taskId]=\"model.data.id\">\r\n </base-congviec-dinhkem>\r\n <div class=\"tab-child\">\r\n <tn-tabview [data]=\"tabDataChild\" (onTabChange)=\"onTabChange($event)\">\r\n <ng-template #fileDinhKem>\r\n <file-manager [loadDetailFromQueryParam]=\"false\" [serviceCode]=\"setting.baseService.serviceCode\"\r\n [entity]=\"setting.baseService.entityName\" [entityKey]=\"model.data.id\"\r\n [readonly]=\"model.formState == enumFormState.VIEW\">\r\n </file-manager>\r\n </ng-template>\r\n <ng-template #taskChild>\r\n <ng-container *ngTemplateOutlet=\"listCongViecCon; context: {\r\n formState: model.formState, loaiDanhSach: enumLoaiDanhSachCongViec.CongViecCon, idCongViec: model.data.id\r\n }\"></ng-container>\r\n </ng-template>\r\n <ng-template #taskLienQuan>\r\n <ng-container *ngTemplateOutlet=\"listCongViecCon; context: {\r\n formState: model.formState, loaiDanhSach: enumLoaiDanhSachCongViec.CongViecLienQuan, idCongViec: model.data.id\r\n }\"></ng-container>\r\n </ng-template>\r\n <!-- <ng-template #traoDoiCongViec>\r\n <div style=\"height: 350px;\">\r\n <chat-box [showSendMessageBox]=\"false\" [serviceCode]=\"'congviec'\" [entity]=\"'congviec'\"\r\n [taskId]=\"model.data.id\" [parentModel]=\"model\" [parentContext]=\"context\" [users]=\"users\"></chat-box>\r\n </div>\r\n <chat-send-message-box [parentContext]=\"context\">\r\n </chat-send-message-box>\r\n </ng-template> -->\r\n </tn-tabview>\r\n </div>\r\n </tn-custom-scrollbar>\r\n</ng-template>\r\n<ng-template #buttonTemplate>\r\n <button *ngFor=\"let butt of this.buttons\" pButton [icon]=\"butt.icon\" [label]=\"butt.label\" class=\"p-button-text\"\r\n (click)=\"butt.command()\">\r\n </button>\r\n <button *ngIf=\"!model.data.__disableEdit && !__isFormView\" type=\"button\" pButton icon=\"pi pi-save\"\r\n class=\"p-button-text\" [label]=\"'FORM.SAVE' | translate\" (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>", styles: [".tab-child{padding:1em}\n"] }]
276
279
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.ComponentService }, { type: i2.CongViecService }, { type: i3.DmLoaiCongViecService }, { type: i4.DmLinhVucCongViecService }, { type: i5.DmPriorityService }, { type: i6.WorkflowPermissionDetailService }]; }, propDecorators: { formNextFirstStep: [{
277
280
  type: ViewChild,
278
281
  args: [CongViecNextFirstStepComponent, { static: false }]
@@ -289,4 +292,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
289
292
  }], onAfterInserted: [{
290
293
  type: Output
291
294
  }] } });
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZ3ZpZWMtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb25ndmllYy9jb25ndmllYy9jb25ndmllYy1mb3JtL2Nvbmd2aWVjLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29uZ3ZpZWMvY29uZ3ZpZWMvY29uZ3ZpZWMtZm9ybS9jb25ndmllYy1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFZLEtBQUssRUFBVSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUVILHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsbUJBQW1CLEVBR25CLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDcEIsTUFBTSw4QkFBOEIsQ0FBQztBQUV0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVFqRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVVoSCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsWUFBWTtJQXdF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LEdBQUcsQ0FBQyxJQUFJLEVBQUU7WUFDekUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFHO1FBQ1gsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUM5QyxDQUFDO0lBRUQseUJBQXlCLENBQUMsS0FBSztRQUMzQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7O3NIQXRSUSx5QkFBeUI7MEdBQXpCLHlCQUF5QixvTkFGdkIsQ0FBQyx1QkFBdUIsQ0FBQyw2RUFHekIsOEJBQThCLHVFQ3JDN0Msb2tIQXNEYzsyRkRsQkQseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNJLG9CQUFvQixhQUduQixDQUFDLHVCQUF1QixDQUFDO3FUQUcwQixpQkFBaUI7c0JBQTlFLFNBQVM7dUJBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNuRCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRU8sV0FBVztzQkFBdkIsS0FBSztnQkFLSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFGb3JtQmFzZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYmFzZS9kYXRhLWZvcm0tYmFzZSc7XHJcbmltcG9ydCB7IERhdGVDb21wYXJlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL3ZhbGlkYXRvcnMnO1xyXG5pbXBvcnQgeyBGb3JtU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7XHJcbiAgICBDdXN0b21Db250cm9sU2NoZW1hLFxyXG4gICAgRGF0ZVRpbWVDb250cm9sU2NoZW1hLFxyXG4gICAgRHJvcGRvd25Db250cm9sU2NoZW1hLFxyXG4gICAgRWRpdG9yQ29udHJvbFNjaGVtYSxcclxuICAgIEV2ZW50RGF0YSxcclxuICAgIEZvcm1Db250cm9sQmFzZSxcclxuICAgIFBlcmNlbnRDb250cm9sU2NoZW1hLFxyXG4gICAgVGV4dENvbnRyb2xTY2hlbWFcclxufSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvd29ya2Zsb3ctcGVybWlzc2lvbi1kZXRhaWwuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBPcGVyYXRvciwgUGVybWlzc2lvbkJhc2UgfSBmcm9tICcuLi8uLi8uLi9lbnVtcy9jb21tb24nO1xyXG5pbXBvcnQgeyBJQ29uZ1ZpZWNGb3JtIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9pLWNvbmd2aWVjLWZvcm0nO1xyXG5pbXBvcnQgeyBJTGlzdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvaS1saXN0LWNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XHJcbmltcG9ydCB7IENvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb21wb25lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IERtTGluaFZ1Y0NvbmdWaWVjU2VydmljZSB9IGZyb20gJy4uLy4uL2RtLWxpbmh2dWMtY29uZ3ZpZWMvc2VydmljZXMvZG0tbGluaHZ1Yy1jb25ndmllYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRG1Mb2FpQ29uZ1ZpZWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZG0tbG9haS1jb25ndmllYy9zZXJ2aWNlcy9kbS1sb2FpLWNvbmd2aWVjLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEbVByaW9yaXR5U2VydmljZSB9IGZyb20gJy4uLy4uL2RtLXByaW9yaXR5L3NlcnZpY2VzL2RtLXByaW9yaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnVtTG9haURhbmhTYWNoQ29uZ1ZpZWMgfSBmcm9tICcuLi8uLi9tb2RlbHMvZW51bXMnO1xyXG5pbXBvcnQgeyBDb25nVmllY05leHRGaXJzdFN0ZXBDb21wb25lbnQgfSBmcm9tICcuLi9jb25ndmllYy1uZXh0LWZpcnN0LXN0ZXAvY29uZ3ZpZWMtbmV4dC1maXJzdC1zdGVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbmdWaWVjU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Nvbmd2aWVjLnNlcnZpY2UnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdiYXNlLWNvbmd2aWVjLWZvcm0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Nvbmd2aWVjLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY29uZ3ZpZWMtZm9ybS5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q29udGV4dFNlcnZpY2VdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZUNvbmdWaWVjRm9ybUNvbXBvbmVudCBleHRlbmRzIERhdGFGb3JtQmFzZSBpbXBsZW1lbnRzIElDb25nVmllY0Zvcm0sIE9uSW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKENvbmdWaWVjTmV4dEZpcnN0U3RlcENvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pIGZvcm1OZXh0Rmlyc3RTdGVwOiBDb25nVmllY05leHRGaXJzdFN0ZXBDb21wb25lbnQ7XHJcbiAgICBASW5wdXQoKSBpdGVtSWQ6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGNydWRMaXN0OiBJTGlzdENvbXBvbmVudDtcclxuICAgIEBJbnB1dCgpIGNvbnRyb2w6IEN1c3RvbUNvbnRyb2xTY2hlbWE7XHJcbiAgICBfdGVuQ29uZ1ZpZWM6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHNldCB0ZW5Db25nVmllYyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fdGVuQ29uZ1ZpZWMgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnNldFRlbkNvbmdWaWVjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIG9uSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQWZ0ZXJJbnNlcnRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgYXV0b0ZvY3VzID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBlbnVtRm9ybVN0YXRlID0gRm9ybVN0YXRlO1xyXG4gICAgZW51bUxvYWlEYW5oU2FjaENvbmdWaWVjID0gRW51bUxvYWlEYW5oU2FjaENvbmdWaWVjO1xyXG4gICAgY3VycmVudFRhYkluZGV4OiBudW1iZXI7XHJcbiAgICB1c2Vyczoge1xyXG4gICAgICAgIHRhc2tOYW1lOiBzdHJpbmcsXHJcbiAgICAgICAgYXNzaWduZWU6IGFueSxcclxuICAgICAgICBhc3NpZ25lcjogYW55LFxyXG4gICAgICAgIHJlbGF0ZWRVc2VyczogYW55W107XHJcbiAgICB9ID0ge1xyXG4gICAgICAgICAgICB0YXNrTmFtZTogJycsXHJcbiAgICAgICAgICAgIGFzc2lnbmVyOiAwLFxyXG4gICAgICAgICAgICBhc3NpZ25lZTogMCxcclxuICAgICAgICAgICAgcmVsYXRlZFVzZXJzOiBbXSxcclxuICAgICAgICB9O1xyXG5cclxuICAgIHRhYkRhdGFUYXNrOiBhbnlbXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvZGU6ICdjb25ndmllYycsXHJcbiAgICAgICAgICAgIGljb246ICdwaSBwaS1saXN0JyxcclxuICAgICAgICAgICAgbGFiZWw6ICdUaMO0bmcgdGluIGPDtG5nIHZp4buHYydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29kZTogJ3dvcmtmbG93JyxcclxuICAgICAgICAgICAgaWNvbjogJ3BpIHBpLXVzZXInLFxyXG4gICAgICAgICAgICBsYWJlbDogJ05nxrDhu51pIG5o4bqtbicsXHJcbiAgICAgICAgICAgIGhpZGRlbjogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgIF07XHJcbiAgICB0YWJEYXRhQ2hpbGQ6IGFueVtdID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29kZTogJ2ZpbGVEaW5oS2VtJyxcclxuICAgICAgICAgICAgaWNvbjogJ3BpIHBpLXBhcGVyY2xpcCcsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnRmlsZSDEkcOtbmgga8OobSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29kZTogJ3Rhc2tDaGlsZCcsXHJcbiAgICAgICAgICAgIGljb246ICdwaSBwaS1jaGVjay1zcXVhcmUnLFxyXG4gICAgICAgICAgICBsYWJlbDogJ0PDtG5nIHZp4buHYyBjb24nXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvZGU6ICd0YXNrTGllblF1YW4nLFxyXG4gICAgICAgICAgICBpY29uOiAncGkgcGktc2hhcmUtYWx0JyxcclxuICAgICAgICAgICAgbGFiZWw6ICdDw7RuZyB2aeG7h2MgbGnDqm4gcXVhbidcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIHtcclxuICAgICAgICAvLyAgICAgY29kZTogJ3RyYW9Eb2lDb25nVmllYycsXHJcbiAgICAgICAgLy8gICAgIGljb246ICdwaSBwaS1jb21tZW50JyxcclxuICAgICAgICAvLyAgICAgbGFiZWw6ICdUcmFvIMSR4buVaSBjw7RuZyB2aeG7h2MnLFxyXG4gICAgICAgIC8vIH1cclxuICAgIF07XHJcbiAgICBidXR0b25zOiBhbnlbXSA9IFtdO1xyXG4gICAgbWRXaWR0aFdvcmtmbG93ID0gNjtcclxuICAgIG1kTG9haUNvbmdWaWVjOiBudW1iZXI7XHJcbiAgICBpZExvYWlDb25nVmllYzogc3RyaW5nO1xyXG4gICAgY3VzdG9tVGVtcGxhdGU6IHtcclxuICAgICAgICBba2V5OiBzdHJpbmddOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgfSA9IHt9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX2NvbXBvbmVudFNlcnZpY2U6IENvbXBvbmVudFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfY29uZ1ZpZWNTZXJ2aWNlOiBDb25nVmllY1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZG1Mb2FpQ29uZ1ZpZWNTZXJ2aWNlOiBEbUxvYWlDb25nVmllY1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZG1MaW5oVnVjQ29uZ1ZpZWNTZXJ2aWNlOiBEbUxpbmhWdWNDb25nVmllY1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZG1Qcmlvcml0eVNlcnZpY2U6IERtUHJpb3JpdHlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3dvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2U6IFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy51c2Vycy5hc3NpZ25lciA9IDA7XHJcbiAgICAgICAgdGhpcy51c2Vycy5hc3NpZ25lZSA9IDA7XHJcbiAgICAgICAgdGhpcy51c2Vycy5yZWxhdGVkVXNlcnMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5fY29tcG9uZW50ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLmF1dG9Gb2N1cyA9ICF0aGlzLmNvbnRyb2w7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlID0gdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlO1xyXG4gICAgICAgIGxldCBvbkNoYW5nZUxvYWlDb25nVmllYyA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzRm9ybUFkZE5ldygpKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlTG9haUNvbmdWaWVjID0gdGhpcy5oYW5kbGVDaGFuZ2VMb2FpQ29uZ1ZpZWNXaGVuQWRkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5mb3JtU3RhdGUgPT0gRm9ybVN0YXRlLkFERCkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEuaWQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLnNjaGVtYSA9IDxGb3JtQ29udHJvbEJhc2VbXT5bXHJcbiAgICAgICAgICAgIG5ldyBUZXh0Q29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3RlbicsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1TDqm4gY8O0bmcgdmnhu4djJyxcclxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbWRXaWR0aDogMTJcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBFZGl0b3JDb250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnbW9UYScsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ03DtCB04bqjIG7hu5lpIGR1bmcnLFxyXG4gICAgICAgICAgICAgICAgbWRXaWR0aDogMTJcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZFByaW9yaXR5JyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnxJDhu5kgxrB1IHRpw6puJyxcclxuICAgICAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbVByaW9yaXR5U2VydmljZVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkTGluaFZ1YycsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0zEqW5oIHbhu7FjJyxcclxuICAgICAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbUxpbmhWdWNDb25nVmllY1NlcnZpY2VcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBEYXRlVGltZUNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICduZ2F5QmF0RGF1JyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnTmfDoHkgYuG6r3QgxJHhuqd1JyxcclxuICAgICAgICAgICAgICAgIG1kV2lkdGg6IDNcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBEYXRlVGltZUNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICduZ2F5S2V0VGh1YycsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ05nw6B5IGvhur90IHRow7pjJyxcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtcclxuICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZUNvbXBhcmVWYWxpZGF0b3IoT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbCwgJ25nYXlCYXREYXUnKVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIG1kV2lkdGg6IDNcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBQZXJjZW50Q29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3BoYW5UcmFtJyxcclxuICAgICAgICAgICAgICAgIG1kV2lkdGg6IDYsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Rp4bq/biDEkeG7mSdcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZExvYWlDb25nVmllYycsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Bow6JuIGxv4bqhaSBjw7RuZyB2aeG7h2MnLFxyXG4gICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX2RtTG9haUNvbmdWaWVjU2VydmljZSxcclxuICAgICAgICAgICAgICAgIGlzVHJlZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGZpZWxkVHJlZTogJ2lkUGFyZW50JyxcclxuICAgICAgICAgICAgICAgIHZhbHVlUGFyZW50Um9vdDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHNvcnRzOiBbeyBmaWVsZDogJ21hUGhhbkNhcCcsIGRpcjogMSB9XSxcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlZDogb25DaGFuZ2VMb2FpQ29uZ1ZpZWNcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMuYWRkU2NoZW1hQmFzZSgpO1xyXG4gICAgICAgIC8vIGlmICh0aGlzLl9pc0Zvcm1BZGROZXcoKSkge1xyXG4gICAgICAgIC8vICAgICB0aGlzLnNldHRpbmcuc2NoZW1hLnB1c2goXHJcbiAgICAgICAgLy8gICAgICAgICBuZXcgQ2hlY2tib3hDb250cm9sU2NoZW1hKHtcclxuICAgICAgICAvLyAgICAgICAgICAgICBmaWVsZDogJ2F1dG9OZXh0U3RlcCcsXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgbGFiZWw6ICdU4buxIMSR4buZbmcgY2h1eeG7g24gYsaw4bubYyDEkeG6p3UgdGnDqm4nLFxyXG4gICAgICAgIC8vICAgICAgICAgICAgIGNsYXNzOiAnbWctdG9wLTAnLFxyXG4gICAgICAgIC8vICAgICAgICAgICAgIHNob3dMYWJlbDogZmFsc2UsXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgbWRXaWR0aDogNixcclxuICAgICAgICAvLyAgICAgICAgICAgICBoaWRkZW5DaGVjazogKHJvb3RNb2RlbCkgPT4gIXJvb3RNb2RlbC5fV29ya2Zsb3dDb2RlXHJcbiAgICAgICAgLy8gICAgICAgICB9KVxyXG4gICAgICAgIC8vICAgICApO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlID0gdGhpcy5fY29tcG9uZW50U2VydmljZS5kaWNUZW1wbGF0ZTtcclxuICAgICAgICB0aGlzLm9uSW5pdC5lbWl0KHtcclxuICAgICAgICAgICAgYnV0dG9uVGVtcGxhdGU6IHRoaXMuYnV0dG9uVGVtcGxhdGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkZvcm1Jbml0aWFsaXplZChldnQ6IEV2ZW50RGF0YSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0Zvcm1BZGROZXcoKSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sICYmIHRoaXMuY29udHJvbC5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGV2dC5tb2RlbCwgdGhpcy5jb250cm9sLmRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChldnQubW9kZWwuaWRMb2FpQ29uZ1ZpZWMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaWRMb2FpQ29uZ1ZpZWMgPSBldnQubW9kZWwuaWRMb2FpQ29uZ1ZpZWM7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRXb3JrZmxvd0J5TG9haUNvbmdWaWVjKGV2dCwgZXZ0Lm1vZGVsLmlkTG9haUNvbmdWaWVjKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGVuQ29uZ1ZpZWMoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhID0geyAuLi50aGlzLm1vZGVsLmRhdGEsIHRlbjogdGhpcy5fdGVuQ29uZ1ZpZWMgfTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb2RpZnlEZXRhaWxEYXRhKGRhdGE6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZVdvcmtmbG93QnV0dG9uKGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyV29ya2Zsb3dCdXR0b25zKCkge1xyXG4gICAgICAgIHRoaXMuYnV0dG9ucyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdlbmVyYXRlV29ya2Zsb3dCdXR0b24oZGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0pIHtcclxuICAgICAgICBjb25zdCB1c2VySWRDdXJyZW50ID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0SWQoKTtcclxuICAgICAgICAvLyBM4bqleSByYSB0cuG6oW5nIHRow6FpIHF1eSB0csOsbmhcclxuICAgICAgICBjb25zdCBsc3RJdGVtU3RhdHVzID0gKGF3YWl0IHRoaXMuX3dvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UuY2hhbmdlRW5kcG9pbnQodGhpcy5fY29uZ1ZpZWNTZXJ2aWNlKS5nZXRBbGwoXHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdpdGVtSWQnLCBPcGVyYXRvci5lcXVhbCwgZGF0YS5pZCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcigndXNlcklkJywgT3BlcmF0b3IuZXF1YWwsIHVzZXJJZEN1cnJlbnQpXHJcbiAgICAgICAgICAgIF0sICdpdGVtSWQsdXNlcklkLHRyYW5nVGhhaSx0ZXh0VHJhbmdUaGFpLHdvcmtmbG93Q29kZSxwZXJtaXNzaW9uJ1xyXG4gICAgICAgICkpLmRhdGE7XHJcbiAgICAgICAgaWYgKGxzdEl0ZW1TdGF0dXMgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgbOG6pXkgxJHGsOG7o2MgdGjDtG5nIHRpbiB0cuG6oW5nIHRow6FpIGhp4buHbiB04bqhaSBj4bunYSBi4bqjbiBnaGknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGl0ZW1TdGF0dXMgPSBudWxsO1xyXG4gICAgICAgIGlmICghbHN0SXRlbVN0YXR1cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaXRlbVN0YXR1cyA9IHtcclxuICAgICAgICAgICAgICAgIHRleHRUcmFuZ1RoYWk6ICdDaMawYSBjaOG6oXkgcXV5IHRyw6xuaCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGl0ZW1TdGF0dXMgPSBsc3RJdGVtU3RhdHVzLmZpbmQocSA9PiAocS5wZXJtaXNzaW9uICYgUGVybWlzc2lvbkJhc2UuRURJVCkgPT0gUGVybWlzc2lvbkJhc2UuRURJVCk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtU3RhdHVzID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1TdGF0dXMgPSBsc3RJdGVtU3RhdHVzWzBdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9zZXREaXNhYmxlQ29udHJvbCgnaWRMb2FpQ29uZ1ZpZWMnLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRhdGEuX190cmFuZ1RoYWkgPSBpdGVtU3RhdHVzLnRyYW5nVGhhaTtcclxuICAgICAgICBkYXRhLl9fdGV4dFRyYW5nVGhhaSA9IGl0ZW1TdGF0dXMudGV4dFRyYW5nVGhhaTtcclxuICAgICAgICBkYXRhLl9fd29ya2Zsb3dDb2RlID0gaXRlbVN0YXR1cy53b3JrZmxvd0NvZGU7XHJcbiAgICAgICAgZGF0YS5fX3Blcm1pc3Npb24gPSBpdGVtU3RhdHVzLnBlcm1pc3Npb247XHJcbiAgICAgICAgaWYgKHRoaXMuY3J1ZExpc3QpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0R2V0QWN0aW9uV29ya2Zsb3cgPSBhd2FpdCB0aGlzLmNydWRMaXN0LmdldEFjdGlvbldvcmtmbG93KGRhdGEpO1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0R2V0QWN0aW9uV29ya2Zsb3cpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkNvbnRleHRzID0gcmVzdWx0R2V0QWN0aW9uV29ya2Zsb3c7XHJcbiAgICAgICAgICAgIHRoaXMuYnV0dG9ucyA9IGJ1dHRvbkNvbnRleHRzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVDaGFuZ2VMb2FpQ29uZ1ZpZWNXaGVuQWRkID0gYXN5bmMgKGV2dDogRXZlbnREYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGV2dC5ldmVudFR5cGUgPT0gJ2NoYW5nZScpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkV29ya2Zsb3dCeUxvYWlDb25nVmllYyhldnQsIGV2dC5tb2RlbC5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBhc3luYyBsb2FkV29ya2Zsb3dCeUxvYWlDb25nVmllYyhldnQ6IEV2ZW50RGF0YSwgaWRMb2FpQ29uZ1ZpZWM6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghaWRMb2FpQ29uZ1ZpZWMpIHtcclxuICAgICAgICAgICAgaWRMb2FpQ29uZ1ZpZWMgPSBldnQubW9kZWwuaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHdvcmtmbG93U2V0dGluZyA9IGF3YWl0IHRoaXMuX2RtTG9haUNvbmdWaWVjU2VydmljZS5nZXRXb3JrZmxvd1NldHRpbmdCeUlkTG9haUNvbmdWaWVjKGlkTG9haUNvbmdWaWVjKTtcclxuICAgICAgICB0aGlzLnNldFdvcmtmbG93RGF0YXNvdXJjZShldnQsIHdvcmtmbG93U2V0dGluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYXN5bmMgaGFuZGxlQ2hhbmdlV29ya2Zsb3dDb2RlKGV2dDogRXZlbnREYXRhKSB7XHJcbiAgICAvLyAgICAgdGhpcy50YWJEYXRhVGFza1sxXS5oaWRkZW4gPSAhZXZ0LnJvb3RNb2RlbC5fV29ya2Zsb3dDb2RlO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGFzeW5jIG9uQmVmb3JlU2F2ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5mb3JtTmV4dEZpcnN0U3RlcCkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEuaXRlbVdvcmtmbG93SGlzdG9yeSA9IGF3YWl0IHRoaXMuZm9ybU5leHRGaXJzdFN0ZXAuZ2V0TW9kZWxEYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLml0ZW1JZCkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEuaXRlbUlkID0gdGhpcy5pdGVtSWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWZ0ZXJTYXZlKHJlczogUmVzcG9uc2VSZXN1bHQpIHtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5mb3JtU3RhdGUgPT0gRm9ybVN0YXRlLkFERCAmJiByZXMgJiYgcmVzLnN1Y2Nlc3MgJiYgcmVzLmRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkFmdGVySW5zZXJ0ZWQuZW1pdChyZXMuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uVGFiQ2hhbmdlKGV2dCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRhYkluZGV4ID0gZXZ0LmluZGV4O1xyXG4gICAgICAgIHRoaXMudXNlcnMudGFza05hbWUgPSB0aGlzLm1vZGVsLmRhdGEudGVuO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcmN1c1RvRmlyc3RJbnB1dENvbnRyb2woZXZlbnQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5GT0NVU19UT19GSVJTVF9JTlBVVF9DT05UUk9MKTtcclxuICAgIH1cclxufVxyXG5cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRUYXNrXCI+PC9uZy1jb250YWluZXI+XHJcbjxuZy10ZW1wbGF0ZSAjY29udGVudFRhc2s+XHJcbiAgICA8dG4tY3VzdG9tLXNjcm9sbGJhcj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaWRMb2FpQ29uZ1ZpZWMgPT09ICdmNTFjYTVmNi1kMjY2LTQ1MjEtYTYzMy1lMmY5Zjg1MjhhYWYnXCIgY2xhc3M9XCJub3RlXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwLjVyZW0gMXJlbTtcIj5cclxuICAgICAgICAgICAgPGI+R2hpIGNow7o8L2I+OiBWdWkgbMOybmcgY2h1eeG7g24gc2FuZyBwaMOibiBo4buHIFbEg24gYuG6o24gxJHhu4MgdOG6oW8gROG7sSB0aOG6o28gdsSDbiBi4bqjbiDEkWkuIExpbms6XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL3VzbWFydC51dGMuZWR1LnZuL3ZhbmJhbi92YW5iYW5kaS9kdS10aGFvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XHJcbiAgICAgICAgICAgICAgICBodHRwczovL3VzbWFydC51dGMuZWR1LnZuL3ZhbmJhbi92YW5iYW5kaS9kdS10aGFvPC9hPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8Y3J1ZC1mb3JtICNjcnVkRm9ybSBbKGRhdGEpXT1cIm1vZGVsLmRhdGFcIiBbc2V0dGluZ109XCJzZXR0aW5nXCIgW2NvbnRleHRdPVwiY29udGV4dFwiIFtkaXNhYmxlQ2FjaGluZ109XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2F1dG9Gb2N1c109XCJhdXRvRm9jdXNcIiAob25Gb3JtUmVhZHkpPVwiX2hhbmRsZUZvcm1SZWFkeSgkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9jcnVkLWZvcm0+XHJcbiAgICAgICAgPGJhc2UtY29uZ3ZpZWMtZGluaGtlbSBbbG9hZERldGFpbEZyb21RdWVyeVBhcmFtXT1cImZhbHNlXCIgW2Zvcm1TdGF0ZV09XCJtb2RlbC5mb3JtU3RhdGVcIlxyXG4gICAgICAgICAgICBbdGFza0lkXT1cIm1vZGVsLmRhdGEuaWRcIj5cclxuICAgICAgICA8L2Jhc2UtY29uZ3ZpZWMtZGluaGtlbT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWNoaWxkXCI+XHJcbiAgICAgICAgICAgIDx0bi10YWJ2aWV3IFtkYXRhXT1cInRhYkRhdGFDaGlsZFwiIChvblRhYkNoYW5nZSk9XCJvblRhYkNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpbGVEaW5oS2VtPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmaWxlLW1hbmFnZXIgW2xvYWREZXRhaWxGcm9tUXVlcnlQYXJhbV09XCJmYWxzZVwiIFtzZXJ2aWNlQ29kZV09XCJzZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2VudGl0eV09XCJzZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWVcIiBbZW50aXR5S2V5XT1cIm1vZGVsLmRhdGEuaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwibW9kZWwuZm9ybVN0YXRlID09IGVudW1Gb3JtU3RhdGUuVklFV1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZmlsZS1tYW5hZ2VyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGFza0NoaWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21UZW1wbGF0ZVsnbGlzdENvbmdWaWVjQ29uJ107IGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVN0YXRlOiBtb2RlbC5mb3JtU3RhdGUsIGxvYWlEYW5oU2FjaDogZW51bUxvYWlEYW5oU2FjaENvbmdWaWVjLkNvbmdWaWVjQ29uLCBpZENvbmdWaWVjOiBtb2RlbC5kYXRhLmlkXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGFza0xpZW5RdWFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21UZW1wbGF0ZVsnbGlzdENvbmdWaWVjQ29uJ107IGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVN0YXRlOiBtb2RlbC5mb3JtU3RhdGUsIGxvYWlEYW5oU2FjaDogZW51bUxvYWlEYW5oU2FjaENvbmdWaWVjLkNvbmdWaWVjTGllblF1YW4sIGlkQ29uZ1ZpZWM6IG1vZGVsLmRhdGEuaWRcclxuICAgICAgICAgICAgICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8bmctdGVtcGxhdGUgI3RyYW9Eb2lDb25nVmllYz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAzNTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNoYXQtYm94IFtzaG93U2VuZE1lc3NhZ2VCb3hdPVwiZmFsc2VcIiBbc2VydmljZUNvZGVdPVwiJ2Nvbmd2aWVjJ1wiIFtlbnRpdHldPVwiJ2Nvbmd2aWVjJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFza0lkXT1cIm1vZGVsLmRhdGEuaWRcIiBbcGFyZW50TW9kZWxdPVwibW9kZWxcIiBbcGFyZW50Q29udGV4dF09XCJjb250ZXh0XCIgW3VzZXJzXT1cInVzZXJzXCI+PC9jaGF0LWJveD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2hhdC1zZW5kLW1lc3NhZ2UtYm94IFtwYXJlbnRDb250ZXh0XT1cImNvbnRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2NoYXQtc2VuZC1tZXNzYWdlLWJveD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+IC0tPlxyXG4gICAgICAgICAgICA8L3RuLXRhYnZpZXc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L3RuLWN1c3RvbS1zY3JvbGxiYXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjYnV0dG9uVGVtcGxhdGU+XHJcbiAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBidXR0IG9mIHRoaXMuYnV0dG9uc1wiIHBCdXR0b24gW2ljb25dPVwiYnV0dC5pY29uXCIgW2xhYmVsXT1cImJ1dHQubGFiZWxcIiBjbGFzcz1cInAtYnV0dG9uLXRleHRcIlxyXG4gICAgICAgIChjbGljayk9XCJidXR0LmNvbW1hbmQoKVwiPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiIW1vZGVsLmRhdGEuX19kaXNhYmxlRWRpdCAmJiAhX19pc0Zvcm1WaWV3XCIgdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLXNhdmVcIlxyXG4gICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dFwiIFtsYWJlbF09XCInRk9STS5TQVZFJyB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJfaGFuZGxlU2F2ZSgkZXZlbnQpXCI+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS1yZXBsYXlcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tc2Vjb25kYXJ5XCJcclxuICAgICAgICBbbGFiZWxdPVwiJ0ZPUk0uQ0FOQ0VMJyB8IHRyYW5zbGF0ZVwiIHByZXZlbnRUYWIgKGNsaWNrKT1cIl9oYW5kbGVDYW5jZWwoJGV2ZW50KVwiPjwvYnV0dG9uPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
295
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZ3ZpZWMtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb25ndmllYy9jb25ndmllYy9jb25ndmllYy1mb3JtL2Nvbmd2aWVjLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29uZ3ZpZWMvY29uZ3ZpZWMvY29uZ3ZpZWMtZm9ybS9jb25ndmllYy1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFZLEtBQUssRUFBVSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUVILHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsbUJBQW1CLEVBR25CLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDcEIsTUFBTSw4QkFBOEIsQ0FBQztBQUV0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVFqRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVVoSCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsWUFBWTtJQXlFdkQsWUFDYyxTQUFtQixFQUNyQixpQkFBbUMsRUFDbkMsZ0JBQWlDLEVBQ2pDLHNCQUE2QyxFQUM3Qyx5QkFBbUQsRUFDbkQsa0JBQXFDLEVBQ3JDLGdDQUFpRTtRQUV6RSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFSUCxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ3JCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDbkMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNqQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBQzdDLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMEI7UUFDbkQsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUNyQyxxQ0FBZ0MsR0FBaEMsZ0NBQWdDLENBQWlDO1FBckVuRSxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqQyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDcEQsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNWLGtCQUFhLEdBQUcsU0FBUyxDQUFDO1FBQ2pDLDZCQUF3QixHQUFHLHdCQUF3QixDQUFDO1FBRXBELFVBQUssR0FLRDtZQUNJLFFBQVEsRUFBRSxFQUFFO1lBQ1osUUFBUSxFQUFFLENBQUM7WUFDWCxRQUFRLEVBQUUsQ0FBQztZQUNYLFlBQVksRUFBRSxFQUFFO1NBQ25CLENBQUM7UUFFTixnQkFBVyxHQUFVO1lBQ2pCO2dCQUNJLElBQUksRUFBRSxVQUFVO2dCQUNoQixJQUFJLEVBQUUsWUFBWTtnQkFDbEIsS0FBSyxFQUFFLHFCQUFxQjthQUMvQjtZQUNEO2dCQUNJLElBQUksRUFBRSxVQUFVO2dCQUNoQixJQUFJLEVBQUUsWUFBWTtnQkFDbEIsS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLE1BQU0sRUFBRSxJQUFJO2FBQ2Y7U0FDSixDQUFDO1FBQ0YsaUJBQVksR0FBVTtZQUNsQjtnQkFDSSxJQUFJLEVBQUUsYUFBYTtnQkFDbkIsSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsS0FBSyxFQUFFLGVBQWU7YUFDekI7WUFDRDtnQkFDSSxJQUFJLEVBQUUsV0FBVztnQkFDakIsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsS0FBSyxFQUFFLGVBQWU7YUFDekI7WUFDRDtnQkFDSSxJQUFJLEVBQUUsY0FBYztnQkFDcEIsSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsS0FBSyxFQUFFLHFCQUFxQjthQUMvQjtZQUNELElBQUk7WUFDSiwrQkFBK0I7WUFDL0IsNkJBQTZCO1lBQzdCLG1DQUFtQztZQUNuQyxJQUFJO1NBQ1AsQ0FBQztRQUNGLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFDcEIsb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFHcEIsbUJBQWMsR0FFVixFQUFFLENBQUM7UUEwS1Asb0NBQStCLEdBQUcsS0FBSyxFQUFFLEdBQWMsRUFBRSxFQUFFO1lBQ3ZELElBQUksR0FBRyxDQUFDLFNBQVMsSUFBSSxRQUFRLEVBQUU7Z0JBQzNCLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzVEO1FBQ0wsQ0FBQyxDQUFDO1FBaktFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFoRkQsSUFBYSxXQUFXLENBQUMsS0FBYTtRQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQStFRCxRQUFRO1FBQ0osSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ2xDO1FBQ0QsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUNqRCxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNoQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUN0QixvQkFBb0IsR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUM7U0FDL0Q7UUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbkQ7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBc0I7WUFDckMsSUFBSSxpQkFBaUIsQ0FBQztnQkFDbEIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osS0FBSyxFQUFFLGVBQWU7Z0JBQ3RCLFFBQVEsRUFBRSxJQUFJO2dCQUNkLE9BQU8sRUFBRSxFQUFFO2FBQ2QsQ0FBQztZQUNGLElBQUksbUJBQW1CLENBQUM7Z0JBQ3BCLEtBQUssRUFBRSxNQUFNO2dCQUNiLEtBQUssRUFBRSxnQkFBZ0I7Z0JBQ3ZCLE9BQU8sRUFBRSxFQUFFO2FBQ2QsQ0FBQztZQUNGLElBQUkscUJBQXFCLENBQUM7Z0JBQ3RCLEtBQUssRUFBRSxZQUFZO2dCQUNuQixLQUFLLEVBQUUsWUFBWTtnQkFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxrQkFBa0I7YUFDdkMsQ0FBQztZQUNGLElBQUkscUJBQXFCLENBQUM7Z0JBQ3RCLEtBQUssRUFBRSxXQUFXO2dCQUNsQixLQUFLLEVBQUUsVUFBVTtnQkFDakIsV0FBVyxFQUFFLElBQUksQ0FBQyx5QkFBeUI7YUFDOUMsQ0FBQztZQUNGLElBQUkscUJBQXFCLENBQUM7Z0JBQ3RCLEtBQUssRUFBRSxZQUFZO2dCQUNuQixLQUFLLEVBQUUsY0FBYztnQkFDckIsT0FBTyxFQUFFLENBQUM7YUFDYixDQUFDO1lBQ0YsSUFBSSxxQkFBcUIsQ0FBQztnQkFDdEIsS0FBSyxFQUFFLGFBQWE7Z0JBQ3BCLEtBQUssRUFBRSxlQUFlO2dCQUN0QixVQUFVLEVBQUU7b0JBQ1IsSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDO2lCQUNwRTtnQkFDRCxPQUFPLEVBQUUsQ0FBQzthQUNiLENBQUM7WUFDRixJQUFJLG9CQUFvQixDQUFDO2dCQUNyQixLQUFLLEVBQUUsVUFBVTtnQkFDakIsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsS0FBSyxFQUFFLFNBQVM7YUFDbkIsQ0FBQztZQUNGLElBQUkscUJBQXFCLENBQUM7Z0JBQ3RCLEtBQUssRUFBRSxnQkFBZ0I7Z0JBQ3ZCLEtBQUssRUFBRSxxQkFBcUI7Z0JBQzVCLFdBQVcsRUFBRSxJQUFJLENBQUMsc0JBQXNCO2dCQUN4QyxNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUUsVUFBVTtnQkFDckIsZUFBZSxFQUFFLElBQUk7Z0JBQ3JCLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLFNBQVMsRUFBRSxvQkFBb0I7YUFDbEMsQ0FBQztTQUNMLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsOEJBQThCO1FBQzlCLGdDQUFnQztRQUNoQyxzQ0FBc0M7UUFDdEMscUNBQXFDO1FBQ3JDLHFEQUFxRDtRQUNyRCxpQ0FBaUM7UUFDakMsZ0NBQWdDO1FBQ2hDLDBCQUEwQjtRQUMxQixtRUFBbUU7UUFDbkUsYUFBYTtRQUNiLFNBQVM7UUFDVCxJQUFJO1FBQ0osSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDO1FBQ3pELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUNqRTtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2IsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ3RDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBYztRQUNsQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0JBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQy9DO1lBQ0QsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztnQkFDL0MsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDeEU7U0FDSjthQUNJO1NBQ0o7SUFDTCxDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3JFLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBNkI7UUFDaEQsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELG9CQUFvQjtRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsS0FBSyxDQUFDLHNCQUFzQixDQUFDLElBQTZCO1FBQ3RELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEQsOEJBQThCO1FBQzlCLE1BQU0sYUFBYSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FDM0c7WUFDSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUM7U0FDMUQsRUFBRSwrREFBK0QsQ0FDckUsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNSLElBQUksYUFBYSxJQUFJLElBQUksRUFBRTtZQUN2QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsMERBQTBELENBQUMsQ0FBQztTQUN4RztRQUNELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRTtZQUN2QixVQUFVLEdBQUc7Z0JBQ1QsYUFBYSxFQUFFLHFCQUFxQjthQUN2QyxDQUFDO1NBQ0w7YUFDSTtZQUNELFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEcsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO2dCQUNwQixVQUFVLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pDO1lBRUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ25EO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUNoRCxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQzFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO2dCQUFFLE9BQU87WUFDcEQsTUFBTSxjQUFjLEdBQUcsdUJBQXVCLENBQUM7WUFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUM7U0FDakM7SUFDTCxDQUFDO0lBUUQsS0FBSyxDQUFDLDBCQUEwQixDQUFDLEdBQWMsRUFBRSxjQUFzQjtRQUNuRSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ2pCLGNBQWMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztTQUNqQztRQUNELE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGtDQUFrQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxpRUFBaUU7SUFDakUsSUFBSTtJQUVKLEtBQUssQ0FBQyxZQUFZO1FBQ2QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckY7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUN4QztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBbUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUU7WUFDekUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFHO1FBQ1gsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUM5QyxDQUFDO0lBRUQseUJBQXlCLENBQUMsS0FBSztRQUMzQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7O3NIQTFSUSx5QkFBeUI7MEdBQXpCLHlCQUF5QixvTkFGdkIsQ0FBQyx1QkFBdUIsQ0FBQyw2RUFHekIsOEJBQThCLHVFQ3JDN0MsZ2lIQXNEYzsyRkRsQkQseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNJLG9CQUFvQixhQUduQixDQUFDLHVCQUF1QixDQUFDO3FUQUcwQixpQkFBaUI7c0JBQTlFLFNBQVM7dUJBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNuRCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRU8sV0FBVztzQkFBdkIsS0FBSztnQkFLSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFGb3JtQmFzZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYmFzZS9kYXRhLWZvcm0tYmFzZSc7XHJcbmltcG9ydCB7IERhdGVDb21wYXJlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL3ZhbGlkYXRvcnMnO1xyXG5pbXBvcnQgeyBGb3JtU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7XHJcbiAgICBDdXN0b21Db250cm9sU2NoZW1hLFxyXG4gICAgRGF0ZVRpbWVDb250cm9sU2NoZW1hLFxyXG4gICAgRHJvcGRvd25Db250cm9sU2NoZW1hLFxyXG4gICAgRWRpdG9yQ29udHJvbFNjaGVtYSxcclxuICAgIEV2ZW50RGF0YSxcclxuICAgIEZvcm1Db250cm9sQmFzZSxcclxuICAgIFBlcmNlbnRDb250cm9sU2NoZW1hLFxyXG4gICAgVGV4dENvbnRyb2xTY2hlbWFcclxufSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvd29ya2Zsb3ctcGVybWlzc2lvbi1kZXRhaWwuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBPcGVyYXRvciwgUGVybWlzc2lvbkJhc2UgfSBmcm9tICcuLi8uLi8uLi9lbnVtcy9jb21tb24nO1xyXG5pbXBvcnQgeyBJQ29uZ1ZpZWNGb3JtIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9pLWNvbmd2aWVjLWZvcm0nO1xyXG5pbXBvcnQgeyBJTGlzdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvaS1saXN0LWNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XHJcbmltcG9ydCB7IENvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb21wb25lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IERtTGluaFZ1Y0NvbmdWaWVjU2VydmljZSB9IGZyb20gJy4uLy4uL2RtLWxpbmh2dWMtY29uZ3ZpZWMvc2VydmljZXMvZG0tbGluaHZ1Yy1jb25ndmllYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRG1Mb2FpQ29uZ1ZpZWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZG0tbG9haS1jb25ndmllYy9zZXJ2aWNlcy9kbS1sb2FpLWNvbmd2aWVjLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEbVByaW9yaXR5U2VydmljZSB9IGZyb20gJy4uLy4uL2RtLXByaW9yaXR5L3NlcnZpY2VzL2RtLXByaW9yaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnVtTG9haURhbmhTYWNoQ29uZ1ZpZWMgfSBmcm9tICcuLi8uLi9tb2RlbHMvZW51bXMnO1xyXG5pbXBvcnQgeyBDb25nVmllY05leHRGaXJzdFN0ZXBDb21wb25lbnQgfSBmcm9tICcuLi9jb25ndmllYy1uZXh0LWZpcnN0LXN0ZXAvY29uZ3ZpZWMtbmV4dC1maXJzdC1zdGVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbmdWaWVjU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Nvbmd2aWVjLnNlcnZpY2UnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdiYXNlLWNvbmd2aWVjLWZvcm0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Nvbmd2aWVjLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY29uZ3ZpZWMtZm9ybS5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q29udGV4dFNlcnZpY2VdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZUNvbmdWaWVjRm9ybUNvbXBvbmVudCBleHRlbmRzIERhdGFGb3JtQmFzZSBpbXBsZW1lbnRzIElDb25nVmllY0Zvcm0sIE9uSW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKENvbmdWaWVjTmV4dEZpcnN0U3RlcENvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pIGZvcm1OZXh0Rmlyc3RTdGVwOiBDb25nVmllY05leHRGaXJzdFN0ZXBDb21wb25lbnQ7XHJcbiAgICBASW5wdXQoKSBpdGVtSWQ6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGNydWRMaXN0OiBJTGlzdENvbXBvbmVudDtcclxuICAgIEBJbnB1dCgpIGNvbnRyb2w6IEN1c3RvbUNvbnRyb2xTY2hlbWE7XHJcbiAgICBfdGVuQ29uZ1ZpZWM6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHNldCB0ZW5Db25nVmllYyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fdGVuQ29uZ1ZpZWMgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnNldFRlbkNvbmdWaWVjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIG9uSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQWZ0ZXJJbnNlcnRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgYXV0b0ZvY3VzID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBlbnVtRm9ybVN0YXRlID0gRm9ybVN0YXRlO1xyXG4gICAgZW51bUxvYWlEYW5oU2FjaENvbmdWaWVjID0gRW51bUxvYWlEYW5oU2FjaENvbmdWaWVjO1xyXG4gICAgY3VycmVudFRhYkluZGV4OiBudW1iZXI7XHJcbiAgICB1c2Vyczoge1xyXG4gICAgICAgIHRhc2tOYW1lOiBzdHJpbmcsXHJcbiAgICAgICAgYXNzaWduZWU6IGFueSxcclxuICAgICAgICBhc3NpZ25lcjogYW55LFxyXG4gICAgICAgIHJlbGF0ZWRVc2VyczogYW55W107XHJcbiAgICB9ID0ge1xyXG4gICAgICAgICAgICB0YXNrTmFtZTogJycsXHJcbiAgICAgICAgICAgIGFzc2lnbmVyOiAwLFxyXG4gICAgICAgICAgICBhc3NpZ25lZTogMCxcclxuICAgICAgICAgICAgcmVsYXRlZFVzZXJzOiBbXSxcclxuICAgICAgICB9O1xyXG5cclxuICAgIHRhYkRhdGFUYXNrOiBhbnlbXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvZGU6ICdjb25ndmllYycsXHJcbiAgICAgICAgICAgIGljb246ICdwaSBwaS1saXN0JyxcclxuICAgICAgICAgICAgbGFiZWw6ICdUaMO0bmcgdGluIGPDtG5nIHZp4buHYydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29kZTogJ3dvcmtmbG93JyxcclxuICAgICAgICAgICAgaWNvbjogJ3BpIHBpLXVzZXInLFxyXG4gICAgICAgICAgICBsYWJlbDogJ05nxrDhu51pIG5o4bqtbicsXHJcbiAgICAgICAgICAgIGhpZGRlbjogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgIF07XHJcbiAgICB0YWJEYXRhQ2hpbGQ6IGFueVtdID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29kZTogJ2ZpbGVEaW5oS2VtJyxcclxuICAgICAgICAgICAgaWNvbjogJ3BpIHBpLXBhcGVyY2xpcCcsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnRmlsZSDEkcOtbmgga8OobSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29kZTogJ3Rhc2tDaGlsZCcsXHJcbiAgICAgICAgICAgIGljb246ICdwaSBwaS1jaGVjay1zcXVhcmUnLFxyXG4gICAgICAgICAgICBsYWJlbDogJ0PDtG5nIHZp4buHYyBjb24nXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvZGU6ICd0YXNrTGllblF1YW4nLFxyXG4gICAgICAgICAgICBpY29uOiAncGkgcGktc2hhcmUtYWx0JyxcclxuICAgICAgICAgICAgbGFiZWw6ICdDw7RuZyB2aeG7h2MgbGnDqm4gcXVhbidcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIHtcclxuICAgICAgICAvLyAgICAgY29kZTogJ3RyYW9Eb2lDb25nVmllYycsXHJcbiAgICAgICAgLy8gICAgIGljb246ICdwaSBwaS1jb21tZW50JyxcclxuICAgICAgICAvLyAgICAgbGFiZWw6ICdUcmFvIMSR4buVaSBjw7RuZyB2aeG7h2MnLFxyXG4gICAgICAgIC8vIH1cclxuICAgIF07XHJcbiAgICBidXR0b25zOiBhbnlbXSA9IFtdO1xyXG4gICAgbWRXaWR0aFdvcmtmbG93ID0gNjtcclxuICAgIG1kTG9haUNvbmdWaWVjOiBudW1iZXI7XHJcbiAgICBpZExvYWlDb25nVmllYzogc3RyaW5nO1xyXG4gICAgY3VzdG9tVGVtcGxhdGU6IHtcclxuICAgICAgICBba2V5OiBzdHJpbmddOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgfSA9IHt9O1xyXG4gICAgbGlzdENvbmdWaWVjQ29uOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX2NvbXBvbmVudFNlcnZpY2U6IENvbXBvbmVudFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfY29uZ1ZpZWNTZXJ2aWNlOiBDb25nVmllY1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZG1Mb2FpQ29uZ1ZpZWNTZXJ2aWNlOiBEbUxvYWlDb25nVmllY1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZG1MaW5oVnVjQ29uZ1ZpZWNTZXJ2aWNlOiBEbUxpbmhWdWNDb25nVmllY1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZG1Qcmlvcml0eVNlcnZpY2U6IERtUHJpb3JpdHlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3dvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2U6IFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy51c2Vycy5hc3NpZ25lciA9IDA7XHJcbiAgICAgICAgdGhpcy51c2Vycy5hc3NpZ25lZSA9IDA7XHJcbiAgICAgICAgdGhpcy51c2Vycy5yZWxhdGVkVXNlcnMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5fY29tcG9uZW50ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLmF1dG9Gb2N1cyA9ICF0aGlzLmNvbnRyb2w7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlID0gdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlO1xyXG4gICAgICAgIGxldCBvbkNoYW5nZUxvYWlDb25nVmllYyA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzRm9ybUFkZE5ldygpKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlTG9haUNvbmdWaWVjID0gdGhpcy5oYW5kbGVDaGFuZ2VMb2FpQ29uZ1ZpZWNXaGVuQWRkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5mb3JtU3RhdGUgPT0gRm9ybVN0YXRlLkFERCkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEuaWQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLnNjaGVtYSA9IDxGb3JtQ29udHJvbEJhc2VbXT5bXHJcbiAgICAgICAgICAgIG5ldyBUZXh0Q29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3RlbicsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1TDqm4gY8O0bmcgdmnhu4djJyxcclxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbWRXaWR0aDogMTJcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBFZGl0b3JDb250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnbW9UYScsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ03DtCB04bqjIG7hu5lpIGR1bmcnLFxyXG4gICAgICAgICAgICAgICAgbWRXaWR0aDogMTJcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZFByaW9yaXR5JyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnxJDhu5kgxrB1IHRpw6puJyxcclxuICAgICAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbVByaW9yaXR5U2VydmljZVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkTGluaFZ1YycsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0zEqW5oIHbhu7FjJyxcclxuICAgICAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbUxpbmhWdWNDb25nVmllY1NlcnZpY2VcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBEYXRlVGltZUNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICduZ2F5QmF0RGF1JyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnTmfDoHkgYuG6r3QgxJHhuqd1JyxcclxuICAgICAgICAgICAgICAgIG1kV2lkdGg6IDNcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBEYXRlVGltZUNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICduZ2F5S2V0VGh1YycsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ05nw6B5IGvhur90IHRow7pjJyxcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtcclxuICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZUNvbXBhcmVWYWxpZGF0b3IoT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbCwgJ25nYXlCYXREYXUnKVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIG1kV2lkdGg6IDNcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBQZXJjZW50Q29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3BoYW5UcmFtJyxcclxuICAgICAgICAgICAgICAgIG1kV2lkdGg6IDYsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Rp4bq/biDEkeG7mSdcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZExvYWlDb25nVmllYycsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Bow6JuIGxv4bqhaSBjw7RuZyB2aeG7h2MnLFxyXG4gICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX2RtTG9haUNvbmdWaWVjU2VydmljZSxcclxuICAgICAgICAgICAgICAgIGlzVHJlZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGZpZWxkVHJlZTogJ2lkUGFyZW50JyxcclxuICAgICAgICAgICAgICAgIHZhbHVlUGFyZW50Um9vdDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHNvcnRzOiBbeyBmaWVsZDogJ21hUGhhbkNhcCcsIGRpcjogMSB9XSxcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlZDogb25DaGFuZ2VMb2FpQ29uZ1ZpZWNcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMuYWRkU2NoZW1hQmFzZSgpO1xyXG4gICAgICAgIC8vIGlmICh0aGlzLl9pc0Zvcm1BZGROZXcoKSkge1xyXG4gICAgICAgIC8vICAgICB0aGlzLnNldHRpbmcuc2NoZW1hLnB1c2goXHJcbiAgICAgICAgLy8gICAgICAgICBuZXcgQ2hlY2tib3hDb250cm9sU2NoZW1hKHtcclxuICAgICAgICAvLyAgICAgICAgICAgICBmaWVsZDogJ2F1dG9OZXh0U3RlcCcsXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgbGFiZWw6ICdU4buxIMSR4buZbmcgY2h1eeG7g24gYsaw4bubYyDEkeG6p3UgdGnDqm4nLFxyXG4gICAgICAgIC8vICAgICAgICAgICAgIGNsYXNzOiAnbWctdG9wLTAnLFxyXG4gICAgICAgIC8vICAgICAgICAgICAgIHNob3dMYWJlbDogZmFsc2UsXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgbWRXaWR0aDogNixcclxuICAgICAgICAvLyAgICAgICAgICAgICBoaWRkZW5DaGVjazogKHJvb3RNb2RlbCkgPT4gIXJvb3RNb2RlbC5fV29ya2Zsb3dDb2RlXHJcbiAgICAgICAgLy8gICAgICAgICB9KVxyXG4gICAgICAgIC8vICAgICApO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlID0gdGhpcy5fY29tcG9uZW50U2VydmljZS5kaWNUZW1wbGF0ZTtcclxuICAgICAgICBpZiAodGhpcy5jdXN0b21UZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RDb25nVmllY0NvbiA9IHRoaXMuY3VzdG9tVGVtcGxhdGVbJ2xpc3RDb25nVmllY0NvbiddO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uSW5pdC5lbWl0KHtcclxuICAgICAgICAgICAgYnV0dG9uVGVtcGxhdGU6IHRoaXMuYnV0dG9uVGVtcGxhdGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkZvcm1Jbml0aWFsaXplZChldnQ6IEV2ZW50RGF0YSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0Zvcm1BZGROZXcoKSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sICYmIHRoaXMuY29udHJvbC5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGV2dC5tb2RlbCwgdGhpcy5jb250cm9sLmRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChldnQubW9kZWwuaWRMb2FpQ29uZ1ZpZWMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaWRMb2FpQ29uZ1ZpZWMgPSBldnQubW9kZWwuaWRMb2FpQ29uZ1ZpZWM7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRXb3JrZmxvd0J5TG9haUNvbmdWaWVjKGV2dCwgZXZ0Lm1vZGVsLmlkTG9haUNvbmdWaWVjKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGVuQ29uZ1ZpZWMoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhID0geyAuLi50aGlzLm1vZGVsLmRhdGEsIHRlbjogdGhpcy5fdGVuQ29uZ1ZpZWMgfTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb2RpZnlEZXRhaWxEYXRhKGRhdGE6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZVdvcmtmbG93QnV0dG9uKGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyV29ya2Zsb3dCdXR0b25zKCkge1xyXG4gICAgICAgIHRoaXMuYnV0dG9ucyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdlbmVyYXRlV29ya2Zsb3dCdXR0b24oZGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0pIHtcclxuICAgICAgICBjb25zdCB1c2VySWRDdXJyZW50ID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0SWQoKTtcclxuICAgICAgICAvLyBM4bqleSByYSB0cuG6oW5nIHRow6FpIHF1eSB0csOsbmhcclxuICAgICAgICBjb25zdCBsc3RJdGVtU3RhdHVzID0gKGF3YWl0IHRoaXMuX3dvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UuY2hhbmdlRW5kcG9pbnQodGhpcy5fY29uZ1ZpZWNTZXJ2aWNlKS5nZXRBbGwoXHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdpdGVtSWQnLCBPcGVyYXRvci5lcXVhbCwgZGF0YS5pZCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcigndXNlcklkJywgT3BlcmF0b3IuZXF1YWwsIHVzZXJJZEN1cnJlbnQpXHJcbiAgICAgICAgICAgIF0sICdpdGVtSWQsdXNlcklkLHRyYW5nVGhhaSx0ZXh0VHJhbmdUaGFpLHdvcmtmbG93Q29kZSxwZXJtaXNzaW9uJ1xyXG4gICAgICAgICkpLmRhdGE7XHJcbiAgICAgICAgaWYgKGxzdEl0ZW1TdGF0dXMgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgbOG6pXkgxJHGsOG7o2MgdGjDtG5nIHRpbiB0cuG6oW5nIHRow6FpIGhp4buHbiB04bqhaSBj4bunYSBi4bqjbiBnaGknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGl0ZW1TdGF0dXMgPSBudWxsO1xyXG4gICAgICAgIGlmICghbHN0SXRlbVN0YXR1cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaXRlbVN0YXR1cyA9IHtcclxuICAgICAgICAgICAgICAgIHRleHRUcmFuZ1RoYWk6ICdDaMawYSBjaOG6oXkgcXV5IHRyw6xuaCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGl0ZW1TdGF0dXMgPSBsc3RJdGVtU3RhdHVzLmZpbmQocSA9PiAocS5wZXJtaXNzaW9uICYgUGVybWlzc2lvbkJhc2UuRURJVCkgPT0gUGVybWlzc2lvbkJhc2UuRURJVCk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtU3RhdHVzID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1TdGF0dXMgPSBsc3RJdGVtU3RhdHVzWzBdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9zZXREaXNhYmxlQ29udHJvbCgnaWRMb2FpQ29uZ1ZpZWMnLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRhdGEuX190cmFuZ1RoYWkgPSBpdGVtU3RhdHVzLnRyYW5nVGhhaTtcclxuICAgICAgICBkYXRhLl9fdGV4dFRyYW5nVGhhaSA9IGl0ZW1TdGF0dXMudGV4dFRyYW5nVGhhaTtcclxuICAgICAgICBkYXRhLl9fd29ya2Zsb3dDb2RlID0gaXRlbVN0YXR1cy53b3JrZmxvd0NvZGU7XHJcbiAgICAgICAgZGF0YS5fX3Blcm1pc3Npb24gPSBpdGVtU3RhdHVzLnBlcm1pc3Npb247XHJcbiAgICAgICAgaWYgKHRoaXMuY3J1ZExpc3QpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0R2V0QWN0aW9uV29ya2Zsb3cgPSBhd2FpdCB0aGlzLmNydWRMaXN0LmdldEFjdGlvbldvcmtmbG93KGRhdGEpO1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0R2V0QWN0aW9uV29ya2Zsb3cpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkNvbnRleHRzID0gcmVzdWx0R2V0QWN0aW9uV29ya2Zsb3c7XHJcbiAgICAgICAgICAgIHRoaXMuYnV0dG9ucyA9IGJ1dHRvbkNvbnRleHRzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVDaGFuZ2VMb2FpQ29uZ1ZpZWNXaGVuQWRkID0gYXN5bmMgKGV2dDogRXZlbnREYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGV2dC5ldmVudFR5cGUgPT0gJ2NoYW5nZScpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkV29ya2Zsb3dCeUxvYWlDb25nVmllYyhldnQsIGV2dC5tb2RlbC5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBhc3luYyBsb2FkV29ya2Zsb3dCeUxvYWlDb25nVmllYyhldnQ6IEV2ZW50RGF0YSwgaWRMb2FpQ29uZ1ZpZWM6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghaWRMb2FpQ29uZ1ZpZWMpIHtcclxuICAgICAgICAgICAgaWRMb2FpQ29uZ1ZpZWMgPSBldnQubW9kZWwuaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHdvcmtmbG93U2V0dGluZyA9IGF3YWl0IHRoaXMuX2RtTG9haUNvbmdWaWVjU2VydmljZS5nZXRXb3JrZmxvd1NldHRpbmdCeUlkTG9haUNvbmdWaWVjKGlkTG9haUNvbmdWaWVjKTtcclxuICAgICAgICB0aGlzLnNldFdvcmtmbG93RGF0YXNvdXJjZShldnQsIHdvcmtmbG93U2V0dGluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYXN5bmMgaGFuZGxlQ2hhbmdlV29ya2Zsb3dDb2RlKGV2dDogRXZlbnREYXRhKSB7XHJcbiAgICAvLyAgICAgdGhpcy50YWJEYXRhVGFza1sxXS5oaWRkZW4gPSAhZXZ0LnJvb3RNb2RlbC5fV29ya2Zsb3dDb2RlO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGFzeW5jIG9uQmVmb3JlU2F2ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5mb3JtTmV4dEZpcnN0U3RlcCkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEuaXRlbVdvcmtmbG93SGlzdG9yeSA9IGF3YWl0IHRoaXMuZm9ybU5leHRGaXJzdFN0ZXAuZ2V0TW9kZWxEYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLml0ZW1JZCkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEuaXRlbUlkID0gdGhpcy5pdGVtSWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWZ0ZXJTYXZlKHJlczogUmVzcG9uc2VSZXN1bHQpIHtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5mb3JtU3RhdGUgPT0gRm9ybVN0YXRlLkFERCAmJiByZXMgJiYgcmVzLnN1Y2Nlc3MgJiYgcmVzLmRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkFmdGVySW5zZXJ0ZWQuZW1pdChyZXMuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uVGFiQ2hhbmdlKGV2dCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRhYkluZGV4ID0gZXZ0LmluZGV4O1xyXG4gICAgICAgIHRoaXMudXNlcnMudGFza05hbWUgPSB0aGlzLm1vZGVsLmRhdGEudGVuO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcmN1c1RvRmlyc3RJbnB1dENvbnRyb2woZXZlbnQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5GT0NVU19UT19GSVJTVF9JTlBVVF9DT05UUk9MKTtcclxuICAgIH1cclxufVxyXG5cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRUYXNrXCI+PC9uZy1jb250YWluZXI+XHJcbjxuZy10ZW1wbGF0ZSAjY29udGVudFRhc2s+XHJcbiAgICA8dG4tY3VzdG9tLXNjcm9sbGJhcj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaWRMb2FpQ29uZ1ZpZWMgPT09ICdmNTFjYTVmNi1kMjY2LTQ1MjEtYTYzMy1lMmY5Zjg1MjhhYWYnXCIgY2xhc3M9XCJub3RlXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwLjVyZW0gMXJlbTtcIj5cclxuICAgICAgICAgICAgPGI+R2hpIGNow7o8L2I+OiBWdWkgbMOybmcgY2h1eeG7g24gc2FuZyBwaMOibiBo4buHIFbEg24gYuG6o24gxJHhu4MgdOG6oW8gROG7sSB0aOG6o28gdsSDbiBi4bqjbiDEkWkuIExpbms6XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL3VzbWFydC51dGMuZWR1LnZuL3ZhbmJhbi92YW5iYW5kaS9kdS10aGFvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XHJcbiAgICAgICAgICAgICAgICBodHRwczovL3VzbWFydC51dGMuZWR1LnZuL3ZhbmJhbi92YW5iYW5kaS9kdS10aGFvPC9hPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8Y3J1ZC1mb3JtICNjcnVkRm9ybSBbKGRhdGEpXT1cIm1vZGVsLmRhdGFcIiBbc2V0dGluZ109XCJzZXR0aW5nXCIgW2NvbnRleHRdPVwiY29udGV4dFwiIFtkaXNhYmxlQ2FjaGluZ109XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2F1dG9Gb2N1c109XCJhdXRvRm9jdXNcIiAob25Gb3JtUmVhZHkpPVwiX2hhbmRsZUZvcm1SZWFkeSgkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9jcnVkLWZvcm0+XHJcbiAgICAgICAgPGJhc2UtY29uZ3ZpZWMtZGluaGtlbSBbbG9hZERldGFpbEZyb21RdWVyeVBhcmFtXT1cImZhbHNlXCIgW2Zvcm1TdGF0ZV09XCJtb2RlbC5mb3JtU3RhdGVcIlxyXG4gICAgICAgICAgICBbdGFza0lkXT1cIm1vZGVsLmRhdGEuaWRcIj5cclxuICAgICAgICA8L2Jhc2UtY29uZ3ZpZWMtZGluaGtlbT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWNoaWxkXCI+XHJcbiAgICAgICAgICAgIDx0bi10YWJ2aWV3IFtkYXRhXT1cInRhYkRhdGFDaGlsZFwiIChvblRhYkNoYW5nZSk9XCJvblRhYkNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpbGVEaW5oS2VtPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmaWxlLW1hbmFnZXIgW2xvYWREZXRhaWxGcm9tUXVlcnlQYXJhbV09XCJmYWxzZVwiIFtzZXJ2aWNlQ29kZV09XCJzZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2VudGl0eV09XCJzZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWVcIiBbZW50aXR5S2V5XT1cIm1vZGVsLmRhdGEuaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwibW9kZWwuZm9ybVN0YXRlID09IGVudW1Gb3JtU3RhdGUuVklFV1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZmlsZS1tYW5hZ2VyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGFza0NoaWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0Q29uZ1ZpZWNDb247IGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVN0YXRlOiBtb2RlbC5mb3JtU3RhdGUsIGxvYWlEYW5oU2FjaDogZW51bUxvYWlEYW5oU2FjaENvbmdWaWVjLkNvbmdWaWVjQ29uLCBpZENvbmdWaWVjOiBtb2RlbC5kYXRhLmlkXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGFza0xpZW5RdWFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0Q29uZ1ZpZWNDb247IGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVN0YXRlOiBtb2RlbC5mb3JtU3RhdGUsIGxvYWlEYW5oU2FjaDogZW51bUxvYWlEYW5oU2FjaENvbmdWaWVjLkNvbmdWaWVjTGllblF1YW4sIGlkQ29uZ1ZpZWM6IG1vZGVsLmRhdGEuaWRcclxuICAgICAgICAgICAgICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8bmctdGVtcGxhdGUgI3RyYW9Eb2lDb25nVmllYz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAzNTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNoYXQtYm94IFtzaG93U2VuZE1lc3NhZ2VCb3hdPVwiZmFsc2VcIiBbc2VydmljZUNvZGVdPVwiJ2Nvbmd2aWVjJ1wiIFtlbnRpdHldPVwiJ2Nvbmd2aWVjJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFza0lkXT1cIm1vZGVsLmRhdGEuaWRcIiBbcGFyZW50TW9kZWxdPVwibW9kZWxcIiBbcGFyZW50Q29udGV4dF09XCJjb250ZXh0XCIgW3VzZXJzXT1cInVzZXJzXCI+PC9jaGF0LWJveD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2hhdC1zZW5kLW1lc3NhZ2UtYm94IFtwYXJlbnRDb250ZXh0XT1cImNvbnRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2NoYXQtc2VuZC1tZXNzYWdlLWJveD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+IC0tPlxyXG4gICAgICAgICAgICA8L3RuLXRhYnZpZXc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L3RuLWN1c3RvbS1zY3JvbGxiYXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjYnV0dG9uVGVtcGxhdGU+XHJcbiAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBidXR0IG9mIHRoaXMuYnV0dG9uc1wiIHBCdXR0b24gW2ljb25dPVwiYnV0dC5pY29uXCIgW2xhYmVsXT1cImJ1dHQubGFiZWxcIiBjbGFzcz1cInAtYnV0dG9uLXRleHRcIlxyXG4gICAgICAgIChjbGljayk9XCJidXR0LmNvbW1hbmQoKVwiPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiIW1vZGVsLmRhdGEuX19kaXNhYmxlRWRpdCAmJiAhX19pc0Zvcm1WaWV3XCIgdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLXNhdmVcIlxyXG4gICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dFwiIFtsYWJlbF09XCInRk9STS5TQVZFJyB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJfaGFuZGxlU2F2ZSgkZXZlbnQpXCI+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS1yZXBsYXlcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tc2Vjb25kYXJ5XCJcclxuICAgICAgICBbbGFiZWxdPVwiJ0ZPUk0uQ0FOQ0VMJyB8IHRyYW5zbGF0ZVwiIHByZXZlbnRUYWIgKGNsaWNrKT1cIl9oYW5kbGVDYW5jZWwoJGV2ZW50KVwiPjwvYnV0dG9uPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==