@sarasanalytics-com/design-system 0.0.156 → 0.0.158

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.
@@ -86,7 +86,7 @@ export class NgSelectComponent extends FieldType {
86
86
  this.filteredOptions = [...this.field.props?.options];
87
87
  }
88
88
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: NgSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
89
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: NgSelectComponent, isStandalone: true, selector: "sa-ng-select", providers: [IconService], usesInheritance: true, ngImport: i0, template: "<ng-select [items]=\"filteredOptions\" [multiple]=\"props?.multiple || false\" [bindLabel]=\"props?.bindLabel || 'label'\"\n [closeOnSelect]=\"props?.closeOnselect || true\" [bindValue]=\"props?.bindValue || 'value'\"\n [placeholder]=\"props?.placeholder || 'Select Options'\" [searchable]=\"false\" [formControl]=\"formControl\"\n [clearable]=\"props?.isClearable\" [appearance]=\"props['appearance'] || 'outline'\" class=\"ng-select-custom\">\n\n <ng-template ng-header-tmp>\n <div class=\"search-input-container mat-form-field-density-5\">\n <mat-form-field [appearance]=\"props['appearance'] || 'outline'\" class=\"w-100\">\n <sa-icon icon=\"searchIcon\" class=\"searchIcons\" size=\"20\" matPrefix></sa-icon>\n <input matInput type=\"text\" name=\"menu-search-bar\" class=\"search-input searchIcons\"\n (keyup)=\"onSearch($event)\" (keydown)=\"stopBackspacePropagation($event)\"\n [placeholder]=\"props?.searchPlaceholder || 'Search'\" [(ngModel)]=\"searchValue\" />\n <sa-icon icon=\"closeOutlined\" class=\"pointer searchIcons\" size=\"15\" matSuffix\n (click)=\"clearSearch($event)\"></sa-icon>\n </mat-form-field>\n </div>\n </ng-template>\n\n <!-- Option template with a checkbox in front of each row -->\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\n <div class=\"option-row\">\n @if(props?.multiple){\n <input type=\"checkbox\" [checked]=\"item$.selected\" tabindex=\"-1\" />\n }\n <span class=\"option-label\">{{ item[props.bindLabel || 'label'] }}</span>\n\n </div>\n </ng-template>\n\n <!-- Selected items chip template (optional) -->\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n <div class=\"chips ng-values-list\">\n\n <!-- If collapsed: show only first 2 + summary -->\n <ng-container *ngIf=\"!expandedSummary\">\n @for (s of items.slice(0, 2); track s[props.bindValue || 'value']) {\n <div class=\"ng-value\">\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\n size=\"11\"></sa-icon></span>\n </div>\n }\n\n @if (items.length > 2) {\n <div class=\"ng-value summary-chip pointer\" (click)=\"toggleSummary()\">\n <span class=\"ng-value-label\">+{{ items.length - 2 }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clearRemaining(items, clear)\"><sa-icon\n icon=\"closeOutlined\" size=\"11\"></sa-icon></span>\n </div>\n }\n </ng-container>\n\n <!-- If expanded: show all items -->\n <ng-container *ngIf=\"expandedSummary\">\n @for (s of items; track s[props.bindValue || 'value']) {\n <div class=\"ng-value\">\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\n size=\"11\"></sa-icon></span>\n </div>\n }\n <!-- Collapse button -->\n <div class=\"ng-value summary-chip pointer\" (click)=\"toggleSummary()\">\n <sa-icon class=\"ng-value-label\" icon=\"leftChevronOutlined\"></sa-icon>\n </div>\n </ng-container>\n\n </div>\n </ng-template>\n\n @if(props?.footer){\n <ng-template ng-footer-tmp>\n <div class=\"dropdown-footer\">{{props?.footer?.description}}</div>\n </ng-template>\n }\n\n <ng-template ng-notfound-tmp>\n <div class=\"no-results\">\n @if (searchValue?.length > 0) {\n {{ \"\u274C No items match \\\"{{ searchValue }}\\\"\" || props?.searchNotFoundText}}\n } @else {\n {{ \"\u26A0\uFE0F No options available\" || props?.notFoundText}}\n }\n </div>\n </ng-template>\n\n <ng-template ng-loadingtext-tmp>\n <div class=\"loading\">\u23F3 Loading options...</div>\n </ng-template>\n</ng-select>", styles: ["::ng-deep .ng-select-custom .search-input-container .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding:var(--small-2px, 2px) var(--small-12px, 12px)}.ng-select-custom .ng-values-list{display:flex;flex-wrap:wrap;gap:var(--small-8px, 8px)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:none;display:flex;align-items:center;font-size:var(--small-6px, 6px)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{border-radius:var(--small-4px, 4px);background:var(--grey-50, #F2F4F7);display:flex;padding:var(--small-2px, 2px) var(--small-8px, 8px);justify-content:center;align-items:center;gap:var(--small-4px, 4px)}.ng-select-custom .option-row{display:flex;width:18.75rem;height:2.5rem;padding:var(--small-12px, 12px);align-items:center;gap:var(--small-8px, 8px);flex-shrink:0}::ng-deep .ng-select-custom .mdc-form-field.mat-internal-form-field{display:flex;gap:var(--small-8px, 8px);align-items:center}::ng-deep .ng-select-custom .mdc-checkbox__ripple{display:none}::ng-deep .ng-select-custom .checkbox-style{display:flex;align-items:center}.ng-select-custom .ng-option input[type=checkbox],.ng-select input[type=checkbox]{accent-color:var(--primary-500);vertical-align:middle;width:var(--small-14px, 14px);height:var(--small-14px, 14px)}::ng-deep .ng-select-custom.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:var(--primary-50)}.option-label{color:var(--text-high-emphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .search-input-container .mat-mdc-form-field{width:-webkit-fill-available}::ng-deep .ng-select-custom .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:var(--primary-50)}::ng-deep .ng-select-custom.ng-select .ng-arrow-wrapper .ng-arrow{display:none}::ng-deep .ng-select .ng-arrow-wrapper{width:var(--small-12px, 12px);height:var(--small-12px, 12px);display:flex;align-items:center;justify-content:center}::ng-deep .ng-select .ng-arrow-wrapper:after{content:\"\";display:inline-block;width:var(--small-8px, 8px);height:var(--small-12px, 12px);background:url(/assets/upDownChevronOutlined.svg) no-repeat center;background-size:contain}::ng-deep .ng-select-custom.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:var(--primary-500);box-shadow:none}::ng-deep .ng-select-custom.ng-select .no-results{padding:.8rem}::ng-deep .ng-select-custom.ng-select .ng-select-container{padding:0rem var(--small-12px) 0rem var(--small-12px);height:1.875rem;min-height:2.438rem;border:1px solid var(--grey-100, #EAECF0)}::ng-deep .ng-select-custom.ng-select .option-label{color:var(--text-highemphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .ng-value-label{color:var(--text-mediumemphasis, #6D6979);font-family:var(--font-family-roboto);font-size:.688rem;font-style:normal;font-weight:500;line-height:var(--small-16px, 16px);letter-spacing:.5px}::ng-deep .ng-select-custom.ng-select .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:var(--primary-500)}::ng-deep .ng-select-custom.ng-select .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:var(--small-4px, 4px);border-bottom-right-radius:var(--small-4px, 4px);border-bottom-left-radius:0}::ng-deep .ng-select-custom.ng-select.ng-select-single .ng-value-label{color:var(--text-highemphasis);font-family:var(--font-family-roboto);font-size:var(--small-14px);font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:var(--text-low-emphasis, #9B98A3);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__leading,::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__notch,::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--grey-100)}.ng-select-custom .searchIcons{color:var(--color-text-neutral-300, #757575)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i3.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i3.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i3.NgMultiLabelTemplateDirective, selector: "[ng-multi-label-tmp]" }, { kind: "directive", type: i3.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { kind: "directive", type: i3.NgFooterTemplateDirective, selector: "[ng-footer-tmp]" }, { kind: "directive", type: i3.NgNotFoundTemplateDirective, selector: "[ng-notfound-tmp]" }, { kind: "directive", type: i3.NgLoadingTextTemplateDirective, selector: "[ng-loadingtext-tmp]" }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatCheckboxModule }] }); }
89
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: NgSelectComponent, isStandalone: true, selector: "sa-ng-select", providers: [IconService], usesInheritance: true, ngImport: i0, template: "<ng-select [items]=\"filteredOptions\" [multiple]=\"props?.multiple || false\" [bindLabel]=\"props?.bindLabel || 'label'\"\n [closeOnSelect]=\"props?.closeOnselect || true\" [bindValue]=\"props?.bindValue || 'value'\"\n [placeholder]=\"props?.placeholder || 'Select'\" [searchable]=\"false\" [formControl]=\"formControl\"\n [clearable]=\"props?.isClearable\" [appearance]=\"props['appearance'] || 'outline'\" class=\"ng-select-custom\">\n\n @if(!!props?.showSearchBar){\n <ng-template ng-header-tmp>\n <div class=\"search-input-container mat-form-field-density-5\">\n <mat-form-field [appearance]=\"props['appearance'] || 'outline'\" class=\"w-100\">\n <sa-icon icon=\"searchIcon\" class=\"searchIcons\" size=\"20\" matPrefix></sa-icon>\n <input matInput type=\"text\" name=\"menu-search-bar\" class=\"search-input searchIcons\"\n (keyup)=\"onSearch($event)\" (keydown)=\"stopBackspacePropagation($event)\"\n [placeholder]=\"props?.searchPlaceholder || 'Search'\" [(ngModel)]=\"searchValue\" />\n <sa-icon icon=\"closeOutlined\" class=\"pointer searchIcons\" size=\"15\" matSuffix\n (click)=\"clearSearch($event)\"></sa-icon>\n </mat-form-field>\n </div>\n </ng-template>\n }\n <!-- Option template with a checkbox in front of each row -->\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\n <div class=\"option-row\">\n @if(props?.multiple){\n <input type=\"checkbox\" [checked]=\"item$.selected\" tabindex=\"-1\" />\n }\n <span class=\"option-label\">{{ item[props.bindLabel || 'label'] }}</span>\n\n </div>\n </ng-template>\n\n <!-- Selected items chip template (optional) -->\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n <div class=\"chips ng-values-list\">\n\n <!-- If collapsed: show only first 2 + summary -->\n <ng-container *ngIf=\"!expandedSummary\">\n @for (s of items.slice(0, 2); track s[props.bindValue || 'value']) {\n <div class=\"ng-value\">\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\n size=\"11\"></sa-icon></span>\n </div>\n }\n\n @if (items.length > 2) {\n <div class=\"ng-value summary-chip pointer\" (click)=\"toggleSummary()\">\n <span class=\"ng-value-label\">+{{ items.length - 2 }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clearRemaining(items, clear)\"><sa-icon\n icon=\"closeOutlined\" size=\"11\"></sa-icon></span>\n </div>\n }\n </ng-container>\n\n <!-- If expanded: show all items -->\n <ng-container *ngIf=\"expandedSummary\">\n @for (s of items; track s[props.bindValue || 'value']) {\n <div class=\"ng-value\">\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\n size=\"11\"></sa-icon></span>\n </div>\n }\n <!-- Collapse button -->\n <div class=\"ng-value summary-chip pointer\" (click)=\"toggleSummary()\">\n <sa-icon class=\"ng-value-label\" icon=\"leftChevronOutlined\"></sa-icon>\n </div>\n </ng-container>\n\n </div>\n </ng-template>\n\n @if(props?.footer){\n <ng-template ng-footer-tmp>\n <div class=\"dropdown-footer\">{{props?.footer?.description}}</div>\n </ng-template>\n }\n\n <ng-template ng-notfound-tmp>\n <div class=\"no-results\">\n @if (searchValue?.length > 0) {\n {{ \"\u274C No items match \\\"{{ searchValue }}\\\"\" || props?.searchNotFoundText}}\n } @else {\n {{ \"\u26A0\uFE0F No options available\" || props?.notFoundText}}\n }\n </div>\n </ng-template>\n\n <ng-template ng-loadingtext-tmp>\n <div class=\"loading\">\u23F3 Loading options...</div>\n </ng-template>\n</ng-select>", styles: ["::ng-deep .ng-select-custom .search-input-container .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding:var(--small-2px, 2px) var(--small-12px, 12px)}.ng-select-custom .ng-values-list{display:flex;flex-wrap:wrap;gap:var(--small-8px, 8px)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:none;display:flex;align-items:center;font-size:var(--small-6px, 6px)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{border-radius:var(--small-4px, 4px);background:var(--grey-50, #F2F4F7);display:flex;padding:var(--small-2px, 2px) var(--small-8px, 8px);justify-content:center;align-items:center;gap:var(--small-4px, 4px)}.ng-select-custom .option-row{display:flex;width:18.75rem;height:2.5rem;padding:var(--small-12px, 12px);align-items:center;gap:var(--small-8px, 8px);flex-shrink:0}::ng-deep .ng-select-custom .mdc-form-field.mat-internal-form-field{display:flex;gap:var(--small-8px, 8px);align-items:center}::ng-deep .ng-select-custom .mdc-checkbox__ripple{display:none}::ng-deep .ng-select-custom .checkbox-style{display:flex;align-items:center}.ng-select-custom .ng-option input[type=checkbox],.ng-select input[type=checkbox]{accent-color:var(--primary-500);vertical-align:middle;width:var(--small-14px, 14px);height:var(--small-14px, 14px)}::ng-deep .ng-select-custom.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:var(--primary-50)}.option-label{color:var(--text-high-emphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .search-input-container .mat-mdc-form-field{width:-webkit-fill-available}::ng-deep .ng-select-custom .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:var(--primary-50)}::ng-deep .ng-select-custom.ng-select .ng-arrow-wrapper .ng-arrow{display:none}::ng-deep .ng-select .ng-arrow-wrapper{width:var(--small-12px, 12px);height:var(--small-12px, 12px);display:flex;align-items:center;justify-content:center}::ng-deep .ng-select .ng-arrow-wrapper:after{content:\"\";display:inline-block;width:var(--small-8px, 8px);height:var(--small-12px, 12px);background:url(/assets/upDownChevronOutlined.svg) no-repeat center;background-size:contain}::ng-deep .ng-select-custom.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:var(--primary-500);box-shadow:none}::ng-deep .ng-select-custom.ng-select .no-results{padding:.8rem}::ng-deep .ng-select-custom.ng-select .ng-select-container{padding:0rem var(--small-12px) 0rem var(--small-12px);height:1.875rem;min-height:2.438rem;border:1px solid var(--grey-100, #EAECF0)}::ng-deep .ng-select-custom.ng-select .option-label{color:var(--text-highemphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .ng-value-label{color:var(--text-mediumemphasis, #6D6979);font-family:var(--font-family-roboto);font-size:.688rem;font-style:normal;font-weight:500;line-height:var(--small-16px, 16px);letter-spacing:.5px}::ng-deep .ng-select-custom.ng-select .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:var(--primary-500)}::ng-deep .ng-select-custom.ng-select .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:var(--small-4px, 4px);border-bottom-right-radius:var(--small-4px, 4px);border-bottom-left-radius:0}::ng-deep .ng-select-custom.ng-select.ng-select-single .ng-value-label{color:var(--text-highemphasis);font-family:var(--font-family-roboto);font-size:var(--small-14px);font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:var(--text-low-emphasis, #9B98A3);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__leading,::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__notch,::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--grey-100)}.ng-select-custom .searchIcons{color:var(--color-text-neutral-300, #757575)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i3.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i3.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i3.NgMultiLabelTemplateDirective, selector: "[ng-multi-label-tmp]" }, { kind: "directive", type: i3.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { kind: "directive", type: i3.NgFooterTemplateDirective, selector: "[ng-footer-tmp]" }, { kind: "directive", type: i3.NgNotFoundTemplateDirective, selector: "[ng-notfound-tmp]" }, { kind: "directive", type: i3.NgLoadingTextTemplateDirective, selector: "[ng-loadingtext-tmp]" }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatCheckboxModule }] }); }
90
90
  }
91
91
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: NgSelectComponent, decorators: [{
92
92
  type: Component,
@@ -106,6 +106,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
106
106
  MatDatepickerModule,
107
107
  MatNativeDateModule,
108
108
  MatCheckboxModule,
109
- ], providers: [IconService], template: "<ng-select [items]=\"filteredOptions\" [multiple]=\"props?.multiple || false\" [bindLabel]=\"props?.bindLabel || 'label'\"\n [closeOnSelect]=\"props?.closeOnselect || true\" [bindValue]=\"props?.bindValue || 'value'\"\n [placeholder]=\"props?.placeholder || 'Select Options'\" [searchable]=\"false\" [formControl]=\"formControl\"\n [clearable]=\"props?.isClearable\" [appearance]=\"props['appearance'] || 'outline'\" class=\"ng-select-custom\">\n\n <ng-template ng-header-tmp>\n <div class=\"search-input-container mat-form-field-density-5\">\n <mat-form-field [appearance]=\"props['appearance'] || 'outline'\" class=\"w-100\">\n <sa-icon icon=\"searchIcon\" class=\"searchIcons\" size=\"20\" matPrefix></sa-icon>\n <input matInput type=\"text\" name=\"menu-search-bar\" class=\"search-input searchIcons\"\n (keyup)=\"onSearch($event)\" (keydown)=\"stopBackspacePropagation($event)\"\n [placeholder]=\"props?.searchPlaceholder || 'Search'\" [(ngModel)]=\"searchValue\" />\n <sa-icon icon=\"closeOutlined\" class=\"pointer searchIcons\" size=\"15\" matSuffix\n (click)=\"clearSearch($event)\"></sa-icon>\n </mat-form-field>\n </div>\n </ng-template>\n\n <!-- Option template with a checkbox in front of each row -->\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\n <div class=\"option-row\">\n @if(props?.multiple){\n <input type=\"checkbox\" [checked]=\"item$.selected\" tabindex=\"-1\" />\n }\n <span class=\"option-label\">{{ item[props.bindLabel || 'label'] }}</span>\n\n </div>\n </ng-template>\n\n <!-- Selected items chip template (optional) -->\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n <div class=\"chips ng-values-list\">\n\n <!-- If collapsed: show only first 2 + summary -->\n <ng-container *ngIf=\"!expandedSummary\">\n @for (s of items.slice(0, 2); track s[props.bindValue || 'value']) {\n <div class=\"ng-value\">\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\n size=\"11\"></sa-icon></span>\n </div>\n }\n\n @if (items.length > 2) {\n <div class=\"ng-value summary-chip pointer\" (click)=\"toggleSummary()\">\n <span class=\"ng-value-label\">+{{ items.length - 2 }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clearRemaining(items, clear)\"><sa-icon\n icon=\"closeOutlined\" size=\"11\"></sa-icon></span>\n </div>\n }\n </ng-container>\n\n <!-- If expanded: show all items -->\n <ng-container *ngIf=\"expandedSummary\">\n @for (s of items; track s[props.bindValue || 'value']) {\n <div class=\"ng-value\">\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\n size=\"11\"></sa-icon></span>\n </div>\n }\n <!-- Collapse button -->\n <div class=\"ng-value summary-chip pointer\" (click)=\"toggleSummary()\">\n <sa-icon class=\"ng-value-label\" icon=\"leftChevronOutlined\"></sa-icon>\n </div>\n </ng-container>\n\n </div>\n </ng-template>\n\n @if(props?.footer){\n <ng-template ng-footer-tmp>\n <div class=\"dropdown-footer\">{{props?.footer?.description}}</div>\n </ng-template>\n }\n\n <ng-template ng-notfound-tmp>\n <div class=\"no-results\">\n @if (searchValue?.length > 0) {\n {{ \"\u274C No items match \\\"{{ searchValue }}\\\"\" || props?.searchNotFoundText}}\n } @else {\n {{ \"\u26A0\uFE0F No options available\" || props?.notFoundText}}\n }\n </div>\n </ng-template>\n\n <ng-template ng-loadingtext-tmp>\n <div class=\"loading\">\u23F3 Loading options...</div>\n </ng-template>\n</ng-select>", styles: ["::ng-deep .ng-select-custom .search-input-container .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding:var(--small-2px, 2px) var(--small-12px, 12px)}.ng-select-custom .ng-values-list{display:flex;flex-wrap:wrap;gap:var(--small-8px, 8px)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:none;display:flex;align-items:center;font-size:var(--small-6px, 6px)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{border-radius:var(--small-4px, 4px);background:var(--grey-50, #F2F4F7);display:flex;padding:var(--small-2px, 2px) var(--small-8px, 8px);justify-content:center;align-items:center;gap:var(--small-4px, 4px)}.ng-select-custom .option-row{display:flex;width:18.75rem;height:2.5rem;padding:var(--small-12px, 12px);align-items:center;gap:var(--small-8px, 8px);flex-shrink:0}::ng-deep .ng-select-custom .mdc-form-field.mat-internal-form-field{display:flex;gap:var(--small-8px, 8px);align-items:center}::ng-deep .ng-select-custom .mdc-checkbox__ripple{display:none}::ng-deep .ng-select-custom .checkbox-style{display:flex;align-items:center}.ng-select-custom .ng-option input[type=checkbox],.ng-select input[type=checkbox]{accent-color:var(--primary-500);vertical-align:middle;width:var(--small-14px, 14px);height:var(--small-14px, 14px)}::ng-deep .ng-select-custom.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:var(--primary-50)}.option-label{color:var(--text-high-emphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .search-input-container .mat-mdc-form-field{width:-webkit-fill-available}::ng-deep .ng-select-custom .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:var(--primary-50)}::ng-deep .ng-select-custom.ng-select .ng-arrow-wrapper .ng-arrow{display:none}::ng-deep .ng-select .ng-arrow-wrapper{width:var(--small-12px, 12px);height:var(--small-12px, 12px);display:flex;align-items:center;justify-content:center}::ng-deep .ng-select .ng-arrow-wrapper:after{content:\"\";display:inline-block;width:var(--small-8px, 8px);height:var(--small-12px, 12px);background:url(/assets/upDownChevronOutlined.svg) no-repeat center;background-size:contain}::ng-deep .ng-select-custom.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:var(--primary-500);box-shadow:none}::ng-deep .ng-select-custom.ng-select .no-results{padding:.8rem}::ng-deep .ng-select-custom.ng-select .ng-select-container{padding:0rem var(--small-12px) 0rem var(--small-12px);height:1.875rem;min-height:2.438rem;border:1px solid var(--grey-100, #EAECF0)}::ng-deep .ng-select-custom.ng-select .option-label{color:var(--text-highemphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .ng-value-label{color:var(--text-mediumemphasis, #6D6979);font-family:var(--font-family-roboto);font-size:.688rem;font-style:normal;font-weight:500;line-height:var(--small-16px, 16px);letter-spacing:.5px}::ng-deep .ng-select-custom.ng-select .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:var(--primary-500)}::ng-deep .ng-select-custom.ng-select .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:var(--small-4px, 4px);border-bottom-right-radius:var(--small-4px, 4px);border-bottom-left-radius:0}::ng-deep .ng-select-custom.ng-select.ng-select-single .ng-value-label{color:var(--text-highemphasis);font-family:var(--font-family-roboto);font-size:var(--small-14px);font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:var(--text-low-emphasis, #9B98A3);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__leading,::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__notch,::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--grey-100)}.ng-select-custom .searchIcons{color:var(--color-text-neutral-300, #757575)}\n"] }]
109
+ ], providers: [IconService], template: "<ng-select [items]=\"filteredOptions\" [multiple]=\"props?.multiple || false\" [bindLabel]=\"props?.bindLabel || 'label'\"\n [closeOnSelect]=\"props?.closeOnselect || true\" [bindValue]=\"props?.bindValue || 'value'\"\n [placeholder]=\"props?.placeholder || 'Select'\" [searchable]=\"false\" [formControl]=\"formControl\"\n [clearable]=\"props?.isClearable\" [appearance]=\"props['appearance'] || 'outline'\" class=\"ng-select-custom\">\n\n @if(!!props?.showSearchBar){\n <ng-template ng-header-tmp>\n <div class=\"search-input-container mat-form-field-density-5\">\n <mat-form-field [appearance]=\"props['appearance'] || 'outline'\" class=\"w-100\">\n <sa-icon icon=\"searchIcon\" class=\"searchIcons\" size=\"20\" matPrefix></sa-icon>\n <input matInput type=\"text\" name=\"menu-search-bar\" class=\"search-input searchIcons\"\n (keyup)=\"onSearch($event)\" (keydown)=\"stopBackspacePropagation($event)\"\n [placeholder]=\"props?.searchPlaceholder || 'Search'\" [(ngModel)]=\"searchValue\" />\n <sa-icon icon=\"closeOutlined\" class=\"pointer searchIcons\" size=\"15\" matSuffix\n (click)=\"clearSearch($event)\"></sa-icon>\n </mat-form-field>\n </div>\n </ng-template>\n }\n <!-- Option template with a checkbox in front of each row -->\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\n <div class=\"option-row\">\n @if(props?.multiple){\n <input type=\"checkbox\" [checked]=\"item$.selected\" tabindex=\"-1\" />\n }\n <span class=\"option-label\">{{ item[props.bindLabel || 'label'] }}</span>\n\n </div>\n </ng-template>\n\n <!-- Selected items chip template (optional) -->\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n <div class=\"chips ng-values-list\">\n\n <!-- If collapsed: show only first 2 + summary -->\n <ng-container *ngIf=\"!expandedSummary\">\n @for (s of items.slice(0, 2); track s[props.bindValue || 'value']) {\n <div class=\"ng-value\">\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\n size=\"11\"></sa-icon></span>\n </div>\n }\n\n @if (items.length > 2) {\n <div class=\"ng-value summary-chip pointer\" (click)=\"toggleSummary()\">\n <span class=\"ng-value-label\">+{{ items.length - 2 }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clearRemaining(items, clear)\"><sa-icon\n icon=\"closeOutlined\" size=\"11\"></sa-icon></span>\n </div>\n }\n </ng-container>\n\n <!-- If expanded: show all items -->\n <ng-container *ngIf=\"expandedSummary\">\n @for (s of items; track s[props.bindValue || 'value']) {\n <div class=\"ng-value\">\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\n size=\"11\"></sa-icon></span>\n </div>\n }\n <!-- Collapse button -->\n <div class=\"ng-value summary-chip pointer\" (click)=\"toggleSummary()\">\n <sa-icon class=\"ng-value-label\" icon=\"leftChevronOutlined\"></sa-icon>\n </div>\n </ng-container>\n\n </div>\n </ng-template>\n\n @if(props?.footer){\n <ng-template ng-footer-tmp>\n <div class=\"dropdown-footer\">{{props?.footer?.description}}</div>\n </ng-template>\n }\n\n <ng-template ng-notfound-tmp>\n <div class=\"no-results\">\n @if (searchValue?.length > 0) {\n {{ \"\u274C No items match \\\"{{ searchValue }}\\\"\" || props?.searchNotFoundText}}\n } @else {\n {{ \"\u26A0\uFE0F No options available\" || props?.notFoundText}}\n }\n </div>\n </ng-template>\n\n <ng-template ng-loadingtext-tmp>\n <div class=\"loading\">\u23F3 Loading options...</div>\n </ng-template>\n</ng-select>", styles: ["::ng-deep .ng-select-custom .search-input-container .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding:var(--small-2px, 2px) var(--small-12px, 12px)}.ng-select-custom .ng-values-list{display:flex;flex-wrap:wrap;gap:var(--small-8px, 8px)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:none;display:flex;align-items:center;font-size:var(--small-6px, 6px)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{border-radius:var(--small-4px, 4px);background:var(--grey-50, #F2F4F7);display:flex;padding:var(--small-2px, 2px) var(--small-8px, 8px);justify-content:center;align-items:center;gap:var(--small-4px, 4px)}.ng-select-custom .option-row{display:flex;width:18.75rem;height:2.5rem;padding:var(--small-12px, 12px);align-items:center;gap:var(--small-8px, 8px);flex-shrink:0}::ng-deep .ng-select-custom .mdc-form-field.mat-internal-form-field{display:flex;gap:var(--small-8px, 8px);align-items:center}::ng-deep .ng-select-custom .mdc-checkbox__ripple{display:none}::ng-deep .ng-select-custom .checkbox-style{display:flex;align-items:center}.ng-select-custom .ng-option input[type=checkbox],.ng-select input[type=checkbox]{accent-color:var(--primary-500);vertical-align:middle;width:var(--small-14px, 14px);height:var(--small-14px, 14px)}::ng-deep .ng-select-custom.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:var(--primary-50)}.option-label{color:var(--text-high-emphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .search-input-container .mat-mdc-form-field{width:-webkit-fill-available}::ng-deep .ng-select-custom .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:var(--primary-50)}::ng-deep .ng-select-custom.ng-select .ng-arrow-wrapper .ng-arrow{display:none}::ng-deep .ng-select .ng-arrow-wrapper{width:var(--small-12px, 12px);height:var(--small-12px, 12px);display:flex;align-items:center;justify-content:center}::ng-deep .ng-select .ng-arrow-wrapper:after{content:\"\";display:inline-block;width:var(--small-8px, 8px);height:var(--small-12px, 12px);background:url(/assets/upDownChevronOutlined.svg) no-repeat center;background-size:contain}::ng-deep .ng-select-custom.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:var(--primary-500);box-shadow:none}::ng-deep .ng-select-custom.ng-select .no-results{padding:.8rem}::ng-deep .ng-select-custom.ng-select .ng-select-container{padding:0rem var(--small-12px) 0rem var(--small-12px);height:1.875rem;min-height:2.438rem;border:1px solid var(--grey-100, #EAECF0)}::ng-deep .ng-select-custom.ng-select .option-label{color:var(--text-highemphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .ng-value-label{color:var(--text-mediumemphasis, #6D6979);font-family:var(--font-family-roboto);font-size:.688rem;font-style:normal;font-weight:500;line-height:var(--small-16px, 16px);letter-spacing:.5px}::ng-deep .ng-select-custom.ng-select .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:var(--primary-500)}::ng-deep .ng-select-custom.ng-select .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:var(--small-4px, 4px);border-bottom-right-radius:var(--small-4px, 4px);border-bottom-left-radius:0}::ng-deep .ng-select-custom.ng-select.ng-select-single .ng-value-label{color:var(--text-highemphasis);font-family:var(--font-family-roboto);font-size:var(--small-14px);font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:var(--text-low-emphasis, #9B98A3);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__leading,::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__notch,::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--grey-100)}.ng-select-custom .searchIcons{color:var(--color-text-neutral-300, #757575)}\n"] }]
110
110
  }] });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvZHJvcGRvd24vbmctc2VsZWN0L25nLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Ryb3Bkb3duL25nLXNlbGVjdC9uZy1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVyxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlD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LDJlQUNsQixjQUFjLDBXQUNkLGFBQWEsOEJBQ2IsZUFBZSw4QkFDZixnQkFBZ0IsOEJBQ2hCLHFCQUFxQiw4QkFDckIsbUJBQW1CLDhCQUNuQixtQkFBbUIsOEJBQ25CLGlCQUFpQjs7MkZBTVIsaUJBQWlCO2tCQXhCN0IsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixXQUFXO3dCQUNYLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixpQkFBaUI7cUJBQ2xCLGFBQ1UsQ0FBQyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIERvQ2hlY2sgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1seU1vZHVsZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgRmllbGRUeXBlLCBGaWVsZFR5cGVDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IE5nU2VsZWN0TW9kdWxlIH0gZnJvbSAnQG5nLXNlbGVjdC9uZy1zZWxlY3QnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9pY29uL2ljb24uc2VydmljZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgTWF0TmF0aXZlRGF0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NhLW5nLXNlbGVjdCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBGb3JtbHlNb2R1bGUsXG4gICAgTmdTZWxlY3RNb2R1bGUsXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNYXRCdXR0b25Ub2dnbGVNb2R1bGUsXG4gICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcbiAgICBNYXROYXRpdmVEYXRlTW9kdWxlLFxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICBdLFxuICBwcm92aWRlcnM6IFtJY29uU2VydmljZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9uZy1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbmctc2VsZWN0LmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIE5nU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZzxhbnk+PiBpbXBsZW1lbnRzIERvQ2hlY2sge1xuICBmaWx0ZXJlZE9wdGlvbnM6IGFueVtdO1xuICBzZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX29wdGlvbnM6IGFueVtdO1xuXG4gIG9uU2VhcmNoKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hWYWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBiaW5kTGFiZWwgPSB0aGlzLnByb3BzLmJpbmRMYWJlbCB8fCAnbGFiZWwnO1xuXG4gICAgaWYgKCFzZWFyY2hWYWx1ZSkge1xuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4uKHRoaXMuZmllbGQucHJvcHM/Lm9wdGlvbnMgfHwgW10pXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9ICh0aGlzLmZpZWxkLnByb3BzPy5vcHRpb25zIHx8IFtdKS5maWx0ZXIob3B0ID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gb3B0Py5bYmluZExhYmVsXSA/PyAnJztcbiAgICAgIHJldHVybiBTdHJpbmcobGFiZWwpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMucHJvcHMub3B0aW9ucztcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFsuLi4odGhpcy5wcm9wcy5vcHRpb25zIHx8IFtdKV07XG5cbiAgICAvLyBJZiBhIGRlZmF1bHQgdmFsdWUgaXMgcHJvdmlkZWQgaW4gcHJvcHMgYW5kIHRoZSBmb3JtIGNvbnRyb2wgaGFzIG5vIHZhbHVlIHlldCwgc2V0IGl0XG4gICAgY29uc3QgZGVmYXVsdFZhbCA9IHRoaXMucHJvcHM/LmRlZmF1bHRWYWx1ZTtcbiAgICBpZiAoKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgPT09IG51bGwgfHwgdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA9PT0gdW5kZWZpbmVkKSAmJiBkZWZhdWx0VmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoZGVmYXVsdFZhbCk7XG4gICAgfVxuICB9XG5cbiAgbmdEb0NoZWNrKCkge1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMgIT09IHRoaXMuX29wdGlvbnMpIHtcbiAgICAgIHRoaXMuX29wdGlvbnMgPSB0aGlzLnByb3BzLm9wdGlvbnM7XG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFsuLi4odGhpcy5fb3B0aW9ucyB8fCBbXSldO1xuICAgIH1cbiAgfVxuXG5cblxuICAvLyAoT3B0aW9uYWwpIFNlbGVjdC9EZXNlbGVjdCBhbGwgaGVscGVyc1xuICBhbGxTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcz8uc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSB0aGlzLmZpZWxkLnByb3BzPy5vcHRpb25zLmxlbmd0aDtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdEFsbCgpIHtcbiAgICBjb25zdCBiaW5kVmFsdWUgPSB0aGlzLnByb3BzLmJpbmRWYWx1ZSB8fCAndmFsdWUnO1xuICAgIGlmICh0aGlzLmFsbFNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMucHJvcHMuc2VsZWN0ZWRWYWx1ZXMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RlZFZhbHVlcyA9ICh0aGlzLmZpZWxkLnByb3BzPy5vcHRpb25zIHx8IFtdKS5tYXAobyA9PiBvW2JpbmRWYWx1ZV0pO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyUmVtYWluaW5nKGl0ZW1zOiBhbnlbXSwgY2xlYXI6IChpdGVtOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAvLyByZW1vdmUgb25seSB0aGUgaXRlbXMgYWZ0ZXIgdGhlIGZpcnN0IHR3b1xuICAgIGl0ZW1zLnNsaWNlKDIpLmZvckVhY2goaXRlbSA9PiBjbGVhcihpdGVtKSk7XG4gIH1cbiAgZXhwYW5kZWRTdW1tYXJ5ID0gZmFsc2U7XG5cbiAgdG9nZ2xlU3VtbWFyeSgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZGVkU3VtbWFyeSA9ICF0aGlzLmV4cGFuZGVkU3VtbWFyeTtcbiAgfVxuXG4gIC8vIFRoaXMgbWV0aG9kIHdpbGwgc3RvcCB0aGUgZXZlbnQgZnJvbSBidWJibGluZyB1cFxuICBzdG9wQmFja3NwYWNlUHJvcGFnYXRpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyB8fCBldmVudC5rZXlDb2RlID09PSA4KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclNlYXJjaChldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4udGhpcy5maWVsZC5wcm9wcz8ub3B0aW9uc107XG4gIH1cbn1cbiIsIjxuZy1zZWxlY3QgW2l0ZW1zXT1cImZpbHRlcmVkT3B0aW9uc1wiIFttdWx0aXBsZV09XCJwcm9wcz8ubXVsdGlwbGUgfHwgZmFsc2VcIiBbYmluZExhYmVsXT1cInByb3BzPy5iaW5kTGFiZWwgfHwgJ2xhYmVsJ1wiXG4gICAgW2Nsb3NlT25TZWxlY3RdPVwicHJvcHM/LmNsb3NlT25zZWxlY3QgfHwgdHJ1ZVwiIFtiaW5kVmFsdWVdPVwicHJvcHM/LmJpbmRWYWx1ZSB8fCAndmFsdWUnXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwicHJvcHM/LnBsYWNlaG9sZGVyIHx8ICdTZWxlY3QgT3B0aW9ucydcIiBbc2VhcmNoYWJsZV09XCJmYWxzZVwiIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgW2NsZWFyYWJsZV09XCJwcm9wcz8uaXNDbGVhcmFibGVcIiBbYXBwZWFyYW5jZV09XCJwcm9wc1snYXBwZWFyYW5jZSddIHx8ICdvdXRsaW5lJ1wiIGNsYXNzPVwibmctc2VsZWN0LWN1c3RvbVwiPlxuXG4gICAgPG5nLXRlbXBsYXRlIG5nLWhlYWRlci10bXA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtY29udGFpbmVyIG1hdC1mb3JtLWZpZWxkLWRlbnNpdHktNVwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIFthcHBlYXJhbmNlXT1cInByb3BzWydhcHBlYXJhbmNlJ10gfHwgJ291dGxpbmUnXCIgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgICAgIDxzYS1pY29uIGljb249XCJzZWFyY2hJY29uXCIgY2xhc3M9XCJzZWFyY2hJY29uc1wiIHNpemU9XCIyMFwiIG1hdFByZWZpeD48L3NhLWljb24+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm1lbnUtc2VhcmNoLWJhclwiIGNsYXNzPVwic2VhcmNoLWlucHV0IHNlYXJjaEljb25zXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uU2VhcmNoKCRldmVudClcIiAoa2V5ZG93bik9XCJzdG9wQmFja3NwYWNlUHJvcGFnYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwcm9wcz8uc2VhcmNoUGxhY2Vob2xkZXIgfHwgJ1NlYXJjaCdcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFZhbHVlXCIgLz5cbiAgICAgICAgICAgICAgICA8c2EtaWNvbiBpY29uPVwiY2xvc2VPdXRsaW5lZFwiIGNsYXNzPVwicG9pbnRlciBzZWFyY2hJY29uc1wiIHNpemU9XCIxNVwiIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTZWFyY2goJGV2ZW50KVwiPjwvc2EtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIE9wdGlvbiB0ZW1wbGF0ZSB3aXRoIGEgY2hlY2tib3ggaW4gZnJvbnQgb2YgZWFjaCByb3cgLS0+XG4gICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWl0ZW0kPVwiaXRlbSRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1yb3dcIj5cbiAgICAgICAgICAgIEBpZihwcm9wcz8ubXVsdGlwbGUpe1xuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cIml0ZW0kLnNlbGVjdGVkXCIgdGFiaW5kZXg9XCItMVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbi1sYWJlbFwiPnt7IGl0ZW1bcHJvcHMuYmluZExhYmVsIHx8ICdsYWJlbCddIH19PC9zcGFuPlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIFNlbGVjdGVkIGl0ZW1zIGNoaXAgdGVtcGxhdGUgKG9wdGlvbmFsKSAtLT5cbiAgICA8bmctdGVtcGxhdGUgbmctbXVsdGktbGFiZWwtdG1wIGxldC1pdGVtcz1cIml0ZW1zXCIgbGV0LWNsZWFyPVwiY2xlYXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBzIG5nLXZhbHVlcy1saXN0XCI+XG5cbiAgICAgICAgICAgIDwhLS0gSWYgY29sbGFwc2VkOiBzaG93IG9ubHkgZmlyc3QgMiArIHN1bW1hcnkgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWV4cGFuZGVkU3VtbWFyeVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKHMgb2YgaXRlbXMuc2xpY2UoMCwgMik7IHRyYWNrIHNbcHJvcHMuYmluZFZhbHVlIHx8ICd2YWx1ZSddKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5nLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmctdmFsdWUtbGFiZWxcIj57eyBzW3Byb3BzLmJpbmRMYWJlbCB8fCAnbGFiZWwnXSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZy12YWx1ZS1pY29uIHJpZ2h0XCIgKGNsaWNrKT1cImNsZWFyKHMpXCI+PHNhLWljb24gaWNvbj1cImNsb3NlT3V0bGluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCIxMVwiPjwvc2EtaWNvbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGlmIChpdGVtcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5nLXZhbHVlIHN1bW1hcnktY2hpcCBwb2ludGVyXCIgKGNsaWNrKT1cInRvZ2dsZVN1bW1hcnkoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5nLXZhbHVlLWxhYmVsXCI+K3t7IGl0ZW1zLmxlbmd0aCAtIDIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmctdmFsdWUtaWNvbiByaWdodFwiIChjbGljayk9XCJjbGVhclJlbWFpbmluZyhpdGVtcywgY2xlYXIpXCI+PHNhLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwiY2xvc2VPdXRsaW5lZFwiIHNpemU9XCIxMVwiPjwvc2EtaWNvbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gSWYgZXhwYW5kZWQ6IHNob3cgYWxsIGl0ZW1zIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImV4cGFuZGVkU3VtbWFyeVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKHMgb2YgaXRlbXM7IHRyYWNrIHNbcHJvcHMuYmluZFZhbHVlIHx8ICd2YWx1ZSddKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5nLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmctdmFsdWUtbGFiZWxcIj57eyBzW3Byb3BzLmJpbmRMYWJlbCB8fCAnbGFiZWwnXSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZy12YWx1ZS1pY29uIHJpZ2h0XCIgKGNsaWNrKT1cImNsZWFyKHMpXCI+PHNhLWljb24gaWNvbj1cImNsb3NlT3V0bGluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCIxMVwiPjwvc2EtaWNvbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwhLS0gQ29sbGFwc2UgYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZy12YWx1ZSBzdW1tYXJ5LWNoaXAgcG9pbnRlclwiIChjbGljayk9XCJ0b2dnbGVTdW1tYXJ5KClcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNhLWljb24gY2xhc3M9XCJuZy12YWx1ZS1sYWJlbFwiIGljb249XCJsZWZ0Q2hldnJvbk91dGxpbmVkXCI+PC9zYS1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIEBpZihwcm9wcz8uZm9vdGVyKXtcbiAgICA8bmctdGVtcGxhdGUgbmctZm9vdGVyLXRtcD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWZvb3RlclwiPnt7cHJvcHM/LmZvb3Rlcj8uZGVzY3JpcHRpb259fTwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgfVxuXG4gICAgPG5nLXRlbXBsYXRlIG5nLW5vdGZvdW5kLXRtcD5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5vLXJlc3VsdHNcIj5cbiAgICAgICAgICAgIEBpZiAoc2VhcmNoVmFsdWU/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHt7IFwi4p2MIE5vIGl0ZW1zIG1hdGNoIFxcXCJ7eyBzZWFyY2hWYWx1ZSB9fVxcXCJcIiB8fCBwcm9wcz8uc2VhcmNoTm90Rm91bmRUZXh0fX1cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAge3sgXCLimqDvuI8gTm8gb3B0aW9ucyBhdmFpbGFibGVcIiB8fCBwcm9wcz8ubm90Rm91bmRUZXh0fX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSBuZy1sb2FkaW5ndGV4dC10bXA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nXCI+4o+zIExvYWRpbmcgb3B0aW9ucy4uLjwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG48L25nLXNlbGVjdD4iXX0=
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvZHJvcGRvd24vbmctc2VsZWN0L25nLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Ryb3Bkb3duL25nLXNlbGVjdC9uZy1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVyxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlD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LDJlQUNsQixjQUFjLDBXQUNkLGFBQWEsOEJBQ2IsZUFBZSw4QkFDZixnQkFBZ0IsOEJBQ2hCLHFCQUFxQiw4QkFDckIsbUJBQW1CLDhCQUNuQixtQkFBbUIsOEJBQ25CLGlCQUFpQjs7MkZBTVIsaUJBQWlCO2tCQXhCN0IsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixXQUFXO3dCQUNYLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixpQkFBaUI7cUJBQ2xCLGFBQ1UsQ0FBQyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIERvQ2hlY2sgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1seU1vZHVsZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgRmllbGRUeXBlLCBGaWVsZFR5cGVDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IE5nU2VsZWN0TW9kdWxlIH0gZnJvbSAnQG5nLXNlbGVjdC9uZy1zZWxlY3QnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9pY29uL2ljb24uc2VydmljZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgTWF0TmF0aXZlRGF0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NhLW5nLXNlbGVjdCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBGb3JtbHlNb2R1bGUsXG4gICAgTmdTZWxlY3RNb2R1bGUsXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNYXRCdXR0b25Ub2dnbGVNb2R1bGUsXG4gICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcbiAgICBNYXROYXRpdmVEYXRlTW9kdWxlLFxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICBdLFxuICBwcm92aWRlcnM6IFtJY29uU2VydmljZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9uZy1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbmctc2VsZWN0LmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIE5nU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZzxhbnk+PiBpbXBsZW1lbnRzIERvQ2hlY2sge1xuICBmaWx0ZXJlZE9wdGlvbnM6IGFueVtdO1xuICBzZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX29wdGlvbnM6IGFueVtdO1xuXG4gIG9uU2VhcmNoKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hWYWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBiaW5kTGFiZWwgPSB0aGlzLnByb3BzLmJpbmRMYWJlbCB8fCAnbGFiZWwnO1xuXG4gICAgaWYgKCFzZWFyY2hWYWx1ZSkge1xuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4uKHRoaXMuZmllbGQucHJvcHM/Lm9wdGlvbnMgfHwgW10pXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9ICh0aGlzLmZpZWxkLnByb3BzPy5vcHRpb25zIHx8IFtdKS5maWx0ZXIob3B0ID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gb3B0Py5bYmluZExhYmVsXSA/PyAnJztcbiAgICAgIHJldHVybiBTdHJpbmcobGFiZWwpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMucHJvcHMub3B0aW9ucztcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFsuLi4odGhpcy5wcm9wcy5vcHRpb25zIHx8IFtdKV07XG5cbiAgICAvLyBJZiBhIGRlZmF1bHQgdmFsdWUgaXMgcHJvdmlkZWQgaW4gcHJvcHMgYW5kIHRoZSBmb3JtIGNvbnRyb2wgaGFzIG5vIHZhbHVlIHlldCwgc2V0IGl0XG4gICAgY29uc3QgZGVmYXVsdFZhbCA9IHRoaXMucHJvcHM/LmRlZmF1bHRWYWx1ZTtcbiAgICBpZiAoKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgPT09IG51bGwgfHwgdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA9PT0gdW5kZWZpbmVkKSAmJiBkZWZhdWx0VmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoZGVmYXVsdFZhbCk7XG4gICAgfVxuICB9XG5cbiAgbmdEb0NoZWNrKCkge1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMgIT09IHRoaXMuX29wdGlvbnMpIHtcbiAgICAgIHRoaXMuX29wdGlvbnMgPSB0aGlzLnByb3BzLm9wdGlvbnM7XG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFsuLi4odGhpcy5fb3B0aW9ucyB8fCBbXSldO1xuICAgIH1cbiAgfVxuXG5cblxuICAvLyAoT3B0aW9uYWwpIFNlbGVjdC9EZXNlbGVjdCBhbGwgaGVscGVyc1xuICBhbGxTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcz8uc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSB0aGlzLmZpZWxkLnByb3BzPy5vcHRpb25zLmxlbmd0aDtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdEFsbCgpIHtcbiAgICBjb25zdCBiaW5kVmFsdWUgPSB0aGlzLnByb3BzLmJpbmRWYWx1ZSB8fCAndmFsdWUnO1xuICAgIGlmICh0aGlzLmFsbFNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMucHJvcHMuc2VsZWN0ZWRWYWx1ZXMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RlZFZhbHVlcyA9ICh0aGlzLmZpZWxkLnByb3BzPy5vcHRpb25zIHx8IFtdKS5tYXAobyA9PiBvW2JpbmRWYWx1ZV0pO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyUmVtYWluaW5nKGl0ZW1zOiBhbnlbXSwgY2xlYXI6IChpdGVtOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAvLyByZW1vdmUgb25seSB0aGUgaXRlbXMgYWZ0ZXIgdGhlIGZpcnN0IHR3b1xuICAgIGl0ZW1zLnNsaWNlKDIpLmZvckVhY2goaXRlbSA9PiBjbGVhcihpdGVtKSk7XG4gIH1cbiAgZXhwYW5kZWRTdW1tYXJ5ID0gZmFsc2U7XG5cbiAgdG9nZ2xlU3VtbWFyeSgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZGVkU3VtbWFyeSA9ICF0aGlzLmV4cGFuZGVkU3VtbWFyeTtcbiAgfVxuXG4gIC8vIFRoaXMgbWV0aG9kIHdpbGwgc3RvcCB0aGUgZXZlbnQgZnJvbSBidWJibGluZyB1cFxuICBzdG9wQmFja3NwYWNlUHJvcGFnYXRpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyB8fCBldmVudC5rZXlDb2RlID09PSA4KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclNlYXJjaChldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4udGhpcy5maWVsZC5wcm9wcz8ub3B0aW9uc107XG4gIH1cbn1cbiIsIjxuZy1zZWxlY3QgW2l0ZW1zXT1cImZpbHRlcmVkT3B0aW9uc1wiIFttdWx0aXBsZV09XCJwcm9wcz8ubXVsdGlwbGUgfHwgZmFsc2VcIiBbYmluZExhYmVsXT1cInByb3BzPy5iaW5kTGFiZWwgfHwgJ2xhYmVsJ1wiXG4gICAgW2Nsb3NlT25TZWxlY3RdPVwicHJvcHM/LmNsb3NlT25zZWxlY3QgfHwgdHJ1ZVwiIFtiaW5kVmFsdWVdPVwicHJvcHM/LmJpbmRWYWx1ZSB8fCAndmFsdWUnXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwicHJvcHM/LnBsYWNlaG9sZGVyIHx8ICdTZWxlY3QnXCIgW3NlYXJjaGFibGVdPVwiZmFsc2VcIiBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgIFtjbGVhcmFibGVdPVwicHJvcHM/LmlzQ2xlYXJhYmxlXCIgW2FwcGVhcmFuY2VdPVwicHJvcHNbJ2FwcGVhcmFuY2UnXSB8fCAnb3V0bGluZSdcIiBjbGFzcz1cIm5nLXNlbGVjdC1jdXN0b21cIj5cblxuICAgIEBpZighIXByb3BzPy5zaG93U2VhcmNoQmFyKXtcbiAgICA8bmctdGVtcGxhdGUgbmctaGVhZGVyLXRtcD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dC1jb250YWluZXIgbWF0LWZvcm0tZmllbGQtZGVuc2l0eS01XCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgW2FwcGVhcmFuY2VdPVwicHJvcHNbJ2FwcGVhcmFuY2UnXSB8fCAnb3V0bGluZSdcIiBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICAgICAgPHNhLWljb24gaWNvbj1cInNlYXJjaEljb25cIiBjbGFzcz1cInNlYXJjaEljb25zXCIgc2l6ZT1cIjIwXCIgbWF0UHJlZml4Pjwvc2EtaWNvbj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibWVudS1zZWFyY2gtYmFyXCIgY2xhc3M9XCJzZWFyY2gtaW5wdXQgc2VhcmNoSWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwib25TZWFyY2goJGV2ZW50KVwiIChrZXlkb3duKT1cInN0b3BCYWNrc3BhY2VQcm9wYWdhdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInByb3BzPy5zZWFyY2hQbGFjZWhvbGRlciB8fCAnU2VhcmNoJ1wiIFsobmdNb2RlbCldPVwic2VhcmNoVmFsdWVcIiAvPlxuICAgICAgICAgICAgICAgIDxzYS1pY29uIGljb249XCJjbG9zZU91dGxpbmVkXCIgY2xhc3M9XCJwb2ludGVyIHNlYXJjaEljb25zXCIgc2l6ZT1cIjE1XCIgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNlYXJjaCgkZXZlbnQpXCI+PC9zYS1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICB9XG4gICAgPCEtLSBPcHRpb24gdGVtcGxhdGUgd2l0aCBhIGNoZWNrYm94IGluIGZyb250IG9mIGVhY2ggcm93IC0tPlxuICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pdGVtJD1cIml0ZW0kXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tcm93XCI+XG4gICAgICAgICAgICBAaWYocHJvcHM/Lm11bHRpcGxlKXtcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJpdGVtJC5zZWxlY3RlZFwiIHRhYmluZGV4PVwiLTFcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcHRpb24tbGFiZWxcIj57eyBpdGVtW3Byb3BzLmJpbmRMYWJlbCB8fCAnbGFiZWwnXSB9fTwvc3Bhbj5cblxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSBTZWxlY3RlZCBpdGVtcyBjaGlwIHRlbXBsYXRlIChvcHRpb25hbCkgLS0+XG4gICAgPG5nLXRlbXBsYXRlIG5nLW11bHRpLWxhYmVsLXRtcCBsZXQtaXRlbXM9XCJpdGVtc1wiIGxldC1jbGVhcj1cImNsZWFyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwcyBuZy12YWx1ZXMtbGlzdFwiPlxuXG4gICAgICAgICAgICA8IS0tIElmIGNvbGxhcHNlZDogc2hvdyBvbmx5IGZpcnN0IDIgKyBzdW1tYXJ5IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFleHBhbmRlZFN1bW1hcnlcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChzIG9mIGl0ZW1zLnNsaWNlKDAsIDIpOyB0cmFjayBzW3Byb3BzLmJpbmRWYWx1ZSB8fCAndmFsdWUnXSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZy12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5nLXZhbHVlLWxhYmVsXCI+e3sgc1twcm9wcy5iaW5kTGFiZWwgfHwgJ2xhYmVsJ10gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmctdmFsdWUtaWNvbiByaWdodFwiIChjbGljayk9XCJjbGVhcihzKVwiPjxzYS1pY29uIGljb249XCJjbG9zZU91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwiMTFcIj48L3NhLWljb24+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBpZiAoaXRlbXMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZy12YWx1ZSBzdW1tYXJ5LWNoaXAgcG9pbnRlclwiIChjbGljayk9XCJ0b2dnbGVTdW1tYXJ5KClcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZy12YWx1ZS1sYWJlbFwiPit7eyBpdGVtcy5sZW5ndGggLSAyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5nLXZhbHVlLWljb24gcmlnaHRcIiAoY2xpY2spPVwiY2xlYXJSZW1haW5pbmcoaXRlbXMsIGNsZWFyKVwiPjxzYS1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImNsb3NlT3V0bGluZWRcIiBzaXplPVwiMTFcIj48L3NhLWljb24+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tIElmIGV4cGFuZGVkOiBzaG93IGFsbCBpdGVtcyAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJleHBhbmRlZFN1bW1hcnlcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChzIG9mIGl0ZW1zOyB0cmFjayBzW3Byb3BzLmJpbmRWYWx1ZSB8fCAndmFsdWUnXSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZy12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5nLXZhbHVlLWxhYmVsXCI+e3sgc1twcm9wcy5iaW5kTGFiZWwgfHwgJ2xhYmVsJ10gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmctdmFsdWUtaWNvbiByaWdodFwiIChjbGljayk9XCJjbGVhcihzKVwiPjxzYS1pY29uIGljb249XCJjbG9zZU91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwiMTFcIj48L3NhLWljb24+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8IS0tIENvbGxhcHNlIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmctdmFsdWUgc3VtbWFyeS1jaGlwIHBvaW50ZXJcIiAoY2xpY2spPVwidG9nZ2xlU3VtbWFyeSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzYS1pY29uIGNsYXNzPVwibmctdmFsdWUtbGFiZWxcIiBpY29uPVwibGVmdENoZXZyb25PdXRsaW5lZFwiPjwvc2EtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICBAaWYocHJvcHM/LmZvb3Rlcil7XG4gICAgPG5nLXRlbXBsYXRlIG5nLWZvb3Rlci10bXA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1mb290ZXJcIj57e3Byb3BzPy5mb290ZXI/LmRlc2NyaXB0aW9ufX08L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIH1cblxuICAgIDxuZy10ZW1wbGF0ZSBuZy1ub3Rmb3VuZC10bXA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuby1yZXN1bHRzXCI+XG4gICAgICAgICAgICBAaWYgKHNlYXJjaFZhbHVlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB7eyBcIuKdjCBObyBpdGVtcyBtYXRjaCBcXFwie3sgc2VhcmNoVmFsdWUgfX1cXFwiXCIgfHwgcHJvcHM/LnNlYXJjaE5vdEZvdW5kVGV4dH19XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIHt7IFwi4pqg77iPIE5vIG9wdGlvbnMgYXZhaWxhYmxlXCIgfHwgcHJvcHM/Lm5vdEZvdW5kVGV4dH19XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgbmctbG9hZGluZ3RleHQtdG1wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZ1wiPuKPsyBMb2FkaW5nIG9wdGlvbnMuLi48L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy1zZWxlY3Q+Il19
@@ -10,27 +10,17 @@ import { MatFormFieldModule } from '@angular/material/form-field';
10
10
  import { MatSelectModule } from '@angular/material/select';
11
11
  import { MatOptionModule } from '@angular/material/core';
12
12
  import { MatIconModule } from '@angular/material/icon';
13
+ import { trigger, style, transition, animate } from '@angular/animations';
13
14
  import * as i0 from "@angular/core";
14
15
  import * as i1 from "@ngx-formly/core";
15
16
  export class QueryBuilderFormlyComponent extends FieldArrayType {
16
- constructor() {
17
- super(...arguments);
18
- // reset(): void {
19
- // this.formControl.reset();
20
- // }
21
- /**
22
- * Duplicates the row at the given index.
23
- * A deep–clone of that row’s model is inserted right after the original row.
24
- */
25
- this.copied = false;
26
- }
27
17
  ngOnInit() {
28
18
  }
29
19
  getRowCondition(index) {
30
20
  if (index === 0)
31
21
  return 'and';
32
22
  const ruleGroup = this.formControl.at(index);
33
- return ruleGroup.get('condition')?.value || 'and';
23
+ return ruleGroup.get('logicalOperator')?.value || 'and';
34
24
  }
35
25
  /**
36
26
  * Sets the condition for a specific row
@@ -39,9 +29,9 @@ export class QueryBuilderFormlyComponent extends FieldArrayType {
39
29
  */
40
30
  setRowCondition(index, condition) {
41
31
  if (index === 0)
42
- return; // First row doesn't have a condition
32
+ return; // First row doesn't have a logical operator
43
33
  const ruleGroup = this.formControl.at(index);
44
- ruleGroup.get('condition')?.setValue(condition);
34
+ ruleGroup.get('logicalOperator')?.setValue(condition);
45
35
  }
46
36
  copyRule() {
47
37
  }
@@ -66,117 +56,121 @@ export class QueryBuilderFormlyComponent extends FieldArrayType {
66
56
  }
67
57
  return undefined;
68
58
  }
59
+ // reset(): void {
60
+ // this.formControl.reset();
61
+ // }
62
+ /**
63
+ * Duplicates the row at the given index.
64
+ * A deep–clone of that row’s model is inserted right after the original row.
65
+ */
69
66
  copy(index) {
70
67
  const rowModel = this.formControl.at(index)?.value;
71
68
  if (!rowModel)
72
69
  return;
73
- // Deep-clone model
74
- const cloned = JSON.parse(JSON.stringify(rowModel));
75
- // Insert row after the current one
76
- this.add(index + 1, cloned);
77
- // 👇 Force Formly to refresh the dynamic field
78
- const newRow = this.formControl.at(index + 1);
79
- const attr = newRow?.get('attribute')?.value;
80
- if (attr) {
81
- const attrCtrl = newRow?.get('attribute');
82
- attrCtrl.setValue(attrCtrl.value);
83
- // Re-trigger field type rebuild for filterValue
84
- const filterValueField = this.field.fieldGroup[index + 1].fieldGroup
85
- .find(f => f.key === 'filterValue');
86
- if (filterValueField) {
87
- const typeMap = {
88
- SELECT: 'sa-ng-select',
89
- STRING: 'sa-input',
90
- NUMBER: 'sa-input',
91
- DATE: 'sa-date-picker',
92
- CURRENCY: 'sa-currency-input',
93
- BOOLEAN: 'sa-ng-select',
94
- };
95
- const newType = typeMap[attr.filterType] || 'sa-input';
96
- filterValueField.type = newType;
97
- filterValueField.props = {
98
- ...this.createFieldProps(attr.filterType),
99
- hasDynamicType: true,
100
- disabled: false, // initial
101
- attribute: attr,
102
- };
103
- // 🔄 Notify Formly of type change
104
- filterValueField.options?.fieldChanges?.next({
105
- type: 'type',
106
- field: filterValueField,
107
- value: newType,
108
- });
109
- }
70
+ const clonedModel = JSON.parse(JSON.stringify(rowModel));
71
+ // Carry the value over to the new row so the onInit hook can restore it.
72
+ if (clonedModel.filterValue !== undefined) {
73
+ clonedModel._copiedValue = clonedModel.filterValue;
110
74
  }
111
- }
112
- createFieldProps(type) {
113
- switch (type) {
114
- case 'SELECT':
115
- return {
116
- placeholder: 'Select',
117
- multiple: false,
118
- bindLabel: 'label',
119
- bindValue: 'value',
120
- appearance: 'outline',
121
- isClearable: true,
122
- isSearchable: false,
123
- closeOnselect: true,
124
- required: true,
125
- disabled: false,
126
- };
127
- case 'STRING':
128
- return {
129
- placeholder: 'Enter value',
130
- appearance: 'outline',
131
- type: 'text'
132
- };
133
- case 'NUMBER':
134
- return {
135
- placeholder: 'Enter value',
136
- appearance: 'outline',
137
- type: 'number'
138
- };
139
- case 'DATE':
140
- return {
141
- placeholder: 'Select date',
142
- appearance: 'outline',
143
- type: 'date'
144
- };
145
- case 'CURRENCY':
146
- return {
147
- placeholder: 'Enter value',
148
- appearance: 'outline',
149
- };
150
- case 'BOOLEAN':
151
- return {
152
- placeholder: 'Enter value',
153
- appearance: 'outline',
154
- type: 'boolean',
155
- options: [
156
- { value: true, label: 'True' },
157
- { value: false, label: 'False' },
158
- ],
159
- bindLabel: 'label',
160
- bindValue: 'value',
161
- disabled: false,
162
- };
163
- default:
164
- return {
165
- placeholder: 'Enter value',
166
- appearance: 'outline',
167
- };
75
+ // If copying the first row (index 0), the new row (index 1) should have a logical operator
76
+ // Set default logical operator to 'and' for the new row
77
+ if (index === 0) {
78
+ clonedModel.logicalOperator = 'and';
168
79
  }
80
+ this.add(index + 1, clonedModel);
81
+ // Force rebuild of the filterValue field by triggering attribute change
82
+ setTimeout(() => {
83
+ const newRowForm = this.formControl.at(index + 1);
84
+ const attrCtrl = newRowForm?.get('attribute');
85
+ const filterValueCtrl = newRowForm?.get('filterValue');
86
+ if (attrCtrl && filterValueCtrl && clonedModel.attribute) {
87
+ // Store the copied value in the form model before triggering rebuild
88
+ const copiedValue = clonedModel._copiedValue;
89
+ // Temporarily clear the attribute to force a change event
90
+ attrCtrl.setValue(null, { emitEvent: false });
91
+ // Then restore it to trigger the field type rebuild
92
+ setTimeout(() => {
93
+ attrCtrl.setValue(clonedModel.attribute, { emitEvent: true });
94
+ // Ensure the copied value is still available after the rebuild
95
+ setTimeout(() => {
96
+ if (copiedValue !== undefined && !newRowForm.value._copiedValue) {
97
+ // Re-add the copied value if it was lost during rebuild
98
+ newRowForm.patchValue({ _copiedValue: copiedValue });
99
+ filterValueCtrl.setValue(copiedValue);
100
+ }
101
+ }, 50);
102
+ }, 10);
103
+ }
104
+ });
169
105
  }
170
106
  reset() {
171
107
  this.field.fieldGroup.splice(0, this.field.fieldGroup.length); // clear
172
108
  this.add(); // start fresh with one row
173
109
  }
174
110
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: QueryBuilderFormlyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
175
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: QueryBuilderFormlyComponent, isStandalone: true, selector: "sa-query-builder-formly", providers: [], usesInheritance: true, ngImport: i0, template: "<div class=\"sa-query-builder-container\">\n <div class=\"query-builder-body\">\n @for(subField of field.fieldGroup; track $index) {\n <div class=\"row align-items-baseline\">\n @if ($index === 0) {\n <span class=\"where-text flex-1\">Where</span>\n }\n @for (subField of subField.fieldGroup; track $index) {\n @if(!!subField.props['hasDynamicType']){\n @switch (getFilterType(subField)) {\n @case ('STRING') {\n <formly-field [field]=\"subField\"></formly-field>\n }\n @case ('NUMBER') {\n <formly-field [field]=\"subField\"></formly-field>\n }\n @case ('BOOLEAN') {\n <formly-field [field]=\"subField\"></formly-field>\n }\n @case ('CURRENCY') {\n <formly-field [field]=\"subField\"></formly-field>\n }\n @case ('DATE') {\n\n }\n @case ('SELECT') {\n <formly-field [field]=\"createField(subField)\"></formly-field>\n }\n @default {\n <formly-field [field]=\"createField(subField)\"></formly-field>\n }\n }\n }@else{\n <formly-field\n class=\"col\"\n [field]=\"subField\"\n >\n </formly-field>\n }\n }\n @if(props?.['showCopyButton']){\n <sa-icon icon=\"copyOutlined\" class=\"copy-icon pointer\" (click)=\"copy($index)\"></sa-icon>\n }\n <sa-icon icon=\"deleteIcon\" class=\"delete-icon pointer\" (click)=\"remove($index)\"></sa-icon>\n </div>\n }\n \n <!-- Buttons -->\n <div class=\"rule-button-container\">\n <sa-button icon=\"add\" iconPosition=\"left\" text=\"Add filter\"\n (onClickEvent)=\"add()\"\n [state]=\"field?.fieldGroup?.length === (props?.['maxRows'] || 5) ? 'disabled' : 'default'\"\n type=\"outline\" size=\"medium\">\n </sa-button>\n <span class=\"filters-count\">({{field?.fieldGroup?.length}}/{{props?.['maxRows'] || 5}} filters)</span>\n @if(props?.['showResetButton']){\n <sa-button iconPosition=\"left\" text=\"Reset\"\n (onClickEvent)=\"reset()\"\n type=\"primary\" size=\"medium\">\n </sa-button>\n }\n </div> \n </div>\n</div>", styles: [".sa-query-builder-container{display:flex}.sa-query-builder-container .query-builder-body{display:flex;flex-direction:column;gap:var(--small-12px);width:-webkit-fill-available}.query-builder-body .row{display:flex;height:2.25rem;justify-content:center;align-items:center;flex:1 0 0;gap:var(--small-8px);width:-webkit-fill-available}.query-builder-form-wrapper{width:-webkit-fill-available}::ng-deep .query-builder-form-wrapper .sa-input-field.idle{border-radius:var(--small-4px);border:1px solid var(--grey-100, #EAECF0);background:var(--white, #FFF);height:2.438rem}::ng-deep .query-builder-form-wrapper .sa-input-container{height:3.438rem}::ng-deep .query-builder-form-wrapper .sa-input-container .disabled .sa-input-field input{color:var(--text-low-emphasis, #9B98A3);font-family:var(--font-family, Roboto);font-size:13px;font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px}.where-text{color:var(--text-medium-emphasis, #6D6979);font-family:var(--font-family-roboto);font-size:var(--small-14px);font-style:normal;font-weight:var(--font-weight-500);line-height:var(--medium-20px);letter-spacing:.1px;width:80px}.flex-1{flex:1 1 0;min-width:80px}.flex-2{flex:2 1 0;min-width:120px}.flex-4{flex:4 1 0;min-width:200px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i1.FormlyField, selector: "formly-field", inputs: ["field"] }, { kind: "component", type: ButtonComponent, selector: "sa-button", inputs: ["id", "type", "state", "size", "text", "ImagePath", "icon", "iconPosition", "href", "hrefTarget", "width", "isSubmit", "buttonIconSize", "showSpinner"], outputs: ["onClickEvent", "onMouseInEvent", "onMouseOutEvent"] }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatIconModule }] }); }
111
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: QueryBuilderFormlyComponent, isStandalone: true, selector: "sa-query-builder-formly", providers: [], usesInheritance: true, ngImport: i0, template: "<div class=\"sa-query-builder-container\">\n <div class=\"query-builder-body\">\n @for(subField of field.fieldGroup; track subField.id || $index) {\n <div class=\"row align-items-baseline query-row\" [@rowAnimation]>\n @if ($index === 0) {\n <span class=\"where-text flex-1\">Where</span>\n }\n @for (innerField of subField.fieldGroup; track innerField.key || $index) {\n @if(!!innerField.props['hasDynamicType']){\n @switch (getFilterType(innerField)) {\n @case ('STRING') {\n <formly-field [field]=\"innerField\"></formly-field>\n }\n @case ('NUMBER') {\n <formly-field [field]=\"innerField\"></formly-field>\n }\n @case ('BOOLEAN') {\n <formly-field [field]=\"innerField\"></formly-field>\n }\n @case ('CURRENCY') {\n <formly-field [field]=\"innerField\"></formly-field>\n }\n @case ('DATE') {\n\n }\n @case ('SELECT') {\n <formly-field [field]=\"createField(innerField)\"></formly-field>\n }\n @default {\n <formly-field [field]=\"createField(innerField)\"></formly-field>\n }\n }\n }@else{\n <formly-field\n class=\"col\"\n [field]=\"innerField\"\n >\n </formly-field>\n }\n }\n @if(props?.['showCopyButton']){\n <sa-icon icon=\"copyOutlined\" class=\"copy-icon pointer\" (click)=\"copy($index)\"></sa-icon>\n }\n <sa-icon icon=\"deleteIcon\" class=\"delete-icon pointer\" (click)=\"remove($index)\"></sa-icon>\n </div>\n }\n \n <!-- Buttons -->\n <div class=\"rule-button-container\">\n <sa-button icon=\"add\" iconPosition=\"left\" text=\"Add filter\"\n (onClickEvent)=\"add()\"\n [state]=\"field?.fieldGroup?.length === (props?.['maxRows'] || 5) ? 'disabled' : 'default'\"\n type=\"outline\" size=\"medium\">\n </sa-button>\n <span class=\"filters-count\">({{field?.fieldGroup?.length}}/{{props?.['maxRows'] || 5}} filters)</span>\n @if(props?.['showResetButton']){\n <sa-button iconPosition=\"left\" text=\"Reset\"\n (onClickEvent)=\"reset()\"\n type=\"primary\" size=\"medium\">\n </sa-button>\n }\n </div> \n </div>\n</div>", styles: [".sa-query-builder-container{display:flex}.sa-query-builder-container .query-builder-body{display:flex;flex-direction:column;gap:var(--small-12px);width:-webkit-fill-available}.query-builder-body .row{display:flex;height:2.25rem;justify-content:center;align-items:center;flex:1 0 0;gap:var(--small-8px);width:-webkit-fill-available}.query-row{transition:all .2s ease-in-out;border-radius:var(--small-4px);padding:var(--small-4px);margin:2px 0}.query-row ::ng-deep .query-builder-form-wrapper{transition:all .15s ease-in-out}.query-builder-form-wrapper{width:-webkit-fill-available}::ng-deep .query-builder-form-wrapper .sa-input-field.idle{border-radius:var(--small-4px);border:1px solid var(--grey-100, #EAECF0);background:var(--white, #FFF);height:2.438rem}::ng-deep .query-builder-form-wrapper .sa-input-container{height:3.438rem}::ng-deep .query-builder-form-wrapper .sa-input-container .disabled .sa-input-field input{color:var(--text-low-emphasis, #9B98A3);font-family:var(--font-family, Roboto);font-size:13px;font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px}.where-text{color:var(--text-medium-emphasis, #6D6979);font-family:var(--font-family-roboto);font-size:var(--small-14px);font-style:normal;font-weight:var(--font-weight-500);line-height:var(--medium-20px);letter-spacing:.1px;width:80px}.flex-1{flex:1 1 0;min-width:80px}.flex-2{flex:2 1 0;min-width:120px}.flex-4{flex:4 1 0;min-width:200px}.copy-icon,.delete-icon{transition:all .2s ease-in-out;padding:4px;border-radius:4px;opacity:.7}.copy-icon:hover,.delete-icon:hover{opacity:1;transform:scale(1.1);background-color:#0000000d}.copy-icon:active,.delete-icon:active{transform:scale(.95)}.copy-icon:hover{color:var(--primary-500, #7C3AED)}.delete-icon:hover{color:var(--error-500, #EF4444)}.rule-button-container{transition:all .2s ease-in-out}.rule-button-container sa-button{transition:all .2s ease-in-out}.rule-button-container sa-button:hover{transform:translateY(-1px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i1.FormlyField, selector: "formly-field", inputs: ["field"] }, { kind: "component", type: ButtonComponent, selector: "sa-button", inputs: ["id", "type", "state", "size", "text", "ImagePath", "icon", "iconPosition", "href", "hrefTarget", "width", "isSubmit", "buttonIconSize", "showSpinner"], outputs: ["onClickEvent", "onMouseInEvent", "onMouseOutEvent"] }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatIconModule }], animations: [
112
+ trigger('rowAnimation', [
113
+ transition(':enter', [
114
+ style({
115
+ opacity: 0,
116
+ transform: 'translateY(-10px) scale(0.95)',
117
+ height: '0px',
118
+ overflow: 'hidden'
119
+ }),
120
+ animate('300ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({
121
+ opacity: 1,
122
+ transform: 'translateY(0) scale(1)',
123
+ height: '*'
124
+ }))
125
+ ]),
126
+ transition(':leave', [
127
+ style({
128
+ opacity: 1,
129
+ transform: 'translateY(0) scale(1)',
130
+ height: '*'
131
+ }),
132
+ animate('250ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({
133
+ opacity: 0,
134
+ transform: 'translateY(-10px) scale(0.95)',
135
+ height: '0px',
136
+ overflow: 'hidden'
137
+ }))
138
+ ])
139
+ ])
140
+ ] }); }
176
141
  }
177
142
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: QueryBuilderFormlyComponent, decorators: [{
178
143
  type: Component,
179
- args: [{ selector: 'sa-query-builder-formly', standalone: true, providers: [], imports: [
144
+ args: [{ selector: 'sa-query-builder-formly', standalone: true, providers: [], animations: [
145
+ trigger('rowAnimation', [
146
+ transition(':enter', [
147
+ style({
148
+ opacity: 0,
149
+ transform: 'translateY(-10px) scale(0.95)',
150
+ height: '0px',
151
+ overflow: 'hidden'
152
+ }),
153
+ animate('300ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({
154
+ opacity: 1,
155
+ transform: 'translateY(0) scale(1)',
156
+ height: '*'
157
+ }))
158
+ ]),
159
+ transition(':leave', [
160
+ style({
161
+ opacity: 1,
162
+ transform: 'translateY(0) scale(1)',
163
+ height: '*'
164
+ }),
165
+ animate('250ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({
166
+ opacity: 0,
167
+ transform: 'translateY(-10px) scale(0.95)',
168
+ height: '0px',
169
+ overflow: 'hidden'
170
+ }))
171
+ ])
172
+ ])
173
+ ], imports: [
180
174
  CommonModule,
181
175
  ReactiveFormsModule,
182
176
  FormlyModule,
@@ -186,6 +180,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
186
180
  MatSelectModule,
187
181
  MatOptionModule,
188
182
  MatIconModule
189
- ], template: "<div class=\"sa-query-builder-container\">\n <div class=\"query-builder-body\">\n @for(subField of field.fieldGroup; track $index) {\n <div class=\"row align-items-baseline\">\n @if ($index === 0) {\n <span class=\"where-text flex-1\">Where</span>\n }\n @for (subField of subField.fieldGroup; track $index) {\n @if(!!subField.props['hasDynamicType']){\n @switch (getFilterType(subField)) {\n @case ('STRING') {\n <formly-field [field]=\"subField\"></formly-field>\n }\n @case ('NUMBER') {\n <formly-field [field]=\"subField\"></formly-field>\n }\n @case ('BOOLEAN') {\n <formly-field [field]=\"subField\"></formly-field>\n }\n @case ('CURRENCY') {\n <formly-field [field]=\"subField\"></formly-field>\n }\n @case ('DATE') {\n\n }\n @case ('SELECT') {\n <formly-field [field]=\"createField(subField)\"></formly-field>\n }\n @default {\n <formly-field [field]=\"createField(subField)\"></formly-field>\n }\n }\n }@else{\n <formly-field\n class=\"col\"\n [field]=\"subField\"\n >\n </formly-field>\n }\n }\n @if(props?.['showCopyButton']){\n <sa-icon icon=\"copyOutlined\" class=\"copy-icon pointer\" (click)=\"copy($index)\"></sa-icon>\n }\n <sa-icon icon=\"deleteIcon\" class=\"delete-icon pointer\" (click)=\"remove($index)\"></sa-icon>\n </div>\n }\n \n <!-- Buttons -->\n <div class=\"rule-button-container\">\n <sa-button icon=\"add\" iconPosition=\"left\" text=\"Add filter\"\n (onClickEvent)=\"add()\"\n [state]=\"field?.fieldGroup?.length === (props?.['maxRows'] || 5) ? 'disabled' : 'default'\"\n type=\"outline\" size=\"medium\">\n </sa-button>\n <span class=\"filters-count\">({{field?.fieldGroup?.length}}/{{props?.['maxRows'] || 5}} filters)</span>\n @if(props?.['showResetButton']){\n <sa-button iconPosition=\"left\" text=\"Reset\"\n (onClickEvent)=\"reset()\"\n type=\"primary\" size=\"medium\">\n </sa-button>\n }\n </div> \n </div>\n</div>", styles: [".sa-query-builder-container{display:flex}.sa-query-builder-container .query-builder-body{display:flex;flex-direction:column;gap:var(--small-12px);width:-webkit-fill-available}.query-builder-body .row{display:flex;height:2.25rem;justify-content:center;align-items:center;flex:1 0 0;gap:var(--small-8px);width:-webkit-fill-available}.query-builder-form-wrapper{width:-webkit-fill-available}::ng-deep .query-builder-form-wrapper .sa-input-field.idle{border-radius:var(--small-4px);border:1px solid var(--grey-100, #EAECF0);background:var(--white, #FFF);height:2.438rem}::ng-deep .query-builder-form-wrapper .sa-input-container{height:3.438rem}::ng-deep .query-builder-form-wrapper .sa-input-container .disabled .sa-input-field input{color:var(--text-low-emphasis, #9B98A3);font-family:var(--font-family, Roboto);font-size:13px;font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px}.where-text{color:var(--text-medium-emphasis, #6D6979);font-family:var(--font-family-roboto);font-size:var(--small-14px);font-style:normal;font-weight:var(--font-weight-500);line-height:var(--medium-20px);letter-spacing:.1px;width:80px}.flex-1{flex:1 1 0;min-width:80px}.flex-2{flex:2 1 0;min-width:120px}.flex-4{flex:4 1 0;min-width:200px}\n"] }]
183
+ ], template: "<div class=\"sa-query-builder-container\">\n <div class=\"query-builder-body\">\n @for(subField of field.fieldGroup; track subField.id || $index) {\n <div class=\"row align-items-baseline query-row\" [@rowAnimation]>\n @if ($index === 0) {\n <span class=\"where-text flex-1\">Where</span>\n }\n @for (innerField of subField.fieldGroup; track innerField.key || $index) {\n @if(!!innerField.props['hasDynamicType']){\n @switch (getFilterType(innerField)) {\n @case ('STRING') {\n <formly-field [field]=\"innerField\"></formly-field>\n }\n @case ('NUMBER') {\n <formly-field [field]=\"innerField\"></formly-field>\n }\n @case ('BOOLEAN') {\n <formly-field [field]=\"innerField\"></formly-field>\n }\n @case ('CURRENCY') {\n <formly-field [field]=\"innerField\"></formly-field>\n }\n @case ('DATE') {\n\n }\n @case ('SELECT') {\n <formly-field [field]=\"createField(innerField)\"></formly-field>\n }\n @default {\n <formly-field [field]=\"createField(innerField)\"></formly-field>\n }\n }\n }@else{\n <formly-field\n class=\"col\"\n [field]=\"innerField\"\n >\n </formly-field>\n }\n }\n @if(props?.['showCopyButton']){\n <sa-icon icon=\"copyOutlined\" class=\"copy-icon pointer\" (click)=\"copy($index)\"></sa-icon>\n }\n <sa-icon icon=\"deleteIcon\" class=\"delete-icon pointer\" (click)=\"remove($index)\"></sa-icon>\n </div>\n }\n \n <!-- Buttons -->\n <div class=\"rule-button-container\">\n <sa-button icon=\"add\" iconPosition=\"left\" text=\"Add filter\"\n (onClickEvent)=\"add()\"\n [state]=\"field?.fieldGroup?.length === (props?.['maxRows'] || 5) ? 'disabled' : 'default'\"\n type=\"outline\" size=\"medium\">\n </sa-button>\n <span class=\"filters-count\">({{field?.fieldGroup?.length}}/{{props?.['maxRows'] || 5}} filters)</span>\n @if(props?.['showResetButton']){\n <sa-button iconPosition=\"left\" text=\"Reset\"\n (onClickEvent)=\"reset()\"\n type=\"primary\" size=\"medium\">\n </sa-button>\n }\n </div> \n </div>\n</div>", styles: [".sa-query-builder-container{display:flex}.sa-query-builder-container .query-builder-body{display:flex;flex-direction:column;gap:var(--small-12px);width:-webkit-fill-available}.query-builder-body .row{display:flex;height:2.25rem;justify-content:center;align-items:center;flex:1 0 0;gap:var(--small-8px);width:-webkit-fill-available}.query-row{transition:all .2s ease-in-out;border-radius:var(--small-4px);padding:var(--small-4px);margin:2px 0}.query-row ::ng-deep .query-builder-form-wrapper{transition:all .15s ease-in-out}.query-builder-form-wrapper{width:-webkit-fill-available}::ng-deep .query-builder-form-wrapper .sa-input-field.idle{border-radius:var(--small-4px);border:1px solid var(--grey-100, #EAECF0);background:var(--white, #FFF);height:2.438rem}::ng-deep .query-builder-form-wrapper .sa-input-container{height:3.438rem}::ng-deep .query-builder-form-wrapper .sa-input-container .disabled .sa-input-field input{color:var(--text-low-emphasis, #9B98A3);font-family:var(--font-family, Roboto);font-size:13px;font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px}.where-text{color:var(--text-medium-emphasis, #6D6979);font-family:var(--font-family-roboto);font-size:var(--small-14px);font-style:normal;font-weight:var(--font-weight-500);line-height:var(--medium-20px);letter-spacing:.1px;width:80px}.flex-1{flex:1 1 0;min-width:80px}.flex-2{flex:2 1 0;min-width:120px}.flex-4{flex:4 1 0;min-width:200px}.copy-icon,.delete-icon{transition:all .2s ease-in-out;padding:4px;border-radius:4px;opacity:.7}.copy-icon:hover,.delete-icon:hover{opacity:1;transform:scale(1.1);background-color:#0000000d}.copy-icon:active,.delete-icon:active{transform:scale(.95)}.copy-icon:hover{color:var(--primary-500, #7C3AED)}.delete-icon:hover{color:var(--error-500, #EF4444)}.rule-button-container{transition:all .2s ease-in-out}.rule-button-container sa-button{transition:all .2s ease-in-out}.rule-button-container sa-button:hover{transform:translateY(-1px)}\n"] }]
190
184
  }] });
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci1mb3JtbHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9xdWVyeS1idWlsZGVyLWZvcm1seS9xdWVyeS1idWlsZGVyLWZvcm1seS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXItZm9ybWx5L3F1ZXJ5LWJ1aWxkZXItZm9ybWx5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBcUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBYSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7OztBQXFCdkQsTUFBTSxPQUFPLDJCQUE0QixTQUFRLGNBQWM7SUFsQi9EOztRQXVFRSxr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SjtnQkFDRSxPQUFPO29CQUNMLFdBQVcsRUFBRSxhQUFhO29CQUMxQixVQUFVLEVBQUUsU0FBUztpQkFDdEIsQ0FBQztRQUNOLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRO1FBQ3ZFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLDJCQUEyQjtJQUN6QyxDQUFDOzhHQS9LVSwyQkFBMkI7a0dBQTNCLDJCQUEyQixzRUFiM0IsRUFBRSxpRENuQmYseTRFQStETSw2eENEMUNGLFlBQVksOEJBQ1osbUJBQW1CLDhCQUNuQixZQUFZLHlIQUNaLGVBQWUsd1JBQ2YsYUFBYSxvTUFDYixrQkFBa0IsOEJBQ2xCLGVBQWUsOEJBQ2YsZUFBZSw4QkFDZixhQUFhOzsyRkFHSiwyQkFBMkI7a0JBbEJ2QyxTQUFTOytCQUNFLHlCQUF5QixjQUd2QixJQUFJLGFBQ0wsRUFBRSxXQUNKO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixhQUFhO3FCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpZWxkQXJyYXlUeXBlLCBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJzsgXG5pbXBvcnQgeyBGb3JtbHlNb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGdldCwga2V5cyB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRPcHRpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzYS1xdWVyeS1idWlsZGVyLWZvcm1seScsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWVyeS1idWlsZGVyLWZvcm1seS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1ZXJ5LWJ1aWxkZXItZm9ybWx5LmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW10sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3JtbHlNb2R1bGUsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIEljb25Db21wb25lbnQsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICBNYXRPcHRpb25Nb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSAgICBcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBRdWVyeUJ1aWxkZXJGb3JtbHlDb21wb25lbnQgZXh0ZW5kcyBGaWVsZEFycmF5VHlwZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIFxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBcbiAgICBcbiAgfVxuICBcbiAgZ2V0Um93Q29uZGl0aW9uKGluZGV4OiBudW1iZXIpOiAnYW5kJyB8ICdvcicge1xuICAgICAgaWYgKGluZGV4ID09PSAwKSByZXR1cm4gJ2FuZCc7IFxuICAgICAgXG4gICAgICBjb25zdCBydWxlR3JvdXAgPSB0aGlzLmZvcm1Db250cm9sLmF0KGluZGV4KSBhcyBGb3JtR3JvdXA7XG4gICAgICByZXR1cm4gcnVsZUdyb3VwLmdldCgnY29uZGl0aW9uJyk/LnZhbHVlIHx8ICdhbmQnO1xuICAgIH1cblxuICAgIC8qKlxuICAgKiBTZXRzIHRoZSBjb25kaXRpb24gZm9yIGEgc3BlY2lmaWMgcm93XG4gICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIHJvd1xuICAgKiBAcGFyYW0gY29uZGl0aW9uIFRoZSBjb25kaXRpb24gdG8gc2V0IChhbmQvb3IpXG4gICAqL1xuICBzZXRSb3dDb25kaXRpb24oaW5kZXg6IG51bWJlciwgY29uZGl0aW9uOiAnYW5kJyB8ICdvcicpOiB2b2lkIHtcbiAgICBpZiAoaW5kZXggPT09IDApIHJldHVybjsgLy8gRmlyc3Qgcm93IGRvZXNuJ3QgaGF2ZSBhIGNvbmRpdGlvblxuICAgIFxuICAgIGNvbnN0IHJ1bGVHcm91cCA9IHRoaXMuZm9ybUNvbnRyb2wuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICBydWxlR3JvdXAuZ2V0KCdjb25kaXRpb24nKT8uc2V0VmFsdWUoY29uZGl0aW9uKTtcbiAgfVxuXG4gIGNvcHlSdWxlKCk6IHZvaWQge1xuICAgIFxuICB9XG5cbiAgY3JlYXRlRmllbGQoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIGlmKGZpZWxkLnR5cGUgPT09ICdkeW5hbWljLXR5cGUnIHx8IGZpZWxkLnR5cGUgPT09ICcnKSB7XG4gICAgICBmaWVsZC50eXBlID0gJ3NhLWlucHV0JztcbiAgICAgIGZpZWxkLnByb3BzLnR5cGUgPSAndGV4dCc7XG4gICAgICBmaWVsZC5wcm9wcy5wbGFjZWhvbGRlciA9ICdFbnRlci9TZWxlY3QnO1xuICAgIH1cbiAgICByZXR1cm4gZmllbGQ7XG4gIH1cblxuICBnZXRGaWx0ZXJUeXBlKHN1YkZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcGFyZW50VmFsdWUgPSBnZXQoc3ViRmllbGQsICdmb3JtQ29udHJvbC5wYXJlbnQudmFsdWUnKTtcbiAgICBpZiAoIXBhcmVudFZhbHVlKSByZXR1cm4gdW5kZWZpbmVkO1xuICBcbiAgICAvLyBMb29rIHRocm91Z2ggYWxsIGtleXMgb2YgdGhlIHBhcmVudCB2YWx1ZVxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMocGFyZW50VmFsdWUpKSB7XG4gICAgICBjb25zdCB2YWwgPSBwYXJlbnRWYWx1ZVtrZXldO1xuICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAnZmlsdGVyVHlwZScgaW4gdmFsKSB7XG4gICAgICAgIHJldHVybiB2YWwuZmlsdGVyVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIHJlc2V0KCk6IHZvaWQge1xuICAvLyAgIHRoaXMuZm9ybUNvbnRyb2wucmVzZXQoKTtcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBEdXBsaWNhdGVzIHRoZSByb3cgYXQgdGhlIGdpdmVuIGluZGV4LlxuICAgKiBBIGRlZXDigJNjbG9uZSBvZiB0aGF0IHJvd+KAmXMgbW9kZWwgaXMgaW5zZXJ0ZWQgcmlnaHQgYWZ0ZXIgdGhlIG9yaWdpbmFsIHJvdy5cbiAgICovXG4gIGNvcGllZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjb3B5KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCByb3dNb2RlbCA9IHRoaXMuZm9ybUNvbnRyb2wuYXQoaW5kZXgpPy52YWx1ZTtcbiAgICBpZiAoIXJvd01vZGVsKSByZXR1cm47XG4gIFxuICAgIC8vIERlZXAtY2xvbmUgbW9kZWxcbiAgICBjb25zdCBjbG9uZWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJvd01vZGVsKSk7XG4gIFxuICAgIC8vIEluc2VydCByb3cgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lXG4gICAgdGhpcy5hZGQoaW5kZXggKyAxLCBjbG9uZWQpO1xuICBcbiAgICAvLyDwn5GHIEZvcmNlIEZvcm1seSB0byByZWZyZXNoIHRoZSBkeW5hbWljIGZpZWxkXG4gICAgY29uc3QgbmV3Um93ID0gdGhpcy5mb3JtQ29udHJvbC5hdChpbmRleCArIDEpO1xuICAgIGNvbnN0IGF0dHIgPSBuZXdSb3c/LmdldCgnYXR0cmlidXRlJyk/LnZhbHVlO1xuICBcbiAgICBpZiAoYXR0cikge1xuICAgICAgY29uc3QgYXR0ckN0cmwgPSBuZXdSb3c/LmdldCgnYXR0cmlidXRlJyk7XG4gICAgICBhdHRyQ3RybC5zZXRWYWx1ZShhdHRyQ3RybC52YWx1ZSk7XG4gICAgICAvLyBSZS10cmlnZ2VyIGZpZWxkIHR5cGUgcmVidWlsZCBmb3IgZmlsdGVyVmFsdWVcbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlRmllbGQgPSB0aGlzLmZpZWxkLmZpZWxkR3JvdXBbaW5kZXggKyAxXS5maWVsZEdyb3VwXG4gICAgICAgIC5maW5kKGYgPT4gZi5rZXkgPT09ICdmaWx0ZXJWYWx1ZScpO1xuICBcbiAgICAgICAgaWYgKGZpbHRlclZhbHVlRmllbGQpIHtcbiAgICAgICAgICBjb25zdCB0eXBlTWFwID0ge1xuICAgICAgICAgICAgU0VMRUNUOiAnc2Etbmctc2VsZWN0JyxcbiAgICAgICAgICAgIFNUUklORzogJ3NhLWlucHV0JyxcbiAgICAgICAgICAgIE5VTUJFUjogJ3NhLWlucHV0JyxcbiAgICAgICAgICAgIERBVEU6ICdzYS1kYXRlLXBpY2tlcicsXG4gICAgICAgICAgICBDVVJSRU5DWTogJ3NhLWN1cnJlbmN5LWlucHV0JyxcbiAgICAgICAgICAgIEJPT0xFQU46ICdzYS1uZy1zZWxlY3QnLFxuICAgICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICAgIGNvbnN0IG5ld1R5cGUgPSB0eXBlTWFwW2F0dHIuZmlsdGVyVHlwZV0gfHwgJ3NhLWlucHV0JztcbiAgICAgICAgICBmaWx0ZXJWYWx1ZUZpZWxkLnR5cGUgPSBuZXdUeXBlO1xuICAgICAgICAgIGZpbHRlclZhbHVlRmllbGQucHJvcHMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmNyZWF0ZUZpZWxkUHJvcHMoYXR0ci5maWx0ZXJUeXBlKSxcbiAgICAgICAgICAgIGhhc0R5bmFtaWNUeXBlOiB0cnVlLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLCAgLy8gaW5pdGlhbFxuICAgICAgICAgICAgYXR0cmlidXRlOiBhdHRyLFxuICAgICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICAgIC8vIPCflIQgTm90aWZ5IEZvcm1seSBvZiB0eXBlIGNoYW5nZVxuICAgICAgICAgIGZpbHRlclZhbHVlRmllbGQub3B0aW9ucz8uZmllbGRDaGFuZ2VzPy5uZXh0KHtcbiAgICAgICAgICAgIHR5cGU6ICd0eXBlJyxcbiAgICAgICAgICAgIGZpZWxkOiBmaWx0ZXJWYWx1ZUZpZWxkLFxuICAgICAgICAgICAgdmFsdWU6IG5ld1R5cGUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICB9XG4gICAgICAgIFxuICAgIH1cbiAgfVxuICBjcmVhdGVGaWVsZFByb3BzKHR5cGU6IHN0cmluZykge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnU0VMRUNUJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCcsXG4gICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgICAgIGJpbmRMYWJlbDogJ2xhYmVsJyxcbiAgICAgICAgICBiaW5kVmFsdWU6ICd2YWx1ZScsXG4gICAgICAgICAgYXBwZWFyYW5jZTogJ291dGxpbmUnLFxuICAgICAgICAgIGlzQ2xlYXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGlzU2VhcmNoYWJsZTogZmFsc2UsXG4gICAgICAgICAgY2xvc2VPbnNlbGVjdDogdHJ1ZSxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICBjYXNlICdTVFJJTkcnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnRW50ZXIgdmFsdWUnLFxuICAgICAgICAgIGFwcGVhcmFuY2U6ICdvdXRsaW5lJyxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ05VTUJFUic6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICdFbnRlciB2YWx1ZScsXG4gICAgICAgICAgYXBwZWFyYW5jZTogJ291dGxpbmUnLFxuICAgICAgICAgIHR5cGU6ICdudW1iZXInXG4gICAgICAgIH07XG4gICAgICBjYXNlICdEQVRFJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCBkYXRlJyxcbiAgICAgICAgICBhcHBlYXJhbmNlOiAnb3V0bGluZScsXG4gICAgICAgICAgdHlwZTogJ2RhdGUnXG4gICAgICAgIH07XG4gICAgICBjYXNlICdDVVJSRU5DWSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICdFbnRlciB2YWx1ZScsXG4gICAgICAgICAgYXBwZWFyYW5jZTogJ291dGxpbmUnLFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnQk9PTEVBTic6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICdFbnRlciB2YWx1ZScsXG4gICAgICAgICAgYXBwZWFyYW5jZTogJ291dGxpbmUnLFxuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IHZhbHVlOiB0cnVlLCBsYWJlbDogJ1RydWUnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiBmYWxzZSwgbGFiZWw6ICdGYWxzZScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGJpbmRMYWJlbDogJ2xhYmVsJyxcbiAgICAgICAgICBiaW5kVmFsdWU6ICd2YWx1ZScsXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ0VudGVyIHZhbHVlJyxcbiAgICAgICAgICBhcHBlYXJhbmNlOiAnb3V0bGluZScsXG4gICAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5maWVsZC5maWVsZEdyb3VwLnNwbGljZSgwLCB0aGlzLmZpZWxkLmZpZWxkR3JvdXAubGVuZ3RoKTsgLy8gY2xlYXJcbiAgICB0aGlzLmFkZCgpOyAvLyBzdGFydCBmcmVzaCB3aXRoIG9uZSByb3dcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwic2EtcXVlcnktYnVpbGRlci1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItYm9keVwiPlxuICAgIEBmb3Ioc3ViRmllbGQgb2YgZmllbGQuZmllbGRHcm91cDsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWJhc2VsaW5lXCI+XG4gICAgICAgIEBpZiAoJGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3aGVyZS10ZXh0IGZsZXgtMVwiPldoZXJlPC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKHN1YkZpZWxkIG9mIHN1YkZpZWxkLmZpZWxkR3JvdXA7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgIEBpZighIXN1YkZpZWxkLnByb3BzWydoYXNEeW5hbWljVHlwZSddKXtcbiAgICAgICAgICAgIEBzd2l0Y2ggKGdldEZpbHRlclR5cGUoc3ViRmllbGQpKSB7XG4gICAgICAgICAgICAgIEBjYXNlICgnU1RSSU5HJykge1xuICAgICAgICAgICAgICAgIDxmb3JtbHktZmllbGQgW2ZpZWxkXT1cInN1YkZpZWxkXCI+PC9mb3JtbHktZmllbGQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBjYXNlICgnTlVNQkVSJykge1xuICAgICAgICAgICAgICAgIDxmb3JtbHktZmllbGQgW2ZpZWxkXT1cInN1YkZpZWxkXCI+PC9mb3JtbHktZmllbGQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBjYXNlICgnQk9PTEVBTicpIHtcbiAgICAgICAgICAgICAgICAgIDxmb3JtbHktZmllbGQgW2ZpZWxkXT1cInN1YkZpZWxkXCI+PC9mb3JtbHktZmllbGQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAoJ0NVUlJFTkNZJykge1xuICAgICAgICAgICAgICAgICAgICA8Zm9ybWx5LWZpZWxkIFtmaWVsZF09XCJzdWJGaWVsZFwiPjwvZm9ybWx5LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKCdEQVRFJykge1xuXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAoJ1NFTEVDVCcpIHtcbiAgICAgICAgICAgICAgICAgIDxmb3JtbHktZmllbGQgW2ZpZWxkXT1cImNyZWF0ZUZpZWxkKHN1YkZpZWxkKVwiPjwvZm9ybWx5LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgICAgPGZvcm1seS1maWVsZCBbZmllbGRdPVwiY3JlYXRlRmllbGQoc3ViRmllbGQpXCI+PC9mb3JtbHktZmllbGQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfUBlbHNle1xuICAgICAgICAgICAgPGZvcm1seS1maWVsZFxuICAgICAgICAgICAgY2xhc3M9XCJjb2xcIlxuICAgICAgICAgICAgW2ZpZWxkXT1cInN1YkZpZWxkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9mb3JtbHktZmllbGQ+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBpZihwcm9wcz8uWydzaG93Q29weUJ1dHRvbiddKXtcbiAgICAgICAgPHNhLWljb24gaWNvbj1cImNvcHlPdXRsaW5lZFwiIGNsYXNzPVwiY29weS1pY29uIHBvaW50ZXJcIiAoY2xpY2spPVwiY29weSgkaW5kZXgpXCI+PC9zYS1pY29uPlxuICAgICAgICB9XG4gICAgICAgIDxzYS1pY29uIGljb249XCJkZWxldGVJY29uXCIgY2xhc3M9XCJkZWxldGUtaWNvbiBwb2ludGVyXCIgKGNsaWNrKT1cInJlbW92ZSgkaW5kZXgpXCI+PC9zYS1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICBcbiAgICA8IS0tIEJ1dHRvbnMgLS0+XG4gICAgPGRpdiBjbGFzcz1cInJ1bGUtYnV0dG9uLWNvbnRhaW5lclwiPlxuICAgICAgPHNhLWJ1dHRvbiBpY29uPVwiYWRkXCIgaWNvblBvc2l0aW9uPVwibGVmdFwiIHRleHQ9XCJBZGQgZmlsdGVyXCJcbiAgICAgIChvbkNsaWNrRXZlbnQpPVwiYWRkKClcIlxuICAgICAgW3N0YXRlXT1cImZpZWxkPy5maWVsZEdyb3VwPy5sZW5ndGggPT09IChwcm9wcz8uWydtYXhSb3dzJ10gfHwgNSkgPyAnZGlzYWJsZWQnIDogJ2RlZmF1bHQnXCJcbiAgICAgIHR5cGU9XCJvdXRsaW5lXCIgc2l6ZT1cIm1lZGl1bVwiPlxuICAgICAgPC9zYS1idXR0b24+XG4gICAgICA8c3BhbiBjbGFzcz1cImZpbHRlcnMtY291bnRcIj4oe3tmaWVsZD8uZmllbGRHcm91cD8ubGVuZ3RofX0ve3twcm9wcz8uWydtYXhSb3dzJ10gfHwgNX19IGZpbHRlcnMpPC9zcGFuPlxuICAgICAgQGlmKHByb3BzPy5bJ3Nob3dSZXNldEJ1dHRvbiddKXtcbiAgICAgIDxzYS1idXR0b24gaWNvblBvc2l0aW9uPVwibGVmdFwiIHRleHQ9XCJSZXNldFwiXG4gICAgICAob25DbGlja0V2ZW50KT1cInJlc2V0KClcIlxuICAgICAgdHlwZT1cInByaW1hcnlcIiBzaXplPVwibWVkaXVtXCI+XG4gICAgICA8L3NhLWJ1dHRvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj4gICAgXG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci1mb3JtbHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9xdWVyeS1idWlsZGVyLWZvcm1seS9xdWVyeS1idWlsZGVyLWZvcm1seS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXItZm9ybWx5L3F1ZXJ5LWJ1aWxkZXItZm9ybWx5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBcUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBYSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBUyxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8s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QkFBeUIsY0FHdkIsSUFBSSxhQUNMLEVBQUUsY0FDRDt3QkFDVixPQUFPLENBQUMsY0FBYyxFQUFFOzRCQUN0QixVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNuQixLQUFLLENBQUM7b0NBQ0osT0FBTyxFQUFFLENBQUM7b0NBQ1YsU0FBUyxFQUFFLCtCQUErQjtvQ0FDMUMsTUFBTSxFQUFFLEtBQUs7b0NBQ2IsUUFBUSxFQUFFLFFBQVE7aUNBQ25CLENBQUM7Z0NBQ0YsT0FBTyxDQUFDLHNDQUFzQyxFQUFFLEtBQUssQ0FBQztvQ0FDcEQsT0FBTyxFQUFFLENBQUM7b0NBQ1YsU0FBUyxFQUFFLHdCQUF3QjtvQ0FDbkMsTUFBTSxFQUFFLEdBQUc7aUNBQ1osQ0FBQyxDQUFDOzZCQUNKLENBQUM7NEJBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDbkIsS0FBSyxDQUFDO29DQUNKLE9BQU8sRUFBRSxDQUFDO29DQUNWLFNBQVMsRUFBRSx3QkFBd0I7b0NBQ25DLE1BQU0sRUFBRSxHQUFHO2lDQUNaLENBQUM7Z0NBQ0YsT0FBTyxDQUFDLHNDQUFzQyxFQUFFLEtBQUssQ0FBQztvQ0FDcEQsT0FBTyxFQUFFLENBQUM7b0NBQ1YsU0FBUyxFQUFFLCtCQUErQjtvQ0FDMUMsTUFBTSxFQUFFLEtBQUs7b0NBQ2IsUUFBUSxFQUFFLFFBQVE7aUNBQ25CLENBQUMsQ0FBQzs2QkFDSixDQUFDO3lCQUNILENBQUM7cUJBQ0gsV0FDUTt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsYUFBYTtxQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWVsZEFycmF5VHlwZSwgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7IFxuaW1wb3J0IHsgRm9ybWx5TW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBnZXQsIGtleXMgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0T3B0aW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyB0cmlnZ2VyLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIGFuaW1hdGUsIHF1ZXJ5LCBzdGFnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2EtcXVlcnktYnVpbGRlci1mb3JtbHknLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVlcnktYnVpbGRlci1mb3JtbHkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9xdWVyeS1idWlsZGVyLWZvcm1seS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcigncm93QW5pbWF0aW9uJywgW1xuICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICBzdHlsZSh7IFxuICAgICAgICAgIG9wYWNpdHk6IDAsIFxuICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwcHgpIHNjYWxlKDAuOTUpJyxcbiAgICAgICAgICBoZWlnaHQ6ICcwcHgnLFxuICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgICAgICB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMzAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJywgc3R5bGUoeyBcbiAgICAgICAgICBvcGFjaXR5OiAxLCBcbiAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApIHNjYWxlKDEpJyxcbiAgICAgICAgICBoZWlnaHQ6ICcqJ1xuICAgICAgICB9KSlcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbignOmxlYXZlJywgW1xuICAgICAgICBzdHlsZSh7IFxuICAgICAgICAgIG9wYWNpdHk6IDEsIFxuICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCkgc2NhbGUoMSknLFxuICAgICAgICAgIGhlaWdodDogJyonXG4gICAgICAgIH0pLFxuICAgICAgICBhbmltYXRlKCcyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknLCBzdHlsZSh7IFxuICAgICAgICAgIG9wYWNpdHk6IDAsIFxuICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwcHgpIHNjYWxlKDAuOTUpJyxcbiAgICAgICAgICBoZWlnaHQ6ICcwcHgnLFxuICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgICAgICB9KSlcbiAgICAgIF0pXG4gICAgXSlcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1seU1vZHVsZSxcbiAgICBCdXR0b25Db21wb25lbnQsXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIE1hdE9wdGlvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlICAgIFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5QnVpbGRlckZvcm1seUNvbXBvbmVudCBleHRlbmRzIEZpZWxkQXJyYXlUeXBlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIFxuICAgIFxuICB9XG4gIFxuICBnZXRSb3dDb25kaXRpb24oaW5kZXg6IG51bWJlcik6ICdhbmQnIHwgJ29yJyB7XG4gICAgICBpZiAoaW5kZXggPT09IDApIHJldHVybiAnYW5kJzsgXG4gICAgICBcbiAgICAgIGNvbnN0IHJ1bGVHcm91cCA9IHRoaXMuZm9ybUNvbnRyb2wuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICAgIHJldHVybiBydWxlR3JvdXAuZ2V0KCdsb2dpY2FsT3BlcmF0b3InKT8udmFsdWUgfHwgJ2FuZCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAqIFNldHMgdGhlIGNvbmRpdGlvbiBmb3IgYSBzcGVjaWZpYyByb3dcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgcm93XG4gICAqIEBwYXJhbSBjb25kaXRpb24gVGhlIGNvbmRpdGlvbiB0byBzZXQgKGFuZC9vcilcbiAgICovXG4gIHNldFJvd0NvbmRpdGlvbihpbmRleDogbnVtYmVyLCBjb25kaXRpb246ICdhbmQnIHwgJ29yJyk6IHZvaWQge1xuICAgIGlmIChpbmRleCA9PT0gMCkgcmV0dXJuOyAvLyBGaXJzdCByb3cgZG9lc24ndCBoYXZlIGEgbG9naWNhbCBvcGVyYXRvclxuICAgIFxuICAgIGNvbnN0IHJ1bGVHcm91cCA9IHRoaXMuZm9ybUNvbnRyb2wuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICBydWxlR3JvdXAuZ2V0KCdsb2dpY2FsT3BlcmF0b3InKT8uc2V0VmFsdWUoY29uZGl0aW9uKTtcbiAgfVxuXG4gIGNvcHlSdWxlKCk6IHZvaWQge1xuICAgIFxuICB9XG5cbiAgY3JlYXRlRmllbGQoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIGlmKGZpZWxkLnR5cGUgPT09ICdkeW5hbWljLXR5cGUnIHx8IGZpZWxkLnR5cGUgPT09ICcnKSB7XG4gICAgICBmaWVsZC50eXBlID0gJ3NhLWlucHV0JztcbiAgICAgIGZpZWxkLnByb3BzLnR5cGUgPSAndGV4dCc7XG4gICAgICBmaWVsZC5wcm9wcy5wbGFjZWhvbGRlciA9ICdFbnRlci9TZWxlY3QnO1xuICAgIH1cbiAgICByZXR1cm4gZmllbGQ7XG4gIH1cblxuICBnZXRGaWx0ZXJUeXBlKHN1YkZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcGFyZW50VmFsdWUgPSBnZXQoc3ViRmllbGQsICdmb3JtQ29udHJvbC5wYXJlbnQudmFsdWUnKTtcbiAgICBpZiAoIXBhcmVudFZhbHVlKSByZXR1cm4gdW5kZWZpbmVkO1xuICBcbiAgICAvLyBMb29rIHRocm91Z2ggYWxsIGtleXMgb2YgdGhlIHBhcmVudCB2YWx1ZVxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMocGFyZW50VmFsdWUpKSB7XG4gICAgICBjb25zdCB2YWwgPSBwYXJlbnRWYWx1ZVtrZXldO1xuICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAnZmlsdGVyVHlwZScgaW4gdmFsKSB7XG4gICAgICAgIHJldHVybiB2YWwuZmlsdGVyVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIHJlc2V0KCk6IHZvaWQge1xuICAvLyAgIHRoaXMuZm9ybUNvbnRyb2wucmVzZXQoKTtcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBEdXBsaWNhdGVzIHRoZSByb3cgYXQgdGhlIGdpdmVuIGluZGV4LlxuICAgKiBBIGRlZXDigJNjbG9uZSBvZiB0aGF0IHJvd+KAmXMgbW9kZWwgaXMgaW5zZXJ0ZWQgcmlnaHQgYWZ0ZXIgdGhlIG9yaWdpbmFsIHJvdy5cbiAgICovXG4gIGNvcHkoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHJvd01vZGVsID0gdGhpcy5mb3JtQ29udHJvbC5hdChpbmRleCk/LnZhbHVlO1xuICAgIGlmICghcm93TW9kZWwpIHJldHVybjtcblxuICAgIGNvbnN0IGNsb25lZE1vZGVsID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyb3dNb2RlbCkpO1xuXG4gICAgLy8gQ2FycnkgdGhlIHZhbHVlIG92ZXIgdG8gdGhlIG5ldyByb3cgc28gdGhlIG9uSW5pdCBob29rIGNhbiByZXN0b3JlIGl0LlxuICAgIGlmIChjbG9uZWRNb2RlbC5maWx0ZXJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbG9uZWRNb2RlbC5fY29waWVkVmFsdWUgPSBjbG9uZWRNb2RlbC5maWx0ZXJWYWx1ZTtcbiAgICB9XG5cbiAgICAvLyBJZiBjb3B5aW5nIHRoZSBmaXJzdCByb3cgKGluZGV4IDApLCB0aGUgbmV3IHJvdyAoaW5kZXggMSkgc2hvdWxkIGhhdmUgYSBsb2dpY2FsIG9wZXJhdG9yXG4gICAgLy8gU2V0IGRlZmF1bHQgbG9naWNhbCBvcGVyYXRvciB0byAnYW5kJyBmb3IgdGhlIG5ldyByb3dcbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgIGNsb25lZE1vZGVsLmxvZ2ljYWxPcGVyYXRvciA9ICdhbmQnO1xuICAgIH1cblxuICAgIHRoaXMuYWRkKGluZGV4ICsgMSwgY2xvbmVkTW9kZWwpO1xuXG4gICAgLy8gRm9yY2UgcmVidWlsZCBvZiB0aGUgZmlsdGVyVmFsdWUgZmllbGQgYnkgdHJpZ2dlcmluZyBhdHRyaWJ1dGUgY2hhbmdlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBuZXdSb3dGb3JtID0gdGhpcy5mb3JtQ29udHJvbC5hdChpbmRleCArIDEpIGFzIEZvcm1Hcm91cDtcbiAgICAgIGNvbnN0IGF0dHJDdHJsID0gbmV3Um93Rm9ybT8uZ2V0KCdhdHRyaWJ1dGUnKTtcbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlQ3RybCA9IG5ld1Jvd0Zvcm0/LmdldCgnZmlsdGVyVmFsdWUnKTtcbiAgICAgIFxuICAgICAgaWYgKGF0dHJDdHJsICYmIGZpbHRlclZhbHVlQ3RybCAmJiBjbG9uZWRNb2RlbC5hdHRyaWJ1dGUpIHtcbiAgICAgICAgLy8gU3RvcmUgdGhlIGNvcGllZCB2YWx1ZSBpbiB0aGUgZm9ybSBtb2RlbCBiZWZvcmUgdHJpZ2dlcmluZyByZWJ1aWxkXG4gICAgICAgIGNvbnN0IGNvcGllZFZhbHVlID0gY2xvbmVkTW9kZWwuX2NvcGllZFZhbHVlO1xuICAgICAgICBcbiAgICAgICAgLy8gVGVtcG9yYXJpbHkgY2xlYXIgdGhlIGF0dHJpYnV0ZSB0byBmb3JjZSBhIGNoYW5nZSBldmVudFxuICAgICAgICBhdHRyQ3RybC5zZXRWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBUaGVuIHJlc3RvcmUgaXQgdG8gdHJpZ2dlciB0aGUgZmllbGQgdHlwZSByZWJ1aWxkXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGF0dHJDdHJsLnNldFZhbHVlKGNsb25lZE1vZGVsLmF0dHJpYnV0ZSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gRW5zdXJlIHRoZSBjb3BpZWQgdmFsdWUgaXMgc3RpbGwgYXZhaWxhYmxlIGFmdGVyIHRoZSByZWJ1aWxkXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29waWVkVmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhbmV3Um93Rm9ybS52YWx1ZS5fY29waWVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgLy8gUmUtYWRkIHRoZSBjb3BpZWQgdmFsdWUgaWYgaXQgd2FzIGxvc3QgZHVyaW5nIHJlYnVpbGRcbiAgICAgICAgICAgICAgbmV3Um93Rm9ybS5wYXRjaFZhbHVlKHsgX2NvcGllZFZhbHVlOiBjb3BpZWRWYWx1ZSB9KTtcbiAgICAgICAgICAgICAgZmlsdGVyVmFsdWVDdHJsLnNldFZhbHVlKGNvcGllZFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCA1MCk7XG4gICAgICAgIH0sIDEwKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBcbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5maWVsZC5maWVsZEdyb3VwLnNwbGljZSgwLCB0aGlzLmZpZWxkLmZpZWxkR3JvdXAubGVuZ3RoKTsgLy8gY2xlYXJcbiAgICB0aGlzLmFkZCgpOyAvLyBzdGFydCBmcmVzaCB3aXRoIG9uZSByb3dcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwic2EtcXVlcnktYnVpbGRlci1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXItYm9keVwiPlxuICAgIEBmb3Ioc3ViRmllbGQgb2YgZmllbGQuZmllbGRHcm91cDsgdHJhY2sgc3ViRmllbGQuaWQgfHwgJGluZGV4KSB7XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWJhc2VsaW5lIHF1ZXJ5LXJvd1wiIFtAcm93QW5pbWF0aW9uXT5cbiAgICAgICAgQGlmICgkaW5kZXggPT09IDApIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIndoZXJlLXRleHQgZmxleC0xXCI+V2hlcmU8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgQGZvciAoaW5uZXJGaWVsZCBvZiBzdWJGaWVsZC5maWVsZEdyb3VwOyB0cmFjayBpbm5lckZpZWxkLmtleSB8fCAkaW5kZXgpIHtcbiAgICAgICAgICBAaWYoISFpbm5lckZpZWxkLnByb3BzWydoYXNEeW5hbWljVHlwZSddKXtcbiAgICAgICAgICAgIEBzd2l0Y2ggKGdldEZpbHRlclR5cGUoaW5uZXJGaWVsZCkpIHtcbiAgICAgICAgICAgICAgQGNhc2UgKCdTVFJJTkcnKSB7XG4gICAgICAgICAgICAgICAgPGZvcm1seS1maWVsZCBbZmllbGRdPVwiaW5uZXJGaWVsZFwiPjwvZm9ybWx5LWZpZWxkPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAY2FzZSAoJ05VTUJFUicpIHtcbiAgICAgICAgICAgICAgICA8Zm9ybWx5LWZpZWxkIFtmaWVsZF09XCJpbm5lckZpZWxkXCI+PC9mb3JtbHktZmllbGQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBjYXNlICgnQk9PTEVBTicpIHtcbiAgICAgICAgICAgICAgICAgIDxmb3JtbHktZmllbGQgW2ZpZWxkXT1cImlubmVyRmllbGRcIj48L2Zvcm1seS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICgnQ1VSUkVOQ1knKSB7XG4gICAgICAgICAgICAgICAgICAgIDxmb3JtbHktZmllbGQgW2ZpZWxkXT1cImlubmVyRmllbGRcIj48L2Zvcm1seS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICgnREFURScpIHtcblxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKCdTRUxFQ1QnKSB7XG4gICAgICAgICAgICAgICAgICA8Zm9ybWx5LWZpZWxkIFtmaWVsZF09XCJjcmVhdGVGaWVsZChpbm5lckZpZWxkKVwiPjwvZm9ybWx5LWZpZWxkPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgICAgPGZvcm1seS1maWVsZCBbZmllbGRdPVwiY3JlYXRlRmllbGQoaW5uZXJGaWVsZClcIj48L2Zvcm1seS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9QGVsc2V7XG4gICAgICAgICAgICA8Zm9ybWx5LWZpZWxkXG4gICAgICAgICAgICBjbGFzcz1cImNvbFwiXG4gICAgICAgICAgICBbZmllbGRdPVwiaW5uZXJGaWVsZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvZm9ybWx5LWZpZWxkPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAaWYocHJvcHM/Llsnc2hvd0NvcHlCdXR0b24nXSl7XG4gICAgICAgIDxzYS1pY29uIGljb249XCJjb3B5T3V0bGluZWRcIiBjbGFzcz1cImNvcHktaWNvbiBwb2ludGVyXCIgKGNsaWNrKT1cImNvcHkoJGluZGV4KVwiPjwvc2EtaWNvbj5cbiAgICAgICAgfVxuICAgICAgICA8c2EtaWNvbiBpY29uPVwiZGVsZXRlSWNvblwiIGNsYXNzPVwiZGVsZXRlLWljb24gcG9pbnRlclwiIChjbGljayk9XCJyZW1vdmUoJGluZGV4KVwiPjwvc2EtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgXG4gICAgPCEtLSBCdXR0b25zIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJydWxlLWJ1dHRvbi1jb250YWluZXJcIj5cbiAgICAgIDxzYS1idXR0b24gaWNvbj1cImFkZFwiIGljb25Qb3NpdGlvbj1cImxlZnRcIiB0ZXh0PVwiQWRkIGZpbHRlclwiXG4gICAgICAob25DbGlja0V2ZW50KT1cImFkZCgpXCJcbiAgICAgIFtzdGF0ZV09XCJmaWVsZD8uZmllbGRHcm91cD8ubGVuZ3RoID09PSAocHJvcHM/LlsnbWF4Um93cyddIHx8IDUpID8gJ2Rpc2FibGVkJyA6ICdkZWZhdWx0J1wiXG4gICAgICB0eXBlPVwib3V0bGluZVwiIHNpemU9XCJtZWRpdW1cIj5cbiAgICAgIDwvc2EtYnV0dG9uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXJzLWNvdW50XCI+KHt7ZmllbGQ/LmZpZWxkR3JvdXA/Lmxlbmd0aH19L3t7cHJvcHM/LlsnbWF4Um93cyddIHx8IDV9fSBmaWx0ZXJzKTwvc3Bhbj5cbiAgICAgIEBpZihwcm9wcz8uWydzaG93UmVzZXRCdXR0b24nXSl7XG4gICAgICA8c2EtYnV0dG9uIGljb25Qb3NpdGlvbj1cImxlZnRcIiB0ZXh0PVwiUmVzZXRcIlxuICAgICAgKG9uQ2xpY2tFdmVudCk9XCJyZXNldCgpXCJcbiAgICAgIHR5cGU9XCJwcmltYXJ5XCIgc2l6ZT1cIm1lZGl1bVwiPlxuICAgICAgPC9zYS1idXR0b24+XG4gICAgICB9XG4gICAgPC9kaXY+ICAgIFxuICAgIDwvZGl2PlxuPC9kaXY+Il19