barsa-calendar 1.0.456 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2020 → esm2022}/barsa-calendar.mjs +4 -4
- package/esm2022/lib/barsa-calendar.module.mjs +117 -0
- package/esm2022/lib/calendar-container/calendar-container.component.mjs +230 -0
- package/esm2022/lib/calendar-header/calendar-header.component.mjs +66 -0
- package/esm2022/lib/calendar-list/calendar-list.component.mjs +18 -0
- package/esm2022/lib/calendar-list-container/calendar-list-container.component.mjs +29 -0
- package/{esm2020 → esm2022}/lib/calendar-list-item/calendar-list-item.component.mjs +14 -14
- package/esm2022/lib/calendar-month/calendar-month.component.mjs +246 -0
- package/esm2022/lib/calendar-selection-days/calendar-selection-days.component.mjs +196 -0
- package/esm2022/lib/calendar-week/calendar-week.component.mjs +252 -0
- package/{esm2020 → esm2022}/lib/constants.mjs +3 -3
- package/esm2022/lib/date-time-picker/date-time-picker.component.mjs +431 -0
- package/esm2022/lib/day-event-list/day-event-list.component.mjs +55 -0
- package/esm2022/lib/day-number-box/day-number-box.component.mjs +105 -0
- package/{esm2020 → esm2022}/lib/days-in-week.pipe.mjs +17 -17
- package/esm2022/lib/equal-date.pipe.mjs +23 -0
- package/esm2022/lib/event-button/event-button.component.mjs +97 -0
- package/esm2022/lib/event-button-end-arrow/event-button-end-arrow.component.mjs +29 -0
- package/esm2022/lib/event-button-start-arrow/event-button-start-arrow.component.mjs +29 -0
- package/esm2022/lib/event-date.pipe.mjs +24 -0
- package/esm2022/lib/event-preview/event-preview.component.mjs +79 -0
- package/{esm2020 → esm2022}/lib/event-time.pipe.mjs +22 -22
- package/{esm2020 → esm2022}/lib/from-to-time.pipe.mjs +23 -23
- package/esm2022/lib/models.mjs +14 -0
- package/esm2022/lib/month-days/month-days.component.mjs +222 -0
- package/esm2022/lib/services/calendar.service.mjs +645 -0
- package/{esm2020 → esm2022}/public-api.mjs +23 -23
- package/fesm2022/barsa-calendar.mjs +2816 -0
- package/fesm2022/barsa-calendar.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/barsa-calendar.module.d.ts +53 -53
- package/lib/calendar-container/calendar-container.component.d.ts +89 -89
- package/lib/calendar-header/calendar-header.component.d.ts +33 -33
- package/lib/calendar-list/calendar-list.component.d.ts +8 -8
- package/lib/calendar-list-container/calendar-list-container.component.d.ts +14 -14
- package/lib/calendar-list-item/calendar-list-item.component.d.ts +7 -7
- package/lib/calendar-month/calendar-month.component.d.ts +70 -70
- package/lib/calendar-selection-days/calendar-selection-days.component.d.ts +48 -48
- package/lib/calendar-week/calendar-week.component.d.ts +70 -70
- package/lib/constants.d.ts +1 -1
- package/lib/date-time-picker/date-time-picker.component.d.ts +113 -112
- package/lib/day-event-list/day-event-list.component.d.ts +20 -20
- package/lib/day-number-box/day-number-box.component.d.ts +30 -30
- package/lib/days-in-week.pipe.d.ts +9 -9
- package/lib/equal-date.pipe.d.ts +8 -8
- package/lib/event-button/event-button.component.d.ts +31 -31
- package/lib/event-button-end-arrow/event-button-end-arrow.component.d.ts +12 -12
- package/lib/event-button-start-arrow/event-button-start-arrow.component.d.ts +12 -12
- package/lib/event-date.pipe.d.ts +9 -9
- package/lib/event-preview/event-preview.component.d.ts +24 -24
- package/lib/event-time.pipe.d.ts +9 -9
- package/lib/from-to-time.pipe.d.ts +9 -9
- package/lib/models.d.ts +110 -110
- package/lib/month-days/month-days.component.d.ts +69 -69
- package/lib/services/calendar.service.d.ts +70 -70
- package/package.json +7 -13
- package/public-api.d.ts +19 -19
- package/esm2020/lib/barsa-calendar.module.mjs +0 -117
- package/esm2020/lib/calendar-container/calendar-container.component.mjs +0 -230
- package/esm2020/lib/calendar-header/calendar-header.component.mjs +0 -67
- package/esm2020/lib/calendar-list/calendar-list.component.mjs +0 -19
- package/esm2020/lib/calendar-list-container/calendar-list-container.component.mjs +0 -30
- package/esm2020/lib/calendar-month/calendar-month.component.mjs +0 -246
- package/esm2020/lib/calendar-selection-days/calendar-selection-days.component.mjs +0 -195
- package/esm2020/lib/calendar-week/calendar-week.component.mjs +0 -249
- package/esm2020/lib/date-time-picker/date-time-picker.component.mjs +0 -433
- package/esm2020/lib/day-event-list/day-event-list.component.mjs +0 -56
- package/esm2020/lib/day-number-box/day-number-box.component.mjs +0 -105
- package/esm2020/lib/equal-date.pipe.mjs +0 -23
- package/esm2020/lib/event-button/event-button.component.mjs +0 -97
- package/esm2020/lib/event-button-end-arrow/event-button-end-arrow.component.mjs +0 -29
- package/esm2020/lib/event-button-start-arrow/event-button-start-arrow.component.mjs +0 -29
- package/esm2020/lib/event-date.pipe.mjs +0 -24
- package/esm2020/lib/event-preview/event-preview.component.mjs +0 -79
- package/esm2020/lib/models.mjs +0 -14
- package/esm2020/lib/month-days/month-days.component.mjs +0 -222
- package/esm2020/lib/services/calendar.service.mjs +0 -645
- package/fesm2015/barsa-calendar.mjs +0 -2813
- package/fesm2015/barsa-calendar.mjs.map +0 -1
- package/fesm2020/barsa-calendar.mjs +0 -2817
- package/fesm2020/barsa-calendar.mjs.map +0 -1
|
@@ -1,433 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Injectable, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { distinctUntilChanged, map } from 'rxjs/operators';
|
|
3
|
-
import { BaseComponent, DateService, getDateService, BarsaApi } from 'barsa-novin-ray-core';
|
|
4
|
-
import { CalendarService } from '../services/calendar.service';
|
|
5
|
-
import { DatetimeAdapter, FdDate, FdDatetimeAdapter, InputGroupComponent, TimeComponent, TimeI18n } from '@fundamental-ngx/core';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "barsa-novin-ray-core";
|
|
8
|
-
import * as i2 from "@fundamental-ngx/core";
|
|
9
|
-
import * as i3 from "@angular/common";
|
|
10
|
-
import * as i4 from "@angular/forms";
|
|
11
|
-
import * as i5 from "@fundamental-ngx/core/content-density";
|
|
12
|
-
import * as i6 from "@fundamental-ngx/core/bar";
|
|
13
|
-
import * as i7 from "@fundamental-ngx/core/button";
|
|
14
|
-
import * as i8 from "@fundamental-ngx/core/input-group";
|
|
15
|
-
import * as i9 from "@fundamental-ngx/core/dialog";
|
|
16
|
-
import * as i10 from "@fundamental-ngx/core/popover";
|
|
17
|
-
import * as i11 from "@fundamental-ngx/core/time";
|
|
18
|
-
import * as i12 from "@fundamental-ngx/core/toolbar";
|
|
19
|
-
import * as i13 from "../calendar-month/calendar-month.component";
|
|
20
|
-
import * as i14 from "../calendar-selection-days/calendar-selection-days.component";
|
|
21
|
-
export class TimeConfigI18n {
|
|
22
|
-
constructor(_bbbTranslate) {
|
|
23
|
-
this._bbbTranslate = _bbbTranslate;
|
|
24
|
-
/** Aria label for the 'increase hours' button */
|
|
25
|
-
this.increaseHoursLabel = 'Increase hours';
|
|
26
|
-
/** label for the 'hours' column */
|
|
27
|
-
this.hoursLabel = this._bbbTranslate.transform('Hours');
|
|
28
|
-
/** Aria label for the 'decrease hours' button */
|
|
29
|
-
this.decreaseHoursLabel = 'Decrease hours';
|
|
30
|
-
/** Aria label for the 'increase minutes' button */
|
|
31
|
-
this.increaseMinutesLabel = 'Increase minutes';
|
|
32
|
-
/** label for the 'minutes' column */
|
|
33
|
-
this.minutesLabel = this._bbbTranslate.transform('Minutes');
|
|
34
|
-
/** Aria label for the 'decrease minutes' button */
|
|
35
|
-
this.decreaseMinutesLabel = 'Decrease minutes';
|
|
36
|
-
/** Aria label for the 'increase seconds' button */
|
|
37
|
-
this.increaseSecondsLabel = 'Increase seconds';
|
|
38
|
-
/** label for the 'seconds' column */
|
|
39
|
-
this.secondsLabel = this._bbbTranslate.transform('Sec');
|
|
40
|
-
/** Aria label for the 'decrease seconds' button */
|
|
41
|
-
this.decreaseSecondsLabel = 'Decrease seconds';
|
|
42
|
-
/** Aria label for the 'increase period' button */
|
|
43
|
-
this.increasePeriodLabel = 'Increase period';
|
|
44
|
-
/** label for the 'period' column */
|
|
45
|
-
this.periodLabel = 'Period';
|
|
46
|
-
/** Aria label for the 'decrease period' button */
|
|
47
|
-
this.decreasePeriodLabel = 'Decrease period';
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
TimeConfigI18n.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: TimeConfigI18n, deps: [{ token: i1.BbbTranslatePipe }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
51
|
-
TimeConfigI18n.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: TimeConfigI18n });
|
|
52
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: TimeConfigI18n, decorators: [{
|
|
53
|
-
type: Injectable
|
|
54
|
-
}], ctorParameters: function () { return [{ type: i1.BbbTranslatePipe }]; } });
|
|
55
|
-
export class DateTimePickerComponent extends BaseComponent {
|
|
56
|
-
constructor(_datetimeAdapter, _dateTimeToCaption, _logService, _dialogService, _portalService) {
|
|
57
|
-
super();
|
|
58
|
-
this._datetimeAdapter = _datetimeAdapter;
|
|
59
|
-
this._dateTimeToCaption = _dateTimeToCaption;
|
|
60
|
-
this._logService = _logService;
|
|
61
|
-
this._dialogService = _dialogService;
|
|
62
|
-
this.rtl = true;
|
|
63
|
-
this.rangeChange = new EventEmitter();
|
|
64
|
-
this.valueChange = new EventEmitter();
|
|
65
|
-
this.valueCaption = '';
|
|
66
|
-
this.selectionMode = 'day';
|
|
67
|
-
this.todayIndex = -1;
|
|
68
|
-
this.isValid = true;
|
|
69
|
-
this.months = [];
|
|
70
|
-
this.tempFormmatedDate = '';
|
|
71
|
-
this.rtl$ = _portalService.rtl$;
|
|
72
|
-
this.width$ = _portalService.deviceSize$.pipe(distinctUntilChanged(), map((deviceSize) => {
|
|
73
|
-
if (!this.showDate) {
|
|
74
|
-
return 260;
|
|
75
|
-
}
|
|
76
|
-
switch (deviceSize) {
|
|
77
|
-
case 'l':
|
|
78
|
-
case 'xl':
|
|
79
|
-
return 560;
|
|
80
|
-
case 's':
|
|
81
|
-
return 320;
|
|
82
|
-
default:
|
|
83
|
-
return 520;
|
|
84
|
-
}
|
|
85
|
-
}));
|
|
86
|
-
this.height = 420;
|
|
87
|
-
}
|
|
88
|
-
ngOnInit() {
|
|
89
|
-
super.ngOnInit();
|
|
90
|
-
let culture = 'en-US';
|
|
91
|
-
switch (this.primaryCalendarType) {
|
|
92
|
-
case 'HijriShamsi':
|
|
93
|
-
culture = 'fa-IR';
|
|
94
|
-
break;
|
|
95
|
-
}
|
|
96
|
-
this.culture = culture;
|
|
97
|
-
this._calendarService = new CalendarService(this._logService, culture);
|
|
98
|
-
this._calendarService.setMode('month');
|
|
99
|
-
this.weekDaysMin = this._calendarService.weekDaysMin();
|
|
100
|
-
this.weekDays = this._calendarService.weekDays();
|
|
101
|
-
this.selectedMonth$ = this._calendarService.selected$;
|
|
102
|
-
this.today = this._calendarService.today;
|
|
103
|
-
if (this.value) {
|
|
104
|
-
this.timeValue = FdDate.getFdDateByDate(this.value);
|
|
105
|
-
this._setCaption(this.value);
|
|
106
|
-
this._calendarService.loadMonthByDate(this.value);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
this.timeValue = FdDate.getFdDateByDate(new Date());
|
|
110
|
-
}
|
|
111
|
-
// if (this.isRangePicker) {
|
|
112
|
-
// if (this.startRangeDate) {
|
|
113
|
-
// this._calendarService.loadMonthByDate(this.startRangeDate);
|
|
114
|
-
// }
|
|
115
|
-
// if (this.endRangeDate) {
|
|
116
|
-
// }
|
|
117
|
-
// } else {
|
|
118
|
-
// this._calendarService.loadMonthByDate(this.value);
|
|
119
|
-
// }
|
|
120
|
-
this.months = this._calendarService.Months;
|
|
121
|
-
this._prepareYear(this._calendarService.selectedMonth.dateInfo.year);
|
|
122
|
-
this._setFormattedDateToInput(this.value);
|
|
123
|
-
if (this.inputGroupComponent) {
|
|
124
|
-
this.inputGroupComponent.registerOnChange(this.onCaptionChanged.bind(this));
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
ngOnChanges(changes) {
|
|
128
|
-
const { value } = changes;
|
|
129
|
-
if (value && !value.firstChange) {
|
|
130
|
-
const caption = this._getFormattedDate(value.currentValue);
|
|
131
|
-
if (caption !== this.inputGroupComponent?.inputText) {
|
|
132
|
-
this._setFormattedDateToInput(this.value);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
onRangeChange(e) {
|
|
137
|
-
this.rangeChange.emit({
|
|
138
|
-
startDay: e.startDay,
|
|
139
|
-
endDay: e.endDay
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
onOpenPopover(popover, dialogTemplate) {
|
|
143
|
-
if (this.readonly || this.disabled) {
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
if (this.timeComponent) {
|
|
147
|
-
setTimeout(() => this.timeComponent.refreshColumns(), 0);
|
|
148
|
-
}
|
|
149
|
-
if (this.deviceSize === 's' || this.isMobile) {
|
|
150
|
-
this._dialogService.open(dialogTemplate, {
|
|
151
|
-
mobile: true
|
|
152
|
-
});
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
popover.open();
|
|
156
|
-
}
|
|
157
|
-
onMonthSelected(monthName, index) {
|
|
158
|
-
this._calendarService.gotoMonth(monthName, index);
|
|
159
|
-
}
|
|
160
|
-
onYearSelected(year) {
|
|
161
|
-
this._calendarService.gotoYear(+year);
|
|
162
|
-
}
|
|
163
|
-
onCaptionChanged(e) {
|
|
164
|
-
if (e.length < 10) {
|
|
165
|
-
if (e.length === 0) {
|
|
166
|
-
this._raisValueChanged(undefined);
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
this.isValid = false;
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
const englishDateStr = BarsaApi.Common.Util.ReplaceFaToArCharchter(e);
|
|
173
|
-
let format = 'jYYYY/jM/jD';
|
|
174
|
-
if (this.showTime) {
|
|
175
|
-
format += ' HH:mm';
|
|
176
|
-
}
|
|
177
|
-
const moment = this._calendarService._dateService.stringToMoment(englishDateStr, format);
|
|
178
|
-
// const isValid = moment.isValid();// برای شمسی همیشه false نشون میده
|
|
179
|
-
if (isNaN(Date.parse(englishDateStr))) {
|
|
180
|
-
this.isValid = false;
|
|
181
|
-
return;
|
|
182
|
-
}
|
|
183
|
-
const date = moment.toDate();
|
|
184
|
-
if (isNaN(date)) {
|
|
185
|
-
this.isValid = false;
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
this.isValid = true;
|
|
189
|
-
this.timeValue = this._datetimeAdapter.setTime(this.timeValue, date.getHours(), date.getMinutes(), date.getSeconds());
|
|
190
|
-
this.startSelectedDay = this.endSelectedDay = null;
|
|
191
|
-
this._raisValueChanged(date, false);
|
|
192
|
-
}
|
|
193
|
-
onPrevTap() {
|
|
194
|
-
if (this.selectionMode === 'day') {
|
|
195
|
-
this._calendarService.loadPrevious();
|
|
196
|
-
}
|
|
197
|
-
else if (this.selectionMode === 'month') {
|
|
198
|
-
this._calendarService.loadPrevYear();
|
|
199
|
-
}
|
|
200
|
-
else if (this.selectionMode === 'year') {
|
|
201
|
-
this._prepareYear(Number(this.years[0]) - 20);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
onNextTap() {
|
|
205
|
-
if (this.selectionMode === 'day') {
|
|
206
|
-
this._calendarService.loadNext();
|
|
207
|
-
}
|
|
208
|
-
else if (this.selectionMode === 'month') {
|
|
209
|
-
this._calendarService.loadNextYear();
|
|
210
|
-
}
|
|
211
|
-
else if (this.selectionMode === 'year') {
|
|
212
|
-
this._prepareYear(Number(this.years[this.years.length - 1]) + 1);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
onToday() {
|
|
216
|
-
const today = new Date();
|
|
217
|
-
this.timeValue = this._datetimeAdapter.setTime(this.timeValue, today.getHours(), today.getMinutes(), today.getSeconds());
|
|
218
|
-
if (this._calendarService.todayDay) {
|
|
219
|
-
this.startSelectedDay = this._calendarService.todayDay;
|
|
220
|
-
}
|
|
221
|
-
this._calendarService.gotoToday();
|
|
222
|
-
}
|
|
223
|
-
onDayClick(day, popover, dialog) {
|
|
224
|
-
this.isValid = true;
|
|
225
|
-
this.startSelectedDay = this.endSelectedDay = day;
|
|
226
|
-
if (this.showTime) {
|
|
227
|
-
return;
|
|
228
|
-
}
|
|
229
|
-
this._setFirstAndEndDay(day, popover, dialog);
|
|
230
|
-
}
|
|
231
|
-
onPopoverOpenChange(isOpen) {
|
|
232
|
-
if (isOpen) {
|
|
233
|
-
this._lastValue = this.value;
|
|
234
|
-
}
|
|
235
|
-
else {
|
|
236
|
-
this._lastValue = undefined;
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
onClear(popover, dialog) {
|
|
240
|
-
if (dialog) {
|
|
241
|
-
dialog.dismiss();
|
|
242
|
-
}
|
|
243
|
-
else {
|
|
244
|
-
popover.close();
|
|
245
|
-
}
|
|
246
|
-
this.value = undefined;
|
|
247
|
-
this._setFormattedDateToInput(this.value);
|
|
248
|
-
this._raisValueChanged(this.value);
|
|
249
|
-
}
|
|
250
|
-
onOk(popover, dialog) {
|
|
251
|
-
if (dialog) {
|
|
252
|
-
dialog.dismiss();
|
|
253
|
-
}
|
|
254
|
-
else {
|
|
255
|
-
popover.close();
|
|
256
|
-
}
|
|
257
|
-
if (!this.value) {
|
|
258
|
-
this.value = new Date();
|
|
259
|
-
}
|
|
260
|
-
this._handleValueChange();
|
|
261
|
-
}
|
|
262
|
-
onCancel(popover, dialog) {
|
|
263
|
-
if (this._lastValue !== this.value) {
|
|
264
|
-
this.value = this._lastValue;
|
|
265
|
-
this._setCaption(this.value);
|
|
266
|
-
}
|
|
267
|
-
if (dialog) {
|
|
268
|
-
dialog.dismiss();
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
popover.close();
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
_setFormattedDateToInput(date) {
|
|
275
|
-
if (date) {
|
|
276
|
-
const formattedDate = this._getFormattedDate(date);
|
|
277
|
-
this.tempFormmatedDate = formattedDate;
|
|
278
|
-
this.inputGroupComponent?.writeValue(formattedDate);
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
this.tempFormmatedDate = '';
|
|
282
|
-
this.inputGroupComponent?.writeValue('');
|
|
283
|
-
}
|
|
284
|
-
_getFormattedDate(date) {
|
|
285
|
-
return this._dateTimeToCaption.transform(date, this.formatPattern, this.culture, this.showDate, this.showTime);
|
|
286
|
-
}
|
|
287
|
-
_handleValueChange() {
|
|
288
|
-
this.value = this.showDate ? this.startSelectedDay?.date ?? this.value : new Date();
|
|
289
|
-
if (this.value) {
|
|
290
|
-
this.value = new Date(this.value);
|
|
291
|
-
this.value.setHours(this.timeValue.hour);
|
|
292
|
-
this.value.setMinutes(this.timeValue.minute);
|
|
293
|
-
this.value.setSeconds(this.timeValue.second);
|
|
294
|
-
}
|
|
295
|
-
this._setFormattedDateToInput(this.value);
|
|
296
|
-
this._raisValueChanged(this.value);
|
|
297
|
-
}
|
|
298
|
-
_prepareYear(from) {
|
|
299
|
-
const years = [];
|
|
300
|
-
for (let i = 0; i < 20; i++) {
|
|
301
|
-
years.push(`${from + i}`);
|
|
302
|
-
}
|
|
303
|
-
this.years = years;
|
|
304
|
-
}
|
|
305
|
-
_setCaption(value) {
|
|
306
|
-
if (!value) {
|
|
307
|
-
this.valueCaption = '';
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
|
-
let formatPattern = this.formatPattern.replace('YYYY', 'jYYYY');
|
|
311
|
-
formatPattern = formatPattern.replace('MM', 'jMM');
|
|
312
|
-
formatPattern = formatPattern.replace('DD', 'jDD');
|
|
313
|
-
this.valueCaption = this._calendarService._dateService.getMoment(value).format(formatPattern);
|
|
314
|
-
}
|
|
315
|
-
_raisValueChanged(date, setCaption = true) {
|
|
316
|
-
this.value = date;
|
|
317
|
-
if (setCaption) {
|
|
318
|
-
this._setCaption(date);
|
|
319
|
-
}
|
|
320
|
-
this.valueChange.emit(date);
|
|
321
|
-
}
|
|
322
|
-
_setFirstAndEndDay(day, popover, dialog) {
|
|
323
|
-
if (dialog) {
|
|
324
|
-
dialog.dismiss();
|
|
325
|
-
}
|
|
326
|
-
if (popover) {
|
|
327
|
-
popover.close();
|
|
328
|
-
}
|
|
329
|
-
if (!this.isRangePicker) {
|
|
330
|
-
this._setFormattedDateToInput(day.date);
|
|
331
|
-
this._raisValueChanged(day.date);
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
if (this.startSelectedDay) {
|
|
335
|
-
this.endSelectedDay = day;
|
|
336
|
-
}
|
|
337
|
-
else {
|
|
338
|
-
this.startSelectedDay = day;
|
|
339
|
-
}
|
|
340
|
-
if (this.startSelectedDay && this.endSelectedDay && this.startSelectedDay.date > this.endSelectedDay.date) {
|
|
341
|
-
const temp = this.startSelectedDay;
|
|
342
|
-
this.startSelectedDay = this.endSelectedDay;
|
|
343
|
-
this.endSelectedDay = temp;
|
|
344
|
-
}
|
|
345
|
-
if (this.startSelectedDay && this.endSelectedDay) {
|
|
346
|
-
this.rangeChange.emit({
|
|
347
|
-
startDay: this.startSelectedDay.date,
|
|
348
|
-
endDay: this.endSelectedDay.date
|
|
349
|
-
});
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
DateTimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: DateTimePickerComponent, deps: [{ token: i2.DatetimeAdapter }, { token: i1.DateTimeToCaptionPipe }, { token: i1.LogService }, { token: i2.DialogService }, { token: i1.PortalService }], target: i0.ɵɵFactoryTarget.Component });
|
|
354
|
-
DateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: DateTimePickerComponent, selector: "bc-date-time-picker", inputs: { placeholder: "placeholder", primaryCalendarType: "primaryCalendarType", formatPattern: "formatPattern", value: "value", timeValue: "timeValue", startRangeDate: "startRangeDate", endRangeDate: "endRangeDate", isRangePicker: "isRangePicker", showTime: "showTime", showDate: "showDate", rtl: "rtl", deviceSize: "deviceSize", isMobile: "isMobile", readonly: "readonly", disabled: "disabled", buttonMenuMode: "buttonMenuMode", inlineMode: "inlineMode", daterangeMode: "daterangeMode" }, outputs: { rangeChange: "rangeChange", valueChange: "valueChange" }, providers: [
|
|
355
|
-
{
|
|
356
|
-
provide: DatetimeAdapter,
|
|
357
|
-
useClass: FdDatetimeAdapter
|
|
358
|
-
},
|
|
359
|
-
{
|
|
360
|
-
provide: TimeI18n,
|
|
361
|
-
useClass: TimeConfigI18n
|
|
362
|
-
},
|
|
363
|
-
{
|
|
364
|
-
provide: DateService,
|
|
365
|
-
useFactory: getDateService
|
|
366
|
-
},
|
|
367
|
-
CalendarService
|
|
368
|
-
], viewQueries: [{ propertyName: "timeComponent", first: true, predicate: TimeComponent, descendants: true }, { propertyName: "inputGroupComponent", first: true, predicate: InputGroupComponent, descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"inlineMode\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n daterangeMode ? dateRangeTpl : month;\r\n context: {\r\n $implicit: selectedMonth$ | async,\r\n width: width$ | async,\r\n height: height,\r\n rtl: rtl$ | async,\r\n weekDays: weekDays,\r\n weekDaysMin: weekDaysMin,\r\n today: today,\r\n deviceSize: deviceSize,\r\n popover: popover\r\n }\r\n \"\r\n >\r\n </ng-container>\r\n</ng-container>\r\n<ng-template #dateRangeTpl>\r\n <bc-calendar-selection-days\r\n fd-toolbar-item\r\n [inline]=\"true\"\r\n [monthInfo]=\"(selectedMonth$ | async)!!\"\r\n (rangeChange)=\"onRangeChange($event)\"\r\n ></bc-calendar-selection-days>\r\n</ng-template>\r\n<fd-input-group\r\n placement=\"after\"\r\n glyph=\"calendar\"\r\n glyphAriaLabel=\"select day\"\r\n ariaLabelledBy=\"fd-input-group-icon-label-2\"\r\n [placeholder]=\"placeholder\"\r\n [value]=\"value\"\r\n [button]=\"true\"\r\n [state]=\"isValid ? 'success' : 'error'\"\r\n [showFocus]=\"true\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n [style.display]=\"!buttonMenuMode || inlineMode ? 'inherit' : 'none'\"\r\n (addOnButtonClicked)=\"onOpenPopover(popover, dialogTemplate)\"\r\n>\r\n</fd-input-group>\r\n<button\r\n *ngIf=\"buttonMenuMode\"\r\n fd-button\r\n [label]=\"tempFormmatedDate || placeholder\"\r\n [title]=\"placeholder\"\r\n [fdType]=\"value ? 'standard' : 'transparent'\"\r\n [fdMenu]=\"true\"\r\n (click)=\"onOpenPopover(popover, dialogTemplate)\"\r\n [class.placeholder-custom]=\"!value\"\r\n class=\"menu-button-datepicker\"\r\n></button>\r\n\r\n<fd-popover #popover (isOpenChange)=\"onPopoverOpenChange($event)\" [focusTrapped]=\"true\" [focusAutoCapture]=\"true\">\r\n <fd-popover-body [style.width.px]=\"width$ | async\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n month;\r\n context: {\r\n $implicit: selectedMonth$ | async,\r\n width: width$ | async,\r\n height: height,\r\n rtl: rtl$ | async,\r\n weekDays: weekDays,\r\n weekDaysMin: weekDaysMin,\r\n today: today,\r\n deviceSize: deviceSize,\r\n popover: popover\r\n }\r\n \"\r\n >\r\n </ng-container>\r\n <div fd-popover-body-footer>\r\n <div fd-bar [barDesign]=\"'footer'\">\r\n <div fd-bar-right>\r\n <container *ngTemplateOutlet=\"footerButtons\"></container>\r\n </div>\r\n </div>\r\n </div>\r\n </fd-popover-body>\r\n</fd-popover>\r\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\r\n <fd-dialog-body>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n month;\r\n context: {\r\n $implicit: selectedMonth$ | async,\r\n width: width$ | async,\r\n height: height,\r\n rtl: rtl$ | async,\r\n weekDays: weekDays,\r\n weekDaysMin: weekDaysMin,\r\n today: today,\r\n deviceSize: deviceSize,\r\n popover: popover,\r\n dialog: dialog\r\n }\r\n \"\r\n >\r\n </ng-container>\r\n </fd-dialog-body>\r\n <fd-dialog-footer>\r\n <container *ngTemplateOutlet=\"footerButtons; context: { dialog: dialog }\"></container>\r\n </fd-dialog-footer>\r\n </fd-dialog>\r\n</ng-template>\r\n<ng-template #footerButtons let-dialog=\"dialog\">\r\n <fd-button-bar [label]=\"'Ok' | bbbTranslate\" fdType=\"emphasized\" (click)=\"onOk(popover, dialog)\"></fd-button-bar>\r\n <fd-button-bar\r\n [label]=\"'Clear' | bbbTranslate\"\r\n fdType=\"standard\"\r\n (click)=\"onClear(popover, dialog)\"\r\n ></fd-button-bar>\r\n <fd-button-bar [label]=\"'Cancel' | bbbTranslate\" (click)=\"onCancel(popover, dialog)\"></fd-button-bar>\r\n</ng-template>\r\n<ng-template\r\n #month\r\n let-selectedMonth\r\n let-width=\"width\"\r\n let-height=\"height\"\r\n let-rtl=\"rtl\"\r\n let-today=\"today\"\r\n let-showEvents=\"showEvents\"\r\n let-deviceSize=\"deviceSize\"\r\n let-popover=\"popover\"\r\n let-dialog=\"dialog\"\r\n>\r\n <fd-toolbar [fdType]=\"'transparent'\" *ngIf=\"showDate\">\r\n <button\r\n fd-button\r\n fd-toolbar-item\r\n [label]=\"(showDate ? 'DateR_Today' : 'Now') | bbbTranslate\"\r\n (click)=\"onToday()\"\r\n ></button>\r\n <button\r\n *ngIf=\"showDate\"\r\n fd-button\r\n fd-toolbar-item\r\n [fdType]=\"'transparent'\"\r\n [glyph]=\"rtl ? 'navigation-right-arrow' : 'navigation-left-arrow'\"\r\n (click)=\"onPrevTap()\"\r\n ></button>\r\n <button\r\n *ngIf=\"showDate\"\r\n fd-button\r\n fd-toolbar-item\r\n [fdType]=\"'transparent'\"\r\n [glyph]=\"rtl ? 'navigation-left-arrow' : 'navigation-right-arrow'\"\r\n (click)=\"onNextTap()\"\r\n ></button>\r\n <div class=\"month-years-wrapper\" *ngIf=\"showDate\" fd-title fd-toolbar-item>\r\n <button\r\n *ngIf=\"selectionMode === 'day' || selectionMode === 'month'\"\r\n fd-button\r\n [fdType]=\"'transparent'\"\r\n [label]=\"selectedMonth.dateInfo.monthName\"\r\n (click)=\"selectionMode = 'month'\"\r\n ></button>\r\n <button\r\n fd-button\r\n [fdType]=\"'transparent'\"\r\n [label]=\"selectedMonth.dateInfo.year\"\r\n (click)=\"selectionMode = 'year'\"\r\n ></button>\r\n </div>\r\n </fd-toolbar>\r\n <div style=\"display: flex\">\r\n <ng-container [ngSwitch]=\"selectionMode\">\r\n <ng-container *ngSwitchCase=\"'month'\">\r\n <div class=\"month-year-selection-wrapper\">\r\n <button\r\n style=\"flex-grow: 1; width: 33%\"\r\n *ngFor=\"let month of months; let i = index\"\r\n fd-button\r\n [fdType]=\"selectedMonth.dateInfo.monthName === month ? 'emphasized' : 'transparent'\"\r\n [label]=\"month\"\r\n (click)=\"selectionMode = 'day'; onMonthSelected(month, i)\"\r\n ></button>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'year'\">\r\n <div class=\"month-year-selection-wrapper\">\r\n <button\r\n style=\"flex-grow: 1; width: 25%\"\r\n *ngFor=\"let year of years\"\r\n fd-button\r\n [fdType]=\"selectedMonth.dateInfo.year === +year ? 'emphasized' : 'transparent'\"\r\n [label]=\"year\"\r\n (click)=\"selectionMode = 'day'; onYearSelected(year)\"\r\n ></button>\r\n </div>\r\n </ng-container>\r\n <div *ngSwitchDefault style=\"display: flex\">\r\n <bc-calendar-month\r\n *ngIf=\"showDate\"\r\n [style.width]=\"width\"\r\n [containerHeight]=\"height\"\r\n [containerWidth]=\"width\"\r\n [rtl]=\"rtl\"\r\n [monthWeeksCount]=\"selectedMonth.weeksCount\"\r\n [weekDays]=\"weekDays\"\r\n [weekDaysMin]=\"weekDaysMin\"\r\n [today]=\"today\"\r\n [datePicker]=\"true\"\r\n [dateRange]=\"true\"\r\n [selectedDate]=\"startSelectedDay ? startSelectedDay.date : value\"\r\n [days]=\"selectedMonth.days\"\r\n [deviceSize]=\"deviceSize\"\r\n (dayClick)=\"onDayClick($event, popover, dialog)\"\r\n ></bc-calendar-month>\r\n <div class=\"seperator\"></div>\r\n <fd-time\r\n style=\"direction: ltr\"\r\n fdCompact\r\n *ngIf=\"showTime\"\r\n [keepTwoDigits]=\"true\"\r\n [(ngModel)]=\"timeValue\"\r\n [displaySeconds]=\"false\"\r\n ></fd-time>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{display:block}fd-popover{display:block}fd-input-group ::ng-deep input{direction:ltr}fd-time ::ng-deep .fd-time{padding-top:0}.seperator{border-left:.0625rem solid var(--sapPageFooter_BorderColor, #d9d9d9)}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: i6.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i6.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "component", type: i6.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "component", type: i7.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i8.InputGroupComponent, selector: "fd-input-group", inputs: ["inputTemplate", "placement", "required", "inline", "placeholder", "addOnText", "buttonFocusable", "type", "glyph", "button", "disabled", "readonly", "state", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "iconTitle", "ariaLabelledby", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "component", type: i9.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i9.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i9.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i10.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "directive", type: i10.PopoverBodyFooterDirective, selector: "[fdPopoverBodyFooter], [fd-popover-body-footer]" }, { kind: "component", type: i10.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: i11.TimeComponent, selector: "fd-time", inputs: ["meridian", "validate", "keepTwoDigits", "disabled", "displaySeconds", "displayMinutes", "displayHours", "tablet", "elementsAtOnce", "time", "spinnerButtons"] }, { kind: "component", type: i12.ToolbarComponent, selector: "fd-toolbar", inputs: ["class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i12.ToolbarItemDirective, selector: "[fd-toolbar-item]" }, { kind: "component", type: i13.CalendarMonthComponent, selector: "bc-calendar-month", inputs: ["monthWeeksCount", "weekDays", "weekDaysMin", "today", "containerHeight", "days", "calendarFields", "rtl", "deviceSize", "moDataList", "datePicker", "rangePicker", "canDelete", "canAdd", "canEdit", "selectedDate", "startSelectedDayIndex", "endSelectedDayIndex"], outputs: ["editEvent", "deleteEvent", "daySelect", "dayClick", "dayMouseMove", "dayMouseUp", "dayMouseDown", "showEvent"] }, { kind: "component", type: i14.CalendarSelectionDaysComponent, selector: "bc-calendar-selection-days", inputs: ["startSelectedDayIndex", "endSelectedDayIndex", "monthInfo", "inline"], outputs: ["rangeChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
369
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: DateTimePickerComponent, decorators: [{
|
|
370
|
-
type: Component,
|
|
371
|
-
args: [{ selector: 'bc-date-time-picker', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
372
|
-
{
|
|
373
|
-
provide: DatetimeAdapter,
|
|
374
|
-
useClass: FdDatetimeAdapter
|
|
375
|
-
},
|
|
376
|
-
{
|
|
377
|
-
provide: TimeI18n,
|
|
378
|
-
useClass: TimeConfigI18n
|
|
379
|
-
},
|
|
380
|
-
{
|
|
381
|
-
provide: DateService,
|
|
382
|
-
useFactory: getDateService
|
|
383
|
-
},
|
|
384
|
-
CalendarService
|
|
385
|
-
], template: "<ng-container *ngIf=\"inlineMode\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n daterangeMode ? dateRangeTpl : month;\r\n context: {\r\n $implicit: selectedMonth$ | async,\r\n width: width$ | async,\r\n height: height,\r\n rtl: rtl$ | async,\r\n weekDays: weekDays,\r\n weekDaysMin: weekDaysMin,\r\n today: today,\r\n deviceSize: deviceSize,\r\n popover: popover\r\n }\r\n \"\r\n >\r\n </ng-container>\r\n</ng-container>\r\n<ng-template #dateRangeTpl>\r\n <bc-calendar-selection-days\r\n fd-toolbar-item\r\n [inline]=\"true\"\r\n [monthInfo]=\"(selectedMonth$ | async)!!\"\r\n (rangeChange)=\"onRangeChange($event)\"\r\n ></bc-calendar-selection-days>\r\n</ng-template>\r\n<fd-input-group\r\n placement=\"after\"\r\n glyph=\"calendar\"\r\n glyphAriaLabel=\"select day\"\r\n ariaLabelledBy=\"fd-input-group-icon-label-2\"\r\n [placeholder]=\"placeholder\"\r\n [value]=\"value\"\r\n [button]=\"true\"\r\n [state]=\"isValid ? 'success' : 'error'\"\r\n [showFocus]=\"true\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n [style.display]=\"!buttonMenuMode || inlineMode ? 'inherit' : 'none'\"\r\n (addOnButtonClicked)=\"onOpenPopover(popover, dialogTemplate)\"\r\n>\r\n</fd-input-group>\r\n<button\r\n *ngIf=\"buttonMenuMode\"\r\n fd-button\r\n [label]=\"tempFormmatedDate || placeholder\"\r\n [title]=\"placeholder\"\r\n [fdType]=\"value ? 'standard' : 'transparent'\"\r\n [fdMenu]=\"true\"\r\n (click)=\"onOpenPopover(popover, dialogTemplate)\"\r\n [class.placeholder-custom]=\"!value\"\r\n class=\"menu-button-datepicker\"\r\n></button>\r\n\r\n<fd-popover #popover (isOpenChange)=\"onPopoverOpenChange($event)\" [focusTrapped]=\"true\" [focusAutoCapture]=\"true\">\r\n <fd-popover-body [style.width.px]=\"width$ | async\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n month;\r\n context: {\r\n $implicit: selectedMonth$ | async,\r\n width: width$ | async,\r\n height: height,\r\n rtl: rtl$ | async,\r\n weekDays: weekDays,\r\n weekDaysMin: weekDaysMin,\r\n today: today,\r\n deviceSize: deviceSize,\r\n popover: popover\r\n }\r\n \"\r\n >\r\n </ng-container>\r\n <div fd-popover-body-footer>\r\n <div fd-bar [barDesign]=\"'footer'\">\r\n <div fd-bar-right>\r\n <container *ngTemplateOutlet=\"footerButtons\"></container>\r\n </div>\r\n </div>\r\n </div>\r\n </fd-popover-body>\r\n</fd-popover>\r\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\r\n <fd-dialog-body>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n month;\r\n context: {\r\n $implicit: selectedMonth$ | async,\r\n width: width$ | async,\r\n height: height,\r\n rtl: rtl$ | async,\r\n weekDays: weekDays,\r\n weekDaysMin: weekDaysMin,\r\n today: today,\r\n deviceSize: deviceSize,\r\n popover: popover,\r\n dialog: dialog\r\n }\r\n \"\r\n >\r\n </ng-container>\r\n </fd-dialog-body>\r\n <fd-dialog-footer>\r\n <container *ngTemplateOutlet=\"footerButtons; context: { dialog: dialog }\"></container>\r\n </fd-dialog-footer>\r\n </fd-dialog>\r\n</ng-template>\r\n<ng-template #footerButtons let-dialog=\"dialog\">\r\n <fd-button-bar [label]=\"'Ok' | bbbTranslate\" fdType=\"emphasized\" (click)=\"onOk(popover, dialog)\"></fd-button-bar>\r\n <fd-button-bar\r\n [label]=\"'Clear' | bbbTranslate\"\r\n fdType=\"standard\"\r\n (click)=\"onClear(popover, dialog)\"\r\n ></fd-button-bar>\r\n <fd-button-bar [label]=\"'Cancel' | bbbTranslate\" (click)=\"onCancel(popover, dialog)\"></fd-button-bar>\r\n</ng-template>\r\n<ng-template\r\n #month\r\n let-selectedMonth\r\n let-width=\"width\"\r\n let-height=\"height\"\r\n let-rtl=\"rtl\"\r\n let-today=\"today\"\r\n let-showEvents=\"showEvents\"\r\n let-deviceSize=\"deviceSize\"\r\n let-popover=\"popover\"\r\n let-dialog=\"dialog\"\r\n>\r\n <fd-toolbar [fdType]=\"'transparent'\" *ngIf=\"showDate\">\r\n <button\r\n fd-button\r\n fd-toolbar-item\r\n [label]=\"(showDate ? 'DateR_Today' : 'Now') | bbbTranslate\"\r\n (click)=\"onToday()\"\r\n ></button>\r\n <button\r\n *ngIf=\"showDate\"\r\n fd-button\r\n fd-toolbar-item\r\n [fdType]=\"'transparent'\"\r\n [glyph]=\"rtl ? 'navigation-right-arrow' : 'navigation-left-arrow'\"\r\n (click)=\"onPrevTap()\"\r\n ></button>\r\n <button\r\n *ngIf=\"showDate\"\r\n fd-button\r\n fd-toolbar-item\r\n [fdType]=\"'transparent'\"\r\n [glyph]=\"rtl ? 'navigation-left-arrow' : 'navigation-right-arrow'\"\r\n (click)=\"onNextTap()\"\r\n ></button>\r\n <div class=\"month-years-wrapper\" *ngIf=\"showDate\" fd-title fd-toolbar-item>\r\n <button\r\n *ngIf=\"selectionMode === 'day' || selectionMode === 'month'\"\r\n fd-button\r\n [fdType]=\"'transparent'\"\r\n [label]=\"selectedMonth.dateInfo.monthName\"\r\n (click)=\"selectionMode = 'month'\"\r\n ></button>\r\n <button\r\n fd-button\r\n [fdType]=\"'transparent'\"\r\n [label]=\"selectedMonth.dateInfo.year\"\r\n (click)=\"selectionMode = 'year'\"\r\n ></button>\r\n </div>\r\n </fd-toolbar>\r\n <div style=\"display: flex\">\r\n <ng-container [ngSwitch]=\"selectionMode\">\r\n <ng-container *ngSwitchCase=\"'month'\">\r\n <div class=\"month-year-selection-wrapper\">\r\n <button\r\n style=\"flex-grow: 1; width: 33%\"\r\n *ngFor=\"let month of months; let i = index\"\r\n fd-button\r\n [fdType]=\"selectedMonth.dateInfo.monthName === month ? 'emphasized' : 'transparent'\"\r\n [label]=\"month\"\r\n (click)=\"selectionMode = 'day'; onMonthSelected(month, i)\"\r\n ></button>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'year'\">\r\n <div class=\"month-year-selection-wrapper\">\r\n <button\r\n style=\"flex-grow: 1; width: 25%\"\r\n *ngFor=\"let year of years\"\r\n fd-button\r\n [fdType]=\"selectedMonth.dateInfo.year === +year ? 'emphasized' : 'transparent'\"\r\n [label]=\"year\"\r\n (click)=\"selectionMode = 'day'; onYearSelected(year)\"\r\n ></button>\r\n </div>\r\n </ng-container>\r\n <div *ngSwitchDefault style=\"display: flex\">\r\n <bc-calendar-month\r\n *ngIf=\"showDate\"\r\n [style.width]=\"width\"\r\n [containerHeight]=\"height\"\r\n [containerWidth]=\"width\"\r\n [rtl]=\"rtl\"\r\n [monthWeeksCount]=\"selectedMonth.weeksCount\"\r\n [weekDays]=\"weekDays\"\r\n [weekDaysMin]=\"weekDaysMin\"\r\n [today]=\"today\"\r\n [datePicker]=\"true\"\r\n [dateRange]=\"true\"\r\n [selectedDate]=\"startSelectedDay ? startSelectedDay.date : value\"\r\n [days]=\"selectedMonth.days\"\r\n [deviceSize]=\"deviceSize\"\r\n (dayClick)=\"onDayClick($event, popover, dialog)\"\r\n ></bc-calendar-month>\r\n <div class=\"seperator\"></div>\r\n <fd-time\r\n style=\"direction: ltr\"\r\n fdCompact\r\n *ngIf=\"showTime\"\r\n [keepTwoDigits]=\"true\"\r\n [(ngModel)]=\"timeValue\"\r\n [displaySeconds]=\"false\"\r\n ></fd-time>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{display:block}fd-popover{display:block}fd-input-group ::ng-deep input{direction:ltr}fd-time ::ng-deep .fd-time{padding-top:0}.seperator{border-left:.0625rem solid var(--sapPageFooter_BorderColor, #d9d9d9)}\n"] }]
|
|
386
|
-
}], ctorParameters: function () { return [{ type: i2.DatetimeAdapter }, { type: i1.DateTimeToCaptionPipe }, { type: i1.LogService }, { type: i2.DialogService }, { type: i1.PortalService }]; }, propDecorators: { placeholder: [{
|
|
387
|
-
type: Input
|
|
388
|
-
}], primaryCalendarType: [{
|
|
389
|
-
type: Input
|
|
390
|
-
}], formatPattern: [{
|
|
391
|
-
type: Input
|
|
392
|
-
}], value: [{
|
|
393
|
-
type: Input
|
|
394
|
-
}], timeValue: [{
|
|
395
|
-
type: Input
|
|
396
|
-
}], startRangeDate: [{
|
|
397
|
-
type: Input
|
|
398
|
-
}], endRangeDate: [{
|
|
399
|
-
type: Input
|
|
400
|
-
}], isRangePicker: [{
|
|
401
|
-
type: Input
|
|
402
|
-
}], showTime: [{
|
|
403
|
-
type: Input
|
|
404
|
-
}], showDate: [{
|
|
405
|
-
type: Input
|
|
406
|
-
}], rtl: [{
|
|
407
|
-
type: Input
|
|
408
|
-
}], deviceSize: [{
|
|
409
|
-
type: Input
|
|
410
|
-
}], isMobile: [{
|
|
411
|
-
type: Input
|
|
412
|
-
}], readonly: [{
|
|
413
|
-
type: Input
|
|
414
|
-
}], disabled: [{
|
|
415
|
-
type: Input
|
|
416
|
-
}], buttonMenuMode: [{
|
|
417
|
-
type: Input
|
|
418
|
-
}], inlineMode: [{
|
|
419
|
-
type: Input
|
|
420
|
-
}], daterangeMode: [{
|
|
421
|
-
type: Input
|
|
422
|
-
}], rangeChange: [{
|
|
423
|
-
type: Output
|
|
424
|
-
}], valueChange: [{
|
|
425
|
-
type: Output
|
|
426
|
-
}], timeComponent: [{
|
|
427
|
-
type: ViewChild,
|
|
428
|
-
args: [TimeComponent]
|
|
429
|
-
}], inputGroupComponent: [{
|
|
430
|
-
type: ViewChild,
|
|
431
|
-
args: [InputGroupComponent, { static: true }]
|
|
432
|
-
}] } });
|
|
433
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1jYWxlbmRhci9zcmMvbGliL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1jYWxlbmRhci9zcmMvbGliL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCxPQUFPLEVBQ0gsYUFBYSxFQUViLFdBQVcsRUFDWCxjQUFjLEVBR2QsUUFBUSxFQUdYLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFDSCxlQUFlLEVBRWYsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLFFBQVEsRUFDWCxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBRS9CLE1BQU0sT0FBTyxjQUFjO0lBb0N2QixZQUFvQixhQUErQjtRQUEvQixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFuQ25ELGlEQUFpRDtRQUNqRCx1QkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUV0QyxtQ0FBbUM7UUFDbkMsZUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5ELGlEQUFpRDtRQUNqRCx1QkFBa0IsR0FB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aEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDbUIsYUFBYTtzQkFBdEMsU0FBUzt1QkFBQyxhQUFhO2dCQUMwQixtQkFBbUI7c0JBQXBFLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSW5qZWN0YWJsZSxcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQmFzZUNvbXBvbmVudCxcclxuICAgIEJiYlRyYW5zbGF0ZVBpcGUsXHJcbiAgICBEYXRlU2VydmljZSxcclxuICAgIGdldERhdGVTZXJ2aWNlLFxyXG4gICAgTG9nU2VydmljZSxcclxuICAgIFBvcnRhbFNlcnZpY2UsXHJcbiAgICBCYXJzYUFwaSxcclxuICAgIERhdGVUaW1lVG9DYXB0aW9uUGlwZSxcclxuICAgIEFiYnJldmF0aW9uRGV2aWNlU2l6ZVxyXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuaW1wb3J0IHsgQ2FsZW5kYXJNb250aEluZm8sIERheSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NhbGVuZGFyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gICAgRGF0ZXRpbWVBZGFwdGVyLFxyXG4gICAgRGlhbG9nU2VydmljZSxcclxuICAgIEZkRGF0ZSxcclxuICAgIEZkRGF0ZXRpbWVBZGFwdGVyLFxyXG4gICAgSW5wdXRHcm91cENvbXBvbmVudCxcclxuICAgIFRpbWVDb21wb25lbnQsXHJcbiAgICBUaW1lSTE4blxyXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZSc7XHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFRpbWVDb25maWdJMThuIHtcclxuICAgIC8qKiBBcmlhIGxhYmVsIGZvciB0aGUgJ2luY3JlYXNlIGhvdXJzJyBidXR0b24gKi9cclxuICAgIGluY3JlYXNlSG91cnNMYWJlbCA9ICdJbmNyZWFzZSBob3Vycyc7XHJcblxyXG4gICAgLyoqIGxhYmVsIGZvciB0aGUgJ2hvdXJzJyBjb2x1bW4gKi9cclxuICAgIGhvdXJzTGFiZWwgPSB0aGlzLl9iYmJUcmFuc2xhdGUudHJhbnNmb3JtKCdIb3VycycpO1xyXG5cclxuICAgIC8qKiBBcmlhIGxhYmVsIGZvciB0aGUgJ2RlY3JlYXNlIGhvdXJzJyBidXR0b24gKi9cclxuICAgIGRlY3JlYXNlSG91cnNMYWJlbCA9ICdEZWNyZWFzZSBob3Vycyc7XHJcblxyXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSAnaW5jcmVhc2UgbWludXRlcycgYnV0dG9uICovXHJcbiAgICBpbmNyZWFzZU1pbnV0ZXNMYWJlbCA9ICdJbmNyZWFzZSBtaW51dGVzJztcclxuXHJcbiAgICAvKiogbGFiZWwgZm9yIHRoZSAnbWludXRlcycgY29sdW1uICovXHJcbiAgICBtaW51dGVzTGFiZWwgPSB0aGlzLl9iYmJUcmFuc2xhdGUudHJhbnNmb3JtKCdNaW51dGVzJyk7XHJcblxyXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSAnZGVjcmVhc2UgbWludXRlcycgYnV0dG9uICovXHJcbiAgICBkZWNyZWFzZU1pbnV0ZXNMYWJlbCA9ICdEZWNyZWFzZSBtaW51dGVzJztcclxuXHJcbiAgICAvKiogQXJpYSBsYWJlbCBmb3IgdGhlICdpbmNyZWFzZSBzZWNvbmRzJyBidXR0b24gKi9cclxuICAgIGluY3JlYXNlU2Vjb25kc0xhYmVsID0gJ0luY3JlYXNlIHNlY29uZHMnO1xyXG5cclxuICAgIC8qKiBsYWJlbCBmb3IgdGhlICdzZWNvbmRzJyBjb2x1bW4gKi9cclxuICAgIHNlY29uZHNMYWJlbCA9IHRoaXMuX2JiYlRyYW5zbGF0ZS50cmFuc2Zvcm0oJ1NlYycpO1xyXG5cclxuICAgIC8qKiBBcmlhIGxhYmVsIGZvciB0aGUgJ2RlY3JlYXNlIHNlY29uZHMnIGJ1dHRvbiAqL1xyXG4gICAgZGVjcmVhc2VTZWNvbmRzTGFiZWwgPSAnRGVjcmVhc2Ugc2Vjb25kcyc7XHJcblxyXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSAnaW5jcmVhc2UgcGVyaW9kJyBidXR0b24gKi9cclxuICAgIGluY3JlYXNlUGVyaW9kTGFiZWwgPSAnSW5jcmVhc2UgcGVyaW9kJztcclxuXHJcbiAgICAvKiogbGFiZWwgZm9yIHRoZSAncGVyaW9kJyBjb2x1bW4gKi9cclxuICAgIHBlcmlvZExhYmVsID0gJ1BlcmlvZCc7XHJcblxyXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSAnZGVjcmVhc2UgcGVyaW9kJyBidXR0b24gKi9cclxuICAgIGRlY3JlYXNlUGVyaW9kTGFiZWwgPSAnRGVjcmVhc2UgcGVyaW9kJztcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2JiYlRyYW5zbGF0ZTogQmJiVHJhbnNsYXRlUGlwZSkge31cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JjLWRhdGUtdGltZS1waWNrZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IERhdGV0aW1lQWRhcHRlcixcclxuICAgICAgICAgICAgdXNlQ2xhc3M6IEZkRGF0ZXRpbWVBZGFwdGVyXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IFRpbWVJMThuLFxyXG4gICAgICAgICAgICB1c2VDbGFzczogVGltZUNvbmZpZ0kxOG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogRGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IGdldERhdGVTZXJ2aWNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBDYWxlbmRhclNlcnZpY2VcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGVUaW1lUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwcmltYXJ5Q2FsZW5kYXJUeXBlOiAnR3JlZ29yaWFuJyB8ICdQZXJzaWFuJyB8IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGZvcm1hdFBhdHRlcm46IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHZhbHVlOiBEYXRlIHwgdW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgdGltZVZhbHVlOiBGZERhdGU7XHJcbiAgICBASW5wdXQoKSBzdGFydFJhbmdlRGF0ZTogRGF0ZTtcclxuICAgIEBJbnB1dCgpIGVuZFJhbmdlRGF0ZTogRGF0ZTtcclxuICAgIEBJbnB1dCgpIGlzUmFuZ2VQaWNrZXI6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBzaG93VGltZTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHNob3dEYXRlOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcnRsID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIGRldmljZVNpemU6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZTtcclxuICAgIEBJbnB1dCgpIGlzTW9iaWxlOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGJ1dHRvbk1lbnVNb2RlOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgaW5saW5lTW9kZTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGRhdGVyYW5nZU1vZGU6IGJvb2xlYW47XHJcbiAgICBAT3V0cHV0KCkgcmFuZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RhcnREYXk6IERhdGU7IGVuZERheTogRGF0ZSB9PigpO1xyXG4gICAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xyXG4gICAgQFZpZXdDaGlsZChUaW1lQ29tcG9uZW50KSB0aW1lQ29tcG9uZW50OiBUaW1lQ29tcG9uZW50PEZkRGF0ZT47XHJcbiAgICBAVmlld0NoaWxkKElucHV0R3JvdXBDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0R3JvdXBDb21wb25lbnQ6IElucHV0R3JvdXBDb21wb25lbnQ7XHJcbiAgICB2YWx1ZUNhcHRpb24gPSAnJztcclxuICAgIGVuZFNlbGVjdGVkRGF5OiBEYXkgfCBudWxsO1xyXG4gICAgc3RhcnRTZWxlY3RlZERheTogRGF5IHwgbnVsbDtcclxuICAgIHZhbHVlRGF5OiBEYXkgfCBudWxsO1xyXG5cclxuICAgIHNlbGVjdGlvbk1vZGU6ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJyA9ICdkYXknO1xyXG4gICAgdG9kYXlJbmRleCA9IC0xO1xyXG4gICAgd2lkdGgkOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgICBoZWlnaHQ6IG51bWJlcjtcclxuICAgIHNlbGVjdGVkTW9udGgkOiBPYnNlcnZhYmxlPENhbGVuZGFyTW9udGhJbmZvPjtcclxuICAgIHJ0bCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICB0b2RheTogRGF0ZTtcclxuICAgIHdlZWtEYXlzTWluOiBzdHJpbmdbXTtcclxuICAgIHdlZWtEYXlzOiBzdHJpbmdbXTtcclxuXHJcbiAgICBpc1ZhbGlkID0gdHJ1ZTtcclxuICAgIGN1bHR1cmU6IHN0cmluZztcclxuICAgIG1vbnRoczogc3RyaW5nW10gPSBbXTtcclxuICAgIHllYXJzOiBzdHJpbmdbXTtcclxuICAgIHRlbXBGb3JtbWF0ZWREYXRlID0gJyc7XHJcbiAgICBwcml2YXRlIF9jYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZTtcclxuICAgIHByaXZhdGUgX2xhc3RWYWx1ZTogRGF0ZSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9kYXRldGltZUFkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxGZERhdGU+LFxyXG4gICAgICAgIHByaXZhdGUgX2RhdGVUaW1lVG9DYXB0aW9uOiBEYXRlVGltZVRvQ2FwdGlvblBpcGUsXHJcbiAgICAgICAgcHJpdmF0ZSBfbG9nU2VydmljZTogTG9nU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9kaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgIF9wb3J0YWxTZXJ2aWNlOiBQb3J0YWxTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG5cclxuICAgICAgICB0aGlzLnJ0bCQgPSBfcG9ydGFsU2VydmljZS5ydGwkO1xyXG4gICAgICAgIHRoaXMud2lkdGgkID0gX3BvcnRhbFNlcnZpY2UuZGV2aWNlU2l6ZSQucGlwZShcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgbWFwKChkZXZpY2VTaXplKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hvd0RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjYwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChkZXZpY2VTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbCc6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAneGwnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNTYwO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMzIwO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA1MjA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSA0MjA7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICBsZXQgY3VsdHVyZSA9ICdlbi1VUyc7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnByaW1hcnlDYWxlbmRhclR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnSGlqcmlTaGFtc2knOlxyXG4gICAgICAgICAgICAgICAgY3VsdHVyZSA9ICdmYS1JUic7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdWx0dXJlID0gY3VsdHVyZTtcclxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UgPSBuZXcgQ2FsZW5kYXJTZXJ2aWNlKHRoaXMuX2xvZ1NlcnZpY2UsIGN1bHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5zZXRNb2RlKCdtb250aCcpO1xyXG4gICAgICAgIHRoaXMud2Vla0RheXNNaW4gPSB0aGlzLl9jYWxlbmRhclNlcnZpY2Uud2Vla0RheXNNaW4oKTtcclxuICAgICAgICB0aGlzLndlZWtEYXlzID0gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLndlZWtEYXlzKCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoJCA9IHRoaXMuX2NhbGVuZGFyU2VydmljZS5zZWxlY3RlZCQ7XHJcbiAgICAgICAgdGhpcy50b2RheSA9IHRoaXMuX2NhbGVuZGFyU2VydmljZS50b2RheTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lVmFsdWUgPSBGZERhdGUuZ2V0RmREYXRlQnlEYXRlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRDYXB0aW9uKHRoaXMudmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UubG9hZE1vbnRoQnlEYXRlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZVZhbHVlID0gRmREYXRlLmdldEZkRGF0ZUJ5RGF0ZShuZXcgRGF0ZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgKHRoaXMuaXNSYW5nZVBpY2tlcikge1xyXG4gICAgICAgIC8vICAgaWYgKHRoaXMuc3RhcnRSYW5nZURhdGUpIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmxvYWRNb250aEJ5RGF0ZSh0aGlzLnN0YXJ0UmFuZ2VEYXRlKTtcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyAgIGlmICh0aGlzLmVuZFJhbmdlRGF0ZSkge1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICB0aGlzLl9jYWxlbmRhclNlcnZpY2UubG9hZE1vbnRoQnlEYXRlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICB0aGlzLm1vbnRocyA9IHRoaXMuX2NhbGVuZGFyU2VydmljZS5Nb250aHM7XHJcbiAgICAgICAgdGhpcy5fcHJlcGFyZVllYXIodGhpcy5fY2FsZW5kYXJTZXJ2aWNlLnNlbGVjdGVkTW9udGguZGF0ZUluZm8ueWVhcik7XHJcbiAgICAgICAgdGhpcy5fc2V0Rm9ybWF0dGVkRGF0ZVRvSW5wdXQodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRHcm91cENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmlucHV0R3JvdXBDb21wb25lbnQucmVnaXN0ZXJPbkNoYW5nZSh0aGlzLm9uQ2FwdGlvbkNoYW5nZWQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IGNoYW5nZXM7XHJcbiAgICAgICAgaWYgKHZhbHVlICYmICF2YWx1ZS5maXJzdENoYW5nZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjYXB0aW9uID0gdGhpcy5fZ2V0Rm9ybWF0dGVkRGF0ZSh2YWx1ZS5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAoY2FwdGlvbiAhPT0gdGhpcy5pbnB1dEdyb3VwQ29tcG9uZW50Py5pbnB1dFRleHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldEZvcm1hdHRlZERhdGVUb0lucHV0KHRoaXMudmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgb25SYW5nZUNoYW5nZShlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yYW5nZUNoYW5nZS5lbWl0KHtcclxuICAgICAgICAgICAgc3RhcnREYXk6IGUuc3RhcnREYXksXHJcbiAgICAgICAgICAgIGVuZERheTogZS5lbmREYXlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIG9uT3BlblBvcG92ZXIocG9wb3ZlciwgZGlhbG9nVGVtcGxhdGUpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRpbWVDb21wb25lbnQucmVmcmVzaENvbHVtbnMoKSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRldmljZVNpemUgPT09ICdzJyB8fCB0aGlzLmlzTW9iaWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlbihkaWFsb2dUZW1wbGF0ZSwge1xyXG4gICAgICAgICAgICAgICAgbW9iaWxlOiB0cnVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBvcG92ZXIub3BlbigpO1xyXG4gICAgfVxyXG4gICAgb25Nb250aFNlbGVjdGVkKG1vbnRoTmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmdvdG9Nb250aChtb250aE5hbWUsIGluZGV4KTtcclxuICAgIH1cclxuICAgIG9uWWVhclNlbGVjdGVkKHllYXI6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5nb3RvWWVhcigreWVhcik7XHJcbiAgICB9XHJcblxyXG4gICAgb25DYXB0aW9uQ2hhbmdlZChlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGUubGVuZ3RoIDwgMTApIHtcclxuICAgICAgICAgICAgaWYgKGUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yYWlzVmFsdWVDaGFuZ2VkKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZW5nbGlzaERhdGVTdHIgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5SZXBsYWNlRmFUb0FyQ2hhcmNodGVyKGUpO1xyXG4gICAgICAgIGxldCBmb3JtYXQgPSAnallZWVkvak0vakQnO1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XHJcbiAgICAgICAgICAgIGZvcm1hdCArPSAnIEhIOm1tJztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9tZW50ID0gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLl9kYXRlU2VydmljZS5zdHJpbmdUb01vbWVudChlbmdsaXNoRGF0ZVN0ciwgZm9ybWF0KTtcclxuICAgICAgICAvLyBjb25zdCBpc1ZhbGlkID0gbW9tZW50LmlzVmFsaWQoKTsvLyDYqNix2KfbjCDYtNmF2LPbjCDZh9mF24zYtNmHIGZhbHNlINmG2LTZiNmGINmF24zYr9mHXHJcbiAgICAgICAgaWYgKGlzTmFOKERhdGUucGFyc2UoZW5nbGlzaERhdGVTdHIpKSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkYXRlID0gbW9tZW50LnRvRGF0ZSgpO1xyXG4gICAgICAgIGlmIChpc05hTihkYXRlKSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzVmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGltZVZhbHVlID0gdGhpcy5fZGF0ZXRpbWVBZGFwdGVyLnNldFRpbWUoXHJcbiAgICAgICAgICAgIHRoaXMudGltZVZhbHVlLFxyXG4gICAgICAgICAgICBkYXRlLmdldEhvdXJzKCksXHJcbiAgICAgICAgICAgIGRhdGUuZ2V0TWludXRlcygpLFxyXG4gICAgICAgICAgICBkYXRlLmdldFNlY29uZHMoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zdGFydFNlbGVjdGVkRGF5ID0gdGhpcy5lbmRTZWxlY3RlZERheSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fcmFpc1ZhbHVlQ2hhbmdlZChkYXRlLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBvblByZXZUYXAoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ2RheScpIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmxvYWRQcmV2aW91cygpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbW9udGgnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5sb2FkUHJldlllYXIoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3llYXInKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVZZWFyKE51bWJlcih0aGlzLnllYXJzWzBdKSAtIDIwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25OZXh0VGFwKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdkYXknKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5sb2FkTmV4dCgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbW9udGgnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5sb2FkTmV4dFllYXIoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3llYXInKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVZZWFyKE51bWJlcih0aGlzLnllYXJzW3RoaXMueWVhcnMubGVuZ3RoIC0gMV0pICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uVG9kYXkoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMudGltZVZhbHVlID0gdGhpcy5fZGF0ZXRpbWVBZGFwdGVyLnNldFRpbWUoXHJcbiAgICAgICAgICAgIHRoaXMudGltZVZhbHVlLFxyXG4gICAgICAgICAgICB0b2RheS5nZXRIb3VycygpLFxyXG4gICAgICAgICAgICB0b2RheS5nZXRNaW51dGVzKCksXHJcbiAgICAgICAgICAgIHRvZGF5LmdldFNlY29uZHMoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NhbGVuZGFyU2VydmljZS50b2RheURheSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0U2VsZWN0ZWREYXkgPSB0aGlzLl9jYWxlbmRhclNlcnZpY2UudG9kYXlEYXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5nb3RvVG9kYXkoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkRheUNsaWNrKGRheTogRGF5LCBwb3BvdmVyLCBkaWFsb2cpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzVmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhcnRTZWxlY3RlZERheSA9IHRoaXMuZW5kU2VsZWN0ZWREYXkgPSBkYXk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9zZXRGaXJzdEFuZEVuZERheShkYXksIHBvcG92ZXIsIGRpYWxvZyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Qb3BvdmVyT3BlbkNoYW5nZShpc09wZW4pOiB2b2lkIHtcclxuICAgICAgICBpZiAoaXNPcGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xhc3RWYWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fbGFzdFZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG9uQ2xlYXIocG9wb3ZlciwgZGlhbG9nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGRpYWxvZykge1xyXG4gICAgICAgICAgICBkaWFsb2cuZGlzbWlzcygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHBvcG92ZXIuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLl9zZXRGb3JtYXR0ZWREYXRlVG9JbnB1dCh0aGlzLnZhbHVlKTtcclxuICAgICAgICB0aGlzLl9yYWlzVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgb25Payhwb3BvdmVyLCBkaWFsb2cpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZGlhbG9nKSB7XHJcbiAgICAgICAgICAgIGRpYWxvZy5kaXNtaXNzKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcG9wb3Zlci5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2hhbmRsZVZhbHVlQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgICBvbkNhbmNlbChwb3BvdmVyLCBkaWFsb2cpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fbGFzdFZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLl9sYXN0VmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldENhcHRpb24odGhpcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaWFsb2cpIHtcclxuICAgICAgICAgICAgZGlhbG9nLmRpc21pc3MoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBwb3BvdmVyLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NldEZvcm1hdHRlZERhdGVUb0lucHV0KGRhdGU6IERhdGUgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZGF0ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gdGhpcy5fZ2V0Rm9ybWF0dGVkRGF0ZShkYXRlKTtcclxuICAgICAgICAgICAgdGhpcy50ZW1wRm9ybW1hdGVkRGF0ZSA9IGZvcm1hdHRlZERhdGU7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXRHcm91cENvbXBvbmVudD8ud3JpdGVWYWx1ZShmb3JtYXR0ZWREYXRlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRlbXBGb3JtbWF0ZWREYXRlID0gJyc7XHJcbiAgICAgICAgdGhpcy5pbnB1dEdyb3VwQ29tcG9uZW50Py53cml0ZVZhbHVlKCcnKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2dldEZvcm1hdHRlZERhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lVG9DYXB0aW9uLnRyYW5zZm9ybShkYXRlLCB0aGlzLmZvcm1hdFBhdHRlcm4sIHRoaXMuY3VsdHVyZSwgdGhpcy5zaG93RGF0ZSwgdGhpcy5zaG93VGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaGFuZGxlVmFsdWVDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc2hvd0RhdGUgPyB0aGlzLnN0YXJ0U2VsZWN0ZWREYXk/LmRhdGUgPz8gdGhpcy52YWx1ZSA6IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBEYXRlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldEhvdXJzKHRoaXMudGltZVZhbHVlLmhvdXIpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldE1pbnV0ZXModGhpcy50aW1lVmFsdWUubWludXRlKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRTZWNvbmRzKHRoaXMudGltZVZhbHVlLnNlY29uZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3NldEZvcm1hdHRlZERhdGVUb0lucHV0KHRoaXMudmFsdWUpO1xyXG4gICAgICAgIHRoaXMuX3JhaXNWYWx1ZUNoYW5nZWQodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9wcmVwYXJlWWVhcihmcm9tOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB5ZWFyczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwOyBpKyspIHtcclxuICAgICAgICAgICAgeWVhcnMucHVzaChgJHtmcm9tICsgaX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy55ZWFycyA9IHllYXJzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfc2V0Q2FwdGlvbih2YWx1ZSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUNhcHRpb24gPSAnJztcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZm9ybWF0UGF0dGVybiA9IHRoaXMuZm9ybWF0UGF0dGVybi5yZXBsYWNlKCdZWVlZJywgJ2pZWVlZJyk7XHJcbiAgICAgICAgZm9ybWF0UGF0dGVybiA9IGZvcm1hdFBhdHRlcm4ucmVwbGFjZSgnTU0nLCAnak1NJyk7XHJcbiAgICAgICAgZm9ybWF0UGF0dGVybiA9IGZvcm1hdFBhdHRlcm4ucmVwbGFjZSgnREQnLCAnakREJyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUNhcHRpb24gPSB0aGlzLl9jYWxlbmRhclNlcnZpY2UuX2RhdGVTZXJ2aWNlLmdldE1vbWVudCh2YWx1ZSkuZm9ybWF0KGZvcm1hdFBhdHRlcm4pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfcmFpc1ZhbHVlQ2hhbmdlZChkYXRlLCBzZXRDYXB0aW9uID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRlO1xyXG4gICAgICAgIGlmIChzZXRDYXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldENhcHRpb24oZGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChkYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zZXRGaXJzdEFuZEVuZERheShkYXk6IERheSwgcG9wb3ZlciwgZGlhbG9nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGRpYWxvZykge1xyXG4gICAgICAgICAgICBkaWFsb2cuZGlzbWlzcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocG9wb3Zlcikge1xyXG4gICAgICAgICAgICBwb3BvdmVyLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pc1JhbmdlUGlja2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldEZvcm1hdHRlZERhdGVUb0lucHV0KGRheS5kYXRlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmFpc1ZhbHVlQ2hhbmdlZChkYXkuZGF0ZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRTZWxlY3RlZERheSkge1xyXG4gICAgICAgICAgICB0aGlzLmVuZFNlbGVjdGVkRGF5ID0gZGF5O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTZWxlY3RlZERheSA9IGRheTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRTZWxlY3RlZERheSAmJiB0aGlzLmVuZFNlbGVjdGVkRGF5ICYmIHRoaXMuc3RhcnRTZWxlY3RlZERheS5kYXRlID4gdGhpcy5lbmRTZWxlY3RlZERheS5kYXRlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSB0aGlzLnN0YXJ0U2VsZWN0ZWREYXk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTZWxlY3RlZERheSA9IHRoaXMuZW5kU2VsZWN0ZWREYXk7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kU2VsZWN0ZWREYXkgPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zdGFydFNlbGVjdGVkRGF5ICYmIHRoaXMuZW5kU2VsZWN0ZWREYXkpIHtcclxuICAgICAgICAgICAgdGhpcy5yYW5nZUNoYW5nZS5lbWl0KHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0RGF5OiB0aGlzLnN0YXJ0U2VsZWN0ZWREYXkuZGF0ZSxcclxuICAgICAgICAgICAgICAgIGVuZERheTogdGhpcy5lbmRTZWxlY3RlZERheS5kYXRlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiaW5saW5lTW9kZVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgIGRhdGVyYW5nZU1vZGUgPyBkYXRlUmFuZ2VUcGwgOiBtb250aDtcclxuICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgJGltcGxpY2l0OiBzZWxlY3RlZE1vbnRoJCB8IGFzeW5jLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoJCB8IGFzeW5jLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBydGw6IHJ0bCQgfCBhc3luYyxcclxuICAgICAgICAgICAgICAgIHdlZWtEYXlzOiB3ZWVrRGF5cyxcclxuICAgICAgICAgICAgICAgIHdlZWtEYXlzTWluOiB3ZWVrRGF5c01pbixcclxuICAgICAgICAgICAgICAgIHRvZGF5OiB0b2RheSxcclxuICAgICAgICAgICAgICAgIGRldmljZVNpemU6IGRldmljZVNpemUsXHJcbiAgICAgICAgICAgICAgICBwb3BvdmVyOiBwb3BvdmVyXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcIlxyXG4gICAgPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctY29udGFpbmVyPlxyXG48bmctdGVtcGxhdGUgI2RhdGVSYW5nZVRwbD5cclxuICAgIDxiYy1jYWxlbmRhci1zZWxlY3Rpb24tZGF5c1xyXG4gICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgIFtpbmxpbmVdPVwidHJ1ZVwiXHJcbiAgICAgICAgW21vbnRoSW5mb109XCIoc2VsZWN0ZWRNb250aCQgfCBhc3luYykhIVwiXHJcbiAgICAgICAgKHJhbmdlQ2hhbmdlKT1cIm9uUmFuZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICA+PC9iYy1jYWxlbmRhci1zZWxlY3Rpb24tZGF5cz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPGZkLWlucHV0LWdyb3VwXHJcbiAgICBwbGFjZW1lbnQ9XCJhZnRlclwiXHJcbiAgICBnbHlwaD1cImNhbGVuZGFyXCJcclxuICAgIGdseXBoQXJpYUxhYmVsPVwic2VsZWN0IGRheVwiXHJcbiAgICBhcmlhTGFiZWxsZWRCeT1cImZkLWlucHV0LWdyb3VwLWljb24tbGFiZWwtMlwiXHJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgW3ZhbHVlXT1cInZhbHVlXCJcclxuICAgIFtidXR0b25dPVwidHJ1ZVwiXHJcbiAgICBbc3RhdGVdPVwiaXNWYWxpZCA/ICdzdWNjZXNzJyA6ICdlcnJvcidcIlxyXG4gICAgW3Nob3dGb2N1c109XCJ0cnVlXCJcclxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgW3N0eWxlLmRpc3BsYXldPVwiIWJ1dHRvbk1lbnVNb2RlIHx8IGlubGluZU1vZGUgPyAnaW5oZXJpdCcgOiAnbm9uZSdcIlxyXG4gICAgKGFkZE9uQnV0dG9uQ2xpY2tlZCk9XCJvbk9wZW5Qb3BvdmVyKHBvcG92ZXIsIGRpYWxvZ1RlbXBsYXRlKVwiXHJcbj5cclxuPC9mZC1pbnB1dC1ncm91cD5cclxuPGJ1dHRvblxyXG4gICAgKm5nSWY9XCJidXR0b25NZW51TW9kZVwiXHJcbiAgICBmZC1idXR0b25cclxuICAgIFtsYWJlbF09XCJ0ZW1wRm9ybW1hdGVkRGF0ZSB8fCBwbGFjZWhvbGRlclwiXHJcbiAgICBbdGl0bGVdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgW2ZkVHlwZV09XCJ2YWx1ZSA/ICdzdGFuZGFyZCcgOiAndHJhbnNwYXJlbnQnXCJcclxuICAgIFtmZE1lbnVdPVwidHJ1ZVwiXHJcbiAgICAoY2xpY2spPVwib25PcGVuUG9wb3Zlcihwb3BvdmVyLCBkaWFsb2dUZW1wbGF0ZSlcIlxyXG4gICAgW2NsYXNzLnBsYWNlaG9sZGVyLWN1c3RvbV09XCIhdmFsdWVcIlxyXG4gICAgY2xhc3M9XCJtZW51LWJ1dHRvbi1kYXRlcGlja2VyXCJcclxuPjwvYnV0dG9uPlxyXG5cclxuPGZkLXBvcG92ZXIgI3BvcG92ZXIgKGlzT3BlbkNoYW5nZSk9XCJvblBvcG92ZXJPcGVuQ2hhbmdlKCRldmVudClcIiBbZm9jdXNUcmFwcGVkXT1cInRydWVcIiBbZm9jdXNBdXRvQ2FwdHVyZV09XCJ0cnVlXCI+XHJcbiAgICA8ZmQtcG9wb3Zlci1ib2R5IFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aCQgfCBhc3luY1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgIG1vbnRoO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogc2VsZWN0ZWRNb250aCQgfCBhc3luYyxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgkIHwgYXN5bmMsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgcnRsOiBydGwkIHwgYXN5bmMsXHJcbiAgICAgICAgICAgICAgICAgICAgd2Vla0RheXM6IHdlZWtEYXlzLFxyXG4gICAgICAgICAgICAgICAgICAgIHdlZWtEYXlzTWluOiB3ZWVrRGF5c01pbixcclxuICAgICAgICAgICAgICAgICAgICB0b2RheTogdG9kYXksXHJcbiAgICAgICAgICAgICAgICAgICAgZGV2aWNlU2l6ZTogZGV2aWNlU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICBwb3BvdmVyOiBwb3BvdmVyXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgZmQtcG9wb3Zlci1ib2R5LWZvb3Rlcj5cclxuICAgICAgICAgICAgPGRpdiBmZC1iYXIgW2JhckRlc2lnbl09XCInZm9vdGVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlckJ1dHRvbnNcIj48L2NvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxyXG48L2ZkLXBvcG92ZXI+XHJcbjxuZy10ZW1wbGF0ZSBsZXQtZGlhbG9nIGxldC1kaWFsb2dDb25maWc9XCJkaWFsb2dDb25maWdcIiAjZGlhbG9nVGVtcGxhdGU+XHJcbiAgICA8ZmQtZGlhbG9nIFtkaWFsb2dDb25maWddPVwiZGlhbG9nQ29uZmlnXCIgW2RpYWxvZ1JlZl09XCJkaWFsb2dcIj5cclxuICAgICAgICA8ZmQtZGlhbG9nLWJvZHk+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbW9udGg7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHNlbGVjdGVkTW9udGgkIHwgYXN5bmMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCQgfCBhc3luYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ0bDogcnRsJCB8IGFzeW5jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWVrRGF5czogd2Vla0RheXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlZWtEYXlzTWluOiB3ZWVrRGF5c01pbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9kYXk6IHRvZGF5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VTaXplOiBkZXZpY2VTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyOiBwb3BvdmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2c6IGRpYWxvZ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9mZC1kaWFsb2ctYm9keT5cclxuICAgICAgICA8ZmQtZGlhbG9nLWZvb3Rlcj5cclxuICAgICAgICAgICAgPGNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlckJ1dHRvbnM7IGNvbnRleHQ6IHsgZGlhbG9nOiBkaWFsb2cgfVwiPjwvY29udGFpbmVyPlxyXG4gICAgICAgIDwvZmQtZGlhbG9nLWZvb3Rlcj5cclxuICAgIDwvZmQtZGlhbG9nPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2Zvb3RlckJ1dHRvbnMgbGV0LWRpYWxvZz1cImRpYWxvZ1wiPlxyXG4gICAgPGZkLWJ1dHRvbi1iYXIgW2xhYmVsXT1cIidPaycgfCBiYmJUcmFuc2xhdGVcIiBmZFR5cGU9XCJlbXBoYXNpemVkXCIgKGNsaWNrKT1cIm9uT2socG9wb3ZlciwgZGlhbG9nKVwiPjwvZmQtYnV0dG9uLWJhcj5cclxuICAgIDxmZC1idXR0b24tYmFyXHJcbiAgICAgICAgW2xhYmVsXT1cIidDbGVhcicgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgIGZkVHlwZT1cInN0YW5kYXJkXCJcclxuICAgICAgICAoY2xpY2spPVwib25DbGVhcihwb3BvdmVyLCBkaWFsb2cpXCJcclxuICAgID48L2ZkLWJ1dHRvbi1iYXI+XHJcbiAgICA8ZmQtYnV0dG9uLWJhciBbbGFiZWxdPVwiJ0NhbmNlbCcgfCBiYmJUcmFuc2xhdGVcIiAoY2xpY2spPVwib25DYW5jZWwocG9wb3ZlciwgZGlhbG9nKVwiPjwvZmQtYnV0dG9uLWJhcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlXHJcbiAgICAjbW9udGhcclxuICAgIGxldC1zZWxlY3RlZE1vbnRoXHJcbiAgICBsZXQtd2lkdGg9XCJ3aWR0aFwiXHJcbiAgICBsZXQtaGVpZ2h0PVwiaGVpZ2h0XCJcclxuICAgIGxldC1ydGw9XCJydGxcIlxyXG4gICAgbGV0LXRvZGF5PVwidG9kYXlcIlxyXG4gICAgbGV0LXNob3dFdmVudHM9XCJzaG93RXZlbnRzXCJcclxuICAgIGxldC1kZXZpY2VTaXplPVwiZGV2aWNlU2l6ZVwiXHJcbiAgICBsZXQtcG9wb3Zlcj1cInBvcG92ZXJcIlxyXG4gICAgbGV0LWRpYWxvZz1cImRpYWxvZ1wiXHJcbj5cclxuICAgIDxmZC10b29sYmFyIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiICpuZ0lmPVwic2hvd0RhdGVcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cclxuICAgICAgICAgICAgW2xhYmVsXT1cIihzaG93RGF0ZSA/ICdEYXRlUl9Ub2RheScgOiAnTm93JykgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25Ub2RheSgpXCJcclxuICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAqbmdJZj1cInNob3dEYXRlXCJcclxuICAgICAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgICAgICBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIlxyXG4gICAgICAgICAgICBbZ2x5cGhdPVwicnRsID8gJ25hdmlnYXRpb24tcmlnaHQtYXJyb3cnIDogJ25hdmlnYXRpb24tbGVmdC1hcnJvdydcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25QcmV2VGFwKClcIlxyXG4gICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd0RhdGVcIlxyXG4gICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgICAgIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiXHJcbiAgICAgICAgICAgIFtnbHlwaF09XCJydGwgPyAnbmF2aWdhdGlvbi1sZWZ0LWFycm93JyA6ICduYXZpZ2F0aW9uLXJpZ2h0LWFycm93J1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbk5leHRUYXAoKVwiXHJcbiAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC15ZWFycy13cmFwcGVyXCIgKm5nSWY9XCJzaG93RGF0ZVwiIGZkLXRpdGxlIGZkLXRvb2xiYXItaXRlbT5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3Rpb25Nb2RlID09PSAnZGF5JyB8fCBzZWxlY3Rpb25Nb2RlID09PSAnbW9udGgnXCJcclxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzZWxlY3RlZE1vbnRoLmRhdGVJbmZvLm1vbnRoTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0aW9uTW9kZSA9ICdtb250aCdcIlxyXG4gICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzZWxlY3RlZE1vbnRoLmRhdGVJbmZvLnllYXJcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGlvbk1vZGUgPSAneWVhcidcIlxyXG4gICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2ZkLXRvb2xiYXI+XHJcbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInNlbGVjdGlvbk1vZGVcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21vbnRoJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vbnRoLXllYXItc2VsZWN0aW9uLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmxleC1ncm93OiAxOyB3aWR0aDogMzMlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1vbnRoIG9mIG1vbnRoczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmRUeXBlXT1cInNlbGVjdGVkTW9udGguZGF0ZUluZm8ubW9udGhOYW1lID09PSBtb250aCA/ICdlbXBoYXNpemVkJyA6ICd0cmFuc3BhcmVudCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibW9udGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0aW9uTW9kZSA9ICdkYXknOyBvbk1vbnRoU2VsZWN0ZWQobW9udGgsIGkpXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid5ZWFyJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vbnRoLXllYXItc2VsZWN0aW9uLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmxleC1ncm93OiAxOyB3aWR0aDogMjUlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHllYXIgb2YgeWVhcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZkVHlwZV09XCJzZWxlY3RlZE1vbnRoLmRhdGVJbmZvLnllYXIgPT09ICt5ZWFyID8gJ2VtcGhhc2l6ZWQnIDogJ3RyYW5zcGFyZW50J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ5ZWFyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGlvbk1vZGUgPSAnZGF5Jzsgb25ZZWFyU2VsZWN0ZWQoeWVhcilcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0IHN0eWxlPVwiZGlzcGxheTogZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGJjLWNhbGVuZGFyLW1vbnRoXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIndpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29udGFpbmVySGVpZ2h0XT1cImhlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRhaW5lcldpZHRoXT1cIndpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICBbcnRsXT1cInJ0bFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21vbnRoV2Vla3NDb3VudF09XCJzZWxlY3RlZE1vbnRoLndlZWtzQ291bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt3ZWVrRGF5c109XCJ3ZWVrRGF5c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3dlZWtEYXlzTWluXT1cIndlZWtEYXlzTWluXCJcclxuICAgICAgICAgICAgICAgICAgICBbdG9kYXldPVwidG9kYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkYXRlUGlja2VyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkYXRlUmFuZ2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkRGF0ZV09XCJzdGFydFNlbGVjdGVkRGF5ID8gc3RhcnRTZWxlY3RlZERheS5kYXRlIDogdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkYXlzXT1cInNlbGVjdGVkTW9udGguZGF5c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2RldmljZVNpemVdPVwiZGV2aWNlU2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGRheUNsaWNrKT1cIm9uRGF5Q2xpY2soJGV2ZW50LCBwb3BvdmVyLCBkaWFsb2cpXCJcclxuICAgICAgICAgICAgICAgID48L2JjLWNhbGVuZGFyLW1vbnRoPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcGVyYXRvclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGZkLXRpbWVcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImRpcmVjdGlvbjogbHRyXCJcclxuICAgICAgICAgICAgICAgICAgICBmZENvbXBhY3RcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dUaW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBba2VlcFR3b0RpZ2l0c109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRpbWVWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlTZWNvbmRzXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgID48L2ZkLXRpbWU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|