primekit 1.0.5 → 1.0.7

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.
@@ -600,11 +600,11 @@ export class AtomixDaterangeCalendarComponent {
600
600
  return Array.from(new Set(calEls));
601
601
  }
602
602
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AtomixDaterangeCalendarComponent, deps: [{ token: i1.DatePipe }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
603
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AtomixDaterangeCalendarComponent, selector: "atomix-daterange-calendar", inputs: { placeholder: "placeholder", styleClass: "styleClass", selectionMode: "selectionMode", inputStyleClass: "inputStyleClass", inline: "inline", disabled: "disabled", selectedDate: "selectedDate", maxDate: "maxDate", minDate: "minDate", defaultPreset: "defaultPreset", preservePreset: "preservePreset" }, outputs: { dateRangeChange: "dateRangeChange" }, viewQueries: [{ propertyName: "overlayPanel", first: true, predicate: ["overlayPanel"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div>\n <ng-container *ngIf=\"!inline; else inlineBlock\">\n <div [ngClass]=\"styleClass\" class=\"input-wrapper\">\n <input\n pInputText\n type=\"text\"\n [ngClass]=\"inputStyleClass\"\n [placeholder]=\"placeholder\"\n [value]=\"getDateRangeLabel()\"\n readonly\n [disabled]=\"disabled\"\n (click)=\"overlayPanel?.toggle($event)\"\n (keydown)=\"onInputKeyDown($event)\"\n />\n <i class=\"pi pi-calendar input-icon\" title=\"Open calendar\" (click)=\"overlayPanel?.toggle($event)\"></i>\n <i *ngIf=\"hasSelection\" class=\"pi pi-times input-clear-icon\" title=\"Clear\" tabindex=\"0\" (click)=\"clearAndStop($event)\" (keydown.enter)=\"clearAndStop($event)\" (keydown.space)=\"clearAndStop($event)\"></i>\n\n </div>\n\n <p-overlayPanel #overlayPanel [dismissable]=\"true\" appendTo=\"body\" styleClass=\"atomix-date-range-overlay\" (onShow)=\"onOverlayShow()\" (onHide)=\"onOverlayHide()\">\n <div class=\"overlay-inner\">\n <div class=\"overlay-left\">\n <div class=\"preset-list\">\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('today')\" [ngClass]=\"{ 'active': selectedPreset === 'today' }\" label=\"Today\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('yesterday')\" [ngClass]=\"{ 'active': selectedPreset === 'yesterday' }\" label=\"Yesterday\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last7days')\" [ngClass]=\"{ 'active': selectedPreset === 'last7days' }\" label=\"Last 7 days\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last30days')\" [ngClass]=\"{ 'active': selectedPreset === 'last30days' }\" label=\"Last 30 days\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last3months')\" [ngClass]=\"{ 'active': selectedPreset === 'last3months' }\" label=\"Last 3 months\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last6months')\" [ngClass]=\"{ 'active': selectedPreset === 'last6months' }\" label=\"Last 6 months\"></button>\n <a class=\"reset-link\" (click)=\"resetAndClose()\">Reset</a>\n </div>\n </div>\n <div class=\"overlay-right\">\n <p-calendar [(ngModel)]=\"modelDate\" [selectionMode]=\"'range'\" [inline]=\"true\" [dateFormat]=\"'mm/dd/yyyy'\" [showOtherMonths]=\"true\" [locale]=\"enLocale\" [showIcon]=\"false\" [styleClass]=\"'atomix-overlay-calendar'\" (ngModelChange)=\"onModelChange($event)\" (onMonthChange)=\"onCalendarViewChanged($event)\" (onYearChange)=\"onCalendarViewChanged($event)\" [disabled]=\"disabled\" [maxDate]=\"maxDate\" [minDate]=\"minDate\"></p-calendar>\n </div>\n </div>\n </p-overlayPanel>\n </ng-container>\n\n <ng-template #inlineBlock>\n <div [ngClass]=\"styleClass\" class=\"input-wrapper\">\n <input\n pInputText\n type=\"text\"\n [ngClass]=\"inputStyleClass\"\n [placeholder]=\"placeholder\"\n [value]=\"getDateRangeLabel()\"\n readonly\n [disabled]=\"disabled\"\n (keydown)=\"onInputKeyDown($event)\"\n />\n <i class=\"pi pi-calendar input-icon\" title=\"Open calendar\"></i>\n <i *ngIf=\"hasSelection\" class=\"pi pi-times input-clear-icon\" title=\"Clear\" tabindex=\"0\" (click)=\"clearAndStop($event)\" (keydown.enter)=\"clearAndStop($event)\" (keydown.space)=\"clearAndStop($event)\"></i>\n </div>\n <div class=\"overlay-inner inline-calendar flex\">\n <div class=\"overlay-left\">\n <div class=\"preset-list\">\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('today')\" [ngClass]=\"{ 'active': selectedPreset === 'today' }\" label=\"Today\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('yesterday')\" [ngClass]=\"{ 'active': selectedPreset === 'yesterday' }\" label=\"Yesterday\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last7days')\" [ngClass]=\"{ 'active': selectedPreset === 'last7days' }\" label=\"Last 7 days\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last30days')\" [ngClass]=\"{ 'active': selectedPreset === 'last30days' }\" label=\"Last 30 days\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last3months')\" [ngClass]=\"{ 'active': selectedPreset === 'last3months' }\" label=\"Last 3 months\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last6months')\" [ngClass]=\"{ 'active': selectedPreset === 'last6months' }\" label=\"Last 6 months\"></button>\n <a class=\"reset-link\" (click)=\"resetAndClose()\">Reset</a>\n </div>\n </div>\n <div class=\"overlay-right\">\n <p-calendar [(ngModel)]=\"modelDate\" [selectionMode]=\"'range'\" [inline]=\"true\" [dateFormat]=\"'mm/dd/yyyy'\" [showOtherMonths]=\"true\" [locale]=\"enLocale\" [showIcon]=\"false\" [styleClass]=\"'atomix-overlay-calendar'\" (ngModelChange)=\"onModelChange($event)\" (onMonthChange)=\"onCalendarViewChanged($event)\" (onYearChange)=\"onCalendarViewChanged($event)\" [disabled]=\"disabled\" [maxDate]=\"maxDate\" [minDate]=\"minDate\"></p-calendar>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: ["::ng-deep .p-calendar button{background-color:transparent!important}::ng-deep .p-overlaypanel .p-overlaypanel-content{margin-top:0!important}::ng-deep .p-datepicker{border:none!important;border-radius:var(--global-border-radius)}::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month{color:#63b77e;transition:background-color .2s,color .2s,box-shadow .2s;font-weight:600;padding:.5rem}::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year,::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month{color:#63b77e;transition:background-color .2s,color .2s,box-shadow .2s;font-weight:600;padding:.5rem}::ng-deep .p-datepicker .p-monthpicker .p-monthpicker-month.p-highlight{color:#fff;background:#63c984;padding:1rem!important}::ng-deep .p-datepicker .p-monthpicker .p-monthpicker-month{padding:1rem!important}::ng-deep .p-datepicker .p-yearpicker .p-yearpicker-year.p-highlight{color:#fff;background:#63b77e;padding:1rem!important}::ng-deep .p-datepicker .p-yearpicker .p-yearpicker-year{padding:1rem!important}::ng-deep .p-datepicker table th{border-bottom:1px solid rgba(0,0,0,.12);color:var(--text-gray-700);font-weight:400;font-size:.875rem}::ng-deep .p-datepicker table td>span.p-highlight{color:#fff;background:#63c984}::ng-deep .p-datepicker table td{padding:.2rem 0}::ng-deep .p-datepicker table td>span{width:2.8rem;height:2.8rem;border-radius:0%;transition:none}::ng-deep .p-datepicker table td.p-datepicker-today>span{box-shadow:inset 0 0 0 2px #00000061}::ng-deep .p-datepicker table td>span.p-highlight.start-range{border-top-left-radius:10px;border-bottom-left-radius:10px}::ng-deep .p-datepicker table td>span.p-highlight.end-range{border-top-right-radius:10px;border-bottom-right-radius:10px}::ng-deep .p-datepicker table td>span.p-highlight.between-range{background:#00c37dad!important}::ng-deep .p-monthpicker-month{width:50%!important}::ng-deep .p-yearpicker-year{width:50%!important}::ng-deep .inline-calendar .p-datepicker table td>span{width:2.4rem;height:2.4rem}::ng-deep .inline-calendar{border-bottom:1px solid #e5e5e5}::ng-deep .atomix-date-range-overlay{border-radius:var(--global-border-radius)}.overlay-inner{display:flex;gap:1rem;align-items:flex-start;flex-wrap:nowrap}.overlay-left{padding:.75rem .75rem 2rem;text-align:center;border-right:1px solid #e5e5e5}.inline-calendar .overlay-left{padding-bottom:2rem}.input-wrapper{display:flex;align-items:center;gap:.5rem;position:relative}.input-wrapper input[readonly]{cursor:pointer;padding-right:40px!important;border-radius:var(--global-border-radius)}.input-wrapper input{color:#000000de}.input-wrapper input::placeholder{color:#0009}.input-icon{cursor:pointer;color:var(--primary-text-color)!important;position:absolute;right:10px}.input-clear-icon{cursor:pointer;color:var(--primary-text-color)!important;position:absolute;right:27px}.preset-list{display:flex;flex-direction:column;gap:0}.preset-btn{justify-content:flex-start;text-align:left;padding-left:8px}.inline-calendar .preset-btn{padding:.3rem .8rem!important}.inline-calendar{gap:0}.preset-btn .p-button-label{display:inline-block}.preset-btn:not(.p-button-outlined){background-color:transparent;color:var(--text-gray-700)}.preset-btn:hover{background-color:#63b77e}.preset-btn.active,.preset-btn.p-button.active,.preset-btn.custom-active,.preset-btn.p-button.custom-active{background-color:#63b77e!important;color:#fff!important;font-weight:700;line-height:17px;border-radius:12px}.reset-link{text-align:left;cursor:pointer;margin-top:25px;padding:.3rem 1.4rem!important;color:#63b77e;font-weight:600}.atomix-date-range-overlay .overlay-left .reset-link{display:inline-block;margin-top:1rem;color:#2196f3;cursor:pointer}.overlay-right{flex:1;width:230px;max-width:230px}.overlay-inner.inline{flex-direction:row}:host ::ng-deep .p-column-filter-menu .overlay-inner.inline{display:flex!important;flex-direction:row!important;flex-wrap:nowrap!important}:host ::ng-deep .p-overlaypanel .overlay-inner.inline{display:flex!important;flex-direction:row!important}.overlay-actions{display:flex;gap:.5rem;justify-content:flex-end;margin-top:.5rem}.atomix-overlay-calendar ::ng-deep .p-datepicker{width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i3.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i4.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "component", type: i5.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
603
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AtomixDaterangeCalendarComponent, selector: "atomix-daterange-calendar", inputs: { placeholder: "placeholder", styleClass: "styleClass", selectionMode: "selectionMode", inputStyleClass: "inputStyleClass", inline: "inline", disabled: "disabled", selectedDate: "selectedDate", maxDate: "maxDate", minDate: "minDate", defaultPreset: "defaultPreset", preservePreset: "preservePreset" }, outputs: { dateRangeChange: "dateRangeChange" }, viewQueries: [{ propertyName: "overlayPanel", first: true, predicate: ["overlayPanel"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div>\n <ng-container *ngIf=\"!inline; else inlineBlock\">\n <div [ngClass]=\"styleClass\" class=\"input-wrapper\">\n <input\n pInputText\n type=\"text\"\n [ngClass]=\"inputStyleClass\"\n [placeholder]=\"placeholder\"\n [value]=\"getDateRangeLabel()\"\n readonly\n [disabled]=\"disabled\"\n (click)=\"overlayPanel?.toggle($event)\"\n (keydown)=\"onInputKeyDown($event)\"\n />\n <i class=\"pi pi-calendar input-icon\" title=\"Open calendar\" (click)=\"!disabled && overlayPanel?.toggle($event)\"></i>\n <i *ngIf=\"hasSelection\" class=\"pi pi-times input-clear-icon\" title=\"Clear\" tabindex=\"0\" (click)=\"!disabled && clearAndStop($event)\" (keydown.enter)=\"!disabled && clearAndStop($event)\" (keydown.space)=\"!disabled && clearAndStop($event)\"></i>\n\n </div>\n\n <p-overlayPanel #overlayPanel [dismissable]=\"true\" appendTo=\"body\" styleClass=\"atomix-date-range-overlay\" (onShow)=\"onOverlayShow()\" (onHide)=\"onOverlayHide()\">\n <div class=\"overlay-inner\">\n <div class=\"overlay-left\">\n <div class=\"preset-list\">\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('today')\" [ngClass]=\"{ 'active': selectedPreset === 'today' }\" label=\"Today\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('yesterday')\" [ngClass]=\"{ 'active': selectedPreset === 'yesterday' }\" label=\"Yesterday\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last7days')\" [ngClass]=\"{ 'active': selectedPreset === 'last7days' }\" label=\"Last 7 days\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last30days')\" [ngClass]=\"{ 'active': selectedPreset === 'last30days' }\" label=\"Last 30 days\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last3months')\" [ngClass]=\"{ 'active': selectedPreset === 'last3months' }\" label=\"Last 3 months\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last6months')\" [ngClass]=\"{ 'active': selectedPreset === 'last6months' }\" label=\"Last 6 months\"></button>\n <a class=\"reset-link\" (click)=\"resetAndClose()\">Reset</a>\n </div>\n </div>\n <div class=\"overlay-right\">\n <p-calendar [(ngModel)]=\"modelDate\" [selectionMode]=\"'range'\" [inline]=\"true\" [dateFormat]=\"'mm/dd/yyyy'\" [showOtherMonths]=\"true\" [locale]=\"enLocale\" [showIcon]=\"false\" [styleClass]=\"'atomix-overlay-calendar'\" (ngModelChange)=\"onModelChange($event)\" (onMonthChange)=\"onCalendarViewChanged($event)\" (onYearChange)=\"onCalendarViewChanged($event)\" [disabled]=\"disabled\" [maxDate]=\"maxDate\" [minDate]=\"minDate\"></p-calendar>\n </div>\n </div>\n </p-overlayPanel>\n </ng-container>\n\n <ng-template #inlineBlock>\n <div [ngClass]=\"styleClass\" class=\"input-wrapper\">\n <input\n pInputText\n type=\"text\"\n [ngClass]=\"inputStyleClass\"\n [placeholder]=\"placeholder\"\n [value]=\"getDateRangeLabel()\"\n readonly\n [disabled]=\"disabled\"\n (keydown)=\"onInputKeyDown($event)\"\n />\n <i class=\"pi pi-calendar input-icon\" title=\"Open calendar\"></i>\n <i *ngIf=\"hasSelection\" class=\"pi pi-times input-clear-icon\" title=\"Clear\" tabindex=\"0\" (click)=\"clearAndStop($event)\" (keydown.enter)=\"clearAndStop($event)\" (keydown.space)=\"clearAndStop($event)\"></i>\n </div>\n <div class=\"overlay-inner inline-calendar flex\">\n <div class=\"overlay-left\">\n <div class=\"preset-list\">\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('today')\" [ngClass]=\"{ 'active': selectedPreset === 'today' }\" label=\"Today\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('yesterday')\" [ngClass]=\"{ 'active': selectedPreset === 'yesterday' }\" label=\"Yesterday\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last7days')\" [ngClass]=\"{ 'active': selectedPreset === 'last7days' }\" label=\"Last 7 days\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last30days')\" [ngClass]=\"{ 'active': selectedPreset === 'last30days' }\" label=\"Last 30 days\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last3months')\" [ngClass]=\"{ 'active': selectedPreset === 'last3months' }\" label=\"Last 3 months\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last6months')\" [ngClass]=\"{ 'active': selectedPreset === 'last6months' }\" label=\"Last 6 months\"></button>\n <a class=\"reset-link\" (click)=\"resetAndClose()\">Reset</a>\n </div>\n </div>\n <div class=\"overlay-right\">\n <p-calendar [(ngModel)]=\"modelDate\" [selectionMode]=\"'range'\" [inline]=\"true\" [dateFormat]=\"'mm/dd/yyyy'\" [showOtherMonths]=\"true\" [locale]=\"enLocale\" [showIcon]=\"false\" [styleClass]=\"'atomix-overlay-calendar'\" (ngModelChange)=\"onModelChange($event)\" (onMonthChange)=\"onCalendarViewChanged($event)\" (onYearChange)=\"onCalendarViewChanged($event)\" [disabled]=\"disabled\" [maxDate]=\"maxDate\" [minDate]=\"minDate\"></p-calendar>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: ["::ng-deep .p-calendar button{background-color:transparent!important}::ng-deep .p-overlaypanel .p-overlaypanel-content{margin-top:0!important}::ng-deep .p-datepicker{border:none!important;border-radius:var(--global-border-radius)}::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month{color:#63b77e;transition:background-color .2s,color .2s,box-shadow .2s;font-weight:600;padding:.5rem}::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year,::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month{color:#63b77e;transition:background-color .2s,color .2s,box-shadow .2s;font-weight:600;padding:.5rem}::ng-deep .p-datepicker .p-monthpicker .p-monthpicker-month.p-highlight{color:#fff;background:#63c984;padding:1rem!important}::ng-deep .p-datepicker .p-monthpicker .p-monthpicker-month{padding:1rem!important}::ng-deep .p-datepicker .p-yearpicker .p-yearpicker-year.p-highlight{color:#fff;background:#63b77e;padding:1rem!important}::ng-deep .p-datepicker .p-yearpicker .p-yearpicker-year{padding:1rem!important}::ng-deep .p-datepicker table th{border-bottom:1px solid rgba(0,0,0,.12);color:var(--text-gray-700);font-weight:400;font-size:.875rem}::ng-deep .p-datepicker table td>span.p-highlight{color:#fff;background:#63c984}::ng-deep .p-datepicker table td{padding:.2rem 0}::ng-deep .p-datepicker table td>span{width:2.8rem;height:2.8rem;border-radius:0%;transition:none}::ng-deep .p-datepicker table td.p-datepicker-today>span{box-shadow:inset 0 0 0 2px #00000061}::ng-deep .p-datepicker table td>span.p-highlight.start-range{border-top-left-radius:10px;border-bottom-left-radius:10px}::ng-deep .p-datepicker table td>span.p-highlight.end-range{border-top-right-radius:10px;border-bottom-right-radius:10px}::ng-deep .p-datepicker table td>span.p-highlight.between-range{background:#00c37dad!important}::ng-deep .p-monthpicker-month{width:50%!important}::ng-deep .p-yearpicker-year{width:50%!important}::ng-deep .inline-calendar .p-datepicker table td>span{width:2.4rem;height:2.4rem}::ng-deep .inline-calendar{border-bottom:1px solid #e5e5e5}::ng-deep .atomix-date-range-overlay{border-radius:var(--global-border-radius)}.overlay-inner{display:flex;gap:1rem;align-items:flex-start;flex-wrap:nowrap}.overlay-left{padding:.75rem .75rem 2rem;text-align:center;border-right:1px solid #e5e5e5}.inline-calendar .overlay-left{padding-bottom:2rem}.input-wrapper{display:flex;align-items:center;gap:.5rem;position:relative}.input-wrapper input[readonly]{cursor:pointer;padding-right:40px!important;border-radius:var(--global-border-radius)}.input-wrapper input{color:#000000de}.input-wrapper input::placeholder{color:#0009}.input-icon{cursor:pointer;color:var(--primary-text-color)!important;position:absolute;right:10px}.input-clear-icon{cursor:pointer;color:var(--primary-text-color)!important;position:absolute;right:27px}.preset-list{display:flex;flex-direction:column;gap:0}.preset-btn{justify-content:flex-start;text-align:left;padding-left:8px}.inline-calendar .preset-btn{padding:.3rem .8rem!important}.inline-calendar{gap:0}.preset-btn .p-button-label{display:inline-block}.preset-btn:not(.p-button-outlined){background-color:transparent;color:var(--text-gray-700)}.preset-btn:hover{background-color:#63b77e}.preset-btn.active,.preset-btn.p-button.active,.preset-btn.custom-active,.preset-btn.p-button.custom-active{background-color:#63b77e!important;color:#fff!important;font-weight:700;line-height:17px;border-radius:12px}.reset-link{text-align:left;cursor:pointer;margin-top:25px;padding:.3rem 1.4rem!important;color:#63b77e;font-weight:600}.atomix-date-range-overlay .overlay-left .reset-link{display:inline-block;margin-top:1rem;color:#2196f3;cursor:pointer}.overlay-right{flex:1;width:230px;max-width:230px}.overlay-inner.inline{flex-direction:row}:host ::ng-deep .p-column-filter-menu .overlay-inner.inline{display:flex!important;flex-direction:row!important;flex-wrap:nowrap!important}:host ::ng-deep .p-overlaypanel .overlay-inner.inline{display:flex!important;flex-direction:row!important}.overlay-actions{display:flex;gap:.5rem;justify-content:flex-end;margin-top:.5rem}.atomix-overlay-calendar ::ng-deep .p-datepicker{width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i3.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i4.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "component", type: i5.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
604
604
  }
605
605
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AtomixDaterangeCalendarComponent, decorators: [{
606
606
  type: Component,
607
- args: [{ selector: 'atomix-daterange-calendar', template: "<div>\n <ng-container *ngIf=\"!inline; else inlineBlock\">\n <div [ngClass]=\"styleClass\" class=\"input-wrapper\">\n <input\n pInputText\n type=\"text\"\n [ngClass]=\"inputStyleClass\"\n [placeholder]=\"placeholder\"\n [value]=\"getDateRangeLabel()\"\n readonly\n [disabled]=\"disabled\"\n (click)=\"overlayPanel?.toggle($event)\"\n (keydown)=\"onInputKeyDown($event)\"\n />\n <i class=\"pi pi-calendar input-icon\" title=\"Open calendar\" (click)=\"overlayPanel?.toggle($event)\"></i>\n <i *ngIf=\"hasSelection\" class=\"pi pi-times input-clear-icon\" title=\"Clear\" tabindex=\"0\" (click)=\"clearAndStop($event)\" (keydown.enter)=\"clearAndStop($event)\" (keydown.space)=\"clearAndStop($event)\"></i>\n\n </div>\n\n <p-overlayPanel #overlayPanel [dismissable]=\"true\" appendTo=\"body\" styleClass=\"atomix-date-range-overlay\" (onShow)=\"onOverlayShow()\" (onHide)=\"onOverlayHide()\">\n <div class=\"overlay-inner\">\n <div class=\"overlay-left\">\n <div class=\"preset-list\">\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('today')\" [ngClass]=\"{ 'active': selectedPreset === 'today' }\" label=\"Today\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('yesterday')\" [ngClass]=\"{ 'active': selectedPreset === 'yesterday' }\" label=\"Yesterday\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last7days')\" [ngClass]=\"{ 'active': selectedPreset === 'last7days' }\" label=\"Last 7 days\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last30days')\" [ngClass]=\"{ 'active': selectedPreset === 'last30days' }\" label=\"Last 30 days\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last3months')\" [ngClass]=\"{ 'active': selectedPreset === 'last3months' }\" label=\"Last 3 months\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last6months')\" [ngClass]=\"{ 'active': selectedPreset === 'last6months' }\" label=\"Last 6 months\"></button>\n <a class=\"reset-link\" (click)=\"resetAndClose()\">Reset</a>\n </div>\n </div>\n <div class=\"overlay-right\">\n <p-calendar [(ngModel)]=\"modelDate\" [selectionMode]=\"'range'\" [inline]=\"true\" [dateFormat]=\"'mm/dd/yyyy'\" [showOtherMonths]=\"true\" [locale]=\"enLocale\" [showIcon]=\"false\" [styleClass]=\"'atomix-overlay-calendar'\" (ngModelChange)=\"onModelChange($event)\" (onMonthChange)=\"onCalendarViewChanged($event)\" (onYearChange)=\"onCalendarViewChanged($event)\" [disabled]=\"disabled\" [maxDate]=\"maxDate\" [minDate]=\"minDate\"></p-calendar>\n </div>\n </div>\n </p-overlayPanel>\n </ng-container>\n\n <ng-template #inlineBlock>\n <div [ngClass]=\"styleClass\" class=\"input-wrapper\">\n <input\n pInputText\n type=\"text\"\n [ngClass]=\"inputStyleClass\"\n [placeholder]=\"placeholder\"\n [value]=\"getDateRangeLabel()\"\n readonly\n [disabled]=\"disabled\"\n (keydown)=\"onInputKeyDown($event)\"\n />\n <i class=\"pi pi-calendar input-icon\" title=\"Open calendar\"></i>\n <i *ngIf=\"hasSelection\" class=\"pi pi-times input-clear-icon\" title=\"Clear\" tabindex=\"0\" (click)=\"clearAndStop($event)\" (keydown.enter)=\"clearAndStop($event)\" (keydown.space)=\"clearAndStop($event)\"></i>\n </div>\n <div class=\"overlay-inner inline-calendar flex\">\n <div class=\"overlay-left\">\n <div class=\"preset-list\">\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('today')\" [ngClass]=\"{ 'active': selectedPreset === 'today' }\" label=\"Today\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('yesterday')\" [ngClass]=\"{ 'active': selectedPreset === 'yesterday' }\" label=\"Yesterday\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last7days')\" [ngClass]=\"{ 'active': selectedPreset === 'last7days' }\" label=\"Last 7 days\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last30days')\" [ngClass]=\"{ 'active': selectedPreset === 'last30days' }\" label=\"Last 30 days\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last3months')\" [ngClass]=\"{ 'active': selectedPreset === 'last3months' }\" label=\"Last 3 months\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last6months')\" [ngClass]=\"{ 'active': selectedPreset === 'last6months' }\" label=\"Last 6 months\"></button>\n <a class=\"reset-link\" (click)=\"resetAndClose()\">Reset</a>\n </div>\n </div>\n <div class=\"overlay-right\">\n <p-calendar [(ngModel)]=\"modelDate\" [selectionMode]=\"'range'\" [inline]=\"true\" [dateFormat]=\"'mm/dd/yyyy'\" [showOtherMonths]=\"true\" [locale]=\"enLocale\" [showIcon]=\"false\" [styleClass]=\"'atomix-overlay-calendar'\" (ngModelChange)=\"onModelChange($event)\" (onMonthChange)=\"onCalendarViewChanged($event)\" (onYearChange)=\"onCalendarViewChanged($event)\" [disabled]=\"disabled\" [maxDate]=\"maxDate\" [minDate]=\"minDate\"></p-calendar>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: ["::ng-deep .p-calendar button{background-color:transparent!important}::ng-deep .p-overlaypanel .p-overlaypanel-content{margin-top:0!important}::ng-deep .p-datepicker{border:none!important;border-radius:var(--global-border-radius)}::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month{color:#63b77e;transition:background-color .2s,color .2s,box-shadow .2s;font-weight:600;padding:.5rem}::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year,::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month{color:#63b77e;transition:background-color .2s,color .2s,box-shadow .2s;font-weight:600;padding:.5rem}::ng-deep .p-datepicker .p-monthpicker .p-monthpicker-month.p-highlight{color:#fff;background:#63c984;padding:1rem!important}::ng-deep .p-datepicker .p-monthpicker .p-monthpicker-month{padding:1rem!important}::ng-deep .p-datepicker .p-yearpicker .p-yearpicker-year.p-highlight{color:#fff;background:#63b77e;padding:1rem!important}::ng-deep .p-datepicker .p-yearpicker .p-yearpicker-year{padding:1rem!important}::ng-deep .p-datepicker table th{border-bottom:1px solid rgba(0,0,0,.12);color:var(--text-gray-700);font-weight:400;font-size:.875rem}::ng-deep .p-datepicker table td>span.p-highlight{color:#fff;background:#63c984}::ng-deep .p-datepicker table td{padding:.2rem 0}::ng-deep .p-datepicker table td>span{width:2.8rem;height:2.8rem;border-radius:0%;transition:none}::ng-deep .p-datepicker table td.p-datepicker-today>span{box-shadow:inset 0 0 0 2px #00000061}::ng-deep .p-datepicker table td>span.p-highlight.start-range{border-top-left-radius:10px;border-bottom-left-radius:10px}::ng-deep .p-datepicker table td>span.p-highlight.end-range{border-top-right-radius:10px;border-bottom-right-radius:10px}::ng-deep .p-datepicker table td>span.p-highlight.between-range{background:#00c37dad!important}::ng-deep .p-monthpicker-month{width:50%!important}::ng-deep .p-yearpicker-year{width:50%!important}::ng-deep .inline-calendar .p-datepicker table td>span{width:2.4rem;height:2.4rem}::ng-deep .inline-calendar{border-bottom:1px solid #e5e5e5}::ng-deep .atomix-date-range-overlay{border-radius:var(--global-border-radius)}.overlay-inner{display:flex;gap:1rem;align-items:flex-start;flex-wrap:nowrap}.overlay-left{padding:.75rem .75rem 2rem;text-align:center;border-right:1px solid #e5e5e5}.inline-calendar .overlay-left{padding-bottom:2rem}.input-wrapper{display:flex;align-items:center;gap:.5rem;position:relative}.input-wrapper input[readonly]{cursor:pointer;padding-right:40px!important;border-radius:var(--global-border-radius)}.input-wrapper input{color:#000000de}.input-wrapper input::placeholder{color:#0009}.input-icon{cursor:pointer;color:var(--primary-text-color)!important;position:absolute;right:10px}.input-clear-icon{cursor:pointer;color:var(--primary-text-color)!important;position:absolute;right:27px}.preset-list{display:flex;flex-direction:column;gap:0}.preset-btn{justify-content:flex-start;text-align:left;padding-left:8px}.inline-calendar .preset-btn{padding:.3rem .8rem!important}.inline-calendar{gap:0}.preset-btn .p-button-label{display:inline-block}.preset-btn:not(.p-button-outlined){background-color:transparent;color:var(--text-gray-700)}.preset-btn:hover{background-color:#63b77e}.preset-btn.active,.preset-btn.p-button.active,.preset-btn.custom-active,.preset-btn.p-button.custom-active{background-color:#63b77e!important;color:#fff!important;font-weight:700;line-height:17px;border-radius:12px}.reset-link{text-align:left;cursor:pointer;margin-top:25px;padding:.3rem 1.4rem!important;color:#63b77e;font-weight:600}.atomix-date-range-overlay .overlay-left .reset-link{display:inline-block;margin-top:1rem;color:#2196f3;cursor:pointer}.overlay-right{flex:1;width:230px;max-width:230px}.overlay-inner.inline{flex-direction:row}:host ::ng-deep .p-column-filter-menu .overlay-inner.inline{display:flex!important;flex-direction:row!important;flex-wrap:nowrap!important}:host ::ng-deep .p-overlaypanel .overlay-inner.inline{display:flex!important;flex-direction:row!important}.overlay-actions{display:flex;gap:.5rem;justify-content:flex-end;margin-top:.5rem}.atomix-overlay-calendar ::ng-deep .p-datepicker{width:100%}\n"] }]
607
+ args: [{ selector: 'atomix-daterange-calendar', template: "<div>\n <ng-container *ngIf=\"!inline; else inlineBlock\">\n <div [ngClass]=\"styleClass\" class=\"input-wrapper\">\n <input\n pInputText\n type=\"text\"\n [ngClass]=\"inputStyleClass\"\n [placeholder]=\"placeholder\"\n [value]=\"getDateRangeLabel()\"\n readonly\n [disabled]=\"disabled\"\n (click)=\"overlayPanel?.toggle($event)\"\n (keydown)=\"onInputKeyDown($event)\"\n />\n <i class=\"pi pi-calendar input-icon\" title=\"Open calendar\" (click)=\"!disabled && overlayPanel?.toggle($event)\"></i>\n <i *ngIf=\"hasSelection\" class=\"pi pi-times input-clear-icon\" title=\"Clear\" tabindex=\"0\" (click)=\"!disabled && clearAndStop($event)\" (keydown.enter)=\"!disabled && clearAndStop($event)\" (keydown.space)=\"!disabled && clearAndStop($event)\"></i>\n\n </div>\n\n <p-overlayPanel #overlayPanel [dismissable]=\"true\" appendTo=\"body\" styleClass=\"atomix-date-range-overlay\" (onShow)=\"onOverlayShow()\" (onHide)=\"onOverlayHide()\">\n <div class=\"overlay-inner\">\n <div class=\"overlay-left\">\n <div class=\"preset-list\">\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('today')\" [ngClass]=\"{ 'active': selectedPreset === 'today' }\" label=\"Today\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('yesterday')\" [ngClass]=\"{ 'active': selectedPreset === 'yesterday' }\" label=\"Yesterday\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last7days')\" [ngClass]=\"{ 'active': selectedPreset === 'last7days' }\" label=\"Last 7 days\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last30days')\" [ngClass]=\"{ 'active': selectedPreset === 'last30days' }\" label=\"Last 30 days\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last3months')\" [ngClass]=\"{ 'active': selectedPreset === 'last3months' }\" label=\"Last 3 months\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last6months')\" [ngClass]=\"{ 'active': selectedPreset === 'last6months' }\" label=\"Last 6 months\"></button>\n <a class=\"reset-link\" (click)=\"resetAndClose()\">Reset</a>\n </div>\n </div>\n <div class=\"overlay-right\">\n <p-calendar [(ngModel)]=\"modelDate\" [selectionMode]=\"'range'\" [inline]=\"true\" [dateFormat]=\"'mm/dd/yyyy'\" [showOtherMonths]=\"true\" [locale]=\"enLocale\" [showIcon]=\"false\" [styleClass]=\"'atomix-overlay-calendar'\" (ngModelChange)=\"onModelChange($event)\" (onMonthChange)=\"onCalendarViewChanged($event)\" (onYearChange)=\"onCalendarViewChanged($event)\" [disabled]=\"disabled\" [maxDate]=\"maxDate\" [minDate]=\"minDate\"></p-calendar>\n </div>\n </div>\n </p-overlayPanel>\n </ng-container>\n\n <ng-template #inlineBlock>\n <div [ngClass]=\"styleClass\" class=\"input-wrapper\">\n <input\n pInputText\n type=\"text\"\n [ngClass]=\"inputStyleClass\"\n [placeholder]=\"placeholder\"\n [value]=\"getDateRangeLabel()\"\n readonly\n [disabled]=\"disabled\"\n (keydown)=\"onInputKeyDown($event)\"\n />\n <i class=\"pi pi-calendar input-icon\" title=\"Open calendar\"></i>\n <i *ngIf=\"hasSelection\" class=\"pi pi-times input-clear-icon\" title=\"Clear\" tabindex=\"0\" (click)=\"clearAndStop($event)\" (keydown.enter)=\"clearAndStop($event)\" (keydown.space)=\"clearAndStop($event)\"></i>\n </div>\n <div class=\"overlay-inner inline-calendar flex\">\n <div class=\"overlay-left\">\n <div class=\"preset-list\">\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('today')\" [ngClass]=\"{ 'active': selectedPreset === 'today' }\" label=\"Today\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('yesterday')\" [ngClass]=\"{ 'active': selectedPreset === 'yesterday' }\" label=\"Yesterday\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last7days')\" [ngClass]=\"{ 'active': selectedPreset === 'last7days' }\" label=\"Last 7 days\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last30days')\" [ngClass]=\"{ 'active': selectedPreset === 'last30days' }\" label=\"Last 30 days\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last3months')\" [ngClass]=\"{ 'active': selectedPreset === 'last3months' }\" label=\"Last 3 months\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('last6months')\" [ngClass]=\"{ 'active': selectedPreset === 'last6months' }\" label=\"Last 6 months\"></button>\n <a class=\"reset-link\" (click)=\"resetAndClose()\">Reset</a>\n </div>\n </div>\n <div class=\"overlay-right\">\n <p-calendar [(ngModel)]=\"modelDate\" [selectionMode]=\"'range'\" [inline]=\"true\" [dateFormat]=\"'mm/dd/yyyy'\" [showOtherMonths]=\"true\" [locale]=\"enLocale\" [showIcon]=\"false\" [styleClass]=\"'atomix-overlay-calendar'\" (ngModelChange)=\"onModelChange($event)\" (onMonthChange)=\"onCalendarViewChanged($event)\" (onYearChange)=\"onCalendarViewChanged($event)\" [disabled]=\"disabled\" [maxDate]=\"maxDate\" [minDate]=\"minDate\"></p-calendar>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: ["::ng-deep .p-calendar button{background-color:transparent!important}::ng-deep .p-overlaypanel .p-overlaypanel-content{margin-top:0!important}::ng-deep .p-datepicker{border:none!important;border-radius:var(--global-border-radius)}::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month{color:#63b77e;transition:background-color .2s,color .2s,box-shadow .2s;font-weight:600;padding:.5rem}::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year,::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month{color:#63b77e;transition:background-color .2s,color .2s,box-shadow .2s;font-weight:600;padding:.5rem}::ng-deep .p-datepicker .p-monthpicker .p-monthpicker-month.p-highlight{color:#fff;background:#63c984;padding:1rem!important}::ng-deep .p-datepicker .p-monthpicker .p-monthpicker-month{padding:1rem!important}::ng-deep .p-datepicker .p-yearpicker .p-yearpicker-year.p-highlight{color:#fff;background:#63b77e;padding:1rem!important}::ng-deep .p-datepicker .p-yearpicker .p-yearpicker-year{padding:1rem!important}::ng-deep .p-datepicker table th{border-bottom:1px solid rgba(0,0,0,.12);color:var(--text-gray-700);font-weight:400;font-size:.875rem}::ng-deep .p-datepicker table td>span.p-highlight{color:#fff;background:#63c984}::ng-deep .p-datepicker table td{padding:.2rem 0}::ng-deep .p-datepicker table td>span{width:2.8rem;height:2.8rem;border-radius:0%;transition:none}::ng-deep .p-datepicker table td.p-datepicker-today>span{box-shadow:inset 0 0 0 2px #00000061}::ng-deep .p-datepicker table td>span.p-highlight.start-range{border-top-left-radius:10px;border-bottom-left-radius:10px}::ng-deep .p-datepicker table td>span.p-highlight.end-range{border-top-right-radius:10px;border-bottom-right-radius:10px}::ng-deep .p-datepicker table td>span.p-highlight.between-range{background:#00c37dad!important}::ng-deep .p-monthpicker-month{width:50%!important}::ng-deep .p-yearpicker-year{width:50%!important}::ng-deep .inline-calendar .p-datepicker table td>span{width:2.4rem;height:2.4rem}::ng-deep .inline-calendar{border-bottom:1px solid #e5e5e5}::ng-deep .atomix-date-range-overlay{border-radius:var(--global-border-radius)}.overlay-inner{display:flex;gap:1rem;align-items:flex-start;flex-wrap:nowrap}.overlay-left{padding:.75rem .75rem 2rem;text-align:center;border-right:1px solid #e5e5e5}.inline-calendar .overlay-left{padding-bottom:2rem}.input-wrapper{display:flex;align-items:center;gap:.5rem;position:relative}.input-wrapper input[readonly]{cursor:pointer;padding-right:40px!important;border-radius:var(--global-border-radius)}.input-wrapper input{color:#000000de}.input-wrapper input::placeholder{color:#0009}.input-icon{cursor:pointer;color:var(--primary-text-color)!important;position:absolute;right:10px}.input-clear-icon{cursor:pointer;color:var(--primary-text-color)!important;position:absolute;right:27px}.preset-list{display:flex;flex-direction:column;gap:0}.preset-btn{justify-content:flex-start;text-align:left;padding-left:8px}.inline-calendar .preset-btn{padding:.3rem .8rem!important}.inline-calendar{gap:0}.preset-btn .p-button-label{display:inline-block}.preset-btn:not(.p-button-outlined){background-color:transparent;color:var(--text-gray-700)}.preset-btn:hover{background-color:#63b77e}.preset-btn.active,.preset-btn.p-button.active,.preset-btn.custom-active,.preset-btn.p-button.custom-active{background-color:#63b77e!important;color:#fff!important;font-weight:700;line-height:17px;border-radius:12px}.reset-link{text-align:left;cursor:pointer;margin-top:25px;padding:.3rem 1.4rem!important;color:#63b77e;font-weight:600}.atomix-date-range-overlay .overlay-left .reset-link{display:inline-block;margin-top:1rem;color:#2196f3;cursor:pointer}.overlay-right{flex:1;width:230px;max-width:230px}.overlay-inner.inline{flex-direction:row}:host ::ng-deep .p-column-filter-menu .overlay-inner.inline{display:flex!important;flex-direction:row!important;flex-wrap:nowrap!important}:host ::ng-deep .p-overlaypanel .overlay-inner.inline{display:flex!important;flex-direction:row!important}.overlay-actions{display:flex;gap:.5rem;justify-content:flex-end;margin-top:.5rem}.atomix-overlay-calendar ::ng-deep .p-datepicker{width:100%}\n"] }]
608
608
  }], ctorParameters: () => [{ type: i1.DatePipe }, { type: i0.Renderer2 }], propDecorators: { placeholder: [{
609
609
  type: Input
610
610
  }], styleClass: [{
@@ -633,4 +633,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
633
633
  }], dateRangeChange: [{
634
634
  type: Output
635
635
  }] } });
636
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRvbWl4LWRhdGVyYW5nZS1jYWxlbmRhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmltZWtpdC9zcmMvbGliL2xpYi9hdG9taXgtZGF0ZXJhbmdlLWNhbGVuZGFyL2F0b21peC1kYXRlcmFuZ2UtY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJpbWVraXQvc3JjL2xpYi9saWIvYXRvbWl4LWRhdGVyYW5nZS1jYWxlbmRhci9hdG9taXgtZGF0ZXJhbmdlLWNhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUEwRCxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFTMUksTUFBTSxPQUFPLGdDQUFnQztJQTJFdkI7SUFBNEI7SUExRXZDLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUN4QixhQUFhLEdBQVksT0FBTyxDQUFDO0lBQ2pDLGVBQWUsR0FBVyxFQUFFLENBQUM7SUFDN0IsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFlBQVksR0FBUSxJQUFJLENBQUM7SUFDekIsT0FBTyxDQUFRO0lBQ2YsT0FBTyxDQUFRO0lBQ2YsYUFBYSxHQUE4RixJQUFJLENBQUM7SUFDaEgsY0FBYyxHQUFZLEtBQUssQ0FBQztJQUV6QyxlQUFlLEdBQVksS0FBSyxDQUFDO0lBQ2pDLGNBQWMsR0FBa0IsSUFBSSxDQUFDLENBQUMsdUdBQXVHO0lBQ2xILFlBQVksQ0FBZ0I7SUFDN0MsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFFcEQsdUdBQXVHO0lBQ3ZHLFNBQVMsR0FBa0IsSUFBSSxDQUFDO0lBRWhDLFFBQVEsR0FBRztRQUNULGNBQWMsRUFBRSxDQUFDO1FBQ2pCLFFBQVEsRUFBRTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsU0FBUztZQUNULFdBQVc7WUFDWCxVQUFVO1lBQ1YsUUFBUTtZQUNSLFVBQVU7U0FDWDtRQUNELGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztRQUNoRSxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7UUFDdkQsVUFBVSxFQUFFO1lBQ1YsU0FBUztZQUNULFVBQVU7WUFDVixPQUFPO1lBQ1AsT0FBTztZQUNQLEtBQUs7WUFDTCxNQUFNO1lBQ04sTUFBTTtZQUNOLFFBQVE7WUFDUixXQUFXO1lBQ1gsU0FBUztZQUNULFVBQVU7WUFDVixVQUFVO1NBQ1g7UUFDRCxlQUFlLEVBQUU7WUFDZixLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7U0FDTjtRQUNELEtBQUssRUFBRSxPQUFPO1FBQ2QsS0FBSyxFQUFFLE9BQU87S0FDZixDQUFDO0lBRUYsd0NBQXdDO0lBQ2hDLG1CQUFtQixHQUFrQixJQUFJLENBQUM7SUFDMUMscUJBQXFCLEdBQWtCLElBQUksQ0FBQztJQUM1QyxrQkFBa0IsR0FBdUIsRUFBRSxDQUFDO0lBQzVDLGlCQUFpQixHQUFjLEVBQUUsQ0FBQztJQUNsQyxnQkFBZ0IsR0FBdUIsRUFBRSxDQUFDO0lBQzFDLHVCQUF1QixHQUFjLEVBQUUsQ0FBQztJQUN4QyxZQUFZLEdBQWtCLElBQUksQ0FBQyxDQUFDLDJCQUEyQjtJQUV2RSxZQUFvQixRQUFrQixFQUFVLFFBQW1CO1FBQS9DLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFXO0lBQUcsQ0FBQztJQUV2RSxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkUsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2Qiw2Q0FBNkM7UUFDN0MsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUM1QixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsWUFBNkIsQ0FBQztZQUNsRSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDcEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxJQUFJLFFBQVEsQ0FBQztnQkFDM0Msa0RBQWtEO2dCQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUM1QixDQUFDO2lCQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDeEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQW9CO1FBQ2pDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUM7Z0JBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsS0FBWSxDQUFDLENBQUM7WUFBQyxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUM7WUFDN0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUEsYUFBYTtRQUNWLG1FQUFtRTtRQUNuRSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsbUJBQW1CLEdBQUksSUFBSSxDQUFDLFlBQXVCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEksQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNqRCw2RUFBNkU7UUFDN0UsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkUscUVBQXFFO1FBQ3JFLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdFLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxJQUFJLFFBQVEsQ0FBQztRQUM3QyxDQUFDO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUM3QixDQUFDO1FBQ0QsbURBQW1EO1FBQ25ELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2Qiw2REFBNkQ7UUFDN0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGFBQWE7UUFDWCwyRkFBMkY7UUFDM0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM3QixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0csSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUM3QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztZQUNqRCx1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDckUsQ0FBQztRQUNELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUMvQix1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLGlCQUFpQjtRQUNqQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsYUFBYSxDQUFDLFNBQXdCO1FBQ3BDLDBGQUEwRjtRQUMxRixvRkFBb0Y7UUFDcEYsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNuRCxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM3Qyw0Q0FBNEM7WUFDNUMsSUFBSSxDQUFDO2dCQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFBQyxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUM7UUFDakQsQ0FBQzthQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QixvQkFBb0I7WUFDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDTiwyRkFBMkY7WUFDM0YsOERBQThEO1lBQzlELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQy9CLENBQUM7UUFDRCwyRUFBMkU7UUFDM0UsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCx3REFBd0Q7SUFDeEQscUJBQXFCLENBQUMsS0FBVztRQUMvQiwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLHFGQUFxRjtRQUNyRixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDO2dCQUNILElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNqQyxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sT0FBTyxDQUNaLElBQUksQ0FBQyxZQUFZO1lBQ2YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQy9CLElBQUksQ0FBQyxZQUF1QixDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQzFDLENBQUMsQ0FBRSxJQUFJLENBQUMsWUFBdUIsQ0FBQyxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFFLElBQUksQ0FBQyxZQUF1QixDQUFDLENBQUMsQ0FBQyxDQUNyQyxDQUFDO0lBQ0osQ0FBQztJQUVPLGFBQWEsQ0FBQyxDQUFPO1FBQzNCLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8sVUFBVSxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQ2pDLE9BQU8sQ0FDTCxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUNuQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUM3QixDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVPLFlBQVksQ0FBQyxRQUFjLEVBQUUsTUFBWTtRQUMvQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7UUFDN0MsUUFBUTtRQUNSLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDO1lBQUUsT0FBTyxPQUFPLENBQUM7UUFDakYsWUFBWTtRQUNaLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQUUsT0FBTyxXQUFXLENBQUM7UUFDN0UsMEVBQTBFO1FBQzFFLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDO1lBQUUsT0FBTyxXQUFXLENBQUM7UUFDdkYsNkVBQTZFO1FBQzdFLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO1lBQUUsT0FBTyxZQUFZLENBQUM7UUFDMUYscUZBQXFGO1FBQ3JGLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO1lBQUUsT0FBTyxhQUFhLENBQUM7UUFDM0YscUZBQXFGO1FBQ3JGLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO1lBQUUsT0FBTyxhQUFhLENBQUM7UUFDM0YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUM7Z0JBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUFDLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFZO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUM7WUFBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQUMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQSxDQUFDO1FBQy9DLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDN0MsSUFBSSxJQUFJLENBQUMsZUFBZTtZQUFFLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0lBQzNELENBQUM7SUFFRCxnQkFBZ0I7UUFDZCw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQztnQkFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQUMsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQSxDQUFDO1FBQ2hELENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztJQUNqQyxDQUFDO0lBRUMsaUJBQWlCO1FBQ2pCLDJFQUEyRTtRQUMzRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDdEQsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFdkQsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxTQUE0QixDQUFDO1FBQzFDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQztRQUUvQix3RUFBd0U7UUFDeEUsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNsQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDOUQsT0FBTyxHQUFHLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQztRQUNqQyxDQUFDO1FBRUQscURBQXFEO1FBQ3JELElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM5RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDMUQsT0FBTyxHQUFHLFFBQVEsSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7UUFDMUMsQ0FBQztRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFnRjtRQUMxRixNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksS0FBSyxHQUFnQixJQUFJLENBQUM7UUFDOUIsSUFBSSxHQUFHLEdBQWdCLElBQUksQ0FBQztRQUM1QixRQUFRLE1BQU0sRUFBRSxDQUFDO1lBQ2YsS0FBSyxPQUFPO2dCQUNWLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDL0UsTUFBTTtZQUNSLEtBQUssV0FBVztnQkFDZCxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDbkUsTUFBTTtZQUNSLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDakIsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3ZFLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDdkUsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QixLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDbEMsTUFBTTtZQUNSLENBQUM7WUFDRCxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQztnQkFDbkIsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3ZFLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLE1BQU07WUFDUixDQUFDO1lBQ0Q7Z0JBQ0UsTUFBTTtRQUNWLENBQUM7UUFDRCxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUIsSUFBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDeEQsQ0FBQztZQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztZQUM3QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUMvQixDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUFDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQztRQUMvQyw2REFBNkQ7UUFDN0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUF3QjtRQUN4QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUMvQixDQUFDO2FBQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQy9CLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsNkZBQTZGO0lBQ3JGLDJCQUEyQjtRQUNqQyxJQUFJLENBQUM7WUFDSCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBRXJELGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFO2dCQUMxQywyQ0FBMkM7Z0JBQzNDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDckQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7b0JBQy9DLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztvQkFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUNuRCxDQUFDLENBQUMsQ0FBQztnQkFFVCxzREFBc0Q7Z0JBQ3RELHVFQUF1RTtnQkFDdkUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLENBQUM7Z0JBQzFELE1BQU0sZUFBZSxHQUFJLFNBQXFCLENBQUMsYUFBYSxDQUFDLDhEQUE4RCxDQUFDLENBQUM7Z0JBQzdILE1BQU0sY0FBYyxHQUFJLFNBQXFCLENBQUMsYUFBYSxDQUFDLDZEQUE2RCxDQUFDLENBQUM7Z0JBQzNILE1BQU0sY0FBYyxHQUFHLGVBQWUsSUFBSSxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDM0osTUFBTSxhQUFhLEdBQUcsY0FBYyxJQUFJLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3JILE1BQU0sS0FBSyxHQUEyRCxFQUFFLENBQUM7Z0JBQ3pFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUM5RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ3JCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUF1QixDQUFDO29CQUNwRCxpRkFBaUY7b0JBQ2pGLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzlDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRTt3QkFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDN0QsSUFBSSxRQUFRLEVBQUUsQ0FBQzt3QkFDYixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUM5RCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDdkQsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDOzRCQUN4QixNQUFNLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDakMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzs0QkFDN0IsT0FBTzt3QkFDVCxDQUFDO29CQUNILENBQUM7b0JBQ0QsK0ZBQStGO29CQUMvRixNQUFNLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2hELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7d0JBQ3RCLDhDQUE4Qzt3QkFDOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDOzRCQUNwRCxNQUFNLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDOzRCQUN4RCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOzRCQUM3QixPQUFPO3dCQUNULENBQUM7b0JBQ0gsQ0FBQztvQkFDRCx3REFBd0Q7Z0JBQzFELENBQUMsQ0FBQyxDQUFDO2dCQUVULElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO29CQUFFLE9BQU87Z0JBRXpCLDJDQUEyQztnQkFDM0MsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBRXJELHVEQUF1RDtnQkFDdkQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUMxTCxNQUFNLFNBQVMsR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7Z0JBQzNGLE1BQU0sT0FBTyxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztnQkFFakYsMkVBQTJFO2dCQUMzRSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDaEMsS0FBSyxNQUFNLEVBQUUsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDdkIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDMUIsSUFBSSxLQUFLLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQzt3QkFDbkMsMENBQTBDO3dCQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO3dCQUMvQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUMvQyxDQUFDO3lCQUFNLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO3dCQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO29CQUNqRCxDQUFDO3lCQUFNLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO3dCQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUMvQyxDQUFDO3lCQUFNLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7d0JBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7b0JBQ25ELENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxxRUFBcUU7UUFDdkUsQ0FBQztJQUNILENBQUM7SUFFTyxPQUFPLENBQUMsQ0FBTztRQUNyQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxJQUFXO1FBQ3BDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDNUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRO1FBQ3ZDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6QixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxpQkFBaUI7UUFDdkQsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGFBQWE7UUFDbkcsTUFBTSxTQUFTLEdBQUcsQ0FBQyxlQUFlLFdBQVcsSUFBSSxFQUFFLGVBQWUsU0FBUyxJQUFJLENBQUMsQ0FBQztRQUNqRixLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsNEJBQTRCLEdBQUcsRUFBRSxDQUF1QixDQUFDO1lBQ3ZHLElBQUksY0FBYztnQkFBRSxPQUFPLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUF1QixJQUFJLGNBQWMsQ0FBQztRQUNsRyxDQUFDO1FBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUM1QixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBdUIsQ0FBQztZQUNoRSxJQUFJLEtBQUs7Z0JBQUUsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBdUIsSUFBSSxLQUFLLENBQUM7UUFDdkUsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQztZQUNQLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQztnQkFDSCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBbUIsQ0FBQztnQkFDdkMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUNoRCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQ2pFLElBQUksRUFBRTt3QkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQWEsQ0FBQyxDQUFDO2dCQUNyQyxDQUFDO1lBQ0gsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQSxDQUFDO1lBRWQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO2dCQUNwQixNQUFNLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsRUFBRTtvQkFDcEMsZ0RBQWdEO29CQUNoRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3pCLENBQUMsQ0FBQyxDQUFDO2dCQUNILHVGQUF1RjtnQkFDdkYsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hDLDBHQUEwRztnQkFDMUcsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQztnQkFDaEMsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNsRSxNQUFNLFNBQVMsR0FBRyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsRUFBRTt3QkFDMUMsNERBQTREO3dCQUM1RCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQ3ZCLG1EQUFtRDt3QkFDbkQsVUFBVSxDQUFDLEdBQUcsRUFBRTs0QkFDZCxJQUFJLENBQUM7Z0NBQ0gsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0NBQzlCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDOzRCQUNqQyxDQUFDOzRCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNqQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxrRUFBa0U7b0JBQzdFLENBQUMsQ0FBQyxDQUFDO29CQUNILFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDL0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxTQUFTO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSTtZQUFFLE9BQU8sQ0FBQyxvQkFBb0I7UUFDM0QsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsR0FBRyxFQUFFO1lBQ3BELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixNQUFNLE1BQU0sR0FBYyxFQUFFLENBQUM7UUFDN0IsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUMzRSxJQUFJLFVBQVU7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksU0FBUztZQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQW1CLENBQUM7WUFDdkMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksRUFBRTtvQkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQWEsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDZixvQkFBb0I7UUFDcEIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQzt3R0F2a0JVLGdDQUFnQzs0RkFBaEMsZ0NBQWdDLDJpQkNUN0MsbWdMQXdFQTs7NEZEL0RhLGdDQUFnQztrQkFMNUMsU0FBUzsrQkFDRSwyQkFBMkI7cUdBSzVCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFJcUIsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUNmLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE92ZXJsYXlQYW5lbCB9IGZyb20gJ3ByaW1lbmcvb3ZlcmxheXBhbmVsJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXRvbWl4LWRhdGVyYW5nZS1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdG9taXgtZGF0ZXJhbmdlLWNhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXRvbWl4LWRhdGVyYW5nZS1jYWxlbmRhci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBdG9taXhEYXRlcmFuZ2VDYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHN0eWxlQ2xhc3M6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBzZWxlY3Rpb25Nb2RlOiAncmFuZ2UnID0gJ3JhbmdlJztcbiAgQElucHV0KCkgaW5wdXRTdHlsZUNsYXNzOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgaW5saW5lOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNlbGVjdGVkRGF0ZTogYW55ID0gbnVsbDtcbiAgQElucHV0KCkgbWF4RGF0ZSE6IERhdGU7XG4gIEBJbnB1dCgpIG1pbkRhdGUhOiBEYXRlO1xuICBASW5wdXQoKSBkZWZhdWx0UHJlc2V0OiAndG9kYXknIHwgJ3llc3RlcmRheScgfCAnbGFzdDdkYXlzJyB8ICdsYXN0MzBkYXlzJyB8ICdsYXN0M21vbnRocycgfCAnbGFzdDZtb250aHMnIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIHByZXNlcnZlUHJlc2V0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgY3VzdG9tUmFuZ2VNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGVkUHJlc2V0OiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gJ3RvZGF5JyB8ICd5ZXN0ZXJkYXknIHwgJ2xhc3Q3ZGF5cycgfCAnbGFzdDMwZGF5cycgfCAnbGFzdDNtb250aHMnIHwgJ2xhc3Q2bW9udGhzJyB8ICdjdXN0b20nIHwgbnVsbFxuICBAVmlld0NoaWxkKCdvdmVybGF5UGFuZWwnKSBvdmVybGF5UGFuZWw/OiBPdmVybGF5UGFuZWw7XG4gIEBPdXRwdXQoKSBkYXRlUmFuZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvLyBpbnRlcm5hbCBtb2RlbCBib3VuZCB0byBwLWNhbGVuZGFyIHRvIGF2b2lkIGNoYW5naW5nIGV4dGVybmFsIHNlbGVjdGlvbiBkdXJpbmcgZmlyc3QtY2xpY2sgc2VsZWN0aW9uXG4gIG1vZGVsRGF0ZTogRGF0ZVtdIHwgbnVsbCA9IG51bGw7XG5cbiAgZW5Mb2NhbGUgPSB7XG4gICAgZmlyc3REYXlPZldlZWs6IDAsXG4gICAgZGF5TmFtZXM6IFtcbiAgICAgICdTdW5kYXknLFxuICAgICAgJ01vbmRheScsXG4gICAgICAnVHVlc2RheScsXG4gICAgICAnV2VkbmVzZGF5JyxcbiAgICAgICdUaHVyc2RheScsXG4gICAgICAnRnJpZGF5JyxcbiAgICAgICdTYXR1cmRheScsXG4gICAgXSxcbiAgICBkYXlOYW1lc1Nob3J0OiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxuICAgIGRheU5hbWVzTWluOiBbJ1N1JywgJ01vJywgJ1R1JywgJ1dlJywgJ1RoJywgJ0ZyJywgJ1NhJ10sXG4gICAgbW9udGhOYW1lczogW1xuICAgICAgJ0phbnVhcnknLFxuICAgICAgJ0ZlYnJ1YXJ5JyxcbiAgICAgICdNYXJjaCcsXG4gICAgICAnQXByaWwnLFxuICAgICAgJ01heScsXG4gICAgICAnSnVuZScsXG4gICAgICAnSnVseScsXG4gICAgICAnQXVndXN0JyxcbiAgICAgICdTZXB0ZW1iZXInLFxuICAgICAgJ09jdG9iZXInLFxuICAgICAgJ05vdmVtYmVyJyxcbiAgICAgICdEZWNlbWJlcicsXG4gICAgXSxcbiAgICBtb250aE5hbWVzU2hvcnQ6IFtcbiAgICAgICdKYW4nLFxuICAgICAgJ0ZlYicsXG4gICAgICAnTWFyJyxcbiAgICAgICdBcHInLFxuICAgICAgJ01heScsXG4gICAgICAnSnVuJyxcbiAgICAgICdKdWwnLFxuICAgICAgJ0F1ZycsXG4gICAgICAnU2VwJyxcbiAgICAgICdPY3QnLFxuICAgICAgJ05vdicsXG4gICAgICAnRGVjJyxcbiAgICBdLFxuICAgIHRvZGF5OiAnVG9kYXknLFxuICAgIGNsZWFyOiAnQ2xlYXInLFxuICB9O1xuXG4gIC8vIHRlbXBvcmFyeSBzdG9yYWdlIGZvciBvdmVybGF5IHNlc3Npb25cbiAgcHJpdmF0ZSBfb3ZlcmxheUluaXRpYWxEYXRlOiBEYXRlW10gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfb3ZlcmxheUluaXRpYWxQcmVzZXQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9jYWxlbmRhck9ic2VydmVyczogTXV0YXRpb25PYnNlcnZlcltdID0gW107XG4gIHByaXZhdGUgX29ic2VydmVkRWxlbWVudHM6IEVsZW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIF9wYXJlbnRPYnNlcnZlcnM6IE11dGF0aW9uT2JzZXJ2ZXJbXSA9IFtdO1xuICBwcml2YXRlIF9vYnNlcnZlZFBhcmVudEVsZW1lbnRzOiBFbGVtZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBfdXBkYXRlUmFmSWQ6IG51bWJlciB8IG51bGwgPSBudWxsOyAvLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgaWRcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZERhdGUgJiYgdGhpcy5kZWZhdWx0UHJlc2V0KSB7XG4gICAgICB0aGlzLmFwcGx5UHJlc2V0KHRoaXMuZGVmYXVsdFByZXNldCk7XG4gICAgfVxuICAgIC8vIGluaXRpYWxpemUgaW50ZXJuYWwgbW9kZWxcbiAgICB0aGlzLm1vZGVsRGF0ZSA9IHRoaXMuc2VsZWN0ZWREYXRlID8gWy4uLnRoaXMuc2VsZWN0ZWREYXRlXSA6IG51bGw7XG4gICAgLy8gaW5pdGlhbCBjbGFzcyB1cGRhdGUgaWYgdGhlcmUgaXMgYSBwcmUtc2VsZWN0ZWQgcmFuZ2VcbiAgICB0aGlzLl9zY2hlZHVsZVVwZGF0ZSgpO1xuICAgIC8vIHN0YXJ0IG9ic2VydmVycyBpZiBpbmxpbmUgY2FsZW5kYXIgaXMgdXNlZFxuICAgIGlmICh0aGlzLmlubGluZSkge1xuICAgICAgdGhpcy5fc3RhcnRDYWxlbmRhck9ic2VydmVycygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc2VsZWN0ZWREYXRlJ10pIHtcbiAgICAgIGNvbnN0IHNlbCA9IGNoYW5nZXNbJ3NlbGVjdGVkRGF0ZSddLmN1cnJlbnRWYWx1ZSBhcyBEYXRlW10gfCBudWxsO1xuICAgICAgaWYgKHNlbCAmJiBBcnJheS5pc0FycmF5KHNlbCkgJiYgc2VsLmxlbmd0aCA9PT0gMiAmJiBzZWxbMF0gJiYgc2VsWzFdKSB7XG4gICAgICAgICAgY29uc3QgcHJlc2V0ID0gdGhpcy5kZXRlY3RQcmVzZXQoc2VsWzBdLCBzZWxbMV0pO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQgPSBwcmVzZXQgPz8gJ2N1c3RvbSc7XG4gICAgICAgIC8vIHN5bmMgaW50ZXJuYWwgbW9kZWwgd2hlbiBleHRlcm5hbCB2YWx1ZSBjaGFuZ2VzXG4gICAgICAgIHRoaXMubW9kZWxEYXRlID0gWy4uLnNlbF07XG4gICAgICB9IGVsc2UgaWYgKHNlbCA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQgPSBudWxsO1xuICAgICAgICB0aGlzLm1vZGVsRGF0ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25JbnB1dEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICB0cnkgeyB0aGlzLm92ZXJsYXlQYW5lbD8udG9nZ2xlKGV2ZW50IGFzIGFueSk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gICBvbk92ZXJsYXlTaG93KCk6IHZvaWQge1xuICAgICAgLy8gc3RvcmUgYSBkZWVwIGNvcHkgb2YgY3VycmVudCBzZWxlY3Rpb24vcHJlc2V0IHdoZW4gb3ZlcmxheSBvcGVuc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlICYmIEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RlZERhdGUpKSB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlJbml0aWFsRGF0ZSA9ICh0aGlzLnNlbGVjdGVkRGF0ZSBhcyBEYXRlW10pLm1hcChkID0+IChkID8gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCBkLmdldE1vbnRoKCksIGQuZ2V0RGF0ZSgpKSA6IGQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlJbml0aWFsRGF0ZSA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLl9vdmVybGF5SW5pdGlhbFByZXNldCA9IHRoaXMuc2VsZWN0ZWRQcmVzZXQ7XG4gICAgICAvLyBlbnN1cmUgY2FsZW5kYXIgbW9kZWwgc2hvd3MgdGhlIGN1cnJlbnRseSBjb21taXR0ZWQgc2VsZWN0aW9uIHdoZW4gb3BlbmluZ1xuICAgICAgdGhpcy5tb2RlbERhdGUgPSB0aGlzLnNlbGVjdGVkRGF0ZSA/IFsuLi50aGlzLnNlbGVjdGVkRGF0ZV0gOiBudWxsO1xuICAgICAgLy8gZW5zdXJlIHByZXNldCBidXR0b25zIHJlZmxlY3QgY3VycmVudCBzZWxlY3Rpb24gd2hlbiBvdmVybGF5IG9wZW5zXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZERhdGUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdGVkRGF0ZSkgJiYgdGhpcy5zZWxlY3RlZERhdGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgY29uc3QgcHJlc2V0ID0gdGhpcy5kZXRlY3RQcmVzZXQodGhpcy5zZWxlY3RlZERhdGVbMF0sIHRoaXMuc2VsZWN0ZWREYXRlWzFdKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0ID0gcHJlc2V0ID8/ICdjdXN0b20nO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5zZWxlY3RlZERhdGUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldCA9IG51bGw7XG4gICAgICB9XG4gICAgICAvLyBhZGQgc3RhcnQvZW5kIGNsYXNzZXMgdG8gcmFuZ2UgY2VsbHMgZm9yIHN0eWxpbmdcbiAgICAgIHRoaXMuX3NjaGVkdWxlVXBkYXRlKCk7XG4gICAgICAvLyBvYnNlcnZlIERPTSBjaGFuZ2VzIChQcmltZU5HIG1heSByZS1yZW5kZXIgaW5zaWRlIG92ZXJsYXkpXG4gICAgICB0aGlzLl9zdGFydENhbGVuZGFyT2JzZXJ2ZXJzKCk7XG4gIH1cblxuICBvbk92ZXJsYXlIaWRlKCk6IHZvaWQge1xuICAgIC8vIGlmIGludGVybmFsIGNhbGVuZGFyIG1vZGVsIGhhcyBhbiBpbmNvbXBsZXRlIHNlbGVjdGlvbiAocGFydGlhbCByYW5nZSkgcmV2ZXJ0IHRvIGluaXRpYWxcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxEYXRlO1xuICAgIGNvbnN0IGlzUGFydGlhbE1vZGVsID0gQm9vbGVhbihtb2RlbCAmJiBBcnJheS5pc0FycmF5KG1vZGVsKSAmJiBtb2RlbC5sZW5ndGggPiAwICYmIG1vZGVsWzBdICYmICFtb2RlbFsxXSk7XG4gICAgaWYgKGlzUGFydGlhbE1vZGVsKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHRoaXMuX292ZXJsYXlJbml0aWFsRGF0ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQgPSB0aGlzLl9vdmVybGF5SW5pdGlhbFByZXNldDtcbiAgICAgIC8vIHJlc2V0IGludGVybmFsIG1vZGVsIHRvIHN5bmNlZCB2YWx1ZVxuICAgICAgdGhpcy5tb2RlbERhdGUgPSB0aGlzLnNlbGVjdGVkRGF0ZSA/IFsuLi50aGlzLnNlbGVjdGVkRGF0ZV0gOiBudWxsO1xuICAgIH1cbiAgICB0aGlzLl9vdmVybGF5SW5pdGlhbERhdGUgPSBudWxsO1xuICAgIHRoaXMuX292ZXJsYXlJbml0aWFsUHJlc2V0ID0gbnVsbDtcbiAgICB0aGlzLmN1c3RvbVJhbmdlTW9kZSA9IGZhbHNlO1xuICAvLyBjbGVhbnVwIGFueSBzdGFydC9lbmQgY2xhc3NlcyB0byBhdm9pZCBzdGFsZSBjbGFzc2VzXG4gIHRoaXMuX3NjaGVkdWxlVXBkYXRlKCk7XG4gICAgLy8gc3RvcCBvYnNlcnZpbmdcbiAgICB0aGlzLl9zdG9wQ2FsZW5kYXJPYnNlcnZlcnMoKTtcbiAgfVxuXG4gIG9uTW9kZWxDaGFuZ2UoZGF0ZVJhbmdlOiBEYXRlW10gfCBudWxsKSB7XG4gICAgLy8gV2hlbiB1c2VyIGNsaWNrcyBhIGZpcnN0IGRhdGUsIFByaW1lTkcgbWF5IGVtaXQgYW4gYXJyYXkgd2l0aCAxIHZhbHVlLiBXZSBkb24ndCB3YW50IHRvXG4gICAgLy8gdXBkYXRlIHRoZSBleHRlcm5hbCBzZWxlY3RlZERhdGUgdW50aWwgdGhlIHJhbmdlIGlzIGNvbXBsZXRlZCAodHdvIGRhdGVzKSBzbyB0aGF0XG4gICAgLy8gdGhlIGNhbGVuZGFyIGRvZXMgbm90IGp1bXAgYmFjayB0byBhIHByZXZpb3VzbHkgc2VsZWN0ZWQgZW5kIGRhdGUncyBtb250aC5cbiAgICB0aGlzLm1vZGVsRGF0ZSA9IGRhdGVSYW5nZSA/IFsuLi5kYXRlUmFuZ2VdIDogbnVsbDtcbiAgICBpZiAoZGF0ZVJhbmdlICYmIEFycmF5LmlzQXJyYXkoZGF0ZVJhbmdlKSAmJiBkYXRlUmFuZ2UubGVuZ3RoID09PSAyICYmIGRhdGVSYW5nZVswXSAmJiBkYXRlUmFuZ2VbMV0pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldCA9IHRoaXMuZGV0ZWN0UHJlc2V0KGRhdGVSYW5nZVswXSwgZGF0ZVJhbmdlWzFdKTtcbiAgICAgICAgdGhpcy5jdXN0b21SYW5nZU1vZGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gWy4uLmRhdGVSYW5nZV07XG4gICAgICB0aGlzLmRhdGVSYW5nZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgIC8vIGNsb3NlIG92ZXJsYXkgbGlrZSB3aGVuIGFwcGx5aW5nIGEgcHJlc2V0XG4gICAgICB0cnkgeyB0aGlzLm92ZXJsYXlQYW5lbD8uaGlkZSgpOyB9IGNhdGNoIChlKSB7fVxuICAgIH0gZWxzZSBpZiAoIWRhdGVSYW5nZSkge1xuICAgICAgLy8gY2xlYXJlZCBzZWxlY3Rpb25cbiAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQgPSBudWxsO1xuICAgICAgdGhpcy5jdXN0b21SYW5nZU1vZGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlQ2hhbmdlLmVtaXQobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNpbmdsZSBkYXRlIHNlbGVjdGluZyAocGFydGlhbCByYW5nZSkgLSBkbyBub3QgZW1pdCBjaGFuZ2UgeWV0OyBqdXN0IGtlZXAgaW50ZXJuYWwgbW9kZWxcbiAgICAgIC8vIHNvIHRoZSBjYWxlbmRhcidzIHZpZXcgcmVtYWlucyB3aGVyZSB0aGUgdXNlciBuYXZpZ2F0ZWQgdG8uXG4gICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0ID0gbnVsbDtcbiAgICAgIHRoaXMuY3VzdG9tUmFuZ2VNb2RlID0gZmFsc2U7XG4gICAgfVxuICAgIC8vIHVwZGF0ZSBzdGFydC9lbmQgY2xhc3NlcyB3aGlsZSB1c2VyIGlzIHNlbGVjdGluZyBvciB3aGVuIHJhbmdlIGNvbXBsZXRlc1xuICAgIHRoaXMuX3NjaGVkdWxlVXBkYXRlKCk7XG4gIH1cblxuICAvLyBDYWxsZWQgd2hlbiB0aGUgY2FsZW5kYXIncyB2aXNpYmxlIG1vbnRoL3llYXIgY2hhbmdlc1xuICBvbkNhbGVuZGFyVmlld0NoYW5nZWQoZXZlbnQ/OiBhbnkpOiB2b2lkIHtcbiAgICAvLyBSZWFwcGx5IGNsYXNzZXMgYWZ0ZXIgUHJpbWVORyByZS1yZW5kZXJcbiAgICB0aGlzLl9zY2hlZHVsZVVwZGF0ZSgpO1xuICAgIC8vIFJlYXR0YWNoIG9ic2VydmVycyBhZnRlciBhIHNtYWxsIGRlbGF5IHNpbmNlIFByaW1lTkcgd2lsbCBsaWtlbHkgcmVwbGFjZSBET00gbm9kZXNcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX3N0b3BDYWxlbmRhck9ic2VydmVycygpO1xuICAgICAgICB0aGlzLl9zdGFydENhbGVuZGFyT2JzZXJ2ZXJzKCk7XG4gICAgICB9IGNhdGNoIChlKSB7IH1cbiAgICB9LCA0MCk7XG4gIH1cblxuICBnZXQgaGFzU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdGVkRGF0ZSkgJiZcbiAgICAgICAgKHRoaXMuc2VsZWN0ZWREYXRlIGFzIERhdGVbXSkubGVuZ3RoID09PSAyICYmXG4gICAgICAgICEhKHRoaXMuc2VsZWN0ZWREYXRlIGFzIERhdGVbXSlbMF0gJiZcbiAgICAgICAgISEodGhpcy5zZWxlY3RlZERhdGUgYXMgRGF0ZVtdKVsxXVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZURhdGUoZDogRGF0ZSk6IERhdGUge1xuICAgIHJldHVybiBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIGQuZ2V0TW9udGgoKSwgZC5nZXREYXRlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NhbWVEYXRlKGE6IERhdGUsIGI6IERhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgYS5nZXRGdWxsWWVhcigpID09PSBiLmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgIGEuZ2V0TW9udGgoKSA9PT0gYi5nZXRNb250aCgpICYmXG4gICAgICBhLmdldERhdGUoKSA9PT0gYi5nZXREYXRlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlY3RQcmVzZXQoc3RhcnRSYXc6IERhdGUsIGVuZFJhdzogRGF0ZSk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5ub3JtYWxpemVEYXRlKHN0YXJ0UmF3KTtcbiAgICBjb25zdCBlbmQgPSB0aGlzLm5vcm1hbGl6ZURhdGUoZW5kUmF3KTtcbiAgICBjb25zdCB0b2RheSA9IHRoaXMubm9ybWFsaXplRGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAvLyB0b2RheVxuICAgIGlmICh0aGlzLmlzU2FtZURhdGUoc3RhcnQsIHRvZGF5KSAmJiB0aGlzLmlzU2FtZURhdGUoZW5kLCB0b2RheSkpIHJldHVybiAndG9kYXknO1xuICAgIC8vIHllc3RlcmRheVxuICAgIGNvbnN0IHkgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgeS5zZXREYXRlKHkuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgaWYgKHRoaXMuaXNTYW1lRGF0ZShzdGFydCwgeSkgJiYgdGhpcy5pc1NhbWVEYXRlKGVuZCwgeSkpIHJldHVybiAneWVzdGVyZGF5JztcbiAgICAvLyBsYXN0N2RheXMgKGxhc3QgNyBkYXlzIGluY2x1ZGluZyB0b2RheTogc3RhcnQgPSB0b2RheSAtIDYsIGVuZCA9IHRvZGF5KVxuICAgIGNvbnN0IGw3RW5kID0gbmV3IERhdGUodG9kYXkpO1xuICAgIGNvbnN0IGw3U3RhcnQgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgbDdTdGFydC5zZXREYXRlKHRvZGF5LmdldERhdGUoKSAtIDYpO1xuICAgIGlmICh0aGlzLmlzU2FtZURhdGUoc3RhcnQsIGw3U3RhcnQpICYmIHRoaXMuaXNTYW1lRGF0ZShlbmQsIGw3RW5kKSkgcmV0dXJuICdsYXN0N2RheXMnO1xuICAgIC8vIGxhc3QzMGRheXMgKGxhc3QgMzAgZGF5cyBpbmNsdWRpbmcgdG9kYXk6IHN0YXJ0ID0gdG9kYXkgLSAyOSwgZW5kID0gdG9kYXkpXG4gICAgY29uc3QgbDMwRW5kID0gbmV3IERhdGUodG9kYXkpO1xuICAgIGNvbnN0IGwzMFN0YXJ0ID0gbmV3IERhdGUodG9kYXkpO1xuICAgIGwzMFN0YXJ0LnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpIC0gMjkpO1xuICAgIGlmICh0aGlzLmlzU2FtZURhdGUoc3RhcnQsIGwzMFN0YXJ0KSAmJiB0aGlzLmlzU2FtZURhdGUoZW5kLCBsMzBFbmQpKSByZXR1cm4gJ2xhc3QzMGRheXMnO1xuICAgIC8vIGxhc3QzbW9udGhzIChsYXN0IDMgbW9udGhzIGluY2x1ZGluZyB0b2RheTogc3RhcnQgPSB0b2RheSAtIDMgbW9udGhzLCBlbmQgPSB0b2RheSlcbiAgICBjb25zdCBsM21FbmQgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgY29uc3QgbDNtU3RhcnQgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgbDNtU3RhcnQuc2V0TW9udGgodG9kYXkuZ2V0TW9udGgoKSAtIDMpO1xuICAgIGlmICh0aGlzLmlzU2FtZURhdGUoc3RhcnQsIGwzbVN0YXJ0KSAmJiB0aGlzLmlzU2FtZURhdGUoZW5kLCBsM21FbmQpKSByZXR1cm4gJ2xhc3QzbW9udGhzJztcbiAgICAvLyBsYXN0Nm1vbnRocyAobGFzdCA2IG1vbnRocyBpbmNsdWRpbmcgdG9kYXk6IHN0YXJ0ID0gdG9kYXkgLSA2IG1vbnRocywgZW5kID0gdG9kYXkpXG4gICAgY29uc3QgbDZtRW5kID0gbmV3IERhdGUodG9kYXkpO1xuICAgIGNvbnN0IGw2bVN0YXJ0ID0gbmV3IERhdGUodG9kYXkpO1xuICAgIGw2bVN0YXJ0LnNldE1vbnRoKHRvZGF5LmdldE1vbnRoKCkgLSA2KTtcbiAgICBpZiAodGhpcy5pc1NhbWVEYXRlKHN0YXJ0LCBsNm1TdGFydCkgJiYgdGhpcy5pc1NhbWVEYXRlKGVuZCwgbDZtRW5kKSkgcmV0dXJuICdsYXN0Nm1vbnRocyc7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjbGVhckRhdGVSYW5nZSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7XG4gICAgdGhpcy5kYXRlUmFuZ2VDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgdGhpcy5zZWxlY3RlZFByZXNldCA9IG51bGw7XG4gICAgdGhpcy5jdXN0b21SYW5nZU1vZGUgPSBmYWxzZTtcbiAgICB0aGlzLm1vZGVsRGF0ZSA9IG51bGw7XG4gIH1cblxuICByZXNldEFuZENsb3NlKCkge1xuICAgIHRoaXMuY2xlYXJEYXRlUmFuZ2UoKTtcbiAgICBpZiAodGhpcy5vdmVybGF5UGFuZWwpIHtcbiAgICAgIHRyeSB7IHRoaXMub3ZlcmxheVBhbmVsLmhpZGUoKTsgfSBjYXRjaCAoZSkge31cbiAgICB9XG4gIH1cblxuICBjbGVhckFuZFN0b3AoZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5jbGVhckRhdGVSYW5nZSgpO1xuICAgIHRyeSB7IHRoaXMub3ZlcmxheVBhbmVsPy5oaWRlKCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICB0b2dnbGVDdXN0b21SYW5nZSgpIHtcbiAgICB0aGlzLmN1c3RvbVJhbmdlTW9kZSA9ICF0aGlzLmN1c3RvbVJhbmdlTW9kZTtcbiAgICBpZiAodGhpcy5jdXN0b21SYW5nZU1vZGUpIHRoaXMuc2VsZWN0ZWRQcmVzZXQgPSAnY3VzdG9tJztcbiAgfVxuXG4gIGFwcGx5Q3VzdG9tUmFuZ2UoKSB7XG4gICAgLy8gZW5zdXJlIGV4dGVybmFsIHNlbGVjdGVkRGF0ZSBpcyBpbiBzeW5jIHdpdGggaW50ZXJuYWwgbW9kZWxcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHRoaXMubW9kZWxEYXRlID8gWy4uLnRoaXMubW9kZWxEYXRlXSA6IG51bGw7XG4gICAgdGhpcy5kYXRlUmFuZ2VDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgaWYgKHRoaXMub3ZlcmxheVBhbmVsKSB7XG4gICAgICB0cnkgeyB0aGlzLm92ZXJsYXlQYW5lbC5oaWRlKCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICAgIHRoaXMuY3VzdG9tUmFuZ2VNb2RlID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZFByZXNldCA9ICdjdXN0b20nO1xuICB9XG5cbiAgICBnZXREYXRlUmFuZ2VMYWJlbCgpIHtcbiAgICAvLyBDaGVjayB0aGUgaW50ZXJuYWwgbW9kZWwgZmlyc3QgdG8gc2hvdyByZWFsLXRpbWUgdXBkYXRlcyB3aGlsZSBzZWxlY3RpbmdcbiAgICBjb25zdCBkYXRlQXJyYXkgPSB0aGlzLm1vZGVsRGF0ZSB8fCB0aGlzLnNlbGVjdGVkRGF0ZTtcbiAgICBpZiAoIWRhdGVBcnJheSB8fCAhQXJyYXkuaXNBcnJheShkYXRlQXJyYXkpKSByZXR1cm4gJyc7XG4gICAgXG4gICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gZGF0ZUFycmF5IGFzIChEYXRlIHwgbnVsbClbXTtcbiAgICAgICAgICAgIGNvbnN0IGFycm93ID0gJ1xcdTI3OTQnO1xuXG4gICAgLy8gU2hvdyBqdXN0IHRoZSBmaXJzdCBkYXRlIHdpdGggYW4gYXJyb3cgaWYgb25seSBmaXJzdCBkYXRlIGlzIHNlbGVjdGVkXG4gICAgaWYgKHN0YXJ0ICYmICFlbmQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0U3RyID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc3RhcnQsICdNTS9kZC95eXl5Jyk7XG4gICAgICByZXR1cm4gYCR7c3RhcnRTdHJ9ICR7YXJyb3d9IGA7XG4gICAgfVxuICAgIFxuICAgIC8vIFNob3cgdGhlIGNvbXBsZXRlIHJhbmdlIGlmIGJvdGggZGF0ZXMgYXJlIHNlbGVjdGVkXG4gICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgICAgY29uc3Qgc3RhcnRTdHIgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShzdGFydCwgJ01NL2RkL3l5eXknKTtcbiAgICAgIGNvbnN0IGVuZFN0ciA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGVuZCwgJ01NL2RkL3l5eXknKTtcbiAgICAgIHJldHVybiBgJHtzdGFydFN0cn0gJHthcnJvd30gJHtlbmRTdHJ9YDtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgYXBwbHlQcmVzZXQocHJlc2V0OiAndG9kYXknfCd5ZXN0ZXJkYXknfCdsYXN0N2RheXMnfCdsYXN0MzBkYXlzJ3wnbGFzdDNtb250aHMnfCdsYXN0Nm1vbnRocycpIHtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgbGV0IHN0YXJ0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGVuZDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICAgIHN3aXRjaCAocHJlc2V0KSB7XG4gICAgICBjYXNlICd0b2RheSc6XG4gICAgICAgIHN0YXJ0ID0gZW5kID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSwgdG9kYXkuZ2V0RGF0ZSgpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd5ZXN0ZXJkYXknOlxuICAgICAgICBjb25zdCB5ID0gbmV3IERhdGUodG9kYXkpO1xuICAgICAgICB5LnNldERhdGUoeS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgc3RhcnQgPSBlbmQgPSBuZXcgRGF0ZSh5LmdldEZ1bGxZZWFyKCksIHkuZ2V0TW9udGgoKSwgeS5nZXREYXRlKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xhc3Q3ZGF5cyc6IHtcbiAgICAgICAgZW5kID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSwgdG9kYXkuZ2V0RGF0ZSgpKTtcbiAgICAgICAgc3RhcnQgPSBuZXcgRGF0ZShlbmQpO1xuICAgICAgICBzdGFydC5zZXREYXRlKGVuZC5nZXREYXRlKCkgLSA2KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdsYXN0MzBkYXlzJzoge1xuICAgICAgICBlbmQgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCB0b2RheS5nZXREYXRlKCkpO1xuICAgICAgICBzdGFydCA9IG5ldyBEYXRlKGVuZCk7XG4gICAgICAgIHN0YXJ0LnNldERhdGUoZW5kLmdldERhdGUoKSAtIDI5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdsYXN0M21vbnRocyc6IHtcbiAgICAgICAgZW5kID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSwgdG9kYXkuZ2V0RGF0ZSgpKTtcbiAgICAgICAgc3RhcnQgPSBuZXcgRGF0ZShlbmQpO1xuICAgICAgICBzdGFydC5zZXRNb250aChlbmQuZ2V0TW9udGgoKSAtIDMpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2xhc3Q2bW9udGhzJzoge1xuICAgICAgICBlbmQgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCB0b2RheS5nZXREYXRlKCkpO1xuICAgICAgICBzdGFydCA9IG5ldyBEYXRlKGVuZCk7XG4gICAgICAgIHN0YXJ0LnNldE1vbnRoKGVuZC5nZXRNb250aCgpIC0gNik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChzdGFydCAmJiBlbmQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gW3N0YXJ0LCBlbmRdO1xuICAgICAgdGhpcy5tb2RlbERhdGUgPSBbc3RhcnQsIGVuZF07XG4gICAgICBpZih0aGlzLnByZXNlcnZlUHJlc2V0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gW3N0YXJ0LCBlbmQsIHsgcHJlc2V0czogcHJlc2V0IH1dO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRlUmFuZ2VDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0ID0gcHJlc2V0O1xuICAgICAgdGhpcy5jdXN0b21SYW5nZU1vZGUgPSBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHsgdGhpcy5vdmVybGF5UGFuZWw/LmhpZGUoKTsgfSBjYXRjaCAoZSkge31cbiAgICAvLyBlbnN1cmUgd2UgdXBkYXRlIHN0YXJ0L2VuZCBjbGFzc2VzIGFmdGVyIGFwcGx5aW5nIGEgcHJlc2V0XG4gICAgdGhpcy5fc2NoZWR1bGVVcGRhdGUoKTtcbiAgfVxuXG4gIG9uRGF0ZVJhbmdlQ2hhbmdlKGRhdGVSYW5nZTogRGF0ZVtdIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZVJhbmdlQ2hhbmdlLmVtaXQoZGF0ZVJhbmdlKTtcbiAgICBpZiAoZGF0ZVJhbmdlICYmIEFycmF5LmlzQXJyYXkoZGF0ZVJhbmdlKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFByZXNldCA9IHRoaXMuZGV0ZWN0UHJlc2V0KGRhdGVSYW5nZVswXSwgZGF0ZVJhbmdlWzFdKTtcbiAgICAgIHRoaXMuY3VzdG9tUmFuZ2VNb2RlID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICghZGF0ZVJhbmdlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0ID0gbnVsbDtcbiAgICAgIHRoaXMuY3VzdG9tUmFuZ2VNb2RlID0gZmFsc2U7XG4gICAgfVxuICB0aGlzLl9zY2hlZHVsZVVwZGF0ZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3RvcENhbGVuZGFyT2JzZXJ2ZXJzKCk7XG4gICAgdGhpcy5fY2FuY2VsU2NoZWR1bGVkVXBkYXRlKCk7XG4gIH1cblxuICAvLyBXYWxrIHRoZSByZW5kZXJlZCBjYWxlbmRhciBET00ocykgKG92ZXJsYXkgKyBpbmxpbmUpIGFuZCBhZGQgc3RhcnQtcmFuZ2UvZW5kLXJhbmdlIGNsYXNzZXNcbiAgcHJpdmF0ZSBfdXBkYXRlU3RhcnRFbmRSYW5nZUNsYXNzZXMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhbGVuZGFyRWxlbWVudHMgPSB0aGlzLl9nZXRDYWxlbmRhckVsZW1lbnRzKCk7XG5cbiAgICAgIGNhbGVuZGFyRWxlbWVudHMuZm9yRWFjaCgoY2FsRWw6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgLy8gUmVtb3ZlIGV4aXN0aW5nIGNsYXNzZXMgZnJvbSBzcGFucyBmaXJzdFxuICAgICAgICBjb25zdCBhbGxTcGFucyA9IGNhbEVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkID4gc3BhbicpO1xuICAgICAgICBhbGxTcGFucy5mb3JFYWNoKChzcGFuKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhzcGFuLCAnc3RhcnQtcmFuZ2UnKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHNwYW4sICdlbmQtcmFuZ2UnKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHNwYW4sICdiZXR3ZWVuLXJhbmdlJyk7XG4gICAgICAgIH0pO1xuXG4gIC8vIENvbGxlY3Qgc3Bhbi9kYXRlIHBhaXJzLCBwcmVmZXIgZGF0YS1kYXRlIGF0dHJpYnV0ZVxuICAvLyBDYWNoZSBoZWFkZXIgbW9udGgveWVhciBmb3IgdGhpcyBjYWxlbmRhciB0byBhdm9pZCBxdWVyeWluZyBwZXItc3BhblxuICBjb25zdCBwYW5lbE5vZGUgPSBjYWxFbC5jbG9zZXN0KCcucC1kYXRlcGlja2VyJykgfHwgY2FsRWw7XG4gIGNvbnN0IGhlYWRlck1vbnRoTm9kZSA9IChwYW5lbE5vZGUgYXMgRWxlbWVudCkucXVlcnlTZWxlY3RvcignLnAtZGF0ZXBpY2tlci1oZWFkZXIgLnAtZGF0ZXBpY2tlci10aXRsZSAucC1kYXRlcGlja2VyLW1vbnRoJyk7XG4gIGNvbnN0IGhlYWRlclllYXJOb2RlID0gKHBhbmVsTm9kZSBhcyBFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCcucC1kYXRlcGlja2VyLWhlYWRlciAucC1kYXRlcGlja2VyLXRpdGxlIC5wLWRhdGVwaWNrZXIteWVhcicpO1xuICBjb25zdCBoZWFkZXJNb250aElkeCA9IGhlYWRlck1vbnRoTm9kZSAmJiBoZWFkZXJNb250aE5vZGUudGV4dENvbnRlbnQgPyAodGhpcy5lbkxvY2FsZS5tb250aE5hbWVzIHx8IFtdKS5pbmRleE9mKGhlYWRlck1vbnRoTm9kZS50ZXh0Q29udGVudC50cmltKCkpIDogTmFOO1xuICBjb25zdCBoZWFkZXJZZWFyVmFsID0gaGVhZGVyWWVhck5vZGUgJiYgaGVhZGVyWWVhck5vZGUudGV4dENvbnRlbnQgPyBwYXJzZUludChoZWFkZXJZZWFyTm9kZS50ZXh0Q29udGVudC50cmltKCksIDEwKSA6IE5hTjtcbiAgICAgICAgY29uc3QgaXRlbXM6IHsgZHQ6IERhdGU7IHNwYW46IEVsZW1lbnQ7IHRkPzogSFRNTEVsZW1lbnQgfCBudWxsIH1bXSA9IFtdO1xuICAgICAgICBjb25zdCBzcGFucyA9IGNhbEVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkID4gc3Bhbi5wLWhpZ2hsaWdodCcpO1xuICAgICAgICBzcGFucy5mb3JFYWNoKChzcGFuKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGQgPSBzcGFuLmNsb3Nlc3QoJ3RkJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgICAgICAgIC8vIFRyeSB0byByZWFkIGRhdGEtZGF0ZSBhdHRyaWJ1dGUsIHdoaWNoIHNvbWUgUHJpbWVORyB2ZXJzaW9ucyByZW5kZXIgb24gc3Bhbi90ZFxuICAgICAgICAgIGxldCBkYXRhRGF0ZSA9IHNwYW4uZ2V0QXR0cmlidXRlKCdkYXRhLWRhdGUnKTtcbiAgICAgICAgICBpZiAoIWRhdGFEYXRlICYmIHRkKSBkYXRhRGF0ZSA9IHRkLmdldEF0dHJpYnV0ZSgnZGF0YS1kYXRlJyk7XG4gICAgICAgICAgaWYgKGRhdGFEYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGRhdGFEYXRlLnNwbGl0KCctJykubWFwKChwKSA9PiBwYXJzZUludChwLCAxMCkpO1xuICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAzICYmIHBhcnRzLmV2ZXJ5KChuKSA9PiAhaXNOYU4obikpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IFt5LCBtLCBkXSA9IHBhcnRzO1xuICAgICAgICAgICAgICBjb25zdCBkdCA9IG5ldyBEYXRlKHksIG0gLSAxLCBkKTtcbiAgICAgICAgICAgICAgaXRlbXMucHVzaCh7IGR0LCB0ZCwgc3BhbiB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBGYWxsYmFjazogcGFyc2UgZGF5IG51bWJlciBhbmQgaW5mZXIgbW9udGgveWVhciBmcm9tIG5lYXJieSBoZWFkZXIgaW4gdGhlIHNhbWUgLnAtZGF0ZXBpY2tlclxuICAgICAgICAgIGNvbnN0IGRheVRleHQgPSAoc3Bhbi50ZXh0Q29udGVudCB8fCAnJykudHJpbSgpO1xuICAgICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KGRheVRleHQsIDEwKTtcbiAgICAgICAgICBpZiAoIWlzTmFOKGRheSkgJiYgdGQpIHtcbiAgICAgICAgICAgIC8vIFVzZSBjYWNoZWQgaGVhZGVyIG1vbnRoL3llYXIgd2hlbiBhdmFpbGFibGVcbiAgICAgICAgICAgIGlmICghaXNOYU4oaGVhZGVyTW9udGhJZHgpICYmICFpc05hTihoZWFkZXJZZWFyVmFsKSkge1xuICAgICAgICAgICAgICBjb25zdCBkdCA9IG5ldyBEYXRlKGhlYWRlclllYXJWYWwsIGhlYWRlck1vbnRoSWR4LCBkYXkpO1xuICAgICAgICAgICAgICBpdGVtcy5wdXNoKHsgZHQsIHRkLCBzcGFuIH0pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGxhc3QgcmVzb3J0OiBpZ25vcmUgc3BhbiBpZiBkYXRlIGNhbm5vdCBiZSBkZXRlcm1pbmVkXG4gICAgICAgIH0pO1xuXG4gIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICAvLyBTb3J0IGl0ZW1zIHRvIGZpbmQgbWluL21heCAoc3RhcnQgJiBlbmQpXG4gICAgICAgIGl0ZW1zLnNvcnQoKGEsIGIpID0+IGEuZHQuZ2V0VGltZSgpIC0gYi5kdC5nZXRUaW1lKCkpO1xuICAgICAgICBjb25zdCBkZXRlY3RlZFN0YXJ0ID0gaXRlbXNbMF0uZHQ7XG4gICAgICAgIGNvbnN0IGRldGVjdGVkRW5kID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0uZHQ7XG5cbiAgLy8gUHJlZmVycmVkIHJhbmdlIGlzIG1vZGVsRGF0ZS9zZWxlY3RlZERhdGUgaWYgcHJlc2VudFxuICBjb25zdCByYW5nZSA9ICh0aGlzLnNlbGVjdGVkRGF0ZSAmJiB0aGlzLnNlbGVjdGVkRGF0ZS5sZW5ndGggPT09IDIpID8gdGhpcy5zZWxlY3RlZERhdGUgOiAodGhpcy5tb2RlbERhdGUgJiYgdGhpcy5tb2RlbERhdGUubGVuZ3RoID09PSAyID8gdGhpcy5tb2RlbERhdGUgOiBbZGV0ZWN0ZWRTdGFydCwgZGV0ZWN0ZWRFbmRdKTtcbiAgY29uc3Qgc3RhcnREYXRlID0gcmFuZ2UgJiYgcmFuZ2VbMF0gPyB0aGlzLm5vcm1hbGl6ZURhdGUocmFuZ2VbMF0gYXMgRGF0ZSkgOiBkZXRlY3RlZFN0YXJ0O1xuICBjb25zdCBlbmREYXRlID0gcmFuZ2UgJiYgcmFuZ2VbMV0gPyB0aGlzLm5vcm1hbGl6ZURhdGUocmFuZ2VbMV0gYXMgRGF0ZSkgOiBkZXRlY3RlZEVuZDtcblxuICAgICAgICAvLyBGb3IgZWFjaCBpdGVtLCBhZGQgc3RhcnQtcmFuZ2UsZW5kLXJhbmdlLCBvciBiZXR3ZWVuLXJhbmdlIGJhc2VkIG9uIGRhdGVcbiAgICAgICAgY29uc3Qgc1RpbWUgPSBzdGFydERhdGUuZ2V0VGltZSgpO1xuICAgICAgICBjb25zdCBlVGltZSA9IGVuZERhdGUuZ2V0VGltZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0IG9mIGl0ZW1zKSB7XG4gICAgICAgICAgY29uc3QgdCA9IGl0LmR0LmdldFRpbWUoKTtcbiAgICAgICAgICBpZiAoc1RpbWUgPT09IGVUaW1lICYmIHQgPT09IHNUaW1lKSB7XG4gICAgICAgICAgICAvLyBzaW5nbGUtZGF5IHJhbmdlLCBtYXJrIGJvdGggc3RhcnQgJiBlbmRcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoaXQuc3BhbiwgJ3N0YXJ0LXJhbmdlJyk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGl0LnNwYW4sICdlbmQtcmFuZ2UnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHQgPT09IHNUaW1lKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGl0LnNwYW4sICdzdGFydC1yYW5nZScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodCA9PT0gZVRpbWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoaXQuc3BhbiwgJ2VuZC1yYW5nZScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodCA+IHNUaW1lICYmIHQgPCBlVGltZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhpdC5zcGFuLCAnYmV0d2Vlbi1yYW5nZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JlIERPTSBlcnJvcnMgKGUuZy4sIHNlcnZlci1zaWRlIHJlbmRlcmluZyAvIG1pc3NpbmcgZWxlbWVudHMpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc29EYXRlKGQ6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHkgPSBkLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgbSA9IFN0cmluZyhkLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IGRheSA9IFN0cmluZyhkLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICByZXR1cm4gYCR7eX0tJHttfS0ke2RheX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZEVsZW1lbnRCeURhdGUoZGF0ZT86IERhdGUpOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHkgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgbSA9IGRhdGUuZ2V0TW9udGgoKSArIDE7IC8vIDEuLjEyXG4gICAgY29uc3QgZCA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgIGNvbnN0IGlzb1VucGFkZGVkID0gYCR7eX0tJHttfS0ke2R9YDsgLy8gZS5nLiAyMDI1LTExLTFcbiAgICBjb25zdCBpc29QYWRkZWQgPSBgJHt5fS0ke1N0cmluZyhtKS5wYWRTdGFydCgyLCAnMCcpfS0ke1N0cmluZyhkKS5wYWRTdGFydCgyLCAnMCcpfWA7IC8vIDIwMjUtMTEtMDFcbiAgICBjb25zdCBzZWxlY3RvcnMgPSBbYFtkYXRhLWRhdGU9XCIke2lzb1VucGFkZGVkfVwiXWAsIGBbZGF0YS1kYXRlPVwiJHtpc29QYWRkZWR9XCJdYF07XG4gICAgZm9yIChjb25zdCBzZWwgb2Ygc2VsZWN0b3JzKSB7XG4gICAgICBjb25zdCBmb3VuZEluT3ZlcmxheSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5hdG9taXgtb3ZlcmxheS1jYWxlbmRhciAke3NlbH1gKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgICBpZiAoZm91bmRJbk92ZXJsYXkpIHJldHVybiBmb3VuZEluT3ZlcmxheS5jbG9zZXN0KCd0ZCcpIGFzIEhUTUxFbGVtZW50IHwgbnVsbCB8fCBmb3VuZEluT3ZlcmxheTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzZWwgb2Ygc2VsZWN0b3JzKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZC5jbG9zZXN0KCd0ZCcpIGFzIEhUTUxFbGVtZW50IHwgbnVsbCB8fCBmb3VuZDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgX3N0YXJ0Q2FsZW5kYXJPYnNlcnZlcnMoKTogdm9pZCB7XG4gICAgLy8gc3RvcCBmaXJzdCB0byBhdm9pZCBkdXBsaWNhdGVzXG4gICAgdGhpcy5fc3RvcENhbGVuZGFyT2JzZXJ2ZXJzKCk7XG4gICAgdHJ5IHtcbiAgY29uc3QgY2FsRWxzID0gdGhpcy5fZ2V0Q2FsZW5kYXJFbGVtZW50cygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLm92ZXJsYXlQYW5lbCBhcyBhbnk7XG4gICAgICAgIGlmIChwYW5lbCAmJiBwYW5lbC5lbCAmJiBwYW5lbC5lbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgY29uc3QgZWwgPSBwYW5lbC5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRhdGVwaWNrZXInKTtcbiAgICAgICAgICBpZiAoZWwpIGNhbEVscy5wdXNoKGVsIGFzIEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgICBjYWxFbHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgY29uc3Qgb2JzID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgIC8vIFJlYXBwbHkgY2xhc3NlcyBhZnRlciBET00gY2hhbmdlcyAoZGVib3VuY2VkKVxuICAgICAgICAgIHRoaXMuX3NjaGVkdWxlVXBkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBXYXRjaCBjaGlsZExpc3QsIHN1YnRyZWUgYW5kIGNsYXNzIGF0dHJpYnV0ZSBjaGFuZ2VzIChzcGFuIGNsYXNzIHRvZ2dsZXMgYXJlIGNvbW1vbilcbiAgICAgICAgb2JzLm9ic2VydmUoZWwsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnY2xhc3MnXSB9KTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJPYnNlcnZlcnMucHVzaChvYnMpO1xuICAgICAgICB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLnB1c2goZWwpO1xuICAgICAgICAvLyBBbHNvIG9ic2VydmUgcGFyZW50IC0gaWYgUHJpbWVORyByZXBsYWNlcyB0aGUgLnAtZGF0ZXBpY2tlciBlbGVtZW50LCBwYXJlbnQgY2hpbGRMaXN0IGNoYW5nZXMgd2lsbCBmaXJlXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGlmIChwYXJlbnQgJiYgdGhpcy5fb2JzZXJ2ZWRQYXJlbnRFbGVtZW50cy5pbmRleE9mKHBhcmVudCkgPT09IC0xKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50T2JzID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgLy8gcmVhdHRhY2ggb2JzZXJ2ZXJzIHNpbmNlIHRoZSBjYWxFbCBtYXkgaGF2ZSBiZWVuIHJlcGxhY2VkXG4gICAgICAgICAgICB0aGlzLl9zY2hlZHVsZVVwZGF0ZSgpO1xuICAgICAgICAgICAgLy8gZGV0YWNoIGFuZCByZS1hdHRhY2ggb2JzZXJ2ZXJzIGFmdGVyIERPTSBzZXR0bGVzXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9wQ2FsZW5kYXJPYnNlcnZlcnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydENhbGVuZGFyT2JzZXJ2ZXJzKCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxuICAgICAgICAgICAgfSwgMTAwKTsgLy8gc2xpZ2h0bHkgbGFyZ2VyIGRlbGF5IHRvIGxldCBQcmltZU5HIGZpbmlzaCB0aGUgbW9udGggcmVuZGVyaW5nXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcGFyZW50T2JzLm9ic2VydmUocGFyZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogZmFsc2UgfSk7XG4gICAgICAgICAgdGhpcy5fcGFyZW50T2JzZXJ2ZXJzLnB1c2gocGFyZW50T2JzKTtcbiAgICAgICAgICB0aGlzLl9vYnNlcnZlZFBhcmVudEVsZW1lbnRzLnB1c2gocGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc3RvcENhbGVuZGFyT2JzZXJ2ZXJzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9jYWxlbmRhck9ic2VydmVycy5mb3JFYWNoKChvYnMpID0+IG9icy5kaXNjb25uZWN0KCkpO1xuICAgICAgdGhpcy5fcGFyZW50T2JzZXJ2ZXJzLmZvckVhY2goKG9icykgPT4gb2JzLmRpc2Nvbm5lY3QoKSk7XG4gICAgfSBjYXRjaCAoZSkgeyB9XG4gICAgdGhpcy5fY2FsZW5kYXJPYnNlcnZlcnMgPSBbXTtcbiAgICB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzID0gW107XG4gICAgdGhpcy5fcGFyZW50T2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy5fb2JzZXJ2ZWRQYXJlbnRFbGVtZW50cyA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2NoZWR1bGVVcGRhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3VwZGF0ZVJhZklkICE9IG51bGwpIHJldHVybjsgLy8gYWxyZWFkeSBzY2hlZHVsZWRcbiAgICB0aGlzLl91cGRhdGVSYWZJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGhpcy5fdXBkYXRlUmFmSWQgPSBudWxsO1xuICAgICAgdGhpcy5fdXBkYXRlU3RhcnRFbmRSYW5nZUNsYXNzZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NhbmNlbFNjaGVkdWxlZFVwZGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdXBkYXRlUmFmSWQgIT0gbnVsbCkge1xuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3VwZGF0ZVJhZklkKTtcbiAgICAgIHRoaXMuX3VwZGF0ZVJhZklkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRDYWxlbmRhckVsZW1lbnRzKCk6IEVsZW1lbnRbXSB7XG4gICAgY29uc3QgY2FsRWxzOiBFbGVtZW50W10gPSBbXTtcbiAgICBjb25zdCBvdmVybGF5Q2FsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmF0b21peC1vdmVybGF5LWNhbGVuZGFyIC5wLWRhdGVwaWNrZXInKTtcbiAgICBjb25zdCBpbmxpbmVDYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaW5saW5lLWNhbGVuZGFyIC5wLWRhdGVwaWNrZXInKTtcbiAgICBpZiAob3ZlcmxheUNhbCkgY2FsRWxzLnB1c2gob3ZlcmxheUNhbCk7XG4gICAgaWYgKGlubGluZUNhbCkgY2FsRWxzLnB1c2goaW5saW5lQ2FsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLm92ZXJsYXlQYW5lbCBhcyBhbnk7XG4gICAgICBpZiAocGFuZWwgJiYgcGFuZWwuZWwgJiYgcGFuZWwuZWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBjb25zdCBlbCA9IHBhbmVsLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnAtZGF0ZXBpY2tlcicpO1xuICAgICAgICBpZiAoZWwpIGNhbEVscy5wdXNoKGVsIGFzIEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHsgfVxuICAgIC8vIHJlbW92ZSBkdXBsaWNhdGVzXG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChjYWxFbHMpKTtcbiAgfVxufVxuIiwiPGRpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbmxpbmU7IGVsc2UgaW5saW5lQmxvY2tcIj5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInN0eWxlQ2xhc3NcIiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW25nQ2xhc3NdPVwiaW5wdXRTdHlsZUNsYXNzXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgW3ZhbHVlXT1cImdldERhdGVSYW5nZUxhYmVsKClcIlxuICAgICAgICByZWFkb25seVxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAoY2xpY2spPVwib3ZlcmxheVBhbmVsPy50b2dnbGUoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uSW5wdXRLZXlEb3duKCRldmVudClcIlxuICAgICAgLz5cbiAgICAgIDxpIGNsYXNzPVwicGkgcGktY2FsZW5kYXIgaW5wdXQtaWNvblwiIHRpdGxlPVwiT3BlbiBjYWxlbmRhclwiIChjbGljayk9XCJvdmVybGF5UGFuZWw/LnRvZ2dsZSgkZXZlbnQpXCI+PC9pPlxuICAgICAgPGkgKm5nSWY9XCJoYXNTZWxlY3Rpb25cIiBjbGFzcz1cInBpIHBpLXRpbWVzIGlucHV0LWNsZWFyLWljb25cIiB0aXRsZT1cIkNsZWFyXCIgdGFiaW5kZXg9XCIwXCIgKGNsaWNrKT1cImNsZWFyQW5kU3RvcCgkZXZlbnQpXCIgKGtleWRvd24uZW50ZXIpPVwiY2xlYXJBbmRTdG9wKCRldmVudClcIiAoa2V5ZG93bi5zcGFjZSk9XCJjbGVhckFuZFN0b3AoJGV2ZW50KVwiPjwvaT5cblxuICAgIDwvZGl2PlxuXG4gICAgPHAtb3ZlcmxheVBhbmVsICNvdmVybGF5UGFuZWwgW2Rpc21pc3NhYmxlXT1cInRydWVcIiBhcHBlbmRUbz1cImJvZHlcIiBzdHlsZUNsYXNzPVwiYXRvbWl4LWRhdGUtcmFuZ2Utb3ZlcmxheVwiIChvblNob3cpPVwib25PdmVybGF5U2hvdygpXCIgKG9uSGlkZSk9XCJvbk92ZXJsYXlIaWRlKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5LWlubmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5LWxlZnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJlc2V0LWxpc3RcIj5cbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInByZXNldC1idG5cIiAoY2xpY2spPVwiYXBwbHlQcmVzZXQoJ3RvZGF5JylcIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBzZWxlY3RlZFByZXNldCA9PT0gJ3RvZGF5JyB9XCIgbGFiZWw9XCJUb2RheVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicHJlc2V0LWJ0blwiIChjbGljayk9XCJhcHBseVByZXNldCgneWVzdGVyZGF5JylcIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBzZWxlY3RlZFByZXNldCA9PT0gJ3llc3RlcmRheScgfVwiIGxhYmVsPVwiWWVzdGVyZGF5XCI+PC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwcmVzZXQtYnRuXCIgKGNsaWNrKT1cImFwcGx5UHJlc2V0KCdsYXN0N2RheXMnKVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IHNlbGVjdGVkUHJlc2V0ID09PSAnbGFzdDdkYXlzJyB9XCIgbGFiZWw9XCJMYXN0IDcgZGF5c1wiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicHJlc2V0LWJ0blwiIChjbGljayk9XCJhcHBseVByZXNldCgnbGFzdDMwZGF5cycpXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogc2VsZWN0ZWRQcmVzZXQgPT09ICdsYXN0MzBkYXlzJyB9XCIgbGFiZWw9XCJMYXN0IDMwIGRheXNcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInByZXNldC1idG5cIiAoY2xpY2spPVwiYXBwbHlQcmVzZXQoJ2xhc3QzbW9udGhzJylcIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBzZWxlY3RlZFByZXNldCA9PT0gJ2xhc3QzbW9udGhzJyB9XCIgbGFiZWw9XCJMYXN0IDMgbW9udGhzXCI+PC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwcmVzZXQtYnRuXCIgKGNsaWNrKT1cImFwcGx5UHJlc2V0KCdsYXN0Nm1vbnRocycpXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogc2VsZWN0ZWRQcmVzZXQgPT09ICdsYXN0Nm1vbnRocycgfVwiIGxhYmVsPVwiTGFzdCA2IG1vbnRoc1wiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPGEgY2xhc3M9XCJyZXNldC1saW5rXCIgKGNsaWNrKT1cInJlc2V0QW5kQ2xvc2UoKVwiPlJlc2V0PC9hPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXktcmlnaHRcIj5cbiAgICAgICAgICA8cC1jYWxlbmRhciBbKG5nTW9kZWwpXT1cIm1vZGVsRGF0ZVwiIFtzZWxlY3Rpb25Nb2RlXT1cIidyYW5nZSdcIiBbaW5saW5lXT1cInRydWVcIiBbZGF0ZUZvcm1hdF09XCInbW0vZGQveXl5eSdcIiBbc2hvd090aGVyTW9udGhzXT1cInRydWVcIiBbbG9jYWxlXT1cImVuTG9jYWxlXCIgW3Nob3dJY29uXT1cImZhbHNlXCIgW3N0eWxlQ2xhc3NdPVwiJ2F0b21peC1vdmVybGF5LWNhbGVuZGFyJ1wiIChuZ01vZGVsQ2hhbmdlKT1cIm9uTW9kZWxDaGFuZ2UoJGV2ZW50KVwiIChvbk1vbnRoQ2hhbmdlKT1cIm9uQ2FsZW5kYXJWaWV3Q2hhbmdlZCgkZXZlbnQpXCIgKG9uWWVhckNoYW5nZSk9XCJvbkNhbGVuZGFyVmlld0NoYW5nZWQoJGV2ZW50KVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFttYXhEYXRlXT1cIm1heERhdGVcIiBbbWluRGF0ZV09XCJtaW5EYXRlXCI+PC9wLWNhbGVuZGFyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvcC1vdmVybGF5UGFuZWw+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy10ZW1wbGF0ZSAjaW5saW5lQmxvY2s+XG4gICAgPGRpdiBbbmdDbGFzc109XCJzdHlsZUNsYXNzXCIgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgcElucHV0VGV4dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cImlucHV0U3R5bGVDbGFzc1wiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gIFt2YWx1ZV09XCJnZXREYXRlUmFuZ2VMYWJlbCgpXCJcbiAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgKGtleWRvd24pPVwib25JbnB1dEtleURvd24oJGV2ZW50KVwiXG4gICAgICAvPlxuICAgICAgPGkgY2xhc3M9XCJwaSBwaS1jYWxlbmRhciBpbnB1dC1pY29uXCIgdGl0bGU9XCJPcGVuIGNhbGVuZGFyXCI+PC9pPlxuICAgICAgPGkgKm5nSWY9XCJoYXNTZWxlY3Rpb25cIiBjbGFzcz1cInBpIHBpLXRpbWVzIGlucHV0LWNsZWFyLWljb25cIiB0aXRsZT1cIkNsZWFyXCIgdGFiaW5kZXg9XCIwXCIgKGNsaWNrKT1cImNsZWFyQW5kU3RvcCgkZXZlbnQpXCIgKGtleWRvd24uZW50ZXIpPVwiY2xlYXJBbmRTdG9wKCRldmVudClcIiAoa2V5ZG93bi5zcGFjZSk9XCJjbGVhckFuZFN0b3AoJGV2ZW50KVwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheS1pbm5lciBpbmxpbmUtY2FsZW5kYXIgZmxleFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXktbGVmdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJlc2V0LWxpc3RcIj5cbiAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwcmVzZXQtYnRuXCIgKGNsaWNrKT1cImFwcGx5UHJlc2V0KCd0b2RheScpXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogc2VsZWN0ZWRQcmVzZXQgPT09ICd0b2RheScgfVwiIGxhYmVsPVwiVG9kYXlcIj48L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwcmVzZXQtYnRuXCIgKGNsaWNrKT1cImFwcGx5UHJlc2V0KCd5ZXN0ZXJkYXknKVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IHNlbGVjdGVkUHJlc2V0ID09PSAneWVzdGVyZGF5JyB9XCIgbGFiZWw9XCJZZXN0ZXJkYXlcIj48L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwcmVzZXQtYnRuXCIgKGNsaWNrKT1cImFwcGx5UHJlc2V0KCdsYXN0N2RheXMnKVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IHNlbGVjdGVkUHJlc2V0ID09PSAnbGFzdDdkYXlzJyB9XCIgbGFiZWw9XCJMYXN0IDcgZGF5c1wiPjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInByZXNldC1idG5cIiAoY2xpY2spPVwiYXBwbHlQcmVzZXQoJ2xhc3QzMGRheXMnKVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IHNlbGVjdGVkUHJlc2V0ID09PSAnbGFzdDMwZGF5cycgfVwiIGxhYmVsPVwiTGFzdCAzMCBkYXlzXCI+PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicHJlc2V0LWJ0blwiIChjbGljayk9XCJhcHBseVByZXNldCgnbGFzdDNtb250aHMnKVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IHNlbGVjdGVkUHJlc2V0ID09PSAnbGFzdDNtb250aHMnIH1cIiBsYWJlbD1cIkxhc3QgMyBtb250aHNcIj48L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwcmVzZXQtYnRuXCIgKGNsaWNrKT1cImFwcGx5UHJlc2V0KCdsYXN0Nm1vbnRocycpXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogc2VsZWN0ZWRQcmVzZXQgPT09ICdsYXN0Nm1vbnRocycgfVwiIGxhYmVsPVwiTGFzdCA2IG1vbnRoc1wiPjwvYnV0dG9uPlxuICAgICAgICAgIDxhIGNsYXNzPVwicmVzZXQtbGlua1wiIChjbGljayk9XCJyZXNldEFuZENsb3NlKClcIj5SZXNldDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm92ZXJsYXktcmlnaHRcIj5cbiAgPHAtY2FsZW5kYXIgWyhuZ01vZGVsKV09XCJtb2RlbERhdGVcIiBbc2VsZWN0aW9uTW9kZV09XCIncmFuZ2UnXCIgW2lubGluZV09XCJ0cnVlXCIgW2RhdGVGb3JtYXRdPVwiJ21tL2RkL3l5eXknXCIgW3Nob3dPdGhlck1vbnRoc109XCJ0cnVlXCIgW2xvY2FsZV09XCJlbkxvY2FsZVwiIFtzaG93SWNvbl09XCJmYWxzZVwiIFtzdHlsZUNsYXNzXT1cIidhdG9taXgtb3ZlcmxheS1jYWxlbmRhcidcIiAobmdNb2RlbENoYW5nZSk9XCJvbk1vZGVsQ2hhbmdlKCRldmVudClcIiAob25Nb250aENoYW5nZSk9XCJvbkNhbGVuZGFyVmlld0NoYW5nZWQoJGV2ZW50KVwiIChvblllYXJDaGFuZ2UpPVwib25DYWxlbmRhclZpZXdDaGFuZ2VkKCRldmVudClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbbWF4RGF0ZV09XCJtYXhEYXRlXCIgW21pbkRhdGVdPVwibWluRGF0ZVwiPjwvcC1jYWxlbmRhcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
636
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRvbWl4LWRhdGVyYW5nZS1jYWxlbmRhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmltZWtpdC9zcmMvbGliL2xpYi9hdG9taXgtZGF0ZXJhbmdlLWNhbGVuZGFyL2F0b21peC1kYXRlcmFuZ2UtY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJpbWVraXQvc3JjL2xpYi9saWIvYXRvbWl4LWRhdGVyYW5nZS1jYWxlbmRhci9hdG9taXgtZGF0ZXJhbmdlLWNhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUEwRCxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFTMUksTUFBTSxPQUFPLGdDQUFnQztJQTJFdkI7SUFBNEI7SUExRXZDLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUN4QixhQUFhLEdBQVksT0FBTyxDQUFDO0lBQ2pDLGVBQWUsR0FBVyxFQUFFLENBQUM7SUFDN0IsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFlBQVksR0FBUSxJQUFJLENBQUM7SUFDekIsT0FBTyxDQUFRO0lBQ2YsT0FBTyxDQUFRO0lBQ2YsYUFBYSxHQUE4RixJQUFJLENBQUM7SUFDaEgsY0FBYyxHQUFZLEtBQUssQ0FBQztJQUV6QyxlQUFlLEdBQVksS0FBSyxDQUFDO0lBQ2pDLGNBQWMsR0FBa0IsSUFBSSxDQUFDLENBQUMsdUdBQXVHO0lBQ2xILFlBQVksQ0FBZ0I7SUFDN0MsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFFcEQsdUdBQXVHO0lBQ3ZHLFNBQVMsR0FBa0IsSUFBSSxDQUFDO0lBRWhDLFFB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QW1CLENBQUM7WUFDdkMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksRUFBRTtvQkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQWEsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDZixvQkFBb0I7UUFDcEIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQzt3R0F2a0JVLGdDQUFnQzs0RkFBaEMsZ0NBQWdDLDJpQkNUN0MsbWtMQXdFQTs7NEZEL0RhLGdDQUFnQztrQkFMNUMsU0FBUzsrQkFDRSwyQkFBMkI7cUdBSzVCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFJcUIsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUNmLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE92ZXJsYXlQYW5lbCB9IGZyb20gJ3ByaW1lbmcvb3ZlcmxheXBhbmVsJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXRvbWl4LWRhdGVyYW5nZS1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdG9taXgtZGF0ZXJhbmdlLWNhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXRvbWl4LWRhdGVyYW5nZS1jYWxlbmRhci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBdG9taXhEYXRlcmFuZ2VDYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHN0eWxlQ2xhc3M6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBzZWxlY3Rpb25Nb2RlOiAncmFuZ2UnID0gJ3JhbmdlJztcbiAgQElucHV0KCkgaW5wdXRTdHlsZUNsYXNzOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgaW5saW5lOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNlbGVjdGVkRGF0ZTogYW55ID0gbnVsbDtcbiAgQElucHV0KCkgbWF4RGF0ZSE6IERhdGU7XG4gIEBJbnB1dCgpIG1pbkRhdGUhOiBEYXRlO1xuICBASW5wdXQoKSBkZWZhdWx0UHJlc2V0OiAndG9kYXknIHwgJ3llc3RlcmRheScgfCAnbGFzdDdkYXlzJyB8ICdsYXN0MzBkYXlzJyB8ICdsYXN0M21vbnRocycgfCAnbGFzdDZtb250aHMnIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIHByZXNlcnZlUHJlc2V0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgY3VzdG9tUmFuZ2VNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGVkUHJlc2V0OiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gJ3RvZGF5JyB8ICd5ZXN0ZXJkYXknIHwgJ2xhc3Q3ZGF5cycgfCAnbGFzdDMwZGF5cycgfCAnbGFzdDNtb250aHMnIHwgJ2xhc3Q2bW9udGhzJyB8ICdjdXN0b20nIHwgbnVsbFxuICBAVmlld0NoaWxkKCdvdmVybGF5UGFuZWwnKSBvdmVybGF5UGFuZWw/OiBPdmVybGF5UGFuZWw7XG4gIEBPdXRwdXQoKSBkYXRlUmFuZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvLyBpbnRlcm5hbCBtb2RlbCBib3VuZCB0byBwLWNhbGVuZGFyIHRvIGF2b2lkIGNoYW5naW5nIGV4dGVybmFsIHNlbGVjdGlvbiBkdXJpbmcgZmlyc3QtY2xpY2sgc2VsZWN0aW9uXG4gIG1vZGVsRGF0ZTogRGF0ZVtdIHwgbnVsbCA9IG51bGw7XG5cbiAgZW5Mb2NhbGUgPSB7XG4gICAgZmlyc3REYXlPZldlZWs6IDAsXG4gICAgZGF5TmFtZXM6IFtcbiAgICAgICdTdW5kYXknLFxuICAgICAgJ01vbmRheScsXG4gICAgICAnVHVlc2RheScsXG4gICAgICAnV2VkbmVzZGF5JyxcbiAgICAgICdUaHVyc2RheScsXG4gICAgICAnRnJpZGF5JyxcbiAgICAgICdTYXR1cmRheScsXG4gICAgXSxcbiAgICBkYXlOYW1lc1Nob3J0OiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxuICAgIGRheU5hbWVzTWluOiBbJ1N1JywgJ01vJywgJ1R1JywgJ1dlJywgJ1RoJywgJ0ZyJywgJ1NhJ10sXG4gICAgbW9udGhOYW1lczogW1xuICAgICAgJ0phbnVhcnknLFxuICAgICAgJ0ZlYnJ1YXJ5JyxcbiAgICAgICdNYXJjaCcsXG4gICAgICAnQXByaWwnLFxuICAgICAgJ01heScsXG4gICAgICAnSnVuZScsXG4gICAgICAnSnVseScsXG4gICAgICAnQXVndXN0JyxcbiAgICAgICdTZXB0ZW1iZXInLFxuICAgICAgJ09jdG9iZXInLFxuICAgICAgJ05vdmVtYmVyJyxcbiAgICAgICdEZWNlbWJlcicsXG4gICAgXSxcbiAgICBtb250aE5hbWVzU2hvcnQ6IFtcbiAgICAgICdKYW4nLFxuICAgICAgJ0ZlYicsXG4gICAgICAnTWFyJyxcbiAgICAgICdBcHInLFxuICAgICAgJ01heScsXG4gICAgICAnSnVuJyxcbiAgICAgICdKdWwnLFxuICAgICAgJ0F1ZycsXG4gICAgICAnU2VwJyxcbiAgICAgICdPY3QnLFxuICAgICAgJ05vdicsXG4gICAgICAnRGVjJyxcbiAgICBdLFxuICAgIHRvZGF5OiAnVG9kYXknLFxuICAgIGNsZWFyOiAnQ2xlYXInLFxuICB9O1xuXG4gIC8vIHRlbXBvcmFyeSBzdG9yYWdlIGZvciBvdmVybGF5IHNlc3Npb25cbiAgcHJpdmF0ZSBfb3ZlcmxheUluaXRpYWxEYXRlOiBEYXRlW10gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfb3ZlcmxheUluaXRpYWxQcmVzZXQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9jYWxlbmRhck9ic2VydmVyczogTXV0YXRpb25PYnNlcnZlcltdID0gW107XG4gIHByaXZhdGUgX29ic2VydmVkRWxlbWVudHM6IEVsZW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIF9wYXJlbnRPYnNlcnZlcnM6IE11dGF0aW9uT2JzZXJ2ZXJbXSA9IFtdO1xuICBwcml2YXRlIF9vYnNlcnZlZFBhcmVudEVsZW1lbnRzOiBFbGVtZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBfdXBkYXRlUmFmSWQ6IG51bWJlciB8IG51bGwgPSBudWxsOyAvLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgaWRcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZERhdGUgJiYgdGhpcy5kZWZhdWx0UHJlc2V0KSB7XG4gICAgICB0aGlzLmFwcGx5UHJlc2V0KHRoaXMuZGVmYXVsdFByZXNldCk7XG4gICAgfVxuICAgIC8vIGluaXRpYWxpemUgaW50ZXJuYWwgbW9kZWxcbiAgICB0aGlzLm1vZGVsRGF0ZSA9IHRoaXMuc2VsZWN0ZWREYXRlID8gWy4uLnRoaXMuc2VsZWN0ZWREYXRlXSA6IG51bGw7XG4gICAgLy8gaW5pdGlhbCBjbGFzcyB1cGRhdGUgaWYgdGhlcmUgaXMgYSBwcmUtc2VsZWN0ZWQgcmFuZ2VcbiAgICB0aGlzLl9zY2hlZHVsZVVwZGF0ZSgpO1xuICAgIC8vIHN0YXJ0IG9ic2VydmVycyBpZiBpbmxpbmUgY2FsZW5kYXIgaXMgdXNlZFxuICAgIGlmICh0aGlzLmlubGluZSkge1xuICAgICAgdGhpcy5fc3RhcnRDYWxlbmRhck9ic2VydmVycygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc2VsZWN0ZWREYXRlJ10pIHtcbiAgICAgIGNvbnN0IHNlbCA9IGNoYW5nZXNbJ3NlbGVjdGVkRGF0ZSddLmN1cnJlbnRWYWx1ZSBhcyBEYXRlW10gfCBudWxsO1xuICAgICAgaWYgKHNlbCAmJiBBcnJheS5pc0FycmF5KHNlbCkgJiYgc2VsLmxlbmd0aCA9PT0gMiAmJiBzZWxbMF0gJiYgc2VsWzFdKSB7XG4gICAgICAgICAgY29uc3QgcHJlc2V0ID0gdGhpcy5kZXRlY3RQcmVzZXQoc2VsWzBdLCBzZWxbMV0pO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQgPSBwcmVzZXQgPz8gJ2N1c3RvbSc7XG4gICAgICAgIC8vIHN5bmMgaW50ZXJuYWwgbW9kZWwgd2hlbiBleHRlcm5hbCB2YWx1ZSBjaGFuZ2VzXG4gICAgICAgIHRoaXMubW9kZWxEYXRlID0gWy4uLnNlbF07XG4gICAgICB9IGVsc2UgaWYgKHNlbCA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQgPSBudWxsO1xuICAgICAgICB0aGlzLm1vZGVsRGF0ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25JbnB1dEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICB0cnkgeyB0aGlzLm92ZXJsYXlQYW5lbD8udG9nZ2xlKGV2ZW50IGFzIGFueSk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gICBvbk92ZXJsYXlTaG93KCk6IHZvaWQge1xuICAgICAgLy8gc3RvcmUgYSBkZWVwIGNvcHkgb2YgY3VycmVudCBzZWxlY3Rpb24vcHJlc2V0IHdoZW4gb3ZlcmxheSBvcGVuc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlICYmIEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RlZERhdGUpKSB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlJbml0aWFsRGF0ZSA9ICh0aGlzLnNlbGVjdGVkRGF0ZSBhcyBEYXRlW10pLm1hcChkID0+IChkID8gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCBkLmdldE1vbnRoKCksIGQuZ2V0RGF0ZSgpKSA6IGQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlJbml0aWFsRGF0ZSA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLl9vdmVybGF5SW5pdGlhbFByZXNldCA9IHRoaXMuc2VsZWN0ZWRQcmVzZXQ7XG4gICAgICAvLyBlbnN1cmUgY2FsZW5kYXIgbW9kZWwgc2hvd3MgdGhlIGN1cnJlbnRseSBjb21taXR0ZWQgc2VsZWN0aW9uIHdoZW4gb3BlbmluZ1xuICAgICAgdGhpcy5tb2RlbERhdGUgPSB0aGlzLnNlbGVjdGVkRGF0ZSA/IFsuLi50aGlzLnNlbGVjdGVkRGF0ZV0gOiBudWxsO1xuICAgICAgLy8gZW5zdXJlIHByZXNldCBidXR0b25zIHJlZmxlY3QgY3VycmVudCBzZWxlY3Rpb24gd2hlbiBvdmVybGF5IG9wZW5zXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZERhdGUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdGVkRGF0ZSkgJiYgdGhpcy5zZWxlY3RlZERhdGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgY29uc3QgcHJlc2V0ID0gdGhpcy5kZXRlY3RQcmVzZXQodGhpcy5zZWxlY3RlZERhdGVbMF0sIHRoaXMuc2VsZWN0ZWREYXRlWzFdKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0ID0gcHJlc2V0ID8/ICdjdXN0b20nO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5zZWxlY3RlZERhdGUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldCA9IG51bGw7XG4gICAgICB9XG4gICAgICAvLyBhZGQgc3RhcnQvZW5kIGNsYXNzZXMgdG8gcmFuZ2UgY2VsbHMgZm9yIHN0eWxpbmdcbiAgICAgIHRoaXMuX3NjaGVkdWxlVXBkYXRlKCk7XG4gICAgICAvLyBvYnNlcnZlIERPTSBjaGFuZ2VzIChQcmltZU5HIG1heSByZS1yZW5kZXIgaW5zaWRlIG92ZXJsYXkpXG4gICAgICB0aGlzLl9zdGFydENhbGVuZGFyT2JzZXJ2ZXJzKCk7XG4gIH1cblxuICBvbk92ZXJsYXlIaWRlKCk6IHZvaWQge1xuICAgIC8vIGlmIGludGVybmFsIGNhbGVuZGFyIG1vZGVsIGhhcyBhbiBpbmNvbXBsZXRlIHNlbGVjdGlvbiAocGFydGlhbCByYW5nZSkgcmV2ZXJ0IHRvIGluaXRpYWxcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxEYXRlO1xuICAgIGNvbnN0IGlzUGFydGlhbE1vZGVsID0gQm9vbGVhbihtb2RlbCAmJiBBcnJheS5pc0FycmF5KG1vZGVsKSAmJiBtb2RlbC5sZW5ndGggPiAwICYmIG1vZGVsWzBdICYmICFtb2RlbFsxXSk7XG4gICAgaWYgKGlzUGFydGlhbE1vZGVsKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHRoaXMuX292ZXJsYXlJbml0aWFsRGF0ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQgPSB0aGlzLl9vdmVybGF5SW5pdGlhbFByZXNldDtcbiAgICAgIC8vIHJlc2V0IGludGVybmFsIG1vZGVsIHRvIHN5bmNlZCB2YWx1ZVxuICAgICAgdGhpcy5tb2RlbERhdGUgPSB0aGlzLnNlbGVjdGVkRGF0ZSA/IFsuLi50aGlzLnNlbGVjdGVkRGF0ZV0gOiBudWxsO1xuICAgIH1cbiAgICB0aGlzLl9vdmVybGF5SW5pdGlhbERhdGUgPSBudWxsO1xuICAgIHRoaXMuX292ZXJsYXlJbml0aWFsUHJlc2V0ID0gbnVsbDtcbiAgICB0aGlzLmN1c3RvbVJhbmdlTW9kZSA9IGZhbHNlO1xuICAvLyBjbGVhbnVwIGFueSBzdGFydC9lbmQgY2xhc3NlcyB0byBhdm9pZCBzdGFsZSBjbGFzc2VzXG4gIHRoaXMuX3NjaGVkdWxlVXBkYXRlKCk7XG4gICAgLy8gc3RvcCBvYnNlcnZpbmdcbiAgICB0aGlzLl9zdG9wQ2FsZW5kYXJPYnNlcnZlcnMoKTtcbiAgfVxuXG4gIG9uTW9kZWxDaGFuZ2UoZGF0ZVJhbmdlOiBEYXRlW10gfCBudWxsKSB7XG4gICAgLy8gV2hlbiB1c2VyIGNsaWNrcyBhIGZpcnN0IGRhdGUsIFByaW1lTkcgbWF5IGVtaXQgYW4gYXJyYXkgd2l0aCAxIHZhbHVlLiBXZSBkb24ndCB3YW50IHRvXG4gICAgLy8gdXBkYXRlIHRoZSBleHRlcm5hbCBzZWxlY3RlZERhdGUgdW50aWwgdGhlIHJhbmdlIGlzIGNvbXBsZXRlZCAodHdvIGRhdGVzKSBzbyB0aGF0XG4gICAgLy8gdGhlIGNhbGVuZGFyIGRvZXMgbm90IGp1bXAgYmFjayB0byBhIHByZXZpb3VzbHkgc2VsZWN0ZWQgZW5kIGRhdGUncyBtb250aC5cbiAgICB0aGlzLm1vZGVsRGF0ZSA9IGRhdGVSYW5nZSA/IFsuLi5kYXRlUmFuZ2VdIDogbnVsbDtcbiAgICBpZiAoZGF0ZVJhbmdlICYmIEFycmF5LmlzQXJyYXkoZGF0ZVJhbmdlKSAmJiBkYXRlUmFuZ2UubGVuZ3RoID09PSAyICYmIGRhdGVSYW5nZVswXSAmJiBkYXRlUmFuZ2VbMV0pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldCA9IHRoaXMuZGV0ZWN0UHJlc2V0KGRhdGVSYW5nZVswXSwgZGF0ZVJhbmdlWzFdKTtcbiAgICAgICAgdGhpcy5jdXN0b21SYW5nZU1vZGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gWy4uLmRhdGVSYW5nZV07XG4gICAgICB0aGlzLmRhdGVSYW5nZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgIC8vIGNsb3NlIG92ZXJsYXkgbGlrZSB3aGVuIGFwcGx5aW5nIGEgcHJlc2V0XG4gICAgICB0cnkgeyB0aGlzLm92ZXJsYXlQYW5lbD8uaGlkZSgpOyB9IGNhdGNoIChlKSB7fVxuICAgIH0gZWxzZSBpZiAoIWRhdGVSYW5nZSkge1xuICAgICAgLy8gY2xlYXJlZCBzZWxlY3Rpb25cbiAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQgPSBudWxsO1xuICAgICAgdGhpcy5jdXN0b21SYW5nZU1vZGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlQ2hhbmdlLmVtaXQobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNpbmdsZSBkYXRlIHNlbGVjdGluZyAocGFydGlhbCByYW5nZSkgLSBkbyBub3QgZW1pdCBjaGFuZ2UgeWV0OyBqdXN0IGtlZXAgaW50ZXJuYWwgbW9kZWxcbiAgICAgIC8vIHNvIHRoZSBjYWxlbmRhcidzIHZpZXcgcmVtYWlucyB3aGVyZSB0aGUgdXNlciBuYXZpZ2F0ZWQgdG8uXG4gICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0ID0gbnVsbDtcbiAgICAgIHRoaXMuY3VzdG9tUmFuZ2VNb2RlID0gZmFsc2U7XG4gICAgfVxuICAgIC8vIHVwZGF0ZSBzdGFydC9lbmQgY2xhc3NlcyB3aGlsZSB1c2VyIGlzIHNlbGVjdGluZyBvciB3aGVuIHJhbmdlIGNvbXBsZXRlc1xuICAgIHRoaXMuX3NjaGVkdWxlVXBkYXRlKCk7XG4gIH1cblxuICAvLyBDYWxsZWQgd2hlbiB0aGUgY2FsZW5kYXIncyB2aXNpYmxlIG1vbnRoL3llYXIgY2hhbmdlc1xuICBvbkNhbGVuZGFyVmlld0NoYW5nZWQoZXZlbnQ/OiBhbnkpOiB2b2lkIHtcbiAgICAvLyBSZWFwcGx5IGNsYXNzZXMgYWZ0ZXIgUHJpbWVORyByZS1yZW5kZXJcbiAgICB0aGlzLl9zY2hlZHVsZVVwZGF0ZSgpO1xuICAgIC8vIFJlYXR0YWNoIG9ic2VydmVycyBhZnRlciBhIHNtYWxsIGRlbGF5IHNpbmNlIFByaW1lTkcgd2lsbCBsaWtlbHkgcmVwbGFjZSBET00gbm9kZXNcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX3N0b3BDYWxlbmRhck9ic2VydmVycygpO1xuICAgICAgICB0aGlzLl9zdGFydENhbGVuZGFyT2JzZXJ2ZXJzKCk7XG4gICAgICB9IGNhdGNoIChlKSB7IH1cbiAgICB9LCA0MCk7XG4gIH1cblxuICBnZXQgaGFzU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdGVkRGF0ZSkgJiZcbiAgICAgICAgKHRoaXMuc2VsZWN0ZWREYXRlIGFzIERhdGVbXSkubGVuZ3RoID09PSAyICYmXG4gICAgICAgICEhKHRoaXMuc2VsZWN0ZWREYXRlIGFzIERhdGVbXSlbMF0gJiZcbiAgICAgICAgISEodGhpcy5zZWxlY3RlZERhdGUgYXMgRGF0ZVtdKVsxXVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZURhdGUoZDogRGF0ZSk6IERhdGUge1xuICAgIHJldHVybiBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIGQuZ2V0TW9udGgoKSwgZC5nZXREYXRlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NhbWVEYXRlKGE6IERhdGUsIGI6IERhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgYS5nZXRGdWxsWWVhcigpID09PSBiLmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgIGEuZ2V0TW9udGgoKSA9PT0gYi5nZXRNb250aCgpICYmXG4gICAgICBhLmdldERhdGUoKSA9PT0gYi5nZXREYXRlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlY3RQcmVzZXQoc3RhcnRSYXc6IERhdGUsIGVuZFJhdzogRGF0ZSk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5ub3JtYWxpemVEYXRlKHN0YXJ0UmF3KTtcbiAgICBjb25zdCBlbmQgPSB0aGlzLm5vcm1hbGl6ZURhdGUoZW5kUmF3KTtcbiAgICBjb25zdCB0b2RheSA9IHRoaXMubm9ybWFsaXplRGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAvLyB0b2RheVxuICAgIGlmICh0aGlzLmlzU2FtZURhdGUoc3RhcnQsIHRvZGF5KSAmJiB0aGlzLmlzU2FtZURhdGUoZW5kLCB0b2RheSkpIHJldHVybiAndG9kYXknO1xuICAgIC8vIHllc3RlcmRheVxuICAgIGNvbnN0IHkgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgeS5zZXREYXRlKHkuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgaWYgKHRoaXMuaXNTYW1lRGF0ZShzdGFydCwgeSkgJiYgdGhpcy5pc1NhbWVEYXRlKGVuZCwgeSkpIHJldHVybiAneWVzdGVyZGF5JztcbiAgICAvLyBsYXN0N2RheXMgKGxhc3QgNyBkYXlzIGluY2x1ZGluZyB0b2RheTogc3RhcnQgPSB0b2RheSAtIDYsIGVuZCA9IHRvZGF5KVxuICAgIGNvbnN0IGw3RW5kID0gbmV3IERhdGUodG9kYXkpO1xuICAgIGNvbnN0IGw3U3RhcnQgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgbDdTdGFydC5zZXREYXRlKHRvZGF5LmdldERhdGUoKSAtIDYpO1xuICAgIGlmICh0aGlzLmlzU2FtZURhdGUoc3RhcnQsIGw3U3RhcnQpICYmIHRoaXMuaXNTYW1lRGF0ZShlbmQsIGw3RW5kKSkgcmV0dXJuICdsYXN0N2RheXMnO1xuICAgIC8vIGxhc3QzMGRheXMgKGxhc3QgMzAgZGF5cyBpbmNsdWRpbmcgdG9kYXk6IHN0YXJ0ID0gdG9kYXkgLSAyOSwgZW5kID0gdG9kYXkpXG4gICAgY29uc3QgbDMwRW5kID0gbmV3IERhdGUodG9kYXkpO1xuICAgIGNvbnN0IGwzMFN0YXJ0ID0gbmV3IERhdGUodG9kYXkpO1xuICAgIGwzMFN0YXJ0LnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpIC0gMjkpO1xuICAgIGlmICh0aGlzLmlzU2FtZURhdGUoc3RhcnQsIGwzMFN0YXJ0KSAmJiB0aGlzLmlzU2FtZURhdGUoZW5kLCBsMzBFbmQpKSByZXR1cm4gJ2xhc3QzMGRheXMnO1xuICAgIC8vIGxhc3QzbW9udGhzIChsYXN0IDMgbW9udGhzIGluY2x1ZGluZyB0b2RheTogc3RhcnQgPSB0b2RheSAtIDMgbW9udGhzLCBlbmQgPSB0b2RheSlcbiAgICBjb25zdCBsM21FbmQgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgY29uc3QgbDNtU3RhcnQgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgbDNtU3RhcnQuc2V0TW9udGgodG9kYXkuZ2V0TW9udGgoKSAtIDMpO1xuICAgIGlmICh0aGlzLmlzU2FtZURhdGUoc3RhcnQsIGwzbVN0YXJ0KSAmJiB0aGlzLmlzU2FtZURhdGUoZW5kLCBsM21FbmQpKSByZXR1cm4gJ2xhc3QzbW9udGhzJztcbiAgICAvLyBsYXN0Nm1vbnRocyAobGFzdCA2IG1vbnRocyBpbmNsdWRpbmcgdG9kYXk6IHN0YXJ0ID0gdG9kYXkgLSA2IG1vbnRocywgZW5kID0gdG9kYXkpXG4gICAgY29uc3QgbDZtRW5kID0gbmV3IERhdGUodG9kYXkpO1xuICAgIGNvbnN0IGw2bVN0YXJ0ID0gbmV3IERhdGUodG9kYXkpO1xuICAgIGw2bVN0YXJ0LnNldE1vbnRoKHRvZGF5LmdldE1vbnRoKCkgLSA2KTtcbiAgICBpZiAodGhpcy5pc1NhbWVEYXRlKHN0YXJ0LCBsNm1TdGFydCkgJiYgdGhpcy5pc1NhbWVEYXRlKGVuZCwgbDZtRW5kKSkgcmV0dXJuICdsYXN0Nm1vbnRocyc7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjbGVhckRhdGVSYW5nZSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7XG4gICAgdGhpcy5kYXRlUmFuZ2VDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgdGhpcy5zZWxlY3RlZFByZXNldCA9IG51bGw7XG4gICAgdGhpcy5jdXN0b21SYW5nZU1vZGUgPSBmYWxzZTtcbiAgICB0aGlzLm1vZGVsRGF0ZSA9IG51bGw7XG4gIH1cblxuICByZXNldEFuZENsb3NlKCkge1xuICAgIHRoaXMuY2xlYXJEYXRlUmFuZ2UoKTtcbiAgICBpZiAodGhpcy5vdmVybGF5UGFuZWwpIHtcbiAgICAgIHRyeSB7IHRoaXMub3ZlcmxheVBhbmVsLmhpZGUoKTsgfSBjYXRjaCAoZSkge31cbiAgICB9XG4gIH1cblxuICBjbGVhckFuZFN0b3AoZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5jbGVhckRhdGVSYW5nZSgpO1xuICAgIHRyeSB7IHRoaXMub3ZlcmxheVBhbmVsPy5oaWRlKCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICB0b2dnbGVDdXN0b21SYW5nZSgpIHtcbiAgICB0aGlzLmN1c3RvbVJhbmdlTW9kZSA9ICF0aGlzLmN1c3RvbVJhbmdlTW9kZTtcbiAgICBpZiAodGhpcy5jdXN0b21SYW5nZU1vZGUpIHRoaXMuc2VsZWN0ZWRQcmVzZXQgPSAnY3VzdG9tJztcbiAgfVxuXG4gIGFwcGx5Q3VzdG9tUmFuZ2UoKSB7XG4gICAgLy8gZW5zdXJlIGV4dGVybmFsIHNlbGVjdGVkRGF0ZSBpcyBpbiBzeW5jIHdpdGggaW50ZXJuYWwgbW9kZWxcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHRoaXMubW9kZWxEYXRlID8gWy4uLnRoaXMubW9kZWxEYXRlXSA6IG51bGw7XG4gICAgdGhpcy5kYXRlUmFuZ2VDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgaWYgKHRoaXMub3ZlcmxheVBhbmVsKSB7XG4gICAgICB0cnkgeyB0aGlzLm92ZXJsYXlQYW5lbC5oaWRlKCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICAgIHRoaXMuY3VzdG9tUmFuZ2VNb2RlID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZFByZXNldCA9ICdjdXN0b20nO1xuICB9XG5cbiAgICBnZXREYXRlUmFuZ2VMYWJlbCgpIHtcbiAgICAvLyBDaGVjayB0aGUgaW50ZXJuYWwgbW9kZWwgZmlyc3QgdG8gc2hvdyByZWFsLXRpbWUgdXBkYXRlcyB3aGlsZSBzZWxlY3RpbmdcbiAgICBjb25zdCBkYXRlQXJyYXkgPSB0aGlzLm1vZGVsRGF0ZSB8fCB0aGlzLnNlbGVjdGVkRGF0ZTtcbiAgICBpZiAoIWRhdGVBcnJheSB8fCAhQXJyYXkuaXNBcnJheShkYXRlQXJyYXkpKSByZXR1cm4gJyc7XG4gICAgXG4gICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gZGF0ZUFycmF5IGFzIChEYXRlIHwgbnVsbClbXTtcbiAgICAgICAgICAgIGNvbnN0IGFycm93ID0gJ1xcdTI3OTQnO1xuXG4gICAgLy8gU2hvdyBqdXN0IHRoZSBmaXJzdCBkYXRlIHdpdGggYW4gYXJyb3cgaWYgb25seSBmaXJzdCBkYXRlIGlzIHNlbGVjdGVkXG4gICAgaWYgKHN0YXJ0ICYmICFlbmQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0U3RyID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc3RhcnQsICdNTS9kZC95eXl5Jyk7XG4gICAgICByZXR1cm4gYCR7c3RhcnRTdHJ9ICR7YXJyb3d9IGA7XG4gICAgfVxuICAgIFxuICAgIC8vIFNob3cgdGhlIGNvbXBsZXRlIHJhbmdlIGlmIGJvdGggZGF0ZXMgYXJlIHNlbGVjdGVkXG4gICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgICAgY29uc3Qgc3RhcnRTdHIgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShzdGFydCwgJ01NL2RkL3l5eXknKTtcbiAgICAgIGNvbnN0IGVuZFN0ciA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGVuZCwgJ01NL2RkL3l5eXknKTtcbiAgICAgIHJldHVybiBgJHtzdGFydFN0cn0gJHthcnJvd30gJHtlbmRTdHJ9YDtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgYXBwbHlQcmVzZXQocHJlc2V0OiAndG9kYXknfCd5ZXN0ZXJkYXknfCdsYXN0N2RheXMnfCdsYXN0MzBkYXlzJ3wnbGFzdDNtb250aHMnfCdsYXN0Nm1vbnRocycpIHtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgbGV0IHN0YXJ0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGVuZDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICAgIHN3aXRjaCAocHJlc2V0KSB7XG4gICAgICBjYXNlICd0b2RheSc6XG4gICAgICAgIHN0YXJ0ID0gZW5kID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSwgdG9kYXkuZ2V0RGF0ZSgpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd5ZXN0ZXJkYXknOlxuICAgICAgICBjb25zdCB5ID0gbmV3IERhdGUodG9kYXkpO1xuICAgICAgICB5LnNldERhdGUoeS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgc3RhcnQgPSBlbmQgPSBuZXcgRGF0ZSh5LmdldEZ1bGxZZWFyKCksIHkuZ2V0TW9udGgoKSwgeS5nZXREYXRlKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xhc3Q3ZGF5cyc6IHtcbiAgICAgICAgZW5kID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSwgdG9kYXkuZ2V0RGF0ZSgpKTtcbiAgICAgICAgc3RhcnQgPSBuZXcgRGF0ZShlbmQpO1xuICAgICAgICBzdGFydC5zZXREYXRlKGVuZC5nZXREYXRlKCkgLSA2KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdsYXN0MzBkYXlzJzoge1xuICAgICAgICBlbmQgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCB0b2RheS5nZXREYXRlKCkpO1xuICAgICAgICBzdGFydCA9IG5ldyBEYXRlKGVuZCk7XG4gICAgICAgIHN0YXJ0LnNldERhdGUoZW5kLmdldERhdGUoKSAtIDI5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdsYXN0M21vbnRocyc6IHtcbiAgICAgICAgZW5kID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSwgdG9kYXkuZ2V0RGF0ZSgpKTtcbiAgICAgICAgc3RhcnQgPSBuZXcgRGF0ZShlbmQpO1xuICAgICAgICBzdGFydC5zZXRNb250aChlbmQuZ2V0TW9udGgoKSAtIDMpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2xhc3Q2bW9udGhzJzoge1xuICAgICAgICBlbmQgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCB0b2RheS5nZXREYXRlKCkpO1xuICAgICAgICBzdGFydCA9IG5ldyBEYXRlKGVuZCk7XG4gICAgICAgIHN0YXJ0LnNldE1vbnRoKGVuZC5nZXRNb250aCgpIC0gNik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChzdGFydCAmJiBlbmQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gW3N0YXJ0LCBlbmRdO1xuICAgICAgdGhpcy5tb2RlbERhdGUgPSBbc3RhcnQsIGVuZF07XG4gICAgICBpZih0aGlzLnByZXNlcnZlUHJlc2V0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gW3N0YXJ0LCBlbmQsIHsgcHJlc2V0czogcHJlc2V0IH1dO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRlUmFuZ2VDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0ID0gcHJlc2V0O1xuICAgICAgdGhpcy5jdXN0b21SYW5nZU1vZGUgPSBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHsgdGhpcy5vdmVybGF5UGFuZWw/LmhpZGUoKTsgfSBjYXRjaCAoZSkge31cbiAgICAvLyBlbnN1cmUgd2UgdXBkYXRlIHN0YXJ0L2VuZCBjbGFzc2VzIGFmdGVyIGFwcGx5aW5nIGEgcHJlc2V0XG4gICAgdGhpcy5fc2NoZWR1bGVVcGRhdGUoKTtcbiAgfVxuXG4gIG9uRGF0ZVJhbmdlQ2hhbmdlKGRhdGVSYW5nZTogRGF0ZVtdIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZVJhbmdlQ2hhbmdlLmVtaXQoZGF0ZVJhbmdlKTtcbiAgICBpZiAoZGF0ZVJhbmdlICYmIEFycmF5LmlzQXJyYXkoZGF0ZVJhbmdlKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFByZXNldCA9IHRoaXMuZGV0ZWN0UHJlc2V0KGRhdGVSYW5nZVswXSwgZGF0ZVJhbmdlWzFdKTtcbiAgICAgIHRoaXMuY3VzdG9tUmFuZ2VNb2RlID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICghZGF0ZVJhbmdlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0ID0gbnVsbDtcbiAgICAgIHRoaXMuY3VzdG9tUmFuZ2VNb2RlID0gZmFsc2U7XG4gICAgfVxuICB0aGlzLl9zY2hlZHVsZVVwZGF0ZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3RvcENhbGVuZGFyT2JzZXJ2ZXJzKCk7XG4gICAgdGhpcy5fY2FuY2VsU2NoZWR1bGVkVXBkYXRlKCk7XG4gIH1cblxuICAvLyBXYWxrIHRoZSByZW5kZXJlZCBjYWxlbmRhciBET00ocykgKG92ZXJsYXkgKyBpbmxpbmUpIGFuZCBhZGQgc3RhcnQtcmFuZ2UvZW5kLXJhbmdlIGNsYXNzZXNcbiAgcHJpdmF0ZSBfdXBkYXRlU3RhcnRFbmRSYW5nZUNsYXNzZXMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhbGVuZGFyRWxlbWVudHMgPSB0aGlzLl9nZXRDYWxlbmRhckVsZW1lbnRzKCk7XG5cbiAgICAgIGNhbGVuZGFyRWxlbWVudHMuZm9yRWFjaCgoY2FsRWw6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgLy8gUmVtb3ZlIGV4aXN0aW5nIGNsYXNzZXMgZnJvbSBzcGFucyBmaXJzdFxuICAgICAgICBjb25zdCBhbGxTcGFucyA9IGNhbEVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkID4gc3BhbicpO1xuICAgICAgICBhbGxTcGFucy5mb3JFYWNoKChzcGFuKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhzcGFuLCAnc3RhcnQtcmFuZ2UnKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHNwYW4sICdlbmQtcmFuZ2UnKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHNwYW4sICdiZXR3ZWVuLXJhbmdlJyk7XG4gICAgICAgIH0pO1xuXG4gIC8vIENvbGxlY3Qgc3Bhbi9kYXRlIHBhaXJzLCBwcmVmZXIgZGF0YS1kYXRlIGF0dHJpYnV0ZVxuICAvLyBDYWNoZSBoZWFkZXIgbW9udGgveWVhciBmb3IgdGhpcyBjYWxlbmRhciB0byBhdm9pZCBxdWVyeWluZyBwZXItc3BhblxuICBjb25zdCBwYW5lbE5vZGUgPSBjYWxFbC5jbG9zZXN0KCcucC1kYXRlcGlja2VyJykgfHwgY2FsRWw7XG4gIGNvbnN0IGhlYWRlck1vbnRoTm9kZSA9IChwYW5lbE5vZGUgYXMgRWxlbWVudCkucXVlcnlTZWxlY3RvcignLnAtZGF0ZXBpY2tlci1oZWFkZXIgLnAtZGF0ZXBpY2tlci10aXRsZSAucC1kYXRlcGlja2VyLW1vbnRoJyk7XG4gIGNvbnN0IGhlYWRlclllYXJOb2RlID0gKHBhbmVsTm9kZSBhcyBFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCcucC1kYXRlcGlja2VyLWhlYWRlciAucC1kYXRlcGlja2VyLXRpdGxlIC5wLWRhdGVwaWNrZXIteWVhcicpO1xuICBjb25zdCBoZWFkZXJNb250aElkeCA9IGhlYWRlck1vbnRoTm9kZSAmJiBoZWFkZXJNb250aE5vZGUudGV4dENvbnRlbnQgPyAodGhpcy5lbkxvY2FsZS5tb250aE5hbWVzIHx8IFtdKS5pbmRleE9mKGhlYWRlck1vbnRoTm9kZS50ZXh0Q29udGVudC50cmltKCkpIDogTmFOO1xuICBjb25zdCBoZWFkZXJZZWFyVmFsID0gaGVhZGVyWWVhck5vZGUgJiYgaGVhZGVyWWVhck5vZGUudGV4dENvbnRlbnQgPyBwYXJzZUludChoZWFkZXJZZWFyTm9kZS50ZXh0Q29udGVudC50cmltKCksIDEwKSA6IE5hTjtcbiAgICAgICAgY29uc3QgaXRlbXM6IHsgZHQ6IERhdGU7IHNwYW46IEVsZW1lbnQ7IHRkPzogSFRNTEVsZW1lbnQgfCBudWxsIH1bXSA9IFtdO1xuICAgICAgICBjb25zdCBzcGFucyA9IGNhbEVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkID4gc3Bhbi5wLWhpZ2hsaWdodCcpO1xuICAgICAgICBzcGFucy5mb3JFYWNoKChzcGFuKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGQgPSBzcGFuLmNsb3Nlc3QoJ3RkJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgICAgICAgIC8vIFRyeSB0byByZWFkIGRhdGEtZGF0ZSBhdHRyaWJ1dGUsIHdoaWNoIHNvbWUgUHJpbWVORyB2ZXJzaW9ucyByZW5kZXIgb24gc3Bhbi90ZFxuICAgICAgICAgIGxldCBkYXRhRGF0ZSA9IHNwYW4uZ2V0QXR0cmlidXRlKCdkYXRhLWRhdGUnKTtcbiAgICAgICAgICBpZiAoIWRhdGFEYXRlICYmIHRkKSBkYXRhRGF0ZSA9IHRkLmdldEF0dHJpYnV0ZSgnZGF0YS1kYXRlJyk7XG4gICAgICAgICAgaWYgKGRhdGFEYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGRhdGFEYXRlLnNwbGl0KCctJykubWFwKChwKSA9PiBwYXJzZUludChwLCAxMCkpO1xuICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAzICYmIHBhcnRzLmV2ZXJ5KChuKSA9PiAhaXNOYU4obikpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IFt5LCBtLCBkXSA9IHBhcnRzO1xuICAgICAgICAgICAgICBjb25zdCBkdCA9IG5ldyBEYXRlKHksIG0gLSAxLCBkKTtcbiAgICAgICAgICAgICAgaXRlbXMucHVzaCh7IGR0LCB0ZCwgc3BhbiB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBGYWxsYmFjazogcGFyc2UgZGF5IG51bWJlciBhbmQgaW5mZXIgbW9udGgveWVhciBmcm9tIG5lYXJieSBoZWFkZXIgaW4gdGhlIHNhbWUgLnAtZGF0ZXBpY2tlclxuICAgICAgICAgIGNvbnN0IGRheVRleHQgPSAoc3Bhbi50ZXh0Q29udGVudCB8fCAnJykudHJpbSgpO1xuICAgICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KGRheVRleHQsIDEwKTtcbiAgICAgICAgICBpZiAoIWlzTmFOKGRheSkgJiYgdGQpIHtcbiAgICAgICAgICAgIC8vIFVzZSBjYWNoZWQgaGVhZGVyIG1vbnRoL3llYXIgd2hlbiBhdmFpbGFibGVcbiAgICAgICAgICAgIGlmICghaXNOYU4oaGVhZGVyTW9udGhJZHgpICYmICFpc05hTihoZWFkZXJZZWFyVmFsKSkge1xuICAgICAgICAgICAgICBjb25zdCBkdCA9IG5ldyBEYXRlKGhlYWRlclllYXJWYWwsIGhlYWRlck1vbnRoSWR4LCBkYXkpO1xuICAgICAgICAgICAgICBpdGVtcy5wdXNoKHsgZHQsIHRkLCBzcGFuIH0pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGxhc3QgcmVzb3J0OiBpZ25vcmUgc3BhbiBpZiBkYXRlIGNhbm5vdCBiZSBkZXRlcm1pbmVkXG4gICAgICAgIH0pO1xuXG4gIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICAvLyBTb3J0IGl0ZW1zIHRvIGZpbmQgbWluL21heCAoc3RhcnQgJiBlbmQpXG4gICAgICAgIGl0ZW1zLnNvcnQoKGEsIGIpID0+IGEuZHQuZ2V0VGltZSgpIC0gYi5kdC5nZXRUaW1lKCkpO1xuICAgICAgICBjb25zdCBkZXRlY3RlZFN0YXJ0ID0gaXRlbXNbMF0uZHQ7XG4gICAgICAgIGNvbnN0IGRldGVjdGVkRW5kID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0uZHQ7XG5cbiAgLy8gUHJlZmVycmVkIHJhbmdlIGlzIG1vZGVsRGF0ZS9zZWxlY3RlZERhdGUgaWYgcHJlc2VudFxuICBjb25zdCByYW5nZSA9ICh0aGlzLnNlbGVjdGVkRGF0ZSAmJiB0aGlzLnNlbGVjdGVkRGF0ZS5sZW5ndGggPT09IDIpID8gdGhpcy5zZWxlY3RlZERhdGUgOiAodGhpcy5tb2RlbERhdGUgJiYgdGhpcy5tb2RlbERhdGUubGVuZ3RoID09PSAyID8gdGhpcy5tb2RlbERhdGUgOiBbZGV0ZWN0ZWRTdGFydCwgZGV0ZWN0ZWRFbmRdKTtcbiAgY29uc3Qgc3RhcnREYXRlID0gcmFuZ2UgJiYgcmFuZ2VbMF0gPyB0aGlzLm5vcm1hbGl6ZURhdGUocmFuZ2VbMF0gYXMgRGF0ZSkgOiBkZXRlY3RlZFN0YXJ0O1xuICBjb25zdCBlbmREYXRlID0gcmFuZ2UgJiYgcmFuZ2VbMV0gPyB0aGlzLm5vcm1hbGl6ZURhdGUocmFuZ2VbMV0gYXMgRGF0ZSkgOiBkZXRlY3RlZEVuZDtcblxuICAgICAgICAvLyBGb3IgZWFjaCBpdGVtLCBhZGQgc3RhcnQtcmFuZ2UsZW5kLXJhbmdlLCBvciBiZXR3ZWVuLXJhbmdlIGJhc2VkIG9uIGRhdGVcbiAgICAgICAgY29uc3Qgc1RpbWUgPSBzdGFydERhdGUuZ2V0VGltZSgpO1xuICAgICAgICBjb25zdCBlVGltZSA9IGVuZERhdGUuZ2V0VGltZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0IG9mIGl0ZW1zKSB7XG4gICAgICAgICAgY29uc3QgdCA9IGl0LmR0LmdldFRpbWUoKTtcbiAgICAgICAgICBpZiAoc1RpbWUgPT09IGVUaW1lICYmIHQgPT09IHNUaW1lKSB7XG4gICAgICAgICAgICAvLyBzaW5nbGUtZGF5IHJhbmdlLCBtYXJrIGJvdGggc3RhcnQgJiBlbmRcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoaXQuc3BhbiwgJ3N0YXJ0LXJhbmdlJyk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGl0LnNwYW4sICdlbmQtcmFuZ2UnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHQgPT09IHNUaW1lKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGl0LnNwYW4sICdzdGFydC1yYW5nZScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodCA9PT0gZVRpbWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoaXQuc3BhbiwgJ2VuZC1yYW5nZScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodCA+IHNUaW1lICYmIHQgPCBlVGltZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhpdC5zcGFuLCAnYmV0d2Vlbi1yYW5nZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JlIERPTSBlcnJvcnMgKGUuZy4sIHNlcnZlci1zaWRlIHJlbmRlcmluZyAvIG1pc3NpbmcgZWxlbWVudHMpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc29EYXRlKGQ6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHkgPSBkLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgbSA9IFN0cmluZyhkLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IGRheSA9IFN0cmluZyhkLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICByZXR1cm4gYCR7eX0tJHttfS0ke2RheX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZEVsZW1lbnRCeURhdGUoZGF0ZT86IERhdGUpOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHkgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgbSA9IGRhdGUuZ2V0TW9udGgoKSArIDE7IC8vIDEuLjEyXG4gICAgY29uc3QgZCA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgIGNvbnN0IGlzb1VucGFkZGVkID0gYCR7eX0tJHttfS0ke2R9YDsgLy8gZS5nLiAyMDI1LTExLTFcbiAgICBjb25zdCBpc29QYWRkZWQgPSBgJHt5fS0ke1N0cmluZyhtKS5wYWRTdGFydCgyLCAnMCcpfS0ke1N0cmluZyhkKS5wYWRTdGFydCgyLCAnMCcpfWA7IC8vIDIwMjUtMTEtMDFcbiAgICBjb25zdCBzZWxlY3RvcnMgPSBbYFtkYXRhLWRhdGU9XCIke2lzb1VucGFkZGVkfVwiXWAsIGBbZGF0YS1kYXRlPVwiJHtpc29QYWRkZWR9XCJdYF07XG4gICAgZm9yIChjb25zdCBzZWwgb2Ygc2VsZWN0b3JzKSB7XG4gICAgICBjb25zdCBmb3VuZEluT3ZlcmxheSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5hdG9taXgtb3ZlcmxheS1jYWxlbmRhciAke3NlbH1gKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgICBpZiAoZm91bmRJbk92ZXJsYXkpIHJldHVybiBmb3VuZEluT3ZlcmxheS5jbG9zZXN0KCd0ZCcpIGFzIEhUTUxFbGVtZW50IHwgbnVsbCB8fCBmb3VuZEluT3ZlcmxheTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzZWwgb2Ygc2VsZWN0b3JzKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZC5jbG9zZXN0KCd0ZCcpIGFzIEhUTUxFbGVtZW50IHwgbnVsbCB8fCBmb3VuZDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgX3N0YXJ0Q2FsZW5kYXJPYnNlcnZlcnMoKTogdm9pZCB7XG4gICAgLy8gc3RvcCBmaXJzdCB0byBhdm9pZCBkdXBsaWNhdGVzXG4gICAgdGhpcy5fc3RvcENhbGVuZGFyT2JzZXJ2ZXJzKCk7XG4gICAgdHJ5IHtcbiAgY29uc3QgY2FsRWxzID0gdGhpcy5fZ2V0Q2FsZW5kYXJFbGVtZW50cygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLm92ZXJsYXlQYW5lbCBhcyBhbnk7XG4gICAgICAgIGlmIChwYW5lbCAmJiBwYW5lbC5lbCAmJiBwYW5lbC5lbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgY29uc3QgZWwgPSBwYW5lbC5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRhdGVwaWNrZXInKTtcbiAgICAgICAgICBpZiAoZWwpIGNhbEVscy5wdXNoKGVsIGFzIEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgICBjYWxFbHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgY29uc3Qgb2JzID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgIC8vIFJlYXBwbHkgY2xhc3NlcyBhZnRlciBET00gY2hhbmdlcyAoZGVib3VuY2VkKVxuICAgICAgICAgIHRoaXMuX3NjaGVkdWxlVXBkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBXYXRjaCBjaGlsZExpc3QsIHN1YnRyZWUgYW5kIGNsYXNzIGF0dHJpYnV0ZSBjaGFuZ2VzIChzcGFuIGNsYXNzIHRvZ2dsZXMgYXJlIGNvbW1vbilcbiAgICAgICAgb2JzLm9ic2VydmUoZWwsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnY2xhc3MnXSB9KTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJPYnNlcnZlcnMucHVzaChvYnMpO1xuICAgICAgICB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLnB1c2goZWwpO1xuICAgICAgICAvLyBBbHNvIG9ic2VydmUgcGFyZW50IC0gaWYgUHJpbWVORyByZXBsYWNlcyB0aGUgLnAtZGF0ZXBpY2tlciBlbGVtZW50LCBwYXJlbnQgY2hpbGRMaXN0IGNoYW5nZXMgd2lsbCBmaXJlXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGlmIChwYXJlbnQgJiYgdGhpcy5fb2JzZXJ2ZWRQYXJlbnRFbGVtZW50cy5pbmRleE9mKHBhcmVudCkgPT09IC0xKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50T2JzID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgLy8gcmVhdHRhY2ggb2JzZXJ2ZXJzIHNpbmNlIHRoZSBjYWxFbCBtYXkgaGF2ZSBiZWVuIHJlcGxhY2VkXG4gICAgICAgICAgICB0aGlzLl9zY2hlZHVsZVVwZGF0ZSgpO1xuICAgICAgICAgICAgLy8gZGV0YWNoIGFuZCByZS1hdHRhY2ggb2JzZXJ2ZXJzIGFmdGVyIERPTSBzZXR0bGVzXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9wQ2FsZW5kYXJPYnNlcnZlcnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydENhbGVuZGFyT2JzZXJ2ZXJzKCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxuICAgICAgICAgICAgfSwgMTAwKTsgLy8gc2xpZ2h0bHkgbGFyZ2VyIGRlbGF5IHRvIGxldCBQcmltZU5HIGZpbmlzaCB0aGUgbW9udGggcmVuZGVyaW5nXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcGFyZW50T2JzLm9ic2VydmUocGFyZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogZmFsc2UgfSk7XG4gICAgICAgICAgdGhpcy5fcGFyZW50T2JzZXJ2ZXJzLnB1c2gocGFyZW50T2JzKTtcbiAgICAgICAgICB0aGlzLl9vYnNlcnZlZFBhcmVudEVsZW1lbnRzLnB1c2gocGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc3RvcENhbGVuZGFyT2JzZXJ2ZXJzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9jYWxlbmRhck9ic2VydmVycy5mb3JFYWNoKChvYnMpID0+IG9icy5kaXNjb25uZWN0KCkpO1xuICAgICAgdGhpcy5fcGFyZW50T2JzZXJ2ZXJzLmZvckVhY2goKG9icykgPT4gb2JzLmRpc2Nvbm5lY3QoKSk7XG4gICAgfSBjYXRjaCAoZSkgeyB9XG4gICAgdGhpcy5fY2FsZW5kYXJPYnNlcnZlcnMgPSBbXTtcbiAgICB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzID0gW107XG4gICAgdGhpcy5fcGFyZW50T2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy5fb2JzZXJ2ZWRQYXJlbnRFbGVtZW50cyA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2NoZWR1bGVVcGRhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3VwZGF0ZVJhZklkICE9IG51bGwpIHJldHVybjsgLy8gYWxyZWFkeSBzY2hlZHVsZWRcbiAgICB0aGlzLl91cGRhdGVSYWZJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGhpcy5fdXBkYXRlUmFmSWQgPSBudWxsO1xuICAgICAgdGhpcy5fdXBkYXRlU3RhcnRFbmRSYW5nZUNsYXNzZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NhbmNlbFNjaGVkdWxlZFVwZGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdXBkYXRlUmFmSWQgIT0gbnVsbCkge1xuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3VwZGF0ZVJhZklkKTtcbiAgICAgIHRoaXMuX3VwZGF0ZVJhZklkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRDYWxlbmRhckVsZW1lbnRzKCk6IEVsZW1lbnRbXSB7XG4gICAgY29uc3QgY2FsRWxzOiBFbGVtZW50W10gPSBbXTtcbiAgICBjb25zdCBvdmVybGF5Q2FsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmF0b21peC1vdmVybGF5LWNhbGVuZGFyIC5wLWRhdGVwaWNrZXInKTtcbiAgICBjb25zdCBpbmxpbmVDYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaW5saW5lLWNhbGVuZGFyIC5wLWRhdGVwaWNrZXInKTtcbiAgICBpZiAob3ZlcmxheUNhbCkgY2FsRWxzLnB1c2gob3ZlcmxheUNhbCk7XG4gICAgaWYgKGlubGluZUNhbCkgY2FsRWxzLnB1c2goaW5saW5lQ2FsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLm92ZXJsYXlQYW5lbCBhcyBhbnk7XG4gICAgICBpZiAocGFuZWwgJiYgcGFuZWwuZWwgJiYgcGFuZWwuZWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBjb25zdCBlbCA9IHBhbmVsLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnAtZGF0ZXBpY2tlcicpO1xuICAgICAgICBpZiAoZWwpIGNhbEVscy5wdXNoKGVsIGFzIEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHsgfVxuICAgIC8vIHJlbW92ZSBkdXBsaWNhdGVzXG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChjYWxFbHMpKTtcbiAgfVxufVxuIiwiPGRpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbmxpbmU7IGVsc2UgaW5saW5lQmxvY2tcIj5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInN0eWxlQ2xhc3NcIiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW25nQ2xhc3NdPVwiaW5wdXRTdHlsZUNsYXNzXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3ZhbHVlXT1cImdldERhdGVSYW5nZUxhYmVsKClcIlxuICAgICAgICByZWFkb25seVxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAoY2xpY2spPVwib3ZlcmxheVBhbmVsPy50b2dnbGUoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uSW5wdXRLZXlEb3duKCRldmVudClcIlxuICAgICAgLz5cbiAgICAgIDxpIGNsYXNzPVwicGkgcGktY2FsZW5kYXIgaW5wdXQtaWNvblwiIHRpdGxlPVwiT3BlbiBjYWxlbmRhclwiIChjbGljayk9XCIhZGlzYWJsZWQgJiYgb3ZlcmxheVBhbmVsPy50b2dnbGUoJGV2ZW50KVwiPjwvaT5cbiAgICAgIDxpICpuZ0lmPVwiaGFzU2VsZWN0aW9uXCIgY2xhc3M9XCJwaSBwaS10aW1lcyBpbnB1dC1jbGVhci1pY29uXCIgdGl0bGU9XCJDbGVhclwiIHRhYmluZGV4PVwiMFwiIChjbGljayk9XCIhZGlzYWJsZWQgJiYgY2xlYXJBbmRTdG9wKCRldmVudClcIiAoa2V5ZG93bi5lbnRlcik9XCIhZGlzYWJsZWQgJiYgY2xlYXJBbmRTdG9wKCRldmVudClcIiAoa2V5ZG93bi5zcGFjZSk9XCIhZGlzYWJsZWQgJiYgY2xlYXJBbmRTdG9wKCRldmVudClcIj48L2k+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxwLW92ZXJsYXlQYW5lbCAjb3ZlcmxheVBhbmVsIFtkaXNtaXNzYWJsZV09XCJ0cnVlXCIgYXBwZW5kVG89XCJib2R5XCIgc3R5bGVDbGFzcz1cImF0b21peC1kYXRlLXJhbmdlLW92ZXJsYXlcIiAob25TaG93KT1cIm9uT3ZlcmxheVNob3coKVwiIChvbkhpZGUpPVwib25PdmVybGF5SGlkZSgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheS1pbm5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheS1sZWZ0XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInByZXNldC1saXN0XCI+XG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwcmVzZXQtYnRuXCIgKGNsaWNrKT1cImFwcGx5UHJlc2V0KCd0b2RheScpXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogc2VsZWN0ZWRQcmVzZXQgPT09ICd0b2RheScgfVwiIGxhYmVsPVwiVG9kYXlcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInByZXNldC1idG5cIiAoY2xpY2spPVwiYXBwbHlQcmVzZXQoJ3llc3RlcmRheScpXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogc2VsZWN0ZWRQcmVzZXQgPT09ICd5ZXN0ZXJkYXknIH1cIiBsYWJlbD1cIlllc3RlcmRheVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicHJlc2V0LWJ0blwiIChjbGljayk9XCJhcHBseVByZXNldCgnbGFzdDdkYXlzJylcIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBzZWxlY3RlZFByZXNldCA9PT0gJ2xhc3Q3ZGF5cycgfVwiIGxhYmVsPVwiTGFzdCA3IGRheXNcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInByZXNldC1idG5cIiAoY2xpY2spPVwiYXBwbHlQcmVzZXQoJ2xhc3QzMGRheXMnKVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IHNlbGVjdGVkUHJlc2V0ID09PSAnbGFzdDMwZGF5cycgfVwiIGxhYmVsPVwiTGFzdCAzMCBkYXlzXCI+PC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwcmVzZXQtYnRuXCIgKGNsaWNrKT1cImFwcGx5UHJlc2V0KCdsYXN0M21vbnRocycpXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogc2VsZWN0ZWRQcmVzZXQgPT09ICdsYXN0M21vbnRocycgfVwiIGxhYmVsPVwiTGFzdCAzIG1vbnRoc1wiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicHJlc2V0LWJ0blwiIChjbGljayk9XCJhcHBseVByZXNldCgnbGFzdDZtb250aHMnKVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IHNlbGVjdGVkUHJlc2V0ID09PSAnbGFzdDZtb250aHMnIH1cIiBsYWJlbD1cIkxhc3QgNiBtb250aHNcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwicmVzZXQtbGlua1wiIChjbGljayk9XCJyZXNldEFuZENsb3NlKClcIj5SZXNldDwvYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5LXJpZ2h0XCI+XG4gICAgICAgICAgPHAtY2FsZW5kYXIgWyhuZ01vZGVsKV09XCJtb2RlbERhdGVcIiBbc2VsZWN0aW9uTW9kZV09XCIncmFuZ2UnXCIgW2lubGluZV09XCJ0cnVlXCIgW2RhdGVGb3JtYXRdPVwiJ21tL2RkL3l5eXknXCIgW3Nob3dPdGhlck1vbnRoc109XCJ0cnVlXCIgW2xvY2FsZV09XCJlbkxvY2FsZVwiIFtzaG93SWNvbl09XCJmYWxzZVwiIFtzdHlsZUNsYXNzXT1cIidhdG9taXgtb3ZlcmxheS1jYWxlbmRhcidcIiAobmdNb2RlbENoYW5nZSk9XCJvbk1vZGVsQ2hhbmdlKCRldmVudClcIiAob25Nb250aENoYW5nZSk9XCJvbkNhbGVuZGFyVmlld0NoYW5nZWQoJGV2ZW50KVwiIChvblllYXJDaGFuZ2UpPVwib25DYWxlbmRhclZpZXdDaGFuZ2VkKCRldmVudClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbbWF4RGF0ZV09XCJtYXhEYXRlXCIgW21pbkRhdGVdPVwibWluRGF0ZVwiPjwvcC1jYWxlbmRhcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3Atb3ZlcmxheVBhbmVsPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctdGVtcGxhdGUgI2lubGluZUJsb2NrPlxuICAgIDxkaXYgW25nQ2xhc3NdPVwic3R5bGVDbGFzc1wiIGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBbbmdDbGFzc109XCJpbnB1dFN0eWxlQ2xhc3NcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICBbdmFsdWVdPVwiZ2V0RGF0ZVJhbmdlTGFiZWwoKVwiXG4gICAgICAgIHJlYWRvbmx5XG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uSW5wdXRLZXlEb3duKCRldmVudClcIlxuICAgICAgLz5cbiAgICAgIDxpIGNsYXNzPVwicGkgcGktY2FsZW5kYXIgaW5wdXQtaWNvblwiIHRpdGxlPVwiT3BlbiBjYWxlbmRhclwiPjwvaT5cbiAgICAgIDxpICpuZ0lmPVwiaGFzU2VsZWN0aW9uXCIgY2xhc3M9XCJwaSBwaS10aW1lcyBpbnB1dC1jbGVhci1pY29uXCIgdGl0bGU9XCJDbGVhclwiIHRhYmluZGV4PVwiMFwiIChjbGljayk9XCJjbGVhckFuZFN0b3AoJGV2ZW50KVwiIChrZXlkb3duLmVudGVyKT1cImNsZWFyQW5kU3RvcCgkZXZlbnQpXCIgKGtleWRvd24uc3BhY2UpPVwiY2xlYXJBbmRTdG9wKCRldmVudClcIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXktaW5uZXIgaW5saW5lLWNhbGVuZGFyIGZsZXhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5LWxlZnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByZXNldC1saXN0XCI+XG4gICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicHJlc2V0LWJ0blwiIChjbGljayk9XCJhcHBseVByZXNldCgndG9kYXknKVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IHNlbGVjdGVkUHJlc2V0ID09PSAndG9kYXknIH1cIiBsYWJlbD1cIlRvZGF5XCI+PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicHJlc2V0LWJ0blwiIChjbGljayk9XCJhcHBseVByZXNldCgneWVzdGVyZGF5JylcIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBzZWxlY3RlZFByZXNldCA9PT0gJ3llc3RlcmRheScgfVwiIGxhYmVsPVwiWWVzdGVyZGF5XCI+PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicHJlc2V0LWJ0blwiIChjbGljayk9XCJhcHBseVByZXNldCgnbGFzdDdkYXlzJylcIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBzZWxlY3RlZFByZXNldCA9PT0gJ2xhc3Q3ZGF5cycgfVwiIGxhYmVsPVwiTGFzdCA3IGRheXNcIj48L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwcmVzZXQtYnRuXCIgKGNsaWNrKT1cImFwcGx5UHJlc2V0KCdsYXN0MzBkYXlzJylcIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBzZWxlY3RlZFByZXNldCA9PT0gJ2xhc3QzMGRheXMnIH1cIiBsYWJlbD1cIkxhc3QgMzAgZGF5c1wiPjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInByZXNldC1idG5cIiAoY2xpY2spPVwiYXBwbHlQcmVzZXQoJ2xhc3QzbW9udGhzJylcIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBzZWxlY3RlZFByZXNldCA9PT0gJ2xhc3QzbW9udGhzJyB9XCIgbGFiZWw9XCJMYXN0IDMgbW9udGhzXCI+PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicHJlc2V0LWJ0blwiIChjbGljayk9XCJhcHBseVByZXNldCgnbGFzdDZtb250aHMnKVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IHNlbGVjdGVkUHJlc2V0ID09PSAnbGFzdDZtb250aHMnIH1cIiBsYWJlbD1cIkxhc3QgNiBtb250aHNcIj48L2J1dHRvbj5cbiAgICAgICAgICA8YSBjbGFzcz1cInJlc2V0LWxpbmtcIiAoY2xpY2spPVwicmVzZXRBbmRDbG9zZSgpXCI+UmVzZXQ8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJvdmVybGF5LXJpZ2h0XCI+XG4gIDxwLWNhbGVuZGFyIFsobmdNb2RlbCldPVwibW9kZWxEYXRlXCIgW3NlbGVjdGlvbk1vZGVdPVwiJ3JhbmdlJ1wiIFtpbmxpbmVdPVwidHJ1ZVwiIFtkYXRlRm9ybWF0XT1cIidtbS9kZC95eXl5J1wiIFtzaG93T3RoZXJNb250aHNdPVwidHJ1ZVwiIFtsb2NhbGVdPVwiZW5Mb2NhbGVcIiBbc2hvd0ljb25dPVwiZmFsc2VcIiBbc3R5bGVDbGFzc109XCInYXRvbWl4LW92ZXJsYXktY2FsZW5kYXInXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCIgKG9uTW9udGhDaGFuZ2UpPVwib25DYWxlbmRhclZpZXdDaGFuZ2VkKCRldmVudClcIiAob25ZZWFyQ2hhbmdlKT1cIm9uQ2FsZW5kYXJWaWV3Q2hhbmdlZCgkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW21heERhdGVdPVwibWF4RGF0ZVwiIFttaW5EYXRlXT1cIm1pbkRhdGVcIj48L3AtY2FsZW5kYXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
@@ -62,11 +62,11 @@ export class AtomixDropdownComponent {
62
62
  this.filerValue.next(event);
63
63
  }
64
64
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AtomixDropdownComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
65
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AtomixDropdownComponent, selector: "atomix-dropdown", inputs: { options: "options", selectedValues: "selectedValues", optionValue: "optionValue", placeholder: "placeholder", optionLabel: "optionLabel", filter: "filter", name: "name", dropDownStyleClass: "dropDownStyleClass", withIcon: "withIcon", disabled: "disabled", showClear: "showClear", iconName: "iconName", containerClass: "containerClass", label: "label", isLabelRequired: "isLabelRequired" }, outputs: { handleDropdownValueChange: "handleDropdownValueChange", handleOnFilter: "handleOnFilter" }, ngImport: i0, template: "<label *ngIf=\"label\"\n >{{ label }}\n <span *ngIf=\"isLabelRequired\" class=\"error-asterisk\">*</span></label\n>\n<p-dropdown\n [options]=\"options\"\n [(ngModel)]=\"selectedValues\"\n (onChange)=\"onChange($event)\"\n [optionValue]=\"optionValue\"\n [optionLabel]=\"optionLabel\"\n [showClear]=\"showClear\"\n [filter]=\"filter\"\n [filterBy]=\"optionLabel\"\n appendTo=\"body\"\n [disabled]=\"disabled\"\n [styleClass]=\"dropDownStyleClass + ' dropdown'\"\n (onFilter)=\"onFilter($event)\"\n [placeholder]=\"placeholder\"\n>\n <ng-template let-option pTemplate=\"item\">\n <div class=\"custom-item\">\n <i\n [ngClass]=\"option.dropdownIcon\"\n class=\"dropdown-logo\"\n *ngIf=\"option.dropdownIcon\"\n ></i>\n <img\n [alt]=\"option.dropdownImage\"\n [src]=\"option.dropdownImage\"\n *ngIf=\"option.dropdownImage\"\n class=\"dropdown-image\"\n />\n\n <span>{{ option[optionLabel] }}</span>\n </div>\n </ng-template>\n</p-dropdown>\n", styles: ["::ng-deep .p-dropdown-panel{margin-top:5px!important}.dropdown-image{width:25px;margin-right:.7rem}.dropdown-logo{text-align:center;font-size:25px;margin-right:.7rem}::ng-deep .dropdown{margin-top:.2rem!important;border-radius:30px}:is() .p-inputtext{padding:1rem!important}.error-asterisk{color:red}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i3.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
65
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AtomixDropdownComponent, selector: "atomix-dropdown", inputs: { options: "options", selectedValues: "selectedValues", optionValue: "optionValue", placeholder: "placeholder", optionLabel: "optionLabel", filter: "filter", name: "name", dropDownStyleClass: "dropDownStyleClass", withIcon: "withIcon", disabled: "disabled", showClear: "showClear", iconName: "iconName", containerClass: "containerClass", label: "label", isLabelRequired: "isLabelRequired" }, outputs: { handleDropdownValueChange: "handleDropdownValueChange", handleOnFilter: "handleOnFilter" }, ngImport: i0, template: "<label *ngIf=\"label\"\n >{{ label }}\n <span *ngIf=\"isLabelRequired\" class=\"error-asterisk\">*</span></label\n>\n<p-dropdown\n [options]=\"options\"\n [(ngModel)]=\"selectedValues\"\n (onChange)=\"onChange($event)\"\n [optionValue]=\"optionValue\"\n [optionLabel]=\"optionLabel\"\n [showClear]=\"showClear\"\n [filter]=\"filter\"\n [filterBy]=\"optionLabel\"\n appendTo=\"body\"\n [disabled]=\"disabled\"\n [styleClass]=\"dropDownStyleClass + ' dropdown'\"\n (onFilter)=\"onFilter($event)\"\n [placeholder]=\"placeholder\"\n>\n <ng-template let-option pTemplate=\"item\">\n <div class=\"custom-item\">\n <i\n [ngClass]=\"option.dropdownIcon\"\n class=\"dropdown-logo\"\n *ngIf=\"option.dropdownIcon\"\n ></i>\n <img\n [alt]=\"option.dropdownImage\"\n [src]=\"option.dropdownImage\"\n *ngIf=\"option.dropdownImage\"\n class=\"dropdown-image\"\n />\n\n <span>{{ option[optionLabel] }}</span>\n </div>\n </ng-template>\n</p-dropdown>\n", styles: ["::ng-deep .p-dropdown-panel{margin-top:5px!important}.dropdown-image{width:25px;margin-right:.7rem}.dropdown-logo{text-align:center;font-size:25px;margin-right:.7rem}::ng-deep .dropdown{border-radius:30px}:is() .p-inputtext{padding:1rem!important}.error-asterisk{color:red}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i3.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
66
66
  }
67
67
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AtomixDropdownComponent, decorators: [{
68
68
  type: Component,
69
- args: [{ selector: 'atomix-dropdown', template: "<label *ngIf=\"label\"\n >{{ label }}\n <span *ngIf=\"isLabelRequired\" class=\"error-asterisk\">*</span></label\n>\n<p-dropdown\n [options]=\"options\"\n [(ngModel)]=\"selectedValues\"\n (onChange)=\"onChange($event)\"\n [optionValue]=\"optionValue\"\n [optionLabel]=\"optionLabel\"\n [showClear]=\"showClear\"\n [filter]=\"filter\"\n [filterBy]=\"optionLabel\"\n appendTo=\"body\"\n [disabled]=\"disabled\"\n [styleClass]=\"dropDownStyleClass + ' dropdown'\"\n (onFilter)=\"onFilter($event)\"\n [placeholder]=\"placeholder\"\n>\n <ng-template let-option pTemplate=\"item\">\n <div class=\"custom-item\">\n <i\n [ngClass]=\"option.dropdownIcon\"\n class=\"dropdown-logo\"\n *ngIf=\"option.dropdownIcon\"\n ></i>\n <img\n [alt]=\"option.dropdownImage\"\n [src]=\"option.dropdownImage\"\n *ngIf=\"option.dropdownImage\"\n class=\"dropdown-image\"\n />\n\n <span>{{ option[optionLabel] }}</span>\n </div>\n </ng-template>\n</p-dropdown>\n", styles: ["::ng-deep .p-dropdown-panel{margin-top:5px!important}.dropdown-image{width:25px;margin-right:.7rem}.dropdown-logo{text-align:center;font-size:25px;margin-right:.7rem}::ng-deep .dropdown{margin-top:.2rem!important;border-radius:30px}:is() .p-inputtext{padding:1rem!important}.error-asterisk{color:red}\n"] }]
69
+ args: [{ selector: 'atomix-dropdown', template: "<label *ngIf=\"label\"\n >{{ label }}\n <span *ngIf=\"isLabelRequired\" class=\"error-asterisk\">*</span></label\n>\n<p-dropdown\n [options]=\"options\"\n [(ngModel)]=\"selectedValues\"\n (onChange)=\"onChange($event)\"\n [optionValue]=\"optionValue\"\n [optionLabel]=\"optionLabel\"\n [showClear]=\"showClear\"\n [filter]=\"filter\"\n [filterBy]=\"optionLabel\"\n appendTo=\"body\"\n [disabled]=\"disabled\"\n [styleClass]=\"dropDownStyleClass + ' dropdown'\"\n (onFilter)=\"onFilter($event)\"\n [placeholder]=\"placeholder\"\n>\n <ng-template let-option pTemplate=\"item\">\n <div class=\"custom-item\">\n <i\n [ngClass]=\"option.dropdownIcon\"\n class=\"dropdown-logo\"\n *ngIf=\"option.dropdownIcon\"\n ></i>\n <img\n [alt]=\"option.dropdownImage\"\n [src]=\"option.dropdownImage\"\n *ngIf=\"option.dropdownImage\"\n class=\"dropdown-image\"\n />\n\n <span>{{ option[optionLabel] }}</span>\n </div>\n </ng-template>\n</p-dropdown>\n", styles: ["::ng-deep .p-dropdown-panel{margin-top:5px!important}.dropdown-image{width:25px;margin-right:.7rem}.dropdown-logo{text-align:center;font-size:25px;margin-right:.7rem}::ng-deep .dropdown{border-radius:30px}:is() .p-inputtext{padding:1rem!important}.error-asterisk{color:red}\n"] }]
70
70
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.NgZone }], propDecorators: { options: [{
71
71
  type: Input
72
72
  }], selectedValues: [{