@valtimo/dossier 10.8.0 → 11.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.
- package/esm2022/lib/components/dossier-assign-user/dossier-assign-user.component.mjs +98 -0
- package/esm2022/lib/components/dossier-bulk-assign-modal/dossier-bulk-assign-modal.component.mjs +75 -0
- package/esm2022/lib/components/dossier-detail/dossier-detail.component.mjs +191 -0
- package/esm2022/lib/components/dossier-detail/tab/audit/audit.component.mjs +76 -0
- package/esm2022/lib/components/dossier-detail/tab/contact-moments/contact-moments.component.mjs +86 -0
- package/esm2022/lib/components/dossier-detail/tab/documenten-api-documents/documenten-api-documents.component.mjs +146 -0
- package/esm2022/lib/components/dossier-detail/tab/documents/documents.component.mjs +41 -0
- package/esm2022/lib/components/dossier-detail/tab/formio/formio.component.mjs +61 -0
- package/esm2022/lib/components/dossier-detail/tab/notes/notes.component.mjs +166 -0
- package/esm2022/lib/components/dossier-detail/tab/object-type/object-type.component.mjs +121 -0
- package/esm2022/lib/components/dossier-detail/tab/progress/progress.component.mjs +52 -0
- package/esm2022/lib/components/dossier-detail/tab/s3-documents/s3-documents.component.mjs +136 -0
- package/esm2022/lib/components/dossier-detail/tab/summary/summary.component.mjs +134 -0
- package/esm2022/lib/components/dossier-detail/tab/zaakobjecten/zaakobjecten.component.mjs +112 -0
- package/esm2022/lib/components/dossier-list/dossier-list.component.mjs +370 -0
- package/esm2022/lib/components/dossier-list-actions/dossier-list-actions.component.mjs +84 -0
- package/esm2022/lib/components/dossier-process-start-modal/dossier-process-start-modal.component.mjs +132 -0
- package/esm2022/lib/components/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.mjs +116 -0
- package/esm2022/lib/components/dossier-update/dossier-update.component.mjs +113 -0
- package/{esm2020 → esm2022}/lib/components/note-modal/note-modal.component.mjs +5 -5
- package/esm2022/lib/constants/case-tab-token.mjs +19 -0
- package/esm2022/lib/constants/index.mjs +3 -0
- package/esm2022/lib/constants/tab.mjs +42 -0
- package/esm2022/lib/dossier-routing.module.mjs +76 -0
- package/esm2022/lib/dossier.module.mjs +288 -0
- package/esm2022/lib/models/candidate-user.model.mjs +17 -0
- package/esm2022/lib/models/dossier-detail-tab.model.mjs +27 -0
- package/{esm2020 → esm2022}/lib/models/dossier-parameters.model.mjs +1 -1
- package/esm2022/lib/models/index.mjs +23 -0
- package/esm2022/lib/models/tab-api.model.mjs +23 -0
- package/esm2022/lib/models/tabs.model.mjs +116 -0
- package/esm2022/lib/permissions/dossier-detail.permissions.mjs +55 -0
- package/esm2022/lib/permissions/index.mjs +17 -0
- package/esm2022/lib/pipes/index.mjs +17 -0
- package/esm2022/lib/pipes/tab-translate/index.mjs +18 -0
- package/esm2022/lib/pipes/tab-translate/tab-translate-pipe.module.mjs +33 -0
- package/esm2022/lib/pipes/tab-translate/tab-translate.pipe.mjs +41 -0
- package/esm2022/lib/services/dossier-bulk-assign.service.mjs +35 -0
- package/esm2022/lib/services/dossier-column.service.mjs +98 -0
- package/esm2022/lib/services/dossier-list-assignee.service.mjs +89 -0
- package/esm2022/lib/services/dossier-list-pagination.service.mjs +119 -0
- package/esm2022/lib/services/dossier-list-search.service.mjs +59 -0
- package/esm2022/lib/services/dossier-list.service.mjs +74 -0
- package/esm2022/lib/services/dossier-parameter.service.mjs +165 -0
- package/esm2022/lib/services/dossier-tab-api.service.mjs +23 -0
- package/esm2022/lib/services/dossier-tab.service.mjs +130 -0
- package/esm2022/lib/services/dossier.service.mjs +58 -0
- package/{esm2020 → esm2022}/lib/services/file-sort.service.mjs +4 -4
- package/esm2022/lib/services/index.mjs +27 -0
- package/esm2022/lib/services/notes.service.mjs +76 -0
- package/{esm2020 → esm2022}/lib/services/zaakobjecten.service.mjs +4 -4
- package/esm2022/public_api.mjs +34 -0
- package/fesm2022/valtimo-dossier.mjs +3979 -0
- package/fesm2022/valtimo-dossier.mjs.map +1 -0
- package/lib/components/dossier-assign-user/dossier-assign-user.component.d.ts +28 -0
- package/lib/components/dossier-assign-user/dossier-assign-user.component.d.ts.map +1 -0
- package/lib/components/dossier-bulk-assign-modal/dossier-bulk-assign-modal.component.d.ts +22 -0
- package/lib/components/dossier-bulk-assign-modal/dossier-bulk-assign-modal.component.d.ts.map +1 -0
- package/lib/{dossier-detail → components/dossier-detail}/dossier-detail.component.d.ts +36 -33
- package/lib/components/dossier-detail/dossier-detail.component.d.ts.map +1 -0
- package/lib/{dossier-detail → components/dossier-detail}/tab/audit/audit.component.d.ts +1 -1
- package/lib/components/dossier-detail/tab/audit/audit.component.d.ts.map +1 -0
- package/lib/{dossier-detail → components/dossier-detail}/tab/contact-moments/contact-moments.component.d.ts +1 -1
- package/lib/components/dossier-detail/tab/contact-moments/contact-moments.component.d.ts.map +1 -0
- package/lib/{dossier-detail → components/dossier-detail}/tab/documenten-api-documents/documenten-api-documents.component.d.ts +3 -4
- package/lib/components/dossier-detail/tab/documenten-api-documents/documenten-api-documents.component.d.ts.map +1 -0
- package/lib/{dossier-detail → components/dossier-detail}/tab/documents/documents.component.d.ts +1 -1
- package/lib/components/dossier-detail/tab/documents/documents.component.d.ts.map +1 -0
- package/lib/components/dossier-detail/tab/formio/formio.component.d.ts +20 -0
- package/lib/components/dossier-detail/tab/formio/formio.component.d.ts.map +1 -0
- package/lib/{dossier-detail → components/dossier-detail}/tab/notes/notes.component.d.ts +19 -12
- package/lib/components/dossier-detail/tab/notes/notes.component.d.ts.map +1 -0
- package/lib/{dossier-detail → components/dossier-detail}/tab/object-type/object-type.component.d.ts +5 -5
- package/lib/components/dossier-detail/tab/object-type/object-type.component.d.ts.map +1 -0
- package/lib/{dossier-detail → components/dossier-detail}/tab/progress/progress.component.d.ts +1 -1
- package/lib/components/dossier-detail/tab/progress/progress.component.d.ts.map +1 -0
- package/lib/{dossier-detail → components/dossier-detail}/tab/s3-documents/s3-documents.component.d.ts +3 -3
- package/lib/components/dossier-detail/tab/s3-documents/s3-documents.component.d.ts.map +1 -0
- package/lib/{dossier-detail → components/dossier-detail}/tab/summary/summary.component.d.ts +8 -4
- package/lib/components/dossier-detail/tab/summary/summary.component.d.ts.map +1 -0
- package/lib/{dossier-detail → components/dossier-detail}/tab/zaakobjecten/zaakobjecten.component.d.ts +5 -5
- package/lib/components/dossier-detail/tab/zaakobjecten/zaakobjecten.component.d.ts.map +1 -0
- package/lib/components/dossier-list/dossier-list.component.d.ts +94 -0
- package/lib/components/dossier-list/dossier-list.component.d.ts.map +1 -0
- package/lib/{dossier-list-actions → components/dossier-list-actions}/dossier-list-actions.component.d.ts +6 -7
- package/lib/components/dossier-list-actions/dossier-list-actions.component.d.ts.map +1 -0
- package/lib/{dossier-process-start-modal → components/dossier-process-start-modal}/dossier-process-start-modal.component.d.ts +4 -7
- package/lib/components/dossier-process-start-modal/dossier-process-start-modal.component.d.ts.map +1 -0
- package/lib/{dossier-supporting-process-start-modal → components/dossier-supporting-process-start-modal}/dossier-supporting-process-start-modal.component.d.ts +4 -7
- package/lib/components/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.d.ts.map +1 -0
- package/lib/{dossier-update → components/dossier-update}/dossier-update.component.d.ts +2 -2
- package/lib/components/dossier-update/dossier-update.component.d.ts.map +1 -0
- package/lib/components/note-modal/note-modal.component.d.ts +3 -3
- package/lib/components/note-modal/note-modal.component.d.ts.map +1 -1
- package/lib/constants/case-tab-token.d.ts +5 -0
- package/lib/constants/case-tab-token.d.ts.map +1 -0
- package/lib/constants/index.d.ts +3 -0
- package/lib/constants/index.d.ts.map +1 -0
- package/lib/constants/tab.d.ts +7 -0
- package/lib/constants/tab.d.ts.map +1 -0
- package/lib/dossier-routing.module.d.ts.map +1 -1
- package/lib/dossier.module.d.ts +35 -33
- package/lib/dossier.module.d.ts.map +1 -1
- package/lib/models/candidate-user.model.d.ts +7 -0
- package/lib/models/candidate-user.model.d.ts.map +1 -0
- package/lib/models/dossier-detail-tab.model.d.ts +18 -0
- package/lib/models/dossier-detail-tab.model.d.ts.map +1 -0
- package/lib/models/dossier-parameters.model.d.ts +0 -1
- package/lib/models/dossier-parameters.model.d.ts.map +1 -1
- package/lib/models/index.d.ts +5 -2
- package/lib/models/index.d.ts.map +1 -1
- package/lib/models/search.model.d.ts +3 -3
- package/lib/models/search.model.d.ts.map +1 -1
- package/lib/models/tab-api.model.d.ts +13 -0
- package/lib/models/tab-api.model.d.ts.map +1 -0
- package/lib/models/tabs.model.d.ts +11 -10
- package/lib/models/tabs.model.d.ts.map +1 -1
- package/lib/permissions/dossier-detail.permissions.d.ts +14 -0
- package/lib/permissions/dossier-detail.permissions.d.ts.map +1 -0
- package/lib/permissions/index.d.ts +2 -0
- package/lib/permissions/index.d.ts.map +1 -0
- package/lib/pipes/index.d.ts +2 -0
- package/lib/pipes/index.d.ts.map +1 -0
- package/lib/pipes/tab-translate/index.d.ts +3 -0
- package/lib/pipes/tab-translate/index.d.ts.map +1 -0
- package/lib/pipes/tab-translate/tab-translate-pipe.module.d.ts +9 -0
- package/lib/pipes/tab-translate/tab-translate-pipe.module.d.ts.map +1 -0
- package/lib/pipes/tab-translate/tab-translate.pipe.d.ts +13 -0
- package/lib/pipes/tab-translate/tab-translate.pipe.d.ts.map +1 -0
- package/lib/services/dossier-bulk-assign.service.d.ts +17 -0
- package/lib/services/dossier-bulk-assign.service.d.ts.map +1 -0
- package/lib/services/dossier-column.service.d.ts +1 -1
- package/lib/services/dossier-column.service.d.ts.map +1 -1
- package/lib/services/dossier-list-assignee.service.d.ts +5 -4
- package/lib/services/dossier-list-assignee.service.d.ts.map +1 -1
- package/lib/services/dossier-list-pagination.service.d.ts +2 -2
- package/lib/services/dossier-list-pagination.service.d.ts.map +1 -1
- package/lib/services/dossier-list-search.service.d.ts +0 -3
- package/lib/services/dossier-list-search.service.d.ts.map +1 -1
- package/lib/services/dossier-list.service.d.ts +6 -0
- package/lib/services/dossier-list.service.d.ts.map +1 -1
- package/lib/services/dossier-parameter.service.d.ts.map +1 -1
- package/lib/services/dossier-tab-api.service.d.ts +15 -0
- package/lib/services/dossier-tab-api.service.d.ts.map +1 -0
- package/lib/services/dossier-tab.service.d.ts +31 -0
- package/lib/services/dossier-tab.service.d.ts.map +1 -0
- package/lib/{dossier.service.d.ts → services/dossier.service.d.ts} +5 -1
- package/lib/services/dossier.service.d.ts.map +1 -0
- package/lib/services/index.d.ts +4 -1
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/notes.service.d.ts.map +1 -1
- package/lib/services/zaakobjecten.service.d.ts.map +1 -1
- package/package.json +13 -19
- package/public_api.d.ts +13 -14
- package/public_api.d.ts.map +1 -1
- package/esm2020/lib/dossier-assign-user/dossier-assign-user.component.mjs +0 -126
- package/esm2020/lib/dossier-detail/dossier-detail.component.mjs +0 -175
- package/esm2020/lib/dossier-detail/tab/audit/audit.component.mjs +0 -76
- package/esm2020/lib/dossier-detail/tab/contact-moments/contact-moments.component.mjs +0 -86
- package/esm2020/lib/dossier-detail/tab/documenten-api-documents/documenten-api-documents.component.mjs +0 -147
- package/esm2020/lib/dossier-detail/tab/documents/documents.component.mjs +0 -41
- package/esm2020/lib/dossier-detail/tab/notes/notes.component.mjs +0 -153
- package/esm2020/lib/dossier-detail/tab/object-type/object-type.component.mjs +0 -122
- package/esm2020/lib/dossier-detail/tab/progress/progress.component.mjs +0 -51
- package/esm2020/lib/dossier-detail/tab/s3-documents/s3-documents.component.mjs +0 -134
- package/esm2020/lib/dossier-detail/tab/summary/summary.component.mjs +0 -124
- package/esm2020/lib/dossier-detail/tab/zaakobjecten/zaakobjecten.component.mjs +0 -113
- package/esm2020/lib/dossier-detail-tab-enum.mjs +0 -26
- package/esm2020/lib/dossier-list/dossier-list.component.mjs +0 -224
- package/esm2020/lib/dossier-list-actions/dossier-list-actions.component.mjs +0 -86
- package/esm2020/lib/dossier-process-start-modal/dossier-process-start-modal.component.mjs +0 -192
- package/esm2020/lib/dossier-routing.module.mjs +0 -66
- package/esm2020/lib/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.mjs +0 -181
- package/esm2020/lib/dossier-update/dossier-update.component.mjs +0 -113
- package/esm2020/lib/dossier.config.mjs +0 -29
- package/esm2020/lib/dossier.module.mjs +0 -259
- package/esm2020/lib/dossier.service.mjs +0 -50
- package/esm2020/lib/models/index.mjs +0 -20
- package/esm2020/lib/models/tabs.model.mjs +0 -112
- package/esm2020/lib/services/dossier-column.service.mjs +0 -100
- package/esm2020/lib/services/dossier-list-assignee.service.mjs +0 -82
- package/esm2020/lib/services/dossier-list-pagination.service.mjs +0 -116
- package/esm2020/lib/services/dossier-list-search.service.mjs +0 -66
- package/esm2020/lib/services/dossier-list.service.mjs +0 -56
- package/esm2020/lib/services/dossier-parameter.service.mjs +0 -167
- package/esm2020/lib/services/index.mjs +0 -24
- package/esm2020/lib/services/notes.service.mjs +0 -76
- package/esm2020/lib/tab.service.mjs +0 -80
- package/esm2020/public_api.mjs +0 -35
- package/fesm2015/valtimo-dossier.mjs +0 -3348
- package/fesm2015/valtimo-dossier.mjs.map +0 -1
- package/fesm2020/valtimo-dossier.mjs +0 -3447
- package/fesm2020/valtimo-dossier.mjs.map +0 -1
- package/lib/dossier-assign-user/dossier-assign-user.component.d.ts +0 -34
- package/lib/dossier-assign-user/dossier-assign-user.component.d.ts.map +0 -1
- package/lib/dossier-detail/dossier-detail.component.d.ts.map +0 -1
- package/lib/dossier-detail/tab/audit/audit.component.d.ts.map +0 -1
- package/lib/dossier-detail/tab/contact-moments/contact-moments.component.d.ts.map +0 -1
- package/lib/dossier-detail/tab/documenten-api-documents/documenten-api-documents.component.d.ts.map +0 -1
- package/lib/dossier-detail/tab/documents/documents.component.d.ts.map +0 -1
- package/lib/dossier-detail/tab/notes/notes.component.d.ts.map +0 -1
- package/lib/dossier-detail/tab/object-type/object-type.component.d.ts.map +0 -1
- package/lib/dossier-detail/tab/progress/progress.component.d.ts.map +0 -1
- package/lib/dossier-detail/tab/s3-documents/s3-documents.component.d.ts.map +0 -1
- package/lib/dossier-detail/tab/summary/summary.component.d.ts.map +0 -1
- package/lib/dossier-detail/tab/zaakobjecten/zaakobjecten.component.d.ts.map +0 -1
- package/lib/dossier-detail-tab-enum.d.ts +0 -10
- package/lib/dossier-detail-tab-enum.d.ts.map +0 -1
- package/lib/dossier-list/dossier-list.component.d.ts +0 -66
- package/lib/dossier-list/dossier-list.component.d.ts.map +0 -1
- package/lib/dossier-list-actions/dossier-list-actions.component.d.ts.map +0 -1
- package/lib/dossier-process-start-modal/dossier-process-start-modal.component.d.ts.map +0 -1
- package/lib/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.d.ts.map +0 -1
- package/lib/dossier-update/dossier-update.component.d.ts.map +0 -1
- package/lib/dossier.config.d.ts +0 -4
- package/lib/dossier.config.d.ts.map +0 -1
- package/lib/dossier.service.d.ts.map +0 -1
- package/lib/tab.service.d.ts +0 -21
- package/lib/tab.service.d.ts.map +0 -1
- /package/{esm2020 → esm2022}/lib/models/notes.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/search.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/zaakobjecten.model.mjs +0 -0
- /package/{esm2020 → esm2022}/valtimo-dossier.mjs +0 -0
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2015-2023 Ritense BV, the Netherlands.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { Component, ViewChild } from '@angular/core';
|
|
17
|
+
import { CarbonListComponent, } from '@valtimo/components';
|
|
18
|
+
import { DossierListTab, } from '@valtimo/config';
|
|
19
|
+
import { AdvancedDocumentSearchRequestImpl, } from '@valtimo/document';
|
|
20
|
+
import { Tabs } from 'carbon-components-angular';
|
|
21
|
+
import { isEqual } from 'lodash';
|
|
22
|
+
import { BehaviorSubject, combineLatest, distinctUntilChanged, filter, forkJoin, map, of, switchMap, take, tap, } from 'rxjs';
|
|
23
|
+
import { DossierListActionsComponent } from '../dossier-list-actions/dossier-list-actions.component';
|
|
24
|
+
import { CAN_CREATE_CASE_PERMISSION, DOSSIER_DETAIL_PERMISSION_RESOURCE } from '../../permissions';
|
|
25
|
+
import { DossierColumnService, DossierListAssigneeService, DossierListPaginationService, DossierListSearchService, DossierListService, DossierParameterService, } from '../../services';
|
|
26
|
+
import * as i0 from "@angular/core";
|
|
27
|
+
import * as i1 from "../../services";
|
|
28
|
+
import * as i2 from "@valtimo/components";
|
|
29
|
+
import * as i3 from "@valtimo/config";
|
|
30
|
+
import * as i4 from "@valtimo/document";
|
|
31
|
+
import * as i5 from "@angular/router";
|
|
32
|
+
import * as i6 from "@ngx-translate/core";
|
|
33
|
+
import * as i7 from "@valtimo/access-control";
|
|
34
|
+
import * as i8 from "@angular/common";
|
|
35
|
+
import * as i9 from "carbon-components-angular";
|
|
36
|
+
import * as i10 from "../dossier-bulk-assign-modal/dossier-bulk-assign-modal.component";
|
|
37
|
+
import * as i11 from "../dossier-list-actions/dossier-list-actions.component";
|
|
38
|
+
export class DossierListComponent {
|
|
39
|
+
constructor(assigneeService, breadcrumbService, bulkAssignService, columnService, configService, documentService, listService, pageTitleService, paginationService, parameterService, route, router, searchService, translateService, permissionService) {
|
|
40
|
+
this.assigneeService = assigneeService;
|
|
41
|
+
this.breadcrumbService = breadcrumbService;
|
|
42
|
+
this.bulkAssignService = bulkAssignService;
|
|
43
|
+
this.columnService = columnService;
|
|
44
|
+
this.configService = configService;
|
|
45
|
+
this.documentService = documentService;
|
|
46
|
+
this.listService = listService;
|
|
47
|
+
this.pageTitleService = pageTitleService;
|
|
48
|
+
this.paginationService = paginationService;
|
|
49
|
+
this.parameterService = parameterService;
|
|
50
|
+
this.route = route;
|
|
51
|
+
this.router = router;
|
|
52
|
+
this.searchService = searchService;
|
|
53
|
+
this.translateService = translateService;
|
|
54
|
+
this.permissionService = permissionService;
|
|
55
|
+
this.activeTab = null;
|
|
56
|
+
this.loadingFields = true;
|
|
57
|
+
this.loadingPagination = true;
|
|
58
|
+
this.loadingSearchFields = true;
|
|
59
|
+
this.loadingAssigneeFilter = true;
|
|
60
|
+
this.loadingDocumentItems = true;
|
|
61
|
+
this.visibleDossierTabs = null;
|
|
62
|
+
this.defaultTabs = [
|
|
63
|
+
DossierListTab.ALL,
|
|
64
|
+
DossierListTab.MINE,
|
|
65
|
+
DossierListTab.OPEN,
|
|
66
|
+
];
|
|
67
|
+
this.tableTranslations = {
|
|
68
|
+
select: {
|
|
69
|
+
single: 'dossier.select.single',
|
|
70
|
+
multiple: 'dossier.select.multiple',
|
|
71
|
+
},
|
|
72
|
+
pagination: {
|
|
73
|
+
itemsPerPage: 'dossier.pagination.itemsPerPage',
|
|
74
|
+
totalItem: 'dossier.pagination.totalItem',
|
|
75
|
+
totalItems: 'dossier.pagination.totalItems',
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
this.noResultsMessage$ = new BehaviorSubject({
|
|
79
|
+
description: 'dossier.noResults.ALL.description',
|
|
80
|
+
isSearchResult: false,
|
|
81
|
+
title: 'dossier.noResults.ALL.title',
|
|
82
|
+
});
|
|
83
|
+
this.showAssignModal$ = new BehaviorSubject(false);
|
|
84
|
+
this.showChangePageModal$ = new BehaviorSubject(false);
|
|
85
|
+
this.showChangeTabModal$ = new BehaviorSubject(false);
|
|
86
|
+
this.searchFields$ = this.searchService.documentSearchFields$.pipe(tap(() => {
|
|
87
|
+
this.loadingSearchFields = false;
|
|
88
|
+
}));
|
|
89
|
+
this.documentDefinitionName$ = this.listService.documentDefinitionName$;
|
|
90
|
+
this.canCreateDocument$ = this.documentDefinitionName$.pipe(switchMap(documentDefinitionName => this.permissionService.requestPermission(CAN_CREATE_CASE_PERMISSION, {
|
|
91
|
+
resource: DOSSIER_DETAIL_PERMISSION_RESOURCE.jsonSchemaDocumentDefinition,
|
|
92
|
+
identifier: documentDefinitionName,
|
|
93
|
+
})));
|
|
94
|
+
this.selectedDocumentIds$ = new BehaviorSubject([]);
|
|
95
|
+
this.schema$ = this.listService.documentDefinitionName$.pipe(switchMap(documentDefinitionName => this.documentService.getDocumentDefinition(documentDefinitionName)), map(documentDefinition => documentDefinition?.schema), tap(schema => {
|
|
96
|
+
if (schema?.title) {
|
|
97
|
+
this.pageTitleService.setCustomPageTitle(schema?.title, true);
|
|
98
|
+
}
|
|
99
|
+
}));
|
|
100
|
+
this.searchFieldValues$ = this.parameterService.searchFieldValues$;
|
|
101
|
+
this.assigneeFilter$ = this.assigneeService.assigneeFilter$.pipe(tap(assigneeFilter => (this.activeTab = assigneeFilter)));
|
|
102
|
+
this.paginationChange$ = new BehaviorSubject(null);
|
|
103
|
+
this.tabChange$ = new BehaviorSubject(null);
|
|
104
|
+
this._pagination$ = this.paginationService.pagination$.pipe(tap(pagination => {
|
|
105
|
+
this.pagination = pagination;
|
|
106
|
+
this.loadingPagination = false;
|
|
107
|
+
}));
|
|
108
|
+
this._hasEnvColumnConfig$ = this.listService.hasEnvColumnConfig$;
|
|
109
|
+
this._hasApiColumnConfig$ = new BehaviorSubject(false);
|
|
110
|
+
this._canHaveAssignee$ = this.assigneeService.canHaveAssignee$;
|
|
111
|
+
this._columns$ = this.listService.documentDefinitionName$.pipe(switchMap(documentDefinitionName => this.columnService.getDefinitionColumns(documentDefinitionName)), map(res => {
|
|
112
|
+
this._hasApiColumnConfig$.next(res.hasApiConfig);
|
|
113
|
+
return res.columns;
|
|
114
|
+
}), tap(columns => {
|
|
115
|
+
this.listService.documentDefinitionName$.pipe(take(1)).subscribe(_ => {
|
|
116
|
+
this.paginationService.setPagination(columns);
|
|
117
|
+
});
|
|
118
|
+
}));
|
|
119
|
+
this.fields$ = combineLatest([
|
|
120
|
+
this._canHaveAssignee$,
|
|
121
|
+
this._columns$,
|
|
122
|
+
this._hasEnvColumnConfig$,
|
|
123
|
+
this._hasApiColumnConfig$,
|
|
124
|
+
this.translateService.stream('key'),
|
|
125
|
+
]).pipe(tap(([canHaveAssignee]) => {
|
|
126
|
+
this.canHaveAssignee = canHaveAssignee;
|
|
127
|
+
}), map(([canHaveAssignee, columns, hasEnvConfig, hasApiConfig]) => {
|
|
128
|
+
const filteredAssigneeColumns = this.assigneeService.filterAssigneeColumns(columns, canHaveAssignee);
|
|
129
|
+
const listFields = this.columnService.mapDefinitionColumnsToListFields(filteredAssigneeColumns, hasEnvConfig, hasApiConfig);
|
|
130
|
+
const fieldsToReturn = this.assigneeService.addAssigneeListField(columns, listFields, canHaveAssignee);
|
|
131
|
+
return fieldsToReturn;
|
|
132
|
+
}), tap(listFields => {
|
|
133
|
+
const defaultListField = listFields.find(field => field.default);
|
|
134
|
+
// set default sort state if no pagination query parameters for sorting are available
|
|
135
|
+
this.parameterService.queryPaginationParams$
|
|
136
|
+
.pipe(take(1))
|
|
137
|
+
.subscribe(queryPaginationParams => {
|
|
138
|
+
if (defaultListField && !queryPaginationParams?.sort?.isSorting) {
|
|
139
|
+
const sortDirection = typeof defaultListField.default === 'string' ? defaultListField.default : 'DESC';
|
|
140
|
+
this.paginationService.sortChanged({
|
|
141
|
+
isSorting: true,
|
|
142
|
+
state: { name: defaultListField.key, direction: sortDirection },
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}), tap(() => {
|
|
147
|
+
this.loadingFields = false;
|
|
148
|
+
}));
|
|
149
|
+
this._documentSearchRequest$ = combineLatest([this._pagination$, this.listService.documentDefinitionName$]).pipe(filter(([pagination]) => !!pagination), map(([pagination, documentDefinitionName]) => {
|
|
150
|
+
const page = pagination.page - 1;
|
|
151
|
+
return new AdvancedDocumentSearchRequestImpl(documentDefinitionName, page >= 0 ? page : 0, pagination.size, pagination.sort);
|
|
152
|
+
}));
|
|
153
|
+
this.documentItems$ = this.listService.checkRefresh$.pipe(switchMap(() => combineLatest([
|
|
154
|
+
this._documentSearchRequest$,
|
|
155
|
+
this.assigneeFilter$,
|
|
156
|
+
this.searchFieldValues$,
|
|
157
|
+
this.listService.forceRefresh$,
|
|
158
|
+
this._hasEnvColumnConfig$,
|
|
159
|
+
this._hasApiColumnConfig$,
|
|
160
|
+
])), distinctUntilChanged(([prevSearchRequest, prevAssigneeFilter, prevSearchFieldValues, prevForceRefresh], [currSearchRequest, currAssigneeFilter, currSearchFieldValues, currForceRefresh]) => isEqual({
|
|
161
|
+
...prevSearchRequest,
|
|
162
|
+
assignee: prevAssigneeFilter,
|
|
163
|
+
...prevSearchFieldValues,
|
|
164
|
+
forceRefresh: prevForceRefresh,
|
|
165
|
+
}, {
|
|
166
|
+
...currSearchRequest,
|
|
167
|
+
assignee: currAssigneeFilter,
|
|
168
|
+
...currSearchFieldValues,
|
|
169
|
+
forceRefresh: currForceRefresh,
|
|
170
|
+
})), switchMap(([documentSearchRequest, assigneeFilter, searchValues, _, hasEnvColumnConfig, hasApiColumnConfig,]) => {
|
|
171
|
+
const obsEnv = of(hasEnvColumnConfig);
|
|
172
|
+
const obsApi = of(hasApiColumnConfig);
|
|
173
|
+
if ((Object.keys(searchValues) || []).length > 0) {
|
|
174
|
+
return forkJoin({
|
|
175
|
+
documents: hasEnvColumnConfig || !hasApiColumnConfig
|
|
176
|
+
? this.documentService.getDocumentsSearch(documentSearchRequest, 'AND', assigneeFilter, this.searchService.mapSearchValuesToFilters(searchValues))
|
|
177
|
+
: this.documentService.getSpecifiedDocumentsSearch(documentSearchRequest, 'AND', assigneeFilter, this.searchService.mapSearchValuesToFilters(searchValues)),
|
|
178
|
+
hasEnvColumnConfig: obsEnv,
|
|
179
|
+
hasApiColumnConfig: obsApi,
|
|
180
|
+
isSearchResult: of(true),
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
return forkJoin({
|
|
184
|
+
documents: hasEnvColumnConfig || !hasApiColumnConfig
|
|
185
|
+
? this.documentService.getDocumentsSearch(documentSearchRequest, 'AND', assigneeFilter)
|
|
186
|
+
: this.documentService.getSpecifiedDocumentsSearch(documentSearchRequest, 'AND', assigneeFilter),
|
|
187
|
+
hasEnvColumnConfig: obsEnv,
|
|
188
|
+
hasApiColumnConfig: obsApi,
|
|
189
|
+
isSearchResult: of(false),
|
|
190
|
+
});
|
|
191
|
+
}), map((res) => {
|
|
192
|
+
this.paginationService.setCollectionSize(res.documents);
|
|
193
|
+
this.paginationService.checkPage(res.documents);
|
|
194
|
+
this.updateNoResultsMessage(res.isSearchResult);
|
|
195
|
+
return this.listService.mapDocuments(res.documents, res.hasEnvColumnConfig, res.hasApiColumnConfig);
|
|
196
|
+
}), tap(() => {
|
|
197
|
+
this.loadingAssigneeFilter = false;
|
|
198
|
+
this.loadingDocumentItems = false;
|
|
199
|
+
}));
|
|
200
|
+
}
|
|
201
|
+
ngOnInit() {
|
|
202
|
+
this.setVisibleTabs();
|
|
203
|
+
this.openDocumentDefinitionNameSubscription();
|
|
204
|
+
}
|
|
205
|
+
ngOnDestroy() {
|
|
206
|
+
this._documentDefinitionNameSubscription?.unsubscribe();
|
|
207
|
+
this.pageTitleService.enableReset();
|
|
208
|
+
}
|
|
209
|
+
trackByIndex(index) {
|
|
210
|
+
return index;
|
|
211
|
+
}
|
|
212
|
+
search(searchFieldValues) {
|
|
213
|
+
this.searchService.search(searchFieldValues);
|
|
214
|
+
}
|
|
215
|
+
rowClick(document) {
|
|
216
|
+
this.listService.documentDefinitionName$.pipe(take(1)).subscribe(documentDefinitionName => {
|
|
217
|
+
this.breadcrumbService.cacheQueryParams(`/dossiers/${documentDefinitionName}`, this.route.snapshot.queryParams);
|
|
218
|
+
this.router.navigate([
|
|
219
|
+
`/dossiers/${documentDefinitionName}/document/${document.id}`,
|
|
220
|
+
]);
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
tabChange(tab) {
|
|
224
|
+
if (!this.activeTab) {
|
|
225
|
+
this.activeTab = tab;
|
|
226
|
+
this.updateNoResultsMessage(false);
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
if (this.activeTab.toLowerCase() === tab.toLowerCase()) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
if (this.carbonList.model.selectedRowsCount()) {
|
|
233
|
+
this.showChangeTabModal$.next(true);
|
|
234
|
+
this.tabChange$.next(tab);
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
this.onChangeTabConfirm(tab);
|
|
238
|
+
}
|
|
239
|
+
onChangeTabCancel() {
|
|
240
|
+
if (!this.tabsComponent) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
const prevTab = this.tabsComponent.tabs.find((tab) => tab.id === this.activeTab);
|
|
244
|
+
if (!prevTab) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
this.tabsComponent.tabs.find((tab) => tab.active).active = false;
|
|
248
|
+
prevTab.active = true;
|
|
249
|
+
}
|
|
250
|
+
pageChange(page) {
|
|
251
|
+
if (this.carbonList?.model.selectedRowsCount()) {
|
|
252
|
+
this.showChangePageModal$.next(true);
|
|
253
|
+
this.paginationChange$.next({ page, size: this.pagination.size });
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
this.paginationService.pageChange(page);
|
|
257
|
+
}
|
|
258
|
+
pageSizeChange(size) {
|
|
259
|
+
if (this.carbonList?.model.selectedRowsCount()) {
|
|
260
|
+
this.showChangePageModal$.next(true);
|
|
261
|
+
this.paginationChange$.next({ page: this.pagination.page, size });
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
this.paginationService.pageSizeChange(size);
|
|
265
|
+
}
|
|
266
|
+
sortChanged(newSortState) {
|
|
267
|
+
this.paginationService.sortChanged(newSortState);
|
|
268
|
+
}
|
|
269
|
+
onChangeTabConfirm(tab) {
|
|
270
|
+
this.loadingAssigneeFilter = true;
|
|
271
|
+
this.activeTab = tab;
|
|
272
|
+
this.updateNoResultsMessage(false);
|
|
273
|
+
this.paginationService.setPage(1);
|
|
274
|
+
this.assigneeService.setAssigneeFilter(tab);
|
|
275
|
+
}
|
|
276
|
+
showAssignModal() {
|
|
277
|
+
this.selectedDocumentIds$.next(this.carbonList.selectedItems.map((document) => document.id));
|
|
278
|
+
this.showAssignModal$.next(true);
|
|
279
|
+
}
|
|
280
|
+
onCloseEvent(assigneeId, documentIds) {
|
|
281
|
+
this.showAssignModal$.next(false);
|
|
282
|
+
if (!assigneeId) {
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
this.bulkAssignService.bulkAssign(assigneeId, documentIds).subscribe(() => {
|
|
286
|
+
this.forceRefresh();
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
onChangePageConfirm(pagination) {
|
|
290
|
+
if (pagination.size !== this.pagination.size) {
|
|
291
|
+
this.paginationService.pageSizeChange(pagination.size);
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
this.paginationService.pageChange(pagination.page);
|
|
295
|
+
}
|
|
296
|
+
startDossier() {
|
|
297
|
+
this.listActionsComponent.startDossier();
|
|
298
|
+
}
|
|
299
|
+
forceRefresh() {
|
|
300
|
+
this.listService.forceRefresh();
|
|
301
|
+
}
|
|
302
|
+
openDocumentDefinitionNameSubscription() {
|
|
303
|
+
this._documentDefinitionNameSubscription = this.route.params
|
|
304
|
+
.pipe(map((params) => params?.documentDefinitionName), filter(docDefName => !!docDefName), distinctUntilChanged())
|
|
305
|
+
.subscribe(documentDefinitonName => {
|
|
306
|
+
if (this._previousDocumentDefinitionName) {
|
|
307
|
+
this.parameterService.clearParameters();
|
|
308
|
+
this.parameterService.clearSearchFieldValues();
|
|
309
|
+
}
|
|
310
|
+
this._previousDocumentDefinitionName = documentDefinitonName;
|
|
311
|
+
this.setLoading();
|
|
312
|
+
this.paginationService.clearPagination();
|
|
313
|
+
this.assigneeService.resetAssigneeFilter();
|
|
314
|
+
this.listService.setDocumentDefinitionName(documentDefinitonName);
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
setLoading() {
|
|
318
|
+
this.loadingFields = true;
|
|
319
|
+
this.loadingPagination = true;
|
|
320
|
+
this.loadingSearchFields = true;
|
|
321
|
+
this.loadingAssigneeFilter = true;
|
|
322
|
+
this.loadingDocumentItems = true;
|
|
323
|
+
}
|
|
324
|
+
setVisibleTabs() {
|
|
325
|
+
this.visibleDossierTabs = this.configService.config?.visibleDossierListTabs || null;
|
|
326
|
+
}
|
|
327
|
+
updateNoResultsMessage(isSearchResult) {
|
|
328
|
+
this.noResultsMessage$.next(isSearchResult
|
|
329
|
+
? {
|
|
330
|
+
description: 'dossier.noResults.search.description',
|
|
331
|
+
isSearchResult,
|
|
332
|
+
title: 'dossier.noResults.search.title',
|
|
333
|
+
}
|
|
334
|
+
: {
|
|
335
|
+
description: `dossier.noResults.${this.activeTab ?? 'ALL'}.description`,
|
|
336
|
+
isSearchResult,
|
|
337
|
+
title: `dossier.noResults.${this.activeTab ?? 'ALL'}.title`,
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DossierListComponent, deps: [{ token: i1.DossierListAssigneeService }, { token: i2.BreadcrumbService }, { token: i1.DossierBulkAssignService }, { token: i1.DossierColumnService }, { token: i3.ConfigService }, { token: i4.DocumentService }, { token: i1.DossierListService }, { token: i2.PageTitleService }, { token: i1.DossierListPaginationService }, { token: i1.DossierParameterService }, { token: i5.ActivatedRoute }, { token: i5.Router }, { token: i1.DossierListSearchService }, { token: i6.TranslateService }, { token: i7.PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
341
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DossierListComponent, selector: "valtimo-dossier-list", providers: [
|
|
342
|
+
DossierListService,
|
|
343
|
+
DossierColumnService,
|
|
344
|
+
DossierListAssigneeService,
|
|
345
|
+
DossierParameterService,
|
|
346
|
+
DossierListPaginationService,
|
|
347
|
+
DossierListSearchService,
|
|
348
|
+
], viewQueries: [{ propertyName: "carbonList", first: true, predicate: CarbonListComponent, descendants: true }, { propertyName: "listActionsComponent", first: true, predicate: DossierListActionsComponent, descendants: true }, { propertyName: "tabsComponent", first: true, predicate: Tabs, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 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 fields: fields$ | async,\n documentItems: documentItems$ | async,\n noResultsMessage: noResultsMessage$ | async,\n searchFields: searchFields$ | async,\n schema: schema$ | async,\n showAssignModal: showAssignModal$ | async,\n selectedDocumentIds: selectedDocumentIds$ | async,\n loaded:\n !loadingFields &&\n !loadingPagination &&\n !loadingSearchFields &&\n !loadingAssigneeFilter &&\n !loadingDocumentItems\n } as obs\"\n>\n <div class=\"main-content pt-0\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <valtimo-dossier-list-actions\n [loading]=\"!obs.loaded\"\n (formFlowComplete)=\"forceRefresh()\"\n ></valtimo-dossier-list-actions>\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngIf=\"obs.loaded; else loading\">\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <ng-container *ngTemplateOutlet=\"bulkAssignModal; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"changePageModal\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"changeTabModal\"></ng-container>\n</ng-container>\n\n<ng-template #searchFields let-obs=\"obs\">\n <div class=\"mb-3\">\n <valtimo-search-fields\n [searchFields]=\"obs.searchFields\"\n (doSearch)=\"search($event)\"\n [documentDefinitionName]=\"documentDefinitionName$ | async\"\n [defaultValues]=\"searchFieldValues$ | async\"\n [inputDisabled]=\"!obs.loaded\"\n ></valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [initialSortState]=\"pagination.sort\"\n [items]=\"obs.documentItems\"\n [pagination]=\"pagination\"\n paginationIdentifier=\"dossierList\"\n [showSelectionColumn]=\"canHaveAssignee\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <ng-container carbonToolbarActions>\n <button cdsButton=\"primary\" (click)=\"showAssignModal()\">\n {{ 'dossier.bulkAssign.assign' | translate }}\n </button>\n </ng-container>\n\n <div carbonToolbarContent>\n <ng-container *ngTemplateOutlet=\"dossierListActions\"></ng-container>\n </div>\n\n <valtimo-no-results\n [action]=\"obs.noResultsMessage.isSearchResult ? null : dossierListActions\"\n [description]=\"obs.noResultsMessage.description | translate\"\n [title]=\"obs.noResultsMessage.title | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"canHaveAssignee\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #tabs>\n <ng-container *ngIf=\"assigneeFilter$ | async as assigneeFilter\">\n <cds-tabs\n *ngIf=\"!visibleDossierTabs; else configuredTabs\"\n type=\"contained\"\n data-carbon-theme=\"g10\"\n class=\"dossier-list-tabs\"\n >\n <cds-tab\n *ngFor=\"let tab of defaultTabs; trackBy: trackByIndex\"\n [active]=\"assigneeFilter === tab\"\n heading=\"{{ 'dossier.tabs.' + tab | translate }}\"\n [id]=\"tab\"\n (selected)=\"tabChange(tab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n</ng-template>\n\n<ng-template #configuredTabs>\n <ng-container *ngIf=\"assigneeFilter$ | async as assigneeFilter\">\n <cds-tabs type=\"contained\" class=\"dossier-list-tabs\">\n <cds-tab\n *ngFor=\"let tab of visibleDossierTabs; trackBy: trackByIndex\"\n [active]=\"assigneeFilter === tab\"\n heading=\"{{ 'dossier.tabs.' + tab | translate }}\"\n [id]=\"tab\"\n (selected)=\"tabChange(tab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n</ng-template>\n\n<ng-template #loading\n ><valtimo-carbon-list [loading]=\"true\">\n <div tabs *ngIf=\"canHaveAssignee\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n </div> </valtimo-carbon-list\n></ng-template>\n\n<ng-template #bulkAssignModal let-obs=\"obs\">\n <valtimo-dossier-bulk-assign-modal\n [documentIds]=\"obs.selectedDocumentIds\"\n [open]=\"obs.showAssignModal\"\n (closeEvent)=\"onCloseEvent($event, obs.selectedDocumentIds)\"\n ></valtimo-dossier-bulk-assign-modal>\n</ng-template>\n\n<ng-template #changePageModal>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dossier.changePageModal.confirm\"\n contentTranslationKey=\"dossier.changePageModal.content\"\n [outputOnConfirm]=\"paginationChange$ | async\"\n [showModalSubject$]=\"showChangePageModal$\"\n titleTranslationKey=\"dossier.changePageModal.title\"\n (confirmEvent)=\"onChangePageConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #changeTabModal>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dossier.changeTabModal.confirm\"\n contentTranslationKey=\"dossier.changeTabModal.content\"\n [outputOnConfirm]=\"tabChange$ | async\"\n [showModalSubject$]=\"showChangeTabModal$\"\n titleTranslationKey=\"dossier.changeTabModal.title\"\n (cancelEvent)=\"onChangeTabCancel()\"\n (confirmEvent)=\"onChangeTabConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #dossierListActions>\n <button\n cdsButton=\"primary\"\n [disabled]=\"listActionsComponent?.disableStartDossierButton$ | async\"\n (click)=\"startDossier()\"\n >\n {{ 'Start Dossier' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n</ng-template>\n", styles: [".dossier-list-tabs cds-tab{display:none}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.SearchFieldsComponent, selector: "valtimo-search-fields", inputs: ["loading", "searchFields", "documentDefinitionName", "setValuesSubject$", "defaultValues", "inputDisabled"], outputs: ["doSearch"] }, { kind: "directive", type: i9.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i9.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm"], outputs: ["confirmEvent", "cancelEvent"] }, { kind: "component", type: i9.Tabs, selector: "cds-tabs, ibm-tabs", inputs: ["position", "cacheActive", "followFocus", "isNavigation", "ariaLabel", "ariaLabelledby", "type", "theme", "skeleton"] }, { kind: "component", type: i9.Tab, selector: "cds-tab, ibm-tab", inputs: ["heading", "title", "context", "active", "disabled", "tabIndex", "id", "cacheActive"], outputs: ["selected"] }, { kind: "component", type: i2.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "header", "initialSortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged"] }, { kind: "component", type: i2.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title"] }, { kind: "component", type: i10.DossierBulkAssignModalComponent, selector: "valtimo-dossier-bulk-assign-modal", inputs: ["documentIds", "open"], outputs: ["closeEvent"] }, { kind: "component", type: i11.DossierListActionsComponent, selector: "valtimo-dossier-list-actions", inputs: ["loading"], outputs: ["formFlowComplete"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] }); }
|
|
349
|
+
}
|
|
350
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DossierListComponent, decorators: [{
|
|
351
|
+
type: Component,
|
|
352
|
+
args: [{ selector: 'valtimo-dossier-list', providers: [
|
|
353
|
+
DossierListService,
|
|
354
|
+
DossierColumnService,
|
|
355
|
+
DossierListAssigneeService,
|
|
356
|
+
DossierParameterService,
|
|
357
|
+
DossierListPaginationService,
|
|
358
|
+
DossierListSearchService,
|
|
359
|
+
], template: "<!--\n ~ Copyright 2015-2023 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 fields: fields$ | async,\n documentItems: documentItems$ | async,\n noResultsMessage: noResultsMessage$ | async,\n searchFields: searchFields$ | async,\n schema: schema$ | async,\n showAssignModal: showAssignModal$ | async,\n selectedDocumentIds: selectedDocumentIds$ | async,\n loaded:\n !loadingFields &&\n !loadingPagination &&\n !loadingSearchFields &&\n !loadingAssigneeFilter &&\n !loadingDocumentItems\n } as obs\"\n>\n <div class=\"main-content pt-0\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <valtimo-dossier-list-actions\n [loading]=\"!obs.loaded\"\n (formFlowComplete)=\"forceRefresh()\"\n ></valtimo-dossier-list-actions>\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngIf=\"obs.loaded; else loading\">\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <ng-container *ngTemplateOutlet=\"bulkAssignModal; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"changePageModal\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"changeTabModal\"></ng-container>\n</ng-container>\n\n<ng-template #searchFields let-obs=\"obs\">\n <div class=\"mb-3\">\n <valtimo-search-fields\n [searchFields]=\"obs.searchFields\"\n (doSearch)=\"search($event)\"\n [documentDefinitionName]=\"documentDefinitionName$ | async\"\n [defaultValues]=\"searchFieldValues$ | async\"\n [inputDisabled]=\"!obs.loaded\"\n ></valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [initialSortState]=\"pagination.sort\"\n [items]=\"obs.documentItems\"\n [pagination]=\"pagination\"\n paginationIdentifier=\"dossierList\"\n [showSelectionColumn]=\"canHaveAssignee\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <ng-container carbonToolbarActions>\n <button cdsButton=\"primary\" (click)=\"showAssignModal()\">\n {{ 'dossier.bulkAssign.assign' | translate }}\n </button>\n </ng-container>\n\n <div carbonToolbarContent>\n <ng-container *ngTemplateOutlet=\"dossierListActions\"></ng-container>\n </div>\n\n <valtimo-no-results\n [action]=\"obs.noResultsMessage.isSearchResult ? null : dossierListActions\"\n [description]=\"obs.noResultsMessage.description | translate\"\n [title]=\"obs.noResultsMessage.title | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"canHaveAssignee\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #tabs>\n <ng-container *ngIf=\"assigneeFilter$ | async as assigneeFilter\">\n <cds-tabs\n *ngIf=\"!visibleDossierTabs; else configuredTabs\"\n type=\"contained\"\n data-carbon-theme=\"g10\"\n class=\"dossier-list-tabs\"\n >\n <cds-tab\n *ngFor=\"let tab of defaultTabs; trackBy: trackByIndex\"\n [active]=\"assigneeFilter === tab\"\n heading=\"{{ 'dossier.tabs.' + tab | translate }}\"\n [id]=\"tab\"\n (selected)=\"tabChange(tab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n</ng-template>\n\n<ng-template #configuredTabs>\n <ng-container *ngIf=\"assigneeFilter$ | async as assigneeFilter\">\n <cds-tabs type=\"contained\" class=\"dossier-list-tabs\">\n <cds-tab\n *ngFor=\"let tab of visibleDossierTabs; trackBy: trackByIndex\"\n [active]=\"assigneeFilter === tab\"\n heading=\"{{ 'dossier.tabs.' + tab | translate }}\"\n [id]=\"tab\"\n (selected)=\"tabChange(tab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n</ng-template>\n\n<ng-template #loading\n ><valtimo-carbon-list [loading]=\"true\">\n <div tabs *ngIf=\"canHaveAssignee\">\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n </div> </valtimo-carbon-list\n></ng-template>\n\n<ng-template #bulkAssignModal let-obs=\"obs\">\n <valtimo-dossier-bulk-assign-modal\n [documentIds]=\"obs.selectedDocumentIds\"\n [open]=\"obs.showAssignModal\"\n (closeEvent)=\"onCloseEvent($event, obs.selectedDocumentIds)\"\n ></valtimo-dossier-bulk-assign-modal>\n</ng-template>\n\n<ng-template #changePageModal>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dossier.changePageModal.confirm\"\n contentTranslationKey=\"dossier.changePageModal.content\"\n [outputOnConfirm]=\"paginationChange$ | async\"\n [showModalSubject$]=\"showChangePageModal$\"\n titleTranslationKey=\"dossier.changePageModal.title\"\n (confirmEvent)=\"onChangePageConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #changeTabModal>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dossier.changeTabModal.confirm\"\n contentTranslationKey=\"dossier.changeTabModal.content\"\n [outputOnConfirm]=\"tabChange$ | async\"\n [showModalSubject$]=\"showChangeTabModal$\"\n titleTranslationKey=\"dossier.changeTabModal.title\"\n (cancelEvent)=\"onChangeTabCancel()\"\n (confirmEvent)=\"onChangeTabConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #dossierListActions>\n <button\n cdsButton=\"primary\"\n [disabled]=\"listActionsComponent?.disableStartDossierButton$ | async\"\n (click)=\"startDossier()\"\n >\n {{ 'Start Dossier' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n</ng-template>\n", styles: [".dossier-list-tabs cds-tab{display:none}\n"] }]
|
|
360
|
+
}], ctorParameters: function () { return [{ type: i1.DossierListAssigneeService }, { type: i2.BreadcrumbService }, { type: i1.DossierBulkAssignService }, { type: i1.DossierColumnService }, { type: i3.ConfigService }, { type: i4.DocumentService }, { type: i1.DossierListService }, { type: i2.PageTitleService }, { type: i1.DossierListPaginationService }, { type: i1.DossierParameterService }, { type: i5.ActivatedRoute }, { type: i5.Router }, { type: i1.DossierListSearchService }, { type: i6.TranslateService }, { type: i7.PermissionService }]; }, propDecorators: { carbonList: [{
|
|
361
|
+
type: ViewChild,
|
|
362
|
+
args: [CarbonListComponent]
|
|
363
|
+
}], listActionsComponent: [{
|
|
364
|
+
type: ViewChild,
|
|
365
|
+
args: [DossierListActionsComponent]
|
|
366
|
+
}], tabsComponent: [{
|
|
367
|
+
type: ViewChild,
|
|
368
|
+
args: [Tabs]
|
|
369
|
+
}] } });
|
|
370
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL2NvbXBvbmVudHMvZG9zc2llci1saXN0L2Rvc3NpZXItbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItbGlzdC9kb3NzaWVyLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBQUMsU0FBUyxFQUFxQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJdEUsT0FBTyxFQUVMLG1CQUFtQixHQU1wQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFLTCxjQUFjLEdBSWYsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBRUwsaUNBQWlDLEdBS2xDLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFNLElBQUksRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDL0IsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUVILEVBQUUsRUFFRixTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBQ25HLE9BQU8sRUFBQywwQkFBMEIsRUFBRSxrQ0FBa0MsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pHLE9BQU8sRUFFTCxvQkFBb0IsRUFDcEIsMEJBQTBCLEVBQzFCLDRCQUE0QixFQUM1Qix3QkFB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SUFBSSxDQUN6QixjQUFjO1lBQ1osQ0FBQyxDQUFDO2dCQUNFLFdBQVcsRUFBRSxzQ0FBc0M7Z0JBQ25ELGNBQWM7Z0JBQ2QsS0FBSyxFQUFFLGdDQUFnQzthQUN4QztZQUNILENBQUMsQ0FBQztnQkFDRSxXQUFXLEVBQUUscUJBQXFCLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxjQUFjO2dCQUN2RSxjQUFjO2dCQUNkLEtBQUssRUFBRSxxQkFBcUIsSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLFFBQVE7YUFDNUQsQ0FDTixDQUFDO0lBQ0osQ0FBQzsrR0FoZVUsb0JBQW9CO21HQUFwQixvQkFBb0IsK0NBVHBCO1lBQ1Qsa0JBQWtCO1lBQ2xCLG9CQUFvQjtZQUNwQiwwQkFBMEI7WUFDMUIsdUJBQXVCO1lBQ3ZCLDRCQUE0QjtZQUM1Qix3QkFBd0I7U0FDekIsc0VBR1UsbUJBQW1CLHVGQUNuQiwyQkFBMkIsZ0ZBQzNCLElBQUksZ0RDM0ZqQixxOE1BMkxBOzs0RkRuR2Esb0JBQW9CO2tCQWJoQyxTQUFTOytCQUNFLHNCQUFzQixhQUdyQjt3QkFDVCxrQkFBa0I7d0JBQ2xCLG9CQUFvQjt3QkFDcEIsMEJBQTBCO3dCQUMxQix1QkFBdUI7d0JBQ3ZCLDRCQUE0Qjt3QkFDNUIsd0JBQXdCO3FCQUN6Qjs4akJBRytCLFVBQVU7c0JBQXpDLFNBQVM7dUJBQUMsbUJBQW1CO2dCQUNVLG9CQUFvQjtzQkFBM0QsU0FBUzt1QkFBQywyQkFBMkI7Z0JBQ3JCLGFBQWE7c0JBQTdCLFNBQVM7dUJBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge0NvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1Blcm1pc3Npb25TZXJ2aWNlfSBmcm9tICdAdmFsdGltby9hY2Nlc3MtY29udHJvbCc7XG5pbXBvcnQge1xuICBCcmVhZGNydW1iU2VydmljZSxcbiAgQ2FyYm9uTGlzdENvbXBvbmVudCxcbiAgQ2FyYm9uTGlzdFRyYW5zbGF0aW9ucyxcbiAgQ2FyYm9uUGFnaW5hdGlvblNlbGVjdGlvbixcbiAgTGlzdEZpZWxkLFxuICBQYWdlVGl0bGVTZXJ2aWNlLFxuICBQYWdpbmF0aW9uLFxufSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIEFzc2lnbmVlRmlsdGVyLFxuICBDb25maWdTZXJ2aWNlLFxuICBEZWZpbml0aW9uQ29sdW1uLFxuICBEaXJlY3Rpb24sXG4gIERvc3NpZXJMaXN0VGFiLFxuICBTZWFyY2hGaWVsZCxcbiAgU2VhcmNoRmllbGRWYWx1ZXMsXG4gIFNvcnRTdGF0ZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7XG4gIEFkdmFuY2VkRG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICBBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdEltcGwsXG4gIERvY3VtZW50LFxuICBEb2N1bWVudHMsXG4gIERvY3VtZW50U2VydmljZSxcbiAgU3BlY2lmaWVkRG9jdW1lbnRzLFxufSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge1RhYiwgVGFic30gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge2lzRXF1YWx9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZvcmtKb2luLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7RG9zc2llckxpc3RBY3Rpb25zQ29tcG9uZW50fSBmcm9tICcuLi9kb3NzaWVyLWxpc3QtYWN0aW9ucy9kb3NzaWVyLWxpc3QtYWN0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHtDQU5fQ1JFQVRFX0NBU0VfUEVSTUlTU0lPTiwgRE9TU0lFUl9ERVRBSUxfUEVSTUlTU0lPTl9SRVNPVVJDRX0gZnJvbSAnLi4vLi4vcGVybWlzc2lvbnMnO1xuaW1wb3J0IHtcbiAgRG9zc2llckJ1bGtBc3NpZ25TZXJ2aWNlLFxuICBEb3NzaWVyQ29sdW1uU2VydmljZSxcbiAgRG9zc2llckxpc3RBc3NpZ25lZVNlcnZpY2UsXG4gIERvc3NpZXJMaXN0UGFnaW5hdGlvblNlcnZpY2UsXG4gIERvc3NpZXJMaXN0U2VhcmNoU2VydmljZSxcbiAgRG9zc2llckxpc3RTZXJ2aWNlLFxuICBEb3NzaWVyUGFyYW1ldGVyU2VydmljZSxcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRGVmYXVsdFRhYnMgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvc3NpZXItbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3NzaWVyLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb3NzaWVyLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgRG9zc2llckxpc3RTZXJ2aWNlLFxuICAgIERvc3NpZXJDb2x1bW5TZXJ2aWNlLFxuICAgIERvc3NpZXJMaXN0QXNzaWduZWVTZXJ2aWNlLFxuICAgIERvc3NpZXJQYXJhbWV0ZXJTZXJ2aWNlLFxuICAgIERvc3NpZXJMaXN0UGFnaW5hdGlvblNlcnZpY2UsXG4gICAgRG9zc2llckxpc3RTZWFyY2hTZXJ2aWNlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZChDYXJib25MaXN0Q29tcG9uZW50KSBjYXJib25MaXN0OiBDYXJib25MaXN0Q29tcG9uZW50PERvY3VtZW50PjtcbiAgQFZpZXdDaGlsZChEb3NzaWVyTGlzdEFjdGlvbnNDb21wb25lbnQpIGxpc3RBY3Rpb25zQ29tcG9uZW50OiBEb3NzaWVyTGlzdEFjdGlvbnNDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoVGFicykgdGFic0NvbXBvbmVudDogVGFicztcblxuICBwdWJsaWMgYWN0aXZlVGFiOiBEb3NzaWVyTGlzdFRhYiA9IG51bGw7XG4gIHB1YmxpYyBsb2FkaW5nRmllbGRzID0gdHJ1ZTtcbiAgcHVibGljIGxvYWRpbmdQYWdpbmF0aW9uID0gdHJ1ZTtcbiAgcHVibGljIGxvYWRpbmdTZWFyY2hGaWVsZHMgPSB0cnVlO1xuICBwdWJsaWMgbG9hZGluZ0Fzc2lnbmVlRmlsdGVyID0gdHJ1ZTtcbiAgcHVibGljIGxvYWRpbmdEb2N1bWVudEl0ZW1zID0gdHJ1ZTtcbiAgcHVibGljIHBhZ2luYXRpb24hOiBQYWdpbmF0aW9uO1xuICBwdWJsaWMgY2FuSGF2ZUFzc2lnbmVlITogYm9vbGVhbjtcbiAgcHVibGljIHZpc2libGVEb3NzaWVyVGFiczogQXJyYXk8RG9zc2llckxpc3RUYWI+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRUYWJzOiBEb3NzaWVyTGlzdFRhYltdID0gW1xuICAgIERvc3NpZXJMaXN0VGFiLkFMTCxcbiAgICBEb3NzaWVyTGlzdFRhYi5NSU5FLFxuICAgIERvc3NpZXJMaXN0VGFiLk9QRU4sXG4gIF07XG5cbiAgcHVibGljIHJlYWRvbmx5IHRhYmxlVHJhbnNsYXRpb25zOiBDYXJib25MaXN0VHJhbnNsYXRpb25zID0ge1xuICAgIHNlbGVjdDoge1xuICAgICAgc2luZ2xlOiAnZG9zc2llci5zZWxlY3Quc2luZ2xlJyxcbiAgICAgIG11bHRpcGxlOiAnZG9zc2llci5zZWxlY3QubXVsdGlwbGUnLFxuICAgIH0sXG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgaXRlbXNQZXJQYWdlOiAnZG9zc2llci5wYWdpbmF0aW9uLml0ZW1zUGVyUGFnZScsXG4gICAgICB0b3RhbEl0ZW06ICdkb3NzaWVyLnBhZ2luYXRpb24udG90YWxJdGVtJyxcbiAgICAgIHRvdGFsSXRlbXM6ICdkb3NzaWVyLnBhZ2luYXRpb24udG90YWxJdGVtcycsXG4gICAgfSxcbiAgfTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbm9SZXN1bHRzTWVzc2FnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHtcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIGlzU2VhcmNoUmVzdWx0OiBib29sZWFuO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gIH0+KHtcbiAgICBkZXNjcmlwdGlvbjogJ2Rvc3NpZXIubm9SZXN1bHRzLkFMTC5kZXNjcmlwdGlvbicsXG4gICAgaXNTZWFyY2hSZXN1bHQ6IGZhbHNlLFxuICAgIHRpdGxlOiAnZG9zc2llci5ub1Jlc3VsdHMuQUxMLnRpdGxlJyxcbiAgfSk7XG4gIHB1YmxpYyByZWFkb25seSBzaG93QXNzaWduTW9kYWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBzaG93Q2hhbmdlUGFnZU1vZGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvd0NoYW5nZVRhYk1vZGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyByZWFkb25seSBzZWFyY2hGaWVsZHMkOiBPYnNlcnZhYmxlPEFycmF5PFNlYXJjaEZpZWxkPiB8IG51bGw+ID1cbiAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZG9jdW1lbnRTZWFyY2hGaWVsZHMkLnBpcGUoXG4gICAgICB0YXAoKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmdTZWFyY2hGaWVsZHMgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgPSB0aGlzLmxpc3RTZXJ2aWNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkO1xuXG4gIHB1YmxpYyByZWFkb25seSBjYW5DcmVhdGVEb2N1bWVudCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2UucmVxdWVzdFBlcm1pc3Npb24oQ0FOX0NSRUFURV9DQVNFX1BFUk1JU1NJT04sIHtcbiAgICAgICAgcmVzb3VyY2U6IERPU1NJRVJfREVUQUlMX1BFUk1JU1NJT05fUkVTT1VSQ0UuanNvblNjaGVtYURvY3VtZW50RGVmaW5pdGlvbixcbiAgICAgICAgaWRlbnRpZmllcjogZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgIH0pXG4gICAgKVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWREb2N1bWVudElkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNjaGVtYSQgPSB0aGlzLmxpc3RTZXJ2aWNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldERvY3VtZW50RGVmaW5pdGlvbihkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICksXG4gICAgbWFwKGRvY3VtZW50RGVmaW5pdGlvbiA9PiBkb2N1bWVudERlZmluaXRpb24/LnNjaGVtYSksXG4gICAgdGFwKHNjaGVtYSA9PiB7XG4gICAgICBpZiAoc2NoZW1hPy50aXRsZSkge1xuICAgICAgICB0aGlzLnBhZ2VUaXRsZVNlcnZpY2Uuc2V0Q3VzdG9tUGFnZVRpdGxlKHNjaGVtYT8udGl0bGUsIHRydWUpO1xuICAgICAgfVxuICAgIH0pXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNlYXJjaEZpZWxkVmFsdWVzJCA9IHRoaXMucGFyYW1ldGVyU2VydmljZS5zZWFyY2hGaWVsZFZhbHVlcyQ7XG4gIHB1YmxpYyByZWFkb25seSBhc3NpZ25lZUZpbHRlciQ6IE9ic2VydmFibGU8QXNzaWduZWVGaWx0ZXI+ID1cbiAgICB0aGlzLmFzc2lnbmVlU2VydmljZS5hc3NpZ25lZUZpbHRlciQucGlwZShcbiAgICAgIHRhcChhc3NpZ25lZUZpbHRlciA9PiAodGhpcy5hY3RpdmVUYWIgPSBhc3NpZ25lZUZpbHRlciBhcyBEb3NzaWVyTGlzdFRhYikpXG4gICAgKTtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2luYXRpb25DaGFuZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYXJib25QYWdpbmF0aW9uU2VsZWN0aW9uIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSB0YWJDaGFuZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEb3NzaWVyTGlzdFRhYiB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdpbmF0aW9uJCA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UucGFnaW5hdGlvbiQucGlwZShcbiAgICB0YXAocGFnaW5hdGlvbiA9PiB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24gPSBwYWdpbmF0aW9uO1xuICAgICAgdGhpcy5sb2FkaW5nUGFnaW5hdGlvbiA9IGZhbHNlO1xuICAgIH0pXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhc0VudkNvbHVtbkNvbmZpZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmxpc3RTZXJ2aWNlLmhhc0VudkNvbHVtbkNvbmZpZyQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhc0FwaUNvbHVtbkNvbmZpZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2FuSGF2ZUFzc2lnbmVlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuYXNzaWduZWVTZXJ2aWNlLmNhbkhhdmVBc3NpZ25lZSQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbnMkOiBPYnNlcnZhYmxlPEFycmF5PERlZmluaXRpb25Db2x1bW4+PiA9XG4gICAgdGhpcy5saXN0U2VydmljZS5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgdGhpcy5jb2x1bW5TZXJ2aWNlLmdldERlZmluaXRpb25Db2x1bW5zKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgICApLFxuICAgICAgbWFwKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuX2hhc0FwaUNvbHVtbkNvbmZpZyQubmV4dChyZXMuaGFzQXBpQ29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHJlcy5jb2x1bW5zO1xuICAgICAgfSksXG4gICAgICB0YXAoY29sdW1ucyA9PiB7XG4gICAgICAgIHRoaXMubGlzdFNlcnZpY2UuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZXRQYWdpbmF0aW9uKGNvbHVtbnMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0RmllbGQ+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX2NhbkhhdmVBc3NpZ25lZSQsXG4gICAgdGhpcy5fY29sdW1ucyQsXG4gICAgdGhpcy5faGFzRW52Q29sdW1uQ29uZmlnJCxcbiAgICB0aGlzLl9oYXNBcGlDb2x1bW5Db25maWckLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIHRhcCgoW2NhbkhhdmVBc3NpZ25lZV0pID0+IHtcbiAgICAgIHRoaXMuY2FuSGF2ZUFzc2lnbmVlID0gY2FuSGF2ZUFzc2lnbmVlO1xuICAgIH0pLFxuICAgIG1hcCgoW2NhbkhhdmVBc3NpZ25lZSwgY29sdW1ucywgaGFzRW52Q29uZmlnLCBoYXNBcGlDb25maWddKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZEFzc2lnbmVlQ29sdW1ucyA9IHRoaXMuYXNzaWduZWVTZXJ2aWNlLmZpbHRlckFzc2lnbmVlQ29sdW1ucyhcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY2FuSGF2ZUFzc2lnbmVlXG4gICAgICApO1xuICAgICAgY29uc3QgbGlzdEZpZWxkcyA9IHRoaXMuY29sdW1uU2VydmljZS5tYXBEZWZpbml0aW9uQ29sdW1uc1RvTGlzdEZpZWxkcyhcbiAgICAgICAgZmlsdGVyZWRBc3NpZ25lZUNvbHVtbnMsXG4gICAgICAgIGhhc0VudkNvbmZpZyxcbiAgICAgICAgaGFzQXBpQ29uZmlnXG4gICAgICApO1xuICAgICAgY29uc3QgZmllbGRzVG9SZXR1cm4gPSB0aGlzLmFzc2lnbmVlU2VydmljZS5hZGRBc3NpZ25lZUxpc3RGaWVsZChcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgbGlzdEZpZWxkcyxcbiAgICAgICAgY2FuSGF2ZUFzc2lnbmVlXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gZmllbGRzVG9SZXR1cm47XG4gICAgfSksXG4gICAgdGFwKGxpc3RGaWVsZHMgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdExpc3RGaWVsZCA9IGxpc3RGaWVsZHMuZmluZChmaWVsZCA9PiBmaWVsZC5kZWZhdWx0KTtcbiAgICAgIC8vIHNldCBkZWZhdWx0IHNvcnQgc3RhdGUgaWYgbm8gcGFnaW5hdGlvbiBxdWVyeSBwYXJhbWV0ZXJzIGZvciBzb3J0aW5nIGFyZSBhdmFpbGFibGVcbiAgICAgIHRoaXMucGFyYW1ldGVyU2VydmljZS5xdWVyeVBhZ2luYXRpb25QYXJhbXMkXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUocXVlcnlQYWdpbmF0aW9uUGFyYW1zID0+IHtcbiAgICAgICAgICBpZiAoZGVmYXVsdExpc3RGaWVsZCAmJiAhcXVlcnlQYWdpbmF0aW9uUGFyYW1zPy5zb3J0Py5pc1NvcnRpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvcnREaXJlY3Rpb24gPVxuICAgICAgICAgICAgICB0eXBlb2YgZGVmYXVsdExpc3RGaWVsZC5kZWZhdWx0ID09PSAnc3RyaW5nJyA/IGRlZmF1bHRMaXN0RmllbGQuZGVmYXVsdCA6ICdERVNDJztcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc29ydENoYW5nZWQoe1xuICAgICAgICAgICAgICBpc1NvcnRpbmc6IHRydWUsXG4gICAgICAgICAgICAgIHN0YXRlOiB7bmFtZTogZGVmYXVsdExpc3RGaWVsZC5rZXksIGRpcmVjdGlvbjogc29ydERpcmVjdGlvbiBhcyBEaXJlY3Rpb259LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KSxcbiAgICB0YXAoKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkaW5nRmllbGRzID0gZmFsc2U7XG4gICAgfSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kb2N1bWVudFNlYXJjaFJlcXVlc3QkOiBPYnNlcnZhYmxlPEFkdmFuY2VkRG9jdW1lbnRTZWFyY2hSZXF1ZXN0PiA9XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5fcGFnaW5hdGlvbiQsIHRoaXMubGlzdFNlcnZpY2UuZG9jdW1lbnREZWZpbml0aW9uTmFtZSRdKS5waXBlKFxuICAgICAgZmlsdGVyKChbcGFnaW5hdGlvbl0pID0+ICEhcGFnaW5hdGlvbiksXG4gICAgICBtYXAoKFtwYWdpbmF0aW9uLCBkb2N1bWVudERlZmluaXRpb25OYW1lXSkgPT4ge1xuICAgICAgICBjb25zdCBwYWdlID0gcGFnaW5hdGlvbi5wYWdlIC0gMTtcblxuICAgICAgICByZXR1cm4gbmV3IEFkdmFuY2VkRG9jdW1lbnRTZWFyY2hSZXF1ZXN0SW1wbChcbiAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgICAgIHBhZ2UgPj0gMCA/IHBhZ2UgOiAwLFxuICAgICAgICAgIHBhZ2luYXRpb24uc2l6ZSxcbiAgICAgICAgICBwYWdpbmF0aW9uLnNvcnRcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnRJdGVtcyQ6IE9ic2VydmFibGU8YW55W10+ID0gdGhpcy5saXN0U2VydmljZS5jaGVja1JlZnJlc2gkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5fZG9jdW1lbnRTZWFyY2hSZXF1ZXN0JCxcbiAgICAgICAgdGhpcy5hc3NpZ25lZUZpbHRlciQsXG4gICAgICAgIHRoaXMuc2VhcmNoRmllbGRWYWx1ZXMkLFxuICAgICAgICB0aGlzLmxpc3RTZXJ2aWNlLmZvcmNlUmVmcmVzaCQsXG4gICAgICAgIHRoaXMuX2hhc0VudkNvbHVtbkNvbmZpZyQsXG4gICAgICAgIHRoaXMuX2hhc0FwaUNvbHVtbkNvbmZpZyQsXG4gICAgICBdKVxuICAgICksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoXG4gICAgICAoXG4gICAgICAgIFtwcmV2U2VhcmNoUmVxdWVzdCwgcHJldkFzc2lnbmVlRmlsdGVyLCBwcmV2U2VhcmNoRmllbGRWYWx1ZXMsIHByZXZGb3JjZVJlZnJlc2hdLFxuICAgICAgICBbY3VyclNlYXJjaFJlcXVlc3QsIGN1cnJBc3NpZ25lZUZpbHRlciwgY3VyclNlYXJjaEZpZWxkVmFsdWVzLCBjdXJyRm9yY2VSZWZyZXNoXVxuICAgICAgKSA9PlxuICAgICAgICBpc0VxdWFsKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnByZXZTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICAgYXNzaWduZWU6IHByZXZBc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICAgIC4uLnByZXZTZWFyY2hGaWVsZFZhbHVlcyxcbiAgICAgICAgICAgIGZvcmNlUmVmcmVzaDogcHJldkZvcmNlUmVmcmVzaCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLmN1cnJTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICAgYXNzaWduZWU6IGN1cnJBc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICAgIC4uLmN1cnJTZWFyY2hGaWVsZFZhbHVlcyxcbiAgICAgICAgICAgIGZvcmNlUmVmcmVzaDogY3VyckZvcmNlUmVmcmVzaCxcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICApLFxuICAgIHN3aXRjaE1hcChcbiAgICAgIChbXG4gICAgICAgIGRvY3VtZW50U2VhcmNoUmVxdWVzdCxcbiAgICAgICAgYXNzaWduZWVGaWx0ZXIsXG4gICAgICAgIHNlYXJjaFZhbHVlcyxcbiAgICAgICAgXyxcbiAgICAgICAgaGFzRW52Q29sdW1uQ29uZmlnLFxuICAgICAgICBoYXNBcGlDb2x1bW5Db25maWcsXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IG9ic0VudjogT2JzZXJ2YWJsZTxib29sZWFuPiA9IG9mKGhhc0VudkNvbHVtbkNvbmZpZyk7XG4gICAgICAgIGNvbnN0IG9ic0FwaTogT2JzZXJ2YWJsZTxib29sZWFuPiA9IG9mKGhhc0FwaUNvbHVtbkNvbmZpZyk7XG5cbiAgICAgICAgaWYgKChPYmplY3Qua2V5cyhzZWFyY2hWYWx1ZXMpIHx8IFtdKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHtcbiAgICAgICAgICAgIGRvY3VtZW50czpcbiAgICAgICAgICAgICAgaGFzRW52Q29sdW1uQ29uZmlnIHx8ICFoYXNBcGlDb2x1bW5Db25maWdcbiAgICAgICAgICAgICAgICA/IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldERvY3VtZW50c1NlYXJjaChcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICAnQU5EJyxcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduZWVGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5tYXBTZWFyY2hWYWx1ZXNUb0ZpbHRlcnMoc2VhcmNoVmFsdWVzKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0U3BlY2lmaWVkRG9jdW1lbnRzU2VhcmNoKFxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudFNlYXJjaFJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgICdBTkQnLFxuICAgICAgICAgICAgICAgICAgICBhc3NpZ25lZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLm1hcFNlYXJjaFZhbHVlc1RvRmlsdGVycyhzZWFyY2hWYWx1ZXMpXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgaGFzRW52Q29sdW1uQ29uZmlnOiBvYnNFbnYsXG4gICAgICAgICAgICBoYXNBcGlDb2x1bW5Db25maWc6IG9ic0FwaSxcbiAgICAgICAgICAgIGlzU2VhcmNoUmVzdWx0OiBvZih0cnVlKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JrSm9pbih7XG4gICAgICAgICAgZG9jdW1lbnRzOlxuICAgICAgICAgICAgaGFzRW52Q29sdW1uQ29uZmlnIHx8ICFoYXNBcGlDb2x1bW5Db25maWdcbiAgICAgICAgICAgICAgPyB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudHNTZWFyY2goXG4gICAgICAgICAgICAgICAgICBkb2N1bWVudFNlYXJjaFJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAnQU5EJyxcbiAgICAgICAgICAgICAgICAgIGFzc2lnbmVlRmlsdGVyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldFNwZWNpZmllZERvY3VtZW50c1NlYXJjaChcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50U2VhcmNoUmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICdBTkQnLFxuICAgICAgICAgICAgICAgICAgYXNzaWduZWVGaWx0ZXJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgIGhhc0VudkNvbHVtbkNvbmZpZzogb2JzRW52LFxuICAgICAgICAgIGhhc0FwaUNvbHVtbkNvbmZpZzogb2JzQXBpLFxuICAgICAgICAgIGlzU2VhcmNoUmVzdWx0OiBvZihmYWxzZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICksXG4gICAgbWFwKFxuICAgICAgKHJlczoge1xuICAgICAgICBkb2N1bWVudHM6IERvY3VtZW50cyB8IFNwZWNpZmllZERvY3VtZW50cztcbiAgICAgICAgaGFzRW52Q29sdW1uQ29uZmlnOiBib29sZWFuO1xuICAgICAgICBoYXNBcGlDb2x1bW5Db25maWc6IGJvb2xlYW47XG4gICAgICAgIGlzU2VhcmNoUmVzdWx0OiBib29sZWFuO1xuICAgICAgfSkgPT4ge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNldENvbGxlY3Rpb25TaXplKHJlcy5kb2N1bWVudHMpO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmNoZWNrUGFnZShyZXMuZG9jdW1lbnRzKTtcbiAgICAgICAgdGhpcy51cGRhdGVOb1Jlc3VsdHNNZXNzYWdlKHJlcy5pc1NlYXJjaFJlc3VsdCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdFNlcnZpY2UubWFwRG9jdW1lbnRzKFxuICAgICAgICAgIHJlcy5kb2N1bWVudHMsXG4gICAgICAgICAgcmVzLmhhc0VudkNvbHVtbkNvbmZpZyxcbiAgICAgICAgICByZXMuaGFzQXBpQ29sdW1uQ29uZmlnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKSxcbiAgICB0YXAoKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkaW5nQXNzaWduZWVGaWx0ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMubG9hZGluZ0RvY3VtZW50SXRlbXMgPSBmYWxzZTtcbiAgICB9KVxuICApO1xuXG4gIHByaXZhdGUgX3ByZXZpb3VzRG9jdW1lbnREZWZpbml0aW9uTmFtZSE6IHN0cmluZztcbiAgcHJpdmF0ZSBfZG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFzc2lnbmVlU2VydmljZTogRG9zc2llckxpc3RBc3NpZ25lZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBicmVhZGNydW1iU2VydmljZTogQnJlYWRjcnVtYlNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBidWxrQXNzaWduU2VydmljZTogRG9zc2llckJ1bGtBc3NpZ25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29sdW1uU2VydmljZTogRG9zc2llckNvbHVtblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsaXN0U2VydmljZTogRG9zc2llckxpc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnZVRpdGxlU2VydmljZTogUGFnZVRpdGxlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2luYXRpb25TZXJ2aWNlOiBEb3NzaWVyTGlzdFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyU2VydmljZTogRG9zc2llclBhcmFtZXRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlYXJjaFNlcnZpY2U6IERvc3NpZXJMaXN0U2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFZpc2libGVUYWJzKCk7XG4gICAgdGhpcy5vcGVuRG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5wYWdlVGl0bGVTZXJ2aWNlLmVuYWJsZVJlc2V0KCk7XG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2goc2VhcmNoRmllbGRWYWx1ZXM6IFNlYXJjaEZpZWxkVmFsdWVzKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaChzZWFyY2hGaWVsZFZhbHVlcyk7XG4gIH1cblxuICBwdWJsaWMgcm93Q2xpY2soZG9jdW1lbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMubGlzdFNlcnZpY2UuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiB7XG4gICAgICB0aGlzLmJyZWFkY3J1bWJTZXJ2aWNlLmNhY2hlUXVlcnlQYXJhbXMoXG4gICAgICAgIGAvZG9zc2llcnMvJHtkb2N1bWVudERlZmluaXRpb25OYW1lfWAsXG4gICAgICAgIHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNcbiAgICAgICk7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXG4gICAgICAgIGAvZG9zc2llcnMvJHtkb2N1bWVudERlZmluaXRpb25OYW1lfS9kb2N1bWVudC8ke2RvY3VtZW50LmlkfWAsXG4gICAgICBdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB0YWJDaGFuZ2UodGFiOiBEb3NzaWVyTGlzdFRhYik6IHZvaWQge1xuICAgIGlmICghdGhpcy5hY3RpdmVUYWIpIHtcbiAgICAgIHRoaXMuYWN0aXZlVGFiID0gdGFiO1xuICAgICAgdGhpcy51cGRhdGVOb1Jlc3VsdHNNZXNzYWdlKGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hY3RpdmVUYWIudG9Mb3dlckNhc2UoKSA9PT0gdGFiLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jYXJib25MaXN0Lm1vZGVsLnNlbGVjdGVkUm93c0NvdW50KCkpIHtcbiAgICAgIHRoaXMuc2hvd0NoYW5nZVRhYk1vZGFsJC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy50YWJDaGFuZ2UkLm5leHQodGFiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9uQ2hhbmdlVGFiQ29uZmlybSh0YWIpO1xuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlVGFiQ2FuY2VsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50YWJzQ29tcG9uZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJldlRhYjogVGFiIHwgdW5kZWZpbmVkID0gdGhpcy50YWJzQ29tcG9uZW50LnRhYnMuZmluZChcbiAgICAgICh0YWI6IFRhYikgPT4gdGFiLmlkID09PSB0aGlzLmFjdGl2ZVRhYlxuICAgICk7XG5cbiAgICBpZiAoIXByZXZUYWIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRhYnNDb21wb25lbnQudGFicy5maW5kKCh0YWI6IFRhYikgPT4gdGFiLmFjdGl2ZSkuYWN0aXZlID0gZmFsc2U7XG4gICAgcHJldlRhYi5hY3RpdmUgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIHBhZ2VDaGFuZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FyYm9uTGlzdD8ubW9kZWwuc2VsZWN0ZWRSb3dzQ291bnQoKSkge1xuICAgICAgdGhpcy5zaG93Q2hhbmdlUGFnZU1vZGFsJC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uQ2hhbmdlJC5uZXh0KHtwYWdlLCBzaXplOiB0aGlzLnBhZ2luYXRpb24uc2l6ZX0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnBhZ2VDaGFuZ2UocGFnZSk7XG4gIH1cblxuICBwdWJsaWMgcGFnZVNpemVDaGFuZ2Uoc2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FyYm9uTGlzdD8ubW9kZWwuc2VsZWN0ZWRSb3dzQ291bnQoKSkge1xuICAgICAgdGhpcy5zaG93Q2hhbmdlUGFnZU1vZGFsJC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uQ2hhbmdlJC5uZXh0KHtwYWdlOiB0aGlzLnBhZ2luYXRpb24ucGFnZSwgc2l6ZX0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnBhZ2VTaXplQ2hhbmdlKHNpemUpO1xuICB9XG5cbiAgcHVibGljIHNvcnRDaGFuZ2VkKG5ld1NvcnRTdGF0ZTogU29ydFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zb3J0Q2hhbmdlZChuZXdTb3J0U3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZVRhYkNvbmZpcm0odGFiOiBEb3NzaWVyTGlzdFRhYik6IHZvaWQge1xuICAgIHRoaXMubG9hZGluZ0Fzc2lnbmVlRmlsdGVyID0gdHJ1ZTtcbiAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYjtcbiAgICB0aGlzLnVwZGF0ZU5vUmVzdWx0c01lc3NhZ2UoZmFsc2UpO1xuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2V0UGFnZSgxKTtcbiAgICB0aGlzLmFzc2lnbmVlU2VydmljZS5zZXRBc3NpZ25lZUZpbHRlcih0YWIpO1xuICB9XG5cbiAgcHVibGljIHNob3dBc3NpZ25Nb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkRG9jdW1lbnRJZHMkLm5leHQoXG4gICAgICB0aGlzLmNhcmJvbkxpc3Quc2VsZWN0ZWRJdGVtcy5tYXAoKGRvY3VtZW50OiBEb2N1bWVudCkgPT4gZG9jdW1lbnQuaWQpXG4gICAgKTtcbiAgICB0aGlzLnNob3dBc3NpZ25Nb2RhbCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsb3NlRXZlbnQoYXNzaWduZWVJZDogbnVsbCB8IHN0cmluZywgZG9jdW1lbnRJZHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5zaG93QXNzaWduTW9kYWwkLm5leHQoZmFsc2UpO1xuICAgIGlmICghYXNzaWduZWVJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYnVsa0Fzc2lnblNlcnZpY2UuYnVsa0Fzc2lnbihhc3NpZ25lZUlkLCBkb2N1bWVudElkcykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZm9yY2VSZWZyZXNoKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25DaGFuZ2VQYWdlQ29uZmlybShwYWdpbmF0aW9uOiBDYXJib25QYWdpbmF0aW9uU2VsZWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKHBhZ2luYXRpb24uc2l6ZSAhPT0gdGhpcy5wYWdpbmF0aW9uLnNpemUpIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UucGFnZVNpemVDaGFuZ2UocGFnaW5hdGlvbi5zaXplKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnBhZ2VDaGFuZ2UocGFnaW5hdGlvbi5wYWdlKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydERvc3NpZXIoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0QWN0aW9uc0NvbXBvbmVudC5zdGFydERvc3NpZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JjZVJlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy5saXN0U2VydmljZS5mb3JjZVJlZnJlc2goKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkRvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGUucGFyYW1zXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChwYXJhbXM6IFBhcmFtcykgPT4gcGFyYW1zPy5kb2N1bWVudERlZmluaXRpb25OYW1lKSxcbiAgICAgICAgZmlsdGVyKGRvY0RlZk5hbWUgPT4gISFkb2NEZWZOYW1lKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShkb2N1bWVudERlZmluaXRvbk5hbWUgPT4ge1xuICAgICAgICBpZiAodGhpcy5fcHJldmlvdXNEb2N1bWVudERlZmluaXRpb25OYW1lKSB7XG4gICAgICAgICAgdGhpcy5wYXJhbWV0ZXJTZXJ2aWNlLmNsZWFyUGFyYW1ldGVycygpO1xuICAgICAgICAgIHRoaXMucGFyYW1ldGVyU2VydmljZS5jbGVhclNlYXJjaEZpZWxkVmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcHJldmlvdXNEb2N1bWVudERlZmluaXRpb25OYW1lID0gZG9jdW1lbnREZWZpbml0b25OYW1lO1xuICAgICAgICB0aGlzLnNldExvYWRpbmcoKTtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jbGVhclBhZ2luYXRpb24oKTtcbiAgICAgICAgdGhpcy5hc3NpZ25lZVNlcnZpY2UucmVzZXRBc3NpZ25lZUZpbHRlcigpO1xuICAgICAgICB0aGlzLmxpc3RTZXJ2aWNlLnNldERvY3VtZW50RGVmaW5pdGlvbk5hbWUoZG9jdW1lbnREZWZpbml0b25OYW1lKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRMb2FkaW5nKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZGluZ0ZpZWxkcyA9IHRydWU7XG4gICAgdGhpcy5sb2FkaW5nUGFnaW5hdGlvbiA9IHRydWU7XG4gICAgdGhpcy5sb2FkaW5nU2VhcmNoRmllbGRzID0gdHJ1ZTtcbiAgICB0aGlzLmxvYWRpbmdBc3NpZ25lZUZpbHRlciA9IHRydWU7XG4gICAgdGhpcy5sb2FkaW5nRG9jdW1lbnRJdGVtcyA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHNldFZpc2libGVUYWJzKCk6IHZvaWQge1xuICAgIHRoaXMudmlzaWJsZURvc3NpZXJUYWJzID0gdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZz8udmlzaWJsZURvc3NpZXJMaXN0VGFicyB8fCBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVOb1Jlc3VsdHNNZXNzYWdlKGlzU2VhcmNoUmVzdWx0OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5ub1Jlc3VsdHNNZXNzYWdlJC5uZXh0KFxuICAgICAgaXNTZWFyY2hSZXN1bHRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2Rvc3NpZXIubm9SZXN1bHRzLnNlYXJjaC5kZXNjcmlwdGlvbicsXG4gICAgICAgICAgICBpc1NlYXJjaFJlc3VsdCxcbiAgICAgICAgICAgIHRpdGxlOiAnZG9zc2llci5ub1Jlc3VsdHMuc2VhcmNoLnRpdGxlJyxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBkb3NzaWVyLm5vUmVzdWx0cy4ke3RoaXMuYWN0aXZlVGFiID8/ICdBTEwnfS5kZXNjcmlwdGlvbmAsXG4gICAgICAgICAgICBpc1NlYXJjaFJlc3VsdCxcbiAgICAgICAgICAgIHRpdGxlOiBgZG9zc2llci5ub1Jlc3VsdHMuJHt0aGlzLmFjdGl2ZVRhYiA/PyAnQUxMJ30udGl0bGVgLFxuICAgICAgICAgIH1cbiAgICApO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCJ7XG4gICAgZmllbGRzOiBmaWVsZHMkIHwgYXN5bmMsXG4gICAgZG9jdW1lbnRJdGVtczogZG9jdW1lbnRJdGVtcyQgfCBhc3luYyxcbiAgICBub1Jlc3VsdHNNZXNzYWdlOiBub1Jlc3VsdHNNZXNzYWdlJCB8IGFzeW5jLFxuICAgIHNlYXJjaEZpZWxkczogc2VhcmNoRmllbGRzJCB8IGFzeW5jLFxuICAgIHNjaGVtYTogc2NoZW1hJCB8IGFzeW5jLFxuICAgIHNob3dBc3NpZ25Nb2RhbDogc2hvd0Fzc2lnbk1vZGFsJCB8IGFzeW5jLFxuICAgIHNlbGVjdGVkRG9jdW1lbnRJZHM6IHNlbGVjdGVkRG9jdW1lbnRJZHMkIHwgYXN5bmMsXG4gICAgbG9hZGVkOlxuICAgICAgIWxvYWRpbmdGaWVsZHMgJiZcbiAgICAgICFsb2FkaW5nUGFnaW5hdGlvbiAmJlxuICAgICAgIWxvYWRpbmdTZWFyY2hGaWVsZHMgJiZcbiAgICAgICFsb2FkaW5nQXNzaWduZWVGaWx0ZXIgJiZcbiAgICAgICFsb2FkaW5nRG9jdW1lbnRJdGVtc1xuICB9IGFzIG9ic1wiXG4+XG4gIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnQgcHQtMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcHgtMCBtYi01XCI+XG4gICAgICAgIDx2YWx0aW1vLWRvc3NpZXItbGlzdC1hY3Rpb25zXG4gICAgICAgICAgW2xvYWRpbmddPVwiIW9icy5sb2FkZWRcIlxuICAgICAgICAgIChmb3JtRmxvd0NvbXBsZXRlKT1cImZvcmNlUmVmcmVzaCgpXCJcbiAgICAgICAgPjwvdmFsdGltby1kb3NzaWVyLWxpc3QtYWN0aW9ucz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlYXJjaEZpZWxkczsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvYnMubG9hZGVkOyBlbHNlIGxvYWRpbmdcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdDsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnVsa0Fzc2lnbk1vZGFsOyBjb250ZXh0OiB7b2JzOiBvYnN9XCI+PC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNoYW5nZVBhZ2VNb2RhbFwiPjwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGFuZ2VUYWJNb2RhbFwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoRmllbGRzIGxldC1vYnM9XCJvYnNcIj5cbiAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICA8dmFsdGltby1zZWFyY2gtZmllbGRzXG4gICAgICBbc2VhcmNoRmllbGRzXT1cIm9icy5zZWFyY2hGaWVsZHNcIlxuICAgICAgKGRvU2VhcmNoKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgIFtkb2N1bWVudERlZmluaXRpb25OYW1lXT1cImRvY3VtZW50RGVmaW5pdGlvbk5hbWUkIHwgYXN5bmNcIlxuICAgICAgW2RlZmF1bHRWYWx1ZXNdPVwic2VhcmNoRmllbGRWYWx1ZXMkIHwgYXN5bmNcIlxuICAgICAgW2lucHV0RGlzYWJsZWRdPVwiIW9icy5sb2FkZWRcIlxuICAgID48L3ZhbHRpbW8tc2VhcmNoLWZpZWxkcz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xpc3QgbGV0LW9icz1cIm9ic1wiPlxuICA8dmFsdGltby1jYXJib24tbGlzdFxuICAgIFtmaWVsZHNdPVwib2JzLmZpZWxkc1wiXG4gICAgW2hlYWRlcl09XCJmYWxzZVwiXG4gICAgW2luaXRpYWxTb3J0U3RhdGVdPVwicGFnaW5hdGlvbi5zb3J0XCJcbiAgICBbaXRlbXNdPVwib2JzLmRvY3VtZW50SXRlbXNcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgIHBhZ2luYXRpb25JZGVudGlmaWVyPVwiZG9zc2llckxpc3RcIlxuICAgIFtzaG93U2VsZWN0aW9uQ29sdW1uXT1cImNhbkhhdmVBc3NpZ25lZVwiXG4gICAgW3RhYmxlVHJhbnNsYXRpb25zXT1cInRhYmxlVHJhbnNsYXRpb25zXCJcbiAgICAocGFnaW5hdGlvbkNsaWNrZWQpPVwicGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAocGFnaW5hdGlvblNldCk9XCJwYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAocm93Q2xpY2tlZCk9XCJyb3dDbGljaygkZXZlbnQpXCJcbiAgICAoc29ydENoYW5nZWQpPVwic29ydENoYW5nZWQoJGV2ZW50KVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyIGNhcmJvblRvb2xiYXJBY3Rpb25zPlxuICAgICAgPGJ1dHRvbiBjZHNCdXR0b249XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNob3dBc3NpZ25Nb2RhbCgpXCI+XG4gICAgICAgIHt7ICdkb3NzaWVyLmJ1bGtBc3NpZ24uYXNzaWduJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNhcmJvblRvb2xiYXJDb250ZW50PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRvc3NpZXJMaXN0QWN0aW9uc1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPHZhbHRpbW8tbm8tcmVzdWx0c1xuICAgICAgW2FjdGlvbl09XCJvYnMubm9SZXN1bHRzTWVzc2FnZS5pc1NlYXJjaFJlc3VsdCA/IG51bGwgOiBkb3NzaWVyTGlzdEFjdGlvbnNcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cIm9icy5ub1Jlc3VsdHNNZXNzYWdlLmRlc2NyaXB0aW9uIHwgdHJhbnNsYXRlXCJcbiAgICAgIFt0aXRsZV09XCJvYnMubm9SZXN1bHRzTWVzc2FnZS50aXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgPjwvdmFsdGltby1uby1yZXN1bHRzPlxuXG4gICAgPGRpdiB0YWJzICpuZ0lmPVwiY2FuSGF2ZUFzc2lnbmVlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFic1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L3ZhbHRpbW8tY2FyYm9uLWxpc3Q+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RhYnM+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJhc3NpZ25lZUZpbHRlciQgfCBhc3luYyBhcyBhc3NpZ25lZUZpbHRlclwiPlxuICAgIDxjZHMtdGFic1xuICAgICAgKm5nSWY9XCIhdmlzaWJsZURvc3NpZXJUYWJzOyBlbHNlIGNvbmZpZ3VyZWRUYWJzXCJcbiAgICAgIHR5cGU9XCJjb250YWluZWRcIlxuICAgICAgZGF0YS1jYXJib24tdGhlbWU9XCJnMTBcIlxuICAgICAgY2xhc3M9XCJkb3NzaWVyLWxpc3QtdGFic1wiXG4gICAgPlxuICAgICAgPGNkcy10YWJcbiAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiBkZWZhdWx0VGFiczsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCJcbiAgICAgICAgW2FjdGl2ZV09XCJhc3NpZ25lZUZpbHRlciA9PT0gdGFiXCJcbiAgICAgICAgaGVhZGluZz1cInt7ICdkb3NzaWVyLnRhYnMuJyArIHRhYiB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIFtpZF09XCJ0YWJcIlxuICAgICAgICAoc2VsZWN0ZWQpPVwidGFiQ2hhbmdlKHRhYilcIlxuICAgICAgPjwvY2RzLXRhYj5cbiAgICA8L2Nkcy10YWJzPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29uZmlndXJlZFRhYnM+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJhc3NpZ25lZUZpbHRlciQgfCBhc3luYyBhcyBhc3NpZ25lZUZpbHRlclwiPlxuICAgIDxjZHMtdGFicyB0eXBlPVwiY29udGFpbmVkXCIgY2xhc3M9XCJkb3NzaWVyLWxpc3QtdGFic1wiPlxuICAgICAgPGNkcy10YWJcbiAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiB2aXNpYmxlRG9zc2llclRhYnM7IHRyYWNrQnk6IHRyYWNrQnlJbmRleFwiXG4gICAgICAgIFthY3RpdmVdPVwiYXNzaWduZWVGaWx0ZXIgPT09IHRhYlwiXG4gICAgICAgIGhlYWRpbmc9XCJ7eyAnZG9zc2llci50YWJzLicgKyB0YWIgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBbaWRdPVwidGFiXCJcbiAgICAgICAgKHNlbGVjdGVkKT1cInRhYkNoYW5nZSh0YWIpXCJcbiAgICAgID48L2Nkcy10YWI+XG4gICAgPC9jZHMtdGFicz5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmdcbiAgPjx2YWx0aW1vLWNhcmJvbi1saXN0IFtsb2FkaW5nXT1cInRydWVcIj5cbiAgICA8ZGl2IHRhYnMgKm5nSWY9XCJjYW5IYXZlQXNzaWduZWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJzXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+IDwvdmFsdGltby1jYXJib24tbGlzdFxuPjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnVsa0Fzc2lnbk1vZGFsIGxldC1vYnM9XCJvYnNcIj5cbiAgPHZhbHRpbW8tZG9zc2llci1idWxrLWFzc2lnbi1tb2RhbFxuICAgIFtkb2N1bWVudElkc109XCJvYnMuc2VsZWN0ZWREb2N1bWVudElkc1wiXG4gICAgW29wZW5dPVwib2JzLnNob3dBc3NpZ25Nb2RhbFwiXG4gICAgKGNsb3NlRXZlbnQpPVwib25DbG9zZUV2ZW50KCRldmVudCwgb2JzLnNlbGVjdGVkRG9jdW1lbnRJZHMpXCJcbiAgPjwvdmFsdGltby1kb3NzaWVyLWJ1bGstYXNzaWduLW1vZGFsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjaGFuZ2VQYWdlTW9kYWw+XG4gIDx2YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbFxuICAgIGNvbmZpcm1CdXR0b25UZXh0VHJhbnNsYXRpb25LZXk9XCJkb3NzaWVyLmNoYW5nZVBhZ2VNb2RhbC5jb25maXJtXCJcbiAgICBjb250ZW50VHJhbnNsYXRpb25LZXk9XCJkb3NzaWVyLmNoYW5nZVBhZ2VNb2RhbC5jb250ZW50XCJcbiAgICBbb3V0cHV0T25Db25maXJtXT1cInBhZ2luYXRpb25DaGFuZ2UkIHwgYXN5bmNcIlxuICAgIFtzaG93TW9kYWxTdWJqZWN0JF09XCJzaG93Q2hhbmdlUGFnZU1vZGFsJFwiXG4gICAgdGl0bGVUcmFuc2xhdGlvbktleT1cImRvc3NpZXIuY2hhbmdlUGFnZU1vZGFsLnRpdGxlXCJcbiAgICAoY29uZmlybUV2ZW50KT1cIm9uQ2hhbmdlUGFnZUNvbmZpcm0oJGV2ZW50KVwiXG4gID48L3ZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjaGFuZ2VUYWJNb2RhbD5cbiAgPHZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsXG4gICAgY29uZmlybUJ1dHRvblRleHRUcmFuc2xhdGlvbktleT1cImRvc3NpZXIuY2hhbmdlVGFiTW9kYWwuY29uZmlybVwiXG4gICAgY29udGVudFRyYW5zbGF0aW9uS2V5PVwiZG9zc2llci5jaGFuZ2VUYWJNb2RhbC5jb250ZW50XCJcbiAgICBbb3V0cHV0T25Db25maXJtXT1cInRhYkNoYW5nZSQgfCBhc3luY1wiXG4gICAgW3Nob3dNb2RhbFN1YmplY3QkXT1cInNob3dDaGFuZ2VUYWJNb2RhbCRcIlxuICAgIHRpdGxlVHJhbnNsYXRpb25LZXk9XCJkb3NzaWVyLmNoYW5nZVRhYk1vZGFsLnRpdGxlXCJcbiAgICAoY2FuY2VsRXZlbnQpPVwib25DaGFuZ2VUYWJDYW5jZWwoKVwiXG4gICAgKGNvbmZpcm1FdmVudCk9XCJvbkNoYW5nZVRhYkNvbmZpcm0oJGV2ZW50KVwiXG4gID48L3ZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkb3NzaWVyTGlzdEFjdGlvbnM+XG4gIDxidXR0b25cbiAgICBjZHNCdXR0b249XCJwcmltYXJ5XCJcbiAgICBbZGlzYWJsZWRdPVwibGlzdEFjdGlvbnNDb21wb25lbnQ/LmRpc2FibGVTdGFydERvc3NpZXJCdXR0b24kIHwgYXN5bmNcIlxuICAgIChjbGljayk9XCJzdGFydERvc3NpZXIoKVwiXG4gID5cbiAgICB7eyAnU3RhcnQgRG9zc2llcicgfCB0cmFuc2xhdGUgfX1cblxuICAgIDxzdmcgY2RzSWNvbj1cImFkZFwiIHNpemU9XCIxNlwiIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIj48L3N2Zz5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19
|