@net7/boilerplate-arianna 3.9.2 → 4.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/esm2020/lib/components/aw-facets-wrapper/aw-facets-wrapper.mjs +6 -6
- package/esm2020/lib/components/bubble-chart-wrapper/bubble-chart-wrapper.mjs +4 -4
- package/esm2020/lib/components/chart-tippy/chart-tippy.mjs +6 -6
- package/esm2020/lib/components/extended-tree/extended-tree.mjs +8 -8
- package/esm2020/lib/components/index.mjs +2 -1
- package/esm2020/lib/components/pdf-viewer/pdf-viewer.mjs +7 -7
- package/esm2020/lib/components/scheda-dropdown/scheda-dropdown.mjs +4 -4
- package/esm2020/lib/components/scheda-image-navigator/scheda-image-navigator.mjs +6 -6
- package/esm2020/lib/components/scheda-search/scheda-search.mjs +18 -0
- package/esm2020/lib/components/smart-breadcrumbs/smart-breadcrumbs.mjs +6 -6
- package/esm2020/lib/config/apollo.config.mjs +5 -1
- package/esm2020/lib/config-types/arianna/layouts.mjs +1 -1
- package/esm2020/lib/data-sources/aw-facets-wrapper.ds.mjs +1 -1
- package/esm2020/lib/data-sources/extended-tree.ds.mjs +25 -4
- package/esm2020/lib/data-sources/home-facets-wrapper.ds.mjs +14 -2
- package/esm2020/lib/data-sources/index.mjs +2 -1
- package/esm2020/lib/data-sources/scheda-search.ds.mjs +141 -0
- package/esm2020/lib/event-handlers/extended-tree.eh.mjs +11 -3
- package/esm2020/lib/event-handlers/index.mjs +2 -1
- package/esm2020/lib/event-handlers/scheda-search.eh.mjs +15 -0
- package/esm2020/lib/layouts/collection-layout/collection-layout.mjs +6 -6
- package/esm2020/lib/layouts/entita-layout/entita-layout.mjs +7 -7
- package/esm2020/lib/layouts/gallery-layout/gallery-layout.mjs +8 -8
- package/esm2020/lib/layouts/home-layout/home-layout.ds.mjs +5 -1
- package/esm2020/lib/layouts/home-layout/home-layout.mjs +10 -10
- package/esm2020/lib/layouts/map-layout/map-layout.mjs +7 -7
- package/esm2020/lib/layouts/scheda-layout/scheda-layout.config.mjs +2 -1
- package/esm2020/lib/layouts/scheda-layout/scheda-layout.ds.mjs +65 -8
- package/esm2020/lib/layouts/scheda-layout/scheda-layout.eh.mjs +104 -14
- package/esm2020/lib/layouts/scheda-layout/scheda-layout.mjs +11 -10
- package/esm2020/lib/layouts/search-layout/search-layout.mjs +8 -8
- package/esm2020/lib/layouts/timeline-layout/timeline-layout.mjs +7 -7
- package/esm2020/lib/n7-boilerplate-arianna.module.mjs +15 -13
- package/esm2020/lib/search/aw-search.service.mjs +4 -4
- package/fesm2015/net7-boilerplate-arianna.mjs +485 -129
- package/fesm2015/net7-boilerplate-arianna.mjs.map +1 -1
- package/fesm2020/net7-boilerplate-arianna.mjs +494 -129
- package/fesm2020/net7-boilerplate-arianna.mjs.map +1 -1
- package/{net7-boilerplate-arianna.d.ts → index.d.ts} +0 -0
- package/lib/components/aw-facets-wrapper/aw-facets-wrapper.d.ts +1 -1
- package/lib/components/bubble-chart-wrapper/bubble-chart-wrapper.d.ts +1 -1
- package/lib/components/chart-tippy/chart-tippy.d.ts +1 -1
- package/lib/components/extended-tree/extended-tree.d.ts +2 -1
- package/lib/components/index.d.ts +1 -0
- package/lib/components/pdf-viewer/pdf-viewer.d.ts +1 -1
- package/lib/components/scheda-dropdown/scheda-dropdown.d.ts +1 -1
- package/lib/components/scheda-image-navigator/scheda-image-navigator.d.ts +1 -1
- package/lib/components/scheda-search/scheda-search.d.ts +28 -0
- package/lib/components/smart-breadcrumbs/smart-breadcrumbs.d.ts +1 -1
- package/lib/config-types/arianna/layouts.d.ts +20 -0
- package/lib/data-sources/extended-tree.ds.d.ts +7 -1
- package/lib/data-sources/home-facets-wrapper.ds.d.ts +1 -0
- package/lib/data-sources/index.d.ts +1 -0
- package/lib/data-sources/scheda-search.ds.d.ts +9 -0
- package/lib/event-handlers/index.d.ts +1 -0
- package/lib/event-handlers/scheda-search.eh.d.ts +6 -0
- package/lib/layouts/collection-layout/collection-layout.d.ts +1 -1
- package/lib/layouts/entita-layout/entita-layout.d.ts +1 -1
- package/lib/layouts/gallery-layout/gallery-layout.d.ts +1 -1
- package/lib/layouts/home-layout/home-layout.d.ts +1 -1
- package/lib/layouts/map-layout/map-layout.d.ts +1 -1
- package/lib/layouts/scheda-layout/scheda-layout.d.ts +1 -1
- package/lib/layouts/scheda-layout/scheda-layout.ds.d.ts +6 -0
- package/lib/layouts/scheda-layout/scheda-layout.eh.d.ts +2 -0
- package/lib/layouts/search-layout/search-layout.d.ts +1 -1
- package/lib/layouts/timeline-layout/timeline-layout.d.ts +1 -1
- package/lib/n7-boilerplate-arianna.module.d.ts +7 -6
- package/package.json +6 -6
- package/src/lib/styles/arianna/components/_extended-tree.scss +35 -2
- package/src/lib/styles/arianna/components/_scheda-search.scss +119 -0
- package/src/lib/styles/arianna/layouts/_home-layout.scss +16 -4
- package/src/lib/styles/arianna/layouts/_scheda-layout.scss +5 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EventHandler } from '@net7/core';
|
|
2
|
-
import {
|
|
2
|
+
import { isEmpty, isEqual, isNumber } from 'lodash';
|
|
3
3
|
import { forkJoin, from, of, ReplaySubject, Subject, timer } from 'rxjs';
|
|
4
4
|
import { debounce, filter, first, switchMap } from 'rxjs/operators';
|
|
5
5
|
export class AwSchedaLayoutEH extends EventHandler {
|
|
@@ -8,6 +8,7 @@ export class AwSchedaLayoutEH extends EventHandler {
|
|
|
8
8
|
this.destroyed$ = new Subject();
|
|
9
9
|
this.treeLoaded$ = new ReplaySubject();
|
|
10
10
|
this.extendedTreeChanged$ = new Subject();
|
|
11
|
+
this.schedaSearchChanged$ = new Subject();
|
|
11
12
|
}
|
|
12
13
|
listen() {
|
|
13
14
|
this.innerEvents$.subscribe(({ type, payload }) => {
|
|
@@ -25,6 +26,7 @@ export class AwSchedaLayoutEH extends EventHandler {
|
|
|
25
26
|
this.listenRoute();
|
|
26
27
|
this.listenRouteQueryParams();
|
|
27
28
|
this.listenExtendedTree();
|
|
29
|
+
this.listenSchedaSearch();
|
|
28
30
|
this.loadNavigation(paramId);
|
|
29
31
|
this.emitOuter('viewleaf');
|
|
30
32
|
// scroll top
|
|
@@ -51,6 +53,9 @@ export class AwSchedaLayoutEH extends EventHandler {
|
|
|
51
53
|
case 'aw-scheda-dropdown.click':
|
|
52
54
|
this.dataSource.changeDigitalObject(payload);
|
|
53
55
|
break;
|
|
56
|
+
/**
|
|
57
|
+
* EXTENDED TREE EVENTS
|
|
58
|
+
* ---------------------------------------------------> */
|
|
54
59
|
case 'aw-extended-tree.change':
|
|
55
60
|
{
|
|
56
61
|
let key;
|
|
@@ -97,6 +102,38 @@ export class AwSchedaLayoutEH extends EventHandler {
|
|
|
97
102
|
});
|
|
98
103
|
}
|
|
99
104
|
break;
|
|
105
|
+
/**
|
|
106
|
+
* SCHEDA (INTERNAL) SEARCH EVENTS
|
|
107
|
+
* ---------------------------------------------------> */
|
|
108
|
+
case 'aw-scheda-search.change':
|
|
109
|
+
{
|
|
110
|
+
let key;
|
|
111
|
+
let delay;
|
|
112
|
+
if (payload.inputPayload === 'input-change') {
|
|
113
|
+
key = 'query';
|
|
114
|
+
delay = 1000;
|
|
115
|
+
}
|
|
116
|
+
else if (payload.inputPayload === 'input-enter') {
|
|
117
|
+
key = 'query';
|
|
118
|
+
}
|
|
119
|
+
else if (payload.inputPayload === 'limit-select') {
|
|
120
|
+
key = 'limit';
|
|
121
|
+
}
|
|
122
|
+
if (key) {
|
|
123
|
+
this.schedaSearchChanged$.next({
|
|
124
|
+
key,
|
|
125
|
+
delay,
|
|
126
|
+
value: payload.value,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
break;
|
|
131
|
+
case 'aw-scheda-search.click':
|
|
132
|
+
this.schedaSearchChanged$.next({
|
|
133
|
+
key: 'page',
|
|
134
|
+
value: payload
|
|
135
|
+
});
|
|
136
|
+
break;
|
|
100
137
|
default:
|
|
101
138
|
break;
|
|
102
139
|
}
|
|
@@ -116,6 +153,7 @@ export class AwSchedaLayoutEH extends EventHandler {
|
|
|
116
153
|
if (response) {
|
|
117
154
|
this.dataSource.loadContent(response);
|
|
118
155
|
this.dataSource.loadExtendedTree();
|
|
156
|
+
this.dataSource.loadInternalSearch();
|
|
119
157
|
this.checkTreeItems(response);
|
|
120
158
|
}
|
|
121
159
|
});
|
|
@@ -146,23 +184,75 @@ export class AwSchedaLayoutEH extends EventHandler {
|
|
|
146
184
|
});
|
|
147
185
|
});
|
|
148
186
|
}
|
|
187
|
+
listenSchedaSearch() {
|
|
188
|
+
this.schedaSearchChanged$.pipe(filter(({ key, value }) => !(key === 'page' && (!isNumber(+value) || +value < 1))), debounce(({ delay }) => timer(delay || 1))).subscribe(({ key, value }) => {
|
|
189
|
+
const queryParams = {};
|
|
190
|
+
if (typeof value === 'string') {
|
|
191
|
+
queryParams[`search-${key}`] = value.trim().length ? value : null;
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
queryParams[`search-${key}`] = `${value}`;
|
|
195
|
+
}
|
|
196
|
+
// page check
|
|
197
|
+
if (key !== 'page') {
|
|
198
|
+
queryParams['search-page'] = '1';
|
|
199
|
+
}
|
|
200
|
+
// update url
|
|
201
|
+
this.router.navigate([], {
|
|
202
|
+
queryParams,
|
|
203
|
+
queryParamsHandling: 'merge'
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
}
|
|
149
207
|
listenRouteQueryParams() {
|
|
150
208
|
this.route.queryParams.subscribe((params) => {
|
|
151
|
-
const extendedTreeParams =
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
209
|
+
const extendedTreeParams = {};
|
|
210
|
+
const internalSearchParams = {};
|
|
211
|
+
Object.keys(params).forEach((key) => {
|
|
212
|
+
const treeAllowed = ['query', 'page', 'limit'];
|
|
213
|
+
const internalAllowed = treeAllowed.map((item) => `search-${item}`);
|
|
214
|
+
if (treeAllowed.includes(key)) {
|
|
215
|
+
let value;
|
|
216
|
+
if (key !== 'query') {
|
|
217
|
+
value = isNumber(+params[key]) ? +params[key] : null;
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
value = params[key];
|
|
221
|
+
}
|
|
222
|
+
if (value) {
|
|
223
|
+
extendedTreeParams[key] = value;
|
|
224
|
+
}
|
|
156
225
|
}
|
|
157
|
-
|
|
158
|
-
|
|
226
|
+
if (internalAllowed.includes(key)) {
|
|
227
|
+
let value;
|
|
228
|
+
if (key !== 'search-query') {
|
|
229
|
+
value = isNumber(+params[key]) ? +params[key] : null;
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
value = params[key];
|
|
233
|
+
}
|
|
234
|
+
if (value) {
|
|
235
|
+
internalSearchParams[key] = value;
|
|
236
|
+
}
|
|
159
237
|
}
|
|
160
238
|
});
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
this.dataSource.
|
|
239
|
+
// scheda search changed
|
|
240
|
+
if (!isEqual(this.dataSource.internalSearchParams, internalSearchParams)) {
|
|
241
|
+
this.dataSource.internalSearchParams = internalSearchParams;
|
|
242
|
+
// has node response
|
|
243
|
+
if (this.dataSource.lastResponse) {
|
|
244
|
+
this.emitOuter('schedasearchrequest');
|
|
245
|
+
this.dataSource.loadInternalSearch();
|
|
246
|
+
}
|
|
247
|
+
// extended tree changed
|
|
248
|
+
}
|
|
249
|
+
if (!isEqual(this.dataSource.extendedTreeParams, extendedTreeParams)) {
|
|
250
|
+
this.dataSource.extendedTreeParams = extendedTreeParams;
|
|
251
|
+
// has node response
|
|
252
|
+
if (this.dataSource.lastResponse) {
|
|
253
|
+
this.emitOuter('extendedtreerequest');
|
|
254
|
+
this.dataSource.loadExtendedTree();
|
|
255
|
+
}
|
|
166
256
|
}
|
|
167
257
|
});
|
|
168
258
|
}
|
|
@@ -254,4 +344,4 @@ export class AwSchedaLayoutEH extends EventHandler {
|
|
|
254
344
|
});
|
|
255
345
|
}
|
|
256
346
|
}
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWRhLWxheW91dC5laC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL243LWJvaWxlcnBsYXRlLWFyaWFubmEvc3JjL2xpYi9sYXlvdXRzL3NjaGVkYS1sYXlvdXQvc2NoZWRhLWxheW91dC5laC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQ2xELE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFDbkMsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsWUFBWTtJQUFsRDs7UUFHVSxlQUFVLEdBQWlCLElBQUksT0FBTyxFQUFFLENBQUM7UUFRekMsZ0JBQVcsR0FBd0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUV2RCx5QkFBb0IsR0FJdkIsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQWtSckIsQ0FBQztJQTlRUSxNQUFNO1FBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO1lBQ2hELFFBQVEsSUFBSSxFQUFFO2dCQUNaLEtBQUssdUJBQXVCO29CQUFFO3dCQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO3dCQUMzQyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENB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LENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRU8sY0FBYyxDQUFDLFFBQVE7UUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ25CLEtBQUssRUFBRSxDQUNSLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNmLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUQsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDcEQ7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRXZlbnRIYW5kbGVyIH0gZnJvbSAnQG5ldDcvY29yZSc7XG5pbXBvcnQgeyBjbG9uZSwgaXNFbXB0eSwgaXNOdW1iZXIgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgZm9ya0pvaW4sIGZyb20sIG9mLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCB0aW1lclxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlLCBmaWx0ZXIsIGZpcnN0LCBzd2l0Y2hNYXBcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICdAbmV0Ny9ib2lsZXJwbGF0ZS1jb21tb24nO1xuaW1wb3J0IHsgQXdTY2hlZGFMYXlvdXREUyB9IGZyb20gJy4vc2NoZWRhLWxheW91dC5kcyc7XG5cbmV4cG9ydCBjbGFzcyBBd1NjaGVkYUxheW91dEVIIGV4dGVuZHMgRXZlbnRIYW5kbGVyIHtcbiAgZGF0YVNvdXJjZTogQXdTY2hlZGFMYXlvdXREUztcblxuICBwcml2YXRlIGRlc3Ryb3llZCQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uU2VydmljZTtcblxuICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcblxuICBwcml2YXRlIHJvdXRlcjogUm91dGVyO1xuXG4gIHByaXZhdGUgdHJlZUxvYWRlZCQ6IFJlcGxheVN1YmplY3Q8dm9pZD4gPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xuXG4gIHByaXZhdGUgZXh0ZW5kZWRUcmVlQ2hhbmdlZCQ6IFN1YmplY3Q8e1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgZGVsYXk/OiBudW1iZXI7XG4gIH0+ID0gbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIHBhZ2VJbnB1dFZhbHVlOiBudW1iZXI7XG5cbiAgcHVibGljIGxpc3RlbigpIHtcbiAgICB0aGlzLmlubmVyRXZlbnRzJC5zdWJzY3JpYmUoKHsgdHlwZSwgcGF5bG9hZCB9KSA9PiB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnYXctc2NoZWRhLWxheW91dC5pbml0Jzoge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5vbkluaXQocGF5bG9hZCk7XG4gICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gcGF5bG9hZC5jb25maWd1cmF0aW9uO1xuICAgICAgICAgIHRoaXMucm91dGUgPSBwYXlsb2FkLnJvdXRlO1xuICAgICAgICAgIHRoaXMucm91dGVyID0gcGF5bG9hZC5yb3V0ZXI7XG4gICAgICAgICAgY29uc3QgcGFyYW1JZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmlkIHx8ICcnO1xuICAgICAgICAgIGlmIChwYXJhbUlkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY3VycmVudElkID0gcGFyYW1JZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5saXN0ZW5Sb3V0ZSgpO1xuICAgICAgICAgIHRoaXMubGlzdGVuUm91dGVRdWVyeVBhcmFtcygpO1xuICAgICAgICAgIHRoaXMubGlzdGVuRXh0ZW5kZWRUcmVlKCk7XG4gICAgICAgICAgdGhpcy5sb2FkTmF2aWdhdGlvbihwYXJhbUlkKTtcbiAgICAgICAgICB0aGlzLmVtaXRPdXRlcigndmlld2xlYWYnKTtcbiAgICAgICAgICAvLyBzY3JvbGwgdG9wXG4gICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2F3LXNjaGVkYS1sYXlvdXQuZGVzdHJveSc6XG4gICAgICAgICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2Uub25EZXN0cm95KCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXctc2NoZWRhLWxheW91dC50b2dnbGVzaWRlYmFyJzpcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY29sbGFwc2VTaWRlYmFyKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ3VuaGFuZGxlZCBpbm5lciBldmVudCBvZiB0eXBlJywgdHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLm91dGVyRXZlbnRzJC5zdWJzY3JpYmUoKHsgdHlwZSwgcGF5bG9hZCB9KSA9PiB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnYXctc2lkZWJhci1oZWFkZXIuY2xpY2snOlxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jb2xsYXBzZVNpZGViYXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXctc2NoZWRhLWRyb3Bkb3duLmNsaWNrJzpcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY2hhbmdlRGlnaXRhbE9iamVjdChwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXctZXh0ZW5kZWQtdHJlZS5jaGFuZ2UnOiB7XG4gICAgICAgICAgbGV0IGtleTogc3RyaW5nO1xuICAgICAgICAgIGxldCBkZWxheTogbnVtYmVyO1xuICAgICAgICAgIGlmIChwYXlsb2FkLmlucHV0UGF5bG9hZCA9PT0gJ3NlYXJjaC1pbnB1dCcpIHtcbiAgICAgICAgICAgIGtleSA9ICdxdWVyeSc7XG4gICAgICAgICAgICBkZWxheSA9IDEwMDA7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkLmlucHV0UGF5bG9hZCA9PT0gJ2xpbWl0LXNlbGVjdCcpIHtcbiAgICAgICAgICAgIGtleSA9ICdsaW1pdCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkLmlucHV0UGF5bG9hZCA9PT0gJ3BhZ2UtaW5wdXQtY2hhbmdlJykge1xuICAgICAgICAgICAgdGhpcy5wYWdlSW5wdXRWYWx1ZSA9ICtwYXlsb2FkLnZhbHVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZC5pbnB1dFBheWxvYWQgPT09ICdwYWdlLWlucHV0LWVudGVyJykge1xuICAgICAgICAgICAga2V5ID0gJ3BhZ2UnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIHRoaXMuZXh0ZW5kZWRUcmVlQ2hhbmdlZCQubmV4dCh7XG4gICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgZGVsYXksXG4gICAgICAgICAgICAgIHZhbHVlOiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGJyZWFrO1xuICAgICAgICBjYXNlICdhdy1leHRlbmRlZC10cmVlLnNlYXJjaCc6XG4gICAgICAgICAgdGhpcy5leHRlbmRlZFRyZWVDaGFuZ2VkJC5uZXh0KHtcbiAgICAgICAgICAgIGtleTogJ3F1ZXJ5JyxcbiAgICAgICAgICAgIHZhbHVlOiBwYXlsb2FkLnZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F3LWV4dGVuZGVkLXRyZWUuY2xpY2snOlxuICAgICAgICAgIHRoaXMuZXh0ZW5kZWRUcmVlQ2hhbmdlZCQubmV4dCh7XG4gICAgICAgICAgICBrZXk6ICdwYWdlJyxcbiAgICAgICAgICAgIHZhbHVlOiBwYXlsb2FkXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F3LWV4dGVuZGVkLXRyZWUucGFnZWlucHV0c3VibWl0JzpcbiAgICAgICAgICBpZiAoaXNOdW1iZXIodGhpcy5wYWdlSW5wdXRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZXh0ZW5kZWRUcmVlQ2hhbmdlZCQubmV4dCh7XG4gICAgICAgICAgICAgIGtleTogJ3BhZ2UnLFxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5wYWdlSW5wdXRWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Sb3V0ZSgpIHtcbiAgICB0aGlzLnJvdXRlLnBhcmFtTWFwLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XG4gICAgICBjb25zdCBwYXJhbUlkID0gcGFyYW1zLmdldCgnaWQnKTtcbiAgICAgIGlmIChwYXJhbUlkKSB7XG4gICAgICAgIGlmIChwYXJhbUlkKSB7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLmN1cnJlbnRJZCA9IHBhcmFtSWQ7XG4gICAgICAgICAgdGhpcy5lbWl0T3V0ZXIoJ3JvdXRlY2hhbmdlZCcsIHBhcmFtSWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jb250ZW50SXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmxvYWRJdGVtKHBhcmFtSWQpLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChyZXNwb25zZSkgPT4gdGhpcy5wYXJzZURpZ2l0YWxPYmplY3RzJChyZXNwb25zZSkpXG4gICAgICAgICkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jb250ZW50SXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UubG9hZENvbnRlbnQocmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmxvYWRFeHRlbmRlZFRyZWUoKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tUcmVlSXRlbXMocmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBzY3JvbGwgdG9wXG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkV4dGVuZGVkVHJlZSgpIHtcbiAgICB0aGlzLmV4dGVuZGVkVHJlZUNoYW5nZWQkLnBpcGUoXG4gICAgICBmaWx0ZXIoKHsga2V5LCB2YWx1ZSB9KSA9PiAhKGtleSA9PT0gJ3BhZ2UnICYmICghaXNOdW1iZXIoK3ZhbHVlKSB8fCArdmFsdWUgPCAxKSkpLFxuICAgICAgZGVib3VuY2UoKHsgZGVsYXkgfSkgPT4gdGltZXIoZGVsYXkgfHwgMSkpLFxuICAgICkuc3Vic2NyaWJlKCh7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgW2lkOiBzdHJpbmddOiBzdHJpbmdcbiAgICAgIH0gPSB7fTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcXVlcnlQYXJhbXNba2V5XSA9IHZhbHVlLnRyaW0oKS5sZW5ndGggPyB2YWx1ZSA6IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeVBhcmFtc1trZXldID0gYCR7dmFsdWV9YDtcbiAgICAgIH1cblxuICAgICAgLy8gcGFnZSBjaGVja1xuICAgICAgaWYgKGtleSAhPT0gJ3BhZ2UnKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLnBhZ2UgPSAnMSc7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlc2V0IHBhZ2VJbnB1dCB2YWx1ZVxuICAgICAgdGhpcy5wYWdlSW5wdXRWYWx1ZSA9IG51bGw7XG5cbiAgICAgIC8vIHVwZGF0ZSB1cmxcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuUm91dGVRdWVyeVBhcmFtcygpIHtcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XG4gICAgICBjb25zdCBleHRlbmRlZFRyZWVQYXJhbXMgPSBjbG9uZShwYXJhbXMpO1xuICAgICAgLy8gZm9yY2UgbnVtZXJpY1xuICAgICAgWydwYWdlJywgJ2xpbWl0J10uZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmIChwYXJhbXNba2V5XSAmJiBpc051bWJlcigrcGFyYW1zW2tleV0pKSB7XG4gICAgICAgICAgZXh0ZW5kZWRUcmVlUGFyYW1zW2tleV0gPSArcGFyYW1zW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV4dGVuZGVkVHJlZVBhcmFtc1trZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5kYXRhU291cmNlLmV4dGVuZGVkVHJlZVBhcmFtcyA9IGV4dGVuZGVkVHJlZVBhcmFtcztcblxuICAgICAgLy8gaGFzIG5vZGUgcmVzcG9uc2VcbiAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UubGFzdFJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMuZW1pdE91dGVyKCdleHRlbmRlZHRyZWVyZXF1ZXN0Jyk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5sb2FkRXh0ZW5kZWRUcmVlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWROYXZpZ2F0aW9uKHNlbGVjdGVkSXRlbSkge1xuICAgIHRoaXMuZGF0YVNvdXJjZS51cGRhdGVOYXZpZ2F0aW9uKCdDYXJpY2FtZW50byBpbiBjb3Jzby4uLicpO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5nZXROYXZpZ2F0aW9uKCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5zZXRUcmVlKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLnVwZGF0ZU5hdmlnYXRpb24odGhpcy5kYXRhU291cmNlLmdldFRyZWUoKS5sYWJlbCk7XG4gICAgICAgIHRoaXMuZW1pdE91dGVyKCduYXZpZ2F0aW9ucmVzcG9uc2UnLCB7XG4gICAgICAgICAgdHJlZTogdGhpcy5kYXRhU291cmNlLmdldFRyZWUoKSxcbiAgICAgICAgICBjdXJyZW50SXRlbTogc2VsZWN0ZWRJdGVtLFxuICAgICAgICAgIGJhc2VQYXRoOiB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdwYXRocycpLnNjaGVkYUJhc2VQYXRoLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBlbWl0IHNpZ25hbFxuICAgICAgICB0aGlzLnRyZWVMb2FkZWQkLm5leHQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VEaWdpdGFsT2JqZWN0cyQocmVzcG9uc2UpIHtcbiAgICBjb25zdCBpaWlmTWFuaWZlc3QkID0ge307XG4gICAgY29uc3QgYmFzZVVybHMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdiYXNlVXJscycpIHx8IHt9O1xuICAgIGNvbnN0IHsgaWlpZlNlcnZlciwgaWlwU2VydmVyIH0gPSBiYXNlVXJscztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXNwb25zZT8uZGlnaXRhbE9iamVjdHMpKSB7XG4gICAgICByZXNwb25zZS5kaWdpdGFsT2JqZWN0cy5mb3JFYWNoKChkaWdpdGFsT2JqZWN0KSA9PiB7XG4gICAgICAgIC8vIGlpcCBjb25maWcgdXJsIGNoZWNrXG4gICAgICAgIGlmIChpaXBTZXJ2ZXIgJiYgZGlnaXRhbE9iamVjdC50eXBlID09PSAnaW1hZ2VzLWlpcCcpIHtcbiAgICAgICAgICBkaWdpdGFsT2JqZWN0Lml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0udXJsID0gYCR7aWlwU2VydmVyfSR7aXRlbS51cmx9YDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpaWlmIGNvbmZpZyB1cmwgY2hlY2tcbiAgICAgICAgaWYgKGlpaWZTZXJ2ZXIgJiYgZGlnaXRhbE9iamVjdC50eXBlID09PSAnaW1hZ2VzLWlpaWYnKSB7XG4gICAgICAgICAgZGlnaXRhbE9iamVjdC5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnVybCA9IGAke2lpaWZTZXJ2ZXJ9JHtpdGVtLnVybH1gO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpZ2l0YWxPYmplY3QudHlwZSA9PT0gJ2ltYWdlcy1paWlmJykge1xuICAgICAgICAgIGRpZ2l0YWxPYmplY3QuaXRlbXMuZm9yRWFjaCgoeyB1cmwgfSkgPT4ge1xuICAgICAgICAgICAgaWlpZk1hbmlmZXN0JFt1cmxdID0gZnJvbShcbiAgICAgICAgICAgICAgZmV0Y2godXJsKVxuICAgICAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoIWRhdGEub2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoZGF0YS5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmpzb24oKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEVycm9yIGxvYWRpbmcgaWlpZiBtYW5pZmVzdCAke3VybH1gLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIWlzRW1wdHkoaWlpZk1hbmlmZXN0JCkpIHtcbiAgICAgIHJldHVybiBmb3JrSm9pbihpaWlmTWFuaWZlc3QkKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGRhdGE6IG9iamVjdCkgPT4ge1xuICAgICAgICAgIHJlc3BvbnNlLmRpZ2l0YWxPYmplY3RzLmZvckVhY2goKGRpZ2l0YWxPYmplY3QpID0+IHtcbiAgICAgICAgICAgIGlmIChkaWdpdGFsT2JqZWN0LnR5cGUgPT09ICdpbWFnZXMtaWlpZicpIHtcbiAgICAgICAgICAgICAgZGlnaXRhbE9iamVjdC5pdGVtcy5mb3JFYWNoKChpdGVtSW1hZ2VzLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGRpZ2l0YWxPYmplY3QuaXRlbXNbaW5kZXhdLmlpaWZJbWFnZXMgPSB0aGlzLmdldE1hbmlmZXN0SW1hZ2VzKFxuICAgICAgICAgICAgICAgICAgZGF0YVtpdGVtSW1hZ2VzLnVybF1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gb2YocmVzcG9uc2UpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKHJlc3BvbnNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWFuaWZlc3RJbWFnZXMobWFuaWZlc3QpIHtcbiAgICBjb25zdCBpaWlmSW1hZ2VzID0gW107XG4gICAgaWYgKG1hbmlmZXN0Py5zZXF1ZW5jZXMpIHtcbiAgICAgIG1hbmlmZXN0LnNlcXVlbmNlcy5mb3JFYWNoKCh7IGNhbnZhc2VzIH0pID0+IHtcbiAgICAgICAgY2FudmFzZXMuZm9yRWFjaCgoeyBpbWFnZXMgfSkgPT4ge1xuICAgICAgICAgIGltYWdlcy5mb3JFYWNoKCh7IHJlc291cmNlIH0pID0+IHtcbiAgICAgICAgICAgIGlpaWZJbWFnZXMucHVzaChyZXNvdXJjZVsnQGlkJ10pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaWlpZkltYWdlcztcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tUcmVlSXRlbXMocmVzcG9uc2UpIHtcbiAgICB0aGlzLnRyZWVMb2FkZWQkLnBpcGUoXG4gICAgICBmaXJzdCgpXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgdHJlZURTID0gdGhpcy5kYXRhU291cmNlLmdldFdpZGdldERhdGFTb3VyY2UoJ2F3LXRyZWUnKTtcbiAgICAgIGNvbnN0IHsgaXRlbXMgfSA9IHRyZWVEUy5vdXRwdXQ7XG4gICAgICBpZiAoIWl0ZW1zLmxlbmd0aCAmJiByZXNwb25zZS5sYXN0QWw/LmlkKSB7XG4gICAgICAgIHRoaXMuZW1pdE91dGVyKCdzZWxlY3RQYXJlbnQnLCByZXNwb25zZS5sYXN0QWwuaWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
347
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWRhLWxheW91dC5laC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL243LWJvaWxlcnBsYXRlLWFyaWFubmEvc3JjL2xpYi9sYXlvdXRzL3NjaGVkYS1sYXlvdXQvc2NoZWRhLWxheW91dC5laC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzFDLE9BQU8sRUFDTCxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFDM0IsTUFBTSxRQUFRLENBQUM7QUFDaEIsT0FBTyxFQUNMLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUNsRCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQ25DLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFlBQVk7SUFBbEQ7O1FBR1UsZUFBVSxHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBUXpDLGdCQUFXLEdBQXdCLElBQUksYUFBYSxFQUFFLENBQUM7UUFFdkQseUJBQW9CLEdBSXZCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFWCx5QkFBb0IsR0FJdkIsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQWlYckIsQ0FBQztJQTdXUSxNQUFNO1FBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO1lBQ2hELFFBQVEsSUFBSSxFQUFFO2dCQUNaLEtBQUssdUJBQXVCO29CQUFFO3dCQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO3dCQUMz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LENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxRQUFRO1FBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNuQixLQUFLLEVBQUUsQ0FDUixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlELE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3BEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEV2ZW50SGFuZGxlciB9IGZyb20gJ0BuZXQ3L2NvcmUnO1xuaW1wb3J0IHtcbiAgaXNFbXB0eSwgaXNFcXVhbCwgaXNOdW1iZXJcbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIGZvcmtKb2luLCBmcm9tLCBvZiwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgdGltZXJcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZSwgZmlsdGVyLCBmaXJzdCwgc3dpdGNoTWFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnQG5ldDcvYm9pbGVycGxhdGUtY29tbW9uJztcbmltcG9ydCB7IEF3U2NoZWRhTGF5b3V0RFMgfSBmcm9tICcuL3NjaGVkYS1sYXlvdXQuZHMnO1xuXG5leHBvcnQgY2xhc3MgQXdTY2hlZGFMYXlvdXRFSCBleHRlbmRzIEV2ZW50SGFuZGxlciB7XG4gIGRhdGFTb3VyY2U6IEF3U2NoZWRhTGF5b3V0RFM7XG5cbiAgcHJpdmF0ZSBkZXN0cm95ZWQkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHByaXZhdGUgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvblNlcnZpY2U7XG5cbiAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGU7XG5cbiAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcjtcblxuICBwcml2YXRlIHRyZWVMb2FkZWQkOiBSZXBsYXlTdWJqZWN0PHZvaWQ+ID0gbmV3IFJlcGxheVN1YmplY3QoKTtcblxuICBwcml2YXRlIGV4dGVuZGVkVHJlZUNoYW5nZWQkOiBTdWJqZWN0PHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyO1xuICAgIGRlbGF5PzogbnVtYmVyO1xuICB9PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSBzY2hlZGFTZWFyY2hDaGFuZ2VkJDogU3ViamVjdDx7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZyB8IG51bWJlcjtcbiAgICBkZWxheT86IG51bWJlcjtcbiAgfT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHByaXZhdGUgcGFnZUlucHV0VmFsdWU6IG51bWJlcjtcblxuICBwdWJsaWMgbGlzdGVuKCkge1xuICAgIHRoaXMuaW5uZXJFdmVudHMkLnN1YnNjcmliZSgoeyB0eXBlLCBwYXlsb2FkIH0pID0+IHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdhdy1zY2hlZGEtbGF5b3V0LmluaXQnOiB7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLm9uSW5pdChwYXlsb2FkKTtcbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBwYXlsb2FkLmNvbmZpZ3VyYXRpb247XG4gICAgICAgICAgdGhpcy5yb3V0ZSA9IHBheWxvYWQucm91dGU7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIgPSBwYXlsb2FkLnJvdXRlcjtcbiAgICAgICAgICBjb25zdCBwYXJhbUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuaWQgfHwgJyc7XG4gICAgICAgICAgaWYgKHBhcmFtSWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jdXJyZW50SWQgPSBwYXJhbUlkO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxpc3RlblJvdXRlKCk7XG4gICAgICAgICAgdGhpcy5saXN0ZW5Sb3V0ZVF1ZXJ5UGFyYW1zKCk7XG4gICAgICAgICAgdGhpcy5saXN0ZW5FeHRlbmRlZFRyZWUoKTtcbiAgICAgICAgICB0aGlzLmxpc3RlblNjaGVkYVNlYXJjaCgpO1xuICAgICAgICAgIHRoaXMubG9hZE5hdmlnYXRpb24ocGFyYW1JZCk7XG4gICAgICAgICAgdGhpcy5lbWl0T3V0ZXIoJ3ZpZXdsZWFmJyk7XG4gICAgICAgICAgLy8gc2Nyb2xsIHRvcFxuICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlICdhdy1zY2hlZGEtbGF5b3V0LmRlc3Ryb3knOlxuICAgICAgICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLm9uRGVzdHJveSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2F3LXNjaGVkYS1sYXlvdXQudG9nZ2xlc2lkZWJhcic6XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLmNvbGxhcHNlU2lkZWJhcigpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKCd1bmhhbmRsZWQgaW5uZXIgZXZlbnQgb2YgdHlwZScsIHR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5vdXRlckV2ZW50cyQuc3Vic2NyaWJlKCh7IHR5cGUsIHBheWxvYWQgfSkgPT4ge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ2F3LXNpZGViYXItaGVhZGVyLmNsaWNrJzpcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY29sbGFwc2VTaWRlYmFyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F3LXNjaGVkYS1kcm9wZG93bi5jbGljayc6XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLmNoYW5nZURpZ2l0YWxPYmplY3QocGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVYVEVOREVEIFRSRUUgRVZFTlRTXG4gICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gKi9cbiAgICAgICAgY2FzZSAnYXctZXh0ZW5kZWQtdHJlZS5jaGFuZ2UnOiB7XG4gICAgICAgICAgbGV0IGtleTogc3RyaW5nO1xuICAgICAgICAgIGxldCBkZWxheTogbnVtYmVyO1xuICAgICAgICAgIGlmIChwYXlsb2FkLmlucHV0UGF5bG9hZCA9PT0gJ3NlYXJjaC1pbnB1dCcpIHtcbiAgICAgICAgICAgIGtleSA9ICdxdWVyeSc7XG4gICAgICAgICAgICBkZWxheSA9IDEwMDA7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkLmlucHV0UGF5bG9hZCA9PT0gJ2xpbWl0LXNlbGVjdCcpIHtcbiAgICAgICAgICAgIGtleSA9ICdsaW1pdCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkLmlucHV0UGF5bG9hZCA9PT0gJ3BhZ2UtaW5wdXQtY2hhbmdlJykge1xuICAgICAgICAgICAgdGhpcy5wYWdlSW5wdXRWYWx1ZSA9ICtwYXlsb2FkLnZhbHVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZC5pbnB1dFBheWxvYWQgPT09ICdwYWdlLWlucHV0LWVudGVyJykge1xuICAgICAgICAgICAga2V5ID0gJ3BhZ2UnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIHRoaXMuZXh0ZW5kZWRUcmVlQ2hhbmdlZCQubmV4dCh7XG4gICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgZGVsYXksXG4gICAgICAgICAgICAgIHZhbHVlOiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGJyZWFrO1xuICAgICAgICBjYXNlICdhdy1leHRlbmRlZC10cmVlLnNlYXJjaCc6XG4gICAgICAgICAgdGhpcy5leHRlbmRlZFRyZWVDaGFuZ2VkJC5uZXh0KHtcbiAgICAgICAgICAgIGtleTogJ3F1ZXJ5JyxcbiAgICAgICAgICAgIHZhbHVlOiBwYXlsb2FkLnZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F3LWV4dGVuZGVkLXRyZWUuY2xpY2snOlxuICAgICAgICAgIHRoaXMuZXh0ZW5kZWRUcmVlQ2hhbmdlZCQubmV4dCh7XG4gICAgICAgICAgICBrZXk6ICdwYWdlJyxcbiAgICAgICAgICAgIHZhbHVlOiBwYXlsb2FkXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F3LWV4dGVuZGVkLXRyZWUucGFnZWlucHV0c3VibWl0JzpcbiAgICAgICAgICBpZiAoaXNOdW1iZXIodGhpcy5wYWdlSW5wdXRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZXh0ZW5kZWRUcmVlQ2hhbmdlZCQubmV4dCh7XG4gICAgICAgICAgICAgIGtleTogJ3BhZ2UnLFxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5wYWdlSW5wdXRWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTQ0hFREEgKElOVEVSTkFMKSBTRUFSQ0ggRVZFTlRTXG4gICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gKi9cbiAgICAgICAgY2FzZSAnYXctc2NoZWRhLXNlYXJjaC5jaGFuZ2UnOiB7XG4gICAgICAgICAgbGV0IGtleTogc3RyaW5nO1xuICAgICAgICAgIGxldCBkZWxheTogbnVtYmVyO1xuICAgICAgICAgIGlmIChwYXlsb2FkLmlucHV0UGF5bG9hZCA9PT0gJ2lucHV0LWNoYW5nZScpIHtcbiAgICAgICAgICAgIGtleSA9ICdxdWVyeSc7XG4gICAgICAgICAgICBkZWxheSA9IDEwMDA7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkLmlucHV0UGF5bG9hZCA9PT0gJ2lucHV0LWVudGVyJykge1xuICAgICAgICAgICAga2V5ID0gJ3F1ZXJ5JztcbiAgICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWQuaW5wdXRQYXlsb2FkID09PSAnbGltaXQtc2VsZWN0Jykge1xuICAgICAgICAgICAga2V5ID0gJ2xpbWl0JztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICB0aGlzLnNjaGVkYVNlYXJjaENoYW5nZWQkLm5leHQoe1xuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIGRlbGF5LFxuICAgICAgICAgICAgICB2YWx1ZTogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBicmVhaztcbiAgICAgICAgY2FzZSAnYXctc2NoZWRhLXNlYXJjaC5jbGljayc6XG4gICAgICAgICAgdGhpcy5zY2hlZGFTZWFyY2hDaGFuZ2VkJC5uZXh0KHtcbiAgICAgICAgICAgIGtleTogJ3BhZ2UnLFxuICAgICAgICAgICAgdmFsdWU6IHBheWxvYWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuUm91dGUoKSB7XG4gICAgdGhpcy5yb3V0ZS5wYXJhbU1hcC5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xuICAgICAgY29uc3QgcGFyYW1JZCA9IHBhcmFtcy5nZXQoJ2lkJyk7XG4gICAgICBpZiAocGFyYW1JZCkge1xuICAgICAgICBpZiAocGFyYW1JZCkge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jdXJyZW50SWQgPSBwYXJhbUlkO1xuICAgICAgICAgIHRoaXMuZW1pdE91dGVyKCdyb3V0ZWNoYW5nZWQnLCBwYXJhbUlkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY29udGVudElzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5sb2FkSXRlbShwYXJhbUlkKS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgocmVzcG9uc2UpID0+IHRoaXMucGFyc2VEaWdpdGFsT2JqZWN0cyQocmVzcG9uc2UpKVxuICAgICAgICApLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY29udGVudElzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmxvYWRDb250ZW50KHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5sb2FkRXh0ZW5kZWRUcmVlKCk7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UubG9hZEludGVybmFsU2VhcmNoKCk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVHJlZUl0ZW1zKHJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gc2Nyb2xsIHRvcFxuICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5FeHRlbmRlZFRyZWUoKSB7XG4gICAgdGhpcy5leHRlbmRlZFRyZWVDaGFuZ2VkJC5waXBlKFxuICAgICAgZmlsdGVyKCh7IGtleSwgdmFsdWUgfSkgPT4gIShrZXkgPT09ICdwYWdlJyAmJiAoIWlzTnVtYmVyKCt2YWx1ZSkgfHwgK3ZhbHVlIDwgMSkpKSxcbiAgICAgIGRlYm91bmNlKCh7IGRlbGF5IH0pID0+IHRpbWVyKGRlbGF5IHx8IDEpKSxcbiAgICApLnN1YnNjcmliZSgoeyBrZXksIHZhbHVlIH0pID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgIFtpZDogc3RyaW5nXTogc3RyaW5nXG4gICAgICB9ID0ge307XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zW2tleV0gPSB2YWx1ZS50cmltKCkubGVuZ3RoID8gdmFsdWUgOiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnlQYXJhbXNba2V5XSA9IGAke3ZhbHVlfWA7XG4gICAgICB9XG5cbiAgICAgIC8vIHBhZ2UgY2hlY2tcbiAgICAgIGlmIChrZXkgIT09ICdwYWdlJykge1xuICAgICAgICBxdWVyeVBhcmFtcy5wYWdlID0gJzEnO1xuICAgICAgfVxuXG4gICAgICAvLyByZXNldCBwYWdlSW5wdXQgdmFsdWVcbiAgICAgIHRoaXMucGFnZUlucHV0VmFsdWUgPSBudWxsO1xuXG4gICAgICAvLyB1cGRhdGUgdXJsXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblNjaGVkYVNlYXJjaCgpIHtcbiAgICB0aGlzLnNjaGVkYVNlYXJjaENoYW5nZWQkLnBpcGUoXG4gICAgICBmaWx0ZXIoKHsga2V5LCB2YWx1ZSB9KSA9PiAhKGtleSA9PT0gJ3BhZ2UnICYmICghaXNOdW1iZXIoK3ZhbHVlKSB8fCArdmFsdWUgPCAxKSkpLFxuICAgICAgZGVib3VuY2UoKHsgZGVsYXkgfSkgPT4gdGltZXIoZGVsYXkgfHwgMSkpLFxuICAgICkuc3Vic2NyaWJlKCh7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgW2lkOiBzdHJpbmddOiBzdHJpbmdcbiAgICAgIH0gPSB7fTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcXVlcnlQYXJhbXNbYHNlYXJjaC0ke2tleX1gXSA9IHZhbHVlLnRyaW0oKS5sZW5ndGggPyB2YWx1ZSA6IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeVBhcmFtc1tgc2VhcmNoLSR7a2V5fWBdID0gYCR7dmFsdWV9YDtcbiAgICAgIH1cblxuICAgICAgLy8gcGFnZSBjaGVja1xuICAgICAgaWYgKGtleSAhPT0gJ3BhZ2UnKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zWydzZWFyY2gtcGFnZSddID0gJzEnO1xuICAgICAgfVxuXG4gICAgICAvLyB1cGRhdGUgdXJsXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblJvdXRlUXVlcnlQYXJhbXMoKSB7XG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xuICAgICAgY29uc3QgZXh0ZW5kZWRUcmVlUGFyYW1zID0ge307XG4gICAgICBjb25zdCBpbnRlcm5hbFNlYXJjaFBhcmFtcyA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgY29uc3QgdHJlZUFsbG93ZWQgPSBbJ3F1ZXJ5JywgJ3BhZ2UnLCAnbGltaXQnXTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxBbGxvd2VkID0gdHJlZUFsbG93ZWQubWFwKChpdGVtKSA9PiBgc2VhcmNoLSR7aXRlbX1gKTtcbiAgICAgICAgaWYgKHRyZWVBbGxvd2VkLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgaWYgKGtleSAhPT0gJ3F1ZXJ5Jykge1xuICAgICAgICAgICAgdmFsdWUgPSBpc051bWJlcigrcGFyYW1zW2tleV0pID8gK3BhcmFtc1trZXldIDogbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBwYXJhbXNba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBleHRlbmRlZFRyZWVQYXJhbXNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJuYWxBbGxvd2VkLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgaWYgKGtleSAhPT0gJ3NlYXJjaC1xdWVyeScpIHtcbiAgICAgICAgICAgIHZhbHVlID0gaXNOdW1iZXIoK3BhcmFtc1trZXldKSA/ICtwYXJhbXNba2V5XSA6IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gcGFyYW1zW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgaW50ZXJuYWxTZWFyY2hQYXJhbXNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHNjaGVkYSBzZWFyY2ggY2hhbmdlZFxuICAgICAgaWYgKCFpc0VxdWFsKHRoaXMuZGF0YVNvdXJjZS5pbnRlcm5hbFNlYXJjaFBhcmFtcywgaW50ZXJuYWxTZWFyY2hQYXJhbXMpKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5pbnRlcm5hbFNlYXJjaFBhcmFtcyA9IGludGVybmFsU2VhcmNoUGFyYW1zO1xuICAgICAgICAvLyBoYXMgbm9kZSByZXNwb25zZVxuICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlLmxhc3RSZXNwb25zZSkge1xuICAgICAgICAgIHRoaXMuZW1pdE91dGVyKCdzY2hlZGFzZWFyY2hyZXF1ZXN0Jyk7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLmxvYWRJbnRlcm5hbFNlYXJjaCgpO1xuICAgICAgICB9XG5cbiAgICAgIC8vIGV4dGVuZGVkIHRyZWUgY2hhbmdlZFxuICAgICAgfVxuICAgICAgaWYgKCFpc0VxdWFsKHRoaXMuZGF0YVNvdXJjZS5leHRlbmRlZFRyZWVQYXJhbXMsIGV4dGVuZGVkVHJlZVBhcmFtcykpIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmV4dGVuZGVkVHJlZVBhcmFtcyA9IGV4dGVuZGVkVHJlZVBhcmFtcztcbiAgICAgICAgLy8gaGFzIG5vZGUgcmVzcG9uc2VcbiAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5sYXN0UmVzcG9uc2UpIHtcbiAgICAgICAgICB0aGlzLmVtaXRPdXRlcignZXh0ZW5kZWR0cmVlcmVxdWVzdCcpO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5sb2FkRXh0ZW5kZWRUcmVlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE5hdmlnYXRpb24oc2VsZWN0ZWRJdGVtKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLnVwZGF0ZU5hdmlnYXRpb24oJ0NhcmljYW1lbnRvIGluIGNvcnNvLi4uJyk7XG4gICAgdGhpcy5kYXRhU291cmNlLmdldE5hdmlnYXRpb24oKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLnNldFRyZWUocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UudXBkYXRlTmF2aWdhdGlvbih0aGlzLmRhdGFTb3VyY2UuZ2V0VHJlZSgpLmxhYmVsKTtcbiAgICAgICAgdGhpcy5lbWl0T3V0ZXIoJ25hdmlnYXRpb25yZXNwb25zZScsIHtcbiAgICAgICAgICB0cmVlOiB0aGlzLmRhdGFTb3VyY2UuZ2V0VHJlZSgpLFxuICAgICAgICAgIGN1cnJlbnRJdGVtOiBzZWxlY3RlZEl0ZW0sXG4gICAgICAgICAgYmFzZVBhdGg6IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ3BhdGhzJykuc2NoZWRhQmFzZVBhdGgsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGVtaXQgc2lnbmFsXG4gICAgICAgIHRoaXMudHJlZUxvYWRlZCQubmV4dCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZURpZ2l0YWxPYmplY3RzJChyZXNwb25zZSkge1xuICAgIGNvbnN0IGlpaWZNYW5pZmVzdCQgPSB7fTtcbiAgICBjb25zdCBiYXNlVXJscyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ2Jhc2VVcmxzJykgfHwge307XG4gICAgY29uc3QgeyBpaWlmU2VydmVyLCBpaXBTZXJ2ZXIgfSA9IGJhc2VVcmxzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3BvbnNlPy5kaWdpdGFsT2JqZWN0cykpIHtcbiAgICAgIHJlc3BvbnNlLmRpZ2l0YWxPYmplY3RzLmZvckVhY2goKGRpZ2l0YWxPYmplY3QpID0+IHtcbiAgICAgICAgLy8gaWlwIGNvbmZpZyB1cmwgY2hlY2tcbiAgICAgICAgaWYgKGlpcFNlcnZlciAmJiBkaWdpdGFsT2JqZWN0LnR5cGUgPT09ICdpbWFnZXMtaWlwJykge1xuICAgICAgICAgIGRpZ2l0YWxPYmplY3QuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaXRlbS51cmwgPSBgJHtpaXBTZXJ2ZXJ9JHtpdGVtLnVybH1gO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlpaWYgY29uZmlnIHVybCBjaGVja1xuICAgICAgICBpZiAoaWlpZlNlcnZlciAmJiBkaWdpdGFsT2JqZWN0LnR5cGUgPT09ICdpbWFnZXMtaWlpZicpIHtcbiAgICAgICAgICBkaWdpdGFsT2JqZWN0Lml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0udXJsID0gYCR7aWlpZlNlcnZlcn0ke2l0ZW0udXJsfWA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlnaXRhbE9iamVjdC50eXBlID09PSAnaW1hZ2VzLWlpaWYnKSB7XG4gICAgICAgICAgZGlnaXRhbE9iamVjdC5pdGVtcy5mb3JFYWNoKCh7IHVybCB9KSA9PiB7XG4gICAgICAgICAgICBpaWlmTWFuaWZlc3QkW3VybF0gPSBmcm9tKFxuICAgICAgICAgICAgICBmZXRjaCh1cmwpXG4gICAgICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICghZGF0YS5vaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihkYXRhLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuanNvbigpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRXJyb3IgbG9hZGluZyBpaWlmIG1hbmlmZXN0ICR7dXJsfWAsIGVycik7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghaXNFbXB0eShpaWlmTWFuaWZlc3QkKSkge1xuICAgICAgcmV0dXJuIGZvcmtKb2luKGlpaWZNYW5pZmVzdCQpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoZGF0YTogb2JqZWN0KSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2UuZGlnaXRhbE9iamVjdHMuZm9yRWFjaCgoZGlnaXRhbE9iamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpZ2l0YWxPYmplY3QudHlwZSA9PT0gJ2ltYWdlcy1paWlmJykge1xuICAgICAgICAgICAgICBkaWdpdGFsT2JqZWN0Lml0ZW1zLmZvckVhY2goKGl0ZW1JbWFnZXMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgZGlnaXRhbE9iamVjdC5pdGVtc1tpbmRleF0uaWlpZkltYWdlcyA9IHRoaXMuZ2V0TWFuaWZlc3RJbWFnZXMoXG4gICAgICAgICAgICAgICAgICBkYXRhW2l0ZW1JbWFnZXMudXJsXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBvZihyZXNwb25zZSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gb2YocmVzcG9uc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYW5pZmVzdEltYWdlcyhtYW5pZmVzdCkge1xuICAgIGNvbnN0IGlpaWZJbWFnZXMgPSBbXTtcbiAgICBpZiAobWFuaWZlc3Q/LnNlcXVlbmNlcykge1xuICAgICAgbWFuaWZlc3Quc2VxdWVuY2VzLmZvckVhY2goKHsgY2FudmFzZXMgfSkgPT4ge1xuICAgICAgICBjYW52YXNlcy5mb3JFYWNoKCh7IGltYWdlcyB9KSA9PiB7XG4gICAgICAgICAgaW1hZ2VzLmZvckVhY2goKHsgcmVzb3VyY2UgfSkgPT4ge1xuICAgICAgICAgICAgaWlpZkltYWdlcy5wdXNoKHJlc291cmNlWydAaWQnXSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpaWlmSW1hZ2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1RyZWVJdGVtcyhyZXNwb25zZSkge1xuICAgIHRoaXMudHJlZUxvYWRlZCQucGlwZShcbiAgICAgIGZpcnN0KClcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCB0cmVlRFMgPSB0aGlzLmRhdGFTb3VyY2UuZ2V0V2lkZ2V0RGF0YVNvdXJjZSgnYXctdHJlZScpO1xuICAgICAgY29uc3QgeyBpdGVtcyB9ID0gdHJlZURTLm91dHB1dDtcbiAgICAgIGlmICghaXRlbXMubGVuZ3RoICYmIHJlc3BvbnNlLmxhc3RBbD8uaWQpIHtcbiAgICAgICAgdGhpcy5lbWl0T3V0ZXIoJ3NlbGVjdFBhcmVudCcsIHJlc3BvbnNlLmxhc3RBbC5pZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|