@valtimo/dossier 5.5.0 → 5.8.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/esm2020/lib/dossier-detail/tab/summary/summary.component.mjs +1 -1
- package/esm2020/lib/dossier-detail/tab/zaakobjecten/zaakobjecten.component.mjs +65 -0
- package/esm2020/lib/dossier-detail-tab-enum.mjs +2 -1
- package/esm2020/lib/dossier-list/dossier-list.component.mjs +143 -141
- package/esm2020/lib/dossier-process-start-modal/dossier-process-start-modal.component.mjs +1 -1
- package/esm2020/lib/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.mjs +15 -10
- package/esm2020/lib/dossier.module.mjs +18 -2
- package/esm2020/lib/dossier.service.mjs +7 -3
- package/esm2020/lib/models/index.mjs +2 -1
- package/esm2020/lib/models/zaakobjecten.model.mjs +17 -0
- package/esm2020/lib/services/zaakobjecten.service.mjs +41 -0
- package/esm2020/public_api.mjs +2 -1
- package/fesm2015/valtimo-dossier.mjs +298 -184
- package/fesm2015/valtimo-dossier.mjs.map +1 -1
- package/fesm2020/valtimo-dossier.mjs +327 -189
- package/fesm2020/valtimo-dossier.mjs.map +1 -1
- package/lib/dossier-detail/tab/summary/summary.component.d.ts.map +1 -1
- package/lib/dossier-detail/tab/zaakobjecten/zaakobjecten.component.d.ts +21 -0
- package/lib/dossier-detail/tab/zaakobjecten/zaakobjecten.component.d.ts.map +1 -0
- package/lib/dossier-detail-tab-enum.d.ts +2 -1
- package/lib/dossier-detail-tab-enum.d.ts.map +1 -1
- package/lib/dossier-list/dossier-list.component.d.ts +50 -51
- package/lib/dossier-list/dossier-list.component.d.ts.map +1 -1
- package/lib/dossier-process-start-modal/dossier-process-start-modal.component.d.ts.map +1 -1
- package/lib/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.d.ts +5 -1
- package/lib/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.d.ts.map +1 -1
- package/lib/dossier.module.d.ts +16 -14
- package/lib/dossier.module.d.ts.map +1 -1
- package/lib/dossier.service.d.ts.map +1 -1
- package/lib/models/index.d.ts +1 -0
- package/lib/models/index.d.ts.map +1 -1
- package/lib/models/zaakobjecten.model.d.ts +12 -0
- package/lib/models/zaakobjecten.model.d.ts.map +1 -0
- package/lib/services/zaakobjecten.service.d.ts +16 -0
- package/lib/services/zaakobjecten.service.d.ts.map +1 -0
- package/package.json +1 -1
- package/public_api.d.ts +1 -0
- package/public_api.d.ts.map +1 -1
|
@@ -14,161 +14,140 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import { Component, ViewChild } from '@angular/core';
|
|
17
|
-
import { NavigationEnd } from '@angular/router';
|
|
18
17
|
import { DocumentSearchRequestImpl, } from '@valtimo/document';
|
|
19
18
|
import moment from 'moment';
|
|
20
|
-
import { combineLatest } from 'rxjs';
|
|
19
|
+
import { BehaviorSubject, combineLatest, distinctUntilChanged, filter, map, of, switchMap, take, tap, } from 'rxjs';
|
|
21
20
|
import { DefaultTabs } from '../dossier-detail-tab-enum';
|
|
22
21
|
import * as i0 from "@angular/core";
|
|
23
22
|
import * as i1 from "@angular/router";
|
|
24
23
|
import * as i2 from "@valtimo/document";
|
|
25
24
|
import * as i3 from "@ngx-translate/core";
|
|
26
25
|
import * as i4 from "../dossier.service";
|
|
27
|
-
import * as i5 from "
|
|
28
|
-
import * as i6 from "
|
|
29
|
-
import * as i7 from "
|
|
30
|
-
import * as i8 from "@
|
|
31
|
-
import * as i9 from "@
|
|
26
|
+
import * as i5 from "ngx-logger";
|
|
27
|
+
import * as i6 from "@valtimo/components";
|
|
28
|
+
import * as i7 from "../dossier-process-start-modal/dossier-process-start-modal.component";
|
|
29
|
+
import * as i8 from "@angular/common";
|
|
30
|
+
import * as i9 from "@ng-bootstrap/ng-bootstrap";
|
|
31
|
+
import * as i10 from "@angular/forms";
|
|
32
32
|
moment.locale(localStorage.getItem('langKey') || '');
|
|
33
33
|
export class DossierListComponent {
|
|
34
|
-
constructor(route, router, documentService, translateService, dossierService) {
|
|
34
|
+
constructor(route, router, documentService, translateService, dossierService, logger) {
|
|
35
35
|
this.route = route;
|
|
36
36
|
this.router = router;
|
|
37
37
|
this.documentService = documentService;
|
|
38
38
|
this.translateService = translateService;
|
|
39
39
|
this.dossierService = dossierService;
|
|
40
|
-
this.
|
|
41
|
-
this.
|
|
42
|
-
this.
|
|
43
|
-
this.
|
|
44
|
-
this.
|
|
45
|
-
|
|
46
|
-
|
|
40
|
+
this.logger = logger;
|
|
41
|
+
this.selectedProcessDocumentDefinition = null;
|
|
42
|
+
this.modalListenerAdded = false;
|
|
43
|
+
this.settingPaginationForDocName$ = new BehaviorSubject(undefined);
|
|
44
|
+
this.documentDefinitionName$ = this.route.params.pipe(map(params => params.documentDefinitionName || ''), tap(documentDefinitionName => {
|
|
45
|
+
this.resetPagination(documentDefinitionName);
|
|
46
|
+
}));
|
|
47
|
+
this.associatedProcessDocumentDefinitions$ = this.documentDefinitionName$.pipe(switchMap(documentDefinitionName => documentDefinitionName
|
|
48
|
+
? this.documentService.findProcessDocumentDefinitions(documentDefinitionName)
|
|
49
|
+
: of([])), map(processDocumentDefinitions => processDocumentDefinitions.filter(definition => definition.canInitializeDocument)));
|
|
50
|
+
this.schema$ = this.documentDefinitionName$.pipe(switchMap(documentDefinitionName => this.documentService.getDocumentDefinition(documentDefinitionName)), map(documentDefinition => documentDefinition?.schema));
|
|
51
|
+
this.storedSearchRequestKey$ = this.documentDefinitionName$.pipe(map(documentDefinitionName => `list-search-${documentDefinitionName}`));
|
|
52
|
+
this.hasStoredSearchRequest$ = this.storedSearchRequestKey$.pipe(map(storedSearchRequestKey => localStorage.getItem(storedSearchRequestKey) !== null));
|
|
53
|
+
this.columns$ = this.documentDefinitionName$.pipe(map(documentDefinitionName => this.dossierService.getDefinitionColumns(documentDefinitionName)));
|
|
54
|
+
this.fields$ = combineLatest([
|
|
55
|
+
this.columns$,
|
|
56
|
+
this.translateService.stream('key'),
|
|
57
|
+
]).pipe(map(([columns]) => columns.map((column, index) => ({
|
|
58
|
+
key: column.propertyName,
|
|
59
|
+
label: this.translateService.instant(`fieldLabels.${column.translationKey}`),
|
|
60
|
+
sortable: column.sortable,
|
|
61
|
+
...(column.viewType && { viewType: column.viewType }),
|
|
62
|
+
}))));
|
|
63
|
+
this.DEFAULT_PAGINATION = {
|
|
47
64
|
collectionSize: 0,
|
|
48
65
|
page: 1,
|
|
49
66
|
size: 10,
|
|
50
67
|
maxPaginationItemSize: 5,
|
|
51
68
|
sort: undefined,
|
|
52
69
|
};
|
|
53
|
-
this.
|
|
54
|
-
this.
|
|
70
|
+
this.pagination$ = new BehaviorSubject(undefined);
|
|
71
|
+
this.paginationCopy$ = this.pagination$.pipe(map(pagination => pagination && JSON.parse(JSON.stringify(pagination))));
|
|
72
|
+
this.sequence$ = new BehaviorSubject(undefined);
|
|
73
|
+
this.globalSearchFilter$ = new BehaviorSubject(undefined);
|
|
74
|
+
this.createdBy$ = new BehaviorSubject(undefined);
|
|
75
|
+
this.documentSearchRequest$ = combineLatest([
|
|
76
|
+
this.pagination$,
|
|
77
|
+
this.documentDefinitionName$,
|
|
78
|
+
this.sequence$,
|
|
79
|
+
this.createdBy$,
|
|
80
|
+
this.globalSearchFilter$,
|
|
81
|
+
]).pipe(filter(([pagination]) => !!pagination), map(([pagination, documentDefinitionName, sequence, createdBy, globalSearchFilter]) => new DocumentSearchRequestImpl(documentDefinitionName, pagination.page - 1, pagination.size, sequence, createdBy, globalSearchFilter, pagination.sort)));
|
|
82
|
+
this.documentsRequest$ = this.documentSearchRequest$.pipe(distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)), tap(request => {
|
|
83
|
+
this.storedSearchRequestKey$.pipe(take(1)).subscribe(storedSearchRequestKey => {
|
|
84
|
+
this.logger.debug(`store request in local storage: ${JSON.stringify(request)}`);
|
|
85
|
+
localStorage.setItem(storedSearchRequestKey, JSON.stringify(request));
|
|
86
|
+
});
|
|
87
|
+
}), switchMap(documentSearchRequest => this.documentService.getDocuments(documentSearchRequest)), tap(documents => {
|
|
88
|
+
this.setCollectionSize(documents);
|
|
89
|
+
}));
|
|
90
|
+
this.documentItems$ = this.documentsRequest$.pipe(map(documents => documents.content.map(document => {
|
|
91
|
+
const { content, ...others } = document;
|
|
92
|
+
return { ...content, ...others };
|
|
93
|
+
})));
|
|
55
94
|
}
|
|
56
95
|
ngOnInit() {
|
|
57
|
-
this.doInit();
|
|
58
|
-
this.routeEvent(this.router);
|
|
59
96
|
this.modalListenerAdded = false;
|
|
60
97
|
}
|
|
61
|
-
|
|
62
|
-
this.
|
|
63
|
-
this.
|
|
98
|
+
globalSearchFilterChange(searchFilter) {
|
|
99
|
+
this.globalSearchFilter$.next(searchFilter);
|
|
100
|
+
this.pageChange(1);
|
|
64
101
|
}
|
|
65
|
-
|
|
66
|
-
this.
|
|
102
|
+
sequenceChange(sequence) {
|
|
103
|
+
this.sequence$.next(Number(sequence));
|
|
104
|
+
this.pageChange(1);
|
|
67
105
|
}
|
|
68
|
-
|
|
69
|
-
this.
|
|
70
|
-
if (
|
|
71
|
-
this.
|
|
72
|
-
this.
|
|
106
|
+
pageChange(newPage) {
|
|
107
|
+
this.pagination$.pipe(take(1)).subscribe(pagination => {
|
|
108
|
+
if (pagination && pagination.page !== newPage) {
|
|
109
|
+
this.logger.debug(`Page change: ${newPage}`);
|
|
110
|
+
this.pagination$.next({ ...pagination, page: newPage });
|
|
73
111
|
}
|
|
74
112
|
});
|
|
75
113
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
this.translationSubscription = combineLatest(columns.map(column => this.translateService.stream(`fieldLabels.${column.translationKey}`))).subscribe(labels => {
|
|
85
|
-
this.fields = columns.map((column, index) => ({
|
|
86
|
-
key: column.propertyName,
|
|
87
|
-
label: labels[index],
|
|
88
|
-
sortable: column.sortable,
|
|
89
|
-
...(column.viewType && { viewType: column.viewType }),
|
|
90
|
-
}));
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
getData() {
|
|
94
|
-
this.findDocumentDefinition(this.documentDefinitionName);
|
|
95
|
-
if (this.hasCachedSearchRequest()) {
|
|
96
|
-
const documentSearchRequest = this.getCachedSearch();
|
|
97
|
-
this.globalSearchFilter = documentSearchRequest.globalSearchFilter;
|
|
98
|
-
this.sequence = documentSearchRequest.sequence;
|
|
99
|
-
this.createdBy = documentSearchRequest.createdBy;
|
|
100
|
-
this.findDocuments(documentSearchRequest);
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
this.doSearch();
|
|
104
|
-
}
|
|
105
|
-
this.getAllAssociatedProcessDefinitions();
|
|
106
|
-
}
|
|
107
|
-
doSearch() {
|
|
108
|
-
const documentSearchRequest = this.buildDocumentSearchRequest();
|
|
109
|
-
this.findDocuments(documentSearchRequest);
|
|
110
|
-
}
|
|
111
|
-
findDocuments(documentSearchRequest) {
|
|
112
|
-
return this.documentService.getDocuments(documentSearchRequest).subscribe(documents => {
|
|
113
|
-
this.documents = documents;
|
|
114
|
-
this.transformDocuments(this.documents.content);
|
|
115
|
-
this.pagination.collectionSize = this.documents.totalElements;
|
|
116
|
-
this.storeSearch(documentSearchRequest);
|
|
114
|
+
pageSizeChange(newPageSize) {
|
|
115
|
+
this.pagination$.pipe(take(1)).subscribe(pagination => {
|
|
116
|
+
if (pagination && pagination.size !== newPageSize) {
|
|
117
|
+
const amountOfAvailablePages = Math.ceil(pagination.collectionSize / newPageSize);
|
|
118
|
+
const newPage = amountOfAvailablePages < pagination.page ? amountOfAvailablePages : pagination.page;
|
|
119
|
+
this.logger.debug(`Page size change. New Page: ${newPage} New page size: ${newPageSize}`);
|
|
120
|
+
this.pagination$.next({ ...pagination, size: newPageSize, page: newPage });
|
|
121
|
+
}
|
|
117
122
|
});
|
|
118
123
|
}
|
|
119
|
-
|
|
120
|
-
this.
|
|
121
|
-
.
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
{
|
|
126
|
-
key: 'processName',
|
|
127
|
-
label: 'Proces',
|
|
128
|
-
},
|
|
129
|
-
];
|
|
124
|
+
sortChanged(newSortState) {
|
|
125
|
+
this.pagination$.pipe(take(1)).subscribe(pagination => {
|
|
126
|
+
if (pagination && JSON.stringify(pagination.sort) !== JSON.stringify(newSortState)) {
|
|
127
|
+
this.logger.debug(`Sort state change: ${JSON.stringify(newSortState)}`);
|
|
128
|
+
this.pagination$.next({ ...pagination, sort: newSortState });
|
|
129
|
+
}
|
|
130
130
|
});
|
|
131
131
|
}
|
|
132
|
-
getCachedSearch() {
|
|
133
|
-
const json = JSON.parse(this.getCachedDocumentSearchRequest());
|
|
134
|
-
return new DocumentSearchRequestImpl(json.definitionName, this.pagination.page - 1, this.pagination.size, json.sequence, json.createdBy, json.globalSearchFilter, json.sort);
|
|
135
|
-
}
|
|
136
|
-
buildDocumentSearchRequest() {
|
|
137
|
-
return new DocumentSearchRequestImpl(this.documentDefinitionName, this.pagination.page - 1, this.pagination.size, this.sequence, this.createdBy, this.globalSearchFilter, this.pagination.sort && this.pagination.sort.isSorting
|
|
138
|
-
? this.pagination.sort
|
|
139
|
-
: this.initialSortState);
|
|
140
|
-
}
|
|
141
|
-
storeSearch(documentSearchRequest) {
|
|
142
|
-
localStorage.setItem(this.getCachedKey(), JSON.stringify(documentSearchRequest));
|
|
143
|
-
}
|
|
144
|
-
getCachedDocumentSearchRequest() {
|
|
145
|
-
return localStorage.getItem(this.getCachedKey()) || '';
|
|
146
|
-
}
|
|
147
|
-
hasCachedSearchRequest() {
|
|
148
|
-
return localStorage.getItem(this.getCachedKey()) !== null;
|
|
149
|
-
}
|
|
150
|
-
getCachedKey() {
|
|
151
|
-
return 'list-search-' + this.documentDefinitionName;
|
|
152
|
-
}
|
|
153
132
|
rowClick(document) {
|
|
154
|
-
this.
|
|
155
|
-
|
|
156
|
-
|
|
133
|
+
this.documentDefinitionName$.pipe(take(1)).subscribe(documentDefinitionName => {
|
|
134
|
+
this.router.navigate([
|
|
135
|
+
`/dossiers/${documentDefinitionName}/document/${document.id}/${DefaultTabs.summary}`,
|
|
136
|
+
]);
|
|
137
|
+
});
|
|
157
138
|
}
|
|
158
139
|
startDossier() {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
this.selectedProcessDocumentDefinition = null;
|
|
171
|
-
}
|
|
140
|
+
this.associatedProcessDocumentDefinitions$
|
|
141
|
+
.pipe(take(1))
|
|
142
|
+
.subscribe(associatedProcessDocumentDefinitions => {
|
|
143
|
+
if (associatedProcessDocumentDefinitions.length > 1) {
|
|
144
|
+
$('#startProcess').modal('show');
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
this.selectedProcessDocumentDefinition = associatedProcessDocumentDefinitions[0];
|
|
148
|
+
this.showStartProcessModal();
|
|
149
|
+
}
|
|
150
|
+
});
|
|
172
151
|
}
|
|
173
152
|
selectProcess(processDocumentDefinition) {
|
|
174
153
|
const modal = $('#startProcess');
|
|
@@ -179,40 +158,63 @@ export class DossierListComponent {
|
|
|
179
158
|
this.selectedProcessDocumentDefinition = processDocumentDefinition;
|
|
180
159
|
modal.modal('hide');
|
|
181
160
|
}
|
|
182
|
-
|
|
183
|
-
this.
|
|
184
|
-
|
|
161
|
+
resetPagination(documentDefinitionName) {
|
|
162
|
+
this.settingPaginationForDocName$.pipe(take(1)).subscribe(settingPaginationForDocName => {
|
|
163
|
+
if (documentDefinitionName !== settingPaginationForDocName) {
|
|
164
|
+
this.pagination$.next(undefined);
|
|
165
|
+
this.logger.debug('clear pagination');
|
|
166
|
+
this.settingPaginationForDocName$.next(documentDefinitionName);
|
|
167
|
+
this.setPagination(documentDefinitionName);
|
|
168
|
+
}
|
|
185
169
|
});
|
|
186
170
|
}
|
|
187
|
-
|
|
188
|
-
this.
|
|
189
|
-
|
|
190
|
-
|
|
171
|
+
setPagination(documentDefinitionName) {
|
|
172
|
+
combineLatest([this.hasStoredSearchRequest$, this.storedSearchRequestKey$, this.columns$])
|
|
173
|
+
.pipe(take(1))
|
|
174
|
+
.subscribe(([hasStoredSearchRequest, storedSearchRequestKey, columns]) => {
|
|
175
|
+
const defaultPagination = this.getDefaultPagination(columns);
|
|
176
|
+
const storedPagination = this.getStoredPagination(hasStoredSearchRequest, storedSearchRequestKey);
|
|
177
|
+
this.logger.debug(`Set pagination: ${JSON.stringify(storedPagination || defaultPagination)}`);
|
|
178
|
+
this.pagination$.next(storedPagination || defaultPagination);
|
|
191
179
|
});
|
|
192
180
|
}
|
|
193
|
-
|
|
194
|
-
this.
|
|
195
|
-
|
|
181
|
+
getDefaultPagination(columns) {
|
|
182
|
+
const defaultSortState = this.dossierService.getInitialSortState(columns);
|
|
183
|
+
return {
|
|
184
|
+
...this.DEFAULT_PAGINATION,
|
|
185
|
+
sort: defaultSortState,
|
|
186
|
+
};
|
|
196
187
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
188
|
+
getStoredPagination(hasStoredSearchRequest, storedSearchRequestKey) {
|
|
189
|
+
const storedSearchRequest = hasStoredSearchRequest && JSON.parse(localStorage.getItem(storedSearchRequestKey));
|
|
190
|
+
return (storedSearchRequest && {
|
|
191
|
+
...this.DEFAULT_PAGINATION,
|
|
192
|
+
sort: storedSearchRequest.sort,
|
|
193
|
+
page: storedSearchRequest.page + 1,
|
|
194
|
+
size: storedSearchRequest.size,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
setCollectionSize(documents) {
|
|
198
|
+
this.pagination$.pipe(take(1)).subscribe(pagination => {
|
|
199
|
+
if (pagination.collectionSize !== documents.totalElements) {
|
|
200
|
+
this.pagination$.next({ ...pagination, collectionSize: documents.totalElements });
|
|
201
|
+
}
|
|
202
|
+
});
|
|
200
203
|
}
|
|
201
|
-
|
|
202
|
-
if (this.
|
|
203
|
-
|
|
204
|
-
|
|
204
|
+
showStartProcessModal() {
|
|
205
|
+
if (this.selectedProcessDocumentDefinition !== null) {
|
|
206
|
+
this.processStart.openModal(this.selectedProcessDocumentDefinition);
|
|
207
|
+
this.selectedProcessDocumentDefinition = null;
|
|
205
208
|
}
|
|
206
|
-
return this.initialSortState;
|
|
207
209
|
}
|
|
208
210
|
}
|
|
209
|
-
DossierListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DossierListComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.DocumentService }, { token: i3.TranslateService }, { token: i4.DossierService }], target: i0.ɵɵFactoryTarget.Component });
|
|
210
|
-
DossierListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: DossierListComponent, selector: "valtimo-dossier-list", viewQueries: [{ propertyName: "processStart", first: true, predicate: ["processStartModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 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 *ngTemplateOutlet=\"sidebar\"></ng-container>\n\n<div class=\"main-content pt-0\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <div>\n <div class=\"text-right mt-m3px mb-3\">\n <button\n type=\"button\"\n class=\"btn btn-space btn-primary mr-0\"\n (click)=\"startDossier()\"\n [ngbTooltip]=\"
|
|
211
|
+
DossierListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DossierListComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.DocumentService }, { token: i3.TranslateService }, { token: i4.DossierService }, { token: i5.NGXLogger }], target: i0.ɵɵFactoryTarget.Component });
|
|
212
|
+
DossierListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: DossierListComponent, selector: "valtimo-dossier-list", viewQueries: [{ propertyName: "processStart", first: true, predicate: ["processStartModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 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 *ngTemplateOutlet=\"sidebar\"></ng-container>\n\n<div class=\"main-content pt-0\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <div\n *ngIf=\"\n associatedProcessDocumentDefinitions$ | async as associatedProcessDocumentDefinitions\n \"\n >\n <div class=\"text-right mt-m3px mb-3\">\n <button\n type=\"button\"\n class=\"btn btn-space btn-primary mr-0\"\n (click)=\"startDossier()\"\n [ngbTooltip]=\"associatedProcessDocumentDefinitions.length === 0 ? 'No action' : null\"\n placement=\"bottom\"\n [disabled]=\"associatedProcessDocumentDefinitions.length === 0\"\n >\n <i class=\"icon mdi mdi-plus mr-1\"></i>\n {{ 'Start Dossier' | translate }}\n </button>\n </div>\n\n <div\n class=\"modal fade\"\n id=\"startProcess\"\n tabindex=\"-1\"\n role=\"dialog\"\n aria-labelledby=\"startProcessLabel\"\n aria-hidden=\"true\"\n >\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h3 class=\"modal-title\" id=\"startProcessLabel\">\n {{ 'dashboard.startProcess.title' | translate }}\n </h3>\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"table-responsive\">\n <table class=\"table m-0\">\n <tr\n *ngFor=\"let processDocumentDefinition of associatedProcessDocumentDefinitions\"\n (click)=\"selectProcess(processDocumentDefinition)\"\n style=\"cursor: pointer\"\n >\n <td>{{ processDocumentDefinition.processName }}</td>\n </tr>\n </table>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">\n {{ 'cta.close' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <valtimo-widget>\n <ng-container *ngTemplateOutlet=\"list\"></ng-container>\n </valtimo-widget>\n </div>\n </div>\n <valtimo-dossier-process-start-modal #processStartModal></valtimo-dossier-process-start-modal>\n</div>\n\n<ng-template #list>\n <ng-container *ngIf=\"paginationCopy$ | async as pagination\">\n <ng-container *ngIf=\"fields$ | async as fields\">\n <valtimo-list\n *ngIf=\"documentItems$ | async as documentItems\"\n [items]=\"documentItems\"\n [fields]=\"fields\"\n (rowClicked)=\"rowClick($event)\"\n [pagination]=\"pagination\"\n [viewMode]=\"true\"\n [header]=\"true\"\n paginationIdentifier=\"dossierList\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n [initialSortState]=\"pagination.sort\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <div header>\n <h3 class=\"list-header-title\">\n {{ (schema$ | async)?.title }}\n <sup class=\"ml-1 badge badge-pill badge-primary\">{{ documentItems?.length || 0 }}</sup>\n </h3>\n </div>\n </valtimo-list>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #sidebar>\n <valtimo-filter-sidebar>\n <h4 class=\"title\">Search</h4>\n <div class=\"mb-4\">\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'dossier.forms.globalSearchPlaceHolder' | translate }}\"\n [ngModel]=\"globalSearchFilter$ | async\"\n (ngModelChange)=\"globalSearchFilterChange($event)\"\n />\n </div>\n\n <div class=\"mb-4\">\n <input\n type=\"number\"\n class=\"form-control\"\n placeholder=\"{{ 'dossier.forms.referenceNumberPlaceHolder' | translate }}\"\n [ngModel]=\"sequence$ | async\"\n (ngModelChange)=\"sequenceChange($event)\"\n />\n </div>\n </valtimo-filter-sidebar>\n</ng-template>\n", styles: [""], components: [{ type: i6.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { type: i7.DossierProcessStartModalComponent, selector: "valtimo-dossier-process-start-modal" }, { type: i6.ListComponent, selector: "valtimo-list", inputs: ["items", "fields", "pagination", "viewMode", "isSearchable", "header", "actions", "paginationIdentifier", "initialSortState"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged"] }, { type: i6.FilterSidebarComponent, selector: "valtimo-filter-sidebar" }], directives: [{ type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i10.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }], pipes: { "async": i8.AsyncPipe, "translate": i3.TranslatePipe } });
|
|
211
213
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DossierListComponent, decorators: [{
|
|
212
214
|
type: Component,
|
|
213
|
-
args: [{ selector: 'valtimo-dossier-list', template: "<!--\n ~ Copyright 2015-2020 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 *ngTemplateOutlet=\"sidebar\"></ng-container>\n\n<div class=\"main-content pt-0\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <div>\n <div class=\"text-right mt-m3px mb-3\">\n <button\n type=\"button\"\n class=\"btn btn-space btn-primary mr-0\"\n (click)=\"startDossier()\"\n [ngbTooltip]=\"
|
|
214
|
-
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.DocumentService }, { type: i3.TranslateService }, { type: i4.DossierService }]; }, propDecorators: { processStart: [{
|
|
215
|
+
args: [{ selector: 'valtimo-dossier-list', template: "<!--\n ~ Copyright 2015-2020 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 *ngTemplateOutlet=\"sidebar\"></ng-container>\n\n<div class=\"main-content pt-0\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <div\n *ngIf=\"\n associatedProcessDocumentDefinitions$ | async as associatedProcessDocumentDefinitions\n \"\n >\n <div class=\"text-right mt-m3px mb-3\">\n <button\n type=\"button\"\n class=\"btn btn-space btn-primary mr-0\"\n (click)=\"startDossier()\"\n [ngbTooltip]=\"associatedProcessDocumentDefinitions.length === 0 ? 'No action' : null\"\n placement=\"bottom\"\n [disabled]=\"associatedProcessDocumentDefinitions.length === 0\"\n >\n <i class=\"icon mdi mdi-plus mr-1\"></i>\n {{ 'Start Dossier' | translate }}\n </button>\n </div>\n\n <div\n class=\"modal fade\"\n id=\"startProcess\"\n tabindex=\"-1\"\n role=\"dialog\"\n aria-labelledby=\"startProcessLabel\"\n aria-hidden=\"true\"\n >\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h3 class=\"modal-title\" id=\"startProcessLabel\">\n {{ 'dashboard.startProcess.title' | translate }}\n </h3>\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"table-responsive\">\n <table class=\"table m-0\">\n <tr\n *ngFor=\"let processDocumentDefinition of associatedProcessDocumentDefinitions\"\n (click)=\"selectProcess(processDocumentDefinition)\"\n style=\"cursor: pointer\"\n >\n <td>{{ processDocumentDefinition.processName }}</td>\n </tr>\n </table>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">\n {{ 'cta.close' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <valtimo-widget>\n <ng-container *ngTemplateOutlet=\"list\"></ng-container>\n </valtimo-widget>\n </div>\n </div>\n <valtimo-dossier-process-start-modal #processStartModal></valtimo-dossier-process-start-modal>\n</div>\n\n<ng-template #list>\n <ng-container *ngIf=\"paginationCopy$ | async as pagination\">\n <ng-container *ngIf=\"fields$ | async as fields\">\n <valtimo-list\n *ngIf=\"documentItems$ | async as documentItems\"\n [items]=\"documentItems\"\n [fields]=\"fields\"\n (rowClicked)=\"rowClick($event)\"\n [pagination]=\"pagination\"\n [viewMode]=\"true\"\n [header]=\"true\"\n paginationIdentifier=\"dossierList\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n [initialSortState]=\"pagination.sort\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <div header>\n <h3 class=\"list-header-title\">\n {{ (schema$ | async)?.title }}\n <sup class=\"ml-1 badge badge-pill badge-primary\">{{ documentItems?.length || 0 }}</sup>\n </h3>\n </div>\n </valtimo-list>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #sidebar>\n <valtimo-filter-sidebar>\n <h4 class=\"title\">Search</h4>\n <div class=\"mb-4\">\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'dossier.forms.globalSearchPlaceHolder' | translate }}\"\n [ngModel]=\"globalSearchFilter$ | async\"\n (ngModelChange)=\"globalSearchFilterChange($event)\"\n />\n </div>\n\n <div class=\"mb-4\">\n <input\n type=\"number\"\n class=\"form-control\"\n placeholder=\"{{ 'dossier.forms.referenceNumberPlaceHolder' | translate }}\"\n [ngModel]=\"sequence$ | async\"\n (ngModelChange)=\"sequenceChange($event)\"\n />\n </div>\n </valtimo-filter-sidebar>\n</ng-template>\n", styles: [""] }]
|
|
216
|
+
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.DocumentService }, { type: i3.TranslateService }, { type: i4.DossierService }, { type: i5.NGXLogger }]; }, propDecorators: { processStart: [{
|
|
215
217
|
type: ViewChild,
|
|
216
218
|
args: ['processStartModal']
|
|
217
219
|
}] } });
|
|
218
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL2Rvc3NpZXItbGlzdC9kb3NzaWVyLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvZG9zc2llci1saXN0L2Rvc3NpZXItbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQXFCLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQWlCLGFBQWEsRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBR3RFLE9BQU8sRUFFTCx5QkFBeUIsR0FJMUIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLGFBQWEsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7O0FBT3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQU9yRCxNQUFNLE9BQU8sb0JBQW9CO0lBOEIvQixZQUNVLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxlQUFnQyxFQUN2QixnQkFBa0MsRUFDbEMsY0FBOEI7UUFKdkMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUN2QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWxDMUMsMkJBQXNCLEdBQUcsRUFB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bEIsQ0FBQztJQUVNLFdBQVcsQ0FBQyxTQUFvQjtRQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRTtZQUNqQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDLENBQUM7WUFDeEUsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FDeEU7UUFDRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDOztrSEE1T1Usb0JBQW9CO3NHQUFwQixvQkFBb0IsK0tDM0NqQyxrcUpBbUlBOzRGRHhGYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usc0JBQXNCO29OQTBCQSxZQUFZO3NCQUEzQyxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0RlZmluaXRpb25Db2x1bW59IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge1xuICBEb2N1bWVudFNlYXJjaFJlcXVlc3QsXG4gIERvY3VtZW50U2VhcmNoUmVxdWVzdEltcGwsXG4gIERvY3VtZW50U2VydmljZSxcbiAgU29ydFN0YXRlLFxuICBQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLFxufSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0RlZmF1bHRUYWJzfSBmcm9tICcuLi9kb3NzaWVyLWRldGFpbC10YWItZW51bSc7XG5pbXBvcnQge0Rvc3NpZXJQcm9jZXNzU3RhcnRNb2RhbENvbXBvbmVudH0gZnJvbSAnLi4vZG9zc2llci1wcm9jZXNzLXN0YXJ0LW1vZGFsL2Rvc3NpZXItcHJvY2Vzcy1zdGFydC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHtEb3NzaWVyU2VydmljZX0gZnJvbSAnLi4vZG9zc2llci5zZXJ2aWNlJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZhclxuZGVjbGFyZSB2YXIgJDtcblxubW9tZW50LmxvY2FsZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ0tleScpIHx8ICcnKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1kb3NzaWVyLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9zc2llci1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9zc2llci1saXN0LmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9zc2llckxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyBkb2N1bWVudERlZmluaXRpb25OYW1lID0gJyc7XG4gIHB1YmxpYyBpbXBsZW1lbnRhdGlvbkRlZmluaXRpb25zOiBhbnk7XG4gIHB1YmxpYyBzaG93Q3JlYXRlRG9jdW1lbnQgPSBmYWxzZTtcbiAgcHVibGljIHNjaGVtYTogYW55O1xuICBwdWJsaWMgZG9jdW1lbnRzOiBhbnk7XG4gIHB1YmxpYyBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xuICBwdWJsaWMgZmllbGRzOiBBcnJheTxhbnk+ID0gW107XG4gIHB1YmxpYyBwcm9jZXNzRGVmaW5pdGlvbkxpc3RGaWVsZHM6IEFycmF5PGFueT4gPSBbXTtcbiAgcHVibGljIHByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zOiBQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uW10gPSBbXTtcbiAgcHVibGljIHBhZ2luYXRpb24gPSB7XG4gICAgY29sbGVjdGlvblNpemU6IDAsXG4gICAgcGFnZTogMSxcbiAgICBzaXplOiAxMCxcbiAgICBtYXhQYWdpbmF0aW9uSXRlbVNpemU6IDUsXG4gICAgc29ydDogdW5kZWZpbmVkLFxuICB9O1xuICBwdWJsaWMgZ2xvYmFsU2VhcmNoRmlsdGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBzZXF1ZW5jZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgY3JlYXRlZEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgc2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uOiBQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbW9kYWxMaXN0ZW5lckFkZGVkID0gZmFsc2U7XG4gIEBWaWV3Q2hpbGQoJ3Byb2Nlc3NTdGFydE1vZGFsJykgcHJvY2Vzc1N0YXJ0OiBEb3NzaWVyUHJvY2Vzc1N0YXJ0TW9kYWxDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSByb3V0ZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIHRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgaW5pdGlhbFNvcnRTdGF0ZTogU29ydFN0YXRlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb3NzaWVyU2VydmljZTogRG9zc2llclNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZG9Jbml0KCk7XG4gICAgdGhpcy5yb3V0ZUV2ZW50KHRoaXMucm91dGVyKTtcbiAgICB0aGlzLm1vZGFsTGlzdGVuZXJBZGRlZCA9IGZhbHNlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwYWdpbmF0aW9uU2V0KCkge1xuICAgIHRoaXMuZ2V0RGF0YSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByb3V0ZUV2ZW50KHJvdXRlcjogUm91dGVyKSB7XG4gICAgdGhpcy5yb3V0ZXJTdWJzY3JpcHRpb24gPSByb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShlID0+IHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICB0aGlzLmRvSW5pdCgpO1xuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkb0luaXQoKSB7XG4gICAgY29uc3QgZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdkb2N1bWVudERlZmluaXRpb25OYW1lJykgfHwgJyc7XG4gICAgY29uc3QgY29sdW1uczogQXJyYXk8RGVmaW5pdGlvbkNvbHVtbj4gPVxuICAgICAgdGhpcy5kb3NzaWVyU2VydmljZS5nZXREZWZpbml0aW9uQ29sdW1ucyhkb2N1bWVudERlZmluaXRpb25OYW1lKTtcblxuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9IGRvY3VtZW50RGVmaW5pdGlvbk5hbWU7XG4gICAgdGhpcy5pbml0aWFsU29ydFN0YXRlID0gdGhpcy5kb3NzaWVyU2VydmljZS5nZXRJbml0aWFsU29ydFN0YXRlKGNvbHVtbnMpO1xuXG4gICAgdGhpcy5vcGVuVHJhbnNsYXRpb25TdWJzY3JpcHRpb24oY29sdW1ucyk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5UcmFuc2xhdGlvblN1YnNjcmlwdGlvbihjb2x1bW5zOiBBcnJheTxEZWZpbml0aW9uQ29sdW1uPik6IHZvaWQge1xuICAgIHRoaXMudHJhbnNsYXRpb25TdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFxuICAgICAgY29sdW1ucy5tYXAoY29sdW1uID0+IHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oYGZpZWxkTGFiZWxzLiR7Y29sdW1uLnRyYW5zbGF0aW9uS2V5fWApKVxuICAgICkuc3Vic2NyaWJlKGxhYmVscyA9PiB7XG4gICAgICB0aGlzLmZpZWxkcyA9IGNvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4KSA9PiAoe1xuICAgICAgICBrZXk6IGNvbHVtbi5wcm9wZXJ0eU5hbWUsXG4gICAgICAgIGxhYmVsOiBsYWJlbHNbaW5kZXhdLFxuICAgICAgICBzb3J0YWJsZTogY29sdW1uLnNvcnRhYmxlLFxuICAgICAgICAuLi4oY29sdW1uLnZpZXdUeXBlICYmIHt2aWV3VHlwZTogY29sdW1uLnZpZXdUeXBlfSksXG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0YSgpIHtcbiAgICB0aGlzLmZpbmREb2N1bWVudERlZmluaXRpb24odGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lKTtcblxuICAgIGlmICh0aGlzLmhhc0NhY2hlZFNlYXJjaFJlcXVlc3QoKSkge1xuICAgICAgY29uc3QgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0ID0gdGhpcy5nZXRDYWNoZWRTZWFyY2goKTtcbiAgICAgIHRoaXMuZ2xvYmFsU2VhcmNoRmlsdGVyID0gZG9jdW1lbnRTZWFyY2hSZXF1ZXN0Lmdsb2JhbFNlYXJjaEZpbHRlcjtcbiAgICAgIHRoaXMuc2VxdWVuY2UgPSBkb2N1bWVudFNlYXJjaFJlcXVlc3Quc2VxdWVuY2U7XG4gICAgICB0aGlzLmNyZWF0ZWRCeSA9IGRvY3VtZW50U2VhcmNoUmVxdWVzdC5jcmVhdGVkQnk7XG4gICAgICB0aGlzLmZpbmREb2N1bWVudHMoZG9jdW1lbnRTZWFyY2hSZXF1ZXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb1NlYXJjaCgpO1xuICAgIH1cblxuICAgIHRoaXMuZ2V0QWxsQXNzb2NpYXRlZFByb2Nlc3NEZWZpbml0aW9ucygpO1xuICB9XG5cbiAgcHVibGljIGRvU2VhcmNoKCkge1xuICAgIGNvbnN0IGRvY3VtZW50U2VhcmNoUmVxdWVzdCA9IHRoaXMuYnVpbGREb2N1bWVudFNlYXJjaFJlcXVlc3QoKTtcbiAgICB0aGlzLmZpbmREb2N1bWVudHMoZG9jdW1lbnRTZWFyY2hSZXF1ZXN0KTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZERvY3VtZW50cyhkb2N1bWVudFNlYXJjaFJlcXVlc3Q6IERvY3VtZW50U2VhcmNoUmVxdWVzdCkge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudHMoZG9jdW1lbnRTZWFyY2hSZXF1ZXN0KS5zdWJzY3JpYmUoZG9jdW1lbnRzID0+IHtcbiAgICAgIHRoaXMuZG9jdW1lbnRzID0gZG9jdW1lbnRzO1xuICAgICAgdGhpcy50cmFuc2Zvcm1Eb2N1bWVudHModGhpcy5kb2N1bWVudHMuY29udGVudCk7XG4gICAgICB0aGlzLnBhZ2luYXRpb24uY29sbGVjdGlvblNpemUgPSB0aGlzLmRvY3VtZW50cy50b3RhbEVsZW1lbnRzO1xuICAgICAgdGhpcy5zdG9yZVNlYXJjaChkb2N1bWVudFNlYXJjaFJlcXVlc3QpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEFsbEFzc29jaWF0ZWRQcm9jZXNzRGVmaW5pdGlvbnMoKSB7XG4gICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgIC5maW5kUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnModGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgLnN1YnNjcmliZShwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucyA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMgPSBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiA9PiBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLmNhbkluaXRpYWxpemVEb2N1bWVudFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uTGlzdEZpZWxkcyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICdwcm9jZXNzTmFtZScsXG4gICAgICAgICAgICBsYWJlbDogJ1Byb2NlcycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldENhY2hlZFNlYXJjaCgpOiBEb2N1bWVudFNlYXJjaFJlcXVlc3Qge1xuICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKHRoaXMuZ2V0Q2FjaGVkRG9jdW1lbnRTZWFyY2hSZXF1ZXN0KCkpO1xuICAgIHJldHVybiBuZXcgRG9jdW1lbnRTZWFyY2hSZXF1ZXN0SW1wbChcbiAgICAgIGpzb24uZGVmaW5pdGlvbk5hbWUsXG4gICAgICB0aGlzLnBhZ2luYXRpb24ucGFnZSAtIDEsXG4gICAgICB0aGlzLnBhZ2luYXRpb24uc2l6ZSxcbiAgICAgIGpzb24uc2VxdWVuY2UsXG4gICAgICBqc29uLmNyZWF0ZWRCeSxcbiAgICAgIGpzb24uZ2xvYmFsU2VhcmNoRmlsdGVyLFxuICAgICAganNvbi5zb3J0XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGREb2N1bWVudFNlYXJjaFJlcXVlc3QoKTogRG9jdW1lbnRTZWFyY2hSZXF1ZXN0IHtcbiAgICByZXR1cm4gbmV3IERvY3VtZW50U2VhcmNoUmVxdWVzdEltcGwoXG4gICAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICB0aGlzLnBhZ2luYXRpb24ucGFnZSAtIDEsXG4gICAgICB0aGlzLnBhZ2luYXRpb24uc2l6ZSxcbiAgICAgIHRoaXMuc2VxdWVuY2UsXG4gICAgICB0aGlzLmNyZWF0ZWRCeSxcbiAgICAgIHRoaXMuZ2xvYmFsU2VhcmNoRmlsdGVyLFxuICAgICAgdGhpcy5wYWdpbmF0aW9uLnNvcnQgJiYgdGhpcy5wYWdpbmF0aW9uLnNvcnQuaXNTb3J0aW5nXG4gICAgICAgID8gdGhpcy5wYWdpbmF0aW9uLnNvcnRcbiAgICAgICAgOiB0aGlzLmluaXRpYWxTb3J0U3RhdGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9yZVNlYXJjaChkb2N1bWVudFNlYXJjaFJlcXVlc3Q6IERvY3VtZW50U2VhcmNoUmVxdWVzdCkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuZ2V0Q2FjaGVkS2V5KCksIEpTT04uc3RyaW5naWZ5KGRvY3VtZW50U2VhcmNoUmVxdWVzdCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYWNoZWREb2N1bWVudFNlYXJjaFJlcXVlc3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5nZXRDYWNoZWRLZXkoKSkgfHwgJyc7XG4gIH1cblxuICBwcml2YXRlIGhhc0NhY2hlZFNlYXJjaFJlcXVlc3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZ2V0Q2FjaGVkS2V5KCkpICE9PSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYWNoZWRLZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2xpc3Qtc2VhcmNoLScgKyB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWU7XG4gIH1cblxuICBwdWJsaWMgcm93Q2xpY2soZG9jdW1lbnQ6IGFueSkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcbiAgICAgIGAvZG9zc2llcnMvJHt0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWV9L2RvY3VtZW50LyR7ZG9jdW1lbnQuaWR9LyR7RGVmYXVsdFRhYnMuc3VtbWFyeX1gLFxuICAgIF0pO1xuICB9XG5cbiAgcHVibGljIHN0YXJ0RG9zc2llcigpIHtcbiAgICBpZiAodGhpcy5wcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAkKCcjc3RhcnRQcm9jZXNzJykubW9kYWwoJ3Nob3cnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gPSB0aGlzLnByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zWzBdO1xuICAgICAgdGhpcy5zaG93U3RhcnRQcm9jZXNzTW9kYWwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dTdGFydFByb2Nlc3NNb2RhbCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gIT09IG51bGwpIHtcbiAgICAgIHRoaXMucHJvY2Vzc1N0YXJ0Lm9wZW5Nb2RhbCh0aGlzLnNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbik7XG4gICAgICB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlbGVjdFByb2Nlc3MocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbjogUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbikge1xuICAgIGNvbnN0IG1vZGFsID0gJCgnI3N0YXJ0UHJvY2VzcycpO1xuICAgIGlmICghdGhpcy5tb2RhbExpc3RlbmVyQWRkZWQpIHtcbiAgICAgIG1vZGFsLm9uKCdoaWRkZW4uYnMubW9kYWwnLCB0aGlzLnNob3dTdGFydFByb2Nlc3NNb2RhbC5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMubW9kYWxMaXN0ZW5lckFkZGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gPSBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uO1xuICAgIG1vZGFsLm1vZGFsKCdoaWRlJyk7XG4gIH1cblxuICBwcml2YXRlIGZpbmREb2N1bWVudERlZmluaXRpb24oZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnREZWZpbml0aW9uKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpLnN1YnNjcmliZShkZWZpbml0aW9uID0+IHtcbiAgICAgIHRoaXMuc2NoZW1hID0gZGVmaW5pdGlvbi5zY2hlbWE7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybURvY3VtZW50cyhkb2N1bWVudHNDb250ZW50OiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5pdGVtcyA9IGRvY3VtZW50c0NvbnRlbnQubWFwKGRvY3VtZW50ID0+IHtcbiAgICAgIGNvbnN0IHtjb250ZW50LCAuLi5vdGhlcnN9ID0gZG9jdW1lbnQ7XG4gICAgICByZXR1cm4gey4uLmNvbnRlbnQsIC4uLm90aGVyc307XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcGFnaW5hdGlvbkNsaWNrZWQocGFnZTogbnVtYmVyKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uLnBhZ2UgPSBwYWdlO1xuICAgIHRoaXMuZG9TZWFyY2goKTtcbiAgfVxuXG4gIHB1YmxpYyBzb3J0Q2hhbmdlZChzb3J0U3RhdGU6IFNvcnRTdGF0ZSkge1xuICAgIHRoaXMucGFnaW5hdGlvbi5zb3J0ID0gc29ydFN0YXRlO1xuICAgIHRoaXMuZG9TZWFyY2goKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJbml0aWFsU29ydFN0YXRlKCk6IFNvcnRTdGF0ZSB7XG4gICAgaWYgKHRoaXMuaGFzQ2FjaGVkU2VhcmNoUmVxdWVzdCgpKSB7XG4gICAgICBjb25zdCBjYWNoZWRSZXF1ZXN0ID0gSlNPTi5wYXJzZSh0aGlzLmdldENhY2hlZERvY3VtZW50U2VhcmNoUmVxdWVzdCgpKTtcbiAgICAgIHJldHVybiBjYWNoZWRSZXF1ZXN0LnNvcnQgPyBjYWNoZWRSZXF1ZXN0LnNvcnQgOiB0aGlzLmluaXRpYWxTb3J0U3RhdGU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmluaXRpYWxTb3J0U3RhdGU7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNpZGViYXJcIj48L25nLWNvbnRhaW5lcj5cblxuPGRpdiBjbGFzcz1cIm1haW4tY29udGVudCBwdC0wXCI+XG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHB4LTAgbWItNVwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcmlnaHQgbXQtbTNweCBtYi0zXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc3BhY2UgYnRuLXByaW1hcnkgbXItMFwiXG4gICAgICAgICAgICAoY2xpY2spPVwic3RhcnREb3NzaWVyKClcIlxuICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwicHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMubGVuZ3RoID09PSAwID8gJ05vIGFjdGlvbicgOiBudWxsXCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb24gbWRpIG1kaS1wbHVzIG1yLTFcIj48L2k+XG4gICAgICAgICAgICB7eyAnU3RhcnQgRG9zc2llcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibW9kYWwgZmFkZVwiXG4gICAgICAgICAgaWQ9XCJzdGFydFByb2Nlc3NcIlxuICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cInN0YXJ0UHJvY2Vzc0xhYmVsXCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1kaWFsb2ctY2VudGVyZWRcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwic3RhcnRQcm9jZXNzTGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdkYXNoYm9hcmQuc3RhcnRQcm9jZXNzLnRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgbS0wXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uIG9mIHByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UHJvY2Vzcyhwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24ucHJvY2Vzc05hbWUgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdjdGEuY2xvc2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8dmFsdGltby13aWRnZXQ+XG4gICAgICAgIDx2YWx0aW1vLWxpc3RcbiAgICAgICAgICBbaXRlbXNdPVwiaXRlbXNcIlxuICAgICAgICAgIFtmaWVsZHNdPVwiZmllbGRzXCJcbiAgICAgICAgICAocm93Q2xpY2tlZCk9XCJyb3dDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgICAgICAgICBbdmlld01vZGVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2hlYWRlcl09XCJ0cnVlXCJcbiAgICAgICAgICBwYWdpbmF0aW9uSWRlbnRpZmllcj1cImRvc3NpZXJMaXN0XCJcbiAgICAgICAgICAocGFnaW5hdGlvbkNsaWNrZWQpPVwicGFnaW5hdGlvbkNsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgKHBhZ2luYXRpb25TZXQpPVwicGFnaW5hdGlvblNldCgpXCJcbiAgICAgICAgICBbaW5pdGlhbFNvcnRTdGF0ZV09XCJnZXRJbml0aWFsU29ydFN0YXRlKClcIlxuICAgICAgICAgIChzb3J0Q2hhbmdlZCk9XCJzb3J0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgaGVhZGVyPlxuICAgICAgICAgICAgPGgzIGNsYXNzPVwibGlzdC1oZWFkZXItdGl0bGVcIj5cbiAgICAgICAgICAgICAge3sgc2NoZW1hPy50aXRsZSB9fVxuICAgICAgICAgICAgICA8c3VwIGNsYXNzPVwibWwtMSBiYWRnZSBiYWRnZS1waWxsIGJhZGdlLXByaW1hcnlcIj57e1xuICAgICAgICAgICAgICAgIGRvY3VtZW50cz8uY29udGVudC5sZW5ndGggfHwgMFxuICAgICAgICAgICAgICB9fTwvc3VwPlxuICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC92YWx0aW1vLWxpc3Q+XG4gICAgICA8L3ZhbHRpbW8td2lkZ2V0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPHZhbHRpbW8tZG9zc2llci1wcm9jZXNzLXN0YXJ0LW1vZGFsICNwcm9jZXNzU3RhcnRNb2RhbD48L3ZhbHRpbW8tZG9zc2llci1wcm9jZXNzLXN0YXJ0LW1vZGFsPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2lkZWJhcj5cbiAgPHZhbHRpbW8tZmlsdGVyLXNpZGViYXI+XG4gICAgPGg0IGNsYXNzPVwidGl0bGVcIj5TZWFyY2g8L2g0PlxuICAgIDxkaXYgY2xhc3M9XCJtYi00XCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2Rvc3NpZXIuZm9ybXMuZ2xvYmFsU2VhcmNoUGxhY2VIb2xkZXInIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJnbG9iYWxTZWFyY2hGaWx0ZXJcIlxuICAgICAgICAoYmx1cik9XCJkb1NlYXJjaCgpXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cImRvU2VhcmNoKClcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJtYi00XCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZG9zc2llci5mb3Jtcy5yZWZlcmVuY2VOdW1iZXJQbGFjZUhvbGRlcicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInNlcXVlbmNlXCJcbiAgICAgICAgKGJsdXIpPVwiZG9TZWFyY2goKVwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJkb1NlYXJjaCgpXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIDwvdmFsdGltby1maWx0ZXItc2lkZWJhcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL2Rvc3NpZXItbGlzdC9kb3NzaWVyLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvZG9zc2llci1saXN0L2Rvc3NpZXItbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQXFCLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUl0RSxPQUFPLEVBRUwseUJBQXlCLEdBTTFCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUViLG9CQUFvQixFQUNwQixNQUFNLEVBRU4sR0FBRyxFQUVILEVBQUUsRUFHRixTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBU3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQU9yRCxNQUFNLE9BQU8sb0JBQW9CO0lBa0kvQixZQUNtQixLQUFxQixFQUNyQixNQUFjLEVBQ2QsZUFBZ0MsRUFDaEMsZ0JBQWtDLEVBQ2xDLGNBQThCLEVBQzlCLE1BQWlCO1FBTGpCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFr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WSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDO1NBQy9DO0lBQ0gsQ0FBQzs7a0hBMVJVLG9CQUFvQjtzR0FBcEIsb0JBQW9CLCtLQzlEakMsb2tLQTRJQTs0RkQ5RWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLHNCQUFzQjs0T0FLQSxZQUFZO3NCQUEzQyxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0RlZmluaXRpb25Db2x1bW59IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge1xuICBEb2N1bWVudFNlYXJjaFJlcXVlc3QsXG4gIERvY3VtZW50U2VhcmNoUmVxdWVzdEltcGwsXG4gIERvY3VtZW50U2VydmljZSxcbiAgU29ydFN0YXRlLFxuICBQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uLFxuICBEb2N1bWVudHMsXG4gIERvY3VtZW50RGVmaW5pdGlvbixcbn0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZyb21FdmVudCxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgc3RhcnRXaXRoLFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7RGVmYXVsdFRhYnN9IGZyb20gJy4uL2Rvc3NpZXItZGV0YWlsLXRhYi1lbnVtJztcbmltcG9ydCB7RG9zc2llclByb2Nlc3NTdGFydE1vZGFsQ29tcG9uZW50fSBmcm9tICcuLi9kb3NzaWVyLXByb2Nlc3Mtc3RhcnQtbW9kYWwvZG9zc2llci1wcm9jZXNzLXN0YXJ0LW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQge0Rvc3NpZXJTZXJ2aWNlfSBmcm9tICcuLi9kb3NzaWVyLnNlcnZpY2UnO1xuaW1wb3J0IHtQYWdpbmF0aW9uLCBMaXN0RmllbGR9IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtOR1hMb2dnZXJ9IGZyb20gJ25neC1sb2dnZXInO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdmFyXG5kZWNsYXJlIHZhciAkO1xuXG5tb21lbnQubG9jYWxlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5nS2V5JykgfHwgJycpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvc3NpZXItbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3NzaWVyLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb3NzaWVyLWxpc3QuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3Byb2Nlc3NTdGFydE1vZGFsJykgcHJvY2Vzc1N0YXJ0OiBEb3NzaWVyUHJvY2Vzc1N0YXJ0TW9kYWxDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb246IFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtb2RhbExpc3RlbmVyQWRkZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdQYWdpbmF0aW9uRm9yRG9jTmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25OYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcy5kb2N1bWVudERlZmluaXRpb25OYW1lIHx8ICcnKSxcbiAgICB0YXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiB7XG4gICAgICB0aGlzLnJlc2V0UGFnaW5hdGlvbihkb2N1bWVudERlZmluaXRpb25OYW1lKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucyQ6IE9ic2VydmFibGU8QXJyYXk8UHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbj4+ID1cbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgICBkb2N1bWVudERlZmluaXRpb25OYW1lXG4gICAgICAgICAgPyB0aGlzLmRvY3VtZW50U2VydmljZS5maW5kUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICAgICAgICA6IG9mKFtdKVxuICAgICAgKSxcbiAgICAgIG1hcChwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucyA9PlxuICAgICAgICBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5maWx0ZXIoZGVmaW5pdGlvbiA9PiBkZWZpbml0aW9uLmNhbkluaXRpYWxpemVEb2N1bWVudClcbiAgICAgIClcbiAgICApO1xuXG4gIHJlYWRvbmx5IHNjaGVtYSQgPSB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldERvY3VtZW50RGVmaW5pdGlvbihkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICksXG4gICAgbWFwKGRvY3VtZW50RGVmaW5pdGlvbiA9PiBkb2N1bWVudERlZmluaXRpb24/LnNjaGVtYSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlZFNlYXJjaFJlcXVlc3RLZXkkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgbWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT4gYGxpc3Qtc2VhcmNoLSR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX1gKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGFzU3RvcmVkU2VhcmNoUmVxdWVzdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnN0b3JlZFNlYXJjaFJlcXVlc3RLZXkkLnBpcGUoXG4gICAgbWFwKHN0b3JlZFNlYXJjaFJlcXVlc3RLZXkgPT4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oc3RvcmVkU2VhcmNoUmVxdWVzdEtleSkgIT09IG51bGwpXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb2x1bW5zJDogT2JzZXJ2YWJsZTxBcnJheTxEZWZpbml0aW9uQ29sdW1uPj4gPVxuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICAgIG1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+XG4gICAgICAgIHRoaXMuZG9zc2llclNlcnZpY2UuZ2V0RGVmaW5pdGlvbkNvbHVtbnMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICAgIClcbiAgICApO1xuXG4gIHJlYWRvbmx5IGZpZWxkcyQ6IE9ic2VydmFibGU8QXJyYXk8TGlzdEZpZWxkPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmNvbHVtbnMkLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2NvbHVtbnNdKSA9PlxuICAgICAgY29sdW1ucy5tYXAoKGNvbHVtbiwgaW5kZXgpID0+ICh7XG4gICAgICAgIGtleTogY29sdW1uLnByb3BlcnR5TmFtZSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBmaWVsZExhYmVscy4ke2NvbHVtbi50cmFuc2xhdGlvbktleX1gKSxcbiAgICAgICAgc29ydGFibGU6IGNvbHVtbi5zb3J0YWJsZSxcbiAgICAgICAgLi4uKGNvbHVtbi52aWV3VHlwZSAmJiB7dmlld1R5cGU6IGNvbHVtbi52aWV3VHlwZX0pLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9QQUdJTkFUSU9OOiBQYWdpbmF0aW9uID0ge1xuICAgIGNvbGxlY3Rpb25TaXplOiAwLFxuICAgIHBhZ2U6IDEsXG4gICAgc2l6ZTogMTAsXG4gICAgbWF4UGFnaW5hdGlvbkl0ZW1TaXplOiA1LFxuICAgIHNvcnQ6IHVuZGVmaW5lZCxcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHJlYWRvbmx5IHBhZ2luYXRpb25Db3B5JCA9IHRoaXMucGFnaW5hdGlvbiQucGlwZShcbiAgICBtYXAocGFnaW5hdGlvbiA9PiBwYWdpbmF0aW9uICYmIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocGFnaW5hdGlvbikpKVxuICApO1xuXG4gIHJlYWRvbmx5IHNlcXVlbmNlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHJlYWRvbmx5IGdsb2JhbFNlYXJjaEZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZWRCeSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VhcmNoUmVxdWVzdCQ6IE9ic2VydmFibGU8RG9jdW1lbnRTZWFyY2hSZXF1ZXN0PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMucGFnaW5hdGlvbiQsXG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJCxcbiAgICB0aGlzLnNlcXVlbmNlJCxcbiAgICB0aGlzLmNyZWF0ZWRCeSQsXG4gICAgdGhpcy5nbG9iYWxTZWFyY2hGaWx0ZXIkLFxuICBdKS5waXBlKFxuICAgIGZpbHRlcigoW3BhZ2luYXRpb25dKSA9PiAhIXBhZ2luYXRpb24pLFxuICAgIG1hcChcbiAgICAgIChbcGFnaW5hdGlvbiwgZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgc2VxdWVuY2UsIGNyZWF0ZWRCeSwgZ2xvYmFsU2VhcmNoRmlsdGVyXSkgPT5cbiAgICAgICAgbmV3IERvY3VtZW50U2VhcmNoUmVxdWVzdEltcGwoXG4gICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICBwYWdpbmF0aW9uLnBhZ2UgLSAxLFxuICAgICAgICAgIHBhZ2luYXRpb24uc2l6ZSxcbiAgICAgICAgICBzZXF1ZW5jZSxcbiAgICAgICAgICBjcmVhdGVkQnksXG4gICAgICAgICAgZ2xvYmFsU2VhcmNoRmlsdGVyLFxuICAgICAgICAgIHBhZ2luYXRpb24uc29ydFxuICAgICAgICApXG4gICAgKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRzUmVxdWVzdCQ6IE9ic2VydmFibGU8RG9jdW1lbnRzPiA9IHRoaXMuZG9jdW1lbnRTZWFyY2hSZXF1ZXN0JC5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VycikpLFxuICAgIHRhcChyZXF1ZXN0ID0+IHtcbiAgICAgIHRoaXMuc3RvcmVkU2VhcmNoUmVxdWVzdEtleSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoc3RvcmVkU2VhcmNoUmVxdWVzdEtleSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBzdG9yZSByZXF1ZXN0IGluIGxvY2FsIHN0b3JhZ2U6ICR7SlNPTi5zdHJpbmdpZnkocmVxdWVzdCl9YCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHN0b3JlZFNlYXJjaFJlcXVlc3RLZXksIEpTT04uc3RyaW5naWZ5KHJlcXVlc3QpKTtcbiAgICAgIH0pO1xuICAgIH0pLFxuICAgIHN3aXRjaE1hcChkb2N1bWVudFNlYXJjaFJlcXVlc3QgPT4gdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnRzKGRvY3VtZW50U2VhcmNoUmVxdWVzdCkpLFxuICAgIHRhcChkb2N1bWVudHMgPT4ge1xuICAgICAgdGhpcy5zZXRDb2xsZWN0aW9uU2l6ZShkb2N1bWVudHMpO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgZG9jdW1lbnRJdGVtcyQgPSB0aGlzLmRvY3VtZW50c1JlcXVlc3QkLnBpcGUoXG4gICAgbWFwKGRvY3VtZW50cyA9PlxuICAgICAgZG9jdW1lbnRzLmNvbnRlbnQubWFwKGRvY3VtZW50ID0+IHtcbiAgICAgICAgY29uc3Qge2NvbnRlbnQsIC4uLm90aGVyc30gPSBkb2N1bWVudDtcbiAgICAgICAgcmV0dXJuIHsuLi5jb250ZW50LCAuLi5vdGhlcnN9O1xuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvc3NpZXJTZXJ2aWNlOiBEb3NzaWVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlcjogTkdYTG9nZ2VyXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsTGlzdGVuZXJBZGRlZCA9IGZhbHNlO1xuICB9XG5cbiAgZ2xvYmFsU2VhcmNoRmlsdGVyQ2hhbmdlKHNlYXJjaEZpbHRlcjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5nbG9iYWxTZWFyY2hGaWx0ZXIkLm5leHQoc2VhcmNoRmlsdGVyKTtcbiAgICB0aGlzLnBhZ2VDaGFuZ2UoMSk7XG4gIH1cblxuICBzZXF1ZW5jZUNoYW5nZShzZXF1ZW5jZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZXF1ZW5jZSQubmV4dChOdW1iZXIoc2VxdWVuY2UpKTtcbiAgICB0aGlzLnBhZ2VDaGFuZ2UoMSk7XG4gIH1cblxuICBwYWdlQ2hhbmdlKG5ld1BhZ2U6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocGFnaW5hdGlvbiA9PiB7XG4gICAgICBpZiAocGFnaW5hdGlvbiAmJiBwYWdpbmF0aW9uLnBhZ2UgIT09IG5ld1BhZ2UpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFBhZ2UgY2hhbmdlOiAke25ld1BhZ2V9YCk7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7Li4ucGFnaW5hdGlvbiwgcGFnZTogbmV3UGFnZX0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcGFnZVNpemVDaGFuZ2UobmV3UGFnZVNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocGFnaW5hdGlvbiA9PiB7XG4gICAgICBpZiAocGFnaW5hdGlvbiAmJiBwYWdpbmF0aW9uLnNpemUgIT09IG5ld1BhZ2VTaXplKSB7XG4gICAgICAgIGNvbnN0IGFtb3VudE9mQXZhaWxhYmxlUGFnZXMgPSBNYXRoLmNlaWwocGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZSAvIG5ld1BhZ2VTaXplKTtcbiAgICAgICAgY29uc3QgbmV3UGFnZSA9XG4gICAgICAgICAgYW1vdW50T2ZBdmFpbGFibGVQYWdlcyA8IHBhZ2luYXRpb24ucGFnZSA/IGFtb3VudE9mQXZhaWxhYmxlUGFnZXMgOiBwYWdpbmF0aW9uLnBhZ2U7XG5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFBhZ2Ugc2l6ZSBjaGFuZ2UuIE5ldyBQYWdlOiAke25ld1BhZ2V9IE5ldyBwYWdlIHNpemU6ICR7bmV3UGFnZVNpemV9YCk7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7Li4ucGFnaW5hdGlvbiwgc2l6ZTogbmV3UGFnZVNpemUsIHBhZ2U6IG5ld1BhZ2V9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNvcnRDaGFuZ2VkKG5ld1NvcnRTdGF0ZTogU29ydFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShwYWdpbmF0aW9uID0+IHtcbiAgICAgIGlmIChwYWdpbmF0aW9uICYmIEpTT04uc3RyaW5naWZ5KHBhZ2luYXRpb24uc29ydCkgIT09IEpTT04uc3RyaW5naWZ5KG5ld1NvcnRTdGF0ZSkpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFNvcnQgc3RhdGUgY2hhbmdlOiAke0pTT04uc3RyaW5naWZ5KG5ld1NvcnRTdGF0ZSl9YCk7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7Li4ucGFnaW5hdGlvbiwgc29ydDogbmV3U29ydFN0YXRlfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByb3dDbGljayhkb2N1bWVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShkb2N1bWVudERlZmluaXRpb25OYW1lID0+IHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcbiAgICAgICAgYC9kb3NzaWVycy8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L2RvY3VtZW50LyR7ZG9jdW1lbnQuaWR9LyR7RGVmYXVsdFRhYnMuc3VtbWFyeX1gLFxuICAgICAgXSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGFydERvc3NpZXIoKTogdm9pZCB7XG4gICAgdGhpcy5hc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMkXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZShhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMgPT4ge1xuICAgICAgICBpZiAoYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAkKCcjc3RhcnRQcm9jZXNzJykubW9kYWwoJ3Nob3cnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiA9IGFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uc1swXTtcbiAgICAgICAgICB0aGlzLnNob3dTdGFydFByb2Nlc3NNb2RhbCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHNlbGVjdFByb2Nlc3MocHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbjogUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IG1vZGFsID0gJCgnI3N0YXJ0UHJvY2VzcycpO1xuICAgIGlmICghdGhpcy5tb2RhbExpc3RlbmVyQWRkZWQpIHtcbiAgICAgIG1vZGFsLm9uKCdoaWRkZW4uYnMubW9kYWwnLCB0aGlzLnNob3dTdGFydFByb2Nlc3NNb2RhbC5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMubW9kYWxMaXN0ZW5lckFkZGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gPSBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uO1xuICAgIG1vZGFsLm1vZGFsKCdoaWRlJyk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0UGFnaW5hdGlvbihkb2N1bWVudERlZmluaXRpb25OYW1lKTogdm9pZCB7XG4gICAgdGhpcy5zZXR0aW5nUGFnaW5hdGlvbkZvckRvY05hbWUkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHNldHRpbmdQYWdpbmF0aW9uRm9yRG9jTmFtZSA9PiB7XG4gICAgICBpZiAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSAhPT0gc2V0dGluZ1BhZ2luYXRpb25Gb3JEb2NOYW1lKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnY2xlYXIgcGFnaW5hdGlvbicpO1xuICAgICAgICB0aGlzLnNldHRpbmdQYWdpbmF0aW9uRm9yRG9jTmFtZSQubmV4dChkb2N1bWVudERlZmluaXRpb25OYW1lKTtcbiAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQYWdpbmF0aW9uKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuaGFzU3RvcmVkU2VhcmNoUmVxdWVzdCQsIHRoaXMuc3RvcmVkU2VhcmNoUmVxdWVzdEtleSQsIHRoaXMuY29sdW1ucyRdKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtoYXNTdG9yZWRTZWFyY2hSZXF1ZXN0LCBzdG9yZWRTZWFyY2hSZXF1ZXN0S2V5LCBjb2x1bW5zXSkgPT4ge1xuICAgICAgICBjb25zdCBkZWZhdWx0UGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHRoaXMuZ2V0RGVmYXVsdFBhZ2luYXRpb24oY29sdW1ucyk7XG4gICAgICAgIGNvbnN0IHN0b3JlZFBhZ2luYXRpb246IFBhZ2luYXRpb24gPSB0aGlzLmdldFN0b3JlZFBhZ2luYXRpb24oXG4gICAgICAgICAgaGFzU3RvcmVkU2VhcmNoUmVxdWVzdCxcbiAgICAgICAgICBzdG9yZWRTZWFyY2hSZXF1ZXN0S2V5XG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYFNldCBwYWdpbmF0aW9uOiAke0pTT04uc3RyaW5naWZ5KHN0b3JlZFBhZ2luYXRpb24gfHwgZGVmYXVsdFBhZ2luYXRpb24pfWBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHN0b3JlZFBhZ2luYXRpb24gfHwgZGVmYXVsdFBhZ2luYXRpb24pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRQYWdpbmF0aW9uKGNvbHVtbnM6IEFycmF5PERlZmluaXRpb25Db2x1bW4+KTogUGFnaW5hdGlvbiB7XG4gICAgY29uc3QgZGVmYXVsdFNvcnRTdGF0ZSA9IHRoaXMuZG9zc2llclNlcnZpY2UuZ2V0SW5pdGlhbFNvcnRTdGF0ZShjb2x1bW5zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLkRFRkFVTFRfUEFHSU5BVElPTixcbiAgICAgIHNvcnQ6IGRlZmF1bHRTb3J0U3RhdGUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RvcmVkUGFnaW5hdGlvbihcbiAgICBoYXNTdG9yZWRTZWFyY2hSZXF1ZXN0OiBib29sZWFuLFxuICAgIHN0b3JlZFNlYXJjaFJlcXVlc3RLZXk6IHN0cmluZ1xuICApOiBQYWdpbmF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdG9yZWRTZWFyY2hSZXF1ZXN0ID1cbiAgICAgIGhhc1N0b3JlZFNlYXJjaFJlcXVlc3QgJiYgSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShzdG9yZWRTZWFyY2hSZXF1ZXN0S2V5KSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgc3RvcmVkU2VhcmNoUmVxdWVzdCAmJiB7XG4gICAgICAgIC4uLnRoaXMuREVGQVVMVF9QQUdJTkFUSU9OLFxuICAgICAgICBzb3J0OiBzdG9yZWRTZWFyY2hSZXF1ZXN0LnNvcnQsXG4gICAgICAgIHBhZ2U6IHN0b3JlZFNlYXJjaFJlcXVlc3QucGFnZSArIDEsXG4gICAgICAgIHNpemU6IHN0b3JlZFNlYXJjaFJlcXVlc3Quc2l6ZSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb2xsZWN0aW9uU2l6ZShkb2N1bWVudHM6IERvY3VtZW50cyk6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocGFnaW5hdGlvbiA9PiB7XG4gICAgICBpZiAocGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZSAhPT0gZG9jdW1lbnRzLnRvdGFsRWxlbWVudHMpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHsuLi5wYWdpbmF0aW9uLCBjb2xsZWN0aW9uU2l6ZTogZG9jdW1lbnRzLnRvdGFsRWxlbWVudHN9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1N0YXJ0UHJvY2Vzc01vZGFsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbiAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5wcm9jZXNzU3RhcnQub3Blbk1vZGFsKHRoaXMuc2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNpZGViYXJcIj48L25nLWNvbnRhaW5lcj5cblxuPGRpdiBjbGFzcz1cIm1haW4tY29udGVudCBwdC0wXCI+XG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHB4LTAgbWItNVwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucyQgfCBhc3luYyBhcyBhc3NvY2lhdGVkUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnNcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcmlnaHQgbXQtbTNweCBtYi0zXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc3BhY2UgYnRuLXByaW1hcnkgbXItMFwiXG4gICAgICAgICAgICAoY2xpY2spPVwic3RhcnREb3NzaWVyKClcIlxuICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zLmxlbmd0aCA9PT0gMCA/ICdObyBhY3Rpb24nIDogbnVsbFwiXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFzc29jaWF0ZWRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLXBsdXMgbXItMVwiPjwvaT5cbiAgICAgICAgICAgIHt7ICdTdGFydCBEb3NzaWVyJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJtb2RhbCBmYWRlXCJcbiAgICAgICAgICBpZD1cInN0YXJ0UHJvY2Vzc1wiXG4gICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwic3RhcnRQcm9jZXNzTGFiZWxcIlxuICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1jZW50ZXJlZFwiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJzdGFydFByb2Nlc3NMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAge3sgJ2Rhc2hib2FyZC5zdGFydFByb2Nlc3MudGl0bGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBtLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gb2YgYXNzb2NpYXRlZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UHJvY2Vzcyhwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24ucHJvY2Vzc05hbWUgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdjdGEuY2xvc2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8dmFsdGltby13aWRnZXQ+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L3ZhbHRpbW8td2lkZ2V0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPHZhbHRpbW8tZG9zc2llci1wcm9jZXNzLXN0YXJ0LW1vZGFsICNwcm9jZXNzU3RhcnRNb2RhbD48L3ZhbHRpbW8tZG9zc2llci1wcm9jZXNzLXN0YXJ0LW1vZGFsPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbGlzdD5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2luYXRpb25Db3B5JCB8IGFzeW5jIGFzIHBhZ2luYXRpb25cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGRzJCB8IGFzeW5jIGFzIGZpZWxkc1wiPlxuICAgICAgPHZhbHRpbW8tbGlzdFxuICAgICAgICAqbmdJZj1cImRvY3VtZW50SXRlbXMkIHwgYXN5bmMgYXMgZG9jdW1lbnRJdGVtc1wiXG4gICAgICAgIFtpdGVtc109XCJkb2N1bWVudEl0ZW1zXCJcbiAgICAgICAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICAgICAgICAocm93Q2xpY2tlZCk9XCJyb3dDbGljaygkZXZlbnQpXCJcbiAgICAgICAgW3BhZ2luYXRpb25dPVwicGFnaW5hdGlvblwiXG4gICAgICAgIFt2aWV3TW9kZV09XCJ0cnVlXCJcbiAgICAgICAgW2hlYWRlcl09XCJ0cnVlXCJcbiAgICAgICAgcGFnaW5hdGlvbklkZW50aWZpZXI9XCJkb3NzaWVyTGlzdFwiXG4gICAgICAgIChwYWdpbmF0aW9uQ2xpY2tlZCk9XCJwYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAocGFnaW5hdGlvblNldCk9XCJwYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW2luaXRpYWxTb3J0U3RhdGVdPVwicGFnaW5hdGlvbi5zb3J0XCJcbiAgICAgICAgKHNvcnRDaGFuZ2VkKT1cInNvcnRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGhlYWRlcj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJsaXN0LWhlYWRlci10aXRsZVwiPlxuICAgICAgICAgICAge3sgKHNjaGVtYSQgfCBhc3luYyk/LnRpdGxlIH19XG4gICAgICAgICAgICA8c3VwIGNsYXNzPVwibWwtMSBiYWRnZSBiYWRnZS1waWxsIGJhZGdlLXByaW1hcnlcIj57eyBkb2N1bWVudEl0ZW1zPy5sZW5ndGggfHwgMCB9fTwvc3VwPlxuICAgICAgICAgIDwvaDM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92YWx0aW1vLWxpc3Q+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzaWRlYmFyPlxuICA8dmFsdGltby1maWx0ZXItc2lkZWJhcj5cbiAgICA8aDQgY2xhc3M9XCJ0aXRsZVwiPlNlYXJjaDwvaDQ+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTRcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZG9zc2llci5mb3Jtcy5nbG9iYWxTZWFyY2hQbGFjZUhvbGRlcicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBbbmdNb2RlbF09XCJnbG9iYWxTZWFyY2hGaWx0ZXIkIHwgYXN5bmNcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJnbG9iYWxTZWFyY2hGaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1iLTRcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdkb3NzaWVyLmZvcm1zLnJlZmVyZW5jZU51bWJlclBsYWNlSG9sZGVyJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIFtuZ01vZGVsXT1cInNlcXVlbmNlJCB8IGFzeW5jXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VxdWVuY2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICA8L3ZhbHRpbW8tZmlsdGVyLXNpZGViYXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|