@getopenpay/openpay-js-react 0.3.15-alpha.41e5b07 → 0.3.16
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/{Resource-BVrZYaku-CW8Nsyj_.js → Resource-ZHf3WzhQ-CXO-0aM2.js} +3 -3
- package/dist/SimpleSpanProcessor-C2RLPQpG-XmLthHn2.js +957 -0
- package/dist/detect-resources-DT-mJXgd-BYQgu6Ql.js +854 -0
- package/dist/diag-api-CK5inj4K-dVgEuDsq.js +6 -0
- package/dist/{index-DnY717BM-B7YCMKAl.js → index-BUomB0PZ-Dd0GFlz2.js} +5 -5
- package/dist/{index-CaCakYb8-ZUspo8v3.js → index-BcnFiKMK-DCby6mkW.js} +13 -13
- package/dist/{index-Dc9-gRZI-BK42WJbo.js → index-CeMHmEK0-CyiHDol_.js} +20 -20
- package/dist/{index-C7eBQOH9-l6qNR6R9.js → index-DUNJmiru-CLY8kuUk.js} +2 -2
- package/dist/{index-kfxb7a3S-2WofZi1z.js → index-DlFj36kO-DQ8H346Q.js} +2 -2
- package/dist/index-Dml0aEQD-CeapLryJ.js +830 -0
- package/dist/index-DofLDiKM.js +8070 -0
- package/dist/{index-AJqwzGb9-4c_-xFsE.js → index-DpRS6M62-DNEfb2H-.js} +13 -13
- package/dist/{index-jUK6oK4D-BKAelCCR.js → index-Dr5x0s5I-BYVh9unV.js} +8 -8
- package/dist/{index-BGo2OZdR-B4ckMTHm.js → index-xNUSAw4J-CdpHClBz.js} +2 -2
- package/dist/index.d.ts +4 -21
- package/dist/index.js +7 -7
- package/dist/{metrics-api-O2y5r4Xy-q_L-7beg.js → metrics-api-CvzxMpC0-B9qnWUhg.js} +9 -9
- package/dist/{sdk-info-ChO12_dj--a5Lto0Z.js → sdk-info-BlaoCnDc-BQBaw5N_.js} +2 -2
- package/dist/url-gBuEZQ4W-Z3svunxV.js +797 -0
- package/dist/{utils-D3n5ibTv-D3mTq_36.js → utils-C40-BLFS-B1GCVmd5.js} +2 -2
- package/dist/{utils-CMa-GQdX-D0AvBWl3.js → utils-DEDfJmJQ-zyu0HvrD.js} +8 -8
- package/package.json +1 -1
- package/dist/SimpleSpanProcessor-Ctz6oauE-CuOfgLHS.js +0 -957
- package/dist/detect-resources-Cp5CcDON-M__6emRS.js +0 -854
- package/dist/diag-api-CUKdlIJe-BKe8C5XV.js +0 -6
- package/dist/index-CD0rFvZ1-DrykTg8m.js +0 -830
- package/dist/index-Lita3xG4.js +0 -8199
- package/dist/url-ChjH_LHh-Cc36rdW_.js +0 -797
|
@@ -1,957 +0,0 @@
|
|
|
1
|
-
import { O as _, d as nt, c as b, q as ot, M as E, U as it, t as st, b as at } from "./index-Lita3xG4.js";
|
|
2
|
-
import { r as l } from "./diag-api-CUKdlIJe-BKe8C5XV.js";
|
|
3
|
-
import { dC as j, dD as ut, dE as M, p as pt, O as A, dF as ct, dG as lt, cy as N, cw as D, y as ht, dH as V, dI as dt, cx as ft } from "./url-ChjH_LHh-Cc36rdW_.js";
|
|
4
|
-
import { Z as _t, a as R, n as f, w as mt, p as H, b as vt, c as yt, J as St, W as gt, s as Et, k as Tt, d as J, t as bt } from "./index-CD0rFvZ1-DrykTg8m.js";
|
|
5
|
-
import { bm as v, O as P, bn as Lt, bo as Pt, bp as wt } from "./sdk-info-ChO12_dj--a5Lto0Z.js";
|
|
6
|
-
import { R as Q } from "./Resource-BVrZYaku-CW8Nsyj_.js";
|
|
7
|
-
import { a as w } from "./ExportResult-Bo1QOwfo-BBnR58Dk.js";
|
|
8
|
-
var xt = "exception", U = function() {
|
|
9
|
-
return U = 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
|
-
}, U.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
|
-
}, q = 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, p, u, c) {
|
|
49
|
-
a === void 0 && (a = []), this.attributes = {}, this.links = [], this.events = [], this._droppedAttributesCount = 0, this._droppedEventsCount = 0, this._droppedLinksCount = 0, this.status = {
|
|
50
|
-
code: at.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 = M.now(), this._performanceOffset = h - (this._performanceStartTime + dt()), this._startTimeProvided = p != null, this.startTime = this._getTime(p ?? h), this.resource = t.resource, this.instrumentationLibrary = t.instrumentationLibrary, this._spanLimits = t.getSpanLimits(), this._attributeValueLengthLimit = this._spanLimits.attributeValueLengthLimit || 0, c != null && this.setAttributes(c), 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) : _t(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 = q(o.value, 2), a = s[0], p = s[1];
|
|
64
|
-
this.setAttribute(a, p);
|
|
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++), j(r) && (j(n) || (n = r), r = void 0);
|
|
82
|
-
var i = R(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([], q(t), !1)), this;
|
|
94
|
-
}, e.prototype.setStatus = function(t) {
|
|
95
|
-
return this._isSpanEnded() ? this : (this.status = U({}, 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 = ut(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 <= M.now())
|
|
106
|
-
return pt(t + this._performanceOffset);
|
|
107
|
-
if (typeof t == "number")
|
|
108
|
-
return A(t);
|
|
109
|
-
if (t instanceof Date)
|
|
110
|
-
return A(t.getTime());
|
|
111
|
-
if (ct(t))
|
|
112
|
-
return t;
|
|
113
|
-
if (this._startTimeProvided)
|
|
114
|
-
return A(Date.now());
|
|
115
|
-
var r = M.now() - this._performanceStartTime;
|
|
116
|
-
return lt(this.startTime, A(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[D] = t : t && (t.code ? n[N] = t.code.toString() : t.name && (n[N] = t.name), t.message && (n[D] = t.message), t.stack && (n[ft] = t.stack)), n[N] || n[D] ? 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 I = (
|
|
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
|
-
), B = (
|
|
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 I(), this._localParentSampled = (i = t.localParentSampled) !== null && i !== void 0 ? i : new T(), this._localParentNotSampled = (o = t.localParentNotSampled) !== null && o !== void 0 ? o : new I();
|
|
199
|
-
}
|
|
200
|
-
return e.prototype.shouldSample = function(t, r, n, i, o, s) {
|
|
201
|
-
var a = _.getSpanContext(t);
|
|
202
|
-
return !a || !nt(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
|
-
), X = (
|
|
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: ot(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 K() {
|
|
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 I();
|
|
256
|
-
case v.ParentBasedAlwaysOn:
|
|
257
|
-
return new B({
|
|
258
|
-
root: new T()
|
|
259
|
-
});
|
|
260
|
-
case v.ParentBasedAlwaysOff:
|
|
261
|
-
return new B({
|
|
262
|
-
root: new I()
|
|
263
|
-
});
|
|
264
|
-
case v.TraceIdRatio:
|
|
265
|
-
return new X(W(e));
|
|
266
|
-
case v.ParentBasedTraceIdRatio:
|
|
267
|
-
return new B({
|
|
268
|
-
root: new X(W(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 W(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 = K(), 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, p, u, c, h, d, S = Object.assign({}, e.spanLimits), m = Lt();
|
|
288
|
-
return S.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 : Pt, S.attributeValueLengthLimit = (d = (h = (c = (p = (a = e.spanLimits) === null || a === void 0 ? void 0 : a.attributeValueLengthLimit) !== null && p !== void 0 ? p : (u = e.generalLimits) === null || u === void 0 ? void 0 : u.attributeValueLengthLimit) !== null && c !== void 0 ? c : m.OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT) !== null && h !== void 0 ? h : m.OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT) !== null && d !== void 0 ? d : wt, Object.assign({}, e, { spanLimits: S });
|
|
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 == null ? void 0 : r.maxExportBatchSize) == "number" ? r.maxExportBatchSize : n.OTEL_BSP_MAX_EXPORT_BATCH_SIZE, this._maxQueueSize = typeof (r == null ? void 0 : r.maxQueueSize) == "number" ? r.maxQueueSize : n.OTEL_BSP_MAX_QUEUE_SIZE, this._scheduledDelayMillis = typeof (r == null ? void 0 : r.scheduledDelayMillis) == "number" ? r.scheduledDelayMillis : n.OTEL_BSP_SCHEDULE_DELAY, this._exportTimeoutMillis = typeof (r == null ? void 0 : r.exportTimeoutMillis) == "number" ? r.exportTimeoutMillis : n.OTEL_BSP_EXPORT_TIMEOUT, this._shutdownOnce = new J(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 && 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(gt(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 === w.SUCCESS ? r() : n((d = h.error) !== null && d !== void 0 ? d : new Error("BatchSpanProcessor: span export failed"));
|
|
342
|
-
});
|
|
343
|
-
}, a = null, p = 0, u = o.length; p < u; p++) {
|
|
344
|
-
var c = o[p];
|
|
345
|
-
c.resource.asyncAttributesPending && c.resource.waitForAsyncAttributes && (a ?? (a = []), a.push(c.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), Et(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 == null ? void 0 : 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 = Z(Ft), this.generateSpanId = Z(Ut);
|
|
417
|
-
}
|
|
418
|
-
return e;
|
|
419
|
-
}()
|
|
420
|
-
), O = Array(32);
|
|
421
|
-
function Z(e) {
|
|
422
|
-
return function() {
|
|
423
|
-
for (var t = 0; t < e * 2; t++)
|
|
424
|
-
O[t] = Math.floor(Math.random() * 16) + 48, O[t] >= 58 && (O[t] += 39);
|
|
425
|
-
return String.fromCharCode.apply(null, O.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 (mt(n)) {
|
|
441
|
-
l.debug("Instrumentation suppressed, returning Noop Span");
|
|
442
|
-
var p = _.wrapSpanContext(it);
|
|
443
|
-
return p;
|
|
444
|
-
}
|
|
445
|
-
var u = a == null ? void 0 : a.spanContext(), c = this._idGenerator.generateSpanId(), h, d, S;
|
|
446
|
-
!u || !_.isSpanContextValid(u) ? h = this._idGenerator.generateTraceId() : (h = u.traceId, d = u.traceState, S = u.spanId);
|
|
447
|
-
var m = (i = r.kind) !== null && i !== void 0 ? i : st.INTERNAL, F = ((o = r.links) !== null && o !== void 0 ? o : []).map(function(G) {
|
|
448
|
-
return {
|
|
449
|
-
context: G.context,
|
|
450
|
-
attributes: R(G.attributes)
|
|
451
|
-
};
|
|
452
|
-
}), k = R(r.attributes), x = this._sampler.shouldSample(n, h, t, m, k, F);
|
|
453
|
-
d = (s = x.traceState) !== null && s !== void 0 ? s : d;
|
|
454
|
-
var tt = x.decision === H.RECORD_AND_SAMPLED ? b.SAMPLED : b.NONE, z = { traceId: h, spanId: c, traceFlags: tt, traceState: d };
|
|
455
|
-
if (x.decision === H.NOT_RECORD) {
|
|
456
|
-
l.debug("Recording is off, propagating context in a non-recording span");
|
|
457
|
-
var p = _.wrapSpanContext(z);
|
|
458
|
-
return p;
|
|
459
|
-
}
|
|
460
|
-
var et = R(Object.assign(k, x.attributes)), rt = new Ct(this, n, t, z, m, S, 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 p = s ?? E.active(), u = this.startSpan(t, o, p), c = _.setSpan(p, u);
|
|
467
|
-
return E.with(c, 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
|
-
), C = 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
|
-
}, Y = (
|
|
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 = C(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(p) {
|
|
512
|
-
f(p || 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 = C(this._spanProcessors), s = o.next(); !s.done; s = o.next()) {
|
|
519
|
-
var a = s.value;
|
|
520
|
-
a.onStart(t, r);
|
|
521
|
-
}
|
|
522
|
-
} catch (p) {
|
|
523
|
-
n = { error: p };
|
|
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 = C(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 = C(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, p) {
|
|
564
|
-
Promise.all(n).then(function() {
|
|
565
|
-
a();
|
|
566
|
-
}, p);
|
|
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
|
-
}, y;
|
|
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
|
-
})(y || (y = {}));
|
|
607
|
-
var re = (
|
|
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 = Tt({}, K(), Mt(t));
|
|
615
|
-
if (this.resource = (r = i.resource) !== null && r !== void 0 ? r : Q.empty(), i.mergeResourceWithDefaults && (this.resource = Q.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 Y(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 == null ? void 0 : n.schemaUrl) || "");
|
|
630
|
-
return this._tracers.has(i) || this._tracers.set(i, new zt({ name: t, version: r, schemaUrl: n == null ? void 0 : 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 Y(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 && ht.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 = y.timeout;
|
|
644
|
-
}, t);
|
|
645
|
-
n.forceFlush().then(function() {
|
|
646
|
-
clearTimeout(s), o !== y.timeout && (o = y.resolved, i(o));
|
|
647
|
-
}).catch(function(a) {
|
|
648
|
-
clearTimeout(s), o = y.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 !== y.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 vt({
|
|
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 yt();
|
|
690
|
-
}],
|
|
691
|
-
["baggage", function() {
|
|
692
|
-
return new St();
|
|
693
|
-
}]
|
|
694
|
-
]), e._registeredExporters = /* @__PURE__ */ new Map(), e;
|
|
695
|
-
}()
|
|
696
|
-
), Ht = 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
|
-
}, ne = (
|
|
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: V(t.startTime),
|
|
730
|
-
duration: V(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 = Ht(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 (p) {
|
|
744
|
-
n = { error: p };
|
|
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: w.SUCCESS });
|
|
754
|
-
}, e;
|
|
755
|
-
}()
|
|
756
|
-
), Qt = function(e, t) {
|
|
757
|
-
var r = typeof Symbol == "function" && e[Symbol.iterator];
|
|
758
|
-
if (!r) return e;
|
|
759
|
-
var n = r.call(e), i, o = [], s;
|
|
760
|
-
try {
|
|
761
|
-
for (; (t === void 0 || t-- > 0) && !(i = n.next()).done; ) o.push(i.value);
|
|
762
|
-
} catch (a) {
|
|
763
|
-
s = { error: a };
|
|
764
|
-
} finally {
|
|
765
|
-
try {
|
|
766
|
-
i && !i.done && (r = n.return) && r.call(n);
|
|
767
|
-
} finally {
|
|
768
|
-
if (s) throw s.error;
|
|
769
|
-
}
|
|
770
|
-
}
|
|
771
|
-
return o;
|
|
772
|
-
}, qt = function(e, t, r) {
|
|
773
|
-
if (arguments.length === 2) for (var n = 0, i = t.length, o; n < i; n++)
|
|
774
|
-
(o || !(n in t)) && (o || (o = Array.prototype.slice.call(t, 0, n)), o[n] = t[n]);
|
|
775
|
-
return e.concat(o || Array.prototype.slice.call(t));
|
|
776
|
-
}, oe = (
|
|
777
|
-
/** @class */
|
|
778
|
-
function() {
|
|
779
|
-
function e() {
|
|
780
|
-
this._finishedSpans = [], this._stopped = !1;
|
|
781
|
-
}
|
|
782
|
-
return e.prototype.export = function(t, r) {
|
|
783
|
-
var n;
|
|
784
|
-
if (this._stopped)
|
|
785
|
-
return r({
|
|
786
|
-
code: w.FAILED,
|
|
787
|
-
error: new Error("Exporter has been stopped")
|
|
788
|
-
});
|
|
789
|
-
(n = this._finishedSpans).push.apply(n, qt([], Qt(t), !1)), setTimeout(function() {
|
|
790
|
-
return r({ code: w.SUCCESS });
|
|
791
|
-
}, 0);
|
|
792
|
-
}, e.prototype.shutdown = function() {
|
|
793
|
-
return this._stopped = !0, this._finishedSpans = [], this.forceFlush();
|
|
794
|
-
}, e.prototype.forceFlush = function() {
|
|
795
|
-
return Promise.resolve();
|
|
796
|
-
}, e.prototype.reset = function() {
|
|
797
|
-
this._finishedSpans = [];
|
|
798
|
-
}, e.prototype.getFinishedSpans = function() {
|
|
799
|
-
return this._finishedSpans;
|
|
800
|
-
}, e;
|
|
801
|
-
}()
|
|
802
|
-
), Xt = function(e, t, r, n) {
|
|
803
|
-
function i(o) {
|
|
804
|
-
return o instanceof r ? o : new r(function(s) {
|
|
805
|
-
s(o);
|
|
806
|
-
});
|
|
807
|
-
}
|
|
808
|
-
return new (r || (r = Promise))(function(o, s) {
|
|
809
|
-
function a(c) {
|
|
810
|
-
try {
|
|
811
|
-
u(n.next(c));
|
|
812
|
-
} catch (h) {
|
|
813
|
-
s(h);
|
|
814
|
-
}
|
|
815
|
-
}
|
|
816
|
-
function p(c) {
|
|
817
|
-
try {
|
|
818
|
-
u(n.throw(c));
|
|
819
|
-
} catch (h) {
|
|
820
|
-
s(h);
|
|
821
|
-
}
|
|
822
|
-
}
|
|
823
|
-
function u(c) {
|
|
824
|
-
c.done ? o(c.value) : i(c.value).then(a, p);
|
|
825
|
-
}
|
|
826
|
-
u((n = n.apply(e, [])).next());
|
|
827
|
-
});
|
|
828
|
-
}, Wt = function(e, t) {
|
|
829
|
-
var r = { label: 0, sent: function() {
|
|
830
|
-
if (o[0] & 1) throw o[1];
|
|
831
|
-
return o[1];
|
|
832
|
-
}, trys: [], ops: [] }, n, i, o, s;
|
|
833
|
-
return s = { next: a(0), throw: a(1), return: a(2) }, typeof Symbol == "function" && (s[Symbol.iterator] = function() {
|
|
834
|
-
return this;
|
|
835
|
-
}), s;
|
|
836
|
-
function a(u) {
|
|
837
|
-
return function(c) {
|
|
838
|
-
return p([u, c]);
|
|
839
|
-
};
|
|
840
|
-
}
|
|
841
|
-
function p(u) {
|
|
842
|
-
if (n) throw new TypeError("Generator is already executing.");
|
|
843
|
-
for (; r; ) try {
|
|
844
|
-
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;
|
|
845
|
-
switch (i = 0, o && (u = [u[0] & 2, o.value]), u[0]) {
|
|
846
|
-
case 0:
|
|
847
|
-
case 1:
|
|
848
|
-
o = u;
|
|
849
|
-
break;
|
|
850
|
-
case 4:
|
|
851
|
-
return r.label++, { value: u[1], done: !1 };
|
|
852
|
-
case 5:
|
|
853
|
-
r.label++, i = u[1], u = [0];
|
|
854
|
-
continue;
|
|
855
|
-
case 7:
|
|
856
|
-
u = r.ops.pop(), r.trys.pop();
|
|
857
|
-
continue;
|
|
858
|
-
default:
|
|
859
|
-
if (o = r.trys, !(o = o.length > 0 && o[o.length - 1]) && (u[0] === 6 || u[0] === 2)) {
|
|
860
|
-
r = 0;
|
|
861
|
-
continue;
|
|
862
|
-
}
|
|
863
|
-
if (u[0] === 3 && (!o || u[1] > o[0] && u[1] < o[3])) {
|
|
864
|
-
r.label = u[1];
|
|
865
|
-
break;
|
|
866
|
-
}
|
|
867
|
-
if (u[0] === 6 && r.label < o[1]) {
|
|
868
|
-
r.label = o[1], o = u;
|
|
869
|
-
break;
|
|
870
|
-
}
|
|
871
|
-
if (o && r.label < o[2]) {
|
|
872
|
-
r.label = o[2], r.ops.push(u);
|
|
873
|
-
break;
|
|
874
|
-
}
|
|
875
|
-
o[2] && r.ops.pop(), r.trys.pop();
|
|
876
|
-
continue;
|
|
877
|
-
}
|
|
878
|
-
u = t.call(e, r);
|
|
879
|
-
} catch (c) {
|
|
880
|
-
u = [6, c], i = 0;
|
|
881
|
-
} finally {
|
|
882
|
-
n = o = 0;
|
|
883
|
-
}
|
|
884
|
-
if (u[0] & 5) throw u[1];
|
|
885
|
-
return { value: u[0] ? u[1] : void 0, done: !0 };
|
|
886
|
-
}
|
|
887
|
-
}, ie = (
|
|
888
|
-
/** @class */
|
|
889
|
-
function() {
|
|
890
|
-
function e(t) {
|
|
891
|
-
this._exporter = t, this._shutdownOnce = new J(this._shutdown, this), this._unresolvedExports = /* @__PURE__ */ new Set();
|
|
892
|
-
}
|
|
893
|
-
return e.prototype.forceFlush = function() {
|
|
894
|
-
return Xt(this, void 0, void 0, function() {
|
|
895
|
-
return Wt(this, function(t) {
|
|
896
|
-
switch (t.label) {
|
|
897
|
-
case 0:
|
|
898
|
-
return [4, Promise.all(Array.from(this._unresolvedExports))];
|
|
899
|
-
case 1:
|
|
900
|
-
return t.sent(), this._exporter.forceFlush ? [4, this._exporter.forceFlush()] : [3, 3];
|
|
901
|
-
case 2:
|
|
902
|
-
t.sent(), t.label = 3;
|
|
903
|
-
case 3:
|
|
904
|
-
return [
|
|
905
|
-
2
|
|
906
|
-
/*return*/
|
|
907
|
-
];
|
|
908
|
-
}
|
|
909
|
-
});
|
|
910
|
-
});
|
|
911
|
-
}, e.prototype.onStart = function(t, r) {
|
|
912
|
-
}, e.prototype.onEnd = function(t) {
|
|
913
|
-
var r = this, n, i;
|
|
914
|
-
if (!this._shutdownOnce.isCalled && t.spanContext().traceFlags & b.SAMPLED) {
|
|
915
|
-
var o = function() {
|
|
916
|
-
return bt._export(r._exporter, [t]).then(function(a) {
|
|
917
|
-
var p;
|
|
918
|
-
a.code !== w.SUCCESS && f((p = a.error) !== null && p !== void 0 ? p : new Error("SimpleSpanProcessor: span export failed (status " + a + ")"));
|
|
919
|
-
}).catch(function(a) {
|
|
920
|
-
f(a);
|
|
921
|
-
});
|
|
922
|
-
};
|
|
923
|
-
if (t.resource.asyncAttributesPending) {
|
|
924
|
-
var s = (i = (n = t.resource).waitForAsyncAttributes) === null || i === void 0 ? void 0 : i.call(n).then(function() {
|
|
925
|
-
return s != null && r._unresolvedExports.delete(s), o();
|
|
926
|
-
}, function(a) {
|
|
927
|
-
return f(a);
|
|
928
|
-
});
|
|
929
|
-
s != null && this._unresolvedExports.add(s);
|
|
930
|
-
} else
|
|
931
|
-
o();
|
|
932
|
-
}
|
|
933
|
-
}, e.prototype.shutdown = function() {
|
|
934
|
-
return this._shutdownOnce.call();
|
|
935
|
-
}, e.prototype._shutdown = function() {
|
|
936
|
-
return this._exporter.shutdown();
|
|
937
|
-
}, e;
|
|
938
|
-
}()
|
|
939
|
-
);
|
|
940
|
-
export {
|
|
941
|
-
Bt as D,
|
|
942
|
-
kt as G,
|
|
943
|
-
I,
|
|
944
|
-
Ct as O,
|
|
945
|
-
L as P,
|
|
946
|
-
y as S,
|
|
947
|
-
X as W,
|
|
948
|
-
B as a,
|
|
949
|
-
T as g,
|
|
950
|
-
oe as i,
|
|
951
|
-
Gt as j,
|
|
952
|
-
ne as n,
|
|
953
|
-
ie as o,
|
|
954
|
-
re as r,
|
|
955
|
-
zt as z
|
|
956
|
-
};
|
|
957
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiU2ltcGxlU3BhblByb2Nlc3Nvci1DdHo2b2F1RS0hfnswMDJ9fi5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgTyBhcyBPZSwgZCBhcyBjciwgYyBhcyBVdCQxLCBxIGFzIHFpLCBNIGFzIE1lLCBVIGFzIFVpLCB0IGFzIHR0LCBiIGFzIGZlIH0gZnJvbSAnLi9pbmRleC0hfnswMDR9fi5qcyc7XG5pbXBvcnQgeyByIH0gZnJvbSAnLi9kaWFnLWFwaS1DVUtkbElKZS0hfnswMDd9fi5qcyc7XG5pbXBvcnQgeyBkQyBhcyBxZSwgZEQgYXMgd2UsIGRFIGFzIFIsIHAgYXMgcF8sIE8gYXMgTyQxLCBkRiBhcyBOXywgZEcgYXMgSF8sIGN5IGFzIHJBLCBjdyBhcyBOQSwgeSBhcyB5XywgZEggYXMga2UsIGRJIGFzIHJfLCBjeCBhcyBNQSB9IGZyb20gJy4vdXJsLUNoakhfTEhoLSF+ezAwOH1+LmpzJztcbmltcG9ydCB7IFosIGEgYXMgWmUsIG4gYXMgbmUkMSwgdywgcCwgYiBhcyBwciwgYyBhcyBiciwgSiBhcyBKZSwgVyBhcyBXJDEsIHMgYXMgc3IsIGsgYXMga3IsIGQgYXMgWnIsIHQgYXMgdHQkMSB9IGZyb20gJy4vaW5kZXgtQ0QwckZ2WjEtIX57MDBqfX4uanMnO1xuaW1wb3J0IHsgYm0gYXMgciQxLCBPIGFzIE9ULCBibiBhcyBMVCwgYm8gYXMgUCQxLCBicCBhcyBNIH0gZnJvbSAnLi9zZGstaW5mby1DaE8xMl9kai0hfnswMGd9fi5qcyc7XG5pbXBvcnQgeyBSIGFzIFIkMSB9IGZyb20gJy4vUmVzb3VyY2UtQlZyWllha3UtIX57MDBmfX4uanMnO1xuaW1wb3J0IHsgYSB9IGZyb20gJy4vRXhwb3J0UmVzdWx0LUJvMVFPd2ZvLSF+ezAwbH1+LmpzJztcblxudmFyIGJ0ID0gXCJleGNlcHRpb25cIiwgVSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gVSA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24oZSkge1xuICAgIGZvciAodmFyIHQsIHIgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgciA8IG47IHIrKykge1xuICAgICAgdCA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIGZvciAodmFyIG8gaW4gdCkgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIG8pICYmIChlW29dID0gdFtvXSk7XG4gICAgfVxuICAgIHJldHVybiBlO1xuICB9LCBVLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59LCBDdCA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIHIgPSB0ICYmIGVbdF0sIG4gPSAwO1xuICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgaWYgKGUgJiYgdHlwZW9mIGUubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZSAmJiBuID49IGUubGVuZ3RoICYmIChlID0gdm9pZCAwKSwgeyB2YWx1ZTogZSAmJiBlW24rK10sIGRvbmU6ICFlIH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHQgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59LCBYID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIG8sIGkgPSBbXSwgYTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKG8gPSBuLm5leHQoKSkuZG9uZTsgKSBpLnB1c2goby52YWx1ZSk7XG4gIH0gY2F0Y2ggKHMpIHtcbiAgICBhID0geyBlcnJvcjogcyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59LCB4dCA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBvID0gdC5sZW5ndGgsIGk7IG4gPCBvOyBuKyspXG4gICAgKGkgfHwgIShuIGluIHQpKSAmJiAoaSB8fCAoaSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgaVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoaSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBPdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQsIHIsIG4sIG8sIGksIGEsIHMsIGwsIHUsIHApIHtcbiAgICAgIHMgPT09IHZvaWQgMCAmJiAocyA9IFtdKSwgdGhpcy5hdHRyaWJ1dGVzID0ge30sIHRoaXMubGlua3MgPSBbXSwgdGhpcy5ldmVudHMgPSBbXSwgdGhpcy5fZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCA9IDAsIHRoaXMuX2Ryb3BwZWRFdmVudHNDb3VudCA9IDAsIHRoaXMuX2Ryb3BwZWRMaW5rc0NvdW50ID0gMCwgdGhpcy5zdGF0dXMgPSB7XG4gICAgICAgIGNvZGU6IGZlLlVOU0VUXG4gICAgICB9LCB0aGlzLmVuZFRpbWUgPSBbMCwgMF0sIHRoaXMuX2VuZGVkID0gITEsIHRoaXMuX2R1cmF0aW9uID0gWy0xLCAtMV0sIHRoaXMubmFtZSA9IG4sIHRoaXMuX3NwYW5Db250ZXh0ID0gbywgdGhpcy5wYXJlbnRTcGFuSWQgPSBhLCB0aGlzLmtpbmQgPSBpLCB0aGlzLmxpbmtzID0gcztcbiAgICAgIHZhciBmID0gRGF0ZS5ub3coKTtcbiAgICAgIHRoaXMuX3BlcmZvcm1hbmNlU3RhcnRUaW1lID0gUi5ub3coKSwgdGhpcy5fcGVyZm9ybWFuY2VPZmZzZXQgPSBmIC0gKHRoaXMuX3BlcmZvcm1hbmNlU3RhcnRUaW1lICsgcl8oKSksIHRoaXMuX3N0YXJ0VGltZVByb3ZpZGVkID0gbCAhPSBudWxsLCB0aGlzLnN0YXJ0VGltZSA9IHRoaXMuX2dldFRpbWUobCA/PyBmKSwgdGhpcy5yZXNvdXJjZSA9IHQucmVzb3VyY2UsIHRoaXMuaW5zdHJ1bWVudGF0aW9uTGlicmFyeSA9IHQuaW5zdHJ1bWVudGF0aW9uTGlicmFyeSwgdGhpcy5fc3BhbkxpbWl0cyA9IHQuZ2V0U3BhbkxpbWl0cygpLCB0aGlzLl9hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0ID0gdGhpcy5fc3BhbkxpbWl0cy5hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0IHx8IDAsIHAgIT0gbnVsbCAmJiB0aGlzLnNldEF0dHJpYnV0ZXMocCksIHRoaXMuX3NwYW5Qcm9jZXNzb3IgPSB0LmdldEFjdGl2ZVNwYW5Qcm9jZXNzb3IoKSwgdGhpcy5fc3BhblByb2Nlc3Nvci5vblN0YXJ0KHRoaXMsIHIpO1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc3BhbkNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zcGFuQ29udGV4dDtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbih0LCByJDEpIHtcbiAgICAgIHJldHVybiByJDEgPT0gbnVsbCB8fCB0aGlzLl9pc1NwYW5FbmRlZCgpID8gdGhpcyA6IHQubGVuZ3RoID09PSAwID8gKHIud2FybihcIkludmFsaWQgYXR0cmlidXRlIGtleTogXCIgKyB0KSwgdGhpcykgOiBaKHIkMSkgPyBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpLmxlbmd0aCA+PSB0aGlzLl9zcGFuTGltaXRzLmF0dHJpYnV0ZUNvdW50TGltaXQgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsIHQpID8gKHRoaXMuX2Ryb3BwZWRBdHRyaWJ1dGVzQ291bnQrKywgdGhpcykgOiAodGhpcy5hdHRyaWJ1dGVzW3RdID0gdGhpcy5fdHJ1bmNhdGVUb1NpemUociQxKSwgdGhpcykgOiAoci53YXJuKFwiSW52YWxpZCBhdHRyaWJ1dGUgdmFsdWUgc2V0IGZvciBrZXk6IFwiICsgdCksIHRoaXMpO1xuICAgIH0sIGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZXMgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgciwgbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIG8gPSBDdChPYmplY3QuZW50cmllcyh0KSksIGkgPSBvLm5leHQoKTsgIWkuZG9uZTsgaSA9IG8ubmV4dCgpKSB7XG4gICAgICAgICAgdmFyIGEgPSBYKGkudmFsdWUsIDIpLCBzID0gYVswXSwgbCA9IGFbMV07XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUocywgbCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgciA9IHsgZXJyb3I6IHUgfTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaSAmJiAhaS5kb25lICYmIChuID0gby5yZXR1cm4pICYmIG4uY2FsbChvKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkRXZlbnQgPSBmdW5jdGlvbih0LCByJDEsIG4pIHtcbiAgICAgIGlmICh0aGlzLl9pc1NwYW5FbmRlZCgpKVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIGlmICh0aGlzLl9zcGFuTGltaXRzLmV2ZW50Q291bnRMaW1pdCA9PT0gMClcbiAgICAgICAgcmV0dXJuIHIud2FybihcIk5vIGV2ZW50cyBhbGxvd2VkLlwiKSwgdGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50KyssIHRoaXM7XG4gICAgICB0aGlzLmV2ZW50cy5sZW5ndGggPj0gdGhpcy5fc3BhbkxpbWl0cy5ldmVudENvdW50TGltaXQgJiYgKHRoaXMuX2Ryb3BwZWRFdmVudHNDb3VudCA9PT0gMCAmJiByLmRlYnVnKFwiRHJvcHBpbmcgZXh0cmEgZXZlbnRzLlwiKSwgdGhpcy5ldmVudHMuc2hpZnQoKSwgdGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50KyspLCBxZShyJDEpICYmIChxZShuKSB8fCAobiA9IHIkMSksIHIkMSA9IHZvaWQgMCk7XG4gICAgICB2YXIgbyA9IFplKHIkMSk7XG4gICAgICByZXR1cm4gdGhpcy5ldmVudHMucHVzaCh7XG4gICAgICAgIG5hbWU6IHQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IG8sXG4gICAgICAgIHRpbWU6IHRoaXMuX2dldFRpbWUobiksXG4gICAgICAgIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IDBcbiAgICAgIH0pLCB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZExpbmsgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcy5saW5rcy5wdXNoKHQpLCB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZExpbmtzID0gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIHI7XG4gICAgICByZXR1cm4gKHIgPSB0aGlzLmxpbmtzKS5wdXNoLmFwcGx5KHIsIHh0KFtdLCBYKHQpLCAhMSkpLCB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLnNldFN0YXR1cyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pc1NwYW5FbmRlZCgpID8gdGhpcyA6ICh0aGlzLnN0YXR1cyA9IFUoe30sIHQpLCB0aGlzLnN0YXR1cy5tZXNzYWdlICE9IG51bGwgJiYgdHlwZW9mIHQubWVzc2FnZSAhPSBcInN0cmluZ1wiICYmIChyLndhcm4oXCJEcm9wcGluZyBpbnZhbGlkIHN0YXR1cy5tZXNzYWdlIG9mIHR5cGUgJ1wiICsgdHlwZW9mIHQubWVzc2FnZSArIFwiJywgZXhwZWN0ZWQgJ3N0cmluZydcIiksIGRlbGV0ZSB0aGlzLnN0YXR1cy5tZXNzYWdlKSwgdGhpcyk7XG4gICAgfSwgZS5wcm90b3R5cGUudXBkYXRlTmFtZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pc1NwYW5FbmRlZCgpID8gdGhpcyA6ICh0aGlzLm5hbWUgPSB0LCB0aGlzKTtcbiAgICB9LCBlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbih0KSB7XG4gICAgICBpZiAodGhpcy5faXNTcGFuRW5kZWQoKSkge1xuICAgICAgICByLmVycm9yKHRoaXMubmFtZSArIFwiIFwiICsgdGhpcy5fc3BhbkNvbnRleHQudHJhY2VJZCArIFwiLVwiICsgdGhpcy5fc3BhbkNvbnRleHQuc3BhbklkICsgXCIgLSBZb3UgY2FuIG9ubHkgY2FsbCBlbmQoKSBvbiBhIHNwYW4gb25jZS5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VuZGVkID0gITAsIHRoaXMuZW5kVGltZSA9IHRoaXMuX2dldFRpbWUodCksIHRoaXMuX2R1cmF0aW9uID0gd2UodGhpcy5zdGFydFRpbWUsIHRoaXMuZW5kVGltZSksIHRoaXMuX2R1cmF0aW9uWzBdIDwgMCAmJiAoci53YXJuKFwiSW5jb25zaXN0ZW50IHN0YXJ0IGFuZCBlbmQgdGltZSwgc3RhcnRUaW1lID4gZW5kVGltZS4gU2V0dGluZyBzcGFuIGR1cmF0aW9uIHRvIDBtcy5cIiwgdGhpcy5zdGFydFRpbWUsIHRoaXMuZW5kVGltZSksIHRoaXMuZW5kVGltZSA9IHRoaXMuc3RhcnRUaW1lLnNsaWNlKCksIHRoaXMuX2R1cmF0aW9uID0gWzAsIDBdKSwgdGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50ID4gMCAmJiByLndhcm4oXCJEcm9wcGVkIFwiICsgdGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50ICsgXCIgZXZlbnRzIGJlY2F1c2UgZXZlbnRDb3VudExpbWl0IHJlYWNoZWRcIiksIHRoaXMuX3NwYW5Qcm9jZXNzb3Iub25FbmQodGhpcyk7XG4gICAgfSwgZS5wcm90b3R5cGUuX2dldFRpbWUgPSBmdW5jdGlvbih0KSB7XG4gICAgICBpZiAodHlwZW9mIHQgPT0gXCJudW1iZXJcIiAmJiB0IDw9IFIubm93KCkpXG4gICAgICAgIHJldHVybiBwXyh0ICsgdGhpcy5fcGVyZm9ybWFuY2VPZmZzZXQpO1xuICAgICAgaWYgKHR5cGVvZiB0ID09IFwibnVtYmVyXCIpXG4gICAgICAgIHJldHVybiBPJDEodCk7XG4gICAgICBpZiAodCBpbnN0YW5jZW9mIERhdGUpXG4gICAgICAgIHJldHVybiBPJDEodC5nZXRUaW1lKCkpO1xuICAgICAgaWYgKE5fKHQpKVxuICAgICAgICByZXR1cm4gdDtcbiAgICAgIGlmICh0aGlzLl9zdGFydFRpbWVQcm92aWRlZClcbiAgICAgICAgcmV0dXJuIE8kMShEYXRlLm5vdygpKTtcbiAgICAgIHZhciByID0gUi5ub3coKSAtIHRoaXMuX3BlcmZvcm1hbmNlU3RhcnRUaW1lO1xuICAgICAgcmV0dXJuIEhfKHRoaXMuc3RhcnRUaW1lLCBPJDEocikpO1xuICAgIH0sIGUucHJvdG90eXBlLmlzUmVjb3JkaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZW5kZWQgPT09ICExO1xuICAgIH0sIGUucHJvdG90eXBlLnJlY29yZEV4Y2VwdGlvbiA9IGZ1bmN0aW9uKHQsIHIkMSkge1xuICAgICAgdmFyIG4gPSB7fTtcbiAgICAgIHR5cGVvZiB0ID09IFwic3RyaW5nXCIgPyBuW05BXSA9IHQgOiB0ICYmICh0LmNvZGUgPyBuW3JBXSA9IHQuY29kZS50b1N0cmluZygpIDogdC5uYW1lICYmIChuW3JBXSA9IHQubmFtZSksIHQubWVzc2FnZSAmJiAobltOQV0gPSB0Lm1lc3NhZ2UpLCB0LnN0YWNrICYmIChuW01BXSA9IHQuc3RhY2spKSwgbltyQV0gfHwgbltOQV0gPyB0aGlzLmFkZEV2ZW50KGJ0LCBuLCByJDEpIDogci53YXJuKFwiRmFpbGVkIHRvIHJlY29yZCBhbiBleGNlcHRpb24gXCIgKyB0KTtcbiAgICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIFwiZHVyYXRpb25cIiwge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2R1cmF0aW9uO1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIFwiZW5kZWRcIiwge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZGVkO1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIFwiZHJvcHBlZEF0dHJpYnV0ZXNDb3VudFwiLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDtcbiAgICAgIH0sXG4gICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCBcImRyb3BwZWRFdmVudHNDb3VudFwiLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50O1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIFwiZHJvcHBlZExpbmtzQ291bnRcIiwge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3BwZWRMaW5rc0NvdW50O1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBlLnByb3RvdHlwZS5faXNTcGFuRW5kZWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbmRlZCAmJiByLndhcm4oXCJDYW4gbm90IGV4ZWN1dGUgdGhlIG9wZXJhdGlvbiBvbiBlbmRlZCBTcGFuIHt0cmFjZUlkOiBcIiArIHRoaXMuX3NwYW5Db250ZXh0LnRyYWNlSWQgKyBcIiwgc3BhbklkOiBcIiArIHRoaXMuX3NwYW5Db250ZXh0LnNwYW5JZCArIFwifVwiKSwgdGhpcy5fZW5kZWQ7XG4gICAgfSwgZS5wcm90b3R5cGUuX3RydW5jYXRlVG9MaW1pdFV0aWwgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdC5sZW5ndGggPD0gciA/IHQgOiB0LnN1YnN0cmluZygwLCByKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fdHJ1bmNhdGVUb1NpemUgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgciQxID0gdGhpcywgbiA9IHRoaXMuX2F0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQ7XG4gICAgICByZXR1cm4gbiA8PSAwID8gKHIud2FybihcIkF0dHJpYnV0ZSB2YWx1ZSBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgXCIgKyBuKSwgdCkgOiB0eXBlb2YgdCA9PSBcInN0cmluZ1wiID8gdGhpcy5fdHJ1bmNhdGVUb0xpbWl0VXRpbCh0LCBuKSA6IEFycmF5LmlzQXJyYXkodCkgPyB0Lm1hcChmdW5jdGlvbihvKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbyA9PSBcInN0cmluZ1wiID8gciQxLl90cnVuY2F0ZVRvTGltaXRVdGlsKG8sIG4pIDogbztcbiAgICAgIH0pIDogdDtcbiAgICB9LCBlO1xuICB9KClcbiksIFA7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuTk9UX1JFQ09SRCA9IDBdID0gXCJOT1RfUkVDT1JEXCIsIGVbZS5SRUNPUkQgPSAxXSA9IFwiUkVDT1JEXCIsIGVbZS5SRUNPUkRfQU5EX1NBTVBMRUQgPSAyXSA9IFwiUkVDT1JEX0FORF9TQU1QTEVEXCI7XG59KShQIHx8IChQID0ge30pKTtcbnZhciBJID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zaG91bGRTYW1wbGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlY2lzaW9uOiBQLk5PVF9SRUNPUkRcbiAgICAgIH07XG4gICAgfSwgZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBcIkFsd2F5c09mZlNhbXBsZXJcIjtcbiAgICB9LCBlO1xuICB9KClcbiksIGcgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnNob3VsZFNhbXBsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVjaXNpb246IFAuUkVDT1JEX0FORF9TQU1QTEVEXG4gICAgICB9O1xuICAgIH0sIGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXCJBbHdheXNPblNhbXBsZXJcIjtcbiAgICB9LCBlO1xuICB9KClcbiksIEQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB2YXIgciwgbiwgbywgaTtcbiAgICAgIHRoaXMuX3Jvb3QgPSB0LnJvb3QsIHRoaXMuX3Jvb3QgfHwgKG5lJDEobmV3IEVycm9yKFwiUGFyZW50QmFzZWRTYW1wbGVyIG11c3QgaGF2ZSBhIHJvb3Qgc2FtcGxlciBjb25maWd1cmVkXCIpKSwgdGhpcy5fcm9vdCA9IG5ldyBnKCkpLCB0aGlzLl9yZW1vdGVQYXJlbnRTYW1wbGVkID0gKHIgPSB0LnJlbW90ZVBhcmVudFNhbXBsZWQpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBuZXcgZygpLCB0aGlzLl9yZW1vdGVQYXJlbnROb3RTYW1wbGVkID0gKG4gPSB0LnJlbW90ZVBhcmVudE5vdFNhbXBsZWQpICE9PSBudWxsICYmIG4gIT09IHZvaWQgMCA/IG4gOiBuZXcgSSgpLCB0aGlzLl9sb2NhbFBhcmVudFNhbXBsZWQgPSAobyA9IHQubG9jYWxQYXJlbnRTYW1wbGVkKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogbmV3IGcoKSwgdGhpcy5fbG9jYWxQYXJlbnROb3RTYW1wbGVkID0gKGkgPSB0LmxvY2FsUGFyZW50Tm90U2FtcGxlZCkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IG5ldyBJKCk7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zaG91bGRTYW1wbGUgPSBmdW5jdGlvbih0LCByLCBuLCBvLCBpLCBhKSB7XG4gICAgICB2YXIgcyA9IE9lLmdldFNwYW5Db250ZXh0KHQpO1xuICAgICAgcmV0dXJuICFzIHx8ICFjcihzKSA/IHRoaXMuX3Jvb3Quc2hvdWxkU2FtcGxlKHQsIHIsIG4sIG8sIGksIGEpIDogcy5pc1JlbW90ZSA/IHMudHJhY2VGbGFncyAmIFV0JDEuU0FNUExFRCA/IHRoaXMuX3JlbW90ZVBhcmVudFNhbXBsZWQuc2hvdWxkU2FtcGxlKHQsIHIsIG4sIG8sIGksIGEpIDogdGhpcy5fcmVtb3RlUGFyZW50Tm90U2FtcGxlZC5zaG91bGRTYW1wbGUodCwgciwgbiwgbywgaSwgYSkgOiBzLnRyYWNlRmxhZ3MgJiBVdCQxLlNBTVBMRUQgPyB0aGlzLl9sb2NhbFBhcmVudFNhbXBsZWQuc2hvdWxkU2FtcGxlKHQsIHIsIG4sIG8sIGksIGEpIDogdGhpcy5fbG9jYWxQYXJlbnROb3RTYW1wbGVkLnNob3VsZFNhbXBsZSh0LCByLCBuLCBvLCBpLCBhKTtcbiAgICB9LCBlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFwiUGFyZW50QmFzZWR7cm9vdD1cIiArIHRoaXMuX3Jvb3QudG9TdHJpbmcoKSArIFwiLCByZW1vdGVQYXJlbnRTYW1wbGVkPVwiICsgdGhpcy5fcmVtb3RlUGFyZW50U2FtcGxlZC50b1N0cmluZygpICsgXCIsIHJlbW90ZVBhcmVudE5vdFNhbXBsZWQ9XCIgKyB0aGlzLl9yZW1vdGVQYXJlbnROb3RTYW1wbGVkLnRvU3RyaW5nKCkgKyBcIiwgbG9jYWxQYXJlbnRTYW1wbGVkPVwiICsgdGhpcy5fbG9jYWxQYXJlbnRTYW1wbGVkLnRvU3RyaW5nKCkgKyBcIiwgbG9jYWxQYXJlbnROb3RTYW1wbGVkPVwiICsgdGhpcy5fbG9jYWxQYXJlbnROb3RTYW1wbGVkLnRvU3RyaW5nKCkgKyBcIn1cIjtcbiAgICB9LCBlO1xuICB9KClcbiksIFcgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB0ID09PSB2b2lkIDAgJiYgKHQgPSAwKSwgdGhpcy5fcmF0aW8gPSB0LCB0aGlzLl9yYXRpbyA9IHRoaXMuX25vcm1hbGl6ZSh0KSwgdGhpcy5fdXBwZXJCb3VuZCA9IE1hdGguZmxvb3IodGhpcy5fcmF0aW8gKiA0Mjk0OTY3Mjk1KTtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnNob3VsZFNhbXBsZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlY2lzaW9uOiBxaShyKSAmJiB0aGlzLl9hY2N1bXVsYXRlKHIpIDwgdGhpcy5fdXBwZXJCb3VuZCA/IFAuUkVDT1JEX0FORF9TQU1QTEVEIDogUC5OT1RfUkVDT1JEXG4gICAgICB9O1xuICAgIH0sIGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXCJUcmFjZUlkUmF0aW9CYXNlZHtcIiArIHRoaXMuX3JhdGlvICsgXCJ9XCI7XG4gICAgfSwgZS5wcm90b3R5cGUuX25vcm1hbGl6ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdCAhPSBcIm51bWJlclwiIHx8IGlzTmFOKHQpID8gMCA6IHQgPj0gMSA/IDEgOiB0IDw9IDAgPyAwIDogdDtcbiAgICB9LCBlLnByb3RvdHlwZS5fYWNjdW11bGF0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIGZvciAodmFyIHIgPSAwLCBuID0gMDsgbiA8IHQubGVuZ3RoIC8gODsgbisrKSB7XG4gICAgICAgIHZhciBvID0gbiAqIDgsIGkgPSBwYXJzZUludCh0LnNsaWNlKG8sIG8gKyA4KSwgMTYpO1xuICAgICAgICByID0gKHIgXiBpKSA+Pj4gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgUnQgPSByJDEuQWx3YXlzT24sIEUgPSAxO1xuZnVuY3Rpb24gSigpIHtcbiAgdmFyIGUgPSBPVCgpO1xuICByZXR1cm4ge1xuICAgIHNhbXBsZXI6ICQoZSksXG4gICAgZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXM6IDNlNCxcbiAgICBnZW5lcmFsTGltaXRzOiB7XG4gICAgICBhdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0OiBlLk9URUxfQVRUUklCVVRFX1ZBTFVFX0xFTkdUSF9MSU1JVCxcbiAgICAgIGF0dHJpYnV0ZUNvdW50TGltaXQ6IGUuT1RFTF9BVFRSSUJVVEVfQ09VTlRfTElNSVRcbiAgICB9LFxuICAgIHNwYW5MaW1pdHM6IHtcbiAgICAgIGF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQ6IGUuT1RFTF9TUEFOX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQsXG4gICAgICBhdHRyaWJ1dGVDb3VudExpbWl0OiBlLk9URUxfU1BBTl9BVFRSSUJVVEVfQ09VTlRfTElNSVQsXG4gICAgICBsaW5rQ291bnRMaW1pdDogZS5PVEVMX1NQQU5fTElOS19DT1VOVF9MSU1JVCxcbiAgICAgIGV2ZW50Q291bnRMaW1pdDogZS5PVEVMX1NQQU5fRVZFTlRfQ09VTlRfTElNSVQsXG4gICAgICBhdHRyaWJ1dGVQZXJFdmVudENvdW50TGltaXQ6IGUuT1RFTF9TUEFOX0FUVFJJQlVURV9QRVJfRVZFTlRfQ09VTlRfTElNSVQsXG4gICAgICBhdHRyaWJ1dGVQZXJMaW5rQ291bnRMaW1pdDogZS5PVEVMX1NQQU5fQVRUUklCVVRFX1BFUl9MSU5LX0NPVU5UX0xJTUlUXG4gICAgfSxcbiAgICBtZXJnZVJlc291cmNlV2l0aERlZmF1bHRzOiAhMFxuICB9O1xufVxuZnVuY3Rpb24gJChlKSB7XG4gIHN3aXRjaCAoZSA9PT0gdm9pZCAwICYmIChlID0gT1QoKSksIGUuT1RFTF9UUkFDRVNfU0FNUExFUikge1xuICAgIGNhc2UgciQxLkFsd2F5c09uOlxuICAgICAgcmV0dXJuIG5ldyBnKCk7XG4gICAgY2FzZSByJDEuQWx3YXlzT2ZmOlxuICAgICAgcmV0dXJuIG5ldyBJKCk7XG4gICAgY2FzZSByJDEuUGFyZW50QmFzZWRBbHdheXNPbjpcbiAgICAgIHJldHVybiBuZXcgRCh7XG4gICAgICAgIHJvb3Q6IG5ldyBnKClcbiAgICAgIH0pO1xuICAgIGNhc2UgciQxLlBhcmVudEJhc2VkQWx3YXlzT2ZmOlxuICAgICAgcmV0dXJuIG5ldyBEKHtcbiAgICAgICAgcm9vdDogbmV3IEkoKVxuICAgICAgfSk7XG4gICAgY2FzZSByJDEuVHJhY2VJZFJhdGlvOlxuICAgICAgcmV0dXJuIG5ldyBXKFkoZSkpO1xuICAgIGNhc2UgciQxLlBhcmVudEJhc2VkVHJhY2VJZFJhdGlvOlxuICAgICAgcmV0dXJuIG5ldyBEKHtcbiAgICAgICAgcm9vdDogbmV3IFcoWShlKSlcbiAgICAgIH0pO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gci5lcnJvcignT1RFTF9UUkFDRVNfU0FNUExFUiB2YWx1ZSBcIicgKyBlLk9URUxfVFJBQ0VTX1NBTVBMRVIgKyBcIiBpbnZhbGlkLCBkZWZhdWx0aW5nIHRvIFwiICsgUnQgKyAnXCIuJyksIG5ldyBnKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIFkoZSkge1xuICBpZiAoZS5PVEVMX1RSQUNFU19TQU1QTEVSX0FSRyA9PT0gdm9pZCAwIHx8IGUuT1RFTF9UUkFDRVNfU0FNUExFUl9BUkcgPT09IFwiXCIpXG4gICAgcmV0dXJuIHIuZXJyb3IoXCJPVEVMX1RSQUNFU19TQU1QTEVSX0FSRyBpcyBibGFuaywgZGVmYXVsdGluZyB0byBcIiArIEUgKyBcIi5cIiksIEU7XG4gIHZhciB0ID0gTnVtYmVyKGUuT1RFTF9UUkFDRVNfU0FNUExFUl9BUkcpO1xuICByZXR1cm4gaXNOYU4odCkgPyAoci5lcnJvcihcIk9URUxfVFJBQ0VTX1NBTVBMRVJfQVJHPVwiICsgZS5PVEVMX1RSQUNFU19TQU1QTEVSX0FSRyArIFwiIHdhcyBnaXZlbiwgYnV0IGl0IGlzIGludmFsaWQsIGRlZmF1bHRpbmcgdG8gXCIgKyBFICsgXCIuXCIpLCBFKSA6IHQgPCAwIHx8IHQgPiAxID8gKHIuZXJyb3IoXCJPVEVMX1RSQUNFU19TQU1QTEVSX0FSRz1cIiArIGUuT1RFTF9UUkFDRVNfU0FNUExFUl9BUkcgKyBcIiB3YXMgZ2l2ZW4sIGJ1dCBpdCBpcyBvdXQgb2YgcmFuZ2UgKFswLi4xXSksIGRlZmF1bHRpbmcgdG8gXCIgKyBFICsgXCIuXCIpLCBFKSA6IHQ7XG59XG5mdW5jdGlvbiBJdChlKSB7XG4gIHZhciB0ID0ge1xuICAgIHNhbXBsZXI6ICQoKVxuICB9LCByID0gSigpLCBuID0gT2JqZWN0LmFzc2lnbih7fSwgciwgdCwgZSk7XG4gIHJldHVybiBuLmdlbmVyYWxMaW1pdHMgPSBPYmplY3QuYXNzaWduKHt9LCByLmdlbmVyYWxMaW1pdHMsIGUuZ2VuZXJhbExpbWl0cyB8fCB7fSksIG4uc3BhbkxpbWl0cyA9IE9iamVjdC5hc3NpZ24oe30sIHIuc3BhbkxpbWl0cywgZS5zcGFuTGltaXRzIHx8IHt9KSwgbjtcbn1cbmZ1bmN0aW9uIE10KGUpIHtcbiAgdmFyIHQsIHIsIG4sIG8sIGksIGEsIHMsIGwsIHUsIHAsIGYsIGMsIHkgPSBPYmplY3QuYXNzaWduKHt9LCBlLnNwYW5MaW1pdHMpLCBtID0gTFQoKTtcbiAgcmV0dXJuIHkuYXR0cmlidXRlQ291bnRMaW1pdCA9IChhID0gKGkgPSAobyA9IChyID0gKHQgPSBlLnNwYW5MaW1pdHMpID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQuYXR0cmlidXRlQ291bnRMaW1pdCkgIT09IG51bGwgJiYgciAhPT0gdm9pZCAwID8gciA6IChuID0gZS5nZW5lcmFsTGltaXRzKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLmF0dHJpYnV0ZUNvdW50TGltaXQpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiBtLk9URUxfU1BBTl9BVFRSSUJVVEVfQ09VTlRfTElNSVQpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBtLk9URUxfQVRUUklCVVRFX0NPVU5UX0xJTUlUKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogUCQxLCB5LmF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQgPSAoYyA9IChmID0gKHAgPSAobCA9IChzID0gZS5zcGFuTGltaXRzKSA9PT0gbnVsbCB8fCBzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzLmF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQpICE9PSBudWxsICYmIGwgIT09IHZvaWQgMCA/IGwgOiAodSA9IGUuZ2VuZXJhbExpbWl0cykgPT09IG51bGwgfHwgdSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdS5hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0KSAhPT0gbnVsbCAmJiBwICE9PSB2b2lkIDAgPyBwIDogbS5PVEVMX1NQQU5fQVRUUklCVVRFX1ZBTFVFX0xFTkdUSF9MSU1JVCkgIT09IG51bGwgJiYgZiAhPT0gdm9pZCAwID8gZiA6IG0uT1RFTF9BVFRSSUJVVEVfVkFMVUVfTEVOR1RIX0xJTUlUKSAhPT0gbnVsbCAmJiBjICE9PSB2b2lkIDAgPyBjIDogTSwgT2JqZWN0LmFzc2lnbih7fSwgZSwgeyBzcGFuTGltaXRzOiB5IH0pO1xufVxudmFyIE50ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCwgciQxKSB7XG4gICAgICB0aGlzLl9leHBvcnRlciA9IHQsIHRoaXMuX2lzRXhwb3J0aW5nID0gITEsIHRoaXMuX2ZpbmlzaGVkU3BhbnMgPSBbXSwgdGhpcy5fZHJvcHBlZFNwYW5zQ291bnQgPSAwO1xuICAgICAgdmFyIG4gPSBPVCgpO1xuICAgICAgdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplID0gdHlwZW9mIChyJDEgPT0gbnVsbCA/IHZvaWQgMCA6IHIkMS5tYXhFeHBvcnRCYXRjaFNpemUpID09IFwibnVtYmVyXCIgPyByJDEubWF4RXhwb3J0QmF0Y2hTaXplIDogbi5PVEVMX0JTUF9NQVhfRVhQT1JUX0JBVENIX1NJWkUsIHRoaXMuX21heFF1ZXVlU2l6ZSA9IHR5cGVvZiAociQxID09IG51bGwgPyB2b2lkIDAgOiByJDEubWF4UXVldWVTaXplKSA9PSBcIm51bWJlclwiID8gciQxLm1heFF1ZXVlU2l6ZSA6IG4uT1RFTF9CU1BfTUFYX1FVRVVFX1NJWkUsIHRoaXMuX3NjaGVkdWxlZERlbGF5TWlsbGlzID0gdHlwZW9mIChyJDEgPT0gbnVsbCA/IHZvaWQgMCA6IHIkMS5zY2hlZHVsZWREZWxheU1pbGxpcykgPT0gXCJudW1iZXJcIiA/IHIkMS5zY2hlZHVsZWREZWxheU1pbGxpcyA6IG4uT1RFTF9CU1BfU0NIRURVTEVfREVMQVksIHRoaXMuX2V4cG9ydFRpbWVvdXRNaWxsaXMgPSB0eXBlb2YgKHIkMSA9PSBudWxsID8gdm9pZCAwIDogciQxLmV4cG9ydFRpbWVvdXRNaWxsaXMpID09IFwibnVtYmVyXCIgPyByJDEuZXhwb3J0VGltZW91dE1pbGxpcyA6IG4uT1RFTF9CU1BfRVhQT1JUX1RJTUVPVVQsIHRoaXMuX3NodXRkb3duT25jZSA9IG5ldyBacih0aGlzLl9zaHV0ZG93biwgdGhpcyksIHRoaXMuX21heEV4cG9ydEJhdGNoU2l6ZSA+IHRoaXMuX21heFF1ZXVlU2l6ZSAmJiAoci53YXJuKFwiQmF0Y2hTcGFuUHJvY2Vzc29yOiBtYXhFeHBvcnRCYXRjaFNpemUgbXVzdCBiZSBzbWFsbGVyIG9yIGVxdWFsIHRvIG1heFF1ZXVlU2l6ZSwgc2V0dGluZyBtYXhFeHBvcnRCYXRjaFNpemUgdG8gbWF0Y2ggbWF4UXVldWVTaXplXCIpLCB0aGlzLl9tYXhFeHBvcnRCYXRjaFNpemUgPSB0aGlzLl9tYXhRdWV1ZVNpemUpO1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NodXRkb3duT25jZS5pc0NhbGxlZCA/IHRoaXMuX3NodXRkb3duT25jZS5wcm9taXNlIDogdGhpcy5fZmx1c2hBbGwoKTtcbiAgICB9LCBlLnByb3RvdHlwZS5vblN0YXJ0ID0gZnVuY3Rpb24odCwgcikge1xuICAgIH0sIGUucHJvdG90eXBlLm9uRW5kID0gZnVuY3Rpb24odCkge1xuICAgICAgdGhpcy5fc2h1dGRvd25PbmNlLmlzQ2FsbGVkIHx8IHQuc3BhbkNvbnRleHQoKS50cmFjZUZsYWdzICYgVXQkMS5TQU1QTEVEICYmIHRoaXMuX2FkZFRvQnVmZmVyKHQpO1xuICAgIH0sIGUucHJvdG90eXBlLnNodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2h1dGRvd25PbmNlLmNhbGwoKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fc2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gdGhpcztcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdC5vblNodXRkb3duKCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdC5fZmx1c2hBbGwoKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0Ll9leHBvcnRlci5zaHV0ZG93bigpO1xuICAgICAgfSk7XG4gICAgfSwgZS5wcm90b3R5cGUuX2FkZFRvQnVmZmVyID0gZnVuY3Rpb24odCkge1xuICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoID49IHRoaXMuX21heFF1ZXVlU2l6ZSkge1xuICAgICAgICB0aGlzLl9kcm9wcGVkU3BhbnNDb3VudCA9PT0gMCAmJiByLmRlYnVnKFwibWF4UXVldWVTaXplIHJlYWNoZWQsIGRyb3BwaW5nIHNwYW5zXCIpLCB0aGlzLl9kcm9wcGVkU3BhbnNDb3VudCsrO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9kcm9wcGVkU3BhbnNDb3VudCA+IDAgJiYgKHIud2FybihcIkRyb3BwZWQgXCIgKyB0aGlzLl9kcm9wcGVkU3BhbnNDb3VudCArIFwiIHNwYW5zIGJlY2F1c2UgbWF4UXVldWVTaXplIHJlYWNoZWRcIiksIHRoaXMuX2Ryb3BwZWRTcGFuc0NvdW50ID0gMCksIHRoaXMuX2ZpbmlzaGVkU3BhbnMucHVzaCh0KSwgdGhpcy5fbWF5YmVTdGFydFRpbWVyKCk7XG4gICAgfSwgZS5wcm90b3R5cGUuX2ZsdXNoQWxsID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdCA9IHRoaXM7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ociwgbikge1xuICAgICAgICBmb3IgKHZhciBvID0gW10sIGkgPSBNYXRoLmNlaWwodC5fZmluaXNoZWRTcGFucy5sZW5ndGggLyB0Ll9tYXhFeHBvcnRCYXRjaFNpemUpLCBhID0gMCwgcyA9IGk7IGEgPCBzOyBhKyspXG4gICAgICAgICAgby5wdXNoKHQuX2ZsdXNoT25lQmF0Y2goKSk7XG4gICAgICAgIFByb21pc2UuYWxsKG8pLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcigpO1xuICAgICAgICB9KS5jYXRjaChuKTtcbiAgICAgIH0pO1xuICAgIH0sIGUucHJvdG90eXBlLl9mbHVzaE9uZUJhdGNoID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdCA9IHRoaXM7XG4gICAgICByZXR1cm4gdGhpcy5fY2xlYXJUaW1lcigpLCB0aGlzLl9maW5pc2hlZFNwYW5zLmxlbmd0aCA9PT0gMCA/IFByb21pc2UucmVzb2x2ZSgpIDogbmV3IFByb21pc2UoZnVuY3Rpb24ociwgbikge1xuICAgICAgICB2YXIgbyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbihuZXcgRXJyb3IoXCJUaW1lb3V0XCIpKTtcbiAgICAgICAgfSwgdC5fZXhwb3J0VGltZW91dE1pbGxpcyk7XG4gICAgICAgIE1lLndpdGgoVyQxKE1lLmFjdGl2ZSgpKSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgdC5fZmluaXNoZWRTcGFucy5sZW5ndGggPD0gdC5fbWF4RXhwb3J0QmF0Y2hTaXplID8gKGkgPSB0Ll9maW5pc2hlZFNwYW5zLCB0Ll9maW5pc2hlZFNwYW5zID0gW10pIDogaSA9IHQuX2ZpbmlzaGVkU3BhbnMuc3BsaWNlKDAsIHQuX21heEV4cG9ydEJhdGNoU2l6ZSk7XG4gICAgICAgICAgZm9yICh2YXIgYSQxID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdC5fZXhwb3J0ZXIuZXhwb3J0KGksIGZ1bmN0aW9uKGYpIHtcbiAgICAgICAgICAgICAgdmFyIGM7XG4gICAgICAgICAgICAgIGNsZWFyVGltZW91dChvKSwgZi5jb2RlID09PSBhLlNVQ0NFU1MgPyByKCkgOiBuKChjID0gZi5lcnJvcikgIT09IG51bGwgJiYgYyAhPT0gdm9pZCAwID8gYyA6IG5ldyBFcnJvcihcIkJhdGNoU3BhblByb2Nlc3Nvcjogc3BhbiBleHBvcnQgZmFpbGVkXCIpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sIHMgPSBudWxsLCBsID0gMCwgdSA9IGkubGVuZ3RoOyBsIDwgdTsgbCsrKSB7XG4gICAgICAgICAgICB2YXIgcCA9IGlbbF07XG4gICAgICAgICAgICBwLnJlc291cmNlLmFzeW5jQXR0cmlidXRlc1BlbmRpbmcgJiYgcC5yZXNvdXJjZS53YWl0Rm9yQXN5bmNBdHRyaWJ1dGVzICYmIChzID8/IChzID0gW10pLCBzLnB1c2gocC5yZXNvdXJjZS53YWl0Rm9yQXN5bmNBdHRyaWJ1dGVzKCkpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcyA9PT0gbnVsbCA/IGEkMSgpIDogUHJvbWlzZS5hbGwocykudGhlbihhJDEsIGZ1bmN0aW9uKGYpIHtcbiAgICAgICAgICAgIG5lJDEoZiksIG4oZik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgZS5wcm90b3R5cGUuX21heWJlU3RhcnRUaW1lciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSB0aGlzO1xuICAgICAgaWYgKCF0aGlzLl9pc0V4cG9ydGluZykge1xuICAgICAgICB2YXIgciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHQuX2lzRXhwb3J0aW5nID0gITAsIHQuX2ZsdXNoT25lQmF0Y2goKS5maW5hbGx5KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdC5faXNFeHBvcnRpbmcgPSAhMSwgdC5fZmluaXNoZWRTcGFucy5sZW5ndGggPiAwICYmICh0Ll9jbGVhclRpbWVyKCksIHQuX21heWJlU3RhcnRUaW1lcigpKTtcbiAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihuKSB7XG4gICAgICAgICAgICB0Ll9pc0V4cG9ydGluZyA9ICExLCBuZSQxKG4pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5fZmluaXNoZWRTcGFucy5sZW5ndGggPj0gdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplKVxuICAgICAgICAgIHJldHVybiByKCk7XG4gICAgICAgIHRoaXMuX3RpbWVyID09PSB2b2lkIDAgJiYgKHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gcigpO1xuICAgICAgICB9LCB0aGlzLl9zY2hlZHVsZWREZWxheU1pbGxpcyksIHNyKHRoaXMuX3RpbWVyKSk7XG4gICAgICB9XG4gICAgfSwgZS5wcm90b3R5cGUuX2NsZWFyVGltZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuX3RpbWVyICE9PSB2b2lkIDAgJiYgKGNsZWFyVGltZW91dCh0aGlzLl90aW1lciksIHRoaXMuX3RpbWVyID0gdm9pZCAwKTtcbiAgICB9LCBlO1xuICB9KClcbiksIEJ0ID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICByZXR1cm4gZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKG4sIG8pIHtcbiAgICAgIG4uX19wcm90b19fID0gbztcbiAgICB9IHx8IGZ1bmN0aW9uKG4sIG8pIHtcbiAgICAgIGZvciAodmFyIGkgaW4gbykgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGkpICYmIChuW2ldID0gb1tpXSk7XG4gICAgfSwgZSh0LCByKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBpZiAodHlwZW9mIHIgIT0gXCJmdW5jdGlvblwiICYmIHIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhyKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgZSh0LCByKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHQ7XG4gICAgfVxuICAgIHQucHJvdG90eXBlID0gciA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUocikgOiAobi5wcm90b3R5cGUgPSByLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIER0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKGUpIHtcbiAgICBCdCh0LCBlKTtcbiAgICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICAgIHZhciBvID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgICByZXR1cm4gby5vbkluaXQobiksIG87XG4gICAgfVxuICAgIHJldHVybiB0LnByb3RvdHlwZS5vbkluaXQgPSBmdW5jdGlvbihyKSB7XG4gICAgICB2YXIgbiA9IHRoaXM7XG4gICAgICAociA9PSBudWxsID8gdm9pZCAwIDogci5kaXNhYmxlQXV0b0ZsdXNoT25Eb2N1bWVudEhpZGUpICE9PSAhMCAmJiB0eXBlb2YgZG9jdW1lbnQgPCBcInVcIiAmJiAodGhpcy5fdmlzaWJpbGl0eUNoYW5nZUxpc3RlbmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gXCJoaWRkZW5cIiAmJiBuLmZvcmNlRmx1c2goKS5jYXRjaChmdW5jdGlvbihvKSB7XG4gICAgICAgICAgbmUkMShvKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCB0aGlzLl9wYWdlSGlkZUxpc3RlbmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIG4uZm9yY2VGbHVzaCgpLmNhdGNoKGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICBuZSQxKG8pO1xuICAgICAgICB9KTtcbiAgICAgIH0sIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIHRoaXMuX3Zpc2liaWxpdHlDaGFuZ2VMaXN0ZW5lciksIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwYWdlaGlkZVwiLCB0aGlzLl9wYWdlSGlkZUxpc3RlbmVyKSk7XG4gICAgfSwgdC5wcm90b3R5cGUub25TaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgdHlwZW9mIGRvY3VtZW50IDwgXCJ1XCIgJiYgKHRoaXMuX3Zpc2liaWxpdHlDaGFuZ2VMaXN0ZW5lciAmJiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCB0aGlzLl92aXNpYmlsaXR5Q2hhbmdlTGlzdGVuZXIpLCB0aGlzLl9wYWdlSGlkZUxpc3RlbmVyICYmIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwYWdlaGlkZVwiLCB0aGlzLl9wYWdlSGlkZUxpc3RlbmVyKSk7XG4gICAgfSwgdDtcbiAgfShOdClcbiksIFV0ID0gOCwgRnQgPSAxNiwgR3QgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlVHJhY2VJZCA9IHEoRnQpLCB0aGlzLmdlbmVyYXRlU3BhbklkID0gcShVdCk7XG4gICAgfVxuICAgIHJldHVybiBlO1xuICB9KClcbiksIHggPSBBcnJheSgzMik7XG5mdW5jdGlvbiBxKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHIgPSAwOyByIDwgZSAqIDI7IHIrKylcbiAgICAgIHhbcl0gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxNikgKyA0OCwgeFtyXSA+PSA1OCAmJiAoeFtyXSArPSAzOSk7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgeC5zbGljZSgwLCBlICogMikpO1xuICB9O1xufVxudmFyIHp0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCwgciwgbikge1xuICAgICAgdGhpcy5fdHJhY2VyUHJvdmlkZXIgPSBuO1xuICAgICAgdmFyIG8gPSBJdChyKTtcbiAgICAgIHRoaXMuX3NhbXBsZXIgPSBvLnNhbXBsZXIsIHRoaXMuX2dlbmVyYWxMaW1pdHMgPSBvLmdlbmVyYWxMaW1pdHMsIHRoaXMuX3NwYW5MaW1pdHMgPSBvLnNwYW5MaW1pdHMsIHRoaXMuX2lkR2VuZXJhdG9yID0gci5pZEdlbmVyYXRvciB8fCBuZXcgR3QoKSwgdGhpcy5yZXNvdXJjZSA9IG4ucmVzb3VyY2UsIHRoaXMuaW5zdHJ1bWVudGF0aW9uTGlicmFyeSA9IHQ7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCByJDEsIG4pIHtcbiAgICAgIHZhciBvLCBpLCBhO1xuICAgICAgciQxID09PSB2b2lkIDAgJiYgKHIkMSA9IHt9KSwgbiA9PT0gdm9pZCAwICYmIChuID0gTWUuYWN0aXZlKCkpLCByJDEucm9vdCAmJiAobiA9IE9lLmRlbGV0ZVNwYW4obikpO1xuICAgICAgdmFyIHMgPSBPZS5nZXRTcGFuKG4pO1xuICAgICAgaWYgKHcobikpIHtcbiAgICAgICAgci5kZWJ1ZyhcIkluc3RydW1lbnRhdGlvbiBzdXBwcmVzc2VkLCByZXR1cm5pbmcgTm9vcCBTcGFuXCIpO1xuICAgICAgICB2YXIgbCA9IE9lLndyYXBTcGFuQ29udGV4dChVaSk7XG4gICAgICAgIHJldHVybiBsO1xuICAgICAgfVxuICAgICAgdmFyIHUgPSBzID09IG51bGwgPyB2b2lkIDAgOiBzLnNwYW5Db250ZXh0KCksIHAkMSA9IHRoaXMuX2lkR2VuZXJhdG9yLmdlbmVyYXRlU3BhbklkKCksIGYsIGMsIHk7XG4gICAgICAhdSB8fCAhT2UuaXNTcGFuQ29udGV4dFZhbGlkKHUpID8gZiA9IHRoaXMuX2lkR2VuZXJhdG9yLmdlbmVyYXRlVHJhY2VJZCgpIDogKGYgPSB1LnRyYWNlSWQsIGMgPSB1LnRyYWNlU3RhdGUsIHkgPSB1LnNwYW5JZCk7XG4gICAgICB2YXIgbSA9IChvID0gciQxLmtpbmQpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiB0dC5JTlRFUk5BTCwgRiA9ICgoaSA9IHIkMS5saW5rcykgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IFtdKS5tYXAoZnVuY3Rpb24oaikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRleHQ6IGouY29udGV4dCxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiBaZShqLmF0dHJpYnV0ZXMpXG4gICAgICAgIH07XG4gICAgICB9KSwgRyA9IFplKHIkMS5hdHRyaWJ1dGVzKSwgYiA9IHRoaXMuX3NhbXBsZXIuc2hvdWxkU2FtcGxlKG4sIGYsIHQsIG0sIEcsIEYpO1xuICAgICAgYyA9IChhID0gYi50cmFjZVN0YXRlKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogYztcbiAgICAgIHZhciB0dCQxID0gYi5kZWNpc2lvbiA9PT0gcC5SRUNPUkRfQU5EX1NBTVBMRUQgPyBVdCQxLlNBTVBMRUQgOiBVdCQxLk5PTkUsIHogPSB7IHRyYWNlSWQ6IGYsIHNwYW5JZDogcCQxLCB0cmFjZUZsYWdzOiB0dCQxLCB0cmFjZVN0YXRlOiBjIH07XG4gICAgICBpZiAoYi5kZWNpc2lvbiA9PT0gcC5OT1RfUkVDT1JEKSB7XG4gICAgICAgIHIuZGVidWcoXCJSZWNvcmRpbmcgaXMgb2ZmLCBwcm9wYWdhdGluZyBjb250ZXh0IGluIGEgbm9uLXJlY29yZGluZyBzcGFuXCIpO1xuICAgICAgICB2YXIgbCA9IE9lLndyYXBTcGFuQ29udGV4dCh6KTtcbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9XG4gICAgICB2YXIgZXQgPSBaZShPYmplY3QuYXNzaWduKEcsIGIuYXR0cmlidXRlcykpLCBydCA9IG5ldyBPdCh0aGlzLCBuLCB0LCB6LCBtLCB5LCBGLCByJDEuc3RhcnRUaW1lLCB2b2lkIDAsIGV0KTtcbiAgICAgIHJldHVybiBydDtcbiAgICB9LCBlLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbih0LCByLCBuLCBvKSB7XG4gICAgICB2YXIgaSwgYSwgcztcbiAgICAgIGlmICghKGFyZ3VtZW50cy5sZW5ndGggPCAyKSkge1xuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID09PSAyID8gcyA9IHIgOiBhcmd1bWVudHMubGVuZ3RoID09PSAzID8gKGkgPSByLCBzID0gbikgOiAoaSA9IHIsIGEgPSBuLCBzID0gbyk7XG4gICAgICAgIHZhciBsID0gYSA/PyBNZS5hY3RpdmUoKSwgdSA9IHRoaXMuc3RhcnRTcGFuKHQsIGksIGwpLCBwID0gT2Uuc2V0U3BhbihsLCB1KTtcbiAgICAgICAgcmV0dXJuIE1lLndpdGgocCwgcywgdm9pZCAwLCB1KTtcbiAgICAgIH1cbiAgICB9LCBlLnByb3RvdHlwZS5nZXRHZW5lcmFsTGltaXRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2VuZXJhbExpbWl0cztcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRTcGFuTGltaXRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3BhbkxpbWl0cztcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRBY3RpdmVTcGFuUHJvY2Vzc29yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhY2VyUHJvdmlkZXIuZ2V0QWN0aXZlU3BhblByb2Nlc3NvcigpO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgTyA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIHIgPSB0ICYmIGVbdF0sIG4gPSAwO1xuICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgaWYgKGUgJiYgdHlwZW9mIGUubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZSAmJiBuID49IGUubGVuZ3RoICYmIChlID0gdm9pZCAwKSwgeyB2YWx1ZTogZSAmJiBlW24rK10sIGRvbmU6ICFlIH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHQgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59LCBLID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdGhpcy5fc3BhblByb2Nlc3NvcnMgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQsIHIsIG4gPSBbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIG8gPSBPKHRoaXMuX3NwYW5Qcm9jZXNzb3JzKSwgaSA9IG8ubmV4dCgpOyAhaS5kb25lOyBpID0gby5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgYSA9IGkudmFsdWU7XG4gICAgICAgICAgbi5wdXNoKGEuZm9yY2VGbHVzaCgpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICB0ID0geyBlcnJvcjogcyB9O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpICYmICFpLmRvbmUgJiYgKHIgPSBvLnJldHVybikgJiYgci5jYWxsKG8pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocykge1xuICAgICAgICBQcm9taXNlLmFsbChuKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHMoKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24obCkge1xuICAgICAgICAgIG5lJDEobCB8fCBuZXcgRXJyb3IoXCJNdWx0aVNwYW5Qcm9jZXNzb3I6IGZvcmNlRmx1c2ggZmFpbGVkXCIpKSwgcygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIGUucHJvdG90eXBlLm9uU3RhcnQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICB2YXIgbiwgbztcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBPKHRoaXMuX3NwYW5Qcm9jZXNzb3JzKSwgYSA9IGkubmV4dCgpOyAhYS5kb25lOyBhID0gaS5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgcyA9IGEudmFsdWU7XG4gICAgICAgICAgcy5vblN0YXJ0KHQsIHIpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgIG4gPSB7IGVycm9yOiBsIH07XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGEgJiYgIWEuZG9uZSAmJiAobyA9IGkucmV0dXJuKSAmJiBvLmNhbGwoaSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciByLCBuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgbyA9IE8odGhpcy5fc3BhblByb2Nlc3NvcnMpLCBpID0gby5uZXh0KCk7ICFpLmRvbmU7IGkgPSBvLm5leHQoKSkge1xuICAgICAgICAgIHZhciBhID0gaS52YWx1ZTtcbiAgICAgICAgICBhLm9uRW5kKHQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgIHIgPSB7IGVycm9yOiBzIH07XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGkgJiYgIWkuZG9uZSAmJiAobiA9IG8ucmV0dXJuKSAmJiBuLmNhbGwobyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKHIpIHRocm93IHIuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBlLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQsIHIsIG4gPSBbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIG8gPSBPKHRoaXMuX3NwYW5Qcm9jZXNzb3JzKSwgaSA9IG8ubmV4dCgpOyAhaS5kb25lOyBpID0gby5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgYSA9IGkudmFsdWU7XG4gICAgICAgICAgbi5wdXNoKGEuc2h1dGRvd24oKSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgICAgdCA9IHsgZXJyb3I6IHMgfTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaSAmJiAhaS5kb25lICYmIChyID0gby5yZXR1cm4pICYmIHIuY2FsbChvKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAodCkgdGhyb3cgdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHMsIGwpIHtcbiAgICAgICAgUHJvbWlzZS5hbGwobikudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICBzKCk7XG4gICAgICAgIH0sIGwpO1xuICAgICAgfSk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBqdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUub25TdGFydCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB9LCBlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB9LCBlLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0sIGUucHJvdG90eXBlLmZvcmNlRmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9LCBlO1xuICB9KClcbiksIFZ0ID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIG8sIGkgPSBbXSwgYTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKG8gPSBuLm5leHQoKSkuZG9uZTsgKSBpLnB1c2goby52YWx1ZSk7XG4gIH0gY2F0Y2ggKHMpIHtcbiAgICBhID0geyBlcnJvcjogcyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59LCBrdCA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBvID0gdC5sZW5ndGgsIGk7IG4gPCBvOyBuKyspXG4gICAgKGkgfHwgIShuIGluIHQpKSAmJiAoaSB8fCAoaSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgaVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoaSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBTO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLnJlc29sdmVkID0gMF0gPSBcInJlc29sdmVkXCIsIGVbZS50aW1lb3V0ID0gMV0gPSBcInRpbWVvdXRcIiwgZVtlLmVycm9yID0gMl0gPSBcImVycm9yXCIsIGVbZS51bnJlc29sdmVkID0gM10gPSBcInVucmVzb2x2ZWRcIjtcbn0pKFMgfHwgKFMgPSB7fSkpO1xudmFyIHJlID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdCA9PT0gdm9pZCAwICYmICh0ID0ge30pO1xuICAgICAgdmFyIHIsIG47XG4gICAgICB0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMgPSBbXSwgdGhpcy5fdHJhY2VycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgICB2YXIgbyA9IGtyKHt9LCBKKCksIE10KHQpKTtcbiAgICAgIGlmICh0aGlzLnJlc291cmNlID0gKHIgPSBvLnJlc291cmNlKSAhPT0gbnVsbCAmJiByICE9PSB2b2lkIDAgPyByIDogUiQxLmVtcHR5KCksIG8ubWVyZ2VSZXNvdXJjZVdpdGhEZWZhdWx0cyAmJiAodGhpcy5yZXNvdXJjZSA9IFIkMS5kZWZhdWx0KCkubWVyZ2UodGhpcy5yZXNvdXJjZSkpLCB0aGlzLl9jb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBvLCB7XG4gICAgICAgIHJlc291cmNlOiB0aGlzLnJlc291cmNlXG4gICAgICB9KSwgISgobiA9IHQuc3BhblByb2Nlc3NvcnMpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCkgJiYgbi5sZW5ndGgpXG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyZWRTcGFuUHJvY2Vzc29ycyA9IGt0KFtdLCBWdCh0LnNwYW5Qcm9jZXNzb3JzKSwgITEpLCB0aGlzLmFjdGl2ZVNwYW5Qcm9jZXNzb3IgPSBuZXcgSyh0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBpID0gdGhpcy5fYnVpbGRFeHBvcnRlckZyb21FbnYoKTtcbiAgICAgICAgaWYgKGkgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHZhciBhID0gbmV3IER0KGkpO1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3BhblByb2Nlc3NvciA9IGE7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHRoaXMuYWN0aXZlU3BhblByb2Nlc3NvciA9IG5ldyBqdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgdmFyIG8gPSB0ICsgXCJAXCIgKyAociB8fCBcIlwiKSArIFwiOlwiICsgKChuID09IG51bGwgPyB2b2lkIDAgOiBuLnNjaGVtYVVybCkgfHwgXCJcIik7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhY2Vycy5oYXMobykgfHwgdGhpcy5fdHJhY2Vycy5zZXQobywgbmV3IHp0KHsgbmFtZTogdCwgdmVyc2lvbjogciwgc2NoZW1hVXJsOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLnNjaGVtYVVybCB9LCB0aGlzLl9jb25maWcsIHRoaXMpKSwgdGhpcy5fdHJhY2Vycy5nZXQobyk7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkU3BhblByb2Nlc3NvciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyZWRTcGFuUHJvY2Vzc29ycy5sZW5ndGggPT09IDAgJiYgdGhpcy5hY3RpdmVTcGFuUHJvY2Vzc29yLnNodXRkb3duKCkuY2F0Y2goZnVuY3Rpb24ociQxKSB7XG4gICAgICAgIHJldHVybiByLmVycm9yKFwiRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIHNodXRkb3duIGN1cnJlbnQgc3BhbiBwcm9jZXNzb3JcIiwgciQxKTtcbiAgICAgIH0pLCB0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMucHVzaCh0KSwgdGhpcy5hY3RpdmVTcGFuUHJvY2Vzc29yID0gbmV3IEsodGhpcy5fcmVnaXN0ZXJlZFNwYW5Qcm9jZXNzb3JzKTtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRBY3RpdmVTcGFuUHJvY2Vzc29yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVTcGFuUHJvY2Vzc29yO1xuICAgIH0sIGUucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24odCkge1xuICAgICAgdCA9PT0gdm9pZCAwICYmICh0ID0ge30pLCBPZS5zZXRHbG9iYWxUcmFjZXJQcm92aWRlcih0aGlzKSwgdC5wcm9wYWdhdG9yID09PSB2b2lkIDAgJiYgKHQucHJvcGFnYXRvciA9IHRoaXMuX2J1aWxkUHJvcGFnYXRvckZyb21FbnYoKSksIHQuY29udGV4dE1hbmFnZXIgJiYgTWUuc2V0R2xvYmFsQ29udGV4dE1hbmFnZXIodC5jb250ZXh0TWFuYWdlciksIHQucHJvcGFnYXRvciAmJiB5Xy5zZXRHbG9iYWxQcm9wYWdhdG9yKHQucHJvcGFnYXRvcik7XG4gICAgfSwgZS5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSB0aGlzLl9jb25maWcuZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXMsIHIgPSB0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMubWFwKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICB2YXIgaSwgYSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBvKG5ldyBFcnJvcihcIlNwYW4gcHJvY2Vzc29yIGRpZCBub3QgY29tcGxldGVkIHdpdGhpbiB0aW1lb3V0IHBlcmlvZCBvZiBcIiArIHQgKyBcIiBtc1wiKSksIGkgPSBTLnRpbWVvdXQ7XG4gICAgICAgICAgfSwgdCk7XG4gICAgICAgICAgbi5mb3JjZUZsdXNoKCkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChhKSwgaSAhPT0gUy50aW1lb3V0ICYmIChpID0gUy5yZXNvbHZlZCwgbyhpKSk7XG4gICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGEpLCBpID0gUy5lcnJvciwgbyhzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLCBvKSB7XG4gICAgICAgIFByb21pc2UuYWxsKHIpLnRoZW4oZnVuY3Rpb24oaSkge1xuICAgICAgICAgIHZhciBhID0gaS5maWx0ZXIoZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgcmV0dXJuIHMgIT09IFMucmVzb2x2ZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYS5sZW5ndGggPiAwID8gbyhhKSA6IG4oKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oaSkge1xuICAgICAgICAgIHJldHVybiBvKFtpXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgZS5wcm90b3R5cGUuc2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVNwYW5Qcm9jZXNzb3Iuc2h1dGRvd24oKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0UHJvcGFnYXRvciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciByO1xuICAgICAgcmV0dXJuIChyID0gdGhpcy5jb25zdHJ1Y3Rvci5fcmVnaXN0ZXJlZFByb3BhZ2F0b3JzLmdldCh0KSkgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogcigpO1xuICAgIH0sIGUucHJvdG90eXBlLl9nZXRTcGFuRXhwb3J0ZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHJldHVybiAociA9IHRoaXMuY29uc3RydWN0b3IuX3JlZ2lzdGVyZWRFeHBvcnRlcnMuZ2V0KHQpKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByKCk7XG4gICAgfSwgZS5wcm90b3R5cGUuX2J1aWxkUHJvcGFnYXRvckZyb21FbnYgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gdGhpcywgciQxID0gQXJyYXkuZnJvbShuZXcgU2V0KE9UKCkuT1RFTF9QUk9QQUdBVE9SUykpLCBuID0gciQxLm1hcChmdW5jdGlvbihpKSB7XG4gICAgICAgIHZhciBhID0gdC5fZ2V0UHJvcGFnYXRvcihpKTtcbiAgICAgICAgcmV0dXJuIGEgfHwgci53YXJuKCdQcm9wYWdhdG9yIFwiJyArIGkgKyAnXCIgcmVxdWVzdGVkIHRocm91Z2ggZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgdW5hdmFpbGFibGUuJyksIGE7XG4gICAgICB9KSwgbyA9IG4ucmVkdWNlKGZ1bmN0aW9uKGksIGEpIHtcbiAgICAgICAgcmV0dXJuIGEgJiYgaS5wdXNoKGEpLCBpO1xuICAgICAgfSwgW10pO1xuICAgICAgaWYgKG8ubGVuZ3RoICE9PSAwKVxuICAgICAgICByZXR1cm4gciQxLmxlbmd0aCA9PT0gMSA/IG9bMF0gOiBuZXcgcHIoe1xuICAgICAgICAgIHByb3BhZ2F0b3JzOiBvXG4gICAgICAgIH0pO1xuICAgIH0sIGUucHJvdG90eXBlLl9idWlsZEV4cG9ydGVyRnJvbUVudiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSBPVCgpLk9URUxfVFJBQ0VTX0VYUE9SVEVSO1xuICAgICAgaWYgKCEodCA9PT0gXCJub25lXCIgfHwgdCA9PT0gXCJcIikpIHtcbiAgICAgICAgdmFyIHIkMSA9IHRoaXMuX2dldFNwYW5FeHBvcnRlcih0KTtcbiAgICAgICAgcmV0dXJuIHIkMSB8fCByLmVycm9yKCdFeHBvcnRlciBcIicgKyB0ICsgJ1wiIHJlcXVlc3RlZCB0aHJvdWdoIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHVuYXZhaWxhYmxlLicpLCByJDE7XG4gICAgICB9XG4gICAgfSwgZS5fcmVnaXN0ZXJlZFByb3BhZ2F0b3JzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoW1xuICAgICAgW1widHJhY2Vjb250ZXh0XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IGJyKCk7XG4gICAgICB9XSxcbiAgICAgIFtcImJhZ2dhZ2VcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuZXcgSmUoKTtcbiAgICAgIH1dXG4gICAgXSksIGUuX3JlZ2lzdGVyZWRFeHBvcnRlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBlO1xuICB9KClcbiksIEh0ID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgciA9IHQgJiYgZVt0XSwgbiA9IDA7XG4gIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICBpZiAoZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlICYmIG4gPj0gZS5sZW5ndGggJiYgKGUgPSB2b2lkIDApLCB7IHZhbHVlOiBlICYmIGVbbisrXSwgZG9uZTogIWUgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn0sIG5lID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5leHBvcnQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VuZFNwYW5zKHQsIHIpO1xuICAgIH0sIGUucHJvdG90eXBlLnNodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VuZFNwYW5zKFtdKSwgdGhpcy5mb3JjZUZsdXNoKCk7XG4gICAgfSwgZS5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0sIGUucHJvdG90eXBlLl9leHBvcnRJbmZvID0gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIHI7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNvdXJjZToge1xuICAgICAgICAgIGF0dHJpYnV0ZXM6IHQucmVzb3VyY2UuYXR0cmlidXRlc1xuICAgICAgICB9LFxuICAgICAgICBpbnN0cnVtZW50YXRpb25TY29wZTogdC5pbnN0cnVtZW50YXRpb25MaWJyYXJ5LFxuICAgICAgICB0cmFjZUlkOiB0LnNwYW5Db250ZXh0KCkudHJhY2VJZCxcbiAgICAgICAgcGFyZW50SWQ6IHQucGFyZW50U3BhbklkLFxuICAgICAgICB0cmFjZVN0YXRlOiAociA9IHQuc3BhbkNvbnRleHQoKS50cmFjZVN0YXRlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLnNlcmlhbGl6ZSgpLFxuICAgICAgICBuYW1lOiB0Lm5hbWUsXG4gICAgICAgIGlkOiB0LnNwYW5Db250ZXh0KCkuc3BhbklkLFxuICAgICAgICBraW5kOiB0LmtpbmQsXG4gICAgICAgIHRpbWVzdGFtcDoga2UodC5zdGFydFRpbWUpLFxuICAgICAgICBkdXJhdGlvbjoga2UodC5kdXJhdGlvbiksXG4gICAgICAgIGF0dHJpYnV0ZXM6IHQuYXR0cmlidXRlcyxcbiAgICAgICAgc3RhdHVzOiB0LnN0YXR1cyxcbiAgICAgICAgZXZlbnRzOiB0LmV2ZW50cyxcbiAgICAgICAgbGlua3M6IHQubGlua3NcbiAgICAgIH07XG4gICAgfSwgZS5wcm90b3R5cGUuX3NlbmRTcGFucyA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHZhciBuLCBvO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgaSA9IEh0KHQpLCBhJDEgPSBpLm5leHQoKTsgIWEkMS5kb25lOyBhJDEgPSBpLm5leHQoKSkge1xuICAgICAgICAgIHZhciBzID0gYSQxLnZhbHVlO1xuICAgICAgICAgIGNvbnNvbGUuZGlyKHRoaXMuX2V4cG9ydEluZm8ocyksIHsgZGVwdGg6IDMgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgbiA9IHsgZXJyb3I6IGwgfTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYSQxICYmICFhJDEuZG9uZSAmJiAobyA9IGkucmV0dXJuKSAmJiBvLmNhbGwoaSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyKVxuICAgICAgICByZXR1cm4gcih7IGNvZGU6IGEuU1VDQ0VTUyB9KTtcbiAgICB9LCBlO1xuICB9KClcbiksIFF0ID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIG8sIGkgPSBbXSwgYTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKG8gPSBuLm5leHQoKSkuZG9uZTsgKSBpLnB1c2goby52YWx1ZSk7XG4gIH0gY2F0Y2ggKHMpIHtcbiAgICBhID0geyBlcnJvcjogcyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59LCBYdCA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBvID0gdC5sZW5ndGgsIGk7IG4gPCBvOyBuKyspXG4gICAgKGkgfHwgIShuIGluIHQpKSAmJiAoaSB8fCAoaSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgaVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoaSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBpZSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgICAgdGhpcy5fZmluaXNoZWRTcGFucyA9IFtdLCB0aGlzLl9zdG9wcGVkID0gITE7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5leHBvcnQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICB2YXIgbjtcbiAgICAgIGlmICh0aGlzLl9zdG9wcGVkKVxuICAgICAgICByZXR1cm4gcih7XG4gICAgICAgICAgY29kZTogYS5GQUlMRUQsXG4gICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihcIkV4cG9ydGVyIGhhcyBiZWVuIHN0b3BwZWRcIilcbiAgICAgICAgfSk7XG4gICAgICAobiA9IHRoaXMuX2ZpbmlzaGVkU3BhbnMpLnB1c2guYXBwbHkobiwgWHQoW10sIFF0KHQpLCAhMSkpLCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcih7IGNvZGU6IGEuU1VDQ0VTUyB9KTtcbiAgICAgIH0sIDApO1xuICAgIH0sIGUucHJvdG90eXBlLnNodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RvcHBlZCA9ICEwLCB0aGlzLl9maW5pc2hlZFNwYW5zID0gW10sIHRoaXMuZm9yY2VGbHVzaCgpO1xuICAgIH0sIGUucHJvdG90eXBlLmZvcmNlRmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9LCBlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fZmluaXNoZWRTcGFucyA9IFtdO1xuICAgIH0sIGUucHJvdG90eXBlLmdldEZpbmlzaGVkU3BhbnMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maW5pc2hlZFNwYW5zO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgV3QgPSBmdW5jdGlvbihlLCB0LCByLCBuKSB7XG4gIGZ1bmN0aW9uIG8oaSkge1xuICAgIHJldHVybiBpIGluc3RhbmNlb2YgciA/IGkgOiBuZXcgcihmdW5jdGlvbihhKSB7XG4gICAgICBhKGkpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKHIgfHwgKHIgPSBQcm9taXNlKSkoZnVuY3Rpb24oaSwgYSkge1xuICAgIGZ1bmN0aW9uIHMocCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLm5leHQocCkpO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBhKGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsKHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi50aHJvdyhwKSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIGEoZik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHUocCkge1xuICAgICAgcC5kb25lID8gaShwLnZhbHVlKSA6IG8ocC52YWx1ZSkudGhlbihzLCBsKTtcbiAgICB9XG4gICAgdSgobiA9IG4uYXBwbHkoZSwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn0sIFl0ID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChpWzBdICYgMSkgdGhyb3cgaVsxXTtcbiAgICByZXR1cm4gaVsxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgbiwgbywgaSwgYTtcbiAgcmV0dXJuIGEgPSB7IG5leHQ6IHMoMCksIHRocm93OiBzKDEpLCByZXR1cm46IHMoMikgfSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKGFbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgYTtcbiAgZnVuY3Rpb24gcyh1KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiBsKFt1LCBwXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBsKHUpIHtcbiAgICBpZiAobikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IHI7ICkgdHJ5IHtcbiAgICAgIGlmIChuID0gMSwgbyAmJiAoaSA9IHVbMF0gJiAyID8gby5yZXR1cm4gOiB1WzBdID8gby50aHJvdyB8fCAoKGkgPSBvLnJldHVybikgJiYgaS5jYWxsKG8pLCAwKSA6IG8ubmV4dCkgJiYgIShpID0gaS5jYWxsKG8sIHVbMV0pKS5kb25lKSByZXR1cm4gaTtcbiAgICAgIHN3aXRjaCAobyA9IDAsIGkgJiYgKHUgPSBbdVswXSAmIDIsIGkudmFsdWVdKSwgdVswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpID0gdTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiByLmxhYmVsKyssIHsgdmFsdWU6IHVbMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByLmxhYmVsKyssIG8gPSB1WzFdLCB1ID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdSA9IHIub3BzLnBvcCgpLCByLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGkgPSByLnRyeXMsICEoaSA9IGkubGVuZ3RoID4gMCAmJiBpW2kubGVuZ3RoIC0gMV0pICYmICh1WzBdID09PSA2IHx8IHVbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gMyAmJiAoIWkgfHwgdVsxXSA+IGlbMF0gJiYgdVsxXSA8IGlbM10pKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gdVsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gNiAmJiByLmxhYmVsIDwgaVsxXSkge1xuICAgICAgICAgICAgci5sYWJlbCA9IGlbMV0sIGkgPSB1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpICYmIHIubGFiZWwgPCBpWzJdKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gaVsyXSwgci5vcHMucHVzaCh1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpWzJdICYmIHIub3BzLnBvcCgpLCByLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB1ID0gdC5jYWxsKGUsIHIpO1xuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIHUgPSBbNiwgcF0sIG8gPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBuID0gaSA9IDA7XG4gICAgfVxuICAgIGlmICh1WzBdICYgNSkgdGhyb3cgdVsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogdVswXSA/IHVbMV0gOiB2b2lkIDAsIGRvbmU6ICEwIH07XG4gIH1cbn0sIG9lID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdGhpcy5fZXhwb3J0ZXIgPSB0LCB0aGlzLl9zaHV0ZG93bk9uY2UgPSBuZXcgWnIodGhpcy5fc2h1dGRvd24sIHRoaXMpLCB0aGlzLl91bnJlc29sdmVkRXhwb3J0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5mb3JjZUZsdXNoID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gV3QodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gWXQodGhpcywgZnVuY3Rpb24odCkge1xuICAgICAgICAgIHN3aXRjaCAodC5sYWJlbCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gWzQsIFByb21pc2UuYWxsKEFycmF5LmZyb20odGhpcy5fdW5yZXNvbHZlZEV4cG9ydHMpKV07XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIHJldHVybiB0LnNlbnQoKSwgdGhpcy5fZXhwb3J0ZXIuZm9yY2VGbHVzaCA/IFs0LCB0aGlzLl9leHBvcnRlci5mb3JjZUZsdXNoKCldIDogWzMsIDNdO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICB0LnNlbnQoKSwgdC5sYWJlbCA9IDM7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgIC8qcmV0dXJuKi9cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgZS5wcm90b3R5cGUub25TdGFydCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB9LCBlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciByID0gdGhpcywgbiwgbztcbiAgICAgIGlmICghdGhpcy5fc2h1dGRvd25PbmNlLmlzQ2FsbGVkICYmIHQuc3BhbkNvbnRleHQoKS50cmFjZUZsYWdzICYgVXQkMS5TQU1QTEVEKSB7XG4gICAgICAgIHZhciBpID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHR0JDEuX2V4cG9ydChyLl9leHBvcnRlciwgW3RdKS50aGVuKGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgICAgIHZhciBsO1xuICAgICAgICAgICAgcy5jb2RlICE9PSBhLlNVQ0NFU1MgJiYgbmUkMSgobCA9IHMuZXJyb3IpICE9PSBudWxsICYmIGwgIT09IHZvaWQgMCA/IGwgOiBuZXcgRXJyb3IoXCJTaW1wbGVTcGFuUHJvY2Vzc29yOiBzcGFuIGV4cG9ydCBmYWlsZWQgKHN0YXR1cyBcIiArIHMgKyBcIilcIikpO1xuICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgICAgIG5lJDEocyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0LnJlc291cmNlLmFzeW5jQXR0cmlidXRlc1BlbmRpbmcpIHtcbiAgICAgICAgICB2YXIgYSQxID0gKG8gPSAobiA9IHQucmVzb3VyY2UpLndhaXRGb3JBc3luY0F0dHJpYnV0ZXMpID09PSBudWxsIHx8IG8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG8uY2FsbChuKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIGEkMSAhPSBudWxsICYmIHIuX3VucmVzb2x2ZWRFeHBvcnRzLmRlbGV0ZShhJDEpLCBpKCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgcmV0dXJuIG5lJDEocyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYSQxICE9IG51bGwgJiYgdGhpcy5fdW5yZXNvbHZlZEV4cG9ydHMuYWRkKGEkMSk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGkoKTtcbiAgICAgIH1cbiAgICB9LCBlLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NodXRkb3duT25jZS5jYWxsKCk7XG4gICAgfSwgZS5wcm90b3R5cGUuX3NodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZXhwb3J0ZXIuc2h1dGRvd24oKTtcbiAgICB9LCBlO1xuICB9KClcbik7XG5cbmV4cG9ydCB7IER0IGFzIEQsIEd0IGFzIEcsIEksIE90IGFzIE8sIFAsIFMsIFcsIEQgYXMgYSwgZywgaWUgYXMgaSwganQgYXMgaiwgbmUgYXMgbiwgb2UgYXMgbywgcmUgYXMgciwgenQgYXMgeiB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsS0FBS0EsR0FBSSxLQUFLQyxJQUFJLEtBQUtDLEdBQU0sS0FBS0MsSUFBSSxLQUFLQyxHQUFJLEtBQUtDLElBQUksS0FBS0MsSUFBSSxLQUFLQyxVQUFVO0FBQ3pGLFNBQVMsS0FBQUMsU0FBUztBQUNsQixTQUFTLE1BQU1DLEdBQUksTUFBTUMsSUFBSSxNQUFNQyxHQUFHLEtBQUtDLElBQUksS0FBS0MsR0FBSyxNQUFNQyxJQUFJLE1BQU1DLElBQUksTUFBTUMsR0FBSSxNQUFNQyxHQUFJLEtBQUtDLElBQUksTUFBTUMsR0FBSSxNQUFNQyxJQUFJLE1BQU1DLFVBQVU7QUFDOUksU0FBUyxLQUFBQyxJQUFHLEtBQUtDLEdBQUksS0FBS0MsR0FBTSxLQUFBQyxJQUFHLEtBQUFDLEdBQUcsS0FBS0MsSUFBSSxL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NEMsSUFBSSxXQUFXO0FBQ2pCLGlCQUFPWixHQUFLLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTYSxHQUFHO0FBQ3JELGdCQUFJRztBQUNKLFlBQUFILEVBQUUsU0FBU04sRUFBRSxXQUFXakIsR0FBTTBCLElBQUlILEVBQUUsV0FBVyxRQUFRRyxNQUFNLFNBQVNBLElBQUksSUFBSSxNQUFNLHFEQUFxREgsSUFBSSxHQUFHLENBQUM7QUFBQSxVQUNuSixDQUFDLEVBQUUsTUFBTSxTQUFTQSxHQUFHO0FBQ25CLFlBQUF2QixFQUFLdUIsQ0FBQztBQUFBLFVBQ1IsQ0FBQztBQUFBLFFBQ0g7QUFDQSxZQUFJLEVBQUUsU0FBUyx3QkFBd0I7QUFDckMsY0FBSWMsS0FBT2xCLEtBQUssSUFBSSxFQUFFLFVBQVUsNEJBQTRCLFFBQVFBLE1BQU0sU0FBUyxTQUFTQSxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssV0FBVztBQUNwSCxtQkFBT2tCLEtBQU8sUUFBUSxFQUFFLG1CQUFtQixPQUFPQSxDQUFHLEdBQUdmLEVBQUU7QUFBQSxVQUM1RCxHQUFHLFNBQVNDLEdBQUc7QUFDYixtQkFBT3ZCLEVBQUt1QixDQUFDO0FBQUEsVUFDZixDQUFDO0FBQ0QsVUFBQWMsS0FBTyxRQUFRLEtBQUssbUJBQW1CLElBQUlBLENBQUc7QUFBQSxRQUNoRDtBQUNFLFVBQUFmLEVBQUU7QUFBQSxNQUNOO0FBQUEsSUFDRixHQUFHLEVBQUUsVUFBVSxXQUFXLFdBQVc7QUFDbkMsYUFBTyxLQUFLLGNBQWMsS0FBSztBQUFBLElBQ2pDLEdBQUcsRUFBRSxVQUFVLFlBQVksV0FBVztBQUNwQyxhQUFPLEtBQUssVUFBVSxTQUFTO0FBQUEsSUFDakMsR0FBRztBQUFBLEVBQ0wsRUFBRTtBQUFBOyIsCiAgIm5hbWVzIjogWyJPZSIsICJjciIsICJVdCQxIiwgInFpIiwgIk1lIiwgIlVpIiwgInR0IiwgImZlIiwgInIiLCAicWUiLCAid2UiLCAiUiIsICJwXyIsICJPJDEiLCAiTl8iLCAiSF8iLCAickEiLCAiTkEiLCAieV8iLCAia2UiLCAicl8iLCAiTUEiLCAiWiIsICJaZSIsICJuZSQxIiwgInciLCAicCIsICJwciIsICJiciIsICJKZSIsICJXJDEiLCAic3IiLCAia3IiLCAiWnIiLCAidHQkMSIsICJyJDEiLCAiT1QiLCAiTFQiLCAiUCQxIiwgIk0iLCAiUiQxIiwgImEiLCAiYnQiLCAibyIsICJDdCIsICJYIiwgImkiLCAicyIsICJ4dCIsICJPdCIsICJsIiwgImYiLCAiUCIsICJnIiwgIkQiLCAiVyIsICJFIiwgIkoiLCAiWSIsICJjIiwgInkiLCAiYSQxIiwgIkJ0IiwgIkR0IiwgIkd0IiwgInEiLCAieCIsICJwJDEiLCAiaiIsICJHIiwgImIiLCAiTyIsICJLIiwgImp0IiwgIlZ0IiwgImt0IiwgIlMiLCAiWHQiLCAiaWUiLCAiV3QiLCAiWXQiLCAib2UiXQp9Cg==
|