@rivet-health/design-system 40.19.6 → 40.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -288,10 +288,10 @@ export class CalendarComponent {
288
288
  }
289
289
  }
290
290
  CalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
291
- CalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CalendarComponent, selector: "riv-calendar", inputs: { activeYearMonth: "activeYearMonth", displayMin: "displayMin", displayMax: "displayMax", selectableMin: "selectableMin", selectableMax: "selectableMax", omitRange: "omitRange", selectedValue: "selectedValue" }, outputs: { activeYearMonthChange: "activeYearMonthChange", dateSelect: "dateSelect" }, ngImport: i0, template: "<div class=\"controls\">\n <div>\n <riv-simple-select\n [filterabilityOptions]=\"{ enabled: true, placeholder: 'Month' }\"\n [orderBy]=\"'source'\"\n [optionGroups]=\"monthOptions$ | async | rivOptionGroup\"\n [selectedOption]=\"selectedMonthOption$ | async\"\n (selectedOptionChange)=\"emitActiveYearMonth($event?.date ?? null)\"\n >\n <ng-template #trigger let-state=\"state\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n type=\"button\"\n >\n {{ state.display.formattedSelectedOptions || '...' }}\n </button>\n </ng-template>\n </riv-simple-select>\n <riv-simple-select\n [filterabilityOptions]=\"{ enabled: true, placeholder: 'Year' }\"\n [orderBy]=\"'source'\"\n [optionGroups]=\"yearOptions$ | async | rivOptionGroup\"\n [selectedOption]=\"selectedYearOption$ | async\"\n (selectedOptionChange)=\"emitActiveYearMonth($event?.date ?? null)\"\n >\n <ng-template #trigger let-state=\"state\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n type=\"button\"\n >\n {{ state.display.formattedSelectedOptions || '...' }}\n </button>\n </ng-template>\n </riv-simple-select>\n </div>\n <div\n *ngIf=\"{ prev: previousMonth$ | async, next: nextMonth$ | async }; let vm\"\n >\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowLeft'\"\n [disabled]=\"!vm.prev\"\n (click)=\"vm.prev ? activeYearMonthChange.emit(vm.prev) : null\"\n type=\"button\"\n ></button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowRight'\"\n [disabled]=\"!vm.next\"\n (click)=\"vm.next ? activeYearMonthChange.emit(vm.next) : null\"\n type=\"button\"\n ></button>\n </div>\n</div>\n<div class=\"calendar\">\n <span class=\"label\">Su</span>\n <span class=\"label\">Mo</span>\n <span class=\"label\">Tu</span>\n <span class=\"label\">We</span>\n <span class=\"label\">Th</span>\n <span class=\"label\">Fr</span>\n <span class=\"label\">Sa</span>\n <button\n *ngFor=\"let day of dates$ | async; trackBy: trackByDate\"\n class=\"day\"\n [disabled]=\"day.hidden\"\n [attr.aria-disabled]=\"day.hidden ? 'true' : null\"\n [class.hidden]=\"day.hidden\"\n [class.bleed]=\"!day.inCurrentMonth && !day.hidden\"\n [class.fade-in]=\"day.fadeIn\"\n [class.fade-out]=\"day.fadeOut\"\n [class.in-range]=\"day.inRange\"\n [class.rounded-ne]=\"day.roundedNe\"\n [class.rounded-nw]=\"day.roundedNw\"\n [class.rounded-se]=\"day.roundedSe\"\n [class.rounded-sw]=\"day.roundedSw\"\n (click)=\"selectDay(day)\"\n type=\"button\"\n >\n <span\n class=\"day-wrapper\"\n [class.selected]=\"day.selected\"\n [class.today]=\"day.today\"\n >\n {{ day.display }}\n </span>\n </button>\n</div>\n", styles: [".controls{display:flex;align-items:center;justify-content:space-between}.calendar{display:grid;grid-template-columns:repeat(7,calc(var(--base-grid-size) * 10));grid-auto-rows:calc(var(--base-grid-size) * 6)}.label{display:flex;justify-content:center;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy)}.day{display:flex;align-items:stretch;cursor:pointer}.day.hidden{cursor:default}.day:hover:not(.hidden){background-color:var(--surface-light-1)}.day.in-range{background-color:var(--purp-10)}.day.fade-out{background-image:linear-gradient(to right,var(--purp-10),var(--white-100))}.day.fade-in{background-image:linear-gradient(to right,var(--white-100),var(--purp-10))}.day.bleed{color:var(--type-light-low-contrast)}.day.rounded-ne{border-top-right-radius:var(--border-radius-medium)}.day.rounded-nw{border-top-left-radius:var(--border-radius-medium)}.day.rounded-sw{border-bottom-left-radius:var(--border-radius-medium)}.day.rounded-se{border-bottom-right-radius:var(--border-radius-medium)}.day-wrapper{flex-grow:1;display:flex;justify-content:center;align-items:center;border-radius:var(--border-radius-medium)}.day-wrapper.selected{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}.day-wrapper.today{border-radius:calc(var(--base-grid-size) * 8);border:var(--border-width) solid var(--border-light);font-weight:var(--font-weight-heavy)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.SimpleSelectComponent, selector: "riv-simple-select", inputs: ["optionGroups", "selectedOption", "size", "disabled", "locked", "filterabilityOptions", "orderBy", "placeholder", "maxHeight", "maxWidth", "minHeight", "minWidth", "dividers", "sortSelectedToTop", "grow", "preferredCalloutPosition", "allowedCalloutPositions"], outputs: ["selectedOptionChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.OptionGroupPipe, name: "rivOptionGroup" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
291
+ CalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CalendarComponent, selector: "riv-calendar", inputs: { activeYearMonth: "activeYearMonth", displayMin: "displayMin", displayMax: "displayMax", selectableMin: "selectableMin", selectableMax: "selectableMax", omitRange: "omitRange", selectedValue: "selectedValue" }, outputs: { activeYearMonthChange: "activeYearMonthChange", dateSelect: "dateSelect" }, ngImport: i0, template: "<div class=\"controls\">\n <div>\n <riv-simple-select\n [filterabilityOptions]=\"{ enabled: true, placeholder: 'Month' }\"\n [orderBy]=\"'source'\"\n [optionGroups]=\"monthOptions$ | async | rivOptionGroup\"\n [selectedOption]=\"selectedMonthOption$ | async\"\n (selectedOptionChange)=\"emitActiveYearMonth($event?.date ?? null)\"\n >\n <ng-template #trigger let-state=\"state\">\n <span\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n >\n {{ state.display.formattedSelectedOptions || '...' }}\n </span>\n </ng-template>\n </riv-simple-select>\n <riv-simple-select\n [filterabilityOptions]=\"{ enabled: true, placeholder: 'Year' }\"\n [orderBy]=\"'source'\"\n [optionGroups]=\"yearOptions$ | async | rivOptionGroup\"\n [selectedOption]=\"selectedYearOption$ | async\"\n (selectedOptionChange)=\"emitActiveYearMonth($event?.date ?? null)\"\n >\n <ng-template #trigger let-state=\"state\">\n <span\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n >\n {{ state.display.formattedSelectedOptions || '...' }}\n </span>\n </ng-template>\n </riv-simple-select>\n </div>\n <div\n *ngIf=\"{ prev: previousMonth$ | async, next: nextMonth$ | async }; let vm\"\n >\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowLeft'\"\n [disabled]=\"!vm.prev\"\n (click)=\"vm.prev ? activeYearMonthChange.emit(vm.prev) : null\"\n type=\"button\"\n ></button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowRight'\"\n [disabled]=\"!vm.next\"\n (click)=\"vm.next ? activeYearMonthChange.emit(vm.next) : null\"\n type=\"button\"\n ></button>\n </div>\n</div>\n<div class=\"calendar\">\n <span class=\"label\">Su</span>\n <span class=\"label\">Mo</span>\n <span class=\"label\">Tu</span>\n <span class=\"label\">We</span>\n <span class=\"label\">Th</span>\n <span class=\"label\">Fr</span>\n <span class=\"label\">Sa</span>\n <button\n *ngFor=\"let day of dates$ | async; trackBy: trackByDate\"\n class=\"day\"\n [disabled]=\"day.hidden\"\n [attr.aria-disabled]=\"day.hidden ? 'true' : null\"\n [class.hidden]=\"day.hidden\"\n [class.bleed]=\"!day.inCurrentMonth && !day.hidden\"\n [class.fade-in]=\"day.fadeIn\"\n [class.fade-out]=\"day.fadeOut\"\n [class.in-range]=\"day.inRange\"\n [class.rounded-ne]=\"day.roundedNe\"\n [class.rounded-nw]=\"day.roundedNw\"\n [class.rounded-se]=\"day.roundedSe\"\n [class.rounded-sw]=\"day.roundedSw\"\n (click)=\"selectDay(day)\"\n type=\"button\"\n >\n <span\n class=\"day-wrapper\"\n [class.selected]=\"day.selected\"\n [class.today]=\"day.today\"\n >\n {{ day.display }}\n </span>\n </button>\n</div>\n", styles: [".controls{display:flex;align-items:center;justify-content:space-between}.calendar{display:grid;grid-template-columns:repeat(7,calc(var(--base-grid-size) * 10));grid-auto-rows:calc(var(--base-grid-size) * 6)}.label{display:flex;justify-content:center;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy)}.day{display:flex;align-items:stretch;cursor:pointer}.day.hidden{cursor:default}.day:hover:not(.hidden){background-color:var(--surface-light-1)}.day.in-range{background-color:var(--purp-10)}.day.fade-out{background-image:linear-gradient(to right,var(--purp-10),var(--white-100))}.day.fade-in{background-image:linear-gradient(to right,var(--white-100),var(--purp-10))}.day.bleed{color:var(--type-light-low-contrast)}.day.rounded-ne{border-top-right-radius:var(--border-radius-medium)}.day.rounded-nw{border-top-left-radius:var(--border-radius-medium)}.day.rounded-sw{border-bottom-left-radius:var(--border-radius-medium)}.day.rounded-se{border-bottom-right-radius:var(--border-radius-medium)}.day-wrapper{flex-grow:1;display:flex;justify-content:center;align-items:center;border-radius:var(--border-radius-medium)}.day-wrapper.selected{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}.day-wrapper.today{border-radius:calc(var(--base-grid-size) * 8);border:var(--border-width) solid var(--border-light);font-weight:var(--font-weight-heavy)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.SimpleSelectComponent, selector: "riv-simple-select", inputs: ["optionGroups", "selectedOption", "size", "disabled", "locked", "filterabilityOptions", "orderBy", "placeholder", "maxHeight", "maxWidth", "minHeight", "minWidth", "dividers", "sortSelectedToTop", "grow", "preferredCalloutPosition", "allowedCalloutPositions"], outputs: ["selectedOptionChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.OptionGroupPipe, name: "rivOptionGroup" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
292
292
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CalendarComponent, decorators: [{
293
293
  type: Component,
294
- args: [{ selector: 'riv-calendar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"controls\">\n <div>\n <riv-simple-select\n [filterabilityOptions]=\"{ enabled: true, placeholder: 'Month' }\"\n [orderBy]=\"'source'\"\n [optionGroups]=\"monthOptions$ | async | rivOptionGroup\"\n [selectedOption]=\"selectedMonthOption$ | async\"\n (selectedOptionChange)=\"emitActiveYearMonth($event?.date ?? null)\"\n >\n <ng-template #trigger let-state=\"state\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n type=\"button\"\n >\n {{ state.display.formattedSelectedOptions || '...' }}\n </button>\n </ng-template>\n </riv-simple-select>\n <riv-simple-select\n [filterabilityOptions]=\"{ enabled: true, placeholder: 'Year' }\"\n [orderBy]=\"'source'\"\n [optionGroups]=\"yearOptions$ | async | rivOptionGroup\"\n [selectedOption]=\"selectedYearOption$ | async\"\n (selectedOptionChange)=\"emitActiveYearMonth($event?.date ?? null)\"\n >\n <ng-template #trigger let-state=\"state\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n type=\"button\"\n >\n {{ state.display.formattedSelectedOptions || '...' }}\n </button>\n </ng-template>\n </riv-simple-select>\n </div>\n <div\n *ngIf=\"{ prev: previousMonth$ | async, next: nextMonth$ | async }; let vm\"\n >\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowLeft'\"\n [disabled]=\"!vm.prev\"\n (click)=\"vm.prev ? activeYearMonthChange.emit(vm.prev) : null\"\n type=\"button\"\n ></button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowRight'\"\n [disabled]=\"!vm.next\"\n (click)=\"vm.next ? activeYearMonthChange.emit(vm.next) : null\"\n type=\"button\"\n ></button>\n </div>\n</div>\n<div class=\"calendar\">\n <span class=\"label\">Su</span>\n <span class=\"label\">Mo</span>\n <span class=\"label\">Tu</span>\n <span class=\"label\">We</span>\n <span class=\"label\">Th</span>\n <span class=\"label\">Fr</span>\n <span class=\"label\">Sa</span>\n <button\n *ngFor=\"let day of dates$ | async; trackBy: trackByDate\"\n class=\"day\"\n [disabled]=\"day.hidden\"\n [attr.aria-disabled]=\"day.hidden ? 'true' : null\"\n [class.hidden]=\"day.hidden\"\n [class.bleed]=\"!day.inCurrentMonth && !day.hidden\"\n [class.fade-in]=\"day.fadeIn\"\n [class.fade-out]=\"day.fadeOut\"\n [class.in-range]=\"day.inRange\"\n [class.rounded-ne]=\"day.roundedNe\"\n [class.rounded-nw]=\"day.roundedNw\"\n [class.rounded-se]=\"day.roundedSe\"\n [class.rounded-sw]=\"day.roundedSw\"\n (click)=\"selectDay(day)\"\n type=\"button\"\n >\n <span\n class=\"day-wrapper\"\n [class.selected]=\"day.selected\"\n [class.today]=\"day.today\"\n >\n {{ day.display }}\n </span>\n </button>\n</div>\n", styles: [".controls{display:flex;align-items:center;justify-content:space-between}.calendar{display:grid;grid-template-columns:repeat(7,calc(var(--base-grid-size) * 10));grid-auto-rows:calc(var(--base-grid-size) * 6)}.label{display:flex;justify-content:center;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy)}.day{display:flex;align-items:stretch;cursor:pointer}.day.hidden{cursor:default}.day:hover:not(.hidden){background-color:var(--surface-light-1)}.day.in-range{background-color:var(--purp-10)}.day.fade-out{background-image:linear-gradient(to right,var(--purp-10),var(--white-100))}.day.fade-in{background-image:linear-gradient(to right,var(--white-100),var(--purp-10))}.day.bleed{color:var(--type-light-low-contrast)}.day.rounded-ne{border-top-right-radius:var(--border-radius-medium)}.day.rounded-nw{border-top-left-radius:var(--border-radius-medium)}.day.rounded-sw{border-bottom-left-radius:var(--border-radius-medium)}.day.rounded-se{border-bottom-right-radius:var(--border-radius-medium)}.day-wrapper{flex-grow:1;display:flex;justify-content:center;align-items:center;border-radius:var(--border-radius-medium)}.day-wrapper.selected{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}.day-wrapper.today{border-radius:calc(var(--base-grid-size) * 8);border:var(--border-width) solid var(--border-light);font-weight:var(--font-weight-heavy)}\n"] }]
294
+ args: [{ selector: 'riv-calendar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"controls\">\n <div>\n <riv-simple-select\n [filterabilityOptions]=\"{ enabled: true, placeholder: 'Month' }\"\n [orderBy]=\"'source'\"\n [optionGroups]=\"monthOptions$ | async | rivOptionGroup\"\n [selectedOption]=\"selectedMonthOption$ | async\"\n (selectedOptionChange)=\"emitActiveYearMonth($event?.date ?? null)\"\n >\n <ng-template #trigger let-state=\"state\">\n <span\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n >\n {{ state.display.formattedSelectedOptions || '...' }}\n </span>\n </ng-template>\n </riv-simple-select>\n <riv-simple-select\n [filterabilityOptions]=\"{ enabled: true, placeholder: 'Year' }\"\n [orderBy]=\"'source'\"\n [optionGroups]=\"yearOptions$ | async | rivOptionGroup\"\n [selectedOption]=\"selectedYearOption$ | async\"\n (selectedOptionChange)=\"emitActiveYearMonth($event?.date ?? null)\"\n >\n <ng-template #trigger let-state=\"state\">\n <span\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n >\n {{ state.display.formattedSelectedOptions || '...' }}\n </span>\n </ng-template>\n </riv-simple-select>\n </div>\n <div\n *ngIf=\"{ prev: previousMonth$ | async, next: nextMonth$ | async }; let vm\"\n >\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowLeft'\"\n [disabled]=\"!vm.prev\"\n (click)=\"vm.prev ? activeYearMonthChange.emit(vm.prev) : null\"\n type=\"button\"\n ></button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowRight'\"\n [disabled]=\"!vm.next\"\n (click)=\"vm.next ? activeYearMonthChange.emit(vm.next) : null\"\n type=\"button\"\n ></button>\n </div>\n</div>\n<div class=\"calendar\">\n <span class=\"label\">Su</span>\n <span class=\"label\">Mo</span>\n <span class=\"label\">Tu</span>\n <span class=\"label\">We</span>\n <span class=\"label\">Th</span>\n <span class=\"label\">Fr</span>\n <span class=\"label\">Sa</span>\n <button\n *ngFor=\"let day of dates$ | async; trackBy: trackByDate\"\n class=\"day\"\n [disabled]=\"day.hidden\"\n [attr.aria-disabled]=\"day.hidden ? 'true' : null\"\n [class.hidden]=\"day.hidden\"\n [class.bleed]=\"!day.inCurrentMonth && !day.hidden\"\n [class.fade-in]=\"day.fadeIn\"\n [class.fade-out]=\"day.fadeOut\"\n [class.in-range]=\"day.inRange\"\n [class.rounded-ne]=\"day.roundedNe\"\n [class.rounded-nw]=\"day.roundedNw\"\n [class.rounded-se]=\"day.roundedSe\"\n [class.rounded-sw]=\"day.roundedSw\"\n (click)=\"selectDay(day)\"\n type=\"button\"\n >\n <span\n class=\"day-wrapper\"\n [class.selected]=\"day.selected\"\n [class.today]=\"day.today\"\n >\n {{ day.display }}\n </span>\n </button>\n</div>\n", styles: [".controls{display:flex;align-items:center;justify-content:space-between}.calendar{display:grid;grid-template-columns:repeat(7,calc(var(--base-grid-size) * 10));grid-auto-rows:calc(var(--base-grid-size) * 6)}.label{display:flex;justify-content:center;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy)}.day{display:flex;align-items:stretch;cursor:pointer}.day.hidden{cursor:default}.day:hover:not(.hidden){background-color:var(--surface-light-1)}.day.in-range{background-color:var(--purp-10)}.day.fade-out{background-image:linear-gradient(to right,var(--purp-10),var(--white-100))}.day.fade-in{background-image:linear-gradient(to right,var(--white-100),var(--purp-10))}.day.bleed{color:var(--type-light-low-contrast)}.day.rounded-ne{border-top-right-radius:var(--border-radius-medium)}.day.rounded-nw{border-top-left-radius:var(--border-radius-medium)}.day.rounded-sw{border-bottom-left-radius:var(--border-radius-medium)}.day.rounded-se{border-bottom-right-radius:var(--border-radius-medium)}.day-wrapper{flex-grow:1;display:flex;justify-content:center;align-items:center;border-radius:var(--border-radius-medium)}.day-wrapper.selected{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}.day-wrapper.today{border-radius:calc(var(--base-grid-size) * 8);border:var(--border-width) solid var(--border-light);font-weight:var(--font-weight-heavy)}\n"] }]
295
295
  }], propDecorators: { activeYearMonth: [{
296
296
  type: Input
297
297
  }], displayMin: [{
@@ -315,4 +315,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
315
315
  CalendarComponent.defaultMin = timeYear.floor(timeYear.offset(new Date(), -7));
316
316
  CalendarComponent.defaultMax = timeDay.offset(timeYear.floor(timeYear.offset(new Date(), 5)), -1);
317
317
  })(CalendarComponent || (CalendarComponent = {}));
318
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUNSLFNBQVMsR0FDVixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUNMLGVBQWUsRUFFZixhQUFhLEVBQ2IsR0FBRyxFQUNILFdBQVcsR0FDWixNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBRWQsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsTUFBTSxzQkFBc0IsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFaEQsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFVO0lBQ2xDLE9BQU8sUUFBUSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQXlCRCw2RUFBNkU7QUFDN0UsMkJBQTJCO0FBQzNCLG1HQUFtRztBQU9uRyxNQUFNLE9BQU8saUJBQWlCO0lBTjlC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OztBQWNULFdBQWlCLGlCQUFpQjtJQUNuQiw0QkFBVSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCw0QkFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQ3RDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQzlDLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDLEVBTmdCLGlCQUFpQixLQUFqQixpQkFBaUIsUUFNakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFRyYWNrQnlGdW5jdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICB0aW1lRGF5LFxuICB0aW1lRGF5cyxcbiAgdGltZU1vbnRoLFxuICB0aW1lTW9udGhzLFxuICB0aW1lU3VuZGF5LFxuICB0aW1lWWVhcixcbiAgdGltZVllYXJzLFxufSBmcm9tICdkMy10aW1lJztcbmltcG9ydCB7IHRpbWVGb3JtYXQgfSBmcm9tICdkMy10aW1lLWZvcm1hdCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG59IGZyb20gJ3J4anMnO1xuXG5jb25zdCBtb250aEZvcm1hdHRlciA9IHRpbWVGb3JtYXQoJyVCJyk7XG5jb25zdCB5ZWFyRm9ybWF0dGVyID0gdGltZUZvcm1hdCgnJVknKTtcbmNvbnN0IGRheUZvcm1hdHRlciA9IHRpbWVGb3JtYXQoJyVlJyk7XG5jb25zdCB3ZWVrZGF5TnVtYmVyRm9ybWF0dGVyID0gdGltZUZvcm1hdCgnJXcnKTtcblxuZnVuY3Rpb24gZ2V0V2Vla2RheU51bWJlcihkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHBhcnNlSW50KHdlZWtkYXlOdW1iZXJGb3JtYXR0ZXIoZGF0ZSkpO1xufVxuXG50eXBlIERhdGVPcHRpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBkYXRlOiBEYXRlO1xufTtcblxudHlwZSBDYWxlbmRhckRhdGUgPSB7XG4gIGRhdGU6IERhdGU7XG4gIGRpc3BsYXk6IHN0cmluZztcbiAgZmFkZUluOiBib29sZWFuO1xuICBmYWRlT3V0OiBib29sZWFuO1xuICBoaWRkZW46IGJvb2xlYW47XG4gIGluQ3VycmVudE1vbnRoOiBib29sZWFuO1xuICBpblJhbmdlOiBib29sZWFuO1xuICByb3VuZGVkTmU6IGJvb2xlYW47XG4gIHJvdW5kZWROdzogYm9vbGVhbjtcbiAgcm91bmRlZFNlOiBib29sZWFuO1xuICByb3VuZGVkU3c6IGJvb2xlYW47XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICB0b2RheTogYm9vbGVhbjtcbn07XG5cbi8vIFRPRE86IG9uY2Ugd2UgdXBncmFkZSB0byBBbmd1bGFyIDE2LCB0aGlzIGNvbXBvbmVudCBjYW4gYmUgY2xlYW5lZCB1cCB3aXRoXG4vLyBzaWduYWxzIGluc3RlYWQgb2YgUnhKUy5cbi8vIGh0dHBzOi8vd3d3Lm5vdGlvbi5zby9yaXZldC9SZXNvbHZlLVRPRE9zLWFmdGVyLUFuZ3VsYXItdXBncmFkZS0xZjI2NjdlYjJhMzE4MGI3OWY2YWQ5MmE3ZTU3NmYwOFxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LWNhbGVuZGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXIuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZVllYXJNb250aCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGU+KG5ldyBEYXRlKCkpO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGFjdGl2ZVllYXJNb250aCh2OiBEYXRlKSB7XG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBhY3RpdmVZZWFyTW9udGgoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlWWVhck1vbnRoJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwbGF5TWluJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0ZT4oXG4gICAgQ2FsZW5kYXJDb21wb25lbnQuZGVmYXVsdE1pbixcbiAgKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNwbGF5TWluKHY6IERhdGUpIHtcbiAgICB0aGlzLmRpc3BsYXlNaW4kLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBkaXNwbGF5TWluKCk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXlNaW4kLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlNYXgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRlPihcbiAgICBDYWxlbmRhckNvbXBvbmVudC5kZWZhdWx0TWF4LFxuICApO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc3BsYXlNYXgodjogRGF0ZSkge1xuICAgIHRoaXMuZGlzcGxheU1heCQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGRpc3BsYXlNYXgoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheU1heCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0YWJsZU1pbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGUgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZCxcbiAgKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWxlY3RhYmxlTWluKHY6IERhdGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnNlbGVjdGFibGVNaW4kLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RhYmxlTWluKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGFibGVNaW4kLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGFibGVNYXgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRlIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWQsXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VsZWN0YWJsZU1heCh2OiBEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5zZWxlY3RhYmxlTWF4JC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0YWJsZU1heCgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RhYmxlTWF4JC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvbWl0UmFuZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxbRGF0ZSwgRGF0ZV0gfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZCxcbiAgKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBvbWl0UmFuZ2UodjogW0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5vbWl0UmFuZ2UkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBvbWl0UmFuZ2UoKTogW0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5vbWl0UmFuZ2UkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkVmFsdWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBEYXRlIHwgW0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWxlY3RlZFZhbHVlKHY6IERhdGUgfCBbRGF0ZSwgRGF0ZV0gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZFZhbHVlKCk6IERhdGUgfCBbRGF0ZSwgRGF0ZV0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVmFsdWUkLmdldFZhbHVlKCk7XG4gIH1cblxuICByZWFkb25seSB5ZWFyT3B0aW9ucyQ6IE9ic2VydmFibGU8RGF0ZU9wdGlvbltdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZGlzcGxheU1pbiQsXG4gICAgdGhpcy5kaXNwbGF5TWF4JCxcbiAgICB0aGlzLnNlbGVjdGFibGVNaW4kLFxuICAgIHRoaXMuc2VsZWN0YWJsZU1heCQsXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICBdKS5waXBlKFxuICAgIG1hcChcbiAgICAgIChbXG4gICAgICAgIGRpc3BsYXlNaW4sXG4gICAgICAgIGRpc3BsYXlNYXgsXG4gICAgICAgIHNlbGVjdGFibGVNaW4sXG4gICAgICAgIHNlbGVjdGFibGVNYXgsXG4gICAgICAgIGFjdGl2ZVllYXJNb250aCxcbiAgICAgIF0pID0+IHtcbiAgICAgICAgY29uc3QgbWluOiBEYXRlID0gc2VsZWN0YWJsZU1pbiA/PyBkaXNwbGF5TWluO1xuICAgICAgICBjb25zdCBtYXg6IERhdGUgPSBzZWxlY3RhYmxlTWF4ID8/IGRpc3BsYXlNYXg7XG4gICAgICAgIHJldHVybiB0aW1lWWVhcnModGltZVllYXIuZmxvb3IoZGlzcGxheU1pbiksIGRpc3BsYXlNYXgpXG4gICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgIC5tYXAoZmxvb3JlZFllYXIgPT4ge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICBmbG9vcmVkWWVhci5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICBhY3RpdmVZZWFyTW9udGguZ2V0TW9udGgoKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogeWVhci5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIHRpdGxlOiB5ZWFyRm9ybWF0dGVyKHllYXIpLFxuICAgICAgICAgICAgICBkaXNhYmxlZDpcbiAgICAgICAgICAgICAgICB5ZWFyLmdldEZ1bGxZZWFyKCkgPCBtaW4uZ2V0RnVsbFllYXIoKSB8fFxuICAgICAgICAgICAgICAgIHllYXIuZ2V0RnVsbFllYXIoKSA+IG1heC5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICBkYXRlOiB5ZWFyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkWWVhck9wdGlvbiQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnllYXJPcHRpb25zJCxcbiAgICB0aGlzLmFjdGl2ZVllYXJNb250aCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFt5ZWFyT3B0aW9ucywgYWN0aXZlWWVhck1vbnRoXSkgPT5cbiAgICAgICAgeWVhck9wdGlvbnMuZmluZChcbiAgICAgICAgICB5ID0+IHkuaWQgPT09IGFjdGl2ZVllYXJNb250aC5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCksXG4gICAgICAgICkgfHwgbnVsbCxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgbW9udGhPcHRpb25zJDogT2JzZXJ2YWJsZTxEYXRlT3B0aW9uW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICAgIHRoaXMuZGlzcGxheU1pbiQsXG4gICAgdGhpcy5kaXNwbGF5TWF4JCxcbiAgICB0aGlzLnNlbGVjdGFibGVNaW4kLFxuICAgIHRoaXMuc2VsZWN0YWJsZU1heCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFtcbiAgICAgICAgYWN0aXZlWWVhck1vbnRoLFxuICAgICAgICBkaXNwbGF5TWluLFxuICAgICAgICBkaXNwbGF5TWF4LFxuICAgICAgICBzZWxlY3RhYmxlTWluLFxuICAgICAgICBzZWxlY3RhYmxlTWF4LFxuICAgICAgXSkgPT4ge1xuICAgICAgICBjb25zdCBtaW4gPSBzZWxlY3RhYmxlTWluID8/IGRpc3BsYXlNaW47XG4gICAgICAgIGNvbnN0IG1heCA9IHNlbGVjdGFibGVNYXggPz8gZGlzcGxheU1heDtcbiAgICAgICAgcmV0dXJuIHRpbWVNb250aHMoXG4gICAgICAgICAgdGltZVllYXIuZmxvb3IoYWN0aXZlWWVhck1vbnRoKSxcbiAgICAgICAgICB0aW1lWWVhci5mbG9vcih0aW1lWWVhci5vZmZzZXQoYWN0aXZlWWVhck1vbnRoLCAxKSksXG4gICAgICAgICkubWFwKG1vbnRoID0+IHtcbiAgICAgICAgICBjb25zdCBhY3RpdmVZZWFyID0gYWN0aXZlWWVhck1vbnRoLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgY29uc3QgbWluWWVhciA9IG1pbi5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgIGNvbnN0IG1heFllYXIgPSBtYXguZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICBjb25zdCBtb250aE51bWJlciA9IG1vbnRoLmdldE1vbnRoKCk7XG4gICAgICAgICAgY29uc3QgbWluTW9udGggPSBtaW4uZ2V0TW9udGgoKTtcbiAgICAgICAgICBjb25zdCBtYXhNb250aCA9IG1heC5nZXRNb250aCgpO1xuXG4gICAgICAgICAgY29uc3QgZGlzYWJsZWQgPVxuICAgICAgICAgICAgKGFjdGl2ZVllYXIgPT09IG1pblllYXIgJiYgbW9udGhOdW1iZXIgPCBtaW5Nb250aCkgfHxcbiAgICAgICAgICAgIChhY3RpdmVZZWFyID09PSBtYXhZZWFyICYmIG1vbnRoTnVtYmVyID4gbWF4TW9udGgpIHx8XG4gICAgICAgICAgICBhY3RpdmVZZWFyIDwgbWluWWVhciB8fFxuICAgICAgICAgICAgYWN0aXZlWWVhciA+IG1heFllYXI7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IG1vbnRoTnVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0aXRsZTogbW9udGhGb3JtYXR0ZXIobW9udGgpLFxuICAgICAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgICAgICBkYXRlOiBtb250aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkTW9udGhPcHRpb24kID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5tb250aE9wdGlvbnMkLFxuICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoJCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW21vbnRoT3B0aW9ucywgYWN0aXZlWWVhck1vbnRoXSkgPT5cbiAgICAgICAgbW9udGhPcHRpb25zLmZpbmQoXG4gICAgICAgICAgbSA9PiBtLmlkID09PSBhY3RpdmVZZWFyTW9udGguZ2V0TW9udGgoKS50b1N0cmluZygpLFxuICAgICAgICApIHx8IG51bGwsXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHByZXZpb3VzTW9udGgkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICAgIHRoaXMuZGlzcGxheU1pbiQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWluJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFt5ZWFyTW9udGgsIGRpc3BsYXlNaW4sIHNlbGVjdGFibGVNaW5dKSA9PiB7XG4gICAgICBjb25zdCBtaW46IERhdGUgPSBzZWxlY3RhYmxlTWluID8/IGRpc3BsYXlNaW47XG4gICAgICBjb25zdCBwcmV2aW91cyA9IHRpbWVNb250aC5mbG9vcih0aW1lTW9udGgub2Zmc2V0KHllYXJNb250aCwgLTEpKTtcbiAgICAgIGNvbnN0IG1pbk1vbnRoID0gbWluLmdldE1vbnRoKCk7XG4gICAgICBjb25zdCBtaW5ZZWFyID0gbWluLmdldEZ1bGxZZWFyKCk7XG4gICAgICBjb25zdCBwcmV2TW9udGggPSBwcmV2aW91cy5nZXRNb250aCgpO1xuICAgICAgY29uc3QgcHJldlllYXIgPSBwcmV2aW91cy5nZXRGdWxsWWVhcigpO1xuXG4gICAgICBjb25zdCBkaXNhYmxlZCA9XG4gICAgICAgIChwcmV2WWVhciA9PT0gbWluWWVhciAmJiBwcmV2TW9udGggPCBtaW5Nb250aCkgfHwgcHJldlllYXIgPCBtaW5ZZWFyO1xuICAgICAgaWYgKGRpc2FibGVkKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICB9KSxcbiAgKTtcblxuICByZWFkb25seSBuZXh0TW9udGgkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICAgIHRoaXMuZGlzcGxheU1heCQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWF4JCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFt5ZWFyTW9udGgsIGRpc3BsYXlNYXgsIHNlbGVjdGFibGVNYXhdKSA9PiB7XG4gICAgICBjb25zdCBtYXg6IERhdGUgPSBzZWxlY3RhYmxlTWF4ID8/IGRpc3BsYXlNYXg7XG4gICAgICBjb25zdCBuZXh0ID0gdGltZU1vbnRoLmZsb29yKHRpbWVNb250aC5vZmZzZXQoeWVhck1vbnRoLCAxKSk7XG4gICAgICBjb25zdCBtYXhNb250aCA9IG1heC5nZXRNb250aCgpO1xuICAgICAgY29uc3QgbWF4WWVhciA9IG1heC5nZXRGdWxsWWVhcigpO1xuICAgICAgY29uc3QgbmV4dE1vbnRoID0gbmV4dC5nZXRNb250aCgpO1xuICAgICAgY29uc3QgbmV4dFllYXIgPSBuZXh0LmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgIGNvbnN0IGRpc2FibGVkID1cbiAgICAgICAgKG5leHRZZWFyID09PSBtYXhZZWFyICYmIG5leHRNb250aCA+IG1heE1vbnRoKSB8fCBuZXh0WWVhciA+IG1heFllYXI7XG4gICAgICBpZiAoZGlzYWJsZWQpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSksXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkYXRlc0luU2VsZWN0ZWRSYW5nZSQ6IE9ic2VydmFibGU8RGF0ZVtdPiA9XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlJC5waXBlKFxuICAgICAgbWFwKHNlbGVjdGVkVmFsdWUgPT4ge1xuICAgICAgICBpZiAoIXNlbGVjdGVkVmFsdWUpIHJldHVybiBbXTtcbiAgICAgICAgaWYgKHNlbGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gW3NlbGVjdGVkVmFsdWVdO1xuICAgICAgICByZXR1cm4gdGltZURheXMoXG4gICAgICAgICAgdGltZURheS5mbG9vcihzZWxlY3RlZFZhbHVlWzBdKSxcbiAgICAgICAgICB0aW1lRGF5LmZsb29yKHRpbWVEYXkub2Zmc2V0KHNlbGVjdGVkVmFsdWVbMV0sIDEpKSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgICApO1xuXG4gIHJlYWRvbmx5IGRhdGVzJDogT2JzZXJ2YWJsZTxDYWxlbmRhckRhdGVbXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmFjdGl2ZVllYXJNb250aCQsXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlJCxcbiAgICB0aGlzLmRhdGVzSW5TZWxlY3RlZFJhbmdlJCxcbiAgICB0aGlzLnNlbGVjdGFibGVNaW4kLFxuICAgIHRoaXMuc2VsZWN0YWJsZU1heCQsXG4gICAgdGhpcy5vbWl0UmFuZ2UkLFxuICBdKS5waXBlKFxuICAgIG1hcChcbiAgICAgIChbXG4gICAgICAgIGFjdGl2ZVllYXJNb250aCxcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSxcbiAgICAgICAgZGF0ZXNJblNlbGVjdGVkUmFuZ2UsXG4gICAgICAgIHNlbGVjdGFibGVNaW4sXG4gICAgICAgIHNlbGVjdGFibGVNYXgsXG4gICAgICAgIG9taXRSYW5nZSxcbiAgICAgIF0pID0+IHtcbiAgICAgICAgY29uc3QgY2FsZW5kYXJEYXRlcyA9IHRpbWVEYXlzKFxuICAgICAgICAgIHRpbWVTdW5kYXkuZmxvb3IoYWN0aXZlWWVhck1vbnRoKSxcbiAgICAgICAgICB0aW1lU3VuZGF5LmNlaWwodGltZU1vbnRoLm9mZnNldChhY3RpdmVZZWFyTW9udGgsIDEpKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbWluQ2FsZW5kYXJEYXRlID0gY2FsZW5kYXJEYXRlc1swXTtcbiAgICAgICAgY29uc3QgbWF4Q2FsZW5kYXJEYXRlID0gY2FsZW5kYXJEYXRlc1tjYWxlbmRhckRhdGVzLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBzZWxlY3RlZERhdGVDb29yZGluYXRlcyA9IG5ldyBNYXA8bnVtYmVyLCBbbnVtYmVyLCBudW1iZXJdPigpO1xuICAgICAgICBjb25zdCB2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2UgPSBkYXRlc0luU2VsZWN0ZWRSYW5nZS5maWx0ZXIoXG4gICAgICAgICAgc2VsZWN0ZWQgPT5cbiAgICAgICAgICAgIHNlbGVjdGVkLnZhbHVlT2YoKSA+PSBtaW5DYWxlbmRhckRhdGUudmFsdWVPZigpICYmXG4gICAgICAgICAgICBzZWxlY3RlZC52YWx1ZU9mKCkgPD0gbWF4Q2FsZW5kYXJEYXRlLnZhbHVlT2YoKSAmJlxuICAgICAgICAgICAgKHNlbGVjdGFibGVNaW5cbiAgICAgICAgICAgICAgPyBzZWxlY3RlZC52YWx1ZU9mKCkgPj0gc2VsZWN0YWJsZU1pbi52YWx1ZU9mKClcbiAgICAgICAgICAgICAgOiB0cnVlKSAmJlxuICAgICAgICAgICAgKHNlbGVjdGFibGVNYXhcbiAgICAgICAgICAgICAgPyBzZWxlY3RlZC52YWx1ZU9mKCkgPD0gc2VsZWN0YWJsZU1heC52YWx1ZU9mKClcbiAgICAgICAgICAgICAgOiB0cnVlKSAmJlxuICAgICAgICAgICAgKG9taXRSYW5nZVxuICAgICAgICAgICAgICA/IHNlbGVjdGVkLnZhbHVlT2YoKSA8IG9taXRSYW5nZVswXS52YWx1ZU9mKCkgfHxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZC52YWx1ZU9mKCkgPiBvbWl0UmFuZ2VbMV0udmFsdWVPZigpXG4gICAgICAgICAgICAgIDogdHJ1ZSksXG4gICAgICAgICk7XG4gICAgICAgIGlmICh2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGZpcnN0VmlzaWJsZVNlbGVjdGVkRGF0ZU9mZnNldCA9IGdldFdlZWtkYXlOdW1iZXIoXG4gICAgICAgICAgICB2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VbMF0sXG4gICAgICAgICAgKTtcbiAgICAgICAgICB2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2UuZm9yRWFjaCgoc2VsZWN0ZWQsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHggPSBnZXRXZWVrZGF5TnVtYmVyKHNlbGVjdGVkKTtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBNYXRoLmZsb29yKChpICsgZmlyc3RWaXNpYmxlU2VsZWN0ZWREYXRlT2Zmc2V0KSAvIDcpO1xuICAgICAgICAgICAgc2VsZWN0ZWREYXRlQ29vcmRpbmF0ZXMuc2V0KHNlbGVjdGVkLnZhbHVlT2YoKSwgW3gsIHldKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXJpYWxpemVDb29yZGluYXRlcyhjb29yZGluYXRlczogW251bWJlciwgbnVtYmVyXSk6IHN0cmluZyB7XG4gICAgICAgICAgcmV0dXJuIGNvb3JkaW5hdGVzLmpvaW4oJzonKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzID0gbmV3IFNldChcbiAgICAgICAgICBbLi4uc2VsZWN0ZWREYXRlQ29vcmRpbmF0ZXMudmFsdWVzKCldLm1hcChzZXJpYWxpemVDb29yZGluYXRlcyksXG4gICAgICAgICk7XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0Um91bmRlZENvcm5lcnMoZGF0ZTogRGF0ZSk6IHtcbiAgICAgICAgICBudzogYm9vbGVhbjtcbiAgICAgICAgICBuZTogYm9vbGVhbjtcbiAgICAgICAgICBzZTogYm9vbGVhbjtcbiAgICAgICAgICBzdzogYm9vbGVhbjtcbiAgICAgICAgfSB7XG4gICAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBzZWxlY3RlZERhdGVDb29yZGluYXRlcy5nZXQoZGF0ZS52YWx1ZU9mKCkpO1xuICAgICAgICAgIGlmICghY29vcmRpbmF0ZXMpXG4gICAgICAgICAgICByZXR1cm4geyBudzogZmFsc2UsIG5lOiBmYWxzZSwgc2U6IGZhbHNlLCBzdzogZmFsc2UgfTtcbiAgICAgICAgICBjb25zdCBbeCwgeV0gPSBjb29yZGluYXRlcztcbiAgICAgICAgICBjb25zdCB0b3AgPSBzZXJpYWxpemVDb29yZGluYXRlcyhbeCwgeSAtIDFdKSxcbiAgICAgICAgICAgIHJpZ2h0ID0gc2VyaWFsaXplQ29vcmRpbmF0ZXMoW3ggKyAxLCB5XSksXG4gICAgICAgICAgICBib3R0b20gPSBzZXJpYWxpemVDb29yZGluYXRlcyhbeCwgeSArIDFdKSxcbiAgICAgICAgICAgIGxlZnQgPSBzZXJpYWxpemVDb29yZGluYXRlcyhbeCAtIDEsIHldKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbnc6XG4gICAgICAgICAgICAgICF2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VDb29yZGluYXRlcy5oYXModG9wKSAmJlxuICAgICAgICAgICAgICAhdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMuaGFzKGxlZnQpLFxuICAgICAgICAgICAgbmU6XG4gICAgICAgICAgICAgICF2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VDb29yZGluYXRlcy5oYXModG9wKSAmJlxuICAgICAgICAgICAgICAhdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMuaGFzKHJpZ2h0KSxcbiAgICAgICAgICAgIHNlOlxuICAgICAgICAgICAgICAhdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMuaGFzKHJpZ2h0KSAmJlxuICAgICAgICAgICAgICAhdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMuaGFzKGJvdHRvbSksXG4gICAgICAgICAgICBzdzpcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyhsZWZ0KSAmJlxuICAgICAgICAgICAgICAhdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMuaGFzKGJvdHRvbSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZVZhbHVlcyA9IG5ldyBTZXQoXG4gICAgICAgICAgdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlLm1hcChzZWxlY3RlZCA9PiBzZWxlY3RlZC52YWx1ZU9mKCkpLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHRvZGF5ID0gdGltZURheS5mbG9vcihuZXcgRGF0ZSgpKTtcblxuICAgICAgICByZXR1cm4gY2FsZW5kYXJEYXRlcy5tYXAoZGF0ZSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBudywgbmUsIHNlLCBzdyB9ID0gZ2V0Um91bmRlZENvcm5lcnMoZGF0ZSk7XG4gICAgICAgICAgY29uc3QgZGF0ZVZhbHVlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgY29uc3QgaW5SYW5nZSA9IHZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZVZhbHVlcy5oYXMoZGF0ZVZhbHVlKTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdGVkVmFsdWVcbiAgICAgICAgICAgID8gc2VsZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgICAgPyBkYXRlVmFsdWUgPT09IHNlbGVjdGVkVmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICAgIDogZGF0ZVZhbHVlID09PSBzZWxlY3RlZFZhbHVlWzBdLnZhbHVlT2YoKSB8fFxuICAgICAgICAgICAgICAgIGRhdGVWYWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZVsxXS52YWx1ZU9mKClcbiAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBkaXNwbGF5OiBkYXlGb3JtYXR0ZXIoZGF0ZSksXG4gICAgICAgICAgICBmYWRlSW46XG4gICAgICAgICAgICAgIGluUmFuZ2UgJiZcbiAgICAgICAgICAgICAgKGRhdGVWYWx1ZSA9PT1cbiAgICAgICAgICAgICAgICBNYXRoLm1heChcbiAgICAgICAgICAgICAgICAgIG1pbkNhbGVuZGFyRGF0ZS52YWx1ZU9mKCksXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlTWluPy52YWx1ZU9mKCkgPz8gLUluZmluaXR5LFxuICAgICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICBkYXRlVmFsdWUgPT09XG4gICAgICAgICAgICAgICAgICAob21pdFJhbmdlXG4gICAgICAgICAgICAgICAgICAgID8gdGltZURheS5vZmZzZXQob21pdFJhbmdlWzFdLCAxKS52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICAgOiAtSW5maW5pdHkpKSxcbiAgICAgICAgICAgIGZhZGVPdXQ6XG4gICAgICAgICAgICAgIGluUmFuZ2UgJiZcbiAgICAgICAgICAgICAgKGRhdGVWYWx1ZSA9PT1cbiAgICAgICAgICAgICAgICBNYXRoLm1pbihcbiAgICAgICAgICAgICAgICAgIG1heENhbGVuZGFyRGF0ZS52YWx1ZU9mKCksXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlTWF4Py52YWx1ZU9mKCkgPz8gSW5maW5pdHksXG4gICAgICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgICAgIGRhdGVWYWx1ZSA9PT1cbiAgICAgICAgICAgICAgICAgIChvbWl0UmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgPyB0aW1lRGF5Lm9mZnNldChvbWl0UmFuZ2VbMF0sIC0xKS52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICAgOiBJbmZpbml0eSkpLFxuICAgICAgICAgICAgaGlkZGVuOlxuICAgICAgICAgICAgICBkYXRlVmFsdWUgPCAoc2VsZWN0YWJsZU1pbj8udmFsdWVPZigpID8/IC1JbmZpbml0eSkgfHxcbiAgICAgICAgICAgICAgZGF0ZVZhbHVlID4gKHNlbGVjdGFibGVNYXg/LnZhbHVlT2YoKSA/PyBJbmZpbml0eSkgfHxcbiAgICAgICAgICAgICAgKG9taXRSYW5nZVxuICAgICAgICAgICAgICAgID8gb21pdFJhbmdlWzBdLnZhbHVlT2YoKSA8PSBkYXRlVmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgIGRhdGVWYWx1ZSA8PSBvbWl0UmFuZ2VbMV0udmFsdWVPZigpXG4gICAgICAgICAgICAgICAgOiBmYWxzZSksXG4gICAgICAgICAgICBpbkN1cnJlbnRNb250aDpcbiAgICAgICAgICAgICAgZGF0ZVZhbHVlID49IGFjdGl2ZVllYXJNb250aC52YWx1ZU9mKCkgJiZcbiAgICAgICAgICAgICAgZGF0ZVZhbHVlIDwgdGltZU1vbnRoLm9mZnNldChhY3RpdmVZZWFyTW9udGgsIDEpLnZhbHVlT2YoKSxcbiAgICAgICAgICAgIGluUmFuZ2UsXG4gICAgICAgICAgICByb3VuZGVkTmU6IG5lLFxuICAgICAgICAgICAgcm91bmRlZE53OiBudyxcbiAgICAgICAgICAgIHJvdW5kZWRTZTogc2UsXG4gICAgICAgICAgICByb3VuZGVkU3c6IHN3LFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICB0b2RheTogZGF0ZVZhbHVlID09PSB0b2RheS52YWx1ZU9mKCksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICBzZWxlY3REYXkoZGF5OiBDYWxlbmRhckRhdGUpIHtcbiAgICBpZiAoIWRheS5pbkN1cnJlbnRNb250aCkge1xuICAgICAgdGhpcy5hY3RpdmVZZWFyTW9udGhDaGFuZ2UuZW1pdCh0aW1lTW9udGguZmxvb3IoZGF5LmRhdGUpKTtcbiAgICB9XG4gICAgdGhpcy5kYXRlU2VsZWN0LmVtaXQoZGF5LmRhdGUpO1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIGFjdGl2ZVllYXJNb250aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICBlbWl0QWN0aXZlWWVhck1vbnRoKHllYXJNb250aDogRGF0ZSB8IG51bGwpIHtcbiAgICBpZiAoeWVhck1vbnRoKSB0aGlzLmFjdGl2ZVllYXJNb250aENoYW5nZS5lbWl0KHllYXJNb250aCk7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgZGF0ZVNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICB0cmFja0J5RGF0ZTogVHJhY2tCeUZ1bmN0aW9uPENhbGVuZGFyRGF0ZT4gPSAoXywgZGF0ZSkgPT5cbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAuLi5kYXRlLFxuICAgICAgZGF0ZTogW1xuICAgICAgICBkYXRlLmRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgZGF0ZS5kYXRlLmdldE1vbnRoKCkgKyAxLFxuICAgICAgICBkYXRlLmRhdGUuZ2V0RGF0ZSgpLFxuICAgICAgXS5qb2luKCc6JyksXG4gICAgfSk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2FsZW5kYXJDb21wb25lbnQge1xuICBleHBvcnQgY29uc3QgZGVmYXVsdE1pbiA9IHRpbWVZZWFyLmZsb29yKHRpbWVZZWFyLm9mZnNldChuZXcgRGF0ZSgpLCAtNykpO1xuICBleHBvcnQgY29uc3QgZGVmYXVsdE1heCA9IHRpbWVEYXkub2Zmc2V0KFxuICAgIHRpbWVZZWFyLmZsb29yKHRpbWVZZWFyLm9mZnNldChuZXcgRGF0ZSgpLCA1KSksXG4gICAgLTEsXG4gICk7XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udHJvbHNcIj5cbiAgPGRpdj5cbiAgICA8cml2LXNpbXBsZS1zZWxlY3RcbiAgICAgIFtmaWx0ZXJhYmlsaXR5T3B0aW9uc109XCJ7IGVuYWJsZWQ6IHRydWUsIHBsYWNlaG9sZGVyOiAnTW9udGgnIH1cIlxuICAgICAgW29yZGVyQnldPVwiJ3NvdXJjZSdcIlxuICAgICAgW29wdGlvbkdyb3Vwc109XCJtb250aE9wdGlvbnMkIHwgYXN5bmMgfCByaXZPcHRpb25Hcm91cFwiXG4gICAgICBbc2VsZWN0ZWRPcHRpb25dPVwic2VsZWN0ZWRNb250aE9wdGlvbiQgfCBhc3luY1wiXG4gICAgICAoc2VsZWN0ZWRPcHRpb25DaGFuZ2UpPVwiZW1pdEFjdGl2ZVllYXJNb250aCgkZXZlbnQ/LmRhdGUgPz8gbnVsbClcIlxuICAgID5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdHJpZ2dlciBsZXQtc3RhdGU9XCJzdGF0ZVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgW2ljb25dPVwic3RhdGUuZGlzcGxheS5vcGVuID8gJ0NoZXZyb25VcCcgOiAnQ2hldnJvbkRvd24nXCJcbiAgICAgICAgICBbaWNvblBvc2l0aW9uXT1cIidsYXN0J1wiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBzdGF0ZS5kaXNwbGF5LmZvcm1hdHRlZFNlbGVjdGVkT3B0aW9ucyB8fCAnLi4uJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9yaXYtc2ltcGxlLXNlbGVjdD5cbiAgICA8cml2LXNpbXBsZS1zZWxlY3RcbiAgICAgIFtmaWx0ZXJhYmlsaXR5T3B0aW9uc109XCJ7IGVuYWJsZWQ6IHRydWUsIHBsYWNlaG9sZGVyOiAnWWVhcicgfVwiXG4gICAgICBbb3JkZXJCeV09XCInc291cmNlJ1wiXG4gICAgICBbb3B0aW9uR3JvdXBzXT1cInllYXJPcHRpb25zJCB8IGFzeW5jIHwgcml2T3B0aW9uR3JvdXBcIlxuICAgICAgW3NlbGVjdGVkT3B0aW9uXT1cInNlbGVjdGVkWWVhck9wdGlvbiQgfCBhc3luY1wiXG4gICAgICAoc2VsZWN0ZWRPcHRpb25DaGFuZ2UpPVwiZW1pdEFjdGl2ZVllYXJNb250aCgkZXZlbnQ/LmRhdGUgPz8gbnVsbClcIlxuICAgID5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdHJpZ2dlciBsZXQtc3RhdGU9XCJzdGF0ZVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgW2ljb25dPVwic3RhdGUuZGlzcGxheS5vcGVuID8gJ0NoZXZyb25VcCcgOiAnQ2hldnJvbkRvd24nXCJcbiAgICAgICAgICBbaWNvblBvc2l0aW9uXT1cIidsYXN0J1wiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBzdGF0ZS5kaXNwbGF5LmZvcm1hdHRlZFNlbGVjdGVkT3B0aW9ucyB8fCAnLi4uJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9yaXYtc2ltcGxlLXNlbGVjdD5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICAqbmdJZj1cInsgcHJldjogcHJldmlvdXNNb250aCQgfCBhc3luYywgbmV4dDogbmV4dE1vbnRoJCB8IGFzeW5jIH07IGxldCB2bVwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICByaXZCdXR0b25cbiAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICBbaWNvbl09XCInQXJyb3dMZWZ0J1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIXZtLnByZXZcIlxuICAgICAgKGNsaWNrKT1cInZtLnByZXYgPyBhY3RpdmVZZWFyTW9udGhDaGFuZ2UuZW1pdCh2bS5wcmV2KSA6IG51bGxcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgPjwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIHJpdkJ1dHRvblxuICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgIFtpY29uXT1cIidBcnJvd1JpZ2h0J1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIXZtLm5leHRcIlxuICAgICAgKGNsaWNrKT1cInZtLm5leHQgPyBhY3RpdmVZZWFyTW9udGhDaGFuZ2UuZW1pdCh2bS5uZXh0KSA6IG51bGxcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgPjwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImNhbGVuZGFyXCI+XG4gIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5TdTwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPk1vPC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+VHU8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5XZTwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlRoPC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+RnI8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5TYTwvc3Bhbj5cbiAgPGJ1dHRvblxuICAgICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF0ZXMkIHwgYXN5bmM7IHRyYWNrQnk6IHRyYWNrQnlEYXRlXCJcbiAgICBjbGFzcz1cImRheVwiXG4gICAgW2Rpc2FibGVkXT1cImRheS5oaWRkZW5cIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGF5LmhpZGRlbiA/ICd0cnVlJyA6IG51bGxcIlxuICAgIFtjbGFzcy5oaWRkZW5dPVwiZGF5LmhpZGRlblwiXG4gICAgW2NsYXNzLmJsZWVkXT1cIiFkYXkuaW5DdXJyZW50TW9udGggJiYgIWRheS5oaWRkZW5cIlxuICAgIFtjbGFzcy5mYWRlLWluXT1cImRheS5mYWRlSW5cIlxuICAgIFtjbGFzcy5mYWRlLW91dF09XCJkYXkuZmFkZU91dFwiXG4gICAgW2NsYXNzLmluLXJhbmdlXT1cImRheS5pblJhbmdlXCJcbiAgICBbY2xhc3Mucm91bmRlZC1uZV09XCJkYXkucm91bmRlZE5lXCJcbiAgICBbY2xhc3Mucm91bmRlZC1ud109XCJkYXkucm91bmRlZE53XCJcbiAgICBbY2xhc3Mucm91bmRlZC1zZV09XCJkYXkucm91bmRlZFNlXCJcbiAgICBbY2xhc3Mucm91bmRlZC1zd109XCJkYXkucm91bmRlZFN3XCJcbiAgICAoY2xpY2spPVwic2VsZWN0RGF5KGRheSlcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICA+XG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPVwiZGF5LXdyYXBwZXJcIlxuICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImRheS5zZWxlY3RlZFwiXG4gICAgICBbY2xhc3MudG9kYXldPVwiZGF5LnRvZGF5XCJcbiAgICA+XG4gICAgICB7eyBkYXkuZGlzcGxheSB9fVxuICAgIDwvc3Bhbj5cbiAgPC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUNSLFNBQVMsR0FDVixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUNMLGVBQWUsRUFFZixhQUFhLEVBQ2IsR0FBRyxFQUNILFdBQVcsR0FDWixNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBRWQsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsTUFBTSxzQkFBc0IsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFaEQsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFVO0lBQ2xDLE9BQU8sUUFBUSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQXlCRCw2RUFBNkU7QUFDN0UsMkJBQTJCO0FBQzNCLG1HQUFtRztBQU9uRyxNQUFNLE9BQU8saUJBQWlCO0lBTjlC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OztBQWNULFdBQWlCLGlCQUFpQjtJQUNuQiw0QkFBVSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCw0QkFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQ3RDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQzlDLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDLEVBTmdCLGlCQUFpQixLQUFqQixpQkFBaUIsUUFNakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFRyYWNrQnlGdW5jdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICB0aW1lRGF5LFxuICB0aW1lRGF5cyxcbiAgdGltZU1vbnRoLFxuICB0aW1lTW9udGhzLFxuICB0aW1lU3VuZGF5LFxuICB0aW1lWWVhcixcbiAgdGltZVllYXJzLFxufSBmcm9tICdkMy10aW1lJztcbmltcG9ydCB7IHRpbWVGb3JtYXQgfSBmcm9tICdkMy10aW1lLWZvcm1hdCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG59IGZyb20gJ3J4anMnO1xuXG5jb25zdCBtb250aEZvcm1hdHRlciA9IHRpbWVGb3JtYXQoJyVCJyk7XG5jb25zdCB5ZWFyRm9ybWF0dGVyID0gdGltZUZvcm1hdCgnJVknKTtcbmNvbnN0IGRheUZvcm1hdHRlciA9IHRpbWVGb3JtYXQoJyVlJyk7XG5jb25zdCB3ZWVrZGF5TnVtYmVyRm9ybWF0dGVyID0gdGltZUZvcm1hdCgnJXcnKTtcblxuZnVuY3Rpb24gZ2V0V2Vla2RheU51bWJlcihkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHBhcnNlSW50KHdlZWtkYXlOdW1iZXJGb3JtYXR0ZXIoZGF0ZSkpO1xufVxuXG50eXBlIERhdGVPcHRpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBkYXRlOiBEYXRlO1xufTtcblxudHlwZSBDYWxlbmRhckRhdGUgPSB7XG4gIGRhdGU6IERhdGU7XG4gIGRpc3BsYXk6IHN0cmluZztcbiAgZmFkZUluOiBib29sZWFuO1xuICBmYWRlT3V0OiBib29sZWFuO1xuICBoaWRkZW46IGJvb2xlYW47XG4gIGluQ3VycmVudE1vbnRoOiBib29sZWFuO1xuICBpblJhbmdlOiBib29sZWFuO1xuICByb3VuZGVkTmU6IGJvb2xlYW47XG4gIHJvdW5kZWROdzogYm9vbGVhbjtcbiAgcm91bmRlZFNlOiBib29sZWFuO1xuICByb3VuZGVkU3c6IGJvb2xlYW47XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICB0b2RheTogYm9vbGVhbjtcbn07XG5cbi8vIFRPRE86IG9uY2Ugd2UgdXBncmFkZSB0byBBbmd1bGFyIDE2LCB0aGlzIGNvbXBvbmVudCBjYW4gYmUgY2xlYW5lZCB1cCB3aXRoXG4vLyBzaWduYWxzIGluc3RlYWQgb2YgUnhKUy5cbi8vIGh0dHBzOi8vd3d3Lm5vdGlvbi5zby9yaXZldC9SZXNvbHZlLVRPRE9zLWFmdGVyLUFuZ3VsYXItdXBncmFkZS0xZjI2NjdlYjJhMzE4MGI3OWY2YWQ5MmE3ZTU3NmYwOFxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LWNhbGVuZGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXIuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZVllYXJNb250aCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGU+KG5ldyBEYXRlKCkpO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGFjdGl2ZVllYXJNb250aCh2OiBEYXRlKSB7XG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBhY3RpdmVZZWFyTW9udGgoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlWWVhck1vbnRoJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwbGF5TWluJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0ZT4oXG4gICAgQ2FsZW5kYXJDb21wb25lbnQuZGVmYXVsdE1pbixcbiAgKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNwbGF5TWluKHY6IERhdGUpIHtcbiAgICB0aGlzLmRpc3BsYXlNaW4kLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBkaXNwbGF5TWluKCk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXlNaW4kLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlNYXgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRlPihcbiAgICBDYWxlbmRhckNvbXBvbmVudC5kZWZhdWx0TWF4LFxuICApO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc3BsYXlNYXgodjogRGF0ZSkge1xuICAgIHRoaXMuZGlzcGxheU1heCQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGRpc3BsYXlNYXgoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheU1heCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0YWJsZU1pbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGUgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZCxcbiAgKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWxlY3RhYmxlTWluKHY6IERhdGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnNlbGVjdGFibGVNaW4kLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RhYmxlTWluKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGFibGVNaW4kLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGFibGVNYXgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRlIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWQsXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VsZWN0YWJsZU1heCh2OiBEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5zZWxlY3RhYmxlTWF4JC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0YWJsZU1heCgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RhYmxlTWF4JC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvbWl0UmFuZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxbRGF0ZSwgRGF0ZV0gfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZCxcbiAgKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBvbWl0UmFuZ2UodjogW0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5vbWl0UmFuZ2UkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBvbWl0UmFuZ2UoKTogW0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5vbWl0UmFuZ2UkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkVmFsdWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBEYXRlIHwgW0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWxlY3RlZFZhbHVlKHY6IERhdGUgfCBbRGF0ZSwgRGF0ZV0gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZFZhbHVlKCk6IERhdGUgfCBbRGF0ZSwgRGF0ZV0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVmFsdWUkLmdldFZhbHVlKCk7XG4gIH1cblxuICByZWFkb25seSB5ZWFyT3B0aW9ucyQ6IE9ic2VydmFibGU8RGF0ZU9wdGlvbltdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZGlzcGxheU1pbiQsXG4gICAgdGhpcy5kaXNwbGF5TWF4JCxcbiAgICB0aGlzLnNlbGVjdGFibGVNaW4kLFxuICAgIHRoaXMuc2VsZWN0YWJsZU1heCQsXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICBdKS5waXBlKFxuICAgIG1hcChcbiAgICAgIChbXG4gICAgICAgIGRpc3BsYXlNaW4sXG4gICAgICAgIGRpc3BsYXlNYXgsXG4gICAgICAgIHNlbGVjdGFibGVNaW4sXG4gICAgICAgIHNlbGVjdGFibGVNYXgsXG4gICAgICAgIGFjdGl2ZVllYXJNb250aCxcbiAgICAgIF0pID0+IHtcbiAgICAgICAgY29uc3QgbWluOiBEYXRlID0gc2VsZWN0YWJsZU1pbiA/PyBkaXNwbGF5TWluO1xuICAgICAgICBjb25zdCBtYXg6IERhdGUgPSBzZWxlY3RhYmxlTWF4ID8/IGRpc3BsYXlNYXg7XG4gICAgICAgIHJldHVybiB0aW1lWWVhcnModGltZVllYXIuZmxvb3IoZGlzcGxheU1pbiksIGRpc3BsYXlNYXgpXG4gICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgIC5tYXAoZmxvb3JlZFllYXIgPT4ge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICBmbG9vcmVkWWVhci5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICBhY3RpdmVZZWFyTW9udGguZ2V0TW9udGgoKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogeWVhci5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIHRpdGxlOiB5ZWFyRm9ybWF0dGVyKHllYXIpLFxuICAgICAgICAgICAgICBkaXNhYmxlZDpcbiAgICAgICAgICAgICAgICB5ZWFyLmdldEZ1bGxZZWFyKCkgPCBtaW4uZ2V0RnVsbFllYXIoKSB8fFxuICAgICAgICAgICAgICAgIHllYXIuZ2V0RnVsbFllYXIoKSA+IG1heC5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICBkYXRlOiB5ZWFyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkWWVhck9wdGlvbiQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnllYXJPcHRpb25zJCxcbiAgICB0aGlzLmFjdGl2ZVllYXJNb250aCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFt5ZWFyT3B0aW9ucywgYWN0aXZlWWVhck1vbnRoXSkgPT5cbiAgICAgICAgeWVhck9wdGlvbnMuZmluZChcbiAgICAgICAgICB5ID0+IHkuaWQgPT09IGFjdGl2ZVllYXJNb250aC5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCksXG4gICAgICAgICkgfHwgbnVsbCxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgbW9udGhPcHRpb25zJDogT2JzZXJ2YWJsZTxEYXRlT3B0aW9uW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICAgIHRoaXMuZGlzcGxheU1pbiQsXG4gICAgdGhpcy5kaXNwbGF5TWF4JCxcbiAgICB0aGlzLnNlbGVjdGFibGVNaW4kLFxuICAgIHRoaXMuc2VsZWN0YWJsZU1heCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFtcbiAgICAgICAgYWN0aXZlWWVhck1vbnRoLFxuICAgICAgICBkaXNwbGF5TWluLFxuICAgICAgICBkaXNwbGF5TWF4LFxuICAgICAgICBzZWxlY3RhYmxlTWluLFxuICAgICAgICBzZWxlY3RhYmxlTWF4LFxuICAgICAgXSkgPT4ge1xuICAgICAgICBjb25zdCBtaW4gPSBzZWxlY3RhYmxlTWluID8/IGRpc3BsYXlNaW47XG4gICAgICAgIGNvbnN0IG1heCA9IHNlbGVjdGFibGVNYXggPz8gZGlzcGxheU1heDtcbiAgICAgICAgcmV0dXJuIHRpbWVNb250aHMoXG4gICAgICAgICAgdGltZVllYXIuZmxvb3IoYWN0aXZlWWVhck1vbnRoKSxcbiAgICAgICAgICB0aW1lWWVhci5mbG9vcih0aW1lWWVhci5vZmZzZXQoYWN0aXZlWWVhck1vbnRoLCAxKSksXG4gICAgICAgICkubWFwKG1vbnRoID0+IHtcbiAgICAgICAgICBjb25zdCBhY3RpdmVZZWFyID0gYWN0aXZlWWVhck1vbnRoLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgY29uc3QgbWluWWVhciA9IG1pbi5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgIGNvbnN0IG1heFllYXIgPSBtYXguZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICBjb25zdCBtb250aE51bWJlciA9IG1vbnRoLmdldE1vbnRoKCk7XG4gICAgICAgICAgY29uc3QgbWluTW9udGggPSBtaW4uZ2V0TW9udGgoKTtcbiAgICAgICAgICBjb25zdCBtYXhNb250aCA9IG1heC5nZXRNb250aCgpO1xuXG4gICAgICAgICAgY29uc3QgZGlzYWJsZWQgPVxuICAgICAgICAgICAgKGFjdGl2ZVllYXIgPT09IG1pblllYXIgJiYgbW9udGhOdW1iZXIgPCBtaW5Nb250aCkgfHxcbiAgICAgICAgICAgIChhY3RpdmVZZWFyID09PSBtYXhZZWFyICYmIG1vbnRoTnVtYmVyID4gbWF4TW9udGgpIHx8XG4gICAgICAgICAgICBhY3RpdmVZZWFyIDwgbWluWWVhciB8fFxuICAgICAgICAgICAgYWN0aXZlWWVhciA+IG1heFllYXI7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IG1vbnRoTnVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0aXRsZTogbW9udGhGb3JtYXR0ZXIobW9udGgpLFxuICAgICAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgICAgICBkYXRlOiBtb250aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkTW9udGhPcHRpb24kID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5tb250aE9wdGlvbnMkLFxuICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoJCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW21vbnRoT3B0aW9ucywgYWN0aXZlWWVhck1vbnRoXSkgPT5cbiAgICAgICAgbW9udGhPcHRpb25zLmZpbmQoXG4gICAgICAgICAgbSA9PiBtLmlkID09PSBhY3RpdmVZZWFyTW9udGguZ2V0TW9udGgoKS50b1N0cmluZygpLFxuICAgICAgICApIHx8IG51bGwsXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHByZXZpb3VzTW9udGgkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICAgIHRoaXMuZGlzcGxheU1pbiQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWluJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFt5ZWFyTW9udGgsIGRpc3BsYXlNaW4sIHNlbGVjdGFibGVNaW5dKSA9PiB7XG4gICAgICBjb25zdCBtaW46IERhdGUgPSBzZWxlY3RhYmxlTWluID8/IGRpc3BsYXlNaW47XG4gICAgICBjb25zdCBwcmV2aW91cyA9IHRpbWVNb250aC5mbG9vcih0aW1lTW9udGgub2Zmc2V0KHllYXJNb250aCwgLTEpKTtcbiAgICAgIGNvbnN0IG1pbk1vbnRoID0gbWluLmdldE1vbnRoKCk7XG4gICAgICBjb25zdCBtaW5ZZWFyID0gbWluLmdldEZ1bGxZZWFyKCk7XG4gICAgICBjb25zdCBwcmV2TW9udGggPSBwcmV2aW91cy5nZXRNb250aCgpO1xuICAgICAgY29uc3QgcHJldlllYXIgPSBwcmV2aW91cy5nZXRGdWxsWWVhcigpO1xuXG4gICAgICBjb25zdCBkaXNhYmxlZCA9XG4gICAgICAgIChwcmV2WWVhciA9PT0gbWluWWVhciAmJiBwcmV2TW9udGggPCBtaW5Nb250aCkgfHwgcHJldlllYXIgPCBtaW5ZZWFyO1xuICAgICAgaWYgKGRpc2FibGVkKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICB9KSxcbiAgKTtcblxuICByZWFkb25seSBuZXh0TW9udGgkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICAgIHRoaXMuZGlzcGxheU1heCQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWF4JCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFt5ZWFyTW9udGgsIGRpc3BsYXlNYXgsIHNlbGVjdGFibGVNYXhdKSA9PiB7XG4gICAgICBjb25zdCBtYXg6IERhdGUgPSBzZWxlY3RhYmxlTWF4ID8/IGRpc3BsYXlNYXg7XG4gICAgICBjb25zdCBuZXh0ID0gdGltZU1vbnRoLmZsb29yKHRpbWVNb250aC5vZmZzZXQoeWVhck1vbnRoLCAxKSk7XG4gICAgICBjb25zdCBtYXhNb250aCA9IG1heC5nZXRNb250aCgpO1xuICAgICAgY29uc3QgbWF4WWVhciA9IG1heC5nZXRGdWxsWWVhcigpO1xuICAgICAgY29uc3QgbmV4dE1vbnRoID0gbmV4dC5nZXRNb250aCgpO1xuICAgICAgY29uc3QgbmV4dFllYXIgPSBuZXh0LmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgIGNvbnN0IGRpc2FibGVkID1cbiAgICAgICAgKG5leHRZZWFyID09PSBtYXhZZWFyICYmIG5leHRNb250aCA+IG1heE1vbnRoKSB8fCBuZXh0WWVhciA+IG1heFllYXI7XG4gICAgICBpZiAoZGlzYWJsZWQpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSksXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkYXRlc0luU2VsZWN0ZWRSYW5nZSQ6IE9ic2VydmFibGU8RGF0ZVtdPiA9XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlJC5waXBlKFxuICAgICAgbWFwKHNlbGVjdGVkVmFsdWUgPT4ge1xuICAgICAgICBpZiAoIXNlbGVjdGVkVmFsdWUpIHJldHVybiBbXTtcbiAgICAgICAgaWYgKHNlbGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gW3NlbGVjdGVkVmFsdWVdO1xuICAgICAgICByZXR1cm4gdGltZURheXMoXG4gICAgICAgICAgdGltZURheS5mbG9vcihzZWxlY3RlZFZhbHVlWzBdKSxcbiAgICAgICAgICB0aW1lRGF5LmZsb29yKHRpbWVEYXkub2Zmc2V0KHNlbGVjdGVkVmFsdWVbMV0sIDEpKSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgICApO1xuXG4gIHJlYWRvbmx5IGRhdGVzJDogT2JzZXJ2YWJsZTxDYWxlbmRhckRhdGVbXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmFjdGl2ZVllYXJNb250aCQsXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlJCxcbiAgICB0aGlzLmRhdGVzSW5TZWxlY3RlZFJhbmdlJCxcbiAgICB0aGlzLnNlbGVjdGFibGVNaW4kLFxuICAgIHRoaXMuc2VsZWN0YWJsZU1heCQsXG4gICAgdGhpcy5vbWl0UmFuZ2UkLFxuICBdKS5waXBlKFxuICAgIG1hcChcbiAgICAgIChbXG4gICAgICAgIGFjdGl2ZVllYXJNb250aCxcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSxcbiAgICAgICAgZGF0ZXNJblNlbGVjdGVkUmFuZ2UsXG4gICAgICAgIHNlbGVjdGFibGVNaW4sXG4gICAgICAgIHNlbGVjdGFibGVNYXgsXG4gICAgICAgIG9taXRSYW5nZSxcbiAgICAgIF0pID0+IHtcbiAgICAgICAgY29uc3QgY2FsZW5kYXJEYXRlcyA9IHRpbWVEYXlzKFxuICAgICAgICAgIHRpbWVTdW5kYXkuZmxvb3IoYWN0aXZlWWVhck1vbnRoKSxcbiAgICAgICAgICB0aW1lU3VuZGF5LmNlaWwodGltZU1vbnRoLm9mZnNldChhY3RpdmVZZWFyTW9udGgsIDEpKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbWluQ2FsZW5kYXJEYXRlID0gY2FsZW5kYXJEYXRlc1swXTtcbiAgICAgICAgY29uc3QgbWF4Q2FsZW5kYXJEYXRlID0gY2FsZW5kYXJEYXRlc1tjYWxlbmRhckRhdGVzLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBzZWxlY3RlZERhdGVDb29yZGluYXRlcyA9IG5ldyBNYXA8bnVtYmVyLCBbbnVtYmVyLCBudW1iZXJdPigpO1xuICAgICAgICBjb25zdCB2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2UgPSBkYXRlc0luU2VsZWN0ZWRSYW5nZS5maWx0ZXIoXG4gICAgICAgICAgc2VsZWN0ZWQgPT5cbiAgICAgICAgICAgIHNlbGVjdGVkLnZhbHVlT2YoKSA+PSBtaW5DYWxlbmRhckRhdGUudmFsdWVPZigpICYmXG4gICAgICAgICAgICBzZWxlY3RlZC52YWx1ZU9mKCkgPD0gbWF4Q2FsZW5kYXJEYXRlLnZhbHVlT2YoKSAmJlxuICAgICAgICAgICAgKHNlbGVjdGFibGVNaW5cbiAgICAgICAgICAgICAgPyBzZWxlY3RlZC52YWx1ZU9mKCkgPj0gc2VsZWN0YWJsZU1pbi52YWx1ZU9mKClcbiAgICAgICAgICAgICAgOiB0cnVlKSAmJlxuICAgICAgICAgICAgKHNlbGVjdGFibGVNYXhcbiAgICAgICAgICAgICAgPyBzZWxlY3RlZC52YWx1ZU9mKCkgPD0gc2VsZWN0YWJsZU1heC52YWx1ZU9mKClcbiAgICAgICAgICAgICAgOiB0cnVlKSAmJlxuICAgICAgICAgICAgKG9taXRSYW5nZVxuICAgICAgICAgICAgICA/IHNlbGVjdGVkLnZhbHVlT2YoKSA8IG9taXRSYW5nZVswXS52YWx1ZU9mKCkgfHxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZC52YWx1ZU9mKCkgPiBvbWl0UmFuZ2VbMV0udmFsdWVPZigpXG4gICAgICAgICAgICAgIDogdHJ1ZSksXG4gICAgICAgICk7XG4gICAgICAgIGlmICh2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGZpcnN0VmlzaWJsZVNlbGVjdGVkRGF0ZU9mZnNldCA9IGdldFdlZWtkYXlOdW1iZXIoXG4gICAgICAgICAgICB2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VbMF0sXG4gICAgICAgICAgKTtcbiAgICAgICAgICB2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2UuZm9yRWFjaCgoc2VsZWN0ZWQsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHggPSBnZXRXZWVrZGF5TnVtYmVyKHNlbGVjdGVkKTtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBNYXRoLmZsb29yKChpICsgZmlyc3RWaXNpYmxlU2VsZWN0ZWREYXRlT2Zmc2V0KSAvIDcpO1xuICAgICAgICAgICAgc2VsZWN0ZWREYXRlQ29vcmRpbmF0ZXMuc2V0KHNlbGVjdGVkLnZhbHVlT2YoKSwgW3gsIHldKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXJpYWxpemVDb29yZGluYXRlcyhjb29yZGluYXRlczogW251bWJlciwgbnVtYmVyXSk6IHN0cmluZyB7XG4gICAgICAgICAgcmV0dXJuIGNvb3JkaW5hdGVzLmpvaW4oJzonKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzID0gbmV3IFNldChcbiAgICAgICAgICBbLi4uc2VsZWN0ZWREYXRlQ29vcmRpbmF0ZXMudmFsdWVzKCldLm1hcChzZXJpYWxpemVDb29yZGluYXRlcyksXG4gICAgICAgICk7XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0Um91bmRlZENvcm5lcnMoZGF0ZTogRGF0ZSk6IHtcbiAgICAgICAgICBudzogYm9vbGVhbjtcbiAgICAgICAgICBuZTogYm9vbGVhbjtcbiAgICAgICAgICBzZTogYm9vbGVhbjtcbiAgICAgICAgICBzdzogYm9vbGVhbjtcbiAgICAgICAgfSB7XG4gICAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBzZWxlY3RlZERhdGVDb29yZGluYXRlcy5nZXQoZGF0ZS52YWx1ZU9mKCkpO1xuICAgICAgICAgIGlmICghY29vcmRpbmF0ZXMpXG4gICAgICAgICAgICByZXR1cm4geyBudzogZmFsc2UsIG5lOiBmYWxzZSwgc2U6IGZhbHNlLCBzdzogZmFsc2UgfTtcbiAgICAgICAgICBjb25zdCBbeCwgeV0gPSBjb29yZGluYXRlcztcbiAgICAgICAgICBjb25zdCB0b3AgPSBzZXJpYWxpemVDb29yZGluYXRlcyhbeCwgeSAtIDFdKSxcbiAgICAgICAgICAgIHJpZ2h0ID0gc2VyaWFsaXplQ29vcmRpbmF0ZXMoW3ggKyAxLCB5XSksXG4gICAgICAgICAgICBib3R0b20gPSBzZXJpYWxpemVDb29yZGluYXRlcyhbeCwgeSArIDFdKSxcbiAgICAgICAgICAgIGxlZnQgPSBzZXJpYWxpemVDb29yZGluYXRlcyhbeCAtIDEsIHldKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbnc6XG4gICAgICAgICAgICAgICF2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VDb29yZGluYXRlcy5oYXModG9wKSAmJlxuICAgICAgICAgICAgICAhdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMuaGFzKGxlZnQpLFxuICAgICAgICAgICAgbmU6XG4gICAgICAgICAgICAgICF2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VDb29yZGluYXRlcy5oYXModG9wKSAmJlxuICAgICAgICAgICAgICAhdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMuaGFzKHJpZ2h0KSxcbiAgICAgICAgICAgIHNlOlxuICAgICAgICAgICAgICAhdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMuaGFzKHJpZ2h0KSAmJlxuICAgICAgICAgICAgICAhdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMuaGFzKGJvdHRvbSksXG4gICAgICAgICAgICBzdzpcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyhsZWZ0KSAmJlxuICAgICAgICAgICAgICAhdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMuaGFzKGJvdHRvbSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZVZhbHVlcyA9IG5ldyBTZXQoXG4gICAgICAgICAgdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlLm1hcChzZWxlY3RlZCA9PiBzZWxlY3RlZC52YWx1ZU9mKCkpLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHRvZGF5ID0gdGltZURheS5mbG9vcihuZXcgRGF0ZSgpKTtcblxuICAgICAgICByZXR1cm4gY2FsZW5kYXJEYXRlcy5tYXAoZGF0ZSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBudywgbmUsIHNlLCBzdyB9ID0gZ2V0Um91bmRlZENvcm5lcnMoZGF0ZSk7XG4gICAgICAgICAgY29uc3QgZGF0ZVZhbHVlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgY29uc3QgaW5SYW5nZSA9IHZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZVZhbHVlcy5oYXMoZGF0ZVZhbHVlKTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdGVkVmFsdWVcbiAgICAgICAgICAgID8gc2VsZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgICAgPyBkYXRlVmFsdWUgPT09IHNlbGVjdGVkVmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICAgIDogZGF0ZVZhbHVlID09PSBzZWxlY3RlZFZhbHVlWzBdLnZhbHVlT2YoKSB8fFxuICAgICAgICAgICAgICAgIGRhdGVWYWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZVsxXS52YWx1ZU9mKClcbiAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBkaXNwbGF5OiBkYXlGb3JtYXR0ZXIoZGF0ZSksXG4gICAgICAgICAgICBmYWRlSW46XG4gICAgICAgICAgICAgIGluUmFuZ2UgJiZcbiAgICAgICAgICAgICAgKGRhdGVWYWx1ZSA9PT1cbiAgICAgICAgICAgICAgICBNYXRoLm1heChcbiAgICAgICAgICAgICAgICAgIG1pbkNhbGVuZGFyRGF0ZS52YWx1ZU9mKCksXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlTWluPy52YWx1ZU9mKCkgPz8gLUluZmluaXR5LFxuICAgICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICBkYXRlVmFsdWUgPT09XG4gICAgICAgICAgICAgICAgICAob21pdFJhbmdlXG4gICAgICAgICAgICAgICAgICAgID8gdGltZURheS5vZmZzZXQob21pdFJhbmdlWzFdLCAxKS52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICAgOiAtSW5maW5pdHkpKSxcbiAgICAgICAgICAgIGZhZGVPdXQ6XG4gICAgICAgICAgICAgIGluUmFuZ2UgJiZcbiAgICAgICAgICAgICAgKGRhdGVWYWx1ZSA9PT1cbiAgICAgICAgICAgICAgICBNYXRoLm1pbihcbiAgICAgICAgICAgICAgICAgIG1heENhbGVuZGFyRGF0ZS52YWx1ZU9mKCksXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlTWF4Py52YWx1ZU9mKCkgPz8gSW5maW5pdHksXG4gICAgICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgICAgIGRhdGVWYWx1ZSA9PT1cbiAgICAgICAgICAgICAgICAgIChvbWl0UmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgPyB0aW1lRGF5Lm9mZnNldChvbWl0UmFuZ2VbMF0sIC0xKS52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICAgOiBJbmZpbml0eSkpLFxuICAgICAgICAgICAgaGlkZGVuOlxuICAgICAgICAgICAgICBkYXRlVmFsdWUgPCAoc2VsZWN0YWJsZU1pbj8udmFsdWVPZigpID8/IC1JbmZpbml0eSkgfHxcbiAgICAgICAgICAgICAgZGF0ZVZhbHVlID4gKHNlbGVjdGFibGVNYXg/LnZhbHVlT2YoKSA/PyBJbmZpbml0eSkgfHxcbiAgICAgICAgICAgICAgKG9taXRSYW5nZVxuICAgICAgICAgICAgICAgID8gb21pdFJhbmdlWzBdLnZhbHVlT2YoKSA8PSBkYXRlVmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgIGRhdGVWYWx1ZSA8PSBvbWl0UmFuZ2VbMV0udmFsdWVPZigpXG4gICAgICAgICAgICAgICAgOiBmYWxzZSksXG4gICAgICAgICAgICBpbkN1cnJlbnRNb250aDpcbiAgICAgICAgICAgICAgZGF0ZVZhbHVlID49IGFjdGl2ZVllYXJNb250aC52YWx1ZU9mKCkgJiZcbiAgICAgICAgICAgICAgZGF0ZVZhbHVlIDwgdGltZU1vbnRoLm9mZnNldChhY3RpdmVZZWFyTW9udGgsIDEpLnZhbHVlT2YoKSxcbiAgICAgICAgICAgIGluUmFuZ2UsXG4gICAgICAgICAgICByb3VuZGVkTmU6IG5lLFxuICAgICAgICAgICAgcm91bmRlZE53OiBudyxcbiAgICAgICAgICAgIHJvdW5kZWRTZTogc2UsXG4gICAgICAgICAgICByb3VuZGVkU3c6IHN3LFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICB0b2RheTogZGF0ZVZhbHVlID09PSB0b2RheS52YWx1ZU9mKCksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICBzZWxlY3REYXkoZGF5OiBDYWxlbmRhckRhdGUpIHtcbiAgICBpZiAoIWRheS5pbkN1cnJlbnRNb250aCkge1xuICAgICAgdGhpcy5hY3RpdmVZZWFyTW9udGhDaGFuZ2UuZW1pdCh0aW1lTW9udGguZmxvb3IoZGF5LmRhdGUpKTtcbiAgICB9XG4gICAgdGhpcy5kYXRlU2VsZWN0LmVtaXQoZGF5LmRhdGUpO1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIGFjdGl2ZVllYXJNb250aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICBlbWl0QWN0aXZlWWVhck1vbnRoKHllYXJNb250aDogRGF0ZSB8IG51bGwpIHtcbiAgICBpZiAoeWVhck1vbnRoKSB0aGlzLmFjdGl2ZVllYXJNb250aENoYW5nZS5lbWl0KHllYXJNb250aCk7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgZGF0ZVNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICB0cmFja0J5RGF0ZTogVHJhY2tCeUZ1bmN0aW9uPENhbGVuZGFyRGF0ZT4gPSAoXywgZGF0ZSkgPT5cbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAuLi5kYXRlLFxuICAgICAgZGF0ZTogW1xuICAgICAgICBkYXRlLmRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgZGF0ZS5kYXRlLmdldE1vbnRoKCkgKyAxLFxuICAgICAgICBkYXRlLmRhdGUuZ2V0RGF0ZSgpLFxuICAgICAgXS5qb2luKCc6JyksXG4gICAgfSk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2FsZW5kYXJDb21wb25lbnQge1xuICBleHBvcnQgY29uc3QgZGVmYXVsdE1pbiA9IHRpbWVZZWFyLmZsb29yKHRpbWVZZWFyLm9mZnNldChuZXcgRGF0ZSgpLCAtNykpO1xuICBleHBvcnQgY29uc3QgZGVmYXVsdE1heCA9IHRpbWVEYXkub2Zmc2V0KFxuICAgIHRpbWVZZWFyLmZsb29yKHRpbWVZZWFyLm9mZnNldChuZXcgRGF0ZSgpLCA1KSksXG4gICAgLTEsXG4gICk7XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udHJvbHNcIj5cbiAgPGRpdj5cbiAgICA8cml2LXNpbXBsZS1zZWxlY3RcbiAgICAgIFtmaWx0ZXJhYmlsaXR5T3B0aW9uc109XCJ7IGVuYWJsZWQ6IHRydWUsIHBsYWNlaG9sZGVyOiAnTW9udGgnIH1cIlxuICAgICAgW29yZGVyQnldPVwiJ3NvdXJjZSdcIlxuICAgICAgW29wdGlvbkdyb3Vwc109XCJtb250aE9wdGlvbnMkIHwgYXN5bmMgfCByaXZPcHRpb25Hcm91cFwiXG4gICAgICBbc2VsZWN0ZWRPcHRpb25dPVwic2VsZWN0ZWRNb250aE9wdGlvbiQgfCBhc3luY1wiXG4gICAgICAoc2VsZWN0ZWRPcHRpb25DaGFuZ2UpPVwiZW1pdEFjdGl2ZVllYXJNb250aCgkZXZlbnQ/LmRhdGUgPz8gbnVsbClcIlxuICAgID5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdHJpZ2dlciBsZXQtc3RhdGU9XCJzdGF0ZVwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAgIFtpY29uXT1cInN0YXRlLmRpc3BsYXkub3BlbiA/ICdDaGV2cm9uVXAnIDogJ0NoZXZyb25Eb3duJ1wiXG4gICAgICAgICAgW2ljb25Qb3NpdGlvbl09XCInbGFzdCdcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgc3RhdGUuZGlzcGxheS5mb3JtYXR0ZWRTZWxlY3RlZE9wdGlvbnMgfHwgJy4uLicgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3Jpdi1zaW1wbGUtc2VsZWN0PlxuICAgIDxyaXYtc2ltcGxlLXNlbGVjdFxuICAgICAgW2ZpbHRlcmFiaWxpdHlPcHRpb25zXT1cInsgZW5hYmxlZDogdHJ1ZSwgcGxhY2Vob2xkZXI6ICdZZWFyJyB9XCJcbiAgICAgIFtvcmRlckJ5XT1cIidzb3VyY2UnXCJcbiAgICAgIFtvcHRpb25Hcm91cHNdPVwieWVhck9wdGlvbnMkIHwgYXN5bmMgfCByaXZPcHRpb25Hcm91cFwiXG4gICAgICBbc2VsZWN0ZWRPcHRpb25dPVwic2VsZWN0ZWRZZWFyT3B0aW9uJCB8IGFzeW5jXCJcbiAgICAgIChzZWxlY3RlZE9wdGlvbkNoYW5nZSk9XCJlbWl0QWN0aXZlWWVhck1vbnRoKCRldmVudD8uZGF0ZSA/PyBudWxsKVwiXG4gICAgPlxuICAgICAgPG5nLXRlbXBsYXRlICN0cmlnZ2VyIGxldC1zdGF0ZT1cInN0YXRlXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgW2ljb25dPVwic3RhdGUuZGlzcGxheS5vcGVuID8gJ0NoZXZyb25VcCcgOiAnQ2hldnJvbkRvd24nXCJcbiAgICAgICAgICBbaWNvblBvc2l0aW9uXT1cIidsYXN0J1wiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBzdGF0ZS5kaXNwbGF5LmZvcm1hdHRlZFNlbGVjdGVkT3B0aW9ucyB8fCAnLi4uJyB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvcml2LXNpbXBsZS1zZWxlY3Q+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgKm5nSWY9XCJ7IHByZXY6IHByZXZpb3VzTW9udGgkIHwgYXN5bmMsIG5leHQ6IG5leHRNb250aCQgfCBhc3luYyB9OyBsZXQgdm1cIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgcml2QnV0dG9uXG4gICAgICBbc2l6ZV09XCInc21hbGwnXCJcbiAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgW2ljb25dPVwiJ0Fycm93TGVmdCdcIlxuICAgICAgW2Rpc2FibGVkXT1cIiF2bS5wcmV2XCJcbiAgICAgIChjbGljayk9XCJ2bS5wcmV2ID8gYWN0aXZlWWVhck1vbnRoQ2hhbmdlLmVtaXQodm0ucHJldikgOiBudWxsXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgID48L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICByaXZCdXR0b25cbiAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICBbaWNvbl09XCInQXJyb3dSaWdodCdcIlxuICAgICAgW2Rpc2FibGVkXT1cIiF2bS5uZXh0XCJcbiAgICAgIChjbGljayk9XCJ2bS5uZXh0ID8gYWN0aXZlWWVhck1vbnRoQ2hhbmdlLmVtaXQodm0ubmV4dCkgOiBudWxsXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgID48L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJjYWxlbmRhclwiPlxuICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+U3U8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5Nbzwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlR1PC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+V2U8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5UaDwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPkZyPC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+U2E8L3NwYW4+XG4gIDxidXR0b25cbiAgICAqbmdGb3I9XCJsZXQgZGF5IG9mIGRhdGVzJCB8IGFzeW5jOyB0cmFja0J5OiB0cmFja0J5RGF0ZVwiXG4gICAgY2xhc3M9XCJkYXlcIlxuICAgIFtkaXNhYmxlZF09XCJkYXkuaGlkZGVuXCJcbiAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRheS5oaWRkZW4gPyAndHJ1ZScgOiBudWxsXCJcbiAgICBbY2xhc3MuaGlkZGVuXT1cImRheS5oaWRkZW5cIlxuICAgIFtjbGFzcy5ibGVlZF09XCIhZGF5LmluQ3VycmVudE1vbnRoICYmICFkYXkuaGlkZGVuXCJcbiAgICBbY2xhc3MuZmFkZS1pbl09XCJkYXkuZmFkZUluXCJcbiAgICBbY2xhc3MuZmFkZS1vdXRdPVwiZGF5LmZhZGVPdXRcIlxuICAgIFtjbGFzcy5pbi1yYW5nZV09XCJkYXkuaW5SYW5nZVwiXG4gICAgW2NsYXNzLnJvdW5kZWQtbmVdPVwiZGF5LnJvdW5kZWROZVwiXG4gICAgW2NsYXNzLnJvdW5kZWQtbnddPVwiZGF5LnJvdW5kZWROd1wiXG4gICAgW2NsYXNzLnJvdW5kZWQtc2VdPVwiZGF5LnJvdW5kZWRTZVwiXG4gICAgW2NsYXNzLnJvdW5kZWQtc3ddPVwiZGF5LnJvdW5kZWRTd1wiXG4gICAgKGNsaWNrKT1cInNlbGVjdERheShkYXkpXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgPlxuICAgIDxzcGFuXG4gICAgICBjbGFzcz1cImRheS13cmFwcGVyXCJcbiAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJkYXkuc2VsZWN0ZWRcIlxuICAgICAgW2NsYXNzLnRvZGF5XT1cImRheS50b2RheVwiXG4gICAgPlxuICAgICAge3sgZGF5LmRpc3BsYXkgfX1cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
@@ -122,10 +122,10 @@ export class SelectComponent extends InputLabelComponent {
122
122
  }
123
123
  }
124
124
  SelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
125
- SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SelectComponent, selector: "riv-select", inputs: { manager: "manager", size: "size", disabled: "disabled", locked: "locked", grow: "grow", allowedCalloutPositions: "allowedCalloutPositions", preferredCalloutPosition: "preferredCalloutPosition" }, queries: [{ propertyName: "triggerTemplate", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "customSelectedOptionsTemplate", first: true, predicate: ["customSelectedOptions"], descendants: true }, { propertyName: "optionTemplate", first: true, predicate: ["option"], descendants: true }, { propertyName: "headerTemplate", first: true, predicate: ["header"], descendants: true }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true }], viewQueries: [{ propertyName: "customTriggerButton", first: true, predicate: ["customTriggerButton"], descendants: true }, { propertyName: "standardTriggerButton", first: true, predicate: ["standardTriggerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-template #content>\n <riv-loading-cover [loading]=\"s.load.loading\">\n <div\n class=\"content-body\"\n [class.inline]=\"s.display.inline\"\n [ngStyle]=\"{\n 'max-height': s.display.maxHeight,\n 'max-width': s.display.maxWidth,\n 'min-height': s.display.minHeight,\n 'min-width': s.display.minWidth\n }\"\n >\n <header *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerTemplate; context: { state: s }\"\n ></ng-container>\n </header>\n <riv-search\n *ngIf=\"s.query.showSearch\"\n [value]=\"s.query.search\"\n [placeholder]=\"s.query.searchPlaceholder\"\n [autoFocus]=\"true\"\n (valueChange)=\"searchChange($event)\"\n ></riv-search>\n <div *ngIf=\"s.query.showOrder\">\n <span class=\"order-by\">Sort by:</span>\n <riv-select [manager]=\"orderByManager\">\n <ng-template #trigger let-state=\"state\">\n <button\n rivButton\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n >\n {{ getSelectedOrderByOption(s)?.title }}\n </button>\n </ng-template>\n </riv-select>\n </div>\n <div class=\"options\">\n <riv-select-node\n *ngIf=\"\n s.selection.allowMultiSelect &&\n s.selection.allowSelectAll &&\n !s.display.zeroStateMessage\n \"\n [mode]=\"'multi'\"\n [node]=\"{\n id: '__NOOP__',\n title: s.query.search ? 'Select all matching' : 'Select all',\n selected: s.selection.visibleSelectionState,\n selectable: true,\n expandable: false,\n expanded: false\n }\"\n (selectChange)=\"\n manager?.actions?.next({ type: 'visibleSelectedChange' })\n \"\n ></riv-select-node>\n <div\n *ngFor=\"let group of s.fullOptionGroups; trackBy: trackBySymbol\"\n class=\"group\"\n [class.divider]=\"s.display.dividers\"\n >\n <span *ngIf=\"group.header; let header\" class=\"header\">\n {{ header }}\n <riv-help\n *ngIf=\"group.help; let help\"\n [help]=\"help\"\n [size]=\"12\"\n ></riv-help>\n </span>\n <ng-container\n *ngFor=\"let option of group.options; trackBy: trackByOption\"\n >\n <ng-container *ngIf=\"optionTemplate; else standardTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{ node: option }\"\n ></ng-container>\n </ng-container>\n <ng-template #standardTemplate>\n <riv-select-node\n [mode]=\"s.selection.allowMultiSelect ? 'multi' : 'single'\"\n [node]=\"option\"\n [showSingleSelected]=\"s.display.showSingleSelected\"\n (selectChange)=\"\n selectChange(s.selection.allowMultiSelect, $event)\n \"\n (expandChange)=\"\n manager?.actions?.next({\n type: 'toggleOptionExpanded',\n id: $event\n })\n \"\n ></riv-select-node>\n </ng-template>\n </ng-container>\n </div>\n <span\n *ngIf=\"s.display.displayLimitMessage; let message\"\n class=\"display-limit\"\n >\n {{ message }}\n </span>\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </div>\n <footer *ngIf=\"footerTemplate\" class=\"custom-footer\">\n <ng-container\n *ngTemplateOutlet=\"footerTemplate; context: { state: s }\"\n ></ng-container>\n </footer>\n </div>\n </riv-loading-cover>\n </ng-template>\n\n <ng-container *ngIf=\"!s.display.inline; else content\">\n <ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n [attr.aria-disabled]=\"disabled || locked ? 'true' : null\"\n type=\"button\"\n class=\"custom-trigger-button\"\n [class.grow]=\"grow\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ state: s }\"\n ></ng-container>\n </button>\n </ng-container>\n <ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n [attr.aria-disabled]=\"disabled || locked ? 'true' : null\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"s.selection.selected.size; else placeholderValue\"\n >\n <ng-container\n *ngIf=\"\n customSelectedOptionsTemplate;\n else standardSelectedOptionsTemplate\n \"\n >\n <span class=\"value\">\n <ng-container\n [ngTemplateOutlet]=\"customSelectedOptionsTemplate\"\n [ngTemplateOutletContext]=\"{ selected: s.selection.selected }\"\n ></ng-container>\n </span>\n </ng-container>\n <ng-template #standardSelectedOptionsTemplate>\n <span class=\"value\">{{\n s.display.formattedSelectedOptions\n }}</span>\n <span *ngIf=\"s.display.pillCount > 1\" class=\"selected-count\">\n {{ s.display.pillCount | rivNumber }}\n </span>\n </ng-template>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ s.display.placeholder }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon\n *ngIf=\"!locked\"\n [name]=\"s.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n <riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"20\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n </ng-template>\n\n <ng-container *ngIf=\"s.display.open\">\n <riv-callout\n *riv-overlay\n [anchor]=\"getTrigger()\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [allowedPositions]=\"allowedCalloutPositions\"\n [preferredPosition]=\"preferredCalloutPosition\"\n (close)=\"manager?.actions?.next({ type: 'openChange', open: false })\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);cursor:pointer;padding-left:var(--size-small)}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1);cursor:default}.selected-count{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-normal);color:var(--type-dark-body);border-radius:calc(var(--base-grid-size) * 3);background-color:var(--brand);padding:calc(var(--base-grid-size) / 4) calc(var(--base-grid-size) * 2);align-self:center}.value{font:var(--input-medium);color:var(--type-light-high-contrast);padding:var(--size-small) 0;flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-low-contrast)}.trigger.small .value{font:var(--input-small)}.trigger.large .value{font:var(--input-large);padding:var(--size-medium) var(--size-xsmall)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5)}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.custom-trigger-button{max-width:100%}.custom-trigger-button.grow{display:flex;flex-direction:column;width:100%}.order-by{font:var(--input-medium);color:var(--type-light-low-contrast)}.content-body{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large)}.content-body:not(.inline){max-height:50vh;min-width:calc(var(--base-grid-size) * 75);max-width:50vw}.options{flex-grow:1;overflow-y:auto;gap:var(--size-medium)}.options,.group{display:flex;flex-direction:column}.group{gap:var(--size-xsmall)}.group.divider:not(:last-child){padding-bottom:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light)}.display-limit{font:var(--body-small);color:var(--type-light-disabled);padding:var(--size-small);text-align:center}.header{font:var(--input-medium);color:var(--type-light-low-contrast);padding:var(--size-xsmall) 0;display:flex;align-items:center;gap:var(--size-small)}.custom-footer{padding-top:var(--size-large);border-top:var(--border-width) solid var(--border-light)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i4.HelpComponent, selector: "riv-help", inputs: ["help", "size"] }, { kind: "component", type: i5.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i6.InputLabelComponent, selector: "riv-input-label", inputs: ["label", "help", "required", "labelActionText", "errorMessage", "state"], outputs: ["labelAction"] }, { kind: "component", type: i7.LoadingCoverComponent, selector: "riv-loading-cover", inputs: ["loading", "loadingSize", "zIndexOverride", "errorMessage"] }, { kind: "directive", type: i8.OverlayDirective, selector: "[riv-overlay]" }, { kind: "component", type: i9.SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: SelectComponent, selector: "riv-select", inputs: ["manager", "size", "disabled", "locked", "grow", "allowedCalloutPositions", "preferredCalloutPosition"] }, { kind: "component", type: i10.SelectNodeComponent, selector: "riv-select-node", inputs: ["mode", "node", "showSingleSelected"], outputs: ["selectChange", "expandChange"] }, { kind: "component", type: i11.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message", "title", "icon"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i12.NumberPipe, name: "rivNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
125
+ SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SelectComponent, selector: "riv-select", inputs: { manager: "manager", size: "size", disabled: "disabled", locked: "locked", grow: "grow", allowedCalloutPositions: "allowedCalloutPositions", preferredCalloutPosition: "preferredCalloutPosition" }, queries: [{ propertyName: "triggerTemplate", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "customSelectedOptionsTemplate", first: true, predicate: ["customSelectedOptions"], descendants: true }, { propertyName: "optionTemplate", first: true, predicate: ["option"], descendants: true }, { propertyName: "headerTemplate", first: true, predicate: ["header"], descendants: true }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true }], viewQueries: [{ propertyName: "customTriggerButton", first: true, predicate: ["customTriggerButton"], descendants: true }, { propertyName: "standardTriggerButton", first: true, predicate: ["standardTriggerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-template #content>\n <riv-loading-cover [loading]=\"s.load.loading\">\n <div\n class=\"content-body\"\n [class.inline]=\"s.display.inline\"\n [ngStyle]=\"{\n 'max-height': s.display.maxHeight,\n 'max-width': s.display.maxWidth,\n 'min-height': s.display.minHeight,\n 'min-width': s.display.minWidth\n }\"\n >\n <header *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerTemplate; context: { state: s }\"\n ></ng-container>\n </header>\n <riv-search\n *ngIf=\"s.query.showSearch\"\n [value]=\"s.query.search\"\n [placeholder]=\"s.query.searchPlaceholder\"\n [autoFocus]=\"true\"\n (valueChange)=\"searchChange($event)\"\n ></riv-search>\n <div *ngIf=\"s.query.showOrder\">\n <span class=\"order-by\">Sort by:</span>\n <riv-select [manager]=\"orderByManager\">\n <ng-template #trigger let-state=\"state\">\n <span\n rivButton\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n >\n {{ getSelectedOrderByOption(s)?.title }}\n </span>\n </ng-template>\n </riv-select>\n </div>\n <div class=\"options\">\n <riv-select-node\n *ngIf=\"\n s.selection.allowMultiSelect &&\n s.selection.allowSelectAll &&\n !s.display.zeroStateMessage\n \"\n [mode]=\"'multi'\"\n [node]=\"{\n id: '__NOOP__',\n title: s.query.search ? 'Select all matching' : 'Select all',\n selected: s.selection.visibleSelectionState,\n selectable: true,\n expandable: false,\n expanded: false\n }\"\n (selectChange)=\"\n manager?.actions?.next({ type: 'visibleSelectedChange' })\n \"\n ></riv-select-node>\n <div\n *ngFor=\"let group of s.fullOptionGroups; trackBy: trackBySymbol\"\n class=\"group\"\n [class.divider]=\"s.display.dividers\"\n >\n <span *ngIf=\"group.header; let header\" class=\"header\">\n {{ header }}\n <riv-help\n *ngIf=\"group.help; let help\"\n [help]=\"help\"\n [size]=\"12\"\n ></riv-help>\n </span>\n <ng-container\n *ngFor=\"let option of group.options; trackBy: trackByOption\"\n >\n <ng-container *ngIf=\"optionTemplate; else standardTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{ node: option }\"\n ></ng-container>\n </ng-container>\n <ng-template #standardTemplate>\n <riv-select-node\n [mode]=\"s.selection.allowMultiSelect ? 'multi' : 'single'\"\n [node]=\"option\"\n [showSingleSelected]=\"s.display.showSingleSelected\"\n (selectChange)=\"\n selectChange(s.selection.allowMultiSelect, $event)\n \"\n (expandChange)=\"\n manager?.actions?.next({\n type: 'toggleOptionExpanded',\n id: $event\n })\n \"\n ></riv-select-node>\n </ng-template>\n </ng-container>\n </div>\n <span\n *ngIf=\"s.display.displayLimitMessage; let message\"\n class=\"display-limit\"\n >\n {{ message }}\n </span>\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </div>\n <footer *ngIf=\"footerTemplate\" class=\"custom-footer\">\n <ng-container\n *ngTemplateOutlet=\"footerTemplate; context: { state: s }\"\n ></ng-container>\n </footer>\n </div>\n </riv-loading-cover>\n </ng-template>\n\n <ng-container *ngIf=\"!s.display.inline; else content\">\n <ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n [attr.aria-disabled]=\"disabled || locked ? 'true' : null\"\n type=\"button\"\n class=\"custom-trigger-button\"\n [class.grow]=\"grow\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ state: s }\"\n ></ng-container>\n </button>\n </ng-container>\n <ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n [attr.aria-disabled]=\"disabled || locked ? 'true' : null\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"s.selection.selected.size; else placeholderValue\"\n >\n <ng-container\n *ngIf=\"\n customSelectedOptionsTemplate;\n else standardSelectedOptionsTemplate\n \"\n >\n <span class=\"value\">\n <ng-container\n [ngTemplateOutlet]=\"customSelectedOptionsTemplate\"\n [ngTemplateOutletContext]=\"{ selected: s.selection.selected }\"\n ></ng-container>\n </span>\n </ng-container>\n <ng-template #standardSelectedOptionsTemplate>\n <span class=\"value\">{{\n s.display.formattedSelectedOptions\n }}</span>\n <span *ngIf=\"s.display.pillCount > 1\" class=\"selected-count\">\n {{ s.display.pillCount | rivNumber }}\n </span>\n </ng-template>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ s.display.placeholder }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon\n *ngIf=\"!locked\"\n [name]=\"s.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n <riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"20\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n </ng-template>\n\n <ng-container *ngIf=\"s.display.open\">\n <riv-callout\n *riv-overlay\n [anchor]=\"getTrigger()\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [allowedPositions]=\"allowedCalloutPositions\"\n [preferredPosition]=\"preferredCalloutPosition\"\n (close)=\"manager?.actions?.next({ type: 'openChange', open: false })\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);cursor:pointer;padding-left:var(--size-small)}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1);cursor:default}.selected-count{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-normal);color:var(--type-dark-body);border-radius:calc(var(--base-grid-size) * 3);background-color:var(--brand);padding:calc(var(--base-grid-size) / 4) calc(var(--base-grid-size) * 2);align-self:center}.value{font:var(--input-medium);color:var(--type-light-high-contrast);padding:var(--size-small) 0;flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-low-contrast)}.trigger.small .value{font:var(--input-small)}.trigger.large .value{font:var(--input-large);padding:var(--size-medium) var(--size-xsmall)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5)}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.custom-trigger-button{max-width:100%}.custom-trigger-button.grow{display:flex;flex-direction:column;width:100%}.order-by{font:var(--input-medium);color:var(--type-light-low-contrast)}.content-body{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large)}.content-body:not(.inline){max-height:50vh;min-width:calc(var(--base-grid-size) * 75);max-width:50vw}.options{flex-grow:1;overflow-y:auto;gap:var(--size-medium)}.options,.group{display:flex;flex-direction:column}.group{gap:var(--size-xsmall)}.group.divider:not(:last-child){padding-bottom:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light)}.display-limit{font:var(--body-small);color:var(--type-light-disabled);padding:var(--size-small);text-align:center}.header{font:var(--input-medium);color:var(--type-light-low-contrast);padding:var(--size-xsmall) 0;display:flex;align-items:center;gap:var(--size-small)}.custom-footer{padding-top:var(--size-large);border-top:var(--border-width) solid var(--border-light)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i4.HelpComponent, selector: "riv-help", inputs: ["help", "size"] }, { kind: "component", type: i5.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i6.InputLabelComponent, selector: "riv-input-label", inputs: ["label", "help", "required", "labelActionText", "errorMessage", "state"], outputs: ["labelAction"] }, { kind: "component", type: i7.LoadingCoverComponent, selector: "riv-loading-cover", inputs: ["loading", "loadingSize", "zIndexOverride", "errorMessage"] }, { kind: "directive", type: i8.OverlayDirective, selector: "[riv-overlay]" }, { kind: "component", type: i9.SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: SelectComponent, selector: "riv-select", inputs: ["manager", "size", "disabled", "locked", "grow", "allowedCalloutPositions", "preferredCalloutPosition"] }, { kind: "component", type: i10.SelectNodeComponent, selector: "riv-select-node", inputs: ["mode", "node", "showSingleSelected"], outputs: ["selectChange", "expandChange"] }, { kind: "component", type: i11.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message", "title", "icon"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i12.NumberPipe, name: "rivNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
126
126
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SelectComponent, decorators: [{
127
127
  type: Component,
128
- args: [{ selector: 'riv-select', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-template #content>\n <riv-loading-cover [loading]=\"s.load.loading\">\n <div\n class=\"content-body\"\n [class.inline]=\"s.display.inline\"\n [ngStyle]=\"{\n 'max-height': s.display.maxHeight,\n 'max-width': s.display.maxWidth,\n 'min-height': s.display.minHeight,\n 'min-width': s.display.minWidth\n }\"\n >\n <header *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerTemplate; context: { state: s }\"\n ></ng-container>\n </header>\n <riv-search\n *ngIf=\"s.query.showSearch\"\n [value]=\"s.query.search\"\n [placeholder]=\"s.query.searchPlaceholder\"\n [autoFocus]=\"true\"\n (valueChange)=\"searchChange($event)\"\n ></riv-search>\n <div *ngIf=\"s.query.showOrder\">\n <span class=\"order-by\">Sort by:</span>\n <riv-select [manager]=\"orderByManager\">\n <ng-template #trigger let-state=\"state\">\n <button\n rivButton\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n >\n {{ getSelectedOrderByOption(s)?.title }}\n </button>\n </ng-template>\n </riv-select>\n </div>\n <div class=\"options\">\n <riv-select-node\n *ngIf=\"\n s.selection.allowMultiSelect &&\n s.selection.allowSelectAll &&\n !s.display.zeroStateMessage\n \"\n [mode]=\"'multi'\"\n [node]=\"{\n id: '__NOOP__',\n title: s.query.search ? 'Select all matching' : 'Select all',\n selected: s.selection.visibleSelectionState,\n selectable: true,\n expandable: false,\n expanded: false\n }\"\n (selectChange)=\"\n manager?.actions?.next({ type: 'visibleSelectedChange' })\n \"\n ></riv-select-node>\n <div\n *ngFor=\"let group of s.fullOptionGroups; trackBy: trackBySymbol\"\n class=\"group\"\n [class.divider]=\"s.display.dividers\"\n >\n <span *ngIf=\"group.header; let header\" class=\"header\">\n {{ header }}\n <riv-help\n *ngIf=\"group.help; let help\"\n [help]=\"help\"\n [size]=\"12\"\n ></riv-help>\n </span>\n <ng-container\n *ngFor=\"let option of group.options; trackBy: trackByOption\"\n >\n <ng-container *ngIf=\"optionTemplate; else standardTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{ node: option }\"\n ></ng-container>\n </ng-container>\n <ng-template #standardTemplate>\n <riv-select-node\n [mode]=\"s.selection.allowMultiSelect ? 'multi' : 'single'\"\n [node]=\"option\"\n [showSingleSelected]=\"s.display.showSingleSelected\"\n (selectChange)=\"\n selectChange(s.selection.allowMultiSelect, $event)\n \"\n (expandChange)=\"\n manager?.actions?.next({\n type: 'toggleOptionExpanded',\n id: $event\n })\n \"\n ></riv-select-node>\n </ng-template>\n </ng-container>\n </div>\n <span\n *ngIf=\"s.display.displayLimitMessage; let message\"\n class=\"display-limit\"\n >\n {{ message }}\n </span>\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </div>\n <footer *ngIf=\"footerTemplate\" class=\"custom-footer\">\n <ng-container\n *ngTemplateOutlet=\"footerTemplate; context: { state: s }\"\n ></ng-container>\n </footer>\n </div>\n </riv-loading-cover>\n </ng-template>\n\n <ng-container *ngIf=\"!s.display.inline; else content\">\n <ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n [attr.aria-disabled]=\"disabled || locked ? 'true' : null\"\n type=\"button\"\n class=\"custom-trigger-button\"\n [class.grow]=\"grow\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ state: s }\"\n ></ng-container>\n </button>\n </ng-container>\n <ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n [attr.aria-disabled]=\"disabled || locked ? 'true' : null\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"s.selection.selected.size; else placeholderValue\"\n >\n <ng-container\n *ngIf=\"\n customSelectedOptionsTemplate;\n else standardSelectedOptionsTemplate\n \"\n >\n <span class=\"value\">\n <ng-container\n [ngTemplateOutlet]=\"customSelectedOptionsTemplate\"\n [ngTemplateOutletContext]=\"{ selected: s.selection.selected }\"\n ></ng-container>\n </span>\n </ng-container>\n <ng-template #standardSelectedOptionsTemplate>\n <span class=\"value\">{{\n s.display.formattedSelectedOptions\n }}</span>\n <span *ngIf=\"s.display.pillCount > 1\" class=\"selected-count\">\n {{ s.display.pillCount | rivNumber }}\n </span>\n </ng-template>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ s.display.placeholder }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon\n *ngIf=\"!locked\"\n [name]=\"s.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n <riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"20\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n </ng-template>\n\n <ng-container *ngIf=\"s.display.open\">\n <riv-callout\n *riv-overlay\n [anchor]=\"getTrigger()\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [allowedPositions]=\"allowedCalloutPositions\"\n [preferredPosition]=\"preferredCalloutPosition\"\n (close)=\"manager?.actions?.next({ type: 'openChange', open: false })\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);cursor:pointer;padding-left:var(--size-small)}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1);cursor:default}.selected-count{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-normal);color:var(--type-dark-body);border-radius:calc(var(--base-grid-size) * 3);background-color:var(--brand);padding:calc(var(--base-grid-size) / 4) calc(var(--base-grid-size) * 2);align-self:center}.value{font:var(--input-medium);color:var(--type-light-high-contrast);padding:var(--size-small) 0;flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-low-contrast)}.trigger.small .value{font:var(--input-small)}.trigger.large .value{font:var(--input-large);padding:var(--size-medium) var(--size-xsmall)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5)}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.custom-trigger-button{max-width:100%}.custom-trigger-button.grow{display:flex;flex-direction:column;width:100%}.order-by{font:var(--input-medium);color:var(--type-light-low-contrast)}.content-body{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large)}.content-body:not(.inline){max-height:50vh;min-width:calc(var(--base-grid-size) * 75);max-width:50vw}.options{flex-grow:1;overflow-y:auto;gap:var(--size-medium)}.options,.group{display:flex;flex-direction:column}.group{gap:var(--size-xsmall)}.group.divider:not(:last-child){padding-bottom:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light)}.display-limit{font:var(--body-small);color:var(--type-light-disabled);padding:var(--size-small);text-align:center}.header{font:var(--input-medium);color:var(--type-light-low-contrast);padding:var(--size-xsmall) 0;display:flex;align-items:center;gap:var(--size-small)}.custom-footer{padding-top:var(--size-large);border-top:var(--border-width) solid var(--border-light)}\n"] }]
128
+ args: [{ selector: 'riv-select', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-template #content>\n <riv-loading-cover [loading]=\"s.load.loading\">\n <div\n class=\"content-body\"\n [class.inline]=\"s.display.inline\"\n [ngStyle]=\"{\n 'max-height': s.display.maxHeight,\n 'max-width': s.display.maxWidth,\n 'min-height': s.display.minHeight,\n 'min-width': s.display.minWidth\n }\"\n >\n <header *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerTemplate; context: { state: s }\"\n ></ng-container>\n </header>\n <riv-search\n *ngIf=\"s.query.showSearch\"\n [value]=\"s.query.search\"\n [placeholder]=\"s.query.searchPlaceholder\"\n [autoFocus]=\"true\"\n (valueChange)=\"searchChange($event)\"\n ></riv-search>\n <div *ngIf=\"s.query.showOrder\">\n <span class=\"order-by\">Sort by:</span>\n <riv-select [manager]=\"orderByManager\">\n <ng-template #trigger let-state=\"state\">\n <span\n rivButton\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n >\n {{ getSelectedOrderByOption(s)?.title }}\n </span>\n </ng-template>\n </riv-select>\n </div>\n <div class=\"options\">\n <riv-select-node\n *ngIf=\"\n s.selection.allowMultiSelect &&\n s.selection.allowSelectAll &&\n !s.display.zeroStateMessage\n \"\n [mode]=\"'multi'\"\n [node]=\"{\n id: '__NOOP__',\n title: s.query.search ? 'Select all matching' : 'Select all',\n selected: s.selection.visibleSelectionState,\n selectable: true,\n expandable: false,\n expanded: false\n }\"\n (selectChange)=\"\n manager?.actions?.next({ type: 'visibleSelectedChange' })\n \"\n ></riv-select-node>\n <div\n *ngFor=\"let group of s.fullOptionGroups; trackBy: trackBySymbol\"\n class=\"group\"\n [class.divider]=\"s.display.dividers\"\n >\n <span *ngIf=\"group.header; let header\" class=\"header\">\n {{ header }}\n <riv-help\n *ngIf=\"group.help; let help\"\n [help]=\"help\"\n [size]=\"12\"\n ></riv-help>\n </span>\n <ng-container\n *ngFor=\"let option of group.options; trackBy: trackByOption\"\n >\n <ng-container *ngIf=\"optionTemplate; else standardTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{ node: option }\"\n ></ng-container>\n </ng-container>\n <ng-template #standardTemplate>\n <riv-select-node\n [mode]=\"s.selection.allowMultiSelect ? 'multi' : 'single'\"\n [node]=\"option\"\n [showSingleSelected]=\"s.display.showSingleSelected\"\n (selectChange)=\"\n selectChange(s.selection.allowMultiSelect, $event)\n \"\n (expandChange)=\"\n manager?.actions?.next({\n type: 'toggleOptionExpanded',\n id: $event\n })\n \"\n ></riv-select-node>\n </ng-template>\n </ng-container>\n </div>\n <span\n *ngIf=\"s.display.displayLimitMessage; let message\"\n class=\"display-limit\"\n >\n {{ message }}\n </span>\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </div>\n <footer *ngIf=\"footerTemplate\" class=\"custom-footer\">\n <ng-container\n *ngTemplateOutlet=\"footerTemplate; context: { state: s }\"\n ></ng-container>\n </footer>\n </div>\n </riv-loading-cover>\n </ng-template>\n\n <ng-container *ngIf=\"!s.display.inline; else content\">\n <ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n [attr.aria-disabled]=\"disabled || locked ? 'true' : null\"\n type=\"button\"\n class=\"custom-trigger-button\"\n [class.grow]=\"grow\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ state: s }\"\n ></ng-container>\n </button>\n </ng-container>\n <ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n [attr.aria-disabled]=\"disabled || locked ? 'true' : null\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"s.selection.selected.size; else placeholderValue\"\n >\n <ng-container\n *ngIf=\"\n customSelectedOptionsTemplate;\n else standardSelectedOptionsTemplate\n \"\n >\n <span class=\"value\">\n <ng-container\n [ngTemplateOutlet]=\"customSelectedOptionsTemplate\"\n [ngTemplateOutletContext]=\"{ selected: s.selection.selected }\"\n ></ng-container>\n </span>\n </ng-container>\n <ng-template #standardSelectedOptionsTemplate>\n <span class=\"value\">{{\n s.display.formattedSelectedOptions\n }}</span>\n <span *ngIf=\"s.display.pillCount > 1\" class=\"selected-count\">\n {{ s.display.pillCount | rivNumber }}\n </span>\n </ng-template>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ s.display.placeholder }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon\n *ngIf=\"!locked\"\n [name]=\"s.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n <riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"20\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n </ng-template>\n\n <ng-container *ngIf=\"s.display.open\">\n <riv-callout\n *riv-overlay\n [anchor]=\"getTrigger()\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [allowedPositions]=\"allowedCalloutPositions\"\n [preferredPosition]=\"preferredCalloutPosition\"\n (close)=\"manager?.actions?.next({ type: 'openChange', open: false })\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);cursor:pointer;padding-left:var(--size-small)}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1);cursor:default}.selected-count{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-normal);color:var(--type-dark-body);border-radius:calc(var(--base-grid-size) * 3);background-color:var(--brand);padding:calc(var(--base-grid-size) / 4) calc(var(--base-grid-size) * 2);align-self:center}.value{font:var(--input-medium);color:var(--type-light-high-contrast);padding:var(--size-small) 0;flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-low-contrast)}.trigger.small .value{font:var(--input-small)}.trigger.large .value{font:var(--input-large);padding:var(--size-medium) var(--size-xsmall)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5)}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.custom-trigger-button{max-width:100%}.custom-trigger-button.grow{display:flex;flex-direction:column;width:100%}.order-by{font:var(--input-medium);color:var(--type-light-low-contrast)}.content-body{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large)}.content-body:not(.inline){max-height:50vh;min-width:calc(var(--base-grid-size) * 75);max-width:50vw}.options{flex-grow:1;overflow-y:auto;gap:var(--size-medium)}.options,.group{display:flex;flex-direction:column}.group{gap:var(--size-xsmall)}.group.divider:not(:last-child){padding-bottom:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light)}.display-limit{font:var(--body-small);color:var(--type-light-disabled);padding:var(--size-small);text-align:center}.header{font:var(--input-medium);color:var(--type-light-low-contrast);padding:var(--size-xsmall) 0;display:flex;align-items:center;gap:var(--size-small)}.custom-footer{padding-top:var(--size-large);border-top:var(--border-width) solid var(--border-light)}\n"] }]
129
129
  }], propDecorators: { manager: [{
130
130
  type: Input
131
131
  }], size: [{
@@ -165,4 +165,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
165
165
  (function (SelectComponent) {
166
166
  SelectComponent.Sizes = ['small', 'medium', 'large'];
167
167
  })(SelectComponent || (SelectComponent = {}));
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFFWixLQUFLLEVBSUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFckMsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sa0RBQWtELENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBUXhHLE1BQU0sT0FBTyxlQUNYLFNBQVEsbUJBQW1CO0lBUDdCOztRQWNFLFNBQUksR0FBeUIsUUFBUSxDQUFDO1FBR3RDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFHMUIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUV4QixzRUFBc0U7UUFFdEUsU0FBSSxHQUFZLEtBQUssQ0FBQztRQUd0Qiw0QkFBdUIsR0FBd0M7WUFDN0QsR0FBRyxvQ0FBb0M7U0FDeEMsQ0FBQztRQUdGLDZCQUF3QixHQUFzQyxjQUFjLENBQUM7UUFpR3BFLHdCQUFtQixHQUMxQjtZQUNFO2dCQUNFLE9BQU8sRUFBRTtvQkFDUDt3QkFDRSxFQUFFLEVBQUUsT0FBTzt3QkFD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QkFBQyx1QkFBdUI7Z0JBTXJDLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxRQUFRO2dCQUl0QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsUUFBUTtnQkFJdEIsY0FBYztzQkFEYixZQUFZO3VCQUFDLFFBQVE7Z0JBSXRCLG1CQUFtQjtzQkFEbEIsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBSWhDLHFCQUFxQjtzQkFEcEIsU0FBUzt1QkFBQyx1QkFBdUI7O0FBNkhwQyxXQUFpQixlQUFlO0lBT2pCLHFCQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBVSxDQUFDO0FBRTdELENBQUMsRUFUZ0IsZUFBZSxLQUFmLGVBQWUsUUFTL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBza2lwLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElucHV0TGFiZWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnB1dC1sYWJlbC9pbnB1dC1sYWJlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUml2U2VsZWN0IH0gZnJvbSAnLi4vc3RhdGUnO1xuaW1wb3J0IHsgQ2FsbG91dENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL292ZXJsYXkvY2FsbG91dC9jYWxsb3V0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBkZWZhdWx0U2VsZWN0QWxsb3dlZENhbGxvdXRQb3NpdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9vdmVybGF5L2NhbGxvdXQvc2VsZWN0LWNhbGxvdXQtZGVmYXVsdHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQ8TyBleHRlbmRzIFJpdlNlbGVjdC5CYXNlT3B0aW9uPlxuICBleHRlbmRzIElucHV0TGFiZWxDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICBASW5wdXQoKVxuICBtYW5hZ2VyPzogUml2U2VsZWN0Lk1hbmFnZXI8Tz47XG5cbiAgQElucHV0KClcbiAgc2l6ZTogU2VsZWN0Q29tcG9uZW50LlNpemUgPSAnbWVkaXVtJztcblxuICBASW5wdXQoKVxuICBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGxvY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBTdHJldGNoZXMgYSBjdXN0b20gdHJpZ2dlciB0byBmaWxsIHRoZSB3aWR0aCBvZiB0aGlzIGNvbXBvbmVudC4gKi9cbiAgQElucHV0KClcbiAgZ3JvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGFsbG93ZWRDYWxsb3V0UG9zaXRpb25zOiBDYWxsb3V0Q29tcG9uZW50LkFuY2hvcmVkUG9zaXRpb25bXSA9IFtcbiAgICAuLi5kZWZhdWx0U2VsZWN0QWxsb3dlZENhbGxvdXRQb3NpdGlvbnMsXG4gIF07XG5cbiAgQElucHV0KClcbiAgcHJlZmVycmVkQ2FsbG91dFBvc2l0aW9uOiBDYWxsb3V0Q29tcG9uZW50LkFuY2hvcmVkUG9zaXRpb24gPSAnYm90dG9tLXJpZ2h0JztcblxuICBAQ29udGVudENoaWxkKCd0cmlnZ2VyJylcbiAgdHJpZ2dlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8eyBzdGF0ZTogUml2U2VsZWN0LkZ1bGxTdGF0ZTxPPiB9PjtcblxuICBAQ29udGVudENoaWxkKCdjdXN0b21TZWxlY3RlZE9wdGlvbnMnKVxuICBjdXN0b21TZWxlY3RlZE9wdGlvbnNUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHtcbiAgICBzZWxlY3RlZDogUml2U2VsZWN0Lk9wdGlvblNldDxPPjtcbiAgfT47XG5cbiAgQENvbnRlbnRDaGlsZCgnb3B0aW9uJylcbiAgb3B0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7IG5vZGU6IFJpdlNlbGVjdC5GdWxsT3B0aW9uPE8+IH0+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2hlYWRlcicpXG4gIGhlYWRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8eyBzdGF0ZTogUml2U2VsZWN0LkZ1bGxTdGF0ZTxPPiB9PjtcblxuICBAQ29udGVudENoaWxkKCdmb290ZXInKVxuICBmb290ZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHsgc3RhdGU6IFJpdlNlbGVjdC5GdWxsU3RhdGU8Tz4gfT47XG5cbiAgQFZpZXdDaGlsZCgnY3VzdG9tVHJpZ2dlckJ1dHRvbicpXG4gIGN1c3RvbVRyaWdnZXJCdXR0b24/OiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ3N0YW5kYXJkVHJpZ2dlckJ1dHRvbicpXG4gIHN0YW5kYXJkVHJpZ2dlckJ1dHRvbj86IEVsZW1lbnRSZWY7XG5cbiAgb3JkZXJCeU1hbmFnZXI/OiBSaXZTZWxlY3QuTWFuYWdlcjxTZWxlY3RDb21wb25lbnQuT3JkZXJCeU9wdGlvbj47XG4gIHByaXZhdGUgb3JkZXJCeVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9yZGVyQnlNYW5hZ2VyID0gUml2U2VsZWN0LmNyZWF0ZUluTWVtb3J5TWFuYWdlcihcbiAgICAgICgpID0+IHRoaXMub3JkZXJCeU9wdGlvbkdyb3VwcyxcbiAgICAgIHtcbiAgICAgICAgc2hvd1NpbmdsZVNlbGVjdGVkOiB0cnVlLFxuICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIHNlbGVjdGVkOiBuZXcgUml2U2VsZWN0Lk9wdGlvblNldChbXG4gICAgICAgICAgICAgIHRoaXMub3JkZXJCeU9wdGlvbkdyb3Vwc1swXS5vcHRpb25zLmZpbmQoXG4gICAgICAgICAgICAgICAgKHsgaWQgfSkgPT4gaWQgPT09ICd0aXRsZScsXG4gICAgICAgICAgICAgICkhLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMub3JkZXJCeVN1YnNjcmlwdGlvbiA9IHRoaXMub3JkZXJCeU1hbmFnZXIuc3RhdGVcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAocyA9PiBbLi4ucy5zZWxlY3Rpb24uc2VsZWN0ZWRdWzBdPy5pZCA/PyBudWxsKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnJlbnQpID0+IHByZXYgPT09IGN1cnJlbnQpLFxuICAgICAgICBza2lwKDEpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShvcmRlciA9PiB7XG4gICAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgICB0eXBlOiAnb3JkZXJDaGFuZ2UnLFxuICAgICAgICAgIHBheWxvYWQ6IG9yZGVyLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vcmRlckJ5U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZ2V0VHJpZ2dlcigpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VzdG9tVHJpZ2dlckJ1dHRvbj8ubmF0aXZlRWxlbWVudCA/P1xuICAgICAgdGhpcy5zdGFuZGFyZFRyaWdnZXJCdXR0b24/Lm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuICB9XG5cbiAgYWxsb3dlZE9wZW4oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkICYmICF0aGlzLmxvY2tlZCkge1xuICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICB0eXBlOiAnb3BlbkNoYW5nZScsXG4gICAgICAgIG9wZW46IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RDaGFuZ2UobXVsdGk6IGJvb2xlYW4sIGlkOiBPWydpZCddKSB7XG4gICAgaWYgKG11bHRpKSB7XG4gICAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICAgIHR5cGU6ICd0b2dnbGVPcHRpb25TZWxlY3RlZCcsXG4gICAgICAgIGlkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgdHlwZTogJ3NldFNlbGVjdGVkT3B0aW9uJyxcbiAgICAgICAgaWQsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgdHlwZTogJ29wZW5DaGFuZ2UnLFxuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRvbmx5IG9yZGVyQnlPcHRpb25Hcm91cHM6IFJpdlNlbGVjdC5PcHRpb25Hcm91cDxTZWxlY3RDb21wb25lbnQuT3JkZXJCeU9wdGlvbj5bXSA9XG4gICAgW1xuICAgICAge1xuICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICd0aXRsZScsXG4gICAgICAgICAgICB0aXRsZTogJ0EtWicsXG4gICAgICAgICAgICBoZWxwOiAnU29ydHMgdmFsdWVzIGluIGFscGhhbnVtZXJpYyBvcmRlciAoQS1aLCAwLTkpJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnY291bnQnLFxuICAgICAgICAgICAgdGl0bGU6ICdWb2x1bWUnLFxuICAgICAgICAgICAgaGVscDogJ1NvcnRzIHZhbHVlcyBieSBjb3VudCAoaGlnaGVzdCB0byBsb3dlc3QpJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdO1xuXG4gIGdldFNlbGVjdGVkT3JkZXJCeU9wdGlvbihcbiAgICBzdGF0ZTogUml2U2VsZWN0LkZ1bGxTdGF0ZTxPPixcbiAgKTogU2VsZWN0Q29tcG9uZW50Lk9yZGVyQnlPcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5vcmRlckJ5T3B0aW9uR3JvdXBzWzBdLm9wdGlvbnMuZmluZChcbiAgICAgICAgKHsgaWQgfSkgPT4gaWQgPT09IHN0YXRlLnF1ZXJ5Lm9yZGVyLFxuICAgICAgKSA/PyBudWxsXG4gICAgKTtcbiAgfVxuXG4gIHNlYXJjaENoYW5nZSA9IGRlYm91bmNlKChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHsgdHlwZTogJ3NlYXJjaENoYW5nZScsIHBheWxvYWQ6IHF1ZXJ5IH0pO1xuICB9LCA1MDApO1xuXG4gIC8vIHRyYWNrQnlTeW1ib2wgZm9yIG91ciBvcHRpb24gZ3JvdXBzIHRoYXQgZG9uJ3QgaGF2ZSBhIGdvb2QgaWRlbnRpdHkuXG4gIC8vIHRoaXMgbGF6aWx5IGF0dGFjaGVzIGEgSmF2YXNjcmlwdCBzeW1ib2wgdG8gYW55IHZhbHVlIGFuZCByZXR1cm5zIGl0LlxuICAvLyBTeW1ib2xzIGFyZSBndWFyYW50ZWVkIHVuaXF1ZSBhbmQgdGhleSBkbyBub3QgZXhpc3QgaW4gSlNPTiwgc28gdGhleVxuICAvLyBkbyBub3QgaW50ZXJmZXJlIHdpdGggYW55IHR5cGVzIG9yIHNlcmlhbGl6YXRpb24gZm9yIEFQSSBjYWxscy4gVGhlXG4gIC8vIG9ubHkgcHVycG9zZSB0aGV5IHNlcnZlIGlzIHRvIHRlbGwgbmdGb3Igd2hpY2ggb2JqZWN0cyBhcmUgc3RpbGwgaW5cbiAgLy8gdGhlIGFycmF5LiBOb3RlOiB0aGlzIGlzIG9ubHkgc2FmZSBvbiBhbiBhcnJheSBvZiBvYmplY3RzLlxuICB0cmFja0J5U3ltYm9sKF86IG51bWJlciwgdmFsdWU6IGFueSkge1xuICAgIGlmICghdmFsdWUuX3RyYWNraW5nU3ltYm9sKSB7XG4gICAgICB2YWx1ZS5fdHJhY2tpbmdTeW1ib2wgPSBTeW1ib2woKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlLl90cmFja2luZ1N5bWJvbDtcbiAgfVxuXG4gIHRyYWNrQnlPcHRpb24oXzogbnVtYmVyLCBvcHRpb246IFJpdlNlbGVjdC5GdWxsT3B0aW9uPE8+KTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICByZXR1cm4gb3B0aW9uLmlkO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2VsZWN0Q29tcG9uZW50IHtcbiAgZXhwb3J0IHR5cGUgT3JkZXJCeU9wdGlvbiA9IHtcbiAgICBpZDogUml2U2VsZWN0Lk9yZGVyQnk7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBoZWxwOiBzdHJpbmc7XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IFNpemVzID0gWydzbWFsbCcsICdtZWRpdW0nLCAnbGFyZ2UnXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgU2l6ZSA9ICh0eXBlb2YgU2l6ZXMpW251bWJlcl07XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwibWFuYWdlcj8uc3RhdGUgfCBhc3luYzsgbGV0IHNcIj5cbiAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgIDxyaXYtbG9hZGluZy1jb3ZlciBbbG9hZGluZ109XCJzLmxvYWQubG9hZGluZ1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNvbnRlbnQtYm9keVwiXG4gICAgICAgIFtjbGFzcy5pbmxpbmVdPVwicy5kaXNwbGF5LmlubGluZVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAnbWF4LWhlaWdodCc6IHMuZGlzcGxheS5tYXhIZWlnaHQsXG4gICAgICAgICAgJ21heC13aWR0aCc6IHMuZGlzcGxheS5tYXhXaWR0aCxcbiAgICAgICAgICAnbWluLWhlaWdodCc6IHMuZGlzcGxheS5taW5IZWlnaHQsXG4gICAgICAgICAgJ21pbi13aWR0aCc6IHMuZGlzcGxheS5taW5XaWR0aFxuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPGhlYWRlciAqbmdJZj1cImhlYWRlclRlbXBsYXRlXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZTsgY29udGV4dDogeyBzdGF0ZTogcyB9XCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvaGVhZGVyPlxuICAgICAgICA8cml2LXNlYXJjaFxuICAgICAgICAgICpuZ0lmPVwicy5xdWVyeS5zaG93U2VhcmNoXCJcbiAgICAgICAgICBbdmFsdWVdPVwicy5xdWVyeS5zZWFyY2hcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzLnF1ZXJ5LnNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICBbYXV0b0ZvY3VzXT1cInRydWVcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJzZWFyY2hDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L3Jpdi1zZWFyY2g+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzLnF1ZXJ5LnNob3dPcmRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JkZXItYnlcIj5Tb3J0IGJ5Ojwvc3Bhbj5cbiAgICAgICAgICA8cml2LXNlbGVjdCBbbWFuYWdlcl09XCJvcmRlckJ5TWFuYWdlclwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0cmlnZ2VyIGxldC1zdGF0ZT1cInN0YXRlXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICByaXZCdXR0b25cbiAgICAgICAgICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCInc21hbGwnXCJcbiAgICAgICAgICAgICAgICBbaWNvbl09XCJzdGF0ZS5kaXNwbGF5Lm9wZW4gPyAnQ2hldnJvblVwJyA6ICdDaGV2cm9uRG93bidcIlxuICAgICAgICAgICAgICAgIFtpY29uUG9zaXRpb25dPVwiJ2xhc3QnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGdldFNlbGVjdGVkT3JkZXJCeU9wdGlvbihzKT8udGl0bGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcml2LXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zXCI+XG4gICAgICAgICAgPHJpdi1zZWxlY3Qtbm9kZVxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgcy5zZWxlY3Rpb24uYWxsb3dNdWx0aVNlbGVjdCAmJlxuICAgICAgICAgICAgICBzLnNlbGVjdGlvbi5hbGxvd1NlbGVjdEFsbCAmJlxuICAgICAgICAgICAgICAhcy5kaXNwbGF5Lnplcm9TdGF0ZU1lc3NhZ2VcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbbW9kZV09XCInbXVsdGknXCJcbiAgICAgICAgICAgIFtub2RlXT1cIntcbiAgICAgICAgICAgICAgaWQ6ICdfX05PT1BfXycsXG4gICAgICAgICAgICAgIHRpdGxlOiBzLnF1ZXJ5LnNlYXJjaCA/ICdTZWxlY3QgYWxsIG1hdGNoaW5nJyA6ICdTZWxlY3QgYWxsJyxcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHMuc2VsZWN0aW9uLnZpc2libGVTZWxlY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZXhwYW5kYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIGV4cGFuZGVkOiBmYWxzZVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAoc2VsZWN0Q2hhbmdlKT1cIlxuICAgICAgICAgICAgICBtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHsgdHlwZTogJ3Zpc2libGVTZWxlY3RlZENoYW5nZScgfSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPjwvcml2LXNlbGVjdC1ub2RlPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBncm91cCBvZiBzLmZ1bGxPcHRpb25Hcm91cHM7IHRyYWNrQnk6IHRyYWNrQnlTeW1ib2xcIlxuICAgICAgICAgICAgY2xhc3M9XCJncm91cFwiXG4gICAgICAgICAgICBbY2xhc3MuZGl2aWRlcl09XCJzLmRpc3BsYXkuZGl2aWRlcnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ3JvdXAuaGVhZGVyOyBsZXQgaGVhZGVyXCIgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgICAge3sgaGVhZGVyIH19XG4gICAgICAgICAgICAgIDxyaXYtaGVscFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JvdXAuaGVscDsgbGV0IGhlbHBcIlxuICAgICAgICAgICAgICAgIFtoZWxwXT1cImhlbHBcIlxuICAgICAgICAgICAgICAgIFtzaXplXT1cIjEyXCJcbiAgICAgICAgICAgICAgPjwvcml2LWhlbHA+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZ3JvdXAub3B0aW9uczsgdHJhY2tCeTogdHJhY2tCeU9wdGlvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25UZW1wbGF0ZTsgZWxzZSBzdGFuZGFyZFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgbm9kZTogb3B0aW9uIH1cIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc3RhbmRhcmRUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8cml2LXNlbGVjdC1ub2RlXG4gICAgICAgICAgICAgICAgICBbbW9kZV09XCJzLnNlbGVjdGlvbi5hbGxvd011bHRpU2VsZWN0ID8gJ211bHRpJyA6ICdzaW5nbGUnXCJcbiAgICAgICAgICAgICAgICAgIFtub2RlXT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICBbc2hvd1NpbmdsZVNlbGVjdGVkXT1cInMuZGlzcGxheS5zaG93U2luZ2xlU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgKHNlbGVjdENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0Q2hhbmdlKHMuc2VsZWN0aW9uLmFsbG93TXVsdGlTZWxlY3QsICRldmVudClcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAoZXhwYW5kQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndG9nZ2xlT3B0aW9uRXhwYW5kZWQnLFxuICAgICAgICAgICAgICAgICAgICAgIGlkOiAkZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvcml2LXNlbGVjdC1ub2RlPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwicy5kaXNwbGF5LmRpc3BsYXlMaW1pdE1lc3NhZ2U7IGxldCBtZXNzYWdlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZGlzcGxheS1saW1pdFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgbWVzc2FnZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8cml2LXplcm8tc3RhdGVcbiAgICAgICAgICAgICpuZ0lmPVwicy5kaXNwbGF5Lnplcm9TdGF0ZU1lc3NhZ2U7IGxldCBtZXNzYWdlXCJcbiAgICAgICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIlxuICAgICAgICAgID48L3Jpdi16ZXJvLXN0YXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGZvb3RlciAqbmdJZj1cImZvb3RlclRlbXBsYXRlXCIgY2xhc3M9XCJjdXN0b20tZm9vdGVyXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJUZW1wbGF0ZTsgY29udGV4dDogeyBzdGF0ZTogcyB9XCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZm9vdGVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9yaXYtbG9hZGluZy1jb3Zlcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXMuZGlzcGxheS5pbmxpbmU7IGVsc2UgY29udGVudFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmlnZ2VyVGVtcGxhdGU7IGVsc2Ugc3RhbmRhcmRUcmlnZ2VyXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICNjdXN0b21UcmlnZ2VyQnV0dG9uXG4gICAgICAgIChjbGljayk9XCJhbGxvd2VkT3BlbigpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IGxvY2tlZFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbG9ja2VkID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImN1c3RvbS10cmlnZ2VyLWJ1dHRvblwiXG4gICAgICAgIFtjbGFzcy5ncm93XT1cImdyb3dcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJpZ2dlclRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBzdGF0ZTogcyB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNzdGFuZGFyZFRyaWdnZXI+XG4gICAgICA8cml2LWlucHV0LWxhYmVsXG4gICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgIFtoZWxwXT1cImhlbHBcIlxuICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICBbc3RhdGVdPVwic3RhdGVcIlxuICAgICAgICBbZXJyb3JNZXNzYWdlXT1cImVycm9yTWVzc2FnZVwiXG4gICAgICAgIFtsYWJlbEFjdGlvblRleHRdPVwibGFiZWxBY3Rpb25UZXh0XCJcbiAgICAgICAgKGxhYmVsQWN0aW9uKT1cImxhYmVsQWN0aW9uLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAjc3RhbmRhcmRUcmlnZ2VyQnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJ0cmlnZ2VyXCJcbiAgICAgICAgICBbY2xhc3Muc21hbGxdPVwic2l6ZSA9PT0gJ3NtYWxsJ1wiXG4gICAgICAgICAgW2NsYXNzLmxhcmdlXT1cInNpemUgPT09ICdsYXJnZSdcIlxuICAgICAgICAgIFtjbGFzcy53YXJuaW5nXT1cInN0YXRlID09PSAnd2FybmluZydcIlxuICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJzdGF0ZSA9PT0gJ2Vycm9yJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cImFsbG93ZWRPcGVuKClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBsb2NrZWRcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbG9ja2VkID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cInMuc2VsZWN0aW9uLnNlbGVjdGVkLnNpemU7IGVsc2UgcGxhY2Vob2xkZXJWYWx1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIGN1c3RvbVNlbGVjdGVkT3B0aW9uc1RlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGVsc2Ugc3RhbmRhcmRTZWxlY3RlZE9wdGlvbnNUZW1wbGF0ZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VzdG9tU2VsZWN0ZWRPcHRpb25zVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgc2VsZWN0ZWQ6IHMuc2VsZWN0aW9uLnNlbGVjdGVkIH1cIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3N0YW5kYXJkU2VsZWN0ZWRPcHRpb25zVGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj57e1xuICAgICAgICAgICAgICAgIHMuZGlzcGxheS5mb3JtYXR0ZWRTZWxlY3RlZE9wdGlvbnNcbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicy5kaXNwbGF5LnBpbGxDb3VudCA+IDFcIiBjbGFzcz1cInNlbGVjdGVkLWNvdW50XCI+XG4gICAgICAgICAgICAgICAge3sgcy5kaXNwbGF5LnBpbGxDb3VudCB8IHJpdk51bWJlciB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhY2Vob2xkZXJWYWx1ZT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWUgcGxhY2Vob2xkZXJcIj57eyBzLmRpc3BsYXkucGxhY2Vob2xkZXIgfX08L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZXZyb25cIj5cbiAgICAgICAgICAgIDxyaXYtaWNvblxuICAgICAgICAgICAgICAqbmdJZj1cIiFsb2NrZWRcIlxuICAgICAgICAgICAgICBbbmFtZV09XCJzLmRpc3BsYXkub3BlbiA/ICdDaGV2cm9uVXAnIDogJ0NoZXZyb25Eb3duJ1wiXG4gICAgICAgICAgICAgIFtzaXplXT1cIjIwXCJcbiAgICAgICAgICAgID48L3Jpdi1pY29uPlxuICAgICAgICAgICAgPHJpdi1pY29uICpuZ0lmPVwibG9ja2VkXCIgW25hbWVdPVwiJ0xvY2snXCIgW3NpemVdPVwiMjBcIj48L3Jpdi1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3Jpdi1pbnB1dC1sYWJlbD5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInMuZGlzcGxheS5vcGVuXCI+XG4gICAgICA8cml2LWNhbGxvdXRcbiAgICAgICAgKnJpdi1vdmVybGF5XG4gICAgICAgIFthbmNob3JdPVwiZ2V0VHJpZ2dlcigpXCJcbiAgICAgICAgW3RoZW1lXT1cIidsaWdodCdcIlxuICAgICAgICBbc2hvd0NhcmV0XT1cImZhbHNlXCJcbiAgICAgICAgW2FsbG93ZWRQb3NpdGlvbnNdPVwiYWxsb3dlZENhbGxvdXRQb3NpdGlvbnNcIlxuICAgICAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwicHJlZmVycmVkQ2FsbG91dFBvc2l0aW9uXCJcbiAgICAgICAgKGNsb3NlKT1cIm1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoeyB0eXBlOiAnb3BlbkNoYW5nZScsIG9wZW46IGZhbHNlIH0pXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L3Jpdi1jYWxsb3V0PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFFWixLQUFLLEVBSUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFckMsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sa0RBQWtELENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBUXhHLE1BQU0sT0FBTyxlQUNYLFNBQVEsbUJBQW1CO0lBUDdCOztRQWNFLFNBQUksR0FBeUIsUUFBUSxDQUFDO1FBR3RDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFHMUIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUV4QixzRUFBc0U7UUFFdEUsU0FBSSxHQUFZLEtBQUssQ0FBQztRQUd0Qiw0QkFBdUIsR0FBd0M7WUFDN0QsR0FBRyxvQ0FBb0M7U0FDeEMsQ0FBQztRQUdGLDZCQUF3QixHQUFzQyxjQUFjLENBQUM7UUFpR3BFLHdCQUFtQixHQUMxQjtZQUNFO2dCQUNFLE9BQU8sRUFBRTtvQkFDUDt3QkFDRSxFQUFFLEVBQUUsT0FBTzt3QkFD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QkFBQyx1QkFBdUI7Z0JBTXJDLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxRQUFRO2dCQUl0QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsUUFBUTtnQkFJdEIsY0FBYztzQkFEYixZQUFZO3VCQUFDLFFBQVE7Z0JBSXRCLG1CQUFtQjtzQkFEbEIsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBSWhDLHFCQUFxQjtzQkFEcEIsU0FBUzt1QkFBQyx1QkFBdUI7O0FBNkhwQyxXQUFpQixlQUFlO0lBT2pCLHFCQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBVSxDQUFDO0FBRTdELENBQUMsRUFUZ0IsZUFBZSxLQUFmLGVBQWUsUUFTL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBza2lwLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElucHV0TGFiZWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnB1dC1sYWJlbC9pbnB1dC1sYWJlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUml2U2VsZWN0IH0gZnJvbSAnLi4vc3RhdGUnO1xuaW1wb3J0IHsgQ2FsbG91dENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL292ZXJsYXkvY2FsbG91dC9jYWxsb3V0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBkZWZhdWx0U2VsZWN0QWxsb3dlZENhbGxvdXRQb3NpdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9vdmVybGF5L2NhbGxvdXQvc2VsZWN0LWNhbGxvdXQtZGVmYXVsdHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQ8TyBleHRlbmRzIFJpdlNlbGVjdC5CYXNlT3B0aW9uPlxuICBleHRlbmRzIElucHV0TGFiZWxDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICBASW5wdXQoKVxuICBtYW5hZ2VyPzogUml2U2VsZWN0Lk1hbmFnZXI8Tz47XG5cbiAgQElucHV0KClcbiAgc2l6ZTogU2VsZWN0Q29tcG9uZW50LlNpemUgPSAnbWVkaXVtJztcblxuICBASW5wdXQoKVxuICBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGxvY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBTdHJldGNoZXMgYSBjdXN0b20gdHJpZ2dlciB0byBmaWxsIHRoZSB3aWR0aCBvZiB0aGlzIGNvbXBvbmVudC4gKi9cbiAgQElucHV0KClcbiAgZ3JvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGFsbG93ZWRDYWxsb3V0UG9zaXRpb25zOiBDYWxsb3V0Q29tcG9uZW50LkFuY2hvcmVkUG9zaXRpb25bXSA9IFtcbiAgICAuLi5kZWZhdWx0U2VsZWN0QWxsb3dlZENhbGxvdXRQb3NpdGlvbnMsXG4gIF07XG5cbiAgQElucHV0KClcbiAgcHJlZmVycmVkQ2FsbG91dFBvc2l0aW9uOiBDYWxsb3V0Q29tcG9uZW50LkFuY2hvcmVkUG9zaXRpb24gPSAnYm90dG9tLXJpZ2h0JztcblxuICBAQ29udGVudENoaWxkKCd0cmlnZ2VyJylcbiAgdHJpZ2dlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8eyBzdGF0ZTogUml2U2VsZWN0LkZ1bGxTdGF0ZTxPPiB9PjtcblxuICBAQ29udGVudENoaWxkKCdjdXN0b21TZWxlY3RlZE9wdGlvbnMnKVxuICBjdXN0b21TZWxlY3RlZE9wdGlvbnNUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHtcbiAgICBzZWxlY3RlZDogUml2U2VsZWN0Lk9wdGlvblNldDxPPjtcbiAgfT47XG5cbiAgQENvbnRlbnRDaGlsZCgnb3B0aW9uJylcbiAgb3B0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7IG5vZGU6IFJpdlNlbGVjdC5GdWxsT3B0aW9uPE8+IH0+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2hlYWRlcicpXG4gIGhlYWRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8eyBzdGF0ZTogUml2U2VsZWN0LkZ1bGxTdGF0ZTxPPiB9PjtcblxuICBAQ29udGVudENoaWxkKCdmb290ZXInKVxuICBmb290ZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHsgc3RhdGU6IFJpdlNlbGVjdC5GdWxsU3RhdGU8Tz4gfT47XG5cbiAgQFZpZXdDaGlsZCgnY3VzdG9tVHJpZ2dlckJ1dHRvbicpXG4gIGN1c3RvbVRyaWdnZXJCdXR0b24/OiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ3N0YW5kYXJkVHJpZ2dlckJ1dHRvbicpXG4gIHN0YW5kYXJkVHJpZ2dlckJ1dHRvbj86IEVsZW1lbnRSZWY7XG5cbiAgb3JkZXJCeU1hbmFnZXI/OiBSaXZTZWxlY3QuTWFuYWdlcjxTZWxlY3RDb21wb25lbnQuT3JkZXJCeU9wdGlvbj47XG4gIHByaXZhdGUgb3JkZXJCeVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9yZGVyQnlNYW5hZ2VyID0gUml2U2VsZWN0LmNyZWF0ZUluTWVtb3J5TWFuYWdlcihcbiAgICAgICgpID0+IHRoaXMub3JkZXJCeU9wdGlvbkdyb3VwcyxcbiAgICAgIHtcbiAgICAgICAgc2hvd1NpbmdsZVNlbGVjdGVkOiB0cnVlLFxuICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIHNlbGVjdGVkOiBuZXcgUml2U2VsZWN0Lk9wdGlvblNldChbXG4gICAgICAgICAgICAgIHRoaXMub3JkZXJCeU9wdGlvbkdyb3Vwc1swXS5vcHRpb25zLmZpbmQoXG4gICAgICAgICAgICAgICAgKHsgaWQgfSkgPT4gaWQgPT09ICd0aXRsZScsXG4gICAgICAgICAgICAgICkhLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMub3JkZXJCeVN1YnNjcmlwdGlvbiA9IHRoaXMub3JkZXJCeU1hbmFnZXIuc3RhdGVcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAocyA9PiBbLi4ucy5zZWxlY3Rpb24uc2VsZWN0ZWRdWzBdPy5pZCA/PyBudWxsKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnJlbnQpID0+IHByZXYgPT09IGN1cnJlbnQpLFxuICAgICAgICBza2lwKDEpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShvcmRlciA9PiB7XG4gICAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgICB0eXBlOiAnb3JkZXJDaGFuZ2UnLFxuICAgICAgICAgIHBheWxvYWQ6IG9yZGVyLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vcmRlckJ5U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZ2V0VHJpZ2dlcigpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VzdG9tVHJpZ2dlckJ1dHRvbj8ubmF0aXZlRWxlbWVudCA/P1xuICAgICAgdGhpcy5zdGFuZGFyZFRyaWdnZXJCdXR0b24/Lm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuICB9XG5cbiAgYWxsb3dlZE9wZW4oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkICYmICF0aGlzLmxvY2tlZCkge1xuICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICB0eXBlOiAnb3BlbkNoYW5nZScsXG4gICAgICAgIG9wZW46IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RDaGFuZ2UobXVsdGk6IGJvb2xlYW4sIGlkOiBPWydpZCddKSB7XG4gICAgaWYgKG11bHRpKSB7XG4gICAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICAgIHR5cGU6ICd0b2dnbGVPcHRpb25TZWxlY3RlZCcsXG4gICAgICAgIGlkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgdHlwZTogJ3NldFNlbGVjdGVkT3B0aW9uJyxcbiAgICAgICAgaWQsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgdHlwZTogJ29wZW5DaGFuZ2UnLFxuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRvbmx5IG9yZGVyQnlPcHRpb25Hcm91cHM6IFJpdlNlbGVjdC5PcHRpb25Hcm91cDxTZWxlY3RDb21wb25lbnQuT3JkZXJCeU9wdGlvbj5bXSA9XG4gICAgW1xuICAgICAge1xuICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICd0aXRsZScsXG4gICAgICAgICAgICB0aXRsZTogJ0EtWicsXG4gICAgICAgICAgICBoZWxwOiAnU29ydHMgdmFsdWVzIGluIGFscGhhbnVtZXJpYyBvcmRlciAoQS1aLCAwLTkpJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnY291bnQnLFxuICAgICAgICAgICAgdGl0bGU6ICdWb2x1bWUnLFxuICAgICAgICAgICAgaGVscDogJ1NvcnRzIHZhbHVlcyBieSBjb3VudCAoaGlnaGVzdCB0byBsb3dlc3QpJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdO1xuXG4gIGdldFNlbGVjdGVkT3JkZXJCeU9wdGlvbihcbiAgICBzdGF0ZTogUml2U2VsZWN0LkZ1bGxTdGF0ZTxPPixcbiAgKTogU2VsZWN0Q29tcG9uZW50Lk9yZGVyQnlPcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5vcmRlckJ5T3B0aW9uR3JvdXBzWzBdLm9wdGlvbnMuZmluZChcbiAgICAgICAgKHsgaWQgfSkgPT4gaWQgPT09IHN0YXRlLnF1ZXJ5Lm9yZGVyLFxuICAgICAgKSA/PyBudWxsXG4gICAgKTtcbiAgfVxuXG4gIHNlYXJjaENoYW5nZSA9IGRlYm91bmNlKChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHsgdHlwZTogJ3NlYXJjaENoYW5nZScsIHBheWxvYWQ6IHF1ZXJ5IH0pO1xuICB9LCA1MDApO1xuXG4gIC8vIHRyYWNrQnlTeW1ib2wgZm9yIG91ciBvcHRpb24gZ3JvdXBzIHRoYXQgZG9uJ3QgaGF2ZSBhIGdvb2QgaWRlbnRpdHkuXG4gIC8vIHRoaXMgbGF6aWx5IGF0dGFjaGVzIGEgSmF2YXNjcmlwdCBzeW1ib2wgdG8gYW55IHZhbHVlIGFuZCByZXR1cm5zIGl0LlxuICAvLyBTeW1ib2xzIGFyZSBndWFyYW50ZWVkIHVuaXF1ZSBhbmQgdGhleSBkbyBub3QgZXhpc3QgaW4gSlNPTiwgc28gdGhleVxuICAvLyBkbyBub3QgaW50ZXJmZXJlIHdpdGggYW55IHR5cGVzIG9yIHNlcmlhbGl6YXRpb24gZm9yIEFQSSBjYWxscy4gVGhlXG4gIC8vIG9ubHkgcHVycG9zZSB0aGV5IHNlcnZlIGlzIHRvIHRlbGwgbmdGb3Igd2hpY2ggb2JqZWN0cyBhcmUgc3RpbGwgaW5cbiAgLy8gdGhlIGFycmF5LiBOb3RlOiB0aGlzIGlzIG9ubHkgc2FmZSBvbiBhbiBhcnJheSBvZiBvYmplY3RzLlxuICB0cmFja0J5U3ltYm9sKF86IG51bWJlciwgdmFsdWU6IGFueSkge1xuICAgIGlmICghdmFsdWUuX3RyYWNraW5nU3ltYm9sKSB7XG4gICAgICB2YWx1ZS5fdHJhY2tpbmdTeW1ib2wgPSBTeW1ib2woKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlLl90cmFja2luZ1N5bWJvbDtcbiAgfVxuXG4gIHRyYWNrQnlPcHRpb24oXzogbnVtYmVyLCBvcHRpb246IFJpdlNlbGVjdC5GdWxsT3B0aW9uPE8+KTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICByZXR1cm4gb3B0aW9uLmlkO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2VsZWN0Q29tcG9uZW50IHtcbiAgZXhwb3J0IHR5cGUgT3JkZXJCeU9wdGlvbiA9IHtcbiAgICBpZDogUml2U2VsZWN0Lk9yZGVyQnk7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBoZWxwOiBzdHJpbmc7XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IFNpemVzID0gWydzbWFsbCcsICdtZWRpdW0nLCAnbGFyZ2UnXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgU2l6ZSA9ICh0eXBlb2YgU2l6ZXMpW251bWJlcl07XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwibWFuYWdlcj8uc3RhdGUgfCBhc3luYzsgbGV0IHNcIj5cbiAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgIDxyaXYtbG9hZGluZy1jb3ZlciBbbG9hZGluZ109XCJzLmxvYWQubG9hZGluZ1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNvbnRlbnQtYm9keVwiXG4gICAgICAgIFtjbGFzcy5pbmxpbmVdPVwicy5kaXNwbGF5LmlubGluZVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAnbWF4LWhlaWdodCc6IHMuZGlzcGxheS5tYXhIZWlnaHQsXG4gICAgICAgICAgJ21heC13aWR0aCc6IHMuZGlzcGxheS5tYXhXaWR0aCxcbiAgICAgICAgICAnbWluLWhlaWdodCc6IHMuZGlzcGxheS5taW5IZWlnaHQsXG4gICAgICAgICAgJ21pbi13aWR0aCc6IHMuZGlzcGxheS5taW5XaWR0aFxuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPGhlYWRlciAqbmdJZj1cImhlYWRlclRlbXBsYXRlXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZTsgY29udGV4dDogeyBzdGF0ZTogcyB9XCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvaGVhZGVyPlxuICAgICAgICA8cml2LXNlYXJjaFxuICAgICAgICAgICpuZ0lmPVwicy5xdWVyeS5zaG93U2VhcmNoXCJcbiAgICAgICAgICBbdmFsdWVdPVwicy5xdWVyeS5zZWFyY2hcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzLnF1ZXJ5LnNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICBbYXV0b0ZvY3VzXT1cInRydWVcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJzZWFyY2hDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L3Jpdi1zZWFyY2g+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzLnF1ZXJ5LnNob3dPcmRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JkZXItYnlcIj5Tb3J0IGJ5Ojwvc3Bhbj5cbiAgICAgICAgICA8cml2LXNlbGVjdCBbbWFuYWdlcl09XCJvcmRlckJ5TWFuYWdlclwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0cmlnZ2VyIGxldC1zdGF0ZT1cInN0YXRlXCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwic3RhdGUuZGlzcGxheS5vcGVuID8gJ0NoZXZyb25VcCcgOiAnQ2hldnJvbkRvd24nXCJcbiAgICAgICAgICAgICAgICBbaWNvblBvc2l0aW9uXT1cIidsYXN0J1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBnZXRTZWxlY3RlZE9yZGVyQnlPcHRpb24ocyk/LnRpdGxlIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9yaXYtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnNcIj5cbiAgICAgICAgICA8cml2LXNlbGVjdC1ub2RlXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBzLnNlbGVjdGlvbi5hbGxvd011bHRpU2VsZWN0ICYmXG4gICAgICAgICAgICAgIHMuc2VsZWN0aW9uLmFsbG93U2VsZWN0QWxsICYmXG4gICAgICAgICAgICAgICFzLmRpc3BsYXkuemVyb1N0YXRlTWVzc2FnZVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFttb2RlXT1cIidtdWx0aSdcIlxuICAgICAgICAgICAgW25vZGVdPVwie1xuICAgICAgICAgICAgICBpZDogJ19fTk9PUF9fJyxcbiAgICAgICAgICAgICAgdGl0bGU6IHMucXVlcnkuc2VhcmNoID8gJ1NlbGVjdCBhbGwgbWF0Y2hpbmcnIDogJ1NlbGVjdCBhbGwnLFxuICAgICAgICAgICAgICBzZWxlY3RlZDogcy5zZWxlY3Rpb24udmlzaWJsZVNlbGVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBleHBhbmRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXhwYW5kZWQ6IGZhbHNlXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChzZWxlY3RDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoeyB0eXBlOiAndmlzaWJsZVNlbGVjdGVkQ2hhbmdlJyB9KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9yaXYtc2VsZWN0LW5vZGU+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIHMuZnVsbE9wdGlvbkdyb3VwczsgdHJhY2tCeTogdHJhY2tCeVN5bWJvbFwiXG4gICAgICAgICAgICBjbGFzcz1cImdyb3VwXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXZpZGVyXT1cInMuZGlzcGxheS5kaXZpZGVyc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJncm91cC5oZWFkZXI7IGxldCBoZWFkZXJcIiBjbGFzcz1cImhlYWRlclwiPlxuICAgICAgICAgICAgICB7eyBoZWFkZXIgfX1cbiAgICAgICAgICAgICAgPHJpdi1oZWxwXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJncm91cC5oZWxwOyBsZXQgaGVscFwiXG4gICAgICAgICAgICAgICAgW2hlbHBdPVwiaGVscFwiXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiMTJcIlxuICAgICAgICAgICAgICA+PC9yaXYtaGVscD5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBncm91cC5vcHRpb25zOyB0cmFja0J5OiB0cmFja0J5T3B0aW9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvblRlbXBsYXRlOyBlbHNlIHN0YW5kYXJkVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBub2RlOiBvcHRpb24gfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzdGFuZGFyZFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxyaXYtc2VsZWN0LW5vZGVcbiAgICAgICAgICAgICAgICAgIFttb2RlXT1cInMuc2VsZWN0aW9uLmFsbG93TXVsdGlTZWxlY3QgPyAnbXVsdGknIDogJ3NpbmdsZSdcIlxuICAgICAgICAgICAgICAgICAgW25vZGVdPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgIFtzaG93U2luZ2xlU2VsZWN0ZWRdPVwicy5kaXNwbGF5LnNob3dTaW5nbGVTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0Q2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RDaGFuZ2Uocy5zZWxlY3Rpb24uYWxsb3dNdWx0aVNlbGVjdCwgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIChleHBhbmRDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0b2dnbGVPcHRpb25FeHBhbmRlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgaWQ6ICRldmVudFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9yaXYtc2VsZWN0LW5vZGU+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJzLmRpc3BsYXkuZGlzcGxheUxpbWl0TWVzc2FnZTsgbGV0IG1lc3NhZ2VcIlxuICAgICAgICAgICAgY2xhc3M9XCJkaXNwbGF5LWxpbWl0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBtZXNzYWdlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxyaXYtemVyby1zdGF0ZVxuICAgICAgICAgICAgKm5nSWY9XCJzLmRpc3BsYXkuemVyb1N0YXRlTWVzc2FnZTsgbGV0IG1lc3NhZ2VcIlxuICAgICAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZVwiXG4gICAgICAgICAgPjwvcml2LXplcm8tc3RhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Zm9vdGVyICpuZ0lmPVwiZm9vdGVyVGVtcGxhdGVcIiBjbGFzcz1cImN1c3RvbS1mb290ZXJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlOyBjb250ZXh0OiB7IHN0YXRlOiBzIH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9mb290ZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L3Jpdi1sb2FkaW5nLWNvdmVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcy5kaXNwbGF5LmlubGluZTsgZWxzZSBjb250ZW50XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyaWdnZXJUZW1wbGF0ZTsgZWxzZSBzdGFuZGFyZFRyaWdnZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgI2N1c3RvbVRyaWdnZXJCdXR0b25cbiAgICAgICAgKGNsaWNrKT1cImFsbG93ZWRPcGVuKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbG9ja2VkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBsb2NrZWQgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiY3VzdG9tLXRyaWdnZXItYnV0dG9uXCJcbiAgICAgICAgW2NsYXNzLmdyb3ddPVwiZ3Jvd1wiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cmlnZ2VyVGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHN0YXRlOiBzIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI3N0YW5kYXJkVHJpZ2dlcj5cbiAgICAgIDxyaXYtaW5wdXQtbGFiZWxcbiAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgW2hlbHBdPVwiaGVscFwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgIFtzdGF0ZV09XCJzdGF0ZVwiXG4gICAgICAgIFtlcnJvck1lc3NhZ2VdPVwiZXJyb3JNZXNzYWdlXCJcbiAgICAgICAgW2xhYmVsQWN0aW9uVGV4dF09XCJsYWJlbEFjdGlvblRleHRcIlxuICAgICAgICAobGFiZWxBY3Rpb24pPVwibGFiZWxBY3Rpb24uZW1pdCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICNzdGFuZGFyZFRyaWdnZXJCdXR0b25cbiAgICAgICAgICBjbGFzcz1cInRyaWdnZXJcIlxuICAgICAgICAgIFtjbGFzcy5zbWFsbF09XCJzaXplID09PSAnc21hbGwnXCJcbiAgICAgICAgICBbY2xhc3MubGFyZ2VdPVwic2l6ZSA9PT0gJ2xhcmdlJ1wiXG4gICAgICAgICAgW2NsYXNzLndhcm5pbmddPVwic3RhdGUgPT09ICd3YXJuaW5nJ1wiXG4gICAgICAgICAgW2NsYXNzLmVycm9yXT1cInN0YXRlID09PSAnZXJyb3InXCJcbiAgICAgICAgICAoY2xpY2spPVwiYWxsb3dlZE9wZW4oKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IGxvY2tlZFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBsb2NrZWQgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwicy5zZWxlY3Rpb24uc2VsZWN0ZWQuc2l6ZTsgZWxzZSBwbGFjZWhvbGRlclZhbHVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgY3VzdG9tU2VsZWN0ZWRPcHRpb25zVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgZWxzZSBzdGFuZGFyZFNlbGVjdGVkT3B0aW9uc1RlbXBsYXRlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjdXN0b21TZWxlY3RlZE9wdGlvbnNUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBzZWxlY3RlZDogcy5zZWxlY3Rpb24uc2VsZWN0ZWQgfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc3RhbmRhcmRTZWxlY3RlZE9wdGlvbnNUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPnt7XG4gICAgICAgICAgICAgICAgcy5kaXNwbGF5LmZvcm1hdHRlZFNlbGVjdGVkT3B0aW9uc1xuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzLmRpc3BsYXkucGlsbENvdW50ID4gMVwiIGNsYXNzPVwic2VsZWN0ZWQtY291bnRcIj5cbiAgICAgICAgICAgICAgICB7eyBzLmRpc3BsYXkucGlsbENvdW50IHwgcml2TnVtYmVyIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwbGFjZWhvbGRlclZhbHVlPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZSBwbGFjZWhvbGRlclwiPnt7IHMuZGlzcGxheS5wbGFjZWhvbGRlciB9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hldnJvblwiPlxuICAgICAgICAgICAgPHJpdi1pY29uXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWxvY2tlZFwiXG4gICAgICAgICAgICAgIFtuYW1lXT1cInMuZGlzcGxheS5vcGVuID8gJ0NoZXZyb25VcCcgOiAnQ2hldnJvbkRvd24nXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiMjBcIlxuICAgICAgICAgICAgPjwvcml2LWljb24+XG4gICAgICAgICAgICA8cml2LWljb24gKm5nSWY9XCJsb2NrZWRcIiBbbmFtZV09XCInTG9jaydcIiBbc2l6ZV09XCIyMFwiPjwvcml2LWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvcml2LWlucHV0LWxhYmVsPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicy5kaXNwbGF5Lm9wZW5cIj5cbiAgICAgIDxyaXYtY2FsbG91dFxuICAgICAgICAqcml2LW92ZXJsYXlcbiAgICAgICAgW2FuY2hvcl09XCJnZXRUcmlnZ2VyKClcIlxuICAgICAgICBbdGhlbWVdPVwiJ2xpZ2h0J1wiXG4gICAgICAgIFtzaG93Q2FyZXRdPVwiZmFsc2VcIlxuICAgICAgICBbYWxsb3dlZFBvc2l0aW9uc109XCJhbGxvd2VkQ2FsbG91dFBvc2l0aW9uc1wiXG4gICAgICAgIFtwcmVmZXJyZWRQb3NpdGlvbl09XCJwcmVmZXJyZWRDYWxsb3V0UG9zaXRpb25cIlxuICAgICAgICAoY2xvc2UpPVwibWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICdvcGVuQ2hhbmdlJywgb3BlbjogZmFsc2UgfSlcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvcml2LWNhbGxvdXQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=