@getopenpay/openpay-js-react 0.3.8-alpha.194eea9 → 0.3.10

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.
Files changed (29) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{Resource--dF8SUuJ-Dc9fQMmn.js → Resource-CSs7JUop-DOycYeHk.js} +3 -3
  3. package/dist/SimpleSpanProcessor-CpPfWwEZ-kGWDuDR5.js +957 -0
  4. package/dist/detect-resources-DvMoXvPs-CtVf7C01.js +854 -0
  5. package/dist/diag-api-tLAtACvP-DQAXhz1c.js +6 -0
  6. package/dist/index-8BkUkSRP.js +7457 -0
  7. package/dist/{index-CKzAqIcz-C4PjH48o.js → index-B6pew86H-DquIY2lc.js} +8 -8
  8. package/dist/{index-CsaC-H6L-DJQ-GdFM.js → index-BHi2yhiW-LMMdZxIZ.js} +58 -58
  9. package/dist/index-CW-cTYDf-Cp697kMP.js +431 -0
  10. package/dist/{index-DwzLZzfW-V560zaw6.js → index-D2dV86NC-CEdO2lAo.js} +27 -27
  11. package/dist/{index-IxpBtXsu-nwxvM_yk.js → index-DOJYaZF--a7D-QGt4.js} +12 -12
  12. package/dist/{index-5NV_TDDQ-DabIopSA.js → index-DOjg62b6-BQhNj6gg.js} +2 -2
  13. package/dist/{index-DsDofAPV-B5Mj1vdu.js → index-Qk72FwVY-CfWtg_pu.js} +2 -2
  14. package/dist/{index-BcYRfjX5-B9cTBiMG.js → index-f7gZCxGK-CZl4xZMA.js} +73 -73
  15. package/dist/{index-CEsYYLcp-Q6csoibw.js → index-mG-441Dh-DZ_keoTO.js} +5 -5
  16. package/dist/index.d.ts +7 -1
  17. package/dist/index.js +3 -3
  18. package/dist/{metrics-api-DQcGvAaq-B5m_vWqX.js → metrics-api-Bn9Tfk4W-81_FgHy5.js} +10 -10
  19. package/dist/{sdk-info-C7UYJoSX-DvD2qmJD.js → sdk-info-C7LRuYBx-4M9Rimfv.js} +2 -2
  20. package/dist/url-DyCKv0-e-B0mm5nuH.js +797 -0
  21. package/dist/{utils-DJvE0EZd-BUrw6VfJ.js → utils-DlZCz_-h-FEcwXP9C.js} +2 -2
  22. package/dist/{utils-Byi88tCg-D9NISnnM.js → utils-YVA_SJbP-CMsLPXfE.js} +14 -14
  23. package/package.json +1 -1
  24. package/dist/SimpleSpanProcessor-PDWzkQEC-DLb0X0Rr.js +0 -957
  25. package/dist/detect-resources-Ch7Vy_os-C4-9trM0.js +0 -854
  26. package/dist/diag-api-BiCutnqB-syr6_lhh.js +0 -6
  27. package/dist/index-CqoUiXBR.js +0 -7397
  28. package/dist/index-o-DbM8F_-CnbPyD7e.js +0 -431
  29. package/dist/url-C117Jy_6-BDXd1mVb.js +0 -797
@@ -0,0 +1,431 @@
1
+ import { r as D } from "./diag-api-tLAtACvP-DQAXhz1c.js";
2
+ import { j as M, q as B, Z as G, z as W, y as v, a as X, Q as Z, x as I, p as C, S as Q, O as $ } from "./url-DyCKv0-e-B0mm5nuH.js";
3
+ import { F as Y, H as J, Y as K } from "./utils-YVA_SJbP-CMsLPXfE.js";
4
+ import { l as b } from "./utils-BGeftTvk-CchVJ54o.js";
5
+ import { T as E, x as k, R as x, s as V, b as tt } from "./utils-DlZCz_-h-FEcwXP9C.js";
6
+ import { C as P, E as h, G as et } from "./index-8BkUkSRP.js";
7
+ var g;
8
+ (function(o) {
9
+ o.COMPONENT = "component", o.HTTP_ERROR_NAME = "http.error_name", o.HTTP_STATUS_TEXT = "http.status_text";
10
+ })(g || (g = {}));
11
+ var nt = function(o, i, t, n) {
12
+ function r(e) {
13
+ return e instanceof t ? e : new t(function(s) {
14
+ s(e);
15
+ });
16
+ }
17
+ return new (t || (t = Promise))(function(e, s) {
18
+ function a(l) {
19
+ try {
20
+ u(n.next(l));
21
+ } catch (d) {
22
+ s(d);
23
+ }
24
+ }
25
+ function c(l) {
26
+ try {
27
+ u(n.throw(l));
28
+ } catch (d) {
29
+ s(d);
30
+ }
31
+ }
32
+ function u(l) {
33
+ l.done ? e(l.value) : r(l.value).then(a, c);
34
+ }
35
+ u((n = n.apply(o, [])).next());
36
+ });
37
+ }, rt = function(o, i) {
38
+ var t = { label: 0, sent: function() {
39
+ if (e[0] & 1) throw e[1];
40
+ return e[1];
41
+ }, trys: [], ops: [] }, n, r, e, s;
42
+ return s = { next: a(0), throw: a(1), return: a(2) }, typeof Symbol == "function" && (s[Symbol.iterator] = function() {
43
+ return this;
44
+ }), s;
45
+ function a(u) {
46
+ return function(l) {
47
+ return c([u, l]);
48
+ };
49
+ }
50
+ function c(u) {
51
+ if (n) throw new TypeError("Generator is already executing.");
52
+ for (; t; ) try {
53
+ if (n = 1, r && (e = u[0] & 2 ? r.return : u[0] ? r.throw || ((e = r.return) && e.call(r), 0) : r.next) && !(e = e.call(r, u[1])).done) return e;
54
+ switch (r = 0, e && (u = [u[0] & 2, e.value]), u[0]) {
55
+ case 0:
56
+ case 1:
57
+ e = u;
58
+ break;
59
+ case 4:
60
+ return t.label++, { value: u[1], done: !1 };
61
+ case 5:
62
+ t.label++, r = u[1], u = [0];
63
+ continue;
64
+ case 7:
65
+ u = t.ops.pop(), t.trys.pop();
66
+ continue;
67
+ default:
68
+ if (e = t.trys, !(e = e.length > 0 && e[e.length - 1]) && (u[0] === 6 || u[0] === 2)) {
69
+ t = 0;
70
+ continue;
71
+ }
72
+ if (u[0] === 3 && (!e || u[1] > e[0] && u[1] < e[3])) {
73
+ t.label = u[1];
74
+ break;
75
+ }
76
+ if (u[0] === 6 && t.label < e[1]) {
77
+ t.label = e[1], e = u;
78
+ break;
79
+ }
80
+ if (e && t.label < e[2]) {
81
+ t.label = e[2], t.ops.push(u);
82
+ break;
83
+ }
84
+ e[2] && t.ops.pop(), t.trys.pop();
85
+ continue;
86
+ }
87
+ u = i.call(o, t);
88
+ } catch (l) {
89
+ u = [6, l], r = 0;
90
+ } finally {
91
+ n = e = 0;
92
+ }
93
+ if (u[0] & 5) throw u[1];
94
+ return { value: u[0] ? u[1] : void 0, done: !0 };
95
+ }
96
+ }, ot = function(o) {
97
+ var i = typeof Symbol == "function" && Symbol.iterator, t = i && o[i], n = 0;
98
+ if (t) return t.call(o);
99
+ if (o && typeof o.length == "number") return {
100
+ next: function() {
101
+ return o && n >= o.length && (o = void 0), { value: o && o[n++], done: !o };
102
+ }
103
+ };
104
+ throw new TypeError(i ? "Object is not iterable." : "Symbol.iterator is not defined.");
105
+ }, it = function(o, i) {
106
+ var t = typeof Symbol == "function" && o[Symbol.iterator];
107
+ if (!t) return o;
108
+ var n = t.call(o), r, e = [], s;
109
+ try {
110
+ for (; (i === void 0 || i-- > 0) && !(r = n.next()).done; ) e.push(r.value);
111
+ } catch (a) {
112
+ s = { error: a };
113
+ } finally {
114
+ try {
115
+ r && !r.done && (t = n.return) && t.call(n);
116
+ } finally {
117
+ if (s) throw s.error;
118
+ }
119
+ }
120
+ return e;
121
+ }, N = D.createComponentLogger({
122
+ namespace: "@opentelemetry/opentelemetry-instrumentation-fetch/utils"
123
+ });
124
+ function st() {
125
+ for (var o = [], i = 0; i < arguments.length; i++)
126
+ o[i] = arguments[i];
127
+ if (o[0] instanceof URL || typeof o[0] == "string") {
128
+ var t = o[1];
129
+ if (!(t != null && t.body))
130
+ return Promise.resolve();
131
+ if (t.body instanceof ReadableStream) {
132
+ var n = at(t.body), r = n.body, e = n.length;
133
+ return t.body = r, e;
134
+ } else
135
+ return Promise.resolve(ut(t.body));
136
+ } else {
137
+ var s = o[0];
138
+ return s != null && s.body ? s.clone().text().then(function(a) {
139
+ return S(a);
140
+ }) : Promise.resolve();
141
+ }
142
+ }
143
+ function at(o) {
144
+ if (!o.pipeThrough)
145
+ return N.warn("Platform has ReadableStream but not pipeThrough!"), {
146
+ body: o,
147
+ length: Promise.resolve(void 0)
148
+ };
149
+ var i = 0, t, n = new Promise(function(e) {
150
+ t = e;
151
+ }), r = new TransformStream({
152
+ start: function() {
153
+ },
154
+ transform: function(e, s) {
155
+ return nt(this, void 0, void 0, function() {
156
+ var a;
157
+ return rt(this, function(c) {
158
+ switch (c.label) {
159
+ case 0:
160
+ return [4, e];
161
+ case 1:
162
+ return a = c.sent(), i += a.byteLength, s.enqueue(e), [
163
+ 2
164
+ /*return*/
165
+ ];
166
+ }
167
+ });
168
+ });
169
+ },
170
+ flush: function() {
171
+ t(i);
172
+ }
173
+ });
174
+ return {
175
+ body: o.pipeThrough(r),
176
+ length: n
177
+ };
178
+ }
179
+ function ut(o) {
180
+ if (typeof Document < "u" && o instanceof Document)
181
+ return new XMLSerializer().serializeToString(document).length;
182
+ if (o instanceof Blob)
183
+ return o.size;
184
+ if (o.byteLength !== void 0)
185
+ return o.byteLength;
186
+ if (o instanceof FormData)
187
+ return ft(o);
188
+ if (o instanceof URLSearchParams)
189
+ return S(o.toString());
190
+ if (typeof o == "string")
191
+ return S(o);
192
+ N.warn("unknown body type");
193
+ }
194
+ var ct = new TextEncoder();
195
+ function S(o) {
196
+ return ct.encode(o).byteLength;
197
+ }
198
+ function ft(o) {
199
+ var i, t, n = 0;
200
+ try {
201
+ for (var r = ot(o.entries()), e = r.next(); !e.done; e = r.next()) {
202
+ var s = it(e.value, 2), a = s[0], c = s[1];
203
+ n += a.length, c instanceof Blob ? n += c.size : n += c.length;
204
+ }
205
+ } catch (u) {
206
+ i = { error: u };
207
+ } finally {
208
+ try {
209
+ e && !e.done && (t = r.return) && t.call(r);
210
+ } finally {
211
+ if (i) throw i.error;
212
+ }
213
+ }
214
+ return n;
215
+ }
216
+ var O = "0.57.0", lt = /* @__PURE__ */ function() {
217
+ var o = function(i, t) {
218
+ return o = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n, r) {
219
+ n.__proto__ = r;
220
+ } || function(n, r) {
221
+ for (var e in r) Object.prototype.hasOwnProperty.call(r, e) && (n[e] = r[e]);
222
+ }, o(i, t);
223
+ };
224
+ return function(i, t) {
225
+ if (typeof t != "function" && t !== null)
226
+ throw new TypeError("Class extends value " + String(t) + " is not a constructor or null");
227
+ o(i, t);
228
+ function n() {
229
+ this.constructor = i;
230
+ }
231
+ i.prototype = t === null ? Object.create(t) : (n.prototype = t.prototype, new n());
232
+ };
233
+ }(), pt = function(o, i) {
234
+ var t = typeof Symbol == "function" && o[Symbol.iterator];
235
+ if (!t) return o;
236
+ var n = t.call(o), r, e = [], s;
237
+ try {
238
+ for (; (i === void 0 || i-- > 0) && !(r = n.next()).done; ) e.push(r.value);
239
+ } catch (a) {
240
+ s = { error: a };
241
+ } finally {
242
+ try {
243
+ r && !r.done && (t = n.return) && t.call(n);
244
+ } finally {
245
+ if (s) throw s.error;
246
+ }
247
+ }
248
+ return e;
249
+ }, ht = function(o, i, t) {
250
+ if (arguments.length === 2) for (var n = 0, r = i.length, e; n < r; n++)
251
+ (e || !(n in i)) && (e || (e = Array.prototype.slice.call(i, 0, n)), e[n] = i[n]);
252
+ return o.concat(e || Array.prototype.slice.call(i));
253
+ }, _, dt = 300, j = typeof process == "object" && ((_ = process.release) === null || _ === void 0 ? void 0 : _.name) === "node", St = (
254
+ /** @class */
255
+ function(o) {
256
+ lt(i, o);
257
+ function i(t) {
258
+ t === void 0 && (t = {});
259
+ var n = o.call(this, "@opentelemetry/instrumentation-fetch", O, t) || this;
260
+ return n.component = "fetch", n.version = O, n.moduleName = n.component, n._usedResources = /* @__PURE__ */ new WeakSet(), n._tasksCount = 0, n;
261
+ }
262
+ return i.prototype.init = function() {
263
+ }, i.prototype._addChildSpan = function(t, n) {
264
+ var r = this.tracer.startSpan("CORS Preflight", {
265
+ startTime: n[E.FETCH_START]
266
+ }, P.setSpan(h.active(), t));
267
+ k(r, n, this.getConfig().ignoreNetworkEvents), r.end(n[E.RESPONSE_END]);
268
+ }, i.prototype._addFinalSpanAttributes = function(t, n) {
269
+ var r = x(n.url);
270
+ t.setAttribute(M, n.status), n.statusText != null && t.setAttribute(g.HTTP_STATUS_TEXT, n.statusText), t.setAttribute(B, r.host), t.setAttribute(G, r.protocol.replace(":", "")), typeof navigator < "u" && t.setAttribute(W, navigator.userAgent);
271
+ }, i.prototype._addHeaders = function(t, n) {
272
+ if (!V(n, this.getConfig().propagateTraceHeaderCorsUrls)) {
273
+ var r = {};
274
+ v.inject(h.active(), r), Object.keys(r).length > 0 && this._diag.debug("headers inject skipped due to CORS policy");
275
+ return;
276
+ }
277
+ if (t instanceof Request)
278
+ v.inject(h.active(), t.headers, {
279
+ set: function(e, s, a) {
280
+ return e.set(s, typeof a == "string" ? a : String(a));
281
+ }
282
+ });
283
+ else if (t.headers instanceof Headers)
284
+ v.inject(h.active(), t.headers, {
285
+ set: function(e, s, a) {
286
+ return e.set(s, typeof a == "string" ? a : String(a));
287
+ }
288
+ });
289
+ else if (t.headers instanceof Map)
290
+ v.inject(h.active(), t.headers, {
291
+ set: function(e, s, a) {
292
+ return e.set(s, typeof a == "string" ? a : String(a));
293
+ }
294
+ });
295
+ else {
296
+ var r = {};
297
+ v.inject(h.active(), r), t.headers = Object.assign({}, r, t.headers || {});
298
+ }
299
+ }, i.prototype._clearResources = function() {
300
+ this._tasksCount === 0 && this.getConfig().clearTimingResources && (performance.clearResourceTimings(), this._usedResources = /* @__PURE__ */ new WeakSet());
301
+ }, i.prototype._createSpan = function(t, n) {
302
+ var r;
303
+ if (n === void 0 && (n = {}), X(t, this.getConfig().ignoreUrls)) {
304
+ this._diag.debug("ignoring span as url matches ignored url");
305
+ return;
306
+ }
307
+ var e = (n.method || "GET").toUpperCase(), s = "HTTP " + e;
308
+ return this.tracer.startSpan(s, {
309
+ kind: et.CLIENT,
310
+ attributes: (r = {}, r[g.COMPONENT] = this.moduleName, r[Z] = e, r[I] = t, r)
311
+ });
312
+ }, i.prototype._findResourceAndAddNetworkEvents = function(t, n, r) {
313
+ var e = n.entries;
314
+ if (!e.length) {
315
+ if (!performance.getEntriesByType)
316
+ return;
317
+ e = performance.getEntriesByType("resource");
318
+ }
319
+ var s = tt(n.spanUrl, n.startTime, r, e, this._usedResources, "fetch");
320
+ if (s.mainRequest) {
321
+ var a = s.mainRequest;
322
+ this._markResourceAsUsed(a);
323
+ var c = s.corsPreFlightRequest;
324
+ c && (this._addChildSpan(t, c), this._markResourceAsUsed(c)), k(t, a, this.getConfig().ignoreNetworkEvents);
325
+ }
326
+ }, i.prototype._markResourceAsUsed = function(t) {
327
+ this._usedResources.add(t);
328
+ }, i.prototype._endSpan = function(t, n, r) {
329
+ var e = this, s = $(Date.now()), a = C();
330
+ this._addFinalSpanAttributes(t, r), setTimeout(function() {
331
+ var c;
332
+ (c = n.observer) === null || c === void 0 || c.disconnect(), e._findResourceAndAddNetworkEvents(t, n, a), e._tasksCount--, e._clearResources(), t.end(s);
333
+ }, dt);
334
+ }, i.prototype._patchConstructor = function() {
335
+ var t = this;
336
+ return function(n) {
337
+ var r = t;
338
+ return function() {
339
+ for (var e = [], s = 0; s < arguments.length; s++)
340
+ e[s] = arguments[s];
341
+ var a = this, c = x(e[0] instanceof Request ? e[0].url : String(e[0])).href, u = e[0] instanceof Request ? e[0] : e[1] || {}, l = r._createSpan(c, u);
342
+ if (!l)
343
+ return n.apply(this, e);
344
+ var d = r._prepareSpanData(c);
345
+ r.getConfig().measureRequestSize && st.apply(void 0, ht([], pt(e), !1)).then(function(f) {
346
+ f && l.setAttribute(Q, f);
347
+ }).catch(function(f) {
348
+ r._diag.warn("getFetchBodyLength", f);
349
+ });
350
+ function T(f, p) {
351
+ r._applyAttributesAfterFetch(f, u, p), r._endSpan(f, d, {
352
+ status: p.status || 0,
353
+ statusText: p.message,
354
+ url: c
355
+ });
356
+ }
357
+ function w(f, p) {
358
+ r._applyAttributesAfterFetch(f, u, p), p.status >= 200 && p.status < 400 ? r._endSpan(f, d, p) : r._endSpan(f, d, {
359
+ status: p.status,
360
+ statusText: p.statusText,
361
+ url: c
362
+ });
363
+ }
364
+ function U(f, p, y) {
365
+ try {
366
+ var H = y.clone(), q = y.clone(), A = H.body;
367
+ if (A) {
368
+ var L = A.getReader(), R = function() {
369
+ L.read().then(function(m) {
370
+ var z = m.done;
371
+ z ? w(f, q) : R();
372
+ }, function(m) {
373
+ T(f, m);
374
+ });
375
+ };
376
+ R();
377
+ } else
378
+ w(f, y);
379
+ } finally {
380
+ p(y);
381
+ }
382
+ }
383
+ function F(f, p, y) {
384
+ try {
385
+ T(f, y);
386
+ } finally {
387
+ p(y);
388
+ }
389
+ }
390
+ return new Promise(function(f, p) {
391
+ return h.with(P.setSpan(h.active(), l), function() {
392
+ return r._addHeaders(u, c), r._tasksCount++, n.apply(a, u instanceof Request ? [u] : [c, u]).then(U.bind(a, l, f), F.bind(a, l, p));
393
+ });
394
+ });
395
+ };
396
+ };
397
+ }, i.prototype._applyAttributesAfterFetch = function(t, n, r) {
398
+ var e = this, s = this.getConfig().applyCustomAttributesOnSpan;
399
+ s && Y(function() {
400
+ return s(t, n, r);
401
+ }, function(a) {
402
+ a && e._diag.error("applyCustomAttributesOnSpan", a);
403
+ }, !0);
404
+ }, i.prototype._prepareSpanData = function(t) {
405
+ var n = C(), r = [];
406
+ if (typeof PerformanceObserver != "function")
407
+ return { entries: r, startTime: n, spanUrl: t };
408
+ var e = new PerformanceObserver(function(s) {
409
+ var a = s.getEntries();
410
+ a.forEach(function(c) {
411
+ c.initiatorType === "fetch" && c.name === t && r.push(c);
412
+ });
413
+ });
414
+ return e.observe({
415
+ entryTypes: ["resource"]
416
+ }), { entries: r, observer: e, startTime: n, spanUrl: t };
417
+ }, i.prototype.enable = function() {
418
+ if (j) {
419
+ this._diag.warn("this instrumentation is intended for web usage only, it does not instrument Node.js's fetch()");
420
+ return;
421
+ }
422
+ J(fetch) && (this._unwrap(b, "fetch"), this._diag.debug("removing previous patch for constructor")), this._wrap(b, "fetch", this._patchConstructor());
423
+ }, i.prototype.disable = function() {
424
+ j || (this._unwrap(b, "fetch"), this._usedResources = /* @__PURE__ */ new WeakSet());
425
+ }, i;
426
+ }(K)
427
+ );
428
+ export {
429
+ St as FetchInstrumentation
430
+ };
431
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtQ1ctY1RZRGYtIX57MDA2fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHIgfSBmcm9tICcuL2RpYWctYXBpLXRMQXRBQ3ZQLSF+ezAwN31+LmpzJztcbmltcG9ydCB7IGogYXMgakEsIHEgYXMgcUEsIFogYXMgWkEsIHogYXMgekEsIHkgYXMgeV8sIGEgYXMgWmUsIFEgYXMgUUEsIHggYXMgeEEsIHAgYXMgcF8sIFMgYXMgU3IsIE8gfSBmcm9tICcuL3VybC1EeUNLdjAtZS0hfnswMDh9fi5qcyc7XG5pbXBvcnQgeyBGLCBIIGFzIEgkMSwgWSB9IGZyb20gJy4vdXRpbHMtWVZBX1NKYlAtIX57MDA5fX4uanMnO1xuaW1wb3J0IHsgbCB9IGZyb20gJy4vdXRpbHMtQkdlZnRUdmstIX57MDBhfX4uanMnO1xuaW1wb3J0IHsgVCwgeCwgUiwgcywgYiBhcyBiJDEgfSBmcm9tICcuL3V0aWxzLURsWkN6Xy1oLSF+ezAwNX1+LmpzJztcbmltcG9ydCB7IEMgYXMgQ2UsIEUgYXMgRWUsIEcgYXMgR2UgfSBmcm9tICcuL2luZGV4LSF+ezAwNH1+LmpzJztcblxudmFyIHk7XG4oZnVuY3Rpb24oYSkge1xuICBhLkNPTVBPTkVOVCA9IFwiY29tcG9uZW50XCIsIGEuSFRUUF9FUlJPUl9OQU1FID0gXCJodHRwLmVycm9yX25hbWVcIiwgYS5IVFRQX1NUQVRVU19URVhUID0gXCJodHRwLnN0YXR1c190ZXh0XCI7XG59KSh5IHx8ICh5ID0ge30pKTtcbnZhciBuZSA9IGZ1bmN0aW9uKGEsIG8sIGUsIHIpIHtcbiAgZnVuY3Rpb24gbih0KSB7XG4gICAgcmV0dXJuIHQgaW5zdGFuY2VvZiBlID8gdCA6IG5ldyBlKGZ1bmN0aW9uKGkpIHtcbiAgICAgIGkodCk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAoZSB8fCAoZSA9IFByb21pc2UpKShmdW5jdGlvbih0LCBpKSB7XG4gICAgZnVuY3Rpb24gcyhjKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KHIubmV4dChjKSk7XG4gICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgIGkoaCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGYoYykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShyLnRocm93KGMpKTtcbiAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgaShoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShjKSB7XG4gICAgICBjLmRvbmUgPyB0KGMudmFsdWUpIDogbihjLnZhbHVlKS50aGVuKHMsIGYpO1xuICAgIH1cbiAgICB1KChyID0gci5hcHBseShhLCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufSwgYWUgPSBmdW5jdGlvbihhLCBvKSB7XG4gIHZhciBlID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdO1xuICAgIHJldHVybiB0WzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCByLCBuLCB0LCBpO1xuICByZXR1cm4gaSA9IHsgbmV4dDogcygwKSwgdGhyb3c6IHMoMSksIHJldHVybjogcygyKSB9LCB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiAoaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBpO1xuICBmdW5jdGlvbiBzKHUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYykge1xuICAgICAgcmV0dXJuIGYoW3UsIGNdKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGYodSkge1xuICAgIGlmIChyKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICBmb3IgKDsgZTsgKSB0cnkge1xuICAgICAgaWYgKHIgPSAxLCBuICYmICh0ID0gdVswXSAmIDIgPyBuLnJldHVybiA6IHVbMF0gPyBuLnRocm93IHx8ICgodCA9IG4ucmV0dXJuKSAmJiB0LmNhbGwobiksIDApIDogbi5uZXh0KSAmJiAhKHQgPSB0LmNhbGwobiwgdVsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgc3dpdGNoIChuID0gMCwgdCAmJiAodSA9IFt1WzBdICYgMiwgdC52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHQgPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIGUubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGUubGFiZWwrKywgbiA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAodCA9IGUudHJ5cywgISh0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghdCB8fCB1WzFdID4gdFswXSAmJiB1WzFdIDwgdFszXSkpIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIGUubGFiZWwgPCB0WzFdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gdFsxXSwgdCA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHQgJiYgZS5sYWJlbCA8IHRbMl0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSB0WzJdLCBlLm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRbMl0gJiYgZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSBvLmNhbGwoYSwgZSk7XG4gICAgfSBjYXRjaCAoYykge1xuICAgICAgdSA9IFs2LCBjXSwgbiA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHIgPSB0ID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufSwgaWUgPSBmdW5jdGlvbihhKSB7XG4gIHZhciBvID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBlID0gbyAmJiBhW29dLCByID0gMDtcbiAgaWYgKGUpIHJldHVybiBlLmNhbGwoYSk7XG4gIGlmIChhICYmIHR5cGVvZiBhLmxlbmd0aCA9PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGEgJiYgciA+PSBhLmxlbmd0aCAmJiAoYSA9IHZvaWQgMCksIHsgdmFsdWU6IGEgJiYgYVtyKytdLCBkb25lOiAhYSB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihvID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufSwgb2UgPSBmdW5jdGlvbihhLCBvKSB7XG4gIHZhciBlID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgYVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWUpIHJldHVybiBhO1xuICB2YXIgciA9IGUuY2FsbChhKSwgbiwgdCA9IFtdLCBpO1xuICB0cnkge1xuICAgIGZvciAoOyAobyA9PT0gdm9pZCAwIHx8IG8tLSA+IDApICYmICEobiA9IHIubmV4dCgpKS5kb25lOyApIHQucHVzaChuLnZhbHVlKTtcbiAgfSBjYXRjaCAocykge1xuICAgIGkgPSB7IGVycm9yOiBzIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG4gJiYgIW4uZG9uZSAmJiAoZSA9IHIucmV0dXJuKSAmJiBlLmNhbGwocik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdDtcbn0sIFUgPSByLmNyZWF0ZUNvbXBvbmVudExvZ2dlcih7XG4gIG5hbWVzcGFjZTogXCJAb3BlbnRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWluc3RydW1lbnRhdGlvbi1mZXRjaC91dGlsc1wiXG59KTtcbmZ1bmN0aW9uIHNlKCkge1xuICBmb3IgKHZhciBhID0gW10sIG8gPSAwOyBvIDwgYXJndW1lbnRzLmxlbmd0aDsgbysrKVxuICAgIGFbb10gPSBhcmd1bWVudHNbb107XG4gIGlmIChhWzBdIGluc3RhbmNlb2YgVVJMIHx8IHR5cGVvZiBhWzBdID09IFwic3RyaW5nXCIpIHtcbiAgICB2YXIgZSA9IGFbMV07XG4gICAgaWYgKCEoZSAhPSBudWxsICYmIGUuYm9keSkpXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKGUuYm9keSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgICB2YXIgciA9IHVlKGUuYm9keSksIG4gPSByLmJvZHksIHQgPSByLmxlbmd0aDtcbiAgICAgIHJldHVybiBlLmJvZHkgPSBuLCB0O1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmZShlLmJvZHkpKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaSA9IGFbMF07XG4gICAgcmV0dXJuIGkgIT0gbnVsbCAmJiBpLmJvZHkgPyBpLmNsb25lKCkudGV4dCgpLnRoZW4oZnVuY3Rpb24ocykge1xuICAgICAgcmV0dXJuIGIocyk7XG4gICAgfSkgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxufVxuZnVuY3Rpb24gdWUoYSkge1xuICBpZiAoIWEucGlwZVRocm91Z2gpXG4gICAgcmV0dXJuIFUud2FybihcIlBsYXRmb3JtIGhhcyBSZWFkYWJsZVN0cmVhbSBidXQgbm90IHBpcGVUaHJvdWdoIVwiKSwge1xuICAgICAgYm9keTogYSxcbiAgICAgIGxlbmd0aDogUHJvbWlzZS5yZXNvbHZlKHZvaWQgMClcbiAgICB9O1xuICB2YXIgbyA9IDAsIGUsIHIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbih0KSB7XG4gICAgZSA9IHQ7XG4gIH0pLCBuID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7XG4gICAgc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIH0sXG4gICAgdHJhbnNmb3JtOiBmdW5jdGlvbih0LCBpKSB7XG4gICAgICByZXR1cm4gbmUodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcztcbiAgICAgICAgcmV0dXJuIGFlKHRoaXMsIGZ1bmN0aW9uKGYpIHtcbiAgICAgICAgICBzd2l0Y2ggKGYubGFiZWwpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgcmV0dXJuIFs0LCB0XTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgcmV0dXJuIHMgPSBmLnNlbnQoKSwgbyArPSBzLmJ5dGVMZW5ndGgsIGkuZW5xdWV1ZSh0KSwgW1xuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAvKnJldHVybiovXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZmx1c2g6IGZ1bmN0aW9uKCkge1xuICAgICAgZShvKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGJvZHk6IGEucGlwZVRocm91Z2gobiksXG4gICAgbGVuZ3RoOiByXG4gIH07XG59XG5mdW5jdGlvbiBmZShhKSB7XG4gIGlmICh0eXBlb2YgRG9jdW1lbnQgPCBcInVcIiAmJiBhIGluc3RhbmNlb2YgRG9jdW1lbnQpXG4gICAgcmV0dXJuIG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoZG9jdW1lbnQpLmxlbmd0aDtcbiAgaWYgKGEgaW5zdGFuY2VvZiBCbG9iKVxuICAgIHJldHVybiBhLnNpemU7XG4gIGlmIChhLmJ5dGVMZW5ndGggIT09IHZvaWQgMClcbiAgICByZXR1cm4gYS5ieXRlTGVuZ3RoO1xuICBpZiAoYSBpbnN0YW5jZW9mIEZvcm1EYXRhKVxuICAgIHJldHVybiBsZShhKTtcbiAgaWYgKGEgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpXG4gICAgcmV0dXJuIGIoYS50b1N0cmluZygpKTtcbiAgaWYgKHR5cGVvZiBhID09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIGIoYSk7XG4gIFUud2FybihcInVua25vd24gYm9keSB0eXBlXCIpO1xufVxudmFyIGNlID0gbmV3IFRleHRFbmNvZGVyKCk7XG5mdW5jdGlvbiBiKGEpIHtcbiAgcmV0dXJuIGNlLmVuY29kZShhKS5ieXRlTGVuZ3RoO1xufVxuZnVuY3Rpb24gbGUoYSkge1xuICB2YXIgbywgZSwgciA9IDA7XG4gIHRyeSB7XG4gICAgZm9yICh2YXIgbiA9IGllKGEuZW50cmllcygpKSwgdCA9IG4ubmV4dCgpOyAhdC5kb25lOyB0ID0gbi5uZXh0KCkpIHtcbiAgICAgIHZhciBpID0gb2UodC52YWx1ZSwgMiksIHMgPSBpWzBdLCBmID0gaVsxXTtcbiAgICAgIHIgKz0gcy5sZW5ndGgsIGYgaW5zdGFuY2VvZiBCbG9iID8gciArPSBmLnNpemUgOiByICs9IGYubGVuZ3RoO1xuICAgIH1cbiAgfSBjYXRjaCAodSkge1xuICAgIG8gPSB7IGVycm9yOiB1IH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIHQgJiYgIXQuZG9uZSAmJiAoZSA9IG4ucmV0dXJuKSAmJiBlLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChvKSB0aHJvdyBvLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcjtcbn1cbnZhciBrID0gXCIwLjU3LjBcIiwgZGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gIHZhciBhID0gZnVuY3Rpb24obywgZSkge1xuICAgIHJldHVybiBhID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24ociwgbikge1xuICAgICAgci5fX3Byb3RvX18gPSBuO1xuICAgIH0gfHwgZnVuY3Rpb24ociwgbikge1xuICAgICAgZm9yICh2YXIgdCBpbiBuKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwgdCkgJiYgKHJbdF0gPSBuW3RdKTtcbiAgICB9LCBhKG8sIGUpO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24obywgZSkge1xuICAgIGlmICh0eXBlb2YgZSAhPSBcImZ1bmN0aW9uXCIgJiYgZSAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGUpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICBhKG8sIGUpO1xuICAgIGZ1bmN0aW9uIHIoKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gbztcbiAgICB9XG4gICAgby5wcm90b3R5cGUgPSBlID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShlKSA6IChyLnByb3RvdHlwZSA9IGUucHJvdG90eXBlLCBuZXcgcigpKTtcbiAgfTtcbn0oKSwgaGUgPSBmdW5jdGlvbihhLCBvKSB7XG4gIHZhciBlID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgYVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWUpIHJldHVybiBhO1xuICB2YXIgciA9IGUuY2FsbChhKSwgbiwgdCA9IFtdLCBpO1xuICB0cnkge1xuICAgIGZvciAoOyAobyA9PT0gdm9pZCAwIHx8IG8tLSA+IDApICYmICEobiA9IHIubmV4dCgpKS5kb25lOyApIHQucHVzaChuLnZhbHVlKTtcbiAgfSBjYXRjaCAocykge1xuICAgIGkgPSB7IGVycm9yOiBzIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG4gJiYgIW4uZG9uZSAmJiAoZSA9IHIucmV0dXJuKSAmJiBlLmNhbGwocik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdDtcbn0sIHBlID0gZnVuY3Rpb24oYSwgbywgZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgciA9IDAsIG4gPSBvLmxlbmd0aCwgdDsgciA8IG47IHIrKylcbiAgICAodCB8fCAhKHIgaW4gbykpICYmICh0IHx8ICh0ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobywgMCwgcikpLCB0W3JdID0gb1tyXSk7XG4gIHJldHVybiBhLmNvbmNhdCh0IHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG8pKTtcbn0sIFMsIHZlID0gMzAwLCBIID0gdHlwZW9mIHByb2Nlc3MgPT0gXCJvYmplY3RcIiAmJiAoKFMgPSBwcm9jZXNzLnJlbGVhc2UpID09PSBudWxsIHx8IFMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IFMubmFtZSkgPT09IFwibm9kZVwiLCBiZSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbihhKSB7XG4gICAgZGUobywgYSk7XG4gICAgZnVuY3Rpb24gbyhlKSB7XG4gICAgICBlID09PSB2b2lkIDAgJiYgKGUgPSB7fSk7XG4gICAgICB2YXIgciA9IGEuY2FsbCh0aGlzLCBcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1mZXRjaFwiLCBrLCBlKSB8fCB0aGlzO1xuICAgICAgcmV0dXJuIHIuY29tcG9uZW50ID0gXCJmZXRjaFwiLCByLnZlcnNpb24gPSBrLCByLm1vZHVsZU5hbWUgPSByLmNvbXBvbmVudCwgci5fdXNlZFJlc291cmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha1NldCgpLCByLl90YXNrc0NvdW50ID0gMCwgcjtcbiAgICB9XG4gICAgcmV0dXJuIG8ucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHtcbiAgICB9LCBvLnByb3RvdHlwZS5fYWRkQ2hpbGRTcGFuID0gZnVuY3Rpb24oZSwgcikge1xuICAgICAgdmFyIG4gPSB0aGlzLnRyYWNlci5zdGFydFNwYW4oXCJDT1JTIFByZWZsaWdodFwiLCB7XG4gICAgICAgIHN0YXJ0VGltZTogcltULkZFVENIX1NUQVJUXVxuICAgICAgfSwgQ2Uuc2V0U3BhbihFZS5hY3RpdmUoKSwgZSkpO1xuICAgICAgeChuLCByLCB0aGlzLmdldENvbmZpZygpLmlnbm9yZU5ldHdvcmtFdmVudHMpLCBuLmVuZChyW1QuUkVTUE9OU0VfRU5EXSk7XG4gICAgfSwgby5wcm90b3R5cGUuX2FkZEZpbmFsU3BhbkF0dHJpYnV0ZXMgPSBmdW5jdGlvbihlLCByKSB7XG4gICAgICB2YXIgbiA9IFIoci51cmwpO1xuICAgICAgZS5zZXRBdHRyaWJ1dGUoakEsIHIuc3RhdHVzKSwgci5zdGF0dXNUZXh0ICE9IG51bGwgJiYgZS5zZXRBdHRyaWJ1dGUoeS5IVFRQX1NUQVRVU19URVhULCByLnN0YXR1c1RleHQpLCBlLnNldEF0dHJpYnV0ZShxQSwgbi5ob3N0KSwgZS5zZXRBdHRyaWJ1dGUoWkEsIG4ucHJvdG9jb2wucmVwbGFjZShcIjpcIiwgXCJcIikpLCB0eXBlb2YgbmF2aWdhdG9yIDwgXCJ1XCIgJiYgZS5zZXRBdHRyaWJ1dGUoekEsIG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIH0sIG8ucHJvdG90eXBlLl9hZGRIZWFkZXJzID0gZnVuY3Rpb24oZSwgcikge1xuICAgICAgaWYgKCFzKHIsIHRoaXMuZ2V0Q29uZmlnKCkucHJvcGFnYXRlVHJhY2VIZWFkZXJDb3JzVXJscykpIHtcbiAgICAgICAgdmFyIG4gPSB7fTtcbiAgICAgICAgeV8uaW5qZWN0KEVlLmFjdGl2ZSgpLCBuKSwgT2JqZWN0LmtleXMobikubGVuZ3RoID4gMCAmJiB0aGlzLl9kaWFnLmRlYnVnKFwiaGVhZGVycyBpbmplY3Qgc2tpcHBlZCBkdWUgdG8gQ09SUyBwb2xpY3lcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChlIGluc3RhbmNlb2YgUmVxdWVzdClcbiAgICAgICAgeV8uaW5qZWN0KEVlLmFjdGl2ZSgpLCBlLmhlYWRlcnMsIHtcbiAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKHQsIGksIHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0LnNldChpLCB0eXBlb2YgcyA9PSBcInN0cmluZ1wiID8gcyA6IFN0cmluZyhzKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIGVsc2UgaWYgKGUuaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpXG4gICAgICAgIHlfLmluamVjdChFZS5hY3RpdmUoKSwgZS5oZWFkZXJzLCB7XG4gICAgICAgICAgc2V0OiBmdW5jdGlvbih0LCBpLCBzKSB7XG4gICAgICAgICAgICByZXR1cm4gdC5zZXQoaSwgdHlwZW9mIHMgPT0gXCJzdHJpbmdcIiA/IHMgOiBTdHJpbmcocykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICBlbHNlIGlmIChlLmhlYWRlcnMgaW5zdGFuY2VvZiBNYXApXG4gICAgICAgIHlfLmluamVjdChFZS5hY3RpdmUoKSwgZS5oZWFkZXJzLCB7XG4gICAgICAgICAgc2V0OiBmdW5jdGlvbih0LCBpLCBzKSB7XG4gICAgICAgICAgICByZXR1cm4gdC5zZXQoaSwgdHlwZW9mIHMgPT0gXCJzdHJpbmdcIiA/IHMgOiBTdHJpbmcocykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIG4gPSB7fTtcbiAgICAgICAgeV8uaW5qZWN0KEVlLmFjdGl2ZSgpLCBuKSwgZS5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgbiwgZS5oZWFkZXJzIHx8IHt9KTtcbiAgICAgIH1cbiAgICB9LCBvLnByb3RvdHlwZS5fY2xlYXJSZXNvdXJjZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuX3Rhc2tzQ291bnQgPT09IDAgJiYgdGhpcy5nZXRDb25maWcoKS5jbGVhclRpbWluZ1Jlc291cmNlcyAmJiAocGVyZm9ybWFuY2UuY2xlYXJSZXNvdXJjZVRpbWluZ3MoKSwgdGhpcy5fdXNlZFJlc291cmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha1NldCgpKTtcbiAgICB9LCBvLnByb3RvdHlwZS5fY3JlYXRlU3BhbiA9IGZ1bmN0aW9uKGUsIHIpIHtcbiAgICAgIHZhciBuO1xuICAgICAgaWYgKHIgPT09IHZvaWQgMCAmJiAociA9IHt9KSwgWmUoZSwgdGhpcy5nZXRDb25maWcoKS5pZ25vcmVVcmxzKSkge1xuICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKFwiaWdub3Jpbmcgc3BhbiBhcyB1cmwgbWF0Y2hlcyBpZ25vcmVkIHVybFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIHQgPSAoci5tZXRob2QgfHwgXCJHRVRcIikudG9VcHBlckNhc2UoKSwgaSA9IFwiSFRUUCBcIiArIHQ7XG4gICAgICByZXR1cm4gdGhpcy50cmFjZXIuc3RhcnRTcGFuKGksIHtcbiAgICAgICAga2luZDogR2UuQ0xJRU5ULFxuICAgICAgICBhdHRyaWJ1dGVzOiAobiA9IHt9LCBuW3kuQ09NUE9ORU5UXSA9IHRoaXMubW9kdWxlTmFtZSwgbltRQV0gPSB0LCBuW3hBXSA9IGUsIG4pXG4gICAgICB9KTtcbiAgICB9LCBvLnByb3RvdHlwZS5fZmluZFJlc291cmNlQW5kQWRkTmV0d29ya0V2ZW50cyA9IGZ1bmN0aW9uKGUsIHIsIG4pIHtcbiAgICAgIHZhciB0ID0gci5lbnRyaWVzO1xuICAgICAgaWYgKCF0Lmxlbmd0aCkge1xuICAgICAgICBpZiAoIXBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0ID0gcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZShcInJlc291cmNlXCIpO1xuICAgICAgfVxuICAgICAgdmFyIGkgPSBiJDEoci5zcGFuVXJsLCByLnN0YXJ0VGltZSwgbiwgdCwgdGhpcy5fdXNlZFJlc291cmNlcywgXCJmZXRjaFwiKTtcbiAgICAgIGlmIChpLm1haW5SZXF1ZXN0KSB7XG4gICAgICAgIHZhciBzID0gaS5tYWluUmVxdWVzdDtcbiAgICAgICAgdGhpcy5fbWFya1Jlc291cmNlQXNVc2VkKHMpO1xuICAgICAgICB2YXIgZiA9IGkuY29yc1ByZUZsaWdodFJlcXVlc3Q7XG4gICAgICAgIGYgJiYgKHRoaXMuX2FkZENoaWxkU3BhbihlLCBmKSwgdGhpcy5fbWFya1Jlc291cmNlQXNVc2VkKGYpKSwgeChlLCBzLCB0aGlzLmdldENvbmZpZygpLmlnbm9yZU5ldHdvcmtFdmVudHMpO1xuICAgICAgfVxuICAgIH0sIG8ucHJvdG90eXBlLl9tYXJrUmVzb3VyY2VBc1VzZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICB0aGlzLl91c2VkUmVzb3VyY2VzLmFkZChlKTtcbiAgICB9LCBvLnByb3RvdHlwZS5fZW5kU3BhbiA9IGZ1bmN0aW9uKGUsIHIsIG4pIHtcbiAgICAgIHZhciB0ID0gdGhpcywgaSA9IE8oRGF0ZS5ub3coKSksIHMgPSBwXygpO1xuICAgICAgdGhpcy5fYWRkRmluYWxTcGFuQXR0cmlidXRlcyhlLCBuKSwgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGY7XG4gICAgICAgIChmID0gci5vYnNlcnZlcikgPT09IG51bGwgfHwgZiA9PT0gdm9pZCAwIHx8IGYuZGlzY29ubmVjdCgpLCB0Ll9maW5kUmVzb3VyY2VBbmRBZGROZXR3b3JrRXZlbnRzKGUsIHIsIHMpLCB0Ll90YXNrc0NvdW50LS0sIHQuX2NsZWFyUmVzb3VyY2VzKCksIGUuZW5kKGkpO1xuICAgICAgfSwgdmUpO1xuICAgIH0sIG8ucHJvdG90eXBlLl9wYXRjaENvbnN0cnVjdG9yID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZSA9IHRoaXM7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgICAgICB2YXIgbiA9IGU7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gW10sIHMgPSAwOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKVxuICAgICAgICAgICAgaVtzXSA9IGFyZ3VtZW50c1tzXTtcbiAgICAgICAgICB2YXIgZiA9IHRoaXMsIHUgPSBSKGlbMF0gaW5zdGFuY2VvZiBSZXF1ZXN0ID8gaVswXS51cmwgOiBTdHJpbmcoaVswXSkpLmhyZWYsIGMgPSBpWzBdIGluc3RhbmNlb2YgUmVxdWVzdCA/IGlbMF0gOiBpWzFdIHx8IHt9LCBoID0gbi5fY3JlYXRlU3Bhbih1LCBjKTtcbiAgICAgICAgICBpZiAoIWgpXG4gICAgICAgICAgICByZXR1cm4gci5hcHBseSh0aGlzLCBpKTtcbiAgICAgICAgICB2YXIgbSA9IG4uX3ByZXBhcmVTcGFuRGF0YSh1KTtcbiAgICAgICAgICBuLmdldENvbmZpZygpLm1lYXN1cmVSZXF1ZXN0U2l6ZSAmJiBzZS5hcHBseSh2b2lkIDAsIHBlKFtdLCBoZShpKSwgITEpKS50aGVuKGZ1bmN0aW9uKGwpIHtcbiAgICAgICAgICAgIGwgJiYgaC5zZXRBdHRyaWJ1dGUoU3IsIGwpO1xuICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGwpIHtcbiAgICAgICAgICAgIG4uX2RpYWcud2FybihcImdldEZldGNoQm9keUxlbmd0aFwiLCBsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBmdW5jdGlvbiBFKGwsIGQpIHtcbiAgICAgICAgICAgIG4uX2FwcGx5QXR0cmlidXRlc0FmdGVyRmV0Y2gobCwgYywgZCksIG4uX2VuZFNwYW4obCwgbSwge1xuICAgICAgICAgICAgICBzdGF0dXM6IGQuc3RhdHVzIHx8IDAsXG4gICAgICAgICAgICAgIHN0YXR1c1RleHQ6IGQubWVzc2FnZSxcbiAgICAgICAgICAgICAgdXJsOiB1XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gdyhsLCBkKSB7XG4gICAgICAgICAgICBuLl9hcHBseUF0dHJpYnV0ZXNBZnRlckZldGNoKGwsIGMsIGQpLCBkLnN0YXR1cyA+PSAyMDAgJiYgZC5zdGF0dXMgPCA0MDAgPyBuLl9lbmRTcGFuKGwsIG0sIGQpIDogbi5fZW5kU3BhbihsLCBtLCB7XG4gICAgICAgICAgICAgIHN0YXR1czogZC5zdGF0dXMsXG4gICAgICAgICAgICAgIHN0YXR1c1RleHQ6IGQuc3RhdHVzVGV4dCxcbiAgICAgICAgICAgICAgdXJsOiB1XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gTShsLCBkLCB2KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YXIgaiA9IHYuY2xvbmUoKSwgRCA9IHYuY2xvbmUoKSwgUiA9IGouYm9keTtcbiAgICAgICAgICAgICAgaWYgKFIpIHtcbiAgICAgICAgICAgICAgICB2YXIgQiA9IFIuZ2V0UmVhZGVyKCksIEEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIEIucmVhZCgpLnRoZW4oZnVuY3Rpb24oZykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgRiA9IGcuZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgRiA/IHcobCwgRCkgOiBBKCk7XG4gICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbihnKSB7XG4gICAgICAgICAgICAgICAgICAgIEUobCwgZyk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIEEoKTtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgdyhsLCB2KTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGQodik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEwobCwgZCwgdikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgRShsLCB2KTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGQodik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihsLCBkKSB7XG4gICAgICAgICAgICByZXR1cm4gRWUud2l0aChDZS5zZXRTcGFuKEVlLmFjdGl2ZSgpLCBoKSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuLl9hZGRIZWFkZXJzKGMsIHUpLCBuLl90YXNrc0NvdW50KyssIHIuYXBwbHkoZiwgYyBpbnN0YW5jZW9mIFJlcXVlc3QgPyBbY10gOiBbdSwgY10pLnRoZW4oTS5iaW5kKGYsIGgsIGwpLCBMLmJpbmQoZiwgaCwgZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0sIG8ucHJvdG90eXBlLl9hcHBseUF0dHJpYnV0ZXNBZnRlckZldGNoID0gZnVuY3Rpb24oZSwgciwgbikge1xuICAgICAgdmFyIHQgPSB0aGlzLCBpID0gdGhpcy5nZXRDb25maWcoKS5hcHBseUN1c3RvbUF0dHJpYnV0ZXNPblNwYW47XG4gICAgICBpICYmIEYoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpKGUsIHIsIG4pO1xuICAgICAgfSwgZnVuY3Rpb24ocykge1xuICAgICAgICBzICYmIHQuX2RpYWcuZXJyb3IoXCJhcHBseUN1c3RvbUF0dHJpYnV0ZXNPblNwYW5cIiwgcyk7XG4gICAgICB9LCAhMCk7XG4gICAgfSwgby5wcm90b3R5cGUuX3ByZXBhcmVTcGFuRGF0YSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHZhciByID0gcF8oKSwgbiA9IFtdO1xuICAgICAgaWYgKHR5cGVvZiBQZXJmb3JtYW5jZU9ic2VydmVyICE9IFwiZnVuY3Rpb25cIilcbiAgICAgICAgcmV0dXJuIHsgZW50cmllczogbiwgc3RhcnRUaW1lOiByLCBzcGFuVXJsOiBlIH07XG4gICAgICB2YXIgdCA9IG5ldyBQZXJmb3JtYW5jZU9ic2VydmVyKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgdmFyIHMgPSBpLmdldEVudHJpZXMoKTtcbiAgICAgICAgcy5mb3JFYWNoKGZ1bmN0aW9uKGYpIHtcbiAgICAgICAgICBmLmluaXRpYXRvclR5cGUgPT09IFwiZmV0Y2hcIiAmJiBmLm5hbWUgPT09IGUgJiYgbi5wdXNoKGYpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHQub2JzZXJ2ZSh7XG4gICAgICAgIGVudHJ5VHlwZXM6IFtcInJlc291cmNlXCJdXG4gICAgICB9KSwgeyBlbnRyaWVzOiBuLCBvYnNlcnZlcjogdCwgc3RhcnRUaW1lOiByLCBzcGFuVXJsOiBlIH07XG4gICAgfSwgby5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoSCkge1xuICAgICAgICB0aGlzLl9kaWFnLndhcm4oXCJ0aGlzIGluc3RydW1lbnRhdGlvbiBpcyBpbnRlbmRlZCBmb3Igd2ViIHVzYWdlIG9ubHksIGl0IGRvZXMgbm90IGluc3RydW1lbnQgTm9kZS5qcydzIGZldGNoKClcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEgkMShmZXRjaCkgJiYgKHRoaXMuX3Vud3JhcChsLCBcImZldGNoXCIpLCB0aGlzLl9kaWFnLmRlYnVnKFwicmVtb3ZpbmcgcHJldmlvdXMgcGF0Y2ggZm9yIGNvbnN0cnVjdG9yXCIpKSwgdGhpcy5fd3JhcChsLCBcImZldGNoXCIsIHRoaXMuX3BhdGNoQ29uc3RydWN0b3IoKSk7XG4gICAgfSwgby5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgSCB8fCAodGhpcy5fdW53cmFwKGwsIFwiZmV0Y2hcIiksIHRoaXMuX3VzZWRSZXNvdXJjZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKSk7XG4gICAgfSwgbztcbiAgfShZKVxuKTtcblxuZXhwb3J0IHsgYmUgYXMgRmV0Y2hJbnN0cnVtZW50YXRpb24gfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLEtBQUFBLFNBQVM7QUFDbEIsU0FBUyxLQUFLQyxHQUFJLEtBQUtDLEdBQUksS0FBS0MsR0FBSSxLQUFLQyxHQUFJLEtBQUtDLEdBQUksS0FBS0MsR0FBSSxLQUFLQyxHQUFJLEtBQUtDLEdBQUksS0FBS0MsR0FBSSxLQUFLQyxHQUFJLEtBQUFDLFNBQVM7QUFDNUcsU0FBUyxLQUFBQyxHQUFHLEtBQUtDLEdBQUssS0FBQUMsU0FBUztBQUMvQixTQUFTLEtBQUFDLFNBQVM7QUFDbEIsU0FBUyxLQUFBQyxHQUFHLEtBQUFDLEdBQUcsS0FBQUMsR0FBRyxLQUFBQyxHQUFHLEtBQUtDLFVBQVc7QUFDckMsU0FBUyxLQUFLQyxHQUFJLEtBQUtDLEdBQUksS0FBS0MsVUFBVTtBQUUxQyxJQUFJQztBQUFBLENBQ0gsU0FBU0MsR0FBRztBQUNYLEVBQUFBLEVBQUUsWUFBWSxhQUFhQSxFQUFFLGtCQUFrQixtQkFBbUJBLEVBQUUsbUJBQW1CO0FBQ3pGLEdBQUdELE1BQU1BLElBQUksQ0FBQyxFQUFFO0FBQ2hCLElBQUlFLEtBQUssU0FBU0QsR0FBR0UsR0FBR0MsR0FBRzVCLEdBQUc7QUFDNUIsV0FBUzZCLEVBQUVDLEdBQUc7QUFDWixXQUFPQSxhQUFhRixJQUFJRSxJQUFJLElBQUlGLEVBQUUsU0FBU0csR0FBRztBQUM1QyxNQUFBQSxFQUFFRCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFDSDtBQUNBLFNBQU8sS0FBS0YsTUFBTUEsSUFBSSxVQUFVLFNBQVNFLEdBQUdDLEdBQUc7QUFDN0MsYUFBU1osRUFBRWEsR0FBRztBQUNaLFVBQUk7QUFDRixVQUFFaEMsRUFBRSxLQUFLZ0MsQ0FB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QUN6QixDQUFDLEdBQUcsRUFBRSxTQUFTRCxHQUFHLFVBQVVDLEdBQUcsV0FBVzlCLEdBQUcsU0FBUzRCLEVBQUU7QUFBQSxJQUMxRCxHQUFHRCxFQUFFLFVBQVUsU0FBUyxXQUFXO0FBQ2pDLFVBQUl3QixHQUFHO0FBQ0wsYUFBSyxNQUFNLEtBQUssK0ZBQStGO0FBQy9HO0FBQUEsTUFDRjtBQUNBLE1BQUF0QyxFQUFJLEtBQUssTUFBTSxLQUFLLFFBQVFFLEdBQUcsT0FBTyxHQUFHLEtBQUssTUFBTSxNQUFNLHlDQUF5QyxJQUFJLEtBQUssTUFBTUEsR0FBRyxTQUFTLEtBQUssa0JBQWtCLENBQUM7QUFBQSxJQUN4SixHQUFHWSxFQUFFLFVBQVUsVUFBVSxXQUFXO0FBQ2xDLE1BQUF3QixNQUFNLEtBQUssUUFBUXBDLEdBQUcsT0FBTyxHQUFHLEtBQUssaUJBQWlDLG9CQUFJLFFBQVE7QUFBQSxJQUNwRixHQUFHWTtBQUFBLEVBQ0wsRUFBRWIsQ0FBQztBQUFBOyIsCiAgIm5hbWVzIjogWyJyIiwgImpBIiwgInFBIiwgIlpBIiwgInpBIiwgInlfIiwgIlplIiwgIlFBIiwgInhBIiwgInBfIiwgIlNyIiwgIk8iLCAiRiIsICJIJDEiLCAiWSIsICJsIiwgIlQiLCAieCIsICJSIiwgInMiLCAiYiQxIiwgIkNlIiwgIkVlIiwgIkdlIiwgInkiLCAiYSIsICJuZSIsICJvIiwgImUiLCAibiIsICJ0IiwgImkiLCAiYyIsICJoIiwgImYiLCAiYWUiLCAiaWUiLCAib2UiLCAiVSIsICJzZSIsICJ1ZSIsICJmZSIsICJiIiwgImxlIiwgImNlIiwgImsiLCAiZGUiLCAiaGUiLCAicGUiLCAiUyIsICJ2ZSIsICJIIiwgImJlIiwgInUiLCAibSIsICJFIiwgImQiLCAiTSIsICJ2IiwgImoiLCAiRCIsICJCIiwgIkEiLCAiZyIsICJMIl0KfQo=