@valtimo/dossier 12.5.1 → 12.6.1

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 (37) hide show
  1. package/esm2022/lib/components/dossier-detail/dossier-detail.component.mjs +100 -64
  2. package/esm2022/lib/components/dossier-detail/tab/notes/notes.component.mjs +3 -3
  3. package/esm2022/lib/components/dossier-detail/tab/widgets/components/field/widget-field.component.mjs +14 -15
  4. package/esm2022/lib/components/dossier-detail/tab/widgets/components/widget-block/widget-block.component.mjs +2 -5
  5. package/esm2022/lib/components/dossier-detail-task-detail/dossier-detail-task-detail.component.mjs +11 -10
  6. package/esm2022/lib/components/dossier-detail-task-list/dossier-detail-task-list.component.mjs +52 -47
  7. package/esm2022/lib/components/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.mjs +49 -7
  8. package/esm2022/lib/components/note-modal/note-modal.component.mjs +3 -3
  9. package/esm2022/lib/models/case-widget-content.model.mjs +1 -1
  10. package/esm2022/lib/models/case-widget-display.model.mjs +1 -1
  11. package/esm2022/lib/models/case-widget.model.mjs +1 -1
  12. package/esm2022/lib/permissions/dossier-detail.permissions.mjs +6 -2
  13. package/esm2022/lib/services/dossier-detail-layout.service.mjs +10 -10
  14. package/fesm2022/valtimo-dossier.mjs +260 -175
  15. package/fesm2022/valtimo-dossier.mjs.map +1 -1
  16. package/lib/components/dossier-detail/dossier-detail.component.d.ts +17 -10
  17. package/lib/components/dossier-detail/dossier-detail.component.d.ts.map +1 -1
  18. package/lib/components/dossier-detail/tab/widgets/components/field/widget-field.component.d.ts +1 -0
  19. package/lib/components/dossier-detail/tab/widgets/components/field/widget-field.component.d.ts.map +1 -1
  20. package/lib/components/dossier-detail/tab/widgets/components/widget-block/widget-block.component.d.ts +0 -1
  21. package/lib/components/dossier-detail/tab/widgets/components/widget-block/widget-block.component.d.ts.map +1 -1
  22. package/lib/components/dossier-detail-task-detail/dossier-detail-task-detail.component.d.ts +5 -3
  23. package/lib/components/dossier-detail-task-detail/dossier-detail-task-detail.component.d.ts.map +1 -1
  24. package/lib/components/dossier-detail-task-list/dossier-detail-task-list.component.d.ts +14 -13
  25. package/lib/components/dossier-detail-task-list/dossier-detail-task-list.component.d.ts.map +1 -1
  26. package/lib/components/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.d.ts +8 -3
  27. package/lib/components/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.d.ts.map +1 -1
  28. package/lib/models/case-widget-content.model.d.ts.map +1 -1
  29. package/lib/models/case-widget-display.model.d.ts +6 -2
  30. package/lib/models/case-widget-display.model.d.ts.map +1 -1
  31. package/lib/models/case-widget.model.d.ts +1 -0
  32. package/lib/models/case-widget.model.d.ts.map +1 -1
  33. package/lib/permissions/dossier-detail.permissions.d.ts +2 -1
  34. package/lib/permissions/dossier-detail.permissions.d.ts.map +1 -1
  35. package/lib/services/dossier-detail-layout.service.d.ts +4 -5
  36. package/lib/services/dossier-detail-layout.service.d.ts.map +1 -1
  37. package/package.json +1 -1
@@ -18,7 +18,7 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, signal
18
18
  import { TranslateModule } from '@ngx-translate/core';
19
19
  import { AssignUserToTaskComponent, CAN_ASSIGN_TASK_PERMISSION, TASK_DETAIL_PERMISSION_RESOURCE, TaskDetailContentComponent, TaskDetailIntermediateSaveComponent, } from '@valtimo/task';
20
20
  import { ButtonModule, IconModule } from 'carbon-components-angular';
21
- import { BehaviorSubject, switchMap } from 'rxjs';
21
+ import { BehaviorSubject, map, switchMap } from 'rxjs';
22
22
  import * as i0 from "@angular/core";
23
23
  import * as i1 from "@valtimo/config";
24
24
  import * as i2 from "@valtimo/components";
@@ -27,13 +27,13 @@ import * as i4 from "@ngx-translate/core";
27
27
  import * as i5 from "@angular/common";
28
28
  import * as i6 from "carbon-components-angular";
29
29
  export class DossierDetailsTaskDetailComponent {
30
- set task(value) {
30
+ set taskAndProcessLink(value) {
31
31
  if (!value)
32
32
  return;
33
- this.task$.next(value);
33
+ this.taskAndProcessLink$.next(value);
34
34
  this.pageValue.set({
35
- title: value?.name,
36
- subtitle: `${this.translateService.instant('taskDetail.taskCreated')} ${value?.created}`,
35
+ title: value?.task.name,
36
+ subtitle: `${this.translateService.instant('taskDetail.taskCreated')} ${value?.task?.created}`,
37
37
  });
38
38
  }
39
39
  constructor(configService, pageHeaderService, permissionService, translateService) {
@@ -46,7 +46,8 @@ export class DossierDetailsTaskDetailComponent {
46
46
  this.activeChange = new EventEmitter();
47
47
  this.formSubmit = new EventEmitter();
48
48
  this.compactMode$ = this.pageHeaderService.compactMode$;
49
- this.task$ = new BehaviorSubject(null);
49
+ this.taskAndProcessLink$ = new BehaviorSubject(null);
50
+ this.task$ = this.taskAndProcessLink$.pipe(map(taskAndProcessLink => taskAndProcessLink.task));
50
51
  this.canAssignUserToTask$ = this.task$.pipe(switchMap((task) => this.permissionService.requestPermission(CAN_ASSIGN_TASK_PERMISSION, {
51
52
  resource: TASK_DETAIL_PERMISSION_RESOURCE.task,
52
53
  identifier: task?.id ?? '',
@@ -77,7 +78,7 @@ export class DossierDetailsTaskDetailComponent {
77
78
  this.formSubmit.emit();
78
79
  }
79
80
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierDetailsTaskDetailComponent, deps: [{ token: i1.ConfigService }, { token: i2.PageHeaderService }, { token: i3.PermissionService }, { token: i4.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
80
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DossierDetailsTaskDetailComponent, isStandalone: true, selector: "valtimo-dossier-detail-task-detail", inputs: { task: "task" }, outputs: { closeEvent: "closeEvent", assignmentOfTaskChanged: "assignmentOfTaskChanged", activeChange: "activeChange", formSubmit: "formSubmit" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"{\n canAssignUserToTask: canAssignUserToTask$ | async,\n intermediateSaveValue: intermediateSaveValue$ | async,\n task: task$ | async,\n } as obs\"\n class=\"valtimo-dossier-detail-task-detail\"\n>\n <section class=\"valtimo-dossier-detail-task-detail__header\">\n <valtimo-task-detail-intermediate-save\n *ngIf=\"enableIntermediateSave\"\n [task]=\"obs.task\"\n (currentIntermediateSaveEvent)=\"onCurrentIntermediateSaveEvent($event)\"\n ></valtimo-task-detail-intermediate-save>\n\n <button cdsButton=\"ghost\" [iconOnly]=\"true\" (click)=\"onClose()\">\n <svg class=\"cds--btn__icon\" cdsIcon=\"close\" size=\"16\"></svg>\n </button>\n </section>\n\n <section\n class=\"valtimo-dossier-detail-task-detail__body\"\n [class.valtimo-dossier-detail-task-detail__body--compact]=\"compactMode$ | async\"\n >\n <div class=\"title-container\">\n <p class=\"valtimo-dossier-detail-task-detail__title\">{{ pageValue()?.title }}</p>\n\n <p class=\"cds--modal-header__label cds--type-delta\">{{ pageValue()?.subtitle }}</p>\n\n <p *ngIf=\"obs.intermediateSaveValue\" class=\"cds--modal-header__label\">\n {{ 'formManagement.intermediateSave.lastSavedBy' | translate }}:\n\n {{\n obs.intermediateSaveValue.editedBy\n ? obs.intermediateSaveValue.editedBy\n : obs.intermediateSaveValue.createdBy\n }}\n\n {{ 'formManagement.intermediateSave.on' | translate }}:\n\n {{\n obs.intermediateSaveValue.editedOn\n ? obs.intermediateSaveValue.editedOn\n : obs.intermediateSaveValue.createdOn\n }}\n </p>\n\n <valtimo-assign-user-to-task\n *ngIf=\"obs.task && obs.canAssignUserToTask\"\n [taskId]=\"obs.task.id\"\n [assigneeId]=\"obs.task.assignee\"\n ></valtimo-assign-user-to-task>\n </div>\n\n <valtimo-task-detail-content\n [task]=\"task$ | async\"\n (activeChange)=\"onActiveChangeEvent($event)\"\n (formSubmit)=\"onFormSubmitEvent()\"\n ></valtimo-task-detail-content>\n </section>\n</div>\n", styles: [".valtimo-dossier-detail-task-detail{width:100%;display:flex;flex-direction:column;background-color:var(--cds-layer);padding:8px 16px 16px}.valtimo-dossier-detail-task-detail__header{display:flex;justify-content:flex-end}.valtimo-dossier-detail-task-detail__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.valtimo-dossier-detail-task-detail__body{overflow-y:auto;max-height:calc(100vh - 320px)}.valtimo-dossier-detail-task-detail__body--compact{max-height:calc(100vh - 280px)}.valtimo-dossier-detail-task-detail__body .title-container{position:sticky;background-color:var(--cds-layer);top:0;z-index:12;padding-bottom:16px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "component", type: TaskDetailContentComponent, selector: "valtimo-task-detail-content", inputs: ["task"], outputs: ["closeModalEvent", "formSubmit", "activeChange"] }, { kind: "component", type: TaskDetailIntermediateSaveComponent, selector: "valtimo-task-detail-intermediate-save", inputs: ["task"], outputs: ["currentIntermediateSaveEvent", "showModalEvent"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i6.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i6.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: AssignUserToTaskComponent, selector: "valtimo-assign-user-to-task", inputs: ["taskId", "assigneeId"], outputs: ["assignmentOfTaskChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
81
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DossierDetailsTaskDetailComponent, isStandalone: true, selector: "valtimo-dossier-detail-task-detail", inputs: { taskAndProcessLink: "taskAndProcessLink" }, outputs: { closeEvent: "closeEvent", assignmentOfTaskChanged: "assignmentOfTaskChanged", activeChange: "activeChange", formSubmit: "formSubmit" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"{\n canAssignUserToTask: canAssignUserToTask$ | async,\n intermediateSaveValue: intermediateSaveValue$ | async,\n task: task$ | async,\n taskAndProcessLink: taskAndProcessLink$ | async,\n } as obs\"\n class=\"valtimo-dossier-detail-task-detail\"\n>\n <section class=\"valtimo-dossier-detail-task-detail__header\">\n <valtimo-task-detail-intermediate-save\n *ngIf=\"enableIntermediateSave\"\n [taskAndProcessLink]=\"obs.taskAndProcessLink\"\n (currentIntermediateSaveEvent)=\"onCurrentIntermediateSaveEvent($event)\"\n ></valtimo-task-detail-intermediate-save>\n\n <button cdsButton=\"ghost\" [iconOnly]=\"true\" (click)=\"onClose()\">\n <svg class=\"cds--btn__icon\" cdsIcon=\"close\" size=\"16\"></svg>\n </button>\n </section>\n\n <section\n class=\"valtimo-dossier-detail-task-detail__body\"\n [class.valtimo-dossier-detail-task-detail__body--compact]=\"compactMode$ | async\"\n >\n <div class=\"title-container\">\n <p class=\"valtimo-dossier-detail-task-detail__title\">{{ pageValue()?.title }}</p>\n\n <p class=\"cds--modal-header__label cds--type-delta\">{{ pageValue()?.subtitle }}</p>\n\n <p *ngIf=\"obs.intermediateSaveValue\" class=\"cds--modal-header__label\">\n {{ 'formManagement.intermediateSave.lastSavedBy' | translate }}:\n\n {{\n obs.intermediateSaveValue.editedBy\n ? obs.intermediateSaveValue.editedBy\n : obs.intermediateSaveValue.createdBy\n }}\n\n {{ 'formManagement.intermediateSave.on' | translate }}:\n\n {{\n obs.intermediateSaveValue.editedOn\n ? obs.intermediateSaveValue.editedOn\n : obs.intermediateSaveValue.createdOn\n }}\n </p>\n\n <valtimo-assign-user-to-task\n *ngIf=\"obs.task && obs.canAssignUserToTask\"\n [taskId]=\"obs.task.id\"\n [assigneeId]=\"obs.task.assignee\"\n ></valtimo-assign-user-to-task>\n </div>\n\n <valtimo-task-detail-content\n [taskAndProcessLink]=\"obs.taskAndProcessLink\"\n (activeChange)=\"onActiveChangeEvent($event)\"\n (formSubmit)=\"onFormSubmitEvent()\"\n ></valtimo-task-detail-content>\n </section>\n</div>\n", styles: [".valtimo-dossier-detail-task-detail{width:100%;display:flex;flex-direction:column;background-color:var(--cds-layer);padding:8px 16px 16px}.valtimo-dossier-detail-task-detail__header{display:flex;justify-content:flex-end}.valtimo-dossier-detail-task-detail__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.valtimo-dossier-detail-task-detail__body{overflow-y:auto;max-height:calc(100vh - 320px)}.valtimo-dossier-detail-task-detail__body--compact{max-height:calc(100vh - 280px)}.valtimo-dossier-detail-task-detail__body .title-container{position:sticky;background-color:var(--cds-layer);top:0;z-index:12;padding-bottom:16px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "component", type: TaskDetailContentComponent, selector: "valtimo-task-detail-content", inputs: ["task", "taskAndProcessLink", "modalClosed"], outputs: ["closeModalEvent", "formSubmit", "activeChange"] }, { kind: "component", type: TaskDetailIntermediateSaveComponent, selector: "valtimo-task-detail-intermediate-save", inputs: ["task", "taskAndProcessLink"], outputs: ["currentIntermediateSaveEvent", "showModalEvent"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i6.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i6.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: AssignUserToTaskComponent, selector: "valtimo-assign-user-to-task", inputs: ["taskId", "assigneeId"], outputs: ["assignmentOfTaskChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
81
82
  }
82
83
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierDetailsTaskDetailComponent, decorators: [{
83
84
  type: Component,
@@ -89,8 +90,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
89
90
  ButtonModule,
90
91
  IconModule,
91
92
  AssignUserToTaskComponent,
92
- ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"{\n canAssignUserToTask: canAssignUserToTask$ | async,\n intermediateSaveValue: intermediateSaveValue$ | async,\n task: task$ | async,\n } as obs\"\n class=\"valtimo-dossier-detail-task-detail\"\n>\n <section class=\"valtimo-dossier-detail-task-detail__header\">\n <valtimo-task-detail-intermediate-save\n *ngIf=\"enableIntermediateSave\"\n [task]=\"obs.task\"\n (currentIntermediateSaveEvent)=\"onCurrentIntermediateSaveEvent($event)\"\n ></valtimo-task-detail-intermediate-save>\n\n <button cdsButton=\"ghost\" [iconOnly]=\"true\" (click)=\"onClose()\">\n <svg class=\"cds--btn__icon\" cdsIcon=\"close\" size=\"16\"></svg>\n </button>\n </section>\n\n <section\n class=\"valtimo-dossier-detail-task-detail__body\"\n [class.valtimo-dossier-detail-task-detail__body--compact]=\"compactMode$ | async\"\n >\n <div class=\"title-container\">\n <p class=\"valtimo-dossier-detail-task-detail__title\">{{ pageValue()?.title }}</p>\n\n <p class=\"cds--modal-header__label cds--type-delta\">{{ pageValue()?.subtitle }}</p>\n\n <p *ngIf=\"obs.intermediateSaveValue\" class=\"cds--modal-header__label\">\n {{ 'formManagement.intermediateSave.lastSavedBy' | translate }}:\n\n {{\n obs.intermediateSaveValue.editedBy\n ? obs.intermediateSaveValue.editedBy\n : obs.intermediateSaveValue.createdBy\n }}\n\n {{ 'formManagement.intermediateSave.on' | translate }}:\n\n {{\n obs.intermediateSaveValue.editedOn\n ? obs.intermediateSaveValue.editedOn\n : obs.intermediateSaveValue.createdOn\n }}\n </p>\n\n <valtimo-assign-user-to-task\n *ngIf=\"obs.task && obs.canAssignUserToTask\"\n [taskId]=\"obs.task.id\"\n [assigneeId]=\"obs.task.assignee\"\n ></valtimo-assign-user-to-task>\n </div>\n\n <valtimo-task-detail-content\n [task]=\"task$ | async\"\n (activeChange)=\"onActiveChangeEvent($event)\"\n (formSubmit)=\"onFormSubmitEvent()\"\n ></valtimo-task-detail-content>\n </section>\n</div>\n", styles: [".valtimo-dossier-detail-task-detail{width:100%;display:flex;flex-direction:column;background-color:var(--cds-layer);padding:8px 16px 16px}.valtimo-dossier-detail-task-detail__header{display:flex;justify-content:flex-end}.valtimo-dossier-detail-task-detail__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.valtimo-dossier-detail-task-detail__body{overflow-y:auto;max-height:calc(100vh - 320px)}.valtimo-dossier-detail-task-detail__body--compact{max-height:calc(100vh - 280px)}.valtimo-dossier-detail-task-detail__body .title-container{position:sticky;background-color:var(--cds-layer);top:0;z-index:12;padding-bottom:16px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
93
- }], ctorParameters: () => [{ type: i1.ConfigService }, { type: i2.PageHeaderService }, { type: i3.PermissionService }, { type: i4.TranslateService }], propDecorators: { task: [{
93
+ ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"{\n canAssignUserToTask: canAssignUserToTask$ | async,\n intermediateSaveValue: intermediateSaveValue$ | async,\n task: task$ | async,\n taskAndProcessLink: taskAndProcessLink$ | async,\n } as obs\"\n class=\"valtimo-dossier-detail-task-detail\"\n>\n <section class=\"valtimo-dossier-detail-task-detail__header\">\n <valtimo-task-detail-intermediate-save\n *ngIf=\"enableIntermediateSave\"\n [taskAndProcessLink]=\"obs.taskAndProcessLink\"\n (currentIntermediateSaveEvent)=\"onCurrentIntermediateSaveEvent($event)\"\n ></valtimo-task-detail-intermediate-save>\n\n <button cdsButton=\"ghost\" [iconOnly]=\"true\" (click)=\"onClose()\">\n <svg class=\"cds--btn__icon\" cdsIcon=\"close\" size=\"16\"></svg>\n </button>\n </section>\n\n <section\n class=\"valtimo-dossier-detail-task-detail__body\"\n [class.valtimo-dossier-detail-task-detail__body--compact]=\"compactMode$ | async\"\n >\n <div class=\"title-container\">\n <p class=\"valtimo-dossier-detail-task-detail__title\">{{ pageValue()?.title }}</p>\n\n <p class=\"cds--modal-header__label cds--type-delta\">{{ pageValue()?.subtitle }}</p>\n\n <p *ngIf=\"obs.intermediateSaveValue\" class=\"cds--modal-header__label\">\n {{ 'formManagement.intermediateSave.lastSavedBy' | translate }}:\n\n {{\n obs.intermediateSaveValue.editedBy\n ? obs.intermediateSaveValue.editedBy\n : obs.intermediateSaveValue.createdBy\n }}\n\n {{ 'formManagement.intermediateSave.on' | translate }}:\n\n {{\n obs.intermediateSaveValue.editedOn\n ? obs.intermediateSaveValue.editedOn\n : obs.intermediateSaveValue.createdOn\n }}\n </p>\n\n <valtimo-assign-user-to-task\n *ngIf=\"obs.task && obs.canAssignUserToTask\"\n [taskId]=\"obs.task.id\"\n [assigneeId]=\"obs.task.assignee\"\n ></valtimo-assign-user-to-task>\n </div>\n\n <valtimo-task-detail-content\n [taskAndProcessLink]=\"obs.taskAndProcessLink\"\n (activeChange)=\"onActiveChangeEvent($event)\"\n (formSubmit)=\"onFormSubmitEvent()\"\n ></valtimo-task-detail-content>\n </section>\n</div>\n", styles: [".valtimo-dossier-detail-task-detail{width:100%;display:flex;flex-direction:column;background-color:var(--cds-layer);padding:8px 16px 16px}.valtimo-dossier-detail-task-detail__header{display:flex;justify-content:flex-end}.valtimo-dossier-detail-task-detail__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.valtimo-dossier-detail-task-detail__body{overflow-y:auto;max-height:calc(100vh - 320px)}.valtimo-dossier-detail-task-detail__body--compact{max-height:calc(100vh - 280px)}.valtimo-dossier-detail-task-detail__body .title-container{position:sticky;background-color:var(--cds-layer);top:0;z-index:12;padding-bottom:16px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
94
+ }], ctorParameters: () => [{ type: i1.ConfigService }, { type: i2.PageHeaderService }, { type: i3.PermissionService }, { type: i4.TranslateService }], propDecorators: { taskAndProcessLink: [{
94
95
  type: Input
95
96
  }], closeEvent: [{
96
97
  type: Output
@@ -101,4 +102,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
101
102
  }], formSubmit: [{
102
103
  type: Output
103
104
  }] } });
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1kZXRhaWwtdGFzay1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLWRldGFpbC10YXNrLWRldGFpbC9kb3NzaWVyLWRldGFpbC10YXNrLWRldGFpbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItZGV0YWlsLXRhc2stZGV0YWlsL2Rvc3NpZXItZGV0YWlsLXRhc2stZGV0YWlsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsZUFBZSxFQUFtQixNQUFNLHFCQUFxQixDQUFDO0FBS3RFLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsMEJBQTBCLEVBRTFCLCtCQUErQixFQUMvQiwwQkFBMEIsRUFDMUIsbUNBQW1DLEdBQ3BDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFDLGVBQWUsRUFBYyxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7O0FBa0I1RCxNQUFNLE9BQU8saUNBQWlDO0lBQzVDLElBQW9CLElBQUksQ0FBQyxLQUFpQztRQUN4RCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFFbkIsSUFBSSxDQUFDLEtBQUssQ0FB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ZiwwQkFBMEI7d0JBQzFCLG1DQUFtQzt3QkFDbkMsWUFBWTt3QkFDWixVQUFVO3dCQUNWLHlCQUF5QjtxQkFDMUI7aUxBR21CLElBQUk7c0JBQXZCLEtBQUs7Z0JBU29CLFVBQVU7c0JBQW5DLE1BQU07Z0JBQ21CLHVCQUF1QjtzQkFBaEQsTUFBTTtnQkFDbUIsWUFBWTtzQkFBckMsTUFBTTtnQkFDbUIsVUFBVTtzQkFBbkMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtQZXJtaXNzaW9uU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vYWNjZXNzLWNvbnRyb2wnO1xuaW1wb3J0IHtQYWdlSGVhZGVyU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge1Byb2Nlc3NJbnN0YW5jZVRhc2t9IGZyb20gJ0B2YWx0aW1vL3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgQXNzaWduVXNlclRvVGFza0NvbXBvbmVudCxcbiAgQ0FOX0FTU0lHTl9UQVNLX1BFUk1JU1NJT04sXG4gIEludGVybWVkaWF0ZVN1Ym1pc3Npb24sXG4gIFRBU0tfREVUQUlMX1BFUk1JU1NJT05fUkVTT1VSQ0UsXG4gIFRhc2tEZXRhaWxDb250ZW50Q29tcG9uZW50LFxuICBUYXNrRGV0YWlsSW50ZXJtZWRpYXRlU2F2ZUNvbXBvbmVudCxcbn0gZnJvbSAnQHZhbHRpbW8vdGFzayc7XG5pbXBvcnQge0J1dHRvbk1vZHVsZSwgSWNvbk1vZHVsZX0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgc3dpdGNoTWFwfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1kb3NzaWVyLWRldGFpbC10YXNrLWRldGFpbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3NzaWVyLWRldGFpbC10YXNrLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kb3NzaWVyLWRldGFpbC10YXNrLWRldGFpbC5jb21wb25lbnQuc2NzcycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBUYXNrRGV0YWlsQ29udGVudENvbXBvbmVudCxcbiAgICBUYXNrRGV0YWlsSW50ZXJtZWRpYXRlU2F2ZUNvbXBvbmVudCxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgSWNvbk1vZHVsZSxcbiAgICBBc3NpZ25Vc2VyVG9UYXNrQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyRGV0YWlsc1Rhc2tEZXRhaWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IHRhc2sodmFsdWU6IFByb2Nlc3NJbnN0YW5jZVRhc2sgfCBudWxsKSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgdGhpcy50YXNrJC5uZXh0KHZhbHVlKTtcbiAgICB0aGlzLnBhZ2VWYWx1ZS5zZXQoe1xuICAgICAgdGl0bGU6IHZhbHVlPy5uYW1lLFxuICAgICAgc3VidGl0bGU6IGAke3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd0YXNrRGV0YWlsLnRhc2tDcmVhdGVkJyl9ICR7dmFsdWU/LmNyZWF0ZWR9YCxcbiAgICB9KTtcbiAgfVxuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGNsb3NlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgYXNzaWdubWVudE9mVGFza0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgYWN0aXZlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGZvcm1TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbXBhY3RNb2RlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMucGFnZUhlYWRlclNlcnZpY2UuY29tcGFjdE1vZGUkO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFzayQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFByb2Nlc3NJbnN0YW5jZVRhc2sgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGNhbkFzc2lnblVzZXJUb1Rhc2skOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy50YXNrJC5waXBlKFxuICAgIHN3aXRjaE1hcCgodGFzazogUHJvY2Vzc0luc3RhbmNlVGFzayB8IG51bGwpID0+XG4gICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLnJlcXVlc3RQZXJtaXNzaW9uKENBTl9BU1NJR05fVEFTS19QRVJNSVNTSU9OLCB7XG4gICAgICAgIHJlc291cmNlOiBUQVNLX0RFVEFJTF9QRVJNSVNTSU9OX1JFU09VUkNFLnRhc2ssXG4gICAgICAgIGlkZW50aWZpZXI6IHRhc2s/LmlkID8/ICcnLFxuICAgICAgfSlcbiAgICApXG4gICk7XG4gIHB1YmxpYyByZWFkb25seSBpbnRlcm1lZGlhdGVTYXZlVmFsdWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJbnRlcm1lZGlhdGVTdWJtaXNzaW9uIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBwYWdlVmFsdWUgPSBzaWduYWw8e3RpdGxlOiBzdHJpbmc7IHN1YnRpdGxlOiBzdHJpbmd9Pih7XG4gICAgdGl0bGU6ICcnLFxuICAgIHN1YnRpdGxlOiAnJyxcbiAgfSk7XG4gIHB1YmxpYyBlbmFibGVJbnRlcm1lZGlhdGVTYXZlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnZUhlYWRlclNlcnZpY2U6IFBhZ2VIZWFkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmVuYWJsZUludGVybWVkaWF0ZVNhdmUgPSAhIXRoaXMuY29uZmlnU2VydmljZS5mZWF0dXJlVG9nZ2xlcz8uZW5hYmxlSW50ZXJtZWRpYXRlU2F2ZTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlRXZlbnQuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUV2ZW50LmVtaXQoKTtcbiAgICB0aGlzLm9uQWN0aXZlQ2hhbmdlRXZlbnQoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIG9uQ3VycmVudEludGVybWVkaWF0ZVNhdmVFdmVudCh2YWx1ZTogSW50ZXJtZWRpYXRlU3VibWlzc2lvbiB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLmludGVybWVkaWF0ZVNhdmVWYWx1ZSQubmV4dCh2YWx1ZSk7XG4gICAgdGhpcy5vbkFjdGl2ZUNoYW5nZUV2ZW50KGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkFjdGl2ZUNoYW5nZUV2ZW50KGFjdGl2ZUNoYW5nZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlQ2hhbmdlLmVtaXQoYWN0aXZlQ2hhbmdlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkZvcm1TdWJtaXRFdmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1TdWJtaXQuZW1pdCgpO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXZcbiAgKm5nSWY9XCJ7XG4gICAgY2FuQXNzaWduVXNlclRvVGFzazogY2FuQXNzaWduVXNlclRvVGFzayQgfCBhc3luYyxcbiAgICBpbnRlcm1lZGlhdGVTYXZlVmFsdWU6IGludGVybWVkaWF0ZVNhdmVWYWx1ZSQgfCBhc3luYyxcbiAgICB0YXNrOiB0YXNrJCB8IGFzeW5jLFxuICB9IGFzIG9ic1wiXG4gIGNsYXNzPVwidmFsdGltby1kb3NzaWVyLWRldGFpbC10YXNrLWRldGFpbFwiXG4+XG4gIDxzZWN0aW9uIGNsYXNzPVwidmFsdGltby1kb3NzaWVyLWRldGFpbC10YXNrLWRldGFpbF9faGVhZGVyXCI+XG4gICAgPHZhbHRpbW8tdGFzay1kZXRhaWwtaW50ZXJtZWRpYXRlLXNhdmVcbiAgICAgICpuZ0lmPVwiZW5hYmxlSW50ZXJtZWRpYXRlU2F2ZVwiXG4gICAgICBbdGFza109XCJvYnMudGFza1wiXG4gICAgICAoY3VycmVudEludGVybWVkaWF0ZVNhdmVFdmVudCk9XCJvbkN1cnJlbnRJbnRlcm1lZGlhdGVTYXZlRXZlbnQoJGV2ZW50KVwiXG4gICAgPjwvdmFsdGltby10YXNrLWRldGFpbC1pbnRlcm1lZGlhdGUtc2F2ZT5cblxuICAgIDxidXR0b24gY2RzQnV0dG9uPVwiZ2hvc3RcIiBbaWNvbk9ubHldPVwidHJ1ZVwiIChjbGljayk9XCJvbkNsb3NlKClcIj5cbiAgICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJjbG9zZVwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L3NlY3Rpb24+XG5cbiAgPHNlY3Rpb25cbiAgICBjbGFzcz1cInZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFzay1kZXRhaWxfX2JvZHlcIlxuICAgIFtjbGFzcy52YWx0aW1vLWRvc3NpZXItZGV0YWlsLXRhc2stZGV0YWlsX19ib2R5LS1jb21wYWN0XT1cImNvbXBhY3RNb2RlJCB8IGFzeW5jXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1jb250YWluZXJcIj5cbiAgICAgIDxwIGNsYXNzPVwidmFsdGltby1kb3NzaWVyLWRldGFpbC10YXNrLWRldGFpbF9fdGl0bGVcIj57eyBwYWdlVmFsdWUoKT8udGl0bGUgfX08L3A+XG5cbiAgICAgIDxwIGNsYXNzPVwiY2RzLS1tb2RhbC1oZWFkZXJfX2xhYmVsIGNkcy0tdHlwZS1kZWx0YVwiPnt7IHBhZ2VWYWx1ZSgpPy5zdWJ0aXRsZSB9fTwvcD5cblxuICAgICAgPHAgKm5nSWY9XCJvYnMuaW50ZXJtZWRpYXRlU2F2ZVZhbHVlXCIgY2xhc3M9XCJjZHMtLW1vZGFsLWhlYWRlcl9fbGFiZWxcIj5cbiAgICAgICAge3sgJ2Zvcm1NYW5hZ2VtZW50LmludGVybWVkaWF0ZVNhdmUubGFzdFNhdmVkQnknIHwgdHJhbnNsYXRlIH19OlxuXG4gICAgICAgIHt7XG4gICAgICAgICAgb2JzLmludGVybWVkaWF0ZVNhdmVWYWx1ZS5lZGl0ZWRCeVxuICAgICAgICAgICAgPyBvYnMuaW50ZXJtZWRpYXRlU2F2ZVZhbHVlLmVkaXRlZEJ5XG4gICAgICAgICAgICA6IG9icy5pbnRlcm1lZGlhdGVTYXZlVmFsdWUuY3JlYXRlZEJ5XG4gICAgICAgIH19XG5cbiAgICAgICAge3sgJ2Zvcm1NYW5hZ2VtZW50LmludGVybWVkaWF0ZVNhdmUub24nIHwgdHJhbnNsYXRlIH19OlxuXG4gICAgICAgIHt7XG4gICAgICAgICAgb2JzLmludGVybWVkaWF0ZVNhdmVWYWx1ZS5lZGl0ZWRPblxuICAgICAgICAgICAgPyBvYnMuaW50ZXJtZWRpYXRlU2F2ZVZhbHVlLmVkaXRlZE9uXG4gICAgICAgICAgICA6IG9icy5pbnRlcm1lZGlhdGVTYXZlVmFsdWUuY3JlYXRlZE9uXG4gICAgICAgIH19XG4gICAgICA8L3A+XG5cbiAgICAgIDx2YWx0aW1vLWFzc2lnbi11c2VyLXRvLXRhc2tcbiAgICAgICAgKm5nSWY9XCJvYnMudGFzayAmJiBvYnMuY2FuQXNzaWduVXNlclRvVGFza1wiXG4gICAgICAgIFt0YXNrSWRdPVwib2JzLnRhc2suaWRcIlxuICAgICAgICBbYXNzaWduZWVJZF09XCJvYnMudGFzay5hc3NpZ25lZVwiXG4gICAgICA+PC92YWx0aW1vLWFzc2lnbi11c2VyLXRvLXRhc2s+XG4gICAgPC9kaXY+XG5cbiAgICA8dmFsdGltby10YXNrLWRldGFpbC1jb250ZW50XG4gICAgICBbdGFza109XCJ0YXNrJCB8IGFzeW5jXCJcbiAgICAgIChhY3RpdmVDaGFuZ2UpPVwib25BY3RpdmVDaGFuZ2VFdmVudCgkZXZlbnQpXCJcbiAgICAgIChmb3JtU3VibWl0KT1cIm9uRm9ybVN1Ym1pdEV2ZW50KClcIlxuICAgID48L3ZhbHRpbW8tdGFzay1kZXRhaWwtY29udGVudD5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG4iXX0=
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1kZXRhaWwtdGFzay1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLWRldGFpbC10YXNrLWRldGFpbC9kb3NzaWVyLWRldGFpbC10YXNrLWRldGFpbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItZGV0YWlsLXRhc2stZGV0YWlsL2Rvc3NpZXItZGV0YWlsLXRhc2stZGV0YWlsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsZUFBZSxFQUFtQixNQUFNLHFCQUFxQixDQUFDO0FBS3RFLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsMEJBQTBCLEVBRTFCLCtCQUErQixFQUMvQiwwQkFBMEIsRUFDMUIsbUNBQW1DLEdBQ3BDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFDLGVBQWUsRUFBRSxHQUFHLEVBQWMsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQW1CakUsTUFBTSxPQUFPLGlDQUFpQztJQUM1QyxJQUFvQixrQkFBa0IsQ0FBQyxLQUFpQztRQUN0RSxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFFbkIsSUFBSSxD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Q0FBbUMsc0xBQ25DLFlBQVksZ01BQ1osVUFBVSw2TkFDVix5QkFBeUI7OzRGQUdoQixpQ0FBaUM7a0JBaEI3QyxTQUFTOytCQUNFLG9DQUFvQyxjQUdsQyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsWUFBWTt3QkFDWixlQUFlO3dCQUNmLDBCQUEwQjt3QkFDMUIsbUNBQW1DO3dCQUNuQyxZQUFZO3dCQUNaLFVBQVU7d0JBQ1YseUJBQXlCO3FCQUMxQjtpTEFHbUIsa0JBQWtCO3NCQUFyQyxLQUFLO2dCQVNvQixVQUFVO3NCQUFuQyxNQUFNO2dCQUNtQix1QkFBdUI7c0JBQWhELE1BQU07Z0JBQ21CLFlBQVk7c0JBQXJDLE1BQU07Z0JBQ21CLFVBQVU7c0JBQW5DLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7UGVybWlzc2lvblNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2FjY2Vzcy1jb250cm9sJztcbmltcG9ydCB7UGFnZUhlYWRlclNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtDb25maWdTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9jb25maWcnO1xuaW1wb3J0IHtQcm9jZXNzSW5zdGFuY2VUYXNrfSBmcm9tICdAdmFsdGltby9wcm9jZXNzJztcbmltcG9ydCB7XG4gIEFzc2lnblVzZXJUb1Rhc2tDb21wb25lbnQsXG4gIENBTl9BU1NJR05fVEFTS19QRVJNSVNTSU9OLFxuICBJbnRlcm1lZGlhdGVTdWJtaXNzaW9uLFxuICBUQVNLX0RFVEFJTF9QRVJNSVNTSU9OX1JFU09VUkNFLFxuICBUYXNrRGV0YWlsQ29udGVudENvbXBvbmVudCxcbiAgVGFza0RldGFpbEludGVybWVkaWF0ZVNhdmVDb21wb25lbnQsXG59IGZyb20gJ0B2YWx0aW1vL3Rhc2snO1xuaW1wb3J0IHtCdXR0b25Nb2R1bGUsIEljb25Nb2R1bGV9IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIG1hcCwgT2JzZXJ2YWJsZSwgc3dpdGNoTWFwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7VGFza1dpdGhQcm9jZXNzTGlua30gZnJvbSAnQHZhbHRpbW8vcHJvY2Vzcy1saW5rJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1kb3NzaWVyLWRldGFpbC10YXNrLWRldGFpbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3NzaWVyLWRldGFpbC10YXNrLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kb3NzaWVyLWRldGFpbC10YXNrLWRldGFpbC5jb21wb25lbnQuc2NzcycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBUYXNrRGV0YWlsQ29udGVudENvbXBvbmVudCxcbiAgICBUYXNrRGV0YWlsSW50ZXJtZWRpYXRlU2F2ZUNvbXBvbmVudCxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgSWNvbk1vZHVsZSxcbiAgICBBc3NpZ25Vc2VyVG9UYXNrQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyRGV0YWlsc1Rhc2tEZXRhaWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IHRhc2tBbmRQcm9jZXNzTGluayh2YWx1ZTogVGFza1dpdGhQcm9jZXNzTGluayB8IG51bGwpIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgICB0aGlzLnRhc2tBbmRQcm9jZXNzTGluayQubmV4dCh2YWx1ZSk7XG4gICAgdGhpcy5wYWdlVmFsdWUuc2V0KHtcbiAgICAgIHRpdGxlOiB2YWx1ZT8udGFzay5uYW1lLFxuICAgICAgc3VidGl0bGU6IGAke3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd0YXNrRGV0YWlsLnRhc2tDcmVhdGVkJyl9ICR7dmFsdWU/LnRhc2s/LmNyZWF0ZWR9YCxcbiAgICB9KTtcbiAgfVxuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGNsb3NlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgYXNzaWdubWVudE9mVGFza0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgYWN0aXZlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGZvcm1TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbXBhY3RNb2RlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMucGFnZUhlYWRlclNlcnZpY2UuY29tcGFjdE1vZGUkO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFza0FuZFByb2Nlc3NMaW5rJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFza1dpdGhQcm9jZXNzTGluayB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFzayQgPSB0aGlzLnRhc2tBbmRQcm9jZXNzTGluayQucGlwZShcbiAgICBtYXAodGFza0FuZFByb2Nlc3NMaW5rID0+IHRhc2tBbmRQcm9jZXNzTGluay50YXNrKVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgY2FuQXNzaWduVXNlclRvVGFzayQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnRhc2skLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh0YXNrOiBQcm9jZXNzSW5zdGFuY2VUYXNrIHwgbnVsbCkgPT5cbiAgICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2UucmVxdWVzdFBlcm1pc3Npb24oQ0FOX0FTU0lHTl9UQVNLX1BFUk1JU1NJT04sIHtcbiAgICAgICAgcmVzb3VyY2U6IFRBU0tfREVUQUlMX1BFUk1JU1NJT05fUkVTT1VSQ0UudGFzayxcbiAgICAgICAgaWRlbnRpZmllcjogdGFzaz8uaWQgPz8gJycsXG4gICAgICB9KVxuICAgIClcbiAgKTtcbiAgcHVibGljIHJlYWRvbmx5IGludGVybWVkaWF0ZVNhdmVWYWx1ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEludGVybWVkaWF0ZVN1Ym1pc3Npb24gfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2VWYWx1ZSA9IHNpZ25hbDx7dGl0bGU6IHN0cmluZzsgc3VidGl0bGU6IHN0cmluZ30+KHtcbiAgICB0aXRsZTogJycsXG4gICAgc3VidGl0bGU6ICcnLFxuICB9KTtcbiAgcHVibGljIGVuYWJsZUludGVybWVkaWF0ZVNhdmUgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYWdlSGVhZGVyU2VydmljZTogUGFnZUhlYWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuZW5hYmxlSW50ZXJtZWRpYXRlU2F2ZSA9ICEhdGhpcy5jb25maWdTZXJ2aWNlLmZlYXR1cmVUb2dnbGVzPy5lbmFibGVJbnRlcm1lZGlhdGVTYXZlO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VFdmVudC5lbWl0KCk7XG4gIH1cblxuICBwdWJsaWMgb25DbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlRXZlbnQuZW1pdCgpO1xuICAgIHRoaXMub25BY3RpdmVDaGFuZ2VFdmVudChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgb25DdXJyZW50SW50ZXJtZWRpYXRlU2F2ZUV2ZW50KHZhbHVlOiBJbnRlcm1lZGlhdGVTdWJtaXNzaW9uIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuaW50ZXJtZWRpYXRlU2F2ZVZhbHVlJC5uZXh0KHZhbHVlKTtcbiAgICB0aGlzLm9uQWN0aXZlQ2hhbmdlRXZlbnQoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIG9uQWN0aXZlQ2hhbmdlRXZlbnQoYWN0aXZlQ2hhbmdlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVDaGFuZ2UuZW1pdChhY3RpdmVDaGFuZ2UpO1xuICB9XG5cbiAgcHVibGljIG9uRm9ybVN1Ym1pdEV2ZW50KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybVN1Ym1pdC5lbWl0KCk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPGRpdlxuICAqbmdJZj1cIntcbiAgICBjYW5Bc3NpZ25Vc2VyVG9UYXNrOiBjYW5Bc3NpZ25Vc2VyVG9UYXNrJCB8IGFzeW5jLFxuICAgIGludGVybWVkaWF0ZVNhdmVWYWx1ZTogaW50ZXJtZWRpYXRlU2F2ZVZhbHVlJCB8IGFzeW5jLFxuICAgIHRhc2s6IHRhc2skIHwgYXN5bmMsXG4gICAgdGFza0FuZFByb2Nlc3NMaW5rOiB0YXNrQW5kUHJvY2Vzc0xpbmskIHwgYXN5bmMsXG4gIH0gYXMgb2JzXCJcbiAgY2xhc3M9XCJ2YWx0aW1vLWRvc3NpZXItZGV0YWlsLXRhc2stZGV0YWlsXCJcbj5cbiAgPHNlY3Rpb24gY2xhc3M9XCJ2YWx0aW1vLWRvc3NpZXItZGV0YWlsLXRhc2stZGV0YWlsX19oZWFkZXJcIj5cbiAgICA8dmFsdGltby10YXNrLWRldGFpbC1pbnRlcm1lZGlhdGUtc2F2ZVxuICAgICAgKm5nSWY9XCJlbmFibGVJbnRlcm1lZGlhdGVTYXZlXCJcbiAgICAgIFt0YXNrQW5kUHJvY2Vzc0xpbmtdPVwib2JzLnRhc2tBbmRQcm9jZXNzTGlua1wiXG4gICAgICAoY3VycmVudEludGVybWVkaWF0ZVNhdmVFdmVudCk9XCJvbkN1cnJlbnRJbnRlcm1lZGlhdGVTYXZlRXZlbnQoJGV2ZW50KVwiXG4gICAgPjwvdmFsdGltby10YXNrLWRldGFpbC1pbnRlcm1lZGlhdGUtc2F2ZT5cblxuICAgIDxidXR0b24gY2RzQnV0dG9uPVwiZ2hvc3RcIiBbaWNvbk9ubHldPVwidHJ1ZVwiIChjbGljayk9XCJvbkNsb3NlKClcIj5cbiAgICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJjbG9zZVwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L3NlY3Rpb24+XG5cbiAgPHNlY3Rpb25cbiAgICBjbGFzcz1cInZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFzay1kZXRhaWxfX2JvZHlcIlxuICAgIFtjbGFzcy52YWx0aW1vLWRvc3NpZXItZGV0YWlsLXRhc2stZGV0YWlsX19ib2R5LS1jb21wYWN0XT1cImNvbXBhY3RNb2RlJCB8IGFzeW5jXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1jb250YWluZXJcIj5cbiAgICAgIDxwIGNsYXNzPVwidmFsdGltby1kb3NzaWVyLWRldGFpbC10YXNrLWRldGFpbF9fdGl0bGVcIj57eyBwYWdlVmFsdWUoKT8udGl0bGUgfX08L3A+XG5cbiAgICAgIDxwIGNsYXNzPVwiY2RzLS1tb2RhbC1oZWFkZXJfX2xhYmVsIGNkcy0tdHlwZS1kZWx0YVwiPnt7IHBhZ2VWYWx1ZSgpPy5zdWJ0aXRsZSB9fTwvcD5cblxuICAgICAgPHAgKm5nSWY9XCJvYnMuaW50ZXJtZWRpYXRlU2F2ZVZhbHVlXCIgY2xhc3M9XCJjZHMtLW1vZGFsLWhlYWRlcl9fbGFiZWxcIj5cbiAgICAgICAge3sgJ2Zvcm1NYW5hZ2VtZW50LmludGVybWVkaWF0ZVNhdmUubGFzdFNhdmVkQnknIHwgdHJhbnNsYXRlIH19OlxuXG4gICAgICAgIHt7XG4gICAgICAgICAgb2JzLmludGVybWVkaWF0ZVNhdmVWYWx1ZS5lZGl0ZWRCeVxuICAgICAgICAgICAgPyBvYnMuaW50ZXJtZWRpYXRlU2F2ZVZhbHVlLmVkaXRlZEJ5XG4gICAgICAgICAgICA6IG9icy5pbnRlcm1lZGlhdGVTYXZlVmFsdWUuY3JlYXRlZEJ5XG4gICAgICAgIH19XG5cbiAgICAgICAge3sgJ2Zvcm1NYW5hZ2VtZW50LmludGVybWVkaWF0ZVNhdmUub24nIHwgdHJhbnNsYXRlIH19OlxuXG4gICAgICAgIHt7XG4gICAgICAgICAgb2JzLmludGVybWVkaWF0ZVNhdmVWYWx1ZS5lZGl0ZWRPblxuICAgICAgICAgICAgPyBvYnMuaW50ZXJtZWRpYXRlU2F2ZVZhbHVlLmVkaXRlZE9uXG4gICAgICAgICAgICA6IG9icy5pbnRlcm1lZGlhdGVTYXZlVmFsdWUuY3JlYXRlZE9uXG4gICAgICAgIH19XG4gICAgICA8L3A+XG5cbiAgICAgIDx2YWx0aW1vLWFzc2lnbi11c2VyLXRvLXRhc2tcbiAgICAgICAgKm5nSWY9XCJvYnMudGFzayAmJiBvYnMuY2FuQXNzaWduVXNlclRvVGFza1wiXG4gICAgICAgIFt0YXNrSWRdPVwib2JzLnRhc2suaWRcIlxuICAgICAgICBbYXNzaWduZWVJZF09XCJvYnMudGFzay5hc3NpZ25lZVwiXG4gICAgICA+PC92YWx0aW1vLWFzc2lnbi11c2VyLXRvLXRhc2s+XG4gICAgPC9kaXY+XG5cbiAgICA8dmFsdGltby10YXNrLWRldGFpbC1jb250ZW50XG4gICAgICBbdGFza0FuZFByb2Nlc3NMaW5rXT1cIm9icy50YXNrQW5kUHJvY2Vzc0xpbmtcIlxuICAgICAgKGFjdGl2ZUNoYW5nZSk9XCJvbkFjdGl2ZUNoYW5nZUV2ZW50KCRldmVudClcIlxuICAgICAgKGZvcm1TdWJtaXQpPVwib25Gb3JtU3VibWl0RXZlbnQoKVwiXG4gICAgPjwvdmFsdGltby10YXNrLWRldGFpbC1jb250ZW50PlxuICA8L3NlY3Rpb24+XG48L2Rpdj5cbiJdfQ==
@@ -29,25 +29,27 @@ import * as i3 from "@angular/router";
29
29
  import * as i4 from "@valtimo/access-control";
30
30
  import * as i5 from "@valtimo/security";
31
31
  import * as i6 from "../../services";
32
- import * as i7 from "@angular/common";
33
- import * as i8 from "@ngx-translate/core";
34
- import * as i9 from "carbon-components-angular";
35
- import * as i10 from "@valtimo/task";
36
- import * as i11 from "@valtimo/components";
32
+ import * as i7 from "@valtimo/process-link";
33
+ import * as i8 from "@angular/common";
34
+ import * as i9 from "@ngx-translate/core";
35
+ import * as i10 from "carbon-components-angular";
36
+ import * as i11 from "@valtimo/task";
37
+ import * as i12 from "@valtimo/components";
37
38
  moment.locale(localStorage.getItem('langKey') || '');
38
39
  moment.defaultFormat = 'DD MMM YYYY HH:mm';
39
40
  export class DossierDetailTaskListComponent {
40
- set openInTaskModal(value) {
41
+ set openTaskAndProcessLinkInModal(value) {
41
42
  if (value)
42
- this._taskDetailModal.openTaskDetails(value);
43
+ this._taskDetailModal.openTaskAndProcessLinkDetails(value);
43
44
  }
44
- constructor(documentService, processService, route, permissionService, userProviderService, dossierDetailLayoutService) {
45
+ constructor(documentService, processService, route, permissionService, userProviderService, dossierDetailLayoutService, processLinkService) {
45
46
  this.documentService = documentService;
46
47
  this.processService = processService;
47
48
  this.route = route;
48
49
  this.permissionService = permissionService;
49
50
  this.userProviderService = userProviderService;
50
51
  this.dossierDetailLayoutService = dossierDetailLayoutService;
52
+ this.processLinkService = processLinkService;
51
53
  this.taskClickEvent = new EventEmitter();
52
54
  this.formSubmitEvent = new EventEmitter();
53
55
  this.loadingTasks$ = new BehaviorSubject(true);
@@ -56,26 +58,26 @@ export class DossierDetailTaskListComponent {
56
58
  this.processInstanceTasks$ = this._refresh$.pipe(switchMap(() => this._documentId$), switchMap(documentId => this.documentService
57
59
  .findProcessDocumentInstances(documentId)
58
60
  .pipe(repeat({ count: 5, delay: 1500 }))), switchMap(processDocumentInstances => combineLatest([
59
- ...processDocumentInstances.map(processDocumentInstance => this.processService.getProcessInstanceTasks(processDocumentInstance.id.processInstanceId)),
60
- ])), map(res => res.reduce((acc, curr) => [...acc, ...curr], [])), switchMap(tasks => combineLatest([
61
- of(tasks),
62
- ...(tasks || []).map(task => this.permissionService.requestPermission(CAN_VIEW_TASK_PERMISSION, {
61
+ ...processDocumentInstances.map(processDocumentInstance => this.processLinkService.getTasksWithProcessLinks(processDocumentInstance.id.processInstanceId)),
62
+ ])), map(res => res.reduce((acc, curr) => [...acc, ...curr], [])), switchMap(tasksWithProcessLinks => combineLatest([
63
+ of(tasksWithProcessLinks),
64
+ ...(tasksWithProcessLinks || []).map(taskWithProcessLink => this.permissionService.requestPermission(CAN_VIEW_TASK_PERMISSION, {
63
65
  resource: TASK_DETAIL_PERMISSION_RESOURCE.task,
64
- identifier: task.id,
66
+ identifier: taskWithProcessLink.task.id,
65
67
  })),
66
68
  ])), map(res => {
67
- const tasks = res[0] || [];
69
+ const tasksWithProcessLinks = res[0] || [];
68
70
  const permissions = res?.filter((_, index) => index !== 0);
69
- const mappedTasks = this.mapTasks(tasks, permissions);
70
- const uniqueTasks = this.getUniqueTasks(mappedTasks);
71
- return this.getSortedTasks(uniqueTasks);
72
- }), map(tasks => this.sortTasksOnPermission(tasks)), tap(() => this.loadingTasks$.next(false)));
71
+ const mappedTasksWithProcessLinks = this.mapTasksWithProcessLinks(tasksWithProcessLinks, permissions);
72
+ const uniqueTasksWithProcessLinks = this.getUniqueTasksWithProcessLinks(mappedTasksWithProcessLinks);
73
+ return this.getSortedTasksWithProcessLinks(uniqueTasksWithProcessLinks);
74
+ }), map(tasksWithProcessLinks => this.sortTasksWithProcessLinksOnPermission(tasksWithProcessLinks)), tap(() => this.loadingTasks$.next(false)));
73
75
  this.formSize$ = this.dossierDetailLayoutService.formDisplaySize$;
74
76
  }
75
- rowTaskClick(task) {
76
- if (task.isLocked)
77
+ rowTaskClick(tasWithProcessLinkk) {
78
+ if (tasWithProcessLinkk.task.isLocked)
77
79
  return;
78
- this.taskClickEvent.emit(task);
80
+ this.taskClickEvent.emit(tasWithProcessLinkk);
79
81
  }
80
82
  onFormSubmit() {
81
83
  this.formSubmitEvent.emit();
@@ -84,51 +86,54 @@ export class DossierDetailTaskListComponent {
84
86
  refresh() {
85
87
  this._refresh$.next(null);
86
88
  }
87
- mapTasks(tasks, permissions) {
88
- return tasks.map((task, index) => ({
89
- ...task,
90
- createdUnix: moment(task.created).unix(),
91
- created: moment(task.created).format('DD MMM YYYY HH:mm'),
92
- ...(task.due && { dueUnix: moment(task.due).unix() }),
93
- isLocked: !permissions[index],
89
+ mapTasksWithProcessLinks(tasksWithProcessLinks, permissions) {
90
+ return tasksWithProcessLinks.map((taskWithProcessLink, index) => ({
91
+ ...taskWithProcessLink,
92
+ task: {
93
+ ...taskWithProcessLink.task,
94
+ createdUnix: moment(taskWithProcessLink.task.created).unix(),
95
+ created: moment(taskWithProcessLink.task.created).format('DD MMM YYYY HH:mm'),
96
+ ...(taskWithProcessLink.task.due && { dueUnix: moment(taskWithProcessLink.task.due).unix() }),
97
+ isLocked: !permissions[index],
98
+ },
94
99
  }));
95
100
  }
96
- getUniqueTasks(tasks) {
97
- return tasks.reduce((acc, curr) => {
98
- if (!acc.find(task => task.id === curr.id)) {
101
+ getUniqueTasksWithProcessLinks(tasksWithProcessLinks) {
102
+ return tasksWithProcessLinks.reduce((acc, curr) => {
103
+ if (!acc.find(taskWithProcessLink => taskWithProcessLink.task.id === curr.task.id)) {
99
104
  return [...acc, curr];
100
105
  }
101
106
  return acc;
102
107
  }, []);
103
108
  }
104
- getSortedTasks(tasks) {
105
- return tasks.sort((t1, t2) => {
109
+ getSortedTasksWithProcessLinks(tasksWithProcessLinks) {
110
+ return tasksWithProcessLinks.sort((t1, t2) => {
106
111
  // high priority tasks on top
107
- if (t2.priority !== t1.priority) {
108
- return t2.priority - t1.priority;
112
+ if (t2.task.priority !== t1.task.priority) {
113
+ return t2.task.priority - t1.task.priority;
109
114
  }
110
115
  // task with approaching due date on top
111
- const due1 = t1?.dueUnix || Number.MAX_VALUE;
112
- const due2 = t2?.dueUnix || Number.MAX_VALUE;
116
+ const due1 = t1?.task.dueUnix || Number.MAX_VALUE;
117
+ const due2 = t2?.task.dueUnix || Number.MAX_VALUE;
113
118
  if (due1 !== due2) {
114
119
  return due1 - due2;
115
120
  }
116
121
  // new task on top
117
- const createdCompare = t2.createdUnix / 5000 - t1.createdUnix / 5000;
122
+ const createdCompare = t2.task.createdUnix / 5000 - t1.task.createdUnix / 5000;
118
123
  if (createdCompare !== 0) {
119
124
  return createdCompare;
120
125
  }
121
126
  // task with approximately the same age, are sorted by name
122
- return t1.name.localeCompare(t2.name);
127
+ return t1.task.name.localeCompare(t2.task.name);
123
128
  });
124
129
  }
125
- sortTasksOnPermission(tasks) {
126
- return tasks.reduce((acc, curr) => !curr.isLocked
130
+ sortTasksWithProcessLinksOnPermission(tasksWithProcessLinks) {
131
+ return tasksWithProcessLinks.reduce((acc, curr) => !curr.task.isLocked
127
132
  ? { ...acc, myTasks: [...acc.myTasks, curr] }
128
133
  : { ...acc, otherTasks: [...acc.otherTasks, curr] }, { myTasks: [], otherTasks: [] });
129
134
  }
130
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierDetailTaskListComponent, deps: [{ token: i1.DocumentService }, { token: i2.ProcessService }, { token: i3.ActivatedRoute }, { token: i4.PermissionService }, { token: i5.UserProviderService }, { token: i6.DossierDetailLayoutService }], target: i0.ɵɵFactoryTarget.Component }); }
131
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DossierDetailTaskListComponent, isStandalone: true, selector: "valtimo-dossier-detail-task-list", inputs: { openInTaskModal: "openInTaskModal" }, outputs: { taskClickEvent: "taskClickEvent", formSubmitEvent: "formSubmitEvent" }, viewQueries: [{ propertyName: "_taskDetailModal", first: true, predicate: ["taskDetail"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"task-list\"\n *ngIf=\"{loadingTasks: loadingTasks$ | async, tasks: processInstanceTasks$ | async} as obs\"\n>\n @if (obs.loadingTasks && !obs.tasks) {\n <ng-container *ngTemplateOutlet=\"loadingTasksTemplate\"></ng-container>\n } @else if (obs.tasks?.myTasks?.length === 0 && obs.tasks?.otherTasks?.length === 0) {\n <ng-container *ngTemplateOutlet=\"noTasksTemplate\"></ng-container>\n } @else {\n <h2 class=\"task-list__title\">{{ 'summary.tasks' | translate }}</h2>\n\n <div class=\"task-list__tasks-container\" cdsLayer=\"1\">\n <h3 class=\"task-list__subtitle\">{{ 'summary.myTasks' | translate }}</h3>\n\n @if (obs.tasks?.myTasks.length === 0) {\n {{ 'summary.noResultsMyTasks' | translate }}\n } @else {\n @for (task of obs.tasks?.myTasks; track task.id) {\n <ng-container *ngTemplateOutlet=\"taskTemplate; context: {task: task}\"></ng-container>\n }\n }\n </div>\n\n <div class=\"task-list__tasks-container\" cdsLayer=\"1\">\n <h3 class=\"task-list__subtitle\">{{ 'summary.otherTasks' | translate }}</h3>\n\n @if (obs.tasks?.otherTasks.length === 0) {\n {{ 'summary.noResultsOtherTasks' | translate }}\n } @else {\n @for (task of obs.tasks?.otherTasks; track task.id) {\n <ng-container *ngTemplateOutlet=\"taskTemplate; context: {task: task}\"></ng-container>\n }\n }\n </div>\n }\n\n <valtimo-task-detail-modal\n #taskDetail\n [modalSize]=\"formSize$ | async\"\n (formSubmit)=\"onFormSubmit()\"\n (assignmentOfTaskChanged)=\"refresh()\"\n ></valtimo-task-detail-modal>\n</div>\n\n<ng-template #taskTemplate let-task=\"task\">\n <cds-clickable-tile [href]=\"null\" (click)=\"rowTaskClick(task)\">\n <div class=\"task\">\n <div class=\"task__header\">\n <span class=\"task__title\">{{ task.name }}</span>\n\n <cds-tag class=\"cds-tag--no-margin\" [type]=\"task.isLocked ? 'cool-gray' : 'green'\">\n @if (!task.isLocked) {\n {{ 'summary.taskOpen' | translate }}\n } @else {\n <i class=\"icon mdi mdi-lock\"></i>\n }\n </cds-tag>\n </div>\n\n <div class=\"task__description\">\n {{ 'summary.taskCreated' | translate }} {{ task.created }}\n </div>\n </div>\n </cds-clickable-tile>\n</ng-template>\n\n<ng-template #noTasksTemplate>\n <valtimo-no-results\n [alwaysRenderVertically]=\"true\"\n illustration=\"valtimo-layout/img/emptystate-success.svg\"\n [description]=\"'summary.userTasksDoneState' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n</ng-template>\n\n<ng-template #loadingTasksTemplate>\n <div class=\"loading-container\">\n <cds-loading size=\"sm\"></cds-loading>\n </div>\n</ng-template>\n", styles: [".task-list{width:100%;background-color:var(--cds-layer);padding:24px;display:flex;flex-direction:column;gap:16px}.task-list__title{font-size:24px;line-height:24px;font-weight:600}.task-list__subtitle{font-size:16px;line-height:16px;font-weight:600}.task-list__tasks-container,.task{display:flex;flex-direction:column;gap:8px}.task__header{display:flex;justify-content:space-between;align-items:center;gap:8px}.task__header .cds--tag{white-space:pre}.task__title{width:100%}.task__title,.task__description{font-size:14px;font-style:normal;font-weight:600;line-height:20px;letter-spacing:.16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.task__description{font-weight:400}.loading-container{width:100%;display:flex;justify-content:center}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "ngmodule", type: NgbTooltipModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: WidgetModule }, { kind: "ngmodule", type: LoadingModule }, { kind: "component", type: i9.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "ngmodule", type: TaskModule }, { kind: "component", type: i10.TaskDetailModalComponent, selector: "valtimo-task-detail-modal", inputs: ["modalSize"], outputs: ["formSubmit", "assignmentOfTaskChanged"] }, { kind: "ngmodule", type: TilesModule }, { kind: "component", type: i9.ClickableTile, selector: "cds-clickable-tile, ibm-clickable-tile", inputs: ["theme", "href", "target", "disabled", "route", "routeExtras"], outputs: ["navigation"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i9.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i9.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i11.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }] }); }
135
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierDetailTaskListComponent, deps: [{ token: i1.DocumentService }, { token: i2.ProcessService }, { token: i3.ActivatedRoute }, { token: i4.PermissionService }, { token: i5.UserProviderService }, { token: i6.DossierDetailLayoutService }, { token: i7.ProcessLinkService }], target: i0.ɵɵFactoryTarget.Component }); }
136
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DossierDetailTaskListComponent, isStandalone: true, selector: "valtimo-dossier-detail-task-list", inputs: { openTaskAndProcessLinkInModal: "openTaskAndProcessLinkInModal" }, outputs: { taskClickEvent: "taskClickEvent", formSubmitEvent: "formSubmitEvent" }, viewQueries: [{ propertyName: "_taskDetailModal", first: true, predicate: ["taskDetail"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"task-list\"\n *ngIf=\"{loadingTasks: loadingTasks$ | async, tasks: processInstanceTasks$ | async} as obs\"\n>\n @if (obs.loadingTasks && !obs.tasks) {\n <ng-container *ngTemplateOutlet=\"loadingTasksTemplate\"></ng-container>\n } @else if (obs.tasks?.myTasks?.length === 0 && obs.tasks?.otherTasks?.length === 0) {\n <ng-container *ngTemplateOutlet=\"noTasksTemplate\"></ng-container>\n } @else {\n <h2 class=\"task-list__title\">{{ 'summary.tasks' | translate }}</h2>\n\n <div class=\"task-list__tasks-container\" cdsLayer=\"1\">\n <h3 class=\"task-list__subtitle\">{{ 'summary.myTasks' | translate }}</h3>\n\n @if (obs.tasks?.myTasks.length === 0) {\n {{ 'summary.noResultsMyTasks' | translate }}\n } @else {\n @for (taskWithProcessLink of obs.tasks?.myTasks; track taskWithProcessLink.task.id) {\n <ng-container\n *ngTemplateOutlet=\"taskTemplate; context: {taskWithProcessLink: taskWithProcessLink}\"\n ></ng-container>\n }\n }\n </div>\n\n <div class=\"task-list__tasks-container\" cdsLayer=\"1\">\n <h3 class=\"task-list__subtitle\">{{ 'summary.otherTasks' | translate }}</h3>\n\n @if (obs.tasks?.otherTasks.length === 0) {\n {{ 'summary.noResultsOtherTasks' | translate }}\n } @else {\n @for (taskWithProcessLink of obs.tasks?.otherTasks; track taskWithProcessLink.task.id) {\n <ng-container\n *ngTemplateOutlet=\"taskTemplate; context: {taskWithProcessLink: taskWithProcessLink}\"\n ></ng-container>\n }\n }\n </div>\n }\n\n <valtimo-task-detail-modal\n #taskDetail\n [modalSize]=\"formSize$ | async\"\n (formSubmit)=\"onFormSubmit()\"\n (assignmentOfTaskChanged)=\"refresh()\"\n ></valtimo-task-detail-modal>\n</div>\n\n<ng-template #taskTemplate let-taskWithProcessLink=\"taskWithProcessLink\">\n <cds-clickable-tile [href]=\"null\" (click)=\"rowTaskClick(taskWithProcessLink)\">\n <div class=\"task\">\n <div class=\"task__header\">\n <span class=\"task__title\">{{ taskWithProcessLink.task.name }}</span>\n\n <cds-tag\n class=\"cds-tag--no-margin\"\n [type]=\"taskWithProcessLink.task.isLocked ? 'cool-gray' : 'green'\"\n >\n @if (!taskWithProcessLink.task.isLocked) {\n {{ 'summary.taskOpen' | translate }}\n } @else {\n <i class=\"icon mdi mdi-lock\"></i>\n }\n </cds-tag>\n </div>\n\n <div class=\"task__description\">\n {{ 'summary.taskCreated' | translate }} {{ taskWithProcessLink.task.created }}\n </div>\n\n <div class=\"task__subtitles\">\n @for (\n subtitle of taskWithProcessLink?.processLinkActivityResult?.properties?.subtitles || [];\n track subtitle\n ) {\n <p class=\"task__subtitle\">{{ subtitle }}</p>\n }\n </div>\n </div>\n </cds-clickable-tile>\n</ng-template>\n\n<ng-template #noTasksTemplate>\n <valtimo-no-results\n [alwaysRenderVertically]=\"true\"\n illustration=\"valtimo-layout/img/emptystate-success.svg\"\n [description]=\"'summary.userTasksDoneState' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n</ng-template>\n\n<ng-template #loadingTasksTemplate>\n <div class=\"loading-container\">\n <cds-loading size=\"sm\"></cds-loading>\n </div>\n</ng-template>\n", styles: [".task-list{width:100%;background-color:var(--cds-layer);padding:24px;display:flex;flex-direction:column;gap:16px}.task-list__title{font-size:24px;line-height:24px;font-weight:600}.task-list__subtitle{font-size:16px;line-height:16px;font-weight:600}.task-list__tasks-container,.task{display:flex;flex-direction:column;gap:8px}.task__header{display:flex;justify-content:space-between;align-items:center;gap:8px}.task__header .cds--tag{margin:0;white-space:pre}.task__title{width:100%;font-size:14px;font-weight:600;line-height:20px;letter-spacing:.16px;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none}.task__subtitle{font-size:12px;font-weight:400;line-height:16px;letter-spacing:.32px;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.task__subtitles{display:flex;flex-direction:column;gap:4px}.task__description{font-size:12px;font-weight:400;line-height:16px;letter-spacing:.32px;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none}.loading-container{width:100%;display:flex;justify-content:center}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "ngmodule", type: NgbTooltipModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: WidgetModule }, { kind: "ngmodule", type: LoadingModule }, { kind: "component", type: i10.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "ngmodule", type: TaskModule }, { kind: "component", type: i11.TaskDetailModalComponent, selector: "valtimo-task-detail-modal", inputs: ["modalSize"], outputs: ["formSubmit", "assignmentOfTaskChanged"] }, { kind: "ngmodule", type: TilesModule }, { kind: "component", type: i10.ClickableTile, selector: "cds-clickable-tile, ibm-clickable-tile", inputs: ["theme", "href", "target", "disabled", "route", "routeExtras"], outputs: ["navigation"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i10.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i10.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i12.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }] }); }
132
137
  }
133
138
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierDetailTaskListComponent, decorators: [{
134
139
  type: Component,
@@ -143,15 +148,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
143
148
  LayerModule,
144
149
  TagModule,
145
150
  CarbonListModule,
146
- ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"task-list\"\n *ngIf=\"{loadingTasks: loadingTasks$ | async, tasks: processInstanceTasks$ | async} as obs\"\n>\n @if (obs.loadingTasks && !obs.tasks) {\n <ng-container *ngTemplateOutlet=\"loadingTasksTemplate\"></ng-container>\n } @else if (obs.tasks?.myTasks?.length === 0 && obs.tasks?.otherTasks?.length === 0) {\n <ng-container *ngTemplateOutlet=\"noTasksTemplate\"></ng-container>\n } @else {\n <h2 class=\"task-list__title\">{{ 'summary.tasks' | translate }}</h2>\n\n <div class=\"task-list__tasks-container\" cdsLayer=\"1\">\n <h3 class=\"task-list__subtitle\">{{ 'summary.myTasks' | translate }}</h3>\n\n @if (obs.tasks?.myTasks.length === 0) {\n {{ 'summary.noResultsMyTasks' | translate }}\n } @else {\n @for (task of obs.tasks?.myTasks; track task.id) {\n <ng-container *ngTemplateOutlet=\"taskTemplate; context: {task: task}\"></ng-container>\n }\n }\n </div>\n\n <div class=\"task-list__tasks-container\" cdsLayer=\"1\">\n <h3 class=\"task-list__subtitle\">{{ 'summary.otherTasks' | translate }}</h3>\n\n @if (obs.tasks?.otherTasks.length === 0) {\n {{ 'summary.noResultsOtherTasks' | translate }}\n } @else {\n @for (task of obs.tasks?.otherTasks; track task.id) {\n <ng-container *ngTemplateOutlet=\"taskTemplate; context: {task: task}\"></ng-container>\n }\n }\n </div>\n }\n\n <valtimo-task-detail-modal\n #taskDetail\n [modalSize]=\"formSize$ | async\"\n (formSubmit)=\"onFormSubmit()\"\n (assignmentOfTaskChanged)=\"refresh()\"\n ></valtimo-task-detail-modal>\n</div>\n\n<ng-template #taskTemplate let-task=\"task\">\n <cds-clickable-tile [href]=\"null\" (click)=\"rowTaskClick(task)\">\n <div class=\"task\">\n <div class=\"task__header\">\n <span class=\"task__title\">{{ task.name }}</span>\n\n <cds-tag class=\"cds-tag--no-margin\" [type]=\"task.isLocked ? 'cool-gray' : 'green'\">\n @if (!task.isLocked) {\n {{ 'summary.taskOpen' | translate }}\n } @else {\n <i class=\"icon mdi mdi-lock\"></i>\n }\n </cds-tag>\n </div>\n\n <div class=\"task__description\">\n {{ 'summary.taskCreated' | translate }} {{ task.created }}\n </div>\n </div>\n </cds-clickable-tile>\n</ng-template>\n\n<ng-template #noTasksTemplate>\n <valtimo-no-results\n [alwaysRenderVertically]=\"true\"\n illustration=\"valtimo-layout/img/emptystate-success.svg\"\n [description]=\"'summary.userTasksDoneState' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n</ng-template>\n\n<ng-template #loadingTasksTemplate>\n <div class=\"loading-container\">\n <cds-loading size=\"sm\"></cds-loading>\n </div>\n</ng-template>\n", styles: [".task-list{width:100%;background-color:var(--cds-layer);padding:24px;display:flex;flex-direction:column;gap:16px}.task-list__title{font-size:24px;line-height:24px;font-weight:600}.task-list__subtitle{font-size:16px;line-height:16px;font-weight:600}.task-list__tasks-container,.task{display:flex;flex-direction:column;gap:8px}.task__header{display:flex;justify-content:space-between;align-items:center;gap:8px}.task__header .cds--tag{white-space:pre}.task__title{width:100%}.task__title,.task__description{font-size:14px;font-style:normal;font-weight:600;line-height:20px;letter-spacing:.16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.task__description{font-weight:400}.loading-container{width:100%;display:flex;justify-content:center}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
147
- }], ctorParameters: () => [{ type: i1.DocumentService }, { type: i2.ProcessService }, { type: i3.ActivatedRoute }, { type: i4.PermissionService }, { type: i5.UserProviderService }, { type: i6.DossierDetailLayoutService }], propDecorators: { _taskDetailModal: [{
151
+ ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"task-list\"\n *ngIf=\"{loadingTasks: loadingTasks$ | async, tasks: processInstanceTasks$ | async} as obs\"\n>\n @if (obs.loadingTasks && !obs.tasks) {\n <ng-container *ngTemplateOutlet=\"loadingTasksTemplate\"></ng-container>\n } @else if (obs.tasks?.myTasks?.length === 0 && obs.tasks?.otherTasks?.length === 0) {\n <ng-container *ngTemplateOutlet=\"noTasksTemplate\"></ng-container>\n } @else {\n <h2 class=\"task-list__title\">{{ 'summary.tasks' | translate }}</h2>\n\n <div class=\"task-list__tasks-container\" cdsLayer=\"1\">\n <h3 class=\"task-list__subtitle\">{{ 'summary.myTasks' | translate }}</h3>\n\n @if (obs.tasks?.myTasks.length === 0) {\n {{ 'summary.noResultsMyTasks' | translate }}\n } @else {\n @for (taskWithProcessLink of obs.tasks?.myTasks; track taskWithProcessLink.task.id) {\n <ng-container\n *ngTemplateOutlet=\"taskTemplate; context: {taskWithProcessLink: taskWithProcessLink}\"\n ></ng-container>\n }\n }\n </div>\n\n <div class=\"task-list__tasks-container\" cdsLayer=\"1\">\n <h3 class=\"task-list__subtitle\">{{ 'summary.otherTasks' | translate }}</h3>\n\n @if (obs.tasks?.otherTasks.length === 0) {\n {{ 'summary.noResultsOtherTasks' | translate }}\n } @else {\n @for (taskWithProcessLink of obs.tasks?.otherTasks; track taskWithProcessLink.task.id) {\n <ng-container\n *ngTemplateOutlet=\"taskTemplate; context: {taskWithProcessLink: taskWithProcessLink}\"\n ></ng-container>\n }\n }\n </div>\n }\n\n <valtimo-task-detail-modal\n #taskDetail\n [modalSize]=\"formSize$ | async\"\n (formSubmit)=\"onFormSubmit()\"\n (assignmentOfTaskChanged)=\"refresh()\"\n ></valtimo-task-detail-modal>\n</div>\n\n<ng-template #taskTemplate let-taskWithProcessLink=\"taskWithProcessLink\">\n <cds-clickable-tile [href]=\"null\" (click)=\"rowTaskClick(taskWithProcessLink)\">\n <div class=\"task\">\n <div class=\"task__header\">\n <span class=\"task__title\">{{ taskWithProcessLink.task.name }}</span>\n\n <cds-tag\n class=\"cds-tag--no-margin\"\n [type]=\"taskWithProcessLink.task.isLocked ? 'cool-gray' : 'green'\"\n >\n @if (!taskWithProcessLink.task.isLocked) {\n {{ 'summary.taskOpen' | translate }}\n } @else {\n <i class=\"icon mdi mdi-lock\"></i>\n }\n </cds-tag>\n </div>\n\n <div class=\"task__description\">\n {{ 'summary.taskCreated' | translate }} {{ taskWithProcessLink.task.created }}\n </div>\n\n <div class=\"task__subtitles\">\n @for (\n subtitle of taskWithProcessLink?.processLinkActivityResult?.properties?.subtitles || [];\n track subtitle\n ) {\n <p class=\"task__subtitle\">{{ subtitle }}</p>\n }\n </div>\n </div>\n </cds-clickable-tile>\n</ng-template>\n\n<ng-template #noTasksTemplate>\n <valtimo-no-results\n [alwaysRenderVertically]=\"true\"\n illustration=\"valtimo-layout/img/emptystate-success.svg\"\n [description]=\"'summary.userTasksDoneState' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n</ng-template>\n\n<ng-template #loadingTasksTemplate>\n <div class=\"loading-container\">\n <cds-loading size=\"sm\"></cds-loading>\n </div>\n</ng-template>\n", styles: [".task-list{width:100%;background-color:var(--cds-layer);padding:24px;display:flex;flex-direction:column;gap:16px}.task-list__title{font-size:24px;line-height:24px;font-weight:600}.task-list__subtitle{font-size:16px;line-height:16px;font-weight:600}.task-list__tasks-container,.task{display:flex;flex-direction:column;gap:8px}.task__header{display:flex;justify-content:space-between;align-items:center;gap:8px}.task__header .cds--tag{margin:0;white-space:pre}.task__title{width:100%;font-size:14px;font-weight:600;line-height:20px;letter-spacing:.16px;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none}.task__subtitle{font-size:12px;font-weight:400;line-height:16px;letter-spacing:.32px;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.task__subtitles{display:flex;flex-direction:column;gap:4px}.task__description{font-size:12px;font-weight:400;line-height:16px;letter-spacing:.32px;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none}.loading-container{width:100%;display:flex;justify-content:center}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
152
+ }], ctorParameters: () => [{ type: i1.DocumentService }, { type: i2.ProcessService }, { type: i3.ActivatedRoute }, { type: i4.PermissionService }, { type: i5.UserProviderService }, { type: i6.DossierDetailLayoutService }, { type: i7.ProcessLinkService }], propDecorators: { _taskDetailModal: [{
148
153
  type: ViewChild,
149
154
  args: ['taskDetail']
150
- }], openInTaskModal: [{
155
+ }], openTaskAndProcessLinkInModal: [{
151
156
  type: Input
152
157
  }], taskClickEvent: [{
153
158
  type: Output
154
159
  }], formSubmitEvent: [{
155
160
  type: Output
156
161
  }] } });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1kZXRhaWwtdGFzay1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL2NvbXBvbmVudHMvZG9zc2llci1kZXRhaWwtdGFzay1saXN0L2Rvc3NpZXItZGV0YWlsLXRhc2stbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItZGV0YWlsLXRhc2stbGlzdC9kb3NzaWVyLWRldGFpbC10YXNrLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxZQUFZLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixNQUFNLEVBQ04sR0FBRyxFQUVILEVBQUUsRUFDRixNQUFNLEVBQ04sU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RixPQUFPLEVBQ0wsd0JBQXdCLEVBRXhCLCtCQUErQixFQUUvQixVQUFVLEdBQ1gsTUFB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QSx3NkNEdENJLFlBQVksOFZBQ1osZ0JBQWdCLDhCQUNoQixlQUFlLDJGQUNmLFlBQVksOEJBQ1osYUFBYSwrSkFDYixVQUFVLDJNQUNWLFdBQVcsbU9BQ1gsV0FBVyx5S0FDWCxTQUFTLG9JQUNULGdCQUFnQjs7NEZBR1AsOEJBQThCO2tCQWxCMUMsU0FBUzsrQkFDRSxrQ0FBa0MsY0FHaEMsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixVQUFVO3dCQUNWLFdBQVc7d0JBQ1gsV0FBVzt3QkFDWCxTQUFTO3dCQUNULGdCQUFnQjtxQkFDakI7eVBBR3lDLGdCQUFnQjtzQkFBekQsU0FBUzt1QkFBQyxZQUFZO2dCQUVILGVBQWU7c0JBQWxDLEtBQUs7Z0JBSW9CLGNBQWM7c0JBQXZDLE1BQU07Z0JBQ21CLGVBQWU7c0JBQXhDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge05nYlRvb2x0aXBNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q2FyYm9uTGlzdE1vZHVsZSwgV2lkZ2V0TW9kdWxlfSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICByZXBlYXQsXG4gIHN3aXRjaE1hcCxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7TGF5ZXJNb2R1bGUsIExvYWRpbmdNb2R1bGUsIFRhZ01vZHVsZSwgVGlsZXNNb2R1bGV9IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtcbiAgQ0FOX1ZJRVdfVEFTS19QRVJNSVNTSU9OLFxuICBUYXNrLFxuICBUQVNLX0RFVEFJTF9QRVJNSVNTSU9OX1JFU09VUkNFLFxuICBUYXNrRGV0YWlsTW9kYWxDb21wb25lbnQsXG4gIFRhc2tNb2R1bGUsXG59IGZyb20gJ0B2YWx0aW1vL3Rhc2snO1xuaW1wb3J0IHtQcm9jZXNzSW5zdGFuY2VUYXNrLCBQcm9jZXNzU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vcHJvY2Vzcyc7XG5pbXBvcnQge1VzZXJJZGVudGl0eX0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtQZXJtaXNzaW9uU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vYWNjZXNzLWNvbnRyb2wnO1xuaW1wb3J0IHtVc2VyUHJvdmlkZXJTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9zZWN1cml0eSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge0Rvc3NpZXJEZXRhaWxMYXlvdXRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbm1vbWVudC5sb2NhbGUobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmdLZXknKSB8fCAnJyk7XG5tb21lbnQuZGVmYXVsdEZvcm1hdCA9ICdERCBNTU0gWVlZWSBISDptbSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFzay1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvc3NpZXItZGV0YWlsLXRhc2stbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Rvc3NpZXItZGV0YWlsLXRhc2stbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE5nYlRvb2x0aXBNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIFdpZGdldE1vZHVsZSxcbiAgICBMb2FkaW5nTW9kdWxlLFxuICAgIFRhc2tNb2R1bGUsXG4gICAgVGlsZXNNb2R1bGUsXG4gICAgTGF5ZXJNb2R1bGUsXG4gICAgVGFnTW9kdWxlLFxuICAgIENhcmJvbkxpc3RNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERvc3NpZXJEZXRhaWxUYXNrTGlzdENvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ3Rhc2tEZXRhaWwnKSBwcml2YXRlIHJlYWRvbmx5IF90YXNrRGV0YWlsTW9kYWw6IFRhc2tEZXRhaWxNb2RhbENvbXBvbmVudDtcblxuICBASW5wdXQoKSBwdWJsaWMgc2V0IG9wZW5JblRhc2tNb2RhbCh2YWx1ZTogVGFzaykge1xuICAgIGlmICh2YWx1ZSkgdGhpcy5fdGFza0RldGFpbE1vZGFsLm9wZW5UYXNrRGV0YWlscyh2YWx1ZSk7XG4gIH1cblxuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IHRhc2tDbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9jZXNzSW5zdGFuY2VUYXNrPigpO1xuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGZvcm1TdWJtaXRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZ1Rhc2tzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcmVmcmVzaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RvY3VtZW50SWQkID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcz8uZG9jdW1lbnRJZCksXG4gICAgZmlsdGVyKGRvY3VtZW50SWQgPT4gISFkb2N1bWVudElkKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBwcm9jZXNzSW5zdGFuY2VUYXNrcyQ6IE9ic2VydmFibGU8e1xuICAgIG15VGFza3M6IFByb2Nlc3NJbnN0YW5jZVRhc2tbXTtcbiAgICBvdGhlclRhc2tzOiBQcm9jZXNzSW5zdGFuY2VUYXNrW107XG4gIH0+ID0gdGhpcy5fcmVmcmVzaCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5fZG9jdW1lbnRJZCQpLFxuICAgIHN3aXRjaE1hcChkb2N1bWVudElkID0+XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgICAuZmluZFByb2Nlc3NEb2N1bWVudEluc3RhbmNlcyhkb2N1bWVudElkKVxuICAgICAgICAucGlwZShyZXBlYXQoe2NvdW50OiA1LCBkZWxheTogMTUwMH0pKVxuICAgICksXG4gICAgc3dpdGNoTWFwKHByb2Nlc3NEb2N1bWVudEluc3RhbmNlcyA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIC4uLnByb2Nlc3NEb2N1bWVudEluc3RhbmNlcy5tYXAocHJvY2Vzc0RvY3VtZW50SW5zdGFuY2UgPT5cbiAgICAgICAgICB0aGlzLnByb2Nlc3NTZXJ2aWNlLmdldFByb2Nlc3NJbnN0YW5jZVRhc2tzKHByb2Nlc3NEb2N1bWVudEluc3RhbmNlLmlkLnByb2Nlc3NJbnN0YW5jZUlkKVxuICAgICAgICApLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcChyZXMgPT4gcmVzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBbLi4uYWNjLCAuLi5jdXJyXSwgW10pKSxcbiAgICBzd2l0Y2hNYXAodGFza3MgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBvZih0YXNrcyksXG4gICAgICAgIC4uLih0YXNrcyB8fCBbXSkubWFwKHRhc2sgPT5cbiAgICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLnJlcXVlc3RQZXJtaXNzaW9uKENBTl9WSUVXX1RBU0tfUEVSTUlTU0lPTiwge1xuICAgICAgICAgICAgcmVzb3VyY2U6IFRBU0tfREVUQUlMX1BFUk1JU1NJT05fUkVTT1VSQ0UudGFzayxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHRhc2suaWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgIF0pXG4gICAgKSxcbiAgICBtYXAocmVzID0+IHtcbiAgICAgIGNvbnN0IHRhc2tzID0gcmVzWzBdIHx8IFtdO1xuICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSByZXM/LmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ICE9PSAwKSBhcyBib29sZWFuW107XG4gICAgICBjb25zdCBtYXBwZWRUYXNrcyA9IHRoaXMubWFwVGFza3ModGFza3MsIHBlcm1pc3Npb25zKTtcbiAgICAgIGNvbnN0IHVuaXF1ZVRhc2tzID0gdGhpcy5nZXRVbmlxdWVUYXNrcyhtYXBwZWRUYXNrcyk7XG5cbiAgICAgIHJldHVybiB0aGlzLmdldFNvcnRlZFRhc2tzKHVuaXF1ZVRhc2tzKTtcbiAgICB9KSxcbiAgICBtYXAodGFza3MgPT4gdGhpcy5zb3J0VGFza3NPblBlcm1pc3Npb24odGFza3MpKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nVGFza3MkLm5leHQoZmFsc2UpKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBmb3JtU2l6ZSQgPSB0aGlzLmRvc3NpZXJEZXRhaWxMYXlvdXRTZXJ2aWNlLmZvcm1EaXNwbGF5U2l6ZSQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NTZXJ2aWNlOiBQcm9jZXNzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBlcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJQcm92aWRlclNlcnZpY2U6IFVzZXJQcm92aWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb3NzaWVyRGV0YWlsTGF5b3V0U2VydmljZTogRG9zc2llckRldGFpbExheW91dFNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyByb3dUYXNrQ2xpY2sodGFzazogUHJvY2Vzc0luc3RhbmNlVGFzayk6IHZvaWQge1xuICAgIGlmICh0YXNrLmlzTG9ja2VkKSByZXR1cm47XG5cbiAgICB0aGlzLnRhc2tDbGlja0V2ZW50LmVtaXQodGFzayk7XG4gIH1cblxuICBwdWJsaWMgb25Gb3JtU3VibWl0KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybVN1Ym1pdEV2ZW50LmVtaXQoKTtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIHB1YmxpYyByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMuX3JlZnJlc2gkLm5leHQobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIG1hcFRhc2tzKHRhc2tzOiBQcm9jZXNzSW5zdGFuY2VUYXNrW10sIHBlcm1pc3Npb25zOiBib29sZWFuW10pOiBQcm9jZXNzSW5zdGFuY2VUYXNrW10ge1xuICAgIHJldHVybiB0YXNrcy5tYXAoKHRhc2ssIGluZGV4KSA9PiAoe1xuICAgICAgLi4udGFzayxcbiAgICAgIGNyZWF0ZWRVbml4OiBtb21lbnQodGFzay5jcmVhdGVkKS51bml4KCksXG4gICAgICBjcmVhdGVkOiBtb21lbnQodGFzay5jcmVhdGVkKS5mb3JtYXQoJ0REIE1NTSBZWVlZIEhIOm1tJyksXG4gICAgICAuLi4odGFzay5kdWUgJiYge2R1ZVVuaXg6IG1vbWVudCh0YXNrLmR1ZSkudW5peCgpfSksXG4gICAgICBpc0xvY2tlZDogIXBlcm1pc3Npb25zW2luZGV4XSxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldFVuaXF1ZVRhc2tzKHRhc2tzOiBQcm9jZXNzSW5zdGFuY2VUYXNrW10pOiBQcm9jZXNzSW5zdGFuY2VUYXNrW10ge1xuICAgIHJldHVybiB0YXNrcy5yZWR1Y2UoKGFjYywgY3VycikgPT4ge1xuICAgICAgaWYgKCFhY2MuZmluZCh0YXNrID0+IHRhc2suaWQgPT09IGN1cnIuaWQpKSB7XG4gICAgICAgIHJldHVybiBbLi4uYWNjLCBjdXJyXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10gYXMgUHJvY2Vzc0luc3RhbmNlVGFza1tdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U29ydGVkVGFza3ModGFza3M6IFByb2Nlc3NJbnN0YW5jZVRhc2tbXSk6IFByb2Nlc3NJbnN0YW5jZVRhc2tbXSB7XG4gICAgcmV0dXJuIHRhc2tzLnNvcnQoKHQxLCB0MikgPT4ge1xuICAgICAgLy8gaGlnaCBwcmlvcml0eSB0YXNrcyBvbiB0b3BcbiAgICAgIGlmICh0Mi5wcmlvcml0eSAhPT0gdDEucHJpb3JpdHkpIHtcbiAgICAgICAgcmV0dXJuIHQyLnByaW9yaXR5IC0gdDEucHJpb3JpdHk7XG4gICAgICB9XG5cbiAgICAgIC8vIHRhc2sgd2l0aCBhcHByb2FjaGluZyBkdWUgZGF0ZSBvbiB0b3BcbiAgICAgIGNvbnN0IGR1ZTEgPSB0MT8uZHVlVW5peCB8fCBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgY29uc3QgZHVlMiA9IHQyPy5kdWVVbml4IHx8IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICBpZiAoZHVlMSAhPT0gZHVlMikge1xuICAgICAgICByZXR1cm4gZHVlMSAtIGR1ZTI7XG4gICAgICB9XG5cbiAgICAgIC8vIG5ldyB0YXNrIG9uIHRvcFxuICAgICAgY29uc3QgY3JlYXRlZENvbXBhcmUgPSB0Mi5jcmVhdGVkVW5peCAvIDUwMDAgLSB0MS5jcmVhdGVkVW5peCAvIDUwMDA7XG4gICAgICBpZiAoY3JlYXRlZENvbXBhcmUgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWRDb21wYXJlO1xuICAgICAgfVxuXG4gICAgICAvLyB0YXNrIHdpdGggYXBwcm94aW1hdGVseSB0aGUgc2FtZSBhZ2UsIGFyZSBzb3J0ZWQgYnkgbmFtZVxuICAgICAgcmV0dXJuIHQxLm5hbWUubG9jYWxlQ29tcGFyZSh0Mi5uYW1lKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydFRhc2tzT25QZXJtaXNzaW9uKHRhc2tzOiBQcm9jZXNzSW5zdGFuY2VUYXNrW10pOiB7XG4gICAgbXlUYXNrczogUHJvY2Vzc0luc3RhbmNlVGFza1tdO1xuICAgIG90aGVyVGFza3M6IFByb2Nlc3NJbnN0YW5jZVRhc2tbXTtcbiAgfSB7XG4gICAgcmV0dXJuIHRhc2tzLnJlZHVjZShcbiAgICAgIChhY2MsIGN1cnIpID0+XG4gICAgICAgICFjdXJyLmlzTG9ja2VkXG4gICAgICAgICAgPyB7Li4uYWNjLCBteVRhc2tzOiBbLi4uYWNjLm15VGFza3MsIGN1cnJdfVxuICAgICAgICAgIDogey4uLmFjYywgb3RoZXJUYXNrczogWy4uLmFjYy5vdGhlclRhc2tzLCBjdXJyXX0sXG4gICAgICB7bXlUYXNrczogW10gYXMgUHJvY2Vzc0luc3RhbmNlVGFza1tdLCBvdGhlclRhc2tzOiBbXSBhcyBQcm9jZXNzSW5zdGFuY2VUYXNrW119XG4gICAgKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2XG4gIGNsYXNzPVwidGFzay1saXN0XCJcbiAgKm5nSWY9XCJ7bG9hZGluZ1Rhc2tzOiBsb2FkaW5nVGFza3MkIHwgYXN5bmMsIHRhc2tzOiBwcm9jZXNzSW5zdGFuY2VUYXNrcyQgfCBhc3luY30gYXMgb2JzXCJcbj5cbiAgQGlmIChvYnMubG9hZGluZ1Rhc2tzICYmICFvYnMudGFza3MpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1Rhc2tzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgfSBAZWxzZSBpZiAob2JzLnRhc2tzPy5teVRhc2tzPy5sZW5ndGggPT09IDAgJiYgb2JzLnRhc2tzPy5vdGhlclRhc2tzPy5sZW5ndGggPT09IDApIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9UYXNrc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIH0gQGVsc2Uge1xuICAgIDxoMiBjbGFzcz1cInRhc2stbGlzdF9fdGl0bGVcIj57eyAnc3VtbWFyeS50YXNrcycgfCB0cmFuc2xhdGUgfX08L2gyPlxuXG4gICAgPGRpdiBjbGFzcz1cInRhc2stbGlzdF9fdGFza3MtY29udGFpbmVyXCIgY2RzTGF5ZXI9XCIxXCI+XG4gICAgICA8aDMgY2xhc3M9XCJ0YXNrLWxpc3RfX3N1YnRpdGxlXCI+e3sgJ3N1bW1hcnkubXlUYXNrcycgfCB0cmFuc2xhdGUgfX08L2gzPlxuXG4gICAgICBAaWYgKG9icy50YXNrcz8ubXlUYXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAge3sgJ3N1bW1hcnkubm9SZXN1bHRzTXlUYXNrcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAZm9yICh0YXNrIG9mIG9icy50YXNrcz8ubXlUYXNrczsgdHJhY2sgdGFzay5pZCkge1xuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YXNrVGVtcGxhdGU7IGNvbnRleHQ6IHt0YXNrOiB0YXNrfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGFzay1saXN0X190YXNrcy1jb250YWluZXJcIiBjZHNMYXllcj1cIjFcIj5cbiAgICAgIDxoMyBjbGFzcz1cInRhc2stbGlzdF9fc3VidGl0bGVcIj57eyAnc3VtbWFyeS5vdGhlclRhc2tzJyB8IHRyYW5zbGF0ZSB9fTwvaDM+XG5cbiAgICAgIEBpZiAob2JzLnRhc2tzPy5vdGhlclRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB7eyAnc3VtbWFyeS5ub1Jlc3VsdHNPdGhlclRhc2tzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEBmb3IgKHRhc2sgb2Ygb2JzLnRhc2tzPy5vdGhlclRhc2tzOyB0cmFjayB0YXNrLmlkKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhc2tUZW1wbGF0ZTsgY29udGV4dDoge3Rhc2s6IHRhc2t9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDx2YWx0aW1vLXRhc2stZGV0YWlsLW1vZGFsXG4gICAgI3Rhc2tEZXRhaWxcbiAgICBbbW9kYWxTaXplXT1cImZvcm1TaXplJCB8IGFzeW5jXCJcbiAgICAoZm9ybVN1Ym1pdCk9XCJvbkZvcm1TdWJtaXQoKVwiXG4gICAgKGFzc2lnbm1lbnRPZlRhc2tDaGFuZ2VkKT1cInJlZnJlc2goKVwiXG4gID48L3ZhbHRpbW8tdGFzay1kZXRhaWwtbW9kYWw+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0YXNrVGVtcGxhdGUgbGV0LXRhc2s9XCJ0YXNrXCI+XG4gIDxjZHMtY2xpY2thYmxlLXRpbGUgW2hyZWZdPVwibnVsbFwiIChjbGljayk9XCJyb3dUYXNrQ2xpY2sodGFzaylcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGFza1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInRhc2tfX2hlYWRlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRhc2tfX3RpdGxlXCI+e3sgdGFzay5uYW1lIH19PC9zcGFuPlxuXG4gICAgICAgIDxjZHMtdGFnIGNsYXNzPVwiY2RzLXRhZy0tbm8tbWFyZ2luXCIgW3R5cGVdPVwidGFzay5pc0xvY2tlZCA/ICdjb29sLWdyYXknIDogJ2dyZWVuJ1wiPlxuICAgICAgICAgIEBpZiAoIXRhc2suaXNMb2NrZWQpIHtcbiAgICAgICAgICAgIHt7ICdzdW1tYXJ5LnRhc2tPcGVuJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uIG1kaSBtZGktbG9ja1wiPjwvaT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvY2RzLXRhZz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidGFza19fZGVzY3JpcHRpb25cIj5cbiAgICAgICAge3sgJ3N1bW1hcnkudGFza0NyZWF0ZWQnIHwgdHJhbnNsYXRlIH19IHt7IHRhc2suY3JlYXRlZCB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvY2RzLWNsaWNrYWJsZS10aWxlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub1Rhc2tzVGVtcGxhdGU+XG4gIDx2YWx0aW1vLW5vLXJlc3VsdHNcbiAgICBbYWx3YXlzUmVuZGVyVmVydGljYWxseV09XCJ0cnVlXCJcbiAgICBpbGx1c3RyYXRpb249XCJ2YWx0aW1vLWxheW91dC9pbWcvZW1wdHlzdGF0ZS1zdWNjZXNzLnN2Z1wiXG4gICAgW2Rlc2NyaXB0aW9uXT1cIidzdW1tYXJ5LnVzZXJUYXNrc0RvbmVTdGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgIFtzbWFsbFBhZGRpbmddPVwidHJ1ZVwiXG4gID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ1Rhc2tzVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJsb2FkaW5nLWNvbnRhaW5lclwiPlxuICAgIDxjZHMtbG9hZGluZyBzaXplPVwic21cIj48L2Nkcy1sb2FkaW5nPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1kZXRhaWwtdGFzay1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL2NvbXBvbmVudHMvZG9zc2llci1kZXRhaWwtdGFzay1saXN0L2Rvc3NpZXItZGV0YWlsLXRhc2stbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItZGV0YWlsLXRhc2stbGlzdC9kb3NzaWVyLWRldGFpbC10YXNrLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxZQUFZLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixNQUFNLEVBQ04sR0FBRyxFQUVILEVBQUUsRUFDRixNQUFNLEVBQ04sU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLCtCQUErQixFQUUvQixVQUFVLEdBQ1gsTUFB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QUMsTUFBTSxDQUNqQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUNaLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQ2pCLENBQUMsQ0FBQyxFQUFDLEdBQUcsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBQztZQUMzQyxDQUFDLENBQUMsRUFBQyxHQUFHLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUMsRUFDckQsRUFBQyxPQUFPLEVBQUUsRUFBMkIsRUFBRSxVQUFVLEVBQUUsRUFBMkIsRUFBQyxDQUNoRixDQUFDO0lBQ0osQ0FBQzsrR0EvSlUsOEJBQThCO21HQUE5Qiw4QkFBOEIsMldDckUzQywrK0hBZ0hBLHF6RER2REksWUFBWSw4VkFDWixnQkFBZ0IsOEJBQ2hCLGVBQWUsMkZBQ2YsWUFBWSw4QkFDWixhQUFhLGdLQUNiLFVBQVUsMk1BQ1YsV0FBVyxvT0FDWCxXQUFXLDBLQUNYLFNBQVMscUlBQ1QsZ0JBQWdCOzs0RkFHUCw4QkFBOEI7a0JBbEIxQyxTQUFTOytCQUNFLGtDQUFrQyxjQUdoQyxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixhQUFhO3dCQUNiLFVBQVU7d0JBQ1YsV0FBVzt3QkFDWCxXQUFXO3dCQUNYLFNBQVM7d0JBQ1QsZ0JBQWdCO3FCQUNqQjswUkFHeUMsZ0JBQWdCO3NCQUF6RCxTQUFTO3VCQUFDLFlBQVk7Z0JBRUgsNkJBQTZCO3NCQUFoRCxLQUFLO2dCQUlvQixjQUFjO3NCQUF2QyxNQUFNO2dCQUNtQixlQUFlO3NCQUF4QyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtOZ2JUb29sdGlwTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NhcmJvbkxpc3RNb2R1bGUsIFdpZGdldE1vZHVsZX0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgcmVwZWF0LFxuICBzd2l0Y2hNYXAsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0xheWVyTW9kdWxlLCBMb2FkaW5nTW9kdWxlLCBUYWdNb2R1bGUsIFRpbGVzTW9kdWxlfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7XG4gIENBTl9WSUVXX1RBU0tfUEVSTUlTU0lPTixcbiAgVEFTS19ERVRBSUxfUEVSTUlTU0lPTl9SRVNPVVJDRSxcbiAgVGFza0RldGFpbE1vZGFsQ29tcG9uZW50LFxuICBUYXNrTW9kdWxlLFxufSBmcm9tICdAdmFsdGltby90YXNrJztcbmltcG9ydCB7UHJvY2Vzc1NlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3Byb2Nlc3MnO1xuaW1wb3J0IHtEb2N1bWVudFNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1Blcm1pc3Npb25TZXJ2aWNlfSBmcm9tICdAdmFsdGltby9hY2Nlc3MtY29udHJvbCc7XG5pbXBvcnQge1VzZXJQcm92aWRlclNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3NlY3VyaXR5JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7RG9zc2llckRldGFpbExheW91dFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7UHJvY2Vzc0xpbmtTZXJ2aWNlLCBUYXNrV2l0aFByb2Nlc3NMaW5rfSBmcm9tICdAdmFsdGltby9wcm9jZXNzLWxpbmsnO1xuXG5tb21lbnQubG9jYWxlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5nS2V5JykgfHwgJycpO1xubW9tZW50LmRlZmF1bHRGb3JtYXQgPSAnREQgTU1NIFlZWVkgSEg6bW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvc3NpZXItZGV0YWlsLXRhc2stbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3NzaWVyLWRldGFpbC10YXNrLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb3NzaWVyLWRldGFpbC10YXNrLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBOZ2JUb29sdGlwTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBXaWRnZXRNb2R1bGUsXG4gICAgTG9hZGluZ01vZHVsZSxcbiAgICBUYXNrTW9kdWxlLFxuICAgIFRpbGVzTW9kdWxlLFxuICAgIExheWVyTW9kdWxlLFxuICAgIFRhZ01vZHVsZSxcbiAgICBDYXJib25MaXN0TW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyRGV0YWlsVGFza0xpc3RDb21wb25lbnQge1xuICBAVmlld0NoaWxkKCd0YXNrRGV0YWlsJykgcHJpdmF0ZSByZWFkb25seSBfdGFza0RldGFpbE1vZGFsOiBUYXNrRGV0YWlsTW9kYWxDb21wb25lbnQ7XG5cbiAgQElucHV0KCkgcHVibGljIHNldCBvcGVuVGFza0FuZFByb2Nlc3NMaW5rSW5Nb2RhbCh2YWx1ZTogVGFza1dpdGhQcm9jZXNzTGluaykge1xuICAgIGlmICh2YWx1ZSkgdGhpcy5fdGFza0RldGFpbE1vZGFsLm9wZW5UYXNrQW5kUHJvY2Vzc0xpbmtEZXRhaWxzKHZhbHVlKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgdGFza0NsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFRhc2tXaXRoUHJvY2Vzc0xpbms+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgZm9ybVN1Ym1pdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBsb2FkaW5nVGFza3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9yZWZyZXNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnRJZCQgPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKFxuICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zPy5kb2N1bWVudElkKSxcbiAgICBmaWx0ZXIoZG9jdW1lbnRJZCA9PiAhIWRvY3VtZW50SWQpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHByb2Nlc3NJbnN0YW5jZVRhc2tzJDogT2JzZXJ2YWJsZTx7XG4gICAgbXlUYXNrczogVGFza1dpdGhQcm9jZXNzTGlua1tdO1xuICAgIG90aGVyVGFza3M6IFRhc2tXaXRoUHJvY2Vzc0xpbmtbXTtcbiAgfT4gPSB0aGlzLl9yZWZyZXNoJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9kb2N1bWVudElkJCksXG4gICAgc3dpdGNoTWFwKGRvY3VtZW50SWQgPT5cbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAgIC5maW5kUHJvY2Vzc0RvY3VtZW50SW5zdGFuY2VzKGRvY3VtZW50SWQpXG4gICAgICAgIC5waXBlKHJlcGVhdCh7Y291bnQ6IDUsIGRlbGF5OiAxNTAwfSkpXG4gICAgKSxcbiAgICBzd2l0Y2hNYXAocHJvY2Vzc0RvY3VtZW50SW5zdGFuY2VzID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgLi4ucHJvY2Vzc0RvY3VtZW50SW5zdGFuY2VzLm1hcChwcm9jZXNzRG9jdW1lbnRJbnN0YW5jZSA9PlxuICAgICAgICAgIHRoaXMucHJvY2Vzc0xpbmtTZXJ2aWNlLmdldFRhc2tzV2l0aFByb2Nlc3NMaW5rcyhcbiAgICAgICAgICAgIHByb2Nlc3NEb2N1bWVudEluc3RhbmNlLmlkLnByb2Nlc3NJbnN0YW5jZUlkXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcChyZXMgPT4gcmVzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBbLi4uYWNjLCAuLi5jdXJyXSwgW10pKSxcbiAgICBzd2l0Y2hNYXAodGFza3NXaXRoUHJvY2Vzc0xpbmtzID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgb2YodGFza3NXaXRoUHJvY2Vzc0xpbmtzKSxcbiAgICAgICAgLi4uKHRhc2tzV2l0aFByb2Nlc3NMaW5rcyB8fCBbXSkubWFwKHRhc2tXaXRoUHJvY2Vzc0xpbmsgPT5cbiAgICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLnJlcXVlc3RQZXJtaXNzaW9uKENBTl9WSUVXX1RBU0tfUEVSTUlTU0lPTiwge1xuICAgICAgICAgICAgcmVzb3VyY2U6IFRBU0tfREVUQUlMX1BFUk1JU1NJT05fUkVTT1VSQ0UudGFzayxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHRhc2tXaXRoUHJvY2Vzc0xpbmsudGFzay5pZCxcbiAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcChyZXMgPT4ge1xuICAgICAgY29uc3QgdGFza3NXaXRoUHJvY2Vzc0xpbmtzID0gcmVzWzBdIHx8IFtdO1xuICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSByZXM/LmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ICE9PSAwKSBhcyBib29sZWFuW107XG4gICAgICBjb25zdCBtYXBwZWRUYXNrc1dpdGhQcm9jZXNzTGlua3MgPSB0aGlzLm1hcFRhc2tzV2l0aFByb2Nlc3NMaW5rcyhcbiAgICAgICAgdGFza3NXaXRoUHJvY2Vzc0xpbmtzLFxuICAgICAgICBwZXJtaXNzaW9uc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHVuaXF1ZVRhc2tzV2l0aFByb2Nlc3NMaW5rcyA9IHRoaXMuZ2V0VW5pcXVlVGFza3NXaXRoUHJvY2Vzc0xpbmtzKFxuICAgICAgICBtYXBwZWRUYXNrc1dpdGhQcm9jZXNzTGlua3NcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB0aGlzLmdldFNvcnRlZFRhc2tzV2l0aFByb2Nlc3NMaW5rcyh1bmlxdWVUYXNrc1dpdGhQcm9jZXNzTGlua3MpO1xuICAgIH0pLFxuICAgIG1hcCh0YXNrc1dpdGhQcm9jZXNzTGlua3MgPT4gdGhpcy5zb3J0VGFza3NXaXRoUHJvY2Vzc0xpbmtzT25QZXJtaXNzaW9uKHRhc2tzV2l0aFByb2Nlc3NMaW5rcykpLFxuICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmdUYXNrcyQubmV4dChmYWxzZSkpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZvcm1TaXplJCA9IHRoaXMuZG9zc2llckRldGFpbExheW91dFNlcnZpY2UuZm9ybURpc3BsYXlTaXplJDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc1NlcnZpY2U6IFByb2Nlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlclByb3ZpZGVyU2VydmljZTogVXNlclByb3ZpZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvc3NpZXJEZXRhaWxMYXlvdXRTZXJ2aWNlOiBEb3NzaWVyRGV0YWlsTGF5b3V0U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NMaW5rU2VydmljZTogUHJvY2Vzc0xpbmtTZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgcm93VGFza0NsaWNrKHRhc1dpdGhQcm9jZXNzTGlua2s6IFRhc2tXaXRoUHJvY2Vzc0xpbmspOiB2b2lkIHtcbiAgICBpZiAodGFzV2l0aFByb2Nlc3NMaW5ray50YXNrLmlzTG9ja2VkKSByZXR1cm47XG5cbiAgICB0aGlzLnRhc2tDbGlja0V2ZW50LmVtaXQodGFzV2l0aFByb2Nlc3NMaW5rayk7XG4gIH1cblxuICBwdWJsaWMgb25Gb3JtU3VibWl0KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybVN1Ym1pdEV2ZW50LmVtaXQoKTtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIHB1YmxpYyByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMuX3JlZnJlc2gkLm5leHQobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIG1hcFRhc2tzV2l0aFByb2Nlc3NMaW5rcyhcbiAgICB0YXNrc1dpdGhQcm9jZXNzTGlua3M6IFRhc2tXaXRoUHJvY2Vzc0xpbmtbXSxcbiAgICBwZXJtaXNzaW9uczogYm9vbGVhbltdXG4gICk6IFRhc2tXaXRoUHJvY2Vzc0xpbmtbXSB7XG4gICAgcmV0dXJuIHRhc2tzV2l0aFByb2Nlc3NMaW5rcy5tYXAoKHRhc2tXaXRoUHJvY2Vzc0xpbmssIGluZGV4KSA9PiAoe1xuICAgICAgLi4udGFza1dpdGhQcm9jZXNzTGluayxcbiAgICAgIHRhc2s6IHtcbiAgICAgICAgLi4udGFza1dpdGhQcm9jZXNzTGluay50YXNrLFxuICAgICAgICBjcmVhdGVkVW5peDogbW9tZW50KHRhc2tXaXRoUHJvY2Vzc0xpbmsudGFzay5jcmVhdGVkKS51bml4KCksXG4gICAgICAgIGNyZWF0ZWQ6IG1vbWVudCh0YXNrV2l0aFByb2Nlc3NMaW5rLnRhc2suY3JlYXRlZCkuZm9ybWF0KCdERCBNTU0gWVlZWSBISDptbScpLFxuICAgICAgICAuLi4odGFza1dpdGhQcm9jZXNzTGluay50YXNrLmR1ZSAmJiB7ZHVlVW5peDogbW9tZW50KHRhc2tXaXRoUHJvY2Vzc0xpbmsudGFzay5kdWUpLnVuaXgoKX0pLFxuICAgICAgICBpc0xvY2tlZDogIXBlcm1pc3Npb25zW2luZGV4XSxcbiAgICAgIH0sXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVbmlxdWVUYXNrc1dpdGhQcm9jZXNzTGlua3MoXG4gICAgdGFza3NXaXRoUHJvY2Vzc0xpbmtzOiBUYXNrV2l0aFByb2Nlc3NMaW5rW11cbiAgKTogVGFza1dpdGhQcm9jZXNzTGlua1tdIHtcbiAgICByZXR1cm4gdGFza3NXaXRoUHJvY2Vzc0xpbmtzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgICBpZiAoIWFjYy5maW5kKHRhc2tXaXRoUHJvY2Vzc0xpbmsgPT4gdGFza1dpdGhQcm9jZXNzTGluay50YXNrLmlkID09PSBjdXJyLnRhc2suaWQpKSB7XG4gICAgICAgIHJldHVybiBbLi4uYWNjLCBjdXJyXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10gYXMgVGFza1dpdGhQcm9jZXNzTGlua1tdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U29ydGVkVGFza3NXaXRoUHJvY2Vzc0xpbmtzKFxuICAgIHRhc2tzV2l0aFByb2Nlc3NMaW5rczogVGFza1dpdGhQcm9jZXNzTGlua1tdXG4gICk6IFRhc2tXaXRoUHJvY2Vzc0xpbmtbXSB7XG4gICAgcmV0dXJuIHRhc2tzV2l0aFByb2Nlc3NMaW5rcy5zb3J0KCh0MSwgdDIpID0+IHtcbiAgICAgIC8vIGhpZ2ggcHJpb3JpdHkgdGFza3Mgb24gdG9wXG4gICAgICBpZiAodDIudGFzay5wcmlvcml0eSAhPT0gdDEudGFzay5wcmlvcml0eSkge1xuICAgICAgICByZXR1cm4gdDIudGFzay5wcmlvcml0eSAtIHQxLnRhc2sucHJpb3JpdHk7XG4gICAgICB9XG5cbiAgICAgIC8vIHRhc2sgd2l0aCBhcHByb2FjaGluZyBkdWUgZGF0ZSBvbiB0b3BcbiAgICAgIGNvbnN0IGR1ZTEgPSB0MT8udGFzay5kdWVVbml4IHx8IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICBjb25zdCBkdWUyID0gdDI/LnRhc2suZHVlVW5peCB8fCBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgaWYgKGR1ZTEgIT09IGR1ZTIpIHtcbiAgICAgICAgcmV0dXJuIGR1ZTEgLSBkdWUyO1xuICAgICAgfVxuXG4gICAgICAvLyBuZXcgdGFzayBvbiB0b3BcbiAgICAgIGNvbnN0IGNyZWF0ZWRDb21wYXJlID0gdDIudGFzay5jcmVhdGVkVW5peCAvIDUwMDAgLSB0MS50YXNrLmNyZWF0ZWRVbml4IC8gNTAwMDtcbiAgICAgIGlmIChjcmVhdGVkQ29tcGFyZSAhPT0gMCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlZENvbXBhcmU7XG4gICAgICB9XG5cbiAgICAgIC8vIHRhc2sgd2l0aCBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGFnZSwgYXJlIHNvcnRlZCBieSBuYW1lXG4gICAgICByZXR1cm4gdDEudGFzay5uYW1lLmxvY2FsZUNvbXBhcmUodDIudGFzay5uYW1lKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydFRhc2tzV2l0aFByb2Nlc3NMaW5rc09uUGVybWlzc2lvbih0YXNrc1dpdGhQcm9jZXNzTGlua3M6IFRhc2tXaXRoUHJvY2Vzc0xpbmtbXSk6IHtcbiAgICBteVRhc2tzOiBUYXNrV2l0aFByb2Nlc3NMaW5rW107XG4gICAgb3RoZXJUYXNrczogVGFza1dpdGhQcm9jZXNzTGlua1tdO1xuICB9IHtcbiAgICByZXR1cm4gdGFza3NXaXRoUHJvY2Vzc0xpbmtzLnJlZHVjZShcbiAgICAgIChhY2MsIGN1cnIpID0+XG4gICAgICAgICFjdXJyLnRhc2suaXNMb2NrZWRcbiAgICAgICAgICA/IHsuLi5hY2MsIG15VGFza3M6IFsuLi5hY2MubXlUYXNrcywgY3Vycl19XG4gICAgICAgICAgOiB7Li4uYWNjLCBvdGhlclRhc2tzOiBbLi4uYWNjLm90aGVyVGFza3MsIGN1cnJdfSxcbiAgICAgIHtteVRhc2tzOiBbXSBhcyBUYXNrV2l0aFByb2Nlc3NMaW5rW10sIG90aGVyVGFza3M6IFtdIGFzIFRhc2tXaXRoUHJvY2Vzc0xpbmtbXX1cbiAgICApO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXZcbiAgY2xhc3M9XCJ0YXNrLWxpc3RcIlxuICAqbmdJZj1cIntsb2FkaW5nVGFza3M6IGxvYWRpbmdUYXNrcyQgfCBhc3luYywgdGFza3M6IHByb2Nlc3NJbnN0YW5jZVRhc2tzJCB8IGFzeW5jfSBhcyBvYnNcIlxuPlxuICBAaWYgKG9icy5sb2FkaW5nVGFza3MgJiYgIW9icy50YXNrcykge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nVGFza3NUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICB9IEBlbHNlIGlmIChvYnMudGFza3M/Lm15VGFza3M/Lmxlbmd0aCA9PT0gMCAmJiBvYnMudGFza3M/Lm90aGVyVGFza3M/Lmxlbmd0aCA9PT0gMCkge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub1Rhc2tzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgfSBAZWxzZSB7XG4gICAgPGgyIGNsYXNzPVwidGFzay1saXN0X190aXRsZVwiPnt7ICdzdW1tYXJ5LnRhc2tzJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGFzay1saXN0X190YXNrcy1jb250YWluZXJcIiBjZHNMYXllcj1cIjFcIj5cbiAgICAgIDxoMyBjbGFzcz1cInRhc2stbGlzdF9fc3VidGl0bGVcIj57eyAnc3VtbWFyeS5teVRhc2tzJyB8IHRyYW5zbGF0ZSB9fTwvaDM+XG5cbiAgICAgIEBpZiAob2JzLnRhc2tzPy5teVRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB7eyAnc3VtbWFyeS5ub1Jlc3VsdHNNeVRhc2tzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEBmb3IgKHRhc2tXaXRoUHJvY2Vzc0xpbmsgb2Ygb2JzLnRhc2tzPy5teVRhc2tzOyB0cmFjayB0YXNrV2l0aFByb2Nlc3NMaW5rLnRhc2suaWQpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRhc2tUZW1wbGF0ZTsgY29udGV4dDoge3Rhc2tXaXRoUHJvY2Vzc0xpbms6IHRhc2tXaXRoUHJvY2Vzc0xpbmt9XCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJ0YXNrLWxpc3RfX3Rhc2tzLWNvbnRhaW5lclwiIGNkc0xheWVyPVwiMVwiPlxuICAgICAgPGgzIGNsYXNzPVwidGFzay1saXN0X19zdWJ0aXRsZVwiPnt7ICdzdW1tYXJ5Lm90aGVyVGFza3MnIHwgdHJhbnNsYXRlIH19PC9oMz5cblxuICAgICAgQGlmIChvYnMudGFza3M/Lm90aGVyVGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHt7ICdzdW1tYXJ5Lm5vUmVzdWx0c090aGVyVGFza3MnIHwgdHJhbnNsYXRlIH19XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgQGZvciAodGFza1dpdGhQcm9jZXNzTGluayBvZiBvYnMudGFza3M/Lm90aGVyVGFza3M7IHRyYWNrIHRhc2tXaXRoUHJvY2Vzc0xpbmsudGFzay5pZCkge1xuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFza1RlbXBsYXRlOyBjb250ZXh0OiB7dGFza1dpdGhQcm9jZXNzTGluazogdGFza1dpdGhQcm9jZXNzTGlua31cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG5cbiAgPHZhbHRpbW8tdGFzay1kZXRhaWwtbW9kYWxcbiAgICAjdGFza0RldGFpbFxuICAgIFttb2RhbFNpemVdPVwiZm9ybVNpemUkIHwgYXN5bmNcIlxuICAgIChmb3JtU3VibWl0KT1cIm9uRm9ybVN1Ym1pdCgpXCJcbiAgICAoYXNzaWdubWVudE9mVGFza0NoYW5nZWQpPVwicmVmcmVzaCgpXCJcbiAgPjwvdmFsdGltby10YXNrLWRldGFpbC1tb2RhbD5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3Rhc2tUZW1wbGF0ZSBsZXQtdGFza1dpdGhQcm9jZXNzTGluaz1cInRhc2tXaXRoUHJvY2Vzc0xpbmtcIj5cbiAgPGNkcy1jbGlja2FibGUtdGlsZSBbaHJlZl09XCJudWxsXCIgKGNsaWNrKT1cInJvd1Rhc2tDbGljayh0YXNrV2l0aFByb2Nlc3NMaW5rKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YXNrXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFza19faGVhZGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGFza19fdGl0bGVcIj57eyB0YXNrV2l0aFByb2Nlc3NMaW5rLnRhc2submFtZSB9fTwvc3Bhbj5cblxuICAgICAgICA8Y2RzLXRhZ1xuICAgICAgICAgIGNsYXNzPVwiY2RzLXRhZy0tbm8tbWFyZ2luXCJcbiAgICAgICAgICBbdHlwZV09XCJ0YXNrV2l0aFByb2Nlc3NMaW5rLnRhc2suaXNMb2NrZWQgPyAnY29vbC1ncmF5JyA6ICdncmVlbidcIlxuICAgICAgICA+XG4gICAgICAgICAgQGlmICghdGFza1dpdGhQcm9jZXNzTGluay50YXNrLmlzTG9ja2VkKSB7XG4gICAgICAgICAgICB7eyAnc3VtbWFyeS50YXNrT3BlbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLWxvY2tcIj48L2k+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Nkcy10YWc+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInRhc2tfX2Rlc2NyaXB0aW9uXCI+XG4gICAgICAgIHt7ICdzdW1tYXJ5LnRhc2tDcmVhdGVkJyB8IHRyYW5zbGF0ZSB9fSB7eyB0YXNrV2l0aFByb2Nlc3NMaW5rLnRhc2suY3JlYXRlZCB9fVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrX19zdWJ0aXRsZXNcIj5cbiAgICAgICAgQGZvciAoXG4gICAgICAgICAgc3VidGl0bGUgb2YgdGFza1dpdGhQcm9jZXNzTGluaz8ucHJvY2Vzc0xpbmtBY3Rpdml0eVJlc3VsdD8ucHJvcGVydGllcz8uc3VidGl0bGVzIHx8IFtdO1xuICAgICAgICAgIHRyYWNrIHN1YnRpdGxlXG4gICAgICAgICkge1xuICAgICAgICAgIDxwIGNsYXNzPVwidGFza19fc3VidGl0bGVcIj57eyBzdWJ0aXRsZSB9fTwvcD5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvY2RzLWNsaWNrYWJsZS10aWxlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub1Rhc2tzVGVtcGxhdGU+XG4gIDx2YWx0aW1vLW5vLXJlc3VsdHNcbiAgICBbYWx3YXlzUmVuZGVyVmVydGljYWxseV09XCJ0cnVlXCJcbiAgICBpbGx1c3RyYXRpb249XCJ2YWx0aW1vLWxheW91dC9pbWcvZW1wdHlzdGF0ZS1zdWNjZXNzLnN2Z1wiXG4gICAgW2Rlc2NyaXB0aW9uXT1cIidzdW1tYXJ5LnVzZXJUYXNrc0RvbmVTdGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgIFtzbWFsbFBhZGRpbmddPVwidHJ1ZVwiXG4gID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ1Rhc2tzVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJsb2FkaW5nLWNvbnRhaW5lclwiPlxuICAgIDxjZHMtbG9hZGluZyBzaXplPVwic21cIj48L2Nkcy1sb2FkaW5nPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=