verben-ng-ui 1.3.5 → 1.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,7 +8,6 @@ import * as i3 from "verben-ng-ui/src/lib/components/svg";
8
8
  import * as i4 from "verben-ng-ui/src/lib/components/card";
9
9
  import * as i5 from "verben-ng-ui/src/lib/components/drop-down";
10
10
  import * as i6 from "verben-ng-ui/src/lib/verbena-input";
11
- import * as i7 from "verben-ng-ui/src/lib/components/date-picker";
12
11
  export class DataFilterComponent {
13
12
  columns;
14
13
  data;
@@ -143,6 +142,13 @@ export class DataFilterComponent {
143
142
  return value.toLocaleDateString();
144
143
  if (typeof value === 'boolean')
145
144
  return value ? 'Yes' : 'No';
145
+ // The native date input yields a 'YYYY-MM-DD' string; restored filters may
146
+ // carry one too. Parsed as local time — `new Date('2026-07-28')` is treated
147
+ // as UTC and would display as the previous day west of Greenwich.
148
+ if (typeof value === 'string' && this.isDateString(value)) {
149
+ const [year, month, day] = value.slice(0, 10).split('-').map(Number);
150
+ return new Date(year, month - 1, day).toLocaleDateString();
151
+ }
146
152
  const option = this.normalizeValueOptions(column.valueOptions).find((candidate) => candidate.value === value);
147
153
  return option ? option.label : `${value}`;
148
154
  }
@@ -283,11 +289,11 @@ export class DataFilterComponent {
283
289
  return this.savedFilters.filter((filter) => filter.selected).length;
284
290
  }
285
291
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
286
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: DataFilterComponent, selector: "lib-data-filter", inputs: { columns: "columns", data: "data", initialFilters: "initialFilters" }, outputs: { filterApplied: "filterApplied", resetFilter: "resetFilter" }, usesOnChanges: true, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Filter <sup>({{ activeFilterCount }})</sup>\n </h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Saved Filters Section -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div *ngFor=\"let filter of visibleFilters\" class=\"item\">\n <div class=\"item-label\">\n <input type=\"checkbox\" [(ngModel)]=\"filter.selected\" (ngModelChange)=\"markTouched()\" />\n <label>{{ getFilterDescription(filter) }}</label>\n </div>\n </div>\n\n <div\n *ngIf=\"savedFilters.length > maxVisibleItems\"\n class=\"show-more\"\n (click)=\"showAllFilters = !showAllFilters\"\n >\n {{ showAllFilters ? \"Show Less\" : \"Show More\" }}\n </div>\n </section>\n\n <hr class=\"divider\" />\n\n <!-- New Filter Operation -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div class=\"operation-grid\">\n <!-- Column Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select column\"\n [options]=\"filterableColumns\"\n optionLabel=\"header\"\n optionValue=\"id\"\n [(ngModel)]=\"currentFilter.columnId\"\n (ngModelChange)=\"onColumnSelect($event)\"\n ></verben-drop-down>\n\n <!-- Operator Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.operator\"\n ></verben-drop-down>\n\n <!-- Value Input based on type -->\n <ng-container [ngSwitch]=\"currentColumnType\">\n <!-- Date Picker -->\n <app-date-picker\n *ngSwitchCase=\"'date'\"\n placeholder=\"Select date\"\n border=\"1px solid var(--vbn-color-border)\"\n [(ngModel)]=\"currentFilter.value\"\n ></app-date-picker>\n\n <!-- Number Input -->\n <verbena-input\n *ngSwitchCase=\"'number'\"\n type=\"number\"\n placeHolder=\"Enter number\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Yes / No Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'bool'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Enum Member Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'enum'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Text Input (default) -->\n <verbena-input\n *ngSwitchDefault\n type=\"text\"\n placeHolder=\"Enter text\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n </ng-container>\n </div>\n\n <button class=\"add-button ml-auto\" (click)=\"addFilter()\">+ Add</button>\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"applyFilters()\">Filter</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary);font-size:.75rem;font-weight:600;cursor:pointer}sup{color:var(--vbn-color-border-focus)}\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.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i4.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i5.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "refPageSize", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i6.VerbenaInputComponent, selector: "verbena-input", inputs: ["disabled", "label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i7.DatePickerComponent, selector: "app-date-picker", inputs: ["placeholder", "format", "minDate", "maxDate", "disabled", "bgColor", "border", "useDropdowns", "yearPlaceholder", "monthPlaceholder", "date", "showTime", "overlayWidth", "datePickerWidth", "useDefaultDate"], outputs: ["dateChange"] }] });
292
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: DataFilterComponent, selector: "lib-data-filter", inputs: { columns: "columns", data: "data", initialFilters: "initialFilters" }, outputs: { filterApplied: "filterApplied", resetFilter: "resetFilter" }, usesOnChanges: true, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Filter <sup>({{ activeFilterCount }})</sup>\n </h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Saved Filters Section -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div *ngFor=\"let filter of visibleFilters\" class=\"item\">\n <div class=\"item-label\">\n <input type=\"checkbox\" [(ngModel)]=\"filter.selected\" (ngModelChange)=\"markTouched()\" />\n <label>{{ getFilterDescription(filter) }}</label>\n </div>\n </div>\n\n <div\n *ngIf=\"savedFilters.length > maxVisibleItems\"\n class=\"show-more\"\n (click)=\"showAllFilters = !showAllFilters\"\n >\n {{ showAllFilters ? \"Show Less\" : \"Show More\" }}\n </div>\n </section>\n\n <hr class=\"divider\" />\n\n <!-- New Filter Operation -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div class=\"operation-grid\">\n <!-- Column Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select column\"\n [options]=\"filterableColumns\"\n optionLabel=\"header\"\n optionValue=\"id\"\n [(ngModel)]=\"currentFilter.columnId\"\n (ngModelChange)=\"onColumnSelect($event)\"\n ></verben-drop-down>\n\n <!-- Operator Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.operator\"\n ></verben-drop-down>\n\n <!-- Value Input based on type -->\n <ng-container [ngSwitch]=\"currentColumnType\">\n <!-- Date Input \u2014 native rather than the library date picker, whose\n overlay renders off screen from this narrow panel. -->\n <verbena-input\n *ngSwitchCase=\"'date'\"\n type=\"date\"\n placeHolder=\"Select date\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Number Input -->\n <verbena-input\n *ngSwitchCase=\"'number'\"\n type=\"number\"\n placeHolder=\"Enter number\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Yes / No Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'bool'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Enum Member Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'enum'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Text Input (default) -->\n <verbena-input\n *ngSwitchDefault\n type=\"text\"\n placeHolder=\"Enter text\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n </ng-container>\n </div>\n\n <button class=\"add-button ml-auto\" (click)=\"addFilter()\">+ Add</button>\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"applyFilters()\">Filter</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary);font-size:.75rem;font-weight:600;cursor:pointer}sup{color:var(--vbn-color-border-focus)}\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.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i4.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i5.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "refPageSize", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i6.VerbenaInputComponent, selector: "verbena-input", inputs: ["disabled", "label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }] });
287
293
  }
288
294
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataFilterComponent, decorators: [{
289
295
  type: Component,
290
- args: [{ selector: 'lib-data-filter', template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Filter <sup>({{ activeFilterCount }})</sup>\n </h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Saved Filters Section -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div *ngFor=\"let filter of visibleFilters\" class=\"item\">\n <div class=\"item-label\">\n <input type=\"checkbox\" [(ngModel)]=\"filter.selected\" (ngModelChange)=\"markTouched()\" />\n <label>{{ getFilterDescription(filter) }}</label>\n </div>\n </div>\n\n <div\n *ngIf=\"savedFilters.length > maxVisibleItems\"\n class=\"show-more\"\n (click)=\"showAllFilters = !showAllFilters\"\n >\n {{ showAllFilters ? \"Show Less\" : \"Show More\" }}\n </div>\n </section>\n\n <hr class=\"divider\" />\n\n <!-- New Filter Operation -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div class=\"operation-grid\">\n <!-- Column Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select column\"\n [options]=\"filterableColumns\"\n optionLabel=\"header\"\n optionValue=\"id\"\n [(ngModel)]=\"currentFilter.columnId\"\n (ngModelChange)=\"onColumnSelect($event)\"\n ></verben-drop-down>\n\n <!-- Operator Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.operator\"\n ></verben-drop-down>\n\n <!-- Value Input based on type -->\n <ng-container [ngSwitch]=\"currentColumnType\">\n <!-- Date Picker -->\n <app-date-picker\n *ngSwitchCase=\"'date'\"\n placeholder=\"Select date\"\n border=\"1px solid var(--vbn-color-border)\"\n [(ngModel)]=\"currentFilter.value\"\n ></app-date-picker>\n\n <!-- Number Input -->\n <verbena-input\n *ngSwitchCase=\"'number'\"\n type=\"number\"\n placeHolder=\"Enter number\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Yes / No Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'bool'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Enum Member Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'enum'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Text Input (default) -->\n <verbena-input\n *ngSwitchDefault\n type=\"text\"\n placeHolder=\"Enter text\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n </ng-container>\n </div>\n\n <button class=\"add-button ml-auto\" (click)=\"addFilter()\">+ Add</button>\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"applyFilters()\">Filter</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary);font-size:.75rem;font-weight:600;cursor:pointer}sup{color:var(--vbn-color-border-focus)}\n"] }]
296
+ args: [{ selector: 'lib-data-filter', template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Filter <sup>({{ activeFilterCount }})</sup>\n </h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Saved Filters Section -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div *ngFor=\"let filter of visibleFilters\" class=\"item\">\n <div class=\"item-label\">\n <input type=\"checkbox\" [(ngModel)]=\"filter.selected\" (ngModelChange)=\"markTouched()\" />\n <label>{{ getFilterDescription(filter) }}</label>\n </div>\n </div>\n\n <div\n *ngIf=\"savedFilters.length > maxVisibleItems\"\n class=\"show-more\"\n (click)=\"showAllFilters = !showAllFilters\"\n >\n {{ showAllFilters ? \"Show Less\" : \"Show More\" }}\n </div>\n </section>\n\n <hr class=\"divider\" />\n\n <!-- New Filter Operation -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div class=\"operation-grid\">\n <!-- Column Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select column\"\n [options]=\"filterableColumns\"\n optionLabel=\"header\"\n optionValue=\"id\"\n [(ngModel)]=\"currentFilter.columnId\"\n (ngModelChange)=\"onColumnSelect($event)\"\n ></verben-drop-down>\n\n <!-- Operator Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.operator\"\n ></verben-drop-down>\n\n <!-- Value Input based on type -->\n <ng-container [ngSwitch]=\"currentColumnType\">\n <!-- Date Input \u2014 native rather than the library date picker, whose\n overlay renders off screen from this narrow panel. -->\n <verbena-input\n *ngSwitchCase=\"'date'\"\n type=\"date\"\n placeHolder=\"Select date\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Number Input -->\n <verbena-input\n *ngSwitchCase=\"'number'\"\n type=\"number\"\n placeHolder=\"Enter number\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Yes / No Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'bool'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Enum Member Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'enum'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Text Input (default) -->\n <verbena-input\n *ngSwitchDefault\n type=\"text\"\n placeHolder=\"Enter text\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n </ng-container>\n </div>\n\n <button class=\"add-button ml-auto\" (click)=\"addFilter()\">+ Add</button>\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"applyFilters()\">Filter</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem;z-index:10}.card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:var(--vbn-color-text-muted);cursor:pointer}.divider{border:none;border-top:1px solid var(--vbn-color-border)}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:var(--vbn-color-border-focus);font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:var(--vbn-color-primary);color:var(--vbn-color-on-primary);font-size:.75rem;font-weight:600;cursor:pointer}sup{color:var(--vbn-color-border-focus)}\n"] }]
291
297
  }], propDecorators: { columns: [{
292
298
  type: Input
293
299
  }], data: [{
@@ -299,4 +305,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
299
305
  }], resetFilter: [{
300
306
  type: Output
301
307
  }] } });
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWZpbHRlci9kYXRhLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtZmlsdGVyL2RhdGEtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEdBSWIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGVBQWUsR0FDaEIsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRCxPQUFPLEVBS0wsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsY0FBYyxFQUNkLGNBQWMsR0FDZixNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7QUFPN0IsTUFBTSxPQUFPLG1CQUFtQjtJQUNyQixPQUFPLENBQXlCO0lBQ2hDLElBQUksQ0FBTztJQUNwQjs7OztPQUlHO0lBQ00sY0FBYyxDQUFxQjtJQUNsQyxhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7SUFDdEQsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDM0MsaUJBQWlCLEdBQTBCLEVBQUUsQ0FBQztJQUM5QyxrQkFBa0IsR0FBcUIsRUFBRSxDQUFDO0lBQzFDLFlBQVksR0FBZ0QsRUFBRSxDQUFDO0lBQy9ELGFBQWEsR0FBNkIsRUFBRSxDQUFDO0lBQzdDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDdkIsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUNwQixpQkFBaUIsR0FBOEIsSUFBSSxDQUFDO0lBQ3BEOzs7T0FHRztJQUNILFlBQVksR0FBd0IsRUFBRSxD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RG5JYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCOzhCQUtsQixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQU1HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbHVtbkRlZmluaXRpb24sXG4gIENvbHVtblZhbHVlT3B0aW9uLFxuICBDb2x1bW5WYWx1ZVR5cGUsXG59IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZSc7XG5pbXBvcnQge1xuICBGaWx0ZXJPcGVyYXRvcixcbiAgRmlsdGVyT3BlcmF0b3JUeXBlLFxuICBGaWx0ZXJDb25kaXRpb24sXG4gIEZpbHRlckdyb3VwLFxuICBTVFJJTkdfT1BFUkFUT1JTLFxuICBOVU1CRVJfT1BFUkFUT1JTLFxuICBEQVRFX09QRVJBVE9SUyxcbiAgQk9PTF9PUEVSQVRPUlMsXG4gIEVOVU1fT1BFUkFUT1JTLFxufSBmcm9tICcuL2RhdGEtZmlsdGVyLnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRhdGEtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2RhdGEtZmlsdGVyLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhRmlsdGVyQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBjb2x1bW5zITogQ29sdW1uRGVmaW5pdGlvbjxUPltdO1xuICBASW5wdXQoKSBkYXRhITogVFtdO1xuICAvKipcbiAgICogT3B0aW9uYWwgcmVzdG9yZWQgZmlsdGVyczogdGhlIHBhbmVsIG9wZW5zIHByZS1wb3B1bGF0ZWQgd2l0aCB0aGVzZSBhc1xuICAgKiBzZWxlY3RlZCBmaWx0ZXIgY2hpcHMuIEFwcGxpZWQgb25jZSAodGhlIGZpcnN0IHRpbWUgYSBub24tZW1wdHkgdmFsdWVcbiAgICogYXJyaXZlcykgc28gaXQgbmV2ZXIgY2xvYmJlcnMgdGhlIHVzZXIncyBpbi1wcm9ncmVzcyBlZGl0cyBhZnRlcndhcmRzLlxuICAgKi9cbiAgQElucHV0KCkgaW5pdGlhbEZpbHRlcnM/OiBGaWx0ZXJDb25kaXRpb25bXTtcbiAgQE91dHB1dCgpIGZpbHRlckFwcGxpZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlckNvbmRpdGlvbltdPigpO1xuICBAT3V0cHV0KCkgcmVzZXRGaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGZpbHRlcmFibGVDb2x1bW5zOiBDb2x1bW5EZWZpbml0aW9uPFQ+W10gPSBbXTtcbiAgYXZhaWxhYmxlT3BlcmF0b3JzOiBGaWx0ZXJPcGVyYXRvcltdID0gW107XG4gIHNhdmVkRmlsdGVyczogKEZpbHRlckNvbmRpdGlvbiAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSlbXSA9IFtdO1xuICBjdXJyZW50RmlsdGVyOiBQYXJ0aWFsPEZpbHRlckNvbmRpdGlvbj4gPSB7fTtcbiAgc2hvd0FsbEZpbHRlcnMgPSBmYWxzZTtcbiAgbWF4VmlzaWJsZUl0ZW1zID0gMztcbiAgY3VycmVudENvbHVtblR5cGU6IEZpbHRlck9wZXJhdG9yVHlwZSB8IG51bGwgPSBudWxsO1xuICAvKipcbiAgICogT3B0aW9ucyBmb3IgdGhlIHZhbHVlIGRyb3Bkb3duIHdoZW4gdGhlIHNlbGVjdGVkIGNvbHVtbiBpcyBib29sIG9yIGVudW0uXG4gICAqIEFsd2F5cyBub3JtYWxpc2VkIHRvIGB7IGxhYmVsLCB2YWx1ZSB9YCBzbyB0aGUgdGVtcGxhdGUgYmluZHMgb25lIHNoYXBlLlxuICAgKi9cbiAgdmFsdWVPcHRpb25zOiBDb2x1bW5WYWx1ZU9wdGlvbltdID0gW107XG4gIC8qKlxuICAgKiBIZWxkIGFzIHN0cmluZ3MgcmF0aGVyIHRoYW4gYm9vbGVhbnM6IGB2ZXJiZW4tZHJvcC1kb3duYCBnYXRlcyBpdHMgc2VsZWN0ZWRcbiAgICogbGFiZWwgb24gYSB0cnV0aGluZXNzIGNoZWNrLCBzbyBhbiBvcHRpb24gdmFsdWVkIGBmYWxzZWAgd291bGQgcmVuZGVyIGFzXG4gICAqIHRob3VnaCBub3RoaW5nIHdlcmUgcGlja2VkLiBDb2VyY2VkIGJhY2sgdG8gYSBib29sZWFuIGluIGBhZGRGaWx0ZXJgLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBib29sT3B0aW9uczogQ29sdW1uVmFsdWVPcHRpb25bXSA9IFtcbiAgICB7IGxhYmVsOiAnWWVzJywgdmFsdWU6ICd0cnVlJyB9LFxuICAgIHsgbGFiZWw6ICdObycsIHZhbHVlOiAnZmFsc2UnIH0sXG4gIF07XG4gIC8vIFNldCBvbmNlIHRoZSB1c2VyIGVkaXRzIHRoZSBwYW5lbCwgc28gcmVzdG9yZWQvaG9zdCBmaWx0ZXJzIG5vIGxvbmdlclxuICAvLyBvdmVyd3JpdGUgdGhlaXIgaW4tcHJvZ3Jlc3Mgd29yay5cbiAgcHJpdmF0ZSB1c2VyVG91Y2hlZCA9IGZhbHNlO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUZpbHRlcmFibGVDb2x1bW5zKCk7XG4gICAgdGhpcy5oeWRyYXRlU2F2ZWRGaWx0ZXJzKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgLy8gUGljayB1cCBmaWx0ZXJzIHJlc3RvcmVkIGFzeW5jaHJvbm91c2x5IGJ5IHRoZSBob3N0IGFmdGVyIGZpcnN0IHJlbmRlci5cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbEZpbHRlcnMnXSkge1xuICAgICAgdGhpcy5oeWRyYXRlU2F2ZWRGaWx0ZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlZWQgdGhlIHNhdmVkLWZpbHRlciBjaGlwcyBmcm9tIHRoZSByZXN0b3JlZCBmaWx0ZXJzLiBTa2lwcGVkIG9uY2UgdGhlIHVzZXJcbiAgICogaGFzIHRvdWNoZWQgdGhlIHBhbmVsIHNvIGl0IG5ldmVyIG92ZXJ3cml0ZXMgdGhlaXIgaW4tcHJvZ3Jlc3MgZWRpdHMuXG4gICAqL1xuICBwcml2YXRlIGh5ZHJhdGVTYXZlZEZpbHRlcnMoKSB7XG4gICAgaWYgKHRoaXMudXNlclRvdWNoZWQpIHJldHVybjtcbiAgICB0aGlzLnNhdmVkRmlsdGVycyA9ICh0aGlzLmluaXRpYWxGaWx0ZXJzID8/IFtdKS5tYXAoKGZpbHRlcikgPT4gKHtcbiAgICAgIC4uLmZpbHRlcixcbiAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKiBNYXJrcyB0aGUgcGFuZWwgYXMgdXNlci1lZGl0ZWQgKGNhbGxlZCBmcm9tIHRlbXBsYXRlIGludGVyYWN0aW9ucykuICovXG4gIG1hcmtUb3VjaGVkKCkge1xuICAgIHRoaXMudXNlclRvdWNoZWQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplRmlsdGVyYWJsZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5maWx0ZXJhYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gY29sLmFjY2Vzc29yS2V5KTtcbiAgfVxuXG4gIG9uQ29sdW1uU2VsZWN0KGNvbHVtbklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmZpbHRlcmFibGVDb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLmlkID09PSBjb2x1bW5JZCk7XG4gICAgaWYgKCFjb2x1bW4pIHJldHVybjtcblxuICAgIHRoaXMuY3VycmVudEZpbHRlci5jb2x1bW5JZCA9IGNvbHVtbklkO1xuXG4gICAgLy8gUmVzZXQgb3RoZXIgdmFsdWVzXG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY3VycmVudEZpbHRlci52YWx1ZSA9IHVuZGVmaW5lZDtcblxuICAgIC8vIERldGVybWluZSBjb2x1bW4gdHlwZSBhbmQgc2V0IGF2YWlsYWJsZSBvcGVyYXRvcnNcbiAgICB0aGlzLmN1cnJlbnRDb2x1bW5UeXBlID0gdGhpcy5yZXNvbHZlQ29sdW1uVHlwZShjb2x1bW4pO1xuICAgIHRoaXMudmFsdWVPcHRpb25zID1cbiAgICAgIHRoaXMuY3VycmVudENvbHVtblR5cGUgPT09ICdib29sJ1xuICAgICAgICA/IHRoaXMuYm9vbE9wdGlvbnNcbiAgICAgICAgOiB0aGlzLmN1cnJlbnRDb2x1bW5UeXBlID09PSAnZW51bSdcbiAgICAgICAgPyB0aGlzLm5vcm1hbGl6ZVZhbHVlT3B0aW9ucyhjb2x1bW4udmFsdWVPcHRpb25zKVxuICAgICAgICA6IFtdO1xuXG4gICAgc3dpdGNoICh0aGlzLmN1cnJlbnRDb2x1bW5UeXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICB0aGlzLmF2YWlsYWJsZU9wZXJhdG9ycyA9IFNUUklOR19PUEVSQVRPUlM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBOVU1CRVJfT1BFUkFUT1JTO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICB0aGlzLmF2YWlsYWJsZU9wZXJhdG9ycyA9IERBVEVfT1BFUkFUT1JTO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Jvb2wnOlxuICAgICAgICB0aGlzLmF2YWlsYWJsZU9wZXJhdG9ycyA9IEJPT0xfT1BFUkFUT1JTO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VudW0nOlxuICAgICAgICB0aGlzLmF2YWlsYWJsZU9wZXJhdG9ycyA9IEVOVU1fT1BFUkFUT1JTO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlT3BlcmF0b3JzID0gW107XG4gICAgfVxuICB9XG5cbiAgYWRkRmlsdGVyKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jdXJyZW50RmlsdGVyLnZhbHVlO1xuICAgIC8vIENoZWNrZWQgZXhwbGljaXRseSByYXRoZXIgdGhhbiBmb3IgZmFsc2luZXNzOiBgZmFsc2VgIGlzIGEgdmFsaWQgYm9vbFxuICAgIC8vIGZpbHRlciBhbmQgYDBgIGEgdmFsaWQgbnVtYmVyIG9uZS5cbiAgICBjb25zdCBoYXNWYWx1ZSA9IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnO1xuXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRGaWx0ZXIuY29sdW1uSWQgfHwgIXRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvciB8fCAhaGFzVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdGaWx0ZXI6IEZpbHRlckNvbmRpdGlvbiAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSA9IHtcbiAgICAgIGNvbHVtbklkOiB0aGlzLmN1cnJlbnRGaWx0ZXIuY29sdW1uSWQhLFxuICAgICAgb3BlcmF0b3I6IHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvcixcbiAgICAgIC8vIEJvb2wgdmFsdWVzIHJvdW5kLXRyaXAgdGhyb3VnaCB0aGUgZHJvcGRvd24gYXMgc3RyaW5nczsgaG9zdHMgcmVjZWl2ZVxuICAgICAgLy8gYSByZWFsIGJvb2xlYW4uXG4gICAgICB2YWx1ZTogdGhpcy5jdXJyZW50Q29sdW1uVHlwZSA9PT0gJ2Jvb2wnID8gdmFsdWUgPT09ICd0cnVlJyA6IHZhbHVlISxcbiAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgIH07XG5cbiAgICB0aGlzLnNhdmVkRmlsdGVycy51bnNoaWZ0KG5ld0ZpbHRlcik7XG4gICAgdGhpcy51c2VyVG91Y2hlZCA9IHRydWU7XG4gICAgdGhpcy5yZXNldEN1cnJlbnRGaWx0ZXIoKTtcbiAgfVxuXG4gIGdldEZpbHRlckRlc2NyaXB0aW9uKGZpbHRlcjogRmlsdGVyQ29uZGl0aW9uKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmZpbHRlcmFibGVDb2x1bW5zLmZpbmQoXG4gICAgICAoY29sKSA9PiBjb2wuaWQgPT09IGZpbHRlci5jb2x1bW5JZFxuICAgICk7XG4gICAgaWYgKCFjb2x1bW4pIHJldHVybiAnJztcblxuICAgIGNvbnN0IGNvbHVtbk5hbWUgPVxuICAgICAgdHlwZW9mIGNvbHVtbi5oZWFkZXIgPT09ICdmdW5jdGlvbicgPyBjb2x1bW4uaGVhZGVyKHt9KSA6IGNvbHVtbi5oZWFkZXI7XG5cbiAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMuZ2V0T3BlcmF0b3JMYWJlbChmaWx0ZXIub3BlcmF0b3IpO1xuXG4gICAgcmV0dXJuIGAke2NvbHVtbk5hbWV9ICR7b3BlcmF0b3J9ICR7dGhpcy5nZXRWYWx1ZUxhYmVsKGNvbHVtbiwgZmlsdGVyLnZhbHVlKX1gO1xuICB9XG5cbiAgLyoqIFJlbmRlcnMgYSBzdG9yZWQgZmlsdGVyIHZhbHVlIHRoZSB3YXkgaXQgd2FzIGNob3Nlbiwgbm90IGFzIHJhdyBkYXRhLiAqL1xuICBwcml2YXRlIGdldFZhbHVlTGFiZWwoXG4gICAgY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+LFxuICAgIHZhbHVlOiBGaWx0ZXJDb25kaXRpb25bJ3ZhbHVlJ11cbiAgKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gdmFsdWUudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdmFsdWUgPyAnWWVzJyA6ICdObyc7XG5cbiAgICBjb25zdCBvcHRpb24gPSB0aGlzLm5vcm1hbGl6ZVZhbHVlT3B0aW9ucyhjb2x1bW4udmFsdWVPcHRpb25zKS5maW5kKFxuICAgICAgKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLnZhbHVlID09PSB2YWx1ZVxuICAgICk7XG4gICAgcmV0dXJuIG9wdGlvbiA/IG9wdGlvbi5sYWJlbCA6IGAke3ZhbHVlfWA7XG4gIH1cblxuICBwcml2YXRlIGdldE9wZXJhdG9yTGFiZWwob3BlcmF0b3JWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBvcGVyYXRvciA9IFtcbiAgICAgIC4uLlNUUklOR19PUEVSQVRPUlMsXG4gICAgICAuLi5OVU1CRVJfT1BFUkFUT1JTLFxuICAgICAgLi4uREFURV9PUEVSQVRPUlMsXG4gICAgICAuLi5CT09MX09QRVJBVE9SUyxcbiAgICAgIC4uLkVOVU1fT1BFUkFUT1JTLFxuICAgIF0uZmluZCgob3ApID0+IG9wLnZhbHVlID09PSBvcGVyYXRvclZhbHVlKTtcbiAgICByZXR1cm4gb3BlcmF0b3IgPyBvcGVyYXRvci5sYWJlbC50b0xvd2VyQ2FzZSgpIDogb3BlcmF0b3JWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVmZXJzIHRoZSB0eXBlIGRlY2xhcmVkIG9uIHRoZSBjb2x1bW4sIGZhbGxpbmcgYmFjayB0byBpbnNwZWN0aW5nIHRoZSBkYXRhXG4gICAqIG9ubHkgd2hlbiB0aGUgaG9zdCBoYXMgbm90IGRlY2xhcmVkIG9uZS5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZUNvbHVtblR5cGUoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KTogRmlsdGVyT3BlcmF0b3JUeXBlIHtcbiAgICBpZiAoY29sdW1uLnZhbHVlVHlwZSkge1xuICAgICAgLy8gQW4gRW51bSB3aXRoIG5vIGRlY2xhcmVkIG1lbWJlcnMgaGFzIG5vdGhpbmcgdG8gcG9wdWxhdGUgYSBkcm9wZG93blxuICAgICAgLy8gd2l0aCwgc28gaXQgZGVncmFkZXMgdG8gYSBmcmVlLXRleHQgZmlsdGVyIHJhdGhlciB0aGFuIGFuIGVtcHR5IHNlbGVjdC5cbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnZhbHVlVHlwZSA9PT0gQ29sdW1uVmFsdWVUeXBlLkVudW0gJiZcbiAgICAgICAgIXRoaXMubm9ybWFsaXplVmFsdWVPcHRpb25zKGNvbHVtbi52YWx1ZU9wdGlvbnMpLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAnc3RyaW5nJztcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm1hcFZhbHVlVHlwZShjb2x1bW4udmFsdWVUeXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbmZlckNvbHVtblR5cGUoY29sdW1uKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwVmFsdWVUeXBlKHZhbHVlVHlwZTogQ29sdW1uVmFsdWVUeXBlKTogRmlsdGVyT3BlcmF0b3JUeXBlIHtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSBDb2x1bW5WYWx1ZVR5cGUuRGF0ZTpcbiAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgIGNhc2UgQ29sdW1uVmFsdWVUeXBlLk51bWJlcjpcbiAgICAgIGNhc2UgQ29sdW1uVmFsdWVUeXBlLkludGVnZXI6XG4gICAgICBjYXNlIENvbHVtblZhbHVlVHlwZS5EZWNpbWFsOlxuICAgICAgY2FzZSBDb2x1bW5WYWx1ZVR5cGUuQ3VycmVuY3k6XG4gICAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICAgIGNhc2UgQ29sdW1uVmFsdWVUeXBlLkJvb2w6XG4gICAgICAgIHJldHVybiAnYm9vbCc7XG4gICAgICBjYXNlIENvbHVtblZhbHVlVHlwZS5FbnVtOlxuICAgICAgICByZXR1cm4gJ2VudW0nO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCZXN0LWVmZm9ydCB0eXBlIGRldGVjdGlvbiBmb3IgY29sdW1ucyB0aGF0IGRlY2xhcmUgbm8gYHZhbHVlVHlwZWAuIEZhbGxzXG4gICAqIGJhY2sgdG8gJ3N0cmluZycgcmF0aGVyIHRoYW4gbnVsbCBzbyB0aGUgdmFsdWUgZmllbGQgYWx3YXlzIHJlbmRlcnMuXG4gICAqL1xuICBwcml2YXRlIGluZmVyQ29sdW1uVHlwZShjb2x1bW46IENvbHVtbkRlZmluaXRpb248VD4pOiBGaWx0ZXJPcGVyYXRvclR5cGUge1xuICAgIGNvbnN0IHNhbXBsZVZhbHVlID0gdGhpcy5maXJzdE5vbkVtcHR5VmFsdWUoY29sdW1uKTtcblxuICAgIGlmIChzYW1wbGVWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiAnZGF0ZSc7XG4gICAgaWYgKHR5cGVvZiBzYW1wbGVWYWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiAnbnVtYmVyJztcbiAgICBpZiAodHlwZW9mIHNhbXBsZVZhbHVlID09PSAnYm9vbGVhbicpIHJldHVybiAnYm9vbCc7XG4gICAgaWYgKHR5cGVvZiBzYW1wbGVWYWx1ZSA9PT0gJ3N0cmluZycgJiYgdGhpcy5pc0RhdGVTdHJpbmcoc2FtcGxlVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2RhdGUnO1xuICAgIH1cbiAgICByZXR1cm4gJ3N0cmluZyc7XG4gIH1cblxuICAvKipcbiAgICogU2NhbnMgcm93cyBmb3IgdGhlIGZpcnN0IHVzYWJsZSBzYW1wbGUg4oCUIHNhbXBsaW5nIG9ubHkgdGhlIGZpcnN0IHJvdyBtaXNzZXNcbiAgICogdGhlIHR5cGUgd2hlbmV2ZXIgdGhhdCByb3cgaGFwcGVucyB0byBob2xkIGEgbnVsbCBvciB1bmRlZmluZWQgdmFsdWUuXG4gICAqL1xuICBwcml2YXRlIGZpcnN0Tm9uRW1wdHlWYWx1ZShjb2x1bW46IENvbHVtbkRlZmluaXRpb248VD4pOiB1bmtub3duIHtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLmRhdGEgPz8gW10pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWFkVmFsdWUoY29sdW1uLCByb3cpO1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09ICcnKSByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkVmFsdWUoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+LCByb3c6IFQpOiB1bmtub3duIHtcbiAgICBpZiAoY29sdW1uLmFjY2Vzc29yS2V5KSByZXR1cm4gcm93W2NvbHVtbi5hY2Nlc3NvcktleV07XG4gICAgaWYgKGNvbHVtbi5hY2Nlc3NvckZuKSByZXR1cm4gY29sdW1uLmFjY2Vzc29yRm4ocm93KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEYXRlcyB1c3VhbGx5IGFycml2ZSBmcm9tIGFuIEFQSSBhcyBJU08gc3RyaW5ncywgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGJlXG4gICAqIHR5cGVkIGFzIHBsYWluIHRleHQuIEFuY2hvcmVkIHRvIElTTy1pc2ggaW5wdXQgc28gb3JkaW5hcnkgc3RyaW5ncyB0aGF0XG4gICAqIGBEYXRlYCBoYXBwZW5zIHRvIHBhcnNlIChlLmcuIFwiTWFyY2hcIikgYXJlIG5vdCBtaXNyZWFkIGFzIGRhdGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBpc0RhdGVTdHJpbmcodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghL15cXGR7NH0tXFxkezJ9LVxcZHsyfShbVFxcc118JCkvLnRlc3QodmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICFOdW1iZXIuaXNOYU4obmV3IERhdGUodmFsdWUpLmdldFRpbWUoKSk7XG4gIH1cblxuICAvKiogQWNjZXB0cyBlaXRoZXIgc3VwcG9ydGVkIGB2YWx1ZU9wdGlvbnNgIHNoYXBlIGFuZCByZXR1cm5zIG9uZSBvZiB0aGVtLiAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZVZhbHVlT3B0aW9ucyhcbiAgICBvcHRpb25zOiBzdHJpbmdbXSB8IENvbHVtblZhbHVlT3B0aW9uW10gfCB1bmRlZmluZWRcbiAgKTogQ29sdW1uVmFsdWVPcHRpb25bXSB7XG4gICAgaWYgKCFvcHRpb25zPy5sZW5ndGgpIHJldHVybiBbXTtcbiAgICByZXR1cm4gKG9wdGlvbnMgYXMgdW5rbm93bltdKS5tYXAoKG9wdGlvbikgPT5cbiAgICAgIHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnXG4gICAgICAgID8geyBsYWJlbDogb3B0aW9uLCB2YWx1ZTogb3B0aW9uIH1cbiAgICAgICAgOiAob3B0aW9uIGFzIENvbHVtblZhbHVlT3B0aW9uKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0Q3VycmVudEZpbHRlcigpIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIgPSB7fTtcbiAgICB0aGlzLmF2YWlsYWJsZU9wZXJhdG9ycyA9IFtdO1xuICAgIHRoaXMuY3VycmVudENvbHVtblR5cGUgPSBudWxsO1xuICAgIHRoaXMudmFsdWVPcHRpb25zID0gW107XG4gIH1cblxuICByZXNldEFsbCgpIHtcbiAgICB0aGlzLnVzZXJUb3VjaGVkID0gdHJ1ZTtcbiAgICB0aGlzLnNhdmVkRmlsdGVycyA9IFtdO1xuICAgIHRoaXMucmVzZXRDdXJyZW50RmlsdGVyKCk7XG4gICAgdGhpcy5yZXNldEZpbHRlci5lbWl0KCk7XG4gIH1cblxuICBhcHBseUZpbHRlcnMoKSB7XG4gICAgdGhpcy51c2VyVG91Y2hlZCA9IHRydWU7XG4gICAgY29uc3QgYWN0aXZlRmlsdGVycyA9IHRoaXMuc2F2ZWRGaWx0ZXJzXG4gICAgICAuZmlsdGVyKChmaWx0ZXIpID0+IGZpbHRlci5zZWxlY3RlZClcbiAgICAgIC5tYXAoKHsgY29sdW1uSWQsIG9wZXJhdG9yLCB2YWx1ZSB9KSA9PiAoe1xuICAgICAgICBjb2x1bW5JZCxcbiAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgIHZhbHVlLFxuICAgICAgfSkpO1xuICAgIHRoaXMuZmlsdGVyQXBwbGllZC5lbWl0KGFjdGl2ZUZpbHRlcnMpO1xuICB9XG5cbiAgZ2V0Q29sdW1uTGFiZWwoY29sdW1uSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maWx0ZXJhYmxlQ29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5pZCA9PT0gY29sdW1uSWQpO1xuICAgIHJldHVybiBjb2x1bW5cbiAgICAgID8gdHlwZW9mIGNvbHVtbi5oZWFkZXIgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBjb2x1bW4uaGVhZGVyKHt9KVxuICAgICAgICA6IGNvbHVtbi5oZWFkZXJcbiAgICAgIDogY29sdW1uSWQ7XG4gIH1cblxuICBnZXQgdmlzaWJsZUZpbHRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0FsbEZpbHRlcnNcbiAgICAgID8gdGhpcy5zYXZlZEZpbHRlcnNcbiAgICAgIDogdGhpcy5zYXZlZEZpbHRlcnMuc2xpY2UoMCwgdGhpcy5tYXhWaXNpYmxlSXRlbXMpO1xuICB9XG5cbiAgZ2V0IGFjdGl2ZUZpbHRlckNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2F2ZWRGaWx0ZXJzLmZpbHRlcigoZmlsdGVyKSA9PiBmaWx0ZXIuc2VsZWN0ZWQpLmxlbmd0aDtcbiAgfVxufVxuIiwiPHZlcmJlbi1jYXJkXG4gIHdpZHRoPVwiMjRyZW1cIlxuICBib3JkZXJSYWRpdXM9XCIxcmVtXCJcbiAgW2JvcmRlcl09XCInMXB4IHNvbGlkIHZhcigtLXZibi1jb2xvci1wcmltYXJ5KSdcIlxuICBiZ0NvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXN1cmZhY2UpXCJcbj5cbiAgPGRpdiBjYXJkLWhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+XG4gICAgICBGaWx0ZXIgPHN1cD4oe3sgYWN0aXZlRmlsdGVyQ291bnQgfX0pPC9zdXA+XG4gICAgPC9oND5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInJlc2V0LWJ1dHRvblwiXG4gICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLXZibi1jb2xvci1ib3JkZXItZm9jdXMpJ1wiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgIFtzdHlsZS5ib3JkZXJdPVwiJ25vbmUnXCJcbiAgICAgIFtzdHlsZS5jdXJzb3JdPVwiJ3BvaW50ZXInXCJcbiAgICAgIFtzdHlsZS5mb250LXNpemVdPVwiJzEycHgnXCJcbiAgICAgIChjbGljayk9XCJyZXNldEFsbCgpXCJcbiAgICA+XG4gICAgICBSZXNldFxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNhcmQtYm9keSBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgIDwhLS0gU2F2ZWQgRmlsdGVycyBTZWN0aW9uIC0tPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5GaWx0ZXJzPC9oMz5cbiAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICBpY29uPVwiaW5mb1wiXG4gICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICBmaWxsPVwidmFyKC0tdmJuLWNvbG9yLXRleHQtbXV0ZWQpXCJcbiAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgdmlzaWJsZUZpbHRlcnNcIiBjbGFzcz1cIml0ZW1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tbGFiZWxcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJmaWx0ZXIuc2VsZWN0ZWRcIiAobmdNb2RlbENoYW5nZSk9XCJtYXJrVG91Y2hlZCgpXCIgLz5cbiAgICAgICAgICA8bGFiZWw+e3sgZ2V0RmlsdGVyRGVzY3JpcHRpb24oZmlsdGVyKSB9fTwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJzYXZlZEZpbHRlcnMubGVuZ3RoID4gbWF4VmlzaWJsZUl0ZW1zXCJcbiAgICAgICAgY2xhc3M9XCJzaG93LW1vcmVcIlxuICAgICAgICAoY2xpY2spPVwic2hvd0FsbEZpbHRlcnMgPSAhc2hvd0FsbEZpbHRlcnNcIlxuICAgICAgPlxuICAgICAgICB7eyBzaG93QWxsRmlsdGVycyA/IFwiU2hvdyBMZXNzXCIgOiBcIlNob3cgTW9yZVwiIH19XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG5cbiAgICA8aHIgY2xhc3M9XCJkaXZpZGVyXCIgLz5cblxuICAgIDwhLS0gTmV3IEZpbHRlciBPcGVyYXRpb24gLS0+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPk9wZXJhdGlvbjwvaDM+XG4gICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgaWNvbj1cImluZm9cIlxuICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgZmlsbD1cInZhcigtLXZibi1jb2xvci10ZXh0LW11dGVkKVwiXG4gICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm9wZXJhdGlvbi1ncmlkXCI+XG4gICAgICAgIDwhLS0gQ29sdW1uIFNlbGVjdGlvbiAtLT5cbiAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBjb2x1bW5cIlxuICAgICAgICAgIFtvcHRpb25zXT1cImZpbHRlcmFibGVDb2x1bW5zXCJcbiAgICAgICAgICBvcHRpb25MYWJlbD1cImhlYWRlclwiXG4gICAgICAgICAgb3B0aW9uVmFsdWU9XCJpZFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLmNvbHVtbklkXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNvbHVtblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgPjwvdmVyYmVuLWRyb3AtZG93bj5cblxuICAgICAgICA8IS0tIE9wZXJhdG9yIFNlbGVjdGlvbiAtLT5cbiAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBvcGVyYXRvclwiXG4gICAgICAgICAgW29wdGlvbnNdPVwiYXZhaWxhYmxlT3BlcmF0b3JzXCJcbiAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICBvcHRpb25WYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnRGaWx0ZXIub3BlcmF0b3JcIlxuICAgICAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICAgIDwhLS0gVmFsdWUgSW5wdXQgYmFzZWQgb24gdHlwZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY3VycmVudENvbHVtblR5cGVcIj5cbiAgICAgICAgICA8IS0tIERhdGUgUGlja2VyIC0tPlxuICAgICAgICAgIDxhcHAtZGF0ZS1waWNrZXJcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgZGF0ZVwiXG4gICAgICAgICAgICBib3JkZXI9XCIxcHggc29saWQgdmFyKC0tdmJuLWNvbG9yLWJvcmRlcilcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC9hcHAtZGF0ZS1waWNrZXI+XG5cbiAgICAgICAgICA8IS0tIE51bWJlciBJbnB1dCAtLT5cbiAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCJcbiAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgcGxhY2VIb2xkZXI9XCJFbnRlciBudW1iZXJcIlxuICAgICAgICAgICAgYm9yZGVyPVwiMXB4IHNvbGlkIHZhcigtLXZibi1jb2xvci1ib3JkZXIpXCJcbiAgICAgICAgICAgIGJvcmRlclJhZGl1cz1cIjVweFwiXG4gICAgICAgICAgICB0ZXh0Q29sb3I9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dClcIlxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICAgIHBkPVwiMnB4IDZweFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnRGaWx0ZXIudmFsdWVcIlxuICAgICAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG5cbiAgICAgICAgICA8IS0tIFllcyAvIE5vIFNlbGVjdGlvbiAtLT5cbiAgICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidib29sJ1wiXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMS4wMjVyZW1cIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgdmFsdWVcIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwidmFsdWVPcHRpb25zXCJcbiAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnRGaWx0ZXIudmFsdWVcIlxuICAgICAgICAgID48L3ZlcmJlbi1kcm9wLWRvd24+XG5cbiAgICAgICAgICA8IS0tIEVudW0gTWVtYmVyIFNlbGVjdGlvbiAtLT5cbiAgICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidlbnVtJ1wiXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMS4wMjVyZW1cIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgdmFsdWVcIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwidmFsdWVPcHRpb25zXCJcbiAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnRGaWx0ZXIudmFsdWVcIlxuICAgICAgICAgID48L3ZlcmJlbi1kcm9wLWRvd24+XG5cbiAgICAgICAgICA8IS0tIFRleHQgSW5wdXQgKGRlZmF1bHQpIC0tPlxuICAgICAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgICAgICAqbmdTd2l0Y2hEZWZhdWx0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBwbGFjZUhvbGRlcj1cIkVudGVyIHRleHRcIlxuICAgICAgICAgICAgYm9yZGVyPVwiMXB4IHNvbGlkIHZhcigtLXZibi1jb2xvci1ib3JkZXIpXCJcbiAgICAgICAgICAgIGJvcmRlclJhZGl1cz1cIjVweFwiXG4gICAgICAgICAgICB0ZXh0Q29sb3I9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dClcIlxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICAgIHBkPVwiMnB4IDZweFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnRGaWx0ZXIudmFsdWVcIlxuICAgICAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhZGQtYnV0dG9uIG1sLWF1dG9cIiAoY2xpY2spPVwiYWRkRmlsdGVyKClcIj4rIEFkZDwvYnV0dG9uPlxuICAgIDwvc2VjdGlvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjYXJkLWZvb3RlciBjbGFzcz1cImNhcmQtZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImV4cG9ydC1idXR0b25cIiAoY2xpY2spPVwiYXBwbHlGaWx0ZXJzKClcIj5GaWx0ZXI8L2J1dHRvbj5cbiAgPC9kaXY+XG48L3ZlcmJlbi1jYXJkPlxuIl19
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWZpbHRlci9kYXRhLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtZmlsdGVyL2RhdGEtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEdBSWIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGVBQWUsR0FDaEIsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRCxPQUFPLEVBS0wsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsY0FBYyxFQUNkLGNBQWMsR0FDZixNQUFNLHFCQUFxQixDQUFDOzs7Ozs7OztBQU83QixNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLE9BQU8sQ0FBeUI7SUFDaEMsSUFBSSxDQUFPO0lBQ3BCOzs7O09BSUc7SUFDTSxjQUFjLENBQXFCO0lBQ2xDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztJQUN0RCxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUMzQyxpQkFBaUIsR0FBMEIsRUFBRSxDQUFDO0lBQzlDLGtCQUFrQixHQUFxQixFQUFFLENBQUM7SUFDMUMsWUFBWSxHQUFnRCxFQUFFLENBQUM7SUFDL0QsYUFBYSxHQUE2QixFQUFFLENBQUM7SUFDN0MsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLGlCQUFpQixHQUE4QixJQUFJLENBQUM7SUFDcEQ7OztPQUdHO0lBQ0gsWUFBWSxHQUF3QixFQUFFLENBQUM7SUFDdkM7Ozs7T0FJRztJQUNjLFdBQVcsR0FBd0I7UUFDbEQsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7UUFDL0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7S0FDaEMsQ0FBQztJQUNGLHdFQUF3RTtJQUN4RSxvQ0FBb0M7SUFDNUIsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUU1QixRQUFRO1FBQ04sSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQywwRUFBMEU7UUFDMUUsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRCxHQUFHLE1BQU07WUFDVCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVPLDJCQUEyQjtRQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQWdCO1FBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRXBCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUV2QyxxQkFBcUI7UUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUVyQyxvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsWUFBWTtZQUNmLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxNQUFNO2dCQUMvQixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVc7Z0JBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEtBQUssTUFBTTtvQkFDbkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO29CQUNqRCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVQsUUFBUSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMvQixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDO2dCQUMzQyxNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDM0MsTUFBTTtZQUNSLEtBQUssTUFBTTtnQkFDVCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsY0FBYyxDQUFDO2dCQUN6QyxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULElBQUksQ0FBQyxrQkFBa0IsR0FBRyxjQUFjLENBQUM7Z0JBQ3pDLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGNBQWMsQ0FBQztnQkFDekMsTUFBTTtZQUNSO2dCQUNFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTO1FBQ1AsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDdkMsd0VBQXdFO1FBQ3hFLHFDQUFxQztRQUNyQyxNQUFNLFFBQVEsR0FBRyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUV2RSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlFLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQTRDO1lBQ3pELFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVM7WUFDdEMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUTtZQUNyQyx3RUFBd0U7WUFDeEUsa0JBQWtCO1lBQ2xCLEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFNO1lBQ3BFLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxNQUF1QjtRQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUN4QyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsUUFBUSxDQUNwQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUV2QixNQUFNLFVBQVUsR0FDZCxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRTFFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFeEQsT0FBTyxHQUFHLFVBQVUsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDakYsQ0FBQztJQUVELDRFQUE0RTtJQUNwRSxhQUFhLENBQ25CLE1BQTJCLEVBQzNCLEtBQStCO1FBRS9CLElBQUksS0FBSyxZQUFZLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzdELElBQUksT0FBTyxLQUFLLEtBQUssU0FBUztZQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUU1RCwyRUFBMkU7UUFDM0UsNEVBQTRFO1FBQzVFLGtFQUFrRTtRQUNsRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUQsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyRSxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDN0QsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUNqRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQ3pDLENBQUM7UUFDRixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsYUFBcUI7UUFDNUMsTUFBTSxRQUFRLEdBQUc7WUFDZixHQUFHLGdCQUFnQjtZQUNuQixHQUFHLGdCQUFnQjtZQUNuQixHQUFHLGNBQWM7WUFDakIsR0FBRyxjQUFjO1lBQ2pCLEdBQUcsY0FBYztTQUNsQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxhQUFhLENBQUMsQ0FBQztRQUMzQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7O09BR0c7SUFDSyxpQkFBaUIsQ0FBQyxNQUEyQjtRQUNuRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQixzRUFBc0U7WUFDdEUsMEVBQTBFO1lBQzFFLElBQ0UsTUFBTSxDQUFDLFNBQVMsS0FBSyxlQUFlLENBQUMsSUFBSTtnQkFDekMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sRUFDdkQsQ0FBQztnQkFDRCxPQUFPLFFBQVEsQ0FBQztZQUNsQixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTyxZQUFZLENBQUMsU0FBMEI7UUFDN0MsUUFBUSxTQUFTLEVBQUUsQ0FBQztZQUNsQixLQUFLLGVBQWUsQ0FBQyxJQUFJO2dCQUN2QixPQUFPLE1BQU0sQ0FBQztZQUNoQixLQUFLLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFDNUIsS0FBSyxlQUFlLENBQUMsT0FBTyxDQUFDO1lBQzdCLEtBQUssZUFBZSxDQUFDLE9BQU8sQ0FBQztZQUM3QixLQUFLLGVBQWUsQ0FBQyxRQUFRO2dCQUMzQixPQUFPLFFBQVEsQ0FBQztZQUNsQixLQUFLLGVBQWUsQ0FBQyxJQUFJO2dCQUN2QixPQUFPLE1BQU0sQ0FBQztZQUNoQixLQUFLLGVBQWUsQ0FBQyxJQUFJO2dCQUN2QixPQUFPLE1BQU0sQ0FBQztZQUNoQjtnQkFDRSxPQUFPLFFBQVEsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGVBQWUsQ0FBQyxNQUEyQjtRQUNqRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFcEQsSUFBSSxXQUFXLFlBQVksSUFBSTtZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQy9DLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUTtZQUFFLE9BQU8sUUFBUSxDQUFDO1FBQ3JELElBQUksT0FBTyxXQUFXLEtBQUssU0FBUztZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQ3BELElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN0RSxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGtCQUFrQixDQUFDLE1BQTJCO1FBQ3BELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMxQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssRUFBRTtnQkFBRSxPQUFPLEtBQUssQ0FBQztRQUMxRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sU0FBUyxDQUFDLE1BQTJCLEVBQUUsR0FBTTtRQUNuRCxJQUFJLE1BQU0sQ0FBQyxXQUFXO1lBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELElBQUksTUFBTSxDQUFDLFVBQVU7WUFBRSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLFlBQVksQ0FBQyxLQUFhO1FBQ2hDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDN0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsNkVBQTZFO0lBQ3JFLHFCQUFxQixDQUMzQixPQUFtRDtRQUVuRCxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNoQyxPQUFRLE9BQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDM0MsT0FBTyxNQUFNLEtBQUssUUFBUTtZQUN4QixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDbEMsQ0FBQyxDQUFFLE1BQTRCLENBQ2xDLENBQUM7SUFDSixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWTthQUNwQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7YUFDbkMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLFFBQVE7WUFDUixRQUFRO1lBQ1IsS0FBSztTQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELGNBQWMsQ0FBQyxRQUFnQjtRQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sTUFBTTtZQUNYLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVTtnQkFDbkMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNuQixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDakIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsY0FBYztZQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVk7WUFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdEUsQ0FBQzt3R0E3VFUsbUJBQW1COzRGQUFuQixtQkFBbUIscU9DL0JoQywwM0tBeUtBOzs0RkQxSWEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjs4QkFLbEIsT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFNRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb2x1bW5EZWZpbml0aW9uLFxuICBDb2x1bW5WYWx1ZU9wdGlvbixcbiAgQ29sdW1uVmFsdWVUeXBlLFxufSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUnO1xuaW1wb3J0IHtcbiAgRmlsdGVyT3BlcmF0b3IsXG4gIEZpbHRlck9wZXJhdG9yVHlwZSxcbiAgRmlsdGVyQ29uZGl0aW9uLFxuICBGaWx0ZXJHcm91cCxcbiAgU1RSSU5HX09QRVJBVE9SUyxcbiAgTlVNQkVSX09QRVJBVE9SUyxcbiAgREFURV9PUEVSQVRPUlMsXG4gIEJPT0xfT1BFUkFUT1JTLFxuICBFTlVNX09QRVJBVE9SUyxcbn0gZnJvbSAnLi9kYXRhLWZpbHRlci50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1kYXRhLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRhLWZpbHRlci5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUZpbHRlckNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY29sdW1ucyE6IENvbHVtbkRlZmluaXRpb248VD5bXTtcbiAgQElucHV0KCkgZGF0YSE6IFRbXTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHJlc3RvcmVkIGZpbHRlcnM6IHRoZSBwYW5lbCBvcGVucyBwcmUtcG9wdWxhdGVkIHdpdGggdGhlc2UgYXNcbiAgICogc2VsZWN0ZWQgZmlsdGVyIGNoaXBzLiBBcHBsaWVkIG9uY2UgKHRoZSBmaXJzdCB0aW1lIGEgbm9uLWVtcHR5IHZhbHVlXG4gICAqIGFycml2ZXMpIHNvIGl0IG5ldmVyIGNsb2JiZXJzIHRoZSB1c2VyJ3MgaW4tcHJvZ3Jlc3MgZWRpdHMgYWZ0ZXJ3YXJkcy5cbiAgICovXG4gIEBJbnB1dCgpIGluaXRpYWxGaWx0ZXJzPzogRmlsdGVyQ29uZGl0aW9uW107XG4gIEBPdXRwdXQoKSBmaWx0ZXJBcHBsaWVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJDb25kaXRpb25bXT4oKTtcbiAgQE91dHB1dCgpIHJlc2V0RmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBmaWx0ZXJhYmxlQ29sdW1uczogQ29sdW1uRGVmaW5pdGlvbjxUPltdID0gW107XG4gIGF2YWlsYWJsZU9wZXJhdG9yczogRmlsdGVyT3BlcmF0b3JbXSA9IFtdO1xuICBzYXZlZEZpbHRlcnM6IChGaWx0ZXJDb25kaXRpb24gJiB7IHNlbGVjdGVkOiBib29sZWFuIH0pW10gPSBbXTtcbiAgY3VycmVudEZpbHRlcjogUGFydGlhbDxGaWx0ZXJDb25kaXRpb24+ID0ge307XG4gIHNob3dBbGxGaWx0ZXJzID0gZmFsc2U7XG4gIG1heFZpc2libGVJdGVtcyA9IDM7XG4gIGN1cnJlbnRDb2x1bW5UeXBlOiBGaWx0ZXJPcGVyYXRvclR5cGUgfCBudWxsID0gbnVsbDtcbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHRoZSB2YWx1ZSBkcm9wZG93biB3aGVuIHRoZSBzZWxlY3RlZCBjb2x1bW4gaXMgYm9vbCBvciBlbnVtLlxuICAgKiBBbHdheXMgbm9ybWFsaXNlZCB0byBgeyBsYWJlbCwgdmFsdWUgfWAgc28gdGhlIHRlbXBsYXRlIGJpbmRzIG9uZSBzaGFwZS5cbiAgICovXG4gIHZhbHVlT3B0aW9uczogQ29sdW1uVmFsdWVPcHRpb25bXSA9IFtdO1xuICAvKipcbiAgICogSGVsZCBhcyBzdHJpbmdzIHJhdGhlciB0aGFuIGJvb2xlYW5zOiBgdmVyYmVuLWRyb3AtZG93bmAgZ2F0ZXMgaXRzIHNlbGVjdGVkXG4gICAqIGxhYmVsIG9uIGEgdHJ1dGhpbmVzcyBjaGVjaywgc28gYW4gb3B0aW9uIHZhbHVlZCBgZmFsc2VgIHdvdWxkIHJlbmRlciBhc1xuICAgKiB0aG91Z2ggbm90aGluZyB3ZXJlIHBpY2tlZC4gQ29lcmNlZCBiYWNrIHRvIGEgYm9vbGVhbiBpbiBgYWRkRmlsdGVyYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYm9vbE9wdGlvbnM6IENvbHVtblZhbHVlT3B0aW9uW10gPSBbXG4gICAgeyBsYWJlbDogJ1llcycsIHZhbHVlOiAndHJ1ZScgfSxcbiAgICB7IGxhYmVsOiAnTm8nLCB2YWx1ZTogJ2ZhbHNlJyB9LFxuICBdO1xuICAvLyBTZXQgb25jZSB0aGUgdXNlciBlZGl0cyB0aGUgcGFuZWwsIHNvIHJlc3RvcmVkL2hvc3QgZmlsdGVycyBubyBsb25nZXJcbiAgLy8gb3ZlcndyaXRlIHRoZWlyIGluLXByb2dyZXNzIHdvcmsuXG4gIHByaXZhdGUgdXNlclRvdWNoZWQgPSBmYWxzZTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVGaWx0ZXJhYmxlQ29sdW1ucygpO1xuICAgIHRoaXMuaHlkcmF0ZVNhdmVkRmlsdGVycygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIC8vIFBpY2sgdXAgZmlsdGVycyByZXN0b3JlZCBhc3luY2hyb25vdXNseSBieSB0aGUgaG9zdCBhZnRlciBmaXJzdCByZW5kZXIuXG4gICAgaWYgKGNoYW5nZXNbJ2luaXRpYWxGaWx0ZXJzJ10pIHtcbiAgICAgIHRoaXMuaHlkcmF0ZVNhdmVkRmlsdGVycygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVkIHRoZSBzYXZlZC1maWx0ZXIgY2hpcHMgZnJvbSB0aGUgcmVzdG9yZWQgZmlsdGVycy4gU2tpcHBlZCBvbmNlIHRoZSB1c2VyXG4gICAqIGhhcyB0b3VjaGVkIHRoZSBwYW5lbCBzbyBpdCBuZXZlciBvdmVyd3JpdGVzIHRoZWlyIGluLXByb2dyZXNzIGVkaXRzLlxuICAgKi9cbiAgcHJpdmF0ZSBoeWRyYXRlU2F2ZWRGaWx0ZXJzKCkge1xuICAgIGlmICh0aGlzLnVzZXJUb3VjaGVkKSByZXR1cm47XG4gICAgdGhpcy5zYXZlZEZpbHRlcnMgPSAodGhpcy5pbml0aWFsRmlsdGVycyA/PyBbXSkubWFwKChmaWx0ZXIpID0+ICh7XG4gICAgICAuLi5maWx0ZXIsXG4gICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICB9KSk7XG4gIH1cblxuICAvKiogTWFya3MgdGhlIHBhbmVsIGFzIHVzZXItZWRpdGVkIChjYWxsZWQgZnJvbSB0ZW1wbGF0ZSBpbnRlcmFjdGlvbnMpLiAqL1xuICBtYXJrVG91Y2hlZCgpIHtcbiAgICB0aGlzLnVzZXJUb3VjaGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUZpbHRlcmFibGVDb2x1bW5zKCkge1xuICAgIHRoaXMuZmlsdGVyYWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5hY2Nlc3NvcktleSk7XG4gIH1cblxuICBvbkNvbHVtblNlbGVjdChjb2x1bW5JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maWx0ZXJhYmxlQ29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5pZCA9PT0gY29sdW1uSWQpO1xuICAgIGlmICghY29sdW1uKSByZXR1cm47XG5cbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuY29sdW1uSWQgPSBjb2x1bW5JZDtcblxuICAgIC8vIFJlc2V0IG90aGVyIHZhbHVlc1xuICAgIHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIudmFsdWUgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBEZXRlcm1pbmUgY29sdW1uIHR5cGUgYW5kIHNldCBhdmFpbGFibGUgb3BlcmF0b3JzXG4gICAgdGhpcy5jdXJyZW50Q29sdW1uVHlwZSA9IHRoaXMucmVzb2x2ZUNvbHVtblR5cGUoY29sdW1uKTtcbiAgICB0aGlzLnZhbHVlT3B0aW9ucyA9XG4gICAgICB0aGlzLmN1cnJlbnRDb2x1bW5UeXBlID09PSAnYm9vbCdcbiAgICAgICAgPyB0aGlzLmJvb2xPcHRpb25zXG4gICAgICAgIDogdGhpcy5jdXJyZW50Q29sdW1uVHlwZSA9PT0gJ2VudW0nXG4gICAgICAgID8gdGhpcy5ub3JtYWxpemVWYWx1ZU9wdGlvbnMoY29sdW1uLnZhbHVlT3B0aW9ucylcbiAgICAgICAgOiBbXTtcblxuICAgIHN3aXRjaCAodGhpcy5jdXJyZW50Q29sdW1uVHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBTVFJJTkdfT1BFUkFUT1JTO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlT3BlcmF0b3JzID0gTlVNQkVSX09QRVJBVE9SUztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBEQVRFX09QRVJBVE9SUztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdib29sJzpcbiAgICAgICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBCT09MX09QRVJBVE9SUztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBFTlVNX09QRVJBVE9SUztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmF2YWlsYWJsZU9wZXJhdG9ycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIGFkZEZpbHRlcigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY3VycmVudEZpbHRlci52YWx1ZTtcbiAgICAvLyBDaGVja2VkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4gZm9yIGZhbHNpbmVzczogYGZhbHNlYCBpcyBhIHZhbGlkIGJvb2xcbiAgICAvLyBmaWx0ZXIgYW5kIGAwYCBhIHZhbGlkIG51bWJlciBvbmUuXG4gICAgY29uc3QgaGFzVmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSAnJztcblxuICAgIGlmICghdGhpcy5jdXJyZW50RmlsdGVyLmNvbHVtbklkIHx8ICF0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgfHwgIWhhc1ZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3RmlsdGVyOiBGaWx0ZXJDb25kaXRpb24gJiB7IHNlbGVjdGVkOiBib29sZWFuIH0gPSB7XG4gICAgICBjb2x1bW5JZDogdGhpcy5jdXJyZW50RmlsdGVyLmNvbHVtbklkISxcbiAgICAgIG9wZXJhdG9yOiB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IsXG4gICAgICAvLyBCb29sIHZhbHVlcyByb3VuZC10cmlwIHRocm91Z2ggdGhlIGRyb3Bkb3duIGFzIHN0cmluZ3M7IGhvc3RzIHJlY2VpdmVcbiAgICAgIC8vIGEgcmVhbCBib29sZWFuLlxuICAgICAgdmFsdWU6IHRoaXMuY3VycmVudENvbHVtblR5cGUgPT09ICdib29sJyA/IHZhbHVlID09PSAndHJ1ZScgOiB2YWx1ZSEsXG4gICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5zYXZlZEZpbHRlcnMudW5zaGlmdChuZXdGaWx0ZXIpO1xuICAgIHRoaXMudXNlclRvdWNoZWQgPSB0cnVlO1xuICAgIHRoaXMucmVzZXRDdXJyZW50RmlsdGVyKCk7XG4gIH1cblxuICBnZXRGaWx0ZXJEZXNjcmlwdGlvbihmaWx0ZXI6IEZpbHRlckNvbmRpdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maWx0ZXJhYmxlQ29sdW1ucy5maW5kKFxuICAgICAgKGNvbCkgPT4gY29sLmlkID09PSBmaWx0ZXIuY29sdW1uSWRcbiAgICApO1xuICAgIGlmICghY29sdW1uKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCBjb2x1bW5OYW1lID1cbiAgICAgIHR5cGVvZiBjb2x1bW4uaGVhZGVyID09PSAnZnVuY3Rpb24nID8gY29sdW1uLmhlYWRlcih7fSkgOiBjb2x1bW4uaGVhZGVyO1xuXG4gICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLmdldE9wZXJhdG9yTGFiZWwoZmlsdGVyLm9wZXJhdG9yKTtcblxuICAgIHJldHVybiBgJHtjb2x1bW5OYW1lfSAke29wZXJhdG9yfSAke3RoaXMuZ2V0VmFsdWVMYWJlbChjb2x1bW4sIGZpbHRlci52YWx1ZSl9YDtcbiAgfVxuXG4gIC8qKiBSZW5kZXJzIGEgc3RvcmVkIGZpbHRlciB2YWx1ZSB0aGUgd2F5IGl0IHdhcyBjaG9zZW4sIG5vdCBhcyByYXcgZGF0YS4gKi9cbiAgcHJpdmF0ZSBnZXRWYWx1ZUxhYmVsKFxuICAgIGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPixcbiAgICB2YWx1ZTogRmlsdGVyQ29uZGl0aW9uWyd2YWx1ZSddXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIHZhbHVlLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgcmV0dXJuIHZhbHVlID8gJ1llcycgOiAnTm8nO1xuXG4gICAgLy8gVGhlIG5hdGl2ZSBkYXRlIGlucHV0IHlpZWxkcyBhICdZWVlZLU1NLUREJyBzdHJpbmc7IHJlc3RvcmVkIGZpbHRlcnMgbWF5XG4gICAgLy8gY2Fycnkgb25lIHRvby4gUGFyc2VkIGFzIGxvY2FsIHRpbWUg4oCUIGBuZXcgRGF0ZSgnMjAyNi0wNy0yOCcpYCBpcyB0cmVhdGVkXG4gICAgLy8gYXMgVVRDIGFuZCB3b3VsZCBkaXNwbGF5IGFzIHRoZSBwcmV2aW91cyBkYXkgd2VzdCBvZiBHcmVlbndpY2guXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdGhpcy5pc0RhdGVTdHJpbmcodmFsdWUpKSB7XG4gICAgICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSB2YWx1ZS5zbGljZSgwLCAxMCkuc3BsaXQoJy0nKS5tYXAoTnVtYmVyKTtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSkudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9uID0gdGhpcy5ub3JtYWxpemVWYWx1ZU9wdGlvbnMoY29sdW1uLnZhbHVlT3B0aW9ucykuZmluZChcbiAgICAgIChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS52YWx1ZSA9PT0gdmFsdWVcbiAgICApO1xuICAgIHJldHVybiBvcHRpb24gPyBvcHRpb24ubGFiZWwgOiBgJHt2YWx1ZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcGVyYXRvckxhYmVsKG9wZXJhdG9yVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSBbXG4gICAgICAuLi5TVFJJTkdfT1BFUkFUT1JTLFxuICAgICAgLi4uTlVNQkVSX09QRVJBVE9SUyxcbiAgICAgIC4uLkRBVEVfT1BFUkFUT1JTLFxuICAgICAgLi4uQk9PTF9PUEVSQVRPUlMsXG4gICAgICAuLi5FTlVNX09QRVJBVE9SUyxcbiAgICBdLmZpbmQoKG9wKSA9PiBvcC52YWx1ZSA9PT0gb3BlcmF0b3JWYWx1ZSk7XG4gICAgcmV0dXJuIG9wZXJhdG9yID8gb3BlcmF0b3IubGFiZWwudG9Mb3dlckNhc2UoKSA6IG9wZXJhdG9yVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUHJlZmVycyB0aGUgdHlwZSBkZWNsYXJlZCBvbiB0aGUgY29sdW1uLCBmYWxsaW5nIGJhY2sgdG8gaW5zcGVjdGluZyB0aGUgZGF0YVxuICAgKiBvbmx5IHdoZW4gdGhlIGhvc3QgaGFzIG5vdCBkZWNsYXJlZCBvbmUuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVDb2x1bW5UeXBlKGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPik6IEZpbHRlck9wZXJhdG9yVHlwZSB7XG4gICAgaWYgKGNvbHVtbi52YWx1ZVR5cGUpIHtcbiAgICAgIC8vIEFuIEVudW0gd2l0aCBubyBkZWNsYXJlZCBtZW1iZXJzIGhhcyBub3RoaW5nIHRvIHBvcHVsYXRlIGEgZHJvcGRvd25cbiAgICAgIC8vIHdpdGgsIHNvIGl0IGRlZ3JhZGVzIHRvIGEgZnJlZS10ZXh0IGZpbHRlciByYXRoZXIgdGhhbiBhbiBlbXB0eSBzZWxlY3QuXG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi52YWx1ZVR5cGUgPT09IENvbHVtblZhbHVlVHlwZS5FbnVtICYmXG4gICAgICAgICF0aGlzLm5vcm1hbGl6ZVZhbHVlT3B0aW9ucyhjb2x1bW4udmFsdWVPcHRpb25zKS5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5tYXBWYWx1ZVR5cGUoY29sdW1uLnZhbHVlVHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW5mZXJDb2x1bW5UeXBlKGNvbHVtbik7XG4gIH1cblxuICBwcml2YXRlIG1hcFZhbHVlVHlwZSh2YWx1ZVR5cGU6IENvbHVtblZhbHVlVHlwZSk6IEZpbHRlck9wZXJhdG9yVHlwZSB7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgQ29sdW1uVmFsdWVUeXBlLkRhdGU6XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICBjYXNlIENvbHVtblZhbHVlVHlwZS5OdW1iZXI6XG4gICAgICBjYXNlIENvbHVtblZhbHVlVHlwZS5JbnRlZ2VyOlxuICAgICAgY2FzZSBDb2x1bW5WYWx1ZVR5cGUuRGVjaW1hbDpcbiAgICAgIGNhc2UgQ29sdW1uVmFsdWVUeXBlLkN1cnJlbmN5OlxuICAgICAgICByZXR1cm4gJ251bWJlcic7XG4gICAgICBjYXNlIENvbHVtblZhbHVlVHlwZS5Cb29sOlxuICAgICAgICByZXR1cm4gJ2Jvb2wnO1xuICAgICAgY2FzZSBDb2x1bW5WYWx1ZVR5cGUuRW51bTpcbiAgICAgICAgcmV0dXJuICdlbnVtJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnc3RyaW5nJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQmVzdC1lZmZvcnQgdHlwZSBkZXRlY3Rpb24gZm9yIGNvbHVtbnMgdGhhdCBkZWNsYXJlIG5vIGB2YWx1ZVR5cGVgLiBGYWxsc1xuICAgKiBiYWNrIHRvICdzdHJpbmcnIHJhdGhlciB0aGFuIG51bGwgc28gdGhlIHZhbHVlIGZpZWxkIGFsd2F5cyByZW5kZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBpbmZlckNvbHVtblR5cGUoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KTogRmlsdGVyT3BlcmF0b3JUeXBlIHtcbiAgICBjb25zdCBzYW1wbGVWYWx1ZSA9IHRoaXMuZmlyc3ROb25FbXB0eVZhbHVlKGNvbHVtbik7XG5cbiAgICBpZiAoc2FtcGxlVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gJ2RhdGUnO1xuICAgIGlmICh0eXBlb2Ygc2FtcGxlVmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gJ251bWJlcic7XG4gICAgaWYgKHR5cGVvZiBzYW1wbGVWYWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gJ2Jvb2wnO1xuICAgIGlmICh0eXBlb2Ygc2FtcGxlVmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMuaXNEYXRlU3RyaW5nKHNhbXBsZVZhbHVlKSkge1xuICAgICAgcmV0dXJuICdkYXRlJztcbiAgICB9XG4gICAgcmV0dXJuICdzdHJpbmcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjYW5zIHJvd3MgZm9yIHRoZSBmaXJzdCB1c2FibGUgc2FtcGxlIOKAlCBzYW1wbGluZyBvbmx5IHRoZSBmaXJzdCByb3cgbWlzc2VzXG4gICAqIHRoZSB0eXBlIHdoZW5ldmVyIHRoYXQgcm93IGhhcHBlbnMgdG8gaG9sZCBhIG51bGwgb3IgdW5kZWZpbmVkIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBmaXJzdE5vbkVtcHR5VmFsdWUoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KTogdW5rbm93biB7XG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5kYXRhID8/IFtdKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVhZFZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSAnJykgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZFZhbHVlKGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPiwgcm93OiBUKTogdW5rbm93biB7XG4gICAgaWYgKGNvbHVtbi5hY2Nlc3NvcktleSkgcmV0dXJuIHJvd1tjb2x1bW4uYWNjZXNzb3JLZXldO1xuICAgIGlmIChjb2x1bW4uYWNjZXNzb3JGbikgcmV0dXJuIGNvbHVtbi5hY2Nlc3NvckZuKHJvdyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRGF0ZXMgdXN1YWxseSBhcnJpdmUgZnJvbSBhbiBBUEkgYXMgSVNPIHN0cmluZ3MsIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBiZVxuICAgKiB0eXBlZCBhcyBwbGFpbiB0ZXh0LiBBbmNob3JlZCB0byBJU08taXNoIGlucHV0IHNvIG9yZGluYXJ5IHN0cmluZ3MgdGhhdFxuICAgKiBgRGF0ZWAgaGFwcGVucyB0byBwYXJzZSAoZS5nLiBcIk1hcmNoXCIpIGFyZSBub3QgbWlzcmVhZCBhcyBkYXRlcy5cbiAgICovXG4gIHByaXZhdGUgaXNEYXRlU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIS9eXFxkezR9LVxcZHsyfS1cXGR7Mn0oW1RcXHNdfCQpLy50ZXN0KHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhTnVtYmVyLmlzTmFOKG5ldyBEYXRlKHZhbHVlKS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgLyoqIEFjY2VwdHMgZWl0aGVyIHN1cHBvcnRlZCBgdmFsdWVPcHRpb25zYCBzaGFwZSBhbmQgcmV0dXJucyBvbmUgb2YgdGhlbS4gKi9cbiAgcHJpdmF0ZSBub3JtYWxpemVWYWx1ZU9wdGlvbnMoXG4gICAgb3B0aW9uczogc3RyaW5nW10gfCBDb2x1bW5WYWx1ZU9wdGlvbltdIHwgdW5kZWZpbmVkXG4gICk6IENvbHVtblZhbHVlT3B0aW9uW10ge1xuICAgIGlmICghb3B0aW9ucz8ubGVuZ3RoKSByZXR1cm4gW107XG4gICAgcmV0dXJuIChvcHRpb25zIGFzIHVua25vd25bXSkubWFwKChvcHRpb24pID0+XG4gICAgICB0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJ1xuICAgICAgICA/IHsgbGFiZWw6IG9wdGlvbiwgdmFsdWU6IG9wdGlvbiB9XG4gICAgICAgIDogKG9wdGlvbiBhcyBDb2x1bW5WYWx1ZU9wdGlvbilcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEN1cnJlbnRGaWx0ZXIoKSB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyID0ge307XG4gICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRDb2x1bW5UeXBlID0gbnVsbDtcbiAgICB0aGlzLnZhbHVlT3B0aW9ucyA9IFtdO1xuICB9XG5cbiAgcmVzZXRBbGwoKSB7XG4gICAgdGhpcy51c2VyVG91Y2hlZCA9IHRydWU7XG4gICAgdGhpcy5zYXZlZEZpbHRlcnMgPSBbXTtcbiAgICB0aGlzLnJlc2V0Q3VycmVudEZpbHRlcigpO1xuICAgIHRoaXMucmVzZXRGaWx0ZXIuZW1pdCgpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJzKCkge1xuICAgIHRoaXMudXNlclRvdWNoZWQgPSB0cnVlO1xuICAgIGNvbnN0IGFjdGl2ZUZpbHRlcnMgPSB0aGlzLnNhdmVkRmlsdGVyc1xuICAgICAgLmZpbHRlcigoZmlsdGVyKSA9PiBmaWx0ZXIuc2VsZWN0ZWQpXG4gICAgICAubWFwKCh7IGNvbHVtbklkLCBvcGVyYXRvciwgdmFsdWUgfSkgPT4gKHtcbiAgICAgICAgY29sdW1uSWQsXG4gICAgICAgIG9wZXJhdG9yLFxuICAgICAgICB2YWx1ZSxcbiAgICAgIH0pKTtcbiAgICB0aGlzLmZpbHRlckFwcGxpZWQuZW1pdChhY3RpdmVGaWx0ZXJzKTtcbiAgfVxuXG4gIGdldENvbHVtbkxhYmVsKGNvbHVtbklkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZmlsdGVyYWJsZUNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wuaWQgPT09IGNvbHVtbklkKTtcbiAgICByZXR1cm4gY29sdW1uXG4gICAgICA/IHR5cGVvZiBjb2x1bW4uaGVhZGVyID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gY29sdW1uLmhlYWRlcih7fSlcbiAgICAgICAgOiBjb2x1bW4uaGVhZGVyXG4gICAgICA6IGNvbHVtbklkO1xuICB9XG5cbiAgZ2V0IHZpc2libGVGaWx0ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLnNob3dBbGxGaWx0ZXJzXG4gICAgICA/IHRoaXMuc2F2ZWRGaWx0ZXJzXG4gICAgICA6IHRoaXMuc2F2ZWRGaWx0ZXJzLnNsaWNlKDAsIHRoaXMubWF4VmlzaWJsZUl0ZW1zKTtcbiAgfVxuXG4gIGdldCBhY3RpdmVGaWx0ZXJDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNhdmVkRmlsdGVycy5maWx0ZXIoKGZpbHRlcikgPT4gZmlsdGVyLnNlbGVjdGVkKS5sZW5ndGg7XG4gIH1cbn1cbiIsIjx2ZXJiZW4tY2FyZFxuICB3aWR0aD1cIjI0cmVtXCJcbiAgYm9yZGVyUmFkaXVzPVwiMXJlbVwiXG4gIFtib3JkZXJdPVwiJzFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItcHJpbWFyeSknXCJcbiAgYmdDb2xvcj1cInZhcigtLXZibi1jb2xvci1zdXJmYWNlKVwiXG4+XG4gIDxkaXYgY2FyZC1oZWFkZXIgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxuICAgIDxoNCBjbGFzcz1cImhlYWRlci10aXRsZVwiPlxuICAgICAgRmlsdGVyIDxzdXA+KHt7IGFjdGl2ZUZpbHRlckNvdW50IH19KTwvc3VwPlxuICAgIDwvaDQ+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJyZXNldC1idXR0b25cIlxuICAgICAgW3N0eWxlLmNvbG9yXT1cIid2YXIoLS12Ym4tY29sb3ItYm9yZGVyLWZvY3VzKSdcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICBbc3R5bGUuYm9yZGVyXT1cIidub25lJ1wiXG4gICAgICBbc3R5bGUuY3Vyc29yXT1cIidwb2ludGVyJ1wiXG4gICAgICBbc3R5bGUuZm9udC1zaXplXT1cIicxMnB4J1wiXG4gICAgICAoY2xpY2spPVwicmVzZXRBbGwoKVwiXG4gICAgPlxuICAgICAgUmVzZXRcbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjYXJkLWJvZHkgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICA8IS0tIFNhdmVkIEZpbHRlcnMgU2VjdGlvbiAtLT5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+RmlsdGVyczwvaDM+XG4gICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgaWNvbj1cImluZm9cIlxuICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgZmlsbD1cInZhcigtLXZibi1jb2xvci10ZXh0LW11dGVkKVwiXG4gICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIHZpc2libGVGaWx0ZXJzXCIgY2xhc3M9XCJpdGVtXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWxhYmVsXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwiZmlsdGVyLnNlbGVjdGVkXCIgKG5nTW9kZWxDaGFuZ2UpPVwibWFya1RvdWNoZWQoKVwiIC8+XG4gICAgICAgICAgPGxhYmVsPnt7IGdldEZpbHRlckRlc2NyaXB0aW9uKGZpbHRlcikgfX08L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwic2F2ZWRGaWx0ZXJzLmxlbmd0aCA+IG1heFZpc2libGVJdGVtc1wiXG4gICAgICAgIGNsYXNzPVwic2hvdy1tb3JlXCJcbiAgICAgICAgKGNsaWNrKT1cInNob3dBbGxGaWx0ZXJzID0gIXNob3dBbGxGaWx0ZXJzXCJcbiAgICAgID5cbiAgICAgICAge3sgc2hvd0FsbEZpbHRlcnMgPyBcIlNob3cgTGVzc1wiIDogXCJTaG93IE1vcmVcIiB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPGhyIGNsYXNzPVwiZGl2aWRlclwiIC8+XG5cbiAgICA8IS0tIE5ldyBGaWx0ZXIgT3BlcmF0aW9uIC0tPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5PcGVyYXRpb248L2gzPlxuICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgIGljb249XCJpbmZvXCJcbiAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgIGZpbGw9XCJ2YXIoLS12Ym4tY29sb3ItdGV4dC1tdXRlZClcIlxuICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJvcGVyYXRpb24tZ3JpZFwiPlxuICAgICAgICA8IS0tIENvbHVtbiBTZWxlY3Rpb24gLS0+XG4gICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgY29sdW1uXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJmaWx0ZXJhYmxlQ29sdW1uc1wiXG4gICAgICAgICAgb3B0aW9uTGFiZWw9XCJoZWFkZXJcIlxuICAgICAgICAgIG9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudEZpbHRlci5jb2x1bW5JZFwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Db2x1bW5TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgID48L3ZlcmJlbi1kcm9wLWRvd24+XG5cbiAgICAgICAgPCEtLSBPcGVyYXRvciBTZWxlY3Rpb24gLS0+XG4gICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3Qgb3BlcmF0b3JcIlxuICAgICAgICAgIFtvcHRpb25zXT1cImF2YWlsYWJsZU9wZXJhdG9yc1wiXG4gICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLm9wZXJhdG9yXCJcbiAgICAgICAgPjwvdmVyYmVuLWRyb3AtZG93bj5cblxuICAgICAgICA8IS0tIFZhbHVlIElucHV0IGJhc2VkIG9uIHR5cGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImN1cnJlbnRDb2x1bW5UeXBlXCI+XG4gICAgICAgICAgPCEtLSBEYXRlIElucHV0IOKAlCBuYXRpdmUgcmF0aGVyIHRoYW4gdGhlIGxpYnJhcnkgZGF0ZSBwaWNrZXIsIHdob3NlXG4gICAgICAgICAgICAgICBvdmVybGF5IHJlbmRlcnMgb2ZmIHNjcmVlbiBmcm9tIHRoaXMgbmFycm93IHBhbmVsLiAtLT5cbiAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiXG4gICAgICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgICAgICBwbGFjZUhvbGRlcj1cIlNlbGVjdCBkYXRlXCJcbiAgICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItYm9yZGVyKVwiXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgICBwZD1cIjJweCA2cHhcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW5hLWlucHV0PlxuXG4gICAgICAgICAgPCEtLSBOdW1iZXIgSW5wdXQgLS0+XG4gICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIHBsYWNlSG9sZGVyPVwiRW50ZXIgbnVtYmVyXCJcbiAgICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItYm9yZGVyKVwiXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgICBwZD1cIjJweCA2cHhcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW5hLWlucHV0PlxuXG4gICAgICAgICAgPCEtLSBZZXMgLyBObyBTZWxlY3Rpb24gLS0+XG4gICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInYm9vbCdcIlxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHZhbHVlXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cInZhbHVlT3B0aW9uc1wiXG4gICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICAgICAgPCEtLSBFbnVtIE1lbWJlciBTZWxlY3Rpb24gLS0+XG4gICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZW51bSdcIlxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjEuMDI1cmVtXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHZhbHVlXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cInZhbHVlT3B0aW9uc1wiXG4gICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICAgICAgPCEtLSBUZXh0IElucHV0IChkZWZhdWx0KSAtLT5cbiAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgKm5nU3dpdGNoRGVmYXVsdFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgcGxhY2VIb2xkZXI9XCJFbnRlciB0ZXh0XCJcbiAgICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCB2YXIoLS12Ym4tY29sb3ItYm9yZGVyKVwiXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxLjAyNXJlbVwiXG4gICAgICAgICAgICBwZD1cIjJweCA2cHhcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICA+PC92ZXJiZW5hLWlucHV0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLWJ1dHRvbiBtbC1hdXRvXCIgKGNsaWNrKT1cImFkZEZpbHRlcigpXCI+KyBBZGQ8L2J1dHRvbj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2FyZC1mb290ZXIgY2xhc3M9XCJjYXJkLWZvb3RlclwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJleHBvcnQtYnV0dG9uXCIgKGNsaWNrKT1cImFwcGx5RmlsdGVycygpXCI+RmlsdGVyPC9idXR0b24+XG4gIDwvZGl2PlxuPC92ZXJiZW4tY2FyZD5cbiJdfQ==
@@ -6,7 +6,6 @@ import { CardModule } from 'verben-ng-ui/src/lib/components/card';
6
6
  import { DropDownModule } from 'verben-ng-ui/src/lib/components/drop-down';
7
7
  import { TooltipModule } from 'verben-ng-ui/src/lib/components/tooltip';
8
8
  import { VerbenaInputModule } from 'verben-ng-ui/src/lib/verbena-input';
9
- import { DatePickerModule } from 'verben-ng-ui/src/lib/components/date-picker';
10
9
  import { DataFilterComponent } from './data-filter.component';
11
10
  import * as i0 from "@angular/core";
12
11
  export class DataFilterModule {
@@ -18,8 +17,7 @@ export class DataFilterModule {
18
17
  CardModule,
19
18
  DropDownModule,
20
19
  TooltipModule,
21
- VerbenaInputModule,
22
- DatePickerModule], exports: [DataFilterComponent] });
20
+ VerbenaInputModule], exports: [DataFilterComponent] });
23
21
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataFilterModule, imports: [CommonModule,
24
22
  FormsModule,
25
23
  ReactiveFormsModule,
@@ -27,8 +25,7 @@ export class DataFilterModule {
27
25
  CardModule,
28
26
  DropDownModule,
29
27
  TooltipModule,
30
- VerbenaInputModule,
31
- DatePickerModule] });
28
+ VerbenaInputModule] });
32
29
  }
33
30
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataFilterModule, decorators: [{
34
31
  type: NgModule,
@@ -43,9 +40,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
43
40
  DropDownModule,
44
41
  TooltipModule,
45
42
  VerbenaInputModule,
46
- DatePickerModule,
47
43
  ],
48
44
  exports: [DataFilterComponent],
49
45
  }]
50
46
  }] });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1maWx0ZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWZpbHRlci9kYXRhLWZpbHRlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFpQjlELE1BQU0sT0FBTyxnQkFBZ0I7d0dBQWhCLGdCQUFnQjt5R0FBaEIsZ0JBQWdCLGlCQWRaLG1CQUFtQixhQUVoQyxZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixTQUFTO1lBQ1QsVUFBVTtZQUNWLGNBQWM7WUFDZCxhQUFhO1lBQ2Isa0JBQWtCO1lBQ2xCLGdCQUFnQixhQUVSLG1CQUFtQjt5R0FFbEIsZ0JBQWdCLFlBWnpCLFlBQVk7WUFDWixXQUFXO1lBQ1gsbUJBQW1CO1lBQ25CLFNBQVM7WUFDVCxVQUFVO1lBQ1YsY0FBYztZQUNkLGFBQWE7WUFDYixrQkFBa0I7WUFDbEIsZ0JBQWdCOzs0RkFJUCxnQkFBZ0I7a0JBZjVCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsbUJBQW1CLENBQUM7b0JBQ25DLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixTQUFTO3dCQUNULFVBQVU7d0JBQ1YsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGtCQUFrQjt3QkFDbEIsZ0JBQWdCO3FCQUNqQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztpQkFDL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ZnTW9kdWxlIH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9zdmcnO1xuaW1wb3J0IHsgQ2FyZE1vZHVsZSB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvY2FyZCc7XG5pbXBvcnQgeyBEcm9wRG93bk1vZHVsZSB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZHJvcC1kb3duJztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgVmVyYmVuYUlucHV0TW9kdWxlIH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvdmVyYmVuYS1pbnB1dCc7XG5pbXBvcnQgeyBEYXRlUGlja2VyTW9kdWxlIH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlcic7XG5pbXBvcnQgeyBEYXRhRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhLWZpbHRlci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtEYXRhRmlsdGVyQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFN2Z01vZHVsZSxcbiAgICBDYXJkTW9kdWxlLFxuICAgIERyb3BEb3duTW9kdWxlLFxuICAgIFRvb2x0aXBNb2R1bGUsXG4gICAgVmVyYmVuYUlucHV0TW9kdWxlLFxuICAgIERhdGVQaWNrZXJNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtEYXRhRmlsdGVyQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUZpbHRlck1vZHVsZSB7fVxuIl19
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1maWx0ZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWZpbHRlci9kYXRhLWZpbHRlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFnQjlELE1BQU0sT0FBTyxnQkFBZ0I7d0dBQWhCLGdCQUFnQjt5R0FBaEIsZ0JBQWdCLGlCQWJaLG1CQUFtQixhQUVoQyxZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixTQUFTO1lBQ1QsVUFBVTtZQUNWLGNBQWM7WUFDZCxhQUFhO1lBQ2Isa0JBQWtCLGFBRVYsbUJBQW1CO3lHQUVsQixnQkFBZ0IsWUFYekIsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsU0FBUztZQUNULFVBQVU7WUFDVixjQUFjO1lBQ2QsYUFBYTtZQUNiLGtCQUFrQjs7NEZBSVQsZ0JBQWdCO2tCQWQ1QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLG1CQUFtQixDQUFDO29CQUNuQyxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsU0FBUzt3QkFDVCxVQUFVO3dCQUNWLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixrQkFBa0I7cUJBQ25CO29CQUNELE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO2lCQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdmdNb2R1bGUgfSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3N2Zyc7XG5pbXBvcnQgeyBDYXJkTW9kdWxlIH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9jYXJkJztcbmltcG9ydCB7IERyb3BEb3duTW9kdWxlIH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kcm9wLWRvd24nO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBWZXJiZW5hSW5wdXRNb2R1bGUgfSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi92ZXJiZW5hLWlucHV0JztcbmltcG9ydCB7IERhdGFGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGEtZmlsdGVyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0RhdGFGaWx0ZXJDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgU3ZnTW9kdWxlLFxuICAgIENhcmRNb2R1bGUsXG4gICAgRHJvcERvd25Nb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBWZXJiZW5hSW5wdXRNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtEYXRhRmlsdGVyQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUZpbHRlck1vZHVsZSB7fVxuIl19