@ditojs/admin 2.94.1 → 2.96.0
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-admin.css +1 -1
- package/dist/dito-admin.es.js +56 -21
- package/dist/dito-admin.umd.js +5 -5
- package/package.json +14 -13
- package/src/components/DitoCreateButton.vue +11 -3
- package/src/components/DitoEditButtons.vue +4 -2
- package/src/components/DitoLabel.vue +2 -0
- package/src/components/DitoSchema.vue +2 -0
- package/src/components/DitoSchemaInlined.vue +9 -5
- package/src/components/DitoTreeItem.vue +12 -3
- package/src/mixins/SourceMixin.js +19 -6
- package/src/styles/_button.scss +6 -3
- package/src/types/DitoTypeList.vue +3 -1
- package/src/utils/ui/dist/dito-ui.es.js +0 -2729
- package/src/utils/ui/dist/dito-ui.umd.js +0 -2744
- package/src/utils/ui/dist/style.css +0 -1139
|
@@ -1,2744 +0,0 @@
|
|
|
1
|
-
;(function (global, factory) {
|
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined'
|
|
3
|
-
? factory(exports, require('@ditojs/utils'))
|
|
4
|
-
: typeof define === 'function' && define.amd
|
|
5
|
-
? define(['exports', '@ditojs/utils'], factory)
|
|
6
|
-
: ((global =
|
|
7
|
-
typeof globalThis !== 'undefined' ? globalThis : global || self),
|
|
8
|
-
factory((global['dito-ui'] = {}), global['@ditojs/utils']))
|
|
9
|
-
})(this, function (exports2, utils) {
|
|
10
|
-
'use strict'
|
|
11
|
-
const index = ''
|
|
12
|
-
function getAbsoluteBoundingRect(el) {
|
|
13
|
-
const doc = document
|
|
14
|
-
const win = window
|
|
15
|
-
const body = doc.body
|
|
16
|
-
let offsetX =
|
|
17
|
-
win.pageXOffset !== void 0
|
|
18
|
-
? win.pageXOffset
|
|
19
|
-
: (doc.documentElement || body.parentNode || body).scrollLeft
|
|
20
|
-
let offsetY =
|
|
21
|
-
win.pageYOffset !== void 0
|
|
22
|
-
? win.pageYOffset
|
|
23
|
-
: (doc.documentElement || body.parentNode || body).scrollTop
|
|
24
|
-
const rect = el.getBoundingClientRect()
|
|
25
|
-
if (el !== body) {
|
|
26
|
-
let parent = el.parentNode
|
|
27
|
-
while (parent !== body) {
|
|
28
|
-
offsetX += parent.scrollLeft
|
|
29
|
-
offsetY += parent.scrollTop
|
|
30
|
-
parent = parent.parentNode
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return {
|
|
34
|
-
bottom: rect.bottom + offsetY,
|
|
35
|
-
height: rect.height,
|
|
36
|
-
left: rect.left + offsetX,
|
|
37
|
-
right: rect.right + offsetX,
|
|
38
|
-
top: rect.top + offsetY,
|
|
39
|
-
width: rect.width
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function copyDate(date, {
|
|
43
|
-
year,
|
|
44
|
-
month,
|
|
45
|
-
day,
|
|
46
|
-
hour,
|
|
47
|
-
minute,
|
|
48
|
-
second,
|
|
49
|
-
millisecond
|
|
50
|
-
} = {}) {
|
|
51
|
-
return new Date(
|
|
52
|
-
utils.pick(year, date && date.getFullYear(), 0),
|
|
53
|
-
utils.pick(month, date && date.getMonth(), 0),
|
|
54
|
-
utils.pick(day, date && date.getDate(), 0),
|
|
55
|
-
utils.pick(hour, date && date.getHours(), 0),
|
|
56
|
-
utils.pick(minute, date && date.getMinutes(), 0),
|
|
57
|
-
utils.pick(second, date && date.getSeconds(), 0),
|
|
58
|
-
utils.pick(millisecond, date && date.getMilliseconds(), 0)
|
|
59
|
-
)
|
|
60
|
-
}
|
|
61
|
-
function convertDate(date) {
|
|
62
|
-
return utils.isDate(date) ? date : date ? new Date(date) : null
|
|
63
|
-
}
|
|
64
|
-
function addEvents(target, events2) {
|
|
65
|
-
for (const type in events2) {
|
|
66
|
-
target.addEventListener(type, events2[type], false)
|
|
67
|
-
}
|
|
68
|
-
return {
|
|
69
|
-
remove() {
|
|
70
|
-
for (const type in events2) {
|
|
71
|
-
target.removeEventListener(type, events2[type], false)
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
function getKey(event) {
|
|
77
|
-
return {
|
|
78
|
-
37: 'left',
|
|
79
|
-
38: 'up',
|
|
80
|
-
39: 'right',
|
|
81
|
-
40: 'down',
|
|
82
|
-
13: 'enter'
|
|
83
|
-
}[event.keyCode]
|
|
84
|
-
}
|
|
85
|
-
function getKeyNavigation(event) {
|
|
86
|
-
const key = getKey(event)
|
|
87
|
-
return {
|
|
88
|
-
hor: { left: -1, right: 1 }[key] || 0,
|
|
89
|
-
ver: { up: -1, down: 1 }[key] || 0,
|
|
90
|
-
enter: key === 'enter'
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
function scrollTo(element, to, duration) {
|
|
94
|
-
const requestAnimationFrame = (
|
|
95
|
-
window.requestAnimationFrame ||
|
|
96
|
-
function () {
|
|
97
|
-
return setTimeout(arguments[0], 10)
|
|
98
|
-
}
|
|
99
|
-
)
|
|
100
|
-
if (duration <= 0) {
|
|
101
|
-
element.scrollTop = to
|
|
102
|
-
} else {
|
|
103
|
-
const difference = to - element.scrollTop
|
|
104
|
-
const perTick = difference / duration * 10
|
|
105
|
-
requestAnimationFrame(() => {
|
|
106
|
-
element.scrollTop = element.scrollTop + perTick
|
|
107
|
-
if (element.scrollTop === to) {
|
|
108
|
-
return
|
|
109
|
-
}
|
|
110
|
-
scrollTo(element, to, duration - 10)
|
|
111
|
-
})
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
function setSelection(field, start, end) {
|
|
115
|
-
if (field.createTextRange) {
|
|
116
|
-
const range = field.createTextRange()
|
|
117
|
-
range.collapse(true)
|
|
118
|
-
range.moveStart('character', start)
|
|
119
|
-
range.moveEnd('character', end)
|
|
120
|
-
range.select()
|
|
121
|
-
field.focus()
|
|
122
|
-
} else if (field.setSelectionRange) {
|
|
123
|
-
field.focus()
|
|
124
|
-
field.setSelectionRange(start, end)
|
|
125
|
-
} else if ('selectionStart' in field) {
|
|
126
|
-
field.selectionStart = start
|
|
127
|
-
field.selectionEnd = end
|
|
128
|
-
field.focus()
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
const render$8 = function () {
|
|
132
|
-
const _vm = this
|
|
133
|
-
const _h = _vm.$createElement
|
|
134
|
-
const _c = _vm._self._c || _h
|
|
135
|
-
return _c(
|
|
136
|
-
'div',
|
|
137
|
-
{
|
|
138
|
-
staticClass: 'dito-calendar'
|
|
139
|
-
},
|
|
140
|
-
[
|
|
141
|
-
_c(
|
|
142
|
-
'div',
|
|
143
|
-
{
|
|
144
|
-
staticClass: 'dito-calendar-popup'
|
|
145
|
-
},
|
|
146
|
-
[
|
|
147
|
-
_c(
|
|
148
|
-
'div',
|
|
149
|
-
{
|
|
150
|
-
staticClass: 'dito-calendar-inner'
|
|
151
|
-
},
|
|
152
|
-
[
|
|
153
|
-
_vm.currentMode === 'day'
|
|
154
|
-
? [
|
|
155
|
-
_c(
|
|
156
|
-
'div',
|
|
157
|
-
{
|
|
158
|
-
staticClass: 'dito-calendar-header'
|
|
159
|
-
},
|
|
160
|
-
[
|
|
161
|
-
_c('a', {
|
|
162
|
-
staticClass:
|
|
163
|
-
'dito-calendar-step-prev dito-calendar-step-year',
|
|
164
|
-
on: {
|
|
165
|
-
click: function ($event) {
|
|
166
|
-
return _vm.stepYear(-1)
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}),
|
|
170
|
-
_c('a', {
|
|
171
|
-
staticClass:
|
|
172
|
-
'dito-calendar-step-prev dito-calendar-step-month',
|
|
173
|
-
on: {
|
|
174
|
-
click: function ($event) {
|
|
175
|
-
return _vm.stepMonth(-1)
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}),
|
|
179
|
-
_c('span', [
|
|
180
|
-
_c(
|
|
181
|
-
'a',
|
|
182
|
-
{
|
|
183
|
-
staticClass: 'dito-calendar-select-year',
|
|
184
|
-
on: {
|
|
185
|
-
click: function ($event) {
|
|
186
|
-
return _vm.setMode('year')
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
},
|
|
190
|
-
[
|
|
191
|
-
_vm._v(
|
|
192
|
-
_vm._s(
|
|
193
|
-
_vm.dateToString(_vm.currentValue, {
|
|
194
|
-
year: 1
|
|
195
|
-
})
|
|
196
|
-
)
|
|
197
|
-
)
|
|
198
|
-
]
|
|
199
|
-
),
|
|
200
|
-
_c(
|
|
201
|
-
'a',
|
|
202
|
-
{
|
|
203
|
-
staticClass: 'dito-calendar-select-month',
|
|
204
|
-
on: {
|
|
205
|
-
click: function ($event) {
|
|
206
|
-
return _vm.setMode('month')
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
},
|
|
210
|
-
[
|
|
211
|
-
_vm._v(
|
|
212
|
-
_vm._s(
|
|
213
|
-
_vm.dateToString(_vm.currentValue, {
|
|
214
|
-
month: 1
|
|
215
|
-
})
|
|
216
|
-
)
|
|
217
|
-
)
|
|
218
|
-
]
|
|
219
|
-
)
|
|
220
|
-
]),
|
|
221
|
-
_c('a', {
|
|
222
|
-
staticClass:
|
|
223
|
-
'dito-calendar-step-next dito-calendar-step-month',
|
|
224
|
-
on: {
|
|
225
|
-
click: function ($event) {
|
|
226
|
-
return _vm.stepMonth(1)
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}),
|
|
230
|
-
_c('a', {
|
|
231
|
-
staticClass:
|
|
232
|
-
'dito-calendar-step-next dito-calendar-step-year',
|
|
233
|
-
on: {
|
|
234
|
-
click: function ($event) {
|
|
235
|
-
return _vm.stepYear(1)
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
})
|
|
239
|
-
]
|
|
240
|
-
),
|
|
241
|
-
_c(
|
|
242
|
-
'div',
|
|
243
|
-
{
|
|
244
|
-
staticClass: 'dito-calendar-body'
|
|
245
|
-
},
|
|
246
|
-
[
|
|
247
|
-
_c(
|
|
248
|
-
'div',
|
|
249
|
-
{
|
|
250
|
-
staticClass: 'dito-calendar-weekdays'
|
|
251
|
-
},
|
|
252
|
-
_vm._l(_vm.weekdayNames, function (weekday) {
|
|
253
|
-
return _c('span', [_vm._v(_vm._s(weekday.short))])
|
|
254
|
-
}),
|
|
255
|
-
0
|
|
256
|
-
),
|
|
257
|
-
_c(
|
|
258
|
-
'div',
|
|
259
|
-
{
|
|
260
|
-
staticClass: 'dito-calendar-dates'
|
|
261
|
-
},
|
|
262
|
-
_vm._l(_vm.dateRange, function (date) {
|
|
263
|
-
return _c(
|
|
264
|
-
'span',
|
|
265
|
-
{
|
|
266
|
-
class: (
|
|
267
|
-
date.state && `dito-calendar-item-${
|
|
268
|
-
date.state
|
|
269
|
-
}`
|
|
270
|
-
),
|
|
271
|
-
on: {
|
|
272
|
-
click: function ($event) {
|
|
273
|
-
return _vm.selectDate(
|
|
274
|
-
date.date,
|
|
275
|
-
date.state,
|
|
276
|
-
true
|
|
277
|
-
)
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
},
|
|
281
|
-
[_vm._v(_vm._s(date.text))]
|
|
282
|
-
)
|
|
283
|
-
}),
|
|
284
|
-
0
|
|
285
|
-
)
|
|
286
|
-
]
|
|
287
|
-
),
|
|
288
|
-
_c(
|
|
289
|
-
'div',
|
|
290
|
-
{
|
|
291
|
-
staticClass: 'dito-calendar-footer'
|
|
292
|
-
},
|
|
293
|
-
[
|
|
294
|
-
_c('a', {
|
|
295
|
-
staticClass: 'dito-calendar-select-today',
|
|
296
|
-
attrs: {
|
|
297
|
-
role: 'button',
|
|
298
|
-
title: _vm.dateToString(new Date(), {
|
|
299
|
-
year: 1,
|
|
300
|
-
month: 1,
|
|
301
|
-
day: 1
|
|
302
|
-
})
|
|
303
|
-
},
|
|
304
|
-
on: {
|
|
305
|
-
click: function ($event) {
|
|
306
|
-
_vm.selectDate(new Date())
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
})
|
|
310
|
-
]
|
|
311
|
-
)
|
|
312
|
-
]
|
|
313
|
-
: _vm.currentMode === 'month'
|
|
314
|
-
? [
|
|
315
|
-
_c(
|
|
316
|
-
'div',
|
|
317
|
-
{
|
|
318
|
-
staticClass: 'dito-calendar-header'
|
|
319
|
-
},
|
|
320
|
-
[
|
|
321
|
-
_c('a', {
|
|
322
|
-
staticClass: 'dito-calendar-step-prev',
|
|
323
|
-
on: {
|
|
324
|
-
click: function ($event) {
|
|
325
|
-
return _vm.stepYear(-1)
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
}),
|
|
329
|
-
_c('span', [
|
|
330
|
-
_c(
|
|
331
|
-
'a',
|
|
332
|
-
{
|
|
333
|
-
staticClass: 'dito-calendar-select-year',
|
|
334
|
-
on: {
|
|
335
|
-
click: function ($event) {
|
|
336
|
-
return _vm.setMode('year')
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
},
|
|
340
|
-
[
|
|
341
|
-
_vm._v(
|
|
342
|
-
_vm._s(
|
|
343
|
-
_vm.dateToString(_vm.currentValue, {
|
|
344
|
-
year: 1
|
|
345
|
-
})
|
|
346
|
-
)
|
|
347
|
-
)
|
|
348
|
-
]
|
|
349
|
-
)
|
|
350
|
-
]),
|
|
351
|
-
_c('a', {
|
|
352
|
-
staticClass: 'dito-calendar-step-next',
|
|
353
|
-
on: {
|
|
354
|
-
click: function ($event) {
|
|
355
|
-
return _vm.stepYear(1)
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
})
|
|
359
|
-
]
|
|
360
|
-
),
|
|
361
|
-
_c(
|
|
362
|
-
'div',
|
|
363
|
-
{
|
|
364
|
-
staticClass: 'dito-calendar-body'
|
|
365
|
-
},
|
|
366
|
-
[
|
|
367
|
-
_c(
|
|
368
|
-
'div',
|
|
369
|
-
{
|
|
370
|
-
staticClass: 'dito-calendar-months'
|
|
371
|
-
},
|
|
372
|
-
_vm._l(_vm.monthNames, function (month, index2) {
|
|
373
|
-
return _c(
|
|
374
|
-
'span',
|
|
375
|
-
{
|
|
376
|
-
class: _vm.getMonthClass(index2),
|
|
377
|
-
on: {
|
|
378
|
-
click: function ($event) {
|
|
379
|
-
return _vm.selectMonth(index2)
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
},
|
|
383
|
-
[_vm._v(_vm._s(month.short))]
|
|
384
|
-
)
|
|
385
|
-
}),
|
|
386
|
-
0
|
|
387
|
-
)
|
|
388
|
-
]
|
|
389
|
-
)
|
|
390
|
-
]
|
|
391
|
-
: _vm.currentMode === 'year'
|
|
392
|
-
? [
|
|
393
|
-
_c(
|
|
394
|
-
'div',
|
|
395
|
-
{
|
|
396
|
-
staticClass: 'dito-calendar-header'
|
|
397
|
-
},
|
|
398
|
-
[
|
|
399
|
-
_c('a', {
|
|
400
|
-
staticClass: 'dito-calendar-step-prev',
|
|
401
|
-
on: {
|
|
402
|
-
click: function ($event) {
|
|
403
|
-
return _vm.stepDecade(-1)
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
}),
|
|
407
|
-
_c('span', [
|
|
408
|
-
_vm._v(
|
|
409
|
-
_vm._s(_vm.decadeToString(_vm.currentValue))
|
|
410
|
-
)
|
|
411
|
-
]),
|
|
412
|
-
_c('a', {
|
|
413
|
-
staticClass: 'dito-calendar-step-next',
|
|
414
|
-
on: {
|
|
415
|
-
click: function ($event) {
|
|
416
|
-
return _vm.stepDecade(1)
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
})
|
|
420
|
-
]
|
|
421
|
-
),
|
|
422
|
-
_c(
|
|
423
|
-
'div',
|
|
424
|
-
{
|
|
425
|
-
staticClass: 'dito-calendar-body'
|
|
426
|
-
},
|
|
427
|
-
[
|
|
428
|
-
_c(
|
|
429
|
-
'div',
|
|
430
|
-
{
|
|
431
|
-
staticClass: 'dito-calendar-years'
|
|
432
|
-
},
|
|
433
|
-
_vm._l(_vm.yearRange, function (year) {
|
|
434
|
-
return _c(
|
|
435
|
-
'span',
|
|
436
|
-
{
|
|
437
|
-
class: _vm.getYearClass(year),
|
|
438
|
-
on: {
|
|
439
|
-
click: function ($event) {
|
|
440
|
-
return _vm.selectYear(year)
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
},
|
|
444
|
-
[_vm._v(_vm._s(year))]
|
|
445
|
-
)
|
|
446
|
-
}),
|
|
447
|
-
0
|
|
448
|
-
)
|
|
449
|
-
]
|
|
450
|
-
)
|
|
451
|
-
]
|
|
452
|
-
: _vm._e()
|
|
453
|
-
],
|
|
454
|
-
2
|
|
455
|
-
)
|
|
456
|
-
]
|
|
457
|
-
)
|
|
458
|
-
]
|
|
459
|
-
)
|
|
460
|
-
}
|
|
461
|
-
const staticRenderFns$8 = []
|
|
462
|
-
render$8._withStripped = true
|
|
463
|
-
const Calendar_vue_vue_type_style_index_0_lang = ''
|
|
464
|
-
function normalizeComponent(
|
|
465
|
-
scriptExports,
|
|
466
|
-
render2,
|
|
467
|
-
staticRenderFns2,
|
|
468
|
-
functionalTemplate,
|
|
469
|
-
injectStyles,
|
|
470
|
-
scopeId,
|
|
471
|
-
moduleIdentifier,
|
|
472
|
-
shadowMode
|
|
473
|
-
) {
|
|
474
|
-
const options =
|
|
475
|
-
typeof scriptExports === 'function'
|
|
476
|
-
? scriptExports.options
|
|
477
|
-
: scriptExports
|
|
478
|
-
if (render2) {
|
|
479
|
-
options.render = render2
|
|
480
|
-
options.staticRenderFns = staticRenderFns2
|
|
481
|
-
options._compiled = true
|
|
482
|
-
}
|
|
483
|
-
if (functionalTemplate) {
|
|
484
|
-
options.functional = true
|
|
485
|
-
}
|
|
486
|
-
if (scopeId) {
|
|
487
|
-
options._scopeId = 'data-v-' + scopeId
|
|
488
|
-
}
|
|
489
|
-
let hook
|
|
490
|
-
if (moduleIdentifier) {
|
|
491
|
-
hook = function (context) {
|
|
492
|
-
context = (
|
|
493
|
-
context ||
|
|
494
|
-
this.$vnode && this.$vnode.ssrContext ||
|
|
495
|
-
this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext
|
|
496
|
-
)
|
|
497
|
-
if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
|
|
498
|
-
context = __VUE_SSR_CONTEXT__
|
|
499
|
-
}
|
|
500
|
-
if (injectStyles) {
|
|
501
|
-
injectStyles.call(this, context)
|
|
502
|
-
}
|
|
503
|
-
if (context && context._registeredComponents) {
|
|
504
|
-
context._registeredComponents.add(moduleIdentifier)
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
|
-
options._ssrRegister = hook
|
|
508
|
-
} else if (injectStyles) {
|
|
509
|
-
hook = shadowMode
|
|
510
|
-
? function () {
|
|
511
|
-
injectStyles.call(
|
|
512
|
-
this,
|
|
513
|
-
(options.functional ? this.parent : this).$root.$options
|
|
514
|
-
.shadowRoot
|
|
515
|
-
)
|
|
516
|
-
}
|
|
517
|
-
: injectStyles
|
|
518
|
-
}
|
|
519
|
-
if (hook) {
|
|
520
|
-
if (options.functional) {
|
|
521
|
-
options._injectStyles = hook
|
|
522
|
-
const originalRender = options.render
|
|
523
|
-
options.render = function renderWithStyleInjection(h, context) {
|
|
524
|
-
hook.call(context)
|
|
525
|
-
return originalRender(h, context)
|
|
526
|
-
}
|
|
527
|
-
} else {
|
|
528
|
-
const existing = options.beforeCreate
|
|
529
|
-
options.beforeCreate = existing ? [].concat(existing, hook) : [hook]
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
return {
|
|
533
|
-
exports: scriptExports,
|
|
534
|
-
options
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
const __vue2_script$9 = {
|
|
538
|
-
props: {
|
|
539
|
-
value: { type: Date, default: null },
|
|
540
|
-
locale: { type: String, default: 'en-US' },
|
|
541
|
-
disabledDate: { type: Function, default: () => false },
|
|
542
|
-
mode: { type: String, default: 'day' }
|
|
543
|
-
},
|
|
544
|
-
data() {
|
|
545
|
-
const { weekdayNames, monthNames } = getLocaleNames(this.locale)
|
|
546
|
-
return {
|
|
547
|
-
weekdayNames,
|
|
548
|
-
monthNames,
|
|
549
|
-
dateRange: [],
|
|
550
|
-
yearRange: [],
|
|
551
|
-
currentValue: (
|
|
552
|
-
this.value || copyDate(new Date(), { hour: 0, minute: 0, second: 0 })
|
|
553
|
-
),
|
|
554
|
-
currentMode: this.mode
|
|
555
|
-
}
|
|
556
|
-
},
|
|
557
|
-
watch: {
|
|
558
|
-
currentValue: 'updateDateRange',
|
|
559
|
-
disabledDate: 'updateDateRange',
|
|
560
|
-
value(newVal, oldVal) {
|
|
561
|
-
if (+newVal !== +oldVal) {
|
|
562
|
-
this.currentValue = newVal || new Date()
|
|
563
|
-
}
|
|
564
|
-
},
|
|
565
|
-
mode(mode) {
|
|
566
|
-
this.currentMode = mode
|
|
567
|
-
}
|
|
568
|
-
},
|
|
569
|
-
mounted() {
|
|
570
|
-
this.updateDateRange()
|
|
571
|
-
},
|
|
572
|
-
methods: {
|
|
573
|
-
getMonthClass(month) {
|
|
574
|
-
return {
|
|
575
|
-
'dito-calendar-item-active': (
|
|
576
|
-
this.value &&
|
|
577
|
-
month === this.value.getMonth() &&
|
|
578
|
-
this.currentValue.getFullYear() === this.value.getFullYear()
|
|
579
|
-
),
|
|
580
|
-
'dito-calendar-item-current': month === this.currentValue.getMonth()
|
|
581
|
-
}
|
|
582
|
-
},
|
|
583
|
-
getYearClass(year) {
|
|
584
|
-
return {
|
|
585
|
-
'dito-calendar-item-active': (
|
|
586
|
-
this.value && year === this.value.getFullYear()
|
|
587
|
-
),
|
|
588
|
-
'dito-calendar-item-current': year === this.currentValue.getFullYear()
|
|
589
|
-
}
|
|
590
|
-
},
|
|
591
|
-
setDate(overrides) {
|
|
592
|
-
this.currentValue = copyDate(this.currentValue, overrides)
|
|
593
|
-
},
|
|
594
|
-
stepDecade(step) {
|
|
595
|
-
this.setDate({
|
|
596
|
-
year: this.currentValue.getFullYear() + step * 10
|
|
597
|
-
})
|
|
598
|
-
},
|
|
599
|
-
setMode(mode) {
|
|
600
|
-
this.currentMode = mode
|
|
601
|
-
},
|
|
602
|
-
stepMonth(step) {
|
|
603
|
-
const { currentValue } = this
|
|
604
|
-
const { year, month } = this.getYearMonth(
|
|
605
|
-
currentValue.getFullYear(),
|
|
606
|
-
currentValue.getMonth() + step
|
|
607
|
-
)
|
|
608
|
-
this.setDate({
|
|
609
|
-
month,
|
|
610
|
-
day: Math.min(
|
|
611
|
-
this.getDayCount(year, month),
|
|
612
|
-
this.currentValue.getDate()
|
|
613
|
-
)
|
|
614
|
-
})
|
|
615
|
-
},
|
|
616
|
-
stepYear(step) {
|
|
617
|
-
this.setDate({
|
|
618
|
-
year: this.currentValue.getFullYear() + step
|
|
619
|
-
})
|
|
620
|
-
},
|
|
621
|
-
selectDate(date, state, copy = false) {
|
|
622
|
-
if (state !== 'disabled') {
|
|
623
|
-
if (copy) {
|
|
624
|
-
this.setDate({
|
|
625
|
-
year: date.getFullYear(),
|
|
626
|
-
month: date.getMonth(),
|
|
627
|
-
day: date.getDate()
|
|
628
|
-
})
|
|
629
|
-
} else {
|
|
630
|
-
this.currentValue = date
|
|
631
|
-
}
|
|
632
|
-
this.$emit('input', this.currentValue)
|
|
633
|
-
}
|
|
634
|
-
},
|
|
635
|
-
selectMonth(month) {
|
|
636
|
-
this.setMode('day')
|
|
637
|
-
this.setDate({ month })
|
|
638
|
-
},
|
|
639
|
-
selectYear(year) {
|
|
640
|
-
this.setMode('month')
|
|
641
|
-
this.setDate({ year })
|
|
642
|
-
},
|
|
643
|
-
getYearMonth(year, month) {
|
|
644
|
-
if (month > 11) {
|
|
645
|
-
year++
|
|
646
|
-
month = 0
|
|
647
|
-
} else if (month < 0) {
|
|
648
|
-
year--
|
|
649
|
-
month = 11
|
|
650
|
-
}
|
|
651
|
-
return { year, month }
|
|
652
|
-
},
|
|
653
|
-
dateToString(date, { year, month, day }) {
|
|
654
|
-
return date.toLocaleString(this.locale, {
|
|
655
|
-
year: year && 'numeric',
|
|
656
|
-
month: month && 'long',
|
|
657
|
-
day: day && 'numeric'
|
|
658
|
-
})
|
|
659
|
-
},
|
|
660
|
-
decadeToString(date) {
|
|
661
|
-
const year = this.getFirstYearOfDecade(date.getFullYear())
|
|
662
|
-
return `${year} \u2013 ${year + 9}`
|
|
663
|
-
},
|
|
664
|
-
getDayCount(year, month) {
|
|
665
|
-
const daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
|
|
666
|
-
return month === 1 && (!(year % 400) || !(year % 4) && year % 100)
|
|
667
|
-
? 29
|
|
668
|
-
: daysInMonth[month]
|
|
669
|
-
},
|
|
670
|
-
getFirstYearOfDecade(year) {
|
|
671
|
-
const yearStr = year.toString()
|
|
672
|
-
return +`${yearStr.slice(0, -1)}0`
|
|
673
|
-
},
|
|
674
|
-
navigate({ hor, ver, enter }) {
|
|
675
|
-
const { currentMode, currentValue } = this
|
|
676
|
-
if (hor || ver) {
|
|
677
|
-
switch (currentMode) {
|
|
678
|
-
case 'day':
|
|
679
|
-
this.setDate({
|
|
680
|
-
day: currentValue.getDate() + hor + ver * 7
|
|
681
|
-
})
|
|
682
|
-
break
|
|
683
|
-
case 'month':
|
|
684
|
-
this.setDate({
|
|
685
|
-
month: currentValue.getMonth() + hor + ver * 6
|
|
686
|
-
})
|
|
687
|
-
break
|
|
688
|
-
case 'year':
|
|
689
|
-
this.setDate({
|
|
690
|
-
year: currentValue.getFullYear() + hor + ver * 5
|
|
691
|
-
})
|
|
692
|
-
break
|
|
693
|
-
}
|
|
694
|
-
return true
|
|
695
|
-
} else if (enter) {
|
|
696
|
-
switch (currentMode) {
|
|
697
|
-
case 'day':
|
|
698
|
-
this.selectDate(currentValue)
|
|
699
|
-
break
|
|
700
|
-
case 'month':
|
|
701
|
-
this.setMode('day')
|
|
702
|
-
break
|
|
703
|
-
case 'year':
|
|
704
|
-
this.setMode('month')
|
|
705
|
-
break
|
|
706
|
-
}
|
|
707
|
-
return true
|
|
708
|
-
}
|
|
709
|
-
},
|
|
710
|
-
updateDateRange() {
|
|
711
|
-
this.dateRange = []
|
|
712
|
-
this.yearRange = []
|
|
713
|
-
const { currentValue } = this
|
|
714
|
-
const year = currentValue.getFullYear()
|
|
715
|
-
const month = currentValue.getMonth()
|
|
716
|
-
const startYear = this.getFirstYearOfDecade(year)
|
|
717
|
-
for (let i = 0; i < 10; i++) {
|
|
718
|
-
this.yearRange.push(startYear + i)
|
|
719
|
-
}
|
|
720
|
-
const currMonthFirstDay = new Date(year, month, 1)
|
|
721
|
-
let firstDayWeek = currMonthFirstDay.getDay() + 1
|
|
722
|
-
if (firstDayWeek === 0) {
|
|
723
|
-
firstDayWeek = 7
|
|
724
|
-
}
|
|
725
|
-
const dayCount = this.getDayCount(year, month)
|
|
726
|
-
if (firstDayWeek > 1) {
|
|
727
|
-
const prevMonth = this.getYearMonth(year, month - 1)
|
|
728
|
-
const prevMonthDayCount = this.getDayCount(
|
|
729
|
-
prevMonth.year,
|
|
730
|
-
prevMonth.month
|
|
731
|
-
)
|
|
732
|
-
for (let i = 1; i < firstDayWeek; i++) {
|
|
733
|
-
const day = prevMonthDayCount - firstDayWeek + i + 1
|
|
734
|
-
const date = new Date(prevMonth.year, prevMonth.month, day)
|
|
735
|
-
this.dateRange.push({
|
|
736
|
-
text: day,
|
|
737
|
-
date,
|
|
738
|
-
state: this.disabledDate(date) ? 'disabled' : 'gray'
|
|
739
|
-
})
|
|
740
|
-
}
|
|
741
|
-
}
|
|
742
|
-
const today = new Date()
|
|
743
|
-
for (let i = 1; i <= dayCount; i++) {
|
|
744
|
-
const date = new Date(year, month, i)
|
|
745
|
-
const isDay = date2 => (
|
|
746
|
-
date2 &&
|
|
747
|
-
date2.getDate() === i &&
|
|
748
|
-
date2.getFullYear() === year &&
|
|
749
|
-
date2.getMonth() === month
|
|
750
|
-
)
|
|
751
|
-
const state = isDay(this.value)
|
|
752
|
-
? 'active'
|
|
753
|
-
: isDay(today)
|
|
754
|
-
? 'today'
|
|
755
|
-
: this.disabledDate(date)
|
|
756
|
-
? 'disabled'
|
|
757
|
-
: isDay(currentValue)
|
|
758
|
-
? 'current'
|
|
759
|
-
: null
|
|
760
|
-
this.dateRange.push({
|
|
761
|
-
text: i,
|
|
762
|
-
date,
|
|
763
|
-
state
|
|
764
|
-
})
|
|
765
|
-
}
|
|
766
|
-
const nextMonthNeed = 42 - this.dateRange.length
|
|
767
|
-
if (nextMonthNeed > 0) {
|
|
768
|
-
const nextMonth = this.getYearMonth(year, month + 1)
|
|
769
|
-
for (let i = 1; i <= nextMonthNeed; i++) {
|
|
770
|
-
const date = new Date(nextMonth.year, nextMonth.month, i)
|
|
771
|
-
const state = this.disabledDate(date) ? 'disabled' : 'gray'
|
|
772
|
-
this.dateRange.push({
|
|
773
|
-
text: i,
|
|
774
|
-
date,
|
|
775
|
-
state
|
|
776
|
-
})
|
|
777
|
-
}
|
|
778
|
-
}
|
|
779
|
-
}
|
|
780
|
-
}
|
|
781
|
-
}
|
|
782
|
-
const localeNames = {}
|
|
783
|
-
function getLocaleNames(locale) {
|
|
784
|
-
let names = localeNames[locale]
|
|
785
|
-
if (!names) {
|
|
786
|
-
const weekdayNames = []
|
|
787
|
-
for (let i = 0; i < 7; i++) {
|
|
788
|
-
const date = new Date(0, 0, i)
|
|
789
|
-
weekdayNames.push({
|
|
790
|
-
long: date.toLocaleString(locale, { weekday: 'long' }),
|
|
791
|
-
short: date.toLocaleString(locale, { weekday: 'short' })
|
|
792
|
-
})
|
|
793
|
-
}
|
|
794
|
-
const monthNames = []
|
|
795
|
-
for (let i = 1; i <= 12; i++) {
|
|
796
|
-
const date = new Date(0, i, 0)
|
|
797
|
-
monthNames.push({
|
|
798
|
-
long: date.toLocaleString(locale, { month: 'long' }),
|
|
799
|
-
short: date.toLocaleString(locale, { month: 'short' })
|
|
800
|
-
})
|
|
801
|
-
}
|
|
802
|
-
names = localeNames[locale] = {
|
|
803
|
-
weekdayNames,
|
|
804
|
-
monthNames
|
|
805
|
-
}
|
|
806
|
-
}
|
|
807
|
-
return names
|
|
808
|
-
}
|
|
809
|
-
const __cssModules$9 = {}
|
|
810
|
-
const __component__$9 = /* @__PURE__ */ normalizeComponent(
|
|
811
|
-
__vue2_script$9,
|
|
812
|
-
render$8,
|
|
813
|
-
staticRenderFns$8,
|
|
814
|
-
false,
|
|
815
|
-
__vue2_injectStyles$9,
|
|
816
|
-
null,
|
|
817
|
-
null,
|
|
818
|
-
null
|
|
819
|
-
)
|
|
820
|
-
function __vue2_injectStyles$9(context) {
|
|
821
|
-
for (const o in __cssModules$9) {
|
|
822
|
-
this[o] = __cssModules$9[o]
|
|
823
|
-
}
|
|
824
|
-
}
|
|
825
|
-
__component__$9.options.__file = 'src/components/Calendar.vue'
|
|
826
|
-
const Calendar = /* @__PURE__ */ (function () {
|
|
827
|
-
return __component__$9.exports
|
|
828
|
-
})()
|
|
829
|
-
const render$7 = function () {
|
|
830
|
-
const _vm = this
|
|
831
|
-
const _h = _vm.$createElement
|
|
832
|
-
const _c = _vm._self._c || _h
|
|
833
|
-
return _c(
|
|
834
|
-
'div',
|
|
835
|
-
{
|
|
836
|
-
staticClass: 'dito-trigger-container'
|
|
837
|
-
},
|
|
838
|
-
[
|
|
839
|
-
_vm.alwaysShow
|
|
840
|
-
? _c(
|
|
841
|
-
'div',
|
|
842
|
-
{
|
|
843
|
-
ref: 'trigger',
|
|
844
|
-
staticClass: 'dito-trigger',
|
|
845
|
-
class: _vm.triggerClass
|
|
846
|
-
},
|
|
847
|
-
[_vm._t('trigger')],
|
|
848
|
-
2
|
|
849
|
-
)
|
|
850
|
-
: _vm.trigger === 'click'
|
|
851
|
-
? _c(
|
|
852
|
-
'div',
|
|
853
|
-
{
|
|
854
|
-
ref: 'trigger',
|
|
855
|
-
staticClass: 'dito-trigger',
|
|
856
|
-
class: _vm.triggerClass,
|
|
857
|
-
on: {
|
|
858
|
-
click: _vm.onClick
|
|
859
|
-
}
|
|
860
|
-
},
|
|
861
|
-
[_vm._t('trigger')],
|
|
862
|
-
2
|
|
863
|
-
)
|
|
864
|
-
: _vm.trigger === 'hover'
|
|
865
|
-
? _c(
|
|
866
|
-
'div',
|
|
867
|
-
{
|
|
868
|
-
ref: 'trigger',
|
|
869
|
-
staticClass: 'dito-trigger',
|
|
870
|
-
class: _vm.triggerClass,
|
|
871
|
-
on: {
|
|
872
|
-
mouseenter: function ($event) {
|
|
873
|
-
return _vm.onHover(true)
|
|
874
|
-
},
|
|
875
|
-
mouseleave: function ($event) {
|
|
876
|
-
return _vm.onHover(false)
|
|
877
|
-
}
|
|
878
|
-
}
|
|
879
|
-
},
|
|
880
|
-
[_vm._t('trigger')],
|
|
881
|
-
2
|
|
882
|
-
)
|
|
883
|
-
: _vm.trigger === 'focus' || _vm.trigger === 'always'
|
|
884
|
-
? _c(
|
|
885
|
-
'div',
|
|
886
|
-
{
|
|
887
|
-
ref: 'trigger',
|
|
888
|
-
staticClass: 'dito-trigger',
|
|
889
|
-
class: _vm.triggerClass
|
|
890
|
-
},
|
|
891
|
-
[_vm._t('trigger')],
|
|
892
|
-
2
|
|
893
|
-
)
|
|
894
|
-
: _vm._e(),
|
|
895
|
-
_c(
|
|
896
|
-
'transition',
|
|
897
|
-
{
|
|
898
|
-
attrs: {
|
|
899
|
-
name: _vm.transition
|
|
900
|
-
}
|
|
901
|
-
},
|
|
902
|
-
[
|
|
903
|
-
_vm.trigger === 'hover'
|
|
904
|
-
? _c(
|
|
905
|
-
'div',
|
|
906
|
-
{
|
|
907
|
-
directives: [
|
|
908
|
-
{
|
|
909
|
-
name: 'show',
|
|
910
|
-
rawName: 'v-show',
|
|
911
|
-
value: _vm.showPopup,
|
|
912
|
-
expression: 'showPopup'
|
|
913
|
-
}
|
|
914
|
-
],
|
|
915
|
-
ref: 'popup',
|
|
916
|
-
staticClass: 'dito-popup',
|
|
917
|
-
class: _vm.popupClass,
|
|
918
|
-
style: _vm.popupStyle,
|
|
919
|
-
on: {
|
|
920
|
-
mouseenter: function ($event) {
|
|
921
|
-
return _vm.onHover(true)
|
|
922
|
-
},
|
|
923
|
-
mouseleave: function ($event) {
|
|
924
|
-
return _vm.onHover(false)
|
|
925
|
-
}
|
|
926
|
-
}
|
|
927
|
-
},
|
|
928
|
-
[_vm.showPopup ? _vm._t('popup') : _vm._e()],
|
|
929
|
-
2
|
|
930
|
-
)
|
|
931
|
-
: _c(
|
|
932
|
-
'div',
|
|
933
|
-
{
|
|
934
|
-
directives: [
|
|
935
|
-
{
|
|
936
|
-
name: 'show',
|
|
937
|
-
rawName: 'v-show',
|
|
938
|
-
value: _vm.showPopup,
|
|
939
|
-
expression: 'showPopup'
|
|
940
|
-
}
|
|
941
|
-
],
|
|
942
|
-
ref: 'popup',
|
|
943
|
-
staticClass: 'dito-popup',
|
|
944
|
-
class: _vm.popupClass,
|
|
945
|
-
style: _vm.popupStyle
|
|
946
|
-
},
|
|
947
|
-
[_vm.showPopup ? _vm._t('popup') : _vm._e()],
|
|
948
|
-
2
|
|
949
|
-
)
|
|
950
|
-
]
|
|
951
|
-
)
|
|
952
|
-
],
|
|
953
|
-
1
|
|
954
|
-
)
|
|
955
|
-
}
|
|
956
|
-
const staticRenderFns$7 = []
|
|
957
|
-
render$7._withStripped = true
|
|
958
|
-
const Trigger_vue_vue_type_style_index_0_lang = ''
|
|
959
|
-
const __vue2_script$8 = {
|
|
960
|
-
props: {
|
|
961
|
-
trigger: { type: String, default: 'click' },
|
|
962
|
-
transition: { type: String, default: 'slide' },
|
|
963
|
-
placement: { type: String, default: 'bottom' },
|
|
964
|
-
show: { type: Boolean, default: false },
|
|
965
|
-
disabled: { type: Boolean, default: false },
|
|
966
|
-
target: { type: [String, HTMLElement], default: null },
|
|
967
|
-
customClass: { type: String, default: null },
|
|
968
|
-
zIndex: { type: Number, default: 0 },
|
|
969
|
-
keepInView: { type: Boolean, default: true },
|
|
970
|
-
hideWhenClickOutside: { type: Boolean, default: true },
|
|
971
|
-
alwaysShow: { type: Boolean, default: false },
|
|
972
|
-
cover: { type: Boolean, default: false },
|
|
973
|
-
hideDelay: { type: Number, default: 0 }
|
|
974
|
-
},
|
|
975
|
-
data() {
|
|
976
|
-
return {
|
|
977
|
-
showPopup: this.show,
|
|
978
|
-
popupPlacement: this.placement
|
|
979
|
-
}
|
|
980
|
-
},
|
|
981
|
-
computed: {
|
|
982
|
-
triggerClass() {
|
|
983
|
-
return {
|
|
984
|
-
'dito-trigger-disabled': this.disabled
|
|
985
|
-
}
|
|
986
|
-
},
|
|
987
|
-
popupClass() {
|
|
988
|
-
const classes = {
|
|
989
|
-
[`dito-popup-${utils.hyphenate(this.placement)}`]: true
|
|
990
|
-
}
|
|
991
|
-
if (this.customClass) {
|
|
992
|
-
classes[this.customClass] = true
|
|
993
|
-
}
|
|
994
|
-
return classes
|
|
995
|
-
},
|
|
996
|
-
popupStyle() {
|
|
997
|
-
return this.zIndex ? `z-index: ${this.zIndex}` : ''
|
|
998
|
-
}
|
|
999
|
-
},
|
|
1000
|
-
watch: {
|
|
1001
|
-
show(show) {
|
|
1002
|
-
this.showPopup = show || this.alwaysShow
|
|
1003
|
-
},
|
|
1004
|
-
showPopup(newVal, oldVal) {
|
|
1005
|
-
if (!newVal !== !oldVal) {
|
|
1006
|
-
this.$emit('update:show', newVal)
|
|
1007
|
-
if (newVal) {
|
|
1008
|
-
this.$nextTick(() => this.updatePosition())
|
|
1009
|
-
}
|
|
1010
|
-
}
|
|
1011
|
-
}
|
|
1012
|
-
},
|
|
1013
|
-
mounted() {
|
|
1014
|
-
const { trigger, popup } = this.$refs
|
|
1015
|
-
if (this.trigger === 'focus') {
|
|
1016
|
-
const target = trigger.querySelector('input, textarea')
|
|
1017
|
-
if (target) {
|
|
1018
|
-
this.focusEvents = addEvents(target, {
|
|
1019
|
-
focus: () => {
|
|
1020
|
-
this.showPopup = true
|
|
1021
|
-
},
|
|
1022
|
-
blur: () => {
|
|
1023
|
-
this.showPopup = false
|
|
1024
|
-
}
|
|
1025
|
-
})
|
|
1026
|
-
}
|
|
1027
|
-
}
|
|
1028
|
-
if (this.hideWhenClickOutside && !this.alwaysShow) {
|
|
1029
|
-
this.closeEvents = addEvents(window, {
|
|
1030
|
-
mouseup: event => {
|
|
1031
|
-
if (
|
|
1032
|
-
this.showPopup &&
|
|
1033
|
-
!popup.contains(event.target) &&
|
|
1034
|
-
!trigger.contains(event.target)
|
|
1035
|
-
) {
|
|
1036
|
-
this.showPopup = false
|
|
1037
|
-
}
|
|
1038
|
-
},
|
|
1039
|
-
blur: () => {
|
|
1040
|
-
this.showPopup = false
|
|
1041
|
-
}
|
|
1042
|
-
})
|
|
1043
|
-
}
|
|
1044
|
-
if (this.alwaysShow) {
|
|
1045
|
-
this.showPopup = true
|
|
1046
|
-
}
|
|
1047
|
-
},
|
|
1048
|
-
created() {
|
|
1049
|
-
this.showPopup = this.show
|
|
1050
|
-
},
|
|
1051
|
-
beforeDestroy() {
|
|
1052
|
-
let _a, _b
|
|
1053
|
-
;(_a = this.focusEvents) == null ? void 0 : _a.remove()
|
|
1054
|
-
;(_b = this.closeEvents) == null ? void 0 : _b.remove()
|
|
1055
|
-
this.mouseLeaveTimer = null
|
|
1056
|
-
},
|
|
1057
|
-
methods: {
|
|
1058
|
-
updatePosition() {
|
|
1059
|
-
const { trigger, popup } = this.$refs
|
|
1060
|
-
if (this.show && popup.offsetWidth === 0) {
|
|
1061
|
-
setTimeout(() => this.updatePosition(), 0)
|
|
1062
|
-
return
|
|
1063
|
-
}
|
|
1064
|
-
const target = utils.isString(this.target)
|
|
1065
|
-
? this.$refs[this.target]
|
|
1066
|
-
: this.target
|
|
1067
|
-
if (target) {
|
|
1068
|
-
const el = target === popup ? trigger : popup.firstChild
|
|
1069
|
-
el.style.width = getComputedStyle(target).width
|
|
1070
|
-
}
|
|
1071
|
-
const bounds = (target || trigger).getBoundingClientRect()
|
|
1072
|
-
const triggerLeft = bounds.left + window.scrollX
|
|
1073
|
-
const triggerTop = bounds.top + window.scrollY
|
|
1074
|
-
const triggerWidth = bounds.width
|
|
1075
|
-
const triggerHeight = bounds.height
|
|
1076
|
-
const popupWidth = popup.offsetWidth
|
|
1077
|
-
const popupHeight = popup.offsetHeight
|
|
1078
|
-
let [part1, part2] = this.popupPlacement.split('-') || []
|
|
1079
|
-
if (this.keepInView) {
|
|
1080
|
-
const winWidth = window.innerWidth
|
|
1081
|
-
const winHeight = window.innerHeight
|
|
1082
|
-
if (part1 === 'top') {
|
|
1083
|
-
if (triggerTop < popupHeight) {
|
|
1084
|
-
part1 = 'bottom'
|
|
1085
|
-
}
|
|
1086
|
-
} else if (part1 === 'bottom') {
|
|
1087
|
-
if (winHeight - triggerTop - triggerHeight < popupHeight) {
|
|
1088
|
-
part1 = 'top'
|
|
1089
|
-
}
|
|
1090
|
-
} else if (part1 === 'left') {
|
|
1091
|
-
if (triggerLeft < popupWidth) {
|
|
1092
|
-
part1 = 'right'
|
|
1093
|
-
}
|
|
1094
|
-
} else if (part1 === 'right') {
|
|
1095
|
-
if (winWidth - triggerLeft - triggerWidth < popupWidth) {
|
|
1096
|
-
part1 = 'left'
|
|
1097
|
-
}
|
|
1098
|
-
}
|
|
1099
|
-
if (part2 === 'top') {
|
|
1100
|
-
if (winHeight - triggerTop < popupHeight) {
|
|
1101
|
-
part2 = 'bottom'
|
|
1102
|
-
}
|
|
1103
|
-
} else if (part2 === 'bottom') {
|
|
1104
|
-
if (triggerTop + triggerHeight < popupHeight) {
|
|
1105
|
-
part2 = 'top'
|
|
1106
|
-
}
|
|
1107
|
-
} else if (part2 === 'left') {
|
|
1108
|
-
if (winWidth - triggerLeft < popupWidth) {
|
|
1109
|
-
part2 = 'right'
|
|
1110
|
-
}
|
|
1111
|
-
} else if (part2 === 'right') {
|
|
1112
|
-
if (triggerLeft + triggerWidth < popupWidth) {
|
|
1113
|
-
part2 = 'left'
|
|
1114
|
-
}
|
|
1115
|
-
}
|
|
1116
|
-
}
|
|
1117
|
-
let left = 0
|
|
1118
|
-
let top = 0
|
|
1119
|
-
switch (part1) {
|
|
1120
|
-
case 'top':
|
|
1121
|
-
top -= popupHeight
|
|
1122
|
-
break
|
|
1123
|
-
case 'left':
|
|
1124
|
-
left -= popupWidth
|
|
1125
|
-
break
|
|
1126
|
-
case 'right':
|
|
1127
|
-
left += triggerWidth
|
|
1128
|
-
break
|
|
1129
|
-
case 'bottom':
|
|
1130
|
-
top += triggerHeight
|
|
1131
|
-
break
|
|
1132
|
-
}
|
|
1133
|
-
switch (part2) {
|
|
1134
|
-
case 'right':
|
|
1135
|
-
left -= popupWidth - triggerWidth
|
|
1136
|
-
break
|
|
1137
|
-
case 'bottom':
|
|
1138
|
-
top -= popupHeight - triggerHeight
|
|
1139
|
-
break
|
|
1140
|
-
}
|
|
1141
|
-
if (this.cover) {
|
|
1142
|
-
if (part1 === 'top') {
|
|
1143
|
-
top += triggerHeight
|
|
1144
|
-
} else if (part1 === 'bottom') {
|
|
1145
|
-
top -= triggerHeight
|
|
1146
|
-
}
|
|
1147
|
-
}
|
|
1148
|
-
if (target && target !== trigger) {
|
|
1149
|
-
const triggerBounds = trigger.getBoundingClientRect()
|
|
1150
|
-
left += triggerLeft - triggerBounds.left
|
|
1151
|
-
top += triggerTop - triggerBounds.top
|
|
1152
|
-
}
|
|
1153
|
-
popup.style.left = `${left}px`
|
|
1154
|
-
popup.style.top = `${top}px`
|
|
1155
|
-
this.$emit('update-position', {
|
|
1156
|
-
trigger,
|
|
1157
|
-
popup,
|
|
1158
|
-
placement: this.popupPlacement
|
|
1159
|
-
})
|
|
1160
|
-
},
|
|
1161
|
-
onClick() {
|
|
1162
|
-
if (!this.disabled) {
|
|
1163
|
-
this.showPopup = !this.showPopup
|
|
1164
|
-
}
|
|
1165
|
-
},
|
|
1166
|
-
onHover(enter) {
|
|
1167
|
-
if (!this.disabled) {
|
|
1168
|
-
clearTimeout(this.mouseLeaveTimer)
|
|
1169
|
-
if (enter) {
|
|
1170
|
-
this.showPopup = true
|
|
1171
|
-
} else {
|
|
1172
|
-
if (this.hideDelay) {
|
|
1173
|
-
this.mouseLeaveTimer = setTimeout(() => {
|
|
1174
|
-
this.showPopup = false
|
|
1175
|
-
}, this.hideDelay)
|
|
1176
|
-
} else {
|
|
1177
|
-
this.showPopup = false
|
|
1178
|
-
}
|
|
1179
|
-
}
|
|
1180
|
-
}
|
|
1181
|
-
}
|
|
1182
|
-
}
|
|
1183
|
-
}
|
|
1184
|
-
const __cssModules$8 = {}
|
|
1185
|
-
const __component__$8 = /* @__PURE__ */ normalizeComponent(
|
|
1186
|
-
__vue2_script$8,
|
|
1187
|
-
render$7,
|
|
1188
|
-
staticRenderFns$7,
|
|
1189
|
-
false,
|
|
1190
|
-
__vue2_injectStyles$8,
|
|
1191
|
-
null,
|
|
1192
|
-
null,
|
|
1193
|
-
null
|
|
1194
|
-
)
|
|
1195
|
-
function __vue2_injectStyles$8(context) {
|
|
1196
|
-
for (const o in __cssModules$8) {
|
|
1197
|
-
this[o] = __cssModules$8[o]
|
|
1198
|
-
}
|
|
1199
|
-
}
|
|
1200
|
-
__component__$8.options.__file = 'src/components/Trigger.vue'
|
|
1201
|
-
const Trigger = /* @__PURE__ */ (function () {
|
|
1202
|
-
return __component__$8.exports
|
|
1203
|
-
})()
|
|
1204
|
-
const render$6 = function () {
|
|
1205
|
-
const _vm = this
|
|
1206
|
-
const _h = _vm.$createElement
|
|
1207
|
-
const _c = _vm._self._c || _h
|
|
1208
|
-
return _c(
|
|
1209
|
-
'div',
|
|
1210
|
-
{
|
|
1211
|
-
staticClass: 'dito-input'
|
|
1212
|
-
},
|
|
1213
|
-
[
|
|
1214
|
-
_vm.attributes.type === 'checkbox'
|
|
1215
|
-
? _c(
|
|
1216
|
-
'input',
|
|
1217
|
-
_vm._g(
|
|
1218
|
-
_vm._b(
|
|
1219
|
-
{
|
|
1220
|
-
directives: [
|
|
1221
|
-
{
|
|
1222
|
-
name: 'model',
|
|
1223
|
-
rawName: 'v-model',
|
|
1224
|
-
value: _vm.currentValue,
|
|
1225
|
-
expression: 'currentValue'
|
|
1226
|
-
}
|
|
1227
|
-
],
|
|
1228
|
-
ref: 'input',
|
|
1229
|
-
attrs: {
|
|
1230
|
-
'aria-label': _vm.title,
|
|
1231
|
-
'type': 'checkbox'
|
|
1232
|
-
},
|
|
1233
|
-
domProps: {
|
|
1234
|
-
checked: Array.isArray(_vm.currentValue)
|
|
1235
|
-
? _vm._i(_vm.currentValue, null) > -1
|
|
1236
|
-
: _vm.currentValue
|
|
1237
|
-
},
|
|
1238
|
-
on: {
|
|
1239
|
-
change: function ($event) {
|
|
1240
|
-
const $$a = _vm.currentValue
|
|
1241
|
-
const $$el = $event.target
|
|
1242
|
-
const $$c = !!$$el.checked
|
|
1243
|
-
if (Array.isArray($$a)) {
|
|
1244
|
-
const $$v = null
|
|
1245
|
-
const $$i = _vm._i($$a, $$v)
|
|
1246
|
-
if ($$el.checked) {
|
|
1247
|
-
$$i < 0 && (_vm.currentValue = $$a.concat([$$v]))
|
|
1248
|
-
} else {
|
|
1249
|
-
$$i > -1 &&
|
|
1250
|
-
(_vm.currentValue = $$a
|
|
1251
|
-
.slice(0, $$i)
|
|
1252
|
-
.concat($$a.slice($$i + 1)))
|
|
1253
|
-
}
|
|
1254
|
-
} else {
|
|
1255
|
-
_vm.currentValue = $$c
|
|
1256
|
-
}
|
|
1257
|
-
}
|
|
1258
|
-
}
|
|
1259
|
-
},
|
|
1260
|
-
'input',
|
|
1261
|
-
_vm.attributes,
|
|
1262
|
-
false
|
|
1263
|
-
),
|
|
1264
|
-
_vm.listeners
|
|
1265
|
-
)
|
|
1266
|
-
)
|
|
1267
|
-
: _vm.attributes.type === 'radio'
|
|
1268
|
-
? _c(
|
|
1269
|
-
'input',
|
|
1270
|
-
_vm._g(
|
|
1271
|
-
_vm._b(
|
|
1272
|
-
{
|
|
1273
|
-
directives: [
|
|
1274
|
-
{
|
|
1275
|
-
name: 'model',
|
|
1276
|
-
rawName: 'v-model',
|
|
1277
|
-
value: _vm.currentValue,
|
|
1278
|
-
expression: 'currentValue'
|
|
1279
|
-
}
|
|
1280
|
-
],
|
|
1281
|
-
ref: 'input',
|
|
1282
|
-
attrs: {
|
|
1283
|
-
'aria-label': _vm.title,
|
|
1284
|
-
'type': 'radio'
|
|
1285
|
-
},
|
|
1286
|
-
domProps: {
|
|
1287
|
-
checked: _vm._q(_vm.currentValue, null)
|
|
1288
|
-
},
|
|
1289
|
-
on: {
|
|
1290
|
-
change: function ($event) {
|
|
1291
|
-
_vm.currentValue = null
|
|
1292
|
-
}
|
|
1293
|
-
}
|
|
1294
|
-
},
|
|
1295
|
-
'input',
|
|
1296
|
-
_vm.attributes,
|
|
1297
|
-
false
|
|
1298
|
-
),
|
|
1299
|
-
_vm.listeners
|
|
1300
|
-
)
|
|
1301
|
-
)
|
|
1302
|
-
: _c(
|
|
1303
|
-
'input',
|
|
1304
|
-
_vm._g(
|
|
1305
|
-
_vm._b(
|
|
1306
|
-
{
|
|
1307
|
-
directives: [
|
|
1308
|
-
{
|
|
1309
|
-
name: 'model',
|
|
1310
|
-
rawName: 'v-model',
|
|
1311
|
-
value: _vm.currentValue,
|
|
1312
|
-
expression: 'currentValue'
|
|
1313
|
-
}
|
|
1314
|
-
],
|
|
1315
|
-
ref: 'input',
|
|
1316
|
-
attrs: {
|
|
1317
|
-
'aria-label': _vm.title,
|
|
1318
|
-
'type': _vm.attributes.type
|
|
1319
|
-
},
|
|
1320
|
-
domProps: {
|
|
1321
|
-
value: _vm.currentValue
|
|
1322
|
-
},
|
|
1323
|
-
on: {
|
|
1324
|
-
input: function ($event) {
|
|
1325
|
-
if ($event.target.composing) {
|
|
1326
|
-
return
|
|
1327
|
-
}
|
|
1328
|
-
_vm.currentValue = $event.target.value
|
|
1329
|
-
}
|
|
1330
|
-
}
|
|
1331
|
-
},
|
|
1332
|
-
'input',
|
|
1333
|
-
_vm.attributes,
|
|
1334
|
-
false
|
|
1335
|
-
),
|
|
1336
|
-
_vm.listeners
|
|
1337
|
-
)
|
|
1338
|
-
)
|
|
1339
|
-
]
|
|
1340
|
-
)
|
|
1341
|
-
}
|
|
1342
|
-
const staticRenderFns$6 = []
|
|
1343
|
-
render$6._withStripped = true
|
|
1344
|
-
const InputField_vue_vue_type_style_index_0_lang = ''
|
|
1345
|
-
const __vue2_script$7 = {
|
|
1346
|
-
props: {
|
|
1347
|
-
type: { type: String, default: 'text' },
|
|
1348
|
-
value: { type: [String, Number], default: null },
|
|
1349
|
-
id: { type: String, default: null },
|
|
1350
|
-
name: { type: String, default: null },
|
|
1351
|
-
title: { type: String, default: null },
|
|
1352
|
-
disabled: { type: Boolean, default: false },
|
|
1353
|
-
readonly: { type: Boolean, default: false },
|
|
1354
|
-
placeholder: { type: String, default: null },
|
|
1355
|
-
autocomplete: { type: String, default: 'off' }
|
|
1356
|
-
},
|
|
1357
|
-
data() {
|
|
1358
|
-
return {
|
|
1359
|
-
currentValue: this.value,
|
|
1360
|
-
hovering: false,
|
|
1361
|
-
focused: false
|
|
1362
|
-
}
|
|
1363
|
-
},
|
|
1364
|
-
computed: {
|
|
1365
|
-
attributes() {
|
|
1366
|
-
const {
|
|
1367
|
-
id,
|
|
1368
|
-
name,
|
|
1369
|
-
type,
|
|
1370
|
-
size,
|
|
1371
|
-
title,
|
|
1372
|
-
disabled,
|
|
1373
|
-
readonly,
|
|
1374
|
-
placeholder,
|
|
1375
|
-
autocomplete,
|
|
1376
|
-
$attrs
|
|
1377
|
-
} = this
|
|
1378
|
-
return {
|
|
1379
|
-
id,
|
|
1380
|
-
name,
|
|
1381
|
-
type,
|
|
1382
|
-
size,
|
|
1383
|
-
title,
|
|
1384
|
-
disabled,
|
|
1385
|
-
readonly,
|
|
1386
|
-
placeholder,
|
|
1387
|
-
autocomplete,
|
|
1388
|
-
...$attrs
|
|
1389
|
-
}
|
|
1390
|
-
},
|
|
1391
|
-
listeners() {
|
|
1392
|
-
const { input, ...listeners } = this.$listeners
|
|
1393
|
-
return listeners
|
|
1394
|
-
},
|
|
1395
|
-
size() {
|
|
1396
|
-
const { size, min, max } = this.$attrs
|
|
1397
|
-
const getLength = value => (value != null ? `${value}`.length : 0)
|
|
1398
|
-
return size || getLength(min) || getLength(max) || void 0
|
|
1399
|
-
}
|
|
1400
|
-
},
|
|
1401
|
-
watch: {
|
|
1402
|
-
value(newVal, oldVal) {
|
|
1403
|
-
if (newVal !== oldVal) {
|
|
1404
|
-
this.currentValue = newVal
|
|
1405
|
-
}
|
|
1406
|
-
},
|
|
1407
|
-
currentValue(newVal) {
|
|
1408
|
-
if (newVal !== this.value) {
|
|
1409
|
-
this.$emit('input', newVal)
|
|
1410
|
-
}
|
|
1411
|
-
}
|
|
1412
|
-
},
|
|
1413
|
-
methods: {
|
|
1414
|
-
focus() {
|
|
1415
|
-
this.$refs.input.focus()
|
|
1416
|
-
},
|
|
1417
|
-
blur() {
|
|
1418
|
-
this.$refs.input.blur()
|
|
1419
|
-
}
|
|
1420
|
-
}
|
|
1421
|
-
}
|
|
1422
|
-
const __cssModules$7 = {}
|
|
1423
|
-
const __component__$7 = /* @__PURE__ */ normalizeComponent(
|
|
1424
|
-
__vue2_script$7,
|
|
1425
|
-
render$6,
|
|
1426
|
-
staticRenderFns$6,
|
|
1427
|
-
false,
|
|
1428
|
-
__vue2_injectStyles$7,
|
|
1429
|
-
null,
|
|
1430
|
-
null,
|
|
1431
|
-
null
|
|
1432
|
-
)
|
|
1433
|
-
function __vue2_injectStyles$7(context) {
|
|
1434
|
-
for (const o in __cssModules$7) {
|
|
1435
|
-
this[o] = __cssModules$7[o]
|
|
1436
|
-
}
|
|
1437
|
-
}
|
|
1438
|
-
__component__$7.options.__file = 'src/components/InputField.vue'
|
|
1439
|
-
const InputField = /* @__PURE__ */ (function () {
|
|
1440
|
-
return __component__$7.exports
|
|
1441
|
-
})()
|
|
1442
|
-
const render$5 = function () {
|
|
1443
|
-
const _vm = this
|
|
1444
|
-
const _h = _vm.$createElement
|
|
1445
|
-
const _c = _vm._self._c || _h
|
|
1446
|
-
return _c(
|
|
1447
|
-
'trigger',
|
|
1448
|
-
_vm._b(
|
|
1449
|
-
{
|
|
1450
|
-
ref: 'trigger',
|
|
1451
|
-
staticClass: 'dito-date-picker',
|
|
1452
|
-
attrs: {
|
|
1453
|
-
trigger: 'click',
|
|
1454
|
-
show: _vm.showPopup
|
|
1455
|
-
},
|
|
1456
|
-
on: {
|
|
1457
|
-
'update:show': function ($event) {
|
|
1458
|
-
_vm.showPopup = $event
|
|
1459
|
-
}
|
|
1460
|
-
}
|
|
1461
|
-
},
|
|
1462
|
-
'trigger',
|
|
1463
|
-
{
|
|
1464
|
-
transition: _vm.transition,
|
|
1465
|
-
placement: _vm.placement,
|
|
1466
|
-
disabled: _vm.disabled,
|
|
1467
|
-
target: _vm.target
|
|
1468
|
-
},
|
|
1469
|
-
false
|
|
1470
|
-
),
|
|
1471
|
-
[
|
|
1472
|
-
_c(
|
|
1473
|
-
'input-field',
|
|
1474
|
-
_vm._b(
|
|
1475
|
-
{
|
|
1476
|
-
ref: 'input',
|
|
1477
|
-
staticClass: 'dito-date-picker-input',
|
|
1478
|
-
class: {
|
|
1479
|
-
'dito-focus': _vm.showPopup
|
|
1480
|
-
},
|
|
1481
|
-
attrs: {
|
|
1482
|
-
slot: 'trigger',
|
|
1483
|
-
type: 'text',
|
|
1484
|
-
value: _vm.currentText,
|
|
1485
|
-
readonly: ''
|
|
1486
|
-
},
|
|
1487
|
-
on: {
|
|
1488
|
-
focus: function ($event) {
|
|
1489
|
-
_vm.inputFocused = true
|
|
1490
|
-
},
|
|
1491
|
-
blur: function ($event) {
|
|
1492
|
-
_vm.inputFocused = false
|
|
1493
|
-
},
|
|
1494
|
-
keydown: _vm.onKeyDown
|
|
1495
|
-
},
|
|
1496
|
-
slot: 'trigger'
|
|
1497
|
-
},
|
|
1498
|
-
'input-field',
|
|
1499
|
-
{
|
|
1500
|
-
placeholder: _vm.placeholder,
|
|
1501
|
-
disabled: _vm.disabled
|
|
1502
|
-
},
|
|
1503
|
-
false
|
|
1504
|
-
)
|
|
1505
|
-
),
|
|
1506
|
-
_c(
|
|
1507
|
-
'calendar',
|
|
1508
|
-
_vm._b(
|
|
1509
|
-
{
|
|
1510
|
-
ref: 'calendar',
|
|
1511
|
-
staticClass: 'dito-date-picker-popup',
|
|
1512
|
-
attrs: {
|
|
1513
|
-
slot: 'popup',
|
|
1514
|
-
value: _vm.currentValue
|
|
1515
|
-
},
|
|
1516
|
-
on: {
|
|
1517
|
-
input: _vm.selectDate
|
|
1518
|
-
},
|
|
1519
|
-
slot: 'popup'
|
|
1520
|
-
},
|
|
1521
|
-
'calendar',
|
|
1522
|
-
{
|
|
1523
|
-
locale: _vm.locale,
|
|
1524
|
-
disabledDate: _vm.disabledDate
|
|
1525
|
-
},
|
|
1526
|
-
false
|
|
1527
|
-
)
|
|
1528
|
-
)
|
|
1529
|
-
],
|
|
1530
|
-
1
|
|
1531
|
-
)
|
|
1532
|
-
}
|
|
1533
|
-
const staticRenderFns$5 = []
|
|
1534
|
-
render$5._withStripped = true
|
|
1535
|
-
const DatePicker_vue_vue_type_style_index_0_lang = ''
|
|
1536
|
-
const __vue2_script$6 = {
|
|
1537
|
-
components: { Trigger, Calendar, InputField },
|
|
1538
|
-
props: {
|
|
1539
|
-
value: { type: Date, default: null },
|
|
1540
|
-
transition: { type: String, default: 'slide' },
|
|
1541
|
-
placement: { type: String, default: 'bottom-left' },
|
|
1542
|
-
placeholder: { type: String, default: null },
|
|
1543
|
-
locale: { type: String, default: 'en-US' },
|
|
1544
|
-
dateFormat: { type: Object, default: () => utils.defaultFormats.date },
|
|
1545
|
-
show: { type: Boolean, default: false },
|
|
1546
|
-
disabled: { type: Boolean, default: false },
|
|
1547
|
-
target: { type: [String, HTMLElement], default: 'trigger' },
|
|
1548
|
-
disabledDate: { type: Function, default: () => false }
|
|
1549
|
-
},
|
|
1550
|
-
data() {
|
|
1551
|
-
return {
|
|
1552
|
-
currentValue: this.value,
|
|
1553
|
-
showPopup: this.show,
|
|
1554
|
-
inputFocused: false,
|
|
1555
|
-
changed: false
|
|
1556
|
-
}
|
|
1557
|
-
},
|
|
1558
|
-
computed: {
|
|
1559
|
-
focused() {
|
|
1560
|
-
return this.inputFocused || this.showPopup
|
|
1561
|
-
},
|
|
1562
|
-
currentText() {
|
|
1563
|
-
return (
|
|
1564
|
-
utils.format(this.currentValue, {
|
|
1565
|
-
locale: this.locale,
|
|
1566
|
-
date: this.dateFormat,
|
|
1567
|
-
time: false
|
|
1568
|
-
}) || ''
|
|
1569
|
-
)
|
|
1570
|
-
}
|
|
1571
|
-
},
|
|
1572
|
-
watch: {
|
|
1573
|
-
value(newVal, oldVal) {
|
|
1574
|
-
if (+newVal !== +oldVal) {
|
|
1575
|
-
this.currentValue = newVal
|
|
1576
|
-
}
|
|
1577
|
-
},
|
|
1578
|
-
currentValue(date) {
|
|
1579
|
-
if (+date !== +this.value) {
|
|
1580
|
-
this.changed = true
|
|
1581
|
-
this.$emit('input', date)
|
|
1582
|
-
}
|
|
1583
|
-
},
|
|
1584
|
-
show(show) {
|
|
1585
|
-
this.showPopup = show
|
|
1586
|
-
},
|
|
1587
|
-
showPopup(newVal, oldVal) {
|
|
1588
|
-
if (!newVal !== !oldVal) {
|
|
1589
|
-
this.$emit('update:show', newVal)
|
|
1590
|
-
}
|
|
1591
|
-
},
|
|
1592
|
-
focused(newVal, oldVal) {
|
|
1593
|
-
if (!newVal !== !oldVal) {
|
|
1594
|
-
this.$emit(newVal ? 'focus' : 'blur')
|
|
1595
|
-
}
|
|
1596
|
-
}
|
|
1597
|
-
},
|
|
1598
|
-
mounted() {
|
|
1599
|
-
this.$on('blur', () => {
|
|
1600
|
-
if (this.changed) {
|
|
1601
|
-
this.changed = false
|
|
1602
|
-
this.$emit('change', this.currentValue)
|
|
1603
|
-
}
|
|
1604
|
-
})
|
|
1605
|
-
},
|
|
1606
|
-
methods: {
|
|
1607
|
-
selectDate(date) {
|
|
1608
|
-
this.currentValue = date
|
|
1609
|
-
this.showPopup = false
|
|
1610
|
-
},
|
|
1611
|
-
onKeyDown(event) {
|
|
1612
|
-
let _a
|
|
1613
|
-
if (
|
|
1614
|
-
(_a = this.$refs.calendar) == null
|
|
1615
|
-
? void 0
|
|
1616
|
-
: _a.navigate(getKeyNavigation(event))
|
|
1617
|
-
) {
|
|
1618
|
-
event.preventDefault()
|
|
1619
|
-
}
|
|
1620
|
-
},
|
|
1621
|
-
focus() {
|
|
1622
|
-
this.$refs.input.focus()
|
|
1623
|
-
},
|
|
1624
|
-
blur() {
|
|
1625
|
-
this.$refs.input.blur()
|
|
1626
|
-
}
|
|
1627
|
-
}
|
|
1628
|
-
}
|
|
1629
|
-
const __cssModules$6 = {}
|
|
1630
|
-
const __component__$6 = /* @__PURE__ */ normalizeComponent(
|
|
1631
|
-
__vue2_script$6,
|
|
1632
|
-
render$5,
|
|
1633
|
-
staticRenderFns$5,
|
|
1634
|
-
false,
|
|
1635
|
-
__vue2_injectStyles$6,
|
|
1636
|
-
null,
|
|
1637
|
-
null,
|
|
1638
|
-
null
|
|
1639
|
-
)
|
|
1640
|
-
function __vue2_injectStyles$6(context) {
|
|
1641
|
-
for (const o in __cssModules$6) {
|
|
1642
|
-
this[o] = __cssModules$6[o]
|
|
1643
|
-
}
|
|
1644
|
-
}
|
|
1645
|
-
__component__$6.options.__file = 'src/components/DatePicker.vue'
|
|
1646
|
-
const DatePicker = /* @__PURE__ */ (function () {
|
|
1647
|
-
return __component__$6.exports
|
|
1648
|
-
})()
|
|
1649
|
-
const render$4 = function () {
|
|
1650
|
-
const _vm = this
|
|
1651
|
-
const _h = _vm.$createElement
|
|
1652
|
-
const _c = _vm._self._c || _h
|
|
1653
|
-
return _c(
|
|
1654
|
-
'trigger',
|
|
1655
|
-
_vm._b(
|
|
1656
|
-
{
|
|
1657
|
-
ref: 'trigger',
|
|
1658
|
-
staticClass: 'dito-time-picker',
|
|
1659
|
-
attrs: {
|
|
1660
|
-
trigger: 'click',
|
|
1661
|
-
show: _vm.showPopup
|
|
1662
|
-
},
|
|
1663
|
-
on: {
|
|
1664
|
-
'update:show': function ($event) {
|
|
1665
|
-
_vm.showPopup = $event
|
|
1666
|
-
}
|
|
1667
|
-
}
|
|
1668
|
-
},
|
|
1669
|
-
'trigger',
|
|
1670
|
-
{
|
|
1671
|
-
transition: _vm.transition,
|
|
1672
|
-
placement: _vm.placement,
|
|
1673
|
-
disabled: _vm.disabled,
|
|
1674
|
-
target: _vm.target
|
|
1675
|
-
},
|
|
1676
|
-
false
|
|
1677
|
-
),
|
|
1678
|
-
[
|
|
1679
|
-
_c(
|
|
1680
|
-
'input-field',
|
|
1681
|
-
_vm._b(
|
|
1682
|
-
{
|
|
1683
|
-
ref: 'input',
|
|
1684
|
-
staticClass: 'dito-time-picker-input',
|
|
1685
|
-
class: {
|
|
1686
|
-
'dito-focus': _vm.showPopup
|
|
1687
|
-
},
|
|
1688
|
-
attrs: {
|
|
1689
|
-
slot: 'trigger',
|
|
1690
|
-
type: 'text',
|
|
1691
|
-
value: _vm.currentText,
|
|
1692
|
-
readonly: ''
|
|
1693
|
-
},
|
|
1694
|
-
on: {
|
|
1695
|
-
focus: function ($event) {
|
|
1696
|
-
_vm.inputFocused = true
|
|
1697
|
-
},
|
|
1698
|
-
blur: function ($event) {
|
|
1699
|
-
_vm.inputFocused = false
|
|
1700
|
-
},
|
|
1701
|
-
keydown: _vm.onKeyDown
|
|
1702
|
-
},
|
|
1703
|
-
slot: 'trigger'
|
|
1704
|
-
},
|
|
1705
|
-
'input-field',
|
|
1706
|
-
{
|
|
1707
|
-
placeholder: _vm.placeholder,
|
|
1708
|
-
disabled: _vm.disabled
|
|
1709
|
-
},
|
|
1710
|
-
false
|
|
1711
|
-
)
|
|
1712
|
-
),
|
|
1713
|
-
_c(
|
|
1714
|
-
'div',
|
|
1715
|
-
{
|
|
1716
|
-
staticClass: 'dito-time-picker-popup',
|
|
1717
|
-
attrs: {
|
|
1718
|
-
slot: 'popup'
|
|
1719
|
-
},
|
|
1720
|
-
slot: 'popup'
|
|
1721
|
-
},
|
|
1722
|
-
[
|
|
1723
|
-
_c(
|
|
1724
|
-
'div',
|
|
1725
|
-
{
|
|
1726
|
-
staticClass: 'dito-time-picker-panel'
|
|
1727
|
-
},
|
|
1728
|
-
[
|
|
1729
|
-
_c(
|
|
1730
|
-
'ul',
|
|
1731
|
-
{
|
|
1732
|
-
ref: 'hour',
|
|
1733
|
-
staticClass: 'dito-time-picker-hour',
|
|
1734
|
-
on: {
|
|
1735
|
-
mouseover: function ($event) {
|
|
1736
|
-
_vm.selection = 0
|
|
1737
|
-
}
|
|
1738
|
-
}
|
|
1739
|
-
},
|
|
1740
|
-
_vm._l(24, function (index2) {
|
|
1741
|
-
return !_vm.disabledHour(index2 - 1)
|
|
1742
|
-
? _c(
|
|
1743
|
-
'li',
|
|
1744
|
-
{
|
|
1745
|
-
class: {
|
|
1746
|
-
selected: _vm.hour === index2 - 1
|
|
1747
|
-
},
|
|
1748
|
-
on: {
|
|
1749
|
-
click: function ($event) {
|
|
1750
|
-
_vm.hour = index2 - 1
|
|
1751
|
-
}
|
|
1752
|
-
}
|
|
1753
|
-
},
|
|
1754
|
-
[_vm._v(_vm._s(_vm.leftPad(index2 - 1)))]
|
|
1755
|
-
)
|
|
1756
|
-
: _vm._e()
|
|
1757
|
-
}),
|
|
1758
|
-
0
|
|
1759
|
-
)
|
|
1760
|
-
]
|
|
1761
|
-
),
|
|
1762
|
-
_c(
|
|
1763
|
-
'div',
|
|
1764
|
-
{
|
|
1765
|
-
staticClass: 'dito-time-picker-panel'
|
|
1766
|
-
},
|
|
1767
|
-
[
|
|
1768
|
-
_c(
|
|
1769
|
-
'ul',
|
|
1770
|
-
{
|
|
1771
|
-
ref: 'minute',
|
|
1772
|
-
staticClass: 'dito-time-picker-minute',
|
|
1773
|
-
on: {
|
|
1774
|
-
mouseover: function ($event) {
|
|
1775
|
-
_vm.selection = 1
|
|
1776
|
-
}
|
|
1777
|
-
}
|
|
1778
|
-
},
|
|
1779
|
-
_vm._l(60, function (index2) {
|
|
1780
|
-
return !_vm.disabledMinute(index2 - 1)
|
|
1781
|
-
? _c(
|
|
1782
|
-
'li',
|
|
1783
|
-
{
|
|
1784
|
-
class: {
|
|
1785
|
-
selected: _vm.minute === index2 - 1
|
|
1786
|
-
},
|
|
1787
|
-
on: {
|
|
1788
|
-
click: function ($event) {
|
|
1789
|
-
_vm.minute = index2 - 1
|
|
1790
|
-
}
|
|
1791
|
-
}
|
|
1792
|
-
},
|
|
1793
|
-
[_vm._v(_vm._s(_vm.leftPad(index2 - 1)))]
|
|
1794
|
-
)
|
|
1795
|
-
: _vm._e()
|
|
1796
|
-
}),
|
|
1797
|
-
0
|
|
1798
|
-
)
|
|
1799
|
-
]
|
|
1800
|
-
),
|
|
1801
|
-
_c(
|
|
1802
|
-
'div',
|
|
1803
|
-
{
|
|
1804
|
-
staticClass: 'dito-time-picker-panel'
|
|
1805
|
-
},
|
|
1806
|
-
[
|
|
1807
|
-
_c(
|
|
1808
|
-
'ul',
|
|
1809
|
-
{
|
|
1810
|
-
ref: 'second',
|
|
1811
|
-
staticClass: 'dito-time-picker-second',
|
|
1812
|
-
on: {
|
|
1813
|
-
mouseover: function ($event) {
|
|
1814
|
-
_vm.selection = 2
|
|
1815
|
-
}
|
|
1816
|
-
}
|
|
1817
|
-
},
|
|
1818
|
-
_vm._l(60, function (index2) {
|
|
1819
|
-
return !_vm.disabledSecond(index2 - 1)
|
|
1820
|
-
? _c(
|
|
1821
|
-
'li',
|
|
1822
|
-
{
|
|
1823
|
-
class: {
|
|
1824
|
-
selected: _vm.second === index2 - 1
|
|
1825
|
-
},
|
|
1826
|
-
on: {
|
|
1827
|
-
click: function ($event) {
|
|
1828
|
-
_vm.second = index2 - 1
|
|
1829
|
-
}
|
|
1830
|
-
}
|
|
1831
|
-
},
|
|
1832
|
-
[_vm._v(_vm._s(_vm.leftPad(index2 - 1)))]
|
|
1833
|
-
)
|
|
1834
|
-
: _vm._e()
|
|
1835
|
-
}),
|
|
1836
|
-
0
|
|
1837
|
-
)
|
|
1838
|
-
]
|
|
1839
|
-
)
|
|
1840
|
-
]
|
|
1841
|
-
)
|
|
1842
|
-
],
|
|
1843
|
-
1
|
|
1844
|
-
)
|
|
1845
|
-
}
|
|
1846
|
-
const staticRenderFns$4 = []
|
|
1847
|
-
render$4._withStripped = true
|
|
1848
|
-
const TimePicker_vue_vue_type_style_index_0_lang = ''
|
|
1849
|
-
const __vue2_script$5 = {
|
|
1850
|
-
components: { Trigger, InputField },
|
|
1851
|
-
props: {
|
|
1852
|
-
value: { type: Date, default: null },
|
|
1853
|
-
transition: { type: String, default: 'slide' },
|
|
1854
|
-
placement: { type: String, default: 'bottom-left' },
|
|
1855
|
-
placeholder: { type: String, default: null },
|
|
1856
|
-
show: { type: Boolean, default: false },
|
|
1857
|
-
disabled: { type: Boolean, default: false },
|
|
1858
|
-
target: { type: [String, HTMLElement], default: 'trigger' },
|
|
1859
|
-
disabledHour: { type: Function, default: () => false },
|
|
1860
|
-
disabledMinute: { type: Function, default: () => false },
|
|
1861
|
-
disabledSecond: { type: Function, default: () => false }
|
|
1862
|
-
},
|
|
1863
|
-
data() {
|
|
1864
|
-
return {
|
|
1865
|
-
currentValue: this.value,
|
|
1866
|
-
showPopup: this.show,
|
|
1867
|
-
inputFocused: false,
|
|
1868
|
-
selection: 0,
|
|
1869
|
-
changed: false
|
|
1870
|
-
}
|
|
1871
|
-
},
|
|
1872
|
-
computed: {
|
|
1873
|
-
focused() {
|
|
1874
|
-
return this.inputFocused || this.showPopup
|
|
1875
|
-
},
|
|
1876
|
-
currentText() {
|
|
1877
|
-
return this.currentValue
|
|
1878
|
-
? `${this.leftPad(this.hour)}:${this.leftPad(this.minute)}:${
|
|
1879
|
-
this.leftPad(this.second)
|
|
1880
|
-
}`
|
|
1881
|
-
: ''
|
|
1882
|
-
},
|
|
1883
|
-
currentDate() {
|
|
1884
|
-
return (
|
|
1885
|
-
this.currentValue ||
|
|
1886
|
-
copyDate(new Date(), { hour: 0, minute: 0, second: 0 })
|
|
1887
|
-
)
|
|
1888
|
-
},
|
|
1889
|
-
hour: {
|
|
1890
|
-
get() {
|
|
1891
|
-
return this.currentDate.getHours()
|
|
1892
|
-
},
|
|
1893
|
-
set(hour) {
|
|
1894
|
-
this.setTime({ hour })
|
|
1895
|
-
}
|
|
1896
|
-
},
|
|
1897
|
-
minute: {
|
|
1898
|
-
get() {
|
|
1899
|
-
return this.currentDate.getMinutes()
|
|
1900
|
-
},
|
|
1901
|
-
set(minute) {
|
|
1902
|
-
this.setTime({ minute })
|
|
1903
|
-
}
|
|
1904
|
-
},
|
|
1905
|
-
second: {
|
|
1906
|
-
get() {
|
|
1907
|
-
return this.currentDate.getSeconds()
|
|
1908
|
-
},
|
|
1909
|
-
set(second) {
|
|
1910
|
-
this.setTime({ second })
|
|
1911
|
-
}
|
|
1912
|
-
}
|
|
1913
|
-
},
|
|
1914
|
-
watch: {
|
|
1915
|
-
value(newVal, oldVal) {
|
|
1916
|
-
if (+newVal !== +oldVal) {
|
|
1917
|
-
this.currentValue = newVal
|
|
1918
|
-
}
|
|
1919
|
-
},
|
|
1920
|
-
currentValue(date) {
|
|
1921
|
-
if (+date !== +this.value) {
|
|
1922
|
-
this.changed = true
|
|
1923
|
-
this.$emit('input', date)
|
|
1924
|
-
this.scrollAll()
|
|
1925
|
-
}
|
|
1926
|
-
},
|
|
1927
|
-
currentText: 'updateSelection',
|
|
1928
|
-
selection: 'updateSelection',
|
|
1929
|
-
show(show) {
|
|
1930
|
-
this.showPopup = show
|
|
1931
|
-
},
|
|
1932
|
-
showPopup(newVal, oldVal) {
|
|
1933
|
-
if (newVal) {
|
|
1934
|
-
this.updateSelection()
|
|
1935
|
-
this.scrollAll(0)
|
|
1936
|
-
}
|
|
1937
|
-
if (!newVal !== !oldVal) {
|
|
1938
|
-
this.$emit('update:show', newVal)
|
|
1939
|
-
}
|
|
1940
|
-
},
|
|
1941
|
-
focused(newVal, oldVal) {
|
|
1942
|
-
if (!newVal !== !oldVal) {
|
|
1943
|
-
this.$emit(newVal ? 'focus' : 'blur')
|
|
1944
|
-
}
|
|
1945
|
-
}
|
|
1946
|
-
},
|
|
1947
|
-
mounted() {
|
|
1948
|
-
this.$on('blur', () => {
|
|
1949
|
-
if (this.changed) {
|
|
1950
|
-
this.changed = false
|
|
1951
|
-
this.$emit('change', this.currentValue)
|
|
1952
|
-
}
|
|
1953
|
-
})
|
|
1954
|
-
},
|
|
1955
|
-
methods: {
|
|
1956
|
-
leftPad(value) {
|
|
1957
|
-
return ('0' + value).slice(-2)
|
|
1958
|
-
},
|
|
1959
|
-
setTime(param) {
|
|
1960
|
-
this.currentValue = copyDate(this.currentDate, param)
|
|
1961
|
-
},
|
|
1962
|
-
updateSelection(force = false) {
|
|
1963
|
-
if (this.showPopup || force) {
|
|
1964
|
-
const start = 3 * this.selection
|
|
1965
|
-
this.$nextTick(() => setSelection(this.$refs.input, start, start + 2))
|
|
1966
|
-
}
|
|
1967
|
-
},
|
|
1968
|
-
scrollAll(duration = 100) {
|
|
1969
|
-
const scroll = (ref, value) => {
|
|
1970
|
-
const target = this.$refs[ref]
|
|
1971
|
-
if (target) {
|
|
1972
|
-
const lineHeight = (
|
|
1973
|
-
target.scrollHeight /
|
|
1974
|
-
(target.children.length + 6)
|
|
1975
|
-
)
|
|
1976
|
-
scrollTo(target, Math.round(value * lineHeight), duration)
|
|
1977
|
-
}
|
|
1978
|
-
}
|
|
1979
|
-
this.$nextTick(() => {
|
|
1980
|
-
scroll('hour', this.hour)
|
|
1981
|
-
scroll('minute', this.minute)
|
|
1982
|
-
scroll('second', this.second)
|
|
1983
|
-
})
|
|
1984
|
-
},
|
|
1985
|
-
onKeyDown(event) {
|
|
1986
|
-
const selected = ['hour', 'minute', 'second'][this.selection]
|
|
1987
|
-
if (selected) {
|
|
1988
|
-
const { hor, ver, enter } = getKeyNavigation(event)
|
|
1989
|
-
if (hor) {
|
|
1990
|
-
const value = this.selection + hor
|
|
1991
|
-
this.selection = value < 0 ? 2 : value > 2 ? 0 : value
|
|
1992
|
-
} else if (ver) {
|
|
1993
|
-
const value = this[selected] + ver
|
|
1994
|
-
const { length } = this.$refs[selected].children
|
|
1995
|
-
this[selected] =
|
|
1996
|
-
value < 0
|
|
1997
|
-
? value + length
|
|
1998
|
-
: value >= length
|
|
1999
|
-
? value - length
|
|
2000
|
-
: value
|
|
2001
|
-
}
|
|
2002
|
-
if (enter) {
|
|
2003
|
-
this.showPopup = false
|
|
2004
|
-
}
|
|
2005
|
-
if (hor || ver || enter) {
|
|
2006
|
-
this.updateSelection(true)
|
|
2007
|
-
event.preventDefault()
|
|
2008
|
-
}
|
|
2009
|
-
}
|
|
2010
|
-
},
|
|
2011
|
-
focus() {
|
|
2012
|
-
this.$refs.input.focus()
|
|
2013
|
-
},
|
|
2014
|
-
blur() {
|
|
2015
|
-
this.$refs.input.blur()
|
|
2016
|
-
}
|
|
2017
|
-
}
|
|
2018
|
-
}
|
|
2019
|
-
const __cssModules$5 = {}
|
|
2020
|
-
const __component__$5 = /* @__PURE__ */ normalizeComponent(
|
|
2021
|
-
__vue2_script$5,
|
|
2022
|
-
render$4,
|
|
2023
|
-
staticRenderFns$4,
|
|
2024
|
-
false,
|
|
2025
|
-
__vue2_injectStyles$5,
|
|
2026
|
-
null,
|
|
2027
|
-
null,
|
|
2028
|
-
null
|
|
2029
|
-
)
|
|
2030
|
-
function __vue2_injectStyles$5(context) {
|
|
2031
|
-
for (const o in __cssModules$5) {
|
|
2032
|
-
this[o] = __cssModules$5[o]
|
|
2033
|
-
}
|
|
2034
|
-
}
|
|
2035
|
-
__component__$5.options.__file = 'src/components/TimePicker.vue'
|
|
2036
|
-
const TimePicker = /* @__PURE__ */ (function () {
|
|
2037
|
-
return __component__$5.exports
|
|
2038
|
-
})()
|
|
2039
|
-
const render$3 = function () {
|
|
2040
|
-
const _vm = this
|
|
2041
|
-
const _h = _vm.$createElement
|
|
2042
|
-
const _c = _vm._self._c || _h
|
|
2043
|
-
return _c(
|
|
2044
|
-
'div',
|
|
2045
|
-
{
|
|
2046
|
-
ref: 'picker',
|
|
2047
|
-
staticClass: 'dito-date-time-picker'
|
|
2048
|
-
},
|
|
2049
|
-
[
|
|
2050
|
-
_c(
|
|
2051
|
-
'div',
|
|
2052
|
-
{
|
|
2053
|
-
staticClass: 'dito-pickers',
|
|
2054
|
-
class: {
|
|
2055
|
-
'dito-focus': _vm.focused
|
|
2056
|
-
}
|
|
2057
|
-
},
|
|
2058
|
-
[
|
|
2059
|
-
_c(
|
|
2060
|
-
'date-picker',
|
|
2061
|
-
_vm._b(
|
|
2062
|
-
{
|
|
2063
|
-
ref: 'date',
|
|
2064
|
-
attrs: {
|
|
2065
|
-
placement: 'bottom-left',
|
|
2066
|
-
target: _vm.$refs.picker,
|
|
2067
|
-
show: _vm.showDate
|
|
2068
|
-
},
|
|
2069
|
-
on: {
|
|
2070
|
-
'update:show': function ($event) {
|
|
2071
|
-
_vm.showDate = $event
|
|
2072
|
-
},
|
|
2073
|
-
'focus': function ($event) {
|
|
2074
|
-
_vm.dateFocused = true
|
|
2075
|
-
},
|
|
2076
|
-
'blur': function ($event) {
|
|
2077
|
-
_vm.dateFocused = false
|
|
2078
|
-
}
|
|
2079
|
-
},
|
|
2080
|
-
model: {
|
|
2081
|
-
value: _vm.currentValue,
|
|
2082
|
-
callback: function ($$v) {
|
|
2083
|
-
_vm.currentValue = $$v
|
|
2084
|
-
},
|
|
2085
|
-
expression: 'currentValue'
|
|
2086
|
-
}
|
|
2087
|
-
},
|
|
2088
|
-
'date-picker',
|
|
2089
|
-
{
|
|
2090
|
-
transition: _vm.transition,
|
|
2091
|
-
placeholder: _vm.placeholder,
|
|
2092
|
-
locale: _vm.locale,
|
|
2093
|
-
dateFormat: _vm.dateFormat,
|
|
2094
|
-
disabled: _vm.disabled
|
|
2095
|
-
},
|
|
2096
|
-
false
|
|
2097
|
-
)
|
|
2098
|
-
),
|
|
2099
|
-
_c(
|
|
2100
|
-
'time-picker',
|
|
2101
|
-
_vm._b(
|
|
2102
|
-
{
|
|
2103
|
-
ref: 'time',
|
|
2104
|
-
attrs: {
|
|
2105
|
-
placeholder: '',
|
|
2106
|
-
placement: 'bottom-right',
|
|
2107
|
-
target: _vm.$refs.picker,
|
|
2108
|
-
show: _vm.showTime
|
|
2109
|
-
},
|
|
2110
|
-
on: {
|
|
2111
|
-
'update:show': function ($event) {
|
|
2112
|
-
_vm.showTime = $event
|
|
2113
|
-
},
|
|
2114
|
-
'focus': function ($event) {
|
|
2115
|
-
_vm.timeFocused = true
|
|
2116
|
-
},
|
|
2117
|
-
'blur': function ($event) {
|
|
2118
|
-
_vm.timeFocused = false
|
|
2119
|
-
}
|
|
2120
|
-
},
|
|
2121
|
-
model: {
|
|
2122
|
-
value: _vm.currentValue,
|
|
2123
|
-
callback: function ($$v) {
|
|
2124
|
-
_vm.currentValue = $$v
|
|
2125
|
-
},
|
|
2126
|
-
expression: 'currentValue'
|
|
2127
|
-
}
|
|
2128
|
-
},
|
|
2129
|
-
'time-picker',
|
|
2130
|
-
{
|
|
2131
|
-
transition: _vm.transition,
|
|
2132
|
-
disabled: _vm.disabled
|
|
2133
|
-
},
|
|
2134
|
-
false
|
|
2135
|
-
)
|
|
2136
|
-
)
|
|
2137
|
-
],
|
|
2138
|
-
1
|
|
2139
|
-
)
|
|
2140
|
-
]
|
|
2141
|
-
)
|
|
2142
|
-
}
|
|
2143
|
-
const staticRenderFns$3 = []
|
|
2144
|
-
render$3._withStripped = true
|
|
2145
|
-
const DateTimePicker_vue_vue_type_style_index_0_lang = ''
|
|
2146
|
-
const __vue2_script$4 = {
|
|
2147
|
-
components: { DatePicker, TimePicker },
|
|
2148
|
-
props: {
|
|
2149
|
-
value: { type: Date, default: null },
|
|
2150
|
-
transition: { type: String, default: 'slide' },
|
|
2151
|
-
placeholder: { type: String, default: null },
|
|
2152
|
-
dateFormat: { type: Object, default: () => utils.defaultFormats.date },
|
|
2153
|
-
locale: { type: String, default: 'en-US' },
|
|
2154
|
-
disabled: { type: Boolean, default: false }
|
|
2155
|
-
},
|
|
2156
|
-
data() {
|
|
2157
|
-
return {
|
|
2158
|
-
currentValue: this.value,
|
|
2159
|
-
showDate: false,
|
|
2160
|
-
showTime: false,
|
|
2161
|
-
dateFocused: false,
|
|
2162
|
-
timeFocused: false,
|
|
2163
|
-
changed: false
|
|
2164
|
-
}
|
|
2165
|
-
},
|
|
2166
|
-
computed: {
|
|
2167
|
-
focused() {
|
|
2168
|
-
return this.dateFocused || this.timeFocused
|
|
2169
|
-
}
|
|
2170
|
-
},
|
|
2171
|
-
watch: {
|
|
2172
|
-
value(newVal, oldVal) {
|
|
2173
|
-
if (+newVal !== +oldVal) {
|
|
2174
|
-
this.currentValue = newVal
|
|
2175
|
-
}
|
|
2176
|
-
},
|
|
2177
|
-
currentValue(date) {
|
|
2178
|
-
if (+date !== +this.value) {
|
|
2179
|
-
this.changed = true
|
|
2180
|
-
this.$emit('input', date)
|
|
2181
|
-
}
|
|
2182
|
-
},
|
|
2183
|
-
focused(newVal, oldVal) {
|
|
2184
|
-
if (!newVal !== !oldVal) {
|
|
2185
|
-
this.$emit(newVal ? 'focus' : 'blur')
|
|
2186
|
-
}
|
|
2187
|
-
}
|
|
2188
|
-
},
|
|
2189
|
-
mounted() {
|
|
2190
|
-
this.$on('blur', () => {
|
|
2191
|
-
if (this.changed) {
|
|
2192
|
-
this.changed = false
|
|
2193
|
-
this.$emit('change', this.currentValue)
|
|
2194
|
-
}
|
|
2195
|
-
})
|
|
2196
|
-
},
|
|
2197
|
-
methods: {
|
|
2198
|
-
focus() {
|
|
2199
|
-
this.$refs.date.focus()
|
|
2200
|
-
},
|
|
2201
|
-
blur() {
|
|
2202
|
-
this.$refs.date.blur()
|
|
2203
|
-
this.$refs.time.blur()
|
|
2204
|
-
}
|
|
2205
|
-
}
|
|
2206
|
-
}
|
|
2207
|
-
const __cssModules$4 = {}
|
|
2208
|
-
const __component__$4 = /* @__PURE__ */ normalizeComponent(
|
|
2209
|
-
__vue2_script$4,
|
|
2210
|
-
render$3,
|
|
2211
|
-
staticRenderFns$3,
|
|
2212
|
-
false,
|
|
2213
|
-
__vue2_injectStyles$4,
|
|
2214
|
-
null,
|
|
2215
|
-
null,
|
|
2216
|
-
null
|
|
2217
|
-
)
|
|
2218
|
-
function __vue2_injectStyles$4(context) {
|
|
2219
|
-
for (const o in __cssModules$4) {
|
|
2220
|
-
this[o] = __cssModules$4[o]
|
|
2221
|
-
}
|
|
2222
|
-
}
|
|
2223
|
-
__component__$4.options.__file = 'src/components/DateTimePicker.vue'
|
|
2224
|
-
const DateTimePicker = /* @__PURE__ */ (function () {
|
|
2225
|
-
return __component__$4.exports
|
|
2226
|
-
})()
|
|
2227
|
-
const render$2 = function () {
|
|
2228
|
-
const _vm = this
|
|
2229
|
-
const _h = _vm.$createElement
|
|
2230
|
-
const _c = _vm._self._c || _h
|
|
2231
|
-
return _c('i', {
|
|
2232
|
-
staticClass: 'dito-icon',
|
|
2233
|
-
class: `dito-icon-${_vm.name}`
|
|
2234
|
-
})
|
|
2235
|
-
}
|
|
2236
|
-
const staticRenderFns$2 = []
|
|
2237
|
-
render$2._withStripped = true
|
|
2238
|
-
const Icon_vue_vue_type_style_index_0_lang = ''
|
|
2239
|
-
const __vue2_script$3 = {
|
|
2240
|
-
props: {
|
|
2241
|
-
name: {
|
|
2242
|
-
type: String,
|
|
2243
|
-
required: true
|
|
2244
|
-
}
|
|
2245
|
-
}
|
|
2246
|
-
}
|
|
2247
|
-
const __cssModules$3 = {}
|
|
2248
|
-
const __component__$3 = /* @__PURE__ */ normalizeComponent(
|
|
2249
|
-
__vue2_script$3,
|
|
2250
|
-
render$2,
|
|
2251
|
-
staticRenderFns$2,
|
|
2252
|
-
false,
|
|
2253
|
-
__vue2_injectStyles$3,
|
|
2254
|
-
null,
|
|
2255
|
-
null,
|
|
2256
|
-
null
|
|
2257
|
-
)
|
|
2258
|
-
function __vue2_injectStyles$3(context) {
|
|
2259
|
-
for (const o in __cssModules$3) {
|
|
2260
|
-
this[o] = __cssModules$3[o]
|
|
2261
|
-
}
|
|
2262
|
-
}
|
|
2263
|
-
__component__$3.options.__file = 'src/components/Icon.vue'
|
|
2264
|
-
const Icon = /* @__PURE__ */ (function () {
|
|
2265
|
-
return __component__$3.exports
|
|
2266
|
-
})()
|
|
2267
|
-
const render$1 = function () {
|
|
2268
|
-
const _vm = this
|
|
2269
|
-
const _h = _vm.$createElement
|
|
2270
|
-
const _c = _vm._self._c || _h
|
|
2271
|
-
return _vm.numPages > 1
|
|
2272
|
-
? _c(
|
|
2273
|
-
'div',
|
|
2274
|
-
{
|
|
2275
|
-
staticClass: 'dito-pagination'
|
|
2276
|
-
},
|
|
2277
|
-
[
|
|
2278
|
-
_vm.showTotal
|
|
2279
|
-
? _c(
|
|
2280
|
-
'div',
|
|
2281
|
-
{
|
|
2282
|
-
staticClass: 'dito-pagination-total'
|
|
2283
|
-
},
|
|
2284
|
-
[
|
|
2285
|
-
_vm.total > 0
|
|
2286
|
-
? [
|
|
2287
|
-
_vm._v(
|
|
2288
|
-
_vm._s(_vm.first) + ' \u2013 ' + _vm._s(_vm.last)
|
|
2289
|
-
)
|
|
2290
|
-
]
|
|
2291
|
-
: [_vm._v('0')],
|
|
2292
|
-
_vm._v(' / ' + _vm._s(_vm.total))
|
|
2293
|
-
],
|
|
2294
|
-
2
|
|
2295
|
-
)
|
|
2296
|
-
: _vm._e(),
|
|
2297
|
-
_c(
|
|
2298
|
-
'div',
|
|
2299
|
-
{
|
|
2300
|
-
staticClass: 'dito-buttons dito-buttons-round'
|
|
2301
|
-
},
|
|
2302
|
-
_vm._l(_vm.pageRange, function (page) {
|
|
2303
|
-
return _c(
|
|
2304
|
-
'button',
|
|
2305
|
-
{
|
|
2306
|
-
staticClass: 'dito-button',
|
|
2307
|
-
class: _vm.getPageClass(page),
|
|
2308
|
-
attrs: {
|
|
2309
|
-
disabled: page.disabled
|
|
2310
|
-
},
|
|
2311
|
-
on: {
|
|
2312
|
-
click: function ($event) {
|
|
2313
|
-
return _vm.onClickPage(page)
|
|
2314
|
-
}
|
|
2315
|
-
}
|
|
2316
|
-
},
|
|
2317
|
-
[
|
|
2318
|
-
page.text
|
|
2319
|
-
? _c('span', [_vm._v(_vm._s(page.text))])
|
|
2320
|
-
: _vm._e()
|
|
2321
|
-
]
|
|
2322
|
-
)
|
|
2323
|
-
}),
|
|
2324
|
-
0
|
|
2325
|
-
)
|
|
2326
|
-
]
|
|
2327
|
-
)
|
|
2328
|
-
: _vm._e()
|
|
2329
|
-
}
|
|
2330
|
-
const staticRenderFns$1 = []
|
|
2331
|
-
render$1._withStripped = true
|
|
2332
|
-
const Pagination_vue_vue_type_style_index_0_lang = ''
|
|
2333
|
-
const __vue2_script$2 = {
|
|
2334
|
-
props: {
|
|
2335
|
-
total: { type: Number, default: 0 },
|
|
2336
|
-
page: { type: Number, default: 1 },
|
|
2337
|
-
pageSize: { type: Number, default: 10 },
|
|
2338
|
-
showTotal: { type: Boolean, default: true }
|
|
2339
|
-
},
|
|
2340
|
-
data() {
|
|
2341
|
-
return {
|
|
2342
|
-
pageRange: [],
|
|
2343
|
-
showPrev: true,
|
|
2344
|
-
showNext: true,
|
|
2345
|
-
numPages: 0,
|
|
2346
|
-
currentPageSize: this.pageSize,
|
|
2347
|
-
currentPage: this.page
|
|
2348
|
-
}
|
|
2349
|
-
},
|
|
2350
|
-
computed: {
|
|
2351
|
-
first() {
|
|
2352
|
-
return (this.currentPage - 1) * this.currentPageSize + 1
|
|
2353
|
-
},
|
|
2354
|
-
last() {
|
|
2355
|
-
return Math.min(this.first + this.currentPageSize - 1, this.total)
|
|
2356
|
-
}
|
|
2357
|
-
},
|
|
2358
|
-
watch: {
|
|
2359
|
-
total: 'updatePageRange',
|
|
2360
|
-
showPrev: 'updatePageRange',
|
|
2361
|
-
showNext: 'updatePageRange',
|
|
2362
|
-
page(page) {
|
|
2363
|
-
this.currentPage = page
|
|
2364
|
-
},
|
|
2365
|
-
pageSize(pageSize) {
|
|
2366
|
-
this.currentPageSize = pageSize
|
|
2367
|
-
},
|
|
2368
|
-
currentPageSize(currentPageSize) {
|
|
2369
|
-
this.numPages = Math.ceil(this.total / currentPageSize)
|
|
2370
|
-
if (this.currentPage > this.numPages) {
|
|
2371
|
-
this.currentPage = this.numPages
|
|
2372
|
-
}
|
|
2373
|
-
this.updatePageRange()
|
|
2374
|
-
this.$emit('size-change', this.page, currentPageSize)
|
|
2375
|
-
},
|
|
2376
|
-
currentPage(newVal, oldVal) {
|
|
2377
|
-
if (newVal !== oldVal) {
|
|
2378
|
-
this.updatePageRange()
|
|
2379
|
-
this.$emit('update:page', newVal)
|
|
2380
|
-
}
|
|
2381
|
-
}
|
|
2382
|
-
},
|
|
2383
|
-
created() {
|
|
2384
|
-
this.currentPage = this.page
|
|
2385
|
-
this.currentPageSize = this.pageSize
|
|
2386
|
-
},
|
|
2387
|
-
mounted() {
|
|
2388
|
-
this.updatePageRange()
|
|
2389
|
-
},
|
|
2390
|
-
methods: {
|
|
2391
|
-
onClickPage(page) {
|
|
2392
|
-
if (page.index && !page.disabled && page.index !== this.currentPage) {
|
|
2393
|
-
this.currentPage = page.index
|
|
2394
|
-
}
|
|
2395
|
-
},
|
|
2396
|
-
getPageClass(page) {
|
|
2397
|
-
const classes = {
|
|
2398
|
-
'dito-selected': page.active
|
|
2399
|
-
}
|
|
2400
|
-
if (page.type) {
|
|
2401
|
-
classes[`dito-button-${page.type}`] = true
|
|
2402
|
-
}
|
|
2403
|
-
return classes
|
|
2404
|
-
},
|
|
2405
|
-
updatePageRange() {
|
|
2406
|
-
const { showPrev, showNext, total, currentPageSize, currentPage } = this
|
|
2407
|
-
const showLength = showPrev + showNext + 1
|
|
2408
|
-
const numPages = (this.numPages = Math.ceil(total / currentPageSize))
|
|
2409
|
-
let start = 1
|
|
2410
|
-
let end = 1
|
|
2411
|
-
if (numPages <= showLength) {
|
|
2412
|
-
end = numPages
|
|
2413
|
-
} else if (currentPage <= showPrev + 1) {
|
|
2414
|
-
end = showLength
|
|
2415
|
-
} else if (currentPage >= numPages - showNext) {
|
|
2416
|
-
end = numPages
|
|
2417
|
-
start = numPages - showLength + 1
|
|
2418
|
-
} else {
|
|
2419
|
-
start = currentPage - showPrev
|
|
2420
|
-
end = currentPage + showNext
|
|
2421
|
-
}
|
|
2422
|
-
const pageRange = []
|
|
2423
|
-
pageRange.push({
|
|
2424
|
-
index: currentPage - 1,
|
|
2425
|
-
type: 'prev',
|
|
2426
|
-
disabled: currentPage <= 1
|
|
2427
|
-
})
|
|
2428
|
-
if (start >= 2) {
|
|
2429
|
-
pageRange.push({ index: 1, text: 1 })
|
|
2430
|
-
}
|
|
2431
|
-
if (start > 2) {
|
|
2432
|
-
pageRange.push({
|
|
2433
|
-
index: Math.max(1, currentPage - 10),
|
|
2434
|
-
type: 'ellipsis-prev'
|
|
2435
|
-
})
|
|
2436
|
-
}
|
|
2437
|
-
for (let i = start; i <= end; i++) {
|
|
2438
|
-
pageRange.push({
|
|
2439
|
-
index: i,
|
|
2440
|
-
text: i,
|
|
2441
|
-
active: i === currentPage
|
|
2442
|
-
})
|
|
2443
|
-
}
|
|
2444
|
-
if (end < numPages - 1) {
|
|
2445
|
-
pageRange.push({
|
|
2446
|
-
index: Math.min(numPages, currentPage + 10),
|
|
2447
|
-
type: 'ellipsis-next'
|
|
2448
|
-
})
|
|
2449
|
-
}
|
|
2450
|
-
if (end <= numPages - 1) {
|
|
2451
|
-
pageRange.push({ index: numPages, text: numPages })
|
|
2452
|
-
}
|
|
2453
|
-
pageRange.push({
|
|
2454
|
-
index: currentPage + 1,
|
|
2455
|
-
type: 'next',
|
|
2456
|
-
disabled: currentPage >= numPages
|
|
2457
|
-
})
|
|
2458
|
-
this.pageRange = pageRange
|
|
2459
|
-
}
|
|
2460
|
-
}
|
|
2461
|
-
}
|
|
2462
|
-
const __cssModules$2 = {}
|
|
2463
|
-
const __component__$2 = /* @__PURE__ */ normalizeComponent(
|
|
2464
|
-
__vue2_script$2,
|
|
2465
|
-
render$1,
|
|
2466
|
-
staticRenderFns$1,
|
|
2467
|
-
false,
|
|
2468
|
-
__vue2_injectStyles$2,
|
|
2469
|
-
null,
|
|
2470
|
-
null,
|
|
2471
|
-
null
|
|
2472
|
-
)
|
|
2473
|
-
function __vue2_injectStyles$2(context) {
|
|
2474
|
-
for (const o in __cssModules$2) {
|
|
2475
|
-
this[o] = __cssModules$2[o]
|
|
2476
|
-
}
|
|
2477
|
-
}
|
|
2478
|
-
__component__$2.options.__file = 'src/components/Pagination.vue'
|
|
2479
|
-
const Pagination = /* @__PURE__ */ (function () {
|
|
2480
|
-
return __component__$2.exports
|
|
2481
|
-
})()
|
|
2482
|
-
const render = function () {
|
|
2483
|
-
const _vm = this
|
|
2484
|
-
const _h = _vm.$createElement
|
|
2485
|
-
const _c = _vm._self._c || _h
|
|
2486
|
-
return _c(
|
|
2487
|
-
'div',
|
|
2488
|
-
{
|
|
2489
|
-
staticClass: 'dito-switch',
|
|
2490
|
-
class: _vm.classes,
|
|
2491
|
-
style: _vm.styles
|
|
2492
|
-
},
|
|
2493
|
-
[
|
|
2494
|
-
_c(
|
|
2495
|
-
'div',
|
|
2496
|
-
{
|
|
2497
|
-
staticClass: 'dito-switch-pane'
|
|
2498
|
-
},
|
|
2499
|
-
[
|
|
2500
|
-
_c(
|
|
2501
|
-
'input',
|
|
2502
|
-
_vm._b(
|
|
2503
|
-
{
|
|
2504
|
-
directives: [
|
|
2505
|
-
{
|
|
2506
|
-
name: 'model',
|
|
2507
|
-
rawName: 'v-model',
|
|
2508
|
-
value: _vm.checked,
|
|
2509
|
-
expression: 'checked'
|
|
2510
|
-
}
|
|
2511
|
-
],
|
|
2512
|
-
ref: 'input',
|
|
2513
|
-
attrs: {
|
|
2514
|
-
type: 'checkbox'
|
|
2515
|
-
},
|
|
2516
|
-
domProps: {
|
|
2517
|
-
checked: Array.isArray(_vm.checked)
|
|
2518
|
-
? _vm._i(_vm.checked, null) > -1
|
|
2519
|
-
: _vm.checked
|
|
2520
|
-
},
|
|
2521
|
-
on: {
|
|
2522
|
-
change: function ($event) {
|
|
2523
|
-
const $$a = _vm.checked
|
|
2524
|
-
const $$el = $event.target
|
|
2525
|
-
const $$c = !!$$el.checked
|
|
2526
|
-
if (Array.isArray($$a)) {
|
|
2527
|
-
const $$v = null
|
|
2528
|
-
const $$i = _vm._i($$a, $$v)
|
|
2529
|
-
if ($$el.checked) {
|
|
2530
|
-
$$i < 0 && (_vm.checked = $$a.concat([$$v]))
|
|
2531
|
-
} else {
|
|
2532
|
-
$$i > -1 &&
|
|
2533
|
-
(_vm.checked = $$a
|
|
2534
|
-
.slice(0, $$i)
|
|
2535
|
-
.concat($$a.slice($$i + 1)))
|
|
2536
|
-
}
|
|
2537
|
-
} else {
|
|
2538
|
-
_vm.checked = $$c
|
|
2539
|
-
}
|
|
2540
|
-
}
|
|
2541
|
-
}
|
|
2542
|
-
},
|
|
2543
|
-
'input',
|
|
2544
|
-
_vm.attributes,
|
|
2545
|
-
false
|
|
2546
|
-
)
|
|
2547
|
-
),
|
|
2548
|
-
_c('div', {
|
|
2549
|
-
staticClass: 'dito-switch-button'
|
|
2550
|
-
}),
|
|
2551
|
-
_vm.labels
|
|
2552
|
-
? _c(
|
|
2553
|
-
'span',
|
|
2554
|
-
{
|
|
2555
|
-
staticClass: 'dito-switch-label'
|
|
2556
|
-
},
|
|
2557
|
-
[
|
|
2558
|
-
_vm.checked
|
|
2559
|
-
? _vm._t('checked', function () {
|
|
2560
|
-
return [_vm._v(_vm._s(_vm.labels.checked || 'on'))]
|
|
2561
|
-
})
|
|
2562
|
-
: _vm._t('unchecked', function () {
|
|
2563
|
-
return [_vm._v(_vm._s(_vm.labels.unchecked || 'off'))]
|
|
2564
|
-
})
|
|
2565
|
-
],
|
|
2566
|
-
2
|
|
2567
|
-
)
|
|
2568
|
-
: _vm._e()
|
|
2569
|
-
]
|
|
2570
|
-
)
|
|
2571
|
-
]
|
|
2572
|
-
)
|
|
2573
|
-
}
|
|
2574
|
-
const staticRenderFns = []
|
|
2575
|
-
render._withStripped = true
|
|
2576
|
-
const SwitchButton_vue_vue_type_style_index_0_lang = ''
|
|
2577
|
-
const __vue2_script$1 = {
|
|
2578
|
-
props: {
|
|
2579
|
-
value: { type: Boolean, default: false },
|
|
2580
|
-
id: { type: String, default: null },
|
|
2581
|
-
name: { type: String, default: null },
|
|
2582
|
-
disabled: { type: Boolean, default: false },
|
|
2583
|
-
labels: { type: [Object, Boolean], default: false }
|
|
2584
|
-
},
|
|
2585
|
-
data() {
|
|
2586
|
-
return {
|
|
2587
|
-
checked: this.value
|
|
2588
|
-
}
|
|
2589
|
-
},
|
|
2590
|
-
computed: {
|
|
2591
|
-
classes() {
|
|
2592
|
-
const { checked, disabled } = this
|
|
2593
|
-
return {
|
|
2594
|
-
'dito-checked': checked,
|
|
2595
|
-
'dito-disabled': disabled
|
|
2596
|
-
}
|
|
2597
|
-
},
|
|
2598
|
-
styles() {
|
|
2599
|
-
const { labels: { checked, unchecked } = {} } = this
|
|
2600
|
-
const length = Math.max(
|
|
2601
|
-
0,
|
|
2602
|
-
checked == null ? void 0 : checked.length,
|
|
2603
|
-
unchecked == null ? void 0 : unchecked.length
|
|
2604
|
-
)
|
|
2605
|
-
return {
|
|
2606
|
-
'--switch-width': length ? `${length * 1.5}rem` : null
|
|
2607
|
-
}
|
|
2608
|
-
},
|
|
2609
|
-
attributes() {
|
|
2610
|
-
const { id, name, disabled, $attrs } = this
|
|
2611
|
-
return { id, name, disabled, ...$attrs }
|
|
2612
|
-
}
|
|
2613
|
-
},
|
|
2614
|
-
watch: {
|
|
2615
|
-
value(value) {
|
|
2616
|
-
this.checked = value
|
|
2617
|
-
},
|
|
2618
|
-
checked(checked) {
|
|
2619
|
-
if (checked !== this.value) {
|
|
2620
|
-
this.$emit('input', checked)
|
|
2621
|
-
this.$emit('change', checked)
|
|
2622
|
-
}
|
|
2623
|
-
}
|
|
2624
|
-
},
|
|
2625
|
-
methods: {
|
|
2626
|
-
focus() {
|
|
2627
|
-
this.$refs.input.focus()
|
|
2628
|
-
}
|
|
2629
|
-
}
|
|
2630
|
-
}
|
|
2631
|
-
const __cssModules$1 = {}
|
|
2632
|
-
const __component__$1 = /* @__PURE__ */ normalizeComponent(
|
|
2633
|
-
__vue2_script$1,
|
|
2634
|
-
render,
|
|
2635
|
-
staticRenderFns,
|
|
2636
|
-
false,
|
|
2637
|
-
__vue2_injectStyles$1,
|
|
2638
|
-
null,
|
|
2639
|
-
null,
|
|
2640
|
-
null
|
|
2641
|
-
)
|
|
2642
|
-
function __vue2_injectStyles$1(context) {
|
|
2643
|
-
for (const o in __cssModules$1) {
|
|
2644
|
-
this[o] = __cssModules$1[o]
|
|
2645
|
-
}
|
|
2646
|
-
}
|
|
2647
|
-
__component__$1.options.__file = 'src/components/SwitchButton.vue'
|
|
2648
|
-
const SwitchButton = /* @__PURE__ */ (function () {
|
|
2649
|
-
return __component__$1.exports
|
|
2650
|
-
})()
|
|
2651
|
-
const TransitionHeight_vue_vue_type_style_index_0_lang = ''
|
|
2652
|
-
const __vue2_script = {
|
|
2653
|
-
functional: true,
|
|
2654
|
-
props: {
|
|
2655
|
-
enabled: { type: Boolean, default: true }
|
|
2656
|
-
},
|
|
2657
|
-
render: (createElement, context) =>
|
|
2658
|
-
createElement(
|
|
2659
|
-
'transition',
|
|
2660
|
-
context.props.enabled
|
|
2661
|
-
? {
|
|
2662
|
-
props: { name: 'height' },
|
|
2663
|
-
on: events
|
|
2664
|
-
}
|
|
2665
|
-
: {},
|
|
2666
|
-
context.children
|
|
2667
|
-
)
|
|
2668
|
-
}
|
|
2669
|
-
const setStyle = (element, style) => Object.assign(element.style, style)
|
|
2670
|
-
const forceRepaint = element => getComputedStyle(element).height
|
|
2671
|
-
const events = {
|
|
2672
|
-
afterEnter(element) {
|
|
2673
|
-
setTimeout(() => setStyle(element, { height: 'auto' }))
|
|
2674
|
-
},
|
|
2675
|
-
enter(element) {
|
|
2676
|
-
const { width } = getComputedStyle(element)
|
|
2677
|
-
setStyle(element, {
|
|
2678
|
-
width,
|
|
2679
|
-
position: 'absolute',
|
|
2680
|
-
visibility: 'hidden',
|
|
2681
|
-
height: 'auto'
|
|
2682
|
-
})
|
|
2683
|
-
const { height } = getComputedStyle(element)
|
|
2684
|
-
setStyle(element, {
|
|
2685
|
-
width: null,
|
|
2686
|
-
position: null,
|
|
2687
|
-
visibility: null,
|
|
2688
|
-
height: 0
|
|
2689
|
-
})
|
|
2690
|
-
forceRepaint(element)
|
|
2691
|
-
setTimeout(() => setStyle(element, { height }))
|
|
2692
|
-
},
|
|
2693
|
-
leave(element) {
|
|
2694
|
-
const { height } = getComputedStyle(element)
|
|
2695
|
-
setStyle(element, { height })
|
|
2696
|
-
forceRepaint(element)
|
|
2697
|
-
setTimeout(() => setStyle(element, { height: 0 }))
|
|
2698
|
-
}
|
|
2699
|
-
}
|
|
2700
|
-
let __vue2_render, __vue2_staticRenderFns
|
|
2701
|
-
const __cssModules = {}
|
|
2702
|
-
const __component__ = /* @__PURE__ */ normalizeComponent(
|
|
2703
|
-
__vue2_script,
|
|
2704
|
-
__vue2_render,
|
|
2705
|
-
__vue2_staticRenderFns,
|
|
2706
|
-
false,
|
|
2707
|
-
__vue2_injectStyles,
|
|
2708
|
-
null,
|
|
2709
|
-
null,
|
|
2710
|
-
null
|
|
2711
|
-
)
|
|
2712
|
-
function __vue2_injectStyles(context) {
|
|
2713
|
-
for (const o in __cssModules) {
|
|
2714
|
-
this[o] = __cssModules[o]
|
|
2715
|
-
}
|
|
2716
|
-
}
|
|
2717
|
-
__component__.options.__file = 'src/transitions/TransitionHeight.vue'
|
|
2718
|
-
const TransitionHeight = /* @__PURE__ */ (function () {
|
|
2719
|
-
return __component__.exports
|
|
2720
|
-
})()
|
|
2721
|
-
exports2.Calendar = Calendar
|
|
2722
|
-
exports2.DatePicker = DatePicker
|
|
2723
|
-
exports2.DateTimePicker = DateTimePicker
|
|
2724
|
-
exports2.Icon = Icon
|
|
2725
|
-
exports2.InputField = InputField
|
|
2726
|
-
exports2.Pagination = Pagination
|
|
2727
|
-
exports2.SwitchButton = SwitchButton
|
|
2728
|
-
exports2.TimePicker = TimePicker
|
|
2729
|
-
exports2.TransitionHeight = TransitionHeight
|
|
2730
|
-
exports2.Trigger = Trigger
|
|
2731
|
-
exports2.addEvents = addEvents
|
|
2732
|
-
exports2.convertDate = convertDate
|
|
2733
|
-
exports2.copyDate = copyDate
|
|
2734
|
-
exports2.getAbsoluteBoundingRect = getAbsoluteBoundingRect
|
|
2735
|
-
exports2.getKey = getKey
|
|
2736
|
-
exports2.getKeyNavigation = getKeyNavigation
|
|
2737
|
-
exports2.scrollTo = scrollTo
|
|
2738
|
-
exports2.setSelection = setSelection
|
|
2739
|
-
Object.defineProperties(exports2, {
|
|
2740
|
-
__esModule: { value: true },
|
|
2741
|
-
[Symbol.toStringTag]: { value: 'Module' }
|
|
2742
|
-
})
|
|
2743
|
-
})
|
|
2744
|
-
// # sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by11aS51bWQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9ib3VuZHMuanMiLCIuLi9zcmMvdXRpbHMvZGF0ZS5qcyIsIi4uL3NyYy91dGlscy9ldmVudC5qcyIsIi4uL3NyYy91dGlscy9zY3JvbGwuanMiLCIuLi9zcmMvdXRpbHMvc2VsZWN0aW9uLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvQ2FsZW5kYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9DYWxlbmRhci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9UcmlnZ2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvVHJpZ2dlci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvSW5wdXRGaWVsZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EYXRlUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGF0ZVBpY2tlci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvVGltZVBpY2tlci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EYXRlVGltZVBpY2tlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0ljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9JY29uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1N3aXRjaEJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1N3aXRjaEJ1dHRvbi52dWUiLCIuLi9zcmMvdHJhbnNpdGlvbnMvVHJhbnNpdGlvbkhlaWdodC52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGdldEFic29sdXRlQm91bmRpbmdSZWN0KGVsKSB7XG4gIGNvbnN0IGRvYyA9IGRvY3VtZW50XG4gIGNvbnN0IHdpbiA9IHdpbmRvd1xuICBjb25zdCBib2R5ID0gZG9jLmJvZHlcbiAgLy8gcGFnZVhPZmZzZXQgYW5kIHBhZ2VZT2Zmc2V0IHdvcmsgZXZlcnl3aGVyZSBleGNlcHQgSUUgPDkuXG4gIGxldCBvZmZzZXRYID0gd2luLnBhZ2VYT2Zmc2V0ICE9PSB1bmRlZmluZWQgPyB3aW4ucGFnZVhPZmZzZXRcbiAgICA6IChkb2MuZG9jdW1lbnRFbGVtZW50IHx8IGJvZHkucGFyZW50Tm9kZSB8fCBib2R5KS5zY3JvbGxMZWZ0XG4gIGxldCBvZmZzZXRZID0gd2luLnBhZ2VZT2Zmc2V0ICE9PSB1bmRlZmluZWQgPyB3aW4ucGFnZVlPZmZzZXRcbiAgICA6IChkb2MuZG9jdW1lbnRFbGVtZW50IHx8IGJvZHkucGFyZW50Tm9kZSB8fCBib2R5KS5zY3JvbGxUb3BcbiAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gIGlmIChlbCAhPT0gYm9keSkge1xuICAgIGxldCBwYXJlbnQgPSBlbC5wYXJlbnROb2RlXG4gICAgLy8gVGhlIGVsZW1lbnQncyByZWN0IHdpbGwgYmUgYWZmZWN0ZWQgYnkgdGhlIHNjcm9sbCBwb3NpdGlvbnMgb2ZcbiAgICAvLyAqYWxsKiBvZiBpdHMgc2Nyb2xsYWJsZSBwYXJlbnRzLCBub3QganVzdCB0aGUgd2luZG93LCBzbyB3ZSBoYXZlXG4gICAgLy8gdG8gd2FsayB1cCB0aGUgdHJlZSBhbmQgY29sbGVjdCBldmVyeSBzY3JvbGwgb2Zmc2V0LiBHb29kIHRpbWVzLlxuICAgIHdoaWxlIChwYXJlbnQgIT09IGJvZHkpIHtcbiAgICAgIG9mZnNldFggKz0gcGFyZW50LnNjcm9sbExlZnRcbiAgICAgIG9mZnNldFkgKz0gcGFyZW50LnNjcm9sbFRvcFxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBib3R0b206IHJlY3QuYm90dG9tICsgb2Zmc2V0WSxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgIGxlZnQ6IHJlY3QubGVmdCArIG9mZnNldFgsXG4gICAgcmlnaHQ6IHJlY3QucmlnaHQgKyBvZmZzZXRYLFxuICAgIHRvcDogcmVjdC50b3AgKyBvZmZzZXRZLFxuICAgIHdpZHRoOiByZWN0LndpZHRoXG4gIH1cbn1cbiIsImltcG9ydCB7IGlzRGF0ZSwgcGljayB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5RGF0ZShkYXRlLFxuICB7IHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZCB9ID0ge31cbikge1xuICByZXR1cm4gbmV3IERhdGUoXG4gICAgcGljayh5ZWFyLCBkYXRlICYmIGRhdGUuZ2V0RnVsbFllYXIoKSwgMCksXG4gICAgcGljayhtb250aCwgZGF0ZSAmJiBkYXRlLmdldE1vbnRoKCksIDApLFxuICAgIHBpY2soZGF5LCBkYXRlICYmIGRhdGUuZ2V0RGF0ZSgpLCAwKSxcbiAgICBwaWNrKGhvdXIsIGRhdGUgJiYgZGF0ZS5nZXRIb3VycygpLCAwKSxcbiAgICBwaWNrKG1pbnV0ZSwgZGF0ZSAmJiBkYXRlLmdldE1pbnV0ZXMoKSwgMCksXG4gICAgcGljayhzZWNvbmQsIGRhdGUgJiYgZGF0ZS5nZXRTZWNvbmRzKCksIDApLFxuICAgIHBpY2sobWlsbGlzZWNvbmQsIGRhdGUgJiYgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSwgMClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERhdGUoZGF0ZSkge1xuICByZXR1cm4gaXNEYXRlKGRhdGUpID8gZGF0ZSA6IGRhdGUgPyBuZXcgRGF0ZShkYXRlKSA6IG51bGxcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBhZGRFdmVudHModGFyZ2V0LCBldmVudHMpIHtcbiAgZm9yIChjb25zdCB0eXBlIGluIGV2ZW50cykge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50c1t0eXBlXSwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIHtcbiAgICByZW1vdmUoKSB7XG4gICAgICBmb3IgKGNvbnN0IHR5cGUgaW4gZXZlbnRzKSB7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50c1t0eXBlXSwgZmFsc2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXkoZXZlbnQpIHtcbiAgcmV0dXJuIHtcbiAgICAzNzogJ2xlZnQnLFxuICAgIDM4OiAndXAnLFxuICAgIDM5OiAncmlnaHQnLFxuICAgIDQwOiAnZG93bicsXG4gICAgMTM6ICdlbnRlcidcbiAgfVtldmVudC5rZXlDb2RlXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5TmF2aWdhdGlvbihldmVudCkge1xuICBjb25zdCBrZXkgPSBnZXRLZXkoZXZlbnQpXG4gIHJldHVybiB7XG4gICAgaG9yOiB7IGxlZnQ6IC0xLCByaWdodDogMSB9W2tleV0gfHwgMCxcbiAgICB2ZXI6IHsgdXA6IC0xLCBkb3duOiAxIH1ba2V5XSB8fCAwLFxuICAgIGVudGVyOiBrZXkgPT09ICdlbnRlcidcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvKGVsZW1lbnQsIHRvLCBkdXJhdGlvbikge1xuICBjb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGFyZ3VtZW50c1swXSwgMTApXG4gIH1cbiAgaWYgKGR1cmF0aW9uIDw9IDApIHtcbiAgICBlbGVtZW50LnNjcm9sbFRvcCA9IHRvXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IHRvIC0gZWxlbWVudC5zY3JvbGxUb3BcbiAgICBjb25zdCBwZXJUaWNrID0gZGlmZmVyZW5jZSAvIGR1cmF0aW9uICogMTBcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSBlbGVtZW50LnNjcm9sbFRvcCArIHBlclRpY2tcbiAgICAgIGlmIChlbGVtZW50LnNjcm9sbFRvcCA9PT0gdG8pIHJldHVyblxuICAgICAgc2Nyb2xsVG8oZWxlbWVudCwgdG8sIGR1cmF0aW9uIC0gMTApXG4gICAgfSlcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHNldFNlbGVjdGlvbihmaWVsZCwgc3RhcnQsIGVuZCkge1xuICBpZiAoZmllbGQuY3JlYXRlVGV4dFJhbmdlKSB7XG4gICAgY29uc3QgcmFuZ2UgPSBmaWVsZC5jcmVhdGVUZXh0UmFuZ2UoKVxuICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBzdGFydClcbiAgICByYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBlbmQpXG4gICAgcmFuZ2Uuc2VsZWN0KClcbiAgICBmaWVsZC5mb2N1cygpXG4gIH0gZWxzZSBpZiAoZmllbGQuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICBmaWVsZC5mb2N1cygpXG4gICAgZmllbGQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZClcbiAgfSBlbHNlIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGZpZWxkKSB7XG4gICAgZmllbGQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydFxuICAgIGZpZWxkLnNlbGVjdGlvbkVuZCA9IGVuZFxuICAgIGZpZWxkLmZvY3VzKClcbiAgfVxufVxuIiwiXG4uZGl0by1jYWxlbmRhclxuICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgIC5kaXRvLWNhbGVuZGFyLWlubmVyXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cImN1cnJlbnRNb2RlID09PSAnZGF5J1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC1tb250aChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgbW9udGg6IDEgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwid2Vla2RheSBpbiB3ZWVrZGF5TmFtZXNcIlxuICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItZGF0ZXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJkYXRlLnN0YXRlICYmIGBkaXRvLWNhbGVuZGFyLWl0ZW0tJHtkYXRlLnN0YXRlfWBcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKGRhdGUuZGF0ZSwgZGF0ZS5zdGF0ZSwgdHJ1ZSlcIlxuICAgICAgICAgICAgKSB7eyBkYXRlLnRleHQgfX1cbiAgICAgICAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC10b2RheShcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShuZXcgRGF0ZSgpKVwiXG4gICAgICAgICAgICA6dGl0bGU9XCJkYXRlVG9TdHJpbmcobmV3IERhdGUoKSwgeyB5ZWFyOiAxLCBtb250aDogMSwgZGF5OiAxIH0pXCJcbiAgICAgICAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICdtb250aCdcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhblxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IDEgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLW1vbnRoc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCIobW9udGgsIGluZGV4KSBpbiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0TW9udGhDbGFzcyhpbmRleClcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RNb250aChpbmRleClcIlxuICAgICAgICAgICAgKSB7eyBtb250aC5zaG9ydCB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAneWVhcidcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuIHt7IGRlY2FkZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXIteWVhcnNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwieWVhciBpbiB5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRZZWFyQ2xhc3MoeWVhcilcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RZZWFyKHllYXIpXCJcbiAgICAgICAgICAgICkge3sgeWVhciB9fVxuIiwiLy8gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS9cblxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY2FsZW5kYXJcbiAgICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgICAgLmRpdG8tY2FsZW5kYXItaW5uZXJcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1pZj1cImN1cnJlbnRNb2RlID09PSAnZGF5J1wiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKC0xKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuXG4gICAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW1vbnRoKFxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ21vbnRoJylcIlxuICAgICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgbW9udGg6IDEgfSkgfX1cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1mb3I9XCJ3ZWVrZGF5IGluIHdlZWtkYXlOYW1lc1wiXG4gICAgICAgICAgICAgICkge3sgd2Vla2RheS5zaG9ydCB9fVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXItZGF0ZXNcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWZvcj1cImRhdGUgaW4gZGF0ZVJhbmdlXCJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJkYXRlLnN0YXRlICYmIGBkaXRvLWNhbGVuZGFyLWl0ZW0tJHtkYXRlLnN0YXRlfWBcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUoZGF0ZS5kYXRlLCBkYXRlLnN0YXRlLCB0cnVlKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZS50ZXh0IH19XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5KFxuICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShuZXcgRGF0ZSgpKVwiXG4gICAgICAgICAgICAgIDp0aXRsZT1cImRhdGVUb1N0cmluZyhuZXcgRGF0ZSgpLCB7IHllYXI6IDEsIG1vbnRoOiAxLCBkYXk6IDEgfSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuXG4gICAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLW1vbnRoc1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwiKG1vbnRoLCBpbmRleCkgaW4gbW9udGhOYW1lc1wiXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0TW9udGhDbGFzcyhpbmRleClcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICkge3sgbW9udGguc2hvcnQgfX1cbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXIteWVhcnNcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWZvcj1cInllYXIgaW4geWVhclJhbmdlXCJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRZZWFyQ2xhc3MoeWVhcilcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgICApIHt7IHllYXIgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jYWxlbmRhclxuICAgIG1pbi13aWR0aDogMjQwcHhcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG5cbiAgLmRpdG8tY2FsZW5kYXItcG9wdXBcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgei1pbmRleDogMTAwMFxuXG4gIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICBwYWRkaW5nOiAwIDAuNWVtXG4gICAgc3BhblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICB3aWR0aDogY2FsYygxMDAlIC8gNylcbiAgICAgIGhlaWdodDogJGlucHV0LWhlaWdodFxuICAgICAgbGluZS1oZWlnaHQ6IGNhbGMoI3skaW5wdXQtaGVpZ2h0fSAtIDJweClcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnRcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlclxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tdG9kYXlcbiAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlXG4gICAgICAmLFxuICAgICAgJjpob3ZlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGNvbG9yOiB3aGl0ZVxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWRcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlXG4gICAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkLFxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZ3JheVxuICAgICAgY29sb3I6ICM5OTlcblxuICAuZGl0by1jYWxlbmRhci1tb250aHMsXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzXG4gICAgc3BhblxuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAvIDQpXG4gICAgICBtYXJnaW46IDAuNWVtIDBcblxuICAuZGl0by1jYWxlbmRhci15ZWFycyBzcGFuXG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDUpXG5cbiAgLmRpdG8tY2FsZW5kYXIgYSxcbiAgLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3BhbixcbiAgLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW4sXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW5cbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgY3Vyc29yOiBwb2ludGVyXG5cbiAgLmRpdG8tY2FsZW5kYXItaGVhZGVyIHNwYW5cbiAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICBhXG4gICAgICBwYWRkaW5nOiAwIDAuMmVtXG5cbiAgLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbjpob3ZlcixcbiAgLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW46aG92ZXIsXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW46aG92ZXIsXG4gIC5kaXRvLWNhbGVuZGFyOm5vdCg6aG92ZXIpIC5kaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudFxuICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcblxuICAuZGl0by1jYWxlbmRhci13ZWVrZGF5cyBzcGFuXG4gICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXIsXG4gIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgIEBleHRlbmQgJWlucHV0LWhlaWdodFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIHRleHQtYWxpZ246IGNlbnRlclxuXG4gIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgIGJvcmRlci10b3A6ICRib3JkZXItc3R5bGVcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICBmb250LXdlaWdodDogYm9sZFxuICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgPiBzcGFuXG4gICAgICBtYXJnaW46IGF1dG9cbiAgICAgIHBhZGRpbmc6IDAgMC41ZW1cbiAgICBhXG4gICAgICBmb250LXdlaWdodDogYm9sZFxuICAgICAgJjpob3ZlclxuICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuXG4gIC5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldixcbiAgLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgd2lkdGg6IDUlXG4gICAgbWluLXdpZHRoOiAyZW1cbiAgICBtYXgtd2lkdGg6IDNlbVxuICAgICY6OmFmdGVyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIGxlZnQ6IDBcbiAgICAgIHJpZ2h0OiAwXG4gICAgICBmb250LXNpemU6IDEuMjVlbVxuICAuZGl0by1jYWxlbmRhci1zdGVwLXByZXZcbiAgICAmOjphZnRlclxuICAgICAgY29udGVudDogJ+KAuSdcbiAgICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlclxuICAgICAgY29udGVudDogJ8KrJ1xuICAuZGl0by1jYWxlbmRhci1zdGVwLW5leHRcbiAgICAmOjphZnRlclxuICAgICAgY29udGVudDogJ+KAuidcbiAgICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlclxuICAgICAgY29udGVudDogJ8K7J1xuXG4gIC5kaXRvLWNhbGVuZGFyLXNlbGVjdC10b2RheVxuICAgICY6OmFmdGVyXG4gICAgICBjb250ZW50OiAnTm93J1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNvcHlEYXRlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB2YWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBtb2RlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2RheScgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyB3ZWVrZGF5TmFtZXMsIG1vbnRoTmFtZXMgfSA9IGdldExvY2FsZU5hbWVzKHRoaXMubG9jYWxlKVxuICAgIHJldHVybiB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzLFxuICAgICAgZGF0ZVJhbmdlOiBbXSxcbiAgICAgIHllYXJSYW5nZTogW10sXG4gICAgICBjdXJyZW50VmFsdWU6XG4gICAgICAgIHRoaXMudmFsdWUgfHxcbiAgICAgICAgLy8gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIHVzZSBjdXJyZW50IGRhdGUgYnV0IGNsZWFyIHRpbWUgZmllbGRzOlxuICAgICAgICBjb3B5RGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwIH0pLFxuICAgICAgY3VycmVudE1vZGU6IHRoaXMubW9kZVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGN1cnJlbnRWYWx1ZTogJ3VwZGF0ZURhdGVSYW5nZScsXG4gICAgZGlzYWJsZWREYXRlOiAndXBkYXRlRGF0ZVJhbmdlJyxcblxuICAgIHZhbHVlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoK25ld1ZhbCAhPT0gK29sZFZhbCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbCB8fCBuZXcgRGF0ZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE1vbnRoQ2xhc3MobW9udGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzpcbiAgICAgICAgICB0aGlzLnZhbHVlICYmIG1vbnRoID09PSB0aGlzLnZhbHVlLmdldE1vbnRoKCkgJiZcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpID09PSB0aGlzLnZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6XG4gICAgICAgICAgbW9udGggPT09IHRoaXMuY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0WWVhckNsYXNzKHllYXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzpcbiAgICAgICAgICB0aGlzLnZhbHVlICYmIHllYXIgPT09IHRoaXMudmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzpcbiAgICAgICAgICB5ZWFyID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldERhdGUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGNvcHlEYXRlKHRoaXMuY3VycmVudFZhbHVlLCBvdmVycmlkZXMpXG4gICAgfSxcblxuICAgIHN0ZXBEZWNhZGUoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiAxMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2V0TW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH0sXG5cbiAgICBzdGVwTW9udGgoc3RlcCkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgeWVhciwgbW9udGggfSA9IHRoaXMuZ2V0WWVhck1vbnRoKFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBzdGVwXG4gICAgICApXG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICBtb250aCxcbiAgICAgICAgZGF5OiBNYXRoLm1pbihcbiAgICAgICAgICB0aGlzLmdldERheUNvdW50KHllYXIsIG1vbnRoKSxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXREYXRlKClcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc3RlcFllYXIoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdERhdGUoZGF0ZSwgc3RhdGUsIGNvcHkgPSBmYWxzZSkge1xuICAgICAgaWYgKHN0YXRlICE9PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICBkYXk6IGRhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RNb250aChtb250aCkge1xuICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgdGhpcy5zZXREYXRlKHsgbW9udGggfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0WWVhcih5ZWFyKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgIHRoaXMuc2V0RGF0ZSh7IHllYXIgfSlcbiAgICB9LFxuXG4gICAgZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICBpZiAobW9udGggPiAxMSkge1xuICAgICAgICB5ZWFyKytcbiAgICAgICAgbW9udGggPSAwXG4gICAgICB9IGVsc2UgaWYgKG1vbnRoIDwgMCkge1xuICAgICAgICB5ZWFyLS1cbiAgICAgICAgbW9udGggPSAxMVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgeWVhciwgbW9udGggfVxuICAgIH0sXG5cbiAgICBkYXRlVG9TdHJpbmcoZGF0ZSwgeyB5ZWFyLCBtb250aCwgZGF5IH0pIHtcbiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMubG9jYWxlLCB7XG4gICAgICAgIHllYXI6IHllYXIgJiYgJ251bWVyaWMnLFxuICAgICAgICBtb250aDogbW9udGggJiYgJ2xvbmcnLFxuICAgICAgICBkYXk6IGRheSAmJiAnbnVtZXJpYydcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGRlY2FkZVRvU3RyaW5nKGRhdGUpIHtcbiAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKGRhdGUuZ2V0RnVsbFllYXIoKSlcbiAgICAgIHJldHVybiBgJHt5ZWFyfSDigJMgJHt5ZWFyICsgOX1gXG4gICAgfSxcblxuICAgIGdldERheUNvdW50KHllYXIsIG1vbnRoKSB7XG4gICAgICBjb25zdCBkYXlzSW5Nb250aCA9IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVxuICAgICAgLy8gSGFuZGxlIGxlYXAgeWVhcjpcbiAgICAgIHJldHVybiBtb250aCA9PT0gMSAmJiAoISh5ZWFyICUgNDAwKSB8fCAhKHllYXIgJSA0KSAmJiAoeWVhciAlIDEwMCkpXG4gICAgICAgID8gMjlcbiAgICAgICAgOiBkYXlzSW5Nb250aFttb250aF1cbiAgICB9LFxuXG4gICAgZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcikge1xuICAgICAgY29uc3QgeWVhclN0ciA9IHllYXIudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuICtgJHt5ZWFyU3RyLnNsaWNlKDAsIC0xKX0wYFxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZSh7IGhvciwgdmVyLCBlbnRlciB9KSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRNb2RlLCBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGlmIChob3IgfHwgdmVyKSB7XG4gICAgICAgIHN3aXRjaCAoY3VycmVudE1vZGUpIHtcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgZGF5OiBjdXJyZW50VmFsdWUuZ2V0RGF0ZSgpICsgaG9yICsgdmVyICogN1xuICAgICAgICAgIH0pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICBtb250aDogY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBob3IgKyB2ZXIgKiA2XG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgeWVhcjogY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBob3IgKyB2ZXIgKiA1XG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGVudGVyKSB7XG4gICAgICAgIHN3aXRjaCAoY3VycmVudE1vZGUpIHtcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICB0aGlzLnNlbGVjdERhdGUoY3VycmVudFZhbHVlKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVEYXRlUmFuZ2UoKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IFtdXG4gICAgICB0aGlzLnllYXJSYW5nZSA9IFtdXG5cbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB5ZWFyID0gY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIGNvbnN0IG1vbnRoID0gY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcilcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgICB0aGlzLnllYXJSYW5nZS5wdXNoKHN0YXJ0WWVhciArIGkpXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyTW9udGhGaXJzdERheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKVxuICAgICAgbGV0IGZpcnN0RGF5V2VlayA9IGN1cnJNb250aEZpcnN0RGF5LmdldERheSgpICsgMVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA9PT0gMCkge1xuICAgICAgICBmaXJzdERheVdlZWsgPSA3XG4gICAgICB9XG4gICAgICBjb25zdCBkYXlDb3VudCA9IHRoaXMuZ2V0RGF5Q291bnQoeWVhciwgbW9udGgpXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID4gMSkge1xuICAgICAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCAtIDEpXG4gICAgICAgIGNvbnN0IHByZXZNb250aERheUNvdW50ID0gdGhpcy5nZXREYXlDb3VudChcbiAgICAgICAgICBwcmV2TW9udGgueWVhcixcbiAgICAgICAgICBwcmV2TW9udGgubW9udGhcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpcnN0RGF5V2VlazsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF5ID0gcHJldk1vbnRoRGF5Q291bnQgLSBmaXJzdERheVdlZWsgKyBpICsgMVxuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShwcmV2TW9udGgueWVhciwgcHJldk1vbnRoLm1vbnRoLCBkYXkpXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBkYXksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBkYXlDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaSlcbiAgICAgICAgY29uc3QgaXNEYXkgPSBkYXRlID0+IGRhdGUgJiZcbiAgICAgICAgICBkYXRlLmdldERhdGUoKSA9PT0gaSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciAmJlxuICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGhcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBpc0RheSh0aGlzLnZhbHVlKSA/ICdhY3RpdmUnXG4gICAgICAgICAgOiBpc0RheSh0b2RheSkgPyAndG9kYXknXG4gICAgICAgICAgOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCdcbiAgICAgICAgICA6IGlzRGF5KGN1cnJlbnRWYWx1ZSkgPyAnY3VycmVudCdcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBkYXRlLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRNb250aE5lZWQgPSA0MiAtIHRoaXMuZGF0ZVJhbmdlLmxlbmd0aFxuICAgICAgaWYgKG5leHRNb250aE5lZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoICsgMSlcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbmV4dE1vbnRoTmVlZDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG5leHRNb250aC55ZWFyLCBuZXh0TW9udGgubW9udGgsIGkpXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGxvY2FsZU5hbWVzID0ge31cblxuLy8gQ2FsbGluZyBgdG9Mb2NhbGVTdHJpbmcoKWAgdGhpcyBtdWNoIGFwcGVhcnMgdG8gYmUgZXhwZW5zaXZlLCBzbyBjYWNoZSBpdDpcbmZ1bmN0aW9uIGdldExvY2FsZU5hbWVzKGxvY2FsZSkge1xuICBsZXQgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdXG4gIGlmICghbmFtZXMpIHtcbiAgICBjb25zdCB3ZWVrZGF5TmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgMCwgaSlcbiAgICAgIHdlZWtkYXlOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIGksIDApXG4gICAgICBtb250aE5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXSA9IHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzXG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWlmPVwiYWx3YXlzU2hvd1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnY2xpY2snXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnZm9jdXMnIHx8IHRyaWdnZXIgPT09ICdhbHdheXMnXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICB0cmFuc2l0aW9uKDpuYW1lPVwidHJhbnNpdGlvblwiKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICApXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWVsc2VcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgKVxuIiwiLy8gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS9cblxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1pZj1cImFsd2F5c1Nob3dcIlxuICAgICAgcmVmPVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIClcbiAgICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2NsaWNrJ1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICApXG4gICAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gICAgLmRpdG8tdHJpZ2dlcihcbiAgICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgcmVmPVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgIClcbiAgICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2ZvY3VzJyB8fCB0cmlnZ2VyID09PSAnYWx3YXlzJ1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgKVxuICAgICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAgIHRyYW5zaXRpb24oOm5hbWU9XCJ0cmFuc2l0aW9uXCIpXG4gICAgICAuZGl0by1wb3B1cChcbiAgICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgICByZWY9XCJwb3B1cFwiXG4gICAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgICApXG4gICAgICAgIHNsb3QoXG4gICAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgKVxuICAgICAgLmRpdG8tcG9wdXAoXG4gICAgICAgIHYtZWxzZVxuICAgICAgICByZWY9XCJwb3B1cFwiXG4gICAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgIClcbiAgICAgICAgc2xvdChcbiAgICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL3RyYW5zaXRpb25zL2luZGV4LnNhc3MnXG5cbiAgLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAuZGl0by10cmlnZ2VyLWRpc2FibGVkXG4gICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZFxuICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvclxuICAgIGN1cnNvcjogZGVmYXVsdFxuICAgICpcbiAgICAgIGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50XG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICY6Zm9jdXNcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZVxuXG4gIC5kaXRvLXBvcHVwXG4gICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgdG9wOiAwXG4gICAgbGVmdDogMFxuICAgIHotaW5kZXg6IDEwMDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgdHJpZ2dlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdjbGljaycgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20nIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGN1c3RvbUNsYXNzOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHpJbmRleDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBrZWVwSW5WaWV3OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBoaWRlV2hlbkNsaWNrT3V0c2lkZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgYWx3YXlzU2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvdmVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaGlkZURlbGF5OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBwb3B1cFBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnRcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmlnZ2VyQ2xhc3MoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by10cmlnZ2VyLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwb3B1cENsYXNzKCkge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgW2BkaXRvLXBvcHVwLSR7aHlwaGVuYXRlKHRoaXMucGxhY2VtZW50KX1gXTogdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY3VzdG9tQ2xhc3MpIHtcbiAgICAgICAgY2xhc3Nlc1t0aGlzLmN1c3RvbUNsYXNzXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIHBvcHVwU3R5bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy56SW5kZXggPyBgei1pbmRleDogJHt0aGlzLnpJbmRleH1gIDogJydcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvdyB8fCB0aGlzLmFsd2F5c1Nob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIG5ld1ZhbClcbiAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0cmlnZ2VyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCB0ZXh0YXJlYScpXG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHRoaXMuZm9jdXNFdmVudHMgPSBhZGRFdmVudHModGFyZ2V0LCB7XG4gICAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5oaWRlV2hlbkNsaWNrT3V0c2lkZSAmJiAhdGhpcy5hbHdheXNTaG93KSB7XG4gICAgICAvLyBVc2UgJ21vdXNldXAnIGluc3RlYWQgb2YgJ2NsaWNrJywgc2luY2UgY2xpY2sgYXBwZWFycyB0byBoYXBwZW4gYWZ0ZXJcbiAgICAgIC8vIHRoZSBET00gaW5zaWRlIG9mIHBvcHVwcyBjb3VsZCBjaGFuZ2UgaW4gYSB3YXkgc28gdGhhdCB0aGUgY2hlY2tcbiAgICAgIC8vIGBwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpYCB3b3VsZCBmYWlsOlxuICAgICAgdGhpcy5jbG9zZUV2ZW50cyA9IGFkZEV2ZW50cyh3aW5kb3csIHtcbiAgICAgICAgbW91c2V1cDogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwICYmXG4gICAgICAgICAgICAhcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIXRyaWdnZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuc2hvd1BvcHVwID0gdGhpcy5zaG93XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmZvY3VzRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMuY2xvc2VFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5tb3VzZUxlYXZlVGltZXIgPSBudWxsXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZVBvc2l0aW9uKCkge1xuICAgICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgICAgaWYgKHRoaXMuc2hvdyAmJiBwb3B1cC5vZmZzZXRXaWR0aCA9PT0gMCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSwgMClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IGlzU3RyaW5nKHRoaXMudGFyZ2V0KVxuICAgICAgICA/IHRoaXMuJHJlZnNbdGhpcy50YXJnZXRdXG4gICAgICAgIDogdGhpcy50YXJnZXRcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgLy8gQWN0dWFsbHkgcmVzaXplIHRoZSBwb3B1cCdzIGZpcnN0IGNoaWxkLCBzbyB0aGV5IGNhbiBzZXQgc2l6ZSBsaW1pdHMuXG4gICAgICAgIGNvbnN0IGVsID0gdGFyZ2V0ID09PSBwb3B1cCA/IHRyaWdnZXIgOiBwb3B1cC5maXJzdENoaWxkXG4gICAgICAgIGVsLnN0eWxlLndpZHRoID0gZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLndpZHRoXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvdW5kcyA9ICh0YXJnZXQgfHwgdHJpZ2dlcikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IHRyaWdnZXJMZWZ0ID0gYm91bmRzLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICAgY29uc3QgdHJpZ2dlclRvcCA9IGJvdW5kcy50b3AgKyB3aW5kb3cuc2Nyb2xsWVxuICAgICAgY29uc3QgdHJpZ2dlcldpZHRoID0gYm91bmRzLndpZHRoXG4gICAgICBjb25zdCB0cmlnZ2VySGVpZ2h0ID0gYm91bmRzLmhlaWdodFxuICAgICAgY29uc3QgcG9wdXBXaWR0aCA9IHBvcHVwLm9mZnNldFdpZHRoXG4gICAgICBjb25zdCBwb3B1cEhlaWdodCA9IHBvcHVwLm9mZnNldEhlaWdodFxuXG4gICAgICBsZXQgW3BhcnQxLCBwYXJ0Ml0gPSB0aGlzLnBvcHVwUGxhY2VtZW50LnNwbGl0KCctJykgfHwgW11cbiAgICAgIGlmICh0aGlzLmtlZXBJblZpZXcpIHtcbiAgICAgICAgY29uc3Qgd2luV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgICBjb25zdCB3aW5IZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgLSB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IC0gdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydDIgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCArIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgKyB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgbGVmdCA9IDBcbiAgICAgIGxldCB0b3AgPSAwXG4gICAgICBzd2l0Y2ggKHBhcnQxKSB7XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHRcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICBsZWZ0IC09IHBvcHVwV2lkdGhcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgbGVmdCArPSB0cmlnZ2VyV2lkdGhcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHBhcnQyKSB7XG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aCAtIHRyaWdnZXJXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgdG9wIC09IHBvcHVwSGVpZ2h0IC0gdHJpZ2dlckhlaWdodFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY292ZXIpIHtcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgdG9wIC09IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQgIT09IHRyaWdnZXIpIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlckJvdW5kcyA9IHRyaWdnZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgbGVmdCArPSB0cmlnZ2VyTGVmdCAtIHRyaWdnZXJCb3VuZHMubGVmdFxuICAgICAgICB0b3AgKz0gdHJpZ2dlclRvcCAtIHRyaWdnZXJCb3VuZHMudG9wXG4gICAgICB9XG4gICAgICBwb3B1cC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGBcbiAgICAgIHBvcHVwLnN0eWxlLnRvcCA9IGAke3RvcH1weGBcblxuICAgICAgdGhpcy4kZW1pdCgndXBkYXRlLXBvc2l0aW9uJywge1xuICAgICAgICB0cmlnZ2VyLFxuICAgICAgICBwb3B1cCxcbiAgICAgICAgcGxhY2VtZW50OiB0aGlzLnBvcHVwUGxhY2VtZW50XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkNsaWNrKCkge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2hvd1BvcHVwID0gIXRoaXMuc2hvd1BvcHVwXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uSG92ZXIoZW50ZXIpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZUxlYXZlVGltZXIpXG4gICAgICAgIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmhpZGVEZWxheSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUxlYXZlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgICAgfSwgdGhpcy5oaWRlRGVsYXkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1pbnB1dFxuICBpbnB1dChcbiAgICByZWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOmFyaWEtbGFiZWw9XCJ0aXRsZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWlucHV0XG4gICAgaW5wdXQoXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8taW5wdXRcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIGlucHV0XG4gICAgICAvLyBJbmhlcml0IGFsbCBzdHlsaW5nIGZyb20gLmRpdG8taW5wdXRcbiAgICAgIGFsbDogaW5oZXJpdFxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgYm9yZGVyOiAwXG4gICAgICBtYXJnaW46IDBcbiAgICAgIHBhZGRpbmc6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgdHlwZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICd0ZXh0JyB9LFxuICAgIHZhbHVlOiB7IHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRpdGxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhdXRvY29tcGxldGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnb2ZmJyB9XG4gICAgLypcbiAgICBjbGVhcmFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICAgIHN1ZmZpeEljb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcHJlZml4SWNvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICAgICovXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgaG92ZXJpbmc6IGZhbHNlLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBpZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICByZWFkb25seSxcbiAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgIGF1dG9jb21wbGV0ZSxcbiAgICAgICAgJGF0dHJzXG4gICAgICB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHNpemUsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgcmVhZG9ubHksXG4gICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICBhdXRvY29tcGxldGUsXG4gICAgICAgIC4uLiRhdHRyc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsaXN0ZW5lcnMoKSB7XG4gICAgICAvLyBSZW1vdmUgJ2lucHV0JyBsaXN0ZW5lciBiZWNhdXNlIHdlJ3JlIGhhbmRsaW5nIGl0IHNlcGFyYXRlbHkgYmVsb3csXG4gICAgICAvLyBidXQgcGFzcyBvbiBhbGwgb3RoZXJzIHRvIHRoZSB3cmFwcGVkIG5hdGl2ZSBlbGVtZW50OlxuICAgICAgY29uc3QgeyBpbnB1dCwgLi4ubGlzdGVuZXJzIH0gPSB0aGlzLiRsaXN0ZW5lcnNcbiAgICAgIHJldHVybiBsaXN0ZW5lcnNcbiAgICB9LFxuXG4gICAgc2l6ZSgpIHtcbiAgICAgIC8vIERldGVybWluZSBzaXplIGJhc2VkIG9uIG1pbiAmIG1heCBzZXR0aW5ncywgaWYgdGhleSdyZSBwcm92aWRlZC5cbiAgICAgIGNvbnN0IHsgc2l6ZSwgbWluLCBtYXggfSA9IHRoaXMuJGF0dHJzXG4gICAgICBjb25zdCBnZXRMZW5ndGggPSB2YWx1ZSA9PiB2YWx1ZSAhPSBudWxsID8gYCR7dmFsdWV9YC5sZW5ndGggOiAwXG4gICAgICByZXR1cm4gc2l6ZSB8fCBnZXRMZW5ndGgobWluKSB8fCBnZXRMZW5ndGgobWF4KSB8fCB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShuZXdWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG50cmlnZ2VyLmRpdG8tZGF0ZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIGlucHV0LWZpZWxkLmRpdG8tZGF0ZS1waWNrZXItaW5wdXQoXG4gICAgc2xvdD1cInRyaWdnZXJcIlxuICAgIHJlZj1cImlucHV0XCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgOnZhbHVlPVwiY3VycmVudFRleHRcIlxuICAgIHJlYWRvbmx5XG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICBAZm9jdXM9XCJpbnB1dEZvY3VzZWQgPSB0cnVlXCJcbiAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQgfVwiXG4gIClcbiAgLy8gaWNvbih0eXBlPVwiY2FsZW5kYXJcIiA6Y29sb3I9XCJpY29uQ29sb3JcIilcbiAgY2FsZW5kYXIuZGl0by1kYXRlLXBpY2tlci1wb3B1cChcbiAgICBzbG90PVwicG9wdXBcIlxuICAgIHJlZj1cImNhbGVuZGFyXCJcbiAgICBAaW5wdXQ9XCJzZWxlY3REYXRlXCJcbiAgICA6dmFsdWU9XCJjdXJyZW50VmFsdWVcIlxuICAgIHYtYmluZD1cInsgbG9jYWxlLCBkaXNhYmxlZERhdGUgfVwiXG4gIClcbiIsIi8vIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvXG5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRyaWdnZXIuZGl0by1kYXRlLXBpY2tlcihcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuICApXG4gICAgaW5wdXQtZmllbGQuZGl0by1kYXRlLXBpY2tlci1pbnB1dChcbiAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDp2YWx1ZT1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHJlYWRvbmx5XG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICAgIClcbiAgICAvLyBpY29uKHR5cGU9XCJjYWxlbmRhclwiIDpjb2xvcj1cImljb25Db2xvclwiKVxuICAgIGNhbGVuZGFyLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAoXG4gICAgICBzbG90PVwicG9wdXBcIlxuICAgICAgcmVmPVwiY2FsZW5kYXJcIlxuICAgICAgQGlucHV0PVwic2VsZWN0RGF0ZVwiXG4gICAgICA6dmFsdWU9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwieyBsb2NhbGUsIGRpc2FibGVkRGF0ZSB9XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZGF0ZS1waWNrZXJcbiAgICBtaW4td2lkdGg6IDI0MHB4XG4gICAgLmRpdG8taW5wdXRcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgICAgd2lkdGg6IDEwMCVcbiAgLmRpdG8tZGF0ZS1waWNrZXItcG9wdXBcbiAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgQ2FsZW5kYXIgZnJvbSAnLi9DYWxlbmRhci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgQ2FsZW5kYXIsIElucHV0RmllbGQgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQoKSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB7XG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgIGRhdGU6IHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgICAgdGltZTogZmFsc2VcbiAgICAgIH0pIHx8ICcnXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgbmV3VmFsKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KG5ld1ZhbCA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy4kb24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNlbGVjdERhdGUoZGF0ZSkge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgaWYgKHRoaXMuJHJlZnMuY2FsZW5kYXI/Lm5hdmlnYXRlKGdldEtleU5hdmlnYXRpb24oZXZlbnQpKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbnRyaWdnZXIuZGl0by10aW1lLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgaW5wdXQtZmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJjdXJyZW50VGV4dFwiXG4gICAgcmVhZG9ubHlcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgIEBibHVyPVwiaW5wdXRGb2N1c2VkID0gZmFsc2VcIlxuICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgKVxuICAvLyBpY29uKHR5cGU9XCJ0aW1lXCJcbiAgLy8gICA6Y29sb3I9XCJkaXNhYmxlZCA/ICcjYmZiZmJmJyA6ICh0ZXh0ID8gJyM2NjYnIDogJyNiZmJmYmYnKVwiXG4gIC8vIClcbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXAoXG4gICAgc2xvdD1cInBvcHVwXCJcbiAgKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIoXG4gICAgICAgIHJlZj1cImhvdXJcIlxuICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMFwiXG4gICAgICApXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gMjRcIlxuICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICBAY2xpY2s9XCJob3VyID0gaW5kZXggLSAxXCJcbiAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUoXG4gICAgICAgIHJlZj1cIm1pbnV0ZVwiXG4gICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAxXCJcbiAgICAgIClcbiAgICAgICAgbGkoXG4gICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZE1pbnV0ZShpbmRleCAtIDEpXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICBAY2xpY2s9XCJtaW51dGUgPSBpbmRleCAtIDFcIlxuICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLXNlY29uZChcbiAgICAgICAgcmVmPVwic2Vjb25kXCJcbiAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDJcIlxuICAgICAgKVxuICAgICAgICBsaShcbiAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkU2Vjb25kKGluZGV4IC0gMSlcIlxuICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IHNlY29uZCA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0cmlnZ2VyLmRpdG8tdGltZS1waWNrZXIoXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbiAgKVxuICAgIGlucHV0LWZpZWxkLmRpdG8tdGltZS1waWNrZXItaW5wdXQoXG4gICAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6dmFsdWU9XCJjdXJyZW50VGV4dFwiXG4gICAgICByZWFkb25seVxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgICApXG4gICAgLy8gaWNvbih0eXBlPVwidGltZVwiXG4gICAgLy8gICA6Y29sb3I9XCJkaXNhYmxlZCA/ICcjYmZiZmJmJyA6ICh0ZXh0ID8gJyM2NjYnIDogJyNiZmJmYmYnKVwiXG4gICAgLy8gKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwKFxuICAgICAgc2xvdD1cInBvcHVwXCJcbiAgICApXG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIoXG4gICAgICAgICAgcmVmPVwiaG91clwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDBcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogaG91ciA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItbWludXRlKFxuICAgICAgICAgIHJlZj1cIm1pbnV0ZVwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDFcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRNaW51dGUoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgIEBjbGljaz1cIm1pbnV0ZSA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItc2Vjb25kKFxuICAgICAgICAgIHJlZj1cInNlY29uZFwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDJcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRTZWNvbmQoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBzZWNvbmQgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10aW1lLXBpY2tlclxuICAgIC5kaXRvLWlucHV0XG4gICAgICB3aWR0aDogMTAwJVxuXG4gIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwXG4gICAgbWF4LXdpZHRoOiAxNjBweFxuICAgIG1hcmdpbjogJHBvcHVwLW1hcmdpblxuXG4gICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDogMjRweFxuICAuZGl0by10aW1lLXBpY2tlclxuICAgIC5kaXRvLWlucHV0XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAuZGl0by1pY29uLXRpbWVcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIHRvcDogMFxuICAgICAgICByaWdodDogN3B4XG4gICAgICAgIGhlaWdodDogMTAwJVxuXG4gIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwXG4gICAgbGlzdC1zdHlsZTogbm9uZVxuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3dcbiAgICBvdmVyZmxvdzogaGlkZGVuXG5cbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICBmbG9hdDogbGVmdFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci13aWR0aDogMCAxcHggMFxuICAgIG1hcmdpbi1sZWZ0OiAtMXB4XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyAzICsgMXB4KVxuICAgIG92ZXJmbG93OiBoaWRkZW5cbiAgICAmOmxhc3QtY2hpbGRcbiAgICAgIGJvcmRlci1yaWdodDogMFxuICAgIHVsXG4gICAgICBvdmVyZmxvdy14OiBoaWRkZW5cbiAgICAgIG92ZXJmbG93LXk6IGF1dG9cbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmVcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBtYXJnaW46IDBcbiAgICAgIC8vIEhpZGUgc2Nyb2xsYmFyOlxuICAgICAgYm94LXNpemluZzogY29udGVudC1ib3hcbiAgICAgIHBhZGRpbmc6IDAgMTdweCAwIDBcbiAgICAgIGhlaWdodDogNyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgJiA+IGxpXG4gICAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICBoZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgICBsaW5lLWhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlclxuICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW5cbiAgICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgICBtYXJnaW4tdG9wOiAzICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICAgJjpob3ZlclxuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcbiAgICAgICAgJi5zZWxlY3RlZCxcbiAgICAgICAgJi5zZWxlY3RlZDpob3ZlclxuICAgICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgJi5kaXNhYmxlZFxuICAgICAgICAgIGN1cnNvcjogZGVmYXVsdFxuICAgICAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWRcbiAgICAgICAgJi5kaXNhYmxlZDpob3ZlclxuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQge1xuICBjb3B5RGF0ZSwgc2Nyb2xsVG8sIHNldFNlbGVjdGlvbiwgZ2V0S2V5TmF2aWdhdGlvblxufSBmcm9tICcuLi91dGlscy9pbmRleC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIElucHV0RmllbGQgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBkaXNhYmxlZEhvdXI6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgZGlzYWJsZWRNaW51dGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgZGlzYWJsZWRTZWNvbmQ6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBzZWxlY3Rpb246IDAsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWVcbiAgICAgICAgPyBgJHtcbiAgICAgICAgICB0aGlzLmxlZnRQYWQodGhpcy5ob3VyKX06JHtcbiAgICAgICAgICB0aGlzLmxlZnRQYWQodGhpcy5taW51dGUpfToke1xuICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLnNlY29uZCl9YFxuICAgICAgICA6ICcnXG4gICAgfSxcblxuICAgIGN1cnJlbnREYXRlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgfHxcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IERhdGUoKSBvYmplY3Qgd2l0aCB0aGUgdGltZSBzZXQgdG8gMCwgdG8gYmUgdXNlZCB3aGVuXG4gICAgICAgIC8vIGZpcnN0IHNldHRpbmcgYW55IG9mIHRoZSB0aW1lcywgZm9yIG1lYW5pbmdmdWwgZGF0ZXMgaW4gY2FzZSB0aGVcbiAgICAgICAgLy8gb2JqZWN0IGlzIHNoYXJlZCB3aXRoIGEgRGF0ZVBpY2tlciwgZS5nLiB0aHJvdWdoIERhdGVUaW1lUGlja2VyLlxuICAgICAgICBjb3B5RGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIGhvdXI6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0SG91cnMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KGhvdXIpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgaG91ciB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtaW51dGU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0TWludXRlcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQobWludXRlKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IG1pbnV0ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWNvbmQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0U2Vjb25kcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoc2Vjb25kKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IHNlY29uZCB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoK25ld1ZhbCAhPT0gK29sZFZhbCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoZGF0ZSkge1xuICAgICAgaWYgKCtkYXRlICE9PSArdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgZGF0ZSlcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dDogJ3VwZGF0ZVNlbGVjdGlvbicsXG5cbiAgICBzZWxlY3Rpb246ICd1cGRhdGVTZWxlY3Rpb24nLFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKClcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoMClcbiAgICAgIH1cbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgbmV3VmFsKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KG5ld1ZhbCA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy4kb24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGxlZnRQYWQodmFsdWUpIHtcbiAgICAgIHJldHVybiAoJzAnICsgdmFsdWUpLnNsaWNlKC0yKVxuICAgIH0sXG5cbiAgICBzZXRUaW1lKHBhcmFtKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGNvcHlEYXRlKHRoaXMuY3VycmVudERhdGUsIHBhcmFtKVxuICAgIH0sXG5cbiAgICB1cGRhdGVTZWxlY3Rpb24oZm9yY2UgPSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMuc2hvd1BvcHVwIHx8IGZvcmNlKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gMyAqIHRoaXMuc2VsZWN0aW9uXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbih0aGlzLiRyZWZzLmlucHV0LCBzdGFydCwgc3RhcnQgKyAyKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2Nyb2xsQWxsKGR1cmF0aW9uID0gMTAwKSB7XG4gICAgICBjb25zdCBzY3JvbGwgPSAocmVmLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRyZWZzW3JlZl1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIC8vIEZpcnN0IGFuZCBhbHN0IG9uZSBhZGQgMyB0aW1lcyB0aGUgbWFyZ2luXG4gICAgICAgICAgY29uc3QgbGluZUhlaWdodCA9IHRhcmdldC5zY3JvbGxIZWlnaHQgLyAodGFyZ2V0LmNoaWxkcmVuLmxlbmd0aCArIDYpXG4gICAgICAgICAgc2Nyb2xsVG8odGFyZ2V0LCBNYXRoLnJvdW5kKHZhbHVlICogbGluZUhlaWdodCksIGR1cmF0aW9uKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHNjcm9sbCgnaG91cicsIHRoaXMuaG91cilcbiAgICAgICAgc2Nyb2xsKCdtaW51dGUnLCB0aGlzLm1pbnV0ZSlcbiAgICAgICAgc2Nyb2xsKCdzZWNvbmQnLCB0aGlzLnNlY29uZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBbJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCddW3RoaXMuc2VsZWN0aW9uXVxuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIGNvbnN0IHsgaG9yLCB2ZXIsIGVudGVyIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgICBpZiAoaG9yKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdGlvbiArIGhvclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID1cbiAgICAgICAgICAgIHZhbHVlIDwgMCA/IDJcbiAgICAgICAgICAgIDogdmFsdWUgPiAyID8gMFxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB9IGVsc2UgaWYgKHZlcikge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tzZWxlY3RlZF0gKyB2ZXJcbiAgICAgICAgICBjb25zdCB7IGxlbmd0aCB9ID0gdGhpcy4kcmVmc1tzZWxlY3RlZF0uY2hpbGRyZW5cbiAgICAgICAgICB0aGlzW3NlbGVjdGVkXSA9XG4gICAgICAgICAgICB2YWx1ZSA8IDAgPyB2YWx1ZSArIGxlbmd0aFxuICAgICAgICAgICAgOiB2YWx1ZSA+PSBsZW5ndGggPyB2YWx1ZSAtIGxlbmd0aFxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG9yIHx8IHZlciB8fCBlbnRlcikge1xuICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRydWUpXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWRhdGUtdGltZS1waWNrZXIoXG4gIHJlZj1cInBpY2tlclwiXG4pXG4gIC5kaXRvLXBpY2tlcnMoXG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gIClcbiAgICBkYXRlLXBpY2tlcihcbiAgICAgIHJlZj1cImRhdGVcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIDpzaG93LnN5bmM9XCJzaG93RGF0ZVwiXG4gICAgICBAZm9jdXM9XCJkYXRlRm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJkYXRlRm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2Vob2xkZXIsIGxvY2FsZSwgZGF0ZUZvcm1hdCwgZGlzYWJsZWQgfVwiXG4gICAgKVxuICAgIHRpbWUtcGlja2VyKFxuICAgICAgcmVmPVwidGltZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIDpzaG93LnN5bmM9XCJzaG93VGltZVwiXG4gICAgICBAZm9jdXM9XCJ0aW1lRm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJ0aW1lRm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgZGlzYWJsZWQgfVwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZGF0ZS10aW1lLXBpY2tlcihcbiAgICByZWY9XCJwaWNrZXJcIlxuICApXG4gICAgLmRpdG8tcGlja2VycyhcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICAgIClcbiAgICAgIGRhdGUtcGlja2VyKFxuICAgICAgICByZWY9XCJkYXRlXCJcbiAgICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICAgIDpzaG93LnN5bmM9XCJzaG93RGF0ZVwiXG4gICAgICAgIEBmb2N1cz1cImRhdGVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICAgIEBibHVyPVwiZGF0ZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2Vob2xkZXIsIGxvY2FsZSwgZGF0ZUZvcm1hdCwgZGlzYWJsZWQgfVwiXG4gICAgICApXG4gICAgICB0aW1lLXBpY2tlcihcbiAgICAgICAgcmVmPVwidGltZVwiXG4gICAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlwiXG4gICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgICA6c2hvdy5zeW5jPVwic2hvd1RpbWVcIlxuICAgICAgICBAZm9jdXM9XCJ0aW1lRm9jdXNlZCA9IHRydWVcIlxuICAgICAgICBAYmx1cj1cInRpbWVGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIGRpc2FibGVkIH1cIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWRhdGUtdGltZS1waWNrZXJcbiAgICAuZGl0by1waWNrZXJzXG4gICAgICBAZXh0ZW5kICVpbnB1dFxuICAgICAgcGFkZGluZzogMFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgLmRpdG8taW5wdXRcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgICBib3JkZXI6IDBcbiAgICAuZGl0by1kYXRlLXBpY2tlclxuICAgICAgd2lkdGg6IDYwJVxuICAgICAgbWluLXdpZHRoOiA2LjllbVxuICAgICAgLmRpdG8taW5wdXRcbiAgICAgICAgcGFkZGluZy1yaWdodDogMFxuICAgIC5kaXRvLXRpbWUtcGlja2VyXG4gICAgICB3aWR0aDogNDAlXG4gICAgICBtaW4td2lkdGg6IDUuNGVtXG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDBcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tICcuL0RhdGVQaWNrZXIudnVlJ1xuaW1wb3J0IFRpbWVQaWNrZXIgZnJvbSAnLi9UaW1lUGlja2VyLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGVGb3JtYXQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiBkZWZhdWx0Rm9ybWF0cy5kYXRlIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBzaG93RGF0ZTogZmFsc2UsXG4gICAgICBzaG93VGltZTogZmFsc2UsXG4gICAgICBkYXRlRm9jdXNlZDogZmFsc2UsXG4gICAgICB0aW1lRm9jdXNlZDogZmFsc2UsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlRm9jdXNlZCB8fCB0aGlzLnRpbWVGb2N1c2VkXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KG5ld1ZhbCA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy4kb24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5kYXRlLmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuZGF0ZS5ibHVyKClcbiAgICAgIHRoaXMuJHJlZnMudGltZS5ibHVyKClcbiAgICB9XG4gIH1cbn1cblxuPC9zY3JpcHQ+XG4iLCJcbmkuZGl0by1pY29uKDpjbGFzcz1cImBkaXRvLWljb24tJHtuYW1lfWBcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGkuZGl0by1pY29uKDpjbGFzcz1cImBkaXRvLWljb24tJHtuYW1lfWBcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAvLyBgeWFybiBidWlsZDppY29uc2AgY29udmVydHMgdGhlIGljb24gU1ZHIGZpbGVzIHRvIHNpbGVudCBjbGFzc2VzIGluc2lkZVxuICAvLyBgc3JjL3N0eWxlcy9taXhpbnMvX2ljb25zLnNhc3NgLCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgdG8gYWxsIG90aGVyIHNhc3NcbiAgLy8gY29kZSB0aHJvdWdoIGBfaW1wb3J0c2AuXG4gIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIHRoZW0gYXMgbm9ybWFsIENTUyBjbGFzc2VzLCBjb252ZXJ0IHRoZW0gaGVyZTpcbiAgQGVhY2ggJG5hbWUgaW4gJGljb25zXG4gICAgLmRpdG8taWNvbi0jeyRuYW1lfVxuICAgICAgQGV4dGVuZCAlaWNvbi0jeyRuYW1lfVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhZ2luYXRpb24oXG4gIHYtaWY9XCJudW1QYWdlcyA+IDFcIlxuKVxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsKFxuICAgIHYtaWY9XCJzaG93VG90YWxcIlxuICApXG4gICAgdGVtcGxhdGUodi1pZj1cInRvdGFsID4gMFwiKSB7eyBmaXJzdCB9fSDigJMge3sgbGFzdCB9fVxuICAgIHRlbXBsYXRlKHYtZWxzZSkgMFxuICAgIHwgIC8ge3sgdG90YWwgfX1cbiAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWZvcj1cInBhZ2UgaW4gcGFnZVJhbmdlXCJcbiAgICAgIEBjbGljaz1cIm9uQ2xpY2tQYWdlKHBhZ2UpXCJcbiAgICAgIDpjbGFzcz1cImdldFBhZ2VDbGFzcyhwYWdlKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJwYWdlLmRpc2FibGVkXCJcbiAgICApXG4gICAgICBzcGFuKFxuICAgICAgICB2LWlmPVwicGFnZS50ZXh0XCJcbiAgICAgICkge3sgcGFnZS50ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYWdpbmF0aW9uKFxuICAgIHYtaWY9XCJudW1QYWdlcyA+IDFcIlxuICApXG4gICAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbChcbiAgICAgIHYtaWY9XCJzaG93VG90YWxcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKHYtaWY9XCJ0b3RhbCA+IDBcIikge3sgZmlyc3QgfX0g4oCTIHt7IGxhc3QgfX1cbiAgICAgIHRlbXBsYXRlKHYtZWxzZSkgMFxuICAgICAgfCAgLyB7eyB0b3RhbCB9fVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtZm9yPVwicGFnZSBpbiBwYWdlUmFuZ2VcIlxuICAgICAgICBAY2xpY2s9XCJvbkNsaWNrUGFnZShwYWdlKVwiXG4gICAgICAgIDpjbGFzcz1cImdldFBhZ2VDbGFzcyhwYWdlKVwiXG4gICAgICAgIDpkaXNhYmxlZD1cInBhZ2UuZGlzYWJsZWRcIlxuICAgICAgKVxuICAgICAgICBzcGFuKFxuICAgICAgICAgIHYtaWY9XCJwYWdlLnRleHRcIlxuICAgICAgICApIHt7IHBhZ2UudGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhZ2luYXRpb25cbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbFxuICAgICAgK2VsbGlwc2lzXG4gICAgICBtYXJnaW46IDAgMC41ZW1cbiAgICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0XG4gICAgLmRpdG8tYnV0dG9uXG4gICAgICB0cmFuc2l0aW9uOiBhbGwgLjNzIGVhc2UsIGNvbG9yIDBzLCBiYWNrZ3JvdW5kIDBzLCBib3JkZXIgMHNcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgIHBhZGRpbmc6IDAgMC41ZW1cbiAgICAgICYtcHJldixcbiAgICAgICYtbmV4dFxuICAgICAgICAmOjpiZWZvcmVcbiAgICAgICAgICBAZXh0ZW5kICVpY29uLWFycm93XG4gICAgICAmLXByZXY6OmJlZm9yZVxuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSlcbiAgICAgICYtZWxsaXBzaXMtcHJldixcbiAgICAgICYtZWxsaXBzaXMtbmV4dFxuICAgICAgICAmOjpiZWZvcmVcbiAgICAgICAgICBAZXh0ZW5kICVpY29uLWVsbGlwc2lzXG4gICAgICAgICY6aG92ZXI6OmJlZm9yZVxuICAgICAgICAgIEBleHRlbmQgJWljb24tY2hldnJvbnNcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgICBib3JkZXI6IDBcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG4gICAgICAgICY6Zm9jdXNcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICAmOmFjdGl2ZVxuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmVcbiAgICAgICYtZWxsaXBzaXMtcHJldjo6YmVmb3JlXG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBwYWdlOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9LFxuICAgIHBhZ2VTaXplOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMTAgfSxcbiAgICBzaG93VG90YWw6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVJhbmdlOiBbXSxcbiAgICAgIHNob3dQcmV2OiB0cnVlLFxuICAgICAgc2hvd05leHQ6IHRydWUsXG4gICAgICBudW1QYWdlczogMCxcbiAgICAgIGN1cnJlbnRQYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLnBhZ2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmaXJzdCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5jdXJyZW50UGFnZVNpemUgKyAxXG4gICAgfSxcblxuICAgIGxhc3QoKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5maXJzdCArIHRoaXMuY3VycmVudFBhZ2VTaXplIC0gMSwgdGhpcy50b3RhbClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB0b3RhbDogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd1ByZXY6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuICAgIHNob3dOZXh0OiAndXBkYXRlUGFnZVJhbmdlJyxcblxuICAgIHBhZ2UocGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VcbiAgICB9LFxuXG4gICAgcGFnZVNpemUocGFnZVNpemUpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gcGFnZVNpemVcbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2VTaXplKGN1cnJlbnRQYWdlU2l6ZSkge1xuICAgICAgdGhpcy5udW1QYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0aGlzLm51bVBhZ2VzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLm51bVBhZ2VzXG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gICAgICB0aGlzLiRlbWl0KCdzaXplLWNoYW5nZScsIHRoaXMucGFnZSwgY3VycmVudFBhZ2VTaXplKVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnBhZ2UnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZVxuICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrUGFnZShwYWdlKSB7XG4gICAgICBpZiAocGFnZS5pbmRleCAmJiAhcGFnZS5kaXNhYmxlZCAmJiBwYWdlLmluZGV4ICE9PSB0aGlzLmN1cnJlbnRQYWdlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlLmluZGV4XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFBhZ2VDbGFzcyhwYWdlKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICAnZGl0by1zZWxlY3RlZCc6IHBhZ2UuYWN0aXZlXG4gICAgICB9XG4gICAgICBpZiAocGFnZS50eXBlKSB7XG4gICAgICAgIGNsYXNzZXNbYGRpdG8tYnV0dG9uLSR7cGFnZS50eXBlfWBdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgdXBkYXRlUGFnZVJhbmdlKCkge1xuICAgICAgY29uc3QgeyBzaG93UHJldiwgc2hvd05leHQsIHRvdGFsLCBjdXJyZW50UGFnZVNpemUsIGN1cnJlbnRQYWdlIH0gPSB0aGlzXG4gICAgICBjb25zdCBzaG93TGVuZ3RoID0gc2hvd1ByZXYgKyBzaG93TmV4dCArIDFcbiAgICAgIGNvbnN0IG51bVBhZ2VzID0gdGhpcy5udW1QYWdlcyA9IE1hdGguY2VpbCh0b3RhbCAvIGN1cnJlbnRQYWdlU2l6ZSlcblxuICAgICAgbGV0IHN0YXJ0ID0gMVxuICAgICAgbGV0IGVuZCA9IDFcbiAgICAgIGlmIChudW1QYWdlcyA8PSBzaG93TGVuZ3RoKSB7XG4gICAgICAgIGVuZCA9IG51bVBhZ2VzXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlIDw9IHNob3dQcmV2ICsgMSkge1xuICAgICAgICBlbmQgPSBzaG93TGVuZ3RoXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlID49IG51bVBhZ2VzIC0gc2hvd05leHQpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgICAgc3RhcnQgPSBudW1QYWdlcyAtIHNob3dMZW5ndGggKyAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydCA9IGN1cnJlbnRQYWdlIC0gc2hvd1ByZXZcbiAgICAgICAgZW5kID0gY3VycmVudFBhZ2UgKyBzaG93TmV4dFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlUmFuZ2UgPSBbXVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgLSAxLFxuICAgICAgICB0eXBlOiAncHJldicsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA8PSAxXG4gICAgICB9KVxuICAgICAgaWYgKHN0YXJ0ID49IDIpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goeyBpbmRleDogMSwgdGV4dDogMSB9KVxuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0ID4gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWF4KDEsIGN1cnJlbnRQYWdlIC0gMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1wcmV2J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGFjdGl2ZTogaSA9PT0gY3VycmVudFBhZ2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBNYXRoLm1pbihudW1QYWdlcywgY3VycmVudFBhZ2UgKyAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLW5leHQnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZW5kIDw9IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiBudW1QYWdlcywgdGV4dDogbnVtUGFnZXMgfSlcbiAgICAgIH1cbiAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlICsgMSxcbiAgICAgICAgdHlwZTogJ25leHQnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPj0gbnVtUGFnZXNcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMucGFnZVJhbmdlID0gcGFnZVJhbmdlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc3dpdGNoKFxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbilcbiAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICBpbnB1dChcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY2hlY2tlZFwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICApXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgIHNwYW4uZGl0by1zd2l0Y2gtbGFiZWwoXG4gICAgICB2LWlmPVwibGFiZWxzXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwiY2hlY2tlZFwiXG4gICAgICAgIG5hbWU9XCJjaGVja2VkXCJcbiAgICAgICkge3sgbGFiZWxzLmNoZWNrZWQgfHwgJ29uJyB9fVxuICAgICAgc2xvdChcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIG5hbWU9XCJ1bmNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMudW5jaGVja2VkIHx8ICdvZmYnIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zd2l0Y2goXG4gICAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKVxuICAgIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgICBpbnB1dChcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgICB2LW1vZGVsPVwiY2hlY2tlZFwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgICAgdi1pZj1cImxhYmVsc1wiXG4gICAgICApXG4gICAgICAgIHNsb3QoXG4gICAgICAgICAgdi1pZj1cImNoZWNrZWRcIlxuICAgICAgICAgIG5hbWU9XCJjaGVja2VkXCJcbiAgICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICAgIHNsb3QoXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICAgICkge3sgbGFiZWxzLnVuY2hlY2tlZCB8fCAnb2ZmJyB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXN3aXRjaFxuICAgIC8vIFVzZSB3aG9sZSBtdWx0aXBsZXMgb2YgYHJlbWAgZm9yIHNpemVzIGFuZCBgcHhgIG1hcmdpbnMvcGFkZGluZyBhbG9uZ1xuICAgIC8vIHdpdGggYGNhbGMoKWAgdG8gZW5kIHVwIHdpdGggZXZlbiBwaXhlbCBzaXplcy4gYHJlbWAgaXMgbmVlZGVkIGJlY2F1c2Ugd2VcbiAgICAvLyBjaGFuZ2UgYGZvbnQtc2l6ZWAgaW5zaWRlIGAuZGl0by1zd2l0Y2gtYnV0dG9uYFxuICAgIC0tc3dpdGNoLXdpZHRoOiA0cmVtXG4gICAgLS1zd2l0Y2gtaGVpZ2h0OiAycmVtXG4gICAgLS1zd2l0Y2gtbWFyZ2luOiAycHhcbiAgICAtLXN3aXRjaC1wYWRkaW5nOiAzcHhcbiAgICAtLXN3aXRjaC1zcGVlZDogMzAwbXNcbiAgICAtLWxhYmVsLW1hcmdpbjogMC41ZW1cblxuICAgIC0td2lkdGg6IGNhbGModmFyKC0tc3dpdGNoLXdpZHRoKSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSlcbiAgICAtLWhlaWdodDogY2FsYyh2YXIoLS1zd2l0Y2gtaGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSlcbiAgICAtLW9mZnNldDogY2FsYyh2YXIoLS13aWR0aCkgLSB2YXIoLS1oZWlnaHQpKVxuXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KVxuICAgIC8vIFRvIG1ha2UgaW5saW5lIGxhYmVscyBhcHBlYXIgb24gY29uc2lzdGVudCBiYXNlbGluZTpcbiAgICB2ZXJ0aWNhbC1hbGlnbjogLTI1JVxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIHdpZHRoOiB2YXIoLS13aWR0aClcbiAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0KVxuICAgIC5kaXRvLXN3aXRjaC1wYW5lLFxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgdG9wOiA1MCVcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKVxuICAgIGlucHV0XG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAgIGFwcGVhcmFuY2U6IG5vbmVcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbVxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0XG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgLjNzLCBiYWNrZ3JvdW5kLWNvbG9yIC4zc1xuICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgLy8gU2V0IGZvbnQtc2l6ZSB0byBoZWlnaHQsIHNvIHdlIGNhbiB1c2Ugd2lkdGgvaGVpZ2h0ID0gMWVtIGZvciBjaXJjbGU6XG4gICAgICBmb250LXNpemU6IGNhbGModmFyKC0taGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtcGFkZGluZykpXG4gICAgICB0b3A6IHZhcigtLXN3aXRjaC1wYWRkaW5nKVxuICAgICAgbGVmdDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpXG4gICAgICB3aWR0aDogMWVtXG4gICAgICBoZWlnaHQ6IDFlbVxuICAgICAgYm9yZGVyLXJhZGl1czogMC41ZW1cbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXN3aXRjaC1zcGVlZClcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKVxuICAgIC5kaXRvLXN3aXRjaC1idXR0b24sXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICByaWdodDogdmFyKC0tbGFiZWwtbWFyZ2luKVxuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZVxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICYuZGl0by1jaGVja2VkXG4gICAgICBpbnB1dFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCh2YXIoLS1vZmZzZXQpKVxuICAgICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICAgIGxlZnQ6IHZhcigtLWxhYmVsLW1hcmdpbilcbiAgICAgICAgcmlnaHQ6IHVuc2V0XG4gICAgJi5kaXRvLWRpc2FibGVkXG4gICAgICBAZXh0ZW5kICVidXR0b24tZGlzYWJsZWRcbiAgICAmOmZvY3VzLXdpdGhpbjpub3QoOmhvdmVyKVxuICAgICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsczogeyB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrZWQ6IHRoaXMudmFsdWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgY29uc3QgeyBjaGVja2VkLCBkaXNhYmxlZCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2hlY2tlZCc6IGNoZWNrZWQsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBsYWJlbHM6IHsgY2hlY2tlZCwgdW5jaGVja2VkIH0gPSB7fSB9ID0gdGhpc1xuICAgICAgLy8gQ2FsY3VsYXRlIGAtLXN3aXRjaC13aWR0aGAgaW4gYHJlbWAsIGJhc2VkIG9uIGxhYmVsIGxlbmd0aC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIGNoZWNrZWQ/Lmxlbmd0aCwgdW5jaGVja2VkPy5sZW5ndGgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zd2l0Y2gtd2lkdGgnOiBsZW5ndGggPyBgJHtsZW5ndGggKiAxLjV9cmVtYCA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIGRpc2FibGVkLCAkYXR0cnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7IGlkLCBuYW1lLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5jaGVja2VkID0gdmFsdWVcbiAgICB9LFxuXG4gICAgY2hlY2tlZChjaGVja2VkKSB7XG4gICAgICBpZiAoY2hlY2tlZCAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGNoZWNrZWQpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIGNoZWNrZWQpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgJGR1cmF0aW9uOiAwLjE1c1xuICAuaGVpZ2h0LWVudGVyLWFjdGl2ZSxcbiAgLmhlaWdodC1sZWF2ZS1hY3RpdmVcbiAgICB0cmFuc2l0aW9uOiBoZWlnaHQgJGR1cmF0aW9uICRlYXNlT3V0UXVhcnRcbiAgICBvdmVyZmxvdzogaGlkZGVuXG4gIC5oZWlnaHQtZW50ZXItYWN0aXZlXG4gICAgYW5pbWF0aW9uOiBzbGlkZS1lbnRlciAkZHVyYXRpb24gJGVhc2VPdXRRdWFydFxuICAuaGVpZ2h0LWxlYXZlLWFjdGl2ZVxuICAgIGFuaW1hdGlvbjogc2xpZGUtbGVhdmUgJGR1cmF0aW9uICRlYXNlT3V0UXVhcnRcbiAgLmhlaWdodC1lbnRlcixcbiAgLmhlaWdodC1sZWF2ZS10b1xuICAgIGhlaWdodDogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcblxuICBwcm9wczoge1xuICAgIGVuYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgcmVuZGVyOiAoY3JlYXRlRWxlbWVudCwgY29udGV4dCkgPT4gY3JlYXRlRWxlbWVudChcbiAgICAndHJhbnNpdGlvbicsXG4gICAgY29udGV4dC5wcm9wcy5lbmFibGVkXG4gICAgICA/IHtcbiAgICAgICAgcHJvcHM6IHsgbmFtZTogJ2hlaWdodCcgfSxcbiAgICAgICAgb246IGV2ZW50c1xuICAgICAgfVxuICAgICAgOiB7fSxcbiAgICBjb250ZXh0LmNoaWxkcmVuXG4gIClcbn1cblxuY29uc3Qgc2V0U3R5bGUgPSAoZWxlbWVudCwgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgZXZlbnRzID0ge1xuICBhZnRlckVudGVyKGVsZW1lbnQpIHtcbiAgICAvLyBBIHRpbWVwb3V0IGJlZm9yZSBzZXR0aW5nIHN0eWxlIGlzIG9ubHkgcmVhbGx5IG5lZWRlZCBhZnRlciBjYWxscyB0b1xuICAgIC8vIGBmb3JjZVJlcGFpbnQoKWAsIGJ1dCB1c2luZyBvbmUgaGVyZSB0b28gcHJlc2VydmVzIGV4ZWN1dGlvbiBzZXF1ZW5jZSBzb1xuICAgIC8vIHRoYXQgdGhlIGNhbGwgZnJvbSBgZW50ZXIoKWAgY2FuIG5ldmVyIG91dHJ1biB0aGUgb25lIGZyb20gYGFmdGVyRW50ZXIoKWBcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAnYXV0bycgfSkpXG4gIH0sXG5cbiAgZW50ZXIoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgd2lkdGggfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICBzZXRTdHlsZShlbGVtZW50LCB7XG4gICAgICB3aWR0aCxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgICBoZWlnaHQ6ICdhdXRvJ1xuICAgIH0pXG4gICAgY29uc3QgeyBoZWlnaHQgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICBzZXRTdHlsZShlbGVtZW50LCB7XG4gICAgICB3aWR0aDogbnVsbCxcbiAgICAgIHBvc2l0aW9uOiBudWxsLFxuICAgICAgdmlzaWJpbGl0eTogbnVsbCxcbiAgICAgIGhlaWdodDogMFxuICAgIH0pXG4gICAgZm9yY2VSZXBhaW50KGVsZW1lbnQpXG4gICAgc2V0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodCB9KSlcbiAgfSxcblxuICBsZWF2ZShlbGVtZW50KSB7XG4gICAgY29uc3QgeyBoZWlnaHQgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodCB9KVxuICAgIGZvcmNlUmVwYWludChlbGVtZW50KVxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQ6IDAgfSkpXG4gIH1cbn1cbjwvc2NyaXB0PlxuIl0sIm5hbWVzIjpbInBpY2siLCJpc0RhdGUiLCJyZW5kZXIiLCJzdGF0aWNSZW5kZXJGbnMiLCJfX3Z1ZTJfc2NyaXB0IiwiaHlwaGVuYXRlIiwiaXNTdHJpbmciLCJkZWZhdWx0Rm9ybWF0cyIsImZvcm1hdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxtQ0FBaUMsSUFBSTtBQUMxQyxVQUFNLE1BQU07QUFDWixVQUFNLE1BQU07QUFDWixVQUFNLE9BQU8sSUFBSTtBQUVqQixRQUFJLFVBQVUsSUFBSSxnQkFBZ0IsU0FBWSxJQUFJ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Z0JBQWdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzRDdkIsUUFBQUMsa0JBQUE7QUFBQSxJQUNBLE9BQUE7QUFBQSxNQUNBLE9BQUEsRUFBQSxNQUFBLE1BQUEsU0FBQSxLQUFBO0FBQUEsTUFDQSxRQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsUUFBQTtBQUFBLE1BQ0EsY0FBQSxFQUFBLE1BQUEsVUFBQSxTQUFBLE1BQUEsTUFBQTtBQUFBLE1BQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBQ0EsWUFBQSxFQUFBLGNBQUEsZUFBQSxlQUFBLEtBQUEsTUFBQTtBQUNBLGFBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsV0FBQSxDQUFBO0FBQUEsUUFDQSxXQUFBLENBQUE7QUFBQSxRQUNBLGNBQ0EsS0FBQSxTQUVBLFNBQUEsSUFBQSxLQUFBLEdBQUEsRUFBQSxNQUFBLEdBQUEsUUFBQSxHQUFBLFFBQUEsR0FBQTtBQUFBLFFBQ0EsYUFBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFBQSxNQUNBLGNBQUE7QUFBQSxNQUNBLGNBQUE7QUFBQSxNQUVBLE1BQUEsUUFBQSxRQUFBO0FBQ0EsWUFBQSxDQUFBLFdBQUEsQ0FBQSxRQUFBO0FBQ0EsZUFBQSxlQUFBLFVBQUEsSUFBQSxLQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLEtBQUEsTUFBQTtBQUNBLGFBQUEsY0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsV0FBQSxnQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFBQSxNQUNBLGNBQUEsT0FBQTtBQUNBLGVBQUE7QUFBQSxVQUNBLDZCQUNBLEtBQUEsU0FBQSxVQUFBLEtBQUEsTUFBQSxTQUFBLEtBQ0EsS0FBQSxhQUFBLFlBQUEsTUFBQSxLQUFBLE1BQUEsWUFBQTtBQUFBLFVBQ0EsOEJBQ0EsVUFBQSxLQUFBLGFBQUEsU0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsTUFFQSxhQUFBLE1BQUE7QUFDQSxlQUFBO0FBQUEsVUFDQSw2QkFDQSxLQUFBLFNBQUEsU0FBQSxLQUFBLE1BQUEsWUFBQTtBQUFBLFVBQ0EsOEJBQ0EsU0FBQSxLQUFBLGFBQUEsWUFBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsTUFFQSxRQUFBLFdBQUE7QUFDQSxhQUFBLGVBQUEsU0FBQSxLQUFBLGNBQUEsU0FBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFdBQUEsTUFBQTtBQUNBLGFBQUEsUUFBQTtBQUFBLFVBQ0EsTUFBQSxLQUFBLGFBQUEsWUFBQSxJQUFBLE9BQUE7QUFBQSxRQUNBLENBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxRQUFBLE1BQUE7QUFDQSxhQUFBLGNBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxVQUFBLE1BQUE7QUFDQSxjQUFBLEVBQUEsaUJBQUE7QUFDQSxjQUFBLEVBQUEsTUFBQSxVQUFBLEtBQUEsYUFDQSxhQUFBLFlBQUEsR0FDQSxhQUFBLFNBQUEsSUFBQSxJQUNBO0FBQ0EsYUFBQSxRQUFBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsS0FBQSxLQUFBLElBQ0EsS0FBQSxZQUFBLE1BQUEsS0FBQSxHQUNBLEtBQUEsYUFBQSxRQUFBLENBQ0E7QUFBQSxRQUNBLENBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxTQUFBLE1BQUE7QUFDQSxhQUFBLFFBQUE7QUFBQSxVQUNBLE1BQUEsS0FBQSxhQUFBLFlBQUEsSUFBQTtBQUFBLFFBQ0EsQ0FBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFdBQUEsTUFBQSxPQUFBLE9BQUEsT0FBQTtBQUNBLFlBQUEsVUFBQSxZQUFBO0FBQ0EsY0FBQSxNQUFBO0FBQ0EsaUJBQUEsUUFBQTtBQUFBLGNBQ0EsTUFBQSxLQUFBLFlBQUE7QUFBQSxjQUNBLE9BQUEsS0FBQSxTQUFBO0FBQUEsY0FDQSxLQUFBLEtBQUEsUUFBQTtBQUFBLFlBQ0EsQ0FBQTtBQUFBLFVBQ0EsT0FBQTtBQUNBLGlCQUFBLGVBQUE7QUFBQSxVQUNBO0FBQ0EsZUFBQSxNQUFBLFNBQUEsS0FBQSxZQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFlBQUEsT0FBQTtBQUNBLGFBQUEsUUFBQSxLQUFBO0FBQ0EsYUFBQSxRQUFBLEVBQUEsT0FBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFdBQUEsTUFBQTtBQUNBLGFBQUEsUUFBQSxPQUFBO0FBQ0EsYUFBQSxRQUFBLEVBQUEsTUFBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLGFBQUEsTUFBQSxPQUFBO0FBQ0EsWUFBQSxRQUFBLElBQUE7QUFDQTtBQUNBLGtCQUFBO0FBQUEsUUFDQSxXQUFBLFFBQUEsR0FBQTtBQUNBO0FBQ0Esa0JBQUE7QUFBQSxRQUNBO0FBQ0EsZUFBQSxFQUFBLE1BQUEsTUFBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLGFBQUEsTUFBQSxFQUFBLE1BQUEsT0FBQSxPQUFBO0FBQ0EsZUFBQSxLQUFBLGVBQUEsS0FBQSxRQUFBO0FBQUEsVUFDQSxNQUFBLFFBQUE7QUFBQSxVQUNBLE9BQUEsU0FBQTtBQUFBLFVBQ0EsS0FBQSxPQUFBO0FBQUEsUUFDQSxDQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsZUFBQSxNQUFBO0FBQ0EsY0FBQSxPQUFBLEtBQUEscUJBQUEsS0FBQSxZQUFBLENBQUE7QUFDQSxlQUFBLEdBQUEsZUFBQSxPQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsWUFBQSxNQUFBLE9BQUE7QUFDQSxjQUFBLGNBQUEsQ0FBQSxJQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsRUFBQTtBQUVBLGVBQUEsVUFBQSxLQUFBLEVBQUEsUUFBQSxRQUFBLENBQUEsUUFBQSxNQUFBLE9BQUEsT0FDQSxLQUNBLFlBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxxQkFBQSxNQUFBO0FBQ0EsY0FBQSxVQUFBLEtBQUEsU0FBQTtBQUNBLGVBQUEsQ0FBQSxHQUFBLFFBQUEsTUFBQSxHQUFBLEVBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxTQUFBLEVBQUEsS0FBQSxLQUFBLFNBQUE7QUFDQSxjQUFBLEVBQUEsYUFBQSxpQkFBQTtBQUNBLFlBQUEsT0FBQSxLQUFBO0FBQ0Esa0JBQUE7QUFBQSxpQkFDQTtBQUNBLG1CQUFBLFFBQUE7QUFBQSxnQkFDQSxLQUFBLGFBQUEsUUFBQSxJQUFBLE1BQUEsTUFBQTtBQUFBLGNBQ0EsQ0FBQTtBQUNBO0FBQUEsaUJBQ0E7QUFDQSxtQkFBQSxRQUFBO0FBQUEsZ0JBQ0EsT0FBQSxhQUFBLFNBQUEsSUFBQSxNQUFBLE1BQUE7QUFBQSxjQUNBLENBQUE7QUFDQTtBQUFBLGlCQUNBO0FBQ0EsbUJBQUEsUUFBQTtBQUFBLGdCQUNBLE1BQUEsYUFBQSxZQUFBLElBQUEsTUFBQSxNQUFBO0FBQUEsY0FDQSxDQUFBO0FBQ0E7QUFBQTtBQUVBLGlCQUFBO0FBQUEsUUFDQSxXQUFBLE9BQUE7QUFDQSxrQkFBQTtBQUFBLGlCQUNBO0FBQ0EsbUJBQUEsV0FBQSxZQUFBO0FBQ0E7QUFBQSxpQkFDQTtBQUNBLG1CQUFBLFFBQUEsS0FBQTtBQUNBO0FBQUEsaUJBQ0E7QUFDQSxtQkFBQSxRQUFBLE9BQUE7QUFDQTtBQUFBO0FBRUEsaUJBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLE1BRUEsa0JBQUE7QUFDQSxhQUFBLFlBQUEsQ0FBQTtBQUNBLGFBQUEsWUFBQSxDQUFBO0FBRUEsY0FBQSxFQUFBLGlCQUFBO0FBQ0EsY0FBQSxPQUFBLGFBQUEsWUFBQTtBQUNBLGNBQUEsUUFBQSxhQUFBLFNBQUE7QUFDQSxjQUFBLFlBQUEsS0FBQSxxQkFBQSxJQUFBO0FBQ0EsaUJBQUEsSUFBQSxHQUFBLElBQUEsSUFBQSxLQUFBO0FBQ0EsZUFBQSxVQUFBLEtBQUEsWUFBQSxDQUFBO0FBQUEsUUFDQTtBQUNBLGNBQUEsb0JBQUEsSUFBQSxLQUFBLE1BQUEsT0FBQSxDQUFBO0FBQ0EsWUFBQSxlQUFBLGtCQUFBLE9BQUEsSUFBQTtBQUNBLFlBQUEsaUJBQUEsR0FBQTtBQUNBLHlCQUFBO0FB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QSxNQUNBLE1BQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxNQUFBO0FBQUEsTUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsTUFBQTtBQUFBLE1BQ0EsUUFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLFdBQUEsR0FBQSxTQUFBLEtBQUE7QUFBQSxNQUNBLGFBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsTUFDQSxRQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsRUFBQTtBQUFBLE1BQ0EsWUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEtBQUE7QUFBQSxNQUNBLHNCQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsS0FBQTtBQUFBLE1BQ0EsWUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLE1BQUE7QUFBQSxNQUNBLE9BQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxNQUFBO0FBQUEsTUFDQSxXQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsRUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxXQUFBLEtBQUE7QUFBQSxRQUNBLGdCQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQTtBQUFBLE1BQ0EsZUFBQTtBQUNBLGVBQUE7QUFBQSxVQUNBLHlCQUFBLEtBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLE1BRUEsYUFBQTtBQUNBLGNBQUEsVUFBQTtBQUFBLFVBQ0EsQ0FBQSxjQUFBQyxNQUFBLFVBQUEsS0FBQSxTQUFBLE1BQUE7QUFBQSxRQUNBO0FBQ0EsWUFBQSxLQUFBLGFBQUE7QUFDQSxrQkFBQSxLQUFBLGVBQUE7QUFBQSxRQUNBO0FBQ0EsZUFBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLGFBQUE7QUFDQSxlQUFBLEtBQUEsU0FBQSxZQUFBLEtBQUEsV0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBQUEsTUFDQSxLQUFBLE1BQUE7QUFDQSxhQUFBLFlBQUEsUUFBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsVUFBQSxRQUFBLFFBQUE7QUFDQSxZQUFBLENBQUEsV0FBQSxDQUFBLFFBQUE7QUFDQSxlQUFBLE1BQUEsZUFBQSxNQUFBO0FBQ0EsY0FBQSxRQUFBO0FBQ0EsaUJBQUEsVUFBQSxNQUFBLEtBQUEsZUFBQSxDQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQTtBQUNBLFlBQUEsRUFBQSxTQUFBLFVBQUEsS0FBQTtBQUNBLFVBQUEsS0FBQSxZQUFBLFNBQUE7QUFDQSxjQUFBLFNBQUEsUUFBQSxjQUFBLGlCQUFBO0FBQ0EsWUFBQSxRQUFBO0FBQ0EsZUFBQSxjQUFBLFVBQUEsUUFBQTtBQUFBLFlBQ0EsT0FBQSxNQUFBO0FBQ0EsbUJBQUEsWUFBQTtBQUFBLFlBQ0E7QUFBQSxZQUNBLE1BQUEsTUFBQTtBQUNBLG1CQUFBLFlBQUE7QUFBQSxZQUNBO0FBQUEsVUFDQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFFQSxVQUFBLEtBQUEsd0JBQUEsQ0FBQSxLQUFBLFlBQUE7QUFJQSxhQUFBLGNBQUEsVUFBQSxRQUFBO0FBQUEsVUFDQSxTQUFBLFdBQUE7QUFDQSxnQkFDQSxLQUFBLGFBQ0EsQ0FBQSxNQUFBLFNBQUEsTUFBQSxNQUFBLEtBQ0EsQ0FBQSxRQUFBLFNBQUEsTUFBQSxNQUFBLEdBQ0E7QUFDQSxtQkFBQSxZQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUVBLE1BQUEsTUFBQTtBQUNBLGlCQUFBLFlBQUE7QUFBQSxVQUNBO0FBQUEsUUFDQSxDQUFBO0FBQUEsTUFDQTtBQUVBLFVBQUEsS0FBQSxZQUFBO0FBQ0EsYUFBQSxZQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxXQUFBLFlBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBOztBQUNBLGlCQUFBLGdCQUFBLG1CQUFBO0FBQ0EsaUJBQUEsZ0JBQUEsbUJBQUE7QUFDQSxXQUFBLGtCQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUFBLE1BQ0EsaUJBQUE7QUFDQSxjQUFBLEVBQUEsU0FBQSxVQUFBLEtBQUE7QUFDQSxZQUFBLEtBQUEsUUFBQSxNQUFBLGdCQUFBLEdBQUE7QUFDQSxxQkFBQSxNQUFBLEtBQUEsZUFBQSxHQUFBLENBQUE7QUFDQTtBQUFBLFFBQ0E7QUFFQSxjQUFBLFNBQUFDLE1BQUFBLFNBQUEsS0FBQSxNQUFBLElBQ0EsS0FBQSxNQUFBLEtBQUEsVUFDQSxLQUFBO0FBQ0EsWUFBQSxRQUFBO0FBRUEsZ0JBQUEsS0FBQSxXQUFBLFFBQUEsVUFBQSxNQUFBO0FBQ0EsYUFBQSxNQUFBLFFBQUEsaUJBQUEsTUFBQSxFQUFBO0FBQUEsUUFDQTtBQUVBLGNBQUEsU0FBQSxXQUFBLFNBQUEsc0JBQUE7QUFDQSxjQUFBLGNBQUEsT0FBQSxPQUFBLE9BQUE7QUFDQSxjQUFBLGFBQUEsT0FBQSxNQUFBLE9BQUE7QUFDQSxjQUFBLGVBQUEsT0FBQTtBQUNBLGNBQUEsZ0JBQUEsT0FBQTtBQUNBLGNBQUEsYUFBQSxNQUFBO0FBQ0EsY0FBQSxjQUFBLE1BQUE7QUFFQSxZQUFBLENBQUEsT0FBQSxTQUFBLEtBQUEsZUFBQSxNQUFBLEdBQUEsS0FBQSxDQUFBO0FBQ0EsWUFBQSxLQUFBLFlBQUE7QUFDQSxnQkFBQSxXQUFBLE9BQUE7QUFDQSxnQkFBQSxZQUFBLE9BQUE7QUFDQSxjQUFBLFVBQUEsT0FBQTtBQUNBLGdCQUFBLGFBQUEsYUFBQTtBQUNBLHNCQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0EsV0FBQSxVQUFBLFVBQUE7QUFDQSxnQkFBQSxZQUFBLGFBQUEsZ0JBQUEsYUFBQTtBQUNBLHNCQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0EsV0FBQSxVQUFBLFFBQUE7QUFDQSxnQkFBQSxjQUFBLFlBQUE7QUFDQSxzQkFBQTtBQUFBLFlBQ0E7QUFBQSxVQUNBLFdBQUEsVUFBQSxTQUFBO0FBQ0EsZ0JBQUEsV0FBQSxjQUFBLGVBQUEsWUFBQTtBQUNBLHNCQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0E7QUFFQSxjQUFBLFVBQUEsT0FBQTtBQUNBLGdCQUFBLFlBQUEsYUFBQSxhQUFBO0FBQ0Esc0JBQUE7QUFBQSxZQUNBO0FBQUEsVUFDQSxXQUFBLFVBQUEsVUFBQTtBQUNBLGdCQUFBLGFBQUEsZ0JBQUEsYUFBQTtBQUNBLHNCQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0EsV0FBQSxVQUFBLFFBQUE7QUFDQSxnQkFBQSxXQUFBLGNBQUEsWUFBQTtBQUNBLHNCQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0EsV0FBQSxVQUFBLFNBQUE7QUFDQSxnQkFBQSxjQUFBLGVBQUEsWUFBQTtBQUNBLHNCQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNBO0FBRUEsWUFBQSxPQUFBO0FBQ0EsWUFBQSxNQUFBO0FBQ0EsZ0JBQUE7QUFBQSxlQUNBO0FBQ0EsbUJBQUE7QUFDQTtBQUFBLGVBQ0E7QUFDQSxvQkFBQTtBQUNBO0FBQUEsZUFDQTtBQUNBLG9CQUFBO0FBQ0E7QUFBQSxlQUNBO0FBQ0EsbUJBQUE7QUFDQTtBQUFBO0FBRUEsZ0JBQUE7QUFBQSxlQUNBO0FBQ0Esb0JBQUEsYUFBQTtBQUNBO0FBQUEsZUFDQTtBQUNBLG1CQUFBLGNBQUE7QUFDQTtBQUFBO0FBRUEsWUFBQSxLQUFBLE9BQUE7QUFDQSxjQUFBLFVBQUEsT0FBQTtBQUNBLG1CQUFBO0FBQUEsVUFDQSxXQUFBLFVBQUEsVUFBQTtBQUNBLG1CQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0E7QUFDQSxZQUFBLFVBQUEsV0FBQSxTQUFBO0FBQ0EsZ0JBQUEsZ0JBQUEsUUFBQSxzQkFBQTtBQUNBLGtCQUFBLGNBQUEsY0FBQTtBQUNBLGlCQUFBLGFBQUEsY0FBQTtBQUFBLFFBQ0E7QUFDQSxjQUFBLE1BQUEsT0FBQSxHQUFBO0FBQ0EsY0FBQSxNQUFBLE1BQUEsR0FBQTtBQUVBLGFBQUEsTUFBQSxtQkFBQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQSxXQUFBLEtBQUE7QUFBQSxRQUNBLENBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxVQUFBO0FBQ0EsWUFBQSxDQUFBLEtBQUEsVUFBQTtB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QUFBLFFBQ0EsVUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQUEsTUFDQSxhQUFBO0FBQ0EsY0FBQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxZQUNBO0FBQ0EsZUFBQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsR0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsTUFFQSxZQUFBO0FBR0EsY0FBQSxFQUFBLFVBQUEsY0FBQSxLQUFBO0FBQ0EsZUFBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLE9BQUE7QUFFQSxjQUFBLEVBQUEsTUFBQSxLQUFBLFFBQUEsS0FBQTtBQUNBLGNBQUEsWUFBQSxXQUFBLFNBQUEsT0FBQSxHQUFBLFFBQUEsU0FBQTtBQUNBLGVBQUEsUUFBQSxVQUFBLEdBQUEsS0FBQSxVQUFBLEdBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBQUEsTUFDQSxNQUFBLFFBQUEsUUFBQTtBQUNBLFlBQUEsV0FBQSxRQUFBO0FBQ0EsZUFBQSxlQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLGFBQUEsUUFBQTtBQUNBLFlBQUEsV0FBQSxLQUFBLE9BQUE7QUFDQSxlQUFBLE1BQUEsU0FBQSxNQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FBQUEsTUFDQSxRQUFBO0FBQ0EsYUFBQSxNQUFBLE1BQUEsTUFBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLE9BQUE7QUFDQSxhQUFBLE1BQUEsTUFBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBOzs7Ozs7Ozs7Ozs7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QUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQ0EsZUFBQSxLQUFBLGdCQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxjQUFBO0FBQ0EsZUFBQUMsTUFBQSxPQUFBLEtBQUEsY0FBQTtBQUFBLFVBQ0EsUUFBQSxLQUFBO0FBQUEsVUFDQSxNQUFBLEtBQUE7QUFBQSxVQUNBLE1BQUE7QUFBQSxRQUNBLENBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBQUEsTUFDQSxNQUFBLFFBQUEsUUFBQTtBQUNBLFlBQUEsQ0FBQSxXQUFBLENBQUEsUUFBQTtBQUNBLGVBQUEsZUFBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsTUFFQSxhQUFBLE1BQUE7QUFDQSxZQUFBLENBQUEsU0FBQSxDQUFBLEtBQUEsT0FBQTtBQUNBLGVBQUEsVUFBQTtBQUNBLGVBQUEsTUFBQSxTQUFBLElBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLE1BRUEsS0FBQSxNQUFBO0FBQ0EsYUFBQSxZQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsVUFBQSxRQUFBLFFBQUE7QUFDQSxZQUFBLENBQUEsV0FBQSxDQUFBLFFBQUE7QUFDQSxlQUFBLE1BQUEsZUFBQSxNQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFFBQUEsUUFBQSxRQUFBO0FBQ0EsWUFBQSxDQUFBLFdBQUEsQ0FBQSxRQUFBO0FBQ0EsZUFBQSxNQUFBLFNBQUEsVUFBQSxNQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsV0FBQSxJQUFBLFFBQUEsTUFBQTtBQUNBLFlBQUEsS0FBQSxTQUFBO0FBQ0EsZUFBQSxVQUFBO0FBQ0EsZUFBQSxNQUFBLFVBQUEsS0FBQSxZQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFBQSxNQUNBLFdBQUEsTUFBQTtBQUNBLGFBQUEsZUFBQTtBQUNB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QSxjQUFBO0FBQ0EsZUFBQSxLQUFBLGVBQ0EsR0FDQSxLQUFBLFFBQUEsS0FBQSxJQUFBLEtBQ0EsS0FBQSxRQUFBLEtBQUEsTUFBQSxLQUNBLEtBQUEsUUFBQSxLQUFBLE1BQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLGNBQUE7QUFDQSxlQUNBLEtBQUEsZ0JBSUEsU0FBQSxJQUFBLEtBQUEsR0FBQSxFQUFBLE1BQUEsR0FBQSxRQUFBLEdBQUEsUUFBQSxHQUFBO0FBQUEsTUFFQTtBQUFBLE1BRUEsTUFBQTtBQUFBLFFBQ0EsTUFBQTtBQUNBLGlCQUFBLEtBQUEsWUFBQSxTQUFBO0FBQUEsUUFDQTtBQUFBLFFBRUEsSUFBQSxNQUFBO0FBQ0EsZUFBQSxRQUFBLEVBQUEsTUFBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsTUFFQSxRQUFBO0FBQUEsUUFDQSxNQUFBO0FBQ0EsaUJBQUEsS0FBQSxZQUFBLFdBQUE7QUFBQSxRQUNBO0FBQUEsUUFFQSxJQUFBLFFBQUE7QUFDQSxlQUFBLFFBQUEsRUFBQSxRQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFFBQUE7QUFBQSxRQUNBLE1BQUE7QUFDQSxpQkFBQSxLQUFBLFlBQUEsV0FBQTtBQUFBLFFBQ0E7QUFBQSxRQUVBLElBQUEsUUFBQTtBQUNBLGVBQUEsUUFBQSxFQUFBLFFBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFBQSxNQUNBLE1BQUEsUUFBQSxRQUFBO0FBQ0EsWUFBQSxDQUFBLFdBQUEsQ0FBQSxRQUFBO0FBQ0EsZUFBQSxlQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLGFBQUEsTUFBQTtBQUNBLFlBQUEsQ0FBQSxTQUFBLENBQUEsS0FBQSxPQUFBO0FBQ0EsZUFBQSxVQUFBO0FBQ0EsZUFBQSxNQUFBLFNBQUEsSUFBQTtBQUNBLGVBQUEsVUFBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsTUFFQSxhQUFBO0FBQUEsTUFFQSxXQUFBO0FBQUEsTUFFQSxLQUFBLE1BQUE7QUFDQSxhQUFBLFlBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxVQUFBLFFBQUEsUUFBQTtBQUNBLFlBQUEsUUFBQTtBQUNBLGVBQUEsZ0JBQUE7QUFDQSxlQUFBLFVBQUEsQ0FBQTtBQUFBLFFBQ0E7QUFDQSxZQUFBLENBQUEsV0FBQSxDQUFBLFFBQUE7QUFDQSxlQUFBLE1BQUEsZUFBQSxNQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFFBQUEsUUFBQSxRQUFBO0FBQ0EsWUFBQSxDQUFBLFdBQUEsQ0FBQSxRQUFBO0FBQ0EsZUFBQSxNQUFBLFNBQUEsVUFBQSxNQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsV0FBQSxJQUFBLFFBQUEsTUFBQTtBQUNBLFlBQUEsS0FBQSxTQUFBO0FBQ0EsZUFBQSxVQUFBO0FBQ0EsZUFBQSxNQUFBLFVBQUEsS0FBQSxZQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFBQSxNQUNBLFFBQUEsT0FBQTtBQUNBLGVBQUEsT0FBQSxPQUFBLE1BQUEsRUFBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFFBQUEsT0FBQTtBQUNBLGFBQUEsZUFBQSxTQUFBLEtBQUEsYUFBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsZ0JBQUEsUUFBQSxPQUFBO0FBQ0EsWUFBQSxLQUFBLGFBQUEsT0FBQTtBQUNBLGdCQUFBLFFBQUEsSUFBQSxLQUFBO0FBQ0EsZUFBQSxVQUFBLE1BQUEsYUFBQSxLQUFBLE1BQUEsT0FBQSxPQUFBLFFBQUEsQ0FBQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFVBQUEsV0FBQSxLQUFBO0FBQ0EsY0FBQSxTQUFBLENBQUEsS0FBQSxVQUFBO0FBQ0EsZ0JBQUEsU0FBQSxLQUFBLE1BQUE7QUFDQSxjQUFBLFFBQUE7QUFFQSxrQkFBQSxhQUFBLE9BQUEsZUFBQSxRQUFBLFNBQUEsU0FBQTtBQUNBLHFCQUFBLFFBQUEsS0FB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QUFBLFVBQUE7QUFDQSxlQUFBLGNBQUEsS0FBQTtBQUFBLFFBQ0E7QUFDQSxhQUFBLGdCQUFBO0FBQ0EsYUFBQSxNQUFBLGVBQUEsS0FBQSxNQUFBLGVBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxZQUFBLFFBQUEsUUFBQTtBQUNBLFlBQUEsV0FBQSxRQUFBO0FBQ0EsZUFBQSxnQkFBQTtBQUNBLGVBQUEsTUFBQSxlQUFBLE1BQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxXQUFBLGNBQUEsS0FBQTtBQUNBLFdBQUEsa0JBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxXQUFBLGdCQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUFBLE1BQ0EsWUFBQSxNQUFBO0FBQ0EsWUFBQSxLQUFBLFNBQUEsQ0FBQSxLQUFBLFlBQUEsS0FBQSxVQUFBLEtBQUEsYUFBQTtBQUNBLGVBQUEsY0FBQSxLQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLGFBQUEsTUFBQTtBQUNBLGNBQUEsVUFBQTtBQUFBLFVBQ0EsaUJBQUEsS0FBQTtBQUFBLFFBQ0E7QUFDQSxZQUFBLEtBQUEsTUFBQTtBQUNBLGtCQUFBLGVBQUEsS0FBQSxVQUFBO0FBQUEsUUFDQTtBQUNBLGVBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxrQkFBQTtBQUNBLGNBQUEsRUFBQSxVQUFBLFVBQUEsT0FBQSxpQkFBQSxnQkFBQTtBQUNBLGNBQUEsYUFBQSxXQUFBLFdBQUE7QUFDQSxjQUFBLFdBQUEsS0FBQSxXQUFBLEtBQUEsS0FBQSxRQUFBLGVBQUE7QUFFQSxZQUFBLFFBQUE7QUFDQSxZQUFBLE1BQUE7QUFDQSxZQUFBLFlBQUEsWUFBQTtBQUNBLGdCQUFBO0FBQUEsUUFDQSxXQUFBLGVBQUEsV0FBQSxHQUFBO0FBQ0EsZ0JBQUE7QUFBQSxRQUNBLFdBQUEsZUFBQSxXQUFBLFVBQUE7QUFDQSxnQkFBQTtBQUNBLGtCQUFBLFdBQUEsYUFBQTtBQUFBLFFBQ0EsT0FB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QSxNQUFBO0FBRUEsY0FBQSxTQUFBLEtBQUEsSUFBQSxHQUFBLG1DQUFBLFFBQUEsdUNBQUEsTUFBQTtBQUNBLGVBQUE7QUFBQSxVQUNBLGtCQUFBLFNBQUEsR0FBQSxTQUFBLFdBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLE1BRUEsYUFBQTtBQUNBLGNBQUEsRUFBQSxJQUFBLE1BQUEsVUFBQSxXQUFBO0FBQ0EsZUFBQSxFQUFBLElBQUEsTUFBQSxVQUFBLEdBQUEsT0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBQUEsTUFDQSxNQUFBLE9BQUE7QUFDQSxhQUFBLFVBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxRQUFBLFNBQUE7QUFDQSxZQUFBLFlBQUEsS0FBQSxPQUFBO0FBQ0EsZUFBQSxNQUFBLFNBQUEsT0FBQTtBQUNBLGVBQUEsTUFBQSxVQUFBLE9BQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFBQSxNQUNBLFFBQUE7QUFDQSxhQUFBLE1BQUEsTUFBQSxNQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBOzs7Ozs7Ozs7Ozs7O0FDOUlBLFFBQUEsZ0JBQUE7QUFBQSxJQUNBLFlBQUE7QUFBQSxJQUVBLE9BQUE7QUFBQSxNQUNBLFNBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQSxDQUFBLGVBQUEsWUFBQSxjQUNBLGNBQ0EsUUFBQSxNQUFBLFVBQ0E7QUFBQSxNQUNBLE9BQUEsRUFBQSxNQUFBLFNBQUE7QUFBQSxNQUNBLElBQUE7QUFBQSxJQUNBLElBQ0EsQ0FBQSxHQUNBLFFBQUEsUUFDQTtBQUFBLEVBQ0E7QUFFQSxRQUFBLFdBQUEsQ0FBQSxTQUFBLFVBQUEsT0FBQSxPQUFBLFFBQUEsT0FBQSxLQUFBO0FBR0EsUUFBQSxlQUFBLGFBQUEsaUJBQUEsT0FBQSxFQUFBO0FBRUEsUUFBQSxTQUFBO0FBQUEsSUFDQSxXQUFBLFNBQUE7QUFJQSxpQkFBQSxNQUFBLFNBQUEsU0FBQSxFQUFBLFFBQUEsT0FBQSxDQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxNQUFBLFNBQUE7QUFDQSxZQUFBLEVBQUEsVUFBQSxpQkFBQSxPQUFBO0FBQ0EsZUFBQSxTQUFBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsVUFBQTtBQUFBLFFBQ0EsWUFBQTtBQUFBLFFBQ0EsUUFBQTtBQUFBLE1BQ0EsQ0FBQTtBQUNBLFlBQUEsRUFBQSxXQUFBLGlCQUFBLE9BQUE7QUFDQSxlQUFBLFNBQUE7QUFBQSxRQUNBLE9BQUE7QUFBQSxRQUNBLFVBQUE7QUFBQSxRQUNBLFlBQUE7QUFBQSxRQUNBLFFBQUE7QUFBQSxNQUNBLENBQUE7QUFDQSxtQkFBQSxPQUFBO0FBQ0EsaUJBQUEsTUFBQSxTQUFBLFNBQUEsRUFBQSxPQUFBLENBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE1BQUEsU0FBQTtBQUNBLFlBQUEsRUFBQSxXQUFBLGlCQUFBLE9BQUE7QUFDQSxlQUFBLFNBQUEsRUFBQSxRQUFBO0FBQ0EsbUJBQUEsT0FBQTtBQUNBLGlCQUFBLE1BQUEsU0FBQSxTQUFBLEVBQUEsUUFBQSxFQUFBLENBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0=
|