@adobe/helix-rum-enhancer 2.31.0-beta.2 → 2.31.0-beta.4
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/CHANGELOG.md +25 -0
- package/modules/index.js +66 -92
- package/package.json +2 -2
- package/plugins/cwv.js +61 -0
- package/plugins/form.js +32 -0
- package/plugins/martech.js +54 -0
- package/{modules/martech.js → plugins/onetrust.js} +1 -37
- package/plugins/video.js +17 -0
- package/rollup.config.js +11 -4
- package/src/index.js +168 -222
- package/src/index.md5 +1 -1
- package/src/plugins/cwv.js +411 -0
- package/src/plugins/cwv.map.js +412 -0
- package/src/plugins/cwv.md5 +1 -0
- package/src/plugins/form.js +50 -0
- package/src/plugins/form.map.js +51 -0
- package/src/plugins/form.md5 +1 -0
- package/src/plugins/martech.js +76 -0
- package/src/plugins/martech.map.js +77 -0
- package/src/plugins/martech.md5 +1 -0
- package/src/plugins/onetrust.js +62 -0
- package/src/plugins/onetrust.map.js +63 -0
- package/src/plugins/onetrust.md5 +1 -0
- package/src/plugins/video.js +23 -0
- package/src/plugins/video.map.js +24 -0
- package/src/plugins/video.md5 +1 -0
- package/web-test-runner.config.js +10 -1
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
(function () {
|
|
13
|
+
'use strict';
|
|
14
|
+
|
|
15
|
+
(function (e) {
|
|
16
|
+
|
|
17
|
+
var n,
|
|
18
|
+
t,
|
|
19
|
+
r,
|
|
20
|
+
i,
|
|
21
|
+
o,
|
|
22
|
+
a = -1,
|
|
23
|
+
c = function (e) {
|
|
24
|
+
addEventListener("pageshow", function (n) {
|
|
25
|
+
n.persisted && (a = n.timeStamp, e(n));
|
|
26
|
+
}, true);
|
|
27
|
+
},
|
|
28
|
+
u = function () {
|
|
29
|
+
var e = self.performance && performance.getEntriesByType && performance.getEntriesByType("navigation")[0];
|
|
30
|
+
if (e && e.responseStart > 0 && e.responseStart < performance.now()) return e;
|
|
31
|
+
},
|
|
32
|
+
s = function () {
|
|
33
|
+
var e = u();
|
|
34
|
+
return e && e.activationStart || 0;
|
|
35
|
+
},
|
|
36
|
+
f = function (e, n) {
|
|
37
|
+
var t = u(),
|
|
38
|
+
r = "navigate";
|
|
39
|
+
a >= 0 ? r = "back-forward-cache" : t && (document.prerendering || s() > 0 ? r = "prerender" : document.wasDiscarded ? r = "restore" : t.type && (r = t.type.replace(/_/g, "-")));
|
|
40
|
+
return {
|
|
41
|
+
name: e,
|
|
42
|
+
value: undefined === n ? -1 : n,
|
|
43
|
+
rating: "good",
|
|
44
|
+
delta: 0,
|
|
45
|
+
entries: [],
|
|
46
|
+
id: "v4-".concat(Date.now(), "-").concat(Math.floor(8999999999999 * Math.random()) + 1e12),
|
|
47
|
+
navigationType: r
|
|
48
|
+
};
|
|
49
|
+
},
|
|
50
|
+
d = function (e, n, t) {
|
|
51
|
+
try {
|
|
52
|
+
if (PerformanceObserver.supportedEntryTypes.includes(e)) {
|
|
53
|
+
var r = new PerformanceObserver(function (e) {
|
|
54
|
+
Promise.resolve().then(function () {
|
|
55
|
+
n(e.getEntries());
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
return r.observe(Object.assign({
|
|
59
|
+
type: e,
|
|
60
|
+
buffered: !0
|
|
61
|
+
}, t || {})), r;
|
|
62
|
+
}
|
|
63
|
+
} catch (e) {}
|
|
64
|
+
},
|
|
65
|
+
l = function (e, n, t, r) {
|
|
66
|
+
var i, o;
|
|
67
|
+
return function (a) {
|
|
68
|
+
n.value >= 0 && (a || r) && ((o = n.value - (i || 0)) || undefined === i) && (i = n.value, n.delta = o, n.rating = function (e, n) {
|
|
69
|
+
return e > n[1] ? "poor" : e > n[0] ? "needs-improvement" : "good";
|
|
70
|
+
}(n.value, t), e(n));
|
|
71
|
+
};
|
|
72
|
+
},
|
|
73
|
+
p = function (e) {
|
|
74
|
+
requestAnimationFrame(function () {
|
|
75
|
+
return requestAnimationFrame(function () {
|
|
76
|
+
return e();
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
},
|
|
80
|
+
v = function (e) {
|
|
81
|
+
document.addEventListener("visibilitychange", function () {
|
|
82
|
+
"hidden" === document.visibilityState && e();
|
|
83
|
+
});
|
|
84
|
+
},
|
|
85
|
+
m = function (e) {
|
|
86
|
+
var n = false;
|
|
87
|
+
return function () {
|
|
88
|
+
n || (e(), n = true);
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
h = -1,
|
|
92
|
+
g = function () {
|
|
93
|
+
return "hidden" !== document.visibilityState || document.prerendering ? 1 / 0 : 0;
|
|
94
|
+
},
|
|
95
|
+
T = function (e) {
|
|
96
|
+
"hidden" === document.visibilityState && h > -1 && (h = "visibilitychange" === e.type ? e.timeStamp : 0, E());
|
|
97
|
+
},
|
|
98
|
+
y = function () {
|
|
99
|
+
addEventListener("visibilitychange", T, true), addEventListener("prerenderingchange", T, true);
|
|
100
|
+
},
|
|
101
|
+
E = function () {
|
|
102
|
+
removeEventListener("visibilitychange", T, true), removeEventListener("prerenderingchange", T, true);
|
|
103
|
+
},
|
|
104
|
+
C = function () {
|
|
105
|
+
return h < 0 && (h = g(), y(), c(function () {
|
|
106
|
+
setTimeout(function () {
|
|
107
|
+
h = g(), y();
|
|
108
|
+
}, 0);
|
|
109
|
+
})), {
|
|
110
|
+
get firstHiddenTime() {
|
|
111
|
+
return h;
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
},
|
|
115
|
+
L = function (e) {
|
|
116
|
+
document.prerendering ? addEventListener("prerenderingchange", function () {
|
|
117
|
+
return e();
|
|
118
|
+
}, true) : e();
|
|
119
|
+
},
|
|
120
|
+
S = [1800, 3e3],
|
|
121
|
+
b = function (e, n) {
|
|
122
|
+
n = n || {}, L(function () {
|
|
123
|
+
var t,
|
|
124
|
+
r = C(),
|
|
125
|
+
i = f("FCP"),
|
|
126
|
+
o = d("paint", function (e) {
|
|
127
|
+
e.forEach(function (e) {
|
|
128
|
+
"first-contentful-paint" === e.name && (o.disconnect(), e.startTime < r.firstHiddenTime && (i.value = Math.max(e.startTime - s(), 0), i.entries.push(e), t(!0)));
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
o && (t = l(e, i, S, n.reportAllChanges), c(function (r) {
|
|
132
|
+
i = f("FCP"), t = l(e, i, S, n.reportAllChanges), p(function () {
|
|
133
|
+
i.value = performance.now() - r.timeStamp, t(true);
|
|
134
|
+
});
|
|
135
|
+
}));
|
|
136
|
+
});
|
|
137
|
+
},
|
|
138
|
+
w = [.1, .25],
|
|
139
|
+
I = 0,
|
|
140
|
+
P = 1 / 0,
|
|
141
|
+
A = 0,
|
|
142
|
+
F = function (e) {
|
|
143
|
+
e.forEach(function (e) {
|
|
144
|
+
e.interactionId && (P = Math.min(P, e.interactionId), A = Math.max(A, e.interactionId), I = A ? (A - P) / 7 + 1 : 0);
|
|
145
|
+
});
|
|
146
|
+
},
|
|
147
|
+
M = function () {
|
|
148
|
+
return n ? I : performance.interactionCount || 0;
|
|
149
|
+
},
|
|
150
|
+
k = function () {
|
|
151
|
+
"interactionCount" in performance || n || (n = d("event", F, {
|
|
152
|
+
type: "event",
|
|
153
|
+
buffered: true,
|
|
154
|
+
durationThreshold: 0
|
|
155
|
+
}));
|
|
156
|
+
},
|
|
157
|
+
D = [],
|
|
158
|
+
B = new Map(),
|
|
159
|
+
R = 0,
|
|
160
|
+
x = function () {
|
|
161
|
+
var e = Math.min(D.length - 1, Math.floor((M() - R) / 50));
|
|
162
|
+
return D[e];
|
|
163
|
+
},
|
|
164
|
+
H = [],
|
|
165
|
+
N = function (e) {
|
|
166
|
+
if (H.forEach(function (n) {
|
|
167
|
+
return n(e);
|
|
168
|
+
}), e.interactionId || "first-input" === e.entryType) {
|
|
169
|
+
var n = D[D.length - 1],
|
|
170
|
+
t = B.get(e.interactionId);
|
|
171
|
+
if (t || D.length < 10 || e.duration > n.latency) {
|
|
172
|
+
if (t) e.duration > t.latency ? (t.entries = [e], t.latency = e.duration) : e.duration === t.latency && e.startTime === t.entries[0].startTime && t.entries.push(e);else {
|
|
173
|
+
var r = {
|
|
174
|
+
id: e.interactionId,
|
|
175
|
+
latency: e.duration,
|
|
176
|
+
entries: [e]
|
|
177
|
+
};
|
|
178
|
+
B.set(r.id, r), D.push(r);
|
|
179
|
+
}
|
|
180
|
+
D.sort(function (e, n) {
|
|
181
|
+
return n.latency - e.latency;
|
|
182
|
+
}), D.length > 10 && D.splice(10).forEach(function (e) {
|
|
183
|
+
return B.delete(e.id);
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
q = function (e) {
|
|
189
|
+
var n = self.requestIdleCallback || self.setTimeout,
|
|
190
|
+
t = -1;
|
|
191
|
+
return e = m(e), "hidden" === document.visibilityState ? e() : (t = n(e), v(e)), t;
|
|
192
|
+
},
|
|
193
|
+
O = [200, 500],
|
|
194
|
+
j = [2500, 4e3],
|
|
195
|
+
V = {},
|
|
196
|
+
_ = [800, 1800],
|
|
197
|
+
z = function e(n) {
|
|
198
|
+
document.prerendering ? L(function () {
|
|
199
|
+
return e(n);
|
|
200
|
+
}) : "complete" !== document.readyState ? addEventListener("load", function () {
|
|
201
|
+
return e(n);
|
|
202
|
+
}, true) : setTimeout(n, 0);
|
|
203
|
+
},
|
|
204
|
+
G = {
|
|
205
|
+
passive: true,
|
|
206
|
+
capture: true
|
|
207
|
+
},
|
|
208
|
+
J = new Date(),
|
|
209
|
+
K = function (e, n) {
|
|
210
|
+
t || (t = n, r = e, i = new Date(), W(removeEventListener), Q());
|
|
211
|
+
},
|
|
212
|
+
Q = function () {
|
|
213
|
+
if (r >= 0 && r < i - J) {
|
|
214
|
+
var e = {
|
|
215
|
+
entryType: "first-input",
|
|
216
|
+
name: t.type,
|
|
217
|
+
target: t.target,
|
|
218
|
+
cancelable: t.cancelable,
|
|
219
|
+
startTime: t.timeStamp,
|
|
220
|
+
processingStart: t.timeStamp + r
|
|
221
|
+
};
|
|
222
|
+
o.forEach(function (n) {
|
|
223
|
+
n(e);
|
|
224
|
+
}), o = [];
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
U = function (e) {
|
|
228
|
+
if (e.cancelable) {
|
|
229
|
+
var n = (e.timeStamp > 1e12 ? new Date() : performance.now()) - e.timeStamp;
|
|
230
|
+
"pointerdown" == e.type ? function (e, n) {
|
|
231
|
+
var t = function () {
|
|
232
|
+
K(e, n), i();
|
|
233
|
+
},
|
|
234
|
+
r = function () {
|
|
235
|
+
i();
|
|
236
|
+
},
|
|
237
|
+
i = function () {
|
|
238
|
+
removeEventListener("pointerup", t, G), removeEventListener("pointercancel", r, G);
|
|
239
|
+
};
|
|
240
|
+
addEventListener("pointerup", t, G), addEventListener("pointercancel", r, G);
|
|
241
|
+
}(n, e) : K(n, e);
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
W = function (e) {
|
|
245
|
+
["mousedown", "keydown", "touchstart", "pointerdown"].forEach(function (n) {
|
|
246
|
+
return e(n, U, G);
|
|
247
|
+
});
|
|
248
|
+
},
|
|
249
|
+
X = [100, 300];
|
|
250
|
+
return e.CLSThresholds = w, e.FCPThresholds = S, e.FIDThresholds = X, e.INPThresholds = O, e.LCPThresholds = j, e.TTFBThresholds = _, e.onCLS = function (e, n) {
|
|
251
|
+
n = n || {}, b(m(function () {
|
|
252
|
+
var t,
|
|
253
|
+
r = f("CLS", 0),
|
|
254
|
+
i = 0,
|
|
255
|
+
o = [],
|
|
256
|
+
a = function (e) {
|
|
257
|
+
e.forEach(function (e) {
|
|
258
|
+
if (!e.hadRecentInput) {
|
|
259
|
+
var n = o[0],
|
|
260
|
+
t = o[o.length - 1];
|
|
261
|
+
i && e.startTime - t.startTime < 1e3 && e.startTime - n.startTime < 5e3 ? (i += e.value, o.push(e)) : (i = e.value, o = [e]);
|
|
262
|
+
}
|
|
263
|
+
}), i > r.value && (r.value = i, r.entries = o, t());
|
|
264
|
+
},
|
|
265
|
+
u = d("layout-shift", a);
|
|
266
|
+
u && (t = l(e, r, w, n.reportAllChanges), v(function () {
|
|
267
|
+
a(u.takeRecords()), t(true);
|
|
268
|
+
}), c(function () {
|
|
269
|
+
i = 0, r = f("CLS", 0), t = l(e, r, w, n.reportAllChanges), p(function () {
|
|
270
|
+
return t();
|
|
271
|
+
});
|
|
272
|
+
}), setTimeout(t, 0));
|
|
273
|
+
}));
|
|
274
|
+
}, e.onFCP = b, e.onFID = function (e, n) {
|
|
275
|
+
n = n || {}, L(function () {
|
|
276
|
+
var i,
|
|
277
|
+
a = C(),
|
|
278
|
+
u = f("FID"),
|
|
279
|
+
s = function (e) {
|
|
280
|
+
e.startTime < a.firstHiddenTime && (u.value = e.processingStart - e.startTime, u.entries.push(e), i(true));
|
|
281
|
+
},
|
|
282
|
+
p = function (e) {
|
|
283
|
+
e.forEach(s);
|
|
284
|
+
},
|
|
285
|
+
h = d("first-input", p);
|
|
286
|
+
i = l(e, u, X, n.reportAllChanges), h && (v(m(function () {
|
|
287
|
+
p(h.takeRecords()), h.disconnect();
|
|
288
|
+
})), c(function () {
|
|
289
|
+
var a;
|
|
290
|
+
u = f("FID"), i = l(e, u, X, n.reportAllChanges), o = [], r = -1, t = null, W(addEventListener), a = s, o.push(a), Q();
|
|
291
|
+
}));
|
|
292
|
+
});
|
|
293
|
+
}, e.onINP = function (e, n) {
|
|
294
|
+
"PerformanceEventTiming" in self && "interactionId" in PerformanceEventTiming.prototype && (n = n || {}, L(function () {
|
|
295
|
+
var t;
|
|
296
|
+
k();
|
|
297
|
+
var r,
|
|
298
|
+
i = f("INP"),
|
|
299
|
+
o = function (e) {
|
|
300
|
+
q(function () {
|
|
301
|
+
e.forEach(N);
|
|
302
|
+
var n = x();
|
|
303
|
+
n && n.latency !== i.value && (i.value = n.latency, i.entries = n.entries, r());
|
|
304
|
+
});
|
|
305
|
+
},
|
|
306
|
+
a = d("event", o, {
|
|
307
|
+
durationThreshold: null !== (t = n.durationThreshold) && undefined !== t ? t : 40
|
|
308
|
+
});
|
|
309
|
+
r = l(e, i, O, n.reportAllChanges), a && (a.observe({
|
|
310
|
+
type: "first-input",
|
|
311
|
+
buffered: true
|
|
312
|
+
}), v(function () {
|
|
313
|
+
o(a.takeRecords()), r(true);
|
|
314
|
+
}), c(function () {
|
|
315
|
+
R = M(), D.length = 0, B.clear(), i = f("INP"), r = l(e, i, O, n.reportAllChanges);
|
|
316
|
+
}));
|
|
317
|
+
}));
|
|
318
|
+
}, e.onLCP = function (e, n) {
|
|
319
|
+
n = n || {}, L(function () {
|
|
320
|
+
var t,
|
|
321
|
+
r = C(),
|
|
322
|
+
i = f("LCP"),
|
|
323
|
+
o = function (e) {
|
|
324
|
+
n.reportAllChanges || (e = e.slice(-1)), e.forEach(function (e) {
|
|
325
|
+
e.startTime < r.firstHiddenTime && (i.value = Math.max(e.startTime - s(), 0), i.entries = [e], t());
|
|
326
|
+
});
|
|
327
|
+
},
|
|
328
|
+
a = d("largest-contentful-paint", o);
|
|
329
|
+
if (a) {
|
|
330
|
+
t = l(e, i, j, n.reportAllChanges);
|
|
331
|
+
var u = m(function () {
|
|
332
|
+
V[i.id] || (o(a.takeRecords()), a.disconnect(), V[i.id] = true, t(true));
|
|
333
|
+
});
|
|
334
|
+
["keydown", "click"].forEach(function (e) {
|
|
335
|
+
addEventListener(e, function () {
|
|
336
|
+
return q(u);
|
|
337
|
+
}, {
|
|
338
|
+
once: true,
|
|
339
|
+
capture: true
|
|
340
|
+
});
|
|
341
|
+
}), v(u), c(function (r) {
|
|
342
|
+
i = f("LCP"), t = l(e, i, j, n.reportAllChanges), p(function () {
|
|
343
|
+
i.value = performance.now() - r.timeStamp, V[i.id] = true, t(true);
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
}, e.onTTFB = function (e, n) {
|
|
349
|
+
n = n || {};
|
|
350
|
+
var t = f("TTFB"),
|
|
351
|
+
r = l(e, t, _, n.reportAllChanges);
|
|
352
|
+
z(function () {
|
|
353
|
+
var i = u();
|
|
354
|
+
i && (t.value = Math.max(i.responseStart - s(), 0), t.entries = [i], r(true), c(function () {
|
|
355
|
+
t = f("TTFB", 0), (r = l(e, t, _, n.reportAllChanges))(true);
|
|
356
|
+
}));
|
|
357
|
+
});
|
|
358
|
+
}, e;
|
|
359
|
+
})({});
|
|
360
|
+
|
|
361
|
+
function addCWVTracking({
|
|
362
|
+
sampleRUM,
|
|
363
|
+
sourceSelector,
|
|
364
|
+
targetSelector,
|
|
365
|
+
fflags
|
|
366
|
+
}) {
|
|
367
|
+
setTimeout(() => {
|
|
368
|
+
try {
|
|
369
|
+
const cwvScript = new URL('.rum/web-vitals/dist/web-vitals.iife.js', sampleRUM.baseURL).href;
|
|
370
|
+
if (document.querySelector(`script[src="${cwvScript}"]`)) {
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
const script = document.createElement('script');
|
|
374
|
+
script.src = cwvScript;
|
|
375
|
+
script.onload = () => {
|
|
376
|
+
const storeCWV = measurement => {
|
|
377
|
+
const data = {
|
|
378
|
+
cwv: {}
|
|
379
|
+
};
|
|
380
|
+
data.cwv[measurement.name] = measurement.value;
|
|
381
|
+
if (measurement.name === 'LCP' && measurement.entries.length > 0) {
|
|
382
|
+
const {
|
|
383
|
+
element
|
|
384
|
+
} = measurement.entries.pop();
|
|
385
|
+
data.target = targetSelector(element);
|
|
386
|
+
data.source = sourceSelector(element) || element && element.outerHTML.slice(0, 30);
|
|
387
|
+
}
|
|
388
|
+
sampleRUM('cwv', data);
|
|
389
|
+
};
|
|
390
|
+
const isEager = metric => ['CLS', 'LCP'].includes(metric);
|
|
391
|
+
['INP', 'TTFB', 'CLS', 'LCP'].forEach(metric => {
|
|
392
|
+
const metricFn = window.webVitals[`on${metric}`];
|
|
393
|
+
if (typeof metricFn === 'function') {
|
|
394
|
+
let opts = {};
|
|
395
|
+
fflags.enabled('eagercwv', () => {
|
|
396
|
+
opts = {
|
|
397
|
+
reportAllChanges: isEager(metric)
|
|
398
|
+
};
|
|
399
|
+
});
|
|
400
|
+
metricFn(storeCWV, opts);
|
|
401
|
+
}
|
|
402
|
+
});
|
|
403
|
+
};
|
|
404
|
+
document.head.appendChild(script);
|
|
405
|
+
} catch (error) {}
|
|
406
|
+
}, 2000);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
return addCWVTracking;
|
|
410
|
+
|
|
411
|
+
})();
|
|
412
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3d2Lm1hcC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vbm9kZV9tb2R1bGVzL3dlYi12aXRhbHMvZGlzdC93ZWItdml0YWxzLmlpZmUuanMiLCIuLi8uLi9wbHVnaW5zL2N3di5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgd2ViVml0YWxzPWZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO3ZhciBuLHQscixpLG8sYT0tMSxjPWZ1bmN0aW9uKGUpe2FkZEV2ZW50TGlzdGVuZXIoXCJwYWdlc2hvd1wiLChmdW5jdGlvbihuKXtuLnBlcnNpc3RlZCYmKGE9bi50aW1lU3RhbXAsZShuKSl9KSwhMCl9LHU9ZnVuY3Rpb24oKXt2YXIgZT1zZWxmLnBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlJiZwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKFwibmF2aWdhdGlvblwiKVswXTtpZihlJiZlLnJlc3BvbnNlU3RhcnQ+MCYmZS5yZXNwb25zZVN0YXJ0PHBlcmZvcm1hbmNlLm5vdygpKXJldHVybiBlfSxzPWZ1bmN0aW9uKCl7dmFyIGU9dSgpO3JldHVybiBlJiZlLmFjdGl2YXRpb25TdGFydHx8MH0sZj1mdW5jdGlvbihlLG4pe3ZhciB0PXUoKSxyPVwibmF2aWdhdGVcIjthPj0wP3I9XCJiYWNrLWZvcndhcmQtY2FjaGVcIjp0JiYoZG9jdW1lbnQucHJlcmVuZGVyaW5nfHxzKCk+MD9yPVwicHJlcmVuZGVyXCI6ZG9jdW1lbnQud2FzRGlzY2FyZGVkP3I9XCJyZXN0b3JlXCI6dC50eXBlJiYocj10LnR5cGUucmVwbGFjZSgvXy9nLFwiLVwiKSkpO3JldHVybntuYW1lOmUsdmFsdWU6dm9pZCAwPT09bj8tMTpuLHJhdGluZzpcImdvb2RcIixkZWx0YTowLGVudHJpZXM6W10saWQ6XCJ2NC1cIi5jb25jYXQoRGF0ZS5ub3coKSxcIi1cIikuY29uY2F0KE1hdGguZmxvb3IoODk5OTk5OTk5OTk5OSpNYXRoLnJhbmRvbSgpKSsxZTEyKSxuYXZpZ2F0aW9uVHlwZTpyfX0sZD1mdW5jdGlvbihlLG4sdCl7dHJ5e2lmKFBlcmZvcm1hbmNlT2JzZXJ2ZXIuc3VwcG9ydGVkRW50cnlUeXBlcy5pbmNsdWRlcyhlKSl7dmFyIHI9bmV3IFBlcmZvcm1hbmNlT2JzZXJ2ZXIoKGZ1bmN0aW9uKGUpe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKGZ1bmN0aW9uKCl7bihlLmdldEVudHJpZXMoKSl9KSl9KSk7cmV0dXJuIHIub2JzZXJ2ZShPYmplY3QuYXNzaWduKHt0eXBlOmUsYnVmZmVyZWQ6ITB9LHR8fHt9KSkscn19Y2F0Y2goZSl7fX0sbD1mdW5jdGlvbihlLG4sdCxyKXt2YXIgaSxvO3JldHVybiBmdW5jdGlvbihhKXtuLnZhbHVlPj0wJiYoYXx8cikmJigobz1uLnZhbHVlLShpfHwwKSl8fHZvaWQgMD09PWkpJiYoaT1uLnZhbHVlLG4uZGVsdGE9byxuLnJhdGluZz1mdW5jdGlvbihlLG4pe3JldHVybiBlPm5bMV0/XCJwb29yXCI6ZT5uWzBdP1wibmVlZHMtaW1wcm92ZW1lbnRcIjpcImdvb2RcIn0obi52YWx1ZSx0KSxlKG4pKX19LHA9ZnVuY3Rpb24oZSl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe3JldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7cmV0dXJuIGUoKX0pKX0pKX0sdj1mdW5jdGlvbihlKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLChmdW5jdGlvbigpe1wiaGlkZGVuXCI9PT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUmJmUoKX0pKX0sbT1mdW5jdGlvbihlKXt2YXIgbj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtufHwoZSgpLG49ITApfX0saD0tMSxnPWZ1bmN0aW9uKCl7cmV0dXJuXCJoaWRkZW5cIiE9PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZXx8ZG9jdW1lbnQucHJlcmVuZGVyaW5nPzEvMDowfSxUPWZ1bmN0aW9uKGUpe1wiaGlkZGVuXCI9PT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUmJmg+LTEmJihoPVwidmlzaWJpbGl0eWNoYW5nZVwiPT09ZS50eXBlP2UudGltZVN0YW1wOjAsRSgpKX0seT1mdW5jdGlvbigpe2FkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsVCwhMCksYWRkRXZlbnRMaXN0ZW5lcihcInByZXJlbmRlcmluZ2NoYW5nZVwiLFQsITApfSxFPWZ1bmN0aW9uKCl7cmVtb3ZlRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIixULCEwKSxyZW1vdmVFdmVudExpc3RlbmVyKFwicHJlcmVuZGVyaW5nY2hhbmdlXCIsVCwhMCl9LEM9ZnVuY3Rpb24oKXtyZXR1cm4gaDwwJiYoaD1nKCkseSgpLGMoKGZ1bmN0aW9uKCl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtoPWcoKSx5KCl9KSwwKX0pKSkse2dldCBmaXJzdEhpZGRlblRpbWUoKXtyZXR1cm4gaH19fSxMPWZ1bmN0aW9uKGUpe2RvY3VtZW50LnByZXJlbmRlcmluZz9hZGRFdmVudExpc3RlbmVyKFwicHJlcmVuZGVyaW5nY2hhbmdlXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGUoKX0pLCEwKTplKCl9LFM9WzE4MDAsM2UzXSxiPWZ1bmN0aW9uKGUsbil7bj1ufHx7fSxMKChmdW5jdGlvbigpe3ZhciB0LHI9QygpLGk9ZihcIkZDUFwiKSxvPWQoXCJwYWludFwiLChmdW5jdGlvbihlKXtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe1wiZmlyc3QtY29udGVudGZ1bC1wYWludFwiPT09ZS5uYW1lJiYoby5kaXNjb25uZWN0KCksZS5zdGFydFRpbWU8ci5maXJzdEhpZGRlblRpbWUmJihpLnZhbHVlPU1hdGgubWF4KGUuc3RhcnRUaW1lLXMoKSwwKSxpLmVudHJpZXMucHVzaChlKSx0KCEwKSkpfSkpfSkpO28mJih0PWwoZSxpLFMsbi5yZXBvcnRBbGxDaGFuZ2VzKSxjKChmdW5jdGlvbihyKXtpPWYoXCJGQ1BcIiksdD1sKGUsaSxTLG4ucmVwb3J0QWxsQ2hhbmdlcykscCgoZnVuY3Rpb24oKXtpLnZhbHVlPXBlcmZvcm1hbmNlLm5vdygpLXIudGltZVN0YW1wLHQoITApfSkpfSkpKX0pKX0sdz1bLjEsLjI1XSxJPTAsUD0xLzAsQT0wLEY9ZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmludGVyYWN0aW9uSWQmJihQPU1hdGgubWluKFAsZS5pbnRlcmFjdGlvbklkKSxBPU1hdGgubWF4KEEsZS5pbnRlcmFjdGlvbklkKSxJPUE/KEEtUCkvNysxOjApfSkpfSxNPWZ1bmN0aW9uKCl7cmV0dXJuIG4/STpwZXJmb3JtYW5jZS5pbnRlcmFjdGlvbkNvdW50fHwwfSxrPWZ1bmN0aW9uKCl7XCJpbnRlcmFjdGlvbkNvdW50XCJpbiBwZXJmb3JtYW5jZXx8bnx8KG49ZChcImV2ZW50XCIsRix7dHlwZTpcImV2ZW50XCIsYnVmZmVyZWQ6ITAsZHVyYXRpb25UaHJlc2hvbGQ6MH0pKX0sRD1bXSxCPW5ldyBNYXAsUj0wLHg9ZnVuY3Rpb24oKXt2YXIgZT1NYXRoLm1pbihELmxlbmd0aC0xLE1hdGguZmxvb3IoKE0oKS1SKS81MCkpO3JldHVybiBEW2VdfSxIPVtdLE49ZnVuY3Rpb24oZSl7aWYoSC5mb3JFYWNoKChmdW5jdGlvbihuKXtyZXR1cm4gbihlKX0pKSxlLmludGVyYWN0aW9uSWR8fFwiZmlyc3QtaW5wdXRcIj09PWUuZW50cnlUeXBlKXt2YXIgbj1EW0QubGVuZ3RoLTFdLHQ9Qi5nZXQoZS5pbnRlcmFjdGlvbklkKTtpZih0fHxELmxlbmd0aDwxMHx8ZS5kdXJhdGlvbj5uLmxhdGVuY3kpe2lmKHQpZS5kdXJhdGlvbj50LmxhdGVuY3k/KHQuZW50cmllcz1bZV0sdC5sYXRlbmN5PWUuZHVyYXRpb24pOmUuZHVyYXRpb249PT10LmxhdGVuY3kmJmUuc3RhcnRUaW1lPT09dC5lbnRyaWVzWzBdLnN0YXJ0VGltZSYmdC5lbnRyaWVzLnB1c2goZSk7ZWxzZXt2YXIgcj17aWQ6ZS5pbnRlcmFjdGlvbklkLGxhdGVuY3k6ZS5kdXJhdGlvbixlbnRyaWVzOltlXX07Qi5zZXQoci5pZCxyKSxELnB1c2gocil9RC5zb3J0KChmdW5jdGlvbihlLG4pe3JldHVybiBuLmxhdGVuY3ktZS5sYXRlbmN5fSkpLEQubGVuZ3RoPjEwJiZELnNwbGljZSgxMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIEIuZGVsZXRlKGUuaWQpfSkpfX19LHE9ZnVuY3Rpb24oZSl7dmFyIG49c2VsZi5yZXF1ZXN0SWRsZUNhbGxiYWNrfHxzZWxmLnNldFRpbWVvdXQsdD0tMTtyZXR1cm4gZT1tKGUpLFwiaGlkZGVuXCI9PT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGU/ZSgpOih0PW4oZSksdihlKSksdH0sTz1bMjAwLDUwMF0saj1bMjUwMCw0ZTNdLFY9e30sXz1bODAwLDE4MDBdLHo9ZnVuY3Rpb24gZShuKXtkb2N1bWVudC5wcmVyZW5kZXJpbmc/TCgoZnVuY3Rpb24oKXtyZXR1cm4gZShuKX0pKTpcImNvbXBsZXRlXCIhPT1kb2N1bWVudC5yZWFkeVN0YXRlP2FkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGUobil9KSwhMCk6c2V0VGltZW91dChuLDApfSxHPXtwYXNzaXZlOiEwLGNhcHR1cmU6ITB9LEo9bmV3IERhdGUsSz1mdW5jdGlvbihlLG4pe3R8fCh0PW4scj1lLGk9bmV3IERhdGUsVyhyZW1vdmVFdmVudExpc3RlbmVyKSxRKCkpfSxRPWZ1bmN0aW9uKCl7aWYocj49MCYmcjxpLUope3ZhciBlPXtlbnRyeVR5cGU6XCJmaXJzdC1pbnB1dFwiLG5hbWU6dC50eXBlLHRhcmdldDp0LnRhcmdldCxjYW5jZWxhYmxlOnQuY2FuY2VsYWJsZSxzdGFydFRpbWU6dC50aW1lU3RhbXAscHJvY2Vzc2luZ1N0YXJ0OnQudGltZVN0YW1wK3J9O28uZm9yRWFjaCgoZnVuY3Rpb24obil7bihlKX0pKSxvPVtdfX0sVT1mdW5jdGlvbihlKXtpZihlLmNhbmNlbGFibGUpe3ZhciBuPShlLnRpbWVTdGFtcD4xZTEyP25ldyBEYXRlOnBlcmZvcm1hbmNlLm5vdygpKS1lLnRpbWVTdGFtcDtcInBvaW50ZXJkb3duXCI9PWUudHlwZT9mdW5jdGlvbihlLG4pe3ZhciB0PWZ1bmN0aW9uKCl7SyhlLG4pLGkoKX0scj1mdW5jdGlvbigpe2koKX0saT1mdW5jdGlvbigpe3JlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIix0LEcpLHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIscixHKX07YWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLHQsRyksYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJjYW5jZWxcIixyLEcpfShuLGUpOksobixlKX19LFc9ZnVuY3Rpb24oZSl7W1wibW91c2Vkb3duXCIsXCJrZXlkb3duXCIsXCJ0b3VjaHN0YXJ0XCIsXCJwb2ludGVyZG93blwiXS5mb3JFYWNoKChmdW5jdGlvbihuKXtyZXR1cm4gZShuLFUsRyl9KSl9LFg9WzEwMCwzMDBdO3JldHVybiBlLkNMU1RocmVzaG9sZHM9dyxlLkZDUFRocmVzaG9sZHM9UyxlLkZJRFRocmVzaG9sZHM9WCxlLklOUFRocmVzaG9sZHM9TyxlLkxDUFRocmVzaG9sZHM9aixlLlRURkJUaHJlc2hvbGRzPV8sZS5vbkNMUz1mdW5jdGlvbihlLG4pe249bnx8e30sYihtKChmdW5jdGlvbigpe3ZhciB0LHI9ZihcIkNMU1wiLDApLGk9MCxvPVtdLGE9ZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZighZS5oYWRSZWNlbnRJbnB1dCl7dmFyIG49b1swXSx0PW9bby5sZW5ndGgtMV07aSYmZS5zdGFydFRpbWUtdC5zdGFydFRpbWU8MWUzJiZlLnN0YXJ0VGltZS1uLnN0YXJ0VGltZTw1ZTM/KGkrPWUudmFsdWUsby5wdXNoKGUpKTooaT1lLnZhbHVlLG89W2VdKX19KSksaT5yLnZhbHVlJiYoci52YWx1ZT1pLHIuZW50cmllcz1vLHQoKSl9LHU9ZChcImxheW91dC1zaGlmdFwiLGEpO3UmJih0PWwoZSxyLHcsbi5yZXBvcnRBbGxDaGFuZ2VzKSx2KChmdW5jdGlvbigpe2EodS50YWtlUmVjb3JkcygpKSx0KCEwKX0pKSxjKChmdW5jdGlvbigpe2k9MCxyPWYoXCJDTFNcIiwwKSx0PWwoZSxyLHcsbi5yZXBvcnRBbGxDaGFuZ2VzKSxwKChmdW5jdGlvbigpe3JldHVybiB0KCl9KSl9KSksc2V0VGltZW91dCh0LDApKX0pKSl9LGUub25GQ1A9YixlLm9uRklEPWZ1bmN0aW9uKGUsbil7bj1ufHx7fSxMKChmdW5jdGlvbigpe3ZhciBpLGE9QygpLHU9ZihcIkZJRFwiKSxzPWZ1bmN0aW9uKGUpe2Uuc3RhcnRUaW1lPGEuZmlyc3RIaWRkZW5UaW1lJiYodS52YWx1ZT1lLnByb2Nlc3NpbmdTdGFydC1lLnN0YXJ0VGltZSx1LmVudHJpZXMucHVzaChlKSxpKCEwKSl9LHA9ZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKHMpfSxoPWQoXCJmaXJzdC1pbnB1dFwiLHApO2k9bChlLHUsWCxuLnJlcG9ydEFsbENoYW5nZXMpLGgmJih2KG0oKGZ1bmN0aW9uKCl7cChoLnRha2VSZWNvcmRzKCkpLGguZGlzY29ubmVjdCgpfSkpKSxjKChmdW5jdGlvbigpe3ZhciBhO3U9ZihcIkZJRFwiKSxpPWwoZSx1LFgsbi5yZXBvcnRBbGxDaGFuZ2VzKSxvPVtdLHI9LTEsdD1udWxsLFcoYWRkRXZlbnRMaXN0ZW5lciksYT1zLG8ucHVzaChhKSxRKCl9KSkpfSkpfSxlLm9uSU5QPWZ1bmN0aW9uKGUsbil7XCJQZXJmb3JtYW5jZUV2ZW50VGltaW5nXCJpbiBzZWxmJiZcImludGVyYWN0aW9uSWRcImluIFBlcmZvcm1hbmNlRXZlbnRUaW1pbmcucHJvdG90eXBlJiYobj1ufHx7fSxMKChmdW5jdGlvbigpe3ZhciB0O2soKTt2YXIgcixpPWYoXCJJTlBcIiksbz1mdW5jdGlvbihlKXtxKChmdW5jdGlvbigpe2UuZm9yRWFjaChOKTt2YXIgbj14KCk7biYmbi5sYXRlbmN5IT09aS52YWx1ZSYmKGkudmFsdWU9bi5sYXRlbmN5LGkuZW50cmllcz1uLmVudHJpZXMscigpKX0pKX0sYT1kKFwiZXZlbnRcIixvLHtkdXJhdGlvblRocmVzaG9sZDpudWxsIT09KHQ9bi5kdXJhdGlvblRocmVzaG9sZCkmJnZvaWQgMCE9PXQ/dDo0MH0pO3I9bChlLGksTyxuLnJlcG9ydEFsbENoYW5nZXMpLGEmJihhLm9ic2VydmUoe3R5cGU6XCJmaXJzdC1pbnB1dFwiLGJ1ZmZlcmVkOiEwfSksdigoZnVuY3Rpb24oKXtvKGEudGFrZVJlY29yZHMoKSkscighMCl9KSksYygoZnVuY3Rpb24oKXtSPU0oKSxELmxlbmd0aD0wLEIuY2xlYXIoKSxpPWYoXCJJTlBcIikscj1sKGUsaSxPLG4ucmVwb3J0QWxsQ2hhbmdlcyl9KSkpfSkpKX0sZS5vbkxDUD1mdW5jdGlvbihlLG4pe249bnx8e30sTCgoZnVuY3Rpb24oKXt2YXIgdCxyPUMoKSxpPWYoXCJMQ1BcIiksbz1mdW5jdGlvbihlKXtuLnJlcG9ydEFsbENoYW5nZXN8fChlPWUuc2xpY2UoLTEpKSxlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Uuc3RhcnRUaW1lPHIuZmlyc3RIaWRkZW5UaW1lJiYoaS52YWx1ZT1NYXRoLm1heChlLnN0YXJ0VGltZS1zKCksMCksaS5lbnRyaWVzPVtlXSx0KCkpfSkpfSxhPWQoXCJsYXJnZXN0LWNvbnRlbnRmdWwtcGFpbnRcIixvKTtpZihhKXt0PWwoZSxpLGosbi5yZXBvcnRBbGxDaGFuZ2VzKTt2YXIgdT1tKChmdW5jdGlvbigpe1ZbaS5pZF18fChvKGEudGFrZVJlY29yZHMoKSksYS5kaXNjb25uZWN0KCksVltpLmlkXT0hMCx0KCEwKSl9KSk7W1wia2V5ZG93blwiLFwiY2xpY2tcIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7YWRkRXZlbnRMaXN0ZW5lcihlLChmdW5jdGlvbigpe3JldHVybiBxKHUpfSkse29uY2U6ITAsY2FwdHVyZTohMH0pfSkpLHYodSksYygoZnVuY3Rpb24ocil7aT1mKFwiTENQXCIpLHQ9bChlLGksaixuLnJlcG9ydEFsbENoYW5nZXMpLHAoKGZ1bmN0aW9uKCl7aS52YWx1ZT1wZXJmb3JtYW5jZS5ub3coKS1yLnRpbWVTdGFtcCxWW2kuaWRdPSEwLHQoITApfSkpfSkpfX0pKX0sZS5vblRURkI9ZnVuY3Rpb24oZSxuKXtuPW58fHt9O3ZhciB0PWYoXCJUVEZCXCIpLHI9bChlLHQsXyxuLnJlcG9ydEFsbENoYW5nZXMpO3ooKGZ1bmN0aW9uKCl7dmFyIGk9dSgpO2kmJih0LnZhbHVlPU1hdGgubWF4KGkucmVzcG9uc2VTdGFydC1zKCksMCksdC5lbnRyaWVzPVtpXSxyKCEwKSxjKChmdW5jdGlvbigpe3Q9ZihcIlRURkJcIiwwKSwocj1sKGUsdCxfLG4ucmVwb3J0QWxsQ2hhbmdlcykpKCEwKX0pKSl9KSl9LGV9KHt9KTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyNCBBZG9iZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5XG4gKiBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyXG4gKiB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlNcbiAqIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZVxuICogZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMsIGltcG9ydC9uby1yZWxhdGl2ZS1wYWNrYWdlcywgbm8tdW51c2VkLXZhcnNcbmltcG9ydCAqIGFzIHdlYlZpdGFscyBmcm9tICcuLi9ub2RlX21vZHVsZXMvd2ViLXZpdGFscy9kaXN0L3dlYi12aXRhbHMuaWlmZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZENXVlRyYWNraW5nKHtcbiAgc2FtcGxlUlVNLCBzb3VyY2VTZWxlY3RvciwgdGFyZ2V0U2VsZWN0b3IsIGZmbGFncyxcbn0pIHtcbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGN3dlNjcmlwdCA9IG5ldyBVUkwoJy5ydW0vd2ViLXZpdGFscy9kaXN0L3dlYi12aXRhbHMuaWlmZS5qcycsIHNhbXBsZVJVTS5iYXNlVVJMKS5ocmVmO1xuICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtzcmM9XCIke2N3dlNjcmlwdH1cIl1gKSkge1xuICAgICAgICAvLyB3ZWIgdml0YWxzIHNjcmlwdCBoYXMgYmVlbiBsb2FkZWQgYWxyZWFkeVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIHNjcmlwdC5zcmMgPSBjd3ZTY3JpcHQ7XG4gICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBzdG9yZUNXViA9IChtZWFzdXJlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB7IGN3djoge30gfTtcbiAgICAgICAgICBkYXRhLmN3dlttZWFzdXJlbWVudC5uYW1lXSA9IG1lYXN1cmVtZW50LnZhbHVlO1xuICAgICAgICAgIGlmIChtZWFzdXJlbWVudC5uYW1lID09PSAnTENQJyAmJiBtZWFzdXJlbWVudC5lbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZWxlbWVudCB9ID0gbWVhc3VyZW1lbnQuZW50cmllcy5wb3AoKTtcbiAgICAgICAgICAgIGRhdGEudGFyZ2V0ID0gdGFyZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICAgICAgICBkYXRhLnNvdXJjZSA9IHNvdXJjZVNlbGVjdG9yKGVsZW1lbnQpIHx8IChlbGVtZW50ICYmIGVsZW1lbnQub3V0ZXJIVE1MLnNsaWNlKDAsIDMwKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNhbXBsZVJVTSgnY3d2JywgZGF0YSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaXNFYWdlciA9IChtZXRyaWMpID0+IFsnQ0xTJywgJ0xDUCddLmluY2x1ZGVzKG1ldHJpYyk7XG5cbiAgICAgICAgLy8gV2hlbiBsb2FkaW5nIGB3ZWItdml0YWxzYCB1c2luZyBhIGNsYXNzaWMgc2NyaXB0LCBhbGwgdGhlIHB1YmxpY1xuICAgICAgICAvLyBtZXRob2RzIGNhbiBiZSBmb3VuZCBvbiB0aGUgYHdlYlZpdGFsc2AgZ2xvYmFsIG5hbWVzcGFjZS5cbiAgICAgICAgWydJTlAnLCAnVFRGQicsICdDTFMnLCAnTENQJ10uZm9yRWFjaCgobWV0cmljKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWV0cmljRm4gPSB3aW5kb3cud2ViVml0YWxzW2BvbiR7bWV0cmljfWBdO1xuICAgICAgICAgIGlmICh0eXBlb2YgbWV0cmljRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGxldCBvcHRzID0ge307XG4gICAgICAgICAgICBmZmxhZ3MuZW5hYmxlZCgnZWFnZXJjd3YnLCAoKSA9PiB7XG4gICAgICAgICAgICAgIG9wdHMgPSB7IHJlcG9ydEFsbENoYW5nZXM6IGlzRWFnZXIobWV0cmljKSB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBtZXRyaWNGbihzdG9yZUNXViwgb3B0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAvKiBjOCBpZ25vcmUgbmV4dCAzICovXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfVxuICB9LCAyMDAwKTsgLy8gd2FpdCBmb3IgZGVsYXllZFxufVxuIl0sIm5hbWVzIjpbImUiLCJuIiwidCIsInIiLCJpIiwibyIsImEiLCJjIiwiYWRkRXZlbnRMaXN0ZW5lciIsInBlcnNpc3RlZCIsInRpbWVTdGFtcCIsInUiLCJzZWxmIiwicGVyZm9ybWFuY2UiLCJnZXRFbnRyaWVzQnlUeXBlIiwicmVzcG9uc2VTdGFydCIsIm5vdyIsInMiLCJhY3RpdmF0aW9uU3RhcnQiLCJmIiwiZG9jdW1lbnQiLCJwcmVyZW5kZXJpbmciLCJ3YXNEaXNjYXJkZWQiLCJ0eXBlIiwicmVwbGFjZSIsIm5hbWUiLCJ2YWx1ZSIsInJhdGluZyIsImRlbHRhIiwiZW50cmllcyIsImlkIiwiY29uY2F0IiwiRGF0ZSIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsIm5hdmlnYXRpb25UeXBlIiwiZCIsIlBlcmZvcm1hbmNlT2JzZXJ2ZXIiLCJzdXBwb3J0ZWRFbnRyeVR5cGVzIiwiaW5jbHVkZXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJnZXRFbnRyaWVzIiwib2JzZXJ2ZSIsIk9iamVjdCIsImFzc2lnbiIsImJ1ZmZlcmVkIiwibCIsInAiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ2IiwidmlzaWJpbGl0eVN0YXRlIiwibSIsImgiLCJnIiwiVCIsIkUiLCJ5IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIkMiLCJzZXRUaW1lb3V0IiwiZmlyc3RIaWRkZW5UaW1lIiwiTCIsIlMiLCJiIiwiZm9yRWFjaCIsImRpc2Nvbm5lY3QiLCJzdGFydFRpbWUiLCJtYXgiLCJwdXNoIiwicmVwb3J0QWxsQ2hhbmdlcyIsInciLCJJIiwiUCIsIkEiLCJGIiwiaW50ZXJhY3Rpb25JZCIsIm1pbiIsIk0iLCJpbnRlcmFjdGlvbkNvdW50IiwiayIsImR1cmF0aW9uVGhyZXNob2xkIiwiRCIsIkIiLCJNYXAiLCJSIiwieCIsImxlbmd0aCIsIkgiLCJOIiwiZW50cnlUeXBlIiwiZ2V0IiwiZHVyYXRpb24iLCJsYXRlbmN5Iiwic2V0Iiwic29ydCIsInNwbGljZSIsImRlbGV0ZSIsInEiLCJyZXF1ZXN0SWRsZUNhbGxiYWNrIiwiTyIsImoiLCJWIiwiXyIsInoiLCJyZWFkeVN0YXRlIiwiRyIsInBhc3NpdmUiLCJjYXB0dXJlIiwiSiIsIksiLCJXIiwiUSIsInRhcmdldCIsImNhbmNlbGFibGUiLCJwcm9jZXNzaW5nU3RhcnQiLCJVIiwiWCIsIkNMU1RocmVzaG9sZHMiLCJGQ1BUaHJlc2hvbGRzIiwiRklEVGhyZXNob2xkcyIsIklOUFRocmVzaG9sZHMiLCJMQ1BUaHJlc2hvbGRzIiwiVFRGQlRocmVzaG9sZHMiLCJvbkNMUyIsImhhZFJlY2VudElucHV0IiwidGFrZVJlY29yZHMiLCJvbkZDUCIsIm9uRklEIiwib25JTlAiLCJQZXJmb3JtYW5jZUV2ZW50VGltaW5nIiwicHJvdG90eXBlIiwiY2xlYXIiLCJvbkxDUCIsInNsaWNlIiwib25jZSIsIm9uVFRGQiIsImFkZENXVlRyYWNraW5nIiwic2FtcGxlUlVNIiwic291cmNlU2VsZWN0b3IiLCJ0YXJnZXRTZWxlY3RvciIsImZmbGFncyIsImN3dlNjcmlwdCIsIlVSTCIsImJhc2VVUkwiLCJocmVmIiwicXVlcnlTZWxlY3RvciIsInNjcmlwdCIsImNyZWF0ZUVsZW1lbnQiLCJzcmMiLCJvbmxvYWQiLCJzdG9yZUNXViIsIm1lYXN1cmVtZW50IiwiZGF0YSIsImN3diIsImVsZW1lbnQiLCJwb3AiLCJzb3VyY2UiLCJvdXRlckhUTUwiLCJpc0VhZ2VyIiwibWV0cmljIiwibWV0cmljRm4iLCJ3aW5kb3ciLCJ3ZWJWaXRhbHMiLCJvcHRzIiwiZW5hYmxlZCIsImhlYWQiLCJhcHBlbmRDaGlsZCIsImVycm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztHQUFjLFVBQVNBLENBQUMsRUFBQzs7RUFBYyxFQUFBLElBQUlDLENBQUM7TUFBQ0MsQ0FBQztNQUFDQyxDQUFDO01BQUNDLENBQUM7TUFBQ0MsQ0FBQztNQUFDQyxDQUFDLEdBQUMsRUFBRTtFQUFDQyxJQUFBQSxDQUFDLEdBQUMsVUFBU1AsQ0FBQyxFQUFDO0VBQUNRLE1BQUFBLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxVQUFTUCxDQUFDLEVBQUM7RUFBQ0EsUUFBQUEsQ0FBQyxDQUFDUSxTQUFTLEtBQUdILENBQUMsR0FBQ0wsQ0FBQyxDQUFDUyxTQUFTLEVBQUNWLENBQUMsQ0FBQ0MsQ0FBQyxDQUFDLENBQUM7U0FBQyxFQUFFLElBQUUsQ0FBQztPQUFDO01BQUNVLENBQUMsR0FBQyxZQUFVO0VBQUMsTUFBQSxJQUFJWCxDQUFDLEdBQUNZLElBQUksQ0FBQ0MsV0FBVyxJQUFFQSxXQUFXLENBQUNDLGdCQUFnQixJQUFFRCxXQUFXLENBQUNDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUFDLE1BQUEsSUFBR2QsQ0FBQyxJQUFFQSxDQUFDLENBQUNlLGFBQWEsR0FBQyxDQUFDLElBQUVmLENBQUMsQ0FBQ2UsYUFBYSxHQUFDRixXQUFXLENBQUNHLEdBQUcsRUFBRSxFQUFDLE9BQU9oQixDQUFDO09BQUM7TUFBQ2lCLENBQUMsR0FBQyxZQUFVO0VBQUMsTUFBQSxJQUFJakIsQ0FBQyxHQUFDVyxDQUFDLEVBQUU7RUFBQyxNQUFBLE9BQU9YLENBQUMsSUFBRUEsQ0FBQyxDQUFDa0IsZUFBZSxJQUFFLENBQUM7T0FBQztFQUFDQyxJQUFBQSxDQUFDLEdBQUMsVUFBU25CLENBQUMsRUFBQ0MsQ0FBQyxFQUFDO0VBQUMsTUFBQSxJQUFJQyxDQUFDLEdBQUNTLENBQUMsRUFBRTtFQUFDUixRQUFBQSxDQUFDLEdBQUMsVUFBVTtRQUFDRyxDQUFDLElBQUUsQ0FBQyxHQUFDSCxDQUFDLEdBQUMsb0JBQW9CLEdBQUNELENBQUMsS0FBR2tCLFFBQVEsQ0FBQ0MsWUFBWSxJQUFFSixDQUFDLEVBQUUsR0FBQyxDQUFDLEdBQUNkLENBQUMsR0FBQyxXQUFXLEdBQUNpQixRQUFRLENBQUNFLFlBQVksR0FBQ25CLENBQUMsR0FBQyxTQUFTLEdBQUNELENBQUMsQ0FBQ3FCLElBQUksS0FBR3BCLENBQUMsR0FBQ0QsQ0FBQyxDQUFDcUIsSUFBSSxDQUFDQyxPQUFPLENBQUMsSUFBSSxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFBQyxPQUFNO0VBQUNDLFFBQUFBLElBQUksRUFBQ3pCLENBQUM7VUFBQzBCLEtBQUssRUFBQyxTQUFNLEtBQUd6QixDQUFDLEdBQUMsRUFBRSxHQUFDQSxDQUFDO0VBQUMwQixRQUFBQSxNQUFNLEVBQUMsTUFBTTtFQUFDQyxRQUFBQSxLQUFLLEVBQUMsQ0FBQztFQUFDQyxRQUFBQSxPQUFPLEVBQUMsRUFBRTtFQUFDQyxRQUFBQSxFQUFFLEVBQUMsS0FBSyxDQUFDQyxNQUFNLENBQUNDLElBQUksQ0FBQ2hCLEdBQUcsRUFBRSxFQUFDLEdBQUcsQ0FBQyxDQUFDZSxNQUFNLENBQUNFLElBQUksQ0FBQ0MsS0FBSyxDQUFDLGFBQWEsR0FBQ0QsSUFBSSxDQUFDRSxNQUFNLEVBQUUsQ0FBQyxHQUFDLElBQUksQ0FBQztFQUFDQyxRQUFBQSxjQUFjLEVBQUNqQztTQUFFO09BQUM7TUFBQ2tDLENBQUMsR0FBQyxVQUFTckMsQ0FBQyxFQUFDQyxDQUFDLEVBQUNDLENBQUMsRUFBQztRQUFDLElBQUc7VUFBQyxJQUFHb0MsbUJBQW1CLENBQUNDLG1CQUFtQixDQUFDQyxRQUFRLENBQUN4QyxDQUFDLENBQUMsRUFBQztFQUFDLFVBQUEsSUFBSUcsQ0FBQyxHQUFDLElBQUltQyxtQkFBbUIsQ0FBRSxVQUFTdEMsQ0FBQyxFQUFDO0VBQUN5QyxZQUFBQSxPQUFPLENBQUNDLE9BQU8sRUFBRSxDQUFDQyxJQUFJLENBQUUsWUFBVTtFQUFDMUMsY0FBQUEsQ0FBQyxDQUFDRCxDQUFDLENBQUM0QyxVQUFVLEVBQUUsQ0FBQztFQUFBLGFBQUUsQ0FBQztFQUFBLFdBQUUsQ0FBQztFQUFDLFVBQUEsT0FBT3pDLENBQUMsQ0FBQzBDLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDQyxNQUFNLENBQUM7RUFBQ3hCLFlBQUFBLElBQUksRUFBQ3ZCLENBQUM7RUFBQ2dELFlBQUFBLFFBQVEsRUFBQyxDQUFDO2FBQUUsRUFBQzlDLENBQUMsSUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDQyxDQUFDO0VBQUE7U0FBRSxDQUFBLE9BQU1ILENBQUMsRUFBQztPQUFHO01BQUNpRCxDQUFDLEdBQUMsVUFBU2pELENBQUMsRUFBQ0MsQ0FBQyxFQUFDQyxDQUFDLEVBQUNDLENBQUMsRUFBQztRQUFDLElBQUlDLENBQUMsRUFBQ0MsQ0FBQztRQUFDLE9BQU8sVUFBU0MsQ0FBQyxFQUFDO1VBQUNMLENBQUMsQ0FBQ3lCLEtBQUssSUFBRSxDQUFDLEtBQUdwQixDQUFDLElBQUVILENBQUMsQ0FBQyxLQUFHLENBQUNFLENBQUMsR0FBQ0osQ0FBQyxDQUFDeUIsS0FBSyxJQUFFdEIsQ0FBQyxJQUFFLENBQUMsQ0FBQyxLQUFHLFNBQU0sS0FBR0EsQ0FBQyxDQUFDLEtBQUdBLENBQUMsR0FBQ0gsQ0FBQyxDQUFDeUIsS0FBSyxFQUFDekIsQ0FBQyxDQUFDMkIsS0FBSyxHQUFDdkIsQ0FBQyxFQUFDSixDQUFDLENBQUMwQixNQUFNLEdBQUMsVUFBUzNCLENBQUMsRUFBQ0MsQ0FBQyxFQUFDO0VBQUMsVUFBQSxPQUFPRCxDQUFDLEdBQUNDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxNQUFNLEdBQUNELENBQUMsR0FBQ0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLG1CQUFtQixHQUFDLE1BQU07RUFBQSxTQUFDLENBQUNBLENBQUMsQ0FBQ3lCLEtBQUssRUFBQ3hCLENBQUMsQ0FBQyxFQUFDRixDQUFDLENBQUNDLENBQUMsQ0FBQyxDQUFDO1NBQUM7T0FBQztFQUFDaUQsSUFBQUEsQ0FBQyxHQUFDLFVBQVNsRCxDQUFDLEVBQUM7RUFBQ21ELE1BQUFBLHFCQUFxQixDQUFFLFlBQVU7VUFBQyxPQUFPQSxxQkFBcUIsQ0FBRSxZQUFVO1lBQUMsT0FBT25ELENBQUMsRUFBRTtFQUFBLFNBQUUsQ0FBQztFQUFBLE9BQUUsQ0FBQztPQUFDO0VBQUNvRCxJQUFBQSxDQUFDLEdBQUMsVUFBU3BELENBQUMsRUFBQztFQUFDb0IsTUFBQUEsUUFBUSxDQUFDWixnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxZQUFVO0VBQUMsUUFBQSxRQUFRLEtBQUdZLFFBQVEsQ0FBQ2lDLGVBQWUsSUFBRXJELENBQUMsRUFBRTtFQUFBLE9BQUUsQ0FBQztPQUFDO0VBQUNzRCxJQUFBQSxDQUFDLEdBQUMsVUFBU3RELENBQUMsRUFBQztRQUFDLElBQUlDLENBQUMsR0FBQyxLQUFFO0VBQUMsTUFBQSxPQUFPLFlBQVU7VUFBQ0EsQ0FBQyxLQUFHRCxDQUFDLEVBQUUsRUFBQ0MsQ0FBQyxHQUFDLElBQUUsQ0FBQztTQUFDO09BQUM7TUFBQ3NELENBQUMsR0FBQyxFQUFFO01BQUNDLENBQUMsR0FBQyxZQUFVO0VBQUMsTUFBQSxPQUFNLFFBQVEsS0FBR3BDLFFBQVEsQ0FBQ2lDLGVBQWUsSUFBRWpDLFFBQVEsQ0FBQ0MsWUFBWSxHQUFDLENBQUMsR0FBQyxDQUFDLEdBQUMsQ0FBQztPQUFDO0VBQUNvQyxJQUFBQSxDQUFDLEdBQUMsVUFBU3pELENBQUMsRUFBQztRQUFDLFFBQVEsS0FBR29CLFFBQVEsQ0FBQ2lDLGVBQWUsSUFBRUUsQ0FBQyxHQUFDLEVBQUUsS0FBR0EsQ0FBQyxHQUFDLGtCQUFrQixLQUFHdkQsQ0FBQyxDQUFDdUIsSUFBSSxHQUFDdkIsQ0FBQyxDQUFDVSxTQUFTLEdBQUMsQ0FBQyxFQUFDZ0QsQ0FBQyxFQUFFLENBQUM7T0FBQztNQUFDQyxDQUFDLEdBQUMsWUFBVTtFQUFDbkQsTUFBQUEsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUNpRCxDQUFDLEVBQUMsSUFBRSxDQUFDLEVBQUNqRCxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBQ2lELENBQUMsRUFBQyxJQUFFLENBQUM7T0FBQztNQUFDQyxDQUFDLEdBQUMsWUFBVTtFQUFDRSxNQUFBQSxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBQ0gsQ0FBQyxFQUFDLElBQUUsQ0FBQyxFQUFDRyxtQkFBbUIsQ0FBQyxvQkFBb0IsRUFBQ0gsQ0FBQyxFQUFDLElBQUUsQ0FBQztPQUFDO01BQUNJLENBQUMsR0FBQyxZQUFVO0VBQUMsTUFBQSxPQUFPTixDQUFDLEdBQUMsQ0FBQyxLQUFHQSxDQUFDLEdBQUNDLENBQUMsRUFBRSxFQUFDRyxDQUFDLEVBQUUsRUFBQ3BELENBQUMsQ0FBRSxZQUFVO0VBQUN1RCxRQUFBQSxVQUFVLENBQUUsWUFBVTtFQUFDUCxVQUFBQSxDQUFDLEdBQUNDLENBQUMsRUFBRSxFQUFDRyxDQUFDLEVBQUU7V0FBQyxFQUFFLENBQUMsQ0FBQztTQUFFLENBQUMsQ0FBQyxFQUFDO1VBQUMsSUFBSUksZUFBZUEsR0FBRTtFQUFDLFVBQUEsT0FBT1IsQ0FBQztFQUFBO1NBQUU7T0FBQztFQUFDUyxJQUFBQSxDQUFDLEdBQUMsVUFBU2hFLENBQUMsRUFBQztFQUFDb0IsTUFBQUEsUUFBUSxDQUFDQyxZQUFZLEdBQUNiLGdCQUFnQixDQUFDLG9CQUFvQixFQUFFLFlBQVU7VUFBQyxPQUFPUixDQUFDLEVBQUU7RUFBQSxPQUFDLEVBQUUsSUFBRSxDQUFDLEdBQUNBLENBQUMsRUFBRTtPQUFDO0VBQUNpRSxJQUFBQSxDQUFDLEdBQUMsQ0FBQyxJQUFJLEVBQUMsR0FBRyxDQUFDO0VBQUNDLElBQUFBLENBQUMsR0FBQyxVQUFTbEUsQ0FBQyxFQUFDQyxDQUFDLEVBQUM7UUFBQ0EsQ0FBQyxHQUFDQSxDQUFDLElBQUUsRUFBRSxFQUFDK0QsQ0FBQyxDQUFFLFlBQVU7RUFBQyxRQUFBLElBQUk5RCxDQUFDO1lBQUNDLENBQUMsR0FBQzBELENBQUMsRUFBRTtFQUFDekQsVUFBQUEsQ0FBQyxHQUFDZSxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQUNkLFVBQUFBLENBQUMsR0FBQ2dDLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBU3JDLENBQUMsRUFBQztFQUFDQSxZQUFBQSxDQUFDLENBQUNtRSxPQUFPLENBQUUsVUFBU25FLENBQUMsRUFBQztnQkFBQyx3QkFBd0IsS0FBR0EsQ0FBQyxDQUFDeUIsSUFBSSxLQUFHcEIsQ0FBQyxDQUFDK0QsVUFBVSxFQUFFLEVBQUNwRSxDQUFDLENBQUNxRSxTQUFTLEdBQUNsRSxDQUFDLENBQUM0RCxlQUFlLEtBQUczRCxDQUFDLENBQUNzQixLQUFLLEdBQUNPLElBQUksQ0FBQ3FDLEdBQUcsQ0FBQ3RFLENBQUMsQ0FBQ3FFLFNBQVMsR0FBQ3BELENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDYixDQUFDLENBQUN5QixPQUFPLENBQUMwQyxJQUFJLENBQUN2RSxDQUFDLENBQUMsRUFBQ0UsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUFBLGFBQUUsQ0FBQztFQUFBLFdBQUUsQ0FBQztVQUFDRyxDQUFDLEtBQUdILENBQUMsR0FBQytDLENBQUMsQ0FBQ2pELENBQUMsRUFBQ0ksQ0FBQyxFQUFDNkQsQ0FBQyxFQUFDaEUsQ0FBQyxDQUFDdUUsZ0JBQWdCLENBQUMsRUFBQ2pFLENBQUMsQ0FBRSxVQUFTSixDQUFDLEVBQUM7WUFBQ0MsQ0FBQyxHQUFDZSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUNqQixDQUFDLEdBQUMrQyxDQUFDLENBQUNqRCxDQUFDLEVBQUNJLENBQUMsRUFBQzZELENBQUMsRUFBQ2hFLENBQUMsQ0FBQ3VFLGdCQUFnQixDQUFDLEVBQUN0QixDQUFDLENBQUUsWUFBVTtFQUFDOUMsWUFBQUEsQ0FBQyxDQUFDc0IsS0FBSyxHQUFDYixXQUFXLENBQUNHLEdBQUcsRUFBRSxHQUFDYixDQUFDLENBQUNPLFNBQVMsRUFBQ1IsQ0FBQyxDQUFDLElBQUUsQ0FBQztFQUFBLFdBQUUsQ0FBQztFQUFBLFNBQUUsQ0FBQyxDQUFDO0VBQUEsT0FBRSxDQUFDO09BQUM7RUFBQ3VFLElBQUFBLENBQUMsR0FBQyxDQUFDLEVBQUUsRUFBQyxHQUFHLENBQUM7RUFBQ0MsSUFBQUEsQ0FBQyxHQUFDLENBQUM7TUFBQ0MsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDO0VBQUNDLElBQUFBLENBQUMsR0FBQyxDQUFDO0VBQUNDLElBQUFBLENBQUMsR0FBQyxVQUFTN0UsQ0FBQyxFQUFDO0VBQUNBLE1BQUFBLENBQUMsQ0FBQ21FLE9BQU8sQ0FBRSxVQUFTbkUsQ0FBQyxFQUFDO0VBQUNBLFFBQUFBLENBQUMsQ0FBQzhFLGFBQWEsS0FBR0gsQ0FBQyxHQUFDMUMsSUFBSSxDQUFDOEMsR0FBRyxDQUFDSixDQUFDLEVBQUMzRSxDQUFDLENBQUM4RSxhQUFhLENBQUMsRUFBQ0YsQ0FBQyxHQUFDM0MsSUFBSSxDQUFDcUMsR0FBRyxDQUFDTSxDQUFDLEVBQUM1RSxDQUFDLENBQUM4RSxhQUFhLENBQUMsRUFBQ0osQ0FBQyxHQUFDRSxDQUFDLEdBQUMsQ0FBQ0EsQ0FBQyxHQUFDRCxDQUFDLElBQUUsQ0FBQyxHQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7RUFBQSxPQUFFLENBQUM7T0FBQztNQUFDSyxDQUFDLEdBQUMsWUFBVTtRQUFDLE9BQU8vRSxDQUFDLEdBQUN5RSxDQUFDLEdBQUM3RCxXQUFXLENBQUNvRSxnQkFBZ0IsSUFBRSxDQUFDO09BQUM7TUFBQ0MsQ0FBQyxHQUFDLFlBQVU7RUFBQyxNQUFBLGtCQUFrQixJQUFHckUsV0FBVyxJQUFFWixDQUFDLEtBQUdBLENBQUMsR0FBQ29DLENBQUMsQ0FBQyxPQUFPLEVBQUN3QyxDQUFDLEVBQUM7RUFBQ3RELFFBQUFBLElBQUksRUFBQyxPQUFPO1VBQUN5QixRQUFRLEVBQUMsSUFBRTtFQUFDbUMsUUFBQUEsaUJBQWlCLEVBQUM7RUFBQyxPQUFDLENBQUMsQ0FBQztPQUFDO0VBQUNDLElBQUFBLENBQUMsR0FBQyxFQUFFO0VBQUNDLElBQUFBLENBQUMsR0FBQyxJQUFJQyxHQUFHLEVBQUE7RUFBQ0MsSUFBQUEsQ0FBQyxHQUFDLENBQUM7TUFBQ0MsQ0FBQyxHQUFDLFlBQVU7UUFBQyxJQUFJeEYsQ0FBQyxHQUFDaUMsSUFBSSxDQUFDOEMsR0FBRyxDQUFDSyxDQUFDLENBQUNLLE1BQU0sR0FBQyxDQUFDLEVBQUN4RCxJQUFJLENBQUNDLEtBQUssQ0FBQyxDQUFDOEMsQ0FBQyxFQUFFLEdBQUNPLENBQUMsSUFBRSxFQUFFLENBQUMsQ0FBQztRQUFDLE9BQU9ILENBQUMsQ0FBQ3BGLENBQUMsQ0FBQztPQUFDO0VBQUMwRixJQUFBQSxDQUFDLEdBQUMsRUFBRTtFQUFDQyxJQUFBQSxDQUFDLEdBQUMsVUFBUzNGLENBQUMsRUFBQztFQUFDLE1BQUEsSUFBRzBGLENBQUMsQ0FBQ3ZCLE9BQU8sQ0FBRSxVQUFTbEUsQ0FBQyxFQUFDO1VBQUMsT0FBT0EsQ0FBQyxDQUFDRCxDQUFDLENBQUM7U0FBRSxDQUFDLEVBQUNBLENBQUMsQ0FBQzhFLGFBQWEsSUFBRSxhQUFhLEtBQUc5RSxDQUFDLENBQUM0RixTQUFTLEVBQUM7VUFBQyxJQUFJM0YsQ0FBQyxHQUFDbUYsQ0FBQyxDQUFDQSxDQUFDLENBQUNLLE1BQU0sR0FBQyxDQUFDLENBQUM7WUFBQ3ZGLENBQUMsR0FBQ21GLENBQUMsQ0FBQ1EsR0FBRyxDQUFDN0YsQ0FBQyxDQUFDOEUsYUFBYSxDQUFDO0VBQUMsUUFBQSxJQUFHNUUsQ0FBQyxJQUFFa0YsQ0FBQyxDQUFDSyxNQUFNLEdBQUMsRUFBRSxJQUFFekYsQ0FBQyxDQUFDOEYsUUFBUSxHQUFDN0YsQ0FBQyxDQUFDOEYsT0FBTyxFQUFDO1lBQUMsSUFBRzdGLENBQUMsRUFBQ0YsQ0FBQyxDQUFDOEYsUUFBUSxHQUFDNUYsQ0FBQyxDQUFDNkYsT0FBTyxJQUFFN0YsQ0FBQyxDQUFDMkIsT0FBTyxHQUFDLENBQUM3QixDQUFDLENBQUMsRUFBQ0UsQ0FBQyxDQUFDNkYsT0FBTyxHQUFDL0YsQ0FBQyxDQUFDOEYsUUFBUSxJQUFFOUYsQ0FBQyxDQUFDOEYsUUFBUSxLQUFHNUYsQ0FBQyxDQUFDNkYsT0FBTyxJQUFFL0YsQ0FBQyxDQUFDcUUsU0FBUyxLQUFHbkUsQ0FBQyxDQUFDMkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDd0MsU0FBUyxJQUFFbkUsQ0FBQyxDQUFDMkIsT0FBTyxDQUFDMEMsSUFBSSxDQUFDdkUsQ0FBQyxDQUFDLENBQUMsS0FBSTtFQUFDLFlBQUEsSUFBSUcsQ0FBQyxHQUFDO2dCQUFDMkIsRUFBRSxFQUFDOUIsQ0FBQyxDQUFDOEUsYUFBYTtnQkFBQ2lCLE9BQU8sRUFBQy9GLENBQUMsQ0FBQzhGLFFBQVE7Z0JBQUNqRSxPQUFPLEVBQUMsQ0FBQzdCLENBQUM7ZUFBRTtFQUFDcUYsWUFBQUEsQ0FBQyxDQUFDVyxHQUFHLENBQUM3RixDQUFDLENBQUMyQixFQUFFLEVBQUMzQixDQUFDLENBQUMsRUFBQ2lGLENBQUMsQ0FBQ2IsSUFBSSxDQUFDcEUsQ0FBQyxDQUFDO0VBQUE7RUFBQ2lGLFVBQUFBLENBQUMsQ0FBQ2EsSUFBSSxDQUFFLFVBQVNqRyxDQUFDLEVBQUNDLENBQUMsRUFBQztFQUFDLFlBQUEsT0FBT0EsQ0FBQyxDQUFDOEYsT0FBTyxHQUFDL0YsQ0FBQyxDQUFDK0YsT0FBTztFQUFBLFdBQUUsQ0FBQyxFQUFDWCxDQUFDLENBQUNLLE1BQU0sR0FBQyxFQUFFLElBQUVMLENBQUMsQ0FBQ2MsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDL0IsT0FBTyxDQUFFLFVBQVNuRSxDQUFDLEVBQUM7RUFBQyxZQUFBLE9BQU9xRixDQUFDLENBQUNjLE1BQU0sQ0FBQ25HLENBQUMsQ0FBQzhCLEVBQUUsQ0FBQztFQUFBLFdBQUUsQ0FBQztFQUFBO0VBQUM7T0FBRTtFQUFDc0UsSUFBQUEsQ0FBQyxHQUFDLFVBQVNwRyxDQUFDLEVBQUM7UUFBQyxJQUFJQyxDQUFDLEdBQUNXLElBQUksQ0FBQ3lGLG1CQUFtQixJQUFFekYsSUFBSSxDQUFDa0QsVUFBVTtVQUFDNUQsQ0FBQyxHQUFDLEVBQUU7RUFBQyxNQUFBLE9BQU9GLENBQUMsR0FBQ3NELENBQUMsQ0FBQ3RELENBQUMsQ0FBQyxFQUFDLFFBQVEsS0FBR29CLFFBQVEsQ0FBQ2lDLGVBQWUsR0FBQ3JELENBQUMsRUFBRSxJQUFFRSxDQUFDLEdBQUNELENBQUMsQ0FBQ0QsQ0FBQyxDQUFDLEVBQUNvRCxDQUFDLENBQUNwRCxDQUFDLENBQUMsQ0FBQyxFQUFDRSxDQUFDO09BQUM7RUFBQ29HLElBQUFBLENBQUMsR0FBQyxDQUFDLEdBQUcsRUFBQyxHQUFHLENBQUM7RUFBQ0MsSUFBQUEsQ0FBQyxHQUFDLENBQUMsSUFBSSxFQUFDLEdBQUcsQ0FBQztNQUFDQyxDQUFDLEdBQUMsRUFBRTtFQUFDQyxJQUFBQSxDQUFDLEdBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxDQUFDO0VBQUNDLElBQUFBLENBQUMsR0FBQyxTQUFTMUcsQ0FBQ0EsQ0FBQ0MsQ0FBQyxFQUFDO0VBQUNtQixNQUFBQSxRQUFRLENBQUNDLFlBQVksR0FBQzJDLENBQUMsQ0FBRSxZQUFVO1VBQUMsT0FBT2hFLENBQUMsQ0FBQ0MsQ0FBQyxDQUFDO0VBQUEsT0FBRSxDQUFDLEdBQUMsVUFBVSxLQUFHbUIsUUFBUSxDQUFDdUYsVUFBVSxHQUFDbkcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFlBQVU7VUFBQyxPQUFPUixDQUFDLENBQUNDLENBQUMsQ0FBQztTQUFDLEVBQUUsSUFBRSxDQUFDLEdBQUM2RCxVQUFVLENBQUM3RCxDQUFDLEVBQUMsQ0FBQyxDQUFDO09BQUM7RUFBQzJHLElBQUFBLENBQUMsR0FBQztRQUFDQyxPQUFPLEVBQUMsSUFBRTtFQUFDQyxNQUFBQSxPQUFPLEVBQUM7T0FBRztFQUFDQyxJQUFBQSxDQUFDLEdBQUMsSUFBSS9FLElBQUksRUFBQTtFQUFDZ0YsSUFBQUEsQ0FBQyxHQUFDLFVBQVNoSCxDQUFDLEVBQUNDLENBQUMsRUFBQztRQUFDQyxDQUFDLEtBQUdBLENBQUMsR0FBQ0QsQ0FBQyxFQUFDRSxDQUFDLEdBQUNILENBQUMsRUFBQ0ksQ0FBQyxHQUFDLElBQUk0QixJQUFJLEVBQUEsRUFBQ2lGLENBQUMsQ0FBQ3JELG1CQUFtQixDQUFDLEVBQUNzRCxDQUFDLEVBQUUsQ0FBQztPQUFDO01BQUNBLENBQUMsR0FBQyxZQUFVO1FBQUMsSUFBRy9HLENBQUMsSUFBRSxDQUFDLElBQUVBLENBQUMsR0FBQ0MsQ0FBQyxHQUFDMkcsQ0FBQyxFQUFDO0VBQUMsUUFBQSxJQUFJL0csQ0FBQyxHQUFDO0VBQUM0RixVQUFBQSxTQUFTLEVBQUMsYUFBYTtZQUFDbkUsSUFBSSxFQUFDdkIsQ0FBQyxDQUFDcUIsSUFBSTtZQUFDNEYsTUFBTSxFQUFDakgsQ0FBQyxDQUFDaUgsTUFBTTtZQUFDQyxVQUFVLEVBQUNsSCxDQUFDLENBQUNrSCxVQUFVO1lBQUMvQyxTQUFTLEVBQUNuRSxDQUFDLENBQUNRLFNBQVM7RUFBQzJHLFVBQUFBLGVBQWUsRUFBQ25ILENBQUMsQ0FBQ1EsU0FBUyxHQUFDUDtXQUFFO0VBQUNFLFFBQUFBLENBQUMsQ0FBQzhELE9BQU8sQ0FBRSxVQUFTbEUsQ0FBQyxFQUFDO1lBQUNBLENBQUMsQ0FBQ0QsQ0FBQyxDQUFDO0VBQUEsU0FBRSxDQUFDLEVBQUNLLENBQUMsR0FBQyxFQUFFO0VBQUE7T0FBRTtFQUFDaUgsSUFBQUEsQ0FBQyxHQUFDLFVBQVN0SCxDQUFDLEVBQUM7UUFBQyxJQUFHQSxDQUFDLENBQUNvSCxVQUFVLEVBQUM7VUFBQyxJQUFJbkgsQ0FBQyxHQUFDLENBQUNELENBQUMsQ0FBQ1UsU0FBUyxHQUFDLElBQUksR0FBQyxJQUFJc0IsSUFBSSxFQUFBLEdBQUNuQixXQUFXLENBQUNHLEdBQUcsRUFBRSxJQUFFaEIsQ0FBQyxDQUFDVSxTQUFTO1VBQUMsYUFBYSxJQUFFVixDQUFDLENBQUN1QixJQUFJLEdBQUMsVUFBU3ZCLENBQUMsRUFBQ0MsQ0FBQyxFQUFDO0VBQUMsVUFBQSxJQUFJQyxDQUFDLEdBQUMsWUFBVTtnQkFBQzhHLENBQUMsQ0FBQ2hILENBQUMsRUFBQ0MsQ0FBQyxDQUFDLEVBQUNHLENBQUMsRUFBRTtlQUFDO2NBQUNELENBQUMsR0FBQyxZQUFVO0VBQUNDLGNBQUFBLENBQUMsRUFBRTtlQUFDO2NBQUNBLENBQUMsR0FBQyxZQUFVO0VBQUN3RCxjQUFBQSxtQkFBbUIsQ0FBQyxXQUFXLEVBQUMxRCxDQUFDLEVBQUMwRyxDQUFDLENBQUMsRUFBQ2hELG1CQUFtQixDQUFDLGVBQWUsRUFBQ3pELENBQUMsRUFBQ3lHLENBQUMsQ0FBQztlQUFDO0VBQUNwRyxVQUFBQSxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUNOLENBQUMsRUFBQzBHLENBQUMsQ0FBQyxFQUFDcEcsZ0JBQWdCLENBQUMsZUFBZSxFQUFDTCxDQUFDLEVBQUN5RyxDQUFDLENBQUM7V0FBQyxDQUFDM0csQ0FBQyxFQUFDRCxDQUFDLENBQUMsR0FBQ2dILENBQUMsQ0FBQy9HLENBQUMsRUFBQ0QsQ0FBQyxDQUFDO0VBQUE7T0FBRTtFQUFDaUgsSUFBQUEsQ0FBQyxHQUFDLFVBQVNqSCxDQUFDLEVBQUM7RUFBQyxNQUFBLENBQUMsV0FBVyxFQUFDLFNBQVMsRUFBQyxZQUFZLEVBQUMsYUFBYSxDQUFDLENBQUNtRSxPQUFPLENBQUUsVUFBU2xFLENBQUMsRUFBQztFQUFDLFFBQUEsT0FBT0QsQ0FBQyxDQUFDQyxDQUFDLEVBQUNxSCxDQUFDLEVBQUNWLENBQUMsQ0FBQztFQUFBLE9BQUUsQ0FBQztPQUFDO0VBQUNXLElBQUFBLENBQUMsR0FBQyxDQUFDLEdBQUcsRUFBQyxHQUFHLENBQUM7SUFBQyxPQUFPdkgsQ0FBQyxDQUFDd0gsYUFBYSxHQUFDL0MsQ0FBQyxFQUFDekUsQ0FBQyxDQUFDeUgsYUFBYSxHQUFDeEQsQ0FBQyxFQUFDakUsQ0FBQyxDQUFDMEgsYUFBYSxHQUFDSCxDQUFDLEVBQUN2SCxDQUFDLENBQUMySCxhQUFhLEdBQUNyQixDQUFDLEVBQUN0RyxDQUFDLENBQUM0SCxhQUFhLEdBQUNyQixDQUFDLEVBQUN2RyxDQUFDLENBQUM2SCxjQUFjLEdBQUNwQixDQUFDLEVBQUN6RyxDQUFDLENBQUM4SCxLQUFLLEdBQUMsVUFBUzlILENBQUMsRUFBQ0MsQ0FBQyxFQUFDO01BQUNBLENBQUMsR0FBQ0EsQ0FBQyxJQUFFLEVBQUUsRUFBQ2lFLENBQUMsQ0FBQ1osQ0FBQyxDQUFFLFlBQVU7RUFBQyxNQUFBLElBQUlwRCxDQUFDO0VBQUNDLFFBQUFBLENBQUMsR0FBQ2dCLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO0VBQUNmLFFBQUFBLENBQUMsR0FBQyxDQUFDO0VBQUNDLFFBQUFBLENBQUMsR0FBQyxFQUFFO0VBQUNDLFFBQUFBLENBQUMsR0FBQyxVQUFTTixDQUFDLEVBQUM7RUFBQ0EsVUFBQUEsQ0FBQyxDQUFDbUUsT0FBTyxDQUFFLFVBQVNuRSxDQUFDLEVBQUM7RUFBQyxZQUFBLElBQUcsQ0FBQ0EsQ0FBQyxDQUFDK0gsY0FBYyxFQUFDO0VBQUMsY0FBQSxJQUFJOUgsQ0FBQyxHQUFDSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2tCQUFDSCxDQUFDLEdBQUNHLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDb0YsTUFBTSxHQUFDLENBQUMsQ0FBQztnQkFBQ3JGLENBQUMsSUFBRUosQ0FBQyxDQUFDcUUsU0FBUyxHQUFDbkUsQ0FBQyxDQUFDbUUsU0FBUyxHQUFDLEdBQUcsSUFBRXJFLENBQUMsQ0FBQ3FFLFNBQVMsR0FBQ3BFLENBQUMsQ0FBQ29FLFNBQVMsR0FBQyxHQUFHLElBQUVqRSxDQUFDLElBQUVKLENBQUMsQ0FBQzBCLEtBQUssRUFBQ3JCLENBQUMsQ0FBQ2tFLElBQUksQ0FBQ3ZFLENBQUMsQ0FBQyxLQUFHSSxDQUFDLEdBQUNKLENBQUMsQ0FBQzBCLEtBQUssRUFBQ3JCLENBQUMsR0FBQyxDQUFDTCxDQUFDLENBQUMsQ0FBQztFQUFBO2FBQUcsQ0FBQyxFQUFDSSxDQUFDLEdBQUNELENBQUMsQ0FBQ3VCLEtBQUssS0FBR3ZCLENBQUMsQ0FBQ3VCLEtBQUssR0FBQ3RCLENBQUMsRUFBQ0QsQ0FBQyxDQUFDMEIsT0FBTyxHQUFDeEIsQ0FBQyxFQUFDSCxDQUFDLEVBQUUsQ0FBQztXQUFDO0VBQUNTLFFBQUFBLENBQUMsR0FBQzBCLENBQUMsQ0FBQyxjQUFjLEVBQUMvQixDQUFDLENBQUM7RUFBQ0ssTUFBQUEsQ0FBQyxLQUFHVCxDQUFDLEdBQUMrQyxDQUFDLENBQUNqRCxDQUFDLEVBQUNHLENBQUMsRUFBQ3NFLENBQUMsRUFBQ3hFLENBQUMsQ0FBQ3VFLGdCQUFnQixDQUFDLEVBQUNwQixDQUFDLENBQUUsWUFBVTtFQUFDOUMsUUFBQUEsQ0FBQyxDQUFDSyxDQUFDLENBQUNxSCxXQUFXLEVBQUUsQ0FBQyxFQUFDOUgsQ0FBQyxDQUFDLElBQUUsQ0FBQztFQUFBLE9BQUUsQ0FBQyxFQUFDSyxDQUFDLENBQUUsWUFBVTtFQUFDSCxRQUFBQSxDQUFDLEdBQUMsQ0FBQyxFQUFDRCxDQUFDLEdBQUNnQixDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxFQUFDakIsQ0FBQyxHQUFDK0MsQ0FBQyxDQUFDakQsQ0FBQyxFQUFDRyxDQUFDLEVBQUNzRSxDQUFDLEVBQUN4RSxDQUFDLENBQUN1RSxnQkFBZ0IsQ0FBQyxFQUFDdEIsQ0FBQyxDQUFFLFlBQVU7WUFBQyxPQUFPaEQsQ0FBQyxFQUFFO0VBQUEsU0FBRSxDQUFDO1NBQUUsQ0FBQyxFQUFDNEQsVUFBVSxDQUFDNUQsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO0VBQUEsS0FBRSxDQUFDLENBQUM7RUFBQSxHQUFDLEVBQUNGLENBQUMsQ0FBQ2lJLEtBQUssR0FBQy9ELENBQUMsRUFBQ2xFLENBQUMsQ0FBQ2tJLEtBQUssR0FBQyxVQUFTbEksQ0FBQyxFQUFDQyxDQUFDLEVBQUM7TUFBQ0EsQ0FBQyxHQUFDQSxDQUFDLElBQUUsRUFBRSxFQUFDK0QsQ0FBQyxDQUFFLFlBQVU7RUFBQyxNQUFBLElBQUk1RCxDQUFDO1VBQUNFLENBQUMsR0FBQ3VELENBQUMsRUFBRTtFQUFDbEQsUUFBQUEsQ0FBQyxHQUFDUSxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQUNGLFFBQUFBLENBQUMsR0FBQyxVQUFTakIsQ0FBQyxFQUFDO0VBQUNBLFVBQUFBLENBQUMsQ0FBQ3FFLFNBQVMsR0FBQy9ELENBQUMsQ0FBQ3lELGVBQWUsS0FBR3BELENBQUMsQ0FBQ2UsS0FBSyxHQUFDMUIsQ0FBQyxDQUFDcUgsZUFBZSxHQUFDckgsQ0FBQyxDQUFDcUUsU0FBUyxFQUFDMUQsQ0FBQyxDQUFDa0IsT0FBTyxDQUFDMEMsSUFBSSxDQUFDdkUsQ0FBQyxDQUFDLEVBQUNJLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQztXQUFDO0VBQUM4QyxRQUFBQSxDQUFDLEdBQUMsVUFBU2xELENBQUMsRUFBQztFQUFDQSxVQUFBQSxDQUFDLENBQUNtRSxPQUFPLENBQUNsRCxDQUFDLENBQUM7V0FBQztFQUFDc0MsUUFBQUEsQ0FBQyxHQUFDbEIsQ0FBQyxDQUFDLGFBQWEsRUFBQ2EsQ0FBQyxDQUFDO1FBQUM5QyxDQUFDLEdBQUM2QyxDQUFDLENBQUNqRCxDQUFDLEVBQUNXLENBQUMsRUFBQzRHLENBQUMsRUFBQ3RILENBQUMsQ0FBQ3VFLGdCQUFnQixDQUFDLEVBQUNqQixDQUFDLEtBQUdILENBQUMsQ0FBQ0UsQ0FBQyxDQUFFLFlBQVU7RUFBQ0osUUFBQUEsQ0FBQyxDQUFDSyxDQUFDLENBQUN5RSxXQUFXLEVBQUUsQ0FBQyxFQUFDekUsQ0FBQyxDQUFDYSxVQUFVLEVBQUU7RUFBQSxPQUFFLENBQUMsQ0FBQyxFQUFDN0QsQ0FBQyxDQUFFLFlBQVU7RUFBQyxRQUFBLElBQUlELENBQUM7VUFBQ0ssQ0FBQyxHQUFDUSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUNmLENBQUMsR0FBQzZDLENBQUMsQ0FBQ2pELENBQUMsRUFBQ1csQ0FBQyxFQUFDNEcsQ0FBQyxFQUFDdEgsQ0FBQyxDQUFDdUUsZ0JBQWdCLENBQUMsRUFBQ25FLENBQUMsR0FBQyxFQUFFLEVBQUNGLENBQUMsR0FBQyxFQUFFLEVBQUNELENBQUMsR0FBQyxJQUFJLEVBQUMrRyxDQUFDLENBQUN6RyxnQkFBZ0IsQ0FBQyxFQUFDRixDQUFDLEdBQUNXLENBQUMsRUFBQ1osQ0FBQyxDQUFDa0UsSUFBSSxDQUFDakUsQ0FBQyxDQUFDLEVBQUM0RyxDQUFDLEVBQUU7RUFBQSxPQUFFLENBQUMsQ0FBQztFQUFBLEtBQUUsQ0FBQztLQUFDLEVBQUNsSCxDQUFDLENBQUNtSSxLQUFLLEdBQUMsVUFBU25JLENBQUMsRUFBQ0MsQ0FBQyxFQUFDO0VBQUMsSUFBQSx3QkFBd0IsSUFBR1csSUFBSSxJQUFFLGVBQWUsSUFBR3dILHNCQUFzQixDQUFDQyxTQUFTLEtBQUdwSSxDQUFDLEdBQUNBLENBQUMsSUFBRSxFQUFFLEVBQUMrRCxDQUFDLENBQUUsWUFBVTtFQUFDLE1BQUEsSUFBSTlELENBQUM7RUFBQ2dGLE1BQUFBLENBQUMsRUFBRTtFQUFDLE1BQUEsSUFBSS9FLENBQUM7RUFBQ0MsUUFBQUEsQ0FBQyxHQUFDZSxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQUNkLFFBQUFBLENBQUMsR0FBQyxVQUFTTCxDQUFDLEVBQUM7RUFBQ29HLFVBQUFBLENBQUMsQ0FBRSxZQUFVO0VBQUNwRyxZQUFBQSxDQUFDLENBQUNtRSxPQUFPLENBQUN3QixDQUFDLENBQUM7RUFBQyxZQUFBLElBQUkxRixDQUFDLEdBQUN1RixDQUFDLEVBQUU7RUFBQ3ZGLFlBQUFBLENBQUMsSUFBRUEsQ0FBQyxDQUFDOEYsT0FBTyxLQUFHM0YsQ0FBQyxDQUFDc0IsS0FBSyxLQUFHdEIsQ0FBQyxDQUFDc0IsS0FBSyxHQUFDekIsQ0FBQyxDQUFDOEYsT0FBTyxFQUFDM0YsQ0FBQyxDQUFDeUIsT0FBTyxHQUFDNUIsQ0FBQyxDQUFDNEIsT0FBTyxFQUFDMUIsQ0FBQyxFQUFFLENBQUM7RUFBQSxXQUFFLENBQUM7V0FBQztFQUFDRyxRQUFBQSxDQUFDLEdBQUMrQixDQUFDLENBQUMsT0FBTyxFQUFDaEMsQ0FBQyxFQUFDO0VBQUM4RSxVQUFBQSxpQkFBaUIsRUFBQyxJQUFJLE1BQUlqRixDQUFDLEdBQUNELENBQUMsQ0FBQ2tGLGlCQUFpQixDQUFDLElBQUUsU0FBTSxLQUFHakYsQ0FBQyxHQUFDQSxDQUFDLEdBQUM7RUFBRSxTQUFDLENBQUM7RUFBQ0MsTUFBQUEsQ0FBQyxHQUFDOEMsQ0FBQyxDQUFDakQsQ0FBQyxFQUFDSSxDQUFDLEVBQUNrRyxDQUFDLEVBQUNyRyxDQUFDLENBQUN1RSxnQkFBZ0IsQ0FBQyxFQUFDbEUsQ0FBQyxLQUFHQSxDQUFDLENBQUN1QyxPQUFPLENBQUM7RUFBQ3RCLFFBQUFBLElBQUksRUFBQyxhQUFhO0VBQUN5QixRQUFBQSxRQUFRLEVBQUM7RUFBRSxPQUFDLENBQUMsRUFBQ0ksQ0FBQyxDQUFFLFlBQVU7RUFBQy9DLFFBQUFBLENBQUMsQ0FBQ0MsQ0FBQyxDQUFDMEgsV0FBVyxFQUFFLENBQUMsRUFBQzdILENBQUMsQ0FBQyxJQUFFLENBQUM7RUFBQSxPQUFFLENBQUMsRUFBQ0ksQ0FBQyxDQUFFLFlBQVU7RUFBQ2dGLFFBQUFBLENBQUMsR0FBQ1AsQ0FBQyxFQUFFLEVBQUNJLENBQUMsQ0FBQ0ssTUFBTSxHQUFDLENBQUMsRUFBQ0osQ0FBQyxDQUFDaUQsS0FBSyxFQUFFLEVBQUNsSSxDQUFDLEdBQUNlLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQ2hCLENBQUMsR0FBQzhDLENBQUMsQ0FBQ2pELENBQUMsRUFBQ0ksQ0FBQyxFQUFDa0csQ0FBQyxFQUFDckcsQ0FBQyxDQUFDdUUsZ0JBQWdCLENBQUM7RUFBQSxPQUFFLENBQUMsQ0FBQztFQUFBLEtBQUUsQ0FBQyxDQUFDO0tBQUMsRUFBQ3hFLENBQUMsQ0FBQ3VJLEtBQUssR0FBQyxVQUFTdkksQ0FBQyxFQUFDQyxDQUFDLEVBQUM7TUFBQ0EsQ0FBQyxHQUFDQSxDQUFDLElBQUUsRUFBRSxFQUFDK0QsQ0FBQyxDQUFFLFlBQVU7RUFBQyxNQUFBLElBQUk5RCxDQUFDO1VBQUNDLENBQUMsR0FBQzBELENBQUMsRUFBRTtFQUFDekQsUUFBQUEsQ0FBQyxHQUFDZSxDQUFDLENBQUMsS0FBSyxDQUFDO0VBQUNkLFFBQUFBLENBQUMsR0FBQyxVQUFTTCxDQUFDLEVBQUM7WUFBQ0MsQ0FBQyxDQUFDdUUsZ0JBQWdCLEtBQUd4RSxDQUFDLEdBQUNBLENBQUMsQ0FBQ3dJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDeEksQ0FBQyxDQUFDbUUsT0FBTyxDQUFFLFVBQVNuRSxDQUFDLEVBQUM7RUFBQ0EsWUFBQUEsQ0FBQyxDQUFDcUUsU0FBUyxHQUFDbEUsQ0FBQyxDQUFDNEQsZUFBZSxLQUFHM0QsQ0FBQyxDQUFDc0IsS0FBSyxHQUFDTyxJQUFJLENBQUNxQyxHQUFHLENBQUN0RSxDQUFDLENBQUNxRSxTQUFTLEdBQUNwRCxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQ2IsQ0FBQyxDQUFDeUIsT0FBTyxHQUFDLENBQUM3QixDQUFDLENBQUMsRUFBQ0UsQ0FBQyxFQUFFLENBQUM7RUFBQSxXQUFFLENBQUM7V0FBQztFQUFDSSxRQUFBQSxDQUFDLEdBQUMrQixDQUFDLENBQUMsMEJBQTBCLEVBQUNoQyxDQUFDLENBQUM7RUFBQyxNQUFBLElBQUdDLENBQUMsRUFBQztFQUFDSixRQUFBQSxDQUFDLEdBQUMrQyxDQUFDLENBQUNqRCxDQUFDLEVBQUNJLENBQUMsRUFBQ21HLENBQUMsRUFBQ3RHLENBQUMsQ0FBQ3VFLGdCQUFnQixDQUFDO0VBQUMsUUFBQSxJQUFJN0QsQ0FBQyxHQUFDMkMsQ0FBQyxDQUFFLFlBQVU7RUFBQ2tELFVBQUFBLENBQUMsQ0FBQ3BHLENBQUMsQ0FBQzBCLEVBQUUsQ0FBQyxLQUFHekIsQ0FBQyxDQUFDQyxDQUFDLENBQUMwSCxXQUFXLEVBQUUsQ0FBQyxFQUFDMUgsQ0FBQyxDQUFDOEQsVUFBVSxFQUFFLEVBQUNvQyxDQUFDLENBQUNwRyxDQUFDLENBQUMwQixFQUFFLENBQUMsR0FBQyxJQUFFLEVBQUM1QixDQUFDLENBQUMsSUFBRSxDQUFDLENBQUM7RUFBQSxTQUFFLENBQUM7VUFBQyxDQUFDLFNBQVMsRUFBQyxPQUFPLENBQUMsQ0FBQ2lFLE9BQU8sQ0FBRSxVQUFTbkUsQ0FBQyxFQUFDO1lBQUNRLGdCQUFnQixDQUFDUixDQUFDLEVBQUUsWUFBVTtjQUFDLE9BQU9vRyxDQUFDLENBQUN6RixDQUFDLENBQUM7RUFBQSxXQUFDLEVBQUU7Y0FBQzhILElBQUksRUFBQyxJQUFFO0VBQUMzQixZQUFBQSxPQUFPLEVBQUM7RUFBRSxXQUFDLENBQUM7V0FBRSxDQUFDLEVBQUMxRCxDQUFDLENBQUN6QyxDQUFDLENBQUMsRUFBQ0osQ0FBQyxDQUFFLFVBQVNKLENBQUMsRUFBQztZQUFDQyxDQUFDLEdBQUNlLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQ2pCLENBQUMsR0FBQytDLENBQUMsQ0FBQ2pELENBQUMsRUFBQ0ksQ0FBQyxFQUFDbUcsQ0FBQyxFQUFDdEcsQ0FBQyxDQUFDdUUsZ0JBQWdCLENBQUMsRUFBQ3RCLENBQUMsQ0FBRSxZQUFVO2NBQUM5QyxDQUFDLENBQUNzQixLQUFLLEdBQUNiLFdBQVcsQ0FBQ0csR0FBRyxFQUFFLEdBQUNiLENBQUMsQ0FBQ08sU0FBUyxFQUFDOEYsQ0FBQyxDQUFDcEcsQ0FBQyxDQUFDMEIsRUFBRSxDQUFDLEdBQUMsSUFBRSxFQUFDNUIsQ0FBQyxDQUFDLElBQUUsQ0FBQztFQUFBLFdBQUUsQ0FBQztFQUFBLFNBQUUsQ0FBQztFQUFBO0VBQUMsS0FBRSxDQUFDO0tBQUMsRUFBQ0YsQ0FBQyxDQUFDMEksTUFBTSxHQUFDLFVBQVMxSSxDQUFDLEVBQUNDLENBQUMsRUFBQztFQUFDQSxJQUFBQSxDQUFDLEdBQUNBLENBQUMsSUFBRSxFQUFFO0VBQUMsSUFBQSxJQUFJQyxDQUFDLEdBQUNpQixDQUFDLENBQUMsTUFBTSxDQUFDO0VBQUNoQixNQUFBQSxDQUFDLEdBQUM4QyxDQUFDLENBQUNqRCxDQUFDLEVBQUNFLENBQUMsRUFBQ3VHLENBQUMsRUFBQ3hHLENBQUMsQ0FBQ3VFLGdCQUFnQixDQUFDO0VBQUNrQyxJQUFBQSxDQUFDLENBQUUsWUFBVTtFQUFDLE1BQUEsSUFBSXRHLENBQUMsR0FBQ08sQ0FBQyxFQUFFO0VBQUNQLE1BQUFBLENBQUMsS0FBR0YsQ0FBQyxDQUFDd0IsS0FBSyxHQUFDTyxJQUFJLENBQUNxQyxHQUFHLENBQUNsRSxDQUFDLENBQUNXLGFBQWEsR0FBQ0UsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUNmLENBQUMsQ0FBQzJCLE9BQU8sR0FBQyxDQUFDekIsQ0FBQyxDQUFDLEVBQUNELENBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQ0ksQ0FBQyxDQUFFLFlBQVU7VUFBQ0wsQ0FBQyxHQUFDaUIsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDaEIsQ0FBQyxHQUFDOEMsQ0FBQyxDQUFDakQsQ0FBQyxFQUFDRSxDQUFDLEVBQUN1RyxDQUFDLEVBQUN4RyxDQUFDLENBQUN1RSxnQkFBZ0IsQ0FBQyxFQUFFLElBQUUsQ0FBQztFQUFBLE9BQUUsQ0FBQyxDQUFDO0VBQUEsS0FBRSxDQUFDO0VBQUEsR0FBQyxFQUFDeEUsQ0FBQztFQUFBLEVBQUMsQ0FBQyxFQUFFOztFQ2V4aU8sU0FBUzJJLGNBQWNBLENBQUM7SUFDckNDLFNBQVM7SUFBRUMsY0FBYztJQUFFQyxjQUFjO0VBQUVDLEVBQUFBO0VBQzdDLENBQUMsRUFBRTtFQUNEakYsRUFBQUEsVUFBVSxDQUFDLE1BQU07TUFDZixJQUFJO0VBQ0YsTUFBQSxNQUFNa0YsU0FBUyxHQUFHLElBQUlDLEdBQUcsQ0FBQyx5Q0FBeUMsRUFBRUwsU0FBUyxDQUFDTSxPQUFPLENBQUMsQ0FBQ0MsSUFBSTtRQUM1RixJQUFJL0gsUUFBUSxDQUFDZ0ksYUFBYSxDQUFDLGVBQWVKLFNBQVMsQ0FBQSxFQUFBLENBQUksQ0FBQyxFQUFFO0VBRXhELFFBQUE7RUFDRjtFQUNBLE1BQUEsTUFBTUssTUFBTSxHQUFHakksUUFBUSxDQUFDa0ksYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUMvQ0QsTUFBTSxDQUFDRSxHQUFHLEdBQUdQLFNBQVM7UUFDdEJLLE1BQU0sQ0FBQ0csTUFBTSxHQUFHLE1BQU07VUFDcEIsTUFBTUMsUUFBUSxHQUFJQyxXQUFXLElBQUs7RUFDaEMsVUFBQSxNQUFNQyxJQUFJLEdBQUc7RUFBRUMsWUFBQUEsR0FBRyxFQUFFO2FBQUk7WUFDeEJELElBQUksQ0FBQ0MsR0FBRyxDQUFDRixXQUFXLENBQUNqSSxJQUFJLENBQUMsR0FBR2lJLFdBQVcsQ0FBQ2hJLEtBQUs7RUFDOUMsVUFBQSxJQUFJZ0ksV0FBVyxDQUFDakksSUFBSSxLQUFLLEtBQUssSUFBSWlJLFdBQVcsQ0FBQzdILE9BQU8sQ0FBQzRELE1BQU0sR0FBRyxDQUFDLEVBQUU7Y0FDaEUsTUFBTTtFQUFFb0UsY0FBQUE7RUFBUSxhQUFDLEdBQUdILFdBQVcsQ0FBQzdILE9BQU8sQ0FBQ2lJLEdBQUcsRUFBRTtFQUM3Q0gsWUFBQUEsSUFBSSxDQUFDeEMsTUFBTSxHQUFHMkIsY0FBYyxDQUFDZSxPQUFPLENBQUM7RUFDckNGLFlBQUFBLElBQUksQ0FBQ0ksTUFBTSxHQUFHbEIsY0FBYyxDQUFDZ0IsT0FBTyxDQUFDLElBQUtBLE9BQU8sSUFBSUEsT0FBTyxDQUFDRyxTQUFTLENBQUN4QixLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBRTtFQUN0RjtFQUNBSSxVQUFBQSxTQUFTLENBQUMsS0FBSyxFQUFFZSxJQUFJLENBQUM7V0FDdkI7RUFFRCxRQUFBLE1BQU1NLE9BQU8sR0FBSUMsTUFBTSxJQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDMUgsUUFBUSxDQUFDMEgsTUFBTSxDQUFDO0VBSTNELFFBQUEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQy9GLE9BQU8sQ0FBRStGLE1BQU0sSUFBSztZQUNoRCxNQUFNQyxRQUFRLEdBQUdDLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDLENBQUEsRUFBQSxFQUFLSCxNQUFNLENBQUEsQ0FBRSxDQUFDO0VBQ2hELFVBQUEsSUFBSSxPQUFPQyxRQUFRLEtBQUssVUFBVSxFQUFFO2NBQ2xDLElBQUlHLElBQUksR0FBRyxFQUFFO0VBQ2J2QixZQUFBQSxNQUFNLENBQUN3QixPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU07RUFDL0JELGNBQUFBLElBQUksR0FBRztrQkFBRTlGLGdCQUFnQixFQUFFeUYsT0FBTyxDQUFDQyxNQUFNO2lCQUFHO0VBQzlDLGFBQUMsQ0FBQztFQUNGQyxZQUFBQSxRQUFRLENBQUNWLFFBQVEsRUFBRWEsSUFBSSxDQUFDO0VBQzFCO0VBQ0YsU0FBQyxDQUFDO1NBQ0g7RUFDRGxKLE1BQUFBLFFBQVEsQ0FBQ29KLElBQUksQ0FBQ0MsV0FBVyxDQUFDcEIsTUFBTSxDQUFDO0VBRW5DLEtBQUMsQ0FBQyxPQUFPcUIsS0FBSyxFQUFFO0tBR2pCLEVBQUUsSUFBSSxDQUFDO0VBQ1Y7Ozs7Ozs7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0175624433f85a59db5522a50fe580b7
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
(function () {
|
|
13
|
+
'use strict';
|
|
14
|
+
|
|
15
|
+
function addFormTracking({
|
|
16
|
+
sampleRUM,
|
|
17
|
+
sourceSelector,
|
|
18
|
+
targetSelector,
|
|
19
|
+
context
|
|
20
|
+
}) {
|
|
21
|
+
context.querySelectorAll('form').forEach(form => {
|
|
22
|
+
form.addEventListener('submit', e => sampleRUM('formsubmit', {
|
|
23
|
+
target: targetSelector(e.target),
|
|
24
|
+
source: sourceSelector(e.target)
|
|
25
|
+
}), {
|
|
26
|
+
once: true
|
|
27
|
+
});
|
|
28
|
+
let lastSource;
|
|
29
|
+
form.addEventListener('change', e => {
|
|
30
|
+
const source = sourceSelector(e.target);
|
|
31
|
+
if (source !== lastSource) {
|
|
32
|
+
sampleRUM('fill', {
|
|
33
|
+
source
|
|
34
|
+
});
|
|
35
|
+
lastSource = source;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
form.addEventListener('focusin', e => {
|
|
39
|
+
if (['INPUT', 'TEXTAREA', 'SELECT', 'BUTTON'].includes(e.target.tagName) || e.target.getAttribute('contenteditable') === 'true') {
|
|
40
|
+
sampleRUM('click', {
|
|
41
|
+
source: sourceSelector(e.target)
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return addFormTracking;
|
|
49
|
+
|
|
50
|
+
})();
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
(function () {
|
|
13
|
+
'use strict';
|
|
14
|
+
|
|
15
|
+
function addFormTracking({
|
|
16
|
+
sampleRUM,
|
|
17
|
+
sourceSelector,
|
|
18
|
+
targetSelector,
|
|
19
|
+
context
|
|
20
|
+
}) {
|
|
21
|
+
context.querySelectorAll('form').forEach(form => {
|
|
22
|
+
form.addEventListener('submit', e => sampleRUM('formsubmit', {
|
|
23
|
+
target: targetSelector(e.target),
|
|
24
|
+
source: sourceSelector(e.target)
|
|
25
|
+
}), {
|
|
26
|
+
once: true
|
|
27
|
+
});
|
|
28
|
+
let lastSource;
|
|
29
|
+
form.addEventListener('change', e => {
|
|
30
|
+
const source = sourceSelector(e.target);
|
|
31
|
+
if (source !== lastSource) {
|
|
32
|
+
sampleRUM('fill', {
|
|
33
|
+
source
|
|
34
|
+
});
|
|
35
|
+
lastSource = source;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
form.addEventListener('focusin', e => {
|
|
39
|
+
if (['INPUT', 'TEXTAREA', 'SELECT', 'BUTTON'].includes(e.target.tagName) || e.target.getAttribute('contenteditable') === 'true') {
|
|
40
|
+
sampleRUM('click', {
|
|
41
|
+
source: sourceSelector(e.target)
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return addFormTracking;
|
|
49
|
+
|
|
50
|
+
})();
|
|
51
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5tYXAuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3BsdWdpbnMvZm9ybS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjQgQWRvYmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weVxuICogb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlclxuICogdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TXG4gKiBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2VcbiAqIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZEZvcm1UcmFja2luZyh7XG4gIHNhbXBsZVJVTSwgc291cmNlU2VsZWN0b3IsIHRhcmdldFNlbGVjdG9yLCBjb250ZXh0LFxufSkge1xuICBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoJ2Zvcm0nKS5mb3JFYWNoKChmb3JtKSA9PiB7XG4gICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCAoZSkgPT4gc2FtcGxlUlVNKCdmb3Jtc3VibWl0JywgeyB0YXJnZXQ6IHRhcmdldFNlbGVjdG9yKGUudGFyZ2V0KSwgc291cmNlOiBzb3VyY2VTZWxlY3RvcihlLnRhcmdldCkgfSksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBsZXQgbGFzdFNvdXJjZTtcbiAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VTZWxlY3RvcihlLnRhcmdldCk7XG4gICAgICBpZiAoc291cmNlICE9PSBsYXN0U291cmNlKSB7XG4gICAgICAgIHNhbXBsZVJVTSgnZmlsbCcsIHsgc291cmNlIH0pO1xuICAgICAgICBsYXN0U291cmNlID0gc291cmNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIChlKSA9PiB7XG4gICAgICBpZiAoWydJTlBVVCcsICdURVhUQVJFQScsICdTRUxFQ1QnLCAnQlVUVE9OJ10uaW5jbHVkZXMoZS50YXJnZXQudGFnTmFtZSlcbiAgICAgICAgfHwgZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSA9PT0gJ3RydWUnKSB7XG4gICAgICAgIHNhbXBsZVJVTSgnY2xpY2snLCB7IHNvdXJjZTogc291cmNlU2VsZWN0b3IoZS50YXJnZXQpIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJhZGRGb3JtVHJhY2tpbmciLCJzYW1wbGVSVU0iLCJzb3VyY2VTZWxlY3RvciIsInRhcmdldFNlbGVjdG9yIiwiY29udGV4dCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwiZm9ybSIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwidGFyZ2V0Iiwic291cmNlIiwib25jZSIsImxhc3RTb3VyY2UiLCJpbmNsdWRlcyIsInRhZ05hbWUiLCJnZXRBdHRyaWJ1dGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0VBV2UsU0FBU0EsZUFBZUEsQ0FBQztJQUN0Q0MsU0FBUztJQUFFQyxjQUFjO0lBQUVDLGNBQWM7RUFBRUMsRUFBQUE7RUFDN0MsQ0FBQyxFQUFFO0lBQ0RBLE9BQU8sQ0FBQ0MsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUNDLE9BQU8sQ0FBRUMsSUFBSSxJQUFLO01BQ2pEQSxJQUFJLENBQUNDLGdCQUFnQixDQUFDLFFBQVEsRUFBR0MsQ0FBQyxJQUFLUixTQUFTLENBQUMsWUFBWSxFQUFFO0VBQUVTLE1BQUFBLE1BQU0sRUFBRVAsY0FBYyxDQUFDTSxDQUFDLENBQUNDLE1BQU0sQ0FBQztFQUFFQyxNQUFBQSxNQUFNLEVBQUVULGNBQWMsQ0FBQ08sQ0FBQyxDQUFDQyxNQUFNO0VBQUUsS0FBQyxDQUFDLEVBQUU7RUFBRUUsTUFBQUEsSUFBSSxFQUFFO0VBQUssS0FBQyxDQUFDO0VBQ3ZKLElBQUEsSUFBSUMsVUFBVTtFQUNkTixJQUFBQSxJQUFJLENBQUNDLGdCQUFnQixDQUFDLFFBQVEsRUFBR0MsQ0FBQyxJQUFLO0VBQ3JDLE1BQUEsTUFBTUUsTUFBTSxHQUFHVCxjQUFjLENBQUNPLENBQUMsQ0FBQ0MsTUFBTSxDQUFDO1FBQ3ZDLElBQUlDLE1BQU0sS0FBS0UsVUFBVSxFQUFFO1VBQ3pCWixTQUFTLENBQUMsTUFBTSxFQUFFO0VBQUVVLFVBQUFBO0VBQU8sU0FBQyxDQUFDO0VBQzdCRSxRQUFBQSxVQUFVLEdBQUdGLE1BQU07RUFDckI7RUFDRixLQUFDLENBQUM7RUFDRkosSUFBQUEsSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUdDLENBQUMsSUFBSztFQUN0QyxNQUFBLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQ0ssUUFBUSxDQUFDTCxDQUFDLENBQUNDLE1BQU0sQ0FBQ0ssT0FBTyxDQUFDLElBQ25FTixDQUFDLENBQUNDLE1BQU0sQ0FBQ00sWUFBWSxDQUFDLGlCQUFpQixDQUFDLEtBQUssTUFBTSxFQUFFO1VBQ3hEZixTQUFTLENBQUMsT0FBTyxFQUFFO0VBQUVVLFVBQUFBLE1BQU0sRUFBRVQsY0FBYyxDQUFDTyxDQUFDLENBQUNDLE1BQU07RUFBRSxTQUFDLENBQUM7RUFDMUQ7RUFDRixLQUFDLENBQUM7RUFDSixHQUFDLENBQUM7RUFDSjs7Ozs7Ozs7In0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1c696968df786f64dd52b97922bfd98a
|