@getopenpay/openpay-js 0.5.14 → 0.5.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/{ExportResult-B-YLKMaU.js → ExportResult-BacsqwKA.js} +1 -1
- package/dist/{Resource-qJjZ52YV.js → Resource-CUhg8dEK.js} +6 -6
- package/dist/SimpleSpanProcessor-BtNzab2_.js +910 -0
- package/dist/_commonjsHelpers-CdLE1o9f.js +30 -0
- package/dist/detect-resources-6fNItMfQ.js +862 -0
- package/dist/{diag-api-CCLNzlUs.js → diag-api-BaoBTidT.js} +2 -2
- package/dist/index-2Dpi7rDE.js +127 -0
- package/dist/index-BkFKN09r.js +18 -0
- package/dist/index-BohOdvI5.js +6718 -0
- package/dist/index-Cb6WFqJj.js +1012 -0
- package/dist/index-CfhP31jP.js +147 -0
- package/dist/index-CmjNpx1j.js +1619 -0
- package/dist/index-CsjF5pDg.js +6 -0
- package/dist/index-Dcezwdcs.js +7000 -0
- package/dist/index-DhyFkarT.js +430 -0
- package/dist/index-t_WVTb5S.js +28 -0
- package/dist/index.d.ts +27 -2
- package/dist/index.es.js +2 -2
- package/dist/index.umd.js +40 -40
- package/dist/lifecycle-D1BdEbZs.js +119 -0
- package/dist/{metrics-api-DtBUlvdW.js → metrics-api-CsLzDvjo.js} +28 -28
- package/dist/sdk-info-ChuKu8zW.js +285 -0
- package/dist/suppress-tracing-Cu47NVB2.js +17 -0
- package/dist/url-CgnFZYDI.js +798 -0
- package/dist/utils-BJ1UAbM8.js +101 -0
- package/dist/utils-De78ey-v.js +12 -0
- package/dist/utils-Dius2V8g.js +270 -0
- package/package.json +4 -4
- package/dist/SimpleSpanProcessor-BwonVfHA.js +0 -957
- package/dist/_commonjsHelpers-f76XedMs.js +0 -25
- package/dist/detect-resources-Bi3A_QRE.js +0 -854
- package/dist/index-BIZrcIxl.js +0 -19
- package/dist/index-Bs_K1BID.js +0 -431
- package/dist/index-CRez6biP.js +0 -150
- package/dist/index-Cmp0890G.js +0 -1599
- package/dist/index-DCgcMBKE.js +0 -52
- package/dist/index-DDPV-DRN.js +0 -7040
- package/dist/index-SVnUIdm3.js +0 -130
- package/dist/index-UHBeywOG.js +0 -330
- package/dist/index-sp5MCjj0.js +0 -6685
- package/dist/index-wETKGbBW.js +0 -830
- package/dist/lifecycle-BjQ-7GLm.js +0 -119
- package/dist/sdk-info-Ved2vK62.js +0 -484
- package/dist/url-C-ZmHCbX.js +0 -797
- package/dist/utils-CX5YT7yI.js +0 -14
- package/dist/utils-DwFEBfnB.js +0 -142
- package/dist/utils-wV4fOQ_R.js +0 -381
package/dist/index-SVnUIdm3.js
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import { R as u } from "./index-DDPV-DRN.js";
|
|
2
|
-
import { B as c } from "./SimpleSpanProcessor-BwonVfHA.js";
|
|
3
|
-
import { A as g, b as x, a as S, C as b, F as w, I as P, N as C, P as T, R as O, d as M, S as A, e as E, c as R, T as N } from "./SimpleSpanProcessor-BwonVfHA.js";
|
|
4
|
-
import { P as F, a as j, b as k, g as I, c as W, h as U, n as X, p as z, s as D, d as G } from "./utils-DwFEBfnB.js";
|
|
5
|
-
var l = function(n, r) {
|
|
6
|
-
var e = typeof Symbol == "function" && n[Symbol.iterator];
|
|
7
|
-
if (!e) return n;
|
|
8
|
-
var t = e.call(n), o, a = [], s;
|
|
9
|
-
try {
|
|
10
|
-
for (; (r === void 0 || r-- > 0) && !(o = t.next()).done; ) a.push(o.value);
|
|
11
|
-
} catch (i) {
|
|
12
|
-
s = { error: i };
|
|
13
|
-
} finally {
|
|
14
|
-
try {
|
|
15
|
-
o && !o.done && (e = t.return) && e.call(t);
|
|
16
|
-
} finally {
|
|
17
|
-
if (s) throw s.error;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
return a;
|
|
21
|
-
}, p = function(n, r, e) {
|
|
22
|
-
if (e || arguments.length === 2) for (var t = 0, o = r.length, a; t < o; t++)
|
|
23
|
-
(a || !(t in r)) && (a || (a = Array.prototype.slice.call(r, 0, t)), a[t] = r[t]);
|
|
24
|
-
return n.concat(a || Array.prototype.slice.call(r));
|
|
25
|
-
}, f = (
|
|
26
|
-
/** @class */
|
|
27
|
-
function() {
|
|
28
|
-
function n() {
|
|
29
|
-
this._enabled = !1, this._currentContext = u;
|
|
30
|
-
}
|
|
31
|
-
return n.prototype._bindFunction = function(r, e) {
|
|
32
|
-
r === void 0 && (r = u);
|
|
33
|
-
var t = this, o = function() {
|
|
34
|
-
for (var a = this, s = [], i = 0; i < arguments.length; i++)
|
|
35
|
-
s[i] = arguments[i];
|
|
36
|
-
return t.with(r, function() {
|
|
37
|
-
return e.apply(a, s);
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
return Object.defineProperty(o, "length", {
|
|
41
|
-
enumerable: !1,
|
|
42
|
-
configurable: !0,
|
|
43
|
-
writable: !1,
|
|
44
|
-
value: e.length
|
|
45
|
-
}), o;
|
|
46
|
-
}, n.prototype.active = function() {
|
|
47
|
-
return this._currentContext;
|
|
48
|
-
}, n.prototype.bind = function(r, e) {
|
|
49
|
-
return r === void 0 && (r = this.active()), typeof e == "function" ? this._bindFunction(r, e) : e;
|
|
50
|
-
}, n.prototype.disable = function() {
|
|
51
|
-
return this._currentContext = u, this._enabled = !1, this;
|
|
52
|
-
}, n.prototype.enable = function() {
|
|
53
|
-
return this._enabled ? this : (this._enabled = !0, this._currentContext = u, this);
|
|
54
|
-
}, n.prototype.with = function(r, e, t) {
|
|
55
|
-
for (var o = [], a = 3; a < arguments.length; a++)
|
|
56
|
-
o[a - 3] = arguments[a];
|
|
57
|
-
var s = this._currentContext;
|
|
58
|
-
this._currentContext = r || u;
|
|
59
|
-
try {
|
|
60
|
-
return e.call.apply(e, p([t], l(o), !1));
|
|
61
|
-
} finally {
|
|
62
|
-
this._currentContext = s;
|
|
63
|
-
}
|
|
64
|
-
}, n;
|
|
65
|
-
}()
|
|
66
|
-
), d = /* @__PURE__ */ function() {
|
|
67
|
-
var n = function(r, e) {
|
|
68
|
-
return n = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(t, o) {
|
|
69
|
-
t.__proto__ = o;
|
|
70
|
-
} || function(t, o) {
|
|
71
|
-
for (var a in o) Object.prototype.hasOwnProperty.call(o, a) && (t[a] = o[a]);
|
|
72
|
-
}, n(r, e);
|
|
73
|
-
};
|
|
74
|
-
return function(r, e) {
|
|
75
|
-
if (typeof e != "function" && e !== null)
|
|
76
|
-
throw new TypeError("Class extends value " + String(e) + " is not a constructor or null");
|
|
77
|
-
n(r, e);
|
|
78
|
-
function t() {
|
|
79
|
-
this.constructor = r;
|
|
80
|
-
}
|
|
81
|
-
r.prototype = e === null ? Object.create(e) : (t.prototype = e.prototype, new t());
|
|
82
|
-
};
|
|
83
|
-
}(), v = (
|
|
84
|
-
/** @class */
|
|
85
|
-
function(n) {
|
|
86
|
-
d(r, n);
|
|
87
|
-
function r(e) {
|
|
88
|
-
e === void 0 && (e = {});
|
|
89
|
-
var t = n.call(this, e) || this;
|
|
90
|
-
if (e.contextManager)
|
|
91
|
-
throw "contextManager should be defined in register method not in constructor";
|
|
92
|
-
if (e.propagator)
|
|
93
|
-
throw "propagator should be defined in register method not in constructor";
|
|
94
|
-
return t;
|
|
95
|
-
}
|
|
96
|
-
return r.prototype.register = function(e) {
|
|
97
|
-
e === void 0 && (e = {}), e.contextManager === void 0 && (e.contextManager = new f()), e.contextManager && e.contextManager.enable(), n.prototype.register.call(this, e);
|
|
98
|
-
}, r;
|
|
99
|
-
}(c)
|
|
100
|
-
);
|
|
101
|
-
export {
|
|
102
|
-
g as AlwaysOffSampler,
|
|
103
|
-
x as AlwaysOnSampler,
|
|
104
|
-
c as BasicTracerProvider,
|
|
105
|
-
S as BatchSpanProcessor,
|
|
106
|
-
b as ConsoleSpanExporter,
|
|
107
|
-
w as ForceFlushState,
|
|
108
|
-
P as InMemorySpanExporter,
|
|
109
|
-
C as NoopSpanProcessor,
|
|
110
|
-
T as ParentBasedSampler,
|
|
111
|
-
F as PerformanceTimingNames,
|
|
112
|
-
O as RandomIdGenerator,
|
|
113
|
-
M as SamplingDecision,
|
|
114
|
-
A as SimpleSpanProcessor,
|
|
115
|
-
E as Span,
|
|
116
|
-
f as StackContextManager,
|
|
117
|
-
R as TraceIdRatioBasedSampler,
|
|
118
|
-
N as Tracer,
|
|
119
|
-
v as WebTracerProvider,
|
|
120
|
-
j as addSpanNetworkEvent,
|
|
121
|
-
k as addSpanNetworkEvents,
|
|
122
|
-
I as getElementXPath,
|
|
123
|
-
W as getResource,
|
|
124
|
-
U as hasKey,
|
|
125
|
-
X as normalizeUrl,
|
|
126
|
-
z as parseUrl,
|
|
127
|
-
D as shouldPropagateTraceHeaders,
|
|
128
|
-
G as sortResources
|
|
129
|
-
};
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA3fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IFIgYXMgUk9PVF9DT05URVhUIH0gZnJvbSAnLi9pbmRleC0hfnswMDZ9fi5qcyc7XG5pbXBvcnQgeyBCIGFzIEJhc2ljVHJhY2VyUHJvdmlkZXIgfSBmcm9tICcuL1NpbXBsZVNwYW5Qcm9jZXNzb3ItIX57MDAyfX4uanMnO1xuZXhwb3J0IHsgQSBhcyBBbHdheXNPZmZTYW1wbGVyLCBiIGFzIEFsd2F5c09uU2FtcGxlciwgYSBhcyBCYXRjaFNwYW5Qcm9jZXNzb3IsIEMgYXMgQ29uc29sZVNwYW5FeHBvcnRlciwgRiBhcyBGb3JjZUZsdXNoU3RhdGUsIEkgYXMgSW5NZW1vcnlTcGFuRXhwb3J0ZXIsIE4gYXMgTm9vcFNwYW5Qcm9jZXNzb3IsIFAgYXMgUGFyZW50QmFzZWRTYW1wbGVyLCBSIGFzIFJhbmRvbUlkR2VuZXJhdG9yLCBkIGFzIFNhbXBsaW5nRGVjaXNpb24sIFMgYXMgU2ltcGxlU3BhblByb2Nlc3NvciwgZSBhcyBTcGFuLCBjIGFzIFRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlciwgVCBhcyBUcmFjZXIgfSBmcm9tICcuL1NpbXBsZVNwYW5Qcm9jZXNzb3ItIX57MDAyfX4uanMnO1xuZXhwb3J0IHsgUCBhcyBQZXJmb3JtYW5jZVRpbWluZ05hbWVzLCBhIGFzIGFkZFNwYW5OZXR3b3JrRXZlbnQsIGIgYXMgYWRkU3Bhbk5ldHdvcmtFdmVudHMsIGcgYXMgZ2V0RWxlbWVudFhQYXRoLCBjIGFzIGdldFJlc291cmNlLCBoIGFzIGhhc0tleSwgbiBhcyBub3JtYWxpemVVcmwsIHAgYXMgcGFyc2VVcmwsIHMgYXMgc2hvdWxkUHJvcGFnYXRlVHJhY2VIZWFkZXJzLCBkIGFzIHNvcnRSZXNvdXJjZXMgfSBmcm9tICcuL3V0aWxzLSF+ezAwOH1+LmpzJztcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfX3JlYWQgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xuLyoqXG4gKiBTdGFjayBDb250ZXh0IE1hbmFnZXIgZm9yIG1hbmFnaW5nIHRoZSBzdGF0ZSBpbiB3ZWJcbiAqIGl0IGRvZXNuJ3QgZnVsbHkgc3VwcG9ydCB0aGUgYXN5bmMgY2FsbHMgdGhvdWdoXG4gKi9cbnZhciBTdGFja0NvbnRleHRNYW5hZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN0YWNrQ29udGV4dE1hbmFnZXIoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiB3aGV0aGVyIHRoZSBjb250ZXh0IG1hbmFnZXIgaXMgZW5hYmxlZCBvciBub3RcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEtlZXBzIHRoZSByZWZlcmVuY2UgdG8gY3VycmVudCBjb250ZXh0XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9jdXJyZW50Q29udGV4dCA9IFJPT1RfQ09OVEVYVDtcbiAgICB9XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGV4dFxuICAgICAqIEBwYXJhbSB0YXJnZXQgRnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgd2l0aGluIHRoZSBjb250ZXh0XG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbiAgICBTdGFja0NvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5fYmluZEZ1bmN0aW9uID0gZnVuY3Rpb24gKGNvbnRleHQsIHRhcmdldCkge1xuICAgICAgICBpZiAoY29udGV4dCA9PT0gdm9pZCAwKSB7IGNvbnRleHQgPSBST09UX0NPTlRFWFQ7IH1cbiAgICAgICAgdmFyIG1hbmFnZXIgPSB0aGlzO1xuICAgICAgICB2YXIgY29udGV4dFdyYXBwZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1hbmFnZXIud2l0aChjb250ZXh0LCBmdW5jdGlvbiAoKSB7IHJldHVybiB0YXJnZXQuYXBwbHkoX3RoaXMsIGFyZ3MpOyB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnRleHRXcmFwcGVyLCAnbGVuZ3RoJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogdGFyZ2V0Lmxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0V3JhcHBlcjtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFjdGl2ZSBjb250ZXh0XG4gICAgICovXG4gICAgU3RhY2tDb250ZXh0TWFuYWdlci5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudENvbnRleHQ7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBCaW5kcyBhIHRoZSBjZXJ0YWluIGNvbnRleHQgb3IgdGhlIGFjdGl2ZSBvbmUgdG8gdGhlIHRhcmdldCBmdW5jdGlvbiBhbmQgdGhlbiByZXR1cm5zIHRoZSB0YXJnZXRcbiAgICAgKiBAcGFyYW0gY29udGV4dCBBIGNvbnRleHQgKHNwYW4pIHRvIGJlIGJpbmQgdG8gdGFyZ2V0XG4gICAgICogQHBhcmFtIHRhcmdldCBhIGZ1bmN0aW9uIG9yIGV2ZW50IGVtaXR0ZXIuIFdoZW4gdGFyZ2V0IG9yIG9uZSBvZiBpdHMgY2FsbGJhY2tzIGlzIGNhbGxlZCxcbiAgICAgKiAgdGhlIHByb3ZpZGVkIGNvbnRleHQgd2lsbCBiZSB1c2VkIGFzIHRoZSBhY3RpdmUgY29udGV4dCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjYWxsLlxuICAgICAqL1xuICAgIFN0YWNrQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoY29udGV4dCwgdGFyZ2V0KSB7XG4gICAgICAgIC8vIGlmIG5vIHNwZWNpZmljIGNvbnRleHQgdG8gcHJvcGFnYXRlIGlzIGdpdmVuLCB3ZSB1c2UgdGhlIGN1cnJlbnQgb25lXG4gICAgICAgIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnRleHQgPSB0aGlzLmFjdGl2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYmluZEZ1bmN0aW9uKGNvbnRleHQsIHRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIERpc2FibGUgdGhlIGNvbnRleHQgbWFuYWdlciAoY2xlYXJzIHRoZSBjdXJyZW50IGNvbnRleHQpXG4gICAgICovXG4gICAgU3RhY2tDb250ZXh0TWFuYWdlci5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudENvbnRleHQgPSBST09UX0NPTlRFWFQ7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSBjb250ZXh0IG1hbmFnZXIgYW5kIGNyZWF0ZXMgYSBkZWZhdWx0KHJvb3QpIGNvbnRleHRcbiAgICAgKi9cbiAgICBTdGFja0NvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9lbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY3VycmVudENvbnRleHQgPSBST09UX0NPTlRFWFQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ2FsbHMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIFtmbl0gd2l0aCB0aGUgcHJvdmlkZWQgW2NvbnRleHRdLiBJZiBbY29udGV4dF0gaXMgdW5kZWZpbmVkIHRoZW4gaXQgd2lsbCB1c2UgdGhlIHdpbmRvdy5cbiAgICAgKiBUaGUgY29udGV4dCB3aWxsIGJlIHNldCBhcyBhY3RpdmVcbiAgICAgKiBAcGFyYW0gY29udGV4dFxuICAgICAqIEBwYXJhbSBmbiBDYWxsYmFjayBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB0aGlzQXJnIG9wdGlvbmFsIHJlY2VpdmVyIHRvIGJlIHVzZWQgZm9yIGNhbGxpbmcgZm5cbiAgICAgKiBAcGFyYW0gYXJncyBvcHRpb25hbCBhcmd1bWVudHMgZm9yd2FyZGVkIHRvIGZuXG4gICAgICovXG4gICAgU3RhY2tDb250ZXh0TWFuYWdlci5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCBmbiwgdGhpc0FyZykge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDM7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDNdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJldmlvdXNDb250ZXh0ID0gdGhpcy5fY3VycmVudENvbnRleHQ7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRDb250ZXh0ID0gY29udGV4dCB8fCBST09UX0NPTlRFWFQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uY2FsbC5hcHBseShmbiwgX19zcHJlYWRBcnJheShbdGhpc0FyZ10sIF9fcmVhZChhcmdzKSwgZmFsc2UpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDb250ZXh0ID0gcHJldmlvdXNDb250ZXh0O1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3RhY2tDb250ZXh0TWFuYWdlcjtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbi8qKlxuICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgd2ViIHRyYWNlciB3aXRoIHtAbGluayBTdGFja0NvbnRleHRNYW5hZ2VyfVxuICovXG52YXIgV2ViVHJhY2VyUHJvdmlkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFdlYlRyYWNlclByb3ZpZGVyLCBfc3VwZXIpO1xuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgVHJhY2VyIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBjb25maWcgV2ViIFRyYWNlciBjb25maWdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBXZWJUcmFjZXJQcm92aWRlcihjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7IGNvbmZpZyA9IHt9OyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGNvbmZpZykgfHwgdGhpcztcbiAgICAgICAgaWYgKGNvbmZpZy5jb250ZXh0TWFuYWdlcikge1xuICAgICAgICAgICAgdGhyb3cgKCdjb250ZXh0TWFuYWdlciBzaG91bGQgYmUgZGVmaW5lZCBpbiByZWdpc3RlciBtZXRob2Qgbm90IGluJyArXG4gICAgICAgICAgICAgICAgJyBjb25zdHJ1Y3RvcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcucHJvcGFnYXRvcikge1xuICAgICAgICAgICAgdGhyb3cgJ3Byb3BhZ2F0b3Igc2hvdWxkIGJlIGRlZmluZWQgaW4gcmVnaXN0ZXIgbWV0aG9kIG5vdCBpbiBjb25zdHJ1Y3Rvcic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciB0aGlzIFRyYWNlclByb3ZpZGVyIGZvciB1c2Ugd2l0aCB0aGUgT3BlblRlbGVtZXRyeSBBUEkuXG4gICAgICogVW5kZWZpbmVkIHZhbHVlcyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBkZWZhdWx0cywgYW5kXG4gICAgICogbnVsbCB2YWx1ZXMgd2lsbCBiZSBza2lwcGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgU0RLIHJlZ2lzdHJhdGlvblxuICAgICAqL1xuICAgIFdlYlRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7IGNvbmZpZyA9IHt9OyB9XG4gICAgICAgIGlmIChjb25maWcuY29udGV4dE1hbmFnZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uZmlnLmNvbnRleHRNYW5hZ2VyID0gbmV3IFN0YWNrQ29udGV4dE1hbmFnZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLmNvbnRleHRNYW5hZ2VyKSB7XG4gICAgICAgICAgICBjb25maWcuY29udGV4dE1hbmFnZXIuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5yZWdpc3Rlci5jYWxsKHRoaXMsIGNvbmZpZyk7XG4gICAgfTtcbiAgICByZXR1cm4gV2ViVHJhY2VyUHJvdmlkZXI7XG59KEJhc2ljVHJhY2VyUHJvdmlkZXIpKTtcblxuZXhwb3J0IHsgQmFzaWNUcmFjZXJQcm92aWRlciwgU3RhY2tDb250ZXh0TWFuYWdlciwgV2ViVHJhY2VyUHJvdmlkZXIgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLEtBQUtBLFNBQW9CO0FBQ2xDLFNBQVMsS0FBS0MsU0FBMkI7QUFDekMsU0FBYyxLQUFMQyxHQUE0QixLQUFMQyxHQUEyQixLQUFMQyxHQUE4QixLQUFMQyxHQUErQixLQUFMQyxHQUEyQixLQUFMQyxHQUFnQyxLQUFMQyxHQUE2QixLQUFMQyxHQUE4QixLQUFMQyxHQUE2QixLQUFMQyxHQUE0QixLQUFMQyxHQUErQixLQUFMQyxHQUFnQixLQUFMQyxHQUFvQyxLQUFMQyxTQUFtQjtBQUNqVixTQUFjLEtBQUxOLEdBQWtDLEtBQUxMLEdBQStCLEtBQUxELEdBQWdDLEtBQUxhLEdBQTJCLEtBQUxGLEdBQXVCLEtBQUxHLEdBQWtCLEtBQUxDLEdBQXdCLEtBQUxDLEdBQW9CLEtBQUxDLEdBQXVDLEtBQUxULFNBQTBCO0FBaUI5TyxJQUFJVSxJQUE0QyxTQUFVQyxHQUFHSixHQUFHO0FBQzVELE1BQUlLLElBQUksT0FBTyxVQUFXLGNBQWNELEVBQUUsT0FBTyxRQUFRO0FBQ3pELE1BQUksQ0FBQ0MsRUFBRyxRQUFPRDtBQUNmLE1BQUlFLElBQUlELEVBQUUsS0FBS0QsQ0FBQyxHQUFHRyxHQUFHQyxJQUFLLENBQUMsR0FBR2I7QUFDL0IsTUFBSTtBQUNBLFlBQVFLLE1BQU0sVUFBVUEsTUFBTSxNQUFNLEVBQUVPLElBQUlELEVBQUUsS0FBSyxHQUFHLE9BQU0sQ0FBQUUsRUFBRyxLQUFLRCxFQUFFLEtBQUs7QUFBQSxFQUM3RSxTQUNPRSxHQUFPO0FBQUUsSUFBQWQsSUFBSSxFQUFFLE9BQU9jLEVBQU07QUFBQSxFQUFHLFVBQ3RDO0FBQ0ksUUFBSTtBQUNBLE1BQUlG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LElBRWhEZ0IsRUFBTyxrQkFDUEEsRUFBTyxlQUFlLE9BQU8sR0FFakNELEVBQU8sVUFBVSxTQUFTLEtBQUssTUFBTUMsQ0FBTTtBQUFBLElBQy9DLEdBQ09GO0FBQUEsRUFDWCxFQUFFOUMsQ0FBbUI7QUFBQTsiLAogICJuYW1lcyI6IFsiUk9PVF9DT05URVhUIiwgIkJhc2ljVHJhY2VyUHJvdmlkZXIiLCAiQSIsICJiIiwgImEiLCAiQyIsICJGIiwgIkkiLCAiTiIsICJQIiwgIlIiLCAiZCIsICJTIiwgImUiLCAiYyIsICJUIiwgImciLCAiaCIsICJuIiwgInAiLCAicyIsICJfX3JlYWQiLCAibyIsICJtIiwgImkiLCAiciIsICJhciIsICJlcnJvciIsICJfX3NwcmVhZEFycmF5IiwgInRvIiwgImZyb20iLCAicGFjayIsICJsIiwgIlN0YWNrQ29udGV4dE1hbmFnZXIiLCAiY29udGV4dCIsICJ0YXJnZXQiLCAibWFuYWdlciIsICJjb250ZXh0V3JhcHBlciIsICJfdGhpcyIsICJhcmdzIiwgIl9pIiwgImZuIiwgInRoaXNBcmciLCAicHJldmlvdXNDb250ZXh0IiwgIl9fZXh0ZW5kcyIsICJleHRlbmRTdGF0aWNzIiwgIl9fIiwgIldlYlRyYWNlclByb3ZpZGVyIiwgIl9zdXBlciIsICJjb25maWciXQp9Cg==
|
package/dist/index-UHBeywOG.js
DELETED
|
@@ -1,330 +0,0 @@
|
|
|
1
|
-
import { R as l } from "./Resource-qJjZ52YV.js";
|
|
2
|
-
import { d as ee } from "./Resource-qJjZ52YV.js";
|
|
3
|
-
import { d as v } from "./diag-api-CCLNzlUs.js";
|
|
4
|
-
import { e as A, f as m, g as b, h as w, S as D } from "./sdk-info-Ved2vK62.js";
|
|
5
|
-
var T = (
|
|
6
|
-
/** @class */
|
|
7
|
-
function() {
|
|
8
|
-
function e() {
|
|
9
|
-
}
|
|
10
|
-
return e.prototype.detect = function() {
|
|
11
|
-
return new l({});
|
|
12
|
-
}, e;
|
|
13
|
-
}()
|
|
14
|
-
), h = new T(), I = (
|
|
15
|
-
/** @class */
|
|
16
|
-
function() {
|
|
17
|
-
function e() {
|
|
18
|
-
}
|
|
19
|
-
return e.prototype.detect = function() {
|
|
20
|
-
return Promise.resolve(h.detect());
|
|
21
|
-
}, e;
|
|
22
|
-
}()
|
|
23
|
-
), _ = new I(), H = _, F = h, X = _, k = h, K = _, Y = _, q = h, E = function() {
|
|
24
|
-
return E = Object.assign || function(e) {
|
|
25
|
-
for (var n, t = 1, i = arguments.length; t < i; t++) {
|
|
26
|
-
n = arguments[t];
|
|
27
|
-
for (var o in n) Object.prototype.hasOwnProperty.call(n, o) && (e[o] = n[o]);
|
|
28
|
-
}
|
|
29
|
-
return e;
|
|
30
|
-
}, E.apply(this, arguments);
|
|
31
|
-
}, N = (
|
|
32
|
-
/** @class */
|
|
33
|
-
function() {
|
|
34
|
-
function e() {
|
|
35
|
-
}
|
|
36
|
-
return e.prototype.detect = function(n) {
|
|
37
|
-
var t, i, o, r, u = typeof navigator < "u" && ((o = (i = global.process) === null || i === void 0 ? void 0 : i.versions) === null || o === void 0 ? void 0 : o.node) === void 0 && // Node.js v21 adds `navigator`
|
|
38
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
39
|
-
// @ts-ignore don't have Bun types
|
|
40
|
-
((r = global.Bun) === null || r === void 0 ? void 0 : r.version) === void 0;
|
|
41
|
-
if (!u)
|
|
42
|
-
return l.empty();
|
|
43
|
-
var a = (t = {}, t[A] = "browser", t[m] = "Web Browser", t[b] = navigator.userAgent, t);
|
|
44
|
-
return this._getResourceAttributes(a, n);
|
|
45
|
-
}, e.prototype._getResourceAttributes = function(n, t) {
|
|
46
|
-
return n[b] === "" ? (v.debug("BrowserDetector failed: Unable to find required browser resources. "), l.empty()) : new l(E({}, n));
|
|
47
|
-
}, e;
|
|
48
|
-
}()
|
|
49
|
-
), O = new N(), M = (
|
|
50
|
-
/** @class */
|
|
51
|
-
function() {
|
|
52
|
-
function e() {
|
|
53
|
-
}
|
|
54
|
-
return e.prototype.detect = function(n) {
|
|
55
|
-
return Promise.resolve(O.detect(n));
|
|
56
|
-
}, e;
|
|
57
|
-
}()
|
|
58
|
-
), J = new M(), L = function(e) {
|
|
59
|
-
var n = typeof Symbol == "function" && Symbol.iterator, t = n && e[n], i = 0;
|
|
60
|
-
if (t) return t.call(e);
|
|
61
|
-
if (e && typeof e.length == "number") return {
|
|
62
|
-
next: function() {
|
|
63
|
-
return e && i >= e.length && (e = void 0), { value: e && e[i++], done: !e };
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
throw new TypeError(n ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
67
|
-
}, x = function(e, n) {
|
|
68
|
-
var t = typeof Symbol == "function" && e[Symbol.iterator];
|
|
69
|
-
if (!t) return e;
|
|
70
|
-
var i = t.call(e), o, r = [], u;
|
|
71
|
-
try {
|
|
72
|
-
for (; (n === void 0 || n-- > 0) && !(o = i.next()).done; ) r.push(o.value);
|
|
73
|
-
} catch (a) {
|
|
74
|
-
u = { error: a };
|
|
75
|
-
} finally {
|
|
76
|
-
try {
|
|
77
|
-
o && !o.done && (t = i.return) && t.call(i);
|
|
78
|
-
} finally {
|
|
79
|
-
if (u) throw u.error;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return r;
|
|
83
|
-
}, C = (
|
|
84
|
-
/** @class */
|
|
85
|
-
function() {
|
|
86
|
-
function e() {
|
|
87
|
-
this._MAX_LENGTH = 255, this._COMMA_SEPARATOR = ",", this._LABEL_KEY_VALUE_SPLITTER = "=", this._ERROR_MESSAGE_INVALID_CHARS = "should be a ASCII string with a length greater than 0 and not exceed " + this._MAX_LENGTH + " characters.", this._ERROR_MESSAGE_INVALID_VALUE = "should be a ASCII string with a length not exceed " + this._MAX_LENGTH + " characters.";
|
|
88
|
-
}
|
|
89
|
-
return e.prototype.detect = function(n) {
|
|
90
|
-
var t = {}, i = w(), o = i.OTEL_RESOURCE_ATTRIBUTES, r = i.OTEL_SERVICE_NAME;
|
|
91
|
-
if (o)
|
|
92
|
-
try {
|
|
93
|
-
var u = this._parseResourceAttributes(o);
|
|
94
|
-
Object.assign(t, u);
|
|
95
|
-
} catch (a) {
|
|
96
|
-
v.debug("EnvDetector failed: " + a.message);
|
|
97
|
-
}
|
|
98
|
-
return r && (t[D] = r), new l(t);
|
|
99
|
-
}, e.prototype._parseResourceAttributes = function(n) {
|
|
100
|
-
var t, i;
|
|
101
|
-
if (!n)
|
|
102
|
-
return {};
|
|
103
|
-
var o = {}, r = n.split(this._COMMA_SEPARATOR, -1);
|
|
104
|
-
try {
|
|
105
|
-
for (var u = L(r), a = u.next(); !a.done; a = u.next()) {
|
|
106
|
-
var f = a.value, c = f.split(this._LABEL_KEY_VALUE_SPLITTER, -1);
|
|
107
|
-
if (c.length === 2) {
|
|
108
|
-
var s = x(c, 2), d = s[0], y = s[1];
|
|
109
|
-
if (d = d.trim(), y = y.trim().split(/^"|"$/).join(""), !this._isValidAndNotEmpty(d))
|
|
110
|
-
throw new Error("Attribute key " + this._ERROR_MESSAGE_INVALID_CHARS);
|
|
111
|
-
if (!this._isValid(y))
|
|
112
|
-
throw new Error("Attribute value " + this._ERROR_MESSAGE_INVALID_VALUE);
|
|
113
|
-
o[d] = decodeURIComponent(y);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
} catch (g) {
|
|
117
|
-
t = { error: g };
|
|
118
|
-
} finally {
|
|
119
|
-
try {
|
|
120
|
-
a && !a.done && (i = u.return) && i.call(u);
|
|
121
|
-
} finally {
|
|
122
|
-
if (t) throw t.error;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
return o;
|
|
126
|
-
}, e.prototype._isValid = function(n) {
|
|
127
|
-
return n.length <= this._MAX_LENGTH && this._isBaggageOctetString(n);
|
|
128
|
-
}, e.prototype._isBaggageOctetString = function(n) {
|
|
129
|
-
for (var t = 0; t < n.length; t++) {
|
|
130
|
-
var i = n.charCodeAt(t);
|
|
131
|
-
if (i < 33 || i === 44 || i === 59 || i === 92 || i > 126)
|
|
132
|
-
return !1;
|
|
133
|
-
}
|
|
134
|
-
return !0;
|
|
135
|
-
}, e.prototype._isValidAndNotEmpty = function(n) {
|
|
136
|
-
return n.length > 0 && this._isValid(n);
|
|
137
|
-
}, e;
|
|
138
|
-
}()
|
|
139
|
-
), V = new C(), B = (
|
|
140
|
-
/** @class */
|
|
141
|
-
function() {
|
|
142
|
-
function e() {
|
|
143
|
-
}
|
|
144
|
-
return e.prototype.detect = function(n) {
|
|
145
|
-
return Promise.resolve(V.detect(n));
|
|
146
|
-
}, e;
|
|
147
|
-
}()
|
|
148
|
-
), W = new B(), U = function(e) {
|
|
149
|
-
return e !== null && typeof e == "object" && typeof e.then == "function";
|
|
150
|
-
}, S = function(e, n, t, i) {
|
|
151
|
-
function o(r) {
|
|
152
|
-
return r instanceof t ? r : new t(function(u) {
|
|
153
|
-
u(r);
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
return new (t || (t = Promise))(function(r, u) {
|
|
157
|
-
function a(s) {
|
|
158
|
-
try {
|
|
159
|
-
c(i.next(s));
|
|
160
|
-
} catch (d) {
|
|
161
|
-
u(d);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
function f(s) {
|
|
165
|
-
try {
|
|
166
|
-
c(i.throw(s));
|
|
167
|
-
} catch (d) {
|
|
168
|
-
u(d);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
function c(s) {
|
|
172
|
-
s.done ? r(s.value) : o(s.value).then(a, f);
|
|
173
|
-
}
|
|
174
|
-
c((i = i.apply(e, n || [])).next());
|
|
175
|
-
});
|
|
176
|
-
}, p = function(e, n) {
|
|
177
|
-
var t = { label: 0, sent: function() {
|
|
178
|
-
if (r[0] & 1) throw r[1];
|
|
179
|
-
return r[1];
|
|
180
|
-
}, trys: [], ops: [] }, i, o, r, u;
|
|
181
|
-
return u = { next: a(0), throw: a(1), return: a(2) }, typeof Symbol == "function" && (u[Symbol.iterator] = function() {
|
|
182
|
-
return this;
|
|
183
|
-
}), u;
|
|
184
|
-
function a(c) {
|
|
185
|
-
return function(s) {
|
|
186
|
-
return f([c, s]);
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
function f(c) {
|
|
190
|
-
if (i) throw new TypeError("Generator is already executing.");
|
|
191
|
-
for (; t; ) try {
|
|
192
|
-
if (i = 1, o && (r = c[0] & 2 ? o.return : c[0] ? o.throw || ((r = o.return) && r.call(o), 0) : o.next) && !(r = r.call(o, c[1])).done) return r;
|
|
193
|
-
switch (o = 0, r && (c = [c[0] & 2, r.value]), c[0]) {
|
|
194
|
-
case 0:
|
|
195
|
-
case 1:
|
|
196
|
-
r = c;
|
|
197
|
-
break;
|
|
198
|
-
case 4:
|
|
199
|
-
return t.label++, { value: c[1], done: !1 };
|
|
200
|
-
case 5:
|
|
201
|
-
t.label++, o = c[1], c = [0];
|
|
202
|
-
continue;
|
|
203
|
-
case 7:
|
|
204
|
-
c = t.ops.pop(), t.trys.pop();
|
|
205
|
-
continue;
|
|
206
|
-
default:
|
|
207
|
-
if (r = t.trys, !(r = r.length > 0 && r[r.length - 1]) && (c[0] === 6 || c[0] === 2)) {
|
|
208
|
-
t = 0;
|
|
209
|
-
continue;
|
|
210
|
-
}
|
|
211
|
-
if (c[0] === 3 && (!r || c[1] > r[0] && c[1] < r[3])) {
|
|
212
|
-
t.label = c[1];
|
|
213
|
-
break;
|
|
214
|
-
}
|
|
215
|
-
if (c[0] === 6 && t.label < r[1]) {
|
|
216
|
-
t.label = r[1], r = c;
|
|
217
|
-
break;
|
|
218
|
-
}
|
|
219
|
-
if (r && t.label < r[2]) {
|
|
220
|
-
t.label = r[2], t.ops.push(c);
|
|
221
|
-
break;
|
|
222
|
-
}
|
|
223
|
-
r[2] && t.ops.pop(), t.trys.pop();
|
|
224
|
-
continue;
|
|
225
|
-
}
|
|
226
|
-
c = n.call(e, t);
|
|
227
|
-
} catch (s) {
|
|
228
|
-
c = [6, s], o = 0;
|
|
229
|
-
} finally {
|
|
230
|
-
i = r = 0;
|
|
231
|
-
}
|
|
232
|
-
if (c[0] & 5) throw c[1];
|
|
233
|
-
return { value: c[0] ? c[1] : void 0, done: !0 };
|
|
234
|
-
}
|
|
235
|
-
}, $ = function(e) {
|
|
236
|
-
return e === void 0 && (e = {}), S(void 0, void 0, void 0, function() {
|
|
237
|
-
var n;
|
|
238
|
-
return p(this, function(t) {
|
|
239
|
-
switch (t.label) {
|
|
240
|
-
case 0:
|
|
241
|
-
return [4, Promise.all((e.detectors || []).map(function(i) {
|
|
242
|
-
return S(void 0, void 0, void 0, function() {
|
|
243
|
-
var o, r;
|
|
244
|
-
return p(this, function(u) {
|
|
245
|
-
switch (u.label) {
|
|
246
|
-
case 0:
|
|
247
|
-
return u.trys.push([0, 2, , 3]), [4, i.detect(e)];
|
|
248
|
-
case 1:
|
|
249
|
-
return o = u.sent(), v.debug(i.constructor.name + " found resource.", o), [2, o];
|
|
250
|
-
case 2:
|
|
251
|
-
return r = u.sent(), v.debug(i.constructor.name + " failed: " + r.message), [2, l.empty()];
|
|
252
|
-
case 3:
|
|
253
|
-
return [
|
|
254
|
-
2
|
|
255
|
-
/*return*/
|
|
256
|
-
];
|
|
257
|
-
}
|
|
258
|
-
});
|
|
259
|
-
});
|
|
260
|
-
}))];
|
|
261
|
-
case 1:
|
|
262
|
-
return n = t.sent(), R(n), [2, n.reduce(function(i, o) {
|
|
263
|
-
return i.merge(o);
|
|
264
|
-
}, l.empty())];
|
|
265
|
-
}
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
}, z = function(e) {
|
|
269
|
-
var n;
|
|
270
|
-
e === void 0 && (e = {});
|
|
271
|
-
var t = ((n = e.detectors) !== null && n !== void 0 ? n : []).map(function(o) {
|
|
272
|
-
try {
|
|
273
|
-
var r = o.detect(e), u;
|
|
274
|
-
if (U(r)) {
|
|
275
|
-
var a = function() {
|
|
276
|
-
return S(void 0, void 0, void 0, function() {
|
|
277
|
-
var f, c;
|
|
278
|
-
return p(this, function(s) {
|
|
279
|
-
switch (s.label) {
|
|
280
|
-
case 0:
|
|
281
|
-
return [4, r];
|
|
282
|
-
case 1:
|
|
283
|
-
return f = s.sent(), [4, (c = f.waitForAsyncAttributes) === null || c === void 0 ? void 0 : c.call(f)];
|
|
284
|
-
case 2:
|
|
285
|
-
return s.sent(), [2, f.attributes];
|
|
286
|
-
}
|
|
287
|
-
});
|
|
288
|
-
});
|
|
289
|
-
};
|
|
290
|
-
u = new l({}, a());
|
|
291
|
-
} else
|
|
292
|
-
u = r;
|
|
293
|
-
return u.waitForAsyncAttributes ? u.waitForAsyncAttributes().then(function() {
|
|
294
|
-
return v.debug(o.constructor.name + " found resource.", u);
|
|
295
|
-
}) : v.debug(o.constructor.name + " found resource.", u), u;
|
|
296
|
-
} catch (f) {
|
|
297
|
-
return v.error(o.constructor.name + " failed: " + f.message), l.empty();
|
|
298
|
-
}
|
|
299
|
-
}), i = t.reduce(function(o, r) {
|
|
300
|
-
return o.merge(r);
|
|
301
|
-
}, l.empty());
|
|
302
|
-
return i.waitForAsyncAttributes && i.waitForAsyncAttributes().then(function() {
|
|
303
|
-
R(t);
|
|
304
|
-
}), i;
|
|
305
|
-
}, R = function(e) {
|
|
306
|
-
e.forEach(function(n) {
|
|
307
|
-
if (Object.keys(n.attributes).length > 0) {
|
|
308
|
-
var t = JSON.stringify(n.attributes, null, 4);
|
|
309
|
-
v.verbose(t);
|
|
310
|
-
}
|
|
311
|
-
});
|
|
312
|
-
};
|
|
313
|
-
export {
|
|
314
|
-
l as Resource,
|
|
315
|
-
J as browserDetector,
|
|
316
|
-
O as browserDetectorSync,
|
|
317
|
-
ee as defaultServiceName,
|
|
318
|
-
$ as detectResources,
|
|
319
|
-
z as detectResourcesSync,
|
|
320
|
-
W as envDetector,
|
|
321
|
-
V as envDetectorSync,
|
|
322
|
-
H as hostDetector,
|
|
323
|
-
F as hostDetectorSync,
|
|
324
|
-
X as osDetector,
|
|
325
|
-
k as osDetectorSync,
|
|
326
|
-
K as processDetector,
|
|
327
|
-
Y as processDetectorSync,
|
|
328
|
-
q as serviceInstanceIdDetectorSync
|
|
329
|
-
};
|
|
330
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDBrfX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IFIgYXMgUmVzb3VyY2UgfSBmcm9tICcuL1Jlc291cmNlLSF+ezAwYX1+LmpzJztcbmV4cG9ydCB7IGQgYXMgZGVmYXVsdFNlcnZpY2VOYW1lIH0gZnJvbSAnLi9SZXNvdXJjZS0hfnswMGF9fi5qcyc7XG5pbXBvcnQgeyBkIGFzIGRpYWcgfSBmcm9tICcuL2RpYWctYXBpLSF+ezAwNX1+LmpzJztcbmltcG9ydCB7IGUgYXMgU0VNUkVTQVRUUlNfUFJPQ0VTU19SVU5USU1FX05BTUUsIGYgYXMgU0VNUkVTQVRUUlNfUFJPQ0VTU19SVU5USU1FX0RFU0NSSVBUSU9OLCBnIGFzIFNFTVJFU0FUVFJTX1BST0NFU1NfUlVOVElNRV9WRVJTSU9OLCBoIGFzIGdldEVudiwgUyBhcyBTRU1SRVNBVFRSU19TRVJWSUNFX05BTUUgfSBmcm9tICcuL3Nkay1pbmZvLSF+ezAwYn1+LmpzJztcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBOb29wRGV0ZWN0b3JTeW5jID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BEZXRlY3RvclN5bmMoKSB7XG4gICAgfVxuICAgIE5vb3BEZXRlY3RvclN5bmMucHJvdG90eXBlLmRldGVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXNvdXJjZSh7fSk7XG4gICAgfTtcbiAgICByZXR1cm4gTm9vcERldGVjdG9yU3luYztcbn0oKSk7XG52YXIgbm9vcERldGVjdG9yU3luYyA9IG5ldyBOb29wRGV0ZWN0b3JTeW5jKCk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgTm9vcERldGVjdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BEZXRlY3RvcigpIHtcbiAgICB9XG4gICAgTm9vcERldGVjdG9yLnByb3RvdHlwZS5kZXRlY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobm9vcERldGVjdG9yU3luYy5kZXRlY3QoKSk7XG4gICAgfTtcbiAgICByZXR1cm4gTm9vcERldGVjdG9yO1xufSgpKTtcbnZhciBub29wRGV0ZWN0b3IgPSBuZXcgTm9vcERldGVjdG9yKCk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgaG9zdERldGVjdG9yID0gbm9vcERldGVjdG9yO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIGhvc3REZXRlY3RvclN5bmMgPSBub29wRGV0ZWN0b3JTeW5jO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIG9zRGV0ZWN0b3IgPSBub29wRGV0ZWN0b3I7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgb3NEZXRlY3RvclN5bmMgPSBub29wRGV0ZWN0b3JTeW5jO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIHByb2Nlc3NEZXRlY3RvciA9IG5vb3BEZXRlY3RvcjtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBwcm9jZXNzRGV0ZWN0b3JTeW5jID0gbm9vcERldGVjdG9yO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbnZhciBzZXJ2aWNlSW5zdGFuY2VJZERldGVjdG9yU3luYyA9IG5vb3BEZXRlY3RvclN5bmM7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19hc3NpZ24gPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbi8qKlxuICogQnJvd3NlckRldGVjdG9yU3luYyB3aWxsIGJlIHVzZWQgdG8gZGV0ZWN0IHRoZSByZXNvdXJjZXMgcmVsYXRlZCB0byBicm93c2VyLlxuICovXG52YXIgQnJvd3NlckRldGVjdG9yU3luYyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBCcm93c2VyRGV0ZWN0b3JTeW5jKCkge1xuICAgIH1cbiAgICBCcm93c2VyRGV0ZWN0b3JTeW5jLnByb3RvdHlwZS5kZXRlY3QgPSBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XG4gICAgICAgIHZhciBpc0Jyb3dzZXIgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGdsb2JhbC5wcm9jZXNzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IudmVyc2lvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5ub2RlKSA9PT0gdW5kZWZpbmVkICYmIC8vIE5vZGUuanMgdjIxIGFkZHMgYG5hdmlnYXRvcmBcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgZG9uJ3QgaGF2ZSBCdW4gdHlwZXNcbiAgICAgICAgICAgICgoX2QgPSBnbG9iYWwuQnVuKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QudmVyc2lvbikgPT09IHVuZGVmaW5lZDsgLy8gQnVuIChidW4uc2gpIGRlZmluZXMgYG5hdmlnYXRvcmBcbiAgICAgICAgaWYgKCFpc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZS5lbXB0eSgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBicm93c2VyUmVzb3VyY2UgPSAoX2EgPSB7fSxcbiAgICAgICAgICAgIF9hW1NFTVJFU0FUVFJTX1BST0NFU1NfUlVOVElNRV9OQU1FXSA9ICdicm93c2VyJyxcbiAgICAgICAgICAgIF9hW1NFTVJFU0FUVFJTX1BST0NFU1NfUlVOVElNRV9ERVNDUklQVElPTl0gPSAnV2ViIEJyb3dzZXInLFxuICAgICAgICAgICAgX2FbU0VNUkVTQVRUUlNfUFJPQ0VTU19SVU5USU1FX1ZFUlNJT05dID0gbmF2aWdhdG9yLnVzZXJBZ2VudCxcbiAgICAgICAgICAgIF9hKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFJlc291cmNlQXR0cmlidXRlcyhicm93c2VyUmVzb3VyY2UsIGNvbmZpZyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZXMgcHJvY2VzcyByZXNvdXJjZSBhdHRyaWJ1dGUgbWFwIGZyb20gcHJvY2VzcyB2YXJpYWJsZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBicm93c2VyUmVzb3VyY2UgVGhlIHVuLXNhbml0aXplZCByZXNvdXJjZSBhdHRyaWJ1dGVzIGZyb20gcHJvY2VzcyBhcyBrZXkvdmFsdWUgcGFpcnMuXG4gICAgICogQHBhcmFtIGNvbmZpZzogQ29uZmlnXG4gICAgICogQHJldHVybnMgVGhlIHNhbml0aXplZCByZXNvdXJjZSBhdHRyaWJ1dGVzLlxuICAgICAqL1xuICAgIEJyb3dzZXJEZXRlY3RvclN5bmMucHJvdG90eXBlLl9nZXRSZXNvdXJjZUF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoYnJvd3NlclJlc291cmNlLCBfY29uZmlnKSB7XG4gICAgICAgIGlmIChicm93c2VyUmVzb3VyY2VbU0VNUkVTQVRUUlNfUFJPQ0VTU19SVU5USU1FX1ZFUlNJT05dID09PSAnJykge1xuICAgICAgICAgICAgZGlhZy5kZWJ1ZygnQnJvd3NlckRldGVjdG9yIGZhaWxlZDogVW5hYmxlIHRvIGZpbmQgcmVxdWlyZWQgYnJvd3NlciByZXNvdXJjZXMuICcpO1xuICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlLmVtcHR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc291cmNlKF9fYXNzaWduKHt9LCBicm93c2VyUmVzb3VyY2UpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvclN5bmM7XG59KCkpO1xudmFyIGJyb3dzZXJEZXRlY3RvclN5bmMgPSBuZXcgQnJvd3NlckRldGVjdG9yU3luYygpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBCcm93c2VyRGV0ZWN0b3Igd2lsbCBiZSB1c2VkIHRvIGRldGVjdCB0aGUgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gYnJvd3Nlci5cbiAqL1xudmFyIEJyb3dzZXJEZXRlY3RvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBCcm93c2VyRGV0ZWN0b3IoKSB7XG4gICAgfVxuICAgIEJyb3dzZXJEZXRlY3Rvci5wcm90b3R5cGUuZGV0ZWN0ID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJyb3dzZXJEZXRlY3RvclN5bmMuZGV0ZWN0KGNvbmZpZykpO1xuICAgIH07XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvcjtcbn0oKSk7XG52YXIgYnJvd3NlckRldGVjdG9yID0gbmV3IEJyb3dzZXJEZXRlY3RvcigpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fdmFsdWVzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX192YWx1ZXMpIHx8IGZ1bmN0aW9uKG8pIHtcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufTtcbnZhciBfX3JlYWQgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG4vKipcbiAqIEVudkRldGVjdG9yU3luYyBjYW4gYmUgdXNlZCB0byBkZXRlY3QgdGhlIHByZXNlbmNlIG9mIGFuZCBjcmVhdGUgYSBSZXNvdXJjZVxuICogZnJvbSB0aGUgT1RFTF9SRVNPVVJDRV9BVFRSSUJVVEVTIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICovXG52YXIgRW52RGV0ZWN0b3JTeW5jID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEVudkRldGVjdG9yU3luYygpIHtcbiAgICAgICAgLy8gVHlwZSwgYXR0cmlidXRlIGtleXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWVzIHNob3VsZCBub3QgZXhjZWVkIDI1NiBjaGFyYWN0ZXJzLlxuICAgICAgICB0aGlzLl9NQVhfTEVOR1RIID0gMjU1O1xuICAgICAgICAvLyBPVEVMX1JFU09VUkNFX0FUVFJJQlVURVMgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzLlxuICAgICAgICB0aGlzLl9DT01NQV9TRVBBUkFUT1IgPSAnLCc7XG4gICAgICAgIC8vIE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFUyBjb250YWlucyBrZXkgdmFsdWUgcGFpciBzZXBhcmF0ZWQgYnkgJz0nLlxuICAgICAgICB0aGlzLl9MQUJFTF9LRVlfVkFMVUVfU1BMSVRURVIgPSAnPSc7XG4gICAgICAgIHRoaXMuX0VSUk9SX01FU1NBR0VfSU5WQUxJRF9DSEFSUyA9ICdzaG91bGQgYmUgYSBBU0NJSSBzdHJpbmcgd2l0aCBhIGxlbmd0aCBncmVhdGVyIHRoYW4gMCBhbmQgbm90IGV4Y2VlZCAnICtcbiAgICAgICAgICAgIHRoaXMuX01BWF9MRU5HVEggK1xuICAgICAgICAgICAgJyBjaGFyYWN0ZXJzLic7XG4gICAgICAgIHRoaXMuX0VSUk9SX01FU1NBR0VfSU5WQUxJRF9WQUxVRSA9ICdzaG91bGQgYmUgYSBBU0NJSSBzdHJpbmcgd2l0aCBhIGxlbmd0aCBub3QgZXhjZWVkICcgK1xuICAgICAgICAgICAgdGhpcy5fTUFYX0xFTkdUSCArXG4gICAgICAgICAgICAnIGNoYXJhY3RlcnMuJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHtAbGluayBSZXNvdXJjZX0gcG9wdWxhdGVkIHdpdGggYXR0cmlidXRlcyBmcm9tIHRoZVxuICAgICAqIE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFUyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gTm90ZSB0aGlzIGlzIGFuIGFzeW5jXG4gICAgICogZnVuY3Rpb24gdG8gY29uZm9ybSB0byB0aGUgRGV0ZWN0b3IgaW50ZXJmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbmZpZyBUaGUgcmVzb3VyY2UgZGV0ZWN0aW9uIGNvbmZpZ1xuICAgICAqL1xuICAgIEVudkRldGVjdG9yU3luYy5wcm90b3R5cGUuZGV0ZWN0ID0gZnVuY3Rpb24gKF9jb25maWcpIHtcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgdmFyIGVudiA9IGdldEVudigpO1xuICAgICAgICB2YXIgcmF3QXR0cmlidXRlcyA9IGVudi5PVEVMX1JFU09VUkNFX0FUVFJJQlVURVM7XG4gICAgICAgIHZhciBzZXJ2aWNlTmFtZSA9IGVudi5PVEVMX1NFUlZJQ0VfTkFNRTtcbiAgICAgICAgaWYgKHJhd0F0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlZEF0dHJpYnV0ZXMgPSB0aGlzLl9wYXJzZVJlc291cmNlQXR0cmlidXRlcyhyYXdBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGF0dHJpYnV0ZXMsIHBhcnNlZEF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBkaWFnLmRlYnVnKFwiRW52RGV0ZWN0b3IgZmFpbGVkOiBcIiArIGUubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcnZpY2VOYW1lKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW1NFTVJFU0FUVFJTX1NFUlZJQ0VfTkFNRV0gPSBzZXJ2aWNlTmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFJlc291cmNlKGF0dHJpYnV0ZXMpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhdHRyaWJ1dGUgbWFwIGZyb20gdGhlIE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFUyBlbnZpcm9ubWVudFxuICAgICAqIHZhcmlhYmxlLlxuICAgICAqXG4gICAgICogT1RFTF9SRVNPVVJDRV9BVFRSSUJVVEVTOiBBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXMgZGVzY3JpYmluZ1xuICAgICAqIHRoZSBzb3VyY2UgaW4gbW9yZSBkZXRhaWwsIGUuZy4g4oCca2V5MT12YWwxLGtleTI9dmFsMuKAnS4gRG9tYWluIG5hbWVzIGFuZFxuICAgICAqIHBhdGhzIGFyZSBhY2NlcHRlZCBhcyBhdHRyaWJ1dGUga2V5cy4gVmFsdWVzIG1heSBiZSBxdW90ZWQgb3IgdW5xdW90ZWQgaW5cbiAgICAgKiBnZW5lcmFsLiBJZiBhIHZhbHVlIGNvbnRhaW5zIHdoaXRlc3BhY2UsID0sIG9yIFwiIGNoYXJhY3RlcnMsIGl0IG11c3RcbiAgICAgKiBhbHdheXMgYmUgcXVvdGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJhd0VudkF0dHJpYnV0ZXMgVGhlIHJlc291cmNlIGF0dHJpYnV0ZXMgYXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdFxuICAgICAqIG9mIGtleS92YWx1ZSBwYWlycy5cbiAgICAgKiBAcmV0dXJucyBUaGUgc2FuaXRpemVkIHJlc291cmNlIGF0dHJpYnV0ZXMuXG4gICAgICovXG4gICAgRW52RGV0ZWN0b3JTeW5jLnByb3RvdHlwZS5fcGFyc2VSZXNvdXJjZUF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAocmF3RW52QXR0cmlidXRlcykge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgaWYgKCFyYXdFbnZBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICB2YXIgcmF3QXR0cmlidXRlcyA9IHJhd0VudkF0dHJpYnV0ZXMuc3BsaXQodGhpcy5fQ09NTUFfU0VQQVJBVE9SLCAtMSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciByYXdBdHRyaWJ1dGVzXzEgPSBfX3ZhbHVlcyhyYXdBdHRyaWJ1dGVzKSwgcmF3QXR0cmlidXRlc18xXzEgPSByYXdBdHRyaWJ1dGVzXzEubmV4dCgpOyAhcmF3QXR0cmlidXRlc18xXzEuZG9uZTsgcmF3QXR0cmlidXRlc18xXzEgPSByYXdBdHRyaWJ1dGVzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJhd0F0dHJpYnV0ZSA9IHJhd0F0dHJpYnV0ZXNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHZhciBrZXlWYWx1ZVBhaXIgPSByYXdBdHRyaWJ1dGUuc3BsaXQodGhpcy5fTEFCRUxfS0VZX1ZBTFVFX1NQTElUVEVSLCAtMSk7XG4gICAgICAgICAgICAgICAgaWYgKGtleVZhbHVlUGFpci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBfYiA9IF9fcmVhZChrZXlWYWx1ZVBhaXIsIDIpLCBrZXkgPSBfYlswXSwgdmFsdWUgPSBfYlsxXTtcbiAgICAgICAgICAgICAgICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhcmUgdHJpbW1lZC5cbiAgICAgICAgICAgICAgICBrZXkgPSBrZXkudHJpbSgpO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpLnNwbGl0KC9eXCJ8XCIkLykuam9pbignJyk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1ZhbGlkQW5kTm90RW1wdHkoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdHRyaWJ1dGUga2V5IFwiICsgdGhpcy5fRVJST1JfTUVTU0FHRV9JTlZBTElEX0NIQVJTKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1ZhbGlkKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdHRyaWJ1dGUgdmFsdWUgXCIgKyB0aGlzLl9FUlJPUl9NRVNTQUdFX0lOVkFMSURfVkFMVUUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2tleV0gPSBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAocmF3QXR0cmlidXRlc18xXzEgJiYgIXJhd0F0dHJpYnV0ZXNfMV8xLmRvbmUgJiYgKF9hID0gcmF3QXR0cmlidXRlc18xLnJldHVybikpIF9hLmNhbGwocmF3QXR0cmlidXRlc18xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gU3RyaW5nIGlzIGEgdmFsaWQgcHJpbnRhYmxlIEFTQ0lJIHN0cmluZyB3aXRoXG4gICAgICogYSBsZW5ndGggbm90IGV4Y2VlZCBfTUFYX0xFTkdUSCBjaGFyYWN0ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0ciBUaGUgU3RyaW5nIHRvIGJlIHZhbGlkYXRlZC5cbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBTdHJpbmcgaXMgdmFsaWQuXG4gICAgICovXG4gICAgRW52RGV0ZWN0b3JTeW5jLnByb3RvdHlwZS5faXNWYWxpZCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiBuYW1lLmxlbmd0aCA8PSB0aGlzLl9NQVhfTEVOR1RIICYmIHRoaXMuX2lzQmFnZ2FnZU9jdGV0U3RyaW5nKG5hbWUpO1xuICAgIH07XG4gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2JhZ2dhZ2UvI2RlZmluaXRpb25cbiAgICBFbnZEZXRlY3RvclN5bmMucHJvdG90eXBlLl9pc0JhZ2dhZ2VPY3RldFN0cmluZyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaCA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaWYgKGNoIDwgMHgyMSB8fCBjaCA9PT0gMHgyYyB8fCBjaCA9PT0gMHgzYiB8fCBjaCA9PT0gMHg1YyB8fCBjaCA+IDB4N2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGdpdmVuIFN0cmluZyBpcyBhIHZhbGlkIHByaW50YWJsZSBBU0NJSSBzdHJpbmcgd2l0aFxuICAgICAqIGEgbGVuZ3RoIGdyZWF0ZXIgdGhhbiAwIGFuZCBub3QgZXhjZWVkIF9NQVhfTEVOR1RIIGNoYXJhY3RlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyIFRoZSBTdHJpbmcgdG8gYmUgdmFsaWRhdGVkLlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIFN0cmluZyBpcyB2YWxpZCBhbmQgbm90IGVtcHR5LlxuICAgICAqL1xuICAgIEVudkRldGVjdG9yU3luYy5wcm90b3R5cGUuX2lzVmFsaWRBbmROb3RFbXB0eSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5sZW5ndGggPiAwICYmIHRoaXMuX2lzVmFsaWQoc3RyKTtcbiAgICB9O1xuICAgIHJldHVybiBFbnZEZXRlY3RvclN5bmM7XG59KCkpO1xudmFyIGVudkRldGVjdG9yU3luYyA9IG5ldyBFbnZEZXRlY3RvclN5bmMoKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogRW52RGV0ZWN0b3IgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IHRoZSBwcmVzZW5jZSBvZiBhbmQgY3JlYXRlIGEgUmVzb3VyY2VcbiAqIGZyb20gdGhlIE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFUyBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqL1xudmFyIEVudkRldGVjdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEVudkRldGVjdG9yKCkge1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEge0BsaW5rIFJlc291cmNlfSBwb3B1bGF0ZWQgd2l0aCBhdHRyaWJ1dGVzIGZyb20gdGhlXG4gICAgICogT1RFTF9SRVNPVVJDRV9BVFRSSUJVVEVTIGVudmlyb25tZW50IHZhcmlhYmxlLiBOb3RlIHRoaXMgaXMgYW4gYXN5bmNcbiAgICAgKiBmdW5jdGlvbiB0byBjb25mb3JtIHRvIHRoZSBEZXRlY3RvciBpbnRlcmZhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29uZmlnIFRoZSByZXNvdXJjZSBkZXRlY3Rpb24gY29uZmlnXG4gICAgICovXG4gICAgRW52RGV0ZWN0b3IucHJvdG90eXBlLmRldGVjdCA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlbnZEZXRlY3RvclN5bmMuZGV0ZWN0KGNvbmZpZykpO1xuICAgIH07XG4gICAgcmV0dXJuIEVudkRldGVjdG9yO1xufSgpKTtcbnZhciBlbnZEZXRlY3RvciA9IG5ldyBFbnZEZXRlY3RvcigpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIGlzUHJvbWlzZUxpa2UgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgcmV0dXJuICh2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbC50aGVuID09PSAnZnVuY3Rpb24nKTtcbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19hd2FpdGVyID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG4vKipcbiAqIFJ1bnMgYWxsIHJlc291cmNlIGRldGVjdG9ycyBhbmQgcmV0dXJucyB0aGUgcmVzdWx0cyBtZXJnZWQgaW50byBhIHNpbmdsZSBSZXNvdXJjZS4gUHJvbWlzZVxuICogZG9lcyBub3QgcmVzb2x2ZSB1bnRpbCBhbGwgdGhlIHVuZGVybHlpbmcgZGV0ZWN0b3JzIGhhdmUgcmVzb2x2ZWQsIHVubGlrZVxuICogZGV0ZWN0UmVzb3VyY2VzU3luYy5cbiAqXG4gKiBAZGVwcmVjYXRlZCB1c2UgZGV0ZWN0UmVzb3VyY2VzU3luYygpIGluc3RlYWQuXG4gKiBAcGFyYW0gY29uZmlnIENvbmZpZ3VyYXRpb24gZm9yIHJlc291cmNlIGRldGVjdGlvblxuICovXG52YXIgZGV0ZWN0UmVzb3VyY2VzID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkgeyBjb25maWcgPSB7fTsgfVxuICAgIHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzb3VyY2VzO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLmFsbCgoY29uZmlnLmRldGVjdG9ycyB8fCBbXSkubWFwKGZ1bmN0aW9uIChkKSB7IHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc291cmNlLCBlXzE7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzAsIDIsICwgM10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgZC5kZXRlY3QoY29uZmlnKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhZy5kZWJ1ZyhkLmNvbnN0cnVjdG9yLm5hbWUgKyBcIiBmb3VuZCByZXNvdXJjZS5cIiwgcmVzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHJlc291cmNlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZV8xID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhZy5kZWJ1ZyhkLmNvbnN0cnVjdG9yLm5hbWUgKyBcIiBmYWlsZWQ6IFwiICsgZV8xLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIFJlc291cmNlLmVtcHR5KCldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7IH0pKV07XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZ1dHVyZSBjaGVjayBpZiB2ZXJib3NlIGxvZ2dpbmcgaXMgZW5hYmxlZCBpc3N1ZSAjMTkwM1xuICAgICAgICAgICAgICAgICAgICBsb2dSZXNvdXJjZXMocmVzb3VyY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHJlc291cmNlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcmVzb3VyY2UpIHsgcmV0dXJuIGFjYy5tZXJnZShyZXNvdXJjZSk7IH0sIFJlc291cmNlLmVtcHR5KCkpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuLyoqXG4gKiBSdW5zIGFsbCByZXNvdXJjZSBkZXRlY3RvcnMgc3luY2hyb25vdXNseSwgbWVyZ2luZyB0aGVpciByZXN1bHRzLiBJbiBjYXNlIG9mIGF0dHJpYnV0ZSBjb2xsaXNpb24gbGF0ZXIgcmVzb3VyY2VzIHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEBwYXJhbSBjb25maWcgQ29uZmlndXJhdGlvbiBmb3IgcmVzb3VyY2UgZGV0ZWN0aW9uXG4gKi9cbnZhciBkZXRlY3RSZXNvdXJjZXNTeW5jID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIHZhciBfYTtcbiAgICBpZiAoY29uZmlnID09PSB2b2lkIDApIHsgY29uZmlnID0ge307IH1cbiAgICB2YXIgcmVzb3VyY2VzID0gKChfYSA9IGNvbmZpZy5kZXRlY3RvcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciByZXNvdXJjZU9yUHJvbWlzZV8xID0gZC5kZXRlY3QoY29uZmlnKTtcbiAgICAgICAgICAgIHZhciByZXNvdXJjZV8xO1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZUxpa2UocmVzb3VyY2VPclByb21pc2VfMSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgY3JlYXRlUHJvbWlzZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXNvbHZlZFJlc291cmNlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIHJlc291cmNlT3JQcm9taXNlXzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRSZXNvdXJjZSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgKChfYSA9IHJlc29sdmVkUmVzb3VyY2Uud2FpdEZvckFzeW5jQXR0cmlidXRlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwocmVzb2x2ZWRSZXNvdXJjZSkpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHJlc29sdmVkUmVzb3VyY2UuYXR0cmlidXRlc107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pOyB9O1xuICAgICAgICAgICAgICAgIHJlc291cmNlXzEgPSBuZXcgUmVzb3VyY2Uoe30sIGNyZWF0ZVByb21pc2UoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZV8xID0gcmVzb3VyY2VPclByb21pc2VfMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNvdXJjZV8xLndhaXRGb3JBc3luY0F0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICB2b2lkIHJlc291cmNlXzFcbiAgICAgICAgICAgICAgICAgICAgLndhaXRGb3JBc3luY0F0dHJpYnV0ZXMoKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkaWFnLmRlYnVnKGQuY29uc3RydWN0b3IubmFtZSArIFwiIGZvdW5kIHJlc291cmNlLlwiLCByZXNvdXJjZV8xKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpYWcuZGVidWcoZC5jb25zdHJ1Y3Rvci5uYW1lICsgXCIgZm91bmQgcmVzb3VyY2UuXCIsIHJlc291cmNlXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlXzE7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGRpYWcuZXJyb3IoZC5jb25zdHJ1Y3Rvci5uYW1lICsgXCIgZmFpbGVkOiBcIiArIGUubWVzc2FnZSk7XG4gICAgICAgICAgICByZXR1cm4gUmVzb3VyY2UuZW1wdHkoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBtZXJnZWRSZXNvdXJjZXMgPSByZXNvdXJjZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHJlc291cmNlKSB7IHJldHVybiBhY2MubWVyZ2UocmVzb3VyY2UpOyB9LCBSZXNvdXJjZS5lbXB0eSgpKTtcbiAgICBpZiAobWVyZ2VkUmVzb3VyY2VzLndhaXRGb3JBc3luY0F0dHJpYnV0ZXMpIHtcbiAgICAgICAgdm9pZCBtZXJnZWRSZXNvdXJjZXMud2FpdEZvckFzeW5jQXR0cmlidXRlcygpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gRnV0dXJlIGNoZWNrIGlmIHZlcmJvc2UgbG9nZ2luZyBpcyBlbmFibGVkIGlzc3VlICMxOTAzXG4gICAgICAgICAgICBsb2dSZXNvdXJjZXMocmVzb3VyY2VzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBtZXJnZWRSZXNvdXJjZXM7XG59O1xuLyoqXG4gKiBXcml0ZXMgZGVidWcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRldGVjdGVkIHJlc291cmNlcyB0byB0aGUgbG9nZ2VyIGRlZmluZWQgaW4gdGhlIHJlc291cmNlIGRldGVjdGlvbiBjb25maWcsIGlmIG9uZSBpcyBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0gcmVzb3VyY2VzIFRoZSBhcnJheSBvZiB7QGxpbmsgUmVzb3VyY2V9IHRoYXQgc2hvdWxkIGJlIGxvZ2dlZC4gRW1wdHkgZW50cmllcyB3aWxsIGJlIGlnbm9yZWQuXG4gKi9cbnZhciBsb2dSZXNvdXJjZXMgPSBmdW5jdGlvbiAocmVzb3VyY2VzKSB7XG4gICAgcmVzb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgICAgIC8vIFByaW50IG9ubHkgcG9wdWxhdGVkIHJlc291cmNlc1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzb3VyY2UuYXR0cmlidXRlcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIHJlc291cmNlRGVidWdTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShyZXNvdXJjZS5hdHRyaWJ1dGVzLCBudWxsLCA0KTtcbiAgICAgICAgICAgIGRpYWcudmVyYm9zZShyZXNvdXJjZURlYnVnU3RyaW5nKTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuZXhwb3J0IHsgUmVzb3VyY2UsIGJyb3dzZXJEZXRlY3RvciwgYnJvd3NlckRldGVjdG9yU3luYywgZGV0ZWN0UmVzb3VyY2VzLCBkZXRlY3RSZXNvdXJjZXNTeW5jLCBlbnZEZXRlY3RvciwgZW52RGV0ZWN0b3JTeW5jLCBob3N0RGV0ZWN0b3IsIGhvc3REZXRlY3RvclN5bmMsIG9zRGV0ZWN0b3IsIG9zRGV0ZWN0b3JTeW5jLCBwcm9jZXNzRGV0ZWN0b3IsIHByb2Nlc3NEZXRlY3RvclN5bmMsIHNlcnZpY2VJbnN0YW5jZUlkRGV0ZWN0b3JTeW5jIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxLQUFLQSxTQUFnQjtBQUM5QixTQUFjLEtBQUxDLFVBQStCO0FBQ3hDLFNBQVMsS0FBS0MsU0FBWTtBQUMxQixTQUFTLEtBQUtDLEdBQWtDLEtBQUtDLEdBQXlDLEtBQUtDLEdBQXFDLEtBQUtDLEdBQVEsS0FBS0MsU0FBZ0M7QUFpQjFMLElBQUlDO0FBQUE7QUFBQSxFQUFrQyxXQUFZO0FBQzlDLGFBQVNBLElBQW1CO0FBQUEsSUFDNUI7QUFDQSxXQUFBQSxFQUFpQixVQUFVLFNBQVMsV0FBWTtBQUM1QyxhQUFPLElBQUlSLEVBQVMsQ0FBQyxDQUFDO0FBQUEsSUFDMUIsR0FDT1E7QUFBQSxFQUNYLEVBQUU7QUFBQSxHQUNFQyxJQUFtQixJQUFJRCxFQUFpQixHQWlCeENFO0FBQUE7QUFBQSxFQUE4QixXQUFZO0FBQzFDLGFBQVNBLElBQWU7QUFBQSxJQUN4QjtBQUNBLFdBQUFBLEVBQWEsVUFBVSxTQUFTLFdBQVk7QUFDeEMsYUFBTyxRQUFRLFFBQVFELEVBQWlCLE9BQU8sQ0FBQztBQUFBLElBQ3BELEdBQ09DO0FBQUEsRUFDWCxFQUFFO0FBQUEsR0FD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RyxFQUFTLENBQUMsR0FBR2lHLEVBQWMsQ0FBQztBQUFBLE1BQ2pEO0FBRUksUUFBQUQsSUFBYUQ7QUFFakIsYUFBSUMsRUFBVyx5QkFDTkEsRUFDQSx1QkFBdUIsRUFDdkIsS0FBSyxXQUFZO0FBQ2xCLGVBQU85RixFQUFLLE1BQU1ELEVBQUUsWUFBWSxPQUFPLG9CQUFvQitGLENBQVU7QUFBQSxNQUN6RSxDQUFDLElBR0Q5RixFQUFLLE1BQU1ELEVBQUUsWUFBWSxPQUFPLG9CQUFvQitGLENBQVUsR0FFM0RBO0FBQUEsSUFDWCxTQUNPckQsR0FBRztBQUNOLGFBQUF6QyxFQUFLLE1BQU1ELEVBQUUsWUFBWSxPQUFPLGNBQWMwQyxFQUFFLE9BQU8sR0FDaEQzQyxFQUFTLE1BQU07QUFBQSxJQUMxQjtBQUFBLEVBQ0osQ0FBQyxHQUNHbUcsSUFBa0JULEVBQVUsT0FBTyxTQUFVRyxHQUFLRixHQUFVO0FBQUUsV0FBT0UsRUFBSSxNQUFNRixDQUFRO0FBQUEsRUFBRyxHQUFHM0YsRUFBUyxNQUFNLENBQUM7QUFDakgsU0FBSW1HLEVBQWdCLDBCQUNYQSxFQUFnQix1QkFBdUIsRUFBRSxLQUFLLFdBQVk7QUFFM0QsSUFBQVAsRUFBYUYsQ0FBUztBQUFBLEVBQzFCLENBQUMsR0FFRVM7QUFDWCxHQU1JUCxJQUFlLFNBQVVGLEdBQVc7QUFDcEMsRUFBQUEsRUFBVSxRQUFRLFNBQVVDLEdBQVU7QUFFbEMsUUFBSSxPQUFPLEtBQUtBLEVBQVMsVUFBVSxFQUFFLFNBQVMsR0FBRztBQUM3QyxVQUFJUyxJQUFzQixLQUFLLFVBQVVULEVBQVMsWUFBWSxNQUFNLENBQUM7QUFDckUsTUFBQXpGLEVBQUssUUFBUWtHLENBQW1CO0FBQUEsSUFDcEM7QUFBQSxFQUNKLENBQUM7QUFDTDsiLAogICJuYW1lcyI6IFsiUmVzb3VyY2UiLCAiZCIsICJkaWFnIiwgIlNFTVJFU0FUVFJTX1BST0NFU1NfUlVOVElNRV9OQU1FIiwgIlNFTVJFU0FUVFJTX1BST0NFU1NfUlVOVElNRV9ERVNDUklQVElPTiIsICJTRU1SRVNBVFRSU19QUk9DRVNTX1JVTlRJTUVfVkVSU0lPTiIsICJnZXRFbnYiLCAiU0VNUkVTQVRUUlNfU0VSVklDRV9OQU1FIiwgIk5vb3BEZXRlY3RvclN5bmMiLCAibm9vcERldGVjdG9yU3luYyIsICJOb29wRGV0ZWN0b3IiLCAibm9vcERldGVjdG9yIiwgImhvc3REZXRlY3RvciIsICJob3N0RGV0ZWN0b3JTeW5jIiwgIm9zRGV0ZWN0b3IiLCAib3NEZXRlY3RvclN5bmMiLCAicHJvY2Vzc0RldGVjdG9yIiwgInByb2Nlc3NEZXRlY3RvclN5bmMiLCAic2VydmljZUluc3RhbmNlSWREZXRlY3RvclN5bmMiLCAiX19hc3NpZ24iLCAidCIsICJzIiwgImkiLCAibiIsICJwIiwgIkJyb3dzZXJEZXRlY3RvclN5bmMiLCAiY29uZmlnIiwgIl9hIiwgIl9iIiwgIl9jIiwgIl9kIiwgImlzQnJvd3NlciIsICJicm93c2VyUmVzb3VyY2UiLCAiX2NvbmZpZyIsICJicm93c2VyRGV0ZWN0b3JTeW5jIiwgIkJyb3dzZXJEZXRlY3RvciIsICJicm93c2VyRGV0ZWN0b3IiLCAiX192YWx1ZXMiLCAibyIsICJtIiwgIl9fcmVhZCIsICJyIiwgImFyIiwgImUiLCAiZXJyb3IiLCAiRW52RGV0ZWN0b3JTeW5jIiwgImF0dHJpYnV0ZXMiLCAiZW52IiwgInJhd0F0dHJpYnV0ZXMiLCAic2VydmljZU5hbWUiLCAicGFyc2VkQXR0cmlidXRlcyIsICJyYXdFbnZBdHRyaWJ1dGVzIiwgImVfMSIsICJyYXdBdHRyaWJ1dGVzXzEiLCAicmF3QXR0cmlidXRlc18xXzEiLCAicmF3QXR0cmlidXRlIiwgImtleVZhbHVlUGFpciIsICJrZXkiLCAidmFsdWUiLCAiZV8xXzEiLCAibmFtZSIsICJzdHIiLCAiY2giLCAiZW52RGV0ZWN0b3JTeW5jIiwgIkVudkRldGVjdG9yIiwgImVudkRldGVjdG9yIiwgImlzUHJvbWlzZUxpa2UiLCAidmFsIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAicmVqZWN0ZWQiLCAicmVzdWx0IiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJmIiwgInkiLCAiZyIsICJ2ZXJiIiwgInYiLCAib3AiLCAiZGV0ZWN0UmVzb3VyY2VzIiwgInJlc291cmNlcyIsICJyZXNvdXJjZSIsICJsb2dSZXNvdXJjZXMiLCAiYWNjIiwgImRldGVjdFJlc291cmNlc1N5bmMiLCAicmVzb3VyY2VPclByb21pc2VfMSIsICJyZXNvdXJjZV8xIiwgImNyZWF0ZVByb21pc2UiLCAicmVzb2x2ZWRSZXNvdXJjZSIsICJtZXJnZWRSZXNvdXJjZXMiLCAicmVzb3VyY2VEZWJ1Z1N0cmluZyJdCn0K
|