@ditojs/ui 2.72.0 → 2.73.1
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/dito-ui.css +1 -1
- package/dist/dito-ui.es.js +502 -441
- package/dist/dito-ui.umd.js +2 -2
- package/package.json +4 -4
- package/src/components/DitoButton.vue +54 -0
- package/src/components/{DatePicker.vue → DitoDatePicker.vue} +13 -13
- package/src/components/{DateTimePicker.vue → DitoDateTimePicker.vue} +13 -13
- package/src/components/{Icon.vue → DitoIcon.vue} +16 -11
- package/src/components/{InputField.vue → DitoInput.vue} +18 -5
- package/src/components/{TimePicker.vue → DitoTimePicker.vue} +11 -11
- package/src/components/index.js +10 -9
- package/src/styles/components/_button.scss +21 -0
- /package/src/components/{Calendar.vue → DitoCalendar.vue} +0 -0
- /package/src/components/{Pagination.vue → DitoPagination.vue} +0 -0
- /package/src/components/{SwitchButton.vue → DitoSwitch.vue} +0 -0
- /package/src/components/{Trigger.vue → DitoTrigger.vue} +0 -0
package/dist/dito-ui.es.js
CHANGED
|
@@ -1,6 +1,70 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { asArray as
|
|
3
|
-
function
|
|
1
|
+
import { Comment as le, useSlots as ae, markRaw as ue, createElementBlock as c, openBlock as d, mergeProps as M, createCommentVNode as v, renderSlot as m, createTextVNode as Y, toDisplayString as w, createElementVNode as f, Fragment as k, renderList as C, normalizeClass as b, createVNode as _, Transition as Z, withCtx as V, withDirectives as E, normalizeStyle as U, vShow as X, withModifiers as F, vModelDynamic as de, resolveComponent as S, createBlock as I, vModelCheckbox as ce, h as he } from "vue";
|
|
2
|
+
import { asArray as ee, isString as te, hyphenate as fe, defaultFormats as O, format as A, assignDeeply as pe } from "@ditojs/utils";
|
|
3
|
+
function ge(e) {
|
|
4
|
+
return e && ee(e).some((t) => t.type !== le);
|
|
5
|
+
}
|
|
6
|
+
function G(e, t = {}) {
|
|
7
|
+
return e = te(e) ? ae()[e] : e, ge(e?.(t));
|
|
8
|
+
}
|
|
9
|
+
function Yt(e) {
|
|
10
|
+
return ue({ value: e });
|
|
11
|
+
}
|
|
12
|
+
const me = ["type", "title", "disabled"], ye = {
|
|
13
|
+
key: 0,
|
|
14
|
+
class: "dito-button__prefix"
|
|
15
|
+
}, we = {
|
|
16
|
+
key: 1,
|
|
17
|
+
class: "dito-button__text"
|
|
18
|
+
}, be = {
|
|
19
|
+
key: 2,
|
|
20
|
+
class: "dito-button__suffix"
|
|
21
|
+
};
|
|
22
|
+
function De(e, t, i, r, o, s) {
|
|
23
|
+
return d(), c("button", M({
|
|
24
|
+
class: ["dito-button", [s.classes, { "dito-button--affixed": s.hasAffixes }]],
|
|
25
|
+
type: i.type,
|
|
26
|
+
title: i.title,
|
|
27
|
+
disabled: i.disabled
|
|
28
|
+
}, s.attributes), [
|
|
29
|
+
s.hasAffixes ? (d(), c("div", ye, [
|
|
30
|
+
m(e.$slots, "prefix")
|
|
31
|
+
])) : v("", !0),
|
|
32
|
+
i.text || s.hasAffixes ? (d(), c("div", we, [
|
|
33
|
+
Y(w(i.text || ""), 1),
|
|
34
|
+
m(e.$slots, "default")
|
|
35
|
+
])) : v("", !0),
|
|
36
|
+
s.hasAffixes ? (d(), c("div", be, [
|
|
37
|
+
m(e.$slots, "suffix")
|
|
38
|
+
])) : v("", !0)
|
|
39
|
+
], 16, me);
|
|
40
|
+
}
|
|
41
|
+
const P = (e, t) => {
|
|
42
|
+
const i = e.__vccOpts || e;
|
|
43
|
+
for (const [r, o] of t)
|
|
44
|
+
i[r] = o;
|
|
45
|
+
return i;
|
|
46
|
+
}, ke = {
|
|
47
|
+
inheritAttrs: !1,
|
|
48
|
+
props: {
|
|
49
|
+
type: { type: String, default: "button" },
|
|
50
|
+
text: { type: String, default: null },
|
|
51
|
+
title: { type: String, default: null },
|
|
52
|
+
disabled: { type: Boolean, default: !1 }
|
|
53
|
+
},
|
|
54
|
+
computed: {
|
|
55
|
+
hasAffixes() {
|
|
56
|
+
return G(this.$slots.prefix) || G(this.$slots.suffix);
|
|
57
|
+
},
|
|
58
|
+
classes() {
|
|
59
|
+
return this.$attrs.class;
|
|
60
|
+
},
|
|
61
|
+
attributes() {
|
|
62
|
+
const { class: e, ...t } = this.$attrs;
|
|
63
|
+
return t;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}, Et = /* @__PURE__ */ P(ke, [["render", De]]);
|
|
67
|
+
function se(e) {
|
|
4
68
|
return {
|
|
5
69
|
year: e?.getFullYear() ?? 0,
|
|
6
70
|
month: e?.getMonth() ?? 0,
|
|
@@ -12,19 +76,19 @@ function te(e) {
|
|
|
12
76
|
};
|
|
13
77
|
}
|
|
14
78
|
function L(e, t = {}) {
|
|
15
|
-
return new Date(...Object.values({ ...
|
|
79
|
+
return new Date(...Object.values({ ...se(e), ...t }));
|
|
16
80
|
}
|
|
17
|
-
function
|
|
81
|
+
function H(e, {
|
|
18
82
|
locale: t = "en-US",
|
|
19
|
-
date:
|
|
83
|
+
date: i = !0,
|
|
20
84
|
time: r = !0
|
|
21
85
|
} = {}) {
|
|
22
86
|
const o = r ? null : 0;
|
|
23
87
|
let [
|
|
24
88
|
s,
|
|
25
|
-
|
|
89
|
+
n,
|
|
26
90
|
a,
|
|
27
|
-
|
|
91
|
+
h,
|
|
28
92
|
l,
|
|
29
93
|
,
|
|
30
94
|
u = o,
|
|
@@ -33,12 +97,12 @@ function A(e, {
|
|
|
33
97
|
,
|
|
34
98
|
g = o,
|
|
35
99
|
,
|
|
36
|
-
|
|
37
|
-
] = ne(e, { date:
|
|
100
|
+
y = o
|
|
101
|
+
] = ne(e, { date: i, time: r });
|
|
38
102
|
if (l && l.length >= 4) {
|
|
39
|
-
t === "en-US" &&
|
|
40
|
-
const
|
|
41
|
-
if (a !== null && (!r ||
|
|
103
|
+
t === "en-US" && n === "/" && h === "/" && ([s, a] = [a, s]), a = ve(a, { locale: t });
|
|
104
|
+
const D = (x) => x === null || x.length === 2;
|
|
105
|
+
if (a !== null && (!r || D(u) && D(p) && D(g)))
|
|
42
106
|
return new Date(
|
|
43
107
|
+l,
|
|
44
108
|
+a,
|
|
@@ -46,25 +110,25 @@ function A(e, {
|
|
|
46
110
|
+u,
|
|
47
111
|
+p,
|
|
48
112
|
+g,
|
|
49
|
-
+
|
|
113
|
+
+y
|
|
50
114
|
);
|
|
51
115
|
}
|
|
52
116
|
return null;
|
|
53
117
|
}
|
|
54
|
-
function
|
|
55
|
-
locale:
|
|
118
|
+
function ie(e, t, {
|
|
119
|
+
locale: i = "en-US",
|
|
56
120
|
date: r = !0,
|
|
57
121
|
time: o = !0
|
|
58
122
|
} = {}) {
|
|
59
|
-
const s = ne(e, { date: r, time: o }),
|
|
60
|
-
let
|
|
61
|
-
for (; (p === null ||
|
|
62
|
-
|
|
63
|
-
return { position:
|
|
64
|
-
}, a = r ? 0 :
|
|
123
|
+
const s = ne(e, { date: r, time: o }), n = (p, g = s.length) => {
|
|
124
|
+
let y = 0, D = 0;
|
|
125
|
+
for (; (p === null || y <= p) && D < g; )
|
|
126
|
+
y += s[D++]?.length ?? 0;
|
|
127
|
+
return { position: y, index: D };
|
|
128
|
+
}, a = r ? 0 : n(null, 6).position;
|
|
65
129
|
t += a;
|
|
66
|
-
let { index:
|
|
67
|
-
const l =
|
|
130
|
+
let { index: h } = n(t);
|
|
131
|
+
const l = i === "en-US", u = [
|
|
68
132
|
l ? "month" : "day",
|
|
69
133
|
null,
|
|
70
134
|
l ? "day" : "month",
|
|
@@ -79,140 +143,135 @@ function se(e, t, {
|
|
|
79
143
|
null,
|
|
80
144
|
"millisecond"
|
|
81
145
|
];
|
|
82
|
-
for (;
|
|
83
|
-
if (u[
|
|
84
|
-
const p =
|
|
85
|
-
return { name: u[
|
|
146
|
+
for (; h--; )
|
|
147
|
+
if (u[h]) {
|
|
148
|
+
const p = n(null, h).position - a, g = p + s[h].length;
|
|
149
|
+
return { name: u[h], start: p, end: g };
|
|
86
150
|
}
|
|
87
151
|
return null;
|
|
88
152
|
}
|
|
89
|
-
function ne(e, { date: t = !0, time:
|
|
153
|
+
function ne(e, { date: t = !0, time: i = !0 } = {}) {
|
|
90
154
|
const r = e?.split(/([\s.,:/]+)/) || [];
|
|
91
|
-
return t || r.unshift("1", ".", "1", ".", "2000", " "), !
|
|
155
|
+
return t || r.unshift("1", ".", "1", ".", "2000", " "), !i && r.length > 5 && (r.length = 5), r;
|
|
92
156
|
}
|
|
93
|
-
function
|
|
94
|
-
const
|
|
95
|
-
if (!isNaN(
|
|
96
|
-
return
|
|
157
|
+
function ve(e, { locale: t = "en-US" } = {}) {
|
|
158
|
+
const i = +e;
|
|
159
|
+
if (!isNaN(i))
|
|
160
|
+
return i - 1;
|
|
97
161
|
const r = e.trim().toLowerCase();
|
|
98
162
|
if (r.length < 3) return null;
|
|
99
163
|
const o = new Intl.DateTimeFormat(t, { month: "short" }), s = new Intl.DateTimeFormat(t, { month: "long" });
|
|
100
|
-
for (let
|
|
101
|
-
const a = new Date(2e3,
|
|
164
|
+
for (let n = 0; n < 12; n++) {
|
|
165
|
+
const a = new Date(2e3, n, 1);
|
|
102
166
|
if (o.format(a).toLowerCase().startsWith(r) || s.format(a).toLowerCase().startsWith(r))
|
|
103
|
-
return
|
|
167
|
+
return n;
|
|
104
168
|
}
|
|
105
169
|
return null;
|
|
106
170
|
}
|
|
107
|
-
const
|
|
108
|
-
function
|
|
109
|
-
return d(),
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
o.currentMode === "day" ? (d(),
|
|
113
|
-
|
|
114
|
-
|
|
171
|
+
const Ve = { class: "dito-calendar" }, Se = { class: "dito-calendar-popup" }, Me = { class: "dito-calendar-inner" }, Pe = { class: "dito-calendar-header" }, xe = { class: "dito-calendar-body" }, Te = { class: "dito-calendar-weekdays" }, Ce = { class: "dito-calendar-dates" }, _e = ["onClick"], Fe = { class: "dito-calendar-footer" }, Be = ["title"], $e = { class: "dito-calendar-header" }, Ne = { class: "dito-calendar-body" }, Ye = { class: "dito-calendar-months" }, Ee = ["onClick"], Ie = { class: "dito-calendar-header" }, Oe = { class: "dito-calendar-body" }, Ae = { class: "dito-calendar-years" }, Le = ["onClick"];
|
|
172
|
+
function Re(e, t, i, r, o, s) {
|
|
173
|
+
return d(), c("div", Ve, [
|
|
174
|
+
f("div", Se, [
|
|
175
|
+
f("div", Me, [
|
|
176
|
+
o.currentMode === "day" ? (d(), c(k, { key: 0 }, [
|
|
177
|
+
f("div", Pe, [
|
|
178
|
+
f("a", {
|
|
115
179
|
class: "dito-calendar-step-prev dito-calendar-step-year",
|
|
116
|
-
onClick: t[0] || (t[0] = (
|
|
180
|
+
onClick: t[0] || (t[0] = (n) => s.stepYear(-1))
|
|
117
181
|
}),
|
|
118
|
-
|
|
182
|
+
f("a", {
|
|
119
183
|
class: "dito-calendar-step-prev dito-calendar-step-month",
|
|
120
|
-
onClick: t[1] || (t[1] = (
|
|
184
|
+
onClick: t[1] || (t[1] = (n) => s.stepMonth(-1))
|
|
121
185
|
}),
|
|
122
|
-
|
|
123
|
-
|
|
186
|
+
f("span", null, [
|
|
187
|
+
f("a", {
|
|
124
188
|
class: "dito-calendar-select-year",
|
|
125
|
-
onClick: t[2] || (t[2] = (
|
|
189
|
+
onClick: t[2] || (t[2] = (n) => s.setMode("year"))
|
|
126
190
|
}, w(s.dateToString(o.currentValue, { year: !0 })), 1),
|
|
127
|
-
|
|
191
|
+
f("a", {
|
|
128
192
|
class: "dito-calendar-select-month",
|
|
129
|
-
onClick: t[3] || (t[3] = (
|
|
193
|
+
onClick: t[3] || (t[3] = (n) => s.setMode("month"))
|
|
130
194
|
}, w(s.dateToString(o.currentValue, { month: !0 })), 1)
|
|
131
195
|
]),
|
|
132
|
-
|
|
196
|
+
f("a", {
|
|
133
197
|
class: "dito-calendar-step-next dito-calendar-step-month",
|
|
134
|
-
onClick: t[4] || (t[4] = (
|
|
198
|
+
onClick: t[4] || (t[4] = (n) => s.stepMonth(1))
|
|
135
199
|
}),
|
|
136
|
-
|
|
200
|
+
f("a", {
|
|
137
201
|
class: "dito-calendar-step-next dito-calendar-step-year",
|
|
138
|
-
onClick: t[5] || (t[5] = (
|
|
202
|
+
onClick: t[5] || (t[5] = (n) => s.stepYear(1))
|
|
139
203
|
})
|
|
140
204
|
]),
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
(d(!0),
|
|
205
|
+
f("div", xe, [
|
|
206
|
+
f("div", Te, [
|
|
207
|
+
(d(!0), c(k, null, C(o.weekdayNames, (n) => (d(), c("span", null, w(n.short), 1))), 256))
|
|
144
208
|
]),
|
|
145
|
-
|
|
146
|
-
(d(!0),
|
|
147
|
-
class: b(
|
|
148
|
-
onClick: (a) =>
|
|
149
|
-
}, w(
|
|
209
|
+
f("div", Ce, [
|
|
210
|
+
(d(!0), c(k, null, C(o.dateRange, (n) => (d(), c("span", {
|
|
211
|
+
class: b(n.state && `dito-calendar-item-${n.state}`),
|
|
212
|
+
onClick: (a) => n.state !== "disabled" && s.selectDate(n.date)
|
|
213
|
+
}, w(n.text), 11, _e))), 256))
|
|
150
214
|
])
|
|
151
215
|
]),
|
|
152
|
-
|
|
153
|
-
|
|
216
|
+
f("div", Fe, [
|
|
217
|
+
f("a", {
|
|
154
218
|
class: "dito-calendar-select-now",
|
|
155
219
|
role: "button",
|
|
156
220
|
title: s.dateToString(/* @__PURE__ */ new Date()),
|
|
157
|
-
onClick: t[6] || (t[6] = (
|
|
158
|
-
}, null, 8,
|
|
221
|
+
onClick: t[6] || (t[6] = (n) => s.selectDate(/* @__PURE__ */ new Date()))
|
|
222
|
+
}, null, 8, Be)
|
|
159
223
|
])
|
|
160
|
-
], 64)) : o.currentMode === "month" ? (d(),
|
|
161
|
-
|
|
162
|
-
|
|
224
|
+
], 64)) : o.currentMode === "month" ? (d(), c(k, { key: 1 }, [
|
|
225
|
+
f("div", $e, [
|
|
226
|
+
f("a", {
|
|
163
227
|
class: "dito-calendar-step-prev",
|
|
164
|
-
onClick: t[7] || (t[7] = (
|
|
228
|
+
onClick: t[7] || (t[7] = (n) => s.stepYear(-1))
|
|
165
229
|
}),
|
|
166
|
-
|
|
167
|
-
|
|
230
|
+
f("span", null, [
|
|
231
|
+
f("a", {
|
|
168
232
|
class: "dito-calendar-select-year",
|
|
169
|
-
onClick: t[8] || (t[8] = (
|
|
233
|
+
onClick: t[8] || (t[8] = (n) => s.setMode("year"))
|
|
170
234
|
}, w(s.dateToString(o.currentValue, { year: !0 })), 1)
|
|
171
235
|
]),
|
|
172
|
-
|
|
236
|
+
f("a", {
|
|
173
237
|
class: "dito-calendar-step-next",
|
|
174
|
-
onClick: t[9] || (t[9] = (
|
|
238
|
+
onClick: t[9] || (t[9] = (n) => s.stepYear(1))
|
|
175
239
|
})
|
|
176
240
|
]),
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
(d(!0),
|
|
241
|
+
f("div", Ne, [
|
|
242
|
+
f("div", Ye, [
|
|
243
|
+
(d(!0), c(k, null, C(o.monthNames, (n, a) => (d(), c("span", {
|
|
180
244
|
class: b(s.getMonthClass(a)),
|
|
181
|
-
onClick: (
|
|
182
|
-
}, w(
|
|
245
|
+
onClick: (h) => s.selectMonth(a)
|
|
246
|
+
}, w(n.short), 11, Ee))), 256))
|
|
183
247
|
])
|
|
184
248
|
])
|
|
185
|
-
], 64)) : o.currentMode === "year" ? (d(),
|
|
186
|
-
|
|
187
|
-
|
|
249
|
+
], 64)) : o.currentMode === "year" ? (d(), c(k, { key: 2 }, [
|
|
250
|
+
f("div", Ie, [
|
|
251
|
+
f("a", {
|
|
188
252
|
class: "dito-calendar-step-prev",
|
|
189
|
-
onClick: t[10] || (t[10] = (
|
|
253
|
+
onClick: t[10] || (t[10] = (n) => s.stepDecade(-1))
|
|
190
254
|
}),
|
|
191
|
-
|
|
192
|
-
|
|
255
|
+
f("span", null, w(s.decadeToString(o.currentValue)), 1),
|
|
256
|
+
f("a", {
|
|
193
257
|
class: "dito-calendar-step-next",
|
|
194
|
-
onClick: t[11] || (t[11] = (
|
|
258
|
+
onClick: t[11] || (t[11] = (n) => s.stepDecade(1))
|
|
195
259
|
})
|
|
196
260
|
]),
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
(d(!0),
|
|
200
|
-
class: b(s.getYearClass(
|
|
201
|
-
onClick: (a) => s.selectYear(
|
|
202
|
-
}, w(
|
|
261
|
+
f("div", Oe, [
|
|
262
|
+
f("div", Ae, [
|
|
263
|
+
(d(!0), c(k, null, C(o.yearRange, (n) => (d(), c("span", {
|
|
264
|
+
class: b(s.getYearClass(n)),
|
|
265
|
+
onClick: (a) => s.selectYear(n)
|
|
266
|
+
}, w(n), 11, Le))), 256))
|
|
203
267
|
])
|
|
204
268
|
])
|
|
205
|
-
], 64)) :
|
|
269
|
+
], 64)) : v("", !0)
|
|
206
270
|
])
|
|
207
271
|
])
|
|
208
272
|
]);
|
|
209
273
|
}
|
|
210
|
-
const
|
|
211
|
-
const n = e.__vccOpts || e;
|
|
212
|
-
for (const [r, o] of t)
|
|
213
|
-
n[r] = o;
|
|
214
|
-
return n;
|
|
215
|
-
}, Ye = {
|
|
274
|
+
const Ue = {
|
|
216
275
|
emits: ["update:modelValue", "select"],
|
|
217
276
|
props: {
|
|
218
277
|
modelValue: { type: Date, default: null },
|
|
@@ -221,7 +280,7 @@ const M = (e, t) => {
|
|
|
221
280
|
mode: { type: String, default: "day" }
|
|
222
281
|
},
|
|
223
282
|
data() {
|
|
224
|
-
const { weekdayNames: e, monthNames: t } =
|
|
283
|
+
const { weekdayNames: e, monthNames: t } = He(this.locale);
|
|
225
284
|
return {
|
|
226
285
|
weekdayNames: e,
|
|
227
286
|
monthNames: t,
|
|
@@ -272,14 +331,14 @@ const M = (e, t) => {
|
|
|
272
331
|
this.currentMode = e;
|
|
273
332
|
},
|
|
274
333
|
stepMonth(e) {
|
|
275
|
-
const { currentValue: t } = this, { year:
|
|
334
|
+
const { currentValue: t } = this, { year: i, month: r } = this.getYearMonth(
|
|
276
335
|
t.getFullYear(),
|
|
277
336
|
t.getMonth() + e
|
|
278
337
|
);
|
|
279
338
|
this.setDate({
|
|
280
339
|
month: r,
|
|
281
340
|
day: Math.min(
|
|
282
|
-
this.getDaysInMonth(
|
|
341
|
+
this.getDaysInMonth(i, r),
|
|
283
342
|
this.currentValue.getDate()
|
|
284
343
|
)
|
|
285
344
|
});
|
|
@@ -290,7 +349,7 @@ const M = (e, t) => {
|
|
|
290
349
|
});
|
|
291
350
|
},
|
|
292
351
|
selectDate(e) {
|
|
293
|
-
this.setDate(
|
|
352
|
+
this.setDate(se(e), !0), this.$emit("select");
|
|
294
353
|
},
|
|
295
354
|
selectMonth(e) {
|
|
296
355
|
this.setMode("day"), this.setDate({ month: e, day: 1 }, !0);
|
|
@@ -301,10 +360,10 @@ const M = (e, t) => {
|
|
|
301
360
|
getYearMonth(e, t) {
|
|
302
361
|
return t > 11 ? (e++, t = 0) : t < 0 && (e--, t = 11), { year: e, month: t };
|
|
303
362
|
},
|
|
304
|
-
dateToString(e, { year: t, month:
|
|
363
|
+
dateToString(e, { year: t, month: i, day: r } = { year: !0, month: !0, day: !0 }) {
|
|
305
364
|
return e.toLocaleString(this.locale, {
|
|
306
365
|
year: t && "numeric",
|
|
307
|
-
month:
|
|
366
|
+
month: i && "long",
|
|
308
367
|
day: r && "numeric"
|
|
309
368
|
});
|
|
310
369
|
},
|
|
@@ -318,10 +377,10 @@ const M = (e, t) => {
|
|
|
318
377
|
getFirstYearOfDecade(e) {
|
|
319
378
|
return +`${e.toString().slice(0, -1)}0`;
|
|
320
379
|
},
|
|
321
|
-
navigate({ step: e, enter: t, mode:
|
|
380
|
+
navigate({ step: e, enter: t, mode: i = this.currentMode, update: r = !1 }) {
|
|
322
381
|
const { currentValue: o } = this;
|
|
323
382
|
if (e) {
|
|
324
|
-
switch (
|
|
383
|
+
switch (i) {
|
|
325
384
|
case "day":
|
|
326
385
|
this.setDate({ day: o.getDate() + e }, r);
|
|
327
386
|
break;
|
|
@@ -350,39 +409,39 @@ const M = (e, t) => {
|
|
|
350
409
|
},
|
|
351
410
|
updateDateRange() {
|
|
352
411
|
this.dateRange = [], this.yearRange = [];
|
|
353
|
-
const { currentValue: e } = this, t = e.getFullYear(),
|
|
412
|
+
const { currentValue: e } = this, t = e.getFullYear(), i = e.getMonth(), r = this.getFirstYearOfDecade(t);
|
|
354
413
|
for (let l = 0; l < 10; l++)
|
|
355
414
|
this.yearRange.push(r + l);
|
|
356
|
-
let s = new Date(t,
|
|
415
|
+
let s = new Date(t, i, 1).getDay() + 1;
|
|
357
416
|
s === 0 && (s = 7);
|
|
358
|
-
const
|
|
417
|
+
const n = this.getDaysInMonth(t, i);
|
|
359
418
|
if (s > 1) {
|
|
360
|
-
const l = this.getYearMonth(t,
|
|
419
|
+
const l = this.getYearMonth(t, i - 1), u = this.getDaysInMonth(
|
|
361
420
|
l.year,
|
|
362
421
|
l.month
|
|
363
422
|
);
|
|
364
423
|
for (let p = 1; p < s; p++) {
|
|
365
|
-
const g = u - s + p + 1,
|
|
424
|
+
const g = u - s + p + 1, y = new Date(l.year, l.month, g);
|
|
366
425
|
this.dateRange.push({
|
|
367
426
|
text: g,
|
|
368
|
-
date:
|
|
369
|
-
state: this.disabledDate(
|
|
427
|
+
date: y,
|
|
428
|
+
state: this.disabledDate(y) ? "disabled" : "gray"
|
|
370
429
|
});
|
|
371
430
|
}
|
|
372
431
|
}
|
|
373
432
|
const a = /* @__PURE__ */ new Date();
|
|
374
|
-
for (let l = 1; l <=
|
|
375
|
-
const u = new Date(t,
|
|
433
|
+
for (let l = 1; l <= n; l++) {
|
|
434
|
+
const u = new Date(t, i, l), p = (y) => y && y.getDate() === l && y.getFullYear() === t && y.getMonth() === i, g = p(this.modelValue) ? "active" : p(a) ? "today" : this.disabledDate(u) ? "disabled" : p(e) ? "current" : null;
|
|
376
435
|
this.dateRange.push({
|
|
377
436
|
text: l,
|
|
378
437
|
date: u,
|
|
379
438
|
state: g
|
|
380
439
|
});
|
|
381
440
|
}
|
|
382
|
-
const
|
|
383
|
-
if (
|
|
384
|
-
const l = this.getYearMonth(t,
|
|
385
|
-
for (let u = 1; u <=
|
|
441
|
+
const h = 42 - this.dateRange.length;
|
|
442
|
+
if (h > 0) {
|
|
443
|
+
const l = this.getYearMonth(t, i + 1);
|
|
444
|
+
for (let u = 1; u <= h; u++) {
|
|
386
445
|
const p = new Date(l.year, l.month, u), g = this.disabledDate(p) ? "disabled" : "gray";
|
|
387
446
|
this.dateRange.push({
|
|
388
447
|
text: u,
|
|
@@ -393,14 +452,14 @@ const M = (e, t) => {
|
|
|
393
452
|
}
|
|
394
453
|
}
|
|
395
454
|
}
|
|
396
|
-
},
|
|
397
|
-
function
|
|
398
|
-
let t =
|
|
455
|
+
}, J = {};
|
|
456
|
+
function He(e) {
|
|
457
|
+
let t = J[e];
|
|
399
458
|
if (!t) {
|
|
400
|
-
const
|
|
459
|
+
const i = [];
|
|
401
460
|
for (let o = 0; o < 7; o++) {
|
|
402
461
|
const s = new Date(0, 0, o);
|
|
403
|
-
|
|
462
|
+
i.push({
|
|
404
463
|
long: s.toLocaleString(e, { weekday: "long" }),
|
|
405
464
|
short: s.toLocaleString(e, { weekday: "short" })
|
|
406
465
|
});
|
|
@@ -413,28 +472,28 @@ function Ee(e) {
|
|
|
413
472
|
short: s.toLocaleString(e, { month: "short" })
|
|
414
473
|
});
|
|
415
474
|
}
|
|
416
|
-
t =
|
|
417
|
-
weekdayNames:
|
|
475
|
+
t = J[e] = {
|
|
476
|
+
weekdayNames: i,
|
|
418
477
|
monthNames: r
|
|
419
478
|
};
|
|
420
479
|
}
|
|
421
480
|
return t;
|
|
422
481
|
}
|
|
423
|
-
const
|
|
482
|
+
const Ke = /* @__PURE__ */ P(Ue, [["render", Re]]);
|
|
424
483
|
function R(e, t) {
|
|
425
|
-
e = e instanceof NodeList ? Array.from(e) :
|
|
426
|
-
for (const [
|
|
484
|
+
e = e instanceof NodeList ? Array.from(e) : ee(e);
|
|
485
|
+
for (const [i, r] of Object.entries(t))
|
|
427
486
|
for (const o of e)
|
|
428
|
-
o.addEventListener(
|
|
487
|
+
o.addEventListener(i, r, !1);
|
|
429
488
|
return {
|
|
430
489
|
remove() {
|
|
431
|
-
for (const [
|
|
490
|
+
for (const [i, r] of Object.entries(t))
|
|
432
491
|
for (const o of e)
|
|
433
|
-
o.removeEventListener(
|
|
492
|
+
o.removeEventListener(i, r, !1);
|
|
434
493
|
}
|
|
435
494
|
};
|
|
436
495
|
}
|
|
437
|
-
function
|
|
496
|
+
function ze(...e) {
|
|
438
497
|
return {
|
|
439
498
|
remove() {
|
|
440
499
|
for (const t of e)
|
|
@@ -442,7 +501,7 @@ function Oe(...e) {
|
|
|
442
501
|
}
|
|
443
502
|
};
|
|
444
503
|
}
|
|
445
|
-
function
|
|
504
|
+
function We(e) {
|
|
446
505
|
return {
|
|
447
506
|
37: "left",
|
|
448
507
|
38: "up",
|
|
@@ -452,7 +511,7 @@ function $e(e) {
|
|
|
452
511
|
}[e?.keyCode];
|
|
453
512
|
}
|
|
454
513
|
function K(e) {
|
|
455
|
-
const t =
|
|
514
|
+
const t = We(e);
|
|
456
515
|
return {
|
|
457
516
|
hor: { left: -1, right: 1 }[t] || 0,
|
|
458
517
|
ver: { up: -1, down: 1 }[t] || 0,
|
|
@@ -460,62 +519,62 @@ function K(e) {
|
|
|
460
519
|
};
|
|
461
520
|
}
|
|
462
521
|
function z(e) {
|
|
463
|
-
const t =
|
|
522
|
+
const t = te(e.target) ? e.$refs[e.target] : e.target;
|
|
464
523
|
return t?.$el ?? t;
|
|
465
524
|
}
|
|
466
|
-
const
|
|
467
|
-
function
|
|
468
|
-
return d(),
|
|
469
|
-
|
|
525
|
+
const je = { class: "dito-trigger-container" };
|
|
526
|
+
function qe(e, t, i, r, o, s) {
|
|
527
|
+
return d(), c("div", je, [
|
|
528
|
+
i.alwaysShow ? (d(), c("div", {
|
|
470
529
|
key: 0,
|
|
471
530
|
class: b(["dito-trigger", s.triggerClass]),
|
|
472
531
|
ref: "trigger"
|
|
473
532
|
}, [
|
|
474
|
-
|
|
475
|
-
], 2)) :
|
|
533
|
+
m(e.$slots, "trigger")
|
|
534
|
+
], 2)) : i.trigger === "click" ? (d(), c("div", {
|
|
476
535
|
key: 1,
|
|
477
536
|
class: b(["dito-trigger", s.triggerClass]),
|
|
478
537
|
ref: "trigger",
|
|
479
|
-
onClick: t[0] || (t[0] = (...
|
|
538
|
+
onClick: t[0] || (t[0] = (...n) => s.onClick && s.onClick(...n))
|
|
480
539
|
}, [
|
|
481
|
-
|
|
482
|
-
], 2)) :
|
|
540
|
+
m(e.$slots, "trigger")
|
|
541
|
+
], 2)) : i.trigger === "hover" ? (d(), c("div", {
|
|
483
542
|
key: 2,
|
|
484
543
|
class: b(["dito-trigger", s.triggerClass]),
|
|
485
544
|
ref: "trigger",
|
|
486
|
-
onMouseenter: t[1] || (t[1] = (
|
|
487
|
-
onMouseleave: t[2] || (t[2] = (
|
|
545
|
+
onMouseenter: t[1] || (t[1] = (n) => s.onHover(!0)),
|
|
546
|
+
onMouseleave: t[2] || (t[2] = (n) => s.onHover(!1))
|
|
488
547
|
}, [
|
|
489
|
-
|
|
490
|
-
], 34)) :
|
|
548
|
+
m(e.$slots, "trigger")
|
|
549
|
+
], 34)) : i.trigger === "focus" || i.trigger === "always" ? (d(), c("div", {
|
|
491
550
|
key: 3,
|
|
492
551
|
class: b(["dito-trigger", s.triggerClass]),
|
|
493
552
|
ref: "trigger"
|
|
494
553
|
}, [
|
|
495
|
-
|
|
496
|
-
], 2)) :
|
|
497
|
-
|
|
498
|
-
name: `dito-${
|
|
554
|
+
m(e.$slots, "trigger")
|
|
555
|
+
], 2)) : v("", !0),
|
|
556
|
+
_(Z, {
|
|
557
|
+
name: `dito-${i.transition}`
|
|
499
558
|
}, {
|
|
500
|
-
default:
|
|
501
|
-
|
|
559
|
+
default: V(() => [
|
|
560
|
+
i.trigger === "hover" ? E((d(), c("div", {
|
|
502
561
|
key: 0,
|
|
503
562
|
class: b(["dito-popup", s.popupClass]),
|
|
504
563
|
ref: "popup",
|
|
505
564
|
style: U(s.popupStyle),
|
|
506
|
-
onMouseenter: t[3] || (t[3] = (
|
|
507
|
-
onMouseleave: t[4] || (t[4] = (
|
|
565
|
+
onMouseenter: t[3] || (t[3] = (n) => s.onHover(!0)),
|
|
566
|
+
onMouseleave: t[4] || (t[4] = (n) => s.onHover(!1))
|
|
508
567
|
}, [
|
|
509
|
-
o.showPopup ?
|
|
568
|
+
o.showPopup ? m(e.$slots, "popup", { key: 0 }) : v("", !0)
|
|
510
569
|
], 38)), [
|
|
511
570
|
[X, o.showPopup]
|
|
512
|
-
]) : E((d(),
|
|
571
|
+
]) : E((d(), c("div", {
|
|
513
572
|
key: 1,
|
|
514
573
|
class: b(["dito-popup", s.popupClass]),
|
|
515
574
|
ref: "popup",
|
|
516
575
|
style: U(s.popupStyle)
|
|
517
576
|
}, [
|
|
518
|
-
o.showPopup ?
|
|
577
|
+
o.showPopup ? m(e.$slots, "popup", { key: 0 }) : v("", !0)
|
|
519
578
|
], 6)), [
|
|
520
579
|
[X, o.showPopup]
|
|
521
580
|
])
|
|
@@ -524,7 +583,7 @@ function Re(e, t, n, r, o, s) {
|
|
|
524
583
|
}, 8, ["name"])
|
|
525
584
|
]);
|
|
526
585
|
}
|
|
527
|
-
const
|
|
586
|
+
const Xe = {
|
|
528
587
|
emits: ["update:show"],
|
|
529
588
|
props: {
|
|
530
589
|
trigger: { type: String, default: "click" },
|
|
@@ -560,7 +619,7 @@ const Ue = {
|
|
|
560
619
|
},
|
|
561
620
|
popupClass() {
|
|
562
621
|
const e = {
|
|
563
|
-
[`dito-popup-${
|
|
622
|
+
[`dito-popup-${fe(this.placement)}`]: !0
|
|
564
623
|
};
|
|
565
624
|
return this.customClass && (e[this.customClass] = !0), e;
|
|
566
625
|
},
|
|
@@ -582,8 +641,8 @@ const Ue = {
|
|
|
582
641
|
mounted() {
|
|
583
642
|
const { trigger: e, popup: t } = this.$refs;
|
|
584
643
|
this.trigger === "focus" && (this.focusEvents = this.addFocusEvents(this.triggerTarget ?? e)), this.hideWhenClickOutside && !this.alwaysShow && (this.closeEvents = R(window, {
|
|
585
|
-
mouseup: (
|
|
586
|
-
this.showPopup && !t.contains(
|
|
644
|
+
mouseup: (i) => {
|
|
645
|
+
this.showPopup && !t.contains(i.target) && !e.contains(i.target) && !this.triggerTarget?.contains(i.target) && (this.showPopup = !1);
|
|
587
646
|
},
|
|
588
647
|
blur: () => {
|
|
589
648
|
this.showPopup = !1;
|
|
@@ -603,47 +662,47 @@ const Ue = {
|
|
|
603
662
|
setTimeout(() => this.updatePosition(), 0);
|
|
604
663
|
return;
|
|
605
664
|
}
|
|
606
|
-
const
|
|
607
|
-
r && (r.style.width = getComputedStyle(
|
|
608
|
-
const o =
|
|
665
|
+
const i = this.triggerTarget ?? e, r = this.target === "popup" ? e : t.firstElementChild;
|
|
666
|
+
r && (r.style.width = getComputedStyle(i).width);
|
|
667
|
+
const o = i.getBoundingClientRect(), s = o.left + window.scrollX, n = o.top + window.scrollY, a = o.width, h = o.height, l = t.offsetWidth, u = t.offsetHeight;
|
|
609
668
|
let [p, g] = this.popupPlacement.split("-") || [];
|
|
610
669
|
if (this.keepInView) {
|
|
611
|
-
const
|
|
612
|
-
p === "top" ?
|
|
670
|
+
const x = window.innerWidth, q = window.innerHeight;
|
|
671
|
+
p === "top" ? n < u && (p = "bottom") : p === "bottom" ? q - n - h < u && (p = "top") : p === "left" ? s < l && (p = "right") : p === "right" && x - s - a < l && (p = "left"), g === "top" ? q - n < u && (g = "bottom") : g === "bottom" ? n + h < u && (g = "top") : g === "left" ? x - s < l && (g = "right") : g === "right" && s + a < l && (g = "left");
|
|
613
672
|
}
|
|
614
|
-
let
|
|
673
|
+
let y = 0, D = 0;
|
|
615
674
|
switch (p) {
|
|
616
675
|
case "top":
|
|
617
|
-
|
|
676
|
+
D -= u;
|
|
618
677
|
break;
|
|
619
678
|
case "left":
|
|
620
|
-
|
|
679
|
+
y -= l;
|
|
621
680
|
break;
|
|
622
681
|
case "right":
|
|
623
|
-
|
|
682
|
+
y += a;
|
|
624
683
|
break;
|
|
625
684
|
case "bottom":
|
|
626
|
-
|
|
685
|
+
D += h;
|
|
627
686
|
break;
|
|
628
687
|
}
|
|
629
688
|
switch (g) {
|
|
630
689
|
case "right":
|
|
631
|
-
|
|
690
|
+
y -= l - a;
|
|
632
691
|
break;
|
|
633
692
|
case "bottom":
|
|
634
|
-
|
|
693
|
+
D -= u - h;
|
|
635
694
|
break;
|
|
636
695
|
}
|
|
637
|
-
if (this.cover && (p === "top" ?
|
|
638
|
-
const
|
|
639
|
-
|
|
696
|
+
if (this.cover && (p === "top" ? D += h : p === "bottom" && (D -= h)), i !== e) {
|
|
697
|
+
const x = e.getBoundingClientRect();
|
|
698
|
+
y += s - x.left, D += n - x.top;
|
|
640
699
|
}
|
|
641
|
-
t.style.left = `${
|
|
700
|
+
t.style.left = `${y}px`, t.style.top = `${D}px`;
|
|
642
701
|
},
|
|
643
702
|
addFocusEvents(e) {
|
|
644
703
|
const t = e.querySelectorAll("input, textarea");
|
|
645
|
-
let
|
|
646
|
-
return
|
|
704
|
+
let i;
|
|
705
|
+
return ze(
|
|
647
706
|
R(t, {
|
|
648
707
|
focus: () => {
|
|
649
708
|
this.showPopup = !0, clearTimeout(this.blurTimer);
|
|
@@ -656,11 +715,11 @@ const Ue = {
|
|
|
656
715
|
}),
|
|
657
716
|
R(e, {
|
|
658
717
|
mousedown: (r) => {
|
|
659
|
-
r.target.matches("input, textarea, button") || (r.preventDefault(), r.stopPropagation()), r.target.matches(".dito-button-clear") || (
|
|
718
|
+
r.target.matches("input, textarea, button") || (r.preventDefault(), r.stopPropagation()), r.target.matches(".dito-button-clear") || (i = (this.triggerTarget ?? this.$refs.trigger).querySelector("input, textarea"), i && !i.hasAttribute("readonly") ? i.setAttribute("readonly", "true") : i = null);
|
|
660
719
|
},
|
|
661
720
|
mouseup: (r) => {
|
|
662
|
-
|
|
663
|
-
|
|
721
|
+
i && setTimeout(() => {
|
|
722
|
+
i.removeAttribute("readonly"), r.target.matches("input, textarea, button") || i.focus(), i = null;
|
|
664
723
|
}, 0);
|
|
665
724
|
}
|
|
666
725
|
})
|
|
@@ -678,32 +737,33 @@ const Ue = {
|
|
|
678
737
|
}, this.hideDelay) : this.showPopup = !1);
|
|
679
738
|
}
|
|
680
739
|
}
|
|
681
|
-
},
|
|
682
|
-
function
|
|
683
|
-
return d(),
|
|
684
|
-
class: b(["dito-input", s.classes])
|
|
740
|
+
}, oe = /* @__PURE__ */ P(Xe, [["render", qe]]), Ge = ["id", "type", "name", "title", "disabled", "readonly", "autofocus", "placeholder", "autocomplete", "aria-label"];
|
|
741
|
+
function Je(e, t, i, r, o, s) {
|
|
742
|
+
return d(), c("div", {
|
|
743
|
+
class: b(["dito-input", s.classes]),
|
|
744
|
+
onMousedown: t[1] || (t[1] = F((...n) => s.onMouseDown && s.onMouseDown(...n), ["prevent"]))
|
|
685
745
|
}, [
|
|
686
|
-
|
|
687
|
-
E(
|
|
688
|
-
id:
|
|
746
|
+
m(e.$slots, "prefix"),
|
|
747
|
+
E(f("input", M({
|
|
748
|
+
id: i.id,
|
|
689
749
|
ref: "input",
|
|
690
|
-
"onUpdate:modelValue": t[0] || (t[0] = (
|
|
691
|
-
type:
|
|
692
|
-
name:
|
|
693
|
-
title:
|
|
694
|
-
disabled:
|
|
695
|
-
readonly:
|
|
696
|
-
autofocus:
|
|
697
|
-
placeholder:
|
|
698
|
-
autocomplete:
|
|
699
|
-
"aria-label":
|
|
700
|
-
}, s.attributes), null, 16,
|
|
701
|
-
[
|
|
750
|
+
"onUpdate:modelValue": t[0] || (t[0] = (n) => o.currentValue = n),
|
|
751
|
+
type: i.type,
|
|
752
|
+
name: i.name,
|
|
753
|
+
title: i.title,
|
|
754
|
+
disabled: i.disabled,
|
|
755
|
+
readonly: i.readonly,
|
|
756
|
+
autofocus: i.autofocus,
|
|
757
|
+
placeholder: i.placeholder,
|
|
758
|
+
autocomplete: i.autocomplete,
|
|
759
|
+
"aria-label": i.title
|
|
760
|
+
}, s.attributes), null, 16, Ge), [
|
|
761
|
+
[de, o.currentValue]
|
|
702
762
|
]),
|
|
703
|
-
|
|
704
|
-
],
|
|
763
|
+
m(e.$slots, "suffix")
|
|
764
|
+
], 34);
|
|
705
765
|
}
|
|
706
|
-
const
|
|
766
|
+
const Qe = {
|
|
707
767
|
emits: ["update:modelValue"],
|
|
708
768
|
inheritAttrs: !1,
|
|
709
769
|
props: {
|
|
@@ -741,8 +801,8 @@ const Ke = {
|
|
|
741
801
|
return this.$refs.input;
|
|
742
802
|
},
|
|
743
803
|
size() {
|
|
744
|
-
const { size: e, min: t, max:
|
|
745
|
-
return e || r(t) || r(
|
|
804
|
+
const { size: e, min: t, max: i } = this.$attrs, r = (o) => o != null ? `${o}`.length : 0;
|
|
805
|
+
return e || r(t) || r(i) || void 0;
|
|
746
806
|
}
|
|
747
807
|
},
|
|
748
808
|
watch: {
|
|
@@ -759,18 +819,18 @@ const Ke = {
|
|
|
759
819
|
},
|
|
760
820
|
blur() {
|
|
761
821
|
this.input.blur();
|
|
822
|
+
},
|
|
823
|
+
onMouseDown() {
|
|
824
|
+
!this.disabled && !this.readonly && this.focus();
|
|
762
825
|
}
|
|
763
826
|
}
|
|
764
|
-
}, W = /* @__PURE__ */
|
|
765
|
-
function
|
|
766
|
-
return d(),
|
|
767
|
-
class: b(["dito-icon",
|
|
768
|
-
["dito-icon--" + n.name]: !0,
|
|
769
|
-
"dito-icon--disabled": n.disabled
|
|
770
|
-
}])
|
|
827
|
+
}, W = /* @__PURE__ */ P(Qe, [["render", Je]]);
|
|
828
|
+
function Ze(e, t, i, r, o, s) {
|
|
829
|
+
return d(), c("i", {
|
|
830
|
+
class: b(["dito-icon", s.classes])
|
|
771
831
|
}, null, 2);
|
|
772
832
|
}
|
|
773
|
-
const
|
|
833
|
+
const et = {
|
|
774
834
|
props: {
|
|
775
835
|
name: {
|
|
776
836
|
type: String,
|
|
@@ -780,66 +840,75 @@ const We = {
|
|
|
780
840
|
type: Boolean,
|
|
781
841
|
default: !1
|
|
782
842
|
}
|
|
843
|
+
},
|
|
844
|
+
computed: {
|
|
845
|
+
classes() {
|
|
846
|
+
const e = "dito-icon";
|
|
847
|
+
return {
|
|
848
|
+
[`${e}--${this.name}`]: !0,
|
|
849
|
+
[`${e}--disabled`]: this.disabled
|
|
850
|
+
};
|
|
851
|
+
}
|
|
783
852
|
}
|
|
784
|
-
}, j = /* @__PURE__ */
|
|
785
|
-
function
|
|
786
|
-
e?.setSelectionRange && (e.focus(), e.setSelectionRange(t,
|
|
853
|
+
}, j = /* @__PURE__ */ P(et, [["render", Ze]]);
|
|
854
|
+
function T(e, { start: t, end: i }) {
|
|
855
|
+
e?.setSelectionRange && (e.focus(), e.setSelectionRange(t, i));
|
|
787
856
|
}
|
|
788
|
-
function
|
|
857
|
+
function $(e) {
|
|
789
858
|
return e && "selectionStart" in e ? { start: e.selectionStart, end: e.selectionEnd } : null;
|
|
790
859
|
}
|
|
791
|
-
function
|
|
792
|
-
const
|
|
793
|
-
return d(), I(l,
|
|
860
|
+
function tt(e, t, i, r, o, s) {
|
|
861
|
+
const n = S("DitoIcon"), a = S("DitoInput"), h = S("DitoCalendar"), l = S("DitoTrigger");
|
|
862
|
+
return d(), I(l, M({
|
|
794
863
|
class: "dito-date-picker",
|
|
795
864
|
ref: "trigger",
|
|
796
865
|
show: o.showPopup,
|
|
797
866
|
"onUpdate:show": t[7] || (t[7] = (u) => o.showPopup = u),
|
|
798
867
|
trigger: "focus"
|
|
799
|
-
}, { transition:
|
|
800
|
-
trigger:
|
|
801
|
-
e.$slots.trigger ?
|
|
868
|
+
}, { transition: i.transition, placement: i.placement, disabled: i.disabled, target: i.target }), {
|
|
869
|
+
trigger: V(() => [
|
|
870
|
+
e.$slots.trigger ? m(e.$slots, "trigger", { key: 0 }) : (d(), I(a, M({
|
|
802
871
|
key: 1,
|
|
803
872
|
class: "dito-date-picker-input",
|
|
804
873
|
ref: "input",
|
|
805
874
|
modelValue: s.currentText,
|
|
806
875
|
"onUpdate:modelValue": t[1] || (t[1] = (u) => s.currentText = u),
|
|
807
876
|
type: "text"
|
|
808
|
-
}, { placeholder:
|
|
877
|
+
}, { placeholder: i.placeholder, disabled: i.disabled, focused: s.focused, ...e.$attrs }, {
|
|
809
878
|
onFocus: t[2] || (t[2] = (u) => s.onFocus(!0)),
|
|
810
879
|
onBlur: t[3] || (t[3] = (u) => s.onFocus(!1)),
|
|
811
880
|
onKeydown: s.onKeyDown,
|
|
812
|
-
onMousedown: t[4] || (t[4] =
|
|
881
|
+
onMousedown: t[4] || (t[4] = F((u) => s.onMouseDown(!1), ["stop"]))
|
|
813
882
|
}), {
|
|
814
|
-
|
|
815
|
-
|
|
883
|
+
prefix: V(() => [
|
|
884
|
+
m(e.$slots, "prefix")
|
|
816
885
|
]),
|
|
817
|
-
|
|
818
|
-
|
|
886
|
+
suffix: V(() => [
|
|
887
|
+
_(n, {
|
|
819
888
|
name: "calendar",
|
|
820
|
-
disabled:
|
|
821
|
-
onMousedown: t[0] || (t[0] =
|
|
889
|
+
disabled: i.disabled,
|
|
890
|
+
onMousedown: t[0] || (t[0] = F((u) => s.onMouseDown(!0), ["prevent"]))
|
|
822
891
|
}, null, 8, ["disabled"]),
|
|
823
|
-
|
|
892
|
+
m(e.$slots, "suffix")
|
|
824
893
|
]),
|
|
825
894
|
_: 3
|
|
826
895
|
}, 16, ["modelValue", "onKeydown"]))
|
|
827
896
|
]),
|
|
828
|
-
popup:
|
|
829
|
-
|
|
897
|
+
popup: V(() => [
|
|
898
|
+
_(h, M({
|
|
830
899
|
class: "dito-date-picker-popup",
|
|
831
900
|
ref: "calendar",
|
|
832
901
|
modelValue: o.currentValue,
|
|
833
902
|
"onUpdate:modelValue": t[5] || (t[5] = (u) => o.currentValue = u)
|
|
834
|
-
}, { locale:
|
|
903
|
+
}, { locale: i.locale, disabledDate: i.disabledDate }, {
|
|
835
904
|
onSelect: t[6] || (t[6] = (u) => o.showPopup = !1)
|
|
836
905
|
}), null, 16, ["modelValue"])
|
|
837
906
|
]),
|
|
838
907
|
_: 3
|
|
839
908
|
}, 16, ["show"]);
|
|
840
909
|
}
|
|
841
|
-
const
|
|
842
|
-
components: {
|
|
910
|
+
const st = {
|
|
911
|
+
components: { DitoTrigger: oe, DitoCalendar: Ke, DitoInput: W, DitoIcon: j },
|
|
843
912
|
emits: ["update:modelValue", "update:show", "change", "focus", "blur"],
|
|
844
913
|
inheritAttrs: !1,
|
|
845
914
|
props: {
|
|
@@ -882,10 +951,10 @@ const qe = {
|
|
|
882
951
|
},
|
|
883
952
|
currentText: {
|
|
884
953
|
get() {
|
|
885
|
-
return
|
|
954
|
+
return A(this.currentValue, this.formatOptions) || "";
|
|
886
955
|
},
|
|
887
956
|
set(e) {
|
|
888
|
-
const t =
|
|
957
|
+
const t = H(e, this.formatOptions);
|
|
889
958
|
t && (this.currentValue = t);
|
|
890
959
|
}
|
|
891
960
|
}
|
|
@@ -912,17 +981,17 @@ const qe = {
|
|
|
912
981
|
this.inputFocused = e, this.showPopup = e;
|
|
913
982
|
},
|
|
914
983
|
onKeyDown(e) {
|
|
915
|
-
const { ver: t, enter:
|
|
916
|
-
if (t ||
|
|
984
|
+
const { ver: t, enter: i } = K(e);
|
|
985
|
+
if (t || i) {
|
|
917
986
|
e.preventDefault();
|
|
918
|
-
const r =
|
|
987
|
+
const r = $(this.input)?.start, o = (s) => ie(this.currentText, s, this.formatOptions);
|
|
919
988
|
if (t && !this.showPopup)
|
|
920
989
|
this.showPopup = !0;
|
|
921
990
|
else {
|
|
922
991
|
const { calendar: s } = this.$refs;
|
|
923
992
|
if (s) {
|
|
924
|
-
const { name:
|
|
925
|
-
|
|
993
|
+
const { name: n, start: a } = o(r) || {};
|
|
994
|
+
n && s.navigate({ step: t, enter: i, mode: n, update: !0 }) && this.$nextTick(() => T(this.input, o(a)));
|
|
926
995
|
}
|
|
927
996
|
}
|
|
928
997
|
}
|
|
@@ -937,85 +1006,85 @@ const qe = {
|
|
|
937
1006
|
this.input.blur();
|
|
938
1007
|
}
|
|
939
1008
|
}
|
|
940
|
-
},
|
|
1009
|
+
}, it = /* @__PURE__ */ P(st, [["render", tt]]), nt = { class: "dito-time-picker-popup" }, ot = { class: "dito-time-picker-panel" }, rt = {
|
|
941
1010
|
class: "dito-time-picker-hour",
|
|
942
1011
|
ref: "hour"
|
|
943
|
-
},
|
|
1012
|
+
}, lt = ["onClick"], at = { class: "dito-time-picker-panel" }, ut = {
|
|
944
1013
|
class: "dito-time-picker-minute",
|
|
945
1014
|
ref: "minute"
|
|
946
|
-
},
|
|
1015
|
+
}, dt = ["onClick"], ct = { class: "dito-time-picker-panel" }, ht = {
|
|
947
1016
|
class: "dito-time-picker-second",
|
|
948
1017
|
ref: "second"
|
|
949
|
-
},
|
|
950
|
-
function
|
|
951
|
-
const
|
|
952
|
-
return d(), I(
|
|
1018
|
+
}, ft = ["onClick"];
|
|
1019
|
+
function pt(e, t, i, r, o, s) {
|
|
1020
|
+
const n = S("DitoIcon"), a = S("DitoInput"), h = S("DitoTrigger");
|
|
1021
|
+
return d(), I(h, M({
|
|
953
1022
|
class: "dito-time-picker",
|
|
954
1023
|
ref: "trigger",
|
|
955
1024
|
show: o.showPopup,
|
|
956
1025
|
"onUpdate:show": t[5] || (t[5] = (l) => o.showPopup = l),
|
|
957
1026
|
trigger: "focus"
|
|
958
|
-
}, { transition:
|
|
959
|
-
trigger:
|
|
960
|
-
e.$slots.trigger ?
|
|
1027
|
+
}, { transition: i.transition, placement: i.placement, disabled: i.disabled, target: i.target }), {
|
|
1028
|
+
trigger: V(() => [
|
|
1029
|
+
e.$slots.trigger ? m(e.$slots, "trigger", { key: 0 }) : (d(), I(a, M({
|
|
961
1030
|
key: 1,
|
|
962
1031
|
class: "dito-time-picker-input",
|
|
963
1032
|
ref: "input",
|
|
964
1033
|
modelValue: s.currentText,
|
|
965
1034
|
"onUpdate:modelValue": t[1] || (t[1] = (l) => s.currentText = l),
|
|
966
1035
|
type: "text"
|
|
967
|
-
}, { placeholder:
|
|
1036
|
+
}, { placeholder: i.placeholder, disabled: i.disabled, focused: s.focused, ...e.$attrs }, {
|
|
968
1037
|
onFocus: t[2] || (t[2] = (l) => s.onFocus(!0)),
|
|
969
1038
|
onBlur: t[3] || (t[3] = (l) => s.onFocus(!1)),
|
|
970
1039
|
onKeydown: s.onKeyDown,
|
|
971
|
-
onMousedown: t[4] || (t[4] =
|
|
1040
|
+
onMousedown: t[4] || (t[4] = F((l) => s.onMouseDown(!1), ["stop"]))
|
|
972
1041
|
}), {
|
|
973
|
-
|
|
974
|
-
|
|
1042
|
+
prefix: V(() => [
|
|
1043
|
+
m(e.$slots, "prefix")
|
|
975
1044
|
]),
|
|
976
|
-
|
|
977
|
-
|
|
1045
|
+
suffix: V(() => [
|
|
1046
|
+
_(n, {
|
|
978
1047
|
name: "clock",
|
|
979
|
-
disabled:
|
|
980
|
-
onMousedown: t[0] || (t[0] =
|
|
1048
|
+
disabled: i.disabled,
|
|
1049
|
+
onMousedown: t[0] || (t[0] = F((l) => s.onMouseDown(!0), ["prevent"]))
|
|
981
1050
|
}, null, 8, ["disabled"]),
|
|
982
|
-
|
|
1051
|
+
m(e.$slots, "suffix")
|
|
983
1052
|
]),
|
|
984
1053
|
_: 3
|
|
985
1054
|
}, 16, ["modelValue", "onKeydown"]))
|
|
986
1055
|
]),
|
|
987
|
-
popup:
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
(d(),
|
|
992
|
-
|
|
1056
|
+
popup: V(() => [
|
|
1057
|
+
f("div", nt, [
|
|
1058
|
+
f("div", ot, [
|
|
1059
|
+
f("ul", rt, [
|
|
1060
|
+
(d(), c(k, null, C(24, (l) => (d(), c(k, null, [
|
|
1061
|
+
i.disabledHour(l - 1) ? v("", !0) : (d(), c("li", {
|
|
993
1062
|
key: 0,
|
|
994
1063
|
class: b({ selected: s.hour === l - 1 }),
|
|
995
1064
|
onClick: (u) => s.hour = l - 1
|
|
996
|
-
}, w(s.leftPad(l - 1)), 11,
|
|
1065
|
+
}, w(s.leftPad(l - 1)), 11, lt))
|
|
997
1066
|
], 64))), 64))
|
|
998
1067
|
], 512)
|
|
999
1068
|
]),
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
(d(),
|
|
1003
|
-
|
|
1069
|
+
f("div", at, [
|
|
1070
|
+
f("ul", ut, [
|
|
1071
|
+
(d(), c(k, null, C(60, (l) => (d(), c(k, null, [
|
|
1072
|
+
i.disabledMinute(l - 1) ? v("", !0) : (d(), c("li", {
|
|
1004
1073
|
key: 0,
|
|
1005
1074
|
class: b({ selected: s.minute === l - 1 }),
|
|
1006
1075
|
onClick: (u) => s.minute = l - 1
|
|
1007
|
-
}, w(s.leftPad(l - 1)), 11,
|
|
1076
|
+
}, w(s.leftPad(l - 1)), 11, dt))
|
|
1008
1077
|
], 64))), 64))
|
|
1009
1078
|
], 512)
|
|
1010
1079
|
]),
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
(d(),
|
|
1014
|
-
|
|
1080
|
+
f("div", ct, [
|
|
1081
|
+
f("ul", ht, [
|
|
1082
|
+
(d(), c(k, null, C(60, (l) => (d(), c(k, null, [
|
|
1083
|
+
i.disabledSecond(l - 1) ? v("", !0) : (d(), c("li", {
|
|
1015
1084
|
key: 0,
|
|
1016
1085
|
class: b({ selected: s.second === l - 1 }),
|
|
1017
1086
|
onClick: (u) => s.second = l - 1
|
|
1018
|
-
}, w(s.leftPad(l - 1)), 11,
|
|
1087
|
+
}, w(s.leftPad(l - 1)), 11, ft))
|
|
1019
1088
|
], 64))), 64))
|
|
1020
1089
|
], 512)
|
|
1021
1090
|
])
|
|
@@ -1024,8 +1093,8 @@ function rt(e, t, n, r, o, s) {
|
|
|
1024
1093
|
_: 3
|
|
1025
1094
|
}, 16, ["show"]);
|
|
1026
1095
|
}
|
|
1027
|
-
const
|
|
1028
|
-
components: {
|
|
1096
|
+
const gt = {
|
|
1097
|
+
components: { DitoTrigger: oe, DitoInput: W, DitoIcon: j },
|
|
1029
1098
|
emits: ["update:modelValue", "update:show", "change", "focus", "blur"],
|
|
1030
1099
|
inheritAttrs: !1,
|
|
1031
1100
|
props: {
|
|
@@ -1071,10 +1140,10 @@ const lt = {
|
|
|
1071
1140
|
},
|
|
1072
1141
|
currentText: {
|
|
1073
1142
|
get() {
|
|
1074
|
-
return
|
|
1143
|
+
return A(this.currentValue, this.formatOptions) || "";
|
|
1075
1144
|
},
|
|
1076
1145
|
set(e) {
|
|
1077
|
-
const t =
|
|
1146
|
+
const t = H(e, this.formatOptions);
|
|
1078
1147
|
t && (this.currentValue = t);
|
|
1079
1148
|
}
|
|
1080
1149
|
},
|
|
@@ -1117,8 +1186,8 @@ const lt = {
|
|
|
1117
1186
|
+e != +this.modelValue && (this.$emit("update:modelValue", e), this.$emit("change", e), this.scrollAll(!0));
|
|
1118
1187
|
},
|
|
1119
1188
|
currentText() {
|
|
1120
|
-
const { input: e } = this, t =
|
|
1121
|
-
this.focused && !this.ignoreNextChange && t.start === t.end && this.$nextTick(() =>
|
|
1189
|
+
const { input: e } = this, t = $(e);
|
|
1190
|
+
this.focused && !this.ignoreNextChange && t.start === t.end && this.$nextTick(() => T(e, t)), this.ignoreNextChange = !1;
|
|
1122
1191
|
},
|
|
1123
1192
|
show(e) {
|
|
1124
1193
|
this.showPopup = e;
|
|
@@ -1141,13 +1210,13 @@ const lt = {
|
|
|
1141
1210
|
});
|
|
1142
1211
|
},
|
|
1143
1212
|
scrollAll(e) {
|
|
1144
|
-
const t = (
|
|
1145
|
-
const o = this.$refs[
|
|
1213
|
+
const t = (i, r) => {
|
|
1214
|
+
const o = this.$refs[i];
|
|
1146
1215
|
if (o) {
|
|
1147
1216
|
const s = o.scrollHeight / // First and last one add 3 times the margin.
|
|
1148
|
-
(o.childElementCount + 6),
|
|
1217
|
+
(o.childElementCount + 6), n = Math.round(r * s), a = Math.abs(o.scrollTop - n);
|
|
1149
1218
|
o.scrollTo({
|
|
1150
|
-
top:
|
|
1219
|
+
top: n,
|
|
1151
1220
|
behavior: e && a < 100 ? "smooth" : "auto"
|
|
1152
1221
|
});
|
|
1153
1222
|
}
|
|
@@ -1160,33 +1229,33 @@ const lt = {
|
|
|
1160
1229
|
this.inputFocused = e, this.showPopup = e;
|
|
1161
1230
|
},
|
|
1162
1231
|
onKeyDown(e) {
|
|
1163
|
-
const { input: t } = this,
|
|
1232
|
+
const { input: t } = this, i = $(t), { ver: r, enter: o } = K(e);
|
|
1164
1233
|
if (r || o) {
|
|
1165
1234
|
e.preventDefault();
|
|
1166
|
-
const s = (
|
|
1235
|
+
const s = (n) => ie(this.currentText, n, this.formatOptions);
|
|
1167
1236
|
if (r)
|
|
1168
1237
|
if (!this.showPopup)
|
|
1169
1238
|
this.showPopup = !0;
|
|
1170
1239
|
else {
|
|
1171
|
-
const { name:
|
|
1172
|
-
if (
|
|
1173
|
-
const
|
|
1174
|
-
this[
|
|
1240
|
+
const { name: n, start: a } = s(i.start) || {};
|
|
1241
|
+
if (n) {
|
|
1242
|
+
const h = this[n] + r, l = this.$refs[n].childElementCount;
|
|
1243
|
+
this[n] = h < 0 ? h + l : h >= l ? h - l : h, this.ignoreNextChange = !0, this.$nextTick(() => T(t, s(a)));
|
|
1175
1244
|
}
|
|
1176
1245
|
}
|
|
1177
1246
|
else o && (this.showPopup = !1);
|
|
1178
|
-
} else if (
|
|
1247
|
+
} else if (i.start === i.end) {
|
|
1179
1248
|
const { value: s } = t;
|
|
1180
|
-
let
|
|
1181
|
-
const a = (
|
|
1249
|
+
let n = i.start;
|
|
1250
|
+
const a = (h) => !isNaN(Number(h));
|
|
1182
1251
|
if (e.key.length === 1)
|
|
1183
|
-
if (a(e.key) &&
|
|
1184
|
-
s[
|
|
1252
|
+
if (a(e.key) && n < s.length)
|
|
1253
|
+
s[n] === ":" && a(s[n - 1]) && a(s[n - 2]) && n++, a(s[n]) && (a(s[n + 1]) || a(s[n - 1])) && (t.value = s.slice(0, n) + s.slice(n + 1), T(t, { start: n, end: n }));
|
|
1185
1254
|
else {
|
|
1186
|
-
const
|
|
1187
|
-
s.length ===
|
|
1255
|
+
const h = A(this.currentValue, this.formatOptions).length;
|
|
1256
|
+
s.length === h ? e.preventDefault() : s.length > h && (t.value = s.slice(0, h), T(t, i), e.preventDefault());
|
|
1188
1257
|
}
|
|
1189
|
-
else e.key === "Backspace" && (
|
|
1258
|
+
else e.key === "Backspace" && (n === 1 || [" ", ":"].includes(s[n - 2])) && (n === s.length || s[n] === ":" ? (n--, t.value = s.slice(0, n) + ((s[n - 1] ?? "") + "00") + s.slice(n + 1), T(t, { start: n, end: n })) : a(s[n]) && !a(+s[n + 1]) && (t.value = s.slice(0, n) + "0" + s.slice(n), T(t, { start: n, end: n })));
|
|
1190
1259
|
}
|
|
1191
1260
|
},
|
|
1192
1261
|
onMouseDown(e) {
|
|
@@ -1199,42 +1268,42 @@ const lt = {
|
|
|
1199
1268
|
this.input.blur();
|
|
1200
1269
|
}
|
|
1201
1270
|
}
|
|
1202
|
-
},
|
|
1271
|
+
}, mt = /* @__PURE__ */ P(gt, [["render", pt]]), yt = {
|
|
1203
1272
|
class: "dito-date-time-picker",
|
|
1204
1273
|
ref: "picker"
|
|
1205
1274
|
};
|
|
1206
|
-
function
|
|
1207
|
-
const
|
|
1208
|
-
return d(),
|
|
1209
|
-
|
|
1275
|
+
function wt(e, t, i, r, o, s) {
|
|
1276
|
+
const n = S("DitoIcon"), a = S("DitoInput"), h = S("DitoDatePicker"), l = S("DitoTimePicker");
|
|
1277
|
+
return d(), c("div", yt, [
|
|
1278
|
+
f("div", {
|
|
1210
1279
|
class: b(["dito-date-time-picker__inner", { "dito-date-time-picker__inner--focus": s.focused }])
|
|
1211
1280
|
}, [
|
|
1212
|
-
|
|
1281
|
+
_(a, M({
|
|
1213
1282
|
class: "dito-date-time-picker__input",
|
|
1214
1283
|
ref: "input",
|
|
1215
1284
|
modelValue: s.currentText,
|
|
1216
1285
|
"onUpdate:modelValue": t[1] || (t[1] = (u) => s.currentText = u),
|
|
1217
1286
|
type: "text"
|
|
1218
|
-
}, { placeholder:
|
|
1287
|
+
}, { placeholder: i.placeholder, disabled: i.disabled, focused: s.focused, ...e.$attrs }, {
|
|
1219
1288
|
onFocus: t[2] || (t[2] = (u) => s.onFocus(!0)),
|
|
1220
1289
|
onBlur: t[3] || (t[3] = (u) => s.onFocus(!1)),
|
|
1221
1290
|
onKeydown: s.onKeyDown,
|
|
1222
|
-
onMousedown: t[4] || (t[4] =
|
|
1291
|
+
onMousedown: t[4] || (t[4] = F((u) => s.onMouseDown(!1), ["stop"]))
|
|
1223
1292
|
}), {
|
|
1224
|
-
|
|
1225
|
-
|
|
1293
|
+
prefix: V(() => [
|
|
1294
|
+
m(e.$slots, "prefix")
|
|
1226
1295
|
]),
|
|
1227
|
-
|
|
1228
|
-
|
|
1296
|
+
suffix: V(() => [
|
|
1297
|
+
_(n, {
|
|
1229
1298
|
name: "calendar",
|
|
1230
|
-
disabled:
|
|
1231
|
-
onMousedown: t[0] || (t[0] =
|
|
1299
|
+
disabled: i.disabled,
|
|
1300
|
+
onMousedown: t[0] || (t[0] = F((u) => s.onMouseDown(!0), ["prevent"]))
|
|
1232
1301
|
}, null, 8, ["disabled"]),
|
|
1233
|
-
|
|
1302
|
+
m(e.$slots, "suffix")
|
|
1234
1303
|
]),
|
|
1235
1304
|
_: 3
|
|
1236
1305
|
}, 16, ["modelValue", "onKeydown"]),
|
|
1237
|
-
|
|
1306
|
+
_(h, M({
|
|
1238
1307
|
ref: "date",
|
|
1239
1308
|
modelValue: o.currentValue,
|
|
1240
1309
|
"onUpdate:modelValue": t[5] || (t[5] = (u) => o.currentValue = u),
|
|
@@ -1243,10 +1312,10 @@ function dt(e, t, n, r, o, s) {
|
|
|
1243
1312
|
placement: "bottom-left",
|
|
1244
1313
|
target: e.$refs.picker
|
|
1245
1314
|
}, s.attributes), {
|
|
1246
|
-
trigger:
|
|
1315
|
+
trigger: V(() => [...t[9] || (t[9] = [])]),
|
|
1247
1316
|
_: 1
|
|
1248
1317
|
}, 16, ["modelValue", "show", "target"]),
|
|
1249
|
-
|
|
1318
|
+
_(l, M({
|
|
1250
1319
|
ref: "time",
|
|
1251
1320
|
modelValue: o.currentValue,
|
|
1252
1321
|
"onUpdate:modelValue": t[7] || (t[7] = (u) => o.currentValue = u),
|
|
@@ -1255,14 +1324,14 @@ function dt(e, t, n, r, o, s) {
|
|
|
1255
1324
|
placement: "bottom-right",
|
|
1256
1325
|
target: e.$refs.picker
|
|
1257
1326
|
}, s.attributes), {
|
|
1258
|
-
trigger:
|
|
1327
|
+
trigger: V(() => [...t[10] || (t[10] = [])]),
|
|
1259
1328
|
_: 1
|
|
1260
1329
|
}, 16, ["modelValue", "show", "target"])
|
|
1261
1330
|
], 2)
|
|
1262
1331
|
], 512);
|
|
1263
1332
|
}
|
|
1264
|
-
const
|
|
1265
|
-
components: {
|
|
1333
|
+
const bt = {
|
|
1334
|
+
components: { DitoInput: W, DitoDatePicker: it, DitoTimePicker: mt, DitoIcon: j },
|
|
1266
1335
|
emits: ["update:modelValue", "change", "focus", "blur"],
|
|
1267
1336
|
inheritAttrs: !1,
|
|
1268
1337
|
props: {
|
|
@@ -1286,8 +1355,8 @@ const ct = {
|
|
|
1286
1355
|
},
|
|
1287
1356
|
computed: {
|
|
1288
1357
|
attributes() {
|
|
1289
|
-
const { transition: e, disabled: t, locale:
|
|
1290
|
-
return { transition: e, disabled: t, locale:
|
|
1358
|
+
const { transition: e, disabled: t, locale: i, formatOptions: r } = this;
|
|
1359
|
+
return { transition: e, disabled: t, locale: i, format: r };
|
|
1291
1360
|
},
|
|
1292
1361
|
focused() {
|
|
1293
1362
|
return this.inputFocused || this.showDate || this.showTime;
|
|
@@ -1296,7 +1365,7 @@ const ct = {
|
|
|
1296
1365
|
return this.$refs.input.input;
|
|
1297
1366
|
},
|
|
1298
1367
|
formatOptions() {
|
|
1299
|
-
return
|
|
1368
|
+
return pe(
|
|
1300
1369
|
{
|
|
1301
1370
|
locale: this.locale,
|
|
1302
1371
|
time: O.time,
|
|
@@ -1305,7 +1374,7 @@ const ct = {
|
|
|
1305
1374
|
{
|
|
1306
1375
|
date: {
|
|
1307
1376
|
month: "short",
|
|
1308
|
-
format: (e, t,
|
|
1377
|
+
format: (e, t, i) => t === "literal" && /\bat\b/.test(e) ? ", " : this.format?.date?.format?.(e, t, i) ?? e
|
|
1309
1378
|
}
|
|
1310
1379
|
},
|
|
1311
1380
|
this.format
|
|
@@ -1322,13 +1391,13 @@ const ct = {
|
|
|
1322
1391
|
},
|
|
1323
1392
|
currentText: {
|
|
1324
1393
|
get() {
|
|
1325
|
-
return
|
|
1394
|
+
return A(this.currentValue, this.formatOptions) || "";
|
|
1326
1395
|
},
|
|
1327
1396
|
set(e) {
|
|
1328
|
-
const t =
|
|
1397
|
+
const t = H(e, this.formatOptions);
|
|
1329
1398
|
if (t) {
|
|
1330
|
-
const
|
|
1331
|
-
this.currentValue = t, this.$nextTick(() =>
|
|
1399
|
+
const i = $(this.input);
|
|
1400
|
+
this.currentValue = t, this.$nextTick(() => T(this.input, i));
|
|
1332
1401
|
}
|
|
1333
1402
|
}
|
|
1334
1403
|
}
|
|
@@ -1356,8 +1425,8 @@ const ct = {
|
|
|
1356
1425
|
this.$refs[t].onKeyDown(e), e.defaultPrevented ? this.closedMode = t : t !== this.closedMode && this.updatePopups(t);
|
|
1357
1426
|
},
|
|
1358
1427
|
getMode(e = null) {
|
|
1359
|
-
const { start: t } =
|
|
1360
|
-
return this.timeIndex === null || t +
|
|
1428
|
+
const { start: t } = $(this.input), { hor: i } = K(e);
|
|
1429
|
+
return this.timeIndex === null || t + i < this.timeIndex ? "date" : "time";
|
|
1361
1430
|
},
|
|
1362
1431
|
updatePopups(e = this.getMode()) {
|
|
1363
1432
|
e && (this.closedMode = null), this.showDate = e === "date", this.showTime = e === "time";
|
|
@@ -1369,32 +1438,32 @@ const ct = {
|
|
|
1369
1438
|
this.input.blur();
|
|
1370
1439
|
}
|
|
1371
1440
|
}
|
|
1372
|
-
},
|
|
1441
|
+
}, It = /* @__PURE__ */ P(bt, [["render", wt]]), Dt = { class: "dito-pagination" }, kt = {
|
|
1373
1442
|
key: 0,
|
|
1374
1443
|
class: "dito-pagination-total"
|
|
1375
|
-
},
|
|
1444
|
+
}, vt = {
|
|
1376
1445
|
key: 1,
|
|
1377
1446
|
class: "dito-buttons dito-buttons--round"
|
|
1378
|
-
},
|
|
1379
|
-
function
|
|
1380
|
-
return d(),
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
], 64)) :
|
|
1385
|
-
])) :
|
|
1386
|
-
s.numPages > 1 ? (d(),
|
|
1387
|
-
(d(!0),
|
|
1388
|
-
class: b(["dito-button", s.getButtonClasses(
|
|
1389
|
-
disabled:
|
|
1390
|
-
onClick: (a) => s.onClickButton(
|
|
1447
|
+
}, Vt = ["disabled", "onClick"], St = { key: 0 };
|
|
1448
|
+
function Mt(e, t, i, r, o, s) {
|
|
1449
|
+
return d(), c("div", Dt, [
|
|
1450
|
+
i.showTotal ? (d(), c("div", kt, [
|
|
1451
|
+
i.total > 0 ? (d(), c(k, { key: 0 }, [
|
|
1452
|
+
Y(w(s.first) + " – " + w(s.last) + " / " + w(i.total), 1)
|
|
1453
|
+
], 64)) : v("", !0)
|
|
1454
|
+
])) : v("", !0),
|
|
1455
|
+
s.numPages > 1 ? (d(), c("div", vt, [
|
|
1456
|
+
(d(!0), c(k, null, C(s.buttons, (n) => (d(), c("button", {
|
|
1457
|
+
class: b(["dito-button", s.getButtonClasses(n)]),
|
|
1458
|
+
disabled: n.disabled,
|
|
1459
|
+
onClick: (a) => s.onClickButton(n)
|
|
1391
1460
|
}, [
|
|
1392
|
-
|
|
1393
|
-
], 10,
|
|
1394
|
-
])) :
|
|
1461
|
+
n.text ? (d(), c("span", St, w(n.text), 1)) : v("", !0)
|
|
1462
|
+
], 10, Vt))), 256))
|
|
1463
|
+
])) : v("", !0)
|
|
1395
1464
|
]);
|
|
1396
1465
|
}
|
|
1397
|
-
const
|
|
1466
|
+
const Pt = {
|
|
1398
1467
|
emits: ["update:page"],
|
|
1399
1468
|
props: {
|
|
1400
1469
|
total: { type: Number, default: 0 },
|
|
@@ -1420,31 +1489,31 @@ const wt = {
|
|
|
1420
1489
|
return Math.ceil(this.total / this.pageSize);
|
|
1421
1490
|
},
|
|
1422
1491
|
buttons() {
|
|
1423
|
-
const { showPrev: e, showNext: t, currentPage:
|
|
1424
|
-
let s = 1,
|
|
1425
|
-
r <= o ?
|
|
1492
|
+
const { showPrev: e, showNext: t, currentPage: i, numPages: r } = this, o = e + t + 1;
|
|
1493
|
+
let s = 1, n = 1;
|
|
1494
|
+
r <= o ? n = r : i <= e + 1 ? n = o : i >= r - t ? (n = r, s = r - o + 1) : (s = i - e, n = i + t);
|
|
1426
1495
|
const a = [];
|
|
1427
1496
|
a.push({
|
|
1428
|
-
index:
|
|
1497
|
+
index: i - 1,
|
|
1429
1498
|
type: "prev",
|
|
1430
|
-
disabled:
|
|
1499
|
+
disabled: i <= 1
|
|
1431
1500
|
}), s >= 2 && a.push({ index: 1, text: 1 }), s > 2 && a.push({
|
|
1432
|
-
index: Math.max(1,
|
|
1501
|
+
index: Math.max(1, i - 10),
|
|
1433
1502
|
type: "ellipsis-prev"
|
|
1434
1503
|
});
|
|
1435
|
-
for (let
|
|
1504
|
+
for (let h = s; h <= n; h++)
|
|
1436
1505
|
a.push({
|
|
1437
|
-
index:
|
|
1438
|
-
text:
|
|
1439
|
-
active:
|
|
1506
|
+
index: h,
|
|
1507
|
+
text: h,
|
|
1508
|
+
active: h === i
|
|
1440
1509
|
});
|
|
1441
|
-
return
|
|
1442
|
-
index: Math.min(r,
|
|
1510
|
+
return n < r - 1 && a.push({
|
|
1511
|
+
index: Math.min(r, i + 10),
|
|
1443
1512
|
type: "ellipsis-next"
|
|
1444
|
-
}),
|
|
1445
|
-
index:
|
|
1513
|
+
}), n <= r - 1 && a.push({ index: r, text: r }), a.push({
|
|
1514
|
+
index: i + 1,
|
|
1446
1515
|
type: "next",
|
|
1447
|
-
disabled:
|
|
1516
|
+
disabled: i >= r
|
|
1448
1517
|
}), a;
|
|
1449
1518
|
}
|
|
1450
1519
|
},
|
|
@@ -1474,39 +1543,39 @@ const wt = {
|
|
|
1474
1543
|
e.index && !e.disabled && e.index !== this.currentPage && (this.currentPage = e.index);
|
|
1475
1544
|
}
|
|
1476
1545
|
}
|
|
1477
|
-
},
|
|
1546
|
+
}, Ot = /* @__PURE__ */ P(Pt, [["render", Mt]]), xt = { class: "dito-switch__pane" }, Tt = ["id", "name", "disabled"], Ct = {
|
|
1478
1547
|
key: 0,
|
|
1479
1548
|
class: "dito-switch__label"
|
|
1480
1549
|
};
|
|
1481
|
-
function
|
|
1482
|
-
return d(),
|
|
1550
|
+
function _t(e, t, i, r, o, s) {
|
|
1551
|
+
return d(), c("div", {
|
|
1483
1552
|
class: b(["dito-switch", s.classes]),
|
|
1484
1553
|
style: U(s.styles)
|
|
1485
1554
|
}, [
|
|
1486
|
-
|
|
1487
|
-
E(
|
|
1488
|
-
id:
|
|
1555
|
+
f("div", xt, [
|
|
1556
|
+
E(f("input", M({
|
|
1557
|
+
id: i.id,
|
|
1489
1558
|
ref: "input"
|
|
1490
1559
|
}, s.attributes, {
|
|
1491
|
-
"onUpdate:modelValue": t[0] || (t[0] = (
|
|
1560
|
+
"onUpdate:modelValue": t[0] || (t[0] = (n) => o.checked = n),
|
|
1492
1561
|
type: "checkbox",
|
|
1493
|
-
name:
|
|
1494
|
-
disabled:
|
|
1495
|
-
}), null, 16,
|
|
1496
|
-
[
|
|
1562
|
+
name: i.name,
|
|
1563
|
+
disabled: i.disabled
|
|
1564
|
+
}), null, 16, Tt), [
|
|
1565
|
+
[ce, o.checked]
|
|
1497
1566
|
]),
|
|
1498
|
-
t[1] || (t[1] =
|
|
1499
|
-
|
|
1500
|
-
o.checked ?
|
|
1501
|
-
|
|
1502
|
-
]) :
|
|
1503
|
-
|
|
1567
|
+
t[1] || (t[1] = f("div", { class: "dito-switch__button" }, null, -1)),
|
|
1568
|
+
i.labels ? (d(), c("span", Ct, [
|
|
1569
|
+
o.checked ? m(e.$slots, "checked", { key: 0 }, () => [
|
|
1570
|
+
Y(w(i.labels.checked || "on"), 1)
|
|
1571
|
+
]) : m(e.$slots, "unchecked", { key: 1 }, () => [
|
|
1572
|
+
Y(w(i.labels.unchecked || "off"), 1)
|
|
1504
1573
|
])
|
|
1505
|
-
])) :
|
|
1574
|
+
])) : v("", !0)
|
|
1506
1575
|
])
|
|
1507
1576
|
], 6);
|
|
1508
1577
|
}
|
|
1509
|
-
const
|
|
1578
|
+
const Ft = {
|
|
1510
1579
|
emits: ["update:modelValue", "change"],
|
|
1511
1580
|
inheritAttrs: !1,
|
|
1512
1581
|
props: {
|
|
@@ -1533,9 +1602,9 @@ const Vt = {
|
|
|
1533
1602
|
];
|
|
1534
1603
|
},
|
|
1535
1604
|
styles() {
|
|
1536
|
-
const { labels: { checked: e, unchecked: t } = {} } = this,
|
|
1605
|
+
const { labels: { checked: e, unchecked: t } = {} } = this, i = Math.max(0, e?.length, t?.length);
|
|
1537
1606
|
return {
|
|
1538
|
-
"--switch-width":
|
|
1607
|
+
"--switch-width": i ? `${i * 1.5}rem` : null
|
|
1539
1608
|
};
|
|
1540
1609
|
},
|
|
1541
1610
|
attributes() {
|
|
@@ -1556,72 +1625,64 @@ const Vt = {
|
|
|
1556
1625
|
this.$refs.input.focus();
|
|
1557
1626
|
}
|
|
1558
1627
|
}
|
|
1559
|
-
},
|
|
1560
|
-
function
|
|
1561
|
-
return e ?
|
|
1628
|
+
}, At = /* @__PURE__ */ P(Ft, [["render", _t]]);
|
|
1629
|
+
function re({ enabled: e }, { slots: t }) {
|
|
1630
|
+
return e ? he(Z, Bt, t) : t.default();
|
|
1562
1631
|
}
|
|
1563
|
-
|
|
1632
|
+
re.props = {
|
|
1564
1633
|
enabled: { type: Boolean, default: !0 }
|
|
1565
1634
|
};
|
|
1566
|
-
const
|
|
1635
|
+
const Lt = re, B = (e, t) => Object.assign(e.style, t), N = (e) => setTimeout(e, 0), Q = (e) => getComputedStyle(e).height, Bt = {
|
|
1567
1636
|
name: "dito-height",
|
|
1568
1637
|
onAfterEnter(e) {
|
|
1569
|
-
|
|
1638
|
+
N(() => B(e, { height: null }));
|
|
1570
1639
|
},
|
|
1571
1640
|
onEnter(e) {
|
|
1572
1641
|
const { width: t } = getComputedStyle(e);
|
|
1573
|
-
|
|
1642
|
+
B(e, {
|
|
1574
1643
|
width: t,
|
|
1575
1644
|
position: "absolute",
|
|
1576
1645
|
visibility: "hidden",
|
|
1577
1646
|
height: "auto"
|
|
1578
|
-
}),
|
|
1579
|
-
const { height:
|
|
1580
|
-
|
|
1647
|
+
}), N(() => {
|
|
1648
|
+
const { height: i } = getComputedStyle(e);
|
|
1649
|
+
B(e, {
|
|
1581
1650
|
width: null,
|
|
1582
1651
|
position: null,
|
|
1583
1652
|
visibility: null,
|
|
1584
1653
|
height: 0
|
|
1585
|
-
}),
|
|
1654
|
+
}), Q(e), N(() => B(e, { height: i }));
|
|
1586
1655
|
});
|
|
1587
1656
|
},
|
|
1588
1657
|
onLeave(e) {
|
|
1589
1658
|
const { height: t } = getComputedStyle(e);
|
|
1590
|
-
|
|
1659
|
+
B(e, { height: t }), Q(e), N(() => B(e, { height: 0 }));
|
|
1591
1660
|
}
|
|
1592
1661
|
};
|
|
1593
|
-
function Pt(e) {
|
|
1594
|
-
return e && Z(e).some((t) => t.type !== ue);
|
|
1595
|
-
}
|
|
1596
|
-
function Bt(e, t = {}) {
|
|
1597
|
-
return e = ee(e) ? de()[e] : e, Pt(e?.(t));
|
|
1598
|
-
}
|
|
1599
|
-
function Nt(e) {
|
|
1600
|
-
return ce({ value: e });
|
|
1601
|
-
}
|
|
1602
1662
|
export {
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1663
|
+
Et as DitoButton,
|
|
1664
|
+
Ke as DitoCalendar,
|
|
1665
|
+
it as DitoDatePicker,
|
|
1666
|
+
It as DitoDateTimePicker,
|
|
1667
|
+
j as DitoIcon,
|
|
1668
|
+
W as DitoInput,
|
|
1669
|
+
Ot as DitoPagination,
|
|
1670
|
+
At as DitoSwitch,
|
|
1671
|
+
mt as DitoTimePicker,
|
|
1672
|
+
oe as DitoTrigger,
|
|
1673
|
+
Lt as TransitionHeight,
|
|
1613
1674
|
R as addEvents,
|
|
1614
1675
|
L as alterDate,
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1676
|
+
ze as combineEvents,
|
|
1677
|
+
se as describeDate,
|
|
1678
|
+
ie as getDatePartAtPosition,
|
|
1679
|
+
We as getKey,
|
|
1619
1680
|
K as getKeyNavigation,
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1681
|
+
$ as getSelection,
|
|
1682
|
+
G as hasSlotContent,
|
|
1683
|
+
ge as hasVNodeContent,
|
|
1684
|
+
H as parseDate,
|
|
1685
|
+
Yt as raw,
|
|
1686
|
+
T as setSelection
|
|
1626
1687
|
};
|
|
1627
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by11aS5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzL2RhdGUuanMiLCIuLi9zcmMvY29tcG9uZW50cy9DYWxlbmRhci52dWUiLCIuLi9zcmMvdXRpbHMvZXZlbnQuanMiLCIuLi9zcmMvdXRpbHMvdHJpZ2dlci5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1RyaWdnZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvSW5wdXRGaWVsZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9JY29uLnZ1ZSIsIi4uL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EYXRlUGlja2VyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1RpbWVQaWNrZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGF0ZVRpbWVQaWNrZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9Td2l0Y2hCdXR0b24udnVlIiwiLi4vc3JjL3RyYW5zaXRpb25zL1RyYW5zaXRpb25IZWlnaHQudnVlIiwiLi4vc3JjL3V0aWxzL3Z1ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVEYXRlKGRhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBkYXRlPy5nZXRGdWxsWWVhcigpID8/IDAsXG4gICAgbW9udGg6IGRhdGU/LmdldE1vbnRoKCkgPz8gMCxcbiAgICBkYXk6IGRhdGU/LmdldERhdGUoKSA/PyAwLFxuICAgIGhvdXI6IGRhdGU/LmdldEhvdXJzKCkgPz8gMCxcbiAgICBtaW51dGU6IGRhdGU/LmdldE1pbnV0ZXMoKSA/PyAwLFxuICAgIHNlY29uZDogZGF0ZT8uZ2V0U2Vjb25kcygpID8/IDAsXG4gICAgbWlsbGlzZWNvbmQ6IGRhdGU/LmdldE1pbGxpc2Vjb25kcygpID8/IDBcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWx0ZXJEYXRlKGRhdGUsIG92ZXJyaWRlcyA9IHt9KSB7XG4gIHJldHVybiBuZXcgRGF0ZSguLi5PYmplY3QudmFsdWVzKHsgLi4uZGVzY3JpYmVEYXRlKGRhdGUpLCAuLi5vdmVycmlkZXMgfSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUoc3RyaW5nLCB7XG4gIGxvY2FsZSA9ICdlbi1VUycsXG4gIGRhdGUgPSB0cnVlLFxuICB0aW1lID0gdHJ1ZVxufSA9IHt9KSB7XG4gIGNvbnN0IHRpbWVEZWZhdWx0ID0gdGltZSA/IG51bGwgOiAwXG4gIGxldCBbXG4gICAgZGF5LFxuICAgIHNlcDEsXG4gICAgbW9udGgsXG4gICAgc2VwMixcbiAgICB5ZWFyLFxuICAgICxcbiAgICBob3VyID0gdGltZURlZmF1bHQsXG4gICAgLFxuICAgIG1pbnV0ZSA9IHRpbWVEZWZhdWx0LFxuICAgICxcbiAgICBzZWNvbmQgPSB0aW1lRGVmYXVsdCxcbiAgICAsXG4gICAgbWlsbGlzZWNvbmQgPSB0aW1lRGVmYXVsdFxuICBdID0gZ2V0RGF0ZVBhcnRzKHN0cmluZywgeyBkYXRlLCB0aW1lIH0pXG4gIGlmICh5ZWFyICYmIHllYXIubGVuZ3RoID49IDQpIHtcbiAgICBpZiAobG9jYWxlID09PSAnZW4tVVMnICYmIHNlcDEgPT09ICcvJyAmJiBzZXAyID09PSAnLycpIHtcbiAgICAgIC8vIEFtZXJpY2FuIGZvcm1hdDogTU0vREQvWVlZWVxuICAgICAgO1tkYXksIG1vbnRoXSA9IFttb250aCwgZGF5XVxuICAgIH1cbiAgICBtb250aCA9IGdldE1vbnRoSW5kZXgobW9udGgsIHsgbG9jYWxlIH0pXG4gICAgY29uc3QgaXNWYWxpZFRpbWVQYXJ0ID0gcGFydCA9PiBwYXJ0ID09PSBudWxsIHx8IHBhcnQubGVuZ3RoID09PSAyXG4gICAgaWYgKFxuICAgICAgbW9udGggIT09IG51bGwgJiYgKFxuICAgICAgICAhdGltZSB8fCAoXG4gICAgICAgICAgaXNWYWxpZFRpbWVQYXJ0KGhvdXIpICYmXG4gICAgICAgICAgaXNWYWxpZFRpbWVQYXJ0KG1pbnV0ZSkgJiZcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQoc2Vjb25kKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICAgICt5ZWFyLFxuICAgICAgICArbW9udGgsXG4gICAgICAgICtkYXksXG4gICAgICAgICtob3VyLFxuICAgICAgICArbWludXRlLFxuICAgICAgICArc2Vjb25kLFxuICAgICAgICArbWlsbGlzZWNvbmRcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVQYXJ0QXRQb3NpdGlvbihzdHJpbmcsIHBvc2l0aW9uLCB7XG4gIGxvY2FsZSA9ICdlbi1VUycsXG4gIGRhdGUgPSB0cnVlLFxuICB0aW1lID0gdHJ1ZVxufSA9IHt9KSB7XG4gIGNvbnN0IHBhcnRzID0gZ2V0RGF0ZVBhcnRzKHN0cmluZywgeyBkYXRlLCB0aW1lIH0pXG5cbiAgY29uc3QgZ2V0UG9zaXRpb24gPSAocG9zaXRpb24sIGxlbmd0aCA9IHBhcnRzLmxlbmd0aCkgPT4ge1xuICAgIGxldCBwb3MgPSAwXG4gICAgbGV0IGluZGV4ID0gMFxuICAgIHdoaWxlICgocG9zaXRpb24gPT09IG51bGwgfHwgcG9zIDw9IHBvc2l0aW9uKSAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgICAgcG9zICs9IHBhcnRzW2luZGV4KytdPy5sZW5ndGggPz8gMFxuICAgIH1cbiAgICByZXR1cm4geyBwb3NpdGlvbjogcG9zLCBpbmRleCB9XG4gIH1cblxuICAvLyBUaW1lIHN0YXJ0cyBhdCBpbmRleCA2LCBkdWUgdG8gdGhlIHNlcGFyYXRvciBhZnRlciB0aGUgZGF0ZS5cbiAgY29uc3Qgb2Zmc2V0ID0gIWRhdGUgPyBnZXRQb3NpdGlvbihudWxsLCA2KS5wb3NpdGlvbiA6IDBcbiAgcG9zaXRpb24gKz0gb2Zmc2V0XG5cbiAgbGV0IHsgaW5kZXggfSA9IGdldFBvc2l0aW9uKHBvc2l0aW9uKVxuXG4gIGNvbnN0IGlzVVMgPSBsb2NhbGUgPT09ICdlbi1VUydcbiAgY29uc3QgdmFsdWVzID0gW1xuICAgIGlzVVMgPyAnbW9udGgnIDogJ2RheScsXG4gICAgbnVsbCxcbiAgICBpc1VTID8gJ2RheScgOiAnbW9udGgnLFxuICAgIG51bGwsXG4gICAgJ3llYXInLFxuICAgIG51bGwsXG4gICAgJ2hvdXInLFxuICAgIG51bGwsXG4gICAgJ21pbnV0ZScsXG4gICAgbnVsbCxcbiAgICAnc2Vjb25kJyxcbiAgICBudWxsLFxuICAgICdtaWxsaXNlY29uZCdcbiAgXVxuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIGlmICh2YWx1ZXNbaW5kZXhdKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGdldFBvc2l0aW9uKG51bGwsIGluZGV4KS5wb3NpdGlvbiAtIG9mZnNldFxuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBwYXJ0c1tpbmRleF0ubGVuZ3RoXG4gICAgICByZXR1cm4geyBuYW1lOiB2YWx1ZXNbaW5kZXhdLCBzdGFydCwgZW5kIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZVBhcnRzKHN0cmluZywgeyBkYXRlID0gdHJ1ZSwgdGltZSA9IHRydWUgfSA9IHt9KSB7XG4gIGNvbnN0IHBhcnRzID0gc3RyaW5nPy5zcGxpdCgvKFtcXHMuLDovXSspLykgfHwgW11cbiAgaWYgKCFkYXRlKSB7XG4gICAgLy8gQWRkIGR1bW15IGRhdGUgcGFydHMgdG8gbWFrZSBzdXJlIHdlIGdldCBhIHRpbWUtb25seSBkYXRlLlxuICAgIHBhcnRzLnVuc2hpZnQoJzEnLCAnLicsICcxJywgJy4nLCAnMjAwMCcsICcgJylcbiAgfVxuICBpZiAoIXRpbWUgJiYgcGFydHMubGVuZ3RoID4gNSkge1xuICAgIHBhcnRzLmxlbmd0aCA9IDVcbiAgfVxuICByZXR1cm4gcGFydHNcbn1cblxuZnVuY3Rpb24gZ2V0TW9udGhJbmRleChtb250aCwgeyBsb2NhbGUgPSAnZW4tVVMnIH0gPSB7fSkge1xuICBjb25zdCB2YWx1ZSA9ICttb250aFxuICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZSAtIDFcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1vbnRoLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gIGlmIChtYXRjaC5sZW5ndGggPCAzKSByZXR1cm4gbnVsbFxuICBjb25zdCBzaG9ydEZvcm1hdCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgeyBtb250aDogJ3Nob3J0JyB9KVxuICBjb25zdCBsb25nRm9ybWF0ID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCB7IG1vbnRoOiAnbG9uZycgfSlcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDIwMDAsIGksIDEpXG4gICAgaWYgKFxuICAgICAgc2hvcnRGb3JtYXQuZm9ybWF0KGRhdGUpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChtYXRjaCkgfHxcbiAgICAgIGxvbmdGb3JtYXQuZm9ybWF0KGRhdGUpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChtYXRjaClcbiAgICApIHtcbiAgICAgIHJldHVybiBpXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNhbGVuZGFyXG4gIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgLmRpdG8tY2FsZW5kYXItaW5uZXJcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiB0cnVlIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCdtb250aCcpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogdHJ1ZSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci13ZWVrZGF5c1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ3ZWVrZGF5IGluIHdlZWtkYXlOYW1lc1wiXG4gICAgICAgICAgICApIHt7IHdlZWtkYXkuc2hvcnQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJkYXRlIGluIGRhdGVSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImRhdGUuc3RhdGUgIT09ICdkaXNhYmxlZCcgJiYgc2VsZWN0RGF0ZShkYXRlLmRhdGUpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZS50ZXh0IH19XG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3Qtbm93KFxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA6dGl0bGU9XCJkYXRlVG9TdHJpbmcobmV3IERhdGUoKSlcIlxuICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShuZXcgRGF0ZSgpKVwiXG4gICAgICAgICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAnbW9udGgnXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiB0cnVlIH0pIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1tb250aHNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiKG1vbnRoLCBpbmRleCkgaW4gbW9udGhOYW1lc1wiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldE1vbnRoQ2xhc3MoaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0TW9udGgoaW5kZXgpXCJcbiAgICAgICAgICAgICkge3sgbW9udGguc2hvcnQgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ3llYXInXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhbiB7eyBkZWNhZGVUb1N0cmluZyhjdXJyZW50VmFsdWUpIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXllYXJzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cInllYXIgaW4geWVhclJhbmdlXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0WWVhckNsYXNzKHllYXIpXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0WWVhcih5ZWFyKVwiXG4gICAgICAgICAgICApIHt7IHllYXIgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZXNjcmliZURhdGUsIGFsdGVyRGF0ZSB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnc2VsZWN0J10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWREYXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIG1vZGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZGF5JyB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IHdlZWtkYXlOYW1lcywgbW9udGhOYW1lcyB9ID0gZ2V0TG9jYWxlTmFtZXModGhpcy5sb2NhbGUpXG4gICAgcmV0dXJuIHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXMsXG4gICAgICBkYXRlUmFuZ2U6IFtdLFxuICAgICAgeWVhclJhbmdlOiBbXSxcbiAgICAgIGN1cnJlbnRWYWx1ZTogKFxuICAgICAgICB0aGlzLm1vZGVsVmFsdWUgfHxcbiAgICAgICAgLy8gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIHVzZSBjdXJyZW50IGRhdGUgYnV0IGNsZWFyIHRpbWUgZmllbGRzOlxuICAgICAgICBhbHRlckRhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSlcbiAgICAgICksXG4gICAgICBjdXJyZW50TW9kZTogdGhpcy5tb2RlXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0byB8fCBuZXcgRGF0ZSgpXG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRpc2FibGVkRGF0ZTogJ3VwZGF0ZURhdGVSYW5nZScsXG5cbiAgICBtb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRNb250aENsYXNzKG1vbnRoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6IChcbiAgICAgICAgICB0aGlzLm1vZGVsVmFsdWUgJiZcbiAgICAgICAgICBtb250aCA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldE1vbnRoKCkgJiZcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgICApLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOiBtb250aCA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRZZWFyQ2xhc3MoeWVhcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOiAoXG4gICAgICAgICAgdGhpcy5tb2RlbFZhbHVlICYmIHllYXIgPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6IHllYXIgPT09IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0RGF0ZShvdmVycmlkZXMsIHVwZGF0ZSA9IGZhbHNlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGFsdGVyRGF0ZSh0aGlzLmN1cnJlbnRWYWx1ZSwgb3ZlcnJpZGVzKVxuICAgICAgaWYgKHVwZGF0ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdGVwRGVjYWRlKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogMTBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNldE1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9LFxuXG4gICAgc3RlcE1vbnRoKHN0ZXApIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IHllYXIsIG1vbnRoIH0gPSB0aGlzLmdldFllYXJNb250aChcbiAgICAgICAgY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgc3RlcFxuICAgICAgKVxuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgbW9udGgsXG4gICAgICAgIGRheTogTWF0aC5taW4oXG4gICAgICAgICAgdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCksXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RGF0ZSgpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHN0ZXBZZWFyKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZWxlY3REYXRlKGRhdGUpIHtcbiAgICAgIHRoaXMuc2V0RGF0ZShkZXNjcmliZURhdGUoZGF0ZSksIHRydWUpXG4gICAgICB0aGlzLiRlbWl0KCdzZWxlY3QnKVxuICAgIH0sXG5cbiAgICBzZWxlY3RNb250aChtb250aCkge1xuICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgLy8gU2V0IGRheSB0byAxIHRvIGF2b2lkIHNlbGVjdGluZyBhIGRhdGUgdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZVxuICAgICAgLy8gbmV3IG1vbnRoLCBlLmcuIEZlYiAzMSAtPiBNYXIgMy5cbiAgICAgIHRoaXMuc2V0RGF0ZSh7IG1vbnRoLCBkYXk6IDEgfSwgdHJ1ZSlcbiAgICB9LFxuXG4gICAgc2VsZWN0WWVhcih5ZWFyKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgIHRoaXMuc2V0RGF0ZSh7IHllYXIgfSwgdHJ1ZSlcbiAgICB9LFxuXG4gICAgZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICBpZiAobW9udGggPiAxMSkge1xuICAgICAgICB5ZWFyKytcbiAgICAgICAgbW9udGggPSAwXG4gICAgICB9IGVsc2UgaWYgKG1vbnRoIDwgMCkge1xuICAgICAgICB5ZWFyLS1cbiAgICAgICAgbW9udGggPSAxMVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgeWVhciwgbW9udGggfVxuICAgIH0sXG5cbiAgICBkYXRlVG9TdHJpbmcoXG4gICAgICBkYXRlLFxuICAgICAgeyB5ZWFyLCBtb250aCwgZGF5IH0gPSB7IHllYXI6IHRydWUsIG1vbnRoOiB0cnVlLCBkYXk6IHRydWUgfVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgeWVhcjogeWVhciAmJiAnbnVtZXJpYycsXG4gICAgICAgIG1vbnRoOiBtb250aCAmJiAnbG9uZycsXG4gICAgICAgIGRheTogZGF5ICYmICdudW1lcmljJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZGVjYWRlVG9TdHJpbmcoZGF0ZSkge1xuICAgICAgY29uc3QgeWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoZGF0ZS5nZXRGdWxsWWVhcigpKVxuICAgICAgcmV0dXJuIGAke3llYXJ9IOKAkyAke3llYXIgKyA5fWBcbiAgICB9LFxuXG4gICAgZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKVxuICAgIH0sXG5cbiAgICBnZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKSB7XG4gICAgICBjb25zdCB5ZWFyU3RyID0geWVhci50b1N0cmluZygpXG4gICAgICByZXR1cm4gK2Ake3llYXJTdHIuc2xpY2UoMCwgLTEpfTBgXG4gICAgfSxcblxuICAgIG5hdmlnYXRlKHsgc3RlcCwgZW50ZXIsIG1vZGUgPSB0aGlzLmN1cnJlbnRNb2RlLCB1cGRhdGUgPSBmYWxzZSB9KSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7IGRheTogY3VycmVudFZhbHVlLmdldERhdGUoKSArIHN0ZXAgfSwgdXBkYXRlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoeyBtb250aDogY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBzdGVwIH0sIHVwZGF0ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoeyB5ZWFyOiBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgfSwgdXBkYXRlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChlbnRlcikge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudE1vZGUpIHtcbiAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRlKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVEYXRlUmFuZ2UoKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IFtdXG4gICAgICB0aGlzLnllYXJSYW5nZSA9IFtdXG5cbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB5ZWFyID0gY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIGNvbnN0IG1vbnRoID0gY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcilcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgICB0aGlzLnllYXJSYW5nZS5wdXNoKHN0YXJ0WWVhciArIGkpXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyTW9udGhGaXJzdERheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKVxuICAgICAgbGV0IGZpcnN0RGF5V2VlayA9IGN1cnJNb250aEZpcnN0RGF5LmdldERheSgpICsgMVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA9PT0gMCkge1xuICAgICAgICBmaXJzdERheVdlZWsgPSA3XG4gICAgICB9XG4gICAgICBjb25zdCBudW1EYXlzID0gdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aClcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPiAxKSB7XG4gICAgICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoIC0gMSlcbiAgICAgICAgY29uc3QgcHJldk1vbnRoTnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoXG4gICAgICAgICAgcHJldk1vbnRoLnllYXIsXG4gICAgICAgICAgcHJldk1vbnRoLm1vbnRoXG4gICAgICAgIClcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmaXJzdERheVdlZWs7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRheSA9IHByZXZNb250aE51bURheXMgLSBmaXJzdERheVdlZWsgKyBpICsgMVxuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShwcmV2TW9udGgueWVhciwgcHJldk1vbnRoLm1vbnRoLCBkYXkpXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBkYXksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKVxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbnVtRGF5czsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaSlcbiAgICAgICAgY29uc3QgaXNEYXkgPSBkYXRlID0+IChcbiAgICAgICAgICBkYXRlICYmXG4gICAgICAgICAgZGF0ZS5nZXREYXRlKCkgPT09IGkgJiZcbiAgICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHllYXIgJiZcbiAgICAgICAgICBkYXRlLmdldE1vbnRoKCkgPT09IG1vbnRoXG4gICAgICAgIClcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBpc0RheSh0aGlzLm1vZGVsVmFsdWUpXG4gICAgICAgICAgPyAnYWN0aXZlJ1xuICAgICAgICAgIDogaXNEYXkobm93KVxuICAgICAgICAgICAgPyAndG9kYXknXG4gICAgICAgICAgICA6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpXG4gICAgICAgICAgICAgID8gJ2Rpc2FibGVkJ1xuICAgICAgICAgICAgICA6IGlzRGF5KGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICAgICAgICA/ICdjdXJyZW50J1xuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dE1vbnRoTmVlZCA9IDQyIC0gdGhpcy5kYXRlUmFuZ2UubGVuZ3RoXG4gICAgICBpZiAobmV4dE1vbnRoTmVlZCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5nZXRZZWFyTW9udGgoeWVhciwgbW9udGggKyAxKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBuZXh0TW9udGhOZWVkOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUobmV4dE1vbnRoLnllYXIsIG5leHRNb250aC5tb250aCwgaSlcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgbG9jYWxlTmFtZXMgPSB7fVxuXG4vLyBDYWxsaW5nIGB0b0xvY2FsZVN0cmluZygpYCB0aGlzIG11Y2ggYXBwZWFycyB0byBiZSBleHBlbnNpdmUsIHNvIGNhY2hlIGl0OlxuZnVuY3Rpb24gZ2V0TG9jYWxlTmFtZXMobG9jYWxlKSB7XG4gIGxldCBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV1cbiAgaWYgKCFuYW1lcykge1xuICAgIGNvbnN0IHdlZWtkYXlOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCAwLCBpKVxuICAgICAgd2Vla2RheU5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBtb250aE5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMjsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgaSwgMClcbiAgICAgIG1vbnRoTmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdID0ge1xuICAgICAgd2Vla2RheU5hbWVzLFxuICAgICAgbW9udGhOYW1lc1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZXNcbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNhbGVuZGFyIHtcbiAgbWluLXdpZHRoOiAyNDBweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLmRpdG8tY2FsZW5kYXItcG9wdXAge1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICB6LWluZGV4OiAkei1pbmRleC1wb3B1cDtcbn1cblxuLmRpdG8tY2FsZW5kYXItYm9keSB7XG4gIHBhZGRpbmc6IDAgMC41ZW07XG5cbiAgc3BhbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA3KTtcbiAgICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6IGNhbGMoI3skaW5wdXQtaGVpZ2h0fSAtIDJweCk7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS10b2RheSB7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmU7XG4gICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSB7XG4gICAgJixcbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1kaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1kaXNhYmxlZCxcbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1ncmF5IHtcbiAgICBjb2xvcjogIzk5OTk5OTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1tb250aHMsXG4uZGl0by1jYWxlbmRhci15ZWFycyB7XG4gIHNwYW4ge1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA0KTtcbiAgICBtYXJnaW46IDAuNWVtIDA7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3BhbiB7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLyA1KTtcbn1cblxuLmRpdG8tY2FsZW5kYXIgYSxcbi5kaXRvLWNhbGVuZGFyLWRhdGVzIHNwYW4sXG4uZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbixcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW4ge1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlciBzcGFuIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuXG4gIGEge1xuICAgIHBhZGRpbmc6IDAgMC4yZW07XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyLW1vbnRocyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyOm5vdCg6aG92ZXIpIC5kaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCB7XG4gIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG59XG5cbi5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzIHNwYW4ge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlcixcbi5kaXRvLWNhbGVuZGFyLWZvb3RlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xufVxuXG4uZGl0by1jYWxlbmRhci1mb290ZXIge1xuICBib3JkZXItdG9wOiAkYm9yZGVyLXN0eWxlO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZTtcbiAgZGlzcGxheTogZmxleDtcblxuICA+IHNwYW4ge1xuICAgIG1hcmdpbjogYXV0bztcbiAgICBwYWRkaW5nOiAwIDAuNWVtO1xuICB9XG5cbiAgYSB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLXByZXYsXG4uZGl0by1jYWxlbmRhci1zdGVwLW5leHQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiA1JTtcbiAgbWluLXdpZHRoOiAyZW07XG4gIG1heC13aWR0aDogM2VtO1xuXG4gICY6OmFmdGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBmb250LXNpemU6IDEuMjVlbTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLXByZXYge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ+KAuSc7XG4gIH1cblxuICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlciB7XG4gICAgY29udGVudDogJ8KrJztcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLW5leHQge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ+KAuic7XG4gIH1cblxuICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlciB7XG4gICAgY29udGVudDogJ8K7JztcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zZWxlY3Qtbm93IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICdOb3cnO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRFdmVudHModGFyZ2V0cywgZXZlbnRzKSB7XG4gIHRhcmdldHMgPVxuICAgIHRhcmdldHMgaW5zdGFuY2VvZiBOb2RlTGlzdFxuICAgICAgPyBBcnJheS5mcm9tKHRhcmdldHMpXG4gICAgICA6IGFzQXJyYXkodGFyZ2V0cylcblxuICBmb3IgKGNvbnN0IFt0eXBlLCBoYW5kbGVyXSBvZiBPYmplY3QuZW50cmllcyhldmVudHMpKSB7XG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZW1vdmUoKSB7XG4gICAgICBmb3IgKGNvbnN0IFt0eXBlLCBoYW5kbGVyXSBvZiBPYmplY3QuZW50cmllcyhldmVudHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUV2ZW50cyguLi5ldmVudHMpIHtcbiAgcmV0dXJuIHtcbiAgICByZW1vdmUoKSB7XG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgICBldmVudC5yZW1vdmUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5KGV2ZW50KSB7XG4gIHJldHVybiB7XG4gICAgMzc6ICdsZWZ0JyxcbiAgICAzODogJ3VwJyxcbiAgICAzOTogJ3JpZ2h0JyxcbiAgICA0MDogJ2Rvd24nLFxuICAgIDEzOiAnZW50ZXInXG4gIH1bZXZlbnQ/LmtleUNvZGVdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KSB7XG4gIGNvbnN0IGtleSA9IGdldEtleShldmVudClcbiAgcmV0dXJuIHtcbiAgICBob3I6IHsgbGVmdDogLTEsIHJpZ2h0OiAxIH1ba2V5XSB8fCAwLFxuICAgIHZlcjogeyB1cDogLTEsIGRvd246IDEgfVtrZXldIHx8IDAsXG4gICAgZW50ZXI6IGtleSA9PT0gJ2VudGVyJ1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXJnZXQoY29tcG9uZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IGlzU3RyaW5nKGNvbXBvbmVudC50YXJnZXQpXG4gICAgPyBjb21wb25lbnQuJHJlZnNbY29tcG9uZW50LnRhcmdldF1cbiAgICA6IGNvbXBvbmVudC50YXJnZXRcbiAgcmV0dXJuIHRhcmdldD8uJGVsID8/IHRhcmdldFxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtaWY9XCJhbHdheXNTaG93XCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdjbGljaydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQGNsaWNrPVwib25DbGlja1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdmb2N1cycgfHwgdHJpZ2dlciA9PT0gJ2Fsd2F5cydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIFRyYW5zaXRpb24oOm5hbWU9XCJgZGl0by0ke3RyYW5zaXRpb259YFwiKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICApXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWVsc2VcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMsIGNvbWJpbmVFdmVudHMgfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcbmltcG9ydCB7IGdldFRhcmdldCB9IGZyb20gJy4uL3V0aWxzL3RyaWdnZXInXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOnNob3cnXSxcblxuICBwcm9wczoge1xuICAgIHRyaWdnZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnY2xpY2snIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tJyB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjdXN0b21DbGFzczogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB6SW5kZXg6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH0sXG4gICAga2VlcEluVmlldzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgaGlkZVdoZW5DbGlja091dHNpZGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGFsd2F5c1Nob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb3ZlcjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGhpZGVEZWxheTogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgcG9wdXBQbGFjZW1lbnQ6IHRoaXMucGxhY2VtZW50LFxuICAgICAgZm9jdXNFdmVudHM6IG51bGwsXG4gICAgICBjbG9zZUV2ZW50czogbnVsbCxcbiAgICAgIHBvcHVwRXZlbnRzOiBudWxsLFxuICAgICAgYmx1clRpbWVyOiBudWxsLFxuICAgICAgbW91c2VMZWF2ZVRpbWVyOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHJpZ2dlckNsYXNzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tdHJpZ2dlci1kaXNhYmxlZCc6IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcG9wdXBDbGFzcygpIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgIFtgZGl0by1wb3B1cC0ke2h5cGhlbmF0ZSh0aGlzLnBsYWNlbWVudCl9YF06IHRydWVcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmN1c3RvbUNsYXNzKSB7XG4gICAgICAgIGNsYXNzZXNbdGhpcy5jdXN0b21DbGFzc10gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICBwb3B1cFN0eWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuekluZGV4ID8gYHotaW5kZXg6ICR7dGhpcy56SW5kZXh9YCA6ICcnXG4gICAgfSxcblxuICAgIHRyaWdnZXJUYXJnZXQoKSB7XG4gICAgICByZXR1cm4gZ2V0VGFyZ2V0KHRoaXMpXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3cgfHwgdGhpcy5hbHdheXNTaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIHRvKVxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9uU2hvd1BvcHVwKHRvKSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2ZvY3VzJykge1xuICAgICAgdGhpcy5mb2N1c0V2ZW50cyA9IHRoaXMuYWRkRm9jdXNFdmVudHModGhpcy50cmlnZ2VyVGFyZ2V0ID8/IHRyaWdnZXIpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGlkZVdoZW5DbGlja091dHNpZGUgJiYgIXRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgLy8gVXNlICdtb3VzZXVwJyBpbnN0ZWFkIG9mICdjbGljaycsIHNpbmNlIGNsaWNrIGFwcGVhcnMgdG8gaGFwcGVuIGFmdGVyXG4gICAgICAvLyB0aGUgRE9NIGluc2lkZSBvZiBwb3B1cHMgY291bGQgY2hhbmdlIGluIGEgd2F5IHNvIHRoYXQgdGhlIGNoZWNrXG4gICAgICAvLyBgcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KWAgd291bGQgZmFpbDpcbiAgICAgIHRoaXMuY2xvc2VFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICAgIG1vdXNldXA6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCAmJlxuICAgICAgICAgICAgIXBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICF0cmlnZ2VyLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICF0aGlzLnRyaWdnZXJUYXJnZXQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbHdheXNTaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLnNob3dQb3B1cCA9IHRoaXMuc2hvd1xuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLmZvY3VzRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMuY2xvc2VFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5wb3B1cEV2ZW50cz8ucmVtb3ZlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlUG9zaXRpb24oKSB7XG4gICAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgICBpZiAodGhpcy5zaG93ICYmIHBvcHVwLm9mZnNldFdpZHRoID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpLCAwKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy50cmlnZ2VyVGFyZ2V0ID8/IHRyaWdnZXJcbiAgICAgIC8vIEFjdHVhbGx5IHJlc2l6ZSB0aGUgcG9wdXAncyBmaXJzdCBjaGlsZCwgc28gdGhleSBjYW4gc2V0IHNpemUgbGltaXRzLlxuICAgICAgY29uc3QgZWwgPSB0aGlzLnRhcmdldCA9PT0gJ3BvcHVwJyA/IHRyaWdnZXIgOiBwb3B1cC5maXJzdEVsZW1lbnRDaGlsZFxuICAgICAgaWYgKGVsKSB7XG4gICAgICAgIGVsLnN0eWxlLndpZHRoID0gZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLndpZHRoXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvdW5kcyA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgdHJpZ2dlckxlZnQgPSBib3VuZHMubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgICBjb25zdCB0cmlnZ2VyVG9wID0gYm91bmRzLnRvcCArIHdpbmRvdy5zY3JvbGxZXG4gICAgICBjb25zdCB0cmlnZ2VyV2lkdGggPSBib3VuZHMud2lkdGhcbiAgICAgIGNvbnN0IHRyaWdnZXJIZWlnaHQgPSBib3VuZHMuaGVpZ2h0XG4gICAgICBjb25zdCBwb3B1cFdpZHRoID0gcG9wdXAub2Zmc2V0V2lkdGhcbiAgICAgIGNvbnN0IHBvcHVwSGVpZ2h0ID0gcG9wdXAub2Zmc2V0SGVpZ2h0XG5cbiAgICAgIGxldCBbcGFydDEsIHBhcnQyXSA9IHRoaXMucG9wdXBQbGFjZW1lbnQuc3BsaXQoJy0nKSB8fCBbXVxuICAgICAgaWYgKHRoaXMua2VlcEluVmlldykge1xuICAgICAgICBjb25zdCB3aW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICAgIGNvbnN0IHdpbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCAtIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0MiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wICsgdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCArIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBsZWZ0ID0gMFxuICAgICAgbGV0IHRvcCA9IDBcbiAgICAgIHN3aXRjaCAocGFydDEpIHtcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICBsZWZ0IC09IHBvcHVwV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCArPSB0cmlnZ2VyV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAocGFydDIpIHtcbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aCAtIHRyaWdnZXJXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdG9wIC09IHBvcHVwSGVpZ2h0IC0gdHJpZ2dlckhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb3Zlcikge1xuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICB0b3AgLT0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0ICE9PSB0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJCb3VuZHMgPSB0cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIGxlZnQgKz0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyQm91bmRzLmxlZnRcbiAgICAgICAgdG9wICs9IHRyaWdnZXJUb3AgLSB0cmlnZ2VyQm91bmRzLnRvcFxuICAgICAgfVxuICAgICAgcG9wdXAuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgXG4gICAgICBwb3B1cC5zdHlsZS50b3AgPSBgJHt0b3B9cHhgXG4gICAgfSxcblxuICAgIGFkZEZvY3VzRXZlbnRzKHBhcmVudCkge1xuICAgICAgY29uc3QgdGFyZ2V0cyA9IHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCwgdGV4dGFyZWEnKVxuICAgICAgbGV0IGlucHV0XG5cbiAgICAgIHJldHVybiBjb21iaW5lRXZlbnRzKFxuICAgICAgICBhZGRFdmVudHModGFyZ2V0cywge1xuICAgICAgICAgIGZvY3VzOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmJsdXJUaW1lcilcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIHRpbWVvdXQgdG8gYWxsb3cgY2xpY2tlZCBpbnB1dHMgdG8gZ3JhYiBmb2N1c1xuICAgICAgICAgICAgdGhpcy5ibHVyVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLiRyZWZzLnBvcHVwLm1hdGNoZXMoJzpmb2N1cy13aXRoaW4nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMClcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuXG4gICAgICAgIGFkZEV2ZW50cyhwYXJlbnQsIHtcbiAgICAgICAgICBtb3VzZWRvd246IGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJ2lucHV0LCB0ZXh0YXJlYSwgYnV0dG9uJykpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQubWF0Y2hlcygnLmRpdG8tYnV0dG9uLWNsZWFyJykpIHtcbiAgICAgICAgICAgICAgY29uc3QgdHJpZ2dlciA9IHRoaXMudHJpZ2dlclRhcmdldCA/PyB0aGlzLiRyZWZzLnRyaWdnZXJcbiAgICAgICAgICAgICAgLy8gTWFyayB0cmlnZ2VyIGlucHV0IGFzIHJlYWRvbmx5IHNvIGl0IGNhbid0IGxvb3NlIGZvY3VzIHdoaWxlXG4gICAgICAgICAgICAgIC8vIHVzZXIgZG9lcyBvdGhlciBtb3VzZS1hY3Rpdml0aWVzIGluIHBvcHVwLlxuICAgICAgICAgICAgICBpbnB1dCA9IHRyaWdnZXIucXVlcnlTZWxlY3RvcignaW5wdXQsIHRleHRhcmVhJylcbiAgICAgICAgICAgICAgaWYgKGlucHV0ICYmICFpbnB1dC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3JlYWRvbmx5JywgJ3RydWUnKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIG1vdXNldXA6IGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgICAvLyBHaXZlIHNvbWUgdGltZSBmb3Igb3RoZXIgZXZlbnRzIHRvIHVwZGF0ZSBpbnB1dCBiZWZvcmUgaXRcbiAgICAgICAgICAgICAgLy8gYmVjb21lcyBlZGl0YWJsZSBhbmQgc3RpbGwgZm9jdXNlZCBhZ2Fpbi5cbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaW5wdXQucmVtb3ZlQXR0cmlidXRlKCdyZWFkb25seScpXG4gICAgICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQubWF0Y2hlcygnaW5wdXQsIHRleHRhcmVhLCBidXR0b24nKSkge1xuICAgICAgICAgICAgICAgICAgaW5wdXQuZm9jdXMoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbnB1dCA9IG51bGxcbiAgICAgICAgICAgICAgfSwgMClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIG9uU2hvd1BvcHVwKHNob3cpIHtcbiAgICAgIGlmIChzaG93KSB7XG4gICAgICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgICAgICB0aGlzLnBvcHVwRXZlbnRzID0gdGhpcy5hZGRGb2N1c0V2ZW50cyh0aGlzLiRyZWZzLnBvcHVwKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wb3B1cEV2ZW50cz8ucmVtb3ZlKClcbiAgICAgICAgdGhpcy5wb3B1cEV2ZW50cyA9IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DbGljaygpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Ib3ZlcihlbnRlcikge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vdXNlTGVhdmVUaW1lcilcbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGlkZURlbGF5KSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICB9LCB0aGlzLmhpZGVEZWxheSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcbkBpbXBvcnQgJy4uL3N0eWxlcy90cmFuc2l0aW9ucyc7XG5cbi5kaXRvLXRyaWdnZXItY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uZGl0by10cmlnZ2VyLWRpc2FibGVkIHtcbiAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG5cbiAgKiB7XG4gICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXBvcHVwIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR6LWluZGV4LXBvcHVwO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1pbnB1dCg6Y2xhc3M9XCJjbGFzc2VzXCIpXG4gIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICBpbnB1dChcbiAgICA6aWQ9XCJpZFwiXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgIDp0eXBlPVwidHlwZVwiXG4gICAgOm5hbWU9XCJuYW1lXCJcbiAgICA6dGl0bGU9XCJ0aXRsZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInJlYWRvbmx5XCJcbiAgICA6YXV0b2ZvY3VzPVwiYXV0b2ZvY3VzXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgOmF1dG9jb21wbGV0ZT1cImF1dG9jb21wbGV0ZVwiXG4gICAgOmFyaWEtbGFiZWw9XCJ0aXRsZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIClcbiAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0eXBlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3RleHQnIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aXRsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYXV0b2ZvY3VzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZm9jdXNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGF1dG9jb21wbGV0ZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdvZmYnIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLiRhdHRycy5jbGFzcyxcbiAgICAgICAge1xuICAgICAgICAgICdkaXRvLWlucHV0LS1mb2N1cyc6IHRoaXMuZm9jdXNlZFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBfLCAuLi5hdHRyaWJ1dGVzIH0gPSB0aGlzLiRhdHRyc1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5pbnB1dFxuICAgIH0sXG5cbiAgICBzaXplKCkge1xuICAgICAgLy8gRGV0ZXJtaW5lIHNpemUgYmFzZWQgb24gbWluICYgbWF4IHNldHRpbmdzLCBpZiB0aGV5J3JlIHByb3ZpZGVkLlxuICAgICAgY29uc3QgeyBzaXplLCBtaW4sIG1heCB9ID0gdGhpcy4kYXR0cnNcbiAgICAgIGNvbnN0IGdldExlbmd0aCA9IHZhbHVlID0+ICh2YWx1ZSAhPSBudWxsID8gYCR7dmFsdWV9YC5sZW5ndGggOiAwKVxuICAgICAgcmV0dXJuIHNpemUgfHwgZ2V0TGVuZ3RoKG1pbikgfHwgZ2V0TGVuZ3RoKG1heCkgfHwgdW5kZWZpbmVkXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGN1cnJlbnRWYWx1ZSkge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1pbnB1dCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICBAZXh0ZW5kICVpbnB1dDtcblxuICBpbnB1dCB7XG4gICAgLy8gSW5oZXJpdCBhbGwgc3R5bGluZyBmcm9tIC5kaXRvLWlucHV0XG4gICAgYWxsOiBpbmhlcml0O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXI6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuaS5kaXRvLWljb24oXG4gIDpjbGFzcz1ge1xuICAgIFsnZGl0by1pY29uLS0nICsgbmFtZV06IHRydWUsXG4gICAgJ2RpdG8taWNvbi0tZGlzYWJsZWQnOiBkaXNhYmxlZFxuICB9YFxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLy8gYHlhcm4gYnVpbGQ6aWNvbnNgIGNvbnZlcnRzIHRoZSBpY29uIFNWRyBmaWxlcyB0byBzaWxlbnQgY2xhc3NlcyBpbnNpZGVcbi8vIGBzcmMvc3R5bGVzL21peGlucy9faWNvbnMuc2Nzc2AsIG1ha2luZyB0aGVtIGF2YWlsYWJsZSB0byBhbGwgb3RoZXIgc2Fzc1xuLy8gY29kZSB0aHJvdWdoIGBfaW1wb3J0c2AuXG4vLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSB0aGVtIGFzIG5vcm1hbCBDU1MgY2xhc3NlcywgY29udmVydCB0aGVtIGhlcmU6XG5AZWFjaCAkbmFtZSBpbiAkaWNvbnMge1xuICAuZGl0by1pY29uLS0jeyRuYW1lfSB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgQGV4dGVuZCAlaWNvbi0jeyRuYW1lfTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1pY29uIHtcbiAgQGF0LXJvb3QgLmRpdG8taW5wdXQgJiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAkYm9yZGVyLXdpZHRoO1xuICAgIGxlZnQ6IHVuc2V0O1xuICAgIHdpZHRoOiAyZW07XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGNvbG9yOiAkY29sb3ItZ3JleTtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG5cbiAgICAmLS1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogJGNvbG9yLWxpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIEBhdC1yb290IC5kaXRvLWlucHV0OmZvY3VzLXdpdGhpbiAmIHtcbiAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImV4cG9ydCBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQsIGVuZCB9KSB7XG4gIGlmIChpbnB1dD8uc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICBpbnB1dC5mb2N1cygpXG4gICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKGlucHV0KSB7XG4gIHJldHVybiBpbnB1dCAmJiAnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0XG4gICAgPyB7IHN0YXJ0OiBpbnB1dC5zZWxlY3Rpb25TdGFydCwgZW5kOiBpbnB1dC5zZWxlY3Rpb25FbmQgfVxuICAgIDogbnVsbFxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tZGF0ZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB0cmlnZ2VyPVwiZm9jdXNcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIkc2xvdHMudHJpZ2dlclwiXG4gICAgICBuYW1lPVwidHJpZ2dlclwiXG4gICAgKVxuICAgIElucHV0RmllbGQuZGl0by1kYXRlLXBpY2tlci1pbnB1dChcbiAgICAgIHYtZWxzZVxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCBmb2N1c2VkLCAuLi4kYXR0cnMgfVwiXG4gICAgICBAZm9jdXM9XCJvbkZvY3VzKHRydWUpXCJcbiAgICAgIEBibHVyPVwib25Gb2N1cyhmYWxzZSlcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25Nb3VzZURvd24oZmFsc2UpXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgICBzbG90KG5hbWU9XCJiZWZvcmVcIilcbiAgICAgIHRlbXBsYXRlKCNhZnRlcilcbiAgICAgICAgSWNvbihcbiAgICAgICAgICBuYW1lPVwiY2FsZW5kYXJcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCJvbk1vdXNlRG93bih0cnVlKVwiXG4gICAgICAgIClcbiAgICAgICAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIENhbGVuZGFyLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAoXG4gICAgICByZWY9XCJjYWxlbmRhclwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtYmluZD1cInsgbG9jYWxlLCBkaXNhYmxlZERhdGUgfVwiXG4gICAgICBAc2VsZWN0PVwic2hvd1BvcHVwID0gZmFsc2VcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgQ2FsZW5kYXIgZnJvbSAnLi9DYWxlbmRhci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uLnZ1ZSdcbmltcG9ydCB7IHBhcnNlRGF0ZSwgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IGdldFNlbGVjdGlvbiwgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuaW1wb3J0IHsgZ2V0VGFyZ2V0IH0gZnJvbSAnLi4vdXRpbHMvdHJpZ2dlci5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIENhbGVuZGFyLCBJbnB1dEZpZWxkLCBJY29uIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3VwZGF0ZTpzaG93JywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICBkYXRlOiBkZWZhdWx0Rm9ybWF0cy5kYXRlLFxuICAgICAgICB0aW1lOiBmYWxzZVxuICAgICAgfSlcbiAgICB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiBnZXRUYXJnZXQodGhpcyk/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgZm9ybWF0T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgIC4uLnRoaXMuZm9ybWF0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykgfHwgJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBkYXRlID0gcGFyc2VEYXRlKHZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh2YWx1ZSkge1xuICAgICAgaWYgKCt2YWx1ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkZvY3VzKGZvY3VzKSB7XG4gICAgICB0aGlzLmlucHV0Rm9jdXNlZCA9IGZvY3VzXG4gICAgICB0aGlzLnNob3dQb3B1cCA9IGZvY3VzXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3QgeyB2ZXI6IHN0ZXAsIGVudGVyIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgaWYgKHN0ZXAgfHwgZW50ZXIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQpPy5zdGFydFxuICAgICAgICBjb25zdCBnZXREYXRlUGFydCA9IHBvc2l0aW9uID0+XG4gICAgICAgICAgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHRoaXMuY3VycmVudFRleHQsIHBvc2l0aW9uLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHN0ZXAgJiYgIXRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgeyBjYWxlbmRhciB9ID0gdGhpcy4kcmVmc1xuICAgICAgICAgIGlmIChjYWxlbmRhcikge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lOiBtb2RlLCBzdGFydCB9ID0gZ2V0RGF0ZVBhcnQocG9zaXRpb24pIHx8IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG1vZGUgJiZcbiAgICAgICAgICAgICAgY2FsZW5kYXIubmF2aWdhdGUoeyBzdGVwLCBlbnRlciwgbW9kZSwgdXBkYXRlOiB0cnVlIH0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQsIGdldERhdGVQYXJ0KHN0YXJ0KSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKHRvZ2dsZSkge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5kaXNhYmxlZCAmJiAoIXRvZ2dsZSB8fCAhdGhpcy5zaG93UG9wdXApXG4gICAgICBpZiAodGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGF0ZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4td2lkdGg6IDhlbTtcbiAgfVxufVxuXG4uZGl0by1kYXRlLXBpY2tlci1wb3B1cCB7XG4gIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbn1cbjwvc3R5bGU+XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by10aW1lLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJmb2N1c1wiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiRzbG90cy50cmlnZ2VyXCJcbiAgICAgIG5hbWU9XCJ0cmlnZ2VyXCJcbiAgICApXG4gICAgSW5wdXRGaWVsZC5kaXRvLXRpbWUtcGlja2VyLWlucHV0KFxuICAgICAgdi1lbHNlXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIGZvY3VzZWQsIC4uLiRhdHRycyB9XCJcbiAgICAgIEBmb2N1cz1cIm9uRm9jdXModHJ1ZSlcIlxuICAgICAgQGJsdXI9XCJvbkZvY3VzKGZhbHNlKVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvbk1vdXNlRG93bihmYWxzZSlcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICAgIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICAgICAgdGVtcGxhdGUoI2FmdGVyKVxuICAgICAgICBJY29uKFxuICAgICAgICAgIG5hbWU9XCJjbG9ja1wiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIEBtb3VzZWRvd24ucHJldmVudD1cIm9uTW91c2VEb3duKHRydWUpXCJcbiAgICAgICAgKVxuICAgICAgICBzbG90KG5hbWU9XCJhZnRlclwiKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgLmRpdG8tdGltZS1waWNrZXItcG9wdXBcbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItaG91cihyZWY9XCJob3VyXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZEhvdXIoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUocmVmPVwibWludXRlXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZE1pbnV0ZShpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogbWludXRlID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cIm1pbnV0ZSA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1zZWNvbmQocmVmPVwic2Vjb25kXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZFNlY29uZChpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogc2Vjb25kID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24udnVlJ1xuaW1wb3J0IHsgYWx0ZXJEYXRlLCBwYXJzZURhdGUsIGdldERhdGVQYXJ0QXRQb3NpdGlvbiB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5pbXBvcnQgeyBnZXRTZWxlY3Rpb24sIHNldFNlbGVjdGlvbiB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbi5qcydcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcbmltcG9ydCB7IGdldFRhcmdldCB9IGZyb20gJy4uL3V0aWxzL3RyaWdnZXIuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBJbnB1dEZpZWxkLCBJY29uIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3VwZGF0ZTpzaG93JywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICB0aW1lOiBkZWZhdWx0Rm9ybWF0cy50aW1lLFxuICAgICAgICBkYXRlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9LFxuICAgIGRpc2FibGVkSG91cjogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZE1pbnV0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZFNlY29uZDogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgaWdub3JlTmV4dENoYW5nZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIGdldFRhcmdldCh0aGlzKT8ucXVlcnlTZWxlY3RvcignaW5wdXQnKVxuICAgIH0sXG5cbiAgICBmb3JtYXRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgLi4udGhpcy5mb3JtYXRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKSB8fCAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZURhdGUodmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucylcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50RGF0ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlIHx8XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBEYXRlKCkgb2JqZWN0IHdpdGggdGhlIHRpbWUgc2V0IHRvIDAsIHRvIGJlIHVzZWQgd2hlblxuICAgICAgICAvLyBmaXJzdCBzZXR0aW5nIGFueSBvZiB0aGUgdGltZXMsIGZvciBtZWFuaW5nZnVsIGRhdGVzIGluIGNhc2UgdGhlXG4gICAgICAgIC8vIG9iamVjdCBpcyBzaGFyZWQgd2l0aCBhIERhdGVQaWNrZXIsIGUuZy4gdGhyb3VnaCBEYXRlVGltZVBpY2tlci5cbiAgICAgICAgYWx0ZXJEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIGhvdXI6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0SG91cnMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KGhvdXIpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgaG91ciB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtaW51dGU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0TWludXRlcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQobWludXRlKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IG1pbnV0ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWNvbmQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0U2Vjb25kcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoc2Vjb25kKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IHNlY29uZCB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgICAgdGhpcy5zY3JvbGxBbGwodHJ1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAoK3ZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCh0cnVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgaW5wdXQgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbihpbnB1dClcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5mb2N1c2VkICYmXG4gICAgICAgICF0aGlzLmlnbm9yZU5leHRDaGFuZ2UgJiZcbiAgICAgICAgc2VsZWN0aW9uLnN0YXJ0ID09PSBzZWxlY3Rpb24uZW5kXG4gICAgICApIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKGlucHV0LCBzZWxlY3Rpb24pKVxuICAgICAgfVxuICAgICAgdGhpcy5pZ25vcmVOZXh0Q2hhbmdlID0gZmFsc2VcbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8pIHtcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoZmFsc2UpXG4gICAgICB9XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsZWZ0UGFkKHZhbHVlKSB7XG4gICAgICByZXR1cm4gKCcwJyArIHZhbHVlKS5zbGljZSgtMilcbiAgICB9LFxuXG4gICAgc2V0VGltZShvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gYWx0ZXJEYXRlKHRoaXMuY3VycmVudERhdGUsIHtcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICBtaWxsaXNlY29uZDogMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2Nyb2xsQWxsKHNtb290aCkge1xuICAgICAgY29uc3Qgc2Nyb2xsID0gKHJlZiwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4kcmVmc1tyZWZdXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gKFxuICAgICAgICAgICAgdGFyZ2V0LnNjcm9sbEhlaWdodCAvXG4gICAgICAgICAgICAvLyBGaXJzdCBhbmQgbGFzdCBvbmUgYWRkIDMgdGltZXMgdGhlIG1hcmdpbi5cbiAgICAgICAgICAgICh0YXJnZXQuY2hpbGRFbGVtZW50Q291bnQgKyA2KVxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCB0b3AgPSBNYXRoLnJvdW5kKHZhbHVlICogbGluZUhlaWdodClcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKHRhcmdldC5zY3JvbGxUb3AgLSB0b3ApXG4gICAgICAgICAgdGFyZ2V0LnNjcm9sbFRvKHtcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGJlaGF2aW9yOiBzbW9vdGggJiYgZGlzdGFuY2UgPCAxMDAgPyAnc21vb3RoJyA6ICdhdXRvJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsKCdob3VyJywgdGhpcy5ob3VyKVxuICAgICAgICBzY3JvbGwoJ21pbnV0ZScsIHRoaXMubWludXRlKVxuICAgICAgICBzY3JvbGwoJ3NlY29uZCcsIHRoaXMuc2Vjb25kKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25Gb2N1cyhmb2N1cykge1xuICAgICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmb2N1c1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBmb2N1c1xuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHsgaW5wdXQgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbihpbnB1dClcbiAgICAgIGNvbnN0IHsgdmVyOiBzdGVwLCBlbnRlciB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgIGlmIChzdGVwIHx8IGVudGVyKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgICBjb25zdCBnZXREYXRlUGFydCA9IHBvc2l0aW9uID0+XG4gICAgICAgICAgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHRoaXMuY3VycmVudFRleHQsIHBvc2l0aW9uLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICBpZiAoIXRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lLCBzdGFydCB9ID0gZ2V0RGF0ZVBhcnQoc2VsZWN0aW9uLnN0YXJ0KSB8fCB7fVxuICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW25hbWVdICsgc3RlcFxuICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMuJHJlZnNbbmFtZV0uY2hpbGRFbGVtZW50Q291bnRcbiAgICAgICAgICAgICAgdGhpc1tuYW1lXSA9XG4gICAgICAgICAgICAgICAgdmFsdWUgPCAwXG4gICAgICAgICAgICAgICAgICA/IHZhbHVlICsgY291bnRcbiAgICAgICAgICAgICAgICAgIDogdmFsdWUgPj0gY291bnRcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZSAtIGNvdW50XG4gICAgICAgICAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgICAgICAgdGhpcy5pZ25vcmVOZXh0Q2hhbmdlID0gdHJ1ZVxuICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24oaW5wdXQsIGdldERhdGVQYXJ0KHN0YXJ0KSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5zdGFydCA9PT0gc2VsZWN0aW9uLmVuZCkge1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSBpbnB1dFxuICAgICAgICBsZXQgcG9zID0gc2VsZWN0aW9uLnN0YXJ0XG5cbiAgICAgICAgY29uc3QgaXNEaWdpdCA9IGNoYXIgPT4gIWlzTmFOKE51bWJlcihjaGFyKSlcblxuICAgICAgICBpZiAoZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGlmIChpc0RpZ2l0KGV2ZW50LmtleSkgJiYgcG9zIDwgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHZhbHVlW3Bvc10gPT09ICc6JyAmJlxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyAtIDFdKSAmJlxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyAtIDJdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHBvcysrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgbmV4dCBkaWdpdCBzbyB0aGUgZXZlbnQgb3ZlcnJpZGVzIGl0IGluc3RlYWQgb2YgaW5zZXJ0aW5nXG4gICAgICAgICAgICAvLyBuZXcgY2hhcnMuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zXSkgJiYgKFxuICAgICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zICsgMV0pIHx8XG4gICAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgLSAxXSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gKFxuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKDAsIHBvcykgK1xuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKHBvcyArIDEpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0OiBwb3MsIGVuZDogcG9zIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKS5sZW5ndGhcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IGxlbmd0aCkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IGxlbmd0aCkge1xuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGxlbmd0aClcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCBzZWxlY3Rpb24pXG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBvcyA9PT0gMSB8fFxuICAgICAgICAgICAgWycgJywgJzonXS5pbmNsdWRlcyh2YWx1ZVtwb3MgLSAyXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcG9zID09PSB2YWx1ZS5sZW5ndGggfHxcbiAgICAgICAgICAgICAgdmFsdWVbcG9zXSA9PT0gJzonXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcG9zLS1cbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSAoXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgcG9zKSArXG4gICAgICAgICAgICAgICAgKCh2YWx1ZVtwb3MgLSAxXSA/PyAnJykgKyAnMDAnKSArXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UocG9zICsgMSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQ6IHBvcywgZW5kOiBwb3MgfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zXSkgJiZcbiAgICAgICAgICAgICAgIWlzRGlnaXQoK3ZhbHVlW3BvcyArIDFdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIFdoZW4gcmVtb3ZpbmcgdGhlIGZpcnN0IG9mIHR3byBkaWdpdHMsIHJlcGxhY2Ugd2l0aCAwXG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgcG9zKSArICcwJyArIHZhbHVlLnNsaWNlKHBvcylcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0OiBwb3MsIGVuZDogcG9zIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKHRvZ2dsZSkge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5kaXNhYmxlZCAmJiAoIXRvZ2dsZSB8fCAhdGhpcy5zaG93UG9wdXApXG4gICAgICBpZiAodGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGltZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLXdpZHRoOiA2ZW07XG4gIH1cbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAge1xuICBtYXgtd2lkdGg6IDE2MHB4O1xuICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG59XG5cbiR0aW1lLXBpY2tlci1saW5lLWhlaWdodDogMjRweDtcblxuLmRpdG8tdGltZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXdpZHRoOiAwIDFweCAwO1xuICBtYXJnaW4tbGVmdDogLTFweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IGNhbGMoMTAwJSAvIDMgKyAxcHgpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICY6bGFzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICB9XG5cbiAgdWwge1xuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAwO1xuICAgIC8vIEhpZGUgc2Nyb2xsYmFyOlxuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgIHBhZGRpbmc6IDAgMTdweCAwIDA7XG4gICAgaGVpZ2h0OiA3ICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuXG4gICAgJiA+IGxpIHtcbiAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xuICAgICAgfVxuXG4gICAgICAmLnNlbGVjdGVkLFxuICAgICAgJi5zZWxlY3RlZDpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cblxuICAgICAgJi5kaXNhYmxlZCB7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgICAgIH1cblxuICAgICAgJi5kaXNhYmxlZDpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlLXRpbWUtcGlja2VyKHJlZj1cInBpY2tlclwiKVxuICAuZGl0by1kYXRlLXRpbWUtcGlja2VyX19pbm5lcihcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWRhdGUtdGltZS1waWNrZXJfX2lubmVyLS1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gIClcbiAgICBJbnB1dEZpZWxkLmRpdG8tZGF0ZS10aW1lLXBpY2tlcl9faW5wdXQoXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIGZvY3VzZWQsIC4uLiRhdHRycyB9XCJcbiAgICAgIEBmb2N1cz1cIm9uRm9jdXModHJ1ZSlcIlxuICAgICAgQGJsdXI9XCJvbkZvY3VzKGZhbHNlKVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvbk1vdXNlRG93bihmYWxzZSlcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICAgIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICAgICAgdGVtcGxhdGUoI2FmdGVyKVxuICAgICAgICBJY29uKFxuICAgICAgICAgIG5hbWU9XCJjYWxlbmRhclwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIEBtb3VzZWRvd24ucHJldmVudD1cIm9uTW91c2VEb3duKHRydWUpXCJcbiAgICAgICAgKVxuICAgICAgICBzbG90KG5hbWU9XCJhZnRlclwiKVxuICAgIERhdGVQaWNrZXIoXG4gICAgICByZWY9XCJkYXRlXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd0RhdGVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICAgICAgLy8tIEludGVudGlvbmFsbHkgZW1wdHlcbiAgICBUaW1lUGlja2VyKFxuICAgICAgcmVmPVwidGltZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtbW9kZWw6c2hvdz1cInNob3dUaW1lXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgICAgICAvLy0gSW50ZW50aW9uYWxseSBlbXB0eVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMsIGFzc2lnbkRlZXBseSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IERhdGVQaWNrZXIgZnJvbSAnLi9EYXRlUGlja2VyLnZ1ZSdcbmltcG9ydCBUaW1lUGlja2VyIGZyb20gJy4vVGltZVBpY2tlci52dWUnXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24udnVlJ1xuaW1wb3J0IHsgcGFyc2VEYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IGdldFNlbGVjdGlvbiwgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCwgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgSWNvbiB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICdjaGFuZ2UnLCAnZm9jdXMnLCAnYmx1ciddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBmb3JtYXQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dEYXRlOiBmYWxzZSxcbiAgICAgIHNob3dUaW1lOiBmYWxzZSxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBkYXRlRm9jdXNlZDogZmFsc2UsXG4gICAgICB0aW1lRm9jdXNlZDogZmFsc2UsXG4gICAgICBjbG9zZWRNb2RlOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgdHJhbnNpdGlvbiwgZGlzYWJsZWQsIGxvY2FsZSwgZm9ybWF0T3B0aW9uczogZm9ybWF0IH0gPSB0aGlzXG4gICAgICByZXR1cm4geyB0cmFuc2l0aW9uLCBkaXNhYmxlZCwgbG9jYWxlLCBmb3JtYXQgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd0RhdGUgfHwgdGhpcy5zaG93VGltZVxuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLmlucHV0LmlucHV0XG4gICAgfSxcblxuICAgIGZvcm1hdE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gYXNzaWduRGVlcGx5KFxuICAgICAgICB7XG4gICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgICB0aW1lOiBkZWZhdWx0Rm9ybWF0cy50aW1lLFxuICAgICAgICAgIGRhdGU6IGRlZmF1bHRGb3JtYXRzLmRhdGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICAgICAgZm9ybWF0OiAodmFsdWUsIHR5cGUsIG9wdGlvbnMpID0+XG4gICAgICAgICAgICAgIHR5cGUgPT09ICdsaXRlcmFsJyAmJiAvXFxiYXRcXGIvLnRlc3QodmFsdWUpXG4gICAgICAgICAgICAgICAgPyAnLCAnXG4gICAgICAgICAgICAgICAgOiB0aGlzLmZvcm1hdD8uZGF0ZT8uZm9ybWF0Py4odmFsdWUsIHR5cGUsIG9wdGlvbnMpID8/IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLmZvcm1hdFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0aW1lSW5kZXgoKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5jdXJyZW50VGV4dFxuICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IHRleHQubWF0Y2goLyhbXFxTXStcXHMqKSQvKT8uWzFdXG4gICAgICAgIGlmICh0aW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRleHQubGVuZ3RoIC0gdGltZS5sZW5ndGhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKSB8fCAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZURhdGUodmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucylcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24odGhpcy5pbnB1dClcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24odGhpcy5pbnB1dCwgc2VsZWN0aW9uKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAoK3ZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQodG8gPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25Gb2N1cyhmb2N1cykge1xuICAgICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmb2N1c1xuICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9wdXBzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0RhdGUgPSBmYWxzZVxuICAgICAgICB0aGlzLnNob3dUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Nb3VzZURvd24odG9nZ2xlKSB7XG4gICAgICBpZiAodG9nZ2xlICYmICh0aGlzLnNob3dEYXRlIHx8IHRoaXMuc2hvd1RpbWUpKSB7XG4gICAgICAgIHRoaXMuc2hvd0RhdGUgPSBmYWxzZVxuICAgICAgICB0aGlzLnNob3dUaW1lID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLnVwZGF0ZVBvcHVwcygpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLmdldE1vZGUoZXZlbnQpXG4gICAgICB0aGlzLiRyZWZzW21vZGVdLm9uS2V5RG93bihldmVudClcbiAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VkTW9kZSA9IG1vZGVcbiAgICAgIH0gZWxzZSBpZiAobW9kZSAhPT0gdGhpcy5jbG9zZWRNb2RlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9wdXBzKG1vZGUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldE1vZGUoZXZlbnQgPSBudWxsKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0IH0gPSBnZXRTZWxlY3Rpb24odGhpcy5pbnB1dClcbiAgICAgIGNvbnN0IHsgaG9yOiBzdGVwIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgcmV0dXJuIHRoaXMudGltZUluZGV4ID09PSBudWxsIHx8IHN0YXJ0ICsgc3RlcCA8IHRoaXMudGltZUluZGV4XG4gICAgICAgID8gJ2RhdGUnXG4gICAgICAgIDogJ3RpbWUnXG4gICAgfSxcblxuICAgIHVwZGF0ZVBvcHVwcyhtb2RlID0gdGhpcy5nZXRNb2RlKCkpIHtcbiAgICAgIGlmIChtb2RlKSB7XG4gICAgICAgIHRoaXMuY2xvc2VkTW9kZSA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMuc2hvd0RhdGUgPSBtb2RlID09PSAnZGF0ZSdcbiAgICAgIHRoaXMuc2hvd1RpbWUgPSBtb2RlID09PSAndGltZSdcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kYXRlLXRpbWUtcGlja2VyIHtcbiAgJl9faW5uZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cblxuICAmX19pbnB1dCB7XG4gICAgZmxleDogMTtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIG1pbi13aWR0aDogMTJlbTtcbiAgfVxuXG4gIC5kaXRvLWRhdGUtcGlja2VyLFxuICAuZGl0by10aW1lLXBpY2tlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWUvbm8tdGVtcGxhdGUtc2hhZG93IC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhZ2luYXRpb25cbiAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbChcbiAgICB2LWlmPVwic2hvd1RvdGFsXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInRvdGFsID4gMFwiXG4gICAgKSB7eyBmaXJzdCB9fSDigJMge3sgbGFzdCB9fSAvIHt7IHRvdGFsIH19XG4gIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLS1yb3VuZChcbiAgICB2LWlmPVwibnVtUGFnZXMgPiAxXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZm9yPVwiYnV0dG9uIGluIGJ1dHRvbnNcIlxuICAgICAgOmNsYXNzPVwiZ2V0QnV0dG9uQ2xhc3NlcyhidXR0b24pXCJcbiAgICAgIDpkaXNhYmxlZD1cImJ1dHRvbi5kaXNhYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvbkNsaWNrQnV0dG9uKGJ1dHRvbilcIlxuICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtaWY9XCJidXR0b24udGV4dFwiXG4gICAgICApIHt7IGJ1dHRvbi50ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6cGFnZSddLFxuXG4gIHByb3BzOiB7XG4gICAgdG90YWw6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH0sXG4gICAgcGFnZTogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDEgfSxcbiAgICBwYWdlU2l6ZTogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDEwIH0sXG4gICAgc2hvd1RvdGFsOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQcmV2OiB0cnVlLFxuICAgICAgc2hvd05leHQ6IHRydWUsXG4gICAgICBjdXJyZW50UGFnZTogdGhpcy5wYWdlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZmlyc3QoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMucGFnZVNpemUgKyAxXG4gICAgfSxcblxuICAgIGxhc3QoKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5maXJzdCArIHRoaXMucGFnZVNpemUgLSAxLCB0aGlzLnRvdGFsKVxuICAgIH0sXG5cbiAgICBudW1QYWdlcygpIHtcbiAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy50b3RhbCAvIHRoaXMucGFnZVNpemUpXG4gICAgfSxcblxuICAgIGJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7IHNob3dQcmV2LCBzaG93TmV4dCwgY3VycmVudFBhZ2UsIG51bVBhZ2VzIH0gPSB0aGlzXG4gICAgICBjb25zdCBzaG93TGVuZ3RoID0gc2hvd1ByZXYgKyBzaG93TmV4dCArIDFcblxuICAgICAgbGV0IHN0YXJ0ID0gMVxuICAgICAgbGV0IGVuZCA9IDFcbiAgICAgIGlmIChudW1QYWdlcyA8PSBzaG93TGVuZ3RoKSB7XG4gICAgICAgIGVuZCA9IG51bVBhZ2VzXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlIDw9IHNob3dQcmV2ICsgMSkge1xuICAgICAgICBlbmQgPSBzaG93TGVuZ3RoXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlID49IG51bVBhZ2VzIC0gc2hvd05leHQpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgICAgc3RhcnQgPSBudW1QYWdlcyAtIHNob3dMZW5ndGggKyAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydCA9IGN1cnJlbnRQYWdlIC0gc2hvd1ByZXZcbiAgICAgICAgZW5kID0gY3VycmVudFBhZ2UgKyBzaG93TmV4dFxuICAgICAgfVxuXG4gICAgICBjb25zdCBidXR0b25zID0gW11cbiAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgIGluZGV4OiBjdXJyZW50UGFnZSAtIDEsXG4gICAgICAgIHR5cGU6ICdwcmV2JyxcbiAgICAgICAgZGlzYWJsZWQ6IGN1cnJlbnRQYWdlIDw9IDFcbiAgICAgIH0pXG4gICAgICBpZiAoc3RhcnQgPj0gMikge1xuICAgICAgICBidXR0b25zLnB1c2goeyBpbmRleDogMSwgdGV4dDogMSB9KVxuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0ID4gMikge1xuICAgICAgICBidXR0b25zLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBNYXRoLm1heCgxLCBjdXJyZW50UGFnZSAtIDEwKSxcbiAgICAgICAgICB0eXBlOiAnZWxsaXBzaXMtcHJldidcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgICBidXR0b25zLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgYWN0aXZlOiBpID09PSBjdXJyZW50UGFnZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBidXR0b25zLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBNYXRoLm1pbihudW1QYWdlcywgY3VycmVudFBhZ2UgKyAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLW5leHQnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZW5kIDw9IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBidXR0b25zLnB1c2goeyBpbmRleDogbnVtUGFnZXMsIHRleHQ6IG51bVBhZ2VzIH0pXG4gICAgICB9XG4gICAgICBidXR0b25zLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgKyAxLFxuICAgICAgICB0eXBlOiAnbmV4dCcsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA+PSBudW1QYWdlc1xuICAgICAgfSlcblxuICAgICAgcmV0dXJuIGJ1dHRvbnNcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBwYWdlKHBhZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlXG4gICAgfSxcblxuICAgIHBhZ2VTaXplKCkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0aGlzLm51bVBhZ2VzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLm51bVBhZ2VzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRQYWdlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnBhZ2UnLCB0bylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEJ1dHRvbkNsYXNzZXMoYnV0dG9uKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1idXR0b24nXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYCR7cHJlZml4fS0tJHtidXR0b24udHlwZX1gXTogYnV0dG9uLnR5cGUsXG4gICAgICAgIFtgJHtwcmVmaXh9LS1hY3RpdmVgXTogYnV0dG9uLmFjdGl2ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNsaWNrQnV0dG9uKGJ1dHRvbikge1xuICAgICAgaWYgKFxuICAgICAgICBidXR0b24uaW5kZXggJiZcbiAgICAgICAgIWJ1dHRvbi5kaXNhYmxlZCAmJlxuICAgICAgICBidXR0b24uaW5kZXggIT09IHRoaXMuY3VycmVudFBhZ2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gYnV0dG9uLmluZGV4XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYWdpbmF0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIG1hcmdpbjogMCAwLjVlbTtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbiB7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgIGFsbCAwLjNzIGVhc2UsXG4gICAgICBjb2xvciAwcyxcbiAgICAgIGJhY2tncm91bmQgMHMsXG4gICAgICBib3JkZXIgMHM7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBwYWRkaW5nOiAwIDAuNWVtO1xuXG4gICAgJi0tcHJldixcbiAgICAmLS1uZXh0IHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tYXJyb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi0tcHJldjo6YmVmb3JlIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICB9XG5cbiAgICAmLS1lbGxpcHNpcy1wcmV2LFxuICAgICYtLWVsbGlwc2lzLW5leHQge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tZWxsaXBzaXM7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXI6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tY2hldnJvbnM7XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgICYtLWVsbGlwc2lzLXByZXY6OmJlZm9yZSB7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXN3aXRjaChcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pXG4gIC5kaXRvLXN3aXRjaF9fcGFuZVxuICAgIGlucHV0KFxuICAgICAgOmlkPVwiaWRcIlxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW1vZGVsPVwiY2hlY2tlZFwiXG4gICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgOm5hbWU9XCJuYW1lXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gICAgLmRpdG8tc3dpdGNoX19idXR0b25cbiAgICBzcGFuLmRpdG8tc3dpdGNoX19sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICBzbG90KFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZSddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbHM6IHsgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja2VkOiB0aGlzLm1vZGVsVmFsdWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tc3dpdGNoJ1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy4kYXR0cnMuY2xhc3MsXG4gICAgICAgIHtcbiAgICAgICAgICBbYCR7cHJlZml4fS0tY2hlY2tlZGBdOiB0aGlzLmNoZWNrZWQsXG4gICAgICAgICAgW2Ake3ByZWZpeH0tLWRpc2FibGVkYF06IHRoaXMuZGlzYWJsZWRcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsczogeyBjaGVja2VkLCB1bmNoZWNrZWQgfSA9IHt9IH0gPSB0aGlzXG4gICAgICAvLyBDYWxjdWxhdGUgYC0tc3dpdGNoLXdpZHRoYCBpbiBgcmVtYCwgYmFzZWQgb24gbGFiZWwgbGVuZ3RoLlxuICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5tYXgoMCwgY2hlY2tlZD8ubGVuZ3RoLCB1bmNoZWNrZWQ/Lmxlbmd0aClcbiAgICAgIHJldHVybiB7XG4gICAgICAgICctLXN3aXRjaC13aWR0aCc6IGxlbmd0aCA/IGAke2xlbmd0aCAqIDEuNX1yZW1gIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBjbGFzczogXywgLi4uYXR0cmlidXRlcyB9ID0gdGhpcy4kYXR0cnNcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZShtb2RlbFZhbHVlKSB7XG4gICAgICB0aGlzLmNoZWNrZWQgPSBtb2RlbFZhbHVlXG4gICAgfSxcblxuICAgIGNoZWNrZWQoY2hlY2tlZCkge1xuICAgICAgaWYgKGNoZWNrZWQgIT09IHRoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGNoZWNrZWQpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIGNoZWNrZWQpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc3dpdGNoIHtcbiAgJHNlbGY6ICY7XG5cbiAgLy8gVXNlIHdob2xlIG11bHRpcGxlcyBvZiBgcmVtYCBmb3Igc2l6ZXMgYW5kIGBweGAgbWFyZ2lucy9wYWRkaW5nIGFsb25nXG4gIC8vIHdpdGggYGNhbGMoKWAgdG8gZW5kIHVwIHdpdGggZXZlbiBwaXhlbCBzaXplcy5cbiAgLS1zd2l0Y2gtd2lkdGg6IDRlbTtcbiAgLS1zd2l0Y2gtaGVpZ2h0OiAyZW07XG4gIC0tc3dpdGNoLW1hcmdpbjogMnB4O1xuICAtLXN3aXRjaC1wYWRkaW5nOiAzcHg7XG4gIC0tc3dpdGNoLXNwZWVkOiAzMDBtcztcbiAgLS1sYWJlbC1tYXJnaW46IDAuNWVtO1xuICAtLXdpZHRoOiBjYWxjKHZhcigtLXN3aXRjaC13aWR0aCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpO1xuICAtLWhlaWdodDogY2FsYyh2YXIoLS1zd2l0Y2gtaGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSk7XG4gIC0tb2Zmc2V0OiBjYWxjKHZhcigtLXdpZHRoKSAtIHZhcigtLWhlaWdodCkpO1xuXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IHZhcigtLXN3aXRjaC1oZWlnaHQpO1xuICAvLyBUbyBtYWtlIGlubGluZSBsYWJlbHMgYXBwZWFyIG9uIGNvbnNpc3RlbnQgYmFzZWxpbmU6XG4gIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICZfX3BhbmUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogdmFyKC0td2lkdGgpO1xuICAgIGhlaWdodDogdmFyKC0taGVpZ2h0KTtcbiAgfVxuXG4gICZfX3BhbmUsXG4gICZfX2xhYmVsIHtcbiAgICB0b3A6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIH1cblxuICBpbnB1dCB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHQ7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgIGJvcmRlci1jb2xvciAwLjNzLFxuICAgICAgYmFja2dyb3VuZC1jb2xvciAwLjNzO1xuICB9XG5cbiAgJl9fYnV0dG9uIHtcbiAgICAtLXNpemU6IGNhbGModmFyKC0taGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtcGFkZGluZykpO1xuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpO1xuICAgIGxlZnQ6IHZhcigtLXN3aXRjaC1wYWRkaW5nKTtcbiAgICB3aWR0aDogdmFyKC0tc2l6ZSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplKTtcbiAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLXNpemUpIC8gMik7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXN3aXRjaC1zcGVlZCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB9XG5cbiAgJl9fYnV0dG9uLFxuICAmX19sYWJlbCB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cblxuICAmX19sYWJlbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgfVxuXG4gICYtLWNoZWNrZWQge1xuICAgIGlucHV0IHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgI3skc2VsZn1fX2J1dHRvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgodmFyKC0tb2Zmc2V0KSk7XG4gICAgfVxuXG4gICAgI3skc2VsZn1fX2xhYmVsIHtcbiAgICAgIGxlZnQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgICByaWdodDogdW5zZXQ7XG4gICAgfVxuICB9XG5cbiAgJi0tZGlzYWJsZWQge1xuICAgIEBleHRlbmQgJWJ1dHRvbi1kaXNhYmxlZDtcbiAgfVxuXG4gICY6Zm9jdXMtd2l0aGluOm5vdCg6aG92ZXIpIHtcbiAgICAjeyRzZWxmfV9fYnV0dG9uIHtcbiAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctZm9jdXM7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHNjcmlwdD5cbmltcG9ydCB7IGggYXMgY3JlYXRlRWxlbWVudCwgVHJhbnNpdGlvbiB9IGZyb20gJ3Z1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmZ1bmN0aW9uIFRyYW5zaXRpb25IZWlnaHQoeyBlbmFibGVkIH0sIHsgc2xvdHMgfSkge1xuICByZXR1cm4gZW5hYmxlZFxuICAgID8gY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uLCBwcm9wcywgc2xvdHMpXG4gICAgOiBzbG90cy5kZWZhdWx0KClcbn1cblxuVHJhbnNpdGlvbkhlaWdodC5wcm9wcyA9IHtcbiAgZW5hYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvbkhlaWdodFxuXG5jb25zdCBzZXRTdHlsZSA9IChlbGVtZW50LCBzdHlsZSkgPT4gT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSlcblxuY29uc3QgbmV4dFRpbWVvdXQgPSBjYWxsYmFjayA9PiBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKVxuXG4vLyBGb3JjZSByZXBhaW50IHRvIG1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIGlzIHRyaWdnZXJlZCBjb3JyZWN0bHkuXG5jb25zdCBmb3JjZVJlcGFpbnQgPSBlbGVtZW50ID0+IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuaGVpZ2h0XG5cbmNvbnN0IHByb3BzID0ge1xuICBuYW1lOiAnZGl0by1oZWlnaHQnLFxuXG4gIG9uQWZ0ZXJFbnRlcihlbGVtZW50KSB7XG4gICAgLy8gQSB0aW1lb3V0IGJlZm9yZSBzZXR0aW5nIHN0eWxlIGlzIG9ubHkgcmVhbGx5IG5lZWRlZCBhZnRlciBjYWxscyB0b1xuICAgIC8vIGBmb3JjZVJlcGFpbnQoKWAsIGJ1dCB1c2luZyBvbmUgaGVyZSB0b28gcHJlc2VydmVzIGV4ZWN1dGlvbiBzZXF1ZW5jZSBzb1xuICAgIC8vIHRoYXQgdGhlIGNhbGwgZnJvbSBgZW50ZXIoKWAgY2FuIG5ldmVyIG91dHJ1biB0aGUgb25lIGZyb20gYGFmdGVyRW50ZXIoKWBcbiAgICBuZXh0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogbnVsbCB9KSlcbiAgfSxcblxuICBvbkVudGVyKGVsZW1lbnQpIHtcbiAgICAvLyBGb3Igc29tZSByZWFzb24gd2UncmUgZ2V0dGluZyB0d28gYG9uRW50ZXIoKWAgY2FsbHMgcGVyIHRyYW5zaXRpb24sXG4gICAgLy8gc28gd2UgbmVlZCB0byBpZ25vcmUgdGhlIHNlY29uZCBvbmUuIFRoaXMgbWlnaHQgYmUgbGlua2VkIHRvIHRoZSB1c2VcbiAgICAvLyBvZiBgbmV4dFRpbWVvdXQoKWAsIHdoaWNoIGlzIHJlcXVpcmVkIHRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZSBmb3JcbiAgICAvLyBgaGVpZ2h0YCwgYmFzZWQgb24gYCYtLWxhYmVsLXZlcnRpY2FsYCBjYWxjdWxhdGlvbnMuXG4gICAgY29uc3QgeyB3aWR0aCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgIGhlaWdodDogJ2F1dG8nXG4gICAgfSlcbiAgICBuZXh0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB7IGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgICB3aWR0aDogbnVsbCxcbiAgICAgICAgcG9zaXRpb246IG51bGwsXG4gICAgICAgIHZpc2liaWxpdHk6IG51bGwsXG4gICAgICAgIGhlaWdodDogMFxuICAgICAgfSlcbiAgICAgIGZvcmNlUmVwYWludChlbGVtZW50KVxuICAgICAgbmV4dFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSkpXG4gICAgfSlcbiAgfSxcblxuICBvbkxlYXZlKGVsZW1lbnQpIHtcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pXG4gICAgZm9yY2VSZXBhaW50KGVsZW1lbnQpXG4gICAgbmV4dFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQ6IDAgfSkpXG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbiRkdXJhdGlvbjogMC4xNXM7XG5cbi5kaXRvLWhlaWdodC1lbnRlci1hY3RpdmUsXG4uZGl0by1oZWlnaHQtbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNpdGlvbjogaGVpZ2h0ICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5kaXRvLWhlaWdodC1lbnRlci1hY3RpdmUge1xuICBhbmltYXRpb246IGRpdG8tc2xpZGUtZW50ZXIgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbn1cblxuLmRpdG8taGVpZ2h0LWxlYXZlLWFjdGl2ZSB7XG4gIGFuaW1hdGlvbjogZGl0by1zbGlkZS1sZWF2ZSAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xufVxuXG4uZGl0by1oZWlnaHQtZW50ZXItZnJvbSxcbi5kaXRvLWhlaWdodC1sZWF2ZS10byB7XG4gIGhlaWdodDogMDtcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBtYXJrUmF3LCB1c2VTbG90cywgQ29tbWVudCB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZOb2RlQ29udGVudCh2bm9kZSkge1xuICByZXR1cm4gdm5vZGUgJiYgYXNBcnJheSh2bm9kZSkuc29tZSh2bm9kZSA9PiB2bm9kZS50eXBlICE9PSBDb21tZW50KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzU2xvdENvbnRlbnQoc2xvdCwgcHJvcHMgPSB7fSkge1xuICBzbG90ID0gaXNTdHJpbmcoc2xvdCkgPyB1c2VTbG90cygpW3Nsb3RdIDogc2xvdFxuICByZXR1cm4gaGFzVk5vZGVDb250ZW50KHNsb3Q/Lihwcm9wcykpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYXcodmFsdWUpIHtcbiAgcmV0dXJuIG1hcmtSYXcoeyB2YWx1ZSB9KVxufVxuIl0sIm5hbWVzIjpbImRlc2NyaWJlRGF0ZSIsImRhdGUiLCJhbHRlckRhdGUiLCJvdmVycmlkZXMiLCJwYXJzZURhdGUiLCJzdHJpbmciLCJsb2NhbGUiLCJ0aW1lIiwidGltZURlZmF1bHQiLCJkYXkiLCJzZXAxIiwibW9udGgiLCJzZXAyIiwieWVhciIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCIsImdldERhdGVQYXJ0cyIsImdldE1vbnRoSW5kZXgiLCJpc1ZhbGlkVGltZVBhcnQiLCJwYXJ0IiwiZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uIiwicG9zaXRpb24iLCJwYXJ0cyIsImdldFBvc2l0aW9uIiwibGVuZ3RoIiwicG9zIiwiaW5kZXgiLCJvZmZzZXQiLCJpc1VTIiwidmFsdWVzIiwic3RhcnQiLCJlbmQiLCJ2YWx1ZSIsIm1hdGNoIiwic2hvcnRGb3JtYXQiLCJsb25nRm9ybWF0IiwiX3NmY19tYWluIiwid2Vla2RheU5hbWVzIiwibW9udGhOYW1lcyIsImdldExvY2FsZU5hbWVzIiwidG8iLCJmcm9tIiwibW9kZSIsInVwZGF0ZSIsInN0ZXAiLCJjdXJyZW50VmFsdWUiLCJlbnRlciIsInN0YXJ0WWVhciIsImkiLCJmaXJzdERheVdlZWsiLCJudW1EYXlzIiwicHJldk1vbnRoIiwicHJldk1vbnRoTnVtRGF5cyIsIm5vdyIsImlzRGF5Iiwic3RhdGUiLCJuZXh0TW9udGhOZWVkIiwibmV4dE1vbnRoIiwibG9jYWxlTmFtZXMiLCJuYW1lcyIsImFkZEV2ZW50cyIsInRhcmdldHMiLCJldmVudHMiLCJhc0FycmF5IiwidHlwZSIsImhhbmRsZXIiLCJ0YXJnZXQiLCJjb21iaW5lRXZlbnRzIiwiZXZlbnQiLCJnZXRLZXkiLCJnZXRLZXlOYXZpZ2F0aW9uIiwia2V5IiwiZ2V0VGFyZ2V0IiwiY29tcG9uZW50IiwiaXNTdHJpbmciLCJjbGFzc2VzIiwiaHlwaGVuYXRlIiwic2hvdyIsInRyaWdnZXIiLCJwb3B1cCIsImVsIiwiYm91bmRzIiwidHJpZ2dlckxlZnQiLCJ0cmlnZ2VyVG9wIiwidHJpZ2dlcldpZHRoIiwidHJpZ2dlckhlaWdodCIsInBvcHVwV2lkdGgiLCJwb3B1cEhlaWdodCIsInBhcnQxIiwicGFydDIiLCJ3aW5XaWR0aCIsIndpbkhlaWdodCIsImxlZnQiLCJ0b3AiLCJ0cmlnZ2VyQm91bmRzIiwicGFyZW50IiwiaW5wdXQiLCJfIiwiYXR0cmlidXRlcyIsInNpemUiLCJtaW4iLCJtYXgiLCJnZXRMZW5ndGgiLCJfb3BlbkJsb2NrIiwiX2NyZWF0ZUVsZW1lbnRCbG9jayIsInNldFNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsIlRyaWdnZXIiLCJDYWxlbmRhciIsIklucHV0RmllbGQiLCJJY29uIiwiZGVmYXVsdEZvcm1hdHMiLCJmb3JtYXQiLCJmb2N1cyIsImdldERhdGVQYXJ0IiwiY2FsZW5kYXIiLCJ0b2dnbGUiLCJzZWxlY3Rpb24iLCJzbW9vdGgiLCJzY3JvbGwiLCJyZWYiLCJsaW5lSGVpZ2h0IiwiZGlzdGFuY2UiLCJuYW1lIiwiY291bnQiLCJpc0RpZ2l0IiwiY2hhciIsIkRhdGVQaWNrZXIiLCJUaW1lUGlja2VyIiwidHJhbnNpdGlvbiIsImRpc2FibGVkIiwiYXNzaWduRGVlcGx5Iiwib3B0aW9ucyIsInRleHQiLCJzaG93UHJldiIsInNob3dOZXh0IiwiY3VycmVudFBhZ2UiLCJudW1QYWdlcyIsInNob3dMZW5ndGgiLCJidXR0b25zIiwicGFnZSIsImJ1dHRvbiIsInByZWZpeCIsImNoZWNrZWQiLCJ1bmNoZWNrZWQiLCJtb2RlbFZhbHVlIiwiVHJhbnNpdGlvbkhlaWdodCIsImVuYWJsZWQiLCJzbG90cyIsImNyZWF0ZUVsZW1lbnQiLCJUcmFuc2l0aW9uIiwicHJvcHMiLCJzZXRTdHlsZSIsImVsZW1lbnQiLCJzdHlsZSIsIm5leHRUaW1lb3V0IiwiY2FsbGJhY2siLCJmb3JjZVJlcGFpbnQiLCJ3aWR0aCIsImhlaWdodCIsImhhc1ZOb2RlQ29udGVudCIsInZub2RlIiwiQ29tbWVudCIsImhhc1Nsb3RDb250ZW50Iiwic2xvdCIsInVzZVNsb3RzIiwicmF3IiwibWFya1JhdyJdLCJtYXBwaW5ncyI6Ijs7QUFBTyxTQUFTQSxHQUFhQyxHQUFNO0FBQ2pDLFNBQU87QUFBQSxJQUNMLE1BQU1BLEdBQU0sWUFBVyxLQUFNO0FBQUEsSUFD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
|
|
1688
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by11aS5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzL3Z1ZS5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b24udnVlIiwiLi4vc3JjL3V0aWxzL2RhdGUuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2FsZW5kYXIudnVlIiwiLi4vc3JjL3V0aWxzL2V2ZW50LmpzIiwiLi4vc3JjL3V0aWxzL3RyaWdnZXIuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVHJpZ2dlci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvSW5wdXQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0ljb24udnVlIiwiLi4vc3JjL3V0aWxzL3NlbGVjdGlvbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EYXRlUGlja2VyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UaW1lUGlja2VyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EYXRlVGltZVBpY2tlci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU3dpdGNoLnZ1ZSIsIi4uL3NyYy90cmFuc2l0aW9ucy9UcmFuc2l0aW9uSGVpZ2h0LnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXJrUmF3LCB1c2VTbG90cywgQ29tbWVudCB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZOb2RlQ29udGVudCh2bm9kZSkge1xuICByZXR1cm4gdm5vZGUgJiYgYXNBcnJheSh2bm9kZSkuc29tZSh2bm9kZSA9PiB2bm9kZS50eXBlICE9PSBDb21tZW50KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzU2xvdENvbnRlbnQoc2xvdCwgcHJvcHMgPSB7fSkge1xuICBzbG90ID0gaXNTdHJpbmcoc2xvdCkgPyB1c2VTbG90cygpW3Nsb3RdIDogc2xvdFxuICByZXR1cm4gaGFzVk5vZGVDb250ZW50KHNsb3Q/Lihwcm9wcykpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYXcodmFsdWUpIHtcbiAgcmV0dXJuIG1hcmtSYXcoeyB2YWx1ZSB9KVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgOnR5cGU9XCJ0eXBlXCJcbiAgOnRpdGxlPVwidGl0bGVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpjbGFzcz1cIltjbGFzc2VzLCB7ICdkaXRvLWJ1dHRvbi0tYWZmaXhlZCc6IGhhc0FmZml4ZXMgfV1cIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbiAgLmRpdG8tYnV0dG9uX19wcmVmaXgoXG4gICAgdi1pZj1cImhhc0FmZml4ZXNcIlxuICApXG4gICAgc2xvdChuYW1lPVwicHJlZml4XCIpXG4gIC5kaXRvLWJ1dHRvbl9fdGV4dChcbiAgICB2LWlmPVwidGV4dCB8fCBoYXNBZmZpeGVzXCJcbiAgKSB7eyB0ZXh0IHx8ICcnIH19XG4gICAgc2xvdFxuICAuZGl0by1idXR0b25fX3N1ZmZpeChcbiAgICB2LWlmPVwiaGFzQWZmaXhlc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJzdWZmaXhcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBoYXNTbG90Q29udGVudCB9IGZyb20gJy4uL3V0aWxzL3Z1ZS5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgdHlwZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdidXR0b24nIH0sXG4gICAgdGV4dDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aXRsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBoYXNBZmZpeGVzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgaGFzU2xvdENvbnRlbnQodGhpcy4kc2xvdHMucHJlZml4KSB8fFxuICAgICAgICBoYXNTbG90Q29udGVudCh0aGlzLiRzbG90cy5zdWZmaXgpXG4gICAgICApXG4gICAgfSxcblxuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kYXR0cnMuY2xhc3NcbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IF8sIC4uLmF0dHJpYnV0ZXMgfSA9IHRoaXMuJGF0dHJzXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJleHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVEYXRlKGRhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBkYXRlPy5nZXRGdWxsWWVhcigpID8/IDAsXG4gICAgbW9udGg6IGRhdGU/LmdldE1vbnRoKCkgPz8gMCxcbiAgICBkYXk6IGRhdGU/LmdldERhdGUoKSA/PyAwLFxuICAgIGhvdXI6IGRhdGU/LmdldEhvdXJzKCkgPz8gMCxcbiAgICBtaW51dGU6IGRhdGU/LmdldE1pbnV0ZXMoKSA/PyAwLFxuICAgIHNlY29uZDogZGF0ZT8uZ2V0U2Vjb25kcygpID8/IDAsXG4gICAgbWlsbGlzZWNvbmQ6IGRhdGU/LmdldE1pbGxpc2Vjb25kcygpID8/IDBcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWx0ZXJEYXRlKGRhdGUsIG92ZXJyaWRlcyA9IHt9KSB7XG4gIHJldHVybiBuZXcgRGF0ZSguLi5PYmplY3QudmFsdWVzKHsgLi4uZGVzY3JpYmVEYXRlKGRhdGUpLCAuLi5vdmVycmlkZXMgfSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUoc3RyaW5nLCB7XG4gIGxvY2FsZSA9ICdlbi1VUycsXG4gIGRhdGUgPSB0cnVlLFxuICB0aW1lID0gdHJ1ZVxufSA9IHt9KSB7XG4gIGNvbnN0IHRpbWVEZWZhdWx0ID0gdGltZSA/IG51bGwgOiAwXG4gIGxldCBbXG4gICAgZGF5LFxuICAgIHNlcDEsXG4gICAgbW9udGgsXG4gICAgc2VwMixcbiAgICB5ZWFyLFxuICAgICxcbiAgICBob3VyID0gdGltZURlZmF1bHQsXG4gICAgLFxuICAgIG1pbnV0ZSA9IHRpbWVEZWZhdWx0LFxuICAgICxcbiAgICBzZWNvbmQgPSB0aW1lRGVmYXVsdCxcbiAgICAsXG4gICAgbWlsbGlzZWNvbmQgPSB0aW1lRGVmYXVsdFxuICBdID0gZ2V0RGF0ZVBhcnRzKHN0cmluZywgeyBkYXRlLCB0aW1lIH0pXG4gIGlmICh5ZWFyICYmIHllYXIubGVuZ3RoID49IDQpIHtcbiAgICBpZiAobG9jYWxlID09PSAnZW4tVVMnICYmIHNlcDEgPT09ICcvJyAmJiBzZXAyID09PSAnLycpIHtcbiAgICAgIC8vIEFtZXJpY2FuIGZvcm1hdDogTU0vREQvWVlZWVxuICAgICAgO1tkYXksIG1vbnRoXSA9IFttb250aCwgZGF5XVxuICAgIH1cbiAgICBtb250aCA9IGdldE1vbnRoSW5kZXgobW9udGgsIHsgbG9jYWxlIH0pXG4gICAgY29uc3QgaXNWYWxpZFRpbWVQYXJ0ID0gcGFydCA9PiBwYXJ0ID09PSBudWxsIHx8IHBhcnQubGVuZ3RoID09PSAyXG4gICAgaWYgKFxuICAgICAgbW9udGggIT09IG51bGwgJiYgKFxuICAgICAgICAhdGltZSB8fCAoXG4gICAgICAgICAgaXNWYWxpZFRpbWVQYXJ0KGhvdXIpICYmXG4gICAgICAgICAgaXNWYWxpZFRpbWVQYXJ0KG1pbnV0ZSkgJiZcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQoc2Vjb25kKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICAgICt5ZWFyLFxuICAgICAgICArbW9udGgsXG4gICAgICAgICtkYXksXG4gICAgICAgICtob3VyLFxuICAgICAgICArbWludXRlLFxuICAgICAgICArc2Vjb25kLFxuICAgICAgICArbWlsbGlzZWNvbmRcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVQYXJ0QXRQb3NpdGlvbihzdHJpbmcsIHBvc2l0aW9uLCB7XG4gIGxvY2FsZSA9ICdlbi1VUycsXG4gIGRhdGUgPSB0cnVlLFxuICB0aW1lID0gdHJ1ZVxufSA9IHt9KSB7XG4gIGNvbnN0IHBhcnRzID0gZ2V0RGF0ZVBhcnRzKHN0cmluZywgeyBkYXRlLCB0aW1lIH0pXG5cbiAgY29uc3QgZ2V0UG9zaXRpb24gPSAocG9zaXRpb24sIGxlbmd0aCA9IHBhcnRzLmxlbmd0aCkgPT4ge1xuICAgIGxldCBwb3MgPSAwXG4gICAgbGV0IGluZGV4ID0gMFxuICAgIHdoaWxlICgocG9zaXRpb24gPT09IG51bGwgfHwgcG9zIDw9IHBvc2l0aW9uKSAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgICAgcG9zICs9IHBhcnRzW2luZGV4KytdPy5sZW5ndGggPz8gMFxuICAgIH1cbiAgICByZXR1cm4geyBwb3NpdGlvbjogcG9zLCBpbmRleCB9XG4gIH1cblxuICAvLyBUaW1lIHN0YXJ0cyBhdCBpbmRleCA2LCBkdWUgdG8gdGhlIHNlcGFyYXRvciBhZnRlciB0aGUgZGF0ZS5cbiAgY29uc3Qgb2Zmc2V0ID0gIWRhdGUgPyBnZXRQb3NpdGlvbihudWxsLCA2KS5wb3NpdGlvbiA6IDBcbiAgcG9zaXRpb24gKz0gb2Zmc2V0XG5cbiAgbGV0IHsgaW5kZXggfSA9IGdldFBvc2l0aW9uKHBvc2l0aW9uKVxuXG4gIGNvbnN0IGlzVVMgPSBsb2NhbGUgPT09ICdlbi1VUydcbiAgY29uc3QgdmFsdWVzID0gW1xuICAgIGlzVVMgPyAnbW9udGgnIDogJ2RheScsXG4gICAgbnVsbCxcbiAgICBpc1VTID8gJ2RheScgOiAnbW9udGgnLFxuICAgIG51bGwsXG4gICAgJ3llYXInLFxuICAgIG51bGwsXG4gICAgJ2hvdXInLFxuICAgIG51bGwsXG4gICAgJ21pbnV0ZScsXG4gICAgbnVsbCxcbiAgICAnc2Vjb25kJyxcbiAgICBudWxsLFxuICAgICdtaWxsaXNlY29uZCdcbiAgXVxuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIGlmICh2YWx1ZXNbaW5kZXhdKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGdldFBvc2l0aW9uKG51bGwsIGluZGV4KS5wb3NpdGlvbiAtIG9mZnNldFxuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBwYXJ0c1tpbmRleF0ubGVuZ3RoXG4gICAgICByZXR1cm4geyBuYW1lOiB2YWx1ZXNbaW5kZXhdLCBzdGFydCwgZW5kIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZVBhcnRzKHN0cmluZywgeyBkYXRlID0gdHJ1ZSwgdGltZSA9IHRydWUgfSA9IHt9KSB7XG4gIGNvbnN0IHBhcnRzID0gc3RyaW5nPy5zcGxpdCgvKFtcXHMuLDovXSspLykgfHwgW11cbiAgaWYgKCFkYXRlKSB7XG4gICAgLy8gQWRkIGR1bW15IGRhdGUgcGFydHMgdG8gbWFrZSBzdXJlIHdlIGdldCBhIHRpbWUtb25seSBkYXRlLlxuICAgIHBhcnRzLnVuc2hpZnQoJzEnLCAnLicsICcxJywgJy4nLCAnMjAwMCcsICcgJylcbiAgfVxuICBpZiAoIXRpbWUgJiYgcGFydHMubGVuZ3RoID4gNSkge1xuICAgIHBhcnRzLmxlbmd0aCA9IDVcbiAgfVxuICByZXR1cm4gcGFydHNcbn1cblxuZnVuY3Rpb24gZ2V0TW9udGhJbmRleChtb250aCwgeyBsb2NhbGUgPSAnZW4tVVMnIH0gPSB7fSkge1xuICBjb25zdCB2YWx1ZSA9ICttb250aFxuICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZSAtIDFcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1vbnRoLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gIGlmIChtYXRjaC5sZW5ndGggPCAzKSByZXR1cm4gbnVsbFxuICBjb25zdCBzaG9ydEZvcm1hdCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgeyBtb250aDogJ3Nob3J0JyB9KVxuICBjb25zdCBsb25nRm9ybWF0ID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCB7IG1vbnRoOiAnbG9uZycgfSlcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDIwMDAsIGksIDEpXG4gICAgaWYgKFxuICAgICAgc2hvcnRGb3JtYXQuZm9ybWF0KGRhdGUpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChtYXRjaCkgfHxcbiAgICAgIGxvbmdGb3JtYXQuZm9ybWF0KGRhdGUpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChtYXRjaClcbiAgICApIHtcbiAgICAgIHJldHVybiBpXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNhbGVuZGFyXG4gIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgLmRpdG8tY2FsZW5kYXItaW5uZXJcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiB0cnVlIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCdtb250aCcpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogdHJ1ZSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci13ZWVrZGF5c1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ3ZWVrZGF5IGluIHdlZWtkYXlOYW1lc1wiXG4gICAgICAgICAgICApIHt7IHdlZWtkYXkuc2hvcnQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJkYXRlIGluIGRhdGVSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImRhdGUuc3RhdGUgIT09ICdkaXNhYmxlZCcgJiYgc2VsZWN0RGF0ZShkYXRlLmRhdGUpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZS50ZXh0IH19XG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3Qtbm93KFxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA6dGl0bGU9XCJkYXRlVG9TdHJpbmcobmV3IERhdGUoKSlcIlxuICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShuZXcgRGF0ZSgpKVwiXG4gICAgICAgICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAnbW9udGgnXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiB0cnVlIH0pIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1tb250aHNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiKG1vbnRoLCBpbmRleCkgaW4gbW9udGhOYW1lc1wiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldE1vbnRoQ2xhc3MoaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0TW9udGgoaW5kZXgpXCJcbiAgICAgICAgICAgICkge3sgbW9udGguc2hvcnQgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ3llYXInXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhbiB7eyBkZWNhZGVUb1N0cmluZyhjdXJyZW50VmFsdWUpIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXllYXJzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cInllYXIgaW4geWVhclJhbmdlXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0WWVhckNsYXNzKHllYXIpXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0WWVhcih5ZWFyKVwiXG4gICAgICAgICAgICApIHt7IHllYXIgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZXNjcmliZURhdGUsIGFsdGVyRGF0ZSB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnc2VsZWN0J10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWREYXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIG1vZGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZGF5JyB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IHdlZWtkYXlOYW1lcywgbW9udGhOYW1lcyB9ID0gZ2V0TG9jYWxlTmFtZXModGhpcy5sb2NhbGUpXG4gICAgcmV0dXJuIHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXMsXG4gICAgICBkYXRlUmFuZ2U6IFtdLFxuICAgICAgeWVhclJhbmdlOiBbXSxcbiAgICAgIGN1cnJlbnRWYWx1ZTogKFxuICAgICAgICB0aGlzLm1vZGVsVmFsdWUgfHxcbiAgICAgICAgLy8gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIHVzZSBjdXJyZW50IGRhdGUgYnV0IGNsZWFyIHRpbWUgZmllbGRzOlxuICAgICAgICBhbHRlckRhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSlcbiAgICAgICksXG4gICAgICBjdXJyZW50TW9kZTogdGhpcy5tb2RlXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0byB8fCBuZXcgRGF0ZSgpXG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRpc2FibGVkRGF0ZTogJ3VwZGF0ZURhdGVSYW5nZScsXG5cbiAgICBtb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRNb250aENsYXNzKG1vbnRoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6IChcbiAgICAgICAgICB0aGlzLm1vZGVsVmFsdWUgJiZcbiAgICAgICAgICBtb250aCA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldE1vbnRoKCkgJiZcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgICApLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOiBtb250aCA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRZZWFyQ2xhc3MoeWVhcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOiAoXG4gICAgICAgICAgdGhpcy5tb2RlbFZhbHVlICYmIHllYXIgPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6IHllYXIgPT09IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0RGF0ZShvdmVycmlkZXMsIHVwZGF0ZSA9IGZhbHNlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGFsdGVyRGF0ZSh0aGlzLmN1cnJlbnRWYWx1ZSwgb3ZlcnJpZGVzKVxuICAgICAgaWYgKHVwZGF0ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdGVwRGVjYWRlKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogMTBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNldE1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9LFxuXG4gICAgc3RlcE1vbnRoKHN0ZXApIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IHllYXIsIG1vbnRoIH0gPSB0aGlzLmdldFllYXJNb250aChcbiAgICAgICAgY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgc3RlcFxuICAgICAgKVxuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgbW9udGgsXG4gICAgICAgIGRheTogTWF0aC5taW4oXG4gICAgICAgICAgdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCksXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RGF0ZSgpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHN0ZXBZZWFyKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZWxlY3REYXRlKGRhdGUpIHtcbiAgICAgIHRoaXMuc2V0RGF0ZShkZXNjcmliZURhdGUoZGF0ZSksIHRydWUpXG4gICAgICB0aGlzLiRlbWl0KCdzZWxlY3QnKVxuICAgIH0sXG5cbiAgICBzZWxlY3RNb250aChtb250aCkge1xuICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgLy8gU2V0IGRheSB0byAxIHRvIGF2b2lkIHNlbGVjdGluZyBhIGRhdGUgdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZVxuICAgICAgLy8gbmV3IG1vbnRoLCBlLmcuIEZlYiAzMSAtPiBNYXIgMy5cbiAgICAgIHRoaXMuc2V0RGF0ZSh7IG1vbnRoLCBkYXk6IDEgfSwgdHJ1ZSlcbiAgICB9LFxuXG4gICAgc2VsZWN0WWVhcih5ZWFyKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgIHRoaXMuc2V0RGF0ZSh7IHllYXIgfSwgdHJ1ZSlcbiAgICB9LFxuXG4gICAgZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICBpZiAobW9udGggPiAxMSkge1xuICAgICAgICB5ZWFyKytcbiAgICAgICAgbW9udGggPSAwXG4gICAgICB9IGVsc2UgaWYgKG1vbnRoIDwgMCkge1xuICAgICAgICB5ZWFyLS1cbiAgICAgICAgbW9udGggPSAxMVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgeWVhciwgbW9udGggfVxuICAgIH0sXG5cbiAgICBkYXRlVG9TdHJpbmcoXG4gICAgICBkYXRlLFxuICAgICAgeyB5ZWFyLCBtb250aCwgZGF5IH0gPSB7IHllYXI6IHRydWUsIG1vbnRoOiB0cnVlLCBkYXk6IHRydWUgfVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgeWVhcjogeWVhciAmJiAnbnVtZXJpYycsXG4gICAgICAgIG1vbnRoOiBtb250aCAmJiAnbG9uZycsXG4gICAgICAgIGRheTogZGF5ICYmICdudW1lcmljJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZGVjYWRlVG9TdHJpbmcoZGF0ZSkge1xuICAgICAgY29uc3QgeWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoZGF0ZS5nZXRGdWxsWWVhcigpKVxuICAgICAgcmV0dXJuIGAke3llYXJ9IOKAkyAke3llYXIgKyA5fWBcbiAgICB9LFxuXG4gICAgZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKVxuICAgIH0sXG5cbiAgICBnZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKSB7XG4gICAgICBjb25zdCB5ZWFyU3RyID0geWVhci50b1N0cmluZygpXG4gICAgICByZXR1cm4gK2Ake3llYXJTdHIuc2xpY2UoMCwgLTEpfTBgXG4gICAgfSxcblxuICAgIG5hdmlnYXRlKHsgc3RlcCwgZW50ZXIsIG1vZGUgPSB0aGlzLmN1cnJlbnRNb2RlLCB1cGRhdGUgPSBmYWxzZSB9KSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7IGRheTogY3VycmVudFZhbHVlLmdldERhdGUoKSArIHN0ZXAgfSwgdXBkYXRlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoeyBtb250aDogY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBzdGVwIH0sIHVwZGF0ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoeyB5ZWFyOiBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgfSwgdXBkYXRlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChlbnRlcikge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudE1vZGUpIHtcbiAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRlKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVEYXRlUmFuZ2UoKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IFtdXG4gICAgICB0aGlzLnllYXJSYW5nZSA9IFtdXG5cbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB5ZWFyID0gY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIGNvbnN0IG1vbnRoID0gY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcilcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgICB0aGlzLnllYXJSYW5nZS5wdXNoKHN0YXJ0WWVhciArIGkpXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyTW9udGhGaXJzdERheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKVxuICAgICAgbGV0IGZpcnN0RGF5V2VlayA9IGN1cnJNb250aEZpcnN0RGF5LmdldERheSgpICsgMVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA9PT0gMCkge1xuICAgICAgICBmaXJzdERheVdlZWsgPSA3XG4gICAgICB9XG4gICAgICBjb25zdCBudW1EYXlzID0gdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aClcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPiAxKSB7XG4gICAgICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoIC0gMSlcbiAgICAgICAgY29uc3QgcHJldk1vbnRoTnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoXG4gICAgICAgICAgcHJldk1vbnRoLnllYXIsXG4gICAgICAgICAgcHJldk1vbnRoLm1vbnRoXG4gICAgICAgIClcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmaXJzdERheVdlZWs7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRheSA9IHByZXZNb250aE51bURheXMgLSBmaXJzdERheVdlZWsgKyBpICsgMVxuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShwcmV2TW9udGgueWVhciwgcHJldk1vbnRoLm1vbnRoLCBkYXkpXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBkYXksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKVxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbnVtRGF5czsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaSlcbiAgICAgICAgY29uc3QgaXNEYXkgPSBkYXRlID0+IChcbiAgICAgICAgICBkYXRlICYmXG4gICAgICAgICAgZGF0ZS5nZXREYXRlKCkgPT09IGkgJiZcbiAgICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHllYXIgJiZcbiAgICAgICAgICBkYXRlLmdldE1vbnRoKCkgPT09IG1vbnRoXG4gICAgICAgIClcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBpc0RheSh0aGlzLm1vZGVsVmFsdWUpXG4gICAgICAgICAgPyAnYWN0aXZlJ1xuICAgICAgICAgIDogaXNEYXkobm93KVxuICAgICAgICAgICAgPyAndG9kYXknXG4gICAgICAgICAgICA6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpXG4gICAgICAgICAgICAgID8gJ2Rpc2FibGVkJ1xuICAgICAgICAgICAgICA6IGlzRGF5KGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICAgICAgICA/ICdjdXJyZW50J1xuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dE1vbnRoTmVlZCA9IDQyIC0gdGhpcy5kYXRlUmFuZ2UubGVuZ3RoXG4gICAgICBpZiAobmV4dE1vbnRoTmVlZCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5nZXRZZWFyTW9udGgoeWVhciwgbW9udGggKyAxKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBuZXh0TW9udGhOZWVkOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUobmV4dE1vbnRoLnllYXIsIG5leHRNb250aC5tb250aCwgaSlcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgbG9jYWxlTmFtZXMgPSB7fVxuXG4vLyBDYWxsaW5nIGB0b0xvY2FsZVN0cmluZygpYCB0aGlzIG11Y2ggYXBwZWFycyB0byBiZSBleHBlbnNpdmUsIHNvIGNhY2hlIGl0OlxuZnVuY3Rpb24gZ2V0TG9jYWxlTmFtZXMobG9jYWxlKSB7XG4gIGxldCBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV1cbiAgaWYgKCFuYW1lcykge1xuICAgIGNvbnN0IHdlZWtkYXlOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCAwLCBpKVxuICAgICAgd2Vla2RheU5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBtb250aE5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMjsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgaSwgMClcbiAgICAgIG1vbnRoTmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdID0ge1xuICAgICAgd2Vla2RheU5hbWVzLFxuICAgICAgbW9udGhOYW1lc1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZXNcbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNhbGVuZGFyIHtcbiAgbWluLXdpZHRoOiAyNDBweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLmRpdG8tY2FsZW5kYXItcG9wdXAge1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICB6LWluZGV4OiAkei1pbmRleC1wb3B1cDtcbn1cblxuLmRpdG8tY2FsZW5kYXItYm9keSB7XG4gIHBhZGRpbmc6IDAgMC41ZW07XG5cbiAgc3BhbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA3KTtcbiAgICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6IGNhbGMoI3skaW5wdXQtaGVpZ2h0fSAtIDJweCk7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS10b2RheSB7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmU7XG4gICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSB7XG4gICAgJixcbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1kaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1kaXNhYmxlZCxcbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1ncmF5IHtcbiAgICBjb2xvcjogIzk5OTk5OTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1tb250aHMsXG4uZGl0by1jYWxlbmRhci15ZWFycyB7XG4gIHNwYW4ge1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA0KTtcbiAgICBtYXJnaW46IDAuNWVtIDA7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3BhbiB7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLyA1KTtcbn1cblxuLmRpdG8tY2FsZW5kYXIgYSxcbi5kaXRvLWNhbGVuZGFyLWRhdGVzIHNwYW4sXG4uZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbixcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW4ge1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlciBzcGFuIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuXG4gIGEge1xuICAgIHBhZGRpbmc6IDAgMC4yZW07XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyLW1vbnRocyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyOm5vdCg6aG92ZXIpIC5kaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCB7XG4gIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG59XG5cbi5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzIHNwYW4ge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlcixcbi5kaXRvLWNhbGVuZGFyLWZvb3RlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xufVxuXG4uZGl0by1jYWxlbmRhci1mb290ZXIge1xuICBib3JkZXItdG9wOiAkYm9yZGVyLXN0eWxlO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZTtcbiAgZGlzcGxheTogZmxleDtcblxuICA+IHNwYW4ge1xuICAgIG1hcmdpbjogYXV0bztcbiAgICBwYWRkaW5nOiAwIDAuNWVtO1xuICB9XG5cbiAgYSB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLXByZXYsXG4uZGl0by1jYWxlbmRhci1zdGVwLW5leHQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiA1JTtcbiAgbWluLXdpZHRoOiAyZW07XG4gIG1heC13aWR0aDogM2VtO1xuXG4gICY6OmFmdGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBmb250LXNpemU6IDEuMjVlbTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLXByZXYge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ+KAuSc7XG4gIH1cblxuICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlciB7XG4gICAgY29udGVudDogJ8KrJztcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zdGVwLW5leHQge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ+KAuic7XG4gIH1cblxuICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlciB7XG4gICAgY29udGVudDogJ8K7JztcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1zZWxlY3Qtbm93IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICdOb3cnO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRFdmVudHModGFyZ2V0cywgZXZlbnRzKSB7XG4gIHRhcmdldHMgPVxuICAgIHRhcmdldHMgaW5zdGFuY2VvZiBOb2RlTGlzdFxuICAgICAgPyBBcnJheS5mcm9tKHRhcmdldHMpXG4gICAgICA6IGFzQXJyYXkodGFyZ2V0cylcblxuICBmb3IgKGNvbnN0IFt0eXBlLCBoYW5kbGVyXSBvZiBPYmplY3QuZW50cmllcyhldmVudHMpKSB7XG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZW1vdmUoKSB7XG4gICAgICBmb3IgKGNvbnN0IFt0eXBlLCBoYW5kbGVyXSBvZiBPYmplY3QuZW50cmllcyhldmVudHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUV2ZW50cyguLi5ldmVudHMpIHtcbiAgcmV0dXJuIHtcbiAgICByZW1vdmUoKSB7XG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgICBldmVudC5yZW1vdmUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5KGV2ZW50KSB7XG4gIHJldHVybiB7XG4gICAgMzc6ICdsZWZ0JyxcbiAgICAzODogJ3VwJyxcbiAgICAzOTogJ3JpZ2h0JyxcbiAgICA0MDogJ2Rvd24nLFxuICAgIDEzOiAnZW50ZXInXG4gIH1bZXZlbnQ/LmtleUNvZGVdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KSB7XG4gIGNvbnN0IGtleSA9IGdldEtleShldmVudClcbiAgcmV0dXJuIHtcbiAgICBob3I6IHsgbGVmdDogLTEsIHJpZ2h0OiAxIH1ba2V5XSB8fCAwLFxuICAgIHZlcjogeyB1cDogLTEsIGRvd246IDEgfVtrZXldIHx8IDAsXG4gICAgZW50ZXI6IGtleSA9PT0gJ2VudGVyJ1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXJnZXQoY29tcG9uZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IGlzU3RyaW5nKGNvbXBvbmVudC50YXJnZXQpXG4gICAgPyBjb21wb25lbnQuJHJlZnNbY29tcG9uZW50LnRhcmdldF1cbiAgICA6IGNvbXBvbmVudC50YXJnZXRcbiAgcmV0dXJuIHRhcmdldD8uJGVsID8/IHRhcmdldFxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtaWY9XCJhbHdheXNTaG93XCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdjbGljaydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQGNsaWNrPVwib25DbGlja1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdmb2N1cycgfHwgdHJpZ2dlciA9PT0gJ2Fsd2F5cydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIFRyYW5zaXRpb24oOm5hbWU9XCJgZGl0by0ke3RyYW5zaXRpb259YFwiKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICApXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWVsc2VcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMsIGNvbWJpbmVFdmVudHMgfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcbmltcG9ydCB7IGdldFRhcmdldCB9IGZyb20gJy4uL3V0aWxzL3RyaWdnZXInXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOnNob3cnXSxcblxuICBwcm9wczoge1xuICAgIHRyaWdnZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnY2xpY2snIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tJyB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjdXN0b21DbGFzczogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB6SW5kZXg6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH0sXG4gICAga2VlcEluVmlldzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgaGlkZVdoZW5DbGlja091dHNpZGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGFsd2F5c1Nob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb3ZlcjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGhpZGVEZWxheTogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgcG9wdXBQbGFjZW1lbnQ6IHRoaXMucGxhY2VtZW50LFxuICAgICAgZm9jdXNFdmVudHM6IG51bGwsXG4gICAgICBjbG9zZUV2ZW50czogbnVsbCxcbiAgICAgIHBvcHVwRXZlbnRzOiBudWxsLFxuICAgICAgYmx1clRpbWVyOiBudWxsLFxuICAgICAgbW91c2VMZWF2ZVRpbWVyOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHJpZ2dlckNsYXNzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tdHJpZ2dlci1kaXNhYmxlZCc6IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcG9wdXBDbGFzcygpIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgIFtgZGl0by1wb3B1cC0ke2h5cGhlbmF0ZSh0aGlzLnBsYWNlbWVudCl9YF06IHRydWVcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmN1c3RvbUNsYXNzKSB7XG4gICAgICAgIGNsYXNzZXNbdGhpcy5jdXN0b21DbGFzc10gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICBwb3B1cFN0eWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuekluZGV4ID8gYHotaW5kZXg6ICR7dGhpcy56SW5kZXh9YCA6ICcnXG4gICAgfSxcblxuICAgIHRyaWdnZXJUYXJnZXQoKSB7XG4gICAgICByZXR1cm4gZ2V0VGFyZ2V0KHRoaXMpXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3cgfHwgdGhpcy5hbHdheXNTaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIHRvKVxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9uU2hvd1BvcHVwKHRvKSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2ZvY3VzJykge1xuICAgICAgdGhpcy5mb2N1c0V2ZW50cyA9IHRoaXMuYWRkRm9jdXNFdmVudHModGhpcy50cmlnZ2VyVGFyZ2V0ID8/IHRyaWdnZXIpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGlkZVdoZW5DbGlja091dHNpZGUgJiYgIXRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgLy8gVXNlICdtb3VzZXVwJyBpbnN0ZWFkIG9mICdjbGljaycsIHNpbmNlIGNsaWNrIGFwcGVhcnMgdG8gaGFwcGVuIGFmdGVyXG4gICAgICAvLyB0aGUgRE9NIGluc2lkZSBvZiBwb3B1cHMgY291bGQgY2hhbmdlIGluIGEgd2F5IHNvIHRoYXQgdGhlIGNoZWNrXG4gICAgICAvLyBgcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KWAgd291bGQgZmFpbDpcbiAgICAgIHRoaXMuY2xvc2VFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICAgIG1vdXNldXA6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCAmJlxuICAgICAgICAgICAgIXBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICF0cmlnZ2VyLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICF0aGlzLnRyaWdnZXJUYXJnZXQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbHdheXNTaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLnNob3dQb3B1cCA9IHRoaXMuc2hvd1xuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLmZvY3VzRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMuY2xvc2VFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5wb3B1cEV2ZW50cz8ucmVtb3ZlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlUG9zaXRpb24oKSB7XG4gICAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgICBpZiAodGhpcy5zaG93ICYmIHBvcHVwLm9mZnNldFdpZHRoID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpLCAwKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy50cmlnZ2VyVGFyZ2V0ID8/IHRyaWdnZXJcbiAgICAgIC8vIEFjdHVhbGx5IHJlc2l6ZSB0aGUgcG9wdXAncyBmaXJzdCBjaGlsZCwgc28gdGhleSBjYW4gc2V0IHNpemUgbGltaXRzLlxuICAgICAgY29uc3QgZWwgPSB0aGlzLnRhcmdldCA9PT0gJ3BvcHVwJyA/IHRyaWdnZXIgOiBwb3B1cC5maXJzdEVsZW1lbnRDaGlsZFxuICAgICAgaWYgKGVsKSB7XG4gICAgICAgIGVsLnN0eWxlLndpZHRoID0gZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLndpZHRoXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvdW5kcyA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgdHJpZ2dlckxlZnQgPSBib3VuZHMubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgICBjb25zdCB0cmlnZ2VyVG9wID0gYm91bmRzLnRvcCArIHdpbmRvdy5zY3JvbGxZXG4gICAgICBjb25zdCB0cmlnZ2VyV2lkdGggPSBib3VuZHMud2lkdGhcbiAgICAgIGNvbnN0IHRyaWdnZXJIZWlnaHQgPSBib3VuZHMuaGVpZ2h0XG4gICAgICBjb25zdCBwb3B1cFdpZHRoID0gcG9wdXAub2Zmc2V0V2lkdGhcbiAgICAgIGNvbnN0IHBvcHVwSGVpZ2h0ID0gcG9wdXAub2Zmc2V0SGVpZ2h0XG5cbiAgICAgIGxldCBbcGFydDEsIHBhcnQyXSA9IHRoaXMucG9wdXBQbGFjZW1lbnQuc3BsaXQoJy0nKSB8fCBbXVxuICAgICAgaWYgKHRoaXMua2VlcEluVmlldykge1xuICAgICAgICBjb25zdCB3aW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICAgIGNvbnN0IHdpbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCAtIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0MiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wICsgdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCArIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBsZWZ0ID0gMFxuICAgICAgbGV0IHRvcCA9IDBcbiAgICAgIHN3aXRjaCAocGFydDEpIHtcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICBsZWZ0IC09IHBvcHVwV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCArPSB0cmlnZ2VyV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAocGFydDIpIHtcbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aCAtIHRyaWdnZXJXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdG9wIC09IHBvcHVwSGVpZ2h0IC0gdHJpZ2dlckhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb3Zlcikge1xuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICB0b3AgLT0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0ICE9PSB0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJCb3VuZHMgPSB0cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIGxlZnQgKz0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyQm91bmRzLmxlZnRcbiAgICAgICAgdG9wICs9IHRyaWdnZXJUb3AgLSB0cmlnZ2VyQm91bmRzLnRvcFxuICAgICAgfVxuICAgICAgcG9wdXAuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgXG4gICAgICBwb3B1cC5zdHlsZS50b3AgPSBgJHt0b3B9cHhgXG4gICAgfSxcblxuICAgIGFkZEZvY3VzRXZlbnRzKHBhcmVudCkge1xuICAgICAgY29uc3QgdGFyZ2V0cyA9IHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCwgdGV4dGFyZWEnKVxuICAgICAgbGV0IGlucHV0XG5cbiAgICAgIHJldHVybiBjb21iaW5lRXZlbnRzKFxuICAgICAgICBhZGRFdmVudHModGFyZ2V0cywge1xuICAgICAgICAgIGZvY3VzOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmJsdXJUaW1lcilcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIHRpbWVvdXQgdG8gYWxsb3cgY2xpY2tlZCBpbnB1dHMgdG8gZ3JhYiBmb2N1c1xuICAgICAgICAgICAgdGhpcy5ibHVyVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLiRyZWZzLnBvcHVwLm1hdGNoZXMoJzpmb2N1cy13aXRoaW4nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMClcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuXG4gICAgICAgIGFkZEV2ZW50cyhwYXJlbnQsIHtcbiAgICAgICAgICBtb3VzZWRvd246IGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJ2lucHV0LCB0ZXh0YXJlYSwgYnV0dG9uJykpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQubWF0Y2hlcygnLmRpdG8tYnV0dG9uLWNsZWFyJykpIHtcbiAgICAgICAgICAgICAgY29uc3QgdHJpZ2dlciA9IHRoaXMudHJpZ2dlclRhcmdldCA/PyB0aGlzLiRyZWZzLnRyaWdnZXJcbiAgICAgICAgICAgICAgLy8gTWFyayB0cmlnZ2VyIGlucHV0IGFzIHJlYWRvbmx5IHNvIGl0IGNhbid0IGxvb3NlIGZvY3VzIHdoaWxlXG4gICAgICAgICAgICAgIC8vIHVzZXIgZG9lcyBvdGhlciBtb3VzZS1hY3Rpdml0aWVzIGluIHBvcHVwLlxuICAgICAgICAgICAgICBpbnB1dCA9IHRyaWdnZXIucXVlcnlTZWxlY3RvcignaW5wdXQsIHRleHRhcmVhJylcbiAgICAgICAgICAgICAgaWYgKGlucHV0ICYmICFpbnB1dC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3JlYWRvbmx5JywgJ3RydWUnKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIG1vdXNldXA6IGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgICAvLyBHaXZlIHNvbWUgdGltZSBmb3Igb3RoZXIgZXZlbnRzIHRvIHVwZGF0ZSBpbnB1dCBiZWZvcmUgaXRcbiAgICAgICAgICAgICAgLy8gYmVjb21lcyBlZGl0YWJsZSBhbmQgc3RpbGwgZm9jdXNlZCBhZ2Fpbi5cbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaW5wdXQucmVtb3ZlQXR0cmlidXRlKCdyZWFkb25seScpXG4gICAgICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQubWF0Y2hlcygnaW5wdXQsIHRleHRhcmVhLCBidXR0b24nKSkge1xuICAgICAgICAgICAgICAgICAgaW5wdXQuZm9jdXMoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbnB1dCA9IG51bGxcbiAgICAgICAgICAgICAgfSwgMClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIG9uU2hvd1BvcHVwKHNob3cpIHtcbiAgICAgIGlmIChzaG93KSB7XG4gICAgICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgICAgICB0aGlzLnBvcHVwRXZlbnRzID0gdGhpcy5hZGRGb2N1c0V2ZW50cyh0aGlzLiRyZWZzLnBvcHVwKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wb3B1cEV2ZW50cz8ucmVtb3ZlKClcbiAgICAgICAgdGhpcy5wb3B1cEV2ZW50cyA9IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DbGljaygpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Ib3ZlcihlbnRlcikge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vdXNlTGVhdmVUaW1lcilcbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGlkZURlbGF5KSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICB9LCB0aGlzLmhpZGVEZWxheSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcbkBpbXBvcnQgJy4uL3N0eWxlcy90cmFuc2l0aW9ucyc7XG5cbi5kaXRvLXRyaWdnZXItY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uZGl0by10cmlnZ2VyLWRpc2FibGVkIHtcbiAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG5cbiAgKiB7XG4gICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXBvcHVwIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR6LWluZGV4LXBvcHVwO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1pbnB1dChcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIEBtb3VzZWRvd24ucHJldmVudD1cIm9uTW91c2VEb3duXCJcbilcbiAgc2xvdChuYW1lPVwicHJlZml4XCIpXG4gIGlucHV0KFxuICAgIDppZD1cImlkXCJcbiAgICByZWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgOnR5cGU9XCJ0eXBlXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIDp0aXRsZT1cInRpdGxlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOnJlYWRvbmx5PVwicmVhZG9ubHlcIlxuICAgIDphdXRvZm9jdXM9XCJhdXRvZm9jdXNcIlxuICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICA6YXV0b2NvbXBsZXRlPVwiYXV0b2NvbXBsZXRlXCJcbiAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgKVxuICBzbG90KG5hbWU9XCJzdWZmaXhcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0eXBlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3RleHQnIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aXRsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYXV0b2ZvY3VzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZm9jdXNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGF1dG9jb21wbGV0ZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdvZmYnIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLiRhdHRycy5jbGFzcyxcbiAgICAgICAge1xuICAgICAgICAgICdkaXRvLWlucHV0LS1mb2N1cyc6IHRoaXMuZm9jdXNlZFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBfLCAuLi5hdHRyaWJ1dGVzIH0gPSB0aGlzLiRhdHRyc1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5pbnB1dFxuICAgIH0sXG5cbiAgICBzaXplKCkge1xuICAgICAgLy8gRGV0ZXJtaW5lIHNpemUgYmFzZWQgb24gbWluICYgbWF4IHNldHRpbmdzLCBpZiB0aGV5J3JlIHByb3ZpZGVkLlxuICAgICAgY29uc3QgeyBzaXplLCBtaW4sIG1heCB9ID0gdGhpcy4kYXR0cnNcbiAgICAgIGNvbnN0IGdldExlbmd0aCA9IHZhbHVlID0+ICh2YWx1ZSAhPSBudWxsID8gYCR7dmFsdWV9YC5sZW5ndGggOiAwKVxuICAgICAgcmV0dXJuIHNpemUgfHwgZ2V0TGVuZ3RoKG1pbikgfHwgZ2V0TGVuZ3RoKG1heCkgfHwgdW5kZWZpbmVkXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGN1cnJlbnRWYWx1ZSkge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKCkge1xuICAgICAgLy8gRm9jdXMgdGhlIGlucHV0IHdoZW4gdGhlIG91dGVyIGNvbnRhaW5lciBpcyBjbGlja2VkLCBlLmcuIHdoZW4gY2xpY2tpbmdcbiAgICAgIC8vIG9uIGFmZml4ZXMuXG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1pbnB1dCB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIGlucHV0IHtcbiAgICAvLyBJbmhlcml0IGFsbCBzdHlsaW5nIGZyb20gLmRpdG8taW5wdXRcbiAgICBhbGw6IGluaGVyaXQ7XG4gICAgZmxleDogMTtcbiAgICBtaW4td2lkdGg6IDA7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5pLmRpdG8taWNvbig6Y2xhc3M9XCJjbGFzc2VzXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIG5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBkaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xhc3NlcygpIHtcbiAgICAgIGNvbnN0IHByZWZpeCA9ICdkaXRvLWljb24nXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYCR7cHJlZml4fS0tJHt0aGlzLm5hbWV9YF06IHRydWUsXG4gICAgICAgIFtgJHtwcmVmaXh9LS1kaXNhYmxlZGBdOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4vLyBgeWFybiBidWlsZDppY29uc2AgY29udmVydHMgdGhlIGljb24gU1ZHIGZpbGVzIHRvIHNpbGVudCBjbGFzc2VzIGluc2lkZVxuLy8gYHNyYy9zdHlsZXMvbWl4aW5zL19pY29ucy5zY3NzYCwgbWFraW5nIHRoZW0gYXZhaWxhYmxlIHRvIGFsbCBvdGhlciBzYXNzXG4vLyBjb2RlIHRocm91Z2ggYF9pbXBvcnRzYC5cbi8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIHRoZW0gYXMgbm9ybWFsIENTUyBjbGFzc2VzLCBjb252ZXJ0IHRoZW0gaGVyZTpcbkBlYWNoICRuYW1lIGluICRpY29ucyB7XG4gIC5kaXRvLWljb24tLSN7JG5hbWV9IHtcbiAgICAmOjphZnRlciB7XG4gICAgICBAZXh0ZW5kICVpY29uLSN7JG5hbWV9O1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLWljb24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxZW07XG4gIGhlaWdodDogMWVtO1xuXG4gIEBhdC1yb290IC5kaXRvLWlucHV0ICYge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBjb2xvcjogJGNvbG9yLWdyZXk7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuXG4gICAgJi5kaXRvLWljb24tLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItbGlnaHQ7XG4gICAgfVxuICB9XG5cbiAgQGF0LXJvb3QgLmRpdG8taW5wdXQ6Zm9jdXMtd2l0aGluICYge1xuICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICB9XG59XG48L3N0eWxlPlxuIiwiZXhwb3J0IGZ1bmN0aW9uIHNldFNlbGVjdGlvbihpbnB1dCwgeyBzdGFydCwgZW5kIH0pIHtcbiAgaWYgKGlucHV0Py5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgIGlucHV0LmZvY3VzKClcbiAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb24oaW5wdXQpIHtcbiAgcmV0dXJuIGlucHV0ICYmICdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXRcbiAgICA/IHsgc3RhcnQ6IGlucHV0LnNlbGVjdGlvblN0YXJ0LCBlbmQ6IGlucHV0LnNlbGVjdGlvbkVuZCB9XG4gICAgOiBudWxsXG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbkRpdG9UcmlnZ2VyLmRpdG8tZGF0ZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB0cmlnZ2VyPVwiZm9jdXNcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIkc2xvdHMudHJpZ2dlclwiXG4gICAgICBuYW1lPVwidHJpZ2dlclwiXG4gICAgKVxuICAgIERpdG9JbnB1dC5kaXRvLWRhdGUtcGlja2VyLWlucHV0KFxuICAgICAgdi1lbHNlXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIGZvY3VzZWQsIC4uLiRhdHRycyB9XCJcbiAgICAgIEBmb2N1cz1cIm9uRm9jdXModHJ1ZSlcIlxuICAgICAgQGJsdXI9XCJvbkZvY3VzKGZhbHNlKVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvbk1vdXNlRG93bihmYWxzZSlcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNwcmVmaXgpXG4gICAgICAgIHNsb3QobmFtZT1cInByZWZpeFwiKVxuICAgICAgdGVtcGxhdGUoI3N1ZmZpeClcbiAgICAgICAgRGl0b0ljb24oXG4gICAgICAgICAgbmFtZT1cImNhbGVuZGFyXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5wcmV2ZW50PVwib25Nb3VzZURvd24odHJ1ZSlcIlxuICAgICAgICApXG4gICAgICAgIHNsb3QobmFtZT1cInN1ZmZpeFwiKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgRGl0b0NhbGVuZGFyLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAoXG4gICAgICByZWY9XCJjYWxlbmRhclwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtYmluZD1cInsgbG9jYWxlLCBkaXNhYmxlZERhdGUgfVwiXG4gICAgICBAc2VsZWN0PVwic2hvd1BvcHVwID0gZmFsc2VcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvVHJpZ2dlciBmcm9tICcuL0RpdG9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBEaXRvQ2FsZW5kYXIgZnJvbSAnLi9EaXRvQ2FsZW5kYXIudnVlJ1xuaW1wb3J0IERpdG9JbnB1dCBmcm9tICcuL0RpdG9JbnB1dC52dWUnXG5pbXBvcnQgRGl0b0ljb24gZnJvbSAnLi9EaXRvSWNvbi52dWUnXG5pbXBvcnQgeyBwYXJzZURhdGUsIGdldERhdGVQYXJ0QXRQb3NpdGlvbiB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5pbXBvcnQgeyBnZXRTZWxlY3Rpb24sIHNldFNlbGVjdGlvbiB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbi5qcydcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcbmltcG9ydCB7IGdldFRhcmdldCB9IGZyb20gJy4uL3V0aWxzL3RyaWdnZXIuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBEaXRvVHJpZ2dlciwgRGl0b0NhbGVuZGFyLCBEaXRvSW5wdXQsIERpdG9JY29uIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3VwZGF0ZTpzaG93JywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICBkYXRlOiBkZWZhdWx0Rm9ybWF0cy5kYXRlLFxuICAgICAgICB0aW1lOiBmYWxzZVxuICAgICAgfSlcbiAgICB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiBnZXRUYXJnZXQodGhpcyk/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgZm9ybWF0T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgIC4uLnRoaXMuZm9ybWF0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykgfHwgJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBkYXRlID0gcGFyc2VEYXRlKHZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh2YWx1ZSkge1xuICAgICAgaWYgKCt2YWx1ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkZvY3VzKGZvY3VzKSB7XG4gICAgICB0aGlzLmlucHV0Rm9jdXNlZCA9IGZvY3VzXG4gICAgICB0aGlzLnNob3dQb3B1cCA9IGZvY3VzXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3QgeyB2ZXI6IHN0ZXAsIGVudGVyIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgaWYgKHN0ZXAgfHwgZW50ZXIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQpPy5zdGFydFxuICAgICAgICBjb25zdCBnZXREYXRlUGFydCA9IHBvc2l0aW9uID0+XG4gICAgICAgICAgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHRoaXMuY3VycmVudFRleHQsIHBvc2l0aW9uLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHN0ZXAgJiYgIXRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgeyBjYWxlbmRhciB9ID0gdGhpcy4kcmVmc1xuICAgICAgICAgIGlmIChjYWxlbmRhcikge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lOiBtb2RlLCBzdGFydCB9ID0gZ2V0RGF0ZVBhcnQocG9zaXRpb24pIHx8IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG1vZGUgJiZcbiAgICAgICAgICAgICAgY2FsZW5kYXIubmF2aWdhdGUoeyBzdGVwLCBlbnRlciwgbW9kZSwgdXBkYXRlOiB0cnVlIH0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQsIGdldERhdGVQYXJ0KHN0YXJ0KSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKHRvZ2dsZSkge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5kaXNhYmxlZCAmJiAoIXRvZ2dsZSB8fCAhdGhpcy5zaG93UG9wdXApXG4gICAgICBpZiAodGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGF0ZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4td2lkdGg6IDhlbTtcbiAgfVxufVxuXG4uZGl0by1kYXRlLXBpY2tlci1wb3B1cCB7XG4gIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbn1cbjwvc3R5bGU+XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbkRpdG9UcmlnZ2VyLmRpdG8tdGltZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB0cmlnZ2VyPVwiZm9jdXNcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIkc2xvdHMudHJpZ2dlclwiXG4gICAgICBuYW1lPVwidHJpZ2dlclwiXG4gICAgKVxuICAgIERpdG9JbnB1dC5kaXRvLXRpbWUtcGlja2VyLWlucHV0KFxuICAgICAgdi1lbHNlXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIGZvY3VzZWQsIC4uLiRhdHRycyB9XCJcbiAgICAgIEBmb2N1cz1cIm9uRm9jdXModHJ1ZSlcIlxuICAgICAgQGJsdXI9XCJvbkZvY3VzKGZhbHNlKVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvbk1vdXNlRG93bihmYWxzZSlcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNwcmVmaXgpXG4gICAgICAgIHNsb3QobmFtZT1cInByZWZpeFwiKVxuICAgICAgdGVtcGxhdGUoI3N1ZmZpeClcbiAgICAgICAgRGl0b0ljb24oXG4gICAgICAgICAgbmFtZT1cImNsb2NrXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5wcmV2ZW50PVwib25Nb3VzZURvd24odHJ1ZSlcIlxuICAgICAgICApXG4gICAgICAgIHNsb3QobmFtZT1cInN1ZmZpeFwiKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgLmRpdG8tdGltZS1waWNrZXItcG9wdXBcbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItaG91cihyZWY9XCJob3VyXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZEhvdXIoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUocmVmPVwibWludXRlXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZE1pbnV0ZShpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogbWludXRlID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cIm1pbnV0ZSA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1zZWNvbmQocmVmPVwic2Vjb25kXCIpXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZFNlY29uZChpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogc2Vjb25kID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9UcmlnZ2VyIGZyb20gJy4vRGl0b1RyaWdnZXIudnVlJ1xuaW1wb3J0IERpdG9JbnB1dCBmcm9tICcuL0RpdG9JbnB1dC52dWUnXG5pbXBvcnQgRGl0b0ljb24gZnJvbSAnLi9EaXRvSWNvbi52dWUnXG5pbXBvcnQgeyBhbHRlckRhdGUsIHBhcnNlRGF0ZSwgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IGdldFNlbGVjdGlvbiwgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuaW1wb3J0IHsgZ2V0VGFyZ2V0IH0gZnJvbSAnLi4vdXRpbHMvdHJpZ2dlci5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IERpdG9UcmlnZ2VyLCBEaXRvSW5wdXQsIERpdG9JY29uIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3VwZGF0ZTpzaG93JywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICB0aW1lOiBkZWZhdWx0Rm9ybWF0cy50aW1lLFxuICAgICAgICBkYXRlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9LFxuICAgIGRpc2FibGVkSG91cjogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZE1pbnV0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZFNlY29uZDogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgaWdub3JlTmV4dENoYW5nZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIGdldFRhcmdldCh0aGlzKT8ucXVlcnlTZWxlY3RvcignaW5wdXQnKVxuICAgIH0sXG5cbiAgICBmb3JtYXRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgLi4udGhpcy5mb3JtYXRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKSB8fCAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZURhdGUodmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucylcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50RGF0ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlIHx8XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBEYXRlKCkgb2JqZWN0IHdpdGggdGhlIHRpbWUgc2V0IHRvIDAsIHRvIGJlIHVzZWQgd2hlblxuICAgICAgICAvLyBmaXJzdCBzZXR0aW5nIGFueSBvZiB0aGUgdGltZXMsIGZvciBtZWFuaW5nZnVsIGRhdGVzIGluIGNhc2UgdGhlXG4gICAgICAgIC8vIG9iamVjdCBpcyBzaGFyZWQgd2l0aCBhIERhdGVQaWNrZXIsIGUuZy4gdGhyb3VnaCBEYXRlVGltZVBpY2tlci5cbiAgICAgICAgYWx0ZXJEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIGhvdXI6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0SG91cnMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KGhvdXIpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgaG91ciB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtaW51dGU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0TWludXRlcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQobWludXRlKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IG1pbnV0ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWNvbmQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0U2Vjb25kcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoc2Vjb25kKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IHNlY29uZCB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgICAgdGhpcy5zY3JvbGxBbGwodHJ1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAoK3ZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCh0cnVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgaW5wdXQgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbihpbnB1dClcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5mb2N1c2VkICYmXG4gICAgICAgICF0aGlzLmlnbm9yZU5leHRDaGFuZ2UgJiZcbiAgICAgICAgc2VsZWN0aW9uLnN0YXJ0ID09PSBzZWxlY3Rpb24uZW5kXG4gICAgICApIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKGlucHV0LCBzZWxlY3Rpb24pKVxuICAgICAgfVxuICAgICAgdGhpcy5pZ25vcmVOZXh0Q2hhbmdlID0gZmFsc2VcbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8pIHtcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoZmFsc2UpXG4gICAgICB9XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsZWZ0UGFkKHZhbHVlKSB7XG4gICAgICByZXR1cm4gKCcwJyArIHZhbHVlKS5zbGljZSgtMilcbiAgICB9LFxuXG4gICAgc2V0VGltZShvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gYWx0ZXJEYXRlKHRoaXMuY3VycmVudERhdGUsIHtcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICBtaWxsaXNlY29uZDogMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2Nyb2xsQWxsKHNtb290aCkge1xuICAgICAgY29uc3Qgc2Nyb2xsID0gKHJlZiwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4kcmVmc1tyZWZdXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gKFxuICAgICAgICAgICAgdGFyZ2V0LnNjcm9sbEhlaWdodCAvXG4gICAgICAgICAgICAvLyBGaXJzdCBhbmQgbGFzdCBvbmUgYWRkIDMgdGltZXMgdGhlIG1hcmdpbi5cbiAgICAgICAgICAgICh0YXJnZXQuY2hpbGRFbGVtZW50Q291bnQgKyA2KVxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCB0b3AgPSBNYXRoLnJvdW5kKHZhbHVlICogbGluZUhlaWdodClcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKHRhcmdldC5zY3JvbGxUb3AgLSB0b3ApXG4gICAgICAgICAgdGFyZ2V0LnNjcm9sbFRvKHtcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGJlaGF2aW9yOiBzbW9vdGggJiYgZGlzdGFuY2UgPCAxMDAgPyAnc21vb3RoJyA6ICdhdXRvJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsKCdob3VyJywgdGhpcy5ob3VyKVxuICAgICAgICBzY3JvbGwoJ21pbnV0ZScsIHRoaXMubWludXRlKVxuICAgICAgICBzY3JvbGwoJ3NlY29uZCcsIHRoaXMuc2Vjb25kKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25Gb2N1cyhmb2N1cykge1xuICAgICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmb2N1c1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBmb2N1c1xuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHsgaW5wdXQgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbihpbnB1dClcbiAgICAgIGNvbnN0IHsgdmVyOiBzdGVwLCBlbnRlciB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgIGlmIChzdGVwIHx8IGVudGVyKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgICBjb25zdCBnZXREYXRlUGFydCA9IHBvc2l0aW9uID0+XG4gICAgICAgICAgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHRoaXMuY3VycmVudFRleHQsIHBvc2l0aW9uLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICBpZiAoIXRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lLCBzdGFydCB9ID0gZ2V0RGF0ZVBhcnQoc2VsZWN0aW9uLnN0YXJ0KSB8fCB7fVxuICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW25hbWVdICsgc3RlcFxuICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMuJHJlZnNbbmFtZV0uY2hpbGRFbGVtZW50Q291bnRcbiAgICAgICAgICAgICAgdGhpc1tuYW1lXSA9XG4gICAgICAgICAgICAgICAgdmFsdWUgPCAwXG4gICAgICAgICAgICAgICAgICA/IHZhbHVlICsgY291bnRcbiAgICAgICAgICAgICAgICAgIDogdmFsdWUgPj0gY291bnRcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZSAtIGNvdW50XG4gICAgICAgICAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgICAgICAgdGhpcy5pZ25vcmVOZXh0Q2hhbmdlID0gdHJ1ZVxuICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24oaW5wdXQsIGdldERhdGVQYXJ0KHN0YXJ0KSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5zdGFydCA9PT0gc2VsZWN0aW9uLmVuZCkge1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSBpbnB1dFxuICAgICAgICBsZXQgcG9zID0gc2VsZWN0aW9uLnN0YXJ0XG5cbiAgICAgICAgY29uc3QgaXNEaWdpdCA9IGNoYXIgPT4gIWlzTmFOKE51bWJlcihjaGFyKSlcblxuICAgICAgICBpZiAoZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGlmIChpc0RpZ2l0KGV2ZW50LmtleSkgJiYgcG9zIDwgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHZhbHVlW3Bvc10gPT09ICc6JyAmJlxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyAtIDFdKSAmJlxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyAtIDJdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHBvcysrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgbmV4dCBkaWdpdCBzbyB0aGUgZXZlbnQgb3ZlcnJpZGVzIGl0IGluc3RlYWQgb2YgaW5zZXJ0aW5nXG4gICAgICAgICAgICAvLyBuZXcgY2hhcnMuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zXSkgJiYgKFxuICAgICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zICsgMV0pIHx8XG4gICAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgLSAxXSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gKFxuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKDAsIHBvcykgK1xuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKHBvcyArIDEpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0OiBwb3MsIGVuZDogcG9zIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKS5sZW5ndGhcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IGxlbmd0aCkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IGxlbmd0aCkge1xuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGxlbmd0aClcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCBzZWxlY3Rpb24pXG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBvcyA9PT0gMSB8fFxuICAgICAgICAgICAgWycgJywgJzonXS5pbmNsdWRlcyh2YWx1ZVtwb3MgLSAyXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcG9zID09PSB2YWx1ZS5sZW5ndGggfHxcbiAgICAgICAgICAgICAgdmFsdWVbcG9zXSA9PT0gJzonXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcG9zLS1cbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSAoXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgcG9zKSArXG4gICAgICAgICAgICAgICAgKCh2YWx1ZVtwb3MgLSAxXSA/PyAnJykgKyAnMDAnKSArXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UocG9zICsgMSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQ6IHBvcywgZW5kOiBwb3MgfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zXSkgJiZcbiAgICAgICAgICAgICAgIWlzRGlnaXQoK3ZhbHVlW3BvcyArIDFdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIFdoZW4gcmVtb3ZpbmcgdGhlIGZpcnN0IG9mIHR3byBkaWdpdHMsIHJlcGxhY2Ugd2l0aCAwXG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgcG9zKSArICcwJyArIHZhbHVlLnNsaWNlKHBvcylcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0OiBwb3MsIGVuZDogcG9zIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKHRvZ2dsZSkge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5kaXNhYmxlZCAmJiAoIXRvZ2dsZSB8fCAhdGhpcy5zaG93UG9wdXApXG4gICAgICBpZiAodGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGltZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLXdpZHRoOiA2ZW07XG4gIH1cbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAge1xuICBtYXgtd2lkdGg6IDE2MHB4O1xuICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG59XG5cbiR0aW1lLXBpY2tlci1saW5lLWhlaWdodDogMjRweDtcblxuLmRpdG8tdGltZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXdpZHRoOiAwIDFweCAwO1xuICBtYXJnaW4tbGVmdDogLTFweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IGNhbGMoMTAwJSAvIDMgKyAxcHgpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICY6bGFzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICB9XG5cbiAgdWwge1xuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAwO1xuICAgIC8vIEhpZGUgc2Nyb2xsYmFyOlxuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgIHBhZGRpbmc6IDAgMTdweCAwIDA7XG4gICAgaGVpZ2h0OiA3ICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuXG4gICAgJiA+IGxpIHtcbiAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xuICAgICAgfVxuXG4gICAgICAmLnNlbGVjdGVkLFxuICAgICAgJi5zZWxlY3RlZDpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cblxuICAgICAgJi5kaXNhYmxlZCB7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgICAgIH1cblxuICAgICAgJi5kaXNhYmxlZDpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlLXRpbWUtcGlja2VyKHJlZj1cInBpY2tlclwiKVxuICAuZGl0by1kYXRlLXRpbWUtcGlja2VyX19pbm5lcihcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWRhdGUtdGltZS1waWNrZXJfX2lubmVyLS1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gIClcbiAgICBEaXRvSW5wdXQuZGl0by1kYXRlLXRpbWUtcGlja2VyX19pbnB1dChcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCwgZm9jdXNlZCwgLi4uJGF0dHJzIH1cIlxuICAgICAgQGZvY3VzPVwib25Gb2N1cyh0cnVlKVwiXG4gICAgICBAYmx1cj1cIm9uRm9jdXMoZmFsc2UpXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uTW91c2VEb3duKGZhbHNlKVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI3ByZWZpeClcbiAgICAgICAgc2xvdChuYW1lPVwicHJlZml4XCIpXG4gICAgICB0ZW1wbGF0ZSgjc3VmZml4KVxuICAgICAgICBEaXRvSWNvbihcbiAgICAgICAgICBuYW1lPVwiY2FsZW5kYXJcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCJvbk1vdXNlRG93bih0cnVlKVwiXG4gICAgICAgIClcbiAgICAgICAgc2xvdChuYW1lPVwic3VmZml4XCIpXG4gICAgRGl0b0RhdGVQaWNrZXIoXG4gICAgICByZWY9XCJkYXRlXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd0RhdGVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICAgICAgLy8tIEludGVudGlvbmFsbHkgZW1wdHlcbiAgICBEaXRvVGltZVBpY2tlcihcbiAgICAgIHJlZj1cInRpbWVcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LW1vZGVsOnNob3c9XCJzaG93VGltZVwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICAgICAgLy8tIEludGVudGlvbmFsbHkgZW1wdHlcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzLCBhc3NpZ25EZWVwbHkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9JbnB1dCBmcm9tICcuL0RpdG9JbnB1dC52dWUnXG5pbXBvcnQgRGl0b0RhdGVQaWNrZXIgZnJvbSAnLi9EaXRvRGF0ZVBpY2tlci52dWUnXG5pbXBvcnQgRGl0b1RpbWVQaWNrZXIgZnJvbSAnLi9EaXRvVGltZVBpY2tlci52dWUnXG5pbXBvcnQgRGl0b0ljb24gZnJvbSAnLi9EaXRvSWNvbi52dWUnXG5pbXBvcnQgeyBwYXJzZURhdGUgfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uLCBzZXRTZWxlY3Rpb24gfSBmcm9tICcuLi91dGlscy9zZWxlY3Rpb24uanMnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBEaXRvSW5wdXQsIERpdG9EYXRlUGlja2VyLCBEaXRvVGltZVBpY2tlciwgRGl0b0ljb24gfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZm9ybWF0OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93RGF0ZTogZmFsc2UsXG4gICAgICBzaG93VGltZTogZmFsc2UsXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgZGF0ZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgdGltZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgY2xvc2VkTW9kZTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IHRyYW5zaXRpb24sIGRpc2FibGVkLCBsb2NhbGUsIGZvcm1hdE9wdGlvbnM6IGZvcm1hdCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHsgdHJhbnNpdGlvbiwgZGlzYWJsZWQsIGxvY2FsZSwgZm9ybWF0IH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dEYXRlIHx8IHRoaXMuc2hvd1RpbWVcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5pbnB1dC5pbnB1dFxuICAgIH0sXG5cbiAgICBmb3JtYXRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIGFzc2lnbkRlZXBseShcbiAgICAgICAge1xuICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgdGltZTogZGVmYXVsdEZvcm1hdHMudGltZSxcbiAgICAgICAgICBkYXRlOiBkZWZhdWx0Rm9ybWF0cy5kYXRlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgICAgIGZvcm1hdDogKHZhbHVlLCB0eXBlLCBvcHRpb25zKSA9PlxuICAgICAgICAgICAgICB0eXBlID09PSAnbGl0ZXJhbCcgJiYgL1xcYmF0XFxiLy50ZXN0KHZhbHVlKVxuICAgICAgICAgICAgICAgID8gJywgJ1xuICAgICAgICAgICAgICAgIDogdGhpcy5mb3JtYXQ/LmRhdGU/LmZvcm1hdD8uKHZhbHVlLCB0eXBlLCBvcHRpb25zKSA/PyB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5mb3JtYXRcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdGltZUluZGV4KCkge1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMuY3VycmVudFRleHRcbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSB0ZXh0Lm1hdGNoKC8oW1xcU10rXFxzKikkLyk/LlsxXVxuICAgICAgICBpZiAodGltZSkge1xuICAgICAgICAgIHJldHVybiB0ZXh0Lmxlbmd0aCAtIHRpbWUubGVuZ3RoXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykgfHwgJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBkYXRlID0gcGFyc2VEYXRlKHZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQpXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQsIHNlbGVjdGlvbikpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh2YWx1ZSkge1xuICAgICAgaWYgKCt2YWx1ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRm9jdXMoZm9jdXMpIHtcbiAgICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gZm9jdXNcbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLnVwZGF0ZVBvcHVwcygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dEYXRlID0gZmFsc2VcbiAgICAgICAgdGhpcy5zaG93VGltZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKHRvZ2dsZSkge1xuICAgICAgaWYgKHRvZ2dsZSAmJiAodGhpcy5zaG93RGF0ZSB8fCB0aGlzLnNob3dUaW1lKSkge1xuICAgICAgICB0aGlzLnNob3dEYXRlID0gZmFsc2VcbiAgICAgICAgdGhpcy5zaG93VGltZSA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy51cGRhdGVQb3B1cHMoKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCBtb2RlID0gdGhpcy5nZXRNb2RlKGV2ZW50KVxuICAgICAgdGhpcy4kcmVmc1ttb2RlXS5vbktleURvd24oZXZlbnQpXG4gICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICB0aGlzLmNsb3NlZE1vZGUgPSBtb2RlXG4gICAgICB9IGVsc2UgaWYgKG1vZGUgIT09IHRoaXMuY2xvc2VkTW9kZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVBvcHVwcyhtb2RlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRNb2RlKGV2ZW50ID0gbnVsbCkge1xuICAgICAgY29uc3QgeyBzdGFydCB9ID0gZ2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQpXG4gICAgICBjb25zdCB7IGhvcjogc3RlcCB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgIHJldHVybiB0aGlzLnRpbWVJbmRleCA9PT0gbnVsbCB8fCBzdGFydCArIHN0ZXAgPCB0aGlzLnRpbWVJbmRleFxuICAgICAgICA/ICdkYXRlJ1xuICAgICAgICA6ICd0aW1lJ1xuICAgIH0sXG5cbiAgICB1cGRhdGVQb3B1cHMobW9kZSA9IHRoaXMuZ2V0TW9kZSgpKSB7XG4gICAgICBpZiAobW9kZSkge1xuICAgICAgICB0aGlzLmNsb3NlZE1vZGUgPSBudWxsXG4gICAgICB9XG4gICAgICB0aGlzLnNob3dEYXRlID0gbW9kZSA9PT0gJ2RhdGUnXG4gICAgICB0aGlzLnNob3dUaW1lID0gbW9kZSA9PT0gJ3RpbWUnXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGF0ZS10aW1lLXBpY2tlciB7XG4gICZfX2lubmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG5cbiAgJl9faW5wdXQge1xuICAgIGZsZXg6IDE7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBtaW4td2lkdGg6IDEyZW07XG4gIH1cblxuICAuZGl0by1kYXRlLXBpY2tlcixcbiAgLmRpdG8tdGltZS1waWNrZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlL25vLXRlbXBsYXRlLXNoYWRvdyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYWdpbmF0aW9uXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwoXG4gICAgdi1pZj1cInNob3dUb3RhbFwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJ0b3RhbCA+IDBcIlxuICAgICkge3sgZmlyc3QgfX0g4oCTIHt7IGxhc3QgfX0gLyB7eyB0b3RhbCB9fVxuICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy0tcm91bmQoXG4gICAgdi1pZj1cIm51bVBhZ2VzID4gMVwiXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWZvcj1cImJ1dHRvbiBpbiBidXR0b25zXCJcbiAgICAgIDpjbGFzcz1cImdldEJ1dHRvbkNsYXNzZXMoYnV0dG9uKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJidXR0b24uZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25DbGlja0J1dHRvbihidXR0b24pXCJcbiAgICApXG4gICAgICBzcGFuKFxuICAgICAgICB2LWlmPVwiYnV0dG9uLnRleHRcIlxuICAgICAgKSB7eyBidXR0b24udGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOnBhZ2UnXSxcblxuICBwcm9wczoge1xuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIHBhZ2U6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH0sXG4gICAgcGFnZVNpemU6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxMCB9LFxuICAgIHNob3dUb3RhbDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UHJldjogdHJ1ZSxcbiAgICAgIHNob3dOZXh0OiB0cnVlLFxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZpcnN0KCkge1xuICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplICsgMVxuICAgIH0sXG5cbiAgICBsYXN0KCkge1xuICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuZmlyc3QgKyB0aGlzLnBhZ2VTaXplIC0gMSwgdGhpcy50b3RhbClcbiAgICB9LFxuXG4gICAgbnVtUGFnZXMoKSB7XG4gICAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMudG90YWwgLyB0aGlzLnBhZ2VTaXplKVxuICAgIH0sXG5cbiAgICBidXR0b25zKCkge1xuICAgICAgY29uc3QgeyBzaG93UHJldiwgc2hvd05leHQsIGN1cnJlbnRQYWdlLCBudW1QYWdlcyB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2hvd0xlbmd0aCA9IHNob3dQcmV2ICsgc2hvd05leHQgKyAxXG5cbiAgICAgIGxldCBzdGFydCA9IDFcbiAgICAgIGxldCBlbmQgPSAxXG4gICAgICBpZiAobnVtUGFnZXMgPD0gc2hvd0xlbmd0aCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UGFnZSA8PSBzaG93UHJldiArIDEpIHtcbiAgICAgICAgZW5kID0gc2hvd0xlbmd0aFxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UGFnZSA+PSBudW1QYWdlcyAtIHNob3dOZXh0KSB7XG4gICAgICAgIGVuZCA9IG51bVBhZ2VzXG4gICAgICAgIHN0YXJ0ID0gbnVtUGFnZXMgLSBzaG93TGVuZ3RoICsgMVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnQgPSBjdXJyZW50UGFnZSAtIHNob3dQcmV2XG4gICAgICAgIGVuZCA9IGN1cnJlbnRQYWdlICsgc2hvd05leHRcbiAgICAgIH1cblxuICAgICAgY29uc3QgYnV0dG9ucyA9IFtdXG4gICAgICBidXR0b25zLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgLSAxLFxuICAgICAgICB0eXBlOiAncHJldicsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA8PSAxXG4gICAgICB9KVxuICAgICAgaWYgKHN0YXJ0ID49IDIpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHsgaW5kZXg6IDEsIHRleHQ6IDEgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCA+IDIpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5tYXgoMSwgY3VycmVudFBhZ2UgLSAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLXByZXYnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGFjdGl2ZTogaSA9PT0gY3VycmVudFBhZ2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5taW4obnVtUGFnZXMsIGN1cnJlbnRQYWdlICsgMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1uZXh0J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8PSBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHsgaW5kZXg6IG51bVBhZ2VzLCB0ZXh0OiBudW1QYWdlcyB9KVxuICAgICAgfVxuICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlICsgMSxcbiAgICAgICAgdHlwZTogJ25leHQnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPj0gbnVtUGFnZXNcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBidXR0b25zXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgcGFnZShwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZVxuICAgIH0sXG5cbiAgICBwYWdlU2l6ZSgpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID4gdGhpcy5udW1QYWdlcykge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5udW1QYWdlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpwYWdlJywgdG8pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRCdXR0b25DbGFzc2VzKGJ1dHRvbikge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tYnV0dG9uJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Ake3ByZWZpeH0tLSR7YnV0dG9uLnR5cGV9YF06IGJ1dHRvbi50eXBlLFxuICAgICAgICBbYCR7cHJlZml4fS0tYWN0aXZlYF06IGJ1dHRvbi5hY3RpdmVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DbGlja0J1dHRvbihidXR0b24pIHtcbiAgICAgIGlmIChcbiAgICAgICAgYnV0dG9uLmluZGV4ICYmXG4gICAgICAgICFidXR0b24uZGlzYWJsZWQgJiZcbiAgICAgICAgYnV0dG9uLmluZGV4ICE9PSB0aGlzLmN1cnJlbnRQYWdlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IGJ1dHRvbi5pbmRleFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFnaW5hdGlvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbCB7XG4gICAgQGluY2x1ZGUgZWxsaXBzaXM7XG5cbiAgICBtYXJnaW46IDAgMC41ZW07XG4gICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gIH1cblxuICAuZGl0by1idXR0b24ge1xuICAgIHRyYW5zaXRpb246XG4gICAgICBhbGwgMC4zcyBlYXNlLFxuICAgICAgY29sb3IgMHMsXG4gICAgICBiYWNrZ3JvdW5kIDBzLFxuICAgICAgYm9yZGVyIDBzO1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgcGFkZGluZzogMCAwLjVlbTtcblxuICAgICYtLXByZXYsXG4gICAgJi0tbmV4dCB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWFycm93O1xuICAgICAgfVxuICAgIH1cblxuICAgICYtLXByZXY6OmJlZm9yZSB7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgfVxuXG4gICAgJi0tZWxsaXBzaXMtcHJldixcbiAgICAmLS1lbGxpcHNpcy1uZXh0IHtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWVsbGlwc2lzO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWNoZXZyb25zO1xuICAgICAgfVxuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLS1lbGxpcHNpcy1wcmV2OjpiZWZvcmUge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zd2l0Y2goXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKVxuICAuZGl0by1zd2l0Y2hfX3BhbmVcbiAgICBpbnB1dChcbiAgICAgIDppZD1cImlkXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1tb2RlbD1cImNoZWNrZWRcIlxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgIDpuYW1lPVwibmFtZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICAgIC5kaXRvLXN3aXRjaF9fYnV0dG9uXG4gICAgc3Bhbi5kaXRvLXN3aXRjaF9fbGFiZWwoXG4gICAgICB2LWlmPVwibGFiZWxzXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwiY2hlY2tlZFwiXG4gICAgICAgIG5hbWU9XCJjaGVja2VkXCJcbiAgICAgICkge3sgbGFiZWxzLmNoZWNrZWQgfHwgJ29uJyB9fVxuICAgICAgc2xvdChcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIG5hbWU9XCJ1bmNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMudW5jaGVja2VkIHx8ICdvZmYnIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICdjaGFuZ2UnXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWxzOiB7IHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hlY2tlZDogdGhpcy5tb2RlbFZhbHVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xhc3NlcygpIHtcbiAgICAgIGNvbnN0IHByZWZpeCA9ICdkaXRvLXN3aXRjaCdcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHRoaXMuJGF0dHJzLmNsYXNzLFxuICAgICAgICB7XG4gICAgICAgICAgW2Ake3ByZWZpeH0tLWNoZWNrZWRgXTogdGhpcy5jaGVja2VkLFxuICAgICAgICAgIFtgJHtwcmVmaXh9LS1kaXNhYmxlZGBdOiB0aGlzLmRpc2FibGVkXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBsYWJlbHM6IHsgY2hlY2tlZCwgdW5jaGVja2VkIH0gPSB7fSB9ID0gdGhpc1xuICAgICAgLy8gQ2FsY3VsYXRlIGAtLXN3aXRjaC13aWR0aGAgaW4gYHJlbWAsIGJhc2VkIG9uIGxhYmVsIGxlbmd0aC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIGNoZWNrZWQ/Lmxlbmd0aCwgdW5jaGVja2VkPy5sZW5ndGgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zd2l0Y2gtd2lkdGgnOiBsZW5ndGggPyBgJHtsZW5ndGggKiAxLjV9cmVtYCA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IF8sIC4uLmF0dHJpYnV0ZXMgfSA9IHRoaXMuJGF0dHJzXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUobW9kZWxWYWx1ZSkge1xuICAgICAgdGhpcy5jaGVja2VkID0gbW9kZWxWYWx1ZVxuICAgIH0sXG5cbiAgICBjaGVja2VkKGNoZWNrZWQpIHtcbiAgICAgIGlmIChjaGVja2VkICE9PSB0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBjaGVja2VkKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBjaGVja2VkKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXN3aXRjaCB7XG4gICRzZWxmOiAmO1xuXG4gIC8vIFVzZSB3aG9sZSBtdWx0aXBsZXMgb2YgYHJlbWAgZm9yIHNpemVzIGFuZCBgcHhgIG1hcmdpbnMvcGFkZGluZyBhbG9uZ1xuICAvLyB3aXRoIGBjYWxjKClgIHRvIGVuZCB1cCB3aXRoIGV2ZW4gcGl4ZWwgc2l6ZXMuXG4gIC0tc3dpdGNoLXdpZHRoOiA0ZW07XG4gIC0tc3dpdGNoLWhlaWdodDogMmVtO1xuICAtLXN3aXRjaC1tYXJnaW46IDJweDtcbiAgLS1zd2l0Y2gtcGFkZGluZzogM3B4O1xuICAtLXN3aXRjaC1zcGVlZDogMzAwbXM7XG4gIC0tbGFiZWwtbWFyZ2luOiAwLjVlbTtcbiAgLS13aWR0aDogY2FsYyh2YXIoLS1zd2l0Y2gtd2lkdGgpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKTtcbiAgLS1oZWlnaHQ6IGNhbGModmFyKC0tc3dpdGNoLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpO1xuICAtLW9mZnNldDogY2FsYyh2YXIoLS13aWR0aCkgLSB2YXIoLS1oZWlnaHQpKTtcblxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KTtcbiAgLy8gVG8gbWFrZSBpbmxpbmUgbGFiZWxzIGFwcGVhciBvbiBjb25zaXN0ZW50IGJhc2VsaW5lOlxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAmX19wYW5lIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgd2lkdGg6IHZhcigtLXdpZHRoKTtcbiAgICBoZWlnaHQ6IHZhcigtLWhlaWdodCk7XG4gIH1cblxuICAmX19wYW5lLFxuICAmX19sYWJlbCB7XG4gICAgdG9wOiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0O1xuICAgIHRyYW5zaXRpb246XG4gICAgICBib3JkZXItY29sb3IgMC4zcyxcbiAgICAgIGJhY2tncm91bmQtY29sb3IgMC4zcztcbiAgfVxuXG4gICZfX2J1dHRvbiB7XG4gICAgLS1zaXplOiBjYWxjKHZhcigtLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLXBhZGRpbmcpKTtcblxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IHZhcigtLXN3aXRjaC1wYWRkaW5nKTtcbiAgICBsZWZ0OiB2YXIoLS1zd2l0Y2gtcGFkZGluZyk7XG4gICAgd2lkdGg6IHZhcigtLXNpemUpO1xuICAgIGhlaWdodDogdmFyKC0tc2l6ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogY2FsYyh2YXIoLS1zaXplKSAvIDIpO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1zd2l0Y2gtc3BlZWQpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgfVxuXG4gICZfX2J1dHRvbixcbiAgJl9fbGFiZWwge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgJl9fbGFiZWwge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogdmFyKC0tbGFiZWwtbWFyZ2luKTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gIH1cblxuICAmLS1jaGVja2VkIHtcbiAgICBpbnB1dCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgICN7JHNlbGZ9X19idXR0b24ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHZhcigtLW9mZnNldCkpO1xuICAgIH1cblxuICAgICN7JHNlbGZ9X19sYWJlbCB7XG4gICAgICBsZWZ0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgICAgcmlnaHQ6IHVuc2V0O1xuICAgIH1cbiAgfVxuXG4gICYtLWRpc2FibGVkIHtcbiAgICBAZXh0ZW5kICVidXR0b24tZGlzYWJsZWQ7XG4gIH1cblxuICAmOmZvY3VzLXdpdGhpbjpub3QoOmhvdmVyKSB7XG4gICAgI3skc2VsZn1fX2J1dHRvbiB7XG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgeyBoIGFzIGNyZWF0ZUVsZW1lbnQsIFRyYW5zaXRpb24gfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5mdW5jdGlvbiBUcmFuc2l0aW9uSGVpZ2h0KHsgZW5hYmxlZCB9LCB7IHNsb3RzIH0pIHtcbiAgcmV0dXJuIGVuYWJsZWRcbiAgICA/IGNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgcHJvcHMsIHNsb3RzKVxuICAgIDogc2xvdHMuZGVmYXVsdCgpXG59XG5cblRyYW5zaXRpb25IZWlnaHQucHJvcHMgPSB7XG4gIGVuYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25IZWlnaHRcblxuY29uc3Qgc2V0U3R5bGUgPSAoZWxlbWVudCwgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpXG5cbmNvbnN0IG5leHRUaW1lb3V0ID0gY2FsbGJhY2sgPT4gc2V0VGltZW91dChjYWxsYmFjaywgMClcblxuLy8gRm9yY2UgcmVwYWludCB0byBtYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyB0cmlnZ2VyZWQgY29ycmVjdGx5LlxuY29uc3QgZm9yY2VSZXBhaW50ID0gZWxlbWVudCA9PiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmhlaWdodFxuXG5jb25zdCBwcm9wcyA9IHtcbiAgbmFtZTogJ2RpdG8taGVpZ2h0JyxcblxuICBvbkFmdGVyRW50ZXIoZWxlbWVudCkge1xuICAgIC8vIEEgdGltZW91dCBiZWZvcmUgc2V0dGluZyBzdHlsZSBpcyBvbmx5IHJlYWxseSBuZWVkZWQgYWZ0ZXIgY2FsbHMgdG9cbiAgICAvLyBgZm9yY2VSZXBhaW50KClgLCBidXQgdXNpbmcgb25lIGhlcmUgdG9vIHByZXNlcnZlcyBleGVjdXRpb24gc2VxdWVuY2Ugc29cbiAgICAvLyB0aGF0IHRoZSBjYWxsIGZyb20gYGVudGVyKClgIGNhbiBuZXZlciBvdXRydW4gdGhlIG9uZSBmcm9tIGBhZnRlckVudGVyKClgXG4gICAgbmV4dFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQ6IG51bGwgfSkpXG4gIH0sXG5cbiAgb25FbnRlcihlbGVtZW50KSB7XG4gICAgLy8gRm9yIHNvbWUgcmVhc29uIHdlJ3JlIGdldHRpbmcgdHdvIGBvbkVudGVyKClgIGNhbGxzIHBlciB0cmFuc2l0aW9uLFxuICAgIC8vIHNvIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBzZWNvbmQgb25lLiBUaGlzIG1pZ2h0IGJlIGxpbmtlZCB0byB0aGUgdXNlXG4gICAgLy8gb2YgYG5leHRUaW1lb3V0KClgLCB3aGljaCBpcyByZXF1aXJlZCB0byBnZXQgdGhlIGNvcnJlY3QgdmFsdWUgZm9yXG4gICAgLy8gYGhlaWdodGAsIGJhc2VkIG9uIGAmLS1sYWJlbC12ZXJ0aWNhbGAgY2FsY3VsYXRpb25zLlxuICAgIGNvbnN0IHsgd2lkdGggfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICBzZXRTdHlsZShlbGVtZW50LCB7XG4gICAgICB3aWR0aCxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgICBoZWlnaHQ6ICdhdXRvJ1xuICAgIH0pXG4gICAgbmV4dFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgeyBoZWlnaHQgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgIHBvc2l0aW9uOiBudWxsLFxuICAgICAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgICAgICBoZWlnaHQ6IDBcbiAgICAgIH0pXG4gICAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pKVxuICAgIH0pXG4gIH0sXG5cbiAgb25MZWF2ZShlbGVtZW50KSB7XG4gICAgY29uc3QgeyBoZWlnaHQgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodCB9KVxuICAgIGZvcmNlUmVwYWludChlbGVtZW50KVxuICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAwIH0pKVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kZHVyYXRpb246IDAuMTVzO1xuXG4uZGl0by1oZWlnaHQtZW50ZXItYWN0aXZlLFxuLmRpdG8taGVpZ2h0LWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IGhlaWdodCAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uZGl0by1oZWlnaHQtZW50ZXItYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBkaXRvLXNsaWRlLWVudGVyICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG59XG5cbi5kaXRvLWhlaWdodC1sZWF2ZS1hY3RpdmUge1xuICBhbmltYXRpb246IGRpdG8tc2xpZGUtbGVhdmUgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbn1cblxuLmRpdG8taGVpZ2h0LWVudGVyLWZyb20sXG4uZGl0by1oZWlnaHQtbGVhdmUtdG8ge1xuICBoZWlnaHQ6IDA7XG59XG48L3N0eWxlPlxuIl0sIm5hbWVzIjpbImhhc1ZOb2RlQ29udGVudCIsInZub2RlIiwiYXNBcnJheSIsIkNvbW1lbnQiLCJoYXNTbG90Q29udGVudCIsInNsb3QiLCJwcm9wcyIsImlzU3RyaW5nIiwidXNlU2xvdHMiLCJyYXciLCJ2YWx1ZSIsIm1hcmtSYXciLCJfc2ZjX21haW4iLCJfIiwiYXR0cmlidXRlcyIsImRlc2NyaWJlRGF0ZSIsImRhdGUiLCJhbHRlckRhdGUiLCJvdmVycmlkZXMiLCJwYXJzZURhdGUiLCJzdHJpbmciLCJsb2NhbGUiLCJ0aW1lIiwidGltZURlZmF1bHQiLCJkYXkiLCJzZXAxIiwibW9udGgiLCJzZXAyIiwieWVhciIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCIsImdldERhdGVQYXJ0cyIsImdldE1vbnRoSW5kZXgiLCJpc1ZhbGlkVGltZVBhcnQiLCJwYXJ0IiwiZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uIiwicG9zaXRpb24iLCJwYXJ0cyIsImdldFBvc2l0aW9uIiwibGVuZ3RoIiwicG9zIiwiaW5kZXgiLCJvZmZzZXQiLCJpc1VTIiwidmFsdWVzIiwic3RhcnQiLCJlbmQiLCJtYXRjaCIsInNob3J0Rm9ybWF0IiwibG9uZ0Zvcm1hdCIsImkiLCJ3ZWVrZGF5TmFtZXMiLCJtb250aE5hbWVzIiwiZ2V0TG9jYWxlTmFtZXMiLCJ0byIsImZyb20iLCJtb2RlIiwidXBkYXRlIiwic3RlcCIsImN1cnJlbnRWYWx1ZSIsImVudGVyIiwic3RhcnRZZWFyIiwiZmlyc3REYXlXZWVrIiwibnVtRGF5cyIsInByZXZNb250aCIsInByZXZNb250aE51bURheXMiLCJub3ciLCJpc0RheSIsInN0YXRlIiwibmV4dE1vbnRoTmVlZCIsIm5leHRNb250aCIsImxvY2FsZU5hbWVzIiwibmFtZXMiLCJhZGRFdmVudHMiLCJ0YXJnZXRzIiwiZXZlbnRzIiwidHlwZSIsImhhbmRsZXIiLCJ0YXJnZXQiLCJjb21iaW5lRXZlbnRzIiwiZXZlbnQiLCJnZXRLZXkiLCJnZXRLZXlOYXZpZ2F0aW9uIiwia2V5IiwiZ2V0VGFyZ2V0IiwiY29tcG9uZW50IiwiY2xhc3NlcyIsImh5cGhlbmF0ZSIsInNob3ciLCJ0cmlnZ2VyIiwicG9wdXAiLCJlbCIsImJvdW5kcyIsInRyaWdnZXJMZWZ0IiwidHJpZ2dlclRvcCIsInRyaWdnZXJXaWR0aCIsInRyaWdnZXJIZWlnaHQiLCJwb3B1cFdpZHRoIiwicG9wdXBIZWlnaHQiLCJwYXJ0MSIsInBhcnQyIiwid2luV2lkdGgiLCJ3aW5IZWlnaHQiLCJsZWZ0IiwidG9wIiwidHJpZ2dlckJvdW5kcyIsInBhcmVudCIsImlucHV0Iiwic2l6ZSIsIm1pbiIsIm1heCIsImdldExlbmd0aCIsInByZWZpeCIsInNldFNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsIkRpdG9UcmlnZ2VyIiwiRGl0b0NhbGVuZGFyIiwiRGl0b0lucHV0IiwiRGl0b0ljb24iLCJkZWZhdWx0Rm9ybWF0cyIsImZvcm1hdCIsImZvY3VzIiwiZ2V0RGF0ZVBhcnQiLCJjYWxlbmRhciIsInRvZ2dsZSIsInNlbGVjdGlvbiIsInNtb290aCIsInNjcm9sbCIsInJlZiIsImxpbmVIZWlnaHQiLCJkaXN0YW5jZSIsIm5hbWUiLCJjb3VudCIsImlzRGlnaXQiLCJjaGFyIiwiRGl0b0RhdGVQaWNrZXIiLCJEaXRvVGltZVBpY2tlciIsInRyYW5zaXRpb24iLCJkaXNhYmxlZCIsImFzc2lnbkRlZXBseSIsIm9wdGlvbnMiLCJ0ZXh0Iiwic2hvd1ByZXYiLCJzaG93TmV4dCIsImN1cnJlbnRQYWdlIiwibnVtUGFnZXMiLCJzaG93TGVuZ3RoIiwiYnV0dG9ucyIsInBhZ2UiLCJidXR0b24iLCJjaGVja2VkIiwidW5jaGVja2VkIiwibW9kZWxWYWx1ZSIsIlRyYW5zaXRpb25IZWlnaHQiLCJlbmFibGVkIiwic2xvdHMiLCJjcmVhdGVFbGVtZW50IiwiVHJhbnNpdGlvbiIsInNldFN0eWxlIiwiZWxlbWVudCIsInN0eWxlIiwibmV4dFRpbWVvdXQiLCJjYWxsYmFjayIsImZvcmNlUmVwYWludCIsIndpZHRoIiwiaGVpZ2h0Il0sIm1hcHBpbmdzIjoiOztBQUdPLFNBQVNBLEdBQWdCQyxHQUFPO0FBQ3JDLFNBQU9BLEtBQVNDLEdBQVFELENBQUssRUFBRSxLQUFLLENBQUFBLE1BQVNBLEVBQU0sU0FBU0UsRUFBTztBQUNyRTtBQUVPLFNBQVNDLEVBQWVDLEdBQU1DLElBQVEsSUFBSTtBQUMvQyxTQUFBRCxJQUFPRSxHQUFTRixDQUFJLElBQUlHLEdBQVEsRUFBR0gsQ0FB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
|