@libs-ui/utils 0.2.304 → 0.2.306-10
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/communicate-micro.d.ts +1 -1
- package/dangerous-object.d.ts +75 -0
- package/date.d.ts +14 -19
- package/dom.d.ts +21 -3
- package/esm2022/base64.mjs +2 -2
- package/esm2022/cache.mjs +20 -16
- package/esm2022/color.mjs +66 -14
- package/esm2022/communicate-micro.mjs +20 -16
- package/esm2022/constants.mjs +1 -1
- package/esm2022/crypto-3rd.mjs +3 -3
- package/esm2022/crypto.mjs +3 -3
- package/esm2022/dangerous-object.mjs +143 -0
- package/esm2022/date.mjs +24 -22
- package/esm2022/dom.mjs +127 -17
- package/esm2022/download.mjs +3 -3
- package/esm2022/file.mjs +23 -11
- package/esm2022/format-number.mjs +9 -6
- package/esm2022/format-text.mjs +13 -15
- package/esm2022/function-check-embed-frame.mjs +1 -1
- package/esm2022/get-smart-axis-scale.mjs +10 -10
- package/esm2022/helpers.mjs +136 -48
- package/esm2022/http-params.mjs +2 -2
- package/esm2022/index.mjs +2 -1
- package/esm2022/inject-token.mjs +2 -2
- package/esm2022/key-cache.mjs +6 -6
- package/esm2022/key-code.mjs +1 -1
- package/esm2022/language.mjs +28 -28
- package/esm2022/pattern.mjs +1 -1
- package/esm2022/random.mjs +2 -2
- package/esm2022/two-way-signal-object.mjs +32 -20
- package/esm2022/uri.mjs +9 -6
- package/esm2022/url-search-params.mjs +13 -11
- package/esm2022/uuid.mjs +2 -2
- package/esm2022/xss-filter.mjs +1 -1
- package/fesm2022/libs-ui-utils.mjs +797 -368
- package/fesm2022/libs-ui-utils.mjs.map +1 -1
- package/file.d.ts +2 -2
- package/format-text.d.ts +1 -1
- package/helpers.d.ts +54 -5
- package/http-params.d.ts +1 -1
- package/index.d.ts +1 -0
- package/inject-token.d.ts +1 -1
- package/package.json +2 -2
- package/uri.d.ts +1 -1
package/esm2022/helpers.mjs
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { HttpParams } from
|
|
3
|
-
import {
|
|
4
|
-
import { Observable } from "rxjs";
|
|
2
|
+
import { HttpParams } from '@angular/common/http';
|
|
3
|
+
import { isSignal, signal } from '@angular/core';
|
|
5
4
|
import dayjs from 'dayjs';
|
|
6
|
-
import {
|
|
7
|
-
import { getDayjs } from
|
|
5
|
+
import { isDangerousObject, isReturnAsIsObject } from './dangerous-object';
|
|
6
|
+
import { getDayjs } from './date';
|
|
7
|
+
import { UtilsHttpParamsRequest } from './http-params';
|
|
8
|
+
import { convertSignalToObject } from './two-way-signal-object';
|
|
8
9
|
/**Các hàm tương tự thư viện lodash */
|
|
9
10
|
/**
|
|
10
11
|
* Kiểm tra xem một giá trị có phải là null hoặc undefined hay không
|
|
@@ -16,7 +17,10 @@ import { getDayjs } from "./date";
|
|
|
16
17
|
* isNil(0); // false
|
|
17
18
|
* isNil('hello'); // false
|
|
18
19
|
*/
|
|
19
|
-
export const isNil = (value) => {
|
|
20
|
+
export const isNil = (value, options) => {
|
|
21
|
+
if (!options?.ignoreUnWrapSignal) {
|
|
22
|
+
value = convertSignalToObject(value);
|
|
23
|
+
}
|
|
20
24
|
return value === null || value === undefined;
|
|
21
25
|
};
|
|
22
26
|
/**
|
|
@@ -32,11 +36,78 @@ export const isNil = (value) => {
|
|
|
32
36
|
* isEmpty([1, 2, 3]); // false
|
|
33
37
|
* isEmpty({ a: 1 }); // false
|
|
34
38
|
*/
|
|
35
|
-
export const isEmpty = (value) => {
|
|
36
|
-
|
|
37
|
-
value = value
|
|
39
|
+
export const isEmpty = (value, options) => {
|
|
40
|
+
if (!options?.ignoreUnWrapSignal) {
|
|
41
|
+
value = convertSignalToObject(value);
|
|
42
|
+
}
|
|
43
|
+
if (options?.ignoreCheckTypePrimitive) {
|
|
44
|
+
return isEmptyTypeObject(value);
|
|
38
45
|
}
|
|
39
|
-
return
|
|
46
|
+
return isEmptyTypePrimitive(value, { ignoreCheckString: options?.ignoreCheckString }) || isEmptyTypeObject(value);
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Kiểm tra xem một giá trị có phải là object rỗng hay không
|
|
50
|
+
* @param value Giá trị cần kiểm tra
|
|
51
|
+
* @returns true nếu giá trị là object rỗng, false nếu không
|
|
52
|
+
* @example
|
|
53
|
+
* isEmptyTypeObject({}); // true
|
|
54
|
+
* isEmptyTypeObject({ a: 1 }); // false
|
|
55
|
+
*/
|
|
56
|
+
const isEmptyTypeObject = (value) => {
|
|
57
|
+
return typeof value === 'object' && (JSON.stringify(value) === '{}' || JSON.stringify(value) === '[]');
|
|
58
|
+
};
|
|
59
|
+
const isEmptyTypePrimitive = (value, options) => {
|
|
60
|
+
if (options?.ignoreCheckString && value === '') {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
return value === '' || isNil(value, { ignoreUnWrapSignal: true });
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Kiểm tra xem một giá trị có phải là null, rỗng, undefined hoặc 0 hay không
|
|
67
|
+
* @param value Giá trị cần kiểm tra
|
|
68
|
+
* @param options Cấu hình tùy chọn
|
|
69
|
+
* @param options.ignoreZero Nếu true, sẽ không kiểm tra giá trị 0
|
|
70
|
+
* @returns true nếu giá trị là null, rỗng, undefined hoặc 0, false nếu không
|
|
71
|
+
* @example
|
|
72
|
+
* isTruthy(null); // false
|
|
73
|
+
* isTruthy(''); // false
|
|
74
|
+
* isTruthy(undefined); // false
|
|
75
|
+
* isTruthy(0); // false
|
|
76
|
+
* isTruthy({}); // true
|
|
77
|
+
* isTruthy(0, { ignoreZero: true }); // true
|
|
78
|
+
*/
|
|
79
|
+
export const isTruthy = (value, options) => {
|
|
80
|
+
return !isFalsy(value, options);
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Kiểm tra xem một giá trị có phải là null, rỗng, undefined hoặc 0 hay không
|
|
84
|
+
* @param value Giá trị cần kiểm tra
|
|
85
|
+
* @param options Cấu hình tùy chọn
|
|
86
|
+
* @param options.ignoreZero Nếu true, sẽ không kiểm tra giá trị 0
|
|
87
|
+
* @returns true nếu giá trị là null, rỗng, undefined hoặc 0, false nếu không
|
|
88
|
+
* @example
|
|
89
|
+
* isFalsy(null); // true
|
|
90
|
+
* isFalsy(''); // true
|
|
91
|
+
* isFalsy(undefined); // true
|
|
92
|
+
* isFalsy(0); // true
|
|
93
|
+
* isFalsy({}); // false
|
|
94
|
+
* isFalsy(0, { ignoreZero: true }); // false
|
|
95
|
+
*/
|
|
96
|
+
export const isFalsy = (value, options) => {
|
|
97
|
+
if (!options?.ignoreUnWrapSignal) {
|
|
98
|
+
value = convertSignalToObject(value);
|
|
99
|
+
}
|
|
100
|
+
const isFalse = !value;
|
|
101
|
+
if (!isFalse) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
if (options?.ignoreZero && value === 0) {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
if (options?.ignoreCheckString && value === '') {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
return isFalse;
|
|
40
111
|
};
|
|
41
112
|
/**
|
|
42
113
|
* Loại bỏ các thuộc tính của đối tượng dựa trên một hàm điều kiện
|
|
@@ -52,7 +123,7 @@ export const omitBy = (objData, predicate) => {
|
|
|
52
123
|
return objData;
|
|
53
124
|
}
|
|
54
125
|
const newObj = {};
|
|
55
|
-
Object.keys(objData).forEach(key => {
|
|
126
|
+
Object.keys(objData).forEach((key) => {
|
|
56
127
|
const valueOfKey = get(objData, key);
|
|
57
128
|
if (!predicate(valueOfKey)) {
|
|
58
129
|
set(newObj, key, valueOfKey);
|
|
@@ -123,23 +194,30 @@ export const omitBy = (objData, predicate) => {
|
|
|
123
194
|
* get(null, 'any.path'); // undefined
|
|
124
195
|
* get(undefined, 'any.path', 'fallback'); // 'fallback'
|
|
125
196
|
*/
|
|
126
|
-
export const get = (obj, path, defaultValue
|
|
197
|
+
export const get = (obj, path, defaultValue, keepLastValueIfSignal) => {
|
|
198
|
+
// helper cast để tránh lặp lại kiểu điều kiện ở các return
|
|
199
|
+
const out = (v) => v;
|
|
127
200
|
if (isNil(obj)) {
|
|
128
|
-
return defaultValue;
|
|
201
|
+
return out(defaultValue);
|
|
129
202
|
}
|
|
130
203
|
while (isSignal(obj)) {
|
|
131
204
|
obj = obj();
|
|
132
205
|
}
|
|
133
206
|
if (path === '') {
|
|
134
|
-
return obj;
|
|
207
|
+
return out(obj);
|
|
135
208
|
}
|
|
136
209
|
if (obj instanceof HttpParams) {
|
|
137
|
-
return obj.get(`${path}`);
|
|
210
|
+
return out(obj.get(`${path}`) ?? defaultValue);
|
|
138
211
|
}
|
|
139
212
|
if (obj instanceof DOMRect) {
|
|
140
|
-
return obj[path];
|
|
141
|
-
}
|
|
142
|
-
const paths = Array.isArray(path)
|
|
213
|
+
return out(obj[path]);
|
|
214
|
+
}
|
|
215
|
+
const paths = Array.isArray(path)
|
|
216
|
+
? path
|
|
217
|
+
: path
|
|
218
|
+
.replace(/\[(\d+)]/g, '.$1')
|
|
219
|
+
.split('.')
|
|
220
|
+
.filter((key) => key);
|
|
143
221
|
for (const index in paths) {
|
|
144
222
|
const key = paths[index];
|
|
145
223
|
if (obj instanceof CSSStyleDeclaration) {
|
|
@@ -151,12 +229,12 @@ export const get = (obj, path, defaultValue = undefined, keepLastValueIfSignal)
|
|
|
151
229
|
continue;
|
|
152
230
|
}
|
|
153
231
|
if (isNil(obj) || !Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
154
|
-
return defaultValue;
|
|
232
|
+
return out(defaultValue);
|
|
155
233
|
}
|
|
156
234
|
const val = isSignal(obj[key]) && !keepLastValueIfSignal ? obj[key]() : obj[key];
|
|
157
235
|
obj = val;
|
|
158
236
|
}
|
|
159
|
-
return obj;
|
|
237
|
+
return out(obj ?? defaultValue);
|
|
160
238
|
};
|
|
161
239
|
/**
|
|
162
240
|
* Thiết lập giá trị cho một thuộc tính trong đối tượng theo đường dẫn chỉ định
|
|
@@ -169,29 +247,36 @@ export const get = (obj, path, defaultValue = undefined, keepLastValueIfSignal)
|
|
|
169
247
|
* const obj = { a: { b: 1 } };
|
|
170
248
|
* set(obj, 'a.b', 2); // { a: { b: 2 } }
|
|
171
249
|
*/
|
|
172
|
-
export const set = (obj, path, value) => {
|
|
173
|
-
if (!obj || (typeof obj !==
|
|
174
|
-
throw new Error(
|
|
250
|
+
export const set = (obj, path, value, options) => {
|
|
251
|
+
if (!obj || (typeof obj !== 'object' && !isSignal(obj)) || (isSignal(obj) && typeof obj() !== 'object')) {
|
|
252
|
+
throw new Error('The first argument must be an object');
|
|
175
253
|
}
|
|
176
254
|
if (obj instanceof HttpParams) {
|
|
177
255
|
return obj.set(`${path}`, value);
|
|
178
256
|
}
|
|
179
|
-
const pathArray = Array.isArray(path)
|
|
257
|
+
const pathArray = Array.isArray(path)
|
|
258
|
+
? path
|
|
259
|
+
: path
|
|
260
|
+
.replace(/\[(\d+)]/g, '.[$1]')
|
|
261
|
+
.split('.')
|
|
262
|
+
.filter((key) => key);
|
|
180
263
|
let currentObjectByKey = isSignal(obj) ? obj() : obj;
|
|
181
264
|
let preObjectByKey = obj;
|
|
182
265
|
pathArray.forEach((key, index) => {
|
|
183
266
|
if (index < pathArray.length - 1) {
|
|
184
|
-
if (!(key in currentObjectByKey) || (typeof currentObjectByKey[key] !==
|
|
267
|
+
if (!(key in currentObjectByKey) || (typeof currentObjectByKey[key] !== 'object' && !isSignal(currentObjectByKey[key]))) {
|
|
185
268
|
const nextKey = pathArray[index + 1];
|
|
186
269
|
key = key.replace(/\[(\d+)]/g, '$1');
|
|
187
|
-
currentObjectByKey[key]
|
|
270
|
+
if (isNil(currentObjectByKey[key])) {
|
|
271
|
+
currentObjectByKey[key] = /\[(\d+)]/g.test(nextKey) ? (options?.valueDefaultPathArrayUndefined ?? []) : (options?.valueDefaultPathObjectUndefined ?? {});
|
|
272
|
+
}
|
|
188
273
|
}
|
|
189
274
|
currentObjectByKey = key ? currentObjectByKey[key] : currentObjectByKey;
|
|
190
275
|
preObjectByKey = currentObjectByKey;
|
|
191
276
|
currentObjectByKey = isSignal(currentObjectByKey) ? currentObjectByKey() : currentObjectByKey;
|
|
192
277
|
return;
|
|
193
278
|
}
|
|
194
|
-
if (typeof currentObjectByKey !==
|
|
279
|
+
if (typeof currentObjectByKey !== 'object') {
|
|
195
280
|
return;
|
|
196
281
|
}
|
|
197
282
|
// Gán giá trị ở cuối đường dẫn
|
|
@@ -243,7 +328,7 @@ export const set = (obj, path, value) => {
|
|
|
243
328
|
* // clone là một bản sao hoàn toàn độc lập của obj
|
|
244
329
|
*/
|
|
245
330
|
export const cloneDeep = (data, options = { ignoreSignal: false }, seen = new WeakMap()) => {
|
|
246
|
-
if (data === null || (typeof data !== 'object' && !isSignal(data))) {
|
|
331
|
+
if (data === null || (typeof data !== 'object' && !isSignal(data)) || isDangerousObject(data)) {
|
|
247
332
|
return data;
|
|
248
333
|
}
|
|
249
334
|
if (seen.has(data)) {
|
|
@@ -272,19 +357,16 @@ export const cloneDeep = (data, options = { ignoreSignal: false }, seen = new We
|
|
|
272
357
|
if (data instanceof Set) {
|
|
273
358
|
const setCopy = new Set();
|
|
274
359
|
seen.set(data, setCopy);
|
|
275
|
-
data.forEach(val => {
|
|
360
|
+
data.forEach((val) => {
|
|
276
361
|
setCopy.add(cloneDeep(val, options, seen));
|
|
277
362
|
});
|
|
278
363
|
return setCopy;
|
|
279
364
|
}
|
|
280
365
|
if (Array.isArray(data)) {
|
|
281
|
-
seen.set(data, data.map(item => cloneDeep(item, options, seen)));
|
|
366
|
+
seen.set(data, data.map((item) => cloneDeep(item, options, seen)));
|
|
282
367
|
return seen.get(data);
|
|
283
368
|
}
|
|
284
|
-
if (
|
|
285
|
-
return data;
|
|
286
|
-
}
|
|
287
|
-
if (data instanceof TemplateRef || data instanceof ElementRef || data instanceof Element || data instanceof Promise || data instanceof Observable) {
|
|
369
|
+
if (isReturnAsIsObject(data)) {
|
|
288
370
|
return data;
|
|
289
371
|
}
|
|
290
372
|
if (isSignal(data)) {
|
|
@@ -302,11 +384,19 @@ export const cloneDeep = (data, options = { ignoreSignal: false }, seen = new We
|
|
|
302
384
|
result[key] = new UtilsHttpParamsRequest(undefined, value);
|
|
303
385
|
continue;
|
|
304
386
|
}
|
|
387
|
+
if (value instanceof Date) {
|
|
388
|
+
result[key] = new Date(value.getTime());
|
|
389
|
+
continue;
|
|
390
|
+
}
|
|
305
391
|
if (dayjs.isDayjs(value)) {
|
|
306
392
|
result[key] = getDayjs({ date: value.valueOf() });
|
|
307
393
|
continue;
|
|
308
394
|
}
|
|
309
|
-
if (value instanceof
|
|
395
|
+
if (value instanceof RegExp) {
|
|
396
|
+
result[key] = new RegExp(value.source, value.flags);
|
|
397
|
+
continue;
|
|
398
|
+
}
|
|
399
|
+
if (isReturnAsIsObject(data)) {
|
|
310
400
|
result[key] = value;
|
|
311
401
|
continue;
|
|
312
402
|
}
|
|
@@ -369,7 +459,7 @@ export const keyBy = (data, key) => {
|
|
|
369
459
|
* // }
|
|
370
460
|
*/
|
|
371
461
|
export const groupBy = (data, key) => {
|
|
372
|
-
if (!data || !data.length || !Object.keys(get(data, '0')).length || !key) {
|
|
462
|
+
if (!data || !data.length || !Object.keys(get(data, '[0]')).length || !key) {
|
|
373
463
|
return {};
|
|
374
464
|
}
|
|
375
465
|
return data.reduce((dir, nextItem) => {
|
|
@@ -438,6 +528,11 @@ export const range = (start, end, step) => {
|
|
|
438
528
|
* isEqual({a:1}, {a:1}); // true
|
|
439
529
|
*/
|
|
440
530
|
export const isEqual = (value1, value2, options) => {
|
|
531
|
+
// Handle signals
|
|
532
|
+
if (!options?.ignoreUnWrapSignal) {
|
|
533
|
+
value1 = convertSignalToObject(value1);
|
|
534
|
+
value2 = convertSignalToObject(value2);
|
|
535
|
+
}
|
|
441
536
|
const { exactlyPosition = false, ignoreExactlyDataType = false } = options || {};
|
|
442
537
|
if (value1 === value2 || (value1 === null && value2 === null) || (value1 === undefined && value2 === undefined)) {
|
|
443
538
|
return true;
|
|
@@ -445,13 +540,6 @@ export const isEqual = (value1, value2, options) => {
|
|
|
445
540
|
if (ignoreExactlyDataType) {
|
|
446
541
|
return isEqual(isNil(value1) ? undefined : `${value1}`, isNil(value2) ? undefined : `${value2}`);
|
|
447
542
|
}
|
|
448
|
-
// Handle signals
|
|
449
|
-
while (isSignal(value1)) {
|
|
450
|
-
value1 = value1();
|
|
451
|
-
}
|
|
452
|
-
while (isSignal(value2)) {
|
|
453
|
-
value2 = value2();
|
|
454
|
-
}
|
|
455
543
|
if (typeof value1 !== 'object' || typeof value2 !== 'object' || (Array.isArray(value1) && !Array.isArray(value2)) || (!Array.isArray(value1) && Array.isArray(value2))) {
|
|
456
544
|
return false;
|
|
457
545
|
}
|
|
@@ -460,7 +548,7 @@ export const isEqual = (value1, value2, options) => {
|
|
|
460
548
|
return false;
|
|
461
549
|
}
|
|
462
550
|
if (!exactlyPosition) {
|
|
463
|
-
return !value1.some(item => !value2.includes(item));
|
|
551
|
+
return !value1.some((item) => !value2.includes(item));
|
|
464
552
|
}
|
|
465
553
|
return !value1.some((item, index) => !isEqual(item, value2[index], options));
|
|
466
554
|
}
|
|
@@ -489,11 +577,11 @@ export const isEqual = (value1, value2, options) => {
|
|
|
489
577
|
* uniqBy(numbersSignal); // [signal(1), signal(2), signal(3), signal(5), signal(4), signal(6), signal(7)]
|
|
490
578
|
*/
|
|
491
579
|
export const uniqBy = (data, key) => {
|
|
492
|
-
if (!key || !data?.length || typeof get(data, '0') !== 'object') {
|
|
580
|
+
if (!key || !data?.length || typeof get(data, '[0]') !== 'object') {
|
|
493
581
|
// Xử lý mảng chứa signal values
|
|
494
582
|
if (data[0] && isSignal(data[0])) {
|
|
495
583
|
const seen = new Set();
|
|
496
|
-
return data.filter(item => {
|
|
584
|
+
return data.filter((item) => {
|
|
497
585
|
const value = `${get(item, '')}`;
|
|
498
586
|
if (seen.has(value)) {
|
|
499
587
|
return false;
|
|
@@ -506,7 +594,7 @@ export const uniqBy = (data, key) => {
|
|
|
506
594
|
return Array.from(new Set(data));
|
|
507
595
|
}
|
|
508
596
|
const dataUnique = keyBy(data, key);
|
|
509
|
-
return Object.keys(dataUnique).map(key => dataUnique[key]);
|
|
597
|
+
return Object.keys(dataUnique).map((key) => dataUnique[key]);
|
|
510
598
|
};
|
|
511
599
|
export const generateInterface = (obj, interfaceName) => {
|
|
512
600
|
const generateType = (value) => {
|
|
@@ -554,4 +642,4 @@ export const generateInterface = (obj, interfaceName) => {
|
|
|
554
642
|
const interfaceStr = `interface ${interfaceName} ${generateType(obj)}`;
|
|
555
643
|
return interfaceStr;
|
|
556
644
|
};
|
|
557
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBa0IsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVsQyxzQ0FBc0M7QUFDdEM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBYyxFQUE2QixFQUFFO0lBQ2pFLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQy9DLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQWMsRUFBRSxFQUFFO0lBQ3hDLE9BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUM7UUFDckIsS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BLLENBQUMsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUksT0FBNEIsRUFBRSxTQUFnQyxFQUFLLEVBQUU7SUFDN0YsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3RFLE9BQU8sT0FBWSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxFQUFPLENBQUM7SUFFdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDakMsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDM0IsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFDOUIsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0YsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOERHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQVUsR0FBUSxFQUFFLElBQXVCLEVBQUUsZUFBb0IsU0FBUyxFQUFFLHFCQUErQixFQUFLLEVBQUU7SUFDbkksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNmLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3JCLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFDRCxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNoQixPQUFPLEdBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsSUFBSSxHQUFHLFlBQVksVUFBVSxFQUFFLENBQUM7UUFDOUIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQU0sQ0FBQztJQUNqQyxDQUFDO0lBQ0QsSUFBSSxHQUFHLFlBQVksT0FBTyxFQUFFLENBQUM7UUFDM0IsT0FBTyxHQUFHLENBQUMsSUFBcUIsQ0FBTSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRyxLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzFCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixJQUFJLEdBQUcsWUFBWSxtQkFBbUIsRUFBRSxDQUFDO1lBQ3ZDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBZ0MsQ0FBTSxDQUFDO1lBQ2pELFNBQVM7UUFDWCxDQUFDO1FBRUQsSUFBSSxHQUFHLFlBQVksV0FBVyxFQUFFLENBQUM7WUFDL0IsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUF3QixDQUFNLENBQUM7WUFDekMsU0FBUztRQUNYLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsRSxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFakYsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNaLENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBVSxHQUFRLEVBQUUsSUFBdUIsRUFBRSxLQUFVLEVBQUssRUFBRTtJQUMvRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxHQUFHLEVBQUUsS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3hHLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxHQUFHLFlBQVksVUFBVSxFQUFFLENBQUM7UUFDOUIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFNLENBQUM7SUFDeEMsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWhILElBQUksa0JBQWtCLEdBQVEsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzFELElBQUksY0FBYyxHQUFHLEdBQUcsQ0FBQztJQUV6QixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQy9CLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDeEgsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDckMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxDQUFDO1lBQ0Qsa0JBQWtCLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7WUFDeEUsY0FBYyxHQUFHLGtCQUFrQixDQUFDO1lBQ3BDLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztZQUM5RixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksT0FBTyxrQkFBa0IsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMzQyxPQUFPO1FBQ1QsQ0FBQztRQUVELCtCQUErQjtRQUMvQixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckMsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFaEQsSUFBSSxrQkFBa0IsSUFBSSxDQUFDLE9BQU8sVUFBVSxFQUFFLEtBQUssUUFBUSxJQUFJLFVBQVUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDckYsVUFBa0MsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0UsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzVCLGNBQXNDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQzNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixDQUFDO2dCQUVELElBQUksa0JBQWtCLEVBQUUsQ0FBQztvQkFDdEIsVUFBa0MsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdFLENBQUM7Z0JBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO2dCQUNuQixDQUFDO2dCQUNELE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTztRQUNULENBQUM7UUFDRCxJQUFHLGtCQUFrQixFQUFDLENBQUM7WUFDcEIsVUFBa0MsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0UsT0FBTztRQUNULENBQUM7UUFDRCxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFVLElBQVMsRUFBRSxPQUFPLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFLEVBQUssRUFBRTtJQUMxRyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25FLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxJQUFJLFlBQVksVUFBVSxFQUFFLENBQUM7UUFDL0IsT0FBTyxJQUFJLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQU0sQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxJQUFJLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDekIsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQU0sQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDeEIsT0FBTyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFDLENBQU0sQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxJQUFJLFlBQVksTUFBTSxFQUFFLENBQUM7UUFDM0IsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQU0sQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBSSxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBTSxDQUFDLENBQUM7UUFDdEUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBTSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLElBQUksWUFBWSxJQUFJLElBQUksSUFBSSxZQUFZLElBQUksSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssZUFBZSxFQUFFLENBQUM7UUFDN0csT0FBTyxJQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksSUFBSSxZQUFZLFdBQVcsSUFBSSxJQUFJLFlBQVksVUFBVSxJQUFJLElBQUksWUFBWSxPQUFPLElBQUksSUFBSSxZQUFZLE9BQU8sSUFBSSxJQUFJLFlBQVksVUFBVSxFQUFFLENBQUM7UUFDbEosT0FBTyxJQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkIsSUFBSSxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDMUIsT0FBTyxJQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFNLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUF3QixFQUFFLENBQUM7SUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdkIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxLQUFLLFlBQVksVUFBVSxFQUFFLENBQUM7WUFDaEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksc0JBQXNCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBTSxDQUFDO1lBQ2hFLFNBQVM7UUFDWCxDQUFDO1FBQ0MsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUMsQ0FBQyxDQUFDO1lBQy9DLFNBQVM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxLQUFLLFlBQVksV0FBVyxJQUFJLEtBQUssWUFBWSxVQUFVLElBQUksS0FBSyxZQUFZLE9BQU8sSUFBSSxLQUFLLFlBQVksT0FBTyxJQUFJLEtBQUssWUFBWSxVQUFVLEVBQUUsQ0FBQztZQUN2SixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLFNBQVM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFXLENBQUM7QUFDckIsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBd0IsRUFBRSxHQUFXLEVBQWUsRUFBRTtJQUMxRSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRTtRQUNuQyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxPQUFPLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4RyxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFDRCxJQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFDLENBQUM7WUFDOUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDbEMsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBd0IsRUFBRSxHQUFXLEVBQWUsRUFBRTtJQUM1RSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pFLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRTtRQUNuQyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxPQUFPLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4RyxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDaEQsR0FBRyxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUNELEdBQUcsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsQ0FBQyxDQUFDO0FBR0Y7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFhLEVBQUUsR0FBWSxFQUFFLElBQWEsRUFBaUIsRUFBRTtJQUNqRixJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3RDLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDWixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLEdBQUcsR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7SUFDdEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLElBQUksZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLElBQUksZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BLLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztJQUVoQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUMzRCxJQUFJLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQixLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hILE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUVELEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFBO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFXLEVBQUUsTUFBVyxFQUFFLE9BR2pELEVBQVcsRUFBRTtJQUNaLE1BQU0sRUFBRSxlQUFlLEdBQUcsS0FBSyxFQUFFLHFCQUFxQixHQUFHLEtBQUssRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFFakYsSUFBSSxNQUFNLEtBQUssTUFBTSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ2hILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUMxQixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25HLENBQUM7SUFFRCxpQkFBaUI7SUFDakIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN4QixNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDeEIsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZLLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzFCLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEMsT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDekYsQ0FBQyxDQUFBO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxDQUFJLElBQWMsRUFBRSxHQUFZLEVBQVksRUFBRTtJQUNsRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDaEUsZ0NBQWdDO1FBQ2hDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7WUFFL0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4QixNQUFNLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3BCLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCw4QkFBOEI7UUFDOUIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFrQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRWxFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RCxDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEdBQVEsRUFBRSxhQUFxQixFQUFVLEVBQUU7SUFDM0UsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFVLEVBQVUsRUFBRTtRQUMxQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNuQixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7UUFFMUIsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEIsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUNELElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDekIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDMUIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksS0FBSyxZQUFZLE1BQU0sRUFBRSxDQUFDO1lBQzVCLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sWUFBWSxDQUFDO1lBQ3RCLENBQUM7WUFDRCxPQUFPLFNBQVMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztZQUN6QixLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUN4QixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDckQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUMzQyxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssU0FBUyxLQUFLLENBQUM7Z0JBQzlDLENBQUM7WUFDSCxDQUFDO1lBQ0QsWUFBWSxJQUFJLEdBQUcsQ0FBQztZQUNwQixPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRixNQUFNLFlBQVksR0FBRyxhQUFhLGFBQWEsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUN2RSxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBFbGVtZW50UmVmLCBUZW1wbGF0ZVJlZiwgV3JpdGFibGVTaWduYWwsIGlzU2lnbmFsLCBzaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVFlQRV9PQkpFQ1QgfSBmcm9tIFwiQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlc1wiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IHsgVXRpbHNIdHRwUGFyYW1zUmVxdWVzdCB9IGZyb20gXCIuL2h0dHAtcGFyYW1zXCI7XG5pbXBvcnQgeyBnZXREYXlqcyB9IGZyb20gXCIuL2RhdGVcIjtcblxuLyoqQ8OhYyBow6BtIHTGsMahbmcgdOG7sSB0aMawIHZp4buHbiBsb2Rhc2ggKi9cbi8qKlxuICogS2nhu4NtIHRyYSB4ZW0gbeG7mXQgZ2nDoSB0cuG7iyBjw7MgcGjhuqNpIGzDoCBudWxsIGhv4bq3YyB1bmRlZmluZWQgaGF5IGtow7RuZ1xuICogQHBhcmFtIHZhbHVlIEdpw6EgdHLhu4sgY+G6p24ga2nhu4NtIHRyYVxuICogQHJldHVybnMgdHJ1ZSBu4bq/dSBnacOhIHRy4buLIGzDoCBudWxsIGhv4bq3YyB1bmRlZmluZWQsIGZhbHNlIG7hur91IGtow7RuZ1xuICogQGV4YW1wbGVcbiAqIGlzTmlsKG51bGwpOyAvLyB0cnVlXG4gKiBpc05pbCh1bmRlZmluZWQpOyAvLyB0cnVlXG4gKiBpc05pbCgwKTsgLy8gZmFsc2VcbiAqIGlzTmlsKCdoZWxsbycpOyAvLyBmYWxzZVxuICovXG5leHBvcnQgY29uc3QgaXNOaWwgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudWxsIHwgdW5kZWZpbmVkID0+IHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgeGVtIG3hu5l0IGdpw6EgdHLhu4sgY8OzIHBo4bqjaSBsw6AgcuG7l25nIGhheSBraMO0bmdcbiAqIEBwYXJhbSB2YWx1ZSBHacOhIHRy4buLIGPhuqduIGtp4buDbSB0cmFcbiAqIEByZXR1cm5zIHRydWUgbuG6v3UgZ2nDoSB0cuG7iyBsw6AgbnVsbCwgcuG7l25nIGhv4bq3YyB1bmRlZmluZWQsIGZhbHNlIG7hur91IGtow7RuZ1xuICogQGV4YW1wbGVcbiAqIGlzRW1wdHkobnVsbCk7IC8vIHRydWVcbiAqIGlzRW1wdHkoJycpOyAvLyB0cnVlXG4gKiBpc0VtcHR5KHVuZGVmaW5lZCk7IC8vIHRydWVcbiAqIGlzRW1wdHkoe30pOyAvLyB0cnVlXG4gKiBpc0VtcHR5KFtdKTsgLy8gdHJ1ZVxuICogaXNFbXB0eShbMSwgMiwgM10pOyAvLyBmYWxzZVxuICogaXNFbXB0eSh7IGE6IDEgfSk7IC8vIGZhbHNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0VtcHR5ID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gIHdoaWxlKGlzU2lnbmFsKHZhbHVlKSl7XG4gICAgdmFsdWUgPSB2YWx1ZSgpO1xuICB9XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAoSlNPTi5zdHJpbmdpZnkodmFsdWUpID09PSAne30nIHx8IEpTT04uc3RyaW5naWZ5KHZhbHVlKSA9PT0gJ1tdJykpO1xufTtcblxuLyoqXG4gKiBMb+G6oWkgYuG7jyBjw6FjIHRodeG7mWMgdMOtbmggY+G7p2EgxJHhu5FpIHTGsOG7o25nIGThu7FhIHRyw6puIG3hu5l0IGjDoG0gxJFp4buBdSBraeG7h25cbiAqIEBwYXJhbSBvYmpEYXRhIMSQ4buRaSB0xrDhu6NuZyBj4bqnbiB44butIGzDvVxuICogQHBhcmFtIHByZWRpY2F0ZSBIw6BtIMSRaeG7gXUga2nhu4duIMSR4buDIGtp4buDbSB0cmEgZ2nDoSB0cuG7iyBj4bunYSB0aHXhu5ljIHTDrW5oLiBO4bq/dSBow6BtIHRy4bqjIHbhu4EgdHJ1ZSB0aMOsIHRodeG7mWMgdMOtbmggxJHDsyBz4bq9IGLhu4sgbG/huqFpIGLhu49cbiAqIEByZXR1cm5zIMSQ4buRaSB0xrDhu6NuZyBt4bubaSBzYXUga2hpIMSRw6MgbG/huqFpIGLhu48gY8OhYyB0aHXhu5ljIHTDrW5oIHRo4buPYSBtw6NuIMSRaeG7gXUga2nhu4duXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgb2JqID0geyBhOiAxLCBiOiBudWxsLCBjOiAzLCBkOiB1bmRlZmluZWQgfTtcbiAqIG9taXRCeShvYmosIGlzTmlsKTsgLy8geyBhOiAxLCBjOiAzIH1cbiAqL1xuZXhwb3J0IGNvbnN0IG9taXRCeSA9IDxUPihvYmpEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBwcmVkaWNhdGU6ICh2YWw6IGFueSkgPT4gYm9vbGVhbik6IFQgPT4ge1xuICBpZiAoIW9iakRhdGEgfHwgdHlwZW9mIG9iakRhdGEgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkob2JqRGF0YSkpIHtcbiAgICByZXR1cm4gb2JqRGF0YSBhcyBUO1xuICB9XG4gIGNvbnN0IG5ld09iaiA9IHt9IGFzIFQ7XG5cbiAgT2JqZWN0LmtleXMob2JqRGF0YSkuZm9yRWFjaChrZXkgPT4ge1xuICAgIGNvbnN0IHZhbHVlT2ZLZXkgPSBnZXQob2JqRGF0YSwga2V5KTtcbiAgICBpZiAoIXByZWRpY2F0ZSh2YWx1ZU9mS2V5KSkge1xuICAgICAgc2V0KG5ld09iaiwga2V5LCB2YWx1ZU9mS2V5KVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG5ld09iajtcbn07XG5cbi8qKlxuICogTOG6pXkgZ2nDoSB0cuG7iyB04burIMSR4buRaSB0xrDhu6NuZyB0aGVvIMSRxrDhu51uZyBk4bqrbiBjaOG7iSDEkeG7i25oXG4gKiBcbiAqIEjDoG0gbsOgeSBnacO6cCBi4bqhbiB0cnV5IGPhuq1wIHbDoG8gY8OhYyB0aHXhu5ljIHTDrW5oIHPDonUgYsOqbiB0cm9uZyBt4buZdCDEkeG7kWkgdMaw4bujbmcgbeG7mXQgY8OhY2ggYW4gdG/DoG4sXG4gKiB0csOhbmggbOG7l2kga2hpIHRodeG7mWMgdMOtbmgga2jDtG5nIHThu5NuIHThuqFpLlxuICogXG4gKiBAcGFyYW0gb2JqIMSQ4buRaSB0xrDhu6NuZyBuZ3Xhu5NuIGPhuqduIGzhuqV5IGdpw6EgdHLhu4tcbiAqIEBwYXJhbSBwYXRoIMSQxrDhu51uZyBk4bqrbiDEkeG6v24gdGh14buZYyB0w61uaCBj4bqnbiBs4bqleS4gQ8OzIHRo4buDIGzDoDpcbiAqICAgLSBDaHXhu5dpOiAndXNlci5wcm9maWxlLm5hbWUnIGhv4bq3YyAnaXRlbXNbMF0udGl0bGUnXG4gKiAgIC0gTeG6o25nOiBbJ3VzZXInLCAncHJvZmlsZScsICduYW1lJ10gaG/hurdjIFsnaXRlbXMnLCAnMCcsICd0aXRsZSddXG4gKiAgIC0gQ2h14buXaSBy4buXbmcgJyc6IHRy4bqjIHbhu4EgY2jDrW5oIMSR4buRaSB0xrDhu6NuZyBn4buRY1xuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBHacOhIHRy4buLIG3hurdjIMSR4buLbmggdHLhuqMgduG7gSBraGkga2jDtG5nIHTDrG0gdGjhuqV5IHRodeG7mWMgdMOtbmggKG3hurdjIMSR4buLbmg6IHVuZGVmaW5lZClcbiAqIEBwYXJhbSBrZWVwTGFzdFZhbHVlSWZTaWduYWwgQ8OzIGdp4buvIG5ndXnDqm4gc2lnbmFsIGN14buRaSBjw7luZyBoYXkga2jDtG5nICht4bq3YyDEkeG7i25oOiBmYWxzZSAtIHPhur0gZ+G7jWkgc2lnbmFsKCkpXG4gKiBAcmV0dXJucyBHacOhIHRy4buLIHTDrG0gxJHGsOG7o2MgaG/hurdjIGdpw6EgdHLhu4sgbeG6t2MgxJHhu4tuaFxuICogXG4gKiBAZXhhbXBsZVxuICogLy8gVsOtIGThu6UgY8ahIGLhuqNuXG4gKiBjb25zdCB1c2VyID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAgfTtcbiAqIGdldCh1c2VyLCAnbmFtZScpOyAvLyAnSm9obidcbiAqIGdldCh1c2VyLCAnZW1haWwnKTsgLy8gdW5kZWZpbmVkXG4gKiBnZXQodXNlciwgJ2VtYWlsJywgJ25vLWVtYWlsJyk7IC8vICduby1lbWFpbCdcbiAqIFxuICogQGV4YW1wbGVcbiAqIC8vIFRydXnhu4FuIHBhdGggcuG7l25nIC0gdHLhuqMgduG7gSBjaMOtbmggxJHhu5FpIHTGsOG7o25nIGfhu5FjXG4gKiBjb25zdCBkYXRhID0geyBuYW1lOiAnQWxpY2UnLCBhZ2U6IDI1IH07XG4gKiBnZXQoZGF0YSwgJycpOyAvLyB7IG5hbWU6ICdBbGljZScsIGFnZTogMjUgfSAoY2jDrW5oIMSR4buRaSB0xrDhu6NuZyBkYXRhKVxuICogZ2V0KGRhdGEsICcnLCAnZGVmYXVsdCcpOyAvLyB7IG5hbWU6ICdBbGljZScsIGFnZTogMjUgfSAoYuG7jyBxdWEgZGVmYXVsdFZhbHVlKVxuICogXG4gKiBAZXhhbXBsZVxuICogLy8gVHJ1eSBj4bqtcCB0aHXhu5ljIHTDrW5oIHPDonVcbiAqIGNvbnN0IGRhdGEgPSB7XG4gKiAgIHVzZXI6IHtcbiAqICAgICBwcm9maWxlOiB7XG4gKiAgICAgICBuYW1lOiAnQWxpY2UnLFxuICogICAgICAgc2V0dGluZ3M6IHsgdGhlbWU6ICdkYXJrJyB9XG4gKiAgICAgfVxuICogICB9XG4gKiB9O1xuICogZ2V0KGRhdGEsICd1c2VyLnByb2ZpbGUubmFtZScpOyAvLyAnQWxpY2UnXG4gKiBnZXQoZGF0YSwgJ3VzZXIucHJvZmlsZS5zZXR0aW5ncy50aGVtZScpOyAvLyAnZGFyaydcbiAqIGdldChkYXRhLCAndXNlci5wcm9maWxlLmF2YXRhcicsICdkZWZhdWx0LmpwZycpOyAvLyAnZGVmYXVsdC5qcGcnXG4gKiBcbiAqIEBleGFtcGxlXG4gKiAvLyBUcnV5IGPhuq1wIG3huqNuZ1xuICogY29uc3QgaXRlbXMgPSBbXG4gKiAgIHsgbmFtZTogJ0l0ZW0gMScsIHByaWNlOiAxMDAgfSxcbiAqICAgeyBuYW1lOiAnSXRlbSAyJywgcHJpY2U6IDIwMCB9XG4gKiBdO1xuICogZ2V0KGl0ZW1zLCAnWzBdLm5hbWUnKTsgLy8gJ0l0ZW0gMSdcbiAqIGdldChpdGVtcywgJ1sxXS5uYW1lJyk7IC8vICdJdGVtIDInXG4gKiBnZXQoaXRlbXMsICdbMl0ubmFtZScsICdOb3QgZm91bmQnKTsgLy8gJ05vdCBmb3VuZCdcbiAqIFxuICogQGV4YW1wbGVcbiAqIC8vIFPhu60gZOG7pW5nIHbhu5tpIG3huqNuZyBwYXRoXG4gKiBjb25zdCBuZXN0ZWQgPSB7IGE6IHsgYjogeyBjOiAnZGVlcCB2YWx1ZScgfSB9IH07XG4gKiBnZXQobmVzdGVkLCBbJ2EnLCAnYicsICdjJ10pOyAvLyAnZGVlcCB2YWx1ZSdcbiAqIGdldChuZXN0ZWQsIFsnYScsICdiJywgJ2QnXSwgJ2RlZmF1bHQnKTsgLy8gJ2RlZmF1bHQnXG4gKiBcbiAqIEBleGFtcGxlXG4gKiAvLyBUcsaw4budbmcgaOG7o3AgxJHhurdjIGJp4buHdFxuICogZ2V0KG51bGwsICdhbnkucGF0aCcpOyAvLyB1bmRlZmluZWRcbiAqIGdldCh1bmRlZmluZWQsICdhbnkucGF0aCcsICdmYWxsYmFjaycpOyAvLyAnZmFsbGJhY2snXG4gKi9cbmV4cG9ydCBjb25zdCBnZXQgPSA8VCA9IGFueT4ob2JqOiBhbnksIHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBkZWZhdWx0VmFsdWU6IGFueSA9IHVuZGVmaW5lZCwga2VlcExhc3RWYWx1ZUlmU2lnbmFsPzogYm9vbGVhbik6IFQgPT4ge1xuICBpZiAoaXNOaWwob2JqKSkge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbiAgd2hpbGUgKGlzU2lnbmFsKG9iaikpIHtcbiAgICBvYmogPSBvYmooKTtcbiAgfVxuICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICByZXR1cm4gb2JqIGFzIFQ7XG4gIH1cbiAgaWYgKG9iaiBpbnN0YW5jZW9mIEh0dHBQYXJhbXMpIHtcbiAgICByZXR1cm4gb2JqLmdldChgJHtwYXRofWApIGFzIFQ7XG4gIH1cbiAgaWYgKG9iaiBpbnN0YW5jZW9mIERPTVJlY3QpIHtcbiAgICByZXR1cm4gb2JqW3BhdGggYXMga2V5b2YgRE9NUmVjdF0gYXMgVDtcbiAgfVxuXG4gIGNvbnN0IHBhdGhzID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGggOiBwYXRoLnJlcGxhY2UoL1xcWyhcXGQrKV0vZywgJy4kMScpLnNwbGl0KCcuJykuZmlsdGVyKGtleSA9PiBrZXkpO1xuICBmb3IgKGNvbnN0IGluZGV4IGluIHBhdGhzKSB7XG4gICAgY29uc3Qga2V5ID0gcGF0aHNbaW5kZXhdO1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBDU1NTdHlsZURlY2xhcmF0aW9uKSB7XG4gICAgICBvYmogPSBvYmpba2V5IGFzIGtleW9mIENTU1N0eWxlRGVjbGFyYXRpb25dIGFzIFQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIG9iaiA9IG9ialtrZXkgYXMga2V5b2YgSFRNTEVsZW1lbnRdIGFzIFQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGlzTmlsKG9iaikgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsID0gaXNTaWduYWwob2JqW2tleV0pICYmICFrZWVwTGFzdFZhbHVlSWZTaWduYWwgPyBvYmpba2V5XSgpIDogb2JqW2tleV07XG5cbiAgICBvYmogPSB2YWw7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxuLyoqXG4gKiBUaGnhur90IGzhuq1wIGdpw6EgdHLhu4sgY2hvIG3hu5l0IHRodeG7mWMgdMOtbmggdHJvbmcgxJHhu5FpIHTGsOG7o25nIHRoZW8gxJHGsOG7nW5nIGThuqtuIGNo4buJIMSR4buLbmhcbiAqIEBwYXJhbSBvYmogxJDhu5FpIHTGsOG7o25nIGPhuqduIHRoaeG6v3QgbOG6rXAgZ2nDoSB0cuG7i1xuICogQHBhcmFtIHBhdGggxJDGsOG7nW5nIGThuqtuIMSR4bq/biB0aHXhu5ljIHTDrW5oLCBjw7MgdGjhu4MgbMOgIGNodeG7l2kgKHZkOiAnYS5iLmMnKSBob+G6t2MgbeG6o25nICh2ZDogWydhJywgJ2InLCAnYyddKVxuICogQHBhcmFtIHZhbHVlIEdpw6EgdHLhu4sgY+G6p24gdGhp4bq/dCBs4bqtcFxuICogQHJldHVybnMgxJDhu5FpIHTGsOG7o25nIHNhdSBraGkgxJHDoyB0aGnhur90IGzhuq1wIGdpw6EgdHLhu4tcbiAqIEB0aHJvd3MgRXJyb3IgbuG6v3UgdGhhbSBz4buRIMSR4bqndSB0acOqbiBraMO0bmcgcGjhuqNpIGzDoCDEkeG7kWkgdMaw4bujbmdcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBvYmogPSB7IGE6IHsgYjogMSB9IH07XG4gKiBzZXQob2JqLCAnYS5iJywgMik7IC8vIHsgYTogeyBiOiAyIH0gfVxuICovXG5leHBvcnQgY29uc3Qgc2V0ID0gPFQgPSBhbnk+KG9iajogYW55LCBwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgdmFsdWU6IGFueSk6IFQgPT4ge1xuICBpZiAoIW9iaiB8fCAodHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiAmJiAhaXNTaWduYWwob2JqKSkgfHwgKGlzU2lnbmFsKG9iaikgJiYgdHlwZW9mIG9iaigpICE9PSBcIm9iamVjdFwiKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcbiAgfVxuXG4gIGlmIChvYmogaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgcmV0dXJuIG9iai5zZXQoYCR7cGF0aH1gLCB2YWx1ZSkgYXMgVDtcbiAgfVxuXG4gIGNvbnN0IHBhdGhBcnJheSA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5yZXBsYWNlKC9cXFsoXFxkKyldL2csICcuWyQxXScpLnNwbGl0KCcuJykuZmlsdGVyKGtleSA9PiBrZXkpO1xuXG4gIGxldCBjdXJyZW50T2JqZWN0QnlLZXk6IGFueSA9IGlzU2lnbmFsKG9iaikgPyBvYmooKSA6IG9iajtcbiAgbGV0IHByZU9iamVjdEJ5S2V5ID0gb2JqO1xuXG4gIHBhdGhBcnJheS5mb3JFYWNoKChrZXksIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4IDwgcGF0aEFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgIGlmICghKGtleSBpbiBjdXJyZW50T2JqZWN0QnlLZXkpIHx8ICh0eXBlb2YgY3VycmVudE9iamVjdEJ5S2V5W2tleV0gIT09IFwib2JqZWN0XCIgJiYgIWlzU2lnbmFsKGN1cnJlbnRPYmplY3RCeUtleVtrZXldKSkpIHtcbiAgICAgICAgY29uc3QgbmV4dEtleSA9IHBhdGhBcnJheVtpbmRleCArIDFdO1xuICAgICAgICBrZXkgPSBrZXkucmVwbGFjZSgvXFxbKFxcZCspXS9nLCAnJDEnKTtcbiAgICAgICAgY3VycmVudE9iamVjdEJ5S2V5W2tleV0gPSAvXFxbKFxcZCspXS9nLnRlc3QobmV4dEtleSkgPyBbXSA6IHt9O1xuICAgICAgfVxuICAgICAgY3VycmVudE9iamVjdEJ5S2V5ID0ga2V5ID8gY3VycmVudE9iamVjdEJ5S2V5W2tleV0gOiBjdXJyZW50T2JqZWN0QnlLZXk7XG4gICAgICBwcmVPYmplY3RCeUtleSA9IGN1cnJlbnRPYmplY3RCeUtleTtcbiAgICAgIGN1cnJlbnRPYmplY3RCeUtleSA9IGlzU2lnbmFsKGN1cnJlbnRPYmplY3RCeUtleSkgPyBjdXJyZW50T2JqZWN0QnlLZXkoKSA6IGN1cnJlbnRPYmplY3RCeUtleTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN1cnJlbnRPYmplY3RCeUtleSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEfDoW4gZ2nDoSB0cuG7iyDhu58gY3Xhu5FpIMSRxrDhu51uZyBk4bqrblxuICAgIGtleSA9IGtleS5yZXBsYWNlKC9cXFsoXFxkKyldL2csICckMScpO1xuICAgIGNvbnN0IHZhbHVlT2ZLZXkgPSBjdXJyZW50T2JqZWN0QnlLZXlba2V5XTtcbiAgICBjb25zdCB2YWx1ZU9mS2V5SXNTaWduYWwgPSBpc1NpZ25hbCh2YWx1ZU9mS2V5KTtcblxuICAgIGlmICh2YWx1ZU9mS2V5SXNTaWduYWwgJiYgKHR5cGVvZiB2YWx1ZU9mS2V5KCkgIT09ICdvYmplY3QnIHx8IHZhbHVlT2ZLZXkoKSA9PT0gbnVsbCkpIHtcbiAgICAgICh2YWx1ZU9mS2V5IGFzIFdyaXRhYmxlU2lnbmFsPGFueT4pLnNldChpc1NpZ25hbCh2YWx1ZSkgPyB2YWx1ZSgpIDogdmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNTaWduYWwocHJlT2JqZWN0QnlLZXkpKSB7XG4gICAgICAocHJlT2JqZWN0QnlLZXkgYXMgV3JpdGFibGVTaWduYWw8YW55PikudXBkYXRlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YU9mS2V5ID0gZGF0YVtrZXldO1xuICAgICAgICBpZiAoaXNOaWwoZGF0YU9mS2V5KSB8fCAhdmFsdWVPZktleUlzU2lnbmFsKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWVPZktleUlzU2lnbmFsKSB7XG4gICAgICAgICAgKHZhbHVlT2ZLZXkgYXMgV3JpdGFibGVTaWduYWw8YW55Pikuc2V0KGlzU2lnbmFsKHZhbHVlKSA/IHZhbHVlKCkgOiB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgIHJldHVybiBbLi4uZGF0YV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4uZGF0YSB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmKHZhbHVlT2ZLZXlJc1NpZ25hbCl7XG4gICAgICAodmFsdWVPZktleSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+KS5zZXQoaXNTaWduYWwodmFsdWUpID8gdmFsdWUoKSA6IHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3VycmVudE9iamVjdEJ5S2V5W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbi8qKlxuICogVOG6oW8gbeG7mXQgYuG6o24gc2FvIHPDonUgY+G7p2EgbeG7mXQgxJHhu5FpIHTGsOG7o25nIGhv4bq3YyBnacOhIHRy4buLIGLhuqV0IGvhu7NcbiAqIEBwYXJhbSBkYXRhIEThu68gbGnhu4d1IGPhuqduIHNhbyBjaMOpcFxuICogQHBhcmFtIG9wdGlvbnMgVMO5eSBjaOG7jW4gY+G6pXUgaMOsbmhcbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZVNpZ25hbCBO4bq/dSB0cnVlLCBz4bq9IGtow7RuZyBzYW8gY2jDqXAgY8OhYyBzaWduYWwgbcOgIHRy4bqjIHbhu4Egc2lnbmFsIGfhu5FjXG4gKiBAcGFyYW0gc2VlbiBXZWFrTWFwIMSR4buDIHRoZW8gZMO1aSBjw6FjIHRoYW0gY2hp4bq/dSDEkcOjIMSRxrDhu6NjIHNhbyBjaMOpcCwgdHLDoW5oIGzhurdwIHbDtCBo4bqhbiB24bubaSBjw6FjIHRoYW0gY2hp4bq/dSB2w7JuZ1xuICogQHJldHVybnMgQuG6o24gc2FvIHPDonUgY+G7p2EgZOG7ryBsaeG7h3UgxJHhuqd1IHbDoG9cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBvYmogPSB7XG4gKiAgIGE6IDEsXG4gKiAgIGI6IHsgYzogMiB9LFxuICogICBkOiBbMSwgMiwgM11cbiAqIH07XG4gKiBjb25zdCBjbG9uZSA9IGNsb25lRGVlcChvYmopO1xuICogLy8gY2xvbmUgbMOgIG3hu5l0IGLhuqNuIHNhbyBob8OgbiB0b8OgbiDEkeG7mWMgbOG6rXAgY+G7p2Egb2JqXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9uZURlZXAgPSA8VCA9IGFueT4oZGF0YTogYW55LCBvcHRpb25zID0geyBpZ25vcmVTaWduYWw6IGZhbHNlIH0sIHNlZW4gPSBuZXcgV2Vha01hcCgpKTogVCA9PiB7XG4gIGlmIChkYXRhID09PSBudWxsIHx8ICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgJiYgIWlzU2lnbmFsKGRhdGEpKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgaWYgKHNlZW4uaGFzKGRhdGEpKSB7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpO1xuICB9XG5cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0KHVuZGVmaW5lZCwgZGF0YSkgYXMgVDtcbiAgfVxuXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShkYXRhLmdldFRpbWUoKSkgYXMgVDtcbiAgfVxuXG4gIGlmIChkYXlqcy5pc0RheWpzKGRhdGEpKSB7XG4gICAgcmV0dXJuIGdldERheWpzKHtkYXRlOmRhdGEudmFsdWVPZigpfSkgYXMgVDtcbiAgfVxuXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoZGF0YS5zb3VyY2UsIGRhdGEuZmxhZ3MpIGFzIFQ7XG4gIH1cblxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIE1hcCkge1xuICAgIGNvbnN0IG1hcENvcHkgPSBuZXcgTWFwKCk7XG4gICAgc2Vlbi5zZXQoZGF0YSwgbWFwQ29weSk7XG4gICAgZGF0YS5mb3JFYWNoKCh2YWwsIGtleSkgPT4ge1xuICAgICAgbWFwQ29weS5zZXQoY2xvbmVEZWVwKGtleSwgb3B0aW9ucywgc2VlbiksIGNsb25lRGVlcCh2YWwsIG9wdGlvbnMsIHNlZW4pKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbWFwQ29weSBhcyBUO1xuICB9XG5cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICBjb25zdCBzZXRDb3B5ID0gbmV3IFNldCgpO1xuICAgIHNlZW4uc2V0KGRhdGEsIHNldENvcHkpO1xuICAgIGRhdGEuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgc2V0Q29weS5hZGQoY2xvbmVEZWVwKHZhbCwgb3B0aW9ucywgc2VlbikpO1xuICAgIH0pO1xuICAgIHJldHVybiBzZXRDb3B5IGFzIFQ7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgIHNlZW4uc2V0KGRhdGEsIGRhdGEubWFwKGl0ZW0gPT4gY2xvbmVEZWVwKGl0ZW0sIG9wdGlvbnMsIHNlZW4pKSBhcyBUKTtcbiAgICByZXR1cm4gc2Vlbi5nZXQoZGF0YSkgYXMgVDtcbiAgfVxuXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgRmlsZSB8fCBkYXRhIGluc3RhbmNlb2YgQmxvYiB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZGF0YSkgPT09ICdbb2JqZWN0IEZpbGVdJykge1xuICAgIHJldHVybiBkYXRhIGFzIFQ7XG4gIH1cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZiB8fCBkYXRhIGluc3RhbmNlb2YgRWxlbWVudFJlZiB8fCBkYXRhIGluc3RhbmNlb2YgRWxlbWVudCB8fCBkYXRhIGluc3RhbmNlb2YgUHJvbWlzZSB8fCBkYXRhIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgIHJldHVybiBkYXRhIGFzIFQ7XG4gIH1cbiAgaWYgKGlzU2lnbmFsKGRhdGEpKSB7XG4gICAgaWYgKG9wdGlvbnM/Lmlnbm9yZVNpZ25hbCkge1xuICAgICAgcmV0dXJuIGRhdGEgYXMgVDtcbiAgICB9XG4gICAgc2Vlbi5zZXQoZGF0YSwgc2lnbmFsKGNsb25lRGVlcChkYXRhKCksIG9wdGlvbnMsIHNlZW4pKSk7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpIGFzIFQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgc2Vlbi5zZXQoZGF0YSwgcmVzdWx0KTtcbiAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgIGNvbnN0IHZhbHVlID0gZGF0YVtrZXldO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEh0dHBQYXJhbXMpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbmV3IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3QodW5kZWZpbmVkLCB2YWx1ZSkgYXMgVDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAgIGlmIChkYXlqcy5pc0RheWpzKHZhbHVlKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBnZXREYXlqcyh7ZGF0ZTp2YWx1ZS52YWx1ZU9mKCl9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZiB8fCB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnRSZWYgfHwgdmFsdWUgaW5zdGFuY2VvZiBFbGVtZW50IHx8IHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IGNsb25lRGVlcCh2YWx1ZSwgb3B0aW9ucywgc2Vlbik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCBhcyBUO1xufTtcblxuLyoqXG4gKiBDaHV54buDbiDEkeG7lWkgbeG7mXQgbeG6o25nIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRow6BuaCBt4buZdCDEkeG7kWkgdMaw4bujbmcgduG7m2kga2jDs2EgxJHGsOG7o2MgY2jhu4kgxJHhu4tuaFxuICogQHBhcmFtIGRhdGEgTeG6o25nIGPDoWMgxJHhu5FpIHTGsOG7o25nIGPhuqduIGNodXnhu4NuIMSR4buVaVxuICogQHBhcmFtIGtleSBUw6puIHRodeG7mWMgdMOtbmggxJHGsOG7o2Mgc+G7rSBk4bulbmcgbMOgbSBraMOzYSB0cm9uZyDEkeG7kWkgdMaw4bujbmcga+G6v3QgcXXhuqNcbiAqIEByZXR1cm5zIMSQ4buRaSB0xrDhu6NuZyB24bubaSBjw6FjIGdpw6EgdHLhu4sgdOG7qyBt4bqjbmcgxJHGsOG7o2MgxJHDoW5oIGtleSB0aGVvIHRodeG7mWMgdMOtbmggxJHDoyBjaOG7iSDEkeG7i25oXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGF0YSA9IFtcbiAqICAgeyBpZDogMSwgbmFtZTogJ0pvaG4nIH0sXG4gKiAgIHsgaWQ6IDIsIG5hbWU6ICdKYW5lJyB9XG4gKiBdO1xuICoga2V5QnkoZGF0YSwgJ2lkJyk7IFxuICogLy8gS+G6v3QgcXXhuqM6IHsgXG4gKiAvLyAgICcxJzogeyBpZDogMSwgbmFtZTogJ0pvaG4nIH0sXG4gKiAvLyAgICcyJzogeyBpZDogMiwgbmFtZTogJ0phbmUnIH1cbiAqIC8vIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGtleUJ5ID0gKGRhdGE6IEFycmF5PFRZUEVfT0JKRUNUPiwga2V5OiBzdHJpbmcpOiBUWVBFX09CSkVDVCA9PiB7XG4gIGlmICghZGF0YSB8fCAhZGF0YS5sZW5ndGggfHwgIWtleSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICByZXR1cm4gZGF0YS5yZWR1Y2UoKGRpciwgbmV4dEl0ZW0pID0+IHtcbiAgICBjb25zdCB2YWx1ZU9mS2V5ID0gZ2V0KG5leHRJdGVtLCBrZXkpO1xuICAgIGlmICh0eXBlb2YgdmFsdWVPZktleSAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlT2ZLZXkgIT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZU9mS2V5ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkaXI7XG4gICAgfVxuICAgIGlmKCFPYmplY3Qua2V5cyhkaXIpLmluY2x1ZGVzKGAke3ZhbHVlT2ZLZXl9YCkpe1xuICAgICAgZGlyW2Ake3ZhbHVlT2ZLZXl9YF0gPSBuZXh0SXRlbTtcbiAgICB9XG4gICAgcmV0dXJuIGRpcjtcbiAgfSwge30pO1xufTtcblxuLyoqXG4gKiBOaMOzbSBjw6FjIMSR4buRaSB0xrDhu6NuZyB0cm9uZyBt4buZdCBt4bqjbmcgdGjDoG5oIGPDoWMgbmjDs20gZOG7sWEgdHLDqm4gbeG7mXQgdGh14buZYyB0w61uaCBj4bulIHRo4buDXG4gKiBAcGFyYW0gZGF0YSBN4bqjbmcgY8OhYyDEkeG7kWkgdMaw4bujbmcgY+G6p24gbmjDs21cbiAqIEBwYXJhbSBrZXkgVMOqbiB0aHXhu5ljIHTDrW5oIMSRxrDhu6NjIHPhu60gZOG7pW5nIGzDoG0ga2jDs2EgbmjDs21cbiAqIEByZXR1cm5zIMSQ4buRaSB0xrDhu6NuZyB24bubaSBjw6FjIGdpw6EgdHLhu4sgdOG7qyBt4bqjbmcgxJHGsOG7o2MgbmjDs20gdGhlbyB0aHXhu5ljIHTDrW5oIMSRw6MgY2jhu4kgxJHhu4tuaFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGRhdGEgPSBbXG4gKiAgIHsgaWQ6IDEsIG5hbWU6ICdKb2huJyB9LFxuICogICB7IGlkOiAyLCBuYW1lOiAnSmFuZScgfSxcbiAqICAgeyBpZDogMSwgbmFtZTogJ0pvaG4nIH1cbiAqIF07XG4gKiBncm91cEJ5KGRhdGEsICdpZCcpOyBcbiAqIC8vIEvhur90IHF14bqjOiB7ICAgIFxuICogLy8gICAnMSc6IFtcbiAqIC8vICAgICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfSxcbiAqIC8vICAgICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfVxuICogLy8gICBdLFxuICogLy8gICAnMic6IFtcbiAqIC8vICAgICB7IGlkOiAyLCBuYW1lOiAnSmFuZScgfSBcbiAqIC8vIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGdyb3VwQnkgPSAoZGF0YTogQXJyYXk8VFlQRV9PQkpFQ1Q+LCBrZXk6IHN0cmluZyk6IFRZUEVfT0JKRUNUID0+IHtcbiAgaWYgKCFkYXRhIHx8ICFkYXRhLmxlbmd0aCB8fCAhT2JqZWN0LmtleXMoZ2V0KGRhdGEsICcwJykpLmxlbmd0aCB8fCAha2V5KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHJldHVybiBkYXRhLnJlZHVjZSgoZGlyLCBuZXh0SXRlbSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlT2ZLZXkgPSBnZXQobmV4dEl0ZW0sIGtleSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZU9mS2V5ICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWVPZktleSAhPT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlT2ZLZXkgIT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGRpcjtcbiAgICB9XG4gICAgaWYgKCFPYmplY3Qua2V5cyhkaXIpLmluY2x1ZGVzKGAke3ZhbHVlT2ZLZXl9YCkpIHtcbiAgICAgIGRpcltgJHt2YWx1ZU9mS2V5fWBdID0gW107XG4gICAgfVxuICAgIGRpcltgJHt2YWx1ZU9mS2V5fWBdLnB1c2gobmV4dEl0ZW0pO1xuICAgIHJldHVybiBkaXI7XG4gIH0sIHt9KTtcbn07XG5cblxuLyoqXG4gKiBU4bqhbyBt4buZdCBt4bqjbmcgY8OhYyBz4buRIHThu6sgZ2nDoSB0cuG7iyBi4bqvdCDEkeG6p3UgxJHhur9uIGdpw6EgdHLhu4sga+G6v3QgdGjDumMgduG7m2kgYsaw4bubYyBuaOG6o3kgdMO5eSBjaOG7jW5cbiAqIEBwYXJhbSBzdGFydCBHacOhIHRy4buLIGLhuq90IMSR4bqndSBj4bunYSBkw6N5IHPhu5EuIE7hur91IGNo4buJIGPDsyBt4buZdCB0aGFtIHPhu5EsIMSRw6J5IHPhur0gbMOgIGdpw6EgdHLhu4sga+G6v3QgdGjDumMgdsOgIGdpw6EgdHLhu4sgYuG6r3QgxJHhuqd1IHPhur0gbMOgIDBcbiAqIEBwYXJhbSBlbmQgR2nDoSB0cuG7iyBr4bq/dCB0aMO6YyBj4bunYSBkw6N5IHPhu5EgKHTDuXkgY2jhu41uKVxuICogQHBhcmFtIHN0ZXAgQsaw4bubYyBuaOG6o3kgZ2nhu69hIGPDoWMgc+G7kSB0cm9uZyBkw6N5ICh0w7l5IGNo4buNbikuIE3hurdjIMSR4buLbmggbMOgIDEgbuG6v3UgZW5kID4gc3RhcnQsIC0xIG7hur91IGVuZCA8IHN0YXJ0XG4gKiBAcmV0dXJucyBN4bqjbmcgY8OhYyBz4buRIHThu6sgc3RhcnQgxJHhur9uIGVuZCB24bubaSBixrDhu5tjIG5o4bqjeSBzdGVwXG4gKiBAZXhhbXBsZVxuICogcmFuZ2UoNCk7ICAgICAgLy8gWzAsIDEsIDIsIDNdXG4gKiByYW5nZSgxLCA1KTsgICAvLyBbMSwgMiwgMywgNF1cbiAqIHJhbmdlKDAsIDIwLCA1KTsgLy8gWzAsIDUsIDEwLCAxNV1cbiAqIHJhbmdlKDUsIDIpOyAgIC8vIFs1LCA0LCAzXVxuICovXG5leHBvcnQgY29uc3QgcmFuZ2UgPSAoc3RhcnQ6IG51bWJlciwgZW5kPzogbnVtYmVyLCBzdGVwPzogbnVtYmVyKTogQXJyYXk8bnVtYmVyPiA9PiB7XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPT09IG51bGwpIHtcbiAgICBlbmQgPSBzdGFydDtcbiAgICBzdGFydCA9IDA7XG4gIH1cblxuICBpZiAoIXN0ZXApIHtcbiAgICBzdGVwID0gZW5kIDwgMCA/IC0xIDogMTtcbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCAmJiBzdGVwID4gMCkge1xuICAgIHN0ZXAgKj0gLTE7XG4gIH1cblxuICBjb25zdCB2YWx1ZVN0YXJ0QnlTdGVwID0gc3RlcCArIHN0YXJ0O1xuICBjb25zdCBkaXJlY3Rpb24gPSBzdGFydCA8IGVuZCA/ICdhc2MnIDogJ2Rlc2MnO1xuICBpZiAoKGRpcmVjdGlvbiA9PT0gJ2FzYycgJiYgKHZhbHVlU3RhcnRCeVN0ZXAgPCBzdGFydCB8fCB2YWx1ZVN0YXJ0QnlTdGVwID4gZW5kKSkgfHwgKGRpcmVjdGlvbiA9PT0gJ2Rlc2MnICYmICh2YWx1ZVN0YXJ0QnlTdGVwID4gc3RhcnQgfHwgdmFsdWVTdGFydEJ5U3RlcCA8IGVuZCkpKSB7XG4gICAgcmV0dXJuIFtzdGFydF07XG4gIH1cblxuICBjb25zdCBhcnIgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBNYXRoLmFicyhlbmQgLSBzdGFydCk7IGluZGV4KyspIHtcbiAgICBsZXQgdmFsdWUgPSBzdGFydCArIGluZGV4ICogc3RlcDtcbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgIHZhbHVlID0gc3RhcnQ7XG4gICAgfVxuXG4gICAgaWYgKChkaXJlY3Rpb24gPT09ICdhc2MnICYmICh2YWx1ZSA8IHN0YXJ0IHx8IHZhbHVlID4gZW5kKSkgfHwgKGRpcmVjdGlvbiA9PT0gJ2Rlc2MnICYmICh2YWx1ZSA+IHN0YXJ0IHx8IHZhbHVlIDwgZW5kKSkpIHtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuXG4gICAgYXJyLnB1c2godmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn1cblxuLyoqXG4gKiBTbyBzw6FuaCBoYWkgZ2nDoSB0cuG7iyBi4bqldCBr4buzIGPDsyBi4bqxbmcgbmhhdSBoYXkga2jDtG5nXG4gKiBAcGFyYW0gdmFsdWUxIEdpw6EgdHLhu4sgdGjhu6kgbmjhuqV0IGPhuqduIHNvIHPDoW5oXG4gKiBAcGFyYW0gdmFsdWUyIEdpw6EgdHLhu4sgdGjhu6kgaGFpIGPhuqduIHNvIHPDoW5oXG4gKiBAcGFyYW0gZXhhY3RseVBvc2l0aW9uIEPDsyBzbyBzw6FuaCBjaMOtbmggeMOhYyB24buLIHRyw60gY8OhYyBwaOG6p24gdOG7rSB0cm9uZyBt4bqjbmcgaGF5IGtow7RuZ1xuICogQHJldHVybnMgdHJ1ZSBu4bq/dSBoYWkgZ2nDoSB0cuG7iyBi4bqxbmcgbmhhdSwgZmFsc2UgbuG6v3Uga2jDtG5nIGLhurFuZyBuaGF1XG4gKiBAZXhhbXBsZVxuICogaXNFcXVhbChbMSwyLDNdLCBbMSwyLDNdKTsgLy8gdHJ1ZVxuICogaXNFcXVhbChbMSwyLDNdLCBbMywyLDFdKTsgLy8gdHJ1ZSBraGkgZXhhY3RseVBvc2l0aW9uID0gZmFsc2VcbiAqIGlzRXF1YWwoWzEsMiwzXSwgWzMsMiwxXSk7IC8vIGZhbHNlIGtoaSBleGFjdGx5UG9zaXRpb24gPSB0cnVlXG4gKiBpc0VxdWFsKHthOjF9LCB7YToxfSk7IC8vIHRydWVcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRXF1YWwgPSAodmFsdWUxOiBhbnksIHZhbHVlMjogYW55LCBvcHRpb25zPzoge1xuICBleGFjdGx5UG9zaXRpb24/OiBib29sZWFuO1xuICBpZ25vcmVFeGFjdGx5RGF0YVR5cGU/OiBib29sZWFuO1xufSk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCB7IGV4YWN0bHlQb3NpdGlvbiA9IGZhbHNlLCBpZ25vcmVFeGFjdGx5RGF0YVR5cGUgPSBmYWxzZSB9ID0gb3B0aW9ucyB8fCB7fTtcblxuICBpZiAodmFsdWUxID09PSB2YWx1ZTIgfHwgKHZhbHVlMSA9PT0gbnVsbCAmJiB2YWx1ZTIgPT09IG51bGwpIHx8ICh2YWx1ZTEgPT09IHVuZGVmaW5lZCAmJiB2YWx1ZTIgPT09IHVuZGVmaW5lZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpZ25vcmVFeGFjdGx5RGF0YVR5cGUpIHtcbiAgICByZXR1cm4gaXNFcXVhbChpc05pbCh2YWx1ZTEpID8gdW5kZWZpbmVkIDogYCR7dmFsdWUxfWAsIGlzTmlsKHZhbHVlMikgPyB1bmRlZmluZWQgOiBgJHt2YWx1ZTJ9YCk7XG4gIH1cblxuICAvLyBIYW5kbGUgc2lnbmFsc1xuICB3aGlsZSAoaXNTaWduYWwodmFsdWUxKSkge1xuICAgIHZhbHVlMSA9IHZhbHVlMSgpO1xuICB9XG4gIHdoaWxlIChpc1NpZ25hbCh2YWx1ZTIpKSB7XG4gICAgdmFsdWUyID0gdmFsdWUyKCk7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlMSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlMiAhPT0gJ29iamVjdCcgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUxKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB8fCAoIUFycmF5LmlzQXJyYXkodmFsdWUxKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlMikpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUxKSkge1xuICAgIGlmICh2YWx1ZTEubGVuZ3RoICE9PSB2YWx1ZTIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKCFleGFjdGx5UG9zaXRpb24pIHtcbiAgICAgIHJldHVybiAhdmFsdWUxLnNvbWUoaXRlbSA9PiAhdmFsdWUyLmluY2x1ZGVzKGl0ZW0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXZhbHVlMS5zb21lKChpdGVtLCBpbmRleCkgPT4gIWlzRXF1YWwoaXRlbSwgdmFsdWUyW2luZGV4XSxvcHRpb25zKSk7XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXModmFsdWUxKS5sZW5ndGggIT09IE9iamVjdC5rZXlzKHZhbHVlMikubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAhT2JqZWN0LmtleXModmFsdWUxKS5zb21lKChrZXkpID0+ICFpc0VxdWFsKHZhbHVlMVtrZXldLCB2YWx1ZTJba2V5XSwgb3B0aW9ucykpO1xufVxuXG4vKipcbiAqIExv4bqhaSBi4buPIGPDoWMgcGjhuqduIHThu60gdHLDuW5nIGzhurdwIHRyb25nIG3huqNuZyBk4buxYSB0csOqbiBt4buZdCB0aHXhu5ljIHTDrW5oIGNo4buJIMSR4buLbmhcbiAqIEBwYXJhbSBkYXRhIE3huqNuZyBk4buvIGxp4buHdSBj4bqnbiB44butIGzDvVxuICogQHBhcmFtIGtleSBUw6puIHRodeG7mWMgdMOtbmggZMO5bmcgxJHhu4Mgc28gc8OhbmggdHLDuW5nIGzhurdwLiBO4bq/dSBraMO0bmcgY8OzIGtleSB0aMOsIHNvIHPDoW5oIHRy4buxYyB0aeG6v3AgZ2nDoSB0cuG7i1xuICogQHJldHVybnMgTeG6o25nIG3hu5tpIGNo4bupYSBjw6FjIHBo4bqnbiB04butIGtow7RuZyB0csO5bmcgbOG6t3BcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBhcnIgPSBbXG4gKiAgIHsgaWQ6IDEsIG5hbWU6ICdBJyB9LFxuICogICB7IGlkOiAyLCBuYW1lOiAnQicgfSxcbiAqICAgeyBpZDogMSwgbmFtZTogJ0MnIH1cbiAqIF07XG4gKiB1bmlxQnkoYXJyLCAnaWQnKTsgLy8gW3sgaWQ6IDEsIG5hbWU6ICdBJyB9LCB7IGlkOiAyLCBuYW1lOiAnQicgfV1cbiAqIFxuICogY29uc3QgbnVtYmVycyA9IFsxLCAyLCAyLCAzLCAzXTtcbiAqIHVuaXFCeShudW1iZXJzKTsgLy8gWzEsIDIsIDNdXG4gKiBcbiAqIGNvbnN0IG51bWJlcnNTaWduYWwgPSBbc2lnbmFsKDEpLCBzaWduYWwoMiksIHNpZ25hbCgzKSwgc2lnbmFsKDIpLCBzaWduYWwoNSksIHNpZ25hbCg0KSwgc2lnbmFsKDEpLCBzaWduYWwoNiksIHNpZ25hbCg3KSwgc2lnbmFsKDYpXTtcbiAqIHVuaXFCeShudW1iZXJzU2lnbmFsKTsgLy8gW3NpZ25hbCgxKSwgc2lnbmFsKDIpLCBzaWduYWwoMyksIHNpZ25hbCg1KSwgc2lnbmFsKDQpLCBzaWduYWwoNiksIHNpZ25hbCg3KV1cbiAqL1xuZXhwb3J0IGNvbnN0IHVuaXFCeSA9IDxUPihkYXRhOiBBcnJheTxUPiwga2V5Pzogc3RyaW5nKTogQXJyYXk8VD4gPT4ge1xuICBpZiAoIWtleSB8fCAhZGF0YT8ubGVuZ3RoIHx8IHR5cGVvZiBnZXQoZGF0YSwgJzAnKSAhPT0gJ29iamVjdCcpIHtcbiAgICAvLyBY4butIGzDvSBt4bqjbmcgY2jhu6lhIHNpZ25hbCB2YWx1ZXNcbiAgICBpZiAoZGF0YVswXSAmJiBpc1NpZ25hbChkYXRhWzBdKSkge1xuICAgICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICByZXR1cm4gZGF0YS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYCR7Z2V0KGl0ZW0sICcnKX1gO1xuICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gWOG7rSBsw70gbeG6o25nIHByaW1pdGl2ZSB2YWx1ZXNcbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGRhdGEpKTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFVbmlxdWUgPSBrZXlCeShkYXRhIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIGFueT4+LCBrZXkpO1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyhkYXRhVW5pcXVlKS5tYXAoa2V5ID0+IGRhdGFVbmlxdWVba2V5XSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUludGVyZmFjZSA9IChvYmo6IGFueSwgaW50ZXJmYWNlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZ2VuZXJhdGVUeXBlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuICAgIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuICdib29sZWFuJztcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gJ2FueSc7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuICdEYXRlJztcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiAnUmVnRXhwJztcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuICdBcnJheTxhbnk+JztcbiAgICAgIH1cbiAgICAgIHJldHVybiBgQXJyYXk8JHtnZW5lcmF0ZVR5cGUodmFsdWVbMF0pfT5gO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgbGV0IGludGVyZmFjZVN0ciA9ICd7XFxuJztcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSBnZW5lcmF0ZVR5cGUodmFsdWVba2V5XSk7XG4gICAgICAgICAgaW50ZXJmYWNlU3RyICs9IGAgICR7a2V5fTogJHt2YWx1ZVR5cGV9O1xcbmA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGludGVyZmFjZVN0ciArPSAnfSc7XG4gICAgICByZXR1cm4gaW50ZXJmYWNlU3RyO1xuICAgIH1cblxuICAgIHJldHVybiAnYW55JztcbiAgfTtcblxuICBjb25zdCBpbnRlcmZhY2VTdHIgPSBgaW50ZXJmYWNlICR7aW50ZXJmYWNlTmFtZX0gJHtnZW5lcmF0ZVR5cGUob2JqKX1gO1xuICByZXR1cm4gaW50ZXJmYWNlU3RyO1xufTsiXX0=
|
|
645
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQTBCLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhFLHNDQUFzQztBQUN0Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFjLEVBQUUsT0FBMEMsRUFBNkIsRUFBRTtJQUM3RyxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDakMsS0FBSyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUMvQyxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFjLEVBQUUsT0FBMkcsRUFBc0MsRUFBRTtJQUN6TCxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDakMsS0FBSyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxJQUFJLE9B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Y2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgU2lnbmFsLCBXcml0YWJsZVNpZ25hbCwgaXNTaWduYWwsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR2V0UmV0dXJuVHlwZSwgR2V0VmFsdWVBdFBhdGgsIFBhdGhPZiwgVFlQRV9PQkpFQ1QgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgeyBpc0Rhbmdlcm91c09iamVjdCwgaXNSZXR1cm5Bc0lzT2JqZWN0IH0gZnJvbSAnLi9kYW5nZXJvdXMtb2JqZWN0JztcbmltcG9ydCB7IGdldERheWpzIH0gZnJvbSAnLi9kYXRlJztcbmltcG9ydCB7IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3QgfSBmcm9tICcuL2h0dHAtcGFyYW1zJztcbmltcG9ydCB7IGNvbnZlcnRTaWduYWxUb09iamVjdCB9IGZyb20gJy4vdHdvLXdheS1zaWduYWwtb2JqZWN0JztcblxuLyoqQ8OhYyBow6BtIHTGsMahbmcgdOG7sSB0aMawIHZp4buHbiBsb2Rhc2ggKi9cbi8qKlxuICogS2nhu4NtIHRyYSB4ZW0gbeG7mXQgZ2nDoSB0cuG7iyBjw7MgcGjhuqNpIGzDoCBudWxsIGhv4bq3YyB1bmRlZmluZWQgaGF5IGtow7RuZ1xuICogQHBhcmFtIHZhbHVlIEdpw6EgdHLhu4sgY+G6p24ga2nhu4NtIHRyYVxuICogQHJldHVybnMgdHJ1ZSBu4bq/dSBnacOhIHRy4buLIGzDoCBudWxsIGhv4bq3YyB1bmRlZmluZWQsIGZhbHNlIG7hur91IGtow7RuZ1xuICogQGV4YW1wbGVcbiAqIGlzTmlsKG51bGwpOyAvLyB0cnVlXG4gKiBpc05pbCh1bmRlZmluZWQpOyAvLyB0cnVlXG4gKiBpc05pbCgwKTsgLy8gZmFsc2VcbiAqIGlzTmlsKCdoZWxsbycpOyAvLyBmYWxzZVxuICovXG5leHBvcnQgY29uc3QgaXNOaWwgPSAodmFsdWU6IHVua25vd24sIG9wdGlvbnM/OiB7IGlnbm9yZVVuV3JhcFNpZ25hbD86IGJvb2xlYW4gfSk6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIW9wdGlvbnM/Lmlnbm9yZVVuV3JhcFNpZ25hbCkge1xuICAgIHZhbHVlID0gY29udmVydFNpZ25hbFRvT2JqZWN0KHZhbHVlKTtcbiAgfVxuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSB4ZW0gbeG7mXQgZ2nDoSB0cuG7iyBjw7MgcGjhuqNpIGzDoCBy4buXbmcgaGF5IGtow7RuZ1xuICogQHBhcmFtIHZhbHVlIEdpw6EgdHLhu4sgY+G6p24ga2nhu4NtIHRyYVxuICogQHJldHVybnMgdHJ1ZSBu4bq/dSBnacOhIHRy4buLIGzDoCBudWxsLCBy4buXbmcgaG/hurdjIHVuZGVmaW5lZCwgZmFsc2UgbuG6v3Uga2jDtG5nXG4gKiBAZXhhbXBsZVxuICogaXNFbXB0eShudWxsKTsgLy8gdHJ1ZVxuICogaXNFbXB0eSgnJyk7IC8vIHRydWVcbiAqIGlzRW1wdHkodW5kZWZpbmVkKTsgLy8gdHJ1ZVxuICogaXNFbXB0eSh7fSk7IC8vIHRydWVcbiAqIGlzRW1wdHkoW10pOyAvLyB0cnVlXG4gKiBpc0VtcHR5KFsxLCAyLCAzXSk7IC8vIGZhbHNlXG4gKiBpc0VtcHR5KHsgYTogMSB9KTsgLy8gZmFsc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRW1wdHkgPSAodmFsdWU6IHVua25vd24sIG9wdGlvbnM/OiB7IGlnbm9yZUNoZWNrVHlwZVByaW1pdGl2ZT86IGJvb2xlYW47IGlnbm9yZVVuV3JhcFNpZ25hbD86IGJvb2xlYW47IGlnbm9yZUNoZWNrU3RyaW5nPzogYm9vbGVhbiB9KTogdmFsdWUgaXMgbnVsbCB8IHVuZGVmaW5lZCB8ICcnIHwgMCA9PiB7XG4gIGlmICghb3B0aW9ucz8uaWdub3JlVW5XcmFwU2lnbmFsKSB7XG4gICAgdmFsdWUgPSBjb252ZXJ0U2lnbmFsVG9PYmplY3QodmFsdWUpO1xuICB9XG4gIGlmIChvcHRpb25zPy5pZ25vcmVDaGVja1R5cGVQcmltaXRpdmUpIHtcbiAgICByZXR1cm4gaXNFbXB0eVR5cGVPYmplY3QodmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIGlzRW1wdHlUeXBlUHJpbWl0aXZlKHZhbHVlLCB7IGlnbm9yZUNoZWNrU3RyaW5nOiBvcHRpb25zPy5pZ25vcmVDaGVja1N0cmluZyB9KSB8fCBpc0VtcHR5VHlwZU9iamVjdCh2YWx1ZSk7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgeGVtIG3hu5l0IGdpw6EgdHLhu4sgY8OzIHBo4bqjaSBsw6Agb2JqZWN0IHLhu5duZyBoYXkga2jDtG5nXG4gKiBAcGFyYW0gdmFsdWUgR2nDoSB0cuG7iyBj4bqnbiBraeG7g20gdHJhXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IGdpw6EgdHLhu4sgbMOgIG9iamVjdCBy4buXbmcsIGZhbHNlIG7hur91IGtow7RuZ1xuICogQGV4YW1wbGVcbiAqIGlzRW1wdHlUeXBlT2JqZWN0KHt9KTsgLy8gdHJ1ZVxuICogaXNFbXB0eVR5cGVPYmplY3QoeyBhOiAxIH0pOyAvLyBmYWxzZVxuICovXG5jb25zdCBpc0VtcHR5VHlwZU9iamVjdCA9IDxUID0gbnVsbD4odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBUID0+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgKEpTT04uc3RyaW5naWZ5KHZhbHVlKSA9PT0gJ3t9JyB8fCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgPT09ICdbXScpO1xufTtcblxuY29uc3QgaXNFbXB0eVR5cGVQcmltaXRpdmUgPSA8VCA9IG51bGw+KHZhbHVlOiB1bmtub3duLCBvcHRpb25zPzogeyBpZ25vcmVDaGVja1N0cmluZz86IGJvb2xlYW4gfSk6IHZhbHVlIGlzIFQgPT4ge1xuICBpZiAob3B0aW9ucz8uaWdub3JlQ2hlY2tTdHJpbmcgJiYgdmFsdWUgPT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlID09PSAnJyB8fCBpc05pbCh2YWx1ZSwgeyBpZ25vcmVVbldyYXBTaWduYWw6IHRydWUgfSk7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgeGVtIG3hu5l0IGdpw6EgdHLhu4sgY8OzIHBo4bqjaSBsw6AgbnVsbCwgcuG7l25nLCB1bmRlZmluZWQgaG/hurdjIDAgaGF5IGtow7RuZ1xuICogQHBhcmFtIHZhbHVlIEdpw6EgdHLhu4sgY+G6p24ga2nhu4NtIHRyYVxuICogQHBhcmFtIG9wdGlvbnMgQ+G6pXUgaMOsbmggdMO5eSBjaOG7jW5cbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZVplcm8gTuG6v3UgdHJ1ZSwgc+G6vSBraMO0bmcga2nhu4NtIHRyYSBnacOhIHRy4buLIDBcbiAqIEByZXR1cm5zIHRydWUgbuG6v3UgZ2nDoSB0cuG7iyBsw6AgbnVsbCwgcuG7l25nLCB1bmRlZmluZWQgaG/hurdjIDAsIGZhbHNlIG7hur91IGtow7RuZ1xuICogQGV4YW1wbGVcbiAqIGlzVHJ1dGh5KG51bGwpOyAvLyBmYWxzZVxuICogaXNUcnV0aHkoJycpOyAvLyBmYWxzZVxuICogaXNUcnV0aHkodW5kZWZpbmVkKTsgLy8gZmFsc2VcbiAqIGlzVHJ1dGh5KDApOyAvLyBmYWxzZVxuICogaXNUcnV0aHkoe30pOyAvLyB0cnVlXG4gKiBpc1RydXRoeSgwLCB7IGlnbm9yZVplcm86IHRydWUgfSk7IC8vIHRydWVcbiAqL1xuXG5leHBvcnQgY29uc3QgaXNUcnV0aHkgPSA8VD4odmFsdWU6IFQsIG9wdGlvbnM/OiB7IGlnbm9yZVplcm8/OiBib29sZWFuOyBpZ25vcmVDaGVja1N0cmluZz86IGJvb2xlYW47IGlnbm9yZVVuV3JhcFNpZ25hbD86IGJvb2xlYW4gfSk6IHZhbHVlIGlzIE5vbk51bGxhYmxlPFQ+ID0+IHtcbiAgcmV0dXJuICFpc0ZhbHN5KHZhbHVlLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSB4ZW0gbeG7mXQgZ2nDoSB0cuG7iyBjw7MgcGjhuqNpIGzDoCBudWxsLCBy4buXbmcsIHVuZGVmaW5lZCBob+G6t2MgMCBoYXkga2jDtG5nXG4gKiBAcGFyYW0gdmFsdWUgR2nDoSB0cuG7iyBj4bqnbiBraeG7g20gdHJhXG4gKiBAcGFyYW0gb3B0aW9ucyBD4bqldSBow6xuaCB0w7l5IGNo4buNblxuICogQHBhcmFtIG9wdGlvbnMuaWdub3JlWmVybyBO4bq/dSB0cnVlLCBz4bq9IGtow7RuZyBraeG7g20gdHJhIGdpw6EgdHLhu4sgMFxuICogQHJldHVybnMgdHJ1ZSBu4bq/dSBnacOhIHRy4buLIGzDoCBudWxsLCBy4buXbmcsIHVuZGVmaW5lZCBob+G6t2MgMCwgZmFsc2UgbuG6v3Uga2jDtG5nXG4gKiBAZXhhbXBsZVxuICogaXNGYWxzeShudWxsKTsgLy8gdHJ1ZVxuICogaXNGYWxzeSgnJyk7IC8vIHRydWVcbiAqIGlzRmFsc3kodW5kZWZpbmVkKTsgLy8gdHJ1ZVxuICogaXNGYWxzeSgwKTsgLy8gdHJ1ZVxuICogaXNGYWxzeSh7fSk7IC8vIGZhbHNlXG4gKiBpc0ZhbHN5KDAsIHsgaWdub3JlWmVybzogdHJ1ZSB9KTsgLy8gZmFsc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRmFsc3kgPSAodmFsdWU6IHVua25vd24sIG9wdGlvbnM/OiB7IGlnbm9yZVplcm8/OiBib29sZWFuOyBpZ25vcmVDaGVja1N0cmluZz86IGJvb2xlYW47IGlnbm9yZVVuV3JhcFNpZ25hbD86IGJvb2xlYW4gfSk6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgfCAnJyB8IDAgPT4ge1xuICBpZiAoIW9wdGlvbnM/Lmlnbm9yZVVuV3JhcFNpZ25hbCkge1xuICAgIHZhbHVlID0gY29udmVydFNpZ25hbFRvT2JqZWN0KHZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0IGlzRmFsc2UgPSAhdmFsdWU7XG5cbiAgaWYgKCFpc0ZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG9wdGlvbnM/Lmlnbm9yZVplcm8gJiYgdmFsdWUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKG9wdGlvbnM/Lmlnbm9yZUNoZWNrU3RyaW5nICYmIHZhbHVlID09PSAnJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpc0ZhbHNlO1xufTtcblxuLyoqXG4gKiBMb+G6oWkgYuG7jyBjw6FjIHRodeG7mWMgdMOtbmggY+G7p2EgxJHhu5FpIHTGsOG7o25nIGThu7FhIHRyw6puIG3hu5l0IGjDoG0gxJFp4buBdSBraeG7h25cbiAqIEBwYXJhbSBvYmpEYXRhIMSQ4buRaSB0xrDhu6NuZyBj4bqnbiB44butIGzDvVxuICogQHBhcmFtIHByZWRpY2F0ZSBIw6BtIMSRaeG7gXUga2nhu4duIMSR4buDIGtp4buDbSB0cmEgZ2nDoSB0cuG7iyBj4bunYSB0aHXhu5ljIHTDrW5oLiBO4bq/dSBow6BtIHRy4bqjIHbhu4EgdHJ1ZSB0aMOsIHRodeG7mWMgdMOtbmggxJHDsyBz4bq9IGLhu4sgbG/huqFpIGLhu49cbiAqIEByZXR1cm5zIMSQ4buRaSB0xrDhu6NuZyBt4bubaSBzYXUga2hpIMSRw6MgbG/huqFpIGLhu48gY8OhYyB0aHXhu5ljIHTDrW5oIHRo4buPYSBtw6NuIMSRaeG7gXUga2nhu4duXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgb2JqID0geyBhOiAxLCBiOiBudWxsLCBjOiAzLCBkOiB1bmRlZmluZWQgfTtcbiAqIG9taXRCeShvYmosIGlzTmlsKTsgLy8geyBhOiAxLCBjOiAzIH1cbiAqL1xuZXhwb3J0IGNvbnN0IG9taXRCeSA9IDxUPihvYmpEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBwcmVkaWNhdGU6ICh2YWw6IGFueSkgPT4gYm9vbGVhbik6IFQgPT4ge1xuICBpZiAoIW9iakRhdGEgfHwgdHlwZW9mIG9iakRhdGEgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkob2JqRGF0YSkpIHtcbiAgICByZXR1cm4gb2JqRGF0YSBhcyBUO1xuICB9XG4gIGNvbnN0IG5ld09iaiA9IHt9IGFzIFQ7XG5cbiAgT2JqZWN0LmtleXMob2JqRGF0YSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgdmFsdWVPZktleSA9IGdldChvYmpEYXRhLCBrZXkpO1xuICAgIGlmICghcHJlZGljYXRlKHZhbHVlT2ZLZXkpKSB7XG4gICAgICBzZXQobmV3T2JqLCBrZXkgYXMgUGF0aE9mPFQ+LCB2YWx1ZU9mS2V5KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbmV3T2JqO1xufTtcblxuLyoqXG4gKiBM4bqleSBnacOhIHRy4buLIHThu6sgxJHhu5FpIHTGsOG7o25nIHRoZW8gxJHGsOG7nW5nIGThuqtuIGNo4buJIMSR4buLbmhcbiAqXG4gKiBIw6BtIG7DoHkgZ2nDunAgYuG6oW4gdHJ1eSBj4bqtcCB2w6BvIGPDoWMgdGh14buZYyB0w61uaCBzw6J1IGLDqm4gdHJvbmcgbeG7mXQgxJHhu5FpIHTGsOG7o25nIG3hu5l0IGPDoWNoIGFuIHRvw6BuLFxuICogdHLDoW5oIGzhu5dpIGtoaSB0aHXhu5ljIHTDrW5oIGtow7RuZyB04buTbiB04bqhaS5cbiAqXG4gKiBAcGFyYW0gb2JqIMSQ4buRaSB0xrDhu6NuZyBuZ3Xhu5NuIGPhuqduIGzhuqV5IGdpw6EgdHLhu4tcbiAqIEBwYXJhbSBwYXRoIMSQxrDhu51uZyBk4bqrbiDEkeG6v24gdGh14buZYyB0w61uaCBj4bqnbiBs4bqleS4gQ8OzIHRo4buDIGzDoDpcbiAqICAgLSBDaHXhu5dpOiAndXNlci5wcm9maWxlLm5hbWUnIGhv4bq3YyAnaXRlbXNbMF0udGl0bGUnXG4gKiAgIC0gTeG6o25nOiBbJ3VzZXInLCAncHJvZmlsZScsICduYW1lJ10gaG/hurdjIFsnaXRlbXMnLCAnMCcsICd0aXRsZSddXG4gKiAgIC0gQ2h14buXaSBy4buXbmcgJyc6IHRy4bqjIHbhu4EgY2jDrW5oIMSR4buRaSB0xrDhu6NuZyBn4buRY1xuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBHacOhIHRy4buLIG3hurdjIMSR4buLbmggdHLhuqMgduG7gSBraGkga2jDtG5nIHTDrG0gdGjhuqV5IHRodeG7mWMgdMOtbmggKG3hurdjIMSR4buLbmg6IHVuZGVmaW5lZClcbiAqIEBwYXJhbSBrZWVwTGFzdFZhbHVlSWZTaWduYWwgQ8OzIGdp4buvIG5ndXnDqm4gc2lnbmFsIGN14buRaSBjw7luZyBoYXkga2jDtG5nICht4bq3YyDEkeG7i25oOiBmYWxzZSAtIHPhur0gZ+G7jWkgc2lnbmFsKCkpXG4gKiBAcmV0dXJucyBHacOhIHRy4buLIHTDrG0gxJHGsOG7o2MgaG/hurdjIGdpw6EgdHLhu4sgbeG6t2MgxJHhu4tuaFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBWw60gZOG7pSBjxqEgYuG6o25cbiAqIGNvbnN0IHVzZXIgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCB9O1xuICogZ2V0KHVzZXIsICduYW1lJyk7IC8vICdKb2huJ1xuICogZ2V0KHVzZXIsICdlbWFpbCcpOyAvLyB1bmRlZmluZWRcbiAqIGdldCh1c2VyLCAnZW1haWwnLCAnbm8tZW1haWwnKTsgLy8gJ25vLWVtYWlsJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUcnV54buBbiBwYXRoIHLhu5duZyAtIHRy4bqjIHbhu4EgY2jDrW5oIMSR4buRaSB0xrDhu6NuZyBn4buRY1xuICogY29uc3QgZGF0YSA9IHsgbmFtZTogJ0FsaWNlJywgYWdlOiAyNSB9O1xuICogZ2V0KGRhdGEsICcnKTsgLy8geyBuYW1lOiAnQWxpY2UnLCBhZ2U6IDI1IH0gKGNow61uaCDEkeG7kWkgdMaw4bujbmcgZGF0YSlcbiAqIGdldChkYXRhLCAnJywgJ2RlZmF1bHQnKTsgLy8geyBuYW1lOiAnQWxpY2UnLCBhZ2U6IDI1IH0gKGLhu48gcXVhIGRlZmF1bHRWYWx1ZSlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVHJ1eSBj4bqtcCB0aHXhu5ljIHTDrW5oIHPDonVcbiAqIGNvbnN0IGRhdGEgPSB7XG4gKiAgIHVzZXI6IHtcbiAqICAgICBwcm9maWxlOiB7XG4gKiAgICAgICBuYW1lOiAnQWxpY2UnLFxuICogICAgICAgc2V0dGluZ3M6IHsgdGhlbWU6ICdkYXJrJyB9XG4gKiAgICAgfVxuICogICB9XG4gKiB9O1xuICogZ2V0KGRhdGEsICd1c2VyLnByb2ZpbGUubmFtZScpOyAvLyAnQWxpY2UnXG4gKiBnZXQoZGF0YSwgJ3VzZXIucHJvZmlsZS5zZXR0aW5ncy50aGVtZScpOyAvLyAnZGFyaydcbiAqIGdldChkYXRhLCAndXNlci5wcm9maWxlLmF2YXRhcicsICdkZWZhdWx0LmpwZycpOyAvLyAnZGVmYXVsdC5qcGcnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRydXkgY+G6rXAgbeG6o25nXG4gKiBjb25zdCBpdGVtcyA9IFtcbiAqICAgeyBuYW1lOiAnSXRlbSAxJywgcHJpY2U6IDEwMCB9LFxuICogICB7IG5hbWU6ICdJdGVtIDInLCBwcmljZTogMjAwIH1cbiAqIF07XG4gKiBnZXQoaXRlbXMsICdbMF0ubmFtZScpOyAvLyAnSXRlbSAxJ1xuICogZ2V0KGl0ZW1zLCAnWzFdLm5hbWUnKTsgLy8gJ0l0ZW0gMidcbiAqIGdldChpdGVtcywgJ1syXS5uYW1lJywgJ05vdCBmb3VuZCcpOyAvLyAnTm90IGZvdW5kJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBT4butIGThu6VuZyB24bubaSBt4bqjbmcgcGF0aFxuICogY29uc3QgbmVzdGVkID0geyBhOiB7IGI6IHsgYzogJ2RlZXAgdmFsdWUnIH0gfSB9O1xuICogZ2V0KG5lc3RlZCwgWydhJywgJ2InLCAnYyddKTsgLy8gJ2RlZXAgdmFsdWUnXG4gKiBnZXQobmVzdGVkLCBbJ2EnLCAnYicsICdkJ10sICdkZWZhdWx0Jyk7IC8vICdkZWZhdWx0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUcsaw4budbmcgaOG7o3AgxJHhurdjIGJp4buHdFxuICogZ2V0KG51bGwsICdhbnkucGF0aCcpOyAvLyB1bmRlZmluZWRcbiAqIGdldCh1bmRlZmluZWQsICdhbnkucGF0aCcsICdmYWxsYmFjaycpOyAvLyAnZmFsbGJhY2snXG4gKi9cbmV4cG9ydCBjb25zdCBnZXQgPSA8TywgUCBleHRlbmRzIFBhdGhPZjxPPiA9IFBhdGhPZjxPPiwgS1MgZXh0ZW5kcyBib29sZWFuID0gZmFsc2UsIEQgZXh0ZW5kcyBHZXRWYWx1ZUF0UGF0aDxPLCBQLCBLUz4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuICBvYmo6IFNpZ25hbDxPPiB8IE8sXG4gIHBhdGg6IFAsXG4gIGRlZmF1bHRWYWx1ZT86IEQsXG4gIGtlZXBMYXN0VmFsdWVJZlNpZ25hbD86IEtTXG4pOiBHZXRSZXR1cm5UeXBlPE8sIFAsIEtTLCBEPiA9PiB7XG4gIC8vIGhlbHBlciBjYXN0IMSR4buDIHRyw6FuaCBs4bq3cCBs4bqhaSBraeG7g3UgxJFp4buBdSBraeG7h24g4bufIGPDoWMgcmV0dXJuXG4gIGNvbnN0IG91dCA9ICh2OiB1bmtub3duKSA9PiB2IGFzIEdldFJldHVyblR5cGU8TywgUCwgS1MsIEQ+O1xuXG4gIGlmIChpc05pbChvYmopKSB7XG4gICAgcmV0dXJuIG91dChkZWZhdWx0VmFsdWUpO1xuICB9XG4gIHdoaWxlIChpc1NpZ25hbChvYmopKSB7XG4gICAgb2JqID0gb2JqKCk7XG4gIH1cbiAgaWYgKHBhdGggPT09ICcnKSB7XG4gICAgcmV0dXJuIG91dChvYmopO1xuICB9XG4gIGlmIChvYmogaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgcmV0dXJuIG91dChvYmouZ2V0KGAke3BhdGh9YCkgPz8gZGVmYXVsdFZhbHVlKTtcbiAgfVxuICBpZiAob2JqIGluc3RhbmNlb2YgRE9NUmVjdCkge1xuICAgIHJldHVybiBvdXQob2JqW3BhdGggYXMga2V5b2YgRE9NUmVjdF0pO1xuICB9XG5cbiAgY29uc3QgcGF0aHMgPSBBcnJheS5pc0FycmF5KHBhdGgpXG4gICAgPyBwYXRoXG4gICAgOiAocGF0aCBhcyBzdHJpbmcpXG4gICAgICAgIC5yZXBsYWNlKC9cXFsoXFxkKyldL2csICcuJDEnKVxuICAgICAgICAuc3BsaXQoJy4nKVxuICAgICAgICAuZmlsdGVyKChrZXkpID0+IGtleSk7XG4gIGZvciAoY29uc3QgaW5kZXggaW4gcGF0aHMpIHtcbiAgICBjb25zdCBrZXkgPSBwYXRoc1tpbmRleF07XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIENTU1N0eWxlRGVjbGFyYXRpb24pIHtcbiAgICAgIG9iaiA9IG9ialtrZXkgYXMga2V5b2YgQ1NTU3R5bGVEZWNsYXJhdGlvbl0gYXMgTztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgb2JqID0gb2JqW2tleSBhcyBrZXlvZiBIVE1MRWxlbWVudF0gYXMgTztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoaXNOaWwob2JqKSB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgcmV0dXJuIG91dChkZWZhdWx0VmFsdWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbCA9IGlzU2lnbmFsKChvYmogYXMgYW55KVtrZXldKSAmJiAha2VlcExhc3RWYWx1ZUlmU2lnbmFsID8gKG9iaiBhcyBhbnkpW2tleV0oKSA6IChvYmogYXMgYW55KVtrZXldO1xuXG4gICAgb2JqID0gdmFsIGFzIE87XG4gIH1cblxuICByZXR1cm4gb3V0KG9iaiA/PyBkZWZhdWx0VmFsdWUpO1xufTtcblxuLyoqXG4gKiBUaGnhur90IGzhuq1wIGdpw6EgdHLhu4sgY2hvIG3hu5l0IHRodeG7mWMgdMOtbmggdHJvbmcgxJHhu5FpIHTGsOG7o25nIHRoZW8gxJHGsOG7nW5nIGThuqtuIGNo4buJIMSR4buLbmhcbiAqIEBwYXJhbSBvYmogxJDhu5FpIHTGsOG7o25nIGPhuqduIHRoaeG6v3QgbOG6rXAgZ2nDoSB0cuG7i1xuICogQHBhcmFtIHBhdGggxJDGsOG7nW5nIGThuqtuIMSR4bq/biB0aHXhu5ljIHTDrW5oLCBjw7MgdGjhu4MgbMOgIGNodeG7l2kgKHZkOiAnYS5iLmMnKSBob+G6t2MgbeG6o25nICh2ZDogWydhJywgJ2InLCAnYyddKVxuICogQHBhcmFtIHZhbHVlIEdpw6EgdHLhu4sgY+G6p24gdGhp4bq/dCBs4bqtcFxuICogQHJldHVybnMgxJDhu5FpIHTGsOG7o25nIHNhdSBraGkgxJHDoyB0aGnhur90IGzhuq1wIGdpw6EgdHLhu4tcbiAqIEB0aHJvd3MgRXJyb3IgbuG6v3UgdGhhbSBz4buRIMSR4bqndSB0acOqbiBraMO0bmcgcGjhuqNpIGzDoCDEkeG7kWkgdMaw4bujbmdcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBvYmogPSB7IGE6IHsgYjogMSB9IH07XG4gKiBzZXQob2JqLCAnYS5iJywgMik7IC8vIHsgYTogeyBiOiAyIH0gfVxuICovXG5leHBvcnQgY29uc3Qgc2V0ID0gPE8sIFAgZXh0ZW5kcyBQYXRoT2Y8Tz4gPSBQYXRoT2Y8Tz4sIFQgZXh0ZW5kcyBHZXRWYWx1ZUF0UGF0aDxPLCBQLCB0cnVlPiA9IEdldFZhbHVlQXRQYXRoPE8sIFAsIHRydWU+PihcbiAgb2JqOiBTaWduYWw8Tz4gfCBPLFxuICBwYXRoOiBQLFxuICB2YWx1ZTogVCxcbiAgb3B0aW9ucz86IHsgdmFsdWVEZWZhdWx0UGF0aE9iamVjdFVuZGVmaW5lZD86IGFueTsgdmFsdWVEZWZhdWx0UGF0aEFycmF5VW5kZWZpbmVkPzogYW55IH1cbik6IE8gPT4ge1xuICBpZiAoIW9iaiB8fCAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgJiYgIWlzU2lnbmFsKG9iaikpIHx8IChpc1NpZ25hbChvYmopICYmIHR5cGVvZiBvYmooKSAhPT0gJ29iamVjdCcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGlmIChvYmogaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgcmV0dXJuIG9iai5zZXQoYCR7cGF0aH1gLCB2YWx1ZSBhcyBzdHJpbmcpIGFzIE87XG4gIH1cblxuICBjb25zdCBwYXRoQXJyYXkgPSBBcnJheS5pc0FycmF5KHBhdGgpXG4gICAgPyBwYXRoXG4gICAgOiAocGF0aCBhcyBzdHJpbmcpXG4gICAgICAgIC5yZXBsYWNlKC9cXFsoXFxkKyldL2csICcuWyQxXScpXG4gICAgICAgIC5zcGxpdCgnLicpXG4gICAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5KTtcblxuICBsZXQgY3VycmVudE9iamVjdEJ5S2V5OiBhbnkgPSBpc1NpZ25hbChvYmopID8gb2JqKCkgOiBvYmo7XG4gIGxldCBwcmVPYmplY3RCeUtleSA9IG9iajtcblxuICBwYXRoQXJyYXkuZm9yRWFjaCgoa2V5LCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA8IHBhdGhBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICBpZiAoIShrZXkgaW4gY3VycmVudE9iamVjdEJ5S2V5KSB8fCAodHlwZW9mIGN1cnJlbnRPYmplY3RCeUtleVtrZXldICE9PSAnb2JqZWN0JyAmJiAhaXNTaWduYWwoY3VycmVudE9iamVjdEJ5S2V5W2tleV0pKSkge1xuICAgICAgICBjb25zdCBuZXh0S2V5ID0gcGF0aEFycmF5W2luZGV4ICsgMV07XG4gICAgICAgIGtleSA9IGtleS5yZXBsYWNlKC9cXFsoXFxkKyldL2csICckMScpO1xuICAgICAgICBpZiAoaXNOaWwoY3VycmVudE9iamVjdEJ5S2V5W2tleV0pKSB7XG4gICAgICAgICAgY3VycmVudE9iamVjdEJ5S2V5W2tleV0gPSAvXFxbKFxcZCspXS9nLnRlc3QobmV4dEtleSkgPyAob3B0aW9ucz8udmFsdWVEZWZhdWx0UGF0aEFycmF5VW5kZWZpbmVkID8/IFtdKSA6IChvcHRpb25zPy52YWx1ZURlZmF1bHRQYXRoT2JqZWN0VW5kZWZpbmVkID8/IHt9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3VycmVudE9iamVjdEJ5S2V5ID0ga2V5ID8gY3VycmVudE9iamVjdEJ5S2V5W2tleV0gOiBjdXJyZW50T2JqZWN0QnlLZXk7XG4gICAgICBwcmVPYmplY3RCeUtleSA9IGN1cnJlbnRPYmplY3RCeUtleTtcbiAgICAgIGN1cnJlbnRPYmplY3RCeUtleSA9IGlzU2lnbmFsKGN1cnJlbnRPYmplY3RCeUtleSkgPyBjdXJyZW50T2JqZWN0QnlLZXkoKSA6IGN1cnJlbnRPYmplY3RCeUtleTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN1cnJlbnRPYmplY3RCeUtleSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHw6FuIGdpw6EgdHLhu4sg4bufIGN14buRaSDEkcaw4budbmcgZOG6q25cbiAgICBrZXkgPSBrZXkucmVwbGFjZSgvXFxbKFxcZCspXS9nLCAnJDEnKTtcbiAgICBjb25zdCB2YWx1ZU9mS2V5ID0gY3VycmVudE9iamVjdEJ5S2V5W2tleV07XG4gICAgY29uc3QgdmFsdWVPZktleUlzU2lnbmFsID0gaXNTaWduYWwodmFsdWVPZktleSk7XG5cbiAgICBpZiAodmFsdWVPZktleUlzU2lnbmFsICYmICh0eXBlb2YgdmFsdWVPZktleSgpICE9PSAnb2JqZWN0JyB8fCB2YWx1ZU9mS2V5KCkgPT09IG51bGwpKSB7XG4gICAgICAodmFsdWVPZktleSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+KS5zZXQoaXNTaWduYWwodmFsdWUpID8gdmFsdWUoKSA6IHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzU2lnbmFsKHByZU9iamVjdEJ5S2V5KSkge1xuICAgICAgKHByZU9iamVjdEJ5S2V5IGFzIFdyaXRhYmxlU2lnbmFsPGFueT4pLnVwZGF0ZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGFPZktleSA9IGRhdGFba2V5XTtcbiAgICAgICAgaWYgKGlzTmlsKGRhdGFPZktleSkgfHwgIXZhbHVlT2ZLZXlJc1NpZ25hbCkge1xuICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlT2ZLZXlJc1NpZ25hbCkge1xuICAgICAgICAgICh2YWx1ZU9mS2V5IGFzIFdyaXRhYmxlU2lnbmFsPGFueT4pLnNldChpc1NpZ25hbCh2YWx1ZSkgPyB2YWx1ZSgpIDogdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm4gWy4uLmRhdGFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLmRhdGEgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodmFsdWVPZktleUlzU2lnbmFsKSB7XG4gICAgICAodmFsdWVPZktleSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+KS5zZXQoaXNTaWduYWwodmFsdWUpID8gdmFsdWUoKSA6IHZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3VycmVudE9iamVjdEJ5S2V5W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIG9iaiBhcyBPO1xufTtcblxuLyoqXG4gKiBU4bqhbyBt4buZdCBi4bqjbiBzYW8gc8OidSBj4bunYSBt4buZdCDEkeG7kWkgdMaw4bujbmcgaG/hurdjIGdpw6EgdHLhu4sgYuG6pXQga+G7s1xuICogQHBhcmFtIGRhdGEgROG7ryBsaeG7h3UgY+G6p24gc2FvIGNow6lwXG4gKiBAcGFyYW0gb3B0aW9ucyBUw7l5IGNo4buNbiBj4bqldSBow6xuaFxuICogQHBhcmFtIG9wdGlvbnMuaWdub3JlU2lnbmFsIE7hur91IHRydWUsIHPhur0ga2jDtG5nIHNhbyBjaMOpcCBjw6FjIHNpZ25hbCBtw6AgdHLhuqMgduG7gSBzaWduYWwgZ+G7kWNcbiAqIEBwYXJhbSBzZWVuIFdlYWtNYXAgxJHhu4MgdGhlbyBkw7VpIGPDoWMgdGhhbSBjaGnhur91IMSRw6MgxJHGsOG7o2Mgc2FvIGNow6lwLCB0csOhbmggbOG6t3AgdsO0IGjhuqFuIHbhu5tpIGPDoWMgdGhhbSBjaGnhur91IHbDsm5nXG4gKiBAcmV0dXJucyBC4bqjbiBzYW8gc8OidSBj4bunYSBk4buvIGxp4buHdSDEkeG6p3UgdsOgb1xuICogQGV4YW1wbGVcbiAqIGNvbnN0IG9iaiA9IHtcbiAqICAgYTogMSxcbiAqICAgYjogeyBjOiAyIH0sXG4gKiAgIGQ6IFsxLCAyLCAzXVxuICogfTtcbiAqIGNvbnN0IGNsb25lID0gY2xvbmVEZWVwKG9iaik7XG4gKiAvLyBjbG9uZSBsw6AgbeG7mXQgYuG6o24gc2FvIGhvw6BuIHRvw6BuIMSR4buZYyBs4bqtcCBj4bunYSBvYmpcbiAqL1xuZXhwb3J0IGNvbnN0IGNsb25lRGVlcCA9IDxUID0gYW55PihkYXRhOiBhbnksIG9wdGlvbnMgPSB7IGlnbm9yZVNpZ25hbDogZmFsc2UgfSwgc2VlbiA9IG5ldyBXZWFrTWFwKCkpOiBUID0+IHtcbiAgaWYgKGRhdGEgPT09IG51bGwgfHwgKHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyAmJiAhaXNTaWduYWwoZGF0YSkpIHx8IGlzRGFuZ2Vyb3VzT2JqZWN0KGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBpZiAoc2Vlbi5oYXMoZGF0YSkpIHtcbiAgICByZXR1cm4gc2Vlbi5nZXQoZGF0YSk7XG4gIH1cblxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIEh0dHBQYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3QodW5kZWZpbmVkLCBkYXRhKSBhcyBUO1xuICB9XG5cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGEuZ2V0VGltZSgpKSBhcyBUO1xuICB9XG5cbiAgaWYgKGRheWpzLmlzRGF5anMoZGF0YSkpIHtcbiAgICByZXR1cm4gZ2V0RGF5anMoeyBkYXRlOiBkYXRhLnZhbHVlT2YoKSB9KSBhcyBUO1xuICB9XG5cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChkYXRhLnNvdXJjZSwgZGF0YS5mbGFncykgYXMgVDtcbiAgfVxuXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgY29uc3QgbWFwQ29weSA9IG5ldyBNYXAoKTtcbiAgICBzZWVuLnNldChkYXRhLCBtYXBDb3B5KTtcbiAgICBkYXRhLmZvckVhY2goKHZhbCwga2V5KSA9PiB7XG4gICAgICBtYXBDb3B5LnNldChjbG9uZURlZXAoa2V5LCBvcHRpb25zLCBzZWVuKSwgY2xvbmVEZWVwKHZhbCwgb3B0aW9ucywgc2VlbikpO1xuICAgIH0pO1xuICAgIHJldHVybiBtYXBDb3B5IGFzIFQ7XG4gIH1cblxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIFNldCkge1xuICAgIGNvbnN0IHNldENvcHkgPSBuZXcgU2V0KCk7XG4gICAgc2Vlbi5zZXQoZGF0YSwgc2V0Q29weSk7XG4gICAgZGF0YS5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgIHNldENvcHkuYWRkKGNsb25lRGVlcCh2YWwsIG9wdGlvbnMsIHNlZW4pKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2V0Q29weSBhcyBUO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICBzZWVuLnNldChkYXRhLCBkYXRhLm1hcCgoaXRlbSkgPT4gY2xvbmVEZWVwKGl0ZW0sIG9wdGlvbnMsIHNlZW4pKSBhcyBUKTtcbiAgICByZXR1cm4gc2Vlbi5nZXQoZGF0YSkgYXMgVDtcbiAgfVxuXG4gIGlmIChpc1JldHVybkFzSXNPYmplY3QoZGF0YSkpIHtcbiAgICByZXR1cm4gZGF0YSBhcyBUO1xuICB9XG5cbiAgaWYgKGlzU2lnbmFsKGRhdGEpKSB7XG4gICAgaWYgKG9wdGlvbnM/Lmlnbm9yZVNpZ25hbCkge1xuICAgICAgcmV0dXJuIGRhdGEgYXMgVDtcbiAgICB9XG4gICAgc2Vlbi5zZXQoZGF0YSwgc2lnbmFsKGNsb25lRGVlcChkYXRhKCksIG9wdGlvbnMsIHNlZW4pKSk7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpIGFzIFQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgc2Vlbi5zZXQoZGF0YSwgcmVzdWx0KTtcbiAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgIGNvbnN0IHZhbHVlID0gZGF0YVtrZXldO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEh0dHBQYXJhbXMpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbmV3IFV0aWxzSHR0cFBhcmFtc1JlcXVlc3QodW5kZWZpbmVkLCB2YWx1ZSkgYXMgVDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbmV3IERhdGUodmFsdWUuZ2V0VGltZSgpKSBhcyBUO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGRheWpzLmlzRGF5anModmFsdWUpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IGdldERheWpzKHsgZGF0ZTogdmFsdWUudmFsdWVPZigpIH0pIGFzIFQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbmV3IFJlZ0V4cCh2YWx1ZS5zb3VyY2UsIHZhbHVlLmZsYWdzKSBhcyBUO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChpc1JldHVybkFzSXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gY2xvbmVEZWVwKHZhbHVlLCBvcHRpb25zLCBzZWVuKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIFQ7XG59O1xuXG4vKipcbiAqIENodXnhu4NuIMSR4buVaSBt4buZdCBt4bqjbmcgY8OhYyDEkeG7kWkgdMaw4bujbmcgdGjDoG5oIG3hu5l0IMSR4buRaSB0xrDhu6NuZyB24bubaSBraMOzYSDEkcaw4bujYyBjaOG7iSDEkeG7i25oXG4gKiBAcGFyYW0gZGF0YSBN4bqjbmcgY8OhYyDEkeG7kWkgdMaw4bujbmcgY+G6p24gY2h1eeG7g24gxJHhu5VpXG4gKiBAcGFyYW0ga2V5IFTDqm4gdGh14buZYyB0w61uaCDEkcaw4bujYyBz4butIGThu6VuZyBsw6BtIGtow7NhIHRyb25nIMSR4buRaSB0xrDhu6NuZyBr4bq/dCBxdeG6o1xuICogQHJldHVybnMgxJDhu5FpIHTGsOG7o25nIHbhu5tpIGPDoWMgZ2nDoSB0cuG7iyB04burIG3huqNuZyDEkcaw4bujYyDEkcOhbmgga2V5IHRoZW8gdGh14buZYyB0w61uaCDEkcOjIGNo4buJIMSR4buLbmhcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBkYXRhID0gW1xuICogICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfSxcbiAqICAgeyBpZDogMiwgbmFtZTogJ0phbmUnIH1cbiAqIF07XG4gKiBrZXlCeShkYXRhLCAnaWQnKTtcbiAqIC8vIEvhur90IHF14bqjOiB7XG4gKiAvLyAgICcxJzogeyBpZDogMSwgbmFtZTogJ0pvaG4nIH0sXG4gKiAvLyAgICcyJzogeyBpZDogMiwgbmFtZTogJ0phbmUnIH1cbiAqIC8vIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGtleUJ5ID0gKGRhdGE6IEFycmF5PFRZUEVfT0JKRUNUPiwga2V5OiBzdHJpbmcpOiBUWVBFX09CSkVDVCA9PiB7XG4gIGlmICghZGF0YSB8fCAhZGF0YS5sZW5ndGggfHwgIWtleSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICByZXR1cm4gZGF0YS5yZWR1Y2UoKGRpciwgbmV4dEl0ZW0pID0+IHtcbiAgICBjb25zdCB2YWx1ZU9mS2V5ID0gZ2V0KG5leHRJdGVtLCBrZXkgYXMgUGF0aE9mPFRZUEVfT0JKRUNUPik7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZU9mS2V5ICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWVPZktleSAhPT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlT2ZLZXkgIT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGRpcjtcbiAgICB9XG4gICAgaWYgKCFPYmplY3Qua2V5cyhkaXIpLmluY2x1ZGVzKGAke3ZhbHVlT2ZLZXl9YCkpIHtcbiAgICAgIGRpcltgJHt2YWx1ZU9mS2V5fWBdID0gbmV4dEl0ZW07XG4gICAgfVxuICAgIHJldHVybiBkaXI7XG4gIH0sIHt9KTtcbn07XG5cbi8qKlxuICogTmjDs20gY8OhYyDEkeG7kWkgdMaw4bujbmcgdHJvbmcgbeG7mXQgbeG6o25nIHRow6BuaCBjw6FjIG5ow7NtIGThu7FhIHRyw6puIG3hu5l0IHRodeG7mWMgdMOtbmggY+G7pSB0aOG7g1xuICogQHBhcmFtIGRhdGEgTeG6o25nIGPDoWMgxJHhu5FpIHTGsOG7o25nIGPhuqduIG5ow7NtXG4gKiBAcGFyYW0ga2V5IFTDqm4gdGh14buZYyB0w61uaCDEkcaw4bujYyBz4butIGThu6VuZyBsw6BtIGtow7NhIG5ow7NtXG4gKiBAcmV0dXJucyDEkOG7kWkgdMaw4bujbmcgduG7m2kgY8OhYyBnacOhIHRy4buLIHThu6sgbeG6o25nIMSRxrDhu6NjIG5ow7NtIHRoZW8gdGh14buZYyB0w61uaCDEkcOjIGNo4buJIMSR4buLbmhcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBkYXRhID0gW1xuICogICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfSxcbiAqICAgeyBpZDogMiwgbmFtZTogJ0phbmUnIH0sXG4gKiAgIHsgaWQ6IDEsIG5hbWU6ICdKb2huJyB9XG4gKiBdO1xuICogZ3JvdXBCeShkYXRhLCAnaWQnKTtcbiAqIC8vIEvhur90IHF14bqjOiB7XG4gKiAvLyAgICcxJzogW1xuICogLy8gICAgIHsgaWQ6IDEsIG5hbWU6ICdKb2huJyB9LFxuICogLy8gICAgIHsgaWQ6IDEsIG5hbWU6ICdKb2huJyB9XG4gKiAvLyAgIF0sXG4gKiAvLyAgICcyJzogW1xuICogLy8gICAgIHsgaWQ6IDIsIG5hbWU6ICdKYW5lJyB9XG4gKiAvLyB9XG4gKi9cbmV4cG9ydCBjb25zdCBncm91cEJ5ID0gKGRhdGE6IEFycmF5PFRZUEVfT0JKRUNUPiwga2V5OiBzdHJpbmcpOiBUWVBFX09CSkVDVCA9PiB7XG4gIGlmICghZGF0YSB8fCAhZGF0YS5sZW5ndGggfHwgIU9iamVjdC5rZXlzKGdldChkYXRhLCAnWzBdJykpLmxlbmd0aCB8fCAha2V5KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHJldHVybiBkYXRhLnJlZHVjZSgoZGlyLCBuZXh0SXRlbSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlT2ZLZXkgPSBnZXQobmV4dEl0ZW0sIGtleSBhcyBQYXRoT2Y8VFlQRV9PQkpFQ1Q+KTtcbiAgICBpZiAodHlwZW9mIHZhbHVlT2ZLZXkgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZU9mS2V5ICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsdWVPZktleSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGlyO1xuICAgIH1cbiAgICBpZiAoIU9iamVjdC5rZXlzKGRpcikuaW5jbHVkZXMoYCR7dmFsdWVPZktleX1gKSkge1xuICAgICAgZGlyW2Ake3ZhbHVlT2ZLZXl9YF0gPSBbXTtcbiAgICB9XG4gICAgZGlyW2Ake3ZhbHVlT2ZLZXl9YF0ucHVzaChuZXh0SXRlbSk7XG4gICAgcmV0dXJuIGRpcjtcbiAgfSwge30pO1xufTtcblxuLyoqXG4gKiBU4bqhbyBt4buZdCBt4bqjbmcgY8OhYyBz4buRIHThu6sgZ2nDoSB0cuG7iyBi4bqvdCDEkeG6p3UgxJHhur9uIGdpw6EgdHLhu4sga+G6v3QgdGjDumMgduG7m2kgYsaw4bubYyBuaOG6o3kgdMO5eSBjaOG7jW5cbiAqIEBwYXJhbSBzdGFydCBHacOhIHRy4buLIGLhuq90IMSR4bqndSBj4bunYSBkw6N5IHPhu5EuIE7hur91IGNo4buJIGPDsyBt4buZdCB0aGFtIHPhu5EsIMSRw6J5IHPhur0gbMOgIGdpw6EgdHLhu4sga+G6v3QgdGjDumMgdsOgIGdpw6EgdHLhu4sgYuG6r3QgxJHhuqd1IHPhur0gbMOgIDBcbiAqIEBwYXJhbSBlbmQgR2nDoSB0cuG7iyBr4bq/dCB0aMO6YyBj4bunYSBkw6N5IHPhu5EgKHTDuXkgY2jhu41uKVxuICogQHBhcmFtIHN0ZXAgQsaw4bubYyBuaOG6o3kgZ2nhu69hIGPDoWMgc+G7kSB0cm9uZyBkw6N5ICh0w7l5IGNo4buNbikuIE3hurdjIMSR4buLbmggbMOgIDEgbuG6v3UgZW5kID4gc3RhcnQsIC0xIG7hur91IGVuZCA8IHN0YXJ0XG4gKiBAcmV0dXJucyBN4bqjbmcgY8OhYyBz4buRIHThu6sgc3RhcnQgxJHhur9uIGVuZCB24bubaSBixrDhu5tjIG5o4bqjeSBzdGVwXG4gKiBAZXhhbXBsZVxuICogcmFuZ2UoNCk7ICAgICAgLy8gWzAsIDEsIDIsIDNdXG4gKiByYW5nZSgxLCA1KTsgICAvLyBbMSwgMiwgMywgNF1cbiAqIHJhbmdlKDAsIDIwLCA1KTsgLy8gWzAsIDUsIDEwLCAxNV1cbiAqIHJhbmdlKDUsIDIpOyAgIC8vIFs1LCA0LCAzXVxuICovXG5leHBvcnQgY29uc3QgcmFuZ2UgPSAoc3RhcnQ6IG51bWJlciwgZW5kPzogbnVtYmVyLCBzdGVwPzogbnVtYmVyKTogQXJyYXk8bnVtYmVyPiA9PiB7XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPT09IG51bGwpIHtcbiAgICBlbmQgPSBzdGFydDtcbiAgICBzdGFydCA9IDA7XG4gIH1cblxuICBpZiAoIXN0ZXApIHtcbiAgICBzdGVwID0gZW5kIDwgMCA/IC0xIDogMTtcbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCAmJiBzdGVwID4gMCkge1xuICAgIHN0ZXAgKj0gLTE7XG4gIH1cblxuICBjb25zdCB2YWx1ZVN0YXJ0QnlTdGVwID0gc3RlcCArIHN0YXJ0O1xuICBjb25zdCBkaXJlY3Rpb24gPSBzdGFydCA8IGVuZCA/ICdhc2MnIDogJ2Rlc2MnO1xuICBpZiAoKGRpcmVjdGlvbiA9PT0gJ2FzYycgJiYgKHZhbHVlU3RhcnRCeVN0ZXAgPCBzdGFydCB8fCB2YWx1ZVN0YXJ0QnlTdGVwID4gZW5kKSkgfHwgKGRpcmVjdGlvbiA9PT0gJ2Rlc2MnICYmICh2YWx1ZVN0YXJ0QnlTdGVwID4gc3RhcnQgfHwgdmFsdWVTdGFydEJ5U3RlcCA8IGVuZCkpKSB7XG4gICAgcmV0dXJuIFtzdGFydF07XG4gIH1cblxuICBjb25zdCBhcnIgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBNYXRoLmFicyhlbmQgLSBzdGFydCk7IGluZGV4KyspIHtcbiAgICBsZXQgdmFsdWUgPSBzdGFydCArIGluZGV4ICogc3RlcDtcbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgIHZhbHVlID0gc3RhcnQ7XG4gICAgfVxuXG4gICAgaWYgKChkaXJlY3Rpb24gPT09ICdhc2MnICYmICh2YWx1ZSA8IHN0YXJ0IHx8IHZhbHVlID4gZW5kKSkgfHwgKGRpcmVjdGlvbiA9PT0gJ2Rlc2MnICYmICh2YWx1ZSA+IHN0YXJ0IHx8IHZhbHVlIDwgZW5kKSkpIHtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuXG4gICAgYXJyLnB1c2godmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qKlxuICogU28gc8OhbmggaGFpIGdpw6EgdHLhu4sgYuG6pXQga+G7syBjw7MgYuG6sW5nIG5oYXUgaGF5IGtow7RuZ1xuICogQHBhcmFtIHZhbHVlMSBHacOhIHRy4buLIHRo4bupIG5o4bqldCBj4bqnbiBzbyBzw6FuaFxuICogQHBhcmFtIHZhbHVlMiBHacOhIHRy4buLIHRo4bupIGhhaSBj4bqnbiBzbyBzw6FuaFxuICogQHBhcmFtIGV4YWN0bHlQb3NpdGlvbiBDw7Mgc28gc8OhbmggY2jDrW5oIHjDoWMgduG7iyB0csOtIGPDoWMgcGjhuqduIHThu60gdHJvbmcgbeG6o25nIGhheSBraMO0bmdcbiAqIEByZXR1cm5zIHRydWUgbuG6v3UgaGFpIGdpw6EgdHLhu4sgYuG6sW5nIG5oYXUsIGZhbHNlIG7hur91IGtow7RuZyBi4bqxbmcgbmhhdVxuICogQGV4YW1wbGVcbiAqIGlzRXF1YWwoWzEsMiwzXSwgWzEsMiwzXSk7IC8vIHRydWVcbiAqIGlzRXF1YWwoWzEsMiwzXSwgWzMsMiwxXSk7IC8vIHRydWUga2hpIGV4YWN0bHlQb3NpdGlvbiA9IGZhbHNlXG4gKiBpc0VxdWFsKFsxLDIsM10sIFszLDIsMV0pOyAvLyBmYWxzZSBraGkgZXhhY3RseVBvc2l0aW9uID0gdHJ1ZVxuICogaXNFcXVhbCh7YToxfSwge2E6MX0pOyAvLyB0cnVlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0VxdWFsID0gKFxuICB2YWx1ZTE6IGFueSxcbiAgdmFsdWUyOiBhbnksXG4gIG9wdGlvbnM/OiB7XG4gICAgZXhhY3RseVBvc2l0aW9uPzogYm9vbGVhbjtcbiAgICBpZ25vcmVFeGFjdGx5RGF0YVR5cGU/OiBib29sZWFuO1xuICAgIGlnbm9yZVVuV3JhcFNpZ25hbD86IGJvb2xlYW47XG4gIH1cbik6IGJvb2xlYW4gPT4ge1xuICAvLyBIYW5kbGUgc2lnbmFsc1xuICBpZiAoIW9wdGlvbnM/Lmlnbm9yZVVuV3JhcFNpZ25hbCkge1xuICAgIHZhbHVlMSA9IGNvbnZlcnRTaWduYWxUb09iamVjdCh2YWx1ZTEpO1xuICAgIHZhbHVlMiA9IGNvbnZlcnRTaWduYWxUb09iamVjdCh2YWx1ZTIpO1xuICB9XG4gIGNvbnN0IHsgZXhhY3RseVBvc2l0aW9uID0gZmFsc2UsIGlnbm9yZUV4YWN0bHlEYXRhVHlwZSA9IGZhbHNlIH0gPSBvcHRpb25zIHx8IHt9O1xuXG4gIGlmICh2YWx1ZTEgPT09IHZhbHVlMiB8fCAodmFsdWUxID09PSBudWxsICYmIHZhbHVlMiA9PT0gbnVsbCkgfHwgKHZhbHVlMSA9PT0gdW5kZWZpbmVkICYmIHZhbHVlMiA9PT0gdW5kZWZpbmVkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlnbm9yZUV4YWN0bHlEYXRhVHlwZSkge1xuICAgIHJldHVybiBpc0VxdWFsKGlzTmlsKHZhbHVlMSkgPyB1bmRlZmluZWQgOiBgJHt2YWx1ZTF9YCwgaXNOaWwodmFsdWUyKSA/IHVuZGVmaW5lZCA6IGAke3ZhbHVlMn1gKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUxICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUyICE9PSAnb2JqZWN0JyB8fCAoQXJyYXkuaXNBcnJheSh2YWx1ZTEpICYmICFBcnJheS5pc0FycmF5KHZhbHVlMikpIHx8ICghQXJyYXkuaXNBcnJheSh2YWx1ZTEpICYmIEFycmF5LmlzQXJyYXkodmFsdWUyKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTEpKSB7XG4gICAgaWYgKHZhbHVlMS5sZW5ndGggIT09IHZhbHVlMi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFleGFjdGx5UG9zaXRpb24pIHtcbiAgICAgIHJldHVybiAhdmFsdWUxLnNvbWUoKGl0ZW0pID0+ICF2YWx1ZTIuaW5jbHVkZXMoaXRlbSkpO1xuICAgIH1cblxuICAgIHJldHVybiAhdmFsdWUxLnNvbWUoKGl0ZW0sIGluZGV4KSA9PiAhaXNFcXVhbChpdGVtLCB2YWx1ZTJbaW5kZXhdLCBvcHRpb25zKSk7XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXModmFsdWUxKS5sZW5ndGggIT09IE9iamVjdC5rZXlzKHZhbHVlMikubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAhT2JqZWN0LmtleXModmFsdWUxKS5zb21lKChrZXkpID0+ICFpc0VxdWFsKHZhbHVlMVtrZXldLCB2YWx1ZTJba2V5XSwgb3B0aW9ucykpO1xufTtcblxuLyoqXG4gKiBMb+G6oWkgYuG7jyBjw6FjIHBo4bqnbiB04butIHRyw7luZyBs4bq3cCB0cm9uZyBt4bqjbmcgZOG7sWEgdHLDqm4gbeG7mXQgdGh14buZYyB0w61uaCBjaOG7iSDEkeG7i25oXG4gKiBAcGFyYW0gZGF0YSBN4bqjbmcgZOG7ryBsaeG7h3UgY+G6p24geOG7rSBsw71cbiAqIEBwYXJhbSBrZXkgVMOqbiB0aHXhu5ljIHTDrW5oIGTDuW5nIMSR4buDIHNvIHPDoW5oIHRyw7luZyBs4bq3cC4gTuG6v3Uga2jDtG5nIGPDsyBrZXkgdGjDrCBzbyBzw6FuaCB0cuG7sWMgdGnhur9wIGdpw6EgdHLhu4tcbiAqIEByZXR1cm5zIE3huqNuZyBt4bubaSBjaOG7qWEgY8OhYyBwaOG6p24gdOG7rSBraMO0bmcgdHLDuW5nIGzhurdwXG4gKiBAZXhhbXBsZVxuICogY29uc3QgYXJyID0gW1xuICogICB7IGlkOiAxLCBuYW1lOiAnQScgfSxcbiAqICAgeyBpZDogMiwgbmFtZTogJ0InIH0sXG4gKiAgIHsgaWQ6IDEsIG5hbWU6ICdDJyB9XG4gKiBdO1xuICogdW5pcUJ5KGFyciwgJ2lkJyk7IC8vIFt7IGlkOiAxLCBuYW1lOiAnQScgfSwgeyBpZDogMiwgbmFtZTogJ0InIH1dXG4gKlxuICogY29uc3QgbnVtYmVycyA9IFsxLCAyLCAyLCAzLCAzXTtcbiAqIHVuaXFCeShudW1iZXJzKTsgLy8gWzEsIDIsIDNdXG4gKlxuICogY29uc3QgbnVtYmVyc1NpZ25hbCA9IFtzaWduYWwoMSksIHNpZ25hbCgyKSwgc2lnbmFsKDMpLCBzaWduYWwoMiksIHNpZ25hbCg1KSwgc2lnbmFsKDQpLCBzaWduYWwoMSksIHNpZ25hbCg2KSwgc2lnbmFsKDcpLCBzaWduYWwoNildO1xuICogdW5pcUJ5KG51bWJlcnNTaWduYWwpOyAvLyBbc2lnbmFsKDEpLCBzaWduYWwoMiksIHNpZ25hbCgzKSwgc2lnbmFsKDUpLCBzaWduYWwoNCksIHNpZ25hbCg2KSwgc2lnbmFsKDcpXVxuICovXG5leHBvcnQgY29uc3QgdW5pcUJ5ID0gPFQ+KGRhdGE6IEFycmF5PFQ+LCBrZXk/OiBzdHJpbmcpOiBBcnJheTxUPiA9PiB7XG4gIGlmICgha2V5IHx8ICFkYXRhPy5sZW5ndGggfHwgdHlwZW9mIGdldChkYXRhLCAnWzBdJykgIT09ICdvYmplY3QnKSB7XG4gICAgLy8gWOG7rSBsw70gbeG6o25nIGNo4bupYSBzaWduYWwgdmFsdWVzXG4gICAgaWYgKGRhdGFbMF0gJiYgaXNTaWduYWwoZGF0YVswXSkpIHtcbiAgICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYCR7Z2V0PGFueT4oaXRlbSwgJycpfWA7XG4gICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBY4butIGzDvSBt4bqjbmcgcHJpbWl0aXZlIHZhbHVlc1xuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoZGF0YSkpO1xuICB9XG5cbiAgY29uc3QgZGF0YVVuaXF1ZSA9IGtleUJ5KGRhdGEgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj4sIGtleSk7XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGRhdGFVbmlxdWUpLm1hcCgoa2V5KSA9PiBkYXRhVW5pcXVlW2tleV0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlSW50ZXJmYWNlID0gKG9iajogYW55LCBpbnRlcmZhY2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBnZW5lcmF0ZVR5cGUgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJ251bGwnO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gJ2Jvb2xlYW4nO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiAnYW55JztcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gJ0RhdGUnO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgcmV0dXJuICdSZWdFeHAnO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJ0FycmF5PGFueT4nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGBBcnJheTwke2dlbmVyYXRlVHlwZSh2YWx1ZVswXSl9PmA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBsZXQgaW50ZXJmYWNlU3RyID0gJ3tcXG4nO1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IGdlbmVyYXRlVHlwZSh2YWx1ZVtrZXldKTtcbiAgICAgICAgICBpbnRlcmZhY2VTdHIgKz0gYCAgJHtrZXl9OiAke3ZhbHVlVHlwZX07XFxuYDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaW50ZXJmYWNlU3RyICs9ICd9JztcbiAgICAgIHJldHVybiBpbnRlcmZhY2VTdHI7XG4gICAgfVxuXG4gICAgcmV0dXJuICdhbnknO1xuICB9O1xuXG4gIGNvbnN0IGludGVyZmFjZVN0ciA9IGBpbnRlcmZhY2UgJHtpbnRlcmZhY2VOYW1lfSAke2dlbmVyYXRlVHlwZShvYmopfWA7XG4gIHJldHVybiBpbnRlcmZhY2VTdHI7XG59O1xuIl19
|
package/esm2022/http-params.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { HttpParams } from
|
|
2
|
+
import { HttpParams } from '@angular/common/http';
|
|
3
3
|
export const UtilsHttpParamsRequestInstance = (options, instance) => {
|
|
4
4
|
return new UtilsHttpParamsRequest(options, instance);
|
|
5
5
|
};
|
|
@@ -77,4 +77,4 @@ export class UtilsHttpParamsRequest extends HttpParams {
|
|
|
77
77
|
// "pathVariable-location": '12',
|
|
78
78
|
// "pathVariable-name": '124',
|
|
79
79
|
// };
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1wYXJhbXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9odHRwLXBhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFzQixVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV0RSxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxDQUFPLE9BQWlDLEVBQUUsUUFBcUIsRUFBZ0MsRUFBRTtJQUM3SSxPQUFPLElBQUksc0JBQXNCLENBQU8sT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQztBQUVGLE1BQU0sT0FBTyxzQkFBK0MsU0FBUSxVQUFVO0lBQ2xFLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBRXBDLFlBQVksT0FBaUMsRUFBRSxRQUFxQjtRQUNsRSxLQUFLLENBQUMsT0FBYyxDQUFDLENBQUM7UUFFdEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV0QyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksUUFBUSxZQUFZLHNCQUFzQixFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFckMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLFFBQVEsWUFBWSxVQUFVLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztZQUV2QixPQUFPO1FBQ1QsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBb0I7UUFDOUIsSUFBSSxRQUFRLFlBQVksc0JBQXNCLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUVyQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksUUFBUSxZQUFZLFVBQVUsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1lBRXZCLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUVRLEdBQUcsQ0FBQyxLQUFhLEVBQUUsS0FBZ0M7UUFDMUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFNUMsT0FBTyxJQUE4QixDQUFDO0lBQ3hDLENBQUM7SUFFUSxHQUFHLENBQUMsS0FBYTtRQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFUSxHQUFHLENBQUMsS0FBYTtRQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFUSxNQUFNLENBQUMsS0FBYTtRQUMzQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFUSxJQUFJO1FBQ1gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFUSxNQUFNLENBQUMsS0FBYSxFQUFFLEtBQWdDO1FBQzdELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRS9DLE9BQU8sSUFBa0IsQ0FBQztJQUM1QixDQUFDO0lBRVEsU0FBUyxDQUFDLE1BQWlHO1FBQ2xILElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFNUMsT0FBTyxJQUFrQixDQUFDO0lBQzVCLENBQUM7SUFFUSxNQUFNLENBQUMsS0FBYSxFQUFFLEtBQWlDO1FBQzlELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRS9DLE9BQU8sSUFBOEIsQ0FBQztJQUN4QyxDQUFDO0lBRVEsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUFpQkQsaUNBQWlDO0FBRWpDLHFCQUFxQjtBQUNyQixrQkFBa0I7QUFDbEIsaUJBQWlCO0FBQ2pCLHNCQUFzQjtBQUN0QixJQUFJO0FBRUosK0NBQStDO0FBRS9DLGlCQUFpQjtBQUNqQiwyQkFBMkI7QUFDM0IsbUNBQW1DO0FBQ25DLGdDQUFnQztBQUNoQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgSHR0cFBhcmFtZXRlckNvZGVjLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5leHBvcnQgY29uc3QgVXRpbHNIdHRwUGFyYW1zUmVxdWVzdEluc3RhbmNlID0gPFR5cGU+KG9wdGlvbnM/OiBIdHRwUGFyYW1zT3B0aW9uczxUeXBlPiwgaW5zdGFuY2U/OiBIdHRwUGFyYW1zKTogVXRpbHNIdHRwUGFyYW1zUmVxdWVzdDxUeXBlPiA9PiB7XG4gIHJldHVybiBuZXcgVXRpbHNIdHRwUGFyYW1zUmVxdWVzdDxUeXBlPihvcHRpb25zLCBpbnN0YW5jZSk7XG59O1xuXG5leHBvcnQgY2xhc3MgVXRpbHNIdHRwUGFyYW1zUmVxdWVzdDxUeXBlID0geyBwZW06IHN0cmluZyB9PiBleHRlbmRzIEh0dHBQYXJhbXMge1xuICBwcm90ZWN0ZWQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogSHR0cFBhcmFtc09wdGlvbnM8VHlwZT4sIGluc3RhbmNlPzogSHR0cFBhcmFtcykge1xuICAgIHN1cGVyKG9wdGlvbnMgYXMgYW55KTtcblxuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgIHRoaXMucGFyYW1zID0gbmV3IEh0dHBQYXJhbXMob3B0aW9ucyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UgaW5zdGFuY2VvZiBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0KSB7XG4gICAgICB0aGlzLnBhcmFtcyA9IGluc3RhbmNlLmdldEluc3RhbmNlKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UgaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgICB0aGlzLnBhcmFtcyA9IGluc3RhbmNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgZ2V0SW5zdGFuY2UoKTogSHR0cFBhcmFtcyB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgc2V0SW5zdGFuY2UoaW5zdGFuY2U6IEh0dHBQYXJhbXMpIHtcbiAgICBpZiAoaW5zdGFuY2UgaW5zdGFuY2VvZiBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0KSB7XG4gICAgICB0aGlzLnBhcmFtcyA9IGluc3RhbmNlLmdldEluc3RhbmNlKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UgaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgICB0aGlzLnBhcmFtcyA9IGluc3RhbmNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgc2V0KHBhcmFtOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKTogVXRpbHNIdHRwUGFyYW1zUmVxdWVzdCB7XG4gICAgdGhpcy5wYXJhbXMgPSB0aGlzLnBhcmFtcy5zZXQocGFyYW0sIHZhbHVlKTtcblxuICAgIHJldHVybiB0aGlzIGFzIFV0aWxzSHR0cFBhcmFtc1JlcXVlc3Q7XG4gIH1cblxuICBvdmVycmlkZSBoYXMocGFyYW06IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBhcmFtcy5oYXMocGFyYW0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0KHBhcmFtOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXMuZ2V0KHBhcmFtKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldEFsbChwYXJhbTogc3RyaW5nKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXMuZ2V0QWxsKHBhcmFtKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGtleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnBhcmFtcy5rZXlzKCk7XG4gIH1cblxuICBvdmVycmlkZSBhcHBlbmQocGFyYW06IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4pOiBIdHRwUGFyYW1zIHtcbiAgICB0aGlzLnBhcmFtcyA9IHRoaXMucGFyYW1zLmFwcGVuZChwYXJhbSwgdmFsdWUpO1xuXG4gICAgcmV0dXJuIHRoaXMgYXMgSHR0cFBhcmFtcztcbiAgfVxuXG4gIG92ZXJyaWRlIGFwcGVuZEFsbChwYXJhbXM6IHsgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiB9KTogSHR0cFBhcmFtcyB7XG4gICAgdGhpcy5wYXJhbXMgPSB0aGlzLnBhcmFtcy5hcHBlbmRBbGwocGFyYW1zKTtcblxuICAgIHJldHVybiB0aGlzIGFzIEh0dHBQYXJhbXM7XG4gIH1cblxuICBvdmVycmlkZSBkZWxldGUocGFyYW06IHN0cmluZywgdmFsdWU/OiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKTogVXRpbHNIdHRwUGFyYW1zUmVxdWVzdCB7XG4gICAgdGhpcy5wYXJhbXMgPSB0aGlzLnBhcmFtcy5kZWxldGUocGFyYW0sIHZhbHVlKTtcblxuICAgIHJldHVybiB0aGlzIGFzIFV0aWxzSHR0cFBhcmFtc1JlcXVlc3Q7XG4gIH1cblxuICBvdmVycmlkZSB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBhcmFtcy50b1N0cmluZygpO1xuICB9XG59XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBIdHRwUGFyYW1zT3B0aW9uczxUeXBlPiB7XG4gIGZyb21TdHJpbmc/OiBzdHJpbmc7XG4gIGZyb21PYmplY3Q/OiBUWVBFX0ZST01fT0JKRUNUPFR5cGU+O1xuICBlbmNvZGVyPzogSHR0cFBhcmFtZXRlckNvZGVjO1xufVxuZXhwb3J0IHR5cGUgR0VUX1BBVEhfVkFSSUFCTEU8VHlwZVBhdGgsIFR5cGVPdGhlciA9IHVua25vd24+ID0ge1xuICBbUHJvcGVydHkgaW4ga2V5b2YgVHlwZVBhdGggYXMgYHBhdGhWYXJpYWJsZS0ke0xvd2VyY2FzZTxzdHJpbmcgJiBQcm9wZXJ0eT59YF06IFR5cGVQYXRoW1Byb3BlcnR5XTtcbn0gJiBUeXBlT3RoZXI7XG5cbnR5cGUgVFlQRV9GUk9NX09CSkVDVDxUeXBlPiA9IFR5cGUgZXh0ZW5kcyB1bmRlZmluZWQgfCBudWxsXG4gID8geyBwZW06IHN0cmluZyB9XG4gIDogeyBwZW0/OiBzdHJpbmcgfSAmIHtcbiAgICAgIFtQcm9wZXJ0eSBpbiBrZXlvZiBUeXBlXT86IFR5cGVbUHJvcGVydHldO1xuICAgIH07XG5cbi8vIERlbW8gc3UgZHVuZyBHRVRfUEFUSF9WQVJJQUJMRVxuXG4vLyBpbnRlcmZhY2UgUGVyc29uIHtcbi8vICAgbmFtZTogc3RyaW5nO1xuLy8gICBhZ2U6IG51bWJlcjtcbi8vICAgbG9jYXRpb246IHN0cmluZztcbi8vIH1cblxuLy8gdHlwZSBjID0gR0VUX1BBVEhfVkFSSUFCTEU8UGVyc29uLCB1bmtub3duPjtcblxuLy8gY29uc3QgYTogYyA9IHtcbi8vICAgXCJwYXRoVmFyaWFibGUtYWdlXCI6IDEsXG4vLyAgIFwicGF0aFZhcmlhYmxlLWxvY2F0aW9uXCI6ICcxMicsXG4vLyAgIFwicGF0aFZhcmlhYmxlLW5hbWVcIjogJzEyNCcsXG4vLyB9O1xuIl19
|