@valtimo/zgw 12.0.0 → 12.1.0

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 (80) hide show
  1. package/esm2022/lib/components/dossier-management-zgw/dossier-management-zgw.component.mjs +61 -13
  2. package/esm2022/lib/models/dossier-management-zgw.model.mjs +5 -3
  3. package/esm2022/lib/modules/documenten-api/components/documenten-api-column-modal/documenten-api-column-modal.component.mjs +115 -242
  4. package/esm2022/lib/modules/documenten-api/components/documenten-api-columns/documenten-api-columns.component.mjs +57 -85
  5. package/esm2022/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.mjs +171 -100
  6. package/esm2022/lib/modules/documenten-api/components/documenten-api-filter/documenten-api-filter.component.mjs +174 -0
  7. package/esm2022/lib/modules/documenten-api/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.mjs +244 -106
  8. package/esm2022/lib/modules/documenten-api/components/documenten-api-tag-modal/documenten-api-tag-modal.component.mjs +115 -0
  9. package/esm2022/lib/modules/documenten-api/components/documenten-api-tags/documenten-api-tags.component.mjs +164 -0
  10. package/esm2022/lib/modules/documenten-api/components/index.mjs +5 -2
  11. package/esm2022/lib/modules/documenten-api/formio/documenten-api-uploader/documenten-api-uploader.component.mjs +3 -3
  12. package/esm2022/lib/modules/documenten-api/models/configured-column.model.mjs +12 -2
  13. package/esm2022/lib/modules/documenten-api/models/documenten-api-filter.model.mjs +17 -0
  14. package/esm2022/lib/modules/documenten-api/models/documenten-api-metadata.model.mjs +1 -1
  15. package/esm2022/lib/modules/documenten-api/models/documenten-api-tag.model.mjs +17 -0
  16. package/esm2022/lib/modules/documenten-api/models/documenten-api-version.model.mjs +1 -1
  17. package/esm2022/lib/modules/documenten-api/models/documenten-api.model.mjs +22 -2
  18. package/esm2022/lib/modules/documenten-api/models/index.mjs +2 -1
  19. package/esm2022/lib/modules/documenten-api/services/documenten-api-column.service.mjs +10 -9
  20. package/esm2022/lib/modules/documenten-api/services/documenten-api-document.service.mjs +10 -3
  21. package/esm2022/lib/modules/documenten-api/services/documenten-api-link-process.service.mjs +1 -16
  22. package/esm2022/lib/modules/documenten-api/services/documenten-api-tag.service.mjs +36 -0
  23. package/esm2022/lib/modules/documenten-api/services/documenten-api-version.service.mjs +4 -1
  24. package/esm2022/lib/modules/documenten-api/services/index.mjs +3 -2
  25. package/esm2022/lib/modules/objecten-api/components/zaakobjecten/zaakobjecten.component.mjs +2 -2
  26. package/esm2022/lib/modules/zaakdetails/components/document-objecten-api-sync/document-objecten-api-sync.component.mjs +1 -1
  27. package/esm2022/lib/services/dossier-management-zgw.service.mjs +8 -4
  28. package/esm2022/lib/zgw.module.mjs +22 -5
  29. package/fesm2022/valtimo-zgw.mjs +1378 -781
  30. package/fesm2022/valtimo-zgw.mjs.map +1 -1
  31. package/lib/components/dossier-management-zgw/dossier-management-zgw.component.d.ts +16 -5
  32. package/lib/components/dossier-management-zgw/dossier-management-zgw.component.d.ts.map +1 -1
  33. package/lib/models/dossier-management-zgw.model.d.ts +12 -2
  34. package/lib/models/dossier-management-zgw.model.d.ts.map +1 -1
  35. package/lib/modules/documenten-api/components/documenten-api-column-modal/documenten-api-column-modal.component.d.ts +33 -63
  36. package/lib/modules/documenten-api/components/documenten-api-column-modal/documenten-api-column-modal.component.d.ts.map +1 -1
  37. package/lib/modules/documenten-api/components/documenten-api-columns/documenten-api-columns.component.d.ts +18 -20
  38. package/lib/modules/documenten-api/components/documenten-api-columns/documenten-api-columns.component.d.ts.map +1 -1
  39. package/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.d.ts +38 -20
  40. package/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.d.ts.map +1 -1
  41. package/lib/modules/documenten-api/components/documenten-api-filter/documenten-api-filter.component.d.ts +47 -0
  42. package/lib/modules/documenten-api/components/documenten-api-filter/documenten-api-filter.component.d.ts.map +1 -0
  43. package/lib/modules/documenten-api/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts +76 -39
  44. package/lib/modules/documenten-api/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts.map +1 -1
  45. package/lib/modules/documenten-api/components/documenten-api-tag-modal/documenten-api-tag-modal.component.d.ts +33 -0
  46. package/lib/modules/documenten-api/components/documenten-api-tag-modal/documenten-api-tag-modal.component.d.ts.map +1 -0
  47. package/lib/modules/documenten-api/components/documenten-api-tags/documenten-api-tags.component.d.ts +46 -0
  48. package/lib/modules/documenten-api/components/documenten-api-tags/documenten-api-tags.component.d.ts.map +1 -0
  49. package/lib/modules/documenten-api/components/index.d.ts +4 -1
  50. package/lib/modules/documenten-api/components/index.d.ts.map +1 -1
  51. package/lib/modules/documenten-api/models/configured-column.model.d.ts +8 -2
  52. package/lib/modules/documenten-api/models/configured-column.model.d.ts.map +1 -1
  53. package/lib/modules/documenten-api/models/documenten-api-filter.model.d.ts +10 -0
  54. package/lib/modules/documenten-api/models/documenten-api-filter.model.d.ts.map +1 -0
  55. package/lib/modules/documenten-api/models/documenten-api-metadata.model.d.ts +10 -9
  56. package/lib/modules/documenten-api/models/documenten-api-metadata.model.d.ts.map +1 -1
  57. package/lib/modules/documenten-api/models/documenten-api-tag.model.d.ts +5 -0
  58. package/lib/modules/documenten-api/models/documenten-api-tag.model.d.ts.map +1 -0
  59. package/lib/modules/documenten-api/models/documenten-api-version.model.d.ts +7 -1
  60. package/lib/modules/documenten-api/models/documenten-api-version.model.d.ts.map +1 -1
  61. package/lib/modules/documenten-api/models/documenten-api.model.d.ts +37 -12
  62. package/lib/modules/documenten-api/models/documenten-api.model.d.ts.map +1 -1
  63. package/lib/modules/documenten-api/models/index.d.ts +1 -0
  64. package/lib/modules/documenten-api/models/index.d.ts.map +1 -1
  65. package/lib/modules/documenten-api/services/documenten-api-column.service.d.ts +3 -2
  66. package/lib/modules/documenten-api/services/documenten-api-column.service.d.ts.map +1 -1
  67. package/lib/modules/documenten-api/services/documenten-api-document.service.d.ts +3 -2
  68. package/lib/modules/documenten-api/services/documenten-api-document.service.d.ts.map +1 -1
  69. package/lib/modules/documenten-api/services/documenten-api-link-process.service.d.ts.map +1 -1
  70. package/lib/modules/documenten-api/services/documenten-api-tag.service.d.ts +17 -0
  71. package/lib/modules/documenten-api/services/documenten-api-tag.service.d.ts.map +1 -0
  72. package/lib/modules/documenten-api/services/documenten-api-version.service.d.ts +2 -1
  73. package/lib/modules/documenten-api/services/documenten-api-version.service.d.ts.map +1 -1
  74. package/lib/modules/documenten-api/services/index.d.ts +2 -1
  75. package/lib/modules/documenten-api/services/index.d.ts.map +1 -1
  76. package/lib/modules/zaakdetails/components/document-objecten-api-sync/document-objecten-api-sync.component.d.ts.map +1 -1
  77. package/lib/services/dossier-management-zgw.service.d.ts +2 -0
  78. package/lib/services/dossier-management-zgw.service.d.ts.map +1 -1
  79. package/lib/zgw.module.d.ts.map +1 -1
  80. package/package.json +1 -1
@@ -13,13 +13,13 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { ChangeDetectionStrategy, Component, ViewChild, } from '@angular/core';
17
- import { BehaviorSubject, combineLatest, filter, map, Subject, switchMap, tap, } from 'rxjs';
18
- import { CarbonListModule, ConfirmationModalModule, MoveRowDirection, PendingChangesComponent, ViewType, } from '@valtimo/components';
19
- import { DocumentenApiColumnModalComponent } from '../documenten-api-column-modal/documenten-api-column-modal.component';
20
16
  import { CommonModule } from '@angular/common';
17
+ import { ChangeDetectionStrategy, Component, ViewChild, } from '@angular/core';
21
18
  import { TranslateModule } from '@ngx-translate/core';
22
- import { ButtonModule, TagModule } from 'carbon-components-angular';
19
+ import { CarbonListModule, ConfirmationModalModule, ViewType, } from '@valtimo/components';
20
+ import { ButtonModule, IconModule, TagModule } from 'carbon-components-angular';
21
+ import { BehaviorSubject, combineLatest, filter, map, switchMap, tap } from 'rxjs';
22
+ import { DocumentenApiColumnModalComponent } from '../documenten-api-column-modal/documenten-api-column-modal.component';
23
23
  import * as i0 from "@angular/core";
24
24
  import * as i1 from "@angular/router";
25
25
  import * as i2 from "../../services";
@@ -27,32 +27,32 @@ import * as i3 from "@angular/common";
27
27
  import * as i4 from "@valtimo/components";
28
28
  import * as i5 from "@ngx-translate/core";
29
29
  import * as i6 from "carbon-components-angular";
30
- export class DocumentenApiColumnsComponent extends PendingChangesComponent {
30
+ export class DocumentenApiColumnsComponent {
31
31
  get documentDefinitionName$() {
32
32
  return this._documentDefinitionName$;
33
33
  }
34
34
  constructor(route, zgwDocumentColumnService) {
35
- super();
36
35
  this.route = route;
37
36
  this.zgwDocumentColumnService = zgwDocumentColumnService;
38
37
  this._reload$ = new BehaviorSubject(null);
39
38
  this._documentDefinitionName$ = this.route.params.pipe(map(params => params?.name), filter(docDefName => !!docDefName));
40
39
  this.loading$ = new BehaviorSubject(true);
41
- this.usedKeys$ = new BehaviorSubject([]);
42
- this._documentStatuses = [];
43
- this.documentStatuses$ = combineLatest([
40
+ this.configuredColumns$ = combineLatest([
44
41
  this._documentDefinitionName$,
45
42
  this._reload$,
46
43
  ]).pipe(tap(([_, reload]) => {
47
- if (reload === null) {
44
+ if (reload === null)
48
45
  this.loading$.next(true);
49
- }
50
- }), switchMap(([documentDefinitionName]) => this.zgwDocumentColumnService.getConfiguredColumns(documentDefinitionName)), tap(statuses => {
51
- this._documentStatuses = statuses;
52
- this.usedKeys$.next(statuses.map(status => status.key));
46
+ }), switchMap(([documentDefinitionName]) => this.zgwDocumentColumnService.getAdminConfiguredColumns(documentDefinitionName)), tap(() => {
53
47
  this.loading$.next(false);
54
48
  }));
55
- this.fields$ = new BehaviorSubject([]);
49
+ this.configurableColumns$ = this.documentDefinitionName$.pipe(switchMap((documentDefinitionName) => combineLatest([
50
+ this.zgwDocumentColumnService.getAdminConfigurableColumns(documentDefinitionName),
51
+ this.configuredColumns$,
52
+ ])), map(([configurableColumns, configuredColumns]) => {
53
+ const configuredKeys = configuredColumns.map((column) => column.key);
54
+ return configurableColumns.filter((column) => !configuredKeys.includes(column.key));
55
+ }));
56
56
  this.ACTION_ITEMS = [
57
57
  {
58
58
  label: 'interface.edit',
@@ -66,91 +66,59 @@ export class DocumentenApiColumnsComponent extends PendingChangesComponent {
66
66
  },
67
67
  ];
68
68
  this.CARBON_THEME = 'g10';
69
- this.statusModalType$ = new BehaviorSubject('closed');
70
- this.prefillStatus$ = new BehaviorSubject(undefined);
69
+ this.columnModalType$ = new BehaviorSubject('closed');
70
+ this.prefillColumn$ = new BehaviorSubject(undefined);
71
71
  this.columnToUpdate$ = new BehaviorSubject(undefined);
72
- this.showDisableModal$ = new Subject();
73
- this._documentDefinitionName$.subscribe(documentDefinitionName => {
74
- zgwDocumentColumnService.getConfiguredColumns(documentDefinitionName).subscribe(configuredColumns => {
75
- console.log(configuredColumns);
76
- }, error => {
77
- console.error(error);
78
- });
79
- });
72
+ this.showDeleteModal$ = new BehaviorSubject(false);
80
73
  }
81
74
  ngAfterViewInit() {
82
- this.initFields();
75
+ this.fields = [
76
+ {
77
+ key: 'key',
78
+ label: 'zgw.columns.column',
79
+ viewType: ViewType.TEMPLATE,
80
+ template: this.columnKeyTemplate,
81
+ },
82
+ {
83
+ key: 'defaultSort',
84
+ label: 'listColumn.defaultSort',
85
+ viewType: ViewType.TEMPLATE,
86
+ template: this.defaultSortTemplate,
87
+ },
88
+ ];
83
89
  }
84
- openDeleteModal(status) {
85
- this.columnToUpdate$.next(status);
86
- this.showDisableModal$.next(true);
90
+ openDeleteModal(column) {
91
+ this.columnToUpdate$.next(column);
92
+ this.showDeleteModal$.next(true);
87
93
  }
88
- openEditModal(status) {
89
- this.prefillStatus$.next(status);
90
- this.statusModalType$.next('edit');
94
+ openEditModal(column) {
95
+ this.prefillColumn$.next(column);
96
+ this.columnModalType$.next('edit');
91
97
  }
92
98
  openAddModal() {
93
- this.statusModalType$.next('add');
99
+ this.columnModalType$.next('add');
100
+ this.prefillColumn$.next(undefined);
94
101
  }
95
- closeModal(closeModalEvent) {
96
- if (closeModalEvent === 'closeAndRefresh') {
102
+ onCloseModal(closeModalEvent) {
103
+ if (closeModalEvent === 'closeAndRefresh')
97
104
  this.reload();
98
- }
99
- this.statusModalType$.next('closed');
105
+ this.columnModalType$.next('closed');
100
106
  }
101
- confirmDeleteStatus(status) {
102
- this.documentDefinitionName$
103
- .pipe(switchMap(documentDefinitionName => this.zgwDocumentColumnService.deleteConfiguredColumn(documentDefinitionName, status.key)))
104
- .subscribe(() => {
107
+ confirmDeleteStatus(column, definitionName) {
108
+ this.zgwDocumentColumnService.deleteColumn(definitionName, column.key).subscribe(() => {
105
109
  this.reload();
106
110
  });
107
111
  }
108
- onMoveRowClick(event) {
109
- const { direction, index } = event;
110
- const orderedStatuses = direction === MoveRowDirection.UP
111
- ? this.swapStatuses(this._documentStatuses, index - 1, index)
112
- : this.swapStatuses(this._documentStatuses, index, index + 1);
113
- this.documentDefinitionName$
114
- .pipe(switchMap(documentDefinitionName => this.zgwDocumentColumnService.updateConfiguredColumns(documentDefinitionName, orderedStatuses)))
115
- .subscribe(() => {
112
+ onItemsReordered(definitionName, columns) {
113
+ this.zgwDocumentColumnService.updateConfiguredColumns(definitionName, columns).subscribe(() => {
116
114
  this.reload(true);
117
115
  });
118
116
  }
119
117
  reload(noAnimation = false) {
120
118
  this._reload$.next(noAnimation ? 'noAnimation' : null);
121
119
  }
122
- swapStatuses(statuses, index1, index2) {
123
- const temp = [...statuses];
124
- temp[index1] = temp.splice(index2, 1, temp[index1])[0];
125
- return temp;
126
- }
127
- initFields() {
128
- this.fields$.next([
129
- {
130
- key: 'title',
131
- label: 'dossierManagement.statuses.columns.title',
132
- viewType: ViewType.TEXT,
133
- },
134
- {
135
- key: 'key',
136
- label: 'dossierManagement.statuses.columns.key',
137
- viewType: ViewType.TEXT,
138
- },
139
- {
140
- key: 'visibleInCaseListByDefault',
141
- label: 'dossierManagement.statuses.columns.visible',
142
- viewType: ViewType.BOOLEAN,
143
- },
144
- {
145
- viewType: ViewType.TEMPLATE,
146
- template: this.colorColumnTemplate,
147
- key: 'color',
148
- label: 'dossierManagement.statuses.columns.color',
149
- },
150
- ]);
151
- }
152
120
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DocumentenApiColumnsComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.DocumentenApiColumnService }], target: i0.ɵɵFactoryTarget.Component }); }
153
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: DocumentenApiColumnsComponent, isStandalone: true, selector: "valtimo-documenten-api-columns", viewQueries: [{ propertyName: "colorColumnTemplate", first: true, predicate: ["colorColumnTemplate"], descendants: true }], usesInheritance: 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<valtimo-carbon-list\n *ngIf=\"{\n loading: loading$ | async,\n documentStatuses: documentStatuses$ | async\n } as obs\"\n [fields]=\"fields$ | async\"\n [header]=\"false\"\n [loading]=\"obs.loading\"\n [movingRowsEnabled]=\"true\"\n [actionItems]=\"ACTION_ITEMS\"\n (rowClicked)=\"openEditModal($event)\"\n (moveRow)=\"onMoveRowClick($event)\"\n>\n <ng-container\n carbonToolbarContent\n *ngTemplateOutlet=\"buttons; context: {obs: obs}\"\n ></ng-container>\n</valtimo-carbon-list>\n\n<valtimo-documenten-api-column-modal\n [type]=\"statusModalType$ | async\"\n [usedKeys]=\"usedKeys$ | async\"\n [documentDefinitionName]=\"documentDefinitionName$ | async\"\n (closeModalEvent)=\"closeModal($event)\"\n></valtimo-documenten-api-column-modal>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"dossierManagement.statuses.deleteText\"\n [outputOnConfirm]=\"columnToUpdate$ | async\"\n [showModalSubject$]=\"showDisableModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"confirmDeleteStatus($event)\"\n></valtimo-confirmation-modal>\n\n<ng-template #buttons let-obs=\"obs\">\n <div class=\"dossier-management-search-fields__buttons\">\n <button cdsButton=\"primary\" [disabled]=\"obs.loading\" (click)=\"openAddModal()\">\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'dossierManagement.statuses.add' | translate }}\n </button>\n </div>\n</ng-template>\n\n<ng-template #colorColumnTemplate let-data=\"data\">\n <cds-tag class=\"cds-tag--no-margin\" [type]=\"data?.item?.tagType\">\n {{ 'interface.tagType.' + data?.item?.tagType | translate }}\n </cds-tag>\n</ng-template>\n", styles: ["::ng-deep .cds-tag--no-margin{margin:0}\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: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "component", type: DocumentenApiColumnModalComponent, selector: "valtimo-documenten-api-column-modal", inputs: ["type", "prefill", "usedKeys", "documentDefinitionName"], outputs: ["closeModalEvent"] }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i4.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ConfirmationModalModule }, { kind: "component", type: i4.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i6.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i6.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
121
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: DocumentenApiColumnsComponent, isStandalone: true, selector: "valtimo-documenten-api-columns", viewQueries: [{ propertyName: "columnKeyTemplate", first: true, predicate: ["columnKeyTemplate"], descendants: true }, { propertyName: "defaultSortTemplate", first: true, predicate: ["defaultSortTemplate"], 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<ng-container\n *ngIf=\"{\n columnModalType: columnModalType$ | async,\n columnToUpdate: columnToUpdate$ | async,\n documentDefinitionName: documentDefinitionName$ | async,\n configuredColumns: configuredColumns$ | async,\n configurableColumns: configurableColumns$ | async,\n loading: loading$ | async,\n prefillColumn: prefillColumn$ | async\n } as obs\"\n>\n <valtimo-carbon-list\n [actionItems]=\"ACTION_ITEMS\"\n [fields]=\"fields\"\n [header]=\"false\"\n [items]=\"obs.configuredColumns\"\n [loading]=\"obs.loading || !fields\"\n [movingRowsEnabled]=\"true\"\n (itemsReordered)=\"onItemsReordered(obs.documentDefinitionName, $event)\"\n >\n <ng-container carbonToolbarContent>\n <ng-container *ngTemplateOutlet=\"addButton\"></ng-container>\n </ng-container>\n\n <valtimo-no-results\n [action]=\"addButton\"\n [description]=\"'zgw.documents.noColumns.description' | translate\"\n [title]=\"'zgw.documents.noColumns.title' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n\n <valtimo-documenten-api-column-modal\n [availableColumns]=\"obs.configurableColumns\"\n [configuredColumns]=\"obs.configuredColumns\"\n [definitionName]=\"obs.documentDefinitionName\"\n [prefillColumn]=\"obs.prefillColumn\"\n [type]=\"obs.columnModalType\"\n (closeModal)=\"onCloseModal($event)\"\n ></valtimo-documenten-api-column-modal>\n\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"zgw.columns.deleteText\"\n [outputOnConfirm]=\"columnToUpdate$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"confirmDeleteStatus($event, obs.documentDefinitionName)\"\n ></valtimo-confirmation-modal>\n</ng-container>\n\n<ng-template #addButton>\n <button cdsButton=\"primary\" [disabled]=\"loading$ | async\" (click)=\"openAddModal()\">\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'zgw.columns.add' | translate }}\n </button>\n</ng-template>\n\n<ng-template #columnKeyTemplate let-data=\"data\">\n {{ 'zgw.documentColumns.' + data.item.key | translate }}\n</ng-template>\n\n<ng-template #defaultSortTemplate let-data=\"data\">\n {{\n data.item.defaultSort === null\n ? '-'\n : ('interface.sorting.' + (data.item.defaultSort === 'ASC' ? 'ascending' : 'descending')\n | translate)\n }}\n</ng-template>\n", styles: ["::ng-deep .cds-tag--no-margin{margin:0}\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: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "component", type: DocumentenApiColumnModalComponent, selector: "valtimo-documenten-api-column-modal", inputs: ["definitionName", "prefillColumn", "type", "availableColumns", "configuredColumns"], outputs: ["closeModal"] }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i4.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i4.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ConfirmationModalModule }, { kind: "component", type: i4.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "ngmodule", type: TagModule }, { 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
154
122
  }
155
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DocumentenApiColumnsComponent, decorators: [{
156
124
  type: Component,
@@ -162,9 +130,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
162
130
  ConfirmationModalModule,
163
131
  TagModule,
164
132
  ButtonModule,
165
- ], 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<valtimo-carbon-list\n *ngIf=\"{\n loading: loading$ | async,\n documentStatuses: documentStatuses$ | async\n } as obs\"\n [fields]=\"fields$ | async\"\n [header]=\"false\"\n [loading]=\"obs.loading\"\n [movingRowsEnabled]=\"true\"\n [actionItems]=\"ACTION_ITEMS\"\n (rowClicked)=\"openEditModal($event)\"\n (moveRow)=\"onMoveRowClick($event)\"\n>\n <ng-container\n carbonToolbarContent\n *ngTemplateOutlet=\"buttons; context: {obs: obs}\"\n ></ng-container>\n</valtimo-carbon-list>\n\n<valtimo-documenten-api-column-modal\n [type]=\"statusModalType$ | async\"\n [usedKeys]=\"usedKeys$ | async\"\n [documentDefinitionName]=\"documentDefinitionName$ | async\"\n (closeModalEvent)=\"closeModal($event)\"\n></valtimo-documenten-api-column-modal>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"dossierManagement.statuses.deleteText\"\n [outputOnConfirm]=\"columnToUpdate$ | async\"\n [showModalSubject$]=\"showDisableModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"confirmDeleteStatus($event)\"\n></valtimo-confirmation-modal>\n\n<ng-template #buttons let-obs=\"obs\">\n <div class=\"dossier-management-search-fields__buttons\">\n <button cdsButton=\"primary\" [disabled]=\"obs.loading\" (click)=\"openAddModal()\">\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'dossierManagement.statuses.add' | translate }}\n </button>\n </div>\n</ng-template>\n\n<ng-template #colorColumnTemplate let-data=\"data\">\n <cds-tag class=\"cds-tag--no-margin\" [type]=\"data?.item?.tagType\">\n {{ 'interface.tagType.' + data?.item?.tagType | translate }}\n </cds-tag>\n</ng-template>\n", styles: ["::ng-deep .cds-tag--no-margin{margin:0}\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"] }]
166
- }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.DocumentenApiColumnService }], propDecorators: { colorColumnTemplate: [{
133
+ IconModule,
134
+ ], 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<ng-container\n *ngIf=\"{\n columnModalType: columnModalType$ | async,\n columnToUpdate: columnToUpdate$ | async,\n documentDefinitionName: documentDefinitionName$ | async,\n configuredColumns: configuredColumns$ | async,\n configurableColumns: configurableColumns$ | async,\n loading: loading$ | async,\n prefillColumn: prefillColumn$ | async\n } as obs\"\n>\n <valtimo-carbon-list\n [actionItems]=\"ACTION_ITEMS\"\n [fields]=\"fields\"\n [header]=\"false\"\n [items]=\"obs.configuredColumns\"\n [loading]=\"obs.loading || !fields\"\n [movingRowsEnabled]=\"true\"\n (itemsReordered)=\"onItemsReordered(obs.documentDefinitionName, $event)\"\n >\n <ng-container carbonToolbarContent>\n <ng-container *ngTemplateOutlet=\"addButton\"></ng-container>\n </ng-container>\n\n <valtimo-no-results\n [action]=\"addButton\"\n [description]=\"'zgw.documents.noColumns.description' | translate\"\n [title]=\"'zgw.documents.noColumns.title' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n\n <valtimo-documenten-api-column-modal\n [availableColumns]=\"obs.configurableColumns\"\n [configuredColumns]=\"obs.configuredColumns\"\n [definitionName]=\"obs.documentDefinitionName\"\n [prefillColumn]=\"obs.prefillColumn\"\n [type]=\"obs.columnModalType\"\n (closeModal)=\"onCloseModal($event)\"\n ></valtimo-documenten-api-column-modal>\n\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"zgw.columns.deleteText\"\n [outputOnConfirm]=\"columnToUpdate$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"confirmDeleteStatus($event, obs.documentDefinitionName)\"\n ></valtimo-confirmation-modal>\n</ng-container>\n\n<ng-template #addButton>\n <button cdsButton=\"primary\" [disabled]=\"loading$ | async\" (click)=\"openAddModal()\">\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'zgw.columns.add' | translate }}\n </button>\n</ng-template>\n\n<ng-template #columnKeyTemplate let-data=\"data\">\n {{ 'zgw.documentColumns.' + data.item.key | translate }}\n</ng-template>\n\n<ng-template #defaultSortTemplate let-data=\"data\">\n {{\n data.item.defaultSort === null\n ? '-'\n : ('interface.sorting.' + (data.item.defaultSort === 'ASC' ? 'ascending' : 'descending')\n | translate)\n }}\n</ng-template>\n", styles: ["::ng-deep .cds-tag--no-margin{margin:0}\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"] }]
135
+ }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.DocumentenApiColumnService }], propDecorators: { columnKeyTemplate: [{
136
+ type: ViewChild,
137
+ args: ['columnKeyTemplate']
138
+ }], defaultSortTemplate: [{
167
139
  type: ViewChild,
168
- args: ['colorColumnTemplate']
140
+ args: ['defaultSortTemplate']
169
141
  }] } });
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktY29sdW1ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3pndy9zcmMvbGliL21vZHVsZXMvZG9jdW1lbnRlbi1hcGkvY29tcG9uZW50cy9kb2N1bWVudGVuLWFwaS1jb2x1bW5zL2RvY3VtZW50ZW4tYXBpLWNvbHVtbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktY29sdW1ucy9kb2N1bWVudGVuLWFwaS1jb2x1bW5zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBT3ZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLE1BQU0sRUFDTixHQUFHLEVBRUgsT0FBTyxFQUNQLFNBQVMsRUFDVCxHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBRUwsZ0JBQWdCLEVBRWhCLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFFaEIsdUJBQXVCLEVBQ3ZCLFFBQVEsR0FDVCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBQyxpQ0FBaUMsRUFBQyxNQUFNLHNFQUFzRSxDQUFDO0FBQ3ZILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFlBQVksRUFBRSxTQUFTLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7QUFrQmxFLE1BQU0sT0FB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bnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlDb2x1bW5TZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1xuICBDb25maWd1cmVkQ29sdW1uLFxuICBEb2N1bWVudGVuQXBpQ29sdW1uTW9kYWxUeXBlLFxuICBEb2N1bWVudGVuQXBpQ29sdW1uTW9kYWxUeXBlQ2xvc2VFdmVudCxcbn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBY3Rpb25JdGVtLFxuICBDYXJib25MaXN0TW9kdWxlLFxuICBDb2x1bW5Db25maWcsXG4gIENvbmZpcm1hdGlvbk1vZGFsTW9kdWxlLFxuICBNb3ZlUm93RGlyZWN0aW9uLFxuICBNb3ZlUm93RXZlbnQsXG4gIFBlbmRpbmdDaGFuZ2VzQ29tcG9uZW50LFxuICBWaWV3VHlwZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlDb2x1bW5Nb2RhbENvbXBvbmVudH0gZnJvbSAnLi4vZG9jdW1lbnRlbi1hcGktY29sdW1uLW1vZGFsL2RvY3VtZW50ZW4tYXBpLWNvbHVtbi1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0J1dHRvbk1vZHVsZSwgVGFnTW9kdWxlfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1kb2N1bWVudGVuLWFwaS1jb2x1bW5zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RvY3VtZW50ZW4tYXBpLWNvbHVtbnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudGVuLWFwaS1jb2x1bW5zLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIERvY3VtZW50ZW5BcGlDb2x1bW5Nb2RhbENvbXBvbmVudCxcbiAgICBDYXJib25MaXN0TW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBDb25maXJtYXRpb25Nb2RhbE1vZHVsZSxcbiAgICBUYWdNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEb2N1bWVudGVuQXBpQ29sdW1uc0NvbXBvbmVudFxuICBleHRlbmRzIFBlbmRpbmdDaGFuZ2VzQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdFxue1xuICBAVmlld0NoaWxkKCdjb2xvckNvbHVtblRlbXBsYXRlJykgY29sb3JDb2x1bW5UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9yZWxvYWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudWxsIHwgJ25vQW5pbWF0aW9uJz4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnREZWZpbml0aW9uTmFtZSQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMucm91dGUucGFyYW1zLnBpcGUoXG4gICAgbWFwKHBhcmFtcyA9PiBwYXJhbXM/Lm5hbWUpLFxuICAgIGZpbHRlcihkb2NEZWZOYW1lID0+ICEhZG9jRGVmTmFtZSlcbiAgKTtcblxuICBwdWJsaWMgZ2V0IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUkO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdXNlZEtleXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xuXG4gIHByaXZhdGUgX2RvY3VtZW50U3RhdHVzZXM6IENvbmZpZ3VyZWRDb2x1bW5bXSA9IFtdO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudFN0YXR1c2VzJDogT2JzZXJ2YWJsZTxDb25maWd1cmVkQ29sdW1uW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSQsXG4gICAgdGhpcy5fcmVsb2FkJCxcbiAgXSkucGlwZShcbiAgICB0YXAoKFtfLCByZWxvYWRdKSA9PiB7XG4gICAgICBpZiAocmVsb2FkID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzd2l0Y2hNYXAoKFtkb2N1bWVudERlZmluaXRpb25OYW1lXSkgPT5cbiAgICAgIHRoaXMuemd3RG9jdW1lbnRDb2x1bW5TZXJ2aWNlLmdldENvbmZpZ3VyZWRDb2x1bW5zKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgKSxcbiAgICB0YXAoc3RhdHVzZXMgPT4ge1xuICAgICAgdGhpcy5fZG9jdW1lbnRTdGF0dXNlcyA9IHN0YXR1c2VzO1xuICAgICAgdGhpcy51c2VkS2V5cyQubmV4dChzdGF0dXNlcy5tYXAoc3RhdHVzID0+IHN0YXR1cy5rZXkpKTtcbiAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgfSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZmllbGRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29sdW1uQ29uZmlnW10+KFtdKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgQUNUSU9OX0lURU1TOiBBY3Rpb25JdGVtW10gPSBbXG4gICAge1xuICAgICAgbGFiZWw6ICdpbnRlcmZhY2UuZWRpdCcsXG4gICAgICBjYWxsYmFjazogdGhpcy5vcGVuRWRpdE1vZGFsLmJpbmQodGhpcyksXG4gICAgICB0eXBlOiAnbm9ybWFsJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnaW50ZXJmYWNlLmRlbGV0ZScsXG4gICAgICBjYWxsYmFjazogdGhpcy5vcGVuRGVsZXRlTW9kYWwuYmluZCh0aGlzKSxcbiAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgIH0sXG4gIF07XG5cbiAgcHVibGljIHJlYWRvbmx5IENBUkJPTl9USEVNRSA9ICdnMTAnO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXNNb2RhbFR5cGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEb2N1bWVudGVuQXBpQ29sdW1uTW9kYWxUeXBlPignY2xvc2VkJyk7XG4gIHB1YmxpYyByZWFkb25seSBwcmVmaWxsU3RhdHVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29uZmlndXJlZENvbHVtbj4odW5kZWZpbmVkKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgY29sdW1uVG9VcGRhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb25maWd1cmVkQ29sdW1uPih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvd0Rpc2FibGVNb2RhbCQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgemd3RG9jdW1lbnRDb2x1bW5TZXJ2aWNlOiBEb2N1bWVudGVuQXBpQ29sdW1uU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSQuc3Vic2NyaWJlKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT4ge1xuICAgICAgemd3RG9jdW1lbnRDb2x1bW5TZXJ2aWNlLmdldENvbmZpZ3VyZWRDb2x1bW5zKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpLnN1YnNjcmliZShcbiAgICAgICAgY29uZmlndXJlZENvbHVtbnMgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZ3VyZWRDb2x1bW5zKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRGaWVsZHMoKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuRGVsZXRlTW9kYWwoc3RhdHVzOiBDb25maWd1cmVkQ29sdW1uKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5Ub1VwZGF0ZSQubmV4dChzdGF0dXMpO1xuICAgIHRoaXMuc2hvd0Rpc2FibGVNb2RhbCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuRWRpdE1vZGFsKHN0YXR1czogQ29uZmlndXJlZENvbHVtbik6IHZvaWQge1xuICAgIHRoaXMucHJlZmlsbFN0YXR1cyQubmV4dChzdGF0dXMpO1xuICAgIHRoaXMuc3RhdHVzTW9kYWxUeXBlJC5uZXh0KCdlZGl0Jyk7XG4gIH1cblxuICBwdWJsaWMgb3BlbkFkZE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdHVzTW9kYWxUeXBlJC5uZXh0KCdhZGQnKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZU1vZGFsKGNsb3NlTW9kYWxFdmVudDogRG9jdW1lbnRlbkFwaUNvbHVtbk1vZGFsVHlwZUNsb3NlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoY2xvc2VNb2RhbEV2ZW50ID09PSAnY2xvc2VBbmRSZWZyZXNoJykge1xuICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXR1c01vZGFsVHlwZSQubmV4dCgnY2xvc2VkJyk7XG4gIH1cblxuICBwdWJsaWMgY29uZmlybURlbGV0ZVN0YXR1cyhzdGF0dXM6IENvbmZpZ3VyZWRDb2x1bW4pOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgICB0aGlzLnpnd0RvY3VtZW50Q29sdW1uU2VydmljZS5kZWxldGVDb25maWd1cmVkQ29sdW1uKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIHN0YXR1cy5rZXkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25Nb3ZlUm93Q2xpY2soZXZlbnQ6IE1vdmVSb3dFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHtkaXJlY3Rpb24sIGluZGV4fSA9IGV2ZW50O1xuXG4gICAgY29uc3Qgb3JkZXJlZFN0YXR1c2VzOiBDb25maWd1cmVkQ29sdW1uW10gPVxuICAgICAgZGlyZWN0aW9uID09PSBNb3ZlUm93RGlyZWN0aW9uLlVQXG4gICAgICAgID8gdGhpcy5zd2FwU3RhdHVzZXModGhpcy5fZG9jdW1lbnRTdGF0dXNlcywgaW5kZXggLSAxLCBpbmRleClcbiAgICAgICAgOiB0aGlzLnN3YXBTdGF0dXNlcyh0aGlzLl9kb2N1bWVudFN0YXR1c2VzLCBpbmRleCwgaW5kZXggKyAxKTtcblxuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgICAgIHRoaXMuemd3RG9jdW1lbnRDb2x1bW5TZXJ2aWNlLnVwZGF0ZUNvbmZpZ3VyZWRDb2x1bW5zKFxuICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICAgIG9yZGVyZWRTdGF0dXNlc1xuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVsb2FkKHRydWUpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZChub0FuaW1hdGlvbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5fcmVsb2FkJC5uZXh0KG5vQW5pbWF0aW9uID8gJ25vQW5pbWF0aW9uJyA6IG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzd2FwU3RhdHVzZXMoXG4gICAgc3RhdHVzZXM6IENvbmZpZ3VyZWRDb2x1bW5bXSxcbiAgICBpbmRleDE6IG51bWJlcixcbiAgICBpbmRleDI6IG51bWJlclxuICApOiBDb25maWd1cmVkQ29sdW1uW10ge1xuICAgIGNvbnN0IHRlbXAgPSBbLi4uc3RhdHVzZXNdO1xuICAgIHRlbXBbaW5kZXgxXSA9IHRlbXAuc3BsaWNlKGluZGV4MiwgMSwgdGVtcFtpbmRleDFdKVswXTtcblxuICAgIHJldHVybiB0ZW1wO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RmllbGRzKCk6IHZvaWQge1xuICAgIHRoaXMuZmllbGRzJC5uZXh0KFtcbiAgICAgIHtcbiAgICAgICAga2V5OiAndGl0bGUnLFxuICAgICAgICBsYWJlbDogJ2Rvc3NpZXJNYW5hZ2VtZW50LnN0YXR1c2VzLmNvbHVtbnMudGl0bGUnLFxuICAgICAgICB2aWV3VHlwZTogVmlld1R5cGUuVEVYVCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ2tleScsXG4gICAgICAgIGxhYmVsOiAnZG9zc2llck1hbmFnZW1lbnQuc3RhdHVzZXMuY29sdW1ucy5rZXknLFxuICAgICAgICB2aWV3VHlwZTogVmlld1R5cGUuVEVYVCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3Zpc2libGVJbkNhc2VMaXN0QnlEZWZhdWx0JyxcbiAgICAgICAgbGFiZWw6ICdkb3NzaWVyTWFuYWdlbWVudC5zdGF0dXNlcy5jb2x1bW5zLnZpc2libGUnLFxuICAgICAgICB2aWV3VHlwZTogVmlld1R5cGUuQk9PTEVBTixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5URU1QTEFURSxcbiAgICAgICAgdGVtcGxhdGU6IHRoaXMuY29sb3JDb2x1bW5UZW1wbGF0ZSxcbiAgICAgICAga2V5OiAnY29sb3InLFxuICAgICAgICBsYWJlbDogJ2Rvc3NpZXJNYW5hZ2VtZW50LnN0YXR1c2VzLmNvbHVtbnMuY29sb3InLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48dmFsdGltby1jYXJib24tbGlzdFxuICAqbmdJZj1cIntcbiAgICBsb2FkaW5nOiBsb2FkaW5nJCB8IGFzeW5jLFxuICAgIGRvY3VtZW50U3RhdHVzZXM6IGRvY3VtZW50U3RhdHVzZXMkIHwgYXN5bmNcbiAgfSBhcyBvYnNcIlxuICBbZmllbGRzXT1cImZpZWxkcyQgfCBhc3luY1wiXG4gIFtoZWFkZXJdPVwiZmFsc2VcIlxuICBbbG9hZGluZ109XCJvYnMubG9hZGluZ1wiXG4gIFttb3ZpbmdSb3dzRW5hYmxlZF09XCJ0cnVlXCJcbiAgW2FjdGlvbkl0ZW1zXT1cIkFDVElPTl9JVEVNU1wiXG4gIChyb3dDbGlja2VkKT1cIm9wZW5FZGl0TW9kYWwoJGV2ZW50KVwiXG4gIChtb3ZlUm93KT1cIm9uTW92ZVJvd0NsaWNrKCRldmVudClcIlxuPlxuICA8bmctY29udGFpbmVyXG4gICAgY2FyYm9uVG9vbGJhckNvbnRlbnRcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnM7IGNvbnRleHQ6IHtvYnM6IG9ic31cIlxuICA+PC9uZy1jb250YWluZXI+XG48L3ZhbHRpbW8tY2FyYm9uLWxpc3Q+XG5cbjx2YWx0aW1vLWRvY3VtZW50ZW4tYXBpLWNvbHVtbi1tb2RhbFxuICBbdHlwZV09XCJzdGF0dXNNb2RhbFR5cGUkIHwgYXN5bmNcIlxuICBbdXNlZEtleXNdPVwidXNlZEtleXMkIHwgYXN5bmNcIlxuICBbZG9jdW1lbnREZWZpbml0aW9uTmFtZV09XCJkb2N1bWVudERlZmluaXRpb25OYW1lJCB8IGFzeW5jXCJcbiAgKGNsb3NlTW9kYWxFdmVudCk9XCJjbG9zZU1vZGFsKCRldmVudClcIlxuPjwvdmFsdGltby1kb2N1bWVudGVuLWFwaS1jb2x1bW4tbW9kYWw+XG5cbjx2YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbFxuICBjb25maXJtQnV0dG9uVGV4dFRyYW5zbGF0aW9uS2V5PVwiaW50ZXJmYWNlLmRlbGV0ZVwiXG4gIGNvbmZpcm1CdXR0b25UeXBlPVwiZGFuZ2VyXCJcbiAgY29udGVudFRyYW5zbGF0aW9uS2V5PVwiZG9zc2llck1hbmFnZW1lbnQuc3RhdHVzZXMuZGVsZXRlVGV4dFwiXG4gIFtvdXRwdXRPbkNvbmZpcm1dPVwiY29sdW1uVG9VcGRhdGUkIHwgYXN5bmNcIlxuICBbc2hvd01vZGFsU3ViamVjdCRdPVwic2hvd0Rpc2FibGVNb2RhbCRcIlxuICB0aXRsZVRyYW5zbGF0aW9uS2V5PVwiaW50ZXJmYWNlLmRlbGV0ZVwiXG4gIChjb25maXJtRXZlbnQpPVwiY29uZmlybURlbGV0ZVN0YXR1cygkZXZlbnQpXCJcbj48L3ZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbnMgbGV0LW9icz1cIm9ic1wiPlxuICA8ZGl2IGNsYXNzPVwiZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHNfX2J1dHRvbnNcIj5cbiAgICA8YnV0dG9uIGNkc0J1dHRvbj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwib2JzLmxvYWRpbmdcIiAoY2xpY2spPVwib3BlbkFkZE1vZGFsKClcIj5cbiAgICAgIDxzdmcgY2RzSWNvbj1cImFkZFwiIHNpemU9XCIxNlwiIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIj48L3N2Zz5cblxuICAgICAge3sgJ2Rvc3NpZXJNYW5hZ2VtZW50LnN0YXR1c2VzLmFkZCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvbG9yQ29sdW1uVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxjZHMtdGFnIGNsYXNzPVwiY2RzLXRhZy0tbm8tbWFyZ2luXCIgW3R5cGVdPVwiZGF0YT8uaXRlbT8udGFnVHlwZVwiPlxuICAgIHt7ICdpbnRlcmZhY2UudGFnVHlwZS4nICsgZGF0YT8uaXRlbT8udGFnVHlwZSB8IHRyYW5zbGF0ZSB9fVxuICA8L2Nkcy10YWc+XG48L25nLXRlbXBsYXRlPlxuIl19
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktY29sdW1ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3pndy9zcmMvbGliL21vZHVsZXMvZG9jdW1lbnRlbi1hcGkvY29tcG9uZW50cy9kb2N1bWVudGVuLWFwaS1jb2x1bW5zL2RvY3VtZW50ZW4tYXBpLWNvbHVtbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktY29sdW1ucy9kb2N1bWVudGVuLWFwaS1jb2x1bW5zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUVMLGdCQUFnQixFQUVoQix1QkFBdUIsRUFDdkIsUUFBUSxHQUNULE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDOUUsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBTzdGLE9BQU8sRUFBQyxpQ0FBaUMsRUFBQyxNQUFNLHNFQUFzRSxDQUFDOzs7Ozs7OztBQW1CdkgsTUFBTSxPQUFPLDZCQUE2QjtJQVd4QyxJQUFXLHVCQUF1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ICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICBBY3Rpb25JdGVtLFxuICBDYXJib25MaXN0TW9kdWxlLFxuICBDb2x1bW5Db25maWcsXG4gIENvbmZpcm1hdGlvbk1vZGFsTW9kdWxlLFxuICBWaWV3VHlwZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge0J1dHRvbk1vZHVsZSwgSWNvbk1vZHVsZSwgVGFnTW9kdWxlfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgc3dpdGNoTWFwLCB0YXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQ29uZmlndXJlZENvbHVtbixcbiAgRG9jdW1lbnRlbkFwaUNvbHVtbk1vZGFsVHlwZSxcbiAgRG9jdW1lbnRlbkFwaUNvbHVtbk1vZGFsVHlwZUNsb3NlRXZlbnQsXG59IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlDb2x1bW5TZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlDb2x1bW5Nb2RhbENvbXBvbmVudH0gZnJvbSAnLi4vZG9jdW1lbnRlbi1hcGktY29sdW1uLW1vZGFsL2RvY3VtZW50ZW4tYXBpLWNvbHVtbi1tb2RhbC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvY3VtZW50ZW4tYXBpLWNvbHVtbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnRlbi1hcGktY29sdW1ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RvY3VtZW50ZW4tYXBpLWNvbHVtbnMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRG9jdW1lbnRlbkFwaUNvbHVtbk1vZGFsQ29tcG9uZW50LFxuICAgIENhcmJvbkxpc3RNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIENvbmZpcm1hdGlvbk1vZGFsTW9kdWxlLFxuICAgIFRhZ01vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgSWNvbk1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRlbkFwaUNvbHVtbnNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgnY29sdW1uS2V5VGVtcGxhdGUnKSBwdWJsaWMgcmVhZG9ubHkgY29sdW1uS2V5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ2RlZmF1bHRTb3J0VGVtcGxhdGUnKSBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdFNvcnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9yZWxvYWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudWxsIHwgJ25vQW5pbWF0aW9uJz4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnREZWZpbml0aW9uTmFtZSQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMucm91dGUucGFyYW1zLnBpcGUoXG4gICAgbWFwKHBhcmFtcyA9PiBwYXJhbXM/Lm5hbWUpLFxuICAgIGZpbHRlcihkb2NEZWZOYW1lID0+ICEhZG9jRGVmTmFtZSlcbiAgKTtcblxuICBwdWJsaWMgZ2V0IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUkO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgY29uZmlndXJlZENvbHVtbnMkOiBPYnNlcnZhYmxlPENvbmZpZ3VyZWRDb2x1bW5bXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl9kb2N1bWVudERlZmluaXRpb25OYW1lJCxcbiAgICB0aGlzLl9yZWxvYWQkLFxuICBdKS5waXBlKFxuICAgIHRhcCgoW18sIHJlbG9hZF0pID0+IHtcbiAgICAgIGlmIChyZWxvYWQgPT09IG51bGwpIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICB9KSxcbiAgICBzd2l0Y2hNYXAoKFtkb2N1bWVudERlZmluaXRpb25OYW1lXSkgPT5cbiAgICAgIHRoaXMuemd3RG9jdW1lbnRDb2x1bW5TZXJ2aWNlLmdldEFkbWluQ29uZmlndXJlZENvbHVtbnMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICApLFxuICAgIHRhcCgoKSA9PiB7XG4gICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIH0pXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZ3VyYWJsZUNvbHVtbnMkOiBPYnNlcnZhYmxlPENvbmZpZ3VyZWRDb2x1bW5bXT4gPVxuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKSA9PlxuICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICB0aGlzLnpnd0RvY3VtZW50Q29sdW1uU2VydmljZS5nZXRBZG1pbkNvbmZpZ3VyYWJsZUNvbHVtbnMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgICAgICAgdGhpcy5jb25maWd1cmVkQ29sdW1ucyQsXG4gICAgICAgIF0pXG4gICAgICApLFxuICAgICAgbWFwKChbY29uZmlndXJhYmxlQ29sdW1ucywgY29uZmlndXJlZENvbHVtbnNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyZWRLZXlzOiBzdHJpbmdbXSA9IGNvbmZpZ3VyZWRDb2x1bW5zLm1hcChcbiAgICAgICAgICAoY29sdW1uOiBDb25maWd1cmVkQ29sdW1uKSA9PiBjb2x1bW4ua2V5XG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYWJsZUNvbHVtbnMuZmlsdGVyKFxuICAgICAgICAgIChjb2x1bW46IENvbmZpZ3VyZWRDb2x1bW4pID0+ICFjb25maWd1cmVkS2V5cy5pbmNsdWRlcyhjb2x1bW4ua2V5KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gIHB1YmxpYyBmaWVsZHM6IENvbHVtbkNvbmZpZ1tdO1xuXG4gIHB1YmxpYyByZWFkb25seSBBQ1RJT05fSVRFTVM6IEFjdGlvbkl0ZW1bXSA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogJ2ludGVyZmFjZS5lZGl0JyxcbiAgICAgIGNhbGxiYWNrOiB0aGlzLm9wZW5FZGl0TW9kYWwuYmluZCh0aGlzKSxcbiAgICAgIHR5cGU6ICdub3JtYWwnLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdpbnRlcmZhY2UuZGVsZXRlJyxcbiAgICAgIGNhbGxiYWNrOiB0aGlzLm9wZW5EZWxldGVNb2RhbC5iaW5kKHRoaXMpLFxuICAgICAgdHlwZTogJ2RhbmdlcicsXG4gICAgfSxcbiAgXTtcblxuICBwdWJsaWMgcmVhZG9ubHkgQ0FSQk9OX1RIRU1FID0gJ2cxMCc7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbHVtbk1vZGFsVHlwZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERvY3VtZW50ZW5BcGlDb2x1bW5Nb2RhbFR5cGU+KCdjbG9zZWQnKTtcbiAgcHVibGljIHJlYWRvbmx5IHByZWZpbGxDb2x1bW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb25maWd1cmVkQ29sdW1uIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHB1YmxpYyByZWFkb25seSBjb2x1bW5Ub1VwZGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbmZpZ3VyZWRDb2x1bW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSBzaG93RGVsZXRlTW9kYWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSB6Z3dEb2N1bWVudENvbHVtblNlcnZpY2U6IERvY3VtZW50ZW5BcGlDb2x1bW5TZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZmllbGRzID0gW1xuICAgICAge1xuICAgICAgICBrZXk6ICdrZXknLFxuICAgICAgICBsYWJlbDogJ3pndy5jb2x1bW5zLmNvbHVtbicsXG4gICAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5URU1QTEFURSxcbiAgICAgICAgdGVtcGxhdGU6IHRoaXMuY29sdW1uS2V5VGVtcGxhdGUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdkZWZhdWx0U29ydCcsXG4gICAgICAgIGxhYmVsOiAnbGlzdENvbHVtbi5kZWZhdWx0U29ydCcsXG4gICAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5URU1QTEFURSxcbiAgICAgICAgdGVtcGxhdGU6IHRoaXMuZGVmYXVsdFNvcnRUZW1wbGF0ZSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuRGVsZXRlTW9kYWwoY29sdW1uOiBDb25maWd1cmVkQ29sdW1uKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5Ub1VwZGF0ZSQubmV4dChjb2x1bW4pO1xuICAgIHRoaXMuc2hvd0RlbGV0ZU1vZGFsJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIG9wZW5FZGl0TW9kYWwoY29sdW1uOiBDb25maWd1cmVkQ29sdW1uKTogdm9pZCB7XG4gICAgdGhpcy5wcmVmaWxsQ29sdW1uJC5uZXh0KGNvbHVtbik7XG4gICAgdGhpcy5jb2x1bW5Nb2RhbFR5cGUkLm5leHQoJ2VkaXQnKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuQWRkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5Nb2RhbFR5cGUkLm5leHQoJ2FkZCcpO1xuICAgIHRoaXMucHJlZmlsbENvbHVtbiQubmV4dCh1bmRlZmluZWQpO1xuICB9XG5cbiAgcHVibGljIG9uQ2xvc2VNb2RhbChjbG9zZU1vZGFsRXZlbnQ6IERvY3VtZW50ZW5BcGlDb2x1bW5Nb2RhbFR5cGVDbG9zZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGNsb3NlTW9kYWxFdmVudCA9PT0gJ2Nsb3NlQW5kUmVmcmVzaCcpIHRoaXMucmVsb2FkKCk7XG5cbiAgICB0aGlzLmNvbHVtbk1vZGFsVHlwZSQubmV4dCgnY2xvc2VkJyk7XG4gIH1cblxuICBwdWJsaWMgY29uZmlybURlbGV0ZVN0YXR1cyhjb2x1bW46IENvbmZpZ3VyZWRDb2x1bW4sIGRlZmluaXRpb25OYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnpnd0RvY3VtZW50Q29sdW1uU2VydmljZS5kZWxldGVDb2x1bW4oZGVmaW5pdGlvbk5hbWUsIGNvbHVtbi5rZXkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnJlbG9hZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uSXRlbXNSZW9yZGVyZWQoZGVmaW5pdGlvbk5hbWU6IHN0cmluZywgY29sdW1uczogQ29uZmlndXJlZENvbHVtbltdKTogdm9pZCB7XG4gICAgdGhpcy56Z3dEb2N1bWVudENvbHVtblNlcnZpY2UudXBkYXRlQ29uZmlndXJlZENvbHVtbnMoZGVmaW5pdGlvbk5hbWUsIGNvbHVtbnMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnJlbG9hZCh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkKG5vQW5pbWF0aW9uID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWxvYWQkLm5leHQobm9BbmltYXRpb24gPyAnbm9BbmltYXRpb24nIDogbnVsbCk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIntcbiAgICBjb2x1bW5Nb2RhbFR5cGU6IGNvbHVtbk1vZGFsVHlwZSQgfCBhc3luYyxcbiAgICBjb2x1bW5Ub1VwZGF0ZTogY29sdW1uVG9VcGRhdGUkIHwgYXN5bmMsXG4gICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgfCBhc3luYyxcbiAgICBjb25maWd1cmVkQ29sdW1uczogY29uZmlndXJlZENvbHVtbnMkIHwgYXN5bmMsXG4gICAgY29uZmlndXJhYmxlQ29sdW1uczogY29uZmlndXJhYmxlQ29sdW1ucyQgfCBhc3luYyxcbiAgICBsb2FkaW5nOiBsb2FkaW5nJCB8IGFzeW5jLFxuICAgIHByZWZpbGxDb2x1bW46IHByZWZpbGxDb2x1bW4kIHwgYXN5bmNcbiAgfSBhcyBvYnNcIlxuPlxuICA8dmFsdGltby1jYXJib24tbGlzdFxuICAgIFthY3Rpb25JdGVtc109XCJBQ1RJT05fSVRFTVNcIlxuICAgIFtmaWVsZHNdPVwiZmllbGRzXCJcbiAgICBbaGVhZGVyXT1cImZhbHNlXCJcbiAgICBbaXRlbXNdPVwib2JzLmNvbmZpZ3VyZWRDb2x1bW5zXCJcbiAgICBbbG9hZGluZ109XCJvYnMubG9hZGluZyB8fCAhZmllbGRzXCJcbiAgICBbbW92aW5nUm93c0VuYWJsZWRdPVwidHJ1ZVwiXG4gICAgKGl0ZW1zUmVvcmRlcmVkKT1cIm9uSXRlbXNSZW9yZGVyZWQob2JzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUsICRldmVudClcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciBjYXJib25Ub29sYmFyQ29udGVudD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZGRCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDx2YWx0aW1vLW5vLXJlc3VsdHNcbiAgICAgIFthY3Rpb25dPVwiYWRkQnV0dG9uXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCInemd3LmRvY3VtZW50cy5ub0NvbHVtbnMuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgIFt0aXRsZV09XCInemd3LmRvY3VtZW50cy5ub0NvbHVtbnMudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG4gIDwvdmFsdGltby1jYXJib24tbGlzdD5cblxuICA8dmFsdGltby1kb2N1bWVudGVuLWFwaS1jb2x1bW4tbW9kYWxcbiAgICBbYXZhaWxhYmxlQ29sdW1uc109XCJvYnMuY29uZmlndXJhYmxlQ29sdW1uc1wiXG4gICAgW2NvbmZpZ3VyZWRDb2x1bW5zXT1cIm9icy5jb25maWd1cmVkQ29sdW1uc1wiXG4gICAgW2RlZmluaXRpb25OYW1lXT1cIm9icy5kb2N1bWVudERlZmluaXRpb25OYW1lXCJcbiAgICBbcHJlZmlsbENvbHVtbl09XCJvYnMucHJlZmlsbENvbHVtblwiXG4gICAgW3R5cGVdPVwib2JzLmNvbHVtbk1vZGFsVHlwZVwiXG4gICAgKGNsb3NlTW9kYWwpPVwib25DbG9zZU1vZGFsKCRldmVudClcIlxuICA+PC92YWx0aW1vLWRvY3VtZW50ZW4tYXBpLWNvbHVtbi1tb2RhbD5cblxuICA8dmFsdGltby1jb25maXJtYXRpb24tbW9kYWxcbiAgICBjb25maXJtQnV0dG9uVGV4dFRyYW5zbGF0aW9uS2V5PVwiaW50ZXJmYWNlLmRlbGV0ZVwiXG4gICAgY29uZmlybUJ1dHRvblR5cGU9XCJkYW5nZXJcIlxuICAgIGNvbnRlbnRUcmFuc2xhdGlvbktleT1cInpndy5jb2x1bW5zLmRlbGV0ZVRleHRcIlxuICAgIFtvdXRwdXRPbkNvbmZpcm1dPVwiY29sdW1uVG9VcGRhdGUkIHwgYXN5bmNcIlxuICAgIFtzaG93TW9kYWxTdWJqZWN0JF09XCJzaG93RGVsZXRlTW9kYWwkXCJcbiAgICB0aXRsZVRyYW5zbGF0aW9uS2V5PVwiaW50ZXJmYWNlLmRlbGV0ZVwiXG4gICAgKGNvbmZpcm1FdmVudCk9XCJjb25maXJtRGVsZXRlU3RhdHVzKCRldmVudCwgb2JzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXCJcbiAgPjwvdmFsdGltby1jb25maXJtYXRpb24tbW9kYWw+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNhZGRCdXR0b24+XG4gIDxidXR0b24gY2RzQnV0dG9uPVwicHJpbWFyeVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nJCB8IGFzeW5jXCIgKGNsaWNrKT1cIm9wZW5BZGRNb2RhbCgpXCI+XG4gICAgPHN2ZyBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuXG4gICAge3sgJ3pndy5jb2x1bW5zLmFkZCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvbHVtbktleVRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICB7eyAnemd3LmRvY3VtZW50Q29sdW1ucy4nICsgZGF0YS5pdGVtLmtleSB8IHRyYW5zbGF0ZSB9fVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0U29ydFRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICB7e1xuICAgIGRhdGEuaXRlbS5kZWZhdWx0U29ydCA9PT0gbnVsbFxuICAgICAgPyAnLSdcbiAgICAgIDogKCdpbnRlcmZhY2Uuc29ydGluZy4nICsgKGRhdGEuaXRlbS5kZWZhdWx0U29ydCA9PT0gJ0FTQycgPyAnYXNjZW5kaW5nJyA6ICdkZXNjZW5kaW5nJylcbiAgICAgICAgfCB0cmFuc2xhdGUpXG4gIH19XG48L25nLXRlbXBsYXRlPlxuIl19