asksuite-citrus 0.2.0 → 0.2.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.
@@ -2,9 +2,19 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import moment from 'moment';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/common";
5
- export const asDate = (inMoment) => {
6
- return inMoment.utc(true).toDate();
7
- };
5
+ export var PeriodLabel;
6
+ (function (PeriodLabel) {
7
+ PeriodLabel["TODAY"] = "TODAY";
8
+ PeriodLabel["YESTERDAY"] = "YESTERDAY";
9
+ PeriodLabel["LAST_7_DAYS"] = "LAST_7_DAYS";
10
+ PeriodLabel["LAST_30_DAYS"] = "LAST_30_DAYS";
11
+ PeriodLabel["THIS_MONTH"] = "THIS_MONTH";
12
+ PeriodLabel["LAST_QUARTER"] = "LAST_QUARTER";
13
+ PeriodLabel["CUSTOM_PERIOD"] = "CUSTOM_PERIOD";
14
+ })(PeriodLabel || (PeriodLabel = {}));
15
+ export const DEFAULT_DATE_FORMAT = 'YYYY-MM-DDTHH:mm:ssZ';
16
+ export const formatFrom = (from) => from.startOf('day').format(DEFAULT_DATE_FORMAT);
17
+ export const formatTo = (from) => from.endOf('day').format(DEFAULT_DATE_FORMAT);
8
18
  export class DatePickerCalendarComponent {
9
19
  constructor() {
10
20
  this.isRange = false;
@@ -43,15 +53,15 @@ export class DatePickerCalendarComponent {
43
53
  }
44
54
  isFirstSelectedDay(day) {
45
55
  if (this.isRange) {
46
- return day.timestamp === this.innerDate.from?.timestamp;
56
+ return day.formatted === this.innerDate.from?.formatted;
47
57
  }
48
- return this.innerDate.timestamp === day.timestamp;
58
+ return this.innerDate.formatted === day.formatted;
49
59
  }
50
60
  isLastSelectedDay(day) {
51
61
  if (this.isRange) {
52
- return day.timestamp === (this.innerDate.to?.timestamp || this.innerDate.from?.timestamp);
62
+ return day.formatted === (this.innerDate.to?.formatted || this.innerDate.from?.formatted);
53
63
  }
54
- return this.innerDate.timestamp === day.timestamp;
64
+ return this.innerDate.formatted === day.formatted;
55
65
  }
56
66
  ngOnInit() {
57
67
  this.assignInitialValues();
@@ -62,9 +72,9 @@ export class DatePickerCalendarComponent {
62
72
  const receivedDate = this.date;
63
73
  if (receivedDate.from && receivedDate.to) {
64
74
  this.innerDate = {
65
- from: this.getDayFromDate(receivedDate.from),
66
- to: this.getDayFromDate(receivedDate.to),
67
- label: receivedDate.label || 'CUSTOM_PERIOD'
75
+ from: this.getDayFromString(receivedDate.from),
76
+ to: this.getDayFromString(receivedDate.to),
77
+ label: PeriodLabel[receivedDate.label || 'CUSTOM_PERIOD'].toString()
68
78
  };
69
79
  }
70
80
  else {
@@ -75,7 +85,7 @@ export class DatePickerCalendarComponent {
75
85
  this.displayDate = moment.unix(this.innerDate.from?.timestamp || (Date.now() / 1000));
76
86
  }
77
87
  else {
78
- this.innerDate = this.getDayFromDate(this.date);
88
+ this.innerDate = this.getDayFromString(this.date);
79
89
  this.displayDate = moment.unix(this.innerDate.timestamp);
80
90
  }
81
91
  this.firstDayOfWeek = this.displayDate.clone().startOf('week').day();
@@ -144,14 +154,15 @@ export class DatePickerCalendarComponent {
144
154
  timestamp: day.unix(),
145
155
  day: day.format('D'),
146
156
  month: day.month(),
147
- weekDay: day.day()
157
+ weekDay: day.day(),
158
+ formatted: day.format(DEFAULT_DATE_FORMAT),
148
159
  };
149
160
  }
150
- getDayFromDate(date) {
151
- return this.getDayFromMoment(moment(date).utc(false));
161
+ getDayFromString(date) {
162
+ return this.getDayFromMoment(moment(date));
152
163
  }
153
164
  getDateFromDay(day) {
154
- return moment.unix(day.timestamp).startOf('day').toDate();
165
+ return moment.unix(day.timestamp).startOf('day').format(DEFAULT_DATE_FORMAT);
155
166
  }
156
167
  incrementMonth(amount) {
157
168
  this.displayDate.add(amount, 'month');
@@ -194,17 +205,17 @@ export class DatePickerCalendarComponent {
194
205
  }
195
206
  emitRange(range) {
196
207
  const newRange = {};
197
- newRange.label = 'CUSTOM_PERIOD';
208
+ newRange.label = PeriodLabel.CUSTOM_PERIOD;
198
209
  if (range.from) {
199
210
  newRange.from = this.getDateFromDay(range.from);
200
211
  if (range.to)
201
- newRange.to = asDate(moment.unix(range.to.timestamp).endOf('day'));
212
+ newRange.to = formatTo(moment.unix(range.to.timestamp));
202
213
  }
203
214
  this.dateChange.emit(newRange);
204
215
  }
205
216
  handleSingleSelect(momentDate) {
206
217
  this.innerDate = this.getDayFromMoment(momentDate);
207
- this.dateChange.emit(asDate(momentDate));
218
+ this.dateChange.emit(momentDate.format(DEFAULT_DATE_FORMAT));
208
219
  }
209
220
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: DatePickerCalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
210
221
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: DatePickerCalendarComponent, selector: "ask-date-picker-calendar", inputs: { isRange: "isRange", date: "date" }, outputs: { dateChange: "dateChange" }, ngImport: i0, template: "<div class=\"date-picker-calendar-container\">\n <header class=\"month-selector\">\n <button type=\"button\" class=\"selector-button\" (click)=\"incrementMonth(-1)\">\n <span class=\"material-icons icon\">chevron_left</span>\n </button>\n\n <span class=\"month-year-display\" data-testid=\"month-year-display\">{{ month }} {{ year }}</span>\n\n <button type=\"button\" class=\"selector-button\" (click)=\"incrementMonth(1)\">\n <span class=\"material-icons icon\">chevron_right</span>\n </button>\n </header>\n\n <main class=\"calendar\">\n <div class=\"week-days-header\">\n <span class=\"week-day\" *ngFor=\"let weekDay of weekDays\">{{ weekDay.name }}</span>\n </div>\n\n <div class=\"days-block\" data-testid=\"days-block\">\n <span\n *ngFor=\"let day of days\"\n (click)=\"selectDate(day.timestamp)\"\n [ngClass]=\"{\n 'day': true,\n 'another-month': monthNumber != day.month,\n 'selected': isDaySelected(day),\n 'first': isFirstSelectedDay(day),\n 'last': isLastSelectedDay(day),\n }\"\n >\n {{ day.day }}\n </span>\n </div>\n </main>\n</div>\n", styles: [":root{--asksuite-orange: #FF5724;--white: #FFF;--grey-50: #F5F7FA;--grey-100: #E4E7EB;--grey-200: #CBD2D9;--grey-300: #9AA5B1;--grey-400: #7B8794;--grey-500: #616E7C;--grey-600: #52606D;--grey-700: #3E4C59;--grey-800: #2A3042;--grey-900: #1F2933;--yellow-50: #FFF8E2;--yellow-200: #FFECB3;--success-green: #4BAF50;--warning-yellow: #FFC107;--error-red: #E8453E;--shadow: rgba(42, 48, 66, .1607843137);--lightblue-tag: #CDF9F3;--lavender-tag: #D4DAF3;--green-tag: #CEEEAA;--pink-tag: #FBC5FF;--orange-tag: #FED5C9;--purple-tag: #DDBFE5;--yellow-tag: #FFE0B2;--blue-tag: #B2E5FD;--brown-tag: #EFC89C;--whatsapp-green: #68B35D;--facebook-blue: #0084FF;--instagram-pink: #D53E91;--google-blue: #345DC8;--telegram-blue: #34AADF;--telephone-yellow: #FECB00;--primary-background: #FFF;--secondary-background: #EFF3F8;--hover-background: #F5F7FA;--divider-background: #E4E7EB;--font-color-100: #2A3042;--font-color-200: #616E7C;--font-color-300: #9AA5B1}:root{--font-default: $font-default;--font-code: $font-code}:root{--font-xs: $font-xs;--font-sm: $font-sm;--font-md: $font-md;--font-lg: $font-lg;--font-xl: $font-xl;--font-xxl: $font-xxl}:root{--font-weight-regular: $font-weight-regular;--font-weight-medium: $font-weight-medium}:root{--radii-px: $radii-px;--radii-xs: $radii-xs;--radii-sm: $radii-sm;--radii-md: $radii-md;--radii-lg: $radii-lg;--radii-full: $radii-full}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:\"liga\";-webkit-font-smoothing:antialiased}*{box-sizing:border-box}*,button,select,textarea{font-family:Inter,sans-serif;font-weight:400}input{font-size:1rem}.date-picker-calendar-container{display:flex;flex-direction:column;padding:16px;width:320px;-webkit-user-select:none;user-select:none}.month-selector{display:flex;align-items:center;justify-content:space-between;padding:4px;background-color:var(--secondary-background);border-radius:4px;text-transform:capitalize}.month-selector>.month-year-display{font-size:.75rem;color:var(--font-color-100);font-weight:500}.selector-button{display:flex;align-items:center;justify-content:center;width:20px;height:20px;background-color:var(--primary-background);box-shadow:0 1px 2px #2a304229;outline:none;border:none;border-radius:4px;cursor:pointer}.selector-button>.icon{color:var(--font-color-100);font-size:18px}.calendar{display:flex;flex-direction:column;padding:16px 32px}.week-days-header{display:grid;grid-template-rows:auto;grid-template-columns:repeat(7,auto);place-items:center;padding-bottom:8px;border-bottom:1px solid #E4E7EB}.week-days-header>.week-day{display:flex;align-items:center;justify-content:center;font-size:.75rem;line-height:1rem;width:100%;color:var(--font-color-100)}.days-block{display:grid;grid-template-rows:repeat(6,auto);grid-template-columns:repeat(7,auto);place-items:center;row-gap:4px;color:var(--font-color-200);padding-top:4px}.days-block>.day{display:flex;align-items:center;justify-content:center;text-align:center;font-size:.75rem;line-height:1rem;width:100%;height:31px;border-radius:99999px;transition:.2s background-color,.2s color,.2s font-weight}.days-block>.day.another-month{color:var(--font-color-300)}.days-block>.day.selected,.days-block>.day:hover{color:#ff5724;background-color:#ff57241a;cursor:pointer}.days-block>.day.selected{border-radius:0;font-weight:500}.days-block>.day.selected.first{border-top-left-radius:99999px;border-bottom-left-radius:99999px}.days-block>.day.selected.last{border-top-right-radius:99999px;border-bottom-right-radius:99999px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); }
@@ -219,4 +230,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
219
230
  }], dateChange: [{
220
231
  type: Output
221
232
  }] } });
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNrc3VpdGUtY2l0cnVzL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci1jYWxlbmRhci9kYXRlLXBpY2tlci1jYWxlbmRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc2tzdWl0ZS1jaXRydXMvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLWNhbGVuZGFyL2RhdGUtcGlja2VyLWNhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDOzs7QUFFNUIsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUMsUUFBdUIsRUFBRSxFQUFFO0lBQ2hELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNyQyxDQUFDLENBQUE7QUEwQkQsTUFBTSxPQUFPLDJCQUEyQjtJQUx4QztRQU1XLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFeEIsZUFBVSxHQUFrQyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUtsRixjQUFTLEdBQW1CLEVBQUUsQ0FBQztRQUMvQixVQUFLLEdBQWUsRUFBRSxDQUFDO0tBdVBoQztJQXJQQyxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUE7SUFDbkIsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsQ0FBQztJ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QztTQUNsRjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxVQUF5QjtRQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDOzhHQS9QVSwyQkFBMkI7a0dBQTNCLDJCQUEyQixxSkMvQnhDLHlxQ0FtQ0E7OzJGREphLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDRSwwQkFBMEI7OEJBSzNCLE9BQU87c0JBQWYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmV4cG9ydCBjb25zdCBhc0RhdGUgPSAoaW5Nb21lbnQ6IG1vbWVudC5Nb21lbnQpID0+IHtcbiAgcmV0dXJuIGluTW9tZW50LnV0Yyh0cnVlKS50b0RhdGUoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXkge1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgZGF5OiBzdHJpbmc7XG4gIG1vbnRoOiBudW1iZXI7XG4gIHdlZWtEYXk6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXZWVrRGF5IHtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBEYXRlUmFuZ2UgPSB7IGZyb20/OiBEYXRlOyB0bz86IERhdGU7IGxhYmVsPzogc3RyaW5nOyB9O1xuXG5leHBvcnQgdHlwZSBEYXRlUGlja2VyVmFsdWUgPSBEYXRlIHwgRGF0ZVJhbmdlO1xuXG50eXBlIERheVJhbmdlID0geyBmcm9tPzogRGF5OyB0bz86IERheTsgbGFiZWw/OiBzdHJpbmc7IH07XG5cbnR5cGUgRGF0ZVBpY2tlcklubmVyVmFsdWUgPSBEYXkgfCBEYXlSYW5nZTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXNrLWRhdGUtcGlja2VyLWNhbGVuZGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcGlja2VyLWNhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1waWNrZXItY2FsZW5kYXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyQ2FsZW5kYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBpc1JhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRhdGUhOiBEYXRlUGlja2VyVmFsdWU7XG4gIEBPdXRwdXQoKSBkYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZVBpY2tlclZhbHVlPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZVBpY2tlclZhbHVlPigpO1xuXG4gIHByaXZhdGUgaW5uZXJEYXRlITogRGF0ZVBpY2tlcklubmVyVmFsdWU7XG4gIHByaXZhdGUgZGlzcGxheURhdGUhOiBtb21lbnQuTW9tZW50O1xuICBwcml2YXRlIGZpcnN0RGF5T2ZXZWVrITogbnVtYmVyO1xuICBwcml2YXRlIF93ZWVrRGF5czogQXJyYXk8V2Vla0RheT4gPSBbXTtcbiAgcHJpdmF0ZSBfZGF5czogQXJyYXk8RGF5PiA9IFtdO1xuXG4gIGdldCBkYXlzKCk6IEFycmF5PERheT4ge1xuICAgIHJldHVybiB0aGlzLl9kYXlzXG4gIH1cblxuICBnZXQgbW9udGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5RGF0ZS5mb3JtYXQoJ01NTU0nKTtcbiAgfVxuXG4gIGdldCBtb250aE51bWJlcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXlEYXRlLm1vbnRoKCk7XG4gIH1cblxuICBnZXQgeWVhcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXlEYXRlLmZvcm1hdCgnWVlZWScpO1xuICB9XG5cbiAgZ2V0IHdlZWtEYXlzKCk6IEFycmF5PFdlZWtEYXk+IHtcbiAgICByZXR1cm4gdGhpcy5fd2Vla0RheXM7XG4gIH1cblxuICBpc0RheVNlbGVjdGVkKGRheTogRGF5KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuXG4gICAgICBjb25zdCBmcm9tID0gKHRoaXMuaW5uZXJEYXRlIGFzIERheVJhbmdlKS5mcm9tPy50aW1lc3RhbXA7XG4gICAgICBjb25zdCB0byA9ICh0aGlzLmlubmVyRGF0ZSBhcyBEYXlSYW5nZSkudG8/LnRpbWVzdGFtcDtcblxuICAgICAgaWYgKCFmcm9tKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKCF0bykge1xuICAgICAgICByZXR1cm4gZGF5LnRpbWVzdGFtcCA9PT0gZnJvbTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRheS50aW1lc3RhbXAgPj0gZnJvbSAmJiBkYXkudGltZXN0YW1wIDw9IHRvO1xuICAgIH1cblxuICAgIHJldHVybiAodGhpcy5pbm5lckRhdGUgYXMgRGF5KT8udGltZXN0YW1wID09PSBkYXkudGltZXN0YW1wO1xuICB9XG5cbiAgaXNGaXJzdFNlbGVjdGVkRGF5KGRheTogRGF5KSB7XG4gICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgcmV0dXJuIGRheS50aW1lc3RhbXAgPT09ICh0aGlzLmlubmVyRGF0ZSBhcyBEYXlSYW5nZSkuZnJvbT8udGltZXN0YW1wO1xuICAgIH1cblxuICAgIHJldHVybiAodGhpcy5pbm5lckRhdGUgYXMgRGF5KS50aW1lc3RhbXAgPT09IGRheS50aW1lc3RhbXA7XG4gIH1cblxuICBpc0xhc3RTZWxlY3RlZERheShkYXk6IERheSkge1xuICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgIHJldHVybiBkYXkudGltZXN0YW1wID09PSAoKHRoaXMuaW5uZXJEYXRlIGFzIERheVJhbmdlKS50bz8udGltZXN0YW1wIHx8ICh0aGlzLmlubmVyRGF0ZSBhcyBEYXlSYW5nZSkuZnJvbT8udGltZXN0YW1wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKHRoaXMuaW5uZXJEYXRlIGFzIERheSkudGltZXN0YW1wID09PSBkYXkudGltZXN0YW1wO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hc3NpZ25Jbml0aWFsVmFsdWVzKCk7XG4gICAgdGhpcy5yZWZyZXNoRGlzcGxheSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25Jbml0aWFsVmFsdWVzKCkge1xuICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVkRGF0ZSA9IHRoaXMuZGF0ZSBhcyBEYXRlUmFuZ2U7XG4gICAgICBpZiAocmVjZWl2ZWREYXRlLmZyb20gJiYgcmVjZWl2ZWREYXRlLnRvKSB7XG4gICAgICAgICh0aGlzLmlubmVyRGF0ZSBhcyBEYXlSYW5nZSkgPSB7XG4gICAgICAgICAgZnJvbTogdGhpcy5nZXREYXlGcm9tRGF0ZShyZWNlaXZlZERhdGUuZnJvbSksXG4gICAgICAgICAgdG86IHRoaXMuZ2V0RGF5RnJvbURhdGUocmVjZWl2ZWREYXRlLnRvKSxcbiAgICAgICAgICBsYWJlbDogcmVjZWl2ZWREYXRlLmxhYmVsIHx8ICdDVVNUT01fUEVSSU9EJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgKHRoaXMuaW5uZXJEYXRlIGFzIERheVJhbmdlKSA9IHtcbiAgICAgICAgICBsYWJlbDogJ0NVU1RPTV9QRVJJT0QnXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLmRpc3BsYXlEYXRlID0gbW9tZW50LnVuaXgoKHRoaXMuaW5uZXJEYXRlIGFzIERheVJhbmdlKS5mcm9tPy50aW1lc3RhbXAgfHwgKERhdGUubm93KCkgLyAxMDAwKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5pbm5lckRhdGUgPSB0aGlzLmdldERheUZyb21EYXRlKHRoaXMuZGF0ZSBhcyBEYXRlKTtcbiAgICAgIHRoaXMuZGlzcGxheURhdGUgPSBtb21lbnQudW5peCh0aGlzLmlubmVyRGF0ZS50aW1lc3RhbXApO1xuICAgIH1cblxuICAgIHRoaXMuZmlyc3REYXlPZldlZWsgPSB0aGlzLmRpc3BsYXlEYXRlLmNsb25lKCkuc3RhcnRPZignd2VlaycpLmRheSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoRGlzcGxheSgpIHtcbiAgICB0aGlzLmJ1aWxkV2Vla0RheXMoKTtcbiAgICB0aGlzLmJ1aWxkRGF5cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFdlZWtEYXlzKCkge1xuICAgIGNvbnN0IHN0YXJ0T2ZXZWVrID0gdGhpcy5kaXNwbGF5RGF0ZS5jbG9uZSgpLnN0YXJ0T2YoJ3dlZWsnKTtcbiAgICBjb25zdCBlbmRPZldlZWsgPSB0aGlzLmRpc3BsYXlEYXRlLmNsb25lKCkuZW5kT2YoJ3dlZWsnKTtcbiAgICB0aGlzLl93ZWVrRGF5cyA9IFtdO1xuXG4gICAgZG8ge1xuICAgICAgdGhpcy5fd2Vla0RheXMucHVzaCh7XG4gICAgICAgIG5hbWU6IHN0YXJ0T2ZXZWVrLmZvcm1hdCgnZGRkJylcbiAgICAgIH0pO1xuXG4gICAgICBzdGFydE9mV2Vlay5hZGQoMSwgJ2RheScpO1xuICAgIH1cbiAgICB3aGlsZSAoc3RhcnRPZldlZWsuaXNCZWZvcmUoZW5kT2ZXZWVrKSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRGF5cygpIHtcbiAgICBsZXQgc3RhcnREYXkgPSB0aGlzLmRpc3BsYXlEYXRlLmNsb25lKCkuc3RhcnRPZignbW9udGgnKTtcbiAgICBsZXQgZW5kRGF5ID0gdGhpcy5kaXNwbGF5RGF0ZS5jbG9uZSgpLmVuZE9mKCdtb250aCcpO1xuXG4gICAgbGV0IGRheXNPZlBhc3RNb250aDogQXJyYXk8RGF5PiA9IFtdO1xuICAgIGxldCBkYXlzT2ZUaGlzTW9udGg6IEFycmF5PERheT4gPSBbXTtcbiAgICBsZXQgZGF5c09mTmV4dE1vbnRoOiBBcnJheTxEYXk+ID0gW107XG5cbiAgICAvLyBCdWlsZHMgdGhpcyBtb250aCBkYXlzXG4gICAgZGF5c09mVGhpc01vbnRoID0gdGhpcy5nZXREYXlzQmV0d2VlbihzdGFydERheSwgZW5kRGF5KTtcblxuICAgIC8vIEJ1aWxkcyBwYXN0IG1vbnRoIGRheXNcbiAgICBpZiAoZGF5c09mVGhpc01vbnRoWzBdLndlZWtEYXkgIT09IHRoaXMuZmlyc3REYXlPZldlZWspIHtcbiAgICAgIHN0YXJ0RGF5ID0gdGhpcy5kaXNwbGF5RGF0ZS5jbG9uZSgpLnN0YXJ0T2YoJ21vbnRoJykuc3RhcnRPZignd2VlaycpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHN0YXJ0RGF5ID0gdGhpcy5kaXNwbGF5RGF0ZS5jbG9uZSgpLnN1YnRyYWN0KDEsICdtb250aCcpLmVuZE9mKCdtb250aCcpLnN0YXJ0T2YoJ3dlZWsnKTtcbiAgICB9XG4gICAgZW5kRGF5ID0gc3RhcnREYXkuY2xvbmUoKS5lbmRPZignbW9udGgnKTtcbiAgICBkYXlzT2ZQYXN0TW9udGggPSB0aGlzLmdldERheXNCZXR3ZWVuKHN0YXJ0RGF5LCBlbmREYXkpO1xuXG4gICAgLy8gQnVpbGRzIG5leHQgbW9udGggZGF5c1xuICAgIHN0YXJ0RGF5ID0gdGhpcy5kaXNwbGF5RGF0ZS5jbG9uZSgpLmFkZCgxLCAnbW9udGgnKS5zdGFydE9mKCdtb250aCcpO1xuICAgIGVuZERheSA9IHN0YXJ0RGF5LmNsb25lKCkuZW5kT2YoJ3dlZWsnKTtcbiAgICBkYXlzT2ZOZXh0TW9udGggPSB0aGlzLmdldERheXNCZXR3ZWVuKHN0YXJ0RGF5LCBlbmREYXkpO1xuXG4gICAgdGhpcy5fZGF5cyA9IFtcbiAgICAgIC4uLmRheXNPZlBhc3RNb250aCxcbiAgICAgIC4uLmRheXNPZlRoaXNNb250aCxcbiAgICAgIC4uLmRheXNPZk5leHRNb250aCxcbiAgICBdO1xuXG4gICAgLy8gSWYgY2FsZW5kYXIgaXNuJ3QgY29tcGxldGUgeWV0IChhbGwgNyBjb2x1bW5zIGFuZCA2IHJvd3MgYXJlIGZ1bGwpLCBhZGRzIGFub3RoZXIgd2VlayB0byBjb21wbGV0ZSB0aGUgY2FsZW5kYXJcbiAgICBpZiAodGhpcy5fZGF5cy5sZW5ndGggPCA0Mikge1xuICAgICAgZW5kRGF5ID0gZW5kRGF5LmNsb25lKCkuYWRkKDEsICdkYXknKS5lbmRPZignd2VlaycpO1xuICAgICAgc3RhcnREYXkgPSBlbmREYXkuY2xvbmUoKS5zdGFydE9mKCd3ZWVrJyk7XG4gICAgICB0aGlzLl9kYXlzLnB1c2goLi4udGhpcy5nZXREYXlzQmV0d2VlbihzdGFydERheSwgZW5kRGF5KSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXlzQmV0d2VlbihzdGFydDogbW9tZW50Lk1vbWVudCwgZW5kOiBtb21lbnQuTW9tZW50KTogQXJyYXk8RGF5PiB7XG4gICAgc3RhcnQgPSBzdGFydC5jbG9uZSgpO1xuICAgIGVuZCA9IGVuZC5jbG9uZSgpO1xuXG4gICAgY29uc3QgZGF5cyA9IFtdO1xuICAgIGRvIHtcbiAgICAgIGRheXMucHVzaCh0aGlzLmdldERheUZyb21Nb21lbnQoc3RhcnQpKTtcblxuICAgICAgc3RhcnQuYWRkKDEsICdkYXknKTtcbiAgICB9XG4gICAgd2hpbGUgKHN0YXJ0LmlzQmVmb3JlKGVuZCkpO1xuXG4gICAgcmV0dXJuIGRheXM7XG4gIH1cblxuICBnZXREYXlGcm9tTW9tZW50KGRheTogbW9tZW50Lk1vbWVudCk6IERheSB7XG4gICAgZGF5ID0gZGF5LmNsb25lKCkuc3RhcnRPZignZGF5Jyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGltZXN0YW1wOiBkYXkudW5peCgpLFxuICAgICAgZGF5OiBkYXkuZm9ybWF0KCdEJyksXG4gICAgICBtb250aDogZGF5Lm1vbnRoKCksXG4gICAgICB3ZWVrRGF5OiBkYXkuZGF5KClcbiAgICB9XG4gIH1cblxuICBnZXREYXlGcm9tRGF0ZShkYXRlOiBEYXRlKTogRGF5IHtcbiAgICByZXR1cm4gdGhpcy5nZXREYXlGcm9tTW9tZW50KG1vbWVudChkYXRlKS51dGMoZmFsc2UpKTtcbiAgfVxuXG4gIGdldERhdGVGcm9tRGF5KGRheTogRGF5KTogRGF0ZSB7XG4gICAgcmV0dXJuIG1vbWVudC51bml4KGRheS50aW1lc3RhbXApLnN0YXJ0T2YoJ2RheScpLnRvRGF0ZSgpO1xuICB9XG5cbiAgaW5jcmVtZW50TW9udGgoYW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLmRpc3BsYXlEYXRlLmFkZChhbW91bnQsICdtb250aCcpO1xuICAgIHRoaXMucmVmcmVzaERpc3BsYXkoKTtcbiAgfVxuXG4gIHNlbGVjdERhdGUodGltZXN0YW1wOiBudW1iZXIpIHtcbiAgICBjb25zdCBtb21lbnREYXRlID0gbW9tZW50LnVuaXgodGltZXN0YW1wKTtcblxuICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgIHRoaXMuaGFuZGxlUmFuZ2VTZWxlY3QobW9tZW50RGF0ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVTaW5nbGVTZWxlY3QobW9tZW50RGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSYW5nZVNlbGVjdChzZWxlY3RlZERhdGU6IG1vbWVudC5Nb21lbnQpIHtcbiAgICBjb25zdCBpbm5lckRhdGUgPSAodGhpcy5pbm5lckRhdGUgYXMgRGF5UmFuZ2UpO1xuXG4gICAgLy8gRmlyc3Qgc2VsZWN0aW9uXG4gICAgaWYgKCFpbm5lckRhdGUuZnJvbSkge1xuICAgICAgaW5uZXJEYXRlLmZyb20gPSB0aGlzLmdldERheUZyb21Nb21lbnQoc2VsZWN0ZWREYXRlKTtcbiAgICB9XG5cbiAgICAvLyBTZWNvbmQgc2VsZWN0aW9uXG4gICAgZWxzZSBpZiAoIWlubmVyRGF0ZS50bykge1xuICAgICAgY29uc3QgYWN0dWFsRnJvbSA9IG1vbWVudC51bml4KGlubmVyRGF0ZS5mcm9tLnRpbWVzdGFtcCk7XG5cbiAgICAgIC8vIFNlbGVjdGVkIGRhdGUgaXMgcGFzdCB0aGUgcHJldmlvdXMgc2VsZWN0ZWQgZGF0ZVxuICAgICAgaWYgKHNlbGVjdGVkRGF0ZS5pc0JlZm9yZShhY3R1YWxGcm9tLCAnZGF5JykpIHtcbiAgICAgICAgaW5uZXJEYXRlLnRvID0gaW5uZXJEYXRlLmZyb207XG4gICAgICAgIGlubmVyRGF0ZS5mcm9tID0gdGhpcy5nZXREYXlGcm9tTW9tZW50KHNlbGVjdGVkRGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlbGVjdGVkIGRhdGUgaXMgZnV0dXJlIG9mIHRoZSBwcmV2aW91cyBzZWxlY3RlZCBkYXRlXG4gICAgICBlbHNlIHtcbiAgICAgICAgaW5uZXJEYXRlLnRvID0gdGhpcy5nZXREYXlGcm9tTW9tZW50KHNlbGVjdGVkRGF0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2VsZWN0aW9uIHdoZW4gYm90aCBmcm9tIGFuZCB0byBhcmUgYWxyZWFkeSBzZWxlY3RlZFxuICAgIGVsc2Uge1xuICAgICAgaW5uZXJEYXRlLmZyb20gPSB0aGlzLmdldERheUZyb21Nb21lbnQoc2VsZWN0ZWREYXRlKTtcbiAgICAgIGlubmVyRGF0ZS50byA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRSYW5nZShpbm5lckRhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmFuZ2UocmFuZ2U6IERheVJhbmdlKSB7XG4gICAgY29uc3QgbmV3UmFuZ2U6IERhdGVSYW5nZSA9IHt9O1xuICAgIG5ld1JhbmdlLmxhYmVsID0gJ0NVU1RPTV9QRVJJT0QnO1xuXG4gICAgaWYgKHJhbmdlLmZyb20pIHtcbiAgICAgIG5ld1JhbmdlLmZyb20gPSB0aGlzLmdldERhdGVGcm9tRGF5KHJhbmdlLmZyb20pO1xuXG4gICAgICBpZiAocmFuZ2UudG8pIG5ld1JhbmdlLnRvID0gYXNEYXRlKG1vbWVudC51bml4KHJhbmdlLnRvLnRpbWVzdGFtcCkuZW5kT2YoJ2RheScpKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdChuZXdSYW5nZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNpbmdsZVNlbGVjdChtb21lbnREYXRlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgdGhpcy5pbm5lckRhdGUgPSB0aGlzLmdldERheUZyb21Nb21lbnQobW9tZW50RGF0ZSk7XG4gICAgdGhpcy5kYXRlQ2hhbmdlLmVtaXQoYXNEYXRlKG1vbWVudERhdGUpKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWNhbGVuZGFyLWNvbnRhaW5lclwiPlxuICA8aGVhZGVyIGNsYXNzPVwibW9udGgtc2VsZWN0b3JcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlbGVjdG9yLWJ1dHRvblwiIChjbGljayk9XCJpbmNyZW1lbnRNb250aCgtMSlcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgaWNvblwiPmNoZXZyb25fbGVmdDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxzcGFuIGNsYXNzPVwibW9udGgteWVhci1kaXNwbGF5XCIgZGF0YS10ZXN0aWQ9XCJtb250aC15ZWFyLWRpc3BsYXlcIj57eyBtb250aCB9fSB7eyB5ZWFyIH19PC9zcGFuPlxuXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZWxlY3Rvci1idXR0b25cIiAoY2xpY2spPVwiaW5jcmVtZW50TW9udGgoMSlcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgaWNvblwiPmNoZXZyb25fcmlnaHQ8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvaGVhZGVyPlxuXG4gIDxtYWluIGNsYXNzPVwiY2FsZW5kYXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwid2Vlay1kYXlzLWhlYWRlclwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ3ZWVrLWRheVwiICpuZ0Zvcj1cImxldCB3ZWVrRGF5IG9mIHdlZWtEYXlzXCI+e3sgd2Vla0RheS5uYW1lIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImRheXMtYmxvY2tcIiBkYXRhLXRlc3RpZD1cImRheXMtYmxvY2tcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5c1wiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3REYXRlKGRheS50aW1lc3RhbXApXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdkYXknOiB0cnVlLFxuICAgICAgICAgICdhbm90aGVyLW1vbnRoJzogbW9udGhOdW1iZXIgIT0gZGF5Lm1vbnRoLFxuICAgICAgICAgICdzZWxlY3RlZCc6IGlzRGF5U2VsZWN0ZWQoZGF5KSxcbiAgICAgICAgICAnZmlyc3QnOiBpc0ZpcnN0U2VsZWN0ZWREYXkoZGF5KSxcbiAgICAgICAgICAnbGFzdCc6IGlzTGFzdFNlbGVjdGVkRGF5KGRheSksXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICB7eyBkYXkuZGF5IH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvbWFpbj5cbjwvZGl2PlxuIl19
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNrc3VpdGUtY2l0cnVzL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci1jYWxlbmRhci9kYXRlLXBpY2tlci1jYWxlbmRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc2tzdWl0ZS1jaXRydXMvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLWNhbGVuZGFyL2RhdGUtcGlja2VyLWNhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDOzs7QUFFNUIsTUFBTSxDQUFOLElBQVksV0FRWDtBQVJELFdBQVksV0FBVztJQUNyQiw4QkFBZSxDQUFBO0lBQ2Ysc0NBQXVCLENBQUE7SUFDdkIsMENBQTJCLENBQUE7SUFDM0IsNENBQTZCLENBQUE7SUFDN0Isd0NBQXlCLENBQUE7SUFDekIsNENBQTZCLENBQUE7SUFDN0IsOENBQStCLENBQUE7QUFDakMsQ0FBQyxFQVJXLFdBQVcsS0FBWCxXQUFXLFFBUXRCO0FBc0JELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLHNCQUFzQixDQUFDO0FBQzFELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQW1CLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUE7QUFDbEcsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBbUIsRUFBRSxFQUFFLENB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QUM7WUFDckQsU0FBUyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUM7U0FDMUI7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFTyxTQUFTLENBQUMsS0FBZTtRQUMvQixNQUFNLFFBQVEsR0FBYyxFQUFFLENBQUM7UUFDL0IsUUFBUSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDO1FBRTNDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtZQUNkLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFaEQsSUFBSSxLQUFLLENBQUMsRUFBRTtnQkFBRSxRQUFRLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUN2RTtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxVQUF5QjtRQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDOzhHQWhRVSwyQkFBMkI7a0dBQTNCLDJCQUEyQixxSkMxQ3hDLHlxQ0FtQ0E7OzJGRE9hLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDRSwwQkFBMEI7OEJBSzNCLE9BQU87c0JBQWYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmV4cG9ydCBlbnVtIFBlcmlvZExhYmVsIHtcbiAgVE9EQVkgPSAnVE9EQVknLFxuICBZRVNURVJEQVkgPSAnWUVTVEVSREFZJyxcbiAgTEFTVF83X0RBWVMgPSAnTEFTVF83X0RBWVMnLFxuICBMQVNUXzMwX0RBWVMgPSAnTEFTVF8zMF9EQVlTJyxcbiAgVEhJU19NT05USCA9ICdUSElTX01PTlRIJyxcbiAgTEFTVF9RVUFSVEVSID0gJ0xBU1RfUVVBUlRFUicsXG4gIENVU1RPTV9QRVJJT0QgPSAnQ1VTVE9NX1BFUklPRCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF5IHtcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGRheTogc3RyaW5nO1xuICBtb250aDogbnVtYmVyO1xuICB3ZWVrRGF5OiBudW1iZXI7XG4gIGZvcm1hdHRlZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdlZWtEYXkge1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIERhdGVSYW5nZSA9IHsgZnJvbT86IHN0cmluZzsgdG8/OiBzdHJpbmc7IGxhYmVsPzogUGVyaW9kTGFiZWw7IH07XG5cbmV4cG9ydCB0eXBlIERhdGVQaWNrZXJWYWx1ZSA9IHN0cmluZyB8IERhdGVSYW5nZTtcblxudHlwZSBEYXlSYW5nZSA9IHsgZnJvbT86IERheTsgdG8/OiBEYXk7IGxhYmVsPzogc3RyaW5nOyB9O1xuXG50eXBlIERhdGVQaWNrZXJJbm5lclZhbHVlID0gRGF5IHwgRGF5UmFuZ2U7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0RBVEVfRk9STUFUID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcbmV4cG9ydCBjb25zdCBmb3JtYXRGcm9tID0gKGZyb206IG1vbWVudC5Nb21lbnQpID0+IGZyb20uc3RhcnRPZignZGF5JykuZm9ybWF0KERFRkFVTFRfREFURV9GT1JNQVQpXG5leHBvcnQgY29uc3QgZm9ybWF0VG8gPSAoZnJvbTogbW9tZW50Lk1vbWVudCkgPT4gZnJvbS5lbmRPZignZGF5JykuZm9ybWF0KERFRkFVTFRfREFURV9GT1JNQVQpXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Fzay1kYXRlLXBpY2tlci1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXBpY2tlci1jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGUtcGlja2VyLWNhbGVuZGFyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlckNhbGVuZGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgaXNSYW5nZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkYXRlITogRGF0ZVBpY2tlclZhbHVlO1xuICBAT3V0cHV0KCkgZGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGVQaWNrZXJWYWx1ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVQaWNrZXJWYWx1ZT4oKTtcblxuICBwcml2YXRlIGlubmVyRGF0ZSE6IERhdGVQaWNrZXJJbm5lclZhbHVlO1xuICBwcml2YXRlIGRpc3BsYXlEYXRlITogbW9tZW50Lk1vbWVudDtcbiAgcHJpdmF0ZSBmaXJzdERheU9mV2VlayE6IG51bWJlcjtcbiAgcHJpdmF0ZSBfd2Vla0RheXM6IEFycmF5PFdlZWtEYXk+ID0gW107XG4gIHByaXZhdGUgX2RheXM6IEFycmF5PERheT4gPSBbXTtcblxuICBnZXQgZGF5cygpOiBBcnJheTxEYXk+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF5c1xuICB9XG5cbiAgZ2V0IG1vbnRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheURhdGUuZm9ybWF0KCdNTU1NJyk7XG4gIH1cblxuICBnZXQgbW9udGhOdW1iZXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5RGF0ZS5tb250aCgpO1xuICB9XG5cbiAgZ2V0IHllYXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5RGF0ZS5mb3JtYXQoJ1lZWVknKTtcbiAgfVxuXG4gIGdldCB3ZWVrRGF5cygpOiBBcnJheTxXZWVrRGF5PiB7XG4gICAgcmV0dXJuIHRoaXMuX3dlZWtEYXlzO1xuICB9XG5cbiAgaXNEYXlTZWxlY3RlZChkYXk6IERheSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcblxuICAgICAgY29uc3QgZnJvbSA9ICh0aGlzLmlubmVyRGF0ZSBhcyBEYXlSYW5nZSkuZnJvbT8udGltZXN0YW1wO1xuICAgICAgY29uc3QgdG8gPSAodGhpcy5pbm5lckRhdGUgYXMgRGF5UmFuZ2UpLnRvPy50aW1lc3RhbXA7XG5cbiAgICAgIGlmICghZnJvbSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICghdG8pIHtcbiAgICAgICAgcmV0dXJuIGRheS50aW1lc3RhbXAgPT09IGZyb207XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXkudGltZXN0YW1wID49IGZyb20gJiYgZGF5LnRpbWVzdGFtcCA8PSB0bztcbiAgICB9XG5cbiAgICByZXR1cm4gKHRoaXMuaW5uZXJEYXRlIGFzIERheSk/LnRpbWVzdGFtcCA9PT0gZGF5LnRpbWVzdGFtcDtcbiAgfVxuXG4gIGlzRmlyc3RTZWxlY3RlZERheShkYXk6IERheSkge1xuICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgIHJldHVybiBkYXkuZm9ybWF0dGVkID09PSAodGhpcy5pbm5lckRhdGUgYXMgRGF5UmFuZ2UpLmZyb20/LmZvcm1hdHRlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gKHRoaXMuaW5uZXJEYXRlIGFzIERheSkuZm9ybWF0dGVkID09PSBkYXkuZm9ybWF0dGVkO1xuICB9XG5cbiAgaXNMYXN0U2VsZWN0ZWREYXkoZGF5OiBEYXkpIHtcbiAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICByZXR1cm4gZGF5LmZvcm1hdHRlZCA9PT0gKCh0aGlzLmlubmVyRGF0ZSBhcyBEYXlSYW5nZSkudG8/LmZvcm1hdHRlZCB8fCAodGhpcy5pbm5lckRhdGUgYXMgRGF5UmFuZ2UpLmZyb20/LmZvcm1hdHRlZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICh0aGlzLmlubmVyRGF0ZSBhcyBEYXkpLmZvcm1hdHRlZCA9PT0gZGF5LmZvcm1hdHRlZDtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYXNzaWduSW5pdGlhbFZhbHVlcygpO1xuICAgIHRoaXMucmVmcmVzaERpc3BsYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXNzaWduSW5pdGlhbFZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICBjb25zdCByZWNlaXZlZERhdGUgPSB0aGlzLmRhdGUgYXMgRGF0ZVJhbmdlO1xuICAgICAgaWYgKHJlY2VpdmVkRGF0ZS5mcm9tICYmIHJlY2VpdmVkRGF0ZS50bykge1xuICAgICAgICAodGhpcy5pbm5lckRhdGUgYXMgRGF5UmFuZ2UpID0ge1xuICAgICAgICAgIGZyb206IHRoaXMuZ2V0RGF5RnJvbVN0cmluZyhyZWNlaXZlZERhdGUuZnJvbSksXG4gICAgICAgICAgdG86IHRoaXMuZ2V0RGF5RnJvbVN0cmluZyhyZWNlaXZlZERhdGUudG8pLFxuICAgICAgICAgIGxhYmVsOiBQZXJpb2RMYWJlbFtyZWNlaXZlZERhdGUubGFiZWwgfHwgJ0NVU1RPTV9QRVJJT0QnXS50b1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAodGhpcy5pbm5lckRhdGUgYXMgRGF5UmFuZ2UpID0ge1xuICAgICAgICAgIGxhYmVsOiAnQ1VTVE9NX1BFUklPRCdcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlzcGxheURhdGUgPSBtb21lbnQudW5peCgodGhpcy5pbm5lckRhdGUgYXMgRGF5UmFuZ2UpLmZyb20/LnRpbWVzdGFtcCB8fCAoRGF0ZS5ub3coKSAvIDEwMDApKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmlubmVyRGF0ZSA9IHRoaXMuZ2V0RGF5RnJvbVN0cmluZyh0aGlzLmRhdGUgYXMgc3RyaW5nKTtcbiAgICAgIHRoaXMuZGlzcGxheURhdGUgPSBtb21lbnQudW5peCh0aGlzLmlubmVyRGF0ZS50aW1lc3RhbXApO1xuICAgIH1cblxuICAgIHRoaXMuZmlyc3REYXlPZldlZWsgPSB0aGlzLmRpc3BsYXlEYXRlLmNsb25lKCkuc3RhcnRPZignd2VlaycpLmRheSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoRGlzcGxheSgpIHtcbiAgICB0aGlzLmJ1aWxkV2Vla0RheXMoKTtcbiAgICB0aGlzLmJ1aWxkRGF5cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFdlZWtEYXlzKCkge1xuICAgIGNvbnN0IHN0YXJ0T2ZXZWVrID0gdGhpcy5kaXNwbGF5RGF0ZS5jbG9uZSgpLnN0YXJ0T2YoJ3dlZWsnKTtcbiAgICBjb25zdCBlbmRPZldlZWsgPSB0aGlzLmRpc3BsYXlEYXRlLmNsb25lKCkuZW5kT2YoJ3dlZWsnKTtcbiAgICB0aGlzLl93ZWVrRGF5cyA9IFtdO1xuXG4gICAgZG8ge1xuICAgICAgdGhpcy5fd2Vla0RheXMucHVzaCh7XG4gICAgICAgIG5hbWU6IHN0YXJ0T2ZXZWVrLmZvcm1hdCgnZGRkJylcbiAgICAgIH0pO1xuXG4gICAgICBzdGFydE9mV2Vlay5hZGQoMSwgJ2RheScpO1xuICAgIH1cbiAgICB3aGlsZSAoc3RhcnRPZldlZWsuaXNCZWZvcmUoZW5kT2ZXZWVrKSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRGF5cygpIHtcbiAgICBsZXQgc3RhcnREYXkgPSB0aGlzLmRpc3BsYXlEYXRlLmNsb25lKCkuc3RhcnRPZignbW9udGgnKTtcbiAgICBsZXQgZW5kRGF5ID0gdGhpcy5kaXNwbGF5RGF0ZS5jbG9uZSgpLmVuZE9mKCdtb250aCcpO1xuXG4gICAgbGV0IGRheXNPZlBhc3RNb250aDogQXJyYXk8RGF5PiA9IFtdO1xuICAgIGxldCBkYXlzT2ZUaGlzTW9udGg6IEFycmF5PERheT4gPSBbXTtcbiAgICBsZXQgZGF5c09mTmV4dE1vbnRoOiBBcnJheTxEYXk+ID0gW107XG5cbiAgICAvLyBCdWlsZHMgdGhpcyBtb250aCBkYXlzXG4gICAgZGF5c09mVGhpc01vbnRoID0gdGhpcy5nZXREYXlzQmV0d2VlbihzdGFydERheSwgZW5kRGF5KTtcblxuICAgIC8vIEJ1aWxkcyBwYXN0IG1vbnRoIGRheXNcbiAgICBpZiAoZGF5c09mVGhpc01vbnRoWzBdLndlZWtEYXkgIT09IHRoaXMuZmlyc3REYXlPZldlZWspIHtcbiAgICAgIHN0YXJ0RGF5ID0gdGhpcy5kaXNwbGF5RGF0ZS5jbG9uZSgpLnN0YXJ0T2YoJ21vbnRoJykuc3RhcnRPZignd2VlaycpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHN0YXJ0RGF5ID0gdGhpcy5kaXNwbGF5RGF0ZS5jbG9uZSgpLnN1YnRyYWN0KDEsICdtb250aCcpLmVuZE9mKCdtb250aCcpLnN0YXJ0T2YoJ3dlZWsnKTtcbiAgICB9XG4gICAgZW5kRGF5ID0gc3RhcnREYXkuY2xvbmUoKS5lbmRPZignbW9udGgnKTtcbiAgICBkYXlzT2ZQYXN0TW9udGggPSB0aGlzLmdldERheXNCZXR3ZWVuKHN0YXJ0RGF5LCBlbmREYXkpO1xuXG4gICAgLy8gQnVpbGRzIG5leHQgbW9udGggZGF5c1xuICAgIHN0YXJ0RGF5ID0gdGhpcy5kaXNwbGF5RGF0ZS5jbG9uZSgpLmFkZCgxLCAnbW9udGgnKS5zdGFydE9mKCdtb250aCcpO1xuICAgIGVuZERheSA9IHN0YXJ0RGF5LmNsb25lKCkuZW5kT2YoJ3dlZWsnKTtcbiAgICBkYXlzT2ZOZXh0TW9udGggPSB0aGlzLmdldERheXNCZXR3ZWVuKHN0YXJ0RGF5LCBlbmREYXkpO1xuXG4gICAgdGhpcy5fZGF5cyA9IFtcbiAgICAgIC4uLmRheXNPZlBhc3RNb250aCxcbiAgICAgIC4uLmRheXNPZlRoaXNNb250aCxcbiAgICAgIC4uLmRheXNPZk5leHRNb250aCxcbiAgICBdO1xuXG4gICAgLy8gSWYgY2FsZW5kYXIgaXNuJ3QgY29tcGxldGUgeWV0IChhbGwgNyBjb2x1bW5zIGFuZCA2IHJvd3MgYXJlIGZ1bGwpLCBhZGRzIGFub3RoZXIgd2VlayB0byBjb21wbGV0ZSB0aGUgY2FsZW5kYXJcbiAgICBpZiAodGhpcy5fZGF5cy5sZW5ndGggPCA0Mikge1xuICAgICAgZW5kRGF5ID0gZW5kRGF5LmNsb25lKCkuYWRkKDEsICdkYXknKS5lbmRPZignd2VlaycpO1xuICAgICAgc3RhcnREYXkgPSBlbmREYXkuY2xvbmUoKS5zdGFydE9mKCd3ZWVrJyk7XG4gICAgICB0aGlzLl9kYXlzLnB1c2goLi4udGhpcy5nZXREYXlzQmV0d2VlbihzdGFydERheSwgZW5kRGF5KSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXlzQmV0d2VlbihzdGFydDogbW9tZW50Lk1vbWVudCwgZW5kOiBtb21lbnQuTW9tZW50KTogQXJyYXk8RGF5PiB7XG4gICAgc3RhcnQgPSBzdGFydC5jbG9uZSgpO1xuICAgIGVuZCA9IGVuZC5jbG9uZSgpO1xuXG4gICAgY29uc3QgZGF5cyA9IFtdO1xuICAgIGRvIHtcbiAgICAgIGRheXMucHVzaCh0aGlzLmdldERheUZyb21Nb21lbnQoc3RhcnQpKTtcblxuICAgICAgc3RhcnQuYWRkKDEsICdkYXknKTtcbiAgICB9XG4gICAgd2hpbGUgKHN0YXJ0LmlzQmVmb3JlKGVuZCkpO1xuXG4gICAgcmV0dXJuIGRheXM7XG4gIH1cblxuICBnZXREYXlGcm9tTW9tZW50KGRheTogbW9tZW50Lk1vbWVudCk6IERheSB7XG4gICAgZGF5ID0gZGF5LmNsb25lKCkuc3RhcnRPZignZGF5Jyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGltZXN0YW1wOiBkYXkudW5peCgpLFxuICAgICAgZGF5OiBkYXkuZm9ybWF0KCdEJyksXG4gICAgICBtb250aDogZGF5Lm1vbnRoKCksXG4gICAgICB3ZWVrRGF5OiBkYXkuZGF5KCksXG4gICAgICBmb3JtYXR0ZWQ6IGRheS5mb3JtYXQoREVGQVVMVF9EQVRFX0ZPUk1BVCksXG4gICAgfVxuICB9XG5cbiAgZ2V0RGF5RnJvbVN0cmluZyhkYXRlOiBzdHJpbmcpOiBEYXkge1xuICAgIHJldHVybiB0aGlzLmdldERheUZyb21Nb21lbnQobW9tZW50KGRhdGUpKTtcbiAgfVxuXG4gIGdldERhdGVGcm9tRGF5KGRheTogRGF5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gbW9tZW50LnVuaXgoZGF5LnRpbWVzdGFtcCkuc3RhcnRPZignZGF5JykuZm9ybWF0KERFRkFVTFRfREFURV9GT1JNQVQpO1xuICB9XG5cbiAgaW5jcmVtZW50TW9udGgoYW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLmRpc3BsYXlEYXRlLmFkZChhbW91bnQsICdtb250aCcpO1xuICAgIHRoaXMucmVmcmVzaERpc3BsYXkoKTtcbiAgfVxuXG4gIHNlbGVjdERhdGUodGltZXN0YW1wOiBudW1iZXIpIHtcbiAgICBjb25zdCBtb21lbnREYXRlID0gbW9tZW50LnVuaXgodGltZXN0YW1wKTtcblxuICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgIHRoaXMuaGFuZGxlUmFuZ2VTZWxlY3QobW9tZW50RGF0ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVTaW5nbGVTZWxlY3QobW9tZW50RGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSYW5nZVNlbGVjdChzZWxlY3RlZERhdGU6IG1vbWVudC5Nb21lbnQpIHtcbiAgICBjb25zdCBpbm5lckRhdGUgPSAodGhpcy5pbm5lckRhdGUgYXMgRGF5UmFuZ2UpO1xuXG4gICAgLy8gRmlyc3Qgc2VsZWN0aW9uXG4gICAgaWYgKCFpbm5lckRhdGUuZnJvbSkge1xuICAgICAgaW5uZXJEYXRlLmZyb20gPSB0aGlzLmdldERheUZyb21Nb21lbnQoc2VsZWN0ZWREYXRlKTtcbiAgICB9XG5cbiAgICAvLyBTZWNvbmQgc2VsZWN0aW9uXG4gICAgZWxzZSBpZiAoIWlubmVyRGF0ZS50bykge1xuICAgICAgY29uc3QgYWN0dWFsRnJvbSA9IG1vbWVudC51bml4KGlubmVyRGF0ZS5mcm9tLnRpbWVzdGFtcCk7XG5cbiAgICAgIC8vIFNlbGVjdGVkIGRhdGUgaXMgcGFzdCB0aGUgcHJldmlvdXMgc2VsZWN0ZWQgZGF0ZVxuICAgICAgaWYgKHNlbGVjdGVkRGF0ZS5pc0JlZm9yZShhY3R1YWxGcm9tLCAnZGF5JykpIHtcbiAgICAgICAgaW5uZXJEYXRlLnRvID0gaW5uZXJEYXRlLmZyb207XG4gICAgICAgIGlubmVyRGF0ZS5mcm9tID0gdGhpcy5nZXREYXlGcm9tTW9tZW50KHNlbGVjdGVkRGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlbGVjdGVkIGRhdGUgaXMgZnV0dXJlIG9mIHRoZSBwcmV2aW91cyBzZWxlY3RlZCBkYXRlXG4gICAgICBlbHNlIHtcbiAgICAgICAgaW5uZXJEYXRlLnRvID0gdGhpcy5nZXREYXlGcm9tTW9tZW50KHNlbGVjdGVkRGF0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2VsZWN0aW9uIHdoZW4gYm90aCBmcm9tIGFuZCB0byBhcmUgYWxyZWFkeSBzZWxlY3RlZFxuICAgIGVsc2Uge1xuICAgICAgaW5uZXJEYXRlLmZyb20gPSB0aGlzLmdldERheUZyb21Nb21lbnQoc2VsZWN0ZWREYXRlKTtcbiAgICAgIGlubmVyRGF0ZS50byA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRSYW5nZShpbm5lckRhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmFuZ2UocmFuZ2U6IERheVJhbmdlKSB7XG4gICAgY29uc3QgbmV3UmFuZ2U6IERhdGVSYW5nZSA9IHt9O1xuICAgIG5ld1JhbmdlLmxhYmVsID0gUGVyaW9kTGFiZWwuQ1VTVE9NX1BFUklPRDtcblxuICAgIGlmIChyYW5nZS5mcm9tKSB7XG4gICAgICBuZXdSYW5nZS5mcm9tID0gdGhpcy5nZXREYXRlRnJvbURheShyYW5nZS5mcm9tKTtcblxuICAgICAgaWYgKHJhbmdlLnRvKSBuZXdSYW5nZS50byA9IGZvcm1hdFRvKG1vbWVudC51bml4KHJhbmdlLnRvLnRpbWVzdGFtcCkpO1xuICAgIH1cblxuICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KG5ld1JhbmdlKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2luZ2xlU2VsZWN0KG1vbWVudERhdGU6IG1vbWVudC5Nb21lbnQpIHtcbiAgICB0aGlzLmlubmVyRGF0ZSA9IHRoaXMuZ2V0RGF5RnJvbU1vbWVudChtb21lbnREYXRlKTtcbiAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdChtb21lbnREYXRlLmZvcm1hdChERUZBVUxUX0RBVEVfRk9STUFUKSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1jYWxlbmRhci1jb250YWluZXJcIj5cbiAgPGhlYWRlciBjbGFzcz1cIm1vbnRoLXNlbGVjdG9yXCI+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZWxlY3Rvci1idXR0b25cIiAoY2xpY2spPVwiaW5jcmVtZW50TW9udGgoLTEpXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGljb25cIj5jaGV2cm9uX2xlZnQ8L3NwYW4+XG4gICAgPC9idXR0b24+XG5cbiAgICA8c3BhbiBjbGFzcz1cIm1vbnRoLXllYXItZGlzcGxheVwiIGRhdGEtdGVzdGlkPVwibW9udGgteWVhci1kaXNwbGF5XCI+e3sgbW9udGggfX0ge3sgeWVhciB9fTwvc3Bhbj5cblxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2VsZWN0b3ItYnV0dG9uXCIgKGNsaWNrKT1cImluY3JlbWVudE1vbnRoKDEpXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGljb25cIj5jaGV2cm9uX3JpZ2h0PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2hlYWRlcj5cblxuICA8bWFpbiBjbGFzcz1cImNhbGVuZGFyXCI+XG4gICAgPGRpdiBjbGFzcz1cIndlZWstZGF5cy1oZWFkZXJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwid2Vlay1kYXlcIiAqbmdGb3I9XCJsZXQgd2Vla0RheSBvZiB3ZWVrRGF5c1wiPnt7IHdlZWtEYXkubmFtZSB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJkYXlzLWJsb2NrXCIgZGF0YS10ZXN0aWQ9XCJkYXlzLWJsb2NrXCI+XG4gICAgICA8c3BhblxuICAgICAgICAqbmdGb3I9XCJsZXQgZGF5IG9mIGRheXNcIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF0ZShkYXkudGltZXN0YW1wKVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnZGF5JzogdHJ1ZSxcbiAgICAgICAgICAnYW5vdGhlci1tb250aCc6IG1vbnRoTnVtYmVyICE9IGRheS5tb250aCxcbiAgICAgICAgICAnc2VsZWN0ZWQnOiBpc0RheVNlbGVjdGVkKGRheSksXG4gICAgICAgICAgJ2ZpcnN0JzogaXNGaXJzdFNlbGVjdGVkRGF5KGRheSksXG4gICAgICAgICAgJ2xhc3QnOiBpc0xhc3RTZWxlY3RlZERheShkYXkpLFxuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAge3sgZGF5LmRheSB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L21haW4+XG48L2Rpdj5cbiJdfQ==
@@ -1,76 +1,123 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
1
+ import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';
2
2
  import moment from 'moment';
3
- import { asDate } from "./date-picker-calendar/date-picker-calendar.component";
3
+ import { PeriodLabel, formatFrom, formatTo } from "./date-picker-calendar/date-picker-calendar.component";
4
+ import { NG_VALUE_ACCESSOR } from "@angular/forms";
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@angular/common";
6
7
  import * as i2 from "../button/button.component";
7
8
  import * as i3 from "./date-picker-calendar/date-picker-calendar.component";
8
9
  import * as i4 from "@ngx-translate/core";
10
+ const VALUE_ACCESSOR = {
11
+ provide: NG_VALUE_ACCESSOR,
12
+ multi: true,
13
+ useExisting: forwardRef(() => DatePickerComponent),
14
+ };
9
15
  export class DatePickerComponent {
10
16
  constructor() {
11
17
  this.periods = [
12
- { label: 'TODAY', getRange: () => ({ from: asDate(moment().startOf('day')), to: asDate(moment().endOf('day')) }), selected: false },
13
- { label: 'YESTERDAY', getRange: () => ({ from: asDate(moment().subtract(1, 'day').startOf('day')), to: asDate(moment().subtract(1, 'day').endOf('day')) }), selected: false },
14
- { label: 'LAST_7_DAYS', getRange: () => ({ from: asDate(moment().subtract(1, 'week').startOf('day')), to: asDate(moment().endOf('day')) }), selected: false },
15
- { label: 'LAST_30_DAYS', getRange: () => ({ from: asDate(moment().subtract(30, 'days').startOf('day')), to: asDate(moment().endOf('day')) }), selected: false },
16
- { label: 'THIS_MONTH', getRange: () => ({ from: asDate(moment().startOf('month')), to: asDate(moment().endOf('month')) }), selected: false },
17
- { label: 'LAST_QUARTER', getRange: () => ({ from: asDate(moment().subtract(3, 'months').startOf('day')), to: asDate(moment().endOf('month')) }), selected: false },
18
- { label: 'CUSTOM_PERIOD', getRange: () => ({}), isCustomRange: true, selected: false },
18
+ { label: PeriodLabel.TODAY, getRange: () => ({ from: formatFrom(moment()), to: formatTo(moment()) }), selected: false },
19
+ { label: PeriodLabel.YESTERDAY, getRange: () => ({ from: formatFrom(moment().subtract(1, 'day')), to: formatTo(moment().subtract(1, 'day')) }), selected: false },
20
+ { label: PeriodLabel.LAST_7_DAYS, getRange: () => ({ from: formatFrom(moment().subtract(1, 'week')), to: formatTo(moment()) }), selected: false },
21
+ { label: PeriodLabel.LAST_30_DAYS, getRange: () => ({ from: formatFrom(moment().subtract(30, 'days')), to: formatTo(moment()) }), selected: false },
22
+ { label: PeriodLabel.THIS_MONTH, getRange: () => ({ from: formatFrom(moment().startOf('month')), to: formatTo(moment().endOf('month')) }), selected: false },
23
+ { label: PeriodLabel.LAST_QUARTER, getRange: () => ({ from: formatFrom(moment().subtract(3, 'months')), to: formatTo(moment().endOf('month')) }), selected: false },
24
+ { label: PeriodLabel.CUSTOM_PERIOD, getRange: () => ({}), isCustomRange: true, selected: false },
19
25
  ];
20
- this.date = new Date();
26
+ this.date = moment().format();
21
27
  this.isRange = false;
22
28
  this.dateChange = new EventEmitter();
23
29
  this.close = new EventEmitter();
24
30
  this.isCustomRange = false;
31
+ this.onChange = (value) => { };
32
+ this.onTouch = () => { };
25
33
  }
26
34
  get from() {
27
- if (this.date instanceof Date) {
35
+ if (!this.isRange) {
28
36
  return;
29
37
  }
30
38
  return this.date.from;
31
39
  }
32
40
  get to() {
33
- if (this.date instanceof Date) {
41
+ if (!this.isRange) {
34
42
  return;
35
43
  }
36
44
  return this.date.to;
37
45
  }
38
46
  get dateDisplay() {
39
- const from = this.from ? moment(this.from).utc(false).format('L') : '';
40
- const to = this.to ? moment(this.to).utc(false).format('L') : '';
47
+ const from = this.from ? moment(this.from).format('L') : '';
48
+ const to = this.to ? moment(this.to).format('L') : '';
41
49
  return `${from} ${to ? '- ' + to : ''}`;
42
50
  }
43
51
  ngOnInit() {
44
52
  }
45
53
  selectPeriod(period) {
46
- this.periods.forEach(period => period.selected = false);
54
+ this.periods.forEach((period) => period.selected = false);
47
55
  this.date = period.getRange();
48
56
  this.date.label = period.label;
49
57
  this.isCustomRange = period.isCustomRange || false;
50
58
  period.selected = true;
51
59
  if (!this.isCustomRange) {
52
- this.writeValue();
60
+ this.emitValue();
53
61
  }
54
62
  }
55
63
  handleDateChange(value) {
56
64
  this.date = value;
57
65
  if (!this.isRange) {
58
- this.writeValue();
66
+ this.emitValue();
59
67
  }
60
68
  }
61
- writeValue() {
69
+ emitValue() {
62
70
  this.dateChange.emit(this.date);
71
+ this.onChange(this.date);
63
72
  this.close.emit();
64
73
  }
65
74
  handleCancelClick() {
66
75
  this.close.emit();
67
76
  }
77
+ getPeriodOrDefault(periodName, defaultPeriodName = PeriodLabel.TODAY) {
78
+ return this.periods.find(p => p.label === periodName) ||
79
+ this.periods.find(p => p.label === defaultPeriodName);
80
+ }
81
+ checkPeriodShouldBeSelectedByValue() {
82
+ if (!this.isRange) {
83
+ return;
84
+ }
85
+ this.periods.forEach((period) => period.selected = false);
86
+ const period = this.periods.find(p => p.label === this.date?.label);
87
+ if (!period) {
88
+ return;
89
+ }
90
+ period.selected = true;
91
+ this.isCustomRange = period.isCustomRange || false;
92
+ }
93
+ writeValue(value) {
94
+ if (this.isRange) {
95
+ const valueRange = value;
96
+ if (valueRange.label && valueRange.label !== PeriodLabel.CUSTOM_PERIOD) {
97
+ const period = this.getPeriodOrDefault(valueRange.label)?.getRange() || {};
98
+ this.date = { ...period, label: valueRange.label };
99
+ }
100
+ else if (valueRange.from && valueRange.to) {
101
+ this.date = { from: valueRange.from, to: valueRange.to, label: PeriodLabel.CUSTOM_PERIOD };
102
+ }
103
+ this.checkPeriodShouldBeSelectedByValue();
104
+ }
105
+ else {
106
+ this.date = value;
107
+ }
108
+ }
109
+ registerOnChange(fn) {
110
+ this.onChange = fn;
111
+ }
112
+ registerOnTouched(fn) {
113
+ this.onTouch = fn;
114
+ }
68
115
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: DatePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
69
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: DatePickerComponent, selector: "ask-date-picker", inputs: { date: "date", isRange: "isRange" }, outputs: { dateChange: "dateChange", close: "close" }, ngImport: i0, template: "<div class=\"date-picker-container\">\n <main class=\"main-content\">\n <div\n class=\"periods-list\"\n *ngIf=\"isRange\"\n [ngClass]=\"{ 'show-divider': isCustomRange }\"\n >\n <button\n *ngFor=\"let period of periods\"\n type=\"button\"\n class=\"period\"\n [ngClass]=\"{ 'selected': period.selected }\"\n (click)=\"selectPeriod(period)\"\n >\n {{ period.label | translate }}\n </button>\n </div>\n\n <ask-date-picker-calendar\n *ngIf=\"!isRange || (isRange && isCustomRange)\"\n [date]=\"date\"\n (dateChange)=\"handleDateChange($event)\"\n [isRange]=\"isRange\"\n ></ask-date-picker-calendar>\n </main>\n\n <footer class=\"footer\" *ngIf=\"isCustomRange && isRange\">\n <div class=\"date-display\">{{ dateDisplay }}</div>\n\n <div class=\"button-tray\">\n <ask-button\n [size]=\"'xsmall'\"\n [type]=\"'secondary'\"\n (click)=\"handleCancelClick()\"\n >\n {{ 'CANCEL' | translate }}\n </ask-button>\n\n <ask-button\n [size]=\"'xsmall'\"\n [type]=\"'primary'\"\n (click)=\"writeValue()\"\n >\n {{ 'APPLY' | translate }}\n </ask-button>\n </div>\n </footer>\n</div>\n", styles: [":root{--asksuite-orange: #FF5724;--white: #FFF;--grey-50: #F5F7FA;--grey-100: #E4E7EB;--grey-200: #CBD2D9;--grey-300: #9AA5B1;--grey-400: #7B8794;--grey-500: #616E7C;--grey-600: #52606D;--grey-700: #3E4C59;--grey-800: #2A3042;--grey-900: #1F2933;--yellow-50: #FFF8E2;--yellow-200: #FFECB3;--success-green: #4BAF50;--warning-yellow: #FFC107;--error-red: #E8453E;--shadow: rgba(42, 48, 66, .1607843137);--lightblue-tag: #CDF9F3;--lavender-tag: #D4DAF3;--green-tag: #CEEEAA;--pink-tag: #FBC5FF;--orange-tag: #FED5C9;--purple-tag: #DDBFE5;--yellow-tag: #FFE0B2;--blue-tag: #B2E5FD;--brown-tag: #EFC89C;--whatsapp-green: #68B35D;--facebook-blue: #0084FF;--instagram-pink: #D53E91;--google-blue: #345DC8;--telegram-blue: #34AADF;--telephone-yellow: #FECB00;--primary-background: #FFF;--secondary-background: #EFF3F8;--hover-background: #F5F7FA;--divider-background: #E4E7EB;--font-color-100: #2A3042;--font-color-200: #616E7C;--font-color-300: #9AA5B1}:root{--font-default: $font-default;--font-code: $font-code}:root{--font-xs: $font-xs;--font-sm: $font-sm;--font-md: $font-md;--font-lg: $font-lg;--font-xl: $font-xl;--font-xxl: $font-xxl}:root{--font-weight-regular: $font-weight-regular;--font-weight-medium: $font-weight-medium}:root{--radii-px: $radii-px;--radii-xs: $radii-xs;--radii-sm: $radii-sm;--radii-md: $radii-md;--radii-lg: $radii-lg;--radii-full: $radii-full}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:\"liga\";-webkit-font-smoothing:antialiased}*{box-sizing:border-box}*,button,select,textarea{font-family:Inter,sans-serif;font-weight:400}input{font-size:1rem}.date-picker-container{display:flex;flex-direction:column}.main-content{display:flex}.periods-list{display:flex;flex-direction:column;justify-content:start;gap:4px;padding:8px 0}.periods-list.show-divider{border-right:1px solid var(--divider-background)}.periods-list>.period{padding:8px 16px;color:var(--font-color-200);background:none;border:none;outline:none;cursor:pointer;transition:color .2s,background-color .2s;text-align:start}.periods-list>.period:hover,.periods-list>.period.selected{background-color:var(--hover-background)}.periods-list>.period:active,.periods-list>.period.selected{color:#ff5724}.footer{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-top:1px solid var(--divider-background)}.footer>.button-tray{display:flex;gap:16px}.date-display{display:flex;font-size:.875rem;color:var(--font-color-200);gap:4px}.date-display>.date{width:79px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ButtonComponent, selector: "ask-button", inputs: ["label", "size", "type", "rounded", "disabled", "labelSide"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i3.DatePickerCalendarComponent, selector: "ask-date-picker-calendar", inputs: ["isRange", "date"], outputs: ["dateChange"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
116
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: DatePickerComponent, selector: "ask-date-picker", inputs: { date: "date", isRange: "isRange" }, outputs: { dateChange: "dateChange", close: "close" }, providers: [VALUE_ACCESSOR], ngImport: i0, template: "<div class=\"date-picker-container\">\n <main class=\"main-content\">\n <div\n class=\"periods-list\"\n *ngIf=\"isRange\"\n [ngClass]=\"{ 'show-divider': isCustomRange }\"\n >\n <button\n *ngFor=\"let period of periods\"\n type=\"button\"\n class=\"period\"\n [ngClass]=\"{ 'selected': period.selected }\"\n (click)=\"selectPeriod(period)\"\n >\n {{ period.label.toString() | translate }}\n </button>\n </div>\n\n <ask-date-picker-calendar\n *ngIf=\"!isRange || (isRange && isCustomRange)\"\n [date]=\"date\"\n (dateChange)=\"handleDateChange($event)\"\n [isRange]=\"isRange\"\n ></ask-date-picker-calendar>\n </main>\n\n <footer class=\"footer\" *ngIf=\"isCustomRange && isRange\">\n <div class=\"date-display\">{{ dateDisplay }}</div>\n\n <div class=\"button-tray\">\n <ask-button\n [size]=\"'xsmall'\"\n [type]=\"'secondary'\"\n (click)=\"handleCancelClick()\"\n >\n {{ 'CANCEL' | translate }}\n </ask-button>\n\n <ask-button\n [size]=\"'xsmall'\"\n [type]=\"'primary'\"\n (click)=\"emitValue()\"\n >\n {{ 'APPLY' | translate }}\n </ask-button>\n </div>\n </footer>\n</div>\n", styles: [":root{--asksuite-orange: #FF5724;--white: #FFF;--grey-50: #F5F7FA;--grey-100: #E4E7EB;--grey-200: #CBD2D9;--grey-300: #9AA5B1;--grey-400: #7B8794;--grey-500: #616E7C;--grey-600: #52606D;--grey-700: #3E4C59;--grey-800: #2A3042;--grey-900: #1F2933;--yellow-50: #FFF8E2;--yellow-200: #FFECB3;--success-green: #4BAF50;--warning-yellow: #FFC107;--error-red: #E8453E;--shadow: rgba(42, 48, 66, .1607843137);--lightblue-tag: #CDF9F3;--lavender-tag: #D4DAF3;--green-tag: #CEEEAA;--pink-tag: #FBC5FF;--orange-tag: #FED5C9;--purple-tag: #DDBFE5;--yellow-tag: #FFE0B2;--blue-tag: #B2E5FD;--brown-tag: #EFC89C;--whatsapp-green: #68B35D;--facebook-blue: #0084FF;--instagram-pink: #D53E91;--google-blue: #345DC8;--telegram-blue: #34AADF;--telephone-yellow: #FECB00;--primary-background: #FFF;--secondary-background: #EFF3F8;--hover-background: #F5F7FA;--divider-background: #E4E7EB;--font-color-100: #2A3042;--font-color-200: #616E7C;--font-color-300: #9AA5B1}:root{--font-default: $font-default;--font-code: $font-code}:root{--font-xs: $font-xs;--font-sm: $font-sm;--font-md: $font-md;--font-lg: $font-lg;--font-xl: $font-xl;--font-xxl: $font-xxl}:root{--font-weight-regular: $font-weight-regular;--font-weight-medium: $font-weight-medium}:root{--radii-px: $radii-px;--radii-xs: $radii-xs;--radii-sm: $radii-sm;--radii-md: $radii-md;--radii-lg: $radii-lg;--radii-full: $radii-full}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:\"liga\";-webkit-font-smoothing:antialiased}*{box-sizing:border-box}*,button,select,textarea{font-family:Inter,sans-serif;font-weight:400}input{font-size:1rem}.date-picker-container{display:flex;flex-direction:column}.main-content{display:flex}.periods-list{display:flex;flex-direction:column;justify-content:start;gap:4px;padding:8px 0}.periods-list.show-divider{border-right:1px solid var(--divider-background)}.periods-list>.period{padding:8px 16px;color:var(--font-color-200);background:none;border:none;outline:none;cursor:pointer;transition:color .2s,background-color .2s;text-align:start}.periods-list>.period:hover,.periods-list>.period.selected{background-color:var(--hover-background)}.periods-list>.period:active,.periods-list>.period.selected{color:#ff5724}.footer{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-top:1px solid var(--divider-background)}.footer>.button-tray{display:flex;gap:16px}.date-display{display:flex;font-size:.875rem;color:var(--font-color-200);gap:4px}.date-display>.date{width:79px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ButtonComponent, selector: "ask-button", inputs: ["label", "size", "type", "rounded", "disabled", "labelSide"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i3.DatePickerCalendarComponent, selector: "ask-date-picker-calendar", inputs: ["isRange", "date"], outputs: ["dateChange"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
70
117
  }
71
118
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: DatePickerComponent, decorators: [{
72
119
  type: Component,
73
- args: [{ selector: 'ask-date-picker', template: "<div class=\"date-picker-container\">\n <main class=\"main-content\">\n <div\n class=\"periods-list\"\n *ngIf=\"isRange\"\n [ngClass]=\"{ 'show-divider': isCustomRange }\"\n >\n <button\n *ngFor=\"let period of periods\"\n type=\"button\"\n class=\"period\"\n [ngClass]=\"{ 'selected': period.selected }\"\n (click)=\"selectPeriod(period)\"\n >\n {{ period.label | translate }}\n </button>\n </div>\n\n <ask-date-picker-calendar\n *ngIf=\"!isRange || (isRange && isCustomRange)\"\n [date]=\"date\"\n (dateChange)=\"handleDateChange($event)\"\n [isRange]=\"isRange\"\n ></ask-date-picker-calendar>\n </main>\n\n <footer class=\"footer\" *ngIf=\"isCustomRange && isRange\">\n <div class=\"date-display\">{{ dateDisplay }}</div>\n\n <div class=\"button-tray\">\n <ask-button\n [size]=\"'xsmall'\"\n [type]=\"'secondary'\"\n (click)=\"handleCancelClick()\"\n >\n {{ 'CANCEL' | translate }}\n </ask-button>\n\n <ask-button\n [size]=\"'xsmall'\"\n [type]=\"'primary'\"\n (click)=\"writeValue()\"\n >\n {{ 'APPLY' | translate }}\n </ask-button>\n </div>\n </footer>\n</div>\n", styles: [":root{--asksuite-orange: #FF5724;--white: #FFF;--grey-50: #F5F7FA;--grey-100: #E4E7EB;--grey-200: #CBD2D9;--grey-300: #9AA5B1;--grey-400: #7B8794;--grey-500: #616E7C;--grey-600: #52606D;--grey-700: #3E4C59;--grey-800: #2A3042;--grey-900: #1F2933;--yellow-50: #FFF8E2;--yellow-200: #FFECB3;--success-green: #4BAF50;--warning-yellow: #FFC107;--error-red: #E8453E;--shadow: rgba(42, 48, 66, .1607843137);--lightblue-tag: #CDF9F3;--lavender-tag: #D4DAF3;--green-tag: #CEEEAA;--pink-tag: #FBC5FF;--orange-tag: #FED5C9;--purple-tag: #DDBFE5;--yellow-tag: #FFE0B2;--blue-tag: #B2E5FD;--brown-tag: #EFC89C;--whatsapp-green: #68B35D;--facebook-blue: #0084FF;--instagram-pink: #D53E91;--google-blue: #345DC8;--telegram-blue: #34AADF;--telephone-yellow: #FECB00;--primary-background: #FFF;--secondary-background: #EFF3F8;--hover-background: #F5F7FA;--divider-background: #E4E7EB;--font-color-100: #2A3042;--font-color-200: #616E7C;--font-color-300: #9AA5B1}:root{--font-default: $font-default;--font-code: $font-code}:root{--font-xs: $font-xs;--font-sm: $font-sm;--font-md: $font-md;--font-lg: $font-lg;--font-xl: $font-xl;--font-xxl: $font-xxl}:root{--font-weight-regular: $font-weight-regular;--font-weight-medium: $font-weight-medium}:root{--radii-px: $radii-px;--radii-xs: $radii-xs;--radii-sm: $radii-sm;--radii-md: $radii-md;--radii-lg: $radii-lg;--radii-full: $radii-full}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:\"liga\";-webkit-font-smoothing:antialiased}*{box-sizing:border-box}*,button,select,textarea{font-family:Inter,sans-serif;font-weight:400}input{font-size:1rem}.date-picker-container{display:flex;flex-direction:column}.main-content{display:flex}.periods-list{display:flex;flex-direction:column;justify-content:start;gap:4px;padding:8px 0}.periods-list.show-divider{border-right:1px solid var(--divider-background)}.periods-list>.period{padding:8px 16px;color:var(--font-color-200);background:none;border:none;outline:none;cursor:pointer;transition:color .2s,background-color .2s;text-align:start}.periods-list>.period:hover,.periods-list>.period.selected{background-color:var(--hover-background)}.periods-list>.period:active,.periods-list>.period.selected{color:#ff5724}.footer{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-top:1px solid var(--divider-background)}.footer>.button-tray{display:flex;gap:16px}.date-display{display:flex;font-size:.875rem;color:var(--font-color-200);gap:4px}.date-display>.date{width:79px}\n"] }]
120
+ args: [{ selector: 'ask-date-picker', providers: [VALUE_ACCESSOR], template: "<div class=\"date-picker-container\">\n <main class=\"main-content\">\n <div\n class=\"periods-list\"\n *ngIf=\"isRange\"\n [ngClass]=\"{ 'show-divider': isCustomRange }\"\n >\n <button\n *ngFor=\"let period of periods\"\n type=\"button\"\n class=\"period\"\n [ngClass]=\"{ 'selected': period.selected }\"\n (click)=\"selectPeriod(period)\"\n >\n {{ period.label.toString() | translate }}\n </button>\n </div>\n\n <ask-date-picker-calendar\n *ngIf=\"!isRange || (isRange && isCustomRange)\"\n [date]=\"date\"\n (dateChange)=\"handleDateChange($event)\"\n [isRange]=\"isRange\"\n ></ask-date-picker-calendar>\n </main>\n\n <footer class=\"footer\" *ngIf=\"isCustomRange && isRange\">\n <div class=\"date-display\">{{ dateDisplay }}</div>\n\n <div class=\"button-tray\">\n <ask-button\n [size]=\"'xsmall'\"\n [type]=\"'secondary'\"\n (click)=\"handleCancelClick()\"\n >\n {{ 'CANCEL' | translate }}\n </ask-button>\n\n <ask-button\n [size]=\"'xsmall'\"\n [type]=\"'primary'\"\n (click)=\"emitValue()\"\n >\n {{ 'APPLY' | translate }}\n </ask-button>\n </div>\n </footer>\n</div>\n", styles: [":root{--asksuite-orange: #FF5724;--white: #FFF;--grey-50: #F5F7FA;--grey-100: #E4E7EB;--grey-200: #CBD2D9;--grey-300: #9AA5B1;--grey-400: #7B8794;--grey-500: #616E7C;--grey-600: #52606D;--grey-700: #3E4C59;--grey-800: #2A3042;--grey-900: #1F2933;--yellow-50: #FFF8E2;--yellow-200: #FFECB3;--success-green: #4BAF50;--warning-yellow: #FFC107;--error-red: #E8453E;--shadow: rgba(42, 48, 66, .1607843137);--lightblue-tag: #CDF9F3;--lavender-tag: #D4DAF3;--green-tag: #CEEEAA;--pink-tag: #FBC5FF;--orange-tag: #FED5C9;--purple-tag: #DDBFE5;--yellow-tag: #FFE0B2;--blue-tag: #B2E5FD;--brown-tag: #EFC89C;--whatsapp-green: #68B35D;--facebook-blue: #0084FF;--instagram-pink: #D53E91;--google-blue: #345DC8;--telegram-blue: #34AADF;--telephone-yellow: #FECB00;--primary-background: #FFF;--secondary-background: #EFF3F8;--hover-background: #F5F7FA;--divider-background: #E4E7EB;--font-color-100: #2A3042;--font-color-200: #616E7C;--font-color-300: #9AA5B1}:root{--font-default: $font-default;--font-code: $font-code}:root{--font-xs: $font-xs;--font-sm: $font-sm;--font-md: $font-md;--font-lg: $font-lg;--font-xl: $font-xl;--font-xxl: $font-xxl}:root{--font-weight-regular: $font-weight-regular;--font-weight-medium: $font-weight-medium}:root{--radii-px: $radii-px;--radii-xs: $radii-xs;--radii-sm: $radii-sm;--radii-md: $radii-md;--radii-lg: $radii-lg;--radii-full: $radii-full}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:\"liga\";-webkit-font-smoothing:antialiased}*{box-sizing:border-box}*,button,select,textarea{font-family:Inter,sans-serif;font-weight:400}input{font-size:1rem}.date-picker-container{display:flex;flex-direction:column}.main-content{display:flex}.periods-list{display:flex;flex-direction:column;justify-content:start;gap:4px;padding:8px 0}.periods-list.show-divider{border-right:1px solid var(--divider-background)}.periods-list>.period{padding:8px 16px;color:var(--font-color-200);background:none;border:none;outline:none;cursor:pointer;transition:color .2s,background-color .2s;text-align:start}.periods-list>.period:hover,.periods-list>.period.selected{background-color:var(--hover-background)}.periods-list>.period:active,.periods-list>.period.selected{color:#ff5724}.footer{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-top:1px solid var(--divider-background)}.footer>.button-tray{display:flex;gap:16px}.date-display{display:flex;font-size:.875rem;color:var(--font-color-200);gap:4px}.date-display>.date{width:79px}\n"] }]
74
121
  }], propDecorators: { date: [{
75
122
  type: Input
76
123
  }], isRange: [{
@@ -80,4 +127,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
80
127
  }], close: [{
81
128
  type: Output
82
129
  }] } });
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNrc3VpdGUtY2l0cnVzL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc2tzdWl0ZS1jaXRydXMvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxNQUFNLEVBQTZCLE1BQU0sdURBQXVELENBQUM7Ozs7OztBQWN6RyxNQUFNLE9BQU8sbUJBQW1CO0lBTGhDO1FBT0UsWUFBTyxHQUFrQjtZQUN2QixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7WUFDbkksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtZQUM3SyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtZQUM3SixFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtZQUMvSixFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7WUFDNUksRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFFB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SSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEIsQ0FBQzs4R0ExRVUsbUJBQW1CO2tHQUFuQixtQkFBbUIsNEpDaEJoQyw0dkNBZ0RBOzsyRkRoQ2EsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjs4QkFnQmxCLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHthc0RhdGUsIERhdGVQaWNrZXJWYWx1ZSwgRGF0ZVJhbmdlfSBmcm9tIFwiLi9kYXRlLXBpY2tlci1jYWxlbmRhci9kYXRlLXBpY2tlci1jYWxlbmRhci5jb21wb25lbnRcIjtcblxuaW50ZXJmYWNlIFBlcmlvZCB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGdldFJhbmdlOiAoKSA9PiBEYXRlUmFuZ2U7XG4gIGlzQ3VzdG9tUmFuZ2U/OiBib29sZWFuO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXNrLWRhdGUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwZXJpb2RzOiBBcnJheTxQZXJpb2Q+ID0gW1xuICAgIHsgbGFiZWw6ICdUT0RBWScsIGdldFJhbmdlOiAoKSA9PiAoeyBmcm9tOiBhc0RhdGUobW9tZW50KCkuc3RhcnRPZignZGF5JykpLCB0bzogYXNEYXRlKG1vbWVudCgpLmVuZE9mKCdkYXknKSkgfSksIHNlbGVjdGVkOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdZRVNURVJEQVknLCBnZXRSYW5nZTogKCkgPT4gKHsgZnJvbTogYXNEYXRlKG1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5zdGFydE9mKCdkYXknKSksIHRvOiBhc0RhdGUobW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmVuZE9mKCdkYXknKSkgfSksIHNlbGVjdGVkOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdMQVNUXzdfREFZUycsIGdldFJhbmdlOiAoKSA9PiAoeyBmcm9tOiBhc0RhdGUobW9tZW50KCkuc3VidHJhY3QoMSwgJ3dlZWsnKS5zdGFydE9mKCdkYXknKSksIHRvOiBhc0RhdGUobW9tZW50KCkuZW5kT2YoJ2RheScpKSB9KSwgc2VsZWN0ZWQ6IGZhbHNlIH0sXG4gICAgeyBsYWJlbDogJ0xBU1RfMzBfREFZUycsIGdldFJhbmdlOiAoKSA9PiAoeyBmcm9tOiBhc0RhdGUobW9tZW50KCkuc3VidHJhY3QoMzAsICdkYXlzJykuc3RhcnRPZignZGF5JykpLCB0bzogYXNEYXRlKG1vbWVudCgpLmVuZE9mKCdkYXknKSkgfSksIHNlbGVjdGVkOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdUSElTX01PTlRIJywgZ2V0UmFuZ2U6ICgpID0+ICh7IGZyb206IGFzRGF0ZShtb21lbnQoKS5zdGFydE9mKCdtb250aCcpKSwgdG86IGFzRGF0ZShtb21lbnQoKS5lbmRPZignbW9udGgnKSkgfSksIHNlbGVjdGVkOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdMQVNUX1FVQVJURVInLCBnZXRSYW5nZTogKCkgPT4gKHsgZnJvbTogYXNEYXRlKG1vbWVudCgpLnN1YnRyYWN0KDMsICdtb250aHMnKS5zdGFydE9mKCdkYXknKSksIHRvOiBhc0RhdGUobW9tZW50KCkuZW5kT2YoJ21vbnRoJykpIH0pLCBzZWxlY3RlZDogZmFsc2UgfSxcbiAgICB7IGxhYmVsOiAnQ1VTVE9NX1BFUklPRCcsIGdldFJhbmdlOiAoKSA9PiAoe30pLCBpc0N1c3RvbVJhbmdlOiB0cnVlLCBzZWxlY3RlZDogZmFsc2UgfSxcbiAgXTtcblxuICBASW5wdXQoKSBkYXRlOiBEYXRlUGlja2VyVmFsdWUgPSBuZXcgRGF0ZSgpO1xuICBASW5wdXQoKSBpc1JhbmdlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGRhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVQaWNrZXJWYWx1ZT4oKTtcbiAgQE91dHB1dCgpIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGlzQ3VzdG9tUmFuZ2UgPSBmYWxzZTtcblxuICBnZXQgZnJvbSgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5kYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRhdGUuZnJvbTtcbiAgfVxuXG4gIGdldCB0bygpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5kYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRhdGUudG87XG4gIH1cblxuICBnZXQgZGF0ZURpc3BsYXkoKTogc3RyaW5nIHtcbiAgICBjb25zdCBmcm9tID0gdGhpcy5mcm9tID8gbW9tZW50KHRoaXMuZnJvbSkudXRjKGZhbHNlKS5mb3JtYXQoJ0wnKSA6ICcnO1xuICAgIGNvbnN0IHRvID0gdGhpcy50byA/IG1vbWVudCh0aGlzLnRvKS51dGMoZmFsc2UpLmZvcm1hdCgnTCcpIDogJyc7XG5cbiAgICByZXR1cm4gYCR7ZnJvbX0gJHsgdG8gPyAnLSAnICsgdG8gOiAnJyB9YDtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgc2VsZWN0UGVyaW9kKHBlcmlvZDogUGVyaW9kKSB7XG4gICAgdGhpcy5wZXJpb2RzLmZvckVhY2gocGVyaW9kID0+IHBlcmlvZC5zZWxlY3RlZCA9IGZhbHNlKTtcblxuICAgIHRoaXMuZGF0ZSA9IHBlcmlvZC5nZXRSYW5nZSgpO1xuICAgIHRoaXMuZGF0ZS5sYWJlbCA9IHBlcmlvZC5sYWJlbDtcbiAgICB0aGlzLmlzQ3VzdG9tUmFuZ2UgPSBwZXJpb2QuaXNDdXN0b21SYW5nZSB8fCBmYWxzZTtcbiAgICBwZXJpb2Quc2VsZWN0ZWQgPSB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLmlzQ3VzdG9tUmFuZ2UpIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZURhdGVDaGFuZ2UodmFsdWU6IERhdGVQaWNrZXJWYWx1ZSkge1xuICAgIHRoaXMuZGF0ZSA9IHZhbHVlO1xuXG4gICAgaWYgKCF0aGlzLmlzUmFuZ2UpIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUoKSB7XG4gICAgdGhpcy5kYXRlQ2hhbmdlLmVtaXQodGhpcy5kYXRlKTtcbiAgICB0aGlzLmNsb3NlLmVtaXQoKTtcbiAgfVxuXG4gIGhhbmRsZUNhbmNlbENsaWNrKCkge1xuICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1jb250YWluZXJcIj5cbiAgPG1haW4gY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInBlcmlvZHMtbGlzdFwiXG4gICAgICAqbmdJZj1cImlzUmFuZ2VcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnc2hvdy1kaXZpZGVyJzogaXNDdXN0b21SYW5nZSB9XCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0Zvcj1cImxldCBwZXJpb2Qgb2YgcGVyaW9kc1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cInBlcmlvZFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ3NlbGVjdGVkJzogcGVyaW9kLnNlbGVjdGVkIH1cIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0UGVyaW9kKHBlcmlvZClcIlxuICAgICAgPlxuICAgICAgICB7eyBwZXJpb2QubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGFzay1kYXRlLXBpY2tlci1jYWxlbmRhclxuICAgICAgKm5nSWY9XCIhaXNSYW5nZSB8fCAoaXNSYW5nZSAmJiBpc0N1c3RvbVJhbmdlKVwiXG4gICAgICBbZGF0ZV09XCJkYXRlXCJcbiAgICAgIChkYXRlQ2hhbmdlKT1cImhhbmRsZURhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbaXNSYW5nZV09XCJpc1JhbmdlXCJcbiAgICA+PC9hc2stZGF0ZS1waWNrZXItY2FsZW5kYXI+XG4gIDwvbWFpbj5cblxuICA8Zm9vdGVyIGNsYXNzPVwiZm9vdGVyXCIgKm5nSWY9XCJpc0N1c3RvbVJhbmdlICYmIGlzUmFuZ2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1kaXNwbGF5XCI+e3sgZGF0ZURpc3BsYXkgfX08L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJidXR0b24tdHJheVwiPlxuICAgICAgPGFzay1idXR0b25cbiAgICAgICAgW3NpemVdPVwiJ3hzbWFsbCdcIlxuICAgICAgICBbdHlwZV09XCInc2Vjb25kYXJ5J1wiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVDYW5jZWxDbGljaygpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ0NBTkNFTCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYXNrLWJ1dHRvbj5cblxuICAgICAgPGFzay1idXR0b25cbiAgICAgICAgW3NpemVdPVwiJ3hzbWFsbCdcIlxuICAgICAgICBbdHlwZV09XCIncHJpbWFyeSdcIlxuICAgICAgICAoY2xpY2spPVwid3JpdGVWYWx1ZSgpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ0FQUExZJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9hc2stYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Zvb3Rlcj5cbjwvZGl2PlxuIl19
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNrc3VpdGUtY2l0cnVzL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc2tzdWl0ZS1jaXRydXMvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQTZCLFdBQVcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sdURBQXVELENBQUM7QUFDcEksT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFTdkUsTUFBTSxjQUFjLEdBQWE7SUFDL0IsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixLQUFLLEVBQUUsSUFBSTtJQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7Q0FDbkQsQ0FBQTtBQVVELE1BQU0sT0FBTyxtQkFBbUI7SUFOaEM7UUFRRSxZQUFPLEdBQWtCO1lBQ3ZCLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO1lBQ3ZILEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtZQUNqSyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO1lBQ2pKLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7WUFDbkosRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUs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QixTQUFTOytCQUNFLGlCQUFpQixhQUdoQixDQUFFLGNBQWMsQ0FBRTs4QkFjcEIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUHJvdmlkZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtEYXRlUGlja2VyVmFsdWUsIERhdGVSYW5nZSwgUGVyaW9kTGFiZWwsIGZvcm1hdEZyb20sIGZvcm1hdFRvfSBmcm9tIFwiLi9kYXRlLXBpY2tlci1jYWxlbmRhci9kYXRlLXBpY2tlci1jYWxlbmRhci5jb21wb25lbnRcIjtcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcblxuaW50ZXJmYWNlIFBlcmlvZCB7XG4gIGxhYmVsOiBQZXJpb2RMYWJlbDtcbiAgZ2V0UmFuZ2U6ICgpID0+IERhdGVSYW5nZTtcbiAgaXNDdXN0b21SYW5nZT86IGJvb2xlYW47XG4gIHNlbGVjdGVkOiBib29sZWFuO1xufVxuXG5jb25zdCBWQUxVRV9BQ0NFU1NPUjogUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBtdWx0aTogdHJ1ZSxcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVBpY2tlckNvbXBvbmVudCksXG59XG5cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhc2stZGF0ZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFsgVkFMVUVfQUNDRVNTT1IgXSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIHBlcmlvZHM6IEFycmF5PFBlcmlvZD4gPSBbXG4gICAgeyBsYWJlbDogUGVyaW9kTGFiZWwuVE9EQVksIGdldFJhbmdlOiAoKSA9PiAoeyBmcm9tOiBmb3JtYXRGcm9tKG1vbWVudCgpKSwgdG86IGZvcm1hdFRvKG1vbWVudCgpKSB9KSwgc2VsZWN0ZWQ6IGZhbHNlIH0sXG4gICAgeyBsYWJlbDogUGVyaW9kTGFiZWwuWUVTVEVSREFZLCBnZXRSYW5nZTogKCkgPT4gKHsgZnJvbTogZm9ybWF0RnJvbShtb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5JykpLCB0bzogZm9ybWF0VG8obW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpKSB9KSwgc2VsZWN0ZWQ6IGZhbHNlIH0sXG4gICAgeyBsYWJlbDogUGVyaW9kTGFiZWwuTEFTVF83X0RBWVMsIGdldFJhbmdlOiAoKSA9PiAoeyBmcm9tOiBmb3JtYXRGcm9tKG1vbWVudCgpLnN1YnRyYWN0KDEsICd3ZWVrJykpLCB0bzogZm9ybWF0VG8obW9tZW50KCkpIH0pLCBzZWxlY3RlZDogZmFsc2UgfSxcbiAgICB7IGxhYmVsOiBQZXJpb2RMYWJlbC5MQVNUXzMwX0RBWVMsIGdldFJhbmdlOiAoKSA9PiAoeyBmcm9tOiBmb3JtYXRGcm9tKG1vbWVudCgpLnN1YnRyYWN0KDMwLCAnZGF5cycpKSwgdG86IGZvcm1hdFRvKG1vbWVudCgpKSB9KSwgc2VsZWN0ZWQ6IGZhbHNlIH0sXG4gICAgeyBsYWJlbDogUGVyaW9kTGFiZWwuVEhJU19NT05USCwgZ2V0UmFuZ2U6ICgpID0+ICh7IGZyb206IGZvcm1hdEZyb20obW9tZW50KCkuc3RhcnRPZignbW9udGgnKSksIHRvOiBmb3JtYXRUbyhtb21lbnQoKS5lbmRPZignbW9udGgnKSkgfSksIHNlbGVjdGVkOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6IFBlcmlvZExhYmVsLkxBU1RfUVVBUlRFUiwgZ2V0UmFuZ2U6ICgpID0+ICh7IGZyb206IGZvcm1hdEZyb20obW9tZW50KCkuc3VidHJhY3QoMywgJ21vbnRocycpKSwgdG86IGZvcm1hdFRvKG1vbWVudCgpLmVuZE9mKCdtb250aCcpKSB9KSwgc2VsZWN0ZWQ6IGZhbHNlIH0sXG4gICAgeyBsYWJlbDogUGVyaW9kTGFiZWwuQ1VTVE9NX1BFUklPRCwgZ2V0UmFuZ2U6ICgpID0+ICh7fSksIGlzQ3VzdG9tUmFuZ2U6IHRydWUsIHNlbGVjdGVkOiBmYWxzZSB9LFxuICBdO1xuXG4gIEBJbnB1dCgpIGRhdGU6IERhdGVQaWNrZXJWYWx1ZSA9IG1vbWVudCgpLmZvcm1hdCgpO1xuICBASW5wdXQoKSBpc1JhbmdlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGRhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVQaWNrZXJWYWx1ZT4oKTtcbiAgQE91dHB1dCgpIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGlzQ3VzdG9tUmFuZ2UgPSBmYWxzZTtcblxuICBnZXQgZnJvbSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5pc1JhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuICh0aGlzLmRhdGUgYXMgRGF0ZVJhbmdlKS5mcm9tO1xuICB9XG5cbiAgZ2V0IHRvKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLmlzUmFuZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gKHRoaXMuZGF0ZSBhcyBEYXRlUmFuZ2UpLnRvO1xuICB9XG5cbiAgZ2V0IGRhdGVEaXNwbGF5KCk6IHN0cmluZyB7XG4gICAgY29uc3QgZnJvbSA9IHRoaXMuZnJvbSA/IG1vbWVudCh0aGlzLmZyb20pLmZvcm1hdCgnTCcpIDogJyc7XG4gICAgY29uc3QgdG8gPSB0aGlzLnRvID8gbW9tZW50KHRoaXMudG8pLmZvcm1hdCgnTCcpIDogJyc7XG5cbiAgICByZXR1cm4gYCR7ZnJvbX0gJHsgdG8gPyAnLSAnICsgdG8gOiAnJyB9YDtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgc2VsZWN0UGVyaW9kKHBlcmlvZDogUGVyaW9kKSB7XG4gICAgdGhpcy5wZXJpb2RzLmZvckVhY2goKHBlcmlvZDogUGVyaW9kKSA9PiBwZXJpb2Quc2VsZWN0ZWQgPSBmYWxzZSk7XG5cbiAgICB0aGlzLmRhdGUgPSBwZXJpb2QuZ2V0UmFuZ2UoKTtcbiAgICB0aGlzLmRhdGUubGFiZWwgPSBwZXJpb2QubGFiZWw7XG4gICAgdGhpcy5pc0N1c3RvbVJhbmdlID0gcGVyaW9kLmlzQ3VzdG9tUmFuZ2UgfHwgZmFsc2U7XG4gICAgcGVyaW9kLnNlbGVjdGVkID0gdHJ1ZTtcblxuICAgIGlmICghdGhpcy5pc0N1c3RvbVJhbmdlKSB7XG4gICAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZURhdGVDaGFuZ2UodmFsdWU6IERhdGVQaWNrZXJWYWx1ZSkge1xuICAgIHRoaXMuZGF0ZSA9IHZhbHVlO1xuXG4gICAgaWYgKCF0aGlzLmlzUmFuZ2UpIHtcbiAgICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgZW1pdFZhbHVlKCkge1xuICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHRoaXMuZGF0ZSk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLmRhdGUpO1xuICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xuICB9XG5cbiAgaGFuZGxlQ2FuY2VsQ2xpY2soKSB7XG4gICAgdGhpcy5jbG9zZS5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIGdldFBlcmlvZE9yRGVmYXVsdChwZXJpb2ROYW1lOiBQZXJpb2RMYWJlbCwgZGVmYXVsdFBlcmlvZE5hbWU6IFBlcmlvZExhYmVsID0gUGVyaW9kTGFiZWwuVE9EQVkpIHtcbiAgICByZXR1cm4gdGhpcy5wZXJpb2RzLmZpbmQocCA9PiBwLmxhYmVsID09PSBwZXJpb2ROYW1lKSB8fFxuICAgICAgdGhpcy5wZXJpb2RzLmZpbmQocCA9PiBwLmxhYmVsID09PSBkZWZhdWx0UGVyaW9kTmFtZSk7XG4gIH1cblxuICBjaGVja1BlcmlvZFNob3VsZEJlU2VsZWN0ZWRCeVZhbHVlKCkge1xuICAgIGlmICghdGhpcy5pc1JhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wZXJpb2RzLmZvckVhY2goKHBlcmlvZDogUGVyaW9kKSA9PiBwZXJpb2Quc2VsZWN0ZWQgPSBmYWxzZSk7XG4gICAgY29uc3QgcGVyaW9kID0gdGhpcy5wZXJpb2RzLmZpbmQocCA9PiBwLmxhYmVsID09PSAodGhpcy5kYXRlIGFzIERhdGVSYW5nZSk/LmxhYmVsKTtcblxuICAgIGlmICghcGVyaW9kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGVyaW9kLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLmlzQ3VzdG9tUmFuZ2UgPSBwZXJpb2QuaXNDdXN0b21SYW5nZSB8fCBmYWxzZTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IERhdGVQaWNrZXJWYWx1ZSkge1xuICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHZhbHVlUmFuZ2UgPSB2YWx1ZSBhcyBEYXRlUmFuZ2U7XG5cbiAgICAgIGlmICh2YWx1ZVJhbmdlLmxhYmVsICYmIHZhbHVlUmFuZ2UubGFiZWwgIT09IFBlcmlvZExhYmVsLkNVU1RPTV9QRVJJT0QpIHtcbiAgICAgICAgY29uc3QgcGVyaW9kID0gdGhpcy5nZXRQZXJpb2RPckRlZmF1bHQodmFsdWVSYW5nZS5sYWJlbCk/LmdldFJhbmdlKCkgfHwge307XG4gICAgICAgIHRoaXMuZGF0ZSA9IHsgLi4ucGVyaW9kLCBsYWJlbDogdmFsdWVSYW5nZS5sYWJlbCB9O1xuICAgICAgfVxuXG4gICAgICBlbHNlIGlmICh2YWx1ZVJhbmdlLmZyb20gJiYgdmFsdWVSYW5nZS50bykge1xuICAgICAgICB0aGlzLmRhdGUgPSB7IGZyb206IHZhbHVlUmFuZ2UuZnJvbSwgdG86IHZhbHVlUmFuZ2UudG8sIGxhYmVsOiBQZXJpb2RMYWJlbC5DVVNUT01fUEVSSU9EIH07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2hlY2tQZXJpb2RTaG91bGRCZVNlbGVjdGVkQnlWYWx1ZSgpO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5kYXRlID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBEYXRlUGlja2VyVmFsdWUpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICBvbkNoYW5nZSA9ICh2YWx1ZTogRGF0ZVBpY2tlclZhbHVlKSA9PiB7fTtcblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoID0gZm47XG4gIH1cblxuICBvblRvdWNoID0gKCkgPT4ge307XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItY29udGFpbmVyXCI+XG4gIDxtYWluIGNsYXNzPVwibWFpbi1jb250ZW50XCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJwZXJpb2RzLWxpc3RcIlxuICAgICAgKm5nSWY9XCJpc1JhbmdlXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ3Nob3ctZGl2aWRlcic6IGlzQ3VzdG9tUmFuZ2UgfVwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdGb3I9XCJsZXQgcGVyaW9kIG9mIHBlcmlvZHNcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJwZXJpb2RcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdzZWxlY3RlZCc6IHBlcmlvZC5zZWxlY3RlZCB9XCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBlcmlvZChwZXJpb2QpXCJcbiAgICAgID5cbiAgICAgICAge3sgcGVyaW9kLmxhYmVsLnRvU3RyaW5nKCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGFzay1kYXRlLXBpY2tlci1jYWxlbmRhclxuICAgICAgKm5nSWY9XCIhaXNSYW5nZSB8fCAoaXNSYW5nZSAmJiBpc0N1c3RvbVJhbmdlKVwiXG4gICAgICBbZGF0ZV09XCJkYXRlXCJcbiAgICAgIChkYXRlQ2hhbmdlKT1cImhhbmRsZURhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbaXNSYW5nZV09XCJpc1JhbmdlXCJcbiAgICA+PC9hc2stZGF0ZS1waWNrZXItY2FsZW5kYXI+XG4gIDwvbWFpbj5cblxuICA8Zm9vdGVyIGNsYXNzPVwiZm9vdGVyXCIgKm5nSWY9XCJpc0N1c3RvbVJhbmdlICYmIGlzUmFuZ2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1kaXNwbGF5XCI+e3sgZGF0ZURpc3BsYXkgfX08L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJidXR0b24tdHJheVwiPlxuICAgICAgPGFzay1idXR0b25cbiAgICAgICAgW3NpemVdPVwiJ3hzbWFsbCdcIlxuICAgICAgICBbdHlwZV09XCInc2Vjb25kYXJ5J1wiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVDYW5jZWxDbGljaygpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ0NBTkNFTCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYXNrLWJ1dHRvbj5cblxuICAgICAgPGFzay1idXR0b25cbiAgICAgICAgW3NpemVdPVwiJ3hzbWFsbCdcIlxuICAgICAgICBbdHlwZV09XCIncHJpbWFyeSdcIlxuICAgICAgICAoY2xpY2spPVwiZW1pdFZhbHVlKClcIlxuICAgICAgPlxuICAgICAgICB7eyAnQVBQTFknIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2Fzay1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZm9vdGVyPlxuPC9kaXY+XG4iXX0=