kwikid-forms 0.6.25 → 0.6.27
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/bundles/kwikid-forms.umd.js +56 -1
- package/bundles/kwikid-forms.umd.js.map +1 -1
- package/esm2015/lib/renderer/config-converter/config-converter.constants.js +9 -1
- package/esm2015/lib/renderer/config-converter/config-converter.js +10 -1
- package/esm2015/lib/renderer/form-view/definitions/form-view.fields.definition.js +2 -1
- package/esm2015/lib/renderer/form-view/form-view.component.js +2 -2
- package/esm2015/lib/renderer/form-view/helpers/form-view.fields.helper.js +39 -2
- package/fesm2015/kwikid-forms.js +57 -2
- package/fesm2015/kwikid-forms.js.map +1 -1
- package/lib/renderer/config-converter/config-converter.constants.d.ts +8 -0
- package/lib/renderer/form-view/definitions/form-view.fields.definition.d.ts +2 -1
- package/lib/renderer/form-view/helpers/form-view.fields.helper.d.ts +3 -1
- package/package.json +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TuiDay } from "@taiga-ui/cdk";
|
|
1
|
+
import { TuiDay, TuiTime } from "@taiga-ui/cdk";
|
|
2
2
|
import { checkObjectKeyExists, isNotEmptyValue, isEmptyValue, isObject } from "kwikid-toolkit";
|
|
3
3
|
import { EFieldType } from "../definitions/form-view.fields.definition";
|
|
4
4
|
export const getFormFieldByKey = (fields, key) => {
|
|
@@ -144,6 +144,22 @@ export const convertFormFieldTypeDateToKwikUIFormat = (date) => {
|
|
|
144
144
|
);
|
|
145
145
|
return tuiDay;
|
|
146
146
|
};
|
|
147
|
+
export const convertFormFieldTypeTimeToKwikUIFormat = (time) => {
|
|
148
|
+
const timeParts = time.split(/[.:]/);
|
|
149
|
+
let hours = 0, minutes = 0, seconds = 0, milliseconds = 0;
|
|
150
|
+
if (timeParts.length >= 2) {
|
|
151
|
+
hours = parseInt(timeParts[0]);
|
|
152
|
+
minutes = parseInt(timeParts[1]);
|
|
153
|
+
if (timeParts.length >= 3) {
|
|
154
|
+
seconds = parseInt(timeParts[2]);
|
|
155
|
+
if (timeParts.length === 4) {
|
|
156
|
+
milliseconds = parseInt(timeParts[3]);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
let tuiTime = new TuiTime(hours, minutes, seconds, milliseconds);
|
|
161
|
+
return tuiTime;
|
|
162
|
+
};
|
|
147
163
|
export const convertFormFieldTypeDateToStandardFormat = (date) => {
|
|
148
164
|
let formattedDate;
|
|
149
165
|
let year = date.year;
|
|
@@ -154,6 +170,19 @@ export const convertFormFieldTypeDateToStandardFormat = (date) => {
|
|
|
154
170
|
.padStart(2, "0")}-${year}`;
|
|
155
171
|
return formattedDate;
|
|
156
172
|
};
|
|
173
|
+
export const convertFormFieldTypeTimeToStandardFormat = (time) => {
|
|
174
|
+
let formattedDate;
|
|
175
|
+
let hour = time.hours;
|
|
176
|
+
let minutes = time.minutes;
|
|
177
|
+
let seconds = time.seconds;
|
|
178
|
+
let milliseconds = time.ms;
|
|
179
|
+
formattedDate = `${hour.toString().padStart(2, "0")}:${minutes
|
|
180
|
+
.toString()
|
|
181
|
+
.padStart(2, "0")}${seconds > 0 ? `:${seconds.toString().padStart(2, "0")}` : ""}${seconds > 0 && milliseconds > 0
|
|
182
|
+
? `:${milliseconds.toString().padStart(2, "0")}`
|
|
183
|
+
: ""}`;
|
|
184
|
+
return formattedDate;
|
|
185
|
+
};
|
|
157
186
|
export const convertFormFieldValueToStandardFormat = (field, value) => {
|
|
158
187
|
let convertedValue = value;
|
|
159
188
|
if (isNotEmptyValue(value)) {
|
|
@@ -163,6 +192,11 @@ export const convertFormFieldValueToStandardFormat = (field, value) => {
|
|
|
163
192
|
convertedValue = convertFormFieldTypeDateToStandardFormat(value);
|
|
164
193
|
}
|
|
165
194
|
break;
|
|
195
|
+
case EFieldType.TIME:
|
|
196
|
+
if (typeof value !== "string") {
|
|
197
|
+
convertedValue = convertFormFieldTypeTimeToStandardFormat(value);
|
|
198
|
+
}
|
|
199
|
+
break;
|
|
166
200
|
case EFieldType.RADIO:
|
|
167
201
|
convertedValue = value.label;
|
|
168
202
|
break;
|
|
@@ -239,6 +273,9 @@ export const convertFormFieldValueToKwikUIFormat = (field, value) => {
|
|
|
239
273
|
case EFieldType.DATE:
|
|
240
274
|
convertedValue = convertFormFieldTypeDateToKwikUIFormat(value);
|
|
241
275
|
break;
|
|
276
|
+
case EFieldType.TIME:
|
|
277
|
+
convertedValue = convertFormFieldTypeTimeToKwikUIFormat(value);
|
|
278
|
+
break;
|
|
242
279
|
case EFieldType.FILE:
|
|
243
280
|
convertedValue = value;
|
|
244
281
|
break;
|
|
@@ -307,4 +344,4 @@ export const convertFormFieldEmptyValueToKwikUIFormat = (field) => {
|
|
|
307
344
|
}
|
|
308
345
|
return value;
|
|
309
346
|
};
|
|
310
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmZpZWxkcy5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rd2lraWQtZm9ybXMvc3JjL2xpYi9yZW5kZXJlci9mb3JtLXZpZXcvaGVscGVycy9mb3JtLXZpZXcuZmllbGRzLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLFlBQVksRUFDWixRQUFRLEVBQ1QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsVUFBVSxFQUlYLE1BQU0sNENBQTRDLENBQUM7QUFFcEQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUFhLEVBQUUsR0FBVyxFQUFFLEVBQUU7SUFDOUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2xDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUU7WUFDckIsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLE1BQWEsRUFBRSxHQUFXLEVBQUUsRUFBRTtJQUNuRSxJQUFJLFVBQWtCLENBQUM7SUFFdkIsVUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtRQUN2QyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxLQUFVLEVBQUUsS0FB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UixLQUFLLFVBQVUsQ0FBQyxPQUFPO1lBQ3JCLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDWCxNQUFNO1FBQ1IsS0FBSyxVQUFVLENBQUMsTUFBTTtZQUNwQixLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ1gsTUFBTTtRQUNSLEtBQUssVUFBVSxDQUFDLE1BQU07WUFDcEIsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNiLE1BQU07UUFDUixLQUFLLFVBQVUsQ0FBQyxvQkFBb0I7WUFDbEMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNiLE1BQU07UUFDUjtZQUNFLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDWCxNQUFNO0tBQ1Q7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR1aURheSB9IGZyb20gXCJAdGFpZ2EtdWkvY2RrXCI7XG5pbXBvcnQge1xuICBjaGVja09iamVjdEtleUV4aXN0cyxcbiAgaXNOb3RFbXB0eVZhbHVlLFxuICBpc0VtcHR5VmFsdWUsXG4gIGlzT2JqZWN0XG59IGZyb20gXCJrd2lraWQtdG9vbGtpdFwiO1xuaW1wb3J0IHtcbiAgRUZpZWxkVHlwZSxcbiAgVEZpZWxkLFxuICBURmllbGRQaG9uZSxcbiAgVEZpZWxkVHlwZVxufSBmcm9tIFwiLi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmZpZWxkcy5kZWZpbml0aW9uXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRGb3JtRmllbGRCeUtleSA9IChmaWVsZHM6IGFueVtdLCBrZXk6IHN0cmluZykgPT4ge1xuICBjb25zdCBmaWVsZCA9IGZpZWxkcy5maW5kKChmaWVsZCkgPT4ge1xuICAgIGlmIChmaWVsZC5rZXkgPT09IGtleSkge1xuICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGZpZWxkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZvcm1GaWVsZEluZGV4QnlLZXkgPSAoZmllbGRzOiBhbnlbXSwga2V5OiBzdHJpbmcpID0+IHtcbiAgbGV0IGZpZWxkSW5kZXg6IG51bWJlcjtcblxuICBmaWVsZEluZGV4ID0gZmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgcmV0dXJuIGtleSA9PT0gXy5rZXk7XG4gIH0pO1xuXG4gIHJldHVybiBmaWVsZEluZGV4O1xufTtcblxuZXhwb3J0IGNvbnN0IGhpZ2hsaWdodEZvcm1GaWVsZEVycm9yID0gKGZpZWxkOiBhbnksIGVycm9yOiBhbnkpOiBhbnkgPT4ge1xuICBmaWVsZC5pbnZhbGlkID0gZXJyb3I7XG4gIGZpZWxkLmZvY3VzID0gZXJyb3I7XG5cbiAgcmV0dXJuIGZpZWxkO1xufTtcblxuZXhwb3J0IGNvbnN0IGFwcGVuZEh0bWxNZXNzYWdlID0gKFxuICBmaWVsZDogYW55LFxuICBtZXNzYWdlOiB7IG1lc3NhZ2U6IHN0cmluZyB9XG4pOiBhbnkgPT4ge1xuICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiaHRtbFwiKSkge1xuICAgIGlmIChpc05vdEVtcHR5VmFsdWUoZmllbGQuaHRtbCkpIHtcbiAgICAgIGNvbnN0IGh0bWwgPSBmaWVsZC5odG1sLnJlcGxhY2UoXCJ7e21lc3NhZ2V9fVwiLCBtZXNzYWdlLm1lc3NhZ2UpO1xuICAgICAgZmllbGQuaHRtbCA9IGh0bWw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpZWxkO1xufTtcblxuZXhwb3J0IGNvbnN0IGFwcGVuZEZvcm1GaWVsZE1lc3NhZ2UgPSAoXG4gIGZpZWxkOiBhbnksXG4gIG1lc3NhZ2U6IHsgdHlwZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfVxuKTogYW55ID0+IHtcbiAgY29uc3QgaGFzRHVwbGljYXRlTWVzc2FnZSA9IChcbiAgICBtZXNzYWdlczogeyB0eXBlOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9W10sXG4gICAgbWVzc2FnZTogeyB0eXBlOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9XG4gICkgPT4ge1xuICAgIHJldHVybiBtZXNzYWdlcy5zb21lKChmaWVsZE1lc3NhZ2U6IHsgdHlwZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgZmllbGRNZXNzYWdlLnR5cGUgPT09IG1lc3NhZ2UudHlwZSAmJlxuICAgICAgICBmaWVsZE1lc3NhZ2UubWVzc2FnZSA9PT0gbWVzc2FnZS5tZXNzYWdlXG4gICAgICApO1xuICAgIH0pO1xuICB9O1xuXG4gIGZpZWxkW1wibWVzc2FnZXNcIl0gPSBbXTtcblxuICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwibWVzc2FnZXNcIikpIHtcbiAgICBpZiAoIWhhc0R1cGxpY2F0ZU1lc3NhZ2UoZmllbGRbXCJtZXNzYWdlc1wiXSwgbWVzc2FnZSkpIHtcbiAgICAgIGZpZWxkW1wibWVzc2FnZXNcIl0ucHVzaCh7XG4gICAgICAgIHR5cGU6IG1lc3NhZ2UudHlwZSxcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZS5tZXNzYWdlXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZmllbGRbXCJtZXNzYWdlc1wiXSA9IFt7IHR5cGU6IG1lc3NhZ2UudHlwZSwgbWVzc2FnZTogbWVzc2FnZS5tZXNzYWdlIH1dO1xuICB9XG5cbiAgcmV0dXJuIGZpZWxkO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlckR1cGxpY2F0ZXNNZWRpYUZpbGVzID0gKGFycmF5OiBzdHJpbmdbXSk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgdW5pcXVlRmlsZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICByZXR1cm4gYXJyYXkuZmlsdGVyKChtZWRpYUZpbGUpID0+IHtcbiAgICBpZiAoIXVuaXF1ZUZpbGVzLmhhcyhtZWRpYUZpbGUpKSB7XG4gICAgICB1bmlxdWVGaWxlcy5hZGQobWVkaWFGaWxlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlckR1cGxpY2F0ZXNGaWxlcyA9IChhcnJheTogYW55W10pOiBhbnlbXSA9PiB7XG4gIGNvbnN0IHVuaXF1ZUZpbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHJldHVybiBhcnJheS5maWx0ZXIoKGZpbGUpID0+IHtcbiAgICBjb25zdCBmaWxlS2V5ID0gYCR7ZmlsZS5uYW1lfS0ke2ZpbGUuc2l6ZX1gO1xuICAgIGlmICghdW5pcXVlRmlsZXMuaGFzKGZpbGVLZXkpKSB7XG4gICAgICB1bmlxdWVGaWxlcy5hZGQoZmlsZUtleSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVGb3JtRmllbGRNZXNzYWdlID0gKFxuICBmaWVsZDogYW55LFxuICBtZXNzYWdlOiB7IHR5cGU6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH1cbik6IGFueSA9PiB7XG4gIGZpZWxkW1wibWVzc2FnZXNcIl0gPSBmaWVsZFtcIm1lc3NhZ2VzXCJdLmZpbHRlcihmdW5jdGlvbiAoZmllbGRNZXNzYWdlKSB7XG4gICAgcmV0dXJuIGZpZWxkTWVzc2FnZS50eXBlICE9PSBtZXNzYWdlLnR5cGU7XG4gIH0pO1xuXG4gIHJldHVybiBmaWVsZDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG93Rm9ybUZpZWxkRXJyb3IoXG4gIGZpZWxkczogYW55LFxuICBlcnJvcnM6IGFueSxcbiAga2V5OiBzdHJpbmcsXG4gIGVycm9yOiBib29sZWFuXG4pIHtcbiAgY29uc3QgZmllbGRJbmRleCA9IGZpZWxkcy5maW5kSW5kZXgoKGZpZWxkOiBhbnkpID0+IHtcbiAgICByZXR1cm4gZmllbGQua2V5ID09PSBrZXk7XG4gIH0pO1xuXG4gIGNvbnN0IHNldEVycm9yTWVzc2FnZXMgPSAoZmllbGQ6IGFueSwgZXJyb3JzOiBhbnkpID0+IHtcbiAgICBjb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZmllbGRMYWJlbDogc3RyaW5nLCBlcnJvclR5cGU6IHN0cmluZykgPT4ge1xuICAgICAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nID0gXCJcIjtcblxuICAgICAgc3dpdGNoIChlcnJvclR5cGUpIHtcbiAgICAgICAgY2FzZSBcInJlcXVpcmVkXCI6XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZmllbGRMYWJlbH0gaXMgcmVxdWlyZWQhYDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImVtYWlsXCI6XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZmllbGRMYWJlbH0gaGFzIHdyb25nIGVtYWlsIGZvcm1hdCFgO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibWluXCI6XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZmllbGRMYWJlbH0gaGFzIHdyb25nIHZhbHVlISBNaW5pbXVtIHZhbHVlOiAke2ZpZWxkLnZhbGlkYXRvcnMubWlufWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtaW5sZW5ndGhcIjpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgJHtmaWVsZExhYmVsfSBoYXMgd3JvbmcgbGVuZ3RoISBSZXF1aXJlZCBtaW5pbXVtIGxlbmd0aDogJHtmaWVsZC52YWxpZGF0b3JzLm1pbkxlbmd0aH1gO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZmllbGRMYWJlbH0gaGFzIHdyb25nIHZhbHVlISBNYXhpbXVtIHZhbHVlOiAke2ZpZWxkLnZhbGlkYXRvcnMubWF4TGVuZ3RofWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtYXhsZW5ndGhcIjpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgJHtmaWVsZExhYmVsfSBoYXMgd3JvbmcgbGVuZ3RoISBSZXF1aXJlZCBtYXhpbXVtIGxlbmd0aDogJHtmaWVsZC52YWxpZGF0b3JzLm1heExlbmd0aH1gO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYXJlRXF1YWxcIjpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgJHtmaWVsZExhYmVsfSBtdXN0IGJlIGVxdWFsIWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJwYXR0ZXJuXCI6XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZmllbGRMYWJlbH0gaXMgaW4gaW5jb3JyZWN0IGZvcm1hdCFgO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib25seVdoaXRlc3BhY2VzXCI6XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZmllbGRMYWJlbH0gY2FuJ3QgY29udGFpbiBvbmx5IGVtcHR5IHNwYWNlcyFgO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGAke2ZpZWxkTGFiZWx9OiAke2Vycm9yVHlwZX1gO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH07XG5cbiAgICBPYmplY3Qua2V5cyhlcnJvcnMpLmZvckVhY2goKGVycm9yKSA9PiB7XG4gICAgICBmaWVsZCA9IGFwcGVuZEZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIHtcbiAgICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgICBtZXNzYWdlOiBnZXRFcnJvck1lc3NhZ2UoZmllbGQubGFiZWwsIGVycm9yKVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmllbGQ7XG4gIH07XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgZmllbGRzW2ZpZWxkSW5kZXhdID0gc2V0RXJyb3JNZXNzYWdlcyhmaWVsZHNbZmllbGRJbmRleF0sIGVycm9ycyk7XG4gIH0gZWxzZSB7XG4gICAgZmllbGRzW2ZpZWxkSW5kZXhdW1wibWVzc2FnZXNcIl0gPSBbXTtcbiAgfVxuXG4gIGZpZWxkc1tmaWVsZEluZGV4XSA9IGhpZ2hsaWdodEZvcm1GaWVsZEVycm9yKGZpZWxkc1tmaWVsZEluZGV4XSwgZXJyb3IpO1xuXG4gIHJldHVybiBmaWVsZHM7XG59XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0Rm9ybUZpZWxkVHlwZURhdGVUb0t3aWtVSUZvcm1hdCA9IChcbiAgZGF0ZTogc3RyaW5nXG4pOiBUdWlEYXkgPT4ge1xuICBjb25zdCBzcGxpdERhdGUgPSBkYXRlLnNwbGl0KFwiLVwiKTtcbiAgY29uc3QgdHVpRGF5ID0gbmV3IFR1aURheShcbiAgICBOdW1iZXIoc3BsaXREYXRlWzJdKSwgLy8gWWVhclxuICAgIE51bWJlcihzcGxpdERhdGVbMV0pIC0gMSwgLy8gTW9udGgsIFdoeSAnLTEnID0+IEJlY2F1c2UgVGFpZ2EtVUkgUmVxdWlyZWQgSXQsIFNvLi4uXG4gICAgTnVtYmVyKHNwbGl0RGF0ZVswXSkgLy8gRGF5XG4gICk7XG5cbiAgcmV0dXJuIHR1aURheTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0Rm9ybUZpZWxkVHlwZURhdGVUb1N0YW5kYXJkRm9ybWF0ID0gKFxuICBkYXRlOiBUdWlEYXlcbik6IHN0cmluZyA9PiB7XG4gIGxldCBmb3JtYXR0ZWREYXRlOiBzdHJpbmc7XG4gIGxldCB5ZWFyID0gZGF0ZS55ZWFyO1xuICBsZXQgbW9udGggPSBkYXRlLm1vbnRoO1xuICBsZXQgZGF5ID0gZGF0ZS5kYXk7XG5cbiAgZm9ybWF0dGVkRGF0ZSA9IGAke2RheS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX0tJHsobW9udGggKyAxKVxuICAgIC50b1N0cmluZygpXG4gICAgLnBhZFN0YXJ0KDIsIFwiMFwiKX0tJHt5ZWFyfWA7XG5cbiAgcmV0dXJuIGZvcm1hdHRlZERhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdCA9IChcbiAgZmllbGQ6IFRGaWVsZCxcbiAgdmFsdWU6IGFueVxuKSA9PiB7XG4gIGxldCBjb252ZXJ0ZWRWYWx1ZTogYW55ID0gdmFsdWU7XG5cbiAgaWYgKGlzTm90RW1wdHlWYWx1ZSh2YWx1ZSkpIHtcbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5EQVRFOlxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgY29udmVydGVkVmFsdWUgPSBjb252ZXJ0Rm9ybUZpZWxkVHlwZURhdGVUb1N0YW5kYXJkRm9ybWF0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5SQURJTzpcbiAgICAgICAgY29udmVydGVkVmFsdWUgPSB2YWx1ZS5sYWJlbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuU0VMRUNUOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5vcHRpb25zKSkge1xuICAgICAgICAgIGZpZWxkLm9wdGlvbnMuZmluZCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QoaXRlbSkpIHtcbiAgICAgICAgICAgICAgaWYgKGl0ZW0udGl0bGUgPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb252ZXJ0ZWRWYWx1ZSA9IGl0ZW0udmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5QSE9ORTpcbiAgICAgICAgbGV0IHBob25lRmllbGQgPSBmaWVsZCBhcyBURmllbGRQaG9uZTtcbiAgICAgICAgaWYgKHBob25lRmllbGQucHJvcGVydGllcy5yZW1vdmVDb3VudHJ5Q29kZUZyb21WYWx1ZSkge1xuICAgICAgICAgIGNvbnZlcnRlZFZhbHVlID0gdmFsdWVcbiAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAucmVwbGFjZShwaG9uZUZpZWxkLnByb3BlcnRpZXMuY291bnRyeUNvZGUsIFwiXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkNBUFRVUkU6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBpc05vdEVtcHR5VmFsdWUodmFsdWVbMF0pKSB7XG4gICAgICAgICAgY29udmVydGVkVmFsdWUgPSB2YWx1ZVswXTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIGlzRW1wdHlWYWx1ZSh2YWx1ZSkpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnZlcnRlZFZhbHVlID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5SRUNPUkQ6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBpc05vdEVtcHR5VmFsdWUodmFsdWVbMF0pKSB7XG4gICAgICAgICAgY29udmVydGVkVmFsdWUgPSB2YWx1ZVswXTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIGlzRW1wdHlWYWx1ZSh2YWx1ZSkpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnZlcnRlZFZhbHVlID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb252ZXJ0ZWRWYWx1ZSA9IFwiXCI7XG4gIH1cblxuICByZXR1cm4gY29udmVydGVkVmFsdWU7XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydEZvcm1GaWVsZFZhbHVlVG9Ld2lrVUlGb3JtYXQgPSAoXG4gIGZpZWxkOiBURmllbGQsXG4gIHZhbHVlOiBhbnlcbikgPT4ge1xuICBsZXQgY29udmVydGVkVmFsdWU6IGFueSA9IHZhbHVlO1xuXG4gIGlmIChpc05vdEVtcHR5VmFsdWUodmFsdWUpKSB7XG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuUkFESU86XG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHModmFsdWUsIFwibGFiZWxcIikpIHtcbiAgICAgICAgICBjb25zdCByYWRpb0ZpZWxkID0gZmllbGQgYXMgYW55O1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZExhYmVsVmFsdWUgPSByYWRpb0ZpZWxkLm9wdGlvbnMuZmluZCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5sYWJlbCA9PT0gdmFsdWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29udmVydGVkVmFsdWUgPSBjb252ZXJ0ZWRMYWJlbFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRmllbGRUeXBlLlNFTEVDVDpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQub3B0aW9ucykpIHtcbiAgICAgICAgICBmaWVsZC5vcHRpb25zLmZpbmQoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGl0ZW0pKSB7XG4gICAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlID09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29udmVydGVkVmFsdWUgPSBpdGVtLnRpdGxlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuREFURTpcbiAgICAgICAgY29udmVydGVkVmFsdWUgPSBjb252ZXJ0Rm9ybUZpZWxkVHlwZURhdGVUb0t3aWtVSUZvcm1hdCh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkZJTEU6XG4gICAgICAgIGNvbnZlcnRlZFZhbHVlID0gdmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkNBUFRVUkU6XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBjb252ZXJ0ZWRWYWx1ZSA9IFt2YWx1ZV07XG4gICAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgY29udmVydGVkVmFsdWUgPSBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb252ZXJ0ZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRmllbGRUeXBlLlJFQ09SRDpcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGNvbnZlcnRlZFZhbHVlID0gW3ZhbHVlXTtcbiAgICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBjb252ZXJ0ZWRWYWx1ZSA9IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnZlcnRlZFZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29udmVydGVkVmFsdWUgPSBjb252ZXJ0Rm9ybUZpZWxkRW1wdHlWYWx1ZVRvS3dpa1VJRm9ybWF0KGZpZWxkKTtcbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0ZWRWYWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0Rm9ybUZpZWxkRW1wdHlWYWx1ZVRvS3dpa1VJRm9ybWF0ID0gKFxuICBmaWVsZDogVEZpZWxkXG4pOiBhbnkgPT4ge1xuICBjb25zdCBmaWVsZFR5cGU6IFRGaWVsZFR5cGUgPSBmaWVsZC50eXBlO1xuICBsZXQgdmFsdWU6IGFueTtcblxuICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgIGNhc2UgRUZpZWxkVHlwZS5DSEVDS0JPWDpcbiAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICBjYXNlIEVGaWVsZFR5cGUuTlVNQkVSOlxuICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBFRmllbGRUeXBlLkRBVEU6XG4gICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICBicmVhaztcbiAgICBjYXNlIEVGaWVsZFR5cGUuRklMRTpcbiAgICAgIHZhbHVlID0gW107XG4gICAgICBicmVhaztcbiAgICBjYXNlIEVGaWVsZFR5cGUuQ0FQVFVSRTpcbiAgICAgIHZhbHVlID0gW107XG4gICAgICBicmVhaztcbiAgICBjYXNlIEVGaWVsZFR5cGUuUkVDT1JEOlxuICAgICAgdmFsdWUgPSBbXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRUZpZWxkVHlwZS5TRUxFQ1Q6XG4gICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICBicmVhaztcbiAgICBjYXNlIEVGaWVsZFR5cGUuRFJPUERPV05fV0lUSF9TRUFSQ0g6XG4gICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuIl19
|
|
347
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmZpZWxkcy5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rd2lraWQtZm9ybXMvc3JjL2xpYi9yZW5kZXJlci9mb3JtLXZpZXcvaGVscGVycy9mb3JtLXZpZXcuZmllbGRzLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDZixZQUFZLEVBQ1osUUFBUSxFQUNULE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLFVBQVUsRUFJWCxNQUFNLDRDQUE0QyxDQUFDO0FBRXBELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBYSxFQUFFLEdBQVcsRUFBRSxFQUFFO0lBQzlELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNsQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFO1lBQ3JCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxNQUFhLEVBQUUsR0FBVyxFQUFFLEVBQUU7SUFDbkUsSUFBSSxVQUFrQixDQUFDO0lBRXZCLFVBQVUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7UUFDdkMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUN2QixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsS0FB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QUcsSUFBSSxDQUFDO1lBQ2IsTUFBTTtRQUNSO1lBQ0UsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNYLE1BQU07S0FDVDtJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHVpRGF5LCBUdWlUaW1lIH0gZnJvbSBcIkB0YWlnYS11aS9jZGtcIjtcbmltcG9ydCB7XG4gIGNoZWNrT2JqZWN0S2V5RXhpc3RzLFxuICBpc05vdEVtcHR5VmFsdWUsXG4gIGlzRW1wdHlWYWx1ZSxcbiAgaXNPYmplY3Rcbn0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XG5pbXBvcnQge1xuICBFRmllbGRUeXBlLFxuICBURmllbGQsXG4gIFRGaWVsZFBob25lLFxuICBURmllbGRUeXBlXG59IGZyb20gXCIuLi9kZWZpbml0aW9ucy9mb3JtLXZpZXcuZmllbGRzLmRlZmluaXRpb25cIjtcblxuZXhwb3J0IGNvbnN0IGdldEZvcm1GaWVsZEJ5S2V5ID0gKGZpZWxkczogYW55W10sIGtleTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiB7XG4gICAgaWYgKGZpZWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZmllbGQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rm9ybUZpZWxkSW5kZXhCeUtleSA9IChmaWVsZHM6IGFueVtdLCBrZXk6IHN0cmluZykgPT4ge1xuICBsZXQgZmllbGRJbmRleDogbnVtYmVyO1xuXG4gIGZpZWxkSW5kZXggPSBmaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICByZXR1cm4ga2V5ID09PSBfLmtleTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZpZWxkSW5kZXg7XG59O1xuXG5leHBvcnQgY29uc3QgaGlnaGxpZ2h0Rm9ybUZpZWxkRXJyb3IgPSAoZmllbGQ6IGFueSwgZXJyb3I6IGFueSk6IGFueSA9PiB7XG4gIGZpZWxkLmludmFsaWQgPSBlcnJvcjtcbiAgZmllbGQuZm9jdXMgPSBlcnJvcjtcblxuICByZXR1cm4gZmllbGQ7XG59O1xuXG5leHBvcnQgY29uc3QgYXBwZW5kSHRtbE1lc3NhZ2UgPSAoXG4gIGZpZWxkOiBhbnksXG4gIG1lc3NhZ2U6IHsgbWVzc2FnZTogc3RyaW5nIH1cbik6IGFueSA9PiB7XG4gIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJodG1sXCIpKSB7XG4gICAgaWYgKGlzTm90RW1wdHlWYWx1ZShmaWVsZC5odG1sKSkge1xuICAgICAgY29uc3QgaHRtbCA9IGZpZWxkLmh0bWwucmVwbGFjZShcInt7bWVzc2FnZX19XCIsIG1lc3NhZ2UubWVzc2FnZSk7XG4gICAgICBmaWVsZC5odG1sID0gaHRtbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmllbGQ7XG59O1xuXG5leHBvcnQgY29uc3QgYXBwZW5kRm9ybUZpZWxkTWVzc2FnZSA9IChcbiAgZmllbGQ6IGFueSxcbiAgbWVzc2FnZTogeyB0eXBlOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9XG4pOiBhbnkgPT4ge1xuICBjb25zdCBoYXNEdXBsaWNhdGVNZXNzYWdlID0gKFxuICAgIG1lc3NhZ2VzOiB7IHR5cGU6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH1bXSxcbiAgICBtZXNzYWdlOiB7IHR5cGU6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH1cbiAgKSA9PiB7XG4gICAgcmV0dXJuIG1lc3NhZ2VzLnNvbWUoKGZpZWxkTWVzc2FnZTogeyB0eXBlOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9KSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBmaWVsZE1lc3NhZ2UudHlwZSA9PT0gbWVzc2FnZS50eXBlICYmXG4gICAgICAgIGZpZWxkTWVzc2FnZS5tZXNzYWdlID09PSBtZXNzYWdlLm1lc3NhZ2VcbiAgICAgICk7XG4gICAgfSk7XG4gIH07XG5cbiAgZmllbGRbXCJtZXNzYWdlc1wiXSA9IFtdO1xuXG4gIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJtZXNzYWdlc1wiKSkge1xuICAgIGlmICghaGFzRHVwbGljYXRlTWVzc2FnZShmaWVsZFtcIm1lc3NhZ2VzXCJdLCBtZXNzYWdlKSkge1xuICAgICAgZmllbGRbXCJtZXNzYWdlc1wiXS5wdXNoKHtcbiAgICAgICAgdHlwZTogbWVzc2FnZS50eXBlLFxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLm1lc3NhZ2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmaWVsZFtcIm1lc3NhZ2VzXCJdID0gW3sgdHlwZTogbWVzc2FnZS50eXBlLCBtZXNzYWdlOiBtZXNzYWdlLm1lc3NhZ2UgfV07XG4gIH1cblxuICByZXR1cm4gZmllbGQ7XG59O1xuXG5leHBvcnQgY29uc3QgZmlsdGVyRHVwbGljYXRlc01lZGlhRmlsZXMgPSAoYXJyYXk6IHN0cmluZ1tdKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCB1bmlxdWVGaWxlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIHJldHVybiBhcnJheS5maWx0ZXIoKG1lZGlhRmlsZSkgPT4ge1xuICAgIGlmICghdW5pcXVlRmlsZXMuaGFzKG1lZGlhRmlsZSkpIHtcbiAgICAgIHVuaXF1ZUZpbGVzLmFkZChtZWRpYUZpbGUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZmlsdGVyRHVwbGljYXRlc0ZpbGVzID0gKGFycmF5OiBhbnlbXSk6IGFueVtdID0+IHtcbiAgY29uc3QgdW5pcXVlRmlsZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcmV0dXJuIGFycmF5LmZpbHRlcigoZmlsZSkgPT4ge1xuICAgIGNvbnN0IGZpbGVLZXkgPSBgJHtmaWxlLm5hbWV9LSR7ZmlsZS5zaXplfWA7XG4gICAgaWYgKCF1bmlxdWVGaWxlcy5oYXMoZmlsZUtleSkpIHtcbiAgICAgIHVuaXF1ZUZpbGVzLmFkZChmaWxlS2V5KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUZvcm1GaWVsZE1lc3NhZ2UgPSAoXG4gIGZpZWxkOiBhbnksXG4gIG1lc3NhZ2U6IHsgdHlwZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfVxuKTogYW55ID0+IHtcbiAgZmllbGRbXCJtZXNzYWdlc1wiXSA9IGZpZWxkW1wibWVzc2FnZXNcIl0uZmlsdGVyKGZ1bmN0aW9uIChmaWVsZE1lc3NhZ2UpIHtcbiAgICByZXR1cm4gZmllbGRNZXNzYWdlLnR5cGUgIT09IG1lc3NhZ2UudHlwZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZpZWxkO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNob3dGb3JtRmllbGRFcnJvcihcbiAgZmllbGRzOiBhbnksXG4gIGVycm9yczogYW55LFxuICBrZXk6IHN0cmluZyxcbiAgZXJyb3I6IGJvb2xlYW5cbikge1xuICBjb25zdCBmaWVsZEluZGV4ID0gZmllbGRzLmZpbmRJbmRleCgoZmllbGQ6IGFueSkgPT4ge1xuICAgIHJldHVybiBmaWVsZC5rZXkgPT09IGtleTtcbiAgfSk7XG5cbiAgY29uc3Qgc2V0RXJyb3JNZXNzYWdlcyA9IChmaWVsZDogYW55LCBlcnJvcnM6IGFueSkgPT4ge1xuICAgIGNvbnN0IGdldEVycm9yTWVzc2FnZSA9IChmaWVsZExhYmVsOiBzdHJpbmcsIGVycm9yVHlwZTogc3RyaW5nKSA9PiB7XG4gICAgICBsZXQgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBcIlwiO1xuXG4gICAgICBzd2l0Y2ggKGVycm9yVHlwZSkge1xuICAgICAgICBjYXNlIFwicmVxdWlyZWRcIjpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgJHtmaWVsZExhYmVsfSBpcyByZXF1aXJlZCFgO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZW1haWxcIjpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgJHtmaWVsZExhYmVsfSBoYXMgd3JvbmcgZW1haWwgZm9ybWF0IWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgJHtmaWVsZExhYmVsfSBoYXMgd3JvbmcgdmFsdWUhIE1pbmltdW0gdmFsdWU6ICR7ZmllbGQudmFsaWRhdG9ycy5taW59YDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm1pbmxlbmd0aFwiOlxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGAke2ZpZWxkTGFiZWx9IGhhcyB3cm9uZyBsZW5ndGghIFJlcXVpcmVkIG1pbmltdW0gbGVuZ3RoOiAke2ZpZWxkLnZhbGlkYXRvcnMubWluTGVuZ3RofWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtYXhcIjpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgJHtmaWVsZExhYmVsfSBoYXMgd3JvbmcgdmFsdWUhIE1heGltdW0gdmFsdWU6ICR7ZmllbGQudmFsaWRhdG9ycy5tYXhMZW5ndGh9YDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm1heGxlbmd0aFwiOlxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGAke2ZpZWxkTGFiZWx9IGhhcyB3cm9uZyBsZW5ndGghIFJlcXVpcmVkIG1heGltdW0gbGVuZ3RoOiAke2ZpZWxkLnZhbGlkYXRvcnMubWF4TGVuZ3RofWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJhcmVFcXVhbFwiOlxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGAke2ZpZWxkTGFiZWx9IG11c3QgYmUgZXF1YWwhYDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInBhdHRlcm5cIjpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgJHtmaWVsZExhYmVsfSBpcyBpbiBpbmNvcnJlY3QgZm9ybWF0IWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvbmx5V2hpdGVzcGFjZXNcIjpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgJHtmaWVsZExhYmVsfSBjYW4ndCBjb250YWluIG9ubHkgZW1wdHkgc3BhY2VzIWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZmllbGRMYWJlbH06ICR7ZXJyb3JUeXBlfWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfTtcblxuICAgIE9iamVjdC5rZXlzKGVycm9ycykuZm9yRWFjaCgoZXJyb3IpID0+IHtcbiAgICAgIGZpZWxkID0gYXBwZW5kRm9ybUZpZWxkTWVzc2FnZShmaWVsZCwge1xuICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgIG1lc3NhZ2U6IGdldEVycm9yTWVzc2FnZShmaWVsZC5sYWJlbCwgZXJyb3IpXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmaWVsZDtcbiAgfTtcblxuICBpZiAoZXJyb3IpIHtcbiAgICBmaWVsZHNbZmllbGRJbmRleF0gPSBzZXRFcnJvck1lc3NhZ2VzKGZpZWxkc1tmaWVsZEluZGV4XSwgZXJyb3JzKTtcbiAgfSBlbHNlIHtcbiAgICBmaWVsZHNbZmllbGRJbmRleF1bXCJtZXNzYWdlc1wiXSA9IFtdO1xuICB9XG5cbiAgZmllbGRzW2ZpZWxkSW5kZXhdID0gaGlnaGxpZ2h0Rm9ybUZpZWxkRXJyb3IoZmllbGRzW2ZpZWxkSW5kZXhdLCBlcnJvcik7XG5cbiAgcmV0dXJuIGZpZWxkcztcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRGb3JtRmllbGRUeXBlRGF0ZVRvS3dpa1VJRm9ybWF0ID0gKFxuICBkYXRlOiBzdHJpbmdcbik6IFR1aURheSA9PiB7XG4gIGNvbnN0IHNwbGl0RGF0ZSA9IGRhdGUuc3BsaXQoXCItXCIpO1xuICBjb25zdCB0dWlEYXkgPSBuZXcgVHVpRGF5KFxuICAgIE51bWJlcihzcGxpdERhdGVbMl0pLCAvLyBZZWFyXG4gICAgTnVtYmVyKHNwbGl0RGF0ZVsxXSkgLSAxLCAvLyBNb250aCwgV2h5ICctMScgPT4gQmVjYXVzZSBUYWlnYS1VSSBSZXF1aXJlZCBJdCwgU28uLi5cbiAgICBOdW1iZXIoc3BsaXREYXRlWzBdKSAvLyBEYXlcbiAgKTtcblxuICByZXR1cm4gdHVpRGF5O1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRGb3JtRmllbGRUeXBlVGltZVRvS3dpa1VJRm9ybWF0ID0gKFxuICB0aW1lOiBzdHJpbmdcbik6IFR1aVRpbWUgPT4ge1xuICBjb25zdCB0aW1lUGFydHMgPSB0aW1lLnNwbGl0KC9bLjpdLyk7XG4gIGxldCBob3VycyA9IDAsXG4gICAgbWludXRlcyA9IDAsXG4gICAgc2Vjb25kcyA9IDAsXG4gICAgbWlsbGlzZWNvbmRzID0gMDtcblxuICBpZiAodGltZVBhcnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgaG91cnMgPSBwYXJzZUludCh0aW1lUGFydHNbMF0pO1xuICAgIG1pbnV0ZXMgPSBwYXJzZUludCh0aW1lUGFydHNbMV0pO1xuXG4gICAgaWYgKHRpbWVQYXJ0cy5sZW5ndGggPj0gMykge1xuICAgICAgc2Vjb25kcyA9IHBhcnNlSW50KHRpbWVQYXJ0c1syXSk7XG4gICAgICBpZiAodGltZVBhcnRzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICBtaWxsaXNlY29uZHMgPSBwYXJzZUludCh0aW1lUGFydHNbM10pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCB0dWlUaW1lID0gbmV3IFR1aVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcyk7XG4gIHJldHVybiB0dWlUaW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRGb3JtRmllbGRUeXBlRGF0ZVRvU3RhbmRhcmRGb3JtYXQgPSAoXG4gIGRhdGU6IFR1aURheVxuKTogc3RyaW5nID0+IHtcbiAgbGV0IGZvcm1hdHRlZERhdGU6IHN0cmluZztcbiAgbGV0IHllYXIgPSBkYXRlLnllYXI7XG4gIGxldCBtb250aCA9IGRhdGUubW9udGg7XG4gIGxldCBkYXkgPSBkYXRlLmRheTtcblxuICBmb3JtYXR0ZWREYXRlID0gYCR7ZGF5LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfS0keyhtb250aCArIDEpXG4gICAgLnRvU3RyaW5nKClcbiAgICAucGFkU3RhcnQoMiwgXCIwXCIpfS0ke3llYXJ9YDtcblxuICByZXR1cm4gZm9ybWF0dGVkRGF0ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0Rm9ybUZpZWxkVHlwZVRpbWVUb1N0YW5kYXJkRm9ybWF0ID0gKFxuICB0aW1lOiBUdWlUaW1lXG4pOiBzdHJpbmcgPT4ge1xuICBsZXQgZm9ybWF0dGVkRGF0ZTogc3RyaW5nO1xuICBsZXQgaG91ciA9IHRpbWUuaG91cnM7XG4gIGxldCBtaW51dGVzID0gdGltZS5taW51dGVzO1xuICBsZXQgc2Vjb25kcyA9IHRpbWUuc2Vjb25kcztcbiAgbGV0IG1pbGxpc2Vjb25kcyA9IHRpbWUubXM7XG5cbiAgZm9ybWF0dGVkRGF0ZSA9IGAke2hvdXIudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9OiR7bWludXRlc1xuICAgIC50b1N0cmluZygpXG4gICAgLnBhZFN0YXJ0KDIsIFwiMFwiKX0ke1xuICAgIHNlY29uZHMgPiAwID8gYDoke3NlY29uZHMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9YCA6IFwiXCJcbiAgfSR7XG4gICAgc2Vjb25kcyA+IDAgJiYgbWlsbGlzZWNvbmRzID4gMFxuICAgICAgPyBgOiR7bWlsbGlzZWNvbmRzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfWBcbiAgICAgIDogXCJcIlxuICB9YDtcblxuICByZXR1cm4gZm9ybWF0dGVkRGF0ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0ID0gKFxuICBmaWVsZDogVEZpZWxkLFxuICB2YWx1ZTogYW55XG4pID0+IHtcbiAgbGV0IGNvbnZlcnRlZFZhbHVlOiBhbnkgPSB2YWx1ZTtcblxuICBpZiAoaXNOb3RFbXB0eVZhbHVlKHZhbHVlKSkge1xuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkRBVEU6XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBjb252ZXJ0ZWRWYWx1ZSA9IGNvbnZlcnRGb3JtRmllbGRUeXBlRGF0ZVRvU3RhbmRhcmRGb3JtYXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRmllbGRUeXBlLlRJTUU6XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBjb252ZXJ0ZWRWYWx1ZSA9IGNvbnZlcnRGb3JtRmllbGRUeXBlVGltZVRvU3RhbmRhcmRGb3JtYXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRmllbGRUeXBlLlJBRElPOlxuICAgICAgICBjb252ZXJ0ZWRWYWx1ZSA9IHZhbHVlLmxhYmVsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5TRUxFQ1Q6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLm9wdGlvbnMpKSB7XG4gICAgICAgICAgZmllbGQub3B0aW9ucy5maW5kKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChpc09iamVjdChpdGVtKSkge1xuICAgICAgICAgICAgICBpZiAoaXRlbS50aXRsZSA9PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnZlcnRlZFZhbHVlID0gaXRlbS52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRmllbGRUeXBlLlBIT05FOlxuICAgICAgICBsZXQgcGhvbmVGaWVsZCA9IGZpZWxkIGFzIFRGaWVsZFBob25lO1xuICAgICAgICBpZiAocGhvbmVGaWVsZC5wcm9wZXJ0aWVzLnJlbW92ZUNvdW50cnlDb2RlRnJvbVZhbHVlKSB7XG4gICAgICAgICAgY29udmVydGVkVmFsdWUgPSB2YWx1ZVxuICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgIC5yZXBsYWNlKHBob25lRmllbGQucHJvcGVydGllcy5jb3VudHJ5Q29kZSwgXCJcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuQ0FQVFVSRTpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIGlzTm90RW1wdHlWYWx1ZSh2YWx1ZVswXSkpIHtcbiAgICAgICAgICBjb252ZXJ0ZWRWYWx1ZSA9IHZhbHVlWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgaXNFbXB0eVZhbHVlKHZhbHVlKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29udmVydGVkVmFsdWUgPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRmllbGRUeXBlLlJFQ09SRDpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIGlzTm90RW1wdHlWYWx1ZSh2YWx1ZVswXSkpIHtcbiAgICAgICAgICBjb252ZXJ0ZWRWYWx1ZSA9IHZhbHVlWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgaXNFbXB0eVZhbHVlKHZhbHVlKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29udmVydGVkVmFsdWUgPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnZlcnRlZFZhbHVlID0gXCJcIjtcbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0ZWRWYWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb0t3aWtVSUZvcm1hdCA9IChcbiAgZmllbGQ6IFRGaWVsZCxcbiAgdmFsdWU6IGFueVxuKSA9PiB7XG4gIGxldCBjb252ZXJ0ZWRWYWx1ZTogYW55ID0gdmFsdWU7XG5cbiAgaWYgKGlzTm90RW1wdHlWYWx1ZSh2YWx1ZSkpIHtcbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5SQURJTzpcbiAgICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyh2YWx1ZSwgXCJsYWJlbFwiKSkge1xuICAgICAgICAgIGNvbnN0IHJhZGlvRmllbGQgPSBmaWVsZCBhcyBhbnk7XG4gICAgICAgICAgY29uc3QgY29udmVydGVkTGFiZWxWYWx1ZSA9IHJhZGlvRmllbGQub3B0aW9ucy5maW5kKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmxhYmVsID09PSB2YWx1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb252ZXJ0ZWRWYWx1ZSA9IGNvbnZlcnRlZExhYmVsVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuU0VMRUNUOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5vcHRpb25zKSkge1xuICAgICAgICAgIGZpZWxkLm9wdGlvbnMuZmluZCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QoaXRlbSkpIHtcbiAgICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWUgPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb252ZXJ0ZWRWYWx1ZSA9IGl0ZW0udGl0bGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5EQVRFOlxuICAgICAgICBjb252ZXJ0ZWRWYWx1ZSA9IGNvbnZlcnRGb3JtRmllbGRUeXBlRGF0ZVRvS3dpa1VJRm9ybWF0KHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuVElNRTpcbiAgICAgICAgY29udmVydGVkVmFsdWUgPSBjb252ZXJ0Rm9ybUZpZWxkVHlwZVRpbWVUb0t3aWtVSUZvcm1hdCh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkZJTEU6XG4gICAgICAgIGNvbnZlcnRlZFZhbHVlID0gdmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkNBUFRVUkU6XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBjb252ZXJ0ZWRWYWx1ZSA9IFt2YWx1ZV07XG4gICAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgY29udmVydGVkVmFsdWUgPSBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb252ZXJ0ZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRmllbGRUeXBlLlJFQ09SRDpcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGNvbnZlcnRlZFZhbHVlID0gW3ZhbHVlXTtcbiAgICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBjb252ZXJ0ZWRWYWx1ZSA9IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnZlcnRlZFZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29udmVydGVkVmFsdWUgPSBjb252ZXJ0Rm9ybUZpZWxkRW1wdHlWYWx1ZVRvS3dpa1VJRm9ybWF0KGZpZWxkKTtcbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0ZWRWYWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0Rm9ybUZpZWxkRW1wdHlWYWx1ZVRvS3dpa1VJRm9ybWF0ID0gKFxuICBmaWVsZDogVEZpZWxkXG4pOiBhbnkgPT4ge1xuICBjb25zdCBmaWVsZFR5cGU6IFRGaWVsZFR5cGUgPSBmaWVsZC50eXBlO1xuICBsZXQgdmFsdWU6IGFueTtcblxuICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgIGNhc2UgRUZpZWxkVHlwZS5DSEVDS0JPWDpcbiAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICBjYXNlIEVGaWVsZFR5cGUuTlVNQkVSOlxuICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBFRmllbGRUeXBlLkRBVEU6XG4gICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICBicmVhaztcbiAgICBjYXNlIEVGaWVsZFR5cGUuRklMRTpcbiAgICAgIHZhbHVlID0gW107XG4gICAgICBicmVhaztcbiAgICBjYXNlIEVGaWVsZFR5cGUuQ0FQVFVSRTpcbiAgICAgIHZhbHVlID0gW107XG4gICAgICBicmVhaztcbiAgICBjYXNlIEVGaWVsZFR5cGUuUkVDT1JEOlxuICAgICAgdmFsdWUgPSBbXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRUZpZWxkVHlwZS5TRUxFQ1Q6XG4gICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICBicmVhaztcbiAgICBjYXNlIEVGaWVsZFR5cGUuRFJPUERPV05fV0lUSF9TRUFSQ0g6XG4gICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuIl19
|