@getopenpay/openpay-js-react 0.1.16 → 0.1.18
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/.tsbuildinfo +1 -1
- package/dist/index.js +912 -833
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { createContext as
|
|
1
|
+
import { createContext as Kt, useContext as Bt, useRef as at, useMemo as T, useState as Y, useCallback as Zt, useEffect as Se } from "react";
|
|
2
2
|
import { jsx as A, Fragment as ve } from "react/jsx-runtime";
|
|
3
3
|
import { z as t } from "zod";
|
|
4
4
|
import "uuid";
|
|
5
5
|
import { connectToChild as ct } from "penpal";
|
|
6
6
|
import $ from "chalk";
|
|
7
|
-
const
|
|
7
|
+
const lt = Kt({
|
|
8
8
|
formId: "",
|
|
9
9
|
formHeight: "",
|
|
10
10
|
referrer: void 0,
|
|
@@ -12,40 +12,40 @@ const ut = Ht({
|
|
|
12
12
|
registerIframe: () => {
|
|
13
13
|
},
|
|
14
14
|
baseUrl: ""
|
|
15
|
-
}),
|
|
16
|
-
const e =
|
|
15
|
+
}), Jt = () => {
|
|
16
|
+
const e = Bt(lt);
|
|
17
17
|
if (!e)
|
|
18
18
|
throw new Error("useOpenPayElements must be used within an OpenPayElementsProvider");
|
|
19
19
|
return e;
|
|
20
|
-
},
|
|
20
|
+
}, Gt = "https://cde.getopenpay.com", Wt = t.object({
|
|
21
21
|
type: t.string(),
|
|
22
22
|
loc: t.array(t.string()),
|
|
23
23
|
msg: t.string(),
|
|
24
24
|
url: t.string()
|
|
25
|
-
}),
|
|
25
|
+
}), Xt = t.array(Wt), Qt = t.object({
|
|
26
26
|
code: t.string(),
|
|
27
27
|
message: t.string(),
|
|
28
28
|
path: t.array(t.string())
|
|
29
|
-
}),
|
|
29
|
+
}), er = t.array(Qt), tr = {
|
|
30
30
|
"failed to fetch": "Connection error: please double check if you are connected to the internet, then try again"
|
|
31
31
|
}, ke = (e) => {
|
|
32
32
|
const n = e.toLowerCase().trim();
|
|
33
|
-
return
|
|
34
|
-
},
|
|
33
|
+
return tr[n] ?? e;
|
|
34
|
+
}, rr = (e) => {
|
|
35
35
|
try {
|
|
36
36
|
return typeof JSON.parse(e) == "object";
|
|
37
37
|
} catch {
|
|
38
38
|
return !1;
|
|
39
39
|
}
|
|
40
|
-
},
|
|
40
|
+
}, nr = (e) => e.length === 1 ? ke(e[0].msg) : `Please fix the following errors:
|
|
41
41
|
${e.map((n) => `• ${ke(n.msg)}`).join(`
|
|
42
|
-
`)}`,
|
|
42
|
+
`)}`, or = (e) => `Encountered the following errors:
|
|
43
43
|
${e.map((n) => `- ${n.path.join("/")}: ${n.message}`).join(`
|
|
44
|
-
`)}`,
|
|
44
|
+
`)}`, Z = (e) => {
|
|
45
45
|
if (e instanceof Error)
|
|
46
|
-
if (
|
|
46
|
+
if (rr(e.message)) {
|
|
47
47
|
const n = JSON.parse(e.message);
|
|
48
|
-
return
|
|
48
|
+
return Xt.safeParse(n).success ? nr(n) : er.safeParse(n).success ? or(n) : (console.warn(`Encountered unknown stringified JSON object:
|
|
49
49
|
${e.message}`), e.message);
|
|
50
50
|
} else
|
|
51
51
|
return ke(e.message);
|
|
@@ -57,41 +57,42 @@ ${e.message}`), e.message);
|
|
|
57
57
|
}
|
|
58
58
|
else
|
|
59
59
|
return e + "";
|
|
60
|
-
},
|
|
60
|
+
}, ir = (e, n, r) => (...o) => {
|
|
61
61
|
try {
|
|
62
62
|
return n(...o);
|
|
63
63
|
} catch (i) {
|
|
64
64
|
r(`[form] Error running callback (${e}):`, i);
|
|
65
65
|
return;
|
|
66
66
|
}
|
|
67
|
-
}, k = t.string().trim().min(1, { message: "Cannot be blank" }),
|
|
67
|
+
}, k = t.string().trim().min(1, { message: "Cannot be blank" }), w = t.string().trim().optional(), ce = (e) => t.nullable(e.optional());
|
|
68
68
|
var y = /* @__PURE__ */ ((e) => (e.FIRST_NAME = "firstName", e.LAST_NAME = "lastName", e.EMAIL = "email", e.ZIP_CODE = "zipCode", e.CITY = "city", e.STATE = "state", e.COUNTRY = "country", e.ADDRESS = "address", e.PHONE = "phone", e.PROMOTION_CODE = "promotionCode", e))(y || {});
|
|
69
|
-
const
|
|
69
|
+
const ut = t.nativeEnum(y);
|
|
70
70
|
var dt = /* @__PURE__ */ ((e) => (e.CARD_NUMBER = "cardNumber", e.CARD_EXPIRY = "cardExpiry", e.CARD_CVC = "cardCvc", e))(dt || {});
|
|
71
|
-
const mt = t.nativeEnum(dt), pt = t.union([
|
|
72
|
-
var
|
|
73
|
-
const
|
|
71
|
+
const mt = t.nativeEnum(dt), pt = t.union([ut, mt]);
|
|
72
|
+
var K = /* @__PURE__ */ ((e) => (e.CARD = "card", e.CARD_NUMBER = "card-number", e.CARD_EXPIRY = "card-expiry", e.CARD_CVC = "card-cvc", e))(K || {});
|
|
73
|
+
const sr = t.nativeEnum(K), pe = t.object({
|
|
74
74
|
provider: t.string(),
|
|
75
|
-
processor_name:
|
|
76
|
-
metadata:
|
|
77
|
-
}),
|
|
75
|
+
processor_name: ce(t.string()),
|
|
76
|
+
metadata: ce(t.record(t.string(), t.any()))
|
|
77
|
+
}), ar = t.object({
|
|
78
78
|
id: t.string()
|
|
79
79
|
});
|
|
80
80
|
t.object({
|
|
81
|
-
cardNumber:
|
|
82
|
-
expiry:
|
|
83
|
-
cvc:
|
|
81
|
+
cardNumber: w,
|
|
82
|
+
expiry: w,
|
|
83
|
+
cvc: w
|
|
84
84
|
});
|
|
85
85
|
t.object({
|
|
86
|
-
backgroundColor:
|
|
87
|
-
color:
|
|
88
|
-
fontFamily:
|
|
89
|
-
fontSize:
|
|
90
|
-
fontWeight:
|
|
91
|
-
margin:
|
|
92
|
-
padding:
|
|
93
|
-
letterSpacing:
|
|
94
|
-
lineHeight:
|
|
86
|
+
backgroundColor: w,
|
|
87
|
+
color: w,
|
|
88
|
+
fontFamily: w,
|
|
89
|
+
fontSize: w,
|
|
90
|
+
fontWeight: w,
|
|
91
|
+
margin: w,
|
|
92
|
+
padding: w,
|
|
93
|
+
letterSpacing: w,
|
|
94
|
+
lineHeight: w,
|
|
95
|
+
hideIcon: w
|
|
95
96
|
});
|
|
96
97
|
const x = t.enum([
|
|
97
98
|
// Element -> Form
|
|
@@ -114,76 +115,76 @@ const x = t.enum([
|
|
|
114
115
|
"TOKENIZE",
|
|
115
116
|
"CHECKOUT",
|
|
116
117
|
"START_PAYMENT_FLOW"
|
|
117
|
-
]),
|
|
118
|
-
type:
|
|
118
|
+
]), cr = x.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), lr = t.object({ type: cr }), ur = x.extract(["BLUR", "FOCUS", "CHANGE"]), dr = t.object({
|
|
119
|
+
type: ur,
|
|
119
120
|
elementType: mt,
|
|
120
121
|
errors: t.array(t.string()).optional()
|
|
121
|
-
}),
|
|
122
|
-
type:
|
|
122
|
+
}), mr = x.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), pr = t.object({
|
|
123
|
+
type: mr,
|
|
123
124
|
message: k,
|
|
124
125
|
headers: t.record(t.string(), t.string()).optional()
|
|
125
|
-
}),
|
|
126
|
-
type:
|
|
126
|
+
}), hr = x.extract(["VALIDATION_ERROR"]), fr = t.object({
|
|
127
|
+
type: hr,
|
|
127
128
|
elementType: pt,
|
|
128
129
|
errors: t.array(t.string())
|
|
129
|
-
}),
|
|
130
|
+
}), yr = t.object({
|
|
130
131
|
type: t.literal(x.enum.LAYOUT),
|
|
131
132
|
height: k
|
|
132
|
-
}),
|
|
133
|
+
}), _r = t.object({
|
|
133
134
|
type: t.literal(x.enum.LOADED),
|
|
134
135
|
sessionId: k,
|
|
135
136
|
totalAmountAtoms: t.number(),
|
|
136
|
-
currency:
|
|
137
|
+
currency: w,
|
|
137
138
|
checkoutPaymentMethods: t.array(pe)
|
|
138
|
-
}),
|
|
139
|
+
}), gr = t.object({
|
|
139
140
|
type: t.literal(x.enum.PAYMENT_FLOW_STARTED),
|
|
140
141
|
nextActionMetadata: t.record(t.string(), t.any()),
|
|
141
142
|
paymentFlowMetadata: t.any().optional(),
|
|
142
143
|
startPFMetadata: t.optional(t.record(t.string(), t.any()))
|
|
143
|
-
}),
|
|
144
|
+
}), br = t.object({
|
|
144
145
|
type: t.literal(x.enum.SETUP_PAYMENT_METHOD_SUCCESS),
|
|
145
146
|
paymentMethodId: t.string()
|
|
146
|
-
}),
|
|
147
|
+
}), X = t.object({
|
|
147
148
|
firstName: k,
|
|
148
149
|
lastName: k,
|
|
149
150
|
email: k,
|
|
150
151
|
zipCode: k,
|
|
151
152
|
country: k,
|
|
152
|
-
promotionCode:
|
|
153
|
-
}),
|
|
153
|
+
promotionCode: w
|
|
154
|
+
}), vr = t.object({
|
|
154
155
|
email: k,
|
|
155
156
|
zipCode: k,
|
|
156
157
|
country: k,
|
|
157
|
-
promotionCode:
|
|
158
|
-
}),
|
|
159
|
-
type:
|
|
158
|
+
promotionCode: w
|
|
159
|
+
}), wr = x.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Er = t.object({
|
|
160
|
+
type: wr,
|
|
160
161
|
sessionId: k,
|
|
161
162
|
checkoutPaymentMethod: pe,
|
|
162
163
|
paymentFlowMetadata: t.any().optional(),
|
|
163
164
|
doNotUseLegacyCCFlow: t.boolean().optional(),
|
|
164
|
-
existingCCPMId:
|
|
165
|
-
}).extend(
|
|
165
|
+
existingCCPMId: w
|
|
166
|
+
}).extend(X.shape), Cr = t.object({
|
|
166
167
|
type: t.literal(x.enum.TOKENIZE_SUCCESS),
|
|
167
168
|
isReadyForCheckout: t.boolean()
|
|
168
|
-
}),
|
|
169
|
+
}), Sr = t.object({
|
|
169
170
|
type: t.literal(x.enum.CHECKOUT_SUCCESS),
|
|
170
171
|
invoiceUrls: t.array(t.string()),
|
|
171
172
|
subscriptionIds: t.array(t.string()),
|
|
172
173
|
customerId: t.string()
|
|
173
|
-
}),
|
|
174
|
-
sr,
|
|
175
|
-
cr,
|
|
174
|
+
}), kr = t.discriminatedUnion("type", [
|
|
176
175
|
lr,
|
|
177
|
-
|
|
176
|
+
dr,
|
|
178
177
|
pr,
|
|
179
|
-
hr,
|
|
180
|
-
gr,
|
|
181
|
-
vr,
|
|
182
|
-
wr,
|
|
183
178
|
fr,
|
|
184
|
-
yr
|
|
185
|
-
|
|
186
|
-
|
|
179
|
+
yr,
|
|
180
|
+
_r,
|
|
181
|
+
Er,
|
|
182
|
+
Cr,
|
|
183
|
+
Sr,
|
|
184
|
+
gr,
|
|
185
|
+
br
|
|
186
|
+
]), Pr = t.object({
|
|
187
|
+
payload: kr,
|
|
187
188
|
nonce: k,
|
|
188
189
|
formId: k,
|
|
189
190
|
elementId: k
|
|
@@ -199,85 +200,91 @@ t.object({
|
|
|
199
200
|
});
|
|
200
201
|
t.object({
|
|
201
202
|
secure_token: t.string(),
|
|
202
|
-
existing_cc_pm_id:
|
|
203
|
+
existing_cc_pm_id: ce(t.string())
|
|
203
204
|
});
|
|
204
|
-
const
|
|
205
|
-
payment_methods: t.array(
|
|
206
|
-
}),
|
|
205
|
+
const Or = t.object({
|
|
206
|
+
payment_methods: t.array(ar)
|
|
207
|
+
}), jr = t.object({
|
|
207
208
|
elementType: t.string(),
|
|
208
209
|
errors: t.array(t.string())
|
|
209
210
|
});
|
|
210
211
|
t.object({
|
|
211
212
|
session_id: t.string()
|
|
212
213
|
});
|
|
213
|
-
const
|
|
214
|
+
const Tr = t.object({
|
|
214
215
|
success: t.literal(!1),
|
|
215
216
|
error_type: t.literal("validation_error"),
|
|
216
|
-
errors: t.array(
|
|
217
|
-
}),
|
|
217
|
+
errors: t.array(jr)
|
|
218
|
+
}), Rr = t.discriminatedUnion("success", [
|
|
218
219
|
t.object({ success: t.literal(!0) }),
|
|
219
|
-
|
|
220
|
+
Tr
|
|
220
221
|
]);
|
|
221
222
|
t.object({
|
|
222
223
|
session_id: t.string(),
|
|
223
224
|
checkout_payment_method: pe,
|
|
224
|
-
non_cde_form_fields:
|
|
225
|
+
non_cde_form_fields: X,
|
|
225
226
|
do_not_use_legacy_cc_flow: t.boolean().optional(),
|
|
226
|
-
existing_cc_pm_id:
|
|
227
|
+
existing_cc_pm_id: ce(t.string())
|
|
227
228
|
});
|
|
228
229
|
t.object({
|
|
229
230
|
session_id: t.string(),
|
|
230
231
|
checkout_payment_method: pe,
|
|
231
|
-
non_cde_form_fields:
|
|
232
|
+
non_cde_form_fields: X,
|
|
233
|
+
extra_metadata: t.record(t.string(), t.any()).optional()
|
|
232
234
|
});
|
|
233
|
-
var
|
|
234
|
-
const
|
|
235
|
+
var q = /* @__PURE__ */ ((e) => (e.SUCCESS = "success", e.FAILURE = "failure", e.CANCELLED = "cancelled", e))(q || {});
|
|
236
|
+
const Ir = t.object({
|
|
235
237
|
status: t.enum([
|
|
236
238
|
"success",
|
|
237
239
|
"failure",
|
|
238
240
|
"cancelled"
|
|
239
241
|
/* CANCELLED */
|
|
240
|
-
])
|
|
241
|
-
|
|
242
|
+
]),
|
|
243
|
+
href: t.string().optional().nullable()
|
|
244
|
+
});
|
|
245
|
+
t.object({
|
|
246
|
+
href: t.string().optional().nullable()
|
|
247
|
+
});
|
|
248
|
+
const Ar = t.object({
|
|
242
249
|
type: t.string(),
|
|
243
250
|
redirect_url: t.string(),
|
|
244
251
|
initial_intent_id: t.string(),
|
|
245
252
|
consent_id: t.string()
|
|
246
|
-
}),
|
|
253
|
+
}), xr = (e) => {
|
|
247
254
|
const n = {};
|
|
248
255
|
return Object.entries(e).forEach(([r, o]) => {
|
|
249
256
|
try {
|
|
250
|
-
const i =
|
|
257
|
+
const i = ut.parse(r);
|
|
251
258
|
Array.isArray(o) ? n[i] = o : Array.isArray(o._errors) && (n[i] = o._errors);
|
|
252
259
|
} catch {
|
|
253
260
|
return;
|
|
254
261
|
}
|
|
255
262
|
}), n;
|
|
256
|
-
},
|
|
263
|
+
}, Lr = t.object({
|
|
257
264
|
stripe_pk: t.string(),
|
|
258
265
|
client_secret: t.string(),
|
|
259
266
|
stripe_pm_id: t.string()
|
|
260
|
-
}),
|
|
267
|
+
}), Mr = t.object({
|
|
261
268
|
type: t.string(),
|
|
262
269
|
client_secret: t.string(),
|
|
263
270
|
stripe_pk: t.string()
|
|
264
|
-
}),
|
|
271
|
+
}), Dr = {
|
|
265
272
|
usd: "usd",
|
|
266
273
|
brl: "brl"
|
|
267
274
|
}, he = async (e) => {
|
|
268
275
|
for (let n = 0; n < 10; n++)
|
|
269
|
-
|
|
270
|
-
if (!
|
|
276
|
+
De() || await Fr(500);
|
|
277
|
+
if (!De())
|
|
271
278
|
throw console.log("Stripe JS not found."), new Error("Stripe JS not found.");
|
|
272
279
|
return new Stripe(e);
|
|
273
|
-
},
|
|
280
|
+
}, Nr = async (e, n) => {
|
|
274
281
|
const r = await he(e);
|
|
275
282
|
return {
|
|
276
283
|
elements: r.elements(n),
|
|
277
284
|
stripe: r
|
|
278
285
|
};
|
|
279
|
-
},
|
|
280
|
-
const s = await he(e), a =
|
|
286
|
+
}, Ur = async (e, n, r, o, i) => {
|
|
287
|
+
const s = await he(e), a = Dr[r.toLowerCase().trim()];
|
|
281
288
|
return s.paymentRequest({
|
|
282
289
|
// TODO: replace this with stripe account country as soon as we support it
|
|
283
290
|
country: "US",
|
|
@@ -291,9 +298,9 @@ const jr = t.object({
|
|
|
291
298
|
requestPayerEmail: !0,
|
|
292
299
|
disableWallets: []
|
|
293
300
|
});
|
|
294
|
-
},
|
|
301
|
+
}, Fr = (e) => new Promise((n) => {
|
|
295
302
|
setTimeout(n, e);
|
|
296
|
-
}),
|
|
303
|
+
}), De = () => "Stripe" in window, $r = async (e) => new Promise((n, r) => {
|
|
297
304
|
try {
|
|
298
305
|
e.on("paymentmethod", async (o) => {
|
|
299
306
|
n(o);
|
|
@@ -303,7 +310,7 @@ const jr = t.object({
|
|
|
303
310
|
} catch (o) {
|
|
304
311
|
r(o);
|
|
305
312
|
}
|
|
306
|
-
}),
|
|
313
|
+
}), zr = async (e, n) => {
|
|
307
314
|
if (!e.stripe_pk || !e.client_secret)
|
|
308
315
|
throw new Error(`Invalid next action metadata format: ${JSON.stringify(e)}`);
|
|
309
316
|
const r = await (await he(e.stripe_pk)).confirmCardSetup(e.client_secret, {
|
|
@@ -312,7 +319,7 @@ const jr = t.object({
|
|
|
312
319
|
if (r.error)
|
|
313
320
|
throw n.complete("fail"), new Error(`Payment failed: ${r.error.message ?? "unknown"}`);
|
|
314
321
|
return n.complete("success"), r;
|
|
315
|
-
},
|
|
322
|
+
}, qr = async (e) => {
|
|
316
323
|
var n, r, o, i;
|
|
317
324
|
const s = await (await he(e.stripe_pk)).confirmCardSetup(e.client_secret, {
|
|
318
325
|
payment_method: e.stripe_pm_id
|
|
@@ -322,16 +329,16 @@ const jr = t.object({
|
|
|
322
329
|
else throw a === "canceled" ? new Error("Payment cancelled, please click Submit again to pay") : new Error(
|
|
323
330
|
`${((r = s.error) == null ? void 0 : r.message) ?? ((i = (o = s.setupIntent) == null ? void 0 : o.last_setup_error) == null ? void 0 : i.message) ?? "Payment failed, please click submit again to pay."}`
|
|
324
331
|
);
|
|
325
|
-
},
|
|
332
|
+
}, Hr = (e) => JSON.stringify(e), Te = (e, n) => Array.from(e.querySelectorAll("[data-opid]") ?? []).reduce((r, o) => {
|
|
326
333
|
const i = o.getAttribute("data-opid");
|
|
327
334
|
return i ? { ...r, [i]: o.value } : r;
|
|
328
|
-
}, {}),
|
|
335
|
+
}, {}), Vr = (e) => {
|
|
329
336
|
try {
|
|
330
|
-
return
|
|
337
|
+
return Pr.parse(e);
|
|
331
338
|
} catch (n) {
|
|
332
339
|
throw console.error("Error parsing event payload:", e, n), n;
|
|
333
340
|
}
|
|
334
|
-
},
|
|
341
|
+
}, Yr = async (e) => {
|
|
335
342
|
if (typeof e != "object" || !e) return !1;
|
|
336
343
|
try {
|
|
337
344
|
const n = { type: "ping" }, r = await e.send(n);
|
|
@@ -341,9 +348,9 @@ const jr = t.object({
|
|
|
341
348
|
} catch (n) {
|
|
342
349
|
return console.error("Invalid CDE connection check:", n), !1;
|
|
343
350
|
}
|
|
344
|
-
},
|
|
351
|
+
}, Kr = (e, n) => !!e && n, b = (e) => t.nullable(e.optional());
|
|
345
352
|
t.string().trim().min(1, { message: "Cannot be blank" });
|
|
346
|
-
const
|
|
353
|
+
const Br = t.object({
|
|
347
354
|
cde_response_type: t.literal("error"),
|
|
348
355
|
message: t.string(),
|
|
349
356
|
headers: t.record(t.string(), t.string()).optional()
|
|
@@ -365,47 +372,47 @@ const ht = t.object({
|
|
|
365
372
|
billing_interval: b(t.string()),
|
|
366
373
|
billing_interval_count: b(t.number().int()),
|
|
367
374
|
quantity: t.number().int()
|
|
368
|
-
}),
|
|
375
|
+
}), Zr = t.record(t.string(), t.any()), Jr = t.object({
|
|
369
376
|
name: t.string(),
|
|
370
|
-
settings: b(
|
|
371
|
-
}),
|
|
377
|
+
settings: b(Zr)
|
|
378
|
+
}), Q = t.object({
|
|
372
379
|
provider: t.string(),
|
|
373
380
|
processor_name: b(t.string()),
|
|
374
381
|
metadata: b(t.record(t.string(), t.any()))
|
|
375
|
-
}),
|
|
382
|
+
}), Gr = t.object({
|
|
376
383
|
quantity: t.number()
|
|
377
|
-
}),
|
|
384
|
+
}), Wr = t.object({
|
|
378
385
|
id: b(t.string()),
|
|
379
386
|
billing_interval: b(t.string()),
|
|
380
387
|
billing_interval_count: b(t.number().int()),
|
|
381
|
-
subscription_items: t.array(
|
|
388
|
+
subscription_items: t.array(Gr),
|
|
382
389
|
trial_start: b(t.string()),
|
|
383
390
|
trial_end: b(t.string())
|
|
384
391
|
}), yt = t.object({
|
|
385
392
|
amount_atom: t.number()
|
|
386
|
-
}),
|
|
393
|
+
}), Xr = t.object({
|
|
387
394
|
amount_atom: t.number(),
|
|
388
395
|
amount_atom_considering_discount_applied: t.number(),
|
|
389
396
|
currency: t.string(),
|
|
390
397
|
discount_amount_atoms: t.array(yt),
|
|
391
398
|
subscription_item_id: t.string()
|
|
392
|
-
}),
|
|
399
|
+
}), Qr = t.object({
|
|
393
400
|
coupon: ht
|
|
394
|
-
}),
|
|
401
|
+
}), en = t.object({
|
|
395
402
|
currency: t.string(),
|
|
396
|
-
discounts: t.array(
|
|
403
|
+
discounts: t.array(Qr),
|
|
397
404
|
hosted_invoice_url: b(t.string()),
|
|
398
|
-
lines: t.array(
|
|
405
|
+
lines: t.array(Xr),
|
|
399
406
|
remaining_amount_atom: t.number(),
|
|
400
407
|
tax_amount_atom: t.number(),
|
|
401
408
|
total_amount_atom: t.number(),
|
|
402
409
|
total_discount_amount_atoms: t.array(yt)
|
|
403
|
-
}),
|
|
404
|
-
created: t.array(
|
|
405
|
-
invoices: t.array(
|
|
410
|
+
}), Ne = t.object({
|
|
411
|
+
created: t.array(Wr),
|
|
412
|
+
invoices: t.array(en)
|
|
406
413
|
}), _t = t.object({
|
|
407
|
-
preview:
|
|
408
|
-
preview_post_trial: b(
|
|
414
|
+
preview: Ne,
|
|
415
|
+
preview_post_trial: b(Ne),
|
|
409
416
|
coupons: t.array(ht)
|
|
410
417
|
}), Ue = t.object({
|
|
411
418
|
status: t.literal("open"),
|
|
@@ -414,11 +421,11 @@ const ht = t.object({
|
|
|
414
421
|
line_items: t.array(ft),
|
|
415
422
|
amount_subtotal_atom: t.number().int(),
|
|
416
423
|
amount_total_atom: t.number().int(),
|
|
417
|
-
brand:
|
|
424
|
+
brand: Jr,
|
|
418
425
|
subs_preview: b(_t),
|
|
419
426
|
// Null in setup mode
|
|
420
|
-
methods_available: t.array(
|
|
421
|
-
}),
|
|
427
|
+
methods_available: t.array(Q)
|
|
428
|
+
}), gt = t.discriminatedUnion("mode", [
|
|
422
429
|
t.object({
|
|
423
430
|
mode: t.literal("setup"),
|
|
424
431
|
currency: t.nullable(t.undefined())
|
|
@@ -427,19 +434,19 @@ const ht = t.object({
|
|
|
427
434
|
mode: t.enum(["payment", "subscription"]),
|
|
428
435
|
currency: t.string()
|
|
429
436
|
}).extend(Ue.shape)
|
|
430
|
-
]),
|
|
437
|
+
]), tn = t.object({
|
|
431
438
|
status: t.literal("complete")
|
|
432
|
-
}),
|
|
439
|
+
}), rn = t.object({
|
|
433
440
|
status: t.literal("expired")
|
|
434
441
|
});
|
|
435
|
-
t.union([
|
|
442
|
+
t.union([gt, tn, rn]);
|
|
436
443
|
t.object({
|
|
437
444
|
logo: t.string(),
|
|
438
445
|
icon: t.string(),
|
|
439
446
|
primary_color: t.string(),
|
|
440
447
|
secondary_color: t.string()
|
|
441
448
|
});
|
|
442
|
-
const
|
|
449
|
+
const bt = t.object({
|
|
443
450
|
invoice_urls: t.array(t.string()),
|
|
444
451
|
subscription_ids: t.array(t.string()),
|
|
445
452
|
customer_id: t.string()
|
|
@@ -454,29 +461,29 @@ t.object({
|
|
|
454
461
|
line_items: t.array(ft),
|
|
455
462
|
total_amount_atom: t.number().int(),
|
|
456
463
|
cancel_at_end: t.boolean(),
|
|
457
|
-
checkout_payment_method:
|
|
464
|
+
checkout_payment_method: Q,
|
|
458
465
|
promotion_code: t.string().optional(),
|
|
459
466
|
do_not_use_legacy_cc_flow: t.boolean().optional()
|
|
460
467
|
});
|
|
461
|
-
const
|
|
468
|
+
const nn = t.object({
|
|
462
469
|
payment_method_id: t.string()
|
|
463
470
|
});
|
|
464
471
|
t.object({
|
|
465
472
|
id: t.string(),
|
|
466
473
|
return_url: t.string()
|
|
467
474
|
});
|
|
468
|
-
const
|
|
475
|
+
const on = t.object({
|
|
469
476
|
type: t.string(),
|
|
470
477
|
loc: t.array(t.string()),
|
|
471
478
|
msg: t.string(),
|
|
472
479
|
url: t.string()
|
|
473
480
|
});
|
|
474
|
-
t.array(
|
|
481
|
+
t.array(on);
|
|
475
482
|
t.object({
|
|
476
483
|
new_customer_email: t.string().optional(),
|
|
477
484
|
new_customer_address: t.record(t.string(), t.any()).optional(),
|
|
478
485
|
payment_provider: t.string(),
|
|
479
|
-
checkout_payment_method:
|
|
486
|
+
checkout_payment_method: Q,
|
|
480
487
|
existing_cc_pm_id: t.string().optional(),
|
|
481
488
|
their_existing_pm_id: t.string().optional()
|
|
482
489
|
});
|
|
@@ -484,30 +491,32 @@ const vt = t.object({
|
|
|
484
491
|
required_user_actions: t.array(t.record(t.string(), t.any()))
|
|
485
492
|
});
|
|
486
493
|
t.object({
|
|
487
|
-
fields:
|
|
488
|
-
checkoutPaymentMethod:
|
|
494
|
+
fields: vr,
|
|
495
|
+
checkoutPaymentMethod: Q
|
|
489
496
|
});
|
|
490
497
|
t.object({
|
|
491
498
|
session_id: t.string(),
|
|
492
|
-
non_cde_form_fields:
|
|
493
|
-
checkout_payment_method:
|
|
499
|
+
non_cde_form_fields: X,
|
|
500
|
+
checkout_payment_method: Q,
|
|
501
|
+
extra_metadata: t.record(t.string(), t.any())
|
|
502
|
+
// This is optional in CDE, but not in OJS moving forward
|
|
494
503
|
});
|
|
495
|
-
const
|
|
504
|
+
const sn = t.object({
|
|
496
505
|
required_user_actions: t.array(t.record(t.string(), t.any())),
|
|
497
506
|
cc_pm_id: t.string()
|
|
498
507
|
});
|
|
499
508
|
t.record(t.any());
|
|
500
|
-
const
|
|
501
|
-
function
|
|
509
|
+
const an = (e) => e.reduce((n, r) => n + r, 0);
|
|
510
|
+
function cn(e, n) {
|
|
502
511
|
var r = Object.setPrototypeOf;
|
|
503
512
|
r ? r(e, n) : e.__proto__ = n;
|
|
504
513
|
}
|
|
505
|
-
function
|
|
514
|
+
function ln(e, n) {
|
|
506
515
|
n === void 0 && (n = e.constructor);
|
|
507
516
|
var r = Error.captureStackTrace;
|
|
508
517
|
r && r(e, n);
|
|
509
518
|
}
|
|
510
|
-
var
|
|
519
|
+
var un = /* @__PURE__ */ function() {
|
|
511
520
|
var e = function(n, r) {
|
|
512
521
|
return e = Object.setPrototypeOf || {
|
|
513
522
|
__proto__: []
|
|
@@ -526,19 +535,19 @@ var an = /* @__PURE__ */ function() {
|
|
|
526
535
|
}
|
|
527
536
|
n.prototype = r === null ? Object.create(r) : (o.prototype = r.prototype, new o());
|
|
528
537
|
};
|
|
529
|
-
}(),
|
|
530
|
-
|
|
538
|
+
}(), dn = function(e) {
|
|
539
|
+
un(n, e);
|
|
531
540
|
function n(r, o) {
|
|
532
541
|
var i = this.constructor, s = e.call(this, r, o) || this;
|
|
533
542
|
return Object.defineProperty(s, "name", {
|
|
534
543
|
value: i.name,
|
|
535
544
|
enumerable: !1,
|
|
536
545
|
configurable: !0
|
|
537
|
-
}),
|
|
546
|
+
}), cn(s, i.prototype), ln(s), s;
|
|
538
547
|
}
|
|
539
548
|
return n;
|
|
540
549
|
}(Error);
|
|
541
|
-
class wt extends
|
|
550
|
+
class wt extends dn {
|
|
542
551
|
constructor(n) {
|
|
543
552
|
const r = `${n.message}`;
|
|
544
553
|
super(r), this.response = n;
|
|
@@ -547,23 +556,23 @@ class wt extends cn {
|
|
|
547
556
|
return this.response.message;
|
|
548
557
|
}
|
|
549
558
|
}
|
|
550
|
-
const
|
|
559
|
+
const L = async (e, n, r) => {
|
|
551
560
|
const o = await e.send(n);
|
|
552
|
-
if (
|
|
561
|
+
if (pn(o))
|
|
553
562
|
throw new wt(o);
|
|
554
|
-
if (!
|
|
563
|
+
if (!mn(o, r)) {
|
|
555
564
|
const i = r.safeParse(o);
|
|
556
565
|
throw i.success ? new Error("Invalid state") : (console.error("OJS queryApi got a schema error. Expected schema:", r, "Actual:", o), i.error);
|
|
557
566
|
}
|
|
558
567
|
return o;
|
|
559
|
-
},
|
|
560
|
-
const o = await
|
|
568
|
+
}, mn = (e, n) => n.safeParse(e).success, pn = (e) => Br.safeParse(e).success, hn = async (e, n) => await L(e, { type: "get_checkout_preview", payload: n }, _t), ee = async (e) => await L(e, { type: "get_prefill", payload: {} }, gt), fn = async (e, n) => await L(e, { type: "v2_start_payment_flow", payload: n }, vt), yn = async (e, n) => await L(e, { type: "start_payment_flow_for_cc", payload: n }, sn), _n = async (e, n) => await L(e, { type: "start_payment_flow_for_pr", payload: n }, vt), Re = async (e, n) => await L(e, { type: "confirm_payment_flow", payload: n }, Or), gn = async (e, n, r) => {
|
|
569
|
+
const o = await hn(e, {
|
|
561
570
|
secure_token: n,
|
|
562
571
|
promotion_code: r
|
|
563
572
|
}), i = new Set(o.preview.invoices.map((c) => c.currency));
|
|
564
573
|
if (i.size !== 1)
|
|
565
574
|
throw new Error(`Expected exactly one currency, got ${i.size}`);
|
|
566
|
-
const s = i.values().next().value ?? "usd", a =
|
|
575
|
+
const s = i.values().next().value ?? "usd", a = an(o.preview.invoices.map((c) => c.remaining_amount_atom));
|
|
567
576
|
return {
|
|
568
577
|
currency: s,
|
|
569
578
|
amountAtom: a
|
|
@@ -573,24 +582,24 @@ const M = async (e, n, r) => {
|
|
|
573
582
|
return { amountAtom: 0, currency: "usd" };
|
|
574
583
|
{
|
|
575
584
|
o = o || void 0;
|
|
576
|
-
const i = await
|
|
585
|
+
const i = await gn(e, n, o);
|
|
577
586
|
return { amountAtom: i.amountAtom, currency: i.currency };
|
|
578
587
|
}
|
|
579
|
-
},
|
|
588
|
+
}, bn = async (e, n) => {
|
|
580
589
|
if (e.size === 0)
|
|
581
590
|
throw new Error("No CDE connections found");
|
|
582
591
|
return await Promise.all(
|
|
583
592
|
Array.from(e.values()).map(
|
|
584
|
-
(r) =>
|
|
593
|
+
(r) => L(r, { type: "tokenize_card", payload: n }, Rr)
|
|
585
594
|
)
|
|
586
595
|
);
|
|
587
596
|
}, Fe = async (e, n) => {
|
|
588
597
|
try {
|
|
589
|
-
return await
|
|
598
|
+
return await L(e, { type: "checkout_card_elements", payload: n }, bt);
|
|
590
599
|
} catch (r) {
|
|
591
600
|
throw console.error("[cde-client] Error during checkoutCardElements:", r, JSON.stringify(r)), r;
|
|
592
601
|
}
|
|
593
|
-
},
|
|
602
|
+
}, vn = async (e, n) => await L(e, { type: "setup_payment_method", payload: n }, nn), Ct = async (e, n) => await L(e, { type: "checkout", payload: n }, bt), St = 1e3, wn = async (e, n) => {
|
|
594
603
|
console.log(n);
|
|
595
604
|
const r = await ct({
|
|
596
605
|
iframe: e,
|
|
@@ -598,10 +607,10 @@ const M = async (e, n, r) => {
|
|
|
598
607
|
timeout: St,
|
|
599
608
|
childOrigin: "*"
|
|
600
609
|
// TODO: use with proper childOrigin
|
|
601
|
-
}).promise;
|
|
602
|
-
return (
|
|
610
|
+
}).promise, o = await L(r, { type: "ping-3ds-status" }, Ir);
|
|
611
|
+
return console.log("🟢 CDE connection successful! Stopping polling... Result:", o), o;
|
|
603
612
|
};
|
|
604
|
-
function
|
|
613
|
+
function kt(e) {
|
|
605
614
|
throw new Error(`Unhandled case: ${e}`);
|
|
606
615
|
}
|
|
607
616
|
const Ie = (e) => async (n) => {
|
|
@@ -620,16 +629,16 @@ const Ie = (e) => async (n) => {
|
|
|
620
629
|
else
|
|
621
630
|
throw new Error(`Unhandled mode: ${i}`);
|
|
622
631
|
} catch (i) {
|
|
623
|
-
n.formCallbacks.get.onCheckoutError(
|
|
632
|
+
n.formCallbacks.get.onCheckoutError(Z(i));
|
|
624
633
|
}
|
|
625
|
-
},
|
|
634
|
+
}, Pt = (e) => async (n) => {
|
|
626
635
|
try {
|
|
627
636
|
return await e(n);
|
|
628
637
|
} catch (r) {
|
|
629
|
-
const { err__: o } =
|
|
630
|
-
return o(r), { isAvailable: !1, reason:
|
|
638
|
+
const { err__: o } = M("init-error-catcher");
|
|
639
|
+
return o(r), { isAvailable: !1, reason: Z(r) };
|
|
631
640
|
}
|
|
632
|
-
},
|
|
641
|
+
}, M = (e) => {
|
|
633
642
|
const n = (...o) => {
|
|
634
643
|
window.console.log(`${$.green.bold("ojs/")}${$.bold.gray(`${e}`)} `, ...o);
|
|
635
644
|
}, r = (...o) => {
|
|
@@ -641,62 +650,62 @@ const Ie = (e) => async (n) => {
|
|
|
641
650
|
log__: n,
|
|
642
651
|
err__: r
|
|
643
652
|
};
|
|
644
|
-
}, { log__:
|
|
653
|
+
}, { log__: os, err__: En } = M("common"), Ae = (e) => {
|
|
645
654
|
if (e.payment_methods.length !== 1)
|
|
646
655
|
throw new Error(`Expected exactly one payment method, got ${e.payment_methods.length}`);
|
|
647
656
|
return { payment_method_id: e.payment_methods[0].id };
|
|
648
|
-
},
|
|
657
|
+
}, Ot = (e, n) => {
|
|
649
658
|
const r = e.find((o) => n.safeParse(o).success);
|
|
650
659
|
if (!r)
|
|
651
|
-
throw
|
|
660
|
+
throw En("No CPMs found for model. All models:", e), new Error("No CPMs found for model");
|
|
652
661
|
return n.parse(r);
|
|
653
|
-
}, { log__:
|
|
654
|
-
const r =
|
|
662
|
+
}, { log__: Cn, err__: jt } = M("common-cc"), xe = (e, n) => {
|
|
663
|
+
const r = X.safeParse(e);
|
|
655
664
|
if (!r.success) {
|
|
656
|
-
const o = r.error.format(), i =
|
|
665
|
+
const o = r.error.format(), i = xr(o);
|
|
657
666
|
for (const [s, a] of Object.entries(i))
|
|
658
667
|
n(s, a, s);
|
|
659
|
-
throw
|
|
668
|
+
throw jt("Got validation errors in non-CDE form fields", i), new Error("Got validation errors in non-CDE form fields");
|
|
660
669
|
}
|
|
661
670
|
return r.data;
|
|
662
|
-
},
|
|
671
|
+
}, Sn = (e, n) => {
|
|
663
672
|
for (const r of e)
|
|
664
673
|
if (r.success === !1)
|
|
665
674
|
throw r.errors.forEach((o) => {
|
|
666
675
|
const i = pt.safeParse(o.elementType);
|
|
667
676
|
if (!i.success)
|
|
668
|
-
|
|
677
|
+
jt(`Unknown field name in onValidationError: ${o.elementType}. Error object:`, o);
|
|
669
678
|
else {
|
|
670
679
|
const s = i.data;
|
|
671
680
|
n(s, o.errors);
|
|
672
681
|
}
|
|
673
|
-
}),
|
|
674
|
-
}, $e = "ojs-stripe-link-btn", { log__:
|
|
682
|
+
}), Cn(`Error tokenizing card: got validation errors: ${JSON.stringify(r.errors)}`), new Error("Got validation errors while tokenizing card");
|
|
683
|
+
}, $e = "ojs-stripe-link-btn", { log__: E, err__: kn } = M("stripe-link"), Pn = t.object({
|
|
675
684
|
provider: t.literal("stripe_link"),
|
|
676
685
|
processor_name: t.literal("stripe"),
|
|
677
686
|
metadata: t.object({
|
|
678
687
|
stripe_pk: t.string()
|
|
679
688
|
})
|
|
680
|
-
}),
|
|
689
|
+
}), On = t.array(
|
|
681
690
|
t.object({
|
|
682
691
|
our_existing_pm_id: t.string()
|
|
683
692
|
})
|
|
684
|
-
).length(1),
|
|
693
|
+
).length(1), jn = Pt(
|
|
685
694
|
async ({ context: e, formCallbacks: n }) => {
|
|
686
695
|
const r = e.customInitParams.stripeLink;
|
|
687
|
-
|
|
688
|
-
const o =
|
|
689
|
-
|
|
690
|
-
const i = e.anyCdeConnection, s = await
|
|
691
|
-
|
|
692
|
-
const c = await Et(i, s.token, a, void 0), { elements:
|
|
696
|
+
E("Checking if there are any CPMs for Stripe Link...");
|
|
697
|
+
const o = Ot(e.checkoutPaymentMethods, Pn);
|
|
698
|
+
E("Starting stripe link flow...");
|
|
699
|
+
const i = e.anyCdeConnection, s = await ee(i), a = s.mode === "setup";
|
|
700
|
+
E("Creating stripe elements...");
|
|
701
|
+
const c = await Et(i, s.token, a, void 0), { elements: l, stripe: u } = await Nr(o.metadata.stripe_pk, {
|
|
693
702
|
mode: "setup",
|
|
694
703
|
currency: c.currency,
|
|
695
704
|
setup_future_usage: "off_session",
|
|
696
705
|
paymentMethodCreation: "manual"
|
|
697
706
|
});
|
|
698
|
-
|
|
699
|
-
const
|
|
707
|
+
E("Creating express checkout...");
|
|
708
|
+
const d = l.create("expressCheckout", {
|
|
700
709
|
buttonHeight: r == null ? void 0 : r.buttonHeight,
|
|
701
710
|
paymentMethods: {
|
|
702
711
|
amazonPay: "never",
|
|
@@ -704,26 +713,26 @@ const Ie = (e) => async (n) => {
|
|
|
704
713
|
googlePay: "never",
|
|
705
714
|
paypal: "never"
|
|
706
715
|
}
|
|
707
|
-
}),
|
|
708
|
-
|
|
716
|
+
}), f = () => {
|
|
717
|
+
d.mount(`#${$e}`);
|
|
709
718
|
}, _ = () => {
|
|
710
|
-
|
|
719
|
+
d.unmount();
|
|
711
720
|
};
|
|
712
|
-
return r != null && r.doNotMountOnInit ?
|
|
713
|
-
if (
|
|
714
|
-
|
|
721
|
+
return r != null && r.doNotMountOnInit ? E("NOT mounting stripe link button (doNotMountOnInit is true)") : (E("Mounting stripe link button..."), f()), d.on("click", async (m) => {
|
|
722
|
+
if (E("Stripe Link button clicked"), r != null && r.overrideLinkSubmit && !await r.overrideLinkSubmit()) {
|
|
723
|
+
E("Stripe Link submit aborted by overrideLinkSubmit");
|
|
715
724
|
return;
|
|
716
725
|
}
|
|
717
|
-
|
|
718
|
-
}),
|
|
719
|
-
|
|
720
|
-
const p = await
|
|
721
|
-
elements:
|
|
726
|
+
m.resolve();
|
|
727
|
+
}), d.on("confirm", async (m) => {
|
|
728
|
+
E("Stripe Link window confirmed", m);
|
|
729
|
+
const p = await u.createPaymentMethod({
|
|
730
|
+
elements: l,
|
|
722
731
|
params: {
|
|
723
|
-
billing_details:
|
|
732
|
+
billing_details: m.billingDetails
|
|
724
733
|
}
|
|
725
734
|
});
|
|
726
|
-
p.error ? (
|
|
735
|
+
p.error ? (kn("error", p.error), n.get.onCheckoutError(p.error.message ?? "Stripe Link unknown error")) : (E("paymentMethod", p.paymentMethod), J.stripeLink.run({
|
|
727
736
|
context: e,
|
|
728
737
|
checkoutPaymentMethod: o,
|
|
729
738
|
nonCdeFormInputs: Te(e.formDiv),
|
|
@@ -734,13 +743,13 @@ const Ie = (e) => async (n) => {
|
|
|
734
743
|
}), {
|
|
735
744
|
isAvailable: !0,
|
|
736
745
|
controller: {
|
|
737
|
-
mountButton:
|
|
746
|
+
mountButton: f,
|
|
738
747
|
dismountButton: _,
|
|
739
|
-
waitForButtonToMount: async () => await
|
|
748
|
+
waitForButtonToMount: async () => await In($e)
|
|
740
749
|
}
|
|
741
750
|
};
|
|
742
751
|
}
|
|
743
|
-
),
|
|
752
|
+
), Tn = Ie(
|
|
744
753
|
async ({
|
|
745
754
|
context: e,
|
|
746
755
|
checkoutPaymentMethod: n,
|
|
@@ -748,29 +757,29 @@ const Ie = (e) => async (n) => {
|
|
|
748
757
|
formCallbacks: o,
|
|
749
758
|
customParams: i
|
|
750
759
|
}) => {
|
|
751
|
-
|
|
760
|
+
E("Running Stripe Link flow...");
|
|
752
761
|
const s = e.anyCdeConnection;
|
|
753
|
-
|
|
754
|
-
const a =
|
|
755
|
-
|
|
756
|
-
const
|
|
762
|
+
E("Merging PM fields with form fields...");
|
|
763
|
+
const a = Rn(r, i.stripePM), c = xe(a, o.get.onValidationError);
|
|
764
|
+
E("Starting payment flow...");
|
|
765
|
+
const l = await fn(s, {
|
|
757
766
|
payment_provider: n.provider,
|
|
758
767
|
checkout_payment_method: n,
|
|
759
768
|
their_existing_pm_id: i.stripePM.id
|
|
760
769
|
});
|
|
761
|
-
|
|
762
|
-
const
|
|
763
|
-
if (
|
|
764
|
-
|
|
765
|
-
const
|
|
766
|
-
secure_token:
|
|
767
|
-
existing_cc_pm_id:
|
|
770
|
+
E("Start payment flow response", l);
|
|
771
|
+
const u = On.parse(l.required_user_actions)[0].our_existing_pm_id, d = await ee(s);
|
|
772
|
+
if (d.mode === "setup") {
|
|
773
|
+
E("Doing payment setup...");
|
|
774
|
+
const f = await Re(s, {
|
|
775
|
+
secure_token: d.token,
|
|
776
|
+
existing_cc_pm_id: u
|
|
768
777
|
});
|
|
769
|
-
return { mode: "setup", result: Ae(
|
|
778
|
+
return { mode: "setup", result: Ae(f) };
|
|
770
779
|
} else {
|
|
771
|
-
|
|
772
|
-
const
|
|
773
|
-
secure_token:
|
|
780
|
+
E("Doing checkout...");
|
|
781
|
+
const f = {
|
|
782
|
+
secure_token: d.token,
|
|
774
783
|
payment_input: {
|
|
775
784
|
provider_type: n.provider
|
|
776
785
|
},
|
|
@@ -778,30 +787,30 @@ const Ie = (e) => async (n) => {
|
|
|
778
787
|
customer_zip_code: c[y.ZIP_CODE],
|
|
779
788
|
customer_country: c[y.COUNTRY],
|
|
780
789
|
promotion_code: c[y.PROMOTION_CODE],
|
|
781
|
-
line_items:
|
|
782
|
-
total_amount_atom:
|
|
790
|
+
line_items: d.line_items,
|
|
791
|
+
total_amount_atom: d.amount_total_atom,
|
|
783
792
|
cancel_at_end: !1,
|
|
784
793
|
checkout_payment_method: n
|
|
785
794
|
};
|
|
786
|
-
return { mode: "checkout", result: await Ct(s,
|
|
795
|
+
return { mode: "checkout", result: await Ct(s, f) };
|
|
787
796
|
}
|
|
788
797
|
}
|
|
789
|
-
),
|
|
798
|
+
), Rn = (e, n) => {
|
|
790
799
|
var r, o, i, s, a;
|
|
791
|
-
const c = { ...e }, [
|
|
792
|
-
return c[y.FIRST_NAME] = c[y.FIRST_NAME] ||
|
|
793
|
-
((i = n.link) == null ? void 0 : i.email) || n.billing_details.email || "op_unfilled@getopenpay.com", c[y.ZIP_CODE] = c[y.ZIP_CODE] || ((s = n.billing_details.address) == null ? void 0 : s.postal_code) || "00000", c[y.COUNTRY] = c[y.COUNTRY] || ((a = n.billing_details.address) == null ? void 0 : a.country) || "US",
|
|
794
|
-
},
|
|
800
|
+
const c = { ...e }, [l, ...u] = ((o = (r = n.billing_details.name) == null ? void 0 : r.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], d = u.join(" ") || void 0;
|
|
801
|
+
return c[y.FIRST_NAME] = c[y.FIRST_NAME] || l || "_OP_UNKNOWN", c[y.LAST_NAME] = c[y.LAST_NAME] || d || "_OP_UNKNOWN", c[y.EMAIL] = c[y.EMAIL] || // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
802
|
+
((i = n.link) == null ? void 0 : i.email) || n.billing_details.email || "op_unfilled@getopenpay.com", c[y.ZIP_CODE] = c[y.ZIP_CODE] || ((s = n.billing_details.address) == null ? void 0 : s.postal_code) || "00000", c[y.COUNTRY] = c[y.COUNTRY] || ((a = n.billing_details.address) == null ? void 0 : a.country) || "US", E("Final form inputs:", c), c;
|
|
803
|
+
}, In = (e) => new Promise((n) => {
|
|
795
804
|
const r = () => {
|
|
796
805
|
const o = document.getElementById(e);
|
|
797
806
|
o ? n(o) : requestAnimationFrame(r);
|
|
798
807
|
};
|
|
799
808
|
r();
|
|
800
|
-
}),
|
|
809
|
+
}), An = "@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2147483648!important;display:flex;justify-content:center;align-items:center;background-color:#00000080}.container{max-width:500px;max-height:600px;width:100%;height:100%;background-color:#fff;position:relative;animation:fadeIn .3s ease-out}.frame{max-width:500px;max-height:600px;width:100%;height:100%;border:none}.cancel-button{position:absolute;background:transparent;border:none;font-size:1rem;color:#fff;cursor:pointer;top:-1.5rem;padding:0;right:0}", xn = (e) => {
|
|
801
810
|
const n = document.createElement("template");
|
|
802
811
|
n.innerHTML = `
|
|
803
812
|
<style>
|
|
804
|
-
${
|
|
813
|
+
${An}
|
|
805
814
|
</style>
|
|
806
815
|
<div class="overlay">
|
|
807
816
|
<div class="container">
|
|
@@ -815,10 +824,10 @@ const Ie = (e) => async (n) => {
|
|
|
815
824
|
const i = o.querySelector("#three-ds-iframe"), s = o.querySelector(".cancel-button");
|
|
816
825
|
return document.body.appendChild(r), { host: r, iframe: i, cancelButton: s };
|
|
817
826
|
};
|
|
818
|
-
function
|
|
827
|
+
function Ln(e, n, r) {
|
|
819
828
|
const o = async () => {
|
|
820
829
|
try {
|
|
821
|
-
const s = await
|
|
830
|
+
const s = await wn(e, r);
|
|
822
831
|
s && (clearInterval(i), n(s));
|
|
823
832
|
} catch {
|
|
824
833
|
}
|
|
@@ -827,36 +836,79 @@ function An(e, n, r) {
|
|
|
827
836
|
const i = setInterval(o, St);
|
|
828
837
|
return i;
|
|
829
838
|
}
|
|
830
|
-
function
|
|
839
|
+
function Mn({
|
|
831
840
|
elements: e,
|
|
832
841
|
pollingInterval: n,
|
|
833
842
|
resolve: r
|
|
834
843
|
}) {
|
|
835
844
|
const o = () => {
|
|
836
|
-
clearInterval(n), e.host.remove(), r(
|
|
845
|
+
clearInterval(n), e.host.remove(), r({ status: q.CANCELLED });
|
|
837
846
|
};
|
|
838
847
|
return e.cancelButton.addEventListener("click", o), () => {
|
|
839
848
|
e.cancelButton.removeEventListener("click", o);
|
|
840
849
|
};
|
|
841
850
|
}
|
|
842
|
-
async function
|
|
843
|
-
url: e,
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
const r = In(e);
|
|
847
|
-
return new Promise((o) => {
|
|
848
|
-
const i = (c) => {
|
|
851
|
+
async function Tt(e) {
|
|
852
|
+
const { url: n, baseUrl: r } = e, o = xn(n);
|
|
853
|
+
return new Promise((i) => {
|
|
854
|
+
const s = (l) => {
|
|
849
855
|
setTimeout(() => {
|
|
850
|
-
|
|
851
|
-
}, 1e3),
|
|
852
|
-
},
|
|
853
|
-
elements:
|
|
854
|
-
pollingInterval:
|
|
855
|
-
resolve:
|
|
856
|
+
o.host.remove();
|
|
857
|
+
}, 1e3), i(l), c == null || c();
|
|
858
|
+
}, a = Ln(o.iframe, s, new URL(r).origin), c = Mn({
|
|
859
|
+
elements: o,
|
|
860
|
+
pollingInterval: a,
|
|
861
|
+
resolve: i
|
|
856
862
|
});
|
|
857
863
|
});
|
|
858
864
|
}
|
|
859
|
-
const
|
|
865
|
+
const Dn = async (e) => {
|
|
866
|
+
const n = await Tt(e);
|
|
867
|
+
if (n.status === q.CANCELLED)
|
|
868
|
+
throw new Error("3DS verification cancelled");
|
|
869
|
+
if (n.status === q.FAILURE)
|
|
870
|
+
throw new Error("3DS verification failed");
|
|
871
|
+
return n.status !== q.SUCCESS && kt(n.status), {
|
|
872
|
+
href: n.href
|
|
873
|
+
};
|
|
874
|
+
}, { log__: Nn, err__: Rt } = M("pockyt-cc"), Un = t.object({
|
|
875
|
+
"op-pockyt-3ds-url": t.string(),
|
|
876
|
+
"op-pockyt-txn-no": t.string(),
|
|
877
|
+
"op-pockyt-ref-no": t.string()
|
|
878
|
+
}), Fn = (e) => {
|
|
879
|
+
const n = Un.safeParse(e);
|
|
880
|
+
if (!n.success) {
|
|
881
|
+
const r = "Unable to process your credit card. Please contact support for assistance.", o = `Pockyt 3DS is required but headers are malformed. Got: ${JSON.stringify(e)}`;
|
|
882
|
+
throw Rt(o), new Error(r);
|
|
883
|
+
}
|
|
884
|
+
return n.data;
|
|
885
|
+
}, $n = (e) => {
|
|
886
|
+
try {
|
|
887
|
+
const n = new URL(e ?? "").searchParams.get("vaultId");
|
|
888
|
+
if (!n)
|
|
889
|
+
throw new Error("No vault ID found in 3DS verification result");
|
|
890
|
+
return Nn(`3DS verification success. [Vault ID: ${n}]`), n;
|
|
891
|
+
} catch (n) {
|
|
892
|
+
const r = "Error verifying 3DS verification result.";
|
|
893
|
+
throw Rt(r, `Resulting URL: ${e}.
|
|
894
|
+
Error: ${Z(n)}`), new Error(r);
|
|
895
|
+
}
|
|
896
|
+
}, zn = (e) => (e == null ? void 0 : e["op-pockyt-3ds-url"]) !== void 0, qn = async (e, n) => {
|
|
897
|
+
const r = Fn(n), o = await Dn({ url: r["op-pockyt-3ds-url"], baseUrl: e });
|
|
898
|
+
return {
|
|
899
|
+
existing_cc: {
|
|
900
|
+
vault_id: $n(o.href ?? ""),
|
|
901
|
+
transaction_no: r["op-pockyt-txn-no"],
|
|
902
|
+
reference_no: r["op-pockyt-ref-no"]
|
|
903
|
+
}
|
|
904
|
+
};
|
|
905
|
+
}, { log__: g, err__: ze } = M("common-cc"), { log__: qe } = M("stripe-cc");
|
|
906
|
+
t.array(
|
|
907
|
+
t.object({
|
|
908
|
+
our_existing_pm_id: t.string()
|
|
909
|
+
})
|
|
910
|
+
).length(1);
|
|
911
|
+
const Hn = Ie(
|
|
860
912
|
async ({
|
|
861
913
|
context: e,
|
|
862
914
|
checkoutPaymentMethod: n,
|
|
@@ -865,91 +917,100 @@ const { log__: v, err__: ze } = D("common-cc"), { log__: qe } = D("stripe-cc"),
|
|
|
865
917
|
customParams: i
|
|
866
918
|
}) => {
|
|
867
919
|
var s;
|
|
868
|
-
|
|
869
|
-
const a = e.anyCdeConnection, c = await
|
|
870
|
-
|
|
871
|
-
const
|
|
872
|
-
v(`├ Tokenizing card info in CDE [Session: ${e.elementsSessionId}]`);
|
|
873
|
-
const l = await yn(i.currentCdeConnections, {
|
|
874
|
-
session_id: e.elementsSessionId
|
|
875
|
-
});
|
|
876
|
-
En(l, o.get.onValidationError);
|
|
877
|
-
const m = {
|
|
920
|
+
g("├ Running common CC flow...", { checkoutPaymentMethod: n });
|
|
921
|
+
const a = e.anyCdeConnection, c = await ee(a);
|
|
922
|
+
g(`├ Validating non-CDE form fields [Mode: ${c.mode}]`);
|
|
923
|
+
const l = xe(r, o.get.onValidationError), u = {
|
|
878
924
|
session_id: e.elementsSessionId,
|
|
879
925
|
checkout_payment_method: n,
|
|
880
|
-
non_cde_form_fields:
|
|
926
|
+
non_cde_form_fields: l,
|
|
927
|
+
extra_metadata: {}
|
|
881
928
|
};
|
|
882
929
|
try {
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
930
|
+
g(`├ Tokenizing card info in CDE [Session: ${e.elementsSessionId}]`);
|
|
931
|
+
const d = await bn(i.currentCdeConnections, {
|
|
932
|
+
session_id: e.elementsSessionId
|
|
933
|
+
});
|
|
934
|
+
if (Sn(d, o.get.onValidationError), c.mode === "setup") {
|
|
935
|
+
g(`├ Setting up payment method in CDE [Token: ${c.token}]`);
|
|
936
|
+
const f = await vn(a, u);
|
|
937
|
+
return g(`╰ Setup completed successfully [PM ID: ${f.payment_method_id}]`), { mode: "setup", result: f };
|
|
887
938
|
} else {
|
|
888
|
-
|
|
889
|
-
const
|
|
890
|
-
return
|
|
939
|
+
g(`├ Initial checkout flow. Checking out card info in CDE [Session: ${e.elementsSessionId}]`);
|
|
940
|
+
const f = await Fe(a, u);
|
|
941
|
+
return g("╰ Checkout completed successfully."), { mode: "checkout", result: f };
|
|
891
942
|
}
|
|
892
|
-
} catch (
|
|
893
|
-
if (
|
|
894
|
-
|
|
895
|
-
const
|
|
896
|
-
if (
|
|
897
|
-
|
|
898
|
-
const
|
|
943
|
+
} catch (d) {
|
|
944
|
+
if (d instanceof wt && d.originalErrorMessage.includes("3DS_REQUIRED")) {
|
|
945
|
+
g("├ Card requires 3DS, starting non-legacy payment flow"), g("Received 3DS error response headers:", d.response.headers);
|
|
946
|
+
const f = zn(d.response.headers);
|
|
947
|
+
if (f) {
|
|
948
|
+
g("├ Pockyt 3DS case detected. Going through Pockyt 3DS flow.");
|
|
949
|
+
const h = await qn(e.baseUrl, d.response.headers);
|
|
950
|
+
u.extra_metadata.pockyt = h;
|
|
951
|
+
}
|
|
952
|
+
const _ = await yn(a, u);
|
|
953
|
+
g("├ Payment flow result:", _);
|
|
954
|
+
const m = ((s = d.response.headers) == null ? void 0 : s["op-should-use-new-flow"]) !== "true";
|
|
955
|
+
f ? g("├ Pockyt 3DS is successful, other 3DS flows will be skipped.") : m ? (g("├ Using stripe 3DS flow"), await Bn(_)) : (g("├ Using common 3DS flow"), await Kn(_, e.baseUrl));
|
|
956
|
+
const p = _.cc_pm_id;
|
|
957
|
+
if (c.mode === "setup") {
|
|
958
|
+
g(`├ Confirming payment flow [cc_pm_id: ${p}]`);
|
|
959
|
+
const h = await Re(a, {
|
|
899
960
|
secure_token: c.token,
|
|
900
|
-
existing_cc_pm_id:
|
|
961
|
+
existing_cc_pm_id: p
|
|
901
962
|
});
|
|
902
|
-
|
|
903
|
-
const
|
|
904
|
-
return
|
|
963
|
+
g("├ Confirm payment flow result received Result:", h);
|
|
964
|
+
const j = Ae(h);
|
|
965
|
+
return g(`╰ Setup completed successfully [PM ID: ${j.payment_method_id}]`), { mode: "setup", result: j };
|
|
905
966
|
} else {
|
|
906
|
-
|
|
907
|
-
const
|
|
908
|
-
...
|
|
909
|
-
existing_cc_pm_id:
|
|
910
|
-
do_not_use_legacy_cc_flow:
|
|
967
|
+
g(`├ Checking out after 3DS flow [Flow: ${m ? "legacy" : "new"}]`);
|
|
968
|
+
const h = await Fe(a, {
|
|
969
|
+
...u,
|
|
970
|
+
existing_cc_pm_id: p,
|
|
971
|
+
do_not_use_legacy_cc_flow: m
|
|
911
972
|
});
|
|
912
|
-
return
|
|
973
|
+
return g("╰ Checkout completed successfully."), { mode: "checkout", result: h };
|
|
913
974
|
}
|
|
914
975
|
}
|
|
915
|
-
throw ze("╰ Error checking out card info in CDE"), ze(
|
|
976
|
+
throw ze("╰ Error checking out card info in CDE"), ze(d), d;
|
|
916
977
|
}
|
|
917
978
|
}
|
|
918
|
-
),
|
|
979
|
+
), Vn = (e) => {
|
|
919
980
|
const n = e.required_user_actions.find((r) => r.type === "stripe_3ds");
|
|
920
981
|
if (!n)
|
|
921
982
|
throw new Error("No stripe 3DS action found");
|
|
922
|
-
return
|
|
923
|
-
},
|
|
983
|
+
return Lr.parse(n);
|
|
984
|
+
}, Yn = (e) => {
|
|
924
985
|
const n = e.required_user_actions.find((r) => r.type === "airwallex_payment_consent");
|
|
925
986
|
if (!n)
|
|
926
987
|
throw new Error("No common 3DS action found");
|
|
927
|
-
return
|
|
928
|
-
},
|
|
929
|
-
const r =
|
|
930
|
-
|
|
931
|
-
const o = await
|
|
932
|
-
if (
|
|
988
|
+
return Ar.parse(n);
|
|
989
|
+
}, Kn = async (e, n) => {
|
|
990
|
+
const r = Yn(e);
|
|
991
|
+
g(`├ Using common 3DS flow [URL: ${r.redirect_url}]`);
|
|
992
|
+
const { status: o } = await Tt({ url: r.redirect_url, baseUrl: n });
|
|
993
|
+
if (g(`╰ 3DS verification completed [Status: ${o}]`), o === q.CANCELLED)
|
|
933
994
|
throw new Error("3DS verification cancelled");
|
|
934
|
-
if (o ===
|
|
995
|
+
if (o === q.FAILURE)
|
|
935
996
|
throw new Error("3DS verification failed");
|
|
936
|
-
},
|
|
937
|
-
const n =
|
|
938
|
-
qe(`├ Using stripe 3DS flow [Client Secret: ${n.client_secret.substring(0, 8)}...]`), await
|
|
939
|
-
}, { log__: O, err__:
|
|
997
|
+
}, Bn = async (e) => {
|
|
998
|
+
const n = Vn(e);
|
|
999
|
+
qe(`├ Using stripe 3DS flow [Client Secret: ${n.client_secret.substring(0, 8)}...]`), await qr(n), qe("╰ Stripe 3DS flow completed successfully");
|
|
1000
|
+
}, { log__: O, err__: Zn } = M("stripe-pr"), Jn = t.object({
|
|
940
1001
|
provider: t.union([t.literal("apple_pay"), t.literal("google_pay")]),
|
|
941
1002
|
processor_name: t.literal("stripe"),
|
|
942
1003
|
metadata: t.object({
|
|
943
1004
|
stripe_pk: t.string()
|
|
944
1005
|
})
|
|
945
|
-
}),
|
|
1006
|
+
}), Gn = Pt(
|
|
946
1007
|
async ({ context: e }) => {
|
|
947
1008
|
O("Checking if there are any CPMs for Stripe PR...");
|
|
948
|
-
const n =
|
|
1009
|
+
const n = Ot(e.checkoutPaymentMethods, Jn);
|
|
949
1010
|
O("Initializing Stripe PR flow...");
|
|
950
|
-
const r = e.anyCdeConnection, o = await
|
|
1011
|
+
const r = e.anyCdeConnection, o = await ee(r), i = o.mode === "setup";
|
|
951
1012
|
O("Getting initial preview amount");
|
|
952
|
-
const s = await Et(r, o.token, i, void 0), a = await
|
|
1013
|
+
const s = await Et(r, o.token, i, void 0), a = await Ur(
|
|
953
1014
|
n.metadata.stripe_pk,
|
|
954
1015
|
s.amountAtom,
|
|
955
1016
|
s.currency,
|
|
@@ -957,7 +1018,7 @@ const { log__: v, err__: ze } = D("common-cc"), { log__: qe } = D("stripe-cc"),
|
|
|
957
1018
|
);
|
|
958
1019
|
O("Checking if can make payment");
|
|
959
1020
|
const c = await a.canMakePayment();
|
|
960
|
-
return c === null ? (
|
|
1021
|
+
return c === null ? (Zn("canMakePayment returned null"), { isAvailable: !1, reason: "canMakePayment returned null" }) : (O("Stripe PR flow initialized successfully. Can make payment", c), {
|
|
961
1022
|
isAvailable: !0,
|
|
962
1023
|
pr: a,
|
|
963
1024
|
availableProviders: {
|
|
@@ -966,7 +1027,7 @@ const { log__: v, err__: ze } = D("common-cc"), { log__: qe } = D("stripe-cc"),
|
|
|
966
1027
|
}
|
|
967
1028
|
});
|
|
968
1029
|
}
|
|
969
|
-
),
|
|
1030
|
+
), Wn = Ie(
|
|
970
1031
|
async ({
|
|
971
1032
|
context: e,
|
|
972
1033
|
checkoutPaymentMethod: n,
|
|
@@ -980,49 +1041,49 @@ const { log__: v, err__: ze } = D("common-cc"), { log__: qe } = D("stripe-cc"),
|
|
|
980
1041
|
const a = e.anyCdeConnection, c = s.pr;
|
|
981
1042
|
if (i != null && i.overridePaymentRequest) {
|
|
982
1043
|
const p = i.overridePaymentRequest;
|
|
983
|
-
O("Overriding PR amount with", p),
|
|
1044
|
+
O("Overriding PR amount with", p), Qn(c, p.amount, p.pending);
|
|
984
1045
|
}
|
|
985
1046
|
O("Showing PR dialog..."), c.show();
|
|
986
|
-
const
|
|
987
|
-
O("Stripe PM added event:",
|
|
988
|
-
const
|
|
1047
|
+
const l = await $r(c);
|
|
1048
|
+
O("Stripe PM added event:", l), O("Merging PM fields with form fields...");
|
|
1049
|
+
const u = Xn(r, l), d = xe(u, o.get.onValidationError);
|
|
989
1050
|
O("PR dialog finished. Starting payment flow...");
|
|
990
|
-
const
|
|
991
|
-
fields:
|
|
1051
|
+
const f = await _n(a, {
|
|
1052
|
+
fields: d,
|
|
992
1053
|
checkoutPaymentMethod: n
|
|
993
|
-
}), _ =
|
|
994
|
-
O("Confirming PR with Stripe..."), await
|
|
995
|
-
const
|
|
996
|
-
if (
|
|
1054
|
+
}), _ = eo(f);
|
|
1055
|
+
O("Confirming PR with Stripe..."), await zr(_, l);
|
|
1056
|
+
const m = await ee(a);
|
|
1057
|
+
if (m.mode === "setup") {
|
|
997
1058
|
O("Confirming payment flow for setup...");
|
|
998
1059
|
const p = await Re(a, {
|
|
999
|
-
secure_token:
|
|
1060
|
+
secure_token: m.token
|
|
1000
1061
|
});
|
|
1001
1062
|
return { mode: "setup", result: Ae(p) };
|
|
1002
1063
|
} else {
|
|
1003
1064
|
O("Performing checkout...");
|
|
1004
1065
|
const p = {
|
|
1005
|
-
secure_token:
|
|
1066
|
+
secure_token: m.token,
|
|
1006
1067
|
payment_input: {
|
|
1007
1068
|
provider_type: n.provider
|
|
1008
1069
|
},
|
|
1009
|
-
customer_email:
|
|
1010
|
-
customer_zip_code:
|
|
1011
|
-
customer_country:
|
|
1012
|
-
promotion_code:
|
|
1013
|
-
line_items:
|
|
1014
|
-
total_amount_atom:
|
|
1070
|
+
customer_email: d[y.EMAIL],
|
|
1071
|
+
customer_zip_code: d[y.ZIP_CODE],
|
|
1072
|
+
customer_country: d[y.COUNTRY],
|
|
1073
|
+
promotion_code: d[y.PROMOTION_CODE],
|
|
1074
|
+
line_items: m.line_items,
|
|
1075
|
+
total_amount_atom: m.amount_total_atom,
|
|
1015
1076
|
cancel_at_end: !1,
|
|
1016
1077
|
checkout_payment_method: n
|
|
1017
1078
|
};
|
|
1018
1079
|
return { mode: "checkout", result: await Ct(a, p) };
|
|
1019
1080
|
}
|
|
1020
1081
|
}
|
|
1021
|
-
),
|
|
1082
|
+
), Xn = (e, n) => {
|
|
1022
1083
|
var r, o, i, s;
|
|
1023
|
-
const a = { ...e }, [c, ...
|
|
1024
|
-
return a[y.FIRST_NAME] = a[y.FIRST_NAME] || c || "_OP_UNKNOWN", a[y.LAST_NAME] = a[y.LAST_NAME] ||
|
|
1025
|
-
},
|
|
1084
|
+
const a = { ...e }, [c, ...l] = ((o = (r = n.payerName) == null ? void 0 : r.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], u = l.join(" ") || void 0;
|
|
1085
|
+
return a[y.FIRST_NAME] = a[y.FIRST_NAME] || c || "_OP_UNKNOWN", a[y.LAST_NAME] = a[y.LAST_NAME] || u || "_OP_UNKNOWN", a[y.EMAIL] = a[y.EMAIL] || n.payerEmail || "op_unfilled@getopenpay.com", a[y.ZIP_CODE] = a[y.ZIP_CODE] || ((i = n.shippingAddress) == null ? void 0 : i.postalCode) || "00000", a[y.COUNTRY] = a[y.COUNTRY] || ((s = n.shippingAddress) == null ? void 0 : s.country) || "US", O("Final form inputs:", a), a;
|
|
1086
|
+
}, Qn = (e, n, r) => {
|
|
1026
1087
|
e.update({
|
|
1027
1088
|
total: {
|
|
1028
1089
|
amount: n.amountAtom,
|
|
@@ -1031,34 +1092,34 @@ const { log__: v, err__: ze } = D("common-cc"), { log__: qe } = D("stripe-cc"),
|
|
|
1031
1092
|
},
|
|
1032
1093
|
currency: n.currency
|
|
1033
1094
|
});
|
|
1034
|
-
},
|
|
1095
|
+
}, eo = (e) => {
|
|
1035
1096
|
if (e.required_user_actions.length !== 1)
|
|
1036
1097
|
throw new Error(`Error occurred.
|
|
1037
1098
|
Details: got ${e.required_user_actions.length} required user actions`);
|
|
1038
|
-
return
|
|
1039
|
-
},
|
|
1099
|
+
return Mr.parse(e.required_user_actions[0]);
|
|
1100
|
+
}, It = (e, n, r) => {
|
|
1040
1101
|
const o = e.filter((i) => i.provider === n);
|
|
1041
1102
|
if (o.length === 0)
|
|
1042
1103
|
throw console.error("CPMs list", e), new Error(`No CPMs found with provider '${n}' and processor '${r}'`);
|
|
1043
1104
|
if (o.length !== 1)
|
|
1044
1105
|
throw console.error("CPMs list", e), new Error(`More than one CPM found with provider '${n}' and processor '${r}'`);
|
|
1045
1106
|
return o[0];
|
|
1046
|
-
},
|
|
1107
|
+
}, J = {
|
|
1047
1108
|
// ✋ Note: For flows that require initialization, please add them to `init-flows.ts`
|
|
1048
1109
|
// Common
|
|
1049
1110
|
commonCC: {
|
|
1050
1111
|
init: async () => {
|
|
1051
1112
|
},
|
|
1052
|
-
run:
|
|
1113
|
+
run: Hn
|
|
1053
1114
|
},
|
|
1054
1115
|
// Stripe
|
|
1055
1116
|
stripePR: {
|
|
1056
|
-
init:
|
|
1057
|
-
run:
|
|
1117
|
+
init: Gn,
|
|
1118
|
+
run: Wn
|
|
1058
1119
|
},
|
|
1059
1120
|
stripeLink: {
|
|
1060
|
-
init:
|
|
1061
|
-
run:
|
|
1121
|
+
init: jn,
|
|
1122
|
+
run: Tn
|
|
1062
1123
|
}
|
|
1063
1124
|
// 👉 Add more flows here
|
|
1064
1125
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -1079,34 +1140,34 @@ function z(e, n) {
|
|
|
1079
1140
|
}
|
|
1080
1141
|
e.prototype = n === null ? Object.create(n) : (r.prototype = n.prototype, new r());
|
|
1081
1142
|
}
|
|
1082
|
-
function
|
|
1143
|
+
function to(e, n, r, o) {
|
|
1083
1144
|
function i(s) {
|
|
1084
1145
|
return s instanceof r ? s : new r(function(a) {
|
|
1085
1146
|
a(s);
|
|
1086
1147
|
});
|
|
1087
1148
|
}
|
|
1088
1149
|
return new (r || (r = Promise))(function(s, a) {
|
|
1089
|
-
function c(
|
|
1150
|
+
function c(d) {
|
|
1090
1151
|
try {
|
|
1091
|
-
|
|
1092
|
-
} catch (
|
|
1093
|
-
a(
|
|
1152
|
+
u(o.next(d));
|
|
1153
|
+
} catch (f) {
|
|
1154
|
+
a(f);
|
|
1094
1155
|
}
|
|
1095
1156
|
}
|
|
1096
|
-
function
|
|
1157
|
+
function l(d) {
|
|
1097
1158
|
try {
|
|
1098
|
-
|
|
1099
|
-
} catch (
|
|
1100
|
-
a(
|
|
1159
|
+
u(o.throw(d));
|
|
1160
|
+
} catch (f) {
|
|
1161
|
+
a(f);
|
|
1101
1162
|
}
|
|
1102
1163
|
}
|
|
1103
|
-
function
|
|
1104
|
-
|
|
1164
|
+
function u(d) {
|
|
1165
|
+
d.done ? s(d.value) : i(d.value).then(c, l);
|
|
1105
1166
|
}
|
|
1106
|
-
|
|
1167
|
+
u((o = o.apply(e, [])).next());
|
|
1107
1168
|
});
|
|
1108
1169
|
}
|
|
1109
|
-
function
|
|
1170
|
+
function At(e, n) {
|
|
1110
1171
|
var r = { label: 0, sent: function() {
|
|
1111
1172
|
if (s[0] & 1) throw s[1];
|
|
1112
1173
|
return s[1];
|
|
@@ -1114,59 +1175,59 @@ function Tt(e, n) {
|
|
|
1114
1175
|
return a.next = c(0), a.throw = c(1), a.return = c(2), typeof Symbol == "function" && (a[Symbol.iterator] = function() {
|
|
1115
1176
|
return this;
|
|
1116
1177
|
}), a;
|
|
1117
|
-
function c(
|
|
1118
|
-
return function(
|
|
1119
|
-
return
|
|
1178
|
+
function c(u) {
|
|
1179
|
+
return function(d) {
|
|
1180
|
+
return l([u, d]);
|
|
1120
1181
|
};
|
|
1121
1182
|
}
|
|
1122
|
-
function u
|
|
1183
|
+
function l(u) {
|
|
1123
1184
|
if (o) throw new TypeError("Generator is already executing.");
|
|
1124
|
-
for (; a && (a = 0,
|
|
1125
|
-
if (o = 1, i && (s =
|
|
1126
|
-
switch (i = 0, s && (
|
|
1185
|
+
for (; a && (a = 0, u[0] && (r = 0)), r; ) try {
|
|
1186
|
+
if (o = 1, i && (s = u[0] & 2 ? i.return : u[0] ? i.throw || ((s = i.return) && s.call(i), 0) : i.next) && !(s = s.call(i, u[1])).done) return s;
|
|
1187
|
+
switch (i = 0, s && (u = [u[0] & 2, s.value]), u[0]) {
|
|
1127
1188
|
case 0:
|
|
1128
1189
|
case 1:
|
|
1129
|
-
s =
|
|
1190
|
+
s = u;
|
|
1130
1191
|
break;
|
|
1131
1192
|
case 4:
|
|
1132
|
-
return r.label++, { value:
|
|
1193
|
+
return r.label++, { value: u[1], done: !1 };
|
|
1133
1194
|
case 5:
|
|
1134
|
-
r.label++, i =
|
|
1195
|
+
r.label++, i = u[1], u = [0];
|
|
1135
1196
|
continue;
|
|
1136
1197
|
case 7:
|
|
1137
|
-
|
|
1198
|
+
u = r.ops.pop(), r.trys.pop();
|
|
1138
1199
|
continue;
|
|
1139
1200
|
default:
|
|
1140
|
-
if (s = r.trys, !(s = s.length > 0 && s[s.length - 1]) && (
|
|
1201
|
+
if (s = r.trys, !(s = s.length > 0 && s[s.length - 1]) && (u[0] === 6 || u[0] === 2)) {
|
|
1141
1202
|
r = 0;
|
|
1142
1203
|
continue;
|
|
1143
1204
|
}
|
|
1144
|
-
if (
|
|
1145
|
-
r.label =
|
|
1205
|
+
if (u[0] === 3 && (!s || u[1] > s[0] && u[1] < s[3])) {
|
|
1206
|
+
r.label = u[1];
|
|
1146
1207
|
break;
|
|
1147
1208
|
}
|
|
1148
|
-
if (
|
|
1149
|
-
r.label = s[1], s =
|
|
1209
|
+
if (u[0] === 6 && r.label < s[1]) {
|
|
1210
|
+
r.label = s[1], s = u;
|
|
1150
1211
|
break;
|
|
1151
1212
|
}
|
|
1152
1213
|
if (s && r.label < s[2]) {
|
|
1153
|
-
r.label = s[2], r.ops.push(
|
|
1214
|
+
r.label = s[2], r.ops.push(u);
|
|
1154
1215
|
break;
|
|
1155
1216
|
}
|
|
1156
1217
|
s[2] && r.ops.pop(), r.trys.pop();
|
|
1157
1218
|
continue;
|
|
1158
1219
|
}
|
|
1159
|
-
|
|
1160
|
-
} catch (
|
|
1161
|
-
|
|
1220
|
+
u = n.call(e, r);
|
|
1221
|
+
} catch (d) {
|
|
1222
|
+
u = [6, d], i = 0;
|
|
1162
1223
|
} finally {
|
|
1163
1224
|
o = s = 0;
|
|
1164
1225
|
}
|
|
1165
|
-
if (
|
|
1166
|
-
return { value:
|
|
1226
|
+
if (u[0] & 5) throw u[1];
|
|
1227
|
+
return { value: u[0] ? u[1] : void 0, done: !0 };
|
|
1167
1228
|
}
|
|
1168
1229
|
}
|
|
1169
|
-
function
|
|
1230
|
+
function G(e) {
|
|
1170
1231
|
var n = typeof Symbol == "function" && Symbol.iterator, r = n && e[n], o = 0;
|
|
1171
1232
|
if (r) return r.call(e);
|
|
1172
1233
|
if (e && typeof e.length == "number") return {
|
|
@@ -1176,7 +1237,7 @@ function Z(e) {
|
|
|
1176
1237
|
};
|
|
1177
1238
|
throw new TypeError(n ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
1178
1239
|
}
|
|
1179
|
-
function
|
|
1240
|
+
function le(e, n) {
|
|
1180
1241
|
var r = typeof Symbol == "function" && e[Symbol.iterator];
|
|
1181
1242
|
if (!r) return e;
|
|
1182
1243
|
var o = r.call(e), i, s = [], a;
|
|
@@ -1193,72 +1254,72 @@ function ue(e, n) {
|
|
|
1193
1254
|
}
|
|
1194
1255
|
return s;
|
|
1195
1256
|
}
|
|
1196
|
-
function
|
|
1257
|
+
function ue(e, n, r) {
|
|
1197
1258
|
if (arguments.length === 2) for (var o = 0, i = n.length, s; o < i; o++)
|
|
1198
1259
|
(s || !(o in n)) && (s || (s = Array.prototype.slice.call(n, 0, o)), s[o] = n[o]);
|
|
1199
1260
|
return e.concat(s || Array.prototype.slice.call(n));
|
|
1200
1261
|
}
|
|
1201
|
-
function
|
|
1202
|
-
return this instanceof
|
|
1262
|
+
function B(e) {
|
|
1263
|
+
return this instanceof B ? (this.v = e, this) : new B(e);
|
|
1203
1264
|
}
|
|
1204
|
-
function
|
|
1265
|
+
function ro(e, n, r) {
|
|
1205
1266
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
1206
1267
|
var o = r.apply(e, n || []), i, s = [];
|
|
1207
1268
|
return i = Object.create((typeof AsyncIterator == "function" ? AsyncIterator : Object).prototype), c("next"), c("throw"), c("return", a), i[Symbol.asyncIterator] = function() {
|
|
1208
1269
|
return this;
|
|
1209
1270
|
}, i;
|
|
1210
|
-
function a(
|
|
1271
|
+
function a(m) {
|
|
1211
1272
|
return function(p) {
|
|
1212
|
-
return Promise.resolve(p).then(
|
|
1273
|
+
return Promise.resolve(p).then(m, f);
|
|
1213
1274
|
};
|
|
1214
1275
|
}
|
|
1215
|
-
function c(
|
|
1216
|
-
o[
|
|
1217
|
-
return new Promise(function(
|
|
1218
|
-
s.push([
|
|
1276
|
+
function c(m, p) {
|
|
1277
|
+
o[m] && (i[m] = function(h) {
|
|
1278
|
+
return new Promise(function(j, ne) {
|
|
1279
|
+
s.push([m, h, j, ne]) > 1 || l(m, h);
|
|
1219
1280
|
});
|
|
1220
|
-
}, p && (i[
|
|
1281
|
+
}, p && (i[m] = p(i[m])));
|
|
1221
1282
|
}
|
|
1222
|
-
function
|
|
1283
|
+
function l(m, p) {
|
|
1223
1284
|
try {
|
|
1224
|
-
|
|
1225
|
-
} catch (
|
|
1226
|
-
_(s[0][3],
|
|
1285
|
+
u(o[m](p));
|
|
1286
|
+
} catch (h) {
|
|
1287
|
+
_(s[0][3], h);
|
|
1227
1288
|
}
|
|
1228
1289
|
}
|
|
1229
|
-
function
|
|
1230
|
-
|
|
1290
|
+
function u(m) {
|
|
1291
|
+
m.value instanceof B ? Promise.resolve(m.value.v).then(d, f) : _(s[0][2], m);
|
|
1231
1292
|
}
|
|
1232
|
-
function m
|
|
1233
|
-
|
|
1293
|
+
function d(m) {
|
|
1294
|
+
l("next", m);
|
|
1234
1295
|
}
|
|
1235
|
-
function
|
|
1236
|
-
|
|
1296
|
+
function f(m) {
|
|
1297
|
+
l("throw", m);
|
|
1237
1298
|
}
|
|
1238
|
-
function _(
|
|
1239
|
-
|
|
1299
|
+
function _(m, p) {
|
|
1300
|
+
m(p), s.shift(), s.length && l(s[0][0], s[0][1]);
|
|
1240
1301
|
}
|
|
1241
1302
|
}
|
|
1242
|
-
function
|
|
1303
|
+
function no(e) {
|
|
1243
1304
|
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
1244
1305
|
var n = e[Symbol.asyncIterator], r;
|
|
1245
|
-
return n ? n.call(e) : (e = typeof
|
|
1306
|
+
return n ? n.call(e) : (e = typeof G == "function" ? G(e) : e[Symbol.iterator](), r = {}, o("next"), o("throw"), o("return"), r[Symbol.asyncIterator] = function() {
|
|
1246
1307
|
return this;
|
|
1247
1308
|
}, r);
|
|
1248
1309
|
function o(s) {
|
|
1249
1310
|
r[s] = e[s] && function(a) {
|
|
1250
|
-
return new Promise(function(c,
|
|
1251
|
-
a = e[s](a), i(c,
|
|
1311
|
+
return new Promise(function(c, l) {
|
|
1312
|
+
a = e[s](a), i(c, l, a.done, a.value);
|
|
1252
1313
|
});
|
|
1253
1314
|
};
|
|
1254
1315
|
}
|
|
1255
|
-
function i(s, a, c,
|
|
1256
|
-
Promise.resolve(
|
|
1257
|
-
s({ value:
|
|
1316
|
+
function i(s, a, c, l) {
|
|
1317
|
+
Promise.resolve(l).then(function(u) {
|
|
1318
|
+
s({ value: u, done: c });
|
|
1258
1319
|
}, a);
|
|
1259
1320
|
}
|
|
1260
1321
|
}
|
|
1261
|
-
function
|
|
1322
|
+
function S(e) {
|
|
1262
1323
|
return typeof e == "function";
|
|
1263
1324
|
}
|
|
1264
1325
|
function fe(e) {
|
|
@@ -1282,7 +1343,7 @@ function de(e, n) {
|
|
|
1282
1343
|
0 <= r && e.splice(r, 1);
|
|
1283
1344
|
}
|
|
1284
1345
|
}
|
|
1285
|
-
var
|
|
1346
|
+
var te = function() {
|
|
1286
1347
|
function e(n) {
|
|
1287
1348
|
this.initialTeardown = n, this.closed = !1, this._parentage = null, this._finalizers = null;
|
|
1288
1349
|
}
|
|
@@ -1294,45 +1355,45 @@ var ee = function() {
|
|
|
1294
1355
|
if (a)
|
|
1295
1356
|
if (this._parentage = null, Array.isArray(a))
|
|
1296
1357
|
try {
|
|
1297
|
-
for (var c =
|
|
1298
|
-
var
|
|
1299
|
-
|
|
1358
|
+
for (var c = G(a), l = c.next(); !l.done; l = c.next()) {
|
|
1359
|
+
var u = l.value;
|
|
1360
|
+
u.remove(this);
|
|
1300
1361
|
}
|
|
1301
|
-
} catch (
|
|
1302
|
-
n = { error:
|
|
1362
|
+
} catch (h) {
|
|
1363
|
+
n = { error: h };
|
|
1303
1364
|
} finally {
|
|
1304
1365
|
try {
|
|
1305
|
-
|
|
1366
|
+
l && !l.done && (r = c.return) && r.call(c);
|
|
1306
1367
|
} finally {
|
|
1307
1368
|
if (n) throw n.error;
|
|
1308
1369
|
}
|
|
1309
1370
|
}
|
|
1310
1371
|
else
|
|
1311
1372
|
a.remove(this);
|
|
1312
|
-
var
|
|
1313
|
-
if (
|
|
1373
|
+
var d = this.initialTeardown;
|
|
1374
|
+
if (S(d))
|
|
1314
1375
|
try {
|
|
1315
|
-
|
|
1316
|
-
} catch (
|
|
1317
|
-
s =
|
|
1376
|
+
d();
|
|
1377
|
+
} catch (h) {
|
|
1378
|
+
s = h instanceof we ? h.errors : [h];
|
|
1318
1379
|
}
|
|
1319
|
-
var
|
|
1320
|
-
if (
|
|
1380
|
+
var f = this._finalizers;
|
|
1381
|
+
if (f) {
|
|
1321
1382
|
this._finalizers = null;
|
|
1322
1383
|
try {
|
|
1323
|
-
for (var _ =
|
|
1324
|
-
var p =
|
|
1384
|
+
for (var _ = G(f), m = _.next(); !m.done; m = _.next()) {
|
|
1385
|
+
var p = m.value;
|
|
1325
1386
|
try {
|
|
1326
1387
|
He(p);
|
|
1327
|
-
} catch (
|
|
1328
|
-
s = s ?? [],
|
|
1388
|
+
} catch (h) {
|
|
1389
|
+
s = s ?? [], h instanceof we ? s = ue(ue([], le(s)), le(h.errors)) : s.push(h);
|
|
1329
1390
|
}
|
|
1330
1391
|
}
|
|
1331
|
-
} catch (
|
|
1332
|
-
o = { error:
|
|
1392
|
+
} catch (h) {
|
|
1393
|
+
o = { error: h };
|
|
1333
1394
|
} finally {
|
|
1334
1395
|
try {
|
|
1335
|
-
|
|
1396
|
+
m && !m.done && (i = _.return) && i.call(_);
|
|
1336
1397
|
} finally {
|
|
1337
1398
|
if (o) throw o.error;
|
|
1338
1399
|
}
|
|
@@ -1370,45 +1431,45 @@ var ee = function() {
|
|
|
1370
1431
|
var n = new e();
|
|
1371
1432
|
return n.closed = !0, n;
|
|
1372
1433
|
}(), e;
|
|
1373
|
-
}(),
|
|
1374
|
-
function
|
|
1375
|
-
return e instanceof
|
|
1434
|
+
}(), xt = te.EMPTY;
|
|
1435
|
+
function Lt(e) {
|
|
1436
|
+
return e instanceof te || e && "closed" in e && S(e.remove) && S(e.add) && S(e.unsubscribe);
|
|
1376
1437
|
}
|
|
1377
1438
|
function He(e) {
|
|
1378
|
-
|
|
1439
|
+
S(e) ? e() : e.unsubscribe();
|
|
1379
1440
|
}
|
|
1380
|
-
var
|
|
1441
|
+
var Mt = {
|
|
1381
1442
|
onUnhandledError: null,
|
|
1382
1443
|
onStoppedNotification: null,
|
|
1383
1444
|
Promise: void 0,
|
|
1384
1445
|
useDeprecatedSynchronousErrorHandling: !1,
|
|
1385
1446
|
useDeprecatedNextContext: !1
|
|
1386
|
-
},
|
|
1447
|
+
}, oo = {
|
|
1387
1448
|
setTimeout: function(e, n) {
|
|
1388
1449
|
for (var r = [], o = 2; o < arguments.length; o++)
|
|
1389
1450
|
r[o - 2] = arguments[o];
|
|
1390
|
-
return setTimeout.apply(void 0,
|
|
1451
|
+
return setTimeout.apply(void 0, ue([e, n], le(r)));
|
|
1391
1452
|
},
|
|
1392
1453
|
clearTimeout: function(e) {
|
|
1393
1454
|
return clearTimeout(e);
|
|
1394
1455
|
},
|
|
1395
1456
|
delegate: void 0
|
|
1396
1457
|
};
|
|
1397
|
-
function
|
|
1398
|
-
|
|
1458
|
+
function Dt(e) {
|
|
1459
|
+
oo.setTimeout(function() {
|
|
1399
1460
|
throw e;
|
|
1400
1461
|
});
|
|
1401
1462
|
}
|
|
1402
1463
|
function Ve() {
|
|
1403
1464
|
}
|
|
1404
|
-
function
|
|
1465
|
+
function ie(e) {
|
|
1405
1466
|
e();
|
|
1406
1467
|
}
|
|
1407
|
-
var
|
|
1468
|
+
var Le = function(e) {
|
|
1408
1469
|
z(n, e);
|
|
1409
1470
|
function n(r) {
|
|
1410
1471
|
var o = e.call(this) || this;
|
|
1411
|
-
return o.isStopped = !1, r ? (o.destination = r,
|
|
1472
|
+
return o.isStopped = !1, r ? (o.destination = r, Lt(r) && r.add(o)) : o.destination = co, o;
|
|
1412
1473
|
}
|
|
1413
1474
|
return n.create = function(r, o, i) {
|
|
1414
1475
|
return new Oe(r, o, i);
|
|
@@ -1435,11 +1496,11 @@ var Me = function(e) {
|
|
|
1435
1496
|
this.unsubscribe();
|
|
1436
1497
|
}
|
|
1437
1498
|
}, n;
|
|
1438
|
-
}(
|
|
1499
|
+
}(te), io = Function.prototype.bind;
|
|
1439
1500
|
function Ee(e, n) {
|
|
1440
|
-
return
|
|
1501
|
+
return io.call(e, n);
|
|
1441
1502
|
}
|
|
1442
|
-
var
|
|
1503
|
+
var so = function() {
|
|
1443
1504
|
function e(n) {
|
|
1444
1505
|
this.partialObserver = n;
|
|
1445
1506
|
}
|
|
@@ -1449,7 +1510,7 @@ var Xn = function() {
|
|
|
1449
1510
|
try {
|
|
1450
1511
|
r.next(n);
|
|
1451
1512
|
} catch (o) {
|
|
1452
|
-
|
|
1513
|
+
oe(o);
|
|
1453
1514
|
}
|
|
1454
1515
|
}, e.prototype.error = function(n) {
|
|
1455
1516
|
var r = this.partialObserver;
|
|
@@ -1457,24 +1518,24 @@ var Xn = function() {
|
|
|
1457
1518
|
try {
|
|
1458
1519
|
r.error(n);
|
|
1459
1520
|
} catch (o) {
|
|
1460
|
-
|
|
1521
|
+
oe(o);
|
|
1461
1522
|
}
|
|
1462
1523
|
else
|
|
1463
|
-
|
|
1524
|
+
oe(n);
|
|
1464
1525
|
}, e.prototype.complete = function() {
|
|
1465
1526
|
var n = this.partialObserver;
|
|
1466
1527
|
if (n.complete)
|
|
1467
1528
|
try {
|
|
1468
1529
|
n.complete();
|
|
1469
1530
|
} catch (r) {
|
|
1470
|
-
|
|
1531
|
+
oe(r);
|
|
1471
1532
|
}
|
|
1472
1533
|
}, e;
|
|
1473
1534
|
}(), Oe = function(e) {
|
|
1474
1535
|
z(n, e);
|
|
1475
1536
|
function n(r, o, i) {
|
|
1476
1537
|
var s = e.call(this) || this, a;
|
|
1477
|
-
if (
|
|
1538
|
+
if (S(r) || !r)
|
|
1478
1539
|
a = {
|
|
1479
1540
|
next: r ?? void 0,
|
|
1480
1541
|
error: o ?? void 0,
|
|
@@ -1482,7 +1543,7 @@ var Xn = function() {
|
|
|
1482
1543
|
};
|
|
1483
1544
|
else {
|
|
1484
1545
|
var c;
|
|
1485
|
-
s &&
|
|
1546
|
+
s && Mt.useDeprecatedNextContext ? (c = Object.create(r), c.unsubscribe = function() {
|
|
1486
1547
|
return s.unsubscribe();
|
|
1487
1548
|
}, a = {
|
|
1488
1549
|
next: r.next && Ee(r.next, c),
|
|
@@ -1490,29 +1551,29 @@ var Xn = function() {
|
|
|
1490
1551
|
complete: r.complete && Ee(r.complete, c)
|
|
1491
1552
|
}) : a = r;
|
|
1492
1553
|
}
|
|
1493
|
-
return s.destination = new
|
|
1554
|
+
return s.destination = new so(a), s;
|
|
1494
1555
|
}
|
|
1495
1556
|
return n;
|
|
1496
|
-
}(
|
|
1497
|
-
function
|
|
1498
|
-
|
|
1557
|
+
}(Le);
|
|
1558
|
+
function oe(e) {
|
|
1559
|
+
Dt(e);
|
|
1499
1560
|
}
|
|
1500
|
-
function
|
|
1561
|
+
function ao(e) {
|
|
1501
1562
|
throw e;
|
|
1502
1563
|
}
|
|
1503
|
-
var
|
|
1564
|
+
var co = {
|
|
1504
1565
|
closed: !0,
|
|
1505
1566
|
next: Ve,
|
|
1506
|
-
error:
|
|
1567
|
+
error: ao,
|
|
1507
1568
|
complete: Ve
|
|
1508
|
-
},
|
|
1569
|
+
}, Me = function() {
|
|
1509
1570
|
return typeof Symbol == "function" && Symbol.observable || "@@observable";
|
|
1510
1571
|
}();
|
|
1511
|
-
function
|
|
1572
|
+
function lo(e) {
|
|
1512
1573
|
return e;
|
|
1513
1574
|
}
|
|
1514
|
-
function
|
|
1515
|
-
return e.length === 0 ?
|
|
1575
|
+
function uo(e) {
|
|
1576
|
+
return e.length === 0 ? lo : e.length === 1 ? e[0] : function(n) {
|
|
1516
1577
|
return e.reduce(function(r, o) {
|
|
1517
1578
|
return o(r);
|
|
1518
1579
|
}, n);
|
|
@@ -1526,10 +1587,10 @@ var U = function() {
|
|
|
1526
1587
|
var r = new e();
|
|
1527
1588
|
return r.source = this, r.operator = n, r;
|
|
1528
1589
|
}, e.prototype.subscribe = function(n, r, o) {
|
|
1529
|
-
var i = this, s =
|
|
1530
|
-
return
|
|
1531
|
-
var a = i, c = a.operator,
|
|
1532
|
-
s.add(c ? c.call(s,
|
|
1590
|
+
var i = this, s = po(n) ? n : new Oe(n, r, o);
|
|
1591
|
+
return ie(function() {
|
|
1592
|
+
var a = i, c = a.operator, l = a.source;
|
|
1593
|
+
s.add(c ? c.call(s, l) : l ? i._subscribe(s) : i._trySubscribe(s));
|
|
1533
1594
|
}), s;
|
|
1534
1595
|
}, e.prototype._trySubscribe = function(n) {
|
|
1535
1596
|
try {
|
|
@@ -1544,8 +1605,8 @@ var U = function() {
|
|
|
1544
1605
|
next: function(c) {
|
|
1545
1606
|
try {
|
|
1546
1607
|
n(c);
|
|
1547
|
-
} catch (
|
|
1548
|
-
s(
|
|
1608
|
+
} catch (l) {
|
|
1609
|
+
s(l), a.unsubscribe();
|
|
1549
1610
|
}
|
|
1550
1611
|
},
|
|
1551
1612
|
error: s,
|
|
@@ -1556,12 +1617,12 @@ var U = function() {
|
|
|
1556
1617
|
}, e.prototype._subscribe = function(n) {
|
|
1557
1618
|
var r;
|
|
1558
1619
|
return (r = this.source) === null || r === void 0 ? void 0 : r.subscribe(n);
|
|
1559
|
-
}, e.prototype[
|
|
1620
|
+
}, e.prototype[Me] = function() {
|
|
1560
1621
|
return this;
|
|
1561
1622
|
}, e.prototype.pipe = function() {
|
|
1562
1623
|
for (var n = [], r = 0; r < arguments.length; r++)
|
|
1563
1624
|
n[r] = arguments[r];
|
|
1564
|
-
return
|
|
1625
|
+
return uo(n)(this);
|
|
1565
1626
|
}, e.prototype.toPromise = function(n) {
|
|
1566
1627
|
var r = this;
|
|
1567
1628
|
return n = Ye(n), new n(function(o, i) {
|
|
@@ -1580,20 +1641,20 @@ var U = function() {
|
|
|
1580
1641
|
}();
|
|
1581
1642
|
function Ye(e) {
|
|
1582
1643
|
var n;
|
|
1583
|
-
return (n = e ??
|
|
1644
|
+
return (n = e ?? Mt.Promise) !== null && n !== void 0 ? n : Promise;
|
|
1584
1645
|
}
|
|
1585
|
-
function
|
|
1586
|
-
return e &&
|
|
1646
|
+
function mo(e) {
|
|
1647
|
+
return e && S(e.next) && S(e.error) && S(e.complete);
|
|
1587
1648
|
}
|
|
1588
|
-
function
|
|
1589
|
-
return e && e instanceof
|
|
1649
|
+
function po(e) {
|
|
1650
|
+
return e && e instanceof Le || mo(e) && Lt(e);
|
|
1590
1651
|
}
|
|
1591
|
-
function
|
|
1592
|
-
return
|
|
1652
|
+
function ho(e) {
|
|
1653
|
+
return S(e == null ? void 0 : e.lift);
|
|
1593
1654
|
}
|
|
1594
|
-
function
|
|
1655
|
+
function fo(e) {
|
|
1595
1656
|
return function(n) {
|
|
1596
|
-
if (
|
|
1657
|
+
if (ho(n))
|
|
1597
1658
|
return n.lift(function(r) {
|
|
1598
1659
|
try {
|
|
1599
1660
|
return e(r, this);
|
|
@@ -1604,36 +1665,36 @@ function so(e) {
|
|
|
1604
1665
|
throw new TypeError("Unable to lift unknown Observable type");
|
|
1605
1666
|
};
|
|
1606
1667
|
}
|
|
1607
|
-
function
|
|
1608
|
-
return new
|
|
1668
|
+
function yo(e, n, r, o, i) {
|
|
1669
|
+
return new _o(e, n, r, o, i);
|
|
1609
1670
|
}
|
|
1610
|
-
var
|
|
1671
|
+
var _o = function(e) {
|
|
1611
1672
|
z(n, e);
|
|
1612
1673
|
function n(r, o, i, s, a, c) {
|
|
1613
|
-
var
|
|
1614
|
-
return
|
|
1674
|
+
var l = e.call(this, r) || this;
|
|
1675
|
+
return l.onFinalize = a, l.shouldUnsubscribe = c, l._next = o ? function(u) {
|
|
1615
1676
|
try {
|
|
1616
|
-
o(
|
|
1617
|
-
} catch (
|
|
1618
|
-
r.error(
|
|
1677
|
+
o(u);
|
|
1678
|
+
} catch (d) {
|
|
1679
|
+
r.error(d);
|
|
1619
1680
|
}
|
|
1620
|
-
} : e.prototype._next,
|
|
1681
|
+
} : e.prototype._next, l._error = s ? function(u) {
|
|
1621
1682
|
try {
|
|
1622
|
-
s(
|
|
1623
|
-
} catch (
|
|
1624
|
-
r.error(
|
|
1683
|
+
s(u);
|
|
1684
|
+
} catch (d) {
|
|
1685
|
+
r.error(d);
|
|
1625
1686
|
} finally {
|
|
1626
1687
|
this.unsubscribe();
|
|
1627
1688
|
}
|
|
1628
|
-
} : e.prototype._error,
|
|
1689
|
+
} : e.prototype._error, l._complete = i ? function() {
|
|
1629
1690
|
try {
|
|
1630
1691
|
i();
|
|
1631
|
-
} catch (
|
|
1632
|
-
r.error(
|
|
1692
|
+
} catch (u) {
|
|
1693
|
+
r.error(u);
|
|
1633
1694
|
} finally {
|
|
1634
1695
|
this.unsubscribe();
|
|
1635
1696
|
}
|
|
1636
|
-
} : e.prototype._complete,
|
|
1697
|
+
} : e.prototype._complete, l;
|
|
1637
1698
|
}
|
|
1638
1699
|
return n.prototype.unsubscribe = function() {
|
|
1639
1700
|
var r;
|
|
@@ -1642,11 +1703,11 @@ var co = function(e) {
|
|
|
1642
1703
|
e.prototype.unsubscribe.call(this), !o && ((r = this.onFinalize) === null || r === void 0 || r.call(this));
|
|
1643
1704
|
}
|
|
1644
1705
|
}, n;
|
|
1645
|
-
}(
|
|
1706
|
+
}(Le), go = fe(function(e) {
|
|
1646
1707
|
return function() {
|
|
1647
1708
|
e(this), this.name = "ObjectUnsubscribedError", this.message = "object unsubscribed";
|
|
1648
1709
|
};
|
|
1649
|
-
}),
|
|
1710
|
+
}), Nt = function(e) {
|
|
1650
1711
|
z(n, e);
|
|
1651
1712
|
function n() {
|
|
1652
1713
|
var r = e.call(this) || this;
|
|
@@ -1657,20 +1718,20 @@ var co = function(e) {
|
|
|
1657
1718
|
return o.operator = r, o;
|
|
1658
1719
|
}, n.prototype._throwIfClosed = function() {
|
|
1659
1720
|
if (this.closed)
|
|
1660
|
-
throw new
|
|
1721
|
+
throw new go();
|
|
1661
1722
|
}, n.prototype.next = function(r) {
|
|
1662
1723
|
var o = this;
|
|
1663
|
-
|
|
1724
|
+
ie(function() {
|
|
1664
1725
|
var i, s;
|
|
1665
1726
|
if (o._throwIfClosed(), !o.isStopped) {
|
|
1666
1727
|
o.currentObservers || (o.currentObservers = Array.from(o.observers));
|
|
1667
1728
|
try {
|
|
1668
|
-
for (var a =
|
|
1669
|
-
var
|
|
1670
|
-
|
|
1729
|
+
for (var a = G(o.currentObservers), c = a.next(); !c.done; c = a.next()) {
|
|
1730
|
+
var l = c.value;
|
|
1731
|
+
l.next(r);
|
|
1671
1732
|
}
|
|
1672
|
-
} catch (
|
|
1673
|
-
i = { error:
|
|
1733
|
+
} catch (u) {
|
|
1734
|
+
i = { error: u };
|
|
1674
1735
|
} finally {
|
|
1675
1736
|
try {
|
|
1676
1737
|
c && !c.done && (s = a.return) && s.call(a);
|
|
@@ -1682,7 +1743,7 @@ var co = function(e) {
|
|
|
1682
1743
|
});
|
|
1683
1744
|
}, n.prototype.error = function(r) {
|
|
1684
1745
|
var o = this;
|
|
1685
|
-
|
|
1746
|
+
ie(function() {
|
|
1686
1747
|
if (o._throwIfClosed(), !o.isStopped) {
|
|
1687
1748
|
o.hasError = o.isStopped = !0, o.thrownError = r;
|
|
1688
1749
|
for (var i = o.observers; i.length; )
|
|
@@ -1691,7 +1752,7 @@ var co = function(e) {
|
|
|
1691
1752
|
});
|
|
1692
1753
|
}, n.prototype.complete = function() {
|
|
1693
1754
|
var r = this;
|
|
1694
|
-
|
|
1755
|
+
ie(function() {
|
|
1695
1756
|
if (r._throwIfClosed(), !r.isStopped) {
|
|
1696
1757
|
r.isStopped = !0;
|
|
1697
1758
|
for (var o = r.observers; o.length; )
|
|
@@ -1713,7 +1774,7 @@ var co = function(e) {
|
|
|
1713
1774
|
return this._throwIfClosed(), this._checkFinalizedStatuses(r), this._innerSubscribe(r);
|
|
1714
1775
|
}, n.prototype._innerSubscribe = function(r) {
|
|
1715
1776
|
var o = this, i = this, s = i.hasError, a = i.isStopped, c = i.observers;
|
|
1716
|
-
return s || a ?
|
|
1777
|
+
return s || a ? xt : (this.currentObservers = null, c.push(r), new te(function() {
|
|
1717
1778
|
o.currentObservers = null, de(c, r);
|
|
1718
1779
|
}));
|
|
1719
1780
|
}, n.prototype._checkFinalizedStatuses = function(r) {
|
|
@@ -1742,14 +1803,14 @@ var co = function(e) {
|
|
|
1742
1803
|
(o = (r = this.destination) === null || r === void 0 ? void 0 : r.complete) === null || o === void 0 || o.call(r);
|
|
1743
1804
|
}, n.prototype._subscribe = function(r) {
|
|
1744
1805
|
var o, i;
|
|
1745
|
-
return (i = (o = this.source) === null || o === void 0 ? void 0 : o.subscribe(r)) !== null && i !== void 0 ? i :
|
|
1806
|
+
return (i = (o = this.source) === null || o === void 0 ? void 0 : o.subscribe(r)) !== null && i !== void 0 ? i : xt;
|
|
1746
1807
|
}, n;
|
|
1747
|
-
}(
|
|
1808
|
+
}(Nt), bo = {
|
|
1748
1809
|
now: function() {
|
|
1749
1810
|
return Date.now();
|
|
1750
1811
|
},
|
|
1751
1812
|
delegate: void 0
|
|
1752
|
-
},
|
|
1813
|
+
}, vo = function(e) {
|
|
1753
1814
|
z(n, e);
|
|
1754
1815
|
function n(r, o) {
|
|
1755
1816
|
return e.call(this) || this;
|
|
@@ -1757,17 +1818,17 @@ var co = function(e) {
|
|
|
1757
1818
|
return n.prototype.schedule = function(r, o) {
|
|
1758
1819
|
return this;
|
|
1759
1820
|
}, n;
|
|
1760
|
-
}(
|
|
1821
|
+
}(te), Be = {
|
|
1761
1822
|
setInterval: function(e, n) {
|
|
1762
1823
|
for (var r = [], o = 2; o < arguments.length; o++)
|
|
1763
1824
|
r[o - 2] = arguments[o];
|
|
1764
|
-
return setInterval.apply(void 0,
|
|
1825
|
+
return setInterval.apply(void 0, ue([e, n], le(r)));
|
|
1765
1826
|
},
|
|
1766
1827
|
clearInterval: function(e) {
|
|
1767
1828
|
return clearInterval(e);
|
|
1768
1829
|
},
|
|
1769
1830
|
delegate: void 0
|
|
1770
|
-
},
|
|
1831
|
+
}, wo = function(e) {
|
|
1771
1832
|
z(n, e);
|
|
1772
1833
|
function n(r, o) {
|
|
1773
1834
|
var i = e.call(this, r, o) || this;
|
|
@@ -1809,14 +1870,14 @@ var co = function(e) {
|
|
|
1809
1870
|
this.work = this.state = this.scheduler = null, this.pending = !1, de(s, this), o != null && (this.id = this.recycleAsyncId(i, o, null)), this.delay = null, e.prototype.unsubscribe.call(this);
|
|
1810
1871
|
}
|
|
1811
1872
|
}, n;
|
|
1812
|
-
}(
|
|
1873
|
+
}(vo), Ze = function() {
|
|
1813
1874
|
function e(n, r) {
|
|
1814
1875
|
r === void 0 && (r = e.now), this.schedulerActionCtor = n, this.now = r;
|
|
1815
1876
|
}
|
|
1816
1877
|
return e.prototype.schedule = function(n, r, o) {
|
|
1817
1878
|
return r === void 0 && (r = 0), new this.schedulerActionCtor(this, n).schedule(o, r);
|
|
1818
|
-
}, e.now =
|
|
1819
|
-
}(),
|
|
1879
|
+
}, e.now = bo.now, e;
|
|
1880
|
+
}(), Eo = function(e) {
|
|
1820
1881
|
z(n, e);
|
|
1821
1882
|
function n(r, o) {
|
|
1822
1883
|
o === void 0 && (o = Ze.now);
|
|
@@ -1841,45 +1902,45 @@ var co = function(e) {
|
|
|
1841
1902
|
throw i;
|
|
1842
1903
|
}
|
|
1843
1904
|
}, n;
|
|
1844
|
-
}(Ze),
|
|
1905
|
+
}(Ze), Co = new Eo(wo), So = function(e) {
|
|
1845
1906
|
return e && typeof e.length == "number" && typeof e != "function";
|
|
1846
1907
|
};
|
|
1847
|
-
function
|
|
1848
|
-
return
|
|
1908
|
+
function ko(e) {
|
|
1909
|
+
return S(e == null ? void 0 : e.then);
|
|
1849
1910
|
}
|
|
1850
|
-
function
|
|
1851
|
-
return
|
|
1911
|
+
function Po(e) {
|
|
1912
|
+
return S(e[Me]);
|
|
1852
1913
|
}
|
|
1853
|
-
function
|
|
1854
|
-
return Symbol.asyncIterator &&
|
|
1914
|
+
function Oo(e) {
|
|
1915
|
+
return Symbol.asyncIterator && S(e == null ? void 0 : e[Symbol.asyncIterator]);
|
|
1855
1916
|
}
|
|
1856
|
-
function
|
|
1917
|
+
function jo(e) {
|
|
1857
1918
|
return new TypeError("You provided " + (e !== null && typeof e == "object" ? "an invalid object" : "'" + e + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
|
|
1858
1919
|
}
|
|
1859
|
-
function
|
|
1920
|
+
function To() {
|
|
1860
1921
|
return typeof Symbol != "function" || !Symbol.iterator ? "@@iterator" : Symbol.iterator;
|
|
1861
1922
|
}
|
|
1862
|
-
var
|
|
1863
|
-
function
|
|
1864
|
-
return
|
|
1923
|
+
var Ro = To();
|
|
1924
|
+
function Io(e) {
|
|
1925
|
+
return S(e == null ? void 0 : e[Ro]);
|
|
1865
1926
|
}
|
|
1866
|
-
function
|
|
1867
|
-
return
|
|
1927
|
+
function Ao(e) {
|
|
1928
|
+
return ro(this, arguments, function() {
|
|
1868
1929
|
var n, r, o, i;
|
|
1869
|
-
return
|
|
1930
|
+
return At(this, function(s) {
|
|
1870
1931
|
switch (s.label) {
|
|
1871
1932
|
case 0:
|
|
1872
1933
|
n = e.getReader(), s.label = 1;
|
|
1873
1934
|
case 1:
|
|
1874
1935
|
s.trys.push([1, , 9, 10]), s.label = 2;
|
|
1875
1936
|
case 2:
|
|
1876
|
-
return [4,
|
|
1937
|
+
return [4, B(n.read())];
|
|
1877
1938
|
case 3:
|
|
1878
|
-
return r = s.sent(), o = r.value, i = r.done, i ? [4,
|
|
1939
|
+
return r = s.sent(), o = r.value, i = r.done, i ? [4, B(void 0)] : [3, 5];
|
|
1879
1940
|
case 4:
|
|
1880
1941
|
return [2, s.sent()];
|
|
1881
1942
|
case 5:
|
|
1882
|
-
return [4,
|
|
1943
|
+
return [4, B(o)];
|
|
1883
1944
|
case 6:
|
|
1884
1945
|
return [4, s.sent()];
|
|
1885
1946
|
case 7:
|
|
@@ -1894,57 +1955,57 @@ function So(e) {
|
|
|
1894
1955
|
});
|
|
1895
1956
|
});
|
|
1896
1957
|
}
|
|
1897
|
-
function
|
|
1898
|
-
return
|
|
1958
|
+
function xo(e) {
|
|
1959
|
+
return S(e == null ? void 0 : e.getReader);
|
|
1899
1960
|
}
|
|
1900
|
-
function
|
|
1961
|
+
function Lo(e) {
|
|
1901
1962
|
if (e instanceof U)
|
|
1902
1963
|
return e;
|
|
1903
1964
|
if (e != null) {
|
|
1904
|
-
if (
|
|
1905
|
-
return
|
|
1906
|
-
if (
|
|
1907
|
-
return
|
|
1908
|
-
if (_o(e))
|
|
1909
|
-
return To(e);
|
|
1910
|
-
if (go(e))
|
|
1911
|
-
return Lt(e);
|
|
1912
|
-
if (Co(e))
|
|
1913
|
-
return Ro(e);
|
|
1965
|
+
if (Po(e))
|
|
1966
|
+
return Mo(e);
|
|
1967
|
+
if (So(e))
|
|
1968
|
+
return Do(e);
|
|
1914
1969
|
if (ko(e))
|
|
1915
|
-
return
|
|
1916
|
-
|
|
1917
|
-
|
|
1970
|
+
return No(e);
|
|
1971
|
+
if (Oo(e))
|
|
1972
|
+
return Ut(e);
|
|
1973
|
+
if (Io(e))
|
|
1974
|
+
return Uo(e);
|
|
1975
|
+
if (xo(e))
|
|
1976
|
+
return Fo(e);
|
|
1977
|
+
}
|
|
1978
|
+
throw jo(e);
|
|
1918
1979
|
}
|
|
1919
|
-
function
|
|
1980
|
+
function Mo(e) {
|
|
1920
1981
|
return new U(function(n) {
|
|
1921
|
-
var r = e[
|
|
1922
|
-
if (
|
|
1982
|
+
var r = e[Me]();
|
|
1983
|
+
if (S(r.subscribe))
|
|
1923
1984
|
return r.subscribe(n);
|
|
1924
1985
|
throw new TypeError("Provided object does not correctly implement Symbol.observable");
|
|
1925
1986
|
});
|
|
1926
1987
|
}
|
|
1927
|
-
function
|
|
1988
|
+
function Do(e) {
|
|
1928
1989
|
return new U(function(n) {
|
|
1929
1990
|
for (var r = 0; r < e.length && !n.closed; r++)
|
|
1930
1991
|
n.next(e[r]);
|
|
1931
1992
|
n.complete();
|
|
1932
1993
|
});
|
|
1933
1994
|
}
|
|
1934
|
-
function
|
|
1995
|
+
function No(e) {
|
|
1935
1996
|
return new U(function(n) {
|
|
1936
1997
|
e.then(function(r) {
|
|
1937
1998
|
n.closed || (n.next(r), n.complete());
|
|
1938
1999
|
}, function(r) {
|
|
1939
2000
|
return n.error(r);
|
|
1940
|
-
}).then(null,
|
|
2001
|
+
}).then(null, Dt);
|
|
1941
2002
|
});
|
|
1942
2003
|
}
|
|
1943
|
-
function
|
|
2004
|
+
function Uo(e) {
|
|
1944
2005
|
return new U(function(n) {
|
|
1945
2006
|
var r, o;
|
|
1946
2007
|
try {
|
|
1947
|
-
for (var i =
|
|
2008
|
+
for (var i = G(e), s = i.next(); !s.done; s = i.next()) {
|
|
1948
2009
|
var a = s.value;
|
|
1949
2010
|
if (n.next(a), n.closed)
|
|
1950
2011
|
return;
|
|
@@ -1961,41 +2022,41 @@ function Ro(e) {
|
|
|
1961
2022
|
n.complete();
|
|
1962
2023
|
});
|
|
1963
2024
|
}
|
|
1964
|
-
function
|
|
2025
|
+
function Ut(e) {
|
|
1965
2026
|
return new U(function(n) {
|
|
1966
|
-
|
|
2027
|
+
$o(e, n).catch(function(r) {
|
|
1967
2028
|
return n.error(r);
|
|
1968
2029
|
});
|
|
1969
2030
|
});
|
|
1970
2031
|
}
|
|
1971
|
-
function
|
|
1972
|
-
return
|
|
2032
|
+
function Fo(e) {
|
|
2033
|
+
return Ut(Ao(e));
|
|
1973
2034
|
}
|
|
1974
|
-
function
|
|
2035
|
+
function $o(e, n) {
|
|
1975
2036
|
var r, o, i, s;
|
|
1976
|
-
return
|
|
2037
|
+
return to(this, void 0, void 0, function() {
|
|
1977
2038
|
var a, c;
|
|
1978
|
-
return
|
|
1979
|
-
switch (
|
|
2039
|
+
return At(this, function(l) {
|
|
2040
|
+
switch (l.label) {
|
|
1980
2041
|
case 0:
|
|
1981
|
-
|
|
2042
|
+
l.trys.push([0, 5, 6, 11]), r = no(e), l.label = 1;
|
|
1982
2043
|
case 1:
|
|
1983
2044
|
return [4, r.next()];
|
|
1984
2045
|
case 2:
|
|
1985
|
-
if (o =
|
|
2046
|
+
if (o = l.sent(), !!o.done) return [3, 4];
|
|
1986
2047
|
if (a = o.value, n.next(a), n.closed)
|
|
1987
2048
|
return [2];
|
|
1988
|
-
|
|
2049
|
+
l.label = 3;
|
|
1989
2050
|
case 3:
|
|
1990
2051
|
return [3, 1];
|
|
1991
2052
|
case 4:
|
|
1992
2053
|
return [3, 11];
|
|
1993
2054
|
case 5:
|
|
1994
|
-
return c =
|
|
2055
|
+
return c = l.sent(), i = { error: c }, [3, 11];
|
|
1995
2056
|
case 6:
|
|
1996
|
-
return
|
|
2057
|
+
return l.trys.push([6, , 9, 10]), o && !o.done && (s = r.return) ? [4, s.call(r)] : [3, 8];
|
|
1997
2058
|
case 7:
|
|
1998
|
-
|
|
2059
|
+
l.sent(), l.label = 8;
|
|
1999
2060
|
case 8:
|
|
2000
2061
|
return [3, 10];
|
|
2001
2062
|
case 9:
|
|
@@ -2009,7 +2070,7 @@ function Ao(e, n) {
|
|
|
2009
2070
|
});
|
|
2010
2071
|
});
|
|
2011
2072
|
}
|
|
2012
|
-
function
|
|
2073
|
+
function zo(e, n, r, o, i) {
|
|
2013
2074
|
o === void 0 && (o = 0), i === void 0 && (i = !1);
|
|
2014
2075
|
var s = n.schedule(function() {
|
|
2015
2076
|
r(), i ? e.add(this.schedule(null, o)) : this.unsubscribe();
|
|
@@ -2017,20 +2078,20 @@ function xo(e, n, r, o, i) {
|
|
|
2017
2078
|
if (e.add(s), !i)
|
|
2018
2079
|
return s;
|
|
2019
2080
|
}
|
|
2020
|
-
function
|
|
2021
|
-
var r =
|
|
2081
|
+
function qo(e, n) {
|
|
2082
|
+
var r = S(e) ? e : function() {
|
|
2022
2083
|
return e;
|
|
2023
2084
|
}, o = function(i) {
|
|
2024
2085
|
return i.error(r());
|
|
2025
2086
|
};
|
|
2026
2087
|
return new U(o);
|
|
2027
2088
|
}
|
|
2028
|
-
var
|
|
2089
|
+
var Ho = fe(function(e) {
|
|
2029
2090
|
return function() {
|
|
2030
2091
|
e(this), this.name = "EmptyError", this.message = "no elements in sequence";
|
|
2031
2092
|
};
|
|
2032
2093
|
});
|
|
2033
|
-
function
|
|
2094
|
+
function Vo(e, n) {
|
|
2034
2095
|
return new Promise(function(r, o) {
|
|
2035
2096
|
var i = !1, s;
|
|
2036
2097
|
e.subscribe({
|
|
@@ -2039,48 +2100,48 @@ function No(e, n) {
|
|
|
2039
2100
|
},
|
|
2040
2101
|
error: o,
|
|
2041
2102
|
complete: function() {
|
|
2042
|
-
i ? r(s) : o(new
|
|
2103
|
+
i ? r(s) : o(new Ho());
|
|
2043
2104
|
}
|
|
2044
2105
|
});
|
|
2045
2106
|
});
|
|
2046
2107
|
}
|
|
2047
|
-
function
|
|
2108
|
+
function Yo(e) {
|
|
2048
2109
|
return e instanceof Date && !isNaN(e);
|
|
2049
2110
|
}
|
|
2050
|
-
var
|
|
2111
|
+
var Ko = fe(function(e) {
|
|
2051
2112
|
return function(n) {
|
|
2052
2113
|
n === void 0 && (n = null), e(this), this.message = "Timeout has occurred", this.name = "TimeoutError", this.info = n;
|
|
2053
2114
|
};
|
|
2054
2115
|
});
|
|
2055
|
-
function
|
|
2056
|
-
var r =
|
|
2116
|
+
function Bo(e, n) {
|
|
2117
|
+
var r = Yo(e) ? { first: e } : typeof e == "number" ? { each: e } : e, o = r.first, i = r.each, s = r.with, a = s === void 0 ? Zo : s, c = r.scheduler, l = c === void 0 ? Co : c, u = r.meta, d = u === void 0 ? null : u;
|
|
2057
2118
|
if (o == null && i == null)
|
|
2058
2119
|
throw new TypeError("No timeout provided.");
|
|
2059
|
-
return
|
|
2060
|
-
var
|
|
2061
|
-
p =
|
|
2120
|
+
return fo(function(f, _) {
|
|
2121
|
+
var m, p, h = null, j = 0, ne = function(be) {
|
|
2122
|
+
p = zo(_, l, function() {
|
|
2062
2123
|
try {
|
|
2063
|
-
|
|
2064
|
-
meta:
|
|
2065
|
-
lastValue:
|
|
2066
|
-
seen:
|
|
2124
|
+
m.unsubscribe(), Lo(a({
|
|
2125
|
+
meta: d,
|
|
2126
|
+
lastValue: h,
|
|
2127
|
+
seen: j
|
|
2067
2128
|
})).subscribe(_);
|
|
2068
|
-
} catch (
|
|
2069
|
-
_.error(
|
|
2129
|
+
} catch (Yt) {
|
|
2130
|
+
_.error(Yt);
|
|
2070
2131
|
}
|
|
2071
|
-
},
|
|
2132
|
+
}, be);
|
|
2072
2133
|
};
|
|
2073
|
-
|
|
2074
|
-
p == null || p.unsubscribe(),
|
|
2134
|
+
m = f.subscribe(yo(_, function(be) {
|
|
2135
|
+
p == null || p.unsubscribe(), j++, _.next(h = be), i > 0 && ne(i);
|
|
2075
2136
|
}, void 0, void 0, function() {
|
|
2076
|
-
p != null && p.closed || p == null || p.unsubscribe(),
|
|
2077
|
-
})), !
|
|
2137
|
+
p != null && p.closed || p == null || p.unsubscribe(), h = null;
|
|
2138
|
+
})), !j && ne(o != null ? typeof o == "number" ? o : +o - l.now() : i);
|
|
2078
2139
|
});
|
|
2079
2140
|
}
|
|
2080
|
-
function
|
|
2081
|
-
throw new
|
|
2141
|
+
function Zo(e) {
|
|
2142
|
+
throw new Ko(e);
|
|
2082
2143
|
}
|
|
2083
|
-
class
|
|
2144
|
+
class se {
|
|
2084
2145
|
constructor() {
|
|
2085
2146
|
this.set = (n) => {
|
|
2086
2147
|
if (this._current.status === "success")
|
|
@@ -2111,20 +2172,20 @@ class ie {
|
|
|
2111
2172
|
}, this.waitForLoad = (n) => {
|
|
2112
2173
|
if (this._current.status === "success") return Promise.resolve(this._current.loadedValue);
|
|
2113
2174
|
if (this._current.status === "error") return Promise.reject(this._current.error);
|
|
2114
|
-
this._current.status !== "initial" &&
|
|
2175
|
+
this._current.status !== "initial" && kt(this._current);
|
|
2115
2176
|
const r = {
|
|
2116
2177
|
first: n.timeoutSec * 1e3,
|
|
2117
|
-
with: () =>
|
|
2178
|
+
with: () => qo(() => new Error(n.timeoutErrMsg))
|
|
2118
2179
|
};
|
|
2119
|
-
return
|
|
2120
|
-
}, this._current = { status: "initial", isSuccess: !1 }, this._subject = new
|
|
2180
|
+
return Vo(this._subject.pipe(Bo(r)));
|
|
2181
|
+
}, this._current = { status: "initial", isSuccess: !1 }, this._subject = new Nt();
|
|
2121
2182
|
}
|
|
2122
2183
|
get current() {
|
|
2123
2184
|
return this._current;
|
|
2124
2185
|
}
|
|
2125
2186
|
}
|
|
2126
|
-
const { log__:
|
|
2127
|
-
const r = new
|
|
2187
|
+
const { log__: Jo, err__: Go } = M("init-flows"), Je = (e, n) => {
|
|
2188
|
+
const r = new se();
|
|
2128
2189
|
return {
|
|
2129
2190
|
publisher: r,
|
|
2130
2191
|
initialize: async (o) => {
|
|
@@ -2132,22 +2193,22 @@ const { log__: zo, err__: qo } = D("init-flows"), Je = (e, n) => {
|
|
|
2132
2193
|
if (r.current.isSuccess)
|
|
2133
2194
|
throw new Error("This flow has already been initialized.");
|
|
2134
2195
|
const i = await n(o);
|
|
2135
|
-
|
|
2196
|
+
Jo(`✔ ${e} flow initialized successfully. Result:`, i), r.set(i);
|
|
2136
2197
|
} catch (i) {
|
|
2137
|
-
|
|
2198
|
+
Go(`𝙭 ${e} flow initialization failed. Error:`, Z(i), "Details:", i), r.throw(i, Z(i));
|
|
2138
2199
|
}
|
|
2139
2200
|
}
|
|
2140
2201
|
};
|
|
2141
|
-
},
|
|
2202
|
+
}, Wo = async (e, n, r) => {
|
|
2142
2203
|
await Promise.all(Object.values(e).map((o) => o.initialize({ context: n, formCallbacks: r })));
|
|
2143
|
-
},
|
|
2204
|
+
}, Xo = () => ({
|
|
2144
2205
|
// 💡 Add new init flows here
|
|
2145
2206
|
// Stripe PR
|
|
2146
|
-
stripePR: Je("Stripe PR",
|
|
2207
|
+
stripePR: Je("Stripe PR", J.stripePR.init),
|
|
2147
2208
|
// Stripe Link
|
|
2148
|
-
stripeLink: Je("Stripe Link",
|
|
2209
|
+
stripeLink: Je("Stripe Link", J.stripeLink.init)
|
|
2149
2210
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2150
|
-
}), { err__:
|
|
2211
|
+
}), { err__: Qo } = M("form-callbacks"), R = t.function().optional(), Ge = t.object({
|
|
2151
2212
|
onFocus: R,
|
|
2152
2213
|
onBlur: R,
|
|
2153
2214
|
onChange: R,
|
|
@@ -2159,14 +2220,14 @@ const { log__: zo, err__: qo } = D("init-flows"), Je = (e, n) => {
|
|
|
2159
2220
|
onSetupPaymentMethodSuccess: R,
|
|
2160
2221
|
onCheckoutError: R,
|
|
2161
2222
|
onPaymentRequestLoad: R
|
|
2162
|
-
}),
|
|
2223
|
+
}), H = class ae {
|
|
2163
2224
|
constructor() {
|
|
2164
2225
|
this.setCallbacks = (n) => {
|
|
2165
|
-
this._callbacks =
|
|
2166
|
-
const i =
|
|
2226
|
+
this._callbacks = ae.createEmptyCallbacks(), Object.entries(n).forEach(([r, o]) => {
|
|
2227
|
+
const i = ir(r, o ?? ae.NOOP, Qo);
|
|
2167
2228
|
this._callbacks[r] = i;
|
|
2168
2229
|
});
|
|
2169
|
-
}, this._callbacks =
|
|
2230
|
+
}, this._callbacks = ae.createEmptyCallbacks();
|
|
2170
2231
|
}
|
|
2171
2232
|
/**
|
|
2172
2233
|
* Returns a read-only version of the callbacks object.
|
|
@@ -2175,67 +2236,67 @@ const { log__: zo, err__: qo } = D("init-flows"), Je = (e, n) => {
|
|
|
2175
2236
|
return { ...this._callbacks };
|
|
2176
2237
|
}
|
|
2177
2238
|
};
|
|
2178
|
-
|
|
2179
|
-
},
|
|
2239
|
+
H.NOOP = () => {
|
|
2240
|
+
}, H.createEmptyCallbacks = () => {
|
|
2180
2241
|
const e = {};
|
|
2181
|
-
return Object.keys(
|
|
2182
|
-
e[n] =
|
|
2242
|
+
return Object.keys(Ge.keyof().enum).forEach((n) => {
|
|
2243
|
+
e[n] = H.NOOP;
|
|
2183
2244
|
}), e;
|
|
2184
|
-
},
|
|
2185
|
-
const n = new
|
|
2186
|
-
return n.setCallbacks(
|
|
2245
|
+
}, H.fromObject = (e) => {
|
|
2246
|
+
const n = new H();
|
|
2247
|
+
return n.setCallbacks(Ge.parse(e)), n;
|
|
2187
2248
|
};
|
|
2188
|
-
let
|
|
2189
|
-
class
|
|
2249
|
+
let ei = H;
|
|
2250
|
+
class ti {
|
|
2190
2251
|
constructor(n, r, o, i) {
|
|
2191
2252
|
this.handleMessage = (s) => {
|
|
2192
2253
|
if (!s.source)
|
|
2193
2254
|
throw new Error("No source found");
|
|
2194
|
-
if (
|
|
2255
|
+
if (We(s.origin) !== We(this.baseUrl) || typeof s.data == "object" && s.data.penpal)
|
|
2195
2256
|
return;
|
|
2196
|
-
const a =
|
|
2257
|
+
const a = Vr(JSON.parse(s.data));
|
|
2197
2258
|
if (!this.validateEvent(a)) return;
|
|
2198
|
-
const { elementId: c, payload:
|
|
2199
|
-
switch (
|
|
2259
|
+
const { elementId: c, payload: l } = a, u = l.type;
|
|
2260
|
+
switch (u) {
|
|
2200
2261
|
case "LAYOUT":
|
|
2201
|
-
this.internalCallbacks.setFormHeight(
|
|
2262
|
+
this.internalCallbacks.setFormHeight(l.height ? `${l.height}px` : "100%");
|
|
2202
2263
|
break;
|
|
2203
2264
|
case "FOCUS":
|
|
2204
|
-
this.formCallbacks.get.onFocus(c,
|
|
2265
|
+
this.formCallbacks.get.onFocus(c, l.elementType);
|
|
2205
2266
|
break;
|
|
2206
2267
|
case "BLUR":
|
|
2207
|
-
this.formCallbacks.get.onBlur(c,
|
|
2268
|
+
this.formCallbacks.get.onBlur(c, l.elementType);
|
|
2208
2269
|
break;
|
|
2209
2270
|
case "CHANGE":
|
|
2210
|
-
this.formCallbacks.get.onChange(c,
|
|
2271
|
+
this.formCallbacks.get.onChange(c, l.elementType, l.errors);
|
|
2211
2272
|
break;
|
|
2212
2273
|
case "LOADED":
|
|
2213
|
-
this.eventTargets[c] = s.source, this.internalCallbacks.onCdeLoaded(
|
|
2274
|
+
this.eventTargets[c] = s.source, this.internalCallbacks.onCdeLoaded(l);
|
|
2214
2275
|
break;
|
|
2215
2276
|
case "LOAD_ERROR":
|
|
2216
|
-
this.internalCallbacks.onCdeLoadError(
|
|
2277
|
+
this.internalCallbacks.onCdeLoadError(l.message);
|
|
2217
2278
|
break;
|
|
2218
2279
|
case "VALIDATION_ERROR":
|
|
2219
|
-
this.formCallbacks.get.onValidationError(
|
|
2280
|
+
this.formCallbacks.get.onValidationError(l.elementType, l.errors, c);
|
|
2220
2281
|
break;
|
|
2221
2282
|
default:
|
|
2222
|
-
console.warn("[form] Unhandled event type:",
|
|
2283
|
+
console.warn("[form] Unhandled event type:", u);
|
|
2223
2284
|
}
|
|
2224
2285
|
}, this.validateEvent = (s) => s.formId !== this.formId || !s.elementId ? (console.log("[OJS] formId", this.formId, s.formId), console.warn("[form] Ignoring unknown event:", s), !1) : this.nonces.has(s.nonce) ? (console.warn("[form] Ignoring duplicate event:", s), !1) : (this.nonces.add(s.nonce), !0), this.eventTargets = {}, this.nonces = /* @__PURE__ */ new Set(), this.formId = n, this.baseUrl = r, this.formCallbacks = o, this.internalCallbacks = i;
|
|
2225
2286
|
}
|
|
2226
2287
|
}
|
|
2227
|
-
const
|
|
2228
|
-
async function
|
|
2288
|
+
const We = (e) => new URL(e).origin;
|
|
2289
|
+
async function ri(e, n) {
|
|
2229
2290
|
const r = await ct({
|
|
2230
2291
|
iframe: e,
|
|
2231
2292
|
debug: !1,
|
|
2232
2293
|
childOrigin: n
|
|
2233
|
-
}).promise, o = await
|
|
2234
|
-
if (!
|
|
2294
|
+
}).promise, o = await Yr(r);
|
|
2295
|
+
if (!Kr(r, o))
|
|
2235
2296
|
throw new Error("Got invalid CDE connection object");
|
|
2236
2297
|
return r;
|
|
2237
2298
|
}
|
|
2238
|
-
class
|
|
2299
|
+
class ni {
|
|
2239
2300
|
constructor() {
|
|
2240
2301
|
this.connections = /* @__PURE__ */ new Map();
|
|
2241
2302
|
}
|
|
@@ -2252,39 +2313,39 @@ class Jo {
|
|
|
2252
2313
|
return this.connections;
|
|
2253
2314
|
}
|
|
2254
2315
|
}
|
|
2255
|
-
const
|
|
2316
|
+
const oi = (e, n, r) => {
|
|
2256
2317
|
const { stripePR: o } = e;
|
|
2257
2318
|
o.publisher.subscribe((i) => {
|
|
2258
2319
|
if (i.isSuccess) {
|
|
2259
|
-
const s = i.loadedValue, a = s.isAvailable && s.availableProviders.applePay, c = s.isAvailable && s.availableProviders.googlePay,
|
|
2320
|
+
const s = i.loadedValue, a = s.isAvailable && s.availableProviders.applePay, c = s.isAvailable && s.availableProviders.googlePay, l = {
|
|
2260
2321
|
apple_pay: {
|
|
2261
2322
|
isLoading: !1,
|
|
2262
2323
|
isAvailable: a,
|
|
2263
|
-
startFlow: async (
|
|
2264
|
-
a && Xe("apple_pay", s, n, r,
|
|
2324
|
+
startFlow: async (u) => {
|
|
2325
|
+
a && Xe("apple_pay", s, n, r, u);
|
|
2265
2326
|
}
|
|
2266
2327
|
},
|
|
2267
2328
|
google_pay: {
|
|
2268
2329
|
isLoading: !1,
|
|
2269
2330
|
isAvailable: c,
|
|
2270
|
-
startFlow: async (
|
|
2271
|
-
c && Xe("google_pay", s, n, r,
|
|
2331
|
+
startFlow: async (u) => {
|
|
2332
|
+
c && Xe("google_pay", s, n, r, u);
|
|
2272
2333
|
}
|
|
2273
2334
|
}
|
|
2274
2335
|
};
|
|
2275
|
-
r.get.onPaymentRequestLoad(
|
|
2336
|
+
r.get.onPaymentRequestLoad(l);
|
|
2276
2337
|
}
|
|
2277
2338
|
});
|
|
2278
|
-
}, Xe = (e, n, r, o, i) =>
|
|
2339
|
+
}, Xe = (e, n, r, o, i) => J.stripePR.run({
|
|
2279
2340
|
context: r,
|
|
2280
|
-
checkoutPaymentMethod:
|
|
2341
|
+
checkoutPaymentMethod: It(r.checkoutPaymentMethods, e),
|
|
2281
2342
|
nonCdeFormInputs: Te(r.formDiv),
|
|
2282
2343
|
formCallbacks: o,
|
|
2283
2344
|
customParams: { provider: e, overridePaymentRequest: i == null ? void 0 : i.overridePaymentRequest },
|
|
2284
2345
|
initResult: n
|
|
2285
|
-
}), Qe = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: F, err__: Ce } =
|
|
2346
|
+
}), Qe = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: F, err__: Ce } = M("op-form"), V = class je {
|
|
2286
2347
|
constructor(n) {
|
|
2287
|
-
this.cdeLoadEvent = new
|
|
2348
|
+
this.cdeLoadEvent = new se(), this.anyCdeConn = new se(), this.context = new se(), this.initFlows = Xo(), this.startFormInit = async () => {
|
|
2288
2349
|
try {
|
|
2289
2350
|
F("Initializing OpenPay form:"), F("├ Waiting for CDE load event...");
|
|
2290
2351
|
const r = await this.cdeLoadEvent.waitForLoad({
|
|
@@ -2303,9 +2364,9 @@ const Wo = (e, n, r) => {
|
|
|
2303
2364
|
o,
|
|
2304
2365
|
this.getFormDiv()
|
|
2305
2366
|
);
|
|
2306
|
-
this.context.set(i),
|
|
2367
|
+
this.context.set(i), oi(this.initFlows, i, this.formCallbacks), F("├ Starting OJS init flows..."), await Wo(this.initFlows, i, this.formCallbacks), this.formCallbacks.get.onLoad(r.totalAmountAtoms, r.currency), F("╰ Done initializing OJS flows.");
|
|
2307
2368
|
} catch (r) {
|
|
2308
|
-
const o =
|
|
2369
|
+
const o = Z(r);
|
|
2309
2370
|
Ce("╰ Error initializing OP form:", o), this.formCallbacks.get.onLoadError(o);
|
|
2310
2371
|
}
|
|
2311
2372
|
}, this.setFormHeight = (r) => {
|
|
@@ -2318,7 +2379,7 @@ const Wo = (e, n, r) => {
|
|
|
2318
2379
|
this.cdeLoadEvent.current.isSuccess || this.cdeLoadEvent.throw(new Error(r), r);
|
|
2319
2380
|
}, this.createElement = (r, o = {}) => {
|
|
2320
2381
|
if (!this.config) throw new Error("OpenPay form not initialized");
|
|
2321
|
-
const i =
|
|
2382
|
+
const i = sr.parse(r), s = document.createElement("iframe"), a = this.buildQueryString(o);
|
|
2322
2383
|
s.name = `${i}-element`;
|
|
2323
2384
|
const c = new URL(`/app/v1/${s.name}/`, this.config.baseUrl);
|
|
2324
2385
|
return c.search = a.toString(), s.src = c.href, s.style.border = "none", s.style.width = "100%", this.registerIframe(i, s);
|
|
@@ -2332,16 +2393,16 @@ const Wo = (e, n, r) => {
|
|
|
2332
2393
|
}
|
|
2333
2394
|
};
|
|
2334
2395
|
return this.connectToElement({ type: i.type, node: i.node }), this.registeredElements || (this.registeredElements = {
|
|
2335
|
-
[
|
|
2336
|
-
[
|
|
2337
|
-
[
|
|
2338
|
-
[
|
|
2396
|
+
[K.CARD]: void 0,
|
|
2397
|
+
[K.CARD_NUMBER]: void 0,
|
|
2398
|
+
[K.CARD_EXPIRY]: void 0,
|
|
2399
|
+
[K.CARD_CVC]: void 0
|
|
2339
2400
|
}), this.registeredElements[r] = i, i;
|
|
2340
2401
|
}, this.buildQueryString = (r) => {
|
|
2341
2402
|
const o = new URLSearchParams();
|
|
2342
|
-
return o.append("referer", this.referrer), o.append("formId", this.formId), r.styles && o.append("styles",
|
|
2403
|
+
return o.append("referer", this.referrer), o.append("formId", this.formId), r.styles && o.append("styles", Hr(r.styles)), o.append("secureToken", this.config.checkoutSecureToken), o;
|
|
2343
2404
|
}, this.connectToElement = (r) => {
|
|
2344
|
-
|
|
2405
|
+
ri(r.node).then((o) => {
|
|
2345
2406
|
this.connectionManager.addConnection(r.type, o), this.anyCdeConn.current.isSuccess || this.anyCdeConn.set(o);
|
|
2346
2407
|
}).catch((o) => Ce("[FORM] Error connecting to CDE iframe", o));
|
|
2347
2408
|
}, this.getFormDiv = () => document.querySelector(this.formTarget) ?? document.body, this.submitCard = () => {
|
|
@@ -2350,9 +2411,9 @@ const Wo = (e, n, r) => {
|
|
|
2350
2411
|
Ce("Please wait for the form to finish loading before submitting.");
|
|
2351
2412
|
return;
|
|
2352
2413
|
}
|
|
2353
|
-
|
|
2414
|
+
J.commonCC.run({
|
|
2354
2415
|
context: r,
|
|
2355
|
-
checkoutPaymentMethod:
|
|
2416
|
+
checkoutPaymentMethod: It(r.checkoutPaymentMethods, "credit_card"),
|
|
2356
2417
|
nonCdeFormInputs: Te(r.formDiv),
|
|
2357
2418
|
formCallbacks: this.formCallbacks,
|
|
2358
2419
|
customParams: {
|
|
@@ -2365,7 +2426,7 @@ const Wo = (e, n, r) => {
|
|
|
2365
2426
|
for (const r of Object.values(this.registeredElements ?? {}))
|
|
2366
2427
|
r && r.node.remove();
|
|
2367
2428
|
window.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler));
|
|
2368
|
-
}, je.assignAsSingleton(this), this.ojsVersion = "0.1.
|
|
2429
|
+
}, je.assignAsSingleton(this), this.ojsVersion = "0.1.18", this.ojsReleaseVersion = "local_build", this.baseUrl = n.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...n, baseUrl: this.baseUrl }, this.formCallbacks = ei.fromObject(n), this.registeredElements = null, this.formId = `opjs-form-${window.crypto.randomUUID()}`, this.referrer = window.location.origin, this.formTarget = n.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new ni(), this.eventHandler = new ti(this.formId, this.baseUrl, this.formCallbacks, {
|
|
2369
2430
|
setFormHeight: this.setFormHeight,
|
|
2370
2431
|
onCdeLoaded: this.onCdeLoaded,
|
|
2371
2432
|
onCdeLoadError: this.onCdeLoadError
|
|
@@ -2375,76 +2436,77 @@ const Wo = (e, n, r) => {
|
|
|
2375
2436
|
return this.config.checkoutSecureToken;
|
|
2376
2437
|
}
|
|
2377
2438
|
};
|
|
2378
|
-
|
|
2379
|
-
if (
|
|
2439
|
+
V.ojsFlows = J, V.assignAsSingleton = (e) => {
|
|
2440
|
+
if (V.getInstance())
|
|
2380
2441
|
throw new Error("OpenPay instance already exists. Only one instance is allowed.");
|
|
2381
2442
|
window.ojs = e;
|
|
2382
|
-
},
|
|
2383
|
-
baseUrl: new URL(e.baseUrl ??
|
|
2443
|
+
}, V.getInstance = () => window.ojs ?? null, V.buildOjsFlowContext = (e, n, r, o) => ({
|
|
2444
|
+
baseUrl: new URL(e.baseUrl ?? Gt).origin,
|
|
2384
2445
|
formDiv: o,
|
|
2385
2446
|
elementsSessionId: n.sessionId,
|
|
2386
2447
|
checkoutPaymentMethods: n.checkoutPaymentMethods,
|
|
2387
2448
|
anyCdeConnection: r,
|
|
2388
2449
|
customInitParams: e.customInitParams ?? {}
|
|
2389
2450
|
});
|
|
2390
|
-
let et =
|
|
2391
|
-
const
|
|
2451
|
+
let et = V;
|
|
2452
|
+
const ii = (e) => {
|
|
2392
2453
|
const n = at(e), r = n.current;
|
|
2393
|
-
return r.onLoad =
|
|
2454
|
+
return r.onLoad = T(() => e.onLoad, [e.onLoad]), r.onLoadError = T(() => e.onLoadError, [e.onLoadError]), r.onValidationError = T(() => e.onValidationError, [e.onValidationError]), r.onFocus = T(() => e.onFocus, [e.onFocus]), r.onBlur = T(() => e.onBlur, [e.onBlur]), r.onChange = T(() => e.onChange, [e.onChange]), r.onCheckoutStarted = T(() => e.onCheckoutStarted, [e.onCheckoutStarted]), r.onCheckoutSuccess = T(() => e.onCheckoutSuccess, [e.onCheckoutSuccess]), r.onSetupPaymentMethodSuccess = T(
|
|
2394
2455
|
() => e.onSetupPaymentMethodSuccess,
|
|
2395
2456
|
[e.onSetupPaymentMethodSuccess]
|
|
2396
|
-
), r.onCheckoutError =
|
|
2397
|
-
},
|
|
2457
|
+
), r.onCheckoutError = T(() => e.onCheckoutError, [e.onCheckoutError]), r.onPaymentRequestLoad = T(() => e.onPaymentRequestLoad, [e.onPaymentRequestLoad]), n.current;
|
|
2458
|
+
}, si = t.object({
|
|
2398
2459
|
type: t.string(),
|
|
2399
2460
|
loc: t.array(t.string()),
|
|
2400
2461
|
msg: t.string(),
|
|
2401
2462
|
url: t.string()
|
|
2402
2463
|
});
|
|
2403
|
-
t.array(
|
|
2404
|
-
const
|
|
2464
|
+
t.array(si);
|
|
2465
|
+
const ai = t.object({
|
|
2405
2466
|
code: t.string(),
|
|
2406
2467
|
message: t.string(),
|
|
2407
2468
|
path: t.array(t.string())
|
|
2408
2469
|
});
|
|
2409
|
-
t.array(
|
|
2410
|
-
const
|
|
2470
|
+
t.array(ai);
|
|
2471
|
+
const ci = (e, n, r) => (...o) => {
|
|
2411
2472
|
try {
|
|
2412
2473
|
return n(...o);
|
|
2413
2474
|
} catch (i) {
|
|
2414
2475
|
r(`[form] Error running callback (${e}):`, i);
|
|
2415
2476
|
return;
|
|
2416
2477
|
}
|
|
2417
|
-
}, P = t.string().trim().min(1, { message: "Cannot be blank" }),
|
|
2418
|
-
var
|
|
2419
|
-
const
|
|
2420
|
-
var
|
|
2421
|
-
const
|
|
2422
|
-
var
|
|
2423
|
-
t.nativeEnum(
|
|
2478
|
+
}, P = t.string().trim().min(1, { message: "Cannot be blank" }), C = t.string().trim().optional(), me = (e) => t.nullable(e.optional());
|
|
2479
|
+
var Ft = /* @__PURE__ */ ((e) => (e.FIRST_NAME = "firstName", e.LAST_NAME = "lastName", e.EMAIL = "email", e.ZIP_CODE = "zipCode", e.CITY = "city", e.STATE = "state", e.COUNTRY = "country", e.ADDRESS = "address", e.PHONE = "phone", e.PROMOTION_CODE = "promotionCode", e))(Ft || {});
|
|
2480
|
+
const li = t.nativeEnum(Ft);
|
|
2481
|
+
var $t = /* @__PURE__ */ ((e) => (e.CARD_NUMBER = "cardNumber", e.CARD_EXPIRY = "cardExpiry", e.CARD_CVC = "cardCvc", e))($t || {});
|
|
2482
|
+
const zt = t.nativeEnum($t), ui = t.union([li, zt]);
|
|
2483
|
+
var W = /* @__PURE__ */ ((e) => (e.CARD = "card", e.CARD_NUMBER = "card-number", e.CARD_EXPIRY = "card-expiry", e.CARD_CVC = "card-cvc", e))(W || {});
|
|
2484
|
+
t.nativeEnum(W);
|
|
2424
2485
|
const ye = t.object({
|
|
2425
2486
|
provider: t.string(),
|
|
2426
2487
|
processor_name: me(t.string()),
|
|
2427
2488
|
metadata: me(t.record(t.string(), t.any()))
|
|
2428
|
-
}),
|
|
2489
|
+
}), di = t.object({
|
|
2429
2490
|
id: t.string()
|
|
2430
2491
|
});
|
|
2431
2492
|
t.object({
|
|
2432
|
-
cardNumber:
|
|
2433
|
-
expiry:
|
|
2434
|
-
cvc:
|
|
2493
|
+
cardNumber: C,
|
|
2494
|
+
expiry: C,
|
|
2495
|
+
cvc: C
|
|
2435
2496
|
});
|
|
2436
2497
|
t.object({
|
|
2437
|
-
backgroundColor:
|
|
2438
|
-
color:
|
|
2439
|
-
fontFamily:
|
|
2440
|
-
fontSize:
|
|
2441
|
-
fontWeight:
|
|
2442
|
-
margin:
|
|
2443
|
-
padding:
|
|
2444
|
-
letterSpacing:
|
|
2445
|
-
lineHeight:
|
|
2446
|
-
|
|
2447
|
-
|
|
2498
|
+
backgroundColor: C,
|
|
2499
|
+
color: C,
|
|
2500
|
+
fontFamily: C,
|
|
2501
|
+
fontSize: C,
|
|
2502
|
+
fontWeight: C,
|
|
2503
|
+
margin: C,
|
|
2504
|
+
padding: C,
|
|
2505
|
+
letterSpacing: C,
|
|
2506
|
+
lineHeight: C,
|
|
2507
|
+
hideIcon: C
|
|
2508
|
+
});
|
|
2509
|
+
const D = t.enum([
|
|
2448
2510
|
// Element -> Form
|
|
2449
2511
|
"LAYOUT",
|
|
2450
2512
|
"LOADED",
|
|
@@ -2465,34 +2527,34 @@ const L = t.enum([
|
|
|
2465
2527
|
"TOKENIZE",
|
|
2466
2528
|
"CHECKOUT",
|
|
2467
2529
|
"START_PAYMENT_FLOW"
|
|
2468
|
-
]),
|
|
2469
|
-
type:
|
|
2470
|
-
elementType:
|
|
2530
|
+
]), mi = D.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), pi = t.object({ type: mi }), hi = D.extract(["BLUR", "FOCUS", "CHANGE"]), fi = t.object({
|
|
2531
|
+
type: hi,
|
|
2532
|
+
elementType: zt,
|
|
2471
2533
|
errors: t.array(t.string()).optional()
|
|
2472
|
-
}),
|
|
2473
|
-
type:
|
|
2534
|
+
}), yi = D.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), _i = t.object({
|
|
2535
|
+
type: yi,
|
|
2474
2536
|
message: P,
|
|
2475
2537
|
headers: t.record(t.string(), t.string()).optional()
|
|
2476
|
-
}),
|
|
2477
|
-
type:
|
|
2478
|
-
elementType:
|
|
2538
|
+
}), gi = D.extract(["VALIDATION_ERROR"]), bi = t.object({
|
|
2539
|
+
type: gi,
|
|
2540
|
+
elementType: ui,
|
|
2479
2541
|
errors: t.array(t.string())
|
|
2480
|
-
}),
|
|
2481
|
-
type: t.literal(
|
|
2542
|
+
}), vi = t.object({
|
|
2543
|
+
type: t.literal(D.enum.LAYOUT),
|
|
2482
2544
|
height: P
|
|
2483
|
-
}),
|
|
2484
|
-
type: t.literal(
|
|
2545
|
+
}), wi = t.object({
|
|
2546
|
+
type: t.literal(D.enum.LOADED),
|
|
2485
2547
|
sessionId: P,
|
|
2486
2548
|
totalAmountAtoms: t.number(),
|
|
2487
|
-
currency:
|
|
2549
|
+
currency: C,
|
|
2488
2550
|
checkoutPaymentMethods: t.array(ye)
|
|
2489
|
-
}),
|
|
2490
|
-
type: t.literal(
|
|
2551
|
+
}), Ei = t.object({
|
|
2552
|
+
type: t.literal(D.enum.PAYMENT_FLOW_STARTED),
|
|
2491
2553
|
nextActionMetadata: t.record(t.string(), t.any()),
|
|
2492
2554
|
paymentFlowMetadata: t.any().optional(),
|
|
2493
2555
|
startPFMetadata: t.optional(t.record(t.string(), t.any()))
|
|
2494
|
-
}),
|
|
2495
|
-
type: t.literal(
|
|
2556
|
+
}), Ci = t.object({
|
|
2557
|
+
type: t.literal(D.enum.SETUP_PAYMENT_METHOD_SUCCESS),
|
|
2496
2558
|
paymentMethodId: t.string()
|
|
2497
2559
|
}), _e = t.object({
|
|
2498
2560
|
firstName: P,
|
|
@@ -2500,42 +2562,42 @@ const L = t.enum([
|
|
|
2500
2562
|
email: P,
|
|
2501
2563
|
zipCode: P,
|
|
2502
2564
|
country: P,
|
|
2503
|
-
promotionCode:
|
|
2504
|
-
}),
|
|
2565
|
+
promotionCode: C
|
|
2566
|
+
}), Si = t.object({
|
|
2505
2567
|
email: P,
|
|
2506
2568
|
zipCode: P,
|
|
2507
2569
|
country: P,
|
|
2508
|
-
promotionCode:
|
|
2509
|
-
}),
|
|
2510
|
-
type:
|
|
2570
|
+
promotionCode: C
|
|
2571
|
+
}), ki = D.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Pi = t.object({
|
|
2572
|
+
type: ki,
|
|
2511
2573
|
sessionId: P,
|
|
2512
2574
|
checkoutPaymentMethod: ye,
|
|
2513
2575
|
paymentFlowMetadata: t.any().optional(),
|
|
2514
2576
|
doNotUseLegacyCCFlow: t.boolean().optional(),
|
|
2515
|
-
existingCCPMId:
|
|
2516
|
-
}).extend(_e.shape),
|
|
2517
|
-
type: t.literal(
|
|
2577
|
+
existingCCPMId: C
|
|
2578
|
+
}).extend(_e.shape), Oi = t.object({
|
|
2579
|
+
type: t.literal(D.enum.TOKENIZE_SUCCESS),
|
|
2518
2580
|
isReadyForCheckout: t.boolean()
|
|
2519
|
-
}),
|
|
2520
|
-
type: t.literal(
|
|
2581
|
+
}), ji = t.object({
|
|
2582
|
+
type: t.literal(D.enum.CHECKOUT_SUCCESS),
|
|
2521
2583
|
invoiceUrls: t.array(t.string()),
|
|
2522
2584
|
subscriptionIds: t.array(t.string()),
|
|
2523
2585
|
customerId: t.string()
|
|
2524
|
-
}),
|
|
2525
|
-
ii,
|
|
2526
|
-
ai,
|
|
2527
|
-
ui,
|
|
2528
|
-
di,
|
|
2529
|
-
mi,
|
|
2586
|
+
}), Ti = t.discriminatedUnion("type", [
|
|
2530
2587
|
pi,
|
|
2588
|
+
fi,
|
|
2589
|
+
_i,
|
|
2531
2590
|
bi,
|
|
2532
|
-
gi,
|
|
2533
2591
|
vi,
|
|
2534
|
-
|
|
2535
|
-
|
|
2592
|
+
wi,
|
|
2593
|
+
Pi,
|
|
2594
|
+
Oi,
|
|
2595
|
+
ji,
|
|
2596
|
+
Ei,
|
|
2597
|
+
Ci
|
|
2536
2598
|
]);
|
|
2537
2599
|
t.object({
|
|
2538
|
-
payload:
|
|
2600
|
+
payload: Ti,
|
|
2539
2601
|
nonce: P,
|
|
2540
2602
|
formId: P,
|
|
2541
2603
|
elementId: P
|
|
@@ -2554,23 +2616,23 @@ t.object({
|
|
|
2554
2616
|
existing_cc_pm_id: me(t.string())
|
|
2555
2617
|
});
|
|
2556
2618
|
t.object({
|
|
2557
|
-
payment_methods: t.array(
|
|
2619
|
+
payment_methods: t.array(di)
|
|
2558
2620
|
});
|
|
2559
|
-
const
|
|
2621
|
+
const Ri = t.object({
|
|
2560
2622
|
elementType: t.string(),
|
|
2561
2623
|
errors: t.array(t.string())
|
|
2562
2624
|
});
|
|
2563
2625
|
t.object({
|
|
2564
2626
|
session_id: t.string()
|
|
2565
2627
|
});
|
|
2566
|
-
const
|
|
2628
|
+
const Ii = t.object({
|
|
2567
2629
|
success: t.literal(!1),
|
|
2568
2630
|
error_type: t.literal("validation_error"),
|
|
2569
|
-
errors: t.array(
|
|
2631
|
+
errors: t.array(Ri)
|
|
2570
2632
|
});
|
|
2571
2633
|
t.discriminatedUnion("success", [
|
|
2572
2634
|
t.object({ success: t.literal(!0) }),
|
|
2573
|
-
|
|
2635
|
+
Ii
|
|
2574
2636
|
]);
|
|
2575
2637
|
t.object({
|
|
2576
2638
|
session_id: t.string(),
|
|
@@ -2582,7 +2644,8 @@ t.object({
|
|
|
2582
2644
|
t.object({
|
|
2583
2645
|
session_id: t.string(),
|
|
2584
2646
|
checkout_payment_method: ye,
|
|
2585
|
-
non_cde_form_fields: _e
|
|
2647
|
+
non_cde_form_fields: _e,
|
|
2648
|
+
extra_metadata: t.record(t.string(), t.any()).optional()
|
|
2586
2649
|
});
|
|
2587
2650
|
t.object({
|
|
2588
2651
|
status: t.enum([
|
|
@@ -2590,7 +2653,11 @@ t.object({
|
|
|
2590
2653
|
"failure",
|
|
2591
2654
|
"cancelled"
|
|
2592
2655
|
/* CANCELLED */
|
|
2593
|
-
])
|
|
2656
|
+
]),
|
|
2657
|
+
href: t.string().optional().nullable()
|
|
2658
|
+
});
|
|
2659
|
+
t.object({
|
|
2660
|
+
href: t.string().optional().nullable()
|
|
2594
2661
|
});
|
|
2595
2662
|
t.object({
|
|
2596
2663
|
type: t.string(),
|
|
@@ -2608,7 +2675,7 @@ t.object({
|
|
|
2608
2675
|
client_secret: t.string(),
|
|
2609
2676
|
stripe_pk: t.string()
|
|
2610
2677
|
});
|
|
2611
|
-
const
|
|
2678
|
+
const Ai = (e) => JSON.stringify(e), v = (e) => t.nullable(e.optional());
|
|
2612
2679
|
t.string().trim().min(1, { message: "Cannot be blank" });
|
|
2613
2680
|
t.object({
|
|
2614
2681
|
cde_response_type: t.literal("error"),
|
|
@@ -2616,76 +2683,76 @@ t.object({
|
|
|
2616
2683
|
headers: t.record(t.string(), t.string()).optional()
|
|
2617
2684
|
});
|
|
2618
2685
|
t.enum(["usd", "brl"]);
|
|
2619
|
-
const
|
|
2686
|
+
const qt = t.object({
|
|
2620
2687
|
name: t.string(),
|
|
2621
|
-
amount_atom_off:
|
|
2622
|
-
percent_off:
|
|
2623
|
-
currency:
|
|
2688
|
+
amount_atom_off: v(t.number()),
|
|
2689
|
+
percent_off: v(t.number()),
|
|
2690
|
+
currency: v(t.string()),
|
|
2624
2691
|
duration: t.string(),
|
|
2625
|
-
duration_in_months:
|
|
2626
|
-
}),
|
|
2692
|
+
duration_in_months: v(t.number())
|
|
2693
|
+
}), Ht = t.object({
|
|
2627
2694
|
amount_subtotal_atom: t.number().int(),
|
|
2628
2695
|
amount_total_atom: t.number().int(),
|
|
2629
2696
|
currency: t.string(),
|
|
2630
|
-
description:
|
|
2697
|
+
description: v(t.string()),
|
|
2631
2698
|
price_id: t.string(),
|
|
2632
|
-
billing_interval:
|
|
2633
|
-
billing_interval_count:
|
|
2699
|
+
billing_interval: v(t.string()),
|
|
2700
|
+
billing_interval_count: v(t.number().int()),
|
|
2634
2701
|
quantity: t.number().int()
|
|
2635
|
-
}),
|
|
2702
|
+
}), xi = t.record(t.string(), t.any()), Li = t.object({
|
|
2636
2703
|
name: t.string(),
|
|
2637
|
-
settings:
|
|
2638
|
-
}),
|
|
2704
|
+
settings: v(xi)
|
|
2705
|
+
}), re = t.object({
|
|
2639
2706
|
provider: t.string(),
|
|
2640
|
-
processor_name:
|
|
2641
|
-
metadata:
|
|
2642
|
-
}),
|
|
2707
|
+
processor_name: v(t.string()),
|
|
2708
|
+
metadata: v(t.record(t.string(), t.any()))
|
|
2709
|
+
}), Mi = t.object({
|
|
2643
2710
|
quantity: t.number()
|
|
2644
|
-
}),
|
|
2645
|
-
id:
|
|
2646
|
-
billing_interval:
|
|
2647
|
-
billing_interval_count:
|
|
2648
|
-
subscription_items: t.array(
|
|
2649
|
-
trial_start:
|
|
2650
|
-
trial_end:
|
|
2651
|
-
}),
|
|
2711
|
+
}), Di = t.object({
|
|
2712
|
+
id: v(t.string()),
|
|
2713
|
+
billing_interval: v(t.string()),
|
|
2714
|
+
billing_interval_count: v(t.number().int()),
|
|
2715
|
+
subscription_items: t.array(Mi),
|
|
2716
|
+
trial_start: v(t.string()),
|
|
2717
|
+
trial_end: v(t.string())
|
|
2718
|
+
}), Vt = t.object({
|
|
2652
2719
|
amount_atom: t.number()
|
|
2653
|
-
}),
|
|
2720
|
+
}), Ni = t.object({
|
|
2654
2721
|
amount_atom: t.number(),
|
|
2655
2722
|
amount_atom_considering_discount_applied: t.number(),
|
|
2656
2723
|
currency: t.string(),
|
|
2657
|
-
discount_amount_atoms: t.array(
|
|
2724
|
+
discount_amount_atoms: t.array(Vt),
|
|
2658
2725
|
subscription_item_id: t.string()
|
|
2659
|
-
}),
|
|
2660
|
-
coupon:
|
|
2661
|
-
}),
|
|
2726
|
+
}), Ui = t.object({
|
|
2727
|
+
coupon: qt
|
|
2728
|
+
}), Fi = t.object({
|
|
2662
2729
|
currency: t.string(),
|
|
2663
|
-
discounts: t.array(
|
|
2664
|
-
hosted_invoice_url:
|
|
2665
|
-
lines: t.array(
|
|
2730
|
+
discounts: t.array(Ui),
|
|
2731
|
+
hosted_invoice_url: v(t.string()),
|
|
2732
|
+
lines: t.array(Ni),
|
|
2666
2733
|
remaining_amount_atom: t.number(),
|
|
2667
2734
|
tax_amount_atom: t.number(),
|
|
2668
2735
|
total_amount_atom: t.number(),
|
|
2669
|
-
total_discount_amount_atoms: t.array(
|
|
2736
|
+
total_discount_amount_atoms: t.array(Vt)
|
|
2670
2737
|
}), tt = t.object({
|
|
2671
|
-
created: t.array(
|
|
2672
|
-
invoices: t.array(
|
|
2673
|
-
}),
|
|
2738
|
+
created: t.array(Di),
|
|
2739
|
+
invoices: t.array(Fi)
|
|
2740
|
+
}), $i = t.object({
|
|
2674
2741
|
preview: tt,
|
|
2675
|
-
preview_post_trial:
|
|
2676
|
-
coupons: t.array(
|
|
2742
|
+
preview_post_trial: v(tt),
|
|
2743
|
+
coupons: t.array(qt)
|
|
2677
2744
|
}), rt = t.object({
|
|
2678
2745
|
status: t.literal("open"),
|
|
2679
2746
|
token: t.string(),
|
|
2680
|
-
email:
|
|
2681
|
-
line_items: t.array(
|
|
2747
|
+
email: v(t.string()),
|
|
2748
|
+
line_items: t.array(Ht),
|
|
2682
2749
|
amount_subtotal_atom: t.number().int(),
|
|
2683
2750
|
amount_total_atom: t.number().int(),
|
|
2684
|
-
brand:
|
|
2685
|
-
subs_preview:
|
|
2751
|
+
brand: Li,
|
|
2752
|
+
subs_preview: v($i),
|
|
2686
2753
|
// Null in setup mode
|
|
2687
|
-
methods_available: t.array(
|
|
2688
|
-
}),
|
|
2754
|
+
methods_available: t.array(re)
|
|
2755
|
+
}), zi = t.discriminatedUnion("mode", [
|
|
2689
2756
|
t.object({
|
|
2690
2757
|
mode: t.literal("setup"),
|
|
2691
2758
|
currency: t.nullable(t.undefined())
|
|
@@ -2694,12 +2761,12 @@ const Ft = t.object({
|
|
|
2694
2761
|
mode: t.enum(["payment", "subscription"]),
|
|
2695
2762
|
currency: t.string()
|
|
2696
2763
|
}).extend(rt.shape)
|
|
2697
|
-
]),
|
|
2764
|
+
]), qi = t.object({
|
|
2698
2765
|
status: t.literal("complete")
|
|
2699
|
-
}),
|
|
2766
|
+
}), Hi = t.object({
|
|
2700
2767
|
status: t.literal("expired")
|
|
2701
2768
|
});
|
|
2702
|
-
t.union([
|
|
2769
|
+
t.union([zi, qi, Hi]);
|
|
2703
2770
|
t.object({
|
|
2704
2771
|
logo: t.string(),
|
|
2705
2772
|
icon: t.string(),
|
|
@@ -2718,10 +2785,10 @@ t.object({
|
|
|
2718
2785
|
customer_email: t.string(),
|
|
2719
2786
|
customer_zip_code: t.string(),
|
|
2720
2787
|
customer_country: t.string(),
|
|
2721
|
-
line_items: t.array(
|
|
2788
|
+
line_items: t.array(Ht),
|
|
2722
2789
|
total_amount_atom: t.number().int(),
|
|
2723
2790
|
cancel_at_end: t.boolean(),
|
|
2724
|
-
checkout_payment_method:
|
|
2791
|
+
checkout_payment_method: re,
|
|
2725
2792
|
promotion_code: t.string().optional(),
|
|
2726
2793
|
do_not_use_legacy_cc_flow: t.boolean().optional()
|
|
2727
2794
|
});
|
|
@@ -2732,18 +2799,18 @@ t.object({
|
|
|
2732
2799
|
id: t.string(),
|
|
2733
2800
|
return_url: t.string()
|
|
2734
2801
|
});
|
|
2735
|
-
const
|
|
2802
|
+
const Vi = t.object({
|
|
2736
2803
|
type: t.string(),
|
|
2737
2804
|
loc: t.array(t.string()),
|
|
2738
2805
|
msg: t.string(),
|
|
2739
2806
|
url: t.string()
|
|
2740
2807
|
});
|
|
2741
|
-
t.array(
|
|
2808
|
+
t.array(Vi);
|
|
2742
2809
|
t.object({
|
|
2743
2810
|
new_customer_email: t.string().optional(),
|
|
2744
2811
|
new_customer_address: t.record(t.string(), t.any()).optional(),
|
|
2745
2812
|
payment_provider: t.string(),
|
|
2746
|
-
checkout_payment_method:
|
|
2813
|
+
checkout_payment_method: re,
|
|
2747
2814
|
existing_cc_pm_id: t.string().optional(),
|
|
2748
2815
|
their_existing_pm_id: t.string().optional()
|
|
2749
2816
|
});
|
|
@@ -2751,29 +2818,31 @@ t.object({
|
|
|
2751
2818
|
required_user_actions: t.array(t.record(t.string(), t.any()))
|
|
2752
2819
|
});
|
|
2753
2820
|
t.object({
|
|
2754
|
-
fields:
|
|
2755
|
-
checkoutPaymentMethod:
|
|
2821
|
+
fields: Si,
|
|
2822
|
+
checkoutPaymentMethod: re
|
|
2756
2823
|
});
|
|
2757
2824
|
t.object({
|
|
2758
2825
|
session_id: t.string(),
|
|
2759
2826
|
non_cde_form_fields: _e,
|
|
2760
|
-
checkout_payment_method:
|
|
2827
|
+
checkout_payment_method: re,
|
|
2828
|
+
extra_metadata: t.record(t.string(), t.any())
|
|
2829
|
+
// This is optional in CDE, but not in OJS moving forward
|
|
2761
2830
|
});
|
|
2762
2831
|
t.object({
|
|
2763
2832
|
required_user_actions: t.array(t.record(t.string(), t.any())),
|
|
2764
2833
|
cc_pm_id: t.string()
|
|
2765
2834
|
});
|
|
2766
2835
|
t.record(t.any());
|
|
2767
|
-
function
|
|
2836
|
+
function Yi(e, n) {
|
|
2768
2837
|
var r = Object.setPrototypeOf;
|
|
2769
2838
|
r ? r(e, n) : e.__proto__ = n;
|
|
2770
2839
|
}
|
|
2771
|
-
function
|
|
2840
|
+
function Ki(e, n) {
|
|
2772
2841
|
n === void 0 && (n = e.constructor);
|
|
2773
2842
|
var r = Error.captureStackTrace;
|
|
2774
2843
|
r && r(e, n);
|
|
2775
2844
|
}
|
|
2776
|
-
var
|
|
2845
|
+
var Bi = /* @__PURE__ */ function() {
|
|
2777
2846
|
var e = function(r, o) {
|
|
2778
2847
|
return e = Object.setPrototypeOf || {
|
|
2779
2848
|
__proto__: []
|
|
@@ -2794,18 +2863,18 @@ var Fi = /* @__PURE__ */ function() {
|
|
|
2794
2863
|
};
|
|
2795
2864
|
}();
|
|
2796
2865
|
(function(e) {
|
|
2797
|
-
|
|
2866
|
+
Bi(n, e);
|
|
2798
2867
|
function n(r, o) {
|
|
2799
2868
|
var i = this.constructor, s = e.call(this, r, o) || this;
|
|
2800
2869
|
return Object.defineProperty(s, "name", {
|
|
2801
2870
|
value: i.name,
|
|
2802
2871
|
enumerable: !1,
|
|
2803
2872
|
configurable: !0
|
|
2804
|
-
}),
|
|
2873
|
+
}), Yi(s, i.prototype), Ki(s), s;
|
|
2805
2874
|
}
|
|
2806
2875
|
return n;
|
|
2807
2876
|
})(Error);
|
|
2808
|
-
const
|
|
2877
|
+
const Zi = (e) => {
|
|
2809
2878
|
const n = (...o) => {
|
|
2810
2879
|
window.console.log(`${$.green.bold("ojs/")}${$.bold.gray(`${e}`)} `, ...o);
|
|
2811
2880
|
}, r = (...o) => {
|
|
@@ -2830,6 +2899,16 @@ t.array(
|
|
|
2830
2899
|
our_existing_pm_id: t.string()
|
|
2831
2900
|
})
|
|
2832
2901
|
).length(1);
|
|
2902
|
+
t.object({
|
|
2903
|
+
"op-pockyt-3ds-url": t.string(),
|
|
2904
|
+
"op-pockyt-txn-no": t.string(),
|
|
2905
|
+
"op-pockyt-ref-no": t.string()
|
|
2906
|
+
});
|
|
2907
|
+
t.array(
|
|
2908
|
+
t.object({
|
|
2909
|
+
our_existing_pm_id: t.string()
|
|
2910
|
+
})
|
|
2911
|
+
).length(1);
|
|
2833
2912
|
t.object({
|
|
2834
2913
|
provider: t.union([t.literal("apple_pay"), t.literal("google_pay")]),
|
|
2835
2914
|
processor_name: t.literal("stripe"),
|
|
@@ -2847,7 +2926,7 @@ const nt = {
|
|
|
2847
2926
|
and ".isAvailable" to know if a payment request is available.`
|
|
2848
2927
|
);
|
|
2849
2928
|
}
|
|
2850
|
-
}, { err__:
|
|
2929
|
+
}, { err__: Ji } = Zi("form-callbacks"), I = t.function().optional(), ot = t.object({
|
|
2851
2930
|
onFocus: I,
|
|
2852
2931
|
onBlur: I,
|
|
2853
2932
|
onChange: I,
|
|
@@ -2863,7 +2942,7 @@ const nt = {
|
|
|
2863
2942
|
constructor() {
|
|
2864
2943
|
this.setCallbacks = (n) => {
|
|
2865
2944
|
this._callbacks = N.createEmptyCallbacks(), Object.entries(n).forEach(([r, o]) => {
|
|
2866
|
-
const i =
|
|
2945
|
+
const i = ci(r, o ?? N.NOOP, Ji);
|
|
2867
2946
|
this._callbacks[r] = i;
|
|
2868
2947
|
});
|
|
2869
2948
|
}, this._callbacks = N.createEmptyCallbacks();
|
|
@@ -2886,39 +2965,39 @@ N.NOOP = () => {
|
|
|
2886
2965
|
return r.setCallbacks(ot.parse(n)), r;
|
|
2887
2966
|
};
|
|
2888
2967
|
let it = N;
|
|
2889
|
-
const
|
|
2890
|
-
const [n, r] =
|
|
2968
|
+
const Gi = (e) => {
|
|
2969
|
+
const [n, r] = Y({
|
|
2891
2970
|
apple_pay: nt,
|
|
2892
2971
|
google_pay: nt
|
|
2893
|
-
}), o =
|
|
2972
|
+
}), o = Zt(
|
|
2894
2973
|
(i) => {
|
|
2895
2974
|
r(i), e == null || e(i);
|
|
2896
2975
|
},
|
|
2897
2976
|
[e]
|
|
2898
2977
|
);
|
|
2899
2978
|
return { paymentRequests: n, overridenOnPaymentRequestLoad: o };
|
|
2900
|
-
}, st = "op_ojs_form",
|
|
2901
|
-
const [n, r] =
|
|
2979
|
+
}, st = "op_ojs_form", is = (e) => {
|
|
2980
|
+
const [n, r] = Y(), [o, i] = Y(null), { paymentRequests: s, overridenOnPaymentRequestLoad: a } = Gi(e.onPaymentRequestLoad), [c, l] = Y(!1), [u, d] = Y(null), f = ii({
|
|
2902
2981
|
...e,
|
|
2903
2982
|
onPaymentRequestLoad: a,
|
|
2904
|
-
onLoad: (
|
|
2905
|
-
var
|
|
2906
|
-
|
|
2983
|
+
onLoad: (m, p) => {
|
|
2984
|
+
var h;
|
|
2985
|
+
l(!0), (h = e.onLoad) == null || h.call(e, m, p);
|
|
2907
2986
|
}
|
|
2908
2987
|
});
|
|
2909
2988
|
if (Se(() => {
|
|
2910
2989
|
if (n) return;
|
|
2911
|
-
const
|
|
2990
|
+
const m = et.getInstance() ?? new et({
|
|
2912
2991
|
checkoutSecureToken: e.checkoutSecureToken,
|
|
2913
2992
|
formTarget: `#${st}`,
|
|
2914
2993
|
baseUrl: e.baseUrl,
|
|
2915
2994
|
customInitParams: e.customInitParams,
|
|
2916
|
-
...
|
|
2995
|
+
...f
|
|
2917
2996
|
});
|
|
2918
|
-
r(
|
|
2919
|
-
const p =
|
|
2920
|
-
i(p),
|
|
2921
|
-
|
|
2997
|
+
r(m);
|
|
2998
|
+
const p = Wi(m);
|
|
2999
|
+
i(p), m.initFlows.stripeLink.publisher.subscribe((h) => {
|
|
3000
|
+
h.isSuccess && h.loadedValue.isAvailable && d(h.loadedValue.controller);
|
|
2922
3001
|
});
|
|
2923
3002
|
}, []), !n)
|
|
2924
3003
|
return /* @__PURE__ */ A(ve, {});
|
|
@@ -2933,47 +3012,47 @@ const qi = (e) => {
|
|
|
2933
3012
|
isLoading: !1,
|
|
2934
3013
|
error: null
|
|
2935
3014
|
},
|
|
2936
|
-
stripeLink:
|
|
3015
|
+
stripeLink: u
|
|
2937
3016
|
};
|
|
2938
|
-
return /* @__PURE__ */ A(ve, { children: o ? /* @__PURE__ */ A(
|
|
2939
|
-
},
|
|
3017
|
+
return /* @__PURE__ */ A(ve, { children: o ? /* @__PURE__ */ A(lt.Provider, { value: o, children: /* @__PURE__ */ A("div", { id: st, className: e.className, children: e.children(_) }) }) : /* @__PURE__ */ A(ve, {}) });
|
|
3018
|
+
}, Wi = (e) => ({
|
|
2940
3019
|
formId: e.formId,
|
|
2941
3020
|
formHeight: e.formProperties.height,
|
|
2942
3021
|
referrer: e.referrer,
|
|
2943
3022
|
checkoutSecureToken: e.checkoutSecureToken,
|
|
2944
3023
|
registerIframe: e.registerIframe,
|
|
2945
3024
|
baseUrl: e.baseUrl
|
|
2946
|
-
}),
|
|
2947
|
-
const { elementType: n, styles: r } = e, { formId: o, referrer: i, formHeight: s, checkoutSecureToken: a, registerIframe: c, baseUrl:
|
|
3025
|
+
}), ge = (e) => {
|
|
3026
|
+
const { elementType: n, styles: r } = e, { formId: o, referrer: i, formHeight: s, checkoutSecureToken: a, registerIframe: c, baseUrl: l } = Jt(), u = n.toLowerCase(), [d, f] = Y(!1), _ = at(null), m = T(() => r ? Ai(r) : "", [r]), p = T(() => ({
|
|
2948
3027
|
border: "none",
|
|
2949
3028
|
width: "100%",
|
|
2950
3029
|
height: s
|
|
2951
|
-
}), [s]),
|
|
3030
|
+
}), [s]), h = T(() => {
|
|
2952
3031
|
if (!a || !i) return "";
|
|
2953
|
-
const
|
|
2954
|
-
return
|
|
2955
|
-
}, [
|
|
2956
|
-
return Se(() =>
|
|
2957
|
-
!_.current || !
|
|
2958
|
-
}, [
|
|
3032
|
+
const j = new URLSearchParams();
|
|
3033
|
+
return j.append("referer", i), j.append("styles", m), j.append("formId", o), j.append("secureToken", a), j.toString();
|
|
3034
|
+
}, [m, o, i, a]);
|
|
3035
|
+
return Se(() => f(!0), []), Se(() => {
|
|
3036
|
+
!_.current || !d || c(n, _.current);
|
|
3037
|
+
}, [d]), a ? /* @__PURE__ */ A(
|
|
2959
3038
|
"iframe",
|
|
2960
3039
|
{
|
|
2961
|
-
id: `ojs-${
|
|
2962
|
-
name: `${
|
|
3040
|
+
id: `ojs-${u}-element`,
|
|
3041
|
+
name: `${u}-element`,
|
|
2963
3042
|
className: "ojs-iframe",
|
|
2964
|
-
src: `${
|
|
3043
|
+
src: `${l}/app/v1/${u}-element/?${h}`,
|
|
2965
3044
|
style: p,
|
|
2966
3045
|
ref: _
|
|
2967
3046
|
}
|
|
2968
3047
|
) : (console.error("[form] Cannot render partially initialized frame"), /* @__PURE__ */ A("div", {}));
|
|
2969
|
-
},
|
|
3048
|
+
}, ss = ({ styles: e }) => /* @__PURE__ */ A(ge, { styles: e, elementType: W.CARD_CVC }), as = ({ styles: e }) => /* @__PURE__ */ A(ge, { styles: e, elementType: W.CARD }), cs = ({ styles: e }) => /* @__PURE__ */ A(ge, { styles: e, elementType: W.CARD_EXPIRY }), ls = ({ styles: e }) => /* @__PURE__ */ A(ge, { styles: e, elementType: W.CARD_NUMBER });
|
|
2970
3049
|
export {
|
|
2971
|
-
|
|
2972
|
-
|
|
2973
|
-
|
|
2974
|
-
|
|
2975
|
-
|
|
2976
|
-
|
|
2977
|
-
|
|
3050
|
+
ss as CardCvcElement,
|
|
3051
|
+
as as CardElement,
|
|
3052
|
+
cs as CardExpiryElement,
|
|
3053
|
+
ls as CardNumberElement,
|
|
3054
|
+
is as ElementsForm,
|
|
3055
|
+
Ft as FieldName,
|
|
3056
|
+
Jt as useOpenPayElements
|
|
2978
3057
|
};
|
|
2979
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVJlZiwgdXNlTWVtbywgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0ICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBZIGZyb20gJ2NoYWxrJztcblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IGZ0ID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCBwdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSksIGh0ID0geiQxLmFycmF5KHB0KSwgbXQgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgeXQgPSB6JDEuYXJyYXkobXQpLCBfdCA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogXCJDb25uZWN0aW9uIGVycm9yOiBwbGVhc2UgZG91YmxlIGNoZWNrIGlmIHlvdSBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldCwgdGhlbiB0cnkgYWdhaW5cIlxufSwgYWUgPSAodCkgPT4ge1xuICBjb25zdCByID0gdC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIF90W3JdID8/IHQ7XG59LCBndCA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBKU09OLnBhcnNlKHQpID09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgYnQgPSAodCkgPT4gdC5sZW5ndGggPT09IDEgPyBhZSh0WzBdLm1zZykgOiBgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7dC5tYXAoKGUpID0+IGDigKIgJHthZShlLm1zZyl9YCkuam9pbihgXG5gKX1gLCB2dCA9ICh0KSA9PiBgRW5jb3VudGVyZWQgdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBgLSAke2UucGF0aC5qb2luKFwiL1wiKX06ICR7ZS5tZXNzYWdlfWApLmpvaW4oYFxuYCl9YCwgVSA9ICh0KSA9PiB7XG4gIGlmICh0IGluc3RhbmNlb2YgRXJyb3IpXG4gICAgaWYgKGd0KHQubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IHIgPSBKU09OLnBhcnNlKHQubWVzc2FnZSk7XG4gICAgICByZXR1cm4gaHQuc2FmZVBhcnNlKHIpLnN1Y2Nlc3MgPyBidChyKSA6IHl0LnNhZmVQYXJzZShyKS5zdWNjZXNzID8gdnQocikgOiAoY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHt0Lm1lc3NhZ2V9YCksIHQubWVzc2FnZSk7XG4gICAgfSBlbHNlXG4gICAgICByZXR1cm4gYWUodC5tZXNzYWdlKTtcbiAgaWYgKHR5cGVvZiB0ID09IFwib2JqZWN0XCIpXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICByZXR1cm4gciArIFwiXCI7XG4gICAgfVxuICBlbHNlXG4gICAgcmV0dXJuIHQgKyBcIlwiO1xufSwgd3QgPSAodCwgciwgZSkgPT4gKC4uLm4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gciguLi5uKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIGUoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke3R9KTpgLCBpKTtcbiAgICByZXR1cm47XG4gIH1cbn0sIFMgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSksIEUgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCksIFogPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG52YXIgbSA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkZJUlNUX05BTUUgPSBcImZpcnN0TmFtZVwiLCB0LkxBU1RfTkFNRSA9IFwibGFzdE5hbWVcIiwgdC5FTUFJTCA9IFwiZW1haWxcIiwgdC5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCB0LkNJVFkgPSBcImNpdHlcIiwgdC5TVEFURSA9IFwic3RhdGVcIiwgdC5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIHQuQUREUkVTUyA9IFwiYWRkcmVzc1wiLCB0LlBIT05FID0gXCJwaG9uZVwiLCB0LlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIHQpKShtIHx8IHt9KTtcbmNvbnN0IE5lID0geiQxLm5hdGl2ZUVudW0obSk7XG52YXIgVWUgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5DQVJEX05VTUJFUiA9IFwiY2FyZE51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkRXhwaXJ5XCIsIHQuQ0FSRF9DVkMgPSBcImNhcmRDdmNcIiwgdCkpKFVlIHx8IHt9KTtcbmNvbnN0ICRlID0geiQxLm5hdGl2ZUVudW0oVWUpLCBWZSA9IHokMS51bmlvbihbTmUsICRlXSk7XG52YXIgTCA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkNBUkQgPSBcImNhcmRcIiwgdC5DQVJEX05VTUJFUiA9IFwiY2FyZC1udW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZC1leHBpcnlcIiwgdC5DQVJEX0NWQyA9IFwiY2FyZC1jdmNcIiwgdCkpKEwgfHwge30pO1xuY29uc3QgRXQgPSB6JDEubmF0aXZlRW51bShMKSwgZWUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IFooeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IFooeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgU3QgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogRSxcbiAgZXhwaXJ5OiBFLFxuICBjdmM6IEVcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogRSxcbiAgY29sb3I6IEUsXG4gIGZvbnRGYW1pbHk6IEUsXG4gIGZvbnRTaXplOiBFLFxuICBmb250V2VpZ2h0OiBFLFxuICBtYXJnaW46IEUsXG4gIHBhZGRpbmc6IEUsXG4gIGxldHRlclNwYWNpbmc6IEUsXG4gIGxpbmVIZWlnaHQ6IEVcbn0pO1xuY29uc3QgUCA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pLCBDdCA9IFAuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSksIGt0ID0geiQxLm9iamVjdCh7IHR5cGU6IEN0IH0pLCBQdCA9IFAuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBJdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBQdCxcbiAgZWxlbWVudFR5cGU6ICRlLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBPdCA9IFAuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSksIEF0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IE90LFxuICBtZXNzYWdlOiBTLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgUnQgPSBQLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSksIFR0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFJ0LFxuICBlbGVtZW50VHlwZTogVmUsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pLCBqdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChQLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBTXG59KSwgTXQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoUC5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUyxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogRSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KGVlKVxufSksIEx0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFAuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBGdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChQLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KSwgJCA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IFMsXG4gIGxhc3ROYW1lOiBTLFxuICBlbWFpbDogUyxcbiAgemlwQ29kZTogUyxcbiAgY291bnRyeTogUyxcbiAgcHJvbW90aW9uQ29kZTogRVxufSksIHh0ID0geiQxLm9iamVjdCh7XG4gIGVtYWlsOiBTLFxuICB6aXBDb2RlOiBTLFxuICBjb3VudHJ5OiBTLFxuICBwcm9tb3Rpb25Db2RlOiBFXG59KSwgRHQgPSBQLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSksIE50ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IER0LFxuICBzZXNzaW9uSWQ6IFMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZWUsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogRVxufSkuZXh0ZW5kKCQuc2hhcGUpLCBVdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChQLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSksICR0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFAuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pLCBWdCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAga3QsXG4gIEl0LFxuICBBdCxcbiAgVHQsXG4gIGp0LFxuICBNdCxcbiAgTnQsXG4gIFV0LFxuICAkdCxcbiAgTHQsXG4gIEZ0XG5dKSwgcXQgPSB6JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogVnQsXG4gIG5vbmNlOiBTLFxuICBmb3JtSWQ6IFMsXG4gIGVsZW1lbnRJZDogU1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogU1xufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFooeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCB6dCA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShTdClcbn0pLCBIdCA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgWXQgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEh0KVxufSksIEJ0ID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwoITApIH0pLFxuICBZdFxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogZWUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6ICQsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFooeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogZWUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6ICRcbn0pO1xudmFyIEcgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIHQuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCB0LkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIHQpKShHIHx8IHt9KTtcbmNvbnN0IEt0ID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1xuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwiZmFpbHVyZVwiLFxuICAgIFwiY2FuY2VsbGVkXCJcbiAgICAvKiBDQU5DRUxMRUQgKi9cbiAgXSlcbn0pLCBKdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKClcbn0pLCBadCA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtlLCBuXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpID0gTmUucGFyc2UoZSk7XG4gICAgICBBcnJheS5pc0FycmF5KG4pID8gcltpXSA9IG4gOiBBcnJheS5pc0FycmF5KG4uX2Vycm9ycykgJiYgKHJbaV0gPSBuLl9lcnJvcnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSksIHI7XG59LCBHdCA9IHokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSksIFd0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSksIFF0ID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufSwgdGUgPSBhc3luYyAodCkgPT4ge1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgZ2UoKSB8fCBhd2FpdCB0cig1MDApO1xuICBpZiAoIWdlKCkpXG4gICAgdGhyb3cgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKSwgbmV3IEVycm9yKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gIHJldHVybiBuZXcgU3RyaXBlKHQpO1xufSwgWHQgPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gYXdhaXQgdGUodCk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IGUuZWxlbWVudHMociksXG4gICAgc3RyaXBlOiBlXG4gIH07XG59LCBlciA9IGFzeW5jICh0LCByLCBlLCBuLCBpKSA9PiB7XG4gIGNvbnN0IHMgPSBhd2FpdCB0ZSh0KSwgYSA9IFF0W2UudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICByZXR1cm4gcy5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IGEsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IHIsXG4gICAgICBwZW5kaW5nOiBuXG4gICAgfSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiAhMCxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogITAsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdXG4gIH0pO1xufSwgdHIgPSAodCkgPT4gbmV3IFByb21pc2UoKHIpID0+IHtcbiAgc2V0VGltZW91dChyLCB0KTtcbn0pLCBnZSA9ICgpID0+IFwiU3RyaXBlXCIgaW4gd2luZG93LCByciA9IGFzeW5jICh0KSA9PiBuZXcgUHJvbWlzZSgociwgZSkgPT4ge1xuICB0cnkge1xuICAgIHQub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICByKG4pO1xuICAgIH0pLCB0Lm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgIGUobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAobikge1xuICAgIGUobik7XG4gIH1cbn0pLCBuciA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGlmICghdC5zdHJpcGVfcGsgfHwgIXQuY2xpZW50X3NlY3JldClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xuICBjb25zdCBuID0gYXdhaXQgKGF3YWl0IHRlKHQuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cCh0LmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogci5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAobi5lcnJvcilcbiAgICB0aHJvdyByLmNvbXBsZXRlKFwiZmFpbFwiKSwgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtuLmVycm9yLm1lc3NhZ2UgPz8gXCJ1bmtub3duXCJ9YCk7XG4gIHJldHVybiByLmNvbXBsZXRlKFwic3VjY2Vzc1wiKSwgbjtcbn0sIG9yID0gYXN5bmMgKHQpID0+IHtcbiAgdmFyIGksIHMsIGEsIGM7XG4gIGNvbnN0IGUgPSBhd2FpdCAoYXdhaXQgdGUodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiB0LnN0cmlwZV9wbV9pZFxuICB9KSwgbiA9IChpID0gZS5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuc3RhdHVzO1xuICBpZiAobiA9PT0gXCJzdWNjZWVkZWRcIilcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIHQuc3RyaXBlX3BtX2lkKSwgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgZS5zZXR1cEludGVudCk7XG4gIGVsc2UgdGhyb3cgbiA9PT0gXCJjYW5jZWxlZFwiID8gbmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpIDogbmV3IEVycm9yKFxuICAgIGAkeygocyA9IGUuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBzLm1lc3NhZ2UpID8/ICgoYyA9IChhID0gZS5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGEubGFzdF9zZXR1cF9lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWVzc2FnZSkgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICApO1xufSwgaXIgPSAodCkgPT4gSlNPTi5zdHJpbmdpZnkodCksIGRlID0gKHQsIHIpID0+IEFycmF5LmZyb20odC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtb3BpZF1cIikgPz8gW10pLnJlZHVjZSgoaSwgcykgPT4ge1xuICBjb25zdCBhID0gcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gIHJldHVybiBhID8geyAuLi5pLCBbYV06IHMudmFsdWUgfSA6IGk7XG59LCB7fSksIHNyID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcXQucGFyc2UodCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCB0LCByKSwgcjtcbiAgfVxufSwgYXIgPSBhc3luYyAodCkgPT4ge1xuICBpZiAodHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCAhdCkgcmV0dXJuICExO1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSB7IHR5cGU6IFwicGluZ1wiIH0sIGUgPSBhd2FpdCB0LnNlbmQocik7XG4gICAgaWYgKGUgIT09ICEwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAndHJ1ZScgYWZ0ZXIgcGluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgcmV0dXJuICEwO1xuICB9IGNhdGNoIChyKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIENERSBjb25uZWN0aW9uIGNoZWNrOlwiLCByKSwgITE7XG4gIH1cbn0sIGNyID0gKHQsIHIpID0+ICEhdCAmJiByLCBnID0gKHQpID0+IHokMS5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pO1xuY29uc3QgdXIgPSB6JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgcWUgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IGcoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IGcoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IGcoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBnKHokMS5udW1iZXIoKSlcbn0pLCB6ZSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogZyh6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBnKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IGcoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIGxyID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksIGRyID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IGcobHIpXG59KSwgViA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogZyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBmciA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KSwgcHIgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IGcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogZyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBnKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KGZyKSxcbiAgdHJpYWxfc3RhcnQ6IGcoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBnKHokMS5zdHJpbmcoKSlcbn0pLCBIZSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KSwgaHIgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShIZSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBtciA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IHFlXG59KSwgeXIgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkobXIpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IGcoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShociksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSGUpXG59KSwgYmUgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KHByKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheSh5cilcbn0pLCBZZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBiZSxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBnKGJlKSxcbiAgY291cG9uczogeiQxLmFycmF5KHFlKVxufSksIHZlID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoemUpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogZHIsXG4gIHN1YnNfcHJldmlldzogZyhZZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KFYpXG59KSwgQmUgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZCh2ZS5zaGFwZSksXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6JDEuc3RyaW5nKClcbiAgfSkuZXh0ZW5kKHZlLnNoYXBlKVxuXSksIF9yID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSksIGdyID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbQmUsIF9yLCBncl0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEtlID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheSh6ZSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBWLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBiciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgdnIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KHZyKTtcbnokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVixcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgSmUgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IHh0LFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IFZcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogJCxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IFZcbn0pO1xuY29uc3Qgd3IgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbmNvbnN0IEVyID0gKHQpID0+IHQucmVkdWNlKChyLCBlKSA9PiByICsgZSwgMCk7XG5mdW5jdGlvbiBTcih0LCByKSB7XG4gIHZhciBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBlID8gZSh0LCByKSA6IHQuX19wcm90b19fID0gcjtcbn1cbmZ1bmN0aW9uIENyKHQsIHIpIHtcbiAgciA9PT0gdm9pZCAwICYmIChyID0gdC5jb25zdHJ1Y3Rvcik7XG4gIHZhciBlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGUgJiYgZSh0LCByKTtcbn1cbnZhciBrciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBpLl9fcHJvdG9fXyA9IHM7XG4gICAgfSB8fCBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBmb3IgKHZhciBhIGluIHMpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBhKSAmJiAoaVthXSA9IHNbYV0pO1xuICAgIH0sIHQoZSwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbihyLCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhlKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgdChyLCBlKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHI7XG4gICAgfVxuICAgIHIucHJvdG90eXBlID0gZSA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoZSkgOiAobi5wcm90b3R5cGUgPSBlLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIFByID0gZnVuY3Rpb24odCkge1xuICBrcihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmNvbnN0cnVjdG9yLCBzID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGkubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBTcihzLCBpLnByb3RvdHlwZSksIENyKHMpLCBzO1xuICB9XG4gIHJldHVybiByO1xufShFcnJvcik7XG5jbGFzcyBaZSBleHRlbmRzIFByIHtcbiAgY29uc3RydWN0b3Iocikge1xuICAgIGNvbnN0IGUgPSBgJHtyLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihlKSwgdGhpcy5yZXNwb25zZSA9IHI7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IEkgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgdC5zZW5kKHIpO1xuICBpZiAoT3IobikpXG4gICAgdGhyb3cgbmV3IFplKG4pO1xuICBpZiAoIUlyKG4sIGUpKSB7XG4gICAgY29uc3QgaSA9IGUuc2FmZVBhcnNlKG4pO1xuICAgIHRocm93IGkuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgZSwgXCJBY3R1YWw6XCIsIG4pLCBpLmVycm9yKTtcbiAgfVxuICByZXR1cm4gbjtcbn0sIElyID0gKHQsIHIpID0+IHIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIE9yID0gKHQpID0+IHVyLnNhZmVQYXJzZSh0KS5zdWNjZXNzLCBBciA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByIH0sIFllKSwgcSA9IGFzeW5jICh0KSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBCZSksIFJyID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IEkodCwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIEplKSwgVHIgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiByIH0sIHdyKSwganIgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiByIH0sIEplKSwgZmUgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogciB9LCB6dCksIE1yID0gYXN5bmMgKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgbiA9IGF3YWl0IEFyKHQsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIsXG4gICAgcHJvbW90aW9uX2NvZGU6IGVcbiAgfSksIGkgPSBuZXcgU2V0KG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMuY3VycmVuY3kpKTtcbiAgaWYgKGkuc2l6ZSAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtpLnNpemV9YCk7XG4gIGNvbnN0IHMgPSBpLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiLCBhID0gRXIobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeTogcyxcbiAgICBhbW91bnRBdG9tOiBhXG4gIH07XG59LCBHZSA9IGFzeW5jICh0LCByLCBlLCBuKSA9PiB7XG4gIGlmIChlKVxuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIHtcbiAgICBuID0gbiB8fCB2b2lkIDA7XG4gICAgY29uc3QgaSA9IGF3YWl0IE1yKHQsIHIsIG4pO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGkuYW1vdW50QXRvbSwgY3VycmVuY3k6IGkuY3VycmVuY3kgfTtcbiAgfVxufSwgTHIgPSBhc3luYyAodCwgcikgPT4ge1xuICBpZiAodC5zaXplID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20odC52YWx1ZXMoKSkubWFwKFxuICAgICAgKG4pID0+IEkobiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZDogciB9LCBCdClcbiAgICApXG4gICk7XG59LCB3ZSA9IGFzeW5jICh0LCByKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IEkodCwgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZDogciB9LCBLZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBjaGVja291dENhcmRFbGVtZW50czpcIiwgZSwgSlNPTi5zdHJpbmdpZnkoZSkpLCBlO1xuICB9XG59LCBGciA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiByIH0sIGJyKSwgV2UgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZDogciB9LCBLZSksIFFlID0gMWUzLCB4ciA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnNvbGUubG9nKHIpO1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogdCxcbiAgICBkZWJ1ZzogITAsXG4gICAgdGltZW91dDogUWUsXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pLnByb21pc2U7XG4gIHJldHVybiAoYXdhaXQgSShuLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgS3QpKS5zdGF0dXM7XG59O1xuZnVuY3Rpb24gRHIodCkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke3R9YCk7XG59XG5jb25zdCBwZSA9ICh0KSA9PiBhc3luYyAocikgPT4ge1xuICB2YXIgZSwgbjtcbiAgdHJ5IHtcbiAgICAobiA9IChlID0gci5mb3JtQ2FsbGJhY2tzLmdldCkub25DaGVja291dFN0YXJ0ZWQpID09IG51bGwgfHwgbi5jYWxsKGUpO1xuICAgIGNvbnN0IGkgPSBhd2FpdCB0KHIpO1xuICAgIGlmIChpLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGkucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICBlbHNlIGlmIChpLm1vZGUgPT09IFwiY2hlY2tvdXRcIilcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dFN1Y2Nlc3MoXG4gICAgICAgIGkucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgaS5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgaS5yZXN1bHQuY3VzdG9tZXJfaWRcbiAgICAgICk7XG4gICAgZWxzZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtpfWApO1xuICB9IGNhdGNoIChpKSB7XG4gICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoVShpKSk7XG4gIH1cbn0sIFhlID0gKHQpID0+IGFzeW5jIChyKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHQocik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IGVycl9fOiBuIH0gPSBBKFwiaW5pdC1lcnJvci1jYXRjaGVyXCIpO1xuICAgIHJldHVybiBuKGUpLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBVKGUpIH07XG4gIH1cbn0sIEEgPSAodCkgPT4ge1xuICBjb25zdCByID0gKC4uLm4pID0+IHtcbiAgICB3aW5kb3cuY29uc29sZS5sb2coYCR7WS5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke1kuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5uKTtcbiAgfSwgZSA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUuZXJyb3IoYCR7WS5yZWQuYm9sZChcIm9qcy9cIil9JHtZLmJvbGQuZ3JheShgJHt0fWApfVx0YCwgLi4ubik7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nOiByLFxuICAgIGVycjogZSxcbiAgICBsb2dfXzogcixcbiAgICBlcnJfXzogZVxuICB9O1xufSwgeyBsb2dfXzogZ28sIGVycl9fOiBOciB9ID0gQShcImNvbW1vblwiKSwgaGUgPSAodCkgPT4ge1xuICBpZiAodC5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke3QucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIHsgcGF5bWVudF9tZXRob2RfaWQ6IHQucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59LCBldCA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSB0LmZpbmQoKG4pID0+IHIuc2FmZVBhcnNlKG4pLnN1Y2Nlc3MpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgTnIoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpcIiwgdCksIG5ldyBFcnJvcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsXCIpO1xuICByZXR1cm4gci5wYXJzZShlKTtcbn0sIHsgbG9nX186IFVyLCBlcnJfXzogdHQgfSA9IEEoXCJjb21tb24tY2NcIiksIG1lID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9ICQuc2FmZVBhcnNlKHQpO1xuICBpZiAoIWUuc3VjY2Vzcykge1xuICAgIGNvbnN0IG4gPSBlLmVycm9yLmZvcm1hdCgpLCBpID0gWnQobik7XG4gICAgZm9yIChjb25zdCBbcywgYV0gb2YgT2JqZWN0LmVudHJpZXMoaSkpXG4gICAgICByKHMsIGEsIHMpO1xuICAgIHRocm93IHR0KFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaSksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBlLmRhdGE7XG59LCAkciA9ICh0LCByKSA9PiB7XG4gIGZvciAoY29uc3QgZSBvZiB0KVxuICAgIGlmIChlLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgZS5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBpID0gVmUuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIWkuc3VjY2VzcylcbiAgICAgICAgICB0dChgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHMgPSBpLmRhdGE7XG4gICAgICAgICAgcihzLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBVcihgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoZS5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgRWUgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIiwgeyBsb2dfXzogdiwgZXJyX186IFZyIH0gPSBBKFwic3RyaXBlLWxpbmtcIiksIHFyID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHpyID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIEhyID0gWGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIGNvbnN0IGUgPSB0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICB2KFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5cIik7XG4gICAgY29uc3QgbiA9IGV0KHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcXIpO1xuICAgIHYoXCJTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBxKGkpLCBhID0gcy5tb2RlID09PSBcInNldHVwXCI7XG4gICAgdihcIkNyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLlwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgR2UoaSwgcy50b2tlbiwgYSwgdm9pZCAwKSwgeyBlbGVtZW50czogbCwgc3RyaXBlOiB1IH0gPSBhd2FpdCBYdChuLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgY3VycmVuY3k6IGMuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIHYoXCJDcmVhdGluZyBleHByZXNzIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IGYgPSBsLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pLCBoID0gKCkgPT4ge1xuICAgICAgZi5tb3VudChgIyR7RWV9YCk7XG4gICAgfSwgeSA9ICgpID0+IHtcbiAgICAgIGYudW5tb3VudCgpO1xuICAgIH07XG4gICAgcmV0dXJuIGUgIT0gbnVsbCAmJiBlLmRvTm90TW91bnRPbkluaXQgPyB2KFwiTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKVwiKSA6ICh2KFwiTW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uLi4uXCIpLCBoKCkpLCBmLm9uKFwiY2xpY2tcIiwgYXN5bmMgKGQpID0+IHtcbiAgICAgIGlmICh2KFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIiksIGUgIT0gbnVsbCAmJiBlLm92ZXJyaWRlTGlua1N1Ym1pdCAmJiAhYXdhaXQgZS5vdmVycmlkZUxpbmtTdWJtaXQoKSkge1xuICAgICAgICB2KFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkLnJlc29sdmUoKTtcbiAgICB9KSwgZi5vbihcImNvbmZpcm1cIiwgYXN5bmMgKGQpID0+IHtcbiAgICAgIHYoXCJTdHJpcGUgTGluayB3aW5kb3cgY29uZmlybWVkXCIsIGQpO1xuICAgICAgY29uc3QgcCA9IGF3YWl0IHUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzOiBsLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IGQuYmlsbGluZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBwLmVycm9yID8gKFZyKFwiZXJyb3JcIiwgcC5lcnJvciksIHIuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihwLmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpKSA6ICh2KFwicGF5bWVudE1ldGhvZFwiLCBwLnBheW1lbnRNZXRob2QpLCB4LnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBkZSh0LmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IHAucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiAhMCB9XG4gICAgICB9KSk7XG4gICAgfSksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b246IGgsXG4gICAgICAgIGRpc21vdW50QnV0dG9uOiB5LFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgS3IoRWUpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgWXIgPSBwZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBpXG4gIH0pID0+IHtcbiAgICB2KFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIHYoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IGEgPSBCcihlLCBpLnN0cmlwZVBNKSwgYyA9IG1lKGEsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB2KFwiU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBScihzLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogaS5zdHJpcGVQTS5pZFxuICAgIH0pO1xuICAgIHYoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbCk7XG4gICAgY29uc3QgZiA9IHpyLnBhcnNlKGwucmVxdWlyZWRfdXNlcl9hY3Rpb25zKVswXS5vdXJfZXhpc3RpbmdfcG1faWQsIGggPSBhd2FpdCBxKHMpO1xuICAgIGlmIChoLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgdihcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgZmUocywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGgudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBmXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBoZSh5KSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2KFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCB5ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGgudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiByLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBjW20uRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogY1ttLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogY1ttLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogY1ttLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogaC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogaC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFdlKHMsIHkpIH07XG4gICAgfVxuICB9XG4pLCBCciA9ICh0LCByKSA9PiB7XG4gIHZhciBhLCBjLCBsLCB1LCBmO1xuICBjb25zdCBlID0geyAuLi50IH0sIFtuLCAuLi5pXSA9ICgoYyA9IChhID0gci5iaWxsaW5nX2RldGFpbHMubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogYy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgcyA9IGkuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICByZXR1cm4gZVttLkZJUlNUX05BTUVdID0gZVttLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJfT1BfVU5LTk9XTlwiLCBlW20uTEFTVF9OQU1FXSA9IGVbbS5MQVNUX05BTUVdIHx8IHMgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW20uRU1BSUxdID0gZVttLkVNQUlMXSB8fCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAoKGwgPSByLmxpbmspID09IG51bGwgPyB2b2lkIDAgOiBsLmVtYWlsKSB8fCByLmJpbGxpbmdfZGV0YWlscy5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbbS5aSVBfQ09ERV0gPSBlW20uWklQX0NPREVdIHx8ICgodSA9IHIuYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiB1LnBvc3RhbF9jb2RlKSB8fCBcIjAwMDAwXCIsIGVbbS5DT1VOVFJZXSA9IGVbbS5DT1VOVFJZXSB8fCAoKGYgPSByLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogZi5jb3VudHJ5KSB8fCBcIlVTXCIsIHYoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgZSksIGU7XG59LCBLciA9ICh0KSA9PiBuZXcgUHJvbWlzZSgocikgPT4ge1xuICBjb25zdCBlID0gKCkgPT4ge1xuICAgIGNvbnN0IG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtcbiAgICBuID8gcihuKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZShlKTtcbiAgfTtcbiAgZSgpO1xufSksIEpyID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZXttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIiwgWnIgPSAodCkgPT4ge1xuICBjb25zdCByID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICByLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke0pyfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3R9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIG4gPSBlLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICBuLmFwcGVuZENoaWxkKHIuY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgaSA9IG4ucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIHMgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSksIHsgaG9zdDogZSwgaWZyYW1lOiBpLCBjYW5jZWxCdXR0b246IHMgfTtcbn07XG5mdW5jdGlvbiBHcih0LCByLCBlKSB7XG4gIGNvbnN0IG4gPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHMgPSBhd2FpdCB4cih0LCBlKTtcbiAgICAgIHMgJiYgKGNsZWFySW50ZXJ2YWwoaSksIHIocykpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgbigpO1xuICBjb25zdCBpID0gc2V0SW50ZXJ2YWwobiwgUWUpO1xuICByZXR1cm4gaTtcbn1cbmZ1bmN0aW9uIFdyKHtcbiAgZWxlbWVudHM6IHQsXG4gIHBvbGxpbmdJbnRlcnZhbDogcixcbiAgcmVzb2x2ZTogZVxufSkge1xuICBjb25zdCBuID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwociksIHQuaG9zdC5yZW1vdmUoKSwgZShHLkNBTkNFTExFRCk7XG4gIH07XG4gIHJldHVybiB0LmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbiksICgpID0+IHtcbiAgICB0LmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiBRcih7XG4gIHVybDogdCxcbiAgYmFzZVVybDogclxufSkge1xuICBjb25zdCBlID0gWnIodCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobikgPT4ge1xuICAgIGNvbnN0IGkgPSAoYykgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGUuaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIG4oYyksIGEgPT0gbnVsbCB8fCBhKCk7XG4gICAgfSwgcyA9IEdyKGUuaWZyYW1lLCBpLCBuZXcgVVJMKHIpLm9yaWdpbiksIGEgPSBXcih7XG4gICAgICBlbGVtZW50czogZSxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogcyxcbiAgICAgIHJlc29sdmU6IG5cbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCB7IGxvZ19fOiBiLCBlcnJfXzogU2UgfSA9IEEoXCJjb21tb24tY2NcIiksIHsgbG9nX186IENlIH0gPSBBKFwic3RyaXBlLWNjXCIpLCBYciA9IHBlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBmO1xuICAgIGIoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogciB9KTtcbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgcShzKTtcbiAgICBiKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke2EubW9kZX1dYCk7XG4gICAgY29uc3QgYyA9IG1lKGUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBiKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBMcihpLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZFxuICAgIH0pO1xuICAgICRyKGwsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCB1ID0ge1xuICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogY1xuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBiKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke2EudG9rZW59XWApO1xuICAgICAgICBjb25zdCBoID0gYXdhaXQgRnIocywgdSk7XG4gICAgICAgIHJldHVybiBiKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7aC5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGIoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCBoID0gYXdhaXQgd2UocywgdSk7XG4gICAgICAgIHJldHVybiBiKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBoIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgaWYgKGggaW5zdGFuY2VvZiBaZSAmJiBoLm9yaWdpbmFsRXJyb3JNZXNzYWdlID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgICAgIGIoXCLilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93XCIpLCBiKFwiZXJyb3IucmVzcG9uc2UuaGVhZGVyc1wiLCBoLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBjb25zdCB5ID0gKChmID0gaC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogZltcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pID09PSBcInRydWVcIiwgZCA9IGF3YWl0IFRyKHMsIHUpO1xuICAgICAgICBpZiAoYihg4pScIG9wLXNob3VsZC11c2UtbmV3LWZsb3c6ICR7eX1gKSwgYihcIuKUnCBQYXltZW50IGZsb3cgcmVzdWx0OlwiLCBkKSwgeSA/IGF3YWl0IHJuKGQsIHQuYmFzZVVybCkgOiBhd2FpdCBubihkKSwgYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICBiKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke2QuY2NfcG1faWR9XWApO1xuICAgICAgICAgIGNvbnN0IHAgPSBhd2FpdCBmZShzLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IGEudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogZC5jY19wbV9pZFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGIoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgcCk7XG4gICAgICAgICAgY29uc3QgXyA9IGhlKHApO1xuICAgICAgICAgIHJldHVybiBiKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Xy5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IF8gfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke3kgPyBcIm5ld1wiIDogXCJsZWdhY3lcIn1dYCk7XG4gICAgICAgICAgY29uc3QgcCA9IGF3YWl0IHdlKHMsIHtcbiAgICAgICAgICAgIC4uLnUsXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogZC5jY19wbV9pZCxcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6ICF5XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGIoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IHAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgU2UoXCLilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVcIiksIFNlKGgpLCBoO1xuICAgIH1cbiAgfVxuKSwgZW4gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIEd0LnBhcnNlKHIpO1xufSwgdG4gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIEp0LnBhcnNlKHIpO1xufSwgcm4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gdG4odCk7XG4gIGIoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtlLnJlZGlyZWN0X3VybH1dYCk7XG4gIGNvbnN0IG4gPSBhd2FpdCBRcih7IHVybDogZS5yZWRpcmVjdF91cmwsIGJhc2VVcmw6IHIgfSk7XG4gIGlmIChiKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtufV1gKSwgbiA9PT0gRy5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuID09PSBHLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG59LCBubiA9IGFzeW5jICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBlbih0KTtcbiAgQ2UoYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7ci5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCksIGF3YWl0IG9yKHIpLCBDZShcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn0sIHsgbG9nX186IEMsIGVycl9fOiBvbiB9ID0gQShcInN0cmlwZS1wclwiKSwgc24gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIGFuID0gWGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQgfSkgPT4ge1xuICAgIEMoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCByID0gZXQodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBzbik7XG4gICAgQyhcIkluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBlID0gdC5hbnlDZGVDb25uZWN0aW9uLCBuID0gYXdhaXQgcShlKSwgaSA9IG4ubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIEMoXCJHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRcIik7XG4gICAgY29uc3QgcyA9IGF3YWl0IEdlKGUsIG4udG9rZW4sIGksIHZvaWQgMCksIGEgPSBhd2FpdCBlcihcbiAgICAgIHIubWV0YWRhdGEuc3RyaXBlX3BrLFxuICAgICAgcy5hbW91bnRBdG9tLFxuICAgICAgcy5jdXJyZW5jeSxcbiAgICAgIGlcbiAgICApO1xuICAgIEMoXCJDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50XCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBhLmNhbk1ha2VQYXltZW50KCk7XG4gICAgcmV0dXJuIGMgPT09IG51bGwgPyAob24oXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiB9KSA6IChDKFwiU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50XCIsIGMpLCB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBwcjogYSxcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogYy5hcHBsZVBheSxcbiAgICAgICAgZ29vZ2xlUGF5OiBjLmdvb2dsZVBheVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4pLCBjbiA9IHBlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGksXG4gICAgaW5pdFJlc3VsdDogc1xuICB9KSA9PiB7XG4gICAgaWYgKEMoXCJSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpLCBpLnByb3ZpZGVyICE9PSByLnByb3ZpZGVyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHtpLnByb3ZpZGVyfSwgZ290ICR7ci5wcm92aWRlcn1gKTtcbiAgICBjb25zdCBhID0gdC5hbnlDZGVDb25uZWN0aW9uLCBjID0gcy5wcjtcbiAgICBpZiAoaSAhPSBudWxsICYmIGkub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3QgcCA9IGkub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIEMoXCJPdmVycmlkaW5nIFBSIGFtb3VudCB3aXRoXCIsIHApLCBsbihjLCBwLmFtb3VudCwgcC5wZW5kaW5nKTtcbiAgICB9XG4gICAgQyhcIlNob3dpbmcgUFIgZGlhbG9nLi4uXCIpLCBjLnNob3coKTtcbiAgICBjb25zdCBsID0gYXdhaXQgcnIoYyk7XG4gICAgQyhcIlN0cmlwZSBQTSBhZGRlZCBldmVudDpcIiwgbCksIEMoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHUgPSB1bihlLCBsKSwgZiA9IG1lKHUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBDKFwiUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgY29uc3QgaCA9IGF3YWl0IGpyKGEsIHtcbiAgICAgIGZpZWxkczogZixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogclxuICAgIH0pLCB5ID0gZG4oaCk7XG4gICAgQyhcIkNvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5cIiksIGF3YWl0IG5yKHksIGwpO1xuICAgIGNvbnN0IGQgPSBhd2FpdCBxKGEpO1xuICAgIGlmIChkLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgQyhcIkNvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IHAgPSBhd2FpdCBmZShhLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZC50b2tlblxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogaGUocCkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgQyhcIlBlcmZvcm1pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBwID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiByLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBmW20uRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogZlttLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogZlttLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogZlttLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogZC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogZC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFdlKGEsIHApIH07XG4gICAgfVxuICB9XG4pLCB1biA9ICh0LCByKSA9PiB7XG4gIHZhciBhLCBjLCBsLCB1O1xuICBjb25zdCBlID0geyAuLi50IH0sIFtuLCAuLi5pXSA9ICgoYyA9IChhID0gci5wYXllck5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBhLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIHMgPSBpLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcmV0dXJuIGVbbS5GSVJTVF9OQU1FXSA9IGVbbS5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiX09QX1VOS05PV05cIiwgZVttLkxBU1RfTkFNRV0gPSBlW20uTEFTVF9OQU1FXSB8fCBzIHx8IFwiX09QX1VOS05PV05cIiwgZVttLkVNQUlMXSA9IGVbbS5FTUFJTF0gfHwgci5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVttLlpJUF9DT0RFXSA9IGVbbS5aSVBfQ09ERV0gfHwgKChsID0gci5zaGlwcGluZ0FkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiBsLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgZVttLkNPVU5UUlldID0gZVttLkNPVU5UUlldIHx8ICgodSA9IHIuc2hpcHBpbmdBZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogdS5jb3VudHJ5KSB8fCBcIlVTXCIsIEMoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgZSksIGU7XG59LCBsbiA9ICh0LCByLCBlKSA9PiB7XG4gIHQudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiByLmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogZVxuICAgIH0sXG4gICAgY3VycmVuY3k6IHIuY3VycmVuY3lcbiAgfSk7XG59LCBkbiA9ICh0KSA9PiB7XG4gIGlmICh0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3QucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gIHJldHVybiBXdC5wYXJzZSh0LnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG59LCBydCA9ICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IG4gPSB0LmZpbHRlcigoaSkgPT4gaS5wcm92aWRlciA9PT0gcik7XG4gIGlmIChuLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIHQpLCBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHtyfScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgaWYgKG4ubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgdCksIG5ldyBFcnJvcihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHtyfScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgcmV0dXJuIG5bMF07XG59LCB4ID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IFhyXG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IGFuLFxuICAgIHJ1bjogY25cbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IEhyLFxuICAgIHJ1bjogWXJcbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG52YXIgY2UgPSBmdW5jdGlvbih0LCByKSB7XG4gIHJldHVybiBjZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBlLl9fcHJvdG9fXyA9IG47XG4gIH0gfHwgZnVuY3Rpb24oZSwgbikge1xuICAgIGZvciAodmFyIGkgaW4gbikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sIGkpICYmIChlW2ldID0gbltpXSk7XG4gIH0sIGNlKHQsIHIpO1xufTtcbmZ1bmN0aW9uIE0odCwgcikge1xuICBpZiAodHlwZW9mIHIgIT0gXCJmdW5jdGlvblwiICYmIHIgIT09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcocikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBjZSh0LCByKTtcbiAgZnVuY3Rpb24gZSgpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgfVxuICB0LnByb3RvdHlwZSA9IHIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKHIpIDogKGUucHJvdG90eXBlID0gci5wcm90b3R5cGUsIG5ldyBlKCkpO1xufVxuZnVuY3Rpb24gZm4odCwgciwgZSwgbikge1xuICBmdW5jdGlvbiBpKHMpIHtcbiAgICByZXR1cm4gcyBpbnN0YW5jZW9mIGUgPyBzIDogbmV3IGUoZnVuY3Rpb24oYSkge1xuICAgICAgYShzKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3IChlIHx8IChlID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHMsIGEpIHtcbiAgICBmdW5jdGlvbiBjKGYpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi5uZXh0KGYpKTtcbiAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgYShoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbChmKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4udGhyb3coZikpO1xuICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICBhKGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1KGYpIHtcbiAgICAgIGYuZG9uZSA/IHMoZi52YWx1ZSkgOiBpKGYudmFsdWUpLnRoZW4oYywgbCk7XG4gICAgfVxuICAgIHUoKG4gPSBuLmFwcGx5KHQsIFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBudCh0LCByKSB7XG4gIHZhciBlID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHNbMF0gJiAxKSB0aHJvdyBzWzFdO1xuICAgIHJldHVybiBzWzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBuLCBpLCBzLCBhID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gYS5uZXh0ID0gYygwKSwgYS50aHJvdyA9IGMoMSksIGEucmV0dXJuID0gYygyKSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKGFbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgYTtcbiAgZnVuY3Rpb24gYyh1KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGYpIHtcbiAgICAgIHJldHVybiBsKFt1LCBmXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBsKHUpIHtcbiAgICBpZiAobikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IGEgJiYgKGEgPSAwLCB1WzBdICYmIChlID0gMCkpLCBlOyApIHRyeSB7XG4gICAgICBpZiAobiA9IDEsIGkgJiYgKHMgPSB1WzBdICYgMiA/IGkucmV0dXJuIDogdVswXSA/IGkudGhyb3cgfHwgKChzID0gaS5yZXR1cm4pICYmIHMuY2FsbChpKSwgMCkgOiBpLm5leHQpICYmICEocyA9IHMuY2FsbChpLCB1WzFdKSkuZG9uZSkgcmV0dXJuIHM7XG4gICAgICBzd2l0Y2ggKGkgPSAwLCBzICYmICh1ID0gW3VbMF0gJiAyLCBzLnZhbHVlXSksIHVbMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcyA9IHU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gZS5sYWJlbCsrLCB7IHZhbHVlOiB1WzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgZS5sYWJlbCsrLCBpID0gdVsxXSwgdSA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHUgPSBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChzID0gZS50cnlzLCAhKHMgPSBzLmxlbmd0aCA+IDAgJiYgc1tzLmxlbmd0aCAtIDFdKSAmJiAodVswXSA9PT0gNiB8fCB1WzBdID09PSAyKSkge1xuICAgICAgICAgICAgZSA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDMgJiYgKCFzIHx8IHVbMV0gPiBzWzBdICYmIHVbMV0gPCBzWzNdKSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHVbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDYgJiYgZS5sYWJlbCA8IHNbMV0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBzWzFdLCBzID0gdTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocyAmJiBlLmxhYmVsIDwgc1syXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHNbMl0sIGUub3BzLnB1c2godSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgc1syXSAmJiBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdSA9IHIuY2FsbCh0LCBlKTtcbiAgICB9IGNhdGNoIChmKSB7XG4gICAgICB1ID0gWzYsIGZdLCBpID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbiA9IHMgPSAwO1xuICAgIH1cbiAgICBpZiAodVswXSAmIDUpIHRocm93IHVbMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVbMF0gPyB1WzFdIDogdm9pZCAwLCBkb25lOiAhMCB9O1xuICB9XG59XG5mdW5jdGlvbiBEKHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIGUgPSByICYmIHRbcl0sIG4gPSAwO1xuICBpZiAoZSkgcmV0dXJuIGUuY2FsbCh0KTtcbiAgaWYgKHQgJiYgdHlwZW9mIHQubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdCAmJiBuID49IHQubGVuZ3RoICYmICh0ID0gdm9pZCAwKSwgeyB2YWx1ZTogdCAmJiB0W24rK10sIGRvbmU6ICF0IH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHIgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5mdW5jdGlvbiBXKHQsIHIpIHtcbiAgdmFyIGUgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiB0W1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghZSkgcmV0dXJuIHQ7XG4gIHZhciBuID0gZS5jYWxsKHQpLCBpLCBzID0gW10sIGE7XG4gIHRyeSB7XG4gICAgZm9yICg7IChyID09PSB2b2lkIDAgfHwgci0tID4gMCkgJiYgIShpID0gbi5uZXh0KCkpLmRvbmU7ICkgcy5wdXNoKGkudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgYSA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaSAmJiAhaS5kb25lICYmIChlID0gbi5yZXR1cm4pICYmIGUuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBzO1xufVxuZnVuY3Rpb24gUSh0LCByLCBlKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgaSA9IHIubGVuZ3RoLCBzOyBuIDwgaTsgbisrKVxuICAgIChzIHx8ICEobiBpbiByKSkgJiYgKHMgfHwgKHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyLCAwLCBuKSksIHNbbl0gPSByW25dKTtcbiAgcmV0dXJuIHQuY29uY2F0KHMgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocikpO1xufVxuZnVuY3Rpb24gRih0KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgRiA/ICh0aGlzLnYgPSB0LCB0aGlzKSA6IG5ldyBGKHQpO1xufVxuZnVuY3Rpb24gcG4odCwgciwgZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbiA9IGUuYXBwbHkodCwgciB8fCBbXSksIGksIHMgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCBjKFwibmV4dFwiKSwgYyhcInRocm93XCIpLCBjKFwicmV0dXJuXCIsIGEpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBpO1xuICBmdW5jdGlvbiBhKGQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwKS50aGVuKGQsIGgpO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYyhkLCBwKSB7XG4gICAgbltkXSAmJiAoaVtkXSA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihOLCBIKSB7XG4gICAgICAgIHMucHVzaChbZCwgXywgTiwgSF0pID4gMSB8fCBsKGQsIF8pO1xuICAgICAgfSk7XG4gICAgfSwgcCAmJiAoaVtkXSA9IHAoaVtkXSkpKTtcbiAgfVxuICBmdW5jdGlvbiBsKGQsIHApIHtcbiAgICB0cnkge1xuICAgICAgdShuW2RdKHApKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICB5KHNbMF1bM10sIF8pO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB1KGQpIHtcbiAgICBkLnZhbHVlIGluc3RhbmNlb2YgRiA/IFByb21pc2UucmVzb2x2ZShkLnZhbHVlLnYpLnRoZW4oZiwgaCkgOiB5KHNbMF1bMl0sIGQpO1xuICB9XG4gIGZ1bmN0aW9uIGYoZCkge1xuICAgIGwoXCJuZXh0XCIsIGQpO1xuICB9XG4gIGZ1bmN0aW9uIGgoZCkge1xuICAgIGwoXCJ0aHJvd1wiLCBkKTtcbiAgfVxuICBmdW5jdGlvbiB5KGQsIHApIHtcbiAgICBkKHApLCBzLnNoaWZ0KCksIHMubGVuZ3RoICYmIGwoc1swXVswXSwgc1swXVsxXSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGhuKHQpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIHIgPSB0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgZTtcbiAgcmV0dXJuIHIgPyByLmNhbGwodCkgOiAodCA9IHR5cGVvZiBEID09IFwiZnVuY3Rpb25cIiA/IEQodCkgOiB0W1N5bWJvbC5pdGVyYXRvcl0oKSwgZSA9IHt9LCBuKFwibmV4dFwiKSwgbihcInRocm93XCIpLCBuKFwicmV0dXJuXCIpLCBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBlKTtcbiAgZnVuY3Rpb24gbihzKSB7XG4gICAgZVtzXSA9IHRbc10gJiYgZnVuY3Rpb24oYSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsIGwpIHtcbiAgICAgICAgYSA9IHRbc10oYSksIGkoYywgbCwgYS5kb25lLCBhLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gaShzLCBhLCBjLCBsKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4oZnVuY3Rpb24odSkge1xuICAgICAgcyh7IHZhbHVlOiB1LCBkb25lOiBjIH0pO1xuICAgIH0sIGEpO1xuICB9XG59XG5mdW5jdGlvbiB3KHQpIHtcbiAgcmV0dXJuIHR5cGVvZiB0ID09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIHJlKHQpIHtcbiAgdmFyIHIgPSBmdW5jdGlvbihuKSB7XG4gICAgRXJyb3IuY2FsbChuKSwgbi5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICB9LCBlID0gdChyKTtcbiAgcmV0dXJuIGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLCBlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGUsIGU7XG59XG52YXIgb2UgPSByZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5tZXNzYWdlID0gZSA/IGUubGVuZ3RoICsgYCBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuYCArIGUubWFwKGZ1bmN0aW9uKG4sIGkpIHtcbiAgICAgIHJldHVybiBpICsgMSArIFwiKSBcIiArIG4udG9TdHJpbmcoKTtcbiAgICB9KS5qb2luKGBcbiAgYCkgOiBcIlwiLCB0aGlzLm5hbWUgPSBcIlVuc3Vic2NyaXB0aW9uRXJyb3JcIiwgdGhpcy5lcnJvcnMgPSBlO1xuICB9O1xufSk7XG5mdW5jdGlvbiBYKHQsIHIpIHtcbiAgaWYgKHQpIHtcbiAgICB2YXIgZSA9IHQuaW5kZXhPZihyKTtcbiAgICAwIDw9IGUgJiYgdC5zcGxpY2UoZSwgMSk7XG4gIH1cbn1cbnZhciB6ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gciwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIsIGUsIG4sIGksIHM7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBhID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKGEpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KGEpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gRChhKSwgbCA9IGMubmV4dCgpOyAhbC5kb25lOyBsID0gYy5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgdmFyIHUgPSBsLnZhbHVlO1xuICAgICAgICAgICAgICB1LnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICByID0geyBlcnJvcjogXyB9O1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBsICYmICFsLmRvbmUgJiYgKGUgPSBjLnJldHVybikgJiYgZS5jYWxsKGMpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgaWYgKHIpIHRocm93IHIuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYS5yZW1vdmUodGhpcyk7XG4gICAgICB2YXIgZiA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgaWYgKHcoZikpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZigpO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcyA9IF8gaW5zdGFuY2VvZiBvZSA/IF8uZXJyb3JzIDogW19dO1xuICAgICAgICB9XG4gICAgICB2YXIgaCA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICBpZiAoaCkge1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciB5ID0gRChoKSwgZCA9IHkubmV4dCgpOyAhZC5kb25lOyBkID0geS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBwID0gZC52YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGtlKHApO1xuICAgICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgICAgICBzID0gcyA/PyBbXSwgXyBpbnN0YW5jZW9mIG9lID8gcyA9IFEoUShbXSwgVyhzKSksIFcoXy5lcnJvcnMpKSA6IHMucHVzaChfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICBuID0geyBlcnJvcjogXyB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkICYmICFkLmRvbmUgJiYgKGkgPSB5LnJldHVybikgJiYgaS5jYWxsKHkpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobikgdGhyb3cgbi5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzKVxuICAgICAgICB0aHJvdyBuZXcgb2Uocyk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGU7XG4gICAgaWYgKHIgJiYgciAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAga2Uocik7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiB0KSB7XG4gICAgICAgICAgaWYgKHIuY2xvc2VkIHx8IHIuX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICByLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoZSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIGUgIT09IHZvaWQgMCA/IGUgOiBbXSkucHVzaChyKTtcbiAgICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gZSA9PT0gciB8fCBBcnJheS5pc0FycmF5KGUpICYmIGUuaW5jbHVkZXMocik7XG4gIH0sIHQucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShlKSA/IChlLnB1c2gociksIGUpIDogZSA/IFtlLCByXSA6IHI7XG4gIH0sIHQucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgZSA9PT0gciA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KGUpICYmIFgoZSwgcik7XG4gIH0sIHQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgZSAmJiBYKGUsIHIpLCByIGluc3RhbmNlb2YgdCAmJiByLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gIH0sIHQuRU1QVFkgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IG5ldyB0KCk7XG4gICAgcmV0dXJuIHIuY2xvc2VkID0gITAsIHI7XG4gIH0oKSwgdDtcbn0oKSwgb3QgPSB6LkVNUFRZO1xuZnVuY3Rpb24gaXQodCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIHogfHwgdCAmJiBcImNsb3NlZFwiIGluIHQgJiYgdyh0LnJlbW92ZSkgJiYgdyh0LmFkZCkgJiYgdyh0LnVuc3Vic2NyaWJlKTtcbn1cbmZ1bmN0aW9uIGtlKHQpIHtcbiAgdyh0KSA/IHQoKSA6IHQudW5zdWJzY3JpYmUoKTtcbn1cbnZhciBzdCA9IHtcbiAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICBQcm9taXNlOiB2b2lkIDAsXG4gIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ICExLFxuICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ICExXG59LCBhdCA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24odCwgcikge1xuICAgIGZvciAodmFyIGUgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICBlW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIFEoW3QsIHJdLCBXKGUpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24odCkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KSh0KTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIGN0KHQpIHtcbiAgYXQuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyB0O1xuICB9KTtcbn1cbmZ1bmN0aW9uIFBlKCkge1xufVxuZnVuY3Rpb24gSyh0KSB7XG4gIHQoKTtcbn1cbnZhciB5ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgTShyLCB0KTtcbiAgZnVuY3Rpb24gcihlKSB7XG4gICAgdmFyIG4gPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gbi5pc1N0b3BwZWQgPSAhMSwgZSA/IChuLmRlc3RpbmF0aW9uID0gZSwgaXQoZSkgJiYgZS5hZGQobikpIDogbi5kZXN0aW5hdGlvbiA9IGduLCBuO1xuICB9XG4gIHJldHVybiByLmNyZWF0ZSA9IGZ1bmN0aW9uKGUsIG4sIGkpIHtcbiAgICByZXR1cm4gbmV3IHVlKGUsIG4sIGkpO1xuICB9LCByLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8IHRoaXMuX25leHQoZSk7XG4gIH0sIHIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9lcnJvcihlKSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2NvbXBsZXRlKCkpO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2xvc2VkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbCk7XG4gIH0sIHIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChlKTtcbiAgfSwgci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCByLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCByO1xufSh6KSwgbW4gPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIGllKHQsIHIpIHtcbiAgcmV0dXJuIG1uLmNhbGwodCwgcik7XG59XG52YXIgeW4gPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSByO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKGUubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIGUubmV4dChyKTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgQihuKTtcbiAgICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoZS5lcnJvcilcbiAgICAgIHRyeSB7XG4gICAgICAgIGUuZXJyb3Iocik7XG4gICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgIEIobik7XG4gICAgICB9XG4gICAgZWxzZVxuICAgICAgQihyKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChyLmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgci5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBCKGUpO1xuICAgICAgfVxuICB9LCB0O1xufSgpLCB1ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgTShyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuLCBpKSB7XG4gICAgdmFyIHMgPSB0LmNhbGwodGhpcykgfHwgdGhpcywgYTtcbiAgICBpZiAodyhlKSB8fCAhZSlcbiAgICAgIGEgPSB7XG4gICAgICAgIG5leHQ6IGUgPz8gdm9pZCAwLFxuICAgICAgICBlcnJvcjogbiA/PyB2b2lkIDAsXG4gICAgICAgIGNvbXBsZXRlOiBpID8/IHZvaWQgMFxuICAgICAgfTtcbiAgICBlbHNlIHtcbiAgICAgIHZhciBjO1xuICAgICAgcyAmJiBzdC51c2VEZXByZWNhdGVkTmV4dENvbnRleHQgPyAoYyA9IE9iamVjdC5jcmVhdGUoZSksIGMudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0sIGEgPSB7XG4gICAgICAgIG5leHQ6IGUubmV4dCAmJiBpZShlLm5leHQsIGMpLFxuICAgICAgICBlcnJvcjogZS5lcnJvciAmJiBpZShlLmVycm9yLCBjKSxcbiAgICAgICAgY29tcGxldGU6IGUuY29tcGxldGUgJiYgaWUoZS5jb21wbGV0ZSwgYylcbiAgICAgIH0pIDogYSA9IGU7XG4gICAgfVxuICAgIHJldHVybiBzLmRlc3RpbmF0aW9uID0gbmV3IHluKGEpLCBzO1xuICB9XG4gIHJldHVybiByO1xufSh5ZSk7XG5mdW5jdGlvbiBCKHQpIHtcbiAgY3QodCk7XG59XG5mdW5jdGlvbiBfbih0KSB7XG4gIHRocm93IHQ7XG59XG52YXIgZ24gPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IFBlLFxuICBlcnJvcjogX24sXG4gIGNvbXBsZXRlOiBQZVxufSwgX2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiBibih0KSB7XG4gIHJldHVybiB0O1xufVxuZnVuY3Rpb24gdm4odCkge1xuICByZXR1cm4gdC5sZW5ndGggPT09IDAgPyBibiA6IHQubGVuZ3RoID09PSAxID8gdFswXSA6IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24obiwgaSkge1xuICAgICAgcmV0dXJuIGkobik7XG4gICAgfSwgZSk7XG4gIH07XG59XG52YXIgVCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICByICYmICh0aGlzLl9zdWJzY3JpYmUgPSByKTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IG5ldyB0KCk7XG4gICAgcmV0dXJuIGUuc291cmNlID0gdGhpcywgZS5vcGVyYXRvciA9IHIsIGU7XG4gIH0sIHQucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uKHIsIGUsIG4pIHtcbiAgICB2YXIgaSA9IHRoaXMsIHMgPSBFbihyKSA/IHIgOiBuZXcgdWUociwgZSwgbik7XG4gICAgcmV0dXJuIEsoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYSA9IGksIGMgPSBhLm9wZXJhdG9yLCBsID0gYS5zb3VyY2U7XG4gICAgICBzLmFkZChjID8gYy5jYWxsKHMsIGwpIDogbCA/IGkuX3N1YnNjcmliZShzKSA6IGkuX3RyeVN1YnNjcmliZShzKSk7XG4gICAgfSksIHM7XG4gIH0sIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUocik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgci5lcnJvcihlKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihyLCBlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIHJldHVybiBlID0gSWUoZSksIG5ldyBlKGZ1bmN0aW9uKGksIHMpIHtcbiAgICAgIHZhciBhID0gbmV3IHVlKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24oYykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByKGMpO1xuICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgIHMobCksIGEudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBzLFxuICAgICAgICBjb21wbGV0ZTogaVxuICAgICAgfSk7XG4gICAgICBuLnN1YnNjcmliZShhKTtcbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZTtcbiAgICByZXR1cm4gKGUgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5zdWJzY3JpYmUocik7XG4gIH0sIHQucHJvdG90eXBlW19lXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCB0LnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgciA9IFtdLCBlID0gMDsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKylcbiAgICAgIHJbZV0gPSBhcmd1bWVudHNbZV07XG4gICAgcmV0dXJuIHZuKHIpKHRoaXMpO1xuICB9LCB0LnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzO1xuICAgIHJldHVybiByID0gSWUociksIG5ldyByKGZ1bmN0aW9uKG4sIGkpIHtcbiAgICAgIHZhciBzO1xuICAgICAgZS5zdWJzY3JpYmUoZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gcyA9IGE7XG4gICAgICB9LCBmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBpKGEpO1xuICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuKHMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sIHQuY3JlYXRlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiBuZXcgdChyKTtcbiAgfSwgdDtcbn0oKTtcbmZ1bmN0aW9uIEllKHQpIHtcbiAgdmFyIHI7XG4gIHJldHVybiAociA9IHQgPz8gc3QuUHJvbWlzZSkgIT09IG51bGwgJiYgciAhPT0gdm9pZCAwID8gciA6IFByb21pc2U7XG59XG5mdW5jdGlvbiB3bih0KSB7XG4gIHJldHVybiB0ICYmIHcodC5uZXh0KSAmJiB3KHQuZXJyb3IpICYmIHcodC5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBFbih0KSB7XG4gIHJldHVybiB0ICYmIHQgaW5zdGFuY2VvZiB5ZSB8fCB3bih0KSAmJiBpdCh0KTtcbn1cbmZ1bmN0aW9uIFNuKHQpIHtcbiAgcmV0dXJuIHcodCA9PSBudWxsID8gdm9pZCAwIDogdC5saWZ0KTtcbn1cbmZ1bmN0aW9uIENuKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHIpIHtcbiAgICBpZiAoU24ocikpXG4gICAgICByZXR1cm4gci5saWZ0KGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdChlLCB0aGlzKTtcbiAgICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICAgIHRoaXMuZXJyb3Iobik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZVwiKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGtuKHQsIHIsIGUsIG4sIGkpIHtcbiAgcmV0dXJuIG5ldyBQbih0LCByLCBlLCBuLCBpKTtcbn1cbnZhciBQbiA9IGZ1bmN0aW9uKHQpIHtcbiAgTShyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuLCBpLCBzLCBhLCBjKSB7XG4gICAgdmFyIGwgPSB0LmNhbGwodGhpcywgZSkgfHwgdGhpcztcbiAgICByZXR1cm4gbC5vbkZpbmFsaXplID0gYSwgbC5zaG91bGRVbnN1YnNjcmliZSA9IGMsIGwuX25leHQgPSBuID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbih1KTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgZS5lcnJvcihmKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX25leHQsIGwuX2Vycm9yID0gcyA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHModSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIGUuZXJyb3IoZik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9lcnJvciwgbC5fY29tcGxldGUgPSBpID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpKCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIGUuZXJyb3IodSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9jb21wbGV0ZSwgbDtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZTtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgbiA9IHRoaXMuY2xvc2VkO1xuICAgICAgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIW4gJiYgKChlID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgfHwgZS5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIHI7XG59KHllKSwgSW4gPSByZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIHV0ID0gZnVuY3Rpb24odCkge1xuICBNKHIsIHQpO1xuICBmdW5jdGlvbiByKCkge1xuICAgIHZhciBlID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGUuY2xvc2VkID0gITEsIGUuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGUub2JzZXJ2ZXJzID0gW10sIGUuaXNTdG9wcGVkID0gITEsIGUuaGFzRXJyb3IgPSAhMSwgZS50aHJvd25FcnJvciA9IG51bGwsIGU7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSBuZXcgT2UodGhpcywgdGhpcyk7XG4gICAgcmV0dXJuIG4ub3BlcmF0b3IgPSBlLCBuO1xuICB9LCByLnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHRocm93IG5ldyBJbigpO1xuICB9LCByLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcztcbiAgICBLKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGksIHM7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzIHx8IChuLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKG4ub2JzZXJ2ZXJzKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgYSA9IEQobi5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IGEubmV4dCgpOyAhYy5kb25lOyBjID0gYS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBsID0gYy52YWx1ZTtcbiAgICAgICAgICAgIGwubmV4dChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICBpID0geyBlcnJvcjogdSB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKHMgPSBhLnJldHVybikgJiYgcy5jYWxsKGEpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoaSkgdGhyb3cgaS5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIEsoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5oYXNFcnJvciA9IG4uaXNTdG9wcGVkID0gITAsIG4udGhyb3duRXJyb3IgPSBlO1xuICAgICAgICBmb3IgKHZhciBpID0gbi5vYnNlcnZlcnM7IGkubGVuZ3RoOyApXG4gICAgICAgICAgaS5zaGlmdCgpLmVycm9yKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gdGhpcztcbiAgICBLKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKGUuX3Rocm93SWZDbG9zZWQoKSwgIWUuaXNTdG9wcGVkKSB7XG4gICAgICAgIGUuaXNTdG9wcGVkID0gITA7XG4gICAgICAgIGZvciAodmFyIG4gPSBlLm9ic2VydmVyczsgbi5sZW5ndGg7IClcbiAgICAgICAgICBuLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gITAsIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgfSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGU7XG4gICAgICByZXR1cm4gKChlID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUubGVuZ3RoKSA+IDA7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCByLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGUpLCB0aGlzLl9pbm5lclN1YnNjcmliZShlKTtcbiAgfSwgci5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcywgaSA9IHRoaXMsIHMgPSBpLmhhc0Vycm9yLCBhID0gaS5pc1N0b3BwZWQsIGMgPSBpLm9ic2VydmVycztcbiAgICByZXR1cm4gcyB8fCBhID8gb3QgOiAodGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgYy5wdXNoKGUpLCBuZXcgeihmdW5jdGlvbigpIHtcbiAgICAgIG4uY3VycmVudE9ic2VydmVycyA9IG51bGwsIFgoYywgZSk7XG4gICAgfSkpO1xuICB9LCByLnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXMsIGkgPSBuLmhhc0Vycm9yLCBzID0gbi50aHJvd25FcnJvciwgYSA9IG4uaXNTdG9wcGVkO1xuICAgIGkgPyBlLmVycm9yKHMpIDogYSAmJiBlLmNvbXBsZXRlKCk7XG4gIH0sIHIucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gbmV3IFQoKTtcbiAgICByZXR1cm4gZS5zb3VyY2UgPSB0aGlzLCBlO1xuICB9LCByLmNyZWF0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICByZXR1cm4gbmV3IE9lKGUsIG4pO1xuICB9LCByO1xufShUKSwgT2UgPSBmdW5jdGlvbih0KSB7XG4gIE0ociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuZGVzdGluYXRpb24gPSBlLCBpLnNvdXJjZSA9IG4sIGk7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgKGkgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4ubmV4dCkgPT09IG51bGwgfHwgaSA9PT0gdm9pZCAwIHx8IGkuY2FsbChuLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgKGkgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uZXJyb3IpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCB8fCBpLmNhbGwobiwgZSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUsIG47XG4gICAgKG4gPSAoZSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuY29tcGxldGUpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCB8fCBuLmNhbGwoZSk7XG4gIH0sIHIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgcmV0dXJuIChpID0gKG4gPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5zdWJzY3JpYmUoZSkpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBvdDtcbiAgfSwgcjtcbn0odXQpLCBPbiA9IHtcbiAgbm93OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgQW4gPSBmdW5jdGlvbih0KSB7XG4gIE0ociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHJldHVybiB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHI7XG59KHopLCBBZSA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBmb3IgKHZhciBlID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgZVtuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgUShbdCwgcl0sIFcoZSkpKTtcbiAgfSxcbiAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBjbGVhckludGVydmFsKHQpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCBSbiA9IGZ1bmN0aW9uKHQpIHtcbiAgTShyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0LmNhbGwodGhpcywgZSwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gaS5zY2hlZHVsZXIgPSBlLCBpLndvcmsgPSBuLCBpLnBlbmRpbmcgPSAhMSwgaTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgdmFyIGk7XG4gICAgaWYgKG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSBlO1xuICAgIHZhciBzID0gdGhpcy5pZCwgYSA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBzICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGEsIHMsIG4pKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSBuLCB0aGlzLmlkID0gKGkgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChhLCB0aGlzLmlkLCBuKSwgdGhpcztcbiAgfSwgci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihlLCBuLCBpKSB7XG4gICAgcmV0dXJuIGkgPT09IHZvaWQgMCAmJiAoaSA9IDApLCBBZS5zZXRJbnRlcnZhbChlLmZsdXNoLmJpbmQoZSwgdGhpcyksIGkpO1xuICB9LCByLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKGUsIG4sIGkpIHtcbiAgICBpZiAoaSA9PT0gdm9pZCAwICYmIChpID0gMCksIGkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBpICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gbjtcbiAgICBuICE9IG51bGwgJiYgQWUuY2xlYXJJbnRlcnZhbChuKTtcbiAgfSwgci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgaSA9IHRoaXMuX2V4ZWN1dGUoZSwgbik7XG4gICAgaWYgKGkpXG4gICAgICByZXR1cm4gaTtcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgci5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgdmFyIGkgPSAhMSwgcztcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKGUpO1xuICAgIH0gY2F0Y2ggKGEpIHtcbiAgICAgIGkgPSAhMCwgcyA9IGEgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKGkpXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBzO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciBlID0gdGhpcywgbiA9IGUuaWQsIGkgPSBlLnNjaGVkdWxlciwgcyA9IGkuYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCBYKHMsIHRoaXMpLCBuICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGksIG4sIG51bGwpKSwgdGhpcy5kZWxheSA9IG51bGwsIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCByO1xufShBbiksIFJlID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQociwgZSkge1xuICAgIGUgPT09IHZvaWQgMCAmJiAoZSA9IHQubm93KSwgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gciwgdGhpcy5ub3cgPSBlO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIGUsIG4pIHtcbiAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gMCksIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgcikuc2NoZWR1bGUobiwgZSk7XG4gIH0sIHQubm93ID0gT24ubm93LCB0O1xufSgpLCBUbiA9IGZ1bmN0aW9uKHQpIHtcbiAgTShyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgbiA9PT0gdm9pZCAwICYmIChuID0gUmUubm93KTtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzLCBlLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLmFjdGlvbnMgPSBbXSwgaS5fYWN0aXZlID0gITEsIGk7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcy5hY3Rpb25zO1xuICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgIG4ucHVzaChlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGk7XG4gICAgdGhpcy5fYWN0aXZlID0gITA7XG4gICAgZG9cbiAgICAgIGlmIChpID0gZS5leGVjdXRlKGUuc3RhdGUsIGUuZGVsYXkpKVxuICAgICAgICBicmVhaztcbiAgICB3aGlsZSAoZSA9IG4uc2hpZnQoKSk7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9ICExLCBpKSB7XG4gICAgICBmb3IgKDsgZSA9IG4uc2hpZnQoKTsgKVxuICAgICAgICBlLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aHJvdyBpO1xuICAgIH1cbiAgfSwgcjtcbn0oUmUpLCBqbiA9IG5ldyBUbihSbiksIE1uID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4gdCAmJiB0eXBlb2YgdC5sZW5ndGggPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgdCAhPSBcImZ1bmN0aW9uXCI7XG59O1xuZnVuY3Rpb24gTG4odCkge1xuICByZXR1cm4gdyh0ID09IG51bGwgPyB2b2lkIDAgOiB0LnRoZW4pO1xufVxuZnVuY3Rpb24gRm4odCkge1xuICByZXR1cm4gdyh0W19lXSk7XG59XG5mdW5jdGlvbiB4bih0KSB7XG4gIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiB3KHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cbmZ1bmN0aW9uIERuKHQpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAodCAhPT0gbnVsbCAmJiB0eXBlb2YgdCA9PSBcIm9iamVjdFwiID8gXCJhbiBpbnZhbGlkIG9iamVjdFwiIDogXCInXCIgKyB0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5mdW5jdGlvbiBObigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgIT0gXCJmdW5jdGlvblwiIHx8ICFTeW1ib2wuaXRlcmF0b3IgPyBcIkBAaXRlcmF0b3JcIiA6IFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBVbiA9IE5uKCk7XG5mdW5jdGlvbiAkbih0KSB7XG4gIHJldHVybiB3KHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbVW5dKTtcbn1cbmZ1bmN0aW9uIFZuKHQpIHtcbiAgcmV0dXJuIHBuKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUsIG4sIGksIHM7XG4gICAgcmV0dXJuIG50KHRoaXMsIGZ1bmN0aW9uKGEpIHtcbiAgICAgIHN3aXRjaCAoYS5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgZSA9IHQuZ2V0UmVhZGVyKCksIGEubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgYS50cnlzLnB1c2goWzEsICwgOSwgMTBdKSwgYS5sYWJlbCA9IDI7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gWzQsIEYoZS5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBuID0gYS5zZW50KCksIGkgPSBuLnZhbHVlLCBzID0gbi5kb25lLCBzID8gWzQsIEYodm9pZCAwKV0gOiBbMywgNV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzIsIGEuc2VudCgpXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBbNCwgRihpKV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gWzQsIGEuc2VudCgpXTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHJldHVybiBhLnNlbnQoKSwgWzMsIDJdO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICByZXR1cm4gZS5yZWxlYXNlTG9jaygpLCBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBxbih0KSB7XG4gIHJldHVybiB3KHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZ2V0UmVhZGVyKTtcbn1cbmZ1bmN0aW9uIHpuKHQpIHtcbiAgaWYgKHQgaW5zdGFuY2VvZiBUKVxuICAgIHJldHVybiB0O1xuICBpZiAodCAhPSBudWxsKSB7XG4gICAgaWYgKEZuKHQpKVxuICAgICAgcmV0dXJuIEhuKHQpO1xuICAgIGlmIChNbih0KSlcbiAgICAgIHJldHVybiBZbih0KTtcbiAgICBpZiAoTG4odCkpXG4gICAgICByZXR1cm4gQm4odCk7XG4gICAgaWYgKHhuKHQpKVxuICAgICAgcmV0dXJuIGx0KHQpO1xuICAgIGlmICgkbih0KSlcbiAgICAgIHJldHVybiBLbih0KTtcbiAgICBpZiAocW4odCkpXG4gICAgICByZXR1cm4gSm4odCk7XG4gIH1cbiAgdGhyb3cgRG4odCk7XG59XG5mdW5jdGlvbiBIbih0KSB7XG4gIHJldHVybiBuZXcgVChmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0W19lXSgpO1xuICAgIGlmICh3KGUuc3Vic2NyaWJlKSlcbiAgICAgIHJldHVybiBlLnN1YnNjcmliZShyKTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGVcIik7XG4gIH0pO1xufVxuZnVuY3Rpb24gWW4odCkge1xuICByZXR1cm4gbmV3IFQoZnVuY3Rpb24ocikge1xuICAgIGZvciAodmFyIGUgPSAwOyBlIDwgdC5sZW5ndGggJiYgIXIuY2xvc2VkOyBlKyspXG4gICAgICByLm5leHQodFtlXSk7XG4gICAgci5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEJuKHQpIHtcbiAgcmV0dXJuIG5ldyBUKGZ1bmN0aW9uKHIpIHtcbiAgICB0LnRoZW4oZnVuY3Rpb24oZSkge1xuICAgICAgci5jbG9zZWQgfHwgKHIubmV4dChlKSwgci5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gci5lcnJvcihlKTtcbiAgICB9KS50aGVuKG51bGwsIGN0KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBLbih0KSB7XG4gIHJldHVybiBuZXcgVChmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUsIG47XG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIGkgPSBEKHQpLCBzID0gaS5uZXh0KCk7ICFzLmRvbmU7IHMgPSBpLm5leHQoKSkge1xuICAgICAgICB2YXIgYSA9IHMudmFsdWU7XG4gICAgICAgIGlmIChyLm5leHQoYSksIHIuY2xvc2VkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChjKSB7XG4gICAgICBlID0geyBlcnJvcjogYyB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBzICYmICFzLmRvbmUgJiYgKG4gPSBpLnJldHVybikgJiYgbi5jYWxsKGkpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGUpIHRocm93IGUuZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHIuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBsdCh0KSB7XG4gIHJldHVybiBuZXcgVChmdW5jdGlvbihyKSB7XG4gICAgWm4odCwgcikuY2F0Y2goZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIHIuZXJyb3IoZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gSm4odCkge1xuICByZXR1cm4gbHQoVm4odCkpO1xufVxuZnVuY3Rpb24gWm4odCwgcikge1xuICB2YXIgZSwgbiwgaSwgcztcbiAgcmV0dXJuIGZuKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSwgYztcbiAgICByZXR1cm4gbnQodGhpcywgZnVuY3Rpb24obCkge1xuICAgICAgc3dpdGNoIChsLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBsLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgZSA9IGhuKHQpLCBsLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgZS5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKG4gPSBsLnNlbnQoKSwgISFuLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKGEgPSBuLnZhbHVlLCByLm5leHQoYSksIHIuY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICBsLmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gbC5zZW50KCksIGkgPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gbC50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgbiAmJiAhbi5kb25lICYmIChzID0gZS5yZXR1cm4pID8gWzQsIHMuY2FsbChlKV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsLnNlbnQoKSwgbC5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gci5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gR24odCwgciwgZSwgbiwgaSkge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgaSA9PT0gdm9pZCAwICYmIChpID0gITEpO1xuICB2YXIgcyA9IHIuc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgZSgpLCBpID8gdC5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBuKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIG4pO1xuICBpZiAodC5hZGQocyksICFpKVxuICAgIHJldHVybiBzO1xufVxuZnVuY3Rpb24gV24odCwgcikge1xuICB2YXIgZSA9IHcodCkgPyB0IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHQ7XG4gIH0sIG4gPSBmdW5jdGlvbihpKSB7XG4gICAgcmV0dXJuIGkuZXJyb3IoZSgpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBUKG4pO1xufVxudmFyIFFuID0gcmUoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5uYW1lID0gXCJFbXB0eUVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwibm8gZWxlbWVudHMgaW4gc2VxdWVuY2VcIjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gWG4odCwgcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBpID0gITEsIHM7XG4gICAgdC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZnVuY3Rpb24oYSkge1xuICAgICAgICBzID0gYSwgaSA9ICEwO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBuLFxuICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpID8gZShzKSA6IG4obmV3IFFuKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGVvKHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih0KTtcbn1cbnZhciB0byA9IHJlKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICBlID09PSB2b2lkIDAgJiYgKGUgPSBudWxsKSwgdCh0aGlzKSwgdGhpcy5tZXNzYWdlID0gXCJUaW1lb3V0IGhhcyBvY2N1cnJlZFwiLCB0aGlzLm5hbWUgPSBcIlRpbWVvdXRFcnJvclwiLCB0aGlzLmluZm8gPSBlO1xuICB9O1xufSk7XG5mdW5jdGlvbiBybyh0LCByKSB7XG4gIHZhciBlID0gZW8odCkgPyB7IGZpcnN0OiB0IH0gOiB0eXBlb2YgdCA9PSBcIm51bWJlclwiID8geyBlYWNoOiB0IH0gOiB0LCBuID0gZS5maXJzdCwgaSA9IGUuZWFjaCwgcyA9IGUud2l0aCwgYSA9IHMgPT09IHZvaWQgMCA/IG5vIDogcywgYyA9IGUuc2NoZWR1bGVyLCBsID0gYyA9PT0gdm9pZCAwID8gam4gOiBjLCB1ID0gZS5tZXRhLCBmID0gdSA9PT0gdm9pZCAwID8gbnVsbCA6IHU7XG4gIGlmIChuID09IG51bGwgJiYgaSA9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyB0aW1lb3V0IHByb3ZpZGVkLlwiKTtcbiAgcmV0dXJuIENuKGZ1bmN0aW9uKGgsIHkpIHtcbiAgICB2YXIgZCwgcCwgXyA9IG51bGwsIE4gPSAwLCBIID0gZnVuY3Rpb24obmUpIHtcbiAgICAgIHAgPSBHbih5LCBsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkLnVuc3Vic2NyaWJlKCksIHpuKGEoe1xuICAgICAgICAgICAgbWV0YTogZixcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogXyxcbiAgICAgICAgICAgIHNlZW46IE5cbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKHkpO1xuICAgICAgICB9IGNhdGNoIChkdCkge1xuICAgICAgICAgIHkuZXJyb3IoZHQpO1xuICAgICAgICB9XG4gICAgICB9LCBuZSk7XG4gICAgfTtcbiAgICBkID0gaC5zdWJzY3JpYmUoa24oeSwgZnVuY3Rpb24obmUpIHtcbiAgICAgIHAgPT0gbnVsbCB8fCBwLnVuc3Vic2NyaWJlKCksIE4rKywgeS5uZXh0KF8gPSBuZSksIGkgPiAwICYmIEgoaSk7XG4gICAgfSwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgcCAhPSBudWxsICYmIHAuY2xvc2VkIHx8IHAgPT0gbnVsbCB8fCBwLnVuc3Vic2NyaWJlKCksIF8gPSBudWxsO1xuICAgIH0pKSwgIU4gJiYgSChuICE9IG51bGwgPyB0eXBlb2YgbiA9PSBcIm51bWJlclwiID8gbiA6ICtuIC0gbC5ub3coKSA6IGkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG5vKHQpIHtcbiAgdGhyb3cgbmV3IHRvKHQpO1xufVxuY2xhc3MgSiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiAhMCwgbG9hZGVkVmFsdWU6IHIgfSwgdGhpcy5fc3ViamVjdC5uZXh0KHIpLCB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfSwgdGhpcy50aHJvdyA9IChyLCBlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6ICExLCBlcnJvcjogciwgZXJyTXNnOiBlIH0sIHRoaXMuX3N1YmplY3QuZXJyb3Iocik7XG4gICAgfSwgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9IChyKSA9PiB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgPyB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlIDogciwgdGhpcy5zdWJzY3JpYmUgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiICYmIHIodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCBlID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgcih0aGlzLl9jdXJyZW50KSwgZS51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgdGhpcy53YWl0Rm9yTG9hZCA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIiAmJiBEcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IGUgPSB7XG4gICAgICAgIGZpcnN0OiByLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IFduKCgpID0+IG5ldyBFcnJvcihyLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBYbih0aGlzLl9zdWJqZWN0LnBpcGUocm8oZSkpKTtcbiAgICB9LCB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6ICExIH0sIHRoaXMuX3N1YmplY3QgPSBuZXcgdXQoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogb28sIGVycl9fOiBpbyB9ID0gQShcImluaXQtZmxvd3NcIiksIFRlID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IG5ldyBKKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiBlLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZS5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IGkgPSBhd2FpdCByKG4pO1xuICAgICAgICBvbyhg4pyUICR7dH0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBpKSwgZS5zZXQoaSk7XG4gICAgICB9IGNhdGNoIChpKSB7XG4gICAgICAgIGlvKGDwnZmtICR7dH0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIFUoaSksIFwiRGV0YWlsczpcIiwgaSksIGUudGhyb3coaSwgVShpKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgc28gPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKHQpLm1hcCgobikgPT4gbi5pbml0aWFsaXplKHsgY29udGV4dDogciwgZm9ybUNhbGxiYWNrczogZSB9KSkpO1xufSwgYW8gPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogVGUoXCJTdHJpcGUgUFJcIiwgeC5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogVGUoXCJTdHJpcGUgTGlua1wiLCB4LnN0cmlwZUxpbmsuaW5pdClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0pLCB7IGVycl9fOiBjbyB9ID0gQShcImZvcm0tY2FsbGJhY2tzXCIpLCBrID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKSwgamUgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogayxcbiAgb25CbHVyOiBrLFxuICBvbkNoYW5nZTogayxcbiAgb25Mb2FkOiBrLFxuICBvbkxvYWRFcnJvcjogayxcbiAgb25WYWxpZGF0aW9uRXJyb3I6IGssXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBrLFxuICBvbkNoZWNrb3V0U3VjY2VzczogayxcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBrLFxuICBvbkNoZWNrb3V0RXJyb3I6IGssXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBrXG59KSwgTyA9IGNsYXNzIE8ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBPLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCksIE9iamVjdC5lbnRyaWVzKHIpLmZvckVhY2goKFtlLCBuXSkgPT4ge1xuICAgICAgICBjb25zdCBpID0gd3QoZSwgbiA/PyBPLk5PT1AsIGNvKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2VdID0gaTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2NhbGxiYWNrcyA9IE8uY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufTtcbk8uTk9PUCA9ICgpID0+IHtcbn0sIE8uY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gIGNvbnN0IHIgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGplLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoZSkgPT4ge1xuICAgIHJbZV0gPSBPLk5PT1A7XG4gIH0pLCByO1xufSwgTy5mcm9tT2JqZWN0ID0gKHIpID0+IHtcbiAgY29uc3QgZSA9IG5ldyBPKCk7XG4gIHJldHVybiBlLnNldENhbGxiYWNrcyhqZS5wYXJzZShyKSksIGU7XG59O1xubGV0IGxlID0gTztcbmNsYXNzIHVvIHtcbiAgY29uc3RydWN0b3IociwgZSwgbiwgaSkge1xuICAgIHRoaXMuaGFuZGxlTWVzc2FnZSA9IChzKSA9PiB7XG4gICAgICBpZiAoIXMuc291cmNlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICBpZiAoTWUocy5vcmlnaW4pICE9PSBNZSh0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBzLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBzLmRhdGEucGVucGFsKVxuICAgICAgICByZXR1cm47XG4gICAgICBjb25zdCBhID0gc3IoSlNPTi5wYXJzZShzLmRhdGEpKTtcbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KGEpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogbCwgcGF5bG9hZDogdSB9ID0gYSwgZiA9IHUudHlwZTtcbiAgICAgIHN3aXRjaCAoZikge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHUuaGVpZ2h0ID8gYCR7dS5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGwsIHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2xdID0gcy5zb3VyY2UsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQodSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcih1Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IodS5lbGVtZW50VHlwZSwgdS5lcnJvcnMsIGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZik7XG4gICAgICB9XG4gICAgfSwgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKHMpID0+IHMuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhcy5lbGVtZW50SWQgPyAoY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIHMuZm9ybUlkKSwgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIHMpLCAhMSkgOiB0aGlzLm5vbmNlcy5oYXMocy5ub25jZSkgPyAoY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgcyksICExKSA6ICh0aGlzLm5vbmNlcy5hZGQocy5ub25jZSksICEwKSwgdGhpcy5ldmVudFRhcmdldHMgPSB7fSwgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCB0aGlzLmZvcm1JZCA9IHIsIHRoaXMuYmFzZVVybCA9IGUsIHRoaXMuZm9ybUNhbGxiYWNrcyA9IG4sIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBpO1xuICB9XG59XG5jb25zdCBNZSA9ICh0KSA9PiBuZXcgVVJMKHQpLm9yaWdpbjtcbmFzeW5jIGZ1bmN0aW9uIGxvKHQsIHIpIHtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICExLFxuICAgIGNoaWxkT3JpZ2luOiByXG4gIH0pLnByb21pc2UsIGkgPSBhd2FpdCBhcihuKTtcbiAgaWYgKCFjcihuLCBpKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RcIik7XG4gIHJldHVybiBuO1xufVxuY2xhc3MgZm8ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKHIsIGUpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChyLCBlKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IHIgPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICByZXR1cm4gcjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuY29uc3QgcG8gPSAodCwgciwgZSkgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSOiBuIH0gPSB0O1xuICBuLnB1Ymxpc2hlci5zdWJzY3JpYmUoKGkpID0+IHtcbiAgICBpZiAoaS5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHMgPSBpLmxvYWRlZFZhbHVlLCBhID0gcy5pc0F2YWlsYWJsZSAmJiBzLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSwgYyA9IHMuaXNBdmFpbGFibGUgJiYgcy5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5LCBsID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBhLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIGEgJiYgTGUoXCJhcHBsZV9wYXlcIiwgcywgciwgZSwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBjICYmIExlKFwiZ29vZ2xlX3BheVwiLCBzLCByLCBlLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChsKTtcbiAgICB9XG4gIH0pO1xufSwgTGUgPSAodCwgciwgZSwgbiwgaSkgPT4geC5zdHJpcGVQUi5ydW4oe1xuICBjb250ZXh0OiBlLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHJ0KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgdCksXG4gIG5vbkNkZUZvcm1JbnB1dHM6IGRlKGUuZm9ybURpdiksXG4gIGZvcm1DYWxsYmFja3M6IG4sXG4gIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogdCwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSA9PSBudWxsID8gdm9pZCAwIDogaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gIGluaXRSZXN1bHQ6IHJcbn0pLCBGZSA9IFwiVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuXCIsIHsgbG9nX186IGosIGVycl9fOiBzZSB9ID0gQShcIm9wLWZvcm1cIiksIFIgPSBjbGFzcyBSIHtcbiAgY29uc3RydWN0b3Iocikge1xuICAgIHRoaXMuY2RlTG9hZEV2ZW50ID0gbmV3IEooKSwgdGhpcy5hbnlDZGVDb25uID0gbmV3IEooKSwgdGhpcy5jb250ZXh0ID0gbmV3IEooKSwgdGhpcy5pbml0Rmxvd3MgPSBhbygpLCB0aGlzLnN0YXJ0Rm9ybUluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBqKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIiksIGooXCLilJwgV2FpdGluZyBmb3IgQ0RFIGxvYWQgZXZlbnQuLi5cIik7XG4gICAgICAgIGNvbnN0IGUgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEZlXG4gICAgICAgIH0pO1xuICAgICAgICBqKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpLCBqKFwi4pScIFdhaXRpbmcgZm9yIENERSBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgICBjb25zdCBuID0gYXdhaXQgdGhpcy5hbnlDZGVDb25uLndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogRmVcbiAgICAgICAgfSk7XG4gICAgICAgIGooXCLilJwgQ0RFIGNvbm5lY3Rpb24gcmVjZWl2ZWRcIiksIGooXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgIGNvbnN0IGkgPSBSLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgZSxcbiAgICAgICAgICBuLFxuICAgICAgICAgIHRoaXMuZ2V0Rm9ybURpdigpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5zZXQoaSksIHBvKHRoaXMuaW5pdEZsb3dzLCBpLCB0aGlzLmZvcm1DYWxsYmFja3MpLCBqKFwi4pScIFN0YXJ0aW5nIE9KUyBpbml0IGZsb3dzLi4uXCIpLCBhd2FpdCBzbyh0aGlzLmluaXRGbG93cywgaSwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWQoZS50b3RhbEFtb3VudEF0b21zLCBlLmN1cnJlbmN5KSwgaihcIuKVsCBEb25lIGluaXRpYWxpemluZyBPSlMgZmxvd3MuXCIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCBuID0gVShlKTtcbiAgICAgICAgc2UoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIG4pLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKG4pO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGUsIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgbiAmJiAobi5ub2RlLnN0eWxlLmhlaWdodCA9IGUpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRlZCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC5zZXQoZSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoZSksIGUpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChlLCBuID0ge30pID0+IHtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBpID0gRXQucGFyc2UoZSksIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCBhID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKG4pO1xuICAgICAgcy5uYW1lID0gYCR7aX0tZWxlbWVudGA7XG4gICAgICBjb25zdCBjID0gbmV3IFVSTChgL2FwcC92MS8ke3MubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gYy5zZWFyY2ggPSBhLnRvU3RyaW5nKCksIHMuc3JjID0gYy5ocmVmLCBzLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBzLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoaSwgcyk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChlLCBuKSA9PiB7XG4gICAgICBjb25zdCBpID0ge1xuICAgICAgICB0eXBlOiBlLFxuICAgICAgICBub2RlOiBuLFxuICAgICAgICBtb3VudDogKHMpID0+IHtcbiAgICAgICAgICB2YXIgYTtcbiAgICAgICAgICByZXR1cm4gKGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpKSA9PSBudWxsID8gdm9pZCAwIDogYS5hcHBlbmRDaGlsZChuKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBpLnR5cGUsIG5vZGU6IGkubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbTC5DQVJEXTogdm9pZCAwLFxuICAgICAgICBbTC5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgW0wuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFtMLkNBUkRfQ1ZDXTogdm9pZCAwXG4gICAgICB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHNbZV0gPSBpLCBpO1xuICAgIH0sIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChlKSA9PiB7XG4gICAgICBjb25zdCBuID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcmV0dXJuIG4uYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKSwgbi5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpLCBlLnN0eWxlcyAmJiBuLmFwcGVuZChcInN0eWxlc1wiLCBpcihlLnN0eWxlcykpLCBuLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pLCBuO1xuICAgIH0sIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChlKSA9PiB7XG4gICAgICBsbyhlLm5vZGUpLnRoZW4oKG4pID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGUudHlwZSwgbiksIHRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmFueUNkZUNvbm4uc2V0KG4pO1xuICAgICAgfSkuY2F0Y2goKG4pID0+IHNlKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBuKSk7XG4gICAgfSwgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksIHRoaXMuc3VibWl0Q2FyZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWUpIHtcbiAgICAgICAgc2UoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB4LmNvbW1vbkNDLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcnQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBkZShlLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAvLyBUaGlzIGZsb3cgcmVxdWlyZXMgbm8gaW5pdGlhbGl6YXRpb25cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkLCB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpXG4gICAgICAgIGUgJiYgZS5ub2RlLnJlbW92ZSgpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgIH0sIFIuYXNzaWduQXNTaW5nbGV0b24odGhpcyksIHRoaXMub2pzVmVyc2lvbiA9IFwiMC4xLjE2XCIsIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcImxvY2FsX2J1aWxkXCIsIHRoaXMuYmFzZVVybCA9IHIuYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIHRoaXMuY29uZmlnID0geyAuLi5yLCBiYXNlVXJsOiB0aGlzLmJhc2VVcmwgfSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gbGUuZnJvbU9iamVjdChyKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt3aW5kb3cuY3J5cHRvLnJhbmRvbVVVSUQoKX1gLCB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiwgdGhpcy5mb3JtVGFyZ2V0ID0gci5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiLCB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfSwgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBmbygpLCB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyB1byh0aGlzLmZvcm1JZCwgdGhpcy5iYXNlVXJsLCB0aGlzLmZvcm1DYWxsYmFja3MsIHtcbiAgICAgIHNldEZvcm1IZWlnaHQ6IHRoaXMuc2V0Rm9ybUhlaWdodCxcbiAgICAgIG9uQ2RlTG9hZGVkOiB0aGlzLm9uQ2RlTG9hZGVkLFxuICAgICAgb25DZGVMb2FkRXJyb3I6IHRoaXMub25DZGVMb2FkRXJyb3JcbiAgICB9KSwgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxufTtcblIub2pzRmxvd3MgPSB4LCBSLmFzc2lnbkFzU2luZ2xldG9uID0gKHIpID0+IHtcbiAgaWYgKFIuZ2V0SW5zdGFuY2UoKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgd2luZG93Lm9qcyA9IHI7XG59LCBSLmdldEluc3RhbmNlID0gKCkgPT4gd2luZG93Lm9qcyA/PyBudWxsLCBSLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAociwgZSwgbiwgaSkgPT4gKHtcbiAgYmFzZVVybDogbmV3IFVSTChyLmJhc2VVcmwgPz8gZnQpLm9yaWdpbixcbiAgZm9ybURpdjogaSxcbiAgZWxlbWVudHNTZXNzaW9uSWQ6IGUuc2Vzc2lvbklkLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gIGFueUNkZUNvbm5lY3Rpb246IG4sXG4gIGN1c3RvbUluaXRQYXJhbXM6IHIuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fVxufSk7XG5sZXQgeGUgPSBSO1xuXG5jb25zdCB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgZm9ybUNhbGxiYWNrc1JlZiA9IHVzZVJlZihwcm9wcyk7XG4gIGNvbnN0IGNiID0gZm9ybUNhbGxiYWNrc1JlZi5jdXJyZW50O1xuICBjYi5vbkxvYWQgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uTG9hZCwgW3Byb3BzLm9uTG9hZF0pO1xuICBjYi5vbkxvYWRFcnJvciA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25Mb2FkRXJyb3IsIFtwcm9wcy5vbkxvYWRFcnJvcl0pO1xuICBjYi5vblZhbGlkYXRpb25FcnJvciA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25WYWxpZGF0aW9uRXJyb3IsIFtwcm9wcy5vblZhbGlkYXRpb25FcnJvcl0pO1xuICBjYi5vbkZvY3VzID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vbkZvY3VzLCBbcHJvcHMub25Gb2N1c10pO1xuICBjYi5vbkJsdXIgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uQmx1ciwgW3Byb3BzLm9uQmx1cl0pO1xuICBjYi5vbkNoYW5nZSA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25DaGFuZ2UsIFtwcm9wcy5vbkNoYW5nZV0pO1xuICBjYi5vbkNoZWNrb3V0U3RhcnRlZCA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25DaGVja291dFN0YXJ0ZWQsIFtwcm9wcy5vbkNoZWNrb3V0U3RhcnRlZF0pO1xuICBjYi5vbkNoZWNrb3V0U3VjY2VzcyA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25DaGVja291dFN1Y2Nlc3MsIFtwcm9wcy5vbkNoZWNrb3V0U3VjY2Vzc10pO1xuICBjYi5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MgPSB1c2VNZW1vKFxuICAgICgpID0+IHByb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyxcbiAgICBbcHJvcHMub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzXVxuICApO1xuICBjYi5vbkNoZWNrb3V0RXJyb3IgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uQ2hlY2tvdXRFcnJvciwgW3Byb3BzLm9uQ2hlY2tvdXRFcnJvcl0pO1xuICBjYi5vblBheW1lbnRSZXF1ZXN0TG9hZCA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25QYXltZW50UmVxdWVzdExvYWQsIFtwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZF0pO1xuICByZXR1cm4gZm9ybUNhbGxiYWNrc1JlZi5jdXJyZW50O1xufTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG5jb25zdCBab2RGaWVsZEVycm9yID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEuYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFJlcXVpcmVkU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpO1xuY29uc3QgbnVsbE9yVW5kZWZPciQxID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6JDEudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG56JDEubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZ1xufSkuZXh0ZW5kKFJlcXVpcmVkRm9ybUZpZWxkcy5zaGFwZSk7XG5jb25zdCBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiBFdmVudFBheWxvYWQsXG4gIG5vbmNlOiBSZXF1aXJlZFN0cmluZyxcbiAgZm9ybUlkOiBSZXF1aXJlZFN0cmluZyxcbiAgZWxlbWVudElkOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6JDEuc3RyaW5nKCksXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheShGaWVsZFZhbGlkYXRpb25FcnJvcilcbn0pO1xueiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwodHJ1ZSkgfSksXG4gIFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2Vcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xueiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSlcbn0pO1xuY29uc3QgTGluZUl0ZW0gPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQnJhbmRTZXR0aW5ncyA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpO1xuY29uc3QgQnJhbmQgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwpLFxuICB0cmlhbF9zdGFydDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShJbnZvaWNlTWluaW1hbClcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogeiQxLmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG56JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZFxufSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG4oZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgdmFsdWU6IF9uZXdUYXJnZXQubmFtZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufSkoRXJyb3IpO1xuXG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtZLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7WS5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5lcnJvcihgJHtZLnJlZC5ib2xkKFwib2pzL1wiKX0ke1kuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG5cbmNvbnN0IFBSX0xPQURJTkcgPSB7XG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5jb25zdCB1c2VQYXltZW50UmVxdWVzdHMgPSAob3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCkgPT4ge1xuICBjb25zdCBbcGF5bWVudFJlcXVlc3RzLCBzZXRQYXltZW50UmVxdWVzdHNdID0gdXNlU3RhdGUoe1xuICAgIGFwcGxlX3BheTogUFJfTE9BRElORyxcbiAgICBnb29nbGVfcGF5OiBQUl9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXltZW50UmVxdWVzdHMyKSA9PiB7XG4gICAgICBzZXRQYXltZW50UmVxdWVzdHMocGF5bWVudFJlcXVlc3RzMik7XG4gICAgICBvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkPy4ocGF5bWVudFJlcXVlc3RzMik7XG4gICAgfSxcbiAgICBbb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZF1cbiAgKTtcbiAgcmV0dXJuIHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9O1xufTtcblxuY29uc3QgRk9STV9UQVJHRVQgPSBcIm9wX29qc19mb3JtXCI7XG5jb25zdCBFbGVtZW50c0Zvcm0gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW29wRm9ybSwgc2V0T3BGb3JtXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IFtlbGVtZW50c0NvbnRleHRWYWx1ZSwgc2V0RWxlbWVudHNDb250ZXh0VmFsdWVdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9ID0gdXNlUGF5bWVudFJlcXVlc3RzKHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkLFxuICAgIG9uTG9hZDogKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KSA9PiB7XG4gICAgICBzZXRMb2FkZWQodHJ1ZSk7XG4gICAgICBwcm9wcy5vbkxvYWQ/Lih0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSk7XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BGb3JtKSByZXR1cm47XG4gICAgY29uc3QgZm9ybSA9IHhlLmdldEluc3RhbmNlKCkgPz8gbmV3IHhlKHtcbiAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHByb3BzLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICBmb3JtVGFyZ2V0OiBgIyR7Rk9STV9UQVJHRVR9YCxcbiAgICAgIGJhc2VVcmw6IHByb3BzLmJhc2VVcmwsXG4gICAgICBjdXN0b21Jbml0UGFyYW1zOiBwcm9wcy5jdXN0b21Jbml0UGFyYW1zLFxuICAgICAgLi4uZm9ybUNhbGxiYWNrc1xuICAgIH0pO1xuICAgIHNldE9wRm9ybShmb3JtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlKGZvcm0pO1xuICAgIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlKHZhbHVlKTtcbiAgICBmb3JtLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKHJlc3VsdC5sb2FkZWRWYWx1ZS5jb250cm9sbGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIGFwcGxlUGF5OiBwYXltZW50UmVxdWVzdHMuYXBwbGVfcGF5LFxuICAgIGdvb2dsZVBheTogcGF5bWVudFJlcXVlc3RzLmdvb2dsZV9wYXksXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogYCR7YmFzZVVybH0vYXBwL3YxLyR7c3ViUGF0aH0tZWxlbWVudC8/JHtxdWVyeVN0cmluZ31gLFxuICAgICAgc3R5bGU6IGZyYW1lU3R5bGUsXG4gICAgICByZWY6IGlmcmFtZVJlZlxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEIH0pO1xufTtcblxuY29uc3QgQ2FyZEV4cGlyeUVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZIH0pO1xufTtcblxuY29uc3QgQ2FyZE51bWJlckVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSIH0pO1xufTtcblxuZXhwb3J0IHsgQ2FyZEN2Y0VsZW1lbnQsIENhcmRFbGVtZW50LCBDYXJkRXhwaXJ5RWxlbWVudCwgQ2FyZE51bWJlckVsZW1lbnQsIEVsZW1lbnRzRm9ybSwgRmllbGROYW1lLCB1c2VPcGVuUGF5RWxlbWVudHMgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGlCQUFBQSxJQUFlLGNBQUFDLElBQVksVUFBQUMsSUFBUSxXQUFBQyxHQUFTLFlBQUFDLEdBQVUsZUFBQUMsSUFBYSxhQUFBQyxVQUFpQjtBQUM3RixTQUFTLE9BQUFDLEdBQUssWUFBQUMsVUFBZ0I7QUFDOUIsU0FBUyxLQUFLQyxTQUFXO0FBQ3pCLE9BQU87QUFDUCxTQUFTLGtCQUFBQyxVQUFzQjtBQUMvQixPQUFPQyxPQUFPO0FBRWQsTUFBTUMsS0FBa0JaLEdBQWM7QUFBQSxFQUNwQyxRQUFRO0FBQUEsRUFDUixZQUFZO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixxQkFBcUI7QUFBQSxFQUNyQixnQkFBZ0IsTUFBTTtBQUFBLEVBQ3RCO0FBQUEsRUFDQSxTQUFTO0FB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O0FBQUEsTUFDWCxLQUFLLEdBQUdELENBQU8sV0FBV0MsQ0FBTyxhQUFhTSxDQUFXO0FBQUEsTUFDekQsT0FBT0Q7QUFBQSxNQUNQLEtBQUtGO0FBQUEsSUFDUDtBQUFBLEVBQ0YsS0FiRSxRQUFRLE1BQU0sa0RBQWtELEdBQ3pDLGdCQUFBeGEsRUFBSSxPQUFPLENBQUMsQ0FBQztBQWF4QyxHQUVNNmEsS0FBaUIsQ0FBQyxFQUFFLFFBQUE5RixFQUFPLE1BQ1IsZ0JBQUEvVSxFQUFJNlosSUFBYyxFQUFFLFFBQUE5RSxHQUFRLGFBQWEzQixFQUFnQixTQUFTLENBQUMsR0FHdEYwSCxLQUFjLENBQUMsRUFBRSxRQUFBL0YsRUFBTyxNQUNMLGdCQUFBL1UsRUFBSTZaLElBQWMsRUFBRSxRQUFBOUUsR0FBUSxhQUFhM0IsRUFBZ0IsS0FBSyxDQUFDLEdBR2xGMkgsS0FBb0IsQ0FBQyxFQUFFLFFBQUFoRyxFQUFPLE1BQ1gsZ0JBQUEvVSxFQUFJNlosSUFBYyxFQUFFLFFBQUE5RSxHQUFRLGFBQWEzQixFQUFnQixZQUFZLENBQUMsR0FHekY0SCxLQUFvQixDQUFDLEVBQUUsUUFBQWpHLEVBQU8sTUFDWCxnQkFBQS9VLEVBQUk2WixJQUFjLEVBQUUsUUFBQTlFLEdBQVEsYUFBYTNCLEVBQWdCLFlBQVksQ0FBQzsiLAogICJuYW1lcyI6IFsiY3JlYXRlQ29udGV4dCIsICJ1c2VDb250ZXh0IiwgInVzZVJlZiIsICJ1c2VNZW1vIiwgInVzZVN0YXRlIiwgInVzZUNhbGxiYWNrIiwgInVzZUVmZmVjdCIsICJqc3giLCAiRnJhZ21lbnQiLCAieiQxIiwgImNvbm5lY3RUb0NoaWxkIiwgIlkiLCAiRWxlbWVudHNDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJjb250ZXh0IiwgImZ0IiwgInB0IiwgImh0IiwgIm10IiwgInl0IiwgIl90IiwgImFlIiwgInQiLCAiciIsICJndCIsICJidCIsICJlIiwgInZ0IiwgIlUiLCAid3QiLCAibiIsICJTIiwgIkUiLCAiWiIsICJtIiwgIk5lIiwgIlVlIiwgIiRlIiwgIlZlIiwgIkwiLCAiRXQiLCAiZWUiLCAiU3QiLCAiUCIsICJDdCIsICJrdCIsICJQdCIsICJJdCIsICJPdCIsICJBdCIsICJSdCIsICJUdCIsICJqdCIsICJNdCIsICJMdCIsICJGdCIsICIkIiwgInh0IiwgIkR0IiwgIk50IiwgIlV0IiwgIiR0IiwgIlZ0IiwgInF0IiwgInp0IiwgIkh0IiwgIll0IiwgIkJ0IiwgIkciLCAiS3QiLCAiSnQiLCAiWnQiLCAiR3QiLCAiV3QiLCAiUXQiLCAidGUiLCAiZ2UiLCAidHIiLCAiWHQiLCAiZXIiLCAicnIiLCAibnIiLCAib3IiLCAiaSIsICJzIiwgImEiLCAiYyIsICJpciIsICJkZSIsICJzciIsICJhciIsICJjciIsICJnIiwgInVyIiwgInFlIiwgInplIiwgImxyIiwgImRyIiwgIlYiLCAiZnIiLCAicHIiLCAiSGUiLCAiaHIiLCAibXIiLCAieXIiLCAiYmUiLCAiWWUiLCAidmUiLCAiQmUiLCAiX3IiLCAiZ3IiLCAiS2UiLCAiYnIiLCAidnIiLCAiSmUiLCAid3IiLCAiRXIiLCAiU3IiLCAiQ3IiLCAia3IiLCAiUHIiLCAiWmUiLCAiSSIsICJPciIsICJJciIsICJBciIsICJxIiwgIlJyIiwgIlRyIiwgImpyIiwgImZlIiwgIk1yIiwgIkdlIiwgIkxyIiwgIndlIiwgIkZyIiwgIldlIiwgIlFlIiwgInhyIiwgIkRyIiwgInBlIiwgIlhlIiwgIkEiLCAiZ28iLCAiTnIiLCAiaGUiLCAiZXQiLCAiVXIiLCAidHQiLCAibWUiLCAiJHIiLCAiRWUiLCAidiIsICJWciIsICJxciIsICJ6ciIsICJIciIsICJsIiwgInUiLCAiZiIsICJ5IiwgIngiLCAiS3IiLCAiWXIiLCAiQnIiLCAiaCIsICJKciIsICJaciIsICJHciIsICJXciIsICJRciIsICJiIiwgIlNlIiwgIkNlIiwgIlhyIiwgInJuIiwgIm5uIiwgIl8iLCAiZW4iLCAidG4iLCAiQyIsICJvbiIsICJzbiIsICJhbiIsICJjbiIsICJsbiIsICJ1biIsICJkbiIsICJydCIsICJjZSIsICJNIiwgImZuIiwgIm50IiwgIkQiLCAiVyIsICJRIiwgIkYiLCAicG4iLCAiTiIsICJIIiwgImhuIiwgInciLCAicmUiLCAib2UiLCAiWCIsICJ6IiwgImtlIiwgIm90IiwgIml0IiwgInN0IiwgImF0IiwgImN0IiwgIlBlIiwgIksiLCAieWUiLCAiZ24iLCAidWUiLCAibW4iLCAiaWUiLCAieW4iLCAiQiIsICJfbiIsICJfZSIsICJibiIsICJ2biIsICJUIiwgIkVuIiwgIkllIiwgInduIiwgIlNuIiwgIkNuIiwgImtuIiwgIlBuIiwgIkluIiwgInV0IiwgIk9lIiwgIk9uIiwgIkFuIiwgIkFlIiwgIlJuIiwgIlJlIiwgIlRuIiwgImpuIiwgIk1uIiwgIkxuIiwgIkZuIiwgInhuIiwgIkRuIiwgIk5uIiwgIlVuIiwgIiRuIiwgIlZuIiwgInFuIiwgInpuIiwgIkhuIiwgIlluIiwgIkJuIiwgImx0IiwgIktuIiwgIkpuIiwgIlpuIiwgIkduIiwgIlduIiwgIlFuIiwgIlhuIiwgImVvIiwgInRvIiwgInJvIiwgIm5vIiwgIm5lIiwgImR0IiwgIkoiLCAib28iLCAiaW8iLCAiVGUiLCAic28iLCAiYW8iLCAiY28iLCAiayIsICJqZSIsICJPIiwgImxlIiwgInVvIiwgIk1lIiwgImxvIiwgImZvIiwgInBvIiwgIkxlIiwgIkZlIiwgImoiLCAic2UiLCAiUiIsICJ4ZSIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiZm9ybUNhbGxiYWNrc1JlZiIsICJjYiIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIlpvZEZpZWxkRXJyb3IiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJmaXhQcm90byIsICJ0YXJnZXQiLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgInAiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAiZXJyIiwgIlBSX0xPQURJTkciLCAiZXJyX18iLCAiT3B0aW9uYWxGbiIsICJab2RGb3JtQ2FsbGJhY2tzIiwgIl9Gb3JtQ2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrcyIsICJrZXkiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm9iaiIsICJpbnN0YW5jZSIsICJGb3JtQ2FsbGJhY2tzIiwgInVzZVBheW1lbnRSZXF1ZXN0cyIsICJvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0cyIsICJzZXRQYXltZW50UmVxdWVzdHMiLCAib3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQiLCAicGF5bWVudFJlcXVlc3RzMiIsICJGT1JNX1RBUkdFVCIsICJFbGVtZW50c0Zvcm0iLCAib3BGb3JtIiwgInNldE9wRm9ybSIsICJlbGVtZW50c0NvbnRleHRWYWx1ZSIsICJzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJsb2FkZWQiLCAic2V0TG9hZGVkIiwgInN0cmlwZUxpbmtDdHJsIiwgInNldFN0cmlwZUxpbmtDdHJsIiwgImZvcm1DYWxsYmFja3MiLCAidG90YWxBbW91bnRBdG9tcyIsICJjdXJyZW5jeSIsICJfYSIsICJmb3JtIiwgInZhbHVlIiwgImdldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInJlc3VsdCIsICJjaGlsZHJlblByb3BzIiwgIkVsZW1lbnRGcmFtZSIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJlbGVtZW50U3R5bGUiLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEVsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiXQp9Cg==
|
|
3058
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVJlZiwgdXNlTWVtbywgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0ICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBCIGZyb20gJ2NoYWxrJztcblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IG10ID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB5dCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSksIF90ID0geiQxLmFycmF5KHl0KSwgZ3QgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgYnQgPSB6JDEuYXJyYXkoZ3QpLCB2dCA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogXCJDb25uZWN0aW9uIGVycm9yOiBwbGVhc2UgZG91YmxlIGNoZWNrIGlmIHlvdSBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldCwgdGhlbiB0cnkgYWdhaW5cIlxufSwgYWUgPSAodCkgPT4ge1xuICBjb25zdCByID0gdC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIHZ0W3JdID8/IHQ7XG59LCB3dCA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBKU09OLnBhcnNlKHQpID09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgRXQgPSAodCkgPT4gdC5sZW5ndGggPT09IDEgPyBhZSh0WzBdLm1zZykgOiBgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7dC5tYXAoKGUpID0+IGDigKIgJHthZShlLm1zZyl9YCkuam9pbihgXG5gKX1gLCBTdCA9ICh0KSA9PiBgRW5jb3VudGVyZWQgdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBgLSAke2UucGF0aC5qb2luKFwiL1wiKX06ICR7ZS5tZXNzYWdlfWApLmpvaW4oYFxuYCl9YCwgTiA9ICh0KSA9PiB7XG4gIGlmICh0IGluc3RhbmNlb2YgRXJyb3IpXG4gICAgaWYgKHd0KHQubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IHIgPSBKU09OLnBhcnNlKHQubWVzc2FnZSk7XG4gICAgICByZXR1cm4gX3Quc2FmZVBhcnNlKHIpLnN1Y2Nlc3MgPyBFdChyKSA6IGJ0LnNhZmVQYXJzZShyKS5zdWNjZXNzID8gU3QocikgOiAoY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHt0Lm1lc3NhZ2V9YCksIHQubWVzc2FnZSk7XG4gICAgfSBlbHNlXG4gICAgICByZXR1cm4gYWUodC5tZXNzYWdlKTtcbiAgaWYgKHR5cGVvZiB0ID09IFwib2JqZWN0XCIpXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICByZXR1cm4gciArIFwiXCI7XG4gICAgfVxuICBlbHNlXG4gICAgcmV0dXJuIHQgKyBcIlwiO1xufSwgQ3QgPSAodCwgciwgZSkgPT4gKC4uLm4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gciguLi5uKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIGUoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke3R9KTpgLCBpKTtcbiAgICByZXR1cm47XG4gIH1cbn0sIFMgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSksIHYgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCksIFogPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG52YXIgbSA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkZJUlNUX05BTUUgPSBcImZpcnN0TmFtZVwiLCB0LkxBU1RfTkFNRSA9IFwibGFzdE5hbWVcIiwgdC5FTUFJTCA9IFwiZW1haWxcIiwgdC5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCB0LkNJVFkgPSBcImNpdHlcIiwgdC5TVEFURSA9IFwic3RhdGVcIiwgdC5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIHQuQUREUkVTUyA9IFwiYWRkcmVzc1wiLCB0LlBIT05FID0gXCJwaG9uZVwiLCB0LlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIHQpKShtIHx8IHt9KTtcbmNvbnN0IE5lID0geiQxLm5hdGl2ZUVudW0obSk7XG52YXIgVWUgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5DQVJEX05VTUJFUiA9IFwiY2FyZE51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkRXhwaXJ5XCIsIHQuQ0FSRF9DVkMgPSBcImNhcmRDdmNcIiwgdCkpKFVlIHx8IHt9KTtcbmNvbnN0ICRlID0geiQxLm5hdGl2ZUVudW0oVWUpLCBWZSA9IHokMS51bmlvbihbTmUsICRlXSk7XG52YXIgRiA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkNBUkQgPSBcImNhcmRcIiwgdC5DQVJEX05VTUJFUiA9IFwiY2FyZC1udW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZC1leHBpcnlcIiwgdC5DQVJEX0NWQyA9IFwiY2FyZC1jdmNcIiwgdCkpKEYgfHwge30pO1xuY29uc3Qga3QgPSB6JDEubmF0aXZlRW51bShGKSwgZWUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IFooeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IFooeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgUHQgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogdixcbiAgZXhwaXJ5OiB2LFxuICBjdmM6IHZcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogdixcbiAgY29sb3I6IHYsXG4gIGZvbnRGYW1pbHk6IHYsXG4gIGZvbnRTaXplOiB2LFxuICBmb250V2VpZ2h0OiB2LFxuICBtYXJnaW46IHYsXG4gIHBhZGRpbmc6IHYsXG4gIGxldHRlclNwYWNpbmc6IHYsXG4gIGxpbmVIZWlnaHQ6IHYsXG4gIGhpZGVJY29uOiB2XG59KTtcbmNvbnN0IFAgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKSwgSXQgPSBQLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBPdCA9IHokMS5vYmplY3QoeyB0eXBlOiBJdCB9KSwgUnQgPSBQLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKSwgQXQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogUnQsXG4gIGVsZW1lbnRUeXBlOiAkZSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgVHQgPSBQLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pLCBqdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBUdCxcbiAgbWVzc2FnZTogUyxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIE10ID0gUC5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCBMdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBNdCxcbiAgZWxlbWVudFR5cGU6IFZlLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgRHQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoUC5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogU1xufSksIEZ0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFAuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFMsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHYsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShlZSlcbn0pLCB4dCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChQLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgTnQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoUC5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSksIFYgPSB6JDEub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiBTLFxuICBsYXN0TmFtZTogUyxcbiAgZW1haWw6IFMsXG4gIHppcENvZGU6IFMsXG4gIGNvdW50cnk6IFMsXG4gIHByb21vdGlvbkNvZGU6IHZcbn0pLCBVdCA9IHokMS5vYmplY3Qoe1xuICBlbWFpbDogUyxcbiAgemlwQ29kZTogUyxcbiAgY291bnRyeTogUyxcbiAgcHJvbW90aW9uQ29kZTogdlxufSksICR0ID0gUC5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pLCBWdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiAkdCxcbiAgc2Vzc2lvbklkOiBTLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IGVlLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IHZcbn0pLmV4dGVuZChWLnNoYXBlKSwgcXQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoUC5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pLCB6dCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChQLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KSwgSHQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIE90LFxuICBBdCxcbiAganQsXG4gIEx0LFxuICBEdCxcbiAgRnQsXG4gIFZ0LFxuICBxdCxcbiAgenQsXG4gIHh0LFxuICBOdFxuXSksIFl0ID0geiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEh0LFxuICBub25jZTogUyxcbiAgZm9ybUlkOiBTLFxuICBlbGVtZW50SWQ6IFNcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IFNcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBaKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgQnQgPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoUHQpXG59KSwgSnQgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEt0ID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKCExKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheShKdClcbn0pLCBHdCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKCEwKSB9KSxcbiAgS3Rcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGVlLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBWLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBaKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGVlLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBWLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG52YXIgRCA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgdC5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIHQuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgdCkpKEQgfHwge30pO1xuY29uc3QgWnQgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBXdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKClcbn0pLCBRdCA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtlLCBuXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpID0gTmUucGFyc2UoZSk7XG4gICAgICBBcnJheS5pc0FycmF5KG4pID8gcltpXSA9IG4gOiBBcnJheS5pc0FycmF5KG4uX2Vycm9ycykgJiYgKHJbaV0gPSBuLl9lcnJvcnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSksIHI7XG59LCBYdCA9IHokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSksIGVyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSksIHRyID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufSwgdGUgPSBhc3luYyAodCkgPT4ge1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgZ2UoKSB8fCBhd2FpdCBvcig1MDApO1xuICBpZiAoIWdlKCkpXG4gICAgdGhyb3cgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKSwgbmV3IEVycm9yKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gIHJldHVybiBuZXcgU3RyaXBlKHQpO1xufSwgcnIgPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gYXdhaXQgdGUodCk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IGUuZWxlbWVudHMociksXG4gICAgc3RyaXBlOiBlXG4gIH07XG59LCBuciA9IGFzeW5jICh0LCByLCBlLCBuLCBpKSA9PiB7XG4gIGNvbnN0IHMgPSBhd2FpdCB0ZSh0KSwgYSA9IHRyW2UudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICByZXR1cm4gcy5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IGEsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IHIsXG4gICAgICBwZW5kaW5nOiBuXG4gICAgfSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiAhMCxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogITAsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdXG4gIH0pO1xufSwgb3IgPSAodCkgPT4gbmV3IFByb21pc2UoKHIpID0+IHtcbiAgc2V0VGltZW91dChyLCB0KTtcbn0pLCBnZSA9ICgpID0+IFwiU3RyaXBlXCIgaW4gd2luZG93LCBpciA9IGFzeW5jICh0KSA9PiBuZXcgUHJvbWlzZSgociwgZSkgPT4ge1xuICB0cnkge1xuICAgIHQub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICByKG4pO1xuICAgIH0pLCB0Lm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgIGUobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAobikge1xuICAgIGUobik7XG4gIH1cbn0pLCBzciA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGlmICghdC5zdHJpcGVfcGsgfHwgIXQuY2xpZW50X3NlY3JldClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xuICBjb25zdCBuID0gYXdhaXQgKGF3YWl0IHRlKHQuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cCh0LmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogci5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAobi5lcnJvcilcbiAgICB0aHJvdyByLmNvbXBsZXRlKFwiZmFpbFwiKSwgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtuLmVycm9yLm1lc3NhZ2UgPz8gXCJ1bmtub3duXCJ9YCk7XG4gIHJldHVybiByLmNvbXBsZXRlKFwic3VjY2Vzc1wiKSwgbjtcbn0sIGFyID0gYXN5bmMgKHQpID0+IHtcbiAgdmFyIGksIHMsIGEsIGM7XG4gIGNvbnN0IGUgPSBhd2FpdCAoYXdhaXQgdGUodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiB0LnN0cmlwZV9wbV9pZFxuICB9KSwgbiA9IChpID0gZS5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuc3RhdHVzO1xuICBpZiAobiA9PT0gXCJzdWNjZWVkZWRcIilcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIHQuc3RyaXBlX3BtX2lkKSwgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgZS5zZXR1cEludGVudCk7XG4gIGVsc2UgdGhyb3cgbiA9PT0gXCJjYW5jZWxlZFwiID8gbmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpIDogbmV3IEVycm9yKFxuICAgIGAkeygocyA9IGUuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBzLm1lc3NhZ2UpID8/ICgoYyA9IChhID0gZS5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGEubGFzdF9zZXR1cF9lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWVzc2FnZSkgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICApO1xufSwgY3IgPSAodCkgPT4gSlNPTi5zdHJpbmdpZnkodCksIGRlID0gKHQsIHIpID0+IEFycmF5LmZyb20odC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtb3BpZF1cIikgPz8gW10pLnJlZHVjZSgoaSwgcykgPT4ge1xuICBjb25zdCBhID0gcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gIHJldHVybiBhID8geyAuLi5pLCBbYV06IHMudmFsdWUgfSA6IGk7XG59LCB7fSksIHVyID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gWXQucGFyc2UodCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCB0LCByKSwgcjtcbiAgfVxufSwgbHIgPSBhc3luYyAodCkgPT4ge1xuICBpZiAodHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCAhdCkgcmV0dXJuICExO1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSB7IHR5cGU6IFwicGluZ1wiIH0sIGUgPSBhd2FpdCB0LnNlbmQocik7XG4gICAgaWYgKGUgIT09ICEwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAndHJ1ZScgYWZ0ZXIgcGluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgcmV0dXJuICEwO1xuICB9IGNhdGNoIChyKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIENERSBjb25uZWN0aW9uIGNoZWNrOlwiLCByKSwgITE7XG4gIH1cbn0sIGRyID0gKHQsIHIpID0+ICEhdCAmJiByLCBiID0gKHQpID0+IHokMS5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pO1xuY29uc3QgZnIgPSB6JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgcWUgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IGIoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IGIoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IGIoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBiKHokMS5udW1iZXIoKSlcbn0pLCB6ZSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogYih6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBiKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IGIoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIHByID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksIGhyID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IGIocHIpXG59KSwgcSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogYih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogYih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBtciA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KSwgeXIgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IGIoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogYih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBiKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KG1yKSxcbiAgdHJpYWxfc3RhcnQ6IGIoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBiKHokMS5zdHJpbmcoKSlcbn0pLCBIZSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KSwgX3IgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShIZSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBnciA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IHFlXG59KSwgYnIgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoZ3IpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IGIoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShfciksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSGUpXG59KSwgYmUgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KHlyKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShicilcbn0pLCBZZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBiZSxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBiKGJlKSxcbiAgY291cG9uczogeiQxLmFycmF5KHFlKVxufSksIHZlID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogYih6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoemUpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogaHIsXG4gIHN1YnNfcHJldmlldzogYihZZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KHEpXG59KSwgQmUgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZCh2ZS5zaGFwZSksXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6JDEuc3RyaW5nKClcbiAgfSkuZXh0ZW5kKHZlLnNoYXBlKVxuXSksIHZyID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSksIHdyID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbQmUsIHZyLCB3cl0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEplID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheSh6ZSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBxLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgU3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFNyKTtcbnokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogcSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgS2UgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFV0LFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHFcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogVixcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHEsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xuY29uc3QgQ3IgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbmNvbnN0IGtyID0gKHQpID0+IHQucmVkdWNlKChyLCBlKSA9PiByICsgZSwgMCk7XG5mdW5jdGlvbiBQcih0LCByKSB7XG4gIHZhciBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBlID8gZSh0LCByKSA6IHQuX19wcm90b19fID0gcjtcbn1cbmZ1bmN0aW9uIElyKHQsIHIpIHtcbiAgciA9PT0gdm9pZCAwICYmIChyID0gdC5jb25zdHJ1Y3Rvcik7XG4gIHZhciBlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGUgJiYgZSh0LCByKTtcbn1cbnZhciBPciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBpLl9fcHJvdG9fXyA9IHM7XG4gICAgfSB8fCBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBmb3IgKHZhciBhIGluIHMpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBhKSAmJiAoaVthXSA9IHNbYV0pO1xuICAgIH0sIHQoZSwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbihyLCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhlKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgdChyLCBlKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHI7XG4gICAgfVxuICAgIHIucHJvdG90eXBlID0gZSA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoZSkgOiAobi5wcm90b3R5cGUgPSBlLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIFJyID0gZnVuY3Rpb24odCkge1xuICBPcihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmNvbnN0cnVjdG9yLCBzID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGkubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBQcihzLCBpLnByb3RvdHlwZSksIElyKHMpLCBzO1xuICB9XG4gIHJldHVybiByO1xufShFcnJvcik7XG5jbGFzcyBHZSBleHRlbmRzIFJyIHtcbiAgY29uc3RydWN0b3Iocikge1xuICAgIGNvbnN0IGUgPSBgJHtyLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihlKSwgdGhpcy5yZXNwb25zZSA9IHI7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IEkgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgdC5zZW5kKHIpO1xuICBpZiAoVHIobikpXG4gICAgdGhyb3cgbmV3IEdlKG4pO1xuICBpZiAoIUFyKG4sIGUpKSB7XG4gICAgY29uc3QgaSA9IGUuc2FmZVBhcnNlKG4pO1xuICAgIHRocm93IGkuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgZSwgXCJBY3R1YWw6XCIsIG4pLCBpLmVycm9yKTtcbiAgfVxuICByZXR1cm4gbjtcbn0sIEFyID0gKHQsIHIpID0+IHIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIFRyID0gKHQpID0+IGZyLnNhZmVQYXJzZSh0KS5zdWNjZXNzLCBqciA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByIH0sIFllKSwgeiA9IGFzeW5jICh0KSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBCZSksIE1yID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IEkodCwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIEtlKSwgTHIgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiByIH0sIENyKSwgRHIgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiByIH0sIEtlKSwgZmUgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogciB9LCBCdCksIEZyID0gYXN5bmMgKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgbiA9IGF3YWl0IGpyKHQsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIsXG4gICAgcHJvbW90aW9uX2NvZGU6IGVcbiAgfSksIGkgPSBuZXcgU2V0KG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMuY3VycmVuY3kpKTtcbiAgaWYgKGkuc2l6ZSAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtpLnNpemV9YCk7XG4gIGNvbnN0IHMgPSBpLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiLCBhID0ga3Iobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeTogcyxcbiAgICBhbW91bnRBdG9tOiBhXG4gIH07XG59LCBaZSA9IGFzeW5jICh0LCByLCBlLCBuKSA9PiB7XG4gIGlmIChlKVxuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIHtcbiAgICBuID0gbiB8fCB2b2lkIDA7XG4gICAgY29uc3QgaSA9IGF3YWl0IEZyKHQsIHIsIG4pO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGkuYW1vdW50QXRvbSwgY3VycmVuY3k6IGkuY3VycmVuY3kgfTtcbiAgfVxufSwgeHIgPSBhc3luYyAodCwgcikgPT4ge1xuICBpZiAodC5zaXplID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20odC52YWx1ZXMoKSkubWFwKFxuICAgICAgKG4pID0+IEkobiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZDogciB9LCBHdClcbiAgICApXG4gICk7XG59LCB3ZSA9IGFzeW5jICh0LCByKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IEkodCwgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZDogciB9LCBKZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBjaGVja291dENhcmRFbGVtZW50czpcIiwgZSwgSlNPTi5zdHJpbmdpZnkoZSkpLCBlO1xuICB9XG59LCBOciA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiByIH0sIEVyKSwgV2UgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZDogciB9LCBKZSksIFFlID0gMWUzLCBVciA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnNvbGUubG9nKHIpO1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogdCxcbiAgICBkZWJ1ZzogITAsXG4gICAgdGltZW91dDogUWUsXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pLnByb21pc2UsIGkgPSBhd2FpdCBJKG4sIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBadCk7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIGkpLCBpO1xufTtcbmZ1bmN0aW9uIFhlKHQpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt0fWApO1xufVxuY29uc3QgcGUgPSAodCkgPT4gYXN5bmMgKHIpID0+IHtcbiAgdmFyIGUsIG47XG4gIHRyeSB7XG4gICAgKG4gPSAoZSA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IG4uY2FsbChlKTtcbiAgICBjb25zdCBpID0gYXdhaXQgdChyKTtcbiAgICBpZiAoaS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhpLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAoaS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBpLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIGkucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIGkucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7aX1gKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKE4oaSkpO1xuICB9XG59LCBldCA9ICh0KSA9PiBhc3luYyAocikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0KHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gTyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICByZXR1cm4gbihlKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogTihlKSB9O1xuICB9XG59LCBPID0gKHQpID0+IHtcbiAgY29uc3QgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke0IuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtCLmJvbGQuZ3JheShgJHt0fWApfVx0YCwgLi4ubik7XG4gIH0sIGUgPSAoLi4ubikgPT4ge1xuICAgIHdpbmRvdy5jb25zb2xlLmVycm9yKGAke0IucmVkLmJvbGQoXCJvanMvXCIpfSR7Qi5ib2xkLmdyYXkoYCR7dH1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogcixcbiAgICBlcnI6IGUsXG4gICAgbG9nX186IHIsXG4gICAgZXJyX186IGVcbiAgfTtcbn0sIHsgbG9nX186IFBvLCBlcnJfXzogJHIgfSA9IE8oXCJjb21tb25cIiksIGhlID0gKHQpID0+IHtcbiAgaWYgKHQucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHt0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiB0LnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgdHQgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gdC5maW5kKChuKSA9PiByLnNhZmVQYXJzZShuKS5zdWNjZXNzKTtcbiAgaWYgKCFlKVxuICAgIHRocm93ICRyKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIHQpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIHIucGFyc2UoZSk7XG59LCB7IGxvZ19fOiBWciwgZXJyX186IHJ0IH0gPSBPKFwiY29tbW9uLWNjXCIpLCBtZSA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBWLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFlLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBuID0gZS5lcnJvci5mb3JtYXQoKSwgaSA9IFF0KG4pO1xuICAgIGZvciAoY29uc3QgW3MsIGFdIG9mIE9iamVjdC5lbnRyaWVzKGkpKVxuICAgICAgcihzLCBhLCBzKTtcbiAgICB0aHJvdyBydChcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGkpLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gZS5kYXRhO1xufSwgcXIgPSAodCwgcikgPT4ge1xuICBmb3IgKGNvbnN0IGUgb2YgdClcbiAgICBpZiAoZS5zdWNjZXNzID09PSAhMSlcbiAgICAgIHRocm93IGUuZXJyb3JzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgY29uc3QgaSA9IFZlLnNhZmVQYXJzZShuLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFpLnN1Y2Nlc3MpXG4gICAgICAgICAgcnQoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtuLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIG4pO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzID0gaS5kYXRhO1xuICAgICAgICAgIHIocywgbi5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KSwgVnIoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KGUuZXJyb3JzKX1gKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbn0sIEVlID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCIsIHsgbG9nX186IHcsIGVycl9fOiB6ciB9ID0gTyhcInN0cmlwZS1saW5rXCIpLCBIciA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBZciA9IHokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpLCBCciA9IGV0KFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pID0+IHtcbiAgICBjb25zdCBlID0gdC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgdyhcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIExpbmsuLi5cIik7XG4gICAgY29uc3QgbiA9IHR0KHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgSHIpO1xuICAgIHcoXCJTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCB6KGkpLCBhID0gcy5tb2RlID09PSBcInNldHVwXCI7XG4gICAgdyhcIkNyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLlwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgWmUoaSwgcy50b2tlbiwgYSwgdm9pZCAwKSwgeyBlbGVtZW50czogbCwgc3RyaXBlOiB1IH0gPSBhd2FpdCBycihuLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgY3VycmVuY3k6IGMuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIHcoXCJDcmVhdGluZyBleHByZXNzIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IGQgPSBsLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pLCBoID0gKCkgPT4ge1xuICAgICAgZC5tb3VudChgIyR7RWV9YCk7XG4gICAgfSwgXyA9ICgpID0+IHtcbiAgICAgIGQudW5tb3VudCgpO1xuICAgIH07XG4gICAgcmV0dXJuIGUgIT0gbnVsbCAmJiBlLmRvTm90TW91bnRPbkluaXQgPyB3KFwiTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKVwiKSA6ICh3KFwiTW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uLi4uXCIpLCBoKCkpLCBkLm9uKFwiY2xpY2tcIiwgYXN5bmMgKGYpID0+IHtcbiAgICAgIGlmICh3KFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIiksIGUgIT0gbnVsbCAmJiBlLm92ZXJyaWRlTGlua1N1Ym1pdCAmJiAhYXdhaXQgZS5vdmVycmlkZUxpbmtTdWJtaXQoKSkge1xuICAgICAgICB3KFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmLnJlc29sdmUoKTtcbiAgICB9KSwgZC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKGYpID0+IHtcbiAgICAgIHcoXCJTdHJpcGUgTGluayB3aW5kb3cgY29uZmlybWVkXCIsIGYpO1xuICAgICAgY29uc3QgcCA9IGF3YWl0IHUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzOiBsLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IGYuYmlsbGluZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBwLmVycm9yID8gKHpyKFwiZXJyb3JcIiwgcC5lcnJvciksIHIuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihwLmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpKSA6ICh3KFwicGF5bWVudE1ldGhvZFwiLCBwLnBheW1lbnRNZXRob2QpLCBVLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBkZSh0LmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IHAucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiAhMCB9XG4gICAgICB9KSk7XG4gICAgfSksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b246IGgsXG4gICAgICAgIGRpc21vdW50QnV0dG9uOiBfLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgR3IoRWUpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgSnIgPSBwZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBpXG4gIH0pID0+IHtcbiAgICB3KFwiUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgdyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgYSA9IEtyKGUsIGkuc3RyaXBlUE0pLCBjID0gbWUoYSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHcoXCJTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IE1yKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBpLnN0cmlwZVBNLmlkXG4gICAgfSk7XG4gICAgdyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBsKTtcbiAgICBjb25zdCBkID0gWXIucGFyc2UobC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZCwgaCA9IGF3YWl0IHoocyk7XG4gICAgaWYgKGgubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICB3KFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IF8gPSBhd2FpdCBmZShzLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogaC50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGhlKF8pIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHcoXCJEb2luZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IF8gPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogaC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHIucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGNbbS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBjW20uWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBjW20uQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBjW20uUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBoLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBoLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHJcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgV2UocywgXykgfTtcbiAgICB9XG4gIH1cbiksIEtyID0gKHQsIHIpID0+IHtcbiAgdmFyIGEsIGMsIGwsIHUsIGQ7XG4gIGNvbnN0IGUgPSB7IC4uLnQgfSwgW24sIC4uLmldID0gKChjID0gKGEgPSByLmJpbGxpbmdfZGV0YWlscy5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogYS50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBzID0gaS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHJldHVybiBlW20uRklSU1RfTkFNRV0gPSBlW20uRklSU1RfTkFNRV0gfHwgbiB8fCBcIl9PUF9VTktOT1dOXCIsIGVbbS5MQVNUX05BTUVdID0gZVttLkxBU1RfTkFNRV0gfHwgcyB8fCBcIl9PUF9VTktOT1dOXCIsIGVbbS5FTUFJTF0gPSBlW20uRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICgobCA9IHIubGluaykgPT0gbnVsbCA/IHZvaWQgMCA6IGwuZW1haWwpIHx8IHIuYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVttLlpJUF9DT0RFXSA9IGVbbS5aSVBfQ09ERV0gfHwgKCh1ID0gci5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IHUucG9zdGFsX2NvZGUpIHx8IFwiMDAwMDBcIiwgZVttLkNPVU5UUlldID0gZVttLkNPVU5UUlldIHx8ICgoZCA9IHIuYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiBkLmNvdW50cnkpIHx8IFwiVVNcIiwgdyhcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCBlKSwgZTtcbn0sIEdyID0gKHQpID0+IG5ldyBQcm9taXNlKChyKSA9PiB7XG4gIGNvbnN0IGUgPSAoKSA9PiB7XG4gICAgY29uc3QgbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpO1xuICAgIG4gPyByKG4pIDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpO1xuICB9O1xuICBlKCk7XG59KSwgWnIgPSBcIkBrZXlmcmFtZXMgZmFkZUluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjkpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fS5vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MjE0NzQ4MzY0OCFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IzAwMDAwMDgwfS5jb250YWluZXJ7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246cmVsYXRpdmU7YW5pbWF0aW9uOmZhZGVJbiAuM3MgZWFzZS1vdXR9LmZyYW1le21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOm5vbmV9LmNhbmNlbC1idXR0b257cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtmb250LXNpemU6MXJlbTtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyO3RvcDotMS41cmVtO3BhZGRpbmc6MDtyaWdodDowfVwiLCBXciA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gIHIuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7WnJ9XG4gICAgPC9zdHlsZT5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8aWZyYW1lIHNyYz1cIiR7dH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCJ0aHJlZS1kcy1pZnJhbWVcIiB0aXRsZT1cIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIiBhbGxvdz1cInBheW1lbnRcIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgbiA9IGUuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gIG4uYXBwZW5kQ2hpbGQoci5jb250ZW50LmNsb25lTm9kZSghMCkpO1xuICBjb25zdCBpID0gbi5xdWVyeVNlbGVjdG9yKFwiI3RocmVlLWRzLWlmcmFtZVwiKSwgcyA9IG4ucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICByZXR1cm4gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKSwgeyBob3N0OiBlLCBpZnJhbWU6IGksIGNhbmNlbEJ1dHRvbjogcyB9O1xufTtcbmZ1bmN0aW9uIFFyKHQsIHIsIGUpIHtcbiAgY29uc3QgbiA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcyA9IGF3YWl0IFVyKHQsIGUpO1xuICAgICAgcyAmJiAoY2xlYXJJbnRlcnZhbChpKSwgcihzKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgfVxuICB9O1xuICBuKCk7XG4gIGNvbnN0IGkgPSBzZXRJbnRlcnZhbChuLCBRZSk7XG4gIHJldHVybiBpO1xufVxuZnVuY3Rpb24gWHIoe1xuICBlbGVtZW50czogdCxcbiAgcG9sbGluZ0ludGVydmFsOiByLFxuICByZXNvbHZlOiBlXG59KSB7XG4gIGNvbnN0IG4gPSAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbChyKSwgdC5ob3N0LnJlbW92ZSgpLCBlKHsgc3RhdHVzOiBELkNBTkNFTExFRCB9KTtcbiAgfTtcbiAgcmV0dXJuIHQuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBuKSwgKCkgPT4ge1xuICAgIHQuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBuKTtcbiAgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG50KHQpIHtcbiAgY29uc3QgeyB1cmw6IHIsIGJhc2VVcmw6IGUgfSA9IHQsIG4gPSBXcihyKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChpKSA9PiB7XG4gICAgY29uc3QgcyA9IChsKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbi5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKSwgaShsKSwgYyA9PSBudWxsIHx8IGMoKTtcbiAgICB9LCBhID0gUXIobi5pZnJhbWUsIHMsIG5ldyBVUkwoZSkub3JpZ2luKSwgYyA9IFhyKHtcbiAgICAgIGVsZW1lbnRzOiBuLFxuICAgICAgcG9sbGluZ0ludGVydmFsOiBhLFxuICAgICAgcmVzb2x2ZTogaVxuICAgIH0pO1xuICB9KTtcbn1cbmNvbnN0IGVuID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgciA9IGF3YWl0IG50KHQpO1xuICBpZiAoci5zdGF0dXMgPT09IEQuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAoci5zdGF0dXMgPT09IEQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgcmV0dXJuIHIuc3RhdHVzICE9PSBELlNVQ0NFU1MgJiYgWGUoci5zdGF0dXMpLCB7XG4gICAgaHJlZjogci5ocmVmXG4gIH07XG59LCB7IGxvZ19fOiB0biwgZXJyX186IG90IH0gPSBPKFwicG9ja3l0LWNjXCIpLCBybiA9IHokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSksIG5uID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHJuLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFyLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBlID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBuID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KHQpfWA7XG4gICAgdGhyb3cgb3QobiksIG5ldyBFcnJvcihlKTtcbiAgfVxuICByZXR1cm4gci5kYXRhO1xufSwgb24gPSAodCkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSBuZXcgVVJMKHQgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCFyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIHRuKGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHtyfV1gKSwgcjtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IGUgPSBcIkVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyBvdChlLCBgUmVzdWx0aW5nIFVSTDogJHt0fS5cbkVycm9yOiAke04ocil9YCksIG5ldyBFcnJvcihlKTtcbiAgfVxufSwgc24gPSAodCkgPT4gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbXCJvcC1wb2NreXQtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgYW4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gbm4ociksIG4gPSBhd2FpdCBlbih7IHVybDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsOiB0IH0pO1xuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogb24obi5ocmVmID8/IFwiXCIpLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IGVbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiBlW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbn0sIHsgbG9nX186IGcsIGVycl9fOiBTZSB9ID0gTyhcImNvbW1vbi1jY1wiKSwgeyBsb2dfXzogQ2UgfSA9IE8oXCJzdHJpcGUtY2NcIik7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGNuID0gcGUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIHU7XG4gICAgZyhcIuKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByIH0pO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCB6KHMpO1xuICAgIGcoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7YS5tb2RlfV1gKTtcbiAgICBjb25zdCBjID0gbWUoZSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBsID0ge1xuICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogYyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7fVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGcoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICBjb25zdCBkID0gYXdhaXQgeHIoaS5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICBpZiAocXIoZCwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBnKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke2EudG9rZW59XWApO1xuICAgICAgICBjb25zdCBoID0gYXdhaXQgTnIocywgbCk7XG4gICAgICAgIHJldHVybiBnKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7aC5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGcoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCBoID0gYXdhaXQgd2UocywgbCk7XG4gICAgICAgIHJldHVybiBnKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBoIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgaWYgKGQgaW5zdGFuY2VvZiBHZSAmJiBkLm9yaWdpbmFsRXJyb3JNZXNzYWdlLmluY2x1ZGVzKFwiM0RTX1JFUVVJUkVEXCIpKSB7XG4gICAgICAgIGcoXCLilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93XCIpLCBnKFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGNvbnN0IGggPSBzbihkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBpZiAoaCkge1xuICAgICAgICAgIGcoXCLilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgeSA9IGF3YWl0IGFuKHQuYmFzZVVybCwgZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBsLmV4dHJhX21ldGFkYXRhLnBvY2t5dCA9IHk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgXyA9IGF3YWl0IExyKHMsIGwpO1xuICAgICAgICBnKFwi4pScIFBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIF8pO1xuICAgICAgICBjb25zdCBmID0gKCh1ID0gZC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogdVtcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pICE9PSBcInRydWVcIjtcbiAgICAgICAgaCA/IGcoXCLilJwgUG9ja3l0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLlwiKSA6IGYgPyAoZyhcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IGZuKF8pKSA6IChnKFwi4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd1wiKSwgYXdhaXQgZG4oXywgdC5iYXNlVXJsKSk7XG4gICAgICAgIGNvbnN0IHAgPSBfLmNjX3BtX2lkO1xuICAgICAgICBpZiAoYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICBnKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke3B9XWApO1xuICAgICAgICAgIGNvbnN0IHkgPSBhd2FpdCBmZShzLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IGEudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogcFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGcoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgeSk7XG4gICAgICAgICAgY29uc3QgaiA9IGhlKHkpO1xuICAgICAgICAgIHJldHVybiBnKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7ai5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGogfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBnKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke2YgPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgeSA9IGF3YWl0IHdlKHMsIHtcbiAgICAgICAgICAgIC4uLmwsXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogcCxcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IGZcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gZyhcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogeSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBTZShcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgU2UoZCksIGQ7XG4gICAgfVxuICB9XG4pLCB1biA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChlKSA9PiBlLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gWHQucGFyc2Uocik7XG59LCBsbiA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChlKSA9PiBlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gV3QucGFyc2Uocik7XG59LCBkbiA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBsbih0KTtcbiAgZyhg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke2UucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IG50KHsgdXJsOiBlLnJlZGlyZWN0X3VybCwgYmFzZVVybDogciB9KTtcbiAgaWYgKGcoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBELkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4gPT09IEQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbn0sIGZuID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgciA9IHVuKHQpO1xuICBDZShg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtyLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgYXIociksIENlKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgeyBsb2dfXzogQywgZXJyX186IHBuIH0gPSBPKFwic3RyaXBlLXByXCIpLCBobiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgbW4gPSBldChcbiAgYXN5bmMgKHsgY29udGV4dDogdCB9KSA9PiB7XG4gICAgQyhcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uXCIpO1xuICAgIGNvbnN0IHIgPSB0dCh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGhuKTtcbiAgICBDKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGUgPSB0LmFueUNkZUNvbm5lY3Rpb24sIG4gPSBhd2FpdCB6KGUpLCBpID0gbi5tb2RlID09PSBcInNldHVwXCI7XG4gICAgQyhcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQgWmUoZSwgbi50b2tlbiwgaSwgdm9pZCAwKSwgYSA9IGF3YWl0IG5yKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgaVxuICAgICk7XG4gICAgQyhcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IGEuY2FuTWFrZVBheW1lbnQoKTtcbiAgICByZXR1cm4gYyA9PT0gbnVsbCA/IChwbihcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH0pIDogKEMoXCJTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRcIiwgYyksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBhLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBjLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGMuZ29vZ2xlUGF5XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiksIHluID0gcGUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaSxcbiAgICBpbml0UmVzdWx0OiBzXG4gIH0pID0+IHtcbiAgICBpZiAoQyhcIlJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5cIiksIGkucHJvdmlkZXIgIT09IHIucHJvdmlkZXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2kucHJvdmlkZXJ9LCBnb3QgJHtyLnByb3ZpZGVyfWApO1xuICAgIGNvbnN0IGEgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBzLnByO1xuICAgIGlmIChpICE9IG51bGwgJiYgaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBwID0gaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgQyhcIk92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhcIiwgcCksIGduKGMsIHAuYW1vdW50LCBwLnBlbmRpbmcpO1xuICAgIH1cbiAgICBDKFwiU2hvd2luZyBQUiBkaWFsb2cuLi5cIiksIGMuc2hvdygpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBpcihjKTtcbiAgICBDKFwiU3RyaXBlIFBNIGFkZGVkIGV2ZW50OlwiLCBsKSwgQyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgdSA9IF9uKGUsIGwpLCBkID0gbWUodSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIEMoXCJQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBoID0gYXdhaXQgRHIoYSwge1xuICAgICAgZmllbGRzOiBkLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByXG4gICAgfSksIF8gPSBibihoKTtcbiAgICBDKFwiQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLlwiKSwgYXdhaXQgc3IoXywgbCk7XG4gICAgY29uc3QgZiA9IGF3YWl0IHooYSk7XG4gICAgaWYgKGYubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBDKFwiQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgcCA9IGF3YWl0IGZlKGEsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBoZShwKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBDKFwiUGVyZm9ybWluZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IHAgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZi50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHIucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGRbbS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBkW20uWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBkW20uQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBkW20uUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBmLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBmLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHJcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgV2UoYSwgcCkgfTtcbiAgICB9XG4gIH1cbiksIF9uID0gKHQsIHIpID0+IHtcbiAgdmFyIGEsIGMsIGwsIHU7XG4gIGNvbnN0IGUgPSB7IC4uLnQgfSwgW24sIC4uLmldID0gKChjID0gKGEgPSByLnBheWVyTmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogYy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgcyA9IGkuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICByZXR1cm4gZVttLkZJUlNUX05BTUVdID0gZVttLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJfT1BfVU5LTk9XTlwiLCBlW20uTEFTVF9OQU1FXSA9IGVbbS5MQVNUX05BTUVdIHx8IHMgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW20uRU1BSUxdID0gZVttLkVNQUlMXSB8fCByLnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW20uWklQX0NPREVdID0gZVttLlpJUF9DT0RFXSB8fCAoKGwgPSByLnNoaXBwaW5nQWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IGwucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCBlW20uQ09VTlRSWV0gPSBlW20uQ09VTlRSWV0gfHwgKCh1ID0gci5zaGlwcGluZ0FkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiB1LmNvdW50cnkpIHx8IFwiVVNcIiwgQyhcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCBlKSwgZTtcbn0sIGduID0gKHQsIHIsIGUpID0+IHtcbiAgdC51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IHIuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiBlXG4gICAgfSxcbiAgICBjdXJyZW5jeTogci5jdXJyZW5jeVxuICB9KTtcbn0sIGJuID0gKHQpID0+IHtcbiAgaWYgKHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7dC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgcmV0dXJuIGVyLnBhcnNlKHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn0sIGl0ID0gKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgbiA9IHQuZmlsdGVyKChpKSA9PiBpLnByb3ZpZGVyID09PSByKTtcbiAgaWYgKG4ubGVuZ3RoID09PSAwKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgdCksIG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3J9JyBhbmQgcHJvY2Vzc29yICcke2V9J2ApO1xuICBpZiAobi5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCB0KSwgbmV3IEVycm9yKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3J9JyBhbmQgcHJvY2Vzc29yICcke2V9J2ApO1xuICByZXR1cm4gblswXTtcbn0sIFUgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogY25cbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogbW4sXG4gICAgcnVuOiB5blxuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogQnIsXG4gICAgcnVuOiBKclxuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufTtcbnZhciBjZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgcmV0dXJuIGNlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24oZSwgbikge1xuICAgIGUuX19wcm90b19fID0gbjtcbiAgfSB8fCBmdW5jdGlvbihlLCBuKSB7XG4gICAgZm9yICh2YXIgaSBpbiBuKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwgaSkgJiYgKGVbaV0gPSBuW2ldKTtcbiAgfSwgY2UodCwgcik7XG59O1xuZnVuY3Rpb24gTCh0LCByKSB7XG4gIGlmICh0eXBlb2YgciAhPSBcImZ1bmN0aW9uXCIgJiYgciAhPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhyKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGNlKHQsIHIpO1xuICBmdW5jdGlvbiBlKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSB0O1xuICB9XG4gIHQucHJvdG90eXBlID0gciA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUocikgOiAoZS5wcm90b3R5cGUgPSByLnByb3RvdHlwZSwgbmV3IGUoKSk7XG59XG5mdW5jdGlvbiB2bih0LCByLCBlLCBuKSB7XG4gIGZ1bmN0aW9uIGkocykge1xuICAgIHJldHVybiBzIGluc3RhbmNlb2YgZSA/IHMgOiBuZXcgZShmdW5jdGlvbihhKSB7XG4gICAgICBhKHMpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKGUgfHwgKGUgPSBQcm9taXNlKSkoZnVuY3Rpb24ocywgYSkge1xuICAgIGZ1bmN0aW9uIGMoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLm5leHQoZCkpO1xuICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICBhKGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi50aHJvdyhkKSk7XG4gICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgIGEoaCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHUoZCkge1xuICAgICAgZC5kb25lID8gcyhkLnZhbHVlKSA6IGkoZC52YWx1ZSkudGhlbihjLCBsKTtcbiAgICB9XG4gICAgdSgobiA9IG4uYXBwbHkodCwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHN0KHQsIHIpIHtcbiAgdmFyIGUgPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAoc1swXSAmIDEpIHRocm93IHNbMV07XG4gICAgcmV0dXJuIHNbMV07XG4gIH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIG4sIGksIHMsIGEgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBhLm5leHQgPSBjKDApLCBhLnRocm93ID0gYygxKSwgYS5yZXR1cm4gPSBjKDIpLCB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiAoYVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBhO1xuICBmdW5jdGlvbiBjKHUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZCkge1xuICAgICAgcmV0dXJuIGwoW3UsIGRdKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGwodSkge1xuICAgIGlmIChuKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICBmb3IgKDsgYSAmJiAoYSA9IDAsIHVbMF0gJiYgKGUgPSAwKSksIGU7ICkgdHJ5IHtcbiAgICAgIGlmIChuID0gMSwgaSAmJiAocyA9IHVbMF0gJiAyID8gaS5yZXR1cm4gOiB1WzBdID8gaS50aHJvdyB8fCAoKHMgPSBpLnJldHVybikgJiYgcy5jYWxsKGkpLCAwKSA6IGkubmV4dCkgJiYgIShzID0gcy5jYWxsKGksIHVbMV0pKS5kb25lKSByZXR1cm4gcztcbiAgICAgIHN3aXRjaCAoaSA9IDAsIHMgJiYgKHUgPSBbdVswXSAmIDIsIHMudmFsdWVdKSwgdVswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzID0gdTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBlLmxhYmVsKyssIHsgdmFsdWU6IHVbMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBlLmxhYmVsKyssIGkgPSB1WzFdLCB1ID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdSA9IGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKHMgPSBlLnRyeXMsICEocyA9IHMubGVuZ3RoID4gMCAmJiBzW3MubGVuZ3RoIC0gMV0pICYmICh1WzBdID09PSA2IHx8IHVbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICBlID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gMyAmJiAoIXMgfHwgdVsxXSA+IHNbMF0gJiYgdVsxXSA8IHNbM10pKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gdVsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gNiAmJiBlLmxhYmVsIDwgc1sxXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHNbMV0sIHMgPSB1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzICYmIGUubGFiZWwgPCBzWzJdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gc1syXSwgZS5vcHMucHVzaCh1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzWzJdICYmIGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB1ID0gci5jYWxsKHQsIGUpO1xuICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgIHUgPSBbNiwgZF0sIGkgPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBuID0gcyA9IDA7XG4gICAgfVxuICAgIGlmICh1WzBdICYgNSkgdGhyb3cgdVsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogdVswXSA/IHVbMV0gOiB2b2lkIDAsIGRvbmU6ICEwIH07XG4gIH1cbn1cbmZ1bmN0aW9uICQodCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgZSA9IHIgJiYgdFtyXSwgbiA9IDA7XG4gIGlmIChlKSByZXR1cm4gZS5jYWxsKHQpO1xuICBpZiAodCAmJiB0eXBlb2YgdC5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0ICYmIG4gPj0gdC5sZW5ndGggJiYgKHQgPSB2b2lkIDApLCB7IHZhbHVlOiB0ICYmIHRbbisrXSwgZG9uZTogIXQgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IociA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIFcodCwgcikge1xuICB2YXIgZSA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIHRbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFlKSByZXR1cm4gdDtcbiAgdmFyIG4gPSBlLmNhbGwodCksIGksIHMgPSBbXSwgYTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHIgPT09IHZvaWQgMCB8fCByLS0gPiAwKSAmJiAhKGkgPSBuLm5leHQoKSkuZG9uZTsgKSBzLnB1c2goaS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBhID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpICYmICFpLmRvbmUgJiYgKGUgPSBuLnJldHVybikgJiYgZS5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBRKHQsIHIsIGUpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBpID0gci5sZW5ndGgsIHM7IG4gPCBpOyBuKyspXG4gICAgKHMgfHwgIShuIGluIHIpKSAmJiAocyB8fCAocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIsIDAsIG4pKSwgc1tuXSA9IHJbbl0pO1xuICByZXR1cm4gdC5jb25jYXQocyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyKSk7XG59XG5mdW5jdGlvbiB4KHQpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB4ID8gKHRoaXMudiA9IHQsIHRoaXMpIDogbmV3IHgodCk7XG59XG5mdW5jdGlvbiB3bih0LCByLCBlKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBuID0gZS5hcHBseSh0LCByIHx8IFtdKSwgaSwgcyA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIGMoXCJuZXh0XCIpLCBjKFwidGhyb3dcIiksIGMoXCJyZXR1cm5cIiwgYSksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGk7XG4gIGZ1bmN0aW9uIGEoZikge1xuICAgIHJldHVybiBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHApLnRoZW4oZiwgaCk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBjKGYsIHApIHtcbiAgICBuW2ZdICYmIChpW2ZdID0gZnVuY3Rpb24oeSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGosIFkpIHtcbiAgICAgICAgcy5wdXNoKFtmLCB5LCBqLCBZXSkgPiAxIHx8IGwoZiwgeSk7XG4gICAgICB9KTtcbiAgICB9LCBwICYmIChpW2ZdID0gcChpW2ZdKSkpO1xuICB9XG4gIGZ1bmN0aW9uIGwoZiwgcCkge1xuICAgIHRyeSB7XG4gICAgICB1KG5bZl0ocCkpO1xuICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgIF8oc1swXVszXSwgeSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHUoZikge1xuICAgIGYudmFsdWUgaW5zdGFuY2VvZiB4ID8gUHJvbWlzZS5yZXNvbHZlKGYudmFsdWUudikudGhlbihkLCBoKSA6IF8oc1swXVsyXSwgZik7XG4gIH1cbiAgZnVuY3Rpb24gZChmKSB7XG4gICAgbChcIm5leHRcIiwgZik7XG4gIH1cbiAgZnVuY3Rpb24gaChmKSB7XG4gICAgbChcInRocm93XCIsIGYpO1xuICB9XG4gIGZ1bmN0aW9uIF8oZiwgcCkge1xuICAgIGYocCksIHMuc2hpZnQoKSwgcy5sZW5ndGggJiYgbChzWzBdWzBdLCBzWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gRW4odCkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgciA9IHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBlO1xuICByZXR1cm4gciA/IHIuY2FsbCh0KSA6ICh0ID0gdHlwZW9mICQgPT0gXCJmdW5jdGlvblwiID8gJCh0KSA6IHRbU3ltYm9sLml0ZXJhdG9yXSgpLCBlID0ge30sIG4oXCJuZXh0XCIpLCBuKFwidGhyb3dcIiksIG4oXCJyZXR1cm5cIiksIGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUpO1xuICBmdW5jdGlvbiBuKHMpIHtcbiAgICBlW3NdID0gdFtzXSAmJiBmdW5jdGlvbihhKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYywgbCkge1xuICAgICAgICBhID0gdFtzXShhKSwgaShjLCBsLCBhLmRvbmUsIGEudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBpKHMsIGEsIGMsIGwpIHtcbiAgICBQcm9taXNlLnJlc29sdmUobCkudGhlbihmdW5jdGlvbih1KSB7XG4gICAgICBzKHsgdmFsdWU6IHUsIGRvbmU6IGMgfSk7XG4gICAgfSwgYSk7XG4gIH1cbn1cbmZ1bmN0aW9uIEUodCkge1xuICByZXR1cm4gdHlwZW9mIHQgPT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gcmUodCkge1xuICB2YXIgciA9IGZ1bmN0aW9uKG4pIHtcbiAgICBFcnJvci5jYWxsKG4pLCBuLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gIH0sIGUgPSB0KHIpO1xuICByZXR1cm4gZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksIGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZSwgZTtcbn1cbnZhciBvZSA9IHJlKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBlID8gZS5sZW5ndGggKyBgIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG5gICsgZS5tYXAoZnVuY3Rpb24obiwgaSkge1xuICAgICAgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgbi50b1N0cmluZygpO1xuICAgIH0pLmpvaW4oYFxuICBgKSA6IFwiXCIsIHRoaXMubmFtZSA9IFwiVW5zdWJzY3JpcHRpb25FcnJvclwiLCB0aGlzLmVycm9ycyA9IGU7XG4gIH07XG59KTtcbmZ1bmN0aW9uIFgodCwgcikge1xuICBpZiAodCkge1xuICAgIHZhciBlID0gdC5pbmRleE9mKHIpO1xuICAgIDAgPD0gZSAmJiB0LnNwbGljZShlLCAxKTtcbiAgfVxufVxudmFyIEggPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSByLCB0aGlzLmNsb3NlZCA9ICExLCB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciwgZSwgbiwgaSwgcztcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB0aGlzLmNsb3NlZCA9ICEwO1xuICAgICAgdmFyIGEgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICBpZiAoYSlcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIEFycmF5LmlzQXJyYXkoYSkpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAkKGEpLCBsID0gYy5uZXh0KCk7ICFsLmRvbmU7IGwgPSBjLm5leHQoKSkge1xuICAgICAgICAgICAgICB2YXIgdSA9IGwudmFsdWU7XG4gICAgICAgICAgICAgIHUucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgICAgICAgIHIgPSB7IGVycm9yOiB5IH07XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGwgJiYgIWwuZG9uZSAmJiAoZSA9IGMucmV0dXJuKSAmJiBlLmNhbGwoYyk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBhLnJlbW92ZSh0aGlzKTtcbiAgICAgIHZhciBkID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICBpZiAoRShkKSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkKCk7XG4gICAgICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgICAgICBzID0geSBpbnN0YW5jZW9mIG9lID8geS5lcnJvcnMgOiBbeV07XG4gICAgICAgIH1cbiAgICAgIHZhciBoID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgIGlmIChoKSB7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIF8gPSAkKGgpLCBmID0gXy5uZXh0KCk7ICFmLmRvbmU7IGYgPSBfLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIHAgPSBmLnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAga2UocCk7XG4gICAgICAgICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgICAgICAgIHMgPSBzID8/IFtdLCB5IGluc3RhbmNlb2Ygb2UgPyBzID0gUShRKFtdLCBXKHMpKSwgVyh5LmVycm9ycykpIDogcy5wdXNoKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICAgIG4gPSB7IGVycm9yOiB5IH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGYgJiYgIWYuZG9uZSAmJiAoaSA9IF8ucmV0dXJuKSAmJiBpLmNhbGwoXyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMpXG4gICAgICAgIHRocm93IG5ldyBvZShzKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZTtcbiAgICBpZiAociAmJiByICE9PSB0aGlzKVxuICAgICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgICBrZShyKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAociBpbnN0YW5jZW9mIHQpIHtcbiAgICAgICAgICBpZiAoci5jbG9zZWQgfHwgci5faGFzUGFyZW50KHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIHIuX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChlID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgZSAhPT0gdm9pZCAwID8gZSA6IFtdKS5wdXNoKHIpO1xuICAgICAgfVxuICB9LCB0LnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHJldHVybiBlID09PSByIHx8IEFycmF5LmlzQXJyYXkoZSkgJiYgZS5pbmNsdWRlcyhyKTtcbiAgfSwgdC5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KGUpID8gKGUucHVzaChyKSwgZSkgOiBlID8gW2UsIHJdIDogcjtcbiAgfSwgdC5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICBlID09PSByID8gdGhpcy5fcGFyZW50YWdlID0gbnVsbCA6IEFycmF5LmlzQXJyYXkoZSkgJiYgWChlLCByKTtcbiAgfSwgdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fZmluYWxpemVycztcbiAgICBlICYmIFgoZSwgciksIHIgaW5zdGFuY2VvZiB0ICYmIHIuX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgdC5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gbmV3IHQoKTtcbiAgICByZXR1cm4gci5jbG9zZWQgPSAhMCwgcjtcbiAgfSgpLCB0O1xufSgpLCBhdCA9IEguRU1QVFk7XG5mdW5jdGlvbiBjdCh0KSB7XG4gIHJldHVybiB0IGluc3RhbmNlb2YgSCB8fCB0ICYmIFwiY2xvc2VkXCIgaW4gdCAmJiBFKHQucmVtb3ZlKSAmJiBFKHQuYWRkKSAmJiBFKHQudW5zdWJzY3JpYmUpO1xufVxuZnVuY3Rpb24ga2UodCkge1xuICBFKHQpID8gdCgpIDogdC51bnN1YnNjcmliZSgpO1xufVxudmFyIHV0ID0ge1xuICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gIFByb21pc2U6IHZvaWQgMCxcbiAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogITEsXG4gIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogITFcbn0sIGx0ID0ge1xuICBzZXRUaW1lb3V0OiBmdW5jdGlvbih0LCByKSB7XG4gICAgZm9yICh2YXIgZSA9IFtdLCBuID0gMjsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKylcbiAgICAgIGVbbiAtIDJdID0gYXJndW1lbnRzW25dO1xuICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgUShbdCwgcl0sIFcoZSkpKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIChjbGVhclRpbWVvdXQpKHQpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59O1xuZnVuY3Rpb24gZHQodCkge1xuICBsdC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHRocm93IHQ7XG4gIH0pO1xufVxuZnVuY3Rpb24gUGUoKSB7XG59XG5mdW5jdGlvbiBLKHQpIHtcbiAgdCgpO1xufVxudmFyIHllID0gZnVuY3Rpb24odCkge1xuICBMKHIsIHQpO1xuICBmdW5jdGlvbiByKGUpIHtcbiAgICB2YXIgbiA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBuLmlzU3RvcHBlZCA9ICExLCBlID8gKG4uZGVzdGluYXRpb24gPSBlLCBjdChlKSAmJiBlLmFkZChuKSkgOiBuLmRlc3RpbmF0aW9uID0gUG4sIG47XG4gIH1cbiAgcmV0dXJuIHIuY3JlYXRlID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIHJldHVybiBuZXcgdWUoZSwgbiwgaSk7XG4gIH0sIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChlKTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKGUpKTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpO1xuICB9LCByLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHI7XG59KEgpLCBTbiA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gaWUodCwgcikge1xuICByZXR1cm4gU24uY2FsbCh0LCByKTtcbn1cbnZhciBDbiA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHI7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoZS5uZXh0KVxuICAgICAgdHJ5IHtcbiAgICAgICAgZS5uZXh0KHIpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBKKG4pO1xuICAgICAgfVxuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChlLmVycm9yKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZS5lcnJvcihyKTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgSihuKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBKKHIpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIuY29tcGxldGUpXG4gICAgICB0cnkge1xuICAgICAgICByLmNvbXBsZXRlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIEooZSk7XG4gICAgICB9XG4gIH0sIHQ7XG59KCksIHVlID0gZnVuY3Rpb24odCkge1xuICBMKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4sIGkpIHtcbiAgICB2YXIgcyA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzLCBhO1xuICAgIGlmIChFKGUpIHx8ICFlKVxuICAgICAgYSA9IHtcbiAgICAgICAgbmV4dDogZSA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiBuID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IGkgPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBzICYmIHV0LnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShlKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcy51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgYSA9IHtcbiAgICAgICAgbmV4dDogZS5uZXh0ICYmIGllKGUubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiBlLmVycm9yICYmIGllKGUuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogZS5jb21wbGV0ZSAmJiBpZShlLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBhID0gZTtcbiAgICB9XG4gICAgcmV0dXJuIHMuZGVzdGluYXRpb24gPSBuZXcgQ24oYSksIHM7XG4gIH1cbiAgcmV0dXJuIHI7XG59KHllKTtcbmZ1bmN0aW9uIEoodCkge1xuICBkdCh0KTtcbn1cbmZ1bmN0aW9uIGtuKHQpIHtcbiAgdGhyb3cgdDtcbn1cbnZhciBQbiA9IHtcbiAgY2xvc2VkOiAhMCxcbiAgbmV4dDogUGUsXG4gIGVycm9yOiBrbixcbiAgY29tcGxldGU6IFBlXG59LCBfZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgXCJAQG9ic2VydmFibGVcIjtcbn0oKTtcbmZ1bmN0aW9uIEluKHQpIHtcbiAgcmV0dXJuIHQ7XG59XG5mdW5jdGlvbiBPbih0KSB7XG4gIHJldHVybiB0Lmxlbmd0aCA9PT0gMCA/IEluIDogdC5sZW5ndGggPT09IDEgPyB0WzBdIDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0LnJlZHVjZShmdW5jdGlvbihuLCBpKSB7XG4gICAgICByZXR1cm4gaShuKTtcbiAgICB9LCBlKTtcbiAgfTtcbn1cbnZhciBUID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHIgJiYgKHRoaXMuX3N1YnNjcmliZSA9IHIpO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gbmV3IHQoKTtcbiAgICByZXR1cm4gZS5zb3VyY2UgPSB0aGlzLCBlLm9wZXJhdG9yID0gciwgZTtcbiAgfSwgdC5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24ociwgZSwgbikge1xuICAgIHZhciBpID0gdGhpcywgcyA9IEFuKHIpID8gciA6IG5ldyB1ZShyLCBlLCBuKTtcbiAgICByZXR1cm4gSyhmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhID0gaSwgYyA9IGEub3BlcmF0b3IsIGwgPSBhLnNvdXJjZTtcbiAgICAgIHMuYWRkKGMgPyBjLmNhbGwocywgbCkgOiBsID8gaS5fc3Vic2NyaWJlKHMpIDogaS5fdHJ5U3Vic2NyaWJlKHMpKTtcbiAgICB9KSwgcztcbiAgfSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByLmVycm9yKGUpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKHIsIGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgcmV0dXJuIGUgPSBJZShlKSwgbmV3IGUoZnVuY3Rpb24oaSwgcykge1xuICAgICAgdmFyIGEgPSBuZXcgdWUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHIoYyk7XG4gICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgcyhsKSwgYS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHMsXG4gICAgICAgIGNvbXBsZXRlOiBpXG4gICAgICB9KTtcbiAgICAgIG4uc3Vic2NyaWJlKGEpO1xuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlO1xuICAgIHJldHVybiAoZSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnN1YnNjcmliZShyKTtcbiAgfSwgdC5wcm90b3R5cGVbX2VdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHQucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciByID0gW10sIGUgPSAwOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKVxuICAgICAgcltlXSA9IGFyZ3VtZW50c1tlXTtcbiAgICByZXR1cm4gT24ocikodGhpcyk7XG4gIH0sIHQucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXM7XG4gICAgcmV0dXJuIHIgPSBJZShyKSwgbmV3IHIoZnVuY3Rpb24obiwgaSkge1xuICAgICAgdmFyIHM7XG4gICAgICBlLnN1YnNjcmliZShmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBzID0gYTtcbiAgICAgIH0sIGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIGkoYSk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4ocyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgdC5jcmVhdGUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIG5ldyB0KHIpO1xuICB9LCB0O1xufSgpO1xuZnVuY3Rpb24gSWUodCkge1xuICB2YXIgcjtcbiAgcmV0dXJuIChyID0gdCA/PyB1dC5Qcm9taXNlKSAhPT0gbnVsbCAmJiByICE9PSB2b2lkIDAgPyByIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIFJuKHQpIHtcbiAgcmV0dXJuIHQgJiYgRSh0Lm5leHQpICYmIEUodC5lcnJvcikgJiYgRSh0LmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIEFuKHQpIHtcbiAgcmV0dXJuIHQgJiYgdCBpbnN0YW5jZW9mIHllIHx8IFJuKHQpICYmIGN0KHQpO1xufVxuZnVuY3Rpb24gVG4odCkge1xuICByZXR1cm4gRSh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmxpZnQpO1xufVxuZnVuY3Rpb24gam4odCkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIGlmIChUbihyKSlcbiAgICAgIHJldHVybiByLmxpZnQoZnVuY3Rpb24oZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB0KGUsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gTW4odCwgciwgZSwgbiwgaSkge1xuICByZXR1cm4gbmV3IExuKHQsIHIsIGUsIG4sIGkpO1xufVxudmFyIExuID0gZnVuY3Rpb24odCkge1xuICBMKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4sIGksIHMsIGEsIGMpIHtcbiAgICB2YXIgbCA9IHQuY2FsbCh0aGlzLCBlKSB8fCB0aGlzO1xuICAgIHJldHVybiBsLm9uRmluYWxpemUgPSBhLCBsLnNob3VsZFVuc3Vic2NyaWJlID0gYywgbC5fbmV4dCA9IG4gPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICBuKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICBlLmVycm9yKGQpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fbmV4dCwgbC5fZXJyb3IgPSBzID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyh1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgZS5lcnJvcihkKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX2Vycm9yLCBsLl9jb21wbGV0ZSA9IGkgPyBmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGkoKTtcbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgZS5lcnJvcih1KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX2NvbXBsZXRlLCBsO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlO1xuICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgIHZhciBuID0gdGhpcy5jbG9zZWQ7XG4gICAgICB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCAhbiAmJiAoKGUgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCB8fCBlLmNhbGwodGhpcykpO1xuICAgIH1cbiAgfSwgcjtcbn0oeWUpLCBEbiA9IHJlKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHQodGhpcyksIHRoaXMubmFtZSA9IFwiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJvYmplY3QgdW5zdWJzY3JpYmVkXCI7XG4gIH07XG59KSwgZnQgPSBmdW5jdGlvbih0KSB7XG4gIEwociwgdCk7XG4gIGZ1bmN0aW9uIHIoKSB7XG4gICAgdmFyIGUgPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gZS5jbG9zZWQgPSAhMSwgZS5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgZS5vYnNlcnZlcnMgPSBbXSwgZS5pc1N0b3BwZWQgPSAhMSwgZS5oYXNFcnJvciA9ICExLCBlLnRocm93bkVycm9yID0gbnVsbCwgZTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IG5ldyBPZSh0aGlzLCB0aGlzKTtcbiAgICByZXR1cm4gbi5vcGVyYXRvciA9IGUsIG47XG4gIH0sIHIucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgdGhyb3cgbmV3IERuKCk7XG4gIH0sIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIEsoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSwgcztcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgfHwgKG4uY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20obi5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBhID0gJChuLmN1cnJlbnRPYnNlcnZlcnMpLCBjID0gYS5uZXh0KCk7ICFjLmRvbmU7IGMgPSBhLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGwgPSBjLnZhbHVlO1xuICAgICAgICAgICAgbC5uZXh0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgIGkgPSB7IGVycm9yOiB1IH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGMgJiYgIWMuZG9uZSAmJiAocyA9IGEucmV0dXJuKSAmJiBzLmNhbGwoYSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgSyhmdW5jdGlvbigpIHtcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmhhc0Vycm9yID0gbi5pc1N0b3BwZWQgPSAhMCwgbi50aHJvd25FcnJvciA9IGU7XG4gICAgICAgIGZvciAodmFyIGkgPSBuLm9ic2VydmVyczsgaS5sZW5ndGg7IClcbiAgICAgICAgICBpLnNoaWZ0KCkuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSB0aGlzO1xuICAgIEsoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoZS5fdGhyb3dJZkNsb3NlZCgpLCAhZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgZS5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgbiA9IGUub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZTtcbiAgICAgIHJldHVybiAoKGUgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIHIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIGUpO1xuICB9LCByLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSksIHRoaXMuX2lubmVyU3Vic2NyaWJlKGUpO1xuICB9LCByLnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBpID0gdGhpcywgcyA9IGkuaGFzRXJyb3IsIGEgPSBpLmlzU3RvcHBlZCwgYyA9IGkub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBzIHx8IGEgPyBhdCA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2goZSksIG5ldyBIKGZ1bmN0aW9uKCkge1xuICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgWChjLCBlKTtcbiAgICB9KSk7XG4gIH0sIHIucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcywgaSA9IG4uaGFzRXJyb3IsIHMgPSBuLnRocm93bkVycm9yLCBhID0gbi5pc1N0b3BwZWQ7XG4gICAgaSA/IGUuZXJyb3IocykgOiBhICYmIGUuY29tcGxldGUoKTtcbiAgfSwgci5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSBuZXcgVCgpO1xuICAgIHJldHVybiBlLnNvdXJjZSA9IHRoaXMsIGU7XG4gIH0sIHIuY3JlYXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHJldHVybiBuZXcgT2UoZSwgbik7XG4gIH0sIHI7XG59KFQpLCBPZSA9IGZ1bmN0aW9uKHQpIHtcbiAgTChyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gaS5kZXN0aW5hdGlvbiA9IGUsIGkuc291cmNlID0gbiwgaTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgaTtcbiAgICAoaSA9IChuID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5uZXh0KSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgfHwgaS5jYWxsKG4sIGUpO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgaTtcbiAgICAoaSA9IChuID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5lcnJvcikgPT09IG51bGwgfHwgaSA9PT0gdm9pZCAwIHx8IGkuY2FsbChuLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSwgbjtcbiAgICAobiA9IChlID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5jb21wbGV0ZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwIHx8IG4uY2FsbChlKTtcbiAgfSwgci5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgaTtcbiAgICByZXR1cm4gKGkgPSAobiA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLnN1YnNjcmliZShlKSkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IGF0O1xuICB9LCByO1xufShmdCksIEZuID0ge1xuICBub3c6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBEYXRlLm5vdygpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCB4biA9IGZ1bmN0aW9uKHQpIHtcbiAgTChyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgcmV0dXJuIHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgcjtcbn0oSCksIFJlID0ge1xuICBzZXRJbnRlcnZhbDogZnVuY3Rpb24odCwgcikge1xuICAgIGZvciAodmFyIGUgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICBlW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBRKFt0LCByXSwgVyhlKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwodCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIE5uID0gZnVuY3Rpb24odCkge1xuICBMKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzLCBlLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLnNjaGVkdWxlciA9IGUsIGkud29yayA9IG4sIGkucGVuZGluZyA9ICExLCBpO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgaTtcbiAgICBpZiAobiA9PT0gdm9pZCAwICYmIChuID0gMCksIHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5zdGF0ZSA9IGU7XG4gICAgdmFyIHMgPSB0aGlzLmlkLCBhID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgcmV0dXJuIHMgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoYSwgcywgbikpLCB0aGlzLnBlbmRpbmcgPSAhMCwgdGhpcy5kZWxheSA9IG4sIHRoaXMuaWQgPSAoaSA9IHRoaXMuaWQpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiB0aGlzLnJlcXVlc3RBc3luY0lkKGEsIHRoaXMuaWQsIG4pLCB0aGlzO1xuICB9LCByLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKGUsIG4sIGkpIHtcbiAgICByZXR1cm4gaSA9PT0gdm9pZCAwICYmIChpID0gMCksIFJlLnNldEludGVydmFsKGUuZmx1c2guYmluZChlLCB0aGlzKSwgaSk7XG4gIH0sIHIucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIGlmIChpID09PSB2b2lkIDAgJiYgKGkgPSAwKSwgaSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGkgJiYgdGhpcy5wZW5kaW5nID09PSAhMSlcbiAgICAgIHJldHVybiBuO1xuICAgIG4gIT0gbnVsbCAmJiBSZS5jbGVhckludGVydmFsKG4pO1xuICB9LCByLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uXCIpO1xuICAgIHRoaXMucGVuZGluZyA9ICExO1xuICAgIHZhciBpID0gdGhpcy5fZXhlY3V0ZShlLCBuKTtcbiAgICBpZiAoaSlcbiAgICAgIHJldHVybiBpO1xuICAgIHRoaXMucGVuZGluZyA9PT0gITEgJiYgdGhpcy5pZCAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCkpO1xuICB9LCByLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgaSA9ICExLCBzO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmsoZSk7XG4gICAgfSBjYXRjaCAoYSkge1xuICAgICAgaSA9ICEwLCBzID0gYSB8fCBuZXcgRXJyb3IoXCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yXCIpO1xuICAgIH1cbiAgICBpZiAoaSlcbiAgICAgIHJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksIHM7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdmFyIGUgPSB0aGlzLCBuID0gZS5pZCwgaSA9IGUuc2NoZWR1bGVyLCBzID0gaS5hY3Rpb25zO1xuICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbCwgdGhpcy5wZW5kaW5nID0gITEsIFgocywgdGhpcyksIG4gIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoaSwgbiwgbnVsbCkpLCB0aGlzLmRlbGF5ID0gbnVsbCwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHI7XG59KHhuKSwgQWUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyLCBlKSB7XG4gICAgZSA9PT0gdm9pZCAwICYmIChlID0gdC5ub3cpLCB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSByLCB0aGlzLm5vdyA9IGU7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24ociwgZSwgbikge1xuICAgIHJldHVybiBlID09PSB2b2lkIDAgJiYgKGUgPSAwKSwgbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCByKS5zY2hlZHVsZShuLCBlKTtcbiAgfSwgdC5ub3cgPSBGbi5ub3csIHQ7XG59KCksIFVuID0gZnVuY3Rpb24odCkge1xuICBMKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBBZS5ub3cpO1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuYWN0aW9ucyA9IFtdLCBpLl9hY3RpdmUgPSAhMSwgaTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgbi5wdXNoKGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgaTtcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKGkgPSBlLmV4ZWN1dGUoZS5zdGF0ZSwgZS5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlIChlID0gbi5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIGkpIHtcbiAgICAgIGZvciAoOyBlID0gbi5zaGlmdCgpOyApXG4gICAgICAgIGUudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IGk7XG4gICAgfVxuICB9LCByO1xufShBZSksICRuID0gbmV3IFVuKE5uKSwgVm4gPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB0ICYmIHR5cGVvZiB0Lmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBxbih0KSB7XG4gIHJldHVybiBFKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQudGhlbik7XG59XG5mdW5jdGlvbiB6bih0KSB7XG4gIHJldHVybiBFKHRbX2VdKTtcbn1cbmZ1bmN0aW9uIEhuKHQpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIEUodCA9PSBudWxsID8gdm9pZCAwIDogdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gWW4odCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArICh0ICE9PSBudWxsICYmIHR5cGVvZiB0ID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIHQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIEJuKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIEpuID0gQm4oKTtcbmZ1bmN0aW9uIEtuKHQpIHtcbiAgcmV0dXJuIEUodCA9PSBudWxsID8gdm9pZCAwIDogdFtKbl0pO1xufVxuZnVuY3Rpb24gR24odCkge1xuICByZXR1cm4gd24odGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSwgbiwgaSwgcztcbiAgICByZXR1cm4gc3QodGhpcywgZnVuY3Rpb24oYSkge1xuICAgICAgc3dpdGNoIChhLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBlID0gdC5nZXRSZWFkZXIoKSwgYS5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBhLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBhLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgeChlLnJlYWQoKSldO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIG4gPSBhLnNlbnQoKSwgaSA9IG4udmFsdWUsIHMgPSBuLmRvbmUsIHMgPyBbNCwgeCh2b2lkIDApXSA6IFszLCA1XTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMiwgYS5zZW50KCldO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIFs0LCB4KGkpXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgYS5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIGEuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiBlLnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFpuKHQpIHtcbiAgcmV0dXJuIEUodCA9PSBudWxsID8gdm9pZCAwIDogdC5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gV24odCkge1xuICBpZiAodCBpbnN0YW5jZW9mIFQpXG4gICAgcmV0dXJuIHQ7XG4gIGlmICh0ICE9IG51bGwpIHtcbiAgICBpZiAoem4odCkpXG4gICAgICByZXR1cm4gUW4odCk7XG4gICAgaWYgKFZuKHQpKVxuICAgICAgcmV0dXJuIFhuKHQpO1xuICAgIGlmIChxbih0KSlcbiAgICAgIHJldHVybiBlbyh0KTtcbiAgICBpZiAoSG4odCkpXG4gICAgICByZXR1cm4gcHQodCk7XG4gICAgaWYgKEtuKHQpKVxuICAgICAgcmV0dXJuIHRvKHQpO1xuICAgIGlmIChabih0KSlcbiAgICAgIHJldHVybiBybyh0KTtcbiAgfVxuICB0aHJvdyBZbih0KTtcbn1cbmZ1bmN0aW9uIFFuKHQpIHtcbiAgcmV0dXJuIG5ldyBUKGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRbX2VdKCk7XG4gICAgaWYgKEUoZS5zdWJzY3JpYmUpKVxuICAgICAgcmV0dXJuIGUuc3Vic2NyaWJlKHIpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZVwiKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBYbih0KSB7XG4gIHJldHVybiBuZXcgVChmdW5jdGlvbihyKSB7XG4gICAgZm9yICh2YXIgZSA9IDA7IGUgPCB0Lmxlbmd0aCAmJiAhci5jbG9zZWQ7IGUrKylcbiAgICAgIHIubmV4dCh0W2VdKTtcbiAgICByLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZW8odCkge1xuICByZXR1cm4gbmV3IFQoZnVuY3Rpb24ocikge1xuICAgIHQudGhlbihmdW5jdGlvbihlKSB7XG4gICAgICByLmNsb3NlZCB8fCAoci5uZXh0KGUpLCByLmNvbXBsZXRlKCkpO1xuICAgIH0sIGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiByLmVycm9yKGUpO1xuICAgIH0pLnRoZW4obnVsbCwgZHQpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHRvKHQpIHtcbiAgcmV0dXJuIG5ldyBUKGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSwgbjtcbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgaSA9ICQodCksIHMgPSBpLm5leHQoKTsgIXMuZG9uZTsgcyA9IGkubmV4dCgpKSB7XG4gICAgICAgIHZhciBhID0gcy52YWx1ZTtcbiAgICAgICAgaWYgKHIubmV4dChhKSwgci5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIGUgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgJiYgIXMuZG9uZSAmJiAobiA9IGkucmV0dXJuKSAmJiBuLmNhbGwoaSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZSkgdGhyb3cgZS5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgci5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHB0KHQpIHtcbiAgcmV0dXJuIG5ldyBUKGZ1bmN0aW9uKHIpIHtcbiAgICBubyh0LCByKS5jYXRjaChmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gci5lcnJvcihlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBybyh0KSB7XG4gIHJldHVybiBwdChHbih0KSk7XG59XG5mdW5jdGlvbiBubyh0LCByKSB7XG4gIHZhciBlLCBuLCBpLCBzO1xuICByZXR1cm4gdm4odGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhLCBjO1xuICAgIHJldHVybiBzdCh0aGlzLCBmdW5jdGlvbihsKSB7XG4gICAgICBzd2l0Y2ggKGwubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGwudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pLCBlID0gRW4odCksIGwubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIFs0LCBlLm5leHQoKV07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAobiA9IGwuc2VudCgpLCAhIW4uZG9uZSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICBpZiAoYSA9IG4udmFsdWUsIHIubmV4dChhKSwgci5jbG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgIGwubGFiZWwgPSAzO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGMgPSBsLnNlbnQoKSwgaSA9IHsgZXJyb3I6IGMgfSwgWzMsIDExXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBsLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pLCBuICYmICFuLmRvbmUgJiYgKHMgPSBlLnJldHVybikgPyBbNCwgcy5jYWxsKGUpXSA6IFszLCA4XTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGwuc2VudCgpLCBsLmxhYmVsID0gODtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKGkpIHRocm93IGkuZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiByLmNvbXBsZXRlKCksIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBvbyh0LCByLCBlLCBuLCBpKSB7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCBpID09PSB2b2lkIDAgJiYgKGkgPSAhMSk7XG4gIHZhciBzID0gci5zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICBlKCksIGkgPyB0LmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIG4pKSA6IHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgfSwgbik7XG4gIGlmICh0LmFkZChzKSwgIWkpXG4gICAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBpbyh0LCByKSB7XG4gIHZhciBlID0gRSh0KSA/IHQgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdDtcbiAgfSwgbiA9IGZ1bmN0aW9uKGkpIHtcbiAgICByZXR1cm4gaS5lcnJvcihlKCkpO1xuICB9O1xuICByZXR1cm4gbmV3IFQobik7XG59XG52YXIgc28gPSByZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm5hbWUgPSBcIkVtcHR5RXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZVwiO1xuICB9O1xufSk7XG5mdW5jdGlvbiBhbyh0LCByKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLCBuKSB7XG4gICAgdmFyIGkgPSAhMSwgcztcbiAgICB0LnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBmdW5jdGlvbihhKSB7XG4gICAgICAgIHMgPSBhLCBpID0gITA7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IG4sXG4gICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGkgPyBlKHMpIDogbihuZXcgc28oKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gY28odCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHQpO1xufVxudmFyIHVvID0gcmUoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgIGUgPT09IHZvaWQgMCAmJiAoZSA9IG51bGwpLCB0KHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBcIlRpbWVvdXQgaGFzIG9jY3VycmVkXCIsIHRoaXMubmFtZSA9IFwiVGltZW91dEVycm9yXCIsIHRoaXMuaW5mbyA9IGU7XG4gIH07XG59KTtcbmZ1bmN0aW9uIGxvKHQsIHIpIHtcbiAgdmFyIGUgPSBjbyh0KSA/IHsgZmlyc3Q6IHQgfSA6IHR5cGVvZiB0ID09IFwibnVtYmVyXCIgPyB7IGVhY2g6IHQgfSA6IHQsIG4gPSBlLmZpcnN0LCBpID0gZS5lYWNoLCBzID0gZS53aXRoLCBhID0gcyA9PT0gdm9pZCAwID8gZm8gOiBzLCBjID0gZS5zY2hlZHVsZXIsIGwgPSBjID09PSB2b2lkIDAgPyAkbiA6IGMsIHUgPSBlLm1ldGEsIGQgPSB1ID09PSB2b2lkIDAgPyBudWxsIDogdTtcbiAgaWYgKG4gPT0gbnVsbCAmJiBpID09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIHRpbWVvdXQgcHJvdmlkZWQuXCIpO1xuICByZXR1cm4gam4oZnVuY3Rpb24oaCwgXykge1xuICAgIHZhciBmLCBwLCB5ID0gbnVsbCwgaiA9IDAsIFkgPSBmdW5jdGlvbihuZSkge1xuICAgICAgcCA9IG9vKF8sIGwsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGYudW5zdWJzY3JpYmUoKSwgV24oYSh7XG4gICAgICAgICAgICBtZXRhOiBkLFxuICAgICAgICAgICAgbGFzdFZhbHVlOiB5LFxuICAgICAgICAgICAgc2VlbjogalxuICAgICAgICAgIH0pKS5zdWJzY3JpYmUoXyk7XG4gICAgICAgIH0gY2F0Y2ggKGh0KSB7XG4gICAgICAgICAgXy5lcnJvcihodCk7XG4gICAgICAgIH1cbiAgICAgIH0sIG5lKTtcbiAgICB9O1xuICAgIGYgPSBoLnN1YnNjcmliZShNbihfLCBmdW5jdGlvbihuZSkge1xuICAgICAgcCA9PSBudWxsIHx8IHAudW5zdWJzY3JpYmUoKSwgaisrLCBfLm5leHQoeSA9IG5lKSwgaSA+IDAgJiYgWShpKTtcbiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgICBwICE9IG51bGwgJiYgcC5jbG9zZWQgfHwgcCA9PSBudWxsIHx8IHAudW5zdWJzY3JpYmUoKSwgeSA9IG51bGw7XG4gICAgfSkpLCAhaiAmJiBZKG4gIT0gbnVsbCA/IHR5cGVvZiBuID09IFwibnVtYmVyXCIgPyBuIDogK24gLSBsLm5vdygpIDogaSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZm8odCkge1xuICB0aHJvdyBuZXcgdW8odCk7XG59XG5jbGFzcyBHIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogciB9LCB0aGlzLl9zdWJqZWN0Lm5leHQociksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKHIsIGUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiByLCBlcnJNc2c6IGUgfSwgdGhpcy5fc3ViamVjdC5lcnJvcihyKTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHIpID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiByLCB0aGlzLnN1YnNjcmliZSA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHIodGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICByKHRoaXMuX2N1cnJlbnQpLCBlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIFhlKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgZSA9IHtcbiAgICAgICAgZmlyc3Q6IHIudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gaW8oKCkgPT4gbmV3IEVycm9yKHIudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGFvKHRoaXMuX3N1YmplY3QucGlwZShsbyhlKSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyBmdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiBwbywgZXJyX186IGhvIH0gPSBPKFwiaW5pdC1mbG93c1wiKSwgVGUgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gbmV3IEcoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXI6IGUsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKG4pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChlLmN1cnJlbnQuaXNTdWNjZXNzKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLlwiKTtcbiAgICAgICAgY29uc3QgaSA9IGF3YWl0IHIobik7XG4gICAgICAgIHBvKGDinJQgJHt0fSBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gUmVzdWx0OmAsIGkpLCBlLnNldChpKTtcbiAgICAgIH0gY2F0Y2ggKGkpIHtcbiAgICAgICAgaG8oYPCdma0gJHt0fSBmbG93IGluaXRpYWxpemF0aW9uIGZhaWxlZC4gRXJyb3I6YCwgTihpKSwgXCJEZXRhaWxzOlwiLCBpKSwgZS50aHJvdyhpLCBOKGkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59LCBtbyA9IGFzeW5jICh0LCByLCBlKSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXModCkubWFwKChuKSA9PiBuLmluaXRpYWxpemUoeyBjb250ZXh0OiByLCBmb3JtQ2FsbGJhY2tzOiBlIH0pKSk7XG59LCB5byA9ICgpID0+ICh7XG4gIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgLy8gU3RyaXBlIFBSXG4gIHN0cmlwZVBSOiBUZShcIlN0cmlwZSBQUlwiLCBVLnN0cmlwZVBSLmluaXQpLFxuICAvLyBTdHJpcGUgTGlua1xuICBzdHJpcGVMaW5rOiBUZShcIlN0cmlwZSBMaW5rXCIsIFUuc3RyaXBlTGluay5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IF9vIH0gPSBPKFwiZm9ybS1jYWxsYmFja3NcIiksIGsgPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpLCBqZSA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBrLFxuICBvbkJsdXI6IGssXG4gIG9uQ2hhbmdlOiBrLFxuICBvbkxvYWQ6IGssXG4gIG9uTG9hZEVycm9yOiBrLFxuICBvblZhbGlkYXRpb25FcnJvcjogayxcbiAgb25DaGVja291dFN0YXJ0ZWQ6IGssXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBrLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IGssXG4gIG9uQ2hlY2tvdXRFcnJvcjogayxcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IGtcbn0pLCBSID0gY2xhc3MgUiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHIpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IFIuY3JlYXRlRW1wdHlDYWxsYmFja3MoKSwgT2JqZWN0LmVudHJpZXMocikuZm9yRWFjaCgoW2UsIG5dKSA9PiB7XG4gICAgICAgIGNvbnN0IGkgPSBDdChlLCBuID8/IFIuTk9PUCwgX28pO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3NbZV0gPSBpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5fY2FsbGJhY2tzID0gUi5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59O1xuUi5OT09QID0gKCkgPT4ge1xufSwgUi5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgY29uc3QgciA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMoamUua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChlKSA9PiB7XG4gICAgcltlXSA9IFIuTk9PUDtcbiAgfSksIHI7XG59LCBSLmZyb21PYmplY3QgPSAocikgPT4ge1xuICBjb25zdCBlID0gbmV3IFIoKTtcbiAgcmV0dXJuIGUuc2V0Q2FsbGJhY2tzKGplLnBhcnNlKHIpKSwgZTtcbn07XG5sZXQgbGUgPSBSO1xuY2xhc3MgZ28ge1xuICBjb25zdHJ1Y3RvcihyLCBlLCBuLCBpKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKHMpID0+IHtcbiAgICAgIGlmICghcy5zb3VyY2UpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNvdXJjZSBmb3VuZFwiKTtcbiAgICAgIGlmIChNZShzLm9yaWdpbikgIT09IE1lKHRoaXMuYmFzZVVybCkgfHwgdHlwZW9mIHMuZGF0YSA9PSBcIm9iamVjdFwiICYmIHMuZGF0YS5wZW5wYWwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IGEgPSB1cihKU09OLnBhcnNlKHMuZGF0YSkpO1xuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRXZlbnQoYSkpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkOiBsLCBwYXlsb2FkOiB1IH0gPSBhLCBkID0gdS50eXBlO1xuICAgICAgc3dpdGNoIChkKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQodS5oZWlnaHQgPyBgJHt1LmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyhsLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihsLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UobCwgdS5lbGVtZW50VHlwZSwgdS5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbbF0gPSBzLnNvdXJjZSwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZCh1KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKHUubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcih1LmVsZW1lbnRUeXBlLCB1LmVycm9ycywgbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBkKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnZhbGlkYXRlRXZlbnQgPSAocykgPT4gcy5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFzLmVsZW1lbnRJZCA/IChjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgcy5mb3JtSWQpLCBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgcyksICExKSA6IHRoaXMubm9uY2VzLmhhcyhzLm5vbmNlKSA/IChjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBzKSwgITEpIDogKHRoaXMubm9uY2VzLmFkZChzLm5vbmNlKSwgITApLCB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9LCB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIHRoaXMuZm9ybUlkID0gciwgdGhpcy5iYXNlVXJsID0gZSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gbiwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGk7XG4gIH1cbn1cbmNvbnN0IE1lID0gKHQpID0+IG5ldyBVUkwodCkub3JpZ2luO1xuYXN5bmMgZnVuY3Rpb24gYm8odCwgcikge1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogdCxcbiAgICBkZWJ1ZzogITEsXG4gICAgY2hpbGRPcmlnaW46IHJcbiAgfSkucHJvbWlzZSwgaSA9IGF3YWl0IGxyKG4pO1xuICBpZiAoIWRyKG4sIGkpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdFwiKTtcbiAgcmV0dXJuIG47XG59XG5jbGFzcyB2byB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24ociwgZSkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KHIsIGUpO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgciA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIHJldHVybiByO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5jb25zdCB3byA9ICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFI6IG4gfSA9IHQ7XG4gIG4ucHVibGlzaGVyLnN1YnNjcmliZSgoaSkgPT4ge1xuICAgIGlmIChpLmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgcyA9IGkubG9hZGVkVmFsdWUsIGEgPSBzLmlzQXZhaWxhYmxlICYmIHMuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5LCBjID0gcy5pc0F2YWlsYWJsZSAmJiBzLmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXksIGwgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGEsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgYSAmJiBMZShcImFwcGxlX3BheVwiLCBzLCByLCBlLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIGMgJiYgTGUoXCJnb29nbGVfcGF5XCIsIHMsIHIsIGUsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGUuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKGwpO1xuICAgIH1cbiAgfSk7XG59LCBMZSA9ICh0LCByLCBlLCBuLCBpKSA9PiBVLnN0cmlwZVBSLnJ1bih7XG4gIGNvbnRleHQ6IGUsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogaXQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCB0KSxcbiAgbm9uQ2RlRm9ybUlucHV0czogZGUoZS5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiB0LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpID09IG51bGwgPyB2b2lkIDAgOiBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogclxufSksIERlID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogTSwgZXJyX186IHNlIH0gPSBPKFwib3AtZm9ybVwiKSwgQSA9IGNsYXNzIEEge1xuICBjb25zdHJ1Y3RvcihyKSB7XG4gICAgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgRygpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgRygpLCB0aGlzLmNvbnRleHQgPSBuZXcgRygpLCB0aGlzLmluaXRGbG93cyA9IHlvKCksIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE0oXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKSwgTShcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgY29uc3QgZSA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogRGVcbiAgICAgICAgfSk7XG4gICAgICAgIE0oXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIiksIE0oXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IG4gPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBEZVxuICAgICAgICB9KTtcbiAgICAgICAgTShcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKSwgTShcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgY29uc3QgaSA9IEEuYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBlLFxuICAgICAgICAgIG4sXG4gICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldChpKSwgd28odGhpcy5pbml0Rmxvd3MsIGksIHRoaXMuZm9ybUNhbGxiYWNrcyksIE0oXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIiksIGF3YWl0IG1vKHRoaXMuaW5pdEZsb3dzLCBpLCB0aGlzLmZvcm1DYWxsYmFja3MpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChlLnRvdGFsQW1vdW50QXRvbXMsIGUuY3VycmVuY3kpLCBNKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnN0IG4gPSBOKGUpO1xuICAgICAgICBzZShcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgbiksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3Iobik7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zZXRGb3JtSGVpZ2h0ID0gKGUpID0+IHtcbiAgICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gZSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgJiYgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBuICYmIChuLm5vZGUuc3R5bGUuaGVpZ2h0ID0gZSk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZGVkID0gKGUpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuY2RlTG9hZEV2ZW50LnNldChlKTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKGUpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihlKSwgZSk7XG4gICAgfSwgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGUsIG4gPSB7fSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZykgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBmb3JtIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIGNvbnN0IGkgPSBrdC5wYXJzZShlKSwgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIiksIGEgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcobik7XG4gICAgICBzLm5hbWUgPSBgJHtpfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IGMgPSBuZXcgVVJMKGAvYXBwL3YxLyR7cy5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHJldHVybiBjLnNlYXJjaCA9IGEudG9TdHJpbmcoKSwgcy5zcmMgPSBjLmhyZWYsIHMuc3R5bGUuYm9yZGVyID0gXCJub25lXCIsIHMuc3R5bGUud2lkdGggPSBcIjEwMCVcIiwgdGhpcy5yZWdpc3RlcklmcmFtZShpLCBzKTtcbiAgICB9LCB0aGlzLnJlZ2lzdGVySWZyYW1lID0gKGUsIG4pID0+IHtcbiAgICAgIGNvbnN0IGkgPSB7XG4gICAgICAgIHR5cGU6IGUsXG4gICAgICAgIG5vZGU6IG4sXG4gICAgICAgIG1vdW50OiAocykgPT4ge1xuICAgICAgICAgIHZhciBhO1xuICAgICAgICAgIHJldHVybiAoYSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocykpID09IG51bGwgPyB2b2lkIDAgOiBhLmFwcGVuZENoaWxkKG4pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdFRvRWxlbWVudCh7IHR5cGU6IGkudHlwZSwgbm9kZTogaS5ub2RlIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyB8fCAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgIFtGLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgIFtGLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbRi5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgW0YuQ0FSRF9DVkNdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1tlXSA9IGksIGk7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IG4gPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gbi5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBuLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIGUuc3R5bGVzICYmIG4uYXBwZW5kKFwic3R5bGVzXCIsIGNyKGUuc3R5bGVzKSksIG4uYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIG47XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGUpID0+IHtcbiAgICAgIGJvKGUubm9kZSkudGhlbigobikgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oZS50eXBlLCBuKSwgdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuYW55Q2RlQ29ubi5zZXQobik7XG4gICAgICB9KS5jYXRjaCgobikgPT4gc2UoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIG4pKTtcbiAgICB9LCB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSwgdGhpcy5zdWJtaXRDYXJkID0gKCkgPT4ge1xuICAgICAgY29uc3QgZSA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghZSkge1xuICAgICAgICBzZShcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFUuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBpdChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGRlKGUuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKClcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgICAgfSk7XG4gICAgfSwgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQsIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZSBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgZSAmJiBlLm5vZGUucmVtb3ZlKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgfSwgQS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjEuMThcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gci5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLnIsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBsZS5mcm9tT2JqZWN0KHIpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3dpbmRvdy5jcnlwdG8ucmFuZG9tVVVJRCgpfWAsIHRoaXMucmVmZXJyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luLCB0aGlzLmZvcm1UYXJnZXQgPSByLmZvcm1UYXJnZXQgPz8gXCJib2R5XCIsIHRoaXMuZm9ybVByb3BlcnRpZXMgPSB7IGhlaWdodDogXCIxcHhcIiB9LCB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IHZvKCksIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IGdvKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pLCB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG59O1xuQS5vanNGbG93cyA9IFUsIEEuYXNzaWduQXNTaW5nbGV0b24gPSAocikgPT4ge1xuICBpZiAoQS5nZXRJbnN0YW5jZSgpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICB3aW5kb3cub2pzID0gcjtcbn0sIEEuZ2V0SW5zdGFuY2UgPSAoKSA9PiB3aW5kb3cub2pzID8/IG51bGwsIEEuYnVpbGRPanNGbG93Q29udGV4dCA9IChyLCBlLCBuLCBpKSA9PiAoe1xuICBiYXNlVXJsOiBuZXcgVVJMKHIuYmFzZVVybCA/PyBtdCkub3JpZ2luLFxuICBmb3JtRGl2OiBpLFxuICBlbGVtZW50c1Nlc3Npb25JZDogZS5zZXNzaW9uSWQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgYW55Q2RlQ29ubmVjdGlvbjogbixcbiAgY3VzdG9tSW5pdFBhcmFtczogci5jdXN0b21Jbml0UGFyYW1zID8/IHt9XG59KTtcbmxldCBGZSA9IEE7XG5cbmNvbnN0IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyA9IChwcm9wcykgPT4ge1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzUmVmID0gdXNlUmVmKHByb3BzKTtcbiAgY29uc3QgY2IgPSBmb3JtQ2FsbGJhY2tzUmVmLmN1cnJlbnQ7XG4gIGNiLm9uTG9hZCA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25Mb2FkLCBbcHJvcHMub25Mb2FkXSk7XG4gIGNiLm9uTG9hZEVycm9yID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vbkxvYWRFcnJvciwgW3Byb3BzLm9uTG9hZEVycm9yXSk7XG4gIGNiLm9uVmFsaWRhdGlvbkVycm9yID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vblZhbGlkYXRpb25FcnJvciwgW3Byb3BzLm9uVmFsaWRhdGlvbkVycm9yXSk7XG4gIGNiLm9uRm9jdXMgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uRm9jdXMsIFtwcm9wcy5vbkZvY3VzXSk7XG4gIGNiLm9uQmx1ciA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25CbHVyLCBbcHJvcHMub25CbHVyXSk7XG4gIGNiLm9uQ2hhbmdlID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vbkNoYW5nZSwgW3Byb3BzLm9uQ2hhbmdlXSk7XG4gIGNiLm9uQ2hlY2tvdXRTdGFydGVkID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vbkNoZWNrb3V0U3RhcnRlZCwgW3Byb3BzLm9uQ2hlY2tvdXRTdGFydGVkXSk7XG4gIGNiLm9uQ2hlY2tvdXRTdWNjZXNzID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vbkNoZWNrb3V0U3VjY2VzcywgW3Byb3BzLm9uQ2hlY2tvdXRTdWNjZXNzXSk7XG4gIGNiLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gcHJvcHMub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzLFxuICAgIFtwcm9wcy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3NdXG4gICk7XG4gIGNiLm9uQ2hlY2tvdXRFcnJvciA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25DaGVja291dEVycm9yLCBbcHJvcHMub25DaGVja291dEVycm9yXSk7XG4gIGNiLm9uUGF5bWVudFJlcXVlc3RMb2FkID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZCwgW3Byb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkXSk7XG4gIHJldHVybiBmb3JtQ2FsbGJhY2tzUmVmLmN1cnJlbnQ7XG59O1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5hcnJheShab2RGaWVsZEVycm9yKTtcbmNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbiwgZXJyb3JMb2dnZXIpID0+IHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JMb2dnZXIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2NhbGxiYWNrTmFtZX0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuY29uc3QgT3B0aW9uYWxTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHokMS51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRGYW1pbHk6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBtYXJnaW46IE9wdGlvbmFsU3RyaW5nLFxuICBwYWRkaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxpbmVIZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBoaWRlSWNvbjogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG56JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgQ291cG9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBudWxsT3JVbmRlZk9yKEJyYW5kU2V0dGluZ3MpXG59KTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IENvdXBvbk1pbmltYWxcbn0pO1xuY29uc3QgSW52b2ljZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoRGlzY291bnRNaW5pbWFsKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKVxufSk7XG5jb25zdCBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KEludm9pY2VNaW5pbWFsKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbnokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG59KTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xuXG5mdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHNldFByb3RvdHlwZU9mID8gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIDogdGFyZ2V0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcbn1cbmZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgaWYgKGZuID09PSB2b2lkIDApIHtcbiAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbn1cblxudmFyIF9fZXh0ZW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyhDdXN0b21FcnJvciwgX3N1cGVyKTtcblxuICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ25hbWUnLCB7XG4gICAgICB2YWx1ZTogX25ld1RhcmdldC5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBmaXhQcm90byhfdGhpcywgX25ld1RhcmdldC5wcm90b3R5cGUpO1xuICAgIGZpeFN0YWNrKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59KShFcnJvcik7XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke0IuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtCLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmVycm9yKGAke0IucmVkLmJvbGQoXCJvanMvXCIpfSR7Qi5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG5cbmNvbnN0IFBSX0xPQURJTkcgPSB7XG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5jb25zdCB1c2VQYXltZW50UmVxdWVzdHMgPSAob3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCkgPT4ge1xuICBjb25zdCBbcGF5bWVudFJlcXVlc3RzLCBzZXRQYXltZW50UmVxdWVzdHNdID0gdXNlU3RhdGUoe1xuICAgIGFwcGxlX3BheTogUFJfTE9BRElORyxcbiAgICBnb29nbGVfcGF5OiBQUl9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXltZW50UmVxdWVzdHMyKSA9PiB7XG4gICAgICBzZXRQYXltZW50UmVxdWVzdHMocGF5bWVudFJlcXVlc3RzMik7XG4gICAgICBvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkPy4ocGF5bWVudFJlcXVlc3RzMik7XG4gICAgfSxcbiAgICBbb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZF1cbiAgKTtcbiAgcmV0dXJuIHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9O1xufTtcblxuY29uc3QgRk9STV9UQVJHRVQgPSBcIm9wX29qc19mb3JtXCI7XG5jb25zdCBFbGVtZW50c0Zvcm0gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW29wRm9ybSwgc2V0T3BGb3JtXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IFtlbGVtZW50c0NvbnRleHRWYWx1ZSwgc2V0RWxlbWVudHNDb250ZXh0VmFsdWVdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9ID0gdXNlUGF5bWVudFJlcXVlc3RzKHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkLFxuICAgIG9uTG9hZDogKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KSA9PiB7XG4gICAgICBzZXRMb2FkZWQodHJ1ZSk7XG4gICAgICBwcm9wcy5vbkxvYWQ/Lih0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSk7XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BGb3JtKSByZXR1cm47XG4gICAgY29uc3QgZm9ybSA9IEZlLmdldEluc3RhbmNlKCkgPz8gbmV3IEZlKHtcbiAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHByb3BzLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICBmb3JtVGFyZ2V0OiBgIyR7Rk9STV9UQVJHRVR9YCxcbiAgICAgIGJhc2VVcmw6IHByb3BzLmJhc2VVcmwsXG4gICAgICBjdXN0b21Jbml0UGFyYW1zOiBwcm9wcy5jdXN0b21Jbml0UGFyYW1zLFxuICAgICAgLi4uZm9ybUNhbGxiYWNrc1xuICAgIH0pO1xuICAgIHNldE9wRm9ybShmb3JtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlKGZvcm0pO1xuICAgIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlKHZhbHVlKTtcbiAgICBmb3JtLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKHJlc3VsdC5sb2FkZWRWYWx1ZS5jb250cm9sbGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIGFwcGxlUGF5OiBwYXltZW50UmVxdWVzdHMuYXBwbGVfcGF5LFxuICAgIGdvb2dsZVBheTogcGF5bWVudFJlcXVlc3RzLmdvb2dsZV9wYXksXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogYCR7YmFzZVVybH0vYXBwL3YxLyR7c3ViUGF0aH0tZWxlbWVudC8/JHtxdWVyeVN0cmluZ31gLFxuICAgICAgc3R5bGU6IGZyYW1lU3R5bGUsXG4gICAgICByZWY6IGlmcmFtZVJlZlxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEIH0pO1xufTtcblxuY29uc3QgQ2FyZEV4cGlyeUVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZIH0pO1xufTtcblxuY29uc3QgQ2FyZE51bWJlckVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSIH0pO1xufTtcblxuZXhwb3J0IHsgQ2FyZEN2Y0VsZW1lbnQsIENhcmRFbGVtZW50LCBDYXJkRXhwaXJ5RWxlbWVudCwgQ2FyZE51bWJlckVsZW1lbnQsIEVsZW1lbnRzRm9ybSwgRmllbGROYW1lLCB1c2VPcGVuUGF5RWxlbWVudHMgfTsiXSwKICAibWFwcGluZ3Mi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QUFDLEdBR3RGMEgsS0FBYyxDQUFDLEVBQUUsUUFBQS9GLEVBQU8sTUFDTCxnQkFBQXJWLEVBQUltYSxJQUFjLEVBQUUsUUFBQTlFLEdBQVEsYUFBYTNCLEVBQWdCLEtBQUssQ0FBQyxHQUdsRjJILEtBQW9CLENBQUMsRUFBRSxRQUFBaEcsRUFBTyxNQUNYLGdCQUFBclYsRUFBSW1hLElBQWMsRUFBRSxRQUFBOUUsR0FBUSxhQUFhM0IsRUFBZ0IsWUFBWSxDQUFDLEdBR3pGNEgsS0FBb0IsQ0FBQyxFQUFFLFFBQUFqRyxFQUFPLE1BQ1gsZ0JBQUFyVixFQUFJbWEsSUFBYyxFQUFFLFFBQUE5RSxHQUFRLGFBQWEzQixFQUFnQixZQUFZLENBQUM7IiwKICAibmFtZXMiOiBbImNyZWF0ZUNvbnRleHQiLCAidXNlQ29udGV4dCIsICJ1c2VSZWYiLCAidXNlTWVtbyIsICJ1c2VTdGF0ZSIsICJ1c2VDYWxsYmFjayIsICJ1c2VFZmZlY3QiLCAianN4IiwgIkZyYWdtZW50IiwgInokMSIsICJjb25uZWN0VG9DaGlsZCIsICJCIiwgIkVsZW1lbnRzQ29udGV4dCIsICJ1c2VPcGVuUGF5RWxlbWVudHMiLCAiY29udGV4dCIsICJtdCIsICJ5dCIsICJfdCIsICJndCIsICJidCIsICJ2dCIsICJhZSIsICJ0IiwgInIiLCAid3QiLCAiRXQiLCAiZSIsICJTdCIsICJOIiwgIkN0IiwgIm4iLCAiUyIsICJ2IiwgIloiLCAibSIsICJOZSIsICJVZSIsICIkZSIsICJWZSIsICJGIiwgImt0IiwgImVlIiwgIlB0IiwgIlAiLCAiSXQiLCAiT3QiLCAiUnQiLCAiQXQiLCAiVHQiLCAianQiLCAiTXQiLCAiTHQiLCAiRHQiLCAiRnQiLCAieHQiLCAiTnQiLCAiViIsICJVdCIsICIkdCIsICJWdCIsICJxdCIsICJ6dCIsICJIdCIsICJZdCIsICJCdCIsICJKdCIsICJLdCIsICJHdCIsICJEIiwgIlp0IiwgIld0IiwgIlF0IiwgIlh0IiwgImVyIiwgInRyIiwgInRlIiwgImdlIiwgIm9yIiwgInJyIiwgIm5yIiwgImlyIiwgInNyIiwgImFyIiwgImkiLCAicyIsICJhIiwgImMiLCAiY3IiLCAiZGUiLCAidXIiLCAibHIiLCAiZHIiLCAiZnIiLCAicWUiLCAiemUiLCAicHIiLCAiaHIiLCAicSIsICJtciIsICJ5ciIsICJIZSIsICJfciIsICJnciIsICJiciIsICJiZSIsICJZZSIsICJ2ZSIsICJCZSIsICJ2ciIsICJ3ciIsICJKZSIsICJFciIsICJTciIsICJLZSIsICJDciIsICJrciIsICJQciIsICJJciIsICJPciIsICJSciIsICJHZSIsICJJIiwgIlRyIiwgIkFyIiwgImpyIiwgInoiLCAiTXIiLCAiTHIiLCAiRHIiLCAiZmUiLCAiRnIiLCAiWmUiLCAieHIiLCAid2UiLCAiTnIiLCAiV2UiLCAiUWUiLCAiVXIiLCAiWGUiLCAicGUiLCAiZXQiLCAiTyIsICJQbyIsICIkciIsICJoZSIsICJ0dCIsICJWciIsICJydCIsICJtZSIsICJxciIsICJFZSIsICJ3IiwgInpyIiwgIkhyIiwgIllyIiwgIkJyIiwgImgiLCAiZiIsICJVIiwgIkdyIiwgIkpyIiwgIktyIiwgImQiLCAiXyIsICJsIiwgInUiLCAiWnIiLCAiV3IiLCAiUXIiLCAiWHIiLCAibnQiLCAiZW4iLCAidG4iLCAib3QiLCAicm4iLCAibm4iLCAib24iLCAic24iLCAiYW4iLCAiU2UiLCAiQ2UiLCAiY24iLCAieSIsICJmbiIsICJkbiIsICJ1biIsICJsbiIsICJDIiwgInBuIiwgImhuIiwgIm1uIiwgInluIiwgImduIiwgIl9uIiwgImJuIiwgIml0IiwgImNlIiwgIkwiLCAidm4iLCAic3QiLCAiJCIsICJXIiwgIlEiLCAieCIsICJ3biIsICJZIiwgIkVuIiwgIkUiLCAicmUiLCAib2UiLCAiWCIsICJIIiwgImtlIiwgImF0IiwgImN0IiwgInV0IiwgImx0IiwgImR0IiwgIlBlIiwgIksiLCAieWUiLCAiUG4iLCAidWUiLCAiU24iLCAiaWUiLCAiQ24iLCAiSiIsICJrbiIsICJfZSIsICJJbiIsICJPbiIsICJUIiwgIkFuIiwgIkllIiwgIlJuIiwgIlRuIiwgImpuIiwgIk1uIiwgIkxuIiwgIkRuIiwgImZ0IiwgIk9lIiwgIkZuIiwgInhuIiwgIlJlIiwgIk5uIiwgIkFlIiwgIlVuIiwgIiRuIiwgIlZuIiwgInFuIiwgInpuIiwgIkhuIiwgIlluIiwgIkJuIiwgIkpuIiwgIktuIiwgIkduIiwgIlpuIiwgIlduIiwgIlFuIiwgIlhuIiwgImVvIiwgInB0IiwgInRvIiwgInJvIiwgIm5vIiwgIm9vIiwgImlvIiwgInNvIiwgImFvIiwgImNvIiwgInVvIiwgImxvIiwgImZvIiwgIm5lIiwgImh0IiwgIkciLCAicG8iLCAiaG8iLCAiVGUiLCAibW8iLCAieW8iLCAiX28iLCAiayIsICJqZSIsICJSIiwgImxlIiwgImdvIiwgIk1lIiwgImJvIiwgInZvIiwgIndvIiwgIkxlIiwgIkRlIiwgIk0iLCAic2UiLCAiQSIsICJGZSIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiZm9ybUNhbGxiYWNrc1JlZiIsICJjYiIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIlpvZEZpZWxkRXJyb3IiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJmaXhQcm90byIsICJ0YXJnZXQiLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyIsICJfZXh0ZW5kU3RhdGljcyIsICJiIiwgInAiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAiZXJyIiwgIlBSX0xPQURJTkciLCAiZXJyX18iLCAiT3B0aW9uYWxGbiIsICJab2RGb3JtQ2FsbGJhY2tzIiwgIl9Gb3JtQ2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrcyIsICJrZXkiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm9iaiIsICJpbnN0YW5jZSIsICJGb3JtQ2FsbGJhY2tzIiwgInVzZVBheW1lbnRSZXF1ZXN0cyIsICJvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0cyIsICJzZXRQYXltZW50UmVxdWVzdHMiLCAib3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQiLCAicGF5bWVudFJlcXVlc3RzMiIsICJGT1JNX1RBUkdFVCIsICJFbGVtZW50c0Zvcm0iLCAib3BGb3JtIiwgInNldE9wRm9ybSIsICJlbGVtZW50c0NvbnRleHRWYWx1ZSIsICJzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJsb2FkZWQiLCAic2V0TG9hZGVkIiwgInN0cmlwZUxpbmtDdHJsIiwgInNldFN0cmlwZUxpbmtDdHJsIiwgImZvcm1DYWxsYmFja3MiLCAidG90YWxBbW91bnRBdG9tcyIsICJjdXJyZW5jeSIsICJfYSIsICJmb3JtIiwgInZhbHVlIiwgImdldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInJlc3VsdCIsICJjaGlsZHJlblByb3BzIiwgIkVsZW1lbnRGcmFtZSIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJlbGVtZW50U3R5bGUiLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEVsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiXQp9Cg==
|