@kulupu-linku/sona 0.3.7 → 2.0.2
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/.assetsignore +0 -0
- package/dist/client-BSyS8F5a.d.ts +1612 -0
- package/dist/client-BitJ28pJ.js +10 -0
- package/dist/client-CUMo53JZ.d.ts +1612 -0
- package/dist/client-DNWH1gFt.js +10 -0
- package/dist/index-1jX6YIBj.d.ts +1497 -0
- package/dist/index-DObG_APy.d.ts +398 -0
- package/dist/index-DsVEVr6r.d.ts +300 -0
- package/dist/lib/v1/client.d.ts +3 -0
- package/dist/lib/v1/client.js +3 -0
- package/dist/lib/v1/client.test.d.ts +31 -0
- package/dist/lib/v1/client.test.js +3 -0
- package/dist/lib/v1/index.d.ts +2 -0
- package/dist/lib/v1/index.js +4 -0
- package/dist/lib/v1/types.d.ts +2 -0
- package/dist/lib/v1/types.js +1 -0
- package/dist/lib/v1/utils.d.ts +26 -0
- package/dist/lib/v1/utils.js +3 -0
- package/dist/lib/v2/client.d.ts +3 -0
- package/dist/lib/v2/client.js +3 -0
- package/dist/lib/v2/client.test.d.ts +36 -0
- package/dist/lib/v2/client.test.js +3 -0
- package/dist/lib/v2/index.d.ts +2 -0
- package/dist/lib/v2/index.js +4 -0
- package/dist/lib/v2/types.d.ts +2 -0
- package/dist/lib/v2/types.js +1 -0
- package/dist/lib/v2/utils.d.ts +44 -0
- package/dist/lib/v2/utils.js +3 -0
- package/dist/server/index.d.ts +2 -685
- package/dist/server/index.js +43 -0
- package/dist/server/utils.d.ts +23 -15
- package/dist/server/utils.js +3 -0
- package/dist/server/v1/index.d.ts +864 -639
- package/dist/server/v1/index.js +8 -0
- package/dist/server/v2/index.d.ts +1112 -0
- package/dist/server/v2/index.js +8 -0
- package/dist/server/versioning.d.ts +1965 -2369
- package/dist/server/versioning.js +8 -0
- package/dist/utils-DkAaVBMs.js +33 -0
- package/dist/utils-QiKwNnnL.js +37 -0
- package/dist/utils-Z1o5sWsW.js +40 -0
- package/dist/v1-DkHVwPCI.js +139 -0
- package/dist/v1-obRCoWWK.js +267 -0
- package/dist/v2-CDtbJFxV.js +194 -0
- package/generated/v2/fingerspelling.json +124 -0
- package/generated/v2/fingerspellings.json +135 -0
- package/generated/v2/font.json +119 -0
- package/generated/v2/fonts.json +130 -0
- package/generated/v2/glyph.json +160 -0
- package/generated/v2/glyphs.json +167 -0
- package/generated/v2/language.json +58 -0
- package/generated/v2/languages.json +67 -0
- package/generated/v2/sign.json +149 -0
- package/generated/v2/signs.json +160 -0
- package/generated/v2/word.json +306 -0
- package/generated/v2/words.json +313 -0
- package/package.json +47 -28
- package/dist/client.d.ts +0 -2
- package/dist/client.js +0 -172
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -223
- package/dist/lib/client.d.ts +0 -743
- package/dist/lib/client.test.d.ts +0 -27
- package/dist/lib/index.d.ts +0 -962
- package/dist/lib/types.d.ts +0 -17
- package/dist/lib/utils.d.ts +0 -13
- package/dist/utils-B3Jq5OVZ.js +0 -2899
- package/dist/utils.d.ts +0 -2
- package/dist/utils.js +0 -9
- package/generated/words.json +0 -315
- /package/generated/{commentary_translation.json → v1/commentary_translation.json} +0 -0
- /package/generated/{definition_translation.json → v1/definition_translation.json} +0 -0
- /package/generated/{etymology_translation.json → v1/etymology_translation.json} +0 -0
- /package/generated/{fingerspelling.json → v1/fingerspelling.json} +0 -0
- /package/generated/{fingerspelling_sign.json → v1/fingerspelling_sign.json} +0 -0
- /package/generated/{font.json → v1/font.json} +0 -0
- /package/generated/{fonts.json → v1/fonts.json} +0 -0
- /package/generated/{icon_translation.json → v1/icon_translation.json} +0 -0
- /package/generated/{languages.json → v1/languages.json} +0 -0
- /package/generated/{parameters_translation.json → v1/parameters_translation.json} +0 -0
- /package/generated/{sign.json → v1/sign.json} +0 -0
- /package/generated/{signs.json → v1/signs.json} +0 -0
- /package/generated/{sitelen_pona_translation.json → v1/sitelen_pona_translation.json} +0 -0
- /package/generated/{word.json → v1/word.json} +0 -0
package/dist/utils-B3Jq5OVZ.js
DELETED
|
@@ -1,2899 +0,0 @@
|
|
|
1
|
-
var g;
|
|
2
|
-
(function(r) {
|
|
3
|
-
r.assertEqual = (n) => n;
|
|
4
|
-
function e(n) {
|
|
5
|
-
}
|
|
6
|
-
r.assertIs = e;
|
|
7
|
-
function t(n) {
|
|
8
|
-
throw new Error();
|
|
9
|
-
}
|
|
10
|
-
r.assertNever = t, r.arrayToEnum = (n) => {
|
|
11
|
-
const a = {};
|
|
12
|
-
for (const i of n)
|
|
13
|
-
a[i] = i;
|
|
14
|
-
return a;
|
|
15
|
-
}, r.getValidEnumValues = (n) => {
|
|
16
|
-
const a = r.objectKeys(n).filter((o) => typeof n[n[o]] != "number"), i = {};
|
|
17
|
-
for (const o of a)
|
|
18
|
-
i[o] = n[o];
|
|
19
|
-
return r.objectValues(i);
|
|
20
|
-
}, r.objectValues = (n) => r.objectKeys(n).map(function(a) {
|
|
21
|
-
return n[a];
|
|
22
|
-
}), r.objectKeys = typeof Object.keys == "function" ? (n) => Object.keys(n) : (n) => {
|
|
23
|
-
const a = [];
|
|
24
|
-
for (const i in n)
|
|
25
|
-
Object.prototype.hasOwnProperty.call(n, i) && a.push(i);
|
|
26
|
-
return a;
|
|
27
|
-
}, r.find = (n, a) => {
|
|
28
|
-
for (const i of n)
|
|
29
|
-
if (a(i))
|
|
30
|
-
return i;
|
|
31
|
-
}, r.isInteger = typeof Number.isInteger == "function" ? (n) => Number.isInteger(n) : (n) => typeof n == "number" && isFinite(n) && Math.floor(n) === n;
|
|
32
|
-
function s(n, a = " | ") {
|
|
33
|
-
return n.map((i) => typeof i == "string" ? `'${i}'` : i).join(a);
|
|
34
|
-
}
|
|
35
|
-
r.joinValues = s, r.jsonStringifyReplacer = (n, a) => typeof a == "bigint" ? a.toString() : a;
|
|
36
|
-
})(g || (g = {}));
|
|
37
|
-
var ke;
|
|
38
|
-
(function(r) {
|
|
39
|
-
r.mergeShapes = (e, t) => ({
|
|
40
|
-
...e,
|
|
41
|
-
...t
|
|
42
|
-
// second overwrites first
|
|
43
|
-
});
|
|
44
|
-
})(ke || (ke = {}));
|
|
45
|
-
const f = g.arrayToEnum([
|
|
46
|
-
"string",
|
|
47
|
-
"nan",
|
|
48
|
-
"number",
|
|
49
|
-
"integer",
|
|
50
|
-
"float",
|
|
51
|
-
"boolean",
|
|
52
|
-
"date",
|
|
53
|
-
"bigint",
|
|
54
|
-
"symbol",
|
|
55
|
-
"function",
|
|
56
|
-
"undefined",
|
|
57
|
-
"null",
|
|
58
|
-
"array",
|
|
59
|
-
"object",
|
|
60
|
-
"unknown",
|
|
61
|
-
"promise",
|
|
62
|
-
"void",
|
|
63
|
-
"never",
|
|
64
|
-
"map",
|
|
65
|
-
"set"
|
|
66
|
-
]), A = (r) => {
|
|
67
|
-
switch (typeof r) {
|
|
68
|
-
case "undefined":
|
|
69
|
-
return f.undefined;
|
|
70
|
-
case "string":
|
|
71
|
-
return f.string;
|
|
72
|
-
case "number":
|
|
73
|
-
return isNaN(r) ? f.nan : f.number;
|
|
74
|
-
case "boolean":
|
|
75
|
-
return f.boolean;
|
|
76
|
-
case "function":
|
|
77
|
-
return f.function;
|
|
78
|
-
case "bigint":
|
|
79
|
-
return f.bigint;
|
|
80
|
-
case "symbol":
|
|
81
|
-
return f.symbol;
|
|
82
|
-
case "object":
|
|
83
|
-
return Array.isArray(r) ? f.array : r === null ? f.null : r.then && typeof r.then == "function" && r.catch && typeof r.catch == "function" ? f.promise : typeof Map < "u" && r instanceof Map ? f.map : typeof Set < "u" && r instanceof Set ? f.set : typeof Date < "u" && r instanceof Date ? f.date : f.object;
|
|
84
|
-
default:
|
|
85
|
-
return f.unknown;
|
|
86
|
-
}
|
|
87
|
-
}, d = g.arrayToEnum([
|
|
88
|
-
"invalid_type",
|
|
89
|
-
"invalid_literal",
|
|
90
|
-
"custom",
|
|
91
|
-
"invalid_union",
|
|
92
|
-
"invalid_union_discriminator",
|
|
93
|
-
"invalid_enum_value",
|
|
94
|
-
"unrecognized_keys",
|
|
95
|
-
"invalid_arguments",
|
|
96
|
-
"invalid_return_type",
|
|
97
|
-
"invalid_date",
|
|
98
|
-
"invalid_string",
|
|
99
|
-
"too_small",
|
|
100
|
-
"too_big",
|
|
101
|
-
"invalid_intersection_types",
|
|
102
|
-
"not_multiple_of",
|
|
103
|
-
"not_finite"
|
|
104
|
-
]), De = (r) => JSON.stringify(r, null, 2).replace(/"([^"]+)":/g, "$1:");
|
|
105
|
-
class T extends Error {
|
|
106
|
-
constructor(e) {
|
|
107
|
-
super(), this.issues = [], this.addIssue = (s) => {
|
|
108
|
-
this.issues = [...this.issues, s];
|
|
109
|
-
}, this.addIssues = (s = []) => {
|
|
110
|
-
this.issues = [...this.issues, ...s];
|
|
111
|
-
};
|
|
112
|
-
const t = new.target.prototype;
|
|
113
|
-
Object.setPrototypeOf ? Object.setPrototypeOf(this, t) : this.__proto__ = t, this.name = "ZodError", this.issues = e;
|
|
114
|
-
}
|
|
115
|
-
get errors() {
|
|
116
|
-
return this.issues;
|
|
117
|
-
}
|
|
118
|
-
format(e) {
|
|
119
|
-
const t = e || function(a) {
|
|
120
|
-
return a.message;
|
|
121
|
-
}, s = { _errors: [] }, n = (a) => {
|
|
122
|
-
for (const i of a.issues)
|
|
123
|
-
if (i.code === "invalid_union")
|
|
124
|
-
i.unionErrors.map(n);
|
|
125
|
-
else if (i.code === "invalid_return_type")
|
|
126
|
-
n(i.returnTypeError);
|
|
127
|
-
else if (i.code === "invalid_arguments")
|
|
128
|
-
n(i.argumentsError);
|
|
129
|
-
else if (i.path.length === 0)
|
|
130
|
-
s._errors.push(t(i));
|
|
131
|
-
else {
|
|
132
|
-
let o = s, l = 0;
|
|
133
|
-
for (; l < i.path.length; ) {
|
|
134
|
-
const c = i.path[l];
|
|
135
|
-
l === i.path.length - 1 ? (o[c] = o[c] || { _errors: [] }, o[c]._errors.push(t(i))) : o[c] = o[c] || { _errors: [] }, o = o[c], l++;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
};
|
|
139
|
-
return n(this), s;
|
|
140
|
-
}
|
|
141
|
-
static assert(e) {
|
|
142
|
-
if (!(e instanceof T))
|
|
143
|
-
throw new Error(`Not a ZodError: ${e}`);
|
|
144
|
-
}
|
|
145
|
-
toString() {
|
|
146
|
-
return this.message;
|
|
147
|
-
}
|
|
148
|
-
get message() {
|
|
149
|
-
return JSON.stringify(this.issues, g.jsonStringifyReplacer, 2);
|
|
150
|
-
}
|
|
151
|
-
get isEmpty() {
|
|
152
|
-
return this.issues.length === 0;
|
|
153
|
-
}
|
|
154
|
-
flatten(e = (t) => t.message) {
|
|
155
|
-
const t = {}, s = [];
|
|
156
|
-
for (const n of this.issues)
|
|
157
|
-
n.path.length > 0 ? (t[n.path[0]] = t[n.path[0]] || [], t[n.path[0]].push(e(n))) : s.push(e(n));
|
|
158
|
-
return { formErrors: s, fieldErrors: t };
|
|
159
|
-
}
|
|
160
|
-
get formErrors() {
|
|
161
|
-
return this.flatten();
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
T.create = (r) => new T(r);
|
|
165
|
-
const q = (r, e) => {
|
|
166
|
-
let t;
|
|
167
|
-
switch (r.code) {
|
|
168
|
-
case d.invalid_type:
|
|
169
|
-
r.received === f.undefined ? t = "Required" : t = `Expected ${r.expected}, received ${r.received}`;
|
|
170
|
-
break;
|
|
171
|
-
case d.invalid_literal:
|
|
172
|
-
t = `Invalid literal value, expected ${JSON.stringify(r.expected, g.jsonStringifyReplacer)}`;
|
|
173
|
-
break;
|
|
174
|
-
case d.unrecognized_keys:
|
|
175
|
-
t = `Unrecognized key(s) in object: ${g.joinValues(r.keys, ", ")}`;
|
|
176
|
-
break;
|
|
177
|
-
case d.invalid_union:
|
|
178
|
-
t = "Invalid input";
|
|
179
|
-
break;
|
|
180
|
-
case d.invalid_union_discriminator:
|
|
181
|
-
t = `Invalid discriminator value. Expected ${g.joinValues(r.options)}`;
|
|
182
|
-
break;
|
|
183
|
-
case d.invalid_enum_value:
|
|
184
|
-
t = `Invalid enum value. Expected ${g.joinValues(r.options)}, received '${r.received}'`;
|
|
185
|
-
break;
|
|
186
|
-
case d.invalid_arguments:
|
|
187
|
-
t = "Invalid function arguments";
|
|
188
|
-
break;
|
|
189
|
-
case d.invalid_return_type:
|
|
190
|
-
t = "Invalid function return type";
|
|
191
|
-
break;
|
|
192
|
-
case d.invalid_date:
|
|
193
|
-
t = "Invalid date";
|
|
194
|
-
break;
|
|
195
|
-
case d.invalid_string:
|
|
196
|
-
typeof r.validation == "object" ? "includes" in r.validation ? (t = `Invalid input: must include "${r.validation.includes}"`, typeof r.validation.position == "number" && (t = `${t} at one or more positions greater than or equal to ${r.validation.position}`)) : "startsWith" in r.validation ? t = `Invalid input: must start with "${r.validation.startsWith}"` : "endsWith" in r.validation ? t = `Invalid input: must end with "${r.validation.endsWith}"` : g.assertNever(r.validation) : r.validation !== "regex" ? t = `Invalid ${r.validation}` : t = "Invalid";
|
|
197
|
-
break;
|
|
198
|
-
case d.too_small:
|
|
199
|
-
r.type === "array" ? t = `Array must contain ${r.exact ? "exactly" : r.inclusive ? "at least" : "more than"} ${r.minimum} element(s)` : r.type === "string" ? t = `String must contain ${r.exact ? "exactly" : r.inclusive ? "at least" : "over"} ${r.minimum} character(s)` : r.type === "number" ? t = `Number must be ${r.exact ? "exactly equal to " : r.inclusive ? "greater than or equal to " : "greater than "}${r.minimum}` : r.type === "date" ? t = `Date must be ${r.exact ? "exactly equal to " : r.inclusive ? "greater than or equal to " : "greater than "}${new Date(Number(r.minimum))}` : t = "Invalid input";
|
|
200
|
-
break;
|
|
201
|
-
case d.too_big:
|
|
202
|
-
r.type === "array" ? t = `Array must contain ${r.exact ? "exactly" : r.inclusive ? "at most" : "less than"} ${r.maximum} element(s)` : r.type === "string" ? t = `String must contain ${r.exact ? "exactly" : r.inclusive ? "at most" : "under"} ${r.maximum} character(s)` : r.type === "number" ? t = `Number must be ${r.exact ? "exactly" : r.inclusive ? "less than or equal to" : "less than"} ${r.maximum}` : r.type === "bigint" ? t = `BigInt must be ${r.exact ? "exactly" : r.inclusive ? "less than or equal to" : "less than"} ${r.maximum}` : r.type === "date" ? t = `Date must be ${r.exact ? "exactly" : r.inclusive ? "smaller than or equal to" : "smaller than"} ${new Date(Number(r.maximum))}` : t = "Invalid input";
|
|
203
|
-
break;
|
|
204
|
-
case d.custom:
|
|
205
|
-
t = "Invalid input";
|
|
206
|
-
break;
|
|
207
|
-
case d.invalid_intersection_types:
|
|
208
|
-
t = "Intersection results could not be merged";
|
|
209
|
-
break;
|
|
210
|
-
case d.not_multiple_of:
|
|
211
|
-
t = `Number must be a multiple of ${r.multipleOf}`;
|
|
212
|
-
break;
|
|
213
|
-
case d.not_finite:
|
|
214
|
-
t = "Number must be finite";
|
|
215
|
-
break;
|
|
216
|
-
default:
|
|
217
|
-
t = e.defaultError, g.assertNever(r);
|
|
218
|
-
}
|
|
219
|
-
return { message: t };
|
|
220
|
-
};
|
|
221
|
-
let Oe = q;
|
|
222
|
-
function Le(r) {
|
|
223
|
-
Oe = r;
|
|
224
|
-
}
|
|
225
|
-
function le() {
|
|
226
|
-
return Oe;
|
|
227
|
-
}
|
|
228
|
-
const fe = (r) => {
|
|
229
|
-
const { data: e, path: t, errorMaps: s, issueData: n } = r, a = [...t, ...n.path || []], i = {
|
|
230
|
-
...n,
|
|
231
|
-
path: a
|
|
232
|
-
};
|
|
233
|
-
if (n.message !== void 0)
|
|
234
|
-
return {
|
|
235
|
-
...n,
|
|
236
|
-
path: a,
|
|
237
|
-
message: n.message
|
|
238
|
-
};
|
|
239
|
-
let o = "";
|
|
240
|
-
const l = s.filter((c) => !!c).slice().reverse();
|
|
241
|
-
for (const c of l)
|
|
242
|
-
o = c(i, { data: e, defaultError: o }).message;
|
|
243
|
-
return {
|
|
244
|
-
...n,
|
|
245
|
-
path: a,
|
|
246
|
-
message: o
|
|
247
|
-
};
|
|
248
|
-
}, ze = [];
|
|
249
|
-
function u(r, e) {
|
|
250
|
-
const t = le(), s = fe({
|
|
251
|
-
issueData: e,
|
|
252
|
-
data: r.data,
|
|
253
|
-
path: r.path,
|
|
254
|
-
errorMaps: [
|
|
255
|
-
r.common.contextualErrorMap,
|
|
256
|
-
r.schemaErrorMap,
|
|
257
|
-
t,
|
|
258
|
-
t === q ? void 0 : q
|
|
259
|
-
// then global default map
|
|
260
|
-
].filter((n) => !!n)
|
|
261
|
-
});
|
|
262
|
-
r.common.issues.push(s);
|
|
263
|
-
}
|
|
264
|
-
class b {
|
|
265
|
-
constructor() {
|
|
266
|
-
this.value = "valid";
|
|
267
|
-
}
|
|
268
|
-
dirty() {
|
|
269
|
-
this.value === "valid" && (this.value = "dirty");
|
|
270
|
-
}
|
|
271
|
-
abort() {
|
|
272
|
-
this.value !== "aborted" && (this.value = "aborted");
|
|
273
|
-
}
|
|
274
|
-
static mergeArray(e, t) {
|
|
275
|
-
const s = [];
|
|
276
|
-
for (const n of t) {
|
|
277
|
-
if (n.status === "aborted")
|
|
278
|
-
return m;
|
|
279
|
-
n.status === "dirty" && e.dirty(), s.push(n.value);
|
|
280
|
-
}
|
|
281
|
-
return { status: e.value, value: s };
|
|
282
|
-
}
|
|
283
|
-
static async mergeObjectAsync(e, t) {
|
|
284
|
-
const s = [];
|
|
285
|
-
for (const n of t) {
|
|
286
|
-
const a = await n.key, i = await n.value;
|
|
287
|
-
s.push({
|
|
288
|
-
key: a,
|
|
289
|
-
value: i
|
|
290
|
-
});
|
|
291
|
-
}
|
|
292
|
-
return b.mergeObjectSync(e, s);
|
|
293
|
-
}
|
|
294
|
-
static mergeObjectSync(e, t) {
|
|
295
|
-
const s = {};
|
|
296
|
-
for (const n of t) {
|
|
297
|
-
const { key: a, value: i } = n;
|
|
298
|
-
if (a.status === "aborted" || i.status === "aborted")
|
|
299
|
-
return m;
|
|
300
|
-
a.status === "dirty" && e.dirty(), i.status === "dirty" && e.dirty(), a.value !== "__proto__" && (typeof i.value < "u" || n.alwaysSet) && (s[a.value] = i.value);
|
|
301
|
-
}
|
|
302
|
-
return { status: e.value, value: s };
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
const m = Object.freeze({
|
|
306
|
-
status: "aborted"
|
|
307
|
-
}), B = (r) => ({ status: "dirty", value: r }), w = (r) => ({ status: "valid", value: r }), be = (r) => r.status === "aborted", we = (r) => r.status === "dirty", X = (r) => r.status === "valid", Q = (r) => typeof Promise < "u" && r instanceof Promise;
|
|
308
|
-
function he(r, e, t, s) {
|
|
309
|
-
if (typeof e == "function" ? r !== e || !s : !e.has(r)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
310
|
-
return e.get(r);
|
|
311
|
-
}
|
|
312
|
-
function Ee(r, e, t, s, n) {
|
|
313
|
-
if (typeof e == "function" ? r !== e || !n : !e.has(r)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
314
|
-
return e.set(r, t), t;
|
|
315
|
-
}
|
|
316
|
-
var h;
|
|
317
|
-
(function(r) {
|
|
318
|
-
r.errToObj = (e) => typeof e == "string" ? { message: e } : e || {}, r.toString = (e) => typeof e == "string" ? e : e == null ? void 0 : e.message;
|
|
319
|
-
})(h || (h = {}));
|
|
320
|
-
var H, G;
|
|
321
|
-
class E {
|
|
322
|
-
constructor(e, t, s, n) {
|
|
323
|
-
this._cachedPath = [], this.parent = e, this.data = t, this._path = s, this._key = n;
|
|
324
|
-
}
|
|
325
|
-
get path() {
|
|
326
|
-
return this._cachedPath.length || (this._key instanceof Array ? this._cachedPath.push(...this._path, ...this._key) : this._cachedPath.push(...this._path, this._key)), this._cachedPath;
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
const Ce = (r, e) => {
|
|
330
|
-
if (X(e))
|
|
331
|
-
return { success: !0, data: e.value };
|
|
332
|
-
if (!r.common.issues.length)
|
|
333
|
-
throw new Error("Validation failed but no issues detected.");
|
|
334
|
-
return {
|
|
335
|
-
success: !1,
|
|
336
|
-
get error() {
|
|
337
|
-
if (this._error)
|
|
338
|
-
return this._error;
|
|
339
|
-
const t = new T(r.common.issues);
|
|
340
|
-
return this._error = t, this._error;
|
|
341
|
-
}
|
|
342
|
-
};
|
|
343
|
-
};
|
|
344
|
-
function v(r) {
|
|
345
|
-
if (!r)
|
|
346
|
-
return {};
|
|
347
|
-
const { errorMap: e, invalid_type_error: t, required_error: s, description: n } = r;
|
|
348
|
-
if (e && (t || s))
|
|
349
|
-
throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);
|
|
350
|
-
return e ? { errorMap: e, description: n } : { errorMap: (i, o) => {
|
|
351
|
-
var l, c;
|
|
352
|
-
const { message: y } = r;
|
|
353
|
-
return i.code === "invalid_enum_value" ? { message: y ?? o.defaultError } : typeof o.data > "u" ? { message: (l = y ?? s) !== null && l !== void 0 ? l : o.defaultError } : i.code !== "invalid_type" ? { message: o.defaultError } : { message: (c = y ?? t) !== null && c !== void 0 ? c : o.defaultError };
|
|
354
|
-
}, description: n };
|
|
355
|
-
}
|
|
356
|
-
class _ {
|
|
357
|
-
constructor(e) {
|
|
358
|
-
this.spa = this.safeParseAsync, this._def = e, this.parse = this.parse.bind(this), this.safeParse = this.safeParse.bind(this), this.parseAsync = this.parseAsync.bind(this), this.safeParseAsync = this.safeParseAsync.bind(this), this.spa = this.spa.bind(this), this.refine = this.refine.bind(this), this.refinement = this.refinement.bind(this), this.superRefine = this.superRefine.bind(this), this.optional = this.optional.bind(this), this.nullable = this.nullable.bind(this), this.nullish = this.nullish.bind(this), this.array = this.array.bind(this), this.promise = this.promise.bind(this), this.or = this.or.bind(this), this.and = this.and.bind(this), this.transform = this.transform.bind(this), this.brand = this.brand.bind(this), this.default = this.default.bind(this), this.catch = this.catch.bind(this), this.describe = this.describe.bind(this), this.pipe = this.pipe.bind(this), this.readonly = this.readonly.bind(this), this.isNullable = this.isNullable.bind(this), this.isOptional = this.isOptional.bind(this);
|
|
359
|
-
}
|
|
360
|
-
get description() {
|
|
361
|
-
return this._def.description;
|
|
362
|
-
}
|
|
363
|
-
_getType(e) {
|
|
364
|
-
return A(e.data);
|
|
365
|
-
}
|
|
366
|
-
_getOrReturnCtx(e, t) {
|
|
367
|
-
return t || {
|
|
368
|
-
common: e.parent.common,
|
|
369
|
-
data: e.data,
|
|
370
|
-
parsedType: A(e.data),
|
|
371
|
-
schemaErrorMap: this._def.errorMap,
|
|
372
|
-
path: e.path,
|
|
373
|
-
parent: e.parent
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
_processInputParams(e) {
|
|
377
|
-
return {
|
|
378
|
-
status: new b(),
|
|
379
|
-
ctx: {
|
|
380
|
-
common: e.parent.common,
|
|
381
|
-
data: e.data,
|
|
382
|
-
parsedType: A(e.data),
|
|
383
|
-
schemaErrorMap: this._def.errorMap,
|
|
384
|
-
path: e.path,
|
|
385
|
-
parent: e.parent
|
|
386
|
-
}
|
|
387
|
-
};
|
|
388
|
-
}
|
|
389
|
-
_parseSync(e) {
|
|
390
|
-
const t = this._parse(e);
|
|
391
|
-
if (Q(t))
|
|
392
|
-
throw new Error("Synchronous parse encountered promise.");
|
|
393
|
-
return t;
|
|
394
|
-
}
|
|
395
|
-
_parseAsync(e) {
|
|
396
|
-
const t = this._parse(e);
|
|
397
|
-
return Promise.resolve(t);
|
|
398
|
-
}
|
|
399
|
-
parse(e, t) {
|
|
400
|
-
const s = this.safeParse(e, t);
|
|
401
|
-
if (s.success)
|
|
402
|
-
return s.data;
|
|
403
|
-
throw s.error;
|
|
404
|
-
}
|
|
405
|
-
safeParse(e, t) {
|
|
406
|
-
var s;
|
|
407
|
-
const n = {
|
|
408
|
-
common: {
|
|
409
|
-
issues: [],
|
|
410
|
-
async: (s = t == null ? void 0 : t.async) !== null && s !== void 0 ? s : !1,
|
|
411
|
-
contextualErrorMap: t == null ? void 0 : t.errorMap
|
|
412
|
-
},
|
|
413
|
-
path: (t == null ? void 0 : t.path) || [],
|
|
414
|
-
schemaErrorMap: this._def.errorMap,
|
|
415
|
-
parent: null,
|
|
416
|
-
data: e,
|
|
417
|
-
parsedType: A(e)
|
|
418
|
-
}, a = this._parseSync({ data: e, path: n.path, parent: n });
|
|
419
|
-
return Ce(n, a);
|
|
420
|
-
}
|
|
421
|
-
async parseAsync(e, t) {
|
|
422
|
-
const s = await this.safeParseAsync(e, t);
|
|
423
|
-
if (s.success)
|
|
424
|
-
return s.data;
|
|
425
|
-
throw s.error;
|
|
426
|
-
}
|
|
427
|
-
async safeParseAsync(e, t) {
|
|
428
|
-
const s = {
|
|
429
|
-
common: {
|
|
430
|
-
issues: [],
|
|
431
|
-
contextualErrorMap: t == null ? void 0 : t.errorMap,
|
|
432
|
-
async: !0
|
|
433
|
-
},
|
|
434
|
-
path: (t == null ? void 0 : t.path) || [],
|
|
435
|
-
schemaErrorMap: this._def.errorMap,
|
|
436
|
-
parent: null,
|
|
437
|
-
data: e,
|
|
438
|
-
parsedType: A(e)
|
|
439
|
-
}, n = this._parse({ data: e, path: s.path, parent: s }), a = await (Q(n) ? n : Promise.resolve(n));
|
|
440
|
-
return Ce(s, a);
|
|
441
|
-
}
|
|
442
|
-
refine(e, t) {
|
|
443
|
-
const s = (n) => typeof t == "string" || typeof t > "u" ? { message: t } : typeof t == "function" ? t(n) : t;
|
|
444
|
-
return this._refinement((n, a) => {
|
|
445
|
-
const i = e(n), o = () => a.addIssue({
|
|
446
|
-
code: d.custom,
|
|
447
|
-
...s(n)
|
|
448
|
-
});
|
|
449
|
-
return typeof Promise < "u" && i instanceof Promise ? i.then((l) => l ? !0 : (o(), !1)) : i ? !0 : (o(), !1);
|
|
450
|
-
});
|
|
451
|
-
}
|
|
452
|
-
refinement(e, t) {
|
|
453
|
-
return this._refinement((s, n) => e(s) ? !0 : (n.addIssue(typeof t == "function" ? t(s, n) : t), !1));
|
|
454
|
-
}
|
|
455
|
-
_refinement(e) {
|
|
456
|
-
return new N({
|
|
457
|
-
schema: this,
|
|
458
|
-
typeName: p.ZodEffects,
|
|
459
|
-
effect: { type: "refinement", refinement: e }
|
|
460
|
-
});
|
|
461
|
-
}
|
|
462
|
-
superRefine(e) {
|
|
463
|
-
return this._refinement(e);
|
|
464
|
-
}
|
|
465
|
-
optional() {
|
|
466
|
-
return O.create(this, this._def);
|
|
467
|
-
}
|
|
468
|
-
nullable() {
|
|
469
|
-
return V.create(this, this._def);
|
|
470
|
-
}
|
|
471
|
-
nullish() {
|
|
472
|
-
return this.nullable().optional();
|
|
473
|
-
}
|
|
474
|
-
array() {
|
|
475
|
-
return C.create(this, this._def);
|
|
476
|
-
}
|
|
477
|
-
promise() {
|
|
478
|
-
return J.create(this, this._def);
|
|
479
|
-
}
|
|
480
|
-
or(e) {
|
|
481
|
-
return te.create([this, e], this._def);
|
|
482
|
-
}
|
|
483
|
-
and(e) {
|
|
484
|
-
return re.create(this, e, this._def);
|
|
485
|
-
}
|
|
486
|
-
transform(e) {
|
|
487
|
-
return new N({
|
|
488
|
-
...v(this._def),
|
|
489
|
-
schema: this,
|
|
490
|
-
typeName: p.ZodEffects,
|
|
491
|
-
effect: { type: "transform", transform: e }
|
|
492
|
-
});
|
|
493
|
-
}
|
|
494
|
-
default(e) {
|
|
495
|
-
const t = typeof e == "function" ? e : () => e;
|
|
496
|
-
return new oe({
|
|
497
|
-
...v(this._def),
|
|
498
|
-
innerType: this,
|
|
499
|
-
defaultValue: t,
|
|
500
|
-
typeName: p.ZodDefault
|
|
501
|
-
});
|
|
502
|
-
}
|
|
503
|
-
brand() {
|
|
504
|
-
return new Ze({
|
|
505
|
-
typeName: p.ZodBranded,
|
|
506
|
-
type: this,
|
|
507
|
-
...v(this._def)
|
|
508
|
-
});
|
|
509
|
-
}
|
|
510
|
-
catch(e) {
|
|
511
|
-
const t = typeof e == "function" ? e : () => e;
|
|
512
|
-
return new de({
|
|
513
|
-
...v(this._def),
|
|
514
|
-
innerType: this,
|
|
515
|
-
catchValue: t,
|
|
516
|
-
typeName: p.ZodCatch
|
|
517
|
-
});
|
|
518
|
-
}
|
|
519
|
-
describe(e) {
|
|
520
|
-
const t = this.constructor;
|
|
521
|
-
return new t({
|
|
522
|
-
...this._def,
|
|
523
|
-
description: e
|
|
524
|
-
});
|
|
525
|
-
}
|
|
526
|
-
pipe(e) {
|
|
527
|
-
return ue.create(this, e);
|
|
528
|
-
}
|
|
529
|
-
readonly() {
|
|
530
|
-
return ce.create(this);
|
|
531
|
-
}
|
|
532
|
-
isOptional() {
|
|
533
|
-
return this.safeParse(void 0).success;
|
|
534
|
-
}
|
|
535
|
-
isNullable() {
|
|
536
|
-
return this.safeParse(null).success;
|
|
537
|
-
}
|
|
538
|
-
}
|
|
539
|
-
const Ue = /^c[^\s-]{8,}$/i, Be = /^[0-9a-z]+$/, We = /^[0-9A-HJKMNP-TV-Z]{26}$/, qe = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i, Ye = /^[a-z0-9_-]{21}$/i, Je = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/, He = /^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i, Ge = "^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";
|
|
540
|
-
let xe;
|
|
541
|
-
const Xe = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/, Qe = /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/, Ke = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/, Re = "((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))", Fe = new RegExp(`^${Re}$`);
|
|
542
|
-
function Ie(r) {
|
|
543
|
-
let e = "([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";
|
|
544
|
-
return r.precision ? e = `${e}\\.\\d{${r.precision}}` : r.precision == null && (e = `${e}(\\.\\d+)?`), e;
|
|
545
|
-
}
|
|
546
|
-
function et(r) {
|
|
547
|
-
return new RegExp(`^${Ie(r)}$`);
|
|
548
|
-
}
|
|
549
|
-
function je(r) {
|
|
550
|
-
let e = `${Re}T${Ie(r)}`;
|
|
551
|
-
const t = [];
|
|
552
|
-
return t.push(r.local ? "Z?" : "Z"), r.offset && t.push("([+-]\\d{2}:?\\d{2})"), e = `${e}(${t.join("|")})`, new RegExp(`^${e}$`);
|
|
553
|
-
}
|
|
554
|
-
function tt(r, e) {
|
|
555
|
-
return !!((e === "v4" || !e) && Xe.test(r) || (e === "v6" || !e) && Qe.test(r));
|
|
556
|
-
}
|
|
557
|
-
class S extends _ {
|
|
558
|
-
_parse(e) {
|
|
559
|
-
if (this._def.coerce && (e.data = String(e.data)), this._getType(e) !== f.string) {
|
|
560
|
-
const a = this._getOrReturnCtx(e);
|
|
561
|
-
return u(a, {
|
|
562
|
-
code: d.invalid_type,
|
|
563
|
-
expected: f.string,
|
|
564
|
-
received: a.parsedType
|
|
565
|
-
}), m;
|
|
566
|
-
}
|
|
567
|
-
const s = new b();
|
|
568
|
-
let n;
|
|
569
|
-
for (const a of this._def.checks)
|
|
570
|
-
if (a.kind === "min")
|
|
571
|
-
e.data.length < a.value && (n = this._getOrReturnCtx(e, n), u(n, {
|
|
572
|
-
code: d.too_small,
|
|
573
|
-
minimum: a.value,
|
|
574
|
-
type: "string",
|
|
575
|
-
inclusive: !0,
|
|
576
|
-
exact: !1,
|
|
577
|
-
message: a.message
|
|
578
|
-
}), s.dirty());
|
|
579
|
-
else if (a.kind === "max")
|
|
580
|
-
e.data.length > a.value && (n = this._getOrReturnCtx(e, n), u(n, {
|
|
581
|
-
code: d.too_big,
|
|
582
|
-
maximum: a.value,
|
|
583
|
-
type: "string",
|
|
584
|
-
inclusive: !0,
|
|
585
|
-
exact: !1,
|
|
586
|
-
message: a.message
|
|
587
|
-
}), s.dirty());
|
|
588
|
-
else if (a.kind === "length") {
|
|
589
|
-
const i = e.data.length > a.value, o = e.data.length < a.value;
|
|
590
|
-
(i || o) && (n = this._getOrReturnCtx(e, n), i ? u(n, {
|
|
591
|
-
code: d.too_big,
|
|
592
|
-
maximum: a.value,
|
|
593
|
-
type: "string",
|
|
594
|
-
inclusive: !0,
|
|
595
|
-
exact: !0,
|
|
596
|
-
message: a.message
|
|
597
|
-
}) : o && u(n, {
|
|
598
|
-
code: d.too_small,
|
|
599
|
-
minimum: a.value,
|
|
600
|
-
type: "string",
|
|
601
|
-
inclusive: !0,
|
|
602
|
-
exact: !0,
|
|
603
|
-
message: a.message
|
|
604
|
-
}), s.dirty());
|
|
605
|
-
} else if (a.kind === "email")
|
|
606
|
-
He.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
607
|
-
validation: "email",
|
|
608
|
-
code: d.invalid_string,
|
|
609
|
-
message: a.message
|
|
610
|
-
}), s.dirty());
|
|
611
|
-
else if (a.kind === "emoji")
|
|
612
|
-
xe || (xe = new RegExp(Ge, "u")), xe.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
613
|
-
validation: "emoji",
|
|
614
|
-
code: d.invalid_string,
|
|
615
|
-
message: a.message
|
|
616
|
-
}), s.dirty());
|
|
617
|
-
else if (a.kind === "uuid")
|
|
618
|
-
qe.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
619
|
-
validation: "uuid",
|
|
620
|
-
code: d.invalid_string,
|
|
621
|
-
message: a.message
|
|
622
|
-
}), s.dirty());
|
|
623
|
-
else if (a.kind === "nanoid")
|
|
624
|
-
Ye.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
625
|
-
validation: "nanoid",
|
|
626
|
-
code: d.invalid_string,
|
|
627
|
-
message: a.message
|
|
628
|
-
}), s.dirty());
|
|
629
|
-
else if (a.kind === "cuid")
|
|
630
|
-
Ue.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
631
|
-
validation: "cuid",
|
|
632
|
-
code: d.invalid_string,
|
|
633
|
-
message: a.message
|
|
634
|
-
}), s.dirty());
|
|
635
|
-
else if (a.kind === "cuid2")
|
|
636
|
-
Be.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
637
|
-
validation: "cuid2",
|
|
638
|
-
code: d.invalid_string,
|
|
639
|
-
message: a.message
|
|
640
|
-
}), s.dirty());
|
|
641
|
-
else if (a.kind === "ulid")
|
|
642
|
-
We.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
643
|
-
validation: "ulid",
|
|
644
|
-
code: d.invalid_string,
|
|
645
|
-
message: a.message
|
|
646
|
-
}), s.dirty());
|
|
647
|
-
else if (a.kind === "url")
|
|
648
|
-
try {
|
|
649
|
-
new URL(e.data);
|
|
650
|
-
} catch {
|
|
651
|
-
n = this._getOrReturnCtx(e, n), u(n, {
|
|
652
|
-
validation: "url",
|
|
653
|
-
code: d.invalid_string,
|
|
654
|
-
message: a.message
|
|
655
|
-
}), s.dirty();
|
|
656
|
-
}
|
|
657
|
-
else a.kind === "regex" ? (a.regex.lastIndex = 0, a.regex.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
658
|
-
validation: "regex",
|
|
659
|
-
code: d.invalid_string,
|
|
660
|
-
message: a.message
|
|
661
|
-
}), s.dirty())) : a.kind === "trim" ? e.data = e.data.trim() : a.kind === "includes" ? e.data.includes(a.value, a.position) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
662
|
-
code: d.invalid_string,
|
|
663
|
-
validation: { includes: a.value, position: a.position },
|
|
664
|
-
message: a.message
|
|
665
|
-
}), s.dirty()) : a.kind === "toLowerCase" ? e.data = e.data.toLowerCase() : a.kind === "toUpperCase" ? e.data = e.data.toUpperCase() : a.kind === "startsWith" ? e.data.startsWith(a.value) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
666
|
-
code: d.invalid_string,
|
|
667
|
-
validation: { startsWith: a.value },
|
|
668
|
-
message: a.message
|
|
669
|
-
}), s.dirty()) : a.kind === "endsWith" ? e.data.endsWith(a.value) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
670
|
-
code: d.invalid_string,
|
|
671
|
-
validation: { endsWith: a.value },
|
|
672
|
-
message: a.message
|
|
673
|
-
}), s.dirty()) : a.kind === "datetime" ? je(a).test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
674
|
-
code: d.invalid_string,
|
|
675
|
-
validation: "datetime",
|
|
676
|
-
message: a.message
|
|
677
|
-
}), s.dirty()) : a.kind === "date" ? Fe.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
678
|
-
code: d.invalid_string,
|
|
679
|
-
validation: "date",
|
|
680
|
-
message: a.message
|
|
681
|
-
}), s.dirty()) : a.kind === "time" ? et(a).test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
682
|
-
code: d.invalid_string,
|
|
683
|
-
validation: "time",
|
|
684
|
-
message: a.message
|
|
685
|
-
}), s.dirty()) : a.kind === "duration" ? Je.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
686
|
-
validation: "duration",
|
|
687
|
-
code: d.invalid_string,
|
|
688
|
-
message: a.message
|
|
689
|
-
}), s.dirty()) : a.kind === "ip" ? tt(e.data, a.version) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
690
|
-
validation: "ip",
|
|
691
|
-
code: d.invalid_string,
|
|
692
|
-
message: a.message
|
|
693
|
-
}), s.dirty()) : a.kind === "base64" ? Ke.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
694
|
-
validation: "base64",
|
|
695
|
-
code: d.invalid_string,
|
|
696
|
-
message: a.message
|
|
697
|
-
}), s.dirty()) : g.assertNever(a);
|
|
698
|
-
return { status: s.value, value: e.data };
|
|
699
|
-
}
|
|
700
|
-
_regex(e, t, s) {
|
|
701
|
-
return this.refinement((n) => e.test(n), {
|
|
702
|
-
validation: t,
|
|
703
|
-
code: d.invalid_string,
|
|
704
|
-
...h.errToObj(s)
|
|
705
|
-
});
|
|
706
|
-
}
|
|
707
|
-
_addCheck(e) {
|
|
708
|
-
return new S({
|
|
709
|
-
...this._def,
|
|
710
|
-
checks: [...this._def.checks, e]
|
|
711
|
-
});
|
|
712
|
-
}
|
|
713
|
-
email(e) {
|
|
714
|
-
return this._addCheck({ kind: "email", ...h.errToObj(e) });
|
|
715
|
-
}
|
|
716
|
-
url(e) {
|
|
717
|
-
return this._addCheck({ kind: "url", ...h.errToObj(e) });
|
|
718
|
-
}
|
|
719
|
-
emoji(e) {
|
|
720
|
-
return this._addCheck({ kind: "emoji", ...h.errToObj(e) });
|
|
721
|
-
}
|
|
722
|
-
uuid(e) {
|
|
723
|
-
return this._addCheck({ kind: "uuid", ...h.errToObj(e) });
|
|
724
|
-
}
|
|
725
|
-
nanoid(e) {
|
|
726
|
-
return this._addCheck({ kind: "nanoid", ...h.errToObj(e) });
|
|
727
|
-
}
|
|
728
|
-
cuid(e) {
|
|
729
|
-
return this._addCheck({ kind: "cuid", ...h.errToObj(e) });
|
|
730
|
-
}
|
|
731
|
-
cuid2(e) {
|
|
732
|
-
return this._addCheck({ kind: "cuid2", ...h.errToObj(e) });
|
|
733
|
-
}
|
|
734
|
-
ulid(e) {
|
|
735
|
-
return this._addCheck({ kind: "ulid", ...h.errToObj(e) });
|
|
736
|
-
}
|
|
737
|
-
base64(e) {
|
|
738
|
-
return this._addCheck({ kind: "base64", ...h.errToObj(e) });
|
|
739
|
-
}
|
|
740
|
-
ip(e) {
|
|
741
|
-
return this._addCheck({ kind: "ip", ...h.errToObj(e) });
|
|
742
|
-
}
|
|
743
|
-
datetime(e) {
|
|
744
|
-
var t, s;
|
|
745
|
-
return typeof e == "string" ? this._addCheck({
|
|
746
|
-
kind: "datetime",
|
|
747
|
-
precision: null,
|
|
748
|
-
offset: !1,
|
|
749
|
-
local: !1,
|
|
750
|
-
message: e
|
|
751
|
-
}) : this._addCheck({
|
|
752
|
-
kind: "datetime",
|
|
753
|
-
precision: typeof (e == null ? void 0 : e.precision) > "u" ? null : e == null ? void 0 : e.precision,
|
|
754
|
-
offset: (t = e == null ? void 0 : e.offset) !== null && t !== void 0 ? t : !1,
|
|
755
|
-
local: (s = e == null ? void 0 : e.local) !== null && s !== void 0 ? s : !1,
|
|
756
|
-
...h.errToObj(e == null ? void 0 : e.message)
|
|
757
|
-
});
|
|
758
|
-
}
|
|
759
|
-
date(e) {
|
|
760
|
-
return this._addCheck({ kind: "date", message: e });
|
|
761
|
-
}
|
|
762
|
-
time(e) {
|
|
763
|
-
return typeof e == "string" ? this._addCheck({
|
|
764
|
-
kind: "time",
|
|
765
|
-
precision: null,
|
|
766
|
-
message: e
|
|
767
|
-
}) : this._addCheck({
|
|
768
|
-
kind: "time",
|
|
769
|
-
precision: typeof (e == null ? void 0 : e.precision) > "u" ? null : e == null ? void 0 : e.precision,
|
|
770
|
-
...h.errToObj(e == null ? void 0 : e.message)
|
|
771
|
-
});
|
|
772
|
-
}
|
|
773
|
-
duration(e) {
|
|
774
|
-
return this._addCheck({ kind: "duration", ...h.errToObj(e) });
|
|
775
|
-
}
|
|
776
|
-
regex(e, t) {
|
|
777
|
-
return this._addCheck({
|
|
778
|
-
kind: "regex",
|
|
779
|
-
regex: e,
|
|
780
|
-
...h.errToObj(t)
|
|
781
|
-
});
|
|
782
|
-
}
|
|
783
|
-
includes(e, t) {
|
|
784
|
-
return this._addCheck({
|
|
785
|
-
kind: "includes",
|
|
786
|
-
value: e,
|
|
787
|
-
position: t == null ? void 0 : t.position,
|
|
788
|
-
...h.errToObj(t == null ? void 0 : t.message)
|
|
789
|
-
});
|
|
790
|
-
}
|
|
791
|
-
startsWith(e, t) {
|
|
792
|
-
return this._addCheck({
|
|
793
|
-
kind: "startsWith",
|
|
794
|
-
value: e,
|
|
795
|
-
...h.errToObj(t)
|
|
796
|
-
});
|
|
797
|
-
}
|
|
798
|
-
endsWith(e, t) {
|
|
799
|
-
return this._addCheck({
|
|
800
|
-
kind: "endsWith",
|
|
801
|
-
value: e,
|
|
802
|
-
...h.errToObj(t)
|
|
803
|
-
});
|
|
804
|
-
}
|
|
805
|
-
min(e, t) {
|
|
806
|
-
return this._addCheck({
|
|
807
|
-
kind: "min",
|
|
808
|
-
value: e,
|
|
809
|
-
...h.errToObj(t)
|
|
810
|
-
});
|
|
811
|
-
}
|
|
812
|
-
max(e, t) {
|
|
813
|
-
return this._addCheck({
|
|
814
|
-
kind: "max",
|
|
815
|
-
value: e,
|
|
816
|
-
...h.errToObj(t)
|
|
817
|
-
});
|
|
818
|
-
}
|
|
819
|
-
length(e, t) {
|
|
820
|
-
return this._addCheck({
|
|
821
|
-
kind: "length",
|
|
822
|
-
value: e,
|
|
823
|
-
...h.errToObj(t)
|
|
824
|
-
});
|
|
825
|
-
}
|
|
826
|
-
/**
|
|
827
|
-
* @deprecated Use z.string().min(1) instead.
|
|
828
|
-
* @see {@link ZodString.min}
|
|
829
|
-
*/
|
|
830
|
-
nonempty(e) {
|
|
831
|
-
return this.min(1, h.errToObj(e));
|
|
832
|
-
}
|
|
833
|
-
trim() {
|
|
834
|
-
return new S({
|
|
835
|
-
...this._def,
|
|
836
|
-
checks: [...this._def.checks, { kind: "trim" }]
|
|
837
|
-
});
|
|
838
|
-
}
|
|
839
|
-
toLowerCase() {
|
|
840
|
-
return new S({
|
|
841
|
-
...this._def,
|
|
842
|
-
checks: [...this._def.checks, { kind: "toLowerCase" }]
|
|
843
|
-
});
|
|
844
|
-
}
|
|
845
|
-
toUpperCase() {
|
|
846
|
-
return new S({
|
|
847
|
-
...this._def,
|
|
848
|
-
checks: [...this._def.checks, { kind: "toUpperCase" }]
|
|
849
|
-
});
|
|
850
|
-
}
|
|
851
|
-
get isDatetime() {
|
|
852
|
-
return !!this._def.checks.find((e) => e.kind === "datetime");
|
|
853
|
-
}
|
|
854
|
-
get isDate() {
|
|
855
|
-
return !!this._def.checks.find((e) => e.kind === "date");
|
|
856
|
-
}
|
|
857
|
-
get isTime() {
|
|
858
|
-
return !!this._def.checks.find((e) => e.kind === "time");
|
|
859
|
-
}
|
|
860
|
-
get isDuration() {
|
|
861
|
-
return !!this._def.checks.find((e) => e.kind === "duration");
|
|
862
|
-
}
|
|
863
|
-
get isEmail() {
|
|
864
|
-
return !!this._def.checks.find((e) => e.kind === "email");
|
|
865
|
-
}
|
|
866
|
-
get isURL() {
|
|
867
|
-
return !!this._def.checks.find((e) => e.kind === "url");
|
|
868
|
-
}
|
|
869
|
-
get isEmoji() {
|
|
870
|
-
return !!this._def.checks.find((e) => e.kind === "emoji");
|
|
871
|
-
}
|
|
872
|
-
get isUUID() {
|
|
873
|
-
return !!this._def.checks.find((e) => e.kind === "uuid");
|
|
874
|
-
}
|
|
875
|
-
get isNANOID() {
|
|
876
|
-
return !!this._def.checks.find((e) => e.kind === "nanoid");
|
|
877
|
-
}
|
|
878
|
-
get isCUID() {
|
|
879
|
-
return !!this._def.checks.find((e) => e.kind === "cuid");
|
|
880
|
-
}
|
|
881
|
-
get isCUID2() {
|
|
882
|
-
return !!this._def.checks.find((e) => e.kind === "cuid2");
|
|
883
|
-
}
|
|
884
|
-
get isULID() {
|
|
885
|
-
return !!this._def.checks.find((e) => e.kind === "ulid");
|
|
886
|
-
}
|
|
887
|
-
get isIP() {
|
|
888
|
-
return !!this._def.checks.find((e) => e.kind === "ip");
|
|
889
|
-
}
|
|
890
|
-
get isBase64() {
|
|
891
|
-
return !!this._def.checks.find((e) => e.kind === "base64");
|
|
892
|
-
}
|
|
893
|
-
get minLength() {
|
|
894
|
-
let e = null;
|
|
895
|
-
for (const t of this._def.checks)
|
|
896
|
-
t.kind === "min" && (e === null || t.value > e) && (e = t.value);
|
|
897
|
-
return e;
|
|
898
|
-
}
|
|
899
|
-
get maxLength() {
|
|
900
|
-
let e = null;
|
|
901
|
-
for (const t of this._def.checks)
|
|
902
|
-
t.kind === "max" && (e === null || t.value < e) && (e = t.value);
|
|
903
|
-
return e;
|
|
904
|
-
}
|
|
905
|
-
}
|
|
906
|
-
S.create = (r) => {
|
|
907
|
-
var e;
|
|
908
|
-
return new S({
|
|
909
|
-
checks: [],
|
|
910
|
-
typeName: p.ZodString,
|
|
911
|
-
coerce: (e = r == null ? void 0 : r.coerce) !== null && e !== void 0 ? e : !1,
|
|
912
|
-
...v(r)
|
|
913
|
-
});
|
|
914
|
-
};
|
|
915
|
-
function rt(r, e) {
|
|
916
|
-
const t = (r.toString().split(".")[1] || "").length, s = (e.toString().split(".")[1] || "").length, n = t > s ? t : s, a = parseInt(r.toFixed(n).replace(".", "")), i = parseInt(e.toFixed(n).replace(".", ""));
|
|
917
|
-
return a % i / Math.pow(10, n);
|
|
918
|
-
}
|
|
919
|
-
class M extends _ {
|
|
920
|
-
constructor() {
|
|
921
|
-
super(...arguments), this.min = this.gte, this.max = this.lte, this.step = this.multipleOf;
|
|
922
|
-
}
|
|
923
|
-
_parse(e) {
|
|
924
|
-
if (this._def.coerce && (e.data = Number(e.data)), this._getType(e) !== f.number) {
|
|
925
|
-
const a = this._getOrReturnCtx(e);
|
|
926
|
-
return u(a, {
|
|
927
|
-
code: d.invalid_type,
|
|
928
|
-
expected: f.number,
|
|
929
|
-
received: a.parsedType
|
|
930
|
-
}), m;
|
|
931
|
-
}
|
|
932
|
-
let s;
|
|
933
|
-
const n = new b();
|
|
934
|
-
for (const a of this._def.checks)
|
|
935
|
-
a.kind === "int" ? g.isInteger(e.data) || (s = this._getOrReturnCtx(e, s), u(s, {
|
|
936
|
-
code: d.invalid_type,
|
|
937
|
-
expected: "integer",
|
|
938
|
-
received: "float",
|
|
939
|
-
message: a.message
|
|
940
|
-
}), n.dirty()) : a.kind === "min" ? (a.inclusive ? e.data < a.value : e.data <= a.value) && (s = this._getOrReturnCtx(e, s), u(s, {
|
|
941
|
-
code: d.too_small,
|
|
942
|
-
minimum: a.value,
|
|
943
|
-
type: "number",
|
|
944
|
-
inclusive: a.inclusive,
|
|
945
|
-
exact: !1,
|
|
946
|
-
message: a.message
|
|
947
|
-
}), n.dirty()) : a.kind === "max" ? (a.inclusive ? e.data > a.value : e.data >= a.value) && (s = this._getOrReturnCtx(e, s), u(s, {
|
|
948
|
-
code: d.too_big,
|
|
949
|
-
maximum: a.value,
|
|
950
|
-
type: "number",
|
|
951
|
-
inclusive: a.inclusive,
|
|
952
|
-
exact: !1,
|
|
953
|
-
message: a.message
|
|
954
|
-
}), n.dirty()) : a.kind === "multipleOf" ? rt(e.data, a.value) !== 0 && (s = this._getOrReturnCtx(e, s), u(s, {
|
|
955
|
-
code: d.not_multiple_of,
|
|
956
|
-
multipleOf: a.value,
|
|
957
|
-
message: a.message
|
|
958
|
-
}), n.dirty()) : a.kind === "finite" ? Number.isFinite(e.data) || (s = this._getOrReturnCtx(e, s), u(s, {
|
|
959
|
-
code: d.not_finite,
|
|
960
|
-
message: a.message
|
|
961
|
-
}), n.dirty()) : g.assertNever(a);
|
|
962
|
-
return { status: n.value, value: e.data };
|
|
963
|
-
}
|
|
964
|
-
gte(e, t) {
|
|
965
|
-
return this.setLimit("min", e, !0, h.toString(t));
|
|
966
|
-
}
|
|
967
|
-
gt(e, t) {
|
|
968
|
-
return this.setLimit("min", e, !1, h.toString(t));
|
|
969
|
-
}
|
|
970
|
-
lte(e, t) {
|
|
971
|
-
return this.setLimit("max", e, !0, h.toString(t));
|
|
972
|
-
}
|
|
973
|
-
lt(e, t) {
|
|
974
|
-
return this.setLimit("max", e, !1, h.toString(t));
|
|
975
|
-
}
|
|
976
|
-
setLimit(e, t, s, n) {
|
|
977
|
-
return new M({
|
|
978
|
-
...this._def,
|
|
979
|
-
checks: [
|
|
980
|
-
...this._def.checks,
|
|
981
|
-
{
|
|
982
|
-
kind: e,
|
|
983
|
-
value: t,
|
|
984
|
-
inclusive: s,
|
|
985
|
-
message: h.toString(n)
|
|
986
|
-
}
|
|
987
|
-
]
|
|
988
|
-
});
|
|
989
|
-
}
|
|
990
|
-
_addCheck(e) {
|
|
991
|
-
return new M({
|
|
992
|
-
...this._def,
|
|
993
|
-
checks: [...this._def.checks, e]
|
|
994
|
-
});
|
|
995
|
-
}
|
|
996
|
-
int(e) {
|
|
997
|
-
return this._addCheck({
|
|
998
|
-
kind: "int",
|
|
999
|
-
message: h.toString(e)
|
|
1000
|
-
});
|
|
1001
|
-
}
|
|
1002
|
-
positive(e) {
|
|
1003
|
-
return this._addCheck({
|
|
1004
|
-
kind: "min",
|
|
1005
|
-
value: 0,
|
|
1006
|
-
inclusive: !1,
|
|
1007
|
-
message: h.toString(e)
|
|
1008
|
-
});
|
|
1009
|
-
}
|
|
1010
|
-
negative(e) {
|
|
1011
|
-
return this._addCheck({
|
|
1012
|
-
kind: "max",
|
|
1013
|
-
value: 0,
|
|
1014
|
-
inclusive: !1,
|
|
1015
|
-
message: h.toString(e)
|
|
1016
|
-
});
|
|
1017
|
-
}
|
|
1018
|
-
nonpositive(e) {
|
|
1019
|
-
return this._addCheck({
|
|
1020
|
-
kind: "max",
|
|
1021
|
-
value: 0,
|
|
1022
|
-
inclusive: !0,
|
|
1023
|
-
message: h.toString(e)
|
|
1024
|
-
});
|
|
1025
|
-
}
|
|
1026
|
-
nonnegative(e) {
|
|
1027
|
-
return this._addCheck({
|
|
1028
|
-
kind: "min",
|
|
1029
|
-
value: 0,
|
|
1030
|
-
inclusive: !0,
|
|
1031
|
-
message: h.toString(e)
|
|
1032
|
-
});
|
|
1033
|
-
}
|
|
1034
|
-
multipleOf(e, t) {
|
|
1035
|
-
return this._addCheck({
|
|
1036
|
-
kind: "multipleOf",
|
|
1037
|
-
value: e,
|
|
1038
|
-
message: h.toString(t)
|
|
1039
|
-
});
|
|
1040
|
-
}
|
|
1041
|
-
finite(e) {
|
|
1042
|
-
return this._addCheck({
|
|
1043
|
-
kind: "finite",
|
|
1044
|
-
message: h.toString(e)
|
|
1045
|
-
});
|
|
1046
|
-
}
|
|
1047
|
-
safe(e) {
|
|
1048
|
-
return this._addCheck({
|
|
1049
|
-
kind: "min",
|
|
1050
|
-
inclusive: !0,
|
|
1051
|
-
value: Number.MIN_SAFE_INTEGER,
|
|
1052
|
-
message: h.toString(e)
|
|
1053
|
-
})._addCheck({
|
|
1054
|
-
kind: "max",
|
|
1055
|
-
inclusive: !0,
|
|
1056
|
-
value: Number.MAX_SAFE_INTEGER,
|
|
1057
|
-
message: h.toString(e)
|
|
1058
|
-
});
|
|
1059
|
-
}
|
|
1060
|
-
get minValue() {
|
|
1061
|
-
let e = null;
|
|
1062
|
-
for (const t of this._def.checks)
|
|
1063
|
-
t.kind === "min" && (e === null || t.value > e) && (e = t.value);
|
|
1064
|
-
return e;
|
|
1065
|
-
}
|
|
1066
|
-
get maxValue() {
|
|
1067
|
-
let e = null;
|
|
1068
|
-
for (const t of this._def.checks)
|
|
1069
|
-
t.kind === "max" && (e === null || t.value < e) && (e = t.value);
|
|
1070
|
-
return e;
|
|
1071
|
-
}
|
|
1072
|
-
get isInt() {
|
|
1073
|
-
return !!this._def.checks.find((e) => e.kind === "int" || e.kind === "multipleOf" && g.isInteger(e.value));
|
|
1074
|
-
}
|
|
1075
|
-
get isFinite() {
|
|
1076
|
-
let e = null, t = null;
|
|
1077
|
-
for (const s of this._def.checks) {
|
|
1078
|
-
if (s.kind === "finite" || s.kind === "int" || s.kind === "multipleOf")
|
|
1079
|
-
return !0;
|
|
1080
|
-
s.kind === "min" ? (t === null || s.value > t) && (t = s.value) : s.kind === "max" && (e === null || s.value < e) && (e = s.value);
|
|
1081
|
-
}
|
|
1082
|
-
return Number.isFinite(t) && Number.isFinite(e);
|
|
1083
|
-
}
|
|
1084
|
-
}
|
|
1085
|
-
M.create = (r) => new M({
|
|
1086
|
-
checks: [],
|
|
1087
|
-
typeName: p.ZodNumber,
|
|
1088
|
-
coerce: (r == null ? void 0 : r.coerce) || !1,
|
|
1089
|
-
...v(r)
|
|
1090
|
-
});
|
|
1091
|
-
class $ extends _ {
|
|
1092
|
-
constructor() {
|
|
1093
|
-
super(...arguments), this.min = this.gte, this.max = this.lte;
|
|
1094
|
-
}
|
|
1095
|
-
_parse(e) {
|
|
1096
|
-
if (this._def.coerce && (e.data = BigInt(e.data)), this._getType(e) !== f.bigint) {
|
|
1097
|
-
const a = this._getOrReturnCtx(e);
|
|
1098
|
-
return u(a, {
|
|
1099
|
-
code: d.invalid_type,
|
|
1100
|
-
expected: f.bigint,
|
|
1101
|
-
received: a.parsedType
|
|
1102
|
-
}), m;
|
|
1103
|
-
}
|
|
1104
|
-
let s;
|
|
1105
|
-
const n = new b();
|
|
1106
|
-
for (const a of this._def.checks)
|
|
1107
|
-
a.kind === "min" ? (a.inclusive ? e.data < a.value : e.data <= a.value) && (s = this._getOrReturnCtx(e, s), u(s, {
|
|
1108
|
-
code: d.too_small,
|
|
1109
|
-
type: "bigint",
|
|
1110
|
-
minimum: a.value,
|
|
1111
|
-
inclusive: a.inclusive,
|
|
1112
|
-
message: a.message
|
|
1113
|
-
}), n.dirty()) : a.kind === "max" ? (a.inclusive ? e.data > a.value : e.data >= a.value) && (s = this._getOrReturnCtx(e, s), u(s, {
|
|
1114
|
-
code: d.too_big,
|
|
1115
|
-
type: "bigint",
|
|
1116
|
-
maximum: a.value,
|
|
1117
|
-
inclusive: a.inclusive,
|
|
1118
|
-
message: a.message
|
|
1119
|
-
}), n.dirty()) : a.kind === "multipleOf" ? e.data % a.value !== BigInt(0) && (s = this._getOrReturnCtx(e, s), u(s, {
|
|
1120
|
-
code: d.not_multiple_of,
|
|
1121
|
-
multipleOf: a.value,
|
|
1122
|
-
message: a.message
|
|
1123
|
-
}), n.dirty()) : g.assertNever(a);
|
|
1124
|
-
return { status: n.value, value: e.data };
|
|
1125
|
-
}
|
|
1126
|
-
gte(e, t) {
|
|
1127
|
-
return this.setLimit("min", e, !0, h.toString(t));
|
|
1128
|
-
}
|
|
1129
|
-
gt(e, t) {
|
|
1130
|
-
return this.setLimit("min", e, !1, h.toString(t));
|
|
1131
|
-
}
|
|
1132
|
-
lte(e, t) {
|
|
1133
|
-
return this.setLimit("max", e, !0, h.toString(t));
|
|
1134
|
-
}
|
|
1135
|
-
lt(e, t) {
|
|
1136
|
-
return this.setLimit("max", e, !1, h.toString(t));
|
|
1137
|
-
}
|
|
1138
|
-
setLimit(e, t, s, n) {
|
|
1139
|
-
return new $({
|
|
1140
|
-
...this._def,
|
|
1141
|
-
checks: [
|
|
1142
|
-
...this._def.checks,
|
|
1143
|
-
{
|
|
1144
|
-
kind: e,
|
|
1145
|
-
value: t,
|
|
1146
|
-
inclusive: s,
|
|
1147
|
-
message: h.toString(n)
|
|
1148
|
-
}
|
|
1149
|
-
]
|
|
1150
|
-
});
|
|
1151
|
-
}
|
|
1152
|
-
_addCheck(e) {
|
|
1153
|
-
return new $({
|
|
1154
|
-
...this._def,
|
|
1155
|
-
checks: [...this._def.checks, e]
|
|
1156
|
-
});
|
|
1157
|
-
}
|
|
1158
|
-
positive(e) {
|
|
1159
|
-
return this._addCheck({
|
|
1160
|
-
kind: "min",
|
|
1161
|
-
value: BigInt(0),
|
|
1162
|
-
inclusive: !1,
|
|
1163
|
-
message: h.toString(e)
|
|
1164
|
-
});
|
|
1165
|
-
}
|
|
1166
|
-
negative(e) {
|
|
1167
|
-
return this._addCheck({
|
|
1168
|
-
kind: "max",
|
|
1169
|
-
value: BigInt(0),
|
|
1170
|
-
inclusive: !1,
|
|
1171
|
-
message: h.toString(e)
|
|
1172
|
-
});
|
|
1173
|
-
}
|
|
1174
|
-
nonpositive(e) {
|
|
1175
|
-
return this._addCheck({
|
|
1176
|
-
kind: "max",
|
|
1177
|
-
value: BigInt(0),
|
|
1178
|
-
inclusive: !0,
|
|
1179
|
-
message: h.toString(e)
|
|
1180
|
-
});
|
|
1181
|
-
}
|
|
1182
|
-
nonnegative(e) {
|
|
1183
|
-
return this._addCheck({
|
|
1184
|
-
kind: "min",
|
|
1185
|
-
value: BigInt(0),
|
|
1186
|
-
inclusive: !0,
|
|
1187
|
-
message: h.toString(e)
|
|
1188
|
-
});
|
|
1189
|
-
}
|
|
1190
|
-
multipleOf(e, t) {
|
|
1191
|
-
return this._addCheck({
|
|
1192
|
-
kind: "multipleOf",
|
|
1193
|
-
value: e,
|
|
1194
|
-
message: h.toString(t)
|
|
1195
|
-
});
|
|
1196
|
-
}
|
|
1197
|
-
get minValue() {
|
|
1198
|
-
let e = null;
|
|
1199
|
-
for (const t of this._def.checks)
|
|
1200
|
-
t.kind === "min" && (e === null || t.value > e) && (e = t.value);
|
|
1201
|
-
return e;
|
|
1202
|
-
}
|
|
1203
|
-
get maxValue() {
|
|
1204
|
-
let e = null;
|
|
1205
|
-
for (const t of this._def.checks)
|
|
1206
|
-
t.kind === "max" && (e === null || t.value < e) && (e = t.value);
|
|
1207
|
-
return e;
|
|
1208
|
-
}
|
|
1209
|
-
}
|
|
1210
|
-
$.create = (r) => {
|
|
1211
|
-
var e;
|
|
1212
|
-
return new $({
|
|
1213
|
-
checks: [],
|
|
1214
|
-
typeName: p.ZodBigInt,
|
|
1215
|
-
coerce: (e = r == null ? void 0 : r.coerce) !== null && e !== void 0 ? e : !1,
|
|
1216
|
-
...v(r)
|
|
1217
|
-
});
|
|
1218
|
-
};
|
|
1219
|
-
class K extends _ {
|
|
1220
|
-
_parse(e) {
|
|
1221
|
-
if (this._def.coerce && (e.data = !!e.data), this._getType(e) !== f.boolean) {
|
|
1222
|
-
const s = this._getOrReturnCtx(e);
|
|
1223
|
-
return u(s, {
|
|
1224
|
-
code: d.invalid_type,
|
|
1225
|
-
expected: f.boolean,
|
|
1226
|
-
received: s.parsedType
|
|
1227
|
-
}), m;
|
|
1228
|
-
}
|
|
1229
|
-
return w(e.data);
|
|
1230
|
-
}
|
|
1231
|
-
}
|
|
1232
|
-
K.create = (r) => new K({
|
|
1233
|
-
typeName: p.ZodBoolean,
|
|
1234
|
-
coerce: (r == null ? void 0 : r.coerce) || !1,
|
|
1235
|
-
...v(r)
|
|
1236
|
-
});
|
|
1237
|
-
class L extends _ {
|
|
1238
|
-
_parse(e) {
|
|
1239
|
-
if (this._def.coerce && (e.data = new Date(e.data)), this._getType(e) !== f.date) {
|
|
1240
|
-
const a = this._getOrReturnCtx(e);
|
|
1241
|
-
return u(a, {
|
|
1242
|
-
code: d.invalid_type,
|
|
1243
|
-
expected: f.date,
|
|
1244
|
-
received: a.parsedType
|
|
1245
|
-
}), m;
|
|
1246
|
-
}
|
|
1247
|
-
if (isNaN(e.data.getTime())) {
|
|
1248
|
-
const a = this._getOrReturnCtx(e);
|
|
1249
|
-
return u(a, {
|
|
1250
|
-
code: d.invalid_date
|
|
1251
|
-
}), m;
|
|
1252
|
-
}
|
|
1253
|
-
const s = new b();
|
|
1254
|
-
let n;
|
|
1255
|
-
for (const a of this._def.checks)
|
|
1256
|
-
a.kind === "min" ? e.data.getTime() < a.value && (n = this._getOrReturnCtx(e, n), u(n, {
|
|
1257
|
-
code: d.too_small,
|
|
1258
|
-
message: a.message,
|
|
1259
|
-
inclusive: !0,
|
|
1260
|
-
exact: !1,
|
|
1261
|
-
minimum: a.value,
|
|
1262
|
-
type: "date"
|
|
1263
|
-
}), s.dirty()) : a.kind === "max" ? e.data.getTime() > a.value && (n = this._getOrReturnCtx(e, n), u(n, {
|
|
1264
|
-
code: d.too_big,
|
|
1265
|
-
message: a.message,
|
|
1266
|
-
inclusive: !0,
|
|
1267
|
-
exact: !1,
|
|
1268
|
-
maximum: a.value,
|
|
1269
|
-
type: "date"
|
|
1270
|
-
}), s.dirty()) : g.assertNever(a);
|
|
1271
|
-
return {
|
|
1272
|
-
status: s.value,
|
|
1273
|
-
value: new Date(e.data.getTime())
|
|
1274
|
-
};
|
|
1275
|
-
}
|
|
1276
|
-
_addCheck(e) {
|
|
1277
|
-
return new L({
|
|
1278
|
-
...this._def,
|
|
1279
|
-
checks: [...this._def.checks, e]
|
|
1280
|
-
});
|
|
1281
|
-
}
|
|
1282
|
-
min(e, t) {
|
|
1283
|
-
return this._addCheck({
|
|
1284
|
-
kind: "min",
|
|
1285
|
-
value: e.getTime(),
|
|
1286
|
-
message: h.toString(t)
|
|
1287
|
-
});
|
|
1288
|
-
}
|
|
1289
|
-
max(e, t) {
|
|
1290
|
-
return this._addCheck({
|
|
1291
|
-
kind: "max",
|
|
1292
|
-
value: e.getTime(),
|
|
1293
|
-
message: h.toString(t)
|
|
1294
|
-
});
|
|
1295
|
-
}
|
|
1296
|
-
get minDate() {
|
|
1297
|
-
let e = null;
|
|
1298
|
-
for (const t of this._def.checks)
|
|
1299
|
-
t.kind === "min" && (e === null || t.value > e) && (e = t.value);
|
|
1300
|
-
return e != null ? new Date(e) : null;
|
|
1301
|
-
}
|
|
1302
|
-
get maxDate() {
|
|
1303
|
-
let e = null;
|
|
1304
|
-
for (const t of this._def.checks)
|
|
1305
|
-
t.kind === "max" && (e === null || t.value < e) && (e = t.value);
|
|
1306
|
-
return e != null ? new Date(e) : null;
|
|
1307
|
-
}
|
|
1308
|
-
}
|
|
1309
|
-
L.create = (r) => new L({
|
|
1310
|
-
checks: [],
|
|
1311
|
-
coerce: (r == null ? void 0 : r.coerce) || !1,
|
|
1312
|
-
typeName: p.ZodDate,
|
|
1313
|
-
...v(r)
|
|
1314
|
-
});
|
|
1315
|
-
class pe extends _ {
|
|
1316
|
-
_parse(e) {
|
|
1317
|
-
if (this._getType(e) !== f.symbol) {
|
|
1318
|
-
const s = this._getOrReturnCtx(e);
|
|
1319
|
-
return u(s, {
|
|
1320
|
-
code: d.invalid_type,
|
|
1321
|
-
expected: f.symbol,
|
|
1322
|
-
received: s.parsedType
|
|
1323
|
-
}), m;
|
|
1324
|
-
}
|
|
1325
|
-
return w(e.data);
|
|
1326
|
-
}
|
|
1327
|
-
}
|
|
1328
|
-
pe.create = (r) => new pe({
|
|
1329
|
-
typeName: p.ZodSymbol,
|
|
1330
|
-
...v(r)
|
|
1331
|
-
});
|
|
1332
|
-
class F extends _ {
|
|
1333
|
-
_parse(e) {
|
|
1334
|
-
if (this._getType(e) !== f.undefined) {
|
|
1335
|
-
const s = this._getOrReturnCtx(e);
|
|
1336
|
-
return u(s, {
|
|
1337
|
-
code: d.invalid_type,
|
|
1338
|
-
expected: f.undefined,
|
|
1339
|
-
received: s.parsedType
|
|
1340
|
-
}), m;
|
|
1341
|
-
}
|
|
1342
|
-
return w(e.data);
|
|
1343
|
-
}
|
|
1344
|
-
}
|
|
1345
|
-
F.create = (r) => new F({
|
|
1346
|
-
typeName: p.ZodUndefined,
|
|
1347
|
-
...v(r)
|
|
1348
|
-
});
|
|
1349
|
-
class ee extends _ {
|
|
1350
|
-
_parse(e) {
|
|
1351
|
-
if (this._getType(e) !== f.null) {
|
|
1352
|
-
const s = this._getOrReturnCtx(e);
|
|
1353
|
-
return u(s, {
|
|
1354
|
-
code: d.invalid_type,
|
|
1355
|
-
expected: f.null,
|
|
1356
|
-
received: s.parsedType
|
|
1357
|
-
}), m;
|
|
1358
|
-
}
|
|
1359
|
-
return w(e.data);
|
|
1360
|
-
}
|
|
1361
|
-
}
|
|
1362
|
-
ee.create = (r) => new ee({
|
|
1363
|
-
typeName: p.ZodNull,
|
|
1364
|
-
...v(r)
|
|
1365
|
-
});
|
|
1366
|
-
class Y extends _ {
|
|
1367
|
-
constructor() {
|
|
1368
|
-
super(...arguments), this._any = !0;
|
|
1369
|
-
}
|
|
1370
|
-
_parse(e) {
|
|
1371
|
-
return w(e.data);
|
|
1372
|
-
}
|
|
1373
|
-
}
|
|
1374
|
-
Y.create = (r) => new Y({
|
|
1375
|
-
typeName: p.ZodAny,
|
|
1376
|
-
...v(r)
|
|
1377
|
-
});
|
|
1378
|
-
class D extends _ {
|
|
1379
|
-
constructor() {
|
|
1380
|
-
super(...arguments), this._unknown = !0;
|
|
1381
|
-
}
|
|
1382
|
-
_parse(e) {
|
|
1383
|
-
return w(e.data);
|
|
1384
|
-
}
|
|
1385
|
-
}
|
|
1386
|
-
D.create = (r) => new D({
|
|
1387
|
-
typeName: p.ZodUnknown,
|
|
1388
|
-
...v(r)
|
|
1389
|
-
});
|
|
1390
|
-
class j extends _ {
|
|
1391
|
-
_parse(e) {
|
|
1392
|
-
const t = this._getOrReturnCtx(e);
|
|
1393
|
-
return u(t, {
|
|
1394
|
-
code: d.invalid_type,
|
|
1395
|
-
expected: f.never,
|
|
1396
|
-
received: t.parsedType
|
|
1397
|
-
}), m;
|
|
1398
|
-
}
|
|
1399
|
-
}
|
|
1400
|
-
j.create = (r) => new j({
|
|
1401
|
-
typeName: p.ZodNever,
|
|
1402
|
-
...v(r)
|
|
1403
|
-
});
|
|
1404
|
-
class me extends _ {
|
|
1405
|
-
_parse(e) {
|
|
1406
|
-
if (this._getType(e) !== f.undefined) {
|
|
1407
|
-
const s = this._getOrReturnCtx(e);
|
|
1408
|
-
return u(s, {
|
|
1409
|
-
code: d.invalid_type,
|
|
1410
|
-
expected: f.void,
|
|
1411
|
-
received: s.parsedType
|
|
1412
|
-
}), m;
|
|
1413
|
-
}
|
|
1414
|
-
return w(e.data);
|
|
1415
|
-
}
|
|
1416
|
-
}
|
|
1417
|
-
me.create = (r) => new me({
|
|
1418
|
-
typeName: p.ZodVoid,
|
|
1419
|
-
...v(r)
|
|
1420
|
-
});
|
|
1421
|
-
class C extends _ {
|
|
1422
|
-
_parse(e) {
|
|
1423
|
-
const { ctx: t, status: s } = this._processInputParams(e), n = this._def;
|
|
1424
|
-
if (t.parsedType !== f.array)
|
|
1425
|
-
return u(t, {
|
|
1426
|
-
code: d.invalid_type,
|
|
1427
|
-
expected: f.array,
|
|
1428
|
-
received: t.parsedType
|
|
1429
|
-
}), m;
|
|
1430
|
-
if (n.exactLength !== null) {
|
|
1431
|
-
const i = t.data.length > n.exactLength.value, o = t.data.length < n.exactLength.value;
|
|
1432
|
-
(i || o) && (u(t, {
|
|
1433
|
-
code: i ? d.too_big : d.too_small,
|
|
1434
|
-
minimum: o ? n.exactLength.value : void 0,
|
|
1435
|
-
maximum: i ? n.exactLength.value : void 0,
|
|
1436
|
-
type: "array",
|
|
1437
|
-
inclusive: !0,
|
|
1438
|
-
exact: !0,
|
|
1439
|
-
message: n.exactLength.message
|
|
1440
|
-
}), s.dirty());
|
|
1441
|
-
}
|
|
1442
|
-
if (n.minLength !== null && t.data.length < n.minLength.value && (u(t, {
|
|
1443
|
-
code: d.too_small,
|
|
1444
|
-
minimum: n.minLength.value,
|
|
1445
|
-
type: "array",
|
|
1446
|
-
inclusive: !0,
|
|
1447
|
-
exact: !1,
|
|
1448
|
-
message: n.minLength.message
|
|
1449
|
-
}), s.dirty()), n.maxLength !== null && t.data.length > n.maxLength.value && (u(t, {
|
|
1450
|
-
code: d.too_big,
|
|
1451
|
-
maximum: n.maxLength.value,
|
|
1452
|
-
type: "array",
|
|
1453
|
-
inclusive: !0,
|
|
1454
|
-
exact: !1,
|
|
1455
|
-
message: n.maxLength.message
|
|
1456
|
-
}), s.dirty()), t.common.async)
|
|
1457
|
-
return Promise.all([...t.data].map((i, o) => n.type._parseAsync(new E(t, i, t.path, o)))).then((i) => b.mergeArray(s, i));
|
|
1458
|
-
const a = [...t.data].map((i, o) => n.type._parseSync(new E(t, i, t.path, o)));
|
|
1459
|
-
return b.mergeArray(s, a);
|
|
1460
|
-
}
|
|
1461
|
-
get element() {
|
|
1462
|
-
return this._def.type;
|
|
1463
|
-
}
|
|
1464
|
-
min(e, t) {
|
|
1465
|
-
return new C({
|
|
1466
|
-
...this._def,
|
|
1467
|
-
minLength: { value: e, message: h.toString(t) }
|
|
1468
|
-
});
|
|
1469
|
-
}
|
|
1470
|
-
max(e, t) {
|
|
1471
|
-
return new C({
|
|
1472
|
-
...this._def,
|
|
1473
|
-
maxLength: { value: e, message: h.toString(t) }
|
|
1474
|
-
});
|
|
1475
|
-
}
|
|
1476
|
-
length(e, t) {
|
|
1477
|
-
return new C({
|
|
1478
|
-
...this._def,
|
|
1479
|
-
exactLength: { value: e, message: h.toString(t) }
|
|
1480
|
-
});
|
|
1481
|
-
}
|
|
1482
|
-
nonempty(e) {
|
|
1483
|
-
return this.min(1, e);
|
|
1484
|
-
}
|
|
1485
|
-
}
|
|
1486
|
-
C.create = (r, e) => new C({
|
|
1487
|
-
type: r,
|
|
1488
|
-
minLength: null,
|
|
1489
|
-
maxLength: null,
|
|
1490
|
-
exactLength: null,
|
|
1491
|
-
typeName: p.ZodArray,
|
|
1492
|
-
...v(e)
|
|
1493
|
-
});
|
|
1494
|
-
function U(r) {
|
|
1495
|
-
if (r instanceof x) {
|
|
1496
|
-
const e = {};
|
|
1497
|
-
for (const t in r.shape) {
|
|
1498
|
-
const s = r.shape[t];
|
|
1499
|
-
e[t] = O.create(U(s));
|
|
1500
|
-
}
|
|
1501
|
-
return new x({
|
|
1502
|
-
...r._def,
|
|
1503
|
-
shape: () => e
|
|
1504
|
-
});
|
|
1505
|
-
} else return r instanceof C ? new C({
|
|
1506
|
-
...r._def,
|
|
1507
|
-
type: U(r.element)
|
|
1508
|
-
}) : r instanceof O ? O.create(U(r.unwrap())) : r instanceof V ? V.create(U(r.unwrap())) : r instanceof R ? R.create(r.items.map((e) => U(e))) : r;
|
|
1509
|
-
}
|
|
1510
|
-
class x extends _ {
|
|
1511
|
-
constructor() {
|
|
1512
|
-
super(...arguments), this._cached = null, this.nonstrict = this.passthrough, this.augment = this.extend;
|
|
1513
|
-
}
|
|
1514
|
-
_getCached() {
|
|
1515
|
-
if (this._cached !== null)
|
|
1516
|
-
return this._cached;
|
|
1517
|
-
const e = this._def.shape(), t = g.objectKeys(e);
|
|
1518
|
-
return this._cached = { shape: e, keys: t };
|
|
1519
|
-
}
|
|
1520
|
-
_parse(e) {
|
|
1521
|
-
if (this._getType(e) !== f.object) {
|
|
1522
|
-
const c = this._getOrReturnCtx(e);
|
|
1523
|
-
return u(c, {
|
|
1524
|
-
code: d.invalid_type,
|
|
1525
|
-
expected: f.object,
|
|
1526
|
-
received: c.parsedType
|
|
1527
|
-
}), m;
|
|
1528
|
-
}
|
|
1529
|
-
const { status: s, ctx: n } = this._processInputParams(e), { shape: a, keys: i } = this._getCached(), o = [];
|
|
1530
|
-
if (!(this._def.catchall instanceof j && this._def.unknownKeys === "strip"))
|
|
1531
|
-
for (const c in n.data)
|
|
1532
|
-
i.includes(c) || o.push(c);
|
|
1533
|
-
const l = [];
|
|
1534
|
-
for (const c of i) {
|
|
1535
|
-
const y = a[c], Z = n.data[c];
|
|
1536
|
-
l.push({
|
|
1537
|
-
key: { status: "valid", value: c },
|
|
1538
|
-
value: y._parse(new E(n, Z, n.path, c)),
|
|
1539
|
-
alwaysSet: c in n.data
|
|
1540
|
-
});
|
|
1541
|
-
}
|
|
1542
|
-
if (this._def.catchall instanceof j) {
|
|
1543
|
-
const c = this._def.unknownKeys;
|
|
1544
|
-
if (c === "passthrough")
|
|
1545
|
-
for (const y of o)
|
|
1546
|
-
l.push({
|
|
1547
|
-
key: { status: "valid", value: y },
|
|
1548
|
-
value: { status: "valid", value: n.data[y] }
|
|
1549
|
-
});
|
|
1550
|
-
else if (c === "strict")
|
|
1551
|
-
o.length > 0 && (u(n, {
|
|
1552
|
-
code: d.unrecognized_keys,
|
|
1553
|
-
keys: o
|
|
1554
|
-
}), s.dirty());
|
|
1555
|
-
else if (c !== "strip") throw new Error("Internal ZodObject error: invalid unknownKeys value.");
|
|
1556
|
-
} else {
|
|
1557
|
-
const c = this._def.catchall;
|
|
1558
|
-
for (const y of o) {
|
|
1559
|
-
const Z = n.data[y];
|
|
1560
|
-
l.push({
|
|
1561
|
-
key: { status: "valid", value: y },
|
|
1562
|
-
value: c._parse(
|
|
1563
|
-
new E(n, Z, n.path, y)
|
|
1564
|
-
//, ctx.child(key), value, getParsedType(value)
|
|
1565
|
-
),
|
|
1566
|
-
alwaysSet: y in n.data
|
|
1567
|
-
});
|
|
1568
|
-
}
|
|
1569
|
-
}
|
|
1570
|
-
return n.common.async ? Promise.resolve().then(async () => {
|
|
1571
|
-
const c = [];
|
|
1572
|
-
for (const y of l) {
|
|
1573
|
-
const Z = await y.key, Se = await y.value;
|
|
1574
|
-
c.push({
|
|
1575
|
-
key: Z,
|
|
1576
|
-
value: Se,
|
|
1577
|
-
alwaysSet: y.alwaysSet
|
|
1578
|
-
});
|
|
1579
|
-
}
|
|
1580
|
-
return c;
|
|
1581
|
-
}).then((c) => b.mergeObjectSync(s, c)) : b.mergeObjectSync(s, l);
|
|
1582
|
-
}
|
|
1583
|
-
get shape() {
|
|
1584
|
-
return this._def.shape();
|
|
1585
|
-
}
|
|
1586
|
-
strict(e) {
|
|
1587
|
-
return h.errToObj, new x({
|
|
1588
|
-
...this._def,
|
|
1589
|
-
unknownKeys: "strict",
|
|
1590
|
-
...e !== void 0 ? {
|
|
1591
|
-
errorMap: (t, s) => {
|
|
1592
|
-
var n, a, i, o;
|
|
1593
|
-
const l = (i = (a = (n = this._def).errorMap) === null || a === void 0 ? void 0 : a.call(n, t, s).message) !== null && i !== void 0 ? i : s.defaultError;
|
|
1594
|
-
return t.code === "unrecognized_keys" ? {
|
|
1595
|
-
message: (o = h.errToObj(e).message) !== null && o !== void 0 ? o : l
|
|
1596
|
-
} : {
|
|
1597
|
-
message: l
|
|
1598
|
-
};
|
|
1599
|
-
}
|
|
1600
|
-
} : {}
|
|
1601
|
-
});
|
|
1602
|
-
}
|
|
1603
|
-
strip() {
|
|
1604
|
-
return new x({
|
|
1605
|
-
...this._def,
|
|
1606
|
-
unknownKeys: "strip"
|
|
1607
|
-
});
|
|
1608
|
-
}
|
|
1609
|
-
passthrough() {
|
|
1610
|
-
return new x({
|
|
1611
|
-
...this._def,
|
|
1612
|
-
unknownKeys: "passthrough"
|
|
1613
|
-
});
|
|
1614
|
-
}
|
|
1615
|
-
// const AugmentFactory =
|
|
1616
|
-
// <Def extends ZodObjectDef>(def: Def) =>
|
|
1617
|
-
// <Augmentation extends ZodRawShape>(
|
|
1618
|
-
// augmentation: Augmentation
|
|
1619
|
-
// ): ZodObject<
|
|
1620
|
-
// extendShape<ReturnType<Def["shape"]>, Augmentation>,
|
|
1621
|
-
// Def["unknownKeys"],
|
|
1622
|
-
// Def["catchall"]
|
|
1623
|
-
// > => {
|
|
1624
|
-
// return new ZodObject({
|
|
1625
|
-
// ...def,
|
|
1626
|
-
// shape: () => ({
|
|
1627
|
-
// ...def.shape(),
|
|
1628
|
-
// ...augmentation,
|
|
1629
|
-
// }),
|
|
1630
|
-
// }) as any;
|
|
1631
|
-
// };
|
|
1632
|
-
extend(e) {
|
|
1633
|
-
return new x({
|
|
1634
|
-
...this._def,
|
|
1635
|
-
shape: () => ({
|
|
1636
|
-
...this._def.shape(),
|
|
1637
|
-
...e
|
|
1638
|
-
})
|
|
1639
|
-
});
|
|
1640
|
-
}
|
|
1641
|
-
/**
|
|
1642
|
-
* Prior to zod@1.0.12 there was a bug in the
|
|
1643
|
-
* inferred type of merged objects. Please
|
|
1644
|
-
* upgrade if you are experiencing issues.
|
|
1645
|
-
*/
|
|
1646
|
-
merge(e) {
|
|
1647
|
-
return new x({
|
|
1648
|
-
unknownKeys: e._def.unknownKeys,
|
|
1649
|
-
catchall: e._def.catchall,
|
|
1650
|
-
shape: () => ({
|
|
1651
|
-
...this._def.shape(),
|
|
1652
|
-
...e._def.shape()
|
|
1653
|
-
}),
|
|
1654
|
-
typeName: p.ZodObject
|
|
1655
|
-
});
|
|
1656
|
-
}
|
|
1657
|
-
// merge<
|
|
1658
|
-
// Incoming extends AnyZodObject,
|
|
1659
|
-
// Augmentation extends Incoming["shape"],
|
|
1660
|
-
// NewOutput extends {
|
|
1661
|
-
// [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation
|
|
1662
|
-
// ? Augmentation[k]["_output"]
|
|
1663
|
-
// : k extends keyof Output
|
|
1664
|
-
// ? Output[k]
|
|
1665
|
-
// : never;
|
|
1666
|
-
// },
|
|
1667
|
-
// NewInput extends {
|
|
1668
|
-
// [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation
|
|
1669
|
-
// ? Augmentation[k]["_input"]
|
|
1670
|
-
// : k extends keyof Input
|
|
1671
|
-
// ? Input[k]
|
|
1672
|
-
// : never;
|
|
1673
|
-
// }
|
|
1674
|
-
// >(
|
|
1675
|
-
// merging: Incoming
|
|
1676
|
-
// ): ZodObject<
|
|
1677
|
-
// extendShape<T, ReturnType<Incoming["_def"]["shape"]>>,
|
|
1678
|
-
// Incoming["_def"]["unknownKeys"],
|
|
1679
|
-
// Incoming["_def"]["catchall"],
|
|
1680
|
-
// NewOutput,
|
|
1681
|
-
// NewInput
|
|
1682
|
-
// > {
|
|
1683
|
-
// const merged: any = new ZodObject({
|
|
1684
|
-
// unknownKeys: merging._def.unknownKeys,
|
|
1685
|
-
// catchall: merging._def.catchall,
|
|
1686
|
-
// shape: () =>
|
|
1687
|
-
// objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),
|
|
1688
|
-
// typeName: ZodFirstPartyTypeKind.ZodObject,
|
|
1689
|
-
// }) as any;
|
|
1690
|
-
// return merged;
|
|
1691
|
-
// }
|
|
1692
|
-
setKey(e, t) {
|
|
1693
|
-
return this.augment({ [e]: t });
|
|
1694
|
-
}
|
|
1695
|
-
// merge<Incoming extends AnyZodObject>(
|
|
1696
|
-
// merging: Incoming
|
|
1697
|
-
// ): //ZodObject<T & Incoming["_shape"], UnknownKeys, Catchall> = (merging) => {
|
|
1698
|
-
// ZodObject<
|
|
1699
|
-
// extendShape<T, ReturnType<Incoming["_def"]["shape"]>>,
|
|
1700
|
-
// Incoming["_def"]["unknownKeys"],
|
|
1701
|
-
// Incoming["_def"]["catchall"]
|
|
1702
|
-
// > {
|
|
1703
|
-
// // const mergedShape = objectUtil.mergeShapes(
|
|
1704
|
-
// // this._def.shape(),
|
|
1705
|
-
// // merging._def.shape()
|
|
1706
|
-
// // );
|
|
1707
|
-
// const merged: any = new ZodObject({
|
|
1708
|
-
// unknownKeys: merging._def.unknownKeys,
|
|
1709
|
-
// catchall: merging._def.catchall,
|
|
1710
|
-
// shape: () =>
|
|
1711
|
-
// objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),
|
|
1712
|
-
// typeName: ZodFirstPartyTypeKind.ZodObject,
|
|
1713
|
-
// }) as any;
|
|
1714
|
-
// return merged;
|
|
1715
|
-
// }
|
|
1716
|
-
catchall(e) {
|
|
1717
|
-
return new x({
|
|
1718
|
-
...this._def,
|
|
1719
|
-
catchall: e
|
|
1720
|
-
});
|
|
1721
|
-
}
|
|
1722
|
-
pick(e) {
|
|
1723
|
-
const t = {};
|
|
1724
|
-
return g.objectKeys(e).forEach((s) => {
|
|
1725
|
-
e[s] && this.shape[s] && (t[s] = this.shape[s]);
|
|
1726
|
-
}), new x({
|
|
1727
|
-
...this._def,
|
|
1728
|
-
shape: () => t
|
|
1729
|
-
});
|
|
1730
|
-
}
|
|
1731
|
-
omit(e) {
|
|
1732
|
-
const t = {};
|
|
1733
|
-
return g.objectKeys(this.shape).forEach((s) => {
|
|
1734
|
-
e[s] || (t[s] = this.shape[s]);
|
|
1735
|
-
}), new x({
|
|
1736
|
-
...this._def,
|
|
1737
|
-
shape: () => t
|
|
1738
|
-
});
|
|
1739
|
-
}
|
|
1740
|
-
/**
|
|
1741
|
-
* @deprecated
|
|
1742
|
-
*/
|
|
1743
|
-
deepPartial() {
|
|
1744
|
-
return U(this);
|
|
1745
|
-
}
|
|
1746
|
-
partial(e) {
|
|
1747
|
-
const t = {};
|
|
1748
|
-
return g.objectKeys(this.shape).forEach((s) => {
|
|
1749
|
-
const n = this.shape[s];
|
|
1750
|
-
e && !e[s] ? t[s] = n : t[s] = n.optional();
|
|
1751
|
-
}), new x({
|
|
1752
|
-
...this._def,
|
|
1753
|
-
shape: () => t
|
|
1754
|
-
});
|
|
1755
|
-
}
|
|
1756
|
-
required(e) {
|
|
1757
|
-
const t = {};
|
|
1758
|
-
return g.objectKeys(this.shape).forEach((s) => {
|
|
1759
|
-
if (e && !e[s])
|
|
1760
|
-
t[s] = this.shape[s];
|
|
1761
|
-
else {
|
|
1762
|
-
let a = this.shape[s];
|
|
1763
|
-
for (; a instanceof O; )
|
|
1764
|
-
a = a._def.innerType;
|
|
1765
|
-
t[s] = a;
|
|
1766
|
-
}
|
|
1767
|
-
}), new x({
|
|
1768
|
-
...this._def,
|
|
1769
|
-
shape: () => t
|
|
1770
|
-
});
|
|
1771
|
-
}
|
|
1772
|
-
keyof() {
|
|
1773
|
-
return Ae(g.objectKeys(this.shape));
|
|
1774
|
-
}
|
|
1775
|
-
}
|
|
1776
|
-
x.create = (r, e) => new x({
|
|
1777
|
-
shape: () => r,
|
|
1778
|
-
unknownKeys: "strip",
|
|
1779
|
-
catchall: j.create(),
|
|
1780
|
-
typeName: p.ZodObject,
|
|
1781
|
-
...v(e)
|
|
1782
|
-
});
|
|
1783
|
-
x.strictCreate = (r, e) => new x({
|
|
1784
|
-
shape: () => r,
|
|
1785
|
-
unknownKeys: "strict",
|
|
1786
|
-
catchall: j.create(),
|
|
1787
|
-
typeName: p.ZodObject,
|
|
1788
|
-
...v(e)
|
|
1789
|
-
});
|
|
1790
|
-
x.lazycreate = (r, e) => new x({
|
|
1791
|
-
shape: r,
|
|
1792
|
-
unknownKeys: "strip",
|
|
1793
|
-
catchall: j.create(),
|
|
1794
|
-
typeName: p.ZodObject,
|
|
1795
|
-
...v(e)
|
|
1796
|
-
});
|
|
1797
|
-
class te extends _ {
|
|
1798
|
-
_parse(e) {
|
|
1799
|
-
const { ctx: t } = this._processInputParams(e), s = this._def.options;
|
|
1800
|
-
function n(a) {
|
|
1801
|
-
for (const o of a)
|
|
1802
|
-
if (o.result.status === "valid")
|
|
1803
|
-
return o.result;
|
|
1804
|
-
for (const o of a)
|
|
1805
|
-
if (o.result.status === "dirty")
|
|
1806
|
-
return t.common.issues.push(...o.ctx.common.issues), o.result;
|
|
1807
|
-
const i = a.map((o) => new T(o.ctx.common.issues));
|
|
1808
|
-
return u(t, {
|
|
1809
|
-
code: d.invalid_union,
|
|
1810
|
-
unionErrors: i
|
|
1811
|
-
}), m;
|
|
1812
|
-
}
|
|
1813
|
-
if (t.common.async)
|
|
1814
|
-
return Promise.all(s.map(async (a) => {
|
|
1815
|
-
const i = {
|
|
1816
|
-
...t,
|
|
1817
|
-
common: {
|
|
1818
|
-
...t.common,
|
|
1819
|
-
issues: []
|
|
1820
|
-
},
|
|
1821
|
-
parent: null
|
|
1822
|
-
};
|
|
1823
|
-
return {
|
|
1824
|
-
result: await a._parseAsync({
|
|
1825
|
-
data: t.data,
|
|
1826
|
-
path: t.path,
|
|
1827
|
-
parent: i
|
|
1828
|
-
}),
|
|
1829
|
-
ctx: i
|
|
1830
|
-
};
|
|
1831
|
-
})).then(n);
|
|
1832
|
-
{
|
|
1833
|
-
let a;
|
|
1834
|
-
const i = [];
|
|
1835
|
-
for (const l of s) {
|
|
1836
|
-
const c = {
|
|
1837
|
-
...t,
|
|
1838
|
-
common: {
|
|
1839
|
-
...t.common,
|
|
1840
|
-
issues: []
|
|
1841
|
-
},
|
|
1842
|
-
parent: null
|
|
1843
|
-
}, y = l._parseSync({
|
|
1844
|
-
data: t.data,
|
|
1845
|
-
path: t.path,
|
|
1846
|
-
parent: c
|
|
1847
|
-
});
|
|
1848
|
-
if (y.status === "valid")
|
|
1849
|
-
return y;
|
|
1850
|
-
y.status === "dirty" && !a && (a = { result: y, ctx: c }), c.common.issues.length && i.push(c.common.issues);
|
|
1851
|
-
}
|
|
1852
|
-
if (a)
|
|
1853
|
-
return t.common.issues.push(...a.ctx.common.issues), a.result;
|
|
1854
|
-
const o = i.map((l) => new T(l));
|
|
1855
|
-
return u(t, {
|
|
1856
|
-
code: d.invalid_union,
|
|
1857
|
-
unionErrors: o
|
|
1858
|
-
}), m;
|
|
1859
|
-
}
|
|
1860
|
-
}
|
|
1861
|
-
get options() {
|
|
1862
|
-
return this._def.options;
|
|
1863
|
-
}
|
|
1864
|
-
}
|
|
1865
|
-
te.create = (r, e) => new te({
|
|
1866
|
-
options: r,
|
|
1867
|
-
typeName: p.ZodUnion,
|
|
1868
|
-
...v(e)
|
|
1869
|
-
});
|
|
1870
|
-
const I = (r) => r instanceof ne ? I(r.schema) : r instanceof N ? I(r.innerType()) : r instanceof ae ? [r.value] : r instanceof P ? r.options : r instanceof ie ? g.objectValues(r.enum) : r instanceof oe ? I(r._def.innerType) : r instanceof F ? [void 0] : r instanceof ee ? [null] : r instanceof O ? [void 0, ...I(r.unwrap())] : r instanceof V ? [null, ...I(r.unwrap())] : r instanceof Ze || r instanceof ce ? I(r.unwrap()) : r instanceof de ? I(r._def.innerType) : [];
|
|
1871
|
-
class _e extends _ {
|
|
1872
|
-
_parse(e) {
|
|
1873
|
-
const { ctx: t } = this._processInputParams(e);
|
|
1874
|
-
if (t.parsedType !== f.object)
|
|
1875
|
-
return u(t, {
|
|
1876
|
-
code: d.invalid_type,
|
|
1877
|
-
expected: f.object,
|
|
1878
|
-
received: t.parsedType
|
|
1879
|
-
}), m;
|
|
1880
|
-
const s = this.discriminator, n = t.data[s], a = this.optionsMap.get(n);
|
|
1881
|
-
return a ? t.common.async ? a._parseAsync({
|
|
1882
|
-
data: t.data,
|
|
1883
|
-
path: t.path,
|
|
1884
|
-
parent: t
|
|
1885
|
-
}) : a._parseSync({
|
|
1886
|
-
data: t.data,
|
|
1887
|
-
path: t.path,
|
|
1888
|
-
parent: t
|
|
1889
|
-
}) : (u(t, {
|
|
1890
|
-
code: d.invalid_union_discriminator,
|
|
1891
|
-
options: Array.from(this.optionsMap.keys()),
|
|
1892
|
-
path: [s]
|
|
1893
|
-
}), m);
|
|
1894
|
-
}
|
|
1895
|
-
get discriminator() {
|
|
1896
|
-
return this._def.discriminator;
|
|
1897
|
-
}
|
|
1898
|
-
get options() {
|
|
1899
|
-
return this._def.options;
|
|
1900
|
-
}
|
|
1901
|
-
get optionsMap() {
|
|
1902
|
-
return this._def.optionsMap;
|
|
1903
|
-
}
|
|
1904
|
-
/**
|
|
1905
|
-
* The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.
|
|
1906
|
-
* However, it only allows a union of objects, all of which need to share a discriminator property. This property must
|
|
1907
|
-
* have a different value for each object in the union.
|
|
1908
|
-
* @param discriminator the name of the discriminator property
|
|
1909
|
-
* @param types an array of object schemas
|
|
1910
|
-
* @param params
|
|
1911
|
-
*/
|
|
1912
|
-
static create(e, t, s) {
|
|
1913
|
-
const n = /* @__PURE__ */ new Map();
|
|
1914
|
-
for (const a of t) {
|
|
1915
|
-
const i = I(a.shape[e]);
|
|
1916
|
-
if (!i.length)
|
|
1917
|
-
throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);
|
|
1918
|
-
for (const o of i) {
|
|
1919
|
-
if (n.has(o))
|
|
1920
|
-
throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(o)}`);
|
|
1921
|
-
n.set(o, a);
|
|
1922
|
-
}
|
|
1923
|
-
}
|
|
1924
|
-
return new _e({
|
|
1925
|
-
typeName: p.ZodDiscriminatedUnion,
|
|
1926
|
-
discriminator: e,
|
|
1927
|
-
options: t,
|
|
1928
|
-
optionsMap: n,
|
|
1929
|
-
...v(s)
|
|
1930
|
-
});
|
|
1931
|
-
}
|
|
1932
|
-
}
|
|
1933
|
-
function Te(r, e) {
|
|
1934
|
-
const t = A(r), s = A(e);
|
|
1935
|
-
if (r === e)
|
|
1936
|
-
return { valid: !0, data: r };
|
|
1937
|
-
if (t === f.object && s === f.object) {
|
|
1938
|
-
const n = g.objectKeys(e), a = g.objectKeys(r).filter((o) => n.indexOf(o) !== -1), i = { ...r, ...e };
|
|
1939
|
-
for (const o of a) {
|
|
1940
|
-
const l = Te(r[o], e[o]);
|
|
1941
|
-
if (!l.valid)
|
|
1942
|
-
return { valid: !1 };
|
|
1943
|
-
i[o] = l.data;
|
|
1944
|
-
}
|
|
1945
|
-
return { valid: !0, data: i };
|
|
1946
|
-
} else if (t === f.array && s === f.array) {
|
|
1947
|
-
if (r.length !== e.length)
|
|
1948
|
-
return { valid: !1 };
|
|
1949
|
-
const n = [];
|
|
1950
|
-
for (let a = 0; a < r.length; a++) {
|
|
1951
|
-
const i = r[a], o = e[a], l = Te(i, o);
|
|
1952
|
-
if (!l.valid)
|
|
1953
|
-
return { valid: !1 };
|
|
1954
|
-
n.push(l.data);
|
|
1955
|
-
}
|
|
1956
|
-
return { valid: !0, data: n };
|
|
1957
|
-
} else return t === f.date && s === f.date && +r == +e ? { valid: !0, data: r } : { valid: !1 };
|
|
1958
|
-
}
|
|
1959
|
-
class re extends _ {
|
|
1960
|
-
_parse(e) {
|
|
1961
|
-
const { status: t, ctx: s } = this._processInputParams(e), n = (a, i) => {
|
|
1962
|
-
if (be(a) || be(i))
|
|
1963
|
-
return m;
|
|
1964
|
-
const o = Te(a.value, i.value);
|
|
1965
|
-
return o.valid ? ((we(a) || we(i)) && t.dirty(), { status: t.value, value: o.data }) : (u(s, {
|
|
1966
|
-
code: d.invalid_intersection_types
|
|
1967
|
-
}), m);
|
|
1968
|
-
};
|
|
1969
|
-
return s.common.async ? Promise.all([
|
|
1970
|
-
this._def.left._parseAsync({
|
|
1971
|
-
data: s.data,
|
|
1972
|
-
path: s.path,
|
|
1973
|
-
parent: s
|
|
1974
|
-
}),
|
|
1975
|
-
this._def.right._parseAsync({
|
|
1976
|
-
data: s.data,
|
|
1977
|
-
path: s.path,
|
|
1978
|
-
parent: s
|
|
1979
|
-
})
|
|
1980
|
-
]).then(([a, i]) => n(a, i)) : n(this._def.left._parseSync({
|
|
1981
|
-
data: s.data,
|
|
1982
|
-
path: s.path,
|
|
1983
|
-
parent: s
|
|
1984
|
-
}), this._def.right._parseSync({
|
|
1985
|
-
data: s.data,
|
|
1986
|
-
path: s.path,
|
|
1987
|
-
parent: s
|
|
1988
|
-
}));
|
|
1989
|
-
}
|
|
1990
|
-
}
|
|
1991
|
-
re.create = (r, e, t) => new re({
|
|
1992
|
-
left: r,
|
|
1993
|
-
right: e,
|
|
1994
|
-
typeName: p.ZodIntersection,
|
|
1995
|
-
...v(t)
|
|
1996
|
-
});
|
|
1997
|
-
class R extends _ {
|
|
1998
|
-
_parse(e) {
|
|
1999
|
-
const { status: t, ctx: s } = this._processInputParams(e);
|
|
2000
|
-
if (s.parsedType !== f.array)
|
|
2001
|
-
return u(s, {
|
|
2002
|
-
code: d.invalid_type,
|
|
2003
|
-
expected: f.array,
|
|
2004
|
-
received: s.parsedType
|
|
2005
|
-
}), m;
|
|
2006
|
-
if (s.data.length < this._def.items.length)
|
|
2007
|
-
return u(s, {
|
|
2008
|
-
code: d.too_small,
|
|
2009
|
-
minimum: this._def.items.length,
|
|
2010
|
-
inclusive: !0,
|
|
2011
|
-
exact: !1,
|
|
2012
|
-
type: "array"
|
|
2013
|
-
}), m;
|
|
2014
|
-
!this._def.rest && s.data.length > this._def.items.length && (u(s, {
|
|
2015
|
-
code: d.too_big,
|
|
2016
|
-
maximum: this._def.items.length,
|
|
2017
|
-
inclusive: !0,
|
|
2018
|
-
exact: !1,
|
|
2019
|
-
type: "array"
|
|
2020
|
-
}), t.dirty());
|
|
2021
|
-
const a = [...s.data].map((i, o) => {
|
|
2022
|
-
const l = this._def.items[o] || this._def.rest;
|
|
2023
|
-
return l ? l._parse(new E(s, i, s.path, o)) : null;
|
|
2024
|
-
}).filter((i) => !!i);
|
|
2025
|
-
return s.common.async ? Promise.all(a).then((i) => b.mergeArray(t, i)) : b.mergeArray(t, a);
|
|
2026
|
-
}
|
|
2027
|
-
get items() {
|
|
2028
|
-
return this._def.items;
|
|
2029
|
-
}
|
|
2030
|
-
rest(e) {
|
|
2031
|
-
return new R({
|
|
2032
|
-
...this._def,
|
|
2033
|
-
rest: e
|
|
2034
|
-
});
|
|
2035
|
-
}
|
|
2036
|
-
}
|
|
2037
|
-
R.create = (r, e) => {
|
|
2038
|
-
if (!Array.isArray(r))
|
|
2039
|
-
throw new Error("You must pass an array of schemas to z.tuple([ ... ])");
|
|
2040
|
-
return new R({
|
|
2041
|
-
items: r,
|
|
2042
|
-
typeName: p.ZodTuple,
|
|
2043
|
-
rest: null,
|
|
2044
|
-
...v(e)
|
|
2045
|
-
});
|
|
2046
|
-
};
|
|
2047
|
-
class se extends _ {
|
|
2048
|
-
get keySchema() {
|
|
2049
|
-
return this._def.keyType;
|
|
2050
|
-
}
|
|
2051
|
-
get valueSchema() {
|
|
2052
|
-
return this._def.valueType;
|
|
2053
|
-
}
|
|
2054
|
-
_parse(e) {
|
|
2055
|
-
const { status: t, ctx: s } = this._processInputParams(e);
|
|
2056
|
-
if (s.parsedType !== f.object)
|
|
2057
|
-
return u(s, {
|
|
2058
|
-
code: d.invalid_type,
|
|
2059
|
-
expected: f.object,
|
|
2060
|
-
received: s.parsedType
|
|
2061
|
-
}), m;
|
|
2062
|
-
const n = [], a = this._def.keyType, i = this._def.valueType;
|
|
2063
|
-
for (const o in s.data)
|
|
2064
|
-
n.push({
|
|
2065
|
-
key: a._parse(new E(s, o, s.path, o)),
|
|
2066
|
-
value: i._parse(new E(s, s.data[o], s.path, o)),
|
|
2067
|
-
alwaysSet: o in s.data
|
|
2068
|
-
});
|
|
2069
|
-
return s.common.async ? b.mergeObjectAsync(t, n) : b.mergeObjectSync(t, n);
|
|
2070
|
-
}
|
|
2071
|
-
get element() {
|
|
2072
|
-
return this._def.valueType;
|
|
2073
|
-
}
|
|
2074
|
-
static create(e, t, s) {
|
|
2075
|
-
return t instanceof _ ? new se({
|
|
2076
|
-
keyType: e,
|
|
2077
|
-
valueType: t,
|
|
2078
|
-
typeName: p.ZodRecord,
|
|
2079
|
-
...v(s)
|
|
2080
|
-
}) : new se({
|
|
2081
|
-
keyType: S.create(),
|
|
2082
|
-
valueType: e,
|
|
2083
|
-
typeName: p.ZodRecord,
|
|
2084
|
-
...v(t)
|
|
2085
|
-
});
|
|
2086
|
-
}
|
|
2087
|
-
}
|
|
2088
|
-
class ye extends _ {
|
|
2089
|
-
get keySchema() {
|
|
2090
|
-
return this._def.keyType;
|
|
2091
|
-
}
|
|
2092
|
-
get valueSchema() {
|
|
2093
|
-
return this._def.valueType;
|
|
2094
|
-
}
|
|
2095
|
-
_parse(e) {
|
|
2096
|
-
const { status: t, ctx: s } = this._processInputParams(e);
|
|
2097
|
-
if (s.parsedType !== f.map)
|
|
2098
|
-
return u(s, {
|
|
2099
|
-
code: d.invalid_type,
|
|
2100
|
-
expected: f.map,
|
|
2101
|
-
received: s.parsedType
|
|
2102
|
-
}), m;
|
|
2103
|
-
const n = this._def.keyType, a = this._def.valueType, i = [...s.data.entries()].map(([o, l], c) => ({
|
|
2104
|
-
key: n._parse(new E(s, o, s.path, [c, "key"])),
|
|
2105
|
-
value: a._parse(new E(s, l, s.path, [c, "value"]))
|
|
2106
|
-
}));
|
|
2107
|
-
if (s.common.async) {
|
|
2108
|
-
const o = /* @__PURE__ */ new Map();
|
|
2109
|
-
return Promise.resolve().then(async () => {
|
|
2110
|
-
for (const l of i) {
|
|
2111
|
-
const c = await l.key, y = await l.value;
|
|
2112
|
-
if (c.status === "aborted" || y.status === "aborted")
|
|
2113
|
-
return m;
|
|
2114
|
-
(c.status === "dirty" || y.status === "dirty") && t.dirty(), o.set(c.value, y.value);
|
|
2115
|
-
}
|
|
2116
|
-
return { status: t.value, value: o };
|
|
2117
|
-
});
|
|
2118
|
-
} else {
|
|
2119
|
-
const o = /* @__PURE__ */ new Map();
|
|
2120
|
-
for (const l of i) {
|
|
2121
|
-
const c = l.key, y = l.value;
|
|
2122
|
-
if (c.status === "aborted" || y.status === "aborted")
|
|
2123
|
-
return m;
|
|
2124
|
-
(c.status === "dirty" || y.status === "dirty") && t.dirty(), o.set(c.value, y.value);
|
|
2125
|
-
}
|
|
2126
|
-
return { status: t.value, value: o };
|
|
2127
|
-
}
|
|
2128
|
-
}
|
|
2129
|
-
}
|
|
2130
|
-
ye.create = (r, e, t) => new ye({
|
|
2131
|
-
valueType: e,
|
|
2132
|
-
keyType: r,
|
|
2133
|
-
typeName: p.ZodMap,
|
|
2134
|
-
...v(t)
|
|
2135
|
-
});
|
|
2136
|
-
class z extends _ {
|
|
2137
|
-
_parse(e) {
|
|
2138
|
-
const { status: t, ctx: s } = this._processInputParams(e);
|
|
2139
|
-
if (s.parsedType !== f.set)
|
|
2140
|
-
return u(s, {
|
|
2141
|
-
code: d.invalid_type,
|
|
2142
|
-
expected: f.set,
|
|
2143
|
-
received: s.parsedType
|
|
2144
|
-
}), m;
|
|
2145
|
-
const n = this._def;
|
|
2146
|
-
n.minSize !== null && s.data.size < n.minSize.value && (u(s, {
|
|
2147
|
-
code: d.too_small,
|
|
2148
|
-
minimum: n.minSize.value,
|
|
2149
|
-
type: "set",
|
|
2150
|
-
inclusive: !0,
|
|
2151
|
-
exact: !1,
|
|
2152
|
-
message: n.minSize.message
|
|
2153
|
-
}), t.dirty()), n.maxSize !== null && s.data.size > n.maxSize.value && (u(s, {
|
|
2154
|
-
code: d.too_big,
|
|
2155
|
-
maximum: n.maxSize.value,
|
|
2156
|
-
type: "set",
|
|
2157
|
-
inclusive: !0,
|
|
2158
|
-
exact: !1,
|
|
2159
|
-
message: n.maxSize.message
|
|
2160
|
-
}), t.dirty());
|
|
2161
|
-
const a = this._def.valueType;
|
|
2162
|
-
function i(l) {
|
|
2163
|
-
const c = /* @__PURE__ */ new Set();
|
|
2164
|
-
for (const y of l) {
|
|
2165
|
-
if (y.status === "aborted")
|
|
2166
|
-
return m;
|
|
2167
|
-
y.status === "dirty" && t.dirty(), c.add(y.value);
|
|
2168
|
-
}
|
|
2169
|
-
return { status: t.value, value: c };
|
|
2170
|
-
}
|
|
2171
|
-
const o = [...s.data.values()].map((l, c) => a._parse(new E(s, l, s.path, c)));
|
|
2172
|
-
return s.common.async ? Promise.all(o).then((l) => i(l)) : i(o);
|
|
2173
|
-
}
|
|
2174
|
-
min(e, t) {
|
|
2175
|
-
return new z({
|
|
2176
|
-
...this._def,
|
|
2177
|
-
minSize: { value: e, message: h.toString(t) }
|
|
2178
|
-
});
|
|
2179
|
-
}
|
|
2180
|
-
max(e, t) {
|
|
2181
|
-
return new z({
|
|
2182
|
-
...this._def,
|
|
2183
|
-
maxSize: { value: e, message: h.toString(t) }
|
|
2184
|
-
});
|
|
2185
|
-
}
|
|
2186
|
-
size(e, t) {
|
|
2187
|
-
return this.min(e, t).max(e, t);
|
|
2188
|
-
}
|
|
2189
|
-
nonempty(e) {
|
|
2190
|
-
return this.min(1, e);
|
|
2191
|
-
}
|
|
2192
|
-
}
|
|
2193
|
-
z.create = (r, e) => new z({
|
|
2194
|
-
valueType: r,
|
|
2195
|
-
minSize: null,
|
|
2196
|
-
maxSize: null,
|
|
2197
|
-
typeName: p.ZodSet,
|
|
2198
|
-
...v(e)
|
|
2199
|
-
});
|
|
2200
|
-
class W extends _ {
|
|
2201
|
-
constructor() {
|
|
2202
|
-
super(...arguments), this.validate = this.implement;
|
|
2203
|
-
}
|
|
2204
|
-
_parse(e) {
|
|
2205
|
-
const { ctx: t } = this._processInputParams(e);
|
|
2206
|
-
if (t.parsedType !== f.function)
|
|
2207
|
-
return u(t, {
|
|
2208
|
-
code: d.invalid_type,
|
|
2209
|
-
expected: f.function,
|
|
2210
|
-
received: t.parsedType
|
|
2211
|
-
}), m;
|
|
2212
|
-
function s(o, l) {
|
|
2213
|
-
return fe({
|
|
2214
|
-
data: o,
|
|
2215
|
-
path: t.path,
|
|
2216
|
-
errorMaps: [
|
|
2217
|
-
t.common.contextualErrorMap,
|
|
2218
|
-
t.schemaErrorMap,
|
|
2219
|
-
le(),
|
|
2220
|
-
q
|
|
2221
|
-
].filter((c) => !!c),
|
|
2222
|
-
issueData: {
|
|
2223
|
-
code: d.invalid_arguments,
|
|
2224
|
-
argumentsError: l
|
|
2225
|
-
}
|
|
2226
|
-
});
|
|
2227
|
-
}
|
|
2228
|
-
function n(o, l) {
|
|
2229
|
-
return fe({
|
|
2230
|
-
data: o,
|
|
2231
|
-
path: t.path,
|
|
2232
|
-
errorMaps: [
|
|
2233
|
-
t.common.contextualErrorMap,
|
|
2234
|
-
t.schemaErrorMap,
|
|
2235
|
-
le(),
|
|
2236
|
-
q
|
|
2237
|
-
].filter((c) => !!c),
|
|
2238
|
-
issueData: {
|
|
2239
|
-
code: d.invalid_return_type,
|
|
2240
|
-
returnTypeError: l
|
|
2241
|
-
}
|
|
2242
|
-
});
|
|
2243
|
-
}
|
|
2244
|
-
const a = { errorMap: t.common.contextualErrorMap }, i = t.data;
|
|
2245
|
-
if (this._def.returns instanceof J) {
|
|
2246
|
-
const o = this;
|
|
2247
|
-
return w(async function(...l) {
|
|
2248
|
-
const c = new T([]), y = await o._def.args.parseAsync(l, a).catch((ge) => {
|
|
2249
|
-
throw c.addIssue(s(l, ge)), c;
|
|
2250
|
-
}), Z = await Reflect.apply(i, this, y);
|
|
2251
|
-
return await o._def.returns._def.type.parseAsync(Z, a).catch((ge) => {
|
|
2252
|
-
throw c.addIssue(n(Z, ge)), c;
|
|
2253
|
-
});
|
|
2254
|
-
});
|
|
2255
|
-
} else {
|
|
2256
|
-
const o = this;
|
|
2257
|
-
return w(function(...l) {
|
|
2258
|
-
const c = o._def.args.safeParse(l, a);
|
|
2259
|
-
if (!c.success)
|
|
2260
|
-
throw new T([s(l, c.error)]);
|
|
2261
|
-
const y = Reflect.apply(i, this, c.data), Z = o._def.returns.safeParse(y, a);
|
|
2262
|
-
if (!Z.success)
|
|
2263
|
-
throw new T([n(y, Z.error)]);
|
|
2264
|
-
return Z.data;
|
|
2265
|
-
});
|
|
2266
|
-
}
|
|
2267
|
-
}
|
|
2268
|
-
parameters() {
|
|
2269
|
-
return this._def.args;
|
|
2270
|
-
}
|
|
2271
|
-
returnType() {
|
|
2272
|
-
return this._def.returns;
|
|
2273
|
-
}
|
|
2274
|
-
args(...e) {
|
|
2275
|
-
return new W({
|
|
2276
|
-
...this._def,
|
|
2277
|
-
args: R.create(e).rest(D.create())
|
|
2278
|
-
});
|
|
2279
|
-
}
|
|
2280
|
-
returns(e) {
|
|
2281
|
-
return new W({
|
|
2282
|
-
...this._def,
|
|
2283
|
-
returns: e
|
|
2284
|
-
});
|
|
2285
|
-
}
|
|
2286
|
-
implement(e) {
|
|
2287
|
-
return this.parse(e);
|
|
2288
|
-
}
|
|
2289
|
-
strictImplement(e) {
|
|
2290
|
-
return this.parse(e);
|
|
2291
|
-
}
|
|
2292
|
-
static create(e, t, s) {
|
|
2293
|
-
return new W({
|
|
2294
|
-
args: e || R.create([]).rest(D.create()),
|
|
2295
|
-
returns: t || D.create(),
|
|
2296
|
-
typeName: p.ZodFunction,
|
|
2297
|
-
...v(s)
|
|
2298
|
-
});
|
|
2299
|
-
}
|
|
2300
|
-
}
|
|
2301
|
-
class ne extends _ {
|
|
2302
|
-
get schema() {
|
|
2303
|
-
return this._def.getter();
|
|
2304
|
-
}
|
|
2305
|
-
_parse(e) {
|
|
2306
|
-
const { ctx: t } = this._processInputParams(e);
|
|
2307
|
-
return this._def.getter()._parse({ data: t.data, path: t.path, parent: t });
|
|
2308
|
-
}
|
|
2309
|
-
}
|
|
2310
|
-
ne.create = (r, e) => new ne({
|
|
2311
|
-
getter: r,
|
|
2312
|
-
typeName: p.ZodLazy,
|
|
2313
|
-
...v(e)
|
|
2314
|
-
});
|
|
2315
|
-
class ae extends _ {
|
|
2316
|
-
_parse(e) {
|
|
2317
|
-
if (e.data !== this._def.value) {
|
|
2318
|
-
const t = this._getOrReturnCtx(e);
|
|
2319
|
-
return u(t, {
|
|
2320
|
-
received: t.data,
|
|
2321
|
-
code: d.invalid_literal,
|
|
2322
|
-
expected: this._def.value
|
|
2323
|
-
}), m;
|
|
2324
|
-
}
|
|
2325
|
-
return { status: "valid", value: e.data };
|
|
2326
|
-
}
|
|
2327
|
-
get value() {
|
|
2328
|
-
return this._def.value;
|
|
2329
|
-
}
|
|
2330
|
-
}
|
|
2331
|
-
ae.create = (r, e) => new ae({
|
|
2332
|
-
value: r,
|
|
2333
|
-
typeName: p.ZodLiteral,
|
|
2334
|
-
...v(e)
|
|
2335
|
-
});
|
|
2336
|
-
function Ae(r, e) {
|
|
2337
|
-
return new P({
|
|
2338
|
-
values: r,
|
|
2339
|
-
typeName: p.ZodEnum,
|
|
2340
|
-
...v(e)
|
|
2341
|
-
});
|
|
2342
|
-
}
|
|
2343
|
-
class P extends _ {
|
|
2344
|
-
constructor() {
|
|
2345
|
-
super(...arguments), H.set(this, void 0);
|
|
2346
|
-
}
|
|
2347
|
-
_parse(e) {
|
|
2348
|
-
if (typeof e.data != "string") {
|
|
2349
|
-
const t = this._getOrReturnCtx(e), s = this._def.values;
|
|
2350
|
-
return u(t, {
|
|
2351
|
-
expected: g.joinValues(s),
|
|
2352
|
-
received: t.parsedType,
|
|
2353
|
-
code: d.invalid_type
|
|
2354
|
-
}), m;
|
|
2355
|
-
}
|
|
2356
|
-
if (he(this, H) || Ee(this, H, new Set(this._def.values)), !he(this, H).has(e.data)) {
|
|
2357
|
-
const t = this._getOrReturnCtx(e), s = this._def.values;
|
|
2358
|
-
return u(t, {
|
|
2359
|
-
received: t.data,
|
|
2360
|
-
code: d.invalid_enum_value,
|
|
2361
|
-
options: s
|
|
2362
|
-
}), m;
|
|
2363
|
-
}
|
|
2364
|
-
return w(e.data);
|
|
2365
|
-
}
|
|
2366
|
-
get options() {
|
|
2367
|
-
return this._def.values;
|
|
2368
|
-
}
|
|
2369
|
-
get enum() {
|
|
2370
|
-
const e = {};
|
|
2371
|
-
for (const t of this._def.values)
|
|
2372
|
-
e[t] = t;
|
|
2373
|
-
return e;
|
|
2374
|
-
}
|
|
2375
|
-
get Values() {
|
|
2376
|
-
const e = {};
|
|
2377
|
-
for (const t of this._def.values)
|
|
2378
|
-
e[t] = t;
|
|
2379
|
-
return e;
|
|
2380
|
-
}
|
|
2381
|
-
get Enum() {
|
|
2382
|
-
const e = {};
|
|
2383
|
-
for (const t of this._def.values)
|
|
2384
|
-
e[t] = t;
|
|
2385
|
-
return e;
|
|
2386
|
-
}
|
|
2387
|
-
extract(e, t = this._def) {
|
|
2388
|
-
return P.create(e, {
|
|
2389
|
-
...this._def,
|
|
2390
|
-
...t
|
|
2391
|
-
});
|
|
2392
|
-
}
|
|
2393
|
-
exclude(e, t = this._def) {
|
|
2394
|
-
return P.create(this.options.filter((s) => !e.includes(s)), {
|
|
2395
|
-
...this._def,
|
|
2396
|
-
...t
|
|
2397
|
-
});
|
|
2398
|
-
}
|
|
2399
|
-
}
|
|
2400
|
-
H = /* @__PURE__ */ new WeakMap();
|
|
2401
|
-
P.create = Ae;
|
|
2402
|
-
class ie extends _ {
|
|
2403
|
-
constructor() {
|
|
2404
|
-
super(...arguments), G.set(this, void 0);
|
|
2405
|
-
}
|
|
2406
|
-
_parse(e) {
|
|
2407
|
-
const t = g.getValidEnumValues(this._def.values), s = this._getOrReturnCtx(e);
|
|
2408
|
-
if (s.parsedType !== f.string && s.parsedType !== f.number) {
|
|
2409
|
-
const n = g.objectValues(t);
|
|
2410
|
-
return u(s, {
|
|
2411
|
-
expected: g.joinValues(n),
|
|
2412
|
-
received: s.parsedType,
|
|
2413
|
-
code: d.invalid_type
|
|
2414
|
-
}), m;
|
|
2415
|
-
}
|
|
2416
|
-
if (he(this, G) || Ee(this, G, new Set(g.getValidEnumValues(this._def.values))), !he(this, G).has(e.data)) {
|
|
2417
|
-
const n = g.objectValues(t);
|
|
2418
|
-
return u(s, {
|
|
2419
|
-
received: s.data,
|
|
2420
|
-
code: d.invalid_enum_value,
|
|
2421
|
-
options: n
|
|
2422
|
-
}), m;
|
|
2423
|
-
}
|
|
2424
|
-
return w(e.data);
|
|
2425
|
-
}
|
|
2426
|
-
get enum() {
|
|
2427
|
-
return this._def.values;
|
|
2428
|
-
}
|
|
2429
|
-
}
|
|
2430
|
-
G = /* @__PURE__ */ new WeakMap();
|
|
2431
|
-
ie.create = (r, e) => new ie({
|
|
2432
|
-
values: r,
|
|
2433
|
-
typeName: p.ZodNativeEnum,
|
|
2434
|
-
...v(e)
|
|
2435
|
-
});
|
|
2436
|
-
class J extends _ {
|
|
2437
|
-
unwrap() {
|
|
2438
|
-
return this._def.type;
|
|
2439
|
-
}
|
|
2440
|
-
_parse(e) {
|
|
2441
|
-
const { ctx: t } = this._processInputParams(e);
|
|
2442
|
-
if (t.parsedType !== f.promise && t.common.async === !1)
|
|
2443
|
-
return u(t, {
|
|
2444
|
-
code: d.invalid_type,
|
|
2445
|
-
expected: f.promise,
|
|
2446
|
-
received: t.parsedType
|
|
2447
|
-
}), m;
|
|
2448
|
-
const s = t.parsedType === f.promise ? t.data : Promise.resolve(t.data);
|
|
2449
|
-
return w(s.then((n) => this._def.type.parseAsync(n, {
|
|
2450
|
-
path: t.path,
|
|
2451
|
-
errorMap: t.common.contextualErrorMap
|
|
2452
|
-
})));
|
|
2453
|
-
}
|
|
2454
|
-
}
|
|
2455
|
-
J.create = (r, e) => new J({
|
|
2456
|
-
type: r,
|
|
2457
|
-
typeName: p.ZodPromise,
|
|
2458
|
-
...v(e)
|
|
2459
|
-
});
|
|
2460
|
-
class N extends _ {
|
|
2461
|
-
innerType() {
|
|
2462
|
-
return this._def.schema;
|
|
2463
|
-
}
|
|
2464
|
-
sourceType() {
|
|
2465
|
-
return this._def.schema._def.typeName === p.ZodEffects ? this._def.schema.sourceType() : this._def.schema;
|
|
2466
|
-
}
|
|
2467
|
-
_parse(e) {
|
|
2468
|
-
const { status: t, ctx: s } = this._processInputParams(e), n = this._def.effect || null, a = {
|
|
2469
|
-
addIssue: (i) => {
|
|
2470
|
-
u(s, i), i.fatal ? t.abort() : t.dirty();
|
|
2471
|
-
},
|
|
2472
|
-
get path() {
|
|
2473
|
-
return s.path;
|
|
2474
|
-
}
|
|
2475
|
-
};
|
|
2476
|
-
if (a.addIssue = a.addIssue.bind(a), n.type === "preprocess") {
|
|
2477
|
-
const i = n.transform(s.data, a);
|
|
2478
|
-
if (s.common.async)
|
|
2479
|
-
return Promise.resolve(i).then(async (o) => {
|
|
2480
|
-
if (t.value === "aborted")
|
|
2481
|
-
return m;
|
|
2482
|
-
const l = await this._def.schema._parseAsync({
|
|
2483
|
-
data: o,
|
|
2484
|
-
path: s.path,
|
|
2485
|
-
parent: s
|
|
2486
|
-
});
|
|
2487
|
-
return l.status === "aborted" ? m : l.status === "dirty" || t.value === "dirty" ? B(l.value) : l;
|
|
2488
|
-
});
|
|
2489
|
-
{
|
|
2490
|
-
if (t.value === "aborted")
|
|
2491
|
-
return m;
|
|
2492
|
-
const o = this._def.schema._parseSync({
|
|
2493
|
-
data: i,
|
|
2494
|
-
path: s.path,
|
|
2495
|
-
parent: s
|
|
2496
|
-
});
|
|
2497
|
-
return o.status === "aborted" ? m : o.status === "dirty" || t.value === "dirty" ? B(o.value) : o;
|
|
2498
|
-
}
|
|
2499
|
-
}
|
|
2500
|
-
if (n.type === "refinement") {
|
|
2501
|
-
const i = (o) => {
|
|
2502
|
-
const l = n.refinement(o, a);
|
|
2503
|
-
if (s.common.async)
|
|
2504
|
-
return Promise.resolve(l);
|
|
2505
|
-
if (l instanceof Promise)
|
|
2506
|
-
throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");
|
|
2507
|
-
return o;
|
|
2508
|
-
};
|
|
2509
|
-
if (s.common.async === !1) {
|
|
2510
|
-
const o = this._def.schema._parseSync({
|
|
2511
|
-
data: s.data,
|
|
2512
|
-
path: s.path,
|
|
2513
|
-
parent: s
|
|
2514
|
-
});
|
|
2515
|
-
return o.status === "aborted" ? m : (o.status === "dirty" && t.dirty(), i(o.value), { status: t.value, value: o.value });
|
|
2516
|
-
} else
|
|
2517
|
-
return this._def.schema._parseAsync({ data: s.data, path: s.path, parent: s }).then((o) => o.status === "aborted" ? m : (o.status === "dirty" && t.dirty(), i(o.value).then(() => ({ status: t.value, value: o.value }))));
|
|
2518
|
-
}
|
|
2519
|
-
if (n.type === "transform")
|
|
2520
|
-
if (s.common.async === !1) {
|
|
2521
|
-
const i = this._def.schema._parseSync({
|
|
2522
|
-
data: s.data,
|
|
2523
|
-
path: s.path,
|
|
2524
|
-
parent: s
|
|
2525
|
-
});
|
|
2526
|
-
if (!X(i))
|
|
2527
|
-
return i;
|
|
2528
|
-
const o = n.transform(i.value, a);
|
|
2529
|
-
if (o instanceof Promise)
|
|
2530
|
-
throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");
|
|
2531
|
-
return { status: t.value, value: o };
|
|
2532
|
-
} else
|
|
2533
|
-
return this._def.schema._parseAsync({ data: s.data, path: s.path, parent: s }).then((i) => X(i) ? Promise.resolve(n.transform(i.value, a)).then((o) => ({ status: t.value, value: o })) : i);
|
|
2534
|
-
g.assertNever(n);
|
|
2535
|
-
}
|
|
2536
|
-
}
|
|
2537
|
-
N.create = (r, e, t) => new N({
|
|
2538
|
-
schema: r,
|
|
2539
|
-
typeName: p.ZodEffects,
|
|
2540
|
-
effect: e,
|
|
2541
|
-
...v(t)
|
|
2542
|
-
});
|
|
2543
|
-
N.createWithPreprocess = (r, e, t) => new N({
|
|
2544
|
-
schema: e,
|
|
2545
|
-
effect: { type: "preprocess", transform: r },
|
|
2546
|
-
typeName: p.ZodEffects,
|
|
2547
|
-
...v(t)
|
|
2548
|
-
});
|
|
2549
|
-
class O extends _ {
|
|
2550
|
-
_parse(e) {
|
|
2551
|
-
return this._getType(e) === f.undefined ? w(void 0) : this._def.innerType._parse(e);
|
|
2552
|
-
}
|
|
2553
|
-
unwrap() {
|
|
2554
|
-
return this._def.innerType;
|
|
2555
|
-
}
|
|
2556
|
-
}
|
|
2557
|
-
O.create = (r, e) => new O({
|
|
2558
|
-
innerType: r,
|
|
2559
|
-
typeName: p.ZodOptional,
|
|
2560
|
-
...v(e)
|
|
2561
|
-
});
|
|
2562
|
-
class V extends _ {
|
|
2563
|
-
_parse(e) {
|
|
2564
|
-
return this._getType(e) === f.null ? w(null) : this._def.innerType._parse(e);
|
|
2565
|
-
}
|
|
2566
|
-
unwrap() {
|
|
2567
|
-
return this._def.innerType;
|
|
2568
|
-
}
|
|
2569
|
-
}
|
|
2570
|
-
V.create = (r, e) => new V({
|
|
2571
|
-
innerType: r,
|
|
2572
|
-
typeName: p.ZodNullable,
|
|
2573
|
-
...v(e)
|
|
2574
|
-
});
|
|
2575
|
-
class oe extends _ {
|
|
2576
|
-
_parse(e) {
|
|
2577
|
-
const { ctx: t } = this._processInputParams(e);
|
|
2578
|
-
let s = t.data;
|
|
2579
|
-
return t.parsedType === f.undefined && (s = this._def.defaultValue()), this._def.innerType._parse({
|
|
2580
|
-
data: s,
|
|
2581
|
-
path: t.path,
|
|
2582
|
-
parent: t
|
|
2583
|
-
});
|
|
2584
|
-
}
|
|
2585
|
-
removeDefault() {
|
|
2586
|
-
return this._def.innerType;
|
|
2587
|
-
}
|
|
2588
|
-
}
|
|
2589
|
-
oe.create = (r, e) => new oe({
|
|
2590
|
-
innerType: r,
|
|
2591
|
-
typeName: p.ZodDefault,
|
|
2592
|
-
defaultValue: typeof e.default == "function" ? e.default : () => e.default,
|
|
2593
|
-
...v(e)
|
|
2594
|
-
});
|
|
2595
|
-
class de extends _ {
|
|
2596
|
-
_parse(e) {
|
|
2597
|
-
const { ctx: t } = this._processInputParams(e), s = {
|
|
2598
|
-
...t,
|
|
2599
|
-
common: {
|
|
2600
|
-
...t.common,
|
|
2601
|
-
issues: []
|
|
2602
|
-
}
|
|
2603
|
-
}, n = this._def.innerType._parse({
|
|
2604
|
-
data: s.data,
|
|
2605
|
-
path: s.path,
|
|
2606
|
-
parent: {
|
|
2607
|
-
...s
|
|
2608
|
-
}
|
|
2609
|
-
});
|
|
2610
|
-
return Q(n) ? n.then((a) => ({
|
|
2611
|
-
status: "valid",
|
|
2612
|
-
value: a.status === "valid" ? a.value : this._def.catchValue({
|
|
2613
|
-
get error() {
|
|
2614
|
-
return new T(s.common.issues);
|
|
2615
|
-
},
|
|
2616
|
-
input: s.data
|
|
2617
|
-
})
|
|
2618
|
-
})) : {
|
|
2619
|
-
status: "valid",
|
|
2620
|
-
value: n.status === "valid" ? n.value : this._def.catchValue({
|
|
2621
|
-
get error() {
|
|
2622
|
-
return new T(s.common.issues);
|
|
2623
|
-
},
|
|
2624
|
-
input: s.data
|
|
2625
|
-
})
|
|
2626
|
-
};
|
|
2627
|
-
}
|
|
2628
|
-
removeCatch() {
|
|
2629
|
-
return this._def.innerType;
|
|
2630
|
-
}
|
|
2631
|
-
}
|
|
2632
|
-
de.create = (r, e) => new de({
|
|
2633
|
-
innerType: r,
|
|
2634
|
-
typeName: p.ZodCatch,
|
|
2635
|
-
catchValue: typeof e.catch == "function" ? e.catch : () => e.catch,
|
|
2636
|
-
...v(e)
|
|
2637
|
-
});
|
|
2638
|
-
class ve extends _ {
|
|
2639
|
-
_parse(e) {
|
|
2640
|
-
if (this._getType(e) !== f.nan) {
|
|
2641
|
-
const s = this._getOrReturnCtx(e);
|
|
2642
|
-
return u(s, {
|
|
2643
|
-
code: d.invalid_type,
|
|
2644
|
-
expected: f.nan,
|
|
2645
|
-
received: s.parsedType
|
|
2646
|
-
}), m;
|
|
2647
|
-
}
|
|
2648
|
-
return { status: "valid", value: e.data };
|
|
2649
|
-
}
|
|
2650
|
-
}
|
|
2651
|
-
ve.create = (r) => new ve({
|
|
2652
|
-
typeName: p.ZodNaN,
|
|
2653
|
-
...v(r)
|
|
2654
|
-
});
|
|
2655
|
-
const st = Symbol("zod_brand");
|
|
2656
|
-
class Ze extends _ {
|
|
2657
|
-
_parse(e) {
|
|
2658
|
-
const { ctx: t } = this._processInputParams(e), s = t.data;
|
|
2659
|
-
return this._def.type._parse({
|
|
2660
|
-
data: s,
|
|
2661
|
-
path: t.path,
|
|
2662
|
-
parent: t
|
|
2663
|
-
});
|
|
2664
|
-
}
|
|
2665
|
-
unwrap() {
|
|
2666
|
-
return this._def.type;
|
|
2667
|
-
}
|
|
2668
|
-
}
|
|
2669
|
-
class ue extends _ {
|
|
2670
|
-
_parse(e) {
|
|
2671
|
-
const { status: t, ctx: s } = this._processInputParams(e);
|
|
2672
|
-
if (s.common.async)
|
|
2673
|
-
return (async () => {
|
|
2674
|
-
const a = await this._def.in._parseAsync({
|
|
2675
|
-
data: s.data,
|
|
2676
|
-
path: s.path,
|
|
2677
|
-
parent: s
|
|
2678
|
-
});
|
|
2679
|
-
return a.status === "aborted" ? m : a.status === "dirty" ? (t.dirty(), B(a.value)) : this._def.out._parseAsync({
|
|
2680
|
-
data: a.value,
|
|
2681
|
-
path: s.path,
|
|
2682
|
-
parent: s
|
|
2683
|
-
});
|
|
2684
|
-
})();
|
|
2685
|
-
{
|
|
2686
|
-
const n = this._def.in._parseSync({
|
|
2687
|
-
data: s.data,
|
|
2688
|
-
path: s.path,
|
|
2689
|
-
parent: s
|
|
2690
|
-
});
|
|
2691
|
-
return n.status === "aborted" ? m : n.status === "dirty" ? (t.dirty(), {
|
|
2692
|
-
status: "dirty",
|
|
2693
|
-
value: n.value
|
|
2694
|
-
}) : this._def.out._parseSync({
|
|
2695
|
-
data: n.value,
|
|
2696
|
-
path: s.path,
|
|
2697
|
-
parent: s
|
|
2698
|
-
});
|
|
2699
|
-
}
|
|
2700
|
-
}
|
|
2701
|
-
static create(e, t) {
|
|
2702
|
-
return new ue({
|
|
2703
|
-
in: e,
|
|
2704
|
-
out: t,
|
|
2705
|
-
typeName: p.ZodPipeline
|
|
2706
|
-
});
|
|
2707
|
-
}
|
|
2708
|
-
}
|
|
2709
|
-
class ce extends _ {
|
|
2710
|
-
_parse(e) {
|
|
2711
|
-
const t = this._def.innerType._parse(e), s = (n) => (X(n) && (n.value = Object.freeze(n.value)), n);
|
|
2712
|
-
return Q(t) ? t.then((n) => s(n)) : s(t);
|
|
2713
|
-
}
|
|
2714
|
-
unwrap() {
|
|
2715
|
-
return this._def.innerType;
|
|
2716
|
-
}
|
|
2717
|
-
}
|
|
2718
|
-
ce.create = (r, e) => new ce({
|
|
2719
|
-
innerType: r,
|
|
2720
|
-
typeName: p.ZodReadonly,
|
|
2721
|
-
...v(e)
|
|
2722
|
-
});
|
|
2723
|
-
function Me(r, e = {}, t) {
|
|
2724
|
-
return r ? Y.create().superRefine((s, n) => {
|
|
2725
|
-
var a, i;
|
|
2726
|
-
if (!r(s)) {
|
|
2727
|
-
const o = typeof e == "function" ? e(s) : typeof e == "string" ? { message: e } : e, l = (i = (a = o.fatal) !== null && a !== void 0 ? a : t) !== null && i !== void 0 ? i : !0, c = typeof o == "string" ? { message: o } : o;
|
|
2728
|
-
n.addIssue({ code: "custom", ...c, fatal: l });
|
|
2729
|
-
}
|
|
2730
|
-
}) : Y.create();
|
|
2731
|
-
}
|
|
2732
|
-
const nt = {
|
|
2733
|
-
object: x.lazycreate
|
|
2734
|
-
};
|
|
2735
|
-
var p;
|
|
2736
|
-
(function(r) {
|
|
2737
|
-
r.ZodString = "ZodString", r.ZodNumber = "ZodNumber", r.ZodNaN = "ZodNaN", r.ZodBigInt = "ZodBigInt", r.ZodBoolean = "ZodBoolean", r.ZodDate = "ZodDate", r.ZodSymbol = "ZodSymbol", r.ZodUndefined = "ZodUndefined", r.ZodNull = "ZodNull", r.ZodAny = "ZodAny", r.ZodUnknown = "ZodUnknown", r.ZodNever = "ZodNever", r.ZodVoid = "ZodVoid", r.ZodArray = "ZodArray", r.ZodObject = "ZodObject", r.ZodUnion = "ZodUnion", r.ZodDiscriminatedUnion = "ZodDiscriminatedUnion", r.ZodIntersection = "ZodIntersection", r.ZodTuple = "ZodTuple", r.ZodRecord = "ZodRecord", r.ZodMap = "ZodMap", r.ZodSet = "ZodSet", r.ZodFunction = "ZodFunction", r.ZodLazy = "ZodLazy", r.ZodLiteral = "ZodLiteral", r.ZodEnum = "ZodEnum", r.ZodEffects = "ZodEffects", r.ZodNativeEnum = "ZodNativeEnum", r.ZodOptional = "ZodOptional", r.ZodNullable = "ZodNullable", r.ZodDefault = "ZodDefault", r.ZodCatch = "ZodCatch", r.ZodPromise = "ZodPromise", r.ZodBranded = "ZodBranded", r.ZodPipeline = "ZodPipeline", r.ZodReadonly = "ZodReadonly";
|
|
2738
|
-
})(p || (p = {}));
|
|
2739
|
-
const at = (r, e = {
|
|
2740
|
-
message: `Input not instance of ${r.name}`
|
|
2741
|
-
}) => Me((t) => t instanceof r, e), $e = S.create, Pe = M.create, it = ve.create, ot = $.create, Ve = K.create, dt = L.create, ct = pe.create, ut = F.create, lt = ee.create, ft = Y.create, ht = D.create, pt = j.create, mt = me.create, yt = C.create, vt = x.create, _t = x.strictCreate, gt = te.create, xt = _e.create, kt = re.create, bt = R.create, wt = se.create, Tt = ye.create, Zt = z.create, St = W.create, Ct = ne.create, Nt = ae.create, Ot = P.create, Et = ie.create, Rt = J.create, Ne = N.create, It = O.create, jt = V.create, At = N.createWithPreprocess, Mt = ue.create, $t = () => $e().optional(), Pt = () => Pe().optional(), Vt = () => Ve().optional(), Dt = {
|
|
2742
|
-
string: (r) => S.create({ ...r, coerce: !0 }),
|
|
2743
|
-
number: (r) => M.create({ ...r, coerce: !0 }),
|
|
2744
|
-
boolean: (r) => K.create({
|
|
2745
|
-
...r,
|
|
2746
|
-
coerce: !0
|
|
2747
|
-
}),
|
|
2748
|
-
bigint: (r) => $.create({ ...r, coerce: !0 }),
|
|
2749
|
-
date: (r) => L.create({ ...r, coerce: !0 })
|
|
2750
|
-
}, Lt = m;
|
|
2751
|
-
var k = /* @__PURE__ */ Object.freeze({
|
|
2752
|
-
__proto__: null,
|
|
2753
|
-
defaultErrorMap: q,
|
|
2754
|
-
setErrorMap: Le,
|
|
2755
|
-
getErrorMap: le,
|
|
2756
|
-
makeIssue: fe,
|
|
2757
|
-
EMPTY_PATH: ze,
|
|
2758
|
-
addIssueToContext: u,
|
|
2759
|
-
ParseStatus: b,
|
|
2760
|
-
INVALID: m,
|
|
2761
|
-
DIRTY: B,
|
|
2762
|
-
OK: w,
|
|
2763
|
-
isAborted: be,
|
|
2764
|
-
isDirty: we,
|
|
2765
|
-
isValid: X,
|
|
2766
|
-
isAsync: Q,
|
|
2767
|
-
get util() {
|
|
2768
|
-
return g;
|
|
2769
|
-
},
|
|
2770
|
-
get objectUtil() {
|
|
2771
|
-
return ke;
|
|
2772
|
-
},
|
|
2773
|
-
ZodParsedType: f,
|
|
2774
|
-
getParsedType: A,
|
|
2775
|
-
ZodType: _,
|
|
2776
|
-
datetimeRegex: je,
|
|
2777
|
-
ZodString: S,
|
|
2778
|
-
ZodNumber: M,
|
|
2779
|
-
ZodBigInt: $,
|
|
2780
|
-
ZodBoolean: K,
|
|
2781
|
-
ZodDate: L,
|
|
2782
|
-
ZodSymbol: pe,
|
|
2783
|
-
ZodUndefined: F,
|
|
2784
|
-
ZodNull: ee,
|
|
2785
|
-
ZodAny: Y,
|
|
2786
|
-
ZodUnknown: D,
|
|
2787
|
-
ZodNever: j,
|
|
2788
|
-
ZodVoid: me,
|
|
2789
|
-
ZodArray: C,
|
|
2790
|
-
ZodObject: x,
|
|
2791
|
-
ZodUnion: te,
|
|
2792
|
-
ZodDiscriminatedUnion: _e,
|
|
2793
|
-
ZodIntersection: re,
|
|
2794
|
-
ZodTuple: R,
|
|
2795
|
-
ZodRecord: se,
|
|
2796
|
-
ZodMap: ye,
|
|
2797
|
-
ZodSet: z,
|
|
2798
|
-
ZodFunction: W,
|
|
2799
|
-
ZodLazy: ne,
|
|
2800
|
-
ZodLiteral: ae,
|
|
2801
|
-
ZodEnum: P,
|
|
2802
|
-
ZodNativeEnum: ie,
|
|
2803
|
-
ZodPromise: J,
|
|
2804
|
-
ZodEffects: N,
|
|
2805
|
-
ZodTransformer: N,
|
|
2806
|
-
ZodOptional: O,
|
|
2807
|
-
ZodNullable: V,
|
|
2808
|
-
ZodDefault: oe,
|
|
2809
|
-
ZodCatch: de,
|
|
2810
|
-
ZodNaN: ve,
|
|
2811
|
-
BRAND: st,
|
|
2812
|
-
ZodBranded: Ze,
|
|
2813
|
-
ZodPipeline: ue,
|
|
2814
|
-
ZodReadonly: ce,
|
|
2815
|
-
custom: Me,
|
|
2816
|
-
Schema: _,
|
|
2817
|
-
ZodSchema: _,
|
|
2818
|
-
late: nt,
|
|
2819
|
-
get ZodFirstPartyTypeKind() {
|
|
2820
|
-
return p;
|
|
2821
|
-
},
|
|
2822
|
-
coerce: Dt,
|
|
2823
|
-
any: ft,
|
|
2824
|
-
array: yt,
|
|
2825
|
-
bigint: ot,
|
|
2826
|
-
boolean: Ve,
|
|
2827
|
-
date: dt,
|
|
2828
|
-
discriminatedUnion: xt,
|
|
2829
|
-
effect: Ne,
|
|
2830
|
-
enum: Ot,
|
|
2831
|
-
function: St,
|
|
2832
|
-
instanceof: at,
|
|
2833
|
-
intersection: kt,
|
|
2834
|
-
lazy: Ct,
|
|
2835
|
-
literal: Nt,
|
|
2836
|
-
map: Tt,
|
|
2837
|
-
nan: it,
|
|
2838
|
-
nativeEnum: Et,
|
|
2839
|
-
never: pt,
|
|
2840
|
-
null: lt,
|
|
2841
|
-
nullable: jt,
|
|
2842
|
-
number: Pe,
|
|
2843
|
-
object: vt,
|
|
2844
|
-
oboolean: Vt,
|
|
2845
|
-
onumber: Pt,
|
|
2846
|
-
optional: It,
|
|
2847
|
-
ostring: $t,
|
|
2848
|
-
pipeline: Mt,
|
|
2849
|
-
preprocess: At,
|
|
2850
|
-
promise: Rt,
|
|
2851
|
-
record: wt,
|
|
2852
|
-
set: Zt,
|
|
2853
|
-
strictObject: _t,
|
|
2854
|
-
string: $e,
|
|
2855
|
-
symbol: ct,
|
|
2856
|
-
transformer: Ne,
|
|
2857
|
-
tuple: bt,
|
|
2858
|
-
undefined: ut,
|
|
2859
|
-
union: gt,
|
|
2860
|
-
unknown: ht,
|
|
2861
|
-
void: mt,
|
|
2862
|
-
NEVER: Lt,
|
|
2863
|
-
ZodIssueCode: d,
|
|
2864
|
-
quotelessJson: De,
|
|
2865
|
-
ZodError: T
|
|
2866
|
-
});
|
|
2867
|
-
const zt = k.union([
|
|
2868
|
-
k.literal("pu"),
|
|
2869
|
-
k.literal("ku suli"),
|
|
2870
|
-
k.literal("ku lili"),
|
|
2871
|
-
k.literal("none")
|
|
2872
|
-
]), Ut = k.union([k.literal("pre-pu"), k.literal("post-pu"), k.literal("post-ku")]), Bt = k.union([
|
|
2873
|
-
k.literal("core"),
|
|
2874
|
-
k.literal("common"),
|
|
2875
|
-
k.literal("uncommon"),
|
|
2876
|
-
k.literal("obscure"),
|
|
2877
|
-
k.literal("sandbox")
|
|
2878
|
-
]), Wt = k.enum([
|
|
2879
|
-
"sitelen pona",
|
|
2880
|
-
"sitelen sitelen",
|
|
2881
|
-
"alphabet",
|
|
2882
|
-
"syllabary",
|
|
2883
|
-
"logography",
|
|
2884
|
-
"tokiponido alphabet",
|
|
2885
|
-
"tokiponido syllabary",
|
|
2886
|
-
"tokiponido logography"
|
|
2887
|
-
]);
|
|
2888
|
-
function qt(r, e, t) {
|
|
2889
|
-
return (r.translations[t] ?? r.translations.en)[e];
|
|
2890
|
-
}
|
|
2891
|
-
export {
|
|
2892
|
-
zt as B,
|
|
2893
|
-
Ut as C,
|
|
2894
|
-
Bt as U,
|
|
2895
|
-
Wt as W,
|
|
2896
|
-
qt as g,
|
|
2897
|
-
k as z
|
|
2898
|
-
};
|
|
2899
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQjNKcTVPVlouanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RAMy4yMy44L25vZGVfbW9kdWxlcy96b2QvbGliL2luZGV4Lm1qcyIsIi4uL3NyYy9saWIvdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHV0aWw7XG4oZnVuY3Rpb24gKHV0aWwpIHtcbiAgICB1dGlsLmFzc2VydEVxdWFsID0gKHZhbCkgPT4gdmFsO1xuICAgIGZ1bmN0aW9uIGFzc2VydElzKF9hcmcpIHsgfVxuICAgIHV0aWwuYXNzZXJ0SXMgPSBhc3NlcnRJcztcbiAgICBmdW5jdGlvbiBhc3NlcnROZXZlcihfeCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9XG4gICAgdXRpbC5hc3NlcnROZXZlciA9IGFzc2VydE5ldmVyO1xuICAgIHV0aWwuYXJyYXlUb0VudW0gPSAoaXRlbXMpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgb2JqW2l0ZW1dID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gICAgdXRpbC5nZXRWYWxpZEVudW1WYWx1ZXMgPSAob2JqKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkS2V5cyA9IHV0aWwub2JqZWN0S2V5cyhvYmopLmZpbHRlcigoaykgPT4gdHlwZW9mIG9ialtvYmpba11dICE9PSBcIm51bWJlclwiKTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrIG9mIHZhbGlkS2V5cykge1xuICAgICAgICAgICAgZmlsdGVyZWRba10gPSBvYmpba107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHV0aWwub2JqZWN0VmFsdWVzKGZpbHRlcmVkKTtcbiAgICB9O1xuICAgIHV0aWwub2JqZWN0VmFsdWVzID0gKG9iaikgPT4ge1xuICAgICAgICByZXR1cm4gdXRpbC5vYmplY3RLZXlzKG9iaikubWFwKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqW2VdO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHV0aWwub2JqZWN0S2V5cyA9IHR5cGVvZiBPYmplY3Qua2V5cyA9PT0gXCJmdW5jdGlvblwiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYmFuL2JhblxuICAgICAgICA/IChvYmopID0+IE9iamVjdC5rZXlzKG9iaikgLy8gZXNsaW50LWRpc2FibGUtbGluZSBiYW4vYmFuXG4gICAgICAgIDogKG9iamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgICAgIH07XG4gICAgdXRpbC5maW5kID0gKGFyciwgY2hlY2tlcikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2tlcihpdGVtKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgdXRpbC5pc0ludGVnZXIgPSB0eXBlb2YgTnVtYmVyLmlzSW50ZWdlciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gKHZhbCkgPT4gTnVtYmVyLmlzSW50ZWdlcih2YWwpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYmFuL2JhblxuICAgICAgICA6ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgJiYgaXNGaW5pdGUodmFsKSAmJiBNYXRoLmZsb29yKHZhbCkgPT09IHZhbDtcbiAgICBmdW5jdGlvbiBqb2luVmFsdWVzKGFycmF5LCBzZXBhcmF0b3IgPSBcIiB8IFwiKSB7XG4gICAgICAgIHJldHVybiBhcnJheVxuICAgICAgICAgICAgLm1hcCgodmFsKSA9PiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiA/IGAnJHt2YWx9J2AgOiB2YWwpKVxuICAgICAgICAgICAgLmpvaW4oc2VwYXJhdG9yKTtcbiAgICB9XG4gICAgdXRpbC5qb2luVmFsdWVzID0gam9pblZhbHVlcztcbiAgICB1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlciA9IChfLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJpZ2ludFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbn0pKHV0aWwgfHwgKHV0aWwgPSB7fSkpO1xudmFyIG9iamVjdFV0aWw7XG4oZnVuY3Rpb24gKG9iamVjdFV0aWwpIHtcbiAgICBvYmplY3RVdGlsLm1lcmdlU2hhcGVzID0gKGZpcnN0LCBzZWNvbmQpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmZpcnN0LFxuICAgICAgICAgICAgLi4uc2Vjb25kLCAvLyBzZWNvbmQgb3ZlcndyaXRlcyBmaXJzdFxuICAgICAgICB9O1xuICAgIH07XG59KShvYmplY3RVdGlsIHx8IChvYmplY3RVdGlsID0ge30pKTtcbmNvbnN0IFpvZFBhcnNlZFR5cGUgPSB1dGlsLmFycmF5VG9FbnVtKFtcbiAgICBcInN0cmluZ1wiLFxuICAgIFwibmFuXCIsXG4gICAgXCJudW1iZXJcIixcbiAgICBcImludGVnZXJcIixcbiAgICBcImZsb2F0XCIsXG4gICAgXCJib29sZWFuXCIsXG4gICAgXCJkYXRlXCIsXG4gICAgXCJiaWdpbnRcIixcbiAgICBcInN5bWJvbFwiLFxuICAgIFwiZnVuY3Rpb25cIixcbiAgICBcInVuZGVmaW5lZFwiLFxuICAgIFwibnVsbFwiLFxuICAgIFwiYXJyYXlcIixcbiAgICBcIm9iamVjdFwiLFxuICAgIFwidW5rbm93blwiLFxuICAgIFwicHJvbWlzZVwiLFxuICAgIFwidm9pZFwiLFxuICAgIFwibmV2ZXJcIixcbiAgICBcIm1hcFwiLFxuICAgIFwic2V0XCIsXG5dKTtcbmNvbnN0IGdldFBhcnNlZFR5cGUgPSAoZGF0YSkgPT4ge1xuICAgIGNvbnN0IHQgPSB0eXBlb2YgZGF0YTtcbiAgICBzd2l0Y2ggKHQpIHtcbiAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkO1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5zdHJpbmc7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIHJldHVybiBpc05hTihkYXRhKSA/IFpvZFBhcnNlZFR5cGUubmFuIDogWm9kUGFyc2VkVHlwZS5udW1iZXI7XG4gICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5ib29sZWFuO1xuICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLmZ1bmN0aW9uO1xuICAgICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5iaWdpbnQ7XG4gICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLnN5bWJvbDtcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5hcnJheTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUubnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLnRoZW4gJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZGF0YS50aGVuID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgICAgICBkYXRhLmNhdGNoICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGRhdGEuY2F0Y2ggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLnByb21pc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUubWFwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBTZXQgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgRGF0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLmRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5vYmplY3Q7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS51bmtub3duO1xuICAgIH1cbn07XG5cbmNvbnN0IFpvZElzc3VlQ29kZSA9IHV0aWwuYXJyYXlUb0VudW0oW1xuICAgIFwiaW52YWxpZF90eXBlXCIsXG4gICAgXCJpbnZhbGlkX2xpdGVyYWxcIixcbiAgICBcImN1c3RvbVwiLFxuICAgIFwiaW52YWxpZF91bmlvblwiLFxuICAgIFwiaW52YWxpZF91bmlvbl9kaXNjcmltaW5hdG9yXCIsXG4gICAgXCJpbnZhbGlkX2VudW1fdmFsdWVcIixcbiAgICBcInVucmVjb2duaXplZF9rZXlzXCIsXG4gICAgXCJpbnZhbGlkX2FyZ3VtZW50c1wiLFxuICAgIFwiaW52YWxpZF9yZXR1cm5fdHlwZVwiLFxuICAgIFwiaW52YWxpZF9kYXRlXCIsXG4gICAgXCJpbnZhbGlkX3N0cmluZ1wiLFxuICAgIFwidG9vX3NtYWxsXCIsXG4gICAgXCJ0b29fYmlnXCIsXG4gICAgXCJpbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlc1wiLFxuICAgIFwibm90X211bHRpcGxlX29mXCIsXG4gICAgXCJub3RfZmluaXRlXCIsXG5dKTtcbmNvbnN0IHF1b3RlbGVzc0pzb24gPSAob2JqKSA9PiB7XG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMik7XG4gICAgcmV0dXJuIGpzb24ucmVwbGFjZSgvXCIoW15cIl0rKVwiOi9nLCBcIiQxOlwiKTtcbn07XG5jbGFzcyBab2RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihpc3N1ZXMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pc3N1ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5hZGRJc3N1ZSA9IChzdWIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNzdWVzID0gWy4uLnRoaXMuaXNzdWVzLCBzdWJdO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmFkZElzc3VlcyA9IChzdWJzID0gW10pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNzdWVzID0gWy4uLnRoaXMuaXNzdWVzLCAuLi5zdWJzXTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWN0dWFsUHJvdG8gPSBuZXcudGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGJhbi9iYW5cbiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBhY3R1YWxQcm90byk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9fcHJvdG9fXyA9IGFjdHVhbFByb3RvO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmFtZSA9IFwiWm9kRXJyb3JcIjtcbiAgICAgICAgdGhpcy5pc3N1ZXMgPSBpc3N1ZXM7XG4gICAgfVxuICAgIGdldCBlcnJvcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzc3VlcztcbiAgICB9XG4gICAgZm9ybWF0KF9tYXBwZXIpIHtcbiAgICAgICAgY29uc3QgbWFwcGVyID0gX21hcHBlciB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGlzc3VlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzc3VlLm1lc3NhZ2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgY29uc3QgcHJvY2Vzc0Vycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIGVycm9yLmlzc3Vlcykge1xuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfdW5pb25cIikge1xuICAgICAgICAgICAgICAgICAgICBpc3N1ZS51bmlvbkVycm9ycy5tYXAocHJvY2Vzc0Vycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUuY29kZSA9PT0gXCJpbnZhbGlkX3JldHVybl90eXBlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0Vycm9yKGlzc3VlLnJldHVyblR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF9hcmd1bWVudHNcIikge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRXJyb3IoaXNzdWUuYXJndW1lbnRzRXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS5wYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9ycy5fZXJyb3JzLnB1c2gobWFwcGVyKGlzc3VlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VyciA9IGZpZWxkRXJyb3JzO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgaXNzdWUucGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gaXNzdWUucGF0aFtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlcm1pbmFsID0gaSA9PT0gaXNzdWUucGF0aC5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgeyBfZXJyb3JzOiBbXSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmICh0eXBlb2YgZWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgeyBfZXJyb3JzOiBbXSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAodHlwZW9mIGVsID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zdCBlcnJvckFycmF5OiBhbnkgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGVycm9yQXJyYXkuX2Vycm9ycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgY3VycltlbF0gPSBjdXJyW2VsXSB8fCBlcnJvckFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgeyBfZXJyb3JzOiBbXSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJbZWxdLl9lcnJvcnMucHVzaChtYXBwZXIoaXNzdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyW2VsXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcHJvY2Vzc0Vycm9yKHRoaXMpO1xuICAgICAgICByZXR1cm4gZmllbGRFcnJvcnM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3NlcnQodmFsdWUpIHtcbiAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBab2RFcnJvcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IGEgWm9kRXJyb3I6ICR7dmFsdWV9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7XG4gICAgfVxuICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5pc3N1ZXMsIHV0aWwuanNvblN0cmluZ2lmeVJlcGxhY2VyLCAyKTtcbiAgICB9XG4gICAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzc3Vlcy5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIGZsYXR0ZW4obWFwcGVyID0gKGlzc3VlKSA9PiBpc3N1ZS5tZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkRXJyb3JzID0ge307XG4gICAgICAgIGNvbnN0IGZvcm1FcnJvcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBzdWIgb2YgdGhpcy5pc3N1ZXMpIHtcbiAgICAgICAgICAgIGlmIChzdWIucGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZmllbGRFcnJvcnNbc3ViLnBhdGhbMF1dID0gZmllbGRFcnJvcnNbc3ViLnBhdGhbMF1dIHx8IFtdO1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW3N1Yi5wYXRoWzBdXS5wdXNoKG1hcHBlcihzdWIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcm1FcnJvcnMucHVzaChtYXBwZXIoc3ViKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZm9ybUVycm9ycywgZmllbGRFcnJvcnMgfTtcbiAgICB9XG4gICAgZ2V0IGZvcm1FcnJvcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZsYXR0ZW4oKTtcbiAgICB9XG59XG5ab2RFcnJvci5jcmVhdGUgPSAoaXNzdWVzKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgWm9kRXJyb3IoaXNzdWVzKTtcbiAgICByZXR1cm4gZXJyb3I7XG59O1xuXG5jb25zdCBlcnJvck1hcCA9IChpc3N1ZSwgX2N0eCkgPT4ge1xuICAgIGxldCBtZXNzYWdlO1xuICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGU6XG4gICAgICAgICAgICBpZiAoaXNzdWUucmVjZWl2ZWQgPT09IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IFwiUmVxdWlyZWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgRXhwZWN0ZWQgJHtpc3N1ZS5leHBlY3RlZH0sIHJlY2VpdmVkICR7aXNzdWUucmVjZWl2ZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX2xpdGVyYWw6XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgbGl0ZXJhbCB2YWx1ZSwgZXhwZWN0ZWQgJHtKU09OLnN0cmluZ2lmeShpc3N1ZS5leHBlY3RlZCwgdXRpbC5qc29uU3RyaW5naWZ5UmVwbGFjZXIpfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUudW5yZWNvZ25pemVkX2tleXM6XG4gICAgICAgICAgICBtZXNzYWdlID0gYFVucmVjb2duaXplZCBrZXkocykgaW4gb2JqZWN0OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF91bmlvbjpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBpbnB1dGA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF91bmlvbl9kaXNjcmltaW5hdG9yOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWUuIEV4cGVjdGVkICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLm9wdGlvbnMpfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9lbnVtX3ZhbHVlOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGVudW0gdmFsdWUuIEV4cGVjdGVkICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLm9wdGlvbnMpfSwgcmVjZWl2ZWQgJyR7aXNzdWUucmVjZWl2ZWR9J2A7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9hcmd1bWVudHM6XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgZnVuY3Rpb24gYXJndW1lbnRzYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX3JldHVybl90eXBlOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGZ1bmN0aW9uIHJldHVybiB0eXBlYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX2RhdGU6XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgZGF0ZWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlzc3VlLnZhbGlkYXRpb24gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoXCJpbmNsdWRlc1wiIGluIGlzc3VlLnZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGlucHV0OiBtdXN0IGluY2x1ZGUgXCIke2lzc3VlLnZhbGlkYXRpb24uaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGlzc3VlLnZhbGlkYXRpb24ucG9zaXRpb24gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgJHttZXNzYWdlfSBhdCBvbmUgb3IgbW9yZSBwb3NpdGlvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7aXNzdWUudmFsaWRhdGlvbi5wb3NpdGlvbn1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFwic3RhcnRzV2l0aFwiIGluIGlzc3VlLnZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGlucHV0OiBtdXN0IHN0YXJ0IHdpdGggXCIke2lzc3VlLnZhbGlkYXRpb24uc3RhcnRzV2l0aH1cImA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFwiZW5kc1dpdGhcIiBpbiBpc3N1ZS52YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBpbnB1dDogbXVzdCBlbmQgd2l0aCBcIiR7aXNzdWUudmFsaWRhdGlvbi5lbmRzV2l0aH1cImA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGlzc3VlLnZhbGlkYXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnZhbGlkYXRpb24gIT09IFwicmVnZXhcIikge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCAke2lzc3VlLnZhbGlkYXRpb259YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkludmFsaWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS50b29fc21hbGw6XG4gICAgICAgICAgICBpZiAoaXNzdWUudHlwZSA9PT0gXCJhcnJheVwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgQXJyYXkgbXVzdCBjb250YWluICR7aXNzdWUuZXhhY3QgPyBcImV4YWN0bHlcIiA6IGlzc3VlLmluY2x1c2l2ZSA/IGBhdCBsZWFzdGAgOiBgbW9yZSB0aGFuYH0gJHtpc3N1ZS5taW5pbXVtfSBlbGVtZW50KHMpYDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBTdHJpbmcgbXVzdCBjb250YWluICR7aXNzdWUuZXhhY3QgPyBcImV4YWN0bHlcIiA6IGlzc3VlLmluY2x1c2l2ZSA/IGBhdCBsZWFzdGAgOiBgb3ZlcmB9ICR7aXNzdWUubWluaW11bX0gY2hhcmFjdGVyKHMpYDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBOdW1iZXIgbXVzdCBiZSAke2lzc3VlLmV4YWN0XG4gICAgICAgICAgICAgICAgICAgID8gYGV4YWN0bHkgZXF1YWwgdG8gYFxuICAgICAgICAgICAgICAgICAgICA6IGlzc3VlLmluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYGdyZWF0ZXIgdGhhbiBgfSR7aXNzdWUubWluaW11bX1gO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJkYXRlXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBEYXRlIG11c3QgYmUgJHtpc3N1ZS5leGFjdFxuICAgICAgICAgICAgICAgICAgICA/IGBleGFjdGx5IGVxdWFsIHRvIGBcbiAgICAgICAgICAgICAgICAgICAgOiBpc3N1ZS5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGBncmVhdGVyIHRoYW4gYH0ke25ldyBEYXRlKE51bWJlcihpc3N1ZS5taW5pbXVtKSl9YDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0XCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUudG9vX2JpZzpcbiAgICAgICAgICAgIGlmIChpc3N1ZS50eXBlID09PSBcImFycmF5XCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBBcnJheSBtdXN0IGNvbnRhaW4gJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5YCA6IGlzc3VlLmluY2x1c2l2ZSA/IGBhdCBtb3N0YCA6IGBsZXNzIHRoYW5gfSAke2lzc3VlLm1heGltdW19IGVsZW1lbnQocylgO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYFN0cmluZyBtdXN0IGNvbnRhaW4gJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5YCA6IGlzc3VlLmluY2x1c2l2ZSA/IGBhdCBtb3N0YCA6IGB1bmRlcmB9ICR7aXNzdWUubWF4aW11bX0gY2hhcmFjdGVyKHMpYDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBOdW1iZXIgbXVzdCBiZSAke2lzc3VlLmV4YWN0XG4gICAgICAgICAgICAgICAgICAgID8gYGV4YWN0bHlgXG4gICAgICAgICAgICAgICAgICAgIDogaXNzdWUuaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBsZXNzIHRoYW4gb3IgZXF1YWwgdG9gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGBsZXNzIHRoYW5gfSAke2lzc3VlLm1heGltdW19YDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwiYmlnaW50XCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBCaWdJbnQgbXVzdCBiZSAke2lzc3VlLmV4YWN0XG4gICAgICAgICAgICAgICAgICAgID8gYGV4YWN0bHlgXG4gICAgICAgICAgICAgICAgICAgIDogaXNzdWUuaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBsZXNzIHRoYW4gb3IgZXF1YWwgdG9gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGBsZXNzIHRoYW5gfSAke2lzc3VlLm1heGltdW19YDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwiZGF0ZVwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgRGF0ZSBtdXN0IGJlICR7aXNzdWUuZXhhY3RcbiAgICAgICAgICAgICAgICAgICAgPyBgZXhhY3RseWBcbiAgICAgICAgICAgICAgICAgICAgOiBpc3N1ZS5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0b2BcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYHNtYWxsZXIgdGhhbmB9ICR7bmV3IERhdGUoTnVtYmVyKGlzc3VlLm1heGltdW0pKX1gO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5jdXN0b206XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgaW5wdXRgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnRlcnNlY3Rpb24gcmVzdWx0cyBjb3VsZCBub3QgYmUgbWVyZ2VkYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5ub3RfbXVsdGlwbGVfb2Y6XG4gICAgICAgICAgICBtZXNzYWdlID0gYE51bWJlciBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJHtpc3N1ZS5tdWx0aXBsZU9mfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUubm90X2Zpbml0ZTpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIk51bWJlciBtdXN0IGJlIGZpbml0ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBtZXNzYWdlID0gX2N0eC5kZWZhdWx0RXJyb3I7XG4gICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGlzc3VlKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbWVzc2FnZSB9O1xufTtcblxubGV0IG92ZXJyaWRlRXJyb3JNYXAgPSBlcnJvck1hcDtcbmZ1bmN0aW9uIHNldEVycm9yTWFwKG1hcCkge1xuICAgIG92ZXJyaWRlRXJyb3JNYXAgPSBtYXA7XG59XG5mdW5jdGlvbiBnZXRFcnJvck1hcCgpIHtcbiAgICByZXR1cm4gb3ZlcnJpZGVFcnJvck1hcDtcbn1cblxuY29uc3QgbWFrZUlzc3VlID0gKHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IHsgZGF0YSwgcGF0aCwgZXJyb3JNYXBzLCBpc3N1ZURhdGEgfSA9IHBhcmFtcztcbiAgICBjb25zdCBmdWxsUGF0aCA9IFsuLi5wYXRoLCAuLi4oaXNzdWVEYXRhLnBhdGggfHwgW10pXTtcbiAgICBjb25zdCBmdWxsSXNzdWUgPSB7XG4gICAgICAgIC4uLmlzc3VlRGF0YSxcbiAgICAgICAgcGF0aDogZnVsbFBhdGgsXG4gICAgfTtcbiAgICBpZiAoaXNzdWVEYXRhLm1lc3NhZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uaXNzdWVEYXRhLFxuICAgICAgICAgICAgcGF0aDogZnVsbFBhdGgsXG4gICAgICAgICAgICBtZXNzYWdlOiBpc3N1ZURhdGEubWVzc2FnZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiXCI7XG4gICAgY29uc3QgbWFwcyA9IGVycm9yTWFwc1xuICAgICAgICAuZmlsdGVyKChtKSA9PiAhIW0pXG4gICAgICAgIC5zbGljZSgpXG4gICAgICAgIC5yZXZlcnNlKCk7XG4gICAgZm9yIChjb25zdCBtYXAgb2YgbWFwcykge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBtYXAoZnVsbElzc3VlLCB7IGRhdGEsIGRlZmF1bHRFcnJvcjogZXJyb3JNZXNzYWdlIH0pLm1lc3NhZ2U7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlzc3VlRGF0YSxcbiAgICAgICAgcGF0aDogZnVsbFBhdGgsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICB9O1xufTtcbmNvbnN0IEVNUFRZX1BBVEggPSBbXTtcbmZ1bmN0aW9uIGFkZElzc3VlVG9Db250ZXh0KGN0eCwgaXNzdWVEYXRhKSB7XG4gICAgY29uc3Qgb3ZlcnJpZGVNYXAgPSBnZXRFcnJvck1hcCgpO1xuICAgIGNvbnN0IGlzc3VlID0gbWFrZUlzc3VlKHtcbiAgICAgICAgaXNzdWVEYXRhOiBpc3N1ZURhdGEsXG4gICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgZXJyb3JNYXBzOiBbXG4gICAgICAgICAgICBjdHguY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcCxcbiAgICAgICAgICAgIGN0eC5zY2hlbWFFcnJvck1hcCxcbiAgICAgICAgICAgIG92ZXJyaWRlTWFwLFxuICAgICAgICAgICAgb3ZlcnJpZGVNYXAgPT09IGVycm9yTWFwID8gdW5kZWZpbmVkIDogZXJyb3JNYXAsIC8vIHRoZW4gZ2xvYmFsIGRlZmF1bHQgbWFwXG4gICAgICAgIF0uZmlsdGVyKCh4KSA9PiAhIXgpLFxuICAgIH0pO1xuICAgIGN0eC5jb21tb24uaXNzdWVzLnB1c2goaXNzdWUpO1xufVxuY2xhc3MgUGFyc2VTdGF0dXMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gXCJ2YWxpZFwiO1xuICAgIH1cbiAgICBkaXJ0eSgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT09IFwidmFsaWRcIilcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBcImRpcnR5XCI7XG4gICAgfVxuICAgIGFib3J0KCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSAhPT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gXCJhYm9ydGVkXCI7XG4gICAgfVxuICAgIHN0YXRpYyBtZXJnZUFycmF5KHN0YXR1cywgcmVzdWx0cykge1xuICAgICAgICBjb25zdCBhcnJheVZhbHVlID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcyBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAocy5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgaWYgKHMuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICBhcnJheVZhbHVlLnB1c2gocy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBhcnJheVZhbHVlIH07XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBtZXJnZU9iamVjdEFzeW5jKHN0YXR1cywgcGFpcnMpIHtcbiAgICAgICAgY29uc3Qgc3luY1BhaXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgcGFpci5rZXk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHBhaXIudmFsdWU7XG4gICAgICAgICAgICBzeW5jUGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0U3luYyhzdGF0dXMsIHN5bmNQYWlycyk7XG4gICAgfVxuICAgIHN0YXRpYyBtZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBwYWlycykge1xuICAgICAgICBjb25zdCBmaW5hbE9iamVjdCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsga2V5LCB2YWx1ZSB9ID0gcGFpcjtcbiAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgaWYgKGtleS5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIGlmIChrZXkudmFsdWUgIT09IFwiX19wcm90b19fXCIgJiZcbiAgICAgICAgICAgICAgICAodHlwZW9mIHZhbHVlLnZhbHVlICE9PSBcInVuZGVmaW5lZFwiIHx8IHBhaXIuYWx3YXlzU2V0KSkge1xuICAgICAgICAgICAgICAgIGZpbmFsT2JqZWN0W2tleS52YWx1ZV0gPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGZpbmFsT2JqZWN0IH07XG4gICAgfVxufVxuY29uc3QgSU5WQUxJRCA9IE9iamVjdC5mcmVlemUoe1xuICAgIHN0YXR1czogXCJhYm9ydGVkXCIsXG59KTtcbmNvbnN0IERJUlRZID0gKHZhbHVlKSA9PiAoeyBzdGF0dXM6IFwiZGlydHlcIiwgdmFsdWUgfSk7XG5jb25zdCBPSyA9ICh2YWx1ZSkgPT4gKHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlIH0pO1xuY29uc3QgaXNBYm9ydGVkID0gKHgpID0+IHguc3RhdHVzID09PSBcImFib3J0ZWRcIjtcbmNvbnN0IGlzRGlydHkgPSAoeCkgPT4geC5zdGF0dXMgPT09IFwiZGlydHlcIjtcbmNvbnN0IGlzVmFsaWQgPSAoeCkgPT4geC5zdGF0dXMgPT09IFwidmFsaWRcIjtcbmNvbnN0IGlzQXN5bmMgPSAoeCkgPT4gdHlwZW9mIFByb21pc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgeCBpbnN0YW5jZW9mIFByb21pc2U7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxuZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbn1cclxuXHJcbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG59O1xuXG52YXIgZXJyb3JVdGlsO1xuKGZ1bmN0aW9uIChlcnJvclV0aWwpIHtcbiAgICBlcnJvclV0aWwuZXJyVG9PYmogPSAobWVzc2FnZSkgPT4gdHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgPyB7IG1lc3NhZ2UgfSA6IG1lc3NhZ2UgfHwge307XG4gICAgZXJyb3JVdGlsLnRvU3RyaW5nID0gKG1lc3NhZ2UpID0+IHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiID8gbWVzc2FnZSA6IG1lc3NhZ2UgPT09IG51bGwgfHwgbWVzc2FnZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbWVzc2FnZS5tZXNzYWdlO1xufSkoZXJyb3JVdGlsIHx8IChlcnJvclV0aWwgPSB7fSkpO1xuXG52YXIgX1pvZEVudW1fY2FjaGUsIF9ab2ROYXRpdmVFbnVtX2NhY2hlO1xuY2xhc3MgUGFyc2VJbnB1dExhenlQYXRoIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQsIHZhbHVlLCBwYXRoLCBrZXkpIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkUGF0aCA9IFtdO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5kYXRhID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3BhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLl9rZXkgPSBrZXk7XG4gICAgfVxuICAgIGdldCBwYXRoKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2NhY2hlZFBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fa2V5IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRQYXRoLnB1c2goLi4udGhpcy5fcGF0aCwgLi4udGhpcy5fa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFBhdGgucHVzaCguLi50aGlzLl9wYXRoLCB0aGlzLl9rZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRQYXRoO1xuICAgIH1cbn1cbmNvbnN0IGhhbmRsZVJlc3VsdCA9IChjdHgsIHJlc3VsdCkgPT4ge1xuICAgIGlmIChpc1ZhbGlkKHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogcmVzdWx0LnZhbHVlIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoIWN0eC5jb21tb24uaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVmFsaWRhdGlvbiBmYWlsZWQgYnV0IG5vIGlzc3VlcyBkZXRlY3RlZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZ2V0IGVycm9yKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9lcnJvcilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFpvZEVycm9yKGN0eC5jb21tb24uaXNzdWVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxufTtcbmZ1bmN0aW9uIHByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSB7XG4gICAgaWYgKCFwYXJhbXMpXG4gICAgICAgIHJldHVybiB7fTtcbiAgICBjb25zdCB7IGVycm9yTWFwLCBpbnZhbGlkX3R5cGVfZXJyb3IsIHJlcXVpcmVkX2Vycm9yLCBkZXNjcmlwdGlvbiB9ID0gcGFyYW1zO1xuICAgIGlmIChlcnJvck1hcCAmJiAoaW52YWxpZF90eXBlX2Vycm9yIHx8IHJlcXVpcmVkX2Vycm9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IHVzZSBcImludmFsaWRfdHlwZV9lcnJvclwiIG9yIFwicmVxdWlyZWRfZXJyb3JcIiBpbiBjb25qdW5jdGlvbiB3aXRoIGN1c3RvbSBlcnJvciBtYXAuYCk7XG4gICAgfVxuICAgIGlmIChlcnJvck1hcClcbiAgICAgICAgcmV0dXJuIHsgZXJyb3JNYXA6IGVycm9yTWFwLCBkZXNjcmlwdGlvbiB9O1xuICAgIGNvbnN0IGN1c3RvbU1hcCA9IChpc3MsIGN0eCkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCB7IG1lc3NhZ2UgfSA9IHBhcmFtcztcbiAgICAgICAgaWYgKGlzcy5jb2RlID09PSBcImludmFsaWRfZW51bV92YWx1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtZXNzYWdlOiBtZXNzYWdlICE9PSBudWxsICYmIG1lc3NhZ2UgIT09IHZvaWQgMCA/IG1lc3NhZ2UgOiBjdHguZGVmYXVsdEVycm9yIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBjdHguZGF0YSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWVzc2FnZTogKF9hID0gbWVzc2FnZSAhPT0gbnVsbCAmJiBtZXNzYWdlICE9PSB2b2lkIDAgPyBtZXNzYWdlIDogcmVxdWlyZWRfZXJyb3IpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGN0eC5kZWZhdWx0RXJyb3IgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNzLmNvZGUgIT09IFwiaW52YWxpZF90eXBlXCIpXG4gICAgICAgICAgICByZXR1cm4geyBtZXNzYWdlOiBjdHguZGVmYXVsdEVycm9yIH07XG4gICAgICAgIHJldHVybiB7IG1lc3NhZ2U6IChfYiA9IG1lc3NhZ2UgIT09IG51bGwgJiYgbWVzc2FnZSAhPT0gdm9pZCAwID8gbWVzc2FnZSA6IGludmFsaWRfdHlwZV9lcnJvcikgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogY3R4LmRlZmF1bHRFcnJvciB9O1xuICAgIH07XG4gICAgcmV0dXJuIHsgZXJyb3JNYXA6IGN1c3RvbU1hcCwgZGVzY3JpcHRpb24gfTtcbn1cbmNsYXNzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKGRlZikge1xuICAgICAgICAvKiogQWxpYXMgb2Ygc2FmZVBhcnNlQXN5bmMgKi9cbiAgICAgICAgdGhpcy5zcGEgPSB0aGlzLnNhZmVQYXJzZUFzeW5jO1xuICAgICAgICB0aGlzLl9kZWYgPSBkZWY7XG4gICAgICAgIHRoaXMucGFyc2UgPSB0aGlzLnBhcnNlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2FmZVBhcnNlID0gdGhpcy5zYWZlUGFyc2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5wYXJzZUFzeW5jID0gdGhpcy5wYXJzZUFzeW5jLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2FmZVBhcnNlQXN5bmMgPSB0aGlzLnNhZmVQYXJzZUFzeW5jLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc3BhID0gdGhpcy5zcGEuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZpbmUgPSB0aGlzLnJlZmluZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlZmluZW1lbnQgPSB0aGlzLnJlZmluZW1lbnQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zdXBlclJlZmluZSA9IHRoaXMuc3VwZXJSZWZpbmUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vcHRpb25hbCA9IHRoaXMub3B0aW9uYWwuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5udWxsYWJsZSA9IHRoaXMubnVsbGFibGUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5udWxsaXNoID0gdGhpcy5udWxsaXNoLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYXJyYXkgPSB0aGlzLmFycmF5LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucHJvbWlzZSA9IHRoaXMucHJvbWlzZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9yID0gdGhpcy5vci5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFuZCA9IHRoaXMuYW5kLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm0uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5icmFuZCA9IHRoaXMuYnJhbmQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5kZWZhdWx0ID0gdGhpcy5kZWZhdWx0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuY2F0Y2ggPSB0aGlzLmNhdGNoLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZGVzY3JpYmUgPSB0aGlzLmRlc2NyaWJlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucGlwZSA9IHRoaXMucGlwZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gdGhpcy5yZWFkb25seS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmlzTnVsbGFibGUgPSB0aGlzLmlzTnVsbGFibGUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5pc09wdGlvbmFsID0gdGhpcy5pc09wdGlvbmFsLmJpbmQodGhpcyk7XG4gICAgfVxuICAgIGdldCBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5kZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgX2dldFR5cGUoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhcnNlZFR5cGUoaW5wdXQuZGF0YSk7XG4gICAgfVxuICAgIF9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KSB7XG4gICAgICAgIHJldHVybiAoY3R4IHx8IHtcbiAgICAgICAgICAgIGNvbW1vbjogaW5wdXQucGFyZW50LmNvbW1vbixcbiAgICAgICAgICAgIGRhdGE6IGlucHV0LmRhdGEsXG4gICAgICAgICAgICBwYXJzZWRUeXBlOiBnZXRQYXJzZWRUeXBlKGlucHV0LmRhdGEpLFxuICAgICAgICAgICAgc2NoZW1hRXJyb3JNYXA6IHRoaXMuX2RlZi5lcnJvck1hcCxcbiAgICAgICAgICAgIHBhdGg6IGlucHV0LnBhdGgsXG4gICAgICAgICAgICBwYXJlbnQ6IGlucHV0LnBhcmVudCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXR1czogbmV3IFBhcnNlU3RhdHVzKCksXG4gICAgICAgICAgICBjdHg6IHtcbiAgICAgICAgICAgICAgICBjb21tb246IGlucHV0LnBhcmVudC5jb21tb24sXG4gICAgICAgICAgICAgICAgZGF0YTogaW5wdXQuZGF0YSxcbiAgICAgICAgICAgICAgICBwYXJzZWRUeXBlOiBnZXRQYXJzZWRUeXBlKGlucHV0LmRhdGEpLFxuICAgICAgICAgICAgICAgIHNjaGVtYUVycm9yTWFwOiB0aGlzLl9kZWYuZXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgcGF0aDogaW5wdXQucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGlucHV0LnBhcmVudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9wYXJzZVN5bmMoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fcGFyc2UoaW5wdXQpO1xuICAgICAgICBpZiAoaXNBc3luYyhyZXN1bHQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTeW5jaHJvbm91cyBwYXJzZSBlbmNvdW50ZXJlZCBwcm9taXNlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBfcGFyc2VBc3luYyhpbnB1dCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9wYXJzZShpbnB1dCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KTtcbiAgICB9XG4gICAgcGFyc2UoZGF0YSwgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2FmZVBhcnNlKGRhdGEsIHBhcmFtcyk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2VzcylcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgIH1cbiAgICBzYWZlUGFyc2UoZGF0YSwgcGFyYW1zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgY3R4ID0ge1xuICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICBhc3luYzogKF9hID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLmFzeW5jKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb250ZXh0dWFsRXJyb3JNYXA6IHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5lcnJvck1hcCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXRoOiAocGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnBhdGgpIHx8IFtdLFxuICAgICAgICAgICAgc2NoZW1hRXJyb3JNYXA6IHRoaXMuX2RlZi5lcnJvck1hcCxcbiAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXJzZWRUeXBlOiBnZXRQYXJzZWRUeXBlKGRhdGEpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9wYXJzZVN5bmMoeyBkYXRhLCBwYXRoOiBjdHgucGF0aCwgcGFyZW50OiBjdHggfSk7XG4gICAgICAgIHJldHVybiBoYW5kbGVSZXN1bHQoY3R4LCByZXN1bHQpO1xuICAgIH1cbiAgICBhc3luYyBwYXJzZUFzeW5jKGRhdGEsIHBhcmFtcykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNhZmVQYXJzZUFzeW5jKGRhdGEsIHBhcmFtcyk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2VzcylcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgIH1cbiAgICBhc3luYyBzYWZlUGFyc2VBc3luYyhkYXRhLCBwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgY3R4ID0ge1xuICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICBjb250ZXh0dWFsRXJyb3JNYXA6IHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5lcnJvck1hcCxcbiAgICAgICAgICAgICAgICBhc3luYzogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXRoOiAocGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnBhdGgpIHx8IFtdLFxuICAgICAgICAgICAgc2NoZW1hRXJyb3JNYXA6IHRoaXMuX2RlZi5lcnJvck1hcCxcbiAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXJzZWRUeXBlOiBnZXRQYXJzZWRUeXBlKGRhdGEpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtYXliZUFzeW5jUmVzdWx0ID0gdGhpcy5fcGFyc2UoeyBkYXRhLCBwYXRoOiBjdHgucGF0aCwgcGFyZW50OiBjdHggfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IChpc0FzeW5jKG1heWJlQXN5bmNSZXN1bHQpXG4gICAgICAgICAgICA/IG1heWJlQXN5bmNSZXN1bHRcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKG1heWJlQXN5bmNSZXN1bHQpKTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVJlc3VsdChjdHgsIHJlc3VsdCk7XG4gICAgfVxuICAgIHJlZmluZShjaGVjaywgbWVzc2FnZSkge1xuICAgICAgICBjb25zdCBnZXRJc3N1ZVByb3BlcnRpZXMgPSAodmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIG1lc3NhZ2UgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBtZXNzYWdlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVmaW5lbWVudCgodmFsLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNoZWNrKHZhbCk7XG4gICAgICAgICAgICBjb25zdCBzZXRFcnJvciA9ICgpID0+IGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmN1c3RvbSxcbiAgICAgICAgICAgICAgICAuLi5nZXRJc3N1ZVByb3BlcnRpZXModmFsKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBQcm9taXNlICE9PSBcInVuZGVmaW5lZFwiICYmIHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgc2V0RXJyb3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlZmluZW1lbnQoY2hlY2ssIHJlZmluZW1lbnREYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWZpbmVtZW50KCh2YWwsIGN0eCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjaGVjayh2YWwpKSB7XG4gICAgICAgICAgICAgICAgY3R4LmFkZElzc3VlKHR5cGVvZiByZWZpbmVtZW50RGF0YSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgICAgID8gcmVmaW5lbWVudERhdGEodmFsLCBjdHgpXG4gICAgICAgICAgICAgICAgICAgIDogcmVmaW5lbWVudERhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3JlZmluZW1lbnQocmVmaW5lbWVudCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEVmZmVjdHMoe1xuICAgICAgICAgICAgc2NoZW1hOiB0aGlzLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICAgICAgICAgICAgZWZmZWN0OiB7IHR5cGU6IFwicmVmaW5lbWVudFwiLCByZWZpbmVtZW50IH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdXBlclJlZmluZShyZWZpbmVtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWZpbmVtZW50KHJlZmluZW1lbnQpO1xuICAgIH1cbiAgICBvcHRpb25hbCgpIHtcbiAgICAgICAgcmV0dXJuIFpvZE9wdGlvbmFsLmNyZWF0ZSh0aGlzLCB0aGlzLl9kZWYpO1xuICAgIH1cbiAgICBudWxsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIFpvZE51bGxhYmxlLmNyZWF0ZSh0aGlzLCB0aGlzLl9kZWYpO1xuICAgIH1cbiAgICBudWxsaXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5udWxsYWJsZSgpLm9wdGlvbmFsKCk7XG4gICAgfVxuICAgIGFycmF5KCkge1xuICAgICAgICByZXR1cm4gWm9kQXJyYXkuY3JlYXRlKHRoaXMsIHRoaXMuX2RlZik7XG4gICAgfVxuICAgIHByb21pc2UoKSB7XG4gICAgICAgIHJldHVybiBab2RQcm9taXNlLmNyZWF0ZSh0aGlzLCB0aGlzLl9kZWYpO1xuICAgIH1cbiAgICBvcihvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIFpvZFVuaW9uLmNyZWF0ZShbdGhpcywgb3B0aW9uXSwgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgYW5kKGluY29taW5nKSB7XG4gICAgICAgIHJldHVybiBab2RJbnRlcnNlY3Rpb24uY3JlYXRlKHRoaXMsIGluY29taW5nLCB0aGlzLl9kZWYpO1xuICAgIH1cbiAgICB0cmFuc2Zvcm0odHJhbnNmb3JtKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRWZmZWN0cyh7XG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHRoaXMuX2RlZiksXG4gICAgICAgICAgICBzY2hlbWE6IHRoaXMsXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMsXG4gICAgICAgICAgICBlZmZlY3Q6IHsgdHlwZTogXCJ0cmFuc2Zvcm1cIiwgdHJhbnNmb3JtIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWZhdWx0KGRlZikge1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWVGdW5jID0gdHlwZW9mIGRlZiA9PT0gXCJmdW5jdGlvblwiID8gZGVmIDogKCkgPT4gZGVmO1xuICAgICAgICByZXR1cm4gbmV3IFpvZERlZmF1bHQoe1xuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyh0aGlzLl9kZWYpLFxuICAgICAgICAgICAgaW5uZXJUeXBlOiB0aGlzLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWVGdW5jLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYnJhbmQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQnJhbmRlZCh7XG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEJyYW5kZWQsXG4gICAgICAgICAgICB0eXBlOiB0aGlzLFxuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyh0aGlzLl9kZWYpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2goZGVmKSB7XG4gICAgICAgIGNvbnN0IGNhdGNoVmFsdWVGdW5jID0gdHlwZW9mIGRlZiA9PT0gXCJmdW5jdGlvblwiID8gZGVmIDogKCkgPT4gZGVmO1xuICAgICAgICByZXR1cm4gbmV3IFpvZENhdGNoKHtcbiAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXModGhpcy5fZGVmKSxcbiAgICAgICAgICAgIGlubmVyVHlwZTogdGhpcyxcbiAgICAgICAgICAgIGNhdGNoVmFsdWU6IGNhdGNoVmFsdWVGdW5jLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RDYXRjaCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlc2NyaWJlKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNvbnN0IFRoaXMgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgICAgICByZXR1cm4gbmV3IFRoaXMoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwaXBlKHRhcmdldCkge1xuICAgICAgICByZXR1cm4gWm9kUGlwZWxpbmUuY3JlYXRlKHRoaXMsIHRhcmdldCk7XG4gICAgfVxuICAgIHJlYWRvbmx5KCkge1xuICAgICAgICByZXR1cm4gWm9kUmVhZG9ubHkuY3JlYXRlKHRoaXMpO1xuICAgIH1cbiAgICBpc09wdGlvbmFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlUGFyc2UodW5kZWZpbmVkKS5zdWNjZXNzO1xuICAgIH1cbiAgICBpc051bGxhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlUGFyc2UobnVsbCkuc3VjY2VzcztcbiAgICB9XG59XG5jb25zdCBjdWlkUmVnZXggPSAvXmNbXlxccy1dezgsfSQvaTtcbmNvbnN0IGN1aWQyUmVnZXggPSAvXlswLTlhLXpdKyQvO1xuY29uc3QgdWxpZFJlZ2V4ID0gL15bMC05QS1ISktNTlAtVFYtWl17MjZ9JC87XG4vLyBjb25zdCB1dWlkUmVnZXggPVxuLy8gICAvXihbYS1mMC05XXs4fS1bYS1mMC05XXs0fS1bMS01XVthLWYwLTldezN9LVthLWYwLTldezR9LVthLWYwLTldezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO1xuY29uc3QgdXVpZFJlZ2V4ID0gL15bMC05YS1mQS1GXXs4fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXsxMn0kL2k7XG5jb25zdCBuYW5vaWRSZWdleCA9IC9eW2EtejAtOV8tXXsyMX0kL2k7XG5jb25zdCBkdXJhdGlvblJlZ2V4ID0gL15bLStdP1AoPyEkKSg/Oig/OlstK10/XFxkK1kpfCg/OlstK10/XFxkK1suLF1cXGQrWSQpKT8oPzooPzpbLStdP1xcZCtNKXwoPzpbLStdP1xcZCtbLixdXFxkK00kKSk/KD86KD86Wy0rXT9cXGQrVyl8KD86Wy0rXT9cXGQrWy4sXVxcZCtXJCkpPyg/Oig/OlstK10/XFxkK0QpfCg/OlstK10/XFxkK1suLF1cXGQrRCQpKT8oPzpUKD89W1xcZCstXSkoPzooPzpbLStdP1xcZCtIKXwoPzpbLStdP1xcZCtbLixdXFxkK0gkKSk/KD86KD86Wy0rXT9cXGQrTSl8KD86Wy0rXT9cXGQrWy4sXVxcZCtNJCkpPyg/OlstK10/XFxkKyg/OlsuLF1cXGQrKT9TKT8pPz8kLztcbi8vIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ2MTgxLzE1NTAxNTVcbi8vIG9sZCB2ZXJzaW9uOiB0b28gc2xvdywgZGlkbid0IHN1cHBvcnQgdW5pY29kZVxuLy8gY29uc3QgZW1haWxSZWdleCA9IC9eKCgoW2Etel18XFxkfFshI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKyhcXC4oW2Etel18XFxkfFshI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKykqKXwoKFxceDIyKSgoKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KChbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHg3Zl18XFx4MjF8W1xceDIzLVxceDViXXxbXFx4NWQtXFx4N2VdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoXFxcXChbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGQtXFx4N2ZdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpKSooKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KFxceDIyKSkpQCgoKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4pKygoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKSQvaTtcbi8vb2xkIGVtYWlsIHJlZ2V4XG4vLyBjb25zdCBlbWFpbFJlZ2V4ID0gL14oKFtePD4oKVtcXF0uLDs6XFxzQFwiXSsoXFwuW148PigpW1xcXS4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKCg/IS0pKFtePD4oKVtcXF0uLDs6XFxzQFwiXStcXC4pK1tePD4oKVtcXF0uLDs6XFxzQFwiXXsxLH0pW14tPD4oKVtcXF0uLDs6XFxzQFwiXSQvaTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuLy8gY29uc3QgZW1haWxSZWdleCA9XG4vLyAgIC9eKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXFxcIl0rKFxcLltePD4oKVtcXF1cXFxcLiw7Olxcc0BcXFwiXSspKil8KFxcXCIuK1xcXCIpKUAoKFxcWygoKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVxcLil7M30oKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVxcXSl8KFxcW0lQdjY6KChbYS1mMC05XXsxLDR9Oil7N318OjooW2EtZjAtOV17MSw0fTopezAsNn18KFthLWYwLTldezEsNH06KXsxfTooW2EtZjAtOV17MSw0fTopezAsNX18KFthLWYwLTldezEsNH06KXsyfTooW2EtZjAtOV17MSw0fTopezAsNH18KFthLWYwLTldezEsNH06KXszfTooW2EtZjAtOV17MSw0fTopezAsM318KFthLWYwLTldezEsNH06KXs0fTooW2EtZjAtOV17MSw0fTopezAsMn18KFthLWYwLTldezEsNH06KXs1fTooW2EtZjAtOV17MSw0fTopezAsMX0pKFthLWYwLTldezEsNH18KCgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpXFwuKXszfSgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpKVxcXSl8KFtBLVphLXowLTldKFtBLVphLXowLTktXSpbQS1aYS16MC05XSkqKFxcLltBLVphLXpdezIsfSkrKSkkLztcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXlthLXpBLVowLTlcXC5cXCFcXCNcXCRcXCVcXCZcXCdcXCpcXCtcXC9cXD1cXD9cXF5cXF9cXGBcXHtcXHxcXH1cXH5cXC1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvO1xuLy8gY29uc3QgZW1haWxSZWdleCA9XG4vLyAgIC9eKD86W2EtejAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKyg/OlxcLlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKnxcIig/OltcXHgwMS1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZlxceDIxXFx4MjMtXFx4NWJcXHg1ZC1cXHg3Zl18XFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZS1cXHg3Zl0pKlwiKUAoPzooPzpbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/XFwuKStbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/fFxcWyg/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/fFthLXowLTktXSpbYS16MC05XTooPzpbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHgyMS1cXHg1YVxceDUzLVxceDdmXXxcXFxcW1xceDAxLVxceDA5XFx4MGJcXHgwY1xceDBlLVxceDdmXSkrKVxcXSkkL2k7XG5jb25zdCBlbWFpbFJlZ2V4ID0gL14oPyFcXC4pKD8hLipcXC5cXC4pKFtBLVowLTlfJytcXC1cXC5dKilbQS1aMC05XystXUAoW0EtWjAtOV1bQS1aMC05XFwtXSpcXC4pK1tBLVpdezIsfSQvaTtcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXlthLXowLTkuISMkJSbigJkqKy89P15fYHt8fX4tXStAW2EtejAtOS1dKyg/OlxcLlthLXowLTlcXC1dKykqJC9pO1xuLy8gZnJvbSBodHRwczovL3RoZWtldmluc2NvdHQuY29tL2Vtb2ppcy1pbi1qYXZhc2NyaXB0LyN3cml0aW5nLWEtcmVndWxhci1leHByZXNzaW9uXG5jb25zdCBfZW1vamlSZWdleCA9IGBeKFxcXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY318XFxcXHB7RW1vamlfQ29tcG9uZW50fSkrJGA7XG5sZXQgZW1vamlSZWdleDtcbi8vIGZhc3Rlciwgc2ltcGxlciwgc2FmZXJcbmNvbnN0IGlwdjRSZWdleCA9IC9eKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVxcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pJC87XG5jb25zdCBpcHY2UmVnZXggPSAvXigoW2EtZjAtOV17MSw0fTopezd9fDo6KFthLWYwLTldezEsNH06KXswLDZ9fChbYS1mMC05XXsxLDR9Oil7MX06KFthLWYwLTldezEsNH06KXswLDV9fChbYS1mMC05XXsxLDR9Oil7Mn06KFthLWYwLTldezEsNH06KXswLDR9fChbYS1mMC05XXsxLDR9Oil7M306KFthLWYwLTldezEsNH06KXswLDN9fChbYS1mMC05XXsxLDR9Oil7NH06KFthLWYwLTldezEsNH06KXswLDJ9fChbYS1mMC05XXsxLDR9Oil7NX06KFthLWYwLTldezEsNH06KXswLDF9KShbYS1mMC05XXsxLDR9fCgoKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVxcLil7M30oKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKSkkLztcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NjAzOTIvZGV0ZXJtaW5lLWlmLXN0cmluZy1pcy1pbi1iYXNlNjQtdXNpbmctamF2YXNjcmlwdFxuY29uc3QgYmFzZTY0UmVnZXggPSAvXihbMC05YS16QS1aKy9dezR9KSooKFswLTlhLXpBLVorL117Mn09PSl8KFswLTlhLXpBLVorL117M309KSk/JC87XG4vLyBzaW1wbGVcbi8vIGNvbnN0IGRhdGVSZWdleFNvdXJjZSA9IGBcXFxcZHs0fS1cXFxcZHsyfS1cXFxcZHsyfWA7XG4vLyBubyBsZWFwIHllYXIgdmFsaWRhdGlvblxuLy8gY29uc3QgZGF0ZVJlZ2V4U291cmNlID0gYFxcXFxkezR9LSgoMFsxMzU3OF18MTB8MTIpLTMxfCgwWzEzLTldfDFbMC0yXSktMzB8KDBbMS05XXwxWzAtMl0pLSgwWzEtOV18MVxcXFxkfDJcXFxcZCkpYDtcbi8vIHdpdGggbGVhcCB5ZWFyIHZhbGlkYXRpb25cbmNvbnN0IGRhdGVSZWdleFNvdXJjZSA9IGAoKFxcXFxkXFxcXGRbMjQ2OF1bMDQ4XXxcXFxcZFxcXFxkWzEzNTc5XVsyNl18XFxcXGRcXFxcZDBbNDhdfFswMjQ2OF1bMDQ4XTAwfFsxMzU3OV1bMjZdMDApLTAyLTI5fFxcXFxkezR9LSgoMFsxMzU3OF18MVswMl0pLSgwWzEtOV18WzEyXVxcXFxkfDNbMDFdKXwoMFs0NjldfDExKS0oMFsxLTldfFsxMl1cXFxcZHwzMCl8KDAyKS0oMFsxLTldfDFcXFxcZHwyWzAtOF0pKSlgO1xuY29uc3QgZGF0ZVJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7ZGF0ZVJlZ2V4U291cmNlfSRgKTtcbmZ1bmN0aW9uIHRpbWVSZWdleFNvdXJjZShhcmdzKSB7XG4gICAgLy8gbGV0IHJlZ2V4ID0gYFxcXFxkezJ9OlxcXFxkezJ9OlxcXFxkezJ9YDtcbiAgICBsZXQgcmVnZXggPSBgKFswMV1cXFxcZHwyWzAtM10pOlswLTVdXFxcXGQ6WzAtNV1cXFxcZGA7XG4gICAgaWYgKGFyZ3MucHJlY2lzaW9uKSB7XG4gICAgICAgIHJlZ2V4ID0gYCR7cmVnZXh9XFxcXC5cXFxcZHske2FyZ3MucHJlY2lzaW9ufX1gO1xuICAgIH1cbiAgICBlbHNlIGlmIChhcmdzLnByZWNpc2lvbiA9PSBudWxsKSB7XG4gICAgICAgIHJlZ2V4ID0gYCR7cmVnZXh9KFxcXFwuXFxcXGQrKT9gO1xuICAgIH1cbiAgICByZXR1cm4gcmVnZXg7XG59XG5mdW5jdGlvbiB0aW1lUmVnZXgoYXJncykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeJHt0aW1lUmVnZXhTb3VyY2UoYXJncyl9JGApO1xufVxuLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zMTQzMjMxXG5mdW5jdGlvbiBkYXRldGltZVJlZ2V4KGFyZ3MpIHtcbiAgICBsZXQgcmVnZXggPSBgJHtkYXRlUmVnZXhTb3VyY2V9VCR7dGltZVJlZ2V4U291cmNlKGFyZ3MpfWA7XG4gICAgY29uc3Qgb3B0cyA9IFtdO1xuICAgIG9wdHMucHVzaChhcmdzLmxvY2FsID8gYFo/YCA6IGBaYCk7XG4gICAgaWYgKGFyZ3Mub2Zmc2V0KVxuICAgICAgICBvcHRzLnB1c2goYChbKy1dXFxcXGR7Mn06P1xcXFxkezJ9KWApO1xuICAgIHJlZ2V4ID0gYCR7cmVnZXh9KCR7b3B0cy5qb2luKFwifFwiKX0pYDtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXiR7cmVnZXh9JGApO1xufVxuZnVuY3Rpb24gaXNWYWxpZElQKGlwLCB2ZXJzaW9uKSB7XG4gICAgaWYgKCh2ZXJzaW9uID09PSBcInY0XCIgfHwgIXZlcnNpb24pICYmIGlwdjRSZWdleC50ZXN0KGlwKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCh2ZXJzaW9uID09PSBcInY2XCIgfHwgIXZlcnNpb24pICYmIGlwdjZSZWdleC50ZXN0KGlwKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuY2xhc3MgWm9kU3RyaW5nIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWYuY29lcmNlKSB7XG4gICAgICAgICAgICBpbnB1dC5kYXRhID0gU3RyaW5nKGlucHV0LmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuc3RyaW5nKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnN0cmluZyxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IG5ldyBQYXJzZVN0YXR1cygpO1xuICAgICAgICBsZXQgY3R4ID0gdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaGVjay5raW5kID09PSBcIm1pblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmRhdGEubGVuZ3RoIDwgY2hlY2sudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmRhdGEubGVuZ3RoID4gY2hlY2sudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJsZW5ndGhcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb0JpZyA9IGlucHV0LmRhdGEubGVuZ3RoID4gY2hlY2sudmFsdWU7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vU21hbGwgPSBpbnB1dC5kYXRhLmxlbmd0aCA8IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0b29CaWcgfHwgdG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b29CaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0b29TbWFsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJlbWFpbFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFlbWFpbFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJlbWFpbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZW1vamlcIikge1xuICAgICAgICAgICAgICAgIGlmICghZW1vamlSZWdleCkge1xuICAgICAgICAgICAgICAgICAgICBlbW9qaVJlZ2V4ID0gbmV3IFJlZ0V4cChfZW1vamlSZWdleCwgXCJ1XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWVtb2ppUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImVtb2ppXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ1dWlkXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXV1aWRSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwidXVpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibmFub2lkXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW5hbm9pZFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJuYW5vaWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImN1aWRcIikge1xuICAgICAgICAgICAgICAgIGlmICghY3VpZFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJjdWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJjdWlkMlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjdWlkMlJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJjdWlkMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidWxpZFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1bGlkUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcInVsaWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInVybFwiKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbmV3IFVSTChpbnB1dC5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwidXJsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJyZWdleFwiKSB7XG4gICAgICAgICAgICAgICAgY2hlY2sucmVnZXgubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gY2hlY2sucmVnZXgudGVzdChpbnB1dC5kYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRlc3RSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJyZWdleFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidHJpbVwiKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuZGF0YSA9IGlucHV0LmRhdGEudHJpbSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJpbmNsdWRlc1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpbnB1dC5kYXRhLmluY2x1ZGVzKGNoZWNrLnZhbHVlLCBjaGVjay5wb3NpdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogeyBpbmNsdWRlczogY2hlY2sudmFsdWUsIHBvc2l0aW9uOiBjaGVjay5wb3NpdGlvbiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidG9Mb3dlckNhc2VcIikge1xuICAgICAgICAgICAgICAgIGlucHV0LmRhdGEgPSBpbnB1dC5kYXRhLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInRvVXBwZXJDYXNlXCIpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5kYXRhID0gaW5wdXQuZGF0YS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJzdGFydHNXaXRoXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlucHV0LmRhdGEuc3RhcnRzV2l0aChjaGVjay52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogeyBzdGFydHNXaXRoOiBjaGVjay52YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZW5kc1dpdGhcIikge1xuICAgICAgICAgICAgICAgIGlmICghaW5wdXQuZGF0YS5lbmRzV2l0aChjaGVjay52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogeyBlbmRzV2l0aDogY2hlY2sudmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImRhdGV0aW1lXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IGRhdGV0aW1lUmVnZXgoY2hlY2spO1xuICAgICAgICAgICAgICAgIGlmICghcmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImRhdGV0aW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJkYXRlXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IGRhdGVSZWdleDtcbiAgICAgICAgICAgICAgICBpZiAoIXJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ0aW1lXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IHRpbWVSZWdleChjaGVjayk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwidGltZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZHVyYXRpb25cIikge1xuICAgICAgICAgICAgICAgIGlmICghZHVyYXRpb25SZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImlwXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRJUChpbnB1dC5kYXRhLCBjaGVjay52ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImlwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJiYXNlNjRcIikge1xuICAgICAgICAgICAgICAgIGlmICghYmFzZTY0UmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImJhc2U2NFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoY2hlY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogaW5wdXQuZGF0YSB9O1xuICAgIH1cbiAgICBfcmVnZXgocmVnZXgsIHZhbGlkYXRpb24sIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmaW5lbWVudCgoZGF0YSkgPT4gcmVnZXgudGVzdChkYXRhKSwge1xuICAgICAgICAgICAgdmFsaWRhdGlvbixcbiAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9hZGRDaGVjayhjaGVjaykge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCBjaGVja10sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbWFpbChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiZW1haWxcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICB1cmwobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcInVybFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIGVtb2ppKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJlbW9qaVwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIHV1aWQobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcInV1aWRcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBuYW5vaWQobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcIm5hbm9pZFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIGN1aWQobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImN1aWRcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBjdWlkMihtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiY3VpZDJcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICB1bGlkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJ1bGlkXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgYmFzZTY0KG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJiYXNlNjRcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBpcChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiaXBcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnMpIH0pO1xuICAgIH1cbiAgICBkYXRldGltZShvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgICAgICBraW5kOiBcImRhdGV0aW1lXCIsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiBudWxsLFxuICAgICAgICAgICAgICAgIG9mZnNldDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbG9jYWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJkYXRldGltZVwiLFxuICAgICAgICAgICAgcHJlY2lzaW9uOiB0eXBlb2YgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wcmVjaXNpb24pID09PSBcInVuZGVmaW5lZFwiID8gbnVsbCA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wcmVjaXNpb24sXG4gICAgICAgICAgICBvZmZzZXQ6IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5vZmZzZXQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlLFxuICAgICAgICAgICAgbG9jYWw6IChfYiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZmFsc2UsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGF0ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiZGF0ZVwiLCBtZXNzYWdlIH0pO1xuICAgIH1cbiAgICB0aW1lKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAgICAgIGtpbmQ6IFwidGltZVwiLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogbnVsbCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwidGltZVwiLFxuICAgICAgICAgICAgcHJlY2lzaW9uOiB0eXBlb2YgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wcmVjaXNpb24pID09PSBcInVuZGVmaW5lZFwiID8gbnVsbCA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wcmVjaXNpb24sXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZHVyYXRpb24obWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImR1cmF0aW9uXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgcmVnZXgocmVnZXgsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwicmVnZXhcIixcbiAgICAgICAgICAgIHJlZ2V4OiByZWdleCxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGluY2x1ZGVzKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImluY2x1ZGVzXCIsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBwb3NpdGlvbjogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnBvc2l0aW9uLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5tZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHN0YXJ0c1dpdGgodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwic3RhcnRzV2l0aFwiLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZW5kc1dpdGgodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwiZW5kc1dpdGhcIixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1pbihtaW5MZW5ndGgsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogbWluTGVuZ3RoLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWF4KG1heExlbmd0aCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiBtYXhMZW5ndGgsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZW5ndGgobGVuLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImxlbmd0aFwiLFxuICAgICAgICAgICAgdmFsdWU6IGxlbixcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSB6LnN0cmluZygpLm1pbigxKSBpbnN0ZWFkLlxuICAgICAqIEBzZWUge0BsaW5rIFpvZFN0cmluZy5taW59XG4gICAgICovXG4gICAgbm9uZW1wdHkobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW4oMSwgZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgdHJpbSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RTdHJpbmcoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgeyBraW5kOiBcInRyaW1cIiB9XSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvTG93ZXJDYXNlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCB7IGtpbmQ6IFwidG9Mb3dlckNhc2VcIiB9XSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvVXBwZXJDYXNlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCB7IGtpbmQ6IFwidG9VcHBlckNhc2VcIiB9XSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBpc0RhdGV0aW1lKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImRhdGV0aW1lXCIpO1xuICAgIH1cbiAgICBnZXQgaXNEYXRlKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImRhdGVcIik7XG4gICAgfVxuICAgIGdldCBpc1RpbWUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwidGltZVwiKTtcbiAgICB9XG4gICAgZ2V0IGlzRHVyYXRpb24oKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiZHVyYXRpb25cIik7XG4gICAgfVxuICAgIGdldCBpc0VtYWlsKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImVtYWlsXCIpO1xuICAgIH1cbiAgICBnZXQgaXNVUkwoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwidXJsXCIpO1xuICAgIH1cbiAgICBnZXQgaXNFbW9qaSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJlbW9qaVwiKTtcbiAgICB9XG4gICAgZ2V0IGlzVVVJRCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJ1dWlkXCIpO1xuICAgIH1cbiAgICBnZXQgaXNOQU5PSUQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwibmFub2lkXCIpO1xuICAgIH1cbiAgICBnZXQgaXNDVUlEKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImN1aWRcIik7XG4gICAgfVxuICAgIGdldCBpc0NVSUQyKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImN1aWQyXCIpO1xuICAgIH1cbiAgICBnZXQgaXNVTElEKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcInVsaWRcIik7XG4gICAgfVxuICAgIGdldCBpc0lQKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImlwXCIpO1xuICAgIH1cbiAgICBnZXQgaXNCYXNlNjQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiYmFzZTY0XCIpO1xuICAgIH1cbiAgICBnZXQgbWluTGVuZ3RoKCkge1xuICAgICAgICBsZXQgbWluID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IG51bGwgfHwgY2gudmFsdWUgPiBtaW4pXG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW47XG4gICAgfVxuICAgIGdldCBtYXhMZW5ndGgoKSB7XG4gICAgICAgIGxldCBtYXggPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1heCA9PT0gbnVsbCB8fCBjaC52YWx1ZSA8IG1heClcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICB9XG59XG5ab2RTdHJpbmcuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgIGNoZWNrczogW10sXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kU3RyaW5nLFxuICAgICAgICBjb2VyY2U6IChfYSA9IHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5jb2VyY2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzk2NjQ4NC93aHktZG9lcy1tb2R1bHVzLW9wZXJhdG9yLXJldHVybi1mcmFjdGlvbmFsLW51bWJlci1pbi1qYXZhc2NyaXB0LzMxNzExMDM0IzMxNzExMDM0XG5mdW5jdGlvbiBmbG9hdFNhZmVSZW1haW5kZXIodmFsLCBzdGVwKSB7XG4gICAgY29uc3QgdmFsRGVjQ291bnQgPSAodmFsLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpWzFdIHx8IFwiXCIpLmxlbmd0aDtcbiAgICBjb25zdCBzdGVwRGVjQ291bnQgPSAoc3RlcC50b1N0cmluZygpLnNwbGl0KFwiLlwiKVsxXSB8fCBcIlwiKS5sZW5ndGg7XG4gICAgY29uc3QgZGVjQ291bnQgPSB2YWxEZWNDb3VudCA+IHN0ZXBEZWNDb3VudCA/IHZhbERlY0NvdW50IDogc3RlcERlY0NvdW50O1xuICAgIGNvbnN0IHZhbEludCA9IHBhcnNlSW50KHZhbC50b0ZpeGVkKGRlY0NvdW50KS5yZXBsYWNlKFwiLlwiLCBcIlwiKSk7XG4gICAgY29uc3Qgc3RlcEludCA9IHBhcnNlSW50KHN0ZXAudG9GaXhlZChkZWNDb3VudCkucmVwbGFjZShcIi5cIiwgXCJcIikpO1xuICAgIHJldHVybiAodmFsSW50ICUgc3RlcEludCkgLyBNYXRoLnBvdygxMCwgZGVjQ291bnQpO1xufVxuY2xhc3MgWm9kTnVtYmVyIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubWluID0gdGhpcy5ndGU7XG4gICAgICAgIHRoaXMubWF4ID0gdGhpcy5sdGU7XG4gICAgICAgIHRoaXMuc3RlcCA9IHRoaXMubXVsdGlwbGVPZjtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWYuY29lcmNlKSB7XG4gICAgICAgICAgICBpbnB1dC5kYXRhID0gTnVtYmVyKGlucHV0LmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUubnVtYmVyKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm51bWJlcixcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjdHggPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IG5ldyBQYXJzZVN0YXR1cygpO1xuICAgICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaGVjay5raW5kID09PSBcImludFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1dGlsLmlzSW50ZWdlcihpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IFwiZmxvYXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm1pblwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vU21hbGwgPSBjaGVjay5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dC5kYXRhIDwgY2hlY2sudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBpbnB1dC5kYXRhIDw9IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0b29TbWFsbCkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiBjaGVjay5pbmNsdXNpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb0JpZyA9IGNoZWNrLmluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICA/IGlucHV0LmRhdGEgPiBjaGVjay52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGlucHV0LmRhdGEgPj0gY2hlY2sudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHRvb0JpZykge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogY2hlY2suaW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibXVsdGlwbGVPZlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZsb2F0U2FmZVJlbWFpbmRlcihpbnB1dC5kYXRhLCBjaGVjay52YWx1ZSkgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLm5vdF9tdWx0aXBsZV9vZixcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlT2Y6IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZmluaXRlXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUubm90X2Zpbml0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGNoZWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGlucHV0LmRhdGEgfTtcbiAgICB9XG4gICAgZ3RlKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWluXCIsIHZhbHVlLCB0cnVlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBndCh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1pblwiLCB2YWx1ZSwgZmFsc2UsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGx0ZSh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1heFwiLCB2YWx1ZSwgdHJ1ZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgbHQodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtYXhcIiwgdmFsdWUsIGZhbHNlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBzZXRMaW1pdChraW5kLCB2YWx1ZSwgaW5jbHVzaXZlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kTnVtYmVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZi5jaGVja3MsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfYWRkQ2hlY2soY2hlY2spIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2ROdW1iZXIoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgY2hlY2tdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW50KG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwiaW50XCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwb3NpdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbmVnYXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vbnBvc2l0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vbm5lZ2F0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG11bHRpcGxlT2YodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibXVsdGlwbGVPZlwiLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZmluaXRlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwiZmluaXRlXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzYWZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1heFwiLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IG1pblZhbHVlKCkge1xuICAgICAgICBsZXQgbWluID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IG51bGwgfHwgY2gudmFsdWUgPiBtaW4pXG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW47XG4gICAgfVxuICAgIGdldCBtYXhWYWx1ZSgpIHtcbiAgICAgICAgbGV0IG1heCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSBudWxsIHx8IGNoLnZhbHVlIDwgbWF4KVxuICAgICAgICAgICAgICAgICAgICBtYXggPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgIH1cbiAgICBnZXQgaXNJbnQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiaW50XCIgfHxcbiAgICAgICAgICAgIChjaC5raW5kID09PSBcIm11bHRpcGxlT2ZcIiAmJiB1dGlsLmlzSW50ZWdlcihjaC52YWx1ZSkpKTtcbiAgICB9XG4gICAgZ2V0IGlzRmluaXRlKCkge1xuICAgICAgICBsZXQgbWF4ID0gbnVsbCwgbWluID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJmaW5pdGVcIiB8fFxuICAgICAgICAgICAgICAgIGNoLmtpbmQgPT09IFwiaW50XCIgfHxcbiAgICAgICAgICAgICAgICBjaC5raW5kID09PSBcIm11bHRpcGxlT2ZcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2gua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IG51bGwgfHwgY2gudmFsdWUgPiBtaW4pXG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2gua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChtYXggPT09IG51bGwgfHwgY2gudmFsdWUgPCBtYXgpXG4gICAgICAgICAgICAgICAgICAgIG1heCA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobWluKSAmJiBOdW1iZXIuaXNGaW5pdGUobWF4KTtcbiAgICB9XG59XG5ab2ROdW1iZXIuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTnVtYmVyKHtcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROdW1iZXIsXG4gICAgICAgIGNvZXJjZTogKHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5jb2VyY2UpIHx8IGZhbHNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kQmlnSW50IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubWluID0gdGhpcy5ndGU7XG4gICAgICAgIHRoaXMubWF4ID0gdGhpcy5sdGU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IEJpZ0ludChpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmJpZ2ludCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5iaWdpbnQsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY3R4ID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBuZXcgUGFyc2VTdGF0dXMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2sua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gY2hlY2suaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQuZGF0YSA8IGNoZWNrLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXQuZGF0YSA8PSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYmlnaW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogY2hlY2suaW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29CaWcgPSBjaGVjay5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dC5kYXRhID4gY2hlY2sudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBpbnB1dC5kYXRhID49IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0b29CaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJpZ2ludFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IGNoZWNrLmluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm11bHRpcGxlT2ZcIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhICUgY2hlY2sudmFsdWUgIT09IEJpZ0ludCgwKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUubm90X211bHRpcGxlX29mLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVPZjogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihjaGVjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBpbnB1dC5kYXRhIH07XG4gICAgfVxuICAgIGd0ZSh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1pblwiLCB2YWx1ZSwgdHJ1ZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgZ3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtaW5cIiwgdmFsdWUsIGZhbHNlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBsdGUodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtYXhcIiwgdmFsdWUsIHRydWUsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGx0KHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWF4XCIsIHZhbHVlLCBmYWxzZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgc2V0TGltaXQoa2luZCwgdmFsdWUsIGluY2x1c2l2ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEJpZ0ludCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWYuY2hlY2tzLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2FkZENoZWNrKGNoZWNrKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQmlnSW50KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIGNoZWNrXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBvc2l0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogQmlnSW50KDApLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5lZ2F0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogQmlnSW50KDApLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vbnBvc2l0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogQmlnSW50KDApLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbm9ubmVnYXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiBCaWdJbnQoMCksXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtdWx0aXBsZU9mKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm11bHRpcGxlT2ZcIixcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IG1pblZhbHVlKCkge1xuICAgICAgICBsZXQgbWluID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IG51bGwgfHwgY2gudmFsdWUgPiBtaW4pXG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW47XG4gICAgfVxuICAgIGdldCBtYXhWYWx1ZSgpIHtcbiAgICAgICAgbGV0IG1heCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSBudWxsIHx8IGNoLnZhbHVlIDwgbWF4KVxuICAgICAgICAgICAgICAgICAgICBtYXggPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgIH1cbn1cblpvZEJpZ0ludC5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiBuZXcgWm9kQmlnSW50KHtcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCaWdJbnQsXG4gICAgICAgIGNvZXJjZTogKF9hID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLmNvZXJjZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2UsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RCb29sZWFuIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWYuY29lcmNlKSB7XG4gICAgICAgICAgICBpbnB1dC5kYXRhID0gQm9vbGVhbihpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmJvb2xlYW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuYm9vbGVhbixcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RCb29sZWFuLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEJvb2xlYW4oe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEJvb2xlYW4sXG4gICAgICAgIGNvZXJjZTogKHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5jb2VyY2UpIHx8IGZhbHNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kRGF0ZSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IG5ldyBEYXRlKGlucHV0LmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuZGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5kYXRlLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKGlucHV0LmRhdGEuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfZGF0ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdHVzID0gbmV3IFBhcnNlU3RhdHVzKCk7XG4gICAgICAgIGxldCBjdHggPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoZWNrLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZGF0YS5nZXRUaW1lKCkgPCBjaGVjay52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmRhdGEuZ2V0VGltZSgpID4gY2hlY2sudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoY2hlY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0dXM6IHN0YXR1cy52YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgRGF0ZShpbnB1dC5kYXRhLmdldFRpbWUoKSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9hZGRDaGVjayhjaGVjaykge1xuICAgICAgICByZXR1cm4gbmV3IFpvZERhdGUoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgY2hlY2tdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWluKG1pbkRhdGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogbWluRGF0ZS5nZXRUaW1lKCksXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXgobWF4RGF0ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiBtYXhEYXRlLmdldFRpbWUoKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBtaW5EYXRlKCkge1xuICAgICAgICBsZXQgbWluID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IG51bGwgfHwgY2gudmFsdWUgPiBtaW4pXG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCA/IG5ldyBEYXRlKG1pbikgOiBudWxsO1xuICAgIH1cbiAgICBnZXQgbWF4RGF0ZSgpIHtcbiAgICAgICAgbGV0IG1heCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSBudWxsIHx8IGNoLnZhbHVlIDwgbWF4KVxuICAgICAgICAgICAgICAgICAgICBtYXggPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4ICE9IG51bGwgPyBuZXcgRGF0ZShtYXgpIDogbnVsbDtcbiAgICB9XG59XG5ab2REYXRlLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZERhdGUoe1xuICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICBjb2VyY2U6IChwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuY29lcmNlKSB8fCBmYWxzZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REYXRlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kU3ltYm9sIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuc3ltYm9sKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnN5bWJvbCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RTeW1ib2wuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kU3ltYm9sKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RTeW1ib2wsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RVbmRlZmluZWQgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS51bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZFVuZGVmaW5lZC5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RVbmRlZmluZWQoe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFVuZGVmaW5lZCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZE51bGwgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5udWxsKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm51bGwsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kTnVsbC5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROdWxsKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROdWxsLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kQW55IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIC8vIHRvIHByZXZlbnQgaW5zdGFuY2VzIG9mIG90aGVyIGNsYXNzZXMgZnJvbSBleHRlbmRpbmcgWm9kQW55LiB0aGlzIGNhdXNlcyBpc3N1ZXMgd2l0aCBjYXRjaGFsbCBpbiBab2RPYmplY3QuXG4gICAgICAgIHRoaXMuX2FueSA9IHRydWU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kQW55LmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEFueSh7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQW55LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kVW5rbm93biBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICAvLyByZXF1aXJlZFxuICAgICAgICB0aGlzLl91bmtub3duID0gdHJ1ZTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RVbmtub3duLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFVua25vd24oe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFVua25vd24sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2ROZXZlciBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm5ldmVyLFxuICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgfVxufVxuWm9kTmV2ZXIuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTmV2ZXIoe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE5ldmVyLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kVm9pZCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS52b2lkLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZFZvaWQuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kVm9pZCh7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVm9pZCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZEFycmF5IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4LCBzdGF0dXMgfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IGRlZiA9IHRoaXMuX2RlZjtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmFycmF5KSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLmFycmF5LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZi5leGFjdExlbmd0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgdG9vQmlnID0gY3R4LmRhdGEubGVuZ3RoID4gZGVmLmV4YWN0TGVuZ3RoLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgdG9vU21hbGwgPSBjdHguZGF0YS5sZW5ndGggPCBkZWYuZXhhY3RMZW5ndGgudmFsdWU7XG4gICAgICAgICAgICBpZiAodG9vQmlnIHx8IHRvb1NtYWxsKSB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IHRvb0JpZyA/IFpvZElzc3VlQ29kZS50b29fYmlnIDogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogKHRvb1NtYWxsID8gZGVmLmV4YWN0TGVuZ3RoLnZhbHVlIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogKHRvb0JpZyA/IGRlZi5leGFjdExlbmd0aC52YWx1ZSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBleGFjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGVmLmV4YWN0TGVuZ3RoLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZi5taW5MZW5ndGggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjdHguZGF0YS5sZW5ndGggPCBkZWYubWluTGVuZ3RoLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGRlZi5taW5MZW5ndGgudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRlZi5taW5MZW5ndGgubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmLm1heExlbmd0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGN0eC5kYXRhLmxlbmd0aCA+IGRlZi5tYXhMZW5ndGgudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW06IGRlZi5tYXhMZW5ndGgudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRlZi5tYXhMZW5ndGgubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFsuLi5jdHguZGF0YV0ubWFwKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZi50eXBlLl9wYXJzZUFzeW5jKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCBpdGVtLCBjdHgucGF0aCwgaSkpO1xuICAgICAgICAgICAgfSkpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZUFycmF5KHN0YXR1cywgcmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5jdHguZGF0YV0ubWFwKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGVmLnR5cGUuX3BhcnNlU3luYyhuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgaXRlbSwgY3R4LnBhdGgsIGkpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZUFycmF5KHN0YXR1cywgcmVzdWx0KTtcbiAgICB9XG4gICAgZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZTtcbiAgICB9XG4gICAgbWluKG1pbkxlbmd0aCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEFycmF5KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIG1pbkxlbmd0aDogeyB2YWx1ZTogbWluTGVuZ3RoLCBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1heChtYXhMZW5ndGgsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RBcnJheSh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBtYXhMZW5ndGg6IHsgdmFsdWU6IG1heExlbmd0aCwgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZW5ndGgobGVuLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQXJyYXkoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgZXhhY3RMZW5ndGg6IHsgdmFsdWU6IGxlbiwgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25lbXB0eShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbigxLCBtZXNzYWdlKTtcbiAgICB9XG59XG5ab2RBcnJheS5jcmVhdGUgPSAoc2NoZW1hLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEFycmF5KHtcbiAgICAgICAgdHlwZTogc2NoZW1hLFxuICAgICAgICBtaW5MZW5ndGg6IG51bGwsXG4gICAgICAgIG1heExlbmd0aDogbnVsbCxcbiAgICAgICAgZXhhY3RMZW5ndGg6IG51bGwsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQXJyYXksXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5mdW5jdGlvbiBkZWVwUGFydGlhbGlmeShzY2hlbWEpIHtcbiAgICBpZiAoc2NoZW1hIGluc3RhbmNlb2YgWm9kT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IG5ld1NoYXBlID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYS5zaGFwZSkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRTY2hlbWEgPSBzY2hlbWEuc2hhcGVba2V5XTtcbiAgICAgICAgICAgIG5ld1NoYXBlW2tleV0gPSBab2RPcHRpb25hbC5jcmVhdGUoZGVlcFBhcnRpYWxpZnkoZmllbGRTY2hlbWEpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi5zY2hlbWEuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiBuZXdTaGFwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFpvZEFycmF5KSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQXJyYXkoe1xuICAgICAgICAgICAgLi4uc2NoZW1hLl9kZWYsXG4gICAgICAgICAgICB0eXBlOiBkZWVwUGFydGlhbGlmeShzY2hlbWEuZWxlbWVudCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBab2RPcHRpb25hbCkge1xuICAgICAgICByZXR1cm4gWm9kT3B0aW9uYWwuY3JlYXRlKGRlZXBQYXJ0aWFsaWZ5KHNjaGVtYS51bndyYXAoKSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBab2ROdWxsYWJsZSkge1xuICAgICAgICByZXR1cm4gWm9kTnVsbGFibGUuY3JlYXRlKGRlZXBQYXJ0aWFsaWZ5KHNjaGVtYS51bndyYXAoKSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBab2RUdXBsZSkge1xuICAgICAgICByZXR1cm4gWm9kVHVwbGUuY3JlYXRlKHNjaGVtYS5pdGVtcy5tYXAoKGl0ZW0pID0+IGRlZXBQYXJ0aWFsaWZ5KGl0ZW0pKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cbn1cbmNsYXNzIFpvZE9iamVjdCBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLl9jYWNoZWQgPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGRlcHJlY2F0ZWQgSW4gbW9zdCBjYXNlcywgdGhpcyBpcyBubyBsb25nZXIgbmVlZGVkIC0gdW5rbm93biBwcm9wZXJ0aWVzIGFyZSBub3cgc2lsZW50bHkgc3RyaXBwZWQuXG4gICAgICAgICAqIElmIHlvdSB3YW50IHRvIHBhc3MgdGhyb3VnaCB1bmtub3duIHByb3BlcnRpZXMsIHVzZSBgLnBhc3N0aHJvdWdoKClgIGluc3RlYWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm5vbnN0cmljdCA9IHRoaXMucGFzc3Rocm91Z2g7XG4gICAgICAgIC8vIGV4dGVuZDxcbiAgICAgICAgLy8gICBBdWdtZW50YXRpb24gZXh0ZW5kcyBab2RSYXdTaGFwZSxcbiAgICAgICAgLy8gICBOZXdPdXRwdXQgZXh0ZW5kcyB1dGlsLmZsYXR0ZW48e1xuICAgICAgICAvLyAgICAgW2sgaW4ga2V5b2YgQXVnbWVudGF0aW9uIHwga2V5b2YgT3V0cHV0XTogayBleHRlbmRzIGtleW9mIEF1Z21lbnRhdGlvblxuICAgICAgICAvLyAgICAgICA/IEF1Z21lbnRhdGlvbltrXVtcIl9vdXRwdXRcIl1cbiAgICAgICAgLy8gICAgICAgOiBrIGV4dGVuZHMga2V5b2YgT3V0cHV0XG4gICAgICAgIC8vICAgICAgID8gT3V0cHV0W2tdXG4gICAgICAgIC8vICAgICAgIDogbmV2ZXI7XG4gICAgICAgIC8vICAgfT4sXG4gICAgICAgIC8vICAgTmV3SW5wdXQgZXh0ZW5kcyB1dGlsLmZsYXR0ZW48e1xuICAgICAgICAvLyAgICAgW2sgaW4ga2V5b2YgQXVnbWVudGF0aW9uIHwga2V5b2YgSW5wdXRdOiBrIGV4dGVuZHMga2V5b2YgQXVnbWVudGF0aW9uXG4gICAgICAgIC8vICAgICAgID8gQXVnbWVudGF0aW9uW2tdW1wiX2lucHV0XCJdXG4gICAgICAgIC8vICAgICAgIDogayBleHRlbmRzIGtleW9mIElucHV0XG4gICAgICAgIC8vICAgICAgID8gSW5wdXRba11cbiAgICAgICAgLy8gICAgICAgOiBuZXZlcjtcbiAgICAgICAgLy8gICB9PlxuICAgICAgICAvLyA+KFxuICAgICAgICAvLyAgIGF1Z21lbnRhdGlvbjogQXVnbWVudGF0aW9uXG4gICAgICAgIC8vICk6IFpvZE9iamVjdDxcbiAgICAgICAgLy8gICBleHRlbmRTaGFwZTxULCBBdWdtZW50YXRpb24+LFxuICAgICAgICAvLyAgIFVua25vd25LZXlzLFxuICAgICAgICAvLyAgIENhdGNoYWxsLFxuICAgICAgICAvLyAgIE5ld091dHB1dCxcbiAgICAgICAgLy8gICBOZXdJbnB1dFxuICAgICAgICAvLyA+IHtcbiAgICAgICAgLy8gICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgIC8vICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgIC8vICAgICBzaGFwZTogKCkgPT4gKHtcbiAgICAgICAgLy8gICAgICAgLi4udGhpcy5fZGVmLnNoYXBlKCksXG4gICAgICAgIC8vICAgICAgIC4uLmF1Z21lbnRhdGlvbixcbiAgICAgICAgLy8gICAgIH0pLFxuICAgICAgICAvLyAgIH0pIGFzIGFueTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlcHJlY2F0ZWQgVXNlIGAuZXh0ZW5kYCBpbnN0ZWFkXG4gICAgICAgICAqICAqL1xuICAgICAgICB0aGlzLmF1Z21lbnQgPSB0aGlzLmV4dGVuZDtcbiAgICB9XG4gICAgX2dldENhY2hlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NhY2hlZCAhPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWQ7XG4gICAgICAgIGNvbnN0IHNoYXBlID0gdGhpcy5fZGVmLnNoYXBlKCk7XG4gICAgICAgIGNvbnN0IGtleXMgPSB1dGlsLm9iamVjdEtleXMoc2hhcGUpO1xuICAgICAgICByZXR1cm4gKHRoaXMuX2NhY2hlZCA9IHsgc2hhcGUsIGtleXMgfSk7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm9iamVjdCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5vYmplY3QsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCB7IHNoYXBlLCBrZXlzOiBzaGFwZUtleXMgfSA9IHRoaXMuX2dldENhY2hlZCgpO1xuICAgICAgICBjb25zdCBleHRyYUtleXMgPSBbXTtcbiAgICAgICAgaWYgKCEodGhpcy5fZGVmLmNhdGNoYWxsIGluc3RhbmNlb2YgWm9kTmV2ZXIgJiZcbiAgICAgICAgICAgIHRoaXMuX2RlZi51bmtub3duS2V5cyA9PT0gXCJzdHJpcFwiKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY3R4LmRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNoYXBlS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhaXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHNoYXBlS2V5cykge1xuICAgICAgICAgICAgY29uc3Qga2V5VmFsaWRhdG9yID0gc2hhcGVba2V5XTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY3R4LmRhdGFba2V5XTtcbiAgICAgICAgICAgIHBhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGtleTogeyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGtleSB9LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBrZXlWYWxpZGF0b3IuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCB2YWx1ZSwgY3R4LnBhdGgsIGtleSkpLFxuICAgICAgICAgICAgICAgIGFsd2F5c1NldDoga2V5IGluIGN0eC5kYXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2RlZi5jYXRjaGFsbCBpbnN0YW5jZW9mIFpvZE5ldmVyKSB7XG4gICAgICAgICAgICBjb25zdCB1bmtub3duS2V5cyA9IHRoaXMuX2RlZi51bmtub3duS2V5cztcbiAgICAgICAgICAgIGlmICh1bmtub3duS2V5cyA9PT0gXCJwYXNzdGhyb3VnaFwiKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZXh0cmFLZXlzKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZToga2V5IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGN0eC5kYXRhW2tleV0gfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5rbm93bktleXMgPT09IFwic3RyaWN0XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmFLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudW5yZWNvZ25pemVkX2tleXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzOiBleHRyYUtleXMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bmtub3duS2V5cyA9PT0gXCJzdHJpcFwiKSA7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludGVybmFsIFpvZE9iamVjdCBlcnJvcjogaW52YWxpZCB1bmtub3duS2V5cyB2YWx1ZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJ1biBjYXRjaGFsbCB2YWxpZGF0aW9uXG4gICAgICAgICAgICBjb25zdCBjYXRjaGFsbCA9IHRoaXMuX2RlZi5jYXRjaGFsbDtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGV4dHJhS2V5cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY3R4LmRhdGFba2V5XTtcbiAgICAgICAgICAgICAgICBwYWlycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZToga2V5IH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjYXRjaGFsbC5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIHZhbHVlLCBjdHgucGF0aCwga2V5KSAvLywgY3R4LmNoaWxkKGtleSksIHZhbHVlLCBnZXRQYXJzZWRUeXBlKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBhbHdheXNTZXQ6IGtleSBpbiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN5bmNQYWlycyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBwYWlyLmtleTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzeW5jUGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsd2F5c1NldDogcGFpci5hbHdheXNTZXQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3luY1BhaXJzO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoc3luY1BhaXJzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0U3luYyhzdGF0dXMsIHN5bmNQYWlycyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBwYWlycyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHNoYXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnNoYXBlKCk7XG4gICAgfVxuICAgIHN0cmljdChtZXNzYWdlKSB7XG4gICAgICAgIGVycm9yVXRpbC5lcnJUb09iajtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgdW5rbm93bktleXM6IFwic3RyaWN0XCIsXG4gICAgICAgICAgICAuLi4obWVzc2FnZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWFwOiAoaXNzdWUsIGN0eCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdEVycm9yID0gKF9jID0gKF9iID0gKF9hID0gdGhpcy5fZGVmKS5lcnJvck1hcCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGlzc3VlLCBjdHgpLm1lc3NhZ2UpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGN0eC5kZWZhdWx0RXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzdWUuY29kZSA9PT0gXCJ1bnJlY29nbml6ZWRfa2V5c1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IChfZCA9IGVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKS5tZXNzYWdlKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBkZWZhdWx0RXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGVmYXVsdEVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdHJpcCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgdW5rbm93bktleXM6IFwic3RyaXBcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBhc3N0aHJvdWdoKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICB1bmtub3duS2V5czogXCJwYXNzdGhyb3VnaFwiLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gY29uc3QgQXVnbWVudEZhY3RvcnkgPVxuICAgIC8vICAgPERlZiBleHRlbmRzIFpvZE9iamVjdERlZj4oZGVmOiBEZWYpID0+XG4gICAgLy8gICA8QXVnbWVudGF0aW9uIGV4dGVuZHMgWm9kUmF3U2hhcGU+KFxuICAgIC8vICAgICBhdWdtZW50YXRpb246IEF1Z21lbnRhdGlvblxuICAgIC8vICAgKTogWm9kT2JqZWN0PFxuICAgIC8vICAgICBleHRlbmRTaGFwZTxSZXR1cm5UeXBlPERlZltcInNoYXBlXCJdPiwgQXVnbWVudGF0aW9uPixcbiAgICAvLyAgICAgRGVmW1widW5rbm93bktleXNcIl0sXG4gICAgLy8gICAgIERlZltcImNhdGNoYWxsXCJdXG4gICAgLy8gICA+ID0+IHtcbiAgICAvLyAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgIC8vICAgICAgIC4uLmRlZixcbiAgICAvLyAgICAgICBzaGFwZTogKCkgPT4gKHtcbiAgICAvLyAgICAgICAgIC4uLmRlZi5zaGFwZSgpLFxuICAgIC8vICAgICAgICAgLi4uYXVnbWVudGF0aW9uLFxuICAgIC8vICAgICAgIH0pLFxuICAgIC8vICAgICB9KSBhcyBhbnk7XG4gICAgLy8gICB9O1xuICAgIGV4dGVuZChhdWdtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmLnNoYXBlKCksXG4gICAgICAgICAgICAgICAgLi4uYXVnbWVudGF0aW9uLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcmlvciB0byB6b2RAMS4wLjEyIHRoZXJlIHdhcyBhIGJ1ZyBpbiB0aGVcbiAgICAgKiBpbmZlcnJlZCB0eXBlIG9mIG1lcmdlZCBvYmplY3RzLiBQbGVhc2VcbiAgICAgKiB1cGdyYWRlIGlmIHlvdSBhcmUgZXhwZXJpZW5jaW5nIGlzc3Vlcy5cbiAgICAgKi9cbiAgICBtZXJnZShtZXJnaW5nKSB7XG4gICAgICAgIGNvbnN0IG1lcmdlZCA9IG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgdW5rbm93bktleXM6IG1lcmdpbmcuX2RlZi51bmtub3duS2V5cyxcbiAgICAgICAgICAgIGNhdGNoYWxsOiBtZXJnaW5nLl9kZWYuY2F0Y2hhbGwsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWYuc2hhcGUoKSxcbiAgICAgICAgICAgICAgICAuLi5tZXJnaW5nLl9kZWYuc2hhcGUoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVyZ2VkO1xuICAgIH1cbiAgICAvLyBtZXJnZTxcbiAgICAvLyAgIEluY29taW5nIGV4dGVuZHMgQW55Wm9kT2JqZWN0LFxuICAgIC8vICAgQXVnbWVudGF0aW9uIGV4dGVuZHMgSW5jb21pbmdbXCJzaGFwZVwiXSxcbiAgICAvLyAgIE5ld091dHB1dCBleHRlbmRzIHtcbiAgICAvLyAgICAgW2sgaW4ga2V5b2YgQXVnbWVudGF0aW9uIHwga2V5b2YgT3V0cHV0XTogayBleHRlbmRzIGtleW9mIEF1Z21lbnRhdGlvblxuICAgIC8vICAgICAgID8gQXVnbWVudGF0aW9uW2tdW1wiX291dHB1dFwiXVxuICAgIC8vICAgICAgIDogayBleHRlbmRzIGtleW9mIE91dHB1dFxuICAgIC8vICAgICAgID8gT3V0cHV0W2tdXG4gICAgLy8gICAgICAgOiBuZXZlcjtcbiAgICAvLyAgIH0sXG4gICAgLy8gICBOZXdJbnB1dCBleHRlbmRzIHtcbiAgICAvLyAgICAgW2sgaW4ga2V5b2YgQXVnbWVudGF0aW9uIHwga2V5b2YgSW5wdXRdOiBrIGV4dGVuZHMga2V5b2YgQXVnbWVudGF0aW9uXG4gICAgLy8gICAgICAgPyBBdWdtZW50YXRpb25ba11bXCJfaW5wdXRcIl1cbiAgICAvLyAgICAgICA6IGsgZXh0ZW5kcyBrZXlvZiBJbnB1dFxuICAgIC8vICAgICAgID8gSW5wdXRba11cbiAgICAvLyAgICAgICA6IG5ldmVyO1xuICAgIC8vICAgfVxuICAgIC8vID4oXG4gICAgLy8gICBtZXJnaW5nOiBJbmNvbWluZ1xuICAgIC8vICk6IFpvZE9iamVjdDxcbiAgICAvLyAgIGV4dGVuZFNoYXBlPFQsIFJldHVyblR5cGU8SW5jb21pbmdbXCJfZGVmXCJdW1wic2hhcGVcIl0+PixcbiAgICAvLyAgIEluY29taW5nW1wiX2RlZlwiXVtcInVua25vd25LZXlzXCJdLFxuICAgIC8vICAgSW5jb21pbmdbXCJfZGVmXCJdW1wiY2F0Y2hhbGxcIl0sXG4gICAgLy8gICBOZXdPdXRwdXQsXG4gICAgLy8gICBOZXdJbnB1dFxuICAgIC8vID4ge1xuICAgIC8vICAgY29uc3QgbWVyZ2VkOiBhbnkgPSBuZXcgWm9kT2JqZWN0KHtcbiAgICAvLyAgICAgdW5rbm93bktleXM6IG1lcmdpbmcuX2RlZi51bmtub3duS2V5cyxcbiAgICAvLyAgICAgY2F0Y2hhbGw6IG1lcmdpbmcuX2RlZi5jYXRjaGFsbCxcbiAgICAvLyAgICAgc2hhcGU6ICgpID0+XG4gICAgLy8gICAgICAgb2JqZWN0VXRpbC5tZXJnZVNoYXBlcyh0aGlzLl9kZWYuc2hhcGUoKSwgbWVyZ2luZy5fZGVmLnNoYXBlKCkpLFxuICAgIC8vICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdCxcbiAgICAvLyAgIH0pIGFzIGFueTtcbiAgICAvLyAgIHJldHVybiBtZXJnZWQ7XG4gICAgLy8gfVxuICAgIHNldEtleShrZXksIHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdWdtZW50KHsgW2tleV06IHNjaGVtYSB9KTtcbiAgICB9XG4gICAgLy8gbWVyZ2U8SW5jb21pbmcgZXh0ZW5kcyBBbnlab2RPYmplY3Q+KFxuICAgIC8vICAgbWVyZ2luZzogSW5jb21pbmdcbiAgICAvLyApOiAvL1pvZE9iamVjdDxUICYgSW5jb21pbmdbXCJfc2hhcGVcIl0sIFVua25vd25LZXlzLCBDYXRjaGFsbD4gPSAobWVyZ2luZykgPT4ge1xuICAgIC8vIFpvZE9iamVjdDxcbiAgICAvLyAgIGV4dGVuZFNoYXBlPFQsIFJldHVyblR5cGU8SW5jb21pbmdbXCJfZGVmXCJdW1wic2hhcGVcIl0+PixcbiAgICAvLyAgIEluY29taW5nW1wiX2RlZlwiXVtcInVua25vd25LZXlzXCJdLFxuICAgIC8vICAgSW5jb21pbmdbXCJfZGVmXCJdW1wiY2F0Y2hhbGxcIl1cbiAgICAvLyA+IHtcbiAgICAvLyAgIC8vIGNvbnN0IG1lcmdlZFNoYXBlID0gb2JqZWN0VXRpbC5tZXJnZVNoYXBlcyhcbiAgICAvLyAgIC8vICAgdGhpcy5fZGVmLnNoYXBlKCksXG4gICAgLy8gICAvLyAgIG1lcmdpbmcuX2RlZi5zaGFwZSgpXG4gICAgLy8gICAvLyApO1xuICAgIC8vICAgY29uc3QgbWVyZ2VkOiBhbnkgPSBuZXcgWm9kT2JqZWN0KHtcbiAgICAvLyAgICAgdW5rbm93bktleXM6IG1lcmdpbmcuX2RlZi51bmtub3duS2V5cyxcbiAgICAvLyAgICAgY2F0Y2hhbGw6IG1lcmdpbmcuX2RlZi5jYXRjaGFsbCxcbiAgICAvLyAgICAgc2hhcGU6ICgpID0+XG4gICAgLy8gICAgICAgb2JqZWN0VXRpbC5tZXJnZVNoYXBlcyh0aGlzLl9kZWYuc2hhcGUoKSwgbWVyZ2luZy5fZGVmLnNoYXBlKCkpLFxuICAgIC8vICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdCxcbiAgICAvLyAgIH0pIGFzIGFueTtcbiAgICAvLyAgIHJldHVybiBtZXJnZWQ7XG4gICAgLy8gfVxuICAgIGNhdGNoYWxsKGluZGV4KSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNhdGNoYWxsOiBpbmRleCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBpY2sobWFzaykge1xuICAgICAgICBjb25zdCBzaGFwZSA9IHt9O1xuICAgICAgICB1dGlsLm9iamVjdEtleXMobWFzaykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAobWFza1trZXldICYmIHRoaXMuc2hhcGVba2V5XSkge1xuICAgICAgICAgICAgICAgIHNoYXBlW2tleV0gPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gc2hhcGUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvbWl0KG1hc2spIHtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSB7fTtcbiAgICAgICAgdXRpbC5vYmplY3RLZXlzKHRoaXMuc2hhcGUpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFtYXNrW2tleV0pIHtcbiAgICAgICAgICAgICAgICBzaGFwZVtrZXldID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+IHNoYXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBkZWVwUGFydGlhbCgpIHtcbiAgICAgICAgcmV0dXJuIGRlZXBQYXJ0aWFsaWZ5KHRoaXMpO1xuICAgIH1cbiAgICBwYXJ0aWFsKG1hc2spIHtcbiAgICAgICAgY29uc3QgbmV3U2hhcGUgPSB7fTtcbiAgICAgICAgdXRpbC5vYmplY3RLZXlzKHRoaXMuc2hhcGUpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGRTY2hlbWEgPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICBpZiAobWFzayAmJiAhbWFza1trZXldKSB7XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IGZpZWxkU2NoZW1hO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IGZpZWxkU2NoZW1hLm9wdGlvbmFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gbmV3U2hhcGUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXF1aXJlZChtYXNrKSB7XG4gICAgICAgIGNvbnN0IG5ld1NoYXBlID0ge307XG4gICAgICAgIHV0aWwub2JqZWN0S2V5cyh0aGlzLnNoYXBlKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChtYXNrICYmICFtYXNrW2tleV0pIHtcbiAgICAgICAgICAgICAgICBuZXdTaGFwZVtrZXldID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRTY2hlbWEgPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICAgICAgbGV0IG5ld0ZpZWxkID0gZmllbGRTY2hlbWE7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG5ld0ZpZWxkIGluc3RhbmNlb2YgWm9kT3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3RmllbGQgPSBuZXdGaWVsZC5fZGVmLmlubmVyVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IG5ld0ZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+IG5ld1NoYXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAga2V5b2YoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVab2RFbnVtKHV0aWwub2JqZWN0S2V5cyh0aGlzLnNoYXBlKSk7XG4gICAgfVxufVxuWm9kT2JqZWN0LmNyZWF0ZSA9IChzaGFwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICBzaGFwZTogKCkgPT4gc2hhcGUsXG4gICAgICAgIHVua25vd25LZXlzOiBcInN0cmlwXCIsXG4gICAgICAgIGNhdGNoYWxsOiBab2ROZXZlci5jcmVhdGUoKSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5ab2RPYmplY3Quc3RyaWN0Q3JlYXRlID0gKHNoYXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgIHNoYXBlOiAoKSA9PiBzaGFwZSxcbiAgICAgICAgdW5rbm93bktleXM6IFwic3RyaWN0XCIsXG4gICAgICAgIGNhdGNoYWxsOiBab2ROZXZlci5jcmVhdGUoKSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5ab2RPYmplY3QubGF6eWNyZWF0ZSA9IChzaGFwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICBzaGFwZSxcbiAgICAgICAgdW5rbm93bktleXM6IFwic3RyaXBcIixcbiAgICAgICAgY2F0Y2hhbGw6IFpvZE5ldmVyLmNyZWF0ZSgpLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFVuaW9uIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZGVmLm9wdGlvbnM7XG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZVJlc3VsdHMocmVzdWx0cykge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGZpcnN0IGlzc3VlLWZyZWUgdmFsaWRhdGlvbiBpZiBpdCBleGlzdHNcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdC5zdGF0dXMgPT09IFwidmFsaWRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGlzc3VlcyBmcm9tIGRpcnR5IG9wdGlvblxuICAgICAgICAgICAgICAgICAgICBjdHguY29tbW9uLmlzc3Vlcy5wdXNoKC4uLnJlc3VsdC5jdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHJldHVybiBpbnZhbGlkXG4gICAgICAgICAgICBjb25zdCB1bmlvbkVycm9ycyA9IHJlc3VsdHMubWFwKChyZXN1bHQpID0+IG5ldyBab2RFcnJvcihyZXN1bHQuY3R4LmNvbW1vbi5pc3N1ZXMpKTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uLFxuICAgICAgICAgICAgICAgIHVuaW9uRXJyb3JzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG9wdGlvbnMubWFwKGFzeW5jIChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEN0eCA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uY3R4LFxuICAgICAgICAgICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN0eC5jb21tb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IGF3YWl0IG9wdGlvbi5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjaGlsZEN0eCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGN0eDogY2hpbGRDdHgsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKS50aGVuKGhhbmRsZVJlc3VsdHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGRpcnR5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgaXNzdWVzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRDdHggPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmN0eCxcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jdHguY29tbW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb3B0aW9uLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY2hpbGRDdHgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwidmFsaWRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIgJiYgIWRpcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcnR5ID0geyByZXN1bHQsIGN0eDogY2hpbGRDdHggfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkQ3R4LmNvbW1vbi5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzc3Vlcy5wdXNoKGNoaWxkQ3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkaXJ0eSkge1xuICAgICAgICAgICAgICAgIGN0eC5jb21tb24uaXNzdWVzLnB1c2goLi4uZGlydHkuY3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkaXJ0eS5yZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB1bmlvbkVycm9ycyA9IGlzc3Vlcy5tYXAoKGlzc3VlcykgPT4gbmV3IFpvZEVycm9yKGlzc3VlcykpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb24sXG4gICAgICAgICAgICAgICAgdW5pb25FcnJvcnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLm9wdGlvbnM7XG4gICAgfVxufVxuWm9kVW5pb24uY3JlYXRlID0gKHR5cGVzLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFVuaW9uKHtcbiAgICAgICAgb3B0aW9uczogdHlwZXMsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVW5pb24sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vLy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vLy8vLy8vXG4vLy8vLy8vLy8vICAgICAgWm9kRGlzY3JpbWluYXRlZFVuaW9uICAgICAgLy8vLy8vLy8vL1xuLy8vLy8vLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8vLy8vLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuY29uc3QgZ2V0RGlzY3JpbWluYXRvciA9ICh0eXBlKSA9PiB7XG4gICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RMYXp5KSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUuc2NoZW1hKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZEVmZmVjdHMpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS5pbm5lclR5cGUoKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RMaXRlcmFsKSB7XG4gICAgICAgIHJldHVybiBbdHlwZS52YWx1ZV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RFbnVtKSB7XG4gICAgICAgIHJldHVybiB0eXBlLm9wdGlvbnM7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2ROYXRpdmVFbnVtKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBiYW4vYmFuXG4gICAgICAgIHJldHVybiB1dGlsLm9iamVjdFZhbHVlcyh0eXBlLmVudW0pO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kRGVmYXVsdCkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLl9kZWYuaW5uZXJUeXBlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZFVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2ROdWxsKSB7XG4gICAgICAgIHJldHVybiBbbnVsbF07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RPcHRpb25hbCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZCwgLi4uZ2V0RGlzY3JpbWluYXRvcih0eXBlLnVud3JhcCgpKV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2ROdWxsYWJsZSkge1xuICAgICAgICByZXR1cm4gW251bGwsIC4uLmdldERpc2NyaW1pbmF0b3IodHlwZS51bndyYXAoKSldO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kQnJhbmRlZCkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLnVud3JhcCgpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZFJlYWRvbmx5KSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUudW53cmFwKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kQ2F0Y2gpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS5fZGVmLmlubmVyVHlwZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufTtcbmNsYXNzIFpvZERpc2NyaW1pbmF0ZWRVbmlvbiBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm9iamVjdCkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5vYmplY3QsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yID0gdGhpcy5kaXNjcmltaW5hdG9yO1xuICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yVmFsdWUgPSBjdHguZGF0YVtkaXNjcmltaW5hdG9yXTtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5vcHRpb25zTWFwLmdldChkaXNjcmltaW5hdG9yVmFsdWUpO1xuICAgICAgICBpZiAoIW9wdGlvbikge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb25fZGlzY3JpbWluYXRvcixcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBBcnJheS5mcm9tKHRoaXMub3B0aW9uc01hcC5rZXlzKCkpLFxuICAgICAgICAgICAgICAgIHBhdGg6IFtkaXNjcmltaW5hdG9yXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb24uX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGRpc2NyaW1pbmF0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuZGlzY3JpbWluYXRvcjtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYub3B0aW9ucztcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnNNYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYub3B0aW9uc01hcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBkaXNjcmltaW5hdGVkIHVuaW9uIHNjaGVtYS4gSXRzIGJlaGF2aW91ciBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgbm9ybWFsIHoudW5pb24oKSBjb25zdHJ1Y3Rvci5cbiAgICAgKiBIb3dldmVyLCBpdCBvbmx5IGFsbG93cyBhIHVuaW9uIG9mIG9iamVjdHMsIGFsbCBvZiB3aGljaCBuZWVkIHRvIHNoYXJlIGEgZGlzY3JpbWluYXRvciBwcm9wZXJ0eS4gVGhpcyBwcm9wZXJ0eSBtdXN0XG4gICAgICogaGF2ZSBhIGRpZmZlcmVudCB2YWx1ZSBmb3IgZWFjaCBvYmplY3QgaW4gdGhlIHVuaW9uLlxuICAgICAqIEBwYXJhbSBkaXNjcmltaW5hdG9yIHRoZSBuYW1lIG9mIHRoZSBkaXNjcmltaW5hdG9yIHByb3BlcnR5XG4gICAgICogQHBhcmFtIHR5cGVzIGFuIGFycmF5IG9mIG9iamVjdCBzY2hlbWFzXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqL1xuICAgIHN0YXRpYyBjcmVhdGUoZGlzY3JpbWluYXRvciwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgICAgIC8vIEdldCBhbGwgdGhlIHZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWVzXG4gICAgICAgIGNvbnN0IG9wdGlvbnNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIC8vIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yVmFsdWVzID0gZ2V0RGlzY3JpbWluYXRvcih0eXBlLnNoYXBlW2Rpc2NyaW1pbmF0b3JdKTtcbiAgICAgICAgICAgIGlmICghZGlzY3JpbWluYXRvclZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgZGlzY3JpbWluYXRvciB2YWx1ZSBmb3Iga2V5IFxcYCR7ZGlzY3JpbWluYXRvcn1cXGAgY291bGQgbm90IGJlIGV4dHJhY3RlZCBmcm9tIGFsbCBzY2hlbWEgb3B0aW9uc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBkaXNjcmltaW5hdG9yVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnNNYXAuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NyaW1pbmF0b3IgcHJvcGVydHkgJHtTdHJpbmcoZGlzY3JpbWluYXRvcil9IGhhcyBkdXBsaWNhdGUgdmFsdWUgJHtTdHJpbmcodmFsdWUpfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRpb25zTWFwLnNldCh2YWx1ZSwgdHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2REaXNjcmltaW5hdGVkVW5pb24oe1xuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REaXNjcmltaW5hdGVkVW5pb24sXG4gICAgICAgICAgICBkaXNjcmltaW5hdG9yLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnNNYXAsXG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlVmFsdWVzKGEsIGIpIHtcbiAgICBjb25zdCBhVHlwZSA9IGdldFBhcnNlZFR5cGUoYSk7XG4gICAgY29uc3QgYlR5cGUgPSBnZXRQYXJzZWRUeXBlKGIpO1xuICAgIGlmIChhID09PSBiKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBkYXRhOiBhIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGFUeXBlID09PSBab2RQYXJzZWRUeXBlLm9iamVjdCAmJiBiVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5vYmplY3QpIHtcbiAgICAgICAgY29uc3QgYktleXMgPSB1dGlsLm9iamVjdEtleXMoYik7XG4gICAgICAgIGNvbnN0IHNoYXJlZEtleXMgPSB1dGlsXG4gICAgICAgICAgICAub2JqZWN0S2V5cyhhKVxuICAgICAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBiS2V5cy5pbmRleE9mKGtleSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgbmV3T2JqID0geyAuLi5hLCAuLi5iIH07XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHNoYXJlZEtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNoYXJlZFZhbHVlID0gbWVyZ2VWYWx1ZXMoYVtrZXldLCBiW2tleV0pO1xuICAgICAgICAgICAgaWYgKCFzaGFyZWRWYWx1ZS52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3T2JqW2tleV0gPSBzaGFyZWRWYWx1ZS5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBkYXRhOiBuZXdPYmogfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYVR5cGUgPT09IFpvZFBhcnNlZFR5cGUuYXJyYXkgJiYgYlR5cGUgPT09IFpvZFBhcnNlZFR5cGUuYXJyYXkpIHtcbiAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3QXJyYXkgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtQSA9IGFbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgaXRlbUIgPSBiW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IHNoYXJlZFZhbHVlID0gbWVyZ2VWYWx1ZXMoaXRlbUEsIGl0ZW1CKTtcbiAgICAgICAgICAgIGlmICghc2hhcmVkVmFsdWUudmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld0FycmF5LnB1c2goc2hhcmVkVmFsdWUuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IG5ld0FycmF5IH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGFUeXBlID09PSBab2RQYXJzZWRUeXBlLmRhdGUgJiZcbiAgICAgICAgYlR5cGUgPT09IFpvZFBhcnNlZFR5cGUuZGF0ZSAmJlxuICAgICAgICArYSA9PT0gK2IpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IGEgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSB9O1xuICAgIH1cbn1cbmNsYXNzIFpvZEludGVyc2VjdGlvbiBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBoYW5kbGVQYXJzZWQgPSAocGFyc2VkTGVmdCwgcGFyc2VkUmlnaHQpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0Fib3J0ZWQocGFyc2VkTGVmdCkgfHwgaXNBYm9ydGVkKHBhcnNlZFJpZ2h0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWVyZ2VkID0gbWVyZ2VWYWx1ZXMocGFyc2VkTGVmdC52YWx1ZSwgcGFyc2VkUmlnaHQudmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFtZXJnZWQudmFsaWQpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRGlydHkocGFyc2VkTGVmdCkgfHwgaXNEaXJ0eShwYXJzZWRSaWdodCkpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogbWVyZ2VkLmRhdGEgfTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVmLmxlZnQuX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRoaXMuX2RlZi5yaWdodC5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdKS50aGVuKChbbGVmdCwgcmlnaHRdKSA9PiBoYW5kbGVQYXJzZWQobGVmdCwgcmlnaHQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVQYXJzZWQodGhpcy5fZGVmLmxlZnQuX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICB9KSwgdGhpcy5fZGVmLnJpZ2h0Ll9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuWm9kSW50ZXJzZWN0aW9uLmNyZWF0ZSA9IChsZWZ0LCByaWdodCwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RJbnRlcnNlY3Rpb24oe1xuICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICByaWdodDogcmlnaHQsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kSW50ZXJzZWN0aW9uLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kVHVwbGUgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmFycmF5KSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLmFycmF5LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5kYXRhLmxlbmd0aCA8IHRoaXMuX2RlZi5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgbWluaW11bTogdGhpcy5fZGVmLml0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdCA9IHRoaXMuX2RlZi5yZXN0O1xuICAgICAgICBpZiAoIXJlc3QgJiYgY3R4LmRhdGEubGVuZ3RoID4gdGhpcy5fZGVmLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgbWF4aW11bTogdGhpcy5fZGVmLml0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbXMgPSBbLi4uY3R4LmRhdGFdXG4gICAgICAgICAgICAubWFwKChpdGVtLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuX2RlZi5pdGVtc1tpdGVtSW5kZXhdIHx8IHRoaXMuX2RlZi5yZXN0O1xuICAgICAgICAgICAgaWYgKCFzY2hlbWEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgaXRlbSwgY3R4LnBhdGgsIGl0ZW1JbmRleCkpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoeCkgPT4gISF4KTsgLy8gZmlsdGVyIG51bGxzXG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoaXRlbXMpLnRoZW4oKHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIGl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgaXRlbXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaXRlbXM7XG4gICAgfVxuICAgIHJlc3QocmVzdCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFR1cGxlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHJlc3QsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblpvZFR1cGxlLmNyZWF0ZSA9IChzY2hlbWFzLCBwYXJhbXMpID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IG11c3QgcGFzcyBhbiBhcnJheSBvZiBzY2hlbWFzIHRvIHoudHVwbGUoWyAuLi4gXSlcIik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgWm9kVHVwbGUoe1xuICAgICAgICBpdGVtczogc2NoZW1hcyxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RUdXBsZSxcbiAgICAgICAgcmVzdDogbnVsbCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFJlY29yZCBleHRlbmRzIFpvZFR5cGUge1xuICAgIGdldCBrZXlTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYua2V5VHlwZTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlU2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5vYmplY3QpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUub2JqZWN0LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFpcnMgPSBbXTtcbiAgICAgICAgY29uc3Qga2V5VHlwZSA9IHRoaXMuX2RlZi5rZXlUeXBlO1xuICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjdHguZGF0YSkge1xuICAgICAgICAgICAgcGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAga2V5OiBrZXlUeXBlLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwga2V5LCBjdHgucGF0aCwga2V5KSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlVHlwZS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGN0eC5kYXRhW2tleV0sIGN0eC5wYXRoLCBrZXkpKSxcbiAgICAgICAgICAgICAgICBhbHdheXNTZXQ6IGtleSBpbiBjdHguZGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VPYmplY3RBc3luYyhzdGF0dXMsIHBhaXJzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBwYWlycyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlKGZpcnN0LCBzZWNvbmQsIHRoaXJkKSB7XG4gICAgICAgIGlmIChzZWNvbmQgaW5zdGFuY2VvZiBab2RUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFpvZFJlY29yZCh7XG4gICAgICAgICAgICAgICAga2V5VHlwZTogZmlyc3QsXG4gICAgICAgICAgICAgICAgdmFsdWVUeXBlOiBzZWNvbmQsXG4gICAgICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RSZWNvcmQsXG4gICAgICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyh0aGlyZCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFpvZFJlY29yZCh7XG4gICAgICAgICAgICBrZXlUeXBlOiBab2RTdHJpbmcuY3JlYXRlKCksXG4gICAgICAgICAgICB2YWx1ZVR5cGU6IGZpcnN0LFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RSZWNvcmQsXG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHNlY29uZCksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmNsYXNzIFpvZE1hcCBleHRlbmRzIFpvZFR5cGUge1xuICAgIGdldCBrZXlTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYua2V5VHlwZTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlU2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5tYXApIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUubWFwLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5VHlwZSA9IHRoaXMuX2RlZi5rZXlUeXBlO1xuICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgICAgICBjb25zdCBwYWlycyA9IFsuLi5jdHguZGF0YS5lbnRyaWVzKCldLm1hcCgoW2tleSwgdmFsdWVdLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBrZXk6IGtleVR5cGUuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCBrZXksIGN0eC5wYXRoLCBbaW5kZXgsIFwia2V5XCJdKSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlVHlwZS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIHZhbHVlLCBjdHgucGF0aCwgW2luZGV4LCBcInZhbHVlXCJdKSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBwYWlyLmtleTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIgfHwgdmFsdWUuc3RhdHVzID09PSBcImFib3J0ZWRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5zdGF0dXMgPT09IFwiZGlydHlcIiB8fCB2YWx1ZS5zdGF0dXMgPT09IFwiZGlydHlcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxNYXAuc2V0KGtleS52YWx1ZSwgdmFsdWUudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGZpbmFsTWFwIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gcGFpci5rZXk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImFib3J0ZWRcIiB8fCB2YWx1ZS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXR1cyA9PT0gXCJkaXJ0eVwiIHx8IHZhbHVlLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbE1hcC5zZXQoa2V5LnZhbHVlLCB2YWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGZpbmFsTWFwIH07XG4gICAgICAgIH1cbiAgICB9XG59XG5ab2RNYXAuY3JlYXRlID0gKGtleVR5cGUsIHZhbHVlVHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RNYXAoe1xuICAgICAgICB2YWx1ZVR5cGUsXG4gICAgICAgIGtleVR5cGUsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTWFwLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kU2V0IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5zZXQpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuc2V0LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmID0gdGhpcy5fZGVmO1xuICAgICAgICBpZiAoZGVmLm1pblNpemUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjdHguZGF0YS5zaXplIDwgZGVmLm1pblNpemUudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogZGVmLm1pblNpemUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWluU2l6ZS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkZWYubWF4U2l6ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGN0eC5kYXRhLnNpemUgPiBkZWYubWF4U2l6ZS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogZGVmLm1heFNpemUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWF4U2l6ZS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgICAgIGZ1bmN0aW9uIGZpbmFsaXplU2V0KGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRTZXQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgcGFyc2VkU2V0LmFkZChlbGVtZW50LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogcGFyc2VkU2V0IH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBbLi4uY3R4LmRhdGEudmFsdWVzKCldLm1hcCgoaXRlbSwgaSkgPT4gdmFsdWVUeXBlLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgaXRlbSwgY3R4LnBhdGgsIGkpKSk7XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoZWxlbWVudHMpLnRoZW4oKGVsZW1lbnRzKSA9PiBmaW5hbGl6ZVNldChlbGVtZW50cykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZpbmFsaXplU2V0KGVsZW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtaW4obWluU2l6ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFNldCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBtaW5TaXplOiB7IHZhbHVlOiBtaW5TaXplLCBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1heChtYXhTaXplLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kU2V0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIG1heFNpemU6IHsgdmFsdWU6IG1heFNpemUsIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2l6ZShzaXplLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbihzaXplLCBtZXNzYWdlKS5tYXgoc2l6ZSwgbWVzc2FnZSk7XG4gICAgfVxuICAgIG5vbmVtcHR5KG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluKDEsIG1lc3NhZ2UpO1xuICAgIH1cbn1cblpvZFNldC5jcmVhdGUgPSAodmFsdWVUeXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFNldCh7XG4gICAgICAgIHZhbHVlVHlwZSxcbiAgICAgICAgbWluU2l6ZTogbnVsbCxcbiAgICAgICAgbWF4U2l6ZTogbnVsbCxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RTZXQsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RGdW5jdGlvbiBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnZhbGlkYXRlID0gdGhpcy5pbXBsZW1lbnQ7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLmZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWFrZUFyZ3NJc3N1ZShhcmdzLCBlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG1ha2VJc3N1ZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogYXJncyxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBlcnJvck1hcHM6IFtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgICAgIGN0eC5zY2hlbWFFcnJvck1hcCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0RXJyb3JNYXAoKSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgXS5maWx0ZXIoKHgpID0+ICEheCksXG4gICAgICAgICAgICAgICAgaXNzdWVEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2FyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzRXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtYWtlUmV0dXJuc0lzc3VlKHJldHVybnMsIGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFrZUlzc3VlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiByZXR1cm5zLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIGVycm9yTWFwczogW1xuICAgICAgICAgICAgICAgICAgICBjdHguY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcCxcbiAgICAgICAgICAgICAgICAgICAgY3R4LnNjaGVtYUVycm9yTWFwLFxuICAgICAgICAgICAgICAgICAgICBnZXRFcnJvck1hcCgpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvck1hcCxcbiAgICAgICAgICAgICAgICBdLmZpbHRlcigoeCkgPT4gISF4KSxcbiAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfcmV0dXJuX3R5cGUsXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGVFcnJvcjogZXJyb3IsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgZXJyb3JNYXA6IGN0eC5jb21tb24uY29udGV4dHVhbEVycm9yTWFwIH07XG4gICAgICAgIGNvbnN0IGZuID0gY3R4LmRhdGE7XG4gICAgICAgIGlmICh0aGlzLl9kZWYucmV0dXJucyBpbnN0YW5jZW9mIFpvZFByb21pc2UpIHtcbiAgICAgICAgICAgIC8vIFdvdWxkIGxvdmUgYSB3YXkgdG8gYXZvaWQgZGlzYWJsaW5nIHRoaXMgcnVsZSwgYnV0IHdlIG5lZWRcbiAgICAgICAgICAgIC8vIGFuIGFsaWFzICh1c2luZyBhbiBhcnJvdyBmdW5jdGlvbiB3YXMgd2hhdCBjYXVzZWQgMjY1MSkuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgICAgICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBPSyhhc3luYyBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFpvZEVycm9yKFtdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRBcmdzID0gYXdhaXQgbWUuX2RlZi5hcmdzXG4gICAgICAgICAgICAgICAgICAgIC5wYXJzZUFzeW5jKGFyZ3MsIHBhcmFtcylcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLmFkZElzc3VlKG1ha2VBcmdzSXNzdWUoYXJncywgZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBSZWZsZWN0LmFwcGx5KGZuLCB0aGlzLCBwYXJzZWRBcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRSZXR1cm5zID0gYXdhaXQgbWUuX2RlZi5yZXR1cm5zLl9kZWYudHlwZVxuICAgICAgICAgICAgICAgICAgICAucGFyc2VBc3luYyhyZXN1bHQsIHBhcmFtcylcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLmFkZElzc3VlKG1ha2VSZXR1cm5zSXNzdWUocmVzdWx0LCBlKSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWRSZXR1cm5zO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBXb3VsZCBsb3ZlIGEgd2F5IHRvIGF2b2lkIGRpc2FibGluZyB0aGlzIHJ1bGUsIGJ1dCB3ZSBuZWVkXG4gICAgICAgICAgICAvLyBhbiBhbGlhcyAodXNpbmcgYW4gYXJyb3cgZnVuY3Rpb24gd2FzIHdoYXQgY2F1c2VkIDI2NTEpLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgICAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gT0soZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRBcmdzID0gbWUuX2RlZi5hcmdzLnNhZmVQYXJzZShhcmdzLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkQXJncy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBab2RFcnJvcihbbWFrZUFyZ3NJc3N1ZShhcmdzLCBwYXJzZWRBcmdzLmVycm9yKV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0LmFwcGx5KGZuLCB0aGlzLCBwYXJzZWRBcmdzLmRhdGEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFJldHVybnMgPSBtZS5fZGVmLnJldHVybnMuc2FmZVBhcnNlKHJlc3VsdCwgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFJldHVybnMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWm9kRXJyb3IoW21ha2VSZXR1cm5zSXNzdWUocmVzdWx0LCBwYXJzZWRSZXR1cm5zLmVycm9yKV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkUmV0dXJucy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFyYW1ldGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5hcmdzO1xuICAgIH1cbiAgICByZXR1cm5UeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnJldHVybnM7XG4gICAgfVxuICAgIGFyZ3MoLi4uaXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RGdW5jdGlvbih7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBhcmdzOiBab2RUdXBsZS5jcmVhdGUoaXRlbXMpLnJlc3QoWm9kVW5rbm93bi5jcmVhdGUoKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm5zKHJldHVyblR5cGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RGdW5jdGlvbih7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICByZXR1cm5zOiByZXR1cm5UeXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW1wbGVtZW50KGZ1bmMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkRnVuYyA9IHRoaXMucGFyc2UoZnVuYyk7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZWRGdW5jO1xuICAgIH1cbiAgICBzdHJpY3RJbXBsZW1lbnQoZnVuYykge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRGdW5jID0gdGhpcy5wYXJzZShmdW5jKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlZEZ1bmM7XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGUoYXJncywgcmV0dXJucywgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRnVuY3Rpb24oe1xuICAgICAgICAgICAgYXJnczogKGFyZ3NcbiAgICAgICAgICAgICAgICA/IGFyZ3NcbiAgICAgICAgICAgICAgICA6IFpvZFR1cGxlLmNyZWF0ZShbXSkucmVzdChab2RVbmtub3duLmNyZWF0ZSgpKSksXG4gICAgICAgICAgICByZXR1cm5zOiByZXR1cm5zIHx8IFpvZFVua25vd24uY3JlYXRlKCksXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEZ1bmN0aW9uLFxuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5jbGFzcyBab2RMYXp5IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgZ2V0IHNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5nZXR0ZXIoKTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBsYXp5U2NoZW1hID0gdGhpcy5fZGVmLmdldHRlcigpO1xuICAgICAgICByZXR1cm4gbGF6eVNjaGVtYS5fcGFyc2UoeyBkYXRhOiBjdHguZGF0YSwgcGF0aDogY3R4LnBhdGgsIHBhcmVudDogY3R4IH0pO1xuICAgIH1cbn1cblpvZExhenkuY3JlYXRlID0gKGdldHRlciwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RMYXp5KHtcbiAgICAgICAgZ2V0dGVyOiBnZXR0ZXIsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTGF6eSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZExpdGVyYWwgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0LmRhdGEgIT09IHRoaXMuX2RlZi52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2xpdGVyYWwsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IHRoaXMuX2RlZi52YWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBpbnB1dC5kYXRhIH07XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi52YWx1ZTtcbiAgICB9XG59XG5ab2RMaXRlcmFsLmNyZWF0ZSA9ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RMaXRlcmFsKHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZExpdGVyYWwsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5mdW5jdGlvbiBjcmVhdGVab2RFbnVtKHZhbHVlcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RFbnVtKHtcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVudW0sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmNsYXNzIFpvZEVudW0gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgX1pvZEVudW1fY2FjaGUuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0LmRhdGEgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gdGhpcy5fZGVmLnZhbHVlcztcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiB1dGlsLmpvaW5WYWx1ZXMoZXhwZWN0ZWRWYWx1ZXMpLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1pvZEVudW1fY2FjaGUsIFwiZlwiKSkge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWm9kRW51bV9jYWNoZSwgbmV3IFNldCh0aGlzLl9kZWYudmFsdWVzKSwgXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWm9kRW51bV9jYWNoZSwgXCJmXCIpLmhhcyhpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSB0aGlzLl9kZWYudmFsdWVzO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2VudW1fdmFsdWUsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogZXhwZWN0ZWRWYWx1ZXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudmFsdWVzO1xuICAgIH1cbiAgICBnZXQgZW51bSgpIHtcbiAgICAgICAgY29uc3QgZW51bVZhbHVlcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB0aGlzLl9kZWYudmFsdWVzKSB7XG4gICAgICAgICAgICBlbnVtVmFsdWVzW3ZhbF0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudW1WYWx1ZXM7XG4gICAgfVxuICAgIGdldCBWYWx1ZXMoKSB7XG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgdGhpcy5fZGVmLnZhbHVlcykge1xuICAgICAgICAgICAgZW51bVZhbHVlc1t2YWxdID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnVtVmFsdWVzO1xuICAgIH1cbiAgICBnZXQgRW51bSgpIHtcbiAgICAgICAgY29uc3QgZW51bVZhbHVlcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB0aGlzLl9kZWYudmFsdWVzKSB7XG4gICAgICAgICAgICBlbnVtVmFsdWVzW3ZhbF0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudW1WYWx1ZXM7XG4gICAgfVxuICAgIGV4dHJhY3QodmFsdWVzLCBuZXdEZWYgPSB0aGlzLl9kZWYpIHtcbiAgICAgICAgcmV0dXJuIFpvZEVudW0uY3JlYXRlKHZhbHVlcywge1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgLi4ubmV3RGVmLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZXhjbHVkZSh2YWx1ZXMsIG5ld0RlZiA9IHRoaXMuX2RlZikge1xuICAgICAgICByZXR1cm4gWm9kRW51bS5jcmVhdGUodGhpcy5vcHRpb25zLmZpbHRlcigob3B0KSA9PiAhdmFsdWVzLmluY2x1ZGVzKG9wdCkpLCB7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICAuLi5uZXdEZWYsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbl9ab2RFbnVtX2NhY2hlID0gbmV3IFdlYWtNYXAoKTtcblpvZEVudW0uY3JlYXRlID0gY3JlYXRlWm9kRW51bTtcbmNsYXNzIFpvZE5hdGl2ZUVudW0gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgX1pvZE5hdGl2ZUVudW1fY2FjaGUuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBuYXRpdmVFbnVtVmFsdWVzID0gdXRpbC5nZXRWYWxpZEVudW1WYWx1ZXModGhpcy5fZGVmLnZhbHVlcyk7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnN0cmluZyAmJlxuICAgICAgICAgICAgY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUubnVtYmVyKSB7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZFZhbHVlcyA9IHV0aWwub2JqZWN0VmFsdWVzKG5hdGl2ZUVudW1WYWx1ZXMpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IHV0aWwuam9pblZhbHVlcyhleHBlY3RlZFZhbHVlcyksXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWm9kTmF0aXZlRW51bV9jYWNoZSwgXCJmXCIpKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ab2ROYXRpdmVFbnVtX2NhY2hlLCBuZXcgU2V0KHV0aWwuZ2V0VmFsaWRFbnVtVmFsdWVzKHRoaXMuX2RlZi52YWx1ZXMpKSwgXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWm9kTmF0aXZlRW51bV9jYWNoZSwgXCJmXCIpLmhhcyhpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSB1dGlsLm9iamVjdFZhbHVlcyhuYXRpdmVFbnVtVmFsdWVzKTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9lbnVtX3ZhbHVlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV4cGVjdGVkVmFsdWVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxuICAgIGdldCBlbnVtKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlcztcbiAgICB9XG59XG5fWm9kTmF0aXZlRW51bV9jYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG5ab2ROYXRpdmVFbnVtLmNyZWF0ZSA9ICh2YWx1ZXMsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTmF0aXZlRW51bSh7XG4gICAgICAgIHZhbHVlczogdmFsdWVzLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE5hdGl2ZUVudW0sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RQcm9taXNlIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnR5cGU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnByb21pc2UgJiZcbiAgICAgICAgICAgIGN0eC5jb21tb24uYXN5bmMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnByb21pc2UsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9taXNpZmllZCA9IGN0eC5wYXJzZWRUeXBlID09PSBab2RQYXJzZWRUeXBlLnByb21pc2VcbiAgICAgICAgICAgID8gY3R4LmRhdGFcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGN0eC5kYXRhKTtcbiAgICAgICAgcmV0dXJuIE9LKHByb21pc2lmaWVkLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZS5wYXJzZUFzeW5jKGRhdGEsIHtcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBlcnJvck1hcDogY3R4LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cblpvZFByb21pc2UuY3JlYXRlID0gKHNjaGVtYSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RQcm9taXNlKHtcbiAgICAgICAgdHlwZTogc2NoZW1hLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFByb21pc2UsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RFZmZlY3RzIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgaW5uZXJUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnNjaGVtYTtcbiAgICB9XG4gICAgc291cmNlVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5zY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHNcbiAgICAgICAgICAgID8gdGhpcy5fZGVmLnNjaGVtYS5zb3VyY2VUeXBlKClcbiAgICAgICAgICAgIDogdGhpcy5fZGVmLnNjaGVtYTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IGVmZmVjdCA9IHRoaXMuX2RlZi5lZmZlY3QgfHwgbnVsbDtcbiAgICAgICAgY29uc3QgY2hlY2tDdHggPSB7XG4gICAgICAgICAgICBhZGRJc3N1ZTogKGFyZykgPT4ge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwgYXJnKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJnLmZhdGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5hYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBwYXRoKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHgucGF0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNoZWNrQ3R4LmFkZElzc3VlID0gY2hlY2tDdHguYWRkSXNzdWUuYmluZChjaGVja0N0eCk7XG4gICAgICAgIGlmIChlZmZlY3QudHlwZSA9PT0gXCJwcmVwcm9jZXNzXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZCA9IGVmZmVjdC50cmFuc2Zvcm0oY3R4LmRhdGEsIGNoZWNrQ3R4KTtcbiAgICAgICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwcm9jZXNzZWQpLnRoZW4oYXN5bmMgKHByb2Nlc3NlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnZhbHVlID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHByb2Nlc3NlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBESVJUWShyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnZhbHVlID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRElSVFkocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMudmFsdWUgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBwcm9jZXNzZWQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBESVJUWShyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMudmFsdWUgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERJUlRZKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZWZmZWN0LnR5cGUgPT09IFwicmVmaW5lbWVudFwiKSB7XG4gICAgICAgICAgICBjb25zdCBleGVjdXRlUmVmaW5lbWVudCA9IChhY2MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBlZmZlY3QucmVmaW5lbWVudChhY2MsIGNoZWNrQ3R4KTtcbiAgICAgICAgICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFzeW5jIHJlZmluZW1lbnQgZW5jb3VudGVyZWQgZHVyaW5nIHN5bmNocm9ub3VzIHBhcnNlIG9wZXJhdGlvbi4gVXNlIC5wYXJzZUFzeW5jIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlubmVyID0gdGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5uZXIuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgaWYgKGlubmVyLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gdmFsdWUgaXMgaWdub3JlZFxuICAgICAgICAgICAgICAgIGV4ZWN1dGVSZWZpbmVtZW50KGlubmVyLnZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGlubmVyLnZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnNjaGVtYVxuICAgICAgICAgICAgICAgICAgICAuX3BhcnNlQXN5bmMoeyBkYXRhOiBjdHguZGF0YSwgcGF0aDogY3R4LnBhdGgsIHBhcmVudDogY3R4IH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChpbm5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXIuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXIuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGVSZWZpbmVtZW50KGlubmVyLnZhbHVlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogaW5uZXIudmFsdWUgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVmZmVjdC50eXBlID09PSBcInRyYW5zZm9ybVwiKSB7XG4gICAgICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlID0gdGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQoYmFzZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGVmZmVjdC50cmFuc2Zvcm0oYmFzZS52YWx1ZSwgY2hlY2tDdHgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXN5bmNocm9ub3VzIHRyYW5zZm9ybSBlbmNvdW50ZXJlZCBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2Ugb3BlcmF0aW9uLiBVc2UgLnBhcnNlQXN5bmMgaW5zdGVhZC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiByZXN1bHQgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWYuc2NoZW1hXG4gICAgICAgICAgICAgICAgICAgIC5fcGFyc2VBc3luYyh7IGRhdGE6IGN0eC5kYXRhLCBwYXRoOiBjdHgucGF0aCwgcGFyZW50OiBjdHggfSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKGJhc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKGJhc2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZWZmZWN0LnRyYW5zZm9ybShiYXNlLnZhbHVlLCBjaGVja0N0eCkpLnRoZW4oKHJlc3VsdCkgPT4gKHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiByZXN1bHQgfSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoZWZmZWN0KTtcbiAgICB9XG59XG5ab2RFZmZlY3RzLmNyZWF0ZSA9IChzY2hlbWEsIGVmZmVjdCwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RFZmZlY3RzKHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMsXG4gICAgICAgIGVmZmVjdCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcblpvZEVmZmVjdHMuY3JlYXRlV2l0aFByZXByb2Nlc3MgPSAocHJlcHJvY2Vzcywgc2NoZW1hLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEVmZmVjdHMoe1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGVmZmVjdDogeyB0eXBlOiBcInByZXByb2Nlc3NcIiwgdHJhbnNmb3JtOiBwcmVwcm9jZXNzIH0sXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRWZmZWN0cyxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZE9wdGlvbmFsIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgPT09IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gT0sodW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2UoaW5wdXQpO1xuICAgIH1cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZE9wdGlvbmFsLmNyZWF0ZSA9ICh0eXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE9wdGlvbmFsKHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9wdGlvbmFsLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kTnVsbGFibGUgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5udWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gT0sobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKGlucHV0KTtcbiAgICB9XG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZTtcbiAgICB9XG59XG5ab2ROdWxsYWJsZS5jcmVhdGUgPSAodHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROdWxsYWJsZSh7XG4gICAgICAgIGlubmVyVHlwZTogdHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROdWxsYWJsZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZERlZmF1bHQgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGxldCBkYXRhID0gY3R4LmRhdGE7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS51bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLl9kZWYuZGVmYXVsdFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKHtcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVtb3ZlRGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGU7XG4gICAgfVxufVxuWm9kRGVmYXVsdC5jcmVhdGUgPSAodHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2REZWZhdWx0KHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZERlZmF1bHQsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdHlwZW9mIHBhcmFtcy5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gcGFyYW1zLmRlZmF1bHRcbiAgICAgICAgICAgIDogKCkgPT4gcGFyYW1zLmRlZmF1bHQsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RDYXRjaCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgLy8gbmV3Q3R4IGlzIHVzZWQgdG8gbm90IGNvbGxlY3QgaXNzdWVzIGZyb20gaW5uZXIgdHlwZXMgaW4gY3R4XG4gICAgICAgIGNvbnN0IG5ld0N0eCA9IHtcbiAgICAgICAgICAgIC4uLmN0eCxcbiAgICAgICAgICAgIGNvbW1vbjoge1xuICAgICAgICAgICAgICAgIC4uLmN0eC5jb21tb24sXG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKHtcbiAgICAgICAgICAgIGRhdGE6IG5ld0N0eC5kYXRhLFxuICAgICAgICAgICAgcGF0aDogbmV3Q3R4LnBhdGgsXG4gICAgICAgICAgICBwYXJlbnQ6IHtcbiAgICAgICAgICAgICAgICAuLi5uZXdDdHgsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGlzQXN5bmMocmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IFwidmFsaWRcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlc3VsdC5zdGF0dXMgPT09IFwidmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyByZXN1bHQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZGVmLmNhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCBlcnJvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBab2RFcnJvcihuZXdDdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogbmV3Q3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogXCJ2YWxpZFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXN1bHQuc3RhdHVzID09PSBcInZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgPyByZXN1bHQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9kZWYuY2F0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgZXJyb3IoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBab2RFcnJvcihuZXdDdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IG5ld0N0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlQ2F0Y2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZENhdGNoLmNyZWF0ZSA9ICh0eXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZENhdGNoKHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZENhdGNoLFxuICAgICAgICBjYXRjaFZhbHVlOiB0eXBlb2YgcGFyYW1zLmNhdGNoID09PSBcImZ1bmN0aW9uXCIgPyBwYXJhbXMuY2F0Y2ggOiAoKSA9PiBwYXJhbXMuY2F0Y2gsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2ROYU4gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5uYW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUubmFuLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBpbnB1dC5kYXRhIH07XG4gICAgfVxufVxuWm9kTmFOLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE5hTih7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTmFOLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY29uc3QgQlJBTkQgPSBTeW1ib2woXCJ6b2RfYnJhbmRcIik7XG5jbGFzcyBab2RCcmFuZGVkIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBkYXRhID0gY3R4LmRhdGE7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZS5fcGFyc2Uoe1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZTtcbiAgICB9XG59XG5jbGFzcyBab2RQaXBlbGluZSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlQXN5bmMgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5SZXN1bHQgPSBhd2FpdCB0aGlzLl9kZWYuaW4uX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpblJlc3VsdC5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBpZiAoaW5SZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBESVJUWShpblJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLm91dC5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBpblJlc3VsdC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGluUmVzdWx0ID0gdGhpcy5fZGVmLmluLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaW5SZXN1bHQuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIGlmIChpblJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIikge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogXCJkaXJ0eVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaW5SZXN1bHQudmFsdWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWYub3V0Ll9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpblJlc3VsdC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGUoYSwgYikge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFBpcGVsaW5lKHtcbiAgICAgICAgICAgIGluOiBhLFxuICAgICAgICAgICAgb3V0OiBiLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RQaXBlbGluZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuY2xhc3MgWm9kUmVhZG9ubHkgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2UoaW5wdXQpO1xuICAgICAgICBjb25zdCBmcmVlemUgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWQoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhLnZhbHVlID0gT2JqZWN0LmZyZWV6ZShkYXRhLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXNBc3luYyhyZXN1bHQpXG4gICAgICAgICAgICA/IHJlc3VsdC50aGVuKChkYXRhKSA9PiBmcmVlemUoZGF0YSkpXG4gICAgICAgICAgICA6IGZyZWV6ZShyZXN1bHQpO1xuICAgIH1cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZFJlYWRvbmx5LmNyZWF0ZSA9ICh0eXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFJlYWRvbmx5KHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFJlYWRvbmx5LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZnVuY3Rpb24gY3VzdG9tKGNoZWNrLCBwYXJhbXMgPSB7fSwgXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKlxuICogUGFzcyBgZmF0YWxgIGludG8gdGhlIHBhcmFtcyBvYmplY3QgaW5zdGVhZDpcbiAqXG4gKiBgYGB0c1xuICogei5zdHJpbmcoKS5jdXN0b20oKHZhbCkgPT4gdmFsLmxlbmd0aCA+IDUsIHsgZmF0YWw6IGZhbHNlIH0pXG4gKiBgYGBcbiAqXG4gKi9cbmZhdGFsKSB7XG4gICAgaWYgKGNoZWNrKVxuICAgICAgICByZXR1cm4gWm9kQW55LmNyZWF0ZSgpLnN1cGVyUmVmaW5lKChkYXRhLCBjdHgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBpZiAoIWNoZWNrKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICA/IHBhcmFtcyhkYXRhKVxuICAgICAgICAgICAgICAgICAgICA6IHR5cGVvZiBwYXJhbXMgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8geyBtZXNzYWdlOiBwYXJhbXMgfVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBwYXJhbXM7XG4gICAgICAgICAgICAgICAgY29uc3QgX2ZhdGFsID0gKF9iID0gKF9hID0gcC5mYXRhbCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmF0YWwpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgcDIgPSB0eXBlb2YgcCA9PT0gXCJzdHJpbmdcIiA/IHsgbWVzc2FnZTogcCB9IDogcDtcbiAgICAgICAgICAgICAgICBjdHguYWRkSXNzdWUoeyBjb2RlOiBcImN1c3RvbVwiLCAuLi5wMiwgZmF0YWw6IF9mYXRhbCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgcmV0dXJuIFpvZEFueS5jcmVhdGUoKTtcbn1cbmNvbnN0IGxhdGUgPSB7XG4gICAgb2JqZWN0OiBab2RPYmplY3QubGF6eWNyZWF0ZSxcbn07XG52YXIgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kO1xuKGZ1bmN0aW9uIChab2RGaXJzdFBhcnR5VHlwZUtpbmQpIHtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RTdHJpbmdcIl0gPSBcIlpvZFN0cmluZ1wiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE51bWJlclwiXSA9IFwiWm9kTnVtYmVyXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTmFOXCJdID0gXCJab2ROYU5cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RCaWdJbnRcIl0gPSBcIlpvZEJpZ0ludFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEJvb2xlYW5cIl0gPSBcIlpvZEJvb2xlYW5cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2REYXRlXCJdID0gXCJab2REYXRlXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kU3ltYm9sXCJdID0gXCJab2RTeW1ib2xcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RVbmRlZmluZWRcIl0gPSBcIlpvZFVuZGVmaW5lZFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE51bGxcIl0gPSBcIlpvZE51bGxcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RBbnlcIl0gPSBcIlpvZEFueVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFVua25vd25cIl0gPSBcIlpvZFVua25vd25cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROZXZlclwiXSA9IFwiWm9kTmV2ZXJcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RWb2lkXCJdID0gXCJab2RWb2lkXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQXJyYXlcIl0gPSBcIlpvZEFycmF5XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kT2JqZWN0XCJdID0gXCJab2RPYmplY3RcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RVbmlvblwiXSA9IFwiWm9kVW5pb25cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2REaXNjcmltaW5hdGVkVW5pb25cIl0gPSBcIlpvZERpc2NyaW1pbmF0ZWRVbmlvblwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEludGVyc2VjdGlvblwiXSA9IFwiWm9kSW50ZXJzZWN0aW9uXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kVHVwbGVcIl0gPSBcIlpvZFR1cGxlXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kUmVjb3JkXCJdID0gXCJab2RSZWNvcmRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RNYXBcIl0gPSBcIlpvZE1hcFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFNldFwiXSA9IFwiWm9kU2V0XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRnVuY3Rpb25cIl0gPSBcIlpvZEZ1bmN0aW9uXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTGF6eVwiXSA9IFwiWm9kTGF6eVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZExpdGVyYWxcIl0gPSBcIlpvZExpdGVyYWxcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RFbnVtXCJdID0gXCJab2RFbnVtXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRWZmZWN0c1wiXSA9IFwiWm9kRWZmZWN0c1wiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE5hdGl2ZUVudW1cIl0gPSBcIlpvZE5hdGl2ZUVudW1cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RPcHRpb25hbFwiXSA9IFwiWm9kT3B0aW9uYWxcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROdWxsYWJsZVwiXSA9IFwiWm9kTnVsbGFibGVcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2REZWZhdWx0XCJdID0gXCJab2REZWZhdWx0XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQ2F0Y2hcIl0gPSBcIlpvZENhdGNoXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kUHJvbWlzZVwiXSA9IFwiWm9kUHJvbWlzZVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEJyYW5kZWRcIl0gPSBcIlpvZEJyYW5kZWRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RQaXBlbGluZVwiXSA9IFwiWm9kUGlwZWxpbmVcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RSZWFkb25seVwiXSA9IFwiWm9kUmVhZG9ubHlcIjtcbn0pKFpvZEZpcnN0UGFydHlUeXBlS2luZCB8fCAoWm9kRmlyc3RQYXJ0eVR5cGVLaW5kID0ge30pKTtcbmNvbnN0IGluc3RhbmNlT2ZUeXBlID0gKFxuLy8gY29uc3QgaW5zdGFuY2VPZlR5cGUgPSA8VCBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueT4oXG5jbHMsIHBhcmFtcyA9IHtcbiAgICBtZXNzYWdlOiBgSW5wdXQgbm90IGluc3RhbmNlIG9mICR7Y2xzLm5hbWV9YCxcbn0pID0+IGN1c3RvbSgoZGF0YSkgPT4gZGF0YSBpbnN0YW5jZW9mIGNscywgcGFyYW1zKTtcbmNvbnN0IHN0cmluZ1R5cGUgPSBab2RTdHJpbmcuY3JlYXRlO1xuY29uc3QgbnVtYmVyVHlwZSA9IFpvZE51bWJlci5jcmVhdGU7XG5jb25zdCBuYW5UeXBlID0gWm9kTmFOLmNyZWF0ZTtcbmNvbnN0IGJpZ0ludFR5cGUgPSBab2RCaWdJbnQuY3JlYXRlO1xuY29uc3QgYm9vbGVhblR5cGUgPSBab2RCb29sZWFuLmNyZWF0ZTtcbmNvbnN0IGRhdGVUeXBlID0gWm9kRGF0ZS5jcmVhdGU7XG5jb25zdCBzeW1ib2xUeXBlID0gWm9kU3ltYm9sLmNyZWF0ZTtcbmNvbnN0IHVuZGVmaW5lZFR5cGUgPSBab2RVbmRlZmluZWQuY3JlYXRlO1xuY29uc3QgbnVsbFR5cGUgPSBab2ROdWxsLmNyZWF0ZTtcbmNvbnN0IGFueVR5cGUgPSBab2RBbnkuY3JlYXRlO1xuY29uc3QgdW5rbm93blR5cGUgPSBab2RVbmtub3duLmNyZWF0ZTtcbmNvbnN0IG5ldmVyVHlwZSA9IFpvZE5ldmVyLmNyZWF0ZTtcbmNvbnN0IHZvaWRUeXBlID0gWm9kVm9pZC5jcmVhdGU7XG5jb25zdCBhcnJheVR5cGUgPSBab2RBcnJheS5jcmVhdGU7XG5jb25zdCBvYmplY3RUeXBlID0gWm9kT2JqZWN0LmNyZWF0ZTtcbmNvbnN0IHN0cmljdE9iamVjdFR5cGUgPSBab2RPYmplY3Quc3RyaWN0Q3JlYXRlO1xuY29uc3QgdW5pb25UeXBlID0gWm9kVW5pb24uY3JlYXRlO1xuY29uc3QgZGlzY3JpbWluYXRlZFVuaW9uVHlwZSA9IFpvZERpc2NyaW1pbmF0ZWRVbmlvbi5jcmVhdGU7XG5jb25zdCBpbnRlcnNlY3Rpb25UeXBlID0gWm9kSW50ZXJzZWN0aW9uLmNyZWF0ZTtcbmNvbnN0IHR1cGxlVHlwZSA9IFpvZFR1cGxlLmNyZWF0ZTtcbmNvbnN0IHJlY29yZFR5cGUgPSBab2RSZWNvcmQuY3JlYXRlO1xuY29uc3QgbWFwVHlwZSA9IFpvZE1hcC5jcmVhdGU7XG5jb25zdCBzZXRUeXBlID0gWm9kU2V0LmNyZWF0ZTtcbmNvbnN0IGZ1bmN0aW9uVHlwZSA9IFpvZEZ1bmN0aW9uLmNyZWF0ZTtcbmNvbnN0IGxhenlUeXBlID0gWm9kTGF6eS5jcmVhdGU7XG5jb25zdCBsaXRlcmFsVHlwZSA9IFpvZExpdGVyYWwuY3JlYXRlO1xuY29uc3QgZW51bVR5cGUgPSBab2RFbnVtLmNyZWF0ZTtcbmNvbnN0IG5hdGl2ZUVudW1UeXBlID0gWm9kTmF0aXZlRW51bS5jcmVhdGU7XG5jb25zdCBwcm9taXNlVHlwZSA9IFpvZFByb21pc2UuY3JlYXRlO1xuY29uc3QgZWZmZWN0c1R5cGUgPSBab2RFZmZlY3RzLmNyZWF0ZTtcbmNvbnN0IG9wdGlvbmFsVHlwZSA9IFpvZE9wdGlvbmFsLmNyZWF0ZTtcbmNvbnN0IG51bGxhYmxlVHlwZSA9IFpvZE51bGxhYmxlLmNyZWF0ZTtcbmNvbnN0IHByZXByb2Nlc3NUeXBlID0gWm9kRWZmZWN0cy5jcmVhdGVXaXRoUHJlcHJvY2VzcztcbmNvbnN0IHBpcGVsaW5lVHlwZSA9IFpvZFBpcGVsaW5lLmNyZWF0ZTtcbmNvbnN0IG9zdHJpbmcgPSAoKSA9PiBzdHJpbmdUeXBlKCkub3B0aW9uYWwoKTtcbmNvbnN0IG9udW1iZXIgPSAoKSA9PiBudW1iZXJUeXBlKCkub3B0aW9uYWwoKTtcbmNvbnN0IG9ib29sZWFuID0gKCkgPT4gYm9vbGVhblR5cGUoKS5vcHRpb25hbCgpO1xuY29uc3QgY29lcmNlID0ge1xuICAgIHN0cmluZzogKChhcmcpID0+IFpvZFN0cmluZy5jcmVhdGUoeyAuLi5hcmcsIGNvZXJjZTogdHJ1ZSB9KSksXG4gICAgbnVtYmVyOiAoKGFyZykgPT4gWm9kTnVtYmVyLmNyZWF0ZSh7IC4uLmFyZywgY29lcmNlOiB0cnVlIH0pKSxcbiAgICBib29sZWFuOiAoKGFyZykgPT4gWm9kQm9vbGVhbi5jcmVhdGUoe1xuICAgICAgICAuLi5hcmcsXG4gICAgICAgIGNvZXJjZTogdHJ1ZSxcbiAgICB9KSksXG4gICAgYmlnaW50OiAoKGFyZykgPT4gWm9kQmlnSW50LmNyZWF0ZSh7IC4uLmFyZywgY29lcmNlOiB0cnVlIH0pKSxcbiAgICBkYXRlOiAoKGFyZykgPT4gWm9kRGF0ZS5jcmVhdGUoeyAuLi5hcmcsIGNvZXJjZTogdHJ1ZSB9KSksXG59O1xuY29uc3QgTkVWRVIgPSBJTlZBTElEO1xuXG52YXIgeiA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZGVmYXVsdEVycm9yTWFwOiBlcnJvck1hcCxcbiAgICBzZXRFcnJvck1hcDogc2V0RXJyb3JNYXAsXG4gICAgZ2V0RXJyb3JNYXA6IGdldEVycm9yTWFwLFxuICAgIG1ha2VJc3N1ZTogbWFrZUlzc3VlLFxuICAgIEVNUFRZX1BBVEg6IEVNUFRZX1BBVEgsXG4gICAgYWRkSXNzdWVUb0NvbnRleHQ6IGFkZElzc3VlVG9Db250ZXh0LFxuICAgIFBhcnNlU3RhdHVzOiBQYXJzZVN0YXR1cyxcbiAgICBJTlZBTElEOiBJTlZBTElELFxuICAgIERJUlRZOiBESVJUWSxcbiAgICBPSzogT0ssXG4gICAgaXNBYm9ydGVkOiBpc0Fib3J0ZWQsXG4gICAgaXNEaXJ0eTogaXNEaXJ0eSxcbiAgICBpc1ZhbGlkOiBpc1ZhbGlkLFxuICAgIGlzQXN5bmM6IGlzQXN5bmMsXG4gICAgZ2V0IHV0aWwgKCkgeyByZXR1cm4gdXRpbDsgfSxcbiAgICBnZXQgb2JqZWN0VXRpbCAoKSB7IHJldHVybiBvYmplY3RVdGlsOyB9LFxuICAgIFpvZFBhcnNlZFR5cGU6IFpvZFBhcnNlZFR5cGUsXG4gICAgZ2V0UGFyc2VkVHlwZTogZ2V0UGFyc2VkVHlwZSxcbiAgICBab2RUeXBlOiBab2RUeXBlLFxuICAgIGRhdGV0aW1lUmVnZXg6IGRhdGV0aW1lUmVnZXgsXG4gICAgWm9kU3RyaW5nOiBab2RTdHJpbmcsXG4gICAgWm9kTnVtYmVyOiBab2ROdW1iZXIsXG4gICAgWm9kQmlnSW50OiBab2RCaWdJbnQsXG4gICAgWm9kQm9vbGVhbjogWm9kQm9vbGVhbixcbiAgICBab2REYXRlOiBab2REYXRlLFxuICAgIFpvZFN5bWJvbDogWm9kU3ltYm9sLFxuICAgIFpvZFVuZGVmaW5lZDogWm9kVW5kZWZpbmVkLFxuICAgIFpvZE51bGw6IFpvZE51bGwsXG4gICAgWm9kQW55OiBab2RBbnksXG4gICAgWm9kVW5rbm93bjogWm9kVW5rbm93bixcbiAgICBab2ROZXZlcjogWm9kTmV2ZXIsXG4gICAgWm9kVm9pZDogWm9kVm9pZCxcbiAgICBab2RBcnJheTogWm9kQXJyYXksXG4gICAgWm9kT2JqZWN0OiBab2RPYmplY3QsXG4gICAgWm9kVW5pb246IFpvZFVuaW9uLFxuICAgIFpvZERpc2NyaW1pbmF0ZWRVbmlvbjogWm9kRGlzY3JpbWluYXRlZFVuaW9uLFxuICAgIFpvZEludGVyc2VjdGlvbjogWm9kSW50ZXJzZWN0aW9uLFxuICAgIFpvZFR1cGxlOiBab2RUdXBsZSxcbiAgICBab2RSZWNvcmQ6IFpvZFJlY29yZCxcbiAgICBab2RNYXA6IFpvZE1hcCxcbiAgICBab2RTZXQ6IFpvZFNldCxcbiAgICBab2RGdW5jdGlvbjogWm9kRnVuY3Rpb24sXG4gICAgWm9kTGF6eTogWm9kTGF6eSxcbiAgICBab2RMaXRlcmFsOiBab2RMaXRlcmFsLFxuICAgIFpvZEVudW06IFpvZEVudW0sXG4gICAgWm9kTmF0aXZlRW51bTogWm9kTmF0aXZlRW51bSxcbiAgICBab2RQcm9taXNlOiBab2RQcm9taXNlLFxuICAgIFpvZEVmZmVjdHM6IFpvZEVmZmVjdHMsXG4gICAgWm9kVHJhbnNmb3JtZXI6IFpvZEVmZmVjdHMsXG4gICAgWm9kT3B0aW9uYWw6IFpvZE9wdGlvbmFsLFxuICAgIFpvZE51bGxhYmxlOiBab2ROdWxsYWJsZSxcbiAgICBab2REZWZhdWx0OiBab2REZWZhdWx0LFxuICAgIFpvZENhdGNoOiBab2RDYXRjaCxcbiAgICBab2ROYU46IFpvZE5hTixcbiAgICBCUkFORDogQlJBTkQsXG4gICAgWm9kQnJhbmRlZDogWm9kQnJhbmRlZCxcbiAgICBab2RQaXBlbGluZTogWm9kUGlwZWxpbmUsXG4gICAgWm9kUmVhZG9ubHk6IFpvZFJlYWRvbmx5LFxuICAgIGN1c3RvbTogY3VzdG9tLFxuICAgIFNjaGVtYTogWm9kVHlwZSxcbiAgICBab2RTY2hlbWE6IFpvZFR5cGUsXG4gICAgbGF0ZTogbGF0ZSxcbiAgICBnZXQgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kICgpIHsgcmV0dXJuIFpvZEZpcnN0UGFydHlUeXBlS2luZDsgfSxcbiAgICBjb2VyY2U6IGNvZXJjZSxcbiAgICBhbnk6IGFueVR5cGUsXG4gICAgYXJyYXk6IGFycmF5VHlwZSxcbiAgICBiaWdpbnQ6IGJpZ0ludFR5cGUsXG4gICAgYm9vbGVhbjogYm9vbGVhblR5cGUsXG4gICAgZGF0ZTogZGF0ZVR5cGUsXG4gICAgZGlzY3JpbWluYXRlZFVuaW9uOiBkaXNjcmltaW5hdGVkVW5pb25UeXBlLFxuICAgIGVmZmVjdDogZWZmZWN0c1R5cGUsXG4gICAgJ2VudW0nOiBlbnVtVHlwZSxcbiAgICAnZnVuY3Rpb24nOiBmdW5jdGlvblR5cGUsXG4gICAgJ2luc3RhbmNlb2YnOiBpbnN0YW5jZU9mVHlwZSxcbiAgICBpbnRlcnNlY3Rpb246IGludGVyc2VjdGlvblR5cGUsXG4gICAgbGF6eTogbGF6eVR5cGUsXG4gICAgbGl0ZXJhbDogbGl0ZXJhbFR5cGUsXG4gICAgbWFwOiBtYXBUeXBlLFxuICAgIG5hbjogbmFuVHlwZSxcbiAgICBuYXRpdmVFbnVtOiBuYXRpdmVFbnVtVHlwZSxcbiAgICBuZXZlcjogbmV2ZXJUeXBlLFxuICAgICdudWxsJzogbnVsbFR5cGUsXG4gICAgbnVsbGFibGU6IG51bGxhYmxlVHlwZSxcbiAgICBudW1iZXI6IG51bWJlclR5cGUsXG4gICAgb2JqZWN0OiBvYmplY3RUeXBlLFxuICAgIG9ib29sZWFuOiBvYm9vbGVhbixcbiAgICBvbnVtYmVyOiBvbnVtYmVyLFxuICAgIG9wdGlvbmFsOiBvcHRpb25hbFR5cGUsXG4gICAgb3N0cmluZzogb3N0cmluZyxcbiAgICBwaXBlbGluZTogcGlwZWxpbmVUeXBlLFxuICAgIHByZXByb2Nlc3M6IHByZXByb2Nlc3NUeXBlLFxuICAgIHByb21pc2U6IHByb21pc2VUeXBlLFxuICAgIHJlY29yZDogcmVjb3JkVHlwZSxcbiAgICBzZXQ6IHNldFR5cGUsXG4gICAgc3RyaWN0T2JqZWN0OiBzdHJpY3RPYmplY3RUeXBlLFxuICAgIHN0cmluZzogc3RyaW5nVHlwZSxcbiAgICBzeW1ib2w6IHN5bWJvbFR5cGUsXG4gICAgdHJhbnNmb3JtZXI6IGVmZmVjdHNUeXBlLFxuICAgIHR1cGxlOiB0dXBsZVR5cGUsXG4gICAgJ3VuZGVmaW5lZCc6IHVuZGVmaW5lZFR5cGUsXG4gICAgdW5pb246IHVuaW9uVHlwZSxcbiAgICB1bmtub3duOiB1bmtub3duVHlwZSxcbiAgICAndm9pZCc6IHZvaWRUeXBlLFxuICAgIE5FVkVSOiBORVZFUixcbiAgICBab2RJc3N1ZUNvZGU6IFpvZElzc3VlQ29kZSxcbiAgICBxdW90ZWxlc3NKc29uOiBxdW90ZWxlc3NKc29uLFxuICAgIFpvZEVycm9yOiBab2RFcnJvclxufSk7XG5cbmV4cG9ydCB7IEJSQU5ELCBESVJUWSwgRU1QVFlfUEFUSCwgSU5WQUxJRCwgTkVWRVIsIE9LLCBQYXJzZVN0YXR1cywgWm9kVHlwZSBhcyBTY2hlbWEsIFpvZEFueSwgWm9kQXJyYXksIFpvZEJpZ0ludCwgWm9kQm9vbGVhbiwgWm9kQnJhbmRlZCwgWm9kQ2F0Y2gsIFpvZERhdGUsIFpvZERlZmF1bHQsIFpvZERpc2NyaW1pbmF0ZWRVbmlvbiwgWm9kRWZmZWN0cywgWm9kRW51bSwgWm9kRXJyb3IsIFpvZEZpcnN0UGFydHlUeXBlS2luZCwgWm9kRnVuY3Rpb24sIFpvZEludGVyc2VjdGlvbiwgWm9kSXNzdWVDb2RlLCBab2RMYXp5LCBab2RMaXRlcmFsLCBab2RNYXAsIFpvZE5hTiwgWm9kTmF0aXZlRW51bSwgWm9kTmV2ZXIsIFpvZE51bGwsIFpvZE51bGxhYmxlLCBab2ROdW1iZXIsIFpvZE9iamVjdCwgWm9kT3B0aW9uYWwsIFpvZFBhcnNlZFR5cGUsIFpvZFBpcGVsaW5lLCBab2RQcm9taXNlLCBab2RSZWFkb25seSwgWm9kUmVjb3JkLCBab2RUeXBlIGFzIFpvZFNjaGVtYSwgWm9kU2V0LCBab2RTdHJpbmcsIFpvZFN5bWJvbCwgWm9kRWZmZWN0cyBhcyBab2RUcmFuc2Zvcm1lciwgWm9kVHVwbGUsIFpvZFR5cGUsIFpvZFVuZGVmaW5lZCwgWm9kVW5pb24sIFpvZFVua25vd24sIFpvZFZvaWQsIGFkZElzc3VlVG9Db250ZXh0LCBhbnlUeXBlIGFzIGFueSwgYXJyYXlUeXBlIGFzIGFycmF5LCBiaWdJbnRUeXBlIGFzIGJpZ2ludCwgYm9vbGVhblR5cGUgYXMgYm9vbGVhbiwgY29lcmNlLCBjdXN0b20sIGRhdGVUeXBlIGFzIGRhdGUsIGRhdGV0aW1lUmVnZXgsIHogYXMgZGVmYXVsdCwgZXJyb3JNYXAgYXMgZGVmYXVsdEVycm9yTWFwLCBkaXNjcmltaW5hdGVkVW5pb25UeXBlIGFzIGRpc2NyaW1pbmF0ZWRVbmlvbiwgZWZmZWN0c1R5cGUgYXMgZWZmZWN0LCBlbnVtVHlwZSBhcyBlbnVtLCBmdW5jdGlvblR5cGUgYXMgZnVuY3Rpb24sIGdldEVycm9yTWFwLCBnZXRQYXJzZWRUeXBlLCBpbnN0YW5jZU9mVHlwZSBhcyBpbnN0YW5jZW9mLCBpbnRlcnNlY3Rpb25UeXBlIGFzIGludGVyc2VjdGlvbiwgaXNBYm9ydGVkLCBpc0FzeW5jLCBpc0RpcnR5LCBpc1ZhbGlkLCBsYXRlLCBsYXp5VHlwZSBhcyBsYXp5LCBsaXRlcmFsVHlwZSBhcyBsaXRlcmFsLCBtYWtlSXNzdWUsIG1hcFR5cGUgYXMgbWFwLCBuYW5UeXBlIGFzIG5hbiwgbmF0aXZlRW51bVR5cGUgYXMgbmF0aXZlRW51bSwgbmV2ZXJUeXBlIGFzIG5ldmVyLCBudWxsVHlwZSBhcyBudWxsLCBudWxsYWJsZVR5cGUgYXMgbnVsbGFibGUsIG51bWJlclR5cGUgYXMgbnVtYmVyLCBvYmplY3RUeXBlIGFzIG9iamVjdCwgb2JqZWN0VXRpbCwgb2Jvb2xlYW4sIG9udW1iZXIsIG9wdGlvbmFsVHlwZSBhcyBvcHRpb25hbCwgb3N0cmluZywgcGlwZWxpbmVUeXBlIGFzIHBpcGVsaW5lLCBwcmVwcm9jZXNzVHlwZSBhcyBwcmVwcm9jZXNzLCBwcm9taXNlVHlwZSBhcyBwcm9taXNlLCBxdW90ZWxlc3NKc29uLCByZWNvcmRUeXBlIGFzIHJlY29yZCwgc2V0VHlwZSBhcyBzZXQsIHNldEVycm9yTWFwLCBzdHJpY3RPYmplY3RUeXBlIGFzIHN0cmljdE9iamVjdCwgc3RyaW5nVHlwZSBhcyBzdHJpbmcsIHN5bWJvbFR5cGUgYXMgc3ltYm9sLCBlZmZlY3RzVHlwZSBhcyB0cmFuc2Zvcm1lciwgdHVwbGVUeXBlIGFzIHR1cGxlLCB1bmRlZmluZWRUeXBlIGFzIHVuZGVmaW5lZCwgdW5pb25UeXBlIGFzIHVuaW9uLCB1bmtub3duVHlwZSBhcyB1bmtub3duLCB1dGlsLCB2b2lkVHlwZSBhcyB2b2lkLCB6IH07XG4iLCJpbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5leHBvcnQgY29uc3QgQm9vayA9IHoudW5pb24oW1xuXHR6LmxpdGVyYWwoXCJwdVwiKSxcblx0ei5saXRlcmFsKFwia3Ugc3VsaVwiKSxcblx0ei5saXRlcmFsKFwia3UgbGlsaVwiKSxcblx0ei5saXRlcmFsKFwibm9uZVwiKSxcbl0pO1xuZXhwb3J0IHR5cGUgQm9vayA9IHouaW5mZXI8dHlwZW9mIEJvb2s+O1xuXG5leHBvcnQgY29uc3QgQ29pbmVkRXJhID0gei51bmlvbihbei5saXRlcmFsKFwicHJlLXB1XCIpLCB6LmxpdGVyYWwoXCJwb3N0LXB1XCIpLCB6LmxpdGVyYWwoXCJwb3N0LWt1XCIpXSk7XG5leHBvcnQgdHlwZSBDb2luZWRFcmEgPSB6LmluZmVyPHR5cGVvZiBDb2luZWRFcmE+O1xuXG5leHBvcnQgY29uc3QgVXNhZ2VDYXRlZ29yeSA9IHoudW5pb24oW1xuXHR6LmxpdGVyYWwoXCJjb3JlXCIpLFxuXHR6LmxpdGVyYWwoXCJjb21tb25cIiksXG5cdHoubGl0ZXJhbChcInVuY29tbW9uXCIpLFxuXHR6LmxpdGVyYWwoXCJvYnNjdXJlXCIpLFxuXHR6LmxpdGVyYWwoXCJzYW5kYm94XCIpLFxuXSk7XG5leHBvcnQgdHlwZSBVc2FnZUNhdGVnb3J5ID0gei5pbmZlcjx0eXBlb2YgVXNhZ2VDYXRlZ29yeT47XG5cbmV4cG9ydCBjb25zdCBXcml0aW5nU3lzdGVtID0gei5lbnVtKFtcblx0XCJzaXRlbGVuIHBvbmFcIixcblx0XCJzaXRlbGVuIHNpdGVsZW5cIixcblx0XCJhbHBoYWJldFwiLFxuXHRcInN5bGxhYmFyeVwiLFxuXHRcImxvZ29ncmFwaHlcIixcblx0XCJ0b2tpcG9uaWRvIGFscGhhYmV0XCIsXG5cdFwidG9raXBvbmlkbyBzeWxsYWJhcnlcIixcblx0XCJ0b2tpcG9uaWRvIGxvZ29ncmFwaHlcIixcbl0pO1xuZXhwb3J0IHR5cGUgV3JpdGluZ1N5c3RlbSA9IHouaW5mZXI8dHlwZW9mIFdyaXRpbmdTeXN0ZW0+O1xuXG5leHBvcnQgdHlwZSAqIGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2xhdGVkRGF0YTxcblx0T2JqIGV4dGVuZHMgeyB0cmFuc2xhdGlvbnM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gfSxcblx0S2V5IGV4dGVuZHMga2V5b2YgT2JqW1widHJhbnNsYXRpb25zXCJdW3N0cmluZ10sXG4+KGRhdGE6IE9iaiwga2V5OiBLZXksIGxhbmd1YWdlOiBzdHJpbmcpOiBPYmpbXCJ0cmFuc2xhdGlvbnNcIl1bc3RyaW5nXVtLZXldIHtcblx0cmV0dXJuICgoZGF0YS50cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdID8/IGRhdGEudHJhbnNsYXRpb25zW1wiZW5cIl0hKSBhcyBPYmpbXCJ0cmFuc2xhdGlvbnNcIl1bc3RyaW5nXSlbXG5cdFx0a2V5XG5cdF07XG59XG4iXSwibmFtZXMiOlsidXRpbCIsInZhbCIsImFzc2VydElzIiwiX2FyZyIsImFzc2VydE5ldmVyIiwiX3giLCJpdGVtcyIsIm9iaiIsIml0ZW0iLCJ2YWxpZEtleXMiLCJrIiwiZmlsdGVyZWQiLCJlIiwib2JqZWN0Iiwia2V5cyIsImtleSIsImFyciIsImNoZWNrZXIiLCJqb2luVmFsdWVzIiwiYXJyYXkiLCJzZXBhcmF0b3IiLCJfIiwidmFsdWUiLCJvYmplY3RVdGlsIiwiZmlyc3QiLCJzZWNvbmQiLCJab2RQYXJzZWRUeXBlIiwiZ2V0UGFyc2VkVHlwZSIsImRhdGEiLCJab2RJc3N1ZUNvZGUiLCJxdW90ZWxlc3NKc29uIiwiWm9kRXJyb3IiLCJpc3N1ZXMiLCJzdWIiLCJzdWJzIiwiYWN0dWFsUHJvdG8iLCJfbWFwcGVyIiwibWFwcGVyIiwiaXNzdWUiLCJmaWVsZEVycm9ycyIsInByb2Nlc3NFcnJvciIsImVycm9yIiwiY3VyciIsImkiLCJlbCIsImZvcm1FcnJvcnMiLCJlcnJvck1hcCIsIl9jdHgiLCJtZXNzYWdlIiwib3ZlcnJpZGVFcnJvck1hcCIsInNldEVycm9yTWFwIiwibWFwIiwiZ2V0RXJyb3JNYXAiLCJtYWtlSXNzdWUiLCJwYXJhbXMiLCJwYXRoIiwiZXJyb3JNYXBzIiwiaXNzdWVEYXRhIiwiZnVsbFBhdGgiLCJmdWxsSXNzdWUiLCJlcnJvck1lc3NhZ2UiLCJtYXBzIiwibSIsIkVNUFRZX1BBVEgiLCJhZGRJc3N1ZVRvQ29udGV4dCIsImN0eCIsIm92ZXJyaWRlTWFwIiwieCIsIlBhcnNlU3RhdHVzIiwic3RhdHVzIiwicmVzdWx0cyIsImFycmF5VmFsdWUiLCJzIiwiSU5WQUxJRCIsInBhaXJzIiwic3luY1BhaXJzIiwicGFpciIsImZpbmFsT2JqZWN0IiwiRElSVFkiLCJPSyIsImlzQWJvcnRlZCIsImlzRGlydHkiLCJpc1ZhbGlkIiwiaXNBc3luYyIsIl9fY2xhc3NQcml2YXRlRmllbGRHZXQiLCJyZWNlaXZlciIsInN0YXRlIiwia2luZCIsImYiLCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IiwiZXJyb3JVdGlsIiwiX1pvZEVudW1fY2FjaGUiLCJfWm9kTmF0aXZlRW51bV9jYWNoZSIsIlBhcnNlSW5wdXRMYXp5UGF0aCIsInBhcmVudCIsImhhbmRsZVJlc3VsdCIsInJlc3VsdCIsInByb2Nlc3NDcmVhdGVQYXJhbXMiLCJpbnZhbGlkX3R5cGVfZXJyb3IiLCJyZXF1aXJlZF9lcnJvciIsImRlc2NyaXB0aW9uIiwiaXNzIiwiX2EiLCJfYiIsIlpvZFR5cGUiLCJkZWYiLCJpbnB1dCIsIm1heWJlQXN5bmNSZXN1bHQiLCJjaGVjayIsImdldElzc3VlUHJvcGVydGllcyIsInNldEVycm9yIiwicmVmaW5lbWVudERhdGEiLCJyZWZpbmVtZW50IiwiWm9kRWZmZWN0cyIsIlpvZEZpcnN0UGFydHlUeXBlS2luZCIsIlpvZE9wdGlvbmFsIiwiWm9kTnVsbGFibGUiLCJab2RBcnJheSIsIlpvZFByb21pc2UiLCJvcHRpb24iLCJab2RVbmlvbiIsImluY29taW5nIiwiWm9kSW50ZXJzZWN0aW9uIiwidHJhbnNmb3JtIiwiZGVmYXVsdFZhbHVlRnVuYyIsIlpvZERlZmF1bHQiLCJab2RCcmFuZGVkIiwiY2F0Y2hWYWx1ZUZ1bmMiLCJab2RDYXRjaCIsIlRoaXMiLCJ0YXJnZXQiLCJab2RQaXBlbGluZSIsIlpvZFJlYWRvbmx5IiwiY3VpZFJlZ2V4IiwiY3VpZDJSZWdleCIsInVsaWRSZWdleCIsInV1aWRSZWdleCIsIm5hbm9pZFJlZ2V4IiwiZHVyYXRpb25SZWdleCIsImVtYWlsUmVnZXgiLCJfZW1vamlSZWdleCIsImVtb2ppUmVnZXgiLCJpcHY0UmVnZXgiLCJpcHY2UmVnZXgiLCJiYXNlNjRSZWdleCIsImRhdGVSZWdleFNvdXJjZSIsImRhdGVSZWdleCIsInRpbWVSZWdleFNvdXJjZSIsImFyZ3MiLCJyZWdleCIsInRpbWVSZWdleCIsImRhdGV0aW1lUmVnZXgiLCJvcHRzIiwiaXNWYWxpZElQIiwiaXAiLCJ2ZXJzaW9uIiwiWm9kU3RyaW5nIiwidG9vQmlnIiwidG9vU21hbGwiLCJ2YWxpZGF0aW9uIiwib3B0aW9ucyIsIm1pbkxlbmd0aCIsIm1heExlbmd0aCIsImxlbiIsImNoIiwibWluIiwibWF4IiwiZmxvYXRTYWZlUmVtYWluZGVyIiwic3RlcCIsInZhbERlY0NvdW50Iiwic3RlcERlY0NvdW50IiwiZGVjQ291bnQiLCJ2YWxJbnQiLCJzdGVwSW50IiwiWm9kTnVtYmVyIiwiaW5jbHVzaXZlIiwiWm9kQmlnSW50IiwiWm9kQm9vbGVhbiIsIlpvZERhdGUiLCJtaW5EYXRlIiwibWF4RGF0ZSIsIlpvZFN5bWJvbCIsIlpvZFVuZGVmaW5lZCIsIlpvZE51bGwiLCJab2RBbnkiLCJab2RVbmtub3duIiwiWm9kTmV2ZXIiLCJab2RWb2lkIiwic2NoZW1hIiwiZGVlcFBhcnRpYWxpZnkiLCJab2RPYmplY3QiLCJuZXdTaGFwZSIsImZpZWxkU2NoZW1hIiwiWm9kVHVwbGUiLCJzaGFwZSIsInNoYXBlS2V5cyIsImV4dHJhS2V5cyIsImtleVZhbGlkYXRvciIsInVua25vd25LZXlzIiwiY2F0Y2hhbGwiLCJfYyIsIl9kIiwiZGVmYXVsdEVycm9yIiwiYXVnbWVudGF0aW9uIiwibWVyZ2luZyIsImluZGV4IiwibWFzayIsIm5ld0ZpZWxkIiwiY3JlYXRlWm9kRW51bSIsImhhbmRsZVJlc3VsdHMiLCJ1bmlvbkVycm9ycyIsImNoaWxkQ3R4IiwiZGlydHkiLCJ0eXBlcyIsImdldERpc2NyaW1pbmF0b3IiLCJ0eXBlIiwiWm9kTGF6eSIsIlpvZExpdGVyYWwiLCJab2RFbnVtIiwiWm9kTmF0aXZlRW51bSIsIlpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsImRpc2NyaW1pbmF0b3IiLCJkaXNjcmltaW5hdG9yVmFsdWUiLCJvcHRpb25zTWFwIiwiZGlzY3JpbWluYXRvclZhbHVlcyIsIm1lcmdlVmFsdWVzIiwiYSIsImIiLCJhVHlwZSIsImJUeXBlIiwiYktleXMiLCJzaGFyZWRLZXlzIiwibmV3T2JqIiwic2hhcmVkVmFsdWUiLCJuZXdBcnJheSIsIml0ZW1BIiwiaXRlbUIiLCJoYW5kbGVQYXJzZWQiLCJwYXJzZWRMZWZ0IiwicGFyc2VkUmlnaHQiLCJtZXJnZWQiLCJsZWZ0IiwicmlnaHQiLCJpdGVtSW5kZXgiLCJyZXN0Iiwic2NoZW1hcyIsIlpvZFJlY29yZCIsImtleVR5cGUiLCJ2YWx1ZVR5cGUiLCJ0aGlyZCIsIlpvZE1hcCIsImZpbmFsTWFwIiwiWm9kU2V0IiwiZmluYWxpemVTZXQiLCJlbGVtZW50cyIsInBhcnNlZFNldCIsImVsZW1lbnQiLCJtaW5TaXplIiwibWF4U2l6ZSIsInNpemUiLCJab2RGdW5jdGlvbiIsIm1ha2VBcmdzSXNzdWUiLCJtYWtlUmV0dXJuc0lzc3VlIiwicmV0dXJucyIsImZuIiwibWUiLCJwYXJzZWRBcmdzIiwicGFyc2VkUmV0dXJucyIsInJldHVyblR5cGUiLCJmdW5jIiwiZ2V0dGVyIiwidmFsdWVzIiwiZXhwZWN0ZWRWYWx1ZXMiLCJlbnVtVmFsdWVzIiwibmV3RGVmIiwib3B0IiwibmF0aXZlRW51bVZhbHVlcyIsInByb21pc2lmaWVkIiwiZWZmZWN0IiwiY2hlY2tDdHgiLCJhcmciLCJwcm9jZXNzZWQiLCJleGVjdXRlUmVmaW5lbWVudCIsImFjYyIsImlubmVyIiwiYmFzZSIsInByZXByb2Nlc3MiLCJuZXdDdHgiLCJab2ROYU4iLCJCUkFORCIsImluUmVzdWx0IiwiZnJlZXplIiwiY3VzdG9tIiwiZmF0YWwiLCJwIiwiX2ZhdGFsIiwicDIiLCJsYXRlIiwiaW5zdGFuY2VPZlR5cGUiLCJjbHMiLCJzdHJpbmdUeXBlIiwibnVtYmVyVHlwZSIsIm5hblR5cGUiLCJiaWdJbnRUeXBlIiwiYm9vbGVhblR5cGUiLCJkYXRlVHlwZSIsInN5bWJvbFR5cGUiLCJ1bmRlZmluZWRUeXBlIiwibnVsbFR5cGUiLCJhbnlUeXBlIiwidW5rbm93blR5cGUiLCJuZXZlclR5cGUiLCJ2b2lkVHlwZSIsImFycmF5VHlwZSIsIm9iamVjdFR5cGUiLCJzdHJpY3RPYmplY3RUeXBlIiwidW5pb25UeXBlIiwiZGlzY3JpbWluYXRlZFVuaW9uVHlwZSIsImludGVyc2VjdGlvblR5cGUiLCJ0dXBsZVR5cGUiLCJyZWNvcmRUeXBlIiwibWFwVHlwZSIsInNldFR5cGUiLCJmdW5jdGlvblR5cGUiLCJsYXp5VHlwZSIsImxpdGVyYWxUeXBlIiwiZW51bVR5cGUiLCJuYXRpdmVFbnVtVHlwZSIsInByb21pc2VUeXBlIiwiZWZmZWN0c1R5cGUiLCJvcHRpb25hbFR5cGUiLCJudWxsYWJsZVR5cGUiLCJwcmVwcm9jZXNzVHlwZSIsInBpcGVsaW5lVHlwZSIsIm9zdHJpbmciLCJvbnVtYmVyIiwib2Jvb2xlYW4iLCJjb2VyY2UiLCJORVZFUiIsInoiLCJCb29rIiwiQ29pbmVkRXJhIiwiVXNhZ2VDYXRlZ29yeSIsIldyaXRpbmdTeXN0ZW0iLCJnZXRUcmFuc2xhdGVkRGF0YSIsImxhbmd1YWdlIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFJQTtBQUFBLENBQ0gsU0FBVUEsR0FBTTtBQUNiLEVBQUFBLEVBQUssY0FBYyxDQUFDQyxNQUFRQTtBQUM1QixXQUFTQyxFQUFTQyxHQUFNO0FBQUEsRUFBRztBQUMzQixFQUFBSCxFQUFLLFdBQVdFO0FBQ2hCLFdBQVNFLEVBQVlDLEdBQUk7QUFDckIsVUFBTSxJQUFJLE1BQUs7QUFBQSxFQUNsQjtBQUNELEVBQUFMLEVBQUssY0FBY0ksR0FDbkJKLEVBQUssY0FBYyxDQUFDTSxNQUFVO0FBQzFCLFVBQU1DLElBQU0sQ0FBQTtBQUNaLGVBQVdDLEtBQVFGO0FBQ2YsTUFBQUMsRUFBSUMsQ0FBSSxJQUFJQTtBQUVoQixXQUFPRDtBQUFBLEVBQ2YsR0FDSVAsRUFBSyxxQkFBcUIsQ0FBQ08sTUFBUTtBQUMvQixVQUFNRSxJQUFZVCxFQUFLLFdBQVdPLENBQUcsRUFBRSxPQUFPLENBQUNHLE1BQU0sT0FBT0gsRUFBSUEsRUFBSUcsQ0FBQyxDQUFDLEtBQU0sUUFBUSxHQUM5RUMsSUFBVyxDQUFBO0FBQ2pCLGVBQVdELEtBQUtEO0FBQ1osTUFBQUUsRUFBU0QsQ0FBQyxJQUFJSCxFQUFJRyxDQUFDO0FBRXZCLFdBQU9WLEVBQUssYUFBYVcsQ0FBUTtBQUFBLEVBQ3pDLEdBQ0lYLEVBQUssZUFBZSxDQUFDTyxNQUNWUCxFQUFLLFdBQVdPLENBQUcsRUFBRSxJQUFJLFNBQVVLLEdBQUc7QUFDekMsV0FBT0wsRUFBSUssQ0FBQztBQUFBLEVBQ3hCLENBQVMsR0FFTFosRUFBSyxh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QU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLEtBQUssQ0FBQ1EsTUFBT0EsRUFBRyxTQUFTLFVBQVU7QUFBQSxFQUNoRTtBQUFBLEVBQ0QsSUFBSSxTQUFTO0FBQ1QsV0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLE9BQU8sS0FBSyxDQUFDQSxNQUFPQSxFQUFHLFNBQVMsTUFBTTtBQUFBLEVBQzVEO0FBQUEsRUFDRCxJQUFJLFNBQVM7QUFDVCxXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUNBLE1BQU9BLEVBQUcsU0FBUyxNQUFNO0FBQUEsRUFDNUQ7QUFBQSxFQUNELElBQUksYUFBYTtBQUNiLFdBQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLEtBQUssQ0FBQ0EsTUFBT0EsRUFBRyxTQUFTLFVBQVU7QUFBQSxFQUNoRTtBQUFBLEVBQ0QsSUFBSSxVQUFVO0FBQ1YsV0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLE9BQU8sS0FBSyxDQUFDQSxNQUFPQSxFQUFHLFNBQVMsT0FBTztBQUFBLEVBQzdEO0FBQUEsRUFDRCxJQUFJLFFBQVE7QUFDUixXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUNBLE1BQU9BLEVBQUcsU0FBUyxLQUFLO0FBQUEsRUFDM0Q7QUFBQSxFQUNELElBQUksVUFBVTtBQUNWLFdBQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLEtBQUssQ0FBQ0EsTUFBT0EsRUFBRyxTQUFTLE9BQU87QUFBQSxFQUM3RDtBQUFBLEVBQ0QsSUFBSSxTQUFTO0FBQ1QsV0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLE9BQU8sS0FBSyxDQUFDQSxNQUFPQSxFQUFHLFNBQVMsTUFBTTtBQUFBLEVBQzVEO0FBQUEsRUFDRCxJQUFJLFdBQVc7QUFDWCxXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUNBLE1BQU9BLEVBQUcsU0FBUyxRQUFRO0FBQUEsRUFDOUQ7QUFBQSxFQUNELElBQUksU0FBUztBQUNULFdBQU8sQ0FBQyxDQUFDLEtBQUss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
|