@regle/core 0.1.7 → 0.1.9
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/dist/index.cjs +1 -1663
- package/dist/index.d.cts +103 -23
- package/dist/index.d.ts +103 -23
- package/dist/index.js +1 -1657
- package/package.json +7 -4
package/dist/index.cjs
CHANGED
|
@@ -1,1663 +1 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var vue = require('vue');
|
|
4
|
-
|
|
5
|
-
// src/core/createRule/unwrapRuleParameters.ts
|
|
6
|
-
function unwrapRuleParameters(params) {
|
|
7
|
-
return params.map((param) => {
|
|
8
|
-
if (param instanceof Function) {
|
|
9
|
-
return param();
|
|
10
|
-
}
|
|
11
|
-
return vue.unref(param);
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
function createReactiveParams(params) {
|
|
15
|
-
return params.map((param) => {
|
|
16
|
-
if (param instanceof Function) {
|
|
17
|
-
return param;
|
|
18
|
-
} else if (vue.isRef(param)) {
|
|
19
|
-
return param;
|
|
20
|
-
}
|
|
21
|
-
return vue.toRef(() => param);
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
function getFunctionParametersLength(func) {
|
|
25
|
-
const funcStr = func.toString();
|
|
26
|
-
const isArrowFunction = funcStr.includes("=>");
|
|
27
|
-
const params = (isArrowFunction ? funcStr.split("=>")[0] : funcStr).slice(funcStr.indexOf("(") + 1, funcStr.indexOf(")")).split(",").map((param) => param.trim());
|
|
28
|
-
const defaults = params.filter((param) => param.includes("="));
|
|
29
|
-
return defaults.length + func.length;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// src/core/createRule/defineRuleProcessors.ts
|
|
33
|
-
function defineRuleProcessors(definition, ...params) {
|
|
34
|
-
const { message, validator, active, ...properties } = definition;
|
|
35
|
-
const isAsync = validator.constructor.name === "AsyncFunction";
|
|
36
|
-
const defaultProcessors = {
|
|
37
|
-
validator(value, ...args) {
|
|
38
|
-
return definition.validator(value, ...unwrapRuleParameters(args.length ? args : params));
|
|
39
|
-
},
|
|
40
|
-
message(value, metadata) {
|
|
41
|
-
if (typeof definition.message === "function") {
|
|
42
|
-
return definition.message(value, {
|
|
43
|
-
...metadata,
|
|
44
|
-
$params: unwrapRuleParameters(metadata.$params?.length ? metadata.$params : params)
|
|
45
|
-
});
|
|
46
|
-
} else {
|
|
47
|
-
return definition.message;
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
|
-
active(value, metadata) {
|
|
51
|
-
if (typeof definition.active === "function") {
|
|
52
|
-
return definition.active(value, {
|
|
53
|
-
...metadata,
|
|
54
|
-
$params: unwrapRuleParameters(metadata.$params?.length ? metadata.$params : params)
|
|
55
|
-
});
|
|
56
|
-
} else {
|
|
57
|
-
return definition.active ?? true;
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
exec(value) {
|
|
61
|
-
const validator2 = definition.validator(value, ...unwrapRuleParameters(params));
|
|
62
|
-
let rawResult;
|
|
63
|
-
if (validator2 instanceof Promise) {
|
|
64
|
-
return validator2.then((result) => {
|
|
65
|
-
rawResult = result;
|
|
66
|
-
if (typeof rawResult === "object" && "$valid" in rawResult) {
|
|
67
|
-
return rawResult.$valid;
|
|
68
|
-
} else if (typeof rawResult === "boolean") {
|
|
69
|
-
return rawResult;
|
|
70
|
-
}
|
|
71
|
-
return false;
|
|
72
|
-
});
|
|
73
|
-
} else {
|
|
74
|
-
rawResult = validator2;
|
|
75
|
-
}
|
|
76
|
-
if (typeof rawResult === "object" && "$valid" in rawResult) {
|
|
77
|
-
return rawResult.$valid;
|
|
78
|
-
} else if (typeof rawResult === "boolean") {
|
|
79
|
-
return rawResult;
|
|
80
|
-
}
|
|
81
|
-
return false;
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
const processors = {
|
|
85
|
-
...defaultProcessors,
|
|
86
|
-
...properties,
|
|
87
|
-
...{
|
|
88
|
-
_validator: definition.validator,
|
|
89
|
-
_message: definition.message,
|
|
90
|
-
_active: definition.active,
|
|
91
|
-
_type: definition.type,
|
|
92
|
-
_patched: false,
|
|
93
|
-
_async: isAsync,
|
|
94
|
-
_params: createReactiveParams(params)
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
return processors;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// src/core/createRule/createRule.ts
|
|
101
|
-
function createRule(definition) {
|
|
102
|
-
if (typeof definition.validator === "function") {
|
|
103
|
-
let fakeParams = [];
|
|
104
|
-
const staticProcessors = defineRuleProcessors(definition, ...fakeParams);
|
|
105
|
-
const isAsync = definition.validator.constructor.name === "AsyncFunction";
|
|
106
|
-
if (getFunctionParametersLength(definition.validator) > 1) {
|
|
107
|
-
const ruleFactory = function(...params) {
|
|
108
|
-
return defineRuleProcessors(definition, ...params);
|
|
109
|
-
};
|
|
110
|
-
ruleFactory.validator = staticProcessors.validator;
|
|
111
|
-
ruleFactory.message = staticProcessors.message;
|
|
112
|
-
ruleFactory.active = staticProcessors.active;
|
|
113
|
-
ruleFactory.type = staticProcessors.type;
|
|
114
|
-
ruleFactory.exec = staticProcessors.exec;
|
|
115
|
-
ruleFactory._validator = staticProcessors.validator;
|
|
116
|
-
ruleFactory._message = staticProcessors.message;
|
|
117
|
-
ruleFactory._active = staticProcessors.active;
|
|
118
|
-
ruleFactory._type = definition.type;
|
|
119
|
-
ruleFactory._patched = false;
|
|
120
|
-
ruleFactory._async = isAsync;
|
|
121
|
-
return ruleFactory;
|
|
122
|
-
} else {
|
|
123
|
-
return staticProcessors;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
throw new Error("Validator must be a function");
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// src/utils/object.utils.ts
|
|
130
|
-
function isObject(obj) {
|
|
131
|
-
return typeof obj === "object" && obj !== null && !Array.isArray(obj);
|
|
132
|
-
}
|
|
133
|
-
function isRefObject(obj) {
|
|
134
|
-
return isObject(obj.value);
|
|
135
|
-
}
|
|
136
|
-
function cloneDeep(obj) {
|
|
137
|
-
let result = obj;
|
|
138
|
-
let type = {}.toString.call(obj).slice(8, -1);
|
|
139
|
-
if (type == "Set") {
|
|
140
|
-
result = new Set([...obj].map((value) => cloneDeep(value)));
|
|
141
|
-
}
|
|
142
|
-
if (type == "Map") {
|
|
143
|
-
result = new Map([...obj].map((kv) => [cloneDeep(kv[0]), cloneDeep(kv[1])]));
|
|
144
|
-
}
|
|
145
|
-
if (type == "Date") {
|
|
146
|
-
result = new Date(obj.getTime());
|
|
147
|
-
}
|
|
148
|
-
if (type == "RegExp") {
|
|
149
|
-
result = RegExp(obj.source, getRegExpFlags(obj));
|
|
150
|
-
}
|
|
151
|
-
if (type == "Array" || type == "Object") {
|
|
152
|
-
result = Array.isArray(obj) ? [] : {};
|
|
153
|
-
for (let key in obj) {
|
|
154
|
-
result[key] = cloneDeep(obj[key]);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
return result;
|
|
158
|
-
}
|
|
159
|
-
function getRegExpFlags(regExp) {
|
|
160
|
-
if (typeof regExp.source.flags == "string") {
|
|
161
|
-
return regExp.source.flags;
|
|
162
|
-
} else {
|
|
163
|
-
let flags = [];
|
|
164
|
-
regExp.global && flags.push("g");
|
|
165
|
-
regExp.ignoreCase && flags.push("i");
|
|
166
|
-
regExp.multiline && flags.push("m");
|
|
167
|
-
regExp.sticky && flags.push("y");
|
|
168
|
-
regExp.unicode && flags.push("u");
|
|
169
|
-
return flags.join("");
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
function unwrapGetter(getter, value, index) {
|
|
173
|
-
if (getter instanceof Function) {
|
|
174
|
-
return getter(value, index ?? 0);
|
|
175
|
-
}
|
|
176
|
-
return getter;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// src/utils/isEmpty.ts
|
|
180
|
-
function isEmpty(value) {
|
|
181
|
-
if (value === void 0 || value === null) {
|
|
182
|
-
return true;
|
|
183
|
-
}
|
|
184
|
-
if (value === false) {
|
|
185
|
-
return false;
|
|
186
|
-
}
|
|
187
|
-
if (value instanceof Date) {
|
|
188
|
-
return isNaN(value.getTime());
|
|
189
|
-
}
|
|
190
|
-
if (Array.isArray(value)) {
|
|
191
|
-
return value.length === 0;
|
|
192
|
-
}
|
|
193
|
-
if (typeof value === "object" && value != null) {
|
|
194
|
-
return Object.keys(value).length === 0;
|
|
195
|
-
}
|
|
196
|
-
if (typeof value === "string") {
|
|
197
|
-
return !String(value.trim()).length;
|
|
198
|
-
}
|
|
199
|
-
return false;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
// src/utils/debounce.ts
|
|
203
|
-
function debounce(func, wait, immediate) {
|
|
204
|
-
let timeout;
|
|
205
|
-
const debouncedFn = (...args) => new Promise((resolve) => {
|
|
206
|
-
clearTimeout(timeout);
|
|
207
|
-
timeout = setTimeout(() => {
|
|
208
|
-
timeout = void 0;
|
|
209
|
-
{
|
|
210
|
-
Promise.resolve(func.apply(this, [...args])).then(resolve);
|
|
211
|
-
}
|
|
212
|
-
}, wait);
|
|
213
|
-
});
|
|
214
|
-
debouncedFn.cancel = () => {
|
|
215
|
-
clearTimeout(timeout);
|
|
216
|
-
timeout = void 0;
|
|
217
|
-
};
|
|
218
|
-
debouncedFn.doImmediately = (...args) => new Promise((resolve) => {
|
|
219
|
-
clearTimeout(timeout);
|
|
220
|
-
timeout = setTimeout(() => {
|
|
221
|
-
timeout = void 0;
|
|
222
|
-
Promise.resolve(func.apply(this, [...args])).then(resolve);
|
|
223
|
-
}, 0);
|
|
224
|
-
});
|
|
225
|
-
return debouncedFn;
|
|
226
|
-
}
|
|
227
|
-
function versionCompare(current, other) {
|
|
228
|
-
const cp = String(current).split(".");
|
|
229
|
-
const op = String(other).split(".");
|
|
230
|
-
for (let depth = 0; depth < Math.min(cp.length, op.length); depth++) {
|
|
231
|
-
const cn = Number(cp[depth]);
|
|
232
|
-
const on = Number(op[depth]);
|
|
233
|
-
if (cn > on) return 1 /* GreaterThan */;
|
|
234
|
-
if (on > cn) return -1 /* LessThan */;
|
|
235
|
-
if (!isNaN(cn) && isNaN(on)) return 1 /* GreaterThan */;
|
|
236
|
-
if (isNaN(cn) && !isNaN(on)) return -1 /* LessThan */;
|
|
237
|
-
}
|
|
238
|
-
return 0 /* EqualTo */;
|
|
239
|
-
}
|
|
240
|
-
var isVueSuperiorOrEqualTo3dotFive = versionCompare(vue.version, "3.5.0") === -1 ? false : true;
|
|
241
|
-
|
|
242
|
-
// src/utils/randomId.ts
|
|
243
|
-
function uniqueIDNuxt() {
|
|
244
|
-
return Math.floor(Math.random() * Date.now()).toString();
|
|
245
|
-
}
|
|
246
|
-
function randomId() {
|
|
247
|
-
if (typeof window === "undefined") {
|
|
248
|
-
return uniqueIDNuxt();
|
|
249
|
-
} else {
|
|
250
|
-
const uint32 = window.crypto.getRandomValues(new Uint32Array(1))[0];
|
|
251
|
-
return uint32.toString(10);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
function useStorage() {
|
|
255
|
-
const ruleDeclStorage = vue.shallowRef(/* @__PURE__ */ new Map());
|
|
256
|
-
const fieldsStorage = vue.shallowRef(
|
|
257
|
-
/* @__PURE__ */ new Map()
|
|
258
|
-
);
|
|
259
|
-
const collectionsStorage = vue.shallowRef(/* @__PURE__ */ new Map());
|
|
260
|
-
const dirtyStorage = vue.shallowRef(/* @__PURE__ */ new Map());
|
|
261
|
-
const ruleStatusStorage = vue.shallowRef(/* @__PURE__ */ new Map());
|
|
262
|
-
const arrayStatusStorage = vue.shallowRef(/* @__PURE__ */ new Map());
|
|
263
|
-
function getFieldsEntry($path) {
|
|
264
|
-
const existingFields = fieldsStorage.value.get($path);
|
|
265
|
-
if (existingFields) {
|
|
266
|
-
return existingFields;
|
|
267
|
-
} else {
|
|
268
|
-
const $fields = vue.ref({});
|
|
269
|
-
fieldsStorage.value.set($path, $fields);
|
|
270
|
-
return $fields;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
function getCollectionsEntry($path) {
|
|
274
|
-
const existingEach = collectionsStorage.value.get($path);
|
|
275
|
-
if (existingEach) {
|
|
276
|
-
return existingEach;
|
|
277
|
-
} else {
|
|
278
|
-
const $each = vue.ref([]);
|
|
279
|
-
collectionsStorage.value.set($path, $each);
|
|
280
|
-
return $each;
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
function addArrayStatus($arrayId, itemId, value) {
|
|
284
|
-
arrayStatusStorage.value.set(`${$arrayId}-${itemId}`, value);
|
|
285
|
-
}
|
|
286
|
-
function getArrayStatus($arrayId, itemId) {
|
|
287
|
-
return arrayStatusStorage.value.get(`${$arrayId}-${itemId}`);
|
|
288
|
-
}
|
|
289
|
-
function deleteArrayStatus($arrayId, itemId) {
|
|
290
|
-
if ($arrayId && itemId != null) {
|
|
291
|
-
arrayStatusStorage.value.delete(`${$arrayId}-${itemId}`);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
function setDirtyEntry($path, dirty) {
|
|
295
|
-
dirtyStorage.value.set($path, dirty);
|
|
296
|
-
}
|
|
297
|
-
function getDirtyState(path) {
|
|
298
|
-
return dirtyStorage.value.get(path) ?? false;
|
|
299
|
-
}
|
|
300
|
-
function addRuleDeclEntry($path, options) {
|
|
301
|
-
ruleDeclStorage.value.set($path, options);
|
|
302
|
-
}
|
|
303
|
-
function checkRuleDeclEntry($path, newRules) {
|
|
304
|
-
const storedRulesDefs = ruleDeclStorage.value.get($path);
|
|
305
|
-
if (!storedRulesDefs) return void 0;
|
|
306
|
-
const storedRules = storedRulesDefs;
|
|
307
|
-
const isValidCache = areRulesChanged(newRules, storedRules);
|
|
308
|
-
if (!isValidCache) return { valid: false };
|
|
309
|
-
return { valid: true };
|
|
310
|
-
}
|
|
311
|
-
function areRulesChanged(newRules, storedRules) {
|
|
312
|
-
const storedRulesKeys = Object.keys(storedRules);
|
|
313
|
-
const newRulesKeys = Object.keys(newRules);
|
|
314
|
-
if (newRulesKeys.length !== storedRulesKeys.length) return false;
|
|
315
|
-
const hasAllValidators = newRulesKeys.every((ruleKey) => storedRulesKeys.includes(ruleKey));
|
|
316
|
-
if (!hasAllValidators) return false;
|
|
317
|
-
return newRulesKeys.every((ruleKey) => {
|
|
318
|
-
const newRuleElement = newRules[ruleKey];
|
|
319
|
-
const storedRuleElement = storedRules[ruleKey];
|
|
320
|
-
if (!storedRuleElement || !newRuleElement || typeof newRuleElement === "function" || typeof storedRuleElement === "function")
|
|
321
|
-
return false;
|
|
322
|
-
if (typeof newRuleElement === "number") {
|
|
323
|
-
return false;
|
|
324
|
-
} else if (typeof newRuleElement === "boolean") {
|
|
325
|
-
return false;
|
|
326
|
-
} else if (!newRuleElement._params) return true;
|
|
327
|
-
else {
|
|
328
|
-
return newRuleElement._params?.every((paramKey, index) => {
|
|
329
|
-
if (typeof storedRuleElement === "number" || typeof storedRuleElement === "boolean") {
|
|
330
|
-
return true;
|
|
331
|
-
} else {
|
|
332
|
-
const storedParams = unwrapRuleParameters(storedRuleElement._params);
|
|
333
|
-
const newParams = unwrapRuleParameters(newRuleElement._params);
|
|
334
|
-
return storedParams?.[index] === newParams?.[index];
|
|
335
|
-
}
|
|
336
|
-
});
|
|
337
|
-
}
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
function trySetRuleStatusRef(path) {
|
|
341
|
-
const ruleStatus = ruleStatusStorage.value.get(path);
|
|
342
|
-
if (ruleStatus) {
|
|
343
|
-
return ruleStatus;
|
|
344
|
-
} else {
|
|
345
|
-
const $pending = vue.ref(false);
|
|
346
|
-
const $valid = vue.ref(true);
|
|
347
|
-
const $metadata = vue.ref({});
|
|
348
|
-
const $validating = vue.ref(false);
|
|
349
|
-
ruleStatusStorage.value.set(path, { $pending, $valid, $metadata, $validating });
|
|
350
|
-
return { $pending, $valid, $metadata, $validating };
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
vue.onScopeDispose(() => {
|
|
354
|
-
ruleDeclStorage.value.clear();
|
|
355
|
-
fieldsStorage.value.clear();
|
|
356
|
-
collectionsStorage.value.clear();
|
|
357
|
-
dirtyStorage.value.clear();
|
|
358
|
-
ruleStatusStorage.value.clear();
|
|
359
|
-
arrayStatusStorage.value.clear();
|
|
360
|
-
});
|
|
361
|
-
return {
|
|
362
|
-
addRuleDeclEntry,
|
|
363
|
-
setDirtyEntry,
|
|
364
|
-
checkRuleDeclEntry,
|
|
365
|
-
getDirtyState,
|
|
366
|
-
trySetRuleStatusRef,
|
|
367
|
-
getFieldsEntry,
|
|
368
|
-
getCollectionsEntry,
|
|
369
|
-
getArrayStatus,
|
|
370
|
-
addArrayStatus,
|
|
371
|
-
deleteArrayStatus,
|
|
372
|
-
arrayStatusStorage
|
|
373
|
-
};
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
// src/core/useRegle/guards/ruleDef.guards.ts
|
|
377
|
-
function isNestedRulesDef(state, rules) {
|
|
378
|
-
return isObject(state.value) && isObject(rules.value) && !Object.entries(rules.value).some((rule) => isRuleDef(rule));
|
|
379
|
-
}
|
|
380
|
-
function isCollectionRulesDef(rules) {
|
|
381
|
-
return !!rules.value && "$each" in rules.value;
|
|
382
|
-
}
|
|
383
|
-
function isValidatorRulesDef(rules) {
|
|
384
|
-
return !!rules.value && isObject(rules.value);
|
|
385
|
-
}
|
|
386
|
-
function isRuleDef(rule) {
|
|
387
|
-
return isObject(rule) && "_validator" in rule;
|
|
388
|
-
}
|
|
389
|
-
function isFormRuleDefinition(rule) {
|
|
390
|
-
return !(typeof rule.value === "function");
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
// src/core/useRegle/guards/rule.status.guards.ts
|
|
394
|
-
function isNestedRulesStatus(rule) {
|
|
395
|
-
return isObject(rule) && "$fields" in rule;
|
|
396
|
-
}
|
|
397
|
-
function isCollectionRulesStatus(rule) {
|
|
398
|
-
return !!rule && "$each" in rule;
|
|
399
|
-
}
|
|
400
|
-
function isFieldStatus(rule) {
|
|
401
|
-
return !!rule && "$rules" in rule;
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
// src/core/useRegle/guards/rule.errors.guards.ts
|
|
405
|
-
function isExternalErrorCollection(value) {
|
|
406
|
-
return "$each" in value || "$errors" in value;
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
// src/core/useRegle/useErrors.ts
|
|
410
|
-
function extractRulesErrors({
|
|
411
|
-
field,
|
|
412
|
-
silent = false
|
|
413
|
-
}) {
|
|
414
|
-
return Object.entries(field.$rules ?? {}).map(([ruleKey, rule]) => {
|
|
415
|
-
if (silent) {
|
|
416
|
-
return rule.$message;
|
|
417
|
-
} else if (!rule.$valid && field.$dirty) {
|
|
418
|
-
return rule.$message;
|
|
419
|
-
}
|
|
420
|
-
return null;
|
|
421
|
-
}).filter((msg) => !!msg).reduce((acc, value) => {
|
|
422
|
-
if (typeof value === "string") {
|
|
423
|
-
return acc?.concat([value]);
|
|
424
|
-
} else {
|
|
425
|
-
return acc?.concat(value);
|
|
426
|
-
}
|
|
427
|
-
}, []).concat(field.$externalErrors ?? []);
|
|
428
|
-
}
|
|
429
|
-
function processFieldErrors(fieldStatus, silent = false) {
|
|
430
|
-
if (isNestedRulesStatus(fieldStatus)) {
|
|
431
|
-
return extractNestedErrors(fieldStatus.$fields);
|
|
432
|
-
} else if (isCollectionRulesStatus(fieldStatus)) {
|
|
433
|
-
return {
|
|
434
|
-
$errors: fieldStatus.$field.$rules ? extractRulesErrors({ field: fieldStatus.$field, silent }) : [],
|
|
435
|
-
$each: fieldStatus.$each.map((field) => processFieldErrors(field, silent))
|
|
436
|
-
};
|
|
437
|
-
} else if (isFieldStatus(fieldStatus)) {
|
|
438
|
-
if (fieldStatus.$error) {
|
|
439
|
-
return extractRulesErrors({
|
|
440
|
-
field: fieldStatus,
|
|
441
|
-
silent
|
|
442
|
-
});
|
|
443
|
-
} else {
|
|
444
|
-
return fieldStatus.$externalErrors ?? [];
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
return [];
|
|
448
|
-
}
|
|
449
|
-
function extractCollectionError(each, silent = false) {
|
|
450
|
-
return each.map((field) => processFieldErrors(field, silent));
|
|
451
|
-
}
|
|
452
|
-
function extractNestedErrors(fields, silent = false) {
|
|
453
|
-
return Object.fromEntries(
|
|
454
|
-
Object.entries(fields).map(([fieldKey, fieldStatus]) => {
|
|
455
|
-
if (isNestedRulesStatus(fieldStatus)) {
|
|
456
|
-
return [fieldKey, extractNestedErrors(fieldStatus.$fields, silent)];
|
|
457
|
-
} else if (isCollectionRulesStatus(fieldStatus)) {
|
|
458
|
-
return [
|
|
459
|
-
fieldKey,
|
|
460
|
-
{
|
|
461
|
-
$errors: extractRulesErrors({ field: fieldStatus.$field, silent }),
|
|
462
|
-
$each: extractCollectionError(fieldStatus.$each, silent)
|
|
463
|
-
}
|
|
464
|
-
];
|
|
465
|
-
} else if (isFieldStatus(fieldStatus)) {
|
|
466
|
-
if (fieldStatus.$error) {
|
|
467
|
-
return [
|
|
468
|
-
fieldKey,
|
|
469
|
-
extractRulesErrors({
|
|
470
|
-
field: fieldStatus,
|
|
471
|
-
silent
|
|
472
|
-
})
|
|
473
|
-
];
|
|
474
|
-
} else {
|
|
475
|
-
return [fieldKey, fieldStatus.$externalErrors ?? []];
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
return [fieldKey, []];
|
|
479
|
-
})
|
|
480
|
-
);
|
|
481
|
-
}
|
|
482
|
-
function useErrors($regle) {
|
|
483
|
-
const errors = vue.computed(() => {
|
|
484
|
-
return extractNestedErrors($regle.$fields);
|
|
485
|
-
});
|
|
486
|
-
return errors;
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
// src/types/rules/rule.internal.types.ts
|
|
490
|
-
var InternalRuleType = /* @__PURE__ */ ((InternalRuleType3) => {
|
|
491
|
-
InternalRuleType3["Inline"] = "__inline";
|
|
492
|
-
InternalRuleType3["Async"] = "__async";
|
|
493
|
-
return InternalRuleType3;
|
|
494
|
-
})(InternalRuleType || {});
|
|
495
|
-
function mergeBooleanGroupProperties(entries, property) {
|
|
496
|
-
return vue.computed(() => {
|
|
497
|
-
return entries.value.some((entry) => {
|
|
498
|
-
return entry[property];
|
|
499
|
-
});
|
|
500
|
-
});
|
|
501
|
-
}
|
|
502
|
-
function mergeArrayGroupProperties(entries, property) {
|
|
503
|
-
return vue.computed(() => {
|
|
504
|
-
return entries.value.reduce((all, entry) => {
|
|
505
|
-
const fetchedProperty = entry[property] || [];
|
|
506
|
-
return all.concat(fetchedProperty);
|
|
507
|
-
}, []);
|
|
508
|
-
});
|
|
509
|
-
}
|
|
510
|
-
function createReactiveRuleStatus({
|
|
511
|
-
$dirty,
|
|
512
|
-
customMessages,
|
|
513
|
-
rule,
|
|
514
|
-
ruleKey,
|
|
515
|
-
state,
|
|
516
|
-
path,
|
|
517
|
-
storage,
|
|
518
|
-
$debounce
|
|
519
|
-
}) {
|
|
520
|
-
let scope = vue.effectScope();
|
|
521
|
-
let scopeState;
|
|
522
|
-
let $unwatchState;
|
|
523
|
-
const { $pending, $valid, $metadata, $validating } = storage.trySetRuleStatusRef(
|
|
524
|
-
`${path}.${ruleKey}`
|
|
525
|
-
);
|
|
526
|
-
function $watch() {
|
|
527
|
-
scopeState = scope.run(() => {
|
|
528
|
-
const $defaultMetadata = vue.computed(() => ({
|
|
529
|
-
$invalid: !$valid.value,
|
|
530
|
-
$params: $params.value,
|
|
531
|
-
...$metadata.value
|
|
532
|
-
}));
|
|
533
|
-
const $active = vue.computed(() => {
|
|
534
|
-
if (isFormRuleDefinition(rule)) {
|
|
535
|
-
if (typeof rule.value.active === "function") {
|
|
536
|
-
return rule.value.active(state.value, $defaultMetadata.value);
|
|
537
|
-
} else {
|
|
538
|
-
return rule.value.active;
|
|
539
|
-
}
|
|
540
|
-
} else {
|
|
541
|
-
return true;
|
|
542
|
-
}
|
|
543
|
-
});
|
|
544
|
-
const $message = vue.computed(() => {
|
|
545
|
-
let message = "";
|
|
546
|
-
const customMessageRule = customMessages ? customMessages[ruleKey]?.message : void 0;
|
|
547
|
-
if (customMessageRule) {
|
|
548
|
-
if (typeof customMessageRule === "function") {
|
|
549
|
-
message = customMessageRule(state.value, $defaultMetadata.value);
|
|
550
|
-
} else {
|
|
551
|
-
message = customMessageRule;
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
if (isFormRuleDefinition(rule)) {
|
|
555
|
-
if (!(customMessageRule && !rule.value._patched)) {
|
|
556
|
-
if (typeof rule.value.message === "function") {
|
|
557
|
-
message = rule.value.message(state.value, $defaultMetadata.value);
|
|
558
|
-
} else {
|
|
559
|
-
message = rule.value.message;
|
|
560
|
-
}
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
if (isEmpty(message)) {
|
|
564
|
-
message = "Error";
|
|
565
|
-
console.warn(`No error message defined for ${path}.${ruleKey}`);
|
|
566
|
-
}
|
|
567
|
-
return message;
|
|
568
|
-
});
|
|
569
|
-
const $type = vue.computed(() => {
|
|
570
|
-
if (isFormRuleDefinition(rule) && rule.value.type) {
|
|
571
|
-
return rule.value.type;
|
|
572
|
-
} else {
|
|
573
|
-
return ruleKey;
|
|
574
|
-
}
|
|
575
|
-
});
|
|
576
|
-
const $validator = vue.computed(() => {
|
|
577
|
-
if (isFormRuleDefinition(rule)) {
|
|
578
|
-
return rule.value.validator;
|
|
579
|
-
} else {
|
|
580
|
-
return rule.value;
|
|
581
|
-
}
|
|
582
|
-
});
|
|
583
|
-
const $params = vue.computed(() => {
|
|
584
|
-
if (typeof rule.value === "function") {
|
|
585
|
-
return [];
|
|
586
|
-
}
|
|
587
|
-
return unwrapRuleParameters(rule.value._params ?? []);
|
|
588
|
-
});
|
|
589
|
-
const $path = vue.computed(() => `${path}.${$type.value}`);
|
|
590
|
-
return {
|
|
591
|
-
$active,
|
|
592
|
-
$message,
|
|
593
|
-
$type,
|
|
594
|
-
$validator,
|
|
595
|
-
$params,
|
|
596
|
-
$path
|
|
597
|
-
};
|
|
598
|
-
});
|
|
599
|
-
$unwatchState = vue.watch(scopeState.$params, $validate, {
|
|
600
|
-
deep: true
|
|
601
|
-
});
|
|
602
|
-
}
|
|
603
|
-
$watch();
|
|
604
|
-
async function computeAsyncResult(promise) {
|
|
605
|
-
let ruleResult = false;
|
|
606
|
-
try {
|
|
607
|
-
$valid.value = true;
|
|
608
|
-
if ($dirty.value) {
|
|
609
|
-
$pending.value = true;
|
|
610
|
-
}
|
|
611
|
-
const promiseResult = await promise;
|
|
612
|
-
if (typeof promiseResult === "boolean") {
|
|
613
|
-
ruleResult = promiseResult;
|
|
614
|
-
} else {
|
|
615
|
-
const { $valid: $valid2, ...rest } = promiseResult;
|
|
616
|
-
ruleResult = $valid2;
|
|
617
|
-
$metadata.value = rest;
|
|
618
|
-
}
|
|
619
|
-
} catch (e) {
|
|
620
|
-
ruleResult = false;
|
|
621
|
-
} finally {
|
|
622
|
-
$pending.value = false;
|
|
623
|
-
}
|
|
624
|
-
return ruleResult;
|
|
625
|
-
}
|
|
626
|
-
const $computeAsyncDebounce = debounce(computeAsyncResult, $debounce ?? 100);
|
|
627
|
-
async function $validate() {
|
|
628
|
-
$validating.value = true;
|
|
629
|
-
const validator = scopeState.$validator.value;
|
|
630
|
-
let ruleResult = false;
|
|
631
|
-
const resultOrPromise = validator(state.value, ...scopeState.$params.value);
|
|
632
|
-
if (resultOrPromise instanceof Promise) {
|
|
633
|
-
const promiseDebounce = $computeAsyncDebounce(resultOrPromise);
|
|
634
|
-
ruleResult = await promiseDebounce;
|
|
635
|
-
} else {
|
|
636
|
-
if (resultOrPromise != null) {
|
|
637
|
-
if (typeof resultOrPromise === "boolean") {
|
|
638
|
-
ruleResult = resultOrPromise;
|
|
639
|
-
} else {
|
|
640
|
-
const { $valid: $valid2, ...rest } = resultOrPromise;
|
|
641
|
-
ruleResult = $valid2;
|
|
642
|
-
$metadata.value = rest;
|
|
643
|
-
}
|
|
644
|
-
}
|
|
645
|
-
}
|
|
646
|
-
$valid.value = ruleResult;
|
|
647
|
-
$validating.value = false;
|
|
648
|
-
return ruleResult;
|
|
649
|
-
}
|
|
650
|
-
function $reset() {
|
|
651
|
-
$valid.value = true;
|
|
652
|
-
$metadata.value = {};
|
|
653
|
-
$pending.value = false;
|
|
654
|
-
$validating.value = false;
|
|
655
|
-
$watch();
|
|
656
|
-
}
|
|
657
|
-
function $unwatch() {
|
|
658
|
-
$unwatchState();
|
|
659
|
-
scope.stop();
|
|
660
|
-
scope = vue.effectScope();
|
|
661
|
-
}
|
|
662
|
-
return vue.reactive({
|
|
663
|
-
...scopeState,
|
|
664
|
-
$pending,
|
|
665
|
-
$valid,
|
|
666
|
-
$metadata,
|
|
667
|
-
$validate,
|
|
668
|
-
$unwatch,
|
|
669
|
-
$watch,
|
|
670
|
-
$reset
|
|
671
|
-
});
|
|
672
|
-
}
|
|
673
|
-
|
|
674
|
-
// src/core/useRegle/useStateProperties/createReactiveFieldStatus.ts
|
|
675
|
-
function createReactiveFieldStatus({
|
|
676
|
-
state,
|
|
677
|
-
rulesDef,
|
|
678
|
-
customMessages,
|
|
679
|
-
path,
|
|
680
|
-
storage,
|
|
681
|
-
options,
|
|
682
|
-
externalErrors,
|
|
683
|
-
index,
|
|
684
|
-
onUnwatch
|
|
685
|
-
}) {
|
|
686
|
-
let scope = vue.effectScope();
|
|
687
|
-
let scopeState;
|
|
688
|
-
const $dirty = vue.ref(false);
|
|
689
|
-
const triggerPunishment = vue.ref(false);
|
|
690
|
-
const $externalErrors = vue.ref([]);
|
|
691
|
-
let $unwatchState;
|
|
692
|
-
let $unwatchValid;
|
|
693
|
-
let $unwatchExternalErrors;
|
|
694
|
-
let $unwatchDirty;
|
|
695
|
-
let $commit = () => {
|
|
696
|
-
};
|
|
697
|
-
function collectExternalErrors() {
|
|
698
|
-
$externalErrors.value = externalErrors.value ?? [];
|
|
699
|
-
}
|
|
700
|
-
collectExternalErrors();
|
|
701
|
-
function createReactiveRulesResult() {
|
|
702
|
-
const declaredRules = rulesDef.value;
|
|
703
|
-
const storeResult = storage.checkRuleDeclEntry(path, declaredRules);
|
|
704
|
-
$localOptions.value = Object.fromEntries(
|
|
705
|
-
Object.entries(declaredRules).filter(([ruleKey]) => ruleKey.startsWith("$"))
|
|
706
|
-
);
|
|
707
|
-
$rules.value = Object.fromEntries(
|
|
708
|
-
Object.entries(rulesDef.value).filter(([ruleKey]) => !ruleKey.startsWith("$")).map(([ruleKey, rule]) => {
|
|
709
|
-
if (rule) {
|
|
710
|
-
const ruleRef = vue.toRef(() => rule);
|
|
711
|
-
return [
|
|
712
|
-
ruleKey,
|
|
713
|
-
createReactiveRuleStatus({
|
|
714
|
-
$dirty,
|
|
715
|
-
customMessages,
|
|
716
|
-
rule: ruleRef,
|
|
717
|
-
ruleKey,
|
|
718
|
-
state,
|
|
719
|
-
path,
|
|
720
|
-
storage,
|
|
721
|
-
$debounce: $localOptions.value.$debounce
|
|
722
|
-
})
|
|
723
|
-
];
|
|
724
|
-
}
|
|
725
|
-
return [];
|
|
726
|
-
}).filter((ruleDef) => !!ruleDef.length)
|
|
727
|
-
);
|
|
728
|
-
$watch();
|
|
729
|
-
$commit = scopeState.$debounce.value ? debounce($commitHandler, scopeState.$debounce.value ?? 0) : $commitHandler;
|
|
730
|
-
if (storeResult?.valid != null) {
|
|
731
|
-
$dirty.value = storage.getDirtyState(path);
|
|
732
|
-
if ($dirty.value) {
|
|
733
|
-
$commit();
|
|
734
|
-
}
|
|
735
|
-
}
|
|
736
|
-
storage.addRuleDeclEntry(path, declaredRules);
|
|
737
|
-
}
|
|
738
|
-
function $unwatch() {
|
|
739
|
-
if ($rules.value) {
|
|
740
|
-
Object.entries($rules.value).forEach(([_, rule]) => {
|
|
741
|
-
rule.$unwatch();
|
|
742
|
-
});
|
|
743
|
-
}
|
|
744
|
-
$unwatchDirty();
|
|
745
|
-
if ($dirty.value) {
|
|
746
|
-
storage.setDirtyEntry(path, $dirty.value);
|
|
747
|
-
}
|
|
748
|
-
$unwatchState();
|
|
749
|
-
$unwatchValid();
|
|
750
|
-
$unwatchExternalErrors();
|
|
751
|
-
scope.stop();
|
|
752
|
-
scope = vue.effectScope();
|
|
753
|
-
onUnwatch?.();
|
|
754
|
-
}
|
|
755
|
-
function $watch() {
|
|
756
|
-
if ($rules.value) {
|
|
757
|
-
Object.entries($rules.value).forEach(([_, rule]) => {
|
|
758
|
-
rule.$watch();
|
|
759
|
-
});
|
|
760
|
-
}
|
|
761
|
-
scopeState = scope.run(() => {
|
|
762
|
-
const $anyDirty = vue.computed(() => $dirty.value);
|
|
763
|
-
const $debounce = vue.computed(() => {
|
|
764
|
-
return $localOptions.value.$debounce;
|
|
765
|
-
});
|
|
766
|
-
const $lazy = vue.computed(() => {
|
|
767
|
-
if ($localOptions.value.$lazy != null) {
|
|
768
|
-
return $localOptions.value.$lazy;
|
|
769
|
-
}
|
|
770
|
-
return vue.unref(options.lazy);
|
|
771
|
-
});
|
|
772
|
-
const $rewardEarly = vue.computed(() => {
|
|
773
|
-
if ($localOptions.value.$rewardEarly != null) {
|
|
774
|
-
return $localOptions.value.$rewardEarly;
|
|
775
|
-
}
|
|
776
|
-
return vue.unref(options.rewardEarly);
|
|
777
|
-
});
|
|
778
|
-
const $autoDirty = vue.computed(() => {
|
|
779
|
-
if ($localOptions.value.$autoDirty != null) {
|
|
780
|
-
return $localOptions.value.$autoDirty;
|
|
781
|
-
}
|
|
782
|
-
return vue.unref(options.autoDirty);
|
|
783
|
-
});
|
|
784
|
-
const $error = vue.computed(() => {
|
|
785
|
-
return $invalid.value && !$pending.value && $dirty.value;
|
|
786
|
-
});
|
|
787
|
-
const $errors = vue.computed(() => {
|
|
788
|
-
return extractRulesErrors({
|
|
789
|
-
field: {
|
|
790
|
-
$dirty: $dirty.value,
|
|
791
|
-
$externalErrors: $externalErrors.value,
|
|
792
|
-
$rules: $rules.value
|
|
793
|
-
}
|
|
794
|
-
});
|
|
795
|
-
});
|
|
796
|
-
const $silentErrors = vue.computed(() => {
|
|
797
|
-
return extractRulesErrors({
|
|
798
|
-
field: {
|
|
799
|
-
$dirty: $dirty.value,
|
|
800
|
-
$externalErrors: $externalErrors.value,
|
|
801
|
-
$rules: $rules.value
|
|
802
|
-
},
|
|
803
|
-
silent: true
|
|
804
|
-
});
|
|
805
|
-
});
|
|
806
|
-
const $pending = vue.computed(() => {
|
|
807
|
-
if (triggerPunishment.value || !$rewardEarly.value) {
|
|
808
|
-
return Object.entries($rules.value).some(([key, ruleResult]) => {
|
|
809
|
-
return ruleResult.$pending;
|
|
810
|
-
});
|
|
811
|
-
}
|
|
812
|
-
return false;
|
|
813
|
-
});
|
|
814
|
-
const $invalid = vue.computed(() => {
|
|
815
|
-
if ($externalErrors.value?.length) {
|
|
816
|
-
return true;
|
|
817
|
-
} else if (!$rewardEarly.value || $rewardEarly.value && triggerPunishment.value) {
|
|
818
|
-
return Object.entries($rules.value).some(([key, ruleResult]) => {
|
|
819
|
-
return !ruleResult.$valid;
|
|
820
|
-
});
|
|
821
|
-
}
|
|
822
|
-
return false;
|
|
823
|
-
});
|
|
824
|
-
const $valid = vue.computed(() => {
|
|
825
|
-
if ($dirty.value && !isEmpty(state.value)) {
|
|
826
|
-
if ($externalErrors.value?.length) {
|
|
827
|
-
return false;
|
|
828
|
-
} else if ($rewardEarly.value) {
|
|
829
|
-
return Object.entries($rules.value).every(([key, ruleResult]) => {
|
|
830
|
-
return ruleResult.$valid;
|
|
831
|
-
});
|
|
832
|
-
} else {
|
|
833
|
-
return !$invalid.value;
|
|
834
|
-
}
|
|
835
|
-
}
|
|
836
|
-
return false;
|
|
837
|
-
});
|
|
838
|
-
vue.watch($valid, (value) => {
|
|
839
|
-
if (value) {
|
|
840
|
-
triggerPunishment.value = false;
|
|
841
|
-
}
|
|
842
|
-
});
|
|
843
|
-
return {
|
|
844
|
-
$error,
|
|
845
|
-
$pending,
|
|
846
|
-
$invalid,
|
|
847
|
-
$valid,
|
|
848
|
-
$debounce,
|
|
849
|
-
$lazy,
|
|
850
|
-
$errors,
|
|
851
|
-
$silentErrors,
|
|
852
|
-
$rewardEarly,
|
|
853
|
-
$autoDirty,
|
|
854
|
-
$anyDirty
|
|
855
|
-
};
|
|
856
|
-
});
|
|
857
|
-
$unwatchExternalErrors = vue.watch(externalErrors, collectExternalErrors);
|
|
858
|
-
$unwatchState = vue.watch(
|
|
859
|
-
state,
|
|
860
|
-
() => {
|
|
861
|
-
if (scopeState.$autoDirty.value) {
|
|
862
|
-
if (!$dirty.value) {
|
|
863
|
-
$dirty.value = true;
|
|
864
|
-
}
|
|
865
|
-
}
|
|
866
|
-
if (rulesDef.value instanceof Function) {
|
|
867
|
-
createReactiveRulesResult();
|
|
868
|
-
}
|
|
869
|
-
$commit();
|
|
870
|
-
if (!scopeState.$rewardEarly.value !== false) ;
|
|
871
|
-
},
|
|
872
|
-
{ deep: isVueSuperiorOrEqualTo3dotFive ? 1 : true }
|
|
873
|
-
);
|
|
874
|
-
$unwatchDirty = vue.watch($dirty, () => {
|
|
875
|
-
storage.setDirtyEntry(path, $dirty.value);
|
|
876
|
-
});
|
|
877
|
-
$unwatchValid = vue.watch(scopeState.$valid, (valid) => {
|
|
878
|
-
if (scopeState.$rewardEarly.value && valid) {
|
|
879
|
-
triggerPunishment.value = false;
|
|
880
|
-
}
|
|
881
|
-
});
|
|
882
|
-
}
|
|
883
|
-
function $commitHandler() {
|
|
884
|
-
Object.entries($rules.value).forEach(([key, rule]) => {
|
|
885
|
-
rule.$validate();
|
|
886
|
-
});
|
|
887
|
-
}
|
|
888
|
-
const $rules = vue.ref();
|
|
889
|
-
const $localOptions = vue.ref();
|
|
890
|
-
createReactiveRulesResult();
|
|
891
|
-
function $reset() {
|
|
892
|
-
$dirty.value = false;
|
|
893
|
-
$externalErrors.value = [];
|
|
894
|
-
Object.entries($rules.value).forEach(([key, rule]) => {
|
|
895
|
-
rule.$reset();
|
|
896
|
-
});
|
|
897
|
-
if (!scopeState.$lazy.value) {
|
|
898
|
-
Object.entries($rules.value).map(([key, rule]) => {
|
|
899
|
-
return rule.$validate();
|
|
900
|
-
});
|
|
901
|
-
}
|
|
902
|
-
}
|
|
903
|
-
function $touch() {
|
|
904
|
-
if (!$dirty.value) {
|
|
905
|
-
$dirty.value = true;
|
|
906
|
-
if (!scopeState.$rewardEarly.value !== false) ;
|
|
907
|
-
$commit();
|
|
908
|
-
}
|
|
909
|
-
}
|
|
910
|
-
const $validate = scopeState.$debounce.value ? debounce($validateHandler, scopeState.$debounce.value ?? 0) : $validateHandler;
|
|
911
|
-
async function $validateHandler() {
|
|
912
|
-
try {
|
|
913
|
-
triggerPunishment.value = true;
|
|
914
|
-
if (scopeState.$autoDirty.value && $dirty.value && !scopeState.$pending.value) {
|
|
915
|
-
return !scopeState.$error.value;
|
|
916
|
-
} else {
|
|
917
|
-
const promises = Object.entries($rules.value).map(([key, rule]) => {
|
|
918
|
-
return rule.$validate();
|
|
919
|
-
});
|
|
920
|
-
const results = await Promise.allSettled(promises);
|
|
921
|
-
return results.every((value) => {
|
|
922
|
-
if (value.status === "fulfilled") {
|
|
923
|
-
return value.value;
|
|
924
|
-
} else {
|
|
925
|
-
return false;
|
|
926
|
-
}
|
|
927
|
-
});
|
|
928
|
-
}
|
|
929
|
-
} catch (e) {
|
|
930
|
-
return false;
|
|
931
|
-
}
|
|
932
|
-
}
|
|
933
|
-
function $clearExternalErrors() {
|
|
934
|
-
$externalErrors.value = [];
|
|
935
|
-
}
|
|
936
|
-
if (!scopeState.$lazy.value) {
|
|
937
|
-
$validateHandler();
|
|
938
|
-
}
|
|
939
|
-
return vue.reactive({
|
|
940
|
-
$dirty,
|
|
941
|
-
...scopeState,
|
|
942
|
-
$externalErrors,
|
|
943
|
-
$value: state,
|
|
944
|
-
$rules,
|
|
945
|
-
$reset,
|
|
946
|
-
$touch,
|
|
947
|
-
$validate,
|
|
948
|
-
$unwatch,
|
|
949
|
-
$watch,
|
|
950
|
-
$clearExternalErrors
|
|
951
|
-
});
|
|
952
|
-
}
|
|
953
|
-
|
|
954
|
-
// src/core/useRegle/useStateProperties/createReactiveCollectionStatus.ts
|
|
955
|
-
function createCollectionElement({
|
|
956
|
-
$id,
|
|
957
|
-
path,
|
|
958
|
-
index,
|
|
959
|
-
options,
|
|
960
|
-
storage,
|
|
961
|
-
stateValue,
|
|
962
|
-
customMessages,
|
|
963
|
-
rules,
|
|
964
|
-
externalErrors
|
|
965
|
-
}) {
|
|
966
|
-
const $fieldId = rules.$key ? rules.$key : randomId();
|
|
967
|
-
let $path = `${path}.${String($fieldId)}`;
|
|
968
|
-
if (typeof stateValue.value === "object" && stateValue.value != null) {
|
|
969
|
-
if (!stateValue.value.$id) {
|
|
970
|
-
Object.defineProperties(stateValue.value, {
|
|
971
|
-
$id: {
|
|
972
|
-
value: $fieldId,
|
|
973
|
-
enumerable: false,
|
|
974
|
-
configurable: false,
|
|
975
|
-
writable: false
|
|
976
|
-
}
|
|
977
|
-
});
|
|
978
|
-
} else {
|
|
979
|
-
$path = `${path}.${stateValue.value.$id}`;
|
|
980
|
-
}
|
|
981
|
-
}
|
|
982
|
-
const $externalErrors = vue.toRef(() => externalErrors.value?.[index]);
|
|
983
|
-
const $status = createReactiveChildrenStatus({
|
|
984
|
-
state: stateValue,
|
|
985
|
-
rulesDef: vue.toRef(() => rules),
|
|
986
|
-
customMessages,
|
|
987
|
-
path: $path,
|
|
988
|
-
storage,
|
|
989
|
-
options,
|
|
990
|
-
externalErrors: $externalErrors
|
|
991
|
-
});
|
|
992
|
-
if ($status) {
|
|
993
|
-
const valueId = stateValue.value?.$id;
|
|
994
|
-
$status.$id = valueId ?? String($fieldId);
|
|
995
|
-
storage.addArrayStatus($id, $status.$id, $status);
|
|
996
|
-
}
|
|
997
|
-
return $status;
|
|
998
|
-
}
|
|
999
|
-
function createReactiveCollectionStatus({
|
|
1000
|
-
state,
|
|
1001
|
-
rulesDef,
|
|
1002
|
-
customMessages,
|
|
1003
|
-
path,
|
|
1004
|
-
storage,
|
|
1005
|
-
options,
|
|
1006
|
-
externalErrors
|
|
1007
|
-
}) {
|
|
1008
|
-
let scope = vue.effectScope();
|
|
1009
|
-
let scopeState;
|
|
1010
|
-
let immediateScope = vue.effectScope();
|
|
1011
|
-
let immediateScopeState;
|
|
1012
|
-
if (Array.isArray(state.value) && !rulesDef.value.$each) {
|
|
1013
|
-
return null;
|
|
1014
|
-
}
|
|
1015
|
-
const $id = vue.ref();
|
|
1016
|
-
const $value = vue.ref(state.value);
|
|
1017
|
-
let $unwatchState = null;
|
|
1018
|
-
const $fieldStatus = vue.ref({});
|
|
1019
|
-
const $eachStatus = storage.getCollectionsEntry(path);
|
|
1020
|
-
immediateScopeState = immediateScope.run(() => {
|
|
1021
|
-
const isPrimitiveArray = vue.computed(() => {
|
|
1022
|
-
if (Array.isArray(state.value) && state.value.length) {
|
|
1023
|
-
return state.value.some((s) => typeof s !== "object");
|
|
1024
|
-
} else if (rulesDef.value.$each && !(rulesDef.value.$each instanceof Function)) {
|
|
1025
|
-
return Object.values(rulesDef.value.$each).every((rule) => isRuleDef(rule));
|
|
1026
|
-
}
|
|
1027
|
-
return false;
|
|
1028
|
-
});
|
|
1029
|
-
const $externalErrorsField = vue.computed(() => {
|
|
1030
|
-
if (externalErrors.value) {
|
|
1031
|
-
if (isExternalErrorCollection(externalErrors.value)) {
|
|
1032
|
-
return externalErrors.value.$errors ?? [];
|
|
1033
|
-
}
|
|
1034
|
-
return [];
|
|
1035
|
-
}
|
|
1036
|
-
return [];
|
|
1037
|
-
});
|
|
1038
|
-
const $externalErrorsEach = vue.computed(() => {
|
|
1039
|
-
if (externalErrors.value) {
|
|
1040
|
-
if (isExternalErrorCollection(externalErrors.value)) {
|
|
1041
|
-
return externalErrors.value.$each ?? [];
|
|
1042
|
-
}
|
|
1043
|
-
return [];
|
|
1044
|
-
}
|
|
1045
|
-
return [];
|
|
1046
|
-
});
|
|
1047
|
-
return {
|
|
1048
|
-
isPrimitiveArray,
|
|
1049
|
-
$externalErrorsField,
|
|
1050
|
-
$externalErrorsEach
|
|
1051
|
-
};
|
|
1052
|
-
});
|
|
1053
|
-
createStatus();
|
|
1054
|
-
$watch();
|
|
1055
|
-
function createStatus() {
|
|
1056
|
-
if (typeof state.value === "object") {
|
|
1057
|
-
if (state.value != null && !state.value?.$id && state.value !== null) {
|
|
1058
|
-
$id.value = randomId();
|
|
1059
|
-
Object.defineProperties(state.value, {
|
|
1060
|
-
$id: {
|
|
1061
|
-
value: $id.value,
|
|
1062
|
-
enumerable: false,
|
|
1063
|
-
configurable: false,
|
|
1064
|
-
writable: false
|
|
1065
|
-
}
|
|
1066
|
-
});
|
|
1067
|
-
} else if (state.value?.$id) {
|
|
1068
|
-
$id.value = state.value.$id;
|
|
1069
|
-
}
|
|
1070
|
-
}
|
|
1071
|
-
if (immediateScopeState.isPrimitiveArray.value) {
|
|
1072
|
-
return;
|
|
1073
|
-
}
|
|
1074
|
-
$value.value = $fieldStatus.value.$value;
|
|
1075
|
-
if (Array.isArray(state.value) && rulesDef.value.$each) {
|
|
1076
|
-
$eachStatus.value = state.value.map((value, index) => {
|
|
1077
|
-
const unwrapped$Each = unwrapGetter(
|
|
1078
|
-
rulesDef.value.$each,
|
|
1079
|
-
vue.toRef(() => value),
|
|
1080
|
-
index
|
|
1081
|
-
);
|
|
1082
|
-
if (unwrapped$Each) {
|
|
1083
|
-
const element = createCollectionElement({
|
|
1084
|
-
$id: $id.value,
|
|
1085
|
-
path,
|
|
1086
|
-
rules: unwrapped$Each,
|
|
1087
|
-
stateValue: vue.toRef(() => value),
|
|
1088
|
-
index,
|
|
1089
|
-
options,
|
|
1090
|
-
storage,
|
|
1091
|
-
externalErrors: immediateScopeState.$externalErrorsEach
|
|
1092
|
-
});
|
|
1093
|
-
if (element) {
|
|
1094
|
-
return element;
|
|
1095
|
-
}
|
|
1096
|
-
return null;
|
|
1097
|
-
}
|
|
1098
|
-
}).filter((each) => !!each);
|
|
1099
|
-
} else {
|
|
1100
|
-
$eachStatus.value = [];
|
|
1101
|
-
}
|
|
1102
|
-
$fieldStatus.value = createReactiveFieldStatus({
|
|
1103
|
-
state,
|
|
1104
|
-
rulesDef,
|
|
1105
|
-
customMessages,
|
|
1106
|
-
path,
|
|
1107
|
-
storage,
|
|
1108
|
-
options,
|
|
1109
|
-
externalErrors: immediateScopeState.$externalErrorsField
|
|
1110
|
-
});
|
|
1111
|
-
}
|
|
1112
|
-
function updateStatus() {
|
|
1113
|
-
if (Array.isArray(state.value)) {
|
|
1114
|
-
const previousStatus = cloneDeep($eachStatus.value);
|
|
1115
|
-
$eachStatus.value = state.value.map((value, index) => {
|
|
1116
|
-
const currentValue = vue.toRef(() => value);
|
|
1117
|
-
if (value.$id && $eachStatus.value.find((each) => each.$id === value.$id)) {
|
|
1118
|
-
const existingStatus = storage.getArrayStatus($id.value, value.$id);
|
|
1119
|
-
if (existingStatus) {
|
|
1120
|
-
existingStatus.$value = currentValue;
|
|
1121
|
-
return existingStatus;
|
|
1122
|
-
}
|
|
1123
|
-
return null;
|
|
1124
|
-
} else {
|
|
1125
|
-
const unwrapped$Each = unwrapGetter(rulesDef.value.$each, currentValue, index);
|
|
1126
|
-
if (unwrapped$Each) {
|
|
1127
|
-
const element = createCollectionElement({
|
|
1128
|
-
$id: $id.value,
|
|
1129
|
-
path,
|
|
1130
|
-
rules: unwrapped$Each,
|
|
1131
|
-
stateValue: currentValue,
|
|
1132
|
-
index,
|
|
1133
|
-
options,
|
|
1134
|
-
storage,
|
|
1135
|
-
externalErrors: immediateScopeState.$externalErrorsEach
|
|
1136
|
-
});
|
|
1137
|
-
if (element) {
|
|
1138
|
-
return element;
|
|
1139
|
-
}
|
|
1140
|
-
return null;
|
|
1141
|
-
}
|
|
1142
|
-
}
|
|
1143
|
-
}).filter((each) => !!each);
|
|
1144
|
-
previousStatus.filter(($each) => !state.value.find((f) => $each.$id === f.$id)).forEach(($each, index) => {
|
|
1145
|
-
storage.deleteArrayStatus($id.value, index.toString());
|
|
1146
|
-
});
|
|
1147
|
-
} else {
|
|
1148
|
-
$eachStatus.value = [];
|
|
1149
|
-
}
|
|
1150
|
-
}
|
|
1151
|
-
function $watch() {
|
|
1152
|
-
$unwatchState = vue.watch(
|
|
1153
|
-
state,
|
|
1154
|
-
() => {
|
|
1155
|
-
if (state.value != null && !Object.hasOwn(state.value, "$id")) {
|
|
1156
|
-
createStatus();
|
|
1157
|
-
} else {
|
|
1158
|
-
updateStatus();
|
|
1159
|
-
}
|
|
1160
|
-
},
|
|
1161
|
-
{ deep: isVueSuperiorOrEqualTo3dotFive ? 1 : true, flush: "pre" }
|
|
1162
|
-
);
|
|
1163
|
-
scopeState = scope.run(() => {
|
|
1164
|
-
const $dirty = vue.computed(() => {
|
|
1165
|
-
return $fieldStatus.value.$dirty && $eachStatus.value.every((statusOrField) => {
|
|
1166
|
-
return statusOrField.$dirty;
|
|
1167
|
-
});
|
|
1168
|
-
});
|
|
1169
|
-
const $anyDirty = vue.computed(() => {
|
|
1170
|
-
return $fieldStatus.value.$anyDirty || $eachStatus.value.some((statusOrField) => {
|
|
1171
|
-
return statusOrField.$dirty;
|
|
1172
|
-
});
|
|
1173
|
-
});
|
|
1174
|
-
const $invalid = vue.computed(() => {
|
|
1175
|
-
return $fieldStatus.value.$invalid || $eachStatus.value.some((statusOrField) => {
|
|
1176
|
-
return statusOrField.$invalid;
|
|
1177
|
-
});
|
|
1178
|
-
});
|
|
1179
|
-
const $valid = vue.computed(
|
|
1180
|
-
() => $fieldStatus.value.$valid && $eachStatus.value.every((statusOrField) => {
|
|
1181
|
-
return statusOrField.$valid;
|
|
1182
|
-
})
|
|
1183
|
-
);
|
|
1184
|
-
const $error = vue.computed(() => {
|
|
1185
|
-
return $fieldStatus.value.$error || $eachStatus.value.some((statusOrField) => {
|
|
1186
|
-
return statusOrField.$error;
|
|
1187
|
-
});
|
|
1188
|
-
});
|
|
1189
|
-
const $pending = vue.computed(() => {
|
|
1190
|
-
return $fieldStatus.value.$pending || $eachStatus.value.some((statusOrField) => {
|
|
1191
|
-
return statusOrField.$pending;
|
|
1192
|
-
});
|
|
1193
|
-
});
|
|
1194
|
-
const $errors = vue.computed(() => {
|
|
1195
|
-
return {
|
|
1196
|
-
$errors: extractRulesErrors({ field: $fieldStatus.value, silent: false }),
|
|
1197
|
-
$each: extractCollectionError($eachStatus.value)
|
|
1198
|
-
};
|
|
1199
|
-
});
|
|
1200
|
-
const $silentErrors = vue.computed(() => {
|
|
1201
|
-
return {
|
|
1202
|
-
$errors: extractRulesErrors({ field: $fieldStatus.value, silent: true }),
|
|
1203
|
-
$each: extractCollectionError($eachStatus.value, true)
|
|
1204
|
-
};
|
|
1205
|
-
});
|
|
1206
|
-
return {
|
|
1207
|
-
$dirty,
|
|
1208
|
-
$anyDirty,
|
|
1209
|
-
$invalid,
|
|
1210
|
-
$valid,
|
|
1211
|
-
$error,
|
|
1212
|
-
$pending,
|
|
1213
|
-
$errors,
|
|
1214
|
-
$silentErrors
|
|
1215
|
-
};
|
|
1216
|
-
});
|
|
1217
|
-
if (immediateScopeState.isPrimitiveArray.value) {
|
|
1218
|
-
console.warn(
|
|
1219
|
-
`${path} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`
|
|
1220
|
-
);
|
|
1221
|
-
$unwatchState();
|
|
1222
|
-
}
|
|
1223
|
-
}
|
|
1224
|
-
function $unwatch() {
|
|
1225
|
-
if ($unwatchState) {
|
|
1226
|
-
$unwatchState();
|
|
1227
|
-
}
|
|
1228
|
-
if ($fieldStatus.value) {
|
|
1229
|
-
$fieldStatus.value.$unwatch();
|
|
1230
|
-
}
|
|
1231
|
-
if ($eachStatus.value) {
|
|
1232
|
-
$eachStatus.value.forEach((element) => {
|
|
1233
|
-
if ("$dirty" in element) {
|
|
1234
|
-
element.$unwatch();
|
|
1235
|
-
}
|
|
1236
|
-
});
|
|
1237
|
-
}
|
|
1238
|
-
scope.stop();
|
|
1239
|
-
scope = vue.effectScope();
|
|
1240
|
-
immediateScope.stop();
|
|
1241
|
-
immediateScope = vue.effectScope(true);
|
|
1242
|
-
}
|
|
1243
|
-
function $touch() {
|
|
1244
|
-
$fieldStatus.value.$touch();
|
|
1245
|
-
$eachStatus.value.forEach(($each) => {
|
|
1246
|
-
$each.$touch();
|
|
1247
|
-
});
|
|
1248
|
-
}
|
|
1249
|
-
function $reset() {
|
|
1250
|
-
$fieldStatus.value.$reset();
|
|
1251
|
-
$eachStatus.value.forEach(($each) => {
|
|
1252
|
-
$each.$reset();
|
|
1253
|
-
});
|
|
1254
|
-
}
|
|
1255
|
-
async function $validate() {
|
|
1256
|
-
try {
|
|
1257
|
-
const results = await Promise.all([
|
|
1258
|
-
$fieldStatus.value.$validate(),
|
|
1259
|
-
...$eachStatus.value.map((rule) => {
|
|
1260
|
-
return rule.$validate();
|
|
1261
|
-
})
|
|
1262
|
-
]);
|
|
1263
|
-
return results.every((value) => !!value);
|
|
1264
|
-
} catch (e) {
|
|
1265
|
-
return false;
|
|
1266
|
-
}
|
|
1267
|
-
}
|
|
1268
|
-
function $clearExternalErrors() {
|
|
1269
|
-
}
|
|
1270
|
-
return vue.reactive({
|
|
1271
|
-
$field: $fieldStatus,
|
|
1272
|
-
...scopeState,
|
|
1273
|
-
$each: $eachStatus,
|
|
1274
|
-
$value: state,
|
|
1275
|
-
$validate,
|
|
1276
|
-
$unwatch,
|
|
1277
|
-
$watch,
|
|
1278
|
-
$touch,
|
|
1279
|
-
$reset,
|
|
1280
|
-
$clearExternalErrors
|
|
1281
|
-
});
|
|
1282
|
-
}
|
|
1283
|
-
|
|
1284
|
-
// src/core/useRegle/useStateProperties/createReactiveNestedStatus.ts
|
|
1285
|
-
function createReactiveNestedStatus({
|
|
1286
|
-
scopeRules,
|
|
1287
|
-
state,
|
|
1288
|
-
customMessages,
|
|
1289
|
-
path = "",
|
|
1290
|
-
rootRules,
|
|
1291
|
-
storage,
|
|
1292
|
-
options,
|
|
1293
|
-
externalErrors,
|
|
1294
|
-
validationGroups
|
|
1295
|
-
}) {
|
|
1296
|
-
let scope;
|
|
1297
|
-
let scopeState;
|
|
1298
|
-
let $unwatchFields;
|
|
1299
|
-
function createReactiveFieldsStatus(watch5 = true, forceFromGetter = false) {
|
|
1300
|
-
$fields.value = null;
|
|
1301
|
-
vue.triggerRef($fields);
|
|
1302
|
-
const scopedRulesStatus = Object.fromEntries(
|
|
1303
|
-
Object.entries(scopeRules.value).map(([statePropKey, statePropRules]) => {
|
|
1304
|
-
if (statePropRules) {
|
|
1305
|
-
const stateRef = vue.toRef(state.value, statePropKey);
|
|
1306
|
-
const statePropRulesRef = vue.toRef(() => statePropRules);
|
|
1307
|
-
const $externalErrors = vue.toRef(() => externalErrors.value?.[statePropKey]);
|
|
1308
|
-
return [
|
|
1309
|
-
statePropKey,
|
|
1310
|
-
createReactiveChildrenStatus({
|
|
1311
|
-
state: stateRef,
|
|
1312
|
-
rulesDef: statePropRulesRef,
|
|
1313
|
-
customMessages,
|
|
1314
|
-
path: path ? `${path}.${statePropKey}` : statePropKey,
|
|
1315
|
-
storage,
|
|
1316
|
-
options,
|
|
1317
|
-
externalErrors: $externalErrors
|
|
1318
|
-
})
|
|
1319
|
-
];
|
|
1320
|
-
}
|
|
1321
|
-
return [];
|
|
1322
|
-
}).filter(
|
|
1323
|
-
(rule) => !!rule.length && rule[1] != null
|
|
1324
|
-
)
|
|
1325
|
-
);
|
|
1326
|
-
const externalRulesStatus = Object.fromEntries(
|
|
1327
|
-
Object.entries(vue.unref(externalErrors) ?? {}).filter(([key]) => !(key in scopeRules.value)).map(([key, errors]) => {
|
|
1328
|
-
if (errors) {
|
|
1329
|
-
const statePropRulesRef = vue.toRef(() => ({}));
|
|
1330
|
-
const $externalErrors = vue.toRef(() => errors);
|
|
1331
|
-
return [
|
|
1332
|
-
key,
|
|
1333
|
-
createReactiveChildrenStatus({
|
|
1334
|
-
state: vue.ref(void 0),
|
|
1335
|
-
rulesDef: statePropRulesRef,
|
|
1336
|
-
customMessages,
|
|
1337
|
-
path: path ? `${path}.${key}` : key,
|
|
1338
|
-
storage,
|
|
1339
|
-
options,
|
|
1340
|
-
externalErrors: $externalErrors
|
|
1341
|
-
})
|
|
1342
|
-
];
|
|
1343
|
-
}
|
|
1344
|
-
return [];
|
|
1345
|
-
})
|
|
1346
|
-
);
|
|
1347
|
-
const groups = Object.fromEntries(
|
|
1348
|
-
Object.entries(validationGroups?.(scopedRulesStatus) ?? {}).map(([key, entries]) => {
|
|
1349
|
-
if (entries.length) {
|
|
1350
|
-
return [
|
|
1351
|
-
key,
|
|
1352
|
-
{
|
|
1353
|
-
...Object.fromEntries(
|
|
1354
|
-
["$invalid", "$error", "$pending", "$dirty", "$valid"].map(
|
|
1355
|
-
(property) => [
|
|
1356
|
-
property,
|
|
1357
|
-
mergeBooleanGroupProperties(
|
|
1358
|
-
vue.toRef(() => entries),
|
|
1359
|
-
property
|
|
1360
|
-
)
|
|
1361
|
-
]
|
|
1362
|
-
)
|
|
1363
|
-
),
|
|
1364
|
-
...Object.fromEntries(
|
|
1365
|
-
["$errors", "$silentErrors"].map((property) => [
|
|
1366
|
-
property,
|
|
1367
|
-
mergeArrayGroupProperties(
|
|
1368
|
-
vue.toRef(() => entries),
|
|
1369
|
-
property
|
|
1370
|
-
)
|
|
1371
|
-
])
|
|
1372
|
-
)
|
|
1373
|
-
}
|
|
1374
|
-
];
|
|
1375
|
-
}
|
|
1376
|
-
return [];
|
|
1377
|
-
})
|
|
1378
|
-
);
|
|
1379
|
-
$fields.value = { ...scopedRulesStatus, ...externalRulesStatus, ...groups };
|
|
1380
|
-
if (watch5) {
|
|
1381
|
-
$watch();
|
|
1382
|
-
}
|
|
1383
|
-
}
|
|
1384
|
-
let $fields = storage.getFieldsEntry(path);
|
|
1385
|
-
createReactiveFieldsStatus();
|
|
1386
|
-
function $reset() {
|
|
1387
|
-
createReactiveFieldsStatus(false);
|
|
1388
|
-
Object.entries($fields.value).forEach(([_, statusOrField]) => {
|
|
1389
|
-
statusOrField.$reset();
|
|
1390
|
-
});
|
|
1391
|
-
$watch();
|
|
1392
|
-
}
|
|
1393
|
-
function $touch() {
|
|
1394
|
-
Object.entries($fields.value).forEach(([_, statusOrField]) => {
|
|
1395
|
-
statusOrField.$touch();
|
|
1396
|
-
});
|
|
1397
|
-
}
|
|
1398
|
-
async function $validate() {
|
|
1399
|
-
try {
|
|
1400
|
-
const results = await Promise.allSettled(
|
|
1401
|
-
Object.entries($fields.value).map(([_, statusOrField]) => {
|
|
1402
|
-
return statusOrField.$validate();
|
|
1403
|
-
})
|
|
1404
|
-
);
|
|
1405
|
-
return results.every((value) => {
|
|
1406
|
-
if (value.status === "fulfilled") {
|
|
1407
|
-
return value.value;
|
|
1408
|
-
} else {
|
|
1409
|
-
return false;
|
|
1410
|
-
}
|
|
1411
|
-
});
|
|
1412
|
-
} catch (e) {
|
|
1413
|
-
return false;
|
|
1414
|
-
}
|
|
1415
|
-
}
|
|
1416
|
-
function $watch() {
|
|
1417
|
-
if (rootRules) {
|
|
1418
|
-
$unwatchFields = vue.watch(
|
|
1419
|
-
rootRules,
|
|
1420
|
-
() => {
|
|
1421
|
-
$unwatch();
|
|
1422
|
-
createReactiveFieldsStatus();
|
|
1423
|
-
},
|
|
1424
|
-
{ deep: isVueSuperiorOrEqualTo3dotFive ? 1 : true, flush: "post" }
|
|
1425
|
-
);
|
|
1426
|
-
}
|
|
1427
|
-
scope = vue.effectScope();
|
|
1428
|
-
scopeState = scope.run(() => {
|
|
1429
|
-
const $dirty = vue.computed(() => {
|
|
1430
|
-
return !!Object.entries($fields.value).length && Object.entries($fields.value).every(([key, statusOrField]) => {
|
|
1431
|
-
return statusOrField.$dirty;
|
|
1432
|
-
});
|
|
1433
|
-
});
|
|
1434
|
-
const $anyDirty = vue.computed(() => {
|
|
1435
|
-
return Object.entries($fields.value).some(([key, statusOrField]) => {
|
|
1436
|
-
return statusOrField.$dirty;
|
|
1437
|
-
});
|
|
1438
|
-
});
|
|
1439
|
-
const $invalid = vue.computed(() => {
|
|
1440
|
-
return Object.entries($fields.value).some(([key, statusOrField]) => {
|
|
1441
|
-
return statusOrField.$invalid;
|
|
1442
|
-
});
|
|
1443
|
-
});
|
|
1444
|
-
const $valid = vue.computed(() => {
|
|
1445
|
-
return Object.entries($fields.value).every(([key, statusOrField]) => {
|
|
1446
|
-
return statusOrField.$valid;
|
|
1447
|
-
});
|
|
1448
|
-
});
|
|
1449
|
-
const $error = vue.computed(() => {
|
|
1450
|
-
return Object.entries($fields.value).some(([key, statusOrField]) => {
|
|
1451
|
-
return statusOrField.$error;
|
|
1452
|
-
});
|
|
1453
|
-
});
|
|
1454
|
-
const $pending = vue.computed(() => {
|
|
1455
|
-
return Object.entries($fields.value).some(([key, statusOrField]) => {
|
|
1456
|
-
return statusOrField.$pending;
|
|
1457
|
-
});
|
|
1458
|
-
});
|
|
1459
|
-
const $errors = vue.computed(() => {
|
|
1460
|
-
return extractNestedErrors($fields.value);
|
|
1461
|
-
});
|
|
1462
|
-
const $silentErrors = vue.computed(() => {
|
|
1463
|
-
return extractNestedErrors($fields.value, true);
|
|
1464
|
-
});
|
|
1465
|
-
return {
|
|
1466
|
-
$dirty,
|
|
1467
|
-
$anyDirty,
|
|
1468
|
-
$invalid,
|
|
1469
|
-
$valid,
|
|
1470
|
-
$error,
|
|
1471
|
-
$pending,
|
|
1472
|
-
$errors,
|
|
1473
|
-
$silentErrors
|
|
1474
|
-
};
|
|
1475
|
-
});
|
|
1476
|
-
}
|
|
1477
|
-
function $unwatch() {
|
|
1478
|
-
if ($fields.value) {
|
|
1479
|
-
Object.entries($fields.value).forEach(([_, field]) => {
|
|
1480
|
-
field.$unwatch();
|
|
1481
|
-
});
|
|
1482
|
-
}
|
|
1483
|
-
$unwatchFields?.();
|
|
1484
|
-
scope.stop();
|
|
1485
|
-
scope = vue.effectScope();
|
|
1486
|
-
}
|
|
1487
|
-
function $clearExternalErrors() {
|
|
1488
|
-
Object.entries($fields.value).forEach(([_, field]) => {
|
|
1489
|
-
field.$clearExternalErrors();
|
|
1490
|
-
});
|
|
1491
|
-
}
|
|
1492
|
-
return vue.reactive({
|
|
1493
|
-
...scopeState,
|
|
1494
|
-
$fields,
|
|
1495
|
-
$value: state,
|
|
1496
|
-
$reset,
|
|
1497
|
-
$touch,
|
|
1498
|
-
$validate,
|
|
1499
|
-
$unwatch,
|
|
1500
|
-
$watch,
|
|
1501
|
-
$clearExternalErrors
|
|
1502
|
-
});
|
|
1503
|
-
}
|
|
1504
|
-
function createReactiveChildrenStatus({
|
|
1505
|
-
state,
|
|
1506
|
-
rulesDef,
|
|
1507
|
-
customMessages,
|
|
1508
|
-
path,
|
|
1509
|
-
storage,
|
|
1510
|
-
options,
|
|
1511
|
-
externalErrors,
|
|
1512
|
-
index,
|
|
1513
|
-
onUnwatch
|
|
1514
|
-
}) {
|
|
1515
|
-
if (isCollectionRulesDef(rulesDef)) {
|
|
1516
|
-
return createReactiveCollectionStatus({
|
|
1517
|
-
state,
|
|
1518
|
-
rulesDef,
|
|
1519
|
-
customMessages,
|
|
1520
|
-
path,
|
|
1521
|
-
storage,
|
|
1522
|
-
options,
|
|
1523
|
-
index,
|
|
1524
|
-
externalErrors
|
|
1525
|
-
});
|
|
1526
|
-
} else if (isNestedRulesDef(state, rulesDef) && isRefObject(state)) {
|
|
1527
|
-
return createReactiveNestedStatus({
|
|
1528
|
-
scopeRules: rulesDef,
|
|
1529
|
-
state,
|
|
1530
|
-
customMessages,
|
|
1531
|
-
path,
|
|
1532
|
-
storage,
|
|
1533
|
-
options,
|
|
1534
|
-
index,
|
|
1535
|
-
externalErrors
|
|
1536
|
-
});
|
|
1537
|
-
} else if (isValidatorRulesDef(rulesDef)) {
|
|
1538
|
-
return createReactiveFieldStatus({
|
|
1539
|
-
state,
|
|
1540
|
-
rulesDef,
|
|
1541
|
-
customMessages,
|
|
1542
|
-
path,
|
|
1543
|
-
storage,
|
|
1544
|
-
options,
|
|
1545
|
-
index,
|
|
1546
|
-
externalErrors,
|
|
1547
|
-
onUnwatch
|
|
1548
|
-
});
|
|
1549
|
-
}
|
|
1550
|
-
return null;
|
|
1551
|
-
}
|
|
1552
|
-
|
|
1553
|
-
// src/core/useRegle/useStateProperties/useStateProperties.ts
|
|
1554
|
-
function useStateProperties(scopeRules, state, options, customRules) {
|
|
1555
|
-
const storage = useStorage();
|
|
1556
|
-
const externalErrors = vue.computed(() => vue.unref(options.externalErrors));
|
|
1557
|
-
const regle = vue.reactive(
|
|
1558
|
-
createReactiveNestedStatus({
|
|
1559
|
-
rootRules: scopeRules,
|
|
1560
|
-
scopeRules,
|
|
1561
|
-
state,
|
|
1562
|
-
customMessages: customRules?.(),
|
|
1563
|
-
storage,
|
|
1564
|
-
options,
|
|
1565
|
-
externalErrors,
|
|
1566
|
-
validationGroups: options.validationGroups
|
|
1567
|
-
})
|
|
1568
|
-
);
|
|
1569
|
-
const errors = useErrors(regle);
|
|
1570
|
-
return { regle, errors };
|
|
1571
|
-
}
|
|
1572
|
-
|
|
1573
|
-
// src/core/useRegle/useRegle.ts
|
|
1574
|
-
function createUseRegleComposable(customRules, options) {
|
|
1575
|
-
const globalOptions = {
|
|
1576
|
-
autoDirty: options?.autoDirty ?? true,
|
|
1577
|
-
lazy: options?.lazy ?? false,
|
|
1578
|
-
rewardEarly: options?.rewardEarly ?? false
|
|
1579
|
-
};
|
|
1580
|
-
function useRegle2(state, rulesFactory, options2) {
|
|
1581
|
-
const scopeRules = vue.isRef(rulesFactory) ? rulesFactory : vue.computed(
|
|
1582
|
-
typeof rulesFactory === "function" ? rulesFactory : () => rulesFactory
|
|
1583
|
-
);
|
|
1584
|
-
const resolvedOptions = {
|
|
1585
|
-
...globalOptions,
|
|
1586
|
-
...options2
|
|
1587
|
-
};
|
|
1588
|
-
const processedState = vue.isRef(state) ? state : vue.ref(state);
|
|
1589
|
-
const initialState = cloneDeep(vue.toRaw(processedState.value));
|
|
1590
|
-
const { regle, errors } = useStateProperties(
|
|
1591
|
-
scopeRules,
|
|
1592
|
-
processedState,
|
|
1593
|
-
resolvedOptions,
|
|
1594
|
-
customRules
|
|
1595
|
-
);
|
|
1596
|
-
function resetAll() {
|
|
1597
|
-
regle.$unwatch();
|
|
1598
|
-
resetValuesRecursively(state, initialState);
|
|
1599
|
-
regle.$reset();
|
|
1600
|
-
}
|
|
1601
|
-
function resetValuesRecursively(current, initial) {
|
|
1602
|
-
Object.entries(initial).forEach(([key, value]) => {
|
|
1603
|
-
let currentRef = vue.isRef(current) ? current.value : current;
|
|
1604
|
-
let currentValue = vue.isRef(currentRef[key]) ? currentRef[key].value : currentRef[key];
|
|
1605
|
-
let initialRef = vue.isRef(initial[key]) ? initial[key]._value : initial[key];
|
|
1606
|
-
if (Array.isArray(initialRef) && Array.isArray(currentValue)) {
|
|
1607
|
-
currentRef[key] = [];
|
|
1608
|
-
initialRef.forEach((val, index) => {
|
|
1609
|
-
currentRef[key][index] = {};
|
|
1610
|
-
resetValuesRecursively(currentRef[key][index], initialRef[index]);
|
|
1611
|
-
});
|
|
1612
|
-
} else if (isObject(initialRef)) {
|
|
1613
|
-
resetValuesRecursively(currentValue, initialRef);
|
|
1614
|
-
} else {
|
|
1615
|
-
if (vue.isRef(currentRef[key])) {
|
|
1616
|
-
currentRef[key].value = initialRef;
|
|
1617
|
-
} else {
|
|
1618
|
-
currentRef[key] = initialRef;
|
|
1619
|
-
}
|
|
1620
|
-
}
|
|
1621
|
-
});
|
|
1622
|
-
}
|
|
1623
|
-
const ready = vue.computed(() => {
|
|
1624
|
-
return !(regle.$invalid || regle.$pending);
|
|
1625
|
-
});
|
|
1626
|
-
async function validateState() {
|
|
1627
|
-
regle.$touch();
|
|
1628
|
-
const result = await regle.$validate();
|
|
1629
|
-
if (result) {
|
|
1630
|
-
return processedState.value;
|
|
1631
|
-
}
|
|
1632
|
-
return false;
|
|
1633
|
-
}
|
|
1634
|
-
return {
|
|
1635
|
-
regle,
|
|
1636
|
-
r$: regle,
|
|
1637
|
-
errors,
|
|
1638
|
-
resetAll,
|
|
1639
|
-
validateState,
|
|
1640
|
-
ready,
|
|
1641
|
-
state: processedState
|
|
1642
|
-
};
|
|
1643
|
-
}
|
|
1644
|
-
return useRegle2;
|
|
1645
|
-
}
|
|
1646
|
-
var useRegle = createUseRegleComposable();
|
|
1647
|
-
|
|
1648
|
-
// src/core/defineRegleConfig.ts
|
|
1649
|
-
function defineRegleConfig({
|
|
1650
|
-
rules,
|
|
1651
|
-
modifiers
|
|
1652
|
-
}) {
|
|
1653
|
-
const useRegle2 = createUseRegleComposable(rules, modifiers);
|
|
1654
|
-
return useRegle2;
|
|
1655
|
-
}
|
|
1656
|
-
|
|
1657
|
-
exports.InternalRuleType = InternalRuleType;
|
|
1658
|
-
exports.createRule = createRule;
|
|
1659
|
-
exports.defineRegleConfig = defineRegleConfig;
|
|
1660
|
-
exports.unwrapRuleParameters = unwrapRuleParameters;
|
|
1661
|
-
exports.useRegle = useRegle;
|
|
1662
|
-
//# sourceMappingURL=index.cjs.map
|
|
1663
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3JlL2NyZWF0ZVJ1bGUvdW53cmFwUnVsZVBhcmFtZXRlcnMudHMiLCIuLi9zcmMvY29yZS9jcmVhdGVSdWxlL2RlZmluZVJ1bGVQcm9jZXNzb3JzLnRzIiwiLi4vc3JjL2NvcmUvY3JlYXRlUnVsZS9jcmVhdGVSdWxlLnRzIiwiLi4vc3JjL3V0aWxzL29iamVjdC51dGlscy50cyIsIi4uL3NyYy91dGlscy9pc0VtcHR5LnRzIiwiLi4vc3JjL3V0aWxzL2RlYm91bmNlLnRzIiwiLi4vc3JjL3V0aWxzL3ZlcnNpb24tY29tcGFyZS50cyIsIi4uL3NyYy91dGlscy9yYW5kb21JZC50cyIsIi4uL3NyYy9jb3JlL3VzZVN0b3JhZ2UvdXNlU3RvcmFnZS50cyIsIi4uL3NyYy9jb3JlL3VzZVJlZ2xlL2d1YXJkcy9ydWxlRGVmLmd1YXJkcy50cyIsIi4uL3NyYy9jb3JlL3VzZVJlZ2xlL2d1YXJkcy9ydWxlLnN0YXR1cy5ndWFyZHMudHMiLCIuLi9zcmMvY29yZS91c2VSZWdsZS9ndWFyZHMvcnVsZS5lcnJvcnMuZ3VhcmRzLnRzIiwiLi4vc3JjL2NvcmUvdXNlUmVnbGUvdXNlRXJyb3JzLnRzIiwiLi4vc3JjL3R5cGVzL3J1bGVzL3J1bGUuaW50ZXJuYWwudHlwZXMudHMiLCIuLi9zcmMvdHlwZXMvdXRpbHMvZ3JvdXBzLnRzIiwiLi4vc3JjL2NvcmUvdXNlUmVnbGUvdXNlU3RhdGVQcm9wZXJ0aWVzL2NyZWF0ZVJlYWN0aXZlUnVsZVN0YXR1cy50cyIsIi4uL3NyYy9jb3JlL3VzZVJlZ2xlL3VzZVN0YXRlUHJvcGVydGllcy9jcmVhdGVSZWFjdGl2ZUZpZWxkU3RhdHVzLnRzIiwiLi4vc3JjL2NvcmUvdXNlUmVnbGUvdXNlU3RhdGVQcm9wZXJ0aWVzL2NyZWF0ZVJlYWN0aXZlQ29sbGVjdGlvblN0YXR1cy50cyIsIi4uL3NyYy9jb3JlL3VzZVJlZ2xlL3VzZVN0YXRlUHJvcGVydGllcy9jcmVhdGVSZWFjdGl2ZU5lc3RlZFN0YXR1cy50cyIsIi4uL3NyYy9jb3JlL3VzZVJlZ2xlL3VzZVN0YXRlUHJvcGVydGllcy91c2VTdGF0ZVByb3BlcnRpZXMudHMiLCIuLi9zcmMvY29yZS91c2VSZWdsZS91c2VSZWdsZS50cyIsIi4uL3NyYy9jb3JlL2RlZmluZVJlZ2xlQ29uZmlnLnRzIl0sIm5hbWVzIjpbInVucmVmIiwiaXNSZWYiLCJ0b1JlZiIsInZhbGlkYXRvciIsInZlcnNpb24iLCJzaGFsbG93UmVmIiwicmVmIiwib25TY29wZURpc3Bvc2UiLCJjb21wdXRlZCIsIkludGVybmFsUnVsZVR5cGUiLCJlZmZlY3RTY29wZSIsIndhdGNoIiwiJHZhbGlkIiwicmVhY3RpdmUiLCJ0cmlnZ2VyUmVmIiwidXNlUmVnbGUiLCJvcHRpb25zIiwidG9SYXciXSwibWFwcGluZ3MiOiI7Ozs7O0FBT08sU0FBUyxxQkFBNEMsTUFBOEIsRUFBQTtBQUN4RixFQUFPLE9BQUEsTUFBQSxDQUFPLEdBQUksQ0FBQSxDQUFDLEtBQVUsS0FBQTtBQUMzQixJQUFBLElBQUksaUJBQWlCLFFBQVUsRUFBQTtBQUM3QixNQUFBLE9BQU8sS0FBTSxFQUFBO0FBQUE7QUFFZixJQUFBLE9BQU9BLFVBQU0sS0FBSyxDQUFBO0FBQUEsR0FDbkIsQ0FBQTtBQUNIO0FBTU8sU0FBUyxxQkFBNEMsTUFBOEIsRUFBQTtBQUN4RixFQUFPLE9BQUEsTUFBQSxDQUFPLEdBQUksQ0FBQSxDQUFDLEtBQVUsS0FBQTtBQUMzQixJQUFBLElBQUksaUJBQWlCLFFBQVUsRUFBQTtBQUM3QixNQUFPLE9BQUEsS0FBQTtBQUFBLEtBQ1QsTUFBQSxJQUFXQyxTQUFNLENBQUEsS0FBSyxDQUFHLEVBQUE7QUFDdkIsTUFBTyxPQUFBLEtBQUE7QUFBQTtBQUVULElBQU8sT0FBQUMsU0FBQSxDQUFNLE1BQU0sS0FBSyxDQUFBO0FBQUEsR0FDekIsQ0FBQTtBQUNIO0FBS08sU0FBUyw0QkFBNEIsSUFBd0IsRUFBQTtBQUNsRSxFQUFNLE1BQUEsT0FBQSxHQUFVLEtBQUssUUFBUyxFQUFBO0FBQzlCLEVBQU0sTUFB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LGFBQWtCLE1BQU07QUFDcEMsTUFBTyxPQUFBLEVBQUUsS0FBTSxDQUFBLFFBQUEsSUFBWSxLQUFNLENBQUEsUUFBQSxDQUFBO0FBQUEsS0FDbEMsQ0FBQTtBQUVELElBQUEsZUFBZSxhQUFvRSxHQUFBO0FBQ2pGLE1BQUEsS0FBQSxDQUFNLE1BQU8sRUFBQTtBQUNiLE1BQU0sTUFBQSxNQUFBLEdBQVMsTUFBTSxLQUFBLENBQU0sU0FBVSxFQUFBO0FBQ3JDLE1BQUEsSUFBSSxNQUFRLEVBQUE7QUFDVixRQUFBLE9BQU8sY0FBZSxDQUFBLEtBQUE7QUFBQTtBQUV4QixNQUFPLE9BQUEsS0FBQTtBQUFBO0FBR1QsSUFBTyxPQUFBO0FBQUEsTUFDTCxLQUFBO0FBQUEsTUFDQSxFQUFJLEVBQUEsS0FBQTtBQUFBLE1BQ0osTUFBQTtBQUFBLE1BQ0EsUUFBQTtBQUFBLE1BQ0EsYUFBQTtBQUFBLE1BQ0EsS0FBQTtBQUFBLE1BQ0EsS0FBTyxFQUFBO0FBQUEsS0FDVDtBQUFBO0FBR0YsRUFBT08sT0FBQUEsU0FBQUE7QUFDVDtBQUVPLElBQU0sV0FBVyx3QkFBeUI7OztBQ2pJMUMsU0FBUyxpQkFBc0UsQ0FBQTtBQUFBLEVBQ3BGLEtBQUE7QUFBQSxFQUNBO0FBQ0YsQ0FHRyxFQUFBO0FBQ0QsRUFBTUEsTUFBQUEsU0FBQUEsR0FBVyx3QkFBdUMsQ0FBQSxLQUFBLEVBQU8sU0FBUyxDQUFBO0FBRXhFLEVBQU9BLE9BQUFBLFNBQUFBO0FBQ1QiLCJmaWxlIjoiaW5kZXguY2pzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNSZWYsIHRvUmVmLCB1bnJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgdHlwZSB7IFBhcmFtRGVjbCB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuLyoqXG4gKiBSZXR1cm5zIGEgY2xlYW4gbGlzdCBvZiBwYXJhbWV0ZXJzXG4gKiBSZW1vdmluZyBSZWYgYW5kIGV4ZWN1dGluZyBmdW5jdGlvbiB0byByZXR1cm4gdGhlIHVud3JhcGVkIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBSdWxlUGFyYW1ldGVyczxUUGFyYW1zIGV4dGVuZHMgYW55W10+KHBhcmFtczogUGFyYW1EZWNsW10pOiBUUGFyYW1zIHtcbiAgcmV0dXJuIHBhcmFtcy5tYXAoKHBhcmFtKSA9PiB7XG4gICAgaWYgKHBhcmFtIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgIHJldHVybiBwYXJhbSgpO1xuICAgIH1cbiAgICByZXR1cm4gdW5yZWYocGFyYW0pO1xuICB9KSBhcyBUUGFyYW1zO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjbGVhbiBsaXN0IG9mIHBhcmFtZXRlcnNcbiAqIFJlbW92aW5nIFJlZiBhbmQgZXhlY3V0aW5nIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgdW53cmFwZWQgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlYWN0aXZlUGFyYW1zPFRQYXJhbXMgZXh0ZW5kcyBhbnlbXT4ocGFyYW1zOiBQYXJhbURlY2xbXSk6IFRQYXJhbXMge1xuICByZXR1cm4gcGFyYW1zLm1hcCgocGFyYW0pID0+IHtcbiAgICBpZiAocGFyYW0gaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgcmV0dXJuIHBhcmFtO1xuICAgIH0gZWxzZSBpZiAoaXNSZWYocGFyYW0pKSB7XG4gICAgICByZXR1cm4gcGFyYW07XG4gICAgfVxuICAgIHJldHVybiB0b1JlZigoKSA9PiBwYXJhbSk7XG4gIH0pIGFzIFRQYXJhbXM7XG59XG5cbi8qKlxuICogRHVlIHRvIGBmdW5jdGlvbi5sZW5ndGhgIG5vdCByZXR1cm5pbmcgZGVmYXVsdCBwYXJhbWV0ZXJzLCBpdCBuZWVkIHRvIHBhcnNlIHRoZSBmdW5jLnRvU3RyaW5nKClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZ1bmN0aW9uUGFyYW1ldGVyc0xlbmd0aChmdW5jOiBGdW5jdGlvbik6IG51bWJlciB7XG4gIGNvbnN0IGZ1bmNTdHIgPSBmdW5jLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGlzQXJyb3dGdW5jdGlvbiA9IGZ1bmNTdHIuaW5jbHVkZXMoJz0+Jyk7XG4gIGNvbnN0IHBhcmFtcyA9IChpc0Fycm93RnVuY3Rpb24gPyBmdW5jU3RyLnNwbGl0KCc9PicpWzBdIDogZnVuY1N0cilcbiAgICAuc2xpY2UoZnVuY1N0ci5pbmRleE9mKCcoJykgKyAxLCBmdW5jU3RyLmluZGV4T2YoJyknKSlcbiAgICAuc3BsaXQoJywnKVxuICAgIC5tYXAoKHBhcmFtKSA9PiBwYXJhbS50cmltKCkpO1xuICBjb25zdCBkZWZhdWx0cyA9IHBhcmFtcy5maWx0ZXIoKHBhcmFtKSA9PiBwYXJhbS5pbmNsdWRlcygnPScpKTtcbiAgcmV0dXJuIGRlZmF1bHRzLmxlbmd0aCArIGZ1bmMubGVuZ3RoO1xufVxuIiwiaW1wb3J0IHR5cGUge1xuICAkSW50ZXJuYWxSZWdsZVJ1bGVEZWZpbml0aW9uLFxuICAkSW50ZXJuYWxSZWdsZVJ1bGVJbml0LFxuICAkSW50ZXJuYWxSZWdsZVJ1bGVNZXRhZGF0YUNvbnN1bWVyLFxuICBSZWdsZVJ1bGVNZXRhZGF0YURlZmluaXRpb24sXG59IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZVJlYWN0aXZlUGFyYW1zLCB1bndyYXBSdWxlUGFyYW1ldGVycyB9IGZyb20gJy4vdW53cmFwUnVsZVBhcmFtZXRlcnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUnVsZVByb2Nlc3NvcnMoXG4gIGRlZmluaXRpb246ICRJbnRlcm5hbFJlZ2xlUnVsZUluaXQsXG4gIC4uLnBhcmFtczogYW55W11cbik6ICRJbnRlcm5hbFJlZ2xlUnVsZURlZmluaXRpb24ge1xuICBjb25zdCB7IG1lc3NhZ2UsIHZhbGlkYXRvciwgYWN0aXZlLCAuLi5wcm9wZXJ0aWVzIH0gPSBkZWZpbml0aW9uO1xuXG4gIGNvbnN0IGlzQXN5bmMgPSB2YWxpZGF0b3IuY29uc3RydWN0b3IubmFtZSA9PT0gJ0FzeW5jRnVuY3Rpb24nO1xuXG4gIGNvbnN0IGRlZmF1bHRQcm9jZXNzb3JzID0ge1xuICAgIHZhbGlkYXRvcih2YWx1ZTogYW55LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgICAgcmV0dXJuIGRlZmluaXRpb24udmFsaWRhdG9yKHZhbHVlLCAuLi51bndyYXBSdWxlUGFyYW1ldGVycyhhcmdzLmxlbmd0aCA/IGFyZ3MgOiBwYXJhbXMpKTtcbiAgICB9LFxuICAgIG1lc3NhZ2UodmFsdWU6IGFueSwgbWV0YWRhdGE6ICRJbnRlcm5hbFJlZ2xlUnVsZU1ldGFkYXRhQ29uc3VtZXIpIHtcbiAgICAgIGlmICh0eXBlb2YgZGVmaW5pdGlvbi5tZXNzYWdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uLm1lc3NhZ2UodmFsdWUsIHtcbiAgICAgICAgICAuLi5tZXRhZGF0YSxcbiAgICAgICAgICAkcGFyYW1zOiB1bndyYXBSdWxlUGFyYW1ldGVycyhtZXRhZGF0YS4kcGFyYW1zPy5sZW5ndGggPyBtZXRhZGF0YS4kcGFyYW1zIDogcGFyYW1zKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmaW5pdGlvbi5tZXNzYWdlO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhY3RpdmUodmFsdWU6IGFueSwgbWV0YWRhdGE6ICRJbnRlcm5hbFJlZ2xlUnVsZU1ldGFkYXRhQ29uc3VtZXIpIHtcbiAgICAgIGlmICh0eXBlb2YgZGVmaW5pdGlvbi5hY3RpdmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb24uYWN0aXZlKHZhbHVlLCB7XG4gICAgICAgICAgLi4ubWV0YWRhdGEsXG4gICAgICAgICAgJHBhcmFtczogdW53cmFwUnVsZVBhcmFtZXRlcnMobWV0YWRhdGEuJHBhcmFtcz8ubGVuZ3RoID8gbWV0YWRhdGEuJHBhcmFtcyA6IHBhcmFtcyksXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb24uYWN0aXZlID8/IHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBleGVjKHZhbHVlOiBhbnkpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRvciA9IGRlZmluaXRpb24udmFsaWRhdG9yKHZhbHVlLCAuLi51bndyYXBSdWxlUGFyYW1ldGVycyhwYXJhbXMpKTtcbiAgICAgIGxldCByYXdSZXN1bHQ6IFJlZ2xlUnVsZU1ldGFkYXRhRGVmaW5pdGlvbjtcbiAgICAgIGlmICh2YWxpZGF0b3IgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3IudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgcmF3UmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgIGlmICh0eXBlb2YgcmF3UmVzdWx0ID09PSAnb2JqZWN0JyAmJiAnJHZhbGlkJyBpbiByYXdSZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiByYXdSZXN1bHQuJHZhbGlkO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJhd1Jlc3VsdCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICByZXR1cm4gcmF3UmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmF3UmVzdWx0ID0gdmFsaWRhdG9yO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJhd1Jlc3VsdCA9PT0gJ29iamVjdCcgJiYgJyR2YWxpZCcgaW4gcmF3UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiByYXdSZXN1bHQuJHZhbGlkO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmF3UmVzdWx0ID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIHJhd1Jlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IHByb2Nlc3NvcnMgPSB7XG4gICAgLi4uZGVmYXVsdFByb2Nlc3NvcnMsXG4gICAgLi4ucHJvcGVydGllcyxcbiAgICAuLi57XG4gICAgICBfdmFsaWRhdG9yOiBkZWZpbml0aW9uLnZhbGlkYXRvciBhcyBhbnksXG4gICAgICBfbWVzc2FnZTogZGVmaW5pdGlvbi5tZXNzYWdlLFxuICAgICAgX2FjdGl2ZTogZGVmaW5pdGlvbi5hY3RpdmUsXG4gICAgICBfdHlwZTogZGVmaW5pdGlvbi50eXBlLFxuICAgICAgX3BhdGNoZWQ6IGZhbHNlLFxuICAgICAgX2FzeW5jOiBpc0FzeW5jLFxuICAgICAgX3BhcmFtczogY3JlYXRlUmVhY3RpdmVQYXJhbXM8bmV2ZXI+KHBhcmFtcyksXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gcHJvY2Vzc29ycztcbn1cbiIsImltcG9ydCB0eXBlIHtcbiAgSW5mZXJSZWdsZVJ1bGUsXG4gIFJlZ2xlUnVsZUluaXQsXG4gIFJlZ2xlUnVsZU1ldGFkYXRhRGVmaW5pdGlvbixcbiAgUmVnbGVSdWxlVHlwZVJldHVybixcbiAgUmVnbGVVbml2ZXJzYWxQYXJhbXMsXG59IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGRlZmluZVJ1bGVQcm9jZXNzb3JzIH0gZnJvbSAnLi9kZWZpbmVSdWxlUHJvY2Vzc29ycyc7XG5pbXBvcnQgeyBnZXRGdW5jdGlvblBhcmFtZXRlcnNMZW5ndGggfSBmcm9tICcuL3Vud3JhcFJ1bGVQYXJhbWV0ZXJzJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENyZWF0ZSBhIHR5cGVkIGN1c3RvbSBydWxlIHRoYXQgY2FuIGJlIHVzZWQgbGlrZSBkZWZhdWx0IHJ1bGVzLlxuICogSXQgY2FuIGFsc28gYmUgZGVjbGFyZWQgaW4gdGhlIGdsb2JhbCBvcHRpb25zXG4gKlxuICogSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCBpZiB0aGUgcnVsZSBpcyBhc3luY1xuICpcbiAqIEB0eXBlUGFyYW0gVFZhbHVlIC0gVGhlIGlucHV0IHZhbHVlIHRoZSBydWxlIHNob3VsZCByZWNlaXZlXG4gKiBAdHlwZVBhcmFtIFRQYXJhbXMgLSBUdXBsZSBkZWNsYXJhdGlvbiBvZiB0aGUgcnVsZSBwYXJhbWV0ZXJzIChpZiBhbnkpXG4gKlxuICogQHBhcmFtIGRlZmluaXRpb24gLSBUaGUgcnVsZSBwcm9jZXNzb3JzIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIEEgcnVsZSBkZWZpbml0aW9uIHRoYXQgY2FuIGJlIGNhbGxhYmxlIGRlcGVuZGluZyBvbiBwYXJhbXMgcHJlc2VuY2VcbiAqXG4gKiBAZXhlbXBsZVxuICpcbiAqIGBgYHRzXG4gKiAvLyBDcmVhdGUgYSBzaW1wbGUgcnVsZSB3aXRoIG5vIHBhcmFtc1xuICogaW1wb3J0IHtydWxlSGVscGVyc30gZnJvbSAnQHJlZ2xlL3J1bGVzJztcbiAqXG4gKiBleHBvcnQgY29uc3QgaXNGb28gPSBjcmVhdGVSdWxlKHtcbiAqICAgdmFsaWRhdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAqICAgICAgIGlmIChydWxlSGVscGVycy5pc0ZpbGxlZCh2YWx1ZSkpIHtcbiAqICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09ICdmb28nO1xuICogICAgICAgfVxuICogICAgICAgcmV0dXJuIHRydWVcbiAqICAgfSxcbiAqICAgbWVzc2FnZTogXCJUaGUgdmFsdWUgc2hvdWxkIGJlICdmb28nXCJcbiAqIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJ1bGU8XG4gIFRWYWx1ZSBleHRlbmRzIGFueSxcbiAgVFBhcmFtcyBleHRlbmRzIGFueVtdLFxuICBUUmV0dXJuIGV4dGVuZHMgUmVnbGVSdWxlTWV0YWRhdGFEZWZpbml0aW9uIHwgUHJvbWlzZTxSZWdsZVJ1bGVNZXRhZGF0YURlZmluaXRpb24+LFxuICBUTWV0YWRhdGEgZXh0ZW5kcyBSZWdsZVJ1bGVNZXRhZGF0YURlZmluaXRpb24gPSBUUmV0dXJuIGV4dGVuZHMgUHJvbWlzZTxpbmZlciBNPiA/IE0gOiBUUmV0dXJuLFxuICBUQXN5bmMgZXh0ZW5kcyBib29sZWFuID0gVFJldHVybiBleHRlbmRzIFByb21pc2U8YW55PiA/IHRydWUgOiBmYWxzZSxcbj4oXG4gIGRlZmluaXRpb246IFJlZ2xlUnVsZUluaXQ8VFZhbHVlLCBUUGFyYW1zLCBUUmV0dXJuLCBUTWV0YWRhdGEsIFRBc3luYz5cbik6IEluZmVyUmVnbGVSdWxlPFRWYWx1ZSwgVFBhcmFtcywgVEFzeW5jLCBUTWV0YWRhdGE+IHtcbiAgaWYgKHR5cGVvZiBkZWZpbml0aW9uLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGxldCBmYWtlUGFyYW1zOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IHN0YXRpY1Byb2Nlc3NvcnMgPSBkZWZpbmVSdWxlUHJvY2Vzc29ycyhkZWZpbml0aW9uIGFzIGFueSwgLi4uZmFrZVBhcmFtcyk7XG5cbiAgICBjb25zdCBpc0FzeW5jID0gZGVmaW5pdGlvbi52YWxpZGF0b3IuY29uc3RydWN0b3IubmFtZSA9PT0gJ0FzeW5jRnVuY3Rpb24nO1xuICAgIC8vIEZvciB2YWxpZGF0b3JzIG5lZWRpbmcgYSBwYXJhbXMgbGlrZSBtYXhMZW5ndGggb3IgcmVxdWlyZWRJZlxuICAgIGlmIChnZXRGdW5jdGlvblBhcmFtZXRlcnNMZW5ndGgoZGVmaW5pdGlvbi52YWxpZGF0b3IpID4gMSkge1xuICAgICAgLy8gRm9yIHZhbGlkYXRvcnMgd2l0aCBwYXJhbSwgcmV0dXJuIGEgZnVuY3Rpb24gcHJvdmlkaW5nIHBhcmFtcyBmb3IgYWxsIHRoZSBydWxlIHByb2Nlc3NvcnNcbiAgICAgIGNvbnN0IHJ1bGVGYWN0b3J5ID0gZnVuY3Rpb24gKC4uLnBhcmFtczogUmVnbGVVbml2ZXJzYWxQYXJhbXM8VFBhcmFtcz4pIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZVJ1bGVQcm9jZXNzb3JzKGRlZmluaXRpb24gYXMgYW55LCAuLi5wYXJhbXMpO1xuICAgICAgfTtcblxuICAgICAgLy8gQXNzaWduIGFsbCB0aGUgaW50ZXJuYWxzIHRvIHRoZSBydWxlIHJhdyBmdW5jdGlvbiBzbyB0aGV5IGFyZSBhY2Nlc3NpYmxlIHdpdGhvdXQgY2FsbGluZyBpdFxuICAgICAgcnVsZUZhY3RvcnkudmFsaWRhdG9yID0gc3RhdGljUHJvY2Vzc29ycy52YWxpZGF0b3I7XG4gICAgICBydWxlRmFjdG9yeS5tZXNzYWdlID0gc3RhdGljUHJvY2Vzc29ycy5tZXNzYWdlO1xuICAgICAgcnVsZUZhY3RvcnkuYWN0aXZlID0gc3RhdGljUHJvY2Vzc29ycy5hY3RpdmU7XG4gICAgICBydWxlRmFjdG9yeS50eXBlID0gc3RhdGljUHJvY2Vzc29ycy50eXBlO1xuICAgICAgcnVsZUZhY3RvcnkuZXhlYyA9IHN0YXRpY1Byb2Nlc3NvcnMuZXhlYztcblxuICAgICAgcnVsZUZhY3RvcnkuX3ZhbGlkYXRvciA9IHN0YXRpY1Byb2Nlc3NvcnMudmFsaWRhdG9yO1xuICAgICAgcnVsZUZhY3RvcnkuX21lc3NhZ2UgPSBzdGF0aWNQcm9jZXNzb3JzLm1lc3NhZ2U7XG4gICAgICBydWxlRmFjdG9yeS5fYWN0aXZlID0gc3RhdGljUHJvY2Vzc29ycy5hY3RpdmU7XG4gICAgICBydWxlRmFjdG9yeS5fdHlwZSA9IGRlZmluaXRpb24udHlwZTtcbiAgICAgIHJ1bGVGYWN0b3J5Ll9wYXRjaGVkID0gZmFsc2U7XG4gICAgICBydWxlRmFjdG9yeS5fYXN5bmMgPSBpc0FzeW5jIGFzIFRBc3luYztcbiAgICAgIHJldHVybiBydWxlRmFjdG9yeSBhcyBhbnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzdGF0aWNQcm9jZXNzb3JzIGFzIGFueTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdWYWxpZGF0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG59XG4iLCJpbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgdHlwZSB7IE1heWJlR2V0dGVyIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3Qob2JqOiB1bmtub3duKTogb2JqIGlzIFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KG9iaik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZk9iamVjdChvYmo6IFJlZjx1bmtub3duPik6IG9iaiBpcyBSZWY8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICByZXR1cm4gaXNPYmplY3Qob2JqLnZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lRGVlcDxUPihvYmo6IFQpOiBUIHtcbiAgbGV0IHJlc3VsdCA9IG9iaiBhcyBhbnk7XG4gIGxldCB0eXBlID0ge30udG9TdHJpbmcuY2FsbChvYmopLnNsaWNlKDgsIC0xKTtcbiAgaWYgKHR5cGUgPT0gJ1NldCcpIHtcbiAgICByZXN1bHQgPSBuZXcgU2V0KFsuLi4ob2JqIGFzIGFueSldLm1hcCgodmFsdWUpID0+IGNsb25lRGVlcCh2YWx1ZSkpKTtcbiAgfVxuICBpZiAodHlwZSA9PSAnTWFwJykge1xuICAgIHJlc3VsdCA9IG5ldyBNYXAoWy4uLihvYmogYXMgYW55KV0ubWFwKChrdikgPT4gW2Nsb25lRGVlcChrdlswXSksIGNsb25lRGVlcChrdlsxXSldKSk7XG4gIH1cbiAgaWYgKHR5cGUgPT0gJ0RhdGUnKSB7XG4gICAgcmVzdWx0ID0gbmV3IERhdGUoKG9iaiBhcyBhbnkpLmdldFRpbWUoKSk7XG4gIH1cbiAgaWYgKHR5cGUgPT0gJ1JlZ0V4cCcpIHtcbiAgICByZXN1bHQgPSBSZWdFeHAoKG9iaiBhcyBhbnkpLnNvdXJjZSwgZ2V0UmVnRXhwRmxhZ3Mob2JqKSk7XG4gIH1cbiAgaWYgKHR5cGUgPT0gJ0FycmF5JyB8fCB0eXBlID09ICdPYmplY3QnKSB7XG4gICAgcmVzdWx0ID0gQXJyYXkuaXNBcnJheShvYmopID8gW10gOiB7fTtcbiAgICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XG4gICAgICAvLyBpbmNsdWRlIHByb3RvdHlwZSBwcm9wZXJ0aWVzXG4gICAgICByZXN1bHRba2V5XSA9IGNsb25lRGVlcChvYmpba2V5XSk7XG4gICAgfVxuICB9XG4gIC8vIHByaW1pdGl2ZXMgYW5kIG5vbi1zdXBwb3J0ZWQgb2JqZWN0cyAoZS5nLiBmdW5jdGlvbnMpIGxhbmQgaGVyZVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBnZXRSZWdFeHBGbGFncyhyZWdFeHA6IGFueSkge1xuICBpZiAodHlwZW9mIHJlZ0V4cC5zb3VyY2UuZmxhZ3MgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcmVnRXhwLnNvdXJjZS5mbGFncztcbiAgfSBlbHNlIHtcbiAgICBsZXQgZmxhZ3MgPSBbXTtcbiAgICByZWdFeHAuZ2xvYmFsICYmIGZsYWdzLnB1c2goJ2cnKTtcbiAgICByZWdFeHAuaWdub3JlQ2FzZSAmJiBmbGFncy5wdXNoKCdpJyk7XG4gICAgcmVnRXhwLm11bHRpbGluZSAmJiBmbGFncy5wdXNoKCdtJyk7XG4gICAgcmVnRXhwLnN0aWNreSAmJiBmbGFncy5wdXNoKCd5Jyk7XG4gICAgcmVnRXhwLnVuaWNvZGUgJiYgZmxhZ3MucHVzaCgndScpO1xuICAgIHJldHVybiBmbGFncy5qb2luKCcnKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwR2V0dGVyPFQgZXh0ZW5kcyBhbnk+KFxuICBnZXR0ZXI6IE1heWJlR2V0dGVyPFQsIGFueT4sXG4gIHZhbHVlOiBSZWY8YW55PixcbiAgaW5kZXg/OiBudW1iZXJcbik6IFQge1xuICBpZiAoZ2V0dGVyIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICByZXR1cm4gZ2V0dGVyKHZhbHVlLCBpbmRleCA/PyAwKTtcbiAgfVxuICByZXR1cm4gZ2V0dGVyO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudWxsIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgLy8gaW52YWxpZCBkYXRlIHdvbid0IHBhc3NcbiAgICByZXR1cm4gaXNOYU4odmFsdWUuZ2V0VGltZSgpKTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUubGVuZ3RoID09PSAwO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiAhU3RyaW5nKHZhbHVlLnRyaW0oKSkubGVuZ3RoO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsImludGVyZmFjZSBEZWJvdW5jZWRGdW5jdGlvbiB7XG4gICguLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHVua25vd24+O1xuICBjYW5jZWwoKTogdm9pZDtcbiAgZG9JbW1lZGlhdGVseSguLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHVua25vd24+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2U8VCBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55IHwgUHJvbWlzZTxhbnk+PihcbiAgdGhpczogYW55LFxuICBmdW5jOiBULFxuICB3YWl0OiBudW1iZXIsXG4gIGltbWVkaWF0ZT86IGJvb2xlYW5cbik6IFQge1xuICBsZXQgdGltZW91dDogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGRlYm91bmNlZEZuOiBEZWJvdW5jZWRGdW5jdGlvbiA9ICguLi5hcmdzKSA9PlxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGZ1bmMuYXBwbHkodGhpcywgWy4uLmFyZ3NdIGFzIGFueSkpLnRoZW4ocmVzb2x2ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHdhaXQpO1xuICAgICAgaWYgKGltbWVkaWF0ZSAmJiAhdGltZW91dCkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoZnVuYy5hcHBseSh0aGlzLCBbLi4uYXJnc10gYXMgYW55KSkudGhlbihyZXNvbHZlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBkZWJvdW5jZWRGbi5jYW5jZWwgPSAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gIH07XG5cbiAgZGVib3VuY2VkRm4uZG9JbW1lZGlhdGVseSA9ICguLi5hcmdzKSA9PlxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShmdW5jLmFwcGx5KHRoaXMsIFsuLi5hcmdzXSBhcyBhbnkpKS50aGVuKHJlc29sdmUpO1xuICAgICAgfSwgMCk7XG4gICAgfSk7XG5cbiAgcmV0dXJuIGRlYm91bmNlZEZuIGFzIHVua25vd24gYXMgVDtcbn1cbiIsImltcG9ydCB7IHZlcnNpb24gfSBmcm9tICd2dWUnO1xuXG5leHBvcnQgdHlwZSBWZXJzaW9uID0gc3RyaW5nIHwgbnVtYmVyO1xuZXhwb3J0IGVudW0gVmVyc2lvbklzIHtcbiAgTGVzc1RoYW4gPSAtMSxcbiAgRXF1YWxUbyA9IDAsXG4gIEdyZWF0ZXJUaGFuID0gMSxcbn1cblxuLyoqXG4gKiBDb21wYXJlIHR3byB2ZXJzaW9ucyBxdWlja2x5LlxuICogQHBhcmFtIGN1cnJlbnQgSXMgdGhpcyB2ZXJzaW9uIGdyZWF0ZXIsIGVxdWFsIHRvLCBvciBsZXNzIHRoYW4gdGhlIG90aGVyP1xuICogQHBhcmFtIG90aGVyIFRoZSB2ZXJzaW9uIHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgY3VycmVudCB2ZXJzaW9uXG4gKiBAcmV0dXJuIDEgaWYgY3VycmVudCBpcyBncmVhdGVyIHRoYW4gb3RoZXIsIDAgaWYgdGhleSBhcmUgZXF1YWwgb3IgZXF1aXZhbGVudCwgYW5kIC0xIGlmIGN1cnJlbnQgaXMgbGVzcyB0aGFuIG90aGVyXG4gKi9cbmZ1bmN0aW9uIHZlcnNpb25Db21wYXJlKGN1cnJlbnQ6IFZlcnNpb24sIG90aGVyOiBWZXJzaW9uKTogVmVyc2lvbklzIHtcbiAgY29uc3QgY3AgPSBTdHJpbmcoY3VycmVudCkuc3BsaXQoJy4nKTtcbiAgY29uc3Qgb3AgPSBTdHJpbmcob3RoZXIpLnNwbGl0KCcuJyk7XG4gIGZvciAobGV0IGRlcHRoID0gMDsgZGVwdGggPCBNYXRoLm1pbihjcC5sZW5ndGgsIG9wLmxlbmd0aCk7IGRlcHRoKyspIHtcbiAgICBjb25zdCBjbiA9IE51bWJlcihjcFtkZXB0aF0pO1xuICAgIGNvbnN0IG9uID0gTnVtYmVyKG9wW2RlcHRoXSk7XG4gICAgaWYgKGNuID4gb24pIHJldHVybiBWZXJzaW9uSXMuR3JlYXRlclRoYW47XG4gICAgaWYgKG9uID4gY24pIHJldHVybiBWZXJzaW9uSXMuTGVzc1RoYW47XG4gICAgaWYgKCFpc05hTihjbikgJiYgaXNOYU4ob24pKSByZXR1cm4gVmVyc2lvbklzLkdyZWF0ZXJUaGFuO1xuICAgIGlmIChpc05hTihjbikgJiYgIWlzTmFOKG9uKSkgcmV0dXJuIFZlcnNpb25Jcy5MZXNzVGhhbjtcbiAgfVxuICByZXR1cm4gVmVyc2lvbklzLkVxdWFsVG87XG59XG5cbmV4cG9ydCBjb25zdCBpc1Z1ZVN1cGVyaW9yT3JFcXVhbFRvM2RvdEZpdmUgPVxuICB2ZXJzaW9uQ29tcGFyZSh2ZXJzaW9uLCAnMy41LjAnKSA9PT0gLTEgPyBmYWxzZSA6IHRydWU7XG4iLCJmdW5jdGlvbiB1bmlxdWVJRE51eHQoKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBEYXRlLm5vdygpKS50b1N0cmluZygpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tSWQoKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHVuaXF1ZUlETnV4dCgpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHVpbnQzMiA9IHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgxKSlbMF07XG4gICAgcmV0dXJuIHVpbnQzMi50b1N0cmluZygxMCk7XG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB7IG9uU2NvcGVEaXNwb3NlLCByZWYsIHNoYWxsb3dSZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHR5cGUgeyAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGUsIFJlZ2xlUnVsZURlY2wgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyB1bndyYXBSdWxlUGFyYW1ldGVycyB9IGZyb20gJy4uL2NyZWF0ZVJ1bGUvdW53cmFwUnVsZVBhcmFtZXRlcnMnO1xuXG5leHBvcnQgdHlwZSBTdG9yZWRSdWxlU3RhdHVzID0ge1xuICAkdmFsaWQ6IFJlZjxib29sZWFuPjtcbiAgJHBlbmRpbmc6IFJlZjxib29sZWFuPjtcbiAgJG1ldGFkYXRhOiBSZWY8UmVjb3JkPHN0cmluZywgYW55Pj47XG4gICR2YWxpZGF0aW5nOiBSZWY8Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgdHlwZSBSZWdsZVN0b3JhZ2UgPSBSZXR1cm5UeXBlPHR5cGVvZiB1c2VTdG9yYWdlPjtcblxuLyoqXG4gKiBJbnNwaXJlZCBieSBWdWVsaWRhdGUgc3RvcmFnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3RvcmFnZSgpIHtcbiAgY29uc3QgcnVsZURlY2xTdG9yYWdlID0gc2hhbGxvd1JlZihuZXcgTWFwPHN0cmluZywgUmVnbGVSdWxlRGVjbDxhbnksIGFueT4+KCkpO1xuICBjb25zdCBmaWVsZHNTdG9yYWdlID0gc2hhbGxvd1JlZihcbiAgICBuZXcgTWFwPHN0cmluZywgUmVmPFJlY29yZDxzdHJpbmcsICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZT4+PigpXG4gICk7XG4gIGNvbnN0IGNvbGxlY3Rpb25zU3RvcmFnZSA9IHNoYWxsb3dSZWYobmV3IE1hcDxzdHJpbmcsIFJlZjxBcnJheTwkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGU+Pj4oKSk7XG4gIGNvbnN0IGRpcnR5U3RvcmFnZSA9IHNoYWxsb3dSZWYobmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCkpO1xuICBjb25zdCBydWxlU3RhdHVzU3RvcmFnZSA9IHNoYWxsb3dSZWYobmV3IE1hcDxzdHJpbmcsIFN0b3JlZFJ1bGVTdGF0dXM+KCkpO1xuXG4gIGNvbnN0IGFycmF5U3RhdHVzU3RvcmFnZSA9IHNoYWxsb3dSZWYobmV3IE1hcDxzdHJpbmcsICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZT4oKSk7XG5cbiAgZnVuY3Rpb24gZ2V0RmllbGRzRW50cnkoJHBhdGg6IHN0cmluZyk6IFJlZjxSZWNvcmQ8c3RyaW5nLCAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGU+PiB7XG4gICAgY29uc3QgZXhpc3RpbmdGaWVsZHMgPSBmaWVsZHNTdG9yYWdlLnZhbHVlLmdldCgkcGF0aCk7XG4gICAgaWYgKGV4aXN0aW5nRmllbGRzKSB7XG4gICAgICByZXR1cm4gZXhpc3RpbmdGaWVsZHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0ICRmaWVsZHMgPSByZWYoe30pIGFzIFJlZjxSZWNvcmQ8c3RyaW5nLCAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGU+PjtcbiAgICAgIGZpZWxkc1N0b3JhZ2UudmFsdWUuc2V0KCRwYXRoLCAkZmllbGRzKTtcbiAgICAgIHJldHVybiAkZmllbGRzO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENvbGxlY3Rpb25zRW50cnkoJHBhdGg6IHN0cmluZyk6IFJlZjxBcnJheTwkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGU+PiB7XG4gICAgY29uc3QgZXhpc3RpbmdFYWNoID0gY29sbGVjdGlvbnNTdG9yYWdlLnZhbHVlLmdldCgkcGF0aCk7XG4gICAgaWYgKGV4aXN0aW5nRWFjaCkge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nRWFjaDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgJGVhY2ggPSByZWY8QXJyYXk8JEludGVybmFsUmVnbGVTdGF0dXNUeXBlPj4oW10pO1xuICAgICAgY29sbGVjdGlvbnNTdG9yYWdlLnZhbHVlLnNldCgkcGF0aCwgJGVhY2gpO1xuICAgICAgcmV0dXJuICRlYWNoO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbGxlY3Rpb25zXG5cbiAgZnVuY3Rpb24gYWRkQXJyYXlTdGF0dXMoJGFycmF5SWQ6IHN0cmluZywgaXRlbUlkOiBzdHJpbmcsIHZhbHVlOiAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGUpIHtcbiAgICBhcnJheVN0YXR1c1N0b3JhZ2UudmFsdWUuc2V0KGAkeyRhcnJheUlkfS0ke2l0ZW1JZH1gLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRBcnJheVN0YXR1cygkYXJyYXlJZDogc3RyaW5nLCBpdGVtSWQ6IHN0cmluZykge1xuICAgIHJldHVybiBhcnJheVN0YXR1c1N0b3JhZ2UudmFsdWUuZ2V0KGAkeyRhcnJheUlkfS0ke2l0ZW1JZH1gKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlbGV0ZUFycmF5U3RhdHVzKCRhcnJheUlkOiBzdHJpbmcsIGl0ZW1JZD86IHN0cmluZykge1xuICAgIGlmICgkYXJyYXlJZCAmJiBpdGVtSWQgIT0gbnVsbCkge1xuICAgICAgYXJyYXlTdGF0dXNTdG9yYWdlLnZhbHVlLmRlbGV0ZShgJHskYXJyYXlJZH0tJHtpdGVtSWR9YCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0RGlydHlFbnRyeSgkcGF0aDogc3RyaW5nLCBkaXJ0eTogYm9vbGVhbikge1xuICAgIGRpcnR5U3RvcmFnZS52YWx1ZS5zZXQoJHBhdGgsIGRpcnR5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERpcnR5U3RhdGUocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRpcnR5U3RvcmFnZS52YWx1ZS5nZXQocGF0aCkgPz8gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRSdWxlRGVjbEVudHJ5KCRwYXRoOiBzdHJpbmcsIG9wdGlvbnM6IFJlZ2xlUnVsZURlY2w8YW55LCBhbnk+KSB7XG4gICAgcnVsZURlY2xTdG9yYWdlLnZhbHVlLnNldCgkcGF0aCwgb3B0aW9ucyk7XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja1J1bGVEZWNsRW50cnkoXG4gICAgJHBhdGg6IHN0cmluZyxcbiAgICBuZXdSdWxlczogUmVnbGVSdWxlRGVjbFxuICApOiB7IHZhbGlkOiBib29sZWFuIH0gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHN0b3JlZFJ1bGVzRGVmcyA9IHJ1bGVEZWNsU3RvcmFnZS52YWx1ZS5nZXQoJHBhdGgpO1xuXG4gICAgaWYgKCFzdG9yZWRSdWxlc0RlZnMpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBzdG9yZWRSdWxlcyA9IHN0b3JlZFJ1bGVzRGVmcztcblxuICAgIGNvbnN0IGlzVmFsaWRDYWNoZSA9IGFyZVJ1bGVzQ2hhbmdlZChuZXdSdWxlcywgc3RvcmVkUnVsZXMpO1xuXG4gICAgaWYgKCFpc1ZhbGlkQ2FjaGUpIHJldHVybiB7IHZhbGlkOiBmYWxzZSB9O1xuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gIH1cblxuICBmdW5jdGlvbiBhcmVSdWxlc0NoYW5nZWQobmV3UnVsZXM6IFJlZ2xlUnVsZURlY2wsIHN0b3JlZFJ1bGVzOiBSZWdsZVJ1bGVEZWNsKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RvcmVkUnVsZXNLZXlzID0gT2JqZWN0LmtleXMoc3RvcmVkUnVsZXMpO1xuICAgIGNvbnN0IG5ld1J1bGVzS2V5cyA9IE9iamVjdC5rZXlzKG5ld1J1bGVzKTtcblxuICAgIGlmIChuZXdSdWxlc0tleXMubGVuZ3RoICE9PSBzdG9yZWRSdWxlc0tleXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBoYXNBbGxWYWxpZGF0b3JzID0gbmV3UnVsZXNLZXlzLmV2ZXJ5KChydWxlS2V5KSA9PiBzdG9yZWRSdWxlc0tleXMuaW5jbHVkZXMocnVsZUtleSkpO1xuICAgIGlmICghaGFzQWxsVmFsaWRhdG9ycykgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIG5ld1J1bGVzS2V5cy5ldmVyeSgocnVsZUtleSkgPT4ge1xuICAgICAgY29uc3QgbmV3UnVsZUVsZW1lbnQgPSBuZXdSdWxlc1tydWxlS2V5XTtcbiAgICAgIGNvbnN0IHN0b3JlZFJ1bGVFbGVtZW50ID0gc3RvcmVkUnVsZXNbcnVsZUtleV07XG4gICAgICBpZiAoXG4gICAgICAgICFzdG9yZWRSdWxlRWxlbWVudCB8fFxuICAgICAgICAhbmV3UnVsZUVsZW1lbnQgfHxcbiAgICAgICAgdHlwZW9mIG5ld1J1bGVFbGVtZW50ID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiBzdG9yZWRSdWxlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAvLyAkZGVib3VuY2VcbiAgICAgIGlmICh0eXBlb2YgbmV3UnVsZUVsZW1lbnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gJGxhenksICRhdXRvRGlydHkgZXRjLi5cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5ld1J1bGVFbGVtZW50ID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICghbmV3UnVsZUVsZW1lbnQuX3BhcmFtcykgcmV0dXJuIHRydWU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ld1J1bGVFbGVtZW50Ll9wYXJhbXM/LmV2ZXJ5KChwYXJhbUtleSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHN0b3JlZFJ1bGVFbGVtZW50ID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygc3RvcmVkUnVsZUVsZW1lbnQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlZFBhcmFtcyA9IHVud3JhcFJ1bGVQYXJhbWV0ZXJzKHN0b3JlZFJ1bGVFbGVtZW50Ll9wYXJhbXMgYXMgYW55W10pO1xuICAgICAgICAgICAgY29uc3QgbmV3UGFyYW1zID0gdW53cmFwUnVsZVBhcmFtZXRlcnMobmV3UnVsZUVsZW1lbnQuX3BhcmFtcyBhcyBhbnlbXSk7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmVkUGFyYW1zPy5baW5kZXhdID09PSBuZXdQYXJhbXM/LltpbmRleF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeVNldFJ1bGVTdGF0dXNSZWYocGF0aDogc3RyaW5nKTogU3RvcmVkUnVsZVN0YXR1cyB7XG4gICAgY29uc3QgcnVsZVN0YXR1cyA9IHJ1bGVTdGF0dXNTdG9yYWdlLnZhbHVlLmdldChwYXRoKTtcbiAgICBpZiAocnVsZVN0YXR1cykge1xuICAgICAgcmV0dXJuIHJ1bGVTdGF0dXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0ICRwZW5kaW5nID0gcmVmKGZhbHNlKTtcbiAgICAgIGNvbnN0ICR2YWxpZCA9IHJlZih0cnVlKTtcbiAgICAgIGNvbnN0ICRtZXRhZGF0YSA9IHJlZih7fSk7XG4gICAgICBjb25zdCAkdmFsaWRhdGluZyA9IHJlZihmYWxzZSk7XG4gICAgICBydWxlU3RhdHVzU3RvcmFnZS52YWx1ZS5zZXQocGF0aCwgeyAkcGVuZGluZywgJHZhbGlkLCAkbWV0YWRhdGEsICR2YWxpZGF0aW5nIH0pO1xuICAgICAgcmV0dXJuIHsgJHBlbmRpbmcsICR2YWxpZCwgJG1ldGFkYXRhLCAkdmFsaWRhdGluZyB9O1xuICAgIH1cbiAgfVxuXG4gIG9uU2NvcGVEaXNwb3NlKCgpID0+IHtcbiAgICBydWxlRGVjbFN0b3JhZ2UudmFsdWUuY2xlYXIoKTtcbiAgICBmaWVsZHNTdG9yYWdlLnZhbHVlLmNsZWFyKCk7XG4gICAgY29sbGVjdGlvbnNTdG9yYWdlLnZhbHVlLmNsZWFyKCk7XG4gICAgZGlydHlTdG9yYWdlLnZhbHVlLmNsZWFyKCk7XG4gICAgcnVsZVN0YXR1c1N0b3JhZ2UudmFsdWUuY2xlYXIoKTtcbiAgICBhcnJheVN0YXR1c1N0b3JhZ2UudmFsdWUuY2xlYXIoKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhZGRSdWxlRGVjbEVudHJ5LFxuICAgIHNldERpcnR5RW50cnksXG4gICAgY2hlY2tSdWxlRGVjbEVudHJ5LFxuICAgIGdldERpcnR5U3RhdGUsXG4gICAgdHJ5U2V0UnVsZVN0YXR1c1JlZixcbiAgICBnZXRGaWVsZHNFbnRyeSxcbiAgICBnZXRDb2xsZWN0aW9uc0VudHJ5LFxuICAgIGdldEFycmF5U3RhdHVzLFxuICAgIGFkZEFycmF5U3RhdHVzLFxuICAgIGRlbGV0ZUFycmF5U3RhdHVzLFxuICAgIGFycmF5U3RhdHVzU3RvcmFnZSxcbiAgfTtcbn1cbiIsImltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB0eXBlIHtcbiAgJEludGVybmFsRm9ybVByb3BlcnR5VHlwZXMsXG4gICRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvblJ1bGVEZWNsLFxuICAkSW50ZXJuYWxSZWdsZVBhcnRpYWxWYWxpZGF0aW9uVHJlZSxcbiAgJEludGVybmFsUmVnbGVSdWxlRGVjbCxcbiAgSW5saW5lUnVsZURlY2xhcmF0aW9uLFxuICBNYXliZUdldHRlcixcbiAgUmVnbGVSdWxlRGVmaW5pdGlvbixcbn0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNPYmplY3QsIHVud3JhcEdldHRlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkUnVsZXNEZWYoXG4gIHN0YXRlOiBSZWY8dW5rbm93bj4sXG4gIHJ1bGVzOiBSZWY8JEludGVybmFsRm9ybVByb3BlcnR5VHlwZXM+XG4pOiBydWxlcyBpcyBSZWY8JEludGVybmFsUmVnbGVQYXJ0aWFsVmFsaWRhdGlvblRyZWU+IHtcbiAgcmV0dXJuIChcbiAgICBpc09iamVjdChzdGF0ZS52YWx1ZSkgJiZcbiAgICBpc09iamVjdChydWxlcy52YWx1ZSkgJiZcbiAgICAhT2JqZWN0LmVudHJpZXMocnVsZXMudmFsdWUpLnNvbWUoKHJ1bGUpID0+IGlzUnVsZURlZihydWxlKSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29sbGVjdGlvblJ1bGVzRGVmKFxuICBydWxlczogUmVmPCRJbnRlcm5hbEZvcm1Qcm9wZXJ0eVR5cGVzLCBhbnk+XG4pOiBydWxlcyBpcyBSZWY8JEludGVybmFsUmVnbGVDb2xsZWN0aW9uUnVsZURlY2w+IHtcbiAgcmV0dXJuICEhcnVsZXMudmFsdWUgJiYgJyRlYWNoJyBpbiBydWxlcy52YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRhdG9yUnVsZXNEZWYoXG4gIHJ1bGVzOiBSZWY8JEludGVybmFsRm9ybVByb3BlcnR5VHlwZXM+XG4pOiBydWxlcyBpcyBSZWY8JEludGVybmFsUmVnbGVSdWxlRGVjbD4ge1xuICByZXR1cm4gISFydWxlcy52YWx1ZSAmJiBpc09iamVjdChydWxlcy52YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1J1bGVEZWYocnVsZTogdW5rbm93bik6IHJ1bGUgaXMgUmVnbGVSdWxlRGVmaW5pdGlvbjxhbnksIGFueT4ge1xuICByZXR1cm4gaXNPYmplY3QocnVsZSkgJiYgJ192YWxpZGF0b3InIGluIHJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm1SdWxlRGVmaW5pdGlvbihcbiAgcnVsZTogUmVmPHVua25vd24+XG4pOiBydWxlIGlzIFJlZjxSZWdsZVJ1bGVEZWZpbml0aW9uPGFueSwgYW55Pj4ge1xuICByZXR1cm4gISh0eXBlb2YgcnVsZS52YWx1ZSA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm1JbmxpbmUoXG4gIHJ1bGU6IFJlZjx1bmtub3duPlxuKTogcnVsZSBpcyBSZWY8SW5saW5lUnVsZURlY2xhcmF0aW9uPGFueSwgYW55W10sIGFueT4+IHtcbiAgcmV0dXJuIHR5cGVvZiBydWxlLnZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTdGF0ZUFycmF5KHN0YXRlOiBSZWY8dW5rbm93bj4pOiBzdGF0ZSBpcyBSZWY8KHVua25vd24gJiB7ICRpZD86IHN0cmluZyB9KVtdPiB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHN0YXRlLnZhbHVlKTtcbn1cbiIsImltcG9ydCB0eXBlIHtcbiAgJEludGVybmFsRXh0ZXJuYWxSZWdsZUVycm9ycyxcbiAgJEludGVybmFsUmVnbGVDb2xsZWN0aW9uU3RhdHVzLFxuICAkSW50ZXJuYWxSZWdsZUZpZWxkU3RhdHVzLFxuICAkSW50ZXJuYWxSZWdsZVJ1bGVTdGF0dXMsXG4gICRJbnRlcm5hbFJlZ2xlU3RhdHVzLFxuICAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGUsXG4gIFJlZ2xlRXh0ZXJuYWxDb2xsZWN0aW9uRXJyb3JzLFxuICBSZWdsZUV4dGVybmFsRXJyb3JUcmVlLFxufSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkUnVsZXNTdGF0dXMocnVsZTogJEludGVybmFsUmVnbGVTdGF0dXNUeXBlKTogcnVsZSBpcyAkSW50ZXJuYWxSZWdsZVN0YXR1cyB7XG4gIHJldHVybiBpc09iamVjdChydWxlKSAmJiAnJGZpZWxkcycgaW4gcnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29sbGVjdGlvblJ1bGVzU3RhdHVzKFxuICBydWxlOiAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGVcbik6IHJ1bGUgaXMgJEludGVybmFsUmVnbGVDb2xsZWN0aW9uU3RhdHVzIHtcbiAgcmV0dXJuICEhcnVsZSAmJiAnJGVhY2gnIGluIHJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpZWxkU3RhdHVzKHJ1bGU6ICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZSk6IHJ1bGUgaXMgJEludGVybmFsUmVnbGVGaWVsZFN0YXR1cyB7XG4gIHJldHVybiAhIXJ1bGUgJiYgJyRydWxlcycgaW4gcnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUnVsZVN0YXR1cyhydWxlOiB1bmtub3duKTogcnVsZSBpcyAkSW50ZXJuYWxSZWdsZVJ1bGVTdGF0dXMge1xuICByZXR1cm4gaXNPYmplY3QocnVsZSkgJiYgJyR0eXBlJyBpbiBydWxlICYmICckbWVzc2FnZScgaW4gcnVsZTtcbn1cblxuLy8gIC0tIEV4dGVybmFsRXJyb3JzXG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lc3RlZEV4dGVybmFsRXJyb3JTdGF0dXMoXG4gIHJ1bGU6ICRJbnRlcm5hbEV4dGVybmFsUmVnbGVFcnJvcnNcbik6IHJ1bGUgaXMgUmVnbGVFeHRlcm5hbEVycm9yVHJlZTxhbnk+IHtcbiAgcmV0dXJuICEhcnVsZSAmJiAnJGVhY2gnIGluIHJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbGxlY3Rpb25FeHRlcm5hbEVycm9yU3RhdHVzKFxuICBydWxlOiAkSW50ZXJuYWxFeHRlcm5hbFJlZ2xlRXJyb3JzXG4pOiBydWxlIGlzIFJlZ2xlRXh0ZXJuYWxDb2xsZWN0aW9uRXJyb3JzPGFueT4ge1xuICByZXR1cm4gISFydWxlICYmICckZWFjaCcgaW4gcnVsZTtcbn1cbiIsImltcG9ydCB0eXBlIHsgJEludGVybmFsRXh0ZXJuYWxSZWdsZUVycm9ycywgUmVnbGVFeHRlcm5hbENvbGxlY3Rpb25FcnJvcnMgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V4dGVybmFsRXJyb3JDb2xsZWN0aW9uKFxuICB2YWx1ZTogJEludGVybmFsRXh0ZXJuYWxSZWdsZUVycm9yc1xuKTogdmFsdWUgaXMgUmVnbGVFeHRlcm5hbENvbGxlY3Rpb25FcnJvcnMge1xuICByZXR1cm4gJyRlYWNoJyBpbiB2YWx1ZSB8fCAnJGVycm9ycycgaW4gdmFsdWU7XG59XG4iLCJpbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgdHlwZSB7XG4gICRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvblN0YXR1cyxcbiAgJEludGVybmFsUmVnbGVFcnJvcnMsXG4gICRJbnRlcm5hbFJlZ2xlRmllbGRTdGF0dXMsXG4gICRJbnRlcm5hbFJlZ2xlUnVsZVN0YXR1cyxcbiAgJEludGVybmFsUmVnbGVTdGF0dXMsXG4gICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZSxcbn0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNDb2xsZWN0aW9uUnVsZXNTdGF0dXMsIGlzRmllbGRTdGF0dXMsIGlzTmVzdGVkUnVsZXNTdGF0dXMgfSBmcm9tICcuL2d1YXJkcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0UnVsZXNFcnJvcnMoe1xuICBmaWVsZCxcbiAgc2lsZW50ID0gZmFsc2UsXG59OiB7XG4gIGZpZWxkOiBQaWNrPCRJbnRlcm5hbFJlZ2xlRmllbGRTdGF0dXMsICckcnVsZXMnIHwgJyRkaXJ0eScgfCAnJGV4dGVybmFsRXJyb3JzJz47XG4gIHNpbGVudD86IGJvb2xlYW47XG59KTogc3RyaW5nW10ge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZmllbGQuJHJ1bGVzID8/IHt9KVxuICAgIC5tYXAoKFtydWxlS2V5LCBydWxlXSkgPT4ge1xuICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICByZXR1cm4gcnVsZS4kbWVzc2FnZTtcbiAgICAgIH0gZWxzZSBpZiAoIXJ1bGUuJHZhbGlkICYmIGZpZWxkLiRkaXJ0eSkge1xuICAgICAgICByZXR1cm4gcnVsZS4kbWVzc2FnZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSlcbiAgICAuZmlsdGVyKChtc2cpOiBtc2cgaXMgc3RyaW5nIHwgc3RyaW5nW10gPT4gISFtc2cpXG4gICAgLnJlZHVjZTxzdHJpbmdbXT4oKGFjYywgdmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBhY2M/LmNvbmNhdChbdmFsdWVdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhY2M/LmNvbmNhdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSwgW10pXG4gICAgLmNvbmNhdChmaWVsZC4kZXh0ZXJuYWxFcnJvcnMgPz8gW10pO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzRmllbGRFcnJvcnMoXG4gIGZpZWxkU3RhdHVzOiAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGUsXG4gIHNpbGVudCA9IGZhbHNlXG4pOiAkSW50ZXJuYWxSZWdsZUVycm9ycyB7XG4gIGlmIChpc05lc3RlZFJ1bGVzU3RhdHVzKGZpZWxkU3RhdHVzKSkge1xuICAgIHJldHVybiBleHRyYWN0TmVzdGVkRXJyb3JzKGZpZWxkU3RhdHVzLiRmaWVsZHMpO1xuICB9IGVsc2UgaWYgKGlzQ29sbGVjdGlvblJ1bGVzU3RhdHVzKGZpZWxkU3RhdHVzKSkge1xuICAgIHJldHVybiB7XG4gICAgICAkZXJyb3JzOiBmaWVsZFN0YXR1cy4kZmllbGQuJHJ1bGVzXG4gICAgICAgID8gZXh0cmFjdFJ1bGVzRXJyb3JzKHsgZmllbGQ6IGZpZWxkU3RhdHVzLiRmaWVsZCwgc2lsZW50IH0pXG4gICAgICAgIDogW10sXG4gICAgICAkZWFjaDogZmllbGRTdGF0dXMuJGVhY2gubWFwKChmaWVsZCkgPT4gcHJvY2Vzc0ZpZWxkRXJyb3JzKGZpZWxkLCBzaWxlbnQpKSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzRmllbGRTdGF0dXMoZmllbGRTdGF0dXMpKSB7XG4gICAgaWYgKGZpZWxkU3RhdHVzLiRlcnJvcikge1xuICAgICAgcmV0dXJuIGV4dHJhY3RSdWxlc0Vycm9ycyh7XG4gICAgICAgIGZpZWxkOiBmaWVsZFN0YXR1cyxcbiAgICAgICAgc2lsZW50LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWVsZFN0YXR1cy4kZXh0ZXJuYWxFcnJvcnMgPz8gW107XG4gICAgfVxuICB9XG4gIHJldHVybiBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RDb2xsZWN0aW9uRXJyb3IoXG4gIGVhY2g6ICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZVtdLFxuICBzaWxlbnQgPSBmYWxzZVxuKTogJEludGVybmFsUmVnbGVFcnJvcnNbXSB7XG4gIHJldHVybiBlYWNoLm1hcCgoZmllbGQpID0+IHByb2Nlc3NGaWVsZEVycm9ycyhmaWVsZCwgc2lsZW50KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TmVzdGVkRXJyb3JzKFxuICBmaWVsZHM6IFJlY29yZDxzdHJpbmcsICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZT4gfCAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGVbXSxcbiAgc2lsZW50ID0gZmFsc2Vcbik6IFJlY29yZDxzdHJpbmcsICRJbnRlcm5hbFJlZ2xlRXJyb3JzPiB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZmllbGRzKS5tYXAoKFtmaWVsZEtleSwgZmllbGRTdGF0dXNdKSA9PiB7XG4gICAgICBpZiAoaXNOZXN0ZWRSdWxlc1N0YXR1cyhmaWVsZFN0YXR1cykpIHtcbiAgICAgICAgcmV0dXJuIFtmaWVsZEtleSwgZXh0cmFjdE5lc3RlZEVycm9ycyhmaWVsZFN0YXR1cy4kZmllbGRzLCBzaWxlbnQpXTtcbiAgICAgIH0gZWxzZSBpZiAoaXNDb2xsZWN0aW9uUnVsZXNTdGF0dXMoZmllbGRTdGF0dXMpKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgZmllbGRLZXksXG4gICAgICAgICAge1xuICAgICAgICAgICAgJGVycm9yczogZXh0cmFjdFJ1bGVzRXJyb3JzKHsgZmllbGQ6IGZpZWxkU3RhdHVzLiRmaWVsZCwgc2lsZW50IH0pLFxuICAgICAgICAgICAgJGVhY2g6IGV4dHJhY3RDb2xsZWN0aW9uRXJyb3IoZmllbGRTdGF0dXMuJGVhY2gsIHNpbGVudCksXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH0gZWxzZSBpZiAoaXNGaWVsZFN0YXR1cyhmaWVsZFN0YXR1cykpIHtcbiAgICAgICAgaWYgKGZpZWxkU3RhdHVzLiRlcnJvcikge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBmaWVsZEtleSxcbiAgICAgICAgICAgIGV4dHJhY3RSdWxlc0Vycm9ycyh7XG4gICAgICAgICAgICAgIGZpZWxkOiBmaWVsZFN0YXR1cyxcbiAgICAgICAgICAgICAgc2lsZW50LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW2ZpZWxkS2V5LCBmaWVsZFN0YXR1cy4kZXh0ZXJuYWxFcnJvcnMgPz8gW11dO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW2ZpZWxkS2V5LCBbXV07XG4gICAgfSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUVycm9ycygkcmVnbGU6ICRJbnRlcm5hbFJlZ2xlU3RhdHVzKSB7XG4gIGNvbnN0IGVycm9ycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gZXh0cmFjdE5lc3RlZEVycm9ycygkcmVnbGUuJGZpZWxkcyk7XG4gIH0pO1xuXG4gIHJldHVybiBlcnJvcnM7XG59XG4iLCJpbXBvcnQgdHlwZSB7IE1heWJlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUge1xuICBQb3NzaWJsZVJlZ2xlUnVsZU1ldGFkYXRhQ29uc3VtZXIsXG4gIFJlZ2xlUnVsZU1ldGFkYXRhRGVmaW5pdGlvbixcbn0gZnJvbSAnLi9ydWxlLmRlZmluaXRpb24udHlwZSc7XG5pbXBvcnQgdHlwZSB7IFJlZ2xlVW5pdmVyc2FsUGFyYW1zIH0gZnJvbSAnLi9ydWxlLnBhcmFtcy50eXBlcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVmaW5pdGlvbiBvZiB0aGUgcnVsZSwgY2FuIGJlIHVzZWQgdG8gcmVzZXQgb3IgcGF0Y2ggdGhlIHJ1bGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdsZUludGVybmFsUnVsZURlZnM8XG4gIFRWYWx1ZSBleHRlbmRzIGFueSA9IGFueSxcbiAgVFBhcmFtcyBleHRlbmRzIGFueVtdID0gW10sXG4gIFRBc3luYyBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZSxcbiAgVE1ldGFkYXRhIGV4dGVuZHMgUmVnbGVSdWxlTWV0YWRhdGFEZWZpbml0aW9uID0gYm9vbGVhbixcbj4ge1xuICBfdmFsaWRhdG9yOiAoXG4gICAgdmFsdWU6IE1heWJlPFRWYWx1ZT4sXG4gICAgLi4uYXJnczogVFBhcmFtc1xuICApID0+IFRBc3luYyBleHRlbmRzIGZhbHNlID8gVE1ldGFkYXRhIDogUHJvbWlzZTxUTWV0YWRhdGE+O1xuICBfbWVzc2FnZTpcbiAgICB8IHN0cmluZ1xuICAgIHwgc3RyaW5nW11cbiAgICB8ICgodmFsdWU6IE1heWJlPFRWYWx1ZT4sIG1ldGFkYXRhOiBQb3NzaWJsZVJlZ2xlUnVsZU1ldGFkYXRhQ29uc3VtZXIpID0+IHN0cmluZyB8IHN0cmluZ1tdKTtcbiAgX2FjdGl2ZT86XG4gICAgfCBib29sZWFuXG4gICAgfCAoKHZhbHVlOiBNYXliZTxUVmFsdWU+LCBtZXRhZGF0YTogUG9zc2libGVSZWdsZVJ1bGVNZXRhZGF0YUNvbnN1bWVyKSA9PiBib29sZWFuKTtcbiAgX3R5cGU/OiBzdHJpbmc7XG4gIF9wYXRjaGVkOiBib29sZWFuO1xuICBfcGFyYW1zPzogUmVnbGVVbml2ZXJzYWxQYXJhbXM8VFBhcmFtcz47XG4gIF9hc3luYzogVEFzeW5jO1xufVxuXG5leHBvcnQgZW51bSBJbnRlcm5hbFJ1bGVUeXBlIHtcbiAgSW5saW5lID0gJ19faW5saW5lJyxcbiAgQXN5bmMgPSAnX19hc3luYycsXG59XG4iLCJpbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyBjb21wdXRlZCwgdG9SZWZzIH0gZnJvbSAndnVlJztcbmltcG9ydCB0eXBlIHsgUmVnbGVWYWxpZGF0aW9uR3JvdXBFbnRyeSB9IGZyb20gJy4uL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VCb29sZWFuR3JvdXBQcm9wZXJ0aWVzKFxuICBlbnRyaWVzOiBSZWY8UmVnbGVWYWxpZGF0aW9uR3JvdXBFbnRyeVtdPixcbiAgcHJvcGVydHk6IEV4dHJhY3Q8XG4gICAga2V5b2YgUmVnbGVWYWxpZGF0aW9uR3JvdXBFbnRyeSxcbiAgICAnJGludmFsaWQnIHwgJyRlcnJvcicgfCAnJHBlbmRpbmcnIHwgJyRkaXJ0eScgfCAnJHZhbGlkJ1xuICA+XG4pIHtcbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gZW50cmllcy52YWx1ZS5zb21lKChlbnRyeSkgPT4ge1xuICAgICAgcmV0dXJuIGVudHJ5W3Byb3BlcnR5XTtcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBcnJheUdyb3VwUHJvcGVydGllcyhcbiAgZW50cmllczogUmVmPFJlZ2xlVmFsaWRhdGlvbkdyb3VwRW50cnlbXT4sXG4gIHByb3BlcnR5OiBFeHRyYWN0PGtleW9mIFJlZ2xlVmFsaWRhdGlvbkdyb3VwRW50cnksICckZXJyb3JzJyB8ICckc2lsZW50RXJyb3JzJz5cbikge1xuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBlbnRyaWVzLnZhbHVlLnJlZHVjZSgoYWxsLCBlbnRyeSkgPT4ge1xuICAgICAgY29uc3QgZmV0Y2hlZFByb3BlcnR5ID0gZW50cnlbcHJvcGVydHldIHx8IFtdO1xuICAgICAgcmV0dXJuIGFsbC5jb25jYXQoZmV0Y2hlZFByb3BlcnR5KTtcbiAgICB9LCBbXSBhcyBzdHJpbmdbXSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHR5cGUgeyBDb21wdXRlZFJlZiwgUmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB7IGNvbXB1dGVkLCBlZmZlY3RTY29wZSwgcmVhY3RpdmUsIHRvUmF3LCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgdHlwZSB7XG4gICRJbnRlcm5hbFJlZ2xlUnVsZU1ldGFkYXRhQ29uc3VtZXIsXG4gICRJbnRlcm5hbFJlZ2xlUnVsZVN0YXR1cyxcbiAgQ3VzdG9tUnVsZXNEZWNsYXJhdGlvblRyZWUsXG4gIElubGluZVJ1bGVEZWNsYXJhdGlvbixcbiAgUmVnbGVSdWxlRGVmaW5pdGlvbixcbiAgUmVnbGVSdWxlRGVmaW5pdGlvblByb2Nlc3NvcixcbiAgUmVnbGVSdWxlTWV0YWRhdGFEZWZpbml0aW9uLFxufSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBJbnRlcm5hbFJ1bGVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgZGVib3VuY2UsIGlzRW1wdHkgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyB1bndyYXBSdWxlUGFyYW1ldGVycyB9IGZyb20gJy4uLy4uL2NyZWF0ZVJ1bGUvdW53cmFwUnVsZVBhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUgeyBSZWdsZVN0b3JhZ2UgfSBmcm9tICcuLi8uLi91c2VTdG9yYWdlJztcbmltcG9ydCB7IGlzRm9ybVJ1bGVEZWZpbml0aW9uIH0gZnJvbSAnLi4vZ3VhcmRzJztcblxuaW50ZXJmYWNlIENyZWF0ZVJlYWN0aXZlUnVsZVN0YXR1c09wdGlvbnMge1xuICBzdGF0ZTogUmVmPHVua25vd24+O1xuICBydWxlS2V5OiBzdHJpbmc7XG4gIHJ1bGU6IFJlZjxJbmxpbmVSdWxlRGVjbGFyYXRpb248YW55LCBhbnlbXSwgYW55PiB8IFJlZ2xlUnVsZURlZmluaXRpb248YW55LCBhbnksIGFueT4+O1xuICAkZGlydHk6IFJlZjxib29sZWFuPjtcbiAgY3VzdG9tTWVzc2FnZXM/OiBQYXJ0aWFsPEN1c3RvbVJ1bGVzRGVjbGFyYXRpb25UcmVlPjtcbiAgcGF0aDogc3RyaW5nO1xuICBzdG9yYWdlOiBSZWdsZVN0b3JhZ2U7XG4gICRkZWJvdW5jZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlYWN0aXZlUnVsZVN0YXR1cyh7XG4gICRkaXJ0eSxcbiAgY3VzdG9tTWVzc2FnZXMsXG4gIHJ1bGUsXG4gIHJ1bGVLZXksXG4gIHN0YXRlLFxuICBwYXRoLFxuICBzdG9yYWdlLFxuICAkZGVib3VuY2UsXG59OiBDcmVhdGVSZWFjdGl2ZVJ1bGVTdGF0dXNPcHRpb25zKTogJEludGVybmFsUmVnbGVSdWxlU3RhdHVzIHtcbiAgdHlwZSBTY29wZVN0YXRlID0ge1xuICAgICRhY3RpdmU6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAgICRtZXNzYWdlOiBDb21wdXRlZFJlZjxzdHJpbmcgfCBzdHJpbmdbXT47XG4gICAgJHR5cGU6IENvbXB1dGVkUmVmPHN0cmluZz47XG4gICAgJHZhbGlkYXRvcjogQ29tcHV0ZWRSZWY8XG4gICAgICBSZWdsZVJ1bGVEZWZpbml0aW9uUHJvY2Vzc29yPFxuICAgICAgICBhbnksXG4gICAgICAgIGFueSxcbiAgICAgICAgUmVnbGVSdWxlTWV0YWRhdGFEZWZpbml0aW9uIHwgUHJvbWlzZTxSZWdsZVJ1bGVNZXRhZGF0YURlZmluaXRpb24+XG4gICAgICA+XG4gICAgPjtcbiAgICAkcGFyYW1zOiBDb21wdXRlZFJlZjxhbnlbXT47XG4gICAgJHBhdGg6IENvbXB1dGVkUmVmPHN0cmluZz47XG4gIH07XG4gIGxldCBzY29wZSA9IGVmZmVjdFNjb3BlKCk7XG4gIGxldCBzY29wZVN0YXRlITogU2NvcGVTdGF0ZTtcblxuICBsZXQgJHVud2F0Y2hTdGF0ZTogKCkgPT4gdm9pZDtcblxuICBjb25zdCB7ICRwZW5kaW5nLCAkdmFsaWQsICRtZXRhZGF0YSwgJHZhbGlkYXRpbmcgfSA9IHN0b3JhZ2UudHJ5U2V0UnVsZVN0YXR1c1JlZihcbiAgICBgJHtwYXRofS4ke3J1bGVLZXl9YFxuICApO1xuXG4gIGZ1bmN0aW9uICR3YXRjaCgpIHtcbiAgICBzY29wZVN0YXRlID0gc2NvcGUucnVuKCgpID0+IHtcbiAgICAgIGNvbnN0ICRkZWZhdWx0TWV0YWRhdGEgPSBjb21wdXRlZDwkSW50ZXJuYWxSZWdsZVJ1bGVNZXRhZGF0YUNvbnN1bWVyPigoKSA9PiAoe1xuICAgICAgICAkaW52YWxpZDogISR2YWxpZC52YWx1ZSxcbiAgICAgICAgJHBhcmFtczogJHBhcmFtcy52YWx1ZSxcbiAgICAgICAgLi4uJG1ldGFkYXRhLnZhbHVlLFxuICAgICAgfSkpO1xuXG4gICAgICBjb25zdCAkYWN0aXZlID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgICBpZiAoaXNGb3JtUnVsZURlZmluaXRpb24ocnVsZSkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJ1bGUudmFsdWUuYWN0aXZlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVsZS52YWx1ZS5hY3RpdmUoc3RhdGUudmFsdWUsICRkZWZhdWx0TWV0YWRhdGEudmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcnVsZS52YWx1ZS5hY3RpdmU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJG1lc3NhZ2UgPSBjb21wdXRlZDxzdHJpbmcgfCBzdHJpbmdbXT4oKCkgPT4ge1xuICAgICAgICBsZXQgbWVzc2FnZTogc3RyaW5nIHwgc3RyaW5nW10gPSAnJztcbiAgICAgICAgY29uc3QgY3VzdG9tTWVzc2FnZVJ1bGUgPSBjdXN0b21NZXNzYWdlcyA/IGN1c3RvbU1lc3NhZ2VzW3J1bGVLZXldPy5tZXNzYWdlIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChjdXN0b21NZXNzYWdlUnVsZSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgY3VzdG9tTWVzc2FnZVJ1bGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBjdXN0b21NZXNzYWdlUnVsZShzdGF0ZS52YWx1ZSwgJGRlZmF1bHRNZXRhZGF0YS52YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBjdXN0b21NZXNzYWdlUnVsZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRm9ybVJ1bGVEZWZpbml0aW9uKHJ1bGUpKSB7XG4gICAgICAgICAgaWYgKCEoY3VzdG9tTWVzc2FnZVJ1bGUgJiYgIXJ1bGUudmFsdWUuX3BhdGNoZWQpKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGUudmFsdWUubWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBtZXNzYWdlID0gcnVsZS52YWx1ZS5tZXNzYWdlKHN0YXRlLnZhbHVlLCAkZGVmYXVsdE1ldGFkYXRhLnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UgPSBydWxlLnZhbHVlLm1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRW1wdHkobWVzc2FnZSkpIHtcbiAgICAgICAgICBtZXNzYWdlID0gJ0Vycm9yJztcbiAgICAgICAgICBjb25zb2xlLndhcm4oYE5vIGVycm9yIG1lc3NhZ2UgZGVmaW5lZCBmb3IgJHtwYXRofS4ke3J1bGVLZXl9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkdHlwZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRm9ybVJ1bGVEZWZpbml0aW9uKHJ1bGUpICYmIHJ1bGUudmFsdWUudHlwZSkge1xuICAgICAgICAgIHJldHVybiBydWxlLnZhbHVlLnR5cGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJ1bGVLZXk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkdmFsaWRhdG9yID0gY29tcHV0ZWQ8XG4gICAgICAgIFJlZ2xlUnVsZURlZmluaXRpb25Qcm9jZXNzb3I8YW55LCBhbnksIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+PlxuICAgICAgPigoKSA9PiB7XG4gICAgICAgIGlmIChpc0Zvcm1SdWxlRGVmaW5pdGlvbihydWxlKSkge1xuICAgICAgICAgIHJldHVybiBydWxlLnZhbHVlLnZhbGlkYXRvcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcnVsZS52YWx1ZSBhcyBJbmxpbmVSdWxlRGVjbGFyYXRpb248YW55LCBhbnlbXSwgYW55PjtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRwYXJhbXMgPSBjb21wdXRlZDxhbnlbXT4oKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHJ1bGUudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVud3JhcFJ1bGVQYXJhbWV0ZXJzKHJ1bGUudmFsdWUuX3BhcmFtcyA/PyBbXSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJHBhdGggPSBjb21wdXRlZDxzdHJpbmc+KCgpID0+IGAke3BhdGh9LiR7JHR5cGUudmFsdWV9YCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgICRhY3RpdmUsXG4gICAgICAgICRtZXNzYWdlLFxuICAgICAgICAkdHlwZSxcbiAgICAgICAgJHZhbGlkYXRvcixcbiAgICAgICAgJHBhcmFtcyxcbiAgICAgICAgJHBhdGgsXG4gICAgICB9IHNhdGlzZmllcyBTY29wZVN0YXRlO1xuICAgIH0pITtcblxuICAgICR1bndhdGNoU3RhdGUgPSB3YXRjaChzY29wZVN0YXRlLiRwYXJhbXMsICR2YWxpZGF0ZSwge1xuICAgICAgZGVlcDogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gICR3YXRjaCgpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVBc3luY1Jlc3VsdChwcm9taXNlOiBQcm9taXNlPFJlZ2xlUnVsZU1ldGFkYXRhRGVmaW5pdGlvbj4pIHtcbiAgICBsZXQgcnVsZVJlc3VsdCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAkdmFsaWQudmFsdWUgPSB0cnVlO1xuICAgICAgaWYgKCRkaXJ0eS52YWx1ZSkge1xuICAgICAgICAkcGVuZGluZy52YWx1ZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm9taXNlUmVzdWx0ID0gYXdhaXQgcHJvbWlzZTtcbiAgICAgIGlmICh0eXBlb2YgcHJvbWlzZVJlc3VsdCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJ1bGVSZXN1bHQgPSBwcm9taXNlUmVzdWx0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyAkdmFsaWQsIC4uLnJlc3QgfSA9IHByb21pc2VSZXN1bHQ7XG4gICAgICAgIHJ1bGVSZXN1bHQgPSAkdmFsaWQ7XG4gICAgICAgICRtZXRhZGF0YS52YWx1ZSA9IHJlc3Q7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcnVsZVJlc3VsdCA9IGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAkcGVuZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBydWxlUmVzdWx0O1xuICB9XG5cbiAgY29uc3QgJGNvbXB1dGVBc3luY0RlYm91bmNlID0gZGVib3VuY2UoY29tcHV0ZUFzeW5jUmVzdWx0LCAkZGVib3VuY2UgPz8gMTAwKTtcblxuICBhc3luYyBmdW5jdGlvbiAkdmFsaWRhdGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgJHZhbGlkYXRpbmcudmFsdWUgPSB0cnVlO1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHNjb3BlU3RhdGUuJHZhbGlkYXRvci52YWx1ZTtcbiAgICBsZXQgcnVsZVJlc3VsdCA9IGZhbHNlO1xuICAgIGNvbnN0IHJlc3VsdE9yUHJvbWlzZSA9IHZhbGlkYXRvcihzdGF0ZS52YWx1ZSwgLi4uc2NvcGVTdGF0ZS4kcGFyYW1zLnZhbHVlKTtcblxuICAgIGlmIChyZXN1bHRPclByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICBjb25zdCBwcm9taXNlRGVib3VuY2UgPSAkY29tcHV0ZUFzeW5jRGVib3VuY2UocmVzdWx0T3JQcm9taXNlKTtcbiAgICAgIHJ1bGVSZXN1bHQgPSBhd2FpdCBwcm9taXNlRGVib3VuY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyZXN1bHRPclByb21pc2UgIT0gbnVsbCkge1xuICAgICAgICBpZiAodHlwZW9mIHJlc3VsdE9yUHJvbWlzZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgcnVsZVJlc3VsdCA9IHJlc3VsdE9yUHJvbWlzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB7ICR2YWxpZCwgLi4ucmVzdCB9ID0gcmVzdWx0T3JQcm9taXNlO1xuICAgICAgICAgIHJ1bGVSZXN1bHQgPSAkdmFsaWQ7XG4gICAgICAgICAgJG1ldGFkYXRhLnZhbHVlID0gcmVzdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAkdmFsaWQudmFsdWUgPSBydWxlUmVzdWx0O1xuXG4gICAgJHZhbGlkYXRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgIHJldHVybiBydWxlUmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gJHJlc2V0KCkge1xuICAgICR2YWxpZC52YWx1ZSA9IHRydWU7XG4gICAgJG1ldGFkYXRhLnZhbHVlID0ge307XG4gICAgJHBlbmRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAkdmFsaWRhdGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgJHdhdGNoKCk7XG4gIH1cblxuICBmdW5jdGlvbiAkdW53YXRjaCgpIHtcbiAgICAkdW53YXRjaFN0YXRlKCk7XG4gICAgc2NvcGUuc3RvcCgpO1xuICAgIHNjb3BlID0gZWZmZWN0U2NvcGUoKTtcbiAgfVxuXG4gIHJldHVybiByZWFjdGl2ZSh7XG4gICAgLi4uc2NvcGVTdGF0ZSxcbiAgICAkcGVuZGluZyxcbiAgICAkdmFsaWQsXG4gICAgJG1ldGFkYXRhLFxuICAgICR2YWxpZGF0ZSxcbiAgICAkdW53YXRjaCxcbiAgICAkd2F0Y2gsXG4gICAgJHJlc2V0LFxuICB9KSBzYXRpc2ZpZXMgJEludGVybmFsUmVnbGVSdWxlU3RhdHVzO1xufVxuIiwiaW1wb3J0IHR5cGUgeyBDb21wdXRlZFJlZiwgUmVmLCBXYXRjaFN0b3BIYW5kbGUgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgY29tcHV0ZWQsIGVmZmVjdFNjb3BlLCByZWFjdGl2ZSwgcmVmLCB0b1JlZiwgdW5yZWYsIHdhdGNoIH0gZnJvbSAndnVlJztcbmltcG9ydCB0eXBlIHtcbiAgJEludGVybmFsUmVnbGVGaWVsZFN0YXR1cyxcbiAgJEludGVybmFsUmVnbGVSdWxlRGVjbCxcbiAgJEludGVybmFsUmVnbGVSdWxlU3RhdHVzLFxuICBDdXN0b21SdWxlc0RlY2xhcmF0aW9uVHJlZSxcbiAgRmllbGRSZWdsZUJlaGF2aW91ck9wdGlvbnMsXG4gIFJlZ2xlUnVsZURlY2wsXG4gIFJlc29sdmVkUmVnbGVCZWhhdmlvdXJPcHRpb25zLFxufSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBkZWJvdW5jZSwgaXNFbXB0eSwgaXNWdWVTdXBlcmlvck9yRXF1YWxUbzNkb3RGaXZlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBSZWdsZVN0b3JhZ2UgfSBmcm9tICcuLi8uLi91c2VTdG9yYWdlJztcbmltcG9ydCB7IGV4dHJhY3RSdWxlc0Vycm9ycyB9IGZyb20gJy4uL3VzZUVycm9ycyc7XG5pbXBvcnQgeyBjcmVhdGVSZWFjdGl2ZVJ1bGVTdGF0dXMgfSBmcm9tICcuL2NyZWF0ZVJlYWN0aXZlUnVsZVN0YXR1cyc7XG5cbmludGVyZmFjZSBDcmVhdGVSZWFjdGl2ZUZpZWxkU3RhdHVzQXJncyB7XG4gIHN0YXRlOiBSZWY8dW5rbm93bj47XG4gIHJ1bGVzRGVmOiBSZWY8JEludGVybmFsUmVnbGVSdWxlRGVjbD47XG4gIGN1c3RvbU1lc3NhZ2VzPzogQ3VzdG9tUnVsZXNEZWNsYXJhdGlvblRyZWU7XG4gIHBhdGg6IHN0cmluZztcbiAgaW5kZXg/OiBudW1iZXI7XG4gIHN0b3JhZ2U6IFJlZ2xlU3RvcmFnZTtcbiAgb3B0aW9uczogUmVzb2x2ZWRSZWdsZUJlaGF2aW91ck9wdGlvbnM7XG4gIGV4dGVybmFsRXJyb3JzOiBSZWFkb25seTxSZWY8c3RyaW5nW10gfCB1bmRlZmluZWQ+PjtcbiAgb25VbndhdGNoPzogKCkgPT4gdm9pZDtcbn1cblxudHlwZSBTY29wZVJldHVyblN0YXRlID0ge1xuICAkZXJyb3I6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAkZXJyb3JzOiBDb21wdXRlZFJlZjxzdHJpbmdbXT47XG4gICRzaWxlbnRFcnJvcnM6IENvbXB1dGVkUmVmPHN0cmluZ1tdPjtcbiAgJHBlbmRpbmc6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAkaW52YWxpZDogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gICR2YWxpZDogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gICRkZWJvdW5jZTogQ29tcHV0ZWRSZWY8bnVtYmVyIHwgdW5kZWZpbmVkPjtcbiAgJGxhenk6IENvbXB1dGVkUmVmPGJvb2xlYW4gfCB1bmRlZmluZWQ+O1xuICAkcmV3YXJkRWFybHk6IENvbXB1dGVkUmVmPGJvb2xlYW4gfCB1bmRlZmluZWQ+O1xuICAkYXV0b0RpcnR5OiBDb21wdXRlZFJlZjxib29sZWFuIHwgdW5kZWZpbmVkPjtcbiAgJGFueURpcnR5OiBDb21wdXRlZFJlZjxib29sZWFuPjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWFjdGl2ZUZpZWxkU3RhdHVzKHtcbiAgc3RhdGUsXG4gIHJ1bGVzRGVmLFxuICBjdXN0b21NZXNzYWdlcyxcbiAgcGF0aCxcbiAgc3RvcmFnZSxcbiAgb3B0aW9ucyxcbiAgZXh0ZXJuYWxFcnJvcnMsXG4gIGluZGV4LFxuICBvblVud2F0Y2gsXG59OiBDcmVhdGVSZWFjdGl2ZUZpZWxkU3RhdHVzQXJncyk6ICRJbnRlcm5hbFJlZ2xlRmllbGRTdGF0dXMge1xuICBsZXQgc2NvcGUgPSBlZmZlY3RTY29wZSgpO1xuICBsZXQgc2NvcGVTdGF0ZSE6IFNjb3BlUmV0dXJuU3RhdGU7XG5cbiAgY29uc3QgJGRpcnR5ID0gcmVmKGZhbHNlKTtcblxuICBjb25zdCB0cmlnZ2VyUHVuaXNobWVudCA9IHJlZihmYWxzZSk7XG5cbiAgY29uc3QgJGV4dGVybmFsRXJyb3JzID0gcmVmPHN0cmluZ1tdIHwgdW5kZWZpbmVkPihbXSk7XG5cbiAgbGV0ICR1bndhdGNoU3RhdGU6IFdhdGNoU3RvcEhhbmRsZTtcbiAgbGV0ICR1bndhdGNoVmFsaWQ6IFdhdGNoU3RvcEhhbmRsZTtcbiAgbGV0ICR1bndhdGNoRXh0ZXJuYWxFcnJvcnM6IFdhdGNoU3RvcEhhbmRsZTtcbiAgbGV0ICR1bndhdGNoRGlydHk6IFdhdGNoU3RvcEhhbmRsZTtcblxuICBsZXQgJGNvbW1pdCA9ICgpID0+IHt9O1xuXG4gIGZ1bmN0aW9uIGNvbGxlY3RFeHRlcm5hbEVycm9ycygpIHtcbiAgICAkZXh0ZXJuYWxFcnJvcnMudmFsdWUgPSBleHRlcm5hbEVycm9ycy52YWx1ZSA/PyBbXTtcbiAgfVxuICBjb2xsZWN0RXh0ZXJuYWxFcnJvcnMoKTtcblxuICBmdW5jdGlvbiBjcmVhdGVSZWFjdGl2ZVJ1bGVzUmVzdWx0KCkge1xuICAgIGNvbnN0IGRlY2xhcmVkUnVsZXMgPSBydWxlc0RlZi52YWx1ZSBhcyBSZWdsZVJ1bGVEZWNsPGFueSwgYW55PjtcbiAgICBjb25zdCBzdG9yZVJlc3VsdCA9IHN0b3JhZ2UuY2hlY2tSdWxlRGVjbEVudHJ5KHBhdGgsIGRlY2xhcmVkUnVsZXMpO1xuXG4gICAgJGxvY2FsT3B0aW9ucy52YWx1ZSA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKGRlY2xhcmVkUnVsZXMpLmZpbHRlcigoW3J1bGVLZXldKSA9PiBydWxlS2V5LnN0YXJ0c1dpdGgoJyQnKSlcbiAgICApO1xuXG4gICAgJHJ1bGVzLnZhbHVlID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMocnVsZXNEZWYudmFsdWUpXG4gICAgICAgIC5maWx0ZXIoKFtydWxlS2V5XSkgPT4gIXJ1bGVLZXkuc3RhcnRzV2l0aCgnJCcpKVxuICAgICAgICAubWFwKChbcnVsZUtleSwgcnVsZV0pID0+IHtcbiAgICAgICAgICBpZiAocnVsZSkge1xuICAgICAgICAgICAgY29uc3QgcnVsZVJlZiA9IHRvUmVmKCgpID0+IHJ1bGUpO1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgcnVsZUtleSxcbiAgICAgICAgICAgICAgY3JlYXRlUmVhY3RpdmVSdWxlU3RhdHVzKHtcbiAgICAgICAgICAgICAgICAkZGlydHksXG4gICAgICAgICAgICAgICAgY3VzdG9tTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgcnVsZTogcnVsZVJlZiBhcyBhbnksXG4gICAgICAgICAgICAgICAgcnVsZUtleSxcbiAgICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UsXG4gICAgICAgICAgICAgICAgJGRlYm91bmNlOiAkbG9jYWxPcHRpb25zLnZhbHVlLiRkZWJvdW5jZSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKHJ1bGVEZWYpOiBydWxlRGVmIGlzIFtzdHJpbmcsICRJbnRlcm5hbFJlZ2xlUnVsZVN0YXR1c10gPT4gISFydWxlRGVmLmxlbmd0aClcbiAgICApO1xuXG4gICAgJHdhdGNoKCk7XG5cbiAgICAkY29tbWl0ID0gc2NvcGVTdGF0ZS4kZGVib3VuY2UudmFsdWVcbiAgICAgID8gZGVib3VuY2UoJGNvbW1pdEhhbmRsZXIsIHNjb3BlU3RhdGUuJGRlYm91bmNlLnZhbHVlID8/IDApXG4gICAgICA6ICRjb21taXRIYW5kbGVyO1xuXG4gICAgaWYgKHN0b3JlUmVzdWx0Py52YWxpZCAhPSBudWxsKSB7XG4gICAgICAkZGlydHkudmFsdWUgPSBzdG9yYWdlLmdldERpcnR5U3RhdGUocGF0aCk7XG4gICAgICBpZiAoJGRpcnR5LnZhbHVlKSB7XG4gICAgICAgICRjb21taXQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdG9yYWdlLmFkZFJ1bGVEZWNsRW50cnkocGF0aCwgZGVjbGFyZWRSdWxlcyk7XG4gIH1cblxuICBmdW5jdGlvbiAkdW53YXRjaCgpIHtcbiAgICBpZiAoJHJ1bGVzLnZhbHVlKSB7XG4gICAgICBPYmplY3QuZW50cmllcygkcnVsZXMudmFsdWUpLmZvckVhY2goKFtfLCBydWxlXSkgPT4ge1xuICAgICAgICBydWxlLiR1bndhdGNoKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgJHVud2F0Y2hEaXJ0eSgpO1xuICAgIGlmICgkZGlydHkudmFsdWUpIHtcbiAgICAgIHN0b3JhZ2Uuc2V0RGlydHlFbnRyeShwYXRoLCAkZGlydHkudmFsdWUpO1xuICAgIH1cbiAgICAkdW53YXRjaFN0YXRlKCk7XG4gICAgJHVud2F0Y2hWYWxpZCgpO1xuICAgICR1bndhdGNoRXh0ZXJuYWxFcnJvcnMoKTtcbiAgICBzY29wZS5zdG9wKCk7XG4gICAgc2NvcGUgPSBlZmZlY3RTY29wZSgpO1xuICAgIG9uVW53YXRjaD8uKCk7XG4gIH1cblxuICBmdW5jdGlvbiAkd2F0Y2goKSB7XG4gICAgaWYgKCRydWxlcy52YWx1ZSkge1xuICAgICAgT2JqZWN0LmVudHJpZXMoJHJ1bGVzLnZhbHVlKS5mb3JFYWNoKChbXywgcnVsZV0pID0+IHtcbiAgICAgICAgcnVsZS4kd2F0Y2goKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzY29wZVN0YXRlID0gc2NvcGUucnVuKCgpID0+IHtcbiAgICAgIGNvbnN0ICRhbnlEaXJ0eSA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+ICRkaXJ0eS52YWx1ZSk7XG4gICAgICBjb25zdCAkZGVib3VuY2UgPSBjb21wdXRlZDxudW1iZXIgfCB1bmRlZmluZWQ+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuICRsb2NhbE9wdGlvbnMudmFsdWUuJGRlYm91bmNlO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRsYXp5ID0gY29tcHV0ZWQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oKCkgPT4ge1xuICAgICAgICBpZiAoJGxvY2FsT3B0aW9ucy52YWx1ZS4kbGF6eSAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuICRsb2NhbE9wdGlvbnMudmFsdWUuJGxhenk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVucmVmKG9wdGlvbnMubGF6eSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJHJld2FyZEVhcmx5ID0gY29tcHV0ZWQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oKCkgPT4ge1xuICAgICAgICBpZiAoJGxvY2FsT3B0aW9ucy52YWx1ZS4kcmV3YXJkRWFybHkgIT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAkbG9jYWxPcHRpb25zLnZhbHVlLiRyZXdhcmRFYXJseTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5yZWYob3B0aW9ucy5yZXdhcmRFYXJseSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJGF1dG9EaXJ0eSA9IGNvbXB1dGVkPGJvb2xlYW4gfCB1bmRlZmluZWQ+KCgpID0+IHtcbiAgICAgICAgaWYgKCRsb2NhbE9wdGlvbnMudmFsdWUuJGF1dG9EaXJ0eSAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuICRsb2NhbE9wdGlvbnMudmFsdWUuJGF1dG9EaXJ0eTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5yZWYob3B0aW9ucy5hdXRvRGlydHkpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRlcnJvciA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuICRpbnZhbGlkLnZhbHVlICYmICEkcGVuZGluZy52YWx1ZSAmJiAkZGlydHkudmFsdWU7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJGVycm9ycyA9IGNvbXB1dGVkPHN0cmluZ1tdPigoKSA9PiB7XG4gICAgICAgIHJldHVybiBleHRyYWN0UnVsZXNFcnJvcnMoe1xuICAgICAgICAgIGZpZWxkOiB7XG4gICAgICAgICAgICAkZGlydHk6ICRkaXJ0eS52YWx1ZSxcbiAgICAgICAgICAgICRleHRlcm5hbEVycm9yczogJGV4dGVybmFsRXJyb3JzLnZhbHVlLFxuICAgICAgICAgICAgJHJ1bGVzOiAkcnVsZXMudmFsdWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJHNpbGVudEVycm9ycyA9IGNvbXB1dGVkPHN0cmluZ1tdPigoKSA9PiB7XG4gICAgICAgIHJldHVybiBleHRyYWN0UnVsZXNFcnJvcnMoe1xuICAgICAgICAgIGZpZWxkOiB7XG4gICAgICAgICAgICAkZGlydHk6ICRkaXJ0eS52YWx1ZSxcbiAgICAgICAgICAgICRleHRlcm5hbEVycm9yczogJGV4dGVybmFsRXJyb3JzLnZhbHVlLFxuICAgICAgICAgICAgJHJ1bGVzOiAkcnVsZXMudmFsdWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaWxlbnQ6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRwZW5kaW5nID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgICBpZiAodHJpZ2dlclB1bmlzaG1lbnQudmFsdWUgfHwgISRyZXdhcmRFYXJseS52YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcygkcnVsZXMudmFsdWUpLnNvbWUoKFtrZXksIHJ1bGVSZXN1bHRdKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcnVsZVJlc3VsdC4kcGVuZGluZztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJGludmFsaWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICAgIGlmICgkZXh0ZXJuYWxFcnJvcnMudmFsdWU/Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKCEkcmV3YXJkRWFybHkudmFsdWUgfHwgKCRyZXdhcmRFYXJseS52YWx1ZSAmJiB0cmlnZ2VyUHVuaXNobWVudC52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoJHJ1bGVzLnZhbHVlKS5zb21lKChba2V5LCBydWxlUmVzdWx0XSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICFydWxlUmVzdWx0LiR2YWxpZDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJHZhbGlkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgICBpZiAoJGRpcnR5LnZhbHVlICYmICFpc0VtcHR5KHN0YXRlLnZhbHVlKSkge1xuICAgICAgICAgIGlmICgkZXh0ZXJuYWxFcnJvcnMudmFsdWU/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJHJld2FyZEVhcmx5LnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoJHJ1bGVzLnZhbHVlKS5ldmVyeSgoW2tleSwgcnVsZVJlc3VsdF0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVSZXN1bHQuJHZhbGlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAhJGludmFsaWQudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuXG4gICAgICB3YXRjaCgkdmFsaWQsICh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICB0cmlnZ2VyUHVuaXNobWVudC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJGVycm9yLFxuICAgICAgICAkcGVuZGluZyxcbiAgICAgICAgJGludmFsaWQsXG4gICAgICAgICR2YWxpZCxcbiAgICAgICAgJGRlYm91bmNlLFxuICAgICAgICAkbGF6eSxcbiAgICAgICAgJGVycm9ycyxcbiAgICAgICAgJHNpbGVudEVycm9ycyxcbiAgICAgICAgJHJld2FyZEVhcmx5LFxuICAgICAgICAkYXV0b0RpcnR5LFxuICAgICAgICAkYW55RGlydHksXG4gICAgICB9IHNhdGlzZmllcyBTY29wZVJldHVyblN0YXRlO1xuICAgIH0pIGFzIFNjb3BlUmV0dXJuU3RhdGU7XG5cbiAgICAkdW53YXRjaEV4dGVybmFsRXJyb3JzID0gd2F0Y2goZXh0ZXJuYWxFcnJvcnMsIGNvbGxlY3RFeHRlcm5hbEVycm9ycyk7XG4gICAgJHVud2F0Y2hTdGF0ZSA9IHdhdGNoKFxuICAgICAgc3RhdGUsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmIChzY29wZVN0YXRlLiRhdXRvRGlydHkudmFsdWUpIHtcbiAgICAgICAgICBpZiAoISRkaXJ0eS52YWx1ZSkge1xuICAgICAgICAgICAgJGRpcnR5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJ1bGVzRGVmLnZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICBjcmVhdGVSZWFjdGl2ZVJ1bGVzUmVzdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgJGNvbW1pdCgpO1xuICAgICAgICBpZiAoIXNjb3BlU3RhdGUuJHJld2FyZEVhcmx5LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgICAgIC8vICRjbGVhckV4dGVybmFsRXJyb3JzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGRlZXA6IGlzVnVlU3VwZXJpb3JPckVxdWFsVG8zZG90Rml2ZSA/IDEgOiB0cnVlIH1cbiAgICApO1xuXG4gICAgJHVud2F0Y2hEaXJ0eSA9IHdhdGNoKCRkaXJ0eSwgKCkgPT4ge1xuICAgICAgc3RvcmFnZS5zZXREaXJ0eUVudHJ5KHBhdGgsICRkaXJ0eS52YWx1ZSk7XG4gICAgfSk7XG5cbiAgICAkdW53YXRjaFZhbGlkID0gd2F0Y2goc2NvcGVTdGF0ZS4kdmFsaWQsICh2YWxpZCkgPT4ge1xuICAgICAgaWYgKHNjb3BlU3RhdGUuJHJld2FyZEVhcmx5LnZhbHVlICYmIHZhbGlkKSB7XG4gICAgICAgIHRyaWdnZXJQdW5pc2htZW50LnZhbHVlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiAkY29tbWl0SGFuZGxlcigpIHtcbiAgICBPYmplY3QuZW50cmllcygkcnVsZXMudmFsdWUpLmZvckVhY2goKFtrZXksIHJ1bGVdKSA9PiB7XG4gICAgICBydWxlLiR2YWxpZGF0ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgJHJ1bGVzID0gcmVmKCkgYXMgUmVmPFJlY29yZDxzdHJpbmcsICRJbnRlcm5hbFJlZ2xlUnVsZVN0YXR1cz4+O1xuICBjb25zdCAkbG9jYWxPcHRpb25zID0gcmVmKCkgYXMgUmVmPEZpZWxkUmVnbGVCZWhhdmlvdXJPcHRpb25zPjtcblxuICBjcmVhdGVSZWFjdGl2ZVJ1bGVzUmVzdWx0KCk7XG5cbiAgZnVuY3Rpb24gJHJlc2V0KCk6IHZvaWQge1xuICAgICRkaXJ0eS52YWx1ZSA9IGZhbHNlO1xuICAgICRleHRlcm5hbEVycm9ycy52YWx1ZSA9IFtdO1xuICAgIE9iamVjdC5lbnRyaWVzKCRydWxlcy52YWx1ZSkuZm9yRWFjaCgoW2tleSwgcnVsZV0pID0+IHtcbiAgICAgIHJ1bGUuJHJlc2V0KCk7XG4gICAgfSk7XG4gICAgaWYgKCFzY29wZVN0YXRlLiRsYXp5LnZhbHVlKSB7XG4gICAgICBPYmplY3QuZW50cmllcygkcnVsZXMudmFsdWUpLm1hcCgoW2tleSwgcnVsZV0pID0+IHtcbiAgICAgICAgcmV0dXJuIHJ1bGUuJHZhbGlkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiAkdG91Y2goKTogdm9pZCB7XG4gICAgaWYgKCEkZGlydHkudmFsdWUpIHtcbiAgICAgICRkaXJ0eS52YWx1ZSA9IHRydWU7XG4gICAgICBpZiAoIXNjb3BlU3RhdGUuJHJld2FyZEVhcmx5LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgICAvLyAkY2xlYXJFeHRlcm5hbEVycm9ycygpO1xuICAgICAgfVxuICAgICAgJGNvbW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0ICR2YWxpZGF0ZSA9IHNjb3BlU3RhdGUuJGRlYm91bmNlLnZhbHVlXG4gICAgPyBkZWJvdW5jZSgkdmFsaWRhdGVIYW5kbGVyLCBzY29wZVN0YXRlLiRkZWJvdW5jZS52YWx1ZSA/PyAwKVxuICAgIDogJHZhbGlkYXRlSGFuZGxlcjtcblxuICBhc3luYyBmdW5jdGlvbiAkdmFsaWRhdGVIYW5kbGVyKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICB0cmlnZ2VyUHVuaXNobWVudC52YWx1ZSA9IHRydWU7XG4gICAgICBpZiAoc2NvcGVTdGF0ZS4kYXV0b0RpcnR5LnZhbHVlICYmICRkaXJ0eS52YWx1ZSAmJiAhc2NvcGVTdGF0ZS4kcGVuZGluZy52YWx1ZSkge1xuICAgICAgICByZXR1cm4gIXNjb3BlU3RhdGUuJGVycm9yLnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBPYmplY3QuZW50cmllcygkcnVsZXMudmFsdWUpLm1hcCgoW2tleSwgcnVsZV0pID0+IHtcbiAgICAgICAgICByZXR1cm4gcnVsZS4kdmFsaWRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocHJvbWlzZXMpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHRzLmV2ZXJ5KCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh2YWx1ZS5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiAkY2xlYXJFeHRlcm5hbEVycm9ycygpIHtcbiAgICAkZXh0ZXJuYWxFcnJvcnMudmFsdWUgPSBbXTtcbiAgfVxuXG4gIGlmICghc2NvcGVTdGF0ZS4kbGF6eS52YWx1ZSkge1xuICAgICR2YWxpZGF0ZUhhbmRsZXIoKTtcbiAgfVxuXG4gIHJldHVybiByZWFjdGl2ZSh7XG4gICAgJGRpcnR5LFxuICAgIC4uLnNjb3BlU3RhdGUsXG4gICAgJGV4dGVybmFsRXJyb3JzLFxuICAgICR2YWx1ZTogc3RhdGUsXG4gICAgJHJ1bGVzOiAkcnVsZXMsXG4gICAgJHJlc2V0LFxuICAgICR0b3VjaCxcbiAgICAkdmFsaWRhdGUsXG4gICAgJHVud2F0Y2gsXG4gICAgJHdhdGNoLFxuICAgICRjbGVhckV4dGVybmFsRXJyb3JzLFxuICB9KSBzYXRpc2ZpZXMgJEludGVybmFsUmVnbGVGaWVsZFN0YXR1cztcbn1cbiIsImltcG9ydCB0eXBlIHsgUmVxdWlyZWREZWVwIH0gZnJvbSAndHlwZS1mZXN0JztcbmltcG9ydCB0eXBlIHsgQ29tcHV0ZWRSZWYsIFJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0U2NvcGUsIHJlYWN0aXZlLCByZWYsIHRvUmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgdHlwZSB7XG4gICRJbnRlcm5hbEV4dGVybmFsUmVnbGVFcnJvcnMsXG4gICRJbnRlcm5hbEZvcm1Qcm9wZXJ0eVR5cGVzLFxuICAkSW50ZXJuYWxSZWdsZUNvbGxlY3Rpb25FcnJvcnMsXG4gICRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvblJ1bGVEZWNsLFxuICAkSW50ZXJuYWxSZWdsZUNvbGxlY3Rpb25TdGF0dXMsXG4gICRJbnRlcm5hbFJlZ2xlRmllbGRTdGF0dXMsXG4gICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZSxcbiAgQ3VzdG9tUnVsZXNEZWNsYXJhdGlvblRyZWUsXG4gIERlZXBNYXliZVJlZixcbiAgUmVnbGVCZWhhdmlvdXJPcHRpb25zLFxuICBSZWdsZUNvbGxlY3Rpb25SdWxlRGVjbEtleVByb3BlcnR5LFxuICBSZXNvbHZlZFJlZ2xlQmVoYXZpb3VyT3B0aW9ucyxcbn0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCByYW5kb21JZCwgdW53cmFwR2V0dGVyIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgaXNWdWVTdXBlcmlvck9yRXF1YWxUbzNkb3RGaXZlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdmVyc2lvbi1jb21wYXJlJztcbmltcG9ydCB0eXBlIHsgUmVnbGVTdG9yYWdlIH0gZnJvbSAnLi4vLi4vdXNlU3RvcmFnZSc7XG5pbXBvcnQgeyBpc0V4dGVybmFsRXJyb3JDb2xsZWN0aW9uLCBpc1J1bGVEZWYgfSBmcm9tICcuLi9ndWFyZHMnO1xuaW1wb3J0IHsgZXh0cmFjdENvbGxlY3Rpb25FcnJvciwgZXh0cmFjdFJ1bGVzRXJyb3JzIH0gZnJvbSAnLi4vdXNlRXJyb3JzJztcbmltcG9ydCB7IGNyZWF0ZVJlYWN0aXZlRmllbGRTdGF0dXMgfSBmcm9tICcuL2NyZWF0ZVJlYWN0aXZlRmllbGRTdGF0dXMnO1xuaW1wb3J0IHsgY3JlYXRlUmVhY3RpdmVDaGlsZHJlblN0YXR1cyB9IGZyb20gJy4vY3JlYXRlUmVhY3RpdmVOZXN0ZWRTdGF0dXMnO1xuXG50eXBlIFN0YXRlV2l0aElkID0gdW5rbm93biAmIHsgJGlkPzogc3RyaW5nIH07XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbGxlY3Rpb25FbGVtZW50KHtcbiAgJGlkLFxuICBwYXRoLFxuICBpbmRleCxcbiAgb3B0aW9ucyxcbiAgc3RvcmFnZSxcbiAgc3RhdGVWYWx1ZSxcbiAgY3VzdG9tTWVzc2FnZXMsXG4gIHJ1bGVzLFxuICBleHRlcm5hbEVycm9ycyxcbn06IHtcbiAgJGlkOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbiAgaW5kZXg6IG51bWJlcjtcbiAgc3RhdGVWYWx1ZTogUmVmPFN0YXRlV2l0aElkPjtcbiAgY3VzdG9tTWVzc2FnZXM/OiBDdXN0b21SdWxlc0RlY2xhcmF0aW9uVHJlZTtcbiAgc3RvcmFnZTogUmVnbGVTdG9yYWdlO1xuICBvcHRpb25zOiBEZWVwTWF5YmVSZWY8UmVxdWlyZWREZWVwPFJlZ2xlQmVoYXZpb3VyT3B0aW9ucz4+O1xuICBydWxlczogJEludGVybmFsRm9ybVByb3BlcnR5VHlwZXMgJiBSZWdsZUNvbGxlY3Rpb25SdWxlRGVjbEtleVByb3BlcnR5O1xuICBleHRlcm5hbEVycm9yczogQ29tcHV0ZWRSZWY8JEludGVybmFsRXh0ZXJuYWxSZWdsZUVycm9yc1tdIHwgdW5kZWZpbmVkPjtcbn0pOiAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGUgfCBudWxsIHtcbiAgY29uc3QgJGZpZWxkSWQgPSBydWxlcy4ka2V5ID8gcnVsZXMuJGtleSA6IHJhbmRvbUlkKCk7XG4gIGxldCAkcGF0aCA9IGAke3BhdGh9LiR7U3RyaW5nKCRmaWVsZElkKX1gO1xuXG4gIGlmICh0eXBlb2Ygc3RhdGVWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCcgJiYgc3RhdGVWYWx1ZS52YWx1ZSAhPSBudWxsKSB7XG4gICAgaWYgKCFzdGF0ZVZhbHVlLnZhbHVlLiRpZCkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RhdGVWYWx1ZS52YWx1ZSwge1xuICAgICAgICAkaWQ6IHtcbiAgICAgICAgICB2YWx1ZTogJGZpZWxkSWQsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJHBhdGggPSBgJHtwYXRofS4ke3N0YXRlVmFsdWUudmFsdWUuJGlkfWA7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgJGV4dGVybmFsRXJyb3JzID0gdG9SZWYoKCkgPT4gZXh0ZXJuYWxFcnJvcnMudmFsdWU/LltpbmRleF0pO1xuXG4gIGNvbnN0ICRzdGF0dXMgPSBjcmVhdGVSZWFjdGl2ZUNoaWxkcmVuU3RhdHVzKHtcbiAgICBzdGF0ZTogc3RhdGVWYWx1ZSxcbiAgICBydWxlc0RlZjogdG9SZWYoKCkgPT4gcnVsZXMpLFxuICAgIGN1c3RvbU1lc3NhZ2VzLFxuICAgIHBhdGg6ICRwYXRoLFxuICAgIHN0b3JhZ2UsXG4gICAgb3B0aW9ucyxcbiAgICBleHRlcm5hbEVycm9yczogJGV4dGVybmFsRXJyb3JzLFxuICB9KTtcblxuICBpZiAoJHN0YXR1cykge1xuICAgIGNvbnN0IHZhbHVlSWQgPSBzdGF0ZVZhbHVlLnZhbHVlPy4kaWQ7XG4gICAgJHN0YXR1cy4kaWQgPSB2YWx1ZUlkID8/IFN0cmluZygkZmllbGRJZCk7XG4gICAgc3RvcmFnZS5hZGRBcnJheVN0YXR1cygkaWQsICRzdGF0dXMuJGlkLCAkc3RhdHVzKTtcbiAgfVxuXG4gIHJldHVybiAkc3RhdHVzO1xufVxuXG5pbnRlcmZhY2UgQ3JlYXRlUmVhY3RpdmVDb2xsZWN0aW9uU3RhdHVzQXJncyB7XG4gIHN0YXRlOiBSZWY8U3RhdGVXaXRoSWRbXSAmIFN0YXRlV2l0aElkPjtcbiAgcnVsZXNEZWY6IFJlZjwkSW50ZXJuYWxSZWdsZUNvbGxlY3Rpb25SdWxlRGVjbD47XG4gIGN1c3RvbU1lc3NhZ2VzPzogQ3VzdG9tUnVsZXNEZWNsYXJhdGlvblRyZWU7XG4gIHBhdGg6IHN0cmluZztcbiAgaW5kZXg/OiBudW1iZXI7XG4gIHN0b3JhZ2U6IFJlZ2xlU3RvcmFnZTtcbiAgb3B0aW9uczogUmVzb2x2ZWRSZWdsZUJlaGF2aW91ck9wdGlvbnM7XG4gIGV4dGVybmFsRXJyb3JzOiBSZWFkb25seTxSZWY8JEludGVybmFsRXh0ZXJuYWxSZWdsZUVycm9ycyB8IHVuZGVmaW5lZD4+O1xufVxuXG5pbnRlcmZhY2UgU2NvcGVSZXR1cm5TdGF0ZSB7XG4gICRkaXJ0eTogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gICRhbnlEaXJ0eTogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gICRpbnZhbGlkOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgJHZhbGlkOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgJGVycm9yOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgJHBlbmRpbmc6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAkZXJyb3JzOiBDb21wdXRlZFJlZjwkSW50ZXJuYWxSZWdsZUNvbGxlY3Rpb25FcnJvcnM+O1xuICAkc2lsZW50RXJyb3JzOiBDb21wdXRlZFJlZjwkSW50ZXJuYWxSZWdsZUNvbGxlY3Rpb25FcnJvcnM+O1xufVxuXG5pbnRlcmZhY2UgSW1tZWRpYXRlU2NvcGVSZXR1cm5TdGF0ZSB7XG4gIGlzUHJpbWl0aXZlQXJyYXk6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAkZXh0ZXJuYWxFcnJvcnNGaWVsZDogQ29tcHV0ZWRSZWY8c3RyaW5nW10+O1xuICAkZXh0ZXJuYWxFcnJvcnNFYWNoOiBDb21wdXRlZFJlZjwkSW50ZXJuYWxFeHRlcm5hbFJlZ2xlRXJyb3JzW10+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVhY3RpdmVDb2xsZWN0aW9uU3RhdHVzKHtcbiAgc3RhdGUsXG4gIHJ1bGVzRGVmLFxuICBjdXN0b21NZXNzYWdlcyxcbiAgcGF0aCxcbiAgc3RvcmFnZSxcbiAgb3B0aW9ucyxcbiAgZXh0ZXJuYWxFcnJvcnMsXG59OiBDcmVhdGVSZWFjdGl2ZUNvbGxlY3Rpb25TdGF0dXNBcmdzKTogJEludGVybmFsUmVnbGVDb2xsZWN0aW9uU3RhdHVzIHwgbnVsbCB7XG4gIGxldCBzY29wZSA9IGVmZmVjdFNjb3BlKCk7XG4gIGxldCBzY29wZVN0YXRlITogU2NvcGVSZXR1cm5TdGF0ZTtcblxuICBsZXQgaW1tZWRpYXRlU2NvcGUgPSBlZmZlY3RTY29wZSgpO1xuICBsZXQgaW1tZWRpYXRlU2NvcGVTdGF0ZSE6IEltbWVkaWF0ZVNjb3BlUmV0dXJuU3RhdGU7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUudmFsdWUpICYmICFydWxlc0RlZi52YWx1ZS4kZWFjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0ICRpZCA9IHJlZjxzdHJpbmc+KCkgYXMgUmVmPHN0cmluZz47XG4gIGNvbnN0ICR2YWx1ZSA9IHJlZihzdGF0ZS52YWx1ZSk7XG5cbiAgbGV0ICR1bndhdGNoU3RhdGU6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0ICRmaWVsZFN0YXR1cyA9IHJlZih7fSkgYXMgUmVmPCRJbnRlcm5hbFJlZ2xlRmllbGRTdGF0dXM+O1xuICBjb25zdCAkZWFjaFN0YXR1cyA9IHN0b3JhZ2UuZ2V0Q29sbGVjdGlvbnNFbnRyeShwYXRoKTtcblxuICBpbW1lZGlhdGVTY29wZVN0YXRlID0gaW1tZWRpYXRlU2NvcGUucnVuKCgpID0+IHtcbiAgICBjb25zdCBpc1ByaW1pdGl2ZUFycmF5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUudmFsdWUpICYmIHN0YXRlLnZhbHVlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gc3RhdGUudmFsdWUuc29tZSgocykgPT4gdHlwZW9mIHMgIT09ICdvYmplY3QnKTtcbiAgICAgIH0gZWxzZSBpZiAocnVsZXNEZWYudmFsdWUuJGVhY2ggJiYgIShydWxlc0RlZi52YWx1ZS4kZWFjaCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhydWxlc0RlZi52YWx1ZS4kZWFjaCkuZXZlcnkoKHJ1bGUpID0+IGlzUnVsZURlZihydWxlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICBjb25zdCAkZXh0ZXJuYWxFcnJvcnNGaWVsZCA9IGNvbXB1dGVkPHN0cmluZ1tdPigoKSA9PiB7XG4gICAgICBpZiAoZXh0ZXJuYWxFcnJvcnMudmFsdWUpIHtcbiAgICAgICAgaWYgKGlzRXh0ZXJuYWxFcnJvckNvbGxlY3Rpb24oZXh0ZXJuYWxFcnJvcnMudmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGV4dGVybmFsRXJyb3JzLnZhbHVlLiRlcnJvcnMgPz8gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xuXG4gICAgY29uc3QgJGV4dGVybmFsRXJyb3JzRWFjaCA9IGNvbXB1dGVkPCRJbnRlcm5hbEV4dGVybmFsUmVnbGVFcnJvcnNbXT4oKCkgPT4ge1xuICAgICAgaWYgKGV4dGVybmFsRXJyb3JzLnZhbHVlKSB7XG4gICAgICAgIGlmIChpc0V4dGVybmFsRXJyb3JDb2xsZWN0aW9uKGV4dGVybmFsRXJyb3JzLnZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBleHRlcm5hbEVycm9ycy52YWx1ZS4kZWFjaCA/PyBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzUHJpbWl0aXZlQXJyYXksXG4gICAgICAkZXh0ZXJuYWxFcnJvcnNGaWVsZCxcbiAgICAgICRleHRlcm5hbEVycm9yc0VhY2gsXG4gICAgfSBzYXRpc2ZpZXMgSW1tZWRpYXRlU2NvcGVSZXR1cm5TdGF0ZTtcbiAgfSkhO1xuXG4gIGNyZWF0ZVN0YXR1cygpO1xuICAkd2F0Y2goKTtcblxuICBmdW5jdGlvbiBjcmVhdGVTdGF0dXMoKSB7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZS52YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChzdGF0ZS52YWx1ZSAhPSBudWxsICYmICFzdGF0ZS52YWx1ZT8uJGlkICYmIHN0YXRlLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICRpZC52YWx1ZSA9IHJhbmRvbUlkKCk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0YXRlLnZhbHVlLCB7XG4gICAgICAgICAgJGlkOiB7XG4gICAgICAgICAgICB2YWx1ZTogJGlkLnZhbHVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS52YWx1ZT8uJGlkKSB7XG4gICAgICAgICRpZC52YWx1ZSA9IHN0YXRlLnZhbHVlLiRpZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW1tZWRpYXRlU2NvcGVTdGF0ZS5pc1ByaW1pdGl2ZUFycmF5LnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgJHZhbHVlLnZhbHVlID0gJGZpZWxkU3RhdHVzLnZhbHVlLiR2YWx1ZTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHN0YXRlLnZhbHVlKSAmJiBydWxlc0RlZi52YWx1ZS4kZWFjaCkge1xuICAgICAgJGVhY2hTdGF0dXMudmFsdWUgPSBzdGF0ZS52YWx1ZVxuICAgICAgICAubWFwKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB1bndyYXBwZWQkRWFjaCA9IHVud3JhcEdldHRlcihcbiAgICAgICAgICAgIHJ1bGVzRGVmLnZhbHVlLiRlYWNoLFxuICAgICAgICAgICAgdG9SZWYoKCkgPT4gdmFsdWUpLFxuICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh1bndyYXBwZWQkRWFjaCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNyZWF0ZUNvbGxlY3Rpb25FbGVtZW50KHtcbiAgICAgICAgICAgICAgJGlkOiAkaWQudmFsdWUsXG4gICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgIHJ1bGVzOiB1bndyYXBwZWQkRWFjaCxcbiAgICAgICAgICAgICAgc3RhdGVWYWx1ZTogdG9SZWYoKCkgPT4gdmFsdWUpLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICAgICAgZXh0ZXJuYWxFcnJvcnM6IGltbWVkaWF0ZVNjb3BlU3RhdGUuJGV4dGVybmFsRXJyb3JzRWFjaCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGVhY2gpID0+ICEhZWFjaCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICRlYWNoU3RhdHVzLnZhbHVlID0gW107XG4gICAgfVxuXG4gICAgJGZpZWxkU3RhdHVzLnZhbHVlID0gY3JlYXRlUmVhY3RpdmVGaWVsZFN0YXR1cyh7XG4gICAgICBzdGF0ZSxcbiAgICAgIHJ1bGVzRGVmLFxuICAgICAgY3VzdG9tTWVzc2FnZXMsXG4gICAgICBwYXRoLFxuICAgICAgc3RvcmFnZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBleHRlcm5hbEVycm9yczogaW1tZWRpYXRlU2NvcGVTdGF0ZS4kZXh0ZXJuYWxFcnJvcnNGaWVsZCxcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVN0YXR1cygpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZS52YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzU3RhdHVzID0gY2xvbmVEZWVwKCRlYWNoU3RhdHVzLnZhbHVlKTtcblxuICAgICAgJGVhY2hTdGF0dXMudmFsdWUgPSBzdGF0ZS52YWx1ZVxuICAgICAgICAubWFwKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0b1JlZigoKSA9PiB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbHVlLiRpZCAmJiAkZWFjaFN0YXR1cy52YWx1ZS5maW5kKChlYWNoKSA9PiBlYWNoLiRpZCA9PT0gdmFsdWUuJGlkKSkge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdTdGF0dXMgPSBzdG9yYWdlLmdldEFycmF5U3RhdHVzKCRpZC52YWx1ZSwgdmFsdWUuJGlkKTtcbiAgICAgICAgICAgIGlmIChleGlzdGluZ1N0YXR1cykge1xuICAgICAgICAgICAgICBleGlzdGluZ1N0YXR1cy4kdmFsdWUgPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgIHJldHVybiBleGlzdGluZ1N0YXR1cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB1bndyYXBwZWQkRWFjaCA9IHVud3JhcEdldHRlcihydWxlc0RlZi52YWx1ZS4kZWFjaCwgY3VycmVudFZhbHVlLCBpbmRleCk7XG4gICAgICAgICAgICBpZiAodW53cmFwcGVkJEVhY2gpIHtcbiAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNyZWF0ZUNvbGxlY3Rpb25FbGVtZW50KHtcbiAgICAgICAgICAgICAgICAkaWQ6ICRpZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICAgIHJ1bGVzOiB1bndyYXBwZWQkRWFjaCxcbiAgICAgICAgICAgICAgICBzdGF0ZVZhbHVlOiBjdXJyZW50VmFsdWUsXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzdG9yYWdlLFxuICAgICAgICAgICAgICAgIGV4dGVybmFsRXJyb3JzOiBpbW1lZGlhdGVTY29wZVN0YXRlLiRleHRlcm5hbEVycm9yc0VhY2gsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigoZWFjaCkgPT4gISFlYWNoKTtcblxuICAgICAgcHJldmlvdXNTdGF0dXNcbiAgICAgICAgLmZpbHRlcigoJGVhY2gpID0+ICFzdGF0ZS52YWx1ZS5maW5kKChmKSA9PiAkZWFjaC4kaWQgPT09IGYuJGlkKSlcbiAgICAgICAgLmZvckVhY2goKCRlYWNoLCBpbmRleCkgPT4ge1xuICAgICAgICAgIHN0b3JhZ2UuZGVsZXRlQXJyYXlTdGF0dXMoJGlkLnZhbHVlLCBpbmRleC50b1N0cmluZygpKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICRlYWNoU3RhdHVzLnZhbHVlID0gW107XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gJHdhdGNoKCkge1xuICAgICR1bndhdGNoU3RhdGUgPSB3YXRjaChcbiAgICAgIHN0YXRlLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAoc3RhdGUudmFsdWUgIT0gbnVsbCAmJiAhT2JqZWN0Lmhhc093bihzdGF0ZS52YWx1ZSBhcyBhbnksICckaWQnKSkge1xuICAgICAgICAgIGNyZWF0ZVN0YXR1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVwZGF0ZVN0YXR1cygpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBkZWVwOiBpc1Z1ZVN1cGVyaW9yT3JFcXVhbFRvM2RvdEZpdmUgPyAxIDogdHJ1ZSwgZmx1c2g6ICdwcmUnIH1cbiAgICApO1xuICAgIHNjb3BlU3RhdGUgPSBzY29wZS5ydW4oKCkgPT4ge1xuICAgICAgY29uc3QgJGRpcnR5ID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICRmaWVsZFN0YXR1cy52YWx1ZS4kZGlydHkgJiZcbiAgICAgICAgICAkZWFjaFN0YXR1cy52YWx1ZS5ldmVyeSgoc3RhdHVzT3JGaWVsZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXR1c09yRmllbGQuJGRpcnR5O1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJGFueURpcnR5ID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICRmaWVsZFN0YXR1cy52YWx1ZS4kYW55RGlydHkgfHxcbiAgICAgICAgICAkZWFjaFN0YXR1cy52YWx1ZS5zb21lKChzdGF0dXNPckZpZWxkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdHVzT3JGaWVsZC4kZGlydHk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkaW52YWxpZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAkZmllbGRTdGF0dXMudmFsdWUuJGludmFsaWQgfHxcbiAgICAgICAgICAkZWFjaFN0YXR1cy52YWx1ZS5zb21lKChzdGF0dXNPckZpZWxkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdHVzT3JGaWVsZC4kaW52YWxpZDtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICR2YWxpZCA9IGNvbXB1dGVkPGJvb2xlYW4+KFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICRmaWVsZFN0YXR1cy52YWx1ZS4kdmFsaWQgJiZcbiAgICAgICAgICAkZWFjaFN0YXR1cy52YWx1ZS5ldmVyeSgoc3RhdHVzT3JGaWVsZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXR1c09yRmllbGQuJHZhbGlkO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICBjb25zdCAkZXJyb3IgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgJGZpZWxkU3RhdHVzLnZhbHVlLiRlcnJvciB8fFxuICAgICAgICAgICRlYWNoU3RhdHVzLnZhbHVlLnNvbWUoKHN0YXR1c09yRmllbGQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0dXNPckZpZWxkLiRlcnJvcjtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRwZW5kaW5nID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICRmaWVsZFN0YXR1cy52YWx1ZS4kcGVuZGluZyB8fFxuICAgICAgICAgICRlYWNoU3RhdHVzLnZhbHVlLnNvbWUoKHN0YXR1c09yRmllbGQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0dXNPckZpZWxkLiRwZW5kaW5nO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJGVycm9ycyA9IGNvbXB1dGVkPCRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvbkVycm9ycz4oKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICRlcnJvcnM6IGV4dHJhY3RSdWxlc0Vycm9ycyh7IGZpZWxkOiAkZmllbGRTdGF0dXMudmFsdWUsIHNpbGVudDogZmFsc2UgfSksXG4gICAgICAgICAgJGVhY2g6IGV4dHJhY3RDb2xsZWN0aW9uRXJyb3IoJGVhY2hTdGF0dXMudmFsdWUpLFxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRzaWxlbnRFcnJvcnMgPSBjb21wdXRlZDwkSW50ZXJuYWxSZWdsZUNvbGxlY3Rpb25FcnJvcnM+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAkZXJyb3JzOiBleHRyYWN0UnVsZXNFcnJvcnMoeyBmaWVsZDogJGZpZWxkU3RhdHVzLnZhbHVlLCBzaWxlbnQ6IHRydWUgfSksXG4gICAgICAgICAgJGVhY2g6IGV4dHJhY3RDb2xsZWN0aW9uRXJyb3IoJGVhY2hTdGF0dXMudmFsdWUsIHRydWUpLFxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgICRkaXJ0eSxcbiAgICAgICAgJGFueURpcnR5LFxuICAgICAgICAkaW52YWxpZCxcbiAgICAgICAgJHZhbGlkLFxuICAgICAgICAkZXJyb3IsXG4gICAgICAgICRwZW5kaW5nLFxuICAgICAgICAkZXJyb3JzLFxuICAgICAgICAkc2lsZW50RXJyb3JzLFxuICAgICAgfSBzYXRpc2ZpZXMgU2NvcGVSZXR1cm5TdGF0ZTtcbiAgICB9KSE7XG5cbiAgICBpZiAoaW1tZWRpYXRlU2NvcGVTdGF0ZS5pc1ByaW1pdGl2ZUFycmF5LnZhbHVlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGAke3BhdGh9IGlzIGEgQXJyYXkgb2YgcHJpbWl0aXZlcy4gVHJhY2tpbmcgY2FuIGJlIGxvc3Qgd2hlbiByZWFzc2lnbmluZyB0aGUgQXJyYXkuIFdlIGFkdmlzZSB0byB1c2UgYW4gQXJyYXkgb2Ygb2JqZWN0cyBpbnN0ZWFkYFxuICAgICAgKTtcbiAgICAgICR1bndhdGNoU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiAkdW53YXRjaCgpIHtcbiAgICBpZiAoJHVud2F0Y2hTdGF0ZSkge1xuICAgICAgJHVud2F0Y2hTdGF0ZSgpO1xuICAgIH1cbiAgICBpZiAoJGZpZWxkU3RhdHVzLnZhbHVlKSB7XG4gICAgICAkZmllbGRTdGF0dXMudmFsdWUuJHVud2F0Y2goKTtcbiAgICB9XG4gICAgaWYgKCRlYWNoU3RhdHVzLnZhbHVlKSB7XG4gICAgICAkZWFjaFN0YXR1cy52YWx1ZS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmICgnJGRpcnR5JyBpbiBlbGVtZW50KSB7XG4gICAgICAgICAgZWxlbWVudC4kdW53YXRjaCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgc2NvcGUuc3RvcCgpO1xuICAgIHNjb3BlID0gZWZmZWN0U2NvcGUoKTtcbiAgICBpbW1lZGlhdGVTY29wZS5zdG9wKCk7XG4gICAgaW1tZWRpYXRlU2NvcGUgPSBlZmZlY3RTY29wZSh0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uICR0b3VjaCgpOiB2b2lkIHtcbiAgICAkZmllbGRTdGF0dXMudmFsdWUuJHRvdWNoKCk7XG4gICAgJGVhY2hTdGF0dXMudmFsdWUuZm9yRWFjaCgoJGVhY2gpID0+IHtcbiAgICAgICRlYWNoLiR0b3VjaCgpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gJHJlc2V0KCk6IHZvaWQge1xuICAgICRmaWVsZFN0YXR1cy52YWx1ZS4kcmVzZXQoKTtcbiAgICAkZWFjaFN0YXR1cy52YWx1ZS5mb3JFYWNoKCgkZWFjaCkgPT4ge1xuICAgICAgJGVhY2guJHJlc2V0KCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiAkdmFsaWRhdGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICRmaWVsZFN0YXR1cy52YWx1ZS4kdmFsaWRhdGUoKSxcbiAgICAgICAgLi4uJGVhY2hTdGF0dXMudmFsdWUubWFwKChydWxlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJ1bGUuJHZhbGlkYXRlKCk7XG4gICAgICAgIH0pLFxuICAgICAgXSk7XG4gICAgICByZXR1cm4gcmVzdWx0cy5ldmVyeSgodmFsdWUpID0+ICEhdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiAkY2xlYXJFeHRlcm5hbEVycm9ycygpIHtcbiAgICAvLyBUT0RPIGNsZWFyIGV4dGVybmFsIGVycm9yc1xuICB9XG5cbiAgcmV0dXJuIHJlYWN0aXZlKHtcbiAgICAkZmllbGQ6ICRmaWVsZFN0YXR1cyxcbiAgICAuLi5zY29wZVN0YXRlLFxuICAgICRlYWNoOiAkZWFjaFN0YXR1cyxcbiAgICAkdmFsdWU6IHN0YXRlLFxuICAgICR2YWxpZGF0ZSxcbiAgICAkdW53YXRjaCxcbiAgICAkd2F0Y2gsXG4gICAgJHRvdWNoLFxuICAgICRyZXNldCxcbiAgICAkY2xlYXJFeHRlcm5hbEVycm9ycyxcbiAgfSkgc2F0aXNmaWVzICRJbnRlcm5hbFJlZ2xlQ29sbGVjdGlvblN0YXR1cztcbn1cbiIsImltcG9ydCB0eXBlIHsgUmVxdWlyZWREZWVwIH0gZnJvbSAndHlwZS1mZXN0JztcbmltcG9ydCB0eXBlIHsgQ29tcHV0ZWRSZWYsIEVmZmVjdFNjb3BlLCBSZWYsIFdhdGNoU3RvcEhhbmRsZSB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0U2NvcGUsIHJlYWN0aXZlLCByZWYsIHRvUmVmLCB0cmlnZ2VyUmVmLCB1bnJlZiwgd2F0Y2ggfSBmcm9tICd2dWUnO1xuaW1wb3J0IHR5cGUge1xuICBEZWVwTWF5YmVSZWYsXG4gIEN1c3RvbVJ1bGVzRGVjbGFyYXRpb25UcmVlLFxuICAkSW50ZXJuYWxFeHRlcm5hbFJlZ2xlRXJyb3JzLFxuICAkSW50ZXJuYWxGb3JtUHJvcGVydHlUeXBlcyxcbiAgJEludGVybmFsUmVnbGVQYXJ0aWFsVmFsaWRhdGlvblRyZWUsXG4gICRJbnRlcm5hbFJlZ2xlU3RhdHVzLFxuICAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGUsXG4gIE1heWJlR2V0dGVyLFxuICBSZWdsZUJlaGF2aW91ck9wdGlvbnMsXG4gIFJlZ2xlRXh0ZXJuYWxFcnJvclRyZWUsXG4gIFJlZ2xlVmFsaWRhdGlvbkdyb3VwRW50cnksXG4gIFJlc29sdmVkUmVnbGVCZWhhdmlvdXJPcHRpb25zLFxuICAkSW50ZXJuYWxSZWdsZUVycm9ycyxcbn0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgbWVyZ2VBcnJheUdyb3VwUHJvcGVydGllcywgbWVyZ2VCb29sZWFuR3JvdXBQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNSZWZPYmplY3QsIGlzVnVlU3VwZXJpb3JPckVxdWFsVG8zZG90Rml2ZSwgdW53cmFwR2V0dGVyIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBSZWdsZVN0b3JhZ2UgfSBmcm9tICcuLi8uLi91c2VTdG9yYWdlJztcbmltcG9ydCB7XG4gIGlzQ29sbGVjdGlvblJ1bGVzRGVmLFxuICBpc05lc3RlZFJ1bGVzRGVmLFxuICBpc1N0YXRlQXJyYXksXG4gIGlzVmFsaWRhdG9yUnVsZXNEZWYsXG59IGZyb20gJy4uL2d1YXJkcyc7XG5pbXBvcnQgeyBjcmVhdGVSZWFjdGl2ZUNvbGxlY3Rpb25TdGF0dXMgfSBmcm9tICcuL2NyZWF0ZVJlYWN0aXZlQ29sbGVjdGlvblN0YXR1cyc7XG5pbXBvcnQgeyBjcmVhdGVSZWFjdGl2ZUZpZWxkU3RhdHVzIH0gZnJvbSAnLi9jcmVhdGVSZWFjdGl2ZUZpZWxkU3RhdHVzJztcbmltcG9ydCB7IGV4dHJhY3ROZXN0ZWRFcnJvcnMgfSBmcm9tICcuLi91c2VFcnJvcnMnO1xuXG5pbnRlcmZhY2UgQ3JlYXRlUmVhY3RpdmVOZXN0ZWRTdGF0dXMge1xuICByb290UnVsZXM/OiBSZWY8JEludGVybmFsUmVnbGVQYXJ0aWFsVmFsaWRhdGlvblRyZWU+O1xuICBzY29wZVJ1bGVzOiBSZWY8JEludGVybmFsUmVnbGVQYXJ0aWFsVmFsaWRhdGlvblRyZWU+O1xuICBzdGF0ZTogUmVmPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuICBjdXN0b21NZXNzYWdlcz86IEN1c3RvbVJ1bGVzRGVjbGFyYXRpb25UcmVlO1xuICBwYXRoPzogc3RyaW5nO1xuICBpbmRleD86IG51bWJlcjtcbiAgc3RvcmFnZTogUmVnbGVTdG9yYWdlO1xuICBvcHRpb25zOiBSZXNvbHZlZFJlZ2xlQmVoYXZpb3VyT3B0aW9ucztcbiAgZXh0ZXJuYWxFcnJvcnM6IFJlYWRvbmx5PFJlZjxSZWdsZUV4dGVybmFsRXJyb3JUcmVlIHwgdW5kZWZpbmVkPj47XG4gIHZhbGlkYXRpb25Hcm91cHM/OlxuICAgIHwgKChydWxlczoge1xuICAgICAgICBbeDogc3RyaW5nXTogJEludGVybmFsUmVnbGVTdGF0dXNUeXBlO1xuICAgICAgfSkgPT4gUmVjb3JkPHN0cmluZywgUmVnbGVWYWxpZGF0aW9uR3JvdXBFbnRyeVtdPilcbiAgICB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlYWN0aXZlTmVzdGVkU3RhdHVzKHtcbiAgc2NvcGVSdWxlcyxcbiAgc3RhdGUsXG4gIGN1c3RvbU1lc3NhZ2VzLFxuICBwYXRoID0gJycsXG4gIHJvb3RSdWxlcyxcbiAgc3RvcmFnZSxcbiAgb3B0aW9ucyxcbiAgZXh0ZXJuYWxFcnJvcnMsXG4gIHZhbGlkYXRpb25Hcm91cHMsXG59OiBDcmVhdGVSZWFjdGl2ZU5lc3RlZFN0YXR1cyk6ICRJbnRlcm5hbFJlZ2xlU3RhdHVzIHtcbiAgdHlwZSBTY29wZVN0YXRlID0ge1xuICAgICRkaXJ0eTogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gICAgJGFueURpcnR5OiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgICAkaW52YWxpZDogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gICAgJHZhbGlkOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgICAkZXJyb3I6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAgICRwZW5kaW5nOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgICAkZXJyb3JzOiBDb21wdXRlZFJlZjxSZWNvcmQ8c3RyaW5nLCAkSW50ZXJuYWxSZWdsZUVycm9ycz4+O1xuICAgICRzaWxlbnRFcnJvcnM6IENvbXB1dGVkUmVmPFJlY29yZDxzdHJpbmcsICRJbnRlcm5hbFJlZ2xlRXJyb3JzPj47XG4gIH07XG4gIGxldCBzY29wZTogRWZmZWN0U2NvcGU7XG4gIGxldCBzY29wZVN0YXRlITogU2NvcGVTdGF0ZTtcbiAgbGV0ICR1bndhdGNoRmllbGRzOiBXYXRjaFN0b3BIYW5kbGU7XG4gIGxldCAkdW53YXRjaFN0YXRlOiBXYXRjaFN0b3BIYW5kbGU7XG4gIGxldCAkdW53YXRjaEdyb3VwczogV2F0Y2hTdG9wSGFuZGxlO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJlYWN0aXZlRmllbGRzU3RhdHVzKHdhdGNoID0gdHJ1ZSwgZm9yY2VGcm9tR2V0dGVyID0gZmFsc2UpIHtcbiAgICAkZmllbGRzLnZhbHVlID0gbnVsbCE7XG4gICAgdHJpZ2dlclJlZigkZmllbGRzKTtcblxuICAgIGNvbnN0IHNjb3BlZFJ1bGVzU3RhdHVzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMoc2NvcGVSdWxlcy52YWx1ZSlcbiAgICAgICAgLm1hcCgoW3N0YXRlUHJvcEtleSwgc3RhdGVQcm9wUnVsZXNdKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlUHJvcFJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZVJlZiA9IHRvUmVmKHN0YXRlLnZhbHVlLCBzdGF0ZVByb3BLZXkpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVQcm9wUnVsZXNSZWYgPSB0b1JlZigoKSA9PiBzdGF0ZVByb3BSdWxlcyk7XG4gICAgICAgICAgICBjb25zdCAkZXh0ZXJuYWxFcnJvcnMgPSB0b1JlZigoKSA9PiBleHRlcm5hbEVycm9ycy52YWx1ZT8uW3N0YXRlUHJvcEtleV0pO1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgc3RhdGVQcm9wS2V5LFxuICAgICAgICAgICAgICBjcmVhdGVSZWFjdGl2ZUNoaWxkcmVuU3RhdHVzKHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogc3RhdGVSZWYsXG4gICAgICAgICAgICAgICAgcnVsZXNEZWY6IHN0YXRlUHJvcFJ1bGVzUmVmLFxuICAgICAgICAgICAgICAgIGN1c3RvbU1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgIHBhdGg6IHBhdGggPyBgJHtwYXRofS4ke3N0YXRlUHJvcEtleX1gIDogc3RhdGVQcm9wS2V5LFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICBleHRlcm5hbEVycm9yczogJGV4dGVybmFsRXJyb3JzLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAocnVsZSk6IHJ1bGUgaXMgW3N0cmluZywgJEludGVybmFsUmVnbGVTdGF0dXNUeXBlXSA9PiAhIXJ1bGUubGVuZ3RoICYmIHJ1bGVbMV0gIT0gbnVsbFxuICAgICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGV4dGVybmFsUnVsZXNTdGF0dXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyh1bnJlZihleHRlcm5hbEVycm9ycykgPz8ge30pXG4gICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiAhKGtleSBpbiBzY29wZVJ1bGVzLnZhbHVlKSlcbiAgICAgICAgLm1hcCgoW2tleSwgZXJyb3JzXSkgPT4ge1xuICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlUHJvcFJ1bGVzUmVmID0gdG9SZWYoKCkgPT4gKHt9KSk7XG4gICAgICAgICAgICBjb25zdCAkZXh0ZXJuYWxFcnJvcnMgPSB0b1JlZigoKSA9PiBlcnJvcnMpO1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICBjcmVhdGVSZWFjdGl2ZUNoaWxkcmVuU3RhdHVzKHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogcmVmKHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgcnVsZXNEZWY6IHN0YXRlUHJvcFJ1bGVzUmVmLFxuICAgICAgICAgICAgICAgIGN1c3RvbU1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgIHBhdGg6IHBhdGggPyBgJHtwYXRofS4ke2tleX1gIDoga2V5LFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICBleHRlcm5hbEVycm9yczogJGV4dGVybmFsRXJyb3JzLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZ3JvdXBzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXModmFsaWRhdGlvbkdyb3Vwcz8uKHNjb3BlZFJ1bGVzU3RhdHVzKSA/PyB7fSkubWFwKChba2V5LCBlbnRyaWVzXSkgPT4ge1xuICAgICAgICBpZiAoZW50cmllcy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5PYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICAgICAgKFsnJGludmFsaWQnLCAnJGVycm9yJywgJyRwZW5kaW5nJywgJyRkaXJ0eScsICckdmFsaWQnXSBhcyBjb25zdCkubWFwKFxuICAgICAgICAgICAgICAgICAgKHByb3BlcnR5KSA9PiBbXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICBtZXJnZUJvb2xlYW5Hcm91cFByb3BlcnRpZXMoXG4gICAgICAgICAgICAgICAgICAgICAgdG9SZWYoKCkgPT4gZW50cmllcyksXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIC4uLk9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgICAgICAoWyckZXJyb3JzJywgJyRzaWxlbnRFcnJvcnMnXSBhcyBjb25zdCkubWFwKChwcm9wZXJ0eSkgPT4gW1xuICAgICAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICAgICAgICBtZXJnZUFycmF5R3JvdXBQcm9wZXJ0aWVzKFxuICAgICAgICAgICAgICAgICAgICB0b1JlZigoKSA9PiBlbnRyaWVzKSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAkZmllbGRzLnZhbHVlID0geyAuLi5zY29wZWRSdWxlc1N0YXR1cywgLi4uZXh0ZXJuYWxSdWxlc1N0YXR1cywgLi4uZ3JvdXBzIH07XG4gICAgaWYgKHdhdGNoKSB7XG4gICAgICAkd2F0Y2goKTtcbiAgICB9XG4gIH1cblxuICBsZXQgJGZpZWxkczogUmVmPFJlY29yZDxzdHJpbmcsICRJbnRlcm5hbFJlZ2xlU3RhdHVzVHlwZT4+ID0gc3RvcmFnZS5nZXRGaWVsZHNFbnRyeShwYXRoKTtcbiAgY3JlYXRlUmVhY3RpdmVGaWVsZHNTdGF0dXMoKTtcblxuICBmdW5jdGlvbiAkcmVzZXQoKTogdm9pZCB7XG4gICAgY3JlYXRlUmVhY3RpdmVGaWVsZHNTdGF0dXMoZmFsc2UpO1xuICAgIE9iamVjdC5lbnRyaWVzKCRmaWVsZHMudmFsdWUpLmZvckVhY2goKFtfLCBzdGF0dXNPckZpZWxkXSkgPT4ge1xuICAgICAgc3RhdHVzT3JGaWVsZC4kcmVzZXQoKTtcbiAgICB9KTtcbiAgICAkd2F0Y2goKTtcbiAgfVxuXG4gIGZ1bmN0aW9uICR0b3VjaCgpOiB2b2lkIHtcbiAgICBPYmplY3QuZW50cmllcygkZmllbGRzLnZhbHVlKS5mb3JFYWNoKChbXywgc3RhdHVzT3JGaWVsZF0pID0+IHtcbiAgICAgIHN0YXR1c09yRmllbGQuJHRvdWNoKCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiAkdmFsaWRhdGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKCRmaWVsZHMudmFsdWUpLm1hcCgoW18sIHN0YXR1c09yRmllbGRdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHN0YXR1c09yRmllbGQuJHZhbGlkYXRlKCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlc3VsdHMuZXZlcnkoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZS5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uICR3YXRjaCgpIHtcbiAgICBpZiAocm9vdFJ1bGVzKSB7XG4gICAgICAkdW53YXRjaEZpZWxkcyA9IHdhdGNoKFxuICAgICAgICByb290UnVsZXMsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICAkdW53YXRjaCgpO1xuICAgICAgICAgIGNyZWF0ZVJlYWN0aXZlRmllbGRzU3RhdHVzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHsgZGVlcDogaXNWdWVTdXBlcmlvck9yRXF1YWxUbzNkb3RGaXZlID8gMSA6IHRydWUsIGZsdXNoOiAncG9zdCcgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzY29wZSA9IGVmZmVjdFNjb3BlKCk7XG4gICAgc2NvcGVTdGF0ZSA9IHNjb3BlLnJ1bigoKSA9PiB7XG4gICAgICBjb25zdCAkZGlydHkgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgISFPYmplY3QuZW50cmllcygkZmllbGRzLnZhbHVlKS5sZW5ndGggJiZcbiAgICAgICAgICBPYmplY3QuZW50cmllcygkZmllbGRzLnZhbHVlKS5ldmVyeSgoW2tleSwgc3RhdHVzT3JGaWVsZF0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0dXNPckZpZWxkLiRkaXJ0eTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRhbnlEaXJ0eSA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKCRmaWVsZHMudmFsdWUpLnNvbWUoKFtrZXksIHN0YXR1c09yRmllbGRdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHN0YXR1c09yRmllbGQuJGRpcnR5O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCAkaW52YWxpZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKCRmaWVsZHMudmFsdWUpLnNvbWUoKFtrZXksIHN0YXR1c09yRmllbGRdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHN0YXR1c09yRmllbGQuJGludmFsaWQ7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICR2YWxpZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKCRmaWVsZHMudmFsdWUpLmV2ZXJ5KChba2V5LCBzdGF0dXNPckZpZWxkXSkgPT4ge1xuICAgICAgICAgIHJldHVybiBzdGF0dXNPckZpZWxkLiR2YWxpZDtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJGVycm9yID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoJGZpZWxkcy52YWx1ZSkuc29tZSgoW2tleSwgc3RhdHVzT3JGaWVsZF0pID0+IHtcbiAgICAgICAgICByZXR1cm4gc3RhdHVzT3JGaWVsZC4kZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0ICRwZW5kaW5nID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoJGZpZWxkcy52YWx1ZSkuc29tZSgoW2tleSwgc3RhdHVzT3JGaWVsZF0pID0+IHtcbiAgICAgICAgICByZXR1cm4gc3RhdHVzT3JGaWVsZC4kcGVuZGluZztcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJGVycm9ycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGV4dHJhY3ROZXN0ZWRFcnJvcnMoJGZpZWxkcy52YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0ICRzaWxlbnRFcnJvcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBleHRyYWN0TmVzdGVkRXJyb3JzKCRmaWVsZHMudmFsdWUsIHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgICRkaXJ0eSxcbiAgICAgICAgJGFueURpcnR5LFxuICAgICAgICAkaW52YWxpZCxcbiAgICAgICAgJHZhbGlkLFxuICAgICAgICAkZXJyb3IsXG4gICAgICAgICRwZW5kaW5nLFxuICAgICAgICAkZXJyb3JzLFxuICAgICAgICAkc2lsZW50RXJyb3JzLFxuICAgICAgfSBzYXRpc2ZpZXMgU2NvcGVTdGF0ZTtcbiAgICB9KSE7XG4gIH1cblxuICBmdW5jdGlvbiAkdW53YXRjaCgpIHtcbiAgICBpZiAoJGZpZWxkcy52YWx1ZSkge1xuICAgICAgT2JqZWN0LmVudHJpZXMoJGZpZWxkcy52YWx1ZSkuZm9yRWFjaCgoW18sIGZpZWxkXSkgPT4ge1xuICAgICAgICBmaWVsZC4kdW53YXRjaCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgJHVud2F0Y2hGaWVsZHM/LigpO1xuICAgICR1bndhdGNoU3RhdGU/LigpO1xuICAgICR1bndhdGNoR3JvdXBzPy4oKTtcbiAgICBzY29wZS5zdG9wKCk7XG4gICAgc2NvcGUgPSBlZmZlY3RTY29wZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gJGNsZWFyRXh0ZXJuYWxFcnJvcnMoKSB7XG4gICAgT2JqZWN0LmVudHJpZXMoJGZpZWxkcy52YWx1ZSkuZm9yRWFjaCgoW18sIGZpZWxkXSkgPT4ge1xuICAgICAgZmllbGQuJGNsZWFyRXh0ZXJuYWxFcnJvcnMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZWFjdGl2ZSh7XG4gICAgLi4uc2NvcGVTdGF0ZSxcbiAgICAkZmllbGRzLFxuICAgICR2YWx1ZTogc3RhdGUsXG4gICAgJHJlc2V0LFxuICAgICR0b3VjaCxcbiAgICAkdmFsaWRhdGUsXG4gICAgJHVud2F0Y2gsXG4gICAgJHdhdGNoLFxuICAgICRjbGVhckV4dGVybmFsRXJyb3JzLFxuICB9KSBzYXRpc2ZpZXMgJEludGVybmFsUmVnbGVTdGF0dXM7XG59XG5cbmludGVyZmFjZSBDcmVhdGVSZWFjdGl2ZUNoaWxkcmVuU3RhdHVzIHtcbiAgc3RhdGU6IFJlZjx1bmtub3duPjtcbiAgcnVsZXNEZWY6IFJlZjwkSW50ZXJuYWxGb3JtUHJvcGVydHlUeXBlcywgYW55PjtcbiAgY3VzdG9tTWVzc2FnZXM/OiBDdXN0b21SdWxlc0RlY2xhcmF0aW9uVHJlZTtcbiAgcGF0aDogc3RyaW5nO1xuICBpbmRleD86IG51bWJlcjtcbiAgc3RvcmFnZTogUmVnbGVTdG9yYWdlO1xuICBvcHRpb25zOiBEZWVwTWF5YmVSZWY8UmVxdWlyZWREZWVwPFJlZ2xlQmVoYXZpb3VyT3B0aW9ucz4+O1xuICBleHRlcm5hbEVycm9yczogUmVhZG9ubHk8UmVmPCRJbnRlcm5hbEV4dGVybmFsUmVnbGVFcnJvcnMgfCB1bmRlZmluZWQ+PjtcbiAgb25VbndhdGNoPzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlYWN0aXZlQ2hpbGRyZW5TdGF0dXMoe1xuICBzdGF0ZSxcbiAgcnVsZXNEZWYsXG4gIGN1c3RvbU1lc3NhZ2VzLFxuICBwYXRoLFxuICBzdG9yYWdlLFxuICBvcHRpb25zLFxuICBleHRlcm5hbEVycm9ycyxcbiAgaW5kZXgsXG4gIG9uVW53YXRjaCxcbn06IENyZWF0ZVJlYWN0aXZlQ2hpbGRyZW5TdGF0dXMpOiAkSW50ZXJuYWxSZWdsZVN0YXR1c1R5cGUgfCBudWxsIHtcbiAgaWYgKGlzQ29sbGVjdGlvblJ1bGVzRGVmKHJ1bGVzRGVmKSkge1xuICAgIHJldHVybiBjcmVhdGVSZWFjdGl2ZUNvbGxlY3Rpb25TdGF0dXMoe1xuICAgICAgc3RhdGU6IHN0YXRlIGFzIFJlZjx1bmtub3duICYgeyAkaWQ/OiBzdHJpbmcgfVtdPixcbiAgICAgIHJ1bGVzRGVmLFxuICAgICAgY3VzdG9tTWVzc2FnZXMsXG4gICAgICBwYXRoLFxuICAgICAgc3RvcmFnZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBpbmRleCxcbiAgICAgIGV4dGVybmFsRXJyb3JzLFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzTmVzdGVkUnVsZXNEZWYoc3RhdGUsIHJ1bGVzRGVmKSAmJiBpc1JlZk9iamVjdChzdGF0ZSkpIHtcbiAgICByZXR1cm4gY3JlYXRlUmVhY3RpdmVOZXN0ZWRTdGF0dXMoe1xuICAgICAgc2NvcGVSdWxlczogcnVsZXNEZWYsXG4gICAgICBzdGF0ZSxcbiAgICAgIGN1c3RvbU1lc3NhZ2VzLFxuICAgICAgcGF0aCxcbiAgICAgIHN0b3JhZ2UsXG4gICAgICBvcHRpb25zLFxuICAgICAgaW5kZXgsXG4gICAgICBleHRlcm5hbEVycm9yczogZXh0ZXJuYWxFcnJvcnMgYXMgUmVhZG9ubHk8UmVmPFJlZ2xlRXh0ZXJuYWxFcnJvclRyZWUgfCB1bmRlZmluZWQ+PixcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc1ZhbGlkYXRvclJ1bGVzRGVmKHJ1bGVzRGVmKSkge1xuICAgIHJldHVybiBjcmVhdGVSZWFjdGl2ZUZpZWxkU3RhdHVzKHtcbiAgICAgIHN0YXRlLFxuICAgICAgcnVsZXNEZWYsXG4gICAgICBjdXN0b21NZXNzYWdlcyxcbiAgICAgIHBhdGgsXG4gICAgICBzdG9yYWdlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGluZGV4LFxuICAgICAgZXh0ZXJuYWxFcnJvcnM6IGV4dGVybmFsRXJyb3JzIGFzIFJlZjxzdHJpbmdbXSB8IHVuZGVmaW5lZD4sXG4gICAgICBvblVud2F0Y2gsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsImltcG9ydCB0eXBlIHsgQ29tcHV0ZWRSZWYsIFJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyBjb21wdXRlZCwgcmVhY3RpdmUsIHVucmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB0eXBlIHtcbiAgJEludGVybmFsUmVnbGVQYXJ0aWFsVmFsaWRhdGlvblRyZWUsXG4gIEN1c3RvbVJ1bGVzRGVjbGFyYXRpb25UcmVlLFxuICBSZXNvbHZlZFJlZ2xlQmVoYXZpb3VyT3B0aW9ucyxcbn0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgdXNlU3RvcmFnZSB9IGZyb20gJy4uLy4uL3VzZVN0b3JhZ2UnO1xuaW1wb3J0IHsgdXNlRXJyb3JzIH0gZnJvbSAnLi4vdXNlRXJyb3JzJztcbmltcG9ydCB7IGNyZWF0ZVJlYWN0aXZlTmVzdGVkU3RhdHVzIH0gZnJvbSAnLi9jcmVhdGVSZWFjdGl2ZU5lc3RlZFN0YXR1cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdGF0ZVByb3BlcnRpZXMoXG4gIHNjb3BlUnVsZXM6IENvbXB1dGVkUmVmPCRJbnRlcm5hbFJlZ2xlUGFydGlhbFZhbGlkYXRpb25UcmVlPixcbiAgc3RhdGU6IFJlZjxSZWNvcmQ8c3RyaW5nLCBhbnk+PixcbiAgb3B0aW9uczogUmVzb2x2ZWRSZWdsZUJlaGF2aW91ck9wdGlvbnMsXG4gIGN1c3RvbVJ1bGVzPzogKCkgPT4gQ3VzdG9tUnVsZXNEZWNsYXJhdGlvblRyZWVcbikge1xuICBjb25zdCBzdG9yYWdlID0gdXNlU3RvcmFnZSgpO1xuXG4gIGNvbnN0IGV4dGVybmFsRXJyb3JzID0gY29tcHV0ZWQoKCkgPT4gdW5yZWYob3B0aW9ucy5leHRlcm5hbEVycm9ycykpO1xuXG4gIGNvbnN0IHJlZ2xlID0gcmVhY3RpdmUoXG4gICAgY3JlYXRlUmVhY3RpdmVOZXN0ZWRTdGF0dXMoe1xuICAgICAgcm9vdFJ1bGVzOiBzY29wZVJ1bGVzLFxuICAgICAgc2NvcGVSdWxlcyxcbiAgICAgIHN0YXRlLFxuICAgICAgY3VzdG9tTWVzc2FnZXM6IGN1c3RvbVJ1bGVzPy4oKSxcbiAgICAgIHN0b3JhZ2UsXG4gICAgICBvcHRpb25zLFxuICAgICAgZXh0ZXJuYWxFcnJvcnMsXG4gICAgICB2YWxpZGF0aW9uR3JvdXBzOiBvcHRpb25zLnZhbGlkYXRpb25Hcm91cHMsXG4gICAgfSlcbiAgKTtcblxuICBjb25zdCBlcnJvcnMgPSB1c2VFcnJvcnMocmVnbGUpO1xuXG4gIHJldHVybiB7IHJlZ2xlLCBlcnJvcnMgfTtcbn1cbiIsImltcG9ydCB0eXBlIHsgUmVxdWlyZWREZWVwIH0gZnJvbSAndHlwZS1mZXN0JztcbmltcG9ydCB0eXBlIHsgQ29tcHV0ZWRSZWYsIE1heWJlUmVmLCBSZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgY29tcHV0ZWQsIGlzUmVmLCByZWYsIHRvUmF3IH0gZnJvbSAndnVlJztcbmltcG9ydCB0eXBlIHtcbiAgJEludGVybmFsUmVnbGVQYXJ0aWFsVmFsaWRhdGlvblRyZWUsXG4gIEFsbFJ1bGVzRGVjbGFyYXRpb25zLFxuICBEZWVwUmVhY3RpdmVTdGF0ZSxcbiAgRGVlcFNhZmVGb3JtU3RhdGUsXG4gIExvY2FsUmVnbGVCZWhhdmlvdXJPcHRpb25zLFxuICBSZWdsZSxcbiAgUmVnbGVCZWhhdmlvdXJPcHRpb25zLFxuICBSZWdsZUVycm9yVHJlZSxcbiAgUmVnbGVFeHRlcm5hbEVycm9yVHJlZSxcbiAgUmVnbGVQYXJ0aWFsVmFsaWRhdGlvblRyZWUsXG4gIFJlZ2xlU3RhdHVzLFxuICBSZWdsZVZhbGlkYXRpb25Hcm91cEVudHJ5LFxuICBSZXNvbHZlZFJlZ2xlQmVoYXZpb3VyT3B0aW9ucyxcbn0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBEZWVwTWF5YmVSZWYgfSBmcm9tICcuLi8uLi90eXBlcy91dGlscyc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgdXNlU3RhdGVQcm9wZXJ0aWVzIH0gZnJvbSAnLi91c2VTdGF0ZVByb3BlcnRpZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVXNlUmVnbGVDb21wb3NhYmxlPFRDdXN0b21SdWxlcyBleHRlbmRzIFBhcnRpYWw8QWxsUnVsZXNEZWNsYXJhdGlvbnM+PihcbiAgY3VzdG9tUnVsZXM/OiAoKSA9PiBUQ3VzdG9tUnVsZXMsXG4gIG9wdGlvbnM/OiBSZWdsZUJlaGF2aW91ck9wdGlvbnNcbikge1xuICBjb25zdCBnbG9iYWxPcHRpb25zOiBSZXF1aXJlZERlZXA8UmVnbGVCZWhhdmlvdXJPcHRpb25zPiA9IHtcbiAgICBhdXRvRGlydHk6IG9wdGlvbnM/LmF1dG9EaXJ0eSA/PyB0cnVlLFxuICAgIGxhenk6IG9wdGlvbnM/LmxhenkgPz8gZmFsc2UsXG4gICAgcmV3YXJkRWFybHk6IG9wdGlvbnM/LnJld2FyZEVhcmx5ID8/IGZhbHNlLFxuICB9O1xuXG4gIGZ1bmN0aW9uIHVzZVJlZ2xlPFxuICAgIFRTdGF0ZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgVFJ1bGVzIGV4dGVuZHMgUmVnbGVQYXJ0aWFsVmFsaWRhdGlvblRyZWU8VFN0YXRlLCBQYXJ0aWFsPEFsbFJ1bGVzRGVjbGFyYXRpb25zPiAmIFRDdXN0b21SdWxlcz4sXG4gICAgVEV4dGVybmFsIGV4dGVuZHMgUmVnbGVFeHRlcm5hbEVycm9yVHJlZTxUU3RhdGU+LFxuICAgIFRWYWxpZGF0aW9uR3JvdXBzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUmVnbGVWYWxpZGF0aW9uR3JvdXBFbnRyeVtdPixcbiAgICBUVmFsaWQgPSBrZXlvZiBUUnVsZXMgZXh0ZW5kcyBrZXlvZiBSZWdsZVBhcnRpYWxWYWxpZGF0aW9uVHJlZTxcbiAgICAgIFRTdGF0ZSxcbiAgICAgIFBhcnRpYWw8QWxsUnVsZXNEZWNsYXJhdGlvbnM+ICYgVEN1c3RvbVJ1bGVzXG4gICAgPlxuICAgICAgPyB0cnVlXG4gICAgICA6IGZhbHNlLFxuICA+KFxuICAgIHN0YXRlOiBNYXliZVJlZjxUU3RhdGU+IHwgRGVlcFJlYWN0aXZlU3RhdGU8VFN0YXRlPixcbiAgICBydWxlc0ZhY3Rvcnk6IFRWYWxpZCBleHRlbmRzIHRydWUgPyBUUnVsZXMgfCAoKCkgPT4gVFJ1bGVzKSB8IENvbXB1dGVkUmVmPFRSdWxlcz4gOiBuZXZlcixcbiAgICBvcHRpb25zPzogUGFydGlhbDxEZWVwTWF5YmVSZWY8UmVnbGVCZWhhdmlvdXJPcHRpb25zPj4gJlxuICAgICAgTG9jYWxSZWdsZUJlaGF2aW91ck9wdGlvbnM8VFN0YXRlLCBUUnVsZXMsIFRFeHRlcm5hbCwgVFZhbGlkYXRpb25Hcm91cHM+XG4gICk6IFJlZ2xlPFRTdGF0ZSwgVFJ1bGVzLCBURXh0ZXJuYWwsIFRWYWxpZGF0aW9uR3JvdXBzPiB7XG4gICAgY29uc3Qgc2NvcGVSdWxlcyA9IGlzUmVmKHJ1bGVzRmFjdG9yeSlcbiAgICAgID8gcnVsZXNGYWN0b3J5XG4gICAgICA6IGNvbXB1dGVkKFxuICAgICAgICAgICh0eXBlb2YgKHJ1bGVzRmFjdG9yeSBhcyBUUnVsZXMgfCAoKCkgPT4gVFJ1bGVzKSkgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gcnVsZXNGYWN0b3J5XG4gICAgICAgICAgICA6ICgpID0+IHJ1bGVzRmFjdG9yeSkgYXMgYW55XG4gICAgICAgICk7XG5cbiAgICBjb25zdCByZXNvbHZlZE9wdGlvbnM6IFJlc29sdmVkUmVnbGVCZWhhdmlvdXJPcHRpb25zID0ge1xuICAgICAgLi4uZ2xvYmFsT3B0aW9ucyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSBhcyBhbnk7XG5cbiAgICBjb25zdCBwcm9jZXNzZWRTdGF0ZSA9IGlzUmVmKHN0YXRlKSA/IHN0YXRlIDogKHJlZihzdGF0ZSkgYXMgUmVmPFRTdGF0ZT4pO1xuXG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0gY2xvbmVEZWVwKHRvUmF3KHByb2Nlc3NlZFN0YXRlLnZhbHVlKSk7XG5cbiAgICBjb25zdCB7IHJlZ2xlLCBlcnJvcnMgfSA9IHVzZVN0YXRlUHJvcGVydGllcyhcbiAgICAgIHNjb3BlUnVsZXMgYXMgQ29tcHV0ZWRSZWY8JEludGVybmFsUmVnbGVQYXJ0aWFsVmFsaWRhdGlvblRyZWU+LFxuICAgICAgcHJvY2Vzc2VkU3RhdGUsXG4gICAgICByZXNvbHZlZE9wdGlvbnMsXG4gICAgICBjdXN0b21SdWxlc1xuICAgICk7XG5cbiAgICBmdW5jdGlvbiByZXNldEFsbCgpIHtcbiAgICAgIHJlZ2xlLiR1bndhdGNoKCk7XG4gICAgICByZXNldFZhbHVlc1JlY3Vyc2l2ZWx5KHN0YXRlLCBpbml0aWFsU3RhdGUpO1xuICAgICAgcmVnbGUuJHJlc2V0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzZXRWYWx1ZXNSZWN1cnNpdmVseShcbiAgICAgIGN1cnJlbnQ6IFJlZjxSZWNvcmQ8c3RyaW5nLCBNYXliZVJlZjxhbnk+Pj4gfCBSZWNvcmQ8c3RyaW5nLCBNYXliZVJlZjxhbnk+PixcbiAgICAgIGluaXRpYWw6IFJlY29yZDxzdHJpbmcsIE1heWJlUmVmPGFueT4+XG4gICAgKSB7XG4gICAgICBPYmplY3QuZW50cmllcyhpbml0aWFsKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgbGV0IGN1cnJlbnRSZWYgPSBpc1JlZjxSZWNvcmQ8c3RyaW5nLCBNYXliZVJlZjxhbnk+Pj4oY3VycmVudCkgPyBjdXJyZW50LnZhbHVlIDogY3VycmVudDtcbiAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZSA9IGlzUmVmKGN1cnJlbnRSZWZba2V5XSkgPyBjdXJyZW50UmVmW2tleV0udmFsdWUgOiBjdXJyZW50UmVmW2tleV07XG4gICAgICAgIGxldCBpbml0aWFsUmVmID0gaXNSZWYoaW5pdGlhbFtrZXldKSA/IChpbml0aWFsW2tleV0gYXMgYW55KS5fdmFsdWUgOiBpbml0aWFsW2tleV07XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGluaXRpYWxSZWYpICYmIEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgIGN1cnJlbnRSZWZba2V5XSA9IFtdO1xuICAgICAgICAgIGluaXRpYWxSZWYuZm9yRWFjaCgodmFsLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY3VycmVudFJlZltrZXldW2luZGV4XSA9IHt9O1xuICAgICAgICAgICAgcmVzZXRWYWx1ZXNSZWN1cnNpdmVseShjdXJyZW50UmVmW2tleV1baW5kZXhdLCBpbml0aWFsUmVmW2luZGV4XSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoaW5pdGlhbFJlZikpIHtcbiAgICAgICAgICByZXNldFZhbHVlc1JlY3Vyc2l2ZWx5KGN1cnJlbnRWYWx1ZSwgaW5pdGlhbFJlZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGlzUmVmKGN1cnJlbnRSZWZba2V5XSkpIHtcbiAgICAgICAgICAgIGN1cnJlbnRSZWZba2V5XS52YWx1ZSA9IGluaXRpYWxSZWY7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRSZWZba2V5XSA9IGluaXRpYWxSZWY7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZWFkeSA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgIHJldHVybiAhKHJlZ2xlLiRpbnZhbGlkIHx8IHJlZ2xlLiRwZW5kaW5nKTtcbiAgICB9KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlU3RhdGUoKTogUHJvbWlzZTxmYWxzZSB8IERlZXBTYWZlRm9ybVN0YXRlPFRTdGF0ZSwgVFJ1bGVzPj4ge1xuICAgICAgcmVnbGUuJHRvdWNoKCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWdsZS4kdmFsaWRhdGUoKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3NlZFN0YXRlLnZhbHVlIGFzIGFueTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVnbGU6IHJlZ2xlIGFzIHVua25vd24gYXMgUmVnbGVTdGF0dXM8VFN0YXRlLCBUUnVsZXMsIFRWYWxpZGF0aW9uR3JvdXBzPixcbiAgICAgIHIkOiByZWdsZSBhcyB1bmtub3duIGFzIFJlZ2xlU3RhdHVzPFRTdGF0ZSwgVFJ1bGVzLCBUVmFsaWRhdGlvbkdyb3Vwcz4sXG4gICAgICBlcnJvcnM6IGVycm9ycyBhcyBSZWdsZUVycm9yVHJlZTxUUnVsZXM+LFxuICAgICAgcmVzZXRBbGwsXG4gICAgICB2YWxpZGF0ZVN0YXRlLFxuICAgICAgcmVhZHksXG4gICAgICBzdGF0ZTogcHJvY2Vzc2VkU3RhdGUsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB1c2VSZWdsZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVJlZ2xlID0gY3JlYXRlVXNlUmVnbGVDb21wb3NhYmxlKCk7XG4iLCJpbXBvcnQgdHlwZSB7IEFsbFJ1bGVzRGVjbGFyYXRpb25zLCBSZWdsZUJlaGF2aW91ck9wdGlvbnMgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVVc2VSZWdsZUNvbXBvc2FibGUgfSBmcm9tICcuL3VzZVJlZ2xlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVJlZ2xlQ29uZmlnPFRDdXN0b21SdWxlcyBleHRlbmRzIFBhcnRpYWw8QWxsUnVsZXNEZWNsYXJhdGlvbnM+Pih7XG4gIHJ1bGVzLFxuICBtb2RpZmllcnMsXG59OiB7XG4gIHJ1bGVzPzogKCkgPT4gVEN1c3RvbVJ1bGVzO1xuICBtb2RpZmllcnM/OiBSZWdsZUJlaGF2aW91ck9wdGlvbnM7XG59KSB7XG4gIGNvbnN0IHVzZVJlZ2xlID0gY3JlYXRlVXNlUmVnbGVDb21wb3NhYmxlPFRDdXN0b21SdWxlcz4ocnVsZXMsIG1vZGlmaWVycyk7XG5cbiAgcmV0dXJuIHVzZVJlZ2xlO1xufVxuIl19
|
|
1
|
+
'use strict';var vue=require('vue');function F(e){return e.map(t=>t instanceof Function?t():vue.unref(t))}function Ce(e){return e.map(t=>t instanceof Function||vue.isRef(t)?t:vue.toRef(()=>t))}function Ie(e){let t=e.toString();return (t.includes("=>")?t.split("=>")[0]:t).slice(t.indexOf("(")+1,t.indexOf(")")).split(",").map(o=>o.trim()).filter(o=>o.includes("=")).length+e.length}function se(e,...t){let{message:r,validator:n,active:a,...o}=e,m=n.constructor.name==="AsyncFunction";return {...{validator(y,...i){return e.validator(y,...F(i.length?i:t))},message(y,i){return typeof e.message=="function"?e.message(y,{...i,$params:F(i.$params?.length?i.$params:t)}):e.message},active(y,i){return typeof e.active=="function"?e.active(y,{...i,$params:F(i.$params?.length?i.$params:t)}):e.active??!0},exec(y){let i=e.validator(y,...F(t)),l;return i instanceof Promise?i.then(T=>(l=T,typeof l=="object"&&"$valid"in l?l.$valid:typeof l=="boolean"?l:!1)):(l=i,typeof l=="object"&&"$valid"in l?l.$valid:typeof l=="boolean"?l:!1)}},...o,_validator:e.validator,_message:e.message,_active:e.active,_type:e.type,_patched:!1,_async:m,_params:Ce(t)}}function ie(e){if(typeof e.validator=="function"){let r=se(e,...[]),n=e.validator.constructor.name==="AsyncFunction";if(Ie(e.validator)>1){let a=function(...o){return se(e,...o)};return a.validator=r.validator,a.message=r.message,a.active=r.active,a.type=r.type,a.exec=r.exec,a._validator=r.validator,a._message=r.message,a._active=r.active,a._type=e.type,a._patched=!1,a._async=n,a}else return r}throw new Error("Validator must be a function")}function k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Pe(e){return k(e.value)}function G(e){let t=e,r={}.toString.call(e).slice(8,-1);if(r=="Set"&&(t=new Set([...e].map(n=>G(n)))),r=="Map"&&(t=new Map([...e].map(n=>[G(n[0]),G(n[1])]))),r=="Date"&&(t=new Date(e.getTime())),r=="RegExp"&&(t=RegExp(e.source,et(e))),r=="Array"||r=="Object"){t=Array.isArray(e)?[]:{};for(let n in e)t[n]=G(e[n]);}return t}function et(e){if(typeof e.source.flags=="string")return e.source.flags;{let t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}}function ue(e,t,r){return e instanceof Function?e(t,r??0):e}function te(e){return e==null?!0:e===!1?!1:e instanceof Date?isNaN(e.getTime()):Array.isArray(e)?e.length===0:typeof e=="object"&&e!=null?Object.keys(e).length===0:typeof e=="string"?!String(e.trim()).length:!1}function Q(e,t,r){let n,a=(...o)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(m);},t);});return a.cancel=()=>{clearTimeout(n),n=void 0;},a.doImmediately=(...o)=>new Promise(m=>{clearTimeout(n),n=setTimeout(()=>{n=void 0,Promise.resolve(e.apply(this,[...o])).then(m);},0);}),a}function rt(e,t){let r=String(e).split("."),n=String(t).split(".");for(let a=0;a<Math.min(r.length,n.length);a++){let o=Number(r[a]),m=Number(n[a]);if(o>m)return 1;if(m>o)return -1;if(!isNaN(o)&&isNaN(m))return 1;if(isNaN(o)&&!isNaN(m))return -1}return 0}var H=rt(vue.version,"3.5.0")!==-1;function nt(){return Math.floor(Math.random()*Date.now()).toString()}function ce(){return typeof window>"u"?nt():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function fe(){let e=vue.shallowRef(new Map),t=vue.shallowRef(new Map),r=vue.shallowRef(new Map),n=vue.shallowRef(new Map),a=vue.shallowRef(new Map),o=vue.shallowRef(new Map);function m(p){let R=t.value.get(p);if(R)return R;{let d=vue.ref({});return t.value.set(p,d),d}}function I(p){let R=r.value.get(p);if(R)return R;{let d=vue.ref([]);return r.value.set(p,d),d}}function P(p,R,d){o.value.set(`${p}-${R}`,d);}function y(p,R){return o.value.get(`${p}-${R}`)}function i(p,R){p&&R!=null&&o.value.delete(`${p}-${R}`);}function l(p,R){n.value.set(p,R);}function T(p){return n.value.get(p)??!1}function h(p,R){e.value.set(p,R);}function E(p,R){let d=e.value.get(p);return d?u(R,d)?{valid:!0}:{valid:!1}:void 0}function u(p,R){let d=Object.keys(R),w=Object.keys(p);return w.length!==d.length||!w.every(g=>d.includes(g))?!1:w.every(g=>{let c=p[g],s=R[g];return !s||!c||typeof c=="function"||typeof s=="function"||typeof c=="number"||typeof c=="boolean"?!1:c._params?c._params?.every((f,C)=>{if(typeof s=="number"||typeof s=="boolean")return !0;{let v=F(s._params),S=F(c._params);return v?.[C]===S?.[C]}}):!0})}function M(p){let R=a.value.get(p);if(R)return R;{let d=vue.ref(!1),w=vue.ref(!0),x=vue.ref({}),g=vue.ref(!1);return a.value.set(p,{$pending:d,$valid:w,$metadata:x,$validating:g}),{$pending:d,$valid:w,$metadata:x,$validating:g}}}return vue.onScopeDispose(()=>{e.value.clear(),t.value.clear(),r.value.clear(),n.value.clear(),a.value.clear(),o.value.clear();}),{addRuleDeclEntry:h,setDirtyEntry:l,checkRuleDeclEntry:E,getDirtyState:T,trySetRuleStatusRef:M,getFieldsEntry:m,getCollectionsEntry:I,getArrayStatus:y,addArrayStatus:P,deleteArrayStatus:i,arrayStatusStorage:o}}function we(e,t){return k(e.value)&&k(t.value)&&!Object.entries(t.value).some(r=>Re(r))}function Oe(e){return !!e.value&&"$each"in e.value}function Ae(e){return !!e.value&&k(e.value)}function Re(e){return k(e)&&"_validator"in e}function X(e){return typeof e.value!="function"}function pe(e){return k(e)&&"$fields"in e}function de(e){return !!e&&"$each"in e}function me(e){return !!e&&"$rules"in e}function ge(e){return "$each"in e||"$errors"in e}function N({field:e,silent:t=!1}){return Object.entries(e.$rules??{}).map(([r,n])=>t||!n.$valid&&e.$dirty?n.$message:null).filter(r=>!!r).reduce((r,n)=>typeof n=="string"?r?.concat([n]):r?.concat(n),[]).concat(e.$externalErrors??[])}function Me(e,t=!1){return pe(e)?ye(e.$fields):de(e)?{$errors:e.$field.$rules?N({field:e.$field,silent:t}):[],$each:e.$each.map(r=>Me(r,t))}:me(e)?e.$error?N({field:e,silent:t}):e.$externalErrors??[]:[]}function ot(e,t=!1){return e.map(r=>Me(r,t))}function ye(e,t=!1){return Object.fromEntries(Object.entries(e).map(([r,n])=>pe(n)?[r,ye(n.$fields,t)]:de(n)?[r,{$errors:N({field:n.$field,silent:t}),$each:ot(n.$each,t)}]:me(n)?n.$error?[r,N({field:n,silent:t})]:[r,n.$externalErrors??[]]:[r,[]]))}function Fe(e){return vue.computed(()=>ye(e.$fields))}var Ve=(r=>(r.Inline="__inline",r.Async="__async",r))(Ve||{});function _e(e,t){return vue.computed(()=>e.value.some(r=>r[t]))}function ke(e,t){return vue.computed(()=>e.value.reduce((r,n)=>{let a=n[t]||[];return r.concat(a)},[]))}function Be({$dirty:e,customMessages:t,rule:r,ruleKey:n,state:a,path:o,storage:m,$debounce:I}){let P=vue.effectScope(),y,i,{$pending:l,$valid:T,$metadata:h,$validating:E}=m.trySetRuleStatusRef(`${o}.${n}`);function u(){y=P.run(()=>{let x=vue.computed(()=>({$invalid:!T.value,$params:C.value,...h.value})),g=vue.computed(()=>X(r)?typeof r.value.active=="function"?r.value.active(a.value,x.value):r.value.active:!0),c=vue.computed(()=>{let S="",D=t?t[n]?.message:void 0;return D&&(typeof D=="function"?S=D(a.value,x.value):S=D),X(r)&&(D&&!r.value._patched||(typeof r.value.message=="function"?S=r.value.message(a.value,x.value):S=r.value.message)),te(S)&&(S="Error",console.warn(`No error message defined for ${o}.${n}`)),S}),s=vue.computed(()=>X(r)&&r.value.type?r.value.type:n),f=vue.computed(()=>X(r)?r.value.validator:r.value),C=vue.computed(()=>typeof r.value=="function"?[]:F(r.value._params??[])),v=vue.computed(()=>`${o}.${s.value}`);return {$active:g,$message:c,$type:s,$validator:f,$params:C,$path:v}}),i=vue.watch(y.$params,R,{deep:!0});}u();async function M(x){let g=!1;try{T.value=!0,e.value&&(l.value=!0);let c=await x;if(typeof c=="boolean")g=c;else {let{$valid:s,...f}=c;g=s,h.value=f;}}catch{g=!1;}finally{l.value=!1;}return g}let p=Q(M,I??100);async function R(){E.value=!0;let x=y.$validator.value,g=!1,c=x(a.value,...y.$params.value);if(c instanceof Promise)g=await p(c);else if(c!=null)if(typeof c=="boolean")g=c;else {let{$valid:s,...f}=c;g=s,h.value=f;}return T.value=g,E.value=!1,g}function d(){T.value=!0,h.value={},l.value=!1,E.value=!1,u();}function w(){i(),P.stop(),P=vue.effectScope();}return vue.reactive({...y,$pending:l,$valid:T,$metadata:h,$validate:R,$unwatch:w,$watch:u,$reset:d})}function re({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:I,onUnwatch:P}){let y=vue.effectScope(),i,l=vue.ref(!1),T=vue.ref(!1),h=vue.ref([]),E,u,M,p,R=()=>{};function d(){h.value=m.value??[];}d();function w(){let $=t.value,b=a.checkRuleDeclEntry(n,$);f.value=Object.fromEntries(Object.entries($).filter(([A])=>A.startsWith("$"))),s.value=Object.fromEntries(Object.entries(t.value).filter(([A])=>!A.startsWith("$")).map(([A,_])=>{if(_){let le=vue.toRef(()=>_);return [A,Be({$dirty:l,customMessages:r,rule:le,ruleKey:A,state:e,path:n,storage:a,$debounce:f.value.$debounce})]}return []}).filter(A=>!!A.length)),g(),R=i.$debounce.value?Q(c,i.$debounce.value??0):c,b?.valid!=null&&(l.value=a.getDirtyState(n),l.value&&R()),a.addRuleDeclEntry(n,$);}function x(){s.value&&Object.entries(s.value).forEach(([$,b])=>{b.$unwatch();}),p(),l.value&&a.setDirtyEntry(n,l.value),E(),u(),M(),y.stop(),y=vue.effectScope(),P?.();}function g(){s.value&&Object.entries(s.value).forEach(([$,b])=>{b.$watch();}),i=y.run(()=>{let $=vue.computed(()=>l.value),b=vue.computed(()=>f.value.$debounce),A=vue.computed(()=>f.value.$lazy!=null?f.value.$lazy:vue.unref(o.lazy)),_=vue.computed(()=>f.value.$rewardEarly!=null?f.value.$rewardEarly:vue.unref(o.rewardEarly)),le=vue.computed(()=>f.value.$autoDirty!=null?f.value.$autoDirty:vue.unref(o.autoDirty)),Je=vue.computed(()=>oe.value&&!he.value&&l.value),Qe=vue.computed(()=>N({field:{$dirty:l.value,$externalErrors:h.value,$rules:s.value}})),Xe=vue.computed(()=>N({field:{$dirty:l.value,$externalErrors:h.value,$rules:s.value},silent:!0})),he=vue.computed(()=>T.value||!_.value?Object.entries(s.value).some(([ee,J])=>J.$pending):!1),oe=vue.computed(()=>h.value?.length?!0:!_.value||_.value&&T.value?Object.entries(s.value).some(([ee,J])=>!J.$valid):!1),De=vue.computed(()=>l.value&&!te(e.value)?h.value?.length?!1:_.value?Object.entries(s.value).every(([ee,J])=>J.$valid):!oe.value:!1);return vue.watch(De,ee=>{ee&&(T.value=!1);}),{$error:Je,$pending:he,$invalid:oe,$valid:De,$debounce:b,$lazy:A,$errors:Qe,$silentErrors:Xe,$rewardEarly:_,$autoDirty:le,$anyDirty:$}}),M=vue.watch(m,d),E=vue.watch(e,()=>{i.$autoDirty.value&&(l.value||(l.value=!0)),t.value instanceof Function&&w(),R(),i.$rewardEarly.value;},{deep:H?1:!0}),p=vue.watch(l,()=>{a.setDirtyEntry(n,l.value);}),u=vue.watch(i.$valid,$=>{i.$rewardEarly.value&&$&&(T.value=!1);});}function c(){Object.entries(s.value).forEach(([$,b])=>{b.$validate();});}let s=vue.ref(),f=vue.ref();w();function C(){l.value=!1,h.value=[],Object.entries(s.value).forEach(([$,b])=>{b.$reset();}),i.$lazy.value||Object.entries(s.value).map(([$,b])=>b.$validate());}function v(){l.value||(l.value=!0,i.$rewardEarly.value,R());}let S=i.$debounce.value?Q(D,i.$debounce.value??0):D;async function D(){try{if(T.value=!0,i.$autoDirty.value&&l.value&&!i.$pending.value)return !i.$error.value;{let $=Object.entries(s.value).map(([A,_])=>_.$validate());return (await Promise.allSettled($)).every(A=>A.status==="fulfilled"?A.value:!1)}}catch{return !1}}function O(){h.value=[];}return i.$lazy.value||D(),vue.reactive({$dirty:l,...i,$externalErrors:h,$value:e,$rules:s,$reset:C,$touch:v,$validate:S,$unwatch:x,$watch:g,$clearExternalErrors:O})}function Ue({$id:e,path:t,index:r,options:n,storage:a,stateValue:o,customMessages:m,rules:I,externalErrors:P}){let y=I.$key?I.$key:ce(),i=`${t}.${String(y)}`;typeof o.value=="object"&&o.value!=null&&(o.value.$id?i=`${t}.${o.value.$id}`:Object.defineProperties(o.value,{$id:{value:y,enumerable:!1,configurable:!1,writable:!1}}));let l=vue.toRef(()=>P.value?.[r]),T=ae({state:o,rulesDef:vue.toRef(()=>I),customMessages:m,path:i,storage:a,options:n,externalErrors:l});if(T){let h=o.value?.$id;T.$id=h??String(y),a.addArrayStatus(e,T.$id,T);}return T}function We({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m}){let I=vue.effectScope(),P,y=vue.effectScope(),i;if(Array.isArray(e.value)&&!t.value.$each)return null;let l=vue.ref(),T=vue.ref(e.value),h,E=vue.ref({}),u=a.getCollectionsEntry(n);i=y.run(()=>{let s=vue.computed(()=>Array.isArray(e.value)&&e.value.length?e.value.some(v=>typeof v!="object"):t.value.$each&&!(t.value.$each instanceof Function)?Object.values(t.value.$each).every(v=>Re(v)):!1),f=vue.computed(()=>m.value?ge(m.value)?m.value.$errors??[]:[]:[]),C=vue.computed(()=>m.value?ge(m.value)?m.value.$each??[]:[]:[]);return {isPrimitiveArray:s,$externalErrorsField:f,$externalErrorsEach:C}}),M(),R();function M(){typeof e.value=="object"&&(e.value!=null&&!e.value?.$id&&e.value!==null?(l.value=ce(),Object.defineProperties(e.value,{$id:{value:l.value,enumerable:!1,configurable:!1,writable:!1}})):e.value?.$id&&(l.value=e.value.$id)),!i.isPrimitiveArray.value&&(T.value=E.value.$value,Array.isArray(e.value)&&t.value.$each?u.value=e.value.map((s,f)=>{let C=ue(t.value.$each,vue.toRef(()=>s),f);if(C){let v=Ue({$id:l.value,path:n,rules:C,stateValue:vue.toRef(()=>s),index:f,options:o,storage:a,externalErrors:i.$externalErrorsEach});return v||null}}).filter(s=>!!s):u.value=[],E.value=re({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:i.$externalErrorsField}));}function p(){if(Array.isArray(e.value)){let s=G(u.value);u.value=e.value.map((f,C)=>{let v=vue.toRef(()=>f);if(f.$id&&u.value.find(S=>S.$id===f.$id)){let S=a.getArrayStatus(l.value,f.$id);return S?(S.$value=v,S):null}else {let S=ue(t.value.$each,v,C);if(S){let D=Ue({$id:l.value,path:n,rules:S,stateValue:v,index:C,options:o,storage:a,externalErrors:i.$externalErrorsEach});return D||null}}}).filter(f=>!!f),s.filter(f=>!e.value.find(C=>f.$id===C.$id)).forEach((f,C)=>{a.deleteArrayStatus(l.value,C.toString());});}else u.value=[];}function R(){h=vue.watch(e,()=>{e.value!=null&&!Object.hasOwn(e.value,"$id")?M():p();},{deep:H?1:!0,flush:"pre"}),P=I.run(()=>{let s=vue.computed(()=>E.value.$dirty&&u.value.every(b=>b.$dirty)),f=vue.computed(()=>E.value.$anyDirty||u.value.some(b=>b.$dirty)),C=vue.computed(()=>E.value.$invalid||u.value.some(b=>b.$invalid)),v=vue.computed(()=>E.value.$valid&&u.value.every(b=>b.$valid)),S=vue.computed(()=>E.value.$error||u.value.some(b=>b.$error)),D=vue.computed(()=>E.value.$pending||u.value.some(b=>b.$pending)),O=vue.computed(()=>({$errors:E.value.$errors,$each:u.value.map(b=>b.$errors)})),$=vue.computed(()=>({$errors:E.value.$silentErrors,$each:u.value.map(b=>b.$silentErrors)}));return {$dirty:s,$anyDirty:f,$invalid:C,$valid:v,$error:S,$pending:D,$errors:O,$silentErrors:$}}),i.isPrimitiveArray.value&&(console.warn(`${n} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`),h());}function d(){h&&h(),E.value&&E.value.$unwatch(),u.value&&u.value.forEach(s=>{"$dirty"in s&&s.$unwatch();}),I.stop(),I=vue.effectScope(),y.stop(),y=vue.effectScope(!0);}function w(){E.value.$touch(),u.value.forEach(s=>{s.$touch();});}function x(){E.value.$reset(),u.value.forEach(s=>{s.$reset();});}async function g(){try{return (await Promise.all([E.value.$validate(),...u.value.map(f=>f.$validate())])).every(f=>!!f)}catch{return !1}}function c(){}return vue.reactive({$field:E,...P,$each:u,$value:e,$validate:g,$unwatch:d,$watch:R,$touch:w,$reset:x,$clearExternalErrors:c})}function Se({scopeRules:e,state:t,customMessages:r,path:n="",rootRules:a,storage:o,options:m,externalErrors:I,validationGroups:P}){let y,i,l;function E(g=!0,c=!1){u.value=null,vue.triggerRef(u);let s=Object.fromEntries(Object.entries(e.value).map(([v,S])=>{if(S){let D=vue.toRef(t.value,v),O=vue.toRef(()=>S),$=vue.toRef(()=>I.value?.[v]);return [v,ae({state:D,rulesDef:O,customMessages:r,path:n?`${n}.${v}`:v,storage:o,options:m,externalErrors:$})]}return []}).filter(v=>!!v.length&&v[1]!=null)),f=Object.fromEntries(Object.entries(vue.unref(I)??{}).filter(([v])=>!(v in e.value)).map(([v,S])=>{if(S){let D=vue.toRef(()=>({})),O=vue.toRef(()=>S);return [v,ae({state:vue.ref(void 0),rulesDef:D,customMessages:r,path:n?`${n}.${v}`:v,storage:o,options:m,externalErrors:O})]}return []})),C=Object.fromEntries(Object.entries(P?.(s)??{}).map(([v,S])=>S.length?[v,{...Object.fromEntries(["$invalid","$error","$pending","$dirty","$valid"].map(D=>[D,_e(vue.toRef(()=>S),D)])),...Object.fromEntries(["$errors","$silentErrors"].map(D=>[D,ke(vue.toRef(()=>S),D)]))}]:[]));u.value={...s,...f,...C},g&&d();}let u=o.getFieldsEntry(n);E();function M(){E(!1),Object.entries(u.value).forEach(([g,c])=>{c.$reset();}),d();}function p(){Object.entries(u.value).forEach(([g,c])=>{c.$touch();});}async function R(){try{return (await Promise.allSettled(Object.entries(u.value).map(([c,s])=>s.$validate()))).every(c=>c.status==="fulfilled"?c.value:!1)}catch{return !1}}function d(){a&&(l=vue.watch(a,()=>{w(),E();},{deep:H?1:!0,flush:"post"})),y=vue.effectScope(),i=y.run(()=>{let g=vue.computed(()=>!!Object.entries(u.value).length&&Object.entries(u.value).every(([O,$])=>$.$dirty)),c=vue.computed(()=>Object.entries(u.value).some(([O,$])=>$.$dirty)),s=vue.computed(()=>Object.entries(u.value).some(([O,$])=>$.$invalid)),f=vue.computed(()=>Object.entries(u.value).every(([O,$])=>$.$valid)),C=vue.computed(()=>Object.entries(u.value).some(([O,$])=>$.$error)),v=vue.computed(()=>Object.entries(u.value).some(([O,$])=>$.$pending)),S=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([O,$])=>[O,$.$errors]))),D=vue.computed(()=>Object.fromEntries(Object.entries(u.value).map(([O,$])=>[O,$.$silentErrors])));return {$dirty:g,$anyDirty:c,$invalid:s,$valid:f,$error:C,$pending:v,$errors:S,$silentErrors:D}});}function w(){u.value&&Object.entries(u.value).forEach(([g,c])=>{c.$unwatch();}),l?.(),y.stop(),y=vue.effectScope();}function x(){Object.entries(u.value).forEach(([g,c])=>{c.$clearExternalErrors();});}return vue.reactive({...i,$fields:u,$value:t,$reset:M,$touch:p,$validate:R,$unwatch:w,$watch:d,$clearExternalErrors:x})}function ae({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,externalErrors:m,index:I,onUnwatch:P}){return Oe(t)?We({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:I,externalErrors:m}):we(e,t)&&Pe(e)?Se({scopeRules:t,state:e,customMessages:r,path:n,storage:a,options:o,index:I,externalErrors:m}):Ae(t)?re({state:e,rulesDef:t,customMessages:r,path:n,storage:a,options:o,index:I,externalErrors:m,onUnwatch:P}):null}function Ee(e,t,r,n){let a=fe(),o=vue.computed(()=>vue.unref(r.externalErrors)),m=vue.reactive(Se({rootRules:e,scopeRules:e,state:t,customMessages:n?.(),storage:a,options:r,externalErrors:o,validationGroups:r.validationGroups})),I=Fe(m);return {regle:m,errors:I}}function be(e,t){let r={autoDirty:t?.autoDirty??!0,lazy:t?.lazy??!1,rewardEarly:t?.rewardEarly??!1};function n(a,o,m){let I=vue.isRef(o)?o:vue.computed(typeof o=="function"?o:()=>o),P={...r,...m},y=vue.isRef(a)?a:vue.ref(a),i=G(vue.toRaw(y.value)),{regle:l,errors:T}=Ee(I,y,P,e);function h(){l.$unwatch(),E(a,i),l.$reset();}function E(p,R){Object.entries(R).forEach(([d,w])=>{let x=vue.isRef(p)?p.value:p,g=vue.isRef(x[d])?x[d].value:x[d],c=vue.isRef(R[d])?R[d]._value:R[d];Array.isArray(c)&&Array.isArray(g)?(x[d]=[],c.forEach((s,f)=>{x[d][f]={},E(x[d][f],c[f]);})):k(c)?E(g,c):vue.isRef(x[d])?x[d].value=c:x[d]=c;});}let u=vue.computed(()=>!(l.$invalid||l.$pending));async function M(){return l.$touch(),await l.$validate()?y.value:!1}return {regle:l,r$:l,errors:T,resetAll:h,validateState:M,ready:u,state:y}}return n}var Le=be();function xe(){function e(t,r){return r}return e}var Te=xe();function ze({rules:e,modifiers:t}){let r=be(e,t),n=xe();return {useRegle:r,inferRules:n}}exports.InternalRuleType=Ve;exports.createRule=ie;exports.defineRegleConfig=ze;exports.inferRules=Te;exports.unwrapRuleParameters=F;exports.useRegle=Le;
|