@f1softinternational/f1-nepali-date-picker 1.0.1 → 1.0.3

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/README.md CHANGED
@@ -200,7 +200,7 @@ f1-nepali-date-picker {
200
200
 
201
201
  ## Supported Date Range
202
202
 
203
- The library supports BS dates from **2000 BS** to **2099 BS** (approximately 1944 AD to 2043 AD).
203
+ The library supports BS dates from **1975 BS** to **2199 BS** (approximately 1918 AD to 2142 AD).
204
204
 
205
205
  ## License
206
206
 
@@ -2,6 +2,7 @@ import { Component, Input, Output, EventEmitter, forwardRef, HostListener, Chang
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
4
4
  import { NepaliDate } from '../../models/nepali-date.model';
5
+ import { toNepaliDigits } from '../../utils/bs-calendar-data';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "../../services/date-converter.service";
7
8
  import * as i2 from "@angular/common";
@@ -46,6 +47,18 @@ export class NepaliDatePickerComponent {
46
47
  this.updateCalendarGrid();
47
48
  }
48
49
  ngOnDestroy() { }
50
+ ngOnChanges(changes) {
51
+ // Update month/weekday names when language changes
52
+ if (changes['language'] && !changes['language'].firstChange) {
53
+ this.monthNames = this.dateConverter.getMonthNames(this.language);
54
+ this.weekdayNames = this.dateConverter.getWeekdayNames(this.language);
55
+ this.cdr.markForCheck();
56
+ }
57
+ // Trigger change detection when useNepaliDigits changes
58
+ if (changes['useNepaliDigits'] && !changes['useNepaliDigits'].firstChange) {
59
+ this.cdr.markForCheck();
60
+ }
61
+ }
49
62
  // ControlValueAccessor implementation
50
63
  writeValue(value) {
51
64
  this.selectedDate = value;
@@ -186,6 +199,20 @@ export class NepaliDatePickerComponent {
186
199
  trackByDay(index) {
187
200
  return index;
188
201
  }
202
+ /**
203
+ * Format day number based on useNepaliDigits setting
204
+ */
205
+ formatDay(day) {
206
+ if (day === null)
207
+ return '';
208
+ return this.useNepaliDigits ? toNepaliDigits(day) : String(day);
209
+ }
210
+ /**
211
+ * Format year number based on useNepaliDigits setting
212
+ */
213
+ formatYear(year) {
214
+ return this.useNepaliDigits ? toNepaliDigits(year) : String(year);
215
+ }
189
216
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NepaliDatePickerComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.DateConverterService }], target: i0.ɵɵFactoryTarget.Component }); }
190
217
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NepaliDatePickerComponent, isStandalone: true, selector: "f1-nepali-date-picker", inputs: { minDate: "minDate", maxDate: "maxDate", placeholder: "placeholder", displayFormat: "displayFormat", theme: "theme", language: "language", showTodayButton: "showTodayButton", disabled: "disabled", useNepaliDigits: "useNepaliDigits" }, outputs: { dateChange: "dateChange" }, host: { listeners: { "document:click": "onClickOutside($event)", "document:keydown.escape": "onEscapeKey()" } }, providers: [
191
218
  {
@@ -193,7 +220,7 @@ export class NepaliDatePickerComponent {
193
220
  useExisting: forwardRef(() => NepaliDatePickerComponent),
194
221
  multi: true,
195
222
  },
196
- ], ngImport: i0, template: "<div class=\"f1-datepicker\" [class.f1-datepicker--dark]=\"theme === 'dark'\" [class.f1-datepicker--disabled]=\"disabled\">\n <!-- Input Field -->\n <div class=\"f1-datepicker__input-wrapper\" (click)=\"toggleCalendar()\">\n <input\n type=\"text\"\n class=\"f1-datepicker__input\"\n [value]=\"displayValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n readonly\n />\n <span class=\"f1-datepicker__icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n </span>\n <button\n *ngIf=\"selectedDate && !disabled\"\n type=\"button\"\n class=\"f1-datepicker__clear\"\n (click)=\"clearDate(); $event.stopPropagation()\"\n aria-label=\"Clear date\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n\n <!-- Calendar Dropdown -->\n <div class=\"f1-datepicker__dropdown\" *ngIf=\"isOpen\" [@fadeIn]>\n <!-- Header -->\n <div class=\"f1-datepicker__header\">\n <button\n type=\"button\"\n class=\"f1-datepicker__nav-btn\"\n (click)=\"previousMonth()\"\n aria-label=\"Previous month\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\"></polyline>\n </svg>\n </button>\n\n <div class=\"f1-datepicker__selectors\">\n <select\n class=\"f1-datepicker__select\"\n [value]=\"viewDate.month\"\n (change)=\"onMonthChange($event)\"\n >\n <option *ngFor=\"let month of monthNames; let i = index\" [value]=\"i + 1\">\n {{ month }}\n </option>\n </select>\n\n <select\n class=\"f1-datepicker__select\"\n [value]=\"viewDate.year\"\n (change)=\"onYearChange($event)\"\n >\n <option *ngFor=\"let year of years\" [value]=\"year\">\n {{ useNepaliDigits ? (year | number:'1.0-0') : year }}\n </option>\n </select>\n </div>\n\n <button\n type=\"button\"\n class=\"f1-datepicker__nav-btn\"\n (click)=\"nextMonth()\"\n aria-label=\"Next month\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n </button>\n </div>\n\n <!-- Weekday Headers -->\n <div class=\"f1-datepicker__weekdays\">\n <div class=\"f1-datepicker__weekday\" *ngFor=\"let day of weekdayNames\">\n {{ day }}\n </div>\n </div>\n\n <!-- Calendar Grid -->\n <div class=\"f1-datepicker__grid\">\n <div class=\"f1-datepicker__week\" *ngFor=\"let week of calendarGrid; trackBy: trackByWeek\">\n <button\n type=\"button\"\n class=\"f1-datepicker__day\"\n *ngFor=\"let day of week; trackBy: trackByDay\"\n [class.f1-datepicker__day--empty]=\"day === null\"\n [class.f1-datepicker__day--today]=\"day !== null && isToday(day)\"\n [class.f1-datepicker__day--selected]=\"day !== null && isSelected(day)\"\n [class.f1-datepicker__day--disabled]=\"day !== null && !isDateSelectable(day)\"\n [disabled]=\"day === null || !isDateSelectable(day)\"\n (click)=\"selectDate(day)\"\n >\n {{ day !== null ? (useNepaliDigits ? day : day) : '' }}\n </button>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"f1-datepicker__footer\" *ngIf=\"showTodayButton\">\n <button\n type=\"button\"\n class=\"f1-datepicker__today-btn\"\n (click)=\"selectToday()\"\n >\n {{ language === 'np' ? '\u0906\u091C' : 'Today' }}\n </button>\n </div>\n </div>\n</div>\n", styles: [":host{display:inline-block;font-family:var(--f1-datepicker-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif)}.f1-datepicker{--f1-dp-bg: #ffffff;--f1-dp-text: #1a1a2e;--f1-dp-text-muted: #64748b;--f1-dp-border: #e2e8f0;--f1-dp-primary: #6366f1;--f1-dp-primary-hover: #4f46e5;--f1-dp-primary-text: #ffffff;--f1-dp-hover-bg: #f1f5f9;--f1-dp-today-bg: #eef2ff;--f1-dp-today-border: #6366f1;--f1-dp-disabled-text: #cbd5e1;--f1-dp-shadow: 0 10px 40px rgba(0, 0, 0, .12);--f1-dp-input-bg: #ffffff;--f1-dp-dropdown-bg: #ffffff;position:relative;width:280px}.f1-datepicker--dark{--f1-dp-bg: #1e1e2e;--f1-dp-text: #f8fafc;--f1-dp-text-muted: #94a3b8;--f1-dp-border: #334155;--f1-dp-primary: #818cf8;--f1-dp-primary-hover: #a5b4fc;--f1-dp-primary-text: #1e1e2e;--f1-dp-hover-bg: #2d2d44;--f1-dp-today-bg: #312e81;--f1-dp-today-border: #818cf8;--f1-dp-disabled-text: #475569;--f1-dp-shadow: 0 10px 40px rgba(0, 0, 0, .4);--f1-dp-input-bg: #1e1e2e;--f1-dp-dropdown-bg: #1e1e2e}.f1-datepicker--disabled{opacity:.6;cursor:not-allowed}.f1-datepicker__input-wrapper{position:relative;display:flex;align-items:center;cursor:pointer}.f1-datepicker--disabled .f1-datepicker__input-wrapper{cursor:not-allowed}.f1-datepicker__input{width:100%;padding:12px 44px 12px 14px;font-size:14px;font-weight:500;color:var(--f1-dp-text);background:var(--f1-dp-input-bg);border:2px solid var(--f1-dp-border);border-radius:10px;outline:none;cursor:pointer;transition:all .2s ease}.f1-datepicker__input::placeholder{color:var(--f1-dp-text-muted)}.f1-datepicker__input:hover:not(:disabled){border-color:var(--f1-dp-primary)}.f1-datepicker__input:focus{border-color:var(--f1-dp-primary);box-shadow:0 0 0 3px #6366f126}.f1-datepicker__input:disabled{cursor:not-allowed;background:var(--f1-dp-hover-bg)}.f1-datepicker__icon{position:absolute;right:12px;display:flex;align-items:center;justify-content:center;color:var(--f1-dp-text-muted);pointer-events:none;transition:color .2s ease}.f1-datepicker__input-wrapper:hover .f1-datepicker__icon{color:var(--f1-dp-primary)}.f1-datepicker__clear{position:absolute;right:38px;display:flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;color:var(--f1-dp-text-muted);background:transparent;border:none;border-radius:50%;cursor:pointer;transition:all .2s ease}.f1-datepicker__clear:hover{color:var(--f1-dp-text);background:var(--f1-dp-hover-bg)}.f1-datepicker__dropdown{position:absolute;top:calc(100% + 8px);left:0;z-index:1000;width:100%;min-width:300px;padding:16px;background:var(--f1-dp-dropdown-bg);border:1px solid var(--f1-dp-border);border-radius:14px;box-shadow:var(--f1-dp-shadow);animation:slideDown .2s ease}@keyframes slideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.f1-datepicker__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.f1-datepicker__nav-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;color:var(--f1-dp-text);background:transparent;border:none;border-radius:8px;cursor:pointer;transition:all .2s ease}.f1-datepicker__nav-btn:hover{background:var(--f1-dp-hover-bg);color:var(--f1-dp-primary)}.f1-datepicker__nav-btn:active{transform:scale(.95)}.f1-datepicker__selectors{display:flex;gap:8px}.f1-datepicker__select{padding:8px 28px 8px 12px;font-size:14px;font-weight:600;color:var(--f1-dp-text);background:var(--f1-dp-hover-bg);border:none;border-radius:8px;cursor:pointer;transition:all .2s ease;appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 8px center}.f1-datepicker__select:hover{background-color:var(--f1-dp-border)}.f1-datepicker__select:focus{outline:none;box-shadow:0 0 0 2px var(--f1-dp-primary)}.f1-datepicker__weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:8px}.f1-datepicker__weekday{padding:8px 0;font-size:12px;font-weight:600;color:var(--f1-dp-text-muted);text-align:center;text-transform:uppercase;letter-spacing:.5px}.f1-datepicker__grid{display:flex;flex-direction:column;gap:4px}.f1-datepicker__week{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.f1-datepicker__day{display:flex;align-items:center;justify-content:center;width:36px;height:36px;font-size:14px;font-weight:500;color:var(--f1-dp-text);background:transparent;border:none;border-radius:8px;cursor:pointer;transition:all .15s ease}.f1-datepicker__day:hover:not(:disabled):not(.f1-datepicker__day--selected):not(.f1-datepicker__day--empty){background:var(--f1-dp-hover-bg)}.f1-datepicker__day--empty{visibility:hidden;cursor:default}.f1-datepicker__day--today{background:var(--f1-dp-today-bg);border:2px solid var(--f1-dp-today-border);font-weight:700}.f1-datepicker__day--selected{background:var(--f1-dp-primary)!important;color:var(--f1-dp-primary-text)!important;font-weight:700}.f1-datepicker__day--selected:hover{background:var(--f1-dp-primary-hover)!important}.f1-datepicker__day--disabled{color:var(--f1-dp-disabled-text);cursor:not-allowed}.f1-datepicker__day--disabled:hover{background:transparent}.f1-datepicker__footer{display:flex;justify-content:center;margin-top:12px;padding-top:12px;border-top:1px solid var(--f1-dp-border)}.f1-datepicker__today-btn{padding:8px 20px;font-size:13px;font-weight:600;color:var(--f1-dp-primary);background:transparent;border:2px solid var(--f1-dp-primary);border-radius:8px;cursor:pointer;transition:all .2s ease}.f1-datepicker__today-btn:hover{background:var(--f1-dp-primary);color:var(--f1-dp-primary-text)}.f1-datepicker__today-btn:active{transform:scale(.98)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
223
+ ], usesOnChanges: true, ngImport: i0, template: "<div class=\"f1-datepicker\" [class.f1-datepicker--dark]=\"theme === 'dark'\" [class.f1-datepicker--disabled]=\"disabled\">\n <!-- Input Field -->\n <div class=\"f1-datepicker__input-wrapper\" (click)=\"toggleCalendar()\">\n <input type=\"text\" class=\"f1-datepicker__input\" [value]=\"displayValue\" [placeholder]=\"placeholder\"\n [disabled]=\"disabled\" readonly />\n <span class=\"f1-datepicker__icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n </span>\n <button *ngIf=\"selectedDate && !disabled\" type=\"button\" class=\"f1-datepicker__clear\"\n (click)=\"clearDate(); $event.stopPropagation()\" aria-label=\"Clear date\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n\n <!-- Calendar Dropdown -->\n <div class=\"f1-datepicker__dropdown\" *ngIf=\"isOpen\" [@fadeIn]>\n <!-- Header -->\n <div class=\"f1-datepicker__header\">\n <button type=\"button\" class=\"f1-datepicker__nav-btn\" (click)=\"previousMonth()\" aria-label=\"Previous month\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\"></polyline>\n </svg>\n </button>\n\n <div class=\"f1-datepicker__selectors\">\n <select class=\"f1-datepicker__select\" [value]=\"viewDate.month\" (change)=\"onMonthChange($event)\">\n <option *ngFor=\"let month of monthNames; let i = index\" [value]=\"i + 1\">\n {{ month }}\n </option>\n </select>\n\n <select class=\"f1-datepicker__select\" [value]=\"viewDate.year\" (change)=\"onYearChange($event)\">\n <option *ngFor=\"let year of years\" [value]=\"year\">\n {{ formatYear(year) }}\n </option>\n </select>\n </div>\n\n <button type=\"button\" class=\"f1-datepicker__nav-btn\" (click)=\"nextMonth()\" aria-label=\"Next month\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n </button>\n </div>\n\n <!-- Weekday Headers -->\n <div class=\"f1-datepicker__weekdays\">\n <div class=\"f1-datepicker__weekday\" *ngFor=\"let day of weekdayNames\">\n {{ day }}\n </div>\n </div>\n\n <!-- Calendar Grid -->\n <div class=\"f1-datepicker__grid\">\n <div class=\"f1-datepicker__week\" *ngFor=\"let week of calendarGrid; trackBy: trackByWeek\">\n <button type=\"button\" class=\"f1-datepicker__day\" *ngFor=\"let day of week; trackBy: trackByDay\"\n [class.f1-datepicker__day--empty]=\"day === null\"\n [class.f1-datepicker__day--today]=\"day !== null && isToday(day)\"\n [class.f1-datepicker__day--selected]=\"day !== null && isSelected(day)\"\n [class.f1-datepicker__day--disabled]=\"day !== null && !isDateSelectable(day)\"\n [disabled]=\"day === null || !isDateSelectable(day)\" (click)=\"selectDate(day)\">\n {{ formatDay(day) }}\n </button>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"f1-datepicker__footer\" *ngIf=\"showTodayButton\">\n <button type=\"button\" class=\"f1-datepicker__today-btn\" (click)=\"selectToday()\">\n {{ language === 'np' ? '\u0906\u091C' : 'Today' }}\n </button>\n </div>\n </div>\n</div>", styles: [":host{display:inline-block;font-family:var(--f1-datepicker-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif)}.f1-datepicker{--f1-dp-bg: #ffffff;--f1-dp-text: #1a1a2e;--f1-dp-text-muted: #64748b;--f1-dp-border: #e2e8f0;--f1-dp-primary: #6366f1;--f1-dp-primary-hover: #4f46e5;--f1-dp-primary-text: #ffffff;--f1-dp-hover-bg: #f1f5f9;--f1-dp-today-bg: #eef2ff;--f1-dp-today-border: #6366f1;--f1-dp-disabled-text: #cbd5e1;--f1-dp-shadow: 0 10px 40px rgba(0, 0, 0, .12);--f1-dp-input-bg: #ffffff;--f1-dp-dropdown-bg: #ffffff;position:relative;width:280px}.f1-datepicker--dark{--f1-dp-bg: #1e1e2e;--f1-dp-text: #f8fafc;--f1-dp-text-muted: #94a3b8;--f1-dp-border: #334155;--f1-dp-primary: #818cf8;--f1-dp-primary-hover: #a5b4fc;--f1-dp-primary-text: #1e1e2e;--f1-dp-hover-bg: #2d2d44;--f1-dp-today-bg: #312e81;--f1-dp-today-border: #818cf8;--f1-dp-disabled-text: #475569;--f1-dp-shadow: 0 10px 40px rgba(0, 0, 0, .4);--f1-dp-input-bg: #1e1e2e;--f1-dp-dropdown-bg: #1e1e2e}.f1-datepicker--disabled{opacity:.6;cursor:not-allowed}.f1-datepicker__input-wrapper{position:relative;display:flex;align-items:center;cursor:pointer}.f1-datepicker--disabled .f1-datepicker__input-wrapper{cursor:not-allowed}.f1-datepicker__input{width:100%;padding:12px 44px 12px 14px;font-size:14px;font-weight:500;color:var(--f1-dp-text);background:var(--f1-dp-input-bg);border:2px solid var(--f1-dp-border);border-radius:10px;outline:none;cursor:pointer;transition:all .2s ease}.f1-datepicker__input::placeholder{color:var(--f1-dp-text-muted)}.f1-datepicker__input:hover:not(:disabled){border-color:var(--f1-dp-primary)}.f1-datepicker__input:focus{border-color:var(--f1-dp-primary);box-shadow:0 0 0 3px #6366f126}.f1-datepicker__input:disabled{cursor:not-allowed;background:var(--f1-dp-hover-bg)}.f1-datepicker__icon{position:absolute;right:12px;display:flex;align-items:center;justify-content:center;color:var(--f1-dp-text-muted);pointer-events:none;transition:color .2s ease}.f1-datepicker__input-wrapper:hover .f1-datepicker__icon{color:var(--f1-dp-primary)}.f1-datepicker__clear{position:absolute;right:38px;display:flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;color:var(--f1-dp-text-muted);background:transparent;border:none;border-radius:50%;cursor:pointer;transition:all .2s ease}.f1-datepicker__clear:hover{color:var(--f1-dp-text);background:var(--f1-dp-hover-bg)}.f1-datepicker__dropdown{position:absolute;top:calc(100% + 8px);left:0;z-index:1000;width:100%;min-width:300px;padding:16px;background:var(--f1-dp-dropdown-bg);border:1px solid var(--f1-dp-border);border-radius:14px;box-shadow:var(--f1-dp-shadow);animation:slideDown .2s ease}@keyframes slideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.f1-datepicker__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.f1-datepicker__nav-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;color:var(--f1-dp-text);background:transparent;border:none;border-radius:8px;cursor:pointer;transition:all .2s ease}.f1-datepicker__nav-btn:hover{background:var(--f1-dp-hover-bg);color:var(--f1-dp-primary)}.f1-datepicker__nav-btn:active{transform:scale(.95)}.f1-datepicker__selectors{display:flex;gap:8px}.f1-datepicker__select{padding:8px 28px 8px 12px;font-size:14px;font-weight:600;color:var(--f1-dp-text);background:var(--f1-dp-hover-bg);border:none;border-radius:8px;cursor:pointer;transition:all .2s ease;appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 8px center}.f1-datepicker__select:hover{background-color:var(--f1-dp-border)}.f1-datepicker__select:focus{outline:none;box-shadow:0 0 0 2px var(--f1-dp-primary)}.f1-datepicker__weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:8px}.f1-datepicker__weekday{padding:8px 0;font-size:12px;font-weight:600;color:var(--f1-dp-text-muted);text-align:center;text-transform:uppercase;letter-spacing:.5px}.f1-datepicker__grid{display:flex;flex-direction:column;gap:4px}.f1-datepicker__week{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.f1-datepicker__day{display:flex;align-items:center;justify-content:center;width:36px;height:36px;font-size:14px;font-weight:500;color:var(--f1-dp-text);background:transparent;border:none;border-radius:8px;cursor:pointer;transition:all .15s ease}.f1-datepicker__day:hover:not(:disabled):not(.f1-datepicker__day--selected):not(.f1-datepicker__day--empty){background:var(--f1-dp-hover-bg)}.f1-datepicker__day--empty{visibility:hidden;cursor:default}.f1-datepicker__day--today{background:var(--f1-dp-today-bg);border:2px solid var(--f1-dp-today-border);font-weight:700}.f1-datepicker__day--selected{background:var(--f1-dp-primary)!important;color:var(--f1-dp-primary-text)!important;font-weight:700}.f1-datepicker__day--selected:hover{background:var(--f1-dp-primary-hover)!important}.f1-datepicker__day--disabled{color:var(--f1-dp-disabled-text);cursor:not-allowed}.f1-datepicker__day--disabled:hover{background:transparent}.f1-datepicker__footer{display:flex;justify-content:center;margin-top:12px;padding-top:12px;border-top:1px solid var(--f1-dp-border)}.f1-datepicker__today-btn{padding:8px 20px;font-size:13px;font-weight:600;color:var(--f1-dp-primary);background:transparent;border:2px solid var(--f1-dp-primary);border-radius:8px;cursor:pointer;transition:all .2s ease}.f1-datepicker__today-btn:hover{background:var(--f1-dp-primary);color:var(--f1-dp-primary-text)}.f1-datepicker__today-btn:active{transform:scale(.98)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
197
224
  }
198
225
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NepaliDatePickerComponent, decorators: [{
199
226
  type: Component,
@@ -203,7 +230,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
203
230
  useExisting: forwardRef(() => NepaliDatePickerComponent),
204
231
  multi: true,
205
232
  },
206
- ], template: "<div class=\"f1-datepicker\" [class.f1-datepicker--dark]=\"theme === 'dark'\" [class.f1-datepicker--disabled]=\"disabled\">\n <!-- Input Field -->\n <div class=\"f1-datepicker__input-wrapper\" (click)=\"toggleCalendar()\">\n <input\n type=\"text\"\n class=\"f1-datepicker__input\"\n [value]=\"displayValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n readonly\n />\n <span class=\"f1-datepicker__icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n </span>\n <button\n *ngIf=\"selectedDate && !disabled\"\n type=\"button\"\n class=\"f1-datepicker__clear\"\n (click)=\"clearDate(); $event.stopPropagation()\"\n aria-label=\"Clear date\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n\n <!-- Calendar Dropdown -->\n <div class=\"f1-datepicker__dropdown\" *ngIf=\"isOpen\" [@fadeIn]>\n <!-- Header -->\n <div class=\"f1-datepicker__header\">\n <button\n type=\"button\"\n class=\"f1-datepicker__nav-btn\"\n (click)=\"previousMonth()\"\n aria-label=\"Previous month\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\"></polyline>\n </svg>\n </button>\n\n <div class=\"f1-datepicker__selectors\">\n <select\n class=\"f1-datepicker__select\"\n [value]=\"viewDate.month\"\n (change)=\"onMonthChange($event)\"\n >\n <option *ngFor=\"let month of monthNames; let i = index\" [value]=\"i + 1\">\n {{ month }}\n </option>\n </select>\n\n <select\n class=\"f1-datepicker__select\"\n [value]=\"viewDate.year\"\n (change)=\"onYearChange($event)\"\n >\n <option *ngFor=\"let year of years\" [value]=\"year\">\n {{ useNepaliDigits ? (year | number:'1.0-0') : year }}\n </option>\n </select>\n </div>\n\n <button\n type=\"button\"\n class=\"f1-datepicker__nav-btn\"\n (click)=\"nextMonth()\"\n aria-label=\"Next month\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n </button>\n </div>\n\n <!-- Weekday Headers -->\n <div class=\"f1-datepicker__weekdays\">\n <div class=\"f1-datepicker__weekday\" *ngFor=\"let day of weekdayNames\">\n {{ day }}\n </div>\n </div>\n\n <!-- Calendar Grid -->\n <div class=\"f1-datepicker__grid\">\n <div class=\"f1-datepicker__week\" *ngFor=\"let week of calendarGrid; trackBy: trackByWeek\">\n <button\n type=\"button\"\n class=\"f1-datepicker__day\"\n *ngFor=\"let day of week; trackBy: trackByDay\"\n [class.f1-datepicker__day--empty]=\"day === null\"\n [class.f1-datepicker__day--today]=\"day !== null && isToday(day)\"\n [class.f1-datepicker__day--selected]=\"day !== null && isSelected(day)\"\n [class.f1-datepicker__day--disabled]=\"day !== null && !isDateSelectable(day)\"\n [disabled]=\"day === null || !isDateSelectable(day)\"\n (click)=\"selectDate(day)\"\n >\n {{ day !== null ? (useNepaliDigits ? day : day) : '' }}\n </button>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"f1-datepicker__footer\" *ngIf=\"showTodayButton\">\n <button\n type=\"button\"\n class=\"f1-datepicker__today-btn\"\n (click)=\"selectToday()\"\n >\n {{ language === 'np' ? '\u0906\u091C' : 'Today' }}\n </button>\n </div>\n </div>\n</div>\n", styles: [":host{display:inline-block;font-family:var(--f1-datepicker-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif)}.f1-datepicker{--f1-dp-bg: #ffffff;--f1-dp-text: #1a1a2e;--f1-dp-text-muted: #64748b;--f1-dp-border: #e2e8f0;--f1-dp-primary: #6366f1;--f1-dp-primary-hover: #4f46e5;--f1-dp-primary-text: #ffffff;--f1-dp-hover-bg: #f1f5f9;--f1-dp-today-bg: #eef2ff;--f1-dp-today-border: #6366f1;--f1-dp-disabled-text: #cbd5e1;--f1-dp-shadow: 0 10px 40px rgba(0, 0, 0, .12);--f1-dp-input-bg: #ffffff;--f1-dp-dropdown-bg: #ffffff;position:relative;width:280px}.f1-datepicker--dark{--f1-dp-bg: #1e1e2e;--f1-dp-text: #f8fafc;--f1-dp-text-muted: #94a3b8;--f1-dp-border: #334155;--f1-dp-primary: #818cf8;--f1-dp-primary-hover: #a5b4fc;--f1-dp-primary-text: #1e1e2e;--f1-dp-hover-bg: #2d2d44;--f1-dp-today-bg: #312e81;--f1-dp-today-border: #818cf8;--f1-dp-disabled-text: #475569;--f1-dp-shadow: 0 10px 40px rgba(0, 0, 0, .4);--f1-dp-input-bg: #1e1e2e;--f1-dp-dropdown-bg: #1e1e2e}.f1-datepicker--disabled{opacity:.6;cursor:not-allowed}.f1-datepicker__input-wrapper{position:relative;display:flex;align-items:center;cursor:pointer}.f1-datepicker--disabled .f1-datepicker__input-wrapper{cursor:not-allowed}.f1-datepicker__input{width:100%;padding:12px 44px 12px 14px;font-size:14px;font-weight:500;color:var(--f1-dp-text);background:var(--f1-dp-input-bg);border:2px solid var(--f1-dp-border);border-radius:10px;outline:none;cursor:pointer;transition:all .2s ease}.f1-datepicker__input::placeholder{color:var(--f1-dp-text-muted)}.f1-datepicker__input:hover:not(:disabled){border-color:var(--f1-dp-primary)}.f1-datepicker__input:focus{border-color:var(--f1-dp-primary);box-shadow:0 0 0 3px #6366f126}.f1-datepicker__input:disabled{cursor:not-allowed;background:var(--f1-dp-hover-bg)}.f1-datepicker__icon{position:absolute;right:12px;display:flex;align-items:center;justify-content:center;color:var(--f1-dp-text-muted);pointer-events:none;transition:color .2s ease}.f1-datepicker__input-wrapper:hover .f1-datepicker__icon{color:var(--f1-dp-primary)}.f1-datepicker__clear{position:absolute;right:38px;display:flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;color:var(--f1-dp-text-muted);background:transparent;border:none;border-radius:50%;cursor:pointer;transition:all .2s ease}.f1-datepicker__clear:hover{color:var(--f1-dp-text);background:var(--f1-dp-hover-bg)}.f1-datepicker__dropdown{position:absolute;top:calc(100% + 8px);left:0;z-index:1000;width:100%;min-width:300px;padding:16px;background:var(--f1-dp-dropdown-bg);border:1px solid var(--f1-dp-border);border-radius:14px;box-shadow:var(--f1-dp-shadow);animation:slideDown .2s ease}@keyframes slideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.f1-datepicker__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.f1-datepicker__nav-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;color:var(--f1-dp-text);background:transparent;border:none;border-radius:8px;cursor:pointer;transition:all .2s ease}.f1-datepicker__nav-btn:hover{background:var(--f1-dp-hover-bg);color:var(--f1-dp-primary)}.f1-datepicker__nav-btn:active{transform:scale(.95)}.f1-datepicker__selectors{display:flex;gap:8px}.f1-datepicker__select{padding:8px 28px 8px 12px;font-size:14px;font-weight:600;color:var(--f1-dp-text);background:var(--f1-dp-hover-bg);border:none;border-radius:8px;cursor:pointer;transition:all .2s ease;appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 8px center}.f1-datepicker__select:hover{background-color:var(--f1-dp-border)}.f1-datepicker__select:focus{outline:none;box-shadow:0 0 0 2px var(--f1-dp-primary)}.f1-datepicker__weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:8px}.f1-datepicker__weekday{padding:8px 0;font-size:12px;font-weight:600;color:var(--f1-dp-text-muted);text-align:center;text-transform:uppercase;letter-spacing:.5px}.f1-datepicker__grid{display:flex;flex-direction:column;gap:4px}.f1-datepicker__week{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.f1-datepicker__day{display:flex;align-items:center;justify-content:center;width:36px;height:36px;font-size:14px;font-weight:500;color:var(--f1-dp-text);background:transparent;border:none;border-radius:8px;cursor:pointer;transition:all .15s ease}.f1-datepicker__day:hover:not(:disabled):not(.f1-datepicker__day--selected):not(.f1-datepicker__day--empty){background:var(--f1-dp-hover-bg)}.f1-datepicker__day--empty{visibility:hidden;cursor:default}.f1-datepicker__day--today{background:var(--f1-dp-today-bg);border:2px solid var(--f1-dp-today-border);font-weight:700}.f1-datepicker__day--selected{background:var(--f1-dp-primary)!important;color:var(--f1-dp-primary-text)!important;font-weight:700}.f1-datepicker__day--selected:hover{background:var(--f1-dp-primary-hover)!important}.f1-datepicker__day--disabled{color:var(--f1-dp-disabled-text);cursor:not-allowed}.f1-datepicker__day--disabled:hover{background:transparent}.f1-datepicker__footer{display:flex;justify-content:center;margin-top:12px;padding-top:12px;border-top:1px solid var(--f1-dp-border)}.f1-datepicker__today-btn{padding:8px 20px;font-size:13px;font-weight:600;color:var(--f1-dp-primary);background:transparent;border:2px solid var(--f1-dp-primary);border-radius:8px;cursor:pointer;transition:all .2s ease}.f1-datepicker__today-btn:hover{background:var(--f1-dp-primary);color:var(--f1-dp-primary-text)}.f1-datepicker__today-btn:active{transform:scale(.98)}\n"] }]
233
+ ], template: "<div class=\"f1-datepicker\" [class.f1-datepicker--dark]=\"theme === 'dark'\" [class.f1-datepicker--disabled]=\"disabled\">\n <!-- Input Field -->\n <div class=\"f1-datepicker__input-wrapper\" (click)=\"toggleCalendar()\">\n <input type=\"text\" class=\"f1-datepicker__input\" [value]=\"displayValue\" [placeholder]=\"placeholder\"\n [disabled]=\"disabled\" readonly />\n <span class=\"f1-datepicker__icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n </span>\n <button *ngIf=\"selectedDate && !disabled\" type=\"button\" class=\"f1-datepicker__clear\"\n (click)=\"clearDate(); $event.stopPropagation()\" aria-label=\"Clear date\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n\n <!-- Calendar Dropdown -->\n <div class=\"f1-datepicker__dropdown\" *ngIf=\"isOpen\" [@fadeIn]>\n <!-- Header -->\n <div class=\"f1-datepicker__header\">\n <button type=\"button\" class=\"f1-datepicker__nav-btn\" (click)=\"previousMonth()\" aria-label=\"Previous month\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\"></polyline>\n </svg>\n </button>\n\n <div class=\"f1-datepicker__selectors\">\n <select class=\"f1-datepicker__select\" [value]=\"viewDate.month\" (change)=\"onMonthChange($event)\">\n <option *ngFor=\"let month of monthNames; let i = index\" [value]=\"i + 1\">\n {{ month }}\n </option>\n </select>\n\n <select class=\"f1-datepicker__select\" [value]=\"viewDate.year\" (change)=\"onYearChange($event)\">\n <option *ngFor=\"let year of years\" [value]=\"year\">\n {{ formatYear(year) }}\n </option>\n </select>\n </div>\n\n <button type=\"button\" class=\"f1-datepicker__nav-btn\" (click)=\"nextMonth()\" aria-label=\"Next month\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n </button>\n </div>\n\n <!-- Weekday Headers -->\n <div class=\"f1-datepicker__weekdays\">\n <div class=\"f1-datepicker__weekday\" *ngFor=\"let day of weekdayNames\">\n {{ day }}\n </div>\n </div>\n\n <!-- Calendar Grid -->\n <div class=\"f1-datepicker__grid\">\n <div class=\"f1-datepicker__week\" *ngFor=\"let week of calendarGrid; trackBy: trackByWeek\">\n <button type=\"button\" class=\"f1-datepicker__day\" *ngFor=\"let day of week; trackBy: trackByDay\"\n [class.f1-datepicker__day--empty]=\"day === null\"\n [class.f1-datepicker__day--today]=\"day !== null && isToday(day)\"\n [class.f1-datepicker__day--selected]=\"day !== null && isSelected(day)\"\n [class.f1-datepicker__day--disabled]=\"day !== null && !isDateSelectable(day)\"\n [disabled]=\"day === null || !isDateSelectable(day)\" (click)=\"selectDate(day)\">\n {{ formatDay(day) }}\n </button>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"f1-datepicker__footer\" *ngIf=\"showTodayButton\">\n <button type=\"button\" class=\"f1-datepicker__today-btn\" (click)=\"selectToday()\">\n {{ language === 'np' ? '\u0906\u091C' : 'Today' }}\n </button>\n </div>\n </div>\n</div>", styles: [":host{display:inline-block;font-family:var(--f1-datepicker-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif)}.f1-datepicker{--f1-dp-bg: #ffffff;--f1-dp-text: #1a1a2e;--f1-dp-text-muted: #64748b;--f1-dp-border: #e2e8f0;--f1-dp-primary: #6366f1;--f1-dp-primary-hover: #4f46e5;--f1-dp-primary-text: #ffffff;--f1-dp-hover-bg: #f1f5f9;--f1-dp-today-bg: #eef2ff;--f1-dp-today-border: #6366f1;--f1-dp-disabled-text: #cbd5e1;--f1-dp-shadow: 0 10px 40px rgba(0, 0, 0, .12);--f1-dp-input-bg: #ffffff;--f1-dp-dropdown-bg: #ffffff;position:relative;width:280px}.f1-datepicker--dark{--f1-dp-bg: #1e1e2e;--f1-dp-text: #f8fafc;--f1-dp-text-muted: #94a3b8;--f1-dp-border: #334155;--f1-dp-primary: #818cf8;--f1-dp-primary-hover: #a5b4fc;--f1-dp-primary-text: #1e1e2e;--f1-dp-hover-bg: #2d2d44;--f1-dp-today-bg: #312e81;--f1-dp-today-border: #818cf8;--f1-dp-disabled-text: #475569;--f1-dp-shadow: 0 10px 40px rgba(0, 0, 0, .4);--f1-dp-input-bg: #1e1e2e;--f1-dp-dropdown-bg: #1e1e2e}.f1-datepicker--disabled{opacity:.6;cursor:not-allowed}.f1-datepicker__input-wrapper{position:relative;display:flex;align-items:center;cursor:pointer}.f1-datepicker--disabled .f1-datepicker__input-wrapper{cursor:not-allowed}.f1-datepicker__input{width:100%;padding:12px 44px 12px 14px;font-size:14px;font-weight:500;color:var(--f1-dp-text);background:var(--f1-dp-input-bg);border:2px solid var(--f1-dp-border);border-radius:10px;outline:none;cursor:pointer;transition:all .2s ease}.f1-datepicker__input::placeholder{color:var(--f1-dp-text-muted)}.f1-datepicker__input:hover:not(:disabled){border-color:var(--f1-dp-primary)}.f1-datepicker__input:focus{border-color:var(--f1-dp-primary);box-shadow:0 0 0 3px #6366f126}.f1-datepicker__input:disabled{cursor:not-allowed;background:var(--f1-dp-hover-bg)}.f1-datepicker__icon{position:absolute;right:12px;display:flex;align-items:center;justify-content:center;color:var(--f1-dp-text-muted);pointer-events:none;transition:color .2s ease}.f1-datepicker__input-wrapper:hover .f1-datepicker__icon{color:var(--f1-dp-primary)}.f1-datepicker__clear{position:absolute;right:38px;display:flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;color:var(--f1-dp-text-muted);background:transparent;border:none;border-radius:50%;cursor:pointer;transition:all .2s ease}.f1-datepicker__clear:hover{color:var(--f1-dp-text);background:var(--f1-dp-hover-bg)}.f1-datepicker__dropdown{position:absolute;top:calc(100% + 8px);left:0;z-index:1000;width:100%;min-width:300px;padding:16px;background:var(--f1-dp-dropdown-bg);border:1px solid var(--f1-dp-border);border-radius:14px;box-shadow:var(--f1-dp-shadow);animation:slideDown .2s ease}@keyframes slideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.f1-datepicker__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.f1-datepicker__nav-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;color:var(--f1-dp-text);background:transparent;border:none;border-radius:8px;cursor:pointer;transition:all .2s ease}.f1-datepicker__nav-btn:hover{background:var(--f1-dp-hover-bg);color:var(--f1-dp-primary)}.f1-datepicker__nav-btn:active{transform:scale(.95)}.f1-datepicker__selectors{display:flex;gap:8px}.f1-datepicker__select{padding:8px 28px 8px 12px;font-size:14px;font-weight:600;color:var(--f1-dp-text);background:var(--f1-dp-hover-bg);border:none;border-radius:8px;cursor:pointer;transition:all .2s ease;appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 8px center}.f1-datepicker__select:hover{background-color:var(--f1-dp-border)}.f1-datepicker__select:focus{outline:none;box-shadow:0 0 0 2px var(--f1-dp-primary)}.f1-datepicker__weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:8px}.f1-datepicker__weekday{padding:8px 0;font-size:12px;font-weight:600;color:var(--f1-dp-text-muted);text-align:center;text-transform:uppercase;letter-spacing:.5px}.f1-datepicker__grid{display:flex;flex-direction:column;gap:4px}.f1-datepicker__week{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.f1-datepicker__day{display:flex;align-items:center;justify-content:center;width:36px;height:36px;font-size:14px;font-weight:500;color:var(--f1-dp-text);background:transparent;border:none;border-radius:8px;cursor:pointer;transition:all .15s ease}.f1-datepicker__day:hover:not(:disabled):not(.f1-datepicker__day--selected):not(.f1-datepicker__day--empty){background:var(--f1-dp-hover-bg)}.f1-datepicker__day--empty{visibility:hidden;cursor:default}.f1-datepicker__day--today{background:var(--f1-dp-today-bg);border:2px solid var(--f1-dp-today-border);font-weight:700}.f1-datepicker__day--selected{background:var(--f1-dp-primary)!important;color:var(--f1-dp-primary-text)!important;font-weight:700}.f1-datepicker__day--selected:hover{background:var(--f1-dp-primary-hover)!important}.f1-datepicker__day--disabled{color:var(--f1-dp-disabled-text);cursor:not-allowed}.f1-datepicker__day--disabled:hover{background:transparent}.f1-datepicker__footer{display:flex;justify-content:center;margin-top:12px;padding-top:12px;border-top:1px solid var(--f1-dp-border)}.f1-datepicker__today-btn{padding:8px 20px;font-size:13px;font-weight:600;color:var(--f1-dp-primary);background:transparent;border:2px solid var(--f1-dp-primary);border-radius:8px;cursor:pointer;transition:all .2s ease}.f1-datepicker__today-btn:hover{background:var(--f1-dp-primary);color:var(--f1-dp-primary-text)}.f1-datepicker__today-btn:active{transform:scale(.98)}\n"] }]
207
234
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.DateConverterService }]; }, propDecorators: { minDate: [{
208
235
  type: Input
209
236
  }], maxDate: [{
@@ -231,4 +258,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
231
258
  type: HostListener,
232
259
  args: ['document:keydown.escape']
233
260
  }] } });
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVwYWxpLWRhdGUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2YxLW5lcGFsaS1kYXRlLXBpY2tlci9zcmMvbGliL2NvbXBvbmVudHMvbmVwYWxpLWRhdGUtcGlja2VyL25lcGFsaS1kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mMS1uZXBhbGktZGF0ZS1waWNrZXIvc3JjL2xpYi9jb21wb25lbnRzL25lcGFsaS1kYXRlLXBpY2tlci9uZXBhbGktZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixVQUFVLEVBSVYsWUFBWSxFQUNaLHVCQUF1QixHQUUxQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7O0FBa0I1RCxNQUFNLE9BQU8seUJBQXlCO0lBNENsQyxZQUNZLFVBQXNCLEVBQ3RCLEdBQXNCLEVBQ3RCLGFBQW1DO1FBRm5DLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQXNCO1FBeEMvQyx1QkFBdUI7UUFDZCxnQkFBVyxHQUFHLGFBQWEsQ0FBQztRQUVyQyxtQ0FBbUM7UUFDMUIsa0JBQWEsR0FBRyxZQUFZLENBQUM7UUFFdEMsK0JBQStCO1FBQ3RCLFVBQUssR0FBcUIsT0FBTyxDQUFDO1FBRTNDLG1DQUFtQztRQUMxQixhQUFRLEdBQWdCLElBQUks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QkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0ksVUFBVTtzQkFBbkIsTUFBTTtnQkF3RVAsY0FBYztzQkFEYixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVExQyxXQUFXO3NCQURWLFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZXBhbGlEYXRlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL25lcGFsaS1kYXRlLm1vZGVsJztcbmltcG9ydCB7IERhdGVDb252ZXJ0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0ZS1jb252ZXJ0ZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZjEtbmVwYWxpLWRhdGUtcGlja2VyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmVwYWxpLWRhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9uZXBhbGktZGF0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOZXBhbGlEYXRlUGlja2VyQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5lcGFsaURhdGVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIC8qKiBNaW5pbXVtIHNlbGVjdGFibGUgZGF0ZSAqL1xuICAgIEBJbnB1dCgpIG1pbkRhdGU/OiBOZXBhbGlEYXRlO1xuXG4gICAgLyoqIE1heGltdW0gc2VsZWN0YWJsZSBkYXRlICovXG4gICAgQElucHV0KCkgbWF4RGF0ZT86IE5lcGFsaURhdGU7XG5cbiAgICAvKiogUGxhY2Vob2xkZXIgdGV4dCAqL1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjdCBkYXRlJztcblxuICAgIC8qKiBEaXNwbGF5IGZvcm1hdCBmb3IgdGhlIGlucHV0ICovXG4gICAgQElucHV0KCkgZGlzcGxheUZvcm1hdCA9ICdZWVlZLU1NLUREJztcblxuICAgIC8qKiBUaGVtZTogJ2xpZ2h0JyBvciAnZGFyaycgKi9cbiAgICBASW5wdXQoKSB0aGVtZTogJ2xpZ2h0JyB8ICdkYXJrJyA9ICdsaWdodCc7XG5cbiAgICAvKiogTGFuZ3VhZ2UgZm9yIG1vbnRoL2RheSBuYW1lcyAqL1xuICAgIEBJbnB1dCgpIGxhbmd1YWdlOiAnZW4nIHwgJ25wJyA9ICdlbic7XG5cbiAgICAvKiogU2hvdyB0b2RheSBidXR0b24gKi9cbiAgICBASW5wdXQoKSBzaG93VG9kYXlCdXR0b24gPSB0cnVlO1xuXG4gICAgLyoqIERpc2FibGVkIHN0YXRlICovXG4gICAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBVc2UgTmVwYWxpIGRpZ2l0cyBpbiBkaXNwbGF5ICovXG4gICAgQElucHV0KCkgdXNlTmVwYWxpRGlnaXRzID0gZmFsc2U7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGUgY2hhbmdlcyAqL1xuICAgIEBPdXRwdXQoKSBkYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxOZXBhbGlEYXRlIHwgbnVsbD4oKTtcblxuICAgIC8vIEludGVybmFsIHN0YXRlXG4gICAgaXNPcGVuID0gZmFsc2U7XG4gICAgc2VsZWN0ZWREYXRlOiBOZXBhbGlEYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgdmlld0RhdGU6IE5lcGFsaURhdGU7XG4gICAgY2FsZW5kYXJHcmlkOiAobnVtYmVyIHwgbnVsbClbXVtdID0gW107XG4gICAgbW9udGhOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICB3ZWVrZGF5TmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgeWVhcnM6IG51bWJlcltdID0gW107XG5cbiAgICAvLyBDVkEgY2FsbGJhY2tzXG4gICAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBOZXBhbGlEYXRlIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+IHsgfTtcbiAgICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHsgfTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBkYXRlQ29udmVydGVyOiBEYXRlQ29udmVydGVyU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gdGhpcy5kYXRlQ29udmVydGVyLmdldFRvZGF5QlMoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb250aE5hbWVzID0gdGhpcy5kYXRlQ29udmVydGVyLmdldE1vbnRoTmFtZXModGhpcy5sYW5ndWFnZSk7XG4gICAgICAgIHRoaXMud2Vla2RheU5hbWVzID0gdGhpcy5kYXRlQ29udmVydGVyLmdldFdlZWtkYXlOYW1lcyh0aGlzLmxhbmd1YWdlKTtcbiAgICAgICAgdGhpcy55ZWFycyA9IHRoaXMuZGF0ZUNvbnZlcnRlci5nZXRZZWFyUmFuZ2UoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhckdyaWQoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHsgfVxuXG4gICAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW1wbGVtZW50YXRpb25cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBOZXBhbGlEYXRlIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHZhbHVlO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSB2YWx1ZS5jbG9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJHcmlkKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogTmVwYWxpRGF0ZSB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvLyBVSSBNZXRob2RzXG4gICAgdG9nZ2xlQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgICAgIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuO1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyR3JpZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGNsb3NlQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgICBvbkNsaWNrT3V0c2lkZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VDYWxlbmRhcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxuICAgIG9uRXNjYXBlS2V5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICB9XG5cbiAgICAvLyBOYXZpZ2F0aW9uXG4gICAgcHJldmlvdXNNb250aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IHRoaXMudmlld0RhdGUuYWRkTW9udGhzKC0xKTtcbiAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhckdyaWQoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgbmV4dE1vbnRoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gdGhpcy52aWV3RGF0ZS5hZGRNb250aHMoMSk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJHcmlkKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIG9uWWVhckNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlSW50KChldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlLCAxMCk7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgTmVwYWxpRGF0ZSh5ZWFyLCB0aGlzLnZpZXdEYXRlLm1vbnRoLCAxKTtcbiAgICAgICAgLy8gQWRqdXN0IGRheSBpZiBuZWVkZWRcbiAgICAgICAgY29uc3QgZGF5c0luTW9udGggPSB0aGlzLmRhdGVDb252ZXJ0ZXIuZ2V0RGF5c0luTW9udGgoeWVhciwgdGhpcy52aWV3RGF0ZS5tb250aCk7XG4gICAgICAgIGlmICh0aGlzLnZpZXdEYXRlLmRheSA+IGRheXNJbk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gbmV3IE5lcGFsaURhdGUoeWVhciwgdGhpcy52aWV3RGF0ZS5tb250aCwgZGF5c0luTW9udGgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJHcmlkKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIG9uTW9udGhDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQoKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWUsIDEwKTtcbiAgICAgICAgY29uc3QgZGF5c0luTW9udGggPSB0aGlzLmRhdGVDb252ZXJ0ZXIuZ2V0RGF5c0luTW9udGgodGhpcy52aWV3RGF0ZS55ZWFyLCBtb250aCk7XG4gICAgICAgIGNvbnN0IG5ld0RheSA9IE1hdGgubWluKHRoaXMudmlld0RhdGUuZGF5LCBkYXlzSW5Nb250aCk7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgTmVwYWxpRGF0ZSh0aGlzLnZpZXdEYXRlLnllYXIsIG1vbnRoLCBuZXdEYXkpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyR3JpZCgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvLyBEYXRlIHNlbGVjdGlvblxuICAgIHNlbGVjdERhdGUoZGF5OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmIChkYXkgPT09IG51bGwgfHwgdGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgTmVwYWxpRGF0ZSh0aGlzLnZpZXdEYXRlLnllYXIsIHRoaXMudmlld0RhdGUubW9udGgsIGRheSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzRGF0ZVNlbGVjdGFibGUoZGF5KSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3RGF0ZTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHNlbGVjdFRvZGF5KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0b2RheSA9IHRoaXMuZGF0ZUNvbnZlcnRlci5nZXRUb2RheUJTKCk7XG4gICAgICAgIGlmICh0aGlzLmRhdGVDb252ZXJ0ZXIuaXNEYXRlSW5SYW5nZSh0b2RheSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHRvZGF5O1xuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IHRvZGF5LmNsb25lKCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJHcmlkKCk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJEYXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XG4gICAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KG51bGwpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvLyBIZWxwZXIgbWV0aG9kc1xuICAgIHByaXZhdGUgdXBkYXRlQ2FsZW5kYXJHcmlkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhbGVuZGFyR3JpZCA9IHRoaXMuZGF0ZUNvbnZlcnRlci5nZXRNb250aENhbGVuZGFyR3JpZCh0aGlzLnZpZXdEYXRlLnllYXIsIHRoaXMudmlld0RhdGUubW9udGgpO1xuICAgIH1cblxuICAgIGlzRGF0ZVNlbGVjdGFibGUoZGF5OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGRheSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IE5lcGFsaURhdGUodGhpcy52aWV3RGF0ZS55ZWFyLCB0aGlzLnZpZXdEYXRlLm1vbnRoLCBkYXkpO1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlQ29udmVydGVyLmlzRGF0ZUluUmFuZ2UoZGF0ZSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpO1xuICAgIH1cblxuICAgIGlzVG9kYXkoZGF5OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGRheSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCB0b2RheSA9IHRoaXMuZGF0ZUNvbnZlcnRlci5nZXRUb2RheUJTKCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlLnllYXIgPT09IHRvZGF5LnllYXIgJiYgdGhpcy52aWV3RGF0ZS5tb250aCA9PT0gdG9kYXkubW9udGggJiYgZGF5ID09PSB0b2RheS5kYXlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKGRheTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChkYXkgPT09IG51bGwgfHwgIXRoaXMuc2VsZWN0ZWREYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlLnllYXIgPT09IHRoaXMuc2VsZWN0ZWREYXRlLnllYXIgJiZcbiAgICAgICAgICAgIHRoaXMudmlld0RhdGUubW9udGggPT09IHRoaXMuc2VsZWN0ZWREYXRlLm1vbnRoICYmXG4gICAgICAgICAgICBkYXkgPT09IHRoaXMuc2VsZWN0ZWREYXRlLmRheVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBkaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRGF0ZSkgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZERhdGUuZm9ybWF0KHRoaXMuZGlzcGxheUZvcm1hdCwgdGhpcy51c2VOZXBhbGlEaWdpdHMpO1xuICAgIH1cblxuICAgIGdldCBjdXJyZW50TW9udGhOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbnRoTmFtZXNbdGhpcy52aWV3RGF0ZS5tb250aCAtIDFdO1xuICAgIH1cblxuICAgIHRyYWNrQnlXZWVrKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgdHJhY2tCeURheShpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmMS1kYXRlcGlja2VyXCIgW2NsYXNzLmYxLWRhdGVwaWNrZXItLWRhcmtdPVwidGhlbWUgPT09ICdkYXJrJ1wiIFtjbGFzcy5mMS1kYXRlcGlja2VyLS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgIDwhLS0gSW5wdXQgRmllbGQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX2lucHV0LXdyYXBwZXJcIiAoY2xpY2spPVwidG9nZ2xlQ2FsZW5kYXIoKVwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9faW5wdXRcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImRpc3BsYXlWYWx1ZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9faWNvblwiPlxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxuICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIzXCIgeT1cIjRcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiByeD1cIjJcIiByeT1cIjJcIj48L3JlY3Q+XG4gICAgICAgICAgICAgICAgPGxpbmUgeDE9XCIxNlwiIHkxPVwiMlwiIHgyPVwiMTZcIiB5Mj1cIjZcIj48L2xpbmU+XG4gICAgICAgICAgICAgICAgPGxpbmUgeDE9XCI4XCIgeTE9XCIyXCIgeDI9XCI4XCIgeTI9XCI2XCI+PC9saW5lPlxuICAgICAgICAgICAgICAgIDxsaW5lIHgxPVwiM1wiIHkxPVwiMTBcIiB4Mj1cIjIxXCIgeTI9XCIxMFwiPjwvbGluZT5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWREYXRlICYmICFkaXNhYmxlZFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9fY2xlYXJcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyRGF0ZSgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyIGRhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+XG4gICAgICAgICAgICAgICAgPGxpbmUgeDE9XCIxOFwiIHkxPVwiNlwiIHgyPVwiNlwiIHkyPVwiMThcIj48L2xpbmU+XG4gICAgICAgICAgICAgICAgPGxpbmUgeDE9XCI2XCIgeTE9XCI2XCIgeDI9XCIxOFwiIHkyPVwiMThcIj48L2xpbmU+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENhbGVuZGFyIERyb3Bkb3duIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmMS1kYXRlcGlja2VyX19kcm9wZG93blwiICpuZ0lmPVwiaXNPcGVuXCIgW0BmYWRlSW5dPlxuICAgICAgICA8IS0tIEhlYWRlciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX2hlYWRlclwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9fbmF2LWJ0blwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzTW9udGgoKVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlByZXZpb3VzIG1vbnRoXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwb2x5bGluZSBwb2ludHM9XCIxNSAxOCA5IDEyIDE1IDZcIj48L3BvbHlsaW5lPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmMS1kYXRlcGlja2VyX19zZWxlY3RvcnNcIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9fc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZpZXdEYXRlLm1vbnRoXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbk1vbnRoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbW9udGggb2YgbW9udGhOYW1lczsgbGV0IGkgPSBpbmRleFwiIFt2YWx1ZV09XCJpICsgMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbW9udGggfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9fc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZpZXdEYXRlLnllYXJcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uWWVhckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHllYXIgb2YgeWVhcnNcIiBbdmFsdWVdPVwieWVhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgdXNlTmVwYWxpRGlnaXRzID8gKHllYXIgfCBudW1iZXI6JzEuMC0wJykgOiB5ZWFyIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX25hdi1idG5cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0TW9udGgoKVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk5leHQgbW9udGhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjkgMTggMTUgMTIgOSA2XCI+PC9wb2x5bGluZT5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFdlZWtkYXkgSGVhZGVycyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX3dlZWtkYXlzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9fd2Vla2RheVwiICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vla2RheU5hbWVzXCI+XG4gICAgICAgICAgICAgICAge3sgZGF5IH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBDYWxlbmRhciBHcmlkIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9fZ3JpZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX3dlZWtcIiAqbmdGb3I9XCJsZXQgd2VlayBvZiBjYWxlbmRhckdyaWQ7IHRyYWNrQnk6IHRyYWNrQnlXZWVrXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmMS1kYXRlcGlja2VyX19kYXlcIlxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF5IG9mIHdlZWs7IHRyYWNrQnk6IHRyYWNrQnlEYXlcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZjEtZGF0ZXBpY2tlcl9fZGF5LS1lbXB0eV09XCJkYXkgPT09IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZjEtZGF0ZXBpY2tlcl9fZGF5LS10b2RheV09XCJkYXkgIT09IG51bGwgJiYgaXNUb2RheShkYXkpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmYxLWRhdGVwaWNrZXJfX2RheS0tc2VsZWN0ZWRdPVwiZGF5ICE9PSBudWxsICYmIGlzU2VsZWN0ZWQoZGF5KVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mMS1kYXRlcGlja2VyX19kYXktLWRpc2FibGVkXT1cImRheSAhPT0gbnVsbCAmJiAhaXNEYXRlU2VsZWN0YWJsZShkYXkpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRheSA9PT0gbnVsbCB8fCAhaXNEYXRlU2VsZWN0YWJsZShkYXkpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdERhdGUoZGF5KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBkYXkgIT09IG51bGwgPyAodXNlTmVwYWxpRGlnaXRzID8gZGF5IDogZGF5KSA6ICcnIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBGb290ZXIgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmMS1kYXRlcGlja2VyX19mb290ZXJcIiAqbmdJZj1cInNob3dUb2RheUJ1dHRvblwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9fdG9kYXktYnRuXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0VG9kYXkoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgbGFuZ3VhZ2UgPT09ICducCcgPyAn4KSG4KScJyA6ICdUb2RheScgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVwYWxpLWRhdGUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2YxLW5lcGFsaS1kYXRlLXBpY2tlci9zcmMvbGliL2NvbXBvbmVudHMvbmVwYWxpLWRhdGUtcGlja2VyL25lcGFsaS1kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mMS1uZXBhbGktZGF0ZS1waWNrZXIvc3JjL2xpYi9jb21wb25lbnRzL25lcGFsaS1kYXRlLXBpY2tlci9uZXBhbGktZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixVQUFVLEVBTVYsWUFBWSxFQUNaLHVCQUF1QixHQUUxQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7OztBQWlCOUQsTUFBTSxPQUFPLHlCQUF5QjtJQTRDbEMsWUFDWSxVQUFzQixFQUN0QixHQUFzQixFQUN0QixhQUFtQztRQUZuQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGtCQUFhLEdBQWIsYUFBYSxDQUFzQjtRQXhDL0MsdUJBQXVCO1FBQ2QsZ0JBQVcsR0FBRyxhQUFhLENBQUM7UUFFckMsbUNBQW1DO1FBQzFCLGtCQUFhLEdBQUcsWUFBWSxDQUFDO1FBRXRDLCtCQUErQjtRQUN0QixVQUFLLEdBQXFCLE9B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c0JBQW5CLE1BQU07Z0JBcUZQLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFRMUMsV0FBVztzQkFEVixZQUFZO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBPbkluaXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmVwYWxpRGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy9uZXBhbGktZGF0ZS5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlQ29udmVydGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGUtY29udmVydGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgdG9OZXBhbGlEaWdpdHMgfSBmcm9tICcuLi8uLi91dGlscy9icy1jYWxlbmRhci1kYXRhJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmMS1uZXBhbGktZGF0ZS1waWNrZXInLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGVdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZXBhbGktZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25lcGFsaS1kYXRlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5lcGFsaURhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmVwYWxpRGF0ZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICAvKiogTWluaW11bSBzZWxlY3RhYmxlIGRhdGUgKi9cbiAgICBASW5wdXQoKSBtaW5EYXRlPzogTmVwYWxpRGF0ZTtcblxuICAgIC8qKiBNYXhpbXVtIHNlbGVjdGFibGUgZGF0ZSAqL1xuICAgIEBJbnB1dCgpIG1heERhdGU/OiBOZXBhbGlEYXRlO1xuXG4gICAgLyoqIFBsYWNlaG9sZGVyIHRleHQgKi9cbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdTZWxlY3QgZGF0ZSc7XG5cbiAgICAvKiogRGlzcGxheSBmb3JtYXQgZm9yIHRoZSBpbnB1dCAqL1xuICAgIEBJbnB1dCgpIGRpc3BsYXlGb3JtYXQgPSAnWVlZWS1NTS1ERCc7XG5cbiAgICAvKiogVGhlbWU6ICdsaWdodCcgb3IgJ2RhcmsnICovXG4gICAgQElucHV0KCkgdGhlbWU6ICdsaWdodCcgfCAnZGFyaycgPSAnbGlnaHQnO1xuXG4gICAgLyoqIExhbmd1YWdlIGZvciBtb250aC9kYXkgbmFtZXMgKi9cbiAgICBASW5wdXQoKSBsYW5ndWFnZTogJ2VuJyB8ICducCcgPSAnZW4nO1xuXG4gICAgLyoqIFNob3cgdG9kYXkgYnV0dG9uICovXG4gICAgQElucHV0KCkgc2hvd1RvZGF5QnV0dG9uID0gdHJ1ZTtcblxuICAgIC8qKiBEaXNhYmxlZCBzdGF0ZSAqL1xuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKiogVXNlIE5lcGFsaSBkaWdpdHMgaW4gZGlzcGxheSAqL1xuICAgIEBJbnB1dCgpIHVzZU5lcGFsaURpZ2l0cyA9IGZhbHNlO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkYXRlIGNoYW5nZXMgKi9cbiAgICBAT3V0cHV0KCkgZGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TmVwYWxpRGF0ZSB8IG51bGw+KCk7XG5cbiAgICAvLyBJbnRlcm5hbCBzdGF0ZVxuICAgIGlzT3BlbiA9IGZhbHNlO1xuICAgIHNlbGVjdGVkRGF0ZTogTmVwYWxpRGF0ZSB8IG51bGwgPSBudWxsO1xuICAgIHZpZXdEYXRlOiBOZXBhbGlEYXRlO1xuICAgIGNhbGVuZGFyR3JpZDogKG51bWJlciB8IG51bGwpW11bXSA9IFtdO1xuICAgIG1vbnRoTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgd2Vla2RheU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHllYXJzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgLy8gQ1ZBIGNhbGxiYWNrc1xuICAgIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogTmVwYWxpRGF0ZSB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiB7IH07XG4gICAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7IH07XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgZGF0ZUNvbnZlcnRlcjogRGF0ZUNvbnZlcnRlclNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IHRoaXMuZGF0ZUNvbnZlcnRlci5nZXRUb2RheUJTKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW9udGhOYW1lcyA9IHRoaXMuZGF0ZUNvbnZlcnRlci5nZXRNb250aE5hbWVzKHRoaXMubGFuZ3VhZ2UpO1xuICAgICAgICB0aGlzLndlZWtkYXlOYW1lcyA9IHRoaXMuZGF0ZUNvbnZlcnRlci5nZXRXZWVrZGF5TmFtZXModGhpcy5sYW5ndWFnZSk7XG4gICAgICAgIHRoaXMueWVhcnMgPSB0aGlzLmRhdGVDb252ZXJ0ZXIuZ2V0WWVhclJhbmdlKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJHcmlkKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7IH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgLy8gVXBkYXRlIG1vbnRoL3dlZWtkYXkgbmFtZXMgd2hlbiBsYW5ndWFnZSBjaGFuZ2VzXG4gICAgICAgIGlmIChjaGFuZ2VzWydsYW5ndWFnZSddICYmICFjaGFuZ2VzWydsYW5ndWFnZSddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoTmFtZXMgPSB0aGlzLmRhdGVDb252ZXJ0ZXIuZ2V0TW9udGhOYW1lcyh0aGlzLmxhbmd1YWdlKTtcbiAgICAgICAgICAgIHRoaXMud2Vla2RheU5hbWVzID0gdGhpcy5kYXRlQ29udmVydGVyLmdldFdlZWtkYXlOYW1lcyh0aGlzLmxhbmd1YWdlKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB3aGVuIHVzZU5lcGFsaURpZ2l0cyBjaGFuZ2VzXG4gICAgICAgIGlmIChjaGFuZ2VzWyd1c2VOZXBhbGlEaWdpdHMnXSAmJiAhY2hhbmdlc1sndXNlTmVwYWxpRGlnaXRzJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW1wbGVtZW50YXRpb25cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBOZXBhbGlEYXRlIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHZhbHVlO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSB2YWx1ZS5jbG9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJHcmlkKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogTmVwYWxpRGF0ZSB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvLyBVSSBNZXRob2RzXG4gICAgdG9nZ2xlQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgICAgIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuO1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyR3JpZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGNsb3NlQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgICBvbkNsaWNrT3V0c2lkZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VDYWxlbmRhcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxuICAgIG9uRXNjYXBlS2V5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICB9XG5cbiAgICAvLyBOYXZpZ2F0aW9uXG4gICAgcHJldmlvdXNNb250aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IHRoaXMudmlld0RhdGUuYWRkTW9udGhzKC0xKTtcbiAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhckdyaWQoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgbmV4dE1vbnRoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gdGhpcy52aWV3RGF0ZS5hZGRNb250aHMoMSk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJHcmlkKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIG9uWWVhckNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlSW50KChldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlLCAxMCk7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgTmVwYWxpRGF0ZSh5ZWFyLCB0aGlzLnZpZXdEYXRlLm1vbnRoLCAxKTtcbiAgICAgICAgLy8gQWRqdXN0IGRheSBpZiBuZWVkZWRcbiAgICAgICAgY29uc3QgZGF5c0luTW9udGggPSB0aGlzLmRhdGVDb252ZXJ0ZXIuZ2V0RGF5c0luTW9udGgoeWVhciwgdGhpcy52aWV3RGF0ZS5tb250aCk7XG4gICAgICAgIGlmICh0aGlzLnZpZXdEYXRlLmRheSA+IGRheXNJbk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gbmV3IE5lcGFsaURhdGUoeWVhciwgdGhpcy52aWV3RGF0ZS5tb250aCwgZGF5c0luTW9udGgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJHcmlkKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIG9uTW9udGhDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQoKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWUsIDEwKTtcbiAgICAgICAgY29uc3QgZGF5c0luTW9udGggPSB0aGlzLmRhdGVDb252ZXJ0ZXIuZ2V0RGF5c0luTW9udGgodGhpcy52aWV3RGF0ZS55ZWFyLCBtb250aCk7XG4gICAgICAgIGNvbnN0IG5ld0RheSA9IE1hdGgubWluKHRoaXMudmlld0RhdGUuZGF5LCBkYXlzSW5Nb250aCk7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgTmVwYWxpRGF0ZSh0aGlzLnZpZXdEYXRlLnllYXIsIG1vbnRoLCBuZXdEYXkpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyR3JpZCgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvLyBEYXRlIHNlbGVjdGlvblxuICAgIHNlbGVjdERhdGUoZGF5OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmIChkYXkgPT09IG51bGwgfHwgdGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgTmVwYWxpRGF0ZSh0aGlzLnZpZXdEYXRlLnllYXIsIHRoaXMudmlld0RhdGUubW9udGgsIGRheSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzRGF0ZVNlbGVjdGFibGUoZGF5KSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3RGF0ZTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHNlbGVjdFRvZGF5KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0b2RheSA9IHRoaXMuZGF0ZUNvbnZlcnRlci5nZXRUb2RheUJTKCk7XG4gICAgICAgIGlmICh0aGlzLmRhdGVDb252ZXJ0ZXIuaXNEYXRlSW5SYW5nZSh0b2RheSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHRvZGF5O1xuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IHRvZGF5LmNsb25lKCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJHcmlkKCk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJEYXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XG4gICAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KG51bGwpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvLyBIZWxwZXIgbWV0aG9kc1xuICAgIHByaXZhdGUgdXBkYXRlQ2FsZW5kYXJHcmlkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhbGVuZGFyR3JpZCA9IHRoaXMuZGF0ZUNvbnZlcnRlci5nZXRNb250aENhbGVuZGFyR3JpZCh0aGlzLnZpZXdEYXRlLnllYXIsIHRoaXMudmlld0RhdGUubW9udGgpO1xuICAgIH1cblxuICAgIGlzRGF0ZVNlbGVjdGFibGUoZGF5OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGRheSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IE5lcGFsaURhdGUodGhpcy52aWV3RGF0ZS55ZWFyLCB0aGlzLnZpZXdEYXRlLm1vbnRoLCBkYXkpO1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlQ29udmVydGVyLmlzRGF0ZUluUmFuZ2UoZGF0ZSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpO1xuICAgIH1cblxuICAgIGlzVG9kYXkoZGF5OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGRheSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCB0b2RheSA9IHRoaXMuZGF0ZUNvbnZlcnRlci5nZXRUb2RheUJTKCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlLnllYXIgPT09IHRvZGF5LnllYXIgJiYgdGhpcy52aWV3RGF0ZS5tb250aCA9PT0gdG9kYXkubW9udGggJiYgZGF5ID09PSB0b2RheS5kYXlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKGRheTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChkYXkgPT09IG51bGwgfHwgIXRoaXMuc2VsZWN0ZWREYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlLnllYXIgPT09IHRoaXMuc2VsZWN0ZWREYXRlLnllYXIgJiZcbiAgICAgICAgICAgIHRoaXMudmlld0RhdGUubW9udGggPT09IHRoaXMuc2VsZWN0ZWREYXRlLm1vbnRoICYmXG4gICAgICAgICAgICBkYXkgPT09IHRoaXMuc2VsZWN0ZWREYXRlLmRheVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBkaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRGF0ZSkgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZERhdGUuZm9ybWF0KHRoaXMuZGlzcGxheUZvcm1hdCwgdGhpcy51c2VOZXBhbGlEaWdpdHMpO1xuICAgIH1cblxuICAgIGdldCBjdXJyZW50TW9udGhOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbnRoTmFtZXNbdGhpcy52aWV3RGF0ZS5tb250aCAtIDFdO1xuICAgIH1cblxuICAgIHRyYWNrQnlXZWVrKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgdHJhY2tCeURheShpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcm1hdCBkYXkgbnVtYmVyIGJhc2VkIG9uIHVzZU5lcGFsaURpZ2l0cyBzZXR0aW5nXG4gICAgICovXG4gICAgZm9ybWF0RGF5KGRheTogbnVtYmVyIHwgbnVsbCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChkYXkgPT09IG51bGwpIHJldHVybiAnJztcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlTmVwYWxpRGlnaXRzID8gdG9OZXBhbGlEaWdpdHMoZGF5KSA6IFN0cmluZyhkYXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcm1hdCB5ZWFyIG51bWJlciBiYXNlZCBvbiB1c2VOZXBhbGlEaWdpdHMgc2V0dGluZ1xuICAgICAqL1xuICAgIGZvcm1hdFllYXIoeWVhcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlTmVwYWxpRGlnaXRzID8gdG9OZXBhbGlEaWdpdHMoeWVhcikgOiBTdHJpbmcoeWVhcik7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImYxLWRhdGVwaWNrZXJcIiBbY2xhc3MuZjEtZGF0ZXBpY2tlci0tZGFya109XCJ0aGVtZSA9PT0gJ2RhcmsnXCIgW2NsYXNzLmYxLWRhdGVwaWNrZXItLWRpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgPCEtLSBJbnB1dCBGaWVsZCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9faW5wdXQtd3JhcHBlclwiIChjbGljayk9XCJ0b2dnbGVDYWxlbmRhcigpXCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9faW5wdXRcIiBbdmFsdWVdPVwiZGlzcGxheVZhbHVlXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIHJlYWRvbmx5IC8+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9faWNvblwiPlxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+XG4gICAgICAgICAgICAgICAgPHJlY3QgeD1cIjNcIiB5PVwiNFwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHJ4PVwiMlwiIHJ5PVwiMlwiPjwvcmVjdD5cbiAgICAgICAgICAgICAgICA8bGluZSB4MT1cIjE2XCIgeTE9XCIyXCIgeDI9XCIxNlwiIHkyPVwiNlwiPjwvbGluZT5cbiAgICAgICAgICAgICAgICA8bGluZSB4MT1cIjhcIiB5MT1cIjJcIiB4Mj1cIjhcIiB5Mj1cIjZcIj48L2xpbmU+XG4gICAgICAgICAgICAgICAgPGxpbmUgeDE9XCIzXCIgeTE9XCIxMFwiIHgyPVwiMjFcIiB5Mj1cIjEwXCI+PC9saW5lPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNlbGVjdGVkRGF0ZSAmJiAhZGlzYWJsZWRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJmMS1kYXRlcGlja2VyX19jbGVhclwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJEYXRlKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIGFyaWEtbGFiZWw9XCJDbGVhciBkYXRlXCI+XG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cbiAgICAgICAgICAgICAgICA8bGluZSB4MT1cIjE4XCIgeTE9XCI2XCIgeDI9XCI2XCIgeTI9XCIxOFwiPjwvbGluZT5cbiAgICAgICAgICAgICAgICA8bGluZSB4MT1cIjZcIiB5MT1cIjZcIiB4Mj1cIjE4XCIgeTI9XCIxOFwiPjwvbGluZT5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ2FsZW5kYXIgRHJvcGRvd24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX2Ryb3Bkb3duXCIgKm5nSWY9XCJpc09wZW5cIiBbQGZhZGVJbl0+XG4gICAgICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9faGVhZGVyXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX25hdi1idG5cIiAoY2xpY2spPVwicHJldmlvdXNNb250aCgpXCIgYXJpYS1sYWJlbD1cIlByZXZpb3VzIG1vbnRoXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxuICAgICAgICAgICAgICAgICAgICA8cG9seWxpbmUgcG9pbnRzPVwiMTUgMTggOSAxMiAxNSA2XCI+PC9wb2x5bGluZT5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9fc2VsZWN0b3JzXCI+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX3NlbGVjdFwiIFt2YWx1ZV09XCJ2aWV3RGF0ZS5tb250aFwiIChjaGFuZ2UpPVwib25Nb250aENoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG1vbnRoIG9mIG1vbnRoTmFtZXM7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiaSArIDFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1vbnRoIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX3NlbGVjdFwiIFt2YWx1ZV09XCJ2aWV3RGF0ZS55ZWFyXCIgKGNoYW5nZSk9XCJvblllYXJDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB5ZWFyIG9mIHllYXJzXCIgW3ZhbHVlXT1cInllYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdFllYXIoeWVhcikgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJmMS1kYXRlcGlja2VyX19uYXYtYnRuXCIgKGNsaWNrKT1cIm5leHRNb250aCgpXCIgYXJpYS1sYWJlbD1cIk5leHQgbW9udGhcIj5cbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwb2x5bGluZSBwb2ludHM9XCI5IDE4IDE1IDEyIDkgNlwiPjwvcG9seWxpbmU+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBXZWVrZGF5IEhlYWRlcnMgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmMS1kYXRlcGlja2VyX193ZWVrZGF5c1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX3dlZWtkYXlcIiAqbmdGb3I9XCJsZXQgZGF5IG9mIHdlZWtkYXlOYW1lc1wiPlxuICAgICAgICAgICAgICAgIHt7IGRheSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gQ2FsZW5kYXIgR3JpZCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX2dyaWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmMS1kYXRlcGlja2VyX193ZWVrXCIgKm5nRm9yPVwibGV0IHdlZWsgb2YgY2FsZW5kYXJHcmlkOyB0cmFja0J5OiB0cmFja0J5V2Vla1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9fZGF5XCIgKm5nRm9yPVwibGV0IGRheSBvZiB3ZWVrOyB0cmFja0J5OiB0cmFja0J5RGF5XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmYxLWRhdGVwaWNrZXJfX2RheS0tZW1wdHldPVwiZGF5ID09PSBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmYxLWRhdGVwaWNrZXJfX2RheS0tdG9kYXldPVwiZGF5ICE9PSBudWxsICYmIGlzVG9kYXkoZGF5KVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mMS1kYXRlcGlja2VyX19kYXktLXNlbGVjdGVkXT1cImRheSAhPT0gbnVsbCAmJiBpc1NlbGVjdGVkKGRheSlcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZjEtZGF0ZXBpY2tlcl9fZGF5LS1kaXNhYmxlZF09XCJkYXkgIT09IG51bGwgJiYgIWlzRGF0ZVNlbGVjdGFibGUoZGF5KVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkYXkgPT09IG51bGwgfHwgIWlzRGF0ZVNlbGVjdGFibGUoZGF5KVwiIChjbGljayk9XCJzZWxlY3REYXRlKGRheSlcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZm9ybWF0RGF5KGRheSkgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEZvb3RlciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX2Zvb3RlclwiICpuZ0lmPVwic2hvd1RvZGF5QnV0dG9uXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX3RvZGF5LWJ0blwiIChjbGljayk9XCJzZWxlY3RUb2RheSgpXCI+XG4gICAgICAgICAgICAgICAge3sgbGFuZ3VhZ2UgPT09ICducCcgPyAn4KSG4KScJyA6ICdUb2RheScgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -132,15 +132,22 @@ export class NepaliDate {
132
132
  */
133
133
  format(pattern = 'YYYY-MM-DD', useNepaliDigits = false) {
134
134
  let result = pattern;
135
- // Replace patterns (order matters - longer patterns first)
135
+ // Use placeholders without M/D/Y characters to prevent regex replacement issues
136
+ const monthNameEn = BS_MONTHS_EN[this._month - 1];
137
+ const monthNameNp = BS_MONTHS_NP[this._month - 1];
138
+ // Replace month name patterns first with unique placeholders
139
+ result = result.replace(/MMMM/g, '\x00EN\x00');
140
+ result = result.replace(/mmmm/g, '\x00NP\x00');
141
+ // Replace year and numeric patterns
136
142
  result = result.replace(/YYYY/g, String(this._year).padStart(4, '0'));
137
143
  result = result.replace(/YY/g, String(this._year).slice(-2));
138
- result = result.replace(/MMMM/g, BS_MONTHS_EN[this._month - 1]);
139
- result = result.replace(/mmmm/g, BS_MONTHS_NP[this._month - 1]);
140
144
  result = result.replace(/MM/g, String(this._month).padStart(2, '0'));
141
145
  result = result.replace(/M/g, String(this._month));
142
146
  result = result.replace(/DD/g, String(this._day).padStart(2, '0'));
143
147
  result = result.replace(/D/g, String(this._day));
148
+ // Restore month names from placeholders
149
+ result = result.replace(/\x00EN\x00/g, monthNameEn);
150
+ result = result.replace(/\x00NP\x00/g, monthNameNp);
144
151
  if (useNepaliDigits) {
145
152
  result = toNepaliDigits(result);
146
153
  }
@@ -255,4 +262,4 @@ export class NepaliDate {
255
262
  return new NepaliDate(parts[0], parts[1], parts[2]);
256
263
  }
257
264
  }
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVwYWxpLWRhdGUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mMS1uZXBhbGktZGF0ZS1waWNrZXIvc3JjL2xpYi9tb2RlbHMvbmVwYWxpLWRhdGUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGdCQUFnQixFQUNoQixZQUFZLEVBQ1osWUFBWSxFQUNaLFdBQVcsRUFDWCxXQUFXLEVBQ1gsUUFBUSxFQUNSLFFBQVEsRUFDUixnQkFBZ0IsRUFDaEIsY0FBYyxHQUNqQixNQUFNLDJCQUEyQixDQUFDO0FBRW5DOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFLbkIsWUFBWSxJQUFZLEVBQUUsS0FBYSxFQUFFLEdBQVc7UUFDaEQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7SUFDcEIsQ0FBQztJQUVELFVBQVU7SUFDVixJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxHQUFHO1FBQ0gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFLO1FBQ1IsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQVk7UUFDdEIsNEJBQTRCO1FBQzVCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUks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TyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbkQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFakQsSUFBSSxlQUFlLEVBQUU7WUFDakIsTUFBTSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNuQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENB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dGVudCI6WyJpbXBvcnQge1xuICAgIEJTX0NBTEVOREFSX0RBVEEsXG4gICAgQlNfTU9OVEhTX0VOLFxuICAgIEJTX01PTlRIU19OUCxcbiAgICBCU19NSU5fWUVBUixcbiAgICBCU19NQVhfWUVBUixcbiAgICBBRF9FUE9DSCxcbiAgICBCU19FUE9DSCxcbiAgICBnZXREYXlzSW5CU01vbnRoLFxuICAgIHRvTmVwYWxpRGlnaXRzLFxufSBmcm9tICcuLi91dGlscy9icy1jYWxlbmRhci1kYXRhJztcblxuLyoqXG4gKiBOZXBhbGlEYXRlIC0gUmVwcmVzZW50cyBhIGRhdGUgaW4gdGhlIEJpa3JhbSBTYW1iYXQgKEJTKSBjYWxlbmRhclxuICovXG5leHBvcnQgY2xhc3MgTmVwYWxpRGF0ZSB7XG4gICAgcHJpdmF0ZSBfeWVhcjogbnVtYmVyO1xuICAgIHByaXZhdGUgX21vbnRoOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfZGF5OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIGRheTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3llYXIgPSB5ZWFyO1xuICAgICAgICB0aGlzLl9tb250aCA9IG1vbnRoO1xuICAgICAgICB0aGlzLl9kYXkgPSBkYXk7XG4gICAgfVxuXG4gICAgLy8gR2V0dGVyc1xuICAgIGdldCB5ZWFyKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl95ZWFyO1xuICAgIH1cblxuICAgIGdldCBtb250aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9udGg7XG4gICAgfVxuXG4gICAgZ2V0IGRheSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBOZXBhbGlEYXRlIGZyb20gY3VycmVudCBkYXRlXG4gICAgICovXG4gICAgc3RhdGljIHRvZGF5KCk6IE5lcGFsaURhdGUge1xuICAgICAgICByZXR1cm4gTmVwYWxpRGF0ZS5mcm9tQUQobmV3IERhdGUoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIE5lcGFsaURhdGUgZnJvbSBBRCBEYXRlXG4gICAgICovXG4gICAgc3RhdGljIGZyb21BRChhZERhdGU6IERhdGUpOiBOZXBhbGlEYXRlIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRheXMgZnJvbSBlcG9jaFxuICAgICAgICBjb25zdCBlcG9jaFRpbWUgPSBBRF9FUE9DSC5nZXRUaW1lKCk7XG4gICAgICAgIGNvbnN0IHRhcmdldFRpbWUgPSBuZXcgRGF0ZShhZERhdGUuZ2V0RnVsbFllYXIoKSwgYWREYXRlLmdldE1vbnRoKCksIGFkRGF0ZS5nZXREYXRlKCkpLmdldFRpbWUoKTtcbiAgICAgICAgbGV0IGRheXNEaWZmID0gTWF0aC5mbG9vcigodGFyZ2V0VGltZSAtIGVwb2NoVGltZSkgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkpO1xuXG4gICAgICAgIGlmIChkYXlzRGlmZiA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRGF0ZSBpcyBiZWZvcmUgc3VwcG9ydGVkIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYnNZZWFyID0gQlNfRVBPQ0gueWVhcjtcbiAgICAgICAgbGV0IGJzTW9udGggPSBCU19FUE9DSC5tb250aDtcbiAgICAgICAgbGV0IGJzRGF5ID0gQlNfRVBPQ0guZGF5O1xuXG4gICAgICAgIC8vIEFkZCBkYXlzXG4gICAgICAgIHdoaWxlIChkYXlzRGlmZiA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gZ2V0RGF5c0luQlNNb250aChic1llYXIsIGJzTW9udGgpO1xuICAgICAgICAgICAgY29uc3QgZGF5c1JlbWFpbmluZ0luTW9udGggPSBkYXlzSW5Nb250aCAtIGJzRGF5O1xuXG4gICAgICAgICAgICBpZiAoZGF5c0RpZmYgPD0gZGF5c1JlbWFpbmluZ0luTW9udGgpIHtcbiAgICAgICAgICAgICAgICBic0RheSArPSBkYXlzRGlmZjtcbiAgICAgICAgICAgICAgICBkYXlzRGlmZiA9IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRheXNEaWZmIC09IGRheXNSZW1haW5pbmdJbk1vbnRoICsgMTtcbiAgICAgICAgICAgICAgICBic01vbnRoKys7XG4gICAgICAgICAgICAgICAgYnNEYXkgPSAxO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJzTW9udGggPiAxMikge1xuICAgICAgICAgICAgICAgICAgICBic01vbnRoID0gMTtcbiAgICAgICAgICAgICAgICAgICAgYnNZZWFyKys7XG4gICAgICAgICAgICAgICAgICAgIGlmIChic1llYXIgPiBCU19NQVhfWUVBUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEYXRlIGV4Y2VlZHMgc3VwcG9ydGVkIHJhbmdlIChtYXg6ICR7QlNfTUFYX1lFQVJ9IEJTKWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBOZXBhbGlEYXRlKGJzWWVhciwgYnNNb250aCwgYnNEYXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgdG8gQUQgRGF0ZVxuICAgICAqL1xuICAgIHRvQUQoKTogRGF0ZSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBOZXBhbGlEYXRlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdG90YWxEYXlzID0gMDtcblxuICAgICAgICAvLyBBZGQgZGF5cyBmb3IgY29tcGxldGUgeWVhcnNcbiAgICAgICAgZm9yIChsZXQgeWVhciA9IEJTX0VQT0NILnllYXI7IHllYXIgPCB0aGlzLl95ZWFyOyB5ZWFyKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJEYXRhID0gQlNfQ0FMRU5EQVJfREFUQVt5ZWFyXTtcbiAgICAgICAgICAgIGlmICh5ZWFyRGF0YSkge1xuICAgICAgICAgICAgICAgIHRvdGFsRGF5cyArPSB5ZWFyRGF0YS5yZWR1Y2UoKHN1bSwgZGF5cykgPT4gc3VtICsgZGF5cywgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgZGF5cyBmb3IgY29tcGxldGUgbW9udGhzIGluIGN1cnJlbnQgeWVhclxuICAgICAgICBmb3IgKGxldCBtb250aCA9IDE7IG1vbnRoIDwgdGhpcy5fbW9udGg7IG1vbnRoKyspIHtcbiAgICAgICAgICAgIHRvdGFsRGF5cyArPSBnZXREYXlzSW5CU01vbnRoKHRoaXMuX3llYXIsIG1vbnRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCByZW1haW5pbmcgZGF5c1xuICAgICAgICB0b3RhbERheXMgKz0gdGhpcy5fZGF5IC0gMTtcblxuICAgICAgICAvLyBDYWxjdWxhdGUgQUQgZGF0ZSBmcm9tIGVwb2NoXG4gICAgICAgIGNvbnN0IGFkRGF0ZSA9IG5ldyBEYXRlKEFEX0VQT0NIKTtcbiAgICAgICAgYWREYXRlLnNldERhdGUoYWREYXRlLmdldERhdGUoKSArIHRvdGFsRGF5cyk7XG5cbiAgICAgICAgcmV0dXJuIGFkRGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGUgZGF0ZSBpcyB2YWxpZFxuICAgICAqL1xuICAgIGlzVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICAgIC8vIENoZWNrIHllYXIgcmFuZ2VcbiAgICAgICAgaWYgKHRoaXMuX3llYXIgPCBCU19NSU5fWUVBUiB8fCB0aGlzLl95ZWFyID4gQlNfTUFYX1lFQVIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIG1vbnRoIHJhbmdlXG4gICAgICAgIGlmICh0aGlzLl9tb250aCA8IDEgfHwgdGhpcy5fbW9udGggPiAxMikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZGF5IHJhbmdlXG4gICAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gZ2V0RGF5c0luQlNNb250aCh0aGlzLl95ZWFyLCB0aGlzLl9tb250aCk7XG4gICAgICAgIGlmICh0aGlzLl9kYXkgPCAxIHx8IHRoaXMuX2RheSA+IGRheXNJbk1vbnRoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGRheSBvZiB3ZWVrICgwID0gU3VuZGF5LCA2ID0gU2F0dXJkYXkpXG4gICAgICovXG4gICAgZ2V0RGF5KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvQUQoKS5nZXREYXkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgbW9udGggbmFtZSBpbiBzcGVjaWZpZWQgbGFuZ3VhZ2VcbiAgICAgKi9cbiAgICBnZXRNb250aE5hbWUobGFuZzogJ2VuJyB8ICducCcgPSAnZW4nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGxhbmcgPT09ICducCcgPyBCU19NT05USFNfTlBbdGhpcy5fbW9udGggLSAxXSA6IEJTX01PTlRIU19FTlt0aGlzLl9tb250aCAtIDFdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcm1hdCBkYXRlIGFjY29yZGluZyB0byBwYXR0ZXJuXG4gICAgICogUGF0dGVybnM6XG4gICAgICogICBZWVlZIC0gNC1kaWdpdCB5ZWFyXG4gICAgICogICBZWSAgIC0gMi1kaWdpdCB5ZWFyXG4gICAgICogICBNTSAgIC0gMi1kaWdpdCBtb250aFxuICAgICAqICAgTSAgICAtIG1vbnRoIHdpdGhvdXQgbGVhZGluZyB6ZXJvXG4gICAgICogICBERCAgIC0gMi1kaWdpdCBkYXlcbiAgICAgKiAgIEQgICAgLSBkYXkgd2l0aG91dCBsZWFkaW5nIHplcm9cbiAgICAgKiAgIE1NTU0gLSBmdWxsIG1vbnRoIG5hbWUgKEVuZ2xpc2gpXG4gICAgICogICBtbW1tIC0gZnVsbCBtb250aCBuYW1lIChOZXBhbGkpXG4gICAgICovXG4gICAgZm9ybWF0KHBhdHRlcm46IHN0cmluZyA9ICdZWVlZLU1NLUREJywgdXNlTmVwYWxpRGlnaXRzOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVzdWx0ID0gcGF0dGVybjtcblxuICAgICAgICAvLyBSZXBsYWNlIHBhdHRlcm5zIChvcmRlciBtYXR0ZXJzIC0gbG9uZ2VyIHBhdHRlcm5zIGZpcnN0KVxuICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvWVlZWS9nLCBTdHJpbmcodGhpcy5feWVhcikucGFkU3RhcnQoNCwgJzAnKSk7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9ZWS9nLCBTdHJpbmcodGhpcy5feWVhcikuc2xpY2UoLTIpKTtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL01NTU0vZywgQlNfTU9OVEhTX0VOW3RoaXMuX21vbnRoIC0gMV0pO1xuICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvbW1tbS9nLCBCU19NT05USFNfTlBbdGhpcy5fbW9udGggLSAxXSk7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9NTS9nLCBTdHJpbmcodGhpcy5fbW9udGgpLnBhZFN0YXJ0KDIsICcwJykpO1xuICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvTS9nLCBTdHJpbmcodGhpcy5fbW9udGgpKTtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL0REL2csIFN0cmluZyh0aGlzLl9kYXkpLnBhZFN0YXJ0KDIsICcwJykpO1xuICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvRC9nLCBTdHJpbmcodGhpcy5fZGF5KSk7XG5cbiAgICAgICAgaWYgKHVzZU5lcGFsaURpZ2l0cykge1xuICAgICAgICAgICAgcmVzdWx0ID0gdG9OZXBhbGlEaWdpdHMocmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBkYXRlXG4gICAgICovXG4gICAgY2xvbmUoKTogTmVwYWxpRGF0ZSB7XG4gICAgICAgIHJldHVybiBuZXcgTmVwYWxpRGF0ZSh0aGlzLl95ZWFyLCB0aGlzLl9tb250aCwgdGhpcy5fZGF5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlIHdpdGggYW5vdGhlciBOZXBhbGlEYXRlXG4gICAgICogUmV0dXJuczogLTEgaWYgdGhpcyA8IG90aGVyLCAwIGlmIGVxdWFsLCAxIGlmIHRoaXMgPiBvdGhlclxuICAgICAqL1xuICAgIGNvbXBhcmVUbyhvdGhlcjogTmVwYWxpRGF0ZSk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLl95ZWFyICE9PSBvdGhlci5feWVhcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3llYXIgPCBvdGhlci5feWVhciA/IC0xIDogMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fbW9udGggIT09IG90aGVyLl9tb250aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoIDwgb3RoZXIuX21vbnRoID8gLTEgOiAxO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kYXkgIT09IG90aGVyLl9kYXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXkgPCBvdGhlci5fZGF5ID8gLTEgOiAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoaXMgZGF0ZSBpcyBiZWZvcmUgYW5vdGhlclxuICAgICAqL1xuICAgIGlzQmVmb3JlKG90aGVyOiBOZXBhbGlEYXRlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVUbyhvdGhlcikgPCAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoaXMgZGF0ZSBpcyBhZnRlciBhbm90aGVyXG4gICAgICovXG4gICAgaXNBZnRlcihvdGhlcjogTmVwYWxpRGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlVG8ob3RoZXIpID4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGlzIGRhdGUgZXF1YWxzIGFub3RoZXJcbiAgICAgKi9cbiAgICBlcXVhbHMob3RoZXI6IE5lcGFsaURhdGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZVRvKG90aGVyKSA9PT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgZGF5cyB0byBkYXRlIChyZXR1cm5zIG5ldyBOZXBhbGlEYXRlKVxuICAgICAqL1xuICAgIGFkZERheXMoZGF5czogbnVtYmVyKTogTmVwYWxpRGF0ZSB7XG4gICAgICAgIGNvbnN0IGFkRGF0ZSA9IHRoaXMudG9BRCgpO1xuICAgICAgICBhZERhdGUuc2V0RGF0ZShhZERhdGUuZ2V0RGF0ZSgpICsgZGF5cyk7XG4gICAgICAgIHJldHVybiBOZXBhbGlEYXRlLmZyb21BRChhZERhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBtb250aHMgdG8gZGF0ZSAocmV0dXJucyBuZXcgTmVwYWxpRGF0ZSlcbiAgICAgKi9cbiAgICBhZGRNb250aHMobW9udGhzOiBudW1iZXIpOiBOZXBhbGlEYXRlIHtcbiAgICAgICAgbGV0IG5ld1llYXIgPSB0aGlzLl95ZWFyO1xuICAgICAgICBsZXQgbmV3TW9udGggPSB0aGlzLl9tb250aCArIG1vbnRocztcblxuICAgICAgICB3aGlsZSAobmV3TW9udGggPiAxMikge1xuICAgICAgICAgICAgbmV3TW9udGggLT0gMTI7XG4gICAgICAgICAgICBuZXdZZWFyKys7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKG5ld01vbnRoIDwgMSkge1xuICAgICAgICAgICAgbmV3TW9udGggKz0gMTI7XG4gICAgICAgICAgICBuZXdZZWFyLS07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGp1c3QgZGF5IGlmIGl0IGV4Y2VlZHMgZGF5cyBpbiBuZXcgbW9udGhcbiAgICAgICAgY29uc3QgZGF5c0luTmV3TW9udGggPSBnZXREYXlzSW5CU01vbnRoKG5ld1llYXIsIG5ld01vbnRoKTtcbiAgICAgICAgY29uc3QgbmV3RGF5ID0gTWF0aC5taW4odGhpcy5fZGF5LCBkYXlzSW5OZXdNb250aCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBOZXBhbGlEYXRlKG5ld1llYXIsIG5ld01vbnRoLCBuZXdEYXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCB5ZWFycyB0byBkYXRlIChyZXR1cm5zIG5ldyBOZXBhbGlEYXRlKVxuICAgICAqL1xuICAgIGFkZFllYXJzKHllYXJzOiBudW1iZXIpOiBOZXBhbGlEYXRlIHtcbiAgICAgICAgY29uc3QgbmV3WWVhciA9IHRoaXMuX3llYXIgKyB5ZWFycztcbiAgICAgICAgY29uc3QgZGF5c0luTmV3TW9udGggPSBnZXREYXlzSW5CU01vbnRoKG5ld1llYXIsIHRoaXMuX21vbnRoKTtcbiAgICAgICAgY29uc3QgbmV3RGF5ID0gTWF0aC5taW4odGhpcy5fZGF5LCBkYXlzSW5OZXdNb250aCk7XG4gICAgICAgIHJldHVybiBuZXcgTmVwYWxpRGF0ZShuZXdZZWFyLCB0aGlzLl9tb250aCwgbmV3RGF5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAgICovXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCB0byBwbGFpbiBvYmplY3RcbiAgICAgKi9cbiAgICB0b09iamVjdCgpOiB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXIgfSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiB0aGlzLl95ZWFyLFxuICAgICAgICAgICAgbW9udGg6IHRoaXMuX21vbnRoLFxuICAgICAgICAgICAgZGF5OiB0aGlzLl9kYXksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGZyb20gcGxhaW4gb2JqZWN0XG4gICAgICovXG4gICAgc3RhdGljIGZyb21PYmplY3Qob2JqOiB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXIgfSk6IE5lcGFsaURhdGUge1xuICAgICAgICByZXR1cm4gbmV3IE5lcGFsaURhdGUob2JqLnllYXIsIG9iai5tb250aCwgb2JqLmRheSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyc2UgZnJvbSBzdHJpbmcgKFlZWVktTU0tREQgZm9ybWF0KVxuICAgICAqL1xuICAgIHN0YXRpYyBwYXJzZShkYXRlU3RyaW5nOiBzdHJpbmcpOiBOZXBhbGlEYXRlIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBkYXRlU3RyaW5nLnNwbGl0KCctJykubWFwKE51bWJlcik7XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDMgfHwgcGFydHMuc29tZShpc05hTikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRlIGZvcm1hdC4gRXhwZWN0ZWQgWVlZWS1NTS1ERCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgTmVwYWxpRGF0ZShwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdKTtcbiAgICB9XG59XG4iXX0=
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVwYWxpLWRhdGUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mMS1uZXBhbGktZGF0ZS1waWNrZXIvc3JjL2xpYi9tb2RlbHMvbmVwYWxpLWRhdGUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGdCQUFnQixFQUNoQixZQUFZLEVBQ1osWUFBWSxFQUNaLFdBQVcsRUFDWCxXQUFXLEVBQ1gsUUFBUSxFQUNSLFFBQVEsRUFDUixnQkFBZ0IsRUFDaEIsY0FBYyxHQUNqQixNQUFNLDJCQUEyQixDQUFDO0FBRW5DOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFLbkIsWUFBWSxJQUFZLEVBQUUsS0FBYSxFQUFFLEdBQVc7UUFDaEQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7SUFDcEIsQ0FBQztJQUVELFVBQVU7SUFDVixJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxHQUFHO1FBQ0gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFLO1FBQ1IsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQVk7UUFDdEIsNEJBQTRCO1FBQzVCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pHLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTVFLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRTtZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNyRDtRQUVELElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDM0IsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUM3QixJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBRXpCLFdBQVc7UUFDWCxPQUFPLFFBQVEsR0FBRyxDQUFDLEVBQUU7WUFDakIsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3RELE1BQU0sb0JBQW9CLEdBQUcsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUVqRCxJQUFJLFFBQVEsSUFBSSxvQkFBb0IsRUFBRTtnQkFDbEMsS0FBSyxJQUFJLFFBQVEsQ0FBQztnQkFDbEIsUUFBUSxHQUFHLENBQUMsQ0FBQzthQUNoQjtpQkFBTTtnQkFDSCxRQUFRLElBQUksb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLEVBQUUsQ0FBQztnQkFDVixLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUVWLElBQUksT0FBTyxHQUFHLEVBQUUsRUFBRTtvQkFDZCxPQUFPLEdBQUcsQ0FBQyxDQUFDO29CQUNaLE1BQU0sRUFBRSxDQUFDO29CQUNULElBQUksTUFBTSxHQUFHLFdBQVcsRUFBRTt3QkFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsV0FBVyxNQUFNLENBQUMsQ0FBQztxQkFDNUU7aUJBQ0o7YUFDSjtTQUNKO1FBRUQsT0FBTyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNILElBQUk7UUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUN6QztRQUVELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUVsQiw4QkFBOEI7UUFDOUIsS0FBSyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3RELE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLElBQUksUUFBUSxFQUFFO2dCQUNWLFNBQVMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM5RDtTQUNKO1FBRUQsK0NBQStDO1FBQy9DLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzlDLFNBQVMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3BEO1FBRUQscUJBQXFCO1FBQ3JCLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUUzQiwrQkFBK0I7UUFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFFN0MsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTztRQUNILG1CQUFtQjtRQUNuQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxFQUFFO1lBQ3RELE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsb0JBQW9CO1FBQ3BCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUU7WUFDckMsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxrQkFBa0I7UUFDbEIsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUQsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsRUFBRTtZQUMxQyxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZLENBQUMsT0FBb0IsSUFBSTtRQUNqQyxPQUFPLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxNQUFNLENBQUMsVUFBa0IsWUFBWSxFQUFFLGtCQUEyQixLQUFLO1FBQ25FLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUVyQixnRkFBZ0Y7UUFDaEYsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFbEQsNkRBQTZEO1FBQzdELE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMvQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFL0Msb0NBQW9DO1FBQ3BDLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyRSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWpELHdDQUF3QztRQUN4QyxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDcEQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXBELElBQUksZUFBZSxFQUFFO1lBQ2pCLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbkM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0QsT0FBTyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsS0FBaUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDNUIsT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUM7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5QztRQUNELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRLENBQUMsS0FBaUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQUMsS0FBaUI7UUFDckIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsS0FBaUI7UUFDcEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQUMsSUFBWTtRQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDeEMsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsQ0FBQyxNQUFjO1FBQ3BCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFcEMsT0FBTyxRQUFRLEdBQUcsRUFBRSxFQUFFO1lBQ2xCLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDZixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBQ0QsT0FBTyxRQUFRLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDZixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsNkNBQTZDO1FBQzdDLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFbkQsT0FBTyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVEsQ0FBQyxLQUFhO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25DLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNKLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ0osT0FBTztZQUNILElBQUksRUFBRSxJQUFJLENBQUMsS0FBSztZQUNoQixLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbEIsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2pCLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQWlEO1FBQy9ELE9BQU8sSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQWtCO1FBQzNCLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7U0FDL0Q7UUFDRCxPQUFPLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBCU19DQUxFTkRBUl9EQVRBLFxuICAgIEJTX01PTlRIU19FTixcbiAgICBCU19NT05USFNfTlAsXG4gICAgQlNfTUlOX1lFQVIsXG4gICAgQlNfTUFYX1lFQVIsXG4gICAgQURfRVBPQ0gsXG4gICAgQlNfRVBPQ0gsXG4gICAgZ2V0RGF5c0luQlNNb250aCxcbiAgICB0b05lcGFsaURpZ2l0cyxcbn0gZnJvbSAnLi4vdXRpbHMvYnMtY2FsZW5kYXItZGF0YSc7XG5cbi8qKlxuICogTmVwYWxpRGF0ZSAtIFJlcHJlc2VudHMgYSBkYXRlIGluIHRoZSBCaWtyYW0gU2FtYmF0IChCUykgY2FsZW5kYXJcbiAqL1xuZXhwb3J0IGNsYXNzIE5lcGFsaURhdGUge1xuICAgIHByaXZhdGUgX3llYXI6IG51bWJlcjtcbiAgICBwcml2YXRlIF9tb250aDogbnVtYmVyO1xuICAgIHByaXZhdGUgX2RheTogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBkYXk6IG51bWJlcikge1xuICAgICAgICB0aGlzLl95ZWFyID0geWVhcjtcbiAgICAgICAgdGhpcy5fbW9udGggPSBtb250aDtcbiAgICAgICAgdGhpcy5fZGF5ID0gZGF5O1xuICAgIH1cblxuICAgIC8vIEdldHRlcnNcbiAgICBnZXQgeWVhcigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5feWVhcjtcbiAgICB9XG5cbiAgICBnZXQgbW9udGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoO1xuICAgIH1cblxuICAgIGdldCBkYXkoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgTmVwYWxpRGF0ZSBmcm9tIGN1cnJlbnQgZGF0ZVxuICAgICAqL1xuICAgIHN0YXRpYyB0b2RheSgpOiBOZXBhbGlEYXRlIHtcbiAgICAgICAgcmV0dXJuIE5lcGFsaURhdGUuZnJvbUFEKG5ldyBEYXRlKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBOZXBhbGlEYXRlIGZyb20gQUQgRGF0ZVxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tQUQoYWREYXRlOiBEYXRlKTogTmVwYWxpRGF0ZSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBkYXlzIGZyb20gZXBvY2hcbiAgICAgICAgY29uc3QgZXBvY2hUaW1lID0gQURfRVBPQ0guZ2V0VGltZSgpO1xuICAgICAgICBjb25zdCB0YXJnZXRUaW1lID0gbmV3IERhdGUoYWREYXRlLmdldEZ1bGxZZWFyKCksIGFkRGF0ZS5nZXRNb250aCgpLCBhZERhdGUuZ2V0RGF0ZSgpKS5nZXRUaW1lKCk7XG4gICAgICAgIGxldCBkYXlzRGlmZiA9IE1hdGguZmxvb3IoKHRhcmdldFRpbWUgLSBlcG9jaFRpbWUpIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpKTtcblxuICAgICAgICBpZiAoZGF5c0RpZmYgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGUgaXMgYmVmb3JlIHN1cHBvcnRlZCByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGJzWWVhciA9IEJTX0VQT0NILnllYXI7XG4gICAgICAgIGxldCBic01vbnRoID0gQlNfRVBPQ0gubW9udGg7XG4gICAgICAgIGxldCBic0RheSA9IEJTX0VQT0NILmRheTtcblxuICAgICAgICAvLyBBZGQgZGF5c1xuICAgICAgICB3aGlsZSAoZGF5c0RpZmYgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBkYXlzSW5Nb250aCA9IGdldERheXNJbkJTTW9udGgoYnNZZWFyLCBic01vbnRoKTtcbiAgICAgICAgICAgIGNvbnN0IGRheXNSZW1haW5pbmdJbk1vbnRoID0gZGF5c0luTW9udGggLSBic0RheTtcblxuICAgICAgICAgICAgaWYgKGRheXNEaWZmIDw9IGRheXNSZW1haW5pbmdJbk1vbnRoKSB7XG4gICAgICAgICAgICAgICAgYnNEYXkgKz0gZGF5c0RpZmY7XG4gICAgICAgICAgICAgICAgZGF5c0RpZmYgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXlzRGlmZiAtPSBkYXlzUmVtYWluaW5nSW5Nb250aCArIDE7XG4gICAgICAgICAgICAgICAgYnNNb250aCsrO1xuICAgICAgICAgICAgICAgIGJzRGF5ID0gMTtcblxuICAgICAgICAgICAgICAgIGlmIChic01vbnRoID4gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgYnNNb250aCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGJzWWVhcisrO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnNZZWFyID4gQlNfTUFYX1lFQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRGF0ZSBleGNlZWRzIHN1cHBvcnRlZCByYW5nZSAobWF4OiAke0JTX01BWF9ZRUFSfSBCUylgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgTmVwYWxpRGF0ZShic1llYXIsIGJzTW9udGgsIGJzRGF5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IHRvIEFEIERhdGVcbiAgICAgKi9cbiAgICB0b0FEKCk6IERhdGUge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgTmVwYWxpRGF0ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRvdGFsRGF5cyA9IDA7XG5cbiAgICAgICAgLy8gQWRkIGRheXMgZm9yIGNvbXBsZXRlIHllYXJzXG4gICAgICAgIGZvciAobGV0IHllYXIgPSBCU19FUE9DSC55ZWFyOyB5ZWFyIDwgdGhpcy5feWVhcjsgeWVhcisrKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyRGF0YSA9IEJTX0NBTEVOREFSX0RBVEFbeWVhcl07XG4gICAgICAgICAgICBpZiAoeWVhckRhdGEpIHtcbiAgICAgICAgICAgICAgICB0b3RhbERheXMgKz0geWVhckRhdGEucmVkdWNlKChzdW0sIGRheXMpID0+IHN1bSArIGRheXMsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIGRheXMgZm9yIGNvbXBsZXRlIG1vbnRocyBpbiBjdXJyZW50IHllYXJcbiAgICAgICAgZm9yIChsZXQgbW9udGggPSAxOyBtb250aCA8IHRoaXMuX21vbnRoOyBtb250aCsrKSB7XG4gICAgICAgICAgICB0b3RhbERheXMgKz0gZ2V0RGF5c0luQlNNb250aCh0aGlzLl95ZWFyLCBtb250aCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgcmVtYWluaW5nIGRheXNcbiAgICAgICAgdG90YWxEYXlzICs9IHRoaXMuX2RheSAtIDE7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIEFEIGRhdGUgZnJvbSBlcG9jaFxuICAgICAgICBjb25zdCBhZERhdGUgPSBuZXcgRGF0ZShBRF9FUE9DSCk7XG4gICAgICAgIGFkRGF0ZS5zZXREYXRlKGFkRGF0ZS5nZXREYXRlKCkgKyB0b3RhbERheXMpO1xuXG4gICAgICAgIHJldHVybiBhZERhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGRhdGUgaXMgdmFsaWRcbiAgICAgKi9cbiAgICBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBDaGVjayB5ZWFyIHJhbmdlXG4gICAgICAgIGlmICh0aGlzLl95ZWFyIDwgQlNfTUlOX1lFQVIgfHwgdGhpcy5feWVhciA+IEJTX01BWF9ZRUFSKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBtb250aCByYW5nZVxuICAgICAgICBpZiAodGhpcy5fbW9udGggPCAxIHx8IHRoaXMuX21vbnRoID4gMTIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGRheSByYW5nZVxuICAgICAgICBjb25zdCBkYXlzSW5Nb250aCA9IGdldERheXNJbkJTTW9udGgodGhpcy5feWVhciwgdGhpcy5fbW9udGgpO1xuICAgICAgICBpZiAodGhpcy5fZGF5IDwgMSB8fCB0aGlzLl9kYXkgPiBkYXlzSW5Nb250aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBkYXkgb2Ygd2VlayAoMCA9IFN1bmRheSwgNiA9IFNhdHVyZGF5KVxuICAgICAqL1xuICAgIGdldERheSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50b0FEKCkuZ2V0RGF5KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IG1vbnRoIG5hbWUgaW4gc3BlY2lmaWVkIGxhbmd1YWdlXG4gICAgICovXG4gICAgZ2V0TW9udGhOYW1lKGxhbmc6ICdlbicgfCAnbnAnID0gJ2VuJyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBsYW5nID09PSAnbnAnID8gQlNfTU9OVEhTX05QW3RoaXMuX21vbnRoIC0gMV0gOiBCU19NT05USFNfRU5bdGhpcy5fbW9udGggLSAxXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3JtYXQgZGF0ZSBhY2NvcmRpbmcgdG8gcGF0dGVyblxuICAgICAqIFBhdHRlcm5zOlxuICAgICAqICAgWVlZWSAtIDQtZGlnaXQgeWVhclxuICAgICAqICAgWVkgICAtIDItZGlnaXQgeWVhclxuICAgICAqICAgTU0gICAtIDItZGlnaXQgbW9udGhcbiAgICAgKiAgIE0gICAgLSBtb250aCB3aXRob3V0IGxlYWRpbmcgemVyb1xuICAgICAqICAgREQgICAtIDItZGlnaXQgZGF5XG4gICAgICogICBEICAgIC0gZGF5IHdpdGhvdXQgbGVhZGluZyB6ZXJvXG4gICAgICogICBNTU1NIC0gZnVsbCBtb250aCBuYW1lIChFbmdsaXNoKVxuICAgICAqICAgbW1tbSAtIGZ1bGwgbW9udGggbmFtZSAoTmVwYWxpKVxuICAgICAqL1xuICAgIGZvcm1hdChwYXR0ZXJuOiBzdHJpbmcgPSAnWVlZWS1NTS1ERCcsIHVzZU5lcGFsaURpZ2l0czogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHBhdHRlcm47XG5cbiAgICAgICAgLy8gVXNlIHBsYWNlaG9sZGVycyB3aXRob3V0IE0vRC9ZIGNoYXJhY3RlcnMgdG8gcHJldmVudCByZWdleCByZXBsYWNlbWVudCBpc3N1ZXNcbiAgICAgICAgY29uc3QgbW9udGhOYW1lRW4gPSBCU19NT05USFNfRU5bdGhpcy5fbW9udGggLSAxXTtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lTnAgPSBCU19NT05USFNfTlBbdGhpcy5fbW9udGggLSAxXTtcblxuICAgICAgICAvLyBSZXBsYWNlIG1vbnRoIG5hbWUgcGF0dGVybnMgZmlyc3Qgd2l0aCB1bmlxdWUgcGxhY2Vob2xkZXJzXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9NTU1NL2csICdcXHgwMEVOXFx4MDAnKTtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL21tbW0vZywgJ1xceDAwTlBcXHgwMCcpO1xuXG4gICAgICAgIC8vIFJlcGxhY2UgeWVhciBhbmQgbnVtZXJpYyBwYXR0ZXJuc1xuICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvWVlZWS9nLCBTdHJpbmcodGhpcy5feWVhcikucGFkU3RhcnQoNCwgJzAnKSk7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9ZWS9nLCBTdHJpbmcodGhpcy5feWVhcikuc2xpY2UoLTIpKTtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL01NL2csIFN0cmluZyh0aGlzLl9tb250aCkucGFkU3RhcnQoMiwgJzAnKSk7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9NL2csIFN0cmluZyh0aGlzLl9tb250aCkpO1xuICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvREQvZywgU3RyaW5nKHRoaXMuX2RheSkucGFkU3RhcnQoMiwgJzAnKSk7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9EL2csIFN0cmluZyh0aGlzLl9kYXkpKTtcblxuICAgICAgICAvLyBSZXN0b3JlIG1vbnRoIG5hbWVzIGZyb20gcGxhY2Vob2xkZXJzXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9cXHgwMEVOXFx4MDAvZywgbW9udGhOYW1lRW4pO1xuICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXFx4MDBOUFxceDAwL2csIG1vbnRoTmFtZU5wKTtcblxuICAgICAgICBpZiAodXNlTmVwYWxpRGlnaXRzKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0b05lcGFsaURpZ2l0cyhyZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIGRhdGVcbiAgICAgKi9cbiAgICBjbG9uZSgpOiBOZXBhbGlEYXRlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOZXBhbGlEYXRlKHRoaXMuX3llYXIsIHRoaXMuX21vbnRoLCB0aGlzLl9kYXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXBhcmUgd2l0aCBhbm90aGVyIE5lcGFsaURhdGVcbiAgICAgKiBSZXR1cm5zOiAtMSBpZiB0aGlzIDwgb3RoZXIsIDAgaWYgZXF1YWwsIDEgaWYgdGhpcyA+IG90aGVyXG4gICAgICovXG4gICAgY29tcGFyZVRvKG90aGVyOiBOZXBhbGlEYXRlKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuX3llYXIgIT09IG90aGVyLl95ZWFyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5feWVhciA8IG90aGVyLl95ZWFyID8gLTEgOiAxO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9tb250aCAhPT0gb3RoZXIuX21vbnRoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGggPCBvdGhlci5fbW9udGggPyAtMSA6IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2RheSAhPT0gb3RoZXIuX2RheSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RheSA8IG90aGVyLl9kYXkgPyAtMSA6IDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhpcyBkYXRlIGlzIGJlZm9yZSBhbm90aGVyXG4gICAgICovXG4gICAgaXNCZWZvcmUob3RoZXI6IE5lcGFsaURhdGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZVRvKG90aGVyKSA8IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhpcyBkYXRlIGlzIGFmdGVyIGFub3RoZXJcbiAgICAgKi9cbiAgICBpc0FmdGVyKG90aGVyOiBOZXBhbGlEYXRlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVUbyhvdGhlcikgPiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoaXMgZGF0ZSBlcXVhbHMgYW5vdGhlclxuICAgICAqL1xuICAgIGVxdWFscyhvdGhlcjogTmVwYWxpRGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlVG8ob3RoZXIpID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBkYXlzIHRvIGRhdGUgKHJldHVybnMgbmV3IE5lcGFsaURhdGUpXG4gICAgICovXG4gICAgYWRkRGF5cyhkYXlzOiBudW1iZXIpOiBOZXBhbGlEYXRlIHtcbiAgICAgICAgY29uc3QgYWREYXRlID0gdGhpcy50b0FEKCk7XG4gICAgICAgIGFkRGF0ZS5zZXREYXRlKGFkRGF0ZS5nZXREYXRlKCkgKyBkYXlzKTtcbiAgICAgICAgcmV0dXJuIE5lcGFsaURhdGUuZnJvbUFEKGFkRGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIG1vbnRocyB0byBkYXRlIChyZXR1cm5zIG5ldyBOZXBhbGlEYXRlKVxuICAgICAqL1xuICAgIGFkZE1vbnRocyhtb250aHM6IG51bWJlcik6IE5lcGFsaURhdGUge1xuICAgICAgICBsZXQgbmV3WWVhciA9IHRoaXMuX3llYXI7XG4gICAgICAgIGxldCBuZXdNb250aCA9IHRoaXMuX21vbnRoICsgbW9udGhzO1xuXG4gICAgICAgIHdoaWxlIChuZXdNb250aCA+IDEyKSB7XG4gICAgICAgICAgICBuZXdNb250aCAtPSAxMjtcbiAgICAgICAgICAgIG5ld1llYXIrKztcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAobmV3TW9udGggPCAxKSB7XG4gICAgICAgICAgICBuZXdNb250aCArPSAxMjtcbiAgICAgICAgICAgIG5ld1llYXItLTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkanVzdCBkYXkgaWYgaXQgZXhjZWVkcyBkYXlzIGluIG5ldyBtb250aFxuICAgICAgICBjb25zdCBkYXlzSW5OZXdNb250aCA9IGdldERheXNJbkJTTW9udGgobmV3WWVhciwgbmV3TW9udGgpO1xuICAgICAgICBjb25zdCBuZXdEYXkgPSBNYXRoLm1pbih0aGlzLl9kYXksIGRheXNJbk5ld01vbnRoKTtcblxuICAgICAgICByZXR1cm4gbmV3IE5lcGFsaURhdGUobmV3WWVhciwgbmV3TW9udGgsIG5ld0RheSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIHllYXJzIHRvIGRhdGUgKHJldHVybnMgbmV3IE5lcGFsaURhdGUpXG4gICAgICovXG4gICAgYWRkWWVhcnMoeWVhcnM6IG51bWJlcik6IE5lcGFsaURhdGUge1xuICAgICAgICBjb25zdCBuZXdZZWFyID0gdGhpcy5feWVhciArIHllYXJzO1xuICAgICAgICBjb25zdCBkYXlzSW5OZXdNb250aCA9IGdldERheXNJbkJTTW9udGgobmV3WWVhciwgdGhpcy5fbW9udGgpO1xuICAgICAgICBjb25zdCBuZXdEYXkgPSBNYXRoLm1pbih0aGlzLl9kYXksIGRheXNJbk5ld01vbnRoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBOZXBhbGlEYXRlKG5ld1llYXIsIHRoaXMuX21vbnRoLCBuZXdEYXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IHRvIHBsYWluIG9iamVjdFxuICAgICAqL1xuICAgIHRvT2JqZWN0KCk6IHsgeWVhcjogbnVtYmVyOyBtb250aDogbnVtYmVyOyBkYXk6IG51bWJlciB9IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXI6IHRoaXMuX3llYXIsXG4gICAgICAgICAgICBtb250aDogdGhpcy5fbW9udGgsXG4gICAgICAgICAgICBkYXk6IHRoaXMuX2RheSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgZnJvbSBwbGFpbiBvYmplY3RcbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbU9iamVjdChvYmo6IHsgeWVhcjogbnVtYmVyOyBtb250aDogbnVtYmVyOyBkYXk6IG51bWJlciB9KTogTmVwYWxpRGF0ZSB7XG4gICAgICAgIHJldHVybiBuZXcgTmVwYWxpRGF0ZShvYmoueWVhciwgb2JqLm1vbnRoLCBvYmouZGF5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZSBmcm9tIHN0cmluZyAoWVlZWS1NTS1ERCBmb3JtYXQpXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlKGRhdGVTdHJpbmc6IHN0cmluZyk6IE5lcGFsaURhdGUge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGRhdGVTdHJpbmcuc3BsaXQoJy0nKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMyB8fCBwYXJ0cy5zb21lKGlzTmFOKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGUgZm9ybWF0LiBFeHBlY3RlZCBZWVlZLU1NLUREJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBOZXBhbGlEYXRlKHBhcnRzWzBdLCBwYXJ0c1sxXSwgcGFydHNbMl0pO1xuICAgIH1cbn1cbiJdfQ==