@cqa-lib/cqa-ui 1.0.90 → 1.0.93

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.
@@ -473,10 +473,10 @@ export class DynamicSelectFieldComponent {
473
473
  }
474
474
  }
475
475
  DynamicSelectFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DynamicSelectFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
476
- DynamicSelectFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: { form: "form", config: "config" }, outputs: { selectionChange: "selectionChange", selectClick: "selectClick", searchChange: "searchChange", loadMore: "loadMore" }, host: { listeners: { "document:click": "handleDocumentClick($event)" } }, viewQueries: [{ propertyName: "selectRef", first: true, predicate: ["selectRef"], descendants: true }, { propertyName: "hostEl", first: true, predicate: ["host"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\">\n <ng-container [formGroup]=\"form\">\n <label *ngIf=\"config.label\"\n class=\"form-label cqa-text-[#374151] cqa-text-[14px] cqa-font-medium cqa-block cqa-leading-[1.4] cqa-mb-2\">{{\n config.label }}</label>\n <mat-form-field #host class=\"mat-select-custom cqa-w-full\" appearance=\"fill\">\n <mat-select #selectRef=\"matSelect\" [placeholder]=\"displayPlaceholder\" [disabled]=\"isDisabled\" [multiple]=\"isMultiple\"\n disableOptionCentering [panelClass]=\"panelClass\" [formControlName]=\"config.key\"\n (openedChange)=\"onSelectOpenedChange($event, selectRef)\" (selectionChange)=\"onSelectionChange($event, selectRef)\">\n\n <mat-option *ngIf=\"config.searchable\" class=\"ts-select-search\" disabled>\n <input class=\"ts-select-search-input cqa-text-black-100\" type=\"text\" [value]=\"searchTextByKey[config.key] || ''\"\n (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\" (input)=\"onSearch(config.key, $any($event.target).value)\"\n placeholder=\"Search...\" />\n </mat-option>\n \n <mat-option [ngClass]=\"{'checkmark': config.optionStyle === 'checkmark','checkbox': config.optionStyle !== 'checkmark','mat-selected': allSelected}\" [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngIf=\"isMultiple && config.showSelectAll\" [value]=\"SELECT_ALL_VALUE\">\n <ng-container *ngIf=\"useCheckboxStyle; else selectAllDefaultTpl\">\n <span class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n [ngStyle]=\"allSelected ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n <svg *ngIf=\"allSelected\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span class=\"cqa-min-w-0\">{{ config.selectAllLabel || 'All' }}</span>\n </span>\n </ng-container>\n <ng-template #selectAllDefaultTpl>\n {{ config.selectAllLabel || 'All' }}\n </ng-template>\n </mat-option>\n\n <mat-option [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngFor=\"let opt of filteredOptions(config)\" [value]=\"opt.id ?? opt.value\">\n <ng-container *ngIf=\"useCheckboxStyle; else defaultOptionTpl\">\n <span class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n [ngStyle]=\"isOptionSelected(opt) ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n <svg *ngIf=\"isOptionSelected(opt)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span class=\"cqa-min-w-0\">{{ opt.name ?? opt.label ?? opt.value }}</span>\n </span>\n </ng-container>\n <ng-template #defaultOptionTpl>\n {{ opt.name ?? opt.label ?? opt.value }}\n </ng-template>\n </mat-option>\n \n <!-- No results state (only when not loading and no options) -->\n <mat-option disabled *ngIf=\"!(config?.options?.length || 0) && !(config?.isLoading || loadingMore)\">\n No results\n </mat-option>\n <!-- Infinite scroll sentinel (serverSearch or explicit hasMore) -->\n <mat-option disabled class=\"load-more-sentinel\" *ngIf=\"config?.hasMore\">\n <span *ngIf=\"config?.isLoading || loadingMore\">Loading...</span>\n <span *ngIf=\"!(config?.isLoading || loadingMore)\">Scroll to load more\u2026</span>\n </mat-option>\n </mat-select>\n\n <div>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </mat-form-field>\n </ng-container>\n</div>", components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
476
+ DynamicSelectFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: { form: "form", config: "config" }, outputs: { selectionChange: "selectionChange", selectClick: "selectClick", searchChange: "searchChange", loadMore: "loadMore" }, host: { listeners: { "document:click": "handleDocumentClick($event)" } }, viewQueries: [{ propertyName: "selectRef", first: true, predicate: ["selectRef"], descendants: true }, { propertyName: "hostEl", first: true, predicate: ["host"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\">\n <ng-container [formGroup]=\"form\">\n <label *ngIf=\"config.label\"\n class=\"form-label cqa-text-[#374151] cqa-text-[14px] cqa-font-medium cqa-block cqa-leading-[1.4] cqa-mb-2\">{{\n config.label }}</label>\n <mat-form-field #host class=\"mat-select-custom cqa-w-full\" appearance=\"fill\">\n <mat-select #selectRef=\"matSelect\" [placeholder]=\"displayPlaceholder\" [disabled]=\"isDisabled\" [multiple]=\"isMultiple\"\n disableOptionCentering [panelClass]=\"panelClass\" [formControlName]=\"config.key\"\n (openedChange)=\"onSelectOpenedChange($event, selectRef)\" (selectionChange)=\"onSelectionChange($event, selectRef)\">\n\n <mat-option *ngIf=\"config.searchable\" class=\"ts-select-search\" disabled>\n <input class=\"ts-select-search-input cqa-text-black-100\" type=\"text\" [value]=\"searchTextByKey[config.key] || ''\"\n (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\" (input)=\"onSearch(config.key, $any($event.target).value)\"\n placeholder=\"Search...\" />\n </mat-option>\n \n <mat-option [ngClass]=\"{'checkmark': config.optionStyle === 'checkmark','checkbox': config.optionStyle !== 'checkmark','mat-selected': allSelected}\" [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngIf=\"isMultiple && config.showSelectAll\" [value]=\"SELECT_ALL_VALUE\">\n <ng-container *ngIf=\"useCheckboxStyle; else selectAllDefaultTpl\">\n <span class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n [ngStyle]=\"allSelected ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n <svg *ngIf=\"allSelected\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span class=\"cqa-min-w-0\">{{ config.selectAllLabel || 'All' }}</span>\n </span>\n </ng-container>\n <ng-template #selectAllDefaultTpl>\n {{ config.selectAllLabel || 'All' }}\n </ng-template>\n </mat-option>\n\n <mat-option [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngFor=\"let opt of filteredOptions(config)\" [value]=\"opt.id ?? opt.value\">\n <ng-container *ngIf=\"useCheckboxStyle; else defaultOptionTpl\">\n <span class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n [ngStyle]=\"isOptionSelected(opt) ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n <svg *ngIf=\"isOptionSelected(opt)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span class=\"cqa-min-w-0\">{{ opt.name ?? opt.label ?? opt.value }}</span>\n </span>\n </ng-container>\n <ng-template #defaultOptionTpl>\n {{ opt.name ?? opt.label ?? opt.value }}\n </ng-template>\n </mat-option>\n \n <!-- No results state (only when not loading and no options) -->\n <mat-option disabled *ngIf=\"!(config?.options?.length || 0) && !(config?.isLoading || loadingMore)\">\n No results\n </mat-option>\n <!-- Infinite scroll sentinel (serverSearch or explicit hasMore) -->\n <mat-option disabled class=\"load-more-sentinel\" *ngIf=\"config?.hasMore\">\n <span *ngIf=\"config?.isLoading || loadingMore\">Loading...</span>\n <span *ngIf=\"!(config?.isLoading || loadingMore)\">Scroll to load more\u2026</span>\n </mat-option>\n </mat-select>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Inline spinner shown while loading options -->\n <svg *ngIf=\"config?.isLoading || loadingMore\" width=\"16\" height=\"16\" viewBox=\"0 0 50 50\" aria-label=\"loading\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"25\" cy=\"25\" r=\"20\" stroke=\"#E5E7EB\" stroke-width=\"6\" fill=\"none\"/>\n <path d=\"M45 25a20 20 0 0 0-20-20\" stroke=\"#4F46E5\" stroke-width=\"6\" fill=\"none\" stroke-linecap=\"round\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 25 25\" to=\"360 25 25\"\n dur=\"0.8s\" repeatCount=\"indefinite\"/>\n </path>\n </svg>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </mat-form-field>\n </ng-container>\n</div>", components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
477
477
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DynamicSelectFieldComponent, decorators: [{
478
478
  type: Component,
479
- args: [{ selector: 'cqa-dynamic-select', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-ui-root\">\n <ng-container [formGroup]=\"form\">\n <label *ngIf=\"config.label\"\n class=\"form-label cqa-text-[#374151] cqa-text-[14px] cqa-font-medium cqa-block cqa-leading-[1.4] cqa-mb-2\">{{\n config.label }}</label>\n <mat-form-field #host class=\"mat-select-custom cqa-w-full\" appearance=\"fill\">\n <mat-select #selectRef=\"matSelect\" [placeholder]=\"displayPlaceholder\" [disabled]=\"isDisabled\" [multiple]=\"isMultiple\"\n disableOptionCentering [panelClass]=\"panelClass\" [formControlName]=\"config.key\"\n (openedChange)=\"onSelectOpenedChange($event, selectRef)\" (selectionChange)=\"onSelectionChange($event, selectRef)\">\n\n <mat-option *ngIf=\"config.searchable\" class=\"ts-select-search\" disabled>\n <input class=\"ts-select-search-input cqa-text-black-100\" type=\"text\" [value]=\"searchTextByKey[config.key] || ''\"\n (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\" (input)=\"onSearch(config.key, $any($event.target).value)\"\n placeholder=\"Search...\" />\n </mat-option>\n \n <mat-option [ngClass]=\"{'checkmark': config.optionStyle === 'checkmark','checkbox': config.optionStyle !== 'checkmark','mat-selected': allSelected}\" [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngIf=\"isMultiple && config.showSelectAll\" [value]=\"SELECT_ALL_VALUE\">\n <ng-container *ngIf=\"useCheckboxStyle; else selectAllDefaultTpl\">\n <span class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n [ngStyle]=\"allSelected ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n <svg *ngIf=\"allSelected\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span class=\"cqa-min-w-0\">{{ config.selectAllLabel || 'All' }}</span>\n </span>\n </ng-container>\n <ng-template #selectAllDefaultTpl>\n {{ config.selectAllLabel || 'All' }}\n </ng-template>\n </mat-option>\n\n <mat-option [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngFor=\"let opt of filteredOptions(config)\" [value]=\"opt.id ?? opt.value\">\n <ng-container *ngIf=\"useCheckboxStyle; else defaultOptionTpl\">\n <span class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n [ngStyle]=\"isOptionSelected(opt) ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n <svg *ngIf=\"isOptionSelected(opt)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span class=\"cqa-min-w-0\">{{ opt.name ?? opt.label ?? opt.value }}</span>\n </span>\n </ng-container>\n <ng-template #defaultOptionTpl>\n {{ opt.name ?? opt.label ?? opt.value }}\n </ng-template>\n </mat-option>\n \n <!-- No results state (only when not loading and no options) -->\n <mat-option disabled *ngIf=\"!(config?.options?.length || 0) && !(config?.isLoading || loadingMore)\">\n No results\n </mat-option>\n <!-- Infinite scroll sentinel (serverSearch or explicit hasMore) -->\n <mat-option disabled class=\"load-more-sentinel\" *ngIf=\"config?.hasMore\">\n <span *ngIf=\"config?.isLoading || loadingMore\">Loading...</span>\n <span *ngIf=\"!(config?.isLoading || loadingMore)\">Scroll to load more\u2026</span>\n </mat-option>\n </mat-select>\n\n <div>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </mat-form-field>\n </ng-container>\n</div>", styles: [] }]
479
+ args: [{ selector: 'cqa-dynamic-select', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-ui-root\">\n <ng-container [formGroup]=\"form\">\n <label *ngIf=\"config.label\"\n class=\"form-label cqa-text-[#374151] cqa-text-[14px] cqa-font-medium cqa-block cqa-leading-[1.4] cqa-mb-2\">{{\n config.label }}</label>\n <mat-form-field #host class=\"mat-select-custom cqa-w-full\" appearance=\"fill\">\n <mat-select #selectRef=\"matSelect\" [placeholder]=\"displayPlaceholder\" [disabled]=\"isDisabled\" [multiple]=\"isMultiple\"\n disableOptionCentering [panelClass]=\"panelClass\" [formControlName]=\"config.key\"\n (openedChange)=\"onSelectOpenedChange($event, selectRef)\" (selectionChange)=\"onSelectionChange($event, selectRef)\">\n\n <mat-option *ngIf=\"config.searchable\" class=\"ts-select-search\" disabled>\n <input class=\"ts-select-search-input cqa-text-black-100\" type=\"text\" [value]=\"searchTextByKey[config.key] || ''\"\n (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\" (input)=\"onSearch(config.key, $any($event.target).value)\"\n placeholder=\"Search...\" />\n </mat-option>\n \n <mat-option [ngClass]=\"{'checkmark': config.optionStyle === 'checkmark','checkbox': config.optionStyle !== 'checkmark','mat-selected': allSelected}\" [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngIf=\"isMultiple && config.showSelectAll\" [value]=\"SELECT_ALL_VALUE\">\n <ng-container *ngIf=\"useCheckboxStyle; else selectAllDefaultTpl\">\n <span class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n [ngStyle]=\"allSelected ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n <svg *ngIf=\"allSelected\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span class=\"cqa-min-w-0\">{{ config.selectAllLabel || 'All' }}</span>\n </span>\n </ng-container>\n <ng-template #selectAllDefaultTpl>\n {{ config.selectAllLabel || 'All' }}\n </ng-template>\n </mat-option>\n\n <mat-option [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngFor=\"let opt of filteredOptions(config)\" [value]=\"opt.id ?? opt.value\">\n <ng-container *ngIf=\"useCheckboxStyle; else defaultOptionTpl\">\n <span class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n [ngStyle]=\"isOptionSelected(opt) ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n <svg *ngIf=\"isOptionSelected(opt)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span class=\"cqa-min-w-0\">{{ opt.name ?? opt.label ?? opt.value }}</span>\n </span>\n </ng-container>\n <ng-template #defaultOptionTpl>\n {{ opt.name ?? opt.label ?? opt.value }}\n </ng-template>\n </mat-option>\n \n <!-- No results state (only when not loading and no options) -->\n <mat-option disabled *ngIf=\"!(config?.options?.length || 0) && !(config?.isLoading || loadingMore)\">\n No results\n </mat-option>\n <!-- Infinite scroll sentinel (serverSearch or explicit hasMore) -->\n <mat-option disabled class=\"load-more-sentinel\" *ngIf=\"config?.hasMore\">\n <span *ngIf=\"config?.isLoading || loadingMore\">Loading...</span>\n <span *ngIf=\"!(config?.isLoading || loadingMore)\">Scroll to load more\u2026</span>\n </mat-option>\n </mat-select>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Inline spinner shown while loading options -->\n <svg *ngIf=\"config?.isLoading || loadingMore\" width=\"16\" height=\"16\" viewBox=\"0 0 50 50\" aria-label=\"loading\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"25\" cy=\"25\" r=\"20\" stroke=\"#E5E7EB\" stroke-width=\"6\" fill=\"none\"/>\n <path d=\"M45 25a20 20 0 0 0-20-20\" stroke=\"#4F46E5\" stroke-width=\"6\" fill=\"none\" stroke-linecap=\"round\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 25 25\" to=\"360 25 25\"\n dur=\"0.8s\" repeatCount=\"indefinite\"/>\n </path>\n </svg>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </mat-form-field>\n </ng-container>\n</div>", styles: [] }]
480
480
  }], propDecorators: { form: [{
481
481
  type: Input
482
482
  }], config: [{
@@ -499,4 +499,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
499
499
  type: HostListener,
500
500
  args: ['document:click', ['$event']]
501
501
  }] } });
502
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFvQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBa0R2SyxNQUFNLE9BQU8sMkJBQTJCO0lBTnhDO1FBT1cscUJBQWdCLEdBQVcsZ0JBQWdCLENBQUM7UUFHM0Msb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBdUQsQ0FBQztRQUMxRixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDakQscUVBQXFFO1FBQzNELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWtDLENBQUM7UUFDNUUsd0VBQXdFO1FBQzlELGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBa0MsQ0FBQztRQUt4RSxnRkFBZ0Y7UUFDaEYsb0JBQWUsR0FBMkIsRUFBRSxDQUFDO1FBR3JDLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUM5QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVaLGtCQUFhLEdBQUcsR0FBRyxFQUFFO1lBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVztnQkFBRSxPQUFPO1lBQ3RELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDOUIsSUFBSSxDQUFDLEVBQUU7Z0JBQUUsT0FBTztZQUNoQixNQUFNLFVBQVUsR0FBRyxF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QTJCLHFkQVlJLFVBQVUsa0RDOUR0RCxxcEpBc0VNOzJGRHBCTywyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0Usb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU07OEJBSXRDLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLFlBQVk7c0JBQXJCLE1BQU07Z0JBRUcsUUFBUTtzQkFBakIsTUFBTTtnQkFFb0MsU0FBUztzQkFBbkQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNlLE1BQU07c0JBQTdELFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQTBYdEQsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFNlbGVjdCwgTWF0U2VsZWN0Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcblxuLy8gTG9jYWwgb3B0aW9uIG1vZGVsIChwcmV2aW91c2x5IGltcG9ydGVkIGZyb20gcmVtb3ZlZCBjcWEtc2VsZWN0IGNvbXBvbmVudClcbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uIHtcbiAgaWQ/OiBhbnk7XG4gIHZhbHVlPzogYW55O1xuICBuYW1lPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICBrZXk6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gIC8qKiBDb250cm9scyBob3cgc2VsZWN0aW9uIGluZGljYXRvciBpcyBzaG93biBmb3IgbXVsdGktc2VsZWN0IG9wdGlvbnMuICovXG4gIG9wdGlvblN0eWxlPzogJ2NoZWNrbWFyaycgfCAnY2hlY2tib3gnO1xuICAvKiogU2hvdyBhICdTZWxlY3QgQWxsJyBvcHRpb24gYXQgdGhlIHRvcCAobXVsdGktc2VsZWN0IG9ubHkpLiAqL1xuICBzaG93U2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgLyoqIEN1c3RvbSBsYWJlbCBmb3IgdGhlICdTZWxlY3QgQWxsJyBvcHRpb24uIERlZmF1bHRzIHRvICdBbGwnLiAqL1xuICBzZWxlY3RBbGxMYWJlbD86IHN0cmluZztcbiAgLyoqIElmIHRydWUsIGNsb3NlIHRoZSBwYW5lbCB3aGVuIGFuIG9wdGlvbiBpcyBzZWxlY3RlZCAodXNlZnVsIGZvciBtdWx0aS1zZWxlY3QgaW4gaGVhZGVycykuICovXG4gIGNsb3NlT25TZWxlY3Q/OiBib29sZWFuO1xuICAvKiogUHJvdmlkZSBhIGRlZmF1bHQgc2VsZWN0ZWQgdmFsdWUgKG9yIGFycmF5IGZvciBtdWx0aS1zZWxlY3QpIGlmIHRoZSBjb250cm9sIGhhcyBubyB2YWx1ZSB5ZXQuICovXG4gIHNlbGVjdGVkVmFsdWU/OiBhbnkgfCBhbnlbXTtcbiAgLyoqIE9wdGlvbmFsIGNhbGxiYWNrIGludm9rZWQgd2hlbmV2ZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLiAqL1xuICBvbkNoYW5nZT86ICh2YWx1ZTogYW55LCBldmVudD86IE1hdFNlbGVjdENoYW5nZSkgPT4gdm9pZDtcbiAgLyoqIEVuYWJsZSBzZXJ2ZXItc2lkZSBzZWFyY2ggbW9kZTsgY29tcG9uZW50IHdpbGwgZW1pdCBzZWFyY2ggaW5zdGVhZCBvZiBsb2NhbCBmaWx0ZXJpbmcuICovXG4gIHNlcnZlclNlYXJjaD86IGJvb2xlYW47XG4gIC8qKiBJbmRpY2F0ZXMgbW9yZSByZXN1bHRzIGFyZSBhdmFpbGFibGUgZm9yIGluZmluaXRlIHNjcm9sbC4gKi9cbiAgaGFzTW9yZT86IGJvb2xlYW47XG4gIC8qKiBPcHRpb25hbCBsb2FkaW5nIGZsYWcgY29udHJvbGxlZCBieSBjb25zdW1lciB0byBzaG93IGxvYWRpbmcgc3RhdGUuICovXG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBPcHRpb25hbCBjYWxsYmFjayBmb3Igc2VydmVyLXNpZGUgc2VhcmNoIHdoZW4gcXVlcnkgY2hhbmdlcy4gKi9cbiAgb25TZWFyY2g/OiAocXVlcnk6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIE9wdGlvbmFsIGNhbGxiYWNrIHdoZW4gbW9yZSBkYXRhIGlzIHJlcXVlc3RlZCAoaW5maW5pdGUgc2Nyb2xsKS4gKi9cbiAgb25Mb2FkTW9yZT86IChxdWVyeT86IHN0cmluZykgPT4gdm9pZDtcbiAgb3B0aW9uczogU2VsZWN0T3B0aW9uW107XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1keW5hbWljLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNTZWxlY3RGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgcmVhZG9ubHkgU0VMRUNUX0FMTF9WQUxVRTogc3RyaW5nID0gJ19fc2VsZWN0X2FsbF9fJztcbiAgQElucHV0KCkgZm9ybSE6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgY29uZmlnITogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGtleTogc3RyaW5nOyB2YWx1ZTogYW55OyBldmVudDogTWF0U2VsZWN0Q2hhbmdlIH0+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIEVtaXRzIHdoZW4gdXNlciB0eXBlcyBpbiBzZWFyY2ggYm94ICh1c2VmdWwgZm9yIHNlcnZlciBzZWFyY2gpICovXG4gIEBPdXRwdXQoKSBzZWFyY2hDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmc7IHF1ZXJ5OiBzdHJpbmcgfT4oKTtcbiAgLyoqIEVtaXRzIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyBtb3JlIGRhdGEgZm9yIHRoZSBjdXJyZW50IHF1ZXJ5ICovXG4gIEBPdXRwdXQoKSBsb2FkTW9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZzsgcXVlcnk6IHN0cmluZyB9PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdFJlZicsIHsgc3RhdGljOiBmYWxzZSB9KSBzZWxlY3RSZWY/OiBNYXRTZWxlY3Q7XG4gIEBWaWV3Q2hpbGQoJ2hvc3QnLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSkgaG9zdEVsPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgLy8gTXVzdCBiZSBwdWJsaWMgZm9yIHRlbXBsYXRlIGFjY2VzcyBpbiBBbmd1bGFyJ3Mgc3RyaWN0IHRlbXBsYXRlIGNoZWNraW5nIG1vZGVcbiAgc2VhcmNoVGV4dEJ5S2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHByaXZhdGUgb3V0c2lkZUNsZWFudXA/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGxvYWRNb3JlT2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBsYXN0T3B0aW9uc0xlbmd0aCA9IDA7XG4gIGxvYWRpbmdNb3JlID0gZmFsc2U7XG4gIHByaXZhdGUgcGFuZWxTY3JvbGxFbD86IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIG9uUGFuZWxTY3JvbGwgPSAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZz8uaGFzTW9yZSB8fCB0aGlzLmxvYWRpbmdNb3JlKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSB0aGlzLnBhbmVsU2Nyb2xsRWw7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIGNvbnN0IG5lYXJCb3R0b20gPSBlbC5zY3JvbGxUb3AgKyBlbC5jbGllbnRIZWlnaHQgPj0gZWwuc2Nyb2xsSGVpZ2h0IC0gNDg7IC8vIH4zIG9wdGlvbiByb3dzXG4gICAgaWYgKG5lYXJCb3R0b20pIHtcbiAgICAgIHRoaXMubG9hZGluZ01vcmUgPSB0cnVlO1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWc/LmtleSB8fCAnJztcbiAgICAgIGNvbnN0IHEgPSB0aGlzLnNlYXJjaFRleHRCeUtleVtrZXldIHx8ICcnO1xuICAgICAgdGhpcy5sb2FkTW9yZS5lbWl0KHsga2V5LCBxdWVyeTogcSB9KTtcbiAgICAgIHRyeSB7IHRoaXMuY29uZmlnLm9uTG9hZE1vcmU/LihxKTsgfSBjYXRjaCB7fVxuICAgIH1cbiAgfTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnIHx8ICF0aGlzLmNvbmZpZy5rZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3FhLWR5bmFtaWMtc2VsZWN0OiBpbnB1dCBcImNvbmZpZy5rZXlcIiBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG4gICAgdGhpcy5hcHBseVNlbGVjdGVkVmFsdWVJZk5lZWRlZCgpO1xuICAgIHRoaXMubGFzdE9wdGlvbnNMZW5ndGggPSAodGhpcy5jb25maWc/Lm9wdGlvbnMgfHwgW10pLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBkaXNwbGF5UGxhY2Vob2xkZXIoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5O1xuICAgIGlmICgha2V5IHx8ICF0aGlzLmZvcm0pIHJldHVybiB0aGlzLmNvbmZpZz8ucGxhY2Vob2xkZXI7XG4gICAgY29uc3QgY29udHJvbFZhbHVlID0gdGhpcy5mb3JtLmdldChrZXkpPy52YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5oYXNFeGlzdGluZ1ZhbHVlKGNvbnRyb2xWYWx1ZSkgPyB1bmRlZmluZWQgOiB0aGlzLmNvbmZpZz8ucGxhY2Vob2xkZXI7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCdjb25maWcnIGluIGNoYW5nZXMpIHtcbiAgICAgIC8vIFdoZW4gY29uZmlnIGNoYW5nZXMgKGluY2x1ZGluZyB0b2dnbGluZyBtdWx0aXBsZSksIGVuc3VyZSBjb250cm9sIHZhbHVlIHNoYXBlIG1hdGNoZXNcbiAgICAgIHRoaXMuc3luY0NvbnRyb2xWYWx1ZUZvck11bHRpcGxlTW9kZSgpO1xuICAgICAgdGhpcy5hcHBseVNlbGVjdGVkVmFsdWVJZk5lZWRlZCgpO1xuICAgICAgLy8gUmVzZXQgbG9hZGluZ01vcmUgd2hlbiBuZXcgb3B0aW9ucyBhcnJpdmUgKG9wdGlvbnMgbGVuZ3RoIGluY3JlYXNlZClcbiAgICAgIGNvbnN0IGxlbiA9ICh0aGlzLmNvbmZpZz8ub3B0aW9ucyB8fCBbXSkubGVuZ3RoO1xuICAgICAgaWYgKGxlbiA+IHRoaXMubGFzdE9wdGlvbnNMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9yZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0T3B0aW9uc0xlbmd0aCA9IGxlbjtcbiAgICAgIC8vIElmIHBhbmVsIGlzIG9wZW4gYW5kIGhhc01vcmUgaXMgdHJ1ZSwgZW5zdXJlIHRoZSBzZW50aW5lbCBpcyBiZWluZyBvYnNlcnZlZC5cbiAgICAgIGlmICh0aGlzLnNlbGVjdFJlZj8ucGFuZWxPcGVuICYmIHRoaXMuY29uZmlnPy5oYXNNb3JlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXR1cExvYWRNb3JlT2JzZXJ2ZXIoKSwgMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgnZm9ybScgaW4gY2hhbmdlcyAmJiAhY2hhbmdlc1snZm9ybSddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLmFwcGx5U2VsZWN0ZWRWYWx1ZUlmTmVlZGVkKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHBhbmVsQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGN0Yy1zZWxlY3QtcGFuZWwgJHt0aGlzLmlzTXVsdGlwbGUgPyAnbXVsdGlwbGUnIDogJyd9YC50cmltKCk7XG4gIH1cblxuICBnZXQgaXNNdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b0Jvb2xlYW4odGhpcy5jb25maWc/Lm11bHRpcGxlKTtcbiAgfVxuXG4gIGdldCBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRvQm9vbGVhbih0aGlzLmNvbmZpZz8uZGlzYWJsZWQpO1xuICB9XG4gIFxuICBnZXQgdXNlQ2hlY2tib3hTdHlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc011bHRpcGxlICYmICh0aGlzLmNvbmZpZz8ub3B0aW9uU3R5bGUgPT09ICdjaGVja2JveCcpO1xuICB9XG4gIFxuICBnZXQgYWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmlzTXVsdGlwbGUpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5O1xuICAgIGlmICgha2V5IHx8ICF0aGlzLmZvcm0pIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChrZXkpO1xuICAgIGlmICghY29udHJvbCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gY29udHJvbC52YWx1ZSBhcyBhbnlbXTtcbiAgICBjb25zdCBhbGxJZHMgPSB0aGlzLmdldEFsbE9wdGlvbklkcygpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzZWxlY3RlZCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIWFsbElkcy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gYWxsSWRzLmV2ZXJ5KGlkID0+IHNlbGVjdGVkLmluY2x1ZGVzKGlkKSk7XG4gIH1cblxuICBwcml2YXRlIHRvQm9vbGVhbih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB2ID0gdmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAodiA9PT0gJ3RydWUnIHx8IHYgPT09ICcxJykgcmV0dXJuIHRydWU7XG4gICAgICBpZiAodiA9PT0gJ2ZhbHNlJyB8fCB2ID09PSAnMCcgfHwgdiA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBhbnkgb3RoZXIgbm9uLWVtcHR5IHN0cmluZyB0cmVhdGVkIGFzIHRydXRoeVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHZhbHVlICE9PSAwO1xuICAgIH1cbiAgICByZXR1cm4gISF2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY0NvbnRyb2xWYWx1ZUZvck11bHRpcGxlTW9kZSgpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5O1xuICAgIGlmICgha2V5IHx8ICF0aGlzLmZvcm0pIHJldHVybjtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChrZXkpO1xuICAgIGlmICghY29udHJvbCkgcmV0dXJuO1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA9PSBudWxsKSByZXR1cm47XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKSByZXR1cm47XG4gICAgICBjb250cm9sLnNldFZhbHVlKFtjdXJyZW50VmFsdWVdLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKSByZXR1cm47XG4gICAgICBjb250cm9sLnNldFZhbHVlKGN1cnJlbnRWYWx1ZS5sZW5ndGggPyBjdXJyZW50VmFsdWVbMF0gOiBudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNlbGVjdGVkVmFsdWVJZk5lZWRlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5O1xuICAgIGlmICgha2V5IHx8ICF0aGlzLmZvcm0pIHJldHVybjtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChrZXkpO1xuICAgIGlmICghY29udHJvbCkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSB0aGlzLmNvbmZpZz8uc2VsZWN0ZWRWYWx1ZTtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICh0aGlzLmhhc0V4aXN0aW5nVmFsdWUoY3VycmVudFZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc2VsZWN0ZWRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHNlbGVjdGVkVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc011bHRpcGxlKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gKEFycmF5LmlzQXJyYXkoc2VsZWN0ZWRWYWx1ZSkgPyBzZWxlY3RlZFZhbHVlIDogW3NlbGVjdGVkVmFsdWVdKS5maWx0ZXIoXG4gICAgICAgICh2YWwpID0+IHZhbCAhPT0gdW5kZWZpbmVkLFxuICAgICAgKTtcbiAgICAgIGlmICghbm9ybWFsaXplZC5sZW5ndGgpIHJldHVybjtcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUobm9ybWFsaXplZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gQXJyYXkuaXNBcnJheShzZWxlY3RlZFZhbHVlKVxuICAgICAgICA/IChzZWxlY3RlZFZhbHVlLmxlbmd0aCA/IHNlbGVjdGVkVmFsdWVbMF0gOiB1bmRlZmluZWQpXG4gICAgICAgIDogc2VsZWN0ZWRWYWx1ZTtcbiAgICAgIGlmIChub3JtYWxpemVkID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUobm9ybWFsaXplZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFzRXhpc3RpbmdWYWx1ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUuc29tZSgodmFsKSA9PiB2YWwgIT09IG51bGwgJiYgdmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSAnJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdmFsdWUudHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaXNPcHRpb25TZWxlY3RlZChvcHQ6IFNlbGVjdE9wdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnPy5rZXk7XG4gICAgaWYgKCFrZXkgfHwgIXRoaXMuZm9ybSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGtleSk7XG4gICAgaWYgKCFjb250cm9sKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgY29udHJvbFZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBjb25zdCBvcHRpb25JZCA9IG9wdC5pZCA/PyBvcHQudmFsdWU7XG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRyb2xWYWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBjb250cm9sVmFsdWUuaW5jbHVkZXMob3B0aW9uSWQpO1xuICAgIH1cbiAgICByZXR1cm4gY29udHJvbFZhbHVlID09PSBvcHRpb25JZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWxsT3B0aW9uSWRzKCk6IGFueVtdIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5jb25maWc/Lm9wdGlvbnMgfHwgW107XG4gICAgcmV0dXJuIG9wdGlvbnMubWFwKG8gPT4gKG8uaWQgPz8gby52YWx1ZSkpLmZpbHRlcih2ID0+IHYgIT09IHVuZGVmaW5lZCk7XG4gIH1cblxuICBvblRvZ2dsZVNlbGVjdEFsbChzZWxlY3Q6IE1hdFNlbGVjdCk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnPy5rZXk7XG4gICAgaWYgKCFrZXkgfHwgIXRoaXMuZm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGtleSk7XG4gICAgaWYgKCFjb250cm9sKSByZXR1cm47XG4gICAgY29uc3QgYWxsSWRzID0gdGhpcy5nZXRBbGxPcHRpb25JZHMoKTtcbiAgICBpZiAoIWFsbElkcy5sZW5ndGgpIHJldHVybjtcbiAgICBpZiAodGhpcy5hbGxTZWxlY3RlZCkge1xuICAgICAgY29udHJvbC5zZXRWYWx1ZShbXSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUoYWxsSWRzLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICB9XG4gICAgLy8gS2VlcCBwYW5lbCBvcGVuIGZvciBjb250aW51ZWQgc2VsZWN0aW9ucyBpbiBtdWx0aS1zZWxlY3RcbiAgICB0cnkgeyBzZWxlY3Qub3BlbigpOyB9IGNhdGNoIHt9XG4gIH1cblxuICBvblNlbGVjdE9wZW5lZENoYW5nZShvcGVuZWQ6IGJvb2xlYW4sIF9zZWxlY3Q6IE1hdFNlbGVjdCk6IHZvaWQge1xuICAgIGlmIChvcGVuZWQpIHtcbiAgICAgIC8vIEVtaXQgY2xpY2sgZXZlbnQgd2hlbiBzZWxlY3QgaXMgb3BlbmVkIChjbGlja2VkKVxuICAgICAgdGhpcy5zZWxlY3RDbGljay5lbWl0KCk7XG4gICAgfVxuICAgIFxuICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAvLyBSZXNldCBzZWFyY2ggdGV4dCBvbiBjbG9zZSBzbyB0aGUgbmV4dCBvcGVuIHNob3dzIGZ1bGwgbGlzdFxuICAgICAgaWYgKHRoaXMuY29uZmlnPy5rZXkpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0QnlLZXlbdGhpcy5jb25maWcua2V5XSA9ICcnO1xuICAgICAgfVxuICAgICAgLy8gRW5zdXJlIGFueSBwcmV2aW91cyBjdXN0b20gbGlzdGVuZXJzIGFyZSBjbGVhcmVkIChsZWdhY3kgY29tcGF0aWJpbGl0eSlcbiAgICAgIGlmICh0aGlzLm91dHNpZGVDbGVhbnVwKSB7XG4gICAgICAgIHRoaXMub3V0c2lkZUNsZWFudXAoKTtcbiAgICAgICAgdGhpcy5vdXRzaWRlQ2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIC8vIERpc2Nvbm5lY3QgbG9hZC1tb3JlIG9ic2VydmVyIGlmIGFueVxuICAgICAgaWYgKHRoaXMubG9hZE1vcmVPYnNlcnZlcikge1xuICAgICAgICB0cnkgeyB0aGlzLmxvYWRNb3JlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOyB9IGNhdGNoIHt9XG4gICAgICAgIHRoaXMubG9hZE1vcmVPYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIC8vIFJlbW92ZSBzY3JvbGwgbGlzdGVuZXIgaWYgYXR0YWNoZWRcbiAgICAgIGlmICh0aGlzLnBhbmVsU2Nyb2xsRWwpIHtcbiAgICAgICAgdHJ5IHsgdGhpcy5wYW5lbFNjcm9sbEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25QYW5lbFNjcm9sbCk7IH0gY2F0Y2gge31cbiAgICAgICAgdGhpcy5wYW5lbFNjcm9sbEVsID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZvY3VzIHRoZSBzZWFyY2ggYm94IGlmIGVuYWJsZWRcbiAgICBpZiAodGhpcy5jb25maWc/LnNlYXJjaGFibGUpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oJy50cy1zZWxlY3Qtc2VhcmNoLWlucHV0Jyk7XG4gICAgICAgIGlucHV0Py5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgLy8gSW4gc2VydmVyU2VhcmNoIG1vZGUsIGlmIG5vIG9wdGlvbnMgeWV0LCB0cmlnZ2VyIGluaXRpYWwgZmV0Y2hcbiAgICBpZiAodGhpcy5jb25maWc/LnNlcnZlclNlYXJjaCkge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcua2V5O1xuICAgICAgY29uc3QgcSA9IHRoaXMuc2VhcmNoVGV4dEJ5S2V5W2tleV0gfHwgJyc7XG4gICAgICB0cnkgeyB0aGlzLmNvbmZpZy5vblNlYXJjaD8uKHEpOyB9IGNhdGNoIHt9XG4gICAgICB0aGlzLnNlYXJjaENoYW5nZS5lbWl0KHsga2V5LCBxdWVyeTogcSB9KTtcbiAgICB9XG5cbiAgICAvLyBTZXR1cCBpbmZpbml0ZSBzY3JvbGwgb2JzZXJ2ZXIgb24gc2VudGluZWxcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0dXBMb2FkTW9yZU9ic2VydmVyKCksIDApO1xuICAgIC8vIEFsc28gYXR0YWNoIGEgc2Nyb2xsIGxpc3RlbmVyIGZhbGxiYWNrIGZvciByZWxpYWJsZSBsb2FkLW1vcmUgdHJpZ2dlcnNcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhbmVscyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm1hdC1zZWxlY3QtcGFuZWwnKSkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICAgICAgdGhpcy5wYW5lbFNjcm9sbEVsID0gcGFuZWxzLmxlbmd0aCA/IHBhbmVsc1twYW5lbHMubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLnBhbmVsU2Nyb2xsRWwpIHtcbiAgICAgICAgICB0aGlzLnBhbmVsU2Nyb2xsRWwuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblBhbmVsU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge31cbiAgICB9LCAwKTtcbiAgfVxuXG4gIG9uU2VhcmNoKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXh0QnlLZXlba2V5XSA9IHZhbHVlID8/ICcnO1xuICAgIGlmICh0aGlzLmNvbmZpZz8uc2VydmVyU2VhcmNoKSB7XG4gICAgICAvLyBGb3Igc2VydmVyLXNpZGUgc2VhcmNoLCBlbWl0IGluc3RlYWQgb2YgbG9jYWwgZmlsdGVyaW5nXG4gICAgICB0cnkgeyB0aGlzLmNvbmZpZy5vblNlYXJjaD8uKHZhbHVlID8/ICcnKTsgfSBjYXRjaCB7fVxuICAgICAgdGhpcy5zZWFyY2hDaGFuZ2UuZW1pdCh7IGtleSwgcXVlcnk6IHZhbHVlID8/ICcnIH0pO1xuICAgICAgLy8gUmVzZXQgaW50ZXJuYWwgcGFnaW5nIHN0YXRlXG4gICAgICB0aGlzLmxvYWRpbmdNb3JlID0gZmFsc2U7XG4gICAgICB0aGlzLmxhc3RPcHRpb25zTGVuZ3RoID0gKHRoaXMuY29uZmlnPy5vcHRpb25zIHx8IFtdKS5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvcHRpb24gaWRzIGZvciB0aGUgY29uZmlndXJlZCBjb250cm9sLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZElkc0ZvcktleShrZXk6IHN0cmluZyk6IGFueVtdIHtcbiAgICBpZiAoIWtleSB8fCAhdGhpcy5mb3JtKSByZXR1cm4gW107XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoa2V5KTtcbiAgICBpZiAoIWNvbnRyb2wpIHJldHVybiBbXTtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwgPyBbdmFsdWVdIDogW107XG4gIH1cblxuICAvKiogUHJvZ3JhbW1hdGljYWxseSBjbG9zZSB0aGUgc2VsZWN0IHBhbmVsIGlmIG9wZW4gKi9cbiAgcHVibGljIGNsb3NlUGFuZWwoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc2VsZWN0UmVmPy5jbG9zZSgpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIGZpbHRlcmVkT3B0aW9ucyhjOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcpOiBTZWxlY3RPcHRpb25bXSB7XG4gICAgY29uc3QgdCA9ICh0aGlzLnNlYXJjaFRleHRCeUtleVtjLmtleV0gfHwgJycpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIC8vIEluIHNlcnZlci1zaWRlIG1vZGUsIHJldHVybiBvcHRpb25zIGFzLWlzIChwYXJlbnQgcHJvdmlkZXMgbGlzdClcbiAgICBpZiAoYy5zZXJ2ZXJTZWFyY2gpIHJldHVybiBjLm9wdGlvbnMgfHwgW107XG4gICAgLy8gV2hlbiBub3Qgc2VhcmNoaW5nLCByZXR1cm4gZnVsbCBsaXN0IHRvIHByZXNlcnZlIG9yaWdpbmFsIG9yZGVyaW5nXG4gICAgaWYgKCF0KSByZXR1cm4gYy5vcHRpb25zIHx8IFtdO1xuXG4gICAgY29uc3QgYWxsT3B0aW9ucyA9IGMub3B0aW9ucyB8fCBbXTtcbiAgICBjb25zdCBiYXNlRmlsdGVyZWQgPSBhbGxPcHRpb25zLmZpbHRlcigob3B0KSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gU3RyaW5nKG9wdC5uYW1lID8/IG9wdC5sYWJlbCA/PyBvcHQudmFsdWUgPz8gJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gdGV4dC5pbmNsdWRlcyh0KTtcbiAgICB9KTtcblxuICAgIC8vIEVuc3VyZSBjdXJyZW50bHkgc2VsZWN0ZWQgb3B0aW9uKHMpIGFyZSBhbHdheXMgdmlzaWJsZSB3aGlsZSBzZWFyY2hpbmdcbiAgICBjb25zdCBzZWxlY3RlZElkcyA9IHRoaXMuZ2V0U2VsZWN0ZWRJZHNGb3JLZXkoYy5rZXkpO1xuICAgIGlmICghc2VsZWN0ZWRJZHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYmFzZUZpbHRlcmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGlkT2YgPSAobzogU2VsZWN0T3B0aW9uKSA9PiAoby5pZCA/PyBvLnZhbHVlKTtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbnMgPSBhbGxPcHRpb25zLmZpbHRlcihvID0+IHNlbGVjdGVkSWRzLmluY2x1ZGVzKGlkT2YobykpKTtcblxuICAgIC8vIE1lcmdlIHNlbGVjdGVkIG9wdGlvbnMgKGtlZXBpbmcgdGhlaXIgb3JpZ2luYWwgb3JkZXIpIHdpdGggZmlsdGVyZWQgb25lcywgZGUtZHVwbGljYXRlZFxuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PGFueT4oKTtcbiAgICBjb25zdCBtZXJnZWQ6IFNlbGVjdE9wdGlvbltdID0gW107XG4gICAgZm9yIChjb25zdCBvIG9mIHNlbGVjdGVkT3B0aW9ucykge1xuICAgICAgY29uc3QgaWQgPSBpZE9mKG8pO1xuICAgICAgaWYgKGlkID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgaWYgKCFzZWVuLmhhcyhpZCkpIHtcbiAgICAgICAgc2Vlbi5hZGQoaWQpO1xuICAgICAgICBtZXJnZWQucHVzaChvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBvIG9mIGJhc2VGaWx0ZXJlZCkge1xuICAgICAgY29uc3QgaWQgPSBpZE9mKG8pO1xuICAgICAgaWYgKGlkID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgaWYgKCFzZWVuLmhhcyhpZCkpIHtcbiAgICAgICAgc2Vlbi5hZGQoaWQpO1xuICAgICAgICBtZXJnZWQucHVzaChvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfVxuXG4gIC8vIENsb3NlIHdoZW4gYW4gb3B0aW9uIGlzIHNlbGVjdGVkIGlmIHJlcXVlc3RlZC4gQWx3YXlzIGNsb3NlIGZvciBzaW5nbGUtc2VsZWN0LlxuICBvblNlbGVjdGlvbkNoYW5nZShldmVudDogTWF0U2VsZWN0Q2hhbmdlLCBzZWxlY3Q6IE1hdFNlbGVjdCk6IHZvaWQge1xuICAgIC8vIEhhbmRsZSBzZWxlY3QtYWxsIHNlbnRpbmVsIGluIG11bHRpLXNlbGVjdFxuICAgIGlmICh0aGlzLmlzTXVsdGlwbGUgJiYgQXJyYXkuaXNBcnJheShldmVudC52YWx1ZSkgJiYgZXZlbnQudmFsdWUuaW5jbHVkZXModGhpcy5TRUxFQ1RfQUxMX1ZBTFVFKSkge1xuICAgICAgLy8gUmVtb3ZlIHNlbnRpbmVsIGFuZCB0b2dnbGUgYWxsXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5O1xuICAgICAgaWYgKGtleSAmJiB0aGlzLmZvcm0pIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoa2V5KTtcbiAgICAgICAgLy8gVG9nZ2xlIGJhc2VkIG9uIGN1cnJlbnQgc3RhdGVcbiAgICAgICAgdGhpcy5vblRvZ2dsZVNlbGVjdEFsbChzZWxlY3QpO1xuICAgICAgICAvLyBFbnN1cmUgc2VudGluZWwgaXMgbm90IHByZXNlbnRcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IChjb250cm9sLnZhbHVlIGFzIGFueVtdKS5maWx0ZXIodiA9PiB2ICE9PSB0aGlzLlNFTEVDVF9BTExfVkFMVUUpO1xuICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUoZmlsdGVyZWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gRG8gbm90IHByb2NlZWQgd2l0aCBub3JtYWwgY2xvc2UgbG9naWMgZm9yIHNlbGVjdC1hbGxcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gTGV0IEFuZ3VsYXIgTWF0ZXJpYWwgYXV0by1jbG9zZSBmb3Igc2luZ2xlLXNlbGVjdC5cbiAgICAvLyBGb3IgbXVsdGktc2VsZWN0LCBjbG9zZSBvbmx5IGlmIGV4cGxpY2l0bHkgcmVxdWVzdGVkLlxuICAgIGNvbnN0IHNob3VsZENsb3NlID0gdGhpcy5pc011bHRpcGxlID8gISF0aGlzLmNvbmZpZz8uY2xvc2VPblNlbGVjdCA6IGZhbHNlO1xuICAgIGlmIChzaG91bGRDbG9zZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VsZWN0LmNsb3NlKCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgfVxuICAgIC8vIElmIHNlYXJjaGFibGUsIGNsZWFyIHRoZSBzZWFyY2ggYWZ0ZXIgc2VsZWN0aW9uIHNvIHJlb3BlbmluZyB3b3JrcyBwcmVkaWN0YWJseVxuICAgIGlmICh0aGlzLmNvbmZpZz8uc2VhcmNoYWJsZSAmJiB0aGlzLmNvbmZpZz8ua2V5KSB7XG4gICAgICB0aGlzLnNlYXJjaFRleHRCeUtleVt0aGlzLmNvbmZpZy5rZXldID0gJyc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZz8ub25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuY29uZmlnLm9uQ2hhbmdlKGV2ZW50LnZhbHVlLCBldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdjcWEtZHluYW1pYy1zZWxlY3Qgb25DaGFuZ2UgaGFuZGxlciBlcnJvcjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICBrZXk6IHRoaXMuY29uZmlnPy5rZXksXG4gICAgICB2YWx1ZTogZXZlbnQudmFsdWUsXG4gICAgICBldmVudCxcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIC8vIENsb3NlIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSBvZiB0aGUgdHJpZ2dlciBhbmQgb3V0c2lkZSBvZiB0aGUgb3BlbiBwYW5lbFxuICAgIGlmICghdGhpcy5zZWxlY3RSZWY/LnBhbmVsT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghdGFyZ2V0KSByZXR1cm47XG4gICAgLy8gSWYgY2xpY2sgaXMgaW5zaWRlIHRoZSBjb21wb25lbnQgaG9zdCwgaWdub3JlXG4gICAgaWYgKHRoaXMuaG9zdEVsPy5uYXRpdmVFbGVtZW50ICYmIHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBJZiBjbGljayBpcyBpbnNpZGUgYW55IG9wZW4gbWF0LXNlbGVjdCBwYW5lbCwgaWdub3JlXG4gICAgY29uc3QgcGFuZWxFbHMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYXQtc2VsZWN0LXBhbmVsJykpIGFzIEhUTUxFbGVtZW50W107XG4gICAgY29uc3QgY2xpY2tJbnNpZGVQYW5lbCA9IHBhbmVsRWxzLnNvbWUoKGVsKSA9PiBlbC5jb250YWlucyh0YXJnZXQpKTtcbiAgICBpZiAoY2xpY2tJbnNpZGVQYW5lbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5zZWxlY3RSZWYuY2xvc2UoKTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cblxuICBwcml2YXRlIHNldHVwTG9hZE1vcmVPYnNlcnZlcigpOiB2b2lkIHtcbiAgICAvLyBPbmx5IGlmIGNvbnN1bWVyIGluZGljYXRlcyBtb3JlIGRhdGEgaXMgYXZhaWxhYmxlXG4gICAgaWYgKCF0aGlzLmNvbmZpZz8uaGFzTW9yZSkgcmV0dXJuO1xuICAgIC8vIEZpbmQgc2VudGluZWwgb3B0aW9uIHJlbmRlcmVkIGluIHRoZSBvcGVuIHBhbmVsXG4gICAgY29uc3Qgc2VudGluZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5sb2FkLW1vcmUtc2VudGluZWwnKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCFzZW50aW5lbCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmxvYWRNb3JlT2JzZXJ2ZXIpIHtcbiAgICAgIHRyeSB7IHRoaXMubG9hZE1vcmVPYnNlcnZlci5kaXNjb25uZWN0KCk7IH0gY2F0Y2gge31cbiAgICAgIHRoaXMubG9hZE1vcmVPYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gVXNlIHRoZSBzZW50aW5lbCdzIGNsb3Nlc3QgcGFuZWwgYXMgdGhlIHJvb3QgdG8gYXZvaWQgcGlja2luZyBhIHdyb25nIHBhbmVsXG4gICAgY29uc3QgcGFuZWxSb290ID0gc2VudGluZWwuY2xvc2VzdCgnLm1hdC1zZWxlY3QtcGFuZWwnKSBhcyBFbGVtZW50IHwgbnVsbDtcbiAgICB0aGlzLmxvYWRNb3JlT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgICAvLyBSZXF1ZXN0IG1vcmUgb25seSBpZiBub3QgY3VycmVudGx5IGxvYWRpbmcgYW5kIGhhc01vcmUgc3RpbGwgdHJ1ZVxuICAgICAgICAgIGlmICghdGhpcy5sb2FkaW5nTW9yZSAmJiB0aGlzLmNvbmZpZz8uaGFzTW9yZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9yZSA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5IHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgcSA9IHRoaXMuc2VhcmNoVGV4dEJ5S2V5W2tleV0gfHwgJyc7XG4gICAgICAgICAgICAvLyBFbWl0IG91dHB1dHMgYW5kIGludm9rZSBvcHRpb25hbCBjYWxsYmFja3NcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmUuZW1pdCh7IGtleSwgcXVlcnk6IHEgfSk7XG4gICAgICAgICAgICB0cnkgeyB0aGlzLmNvbmZpZy5vbkxvYWRNb3JlPy4ocSk7IH0gY2F0Y2gge31cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7IHJvb3Q6IHBhbmVsUm9vdCwgdGhyZXNob2xkOiAwLjEgfSk7XG4gICAgdHJ5IHsgdGhpcy5sb2FkTW9yZU9ic2VydmVyLm9ic2VydmUoc2VudGluZWwpOyB9IGNhdGNoIHt9XG4gIH1cbn1cblxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLXVpLXJvb3RcIj5cbiAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICA8bGFiZWwgKm5nSWY9XCJjb25maWcubGFiZWxcIlxuICAgICAgY2xhc3M9XCJmb3JtLWxhYmVsIGNxYS10ZXh0LVsjMzc0MTUxXSBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1ibG9jayBjcWEtbGVhZGluZy1bMS40XSBjcWEtbWItMlwiPnt7XG4gICAgICBjb25maWcubGFiZWwgfX08L2xhYmVsPlxuICAgIDxtYXQtZm9ybS1maWVsZCAjaG9zdCBjbGFzcz1cIm1hdC1zZWxlY3QtY3VzdG9tIGNxYS13LWZ1bGxcIiBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgICAgPG1hdC1zZWxlY3QgI3NlbGVjdFJlZj1cIm1hdFNlbGVjdFwiIFtwbGFjZWhvbGRlcl09XCJkaXNwbGF5UGxhY2Vob2xkZXJcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiIFttdWx0aXBsZV09XCJpc011bHRpcGxlXCJcbiAgICAgICAgZGlzYWJsZU9wdGlvbkNlbnRlcmluZyBbcGFuZWxDbGFzc109XCJwYW5lbENsYXNzXCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb25maWcua2V5XCJcbiAgICAgICAgKG9wZW5lZENoYW5nZSk9XCJvblNlbGVjdE9wZW5lZENoYW5nZSgkZXZlbnQsIHNlbGVjdFJlZilcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudCwgc2VsZWN0UmVmKVwiPlxuXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiY29uZmlnLnNlYXJjaGFibGVcIiBjbGFzcz1cInRzLXNlbGVjdC1zZWFyY2hcIiBkaXNhYmxlZD5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0cy1zZWxlY3Qtc2VhcmNoLWlucHV0IGNxYS10ZXh0LWJsYWNrLTEwMFwiIHR5cGU9XCJ0ZXh0XCIgW3ZhbHVlXT1cInNlYXJjaFRleHRCeUtleVtjb25maWcua2V5XSB8fCAnJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGlucHV0KT1cIm9uU2VhcmNoKGNvbmZpZy5rZXksICRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCIgLz5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICBcbiAgICAgICAgPG1hdC1vcHRpb24gW25nQ2xhc3NdPVwieydjaGVja21hcmsnOiBjb25maWcub3B0aW9uU3R5bGUgPT09ICdjaGVja21hcmsnLCdjaGVja2JveCc6IGNvbmZpZy5vcHRpb25TdHlsZSAhPT0gJ2NoZWNrbWFyaycsJ21hdC1zZWxlY3RlZCc6IGFsbFNlbGVjdGVkfVwiIFtjbGFzc109XCJjb25maWcub3B0aW9uU3R5bGUgPT0gJ2NoZWNrbWFyaycgPyAnY2hlY2ttYXJrJyA6ICdjaGVja2JveCdcIiAqbmdJZj1cImlzTXVsdGlwbGUgJiYgY29uZmlnLnNob3dTZWxlY3RBbGxcIiBbdmFsdWVdPVwiU0VMRUNUX0FMTF9WQUxVRVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VDaGVja2JveFN0eWxlOyBlbHNlIHNlbGVjdEFsbERlZmF1bHRUcGxcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS13LTQgY3FhLWgtNCBjcWEtZmxleC1zaHJpbmstMCBjcWEtcm91bmRlZC1bNHB4XSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNEMUQ1REJdIGNxYS1tci0yIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1ib3JkZXItc29saWRcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImFsbFNlbGVjdGVkID8geydiYWNrZ3JvdW5kLWNvbG9yJzonIzRGNDZFNScsJ2JvcmRlci1jb2xvcic6JyM0RjQ2RTUnfSA6IHt9XCI+XG4gICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImFsbFNlbGVjdGVkXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCAzTDQuNSA4LjVMMiA2XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbWluLXctMFwiPnt7IGNvbmZpZy5zZWxlY3RBbGxMYWJlbCB8fCAnQWxsJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3NlbGVjdEFsbERlZmF1bHRUcGw+XG4gICAgICAgICAgICB7eyBjb25maWcuc2VsZWN0QWxsTGFiZWwgfHwgJ0FsbCcgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgPG1hdC1vcHRpb24gW2NsYXNzXT1cImNvbmZpZy5vcHRpb25TdHlsZSA9PSAnY2hlY2ttYXJrJyA/ICdjaGVja21hcmsnIDogJ2NoZWNrYm94J1wiICpuZ0Zvcj1cImxldCBvcHQgb2YgZmlsdGVyZWRPcHRpb25zKGNvbmZpZylcIiBbdmFsdWVdPVwib3B0LmlkID8/IG9wdC52YWx1ZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VDaGVja2JveFN0eWxlOyBlbHNlIGRlZmF1bHRPcHRpb25UcGxcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS13LTQgY3FhLWgtNCBjcWEtZmxleC1zaHJpbmstMCBjcWEtcm91bmRlZC1bNHB4XSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNEMUQ1REJdIGNxYS1tci0yIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1ib3JkZXItc29saWRcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImlzT3B0aW9uU2VsZWN0ZWQob3B0KSA/IHsnYmFja2dyb3VuZC1jb2xvcic6JyM0RjQ2RTUnLCdib3JkZXItY29sb3InOicjNEY0NkU1J30gOiB7fVwiPlxuICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc09wdGlvblNlbGVjdGVkKG9wdClcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDNMNC41IDguNUwyIDZcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1taW4tdy0wXCI+e3sgb3B0Lm5hbWUgPz8gb3B0LmxhYmVsID8/IG9wdC52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRPcHRpb25UcGw+XG4gICAgICAgICAgICB7eyBvcHQubmFtZSA/PyBvcHQubGFiZWwgPz8gb3B0LnZhbHVlIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICBcbiAgICAgICAgPCEtLSBObyByZXN1bHRzIHN0YXRlIChvbmx5IHdoZW4gbm90IGxvYWRpbmcgYW5kIG5vIG9wdGlvbnMpIC0tPlxuICAgICAgICA8bWF0LW9wdGlvbiBkaXNhYmxlZCAqbmdJZj1cIiEoY29uZmlnPy5vcHRpb25zPy5sZW5ndGggfHwgMCkgJiYgIShjb25maWc/LmlzTG9hZGluZyB8fCBsb2FkaW5nTW9yZSlcIj5cbiAgICAgICAgICBObyByZXN1bHRzXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPCEtLSBJbmZpbml0ZSBzY3JvbGwgc2VudGluZWwgKHNlcnZlclNlYXJjaCBvciBleHBsaWNpdCBoYXNNb3JlKSAtLT5cbiAgICAgICAgPG1hdC1vcHRpb24gZGlzYWJsZWQgY2xhc3M9XCJsb2FkLW1vcmUtc2VudGluZWxcIiAqbmdJZj1cImNvbmZpZz8uaGFzTW9yZVwiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29uZmlnPy5pc0xvYWRpbmcgfHwgbG9hZGluZ01vcmVcIj5Mb2FkaW5nLi4uPC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIShjb25maWc/LmlzTG9hZGluZyB8fCBsb2FkaW5nTW9yZSlcIj5TY3JvbGwgdG8gbG9hZCBtb3Jl4oCmPC9zcGFuPlxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNNCA2TDggMTBMMTIgNlwiIHN0cm9rZT1cIiMwQTBBMEFcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj4iXX0=
502
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFvQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBa0R2SyxNQUFNLE9BQU8sMkJBQTJCO0lBTnhDO1FBT1cscUJBQWdCLEdBQVcsZ0JBQWdCLENBQUM7UUFHM0Msb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBdUQsQ0FBQztRQUMxRixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDakQscUVBQXFFO1FBQzNELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWtDLENBQUM7UUFDNUUsd0VBQXdFO1FBQzlELGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBa0MsQ0FBQztRQUt4RSxnRkFBZ0Y7UUFDaEYsb0JBQWUsR0FBMkIsRUFBRSxDQUFDO1FBR3JDLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUM5QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVaLGtCQUFhLEdBQUcsR0FBRyxFQUFFO1lBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVztnQkFBRSxPQUFPO1lBQ3RELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDOUIsSUFBSSxDQUFDLEVBQUU7Z0JBQUUsT0FBTztZQUNoQixNQUFNLFVBQVUsR0FBRyxF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QTJCLHFkQVlJLFVBQVUsa0RDOUR0RCxrM0tBK0VNOzJGRDdCTywyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0Usb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU07OEJBSXRDLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLFlBQVk7c0JBQXJCLE1BQU07Z0JBRUcsUUFBUTtzQkFBakIsTUFBTTtnQkFFb0MsU0FBUztzQkFBbkQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNlLE1BQU07c0JBQTdELFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQTBYdEQsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFNlbGVjdCwgTWF0U2VsZWN0Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcblxuLy8gTG9jYWwgb3B0aW9uIG1vZGVsIChwcmV2aW91c2x5IGltcG9ydGVkIGZyb20gcmVtb3ZlZCBjcWEtc2VsZWN0IGNvbXBvbmVudClcbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uIHtcbiAgaWQ/OiBhbnk7XG4gIHZhbHVlPzogYW55O1xuICBuYW1lPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICBrZXk6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gIC8qKiBDb250cm9scyBob3cgc2VsZWN0aW9uIGluZGljYXRvciBpcyBzaG93biBmb3IgbXVsdGktc2VsZWN0IG9wdGlvbnMuICovXG4gIG9wdGlvblN0eWxlPzogJ2NoZWNrbWFyaycgfCAnY2hlY2tib3gnO1xuICAvKiogU2hvdyBhICdTZWxlY3QgQWxsJyBvcHRpb24gYXQgdGhlIHRvcCAobXVsdGktc2VsZWN0IG9ubHkpLiAqL1xuICBzaG93U2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgLyoqIEN1c3RvbSBsYWJlbCBmb3IgdGhlICdTZWxlY3QgQWxsJyBvcHRpb24uIERlZmF1bHRzIHRvICdBbGwnLiAqL1xuICBzZWxlY3RBbGxMYWJlbD86IHN0cmluZztcbiAgLyoqIElmIHRydWUsIGNsb3NlIHRoZSBwYW5lbCB3aGVuIGFuIG9wdGlvbiBpcyBzZWxlY3RlZCAodXNlZnVsIGZvciBtdWx0aS1zZWxlY3QgaW4gaGVhZGVycykuICovXG4gIGNsb3NlT25TZWxlY3Q/OiBib29sZWFuO1xuICAvKiogUHJvdmlkZSBhIGRlZmF1bHQgc2VsZWN0ZWQgdmFsdWUgKG9yIGFycmF5IGZvciBtdWx0aS1zZWxlY3QpIGlmIHRoZSBjb250cm9sIGhhcyBubyB2YWx1ZSB5ZXQuICovXG4gIHNlbGVjdGVkVmFsdWU/OiBhbnkgfCBhbnlbXTtcbiAgLyoqIE9wdGlvbmFsIGNhbGxiYWNrIGludm9rZWQgd2hlbmV2ZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLiAqL1xuICBvbkNoYW5nZT86ICh2YWx1ZTogYW55LCBldmVudD86IE1hdFNlbGVjdENoYW5nZSkgPT4gdm9pZDtcbiAgLyoqIEVuYWJsZSBzZXJ2ZXItc2lkZSBzZWFyY2ggbW9kZTsgY29tcG9uZW50IHdpbGwgZW1pdCBzZWFyY2ggaW5zdGVhZCBvZiBsb2NhbCBmaWx0ZXJpbmcuICovXG4gIHNlcnZlclNlYXJjaD86IGJvb2xlYW47XG4gIC8qKiBJbmRpY2F0ZXMgbW9yZSByZXN1bHRzIGFyZSBhdmFpbGFibGUgZm9yIGluZmluaXRlIHNjcm9sbC4gKi9cbiAgaGFzTW9yZT86IGJvb2xlYW47XG4gIC8qKiBPcHRpb25hbCBsb2FkaW5nIGZsYWcgY29udHJvbGxlZCBieSBjb25zdW1lciB0byBzaG93IGxvYWRpbmcgc3RhdGUuICovXG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBPcHRpb25hbCBjYWxsYmFjayBmb3Igc2VydmVyLXNpZGUgc2VhcmNoIHdoZW4gcXVlcnkgY2hhbmdlcy4gKi9cbiAgb25TZWFyY2g/OiAocXVlcnk6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIE9wdGlvbmFsIGNhbGxiYWNrIHdoZW4gbW9yZSBkYXRhIGlzIHJlcXVlc3RlZCAoaW5maW5pdGUgc2Nyb2xsKS4gKi9cbiAgb25Mb2FkTW9yZT86IChxdWVyeT86IHN0cmluZykgPT4gdm9pZDtcbiAgb3B0aW9uczogU2VsZWN0T3B0aW9uW107XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1keW5hbWljLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNTZWxlY3RGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgcmVhZG9ubHkgU0VMRUNUX0FMTF9WQUxVRTogc3RyaW5nID0gJ19fc2VsZWN0X2FsbF9fJztcbiAgQElucHV0KCkgZm9ybSE6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgY29uZmlnITogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGtleTogc3RyaW5nOyB2YWx1ZTogYW55OyBldmVudDogTWF0U2VsZWN0Q2hhbmdlIH0+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIEVtaXRzIHdoZW4gdXNlciB0eXBlcyBpbiBzZWFyY2ggYm94ICh1c2VmdWwgZm9yIHNlcnZlciBzZWFyY2gpICovXG4gIEBPdXRwdXQoKSBzZWFyY2hDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmc7IHF1ZXJ5OiBzdHJpbmcgfT4oKTtcbiAgLyoqIEVtaXRzIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyBtb3JlIGRhdGEgZm9yIHRoZSBjdXJyZW50IHF1ZXJ5ICovXG4gIEBPdXRwdXQoKSBsb2FkTW9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZzsgcXVlcnk6IHN0cmluZyB9PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdFJlZicsIHsgc3RhdGljOiBmYWxzZSB9KSBzZWxlY3RSZWY/OiBNYXRTZWxlY3Q7XG4gIEBWaWV3Q2hpbGQoJ2hvc3QnLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSkgaG9zdEVsPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgLy8gTXVzdCBiZSBwdWJsaWMgZm9yIHRlbXBsYXRlIGFjY2VzcyBpbiBBbmd1bGFyJ3Mgc3RyaWN0IHRlbXBsYXRlIGNoZWNraW5nIG1vZGVcbiAgc2VhcmNoVGV4dEJ5S2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHByaXZhdGUgb3V0c2lkZUNsZWFudXA/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGxvYWRNb3JlT2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBsYXN0T3B0aW9uc0xlbmd0aCA9IDA7XG4gIGxvYWRpbmdNb3JlID0gZmFsc2U7XG4gIHByaXZhdGUgcGFuZWxTY3JvbGxFbD86IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIG9uUGFuZWxTY3JvbGwgPSAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZz8uaGFzTW9yZSB8fCB0aGlzLmxvYWRpbmdNb3JlKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSB0aGlzLnBhbmVsU2Nyb2xsRWw7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIGNvbnN0IG5lYXJCb3R0b20gPSBlbC5zY3JvbGxUb3AgKyBlbC5jbGllbnRIZWlnaHQgPj0gZWwuc2Nyb2xsSGVpZ2h0IC0gNDg7IC8vIH4zIG9wdGlvbiByb3dzXG4gICAgaWYgKG5lYXJCb3R0b20pIHtcbiAgICAgIHRoaXMubG9hZGluZ01vcmUgPSB0cnVlO1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWc/LmtleSB8fCAnJztcbiAgICAgIGNvbnN0IHEgPSB0aGlzLnNlYXJjaFRleHRCeUtleVtrZXldIHx8ICcnO1xuICAgICAgdGhpcy5sb2FkTW9yZS5lbWl0KHsga2V5LCBxdWVyeTogcSB9KTtcbiAgICAgIHRyeSB7IHRoaXMuY29uZmlnLm9uTG9hZE1vcmU/LihxKTsgfSBjYXRjaCB7fVxuICAgIH1cbiAgfTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnIHx8ICF0aGlzLmNvbmZpZy5rZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3FhLWR5bmFtaWMtc2VsZWN0OiBpbnB1dCBcImNvbmZpZy5rZXlcIiBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG4gICAgdGhpcy5hcHBseVNlbGVjdGVkVmFsdWVJZk5lZWRlZCgpO1xuICAgIHRoaXMubGFzdE9wdGlvbnNMZW5ndGggPSAodGhpcy5jb25maWc/Lm9wdGlvbnMgfHwgW10pLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBkaXNwbGF5UGxhY2Vob2xkZXIoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5O1xuICAgIGlmICgha2V5IHx8ICF0aGlzLmZvcm0pIHJldHVybiB0aGlzLmNvbmZpZz8ucGxhY2Vob2xkZXI7XG4gICAgY29uc3QgY29udHJvbFZhbHVlID0gdGhpcy5mb3JtLmdldChrZXkpPy52YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5oYXNFeGlzdGluZ1ZhbHVlKGNvbnRyb2xWYWx1ZSkgPyB1bmRlZmluZWQgOiB0aGlzLmNvbmZpZz8ucGxhY2Vob2xkZXI7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCdjb25maWcnIGluIGNoYW5nZXMpIHtcbiAgICAgIC8vIFdoZW4gY29uZmlnIGNoYW5nZXMgKGluY2x1ZGluZyB0b2dnbGluZyBtdWx0aXBsZSksIGVuc3VyZSBjb250cm9sIHZhbHVlIHNoYXBlIG1hdGNoZXNcbiAgICAgIHRoaXMuc3luY0NvbnRyb2xWYWx1ZUZvck11bHRpcGxlTW9kZSgpO1xuICAgICAgdGhpcy5hcHBseVNlbGVjdGVkVmFsdWVJZk5lZWRlZCgpO1xuICAgICAgLy8gUmVzZXQgbG9hZGluZ01vcmUgd2hlbiBuZXcgb3B0aW9ucyBhcnJpdmUgKG9wdGlvbnMgbGVuZ3RoIGluY3JlYXNlZClcbiAgICAgIGNvbnN0IGxlbiA9ICh0aGlzLmNvbmZpZz8ub3B0aW9ucyB8fCBbXSkubGVuZ3RoO1xuICAgICAgaWYgKGxlbiA+IHRoaXMubGFzdE9wdGlvbnNMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9yZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0T3B0aW9uc0xlbmd0aCA9IGxlbjtcbiAgICAgIC8vIElmIHBhbmVsIGlzIG9wZW4gYW5kIGhhc01vcmUgaXMgdHJ1ZSwgZW5zdXJlIHRoZSBzZW50aW5lbCBpcyBiZWluZyBvYnNlcnZlZC5cbiAgICAgIGlmICh0aGlzLnNlbGVjdFJlZj8ucGFuZWxPcGVuICYmIHRoaXMuY29uZmlnPy5oYXNNb3JlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXR1cExvYWRNb3JlT2JzZXJ2ZXIoKSwgMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgnZm9ybScgaW4gY2hhbmdlcyAmJiAhY2hhbmdlc1snZm9ybSddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLmFwcGx5U2VsZWN0ZWRWYWx1ZUlmTmVlZGVkKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHBhbmVsQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGN0Yy1zZWxlY3QtcGFuZWwgJHt0aGlzLmlzTXVsdGlwbGUgPyAnbXVsdGlwbGUnIDogJyd9YC50cmltKCk7XG4gIH1cblxuICBnZXQgaXNNdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b0Jvb2xlYW4odGhpcy5jb25maWc/Lm11bHRpcGxlKTtcbiAgfVxuXG4gIGdldCBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRvQm9vbGVhbih0aGlzLmNvbmZpZz8uZGlzYWJsZWQpO1xuICB9XG4gIFxuICBnZXQgdXNlQ2hlY2tib3hTdHlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc011bHRpcGxlICYmICh0aGlzLmNvbmZpZz8ub3B0aW9uU3R5bGUgPT09ICdjaGVja2JveCcpO1xuICB9XG4gIFxuICBnZXQgYWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmlzTXVsdGlwbGUpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5O1xuICAgIGlmICgha2V5IHx8ICF0aGlzLmZvcm0pIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChrZXkpO1xuICAgIGlmICghY29udHJvbCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gY29udHJvbC52YWx1ZSBhcyBhbnlbXTtcbiAgICBjb25zdCBhbGxJZHMgPSB0aGlzLmdldEFsbE9wdGlvbklkcygpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzZWxlY3RlZCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIWFsbElkcy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gYWxsSWRzLmV2ZXJ5KGlkID0+IHNlbGVjdGVkLmluY2x1ZGVzKGlkKSk7XG4gIH1cblxuICBwcml2YXRlIHRvQm9vbGVhbih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB2ID0gdmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAodiA9PT0gJ3RydWUnIHx8IHYgPT09ICcxJykgcmV0dXJuIHRydWU7XG4gICAgICBpZiAodiA9PT0gJ2ZhbHNlJyB8fCB2ID09PSAnMCcgfHwgdiA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBhbnkgb3RoZXIgbm9uLWVtcHR5IHN0cmluZyB0cmVhdGVkIGFzIHRydXRoeVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHZhbHVlICE9PSAwO1xuICAgIH1cbiAgICByZXR1cm4gISF2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY0NvbnRyb2xWYWx1ZUZvck11bHRpcGxlTW9kZSgpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5O1xuICAgIGlmICgha2V5IHx8ICF0aGlzLmZvcm0pIHJldHVybjtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChrZXkpO1xuICAgIGlmICghY29udHJvbCkgcmV0dXJuO1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA9PSBudWxsKSByZXR1cm47XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKSByZXR1cm47XG4gICAgICBjb250cm9sLnNldFZhbHVlKFtjdXJyZW50VmFsdWVdLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKSByZXR1cm47XG4gICAgICBjb250cm9sLnNldFZhbHVlKGN1cnJlbnRWYWx1ZS5sZW5ndGggPyBjdXJyZW50VmFsdWVbMF0gOiBudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNlbGVjdGVkVmFsdWVJZk5lZWRlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5O1xuICAgIGlmICgha2V5IHx8ICF0aGlzLmZvcm0pIHJldHVybjtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChrZXkpO1xuICAgIGlmICghY29udHJvbCkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSB0aGlzLmNvbmZpZz8uc2VsZWN0ZWRWYWx1ZTtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICh0aGlzLmhhc0V4aXN0aW5nVmFsdWUoY3VycmVudFZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc2VsZWN0ZWRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHNlbGVjdGVkVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc011bHRpcGxlKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gKEFycmF5LmlzQXJyYXkoc2VsZWN0ZWRWYWx1ZSkgPyBzZWxlY3RlZFZhbHVlIDogW3NlbGVjdGVkVmFsdWVdKS5maWx0ZXIoXG4gICAgICAgICh2YWwpID0+IHZhbCAhPT0gdW5kZWZpbmVkLFxuICAgICAgKTtcbiAgICAgIGlmICghbm9ybWFsaXplZC5sZW5ndGgpIHJldHVybjtcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUobm9ybWFsaXplZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gQXJyYXkuaXNBcnJheShzZWxlY3RlZFZhbHVlKVxuICAgICAgICA/IChzZWxlY3RlZFZhbHVlLmxlbmd0aCA/IHNlbGVjdGVkVmFsdWVbMF0gOiB1bmRlZmluZWQpXG4gICAgICAgIDogc2VsZWN0ZWRWYWx1ZTtcbiAgICAgIGlmIChub3JtYWxpemVkID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUobm9ybWFsaXplZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFzRXhpc3RpbmdWYWx1ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUuc29tZSgodmFsKSA9PiB2YWwgIT09IG51bGwgJiYgdmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSAnJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdmFsdWUudHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaXNPcHRpb25TZWxlY3RlZChvcHQ6IFNlbGVjdE9wdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnPy5rZXk7XG4gICAgaWYgKCFrZXkgfHwgIXRoaXMuZm9ybSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGtleSk7XG4gICAgaWYgKCFjb250cm9sKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgY29udHJvbFZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBjb25zdCBvcHRpb25JZCA9IG9wdC5pZCA/PyBvcHQudmFsdWU7XG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRyb2xWYWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBjb250cm9sVmFsdWUuaW5jbHVkZXMob3B0aW9uSWQpO1xuICAgIH1cbiAgICByZXR1cm4gY29udHJvbFZhbHVlID09PSBvcHRpb25JZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWxsT3B0aW9uSWRzKCk6IGFueVtdIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5jb25maWc/Lm9wdGlvbnMgfHwgW107XG4gICAgcmV0dXJuIG9wdGlvbnMubWFwKG8gPT4gKG8uaWQgPz8gby52YWx1ZSkpLmZpbHRlcih2ID0+IHYgIT09IHVuZGVmaW5lZCk7XG4gIH1cblxuICBvblRvZ2dsZVNlbGVjdEFsbChzZWxlY3Q6IE1hdFNlbGVjdCk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnPy5rZXk7XG4gICAgaWYgKCFrZXkgfHwgIXRoaXMuZm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGtleSk7XG4gICAgaWYgKCFjb250cm9sKSByZXR1cm47XG4gICAgY29uc3QgYWxsSWRzID0gdGhpcy5nZXRBbGxPcHRpb25JZHMoKTtcbiAgICBpZiAoIWFsbElkcy5sZW5ndGgpIHJldHVybjtcbiAgICBpZiAodGhpcy5hbGxTZWxlY3RlZCkge1xuICAgICAgY29udHJvbC5zZXRWYWx1ZShbXSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUoYWxsSWRzLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICB9XG4gICAgLy8gS2VlcCBwYW5lbCBvcGVuIGZvciBjb250aW51ZWQgc2VsZWN0aW9ucyBpbiBtdWx0aS1zZWxlY3RcbiAgICB0cnkgeyBzZWxlY3Qub3BlbigpOyB9IGNhdGNoIHt9XG4gIH1cblxuICBvblNlbGVjdE9wZW5lZENoYW5nZShvcGVuZWQ6IGJvb2xlYW4sIF9zZWxlY3Q6IE1hdFNlbGVjdCk6IHZvaWQge1xuICAgIGlmIChvcGVuZWQpIHtcbiAgICAgIC8vIEVtaXQgY2xpY2sgZXZlbnQgd2hlbiBzZWxlY3QgaXMgb3BlbmVkIChjbGlja2VkKVxuICAgICAgdGhpcy5zZWxlY3RDbGljay5lbWl0KCk7XG4gICAgfVxuICAgIFxuICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAvLyBSZXNldCBzZWFyY2ggdGV4dCBvbiBjbG9zZSBzbyB0aGUgbmV4dCBvcGVuIHNob3dzIGZ1bGwgbGlzdFxuICAgICAgaWYgKHRoaXMuY29uZmlnPy5rZXkpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0QnlLZXlbdGhpcy5jb25maWcua2V5XSA9ICcnO1xuICAgICAgfVxuICAgICAgLy8gRW5zdXJlIGFueSBwcmV2aW91cyBjdXN0b20gbGlzdGVuZXJzIGFyZSBjbGVhcmVkIChsZWdhY3kgY29tcGF0aWJpbGl0eSlcbiAgICAgIGlmICh0aGlzLm91dHNpZGVDbGVhbnVwKSB7XG4gICAgICAgIHRoaXMub3V0c2lkZUNsZWFudXAoKTtcbiAgICAgICAgdGhpcy5vdXRzaWRlQ2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIC8vIERpc2Nvbm5lY3QgbG9hZC1tb3JlIG9ic2VydmVyIGlmIGFueVxuICAgICAgaWYgKHRoaXMubG9hZE1vcmVPYnNlcnZlcikge1xuICAgICAgICB0cnkgeyB0aGlzLmxvYWRNb3JlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOyB9IGNhdGNoIHt9XG4gICAgICAgIHRoaXMubG9hZE1vcmVPYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIC8vIFJlbW92ZSBzY3JvbGwgbGlzdGVuZXIgaWYgYXR0YWNoZWRcbiAgICAgIGlmICh0aGlzLnBhbmVsU2Nyb2xsRWwpIHtcbiAgICAgICAgdHJ5IHsgdGhpcy5wYW5lbFNjcm9sbEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25QYW5lbFNjcm9sbCk7IH0gY2F0Y2gge31cbiAgICAgICAgdGhpcy5wYW5lbFNjcm9sbEVsID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZvY3VzIHRoZSBzZWFyY2ggYm94IGlmIGVuYWJsZWRcbiAgICBpZiAodGhpcy5jb25maWc/LnNlYXJjaGFibGUpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oJy50cy1zZWxlY3Qtc2VhcmNoLWlucHV0Jyk7XG4gICAgICAgIGlucHV0Py5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgLy8gSW4gc2VydmVyU2VhcmNoIG1vZGUsIGlmIG5vIG9wdGlvbnMgeWV0LCB0cmlnZ2VyIGluaXRpYWwgZmV0Y2hcbiAgICBpZiAodGhpcy5jb25maWc/LnNlcnZlclNlYXJjaCkge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcua2V5O1xuICAgICAgY29uc3QgcSA9IHRoaXMuc2VhcmNoVGV4dEJ5S2V5W2tleV0gfHwgJyc7XG4gICAgICB0cnkgeyB0aGlzLmNvbmZpZy5vblNlYXJjaD8uKHEpOyB9IGNhdGNoIHt9XG4gICAgICB0aGlzLnNlYXJjaENoYW5nZS5lbWl0KHsga2V5LCBxdWVyeTogcSB9KTtcbiAgICB9XG5cbiAgICAvLyBTZXR1cCBpbmZpbml0ZSBzY3JvbGwgb2JzZXJ2ZXIgb24gc2VudGluZWxcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0dXBMb2FkTW9yZU9ic2VydmVyKCksIDApO1xuICAgIC8vIEFsc28gYXR0YWNoIGEgc2Nyb2xsIGxpc3RlbmVyIGZhbGxiYWNrIGZvciByZWxpYWJsZSBsb2FkLW1vcmUgdHJpZ2dlcnNcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhbmVscyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm1hdC1zZWxlY3QtcGFuZWwnKSkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICAgICAgdGhpcy5wYW5lbFNjcm9sbEVsID0gcGFuZWxzLmxlbmd0aCA/IHBhbmVsc1twYW5lbHMubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLnBhbmVsU2Nyb2xsRWwpIHtcbiAgICAgICAgICB0aGlzLnBhbmVsU2Nyb2xsRWwuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblBhbmVsU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge31cbiAgICB9LCAwKTtcbiAgfVxuXG4gIG9uU2VhcmNoKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXh0QnlLZXlba2V5XSA9IHZhbHVlID8/ICcnO1xuICAgIGlmICh0aGlzLmNvbmZpZz8uc2VydmVyU2VhcmNoKSB7XG4gICAgICAvLyBGb3Igc2VydmVyLXNpZGUgc2VhcmNoLCBlbWl0IGluc3RlYWQgb2YgbG9jYWwgZmlsdGVyaW5nXG4gICAgICB0cnkgeyB0aGlzLmNvbmZpZy5vblNlYXJjaD8uKHZhbHVlID8/ICcnKTsgfSBjYXRjaCB7fVxuICAgICAgdGhpcy5zZWFyY2hDaGFuZ2UuZW1pdCh7IGtleSwgcXVlcnk6IHZhbHVlID8/ICcnIH0pO1xuICAgICAgLy8gUmVzZXQgaW50ZXJuYWwgcGFnaW5nIHN0YXRlXG4gICAgICB0aGlzLmxvYWRpbmdNb3JlID0gZmFsc2U7XG4gICAgICB0aGlzLmxhc3RPcHRpb25zTGVuZ3RoID0gKHRoaXMuY29uZmlnPy5vcHRpb25zIHx8IFtdKS5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvcHRpb24gaWRzIGZvciB0aGUgY29uZmlndXJlZCBjb250cm9sLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZElkc0ZvcktleShrZXk6IHN0cmluZyk6IGFueVtdIHtcbiAgICBpZiAoIWtleSB8fCAhdGhpcy5mb3JtKSByZXR1cm4gW107XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoa2V5KTtcbiAgICBpZiAoIWNvbnRyb2wpIHJldHVybiBbXTtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwgPyBbdmFsdWVdIDogW107XG4gIH1cblxuICAvKiogUHJvZ3JhbW1hdGljYWxseSBjbG9zZSB0aGUgc2VsZWN0IHBhbmVsIGlmIG9wZW4gKi9cbiAgcHVibGljIGNsb3NlUGFuZWwoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc2VsZWN0UmVmPy5jbG9zZSgpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIGZpbHRlcmVkT3B0aW9ucyhjOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcpOiBTZWxlY3RPcHRpb25bXSB7XG4gICAgY29uc3QgdCA9ICh0aGlzLnNlYXJjaFRleHRCeUtleVtjLmtleV0gfHwgJycpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIC8vIEluIHNlcnZlci1zaWRlIG1vZGUsIHJldHVybiBvcHRpb25zIGFzLWlzIChwYXJlbnQgcHJvdmlkZXMgbGlzdClcbiAgICBpZiAoYy5zZXJ2ZXJTZWFyY2gpIHJldHVybiBjLm9wdGlvbnMgfHwgW107XG4gICAgLy8gV2hlbiBub3Qgc2VhcmNoaW5nLCByZXR1cm4gZnVsbCBsaXN0IHRvIHByZXNlcnZlIG9yaWdpbmFsIG9yZGVyaW5nXG4gICAgaWYgKCF0KSByZXR1cm4gYy5vcHRpb25zIHx8IFtdO1xuXG4gICAgY29uc3QgYWxsT3B0aW9ucyA9IGMub3B0aW9ucyB8fCBbXTtcbiAgICBjb25zdCBiYXNlRmlsdGVyZWQgPSBhbGxPcHRpb25zLmZpbHRlcigob3B0KSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gU3RyaW5nKG9wdC5uYW1lID8/IG9wdC5sYWJlbCA/PyBvcHQudmFsdWUgPz8gJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gdGV4dC5pbmNsdWRlcyh0KTtcbiAgICB9KTtcblxuICAgIC8vIEVuc3VyZSBjdXJyZW50bHkgc2VsZWN0ZWQgb3B0aW9uKHMpIGFyZSBhbHdheXMgdmlzaWJsZSB3aGlsZSBzZWFyY2hpbmdcbiAgICBjb25zdCBzZWxlY3RlZElkcyA9IHRoaXMuZ2V0U2VsZWN0ZWRJZHNGb3JLZXkoYy5rZXkpO1xuICAgIGlmICghc2VsZWN0ZWRJZHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYmFzZUZpbHRlcmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGlkT2YgPSAobzogU2VsZWN0T3B0aW9uKSA9PiAoby5pZCA/PyBvLnZhbHVlKTtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbnMgPSBhbGxPcHRpb25zLmZpbHRlcihvID0+IHNlbGVjdGVkSWRzLmluY2x1ZGVzKGlkT2YobykpKTtcblxuICAgIC8vIE1lcmdlIHNlbGVjdGVkIG9wdGlvbnMgKGtlZXBpbmcgdGhlaXIgb3JpZ2luYWwgb3JkZXIpIHdpdGggZmlsdGVyZWQgb25lcywgZGUtZHVwbGljYXRlZFxuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PGFueT4oKTtcbiAgICBjb25zdCBtZXJnZWQ6IFNlbGVjdE9wdGlvbltdID0gW107XG4gICAgZm9yIChjb25zdCBvIG9mIHNlbGVjdGVkT3B0aW9ucykge1xuICAgICAgY29uc3QgaWQgPSBpZE9mKG8pO1xuICAgICAgaWYgKGlkID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgaWYgKCFzZWVuLmhhcyhpZCkpIHtcbiAgICAgICAgc2Vlbi5hZGQoaWQpO1xuICAgICAgICBtZXJnZWQucHVzaChvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBvIG9mIGJhc2VGaWx0ZXJlZCkge1xuICAgICAgY29uc3QgaWQgPSBpZE9mKG8pO1xuICAgICAgaWYgKGlkID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgaWYgKCFzZWVuLmhhcyhpZCkpIHtcbiAgICAgICAgc2Vlbi5hZGQoaWQpO1xuICAgICAgICBtZXJnZWQucHVzaChvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfVxuXG4gIC8vIENsb3NlIHdoZW4gYW4gb3B0aW9uIGlzIHNlbGVjdGVkIGlmIHJlcXVlc3RlZC4gQWx3YXlzIGNsb3NlIGZvciBzaW5nbGUtc2VsZWN0LlxuICBvblNlbGVjdGlvbkNoYW5nZShldmVudDogTWF0U2VsZWN0Q2hhbmdlLCBzZWxlY3Q6IE1hdFNlbGVjdCk6IHZvaWQge1xuICAgIC8vIEhhbmRsZSBzZWxlY3QtYWxsIHNlbnRpbmVsIGluIG11bHRpLXNlbGVjdFxuICAgIGlmICh0aGlzLmlzTXVsdGlwbGUgJiYgQXJyYXkuaXNBcnJheShldmVudC52YWx1ZSkgJiYgZXZlbnQudmFsdWUuaW5jbHVkZXModGhpcy5TRUxFQ1RfQUxMX1ZBTFVFKSkge1xuICAgICAgLy8gUmVtb3ZlIHNlbnRpbmVsIGFuZCB0b2dnbGUgYWxsXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5O1xuICAgICAgaWYgKGtleSAmJiB0aGlzLmZvcm0pIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoa2V5KTtcbiAgICAgICAgLy8gVG9nZ2xlIGJhc2VkIG9uIGN1cnJlbnQgc3RhdGVcbiAgICAgICAgdGhpcy5vblRvZ2dsZVNlbGVjdEFsbChzZWxlY3QpO1xuICAgICAgICAvLyBFbnN1cmUgc2VudGluZWwgaXMgbm90IHByZXNlbnRcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IChjb250cm9sLnZhbHVlIGFzIGFueVtdKS5maWx0ZXIodiA9PiB2ICE9PSB0aGlzLlNFTEVDVF9BTExfVkFMVUUpO1xuICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUoZmlsdGVyZWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gRG8gbm90IHByb2NlZWQgd2l0aCBub3JtYWwgY2xvc2UgbG9naWMgZm9yIHNlbGVjdC1hbGxcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gTGV0IEFuZ3VsYXIgTWF0ZXJpYWwgYXV0by1jbG9zZSBmb3Igc2luZ2xlLXNlbGVjdC5cbiAgICAvLyBGb3IgbXVsdGktc2VsZWN0LCBjbG9zZSBvbmx5IGlmIGV4cGxpY2l0bHkgcmVxdWVzdGVkLlxuICAgIGNvbnN0IHNob3VsZENsb3NlID0gdGhpcy5pc011bHRpcGxlID8gISF0aGlzLmNvbmZpZz8uY2xvc2VPblNlbGVjdCA6IGZhbHNlO1xuICAgIGlmIChzaG91bGRDbG9zZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VsZWN0LmNsb3NlKCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgfVxuICAgIC8vIElmIHNlYXJjaGFibGUsIGNsZWFyIHRoZSBzZWFyY2ggYWZ0ZXIgc2VsZWN0aW9uIHNvIHJlb3BlbmluZyB3b3JrcyBwcmVkaWN0YWJseVxuICAgIGlmICh0aGlzLmNvbmZpZz8uc2VhcmNoYWJsZSAmJiB0aGlzLmNvbmZpZz8ua2V5KSB7XG4gICAgICB0aGlzLnNlYXJjaFRleHRCeUtleVt0aGlzLmNvbmZpZy5rZXldID0gJyc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZz8ub25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuY29uZmlnLm9uQ2hhbmdlKGV2ZW50LnZhbHVlLCBldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdjcWEtZHluYW1pYy1zZWxlY3Qgb25DaGFuZ2UgaGFuZGxlciBlcnJvcjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICBrZXk6IHRoaXMuY29uZmlnPy5rZXksXG4gICAgICB2YWx1ZTogZXZlbnQudmFsdWUsXG4gICAgICBldmVudCxcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIC8vIENsb3NlIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSBvZiB0aGUgdHJpZ2dlciBhbmQgb3V0c2lkZSBvZiB0aGUgb3BlbiBwYW5lbFxuICAgIGlmICghdGhpcy5zZWxlY3RSZWY/LnBhbmVsT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghdGFyZ2V0KSByZXR1cm47XG4gICAgLy8gSWYgY2xpY2sgaXMgaW5zaWRlIHRoZSBjb21wb25lbnQgaG9zdCwgaWdub3JlXG4gICAgaWYgKHRoaXMuaG9zdEVsPy5uYXRpdmVFbGVtZW50ICYmIHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBJZiBjbGljayBpcyBpbnNpZGUgYW55IG9wZW4gbWF0LXNlbGVjdCBwYW5lbCwgaWdub3JlXG4gICAgY29uc3QgcGFuZWxFbHMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYXQtc2VsZWN0LXBhbmVsJykpIGFzIEhUTUxFbGVtZW50W107XG4gICAgY29uc3QgY2xpY2tJbnNpZGVQYW5lbCA9IHBhbmVsRWxzLnNvbWUoKGVsKSA9PiBlbC5jb250YWlucyh0YXJnZXQpKTtcbiAgICBpZiAoY2xpY2tJbnNpZGVQYW5lbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5zZWxlY3RSZWYuY2xvc2UoKTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cblxuICBwcml2YXRlIHNldHVwTG9hZE1vcmVPYnNlcnZlcigpOiB2b2lkIHtcbiAgICAvLyBPbmx5IGlmIGNvbnN1bWVyIGluZGljYXRlcyBtb3JlIGRhdGEgaXMgYXZhaWxhYmxlXG4gICAgaWYgKCF0aGlzLmNvbmZpZz8uaGFzTW9yZSkgcmV0dXJuO1xuICAgIC8vIEZpbmQgc2VudGluZWwgb3B0aW9uIHJlbmRlcmVkIGluIHRoZSBvcGVuIHBhbmVsXG4gICAgY29uc3Qgc2VudGluZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5sb2FkLW1vcmUtc2VudGluZWwnKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCFzZW50aW5lbCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmxvYWRNb3JlT2JzZXJ2ZXIpIHtcbiAgICAgIHRyeSB7IHRoaXMubG9hZE1vcmVPYnNlcnZlci5kaXNjb25uZWN0KCk7IH0gY2F0Y2gge31cbiAgICAgIHRoaXMubG9hZE1vcmVPYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gVXNlIHRoZSBzZW50aW5lbCdzIGNsb3Nlc3QgcGFuZWwgYXMgdGhlIHJvb3QgdG8gYXZvaWQgcGlja2luZyBhIHdyb25nIHBhbmVsXG4gICAgY29uc3QgcGFuZWxSb290ID0gc2VudGluZWwuY2xvc2VzdCgnLm1hdC1zZWxlY3QtcGFuZWwnKSBhcyBFbGVtZW50IHwgbnVsbDtcbiAgICB0aGlzLmxvYWRNb3JlT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgICAvLyBSZXF1ZXN0IG1vcmUgb25seSBpZiBub3QgY3VycmVudGx5IGxvYWRpbmcgYW5kIGhhc01vcmUgc3RpbGwgdHJ1ZVxuICAgICAgICAgIGlmICghdGhpcy5sb2FkaW5nTW9yZSAmJiB0aGlzLmNvbmZpZz8uaGFzTW9yZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9yZSA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZz8ua2V5IHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgcSA9IHRoaXMuc2VhcmNoVGV4dEJ5S2V5W2tleV0gfHwgJyc7XG4gICAgICAgICAgICAvLyBFbWl0IG91dHB1dHMgYW5kIGludm9rZSBvcHRpb25hbCBjYWxsYmFja3NcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmUuZW1pdCh7IGtleSwgcXVlcnk6IHEgfSk7XG4gICAgICAgICAgICB0cnkgeyB0aGlzLmNvbmZpZy5vbkxvYWRNb3JlPy4ocSk7IH0gY2F0Y2gge31cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7IHJvb3Q6IHBhbmVsUm9vdCwgdGhyZXNob2xkOiAwLjEgfSk7XG4gICAgdHJ5IHsgdGhpcy5sb2FkTW9yZU9ic2VydmVyLm9ic2VydmUoc2VudGluZWwpOyB9IGNhdGNoIHt9XG4gIH1cbn1cblxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLXVpLXJvb3RcIj5cbiAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICA8bGFiZWwgKm5nSWY9XCJjb25maWcubGFiZWxcIlxuICAgICAgY2xhc3M9XCJmb3JtLWxhYmVsIGNxYS10ZXh0LVsjMzc0MTUxXSBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1ibG9jayBjcWEtbGVhZGluZy1bMS40XSBjcWEtbWItMlwiPnt7XG4gICAgICBjb25maWcubGFiZWwgfX08L2xhYmVsPlxuICAgIDxtYXQtZm9ybS1maWVsZCAjaG9zdCBjbGFzcz1cIm1hdC1zZWxlY3QtY3VzdG9tIGNxYS13LWZ1bGxcIiBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgICAgPG1hdC1zZWxlY3QgI3NlbGVjdFJlZj1cIm1hdFNlbGVjdFwiIFtwbGFjZWhvbGRlcl09XCJkaXNwbGF5UGxhY2Vob2xkZXJcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiIFttdWx0aXBsZV09XCJpc011bHRpcGxlXCJcbiAgICAgICAgZGlzYWJsZU9wdGlvbkNlbnRlcmluZyBbcGFuZWxDbGFzc109XCJwYW5lbENsYXNzXCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb25maWcua2V5XCJcbiAgICAgICAgKG9wZW5lZENoYW5nZSk9XCJvblNlbGVjdE9wZW5lZENoYW5nZSgkZXZlbnQsIHNlbGVjdFJlZilcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudCwgc2VsZWN0UmVmKVwiPlxuXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiY29uZmlnLnNlYXJjaGFibGVcIiBjbGFzcz1cInRzLXNlbGVjdC1zZWFyY2hcIiBkaXNhYmxlZD5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0cy1zZWxlY3Qtc2VhcmNoLWlucHV0IGNxYS10ZXh0LWJsYWNrLTEwMFwiIHR5cGU9XCJ0ZXh0XCIgW3ZhbHVlXT1cInNlYXJjaFRleHRCeUtleVtjb25maWcua2V5XSB8fCAnJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGlucHV0KT1cIm9uU2VhcmNoKGNvbmZpZy5rZXksICRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCIgLz5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICBcbiAgICAgICAgPG1hdC1vcHRpb24gW25nQ2xhc3NdPVwieydjaGVja21hcmsnOiBjb25maWcub3B0aW9uU3R5bGUgPT09ICdjaGVja21hcmsnLCdjaGVja2JveCc6IGNvbmZpZy5vcHRpb25TdHlsZSAhPT0gJ2NoZWNrbWFyaycsJ21hdC1zZWxlY3RlZCc6IGFsbFNlbGVjdGVkfVwiIFtjbGFzc109XCJjb25maWcub3B0aW9uU3R5bGUgPT0gJ2NoZWNrbWFyaycgPyAnY2hlY2ttYXJrJyA6ICdjaGVja2JveCdcIiAqbmdJZj1cImlzTXVsdGlwbGUgJiYgY29uZmlnLnNob3dTZWxlY3RBbGxcIiBbdmFsdWVdPVwiU0VMRUNUX0FMTF9WQUxVRVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VDaGVja2JveFN0eWxlOyBlbHNlIHNlbGVjdEFsbERlZmF1bHRUcGxcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS13LTQgY3FhLWgtNCBjcWEtZmxleC1zaHJpbmstMCBjcWEtcm91bmRlZC1bNHB4XSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNEMUQ1REJdIGNxYS1tci0yIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1ib3JkZXItc29saWRcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImFsbFNlbGVjdGVkID8geydiYWNrZ3JvdW5kLWNvbG9yJzonIzRGNDZFNScsJ2JvcmRlci1jb2xvcic6JyM0RjQ2RTUnfSA6IHt9XCI+XG4gICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImFsbFNlbGVjdGVkXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCAzTDQuNSA4LjVMMiA2XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbWluLXctMFwiPnt7IGNvbmZpZy5zZWxlY3RBbGxMYWJlbCB8fCAnQWxsJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3NlbGVjdEFsbERlZmF1bHRUcGw+XG4gICAgICAgICAgICB7eyBjb25maWcuc2VsZWN0QWxsTGFiZWwgfHwgJ0FsbCcgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgPG1hdC1vcHRpb24gW2NsYXNzXT1cImNvbmZpZy5vcHRpb25TdHlsZSA9PSAnY2hlY2ttYXJrJyA/ICdjaGVja21hcmsnIDogJ2NoZWNrYm94J1wiICpuZ0Zvcj1cImxldCBvcHQgb2YgZmlsdGVyZWRPcHRpb25zKGNvbmZpZylcIiBbdmFsdWVdPVwib3B0LmlkID8/IG9wdC52YWx1ZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VDaGVja2JveFN0eWxlOyBlbHNlIGRlZmF1bHRPcHRpb25UcGxcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS13LTQgY3FhLWgtNCBjcWEtZmxleC1zaHJpbmstMCBjcWEtcm91bmRlZC1bNHB4XSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNEMUQ1REJdIGNxYS1tci0yIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1ib3JkZXItc29saWRcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImlzT3B0aW9uU2VsZWN0ZWQob3B0KSA/IHsnYmFja2dyb3VuZC1jb2xvcic6JyM0RjQ2RTUnLCdib3JkZXItY29sb3InOicjNEY0NkU1J30gOiB7fVwiPlxuICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc09wdGlvblNlbGVjdGVkKG9wdClcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDNMNC41IDguNUwyIDZcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1taW4tdy0wXCI+e3sgb3B0Lm5hbWUgPz8gb3B0LmxhYmVsID8/IG9wdC52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRPcHRpb25UcGw+XG4gICAgICAgICAgICB7eyBvcHQubmFtZSA/PyBvcHQubGFiZWwgPz8gb3B0LnZhbHVlIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICBcbiAgICAgICAgPCEtLSBObyByZXN1bHRzIHN0YXRlIChvbmx5IHdoZW4gbm90IGxvYWRpbmcgYW5kIG5vIG9wdGlvbnMpIC0tPlxuICAgICAgICA8bWF0LW9wdGlvbiBkaXNhYmxlZCAqbmdJZj1cIiEoY29uZmlnPy5vcHRpb25zPy5sZW5ndGggfHwgMCkgJiYgIShjb25maWc/LmlzTG9hZGluZyB8fCBsb2FkaW5nTW9yZSlcIj5cbiAgICAgICAgICBObyByZXN1bHRzXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPCEtLSBJbmZpbml0ZSBzY3JvbGwgc2VudGluZWwgKHNlcnZlclNlYXJjaCBvciBleHBsaWNpdCBoYXNNb3JlKSAtLT5cbiAgICAgICAgPG1hdC1vcHRpb24gZGlzYWJsZWQgY2xhc3M9XCJsb2FkLW1vcmUtc2VudGluZWxcIiAqbmdJZj1cImNvbmZpZz8uaGFzTW9yZVwiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29uZmlnPy5pc0xvYWRpbmcgfHwgbG9hZGluZ01vcmVcIj5Mb2FkaW5nLi4uPC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIShjb25maWc/LmlzTG9hZGluZyB8fCBsb2FkaW5nTW9yZSlcIj5TY3JvbGwgdG8gbG9hZCBtb3Jl4oCmPC9zcGFuPlxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICA8IS0tIElubGluZSBzcGlubmVyIHNob3duIHdoaWxlIGxvYWRpbmcgb3B0aW9ucyAtLT5cbiAgICAgICAgPHN2ZyAqbmdJZj1cImNvbmZpZz8uaXNMb2FkaW5nIHx8IGxvYWRpbmdNb3JlXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCA1MCA1MFwiIGFyaWEtbGFiZWw9XCJsb2FkaW5nXCJcbiAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPGNpcmNsZSBjeD1cIjI1XCIgY3k9XCIyNVwiIHI9XCIyMFwiIHN0cm9rZT1cIiNFNUU3RUJcIiBzdHJva2Utd2lkdGg9XCI2XCIgZmlsbD1cIm5vbmVcIi8+XG4gICAgICAgICAgPHBhdGggZD1cIk00NSAyNWEyMCAyMCAwIDAgMC0yMC0yMFwiIHN0cm9rZT1cIiM0RjQ2RTVcIiBzdHJva2Utd2lkdGg9XCI2XCIgZmlsbD1cIm5vbmVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCI+XG4gICAgICAgICAgICA8YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPVwidHJhbnNmb3JtXCIgdHlwZT1cInJvdGF0ZVwiIGZyb209XCIwIDI1IDI1XCIgdG89XCIzNjAgMjUgMjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyPVwiMC44c1wiIHJlcGVhdENvdW50PVwiaW5kZWZpbml0ZVwiLz5cbiAgICAgICAgICA8L3BhdGg+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTTQgNkw4IDEwTDEyIDZcIiBzdHJva2U9XCIjMEEwQTBBXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+Il19
@@ -2008,10 +2008,10 @@ class DynamicSelectFieldComponent {
2008
2008
  }
2009
2009
  }
2010
2010
  DynamicSelectFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DynamicSelectFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2011
- DynamicSelectFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: { form: "form", config: "config" }, outputs: { selectionChange: "selectionChange", selectClick: "selectClick", searchChange: "searchChange", loadMore: "loadMore" }, host: { listeners: { "document:click": "handleDocumentClick($event)" } }, viewQueries: [{ propertyName: "selectRef", first: true, predicate: ["selectRef"], descendants: true }, { propertyName: "hostEl", first: true, predicate: ["host"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\">\n <ng-container [formGroup]=\"form\">\n <label *ngIf=\"config.label\"\n class=\"form-label cqa-text-[#374151] cqa-text-[14px] cqa-font-medium cqa-block cqa-leading-[1.4] cqa-mb-2\">{{\n config.label }}</label>\n <mat-form-field #host class=\"mat-select-custom cqa-w-full\" appearance=\"fill\">\n <mat-select #selectRef=\"matSelect\" [placeholder]=\"displayPlaceholder\" [disabled]=\"isDisabled\" [multiple]=\"isMultiple\"\n disableOptionCentering [panelClass]=\"panelClass\" [formControlName]=\"config.key\"\n (openedChange)=\"onSelectOpenedChange($event, selectRef)\" (selectionChange)=\"onSelectionChange($event, selectRef)\">\n\n <mat-option *ngIf=\"config.searchable\" class=\"ts-select-search\" disabled>\n <input class=\"ts-select-search-input cqa-text-black-100\" type=\"text\" [value]=\"searchTextByKey[config.key] || ''\"\n (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\" (input)=\"onSearch(config.key, $any($event.target).value)\"\n placeholder=\"Search...\" />\n </mat-option>\n \n <mat-option [ngClass]=\"{'checkmark': config.optionStyle === 'checkmark','checkbox': config.optionStyle !== 'checkmark','mat-selected': allSelected}\" [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngIf=\"isMultiple && config.showSelectAll\" [value]=\"SELECT_ALL_VALUE\">\n <ng-container *ngIf=\"useCheckboxStyle; else selectAllDefaultTpl\">\n <span class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n [ngStyle]=\"allSelected ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n <svg *ngIf=\"allSelected\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span class=\"cqa-min-w-0\">{{ config.selectAllLabel || 'All' }}</span>\n </span>\n </ng-container>\n <ng-template #selectAllDefaultTpl>\n {{ config.selectAllLabel || 'All' }}\n </ng-template>\n </mat-option>\n\n <mat-option [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngFor=\"let opt of filteredOptions(config)\" [value]=\"opt.id ?? opt.value\">\n <ng-container *ngIf=\"useCheckboxStyle; else defaultOptionTpl\">\n <span class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n [ngStyle]=\"isOptionSelected(opt) ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n <svg *ngIf=\"isOptionSelected(opt)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span class=\"cqa-min-w-0\">{{ opt.name ?? opt.label ?? opt.value }}</span>\n </span>\n </ng-container>\n <ng-template #defaultOptionTpl>\n {{ opt.name ?? opt.label ?? opt.value }}\n </ng-template>\n </mat-option>\n \n <!-- No results state (only when not loading and no options) -->\n <mat-option disabled *ngIf=\"!(config?.options?.length || 0) && !(config?.isLoading || loadingMore)\">\n No results\n </mat-option>\n <!-- Infinite scroll sentinel (serverSearch or explicit hasMore) -->\n <mat-option disabled class=\"load-more-sentinel\" *ngIf=\"config?.hasMore\">\n <span *ngIf=\"config?.isLoading || loadingMore\">Loading...</span>\n <span *ngIf=\"!(config?.isLoading || loadingMore)\">Scroll to load more\u2026</span>\n </mat-option>\n </mat-select>\n\n <div>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </mat-form-field>\n </ng-container>\n</div>", components: [{ type: i3$2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2$2.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3$3.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2011
+ DynamicSelectFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: { form: "form", config: "config" }, outputs: { selectionChange: "selectionChange", selectClick: "selectClick", searchChange: "searchChange", loadMore: "loadMore" }, host: { listeners: { "document:click": "handleDocumentClick($event)" } }, viewQueries: [{ propertyName: "selectRef", first: true, predicate: ["selectRef"], descendants: true }, { propertyName: "hostEl", first: true, predicate: ["host"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\">\n <ng-container [formGroup]=\"form\">\n <label *ngIf=\"config.label\"\n class=\"form-label cqa-text-[#374151] cqa-text-[14px] cqa-font-medium cqa-block cqa-leading-[1.4] cqa-mb-2\">{{\n config.label }}</label>\n <mat-form-field #host class=\"mat-select-custom cqa-w-full\" appearance=\"fill\">\n <mat-select #selectRef=\"matSelect\" [placeholder]=\"displayPlaceholder\" [disabled]=\"isDisabled\" [multiple]=\"isMultiple\"\n disableOptionCentering [panelClass]=\"panelClass\" [formControlName]=\"config.key\"\n (openedChange)=\"onSelectOpenedChange($event, selectRef)\" (selectionChange)=\"onSelectionChange($event, selectRef)\">\n\n <mat-option *ngIf=\"config.searchable\" class=\"ts-select-search\" disabled>\n <input class=\"ts-select-search-input cqa-text-black-100\" type=\"text\" [value]=\"searchTextByKey[config.key] || ''\"\n (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\" (input)=\"onSearch(config.key, $any($event.target).value)\"\n placeholder=\"Search...\" />\n </mat-option>\n \n <mat-option [ngClass]=\"{'checkmark': config.optionStyle === 'checkmark','checkbox': config.optionStyle !== 'checkmark','mat-selected': allSelected}\" [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngIf=\"isMultiple && config.showSelectAll\" [value]=\"SELECT_ALL_VALUE\">\n <ng-container *ngIf=\"useCheckboxStyle; else selectAllDefaultTpl\">\n <span class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n [ngStyle]=\"allSelected ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n <svg *ngIf=\"allSelected\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span class=\"cqa-min-w-0\">{{ config.selectAllLabel || 'All' }}</span>\n </span>\n </ng-container>\n <ng-template #selectAllDefaultTpl>\n {{ config.selectAllLabel || 'All' }}\n </ng-template>\n </mat-option>\n\n <mat-option [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngFor=\"let opt of filteredOptions(config)\" [value]=\"opt.id ?? opt.value\">\n <ng-container *ngIf=\"useCheckboxStyle; else defaultOptionTpl\">\n <span class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n [ngStyle]=\"isOptionSelected(opt) ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n <svg *ngIf=\"isOptionSelected(opt)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span class=\"cqa-min-w-0\">{{ opt.name ?? opt.label ?? opt.value }}</span>\n </span>\n </ng-container>\n <ng-template #defaultOptionTpl>\n {{ opt.name ?? opt.label ?? opt.value }}\n </ng-template>\n </mat-option>\n \n <!-- No results state (only when not loading and no options) -->\n <mat-option disabled *ngIf=\"!(config?.options?.length || 0) && !(config?.isLoading || loadingMore)\">\n No results\n </mat-option>\n <!-- Infinite scroll sentinel (serverSearch or explicit hasMore) -->\n <mat-option disabled class=\"load-more-sentinel\" *ngIf=\"config?.hasMore\">\n <span *ngIf=\"config?.isLoading || loadingMore\">Loading...</span>\n <span *ngIf=\"!(config?.isLoading || loadingMore)\">Scroll to load more\u2026</span>\n </mat-option>\n </mat-select>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Inline spinner shown while loading options -->\n <svg *ngIf=\"config?.isLoading || loadingMore\" width=\"16\" height=\"16\" viewBox=\"0 0 50 50\" aria-label=\"loading\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"25\" cy=\"25\" r=\"20\" stroke=\"#E5E7EB\" stroke-width=\"6\" fill=\"none\"/>\n <path d=\"M45 25a20 20 0 0 0-20-20\" stroke=\"#4F46E5\" stroke-width=\"6\" fill=\"none\" stroke-linecap=\"round\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 25 25\" to=\"360 25 25\"\n dur=\"0.8s\" repeatCount=\"indefinite\"/>\n </path>\n </svg>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </mat-form-field>\n </ng-container>\n</div>", components: [{ type: i3$2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2$2.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3$3.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2012
2012
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DynamicSelectFieldComponent, decorators: [{
2013
2013
  type: Component,
2014
- args: [{ selector: 'cqa-dynamic-select', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-ui-root\">\n <ng-container [formGroup]=\"form\">\n <label *ngIf=\"config.label\"\n class=\"form-label cqa-text-[#374151] cqa-text-[14px] cqa-font-medium cqa-block cqa-leading-[1.4] cqa-mb-2\">{{\n config.label }}</label>\n <mat-form-field #host class=\"mat-select-custom cqa-w-full\" appearance=\"fill\">\n <mat-select #selectRef=\"matSelect\" [placeholder]=\"displayPlaceholder\" [disabled]=\"isDisabled\" [multiple]=\"isMultiple\"\n disableOptionCentering [panelClass]=\"panelClass\" [formControlName]=\"config.key\"\n (openedChange)=\"onSelectOpenedChange($event, selectRef)\" (selectionChange)=\"onSelectionChange($event, selectRef)\">\n\n <mat-option *ngIf=\"config.searchable\" class=\"ts-select-search\" disabled>\n <input class=\"ts-select-search-input cqa-text-black-100\" type=\"text\" [value]=\"searchTextByKey[config.key] || ''\"\n (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\" (input)=\"onSearch(config.key, $any($event.target).value)\"\n placeholder=\"Search...\" />\n </mat-option>\n \n <mat-option [ngClass]=\"{'checkmark': config.optionStyle === 'checkmark','checkbox': config.optionStyle !== 'checkmark','mat-selected': allSelected}\" [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngIf=\"isMultiple && config.showSelectAll\" [value]=\"SELECT_ALL_VALUE\">\n <ng-container *ngIf=\"useCheckboxStyle; else selectAllDefaultTpl\">\n <span class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n [ngStyle]=\"allSelected ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n <svg *ngIf=\"allSelected\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span class=\"cqa-min-w-0\">{{ config.selectAllLabel || 'All' }}</span>\n </span>\n </ng-container>\n <ng-template #selectAllDefaultTpl>\n {{ config.selectAllLabel || 'All' }}\n </ng-template>\n </mat-option>\n\n <mat-option [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngFor=\"let opt of filteredOptions(config)\" [value]=\"opt.id ?? opt.value\">\n <ng-container *ngIf=\"useCheckboxStyle; else defaultOptionTpl\">\n <span class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n [ngStyle]=\"isOptionSelected(opt) ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n <svg *ngIf=\"isOptionSelected(opt)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span class=\"cqa-min-w-0\">{{ opt.name ?? opt.label ?? opt.value }}</span>\n </span>\n </ng-container>\n <ng-template #defaultOptionTpl>\n {{ opt.name ?? opt.label ?? opt.value }}\n </ng-template>\n </mat-option>\n \n <!-- No results state (only when not loading and no options) -->\n <mat-option disabled *ngIf=\"!(config?.options?.length || 0) && !(config?.isLoading || loadingMore)\">\n No results\n </mat-option>\n <!-- Infinite scroll sentinel (serverSearch or explicit hasMore) -->\n <mat-option disabled class=\"load-more-sentinel\" *ngIf=\"config?.hasMore\">\n <span *ngIf=\"config?.isLoading || loadingMore\">Loading...</span>\n <span *ngIf=\"!(config?.isLoading || loadingMore)\">Scroll to load more\u2026</span>\n </mat-option>\n </mat-select>\n\n <div>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </mat-form-field>\n </ng-container>\n</div>", styles: [] }]
2014
+ args: [{ selector: 'cqa-dynamic-select', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-ui-root\">\n <ng-container [formGroup]=\"form\">\n <label *ngIf=\"config.label\"\n class=\"form-label cqa-text-[#374151] cqa-text-[14px] cqa-font-medium cqa-block cqa-leading-[1.4] cqa-mb-2\">{{\n config.label }}</label>\n <mat-form-field #host class=\"mat-select-custom cqa-w-full\" appearance=\"fill\">\n <mat-select #selectRef=\"matSelect\" [placeholder]=\"displayPlaceholder\" [disabled]=\"isDisabled\" [multiple]=\"isMultiple\"\n disableOptionCentering [panelClass]=\"panelClass\" [formControlName]=\"config.key\"\n (openedChange)=\"onSelectOpenedChange($event, selectRef)\" (selectionChange)=\"onSelectionChange($event, selectRef)\">\n\n <mat-option *ngIf=\"config.searchable\" class=\"ts-select-search\" disabled>\n <input class=\"ts-select-search-input cqa-text-black-100\" type=\"text\" [value]=\"searchTextByKey[config.key] || ''\"\n (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\" (input)=\"onSearch(config.key, $any($event.target).value)\"\n placeholder=\"Search...\" />\n </mat-option>\n \n <mat-option [ngClass]=\"{'checkmark': config.optionStyle === 'checkmark','checkbox': config.optionStyle !== 'checkmark','mat-selected': allSelected}\" [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngIf=\"isMultiple && config.showSelectAll\" [value]=\"SELECT_ALL_VALUE\">\n <ng-container *ngIf=\"useCheckboxStyle; else selectAllDefaultTpl\">\n <span class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n [ngStyle]=\"allSelected ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n <svg *ngIf=\"allSelected\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span class=\"cqa-min-w-0\">{{ config.selectAllLabel || 'All' }}</span>\n </span>\n </ng-container>\n <ng-template #selectAllDefaultTpl>\n {{ config.selectAllLabel || 'All' }}\n </ng-template>\n </mat-option>\n\n <mat-option [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngFor=\"let opt of filteredOptions(config)\" [value]=\"opt.id ?? opt.value\">\n <ng-container *ngIf=\"useCheckboxStyle; else defaultOptionTpl\">\n <span class=\"cqa-flex cqa-items-center\">\n <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n [ngStyle]=\"isOptionSelected(opt) ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n <svg *ngIf=\"isOptionSelected(opt)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span class=\"cqa-min-w-0\">{{ opt.name ?? opt.label ?? opt.value }}</span>\n </span>\n </ng-container>\n <ng-template #defaultOptionTpl>\n {{ opt.name ?? opt.label ?? opt.value }}\n </ng-template>\n </mat-option>\n \n <!-- No results state (only when not loading and no options) -->\n <mat-option disabled *ngIf=\"!(config?.options?.length || 0) && !(config?.isLoading || loadingMore)\">\n No results\n </mat-option>\n <!-- Infinite scroll sentinel (serverSearch or explicit hasMore) -->\n <mat-option disabled class=\"load-more-sentinel\" *ngIf=\"config?.hasMore\">\n <span *ngIf=\"config?.isLoading || loadingMore\">Loading...</span>\n <span *ngIf=\"!(config?.isLoading || loadingMore)\">Scroll to load more\u2026</span>\n </mat-option>\n </mat-select>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Inline spinner shown while loading options -->\n <svg *ngIf=\"config?.isLoading || loadingMore\" width=\"16\" height=\"16\" viewBox=\"0 0 50 50\" aria-label=\"loading\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"25\" cy=\"25\" r=\"20\" stroke=\"#E5E7EB\" stroke-width=\"6\" fill=\"none\"/>\n <path d=\"M45 25a20 20 0 0 0-20-20\" stroke=\"#4F46E5\" stroke-width=\"6\" fill=\"none\" stroke-linecap=\"round\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 25 25\" to=\"360 25 25\"\n dur=\"0.8s\" repeatCount=\"indefinite\"/>\n </path>\n </svg>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </mat-form-field>\n </ng-container>\n</div>", styles: [] }]
2015
2015
  }], propDecorators: { form: [{
2016
2016
  type: Input
2017
2017
  }], config: [{