barsa-sap-ui 1.0.323 → 1.0.324

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.
Files changed (26) hide show
  1. package/esm2020/lib/apply-conditional-formmatings.directive.mjs +1 -1
  2. package/esm2020/lib/barsa-cartable-form/barsa-cartable-form.component.mjs +2 -2
  3. package/esm2020/lib/barsa-group-cartable/barsa-cartable-group.component.mjs +2 -2
  4. package/esm2020/lib/barsa-pishnamayesh-payam/barsa-pishnamayesh-payam.component.mjs +3 -3
  5. package/esm2020/lib/barsa-table-column/barsa-table-column.component.mjs +3 -3
  6. package/esm2020/lib/blob-viewer/blob-viewer.component.mjs +16 -6
  7. package/esm2020/lib/card-item/card-item.component.mjs +1 -1
  8. package/esm2020/lib/column-renderer/column-renderer.component.mjs +14 -5
  9. package/esm2020/lib/file-viewer-popover/file-viewer-popover.component.mjs +5 -3
  10. package/esm2020/lib/form-toolbar-button/form-toolbar-button.component.mjs +5 -6
  11. package/esm2020/lib/layout-control/layout-control.component.mjs +3 -2
  12. package/esm2020/lib/list-item/list-item.component.mjs +1 -1
  13. package/esm2020/lib/ly-layout-panel/ly-layout-panel.component.mjs +3 -3
  14. package/esm2020/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.mjs +7 -6
  15. package/esm2020/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.mjs +3 -3
  16. package/esm2020/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.mjs +3 -3
  17. package/esm2020/lib/ui-read-only-field/ui-read-only-field.component.mjs +3 -3
  18. package/esm2020/lib/ulv-context-menu/ulv-context-menu.component.mjs +2 -2
  19. package/fesm2015/barsa-sap-ui.mjs +308 -287
  20. package/fesm2015/barsa-sap-ui.mjs.map +1 -1
  21. package/fesm2020/barsa-sap-ui.mjs +305 -284
  22. package/fesm2020/barsa-sap-ui.mjs.map +1 -1
  23. package/lib/blob-viewer/blob-viewer.component.d.ts +3 -0
  24. package/lib/column-renderer/column-renderer.component.d.ts +5 -3
  25. package/lib/file-viewer-popover/file-viewer-popover.component.d.ts +3 -1
  26. package/package.json +1 -1
@@ -359,10 +359,10 @@ export class UiMoInfoUlvComboComponent extends FieldBaseComponent {
359
359
  }
360
360
  }
361
361
  UiMoInfoUlvComboComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiMoInfoUlvComboComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
362
- UiMoInfoUlvComboComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiMoInfoUlvComboComponent, selector: "bsu-ui-mo-info-ulv-combo", inputs: { ulvAdapter: "ulvAdapter", Control: "Control", UlvUi: "UlvUi", UlvMainCtrlr: "UlvMainCtrlr", IsExpanded: "IsExpanded", Collapse: "Collapse", Expand: "Expand", on: "on", Focus: "Focus", SetUlvAdapter: "SetUlvAdapter", IsUiCreated: "IsUiCreated", Mask: "Mask", hide: "hide", show: "show", Unmask: "Unmask", getRawValue: "getRawValue" }, host: { listeners: { "keydown": "onKeyDown($event)", "keydown.alt": "onAlt($event)" } }, viewQueries: [{ propertyName: "fdComboRef", first: true, predicate: ComboboxComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container\n *ngTemplateOutlet=\"\n context._showPopup || context._showDropDown === false ? inputTemplate : comboTemplate;\n context: {\n $implicit:\n (loading$ | async) === true\n | moInfoUlvMoList\n : isDataLoadedFirstTime\n : ulvAdapter?.Setting?.Data?.MoDataList\n : UlvUi?.Setting?.Data?.MoDataList\n : ulvAdapter?.Setting?.Data?.Paging\n : UlvUi?.Setting?.Data?.Paging,\n deviceSize: deviceSize$ | async,\n disableOrReadonly: disableOrReadonly$ | async,\n disable: disable$ | async,\n readonly: readonly$ | async\n }\n \"\n>\n</ng-container>\n<ng-template\n #inputTemplate\n let-deviceSize=\"deviceSize\"\n let-disableOrReadonly=\"disableOrReadonly\"\n let-disable=\"disable\"\n let-readonly=\"readonly\"\n>\n <div style=\"display: flex\" class=\"fd-input-group\">\n <input\n fd-input-group-input\n fd-form-control\n #inputRef\n [placeholder]=\"Setting.NullText || ''\"\n [attr.readonly]=\"true\"\n [attr.disabled]=\"disable === true ? true : null\"\n [value]=\"!value ? '' : (value | bbbTranslate)\"\n [id]=\"id\"\n [style.direction]=\"Setting.IsLtr === true ? 'ltr' : null\"\n (input)=\"onValueChange($event)\"\n />\n <span fd-input-group-addon *ngIf=\"hasValue && disableOrReadonly !== true\" class=\"fd-input-group__addon--button\">\n <button fd-button fdType=\"transparent\" glyph=\"decline\" (click)=\"onClear()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"!hasValue && disableOrReadonly !== true && Setting.ShowNewButton\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"add\" (click)=\"onNew()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"hasValue && disableOrReadonly !== true && Setting.ViewRelatedFormType === 'Show'\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"edit\" (click)=\"onEdit()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"hasValue && disableOrReadonly !== true && Setting.ViewRelatedFormType === 'ShowReadOnly'\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"show\" (click)=\"onEdit()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"context._showPopup && !value && disableOrReadonly !== true\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"search\" (click)=\"onSearch()\"></button>\n </span>\n </div>\n</ng-template>\n\n<ng-template\n #comboTemplate\n let-moDataList\n let-deviceSize=\"deviceSize\"\n let-disableOrReadonly=\"disableOrReadonly\"\n let-disable=\"disable\"\n let-readonly=\"readonly\"\n>\n <div class=\"simple-combo-wrapper\">\n <fd-combobox\n #fdCombobox\n class=\"combo-mo-ulv\"\n [comboboxId]=\"comboboxId\"\n [class.has-report]=\"hasReport\"\n [class.has-Value]=\"hasValue\"\n [placeholder]=\"''\"\n [mobile]=\"deviceSize === 's'\"\n [mobileConfig]=\"mobileConfig\"\n [fillOnSelect]=\"true\"\n [readOnly]=\"readonly === true ? true : false\"\n [disabled]=\"disable === true ? true : false\"\n [dropdownValues]=\"moDataList\"\n [filterFn]=\"customFilter\"\n [openOnKeyboardEvent]=\"true\"\n [byline]=\"allColumns.length > 0\"\n [itemTemplate]=\"itemTemplate\"\n [displayFn]=\"displayFunc\"\n [showDropdownButton]=\"disableOrReadonly !== true\"\n (itemClicked)=\"onItemClick($event, moDataList)\"\n (inputTextChange)=\"onInputChange($event)\"\n (openChange)=\"onOpenChange(fdCombobox, $event)\"\n >\n </fd-combobox>\n <fdp-button\n *ngIf=\"hasValue && disableOrReadonly !== true\"\n glyph=\"decline\"\n buttonType=\"transparent\"\n class=\"combo-popup-btn\"\n (click)=\"onClear()\"\n ></fdp-button>\n\n <fdp-button\n *ngIf=\"hasReport && disableOrReadonly !== true\"\n glyph=\"search\"\n buttonType=\"transparent\"\n class=\"combo-popup-btn\"\n (click)=\"onSearch()\"\n ></fdp-button>\n </div>\n <ng-template #itemTemplate let-item>\n <div fd-list-content *ngIf=\"item.$isLoading; else itemWrapper\" style=\"width: 100%; height: 20px\">\n <bsu-mask [size]=\"'s'\" [top]=\"'10px'\"></bsu-mask>\n </div>\n <ng-template #itemWrapper>\n <ng-container *ngIf=\"item.$LoadMore; else showItem\">\n <!-- <bsu-ulv-paging\n (click)=\"onPagingClick($event)\"\n (pageChange)=\"onPageChange($event)\"\n [pagingSetting]=\"ulvAdapter.Setting.Data.Paging\"\n >\n </bsu-ulv-paging> -->\n <button\n style=\"width: 100%\"\n *ngIf=\"ulvAdapter.Setting.Data.Paging.Page + 1 < ulvAdapter.Setting.Data.Paging.TotalPages\"\n fd-button\n (click)=\"onPageChange2(ulvAdapter.Setting.Data.Paging, $event)\"\n [label]=\"'More' | bbbTranslate\"\n ></button>\n </ng-container>\n </ng-template>\n <ng-template #showItem>\n <ng-container *ngIf=\"allColumns?.length && !item.isEmpty; else captionTemplate\">\n <div *ngIf=\"!item.$__IsLast\" class=\"moinfoulv devider\"></div>\n <span fd-list-thumbnail *ngIf=\"item.$Icon\"><fd-icon [glyph]=\"item.$Icon\"></fd-icon></span>\n <div fd-list-content class=\"moinfoulv hasColumns\">\n <div fd-list-title class=\"title\">{{ allColumns[0].Alias | rval: item:allColumns:true }}</div>\n <div fd-list-byline class=\"byline\" *ngIf=\"allColumns[1]\">\n {{ allColumns[1].Alias | rval: item:allColumns:true }}\n </div>\n <div style=\"display: flex; column-gap: 8px; flex-wrap: wrap\">\n <ng-container *ngFor=\"let column of allColumns; let index = index\">\n <ng-container *ngIf=\"index > 1\">\n <ng-container *ngIf=\"column.Alias | rval: item:allColumns:true as value\">\n <span> {{ column.Alias }}:{{ value }}</span>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </ng-container>\n <ng-template #captionTemplate>\n <span fd-list-title>{{\n item.isEmpty ? ('NoData' | bbbTranslate) : (item.$MoCaption || item.$Caption | bbbTranslate)\n }}</span>\n </ng-template>\n </ng-template>\n </ng-template>\n</ng-template>\n", styles: [":host{display:block}.combo-mo-ulv{width:100%}.combo-mo-ulv ::ng-deep .fd-popover-custom{width:100%}.fd-input-group>.fd-input-group__input{background-color:transparent!important}.simple-combo-wrapper{display:flex;align-items:center;position:relative}.simple-combo-wrapper ::ng-deep .combo-mo-ulv[class*=has-] .fd-input-group{border-left:none;border-bottom-left-radius:unset;border-top-left-radius:unset}.simple-combo-wrapper ::ng-deep .combo-popup-btn{background-color:var(--sapField_Background);border-top:var(--sapField_BorderWidth) var(--sapField_BorderStyle) var(--sapField_BorderColor);border-bottom:var(--sapField_BorderWidth) var(--sapField_BorderStyle) var(--sapField_BorderColor)}.simple-combo-wrapper ::ng-deep .combo-popup-btn:first-child{margin-right:-1px}.simple-combo-wrapper ::ng-deep .combo-popup-btn:last-child{border-left:var(--sapField_BorderWidth) var(--sapField_BorderStyle) var(--sapField_BorderColor)}.combo-wrapper{display:flex;align-items:center;border:var(--sapField_BorderWidth, .0625rem) solid var(--sapField_BorderColor, #89919a);border-radius:var(--sapField_BorderCornerRadius, .125rem)}::ng-deep .combo-popup-btn{border:none;background:transparent}::ng-deep .combo-popup-btn button{border-color:transparent!important;border:none}::ng-deep .fd-combobox-count-list-results{display:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i3.ComboboxComponent, selector: "fd-combobox", inputs: ["comboboxId", "inputId", "ariaLabel", "ariaLabelledBy", "required", "dropdownValues", "filterFn", "disabled", "placeholder", "isSearch", "glyph", "showClearButton", "triggers", "closeOnOutsideClick", "openOnKeyboardEvent", "state", "itemTemplate", "groupFn", "maxHeight", "searchFn", "highlighting", "closeOnSelect", "fillOnSelect", "autoComplete", "fillControlMode", "communicateByObject", "displayFn", "buttonFocusable", "readOnly", "mobile", "mobileConfig", "showDropdownButton", "includes", "title", "byline"], outputs: ["itemClicked", "openChange", "inputTextChange"] }, { kind: "component", type: i4.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class"] }, { kind: "directive", type: i4.InputFormControlDirective, selector: "input[fd-form-control]" }, { kind: "component", type: i5.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "directive", type: i6.InputGroupInputDirective, selector: "[fd-input-group-input]", inputs: ["class"] }, { kind: "directive", type: i6.InputGroupAddOnDirective, selector: "[fd-input-group-addon]", inputs: ["class", "placement", "type", "state", "button"] }, { kind: "directive", type: i7.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i7.ListBylineDirective, selector: "[fdListByline], [fd-list-byline]", inputs: ["twoCol", "wrap"] }, { kind: "directive", type: i7.ListContentDirective, selector: "[fdListContent], [fd-list-content]", inputs: ["twoCol"] }, { kind: "directive", type: i7.ListThumbnailDirective, selector: "[fdListThumbnail], [fd-list-thumbnail]" }, { kind: "component", type: i8.ButtonComponent, selector: "fdp-button", inputs: ["glyphPosition", "label", "glyph", "buttonType", "title", "ariaSelected", "ariaDisabled", "ariaExpanded", "ariaControlsId", "ariaPressed", "name", "type", "value"], outputs: ["buttonClicked"] }, { kind: "component", type: i9.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.MoReportValuePipe, name: "rval" }, { kind: "pipe", type: i10.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i10.MoInfoUlvMoListPipe, name: "moInfoUlvMoList" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
362
+ UiMoInfoUlvComboComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiMoInfoUlvComboComponent, selector: "bsu-ui-mo-info-ulv-combo", inputs: { ulvAdapter: "ulvAdapter", Control: "Control", UlvUi: "UlvUi", UlvMainCtrlr: "UlvMainCtrlr", IsExpanded: "IsExpanded", Collapse: "Collapse", Expand: "Expand", on: "on", Focus: "Focus", SetUlvAdapter: "SetUlvAdapter", IsUiCreated: "IsUiCreated", Mask: "Mask", hide: "hide", show: "show", Unmask: "Unmask", getRawValue: "getRawValue" }, host: { listeners: { "keydown": "onKeyDown($event)", "keydown.alt": "onAlt($event)" } }, viewQueries: [{ propertyName: "fdComboRef", first: true, predicate: ComboboxComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container\n *ngTemplateOutlet=\"\n context._showPopup || context._showDropDown === false ? inputTemplate : comboTemplate;\n context: {\n $implicit:\n (loading$ | async) === true\n | moInfoUlvMoList\n : isDataLoadedFirstTime\n : ulvAdapter?.Setting?.Data?.MoDataList\n : UlvUi?.Setting?.Data?.MoDataList\n : ulvAdapter?.Setting?.Data?.Paging\n : UlvUi?.Setting?.Data?.Paging,\n deviceSize: deviceSize$ | async,\n disableOrReadonly: disableOrReadonly$ | async,\n disable: disable$ | async,\n readonly: readonly$ | async\n }\n \"\n>\n</ng-container>\n<ng-template\n #inputTemplate\n let-deviceSize=\"deviceSize\"\n let-disableOrReadonly=\"disableOrReadonly\"\n let-disable=\"disable\"\n let-readonly=\"readonly\"\n>\n <div style=\"display: flex\" class=\"fd-input-group\">\n <input\n fd-input-group-input\n fd-form-control\n #inputRef\n [placeholder]=\"Setting.NullText || ''\"\n [attr.readonly]=\"true\"\n [attr.disabled]=\"disable === true ? true : null\"\n [value]=\"!value ? '' : (value | bbbTranslate)\"\n [id]=\"id\"\n [style.direction]=\"Setting.IsLtr === true ? 'ltr' : null\"\n (input)=\"onValueChange($event)\"\n />\n <span fd-input-group-addon *ngIf=\"hasValue && disableOrReadonly !== true\" class=\"fd-input-group__addon--button\">\n <button fd-button fdType=\"transparent\" glyph=\"decline\" (click)=\"onClear()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"!hasValue && disableOrReadonly !== true && Setting.ShowNewButton\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"add\" (click)=\"onNew()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"hasValue && disableOrReadonly !== true && Setting.ViewRelatedFormType === 'Show'\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"edit\" (click)=\"onEdit()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"hasValue && disableOrReadonly !== true && Setting.ViewRelatedFormType === 'ShowReadOnly'\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"show\" (click)=\"onEdit()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"context._showPopup && !value && disableOrReadonly !== true\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"search\" (click)=\"onSearch()\"></button>\n </span>\n </div>\n</ng-template>\n\n<ng-template\n #comboTemplate\n let-moDataList\n let-deviceSize=\"deviceSize\"\n let-disableOrReadonly=\"disableOrReadonly\"\n let-disable=\"disable\"\n let-readonly=\"readonly\"\n>\n <div class=\"simple-combo-wrapper\">\n <fd-combobox\n #fdCombobox\n class=\"combo-mo-ulv\"\n [comboboxId]=\"comboboxId\"\n [class.has-report]=\"hasReport\"\n [class.has-Value]=\"hasValue\"\n [placeholder]=\"'Select' | bbbTranslate\"\n [mobile]=\"deviceSize === 's'\"\n [mobileConfig]=\"mobileConfig\"\n [fillOnSelect]=\"true\"\n [readOnly]=\"readonly === true ? true : false\"\n [disabled]=\"disable === true ? true : false\"\n [dropdownValues]=\"moDataList\"\n [filterFn]=\"customFilter\"\n [openOnKeyboardEvent]=\"true\"\n [byline]=\"allColumns.length > 0\"\n [itemTemplate]=\"itemTemplate\"\n [displayFn]=\"displayFunc\"\n [showDropdownButton]=\"disableOrReadonly !== true\"\n (itemClicked)=\"onItemClick($event, moDataList)\"\n (inputTextChange)=\"onInputChange($event)\"\n (openChange)=\"onOpenChange(fdCombobox, $event)\"\n >\n </fd-combobox>\n <fdp-button\n *ngIf=\"hasValue && disableOrReadonly !== true\"\n glyph=\"decline\"\n buttonType=\"transparent\"\n class=\"combo-popup-btn\"\n (click)=\"onClear()\"\n ></fdp-button>\n\n <fdp-button\n *ngIf=\"hasReport && disableOrReadonly !== true\"\n glyph=\"search\"\n buttonType=\"transparent\"\n class=\"combo-popup-btn\"\n (click)=\"onSearch()\"\n ></fdp-button>\n </div>\n <ng-template #itemTemplate let-item>\n <div fd-list-content *ngIf=\"item.$isLoading; else itemWrapper\" style=\"width: 100%; height: 20px\">\n <bsu-mask [size]=\"'s'\" [top]=\"'10px'\"></bsu-mask>\n </div>\n <ng-template #itemWrapper>\n <ng-container *ngIf=\"item.$LoadMore; else showItem\">\n <!-- <bsu-ulv-paging\n (click)=\"onPagingClick($event)\"\n (pageChange)=\"onPageChange($event)\"\n [pagingSetting]=\"ulvAdapter.Setting.Data.Paging\"\n >\n </bsu-ulv-paging> -->\n <button\n style=\"width: 100%\"\n *ngIf=\"ulvAdapter.Setting.Data.Paging.Page + 1 < ulvAdapter.Setting.Data.Paging.TotalPages\"\n fd-button\n (click)=\"onPageChange2(ulvAdapter.Setting.Data.Paging, $event)\"\n [label]=\"'More' | bbbTranslate\"\n ></button>\n </ng-container>\n </ng-template>\n <ng-template #showItem>\n <ng-container *ngIf=\"allColumns?.length && !item.isEmpty; else captionTemplate\">\n <div *ngIf=\"!item.$__IsLast\" class=\"moinfoulv devider\"></div>\n <span fd-list-thumbnail *ngIf=\"item.$Icon\"><fd-icon [glyph]=\"item.$Icon\"></fd-icon></span>\n <div fd-list-content class=\"moinfoulv hasColumns\">\n <div fd-list-title class=\"title\">{{ allColumns[0].Alias | rval: item:allColumns:true }}</div>\n <div fd-list-byline class=\"byline\" *ngIf=\"allColumns[1]\">\n {{ allColumns[1].Alias | rval: item:allColumns:true }}\n </div>\n <div style=\"display: flex; column-gap: 8px; flex-wrap: wrap\">\n <ng-container *ngFor=\"let column of allColumns; let index = index\">\n <ng-container *ngIf=\"index > 1\">\n <ng-container *ngIf=\"column.Alias | rval: item:allColumns:true as value\">\n <span> {{ column.Alias }}:{{ value }}</span>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </ng-container>\n <ng-template #captionTemplate>\n <span fd-list-title>{{\n item.isEmpty ? ('NoData' | bbbTranslate) : (item.$MoCaption || item.$Caption | bbbTranslate)\n }}</span>\n </ng-template>\n </ng-template>\n </ng-template>\n</ng-template>\n", styles: [":host{display:block}.combo-mo-ulv{width:100%}.combo-mo-ulv ::ng-deep .fd-popover-custom{width:100%}.fd-input-group>.fd-input-group__input{background-color:transparent!important}.simple-combo-wrapper{display:flex;align-items:center;position:relative}.simple-combo-wrapper ::ng-deep .combo-mo-ulv[class*=has-] .fd-input-group{border-left:none;border-bottom-left-radius:unset;border-top-left-radius:unset}.simple-combo-wrapper ::ng-deep .combo-popup-btn{background-color:var(--sapField_Background);border-top:var(--sapField_BorderWidth) var(--sapField_BorderStyle) var(--sapField_BorderColor);border-bottom:var(--sapField_BorderWidth) var(--sapField_BorderStyle) var(--sapField_BorderColor)}.simple-combo-wrapper ::ng-deep .combo-popup-btn:first-child{margin-right:-1px}.simple-combo-wrapper ::ng-deep .combo-popup-btn:last-child{border-left:var(--sapField_BorderWidth) var(--sapField_BorderStyle) var(--sapField_BorderColor)}.combo-wrapper{display:flex;align-items:center;border:var(--sapField_BorderWidth, .0625rem) solid var(--sapField_BorderColor, #89919a);border-radius:var(--sapField_BorderCornerRadius, .125rem)}::ng-deep .combo-popup-btn{border:none;background:transparent}::ng-deep .combo-popup-btn button{border-color:transparent!important;border:none}::ng-deep .fd-combobox-count-list-results{display:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i3.ComboboxComponent, selector: "fd-combobox", inputs: ["comboboxId", "inputId", "ariaLabel", "ariaLabelledBy", "required", "dropdownValues", "filterFn", "disabled", "placeholder", "isSearch", "glyph", "showClearButton", "triggers", "closeOnOutsideClick", "openOnKeyboardEvent", "state", "itemTemplate", "groupFn", "maxHeight", "searchFn", "highlighting", "closeOnSelect", "fillOnSelect", "autoComplete", "fillControlMode", "communicateByObject", "displayFn", "buttonFocusable", "readOnly", "mobile", "mobileConfig", "showDropdownButton", "includes", "title", "byline"], outputs: ["itemClicked", "openChange", "inputTextChange"] }, { kind: "component", type: i4.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class"] }, { kind: "directive", type: i4.InputFormControlDirective, selector: "input[fd-form-control]" }, { kind: "component", type: i5.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "directive", type: i6.InputGroupInputDirective, selector: "[fd-input-group-input]", inputs: ["class"] }, { kind: "directive", type: i6.InputGroupAddOnDirective, selector: "[fd-input-group-addon]", inputs: ["class", "placement", "type", "state", "button"] }, { kind: "directive", type: i7.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i7.ListBylineDirective, selector: "[fdListByline], [fd-list-byline]", inputs: ["twoCol", "wrap"] }, { kind: "directive", type: i7.ListContentDirective, selector: "[fdListContent], [fd-list-content]", inputs: ["twoCol"] }, { kind: "directive", type: i7.ListThumbnailDirective, selector: "[fdListThumbnail], [fd-list-thumbnail]" }, { kind: "component", type: i8.ButtonComponent, selector: "fdp-button", inputs: ["glyphPosition", "label", "glyph", "buttonType", "title", "ariaSelected", "ariaDisabled", "ariaExpanded", "ariaControlsId", "ariaPressed", "name", "type", "value"], outputs: ["buttonClicked"] }, { kind: "component", type: i9.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.MoReportValuePipe, name: "rval" }, { kind: "pipe", type: i10.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i10.MoInfoUlvMoListPipe, name: "moInfoUlvMoList" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
363
363
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiMoInfoUlvComboComponent, decorators: [{
364
364
  type: Component,
365
- args: [{ selector: 'bsu-ui-mo-info-ulv-combo', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container\n *ngTemplateOutlet=\"\n context._showPopup || context._showDropDown === false ? inputTemplate : comboTemplate;\n context: {\n $implicit:\n (loading$ | async) === true\n | moInfoUlvMoList\n : isDataLoadedFirstTime\n : ulvAdapter?.Setting?.Data?.MoDataList\n : UlvUi?.Setting?.Data?.MoDataList\n : ulvAdapter?.Setting?.Data?.Paging\n : UlvUi?.Setting?.Data?.Paging,\n deviceSize: deviceSize$ | async,\n disableOrReadonly: disableOrReadonly$ | async,\n disable: disable$ | async,\n readonly: readonly$ | async\n }\n \"\n>\n</ng-container>\n<ng-template\n #inputTemplate\n let-deviceSize=\"deviceSize\"\n let-disableOrReadonly=\"disableOrReadonly\"\n let-disable=\"disable\"\n let-readonly=\"readonly\"\n>\n <div style=\"display: flex\" class=\"fd-input-group\">\n <input\n fd-input-group-input\n fd-form-control\n #inputRef\n [placeholder]=\"Setting.NullText || ''\"\n [attr.readonly]=\"true\"\n [attr.disabled]=\"disable === true ? true : null\"\n [value]=\"!value ? '' : (value | bbbTranslate)\"\n [id]=\"id\"\n [style.direction]=\"Setting.IsLtr === true ? 'ltr' : null\"\n (input)=\"onValueChange($event)\"\n />\n <span fd-input-group-addon *ngIf=\"hasValue && disableOrReadonly !== true\" class=\"fd-input-group__addon--button\">\n <button fd-button fdType=\"transparent\" glyph=\"decline\" (click)=\"onClear()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"!hasValue && disableOrReadonly !== true && Setting.ShowNewButton\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"add\" (click)=\"onNew()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"hasValue && disableOrReadonly !== true && Setting.ViewRelatedFormType === 'Show'\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"edit\" (click)=\"onEdit()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"hasValue && disableOrReadonly !== true && Setting.ViewRelatedFormType === 'ShowReadOnly'\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"show\" (click)=\"onEdit()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"context._showPopup && !value && disableOrReadonly !== true\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"search\" (click)=\"onSearch()\"></button>\n </span>\n </div>\n</ng-template>\n\n<ng-template\n #comboTemplate\n let-moDataList\n let-deviceSize=\"deviceSize\"\n let-disableOrReadonly=\"disableOrReadonly\"\n let-disable=\"disable\"\n let-readonly=\"readonly\"\n>\n <div class=\"simple-combo-wrapper\">\n <fd-combobox\n #fdCombobox\n class=\"combo-mo-ulv\"\n [comboboxId]=\"comboboxId\"\n [class.has-report]=\"hasReport\"\n [class.has-Value]=\"hasValue\"\n [placeholder]=\"''\"\n [mobile]=\"deviceSize === 's'\"\n [mobileConfig]=\"mobileConfig\"\n [fillOnSelect]=\"true\"\n [readOnly]=\"readonly === true ? true : false\"\n [disabled]=\"disable === true ? true : false\"\n [dropdownValues]=\"moDataList\"\n [filterFn]=\"customFilter\"\n [openOnKeyboardEvent]=\"true\"\n [byline]=\"allColumns.length > 0\"\n [itemTemplate]=\"itemTemplate\"\n [displayFn]=\"displayFunc\"\n [showDropdownButton]=\"disableOrReadonly !== true\"\n (itemClicked)=\"onItemClick($event, moDataList)\"\n (inputTextChange)=\"onInputChange($event)\"\n (openChange)=\"onOpenChange(fdCombobox, $event)\"\n >\n </fd-combobox>\n <fdp-button\n *ngIf=\"hasValue && disableOrReadonly !== true\"\n glyph=\"decline\"\n buttonType=\"transparent\"\n class=\"combo-popup-btn\"\n (click)=\"onClear()\"\n ></fdp-button>\n\n <fdp-button\n *ngIf=\"hasReport && disableOrReadonly !== true\"\n glyph=\"search\"\n buttonType=\"transparent\"\n class=\"combo-popup-btn\"\n (click)=\"onSearch()\"\n ></fdp-button>\n </div>\n <ng-template #itemTemplate let-item>\n <div fd-list-content *ngIf=\"item.$isLoading; else itemWrapper\" style=\"width: 100%; height: 20px\">\n <bsu-mask [size]=\"'s'\" [top]=\"'10px'\"></bsu-mask>\n </div>\n <ng-template #itemWrapper>\n <ng-container *ngIf=\"item.$LoadMore; else showItem\">\n <!-- <bsu-ulv-paging\n (click)=\"onPagingClick($event)\"\n (pageChange)=\"onPageChange($event)\"\n [pagingSetting]=\"ulvAdapter.Setting.Data.Paging\"\n >\n </bsu-ulv-paging> -->\n <button\n style=\"width: 100%\"\n *ngIf=\"ulvAdapter.Setting.Data.Paging.Page + 1 < ulvAdapter.Setting.Data.Paging.TotalPages\"\n fd-button\n (click)=\"onPageChange2(ulvAdapter.Setting.Data.Paging, $event)\"\n [label]=\"'More' | bbbTranslate\"\n ></button>\n </ng-container>\n </ng-template>\n <ng-template #showItem>\n <ng-container *ngIf=\"allColumns?.length && !item.isEmpty; else captionTemplate\">\n <div *ngIf=\"!item.$__IsLast\" class=\"moinfoulv devider\"></div>\n <span fd-list-thumbnail *ngIf=\"item.$Icon\"><fd-icon [glyph]=\"item.$Icon\"></fd-icon></span>\n <div fd-list-content class=\"moinfoulv hasColumns\">\n <div fd-list-title class=\"title\">{{ allColumns[0].Alias | rval: item:allColumns:true }}</div>\n <div fd-list-byline class=\"byline\" *ngIf=\"allColumns[1]\">\n {{ allColumns[1].Alias | rval: item:allColumns:true }}\n </div>\n <div style=\"display: flex; column-gap: 8px; flex-wrap: wrap\">\n <ng-container *ngFor=\"let column of allColumns; let index = index\">\n <ng-container *ngIf=\"index > 1\">\n <ng-container *ngIf=\"column.Alias | rval: item:allColumns:true as value\">\n <span> {{ column.Alias }}:{{ value }}</span>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </ng-container>\n <ng-template #captionTemplate>\n <span fd-list-title>{{\n item.isEmpty ? ('NoData' | bbbTranslate) : (item.$MoCaption || item.$Caption | bbbTranslate)\n }}</span>\n </ng-template>\n </ng-template>\n </ng-template>\n</ng-template>\n", styles: [":host{display:block}.combo-mo-ulv{width:100%}.combo-mo-ulv ::ng-deep .fd-popover-custom{width:100%}.fd-input-group>.fd-input-group__input{background-color:transparent!important}.simple-combo-wrapper{display:flex;align-items:center;position:relative}.simple-combo-wrapper ::ng-deep .combo-mo-ulv[class*=has-] .fd-input-group{border-left:none;border-bottom-left-radius:unset;border-top-left-radius:unset}.simple-combo-wrapper ::ng-deep .combo-popup-btn{background-color:var(--sapField_Background);border-top:var(--sapField_BorderWidth) var(--sapField_BorderStyle) var(--sapField_BorderColor);border-bottom:var(--sapField_BorderWidth) var(--sapField_BorderStyle) var(--sapField_BorderColor)}.simple-combo-wrapper ::ng-deep .combo-popup-btn:first-child{margin-right:-1px}.simple-combo-wrapper ::ng-deep .combo-popup-btn:last-child{border-left:var(--sapField_BorderWidth) var(--sapField_BorderStyle) var(--sapField_BorderColor)}.combo-wrapper{display:flex;align-items:center;border:var(--sapField_BorderWidth, .0625rem) solid var(--sapField_BorderColor, #89919a);border-radius:var(--sapField_BorderCornerRadius, .125rem)}::ng-deep .combo-popup-btn{border:none;background:transparent}::ng-deep .combo-popup-btn button{border-color:transparent!important;border:none}::ng-deep .fd-combobox-count-list-results{display:none}\n"] }]
365
+ args: [{ selector: 'bsu-ui-mo-info-ulv-combo', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container\n *ngTemplateOutlet=\"\n context._showPopup || context._showDropDown === false ? inputTemplate : comboTemplate;\n context: {\n $implicit:\n (loading$ | async) === true\n | moInfoUlvMoList\n : isDataLoadedFirstTime\n : ulvAdapter?.Setting?.Data?.MoDataList\n : UlvUi?.Setting?.Data?.MoDataList\n : ulvAdapter?.Setting?.Data?.Paging\n : UlvUi?.Setting?.Data?.Paging,\n deviceSize: deviceSize$ | async,\n disableOrReadonly: disableOrReadonly$ | async,\n disable: disable$ | async,\n readonly: readonly$ | async\n }\n \"\n>\n</ng-container>\n<ng-template\n #inputTemplate\n let-deviceSize=\"deviceSize\"\n let-disableOrReadonly=\"disableOrReadonly\"\n let-disable=\"disable\"\n let-readonly=\"readonly\"\n>\n <div style=\"display: flex\" class=\"fd-input-group\">\n <input\n fd-input-group-input\n fd-form-control\n #inputRef\n [placeholder]=\"Setting.NullText || ''\"\n [attr.readonly]=\"true\"\n [attr.disabled]=\"disable === true ? true : null\"\n [value]=\"!value ? '' : (value | bbbTranslate)\"\n [id]=\"id\"\n [style.direction]=\"Setting.IsLtr === true ? 'ltr' : null\"\n (input)=\"onValueChange($event)\"\n />\n <span fd-input-group-addon *ngIf=\"hasValue && disableOrReadonly !== true\" class=\"fd-input-group__addon--button\">\n <button fd-button fdType=\"transparent\" glyph=\"decline\" (click)=\"onClear()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"!hasValue && disableOrReadonly !== true && Setting.ShowNewButton\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"add\" (click)=\"onNew()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"hasValue && disableOrReadonly !== true && Setting.ViewRelatedFormType === 'Show'\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"edit\" (click)=\"onEdit()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"hasValue && disableOrReadonly !== true && Setting.ViewRelatedFormType === 'ShowReadOnly'\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"show\" (click)=\"onEdit()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"context._showPopup && !value && disableOrReadonly !== true\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"search\" (click)=\"onSearch()\"></button>\n </span>\n </div>\n</ng-template>\n\n<ng-template\n #comboTemplate\n let-moDataList\n let-deviceSize=\"deviceSize\"\n let-disableOrReadonly=\"disableOrReadonly\"\n let-disable=\"disable\"\n let-readonly=\"readonly\"\n>\n <div class=\"simple-combo-wrapper\">\n <fd-combobox\n #fdCombobox\n class=\"combo-mo-ulv\"\n [comboboxId]=\"comboboxId\"\n [class.has-report]=\"hasReport\"\n [class.has-Value]=\"hasValue\"\n [placeholder]=\"'Select' | bbbTranslate\"\n [mobile]=\"deviceSize === 's'\"\n [mobileConfig]=\"mobileConfig\"\n [fillOnSelect]=\"true\"\n [readOnly]=\"readonly === true ? true : false\"\n [disabled]=\"disable === true ? true : false\"\n [dropdownValues]=\"moDataList\"\n [filterFn]=\"customFilter\"\n [openOnKeyboardEvent]=\"true\"\n [byline]=\"allColumns.length > 0\"\n [itemTemplate]=\"itemTemplate\"\n [displayFn]=\"displayFunc\"\n [showDropdownButton]=\"disableOrReadonly !== true\"\n (itemClicked)=\"onItemClick($event, moDataList)\"\n (inputTextChange)=\"onInputChange($event)\"\n (openChange)=\"onOpenChange(fdCombobox, $event)\"\n >\n </fd-combobox>\n <fdp-button\n *ngIf=\"hasValue && disableOrReadonly !== true\"\n glyph=\"decline\"\n buttonType=\"transparent\"\n class=\"combo-popup-btn\"\n (click)=\"onClear()\"\n ></fdp-button>\n\n <fdp-button\n *ngIf=\"hasReport && disableOrReadonly !== true\"\n glyph=\"search\"\n buttonType=\"transparent\"\n class=\"combo-popup-btn\"\n (click)=\"onSearch()\"\n ></fdp-button>\n </div>\n <ng-template #itemTemplate let-item>\n <div fd-list-content *ngIf=\"item.$isLoading; else itemWrapper\" style=\"width: 100%; height: 20px\">\n <bsu-mask [size]=\"'s'\" [top]=\"'10px'\"></bsu-mask>\n </div>\n <ng-template #itemWrapper>\n <ng-container *ngIf=\"item.$LoadMore; else showItem\">\n <!-- <bsu-ulv-paging\n (click)=\"onPagingClick($event)\"\n (pageChange)=\"onPageChange($event)\"\n [pagingSetting]=\"ulvAdapter.Setting.Data.Paging\"\n >\n </bsu-ulv-paging> -->\n <button\n style=\"width: 100%\"\n *ngIf=\"ulvAdapter.Setting.Data.Paging.Page + 1 < ulvAdapter.Setting.Data.Paging.TotalPages\"\n fd-button\n (click)=\"onPageChange2(ulvAdapter.Setting.Data.Paging, $event)\"\n [label]=\"'More' | bbbTranslate\"\n ></button>\n </ng-container>\n </ng-template>\n <ng-template #showItem>\n <ng-container *ngIf=\"allColumns?.length && !item.isEmpty; else captionTemplate\">\n <div *ngIf=\"!item.$__IsLast\" class=\"moinfoulv devider\"></div>\n <span fd-list-thumbnail *ngIf=\"item.$Icon\"><fd-icon [glyph]=\"item.$Icon\"></fd-icon></span>\n <div fd-list-content class=\"moinfoulv hasColumns\">\n <div fd-list-title class=\"title\">{{ allColumns[0].Alias | rval: item:allColumns:true }}</div>\n <div fd-list-byline class=\"byline\" *ngIf=\"allColumns[1]\">\n {{ allColumns[1].Alias | rval: item:allColumns:true }}\n </div>\n <div style=\"display: flex; column-gap: 8px; flex-wrap: wrap\">\n <ng-container *ngFor=\"let column of allColumns; let index = index\">\n <ng-container *ngIf=\"index > 1\">\n <ng-container *ngIf=\"column.Alias | rval: item:allColumns:true as value\">\n <span> {{ column.Alias }}:{{ value }}</span>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </ng-container>\n <ng-template #captionTemplate>\n <span fd-list-title>{{\n item.isEmpty ? ('NoData' | bbbTranslate) : (item.$MoCaption || item.$Caption | bbbTranslate)\n }}</span>\n </ng-template>\n </ng-template>\n </ng-template>\n</ng-template>\n", styles: [":host{display:block}.combo-mo-ulv{width:100%}.combo-mo-ulv ::ng-deep .fd-popover-custom{width:100%}.fd-input-group>.fd-input-group__input{background-color:transparent!important}.simple-combo-wrapper{display:flex;align-items:center;position:relative}.simple-combo-wrapper ::ng-deep .combo-mo-ulv[class*=has-] .fd-input-group{border-left:none;border-bottom-left-radius:unset;border-top-left-radius:unset}.simple-combo-wrapper ::ng-deep .combo-popup-btn{background-color:var(--sapField_Background);border-top:var(--sapField_BorderWidth) var(--sapField_BorderStyle) var(--sapField_BorderColor);border-bottom:var(--sapField_BorderWidth) var(--sapField_BorderStyle) var(--sapField_BorderColor)}.simple-combo-wrapper ::ng-deep .combo-popup-btn:first-child{margin-right:-1px}.simple-combo-wrapper ::ng-deep .combo-popup-btn:last-child{border-left:var(--sapField_BorderWidth) var(--sapField_BorderStyle) var(--sapField_BorderColor)}.combo-wrapper{display:flex;align-items:center;border:var(--sapField_BorderWidth, .0625rem) solid var(--sapField_BorderColor, #89919a);border-radius:var(--sapField_BorderCornerRadius, .125rem)}::ng-deep .combo-popup-btn{border:none;background:transparent}::ng-deep .combo-popup-btn button{border-color:transparent!important;border:none}::ng-deep .fd-combobox-count-list-results{display:none}\n"] }]
366
366
  }], propDecorators: { ulvAdapter: [{
367
367
  type: Input
368
368
  }], Control: [{
@@ -405,4 +405,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
405
405
  }], getRawValue: [{
406
406
  type: Input
407
407
  }] } });
408
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbW8taW5mby11bHYtY29tYm8vdWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbW8taW5mby11bHYtY29tYm8vdWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCx1QkFBdUIsRUFHMUIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsaUJBQWlCLEVBQTJCLE1BQU0sdUJBQXVCLENBQUM7QUFFbkYsT0FBTyxFQUNILGtCQUFrQixFQUNsQixRQUFRLEVBTVIsa0JBQWtCLEVBR2xCLFdBQVcsRUFFZCxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7QUFROUIsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGtCQUFrQjtJQU5qRTs7UUF3QkksZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBYXBDLGVBQVUsR0FBdUIsRUFBRSxDQUFDO1FBRzVCLGtDQUE2QixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDcEQsdUJBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUN6QyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUF3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QUk7c0JBREgsS0FBSztnQkFVTixNQUFNO3NCQURMLEtBQUs7Z0JBTU4sV0FBVztzQkFEVixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBPbkluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRhcCwgdGFrZVVudGlsLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb21ib2JveENvbXBvbmVudCwgQ29tYm9ib3hJdGVtLCBEaWFsb2dSZWYgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xuXG5pbXBvcnQge1xuICAgIEZpZWxkQmFzZUNvbXBvbmVudCxcbiAgICBCYXJzYUFwaSxcbiAgICBSZXBvcnRFeHRyYUluZm8sXG4gICAgTW9Gb3JSZXBvcnRNb2RlbCxcbiAgICBDbGFzc05hbWVzTW9kZWwsXG4gICAgVmlld1R5cGVzLFxuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgUHJldmVudERlZmF1bEV2ZW50LFxuICAgIFBhZ2luZ1NldHRpbmcsXG4gICAgUmVwb3J0Vmlld0NvbHVtbixcbiAgICBnZXRVbmlxdWVJZCxcbiAgICBHcmlkVmlld1xufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYnN1LXVpLW1vLWluZm8tdWx2LWNvbWJvJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VpLW1vLWluZm8tdWx2LWNvbWJvLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVWlNb0luZm9VbHZDb21ib0NvbXBvbmVudCBleHRlbmRzIEZpZWxkQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQElucHV0KCkgdWx2QWRhcHRlcjoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIFNldHRpbmc6IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgICAgIFZpZXc6IFZpZXdUeXBlcztcbiAgICAgICAgICAgIENsYXNzTmFtZXM6IENsYXNzTmFtZXNNb2RlbDtcbiAgICAgICAgICAgIEV4dHJhOiBSZXBvcnRFeHRyYUluZm87XG4gICAgICAgICAgICBEYXRhOiBNb0ZvclJlcG9ydE1vZGVsO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgQElucHV0KCkgQ29udHJvbDogYW55O1xuICAgIEBJbnB1dCgpIFVsdlVpOiBhbnk7XG4gICAgQElucHV0KCkgVWx2TWFpbkN0cmxyOiBhbnk7XG5cbiAgICBAVmlld0NoaWxkKENvbWJvYm94Q29tcG9uZW50KSBmZENvbWJvUmVmOiBDb21ib2JveENvbXBvbmVudDtcblxuICAgIGlzRXhwYW5kOiBib29sZWFuO1xuICAgIHNtYXJ0Q2hhbmdlID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICAgIGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHRpY2tSZWY6IGFueTtcbiAgICBpbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaXNGaXJzdExvYWQ6IGJvb2xlYW47XG4gICAgcG9wb3ZlckVsZW1lbnQ6IGFueTtcbiAgICByYXdWYWx1ZTogc3RyaW5nO1xuICAgIGZvcm1TZWxlY3Rpb25EaWFsb2c6IERpYWxvZ1JlZjtcbiAgICBpc09wZW5TZWxlY3Rpb25EaWFsb2c6IGJvb2xlYW47XG4gICAgaGFzUmVwb3J0OiBhbnk7XG4gICAgb3JpZ2luYWxWYWx1ZTogYW55O1xuICAgIGlzRGF0YUxvYWRlZEZpcnN0VGltZTogYm9vbGVhbjtcbiAgICB2YWx1ZVRleHQ6IHN0cmluZztcbiAgICBhbGxDb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10gPSBbXTtcbiAgICBoYXNWYWx1ZTogYm9vbGVhbjtcbiAgICBjb21ib2JveElkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfb3BlblBvcHVwRm9ybVNlbGVjdGlvblNvdXJjZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBfY2xvc2VEaWFsb2dTb3VyY2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgX2xvYWRpbmdTb3VyY2UgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pIG9uS2V5RG93bihlKTogdm9pZCB7XG4gICAgICAgIGUgPSBuZXcgQmFyc2FBcGkuRXh0LkV2ZW50T2JqZWN0SW1wbChlKTtcbiAgICAgICAgY29uc3QgayA9IGUuZ2V0S2V5KCk7XG4gICAgICAgIGlmIChlLmtleUNvZGUgPT09IGUuRU5URVIgfHwgayA9PT0gQmFyc2FBcGkuRXh0LkV2ZW50T2JqZWN0LlRBQikge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgna2V5ZG93bicsIHRoaXMuY29udGV4dCwgZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hbHQnLCBbJyRldmVudCddKVxuICAgIG9uQWx0KGUpOiB2b2lkIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb21ib2JveElkID0gZ2V0VW5pcXVlSWQoMyk7XG4gICAgICAgIHRoaXMuX2NoZWNrSGFzVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMubG9hZGluZyQgPSB0aGlzLl9sb2FkaW5nU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkZWRGaXJzdFRpbWUgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnVsdkFkYXB0ZXI/LlNldHRpbmc/LkRhdGE/Lk1vRGF0YUxpc3QgPT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMuVWx2VWk/LlNldHRpbmc/LkRhdGE/Lk1vRGF0YUxpc3QgPT09ICdvYmplY3QnO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zbWFydENoYW5nZVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxuICAgICAgICAgICAgICAgIGZpbHRlcigodmFsdWUpID0+IHRoaXMuX2ZpbHRlclNtYXJ0Q2hhbmdlKHZhbHVlKSksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICB0YXAoKHZhbHVlKSA9PiAodGhpcy5yYXdWYWx1ZSA9IHZhbHVlKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnU21hcnRDaGFuZ2UnLCB0aGlzLmNvbnRleHQsIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9vcGVuUG9wdXBGb3JtU2VsZWN0aW9uU291cmNlXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9jbG9zZURpYWxvZ1NvdXJjZSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLlVsdlVpICYmICF0aGlzLmlzT3BlblNlbGVjdGlvbkRpYWxvZyAmJiB0aGlzLmNvbnRleHQuX3Nob3dQb3B1cCksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX29wZW5Qb3B1cEZvcm1TZWxlY3Rpb24oKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdGhpcy5oYXNSZXBvcnQgPSB0aGlzLlNldHRpbmcuUmVsYXRpb25WaWV3VHlwZSA9PT0gJ1JlcG9ydFZpZXcnIHx8IHRoaXMuU2V0dGluZy5SZXBvcnROYW1lID09PSAnSGllcmFyY2hpY2FsJztcbiAgICAgICAgdGhpcy5Db250cm9sID0gdGhpcztcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZXRWYWx1ZVRleHQodGhpcy52YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICAvLyB0aGlzLl9zZXRDb21ib1RleHQodGhpcy52YWx1ZSk7XG4gICAgfVxuICAgIG9uUGFnaW5nQ2xpY2soZSk6IHZvaWQge1xuICAgICAgICBQcmV2ZW50RGVmYXVsRXZlbnQoZSk7XG4gICAgfVxuICAgIG9uUGFnZUNoYW5nZShlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbG9hZGluZ1NvdXJjZS5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLnVsdkFkYXB0ZXIuRGF0YUN0cmxyLk1vdmVUb1BhZ2UoZSwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ1NvdXJjZS5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG9uSXRlbUNsaWNrKGU6IENvbWJvYm94SXRlbSwgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIG1vRGF0YUxpc3QuZm9yRWFjaCgoYykgPT4gKGMuJElzQ2hlY2tlZCA9IGZhbHNlKSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTW8gPSBlLml0ZW07XG4gICAgICAgIHRoaXMuX2ZpcmVWYWx1ZUNoYW5nZShzZWxlY3RlZE1vKTtcbiAgICB9XG4gICAgb25QYWdlQ2hhbmdlMihwYWdlU2V0dGluZzogUGFnaW5nU2V0dGluZywgZSk6IHZvaWQge1xuICAgICAgICBQcmV2ZW50RGVmYXVsRXZlbnQoZSk7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdTb3VyY2UubmV4dCh0cnVlKTtcbiAgICAgICAgY29uc3QgdWx2QWRhcHRlciA9IHRoaXMudWx2QWRhcHRlcjtcbiAgICAgICAgY29uc3QgdGVtcDEgPSB1bHZBZGFwdGVyLlNldHRpbmcuRGF0YS5Nb0RhdGFMaXN0O1xuICAgICAgICB0ZW1wMS5zcGxpY2UodGVtcDEubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgIGNvbnN0IG1vRGF0YUxpc3RPbGQgPSBbLi4udGVtcDFdO1xuICAgICAgICBtb0RhdGFMaXN0T2xkLmZvckVhY2goKGMpID0+IChjLiRfX0lzTGFzdCA9IGZhbHNlKSk7XG4gICAgICAgIHRoaXMudWx2QWRhcHRlci5EYXRhQ3RybHIuTW92ZVRvUGFnZShwYWdlU2V0dGluZy5QYWdlICsgMSwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdID0gdWx2QWRhcHRlci5TZXR0aW5nLkRhdGEuTW9EYXRhTGlzdDtcbiAgICAgICAgICAgIG1vRGF0YUxpc3Quc3BsaWNlKDAsIDAsIC4uLm1vRGF0YUxpc3RPbGQpO1xuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ1NvdXJjZS5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG9uT3BlbkNoYW5nZShmZENvbWJvYm94LCBpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXMoKTtcbiAgICAgICAgICAgIC8vIGZkQ29tYm9ib3gub3BlbiA9IGZhbHNlOyAvLyBpdCBjbG9zZSBwb3B1cCB3aGVuIGNsaWNrIG9uIGRyb3Bkb3duIGJ1dHRvbiBpbiBjb21wb25lbnRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0VGV4dCA9IHRoaXMuZmRDb21ib1JlZj8uaW5wdXRUZXh0VmFsdWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMudmFsdWUgJiYgaW5wdXRUZXh0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmFpc2VTbWFydENoYW5nZShpbnB1dFRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG9uSW5wdXRDaGFuZ2UoZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yYWlzZVNtYXJ0Q2hhbmdlKGUpO1xuICAgIH1cbiAgICBvbklucHV0Q2hhbmdlMihlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JhaXNlU21hcnRDaGFuZ2UoZS50YXJnZXQudmFsdWUpO1xuICAgIH1cbiAgICBvblZhbHVlQ2hhbmdlKGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmFpc2VWYWx1ZUNoYW5nZWQoZS50YXJnZXQudmFsdWUpO1xuICAgIH1cbiAgICBvbk5ldygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckNsaWNrKCdOZXcnKTtcbiAgICB9XG4gICAgb25DbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckNsaWNrKCdEZWxldGUnKTtcbiAgICB9XG4gICAgb25FZGl0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90cmlnZ2VyQ2xpY2soJ0VkaXQnKTtcbiAgICB9XG4gICAgb25TZWFyY2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJDbGljaygnUG9wdXAnKTtcbiAgICB9XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBjdXN0b21GaWx0ZXIoY29udGVudDogYW55W10sIHNlYXJjaFRlcm06IHN0cmluZyk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgZGlzcGxheUZ1bmMgPSAob2JqOiBNZXRhb2JqZWN0RGF0YU1vZGVsKSA9PiB7XG4gICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbE5hbWUgPSB0aGlzLmdldEZpcnN0Q29sdW1uTmFtZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9WYWx1ZUNhcHRpb24ob2JqLCBjb2xOYW1lLCBvYmouJENhcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9O1xuICAgIGdldE1vVmFsdWVDYXB0aW9uKHZhbHVlTW86IE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsLCBjb2xOYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHZhbHVlTW8gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNhcHRpb25WYWx1ZU1vO1xuICAgICAgICBjb25zdCBtb2xpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKFxuICAgICAgICAgICAgdGhpcy51bHZBZGFwdGVyLFxuICAgICAgICAgICAgJ1NldHRpbmcuRGF0YS5Nb0RhdGFMaXN0JyxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGZvdW5kZWRNbyA9IG1vbGlzdC5maW5kKChjKSA9PiBjLklkID09PSB2YWx1ZU1vLklkKTtcbiAgICAgICAgaWYgKGNvbE5hbWUgJiYgZm91bmRlZE1vICYmIGZvdW5kZWRNb1tjb2xOYW1lXSkge1xuICAgICAgICAgICAgaWYgKGZvdW5kZWRNb1tjb2xOYW1lICsgJyRDYXB0aW9uJ10pIHtcbiAgICAgICAgICAgICAgICBjYXB0aW9uVmFsdWVNbyA9IGZvdW5kZWRNb1tjb2xOYW1lICsgJyRDYXB0aW9uJ107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvdW5kZWRNb1tjb2xOYW1lXS4kQ2FwdGlvbikge1xuICAgICAgICAgICAgICAgIGNhcHRpb25WYWx1ZU1vID0gZm91bmRlZE1vW2NvbE5hbWVdLiRDYXB0aW9uO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYXB0aW9uVmFsdWVNbyA9IGZvdW5kZWRNb1tjb2xOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYmJiUGlwZS50cmFuc2Zvcm0oY2FwdGlvblZhbHVlTW8gfHwgZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gICAgZ2V0Rmlyc3RDb2x1bW5OYW1lKCkge1xuICAgICAgICBsZXQgY29sTmFtZSA9ICckQ2FwdGlvbic7XG4gICAgICAgIGlmICh0aGlzLlVsdk1haW5DdHJsciAmJiB0aGlzLlVsdk1haW5DdHJscj8uRGQ/LlNldHRpbmc/LlZpZXcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLlVsdk1haW5DdHJsci5EZC5TZXR0aW5nLlZpZXcuQ29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Q29sID0gdGhpcy5VbHZNYWluQ3RybHIuRGQuU2V0dGluZy5WaWV3LkNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKGMpID0+ICFjLk5hbWUuc3RhcnRzV2l0aCgnJCcpICYmIGMuTmFtZSAhPT0gJ0lkJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0Q29sPy5OYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbE5hbWUgPSBmaXJzdENvbC5OYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIElzRXhwYW5kZWQgPSAodHlwZSkgPT4ge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ0RkJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZkQ29tYm9SZWY/LnBvcG92ZXJDb21wb25lbnQ/LmlzT3BlbjtcbiAgICB9O1xuICAgIC8vIHJldHVybiB0aGlzLmNvbWJvUmVmLm5hdGl2ZUVsZW1lbnQucmVzcG9uc2l2ZVBvcG92ZXIuaXNPcGVuKCk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBASW5wdXQoKSBDb2xsYXBzZSA9ICh0eXBlKSA9PiB7fTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIEV4cGFuZCA9ICh0eXBlKSA9PiB7XG4gICAgICAgIHRoaXMudWx2QWRhcHRlciA9IHRoaXMuVWx2TWFpbkN0cmxyW3R5cGVdO1xuICAgIH07XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBASW5wdXQoKSBvbiA9ICgpID0+IHt9O1xuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgQElucHV0KCkgRm9jdXMgPSAoKSA9PiB7fTtcbiAgICBASW5wdXQoKVxuICAgIFNldFVsdkFkYXB0ZXIgPSAodHlwZSwgdWx2QWRhcHRlcikgPT4ge1xuICAgICAgICB0aGlzLnVsdkFkYXB0ZXIgPSB1bHZBZGFwdGVyO1xuICAgICAgICB0aGlzLl9zZXRDb2x1bW5zKCk7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgfTtcbiAgICBASW5wdXQoKVxuICAgIElzVWlDcmVhdGVkID0gKHR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgfTtcbiAgICBASW5wdXQoKVxuICAgIE1hc2sgPSAodHlwZSkgPT4ge1xuICAgICAgICB0aGlzLl9sb2FkaW5nU291cmNlLm5leHQodHJ1ZSk7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgfTtcbiAgICBASW5wdXQoKVxuICAgIGhpZGUgPSAodHlwZSkgPT4ge1xuICAgICAgICAvLyB0aGlzLnRyaWdnZXJDbGljaygnTm9ybWFsJyk7XG4gICAgICAgIGlmICh0aGlzLmZvcm1TZWxlY3Rpb25EaWFsb2cpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVNlbGVjdGlvbkRpYWxvZy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgfTtcbiAgICBASW5wdXQoKVxuICAgIHNob3cgPSAodHlwZSkgPT4ge1xuICAgICAgICAvLyB0aGlzLnRyaWdnZXJDbGljaygnTm9ybWFsJyk7XG5cbiAgICAgICAgdGhpcy5fb3BlblBvcHVwRm9ybVNlbGVjdGlvblNvdXJjZS5uZXh0KCk7IC8vIHJhYmV0ZSB0YWtpIGdlbmVyYWwgaW5mbyAucG9wdXAgYmF6IG1pc2hvZCBrZSBiYWlhZCBkcm9wZG93biBiYXNoZS5cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIH07XG4gICAgQElucHV0KClcbiAgICBVbm1hc2sgPSAodHlwZSkgPT4ge1xuICAgICAgICB0aGlzLl9sb2FkaW5nU291cmNlLm5leHQoZmFsc2UpO1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIH07XG4gICAgQElucHV0KClcbiAgICBnZXRSYXdWYWx1ZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3VmFsdWU7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgfTtcbiAgICBwcm90ZWN0ZWQgX3NldFZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0VmFsdWVUZXh0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5fY2hlY2tIYXNWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHN1cGVyLl9zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIC8vIHRoaXMuX3NldENvbWJvVGV4dCh2YWx1ZSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfY2hlY2tIYXNWYWx1ZSh2YWx1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXRWYWx1ZVRleHQodmFsdWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZVRleHQgPSB0aGlzLl9nZXRWYWx1ZVRleHQodmFsdWUpO1xuICAgICAgICB0aGlzLl9zZXRDb21ib1RleHQodGhpcy52YWx1ZVRleHQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2dldFZhbHVlVGV4dCh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS4kQ2FwdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyAmJiB2YWx1ZSAmJiB0aGlzLlVsdk1haW5DdHJsciAmJiB0aGlzLlVsdk1haW5DdHJsci5EZCkge1xuICAgICAgICAgICAgY29uc3QgdmlldyA9IHRoaXMuVWx2TWFpbkN0cmxyLkRkLlNldHRpbmcuVmlldztcbiAgICAgICAgICAgIGxldCBjb2xOYW1lID0gJyRDYXB0aW9uJztcbiAgICAgICAgICAgIGlmICh2aWV3LkNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENvbCA9IHZpZXcuQ29sdW1ucy5maW5kKChjKSA9PiAhYy5OYW1lLnN0YXJ0c1dpdGgoJyQnKSAmJiBjLk5hbWUgIT09ICdJZCcpO1xuICAgICAgICAgICAgICAgIGNvbE5hbWUgPSBmaXJzdENvbD8uTmFtZSA/IGZpcnN0Q29sLk5hbWUgOiAnJENhcHRpb24nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JiYlBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldENvbWJvVGV4dCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIC8vIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIHRoaXMuX3ZhbHVlTW8gPSBudWxsO1xuICAgICAgICAvL3RoaXMuZmRDb21ib1JlZi5pbnB1dFRleHRWYWx1ZSA9ICcnO1xuICAgICAgICAvL3RoaXMuZmRDb21ib1JlZi5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAvLyB9XG4gICAgICAgIGNvbnN0IGZkQ29tYm9SZWYgPSB0aGlzLmZkQ29tYm9SZWY7XG4gICAgICAgIGNvbnN0IGlucHV0VGV4dCA9IGZkQ29tYm9SZWY/LmlucHV0VGV4dFZhbHVlO1xuICAgICAgICBpZiAoZmRDb21ib1JlZiAmJiB2YWx1ZSAhPSBpbnB1dFRleHQpIHtcbiAgICAgICAgICAgIC8vIGNvbnN0IFVsdk1haW5DdHJsciA9IHRoaXMuVWx2TWFpbkN0cmxyO1xuICAgICAgICAgICAgLy8gaWYgKFVsdk1haW5DdHJsciAmJiBVbHZNYWluQ3RybHIuRGQpIHtcbiAgICAgICAgICAgIC8vICAgICBjb25zdCB2aWV3ID0gVWx2TWFpbkN0cmxyLkRkLlNldHRpbmcuVmlldztcbiAgICAgICAgICAgIC8vICAgICBsZXQgY29sTmFtZSA9ICckQ2FwdGlvbic7XG4gICAgICAgICAgICAvLyAgICAgaWYgKHZpZXcuQ29sdW1ucykge1xuICAgICAgICAgICAgLy8gICAgICAgICBjb25zdCBmaXJzdENvbCA9IHZpZXcuQ29sdW1ucy5maW5kKChjKSA9PiAhYy5OYW1lLnN0YXJ0c1dpdGgoJyQnKSAmJiBjLk5hbWUgIT09ICdJZCcpO1xuICAgICAgICAgICAgLy8gICAgICAgICBjb2xOYW1lID0gZmlyc3RDb2w/Lk5hbWUgPyBmaXJzdENvbC5OYW1lIDogJyRDYXB0aW9uJztcbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyAgICAgdmFsdWUgPSB0aGlzLmdldE1vVmFsdWVDYXB0aW9uKHRoaXMuX3ZhbHVlTW8sIGNvbE5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIGZkQ29tYm9SZWYuaW5wdXRUZXh0ID0gdmFsdWUgPyB0aGlzLl9iYmJQaXBlLnRyYW5zZm9ybSh2YWx1ZSkgKyAnJyA6ICcnO1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX29wZW5Qb3B1cEZvcm1TZWxlY3Rpb24oKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHRoaXMuaXNPcGVuU2VsZWN0aW9uRGlhbG9nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5VbHZVaS52aWV3ZXJDb250cm9sLlNob3dPa0NhbmNlbEJ1dHRvbnMgPSB0cnVlOyAvLyB0aGlzIGlzIHVzZWZ1bCB0byB1bHYgbWFuYWdlIHRvb2xiYXIgYnV0dG9ucy5mb3IgZXhhbXBsZSBtb3ZlIGluIHRyZWUgZG9lcyBub3Qgc2hvd25cbiAgICAgICAgdGhpcy5mb3JtU2VsZWN0aW9uRGlhbG9nID0gQmFyc2FBcGkuQncuVWx2Rm9ybU11bHRpU2VsZWN0LlNob3codGhpcy5jb250ZXh0LCB7XG4gICAgICAgICAgICB1bHYxOiB0aGlzLlVsdlVpLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuX2JiYlBpcGUudHJhbnNmb3JtKCdTZWxlY3QnKSxcbiAgICAgICAgICAgIElzTG9hZGVkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuU2VsZWN0aW9uRGlhbG9nID0gZmFsc2U7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9maWx0ZXJTbWFydENoYW5nZSh2YWx1ZSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgY2FuUmVxdWVzdCA9ICh0aGlzLnVsdkFkYXB0ZXIgfHwgdGhpcy5VbHZVaSkgJiYgdmFsdWUgIT09IHRoaXMudmFsdWU7XG4gICAgICAgIC8vIGlmIChjYW5SZXF1ZXN0KSB7XG4gICAgICAgIC8vICAgICBjb25zdCBtb2xpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKFxuICAgICAgICAvLyAgICAgICAgIHRoaXMudWx2QWRhcHRlcixcbiAgICAgICAgLy8gICAgICAgICAnU2V0dGluZy5EYXRhLk1vRGF0YUxpc3QnLFxuICAgICAgICAvLyAgICAgICAgIFtdXG4gICAgICAgIC8vICAgICApO1xuICAgICAgICAvLyAgICAgaWYgKCFtb2xpc3QpIHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICAgIGNvbnN0IGNvbE5hbWUgPSB0aGlzLmdldEZpcnN0Q29sdW1uTmFtZSgpO1xuXG4gICAgICAgIC8vICAgICBjb25zdCBmaW5kTW8gPSBtb2xpc3QuZmluZCgobW8pID0+IHtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBjYXB0aW9uID0gdGhpcy5nZXRNb1ZhbHVlQ2FwdGlvbihtbywgY29sTmFtZSwgbW8uJENhcHRpb24pO1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiBjYXB0aW9uID09PSB2YWx1ZTtcbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyAgICAgaWYgKGZpbmRNbykge1xuICAgICAgICAvLyAgICAgICAgIGNhblJlcXVlc3QgPSBmYWxzZTtcbiAgICAgICAgLy8gICAgICAgICAvL3RoaXMuX2ZpcmVWYWx1ZUNoYW5nZShmaW5kTW8pO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIHJldHVybiBjYW5SZXF1ZXN0O1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldENvbHVtbnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVsdkFkYXB0ZXIgPSB0aGlzLnVsdkFkYXB0ZXI7XG4gICAgICAgIGNvbnN0IHZpZXcgPSA8R3JpZFZpZXc+dWx2QWRhcHRlcj8uU2V0dGluZz8uVmlldztcbiAgICAgICAgaWYgKHZpZXcgJiYgdmlldy5Db2x1bW5zPy5sZW5ndGggJiYgdGhpcy5hbGxDb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5hbGxDb2x1bW5zID0gdmlldy5Db2x1bW5zLmZpbHRlcigoYykgPT4gTnVtYmVyKGMuTWV0YUZpZWxkVHlwZUlkKSA+IDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByb3RlY3RlZCBfZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJDbGljaygnTm9ybWFsJyk7XG4gICAgICAgIHRoaXMuX3NldENvbHVtbnMoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3JhaXNlU21hcnRDaGFuZ2UodmFsdWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zbWFydENoYW5nZS5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3RyaWdnZXJDbGljayhldmVudE5hbWUsIHZhbHVlID0gbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdUcmlnZ2VyQ2xpY2snLCB0aGlzLmNvbnRleHQsIGV2ZW50TmFtZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcmFpc2VWYWx1ZUNoYW5nZWQoY2FwdGlvbik6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gY2FwdGlvbjtcbiAgICAgICAgY29uc3QgbW9saXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcbiAgICAgICAgICAgIHRoaXMudWx2QWRhcHRlcixcbiAgICAgICAgICAgICdTZXR0aW5nLkRhdGEuTW9EYXRhTGlzdCcsXG4gICAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgICAgICBpZiAoIW1vbGlzdCB8fCBtb2xpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy9jb25zdCBjb2xOYW1lID0gdGhpcy5nZXRGaXJzdENvbHVtbk5hbWUoKTtcblxuICAgICAgICBjb25zdCBtbyA9IG1vbGlzdC5maW5kKChjKSA9PiBjLiRDYXB0aW9uID09PSBpbnB1dFZhbHVlKTtcbiAgICAgICAgaWYgKCFtbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG1vbGlzdC5mb3JFYWNoKChjKSA9PiAoYy4kSXNDaGVja2VkID0gZmFsc2UpKTtcblxuICAgICAgICB0aGlzLl9maXJlVmFsdWVDaGFuZ2UobW8pO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2ZpcmVWYWx1ZUNoYW5nZShtbyk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gbW87XG4gICAgICAgIG1vLiRJc0NoZWNrZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9zZXRWYWx1ZVRleHQodGhpcy52YWx1ZSk7XG4gICAgICAgIC8vIHRoaXMuX3NldENvbWJvVGV4dChtby4kQ2FwdGlvbik7XG4gICAgICAgIC8vIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIGlmICh0aGlzLlVsdlVpKSB7XG4gICAgICAgICAgICB0aGlzLlVsdlVpLnZpZXdlckNvbnRyb2wuZmlyZUV2ZW50KCdyb3djbGljaycsIHRoaXMuVWx2VWksIDAsIG1vKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVsdkFkYXB0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMudWx2QWRhcHRlci5WaWV3ZXJBZGFwdGVyLkNvbnRyb2wuZmlyZUV2ZW50KCdyb3djbGljaycsIHRoaXMudWx2QWRhcHRlci5WaWV3ZXJBZGFwdGVyLkNvbnRyb2wsIDAsIG1vKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLl90cmlnZ2VyQ2xpY2soJ0l0ZW1TZWxlY3QnLCB0aGlzLnZhbHVlKTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgY29udGV4dC5fc2hvd1BvcHVwIHx8IGNvbnRleHQuX3Nob3dEcm9wRG93biA9PT0gZmFsc2UgPyBpbnB1dFRlbXBsYXRlIDogY29tYm9UZW1wbGF0ZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgJGltcGxpY2l0OlxuICAgICAgICAgICAgICAgIChsb2FkaW5nJCB8IGFzeW5jKSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgIHwgbW9JbmZvVWx2TW9MaXN0XG4gICAgICAgICAgICAgICAgICAgIDogaXNEYXRhTG9hZGVkRmlyc3RUaW1lXG4gICAgICAgICAgICAgICAgICAgIDogdWx2QWRhcHRlcj8uU2V0dGluZz8uRGF0YT8uTW9EYXRhTGlzdFxuICAgICAgICAgICAgICAgICAgICA6IFVsdlVpPy5TZXR0aW5nPy5EYXRhPy5Nb0RhdGFMaXN0XG4gICAgICAgICAgICAgICAgICAgIDogdWx2QWRhcHRlcj8uU2V0dGluZz8uRGF0YT8uUGFnaW5nXG4gICAgICAgICAgICAgICAgICAgIDogVWx2VWk/LlNldHRpbmc/LkRhdGE/LlBhZ2luZyxcbiAgICAgICAgICAgIGRldmljZVNpemU6IGRldmljZVNpemUkIHwgYXN5bmMsXG4gICAgICAgICAgICBkaXNhYmxlT3JSZWFkb25seTogZGlzYWJsZU9yUmVhZG9ubHkkIHwgYXN5bmMsXG4gICAgICAgICAgICBkaXNhYmxlOiBkaXNhYmxlJCB8IGFzeW5jLFxuICAgICAgICAgICAgcmVhZG9ubHk6IHJlYWRvbmx5JCB8IGFzeW5jXG4gICAgICAgIH1cbiAgICBcIlxuPlxuPC9uZy1jb250YWluZXI+XG48bmctdGVtcGxhdGVcbiAgICAjaW5wdXRUZW1wbGF0ZVxuICAgIGxldC1kZXZpY2VTaXplPVwiZGV2aWNlU2l6ZVwiXG4gICAgbGV0LWRpc2FibGVPclJlYWRvbmx5PVwiZGlzYWJsZU9yUmVhZG9ubHlcIlxuICAgIGxldC1kaXNhYmxlPVwiZGlzYWJsZVwiXG4gICAgbGV0LXJlYWRvbmx5PVwicmVhZG9ubHlcIlxuPlxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4XCIgY2xhc3M9XCJmZC1pbnB1dC1ncm91cFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICBmZC1mb3JtLWNvbnRyb2xcbiAgICAgICAgICAgICNpbnB1dFJlZlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlNldHRpbmcuTnVsbFRleHQgfHwgJydcIlxuICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlID09PSB0cnVlID8gdHJ1ZSA6IG51bGxcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIiF2YWx1ZSA/ICcnIDogKHZhbHVlIHwgYmJiVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgW3N0eWxlLmRpcmVjdGlvbl09XCJTZXR0aW5nLklzTHRyID09PSB0cnVlID8gJ2x0cicgOiBudWxsXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgICA8c3BhbiBmZC1pbnB1dC1ncm91cC1hZGRvbiAqbmdJZj1cImhhc1ZhbHVlICYmIGRpc2FibGVPclJlYWRvbmx5ICE9PSB0cnVlXCIgY2xhc3M9XCJmZC1pbnB1dC1ncm91cF9fYWRkb24tLWJ1dHRvblwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBnbHlwaD1cImRlY2xpbmVcIiAoY2xpY2spPVwib25DbGVhcigpXCI+PC9idXR0b24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWFkZG9uXG4gICAgICAgICAgICAqbmdJZj1cIiFoYXNWYWx1ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZSAmJiBTZXR0aW5nLlNob3dOZXdCdXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1pbnB1dC1ncm91cF9fYWRkb24tLWJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b24gZmQtYnV0dG9uIGZkVHlwZT1cInRyYW5zcGFyZW50XCIgZ2x5cGg9XCJhZGRcIiAoY2xpY2spPVwib25OZXcoKVwiPjwvYnV0dG9uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICBmZC1pbnB1dC1ncm91cC1hZGRvblxuICAgICAgICAgICAgKm5nSWY9XCJoYXNWYWx1ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZSAmJiBTZXR0aW5nLlZpZXdSZWxhdGVkRm9ybVR5cGUgPT09ICdTaG93J1wiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBnbHlwaD1cImVkaXRcIiAoY2xpY2spPVwib25FZGl0KClcIj48L2J1dHRvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgZmQtaW5wdXQtZ3JvdXAtYWRkb25cbiAgICAgICAgICAgICpuZ0lmPVwiaGFzVmFsdWUgJiYgZGlzYWJsZU9yUmVhZG9ubHkgIT09IHRydWUgJiYgU2V0dGluZy5WaWV3UmVsYXRlZEZvcm1UeXBlID09PSAnU2hvd1JlYWRPbmx5J1wiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBnbHlwaD1cInNob3dcIiAoY2xpY2spPVwib25FZGl0KClcIj48L2J1dHRvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgZmQtaW5wdXQtZ3JvdXAtYWRkb25cbiAgICAgICAgICAgICpuZ0lmPVwiY29udGV4dC5fc2hvd1BvcHVwICYmICF2YWx1ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBnbHlwaD1cInNlYXJjaFwiIChjbGljayk9XCJvblNlYXJjaCgpXCI+PC9idXR0b24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAgICNjb21ib1RlbXBsYXRlXG4gICAgbGV0LW1vRGF0YUxpc3RcbiAgICBsZXQtZGV2aWNlU2l6ZT1cImRldmljZVNpemVcIlxuICAgIGxldC1kaXNhYmxlT3JSZWFkb25seT1cImRpc2FibGVPclJlYWRvbmx5XCJcbiAgICBsZXQtZGlzYWJsZT1cImRpc2FibGVcIlxuICAgIGxldC1yZWFkb25seT1cInJlYWRvbmx5XCJcbj5cbiAgICA8ZGl2IGNsYXNzPVwic2ltcGxlLWNvbWJvLXdyYXBwZXJcIj5cbiAgICAgICAgPGZkLWNvbWJvYm94XG4gICAgICAgICAgICAjZmRDb21ib2JveFxuICAgICAgICAgICAgY2xhc3M9XCJjb21iby1tby11bHZcIlxuICAgICAgICAgICAgW2NvbWJvYm94SWRdPVwiY29tYm9ib3hJZFwiXG4gICAgICAgICAgICBbY2xhc3MuaGFzLXJlcG9ydF09XCJoYXNSZXBvcnRcIlxuICAgICAgICAgICAgW2NsYXNzLmhhcy1WYWx1ZV09XCJoYXNWYWx1ZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJydcIlxuICAgICAgICAgICAgW21vYmlsZV09XCJkZXZpY2VTaXplID09PSAncydcIlxuICAgICAgICAgICAgW21vYmlsZUNvbmZpZ109XCJtb2JpbGVDb25maWdcIlxuICAgICAgICAgICAgW2ZpbGxPblNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtyZWFkT25seV09XCJyZWFkb25seSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZVwiXG4gICAgICAgICAgICBbZHJvcGRvd25WYWx1ZXNdPVwibW9EYXRhTGlzdFwiXG4gICAgICAgICAgICBbZmlsdGVyRm5dPVwiY3VzdG9tRmlsdGVyXCJcbiAgICAgICAgICAgIFtvcGVuT25LZXlib2FyZEV2ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgW2J5bGluZV09XCJhbGxDb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgW2l0ZW1UZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgW2Rpc3BsYXlGbl09XCJkaXNwbGF5RnVuY1wiXG4gICAgICAgICAgICBbc2hvd0Ryb3Bkb3duQnV0dG9uXT1cImRpc2FibGVPclJlYWRvbmx5ICE9PSB0cnVlXCJcbiAgICAgICAgICAgIChpdGVtQ2xpY2tlZCk9XCJvbkl0ZW1DbGljaygkZXZlbnQsIG1vRGF0YUxpc3QpXCJcbiAgICAgICAgICAgIChpbnB1dFRleHRDaGFuZ2UpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvcGVuQ2hhbmdlKT1cIm9uT3BlbkNoYW5nZShmZENvbWJvYm94LCAkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2ZkLWNvbWJvYm94PlxuICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJoYXNWYWx1ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZVwiXG4gICAgICAgICAgICBnbHlwaD1cImRlY2xpbmVcIlxuICAgICAgICAgICAgYnV0dG9uVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIGNsYXNzPVwiY29tYm8tcG9wdXAtYnRuXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsZWFyKClcIlxuICAgICAgICA+PC9mZHAtYnV0dG9uPlxuXG4gICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImhhc1JlcG9ydCAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZVwiXG4gICAgICAgICAgICBnbHlwaD1cInNlYXJjaFwiXG4gICAgICAgICAgICBidXR0b25UeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJjb21iby1wb3B1cC1idG5cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VhcmNoKClcIlxuICAgICAgICA+PC9mZHAtYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjaXRlbVRlbXBsYXRlIGxldC1pdGVtPlxuICAgICAgICA8ZGl2IGZkLWxpc3QtY29udGVudCAqbmdJZj1cIml0ZW0uJGlzTG9hZGluZzsgZWxzZSBpdGVtV3JhcHBlclwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMjBweFwiPlxuICAgICAgICAgICAgPGJzdS1tYXNrIFtzaXplXT1cIidzJ1wiIFt0b3BdPVwiJzEwcHgnXCI+PC9ic3UtbWFzaz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjaXRlbVdyYXBwZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS4kTG9hZE1vcmU7IGVsc2Ugc2hvd0l0ZW1cIj5cbiAgICAgICAgICAgICAgICA8IS0tIDxic3UtdWx2LXBhZ2luZ1xuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25QYWdpbmdDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbcGFnaW5nU2V0dGluZ109XCJ1bHZBZGFwdGVyLlNldHRpbmcuRGF0YS5QYWdpbmdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2JzdS11bHYtcGFnaW5nPiAtLT5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInVsdkFkYXB0ZXIuU2V0dGluZy5EYXRhLlBhZ2luZy5QYWdlICsgMSA8IHVsdkFkYXB0ZXIuU2V0dGluZy5EYXRhLlBhZ2luZy5Ub3RhbFBhZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblBhZ2VDaGFuZ2UyKHVsdkFkYXB0ZXIuU2V0dGluZy5EYXRhLlBhZ2luZywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInTW9yZScgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3Nob3dJdGVtPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFsbENvbHVtbnM/Lmxlbmd0aCAmJiAhaXRlbS5pc0VtcHR5OyBlbHNlIGNhcHRpb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXRlbS4kX19Jc0xhc3RcIiBjbGFzcz1cIm1vaW5mb3VsdiBkZXZpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aHVtYm5haWwgKm5nSWY9XCJpdGVtLiRJY29uXCI+PGZkLWljb24gW2dseXBoXT1cIml0ZW0uJEljb25cIj48L2ZkLWljb24+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxkaXYgZmQtbGlzdC1jb250ZW50IGNsYXNzPVwibW9pbmZvdWx2IGhhc0NvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmZC1saXN0LXRpdGxlIGNsYXNzPVwidGl0bGVcIj57eyBhbGxDb2x1bW5zWzBdLkFsaWFzIHwgcnZhbDogaXRlbTphbGxDb2x1bW5zOnRydWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmZC1saXN0LWJ5bGluZSBjbGFzcz1cImJ5bGluZVwiICpuZ0lmPVwiYWxsQ29sdW1uc1sxXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgYWxsQ29sdW1uc1sxXS5BbGlhcyB8IHJ2YWw6IGl0ZW06YWxsQ29sdW1uczp0cnVlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgY29sdW1uLWdhcDogOHB4OyBmbGV4LXdyYXA6IHdyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBhbGxDb2x1bW5zOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbmRleCA+IDFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5BbGlhcyB8IHJ2YWw6IGl0ZW06YWxsQ29sdW1uczp0cnVlIGFzIHZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgY29sdW1uLkFsaWFzIH19Ont7IHZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjYXB0aW9uVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aXRsZT57e1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmlzRW1wdHkgPyAoJ05vRGF0YScgfCBiYmJUcmFuc2xhdGUpIDogKGl0ZW0uJE1vQ2FwdGlvbiB8fCBpdGVtLiRDYXB0aW9uIHwgYmJiVHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
408
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbW8taW5mby11bHYtY29tYm8vdWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbW8taW5mby11bHYtY29tYm8vdWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCx1QkFBdUIsRUFHMUIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsaUJBQWlCLEVBQTJCLE1BQU0sdUJBQXVCLENBQUM7QUFFbkYsT0FBTyxFQUNILGtCQUFrQixFQUNsQixRQUFRLEVBTVIsa0JBQWtCLEVBR2xCLFdBQVcsRUFFZCxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7QUFROUIsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGtCQUFrQjtJQU5qRTs7UUF3QkksZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBYXBDLGVBQVUsR0FBdUIsRUFBRSxDQUFDO1FBRzVCLGtDQUE2QixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDcEQsdUJBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUN6QyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUF3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QUk7c0JBREgsS0FBSztnQkFVTixNQUFNO3NCQURMLEtBQUs7Z0JBTU4sV0FBVztzQkFEVixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBPbkluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRhcCwgdGFrZVVudGlsLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb21ib2JveENvbXBvbmVudCwgQ29tYm9ib3hJdGVtLCBEaWFsb2dSZWYgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xuXG5pbXBvcnQge1xuICAgIEZpZWxkQmFzZUNvbXBvbmVudCxcbiAgICBCYXJzYUFwaSxcbiAgICBSZXBvcnRFeHRyYUluZm8sXG4gICAgTW9Gb3JSZXBvcnRNb2RlbCxcbiAgICBDbGFzc05hbWVzTW9kZWwsXG4gICAgVmlld1R5cGVzLFxuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgUHJldmVudERlZmF1bEV2ZW50LFxuICAgIFBhZ2luZ1NldHRpbmcsXG4gICAgUmVwb3J0Vmlld0NvbHVtbixcbiAgICBnZXRVbmlxdWVJZCxcbiAgICBHcmlkVmlld1xufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYnN1LXVpLW1vLWluZm8tdWx2LWNvbWJvJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VpLW1vLWluZm8tdWx2LWNvbWJvLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVWlNb0luZm9VbHZDb21ib0NvbXBvbmVudCBleHRlbmRzIEZpZWxkQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQElucHV0KCkgdWx2QWRhcHRlcjoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIFNldHRpbmc6IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgICAgIFZpZXc6IFZpZXdUeXBlcztcbiAgICAgICAgICAgIENsYXNzTmFtZXM6IENsYXNzTmFtZXNNb2RlbDtcbiAgICAgICAgICAgIEV4dHJhOiBSZXBvcnRFeHRyYUluZm87XG4gICAgICAgICAgICBEYXRhOiBNb0ZvclJlcG9ydE1vZGVsO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgQElucHV0KCkgQ29udHJvbDogYW55O1xuICAgIEBJbnB1dCgpIFVsdlVpOiBhbnk7XG4gICAgQElucHV0KCkgVWx2TWFpbkN0cmxyOiBhbnk7XG5cbiAgICBAVmlld0NoaWxkKENvbWJvYm94Q29tcG9uZW50KSBmZENvbWJvUmVmOiBDb21ib2JveENvbXBvbmVudDtcblxuICAgIGlzRXhwYW5kOiBib29sZWFuO1xuICAgIHNtYXJ0Q2hhbmdlID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICAgIGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHRpY2tSZWY6IGFueTtcbiAgICBpbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaXNGaXJzdExvYWQ6IGJvb2xlYW47XG4gICAgcG9wb3ZlckVsZW1lbnQ6IGFueTtcbiAgICByYXdWYWx1ZTogc3RyaW5nO1xuICAgIGZvcm1TZWxlY3Rpb25EaWFsb2c6IERpYWxvZ1JlZjtcbiAgICBpc09wZW5TZWxlY3Rpb25EaWFsb2c6IGJvb2xlYW47XG4gICAgaGFzUmVwb3J0OiBhbnk7XG4gICAgb3JpZ2luYWxWYWx1ZTogYW55O1xuICAgIGlzRGF0YUxvYWRlZEZpcnN0VGltZTogYm9vbGVhbjtcbiAgICB2YWx1ZVRleHQ6IHN0cmluZztcbiAgICBhbGxDb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10gPSBbXTtcbiAgICBoYXNWYWx1ZTogYm9vbGVhbjtcbiAgICBjb21ib2JveElkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfb3BlblBvcHVwRm9ybVNlbGVjdGlvblNvdXJjZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBfY2xvc2VEaWFsb2dTb3VyY2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgX2xvYWRpbmdTb3VyY2UgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pIG9uS2V5RG93bihlKTogdm9pZCB7XG4gICAgICAgIGUgPSBuZXcgQmFyc2FBcGkuRXh0LkV2ZW50T2JqZWN0SW1wbChlKTtcbiAgICAgICAgY29uc3QgayA9IGUuZ2V0S2V5KCk7XG4gICAgICAgIGlmIChlLmtleUNvZGUgPT09IGUuRU5URVIgfHwgayA9PT0gQmFyc2FBcGkuRXh0LkV2ZW50T2JqZWN0LlRBQikge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgna2V5ZG93bicsIHRoaXMuY29udGV4dCwgZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hbHQnLCBbJyRldmVudCddKVxuICAgIG9uQWx0KGUpOiB2b2lkIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb21ib2JveElkID0gZ2V0VW5pcXVlSWQoMyk7XG4gICAgICAgIHRoaXMuX2NoZWNrSGFzVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMubG9hZGluZyQgPSB0aGlzLl9sb2FkaW5nU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkZWRGaXJzdFRpbWUgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnVsdkFkYXB0ZXI/LlNldHRpbmc/LkRhdGE/Lk1vRGF0YUxpc3QgPT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMuVWx2VWk/LlNldHRpbmc/LkRhdGE/Lk1vRGF0YUxpc3QgPT09ICdvYmplY3QnO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zbWFydENoYW5nZVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxuICAgICAgICAgICAgICAgIGZpbHRlcigodmFsdWUpID0+IHRoaXMuX2ZpbHRlclNtYXJ0Q2hhbmdlKHZhbHVlKSksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICB0YXAoKHZhbHVlKSA9PiAodGhpcy5yYXdWYWx1ZSA9IHZhbHVlKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnU21hcnRDaGFuZ2UnLCB0aGlzLmNvbnRleHQsIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9vcGVuUG9wdXBGb3JtU2VsZWN0aW9uU291cmNlXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9jbG9zZURpYWxvZ1NvdXJjZSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLlVsdlVpICYmICF0aGlzLmlzT3BlblNlbGVjdGlvbkRpYWxvZyAmJiB0aGlzLmNvbnRleHQuX3Nob3dQb3B1cCksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX29wZW5Qb3B1cEZvcm1TZWxlY3Rpb24oKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdGhpcy5oYXNSZXBvcnQgPSB0aGlzLlNldHRpbmcuUmVsYXRpb25WaWV3VHlwZSA9PT0gJ1JlcG9ydFZpZXcnIHx8IHRoaXMuU2V0dGluZy5SZXBvcnROYW1lID09PSAnSGllcmFyY2hpY2FsJztcbiAgICAgICAgdGhpcy5Db250cm9sID0gdGhpcztcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZXRWYWx1ZVRleHQodGhpcy52YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICAvLyB0aGlzLl9zZXRDb21ib1RleHQodGhpcy52YWx1ZSk7XG4gICAgfVxuICAgIG9uUGFnaW5nQ2xpY2soZSk6IHZvaWQge1xuICAgICAgICBQcmV2ZW50RGVmYXVsRXZlbnQoZSk7XG4gICAgfVxuICAgIG9uUGFnZUNoYW5nZShlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbG9hZGluZ1NvdXJjZS5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLnVsdkFkYXB0ZXIuRGF0YUN0cmxyLk1vdmVUb1BhZ2UoZSwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ1NvdXJjZS5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG9uSXRlbUNsaWNrKGU6IENvbWJvYm94SXRlbSwgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIG1vRGF0YUxpc3QuZm9yRWFjaCgoYykgPT4gKGMuJElzQ2hlY2tlZCA9IGZhbHNlKSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTW8gPSBlLml0ZW07XG4gICAgICAgIHRoaXMuX2ZpcmVWYWx1ZUNoYW5nZShzZWxlY3RlZE1vKTtcbiAgICB9XG4gICAgb25QYWdlQ2hhbmdlMihwYWdlU2V0dGluZzogUGFnaW5nU2V0dGluZywgZSk6IHZvaWQge1xuICAgICAgICBQcmV2ZW50RGVmYXVsRXZlbnQoZSk7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdTb3VyY2UubmV4dCh0cnVlKTtcbiAgICAgICAgY29uc3QgdWx2QWRhcHRlciA9IHRoaXMudWx2QWRhcHRlcjtcbiAgICAgICAgY29uc3QgdGVtcDEgPSB1bHZBZGFwdGVyLlNldHRpbmcuRGF0YS5Nb0RhdGFMaXN0O1xuICAgICAgICB0ZW1wMS5zcGxpY2UodGVtcDEubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgIGNvbnN0IG1vRGF0YUxpc3RPbGQgPSBbLi4udGVtcDFdO1xuICAgICAgICBtb0RhdGFMaXN0T2xkLmZvckVhY2goKGMpID0+IChjLiRfX0lzTGFzdCA9IGZhbHNlKSk7XG4gICAgICAgIHRoaXMudWx2QWRhcHRlci5EYXRhQ3RybHIuTW92ZVRvUGFnZShwYWdlU2V0dGluZy5QYWdlICsgMSwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdID0gdWx2QWRhcHRlci5TZXR0aW5nLkRhdGEuTW9EYXRhTGlzdDtcbiAgICAgICAgICAgIG1vRGF0YUxpc3Quc3BsaWNlKDAsIDAsIC4uLm1vRGF0YUxpc3RPbGQpO1xuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ1NvdXJjZS5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG9uT3BlbkNoYW5nZShmZENvbWJvYm94LCBpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXMoKTtcbiAgICAgICAgICAgIC8vIGZkQ29tYm9ib3gub3BlbiA9IGZhbHNlOyAvLyBpdCBjbG9zZSBwb3B1cCB3aGVuIGNsaWNrIG9uIGRyb3Bkb3duIGJ1dHRvbiBpbiBjb21wb25lbnRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0VGV4dCA9IHRoaXMuZmRDb21ib1JlZj8uaW5wdXRUZXh0VmFsdWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMudmFsdWUgJiYgaW5wdXRUZXh0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmFpc2VTbWFydENoYW5nZShpbnB1dFRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG9uSW5wdXRDaGFuZ2UoZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yYWlzZVNtYXJ0Q2hhbmdlKGUpO1xuICAgIH1cbiAgICBvbklucHV0Q2hhbmdlMihlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JhaXNlU21hcnRDaGFuZ2UoZS50YXJnZXQudmFsdWUpO1xuICAgIH1cbiAgICBvblZhbHVlQ2hhbmdlKGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmFpc2VWYWx1ZUNoYW5nZWQoZS50YXJnZXQudmFsdWUpO1xuICAgIH1cbiAgICBvbk5ldygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckNsaWNrKCdOZXcnKTtcbiAgICB9XG4gICAgb25DbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckNsaWNrKCdEZWxldGUnKTtcbiAgICB9XG4gICAgb25FZGl0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90cmlnZ2VyQ2xpY2soJ0VkaXQnKTtcbiAgICB9XG4gICAgb25TZWFyY2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJDbGljaygnUG9wdXAnKTtcbiAgICB9XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBjdXN0b21GaWx0ZXIoY29udGVudDogYW55W10sIHNlYXJjaFRlcm06IHN0cmluZyk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgZGlzcGxheUZ1bmMgPSAob2JqOiBNZXRhb2JqZWN0RGF0YU1vZGVsKSA9PiB7XG4gICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbE5hbWUgPSB0aGlzLmdldEZpcnN0Q29sdW1uTmFtZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9WYWx1ZUNhcHRpb24ob2JqLCBjb2xOYW1lLCBvYmouJENhcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9O1xuICAgIGdldE1vVmFsdWVDYXB0aW9uKHZhbHVlTW86IE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsLCBjb2xOYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHZhbHVlTW8gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNhcHRpb25WYWx1ZU1vO1xuICAgICAgICBjb25zdCBtb2xpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKFxuICAgICAgICAgICAgdGhpcy51bHZBZGFwdGVyLFxuICAgICAgICAgICAgJ1NldHRpbmcuRGF0YS5Nb0RhdGFMaXN0JyxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGZvdW5kZWRNbyA9IG1vbGlzdC5maW5kKChjKSA9PiBjLklkID09PSB2YWx1ZU1vLklkKTtcbiAgICAgICAgaWYgKGNvbE5hbWUgJiYgZm91bmRlZE1vICYmIGZvdW5kZWRNb1tjb2xOYW1lXSkge1xuICAgICAgICAgICAgaWYgKGZvdW5kZWRNb1tjb2xOYW1lICsgJyRDYXB0aW9uJ10pIHtcbiAgICAgICAgICAgICAgICBjYXB0aW9uVmFsdWVNbyA9IGZvdW5kZWRNb1tjb2xOYW1lICsgJyRDYXB0aW9uJ107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvdW5kZWRNb1tjb2xOYW1lXS4kQ2FwdGlvbikge1xuICAgICAgICAgICAgICAgIGNhcHRpb25WYWx1ZU1vID0gZm91bmRlZE1vW2NvbE5hbWVdLiRDYXB0aW9uO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYXB0aW9uVmFsdWVNbyA9IGZvdW5kZWRNb1tjb2xOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYmJiUGlwZS50cmFuc2Zvcm0oY2FwdGlvblZhbHVlTW8gfHwgZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gICAgZ2V0Rmlyc3RDb2x1bW5OYW1lKCkge1xuICAgICAgICBsZXQgY29sTmFtZSA9ICckQ2FwdGlvbic7XG4gICAgICAgIGlmICh0aGlzLlVsdk1haW5DdHJsciAmJiB0aGlzLlVsdk1haW5DdHJscj8uRGQ/LlNldHRpbmc/LlZpZXcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLlVsdk1haW5DdHJsci5EZC5TZXR0aW5nLlZpZXcuQ29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Q29sID0gdGhpcy5VbHZNYWluQ3RybHIuRGQuU2V0dGluZy5WaWV3LkNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKGMpID0+ICFjLk5hbWUuc3RhcnRzV2l0aCgnJCcpICYmIGMuTmFtZSAhPT0gJ0lkJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0Q29sPy5OYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbE5hbWUgPSBmaXJzdENvbC5OYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIElzRXhwYW5kZWQgPSAodHlwZSkgPT4ge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ0RkJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZkQ29tYm9SZWY/LnBvcG92ZXJDb21wb25lbnQ/LmlzT3BlbjtcbiAgICB9O1xuICAgIC8vIHJldHVybiB0aGlzLmNvbWJvUmVmLm5hdGl2ZUVsZW1lbnQucmVzcG9uc2l2ZVBvcG92ZXIuaXNPcGVuKCk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBASW5wdXQoKSBDb2xsYXBzZSA9ICh0eXBlKSA9PiB7fTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIEV4cGFuZCA9ICh0eXBlKSA9PiB7XG4gICAgICAgIHRoaXMudWx2QWRhcHRlciA9IHRoaXMuVWx2TWFpbkN0cmxyW3R5cGVdO1xuICAgIH07XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBASW5wdXQoKSBvbiA9ICgpID0+IHt9O1xuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgQElucHV0KCkgRm9jdXMgPSAoKSA9PiB7fTtcbiAgICBASW5wdXQoKVxuICAgIFNldFVsdkFkYXB0ZXIgPSAodHlwZSwgdWx2QWRhcHRlcikgPT4ge1xuICAgICAgICB0aGlzLnVsdkFkYXB0ZXIgPSB1bHZBZGFwdGVyO1xuICAgICAgICB0aGlzLl9zZXRDb2x1bW5zKCk7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgfTtcbiAgICBASW5wdXQoKVxuICAgIElzVWlDcmVhdGVkID0gKHR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgfTtcbiAgICBASW5wdXQoKVxuICAgIE1hc2sgPSAodHlwZSkgPT4ge1xuICAgICAgICB0aGlzLl9sb2FkaW5nU291cmNlLm5leHQodHJ1ZSk7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgfTtcbiAgICBASW5wdXQoKVxuICAgIGhpZGUgPSAodHlwZSkgPT4ge1xuICAgICAgICAvLyB0aGlzLnRyaWdnZXJDbGljaygnTm9ybWFsJyk7XG4gICAgICAgIGlmICh0aGlzLmZvcm1TZWxlY3Rpb25EaWFsb2cpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVNlbGVjdGlvbkRpYWxvZy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgfTtcbiAgICBASW5wdXQoKVxuICAgIHNob3cgPSAodHlwZSkgPT4ge1xuICAgICAgICAvLyB0aGlzLnRyaWdnZXJDbGljaygnTm9ybWFsJyk7XG5cbiAgICAgICAgdGhpcy5fb3BlblBvcHVwRm9ybVNlbGVjdGlvblNvdXJjZS5uZXh0KCk7IC8vIHJhYmV0ZSB0YWtpIGdlbmVyYWwgaW5mbyAucG9wdXAgYmF6IG1pc2hvZCBrZSBiYWlhZCBkcm9wZG93biBiYXNoZS5cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIH07XG4gICAgQElucHV0KClcbiAgICBVbm1hc2sgPSAodHlwZSkgPT4ge1xuICAgICAgICB0aGlzLl9sb2FkaW5nU291cmNlLm5leHQoZmFsc2UpO1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIH07XG4gICAgQElucHV0KClcbiAgICBnZXRSYXdWYWx1ZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3VmFsdWU7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgfTtcbiAgICBwcm90ZWN0ZWQgX3NldFZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0VmFsdWVUZXh0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5fY2hlY2tIYXNWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHN1cGVyLl9zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIC8vIHRoaXMuX3NldENvbWJvVGV4dCh2YWx1ZSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfY2hlY2tIYXNWYWx1ZSh2YWx1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXRWYWx1ZVRleHQodmFsdWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZVRleHQgPSB0aGlzLl9nZXRWYWx1ZVRleHQodmFsdWUpO1xuICAgICAgICB0aGlzLl9zZXRDb21ib1RleHQodGhpcy52YWx1ZVRleHQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2dldFZhbHVlVGV4dCh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS4kQ2FwdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyAmJiB2YWx1ZSAmJiB0aGlzLlVsdk1haW5DdHJsciAmJiB0aGlzLlVsdk1haW5DdHJsci5EZCkge1xuICAgICAgICAgICAgY29uc3QgdmlldyA9IHRoaXMuVWx2TWFpbkN0cmxyLkRkLlNldHRpbmcuVmlldztcbiAgICAgICAgICAgIGxldCBjb2xOYW1lID0gJyRDYXB0aW9uJztcbiAgICAgICAgICAgIGlmICh2aWV3LkNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENvbCA9IHZpZXcuQ29sdW1ucy5maW5kKChjKSA9PiAhYy5OYW1lLnN0YXJ0c1dpdGgoJyQnKSAmJiBjLk5hbWUgIT09ICdJZCcpO1xuICAgICAgICAgICAgICAgIGNvbE5hbWUgPSBmaXJzdENvbD8uTmFtZSA/IGZpcnN0Q29sLk5hbWUgOiAnJENhcHRpb24nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JiYlBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldENvbWJvVGV4dCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIC8vIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIHRoaXMuX3ZhbHVlTW8gPSBudWxsO1xuICAgICAgICAvL3RoaXMuZmRDb21ib1JlZi5pbnB1dFRleHRWYWx1ZSA9ICcnO1xuICAgICAgICAvL3RoaXMuZmRDb21ib1JlZi5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAvLyB9XG4gICAgICAgIGNvbnN0IGZkQ29tYm9SZWYgPSB0aGlzLmZkQ29tYm9SZWY7XG4gICAgICAgIGNvbnN0IGlucHV0VGV4dCA9IGZkQ29tYm9SZWY/LmlucHV0VGV4dFZhbHVlO1xuICAgICAgICBpZiAoZmRDb21ib1JlZiAmJiB2YWx1ZSAhPSBpbnB1dFRleHQpIHtcbiAgICAgICAgICAgIC8vIGNvbnN0IFVsdk1haW5DdHJsciA9IHRoaXMuVWx2TWFpbkN0cmxyO1xuICAgICAgICAgICAgLy8gaWYgKFVsdk1haW5DdHJsciAmJiBVbHZNYWluQ3RybHIuRGQpIHtcbiAgICAgICAgICAgIC8vICAgICBjb25zdCB2aWV3ID0gVWx2TWFpbkN0cmxyLkRkLlNldHRpbmcuVmlldztcbiAgICAgICAgICAgIC8vICAgICBsZXQgY29sTmFtZSA9ICckQ2FwdGlvbic7XG4gICAgICAgICAgICAvLyAgICAgaWYgKHZpZXcuQ29sdW1ucykge1xuICAgICAgICAgICAgLy8gICAgICAgICBjb25zdCBmaXJzdENvbCA9IHZpZXcuQ29sdW1ucy5maW5kKChjKSA9PiAhYy5OYW1lLnN0YXJ0c1dpdGgoJyQnKSAmJiBjLk5hbWUgIT09ICdJZCcpO1xuICAgICAgICAgICAgLy8gICAgICAgICBjb2xOYW1lID0gZmlyc3RDb2w/Lk5hbWUgPyBmaXJzdENvbC5OYW1lIDogJyRDYXB0aW9uJztcbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyAgICAgdmFsdWUgPSB0aGlzLmdldE1vVmFsdWVDYXB0aW9uKHRoaXMuX3ZhbHVlTW8sIGNvbE5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIGZkQ29tYm9SZWYuaW5wdXRUZXh0ID0gdmFsdWUgPyB0aGlzLl9iYmJQaXBlLnRyYW5zZm9ybSh2YWx1ZSkgKyAnJyA6ICcnO1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX29wZW5Qb3B1cEZvcm1TZWxlY3Rpb24oKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHRoaXMuaXNPcGVuU2VsZWN0aW9uRGlhbG9nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5VbHZVaS52aWV3ZXJDb250cm9sLlNob3dPa0NhbmNlbEJ1dHRvbnMgPSB0cnVlOyAvLyB0aGlzIGlzIHVzZWZ1bCB0byB1bHYgbWFuYWdlIHRvb2xiYXIgYnV0dG9ucy5mb3IgZXhhbXBsZSBtb3ZlIGluIHRyZWUgZG9lcyBub3Qgc2hvd25cbiAgICAgICAgdGhpcy5mb3JtU2VsZWN0aW9uRGlhbG9nID0gQmFyc2FBcGkuQncuVWx2Rm9ybU11bHRpU2VsZWN0LlNob3codGhpcy5jb250ZXh0LCB7XG4gICAgICAgICAgICB1bHYxOiB0aGlzLlVsdlVpLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuX2JiYlBpcGUudHJhbnNmb3JtKCdTZWxlY3QnKSxcbiAgICAgICAgICAgIElzTG9hZGVkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuU2VsZWN0aW9uRGlhbG9nID0gZmFsc2U7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9maWx0ZXJTbWFydENoYW5nZSh2YWx1ZSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgY2FuUmVxdWVzdCA9ICh0aGlzLnVsdkFkYXB0ZXIgfHwgdGhpcy5VbHZVaSkgJiYgdmFsdWUgIT09IHRoaXMudmFsdWU7XG4gICAgICAgIC8vIGlmIChjYW5SZXF1ZXN0KSB7XG4gICAgICAgIC8vICAgICBjb25zdCBtb2xpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKFxuICAgICAgICAvLyAgICAgICAgIHRoaXMudWx2QWRhcHRlcixcbiAgICAgICAgLy8gICAgICAgICAnU2V0dGluZy5EYXRhLk1vRGF0YUxpc3QnLFxuICAgICAgICAvLyAgICAgICAgIFtdXG4gICAgICAgIC8vICAgICApO1xuICAgICAgICAvLyAgICAgaWYgKCFtb2xpc3QpIHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICAgIGNvbnN0IGNvbE5hbWUgPSB0aGlzLmdldEZpcnN0Q29sdW1uTmFtZSgpO1xuXG4gICAgICAgIC8vICAgICBjb25zdCBmaW5kTW8gPSBtb2xpc3QuZmluZCgobW8pID0+IHtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBjYXB0aW9uID0gdGhpcy5nZXRNb1ZhbHVlQ2FwdGlvbihtbywgY29sTmFtZSwgbW8uJENhcHRpb24pO1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiBjYXB0aW9uID09PSB2YWx1ZTtcbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyAgICAgaWYgKGZpbmRNbykge1xuICAgICAgICAvLyAgICAgICAgIGNhblJlcXVlc3QgPSBmYWxzZTtcbiAgICAgICAgLy8gICAgICAgICAvL3RoaXMuX2ZpcmVWYWx1ZUNoYW5nZShmaW5kTW8pO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIHJldHVybiBjYW5SZXF1ZXN0O1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldENvbHVtbnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVsdkFkYXB0ZXIgPSB0aGlzLnVsdkFkYXB0ZXI7XG4gICAgICAgIGNvbnN0IHZpZXcgPSA8R3JpZFZpZXc+dWx2QWRhcHRlcj8uU2V0dGluZz8uVmlldztcbiAgICAgICAgaWYgKHZpZXcgJiYgdmlldy5Db2x1bW5zPy5sZW5ndGggJiYgdGhpcy5hbGxDb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5hbGxDb2x1bW5zID0gdmlldy5Db2x1bW5zLmZpbHRlcigoYykgPT4gTnVtYmVyKGMuTWV0YUZpZWxkVHlwZUlkKSA+IDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByb3RlY3RlZCBfZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJDbGljaygnTm9ybWFsJyk7XG4gICAgICAgIHRoaXMuX3NldENvbHVtbnMoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3JhaXNlU21hcnRDaGFuZ2UodmFsdWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zbWFydENoYW5nZS5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3RyaWdnZXJDbGljayhldmVudE5hbWUsIHZhbHVlID0gbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdUcmlnZ2VyQ2xpY2snLCB0aGlzLmNvbnRleHQsIGV2ZW50TmFtZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcmFpc2VWYWx1ZUNoYW5nZWQoY2FwdGlvbik6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gY2FwdGlvbjtcbiAgICAgICAgY29uc3QgbW9saXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcbiAgICAgICAgICAgIHRoaXMudWx2QWRhcHRlcixcbiAgICAgICAgICAgICdTZXR0aW5nLkRhdGEuTW9EYXRhTGlzdCcsXG4gICAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgICAgICBpZiAoIW1vbGlzdCB8fCBtb2xpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy9jb25zdCBjb2xOYW1lID0gdGhpcy5nZXRGaXJzdENvbHVtbk5hbWUoKTtcblxuICAgICAgICBjb25zdCBtbyA9IG1vbGlzdC5maW5kKChjKSA9PiBjLiRDYXB0aW9uID09PSBpbnB1dFZhbHVlKTtcbiAgICAgICAgaWYgKCFtbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG1vbGlzdC5mb3JFYWNoKChjKSA9PiAoYy4kSXNDaGVja2VkID0gZmFsc2UpKTtcblxuICAgICAgICB0aGlzLl9maXJlVmFsdWVDaGFuZ2UobW8pO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2ZpcmVWYWx1ZUNoYW5nZShtbyk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gbW87XG4gICAgICAgIG1vLiRJc0NoZWNrZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9zZXRWYWx1ZVRleHQodGhpcy52YWx1ZSk7XG4gICAgICAgIC8vIHRoaXMuX3NldENvbWJvVGV4dChtby4kQ2FwdGlvbik7XG4gICAgICAgIC8vIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIGlmICh0aGlzLlVsdlVpKSB7XG4gICAgICAgICAgICB0aGlzLlVsdlVpLnZpZXdlckNvbnRyb2wuZmlyZUV2ZW50KCdyb3djbGljaycsIHRoaXMuVWx2VWksIDAsIG1vKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVsdkFkYXB0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMudWx2QWRhcHRlci5WaWV3ZXJBZGFwdGVyLkNvbnRyb2wuZmlyZUV2ZW50KCdyb3djbGljaycsIHRoaXMudWx2QWRhcHRlci5WaWV3ZXJBZGFwdGVyLkNvbnRyb2wsIDAsIG1vKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLl90cmlnZ2VyQ2xpY2soJ0l0ZW1TZWxlY3QnLCB0aGlzLnZhbHVlKTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgY29udGV4dC5fc2hvd1BvcHVwIHx8IGNvbnRleHQuX3Nob3dEcm9wRG93biA9PT0gZmFsc2UgPyBpbnB1dFRlbXBsYXRlIDogY29tYm9UZW1wbGF0ZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgJGltcGxpY2l0OlxuICAgICAgICAgICAgICAgIChsb2FkaW5nJCB8IGFzeW5jKSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgIHwgbW9JbmZvVWx2TW9MaXN0XG4gICAgICAgICAgICAgICAgICAgIDogaXNEYXRhTG9hZGVkRmlyc3RUaW1lXG4gICAgICAgICAgICAgICAgICAgIDogdWx2QWRhcHRlcj8uU2V0dGluZz8uRGF0YT8uTW9EYXRhTGlzdFxuICAgICAgICAgICAgICAgICAgICA6IFVsdlVpPy5TZXR0aW5nPy5EYXRhPy5Nb0RhdGFMaXN0XG4gICAgICAgICAgICAgICAgICAgIDogdWx2QWRhcHRlcj8uU2V0dGluZz8uRGF0YT8uUGFnaW5nXG4gICAgICAgICAgICAgICAgICAgIDogVWx2VWk/LlNldHRpbmc/LkRhdGE/LlBhZ2luZyxcbiAgICAgICAgICAgIGRldmljZVNpemU6IGRldmljZVNpemUkIHwgYXN5bmMsXG4gICAgICAgICAgICBkaXNhYmxlT3JSZWFkb25seTogZGlzYWJsZU9yUmVhZG9ubHkkIHwgYXN5bmMsXG4gICAgICAgICAgICBkaXNhYmxlOiBkaXNhYmxlJCB8IGFzeW5jLFxuICAgICAgICAgICAgcmVhZG9ubHk6IHJlYWRvbmx5JCB8IGFzeW5jXG4gICAgICAgIH1cbiAgICBcIlxuPlxuPC9uZy1jb250YWluZXI+XG48bmctdGVtcGxhdGVcbiAgICAjaW5wdXRUZW1wbGF0ZVxuICAgIGxldC1kZXZpY2VTaXplPVwiZGV2aWNlU2l6ZVwiXG4gICAgbGV0LWRpc2FibGVPclJlYWRvbmx5PVwiZGlzYWJsZU9yUmVhZG9ubHlcIlxuICAgIGxldC1kaXNhYmxlPVwiZGlzYWJsZVwiXG4gICAgbGV0LXJlYWRvbmx5PVwicmVhZG9ubHlcIlxuPlxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4XCIgY2xhc3M9XCJmZC1pbnB1dC1ncm91cFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICBmZC1mb3JtLWNvbnRyb2xcbiAgICAgICAgICAgICNpbnB1dFJlZlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlNldHRpbmcuTnVsbFRleHQgfHwgJydcIlxuICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlID09PSB0cnVlID8gdHJ1ZSA6IG51bGxcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIiF2YWx1ZSA/ICcnIDogKHZhbHVlIHwgYmJiVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgW3N0eWxlLmRpcmVjdGlvbl09XCJTZXR0aW5nLklzTHRyID09PSB0cnVlID8gJ2x0cicgOiBudWxsXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgICA8c3BhbiBmZC1pbnB1dC1ncm91cC1hZGRvbiAqbmdJZj1cImhhc1ZhbHVlICYmIGRpc2FibGVPclJlYWRvbmx5ICE9PSB0cnVlXCIgY2xhc3M9XCJmZC1pbnB1dC1ncm91cF9fYWRkb24tLWJ1dHRvblwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBnbHlwaD1cImRlY2xpbmVcIiAoY2xpY2spPVwib25DbGVhcigpXCI+PC9idXR0b24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWFkZG9uXG4gICAgICAgICAgICAqbmdJZj1cIiFoYXNWYWx1ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZSAmJiBTZXR0aW5nLlNob3dOZXdCdXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1pbnB1dC1ncm91cF9fYWRkb24tLWJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b24gZmQtYnV0dG9uIGZkVHlwZT1cInRyYW5zcGFyZW50XCIgZ2x5cGg9XCJhZGRcIiAoY2xpY2spPVwib25OZXcoKVwiPjwvYnV0dG9uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICBmZC1pbnB1dC1ncm91cC1hZGRvblxuICAgICAgICAgICAgKm5nSWY9XCJoYXNWYWx1ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZSAmJiBTZXR0aW5nLlZpZXdSZWxhdGVkRm9ybVR5cGUgPT09ICdTaG93J1wiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBnbHlwaD1cImVkaXRcIiAoY2xpY2spPVwib25FZGl0KClcIj48L2J1dHRvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgZmQtaW5wdXQtZ3JvdXAtYWRkb25cbiAgICAgICAgICAgICpuZ0lmPVwiaGFzVmFsdWUgJiYgZGlzYWJsZU9yUmVhZG9ubHkgIT09IHRydWUgJiYgU2V0dGluZy5WaWV3UmVsYXRlZEZvcm1UeXBlID09PSAnU2hvd1JlYWRPbmx5J1wiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBnbHlwaD1cInNob3dcIiAoY2xpY2spPVwib25FZGl0KClcIj48L2J1dHRvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgZmQtaW5wdXQtZ3JvdXAtYWRkb25cbiAgICAgICAgICAgICpuZ0lmPVwiY29udGV4dC5fc2hvd1BvcHVwICYmICF2YWx1ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBnbHlwaD1cInNlYXJjaFwiIChjbGljayk9XCJvblNlYXJjaCgpXCI+PC9idXR0b24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAgICNjb21ib1RlbXBsYXRlXG4gICAgbGV0LW1vRGF0YUxpc3RcbiAgICBsZXQtZGV2aWNlU2l6ZT1cImRldmljZVNpemVcIlxuICAgIGxldC1kaXNhYmxlT3JSZWFkb25seT1cImRpc2FibGVPclJlYWRvbmx5XCJcbiAgICBsZXQtZGlzYWJsZT1cImRpc2FibGVcIlxuICAgIGxldC1yZWFkb25seT1cInJlYWRvbmx5XCJcbj5cbiAgICA8ZGl2IGNsYXNzPVwic2ltcGxlLWNvbWJvLXdyYXBwZXJcIj5cbiAgICAgICAgPGZkLWNvbWJvYm94XG4gICAgICAgICAgICAjZmRDb21ib2JveFxuICAgICAgICAgICAgY2xhc3M9XCJjb21iby1tby11bHZcIlxuICAgICAgICAgICAgW2NvbWJvYm94SWRdPVwiY29tYm9ib3hJZFwiXG4gICAgICAgICAgICBbY2xhc3MuaGFzLXJlcG9ydF09XCJoYXNSZXBvcnRcIlxuICAgICAgICAgICAgW2NsYXNzLmhhcy1WYWx1ZV09XCJoYXNWYWx1ZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCcgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW21vYmlsZV09XCJkZXZpY2VTaXplID09PSAncydcIlxuICAgICAgICAgICAgW21vYmlsZUNvbmZpZ109XCJtb2JpbGVDb25maWdcIlxuICAgICAgICAgICAgW2ZpbGxPblNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtyZWFkT25seV09XCJyZWFkb25seSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZVwiXG4gICAgICAgICAgICBbZHJvcGRvd25WYWx1ZXNdPVwibW9EYXRhTGlzdFwiXG4gICAgICAgICAgICBbZmlsdGVyRm5dPVwiY3VzdG9tRmlsdGVyXCJcbiAgICAgICAgICAgIFtvcGVuT25LZXlib2FyZEV2ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgW2J5bGluZV09XCJhbGxDb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgW2l0ZW1UZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgW2Rpc3BsYXlGbl09XCJkaXNwbGF5RnVuY1wiXG4gICAgICAgICAgICBbc2hvd0Ryb3Bkb3duQnV0dG9uXT1cImRpc2FibGVPclJlYWRvbmx5ICE9PSB0cnVlXCJcbiAgICAgICAgICAgIChpdGVtQ2xpY2tlZCk9XCJvbkl0ZW1DbGljaygkZXZlbnQsIG1vRGF0YUxpc3QpXCJcbiAgICAgICAgICAgIChpbnB1dFRleHRDaGFuZ2UpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvcGVuQ2hhbmdlKT1cIm9uT3BlbkNoYW5nZShmZENvbWJvYm94LCAkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2ZkLWNvbWJvYm94PlxuICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJoYXNWYWx1ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZVwiXG4gICAgICAgICAgICBnbHlwaD1cImRlY2xpbmVcIlxuICAgICAgICAgICAgYnV0dG9uVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIGNsYXNzPVwiY29tYm8tcG9wdXAtYnRuXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsZWFyKClcIlxuICAgICAgICA+PC9mZHAtYnV0dG9uPlxuXG4gICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImhhc1JlcG9ydCAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZVwiXG4gICAgICAgICAgICBnbHlwaD1cInNlYXJjaFwiXG4gICAgICAgICAgICBidXR0b25UeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJjb21iby1wb3B1cC1idG5cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VhcmNoKClcIlxuICAgICAgICA+PC9mZHAtYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjaXRlbVRlbXBsYXRlIGxldC1pdGVtPlxuICAgICAgICA8ZGl2IGZkLWxpc3QtY29udGVudCAqbmdJZj1cIml0ZW0uJGlzTG9hZGluZzsgZWxzZSBpdGVtV3JhcHBlclwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMjBweFwiPlxuICAgICAgICAgICAgPGJzdS1tYXNrIFtzaXplXT1cIidzJ1wiIFt0b3BdPVwiJzEwcHgnXCI+PC9ic3UtbWFzaz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjaXRlbVdyYXBwZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS4kTG9hZE1vcmU7IGVsc2Ugc2hvd0l0ZW1cIj5cbiAgICAgICAgICAgICAgICA8IS0tIDxic3UtdWx2LXBhZ2luZ1xuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25QYWdpbmdDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbcGFnaW5nU2V0dGluZ109XCJ1bHZBZGFwdGVyLlNldHRpbmcuRGF0YS5QYWdpbmdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2JzdS11bHYtcGFnaW5nPiAtLT5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInVsdkFkYXB0ZXIuU2V0dGluZy5EYXRhLlBhZ2luZy5QYWdlICsgMSA8IHVsdkFkYXB0ZXIuU2V0dGluZy5EYXRhLlBhZ2luZy5Ub3RhbFBhZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblBhZ2VDaGFuZ2UyKHVsdkFkYXB0ZXIuU2V0dGluZy5EYXRhLlBhZ2luZywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInTW9yZScgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3Nob3dJdGVtPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFsbENvbHVtbnM/Lmxlbmd0aCAmJiAhaXRlbS5pc0VtcHR5OyBlbHNlIGNhcHRpb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXRlbS4kX19Jc0xhc3RcIiBjbGFzcz1cIm1vaW5mb3VsdiBkZXZpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aHVtYm5haWwgKm5nSWY9XCJpdGVtLiRJY29uXCI+PGZkLWljb24gW2dseXBoXT1cIml0ZW0uJEljb25cIj48L2ZkLWljb24+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxkaXYgZmQtbGlzdC1jb250ZW50IGNsYXNzPVwibW9pbmZvdWx2IGhhc0NvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmZC1saXN0LXRpdGxlIGNsYXNzPVwidGl0bGVcIj57eyBhbGxDb2x1bW5zWzBdLkFsaWFzIHwgcnZhbDogaXRlbTphbGxDb2x1bW5zOnRydWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmZC1saXN0LWJ5bGluZSBjbGFzcz1cImJ5bGluZVwiICpuZ0lmPVwiYWxsQ29sdW1uc1sxXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgYWxsQ29sdW1uc1sxXS5BbGlhcyB8IHJ2YWw6IGl0ZW06YWxsQ29sdW1uczp0cnVlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgY29sdW1uLWdhcDogOHB4OyBmbGV4LXdyYXA6IHdyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBhbGxDb2x1bW5zOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbmRleCA+IDFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5BbGlhcyB8IHJ2YWw6IGl0ZW06YWxsQ29sdW1uczp0cnVlIGFzIHZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgY29sdW1uLkFsaWFzIH19Ont7IHZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjYXB0aW9uVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aXRsZT57e1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmlzRW1wdHkgPyAoJ05vRGF0YScgfCBiYmJUcmFuc2xhdGUpIDogKGl0ZW0uJE1vQ2FwdGlvbiB8fCBpdGVtLiRDYXB0aW9uIHwgYmJiVHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -24,9 +24,9 @@ export class UiReadOnlyFieldComponent extends FieldBaseComponent {
24
24
  }
25
25
  }
26
26
  UiReadOnlyFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiReadOnlyFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
27
- UiReadOnlyFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiReadOnlyFieldComponent, selector: "bsu-ui-read-only-field", usesInheritance: true, ngImport: i0, template: "<fd-text\n style=\"color: var(--fdIcon_Tab_Bar_Selection_Color)\"\n [class.empty-bracket]=\"!text\"\n [text]=\"text || 'Empty_Bracket' | bbbTranslate\"\n [style.font-weight]=\"text ? 'font-weight: bold' : null\"\n [whitespaces]=\"true\"\n [maxLines]=\"2\"\n></fd-text>\n<button\n *ngIf=\"parameters?.ShowCopy && text\"\n fd-button\n glyph=\"copy\"\n [fdCompact]\n fdType=\"transparent\"\n [copy]=\"text | bbbTranslate\"\n></button>\n", styles: [":host{display:flex;width:100%;height:100%;align-items:center}label{overflow:hidden;text-align:justify;line-height:1.6rem}.empty-bracket{opacity:.3}fd-text{-webkit-hyphens:auto;hyphens:auto}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.CopyDirective, selector: "[copy]", inputs: ["copy"] }, { kind: "directive", type: i3.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.TextComponent, selector: "fd-text", inputs: ["text", "maxLines", "whitespaces", "hyphenation", "expandable", "moreLabel", "lessLabel", "isCollapsed"], outputs: ["isCollapsedChange"] }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
27
+ UiReadOnlyFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiReadOnlyFieldComponent, selector: "bsu-ui-read-only-field", usesInheritance: true, ngImport: i0, template: "<fd-text\n style=\"color: var(--fdIcon_Tab_Bar_Selection_Color)\"\n [class.empty-bracket]=\"!text\"\n [text]=\"text || 'Empty_Bracket' | bbbTranslate\"\n [class.bold]=\"text !== null && text !== ''\"\n [whitespaces]=\"true\"\n [maxLines]=\"2\"\n></fd-text>\n<button\n *ngIf=\"parameters?.ShowCopy && text\"\n fd-button\n glyph=\"copy\"\n [fdCompact]\n fdType=\"transparent\"\n [copy]=\"text | bbbTranslate\"\n></button>\n", styles: [":host{display:flex;width:100%;height:100%;align-items:center}label{overflow:hidden;text-align:justify;line-height:1.6rem}.empty-bracket{opacity:.3}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.CopyDirective, selector: "[copy]", inputs: ["copy"] }, { kind: "directive", type: i3.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.TextComponent, selector: "fd-text", inputs: ["text", "maxLines", "whitespaces", "hyphenation", "expandable", "moreLabel", "lessLabel", "isCollapsed"], outputs: ["isCollapsedChange"] }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
28
28
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiReadOnlyFieldComponent, decorators: [{
29
29
  type: Component,
30
- args: [{ selector: 'bsu-ui-read-only-field', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-text\n style=\"color: var(--fdIcon_Tab_Bar_Selection_Color)\"\n [class.empty-bracket]=\"!text\"\n [text]=\"text || 'Empty_Bracket' | bbbTranslate\"\n [style.font-weight]=\"text ? 'font-weight: bold' : null\"\n [whitespaces]=\"true\"\n [maxLines]=\"2\"\n></fd-text>\n<button\n *ngIf=\"parameters?.ShowCopy && text\"\n fd-button\n glyph=\"copy\"\n [fdCompact]\n fdType=\"transparent\"\n [copy]=\"text | bbbTranslate\"\n></button>\n", styles: [":host{display:flex;width:100%;height:100%;align-items:center}label{overflow:hidden;text-align:justify;line-height:1.6rem}.empty-bracket{opacity:.3}fd-text{-webkit-hyphens:auto;hyphens:auto}\n"] }]
30
+ args: [{ selector: 'bsu-ui-read-only-field', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-text\n style=\"color: var(--fdIcon_Tab_Bar_Selection_Color)\"\n [class.empty-bracket]=\"!text\"\n [text]=\"text || 'Empty_Bracket' | bbbTranslate\"\n [class.bold]=\"text !== null && text !== ''\"\n [whitespaces]=\"true\"\n [maxLines]=\"2\"\n></fd-text>\n<button\n *ngIf=\"parameters?.ShowCopy && text\"\n fd-button\n glyph=\"copy\"\n [fdCompact]\n fdType=\"transparent\"\n [copy]=\"text | bbbTranslate\"\n></button>\n", styles: [":host{display:flex;width:100%;height:100%;align-items:center}label{overflow:hidden;text-align:justify;line-height:1.6rem}.empty-bracket{opacity:.3}\n"] }]
31
31
  }] });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktcmVhZC1vbmx5LWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3VpLXJlYWQtb25seS1maWVsZC91aS1yZWFkLW9ubHktZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcmVhZC1vbmx5LWZpZWxkL3VpLXJlYWQtb25seS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7O0FBTzFELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxrQkFBa0I7SUFFNUQsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUNTLFNBQVMsQ0FBQyxLQUFVO1FBQzFCLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFDTyxRQUFRO1FBQ1osTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN6QixNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdEQsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdCLENBQUM7O3FIQWhCUSx3QkFBd0I7eUdBQXhCLHdCQUF3QixxRkNUckMsdWRBZ0JBOzJGRFBhLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDSSx3QkFBd0IsbUJBR2pCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEZpZWxkQmFzZUNvbXBvbmVudCB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JzdS11aS1yZWFkLW9ubHktZmllbGQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLXJlYWQtb25seS1maWVsZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91aS1yZWFkLW9ubHktZmllbGQuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaVJlYWRPbmx5RmllbGRDb21wb25lbnQgZXh0ZW5kcyBGaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgdGV4dDogc3RyaW5nO1xyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLl9zZXRUZXh0KCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3NldFZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5fc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuX3NldFRleHQoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3NldFRleHQoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSB2YWx1ZT8uJENhcHRpb24gPyB2YWx1ZS4kQ2FwdGlvbiA6IHZhbHVlO1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxyXG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ/LnJlcGxhY2UoLzxiclxccypbXFwvXT8+L2dpLCAnXFxuJyk7XHJcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxmZC10ZXh0XG4gICAgc3R5bGU9XCJjb2xvcjogdmFyKC0tZmRJY29uX1RhYl9CYXJfU2VsZWN0aW9uX0NvbG9yKVwiXG4gICAgW2NsYXNzLmVtcHR5LWJyYWNrZXRdPVwiIXRleHRcIlxuICAgIFt0ZXh0XT1cInRleHQgfHwgJ0VtcHR5X0JyYWNrZXQnIHwgYmJiVHJhbnNsYXRlXCJcbiAgICBbc3R5bGUuZm9udC13ZWlnaHRdPVwidGV4dCA/ICdmb250LXdlaWdodDogYm9sZCcgOiBudWxsXCJcbiAgICBbd2hpdGVzcGFjZXNdPVwidHJ1ZVwiXG4gICAgW21heExpbmVzXT1cIjJcIlxuPjwvZmQtdGV4dD5cbjxidXR0b25cbiAgICAqbmdJZj1cInBhcmFtZXRlcnM/LlNob3dDb3B5ICYmIHRleHRcIlxuICAgIGZkLWJ1dHRvblxuICAgIGdseXBoPVwiY29weVwiXG4gICAgW2ZkQ29tcGFjdF1cbiAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgW2NvcHldPVwidGV4dCB8IGJiYlRyYW5zbGF0ZVwiXG4+PC9idXR0b24+XG4iXX0=
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktcmVhZC1vbmx5LWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3VpLXJlYWQtb25seS1maWVsZC91aS1yZWFkLW9ubHktZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcmVhZC1vbmx5LWZpZWxkL3VpLXJlYWQtb25seS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7O0FBTzFELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxrQkFBa0I7SUFFNUQsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUNTLFNBQVMsQ0FBQyxLQUFVO1FBQzFCLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFDTyxRQUFRO1FBQ1osTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN6QixNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdEQsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdCLENBQUM7O3FIQWhCUSx3QkFBd0I7eUdBQXhCLHdCQUF3QixxRkNUckMsMmNBZ0JBOzJGRFBhLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDSSx3QkFBd0IsbUJBR2pCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEZpZWxkQmFzZUNvbXBvbmVudCB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JzdS11aS1yZWFkLW9ubHktZmllbGQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLXJlYWQtb25seS1maWVsZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91aS1yZWFkLW9ubHktZmllbGQuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaVJlYWRPbmx5RmllbGRDb21wb25lbnQgZXh0ZW5kcyBGaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgdGV4dDogc3RyaW5nO1xyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLl9zZXRUZXh0KCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3NldFZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5fc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuX3NldFRleHQoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3NldFRleHQoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSB2YWx1ZT8uJENhcHRpb24gPyB2YWx1ZS4kQ2FwdGlvbiA6IHZhbHVlO1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxyXG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ/LnJlcGxhY2UoLzxiclxccypbXFwvXT8+L2dpLCAnXFxuJyk7XHJcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxmZC10ZXh0XG4gICAgc3R5bGU9XCJjb2xvcjogdmFyKC0tZmRJY29uX1RhYl9CYXJfU2VsZWN0aW9uX0NvbG9yKVwiXG4gICAgW2NsYXNzLmVtcHR5LWJyYWNrZXRdPVwiIXRleHRcIlxuICAgIFt0ZXh0XT1cInRleHQgfHwgJ0VtcHR5X0JyYWNrZXQnIHwgYmJiVHJhbnNsYXRlXCJcbiAgICBbY2xhc3MuYm9sZF09XCJ0ZXh0ICE9PSBudWxsICYmIHRleHQgIT09ICcnXCJcbiAgICBbd2hpdGVzcGFjZXNdPVwidHJ1ZVwiXG4gICAgW21heExpbmVzXT1cIjJcIlxuPjwvZmQtdGV4dD5cbjxidXR0b25cbiAgICAqbmdJZj1cInBhcmFtZXRlcnM/LlNob3dDb3B5ICYmIHRleHRcIlxuICAgIGZkLWJ1dHRvblxuICAgIGdseXBoPVwiY29weVwiXG4gICAgW2ZkQ29tcGFjdF1cbiAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgW2NvcHldPVwidGV4dCB8IGJiYlRyYW5zbGF0ZVwiXG4+PC9idXR0b24+XG4iXX0=
@@ -54,10 +54,10 @@ export class UlvContextMenuComponent extends BaseComponent {
54
54
  }
55
55
  }
56
56
  UlvContextMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UlvContextMenuComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
57
- UlvContextMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UlvContextMenuComponent, selector: "bsu-ulv-context-menu,[ulvContextMenu]", inputs: { onlyOverflow: "onlyOverflow", deviceName: "deviceName", menuItems: "menuItems", allColumns: "allColumns", index: "index", mo: "mo", styleIndex: "styleIndex", conditionalFormats: "conditionalFormats", disableOverflowContextMenu: "disableOverflowContextMenu", footerMode: "footerMode" }, outputs: { commandClick: "commandClick" }, host: { properties: { "class.disableOverflow": "this._disableOverflow" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"footerMode; else contextTemplate\">\n <div fd-bar barDesign=\"footer\" [cozy]=\"false\" style=\"width: 100%\">\n <div fd-bar-middle *ngIf=\"overflowMode\">\n <ng-container *ngTemplateOutlet=\"footerToolbarTpl\"></ng-container>\n </div>\n <div fd-bar-right *ngIf=\"!overflowMode\">\n <ng-container *ngTemplateOutlet=\"footerToolbarTpl\"></ng-container>\n </div>\n <ng-template #footerToolbarTpl>\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\n <ng-container *ngFor=\"let cmd of menuItems\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate; context: { $implicit: cmd }\"></ng-container>\n </ng-container>\n </fd-toolbar>\n </ng-template>\n </div>\n</ng-container>\n<ng-template #contextTemplate>\n <ng-container\n *ngTemplateOutlet=\"\n overflowMode && !disableOverflowContextMenu ? overflowCommands : simpleCommands;\n context: { $implicit: menuItems, index: index }\n \"\n ></ng-container>\n</ng-template>\n\n<ng-template #simpleCommands let-commands let-index=\"index\">\n <ng-container *ngFor=\"let cmd of commands\">\n <ng-container *ngTemplateOutlet=\"menuButtonTemplate; context: { $implicit: cmd }\"></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #overflowCommands let-commands let-index=\"index\">\n <fd-popover placement=\"bottom\" [(isOpen)]=\"isOpenOverflow\" [closeOnOutsideClick]=\"true\" [noArrow]=\"true\">\n <fd-popover-control #popover>\n <button fd-button (click)=\"onOpenOverflow($event)\" [fdType]=\"'transparent'\" [glyph]=\"'overflow'\"></button>\n </fd-popover-control>\n <fd-popover-body>\n <ul fd-list>\n <li fd-list-item *ngFor=\"let cmd of commands\">\n <ng-container *ngTemplateOutlet=\"menuButtonTemplate; context: { $implicit: cmd }\"></ng-container>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #menuButtonTemplate let-cmd>\n <ng-container\n *ngTemplateOutlet=\"cmd.menu ? menuTemplate : buttonTemplate; context: { $implicit: cmd }\"\n ></ng-container>\n</ng-template>\n<ng-template #menuTemplate let-cmd>\n <fd-split-button fd-toolbar-item [mainAction]=\"{ mainActionTitle: cmd.text, keepMainAction: true }\">\n <fd-menu>\n <li\n fd-menu-item\n *ngFor=\"let btnCommand of cmd.menu.items\"\n #liEl\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"cmd.text\"\n [hostEl]=\"liEl\"\n (click)=\"onCommandSplitButtonClick($event, btnCommand)\"\n >\n <div fd-menu-interactive>\n <span fd-menu-title>{{ btnCommand.text }}</span>\n </div>\n </li>\n </fd-menu>\n </fd-split-button>\n</ng-template>\n<ng-template #buttonTemplate let-cmd>\n <ng-container\n *ngTemplateOutlet=\"\n cmd?.Command?.CustomUi ? customButtonTemplate : defaultButtonTemplate;\n context: { $implicit: cmd }\n \"\n ></ng-container>\n</ng-template>\n<ng-template #defaultButtonTemplate let-cmd>\n <button\n fd-button\n #btnEl\n [fdType]=\"cmd.Command?.JsonExtraProp?.Design ? cmd.Command?.JsonExtraProp.Design : 'transparent'\"\n [label]=\"cmd.text\"\n [glyph]=\"cmd.Command?.NewIcon || cmd.Command?.JsonExtraProp?.Icon || ''\"\n [ulvCommandHandler]=\"cmd\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"cmd.text\"\n [hostEl]=\"btnEl\"\n (commandClick)=\"onCommandClick($event)\"\n >\n <img *ngIf=\"!cmd.Command?.NewIcon && !cmd.Command?.JsonExtraProp?.Icon\" [src]=\"cmd.icon\" />\n </button>\n</ng-template>\n<ng-template #customButtonTemplate let-cmd>\n <div\n #hostEl\n [dbName]=\"cmd.text\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"hostEl\"\n [styleIndex]=\"styleIndex\"\n >\n <bnrc-dynamic-form-toolbaritem\n fd-toolbar-item\n [ulvCommandHandler]=\"cmd\"\n [component]=\"cmd.Command?.CustomUi\"\n [mo]=\"mo\"\n [context]=\"cmd\"\n [showText]=\"disableOverflowContextMenu === false\"\n [deviceName]=\"deviceName\"\n [index]=\"index\"\n [isEnable]=\"cmd.Command?._isEnable || cmd.Command?.UseForSingle\"\n [allColumns]=\"allColumns\"\n (btnClick)=\"onCommandClick($event)\"\n ></bnrc-dynamic-form-toolbaritem>\n </div>\n</ng-template>\n", styles: [":host{display:flex;justify-content:center;align-items:center}:host ::ng-deep button{margin-top:0!important}:host ::ng-deep .fd-popover-custom{max-width:none}:host.disableOverflow{column-gap:5px}button{align-items:center}button div{display:flex}button ::ng-deep span{height:auto!important}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.DynamicFormToolbaritemComponent, selector: "bnrc-dynamic-form-toolbaritem", inputs: ["mo", "index", "deviceName", "context", "btn", "isEnable", "showText", "allColumns", "conditionalFormats"], outputs: ["btnClick"] }, { kind: "directive", type: i2.UlvCommandDirective, selector: "[ulvCommandHandler]", inputs: ["ulvCommandHandler"], outputs: ["commandClick"] }, { kind: "component", type: i3.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i3.BarMiddleDirective, selector: "[fd-bar-middle]" }, { kind: "directive", type: i3.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i3.DeprecatedBarContentDensityDirective, selector: "[fd-bar][cozy]" }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline"], outputs: ["focusEscapeList"] }, { kind: "component", type: i5.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText"], outputs: ["keyDown"] }, { kind: "component", type: i6.MenuComponent, selector: "fd-menu", inputs: ["mobile", "disabled", "focusTrapped", "openOnHoverTime", "mobileConfig", "ariaLabel", "ariaLabelledby", "id"], outputs: ["activePath"] }, { kind: "component", type: i6.MenuItemComponent, selector: "li[fd-menu-item]", inputs: ["disabled", "itemId", "submenu"], outputs: ["onSelect"], exportAs: ["fd-menu-item"] }, { kind: "directive", type: i6.MenuInteractiveDirective, selector: "[fd-menu-interactive]" }, { kind: "directive", type: i6.MenuTitleDirective, selector: "[fd-menu-title]" }, { kind: "component", type: i7.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i7.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i7.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: i8.SplitButtonComponent, selector: "fd-split-button", inputs: ["glyph", "disabled", "mainActionTitle", "fdType", "expandButtonAriaLabel", "expandButtonTitle", "selected", "fixedWidth", "mainAction", "arialLabel"], outputs: ["primaryButtonClicked"] }, { kind: "component", type: i9.ToolbarComponent, selector: "fd-toolbar", inputs: ["class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i9.ToolbarItemDirective, selector: "[fd-toolbar-item]" }, { kind: "directive", type: i10.ApplyConditionalFormatsDirective, selector: "[applyConditionalFormats]", inputs: ["applyConditionalFormats", "styleIndex", "hostEl", "dbName"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
57
+ UlvContextMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UlvContextMenuComponent, selector: "bsu-ulv-context-menu,[ulvContextMenu]", inputs: { onlyOverflow: "onlyOverflow", deviceName: "deviceName", menuItems: "menuItems", allColumns: "allColumns", index: "index", mo: "mo", styleIndex: "styleIndex", conditionalFormats: "conditionalFormats", disableOverflowContextMenu: "disableOverflowContextMenu", footerMode: "footerMode" }, outputs: { commandClick: "commandClick" }, host: { properties: { "class.disableOverflow": "this._disableOverflow" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"footerMode; else contextTemplate\">\n <div fd-bar barDesign=\"footer\" [cozy]=\"false\" style=\"width: 100%\">\n <div fd-bar-middle *ngIf=\"overflowMode\">\n <ng-container *ngTemplateOutlet=\"footerToolbarTpl\"></ng-container>\n </div>\n <div fd-bar-right *ngIf=\"!overflowMode\">\n <ng-container *ngTemplateOutlet=\"footerToolbarTpl\"></ng-container>\n </div>\n <ng-template #footerToolbarTpl>\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\n <ng-container *ngFor=\"let cmd of menuItems\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate; context: { $implicit: cmd }\"></ng-container>\n </ng-container>\n </fd-toolbar>\n </ng-template>\n </div>\n</ng-container>\n<ng-template #contextTemplate>\n <ng-container\n *ngTemplateOutlet=\"\n overflowMode && !disableOverflowContextMenu ? overflowCommands : simpleCommands;\n context: { $implicit: menuItems, index: index }\n \"\n ></ng-container>\n</ng-template>\n\n<ng-template #simpleCommands let-commands let-index=\"index\">\n <ng-container *ngFor=\"let cmd of commands\">\n <ng-container *ngTemplateOutlet=\"menuButtonTemplate; context: { $implicit: cmd }\"></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #overflowCommands let-commands let-index=\"index\">\n <fd-popover placement=\"bottom\" [(isOpen)]=\"isOpenOverflow\" [closeOnOutsideClick]=\"true\" [noArrow]=\"true\">\n <fd-popover-control #popover>\n <button fd-button (click)=\"onOpenOverflow($event)\" [fdType]=\"'transparent'\" [glyph]=\"'overflow'\"></button>\n </fd-popover-control>\n <fd-popover-body>\n <ul fd-list>\n <li fd-list-item *ngFor=\"let cmd of commands\">\n <ng-container *ngTemplateOutlet=\"menuButtonTemplate; context: { $implicit: cmd }\"></ng-container>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #menuButtonTemplate let-cmd>\n <ng-container\n *ngTemplateOutlet=\"cmd.menu ? menuTemplate : buttonTemplate; context: { $implicit: cmd }\"\n ></ng-container>\n</ng-template>\n<ng-template #menuTemplate let-cmd>\n <fd-split-button fd-toolbar-item [mainAction]=\"{ mainActionTitle: cmd.text, keepMainAction: true }\">\n <fd-menu>\n <li\n fd-menu-item\n *ngFor=\"let btnCommand of cmd.menu.items\"\n #liEl\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"cmd.text\"\n [hostEl]=\"liEl\"\n (click)=\"onCommandSplitButtonClick($event, btnCommand)\"\n >\n <div fd-menu-interactive>\n <span fd-menu-title>{{ btnCommand.text }}</span>\n </div>\n </li>\n </fd-menu>\n </fd-split-button>\n</ng-template>\n<ng-template #buttonTemplate let-cmd>\n <ng-container\n *ngTemplateOutlet=\"\n cmd?.Command?.CustomUi ? customButtonTemplate : defaultButtonTemplate;\n context: { $implicit: cmd }\n \"\n ></ng-container>\n</ng-template>\n<ng-template #defaultButtonTemplate let-cmd>\n <button\n fd-button\n #btnEl\n [fdType]=\"cmd.Command?.JsonExtraProp?.Design ? cmd.Command?.JsonExtraProp.Design : 'transparent'\"\n [label]=\"cmd.text\"\n [glyph]=\"cmd.Command?.NewIcon || cmd.Command?.JsonExtraProp?.Icon || ''\"\n [ulvCommandHandler]=\"cmd\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"cmd.text\"\n [hostEl]=\"btnEl\"\n (commandClick)=\"onCommandClick($event)\"\n >\n <img *ngIf=\"!cmd.Command?.NewIcon && !cmd.Command?.JsonExtraProp?.Icon\" [src]=\"cmd.icon\" />\n </button>\n</ng-template>\n<ng-template #customButtonTemplate let-cmd>\n <div\n #hostEl\n [dbName]=\"cmd.text\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"hostEl\"\n [styleIndex]=\"styleIndex\"\n >\n <bnrc-dynamic-form-toolbaritem\n fd-toolbar-item\n [ulvCommandHandler]=\"cmd\"\n [component]=\"cmd.Command?.CustomUi\"\n [mo]=\"mo\"\n [context]=\"cmd\"\n [showText]=\"disableOverflowContextMenu === false\"\n [deviceName]=\"deviceName\"\n [index]=\"index\"\n [isEnable]=\"cmd.Command?._isEnable || cmd.Command?.UseForSingle\"\n [allColumns]=\"allColumns\"\n (btnClick)=\"onCommandClick($event)\"\n ></bnrc-dynamic-form-toolbaritem>\n </div>\n</ng-template>\n", styles: [":host{display:flex;justify-content:center;align-items:center;flex-wrap:wrap;row-gap:5px}:host ::ng-deep button{margin-top:0!important}:host ::ng-deep .fd-popover-custom{max-width:none}:host.disableOverflow{column-gap:5px}button{align-items:center}button div{display:flex}button ::ng-deep span{height:auto!important}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.DynamicFormToolbaritemComponent, selector: "bnrc-dynamic-form-toolbaritem", inputs: ["mo", "index", "deviceName", "context", "btn", "isEnable", "showText", "allColumns", "conditionalFormats"], outputs: ["btnClick"] }, { kind: "directive", type: i2.UlvCommandDirective, selector: "[ulvCommandHandler]", inputs: ["ulvCommandHandler"], outputs: ["commandClick"] }, { kind: "component", type: i3.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i3.BarMiddleDirective, selector: "[fd-bar-middle]" }, { kind: "directive", type: i3.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i3.DeprecatedBarContentDensityDirective, selector: "[fd-bar][cozy]" }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline"], outputs: ["focusEscapeList"] }, { kind: "component", type: i5.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText"], outputs: ["keyDown"] }, { kind: "component", type: i6.MenuComponent, selector: "fd-menu", inputs: ["mobile", "disabled", "focusTrapped", "openOnHoverTime", "mobileConfig", "ariaLabel", "ariaLabelledby", "id"], outputs: ["activePath"] }, { kind: "component", type: i6.MenuItemComponent, selector: "li[fd-menu-item]", inputs: ["disabled", "itemId", "submenu"], outputs: ["onSelect"], exportAs: ["fd-menu-item"] }, { kind: "directive", type: i6.MenuInteractiveDirective, selector: "[fd-menu-interactive]" }, { kind: "directive", type: i6.MenuTitleDirective, selector: "[fd-menu-title]" }, { kind: "component", type: i7.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i7.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i7.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: i8.SplitButtonComponent, selector: "fd-split-button", inputs: ["glyph", "disabled", "mainActionTitle", "fdType", "expandButtonAriaLabel", "expandButtonTitle", "selected", "fixedWidth", "mainAction", "arialLabel"], outputs: ["primaryButtonClicked"] }, { kind: "component", type: i9.ToolbarComponent, selector: "fd-toolbar", inputs: ["class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i9.ToolbarItemDirective, selector: "[fd-toolbar-item]" }, { kind: "directive", type: i10.ApplyConditionalFormatsDirective, selector: "[applyConditionalFormats]", inputs: ["applyConditionalFormats", "styleIndex", "hostEl", "dbName"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
58
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UlvContextMenuComponent, decorators: [{
59
59
  type: Component,
60
- args: [{ selector: 'bsu-ulv-context-menu,[ulvContextMenu]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"footerMode; else contextTemplate\">\n <div fd-bar barDesign=\"footer\" [cozy]=\"false\" style=\"width: 100%\">\n <div fd-bar-middle *ngIf=\"overflowMode\">\n <ng-container *ngTemplateOutlet=\"footerToolbarTpl\"></ng-container>\n </div>\n <div fd-bar-right *ngIf=\"!overflowMode\">\n <ng-container *ngTemplateOutlet=\"footerToolbarTpl\"></ng-container>\n </div>\n <ng-template #footerToolbarTpl>\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\n <ng-container *ngFor=\"let cmd of menuItems\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate; context: { $implicit: cmd }\"></ng-container>\n </ng-container>\n </fd-toolbar>\n </ng-template>\n </div>\n</ng-container>\n<ng-template #contextTemplate>\n <ng-container\n *ngTemplateOutlet=\"\n overflowMode && !disableOverflowContextMenu ? overflowCommands : simpleCommands;\n context: { $implicit: menuItems, index: index }\n \"\n ></ng-container>\n</ng-template>\n\n<ng-template #simpleCommands let-commands let-index=\"index\">\n <ng-container *ngFor=\"let cmd of commands\">\n <ng-container *ngTemplateOutlet=\"menuButtonTemplate; context: { $implicit: cmd }\"></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #overflowCommands let-commands let-index=\"index\">\n <fd-popover placement=\"bottom\" [(isOpen)]=\"isOpenOverflow\" [closeOnOutsideClick]=\"true\" [noArrow]=\"true\">\n <fd-popover-control #popover>\n <button fd-button (click)=\"onOpenOverflow($event)\" [fdType]=\"'transparent'\" [glyph]=\"'overflow'\"></button>\n </fd-popover-control>\n <fd-popover-body>\n <ul fd-list>\n <li fd-list-item *ngFor=\"let cmd of commands\">\n <ng-container *ngTemplateOutlet=\"menuButtonTemplate; context: { $implicit: cmd }\"></ng-container>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #menuButtonTemplate let-cmd>\n <ng-container\n *ngTemplateOutlet=\"cmd.menu ? menuTemplate : buttonTemplate; context: { $implicit: cmd }\"\n ></ng-container>\n</ng-template>\n<ng-template #menuTemplate let-cmd>\n <fd-split-button fd-toolbar-item [mainAction]=\"{ mainActionTitle: cmd.text, keepMainAction: true }\">\n <fd-menu>\n <li\n fd-menu-item\n *ngFor=\"let btnCommand of cmd.menu.items\"\n #liEl\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"cmd.text\"\n [hostEl]=\"liEl\"\n (click)=\"onCommandSplitButtonClick($event, btnCommand)\"\n >\n <div fd-menu-interactive>\n <span fd-menu-title>{{ btnCommand.text }}</span>\n </div>\n </li>\n </fd-menu>\n </fd-split-button>\n</ng-template>\n<ng-template #buttonTemplate let-cmd>\n <ng-container\n *ngTemplateOutlet=\"\n cmd?.Command?.CustomUi ? customButtonTemplate : defaultButtonTemplate;\n context: { $implicit: cmd }\n \"\n ></ng-container>\n</ng-template>\n<ng-template #defaultButtonTemplate let-cmd>\n <button\n fd-button\n #btnEl\n [fdType]=\"cmd.Command?.JsonExtraProp?.Design ? cmd.Command?.JsonExtraProp.Design : 'transparent'\"\n [label]=\"cmd.text\"\n [glyph]=\"cmd.Command?.NewIcon || cmd.Command?.JsonExtraProp?.Icon || ''\"\n [ulvCommandHandler]=\"cmd\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"cmd.text\"\n [hostEl]=\"btnEl\"\n (commandClick)=\"onCommandClick($event)\"\n >\n <img *ngIf=\"!cmd.Command?.NewIcon && !cmd.Command?.JsonExtraProp?.Icon\" [src]=\"cmd.icon\" />\n </button>\n</ng-template>\n<ng-template #customButtonTemplate let-cmd>\n <div\n #hostEl\n [dbName]=\"cmd.text\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"hostEl\"\n [styleIndex]=\"styleIndex\"\n >\n <bnrc-dynamic-form-toolbaritem\n fd-toolbar-item\n [ulvCommandHandler]=\"cmd\"\n [component]=\"cmd.Command?.CustomUi\"\n [mo]=\"mo\"\n [context]=\"cmd\"\n [showText]=\"disableOverflowContextMenu === false\"\n [deviceName]=\"deviceName\"\n [index]=\"index\"\n [isEnable]=\"cmd.Command?._isEnable || cmd.Command?.UseForSingle\"\n [allColumns]=\"allColumns\"\n (btnClick)=\"onCommandClick($event)\"\n ></bnrc-dynamic-form-toolbaritem>\n </div>\n</ng-template>\n", styles: [":host{display:flex;justify-content:center;align-items:center}:host ::ng-deep button{margin-top:0!important}:host ::ng-deep .fd-popover-custom{max-width:none}:host.disableOverflow{column-gap:5px}button{align-items:center}button div{display:flex}button ::ng-deep span{height:auto!important}\n"] }]
60
+ args: [{ selector: 'bsu-ulv-context-menu,[ulvContextMenu]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"footerMode; else contextTemplate\">\n <div fd-bar barDesign=\"footer\" [cozy]=\"false\" style=\"width: 100%\">\n <div fd-bar-middle *ngIf=\"overflowMode\">\n <ng-container *ngTemplateOutlet=\"footerToolbarTpl\"></ng-container>\n </div>\n <div fd-bar-right *ngIf=\"!overflowMode\">\n <ng-container *ngTemplateOutlet=\"footerToolbarTpl\"></ng-container>\n </div>\n <ng-template #footerToolbarTpl>\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\n <ng-container *ngFor=\"let cmd of menuItems\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate; context: { $implicit: cmd }\"></ng-container>\n </ng-container>\n </fd-toolbar>\n </ng-template>\n </div>\n</ng-container>\n<ng-template #contextTemplate>\n <ng-container\n *ngTemplateOutlet=\"\n overflowMode && !disableOverflowContextMenu ? overflowCommands : simpleCommands;\n context: { $implicit: menuItems, index: index }\n \"\n ></ng-container>\n</ng-template>\n\n<ng-template #simpleCommands let-commands let-index=\"index\">\n <ng-container *ngFor=\"let cmd of commands\">\n <ng-container *ngTemplateOutlet=\"menuButtonTemplate; context: { $implicit: cmd }\"></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #overflowCommands let-commands let-index=\"index\">\n <fd-popover placement=\"bottom\" [(isOpen)]=\"isOpenOverflow\" [closeOnOutsideClick]=\"true\" [noArrow]=\"true\">\n <fd-popover-control #popover>\n <button fd-button (click)=\"onOpenOverflow($event)\" [fdType]=\"'transparent'\" [glyph]=\"'overflow'\"></button>\n </fd-popover-control>\n <fd-popover-body>\n <ul fd-list>\n <li fd-list-item *ngFor=\"let cmd of commands\">\n <ng-container *ngTemplateOutlet=\"menuButtonTemplate; context: { $implicit: cmd }\"></ng-container>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #menuButtonTemplate let-cmd>\n <ng-container\n *ngTemplateOutlet=\"cmd.menu ? menuTemplate : buttonTemplate; context: { $implicit: cmd }\"\n ></ng-container>\n</ng-template>\n<ng-template #menuTemplate let-cmd>\n <fd-split-button fd-toolbar-item [mainAction]=\"{ mainActionTitle: cmd.text, keepMainAction: true }\">\n <fd-menu>\n <li\n fd-menu-item\n *ngFor=\"let btnCommand of cmd.menu.items\"\n #liEl\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"cmd.text\"\n [hostEl]=\"liEl\"\n (click)=\"onCommandSplitButtonClick($event, btnCommand)\"\n >\n <div fd-menu-interactive>\n <span fd-menu-title>{{ btnCommand.text }}</span>\n </div>\n </li>\n </fd-menu>\n </fd-split-button>\n</ng-template>\n<ng-template #buttonTemplate let-cmd>\n <ng-container\n *ngTemplateOutlet=\"\n cmd?.Command?.CustomUi ? customButtonTemplate : defaultButtonTemplate;\n context: { $implicit: cmd }\n \"\n ></ng-container>\n</ng-template>\n<ng-template #defaultButtonTemplate let-cmd>\n <button\n fd-button\n #btnEl\n [fdType]=\"cmd.Command?.JsonExtraProp?.Design ? cmd.Command?.JsonExtraProp.Design : 'transparent'\"\n [label]=\"cmd.text\"\n [glyph]=\"cmd.Command?.NewIcon || cmd.Command?.JsonExtraProp?.Icon || ''\"\n [ulvCommandHandler]=\"cmd\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"cmd.text\"\n [hostEl]=\"btnEl\"\n (commandClick)=\"onCommandClick($event)\"\n >\n <img *ngIf=\"!cmd.Command?.NewIcon && !cmd.Command?.JsonExtraProp?.Icon\" [src]=\"cmd.icon\" />\n </button>\n</ng-template>\n<ng-template #customButtonTemplate let-cmd>\n <div\n #hostEl\n [dbName]=\"cmd.text\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"hostEl\"\n [styleIndex]=\"styleIndex\"\n >\n <bnrc-dynamic-form-toolbaritem\n fd-toolbar-item\n [ulvCommandHandler]=\"cmd\"\n [component]=\"cmd.Command?.CustomUi\"\n [mo]=\"mo\"\n [context]=\"cmd\"\n [showText]=\"disableOverflowContextMenu === false\"\n [deviceName]=\"deviceName\"\n [index]=\"index\"\n [isEnable]=\"cmd.Command?._isEnable || cmd.Command?.UseForSingle\"\n [allColumns]=\"allColumns\"\n (btnClick)=\"onCommandClick($event)\"\n ></bnrc-dynamic-form-toolbaritem>\n </div>\n</ng-template>\n", styles: [":host{display:flex;justify-content:center;align-items:center;flex-wrap:wrap;row-gap:5px}:host ::ng-deep button{margin-top:0!important}:host ::ng-deep .fd-popover-custom{max-width:none}:host.disableOverflow{column-gap:5px}button{align-items:center}button div{display:flex}button ::ng-deep span{height:auto!important}\n"] }]
61
61
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { onlyOverflow: [{
62
62
  type: Input
63
63
  }], deviceName: [{