bry-biometric-collector 2.3.1-RC01 → 2.3.1-RC03

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.
@@ -1,2525 +0,0 @@
1
- import { S as Mn, q as Un, r as xi, t as Wn, w as U, x as M, y as F, z as Ke, B as L, $ as yt, C as Vn, D as Se, E as w, G as W, H as he, I as b, J as p, K as f, L as Oe, M as q, N as K, O as m, P as _e, Q as j, R as Wt, T as ft, U as yi, V as dt, W as De, X as Ei, Y as Ye, Z as Vt, _ as ii, a0 as Le, a1 as Ne, a2 as ki, a3 as Kt, a4 as Ht, a5 as Be, a6 as ve, a7 as Me, a8 as Ge, a9 as Ri, aa as Ti, ab as Si, ac as ni, ad as mt, ae as ht, af as jt, ag as Oi, ah as bt, ai as oi, aj as ai, ak as gt, al as Ai, am as Ii, an as Di, ao as wn, ap as pn, aq as Cn, ar as yn, as as si, at as X, j as Yt, au as li, av as _t, aw as qt, ax as Jt, ay as zt, A as ri, az as vt, aA as Xt, aB as En, aC as Bi, d as Ze, aD as ci, aE as kn, aF as Rn, aG as Tn, aH as Sn, aI as xe, aJ as On, aK as Pi, aL as Fi, aM as Lo, aN as Kn, aO as Li, aP as Hn, aQ as jn, aR as qn, aS as An, aT as In, aU as Dn, aV as Bn, aW as $i, aX as No, aY as V, aZ as G, a_ as pt, a$ as le, b0 as Ct, b1 as di, b2 as wt, b3 as Qt, b4 as mi, b5 as Et, b6 as kt, b7 as Rt, b8 as ui, b9 as Pn, ba as Fn, bb as Mo, bc as fi } from "./main_72a0926e_2.3.1-RC01.js";
2
- import { C as J, c as ae, a as Jn, b as zn, T as Xn } from "./TakePictureBtn_ea35191d_2.3.1-RC01.js";
3
- const Ln = "src/lib/faceTab/buttons/capture/autoCaptureBtn/AutoCaptureBtn.svelte";
4
- function Qn(n) {
5
- let e, i, l = (
6
- /*$_*/
7
- n[0]("buttons.startCapture") + ""
8
- ), a, s, o;
9
- const r = {
10
- c: function() {
11
- e = w("div"), i = w("button"), a = W(l), this.c = he, b(i, "class", Se() ? "ce-dui-btn ce-dui-btn-primary text-base text-xl pb-[2px] absolute z-20 bottom-10" : "ce-dui-btn ce-dui-btn-primary text-base text-xl pb-[2px] absolute z-20 bottom-2"), p(i, Ln, 11, 2, 328), b(e, "class", "flex justify-center items-center"), p(e, Ln, 10, 0, 279);
12
- },
13
- l: function(h) {
14
- throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
15
- },
16
- m: function(h, d) {
17
- U(h, e, d), f(e, i), f(i, a), s || (o = Oe(
18
- i,
19
- "click",
20
- /*click_handler*/
21
- n[2],
22
- !1,
23
- !1,
24
- !1,
25
- !1
26
- ), s = !0);
27
- },
28
- p: function(h, [d]) {
29
- d & /*$_*/
30
- 1 && l !== (l = /*$_*/
31
- h[0]("buttons.startCapture") + "") && q(a, l);
32
- },
33
- i: he,
34
- o: he,
35
- d: function(h) {
36
- h && K(e), s = !1, o();
37
- }
38
- };
39
- return M("SvelteRegisterBlock", {
40
- block: r,
41
- id: Qn.name,
42
- type: "component",
43
- source: "",
44
- ctx: n
45
- }), r;
46
- }
47
- function Uo(n, e, i) {
48
- let l, a;
49
- F(Ke, "automaticCapture"), L(n, Ke, (d) => i(3, l = d)), F(yt, "_"), L(n, yt, (d) => i(0, a = d));
50
- let { $$slots: s = {}, $$scope: o } = e;
51
- Vn("start-auto-capture-btn", s, []);
52
- function r() {
53
- m(Ke, l = !0, l);
54
- }
55
- const c = [];
56
- Object.keys(e).forEach((d) => {
57
- !~c.indexOf(d) && d.slice(0, 2) !== "$$" && d !== "slot" && console.warn(`<start-auto-capture-btn> was created with unknown prop '${d}'`);
58
- });
59
- const h = () => r();
60
- return n.$capture_state = () => ({
61
- automaticCapture: Ke,
62
- _: yt,
63
- isMobile: Se,
64
- handleAutoCapture: r,
65
- $automaticCapture: l,
66
- $_: a
67
- }), [a, r, h];
68
- }
69
- class en extends Mn {
70
- constructor(e) {
71
- super(), Un(
72
- this,
73
- {
74
- target: this.shadowRoot,
75
- props: Wn(this.attributes),
76
- customElement: !0
77
- },
78
- Uo,
79
- Qn,
80
- xi,
81
- {},
82
- null
83
- ), e && e.target && U(e.target, this, e.anchor);
84
- }
85
- }
86
- customElements.define("start-auto-capture-btn", en);
87
- const { console: we } = No, E = "src/lib/faceTab/FaceCollector.svelte";
88
- function Nn(n, e, i) {
89
- const l = n.slice();
90
- return l[124] = e[i], l;
91
- }
92
- function Yn(n) {
93
- let e;
94
- const i = {
95
- c: function() {
96
- e = w("idlive-face-capture"), e.hidden = !0, Qt(e, "mask_hidden", ""), Qt(e, "auto_capture_disabled", ""), Qt(e, "auto_close_disabled", ""), Qt(
97
- e,
98
- "device_id",
99
- /*$selectedVideoDeviceId*/
100
- n[22]
101
- ), p(e, E, 1004, 10, 40250);
102
- },
103
- m: function(a, s) {
104
- U(a, e, s), n[52](e);
105
- },
106
- p: function(a, s) {
107
- s[0] & /*$selectedVideoDeviceId*/
108
- 4194304 && Qt(
109
- e,
110
- "device_id",
111
- /*$selectedVideoDeviceId*/
112
- a[22]
113
- );
114
- },
115
- d: function(a) {
116
- a && K(e), n[52](null);
117
- }
118
- };
119
- return M("SvelteRegisterBlock", {
120
- block: i,
121
- id: Yn.name,
122
- type: "if",
123
- source: "(1004:8) {#if isLivenessEnabled()}",
124
- ctx: n
125
- }), i;
126
- }
127
- function Mi(n) {
128
- let e, i, l;
129
- const a = {
130
- c: function() {
131
- e = w("video"), b(e, "id", "bry-cc-camera-video-tag"), b(e, "class", "absolute -z-10"), e.playsInline = !0, e.muted = !0, e.autoplay = !0, p(e, E, 1015, 10, 40638);
132
- },
133
- m: function(o, r) {
134
- U(o, e, r), n[53](e), i || (l = [
135
- Oe(
136
- e,
137
- "canplay",
138
- /*canplay_handler*/
139
- n[54],
140
- !1,
141
- !1,
142
- !1,
143
- !1
144
- ),
145
- Oe(
146
- e,
147
- "play",
148
- /*play*/
149
- n[8],
150
- { once: !0 },
151
- !1,
152
- !1,
153
- !1
154
- )
155
- ], i = !0);
156
- },
157
- p: he,
158
- d: function(o) {
159
- o && K(e), n[53](null), i = !1, mi(l);
160
- }
161
- };
162
- return M("SvelteRegisterBlock", {
163
- block: a,
164
- id: Mi.name,
165
- type: "key",
166
- source: "(1015:8) {#key unique}",
167
- ctx: n
168
- }), a;
169
- }
170
- function Ui(n) {
171
- let e, i;
172
- e = new Hn({ $$inline: !0 });
173
- const l = {
174
- c: function() {
175
- Et(e.$$.fragment);
176
- },
177
- m: function(s, o) {
178
- kt(e, s, o), i = !0;
179
- },
180
- i: function(s) {
181
- i || (G(e.$$.fragment, s), i = !0);
182
- },
183
- o: function(s) {
184
- le(e.$$.fragment, s), i = !1;
185
- },
186
- d: function(s) {
187
- Rt(e, s);
188
- }
189
- };
190
- return M("SvelteRegisterBlock", {
191
- block: l,
192
- id: Ui.name,
193
- type: "if",
194
- source: "(1030:8) {#if showConfigButton && $ready}",
195
- ctx: n
196
- }), l;
197
- }
198
- function Wi(n) {
199
- let e, i;
200
- e = new zn({ $$inline: !0 });
201
- const l = {
202
- c: function() {
203
- Et(e.$$.fragment);
204
- },
205
- m: function(s, o) {
206
- kt(e, s, o), i = !0;
207
- },
208
- i: function(s) {
209
- i || (G(e.$$.fragment, s), i = !0);
210
- },
211
- o: function(s) {
212
- le(e.$$.fragment, s), i = !1;
213
- },
214
- d: function(s) {
215
- Rt(e, s);
216
- }
217
- };
218
- return M("SvelteRegisterBlock", {
219
- block: l,
220
- id: Wi.name,
221
- type: "if",
222
- source: "(1033:8) {#if showCameraButton && $ready}",
223
- ctx: n
224
- }), l;
225
- }
226
- function Vi(n) {
227
- let e, i;
228
- e = new en({ $$inline: !0 });
229
- const l = {
230
- c: function() {
231
- Et(e.$$.fragment);
232
- },
233
- m: function(s, o) {
234
- kt(e, s, o), i = !0;
235
- },
236
- i: function(s) {
237
- i || (G(e.$$.fragment, s), i = !0);
238
- },
239
- o: function(s) {
240
- le(e.$$.fragment, s), i = !1;
241
- },
242
- d: function(s) {
243
- Rt(e, s);
244
- }
245
- };
246
- return M("SvelteRegisterBlock", {
247
- block: l,
248
- id: Vi.name,
249
- type: "if",
250
- source: "(1036:8) {#if showAutoCaptureButton && !$automaticCapture && !showCaptureButton && $ready}",
251
- ctx: n
252
- }), l;
253
- }
254
- function Ki(n) {
255
- let e, i;
256
- e = new Xn({
257
- props: {
258
- disabled: !/*enableCaptureButton*/
259
- n[14] && /*$enableFaceApi*/
260
- n[34] || !/*$ready*/
261
- n[35] && !/*$enableFaceApi*/
262
- n[34],
263
- hidden: (
264
- /*$cameraStatusStore*/
265
- n[21] !== J.OK || j() && /*idrndLoading*/
266
- (n[17] || /*idrndClosed*/
267
- n[18] || /*waitingIdrndCaptureEvent*/
268
- n[19])
269
- ),
270
- handler: (
271
- /*capture*/
272
- n[41]
273
- )
274
- },
275
- $$inline: !0
276
- });
277
- const l = {
278
- c: function() {
279
- Et(e.$$.fragment);
280
- },
281
- m: function(s, o) {
282
- kt(e, s, o), i = !0;
283
- },
284
- p: function(s, o) {
285
- const r = {};
286
- o[0] & /*enableCaptureButton*/
287
- 16384 | o[1] & /*$enableFaceApi, $ready*/
288
- 24 && (r.disabled = !/*enableCaptureButton*/
289
- s[14] && /*$enableFaceApi*/
290
- s[34] || !/*$ready*/
291
- s[35] && !/*$enableFaceApi*/
292
- s[34]), o[0] & /*$cameraStatusStore, idrndLoading, idrndClosed, waitingIdrndCaptureEvent*/
293
- 3014656 && (r.hidden = /*$cameraStatusStore*/
294
- s[21] !== J.OK || j() && /*idrndLoading*/
295
- (s[17] || /*idrndClosed*/
296
- s[18] || /*waitingIdrndCaptureEvent*/
297
- s[19])), e.$set(r);
298
- },
299
- i: function(s) {
300
- i || (G(e.$$.fragment, s), i = !0);
301
- },
302
- o: function(s) {
303
- le(e.$$.fragment, s), i = !1;
304
- },
305
- d: function(s) {
306
- Rt(e, s);
307
- }
308
- };
309
- return M("SvelteRegisterBlock", {
310
- block: l,
311
- id: Ki.name,
312
- type: "if",
313
- source: "(1039:8) {#if showCaptureButton && $ready}",
314
- ctx: n
315
- }), l;
316
- }
317
- function Hi(n) {
318
- let e, i = (
319
- /*$_*/
320
- n[31]("faceCollector.stayStill") + ""
321
- ), l;
322
- const a = {
323
- c: function() {
324
- e = w("span"), l = W(i), b(e, "class", "absolute left-1/2 -translate-x-1/2 ce-dui-badge ce-dui-badge-lg h-[2em] text-2xl xl:text-base w-[12.1em] " + (Se() ? "top-[10%]" : "top-[3%]")), p(e, E, 1057, 10, 42342);
325
- },
326
- m: function(o, r) {
327
- U(o, e, r), f(e, l);
328
- },
329
- p: function(o, r) {
330
- r[1] & /*$_*/
331
- 1 && i !== (i = /*$_*/
332
- o[31]("faceCollector.stayStill") + "") && q(l, i);
333
- },
334
- d: function(o) {
335
- o && K(e);
336
- }
337
- };
338
- return M("SvelteRegisterBlock", {
339
- block: a,
340
- id: Hi.name,
341
- type: "if",
342
- source: "(1057:8) {#if isCountingDown}",
343
- ctx: n
344
- }), a;
345
- }
346
- function ji(n) {
347
- let e, i = (
348
- /*$_*/
349
- n[31](`${/*$faceValidationAlert*/
350
- n[26]}`) + ""
351
- ), l;
352
- const a = {
353
- c: function() {
354
- e = w("span"), l = W(i), b(e, "class", "absolute left-1/2 -translate-x-1/2 ce-dui-badge ce-dui-badge-lg h-[2em] text-2xl xl:text-base w-[12.1em] " + (Se() ? "top-[10%]" : "top-[3%]")), p(e, E, 1064, 10, 42685);
355
- },
356
- m: function(o, r) {
357
- U(o, e, r), f(e, l);
358
- },
359
- p: function(o, r) {
360
- r[0] & /*$faceValidationAlert*/
361
- 67108864 | r[1] & /*$_*/
362
- 1 && i !== (i = /*$_*/
363
- o[31](`${/*$faceValidationAlert*/
364
- o[26]}`) + "") && q(l, i);
365
- },
366
- d: function(o) {
367
- o && K(e);
368
- }
369
- };
370
- return M("SvelteRegisterBlock", {
371
- block: a,
372
- id: ji.name,
373
- type: "if",
374
- source: "(1064:8) {#if $enableFaceApi && !isCountingDown && $faceValidationAlert}",
375
- ctx: n
376
- }), a;
377
- }
378
- function qi(n) {
379
- let e, i, l, a, s;
380
- function o(d, u) {
381
- return (
382
- /*$isLoading*/
383
- d[36] ? Zn : Gn
384
- );
385
- }
386
- let r = o(n), c = r(n);
387
- const h = {
388
- c: function() {
389
- e = w("slot"), i = w("div"), l = w("img"), s = V(), c.c(), ui(l.src, a = $i) || b(l, "src", a), b(l, "alt", "loading gif"), b(l, "class", "m-auto h-[10em] lg:h-[12em]"), p(l, E, 1074, 12, 43200), b(i, "class", "translate-y-1/3 md:translate-y-1/4 xl:translate-y-1/2"), p(i, E, 1073, 10, 43120), b(e, "name", "obtaining-photo-gif"), b(e, "class", "block h-[17em] lg:h-[21.6em] xl:h-[30em]"), p(e, E, 1072, 8, 43027);
390
- },
391
- m: function(u, T) {
392
- U(u, e, T), f(e, i), f(i, l), f(i, s), c.m(i, null);
393
- },
394
- p: function(u, T) {
395
- r === (r = o(u)) && c ? c.p(u, T) : (c.d(1), c = r(u), c && (c.c(), c.m(i, null)));
396
- },
397
- d: function(u) {
398
- u && K(e), c.d();
399
- }
400
- };
401
- return M("SvelteRegisterBlock", {
402
- block: h,
403
- id: qi.name,
404
- type: "if",
405
- source: "(1072:6) {#if isLivenessEnabled() && waitingIdrndCaptureEvent}",
406
- ctx: n
407
- }), h;
408
- }
409
- function Gn(n) {
410
- let e, i = (
411
- /*$_*/
412
- n[31]("faceCollector.obtainingPicture") + ""
413
- ), l;
414
- const a = {
415
- c: function() {
416
- e = w("span"), l = W(i), b(e, "class", "2xl:text-2xl lg:text-2xl text-md block p-2 m-auto text-center"), p(e, E, 1078, 14, 43458);
417
- },
418
- m: function(o, r) {
419
- U(o, e, r), f(e, l);
420
- },
421
- p: function(o, r) {
422
- r[1] & /*$_*/
423
- 1 && i !== (i = /*$_*/
424
- o[31]("faceCollector.obtainingPicture") + "") && q(l, i);
425
- },
426
- d: function(o) {
427
- o && K(e);
428
- }
429
- };
430
- return M("SvelteRegisterBlock", {
431
- block: a,
432
- id: Gn.name,
433
- type: "else",
434
- source: "(1078:12) {:else}",
435
- ctx: n
436
- }), a;
437
- }
438
- function Zn(n) {
439
- let e;
440
- const i = {
441
- c: function() {
442
- e = w("span"), e.textContent = "Obtaining photo...", b(e, "class", "2xl:text-2xl lg:text-2xl text-md block p-2 m-auto text-center"), p(e, E, 1076, 14, 43322);
443
- },
444
- m: function(a, s) {
445
- U(a, e, s);
446
- },
447
- p: he,
448
- d: function(a) {
449
- a && K(e);
450
- }
451
- };
452
- return M("SvelteRegisterBlock", {
453
- block: i,
454
- id: Zn.name,
455
- type: "if",
456
- source: "(1076:12) {#if $isLoading}",
457
- ctx: n
458
- }), i;
459
- }
460
- function Ji(n) {
461
- let e, i, l, a, s;
462
- function o(d, u) {
463
- return (
464
- /*$isLoading*/
465
- d[36] ? $n : xn
466
- );
467
- }
468
- let r = o(n), c = r(n);
469
- const h = {
470
- c: function() {
471
- e = w("slot"), i = w("div"), l = w("img"), s = V(), c.c(), ui(l.src, a = $i) || b(l, "src", a), b(l, "alt", "loading gif"), b(l, "class", "m-auto h-[10em] lg:h-[12em]"), p(l, E, 1088, 12, 43990), b(i, "class", "translate-y-1/3 md:translate-y-1/4 xl:translate-y-1/2"), p(i, E, 1087, 10, 43910), b(e, "name", "loading-camera-gif"), b(e, "class", "block h-[17em] lg:h-[21.6em] xl:h-[30em]"), p(e, E, 1086, 8, 43818);
472
- },
473
- m: function(u, T) {
474
- U(u, e, T), f(e, i), f(i, l), f(i, s), c.m(i, null);
475
- },
476
- p: function(u, T) {
477
- r === (r = o(u)) && c ? c.p(u, T) : (c.d(1), c = r(u), c && (c.c(), c.m(i, null)));
478
- },
479
- d: function(u) {
480
- u && K(e), c.d();
481
- }
482
- };
483
- return M("SvelteRegisterBlock", {
484
- block: h,
485
- id: Ji.name,
486
- type: "if",
487
- source: "(1086:6) {#if ((isLivenessEnabled() && idrndLoading) || (!isLivenessEnabled() && !$ready)) && $cameraStatusStore === CameraStatusEnum.OK}",
488
- ctx: n
489
- }), h;
490
- }
491
- function xn(n) {
492
- let e, i = (
493
- /*$_*/
494
- n[31]("faceCollector.initiatingCamera") + ""
495
- ), l;
496
- const a = {
497
- c: function() {
498
- e = w("span"), l = W(i), b(e, "class", "2xl:text-2xl lg:text-2xl text-md block p-2 m-auto text-center"), p(e, E, 1092, 14, 44247);
499
- },
500
- m: function(o, r) {
501
- U(o, e, r), f(e, l);
502
- },
503
- p: function(o, r) {
504
- r[1] & /*$_*/
505
- 1 && i !== (i = /*$_*/
506
- o[31]("faceCollector.initiatingCamera") + "") && q(l, i);
507
- },
508
- d: function(o) {
509
- o && K(e);
510
- }
511
- };
512
- return M("SvelteRegisterBlock", {
513
- block: a,
514
- id: xn.name,
515
- type: "else",
516
- source: "(1092:12) {:else}",
517
- ctx: n
518
- }), a;
519
- }
520
- function $n(n) {
521
- let e;
522
- const i = {
523
- c: function() {
524
- e = w("span"), e.textContent = "Loading camera...", b(e, "class", "2xl:text-2xl lg:text-2xl text-md block p-2 m-auto text-center"), p(e, E, 1090, 14, 44112);
525
- },
526
- m: function(a, s) {
527
- U(a, e, s);
528
- },
529
- p: he,
530
- d: function(a) {
531
- a && K(e);
532
- }
533
- };
534
- return M("SvelteRegisterBlock", {
535
- block: i,
536
- id: $n.name,
537
- type: "if",
538
- source: "(1090:12) {#if $isLoading}",
539
- ctx: n
540
- }), i;
541
- }
542
- function zi(n) {
543
- let e, i, l = (
544
- /*$_*/
545
- n[31]("faceCollector.finish") + ""
546
- ), a, s, o, r, c = (
547
- /*$_*/
548
- n[31]("faceCollector.retakePhoto") + ""
549
- ), h, d, u;
550
- const T = {
551
- c: function() {
552
- e = w("div"), i = w("button"), a = W(l), o = V(), r = w("button"), h = W(c), i.disabled = s = /*$justification*/
553
- n[28].length === 0, b(i, "class", "ce-dui-btn ce-dui-btn-primary ce-dui-btn-block flex-shrink"), p(i, E, 1101, 10, 44540), b(r, "id", "bry-cc-retake-button"), b(r, "class", "ce-dui-btn ce-dui-btn-block ce-dui-btn-outline flex-shrink"), p(r, E, 1106, 10, 44773), b(e, "class", "ce-dui-btn-group flex"), p(e, E, 1100, 8, 44494);
554
- },
555
- m: function(g, _) {
556
- U(g, e, _), f(e, i), f(i, a), f(e, o), f(e, r), f(r, h), d || (u = [
557
- Oe(
558
- i,
559
- "click",
560
- /*click_handler*/
561
- n[58],
562
- !1,
563
- !1,
564
- !1,
565
- !1
566
- ),
567
- Oe(
568
- r,
569
- "click",
570
- /*click_handler_1*/
571
- n[59],
572
- !1,
573
- !1,
574
- !1,
575
- !1
576
- )
577
- ], d = !0);
578
- },
579
- p: function(g, _) {
580
- _[1] & /*$_*/
581
- 1 && l !== (l = /*$_*/
582
- g[31]("faceCollector.finish") + "") && q(a, l), _[0] & /*$justification*/
583
- 268435456 && s !== (s = /*$justification*/
584
- g[28].length === 0) && di(i, "disabled", s), _[1] & /*$_*/
585
- 1 && c !== (c = /*$_*/
586
- g[31]("faceCollector.retakePhoto") + "") && q(h, c);
587
- },
588
- d: function(g) {
589
- g && K(e), d = !1, mi(u);
590
- }
591
- };
592
- return M("SvelteRegisterBlock", {
593
- block: T,
594
- id: zi.name,
595
- type: "if",
596
- source: "(1100:6) {#if $captured}",
597
- ctx: n
598
- }), T;
599
- }
600
- function eo(n) {
601
- let e, i;
602
- e = new Jn({
603
- props: { handler: (
604
- /*func*/
605
- n[68]
606
- ) },
607
- $$inline: !0
608
- });
609
- const l = {
610
- c: function() {
611
- Et(e.$$.fragment);
612
- },
613
- m: function(s, o) {
614
- kt(e, s, o), i = !0;
615
- },
616
- p: he,
617
- i: function(s) {
618
- i || (G(e.$$.fragment, s), i = !0);
619
- },
620
- o: function(s) {
621
- le(e.$$.fragment, s), i = !1;
622
- },
623
- d: function(s) {
624
- Rt(e, s);
625
- }
626
- };
627
- return M("SvelteRegisterBlock", {
628
- block: l,
629
- id: eo.name,
630
- type: "if",
631
- source: "(1251:55) ",
632
- ctx: n
633
- }), l;
634
- }
635
- function to(n) {
636
- let e, i, l, a, s, o, r, c, h;
637
- const d = [
638
- so,
639
- ao,
640
- oo,
641
- no,
642
- io
643
- ], u = [];
644
- function T(g, _) {
645
- return (
646
- /*$captured*/
647
- g[23] ? (
648
- /*$unconformitiesStore*/
649
- g[32].isLoading ? 1 : (
650
- /*$requestResult*/
651
- g[30] !== X.OK ? 2 : (
652
- /*$saved*/
653
- g[27] ? 4 : 3
654
- )
655
- )
656
- ) : 0
657
- );
658
- }
659
- o = T(n), r = u[o] = d[o](n);
660
- const O = {
661
- c: function() {
662
- e = w("div"), i = w("img"), s = V(), r.c(), b(i, "class", "m-auto col-start-1 col-end-1 max-h-[23.2em]"), ui(i.src, l = /*$dataTypePrefix*/
663
- n[33] + "," + /*$image*/
664
- n[29]) || b(i, "src", l), i.hidden = a = !/*$captured*/
665
- n[23] || !/*$showFaceWhileValidating*/
666
- n[37] && /*$unconformitiesStore*/
667
- n[32].isLoading, b(i, "alt", ""), p(i, E, 1122, 6, 45385), b(e, "class", c = "grid-cols-1 grid-rows-2 sm:grid-cols-2 sm:grid-rows-1 gap-[.5em] " + (!/*$showFaceWhileValidating*/
668
- n[37] && /*$unconformitiesStore*/
669
- n[32].isLoading ? "absolute -translate-y-1/2 -translate-x-1/2 top-1/2 left-1/2 overflow-visible" : "grid overflow-hidden")), p(e, E, 1116, 4, 45099);
670
- },
671
- m: function(_, C) {
672
- U(_, e, C), f(e, i), f(e, s), u[o].m(e, null), h = !0;
673
- },
674
- p: function(_, C) {
675
- (!h || C[0] & /*$image*/
676
- 536870912 | C[1] & /*$dataTypePrefix*/
677
- 4 && !ui(i.src, l = /*$dataTypePrefix*/
678
- _[33] + "," + /*$image*/
679
- _[29])) && b(i, "src", l), (!h || C[0] & /*$captured*/
680
- 8388608 | C[1] & /*$showFaceWhileValidating, $unconformitiesStore*/
681
- 66 && a !== (a = !/*$captured*/
682
- _[23] || !/*$showFaceWhileValidating*/
683
- _[37] && /*$unconformitiesStore*/
684
- _[32].isLoading)) && di(i, "hidden", a);
685
- let v = o;
686
- o = T(_), o === v ? u[o].p(_, C) : (pt(), le(u[v], 1, 1, () => {
687
- u[v] = null;
688
- }), Ct(), r = u[o], r ? r.p(_, C) : (r = u[o] = d[o](_), r.c()), G(r, 1), r.m(e, null)), (!h || C[1] & /*$showFaceWhileValidating, $unconformitiesStore*/
689
- 66 && c !== (c = "grid-cols-1 grid-rows-2 sm:grid-cols-2 sm:grid-rows-1 gap-[.5em] " + (!/*$showFaceWhileValidating*/
690
- _[37] && /*$unconformitiesStore*/
691
- _[32].isLoading ? "absolute -translate-y-1/2 -translate-x-1/2 top-1/2 left-1/2 overflow-visible" : "grid overflow-hidden"))) && b(e, "class", c);
692
- },
693
- i: function(_) {
694
- h || (G(r), h = !0);
695
- },
696
- o: function(_) {
697
- le(r), h = !1;
698
- },
699
- d: function(_) {
700
- _ && K(e), u[o].d();
701
- }
702
- };
703
- return M("SvelteRegisterBlock", {
704
- block: O,
705
- id: to.name,
706
- type: "if",
707
- source: "(1116:2) {#if (!idrndClosed || $captured) && showUnconformities}",
708
- ctx: n
709
- }), O;
710
- }
711
- function io(n) {
712
- let e, i, l = (
713
- /*$_*/
714
- n[31]("faceCollector.captured") + ""
715
- ), a, s, o, r, c, h = (
716
- /*$_*/
717
- n[31]("faceCollector.retakePhoto") + ""
718
- ), d, u, T = Yt(qn).faceStrategy !== Kn.DISABLED, O, g, _, C = (
719
- /*$unconformitiesStore*/
720
- n[32].unconformities.length !== 0 && Xi(n)
721
- ), v = T && lo(n);
722
- const N = {
723
- c: function() {
724
- e = w("div"), i = w("h1"), a = W(l), s = V(), C && C.c(), o = V(), r = w("div"), c = w("button"), d = W(h), u = V(), v && v.c(), b(i, "class", "text-3xl font-bold pb-[1em] transition-opacity"), p(i, E, 1223, 10, 50510), b(c, "id", "bry-cc-retake-button"), b(c, "class", "ce-dui-btn ce-dui-btn-block flex-shrink text-base"), p(c, E, 1237, 12, 51211), b(r, "class", "flex flex-row"), Fn(r, "ce-dui-btn-group", !/*$exportButtonDisabled*/
725
- n[38]), p(r, E, 1236, 10, 51123), p(e, E, 1222, 8, 50494);
726
- },
727
- m: function(A, k) {
728
- U(A, e, k), f(e, i), f(i, a), f(e, s), C && C.m(e, null), f(e, o), f(e, r), f(r, c), f(c, d), f(r, u), v && v.m(r, null), O = !0, g || (_ = Oe(
729
- c,
730
- "click",
731
- /*click_handler_6*/
732
- n[67],
733
- !1,
734
- !1,
735
- !1,
736
- !1
737
- ), g = !0);
738
- },
739
- p: function(A, k) {
740
- (!O || k[1] & /*$_*/
741
- 1) && l !== (l = /*$_*/
742
- A[31]("faceCollector.captured") + "") && q(a, l), /*$unconformitiesStore*/
743
- A[32].unconformities.length !== 0 ? C ? C.p(A, k) : (C = Xi(A), C.c(), C.m(e, o)) : C && (C.d(1), C = null), (!O || k[1] & /*$_*/
744
- 1) && h !== (h = /*$_*/
745
- A[31]("faceCollector.retakePhoto") + "") && q(d, h), (!O || k[1] & /*$exportButtonDisabled*/
746
- 128) && Fn(r, "ce-dui-btn-group", !/*$exportButtonDisabled*/
747
- A[38]);
748
- },
749
- i: function(A) {
750
- O || (G(v), O = !0);
751
- },
752
- o: function(A) {
753
- le(v), O = !1;
754
- },
755
- d: function(A) {
756
- A && K(e), C && C.d(), v && v.d(), g = !1, _();
757
- }
758
- };
759
- return M("SvelteRegisterBlock", {
760
- block: N,
761
- id: io.name,
762
- type: "else",
763
- source: "(1222:6) {:else}",
764
- ctx: n
765
- }), N;
766
- }
767
- function no(n) {
768
- let e, i, l = (
769
- /*evaluatePhoto*/
770
- (n[1] ? (
771
- /*$_*/
772
- n[31]("faceCollector.unconformities")
773
- ) : (
774
- /*$_*/
775
- n[31]("faceCollector.previewCapture")
776
- )) + ""
777
- ), a, s, o, r, c, h, d = (
778
- /*$unconformitiesStore*/
779
- n[32].unconformities
780
- );
781
- Pn(d);
782
- let u = [];
783
- for (let C = 0; C < d.length; C += 1)
784
- u[C] = Qi(Nn(n, d, C));
785
- let T = (
786
- /*evaluatePhoto*/
787
- n[1] && /*$unconformitiesStore*/
788
- n[32].unconformities.length == 0 && Yi(n)
789
- ), O = (
790
- /*showJustificationField*/
791
- n[7] && Gi(n)
792
- ), g = (
793
- /*$captured*/
794
- n[23] && Zi(n)
795
- );
796
- const _ = {
797
- c: function() {
798
- e = w("div"), i = w("h1"), a = W(l), s = V(), o = w("div");
799
- for (let v = 0; v < u.length; v += 1)
800
- u[v].c();
801
- r = V(), T && T.c(), c = V(), O && O.c(), h = V(), g && g.c(), b(i, "class", "text-3xl font-bold transition-opacity"), p(i, E, 1173, 10, 48169), b(o, "class", "flex flex-wrap"), p(o, E, 1174, 10, 48327), b(e, "class", "flex flex-col justify-between"), p(e, E, 1172, 8, 48115);
802
- },
803
- m: function(v, N) {
804
- U(v, e, N), f(e, i), f(i, a), f(e, s), f(e, o);
805
- for (let I = 0; I < u.length; I += 1)
806
- u[I] && u[I].m(o, null);
807
- f(o, r), T && T.m(o, null), f(e, c), O && O.m(e, null), f(e, h), g && g.m(e, null);
808
- },
809
- p: function(v, N) {
810
- if (N[0] & /*evaluatePhoto*/
811
- 2 | N[1] & /*$_*/
812
- 1 && l !== (l = /*evaluatePhoto*/
813
- (v[1] ? (
814
- /*$_*/
815
- v[31]("faceCollector.unconformities")
816
- ) : (
817
- /*$_*/
818
- v[31]("faceCollector.previewCapture")
819
- )) + "") && q(a, l), N[1] & /*$unconformitiesStore*/
820
- 2) {
821
- d = /*$unconformitiesStore*/
822
- v[32].unconformities, Pn(d);
823
- let I;
824
- for (I = 0; I < d.length; I += 1) {
825
- const A = Nn(v, d, I);
826
- u[I] ? u[I].p(A, N) : (u[I] = Qi(A), u[I].c(), u[I].m(o, r));
827
- }
828
- for (; I < u.length; I += 1)
829
- u[I].d(1);
830
- u.length = d.length;
831
- }
832
- /*evaluatePhoto*/
833
- v[1] && /*$unconformitiesStore*/
834
- v[32].unconformities.length == 0 ? T ? T.p(v, N) : (T = Yi(v), T.c(), T.m(o, null)) : T && (T.d(1), T = null), /*showJustificationField*/
835
- v[7] ? O ? O.p(v, N) : (O = Gi(v), O.c(), O.m(e, h)) : O && (O.d(1), O = null), /*$captured*/
836
- v[23] ? g ? g.p(v, N) : (g = Zi(v), g.c(), g.m(e, null)) : g && (g.d(1), g = null);
837
- },
838
- i: he,
839
- o: he,
840
- d: function(v) {
841
- v && K(e), Mo(u, v), T && T.d(), O && O.d(), g && g.d();
842
- }
843
- };
844
- return M("SvelteRegisterBlock", {
845
- block: _,
846
- id: no.name,
847
- type: "if",
848
- source: "(1172:24) ",
849
- ctx: n
850
- }), _;
851
- }
852
- function oo(n) {
853
- let e, i, l, a, s = (
854
- /*$_*/
855
- n[31]("faceCollector.finish") + ""
856
- ), o, r, c, h = (
857
- /*$_*/
858
- n[31]("faceCollector.retakePhoto") + ""
859
- ), d, u, T;
860
- function O(v, N) {
861
- return (
862
- /*$requestResult*/
863
- v[30] === X.LIVENESS_DETECTION_FAILURE || /*$requestResult*/
864
- v[30] === X.UNKNOWN_LIVENESS_ERROR ? ho : (
865
- /*$requestResult*/
866
- v[30] === X.LOW_LIVENESS_SCORE ? mo : (
867
- /*$requestResult*/
868
- v[30] === X.TEMPLATE_EXTRACTION_ERROR || /*$requestResult*/
869
- v[30] === X.UNKNOWN_TEMPLATE_EXTRACTION_ERROR ? fo : (
870
- /*$requestResult*/
871
- v[30] === X.UNABLE_TO_COMMUNICATE_WITH_TEMPLATE_EXTRACTION_SERVICE ? uo : (
872
- /*$requestResult*/
873
- v[30] === X.LIVENESS_EVALUATION_ERROR ? co : ro
874
- )
875
- )
876
- )
877
- )
878
- );
879
- }
880
- let g = O(n), _ = g(n);
881
- const C = {
882
- c: function() {
883
- e = w("div"), _.c(), i = V(), l = w("div"), a = w("button"), o = W(s), r = V(), c = w("button"), d = W(h), a.disabled = !0, b(a, "class", "ce-dui-btn ce-dui-btn-primary ce-dui-btn-block flex-shrink"), p(a, E, 1161, 12, 47639), b(c, "id", "bry-cc-retake-button"), b(c, "class", "ce-dui-btn ce-dui-btn-block ce-dui-btn-outline flex-shrink"), p(c, E, 1164, 12, 47825), b(l, "class", "ce-dui-btn-group flex"), p(l, E, 1160, 10, 47591), b(e, "class", "flex flex-col justify-between"), p(e, E, 1136, 8, 45999);
884
- },
885
- m: function(N, I) {
886
- U(N, e, I), _.m(e, null), f(e, i), f(e, l), f(l, a), f(a, o), f(l, r), f(l, c), f(c, d), u || (T = [
887
- Oe(
888
- a,
889
- "click",
890
- /*click_handler_2*/
891
- n[61],
892
- !1,
893
- !1,
894
- !1,
895
- !1
896
- ),
897
- Oe(
898
- c,
899
- "click",
900
- /*click_handler_3*/
901
- n[62],
902
- !1,
903
- !1,
904
- !1,
905
- !1
906
- )
907
- ], u = !0);
908
- },
909
- p: function(N, I) {
910
- g === (g = O(N)) && _ ? _.p(N, I) : (_.d(1), _ = g(N), _ && (_.c(), _.m(e, i))), I[1] & /*$_*/
911
- 1 && s !== (s = /*$_*/
912
- N[31]("faceCollector.finish") + "") && q(o, s), I[1] & /*$_*/
913
- 1 && h !== (h = /*$_*/
914
- N[31]("faceCollector.retakePhoto") + "") && q(d, h);
915
- },
916
- i: he,
917
- o: he,
918
- d: function(N) {
919
- N && K(e), _.d(), u = !1, mi(T);
920
- }
921
- };
922
- return M("SvelteRegisterBlock", {
923
- block: C,
924
- id: oo.name,
925
- type: "if",
926
- source: "(1136:56) ",
927
- ctx: n
928
- }), C;
929
- }
930
- function ao(n) {
931
- let e, i, l = (
932
- /*$_*/
933
- n[31]("faceCollector.validating") + ""
934
- ), a, s, o;
935
- const r = {
936
- c: function() {
937
- e = w("div"), i = w("h1"), a = W(l), s = V(), o = w("div"), b(i, "class", "inline-block text-3xl font-bold pb-[1em] transition-opacity"), p(i, E, 1132, 10, 45754), b(o, "class", "ml-6 inline-block dot-typing"), p(o, E, 1133, 10, 45874), b(e, "class", "min-w-[200px]"), p(e, E, 1131, 8, 45716);
938
- },
939
- m: function(h, d) {
940
- U(h, e, d), f(e, i), f(i, a), f(e, s), f(e, o);
941
- },
942
- p: function(h, d) {
943
- d[1] & /*$_*/
944
- 1 && l !== (l = /*$_*/
945
- h[31]("faceCollector.validating") + "") && q(a, l);
946
- },
947
- i: he,
948
- o: he,
949
- d: function(h) {
950
- h && K(e);
951
- }
952
- };
953
- return M("SvelteRegisterBlock", {
954
- block: r,
955
- id: ao.name,
956
- type: "if",
957
- source: "(1131:47) ",
958
- ctx: n
959
- }), r;
960
- }
961
- function so(n) {
962
- let e;
963
- const i = {
964
- c: function() {
965
- e = w("div"), b(e, "class", ""), p(e, E, 1129, 8, 45643);
966
- },
967
- m: function(a, s) {
968
- U(a, e, s);
969
- },
970
- p: he,
971
- i: he,
972
- o: he,
973
- d: function(a) {
974
- a && K(e);
975
- }
976
- };
977
- return M("SvelteRegisterBlock", {
978
- block: i,
979
- id: so.name,
980
- type: "if",
981
- source: "(1129:6) {#if !$captured}",
982
- ctx: n
983
- }), i;
984
- }
985
- function Xi(n) {
986
- let e, i, l = (
987
- /*$_*/
988
- n[31]("faceCollector.justification") + ""
989
- ), a, s, o, r, c;
990
- const h = {
991
- c: function() {
992
- e = w("label"), i = w("span"), a = W(l), s = V(), o = w("textarea"), b(i, "class", "ce-dui-label-text text-base"), p(i, E, 1227, 14, 50746), b(e, "class", "ce-dui-label"), b(e, "for", "justification"), p(e, E, 1226, 12, 50683), b(o, "contenteditable", ""), b(o, "id", "justification"), b(o, "class", "ce-dui-textarea ce-dui-textarea-bordered textarea-ghost h-[6em] w-full text-base"), p(o, E, 1229, 12, 50864);
993
- },
994
- m: function(u, T) {
995
- U(u, e, T), f(e, i), f(i, a), U(u, s, T), U(u, o, T), fi(
996
- o,
997
- /*$justification*/
998
- n[28]
999
- ), r || (c = Oe(
1000
- o,
1001
- "input",
1002
- /*textarea_input_handler_1*/
1003
- n[66]
1004
- ), r = !0);
1005
- },
1006
- p: function(u, T) {
1007
- T[1] & /*$_*/
1008
- 1 && l !== (l = /*$_*/
1009
- u[31]("faceCollector.justification") + "") && q(a, l), T[0] & /*$justification*/
1010
- 268435456 && fi(
1011
- o,
1012
- /*$justification*/
1013
- u[28]
1014
- );
1015
- },
1016
- d: function(u) {
1017
- u && K(e), u && K(s), u && K(o), r = !1, c();
1018
- }
1019
- };
1020
- return M("SvelteRegisterBlock", {
1021
- block: h,
1022
- id: Xi.name,
1023
- type: "if",
1024
- source: "(1226:10) {#if $unconformitiesStore.unconformities.length !== 0}",
1025
- ctx: n
1026
- }), h;
1027
- }
1028
- function lo(n) {
1029
- let e, i;
1030
- e = new jn({
1031
- props: { cssClass: "ce-dui-btn-block flex-shrink" },
1032
- $$inline: !0
1033
- });
1034
- const l = {
1035
- c: function() {
1036
- Et(e.$$.fragment);
1037
- },
1038
- m: function(s, o) {
1039
- kt(e, s, o), i = !0;
1040
- },
1041
- i: function(s) {
1042
- i || (G(e.$$.fragment, s), i = !0);
1043
- },
1044
- o: function(s) {
1045
- le(e.$$.fragment, s), i = !1;
1046
- },
1047
- d: function(s) {
1048
- Rt(e, s);
1049
- }
1050
- };
1051
- return M("SvelteRegisterBlock", {
1052
- block: l,
1053
- id: lo.name,
1054
- type: "if",
1055
- source: "(1243:12) {#if get(enableStrategy).faceStrategy !== FaceExportStrategy.DISABLED}",
1056
- ctx: n
1057
- }), l;
1058
- }
1059
- function Qi(n) {
1060
- let e, i = (
1061
- /*unconformity*/
1062
- n[124] + ""
1063
- ), l;
1064
- const a = {
1065
- c: function() {
1066
- e = w("div"), l = W(i), b(e, "class", "ce-dui-badge ce-dui-badge-lg h-[2em] ce-dui-badge-error text-xl pb-[.25em] m-[.5em]"), p(e, E, 1176, 14, 48442);
1067
- },
1068
- m: function(o, r) {
1069
- U(o, e, r), f(e, l);
1070
- },
1071
- p: function(o, r) {
1072
- r[1] & /*$unconformitiesStore*/
1073
- 2 && i !== (i = /*unconformity*/
1074
- o[124] + "") && q(l, i);
1075
- },
1076
- d: function(o) {
1077
- o && K(e);
1078
- }
1079
- };
1080
- return M("SvelteRegisterBlock", {
1081
- block: a,
1082
- id: Qi.name,
1083
- type: "each",
1084
- source: "(1176:12) {#each $unconformitiesStore.unconformities as unconformity}",
1085
- ctx: n
1086
- }), a;
1087
- }
1088
- function Yi(n) {
1089
- let e, i = (
1090
- /*$_*/
1091
- n[31]("faceCollector.noNonconformity") + ""
1092
- ), l;
1093
- const a = {
1094
- c: function() {
1095
- e = w("div"), l = W(i), b(e, "class", "ce-dui-badge ce-dui-badge-lg h-[2em] ce-dui-badge-info text-xl pb-[.25em] m-[.5em]"), p(e, E, 1181, 12, 48707);
1096
- },
1097
- m: function(o, r) {
1098
- U(o, e, r), f(e, l);
1099
- },
1100
- p: function(o, r) {
1101
- r[1] & /*$_*/
1102
- 1 && i !== (i = /*$_*/
1103
- o[31]("faceCollector.noNonconformity") + "") && q(l, i);
1104
- },
1105
- d: function(o) {
1106
- o && K(e);
1107
- }
1108
- };
1109
- return M("SvelteRegisterBlock", {
1110
- block: a,
1111
- id: Yi.name,
1112
- type: "if",
1113
- source: "(1181:12) {#if evaluatePhoto && $unconformitiesStore.unconformities.length == 0}",
1114
- ctx: n
1115
- }), a;
1116
- }
1117
- function Gi(n) {
1118
- let e, i, l, a = (
1119
- /*$_*/
1120
- n[31]("faceCollector.provideAReasonForTheLowQualityCapture") + ""
1121
- ), s, o, r, c, h, d, u, T, O = (
1122
- /*$_*/
1123
- n[31]("faceCollector.thisInformationIsRequired") + ""
1124
- ), g, _, C, v;
1125
- const N = {
1126
- c: function() {
1127
- e = w("div"), i = w("label"), l = w("span"), s = W(a), o = V(), r = w("textarea"), h = V(), d = w("label"), u = w("span"), T = W("("), g = W(O), _ = W(")"), b(l, "class", "ce-dui-label-text text-base"), p(l, E, 1189, 16, 49074), b(i, "class", "ce-dui-label"), b(i, "for", "justification"), p(i, E, 1188, 14, 49009), b(r, "contenteditable", ""), b(r, "id", "justification"), b(r, "class", "ce-dui-textarea ce-dui-textarea-bordered h-[6em] text-base"), b(r, "placeholder", c = /*$_*/
1128
- n[31]("faceCollector.yourJustification")), p(r, E, 1193, 14, 49256), b(u, "class", "ce-dui-label-text-alt text-base"), p(u, E, 1201, 16, 49624), b(d, "class", "ce-dui-label"), b(d, "for", "justification"), p(d, E, 1200, 14, 49559), b(e, "class", "ce-dui-form-control"), p(e, E, 1187, 12, 48961);
1129
- },
1130
- m: function(A, k) {
1131
- U(A, e, k), f(e, i), f(i, l), f(l, s), f(e, o), f(e, r), fi(
1132
- r,
1133
- /*$justification*/
1134
- n[28]
1135
- ), f(e, h), f(e, d), f(d, u), f(u, T), f(u, g), f(u, _), C || (v = Oe(
1136
- r,
1137
- "input",
1138
- /*textarea_input_handler*/
1139
- n[63]
1140
- ), C = !0);
1141
- },
1142
- p: function(A, k) {
1143
- k[1] & /*$_*/
1144
- 1 && a !== (a = /*$_*/
1145
- A[31]("faceCollector.provideAReasonForTheLowQualityCapture") + "") && q(s, a), k[1] & /*$_*/
1146
- 1 && c !== (c = /*$_*/
1147
- A[31]("faceCollector.yourJustification")) && b(r, "placeholder", c), k[0] & /*$justification*/
1148
- 268435456 && fi(
1149
- r,
1150
- /*$justification*/
1151
- A[28]
1152
- ), k[1] & /*$_*/
1153
- 1 && O !== (O = /*$_*/
1154
- A[31]("faceCollector.thisInformationIsRequired") + "") && q(g, O);
1155
- },
1156
- d: function(A) {
1157
- A && K(e), C = !1, v();
1158
- }
1159
- };
1160
- return M("SvelteRegisterBlock", {
1161
- block: N,
1162
- id: Gi.name,
1163
- type: "if",
1164
- source: "(1187:10) {#if showJustificationField}",
1165
- ctx: n
1166
- }), N;
1167
- }
1168
- function Zi(n) {
1169
- let e, i, l = (
1170
- /*$_*/
1171
- n[31]("faceCollector.finish") + ""
1172
- ), a, s, o, r, c = (
1173
- /*$_*/
1174
- n[31]("faceCollector.retakePhoto") + ""
1175
- ), h, d, u;
1176
- const T = {
1177
- c: function() {
1178
- e = w("div"), i = w("button"), a = W(l), o = V(), r = w("button"), h = W(c), i.disabled = s = /*$justification*/
1179
- n[28].length === 0 && /*showJustificationField*/
1180
- n[7], b(i, "class", "ce-dui-btn ce-dui-btn-primary ce-dui-btn-block flex-shrink text-base"), p(i, E, 1207, 14, 49873), b(r, "id", "bry-cc-retake-button"), b(r, "class", "ce-dui-btn ce-dui-btn-block ce-dui-btn-outline flex-shrink text-base"), p(r, E, 1213, 14, 50179), b(e, "class", "ce-dui-btn-group flex"), p(e, E, 1206, 12, 49823);
1181
- },
1182
- m: function(g, _) {
1183
- U(g, e, _), f(e, i), f(i, a), f(e, o), f(e, r), f(r, h), d || (u = [
1184
- Oe(
1185
- i,
1186
- "click",
1187
- /*click_handler_4*/
1188
- n[64],
1189
- !1,
1190
- !1,
1191
- !1,
1192
- !1
1193
- ),
1194
- Oe(
1195
- r,
1196
- "click",
1197
- /*click_handler_5*/
1198
- n[65],
1199
- !1,
1200
- !1,
1201
- !1,
1202
- !1
1203
- )
1204
- ], d = !0);
1205
- },
1206
- p: function(g, _) {
1207
- _[1] & /*$_*/
1208
- 1 && l !== (l = /*$_*/
1209
- g[31]("faceCollector.finish") + "") && q(a, l), _[0] & /*$justification, showJustificationField*/
1210
- 268435584 && s !== (s = /*$justification*/
1211
- g[28].length === 0 && /*showJustificationField*/
1212
- g[7]) && di(i, "disabled", s), _[1] & /*$_*/
1213
- 1 && c !== (c = /*$_*/
1214
- g[31]("faceCollector.retakePhoto") + "") && q(h, c);
1215
- },
1216
- d: function(g) {
1217
- g && K(e), d = !1, mi(u);
1218
- }
1219
- };
1220
- return M("SvelteRegisterBlock", {
1221
- block: T,
1222
- id: Zi.name,
1223
- type: "if",
1224
- source: "(1206:10) {#if $captured}",
1225
- ctx: n
1226
- }), T;
1227
- }
1228
- function ro(n) {
1229
- let e, i = (
1230
- /*$_*/
1231
- n[31]("faceCollector.everythingOk") + ""
1232
- ), l;
1233
- const a = {
1234
- c: function() {
1235
- e = w("h1"), l = W(i), b(e, "class", "text-3xl font-bold pb-[1em] transition-opacity"), p(e, E, 1158, 12, 47466);
1236
- },
1237
- m: function(o, r) {
1238
- U(o, e, r), f(e, l);
1239
- },
1240
- p: function(o, r) {
1241
- r[1] & /*$_*/
1242
- 1 && i !== (i = /*$_*/
1243
- o[31]("faceCollector.everythingOk") + "") && q(l, i);
1244
- },
1245
- d: function(o) {
1246
- o && K(e);
1247
- }
1248
- };
1249
- return M("SvelteRegisterBlock", {
1250
- block: a,
1251
- id: ro.name,
1252
- type: "else",
1253
- source: "(1158:10) {:else}",
1254
- ctx: n
1255
- }), a;
1256
- }
1257
- function co(n) {
1258
- let e, i = (
1259
- /*$_*/
1260
- n[31]("liveness.error.evaluationError") + ""
1261
- ), l;
1262
- const a = {
1263
- c: function() {
1264
- e = w("h1"), l = W(i), b(e, "class", "text-3xl font-bold pb-[1em] transition-opacity text-error"), p(e, E, 1154, 12, 47294);
1265
- },
1266
- m: function(o, r) {
1267
- U(o, e, r), f(e, l);
1268
- },
1269
- p: function(o, r) {
1270
- r[1] & /*$_*/
1271
- 1 && i !== (i = /*$_*/
1272
- o[31]("liveness.error.evaluationError") + "") && q(l, i);
1273
- },
1274
- d: function(o) {
1275
- o && K(e);
1276
- }
1277
- };
1278
- return M("SvelteRegisterBlock", {
1279
- block: a,
1280
- id: co.name,
1281
- type: "if",
1282
- source: "(1154:83) ",
1283
- ctx: n
1284
- }), a;
1285
- }
1286
- function uo(n) {
1287
- let e, i = (
1288
- /*$_*/
1289
- n[31]("faceCollector.unableToCompleteRequest") + ""
1290
- ), l;
1291
- const a = {
1292
- c: function() {
1293
- e = w("h1"), l = W(i), b(e, "class", "text-3xl font-bold pb-[1em] transition-opacity text-error"), p(e, E, 1150, 12, 47049);
1294
- },
1295
- m: function(o, r) {
1296
- U(o, e, r), f(e, l);
1297
- },
1298
- p: function(o, r) {
1299
- r[1] & /*$_*/
1300
- 1 && i !== (i = /*$_*/
1301
- o[31]("faceCollector.unableToCompleteRequest") + "") && q(l, i);
1302
- },
1303
- d: function(o) {
1304
- o && K(e);
1305
- }
1306
- };
1307
- return M("SvelteRegisterBlock", {
1308
- block: a,
1309
- id: uo.name,
1310
- type: "if",
1311
- source: "(1150:112) ",
1312
- ctx: n
1313
- }), a;
1314
- }
1315
- function fo(n) {
1316
- let e, i = (
1317
- /*$_*/
1318
- n[31]("faceCollector.lowQualityCapture") + ""
1319
- ), l;
1320
- const a = {
1321
- c: function() {
1322
- e = w("h1"), l = W(i), b(e, "class", "text-3xl font-bold pb-[1em] transition-opacity text-error"), p(e, E, 1146, 12, 46781);
1323
- },
1324
- m: function(o, r) {
1325
- U(o, e, r), f(e, l);
1326
- },
1327
- p: function(o, r) {
1328
- r[1] & /*$_*/
1329
- 1 && i !== (i = /*$_*/
1330
- o[31]("faceCollector.lowQualityCapture") + "") && q(l, i);
1331
- },
1332
- d: function(o) {
1333
- o && K(e);
1334
- }
1335
- };
1336
- return M("SvelteRegisterBlock", {
1337
- block: a,
1338
- id: fo.name,
1339
- type: "if",
1340
- source: "(1146:157) ",
1341
- ctx: n
1342
- }), a;
1343
- }
1344
- function mo(n) {
1345
- let e, i = (
1346
- /*$_*/
1347
- n[31]("liveness.error.error") + ""
1348
- ), l, a, s = (
1349
- /*$_*/
1350
- n[31]("faceCollector.unaliveCapture") + ""
1351
- ), o;
1352
- const r = {
1353
- c: function() {
1354
- e = w("h1"), l = W(i), a = W(": "), o = W(s), b(e, "class", "text-3xl font-bold pb-[1em] transition-opacity text-error"), p(e, E, 1142, 12, 46441);
1355
- },
1356
- m: function(h, d) {
1357
- U(h, e, d), f(e, l), f(e, a), f(e, o);
1358
- },
1359
- p: function(h, d) {
1360
- d[1] & /*$_*/
1361
- 1 && i !== (i = /*$_*/
1362
- h[31]("liveness.error.error") + "") && q(l, i), d[1] & /*$_*/
1363
- 1 && s !== (s = /*$_*/
1364
- h[31]("faceCollector.unaliveCapture") + "") && q(o, s);
1365
- },
1366
- d: function(h) {
1367
- h && K(e);
1368
- }
1369
- };
1370
- return M("SvelteRegisterBlock", {
1371
- block: r,
1372
- id: mo.name,
1373
- type: "if",
1374
- source: "(1142:76) ",
1375
- ctx: n
1376
- }), r;
1377
- }
1378
- function ho(n) {
1379
- let e, i = (
1380
- /*$_*/
1381
- n[31]("liveness.error.error") + ""
1382
- ), l, a, s = (
1383
- /*$_*/
1384
- n[31](
1385
- /*livenessError*/
1386
- n[20]
1387
- ) + ""
1388
- ), o, r;
1389
- const c = {
1390
- c: function() {
1391
- e = w("h1"), l = W(i), a = W(": "), o = W(s), r = W("."), b(e, "class", "text-3xl font-bold pb-[1em] transition-opacity text-error"), p(e, E, 1138, 12, 46198);
1392
- },
1393
- m: function(d, u) {
1394
- U(d, e, u), f(e, l), f(e, a), f(e, o), f(e, r);
1395
- },
1396
- p: function(d, u) {
1397
- u[1] & /*$_*/
1398
- 1 && i !== (i = /*$_*/
1399
- d[31]("liveness.error.error") + "") && q(l, i), u[0] & /*livenessError*/
1400
- 1048576 | u[1] & /*$_*/
1401
- 1 && s !== (s = /*$_*/
1402
- d[31](
1403
- /*livenessError*/
1404
- d[20]
1405
- ) + "") && q(o, s);
1406
- },
1407
- d: function(d) {
1408
- d && K(e);
1409
- }
1410
- };
1411
- return M("SvelteRegisterBlock", {
1412
- block: c,
1413
- id: ho.name,
1414
- type: "if",
1415
- source: "(1138:10) {#if $requestResult === requestResultEnum.LIVENESS_DETECTION_FAILURE || $requestResult === requestResultEnum.UNKNOWN_LIVENESS_ERROR}",
1416
- ctx: n
1417
- }), c;
1418
- }
1419
- function bo(n) {
1420
- let e, i, l, a, s = j(), o, r = (
1421
- /*unique*/
1422
- n[13]
1423
- ), c, h, d, u, T, O, g, _, C, v, N, I, A, k, Re, se = j() && /*waitingIdrndCaptureEvent*/
1424
- n[19], fe, pe = (j() && /*idrndLoading*/
1425
- n[17] || !j() && !/*$ready*/
1426
- n[35]) && /*$cameraStatusStore*/
1427
- n[21] === J.OK, He, Ie, ee, ie, Ce, be = s && Yn(n), ye = Mi(n), te = (
1428
- /*showConfigButton*/
1429
- n[4] && /*$ready*/
1430
- n[35] && Ui(n)
1431
- ), Z = (
1432
- /*showCameraButton*/
1433
- n[6] && /*$ready*/
1434
- n[35] && Wi(n)
1435
- ), x = (
1436
- /*showAutoCaptureButton*/
1437
- n[5] && !/*$automaticCapture*/
1438
- n[25] && !/*showCaptureButton*/
1439
- n[2] && /*$ready*/
1440
- n[35] && Vi(n)
1441
- ), Q = (
1442
- /*showCaptureButton*/
1443
- n[2] && /*$ready*/
1444
- n[35] && Ki(n)
1445
- ), Y = (
1446
- /*isCountingDown*/
1447
- n[12] && Hi(n)
1448
- ), re = (
1449
- /*$enableFaceApi*/
1450
- n[34] && !/*isCountingDown*/
1451
- n[12] && /*$faceValidationAlert*/
1452
- n[26] && ji(n)
1453
- ), ce = se && qi(n), ue = pe && Ji(n), ge = (
1454
- /*$captured*/
1455
- n[23] && zi(n)
1456
- );
1457
- const hi = [to, eo], D = [];
1458
- function de(ne, y) {
1459
- return (!/*idrndClosed*/
1460
- ne[18] || /*$captured*/
1461
- ne[23]) && /*showUnconformities*/
1462
- ne[3] ? 0 : (
1463
- /*$cameraStatusStore*/
1464
- ne[21] !== J.OK ? 1 : -1
1465
- );
1466
- }
1467
- ~(ee = de(n)) && (ie = D[ee] = hi[ee](n));
1468
- const Ee = {
1469
- c: function() {
1470
- e = w("div"), i = w("div"), l = w("div"), a = w("div"), be && be.c(), o = V(), ye.c(), c = V(), te && te.c(), h = V(), Z && Z.c(), d = V(), x && x.c(), u = V(), Q && Q.c(), T = V(), O = w("canvas"), g = V(), _ = w("canvas"), C = V(), v = w("canvas"), N = V(), Y && Y.c(), I = V(), re && re.c(), Re = V(), ce && ce.c(), fe = V(), ue && ue.c(), He = V(), ge && ge.c(), Ie = V(), ie && ie.c(), this.c = he, b(O, "id", "bry-ce-displayCanvas"), b(O, "class", "max-w-full -scale-x-100"), p(O, E, 1048, 8, 41897), b(_, "id", "bry-ce-detectionsCanvas"), b(_, "class", "absolute top-0 left-0 max-w-full -scale-x-100"), p(_, E, 1050, 8, 42023), b(v, "id", "bry-ce-maskCanvas"), b(v, "class", "absolute top-0 left-0 max-w-full -scale-x-100"), p(v, E, 1055, 8, 42192), b(a, "class", A = /*$ready*/
1471
- n[35] ? "relative" : "relative w-0 h-0"), a.hidden = k = /*$cameraStatusStore*/
1472
- n[21] !== J.OK || j() && /*idrndLoading*/
1473
- (n[17] || /*idrndClosed*/
1474
- n[18] || /*waitingIdrndCaptureEvent*/
1475
- n[19]), p(a, E, 998, 6, 39977), b(l, "class", "relative mx-auto"), p(l, E, 997, 4, 39940), b(i, "class", "flex flex-col justify-between"), p(i, E, 996, 2, 39867), p(e, E, 992, 0, 39632);
1476
- },
1477
- l: function(y) {
1478
- throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
1479
- },
1480
- m: function(y, H) {
1481
- U(y, e, H), f(e, i), f(i, l), f(l, a), be && be.m(a, null), f(a, o), ye.m(a, null), f(a, c), te && te.m(a, null), f(a, h), Z && Z.m(a, null), f(a, d), x && x.m(a, null), f(a, u), Q && Q.m(a, null), f(a, T), f(a, O), n[55](O), f(a, g), f(a, _), n[56](_), f(a, C), f(a, v), n[57](v), f(a, N), Y && Y.m(a, null), f(a, I), re && re.m(a, null), f(l, Re), ce && ce.m(l, null), f(l, fe), ue && ue.m(l, null), f(l, He), ge && ge.m(l, null), n[60](i), f(e, Ie), ~ee && D[ee].m(e, null), Ce = !0;
1482
- },
1483
- p: function(y, H) {
1484
- s && be.p(y, H), H[0] & /*unique*/
1485
- 8192 && xi(r, r = /*unique*/
1486
- y[13]) ? (ye.d(1), ye = Mi(y), ye.c(), ye.m(a, c)) : ye.p(y, H), /*showConfigButton*/
1487
- y[4] && /*$ready*/
1488
- y[35] ? te ? H[0] & /*showConfigButton*/
1489
- 16 | H[1] & /*$ready*/
1490
- 16 && G(te, 1) : (te = Ui(y), te.c(), G(te, 1), te.m(a, h)) : te && (pt(), le(te, 1, 1, () => {
1491
- te = null;
1492
- }), Ct()), /*showCameraButton*/
1493
- y[6] && /*$ready*/
1494
- y[35] ? Z ? H[0] & /*showCameraButton*/
1495
- 64 | H[1] & /*$ready*/
1496
- 16 && G(Z, 1) : (Z = Wi(y), Z.c(), G(Z, 1), Z.m(a, d)) : Z && (pt(), le(Z, 1, 1, () => {
1497
- Z = null;
1498
- }), Ct()), /*showAutoCaptureButton*/
1499
- y[5] && !/*$automaticCapture*/
1500
- y[25] && !/*showCaptureButton*/
1501
- y[2] && /*$ready*/
1502
- y[35] ? x ? H[0] & /*showAutoCaptureButton, $automaticCapture, showCaptureButton*/
1503
- 33554468 | H[1] & /*$ready*/
1504
- 16 && G(x, 1) : (x = Vi(y), x.c(), G(x, 1), x.m(a, u)) : x && (pt(), le(x, 1, 1, () => {
1505
- x = null;
1506
- }), Ct()), /*showCaptureButton*/
1507
- y[2] && /*$ready*/
1508
- y[35] ? Q ? (Q.p(y, H), H[0] & /*showCaptureButton*/
1509
- 4 | H[1] & /*$ready*/
1510
- 16 && G(Q, 1)) : (Q = Ki(y), Q.c(), G(Q, 1), Q.m(a, T)) : Q && (pt(), le(Q, 1, 1, () => {
1511
- Q = null;
1512
- }), Ct()), /*isCountingDown*/
1513
- y[12] ? Y ? Y.p(y, H) : (Y = Hi(y), Y.c(), Y.m(a, I)) : Y && (Y.d(1), Y = null), /*$enableFaceApi*/
1514
- y[34] && !/*isCountingDown*/
1515
- y[12] && /*$faceValidationAlert*/
1516
- y[26] ? re ? re.p(y, H) : (re = ji(y), re.c(), re.m(a, null)) : re && (re.d(1), re = null), (!Ce || H[1] & /*$ready*/
1517
- 16 && A !== (A = /*$ready*/
1518
- y[35] ? "relative" : "relative w-0 h-0")) && b(a, "class", A), (!Ce || H[0] & /*$cameraStatusStore, idrndLoading, idrndClosed, waitingIdrndCaptureEvent*/
1519
- 3014656 && k !== (k = /*$cameraStatusStore*/
1520
- y[21] !== J.OK || j() && /*idrndLoading*/
1521
- (y[17] || /*idrndClosed*/
1522
- y[18] || /*waitingIdrndCaptureEvent*/
1523
- y[19]))) && di(a, "hidden", k), H[0] & /*waitingIdrndCaptureEvent*/
1524
- 524288 && (se = j() && /*waitingIdrndCaptureEvent*/
1525
- y[19]), se ? ce ? ce.p(y, H) : (ce = qi(y), ce.c(), ce.m(l, fe)) : ce && (ce.d(1), ce = null), H[0] & /*idrndLoading, $cameraStatusStore*/
1526
- 2228224 | H[1] & /*$ready*/
1527
- 16 && (pe = (j() && /*idrndLoading*/
1528
- y[17] || !j() && !/*$ready*/
1529
- y[35]) && /*$cameraStatusStore*/
1530
- y[21] === J.OK), pe ? ue ? ue.p(y, H) : (ue = Ji(y), ue.c(), ue.m(l, He)) : ue && (ue.d(1), ue = null), /*$captured*/
1531
- y[23] ? ge ? ge.p(y, H) : (ge = zi(y), ge.c(), ge.m(l, null)) : ge && (ge.d(1), ge = null);
1532
- let Pe = ee;
1533
- ee = de(y), ee === Pe ? ~ee && D[ee].p(y, H) : (ie && (pt(), le(D[Pe], 1, 1, () => {
1534
- D[Pe] = null;
1535
- }), Ct()), ~ee ? (ie = D[ee], ie ? ie.p(y, H) : (ie = D[ee] = hi[ee](y), ie.c()), G(ie, 1), ie.m(e, null)) : ie = null);
1536
- },
1537
- i: function(y) {
1538
- Ce || (G(te), G(Z), G(x), G(Q), G(ie), Ce = !0);
1539
- },
1540
- o: function(y) {
1541
- le(te), le(Z), le(x), le(Q), le(ie), Ce = !1;
1542
- },
1543
- d: function(y) {
1544
- y && K(e), be && be.d(), ye.d(y), te && te.d(), Z && Z.d(), x && x.d(), Q && Q.d(), n[55](null), n[56](null), n[57](null), Y && Y.d(), re && re.d(), ce && ce.d(), ue && ue.d(), ge && ge.d(), n[60](null), ~ee && D[ee].d();
1545
- }
1546
- };
1547
- return M("SvelteRegisterBlock", {
1548
- block: Ee,
1549
- id: bo.name,
1550
- type: "component",
1551
- source: "",
1552
- ctx: n
1553
- }), Ee;
1554
- }
1555
- function Ni(n, e, i) {
1556
- const l = e.videoWidth / e.videoHeight, a = i.width / i.height;
1557
- let s = 0, o = 0, r = e.videoWidth, c = e.videoHeight;
1558
- l > a ? (r = e.videoHeight * a, s = (e.videoWidth - r) / 2) : l < a && (c = e.videoWidth / a, o = (e.videoHeight - c) / 2), n.drawImage(e, s, o, r, c, 0, 0, i.width, i.height);
1559
- }
1560
- function Wo(n, e, i) {
1561
- let l, a, s, o, r, c, h, d, u, T, O, g, _, C, v, N, I, A, k, Re, se, fe, pe, He, Ie, ee, ie, Ce, be, ye, te, Z, x, Q, Y, re, ce, ue;
1562
- F(Wt, "retakePhoto"), L(n, Wt, (t) => i(79, l = t)), F(ft, "faceFound"), L(n, ft, (t) => i(81, s = t)), F(ae, "cameraStatusStore"), L(n, ae, (t) => i(21, o = t)), F(yi, "collectorSelect"), L(n, yi, (t) => i(82, r = t)), F(dt, "facingMode"), L(n, dt, (t) => i(83, c = t)), F(De, "selectedVideoDeviceId"), L(n, De, (t) => i(22, h = t)), F(Ei, "cameraDevicesStore"), L(n, Ei, (t) => i(84, d = t)), F(Ye, "captured"), L(n, Ye, (t) => i(23, u = t)), F(Vt, "clearedVideoSrcObject"), L(n, Vt, (t) => i(85, T = t)), F(ii, "_stream"), L(n, ii, (t) => i(86, O = t)), F(Le, "videoStore"), L(n, Le, (t) => i(24, g = t)), F(Ke, "automaticCapture"), L(n, Ke, (t) => i(25, _ = t)), F(Ne, "faceValidationAlert"), L(n, Ne, (t) => i(26, C = t)), F(ki, "showLivenessResultToast"), L(n, ki, (t) => i(87, v = t)), F(Kt, "saved"), L(n, Kt, (t) => i(27, N = t)), F(Ht, "justification"), L(n, Ht, (t) => i(28, I = t)), F(Be, "image"), L(n, Be, (t) => i(29, A = t)), F(ve, "requestResult"), L(n, ve, (t) => i(30, k = t)), F(yt, "_"), L(n, yt, (t) => i(31, Re = t)), F(Me, "unconformitiesStore"), L(n, Me, (t) => i(32, se = t)), F(Ge, "originalCapture"), L(n, Ge, (t) => i(88, fe = t)), F(Ri, "boxStore"), L(n, Ri, (t) => i(89, He = t)), F(Ti, "enableFaceApi"), L(n, Ti, (t) => i(34, Ie = t)), F(Si, "eyeDistance"), L(n, Si, (t) => i(90, ee = t)), F(ni, "screenLocked"), L(n, ni, (t) => i(91, ie = t)), F(mt, "initializing"), L(n, mt, (t) => i(92, Ce = t)), F(ht, "ready"), L(n, ht, (t) => i(35, be = t)), F(jt, "selectedTab"), L(n, jt, (t) => i(93, ye = t)), F(Oi, "captureLivenessIdrndEndpoint"), L(n, Oi, (t) => i(94, te = t)), F(bt, "blob"), L(n, bt, (t) => i(95, Z = t)), F(oi, "idrndInitialized"), L(n, oi, (t) => i(96, x = t)), F(ai, "idrndVideoStoreDimensions"), L(n, ai, (t) => i(97, Q = t)), F(gt, "ovalDimensions"), L(n, gt, (t) => i(98, Y = t)), F(Ai, "isLoading"), L(n, Ai, (t) => i(36, re = t)), F(Ii, "showFaceWhileValidating"), L(n, Ii, (t) => i(37, ce = t)), F(Di, "exportButtonDisabled"), L(n, Di, (t) => i(38, ue = t));
1563
- let { $$slots: ge = {}, $$scope: hi } = e;
1564
- Vn("face-collector", ge, []);
1565
- let D, de, Ee, ne = !1, y = {}, H = !1, Pe = !1, Tt = !1, St = (/* @__PURE__ */ new Date()).getTime(), { enableMinutiae: $e } = e, { videoDimensions: et } = e, { noTabs: tt } = e, { weightsPath: it } = e, { evaluatePhoto: Ae } = e, { showCaptureButton: nt } = e, { showUnconformities: Ot } = e, { videoOverlay: je } = e, { videoOverlayTransparency: Ue } = e, { showConfigButton: At } = e, { showAutoCaptureButton: qe } = e, { showCameraButton: It } = e, { showJustificationField: Dt } = e, { minEyeToEyeDist: We } = e;
1566
- const ot = Fi(!1);
1567
- F(ot, "startFaceApi"), L(n, ot, (t) => i(80, a = t));
1568
- const Je = Fi("data:image/png;base64");
1569
- F(Je, "dataTypePrefix"), L(n, Je, (t) => i(33, pe = t));
1570
- let { widgetInstance: oe } = e, Fe, z, ze = !1, Bt = !1, at = !0, Te = !0, st = !1, Gt = 0, ke = "", Pt = 0, bi = 5, Zt = 3e3, Ft = !0, Lt = 0, Nt = !1;
1571
- const lt = wn.mixin({
1572
- toast: !0,
1573
- position: "bottom-left",
1574
- timer: 13e3,
1575
- timerProgressBar: !0
1576
- });
1577
- pn(async () => {
1578
- Cn("Mounting Face Collector!"), m(mt, Ce = !0, Ce), m(ht, be = !1, be), _i(), gi(), j() ? (import("./index-no-detector_4b302e78_2.3.1-RC01.js"), tn()) : await Ve(), Ie && (await yn(it), H = !0), Se() || on();
1579
- });
1580
- function gi() {
1581
- const [t, R] = (et ?? "")?.replaceAll(" ", "")?.split("x")?.map((S) => S ? parseInt(S) : void 0);
1582
- !t || !R || (m(Le, g = { videoWidth: t, videoHeight: R }, g), j() && R < t && Se() && m(Le, g = { videoWidth: R, videoHeight: t }, g));
1583
- }
1584
- function _i() {
1585
- m(ft, s = !1, s), m(Ye, u = !1, u), m(dt, c = si.FRONT_CAMERA, c), m(ae, o = J.OK, o), qe && m(Ke, _ = !1, _), m(Kt, N = !1, N), m(ve, k = X.OK, k), m(Ge, fe = "", fe), m(Me, se.unconformities = [], se);
1586
- const t = Yt(li);
1587
- t.closedMouth = !1, t.isPersonCloseEnough = !1, t.isPersonTooclose = !0, t.isPersonInFrame = !1, li.set(t), m(Ne, C = "", C);
1588
- }
1589
- function xt(t, R) {
1590
- t.clearRect(0, 0, z.width, z.height), t.save(), je != "none" ? (Ue > 0 && (t.globalAlpha = Ue / 100), t.fillStyle = je, t.fillRect(0, 0, z.width, z.height)) : (t.beginPath(), t.rect(0, 0, z.width, z.height));
1591
- let S = z.height * 0.8;
1592
- const P = g.videoWidth / 2;
1593
- let B = g.videoHeight * 0.5;
1594
- (qe || nt) && (B = g.videoHeight * 0.44), Se() && (S = z.height * 0.65, B = g.videoHeight * 0.51);
1595
- const $ = S / 1.45;
1596
- m(gt, Y.width = $, Y), m(gt, Y.height = S, Y), m(gt, Y.y = B, Y), t.ellipse(P, B, $ / 2, S / 2, 0, 0, 2 * Math.PI, !0), Ue == 0 && t.clip(), Ni(t, R, z), t.restore(), t.save(), t.beginPath();
1597
- const ct = window.getComputedStyle(z).getPropertyValue("--p"), ut = window.getComputedStyle(z).getPropertyValue("--su");
1598
- if (t.strokeStyle = `hsl(${ct})`, t.lineWidth = 16, t.ellipse(P, B, $ / 2, S / 2, 0, 0, 2 * Math.PI), t.stroke(), ne && !Nt) {
1599
- const Ut = 1 - (Lt - (/* @__PURE__ */ new Date()).getTime()) / Zt;
1600
- t.save(), t.beginPath(), t.lineWidth = 16, t.strokeStyle = `hsl(${ut})`, t.ellipse(P, B, $ / 2, S / 2, 0, 0 - Math.PI / 2, 1.5 * (Math.PI * 2 * Ut) - Math.PI / 2), t.stroke();
1601
- }
1602
- t.beginPath();
1603
- const me = new Path2D();
1604
- me.ellipse(P, B, $ / 2, S / 2, 0, 0, 2 * Math.PI), t.clip(me), Ni(t, R, z), t.restore();
1605
- }
1606
- function tn() {
1607
- oe.addEventListener("open", (t) => {
1608
- const R = t.detail[0].video;
1609
- m(
1610
- ai,
1611
- Q = {
1612
- width: R.videoWidth,
1613
- height: R.videoHeight
1614
- },
1615
- Q
1616
- ), i(9, D.srcObject = R.srcObject, D), i(17, at = !1), Se() && setTimeout(
1617
- () => {
1618
- be || _t(oe).then(() => {
1619
- m(ae, o = J.CAMERA_DENIED_ERROR, o);
1620
- });
1621
- },
1622
- 5e3
1623
- );
1624
- function S() {
1625
- Te || (xt(z.getContext("2d"), R), xe(D, S, !0));
1626
- }
1627
- S();
1628
- }), oe.addEventListener("error", (t) => {
1629
- console.error(t), t.detail[0].message === "Device in use" ? m(ae, o = J.CAMERA_IN_USE_ERROR, o) : t.detail[0].message === "Permission denied" || t.detail[0].message === "Permission dismissed" ? m(ae, o = J.CAMERA_DENIED_ERROR, o) : t.detail[0].message === "Requested device not found" && m(ae, o = J.DEVICE_NOT_FOUND_ERROR, o), i(17, at = !1);
1630
- }), oe.addEventListener("faceDetection", (t) => {
1631
- }), oe.addEventListener("close", async (t) => {
1632
- u || (ze = !1), i(18, Te = !0), i(19, st = !1), o === J.OK && m(ae, o = J.CAMERA_CLOSED_ERROR, o);
1633
- }), oe.addEventListener("initialize", async (t) => {
1634
- Bt = !0, m(oi, x = !0, x), ye === qt.Face && !ze && !u && Bt && await $t();
1635
- }), oe.addEventListener("capture", async (t) => {
1636
- i(20, ke = "");
1637
- const { encryptedFile: R, photo: S } = t.detail[0];
1638
- m(bt, Z = R, Z), i(19, st = !1), m(ve, k = X.OK, k), m(Me, se.isLoading = !0, se), m(Ye, u = !0, u), ze = !1;
1639
- const P = (await Jt(S)).split(",");
1640
- if (m(Je, pe = P[0], pe), m(Be, A = P[1], A), m(Ge, fe = P[1], fe), !te) {
1641
- let me, Ut;
1642
- try {
1643
- ({ bodyParts: me, icaoWarnings: Ut } = await zt(fe, Ae, (await Jt(R)).split(",")[1])), window.dispatchEvent(new CustomEvent(
1644
- "face-unconformities-validated",
1645
- {
1646
- detail: {
1647
- bodyParts: me,
1648
- icaoWarnings: Ut,
1649
- status: k
1650
- }
1651
- }
1652
- ));
1653
- } catch (Qe) {
1654
- console.error(Qe);
1655
- let ti = vt.UNKNOWN, Ci = [], _n = [];
1656
- if (Qe instanceof ri && Qe.response?.status === 400)
1657
- if (Qe.response.data && Array.isArray(Qe.response.data.bodyParts)) {
1658
- Ci = Qe.response.data.bodyParts, _n = Qe.response.data.icaoWarnings;
1659
- const vn = Ci.find((Fo) => Fo.livenessResult.error);
1660
- ti = vn?.livenessResult.error_code, m(ve, k = X.LIVENESS_DETECTION_FAILURE, k), vn?.livenessResult.error_code || m(ve, k = X.UNKNOWN_LIVENESS_ERROR, k), i(20, ke = vt[ti]), console.error("Liveness error:", ti);
1661
- } else
1662
- m(ve, k = X.TEMPLATE_EXTRACTION_ERROR, k);
1663
- else
1664
- m(ve, k = X.UNABLE_TO_COMMUNICATE_WITH_TEMPLATE_EXTRACTION_SERVICE, k), Ae && lt.fire({
1665
- icon: "error",
1666
- title: "Falha ao comunicar com serviço de Liveness"
1667
- });
1668
- m(Me, se.isLoading = !1, se), window.dispatchEvent(new CustomEvent(
1669
- "face-unconformities-validated",
1670
- {
1671
- detail: {
1672
- bodyParts: Ci,
1673
- errorCode: ti,
1674
- translatedError: Re(ke),
1675
- status: k,
1676
- icaoWarnings: _n
1677
- }
1678
- }
1679
- ));
1680
- return;
1681
- }
1682
- if (k !== X.OK) {
1683
- m(Me, se.isLoading = !1, se);
1684
- return;
1685
- }
1686
- me[0].livenessResult && wi(me[0].livenessResult), me.length !== 0 && me[0].data && m(Be, A = me[0].data, A), Xt(Ut);
1687
- return;
1688
- }
1689
- let B, $;
1690
- try {
1691
- $ = await En(R), wi($.data);
1692
- } catch (me) {
1693
- m(ve, k = X.UNKNOWN_LIVENESS_ERROR, k), console.error(me), me instanceof ri && me.response?.status === 400 ? (B = me.response.data.error_code, i(20, ke = vt[B]), console.error("Liveness error:", B), m(ve, k = X.LIVENESS_DETECTION_FAILURE, k)) : lt.fire({
1694
- icon: "error",
1695
- title: "Falha ao comunicar com serviço de Liveness"
1696
- });
1697
- }
1698
- if (k !== X.OK) {
1699
- m(Me, se.isLoading = !1, se), window.dispatchEvent(new CustomEvent(
1700
- "face-unconformities-validated",
1701
- {
1702
- detail: {
1703
- bodyParts: [
1704
- {
1705
- bodyPart: "FACE",
1706
- data: fe,
1707
- livenessBlob: (await Jt(R)).split(",")[1],
1708
- ...$ && { livenessResult: $ }
1709
- }
1710
- ],
1711
- ...B && { errorCode: B },
1712
- ...ke && { translatedError: Re(ke) },
1713
- status: k
1714
- }
1715
- }
1716
- ));
1717
- return;
1718
- }
1719
- let { bodyParts: ct, icaoWarnings: ut } = await zt(fe, Ae);
1720
- window.dispatchEvent(new CustomEvent(
1721
- "face-unconformities-validated",
1722
- {
1723
- detail: {
1724
- bodyParts: ct,
1725
- icaoWarnings: ut,
1726
- status: k,
1727
- errorCode: B,
1728
- ...ke && { translatedError: Re(ke) }
1729
- }
1730
- }
1731
- )), ct[0].data && m(Be, A = ct[0].data, A), Xt(ut);
1732
- });
1733
- }
1734
- async function Ve(t) {
1735
- gi(), j() ? $t() : await nn(g.videoWidth, g.videoHeight, t);
1736
- }
1737
- async function $t() {
1738
- if (j()) {
1739
- if (!d[0]?.deviceId) {
1740
- try {
1741
- await Bi(640, 480);
1742
- } catch (t) {
1743
- const R = t, S = Ze(t) && t.constraint ? t.constraint : "";
1744
- console.error(R.message, S), Ze(R) && "message" in R && R.message.includes("Requested device not found") && m(ae, o = J.DEVICE_NOT_FOUND_ERROR, o);
1745
- }
1746
- await ci(), m(De, h = d[0].deviceId, h);
1747
- }
1748
- m(ae, o = J.OK, o), oe && "openCamera" in oe && oe.openCamera(), ze = !0, i(18, Te = !1), i(17, at = !0);
1749
- }
1750
- }
1751
- async function rt() {
1752
- if (Ie && !H)
1753
- return xe(D, rt);
1754
- if (D) {
1755
- if (ye !== qt.Face && !tt)
1756
- return xe(D, rt);
1757
- m(ht, be = !0, be), m(mt, Ce = !1, Ce), Ie ? (a || m(ot, a = !0, a), j() || xt(z.getContext("2d"), D), xe(D, rt)) : (xt(z.getContext("2d"), D), xe(D, rt));
1758
- }
1759
- }
1760
- async function vi() {
1761
- if (ie && (Pi(), m(ni, ie = !1, ie)), We > 0 && ee < We) {
1762
- let t = "FACE_MUITO_PEQUENA";
1763
- const R = Li[t];
1764
- t = Li.FACE_MUITO_PEQUENA, window.dispatchEvent(new CustomEvent(
1765
- "low-quality-face",
1766
- {
1767
- detail: {
1768
- errorCode: t,
1769
- translatedError: Re(R),
1770
- bodyParts: [
1771
- {
1772
- bodyPart: "FACE",
1773
- minEyeToEyeDist: We,
1774
- capturedEyeToEyeDist: ee
1775
- }
1776
- ]
1777
- }
1778
- }
1779
- )), lt.fire({
1780
- icon: "error",
1781
- title: Re(R)
1782
- });
1783
- return;
1784
- }
1785
- if (m(ve, k = X.OK, k), j()) {
1786
- i(19, st = !0), oe.takePhoto();
1787
- return;
1788
- }
1789
- m(Ye, u = !0, u);
1790
- try {
1791
- if (Ie) {
1792
- const [t] = await (await import("./face_api_0e3ce8c8_2.3.1-RC01.js")).extractFaces(D, [He]), R = t.toDataURL("image/jpeg").split(",");
1793
- m(Je, pe = R[0], pe), m(Be, A = R[1], A), m(Ge, fe = R[1], fe);
1794
- let S, P;
1795
- ({ bodyParts: S, icaoWarnings: P } = await zt(A, Ae)), window.dispatchEvent(new CustomEvent(
1796
- "face-unconformities-validated",
1797
- {
1798
- detail: {
1799
- bodyParts: S,
1800
- icaoWarnings: P,
1801
- status: k
1802
- }
1803
- }
1804
- )), S.length !== 0 && S[0].data && m(Be, A = S[0].data, A), Xt(P);
1805
- } else {
1806
- const t = document.createElement("canvas"), R = t.getContext("2d");
1807
- t.width = D.width, t.height = D.height, R?.drawImage(D, 0, 0, t.width, t.height);
1808
- const S = t.toDataURL("image/jpeg").split(",");
1809
- m(Je, pe = S[0], pe), m(Be, A = S[1], A), m(Ge, fe = S[1], fe);
1810
- let { bodyParts: P, icaoWarnings: B } = await zt(A, Ae);
1811
- window.dispatchEvent(new CustomEvent(
1812
- "face-unconformities-validated",
1813
- {
1814
- detail: {
1815
- bodyParts: P,
1816
- icaoWarnings: B,
1817
- status: k
1818
- }
1819
- }
1820
- )), P.length !== 0 && P[0].data && m(Be, A = P[0].data, A), Xt(B);
1821
- }
1822
- } catch (t) {
1823
- console.error(t);
1824
- let R = vt.UNKNOWN, S = [], P = [];
1825
- if (t instanceof ri && t.response?.status === 400)
1826
- if (t.response.data && Array.isArray(t.response.data.bodyParts)) {
1827
- S = t.response.data.bodyParts, P = t.response.data.icaoWarnings;
1828
- const B = S.find(($) => $.livenessResult.error);
1829
- R = B?.livenessResult.error_code, m(ve, k = X.LIVENESS_DETECTION_FAILURE, k), B?.livenessResult.error_code || m(ve, k = X.UNKNOWN_LIVENESS_ERROR, k), i(20, ke = vt[R]), console.error("Liveness error:", R);
1830
- } else
1831
- m(ve, k = X.TEMPLATE_EXTRACTION_ERROR, k);
1832
- else
1833
- m(ve, k = X.UNABLE_TO_COMMUNICATE_WITH_TEMPLATE_EXTRACTION_SERVICE, k), Ae && lt.fire({
1834
- icon: "error",
1835
- title: "Falha ao comunicar com serviço de Liveness"
1836
- });
1837
- m(Me, se.isLoading = !1, se), window.dispatchEvent(new CustomEvent(
1838
- "face-unconformities-validated",
1839
- {
1840
- detail: {
1841
- bodyParts: S,
1842
- errorCode: R,
1843
- translatedError: Re(ke),
1844
- status: k,
1845
- icaoWarnings: P
1846
- }
1847
- }
1848
- ));
1849
- return;
1850
- }
1851
- }
1852
- function Mt() {
1853
- const t = {
1854
- bodyPart: "FACE",
1855
- data: A,
1856
- justification: I
1857
- };
1858
- m(Kt, N = !0, N), Yt(bt) && Jt(Yt(bt)).then((R) => {
1859
- t.livenessBlob = R.split(",")[1];
1860
- }), window.dispatchEvent(new CustomEvent("export-face", { detail: t }));
1861
- }
1862
- function Xe() {
1863
- window.dispatchEvent(new CustomEvent("face-scrapped")), _i(), Te && $t();
1864
- }
1865
- function wi(t) {
1866
- let R = "", S = "success";
1867
- t.isAlive ? R = `Vivacidade de face (${t.face_liveness.probability.toFixed(2)}) e de captura (${t.capture_liveness.probability}, ${t.capture_liveness.score.toFixed(2)}) verificados!` : t?.face_liveness?.probability && (S = "error", R = `Vivacidade de face (${t.face_liveness.probability.toFixed(2)}) e de captura (${t.capture_liveness.probability}, ${t.capture_liveness.score.toFixed(2)}) insuficientes!`), v && lt.fire({ icon: S, title: R });
1868
- }
1869
- async function nn(t, R, S) {
1870
- try {
1871
- const { deviceId: P, width: B, height: $, aspectRatio: ct, facingMode: ut, touchPoints: me } = await Bi(t, R, c, S);
1872
- B < t && $ < R && m(
1873
- Le,
1874
- g = {
1875
- videoWidth: B,
1876
- videoHeight: $
1877
- },
1878
- g
1879
- ), Se() && (!ut || me <= 1) && B > $ && m(
1880
- Le,
1881
- g = {
1882
- videoWidth: $,
1883
- videoHeight: B
1884
- },
1885
- g
1886
- ), m(De, h = P || d[0].deviceId, h);
1887
- } catch (P) {
1888
- const B = P, $ = Ze(P) && P.constraint ? P.constraint : "";
1889
- console.error(B.message, $), Ze(B) && "message" in B && B.message.includes("Permission denied") && (console.error("User didn't give permission to use camera!"), m(ae, o = J.CAMERA_DENIED_ERROR, o)), Ze(B) && "message" in B && B.message.includes("Requested device not found") && m(ae, o = J.DEVICE_NOT_FOUND_ERROR, o), ($.includes("width") || $.includes("height")) && (console.error(`Camera does not meet the minimum supported requirements! (${$})`), m(ae, o = J.CAMERA_UNSUPPORTED, o));
1890
- }
1891
- }
1892
- async function ei() {
1893
- m(De, h = "", h), await Ve();
1894
- }
1895
- function on() {
1896
- navigator.mediaDevices.ondevicechange = async (t) => {
1897
- t.type == "devicechange" && (await ci(), o !== J.OK ? await ei() : (!j() && !O.active || j() && !Te) && (_t(oe), m(ae, o = J.DEVICE_NOT_FOUND_ERROR, o), i(18, Te = !0)));
1898
- };
1899
- }
1900
- async function an() {
1901
- m(ft, s = !1, s);
1902
- const t = (/* @__PURE__ */ new Date()).getTime();
1903
- if (t - St > 5e3) {
1904
- St = t;
1905
- try {
1906
- const S = await Dn(D);
1907
- if (S < 50) {
1908
- m(Ne, C = "faceCollector.illuminationTooLow", C);
1909
- return;
1910
- }
1911
- if (S > 180) {
1912
- m(Ne, C = "faceCollector.illuminationTooHigh", C);
1913
- return;
1914
- }
1915
- } catch (S) {
1916
- console.warn("An error occurred while getting the video lighting level: ", S);
1917
- }
1918
- try {
1919
- if (await Bn(D) < 5) {
1920
- m(Ne, C = "faceCollector.lowSharpness", C);
1921
- return;
1922
- }
1923
- } catch (S) {
1924
- console.warn("An error occurred while getting the video sharpness level: ", S);
1925
- }
1926
- m(Ne, C = "faceCollector.faceWasNotFound", C);
1927
- } else
1928
- Pe || (Pe = !0, setTimeout(
1929
- () => {
1930
- let S = [
1931
- "faceCollector.faceWasNotFound",
1932
- "faceCollector.illuminationTooLow",
1933
- "faceCollector.lowSharpness",
1934
- "faceCollector.illuminationTooHigh"
1935
- ];
1936
- Pe = !1, i(14, Tt = !1), C && !S.includes(C) && m(Ne, C = "", C);
1937
- },
1938
- 1500
1939
- ));
1940
- }
1941
- const sn = Le.subscribe((t) => {
1942
- D && de && (i(9, D.width = t.videoWidth, D), i(9, D.height = t.videoHeight, D), i(10, de.width = t.videoWidth, de), i(10, de.height = t.videoHeight, de), i(15, Fe.width = t.videoWidth, Fe), i(15, Fe.height = t.videoHeight, Fe), i(16, z.width = t.videoWidth, z), i(16, z.height = t.videoHeight, z));
1943
- }), ln = li.subscribe((t) => {
1944
- if (r == "DOCUMENT")
1945
- return;
1946
- let R = "";
1947
- if (t.isPersonCloseEnough ? t.isPersonTooclose ? R = "faceCollector.moveAwayCamera" : t.isPersonInFrame ? t.closedMouth || (R = "faceCollector.dontOpenMouth") : R = "faceCollector.stayInFrame" : R = "faceCollector.comeCloserCamera", s && kn(R), !u && _ && s && !ne && t.isPersonInFrame && t.closedMouth && !(!t.isPersonCloseEnough || t.isPersonTooclose)) {
1948
- i(12, ne = !0), Lt = (/* @__PURE__ */ new Date()).getTime() + Zt;
1949
- const S = setInterval(
1950
- () => {
1951
- if (!_ || u || j() && Te || !t.isPersonCloseEnough || t.isPersonTooclose || !t.closedMouth || !t.isPersonInFrame) {
1952
- i(12, ne = !1), Nt = !0, setTimeout(
1953
- () => {
1954
- Nt = !1;
1955
- },
1956
- 1500
1957
- ), clearInterval(S);
1958
- return;
1959
- }
1960
- const P = (/* @__PURE__ */ new Date()).getTime();
1961
- Math.floor((Lt - P) % (1e3 * 60) / 1e3) <= 0 && (clearInterval(S), i(12, ne = !1), vi());
1962
- },
1963
- 100
1964
- );
1965
- }
1966
- }), rn = Ye.subscribe((t) => {
1967
- Ee && (t ? (Ee.classList.remove("flex"), Ee.classList.add("hidden")) : (Ee.classList.add("flex"), Ee.classList.remove("hidden")));
1968
- }), cn = Vt.subscribe((t) => {
1969
- D && t && (console.log("setting null in video srcObject"), i(9, D.srcObject = null, D), i(9, D.src = "", D), m(De, h = null, h));
1970
- });
1971
- jt.subscribe(async (t) => {
1972
- t === qt.Face && (await ci(), j() && m(De, h = d[0]?.deviceId, h));
1973
- });
1974
- const un = De.subscribe(async (t) => {
1975
- if (!t || j() && Te)
1976
- return;
1977
- D || i(13, y = {});
1978
- const { videoHeight: R, videoWidth: S } = g;
1979
- try {
1980
- if (j()) {
1981
- await _t(oe), await Ve();
1982
- return;
1983
- }
1984
- const P = await Rn(S, R, t);
1985
- i(9, D.srcObject = P, D), m(ii, O = P, O), m(Vt, T = !1, T), Ft ? m(ae, o = J.OK, o) : m(ae, o = J.CAMERA_ORIENTATION_PORTRAIT, o), P.getTracks().forEach((B) => {
1986
- B.readyState === "live" && console.log(`Camera ${B.label} opened successfully!`);
1987
- });
1988
- } catch (P) {
1989
- const B = P;
1990
- i(18, Te = !0), Ze(B) && "message" in B && B.message.includes("Requested device not found") && m(ae, o = J.DEVICE_NOT_FOUND_ERROR, o);
1991
- }
1992
- }), fn = jt.subscribe(async (t) => {
1993
- t === qt.Face && j() && !ze && !u && Bt && await Ve();
1994
- }), dn = ot.subscribe(async (t) => {
1995
- t && pi();
1996
- }), mn = Tn.subscribe(async (t) => {
1997
- if (d[0]?.deviceId) {
1998
- if (_t(), !Se() || j()) {
1999
- const S = (d.findIndex((B) => B.deviceId === h) + 1) % d.length, P = d[S].deviceId;
2000
- j() ? m(De, h = P, h) : await Ve(P);
2001
- return;
2002
- }
2003
- t ? (m(dt, c = si.REAR_CAMERA, c), await Ve()) : (m(dt, c = si.FRONT_CAMERA, c), await Ve());
2004
- }
2005
- }), hn = Sn.subscribe(async (t) => {
2006
- !t.isSupported || !Se() || r != "FACE" || (Ft = t.orientation.includes("portrait"), Ft ? m(ae, o = J.OK, o) : m(ae, o = J.CAMERA_ORIENTATION_PORTRAIT, o));
2007
- });
2008
- async function pi() {
2009
- let t;
2010
- if (Pt >= bi) {
2011
- Pt = 0;
2012
- const R = await In(), S = await import("./face_api_0e3ce8c8_2.3.1-RC01.js");
2013
- let P;
2014
- P = S.detectSingleFace(z, R), t = await P.withFaceLandmarks(), de.getContext("2d")?.clearRect(0, 0, de.width, de.height), t != null ? (An(t, de, $e), m(ft, s = !0, s), i(14, Tt = !0), St = (/* @__PURE__ */ new Date()).getTime()) : an();
2015
- } else
2016
- Pt++;
2017
- a && xe(D, pi);
2018
- }
2019
- Wt.subscribe(async (t) => {
2020
- t && (Xe(), m(Wt, l = !1, l));
2021
- });
2022
- const bn = ht.subscribe((t) => {
2023
- t && window.dispatchEvent(new CustomEvent("brycc-camera-ready"));
2024
- }), gn = mt.subscribe((t) => {
2025
- t && window.dispatchEvent(new CustomEvent("brycc-face-initialized"));
2026
- });
2027
- On(() => {
2028
- _t(), rn(), ln(), sn(), cn(), un(), fn(), clearInterval(Gt), dn(), mn(), hn(), bn(), gn(), Pi(), Gt = 0;
2029
- }), n.$$.on_mount.push(function() {
2030
- $e === void 0 && !("enableMinutiae" in e || n.$$.bound[n.$$.props.enableMinutiae]) && we.warn("<face-collector> was created without expected prop 'enableMinutiae'"), et === void 0 && !("videoDimensions" in e || n.$$.bound[n.$$.props.videoDimensions]) && we.warn("<face-collector> was created without expected prop 'videoDimensions'"), tt === void 0 && !("noTabs" in e || n.$$.bound[n.$$.props.noTabs]) && we.warn("<face-collector> was created without expected prop 'noTabs'"), it === void 0 && !("weightsPath" in e || n.$$.bound[n.$$.props.weightsPath]) && we.warn("<face-collector> was created without expected prop 'weightsPath'"), Ae === void 0 && !("evaluatePhoto" in e || n.$$.bound[n.$$.props.evaluatePhoto]) && we.warn("<face-collector> was created without expected prop 'evaluatePhoto'"), nt === void 0 && !("showCaptureButton" in e || n.$$.bound[n.$$.props.showCaptureButton]) && we.warn("<face-collector> was created without expected prop 'showCaptureButton'"), Ot === void 0 && !("showUnconformities" in e || n.$$.bound[n.$$.props.showUnconformities]) && we.warn("<face-collector> was created without expected prop 'showUnconformities'"), je === void 0 && !("videoOverlay" in e || n.$$.bound[n.$$.props.videoOverlay]) && we.warn("<face-collector> was created without expected prop 'videoOverlay'"), Ue === void 0 && !("videoOverlayTransparency" in e || n.$$.bound[n.$$.props.videoOverlayTransparency]) && we.warn("<face-collector> was created without expected prop 'videoOverlayTransparency'"), At === void 0 && !("showConfigButton" in e || n.$$.bound[n.$$.props.showConfigButton]) && we.warn("<face-collector> was created without expected prop 'showConfigButton'"), qe === void 0 && !("showAutoCaptureButton" in e || n.$$.bound[n.$$.props.showAutoCaptureButton]) && we.warn("<face-collector> was created without expected prop 'showAutoCaptureButton'"), It === void 0 && !("showCameraButton" in e || n.$$.bound[n.$$.props.showCameraButton]) && we.warn("<face-collector> was created without expected prop 'showCameraButton'"), Dt === void 0 && !("showJustificationField" in e || n.$$.bound[n.$$.props.showJustificationField]) && we.warn("<face-collector> was created without expected prop 'showJustificationField'"), We === void 0 && !("minEyeToEyeDist" in e || n.$$.bound[n.$$.props.minEyeToEyeDist]) && we.warn("<face-collector> was created without expected prop 'minEyeToEyeDist'"), oe === void 0 && !("widgetInstance" in e || n.$$.bound[n.$$.props.widgetInstance]) && we.warn("<face-collector> was created without expected prop 'widgetInstance'");
2031
- });
2032
- const go = [
2033
- "enableMinutiae",
2034
- "videoDimensions",
2035
- "noTabs",
2036
- "weightsPath",
2037
- "evaluatePhoto",
2038
- "showCaptureButton",
2039
- "showUnconformities",
2040
- "videoOverlay",
2041
- "videoOverlayTransparency",
2042
- "showConfigButton",
2043
- "showAutoCaptureButton",
2044
- "showCameraButton",
2045
- "showJustificationField",
2046
- "minEyeToEyeDist",
2047
- "widgetInstance"
2048
- ];
2049
- Object.keys(e).forEach((t) => {
2050
- !~go.indexOf(t) && t.slice(0, 2) !== "$$" && t !== "slot" && we.warn(`<face-collector> was created with unknown prop '${t}'`);
2051
- });
2052
- function _o(t) {
2053
- wt[t ? "unshift" : "push"](() => {
2054
- oe = t, i(0, oe);
2055
- });
2056
- }
2057
- function vo(t) {
2058
- wt[t ? "unshift" : "push"](() => {
2059
- D = t, i(9, D);
2060
- });
2061
- }
2062
- const wo = () => {
2063
- j() || m(
2064
- Le,
2065
- g = {
2066
- videoHeight: D.videoHeight,
2067
- videoWidth: D.videoWidth
2068
- },
2069
- g
2070
- );
2071
- };
2072
- function po(t) {
2073
- wt[t ? "unshift" : "push"](() => {
2074
- z = t, i(16, z);
2075
- });
2076
- }
2077
- function Co(t) {
2078
- wt[t ? "unshift" : "push"](() => {
2079
- de = t, i(10, de);
2080
- });
2081
- }
2082
- function yo(t) {
2083
- wt[t ? "unshift" : "push"](() => {
2084
- Fe = t, i(15, Fe);
2085
- });
2086
- }
2087
- const Eo = () => Mt(), ko = () => Xe();
2088
- function Ro(t) {
2089
- wt[t ? "unshift" : "push"](() => {
2090
- Ee = t, i(11, Ee);
2091
- });
2092
- }
2093
- const To = () => Mt(), So = () => Xe();
2094
- function Oo() {
2095
- I = this.value, Ht.set(I);
2096
- }
2097
- const Ao = () => Mt(), Io = () => Xe();
2098
- function Do() {
2099
- I = this.value, Ht.set(I);
2100
- }
2101
- const Bo = () => Xe(), Po = async () => {
2102
- await ei();
2103
- };
2104
- return n.$$set = (t) => {
2105
- "enableMinutiae" in t && i(45, $e = t.enableMinutiae), "videoDimensions" in t && i(46, et = t.videoDimensions), "noTabs" in t && i(47, tt = t.noTabs), "weightsPath" in t && i(48, it = t.weightsPath), "evaluatePhoto" in t && i(1, Ae = t.evaluatePhoto), "showCaptureButton" in t && i(2, nt = t.showCaptureButton), "showUnconformities" in t && i(3, Ot = t.showUnconformities), "videoOverlay" in t && i(49, je = t.videoOverlay), "videoOverlayTransparency" in t && i(50, Ue = t.videoOverlayTransparency), "showConfigButton" in t && i(4, At = t.showConfigButton), "showAutoCaptureButton" in t && i(5, qe = t.showAutoCaptureButton), "showCameraButton" in t && i(6, It = t.showCameraButton), "showJustificationField" in t && i(7, Dt = t.showJustificationField), "minEyeToEyeDist" in t && i(51, We = t.minEyeToEyeDist), "widgetInstance" in t && i(0, oe = t.widgetInstance);
2106
- }, n.$capture_state = () => ({
2107
- CameraStatus: Jn,
2108
- onDestroy: On,
2109
- onMount: pn,
2110
- _: yt,
2111
- isLoading: Ai,
2112
- get: Yt,
2113
- writable: Fi,
2114
- selectedTab: jt,
2115
- TabEnum: qt,
2116
- cameraDeniedPermission: Lo,
2117
- faceValidationsStore: li,
2118
- getFaceUnconformities: zt,
2119
- image: Be,
2120
- unconformitiesStore: Me,
2121
- setupStream: Rn,
2122
- videoStore: Le,
2123
- requestResult: ve,
2124
- cameraDevicesStore: Ei,
2125
- justification: Ht,
2126
- saved: Kt,
2127
- captured: Ye,
2128
- _stream: ii,
2129
- shutOffCamera: _t,
2130
- ready: ht,
2131
- initializing: mt,
2132
- clearedVideoSrcObject: Vt,
2133
- enumerateDevices: ci,
2134
- originalCapture: Ge,
2135
- automaticCapture: Ke,
2136
- selectedVideoDeviceId: De,
2137
- translateAndSetUnconformities: Xt,
2138
- requestResultEnum: X,
2139
- retakePhoto: Wt,
2140
- showFaceWhileValidating: Ii,
2141
- getVideoDimensions: Bi,
2142
- FaceExportStrategy: Kn,
2143
- orientationData: Sn,
2144
- FacingModeEnum: si,
2145
- facingMode: dt,
2146
- unconformityToi18nKey: Li,
2147
- swapCamera: Tn,
2148
- ConfBtn: Hn,
2149
- CameraBtn: zn,
2150
- AutoCaptureBtn: en,
2151
- ExportBtn: jn,
2152
- enableStrategy: qn,
2153
- exportButtonDisabled: Di,
2154
- boxStore: Ri,
2155
- drawDetectionsInFace: An,
2156
- enableFaceApi: Ti,
2157
- faceFound: ft,
2158
- getFaceDetectorOptions: In,
2159
- ovalDimensions: gt,
2160
- faceValidationAlert: Ne,
2161
- eyeDistance: Si,
2162
- setValidationAlert: kn,
2163
- blobToBase64: Jt,
2164
- isMobile: Se,
2165
- isObject: Ze,
2166
- loadFaceApiAndWeights: yn,
2167
- loopCaller: xe,
2168
- unLockScreen: Pi,
2169
- getImageLightness: Dn,
2170
- getImageSharpness: Bn,
2171
- collectorSelect: yi,
2172
- isLivenessEnabled: j,
2173
- screenLocked: ni,
2174
- loadingGif: $i,
2175
- getLivenessIdrnd: En,
2176
- blob: bt,
2177
- idrndErrorToi18nKey: vt,
2178
- showLivenessResultToast: ki,
2179
- captureLivenessIdrndEndpoint: Oi,
2180
- idrndInitialized: oi,
2181
- idrndVideoStoreDimensions: ai,
2182
- Swal: wn,
2183
- AxiosError: ri,
2184
- cameraStatusStore: ae,
2185
- CameraStatusEnum: J,
2186
- log: Cn,
2187
- TakePictureBtn: Xn,
2188
- video: D,
2189
- detectionsCanvas: de,
2190
- enclosingDiv: Ee,
2191
- isCountingDown: ne,
2192
- unique: y,
2193
- loadedFaceApiAndWeights: H,
2194
- waitingFaceNotFoundTimeout: Pe,
2195
- enableCaptureButton: Tt,
2196
- faceFoundStartTime: St,
2197
- enableMinutiae: $e,
2198
- videoDimensions: et,
2199
- noTabs: tt,
2200
- weightsPath: it,
2201
- evaluatePhoto: Ae,
2202
- showCaptureButton: nt,
2203
- showUnconformities: Ot,
2204
- videoOverlay: je,
2205
- videoOverlayTransparency: Ue,
2206
- showConfigButton: At,
2207
- showAutoCaptureButton: qe,
2208
- showCameraButton: It,
2209
- showJustificationField: Dt,
2210
- minEyeToEyeDist: We,
2211
- startFaceApi: ot,
2212
- dataTypePrefix: Je,
2213
- widgetInstance: oe,
2214
- maskCanvas: Fe,
2215
- displayCanvas: z,
2216
- capturing: ze,
2217
- initialized: Bt,
2218
- idrndLoading: at,
2219
- idrndClosed: Te,
2220
- waitingIdrndCaptureEvent: st,
2221
- intervalId: Gt,
2222
- livenessError: ke,
2223
- faceApiCounter: Pt,
2224
- faceApiFrameRate: bi,
2225
- countDownCapture: Zt,
2226
- rightOrientation: Ft,
2227
- countDownFinishTime: Lt,
2228
- disableCountDown: Nt,
2229
- toast: lt,
2230
- setVideoWidthHeight: gi,
2231
- resetFaceCollector: _i,
2232
- drawOval: xt,
2233
- drawVideoOnCanvas: Ni,
2234
- registerIdrndListeners: tn,
2235
- openCamera: Ve,
2236
- openCameraLiveness: $t,
2237
- play: rt,
2238
- capture: vi,
2239
- save: Mt,
2240
- retake: Xe,
2241
- validateLiveness: wi,
2242
- selectDevice: nn,
2243
- reOpenCamera: ei,
2244
- registerDeviceChangeListener: on,
2245
- setFaceNotFoundAlert: an,
2246
- unsubscribeVideoDimensions: sn,
2247
- unsubscribeFaceValidations: ln,
2248
- unsubscribeCapturedState: rn,
2249
- unsubscribeClearVideoSrc: cn,
2250
- unsubscribeSelectedStream: un,
2251
- unsubscribeChangeTab: fn,
2252
- unsubscribeFaceApi: dn,
2253
- unsubscribeSwapCamera: mn,
2254
- unsubscribeOrientation: hn,
2255
- faceapiLoop: pi,
2256
- unsubscribeReadyCameraEventEmitter: bn,
2257
- unsubscribeInitializedEventEmitter: gn,
2258
- $retakePhoto: l,
2259
- $startFaceApi: a,
2260
- $faceFound: s,
2261
- $cameraStatusStore: o,
2262
- $collectorSelect: r,
2263
- $facingMode: c,
2264
- $selectedVideoDeviceId: h,
2265
- $cameraDevicesStore: d,
2266
- $captured: u,
2267
- $clearedVideoSrcObject: T,
2268
- $_stream: O,
2269
- $videoStore: g,
2270
- $automaticCapture: _,
2271
- $faceValidationAlert: C,
2272
- $showLivenessResultToast: v,
2273
- $saved: N,
2274
- $justification: I,
2275
- $image: A,
2276
- $requestResult: k,
2277
- $_: Re,
2278
- $unconformitiesStore: se,
2279
- $originalCapture: fe,
2280
- $dataTypePrefix: pe,
2281
- $boxStore: He,
2282
- $enableFaceApi: Ie,
2283
- $eyeDistance: ee,
2284
- $screenLocked: ie,
2285
- $initializing: Ce,
2286
- $ready: be,
2287
- $selectedTab: ye,
2288
- $captureLivenessIdrndEndpoint: te,
2289
- $blob: Z,
2290
- $idrndInitialized: x,
2291
- $idrndVideoStoreDimensions: Q,
2292
- $ovalDimensions: Y,
2293
- $isLoading: re,
2294
- $showFaceWhileValidating: ce,
2295
- $exportButtonDisabled: ue
2296
- }), n.$inject_state = (t) => {
2297
- "video" in t && i(9, D = t.video), "detectionsCanvas" in t && i(10, de = t.detectionsCanvas), "enclosingDiv" in t && i(11, Ee = t.enclosingDiv), "isCountingDown" in t && i(12, ne = t.isCountingDown), "unique" in t && i(13, y = t.unique), "loadedFaceApiAndWeights" in t && (H = t.loadedFaceApiAndWeights), "waitingFaceNotFoundTimeout" in t && (Pe = t.waitingFaceNotFoundTimeout), "enableCaptureButton" in t && i(14, Tt = t.enableCaptureButton), "faceFoundStartTime" in t && (St = t.faceFoundStartTime), "enableMinutiae" in t && i(45, $e = t.enableMinutiae), "videoDimensions" in t && i(46, et = t.videoDimensions), "noTabs" in t && i(47, tt = t.noTabs), "weightsPath" in t && i(48, it = t.weightsPath), "evaluatePhoto" in t && i(1, Ae = t.evaluatePhoto), "showCaptureButton" in t && i(2, nt = t.showCaptureButton), "showUnconformities" in t && i(3, Ot = t.showUnconformities), "videoOverlay" in t && i(49, je = t.videoOverlay), "videoOverlayTransparency" in t && i(50, Ue = t.videoOverlayTransparency), "showConfigButton" in t && i(4, At = t.showConfigButton), "showAutoCaptureButton" in t && i(5, qe = t.showAutoCaptureButton), "showCameraButton" in t && i(6, It = t.showCameraButton), "showJustificationField" in t && i(7, Dt = t.showJustificationField), "minEyeToEyeDist" in t && i(51, We = t.minEyeToEyeDist), "widgetInstance" in t && i(0, oe = t.widgetInstance), "maskCanvas" in t && i(15, Fe = t.maskCanvas), "displayCanvas" in t && i(16, z = t.displayCanvas), "capturing" in t && (ze = t.capturing), "initialized" in t && (Bt = t.initialized), "idrndLoading" in t && i(17, at = t.idrndLoading), "idrndClosed" in t && i(18, Te = t.idrndClosed), "waitingIdrndCaptureEvent" in t && i(19, st = t.waitingIdrndCaptureEvent), "intervalId" in t && (Gt = t.intervalId), "livenessError" in t && i(20, ke = t.livenessError), "faceApiCounter" in t && (Pt = t.faceApiCounter), "faceApiFrameRate" in t && (bi = t.faceApiFrameRate), "countDownCapture" in t && (Zt = t.countDownCapture), "rightOrientation" in t && (Ft = t.rightOrientation), "countDownFinishTime" in t && (Lt = t.countDownFinishTime), "disableCountDown" in t && (Nt = t.disableCountDown);
2298
- }, e && "$$inject" in e && n.$inject_state(e.$$inject), [
2299
- oe,
2300
- Ae,
2301
- nt,
2302
- Ot,
2303
- At,
2304
- qe,
2305
- It,
2306
- Dt,
2307
- rt,
2308
- D,
2309
- de,
2310
- Ee,
2311
- ne,
2312
- y,
2313
- Tt,
2314
- Fe,
2315
- z,
2316
- at,
2317
- Te,
2318
- st,
2319
- ke,
2320
- o,
2321
- h,
2322
- u,
2323
- g,
2324
- _,
2325
- C,
2326
- N,
2327
- I,
2328
- A,
2329
- k,
2330
- Re,
2331
- se,
2332
- pe,
2333
- Ie,
2334
- be,
2335
- re,
2336
- ce,
2337
- ue,
2338
- ot,
2339
- Je,
2340
- vi,
2341
- Mt,
2342
- Xe,
2343
- ei,
2344
- $e,
2345
- et,
2346
- tt,
2347
- it,
2348
- je,
2349
- Ue,
2350
- We,
2351
- _o,
2352
- vo,
2353
- wo,
2354
- po,
2355
- Co,
2356
- yo,
2357
- Eo,
2358
- ko,
2359
- Ro,
2360
- To,
2361
- So,
2362
- Oo,
2363
- Ao,
2364
- Io,
2365
- Do,
2366
- Bo,
2367
- Po
2368
- ];
2369
- }
2370
- class Vo extends Mn {
2371
- constructor(e) {
2372
- super(), Un(
2373
- this,
2374
- {
2375
- target: this.shadowRoot,
2376
- props: Wn(this.attributes),
2377
- customElement: !0
2378
- },
2379
- Wo,
2380
- bo,
2381
- xi,
2382
- {
2383
- enableMinutiae: 45,
2384
- videoDimensions: 46,
2385
- noTabs: 47,
2386
- weightsPath: 48,
2387
- evaluatePhoto: 1,
2388
- showCaptureButton: 2,
2389
- showUnconformities: 3,
2390
- videoOverlay: 49,
2391
- videoOverlayTransparency: 50,
2392
- showConfigButton: 4,
2393
- showAutoCaptureButton: 5,
2394
- showCameraButton: 6,
2395
- showJustificationField: 7,
2396
- minEyeToEyeDist: 51,
2397
- widgetInstance: 0,
2398
- play: 8
2399
- },
2400
- null,
2401
- [-1, -1, -1, -1, -1]
2402
- ), e && (e.target && U(e.target, this, e.anchor), e.props && (this.$set(e.props), _e()));
2403
- }
2404
- static get observedAttributes() {
2405
- return [
2406
- "enableMinutiae",
2407
- "videoDimensions",
2408
- "noTabs",
2409
- "weightsPath",
2410
- "evaluatePhoto",
2411
- "showCaptureButton",
2412
- "showUnconformities",
2413
- "videoOverlay",
2414
- "videoOverlayTransparency",
2415
- "showConfigButton",
2416
- "showAutoCaptureButton",
2417
- "showCameraButton",
2418
- "showJustificationField",
2419
- "minEyeToEyeDist",
2420
- "widgetInstance",
2421
- "play"
2422
- ];
2423
- }
2424
- get enableMinutiae() {
2425
- return this.$$.ctx[45];
2426
- }
2427
- set enableMinutiae(e) {
2428
- this.$$set({ enableMinutiae: e }), _e();
2429
- }
2430
- get videoDimensions() {
2431
- return this.$$.ctx[46];
2432
- }
2433
- set videoDimensions(e) {
2434
- this.$$set({ videoDimensions: e }), _e();
2435
- }
2436
- get noTabs() {
2437
- return this.$$.ctx[47];
2438
- }
2439
- set noTabs(e) {
2440
- this.$$set({ noTabs: e }), _e();
2441
- }
2442
- get weightsPath() {
2443
- return this.$$.ctx[48];
2444
- }
2445
- set weightsPath(e) {
2446
- this.$$set({ weightsPath: e }), _e();
2447
- }
2448
- get evaluatePhoto() {
2449
- return this.$$.ctx[1];
2450
- }
2451
- set evaluatePhoto(e) {
2452
- this.$$set({ evaluatePhoto: e }), _e();
2453
- }
2454
- get showCaptureButton() {
2455
- return this.$$.ctx[2];
2456
- }
2457
- set showCaptureButton(e) {
2458
- this.$$set({ showCaptureButton: e }), _e();
2459
- }
2460
- get showUnconformities() {
2461
- return this.$$.ctx[3];
2462
- }
2463
- set showUnconformities(e) {
2464
- this.$$set({ showUnconformities: e }), _e();
2465
- }
2466
- get videoOverlay() {
2467
- return this.$$.ctx[49];
2468
- }
2469
- set videoOverlay(e) {
2470
- this.$$set({ videoOverlay: e }), _e();
2471
- }
2472
- get videoOverlayTransparency() {
2473
- return this.$$.ctx[50];
2474
- }
2475
- set videoOverlayTransparency(e) {
2476
- this.$$set({ videoOverlayTransparency: e }), _e();
2477
- }
2478
- get showConfigButton() {
2479
- return this.$$.ctx[4];
2480
- }
2481
- set showConfigButton(e) {
2482
- this.$$set({ showConfigButton: e }), _e();
2483
- }
2484
- get showAutoCaptureButton() {
2485
- return this.$$.ctx[5];
2486
- }
2487
- set showAutoCaptureButton(e) {
2488
- this.$$set({ showAutoCaptureButton: e }), _e();
2489
- }
2490
- get showCameraButton() {
2491
- return this.$$.ctx[6];
2492
- }
2493
- set showCameraButton(e) {
2494
- this.$$set({ showCameraButton: e }), _e();
2495
- }
2496
- get showJustificationField() {
2497
- return this.$$.ctx[7];
2498
- }
2499
- set showJustificationField(e) {
2500
- this.$$set({ showJustificationField: e }), _e();
2501
- }
2502
- get minEyeToEyeDist() {
2503
- return this.$$.ctx[51];
2504
- }
2505
- set minEyeToEyeDist(e) {
2506
- this.$$set({ minEyeToEyeDist: e }), _e();
2507
- }
2508
- get widgetInstance() {
2509
- return this.$$.ctx[0];
2510
- }
2511
- set widgetInstance(e) {
2512
- this.$$set({ widgetInstance: e }), _e();
2513
- }
2514
- get play() {
2515
- return this.$$.ctx[8];
2516
- }
2517
- set play(e) {
2518
- throw new Error("<face-collector>: Cannot set read-only property 'play'");
2519
- }
2520
- }
2521
- customElements.define("face-collector", Vo);
2522
- export {
2523
- Vo as default
2524
- };
2525
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFjZUNvbGxlY3Rvcl8zYmM5ZDM1NF8yLjMuMS1SQzAxLmpzIiwic291cmNlcyI6WyIuLi9zcmMvbGliL2ZhY2VUYWIvYnV0dG9ucy9jYXB0dXJlL2F1dG9DYXB0dXJlQnRuL0F1dG9DYXB0dXJlQnRuLnN2ZWx0ZSIsIi4uL3NyYy9saWIvZmFjZVRhYi9GYWNlQ29sbGVjdG9yLnN2ZWx0ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8c3ZlbHRlOm9wdGlvbnMgdGFnPVwic3RhcnQtYXV0by1jYXB0dXJlLWJ0blwiIC8+XG5cbjxzY3JpcHQgbGFuZz1cInRzXCI+XG4gIGltcG9ydCB7IGF1dG9tYXRpY0NhcHR1cmUgfSBmcm9tIFwiLi4vLi4vLi4vZmFjZVN0b3JlXCI7XG4gIGltcG9ydCB7IF8gfSBmcm9tICdzdmVsdGUtaTE4bic7XG4gIGltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvdXRpbFwiO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUF1dG9DYXB0dXJlKCkge1xuICAgICRhdXRvbWF0aWNDYXB0dXJlID0gdHJ1ZTtcbiAgfVxuICAgIFxuPC9zY3JpcHQ+XG5cbjxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiPlxuICA8YnV0dG9uIGNsYXNzPXtcbiAgICBpc01vYmlsZSgpXG4gICAgPyBcImNlLWR1aS1idG4gY2UtZHVpLWJ0bi1wcmltYXJ5IHRleHQtYmFzZSB0ZXh0LXhsIHBiLVsycHhdIGFic29sdXRlIHotMjAgYm90dG9tLTEwXCJcbiAgICA6IFwiY2UtZHVpLWJ0biBjZS1kdWktYnRuLXByaW1hcnkgdGV4dC1iYXNlIHRleHQteGwgcGItWzJweF0gYWJzb2x1dGUgei0yMCBib3R0b20tMlwifVxuICAgIG9uOmNsaWNrPXsoKSA9PiBoYW5kbGVBdXRvQ2FwdHVyZSgpfVxuICAgID5cbiAgICAgIHskXygnYnV0dG9ucy5zdGFydENhcHR1cmUnKX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbiIsIjxzdmVsdGU6b3B0aW9ucyB0YWc9XCJmYWNlLWNvbGxlY3RvclwiIC8+XG5cbjxzY3JpcHQgbGFuZz1cInRzXCI+XG4gIGltcG9ydCBDYW1lcmFTdGF0dXMgZnJvbSAnLi9jYW1lcmFTdGF0dXMvQ2FtZXJhU3RhdHVzLnN2ZWx0ZSc7XG4gIGltcG9ydCB7IG9uRGVzdHJveSwgb25Nb3VudCB9IGZyb20gJ3N2ZWx0ZSc7XG4gIGltcG9ydCB0eXBlIHsgQm9keVBhcnQsIEJvZHlQYXJ0UmV0dXJuVHlwZSB9IGZyb20gJy4uL3ZhbGlkYXRvcnMvYmlvbWV0cmljc1ZhbGlkYXRvcic7XG4gIGltcG9ydCB7IF8sIGlzTG9hZGluZyB9IGZyb20gJ3N2ZWx0ZS1pMThuJztcbiAgaW1wb3J0IHsgZ2V0LCB3cml0YWJsZSB9IGZyb20gJ3N2ZWx0ZS9zdG9yZSc7XG4gIGltcG9ydCB7IHNlbGVjdGVkVGFiLCBUYWJFbnVtIH0gZnJvbSAnLi4vdGFiQnRucy90YWJTdG9yZSc7XG4gIGltcG9ydCB7XG4gICAgY2FtZXJhRGVuaWVkUGVybWlzc2lvbixcbiAgICBmYWNlVmFsaWRhdGlvbnNTdG9yZSxcbiAgICBnZXRGYWNlVW5jb25mb3JtaXRpZXMsXG4gICAgaW1hZ2UsXG4gICAgdW5jb25mb3JtaXRpZXNTdG9yZSxcbiAgICBzZXR1cFN0cmVhbSxcbiAgICB2aWRlb1N0b3JlLFxuICAgIHJlcXVlc3RSZXN1bHQsXG4gICAgY2FtZXJhRGV2aWNlc1N0b3JlLFxuICAgIGp1c3RpZmljYXRpb24sXG4gICAgc2F2ZWQsXG4gICAgY2FwdHVyZWQsXG4gICAgX3N0cmVhbSxcbiAgICBzaHV0T2ZmQ2FtZXJhLFxuICAgIHJlYWR5LFxuICAgIGluaXRpYWxpemluZyxcbiAgICBjbGVhcmVkVmlkZW9TcmNPYmplY3QsXG4gICAgZW51bWVyYXRlRGV2aWNlcyxcbiAgICBvcmlnaW5hbENhcHR1cmUsXG4gICAgYXV0b21hdGljQ2FwdHVyZSxcbiAgICBzZWxlY3RlZFZpZGVvRGV2aWNlSWQsXG4gICAgdHJhbnNsYXRlQW5kU2V0VW5jb25mb3JtaXRpZXMsXG4gICAgcmVxdWVzdFJlc3VsdEVudW0sXG4gICAgcmV0YWtlUGhvdG8sXG4gICAgc2hvd0ZhY2VXaGlsZVZhbGlkYXRpbmcsXG4gICAgZ2V0VmlkZW9EaW1lbnNpb25zLFxuICAgIEZhY2VFeHBvcnRTdHJhdGVneSxcbiAgICBvcmllbnRhdGlvbkRhdGEsXG4gICAgRmFjaW5nTW9kZUVudW0sXG4gICAgZmFjaW5nTW9kZSxcbiAgICB1bmNvbmZvcm1pdHlUb2kxOG5LZXlcblxuICB9IGZyb20gJy4vZmFjZVN0b3JlJztcbiAgaW1wb3J0IHtcbiAgICBzd2FwQ2FtZXJhXG4gIH1mcm9tICcuLi9jb25mL2NvbmZTdG9yZSc7ICBcbiAgaW1wb3J0IENvbmZCdG4gZnJvbSAnLi4vY29uZi9Db25mQnRuLnN2ZWx0ZSc7XG4gIGltcG9ydCBDYW1lcmFCdG4gZnJvbSAnLi4vY29uZi9DYW1lcmFCdG4uc3ZlbHRlJztcbiAgaW1wb3J0IEF1dG9DYXB0dXJlQnRuIGZyb20gJy4vYnV0dG9ucy9jYXB0dXJlL2F1dG9DYXB0dXJlQnRuL0F1dG9DYXB0dXJlQnRuLnN2ZWx0ZSc7XG4gIGltcG9ydCBFeHBvcnRCdG4gZnJvbSAnLi4vZmluZ2Vyc1RhYi9idXR0b25zL2V4cG9ydEJ0bi9FeHBvcnRCdG4uc3ZlbHRlJztcbiAgaW1wb3J0IHsgZW5hYmxlU3RyYXRlZ3kgfSBmcm9tICcuLi9maW5nZXJzVGFiL2hhbmQvaGFuZFBhcnRzL2ZpbmdlcnNTdG9yZSc7XG4gIGltcG9ydCB7IGV4cG9ydEJ1dHRvbkRpc2FibGVkIH0gZnJvbSAnLi4vZmluZ2Vyc1RhYi9idXR0b25zL2V4cG9ydEJ0bi9leHBvcnRTdG9yZSc7XG4gIGltcG9ydCB7XG4gICAgYm94U3RvcmUsXG4gICAgZHJhd0RldGVjdGlvbnNJbkZhY2UsXG4gICAgZW5hYmxlRmFjZUFwaSxcbiAgICBmYWNlRm91bmQsXG4gICAgZ2V0RmFjZURldGVjdG9yT3B0aW9ucyxcbiAgICBvdmFsRGltZW5zaW9ucyxcbiAgICBmYWNlVmFsaWRhdGlvbkFsZXJ0LFxuICAgIGV5ZURpc3RhbmNlLFxuICAgIHNldFZhbGlkYXRpb25BbGVydCxcbiAgfSBmcm9tICcuL2ZhY2VBcGlTdG9yZSc7XG4gIGltcG9ydCB7IGJsb2JUb0Jhc2U2NCwgaXNNb2JpbGUsIGlzT2JqZWN0LCBsb2FkRmFjZUFwaUFuZFdlaWdodHMsIGxvb3BDYWxsZXIsIHVuTG9ja1NjcmVlbiwgZ2V0SW1hZ2VMaWdodG5lc3MsIGdldEltYWdlU2hhcnBuZXNzfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuICBpbXBvcnQgeyBjb2xsZWN0b3JTZWxlY3QsIGlzTGl2ZW5lc3NFbmFibGVkLCBzY3JlZW5Mb2NrZWQgfSBmcm9tICcuLi8uLi9tYWluU3RvcmUnO1xuICBpbXBvcnQgbG9hZGluZ0dpZiBmcm9tICcuLi8uLi9hc3NldHMvaW1nL0Jsb2Nrcy0xcy0yMDBweC5naWYnO1xuICBpbXBvcnQge1xuICAgIGdldExpdmVuZXNzSWRybmQsXG4gICAgYmxvYixcbiAgICBpZHJuZEVycm9yVG9pMThuS2V5LFxuICAgIHNob3dMaXZlbmVzc1Jlc3VsdFRvYXN0LFxuICAgIGNhcHR1cmVMaXZlbmVzc0lkcm5kRW5kcG9pbnQsXG4gICAgdHlwZSBsaXZlbmVzc1Jlc3VsdCxcbiAgICB0eXBlIGxpdmVuZXNzRXJyb3JSZXN1bHQsXG4gICAgaWRybmRJbml0aWFsaXplZCxcbiAgICBpZHJuZFZpZGVvU3RvcmVEaW1lbnNpb25zLFxuICB9IGZyb20gJy4vbGl2ZW5lc3MvTGl2ZW5lc3NTdG9yZSc7XG4gIGltcG9ydCB0eXBlIHsgU3dlZXRBbGVydEljb24gfSBmcm9tICdzd2VldGFsZXJ0Mic7XG4gIGltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcbiAgaW1wb3J0IHsgQXhpb3NFcnJvciwgdHlwZSBBeGlvc1Jlc3BvbnNlIH0gZnJvbSAnYXhpb3MnO1xuICBpbXBvcnQgeyBjYW1lcmFTdGF0dXNTdG9yZSwgQ2FtZXJhU3RhdHVzRW51bSB9IGZyb20gJy4vY2FtZXJhU3RhdHVzL2NhbWVyYVN0YXR1c1N0b3JlJztcbiAgaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi4vdXRpbC9sb2dnZXInO1xuICBpbXBvcnQgVGFrZVBpY3R1cmVCdG4gZnJvbSAnLi9idXR0b25zL2NhcHR1cmUvdGFrZVBpY3R1cmVCdG4vVGFrZVBpY3R1cmVCdG4uc3ZlbHRlJztcbiAgXG4gIGxldCB2aWRlbzogSFRNTFZpZGVvRWxlbWVudDtcbiAgbGV0IGRldGVjdGlvbnNDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xuICBsZXQgZW5jbG9zaW5nRGl2OiBIVE1MRGl2RWxlbWVudDtcbiAgbGV0IGlzQ291bnRpbmdEb3duID0gZmFsc2U7XG4gIGxldCB1bmlxdWUgPSB7fTtcbiAgbGV0IGxvYWRlZEZhY2VBcGlBbmRXZWlnaHRzID0gZmFsc2U7XG4gIGxldCB3YWl0aW5nRmFjZU5vdEZvdW5kVGltZW91dCA9IGZhbHNlO1xuICBsZXQgZW5hYmxlQ2FwdHVyZUJ1dHRvbiA9IGZhbHNlO1xuICBsZXQgZmFjZUZvdW5kU3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgLy8gUHJvcHNcbiAgZXhwb3J0IGxldCBlbmFibGVNaW51dGlhZTogYm9vbGVhbjtcbiAgZXhwb3J0IGxldCB2aWRlb0RpbWVuc2lvbnM6IHN0cmluZztcbiAgZXhwb3J0IGxldCBub1RhYnM6IGJvb2xlYW47XG4gIGV4cG9ydCBsZXQgd2VpZ2h0c1BhdGg6IHN0cmluZztcbiAgZXhwb3J0IGxldCBldmFsdWF0ZVBob3RvOiBib29sZWFuO1xuICBleHBvcnQgbGV0IHNob3dDYXB0dXJlQnV0dG9uOiBib29sZWFuO1xuICBleHBvcnQgbGV0IHNob3dVbmNvbmZvcm1pdGllczogYm9vbGVhbjtcbiAgZXhwb3J0IGxldCB2aWRlb092ZXJsYXk6IHN0cmluZztcbiAgZXhwb3J0IGxldCB2aWRlb092ZXJsYXlUcmFuc3BhcmVuY3k6IG51bWJlcjtcbiAgZXhwb3J0IGxldCBzaG93Q29uZmlnQnV0dG9uOiBib29sZWFuO1xuICBleHBvcnQgbGV0IHNob3dBdXRvQ2FwdHVyZUJ1dHRvbjogYm9vbGVhbjtcbiAgZXhwb3J0IGxldCBzaG93Q2FtZXJhQnV0dG9uOiBib29sZWFuO1xuICBleHBvcnQgbGV0IHNob3dKdXN0aWZpY2F0aW9uRmllbGQ6IGJvb2xlYW47XG4gIGV4cG9ydCBsZXQgbWluRXllVG9FeWVEaXN0OiBudW1iZXI7XG5cbiAgY29uc3Qgc3RhcnRGYWNlQXBpID0gd3JpdGFibGUoZmFsc2UpO1xuICBjb25zdCBkYXRhVHlwZVByZWZpeCA9IHdyaXRhYmxlKCdkYXRhOmltYWdlL3BuZztiYXNlNjQnKTtcblxuICAvLyBsaXZlbmVzcyByZWxhdGVkXG4gIC8vIHByb3AgcGFzc2luZyB1cCB0byBwYXJlbnRcbiAgZXhwb3J0IGxldCB3aWRnZXRJbnN0YW5jZTogSFRNTElkTGl2ZUZhY2VDYXB0dXJlRWxlbWVudDtcbiAgbGV0IG1hc2tDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xuICBsZXQgZGlzcGxheUNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG4gIGxldCBjYXB0dXJpbmcgPSBmYWxzZTtcbiAgbGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG4gIGxldCBpZHJuZExvYWRpbmcgPSB0cnVlO1xuICBsZXQgaWRybmRDbG9zZWQgPSB0cnVlO1xuICBsZXQgd2FpdGluZ0lkcm5kQ2FwdHVyZUV2ZW50ID0gZmFsc2U7XG4gIGxldCBpbnRlcnZhbElkID0gMDtcbiAgbGV0IGxpdmVuZXNzRXJyb3IgPSAnJztcbiAgbGV0IGZhY2VBcGlDb3VudGVyID0gMDtcbiAgbGV0IGZhY2VBcGlGcmFtZVJhdGUgPSA1O1xuICBsZXQgY291bnREb3duQ2FwdHVyZSA9IDMwMDA7XG4gIGxldCByaWdodE9yaWVudGF0aW9uID0gdHJ1ZTtcblxuICBsZXQgY291bnREb3duRmluaXNoVGltZSA9IDA7XG4gIGxldCBkaXNhYmxlQ291bnREb3duID0gZmFsc2U7XG5cbiAgY29uc3QgdG9hc3QgPSBTd2FsLm1peGluKHtcbiAgICB0b2FzdDogdHJ1ZSxcbiAgICBwb3NpdGlvbjogJ2JvdHRvbS1sZWZ0JyxcbiAgICB0aW1lcjogMTMwMDAsXG4gICAgdGltZXJQcm9ncmVzc0JhcjogdHJ1ZSxcbiAgfSk7XG5cbiAgb25Nb3VudChhc3luYyAoKSA9PiB7XG4gICAgbG9nKCdNb3VudGluZyBGYWNlIENvbGxlY3RvciEnKTtcbiAgICAkaW5pdGlhbGl6aW5nID0gdHJ1ZTtcbiAgICAkcmVhZHkgPSBmYWxzZTtcbiAgICByZXNldEZhY2VDb2xsZWN0b3IoKSAvLyByZXNldCBhbGwgZmFjZSBjb2xsZWN0b3IgdmFyaWFibGVzXG4gICAgc2V0VmlkZW9XaWR0aEhlaWdodCgpO1xuICAgIGlmIChpc0xpdmVuZXNzRW5hYmxlZCgpKSB7XG4gICAgICBpbXBvcnQoJ2xpdmVuZXNzLWxpYi1kZXYvaW5kZXgtbm8tZGV0ZWN0b3InKTtcbiAgICAgIHJlZ2lzdGVySWRybmRMaXN0ZW5lcnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgb3BlbkNhbWVyYSgpOyBcbiAgICB9XG5cbiAgICBpZiAoJGVuYWJsZUZhY2VBcGkpIHtcbiAgICAgIGF3YWl0IGxvYWRGYWNlQXBpQW5kV2VpZ2h0cyh3ZWlnaHRzUGF0aCk7XG4gICAgICBsb2FkZWRGYWNlQXBpQW5kV2VpZ2h0cyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFpc01vYmlsZSgpKSB7XG4gICAgICByZWdpc3RlckRldmljZUNoYW5nZUxpc3RlbmVyKCk7XG4gICAgfVxuXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHNldFZpZGVvV2lkdGhIZWlnaHQoKSB7XG4gICAgLy8gdGhpcyB3ZWlyZCBzdHVmIHdpdGggaGVpZ2h0IGFuZCB3aWR0aCBpcyBoZXJlIHRvIGNvbXBlbnNhdGUgYSBzdmVsdGUgaXNzdWVcbiAgICAvLyBiZWNhdXNlIG9uTW91bnQgZ2V0cyBjYWxsZWQgdHdpY2VcbiAgICBjb25zdCBbd2lkdGgsIGhlaWdodF0gPSAodmlkZW9EaW1lbnNpb25zID8/ICcnKVxuICAgICAgPy5yZXBsYWNlQWxsKCcgJywgJycpXG4gICAgICA/LnNwbGl0KCd4JylcbiAgICAgID8ubWFwKCh2KSA9PiAodiA/IHBhcnNlSW50KHYpIDogdW5kZWZpbmVkKSk7XG4gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSByZXR1cm47XG4gICAgJHZpZGVvU3RvcmUgPSB7IHZpZGVvV2lkdGg6IHdpZHRoLCB2aWRlb0hlaWdodDogaGVpZ2h0IH07XG4gICAgLy8gZmxpcCBlbVxuICAgIGlmIChpc0xpdmVuZXNzRW5hYmxlZCgpICYmIGhlaWdodCA8IHdpZHRoICYmIGlzTW9iaWxlKCkpIHtcbiAgICAgICR2aWRlb1N0b3JlID0geyB2aWRlb1dpZHRoOiBoZWlnaHQsIHZpZGVvSGVpZ2h0OiB3aWR0aCB9O1xuICAgIH1cblxuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRGYWNlQ29sbGVjdG9yKCkge1xuICAgICRmYWNlRm91bmQgPSBmYWxzZTtcbiAgICAkY2FwdHVyZWQgPSBmYWxzZTtcbiAgICAkZmFjaW5nTW9kZSA9IEZhY2luZ01vZGVFbnVtLkZST05UX0NBTUVSQTtcbiAgICAkY2FtZXJhU3RhdHVzU3RvcmUgPSBDYW1lcmFTdGF0dXNFbnVtLk9LO1xuICAgIC8vIGRpc2FibGUgYXV0b21hdGljIGNhcHR1cmUgaWYgc2hvd0F1dG9DYXB0dXJlQnV0dG9uIHByb3BlcnR5IGlzIHRydWVcbiAgICBpZiAoc2hvd0F1dG9DYXB0dXJlQnV0dG9uKSB7XG4gICAgICAkYXV0b21hdGljQ2FwdHVyZSA9IGZhbHNlO1xuICAgIH1cbiAgICAkc2F2ZWQgPSBmYWxzZTtcbiAgICAkcmVxdWVzdFJlc3VsdCA9IHJlcXVlc3RSZXN1bHRFbnVtLk9LO1xuICAgICRvcmlnaW5hbENhcHR1cmUgPSAnJztcbiAgICAkdW5jb25mb3JtaXRpZXNTdG9yZS51bmNvbmZvcm1pdGllcyA9IFtdO1xuICAgIGNvbnN0IGZhY2VWYWxpZGF0aW9ucyA9IGdldChmYWNlVmFsaWRhdGlvbnNTdG9yZSk7XG4gICAgZmFjZVZhbGlkYXRpb25zLmNsb3NlZE1vdXRoID0gZmFsc2U7XG4gICAgZmFjZVZhbGlkYXRpb25zLmlzUGVyc29uQ2xvc2VFbm91Z2ggPSBmYWxzZTtcbiAgICBmYWNlVmFsaWRhdGlvbnMuaXNQZXJzb25Ub29jbG9zZSA9IHRydWU7XG4gICAgZmFjZVZhbGlkYXRpb25zLmlzUGVyc29uSW5GcmFtZSA9IGZhbHNlO1xuICAgIGZhY2VWYWxpZGF0aW9uc1N0b3JlLnNldChmYWNlVmFsaWRhdGlvbnMpO1xuICAgICRmYWNlVmFsaWRhdGlvbkFsZXJ0ID0gJyc7XG4gIH1cblxuICBmdW5jdGlvbiBkcmF3T3ZhbChjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICAvLyBjbGVhciB0aGUgYXJlYSAodGhlcmUgc2hvdWxkbid0IGV2ZW4gYmUgYW55dGhpbmcgYW55d2F5cylcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIGRpc3BsYXlDYW52YXMud2lkdGgsIGRpc3BsYXlDYW52YXMuaGVpZ2h0KTtcbiAgICAvLyBzYXZlIHRoZSBjb250ZXh0IHN0YXRlXG4gICAgLy8gZnJvbSBtZG4gZG9jc1xuICAgIGN0eC5zYXZlKCk7XG4gICAgLy8gYXBwbHkgdGhlIGJsdXIvY29sb3IgZmlsdGVyXG4gICAgaWYodmlkZW9PdmVybGF5ICE9ICdub25lJykge1xuICAgICAgaWYgKHZpZGVvT3ZlcmxheVRyYW5zcGFyZW5jeSA+IDApe1xuICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAodmlkZW9PdmVybGF5VHJhbnNwYXJlbmN5KSAvIDEwMDtcbiAgICAgIH1cbiAgICAgIGN0eC5maWxsU3R5bGUgPSB2aWRlb092ZXJsYXk7XG4gICAgICBjdHguZmlsbFJlY3QoMCwgMCwgZGlzcGxheUNhbnZhcy53aWR0aCwgZGlzcGxheUNhbnZhcy5oZWlnaHQpOyAgICAgIFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkcmF3IGEgcmVjdGFuZ2xlIHdpdGggdGhlIHNhbWUgc2l6ZSBhcyB0aGUgdmlkZW9cbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGN0eC5yZWN0KDAsIDAsIGRpc3BsYXlDYW52YXMud2lkdGgsIGRpc3BsYXlDYW52YXMuaGVpZ2h0KTtcbiAgICB9XG4gICAgXG4gICAgLy8gY2FsY3VsYXRlIHRoZSBvdmFsIHNpemUgdXNpbmcgdmlld3BvcnQgdW5pdHNcbiAgICBsZXQgb3ZhbEhlaWdodCA9IGRpc3BsYXlDYW52YXMuaGVpZ2h0ICogMC44MDsgLy8gODAlIG9mIHRoZSB2aWV3cG9ydCBoZWlnaHRcbiAgICBjb25zdCBvdmFsWCA9ICR2aWRlb1N0b3JlLnZpZGVvV2lkdGggLyAyO1xuICAgIGxldCBvdmFsWSA9ICR2aWRlb1N0b3JlLnZpZGVvSGVpZ2h0ICogMC41MDtcbiAgICBpZiAoc2hvd0F1dG9DYXB0dXJlQnV0dG9uIHx8IHNob3dDYXB0dXJlQnV0dG9uKSB7XG4gICAgICBvdmFsWSA9ICR2aWRlb1N0b3JlLnZpZGVvSGVpZ2h0ICogMC40NDtcbiAgICB9XG4gICAgaWYgKGlzTW9iaWxlKCkpe1xuICAgICAgb3ZhbEhlaWdodCA9IGRpc3BsYXlDYW52YXMuaGVpZ2h0ICogMC42NTsgLy8gODAlIG9mIHRoZSB2aWV3cG9ydCBoZWlnaHRcbiAgICAgIG92YWxZID0gJHZpZGVvU3RvcmUudmlkZW9IZWlnaHQgKiAwLjUxO1xuICAgIH1cbiAgICBjb25zdCBvdmFsV2lkdGggPSBvdmFsSGVpZ2h0IC8gMS40NTsgXG4gICAgJG92YWxEaW1lbnNpb25zLndpZHRoID0gb3ZhbFdpZHRoO1xuICAgICRvdmFsRGltZW5zaW9ucy5oZWlnaHQgPSBvdmFsSGVpZ2h0O1xuICAgICRvdmFsRGltZW5zaW9ucy55ID0gb3ZhbFk7XG5cbiAgICAvLyBtYWtlIHRoZSBvdmFsIFxuICAgIGN0eC5lbGxpcHNlKFxuICAgICAgb3ZhbFgsXG4gICAgICBvdmFsWSxcbiAgICAgIG92YWxXaWR0aCAvIDIsXG4gICAgICBvdmFsSGVpZ2h0IC8gMixcbiAgICAgIDAsXG4gICAgICAwLFxuICAgICAgMiAqIE1hdGguUEksXG4gICAgICB0cnVlIC8vIGl0IGhhcyB0byBiZSBjb3VudGVyY2xvY2t3aXNlXG4gICAgKTtcblxuICAgIGlmICh2aWRlb092ZXJsYXlUcmFuc3BhcmVuY3kgPT0gMCl7XG4gICAgICBjdHguY2xpcCgpO1xuICAgIH1cbiAgICAvLyBkcmF3IHRoZSB2aWRlb1xuICAgIC8vIHRoaXMgbWFrZXMgZmFjZSBhcGkgb25seSBhd2FyZSBvZiBvdXRzaWRlIHRoZSBvdmFsIGFyZWFcbiAgICBkcmF3VmlkZW9PbkNhbnZhcyhjdHgsIHZpZGVvLCBkaXNwbGF5Q2FudmFzKTtcbiAgICBjdHgucmVzdG9yZSgpO1xuXG4gICAgLy8gc2F2ZSBhZ2FpbiwgYmVjYXVzZSB3aGVuIHJlZHJhd2luZyB0aGUgb3ZhbCwgZXZlcnl0aGluZyBhcm91bmQgdGhlIG92YWwgaXMgbG9zdFxuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIC8vIGRyYXcgdGhlIGVsbGlwc2UgKHRoaXMgdGltZSBpdCBkb2Vzbid0IG1hdHRlciB0aGUgZGlyZWN0aW9uLCBzaW5jZSB0aGVyZSBpc24ndCBhIHJlY3RhbmdsZSBiZWhpbmQpXG4gICAgY29uc3QgcHJpbWFyeVRoZW1lID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZGlzcGxheUNhbnZhcykuZ2V0UHJvcGVydHlWYWx1ZSgnLS1wJyk7XG4gICAgY29uc3Qgc3VjY2Vzc1RoZW1lID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZGlzcGxheUNhbnZhcykuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zdScpO1xuXG4gICAgY3R4LnN0cm9rZVN0eWxlID0gYGhzbCgke3ByaW1hcnlUaGVtZX0pYDtcbiAgICBjdHgubGluZVdpZHRoID0gMTY7XG4gICAgY3R4LmVsbGlwc2UoXG4gICAgICBvdmFsWCxcbiAgICAgIG92YWxZLFxuICAgICAgb3ZhbFdpZHRoIC8gMixcbiAgICAgIG92YWxIZWlnaHQgLyAyLFxuICAgICAgMCxcbiAgICAgIDAsXG4gICAgICAyICogTWF0aC5QSVxuICAgICk7XG4gICAgY3R4LnN0cm9rZSgpO1xuICAgIGlmIChpc0NvdW50aW5nRG93biAmJiAhZGlzYWJsZUNvdW50RG93bikge1xuICAgICAgY29uc3QgdGltZVJlbWFpbmluZyA9IDEgLSAoY291bnREb3duRmluaXNoVGltZSAtIG5ldyBEYXRlKCkuZ2V0VGltZSgpKSAvIGNvdW50RG93bkNhcHR1cmU7XG4gICAgICAvLyBDb3VudGVyIGNvbnRvdXJcbiAgICAgIGN0eC5zYXZlKCk7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjdHgubGluZVdpZHRoID0gMTY7XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBgaHNsKCR7c3VjY2Vzc1RoZW1lfSlgO1xuICAgICAgY3R4LmVsbGlwc2UoXG4gICAgICAgIG92YWxYLFxuICAgICAgICBvdmFsWSxcbiAgICAgICAgb3ZhbFdpZHRoIC8gMixcbiAgICAgICAgb3ZhbEhlaWdodCAvIDIsXG4gICAgICAgIDAsXG4gICAgICAgIDAgLSBNYXRoLlBJIC8gMixcbiAgICAgICAgMS41ICogKE1hdGguUEkgKiAyICogdGltZVJlbWFpbmluZykgLSBNYXRoLlBJIC8gMlxuICAgICAgKTtcbiAgICAgIGN0eC5zdHJva2UoKTtcbiAgICB9XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGNvbnN0IGNsaXBQYXRoID0gbmV3IFBhdGgyRCgpO1xuICAgIGNsaXBQYXRoLmVsbGlwc2UoXG4gICAgICBvdmFsWCxcbiAgICAgIG92YWxZLFxuICAgICAgb3ZhbFdpZHRoIC8gMixcbiAgICAgIG92YWxIZWlnaHQgLyAyLFxuICAgICAgMCxcbiAgICAgIDAsXG4gICAgICAyICogTWF0aC5QSVxuICAgICk7XG4gICAgLy8gYmFzaWNhbGx5IGNsaXBwaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBzbyBmYWNlIGFwaSBpcyBhd2FyZSBvZiB0aGUgb3ZhbCBhcmVhXG4gICAgY3R4LmNsaXAoY2xpcFBhdGgpO1xuICAgIGRyYXdWaWRlb09uQ2FudmFzKGN0eCwgdmlkZW8sIGRpc3BsYXlDYW52YXMpO1xuICAgIGN0eC5yZXN0b3JlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBkcmF3VmlkZW9PbkNhbnZhcyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIGRpc3BsYXlDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50KSB7XG4gICAgY29uc3QgdmlkZW9Bc3BlY3RSYXRpbyA9IHZpZGVvLnZpZGVvV2lkdGggLyB2aWRlby52aWRlb0hlaWdodDtcbiAgICBjb25zdCBjYW52YXNBc3BlY3RSYXRpbyA9IGRpc3BsYXlDYW52YXMud2lkdGggLyBkaXNwbGF5Q2FudmFzLmhlaWdodDtcblxuICAgIGxldCBzb3VyY2VYID0gMDtcbiAgICBsZXQgc291cmNlWSA9IDA7XG4gICAgbGV0IHNvdXJjZVdpZHRoID0gdmlkZW8udmlkZW9XaWR0aDtcbiAgICBsZXQgc291cmNlSGVpZ2h0ID0gdmlkZW8udmlkZW9IZWlnaHQ7XG5cbiAgICBpZiAodmlkZW9Bc3BlY3RSYXRpbyA+IGNhbnZhc0FzcGVjdFJhdGlvKSB7XG4gICAgICAvLyB0aGUgdmlkZW8gaXMgd2lkZXIgdGhhbiB0aGUgY2FudmFzLCBzbyBpdCBjcm9wcyB0aGUgc2lkZXNcbiAgICAgIHNvdXJjZVdpZHRoID0gdmlkZW8udmlkZW9IZWlnaHQgKiBjYW52YXNBc3BlY3RSYXRpbztcbiAgICAgIHNvdXJjZVggPSAodmlkZW8udmlkZW9XaWR0aCAtIHNvdXJjZVdpZHRoKSAvIDI7XG4gICAgfSBlbHNlIGlmICh2aWRlb0FzcGVjdFJhdGlvIDwgY2FudmFzQXNwZWN0UmF0aW8pIHtcbiAgICAgIC8vIHRoZSB2aWRlbyBpcyB0YWxsZXIgdGhhbiB0aGUgY2FudmFzLCBzbyBpdCBjcm9wcyB0aGUgdG9wIGFuZCBib3R0b21cbiAgICAgIHNvdXJjZUhlaWdodCA9IHZpZGVvLnZpZGVvV2lkdGggLyBjYW52YXNBc3BlY3RSYXRpbztcbiAgICAgIHNvdXJjZVkgPSAodmlkZW8udmlkZW9IZWlnaHQgLSBzb3VyY2VIZWlnaHQpIC8gMjtcbiAgICB9XG5cbiAgICBjdHguZHJhd0ltYWdlKFxuICAgICAgdmlkZW8sXG4gICAgICBzb3VyY2VYLFxuICAgICAgc291cmNlWSxcbiAgICAgIHNvdXJjZVdpZHRoLFxuICAgICAgc291cmNlSGVpZ2h0LFxuICAgICAgMCxcbiAgICAgIDAsXG4gICAgICBkaXNwbGF5Q2FudmFzLndpZHRoLFxuICAgICAgZGlzcGxheUNhbnZhcy5oZWlnaHRcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJJZHJuZExpc3RlbmVycygpIHtcbiAgICB3aWRnZXRJbnN0YW5jZS5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB2aWRlb18gPSBldmVudC5kZXRhaWxbMF0udmlkZW87XG4gICAgICAkaWRybmRWaWRlb1N0b3JlRGltZW5zaW9ucyA9IHsgd2lkdGg6IHZpZGVvXy52aWRlb1dpZHRoLCBoZWlnaHQ6IHZpZGVvXy52aWRlb0hlaWdodCB9O1xuXG4gICAgICB2aWRlby5zcmNPYmplY3QgPSB2aWRlb18uc3JjT2JqZWN0O1xuICAgICAgaWRybmRMb2FkaW5nID0gZmFsc2U7XG4gICAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyB0aW1lb3V0IHdoZW4gZml4ZXMgcHJvYmxlbSB3aXRoIHNhZmFyaSBicm93c2Vyc1xuICAgICAgaWYgKGlzTW9iaWxlKCkpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKCEkcmVhZHkpIHtcbiAgICAgICAgICAgIHNodXRPZmZDYW1lcmEod2lkZ2V0SW5zdGFuY2UpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAkY2FtZXJhU3RhdHVzU3RvcmUgPSBDYW1lcmFTdGF0dXNFbnVtLkNBTUVSQV9ERU5JRURfRVJST1I7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMDApO1xuICAgICAgfVxuICAgICAgXG4gICAgICBmdW5jdGlvbiBsb29wKCkge1xuICAgICAgICBpZiAoaWRybmRDbG9zZWQpIHJldHVybjtcblxuICAgICAgICBkcmF3T3ZhbChkaXNwbGF5Q2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB2aWRlb18pO1xuICAgICAgICBsb29wQ2FsbGVyKHZpZGVvLCBsb29wLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGxvb3AoKTtcbiAgICB9KTtcbiAgICB3aWRnZXRJbnN0YW5jZS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIChlKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgaWYgKGUuZGV0YWlsWzBdLm1lc3NhZ2UgPT09ICdEZXZpY2UgaW4gdXNlJykge1xuICAgICAgICAkY2FtZXJhU3RhdHVzU3RvcmUgPSBDYW1lcmFTdGF0dXNFbnVtLkNBTUVSQV9JTl9VU0VfRVJST1I7XG4gICAgICB9IGVsc2UgaWYgKGUuZGV0YWlsWzBdLm1lc3NhZ2UgPT09ICdQZXJtaXNzaW9uIGRlbmllZCcgfHwgZS5kZXRhaWxbMF0ubWVzc2FnZSA9PT0gJ1Blcm1pc3Npb24gZGlzbWlzc2VkJykge1xuICAgICAgICAkY2FtZXJhU3RhdHVzU3RvcmUgPSBDYW1lcmFTdGF0dXNFbnVtLkNBTUVSQV9ERU5JRURfRVJST1I7XG4gICAgICB9IGVsc2UgaWYgKGUuZGV0YWlsWzBdLm1lc3NhZ2UgPT09ICdSZXF1ZXN0ZWQgZGV2aWNlIG5vdCBmb3VuZCcpIHtcbiAgICAgICAgJGNhbWVyYVN0YXR1c1N0b3JlID0gQ2FtZXJhU3RhdHVzRW51bS5ERVZJQ0VfTk9UX0ZPVU5EX0VSUk9SO1xuICAgICAgfVxuICAgICAgaWRybmRMb2FkaW5nID0gZmFsc2U7XG4gICAgfSk7XG4gICAgd2lkZ2V0SW5zdGFuY2UuYWRkRXZlbnRMaXN0ZW5lcignZmFjZURldGVjdGlvbicsIChlKSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhlKTtcbiAgICB9KTtcbiAgICB3aWRnZXRJbnN0YW5jZS5hZGRFdmVudExpc3RlbmVyKCdjbG9zZScsIGFzeW5jIChlKSA9PiB7XG4gICAgICBpZiAoISRjYXB0dXJlZCkge1xuICAgICAgICBjYXB0dXJpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlkcm5kQ2xvc2VkID0gdHJ1ZTtcbiAgICAgIHdhaXRpbmdJZHJuZENhcHR1cmVFdmVudCA9IGZhbHNlO1xuICAgICAgaWYgKCRjYW1lcmFTdGF0dXNTdG9yZSA9PT0gQ2FtZXJhU3RhdHVzRW51bS5PSykge1xuICAgICAgICAkY2FtZXJhU3RhdHVzU3RvcmUgPSBDYW1lcmFTdGF0dXNFbnVtLkNBTUVSQV9DTE9TRURfRVJST1I7XG4gICAgICB9XG4gICAgICAvLyBjb25zb2xlLmxvZyhlKTtcbiAgICB9KTtcbiAgICB3aWRnZXRJbnN0YW5jZS5hZGRFdmVudExpc3RlbmVyKCdpbml0aWFsaXplJywgYXN5bmMgKGUpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGUpO1xuICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgJGlkcm5kSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgaWYgKCRzZWxlY3RlZFRhYiA9PT0gVGFiRW51bS5GYWNlKSB7XG4gICAgICAgIGlmICghY2FwdHVyaW5nICYmICEkY2FwdHVyZWQgJiYgaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICBhd2FpdCBvcGVuQ2FtZXJhTGl2ZW5lc3MoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHdpZGdldEluc3RhbmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NhcHR1cmUnLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGxpdmVuZXNzRXJyb3IgPSAnJztcbiAgICAgIGNvbnN0IHsgZW5jcnlwdGVkRmlsZSwgcGhvdG8gfSA9IGV2ZW50LmRldGFpbFswXTtcbiAgICAgICRibG9iID0gZW5jcnlwdGVkRmlsZTtcbiAgICAgIHdhaXRpbmdJZHJuZENhcHR1cmVFdmVudCA9IGZhbHNlO1xuICAgICAgJHJlcXVlc3RSZXN1bHQgPSByZXF1ZXN0UmVzdWx0RW51bS5PSztcbiAgICAgICR1bmNvbmZvcm1pdGllc1N0b3JlLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAkY2FwdHVyZWQgPSB0cnVlO1xuICAgICAgY2FwdHVyaW5nID0gZmFsc2U7XG4gICAgICBjb25zdCBpbWcgPSAoYXdhaXQgYmxvYlRvQmFzZTY0KHBob3RvKSkuc3BsaXQoJywnKTtcbiAgICAgICRkYXRhVHlwZVByZWZpeCA9IGltZ1swXTtcbiAgICAgICRpbWFnZSA9IGltZ1sxXTtcbiAgICAgICRvcmlnaW5hbENhcHR1cmUgPSBpbWdbMV07XG5cbiAgICAgIC8vIGlmIG5vIGVuZHBvaW50IGlzIHByb3ZpZGVkLCB3ZSB1c2UgdGhlIGV2YWx1YXRlIGJpb21ldHJpY3MgZW5kcG9pbnQgd2hpY2ggc2hvdWxkIGRvIGJvdGggbGl2ZW5lc3MgYW5kIHVuY29uZm9ybWl0aWVzXG4gICAgICBpZiAoISRjYXB0dXJlTGl2ZW5lc3NJZHJuZEVuZHBvaW50KSB7XG4gICAgICAgIGxldCBib2R5UGFydHMsIGljYW9XYXJuaW5ncztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAoeyBib2R5UGFydHMsIGljYW9XYXJuaW5ncyB9ID0gYXdhaXQgZ2V0RmFjZVVuY29uZm9ybWl0aWVzKFxuICAgICAgICAgICAgJG9yaWdpbmFsQ2FwdHVyZSxcbiAgICAgICAgICAgIGV2YWx1YXRlUGhvdG8sXG4gICAgICAgICAgICAoYXdhaXQgYmxvYlRvQmFzZTY0KGVuY3J5cHRlZEZpbGUpKS5zcGxpdCgnLCcpWzFdXG4gICAgICAgICAgKSk7XG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ2ZhY2UtdW5jb25mb3JtaXRpZXMtdmFsaWRhdGVkJywge1xuICAgICAgICAgICAgICBkZXRhaWw6IHsgYm9keVBhcnRzLCBpY2FvV2FybmluZ3MsIHN0YXR1czogJHJlcXVlc3RSZXN1bHQgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICAvL1RPRE86IHVuY29tbWVudCB0aGlzXG4gICAgICAgICAgLy8gaWYgZXZlcnl0aGluZyBpcyBmaW5lLCBjbG9zZSB0aGUgY2FtZXJhIGFscmVhZHkuXG4gICAgICAgICAgLy8gd2lkZ2V0SW5zdGFuY2UuY2xvc2VDYW1lcmEoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgbGV0IGVycm9yQ29kZSA9IGlkcm5kRXJyb3JUb2kxOG5LZXlbJ1VOS05PV04nXTtcbiAgICAgICAgICBsZXQgYm9keVBhcnRzOiBCb2R5UGFydFtdID0gW107XG4gICAgICAgICAgbGV0IGljYW9XYXJuaW5ncyA9IFtdO1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgQXhpb3NFcnJvciAmJiBlLnJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgaWYgKGUucmVzcG9uc2UuZGF0YSAmJiBBcnJheS5pc0FycmF5KGUucmVzcG9uc2UuZGF0YS5ib2R5UGFydHMpKSB7XG4gICAgICAgICAgICAgIGJvZHlQYXJ0cyA9IGUucmVzcG9uc2UuZGF0YS5ib2R5UGFydHMgYXMgQm9keVBhcnRbXTtcbiAgICAgICAgICAgICAgaWNhb1dhcm5pbmdzID0gZS5yZXNwb25zZS5kYXRhLmljYW9XYXJuaW5ncztcbiAgICAgICAgICAgICAgY29uc3QgZmFjZSA9IGJvZHlQYXJ0cy5maW5kKChicCkgPT4gKGJwLmxpdmVuZXNzUmVzdWx0IGFzIGxpdmVuZXNzRXJyb3JSZXN1bHQpLmVycm9yKTtcbiAgICAgICAgICAgICAgZXJyb3JDb2RlID0gKGZhY2U/LmxpdmVuZXNzUmVzdWx0IGFzIGxpdmVuZXNzRXJyb3JSZXN1bHQpLmVycm9yX2NvZGU7XG4gICAgICAgICAgICAgICRyZXF1ZXN0UmVzdWx0ID0gcmVxdWVzdFJlc3VsdEVudW0uTElWRU5FU1NfREVURUNUSU9OX0ZBSUxVUkU7XG4gICAgICAgICAgICAgIGlmICghKGZhY2U/LmxpdmVuZXNzUmVzdWx0IGFzIGxpdmVuZXNzRXJyb3JSZXN1bHQpLmVycm9yX2NvZGUpIHtcbiAgICAgICAgICAgICAgICAkcmVxdWVzdFJlc3VsdCA9IHJlcXVlc3RSZXN1bHRFbnVtLlVOS05PV05fTElWRU5FU1NfRVJST1I7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGl2ZW5lc3NFcnJvciA9IGlkcm5kRXJyb3JUb2kxOG5LZXlbZXJyb3JDb2RlIGFzIGtleW9mIHR5cGVvZiBpZHJuZEVycm9yVG9pMThuS2V5XTtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignTGl2ZW5lc3MgZXJyb3I6JywgZXJyb3JDb2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGlmIGJwcyBpcyBtaXNzaW5nLCB0aGlzIGlzIGxpa2VseSBhIHRlbXBsYXRlIGV4dHJhY3Rpb24gZXJyb3JcbiAgICAgICAgICAgICAgJHJlcXVlc3RSZXN1bHQgPSByZXF1ZXN0UmVzdWx0RW51bS5URU1QTEFURV9FWFRSQUNUSU9OX0VSUk9SO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkcmVxdWVzdFJlc3VsdCA9IHJlcXVlc3RSZXN1bHRFbnVtLlVOQUJMRV9UT19DT01NVU5JQ0FURV9XSVRIX1RFTVBMQVRFX0VYVFJBQ1RJT05fU0VSVklDRTsgICAgICAgIFxuICAgICAgICAgICAgaWYgKGV2YWx1YXRlUGhvdG8pIHsgIFxuICAgICAgICAgICAgICB0b2FzdC5maXJlKHsgaWNvbjogJ2Vycm9yJywgdGl0bGU6ICdGYWxoYSBhbyBjb211bmljYXIgY29tIHNlcnZpw6dvIGRlIExpdmVuZXNzJyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgJHVuY29uZm9ybWl0aWVzU3RvcmUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ2ZhY2UtdW5jb25mb3JtaXRpZXMtdmFsaWRhdGVkJywge1xuICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICBib2R5UGFydHMsXG4gICAgICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRFcnJvcjogJF8obGl2ZW5lc3NFcnJvciksXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAkcmVxdWVzdFJlc3VsdCxcbiAgICAgICAgICAgICAgICBpY2FvV2FybmluZ3MsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkcmVxdWVzdFJlc3VsdCAhPT0gcmVxdWVzdFJlc3VsdEVudW0uT0spIHtcbiAgICAgICAgICAkdW5jb25mb3JtaXRpZXNTdG9yZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJvZHlQYXJ0c1swXS5saXZlbmVzc1Jlc3VsdCkge1xuICAgICAgICAgIHZhbGlkYXRlTGl2ZW5lc3MoYm9keVBhcnRzWzBdLmxpdmVuZXNzUmVzdWx0IGFzIGxpdmVuZXNzUmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keVBhcnRzLmxlbmd0aCAhPT0gMCAmJiBib2R5UGFydHNbMF0uZGF0YSkge1xuICAgICAgICAgICRpbWFnZSA9IGJvZHlQYXJ0c1swXS5kYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJhbnNsYXRlQW5kU2V0VW5jb25mb3JtaXRpZXMoaWNhb1dhcm5pbmdzISk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBlcnJvckNvZGU7XG4gICAgICBsZXQgbGl2ZW5lc3NSZXN1bHQ7XG4gICAgICB0cnkge1xuICAgICAgICBsaXZlbmVzc1Jlc3VsdCA9IGF3YWl0IGdldExpdmVuZXNzSWRybmQoZW5jcnlwdGVkRmlsZSk7XG4gICAgICAgIHZhbGlkYXRlTGl2ZW5lc3MobGl2ZW5lc3NSZXN1bHQuZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICRyZXF1ZXN0UmVzdWx0ID0gcmVxdWVzdFJlc3VsdEVudW0uVU5LTk9XTl9MSVZFTkVTU19FUlJPUjtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBBeGlvc0Vycm9yICYmIGUucmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgZXJyb3JDb2RlID0gZS5yZXNwb25zZS5kYXRhLmVycm9yX2NvZGU7XG4gICAgICAgICAgbGl2ZW5lc3NFcnJvciA9IGlkcm5kRXJyb3JUb2kxOG5LZXlbZXJyb3JDb2RlIGFzIGtleW9mIHR5cGVvZiBpZHJuZEVycm9yVG9pMThuS2V5XTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdMaXZlbmVzcyBlcnJvcjonLCBlcnJvckNvZGUpO1xuICAgICAgICAgICRyZXF1ZXN0UmVzdWx0ID0gcmVxdWVzdFJlc3VsdEVudW0uTElWRU5FU1NfREVURUNUSU9OX0ZBSUxVUkU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9hc3QuZmlyZSh7IGljb246ICdlcnJvcicsIHRpdGxlOiAnRmFsaGEgYW8gY29tdW5pY2FyIGNvbSBzZXJ2acOnbyBkZSBMaXZlbmVzcycgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCRyZXF1ZXN0UmVzdWx0ICE9PSByZXF1ZXN0UmVzdWx0RW51bS5PSykge1xuICAgICAgICAkdW5jb25mb3JtaXRpZXNTdG9yZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdmYWNlLXVuY29uZm9ybWl0aWVzLXZhbGlkYXRlZCcsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBib2R5UGFydHM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBib2R5UGFydDogJ0ZBQ0UnLFxuICAgICAgICAgICAgICAgICAgZGF0YTogJG9yaWdpbmFsQ2FwdHVyZSxcbiAgICAgICAgICAgICAgICAgIGxpdmVuZXNzQmxvYjogKGF3YWl0IGJsb2JUb0Jhc2U2NChlbmNyeXB0ZWRGaWxlKSkuc3BsaXQoJywnKVsxXSxcbiAgICAgICAgICAgICAgICAgIC4uLihsaXZlbmVzc1Jlc3VsdCAmJiB7IGxpdmVuZXNzUmVzdWx0IH0pLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIC4uLihlcnJvckNvZGUgJiYgeyBlcnJvckNvZGUgfSksXG4gICAgICAgICAgICAgIC4uLihsaXZlbmVzc0Vycm9yICYmIHsgdHJhbnNsYXRlZEVycm9yOiAkXyhsaXZlbmVzc0Vycm9yKSB9KSxcbiAgICAgICAgICAgICAgc3RhdHVzOiAkcmVxdWVzdFJlc3VsdCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IHsgYm9keVBhcnRzLCBpY2FvV2FybmluZ3MgfSA9IGF3YWl0IGdldEZhY2VVbmNvbmZvcm1pdGllcygkb3JpZ2luYWxDYXB0dXJlLCBldmFsdWF0ZVBob3RvKTtcbiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ2ZhY2UtdW5jb25mb3JtaXRpZXMtdmFsaWRhdGVkJywge1xuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgYm9keVBhcnRzLFxuICAgICAgICAgICAgaWNhb1dhcm5pbmdzLFxuICAgICAgICAgICAgc3RhdHVzOiAkcmVxdWVzdFJlc3VsdCxcbiAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIC4uLihsaXZlbmVzc0Vycm9yICYmIHsgdHJhbnNsYXRlZEVycm9yOiAkXyhsaXZlbmVzc0Vycm9yKSB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIGlmIChib2R5UGFydHNbMF0uZGF0YSkge1xuICAgICAgICAkaW1hZ2UgPSBib2R5UGFydHNbMF0uZGF0YTtcbiAgICAgIH1cbiAgICAgIHRyYW5zbGF0ZUFuZFNldFVuY29uZm9ybWl0aWVzKGljYW9XYXJuaW5ncyk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBvcGVuQ2FtZXJhKGRldmljZT86IHN0cmluZykge1xuICAgIHNldFZpZGVvV2lkdGhIZWlnaHQoKTtcbiAgICAgICAgXG4gICAgaWYgKGlzTGl2ZW5lc3NFbmFibGVkKCkpIHtcbiAgICAgIG9wZW5DYW1lcmFMaXZlbmVzcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBzZWxlY3REZXZpY2UoJHZpZGVvU3RvcmUudmlkZW9XaWR0aCwgJHZpZGVvU3RvcmUudmlkZW9IZWlnaHQsIGRldmljZSk7IFxuICAgIH0gXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBvcGVuQ2FtZXJhTGl2ZW5lc3MoKSB7XG4gICAgaWYgKCFpc0xpdmVuZXNzRW5hYmxlZCgpKSByZXR1cm47XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBubyBjYW1lcmEgZGV2aWNlLCBlbnVtZXJhdGUgZGV2aWNlcyBhZ2Fpbi4gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yICdhc2snIHBlcm1pc3Npb24gXG4gICAgaWYgKCEkY2FtZXJhRGV2aWNlc1N0b3JlWzBdPy5kZXZpY2VJZCkgeyAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZ2V0VmlkZW9EaW1lbnNpb25zKDY0MCwgNDgwKTsgICAgXG4gICAgICB9Y2F0Y2ggKGUpe1xuICAgICAgICBjb25zdCBlcnJvciA9IGUgYXMgRE9NRXhjZXB0aW9uO1xuICAgICAgICBjb25zdCBjb25zdHJhaW50RXJyb3IgPSAoaXNPYmplY3QoZSkgJiYgZS5jb25zdHJhaW50ID8gZS5jb25zdHJhaW50IDogJycpOyBcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5tZXNzYWdlLCBjb25zdHJhaW50RXJyb3IpO1xuICAgICAgICBpZiAoaXNPYmplY3QoZXJyb3IpICYmICdtZXNzYWdlJyBpbiBlcnJvciAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdSZXF1ZXN0ZWQgZGV2aWNlIG5vdCBmb3VuZCcpKSB7XG4gICAgICAgICAgJGNhbWVyYVN0YXR1c1N0b3JlID0gQ2FtZXJhU3RhdHVzRW51bS5ERVZJQ0VfTk9UX0ZPVU5EX0VSUk9SO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBlbnVtZXJhdGVEZXZpY2VzKCk7XG4gICAgICAkc2VsZWN0ZWRWaWRlb0RldmljZUlkID0gJGNhbWVyYURldmljZXNTdG9yZVswXS5kZXZpY2VJZDtcbiAgICB9XG5cbiAgICAkY2FtZXJhU3RhdHVzU3RvcmUgPSBDYW1lcmFTdGF0dXNFbnVtLk9LO1xuICAgIGlmICh3aWRnZXRJbnN0YW5jZSAmJiAnb3BlbkNhbWVyYScgaW4gd2lkZ2V0SW5zdGFuY2UpIHdpZGdldEluc3RhbmNlLm9wZW5DYW1lcmEoKTtcbiAgICBjYXB0dXJpbmcgPSB0cnVlO1xuICAgIGlkcm5kQ2xvc2VkID0gZmFsc2U7XG4gICAgaWRybmRMb2FkaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBwbGF5KCkge1xuICAgIC8vIHdhaXQgZm9yIGZhY2UgYXBpIHRvIGxvYWQgd2VpZ2h0c1xuICAgIGlmICgkZW5hYmxlRmFjZUFwaSAmJiAhbG9hZGVkRmFjZUFwaUFuZFdlaWdodHMpIHJldHVybiBsb29wQ2FsbGVyKHZpZGVvLCBwbGF5KTtcbiAgICAvLyByZXR1cm4gaWYgdW5pbml0aWFsaXplZCB2aWRlbyBlbGVtZW50XG4gICAgaWYgKCF2aWRlbykgcmV0dXJuO1xuICAgIC8vIHJldHVybiBpZiB0aGUgY3VycmVudCB0YWIgaXNuJ3QgZmFjZVxuICAgIGlmICghKCRzZWxlY3RlZFRhYiA9PT0gVGFiRW51bS5GYWNlKSAmJiAhbm9UYWJzKSByZXR1cm4gbG9vcENhbGxlcih2aWRlbywgcGxheSk7XG4gICAgLy8gaWYgZXZlcnl0aGluZyBwYXNzZXMgd2UgYXJlIHJlYWR5IHRvIGNhcHR1cmVcbiAgICAkcmVhZHkgPSB0cnVlO1xuICAgICRpbml0aWFsaXppbmcgPSBmYWxzZVxuICAgIC8vIG9ubHkgbWFrZSBkZXRlY3Rpb25zIGlmIGZhY2UgYXBpIGVuYWJsZWRcbiAgICBpZiAoJGVuYWJsZUZhY2VBcGkpIHtcbiAgICAgIC8vIGZpcmVzIHRoZSBsaXN0ZW5lciB0byBzdGFydCB0aGUgZmFjZSBhcGkgbG9vcFxuICAgICAgaWYgKCEkc3RhcnRGYWNlQXBpKSAkc3RhcnRGYWNlQXBpID0gdHJ1ZTtcblxuICAgICAgaWYgKCFpc0xpdmVuZXNzRW5hYmxlZCgpKSB7XG4gICAgICAgIGRyYXdPdmFsKGRpc3BsYXlDYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHZpZGVvKTtcbiAgICAgIH1cbiAgICAgIGxvb3BDYWxsZXIodmlkZW8sIHBsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkcmF3T3ZhbChkaXNwbGF5Q2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB2aWRlbyk7XG4gICAgICBsb29wQ2FsbGVyKHZpZGVvLCBwbGF5KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBjYXB0dXJlKCkge1xuICAgIGlmICgkc2NyZWVuTG9ja2VkKSB7XG4gICAgICB1bkxvY2tTY3JlZW4oKTtcbiAgICAgICRzY3JlZW5Mb2NrZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvL0NoZWNrcyBpZiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgZXllcyBpbiB0aGUgY2FwdHVyZWQgcGhvdG8gaXMgZ3JlYXRlciB0aGFuIHRoZSBtaW5FeWVUb0V5ZURpc3RcbiAgICBpZiAobWluRXllVG9FeWVEaXN0ID4gMCAmJiAkZXllRGlzdGFuY2UgPCBtaW5FeWVUb0V5ZURpc3QpIHtcbiAgICAgIGxldCBlcnJvckNvZGUgPSAnRkFDRV9NVUlUT19QRVFVRU5BJztcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZWRFcnJvciA9IHVuY29uZm9ybWl0eVRvaTE4bktleVtlcnJvckNvZGUgYXMga2V5b2YgdHlwZW9mIHVuY29uZm9ybWl0eVRvaTE4bktleV07XG4gICAgICBlcnJvckNvZGUgPSB1bmNvbmZvcm1pdHlUb2kxOG5LZXlbJ0ZBQ0VfTVVJVE9fUEVRVUVOQSddO1xuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudCgnbG93LXF1YWxpdHktZmFjZScsIHtcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIGVycm9yQ29kZTogZXJyb3JDb2RlLFxuICAgICAgICAgICAgdHJhbnNsYXRlZEVycm9yOiAkXyh0cmFuc2xhdGVkRXJyb3IpLFxuICAgICAgICAgICAgYm9keVBhcnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBib2R5UGFydDogJ0ZBQ0UnLFxuICAgICAgICAgICAgICAgIG1pbkV5ZVRvRXllRGlzdDogbWluRXllVG9FeWVEaXN0LFxuICAgICAgICAgICAgICAgIGNhcHR1cmVkRXllVG9FeWVEaXN0OiAkZXllRGlzdGFuY2UsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdG9hc3QuZmlyZSh7aWNvbjogJ2Vycm9yJywgdGl0bGU6ICRfKHRyYW5zbGF0ZWRFcnJvcil9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAkcmVxdWVzdFJlc3VsdCA9IHJlcXVlc3RSZXN1bHRFbnVtLk9LO1xuICAgIGlmIChpc0xpdmVuZXNzRW5hYmxlZCgpKSB7XG4gICAgICB3YWl0aW5nSWRybmRDYXB0dXJlRXZlbnQgPSB0cnVlO1xuICAgICAgd2lkZ2V0SW5zdGFuY2UudGFrZVBob3RvKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgICRjYXB0dXJlZCA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkZW5hYmxlRmFjZUFwaSkge1xuICAgICAgICBjb25zdCBbY2FudmFzXSA9IGF3YWl0IChhd2FpdCBpbXBvcnQoJ0B2bGFkbWFuZGljL2ZhY2UtYXBpJykpLmV4dHJhY3RGYWNlcyh2aWRlbywgWyRib3hTdG9yZV0pO1xuICAgICAgICBjb25zdCBpbWcgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJykuc3BsaXQoJywnKTtcbiAgICAgICAgJGRhdGFUeXBlUHJlZml4ID0gaW1nWzBdO1xuICAgICAgICAkaW1hZ2UgPSBpbWdbMV07XG4gICAgICAgICRvcmlnaW5hbENhcHR1cmUgPSBpbWdbMV07XG5cbiAgICAgICAgbGV0IGJvZHlQYXJ0cywgaWNhb1dhcm5pbmdzO1xuXG4gICAgICAgICAgKHsgYm9keVBhcnRzLCBpY2FvV2FybmluZ3MgfSA9IGF3YWl0IGdldEZhY2VVbmNvbmZvcm1pdGllcygkaW1hZ2UsIGV2YWx1YXRlUGhvdG8pKTtcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnZmFjZS11bmNvbmZvcm1pdGllcy12YWxpZGF0ZWQnLCB7XG4gICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIGJvZHlQYXJ0cyxcbiAgICAgICAgICAgICAgICBpY2FvV2FybmluZ3MsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAkcmVxdWVzdFJlc3VsdCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcblxuICAgICAgICBpZiAoYm9keVBhcnRzLmxlbmd0aCAhPT0gMCAmJiBib2R5UGFydHNbMF0uZGF0YSkge1xuICAgICAgICAgICRpbWFnZSA9IGJvZHlQYXJ0c1swXS5kYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJhbnNsYXRlQW5kU2V0VW5jb25mb3JtaXRpZXMoaWNhb1dhcm5pbmdzKTtcbiAgICAgICAgXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHZpZGVvLndpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gdmlkZW8uaGVpZ2h0O1xuICAgICAgICBjdHg/LmRyYXdJbWFnZSh2aWRlbywgMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgaW1nID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpLnNwbGl0KCcsJyk7XG4gICAgICAgICRkYXRhVHlwZVByZWZpeCA9IGltZ1swXTtcbiAgICAgICAgJGltYWdlID0gaW1nWzFdO1xuICAgICAgICAkb3JpZ2luYWxDYXB0dXJlID0gaW1nWzFdO1xuICAgICAgICBsZXQgeyBib2R5UGFydHMsIGljYW9XYXJuaW5ncyB9ID0gYXdhaXQgZ2V0RmFjZVVuY29uZm9ybWl0aWVzKCRpbWFnZSwgZXZhbHVhdGVQaG90byk7XG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnZmFjZS11bmNvbmZvcm1pdGllcy12YWxpZGF0ZWQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgYm9keVBhcnRzLFxuICAgICAgICAgICAgICBpY2FvV2FybmluZ3MsXG4gICAgICAgICAgICAgIHN0YXR1czogJHJlcXVlc3RSZXN1bHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIGlmIChib2R5UGFydHMubGVuZ3RoICE9PSAwICYmIGJvZHlQYXJ0c1swXS5kYXRhKSB7XG4gICAgICAgICAgJGltYWdlID0gYm9keVBhcnRzWzBdLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgdHJhbnNsYXRlQW5kU2V0VW5jb25mb3JtaXRpZXMoaWNhb1dhcm5pbmdzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgbGV0IGVycm9yQ29kZSA9IGlkcm5kRXJyb3JUb2kxOG5LZXlbJ1VOS05PV04nXTtcbiAgICAgIGxldCBib2R5UGFydHM6IEJvZHlQYXJ0W10gPSBbXTtcbiAgICAgIGxldCBpY2FvV2FybmluZ3MgPSBbXTtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgQXhpb3NFcnJvciAmJiBlLnJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICBpZiAoZS5yZXNwb25zZS5kYXRhICYmIEFycmF5LmlzQXJyYXkoZS5yZXNwb25zZS5kYXRhLmJvZHlQYXJ0cykpIHtcbiAgICAgICAgICBib2R5UGFydHMgPSBlLnJlc3BvbnNlLmRhdGEuYm9keVBhcnRzIGFzIEJvZHlQYXJ0W107XG4gICAgICAgICAgaWNhb1dhcm5pbmdzID0gZS5yZXNwb25zZS5kYXRhLmljYW9XYXJuaW5ncztcbiAgICAgICAgICBjb25zdCBmYWNlID0gYm9keVBhcnRzLmZpbmQoKGJwKSA9PiAoYnAubGl2ZW5lc3NSZXN1bHQgYXMgbGl2ZW5lc3NFcnJvclJlc3VsdCkuZXJyb3IpO1xuICAgICAgICAgIGVycm9yQ29kZSA9IChmYWNlPy5saXZlbmVzc1Jlc3VsdCBhcyBsaXZlbmVzc0Vycm9yUmVzdWx0KS5lcnJvcl9jb2RlO1xuICAgICAgICAgICRyZXF1ZXN0UmVzdWx0ID0gcmVxdWVzdFJlc3VsdEVudW0uTElWRU5FU1NfREVURUNUSU9OX0ZBSUxVUkU7XG4gICAgICAgICAgaWYgKCEoZmFjZT8ubGl2ZW5lc3NSZXN1bHQgYXMgbGl2ZW5lc3NFcnJvclJlc3VsdCkuZXJyb3JfY29kZSkge1xuICAgICAgICAgICAgJHJlcXVlc3RSZXN1bHQgPSByZXF1ZXN0UmVzdWx0RW51bS5VTktOT1dOX0xJVkVORVNTX0VSUk9SO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsaXZlbmVzc0Vycm9yID0gaWRybmRFcnJvclRvaTE4bktleVtlcnJvckNvZGUgYXMga2V5b2YgdHlwZW9mIGlkcm5kRXJyb3JUb2kxOG5LZXldO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0xpdmVuZXNzIGVycm9yOicsIGVycm9yQ29kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gaWYgYnBzIGlzIG1pc3NpbmcsIHRoaXMgaXMgbGlrZWx5IGEgdGVtcGxhdGUgZXh0cmFjdGlvbiBlcnJvclxuICAgICAgICAgICRyZXF1ZXN0UmVzdWx0ID0gcmVxdWVzdFJlc3VsdEVudW0uVEVNUExBVEVfRVhUUkFDVElPTl9FUlJPUjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJHJlcXVlc3RSZXN1bHQgPSByZXF1ZXN0UmVzdWx0RW51bS5VTkFCTEVfVE9fQ09NTVVOSUNBVEVfV0lUSF9URU1QTEFURV9FWFRSQUNUSU9OX1NFUlZJQ0U7ICAgICAgICBcbiAgICAgICAgaWYgKGV2YWx1YXRlUGhvdG8pIHtcbiAgICAgICAgICB0b2FzdC5maXJlKHsgaWNvbjogJ2Vycm9yJywgdGl0bGU6ICdGYWxoYSBhbyBjb211bmljYXIgY29tIHNlcnZpw6dvIGRlIExpdmVuZXNzJyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJHVuY29uZm9ybWl0aWVzU3RvcmUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdmYWNlLXVuY29uZm9ybWl0aWVzLXZhbGlkYXRlZCcsIHtcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIGJvZHlQYXJ0cyxcbiAgICAgICAgICAgIGVycm9yQ29kZSxcbiAgICAgICAgICAgIHRyYW5zbGF0ZWRFcnJvcjogJF8obGl2ZW5lc3NFcnJvciksXG4gICAgICAgICAgICBzdGF0dXM6ICRyZXF1ZXN0UmVzdWx0LFxuICAgICAgICAgICAgaWNhb1dhcm5pbmdzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNhdmUoKSB7XG4gICAgY29uc3QgZmFjZTogQm9keVBhcnQgPSB7XG4gICAgICBib2R5UGFydDogJ0ZBQ0UnLFxuICAgICAgZGF0YTogJGltYWdlLFxuICAgICAganVzdGlmaWNhdGlvbjogJGp1c3RpZmljYXRpb24sXG4gICAgfTtcbiAgICAkc2F2ZWQgPSB0cnVlO1xuICAgIC8vIHNlbmQgYmxvYiBpZiBwcmVzZW50XG4gICAgaWYgKGdldChibG9iKSkge1xuICAgICAgYmxvYlRvQmFzZTY0KGdldChibG9iKSkudGhlbigoYmFzZTY0KSA9PiB7XG4gICAgICAgIGZhY2UubGl2ZW5lc3NCbG9iID0gYmFzZTY0LnNwbGl0KCcsJylbMV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdleHBvcnQtZmFjZScsIHsgZGV0YWlsOiBmYWNlIH0pKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJldGFrZSgpIHtcbiAgICAvL2VtaXQgYW4gZW1wdHkgZXZlbnQgaW5mb3JtaW5nIHRoYXQgaXQgd2FzIHNjcmFwcGVkXG4gICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdmYWNlLXNjcmFwcGVkJykpO1xuICAgIHJlc2V0RmFjZUNvbGxlY3RvcigpO1xuICAgIGlmIChpZHJuZENsb3NlZCkgb3BlbkNhbWVyYUxpdmVuZXNzKCk7XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZGF0ZUxpdmVuZXNzKHJlc3VsdDogbGl2ZW5lc3NSZXN1bHQpIHtcbiAgICBsZXQgdGl0bGUgPSAnJztcbiAgICBsZXQgaWNvbjogU3dlZXRBbGVydEljb24gPSAnc3VjY2Vzcyc7XG4gICAgaWYgKHJlc3VsdC5pc0FsaXZlKSB7XG4gICAgICB0aXRsZSA9IGBWaXZhY2lkYWRlIGRlIGZhY2UgKCR7cmVzdWx0LmZhY2VfbGl2ZW5lc3MucHJvYmFiaWxpdHkudG9GaXhlZCgyKX0pIGUgZGUgY2FwdHVyYSAoJHtcbiAgICAgICAgcmVzdWx0LmNhcHR1cmVfbGl2ZW5lc3MucHJvYmFiaWxpdHlcbiAgICAgIH0sICR7cmVzdWx0LmNhcHR1cmVfbGl2ZW5lc3Muc2NvcmUudG9GaXhlZCgyKX0pIHZlcmlmaWNhZG9zIWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyZXN1bHQ/LmZhY2VfbGl2ZW5lc3M/LnByb2JhYmlsaXR5KSB7XG4gICAgICAgIGljb24gPSAnZXJyb3InO1xuICAgICAgICB0aXRsZSA9IGBWaXZhY2lkYWRlIGRlIGZhY2UgKCR7cmVzdWx0LmZhY2VfbGl2ZW5lc3MucHJvYmFiaWxpdHkudG9GaXhlZCgyKX0pIGUgZGUgY2FwdHVyYSAoJHtcbiAgICAgICAgICByZXN1bHQuY2FwdHVyZV9saXZlbmVzcy5wcm9iYWJpbGl0eVxuICAgICAgICB9LCAke3Jlc3VsdC5jYXB0dXJlX2xpdmVuZXNzLnNjb3JlLnRvRml4ZWQoMil9KSBpbnN1ZmljaWVudGVzIWA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgkc2hvd0xpdmVuZXNzUmVzdWx0VG9hc3QpIHRvYXN0LmZpcmUoeyBpY29uLCB0aXRsZSB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHNlbGVjdERldmljZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgZGV2aWNlPzogc3RyaW5nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgZGV2aWNlSWQ6IGRldmljZUlkLFxuICAgICAgICAgIHdpZHRoOiB3aWR0aENhbWVyYSxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodENhbWVyYSxcbiAgICAgICAgICBhc3BlY3RSYXRpbzogYXNwZWN0UmF0aW9DYW1lcmEsXG4gICAgICAgICAgZmFjaW5nTW9kZTogZmFjaW5nLFxuICAgICAgICAgIHRvdWNoUG9pbnRzOiB0b3VjaFBvaW50c1xuICAgICAgICB9ID0gYXdhaXQgZ2V0VmlkZW9EaW1lbnNpb25zKHdpZHRoLCBoZWlnaHQsICRmYWNpbmdNb2RlLCBkZXZpY2UpO1xuICAgICAgICBpZiAod2lkdGhDYW1lcmEgPCB3aWR0aCAmJiBoZWlnaHRDYW1lcmEgPCBoZWlnaHQpIHtcbiAgICAgICAgICAkdmlkZW9TdG9yZSA9IHsgdmlkZW9XaWR0aDogd2lkdGhDYW1lcmEsIHZpZGVvSGVpZ2h0OiBoZWlnaHRDYW1lcmEgfTsgICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICAgLy8gdG8gd29yayBvbiBkZXZpY2UgZW11bGF0aW9uIChkZXNrdG9wKVxuICAgICAgICBpZiAoaXNNb2JpbGUoKSAmJiAoIWZhY2luZyB8fCB0b3VjaFBvaW50cyA8PSAxKSAgJiYgKHdpZHRoQ2FtZXJhID4gaGVpZ2h0Q2FtZXJhKSkgeyBcbiAgICAgICAgICAkdmlkZW9TdG9yZSA9IHsgdmlkZW9XaWR0aDogaGVpZ2h0Q2FtZXJhLCB2aWRlb0hlaWdodDogd2lkdGhDYW1lcmEgfTsgICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICAgLy8gZml4ZXMgdGhlICdjYW1lcmEgZG9lc24ndCBvcGVuIGlzc3VlJyBidXQgY2F1c2VzIGJsYWNrIHNjcmVlblxuICAgICAgICAvLyAkc2VsZWN0ZWRWaWRlb0RldmljZUlkID0gbnVsbDtcbiAgICAgICAgJHNlbGVjdGVkVmlkZW9EZXZpY2VJZCA9IGRldmljZUlkID8gZGV2aWNlSWQgOiAkY2FtZXJhRGV2aWNlc1N0b3JlWzBdLmRldmljZUlkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IGUgYXMgRE9NRXhjZXB0aW9uO1xuICAgICAgICBjb25zdCBjb25zdHJhaW50RXJyb3IgPSAoaXNPYmplY3QoZSkgJiYgZS5jb25zdHJhaW50ID8gZS5jb25zdHJhaW50IDogJycpOyBcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5tZXNzYWdlLCBjb25zdHJhaW50RXJyb3IpO1xuICAgICAgICBpZiAoaXNPYmplY3QoZXJyb3IpICYmICdtZXNzYWdlJyBpbiBlcnJvciAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdQZXJtaXNzaW9uIGRlbmllZCcpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlVzZXIgZGlkbid0IGdpdmUgcGVybWlzc2lvbiB0byB1c2UgY2FtZXJhIVwiKTtcbiAgICAgICAgICAkY2FtZXJhU3RhdHVzU3RvcmUgPSBDYW1lcmFTdGF0dXNFbnVtLkNBTUVSQV9ERU5JRURfRVJST1I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JqZWN0KGVycm9yKSAmJiAnbWVzc2FnZScgaW4gZXJyb3IgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnUmVxdWVzdGVkIGRldmljZSBub3QgZm91bmQnKSkge1xuICAgICAgICAgICRjYW1lcmFTdGF0dXNTdG9yZSA9IENhbWVyYVN0YXR1c0VudW0uREVWSUNFX05PVF9GT1VORF9FUlJPUjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uc3RyYWludEVycm9yLmluY2x1ZGVzKCd3aWR0aCcpIHx8IGNvbnN0cmFpbnRFcnJvci5pbmNsdWRlcygnaGVpZ2h0JykpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBDYW1lcmEgZG9lcyBub3QgbWVldCB0aGUgbWluaW11bSBzdXBwb3J0ZWQgcmVxdWlyZW1lbnRzISAoJHtjb25zdHJhaW50RXJyb3J9KWApO1xuICAgICAgICAgICRjYW1lcmFTdGF0dXNTdG9yZSA9IENhbWVyYVN0YXR1c0VudW0uQ0FNRVJBX1VOU1VQUE9SVEVEO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZU9wZW5DYW1lcmEoKXtcbiAgICAkc2VsZWN0ZWRWaWRlb0RldmljZUlkID0gJyc7XG4gICAgYXdhaXQgb3BlbkNhbWVyYSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJEZXZpY2VDaGFuZ2VMaXN0ZW5lcigpIHtcbiAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLm9uZGV2aWNlY2hhbmdlID0gYXN5bmMgKGV2ZW50KSA9PiB7XG5cbiAgICAgIGlmIChldmVudC50eXBlICE9ICdkZXZpY2VjaGFuZ2UnKSByZXR1cm47XG5cbiAgICAgIGF3YWl0IGVudW1lcmF0ZURldmljZXMoKTtcbiAgICAgIGlmICgkY2FtZXJhU3RhdHVzU3RvcmUgIT09IENhbWVyYVN0YXR1c0VudW0uT0spIHtcbiAgICAgICAgYXdhaXQgcmVPcGVuQ2FtZXJhKCk7ICAgICAgICBcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICghaXNMaXZlbmVzc0VuYWJsZWQoKSAmJiAhJF9zdHJlYW0uYWN0aXZlKSBcbiAgICAgICAgfHwgKGlzTGl2ZW5lc3NFbmFibGVkKCkgJiYgIWlkcm5kQ2xvc2VkKVxuICAgICAgKSB7XG4gICAgICAgIHNodXRPZmZDYW1lcmEod2lkZ2V0SW5zdGFuY2UpO1xuICAgICAgICAkY2FtZXJhU3RhdHVzU3RvcmUgPSBDYW1lcmFTdGF0dXNFbnVtLkRFVklDRV9OT1RfRk9VTkRfRVJST1I7XG4gICAgICAgIGlkcm5kQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHNldEZhY2VOb3RGb3VuZEFsZXJ0ICgpIHtcbiAgICAkZmFjZUZvdW5kID0gZmFsc2U7XG4gICAgXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgY29uc3QgdGltZURpZmYgPSBub3cgLSBmYWNlRm91bmRTdGFydFRpbWU7XG4gICAgaWYgKHRpbWVEaWZmID4gNTAwMCkgeyAgICAgIFxuICAgICAgZmFjZUZvdW5kU3RhcnRUaW1lID0gbm93O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGlnaHRuZXNzID0gYXdhaXQgZ2V0SW1hZ2VMaWdodG5lc3ModmlkZW8pO1xuICAgICAgICBpZiAobGlnaHRuZXNzIDwgNTApIHtcbiAgICAgICAgICAkZmFjZVZhbGlkYXRpb25BbGVydCA9ICdmYWNlQ29sbGVjdG9yLmlsbHVtaW5hdGlvblRvb0xvdyc7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpZ2h0bmVzcyA+IDE4MCkge1xuICAgICAgICAgICRmYWNlVmFsaWRhdGlvbkFsZXJ0ID0gJ2ZhY2VDb2xsZWN0b3IuaWxsdW1pbmF0aW9uVG9vSGlnaCc7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZ2V0dGluZyB0aGUgdmlkZW8gbGlnaHRpbmcgbGV2ZWw6IFwiLCBlcnJvcik7XG4gICAgICB9IFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2hhcnBuZXNzID0gYXdhaXQgZ2V0SW1hZ2VTaGFycG5lc3ModmlkZW8pO1xuICAgICAgICBpZiAoc2hhcnBuZXNzIDwgNSkge1xuICAgICAgICAgICRmYWNlVmFsaWRhdGlvbkFsZXJ0ID0gJ2ZhY2VDb2xsZWN0b3IubG93U2hhcnBuZXNzJztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHRpbmcgdGhlIHZpZGVvIHNoYXJwbmVzcyBsZXZlbDogXCIsIGVycm9yKTtcbiAgICAgIH0gXG4gICAgICAkZmFjZVZhbGlkYXRpb25BbGVydCA9ICdmYWNlQ29sbGVjdG9yLmZhY2VXYXNOb3RGb3VuZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghd2FpdGluZ0ZhY2VOb3RGb3VuZFRpbWVvdXQpIHtcbiAgICAgICAgd2FpdGluZ0ZhY2VOb3RGb3VuZFRpbWVvdXQgPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBsZXQgaW52YWxpZEFsZXJ0cyA9IFsnZmFjZUNvbGxlY3Rvci5mYWNlV2FzTm90Rm91bmQnLCAnZmFjZUNvbGxlY3Rvci5pbGx1bWluYXRpb25Ub29Mb3cnLCAnZmFjZUNvbGxlY3Rvci5sb3dTaGFycG5lc3MnLCAnZmFjZUNvbGxlY3Rvci5pbGx1bWluYXRpb25Ub29IaWdoJ107XG4gICAgICAgICAgd2FpdGluZ0ZhY2VOb3RGb3VuZFRpbWVvdXQgPSBmYWxzZTtcbiAgICAgICAgICBlbmFibGVDYXB0dXJlQnV0dG9uID0gZmFsc2U7XG4gICAgICAgICAgaWYgKCRmYWNlVmFsaWRhdGlvbkFsZXJ0ICYmICFpbnZhbGlkQWxlcnRzLmluY2x1ZGVzKCRmYWNlVmFsaWRhdGlvbkFsZXJ0KSkge1xuICAgICAgICAgICAgJGZhY2VWYWxpZGF0aW9uQWxlcnQgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDE1MDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFN1YnNjcmlwdGlvbnNcblxuICBjb25zdCB1bnN1YnNjcmliZVZpZGVvRGltZW5zaW9ucyA9IHZpZGVvU3RvcmUuc3Vic2NyaWJlKChzdG9yZU9iaikgPT4ge1xuICAgIGlmICghdmlkZW8pIHJldHVybjtcbiAgICBpZiAoIWRldGVjdGlvbnNDYW52YXMpIHJldHVybjtcblxuICAgIHZpZGVvLndpZHRoID0gc3RvcmVPYmoudmlkZW9XaWR0aDtcbiAgICB2aWRlby5oZWlnaHQgPSBzdG9yZU9iai52aWRlb0hlaWdodDtcbiAgICBkZXRlY3Rpb25zQ2FudmFzLndpZHRoID0gc3RvcmVPYmoudmlkZW9XaWR0aDtcbiAgICBkZXRlY3Rpb25zQ2FudmFzLmhlaWdodCA9IHN0b3JlT2JqLnZpZGVvSGVpZ2h0O1xuICAgIG1hc2tDYW52YXMud2lkdGggPSBzdG9yZU9iai52aWRlb1dpZHRoO1xuICAgIG1hc2tDYW52YXMuaGVpZ2h0ID0gc3RvcmVPYmoudmlkZW9IZWlnaHQ7XG4gICAgLy8gaWYgKGlzTGl2ZW5lc3NFbmFibGVkKCkpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhzdG9yZU9iai52aWRlb1dpZHRoLCBzdG9yZU9iai52aWRlb0hlaWdodCk7XG4gICAgZGlzcGxheUNhbnZhcy53aWR0aCA9IHN0b3JlT2JqLnZpZGVvV2lkdGg7XG4gICAgZGlzcGxheUNhbnZhcy5oZWlnaHQgPSBzdG9yZU9iai52aWRlb0hlaWdodDtcbiAgICAvLyB9XG4gIH0pO1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlRmFjZVZhbGlkYXRpb25zID0gZmFjZVZhbGlkYXRpb25zU3RvcmUuc3Vic2NyaWJlKChuZXdWYWx1ZSkgPT4ge1xuICAgIGlmICgkY29sbGVjdG9yU2VsZWN0ID09ICdET0NVTUVOVCcpIHJldHVybjtcblxuICAgIGxldCBuZXdGYWNlVmFsaWRhdGlvbkFsZXJ0ID0gJyc7XG5cbiAgICBpZiAoIW5ld1ZhbHVlLmlzUGVyc29uQ2xvc2VFbm91Z2gpIHtcbiAgICAgIG5ld0ZhY2VWYWxpZGF0aW9uQWxlcnQgPSAnZmFjZUNvbGxlY3Rvci5jb21lQ2xvc2VyQ2FtZXJhJztcbiAgICB9IGVsc2UgaWYgKG5ld1ZhbHVlLmlzUGVyc29uVG9vY2xvc2UpIHtcbiAgICAgIG5ld0ZhY2VWYWxpZGF0aW9uQWxlcnQgPSAnZmFjZUNvbGxlY3Rvci5tb3ZlQXdheUNhbWVyYSc7XG4gICAgfSBlbHNlIGlmICghbmV3VmFsdWUuaXNQZXJzb25JbkZyYW1lKSB7XG4gICAgICBuZXdGYWNlVmFsaWRhdGlvbkFsZXJ0ID0gJ2ZhY2VDb2xsZWN0b3Iuc3RheUluRnJhbWUnO1xuICAgIH0gZWxzZSBpZiAoIW5ld1ZhbHVlLmNsb3NlZE1vdXRoKSB7XG4gICAgICBuZXdGYWNlVmFsaWRhdGlvbkFsZXJ0ID0gJ2ZhY2VDb2xsZWN0b3IuZG9udE9wZW5Nb3V0aCc7XG4gICAgfVxuICAgIFxuICAgIGlmICgkZmFjZUZvdW5kKSBzZXRWYWxpZGF0aW9uQWxlcnQobmV3RmFjZVZhbGlkYXRpb25BbGVydCk7IC8vIHNldCB0aGUgYWxlcnQgb25seSBpZiB0aGUgZmFjZSBpcyBmb3VuZFxuXG4gICAgLy8gQVVUT01BVElDIENBUFRVUkVcbiAgICAvLyBpZiBhbGwgdGhlIHBhcmFtZXRlcnMgYXJlIG9rXG4gICAgaWYgKFxuICAgICAgISRjYXB0dXJlZCAmJlxuICAgICAgJGF1dG9tYXRpY0NhcHR1cmUgJiZcbiAgICAgICRmYWNlRm91bmQgJiZcbiAgICAgICFpc0NvdW50aW5nRG93biAmJlxuICAgICAgbmV3VmFsdWUuaXNQZXJzb25JbkZyYW1lICYmXG4gICAgICBuZXdWYWx1ZS5jbG9zZWRNb3V0aCAmJlxuICAgICAgISghbmV3VmFsdWUuaXNQZXJzb25DbG9zZUVub3VnaCB8fCBuZXdWYWx1ZS5pc1BlcnNvblRvb2Nsb3NlKVxuICAgICkge1xuICAgICAgLy8gc3RhcnQgYSBjb3VudGRvd24gYW5kIHRha2UgYSBwaWN0dXJlXG4gICAgICBpc0NvdW50aW5nRG93biA9IHRydWU7XG4gICAgICBjb3VudERvd25GaW5pc2hUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBjb3VudERvd25DYXB0dXJlO1xuICAgICAgY29uc3QgY291bnRkb3duSW50ZXJ2YWxDYWxsYmFjayA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgLy8gc3RvcCBjb3VudGluZyBpZiBkaXNhYmxlZCBtaWQtY291bnQgb3IgaWYgY2FwdHVyZWQgYmVmb3JlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhJGF1dG9tYXRpY0NhcHR1cmUgfHxcbiAgICAgICAgICAkY2FwdHVyZWQgfHxcbiAgICAgICAgICAoaXNMaXZlbmVzc0VuYWJsZWQoKSAmJiBpZHJuZENsb3NlZCkgfHxcbiAgICAgICAgICAhbmV3VmFsdWUuaXNQZXJzb25DbG9zZUVub3VnaCB8fFxuICAgICAgICAgIG5ld1ZhbHVlLmlzUGVyc29uVG9vY2xvc2UgfHxcbiAgICAgICAgICAhbmV3VmFsdWUuY2xvc2VkTW91dGggfHxcbiAgICAgICAgICAhbmV3VmFsdWUuaXNQZXJzb25JbkZyYW1lXG4gICAgICAgICkge1xuICAgICAgICAgIGlzQ291bnRpbmdEb3duID0gZmFsc2U7XG4gICAgICAgICAgZGlzYWJsZUNvdW50RG93biA9IHRydWU7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBkaXNhYmxlQ291bnREb3duID0gZmFsc2U7XG4gICAgICAgICAgfSwgMTUwMCk7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChjb3VudGRvd25JbnRlcnZhbENhbGxiYWNrKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ1NlY29uZHMgPSBNYXRoLmZsb29yKCgoY291bnREb3duRmluaXNoVGltZSAtIG5vdykgJSAoMTAwMCAqIDYwKSkgLyAxMDAwKTtcbiAgICAgICAgLy8gY291bnREb3duSHRtbEVsZW1lbnQuaW5uZXJIVE1MID0gcmVtYWluaW5nU2Vjb25kcy50b1N0cmluZygpO1xuICAgICAgICBpZiAocmVtYWluaW5nU2Vjb25kcyA8PSAwKSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChjb3VudGRvd25JbnRlcnZhbENhbGxiYWNrKTtcbiAgICAgICAgICBpc0NvdW50aW5nRG93biA9IGZhbHNlO1xuICAgICAgICAgIGNhcHR1cmUoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHdlIGNvdWxkIGhhdmUgdXNlZCBoaWRkZW49eyRjYXB0dXJlZH0sIGJ1dCBmb3Igc29tZSByZWFzb24gaXQgZG9lc24ndCB3b3JrIHNvIGRvIHRoaXMgaW5zdGVhZFxuICBjb25zdCB1bnN1YnNjcmliZUNhcHR1cmVkU3RhdGUgPSBjYXB0dXJlZC5zdWJzY3JpYmUoKG5ld1ZhbHVlKSA9PiB7XG4gICAgaWYgKCFlbmNsb3NpbmdEaXYpIHJldHVybjtcbiAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgIGVuY2xvc2luZ0Rpdi5jbGFzc0xpc3QucmVtb3ZlKCdmbGV4Jyk7XG4gICAgICBlbmNsb3NpbmdEaXYuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY2xvc2luZ0Rpdi5jbGFzc0xpc3QuYWRkKCdmbGV4Jyk7XG4gICAgICBlbmNsb3NpbmdEaXYuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1bnN1YnNjcmliZUNsZWFyVmlkZW9TcmMgPSBjbGVhcmVkVmlkZW9TcmNPYmplY3Quc3Vic2NyaWJlKChuZXdWYWx1ZSkgPT4ge1xuICAgIGlmICghdmlkZW8pIHJldHVybjtcbiAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdzZXR0aW5nIG51bGwgaW4gdmlkZW8gc3JjT2JqZWN0Jyk7XG4gICAgICB2aWRlby5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgdmlkZW8uc3JjID0gJyc7XG4gICAgICAkc2VsZWN0ZWRWaWRlb0RldmljZUlkID0gbnVsbDtcbiAgICB9XG4gIH0pO1xuXG4gIHNlbGVjdGVkVGFiLnN1YnNjcmliZShhc3luYyAodGFiKSA9PiB7XG4gICAgaWYgKHRhYiA9PT0gVGFiRW51bS5GYWNlKSB7XG4gICAgICBhd2FpdCBlbnVtZXJhdGVEZXZpY2VzKCk7XG4gICAgICBpZiAoaXNMaXZlbmVzc0VuYWJsZWQoKSkgJHNlbGVjdGVkVmlkZW9EZXZpY2VJZCA9ICRjYW1lcmFEZXZpY2VzU3RvcmVbMF0/LmRldmljZUlkO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmVTZWxlY3RlZFN0cmVhbSA9IHNlbGVjdGVkVmlkZW9EZXZpY2VJZC5zdWJzY3JpYmUoYXN5bmMgKG5ld0RldmljZUlkKSA9PiB7XG4gICAgaWYgKCFuZXdEZXZpY2VJZCB8fCAoaXNMaXZlbmVzc0VuYWJsZWQoKSAmJiBpZHJuZENsb3NlZCkpIHJldHVybjtcbiAgICBpZiAoIXZpZGVvKSB7XG4gICAgICAvLyByZXJlbmRlciB2aWRlbyB0YWdcbiAgICAgIHVuaXF1ZSA9IHt9O1xuICAgIH1cbiAgICBjb25zdCB7IHZpZGVvSGVpZ2h0LCB2aWRlb1dpZHRoIH0gPSAkdmlkZW9TdG9yZTtcbiAgICB0cnkge1xuICAgICAgaWYgKGlzTGl2ZW5lc3NFbmFibGVkKCkpIHtcbiAgICAgICAgYXdhaXQgc2h1dE9mZkNhbWVyYSh3aWRnZXRJbnN0YW5jZSk7XG4gICAgICAgIGF3YWl0IG9wZW5DYW1lcmEoKVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBzZXR1cFN0cmVhbSh2aWRlb1dpZHRoLCB2aWRlb0hlaWdodCwgbmV3RGV2aWNlSWQpO1xuICAgICAgdmlkZW8uc3JjT2JqZWN0ID0gc3RyZWFtO1xuICAgICAgJF9zdHJlYW0gPSBzdHJlYW07XG4gICAgICAkY2xlYXJlZFZpZGVvU3JjT2JqZWN0ID0gZmFsc2U7XG4gICAgICBpZiAoIXJpZ2h0T3JpZW50YXRpb24pIHtcbiAgICAgICAgJGNhbWVyYVN0YXR1c1N0b3JlID0gQ2FtZXJhU3RhdHVzRW51bS5DQU1FUkFfT1JJRU5UQVRJT05fUE9SVFJBSVQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkY2FtZXJhU3RhdHVzU3RvcmUgPSBDYW1lcmFTdGF0dXNFbnVtLk9LO1xuICAgICAgfVxuICAgICAgc3RyZWFtLmdldFRyYWNrcygpXG4gICAgICAuZm9yRWFjaCgodHJhY2spID0+IHtcbiAgICAgICAgaWYgKHRyYWNrLnJlYWR5U3RhdGUgPT09ICdsaXZlJykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBDYW1lcmEgJHt0cmFjay5sYWJlbH0gb3BlbmVkIHN1Y2Nlc3NmdWxseSFgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBlIGFzIERPTUV4Y2VwdGlvbjtcbiAgICAgIGlkcm5kQ2xvc2VkID0gdHJ1ZTtcbiAgICAgIGlmIChpc09iamVjdChlcnJvcikgJiYgJ21lc3NhZ2UnIGluIGVycm9yICYmIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ1JlcXVlc3RlZCBkZXZpY2Ugbm90IGZvdW5kJykpIHtcbiAgICAgICAgJGNhbWVyYVN0YXR1c1N0b3JlID0gQ2FtZXJhU3RhdHVzRW51bS5ERVZJQ0VfTk9UX0ZPVU5EX0VSUk9SO1xuICAgICAgfVxuICAgIH1cblxuICB9KTtcblxuICBjb25zdCB1bnN1YnNjcmliZUNoYW5nZVRhYiA9IHNlbGVjdGVkVGFiLnN1YnNjcmliZShhc3luYyAodGFiKSA9PiB7XG4gICAgaWYgKHRhYiA9PT0gVGFiRW51bS5GYWNlICYmIGlzTGl2ZW5lc3NFbmFibGVkKCkpIHtcbiAgICAgIGlmICghY2FwdHVyaW5nICYmICEkY2FwdHVyZWQgJiYgaW5pdGlhbGl6ZWQpIGF3YWl0IG9wZW5DYW1lcmEoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlRmFjZUFwaSA9IHN0YXJ0RmFjZUFwaS5zdWJzY3JpYmUoYXN5bmMgKG5ld1ZhbHVlKSA9PiB7XG4gICAgaWYgKG5ld1ZhbHVlKSBmYWNlYXBpTG9vcCgpO1xuICB9KTtcblxuICBjb25zdCB1bnN1YnNjcmliZVN3YXBDYW1lcmEgPSBzd2FwQ2FtZXJhLnN1YnNjcmliZShhc3luYyAobmV3VmFsdWUpID0+IHtcbiAgICBpZiAoISRjYW1lcmFEZXZpY2VzU3RvcmVbMF0/LmRldmljZUlkKSByZXR1cm47XG4gICAgc2h1dE9mZkNhbWVyYSgpO1xuXG4gICAgaWYgKCFpc01vYmlsZSgpIHx8IGlzTGl2ZW5lc3NFbmFibGVkKCkpIHsgLy8gZGVza3RvcCBjYW1lcmFzXG4gICAgICBjb25zdCBjdXJyZW50RGV2aWNlID0gJGNhbWVyYURldmljZXNTdG9yZS5maW5kSW5kZXgoZGV2aWNlID0+IGRldmljZS5kZXZpY2VJZCA9PT0gJHNlbGVjdGVkVmlkZW9EZXZpY2VJZCk7XG4gICAgICBjb25zdCBuZXh0RGV2aWNlID0gKGN1cnJlbnREZXZpY2UgKyAxKSAlICRjYW1lcmFEZXZpY2VzU3RvcmUubGVuZ3RoO1xuICAgICAgY29uc3QgZGV2aWNlSWQgPSAkY2FtZXJhRGV2aWNlc1N0b3JlW25leHREZXZpY2VdLmRldmljZUlkO1xuICAgICAgaWYgKGlzTGl2ZW5lc3NFbmFibGVkKCkpIHtcbiAgICAgICAgJHNlbGVjdGVkVmlkZW9EZXZpY2VJZCA9IGRldmljZUlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgb3BlbkNhbWVyYShkZXZpY2VJZCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5ld1ZhbHVlKSB7IC8vIG1vYmlsZSBkZXZpY2VzXG4gICAgICAgICRmYWNpbmdNb2RlID0gRmFjaW5nTW9kZUVudW0uUkVBUl9DQU1FUkE7XG4gICAgICAgIGF3YWl0IG9wZW5DYW1lcmEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAkZmFjaW5nTW9kZSA9IEZhY2luZ01vZGVFbnVtLkZST05UX0NBTUVSQTtcbiAgICAgICAgYXdhaXQgb3BlbkNhbWVyYSgpO1xuICAgIH0gXG4gIH0pO1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlT3JpZW50YXRpb24gPSBvcmllbnRhdGlvbkRhdGEuc3Vic2NyaWJlKGFzeW5jIChkYXRhKSA9PiB7XG4gICAgaWYgKCFkYXRhLmlzU3VwcG9ydGVkIHx8ICFpc01vYmlsZSgpIHx8ICRjb2xsZWN0b3JTZWxlY3QgIT0gJ0ZBQ0UnKSByZXR1cm47XG5cbiAgICByaWdodE9yaWVudGF0aW9uID0gZGF0YS5vcmllbnRhdGlvbi5pbmNsdWRlcygncG9ydHJhaXQnKTtcbiAgICBpZiAocmlnaHRPcmllbnRhdGlvbikge1xuICAgICAgJGNhbWVyYVN0YXR1c1N0b3JlID0gQ2FtZXJhU3RhdHVzRW51bS5PSztcbiAgICB9IGVsc2Uge1xuICAgICAgJGNhbWVyYVN0YXR1c1N0b3JlID0gQ2FtZXJhU3RhdHVzRW51bS5DQU1FUkFfT1JJRU5UQVRJT05fUE9SVFJBSVQ7XG4gICAgfVxuICB9KTtcblxuXG4gIGFzeW5jIGZ1bmN0aW9uIGZhY2VhcGlMb29wKCkge1xuICAgIGxldCBkZXRlY3Rpb25zUmVzdWx0O1xuICAgIGlmIChmYWNlQXBpQ291bnRlciA+PSBmYWNlQXBpRnJhbWVSYXRlKSB7XG4gICAgICBmYWNlQXBpQ291bnRlciA9IDA7XG4gICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgZ2V0RmFjZURldGVjdG9yT3B0aW9ucygpO1xuICAgICAgLy8gZGVidWdnZXJcbiAgICAgIGNvbnN0IGZhY2VhcGkgPSBhd2FpdCBpbXBvcnQoJ0B2bGFkbWFuZGljL2ZhY2UtYXBpJyk7XG4gICAgICBsZXQgZGV0ZWN0aW9uc1Jlc3VsdDI7XG4gICAgICBkZXRlY3Rpb25zUmVzdWx0MiA9IGZhY2VhcGkuZGV0ZWN0U2luZ2xlRmFjZShkaXNwbGF5Q2FudmFzLCBvcHRpb25zKTtcbiAgICAgIGRldGVjdGlvbnNSZXN1bHQgPSBhd2FpdCBkZXRlY3Rpb25zUmVzdWx0Mi53aXRoRmFjZUxhbmRtYXJrcygpO1xuICAgICAgLy8gY2xlYXIgY2FudmFzIHdoZW4gbm90aGluZyBkZXRlY3RlZFxuICAgICAgZGV0ZWN0aW9uc0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpPy5jbGVhclJlY3QoMCwgMCwgZGV0ZWN0aW9uc0NhbnZhcy53aWR0aCwgZGV0ZWN0aW9uc0NhbnZhcy5oZWlnaHQpO1xuXG4gICAgICBpZiAoZGV0ZWN0aW9uc1Jlc3VsdCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgZHJhd0RldGVjdGlvbnNJbkZhY2UoZGV0ZWN0aW9uc1Jlc3VsdCwgZGV0ZWN0aW9uc0NhbnZhcywgZW5hYmxlTWludXRpYWUpO1xuICAgICAgICAkZmFjZUZvdW5kID0gdHJ1ZTtcbiAgICAgICAgZW5hYmxlQ2FwdHVyZUJ1dHRvbiA9IHRydWU7XG4gICAgICAgIGZhY2VGb3VuZFN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0RmFjZU5vdEZvdW5kQWxlcnQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZmFjZUFwaUNvdW50ZXIgKys7XG4gICAgfVxuICAgIFxuICAgIGlmICgkc3RhcnRGYWNlQXBpKSB7XG4gICAgICBsb29wQ2FsbGVyKHZpZGVvLCBmYWNlYXBpTG9vcCk7XG4gICAgfVxuICB9XG5cbiAgcmV0YWtlUGhvdG8uc3Vic2NyaWJlKGFzeW5jIChudikgPT4ge1xuICAgIGlmIChudikge1xuICAgICAgcmV0YWtlKCk7XG4gICAgICAkcmV0YWtlUGhvdG8gPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlUmVhZHlDYW1lcmFFdmVudEVtaXR0ZXIgPSByZWFkeS5zdWJzY3JpYmUoKG52KSA9PiB7XG4gICAgaWYgKG52KSB7XG4gICAgICAvLyBpbmZvcm1zIHRoYXQgdGhlIGNhbWVyYSBpcyByZWFkeSAodG8gYmUgY2xvc2VkIGlmIHRoYXQgaXMgd2hhdCB5b3Ugd2FudCB0byBkbylcbiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYnJ5Y2MtY2FtZXJhLXJlYWR5JykpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmVJbml0aWFsaXplZEV2ZW50RW1pdHRlciA9IGluaXRpYWxpemluZy5zdWJzY3JpYmUoKG52KSA9PiB7XG4gICAgaWYgKG52KSB7XG4gICAgICAvLyBpbmZvcm1zIHRoYXQgdGhlIGlkcm5kIHdpZGdldCBpcyBpbml0aWFsaXplZFxuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdicnljYy1mYWNlLWluaXRpYWxpemVkJykpO1xuICAgIH1cbiAgfSk7XG5cbiAgb25EZXN0cm95KCgpID0+IHtcbiAgICBzaHV0T2ZmQ2FtZXJhKCk7XG4gICAgdW5zdWJzY3JpYmVDYXB0dXJlZFN0YXRlKCk7XG4gICAgdW5zdWJzY3JpYmVGYWNlVmFsaWRhdGlvbnMoKTtcbiAgICB1bnN1YnNjcmliZVZpZGVvRGltZW5zaW9ucygpO1xuICAgIHVuc3Vic2NyaWJlQ2xlYXJWaWRlb1NyYygpO1xuICAgIHVuc3Vic2NyaWJlU2VsZWN0ZWRTdHJlYW0oKTtcbiAgICB1bnN1YnNjcmliZUNoYW5nZVRhYigpO1xuICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgdW5zdWJzY3JpYmVGYWNlQXBpKCk7XG4gICAgdW5zdWJzY3JpYmVTd2FwQ2FtZXJhKCk7XG4gICAgdW5zdWJzY3JpYmVPcmllbnRhdGlvbigpO1xuICAgIHVuc3Vic2NyaWJlUmVhZHlDYW1lcmFFdmVudEVtaXR0ZXIoKTtcbiAgICB1bnN1YnNjcmliZUluaXRpYWxpemVkRXZlbnRFbWl0dGVyKCk7XG4gICAgdW5Mb2NrU2NyZWVuKCk7XG4gICAgaW50ZXJ2YWxJZCA9IDA7XG4gIH0pO1xuPC9zY3JpcHQ+XG5cbjwhLS0gc3ZlbHRlLWlnbm9yZSBhMTF5LW1lZGlhLWhhcy1jYXB0aW9uIC0tPlxuPGRpdj5cbiAgPCEtLSB7WyR2aWRlb1N0b3JlPy52aWRlb0hlaWdodCwgJHZpZGVvU3RvcmU/LnZpZGVvV2lkdGhdfVxuICB7W2Rpc3BsYXlDYW52YXM/LmhlaWdodCwgZGlzcGxheUNhbnZhcz8ud2lkdGhdfVxuICB7WyRfc3RyZWFtPy5nZXRWaWRlb1RyYWNrcygpWzBdPy5nZXRTZXR0aW5ncygpPy5oZWlnaHQsICRfc3RyZWFtPy5nZXRWaWRlb1RyYWNrcygpWzBdPy5nZXRTZXR0aW5ncygpPy53aWR0aF19IC0tPlxuICA8ZGl2IGJpbmQ6dGhpcz17ZW5jbG9zaW5nRGl2fSBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIG14LWF1dG9cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9IHsgISRyZWFkeSA/IFwicmVsYXRpdmUgdy0wIGgtMFwiIDogXCJyZWxhdGl2ZVwiIH1cbiAgICAgICAgaGlkZGVuPXsgJGNhbWVyYVN0YXR1c1N0b3JlICE9PSBDYW1lcmFTdGF0dXNFbnVtLk9LXG4gICAgICAgIHx8IChpc0xpdmVuZXNzRW5hYmxlZCgpICYmIChpZHJuZExvYWRpbmcgfHwgaWRybmRDbG9zZWQgfHwgd2FpdGluZ0lkcm5kQ2FwdHVyZUV2ZW50KSl9XG4gICAgICA+XG4gICAgICAgIHsjaWYgaXNMaXZlbmVzc0VuYWJsZWQoKX1cbiAgICAgICAgICA8aWRsaXZlLWZhY2UtY2FwdHVyZVxuICAgICAgICAgICAgaGlkZGVuXG4gICAgICAgICAgICBtYXNrX2hpZGRlblxuICAgICAgICAgICAgYXV0b19jYXB0dXJlX2Rpc2FibGVkXG4gICAgICAgICAgICBhdXRvX2Nsb3NlX2Rpc2FibGVkXG4gICAgICAgICAgICBkZXZpY2VfaWQ9eyRzZWxlY3RlZFZpZGVvRGV2aWNlSWR9XG4gICAgICAgICAgICBiaW5kOnRoaXM9e3dpZGdldEluc3RhbmNlfVxuICAgICAgICAgIC8+XG4gICAgICAgIHsvaWZ9XG4gICAgICAgIDwhLS0gd2hlbiB1bmlxdWUgZ2V0cyByZXNzaWduZWQgaXQgd2lsbCBnZXQgcmUgcmVuZGVyZWQsIHdoaWNoIHNvbHZlcyB0aGUgJ2NhbWVyYSBub3Qgb3BlbmluZyBpc3N1ZScgLS0+XG4gICAgICAgIHsja2V5IHVuaXF1ZX1cbiAgICAgICAgICA8dmlkZW9cbiAgICAgICAgICAgIGlkPVwiYnJ5LWNjLWNhbWVyYS12aWRlby10YWdcIlxuICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSAtei0xMFwiXG4gICAgICAgICAgICBiaW5kOnRoaXM9e3ZpZGVvfVxuICAgICAgICAgICAgb246Y2FucGxheT17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNMaXZlbmVzc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAkdmlkZW9TdG9yZSA9IHsgdmlkZW9IZWlnaHQ6IHZpZGVvLnZpZGVvSGVpZ2h0LCB2aWRlb1dpZHRoOiB2aWRlby52aWRlb1dpZHRoIH07XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb246cGxheXxvbmNlPXtwbGF5fVxuICAgICAgICAgICAgcGxheXNpbmxpbmVcbiAgICAgICAgICAgIG11dGVkXG4gICAgICAgICAgICBhdXRvcGxheVxuICAgICAgICAgIC8+XG4gICAgICAgIHsva2V5fVxuICAgICAgICB7I2lmIHNob3dDb25maWdCdXR0b24gJiYgJHJlYWR5fVxuICAgICAgICAgIDxDb25mQnRuLz5cbiAgICAgICAgey9pZn1cbiAgICAgICAgeyNpZiBzaG93Q2FtZXJhQnV0dG9uICYmICRyZWFkeX1cbiAgICAgICAgICA8Q2FtZXJhQnRuLz5cbiAgICAgICAgey9pZn1cbiAgICAgICAgeyNpZiBzaG93QXV0b0NhcHR1cmVCdXR0b24gJiYgISRhdXRvbWF0aWNDYXB0dXJlICYmICFzaG93Q2FwdHVyZUJ1dHRvbiAmJiAkcmVhZHl9XG4gICAgICAgICAgPEF1dG9DYXB0dXJlQnRuLz5cbiAgICAgICAgey9pZn1cbiAgICAgICAgeyNpZiBzaG93Q2FwdHVyZUJ1dHRvbiAmJiAkcmVhZHl9XG4gICAgICAgICAgPFRha2VQaWN0dXJlQnRuXG4gICAgICAgICAgZGlzYWJsZWQ9eyghZW5hYmxlQ2FwdHVyZUJ1dHRvbiAmJiAkZW5hYmxlRmFjZUFwaSkgfHwgKCEkcmVhZHkgJiYgISRlbmFibGVGYWNlQXBpKX1cbiAgICAgICAgICBoaWRkZW49eygkY2FtZXJhU3RhdHVzU3RvcmUgIT09IENhbWVyYVN0YXR1c0VudW0uT0spIFxuICAgICAgICAgIHx8IChpc0xpdmVuZXNzRW5hYmxlZCgpICYmIChpZHJuZExvYWRpbmcgfHwgaWRybmRDbG9zZWQgfHwgd2FpdGluZ0lkcm5kQ2FwdHVyZUV2ZW50KSl9XG4gICAgICAgICAgaGFuZGxlcj17Y2FwdHVyZX1cbiAgICAgICAgICAvPlxuICAgICAgICB7L2lmfVxuICAgICAgICA8IS0tIHsjaWYgaXNMaXZlbmVzc0VuYWJsZWQoKX0gLS0+XG4gICAgICAgIDwhLS0gd29ya3MgYXMgdGhlIHZpZGVvIHRhZyB3aGVuIGxpdmVuZXNzIGVuYWJsZWQuIFRoaXMgaXMgcmVxdWlyZWQgdG8gYmUgYWJsZSB0byBzZXQgdmlkZW8gcmF0aW8gY29ycmVjdGx5IC0tPlxuICAgICAgICA8Y2FudmFzIGJpbmQ6dGhpcz17ZGlzcGxheUNhbnZhc30gaWQ9XCJicnktY2UtZGlzcGxheUNhbnZhc1wiIGNsYXNzPVwibWF4LXctZnVsbCAtc2NhbGUteC0xMDBcIiAvPlxuICAgICAgICA8IS0tIHsvaWZ9IC0tPlxuICAgICAgICA8Y2FudmFzXG4gICAgICAgICAgYmluZDp0aGlzPXtkZXRlY3Rpb25zQ2FudmFzfVxuICAgICAgICAgIGlkPVwiYnJ5LWNlLWRldGVjdGlvbnNDYW52YXNcIlxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIG1heC13LWZ1bGwgLXNjYWxlLXgtMTAwXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGNhbnZhcyBiaW5kOnRoaXM9e21hc2tDYW52YXN9IGlkPVwiYnJ5LWNlLW1hc2tDYW52YXNcIiBjbGFzcz1cImFic29sdXRlIHRvcC0wIGxlZnQtMCBtYXgtdy1mdWxsIC1zY2FsZS14LTEwMFwiIC8+XG4gICAgICAgIHsjaWYgaXNDb3VudGluZ0Rvd259XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgbGVmdC0xLzIgLXRyYW5zbGF0ZS14LTEvMiBjZS1kdWktYmFkZ2UgY2UtZHVpLWJhZGdlLWxnIGgtWzJlbV0gdGV4dC0yeGwgeGw6dGV4dC1iYXNlIHctWzEyLjFlbV0ge2lzTW9iaWxlKCkgXG4gICAgICAgICAgICA/ICd0b3AtWzEwJV0nIDogJ3RvcC1bMyVdJ31cIlxuICAgICAgICAgICAgPnskXygnZmFjZUNvbGxlY3Rvci5zdGF5U3RpbGwnKX08L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgIHsvaWZ9XG4gICAgICAgIHsjaWYgJGVuYWJsZUZhY2VBcGkgJiYgIWlzQ291bnRpbmdEb3duICYmICRmYWNlVmFsaWRhdGlvbkFsZXJ0fVxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGxlZnQtMS8yIC10cmFuc2xhdGUteC0xLzIgY2UtZHVpLWJhZGdlIGNlLWR1aS1iYWRnZS1sZyBoLVsyZW1dIHRleHQtMnhsIHhsOnRleHQtYmFzZSB3LVsxMi4xZW1dIHtpc01vYmlsZSgpIFxuICAgICAgICAgICAgPyAndG9wLVsxMCVdJyA6ICd0b3AtWzMlXSd9XCJcbiAgICAgICAgICAgID57JF8oYCR7JGZhY2VWYWxpZGF0aW9uQWxlcnR9YCl9PC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICB7L2lmfVxuICAgICAgPC9kaXY+XG4gICAgICB7I2lmIGlzTGl2ZW5lc3NFbmFibGVkKCkgJiYgd2FpdGluZ0lkcm5kQ2FwdHVyZUV2ZW50fVxuICAgICAgICA8c2xvdCBuYW1lPVwib2J0YWluaW5nLXBob3RvLWdpZlwiIGNsYXNzPVwiYmxvY2sgaC1bMTdlbV0gbGc6aC1bMjEuNmVtXSB4bDpoLVszMGVtXVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmFuc2xhdGUteS0xLzMgbWQ6dHJhbnNsYXRlLXktMS80IHhsOnRyYW5zbGF0ZS15LTEvMlwiPlxuICAgICAgICAgICAgPGltZyBzcmM9e2xvYWRpbmdHaWZ9IGFsdD1cImxvYWRpbmcgZ2lmXCIgY2xhc3M9XCJtLWF1dG8gaC1bMTBlbV0gbGc6aC1bMTJlbV1cIiAvPlxuICAgICAgICAgICAgeyNpZiAkaXNMb2FkaW5nfVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIjJ4bDp0ZXh0LTJ4bCBsZzp0ZXh0LTJ4bCB0ZXh0LW1kIGJsb2NrIHAtMiBtLWF1dG8gdGV4dC1jZW50ZXJcIj5PYnRhaW5pbmcgcGhvdG8uLi48L3NwYW4+XG4gICAgICAgICAgICB7OmVsc2V9XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiMnhsOnRleHQtMnhsIGxnOnRleHQtMnhsIHRleHQtbWQgYmxvY2sgcC0yIG0tYXV0byB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgPnskXygnZmFjZUNvbGxlY3Rvci5vYnRhaW5pbmdQaWN0dXJlJyl9PC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIHsvaWZ9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2xvdD5cbiAgICAgIHsvaWZ9XG4gICAgICB7I2lmICgoaXNMaXZlbmVzc0VuYWJsZWQoKSAmJiBpZHJuZExvYWRpbmcpIHx8ICghaXNMaXZlbmVzc0VuYWJsZWQoKSAmJiAhJHJlYWR5KSkgJiYgJGNhbWVyYVN0YXR1c1N0b3JlID09PSBDYW1lcmFTdGF0dXNFbnVtLk9LfVxuICAgICAgICA8c2xvdCBuYW1lPVwibG9hZGluZy1jYW1lcmEtZ2lmXCIgY2xhc3M9XCJibG9jayBoLVsxN2VtXSBsZzpoLVsyMS42ZW1dIHhsOmgtWzMwZW1dXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRyYW5zbGF0ZS15LTEvMyBtZDp0cmFuc2xhdGUteS0xLzQgeGw6dHJhbnNsYXRlLXktMS8yXCI+XG4gICAgICAgICAgICA8aW1nIHNyYz17bG9hZGluZ0dpZn0gYWx0PVwibG9hZGluZyBnaWZcIiBjbGFzcz1cIm0tYXV0byBoLVsxMGVtXSBsZzpoLVsxMmVtXVwiIC8+XG4gICAgICAgICAgICB7I2lmICRpc0xvYWRpbmd9XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiMnhsOnRleHQtMnhsIGxnOnRleHQtMnhsIHRleHQtbWQgYmxvY2sgcC0yIG0tYXV0byB0ZXh0LWNlbnRlclwiPkxvYWRpbmcgY2FtZXJhLi4uPC9zcGFuPlxuICAgICAgICAgICAgezplbHNlfVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIjJ4bDp0ZXh0LTJ4bCBsZzp0ZXh0LTJ4bCB0ZXh0LW1kIGJsb2NrIHAtMiBtLWF1dG8gdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID57JF8oJ2ZhY2VDb2xsZWN0b3IuaW5pdGlhdGluZ0NhbWVyYScpfTwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICB7L2lmfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3Nsb3Q+XG4gICAgICB7L2lmfVxuICAgICAgeyNpZiAkY2FwdHVyZWR9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZS1kdWktYnRuLWdyb3VwIGZsZXhcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBvbjpjbGljaz17KCkgPT4gc2F2ZSgpfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyRqdXN0aWZpY2F0aW9uLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICAgIGNsYXNzPVwiY2UtZHVpLWJ0biBjZS1kdWktYnRuLXByaW1hcnkgY2UtZHVpLWJ0bi1ibG9jayBmbGV4LXNocmlua1wiPnskXygnZmFjZUNvbGxlY3Rvci5maW5pc2gnKX08L2J1dHRvblxuICAgICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBpZD1cImJyeS1jYy1yZXRha2UtYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY2UtZHVpLWJ0biBjZS1kdWktYnRuLWJsb2NrIGNlLWR1aS1idG4tb3V0bGluZSBmbGV4LXNocmlua1wiXG4gICAgICAgICAgICBvbjpjbGljaz17KCkgPT4gcmV0YWtlKCl9PnskXygnZmFjZUNvbGxlY3Rvci5yZXRha2VQaG90bycpfTwvYnV0dG9uXG4gICAgICAgICAgPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIHsvaWZ9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICB7I2lmICghaWRybmRDbG9zZWQgfHwgJGNhcHR1cmVkKSAmJiBzaG93VW5jb25mb3JtaXRpZXN9XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJncmlkLWNvbHMtMSBncmlkLXJvd3MtMiBzbTpncmlkLWNvbHMtMiBzbTpncmlkLXJvd3MtMSBnYXAtWy41ZW1dIHshJHNob3dGYWNlV2hpbGVWYWxpZGF0aW5nICYmXG4gICAgICAkdW5jb25mb3JtaXRpZXNTdG9yZS5pc0xvYWRpbmdcbiAgICAgICAgPyAnYWJzb2x1dGUgLXRyYW5zbGF0ZS15LTEvMiAtdHJhbnNsYXRlLXgtMS8yIHRvcC0xLzIgbGVmdC0xLzIgb3ZlcmZsb3ctdmlzaWJsZSdcbiAgICAgICAgOiAnZ3JpZCBvdmVyZmxvdy1oaWRkZW4nfVwiXG4gICAgPlxuICAgICAgPGltZ1xuICAgICAgICBjbGFzcz1cIm0tYXV0byBjb2wtc3RhcnQtMSBjb2wtZW5kLTEgbWF4LWgtWzIzLjJlbV1cIlxuICAgICAgICBzcmM9eyRkYXRhVHlwZVByZWZpeCArICcsJyArICRpbWFnZX1cbiAgICAgICAgaGlkZGVuPXshJGNhcHR1cmVkIHx8ICghJHNob3dGYWNlV2hpbGVWYWxpZGF0aW5nICYmICR1bmNvbmZvcm1pdGllc1N0b3JlLmlzTG9hZGluZyl9XG4gICAgICAgIGFsdD1cIlwiXG4gICAgICAvPlxuICAgICAgeyNpZiAhJGNhcHR1cmVkfVxuICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgLz5cbiAgICAgIHs6ZWxzZSBpZiAkdW5jb25mb3JtaXRpZXNTdG9yZS5pc0xvYWRpbmd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tdy1bMjAwcHhdXCI+XG4gICAgICAgICAgPGgxIGNsYXNzPVwiaW5saW5lLWJsb2NrIHRleHQtM3hsIGZvbnQtYm9sZCBwYi1bMWVtXSB0cmFuc2l0aW9uLW9wYWNpdHlcIj57JF8oJ2ZhY2VDb2xsZWN0b3IudmFsaWRhdGluZycpfTwvaDE+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTYgaW5saW5lLWJsb2NrIGRvdC10eXBpbmdcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIHs6ZWxzZSBpZiAkcmVxdWVzdFJlc3VsdCAhPT0gcmVxdWVzdFJlc3VsdEVudW0uT0t9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIHsjaWYgJHJlcXVlc3RSZXN1bHQgPT09IHJlcXVlc3RSZXN1bHRFbnVtLkxJVkVORVNTX0RFVEVDVElPTl9GQUlMVVJFIHx8ICRyZXF1ZXN0UmVzdWx0ID09PSByZXF1ZXN0UmVzdWx0RW51bS5VTktOT1dOX0xJVkVORVNTX0VSUk9SfVxuICAgICAgICAgICAgPGgxIGNsYXNzPVwidGV4dC0zeGwgZm9udC1ib2xkIHBiLVsxZW1dIHRyYW5zaXRpb24tb3BhY2l0eSB0ZXh0LWVycm9yXCI+XG4gICAgICAgICAgICAgIHskXygnbGl2ZW5lc3MuZXJyb3IuZXJyb3InKX06IHskXyhsaXZlbmVzc0Vycm9yKX0uXG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgIHs6ZWxzZSBpZiAkcmVxdWVzdFJlc3VsdCA9PT0gcmVxdWVzdFJlc3VsdEVudW0uTE9XX0xJVkVORVNTX1NDT1JFfVxuICAgICAgICAgICAgPGgxIGNsYXNzPVwidGV4dC0zeGwgZm9udC1ib2xkIHBiLVsxZW1dIHRyYW5zaXRpb24tb3BhY2l0eSB0ZXh0LWVycm9yXCI+XG4gICAgICAgICAgICAgIHskXygnbGl2ZW5lc3MuZXJyb3IuZXJyb3InKX06IHskXygnZmFjZUNvbGxlY3Rvci51bmFsaXZlQ2FwdHVyZScpfVxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICB7OmVsc2UgaWYgJHJlcXVlc3RSZXN1bHQgPT09IHJlcXVlc3RSZXN1bHRFbnVtLlRFTVBMQVRFX0VYVFJBQ1RJT05fRVJST1IgfHwgJHJlcXVlc3RSZXN1bHQgPT09IHJlcXVlc3RSZXN1bHRFbnVtLlVOS05PV05fVEVNUExBVEVfRVhUUkFDVElPTl9FUlJPUn1cbiAgICAgICAgICAgIDxoMSBjbGFzcz1cInRleHQtM3hsIGZvbnQtYm9sZCBwYi1bMWVtXSB0cmFuc2l0aW9uLW9wYWNpdHkgdGV4dC1lcnJvclwiPlxuICAgICAgICAgICAgICB7JF8oJ2ZhY2VDb2xsZWN0b3IubG93UXVhbGl0eUNhcHR1cmUnKX1cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgezplbHNlIGlmICRyZXF1ZXN0UmVzdWx0ID09PSByZXF1ZXN0UmVzdWx0RW51bS5VTkFCTEVfVE9fQ09NTVVOSUNBVEVfV0lUSF9URU1QTEFURV9FWFRSQUNUSU9OX1NFUlZJQ0V9XG4gICAgICAgICAgICA8aDEgY2xhc3M9XCJ0ZXh0LTN4bCBmb250LWJvbGQgcGItWzFlbV0gdHJhbnNpdGlvbi1vcGFjaXR5IHRleHQtZXJyb3JcIj5cbiAgICAgICAgICAgICAgeyRfKCdmYWNlQ29sbGVjdG9yLnVuYWJsZVRvQ29tcGxldGVSZXF1ZXN0Jyl9XG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgIHs6ZWxzZSBpZiAkcmVxdWVzdFJlc3VsdCA9PT0gcmVxdWVzdFJlc3VsdEVudW0uTElWRU5FU1NfRVZBTFVBVElPTl9FUlJPUn1cbiAgICAgICAgICAgIDxoMSBjbGFzcz1cInRleHQtM3hsIGZvbnQtYm9sZCBwYi1bMWVtXSB0cmFuc2l0aW9uLW9wYWNpdHkgdGV4dC1lcnJvclwiPlxuICAgICAgICAgICAgICB7JF8oJ2xpdmVuZXNzLmVycm9yLmV2YWx1YXRpb25FcnJvcicpfVxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICB7OmVsc2V9XG4gICAgICAgICAgICA8aDEgY2xhc3M9XCJ0ZXh0LTN4bCBmb250LWJvbGQgcGItWzFlbV0gdHJhbnNpdGlvbi1vcGFjaXR5XCI+eyRfKCdmYWNlQ29sbGVjdG9yLmV2ZXJ5dGhpbmdPaycpfTwvaDE+XG4gICAgICAgICAgey9pZn1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2UtZHVpLWJ0bi1ncm91cCBmbGV4XCI+XG4gICAgICAgICAgICA8YnV0dG9uIG9uOmNsaWNrPXsoKSA9PiBzYXZlKCl9IGRpc2FibGVkIGNsYXNzPVwiY2UtZHVpLWJ0biBjZS1kdWktYnRuLXByaW1hcnkgY2UtZHVpLWJ0bi1ibG9jayBmbGV4LXNocmlua1wiXG4gICAgICAgICAgICAgID57JF8oJ2ZhY2VDb2xsZWN0b3IuZmluaXNoJyl9PC9idXR0b25cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgaWQ9XCJicnktY2MtcmV0YWtlLWJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2UtZHVpLWJ0biBjZS1kdWktYnRuLWJsb2NrIGNlLWR1aS1idG4tb3V0bGluZSBmbGV4LXNocmlua1wiXG4gICAgICAgICAgICAgIG9uOmNsaWNrPXsoKSA9PiByZXRha2UoKX0+eyRfKCdmYWNlQ29sbGVjdG9yLnJldGFrZVBob3RvJyl9PC9idXR0b25cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB7OmVsc2UgaWYgISRzYXZlZH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGgxIGNsYXNzPVwidGV4dC0zeGwgZm9udC1ib2xkIHRyYW5zaXRpb24tb3BhY2l0eVwiPnsoZXZhbHVhdGVQaG90byA/ICRfKCdmYWNlQ29sbGVjdG9yLnVuY29uZm9ybWl0aWVzJykgOiAkXygnZmFjZUNvbGxlY3Rvci5wcmV2aWV3Q2FwdHVyZScpICl9PC9oMT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXBcIj5cbiAgICAgICAgICAgIHsjZWFjaCAkdW5jb25mb3JtaXRpZXNTdG9yZS51bmNvbmZvcm1pdGllcyBhcyB1bmNvbmZvcm1pdHl9XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZS1kdWktYmFkZ2UgY2UtZHVpLWJhZGdlLWxnIGgtWzJlbV0gY2UtZHVpLWJhZGdlLWVycm9yIHRleHQteGwgcGItWy4yNWVtXSBtLVsuNWVtXVwiPlxuICAgICAgICAgICAgICAgIHt1bmNvbmZvcm1pdHl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgey9lYWNofVxuICAgICAgICAgICAgeyNpZiBldmFsdWF0ZVBob3RvICYmICR1bmNvbmZvcm1pdGllc1N0b3JlLnVuY29uZm9ybWl0aWVzLmxlbmd0aCA9PSAwfVxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlLWR1aS1iYWRnZSBjZS1kdWktYmFkZ2UtbGcgaC1bMmVtXSBjZS1kdWktYmFkZ2UtaW5mbyB0ZXh0LXhsIHBiLVsuMjVlbV0gbS1bLjVlbV1cIj5cbiAgICAgICAgICAgICAgeyRfKCdmYWNlQ29sbGVjdG9yLm5vTm9uY29uZm9ybWl0eScpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7L2lmfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsjaWYgc2hvd0p1c3RpZmljYXRpb25GaWVsZH1cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZS1kdWktZm9ybS1jb250cm9sXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNlLWR1aS1sYWJlbFwiIGZvcj1cImp1c3RpZmljYXRpb25cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNlLWR1aS1sYWJlbC10ZXh0IHRleHQtYmFzZVwiXG4gICAgICAgICAgICAgICAgICA+eyRfKCdmYWNlQ29sbGVjdG9yLnByb3ZpZGVBUmVhc29uRm9yVGhlTG93UXVhbGl0eUNhcHR1cmUnKX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZVxuICAgICAgICAgICAgICAgIGJpbmQ6dmFsdWU9eyRqdXN0aWZpY2F0aW9ufVxuICAgICAgICAgICAgICAgIGlkPVwianVzdGlmaWNhdGlvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjZS1kdWktdGV4dGFyZWEgY2UtZHVpLXRleHRhcmVhLWJvcmRlcmVkIGgtWzZlbV0gdGV4dC1iYXNlXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17JF8oJ2ZhY2VDb2xsZWN0b3IueW91ckp1c3RpZmljYXRpb24nKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2UtZHVpLWxhYmVsXCIgZm9yPVwianVzdGlmaWNhdGlvblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2UtZHVpLWxhYmVsLXRleHQtYWx0IHRleHQtYmFzZVwiPih7JF8oJ2ZhY2VDb2xsZWN0b3IudGhpc0luZm9ybWF0aW9uSXNSZXF1aXJlZCcpfSk8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7L2lmfVxuICAgICAgICAgIHsjaWYgJGNhcHR1cmVkfVxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlLWR1aS1idG4tZ3JvdXAgZmxleFwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb246Y2xpY2s9eygpID0+IHNhdmUoKX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17JGp1c3RpZmljYXRpb24ubGVuZ3RoID09PSAwICYmIHNob3dKdXN0aWZpY2F0aW9uRmllbGR9XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjZS1kdWktYnRuIGNlLWR1aS1idG4tcHJpbWFyeSBjZS1kdWktYnRuLWJsb2NrIGZsZXgtc2hyaW5rIHRleHQtYmFzZVwiXG4gICAgICAgICAgICAgICAgPnskXygnZmFjZUNvbGxlY3Rvci5maW5pc2gnKX08L2J1dHRvblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImJyeS1jYy1yZXRha2UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNlLWR1aS1idG4gY2UtZHVpLWJ0bi1ibG9jayBjZS1kdWktYnRuLW91dGxpbmUgZmxleC1zaHJpbmsgdGV4dC1iYXNlXCJcbiAgICAgICAgICAgICAgICBvbjpjbGljaz17KCkgPT4gcmV0YWtlKCl9PnskXygnZmFjZUNvbGxlY3Rvci5yZXRha2VQaG90bycpfTwvYnV0dG9uXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvaWZ9XG4gICAgICAgIDwvZGl2PlxuICAgICAgezplbHNlfVxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxoMSBjbGFzcz1cInRleHQtM3hsIGZvbnQtYm9sZCBwYi1bMWVtXSB0cmFuc2l0aW9uLW9wYWNpdHlcIj57JF8oJ2ZhY2VDb2xsZWN0b3IuY2FwdHVyZWQnKX08L2gxPlxuXG4gICAgICAgICAgeyNpZiAkdW5jb25mb3JtaXRpZXNTdG9yZS51bmNvbmZvcm1pdGllcy5sZW5ndGggIT09IDB9XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjZS1kdWktbGFiZWxcIiBmb3I9XCJqdXN0aWZpY2F0aW9uXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2UtZHVpLWxhYmVsLXRleHQgdGV4dC1iYXNlXCI+eyRfKCdmYWNlQ29sbGVjdG9yLmp1c3RpZmljYXRpb24nKX08L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZVxuICAgICAgICAgICAgICBiaW5kOnZhbHVlPXskanVzdGlmaWNhdGlvbn1cbiAgICAgICAgICAgICAgaWQ9XCJqdXN0aWZpY2F0aW9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjZS1kdWktdGV4dGFyZWEgY2UtZHVpLXRleHRhcmVhLWJvcmRlcmVkIHRleHRhcmVhLWdob3N0IGgtWzZlbV0gdy1mdWxsIHRleHQtYmFzZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIHsvaWZ9XG4gICAgICAgICAgPGRpdiBjbGFzczpjZS1kdWktYnRuLWdyb3VwPXshJGV4cG9ydEJ1dHRvbkRpc2FibGVkfSBjbGFzcz1cImZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgaWQ9XCJicnktY2MtcmV0YWtlLWJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2UtZHVpLWJ0biBjZS1kdWktYnRuLWJsb2NrIGZsZXgtc2hyaW5rIHRleHQtYmFzZVwiXG4gICAgICAgICAgICAgIG9uOmNsaWNrPXsoKSA9PiByZXRha2UoKX0+eyRfKCdmYWNlQ29sbGVjdG9yLnJldGFrZVBob3RvJyl9PC9idXR0b25cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIHsjaWYgZ2V0KGVuYWJsZVN0cmF0ZWd5KS5mYWNlU3RyYXRlZ3kgIT09IEZhY2VFeHBvcnRTdHJhdGVneS5ESVNBQkxFRH1cbiAgICAgICAgICAgICAgPEV4cG9ydEJ0biBjc3NDbGFzcz1cImNlLWR1aS1idG4tYmxvY2sgZmxleC1zaHJpbmtcIiAvPlxuICAgICAgICAgICAgey9pZn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB7L2lmfVxuICAgICAgPCEtLSA8aDEgaGlkZGVuPXshJGNhcHR1cmVkfSBjbGFzcz1cInRleHQtM3hsIGZvbnQtYm9sZCBwYi00IHRyYW5zaXRpb24tYWxsXCI+RXhjZWxlbnRlITwvaDE+IC0tPlxuICAgIDwvZGl2PlxuICB7OmVsc2UgaWYgJGNhbWVyYVN0YXR1c1N0b3JlICE9PSBDYW1lcmFTdGF0dXNFbnVtLk9LfVxuICAgIDxDYW1lcmFTdGF0dXNcbiAgICAgIGhhbmRsZXI9e2FzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgcmVPcGVuQ2FtZXJhKCk7XG4gICAgICB9fVxuICAgIC8+XG4gIHsvaWZ9XG48L2Rpdj5cbiJdLCJuYW1lcyI6WyJ0X3ZhbHVlIiwiY3R4IiwiaXNNb2JpbGUiLCJpbnNlcnRfZGV2IiwidGFyZ2V0IiwiZGl2IiwiYW5jaG9yIiwiYXBwZW5kX2RldiIsImJ1dHRvbiIsImRpcnR5Iiwic2V0X2RhdGFfZGV2IiwidCIsImhhbmRsZUF1dG9DYXB0dXJlIiwic2V0X3N0b3JlX3ZhbHVlIiwiYXV0b21hdGljQ2FwdHVyZSIsIiRhdXRvbWF0aWNDYXB0dXJlIiwiaWRsaXZlX2ZhY2VfY2FwdHVyZSIsInZpZGVvXzEiLCJDYW1lcmFTdGF0dXNFbnVtIiwiaXNMaXZlbmVzc0VuYWJsZWQiLCJ0YWtlcGljdHVyZWJ0bl9jaGFuZ2VzIiwic3BhbiIsImNyZWF0ZV9pZl9ibG9ja18yMCIsImxvYWRpbmdHaWYiLCJhdHRyX2RldiIsImltZyIsImltZ19zcmNfdmFsdWUiLCJzbG90IiwiY3JlYXRlX2lmX2Jsb2NrXzE4IiwidDBfdmFsdWUiLCJ0Ml92YWx1ZSIsImJ1dHRvbjAiLCJidXR0b24xIiwidDAiLCJ0MiIsInJlcXVlc3RSZXN1bHRFbnVtIiwiaW1nX2hpZGRlbl92YWx1ZSIsImN1cnJlbnQiLCJ0M192YWx1ZSIsInNob3dfaWYiLCJnZXQiLCJlbmFibGVTdHJhdGVneSIsIkZhY2VFeHBvcnRTdHJhdGVneSIsImlmX2Jsb2NrMCIsImNyZWF0ZV9pZl9ibG9ja18xNCIsImRpdjEiLCJoMSIsImRpdjAiLCJ0MyIsImVhY2hfdmFsdWUiLCJpIiwiY3JlYXRlX2lmX2Jsb2NrXzEyIiwiY3JlYXRlX2lmX2Jsb2NrXzExIiwiY3JlYXRlX2lmX2Jsb2NrXzEwIiwidDFfdmFsdWUiLCJjcmVhdGVfaWZfYmxvY2tfNCIsImNyZWF0ZV9pZl9ibG9ja181IiwiY3JlYXRlX2lmX2Jsb2NrXzYiLCJjcmVhdGVfaWZfYmxvY2tfNyIsImNyZWF0ZV9pZl9ibG9ja184IiwidDEiLCJsYWJlbCIsInRleHRhcmVhIiwidDRfdmFsdWUiLCJ0ZXh0YXJlYV9wbGFjZWhvbGRlcl92YWx1ZSIsImxhYmVsMCIsInNwYW4wIiwibGFiZWwxIiwic3BhbjEiLCJ0NCIsImJ1dHRvbjBfZGlzYWJsZWRfdmFsdWUiLCJzaG93X2lmXzEiLCJpZl9ibG9jazEiLCJjcmVhdGVfaWZfYmxvY2tfMjYiLCJpZl9ibG9jazIiLCJjcmVhdGVfaWZfYmxvY2tfMjUiLCJpZl9ibG9jazMiLCJjcmVhdGVfaWZfYmxvY2tfMjQiLCJpZl9ibG9jazQiLCJjcmVhdGVfaWZfYmxvY2tfMjMiLCJjcmVhdGVfaWZfYmxvY2tfMjIiLCJjcmVhdGVfaWZfYmxvY2tfMjEiLCJjcmVhdGVfaWZfYmxvY2tfMTYiLCJkaXYzIiwiZGl2MiIsImNhbnZhczAiLCJjYW52YXMxIiwiY2FudmFzMiIsImRyYXdWaWRlb09uQ2FudmFzIiwidmlkZW8iLCJkaXNwbGF5Q2FudmFzIiwidmlkZW9Bc3BlY3RSYXRpbyIsImNhbnZhc0FzcGVjdFJhdGlvIiwic291cmNlWCIsInNvdXJjZVkiLCJzb3VyY2VXaWR0aCIsInNvdXJjZUhlaWdodCIsImRldGVjdGlvbnNDYW52YXMiLCJlbmNsb3NpbmdEaXYiLCJpc0NvdW50aW5nRG93biIsInVuaXF1ZSIsImxvYWRlZEZhY2VBcGlBbmRXZWlnaHRzIiwid2FpdGluZ0ZhY2VOb3RGb3VuZFRpbWVvdXQiLCJlbmFibGVDYXB0dXJlQnV0dG9uIiwiZmFjZUZvdW5kU3RhcnRUaW1lIiwiZW5hYmxlTWludXRpYWUiLCIkJHByb3BzIiwidmlkZW9EaW1lbnNpb25zIiwibm9UYWJzIiwid2VpZ2h0c1BhdGgiLCJldmFsdWF0ZVBob3RvIiwic2hvd0NhcHR1cmVCdXR0b24iLCJzaG93VW5jb25mb3JtaXRpZXMiLCJ2aWRlb092ZXJsYXkiLCJ2aWRlb092ZXJsYXlUcmFuc3BhcmVuY3kiLCJzaG93Q29uZmlnQnV0dG9uIiwic2hvd0F1dG9DYXB0dXJlQnV0dG9uIiwic2hvd0NhbWVyYUJ1dHRvbiIsInNob3dKdXN0aWZpY2F0aW9uRmllbGQiLCJtaW5FeWVUb0V5ZURpc3QiLCJzdGFydEZhY2VBcGkiLCJ3cml0YWJsZSIsImRhdGFUeXBlUHJlZml4Iiwid2lkZ2V0SW5zdGFuY2UiLCJtYXNrQ2FudmFzIiwiY2FwdHVyaW5nIiwiaW5pdGlhbGl6ZWQiLCJpZHJuZExvYWRpbmciLCJpZHJuZENsb3NlZCIsIndhaXRpbmdJZHJuZENhcHR1cmVFdmVudCIsImludGVydmFsSWQiLCJsaXZlbmVzc0Vycm9yIiwiZmFjZUFwaUNvdW50ZXIiLCJmYWNlQXBpRnJhbWVSYXRlIiwiY291bnREb3duQ2FwdHVyZSIsInJpZ2h0T3JpZW50YXRpb24iLCJjb3VudERvd25GaW5pc2hUaW1lIiwiZGlzYWJsZUNvdW50RG93biIsInRvYXN0IiwiU3dhbCIsIm9uTW91bnQiLCJsb2ciLCJpbml0aWFsaXppbmciLCIkaW5pdGlhbGl6aW5nIiwicmVhZHkiLCIkcmVhZHkiLCJyZXNldEZhY2VDb2xsZWN0b3IiLCJzZXRWaWRlb1dpZHRoSGVpZ2h0IiwicmVnaXN0ZXJJZHJuZExpc3RlbmVycyIsIm9wZW5DYW1lcmEiLCIkZW5hYmxlRmFjZUFwaSIsImxvYWRGYWNlQXBpQW5kV2VpZ2h0cyIsInJlZ2lzdGVyRGV2aWNlQ2hhbmdlTGlzdGVuZXIiLCJ3aWR0aCIsImhlaWdodCIsInYiLCJ2aWRlb1N0b3JlIiwiJHZpZGVvU3RvcmUiLCJmYWNlRm91bmQiLCIkZmFjZUZvdW5kIiwiY2FwdHVyZWQiLCIkY2FwdHVyZWQiLCIkZmFjaW5nTW9kZSIsIkZhY2luZ01vZGVFbnVtIiwiJGNhbWVyYVN0YXR1c1N0b3JlIiwic2F2ZWQiLCIkc2F2ZWQiLCIkcmVxdWVzdFJlc3VsdCIsIm9yaWdpbmFsQ2FwdHVyZSIsIiRvcmlnaW5hbENhcHR1cmUiLCJ1bmNvbmZvcm1pdGllc1N0b3JlIiwiJHVuY29uZm9ybWl0aWVzU3RvcmUiLCJmYWNlVmFsaWRhdGlvbnMiLCJmYWNlVmFsaWRhdGlvbnNTdG9yZSIsImZhY2VWYWxpZGF0aW9uQWxlcnQiLCIkZmFjZVZhbGlkYXRpb25BbGVydCIsImRyYXdPdmFsIiwib3ZhbEhlaWdodCIsIm92YWxYIiwib3ZhbFkiLCJvdmFsV2lkdGgiLCIkb3ZhbERpbWVuc2lvbnMiLCJwcmltYXJ5VGhlbWUiLCJzdWNjZXNzVGhlbWUiLCJ0aW1lUmVtYWluaW5nIiwiY2xpcFBhdGgiLCJldmVudCIsInZpZGVvXyIsIiRpZHJuZFZpZGVvU3RvcmVEaW1lbnNpb25zIiwiJCRpbnZhbGlkYXRlIiwic2h1dE9mZkNhbWVyYSIsImxvb3AiLCJsb29wQ2FsbGVyIiwiZSIsImlkcm5kSW5pdGlhbGl6ZWQiLCIkaWRybmRJbml0aWFsaXplZCIsIiRzZWxlY3RlZFRhYiIsIlRhYkVudW0iLCJvcGVuQ2FtZXJhTGl2ZW5lc3MiLCJlbmNyeXB0ZWRGaWxlIiwicGhvdG8iLCJibG9iIiwiJGJsb2IiLCJibG9iVG9CYXNlNjQiLCIkZGF0YVR5cGVQcmVmaXgiLCIkaW1hZ2UiLCIkY2FwdHVyZUxpdmVuZXNzSWRybmRFbmRwb2ludCIsImJvZHlQYXJ0cyIsImljYW9XYXJuaW5ncyIsImdldEZhY2VVbmNvbmZvcm1pdGllcyIsImVycm9yQ29kZSIsImlkcm5kRXJyb3JUb2kxOG5LZXkiLCJBeGlvc0Vycm9yIiwiZmFjZSIsImJwIiwiJF8iLCJ2YWxpZGF0ZUxpdmVuZXNzIiwiaW1hZ2UiLCJ0cmFuc2xhdGVBbmRTZXRVbmNvbmZvcm1pdGllcyIsImxpdmVuZXNzUmVzdWx0IiwiZ2V0TGl2ZW5lc3NJZHJuZCIsImRldmljZSIsInNlbGVjdERldmljZSIsIiRjYW1lcmFEZXZpY2VzU3RvcmUiLCJnZXRWaWRlb0RpbWVuc2lvbnMiLCJlcnJvciIsImNvbnN0cmFpbnRFcnJvciIsImlzT2JqZWN0IiwiZW51bWVyYXRlRGV2aWNlcyIsInNlbGVjdGVkVmlkZW9EZXZpY2VJZCIsIiRzZWxlY3RlZFZpZGVvRGV2aWNlSWQiLCJwbGF5IiwiJHN0YXJ0RmFjZUFwaSIsImNhcHR1cmUiLCIkc2NyZWVuTG9ja2VkIiwidW5Mb2NrU2NyZWVuIiwic2NyZWVuTG9ja2VkIiwiJGV5ZURpc3RhbmNlIiwidHJhbnNsYXRlZEVycm9yIiwidW5jb25mb3JtaXR5VG9pMThuS2V5IiwiY2FudmFzIiwiJGJveFN0b3JlIiwic2F2ZSIsIiRqdXN0aWZpY2F0aW9uIiwiYmFzZTY0IiwicmV0YWtlIiwicmVzdWx0IiwidGl0bGUiLCJpY29uIiwiJHNob3dMaXZlbmVzc1Jlc3VsdFRvYXN0IiwiZGV2aWNlSWQiLCJ3aWR0aENhbWVyYSIsImhlaWdodENhbWVyYSIsImFzcGVjdFJhdGlvQ2FtZXJhIiwiZmFjaW5nIiwidG91Y2hQb2ludHMiLCJyZU9wZW5DYW1lcmEiLCIkX3N0cmVhbSIsInNldEZhY2VOb3RGb3VuZEFsZXJ0Iiwibm93IiwibGlnaHRuZXNzIiwiZ2V0SW1hZ2VMaWdodG5lc3MiLCJnZXRJbWFnZVNoYXJwbmVzcyIsImludmFsaWRBbGVydHMiLCJ1bnN1YnNjcmliZVZpZGVvRGltZW5zaW9ucyIsInN0b3JlT2JqIiwidW5zdWJzY3JpYmVGYWNlVmFsaWRhdGlvbnMiLCJuZXdWYWx1ZSIsIiRjb2xsZWN0b3JTZWxlY3QiLCJuZXdGYWNlVmFsaWRhdGlvbkFsZXJ0Iiwic2V0VmFsaWRhdGlvbkFsZXJ0IiwiY291bnRkb3duSW50ZXJ2YWxDYWxsYmFjayIsInVuc3Vic2NyaWJlQ2FwdHVyZWRTdGF0ZSIsInVuc3Vic2NyaWJlQ2xlYXJWaWRlb1NyYyIsImNsZWFyZWRWaWRlb1NyY09iamVjdCIsInNlbGVjdGVkVGFiIiwidGFiIiwidW5zdWJzY3JpYmVTZWxlY3RlZFN0cmVhbSIsIm5ld0RldmljZUlkIiwidmlkZW9IZWlnaHQiLCJ2aWRlb1dpZHRoIiwic3RyZWFtIiwic2V0dXBTdHJlYW0iLCJfc3RyZWFtIiwiJGNsZWFyZWRWaWRlb1NyY09iamVjdCIsInRyYWNrIiwidW5zdWJzY3JpYmVDaGFuZ2VUYWIiLCJ1bnN1YnNjcmliZUZhY2VBcGkiLCJmYWNlYXBpTG9vcCIsInVuc3Vic2NyaWJlU3dhcENhbWVyYSIsInN3YXBDYW1lcmEiLCJuZXh0RGV2aWNlIiwidW5zdWJzY3JpYmVPcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uRGF0YSIsImRhdGEiLCJkZXRlY3Rpb25zUmVzdWx0Iiwib3B0aW9ucyIsImdldEZhY2VEZXRlY3Rvck9wdGlvbnMiLCJmYWNlYXBpIiwiZGV0ZWN0aW9uc1Jlc3VsdDIiLCJkcmF3RGV0ZWN0aW9uc0luRmFjZSIsInJldGFrZVBob3RvIiwibnYiLCIkcmV0YWtlUGhvdG8iLCJ1bnN1YnNjcmliZVJlYWR5Q2FtZXJhRXZlbnRFbWl0dGVyIiwidW5zdWJzY3JpYmVJbml0aWFsaXplZEV2ZW50RW1pdHRlciIsIm9uRGVzdHJveSIsIiQkdmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7WUFvQk9BO0FBQUE7QUFBQSxJQUFBQyxLQUFHLHNCQUFzQixJQUFBO0FBQUE7OzswRUFMNUJDLEdBQVEsSUFDTixxRkFDQSxpRkFBaUY7Ozs7OztBQUp2RixNQUFBQyxFQVNLQyxHQUFBQyxHQUFBQyxDQUFBLEdBUkhDLEVBT1FGLEdBQUFHLENBQUE7Ozs7Ozs7Ozs7OztBQURILE1BQUFDO0FB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