@getopenpay/openpay-js-react 0.5.13 → 0.5.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/{ExportResult-B-YLKMaU-DKI4wi_s.js → ExportResult-BacsqwKA-wgTHEn_9.js} +1 -1
- package/dist/Resource-C_JyOUi0-DCzIGxs8.js +176 -0
- package/dist/SimpleSpanProcessor-DsaymkqA-CtD-GEtk.js +910 -0
- package/dist/_commonjsHelpers-CdLE1o9f-ChUIkuR8.js +30 -0
- package/dist/detect-resources-WIF4Hgfd-BW23wWaP.js +862 -0
- package/dist/diag-api-DbLQG6Cy-7Q64bfX9.js +6 -0
- package/dist/index-0_SuCli2-B5_tBBpx.js +430 -0
- package/dist/index-3-QFb-PY-DJRVxNSq.js +127 -0
- package/dist/index-B2hBQXxN-CgWoAORq.js +6 -0
- package/dist/index-BJ3-FtuX-DlTusXVc.js +28 -0
- package/dist/index-CDEhufnp-CDtO0j1l.js +18 -0
- package/dist/index-CV8wT6Y2-Bh-lYVds.js +6718 -0
- package/dist/index-DIoaqP4_-Cs74t_lP.js +1012 -0
- package/dist/index-DJhVQsLX-BiIZL-r4.js +147 -0
- package/dist/index-Din5I5pT-Be1fPmsi.js +1613 -0
- package/dist/index-nPWqtn7T.js +9357 -0
- package/dist/index.d.ts +27 -3
- package/dist/index.js +8 -8
- package/dist/lifecycle-D1BdEbZs-BvuQx__u.js +119 -0
- package/dist/{metrics-api-CjClvcGq-6EkvC0Vu.js → metrics-api-B_K2nQRV-Be59r2AI.js} +13 -13
- package/dist/sdk-info-ChuKu8zW-BkU0NT3O.js +285 -0
- package/dist/suppress-tracing-i166ZvAf-D2QqEK4Q.js +17 -0
- package/dist/url-D2-xNTDs-BLiqCwPG.js +798 -0
- package/dist/utils-BFjwGsZE-dHVj8huE.js +101 -0
- package/dist/utils-Blz-BInC-461m4Gx4.js +270 -0
- package/dist/utils-De78ey-v-ChjePi4C.js +12 -0
- package/package.json +5 -5
- package/dist/Resource-DU8lz5nK-f9bWvnAX.js +0 -176
- package/dist/SimpleSpanProcessor-D4o7GVOy-DpCPAoD4.js +0 -957
- package/dist/_commonjsHelpers-f76XedMs-N1iNS-iQ.js +0 -25
- package/dist/detect-resources-BdKpXJiP-CfDa2zUe.js +0 -854
- package/dist/diag-api-BULvjcnf-wApEkhEs.js +0 -6
- package/dist/index-4UPqMVqQ-DCeyc23Q.js +0 -130
- package/dist/index-9327QF9E-BXcv-nz4.js +0 -150
- package/dist/index-B8KNl7hX-OTKFOpF1.js +0 -330
- package/dist/index-BijNWqB5-DtEGCFUP.js +0 -19
- package/dist/index-BpGYhZEi-CF7SQTH9.js +0 -431
- package/dist/index-C_jJ8Ras-Am55lrIO.js +0 -830
- package/dist/index-Ckm8dQsp.js +0 -9421
- package/dist/index-DDD9ZmWN-9ZgLQwoL.js +0 -6685
- package/dist/index-DvTM7FZf-Dk988eEW.js +0 -1593
- package/dist/index-fSSJoQdN-Deksu5OU.js +0 -52
- package/dist/lifecycle-BjQ-7GLm-BmSFW2aE.js +0 -119
- package/dist/sdk-info-X2iq-j1R-DlVOaDY0.js +0 -484
- package/dist/url-Df564C3x-vH-pPPEB.js +0 -797
- package/dist/utils-CP06QJVn-vlt5CxXW.js +0 -142
- package/dist/utils-CX5YT7yI-BbTNmH0Z.js +0 -14
- package/dist/utils-DbY0X7Y6-Dm9I3b8L.js +0 -381
|
@@ -0,0 +1,910 @@
|
|
|
1
|
+
import { B as b, M as _, T as E, b as nt, e as ot, w as it, y as st, d as at } from "./index-nPWqtn7T.js";
|
|
2
|
+
import { r as l } from "./diag-api-DbLQG6Cy-7Q64bfX9.js";
|
|
3
|
+
import { dD as j, y as ut, dE as V, dF as ct, dG as I, p as pt, O as x, dH as lt, dI as ht, at as M, av as N, dJ as dt, au as ft } from "./url-D2-xNTDs-BLiqCwPG.js";
|
|
4
|
+
import { E as f, O as P, v as _t, V as mt, Z as vt, f as Y, S as St, n as yt, Q as C, l as Q, c as gt, d as Et, p as Tt, a as bt, b as v, e as Lt } from "./index-DIoaqP4_-Cs74t_lP.js";
|
|
5
|
+
import { u as Pt, a as wt } from "./suppress-tracing-i166ZvAf-D2QqEK4Q.js";
|
|
6
|
+
import { R as H } from "./Resource-C_JyOUi0-DCzIGxs8.js";
|
|
7
|
+
import { a as U } from "./ExportResult-BacsqwKA-wgTHEn_9.js";
|
|
8
|
+
var xt = "exception", B = function() {
|
|
9
|
+
return B = Object.assign || function(e) {
|
|
10
|
+
for (var t, r = 1, n = arguments.length; r < n; r++) {
|
|
11
|
+
t = arguments[r];
|
|
12
|
+
for (var i in t) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
|
|
13
|
+
}
|
|
14
|
+
return e;
|
|
15
|
+
}, B.apply(this, arguments);
|
|
16
|
+
}, At = function(e) {
|
|
17
|
+
var t = typeof Symbol == "function" && Symbol.iterator, r = t && e[t], n = 0;
|
|
18
|
+
if (r) return r.call(e);
|
|
19
|
+
if (e && typeof e.length == "number") return {
|
|
20
|
+
next: function() {
|
|
21
|
+
return e && n >= e.length && (e = void 0), { value: e && e[n++], done: !e };
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
25
|
+
}, X = function(e, t) {
|
|
26
|
+
var r = typeof Symbol == "function" && e[Symbol.iterator];
|
|
27
|
+
if (!r) return e;
|
|
28
|
+
var n = r.call(e), i, o = [], s;
|
|
29
|
+
try {
|
|
30
|
+
for (; (t === void 0 || t-- > 0) && !(i = n.next()).done; ) o.push(i.value);
|
|
31
|
+
} catch (a) {
|
|
32
|
+
s = { error: a };
|
|
33
|
+
} finally {
|
|
34
|
+
try {
|
|
35
|
+
i && !i.done && (r = n.return) && r.call(n);
|
|
36
|
+
} finally {
|
|
37
|
+
if (s) throw s.error;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return o;
|
|
41
|
+
}, Ot = function(e, t, r) {
|
|
42
|
+
if (arguments.length === 2) for (var n = 0, i = t.length, o; n < i; n++)
|
|
43
|
+
(o || !(n in t)) && (o || (o = Array.prototype.slice.call(t, 0, n)), o[n] = t[n]);
|
|
44
|
+
return e.concat(o || Array.prototype.slice.call(t));
|
|
45
|
+
}, Ct = (
|
|
46
|
+
/** @class */
|
|
47
|
+
function() {
|
|
48
|
+
function e(t, r, n, i, o, s, a, c, u, p) {
|
|
49
|
+
a === void 0 && (a = []), this.attributes = {}, this.links = [], this.events = [], this._droppedAttributesCount = 0, this._droppedEventsCount = 0, this._droppedLinksCount = 0, this.status = {
|
|
50
|
+
code: it.UNSET
|
|
51
|
+
}, this.endTime = [0, 0], this._ended = !1, this._duration = [-1, -1], this.name = n, this._spanContext = i, this.parentSpanId = s, this.kind = o, this.links = a;
|
|
52
|
+
var h = Date.now();
|
|
53
|
+
this._performanceStartTime = I.now(), this._performanceOffset = h - (this._performanceStartTime + dt()), this._startTimeProvided = c != null, this.startTime = this._getTime(c ?? h), this.resource = t.resource, this.instrumentationLibrary = t.instrumentationLibrary, this._spanLimits = t.getSpanLimits(), this._attributeValueLengthLimit = this._spanLimits.attributeValueLengthLimit || 0, p != null && this.setAttributes(p), this._spanProcessor = t.getActiveSpanProcessor(), this._spanProcessor.onStart(this, r);
|
|
54
|
+
}
|
|
55
|
+
return e.prototype.spanContext = function() {
|
|
56
|
+
return this._spanContext;
|
|
57
|
+
}, e.prototype.setAttribute = function(t, r) {
|
|
58
|
+
return r == null || this._isSpanEnded() ? this : t.length === 0 ? (l.warn("Invalid attribute key: " + t), this) : bt(r) ? Object.keys(this.attributes).length >= this._spanLimits.attributeCountLimit && !Object.prototype.hasOwnProperty.call(this.attributes, t) ? (this._droppedAttributesCount++, this) : (this.attributes[t] = this._truncateToSize(r), this) : (l.warn("Invalid attribute value set for key: " + t), this);
|
|
59
|
+
}, e.prototype.setAttributes = function(t) {
|
|
60
|
+
var r, n;
|
|
61
|
+
try {
|
|
62
|
+
for (var i = At(Object.entries(t)), o = i.next(); !o.done; o = i.next()) {
|
|
63
|
+
var s = X(o.value, 2), a = s[0], c = s[1];
|
|
64
|
+
this.setAttribute(a, c);
|
|
65
|
+
}
|
|
66
|
+
} catch (u) {
|
|
67
|
+
r = { error: u };
|
|
68
|
+
} finally {
|
|
69
|
+
try {
|
|
70
|
+
o && !o.done && (n = i.return) && n.call(i);
|
|
71
|
+
} finally {
|
|
72
|
+
if (r) throw r.error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return this;
|
|
76
|
+
}, e.prototype.addEvent = function(t, r, n) {
|
|
77
|
+
if (this._isSpanEnded())
|
|
78
|
+
return this;
|
|
79
|
+
if (this._spanLimits.eventCountLimit === 0)
|
|
80
|
+
return l.warn("No events allowed."), this._droppedEventsCount++, this;
|
|
81
|
+
this.events.length >= this._spanLimits.eventCountLimit && (this._droppedEventsCount === 0 && l.debug("Dropping extra events."), this.events.shift(), this._droppedEventsCount++), V(r) && (V(n) || (n = r), r = void 0);
|
|
82
|
+
var i = C(r);
|
|
83
|
+
return this.events.push({
|
|
84
|
+
name: t,
|
|
85
|
+
attributes: i,
|
|
86
|
+
time: this._getTime(n),
|
|
87
|
+
droppedAttributesCount: 0
|
|
88
|
+
}), this;
|
|
89
|
+
}, e.prototype.addLink = function(t) {
|
|
90
|
+
return this.links.push(t), this;
|
|
91
|
+
}, e.prototype.addLinks = function(t) {
|
|
92
|
+
var r;
|
|
93
|
+
return (r = this.links).push.apply(r, Ot([], X(t), !1)), this;
|
|
94
|
+
}, e.prototype.setStatus = function(t) {
|
|
95
|
+
return this._isSpanEnded() ? this : (this.status = B({}, t), this.status.message != null && typeof t.message != "string" && (l.warn("Dropping invalid status.message of type '" + typeof t.message + "', expected 'string'"), delete this.status.message), this);
|
|
96
|
+
}, e.prototype.updateName = function(t) {
|
|
97
|
+
return this._isSpanEnded() ? this : (this.name = t, this);
|
|
98
|
+
}, e.prototype.end = function(t) {
|
|
99
|
+
if (this._isSpanEnded()) {
|
|
100
|
+
l.error(this.name + " " + this._spanContext.traceId + "-" + this._spanContext.spanId + " - You can only call end() on a span once.");
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
this._ended = !0, this.endTime = this._getTime(t), this._duration = ct(this.startTime, this.endTime), this._duration[0] < 0 && (l.warn("Inconsistent start and end time, startTime > endTime. Setting span duration to 0ms.", this.startTime, this.endTime), this.endTime = this.startTime.slice(), this._duration = [0, 0]), this._droppedEventsCount > 0 && l.warn("Dropped " + this._droppedEventsCount + " events because eventCountLimit reached"), this._spanProcessor.onEnd(this);
|
|
104
|
+
}, e.prototype._getTime = function(t) {
|
|
105
|
+
if (typeof t == "number" && t <= I.now())
|
|
106
|
+
return pt(t + this._performanceOffset);
|
|
107
|
+
if (typeof t == "number")
|
|
108
|
+
return x(t);
|
|
109
|
+
if (t instanceof Date)
|
|
110
|
+
return x(t.getTime());
|
|
111
|
+
if (lt(t))
|
|
112
|
+
return t;
|
|
113
|
+
if (this._startTimeProvided)
|
|
114
|
+
return x(Date.now());
|
|
115
|
+
var r = I.now() - this._performanceStartTime;
|
|
116
|
+
return ht(this.startTime, x(r));
|
|
117
|
+
}, e.prototype.isRecording = function() {
|
|
118
|
+
return this._ended === !1;
|
|
119
|
+
}, e.prototype.recordException = function(t, r) {
|
|
120
|
+
var n = {};
|
|
121
|
+
typeof t == "string" ? n[N] = t : t && (t.code ? n[M] = t.code.toString() : t.name && (n[M] = t.name), t.message && (n[N] = t.message), t.stack && (n[ft] = t.stack)), n[M] || n[N] ? this.addEvent(xt, n, r) : l.warn("Failed to record an exception " + t);
|
|
122
|
+
}, Object.defineProperty(e.prototype, "duration", {
|
|
123
|
+
get: function() {
|
|
124
|
+
return this._duration;
|
|
125
|
+
},
|
|
126
|
+
enumerable: !1,
|
|
127
|
+
configurable: !0
|
|
128
|
+
}), Object.defineProperty(e.prototype, "ended", {
|
|
129
|
+
get: function() {
|
|
130
|
+
return this._ended;
|
|
131
|
+
},
|
|
132
|
+
enumerable: !1,
|
|
133
|
+
configurable: !0
|
|
134
|
+
}), Object.defineProperty(e.prototype, "droppedAttributesCount", {
|
|
135
|
+
get: function() {
|
|
136
|
+
return this._droppedAttributesCount;
|
|
137
|
+
},
|
|
138
|
+
enumerable: !1,
|
|
139
|
+
configurable: !0
|
|
140
|
+
}), Object.defineProperty(e.prototype, "droppedEventsCount", {
|
|
141
|
+
get: function() {
|
|
142
|
+
return this._droppedEventsCount;
|
|
143
|
+
},
|
|
144
|
+
enumerable: !1,
|
|
145
|
+
configurable: !0
|
|
146
|
+
}), Object.defineProperty(e.prototype, "droppedLinksCount", {
|
|
147
|
+
get: function() {
|
|
148
|
+
return this._droppedLinksCount;
|
|
149
|
+
},
|
|
150
|
+
enumerable: !1,
|
|
151
|
+
configurable: !0
|
|
152
|
+
}), e.prototype._isSpanEnded = function() {
|
|
153
|
+
return this._ended && l.warn("Can not execute the operation on ended Span {traceId: " + this._spanContext.traceId + ", spanId: " + this._spanContext.spanId + "}"), this._ended;
|
|
154
|
+
}, e.prototype._truncateToLimitUtil = function(t, r) {
|
|
155
|
+
return t.length <= r ? t : t.substring(0, r);
|
|
156
|
+
}, e.prototype._truncateToSize = function(t) {
|
|
157
|
+
var r = this, n = this._attributeValueLengthLimit;
|
|
158
|
+
return n <= 0 ? (l.warn("Attribute value limit must be positive, got " + n), t) : typeof t == "string" ? this._truncateToLimitUtil(t, n) : Array.isArray(t) ? t.map(function(i) {
|
|
159
|
+
return typeof i == "string" ? r._truncateToLimitUtil(i, n) : i;
|
|
160
|
+
}) : t;
|
|
161
|
+
}, e;
|
|
162
|
+
}()
|
|
163
|
+
), L;
|
|
164
|
+
(function(e) {
|
|
165
|
+
e[e.NOT_RECORD = 0] = "NOT_RECORD", e[e.RECORD = 1] = "RECORD", e[e.RECORD_AND_SAMPLED = 2] = "RECORD_AND_SAMPLED";
|
|
166
|
+
})(L || (L = {}));
|
|
167
|
+
var R = (
|
|
168
|
+
/** @class */
|
|
169
|
+
function() {
|
|
170
|
+
function e() {
|
|
171
|
+
}
|
|
172
|
+
return e.prototype.shouldSample = function() {
|
|
173
|
+
return {
|
|
174
|
+
decision: L.NOT_RECORD
|
|
175
|
+
};
|
|
176
|
+
}, e.prototype.toString = function() {
|
|
177
|
+
return "AlwaysOffSampler";
|
|
178
|
+
}, e;
|
|
179
|
+
}()
|
|
180
|
+
), T = (
|
|
181
|
+
/** @class */
|
|
182
|
+
function() {
|
|
183
|
+
function e() {
|
|
184
|
+
}
|
|
185
|
+
return e.prototype.shouldSample = function() {
|
|
186
|
+
return {
|
|
187
|
+
decision: L.RECORD_AND_SAMPLED
|
|
188
|
+
};
|
|
189
|
+
}, e.prototype.toString = function() {
|
|
190
|
+
return "AlwaysOnSampler";
|
|
191
|
+
}, e;
|
|
192
|
+
}()
|
|
193
|
+
), D = (
|
|
194
|
+
/** @class */
|
|
195
|
+
function() {
|
|
196
|
+
function e(t) {
|
|
197
|
+
var r, n, i, o;
|
|
198
|
+
this._root = t.root, this._root || (f(new Error("ParentBasedSampler must have a root sampler configured")), this._root = new T()), this._remoteParentSampled = (r = t.remoteParentSampled) !== null && r !== void 0 ? r : new T(), this._remoteParentNotSampled = (n = t.remoteParentNotSampled) !== null && n !== void 0 ? n : new R(), this._localParentSampled = (i = t.localParentSampled) !== null && i !== void 0 ? i : new T(), this._localParentNotSampled = (o = t.localParentNotSampled) !== null && o !== void 0 ? o : new R();
|
|
199
|
+
}
|
|
200
|
+
return e.prototype.shouldSample = function(t, r, n, i, o, s) {
|
|
201
|
+
var a = _.getSpanContext(t);
|
|
202
|
+
return !a || !st(a) ? this._root.shouldSample(t, r, n, i, o, s) : a.isRemote ? a.traceFlags & b.SAMPLED ? this._remoteParentSampled.shouldSample(t, r, n, i, o, s) : this._remoteParentNotSampled.shouldSample(t, r, n, i, o, s) : a.traceFlags & b.SAMPLED ? this._localParentSampled.shouldSample(t, r, n, i, o, s) : this._localParentNotSampled.shouldSample(t, r, n, i, o, s);
|
|
203
|
+
}, e.prototype.toString = function() {
|
|
204
|
+
return "ParentBased{root=" + this._root.toString() + ", remoteParentSampled=" + this._remoteParentSampled.toString() + ", remoteParentNotSampled=" + this._remoteParentNotSampled.toString() + ", localParentSampled=" + this._localParentSampled.toString() + ", localParentNotSampled=" + this._localParentNotSampled.toString() + "}";
|
|
205
|
+
}, e;
|
|
206
|
+
}()
|
|
207
|
+
), q = (
|
|
208
|
+
/** @class */
|
|
209
|
+
function() {
|
|
210
|
+
function e(t) {
|
|
211
|
+
t === void 0 && (t = 0), this._ratio = t, this._ratio = this._normalize(t), this._upperBound = Math.floor(this._ratio * 4294967295);
|
|
212
|
+
}
|
|
213
|
+
return e.prototype.shouldSample = function(t, r) {
|
|
214
|
+
return {
|
|
215
|
+
decision: at(r) && this._accumulate(r) < this._upperBound ? L.RECORD_AND_SAMPLED : L.NOT_RECORD
|
|
216
|
+
};
|
|
217
|
+
}, e.prototype.toString = function() {
|
|
218
|
+
return "TraceIdRatioBased{" + this._ratio + "}";
|
|
219
|
+
}, e.prototype._normalize = function(t) {
|
|
220
|
+
return typeof t != "number" || isNaN(t) ? 0 : t >= 1 ? 1 : t <= 0 ? 0 : t;
|
|
221
|
+
}, e.prototype._accumulate = function(t) {
|
|
222
|
+
for (var r = 0, n = 0; n < t.length / 8; n++) {
|
|
223
|
+
var i = n * 8, o = parseInt(t.slice(i, i + 8), 16);
|
|
224
|
+
r = (r ^ o) >>> 0;
|
|
225
|
+
}
|
|
226
|
+
return r;
|
|
227
|
+
}, e;
|
|
228
|
+
}()
|
|
229
|
+
), Rt = v.AlwaysOn, g = 1;
|
|
230
|
+
function J() {
|
|
231
|
+
var e = P();
|
|
232
|
+
return {
|
|
233
|
+
sampler: $(e),
|
|
234
|
+
forceFlushTimeoutMillis: 3e4,
|
|
235
|
+
generalLimits: {
|
|
236
|
+
attributeValueLengthLimit: e.OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT,
|
|
237
|
+
attributeCountLimit: e.OTEL_ATTRIBUTE_COUNT_LIMIT
|
|
238
|
+
},
|
|
239
|
+
spanLimits: {
|
|
240
|
+
attributeValueLengthLimit: e.OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT,
|
|
241
|
+
attributeCountLimit: e.OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT,
|
|
242
|
+
linkCountLimit: e.OTEL_SPAN_LINK_COUNT_LIMIT,
|
|
243
|
+
eventCountLimit: e.OTEL_SPAN_EVENT_COUNT_LIMIT,
|
|
244
|
+
attributePerEventCountLimit: e.OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT,
|
|
245
|
+
attributePerLinkCountLimit: e.OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT
|
|
246
|
+
},
|
|
247
|
+
mergeResourceWithDefaults: !0
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
function $(e) {
|
|
251
|
+
switch (e === void 0 && (e = P()), e.OTEL_TRACES_SAMPLER) {
|
|
252
|
+
case v.AlwaysOn:
|
|
253
|
+
return new T();
|
|
254
|
+
case v.AlwaysOff:
|
|
255
|
+
return new R();
|
|
256
|
+
case v.ParentBasedAlwaysOn:
|
|
257
|
+
return new D({
|
|
258
|
+
root: new T()
|
|
259
|
+
});
|
|
260
|
+
case v.ParentBasedAlwaysOff:
|
|
261
|
+
return new D({
|
|
262
|
+
root: new R()
|
|
263
|
+
});
|
|
264
|
+
case v.TraceIdRatio:
|
|
265
|
+
return new q(Z(e));
|
|
266
|
+
case v.ParentBasedTraceIdRatio:
|
|
267
|
+
return new D({
|
|
268
|
+
root: new q(Z(e))
|
|
269
|
+
});
|
|
270
|
+
default:
|
|
271
|
+
return l.error('OTEL_TRACES_SAMPLER value "' + e.OTEL_TRACES_SAMPLER + " invalid, defaulting to " + Rt + '".'), new T();
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
function Z(e) {
|
|
275
|
+
if (e.OTEL_TRACES_SAMPLER_ARG === void 0 || e.OTEL_TRACES_SAMPLER_ARG === "")
|
|
276
|
+
return l.error("OTEL_TRACES_SAMPLER_ARG is blank, defaulting to " + g + "."), g;
|
|
277
|
+
var t = Number(e.OTEL_TRACES_SAMPLER_ARG);
|
|
278
|
+
return isNaN(t) ? (l.error("OTEL_TRACES_SAMPLER_ARG=" + e.OTEL_TRACES_SAMPLER_ARG + " was given, but it is invalid, defaulting to " + g + "."), g) : t < 0 || t > 1 ? (l.error("OTEL_TRACES_SAMPLER_ARG=" + e.OTEL_TRACES_SAMPLER_ARG + " was given, but it is out of range ([0..1]), defaulting to " + g + "."), g) : t;
|
|
279
|
+
}
|
|
280
|
+
function It(e) {
|
|
281
|
+
var t = {
|
|
282
|
+
sampler: $()
|
|
283
|
+
}, r = J(), n = Object.assign({}, r, t, e);
|
|
284
|
+
return n.generalLimits = Object.assign({}, r.generalLimits, e.generalLimits || {}), n.spanLimits = Object.assign({}, r.spanLimits, e.spanLimits || {}), n;
|
|
285
|
+
}
|
|
286
|
+
function Mt(e) {
|
|
287
|
+
var t, r, n, i, o, s, a, c, u, p, h, d, y = Object.assign({}, e.spanLimits), m = gt();
|
|
288
|
+
return y.attributeCountLimit = (s = (o = (i = (r = (t = e.spanLimits) === null || t === void 0 ? void 0 : t.attributeCountLimit) !== null && r !== void 0 ? r : (n = e.generalLimits) === null || n === void 0 ? void 0 : n.attributeCountLimit) !== null && i !== void 0 ? i : m.OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT) !== null && o !== void 0 ? o : m.OTEL_ATTRIBUTE_COUNT_LIMIT) !== null && s !== void 0 ? s : Et, y.attributeValueLengthLimit = (d = (h = (p = (c = (a = e.spanLimits) === null || a === void 0 ? void 0 : a.attributeValueLengthLimit) !== null && c !== void 0 ? c : (u = e.generalLimits) === null || u === void 0 ? void 0 : u.attributeValueLengthLimit) !== null && p !== void 0 ? p : m.OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT) !== null && h !== void 0 ? h : m.OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT) !== null && d !== void 0 ? d : Tt, Object.assign({}, e, { spanLimits: y });
|
|
289
|
+
}
|
|
290
|
+
var Nt = (
|
|
291
|
+
/** @class */
|
|
292
|
+
function() {
|
|
293
|
+
function e(t, r) {
|
|
294
|
+
this._exporter = t, this._isExporting = !1, this._finishedSpans = [], this._droppedSpansCount = 0;
|
|
295
|
+
var n = P();
|
|
296
|
+
this._maxExportBatchSize = typeof r?.maxExportBatchSize == "number" ? r.maxExportBatchSize : n.OTEL_BSP_MAX_EXPORT_BATCH_SIZE, this._maxQueueSize = typeof r?.maxQueueSize == "number" ? r.maxQueueSize : n.OTEL_BSP_MAX_QUEUE_SIZE, this._scheduledDelayMillis = typeof r?.scheduledDelayMillis == "number" ? r.scheduledDelayMillis : n.OTEL_BSP_SCHEDULE_DELAY, this._exportTimeoutMillis = typeof r?.exportTimeoutMillis == "number" ? r.exportTimeoutMillis : n.OTEL_BSP_EXPORT_TIMEOUT, this._shutdownOnce = new Y(this._shutdown, this), this._maxExportBatchSize > this._maxQueueSize && (l.warn("BatchSpanProcessor: maxExportBatchSize must be smaller or equal to maxQueueSize, setting maxExportBatchSize to match maxQueueSize"), this._maxExportBatchSize = this._maxQueueSize);
|
|
297
|
+
}
|
|
298
|
+
return e.prototype.forceFlush = function() {
|
|
299
|
+
return this._shutdownOnce.isCalled ? this._shutdownOnce.promise : this._flushAll();
|
|
300
|
+
}, e.prototype.onStart = function(t, r) {
|
|
301
|
+
}, e.prototype.onEnd = function(t) {
|
|
302
|
+
this._shutdownOnce.isCalled || (t.spanContext().traceFlags & b.SAMPLED) !== 0 && this._addToBuffer(t);
|
|
303
|
+
}, e.prototype.shutdown = function() {
|
|
304
|
+
return this._shutdownOnce.call();
|
|
305
|
+
}, e.prototype._shutdown = function() {
|
|
306
|
+
var t = this;
|
|
307
|
+
return Promise.resolve().then(function() {
|
|
308
|
+
return t.onShutdown();
|
|
309
|
+
}).then(function() {
|
|
310
|
+
return t._flushAll();
|
|
311
|
+
}).then(function() {
|
|
312
|
+
return t._exporter.shutdown();
|
|
313
|
+
});
|
|
314
|
+
}, e.prototype._addToBuffer = function(t) {
|
|
315
|
+
if (this._finishedSpans.length >= this._maxQueueSize) {
|
|
316
|
+
this._droppedSpansCount === 0 && l.debug("maxQueueSize reached, dropping spans"), this._droppedSpansCount++;
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
this._droppedSpansCount > 0 && (l.warn("Dropped " + this._droppedSpansCount + " spans because maxQueueSize reached"), this._droppedSpansCount = 0), this._finishedSpans.push(t), this._maybeStartTimer();
|
|
320
|
+
}, e.prototype._flushAll = function() {
|
|
321
|
+
var t = this;
|
|
322
|
+
return new Promise(function(r, n) {
|
|
323
|
+
for (var i = [], o = Math.ceil(t._finishedSpans.length / t._maxExportBatchSize), s = 0, a = o; s < a; s++)
|
|
324
|
+
i.push(t._flushOneBatch());
|
|
325
|
+
Promise.all(i).then(function() {
|
|
326
|
+
r();
|
|
327
|
+
}).catch(n);
|
|
328
|
+
});
|
|
329
|
+
}, e.prototype._flushOneBatch = function() {
|
|
330
|
+
var t = this;
|
|
331
|
+
return this._clearTimer(), this._finishedSpans.length === 0 ? Promise.resolve() : new Promise(function(r, n) {
|
|
332
|
+
var i = setTimeout(function() {
|
|
333
|
+
n(new Error("Timeout"));
|
|
334
|
+
}, t._exportTimeoutMillis);
|
|
335
|
+
E.with(Pt(E.active()), function() {
|
|
336
|
+
var o;
|
|
337
|
+
t._finishedSpans.length <= t._maxExportBatchSize ? (o = t._finishedSpans, t._finishedSpans = []) : o = t._finishedSpans.splice(0, t._maxExportBatchSize);
|
|
338
|
+
for (var s = function() {
|
|
339
|
+
return t._exporter.export(o, function(h) {
|
|
340
|
+
var d;
|
|
341
|
+
clearTimeout(i), h.code === U.SUCCESS ? r() : n((d = h.error) !== null && d !== void 0 ? d : new Error("BatchSpanProcessor: span export failed"));
|
|
342
|
+
});
|
|
343
|
+
}, a = null, c = 0, u = o.length; c < u; c++) {
|
|
344
|
+
var p = o[c];
|
|
345
|
+
p.resource.asyncAttributesPending && p.resource.waitForAsyncAttributes && (a ?? (a = []), a.push(p.resource.waitForAsyncAttributes()));
|
|
346
|
+
}
|
|
347
|
+
a === null ? s() : Promise.all(a).then(s, function(h) {
|
|
348
|
+
f(h), n(h);
|
|
349
|
+
});
|
|
350
|
+
});
|
|
351
|
+
});
|
|
352
|
+
}, e.prototype._maybeStartTimer = function() {
|
|
353
|
+
var t = this;
|
|
354
|
+
if (!this._isExporting) {
|
|
355
|
+
var r = function() {
|
|
356
|
+
t._isExporting = !0, t._flushOneBatch().finally(function() {
|
|
357
|
+
t._isExporting = !1, t._finishedSpans.length > 0 && (t._clearTimer(), t._maybeStartTimer());
|
|
358
|
+
}).catch(function(n) {
|
|
359
|
+
t._isExporting = !1, f(n);
|
|
360
|
+
});
|
|
361
|
+
};
|
|
362
|
+
if (this._finishedSpans.length >= this._maxExportBatchSize)
|
|
363
|
+
return r();
|
|
364
|
+
this._timer === void 0 && (this._timer = setTimeout(function() {
|
|
365
|
+
return r();
|
|
366
|
+
}, this._scheduledDelayMillis), St(this._timer));
|
|
367
|
+
}
|
|
368
|
+
}, e.prototype._clearTimer = function() {
|
|
369
|
+
this._timer !== void 0 && (clearTimeout(this._timer), this._timer = void 0);
|
|
370
|
+
}, e;
|
|
371
|
+
}()
|
|
372
|
+
), Dt = /* @__PURE__ */ function() {
|
|
373
|
+
var e = function(t, r) {
|
|
374
|
+
return e = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n, i) {
|
|
375
|
+
n.__proto__ = i;
|
|
376
|
+
} || function(n, i) {
|
|
377
|
+
for (var o in i) Object.prototype.hasOwnProperty.call(i, o) && (n[o] = i[o]);
|
|
378
|
+
}, e(t, r);
|
|
379
|
+
};
|
|
380
|
+
return function(t, r) {
|
|
381
|
+
if (typeof r != "function" && r !== null)
|
|
382
|
+
throw new TypeError("Class extends value " + String(r) + " is not a constructor or null");
|
|
383
|
+
e(t, r);
|
|
384
|
+
function n() {
|
|
385
|
+
this.constructor = t;
|
|
386
|
+
}
|
|
387
|
+
t.prototype = r === null ? Object.create(r) : (n.prototype = r.prototype, new n());
|
|
388
|
+
};
|
|
389
|
+
}(), Bt = (
|
|
390
|
+
/** @class */
|
|
391
|
+
function(e) {
|
|
392
|
+
Dt(t, e);
|
|
393
|
+
function t(r, n) {
|
|
394
|
+
var i = e.call(this, r, n) || this;
|
|
395
|
+
return i.onInit(n), i;
|
|
396
|
+
}
|
|
397
|
+
return t.prototype.onInit = function(r) {
|
|
398
|
+
var n = this;
|
|
399
|
+
r?.disableAutoFlushOnDocumentHide !== !0 && typeof document < "u" && (this._visibilityChangeListener = function() {
|
|
400
|
+
document.visibilityState === "hidden" && n.forceFlush().catch(function(i) {
|
|
401
|
+
f(i);
|
|
402
|
+
});
|
|
403
|
+
}, this._pageHideListener = function() {
|
|
404
|
+
n.forceFlush().catch(function(i) {
|
|
405
|
+
f(i);
|
|
406
|
+
});
|
|
407
|
+
}, document.addEventListener("visibilitychange", this._visibilityChangeListener), document.addEventListener("pagehide", this._pageHideListener));
|
|
408
|
+
}, t.prototype.onShutdown = function() {
|
|
409
|
+
typeof document < "u" && (this._visibilityChangeListener && document.removeEventListener("visibilitychange", this._visibilityChangeListener), this._pageHideListener && document.removeEventListener("pagehide", this._pageHideListener));
|
|
410
|
+
}, t;
|
|
411
|
+
}(Nt)
|
|
412
|
+
), Ut = 8, Ft = 16, kt = (
|
|
413
|
+
/** @class */
|
|
414
|
+
/* @__PURE__ */ function() {
|
|
415
|
+
function e() {
|
|
416
|
+
this.generateTraceId = K(Ft), this.generateSpanId = K(Ut);
|
|
417
|
+
}
|
|
418
|
+
return e;
|
|
419
|
+
}()
|
|
420
|
+
), A = Array(32);
|
|
421
|
+
function K(e) {
|
|
422
|
+
return function() {
|
|
423
|
+
for (var t = 0; t < e * 2; t++)
|
|
424
|
+
A[t] = Math.floor(Math.random() * 16) + 48, A[t] >= 58 && (A[t] += 39);
|
|
425
|
+
return String.fromCharCode.apply(null, A.slice(0, e * 2));
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
var zt = (
|
|
429
|
+
/** @class */
|
|
430
|
+
function() {
|
|
431
|
+
function e(t, r, n) {
|
|
432
|
+
this._tracerProvider = n;
|
|
433
|
+
var i = It(r);
|
|
434
|
+
this._sampler = i.sampler, this._generalLimits = i.generalLimits, this._spanLimits = i.spanLimits, this._idGenerator = r.idGenerator || new kt(), this.resource = n.resource, this.instrumentationLibrary = t;
|
|
435
|
+
}
|
|
436
|
+
return e.prototype.startSpan = function(t, r, n) {
|
|
437
|
+
var i, o, s;
|
|
438
|
+
r === void 0 && (r = {}), n === void 0 && (n = E.active()), r.root && (n = _.deleteSpan(n));
|
|
439
|
+
var a = _.getSpan(n);
|
|
440
|
+
if (wt(n)) {
|
|
441
|
+
l.debug("Instrumentation suppressed, returning Noop Span");
|
|
442
|
+
var c = _.wrapSpanContext(nt);
|
|
443
|
+
return c;
|
|
444
|
+
}
|
|
445
|
+
var u = a?.spanContext(), p = this._idGenerator.generateSpanId(), h, d, y;
|
|
446
|
+
!u || !_.isSpanContextValid(u) ? h = this._idGenerator.generateTraceId() : (h = u.traceId, d = u.traceState, y = u.spanId);
|
|
447
|
+
var m = (i = r.kind) !== null && i !== void 0 ? i : ot.INTERNAL, F = ((o = r.links) !== null && o !== void 0 ? o : []).map(function(G) {
|
|
448
|
+
return {
|
|
449
|
+
context: G.context,
|
|
450
|
+
attributes: C(G.attributes)
|
|
451
|
+
};
|
|
452
|
+
}), k = C(r.attributes), w = this._sampler.shouldSample(n, h, t, m, k, F);
|
|
453
|
+
d = (s = w.traceState) !== null && s !== void 0 ? s : d;
|
|
454
|
+
var tt = w.decision === Q.RECORD_AND_SAMPLED ? b.SAMPLED : b.NONE, z = { traceId: h, spanId: p, traceFlags: tt, traceState: d };
|
|
455
|
+
if (w.decision === Q.NOT_RECORD) {
|
|
456
|
+
l.debug("Recording is off, propagating context in a non-recording span");
|
|
457
|
+
var c = _.wrapSpanContext(z);
|
|
458
|
+
return c;
|
|
459
|
+
}
|
|
460
|
+
var et = C(Object.assign(k, w.attributes)), rt = new Ct(this, n, t, z, m, y, F, r.startTime, void 0, et);
|
|
461
|
+
return rt;
|
|
462
|
+
}, e.prototype.startActiveSpan = function(t, r, n, i) {
|
|
463
|
+
var o, s, a;
|
|
464
|
+
if (!(arguments.length < 2)) {
|
|
465
|
+
arguments.length === 2 ? a = r : arguments.length === 3 ? (o = r, a = n) : (o = r, s = n, a = i);
|
|
466
|
+
var c = s ?? E.active(), u = this.startSpan(t, o, c), p = _.setSpan(c, u);
|
|
467
|
+
return E.with(p, a, void 0, u);
|
|
468
|
+
}
|
|
469
|
+
}, e.prototype.getGeneralLimits = function() {
|
|
470
|
+
return this._generalLimits;
|
|
471
|
+
}, e.prototype.getSpanLimits = function() {
|
|
472
|
+
return this._spanLimits;
|
|
473
|
+
}, e.prototype.getActiveSpanProcessor = function() {
|
|
474
|
+
return this._tracerProvider.getActiveSpanProcessor();
|
|
475
|
+
}, e;
|
|
476
|
+
}()
|
|
477
|
+
), O = function(e) {
|
|
478
|
+
var t = typeof Symbol == "function" && Symbol.iterator, r = t && e[t], n = 0;
|
|
479
|
+
if (r) return r.call(e);
|
|
480
|
+
if (e && typeof e.length == "number") return {
|
|
481
|
+
next: function() {
|
|
482
|
+
return e && n >= e.length && (e = void 0), { value: e && e[n++], done: !e };
|
|
483
|
+
}
|
|
484
|
+
};
|
|
485
|
+
throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
486
|
+
}, W = (
|
|
487
|
+
/** @class */
|
|
488
|
+
function() {
|
|
489
|
+
function e(t) {
|
|
490
|
+
this._spanProcessors = t;
|
|
491
|
+
}
|
|
492
|
+
return e.prototype.forceFlush = function() {
|
|
493
|
+
var t, r, n = [];
|
|
494
|
+
try {
|
|
495
|
+
for (var i = O(this._spanProcessors), o = i.next(); !o.done; o = i.next()) {
|
|
496
|
+
var s = o.value;
|
|
497
|
+
n.push(s.forceFlush());
|
|
498
|
+
}
|
|
499
|
+
} catch (a) {
|
|
500
|
+
t = { error: a };
|
|
501
|
+
} finally {
|
|
502
|
+
try {
|
|
503
|
+
o && !o.done && (r = i.return) && r.call(i);
|
|
504
|
+
} finally {
|
|
505
|
+
if (t) throw t.error;
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
return new Promise(function(a) {
|
|
509
|
+
Promise.all(n).then(function() {
|
|
510
|
+
a();
|
|
511
|
+
}).catch(function(c) {
|
|
512
|
+
f(c || new Error("MultiSpanProcessor: forceFlush failed")), a();
|
|
513
|
+
});
|
|
514
|
+
});
|
|
515
|
+
}, e.prototype.onStart = function(t, r) {
|
|
516
|
+
var n, i;
|
|
517
|
+
try {
|
|
518
|
+
for (var o = O(this._spanProcessors), s = o.next(); !s.done; s = o.next()) {
|
|
519
|
+
var a = s.value;
|
|
520
|
+
a.onStart(t, r);
|
|
521
|
+
}
|
|
522
|
+
} catch (c) {
|
|
523
|
+
n = { error: c };
|
|
524
|
+
} finally {
|
|
525
|
+
try {
|
|
526
|
+
s && !s.done && (i = o.return) && i.call(o);
|
|
527
|
+
} finally {
|
|
528
|
+
if (n) throw n.error;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
}, e.prototype.onEnd = function(t) {
|
|
532
|
+
var r, n;
|
|
533
|
+
try {
|
|
534
|
+
for (var i = O(this._spanProcessors), o = i.next(); !o.done; o = i.next()) {
|
|
535
|
+
var s = o.value;
|
|
536
|
+
s.onEnd(t);
|
|
537
|
+
}
|
|
538
|
+
} catch (a) {
|
|
539
|
+
r = { error: a };
|
|
540
|
+
} finally {
|
|
541
|
+
try {
|
|
542
|
+
o && !o.done && (n = i.return) && n.call(i);
|
|
543
|
+
} finally {
|
|
544
|
+
if (r) throw r.error;
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
}, e.prototype.shutdown = function() {
|
|
548
|
+
var t, r, n = [];
|
|
549
|
+
try {
|
|
550
|
+
for (var i = O(this._spanProcessors), o = i.next(); !o.done; o = i.next()) {
|
|
551
|
+
var s = o.value;
|
|
552
|
+
n.push(s.shutdown());
|
|
553
|
+
}
|
|
554
|
+
} catch (a) {
|
|
555
|
+
t = { error: a };
|
|
556
|
+
} finally {
|
|
557
|
+
try {
|
|
558
|
+
o && !o.done && (r = i.return) && r.call(i);
|
|
559
|
+
} finally {
|
|
560
|
+
if (t) throw t.error;
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
return new Promise(function(a, c) {
|
|
564
|
+
Promise.all(n).then(function() {
|
|
565
|
+
a();
|
|
566
|
+
}, c);
|
|
567
|
+
});
|
|
568
|
+
}, e;
|
|
569
|
+
}()
|
|
570
|
+
), Gt = (
|
|
571
|
+
/** @class */
|
|
572
|
+
function() {
|
|
573
|
+
function e() {
|
|
574
|
+
}
|
|
575
|
+
return e.prototype.onStart = function(t, r) {
|
|
576
|
+
}, e.prototype.onEnd = function(t) {
|
|
577
|
+
}, e.prototype.shutdown = function() {
|
|
578
|
+
return Promise.resolve();
|
|
579
|
+
}, e.prototype.forceFlush = function() {
|
|
580
|
+
return Promise.resolve();
|
|
581
|
+
}, e;
|
|
582
|
+
}()
|
|
583
|
+
), jt = function(e, t) {
|
|
584
|
+
var r = typeof Symbol == "function" && e[Symbol.iterator];
|
|
585
|
+
if (!r) return e;
|
|
586
|
+
var n = r.call(e), i, o = [], s;
|
|
587
|
+
try {
|
|
588
|
+
for (; (t === void 0 || t-- > 0) && !(i = n.next()).done; ) o.push(i.value);
|
|
589
|
+
} catch (a) {
|
|
590
|
+
s = { error: a };
|
|
591
|
+
} finally {
|
|
592
|
+
try {
|
|
593
|
+
i && !i.done && (r = n.return) && r.call(n);
|
|
594
|
+
} finally {
|
|
595
|
+
if (s) throw s.error;
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
return o;
|
|
599
|
+
}, Vt = function(e, t, r) {
|
|
600
|
+
if (arguments.length === 2) for (var n = 0, i = t.length, o; n < i; n++)
|
|
601
|
+
(o || !(n in t)) && (o || (o = Array.prototype.slice.call(t, 0, n)), o[n] = t[n]);
|
|
602
|
+
return e.concat(o || Array.prototype.slice.call(t));
|
|
603
|
+
}, S;
|
|
604
|
+
(function(e) {
|
|
605
|
+
e[e.resolved = 0] = "resolved", e[e.timeout = 1] = "timeout", e[e.error = 2] = "error", e[e.unresolved = 3] = "unresolved";
|
|
606
|
+
})(S || (S = {}));
|
|
607
|
+
var te = (
|
|
608
|
+
/** @class */
|
|
609
|
+
function() {
|
|
610
|
+
function e(t) {
|
|
611
|
+
t === void 0 && (t = {});
|
|
612
|
+
var r, n;
|
|
613
|
+
this._registeredSpanProcessors = [], this._tracers = /* @__PURE__ */ new Map();
|
|
614
|
+
var i = yt({}, J(), Mt(t));
|
|
615
|
+
if (this.resource = (r = i.resource) !== null && r !== void 0 ? r : H.empty(), i.mergeResourceWithDefaults && (this.resource = H.default().merge(this.resource)), this._config = Object.assign({}, i, {
|
|
616
|
+
resource: this.resource
|
|
617
|
+
}), !((n = t.spanProcessors) === null || n === void 0) && n.length)
|
|
618
|
+
this._registeredSpanProcessors = Vt([], jt(t.spanProcessors), !1), this.activeSpanProcessor = new W(this._registeredSpanProcessors);
|
|
619
|
+
else {
|
|
620
|
+
var o = this._buildExporterFromEnv();
|
|
621
|
+
if (o !== void 0) {
|
|
622
|
+
var s = new Bt(o);
|
|
623
|
+
this.activeSpanProcessor = s;
|
|
624
|
+
} else
|
|
625
|
+
this.activeSpanProcessor = new Gt();
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
return e.prototype.getTracer = function(t, r, n) {
|
|
629
|
+
var i = t + "@" + (r || "") + ":" + (n?.schemaUrl || "");
|
|
630
|
+
return this._tracers.has(i) || this._tracers.set(i, new zt({ name: t, version: r, schemaUrl: n?.schemaUrl }, this._config, this)), this._tracers.get(i);
|
|
631
|
+
}, e.prototype.addSpanProcessor = function(t) {
|
|
632
|
+
this._registeredSpanProcessors.length === 0 && this.activeSpanProcessor.shutdown().catch(function(r) {
|
|
633
|
+
return l.error("Error while trying to shutdown current span processor", r);
|
|
634
|
+
}), this._registeredSpanProcessors.push(t), this.activeSpanProcessor = new W(this._registeredSpanProcessors);
|
|
635
|
+
}, e.prototype.getActiveSpanProcessor = function() {
|
|
636
|
+
return this.activeSpanProcessor;
|
|
637
|
+
}, e.prototype.register = function(t) {
|
|
638
|
+
t === void 0 && (t = {}), _.setGlobalTracerProvider(this), t.propagator === void 0 && (t.propagator = this._buildPropagatorFromEnv()), t.contextManager && E.setGlobalContextManager(t.contextManager), t.propagator && ut.setGlobalPropagator(t.propagator);
|
|
639
|
+
}, e.prototype.forceFlush = function() {
|
|
640
|
+
var t = this._config.forceFlushTimeoutMillis, r = this._registeredSpanProcessors.map(function(n) {
|
|
641
|
+
return new Promise(function(i) {
|
|
642
|
+
var o, s = setTimeout(function() {
|
|
643
|
+
i(new Error("Span processor did not completed within timeout period of " + t + " ms")), o = S.timeout;
|
|
644
|
+
}, t);
|
|
645
|
+
n.forceFlush().then(function() {
|
|
646
|
+
clearTimeout(s), o !== S.timeout && (o = S.resolved, i(o));
|
|
647
|
+
}).catch(function(a) {
|
|
648
|
+
clearTimeout(s), o = S.error, i(a);
|
|
649
|
+
});
|
|
650
|
+
});
|
|
651
|
+
});
|
|
652
|
+
return new Promise(function(n, i) {
|
|
653
|
+
Promise.all(r).then(function(o) {
|
|
654
|
+
var s = o.filter(function(a) {
|
|
655
|
+
return a !== S.resolved;
|
|
656
|
+
});
|
|
657
|
+
s.length > 0 ? i(s) : n();
|
|
658
|
+
}).catch(function(o) {
|
|
659
|
+
return i([o]);
|
|
660
|
+
});
|
|
661
|
+
});
|
|
662
|
+
}, e.prototype.shutdown = function() {
|
|
663
|
+
return this.activeSpanProcessor.shutdown();
|
|
664
|
+
}, e.prototype._getPropagator = function(t) {
|
|
665
|
+
var r;
|
|
666
|
+
return (r = this.constructor._registeredPropagators.get(t)) === null || r === void 0 ? void 0 : r();
|
|
667
|
+
}, e.prototype._getSpanExporter = function(t) {
|
|
668
|
+
var r;
|
|
669
|
+
return (r = this.constructor._registeredExporters.get(t)) === null || r === void 0 ? void 0 : r();
|
|
670
|
+
}, e.prototype._buildPropagatorFromEnv = function() {
|
|
671
|
+
var t = this, r = Array.from(new Set(P().OTEL_PROPAGATORS)), n = r.map(function(o) {
|
|
672
|
+
var s = t._getPropagator(o);
|
|
673
|
+
return s || l.warn('Propagator "' + o + '" requested through environment variable is unavailable.'), s;
|
|
674
|
+
}), i = n.reduce(function(o, s) {
|
|
675
|
+
return s && o.push(s), o;
|
|
676
|
+
}, []);
|
|
677
|
+
if (i.length !== 0)
|
|
678
|
+
return r.length === 1 ? i[0] : new _t({
|
|
679
|
+
propagators: i
|
|
680
|
+
});
|
|
681
|
+
}, e.prototype._buildExporterFromEnv = function() {
|
|
682
|
+
var t = P().OTEL_TRACES_EXPORTER;
|
|
683
|
+
if (!(t === "none" || t === "")) {
|
|
684
|
+
var r = this._getSpanExporter(t);
|
|
685
|
+
return r || l.error('Exporter "' + t + '" requested through environment variable is unavailable.'), r;
|
|
686
|
+
}
|
|
687
|
+
}, e._registeredPropagators = /* @__PURE__ */ new Map([
|
|
688
|
+
["tracecontext", function() {
|
|
689
|
+
return new mt();
|
|
690
|
+
}],
|
|
691
|
+
["baggage", function() {
|
|
692
|
+
return new vt();
|
|
693
|
+
}]
|
|
694
|
+
]), e._registeredExporters = /* @__PURE__ */ new Map(), e;
|
|
695
|
+
}()
|
|
696
|
+
), Qt = function(e) {
|
|
697
|
+
var t = typeof Symbol == "function" && Symbol.iterator, r = t && e[t], n = 0;
|
|
698
|
+
if (r) return r.call(e);
|
|
699
|
+
if (e && typeof e.length == "number") return {
|
|
700
|
+
next: function() {
|
|
701
|
+
return e && n >= e.length && (e = void 0), { value: e && e[n++], done: !e };
|
|
702
|
+
}
|
|
703
|
+
};
|
|
704
|
+
throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
705
|
+
}, ee = (
|
|
706
|
+
/** @class */
|
|
707
|
+
function() {
|
|
708
|
+
function e() {
|
|
709
|
+
}
|
|
710
|
+
return e.prototype.export = function(t, r) {
|
|
711
|
+
return this._sendSpans(t, r);
|
|
712
|
+
}, e.prototype.shutdown = function() {
|
|
713
|
+
return this._sendSpans([]), this.forceFlush();
|
|
714
|
+
}, e.prototype.forceFlush = function() {
|
|
715
|
+
return Promise.resolve();
|
|
716
|
+
}, e.prototype._exportInfo = function(t) {
|
|
717
|
+
var r;
|
|
718
|
+
return {
|
|
719
|
+
resource: {
|
|
720
|
+
attributes: t.resource.attributes
|
|
721
|
+
},
|
|
722
|
+
instrumentationScope: t.instrumentationLibrary,
|
|
723
|
+
traceId: t.spanContext().traceId,
|
|
724
|
+
parentId: t.parentSpanId,
|
|
725
|
+
traceState: (r = t.spanContext().traceState) === null || r === void 0 ? void 0 : r.serialize(),
|
|
726
|
+
name: t.name,
|
|
727
|
+
id: t.spanContext().spanId,
|
|
728
|
+
kind: t.kind,
|
|
729
|
+
timestamp: j(t.startTime),
|
|
730
|
+
duration: j(t.duration),
|
|
731
|
+
attributes: t.attributes,
|
|
732
|
+
status: t.status,
|
|
733
|
+
events: t.events,
|
|
734
|
+
links: t.links
|
|
735
|
+
};
|
|
736
|
+
}, e.prototype._sendSpans = function(t, r) {
|
|
737
|
+
var n, i;
|
|
738
|
+
try {
|
|
739
|
+
for (var o = Qt(t), s = o.next(); !s.done; s = o.next()) {
|
|
740
|
+
var a = s.value;
|
|
741
|
+
console.dir(this._exportInfo(a), { depth: 3 });
|
|
742
|
+
}
|
|
743
|
+
} catch (c) {
|
|
744
|
+
n = { error: c };
|
|
745
|
+
} finally {
|
|
746
|
+
try {
|
|
747
|
+
s && !s.done && (i = o.return) && i.call(o);
|
|
748
|
+
} finally {
|
|
749
|
+
if (n) throw n.error;
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
if (r)
|
|
753
|
+
return r({ code: U.SUCCESS });
|
|
754
|
+
}, e;
|
|
755
|
+
}()
|
|
756
|
+
), Ht = function(e, t, r, n) {
|
|
757
|
+
function i(o) {
|
|
758
|
+
return o instanceof r ? o : new r(function(s) {
|
|
759
|
+
s(o);
|
|
760
|
+
});
|
|
761
|
+
}
|
|
762
|
+
return new (r || (r = Promise))(function(o, s) {
|
|
763
|
+
function a(p) {
|
|
764
|
+
try {
|
|
765
|
+
u(n.next(p));
|
|
766
|
+
} catch (h) {
|
|
767
|
+
s(h);
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
function c(p) {
|
|
771
|
+
try {
|
|
772
|
+
u(n.throw(p));
|
|
773
|
+
} catch (h) {
|
|
774
|
+
s(h);
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
function u(p) {
|
|
778
|
+
p.done ? o(p.value) : i(p.value).then(a, c);
|
|
779
|
+
}
|
|
780
|
+
u((n = n.apply(e, [])).next());
|
|
781
|
+
});
|
|
782
|
+
}, Xt = function(e, t) {
|
|
783
|
+
var r = { label: 0, sent: function() {
|
|
784
|
+
if (o[0] & 1) throw o[1];
|
|
785
|
+
return o[1];
|
|
786
|
+
}, trys: [], ops: [] }, n, i, o, s;
|
|
787
|
+
return s = { next: a(0), throw: a(1), return: a(2) }, typeof Symbol == "function" && (s[Symbol.iterator] = function() {
|
|
788
|
+
return this;
|
|
789
|
+
}), s;
|
|
790
|
+
function a(u) {
|
|
791
|
+
return function(p) {
|
|
792
|
+
return c([u, p]);
|
|
793
|
+
};
|
|
794
|
+
}
|
|
795
|
+
function c(u) {
|
|
796
|
+
if (n) throw new TypeError("Generator is already executing.");
|
|
797
|
+
for (; r; ) try {
|
|
798
|
+
if (n = 1, i && (o = u[0] & 2 ? i.return : u[0] ? i.throw || ((o = i.return) && o.call(i), 0) : i.next) && !(o = o.call(i, u[1])).done) return o;
|
|
799
|
+
switch (i = 0, o && (u = [u[0] & 2, o.value]), u[0]) {
|
|
800
|
+
case 0:
|
|
801
|
+
case 1:
|
|
802
|
+
o = u;
|
|
803
|
+
break;
|
|
804
|
+
case 4:
|
|
805
|
+
return r.label++, { value: u[1], done: !1 };
|
|
806
|
+
case 5:
|
|
807
|
+
r.label++, i = u[1], u = [0];
|
|
808
|
+
continue;
|
|
809
|
+
case 7:
|
|
810
|
+
u = r.ops.pop(), r.trys.pop();
|
|
811
|
+
continue;
|
|
812
|
+
default:
|
|
813
|
+
if (o = r.trys, !(o = o.length > 0 && o[o.length - 1]) && (u[0] === 6 || u[0] === 2)) {
|
|
814
|
+
r = 0;
|
|
815
|
+
continue;
|
|
816
|
+
}
|
|
817
|
+
if (u[0] === 3 && (!o || u[1] > o[0] && u[1] < o[3])) {
|
|
818
|
+
r.label = u[1];
|
|
819
|
+
break;
|
|
820
|
+
}
|
|
821
|
+
if (u[0] === 6 && r.label < o[1]) {
|
|
822
|
+
r.label = o[1], o = u;
|
|
823
|
+
break;
|
|
824
|
+
}
|
|
825
|
+
if (o && r.label < o[2]) {
|
|
826
|
+
r.label = o[2], r.ops.push(u);
|
|
827
|
+
break;
|
|
828
|
+
}
|
|
829
|
+
o[2] && r.ops.pop(), r.trys.pop();
|
|
830
|
+
continue;
|
|
831
|
+
}
|
|
832
|
+
u = t.call(e, r);
|
|
833
|
+
} catch (p) {
|
|
834
|
+
u = [6, p], i = 0;
|
|
835
|
+
} finally {
|
|
836
|
+
n = o = 0;
|
|
837
|
+
}
|
|
838
|
+
if (u[0] & 5) throw u[1];
|
|
839
|
+
return { value: u[0] ? u[1] : void 0, done: !0 };
|
|
840
|
+
}
|
|
841
|
+
}, re = (
|
|
842
|
+
/** @class */
|
|
843
|
+
function() {
|
|
844
|
+
function e(t) {
|
|
845
|
+
this._exporter = t, this._shutdownOnce = new Y(this._shutdown, this), this._unresolvedExports = /* @__PURE__ */ new Set();
|
|
846
|
+
}
|
|
847
|
+
return e.prototype.forceFlush = function() {
|
|
848
|
+
return Ht(this, void 0, void 0, function() {
|
|
849
|
+
return Xt(this, function(t) {
|
|
850
|
+
switch (t.label) {
|
|
851
|
+
case 0:
|
|
852
|
+
return [4, Promise.all(Array.from(this._unresolvedExports))];
|
|
853
|
+
case 1:
|
|
854
|
+
return t.sent(), this._exporter.forceFlush ? [4, this._exporter.forceFlush()] : [3, 3];
|
|
855
|
+
case 2:
|
|
856
|
+
t.sent(), t.label = 3;
|
|
857
|
+
case 3:
|
|
858
|
+
return [
|
|
859
|
+
2
|
|
860
|
+
/*return*/
|
|
861
|
+
];
|
|
862
|
+
}
|
|
863
|
+
});
|
|
864
|
+
});
|
|
865
|
+
}, e.prototype.onStart = function(t, r) {
|
|
866
|
+
}, e.prototype.onEnd = function(t) {
|
|
867
|
+
var r = this, n, i;
|
|
868
|
+
if (!this._shutdownOnce.isCalled && (t.spanContext().traceFlags & b.SAMPLED) !== 0) {
|
|
869
|
+
var o = function() {
|
|
870
|
+
return Lt._export(r._exporter, [t]).then(function(a) {
|
|
871
|
+
var c;
|
|
872
|
+
a.code !== U.SUCCESS && f((c = a.error) !== null && c !== void 0 ? c : new Error("SimpleSpanProcessor: span export failed (status " + a + ")"));
|
|
873
|
+
}).catch(function(a) {
|
|
874
|
+
f(a);
|
|
875
|
+
});
|
|
876
|
+
};
|
|
877
|
+
if (t.resource.asyncAttributesPending) {
|
|
878
|
+
var s = (i = (n = t.resource).waitForAsyncAttributes) === null || i === void 0 ? void 0 : i.call(n).then(function() {
|
|
879
|
+
return s != null && r._unresolvedExports.delete(s), o();
|
|
880
|
+
}, function(a) {
|
|
881
|
+
return f(a);
|
|
882
|
+
});
|
|
883
|
+
s != null && this._unresolvedExports.add(s);
|
|
884
|
+
} else
|
|
885
|
+
o();
|
|
886
|
+
}
|
|
887
|
+
}, e.prototype.shutdown = function() {
|
|
888
|
+
return this._shutdownOnce.call();
|
|
889
|
+
}, e.prototype._shutdown = function() {
|
|
890
|
+
return this._exporter.shutdown();
|
|
891
|
+
}, e;
|
|
892
|
+
}()
|
|
893
|
+
);
|
|
894
|
+
export {
|
|
895
|
+
D as B,
|
|
896
|
+
Bt as D,
|
|
897
|
+
kt as G,
|
|
898
|
+
L as P,
|
|
899
|
+
R,
|
|
900
|
+
S,
|
|
901
|
+
q as W,
|
|
902
|
+
ee as e,
|
|
903
|
+
T as g,
|
|
904
|
+
Gt as j,
|
|
905
|
+
re as r,
|
|
906
|
+
te as t,
|
|
907
|
+
Ct as x,
|
|
908
|
+
zt as z
|
|
909
|
+
};
|
|
910
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiU2ltcGxlU3BhblByb2Nlc3Nvci1Ec2F5bWtxQS0hfnswMDR9fi5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQiBhcyBCdCQxLCBNIGFzIE1lLCBUIGFzIFRlLCBiIGFzIGFzLCBlIGFzIGV0LCB3IGFzIHdlLCB5IGFzIHluLCBkIGFzIGRzIH0gZnJvbSAnLi9pbmRleC0hfnswMDd9fi5qcyc7XG5pbXBvcnQgeyByIH0gZnJvbSAnLi9kaWFnLWFwaS1EYkxRRzZDeS0hfnswMGF9fi5qcyc7XG5pbXBvcnQgeyBkRCBhcyBqZSwgeSBhcyB5XywgZEUgYXMgcWUsIGRGIGFzIFhlLCBkRyBhcyBSJDIsIHAgYXMgcF8sIE8gYXMgTyQxLCBkSCBhcyBOXywgZEkgYXMgYl8sIGF0IGFzIE5BLCBhdiBhcyBNQSwgZEogYXMgcl8sIGF1IGFzIGVBIH0gZnJvbSAnLi91cmwtRDIteE5URHMtIX57MDBifX4uanMnO1xuaW1wb3J0IHsgRSBhcyBFciwgTyBhcyBPZSwgdiBhcyB2ZSwgViBhcyBWZSwgWiBhcyBaciwgZiBhcyBmdCwgUyBhcyBTZSwgbiBhcyBudCwgUSBhcyBRciwgbCwgYyBhcyBjZSwgZCwgcCwgYSBhcyBhciwgYiBhcyB2LCBlIGFzIE90JDEgfSBmcm9tICcuL2luZGV4LURJb2FxUDRfLSF+ezAwaX1+LmpzJztcbmltcG9ydCB7IHUsIGEgYXMgYSQxIH0gZnJvbSAnLi9zdXBwcmVzcy10cmFjaW5nLWkxNjZadkFmLSF+ezAwbn1+LmpzJztcbmltcG9ydCB7IFIgYXMgUiQxIH0gZnJvbSAnLi9SZXNvdXJjZS1DX0p5T1VpMC0hfnswMDJ9fi5qcyc7XG5pbXBvcnQgeyBhIH0gZnJvbSAnLi9FeHBvcnRSZXN1bHQtQmFjc3F3S0EtIX57MDBsfX4uanMnO1xuXG52YXIgd3QgPSBcImV4Y2VwdGlvblwiLCBEID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBEID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbihyKSB7XG4gICAgZm9yICh2YXIgdCwgZSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBlIDwgbjsgZSsrKSB7XG4gICAgICB0ID0gYXJndW1lbnRzW2VdO1xuICAgICAgZm9yICh2YXIgbyBpbiB0KSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwgbykgJiYgKHJbb10gPSB0W29dKTtcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH0sIEQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0sIEN0ID0gZnVuY3Rpb24ocikge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgZSA9IHQgJiYgclt0XSwgbiA9IDA7XG4gIGlmIChlKSByZXR1cm4gZS5jYWxsKHIpO1xuICBpZiAociAmJiB0eXBlb2Ygci5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByICYmIG4gPj0gci5sZW5ndGggJiYgKHIgPSB2b2lkIDApLCB7IHZhbHVlOiByICYmIHJbbisrXSwgZG9uZTogIXIgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn0sIFggPSBmdW5jdGlvbihyLCB0KSB7XG4gIHZhciBlID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgcltTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWUpIHJldHVybiByO1xuICB2YXIgbiA9IGUuY2FsbChyKSwgbywgaSA9IFtdLCBhO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAocykge1xuICAgIGEgPSB7IGVycm9yOiBzIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAoZSA9IG4ucmV0dXJuKSAmJiBlLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn0sIE90ID0gZnVuY3Rpb24ociwgdCwgZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgaTsgbiA8IG87IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiByLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIHh0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIHIkMSh0LCBlLCBuLCBvLCBpLCBhLCBzLCBsLCB1LCBwKSB7XG4gICAgICBzID09PSB2b2lkIDAgJiYgKHMgPSBbXSksIHRoaXMuYXR0cmlidXRlcyA9IHt9LCB0aGlzLmxpbmtzID0gW10sIHRoaXMuZXZlbnRzID0gW10sIHRoaXMuX2Ryb3BwZWRBdHRyaWJ1dGVzQ291bnQgPSAwLCB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQgPSAwLCB0aGlzLl9kcm9wcGVkTGlua3NDb3VudCA9IDAsIHRoaXMuc3RhdHVzID0ge1xuICAgICAgICBjb2RlOiB3ZS5VTlNFVFxuICAgICAgfSwgdGhpcy5lbmRUaW1lID0gWzAsIDBdLCB0aGlzLl9lbmRlZCA9IGZhbHNlLCB0aGlzLl9kdXJhdGlvbiA9IFstMSwgLTFdLCB0aGlzLm5hbWUgPSBuLCB0aGlzLl9zcGFuQ29udGV4dCA9IG8sIHRoaXMucGFyZW50U3BhbklkID0gYSwgdGhpcy5raW5kID0gaSwgdGhpcy5saW5rcyA9IHM7XG4gICAgICB2YXIgYyA9IERhdGUubm93KCk7XG4gICAgICB0aGlzLl9wZXJmb3JtYW5jZVN0YXJ0VGltZSA9IFIkMi5ub3coKSwgdGhpcy5fcGVyZm9ybWFuY2VPZmZzZXQgPSBjIC0gKHRoaXMuX3BlcmZvcm1hbmNlU3RhcnRUaW1lICsgcl8oKSksIHRoaXMuX3N0YXJ0VGltZVByb3ZpZGVkID0gbCAhPSBudWxsLCB0aGlzLnN0YXJ0VGltZSA9IHRoaXMuX2dldFRpbWUobCA/PyBjKSwgdGhpcy5yZXNvdXJjZSA9IHQucmVzb3VyY2UsIHRoaXMuaW5zdHJ1bWVudGF0aW9uTGlicmFyeSA9IHQuaW5zdHJ1bWVudGF0aW9uTGlicmFyeSwgdGhpcy5fc3BhbkxpbWl0cyA9IHQuZ2V0U3BhbkxpbWl0cygpLCB0aGlzLl9hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0ID0gdGhpcy5fc3BhbkxpbWl0cy5hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0IHx8IDAsIHAgIT0gbnVsbCAmJiB0aGlzLnNldEF0dHJpYnV0ZXMocCksIHRoaXMuX3NwYW5Qcm9jZXNzb3IgPSB0LmdldEFjdGl2ZVNwYW5Qcm9jZXNzb3IoKSwgdGhpcy5fc3BhblByb2Nlc3Nvci5vblN0YXJ0KHRoaXMsIGUpO1xuICAgIH1cbiAgICByZXR1cm4gciQxLnByb3RvdHlwZS5zcGFuQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NwYW5Db250ZXh0O1xuICAgIH0sIHIkMS5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24odCwgZSkge1xuICAgICAgcmV0dXJuIGUgPT0gbnVsbCB8fCB0aGlzLl9pc1NwYW5FbmRlZCgpID8gdGhpcyA6IHQubGVuZ3RoID09PSAwID8gKHIud2FybihcIkludmFsaWQgYXR0cmlidXRlIGtleTogXCIgKyB0KSwgdGhpcykgOiBhcihlKSA/IE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcykubGVuZ3RoID49IHRoaXMuX3NwYW5MaW1pdHMuYXR0cmlidXRlQ291bnRMaW1pdCAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywgdCkgPyAodGhpcy5fZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCsrLCB0aGlzKSA6ICh0aGlzLmF0dHJpYnV0ZXNbdF0gPSB0aGlzLl90cnVuY2F0ZVRvU2l6ZShlKSwgdGhpcykgOiAoci53YXJuKFwiSW52YWxpZCBhdHRyaWJ1dGUgdmFsdWUgc2V0IGZvciBrZXk6IFwiICsgdCksIHRoaXMpO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuc2V0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBlLCBuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgbyA9IEN0KE9iamVjdC5lbnRyaWVzKHQpKSwgaSA9IG8ubmV4dCgpOyAhaS5kb25lOyBpID0gby5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgYSA9IFgoaS52YWx1ZSwgMiksIHMgPSBhWzBdLCBsID0gYVsxXTtcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShzLCBsKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBlID0geyBlcnJvcjogdSB9O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpICYmICFpLmRvbmUgJiYgKG4gPSBvLnJldHVybikgJiYgbi5jYWxsKG8pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChlKSB0aHJvdyBlLmVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCByJDEucHJvdG90eXBlLmFkZEV2ZW50ID0gZnVuY3Rpb24odCwgZSwgbikge1xuICAgICAgaWYgKHRoaXMuX2lzU3BhbkVuZGVkKCkpXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgaWYgKHRoaXMuX3NwYW5MaW1pdHMuZXZlbnRDb3VudExpbWl0ID09PSAwKVxuICAgICAgICByZXR1cm4gci53YXJuKFwiTm8gZXZlbnRzIGFsbG93ZWQuXCIpLCB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQrKywgdGhpcztcbiAgICAgIHRoaXMuZXZlbnRzLmxlbmd0aCA+PSB0aGlzLl9zcGFuTGltaXRzLmV2ZW50Q291bnRMaW1pdCAmJiAodGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50ID09PSAwICYmIHIuZGVidWcoXCJEcm9wcGluZyBleHRyYSBldmVudHMuXCIpLCB0aGlzLmV2ZW50cy5zaGlmdCgpLCB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQrKyksIHFlKGUpICYmIChxZShuKSB8fCAobiA9IGUpLCBlID0gdm9pZCAwKTtcbiAgICAgIHZhciBvID0gUXIoZSk7XG4gICAgICByZXR1cm4gdGhpcy5ldmVudHMucHVzaCh7XG4gICAgICAgIG5hbWU6IHQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IG8sXG4gICAgICAgIHRpbWU6IHRoaXMuX2dldFRpbWUobiksXG4gICAgICAgIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IDBcbiAgICAgIH0pLCB0aGlzO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuYWRkTGluayA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmxpbmtzLnB1c2godCksIHRoaXM7XG4gICAgfSwgciQxLnByb3RvdHlwZS5hZGRMaW5rcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBlO1xuICAgICAgcmV0dXJuIChlID0gdGhpcy5saW5rcykucHVzaC5hcHBseShlLCBPdChbXSwgWCh0KSwgZmFsc2UpKSwgdGhpcztcbiAgICB9LCByJDEucHJvdG90eXBlLnNldFN0YXR1cyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pc1NwYW5FbmRlZCgpID8gdGhpcyA6ICh0aGlzLnN0YXR1cyA9IEQoe30sIHQpLCB0aGlzLnN0YXR1cy5tZXNzYWdlICE9IG51bGwgJiYgdHlwZW9mIHQubWVzc2FnZSAhPSBcInN0cmluZ1wiICYmIChyLndhcm4oXCJEcm9wcGluZyBpbnZhbGlkIHN0YXR1cy5tZXNzYWdlIG9mIHR5cGUgJ1wiICsgdHlwZW9mIHQubWVzc2FnZSArIFwiJywgZXhwZWN0ZWQgJ3N0cmluZydcIiksIGRlbGV0ZSB0aGlzLnN0YXR1cy5tZXNzYWdlKSwgdGhpcyk7XG4gICAgfSwgciQxLnByb3RvdHlwZS51cGRhdGVOYW1lID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2lzU3BhbkVuZGVkKCkgPyB0aGlzIDogKHRoaXMubmFtZSA9IHQsIHRoaXMpO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24odCkge1xuICAgICAgaWYgKHRoaXMuX2lzU3BhbkVuZGVkKCkpIHtcbiAgICAgICAgci5lcnJvcih0aGlzLm5hbWUgKyBcIiBcIiArIHRoaXMuX3NwYW5Db250ZXh0LnRyYWNlSWQgKyBcIi1cIiArIHRoaXMuX3NwYW5Db250ZXh0LnNwYW5JZCArIFwiIC0gWW91IGNhbiBvbmx5IGNhbGwgZW5kKCkgb24gYSBzcGFuIG9uY2UuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9lbmRlZCA9IHRydWUsIHRoaXMuZW5kVGltZSA9IHRoaXMuX2dldFRpbWUodCksIHRoaXMuX2R1cmF0aW9uID0gWGUodGhpcy5zdGFydFRpbWUsIHRoaXMuZW5kVGltZSksIHRoaXMuX2R1cmF0aW9uWzBdIDwgMCAmJiAoci53YXJuKFwiSW5jb25zaXN0ZW50IHN0YXJ0IGFuZCBlbmQgdGltZSwgc3RhcnRUaW1lID4gZW5kVGltZS4gU2V0dGluZyBzcGFuIGR1cmF0aW9uIHRvIDBtcy5cIiwgdGhpcy5zdGFydFRpbWUsIHRoaXMuZW5kVGltZSksIHRoaXMuZW5kVGltZSA9IHRoaXMuc3RhcnRUaW1lLnNsaWNlKCksIHRoaXMuX2R1cmF0aW9uID0gWzAsIDBdKSwgdGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50ID4gMCAmJiByLndhcm4oXCJEcm9wcGVkIFwiICsgdGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50ICsgXCIgZXZlbnRzIGJlY2F1c2UgZXZlbnRDb3VudExpbWl0IHJlYWNoZWRcIiksIHRoaXMuX3NwYW5Qcm9jZXNzb3Iub25FbmQodGhpcyk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5fZ2V0VGltZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIGlmICh0eXBlb2YgdCA9PSBcIm51bWJlclwiICYmIHQgPD0gUiQyLm5vdygpKVxuICAgICAgICByZXR1cm4gcF8odCArIHRoaXMuX3BlcmZvcm1hbmNlT2Zmc2V0KTtcbiAgICAgIGlmICh0eXBlb2YgdCA9PSBcIm51bWJlclwiKVxuICAgICAgICByZXR1cm4gTyQxKHQpO1xuICAgICAgaWYgKHQgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICByZXR1cm4gTyQxKHQuZ2V0VGltZSgpKTtcbiAgICAgIGlmIChOXyh0KSlcbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgICBpZiAodGhpcy5fc3RhcnRUaW1lUHJvdmlkZWQpXG4gICAgICAgIHJldHVybiBPJDEoRGF0ZS5ub3coKSk7XG4gICAgICB2YXIgZSA9IFIkMi5ub3coKSAtIHRoaXMuX3BlcmZvcm1hbmNlU3RhcnRUaW1lO1xuICAgICAgcmV0dXJuIGJfKHRoaXMuc3RhcnRUaW1lLCBPJDEoZSkpO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuaXNSZWNvcmRpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbmRlZCA9PT0gZmFsc2U7XG4gICAgfSwgciQxLnByb3RvdHlwZS5yZWNvcmRFeGNlcHRpb24gPSBmdW5jdGlvbih0LCBlKSB7XG4gICAgICB2YXIgbiA9IHt9O1xuICAgICAgdHlwZW9mIHQgPT0gXCJzdHJpbmdcIiA/IG5bTUFdID0gdCA6IHQgJiYgKHQuY29kZSA/IG5bTkFdID0gdC5jb2RlLnRvU3RyaW5nKCkgOiB0Lm5hbWUgJiYgKG5bTkFdID0gdC5uYW1lKSwgdC5tZXNzYWdlICYmIChuW01BXSA9IHQubWVzc2FnZSksIHQuc3RhY2sgJiYgKG5bZUFdID0gdC5zdGFjaykpLCBuW05BXSB8fCBuW01BXSA/IHRoaXMuYWRkRXZlbnQod3QsIG4sIGUpIDogci53YXJuKFwiRmFpbGVkIHRvIHJlY29yZCBhbiBleGNlcHRpb24gXCIgKyB0KTtcbiAgICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkociQxLnByb3RvdHlwZSwgXCJkdXJhdGlvblwiLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHVyYXRpb247XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHIkMS5wcm90b3R5cGUsIFwiZW5kZWRcIiwge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZGVkO1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyJDEucHJvdG90eXBlLCBcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIiwge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3BwZWRBdHRyaWJ1dGVzQ291bnQ7XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHIkMS5wcm90b3R5cGUsIFwiZHJvcHBlZEV2ZW50c0NvdW50XCIsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQ7XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHIkMS5wcm90b3R5cGUsIFwiZHJvcHBlZExpbmtzQ291bnRcIiwge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3BwZWRMaW5rc0NvdW50O1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSksIHIkMS5wcm90b3R5cGUuX2lzU3BhbkVuZGVkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZW5kZWQgJiYgci53YXJuKFwiQ2FuIG5vdCBleGVjdXRlIHRoZSBvcGVyYXRpb24gb24gZW5kZWQgU3BhbiB7dHJhY2VJZDogXCIgKyB0aGlzLl9zcGFuQ29udGV4dC50cmFjZUlkICsgXCIsIHNwYW5JZDogXCIgKyB0aGlzLl9zcGFuQ29udGV4dC5zcGFuSWQgKyBcIn1cIiksIHRoaXMuX2VuZGVkO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuX3RydW5jYXRlVG9MaW1pdFV0aWwgPSBmdW5jdGlvbih0LCBlKSB7XG4gICAgICByZXR1cm4gdC5sZW5ndGggPD0gZSA/IHQgOiB0LnN1YnN0cmluZygwLCBlKTtcbiAgICB9LCByJDEucHJvdG90eXBlLl90cnVuY2F0ZVRvU2l6ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBlID0gdGhpcywgbiA9IHRoaXMuX2F0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQ7XG4gICAgICByZXR1cm4gbiA8PSAwID8gKHIud2FybihcIkF0dHJpYnV0ZSB2YWx1ZSBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgXCIgKyBuKSwgdCkgOiB0eXBlb2YgdCA9PSBcInN0cmluZ1wiID8gdGhpcy5fdHJ1bmNhdGVUb0xpbWl0VXRpbCh0LCBuKSA6IEFycmF5LmlzQXJyYXkodCkgPyB0Lm1hcChmdW5jdGlvbihvKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbyA9PSBcInN0cmluZ1wiID8gZS5fdHJ1bmNhdGVUb0xpbWl0VXRpbChvLCBuKSA6IG87XG4gICAgICB9KSA6IHQ7XG4gICAgfSwgciQxO1xuICB9KClcbiksIFA7XG4oZnVuY3Rpb24ocikge1xuICByW3IuTk9UX1JFQ09SRCA9IDBdID0gXCJOT1RfUkVDT1JEXCIsIHJbci5SRUNPUkQgPSAxXSA9IFwiUkVDT1JEXCIsIHJbci5SRUNPUkRfQU5EX1NBTVBMRUQgPSAyXSA9IFwiUkVDT1JEX0FORF9TQU1QTEVEXCI7XG59KShQIHx8IChQID0ge30pKTtcbnZhciBSID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIHIoKSB7XG4gICAgfVxuICAgIHJldHVybiByLnByb3RvdHlwZS5zaG91bGRTYW1wbGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlY2lzaW9uOiBQLk5PVF9SRUNPUkRcbiAgICAgIH07XG4gICAgfSwgci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBcIkFsd2F5c09mZlNhbXBsZXJcIjtcbiAgICB9LCByO1xuICB9KClcbiksIGcgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gcigpIHtcbiAgICB9XG4gICAgcmV0dXJuIHIucHJvdG90eXBlLnNob3VsZFNhbXBsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVjaXNpb246IFAuUkVDT1JEX0FORF9TQU1QTEVEXG4gICAgICB9O1xuICAgIH0sIHIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXCJBbHdheXNPblNhbXBsZXJcIjtcbiAgICB9LCByO1xuICB9KClcbiksIEIgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gcih0KSB7XG4gICAgICB2YXIgZSwgbiwgbywgaTtcbiAgICAgIHRoaXMuX3Jvb3QgPSB0LnJvb3QsIHRoaXMuX3Jvb3QgfHwgKEVyKG5ldyBFcnJvcihcIlBhcmVudEJhc2VkU2FtcGxlciBtdXN0IGhhdmUgYSByb290IHNhbXBsZXIgY29uZmlndXJlZFwiKSksIHRoaXMuX3Jvb3QgPSBuZXcgZygpKSwgdGhpcy5fcmVtb3RlUGFyZW50U2FtcGxlZCA9IChlID0gdC5yZW1vdGVQYXJlbnRTYW1wbGVkKSAhPT0gbnVsbCAmJiBlICE9PSB2b2lkIDAgPyBlIDogbmV3IGcoKSwgdGhpcy5fcmVtb3RlUGFyZW50Tm90U2FtcGxlZCA9IChuID0gdC5yZW1vdGVQYXJlbnROb3RTYW1wbGVkKSAhPT0gbnVsbCAmJiBuICE9PSB2b2lkIDAgPyBuIDogbmV3IFIoKSwgdGhpcy5fbG9jYWxQYXJlbnRTYW1wbGVkID0gKG8gPSB0LmxvY2FsUGFyZW50U2FtcGxlZCkgIT09IG51bGwgJiYgbyAhPT0gdm9pZCAwID8gbyA6IG5ldyBnKCksIHRoaXMuX2xvY2FsUGFyZW50Tm90U2FtcGxlZCA9IChpID0gdC5sb2NhbFBhcmVudE5vdFNhbXBsZWQpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBuZXcgUigpO1xuICAgIH1cbiAgICByZXR1cm4gci5wcm90b3R5cGUuc2hvdWxkU2FtcGxlID0gZnVuY3Rpb24odCwgZSwgbiwgbywgaSwgYSkge1xuICAgICAgdmFyIHMgPSBNZS5nZXRTcGFuQ29udGV4dCh0KTtcbiAgICAgIHJldHVybiAhcyB8fCAheW4ocykgPyB0aGlzLl9yb290LnNob3VsZFNhbXBsZSh0LCBlLCBuLCBvLCBpLCBhKSA6IHMuaXNSZW1vdGUgPyBzLnRyYWNlRmxhZ3MgJiBCdCQxLlNBTVBMRUQgPyB0aGlzLl9yZW1vdGVQYXJlbnRTYW1wbGVkLnNob3VsZFNhbXBsZSh0LCBlLCBuLCBvLCBpLCBhKSA6IHRoaXMuX3JlbW90ZVBhcmVudE5vdFNhbXBsZWQuc2hvdWxkU2FtcGxlKHQsIGUsIG4sIG8sIGksIGEpIDogcy50cmFjZUZsYWdzICYgQnQkMS5TQU1QTEVEID8gdGhpcy5fbG9jYWxQYXJlbnRTYW1wbGVkLnNob3VsZFNhbXBsZSh0LCBlLCBuLCBvLCBpLCBhKSA6IHRoaXMuX2xvY2FsUGFyZW50Tm90U2FtcGxlZC5zaG91bGRTYW1wbGUodCwgZSwgbiwgbywgaSwgYSk7XG4gICAgfSwgci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBcIlBhcmVudEJhc2Vke3Jvb3Q9XCIgKyB0aGlzLl9yb290LnRvU3RyaW5nKCkgKyBcIiwgcmVtb3RlUGFyZW50U2FtcGxlZD1cIiArIHRoaXMuX3JlbW90ZVBhcmVudFNhbXBsZWQudG9TdHJpbmcoKSArIFwiLCByZW1vdGVQYXJlbnROb3RTYW1wbGVkPVwiICsgdGhpcy5fcmVtb3RlUGFyZW50Tm90U2FtcGxlZC50b1N0cmluZygpICsgXCIsIGxvY2FsUGFyZW50U2FtcGxlZD1cIiArIHRoaXMuX2xvY2FsUGFyZW50U2FtcGxlZC50b1N0cmluZygpICsgXCIsIGxvY2FsUGFyZW50Tm90U2FtcGxlZD1cIiArIHRoaXMuX2xvY2FsUGFyZW50Tm90U2FtcGxlZC50b1N0cmluZygpICsgXCJ9XCI7XG4gICAgfSwgcjtcbiAgfSgpXG4pLCBXID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIHIodCkge1xuICAgICAgdCA9PT0gdm9pZCAwICYmICh0ID0gMCksIHRoaXMuX3JhdGlvID0gdCwgdGhpcy5fcmF0aW8gPSB0aGlzLl9ub3JtYWxpemUodCksIHRoaXMuX3VwcGVyQm91bmQgPSBNYXRoLmZsb29yKHRoaXMuX3JhdGlvICogNDI5NDk2NzI5NSk7XG4gICAgfVxuICAgIHJldHVybiByLnByb3RvdHlwZS5zaG91bGRTYW1wbGUgPSBmdW5jdGlvbih0LCBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWNpc2lvbjogZHMoZSkgJiYgdGhpcy5fYWNjdW11bGF0ZShlKSA8IHRoaXMuX3VwcGVyQm91bmQgPyBQLlJFQ09SRF9BTkRfU0FNUExFRCA6IFAuTk9UX1JFQ09SRFxuICAgICAgfTtcbiAgICB9LCByLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFwiVHJhY2VJZFJhdGlvQmFzZWR7XCIgKyB0aGlzLl9yYXRpbyArIFwifVwiO1xuICAgIH0sIHIucHJvdG90eXBlLl9ub3JtYWxpemUgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHQgIT0gXCJudW1iZXJcIiB8fCBpc05hTih0KSA/IDAgOiB0ID49IDEgPyAxIDogdCA8PSAwID8gMCA6IHQ7XG4gICAgfSwgci5wcm90b3R5cGUuX2FjY3VtdWxhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICBmb3IgKHZhciBlID0gMCwgbiA9IDA7IG4gPCB0Lmxlbmd0aCAvIDg7IG4rKykge1xuICAgICAgICB2YXIgbyA9IG4gKiA4LCBpID0gcGFyc2VJbnQodC5zbGljZShvLCBvICsgOCksIDE2KTtcbiAgICAgICAgZSA9IChlIF4gaSkgPj4+IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gZTtcbiAgICB9LCByO1xuICB9KClcbiksIFJ0ID0gdi5BbHdheXNPbiwgRSA9IDE7XG5mdW5jdGlvbiBKKCkge1xuICB2YXIgciA9IE9lKCk7XG4gIHJldHVybiB7XG4gICAgc2FtcGxlcjogJChyKSxcbiAgICBmb3JjZUZsdXNoVGltZW91dE1pbGxpczogM2U0LFxuICAgIGdlbmVyYWxMaW1pdHM6IHtcbiAgICAgIGF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQ6IHIuT1RFTF9BVFRSSUJVVEVfVkFMVUVfTEVOR1RIX0xJTUlULFxuICAgICAgYXR0cmlidXRlQ291bnRMaW1pdDogci5PVEVMX0FUVFJJQlVURV9DT1VOVF9MSU1JVFxuICAgIH0sXG4gICAgc3BhbkxpbWl0czoge1xuICAgICAgYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdDogci5PVEVMX1NQQU5fQVRUUklCVVRFX1ZBTFVFX0xFTkdUSF9MSU1JVCxcbiAgICAgIGF0dHJpYnV0ZUNvdW50TGltaXQ6IHIuT1RFTF9TUEFOX0FUVFJJQlVURV9DT1VOVF9MSU1JVCxcbiAgICAgIGxpbmtDb3VudExpbWl0OiByLk9URUxfU1BBTl9MSU5LX0NPVU5UX0xJTUlULFxuICAgICAgZXZlbnRDb3VudExpbWl0OiByLk9URUxfU1BBTl9FVkVOVF9DT1VOVF9MSU1JVCxcbiAgICAgIGF0dHJpYnV0ZVBlckV2ZW50Q291bnRMaW1pdDogci5PVEVMX1NQQU5fQVRUUklCVVRFX1BFUl9FVkVOVF9DT1VOVF9MSU1JVCxcbiAgICAgIGF0dHJpYnV0ZVBlckxpbmtDb3VudExpbWl0OiByLk9URUxfU1BBTl9BVFRSSUJVVEVfUEVSX0xJTktfQ09VTlRfTElNSVRcbiAgICB9LFxuICAgIG1lcmdlUmVzb3VyY2VXaXRoRGVmYXVsdHM6IHRydWVcbiAgfTtcbn1cbmZ1bmN0aW9uICQociQxKSB7XG4gIHN3aXRjaCAociQxID09PSB2b2lkIDAgJiYgKHIkMSA9IE9lKCkpLCByJDEuT1RFTF9UUkFDRVNfU0FNUExFUikge1xuICAgIGNhc2Ugdi5BbHdheXNPbjpcbiAgICAgIHJldHVybiBuZXcgZygpO1xuICAgIGNhc2Ugdi5BbHdheXNPZmY6XG4gICAgICByZXR1cm4gbmV3IFIoKTtcbiAgICBjYXNlIHYuUGFyZW50QmFzZWRBbHdheXNPbjpcbiAgICAgIHJldHVybiBuZXcgQih7XG4gICAgICAgIHJvb3Q6IG5ldyBnKClcbiAgICAgIH0pO1xuICAgIGNhc2Ugdi5QYXJlbnRCYXNlZEFsd2F5c09mZjpcbiAgICAgIHJldHVybiBuZXcgQih7XG4gICAgICAgIHJvb3Q6IG5ldyBSKClcbiAgICAgIH0pO1xuICAgIGNhc2Ugdi5UcmFjZUlkUmF0aW86XG4gICAgICByZXR1cm4gbmV3IFcoWShyJDEpKTtcbiAgICBjYXNlIHYuUGFyZW50QmFzZWRUcmFjZUlkUmF0aW86XG4gICAgICByZXR1cm4gbmV3IEIoe1xuICAgICAgICByb290OiBuZXcgVyhZKHIkMSkpXG4gICAgICB9KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHIuZXJyb3IoJ09URUxfVFJBQ0VTX1NBTVBMRVIgdmFsdWUgXCInICsgciQxLk9URUxfVFJBQ0VTX1NBTVBMRVIgKyBcIiBpbnZhbGlkLCBkZWZhdWx0aW5nIHRvIFwiICsgUnQgKyAnXCIuJyksIG5ldyBnKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIFkociQxKSB7XG4gIGlmIChyJDEuT1RFTF9UUkFDRVNfU0FNUExFUl9BUkcgPT09IHZvaWQgMCB8fCByJDEuT1RFTF9UUkFDRVNfU0FNUExFUl9BUkcgPT09IFwiXCIpXG4gICAgcmV0dXJuIHIuZXJyb3IoXCJPVEVMX1RSQUNFU19TQU1QTEVSX0FSRyBpcyBibGFuaywgZGVmYXVsdGluZyB0byBcIiArIEUgKyBcIi5cIiksIEU7XG4gIHZhciB0ID0gTnVtYmVyKHIkMS5PVEVMX1RSQUNFU19TQU1QTEVSX0FSRyk7XG4gIHJldHVybiBpc05hTih0KSA/IChyLmVycm9yKFwiT1RFTF9UUkFDRVNfU0FNUExFUl9BUkc9XCIgKyByJDEuT1RFTF9UUkFDRVNfU0FNUExFUl9BUkcgKyBcIiB3YXMgZ2l2ZW4sIGJ1dCBpdCBpcyBpbnZhbGlkLCBkZWZhdWx0aW5nIHRvIFwiICsgRSArIFwiLlwiKSwgRSkgOiB0IDwgMCB8fCB0ID4gMSA/IChyLmVycm9yKFwiT1RFTF9UUkFDRVNfU0FNUExFUl9BUkc9XCIgKyByJDEuT1RFTF9UUkFDRVNfU0FNUExFUl9BUkcgKyBcIiB3YXMgZ2l2ZW4sIGJ1dCBpdCBpcyBvdXQgb2YgcmFuZ2UgKFswLi4xXSksIGRlZmF1bHRpbmcgdG8gXCIgKyBFICsgXCIuXCIpLCBFKSA6IHQ7XG59XG5mdW5jdGlvbiBJdChyKSB7XG4gIHZhciB0ID0ge1xuICAgIHNhbXBsZXI6ICQoKVxuICB9LCBlID0gSigpLCBuID0gT2JqZWN0LmFzc2lnbih7fSwgZSwgdCwgcik7XG4gIHJldHVybiBuLmdlbmVyYWxMaW1pdHMgPSBPYmplY3QuYXNzaWduKHt9LCBlLmdlbmVyYWxMaW1pdHMsIHIuZ2VuZXJhbExpbWl0cyB8fCB7fSksIG4uc3BhbkxpbWl0cyA9IE9iamVjdC5hc3NpZ24oe30sIGUuc3BhbkxpbWl0cywgci5zcGFuTGltaXRzIHx8IHt9KSwgbjtcbn1cbmZ1bmN0aW9uIE50KHIpIHtcbiAgdmFyIHQsIGUsIG4sIG8sIGksIGEsIHMsIGwsIHUsIHAkMSwgYywgZiwgeSA9IE9iamVjdC5hc3NpZ24oe30sIHIuc3BhbkxpbWl0cyksIG0gPSBjZSgpO1xuICByZXR1cm4geS5hdHRyaWJ1dGVDb3VudExpbWl0ID0gKGEgPSAoaSA9IChvID0gKGUgPSAodCA9IHIuc3BhbkxpbWl0cykgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdC5hdHRyaWJ1dGVDb3VudExpbWl0KSAhPT0gbnVsbCAmJiBlICE9PSB2b2lkIDAgPyBlIDogKG4gPSByLmdlbmVyYWxMaW1pdHMpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uYXR0cmlidXRlQ291bnRMaW1pdCkgIT09IG51bGwgJiYgbyAhPT0gdm9pZCAwID8gbyA6IG0uT1RFTF9TUEFOX0FUVFJJQlVURV9DT1VOVF9MSU1JVCkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IG0uT1RFTF9BVFRSSUJVVEVfQ09VTlRfTElNSVQpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiBkLCB5LmF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQgPSAoZiA9IChjID0gKHAkMSA9IChsID0gKHMgPSByLnNwYW5MaW1pdHMpID09PSBudWxsIHx8IHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHMuYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdCkgIT09IG51bGwgJiYgbCAhPT0gdm9pZCAwID8gbCA6ICh1ID0gci5nZW5lcmFsTGltaXRzKSA9PT0gbnVsbCB8fCB1ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB1LmF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQpICE9PSBudWxsICYmIHAkMSAhPT0gdm9pZCAwID8gcCQxIDogbS5PVEVMX1NQQU5fQVRUUklCVVRFX1ZBTFVFX0xFTkdUSF9MSU1JVCkgIT09IG51bGwgJiYgYyAhPT0gdm9pZCAwID8gYyA6IG0uT1RFTF9BVFRSSUJVVEVfVkFMVUVfTEVOR1RIX0xJTUlUKSAhPT0gbnVsbCAmJiBmICE9PSB2b2lkIDAgPyBmIDogcCwgT2JqZWN0LmFzc2lnbih7fSwgciwgeyBzcGFuTGltaXRzOiB5IH0pO1xufVxudmFyIE10ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIHIkMSh0LCBlKSB7XG4gICAgICB0aGlzLl9leHBvcnRlciA9IHQsIHRoaXMuX2lzRXhwb3J0aW5nID0gZmFsc2UsIHRoaXMuX2ZpbmlzaGVkU3BhbnMgPSBbXSwgdGhpcy5fZHJvcHBlZFNwYW5zQ291bnQgPSAwO1xuICAgICAgdmFyIG4gPSBPZSgpO1xuICAgICAgdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplID0gdHlwZW9mIGU/Lm1heEV4cG9ydEJhdGNoU2l6ZSA9PSBcIm51bWJlclwiID8gZS5tYXhFeHBvcnRCYXRjaFNpemUgOiBuLk9URUxfQlNQX01BWF9FWFBPUlRfQkFUQ0hfU0laRSwgdGhpcy5fbWF4UXVldWVTaXplID0gdHlwZW9mIGU/Lm1heFF1ZXVlU2l6ZSA9PSBcIm51bWJlclwiID8gZS5tYXhRdWV1ZVNpemUgOiBuLk9URUxfQlNQX01BWF9RVUVVRV9TSVpFLCB0aGlzLl9zY2hlZHVsZWREZWxheU1pbGxpcyA9IHR5cGVvZiBlPy5zY2hlZHVsZWREZWxheU1pbGxpcyA9PSBcIm51bWJlclwiID8gZS5zY2hlZHVsZWREZWxheU1pbGxpcyA6IG4uT1RFTF9CU1BfU0NIRURVTEVfREVMQVksIHRoaXMuX2V4cG9ydFRpbWVvdXRNaWxsaXMgPSB0eXBlb2YgZT8uZXhwb3J0VGltZW91dE1pbGxpcyA9PSBcIm51bWJlclwiID8gZS5leHBvcnRUaW1lb3V0TWlsbGlzIDogbi5PVEVMX0JTUF9FWFBPUlRfVElNRU9VVCwgdGhpcy5fc2h1dGRvd25PbmNlID0gbmV3IGZ0KHRoaXMuX3NodXRkb3duLCB0aGlzKSwgdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplID4gdGhpcy5fbWF4UXVldWVTaXplICYmIChyLndhcm4oXCJCYXRjaFNwYW5Qcm9jZXNzb3I6IG1heEV4cG9ydEJhdGNoU2l6ZSBtdXN0IGJlIHNtYWxsZXIgb3IgZXF1YWwgdG8gbWF4UXVldWVTaXplLCBzZXR0aW5nIG1heEV4cG9ydEJhdGNoU2l6ZSB0byBtYXRjaCBtYXhRdWV1ZVNpemVcIiksIHRoaXMuX21heEV4cG9ydEJhdGNoU2l6ZSA9IHRoaXMuX21heFF1ZXVlU2l6ZSk7XG4gICAgfVxuICAgIHJldHVybiByJDEucHJvdG90eXBlLmZvcmNlRmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zaHV0ZG93bk9uY2UuaXNDYWxsZWQgPyB0aGlzLl9zaHV0ZG93bk9uY2UucHJvbWlzZSA6IHRoaXMuX2ZsdXNoQWxsKCk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5vblN0YXJ0ID0gZnVuY3Rpb24odCwgZSkge1xuICAgIH0sIHIkMS5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbih0KSB7XG4gICAgICB0aGlzLl9zaHV0ZG93bk9uY2UuaXNDYWxsZWQgfHwgKHQuc3BhbkNvbnRleHQoKS50cmFjZUZsYWdzICYgQnQkMS5TQU1QTEVEKSAhPT0gMCAmJiB0aGlzLl9hZGRUb0J1ZmZlcih0KTtcbiAgICB9LCByJDEucHJvdG90eXBlLnNodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2h1dGRvd25PbmNlLmNhbGwoKTtcbiAgICB9LCByJDEucHJvdG90eXBlLl9zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSB0aGlzO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0Lm9uU2h1dGRvd24oKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0Ll9mbHVzaEFsbCgpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHQuX2V4cG9ydGVyLnNodXRkb3duKCk7XG4gICAgICB9KTtcbiAgICB9LCByJDEucHJvdG90eXBlLl9hZGRUb0J1ZmZlciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIGlmICh0aGlzLl9maW5pc2hlZFNwYW5zLmxlbmd0aCA+PSB0aGlzLl9tYXhRdWV1ZVNpemUpIHtcbiAgICAgICAgdGhpcy5fZHJvcHBlZFNwYW5zQ291bnQgPT09IDAgJiYgci5kZWJ1ZyhcIm1heFF1ZXVlU2l6ZSByZWFjaGVkLCBkcm9wcGluZyBzcGFuc1wiKSwgdGhpcy5fZHJvcHBlZFNwYW5zQ291bnQrKztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fZHJvcHBlZFNwYW5zQ291bnQgPiAwICYmIChyLndhcm4oXCJEcm9wcGVkIFwiICsgdGhpcy5fZHJvcHBlZFNwYW5zQ291bnQgKyBcIiBzcGFucyBiZWNhdXNlIG1heFF1ZXVlU2l6ZSByZWFjaGVkXCIpLCB0aGlzLl9kcm9wcGVkU3BhbnNDb3VudCA9IDApLCB0aGlzLl9maW5pc2hlZFNwYW5zLnB1c2godCksIHRoaXMuX21heWJlU3RhcnRUaW1lcigpO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuX2ZsdXNoQWxsID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdCA9IHRoaXM7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSwgbikge1xuICAgICAgICBmb3IgKHZhciBvID0gW10sIGkgPSBNYXRoLmNlaWwodC5fZmluaXNoZWRTcGFucy5sZW5ndGggLyB0Ll9tYXhFeHBvcnRCYXRjaFNpemUpLCBhID0gMCwgcyA9IGk7IGEgPCBzOyBhKyspXG4gICAgICAgICAgby5wdXNoKHQuX2ZsdXNoT25lQmF0Y2goKSk7XG4gICAgICAgIFByb21pc2UuYWxsKG8pLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZSgpO1xuICAgICAgICB9KS5jYXRjaChuKTtcbiAgICAgIH0pO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuX2ZsdXNoT25lQmF0Y2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gdGhpcztcbiAgICAgIHJldHVybiB0aGlzLl9jbGVhclRpbWVyKCksIHRoaXMuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoID09PSAwID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLCBuKSB7XG4gICAgICAgIHZhciBvID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBuKG5ldyBFcnJvcihcIlRpbWVvdXRcIikpO1xuICAgICAgICB9LCB0Ll9leHBvcnRUaW1lb3V0TWlsbGlzKTtcbiAgICAgICAgVGUud2l0aCh1KFRlLmFjdGl2ZSgpKSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgdC5fZmluaXNoZWRTcGFucy5sZW5ndGggPD0gdC5fbWF4RXhwb3J0QmF0Y2hTaXplID8gKGkgPSB0Ll9maW5pc2hlZFNwYW5zLCB0Ll9maW5pc2hlZFNwYW5zID0gW10pIDogaSA9IHQuX2ZpbmlzaGVkU3BhbnMuc3BsaWNlKDAsIHQuX21heEV4cG9ydEJhdGNoU2l6ZSk7XG4gICAgICAgICAgZm9yICh2YXIgYSQxID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdC5fZXhwb3J0ZXIuZXhwb3J0KGksIGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICAgICAgdmFyIGY7XG4gICAgICAgICAgICAgIGNsZWFyVGltZW91dChvKSwgYy5jb2RlID09PSBhLlNVQ0NFU1MgPyBlKCkgOiBuKChmID0gYy5lcnJvcikgIT09IG51bGwgJiYgZiAhPT0gdm9pZCAwID8gZiA6IG5ldyBFcnJvcihcIkJhdGNoU3BhblByb2Nlc3Nvcjogc3BhbiBleHBvcnQgZmFpbGVkXCIpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sIHMgPSBudWxsLCBsID0gMCwgdSA9IGkubGVuZ3RoOyBsIDwgdTsgbCsrKSB7XG4gICAgICAgICAgICB2YXIgcCA9IGlbbF07XG4gICAgICAgICAgICBwLnJlc291cmNlLmFzeW5jQXR0cmlidXRlc1BlbmRpbmcgJiYgcC5yZXNvdXJjZS53YWl0Rm9yQXN5bmNBdHRyaWJ1dGVzICYmIChzID8/IChzID0gW10pLCBzLnB1c2gocC5yZXNvdXJjZS53YWl0Rm9yQXN5bmNBdHRyaWJ1dGVzKCkpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcyA9PT0gbnVsbCA/IGEkMSgpIDogUHJvbWlzZS5hbGwocykudGhlbihhJDEsIGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICAgIEVyKGMpLCBuKGMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuX21heWJlU3RhcnRUaW1lciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSB0aGlzO1xuICAgICAgaWYgKCF0aGlzLl9pc0V4cG9ydGluZykge1xuICAgICAgICB2YXIgZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHQuX2lzRXhwb3J0aW5nID0gdHJ1ZSwgdC5fZmx1c2hPbmVCYXRjaCgpLmZpbmFsbHkoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0Ll9pc0V4cG9ydGluZyA9IGZhbHNlLCB0Ll9maW5pc2hlZFNwYW5zLmxlbmd0aCA+IDAgJiYgKHQuX2NsZWFyVGltZXIoKSwgdC5fbWF5YmVTdGFydFRpbWVyKCkpO1xuICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgIHQuX2lzRXhwb3J0aW5nID0gZmFsc2UsIEVyKG4pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5fZmluaXNoZWRTcGFucy5sZW5ndGggPj0gdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplKVxuICAgICAgICAgIHJldHVybiBlKCk7XG4gICAgICAgIHRoaXMuX3RpbWVyID09PSB2b2lkIDAgJiYgKHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gZSgpO1xuICAgICAgICB9LCB0aGlzLl9zY2hlZHVsZWREZWxheU1pbGxpcyksIFNlKHRoaXMuX3RpbWVyKSk7XG4gICAgICB9XG4gICAgfSwgciQxLnByb3RvdHlwZS5fY2xlYXJUaW1lciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fdGltZXIgIT09IHZvaWQgMCAmJiAoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKSwgdGhpcy5fdGltZXIgPSB2b2lkIDApO1xuICAgIH0sIHIkMTtcbiAgfSgpXG4pLCBCdCA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIHIgPSBmdW5jdGlvbih0LCBlKSB7XG4gICAgcmV0dXJuIHIgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihuLCBvKSB7XG4gICAgICBuLl9fcHJvdG9fXyA9IG87XG4gICAgfSB8fCBmdW5jdGlvbihuLCBvKSB7XG4gICAgICBmb3IgKHZhciBpIGluIG8pIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBpKSAmJiAobltpXSA9IG9baV0pO1xuICAgIH0sIHIodCwgZSk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbih0LCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoZSkgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgIHIodCwgZSk7XG4gICAgZnVuY3Rpb24gbigpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSB0O1xuICAgIH1cbiAgICB0LnByb3RvdHlwZSA9IGUgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGUpIDogKG4ucHJvdG90eXBlID0gZS5wcm90b3R5cGUsIG5ldyBuKCkpO1xuICB9O1xufSgpLCBEdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbihyKSB7XG4gICAgQnQodCwgcik7XG4gICAgZnVuY3Rpb24gdChlLCBuKSB7XG4gICAgICB2YXIgbyA9IHIuY2FsbCh0aGlzLCBlLCBuKSB8fCB0aGlzO1xuICAgICAgcmV0dXJuIG8ub25Jbml0KG4pLCBvO1xuICAgIH1cbiAgICByZXR1cm4gdC5wcm90b3R5cGUub25Jbml0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgdmFyIG4gPSB0aGlzO1xuICAgICAgZT8uZGlzYWJsZUF1dG9GbHVzaE9uRG9jdW1lbnRIaWRlICE9PSB0cnVlICYmIHR5cGVvZiBkb2N1bWVudCA8IFwidVwiICYmICh0aGlzLl92aXNpYmlsaXR5Q2hhbmdlTGlzdGVuZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSBcImhpZGRlblwiICYmIG4uZm9yY2VGbHVzaCgpLmNhdGNoKGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICBFcihvKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCB0aGlzLl9wYWdlSGlkZUxpc3RlbmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIG4uZm9yY2VGbHVzaCgpLmNhdGNoKGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICBFcihvKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCB0aGlzLl92aXNpYmlsaXR5Q2hhbmdlTGlzdGVuZXIpLCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicGFnZWhpZGVcIiwgdGhpcy5fcGFnZUhpZGVMaXN0ZW5lcikpO1xuICAgIH0sIHQucHJvdG90eXBlLm9uU2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHR5cGVvZiBkb2N1bWVudCA8IFwidVwiICYmICh0aGlzLl92aXNpYmlsaXR5Q2hhbmdlTGlzdGVuZXIgJiYgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIiwgdGhpcy5fdmlzaWJpbGl0eUNoYW5nZUxpc3RlbmVyKSwgdGhpcy5fcGFnZUhpZGVMaXN0ZW5lciAmJiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicGFnZWhpZGVcIiwgdGhpcy5fcGFnZUhpZGVMaXN0ZW5lcikpO1xuICAgIH0sIHQ7XG4gIH0oTXQpXG4pLCBVdCA9IDgsIEZ0ID0gMTYsIEd0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiByKCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZVRyYWNlSWQgPSBxKEZ0KSwgdGhpcy5nZW5lcmF0ZVNwYW5JZCA9IHEoVXQpO1xuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfSgpXG4pLCBDID0gQXJyYXkoMzIpO1xuZnVuY3Rpb24gcShyKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBlID0gMDsgZSA8IHIgKiAyOyBlKyspXG4gICAgICBDW2VdID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTYpICsgNDgsIENbZV0gPj0gNTggJiYgKENbZV0gKz0gMzkpO1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIEMuc2xpY2UoMCwgciAqIDIpKTtcbiAgfTtcbn1cbnZhciB6dCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiByJDEodCwgZSwgbikge1xuICAgICAgdGhpcy5fdHJhY2VyUHJvdmlkZXIgPSBuO1xuICAgICAgdmFyIG8gPSBJdChlKTtcbiAgICAgIHRoaXMuX3NhbXBsZXIgPSBvLnNhbXBsZXIsIHRoaXMuX2dlbmVyYWxMaW1pdHMgPSBvLmdlbmVyYWxMaW1pdHMsIHRoaXMuX3NwYW5MaW1pdHMgPSBvLnNwYW5MaW1pdHMsIHRoaXMuX2lkR2VuZXJhdG9yID0gZS5pZEdlbmVyYXRvciB8fCBuZXcgR3QoKSwgdGhpcy5yZXNvdXJjZSA9IG4ucmVzb3VyY2UsIHRoaXMuaW5zdHJ1bWVudGF0aW9uTGlicmFyeSA9IHQ7XG4gICAgfVxuICAgIHJldHVybiByJDEucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uKHQsIGUsIG4pIHtcbiAgICAgIHZhciBvLCBpLCBhO1xuICAgICAgZSA9PT0gdm9pZCAwICYmIChlID0ge30pLCBuID09PSB2b2lkIDAgJiYgKG4gPSBUZS5hY3RpdmUoKSksIGUucm9vdCAmJiAobiA9IE1lLmRlbGV0ZVNwYW4obikpO1xuICAgICAgdmFyIHMgPSBNZS5nZXRTcGFuKG4pO1xuICAgICAgaWYgKGEkMShuKSkge1xuICAgICAgICByLmRlYnVnKFwiSW5zdHJ1bWVudGF0aW9uIHN1cHByZXNzZWQsIHJldHVybmluZyBOb29wIFNwYW5cIik7XG4gICAgICAgIHZhciBsJDEgPSBNZS53cmFwU3BhbkNvbnRleHQoYXMpO1xuICAgICAgICByZXR1cm4gbCQxO1xuICAgICAgfVxuICAgICAgdmFyIHUgPSBzPy5zcGFuQ29udGV4dCgpLCBwID0gdGhpcy5faWRHZW5lcmF0b3IuZ2VuZXJhdGVTcGFuSWQoKSwgYywgZiwgeTtcbiAgICAgICF1IHx8ICFNZS5pc1NwYW5Db250ZXh0VmFsaWQodSkgPyBjID0gdGhpcy5faWRHZW5lcmF0b3IuZ2VuZXJhdGVUcmFjZUlkKCkgOiAoYyA9IHUudHJhY2VJZCwgZiA9IHUudHJhY2VTdGF0ZSwgeSA9IHUuc3BhbklkKTtcbiAgICAgIHZhciBtID0gKG8gPSBlLmtpbmQpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiBldC5JTlRFUk5BTCwgRiA9ICgoaSA9IGUubGlua3MpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBbXSkubWFwKGZ1bmN0aW9uKGopIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZXh0OiBqLmNvbnRleHQsXG4gICAgICAgICAgYXR0cmlidXRlczogUXIoai5hdHRyaWJ1dGVzKVxuICAgICAgICB9O1xuICAgICAgfSksIEcgPSBRcihlLmF0dHJpYnV0ZXMpLCBiID0gdGhpcy5fc2FtcGxlci5zaG91bGRTYW1wbGUobiwgYywgdCwgbSwgRywgRik7XG4gICAgICBmID0gKGEgPSBiLnRyYWNlU3RhdGUpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiBmO1xuICAgICAgdmFyIHR0ID0gYi5kZWNpc2lvbiA9PT0gbC5SRUNPUkRfQU5EX1NBTVBMRUQgPyBCdCQxLlNBTVBMRUQgOiBCdCQxLk5PTkUsIHogPSB7IHRyYWNlSWQ6IGMsIHNwYW5JZDogcCwgdHJhY2VGbGFnczogdHQsIHRyYWNlU3RhdGU6IGYgfTtcbiAgICAgIGlmIChiLmRlY2lzaW9uID09PSBsLk5PVF9SRUNPUkQpIHtcbiAgICAgICAgci5kZWJ1ZyhcIlJlY29yZGluZyBpcyBvZmYsIHByb3BhZ2F0aW5nIGNvbnRleHQgaW4gYSBub24tcmVjb3JkaW5nIHNwYW5cIik7XG4gICAgICAgIHZhciBsJDEgPSBNZS53cmFwU3BhbkNvbnRleHQoeik7XG4gICAgICAgIHJldHVybiBsJDE7XG4gICAgICB9XG4gICAgICB2YXIgZXQkMSA9IFFyKE9iamVjdC5hc3NpZ24oRywgYi5hdHRyaWJ1dGVzKSksIHJ0ID0gbmV3IHh0KHRoaXMsIG4sIHQsIHosIG0sIHksIEYsIGUuc3RhcnRUaW1lLCB2b2lkIDAsIGV0JDEpO1xuICAgICAgcmV0dXJuIHJ0O1xuICAgIH0sIHIkMS5wcm90b3R5cGUuc3RhcnRBY3RpdmVTcGFuID0gZnVuY3Rpb24odCwgZSwgbiwgbykge1xuICAgICAgdmFyIGksIGEsIHM7XG4gICAgICBpZiAoIShhcmd1bWVudHMubGVuZ3RoIDwgMikpIHtcbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMiA/IHMgPSBlIDogYXJndW1lbnRzLmxlbmd0aCA9PT0gMyA/IChpID0gZSwgcyA9IG4pIDogKGkgPSBlLCBhID0gbiwgcyA9IG8pO1xuICAgICAgICB2YXIgbCA9IGEgPz8gVGUuYWN0aXZlKCksIHUgPSB0aGlzLnN0YXJ0U3Bhbih0LCBpLCBsKSwgcCA9IE1lLnNldFNwYW4obCwgdSk7XG4gICAgICAgIHJldHVybiBUZS53aXRoKHAsIHMsIHZvaWQgMCwgdSk7XG4gICAgICB9XG4gICAgfSwgciQxLnByb3RvdHlwZS5nZXRHZW5lcmFsTGltaXRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2VuZXJhbExpbWl0cztcbiAgICB9LCByJDEucHJvdG90eXBlLmdldFNwYW5MaW1pdHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zcGFuTGltaXRzO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuZ2V0QWN0aXZlU3BhblByb2Nlc3NvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYWNlclByb3ZpZGVyLmdldEFjdGl2ZVNwYW5Qcm9jZXNzb3IoKTtcbiAgICB9LCByJDE7XG4gIH0oKVxuKSwgTyA9IGZ1bmN0aW9uKHIpIHtcbiAgdmFyIHQgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIGUgPSB0ICYmIHJbdF0sIG4gPSAwO1xuICBpZiAoZSkgcmV0dXJuIGUuY2FsbChyKTtcbiAgaWYgKHIgJiYgdHlwZW9mIHIubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gciAmJiBuID49IHIubGVuZ3RoICYmIChyID0gdm9pZCAwKSwgeyB2YWx1ZTogciAmJiByW24rK10sIGRvbmU6ICFyIH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHQgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59LCBLID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIHIodCkge1xuICAgICAgdGhpcy5fc3BhblByb2Nlc3NvcnMgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gci5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQsIGUsIG4gPSBbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIG8gPSBPKHRoaXMuX3NwYW5Qcm9jZXNzb3JzKSwgaSA9IG8ubmV4dCgpOyAhaS5kb25lOyBpID0gby5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgYSA9IGkudmFsdWU7XG4gICAgICAgICAgbi5wdXNoKGEuZm9yY2VGbHVzaCgpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICB0ID0geyBlcnJvcjogcyB9O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpICYmICFpLmRvbmUgJiYgKGUgPSBvLnJldHVybikgJiYgZS5jYWxsKG8pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocykge1xuICAgICAgICBQcm9taXNlLmFsbChuKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHMoKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24obCkge1xuICAgICAgICAgIEVyKGwgfHwgbmV3IEVycm9yKFwiTXVsdGlTcGFuUHJvY2Vzc29yOiBmb3JjZUZsdXNoIGZhaWxlZFwiKSksIHMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCByLnByb3RvdHlwZS5vblN0YXJ0ID0gZnVuY3Rpb24odCwgZSkge1xuICAgICAgdmFyIG4sIG87XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKHZhciBpID0gTyh0aGlzLl9zcGFuUHJvY2Vzc29ycyksIGEgPSBpLm5leHQoKTsgIWEuZG9uZTsgYSA9IGkubmV4dCgpKSB7XG4gICAgICAgICAgdmFyIHMgPSBhLnZhbHVlO1xuICAgICAgICAgIHMub25TdGFydCh0LCBlKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICBuID0geyBlcnJvcjogbCB9O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhICYmICFhLmRvbmUgJiYgKG8gPSBpLnJldHVybikgJiYgby5jYWxsKGkpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgci5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgZSwgbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIG8gPSBPKHRoaXMuX3NwYW5Qcm9jZXNzb3JzKSwgaSA9IG8ubmV4dCgpOyAhaS5kb25lOyBpID0gby5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgYSA9IGkudmFsdWU7XG4gICAgICAgICAgYS5vbkVuZCh0KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICBlID0geyBlcnJvcjogcyB9O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpICYmICFpLmRvbmUgJiYgKG4gPSBvLnJldHVybikgJiYgbi5jYWxsKG8pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChlKSB0aHJvdyBlLmVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgci5wcm90b3R5cGUuc2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0LCBlLCBuID0gW107XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKHZhciBvID0gTyh0aGlzLl9zcGFuUHJvY2Vzc29ycyksIGkgPSBvLm5leHQoKTsgIWkuZG9uZTsgaSA9IG8ubmV4dCgpKSB7XG4gICAgICAgICAgdmFyIGEgPSBpLnZhbHVlO1xuICAgICAgICAgIG4ucHVzaChhLnNodXRkb3duKCkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgIHQgPSB7IGVycm9yOiBzIH07XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGkgJiYgIWkuZG9uZSAmJiAoZSA9IG8ucmV0dXJuKSAmJiBlLmNhbGwobyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKHQpIHRocm93IHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihzLCBsKSB7XG4gICAgICAgIFByb21pc2UuYWxsKG4pLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcygpO1xuICAgICAgICB9LCBsKTtcbiAgICAgIH0pO1xuICAgIH0sIHI7XG4gIH0oKVxuKSwganQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gcigpIHtcbiAgICB9XG4gICAgcmV0dXJuIHIucHJvdG90eXBlLm9uU3RhcnQgPSBmdW5jdGlvbih0LCBlKSB7XG4gICAgfSwgci5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbih0KSB7XG4gICAgfSwgci5wcm90b3R5cGUuc2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9LCByLnByb3RvdHlwZS5mb3JjZUZsdXNoID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfSwgcjtcbiAgfSgpXG4pLCBrdCA9IGZ1bmN0aW9uKHIsIHQpIHtcbiAgdmFyIGUgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiByW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghZSkgcmV0dXJuIHI7XG4gIHZhciBuID0gZS5jYWxsKHIpLCBvLCBpID0gW10sIGE7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgaS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChzKSB7XG4gICAgYSA9IHsgZXJyb3I6IHMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChlID0gbi5yZXR1cm4pICYmIGUuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufSwgVnQgPSBmdW5jdGlvbihyLCB0LCBlKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgbyA9IHQubGVuZ3RoLCBpOyBuIDwgbzsgbisrKVxuICAgIChpIHx8ICEobiBpbiB0KSkgJiYgKGkgfHwgKGkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGlbbl0gPSB0W25dKTtcbiAgcmV0dXJuIHIuY29uY2F0KGkgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgUztcbihmdW5jdGlvbihyKSB7XG4gIHJbci5yZXNvbHZlZCA9IDBdID0gXCJyZXNvbHZlZFwiLCByW3IudGltZW91dCA9IDFdID0gXCJ0aW1lb3V0XCIsIHJbci5lcnJvciA9IDJdID0gXCJlcnJvclwiLCByW3IudW5yZXNvbHZlZCA9IDNdID0gXCJ1bnJlc29sdmVkXCI7XG59KShTIHx8IChTID0ge30pKTtcbnZhciB0ZSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiByJDEodCkge1xuICAgICAgdCA9PT0gdm9pZCAwICYmICh0ID0ge30pO1xuICAgICAgdmFyIGUsIG47XG4gICAgICB0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMgPSBbXSwgdGhpcy5fdHJhY2VycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgICB2YXIgbyA9IG50KHt9LCBKKCksIE50KHQpKTtcbiAgICAgIGlmICh0aGlzLnJlc291cmNlID0gKGUgPSBvLnJlc291cmNlKSAhPT0gbnVsbCAmJiBlICE9PSB2b2lkIDAgPyBlIDogUiQxLmVtcHR5KCksIG8ubWVyZ2VSZXNvdXJjZVdpdGhEZWZhdWx0cyAmJiAodGhpcy5yZXNvdXJjZSA9IFIkMS5kZWZhdWx0KCkubWVyZ2UodGhpcy5yZXNvdXJjZSkpLCB0aGlzLl9jb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBvLCB7XG4gICAgICAgIHJlc291cmNlOiB0aGlzLnJlc291cmNlXG4gICAgICB9KSwgISgobiA9IHQuc3BhblByb2Nlc3NvcnMpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCkgJiYgbi5sZW5ndGgpXG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyZWRTcGFuUHJvY2Vzc29ycyA9IFZ0KFtdLCBrdCh0LnNwYW5Qcm9jZXNzb3JzKSwgZmFsc2UpLCB0aGlzLmFjdGl2ZVNwYW5Qcm9jZXNzb3IgPSBuZXcgSyh0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBpID0gdGhpcy5fYnVpbGRFeHBvcnRlckZyb21FbnYoKTtcbiAgICAgICAgaWYgKGkgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHZhciBhID0gbmV3IER0KGkpO1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3BhblByb2Nlc3NvciA9IGE7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHRoaXMuYWN0aXZlU3BhblByb2Nlc3NvciA9IG5ldyBqdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gciQxLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCBlLCBuKSB7XG4gICAgICB2YXIgbyA9IHQgKyBcIkBcIiArIChlIHx8IFwiXCIpICsgXCI6XCIgKyAobj8uc2NoZW1hVXJsIHx8IFwiXCIpO1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYWNlcnMuaGFzKG8pIHx8IHRoaXMuX3RyYWNlcnMuc2V0KG8sIG5ldyB6dCh7IG5hbWU6IHQsIHZlcnNpb246IGUsIHNjaGVtYVVybDogbj8uc2NoZW1hVXJsIH0sIHRoaXMuX2NvbmZpZywgdGhpcykpLCB0aGlzLl90cmFjZXJzLmdldChvKTtcbiAgICB9LCByJDEucHJvdG90eXBlLmFkZFNwYW5Qcm9jZXNzb3IgPSBmdW5jdGlvbih0KSB7XG4gICAgICB0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMubGVuZ3RoID09PSAwICYmIHRoaXMuYWN0aXZlU3BhblByb2Nlc3Nvci5zaHV0ZG93bigpLmNhdGNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgcmV0dXJuIHIuZXJyb3IoXCJFcnJvciB3aGlsZSB0cnlpbmcgdG8gc2h1dGRvd24gY3VycmVudCBzcGFuIHByb2Nlc3NvclwiLCBlKTtcbiAgICAgIH0pLCB0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMucHVzaCh0KSwgdGhpcy5hY3RpdmVTcGFuUHJvY2Vzc29yID0gbmV3IEsodGhpcy5fcmVnaXN0ZXJlZFNwYW5Qcm9jZXNzb3JzKTtcbiAgICB9LCByJDEucHJvdG90eXBlLmdldEFjdGl2ZVNwYW5Qcm9jZXNzb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVNwYW5Qcm9jZXNzb3I7XG4gICAgfSwgciQxLnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHQgPT09IHZvaWQgMCAmJiAodCA9IHt9KSwgTWUuc2V0R2xvYmFsVHJhY2VyUHJvdmlkZXIodGhpcyksIHQucHJvcGFnYXRvciA9PT0gdm9pZCAwICYmICh0LnByb3BhZ2F0b3IgPSB0aGlzLl9idWlsZFByb3BhZ2F0b3JGcm9tRW52KCkpLCB0LmNvbnRleHRNYW5hZ2VyICYmIFRlLnNldEdsb2JhbENvbnRleHRNYW5hZ2VyKHQuY29udGV4dE1hbmFnZXIpLCB0LnByb3BhZ2F0b3IgJiYgeV8uc2V0R2xvYmFsUHJvcGFnYXRvcih0LnByb3BhZ2F0b3IpO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSB0aGlzLl9jb25maWcuZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXMsIGUgPSB0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMubWFwKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICB2YXIgaSwgYSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBvKG5ldyBFcnJvcihcIlNwYW4gcHJvY2Vzc29yIGRpZCBub3QgY29tcGxldGVkIHdpdGhpbiB0aW1lb3V0IHBlcmlvZCBvZiBcIiArIHQgKyBcIiBtc1wiKSksIGkgPSBTLnRpbWVvdXQ7XG4gICAgICAgICAgfSwgdCk7XG4gICAgICAgICAgbi5mb3JjZUZsdXNoKCkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChhKSwgaSAhPT0gUy50aW1lb3V0ICYmIChpID0gUy5yZXNvbHZlZCwgbyhpKSk7XG4gICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGEpLCBpID0gUy5lcnJvciwgbyhzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLCBvKSB7XG4gICAgICAgIFByb21pc2UuYWxsKGUpLnRoZW4oZnVuY3Rpb24oaSkge1xuICAgICAgICAgIHZhciBhID0gaS5maWx0ZXIoZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgcmV0dXJuIHMgIT09IFMucmVzb2x2ZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYS5sZW5ndGggPiAwID8gbyhhKSA6IG4oKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oaSkge1xuICAgICAgICAgIHJldHVybiBvKFtpXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlU3BhblByb2Nlc3Nvci5zaHV0ZG93bigpO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuX2dldFByb3BhZ2F0b3IgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgZTtcbiAgICAgIHJldHVybiAoZSA9IHRoaXMuY29uc3RydWN0b3IuX3JlZ2lzdGVyZWRQcm9wYWdhdG9ycy5nZXQodCkpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUoKTtcbiAgICB9LCByJDEucHJvdG90eXBlLl9nZXRTcGFuRXhwb3J0ZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgZTtcbiAgICAgIHJldHVybiAoZSA9IHRoaXMuY29uc3RydWN0b3IuX3JlZ2lzdGVyZWRFeHBvcnRlcnMuZ2V0KHQpKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlKCk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5fYnVpbGRQcm9wYWdhdG9yRnJvbUVudiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSB0aGlzLCBlID0gQXJyYXkuZnJvbShuZXcgU2V0KE9lKCkuT1RFTF9QUk9QQUdBVE9SUykpLCBuID0gZS5tYXAoZnVuY3Rpb24oaSkge1xuICAgICAgICB2YXIgYSA9IHQuX2dldFByb3BhZ2F0b3IoaSk7XG4gICAgICAgIHJldHVybiBhIHx8IHIud2FybignUHJvcGFnYXRvciBcIicgKyBpICsgJ1wiIHJlcXVlc3RlZCB0aHJvdWdoIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHVuYXZhaWxhYmxlLicpLCBhO1xuICAgICAgfSksIG8gPSBuLnJlZHVjZShmdW5jdGlvbihpLCBhKSB7XG4gICAgICAgIHJldHVybiBhICYmIGkucHVzaChhKSwgaTtcbiAgICAgIH0sIFtdKTtcbiAgICAgIGlmIChvLmxlbmd0aCAhPT0gMClcbiAgICAgICAgcmV0dXJuIGUubGVuZ3RoID09PSAxID8gb1swXSA6IG5ldyB2ZSh7XG4gICAgICAgICAgcHJvcGFnYXRvcnM6IG9cbiAgICAgICAgfSk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5fYnVpbGRFeHBvcnRlckZyb21FbnYgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gT2UoKS5PVEVMX1RSQUNFU19FWFBPUlRFUjtcbiAgICAgIGlmICghKHQgPT09IFwibm9uZVwiIHx8IHQgPT09IFwiXCIpKSB7XG4gICAgICAgIHZhciBlID0gdGhpcy5fZ2V0U3BhbkV4cG9ydGVyKHQpO1xuICAgICAgICByZXR1cm4gZSB8fCByLmVycm9yKCdFeHBvcnRlciBcIicgKyB0ICsgJ1wiIHJlcXVlc3RlZCB0aHJvdWdoIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHVuYXZhaWxhYmxlLicpLCBlO1xuICAgICAgfVxuICAgIH0sIHIkMS5fcmVnaXN0ZXJlZFByb3BhZ2F0b3JzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoW1xuICAgICAgW1widHJhY2Vjb250ZXh0XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IFZlKCk7XG4gICAgICB9XSxcbiAgICAgIFtcImJhZ2dhZ2VcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuZXcgWnIoKTtcbiAgICAgIH1dXG4gICAgXSksIHIkMS5fcmVnaXN0ZXJlZEV4cG9ydGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIHIkMTtcbiAgfSgpXG4pLCBIdCA9IGZ1bmN0aW9uKHIpIHtcbiAgdmFyIHQgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIGUgPSB0ICYmIHJbdF0sIG4gPSAwO1xuICBpZiAoZSkgcmV0dXJuIGUuY2FsbChyKTtcbiAgaWYgKHIgJiYgdHlwZW9mIHIubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gciAmJiBuID49IHIubGVuZ3RoICYmIChyID0gdm9pZCAwKSwgeyB2YWx1ZTogciAmJiByW24rK10sIGRvbmU6ICFyIH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHQgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59LCBlZSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiByKCkge1xuICAgIH1cbiAgICByZXR1cm4gci5wcm90b3R5cGUuZXhwb3J0ID0gZnVuY3Rpb24odCwgZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlbmRTcGFucyh0LCBlKTtcbiAgICB9LCByLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlbmRTcGFucyhbXSksIHRoaXMuZm9yY2VGbHVzaCgpO1xuICAgIH0sIHIucHJvdG90eXBlLmZvcmNlRmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9LCByLnByb3RvdHlwZS5fZXhwb3J0SW5mbyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzb3VyY2U6IHtcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB0LnJlc291cmNlLmF0dHJpYnV0ZXNcbiAgICAgICAgfSxcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9uU2NvcGU6IHQuaW5zdHJ1bWVudGF0aW9uTGlicmFyeSxcbiAgICAgICAgdHJhY2VJZDogdC5zcGFuQ29udGV4dCgpLnRyYWNlSWQsXG4gICAgICAgIHBhcmVudElkOiB0LnBhcmVudFNwYW5JZCxcbiAgICAgICAgdHJhY2VTdGF0ZTogKGUgPSB0LnNwYW5Db250ZXh0KCkudHJhY2VTdGF0ZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5zZXJpYWxpemUoKSxcbiAgICAgICAgbmFtZTogdC5uYW1lLFxuICAgICAgICBpZDogdC5zcGFuQ29udGV4dCgpLnNwYW5JZCxcbiAgICAgICAga2luZDogdC5raW5kLFxuICAgICAgICB0aW1lc3RhbXA6IGplKHQuc3RhcnRUaW1lKSxcbiAgICAgICAgZHVyYXRpb246IGplKHQuZHVyYXRpb24pLFxuICAgICAgICBhdHRyaWJ1dGVzOiB0LmF0dHJpYnV0ZXMsXG4gICAgICAgIHN0YXR1czogdC5zdGF0dXMsXG4gICAgICAgIGV2ZW50czogdC5ldmVudHMsXG4gICAgICAgIGxpbmtzOiB0LmxpbmtzXG4gICAgICB9O1xuICAgIH0sIHIucHJvdG90eXBlLl9zZW5kU3BhbnMgPSBmdW5jdGlvbih0LCBlKSB7XG4gICAgICB2YXIgbiwgbztcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBIdCh0KSwgYSQxID0gaS5uZXh0KCk7ICFhJDEuZG9uZTsgYSQxID0gaS5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgcyA9IGEkMS52YWx1ZTtcbiAgICAgICAgICBjb25zb2xlLmRpcih0aGlzLl9leHBvcnRJbmZvKHMpLCB7IGRlcHRoOiAzIH0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgIG4gPSB7IGVycm9yOiBsIH07XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGEkMSAmJiAhYSQxLmRvbmUgJiYgKG8gPSBpLnJldHVybikgJiYgby5jYWxsKGkpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZSlcbiAgICAgICAgcmV0dXJuIGUoeyBjb2RlOiBhLlNVQ0NFU1MgfSk7XG4gICAgfSwgcjtcbiAgfSgpXG4pLCBRdCA9IGZ1bmN0aW9uKHIsIHQsIGUsIG4pIHtcbiAgZnVuY3Rpb24gbyhpKSB7XG4gICAgcmV0dXJuIGkgaW5zdGFuY2VvZiBlID8gaSA6IG5ldyBlKGZ1bmN0aW9uKGEpIHtcbiAgICAgIGEoaSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAoZSB8fCAoZSA9IFByb21pc2UpKShmdW5jdGlvbihpLCBhKSB7XG4gICAgZnVuY3Rpb24gcyhwKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4ubmV4dChwKSk7XG4gICAgICB9IGNhdGNoIChjKSB7XG4gICAgICAgIGEoYyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwocCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLnRocm93KHApKTtcbiAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgYShjKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShwKSB7XG4gICAgICBwLmRvbmUgPyBpKHAudmFsdWUpIDogbyhwLnZhbHVlKS50aGVuKHMsIGwpO1xuICAgIH1cbiAgICB1KChuID0gbi5hcHBseShyLCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufSwgWHQgPSBmdW5jdGlvbihyLCB0KSB7XG4gIHZhciBlID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKGlbMF0gJiAxKSB0aHJvdyBpWzFdO1xuICAgIHJldHVybiBpWzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBuLCBvLCBpLCBhO1xuICByZXR1cm4gYSA9IHsgbmV4dDogcygwKSwgdGhyb3c6IHMoMSksIHJldHVybjogcygyKSB9LCB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiAoYVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBhO1xuICBmdW5jdGlvbiBzKHUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuIGwoW3UsIHBdKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGwodSkge1xuICAgIGlmIChuKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICBmb3IgKDsgZTsgKSB0cnkge1xuICAgICAgaWYgKG4gPSAxLCBvICYmIChpID0gdVswXSAmIDIgPyBvLnJldHVybiA6IHVbMF0gPyBvLnRocm93IHx8ICgoaSA9IG8ucmV0dXJuKSAmJiBpLmNhbGwobyksIDApIDogby5uZXh0KSAmJiAhKGkgPSBpLmNhbGwobywgdVsxXSkpLmRvbmUpIHJldHVybiBpO1xuICAgICAgc3dpdGNoIChvID0gMCwgaSAmJiAodSA9IFt1WzBdICYgMiwgaS52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGkgPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIGUubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGUubGFiZWwrKywgbyA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoaSA9IGUudHJ5cywgIShpID0gaS5sZW5ndGggPiAwICYmIGlbaS5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghaSB8fCB1WzFdID4gaVswXSAmJiB1WzFdIDwgaVszXSkpIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIGUubGFiZWwgPCBpWzFdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gaVsxXSwgaSA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGkgJiYgZS5sYWJlbCA8IGlbMl0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBpWzJdLCBlLm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlbMl0gJiYgZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSB0LmNhbGwociwgZSk7XG4gICAgfSBjYXRjaCAocCkge1xuICAgICAgdSA9IFs2LCBwXSwgbyA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG4gPSBpID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59LCByZSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiByKHQpIHtcbiAgICAgIHRoaXMuX2V4cG9ydGVyID0gdCwgdGhpcy5fc2h1dGRvd25PbmNlID0gbmV3IGZ0KHRoaXMuX3NodXRkb3duLCB0aGlzKSwgdGhpcy5fdW5yZXNvbHZlZEV4cG9ydHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIH1cbiAgICByZXR1cm4gci5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFF0KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFh0KHRoaXMsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICBzd2l0Y2ggKHQubGFiZWwpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgcmV0dXJuIFs0LCBQcm9taXNlLmFsbChBcnJheS5mcm9tKHRoaXMuX3VucmVzb2x2ZWRFeHBvcnRzKSldO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICByZXR1cm4gdC5zZW50KCksIHRoaXMuX2V4cG9ydGVyLmZvcmNlRmx1c2ggPyBbNCwgdGhpcy5fZXhwb3J0ZXIuZm9yY2VGbHVzaCgpXSA6IFszLCAzXTtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgdC5zZW50KCksIHQubGFiZWwgPSAzO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAvKnJldHVybiovXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIHIucHJvdG90eXBlLm9uU3RhcnQgPSBmdW5jdGlvbih0LCBlKSB7XG4gICAgfSwgci5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgZSA9IHRoaXMsIG4sIG87XG4gICAgICBpZiAoIXRoaXMuX3NodXRkb3duT25jZS5pc0NhbGxlZCAmJiAodC5zcGFuQ29udGV4dCgpLnRyYWNlRmxhZ3MgJiBCdCQxLlNBTVBMRUQpICE9PSAwKSB7XG4gICAgICAgIHZhciBpID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIE90JDEuX2V4cG9ydChlLl9leHBvcnRlciwgW3RdKS50aGVuKGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgICAgIHZhciBsO1xuICAgICAgICAgICAgcy5jb2RlICE9PSBhLlNVQ0NFU1MgJiYgRXIoKGwgPSBzLmVycm9yKSAhPT0gbnVsbCAmJiBsICE9PSB2b2lkIDAgPyBsIDogbmV3IEVycm9yKFwiU2ltcGxlU3BhblByb2Nlc3Nvcjogc3BhbiBleHBvcnQgZmFpbGVkIChzdGF0dXMgXCIgKyBzICsgXCIpXCIpKTtcbiAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihzKSB7XG4gICAgICAgICAgICBFcihzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHQucmVzb3VyY2UuYXN5bmNBdHRyaWJ1dGVzUGVuZGluZykge1xuICAgICAgICAgIHZhciBhJDEgPSAobyA9IChuID0gdC5yZXNvdXJjZSkud2FpdEZvckFzeW5jQXR0cmlidXRlcykgPT09IG51bGwgfHwgbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogby5jYWxsKG4pLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gYSQxICE9IG51bGwgJiYgZS5fdW5yZXNvbHZlZEV4cG9ydHMuZGVsZXRlKGEkMSksIGkoKTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihzKSB7XG4gICAgICAgICAgICByZXR1cm4gRXIocyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYSQxICE9IG51bGwgJiYgdGhpcy5fdW5yZXNvbHZlZEV4cG9ydHMuYWRkKGEkMSk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGkoKTtcbiAgICAgIH1cbiAgICB9LCByLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NodXRkb3duT25jZS5jYWxsKCk7XG4gICAgfSwgci5wcm90b3R5cGUuX3NodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZXhwb3J0ZXIuc2h1dGRvd24oKTtcbiAgICB9LCByO1xuICB9KClcbik7XG5cbmV4cG9ydCB7IEIsIER0IGFzIEQsIEd0IGFzIEcsIFAsIFIsIFMsIFcsIGVlIGFzIGUsIGcsIGp0IGFzIGosIHJlIGFzIHIsIHRlIGFzIHQsIHh0IGFzIHgsIHp0IGFzIHogfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLEtBQUtBLEdBQU0sS0FBS0MsR0FBSSxLQUFLQyxHQUFJLEtBQUtDLElBQUksS0FBS0MsSUFBSSxLQUFLQyxJQUFJLEtBQUtDLElBQUksS0FBS0MsVUFBVTtBQUN6RixTQUFTLEtBQUFDLFNBQVM7QUFDbEIsU0FBUyxNQUFNQyxHQUFJLEtBQUtDLElBQUksTUFBTUMsR0FBSSxNQUFN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R0FBSyxRQUFRTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVNJLEdBQUc7QUFDckQsZ0JBQUloQjtBQUNKLFlBQUFnQixFQUFFLFNBQVNQLEVBQUUsV0FBV2xCLEdBQUlTLElBQUlnQixFQUFFLFdBQVcsUUFBUWhCLE1BQU0sU0FBU0EsSUFBSSxJQUFJLE1BQU0scURBQXFEZ0IsSUFBSSxHQUFHLENBQUM7QUFBQSxVQUNqSixDQUFDLEVBQUUsTUFBTSxTQUFTQSxHQUFHO0FBQ25CLFlBQUF6QixFQUFHeUIsQ0FBQztBQUFBLFVBQ04sQ0FBQztBQUFBLFFBQ0g7QUFDQSxZQUFJLEVBQUUsU0FBUyx3QkFBd0I7QUFDckMsY0FBSVQsS0FBT00sS0FBSyxJQUFJLEVBQUUsVUFBVSw0QkFBNEIsUUFBUUEsTUFBTSxTQUFTLFNBQVNBLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxXQUFXO0FBQ3BILG1CQUFPTixLQUFPLFFBQVFLLEVBQUUsbUJBQW1CLE9BQU9MLENBQUcsR0FBR1EsRUFBRTtBQUFBLFVBQzVELEdBQUcsU0FBU0MsR0FBRztBQUNiLG1CQUFPekIsRUFBR3lCLENBQUM7QUFBQSxVQUNiLENBQUM7QUFDRCxVQUFBVCxLQUFPLFFBQVEsS0FBSyxtQkFBbUIsSUFBSUEsQ0FBRztBQUFBLFFBQ2hEO0FBQ0UsVUFBQVEsRUFBRTtBQUFBLE1BQ047QUFBQSxJQUNGLEdBQUd0QyxFQUFFLFVBQVUsV0FBVyxXQUFXO0FBQ25DLGFBQU8sS0FBSyxjQUFjLEtBQUs7QUFBQSxJQUNqQyxHQUFHQSxFQUFFLFVBQVUsWUFBWSxXQUFXO0FBQ3BDLGFBQU8sS0FBSyxVQUFVLFNBQVM7QUFBQSxJQUNqQyxHQUFHQTtBQUFBLEVBQ0wsRUFBRTtBQUFBOyIsCiAgIm5hbWVzIjogWyJCdCQxIiwgIk1lIiwgIlRlIiwgImFzIiwgImV0IiwgIndlIiwgInluIiwgImRzIiwgInIiLCAiamUiLCAieV8iLCAicWUiLCAiWGUiLCAiUiQyIiwgInBfIiwgIk8kMSIsICJOXyIsICJiXyIsICJOQSIsICJNQSIsICJyXyIsICJlQSIsICJFciIsICJPZSIsICJ2ZSIsICJWZSIsICJaciIsICJmdCIsICJTZSIsICJudCIsICJRciIsICJsIiwgImNlIiwgImQiLCAicCIsICJhciIsICJPdCQxIiwgInUiLCAiYSQxIiwgIlIkMSIsICJhIiwgInd0IiwgIkQiLCAiZSIsICJvIiwgIkN0IiwgImkiLCAicyIsICJ4dCIsICJyJDEiLCAiYyIsICJQIiwgImciLCAiQiIsICJXIiwgIkUiLCAiWSIsICJOdCIsICJwJDEiLCAiZiIsICJNdCIsICJCdCIsICJEdCIsICJHdCIsICJxIiwgIkMiLCAibCQxIiwgImoiLCAiRyIsICJiIiwgImV0JDEiLCAiSyIsICJqdCIsICJrdCIsICJIdCIsICJRdCJdCn0K
|