barsa-sap-ui 1.0.278 → 1.0.281

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.
@@ -2,22 +2,24 @@ import { Component, HostListener, Input, ViewChild, ChangeDetectionStrategy } fr
2
2
  import { of, Subject } from 'rxjs';
3
3
  import { debounceTime, filter, distinctUntilChanged, tap, takeUntil, switchMap } from 'rxjs/operators';
4
4
  import { ComboboxComponent } from '@fundamental-ngx/core';
5
- import { FieldBaseComponent, BarsaApi } from 'barsa-novin-ray-core';
5
+ import { FieldBaseComponent, BarsaApi, PreventDefaulEvent, getUniqueId } from 'barsa-novin-ray-core';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "@angular/common";
8
8
  import * as i2 from "@angular/forms";
9
9
  import * as i3 from "@fundamental-ngx/core/button";
10
10
  import * as i4 from "@fundamental-ngx/core/combobox";
11
11
  import * as i5 from "@fundamental-ngx/core/form";
12
- import * as i6 from "@fundamental-ngx/core/input-group";
13
- import * as i7 from "@fundamental-ngx/core/list";
14
- import * as i8 from "@fundamental-ngx/platform/button";
15
- import * as i9 from "../mask/mask.component";
16
- import * as i10 from "barsa-novin-ray-core";
12
+ import * as i6 from "@fundamental-ngx/core/icon";
13
+ import * as i7 from "@fundamental-ngx/core/input-group";
14
+ import * as i8 from "@fundamental-ngx/core/list";
15
+ import * as i9 from "@fundamental-ngx/platform/button";
16
+ import * as i10 from "../mask/mask.component";
17
+ import * as i11 from "barsa-novin-ray-core";
17
18
  export class UiMoInfoUlvComboComponent extends FieldBaseComponent {
18
19
  constructor() {
19
20
  super(...arguments);
20
21
  this.smartChange = new Subject();
22
+ this.allColumns = [];
21
23
  this._openPopupFormSelectionSource = new Subject();
22
24
  this._closeDialogSource = new Subject();
23
25
  this._loadingSource = new Subject();
@@ -43,6 +45,9 @@ export class UiMoInfoUlvComboComponent extends FieldBaseComponent {
43
45
  this.Focus = () => { };
44
46
  this.SetUlvAdapter = (type, ulvAdapter) => {
45
47
  this.ulvAdapter = ulvAdapter;
48
+ if (ulvAdapter?.Setting?.View?.Columns?.length) {
49
+ this.allColumns = ulvAdapter.Setting.View.Columns.filter((c) => c.MetaFieldTypeId > 0);
50
+ }
46
51
  /* eslint-disable */
47
52
  };
48
53
  this.IsUiCreated = (type) => {
@@ -70,10 +75,7 @@ export class UiMoInfoUlvComboComponent extends FieldBaseComponent {
70
75
  /* eslint-disable */
71
76
  };
72
77
  this.getRawValue = () => {
73
- if (!this.value) {
74
- return this.rawValue;
75
- }
76
- return '';
78
+ return this.rawValue;
77
79
  /* eslint-disable */
78
80
  };
79
81
  }
@@ -82,6 +84,7 @@ export class UiMoInfoUlvComboComponent extends FieldBaseComponent {
82
84
  e.preventDefault();
83
85
  }
84
86
  ngOnInit() {
87
+ this.comboboxId = getUniqueId(3);
85
88
  this.loading$ = this._loadingSource.asObservable().pipe(takeUntil(this._onDestroy$));
86
89
  this.loading$.subscribe(() => {
87
90
  this.isDataLoadedFirstTime =
@@ -109,6 +112,33 @@ export class UiMoInfoUlvComboComponent extends FieldBaseComponent {
109
112
  super.ngAfterViewInit();
110
113
  // this._setComboText(this.value);
111
114
  }
115
+ onPagingClick(e) {
116
+ PreventDefaulEvent(e);
117
+ }
118
+ onPageChange(e) {
119
+ this._loadingSource.next(true);
120
+ this.ulvAdapter.DataCtrlr.MoveToPage(e, () => {
121
+ this._loadingSource.next(false);
122
+ });
123
+ }
124
+ onItemClick(e) {
125
+ const selectedMo = e.item;
126
+ this._fireValueChange(selectedMo);
127
+ }
128
+ onPageChange2(pageSetting, e) {
129
+ PreventDefaulEvent(e);
130
+ this._loadingSource.next(true);
131
+ const ulvAdapter = this.ulvAdapter;
132
+ const temp1 = ulvAdapter.Setting.Data.MoDataList;
133
+ temp1.splice(temp1.length - 1, 1);
134
+ const moDataListOld = [...temp1];
135
+ moDataListOld.forEach((c) => (c.$__IsLast = false));
136
+ this.ulvAdapter.DataCtrlr.MoveToPage(pageSetting.Page + 1, () => {
137
+ const moDataList = ulvAdapter.Setting.Data.MoDataList;
138
+ moDataList.splice(0, 0, ...moDataListOld);
139
+ this._loadingSource.next(false);
140
+ });
141
+ }
112
142
  onOpenChange(fdCombobox, isOpen) {
113
143
  if (isOpen) {
114
144
  this._focus();
@@ -187,15 +217,18 @@ export class UiMoInfoUlvComboComponent extends FieldBaseComponent {
187
217
  if (value === null || typeof value === 'undefined') {
188
218
  this._valueMo = null;
189
219
  }
190
- const valueText = '';
220
+ this.valueText = this._getValueText(value);
221
+ this._setComboText(this.valueText);
222
+ }
223
+ _getValueText(value) {
191
224
  if (!value) {
192
- this.valueText = '';
225
+ return '';
193
226
  }
194
227
  else if (typeof value === 'string') {
195
- this.valueText = value;
228
+ return value;
196
229
  }
197
230
  else if (typeof value === 'object') {
198
- this.valueText = value.$Caption;
231
+ return value.$Caption;
199
232
  }
200
233
  if (typeof value !== 'string' && value && this.UlvMainCtrlr && this.UlvMainCtrlr.Dd) {
201
234
  const view = this.UlvMainCtrlr.Dd.Setting.View;
@@ -204,9 +237,8 @@ export class UiMoInfoUlvComboComponent extends FieldBaseComponent {
204
237
  const firstCol = view.Columns.find((c) => !c.Name.startsWith('$') && c.Name !== 'Id');
205
238
  colName = firstCol?.Name ? firstCol.Name : '$Caption';
206
239
  }
207
- this.valueText = this.getMoValueCaption(this._valueMo, colName, this.valueText);
240
+ return this.getMoValueCaption(this._valueMo, colName, this.valueText);
208
241
  }
209
- this._setComboText(this.valueText);
210
242
  }
211
243
  _setComboText(value) {
212
244
  // if (value === null || typeof value === 'undefined') {
@@ -258,7 +290,7 @@ export class UiMoInfoUlvComboComponent extends FieldBaseComponent {
258
290
  });
259
291
  if (findMo) {
260
292
  canRequest = false;
261
- this._fireValueChange(findMo);
293
+ //this._fireValueChange(findMo);
262
294
  }
263
295
  }
264
296
  return canRequest;
@@ -295,10 +327,10 @@ export class UiMoInfoUlvComboComponent extends FieldBaseComponent {
295
327
  }
296
328
  }
297
329
  UiMoInfoUlvComboComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiMoInfoUlvComboComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
298
- 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.alt": "onAlt($event)" } }, viewQueries: [{ propertyName: "fdComboRef", first: true, predicate: ComboboxComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"context._showPopup || context._showDropDown === false; else combo\">\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$ | async) === 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\n fd-input-group-addon\n *ngIf=\"value && (disableOrReadonly$ | async) !== true\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"decline\" (click)=\"onClear()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"!value && (disableOrReadonly$ | async) !== 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=\"value && (disableOrReadonly$ | async) !== 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=\"value && (disableOrReadonly$ | async) !== 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$ | async) !== 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-container>\n\n<ng-template #combo>\n <div [class.control-disabled]=\"disable$ | async\" class=\"simple-combo-wrapper\">\n <fd-combobox\n #fdCombobox\n class=\"combo-mo-ulv\"\n [class.has-report]=\"hasReport\"\n [placeholder]=\"''\"\n [mobile]=\"(deviceSize$ | async) === 's'\"\n [mobileConfig]=\"mobileConfig\"\n [fillOnSelect]=\"true\"\n [readOnly]=\"(readonly$ | async) === true ? true : false\"\n [disabled]=\"(disable$ | async) === true ? true : false\"\n [dropdownValues]=\"(loading$ | async) === true | moInfoUlvMoList: isDataLoadedFirstTime:ulvAdapter:UlvUi\"\n [filterFn]=\"customFilter\"\n [openOnKeyboardEvent]=\"true\"\n [itemTemplate]=\"template\"\n [ngModel]=\"valueText | bbbTranslate\"\n [displayFn]=\"displayFunc\"\n [showDropdownButton]=\"(disableOrReadonly$ | async) !== true\"\n (inputTextChange)=\"onInputChange($event)\"\n (openChange)=\"onOpenChange(fdCombobox, $event)\"\n >\n </fd-combobox>\n <button *ngIf=\"value\" fd-button fdType=\"transparent\" glyph=\"decline\" (click)=\"onClear()\"></button>\n <fdp-button\n *ngIf=\"hasReport && (disableOrReadonly$ | async) !== true\"\n glyph=\"search\"\n buttonType=\"transparent\"\n class=\"combo-popup-btn\"\n (click)=\"onSearch()\"\n ></fdp-button>\n </div>\n <ng-template #template let-item>\n <div fd-list-content *ngIf=\"item.$isLoading; else showItem\" style=\"width: 100%; height: 20px\">\n <bsu-mask [size]=\"'s'\" [marginTop]=\"'10px'\"></bsu-mask>\n </div>\n <ng-template #showItem>\n <i fd-list-icon [glyph]=\"item.$Icon\"></i>\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", 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}.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.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i4.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: i5.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class"] }, { kind: "directive", type: i5.InputFormControlDirective, selector: "input[fd-form-control]" }, { 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.ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "class", "role"] }, { kind: "directive", type: i7.ListContentDirective, selector: "[fdListContent], [fd-list-content]", inputs: ["twoCol"] }, { 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", "marginTop"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i10.MoInfoUlvMoListPipe, name: "moInfoUlvMoList" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
330
+ 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.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: (loading$ | async) === true | moInfoUlvMoList: isDataLoadedFirstTime:ulvAdapter:UlvUi,\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=\"value && 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=\"!value && 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=\"value && 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=\"value && 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.control-disabled]=\"disable\" class=\"simple-combo-wrapper\">\n <fd-combobox\n #fdCombobox\n class=\"combo-mo-ulv\"\n [comboboxId]=\"comboboxId\"\n [class.has-report]=\"hasReport\"\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 [ngModel]=\"valueText | bbbTranslate\"\n [displayFn]=\"displayFunc\"\n [showDropdownButton]=\"disableOrReadonly !== true\"\n (itemClicked)=\"onItemClick($event)\"\n (inputTextChange)=\"onInputChange($event)\"\n (openChange)=\"onOpenChange(fdCombobox, $event)\"\n >\n </fd-combobox>\n <button\n *ngIf=\"value && disableOrReadonly !== true\"\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n (click)=\"onClear()\"\n ></button>\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'\" [marginTop]=\"'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; 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}.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: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i4.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: i5.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class"] }, { kind: "directive", type: i5.InputFormControlDirective, selector: "input[fd-form-control]" }, { kind: "component", type: i6.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "directive", type: i7.InputGroupInputDirective, selector: "[fd-input-group-input]", inputs: ["class"] }, { kind: "directive", type: i7.InputGroupAddOnDirective, selector: "[fd-input-group-addon]", inputs: ["class", "placement", "type", "state", "button"] }, { kind: "directive", type: i8.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i8.ListBylineDirective, selector: "[fdListByline], [fd-list-byline]", inputs: ["twoCol", "wrap"] }, { kind: "directive", type: i8.ListContentDirective, selector: "[fdListContent], [fd-list-content]", inputs: ["twoCol"] }, { kind: "directive", type: i8.ListThumbnailDirective, selector: "[fdListThumbnail], [fd-list-thumbnail]" }, { kind: "component", type: i9.ButtonComponent, selector: "fdp-button", inputs: ["glyphPosition", "label", "glyph", "buttonType", "title", "ariaSelected", "ariaDisabled", "ariaExpanded", "ariaControlsId", "ariaPressed", "name", "type", "value"], outputs: ["buttonClicked"] }, { kind: "component", type: i10.MaskComponent, selector: "bsu-mask", inputs: ["size", "marginTop"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i11.MoReportValuePipe, name: "rval" }, { kind: "pipe", type: i11.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i11.MoInfoUlvMoListPipe, name: "moInfoUlvMoList" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
299
331
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiMoInfoUlvComboComponent, decorators: [{
300
332
  type: Component,
301
- args: [{ selector: 'bsu-ui-mo-info-ulv-combo', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"context._showPopup || context._showDropDown === false; else combo\">\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$ | async) === 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\n fd-input-group-addon\n *ngIf=\"value && (disableOrReadonly$ | async) !== true\"\n class=\"fd-input-group__addon--button\"\n >\n <button fd-button fdType=\"transparent\" glyph=\"decline\" (click)=\"onClear()\"></button>\n </span>\n <span\n fd-input-group-addon\n *ngIf=\"!value && (disableOrReadonly$ | async) !== 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=\"value && (disableOrReadonly$ | async) !== 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=\"value && (disableOrReadonly$ | async) !== 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$ | async) !== 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-container>\n\n<ng-template #combo>\n <div [class.control-disabled]=\"disable$ | async\" class=\"simple-combo-wrapper\">\n <fd-combobox\n #fdCombobox\n class=\"combo-mo-ulv\"\n [class.has-report]=\"hasReport\"\n [placeholder]=\"''\"\n [mobile]=\"(deviceSize$ | async) === 's'\"\n [mobileConfig]=\"mobileConfig\"\n [fillOnSelect]=\"true\"\n [readOnly]=\"(readonly$ | async) === true ? true : false\"\n [disabled]=\"(disable$ | async) === true ? true : false\"\n [dropdownValues]=\"(loading$ | async) === true | moInfoUlvMoList: isDataLoadedFirstTime:ulvAdapter:UlvUi\"\n [filterFn]=\"customFilter\"\n [openOnKeyboardEvent]=\"true\"\n [itemTemplate]=\"template\"\n [ngModel]=\"valueText | bbbTranslate\"\n [displayFn]=\"displayFunc\"\n [showDropdownButton]=\"(disableOrReadonly$ | async) !== true\"\n (inputTextChange)=\"onInputChange($event)\"\n (openChange)=\"onOpenChange(fdCombobox, $event)\"\n >\n </fd-combobox>\n <button *ngIf=\"value\" fd-button fdType=\"transparent\" glyph=\"decline\" (click)=\"onClear()\"></button>\n <fdp-button\n *ngIf=\"hasReport && (disableOrReadonly$ | async) !== true\"\n glyph=\"search\"\n buttonType=\"transparent\"\n class=\"combo-popup-btn\"\n (click)=\"onSearch()\"\n ></fdp-button>\n </div>\n <ng-template #template let-item>\n <div fd-list-content *ngIf=\"item.$isLoading; else showItem\" style=\"width: 100%; height: 20px\">\n <bsu-mask [size]=\"'s'\" [marginTop]=\"'10px'\"></bsu-mask>\n </div>\n <ng-template #showItem>\n <i fd-list-icon [glyph]=\"item.$Icon\"></i>\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", 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}.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"] }]
333
+ 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: (loading$ | async) === true | moInfoUlvMoList: isDataLoadedFirstTime:ulvAdapter:UlvUi,\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=\"value && 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=\"!value && 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=\"value && 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=\"value && 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.control-disabled]=\"disable\" class=\"simple-combo-wrapper\">\n <fd-combobox\n #fdCombobox\n class=\"combo-mo-ulv\"\n [comboboxId]=\"comboboxId\"\n [class.has-report]=\"hasReport\"\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 [ngModel]=\"valueText | bbbTranslate\"\n [displayFn]=\"displayFunc\"\n [showDropdownButton]=\"disableOrReadonly !== true\"\n (itemClicked)=\"onItemClick($event)\"\n (inputTextChange)=\"onInputChange($event)\"\n (openChange)=\"onOpenChange(fdCombobox, $event)\"\n >\n </fd-combobox>\n <button\n *ngIf=\"value && disableOrReadonly !== true\"\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n (click)=\"onClear()\"\n ></button>\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'\" [marginTop]=\"'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; 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}.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"] }]
302
334
  }], propDecorators: { ulvAdapter: [{
303
335
  type: Input
304
336
  }], Control: [{
@@ -338,4 +370,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
338
370
  }], getRawValue: [{
339
371
  type: Input
340
372
  }] } });
341
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbW8taW5mby11bHYtY29tYm8vdWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbW8taW5mby11bHYtY29tYm8vdWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCx1QkFBdUIsRUFHMUIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRSxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLFFBQVEsRUFNWCxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7QUFROUIsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGtCQUFrQjtJQU5qRTs7UUFzQkksZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBYTVCLGtDQUE2QixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDcEQsdUJBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUN6QyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFxRmhELGdCQUFXLEdBQUcsQ0FBQyxHQUF3QixFQUFFLEVBQUU7WUFDdkMsSUFBSSxHQUFH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IElucHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBPbkluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRhcCwgdGFrZVVudGlsLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb21ib2JveENvbXBvbmVudCwgRGlhbG9nUmVmIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlJztcblxuaW1wb3J0IHtcbiAgICBGaWVsZEJhc2VDb21wb25lbnQsXG4gICAgQmFyc2FBcGksXG4gICAgUmVwb3J0RXh0cmFJbmZvLFxuICAgIE1vRm9yUmVwb3J0TW9kZWwsXG4gICAgQ2xhc3NOYW1lc01vZGVsLFxuICAgIFZpZXdUeXBlcyxcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3UtdWktbW8taW5mby11bHYtY29tYm8nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91aS1tby1pbmZvLXVsdi1jb21iby5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBVaU1vSW5mb1VsdkNvbWJvQ29tcG9uZW50IGV4dGVuZHMgRmllbGRCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgICBASW5wdXQoKSB1bHZBZGFwdGVyOiB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgU2V0dGluZzoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICAgICAgVmlldzogVmlld1R5cGVzO1xuICAgICAgICAgICAgQ2xhc3NOYW1lczogQ2xhc3NOYW1lc01vZGVsO1xuICAgICAgICAgICAgRXh0cmE6IFJlcG9ydEV4dHJhSW5mbztcbiAgICAgICAgICAgIERhdGE6IE1vRm9yUmVwb3J0TW9kZWw7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBASW5wdXQoKSBDb250cm9sOiBhbnk7XG4gICAgQElucHV0KCkgVWx2VWk6IGFueTtcbiAgICBASW5wdXQoKSBVbHZNYWluQ3RybHI6IGFueTtcbiAgICBAVmlld0NoaWxkKENvbWJvYm94Q29tcG9uZW50KSBmZENvbWJvUmVmOiBDb21ib2JveENvbXBvbmVudDtcbiAgICBpc0V4cGFuZDogYm9vbGVhbjtcbiAgICBzbWFydENoYW5nZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgICBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICB0aWNrUmVmOiBhbnk7XG4gICAgaW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlzRmlyc3RMb2FkOiBib29sZWFuO1xuICAgIHBvcG92ZXJFbGVtZW50OiBhbnk7XG4gICAgcmF3VmFsdWU6IHN0cmluZztcbiAgICBmb3JtU2VsZWN0aW9uRGlhbG9nOiBEaWFsb2dSZWY7XG4gICAgaXNPcGVuU2VsZWN0aW9uRGlhbG9nOiBib29sZWFuO1xuICAgIGhhc1JlcG9ydDogYW55O1xuICAgIG9yaWdpbmFsVmFsdWU6IGFueTtcbiAgICBpc0RhdGFMb2FkZWRGaXJzdFRpbWU6IGJvb2xlYW47XG4gICAgdmFsdWVUZXh0OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfb3BlblBvcHVwRm9ybVNlbGVjdGlvblNvdXJjZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBfY2xvc2VEaWFsb2dTb3VyY2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgX2xvYWRpbmdTb3VyY2UgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIHByaXZhdGUgX3ZhbHVlTW86IE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsO1xuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hbHQnLCBbJyRldmVudCddKVxuICAgIG9uQWx0KGUpOiB2b2lkIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nJCA9IHRoaXMuX2xvYWRpbmdTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xuICAgICAgICB0aGlzLmxvYWRpbmckLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRlZEZpcnN0VGltZSA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMudWx2QWRhcHRlcj8uU2V0dGluZz8uRGF0YT8uTW9EYXRhTGlzdCA9PT0gJ29iamVjdCcgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy5VbHZVaT8uU2V0dGluZz8uRGF0YT8uTW9EYXRhTGlzdCA9PT0gJ29iamVjdCc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNtYXJ0Q2hhbmdlXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDIwMCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCh2YWx1ZSkgPT4gdGhpcy5fZmlsdGVyU21hcnRDaGFuZ2UodmFsdWUpKSxcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIHRhcCgodmFsdWUpID0+ICh0aGlzLnJhd1ZhbHVlID0gdmFsdWUpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdTbWFydENoYW5nZScsIHRoaXMuY29udGV4dCwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX29wZW5Qb3B1cEZvcm1TZWxlY3Rpb25Tb3VyY2VcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Nsb3NlRGlhbG9nU291cmNlKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuVWx2VWkgJiYgIXRoaXMuaXNPcGVuU2VsZWN0aW9uRGlhbG9nICYmIHRoaXMuY29udGV4dC5fc2hvd1BvcHVwKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5fb3BlblBvcHVwRm9ybVNlbGVjdGlvbigpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLm9yaWdpbmFsVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICB0aGlzLmhhc1JlcG9ydCA9IHRoaXMuU2V0dGluZy5SZWxhdGlvblZpZXdUeXBlID09PSAnUmVwb3J0VmlldycgfHwgdGhpcy5TZXR0aW5nLlJlcG9ydE5hbWUgPT09ICdIaWVyYXJjaGljYWwnO1xuICAgICAgICB0aGlzLkNvbnRyb2wgPSB0aGlzO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NldFZhbHVlVGV4dCh0aGlzLnZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIC8vIHRoaXMuX3NldENvbWJvVGV4dCh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBvbk9wZW5DaGFuZ2UoZmRDb21ib2JveCwgaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzKCk7XG4gICAgICAgICAgICAvLyBmZENvbWJvYm94Lm9wZW4gPSBmYWxzZTsgLy8gaXQgY2xvc2UgcG9wdXAgd2hlbiBjbGljayBvbiBkcm9wZG93biBidXR0b24gaW4gY29tcG9uZW50XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dFRleHQgPSB0aGlzLmZkQ29tYm9SZWY/LmlucHV0VGV4dFZhbHVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnZhbHVlICYmIGlucHV0VGV4dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JhaXNlU21hcnRDaGFuZ2UoaW5wdXRUZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBvbklucHV0Q2hhbmdlKGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmFpc2VTbWFydENoYW5nZShlKTtcbiAgICB9XG4gICAgb25JbnB1dENoYW5nZTIoZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yYWlzZVNtYXJ0Q2hhbmdlKGUudGFyZ2V0LnZhbHVlKTtcbiAgICB9XG4gICAgb25WYWx1ZUNoYW5nZShlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JhaXNlVmFsdWVDaGFuZ2VkKGUudGFyZ2V0LnZhbHVlKTtcbiAgICB9XG4gICAgb25OZXcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJDbGljaygnTmV3Jyk7XG4gICAgfVxuICAgIG9uQ2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJDbGljaygnRGVsZXRlJyk7XG4gICAgfVxuICAgIG9uRWRpdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckNsaWNrKCdFZGl0Jyk7XG4gICAgfVxuICAgIG9uU2VhcmNoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90cmlnZ2VyQ2xpY2soJ1BvcHVwJyk7XG4gICAgfVxuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgY3VzdG9tRmlsdGVyKGNvbnRlbnQ6IGFueVtdLCBzZWFyY2hUZXJtOiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cblxuICAgIGRpc3BsYXlGdW5jID0gKG9iajogTWV0YW9iamVjdERhdGFNb2RlbCkgPT4ge1xuICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xOYW1lID0gdGhpcy5nZXRGaXJzdENvbHVtbk5hbWUoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE1vVmFsdWVDYXB0aW9uKG9iaiwgY29sTmFtZSwgb2JqLiRDYXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfTtcbiAgICBnZXRNb1ZhbHVlQ2FwdGlvbih2YWx1ZU1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbCwgY29sTmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICh2YWx1ZU1vID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjYXB0aW9uVmFsdWVNbztcbiAgICAgICAgY29uc3QgbW9saXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcbiAgICAgICAgICAgIHRoaXMudWx2QWRhcHRlcixcbiAgICAgICAgICAgICdTZXR0aW5nLkRhdGEuTW9EYXRhTGlzdCcsXG4gICAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBmb3VuZGVkTW8gPSBtb2xpc3QuZmluZCgoYykgPT4gYy5JZCA9PT0gdmFsdWVNby5JZCk7XG4gICAgICAgIGlmIChjb2xOYW1lICYmIGZvdW5kZWRNbyAmJiBmb3VuZGVkTW9bY29sTmFtZV0pIHtcbiAgICAgICAgICAgIGlmIChmb3VuZGVkTW9bY29sTmFtZSArICckQ2FwdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgY2FwdGlvblZhbHVlTW8gPSBmb3VuZGVkTW9bY29sTmFtZSArICckQ2FwdGlvbiddO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3VuZGVkTW9bY29sTmFtZV0uJENhcHRpb24pIHtcbiAgICAgICAgICAgICAgICBjYXB0aW9uVmFsdWVNbyA9IGZvdW5kZWRNb1tjb2xOYW1lXS4kQ2FwdGlvbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FwdGlvblZhbHVlTW8gPSBmb3VuZGVkTW9bY29sTmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2JiYlBpcGUudHJhbnNmb3JtKGNhcHRpb25WYWx1ZU1vIHx8IGRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIGdldEZpcnN0Q29sdW1uTmFtZSgpIHtcbiAgICAgICAgbGV0IGNvbE5hbWUgPSAnJENhcHRpb24nO1xuICAgICAgICBpZiAodGhpcy5VbHZNYWluQ3RybHIgJiYgdGhpcy5VbHZNYWluQ3RybHI/LkRkPy5TZXR0aW5nPy5WaWV3KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5VbHZNYWluQ3RybHIuRGQuU2V0dGluZy5WaWV3LkNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENvbCA9IHRoaXMuVWx2TWFpbkN0cmxyLkRkLlNldHRpbmcuVmlldy5Db2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChjKSA9PiAhYy5OYW1lLnN0YXJ0c1dpdGgoJyQnKSAmJiBjLk5hbWUgIT09ICdJZCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChmaXJzdENvbD8uTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjb2xOYW1lID0gZmlyc3RDb2wuTmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbE5hbWU7XG4gICAgfVxuXG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBASW5wdXQoKSBJc0V4cGFuZGVkID0gKHR5cGUpID0+IGZhbHNlO1xuICAgIC8vIHJldHVybiB0aGlzLmNvbWJvUmVmLm5hdGl2ZUVsZW1lbnQucmVzcG9uc2l2ZVBvcG92ZXIuaXNPcGVuKCk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBASW5wdXQoKSBDb2xsYXBzZSA9ICh0eXBlKSA9PiB7fTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIEV4cGFuZCA9ICh0eXBlKSA9PiB7XG4gICAgICAgIHRoaXMudWx2QWRhcHRlciA9IHRoaXMuVWx2TWFpbkN0cmxyW3R5cGVdO1xuICAgIH07XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBASW5wdXQoKSBvbiA9ICgpID0+IHt9O1xuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgQElucHV0KCkgRm9jdXMgPSAoKSA9PiB7fTtcbiAgICBASW5wdXQoKVxuICAgIFNldFVsdkFkYXB0ZXIgPSAodHlwZSwgdWx2QWRhcHRlcikgPT4ge1xuICAgICAgICB0aGlzLnVsdkFkYXB0ZXIgPSB1bHZBZGFwdGVyO1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIH07XG4gICAgQElucHV0KClcbiAgICBJc1VpQ3JlYXRlZCA9ICh0eXBlKSA9PiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIH07XG4gICAgQElucHV0KClcbiAgICBNYXNrID0gKHR5cGUpID0+IHtcbiAgICAgICAgdGhpcy5fbG9hZGluZ1NvdXJjZS5uZXh0KHRydWUpO1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIH07XG4gICAgQElucHV0KClcbiAgICBoaWRlID0gKHR5cGUpID0+IHtcbiAgICAgICAgLy8gdGhpcy50cmlnZ2VyQ2xpY2soJ05vcm1hbCcpO1xuICAgICAgICBpZiAodGhpcy5mb3JtU2VsZWN0aW9uRGlhbG9nKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1TZWxlY3Rpb25EaWFsb2cuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIH07XG4gICAgQElucHV0KClcbiAgICBzaG93ID0gKHR5cGUpID0+IHtcbiAgICAgICAgLy8gdGhpcy50cmlnZ2VyQ2xpY2soJ05vcm1hbCcpO1xuICAgICAgICB0aGlzLl9vcGVuUG9wdXBGb3JtU2VsZWN0aW9uU291cmNlLm5leHQoKTsgLy8gcmFiZXRlIHRha2kgZ2VuZXJhbCBpbmZvIC5wb3B1cCBiYXogbWlzaG9kIGtlIGJhaWFkIGRyb3Bkb3duIGJhc2hlLlxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIH07XG4gICAgQElucHV0KClcbiAgICBVbm1hc2sgPSAodHlwZSkgPT4ge1xuICAgICAgICB0aGlzLl9sb2FkaW5nU291cmNlLm5leHQoZmFsc2UpO1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIH07XG4gICAgQElucHV0KClcbiAgICBnZXRSYXdWYWx1ZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgfTtcbiAgICBwcm90ZWN0ZWQgX3NldFZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0VmFsdWVUZXh0KHZhbHVlKTtcbiAgICAgICAgc3VwZXIuX3NldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgLy8gdGhpcy5fc2V0Q29tYm9UZXh0KHZhbHVlKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXRWYWx1ZVRleHQodmFsdWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlTW8gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlVGV4dCA9ICcnO1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlVGV4dCA9ICcnO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVUZXh0ID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZVRleHQgPSB2YWx1ZS4kQ2FwdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyAmJiB2YWx1ZSAmJiB0aGlzLlVsdk1haW5DdHJsciAmJiB0aGlzLlVsdk1haW5DdHJsci5EZCkge1xuICAgICAgICAgICAgY29uc3QgdmlldyA9IHRoaXMuVWx2TWFpbkN0cmxyLkRkLlNldHRpbmcuVmlldztcbiAgICAgICAgICAgIGxldCBjb2xOYW1lID0gJyRDYXB0aW9uJztcbiAgICAgICAgICAgIGlmICh2aWV3LkNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENvbCA9IHZpZXcuQ29sdW1ucy5maW5kKChjKSA9PiAhYy5OYW1lLnN0YXJ0c1dpdGgoJyQnKSAmJiBjLk5hbWUgIT09ICdJZCcpO1xuICAgICAgICAgICAgICAgIGNvbE5hbWUgPSBmaXJzdENvbD8uTmFtZSA/IGZpcnN0Q29sLk5hbWUgOiAnJENhcHRpb24nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZVRleHQgPSB0aGlzLmdldE1vVmFsdWVDYXB0aW9uKHRoaXMuX3ZhbHVlTW8sIGNvbE5hbWUsIHRoaXMudmFsdWVUZXh0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXRDb21ib1RleHQodGhpcy52YWx1ZVRleHQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldENvbWJvVGV4dCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIC8vIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIHRoaXMuX3ZhbHVlTW8gPSBudWxsO1xuICAgICAgICAvL3RoaXMuZmRDb21ib1JlZi5pbnB1dFRleHRWYWx1ZSA9ICcnO1xuICAgICAgICAvL3RoaXMuZmRDb21ib1JlZi5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAvLyB9XG4gICAgICAgIGNvbnN0IGZkQ29tYm9SZWYgPSB0aGlzLmZkQ29tYm9SZWY7XG4gICAgICAgIGNvbnN0IGlucHV0VGV4dCA9IGZkQ29tYm9SZWY/LmlucHV0VGV4dFZhbHVlO1xuICAgICAgICBpZiAoZmRDb21ib1JlZiAmJiB2YWx1ZSAhPSBpbnB1dFRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IFVsdk1haW5DdHJsciA9IHRoaXMuVWx2TWFpbkN0cmxyO1xuICAgICAgICAgICAgaWYgKFVsdk1haW5DdHJsciAmJiBVbHZNYWluQ3RybHIuRGQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3ID0gVWx2TWFpbkN0cmxyLkRkLlNldHRpbmcuVmlldztcbiAgICAgICAgICAgICAgICBsZXQgY29sTmFtZSA9ICckQ2FwdGlvbic7XG4gICAgICAgICAgICAgICAgaWYgKHZpZXcuQ29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENvbCA9IHZpZXcuQ29sdW1ucy5maW5kKChjKSA9PiAhYy5OYW1lLnN0YXJ0c1dpdGgoJyQnKSAmJiBjLk5hbWUgIT09ICdJZCcpO1xuICAgICAgICAgICAgICAgICAgICBjb2xOYW1lID0gZmlyc3RDb2w/Lk5hbWUgPyBmaXJzdENvbC5OYW1lIDogJyRDYXB0aW9uJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldE1vVmFsdWVDYXB0aW9uKHRoaXMuX3ZhbHVlTW8sIGNvbE5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZkQ29tYm9SZWYuaW5wdXRUZXh0ID0gdmFsdWUgPyB0aGlzLl9iYmJQaXBlLnRyYW5zZm9ybSh2YWx1ZSkgKyAnJyA6ICcnO1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX29wZW5Qb3B1cEZvcm1TZWxlY3Rpb24oKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHRoaXMuaXNPcGVuU2VsZWN0aW9uRGlhbG9nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5VbHZVaS52aWV3ZXJDb250cm9sLlNob3dPa0NhbmNlbEJ1dHRvbnMgPSB0cnVlOyAvLyB0aGlzIGlzIHVzZWZ1bCB0byB1bHYgbWFuYWdlIHRvb2xiYXIgYnV0dG9ucy5mb3IgZXhhbXBsZSBtb3ZlIGluIHRyZWUgZG9lcyBub3Qgc2hvd25cbiAgICAgICAgdGhpcy5mb3JtU2VsZWN0aW9uRGlhbG9nID0gQmFyc2FBcGkuQncuVWx2Rm9ybU11bHRpU2VsZWN0LlNob3codGhpcy5jb250ZXh0LCB7XG4gICAgICAgICAgICB1bHYxOiB0aGlzLlVsdlVpLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuX2JiYlBpcGUudHJhbnNmb3JtKCdTZWxlY3QnKSxcbiAgICAgICAgICAgIElzTG9hZGVkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuU2VsZWN0aW9uRGlhbG9nID0gZmFsc2U7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9maWx0ZXJTbWFydENoYW5nZSh2YWx1ZSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgY2FuUmVxdWVzdCA9IHRoaXMudWx2QWRhcHRlciAmJiB2YWx1ZSAhPT0gdGhpcy52YWx1ZTtcbiAgICAgICAgaWYgKGNhblJlcXVlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vbGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgdGhpcy51bHZBZGFwdGVyLFxuICAgICAgICAgICAgICAgICdTZXR0aW5nLkRhdGEuTW9EYXRhTGlzdCcsXG4gICAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIW1vbGlzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29sTmFtZSA9IHRoaXMuZ2V0Rmlyc3RDb2x1bW5OYW1lKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbmRNbyA9IG1vbGlzdC5maW5kKChtbykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhcHRpb24gPSB0aGlzLmdldE1vVmFsdWVDYXB0aW9uKG1vLCBjb2xOYW1lLCBtby4kQ2FwdGlvbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhcHRpb24gPT09IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZmluZE1vKSB7XG4gICAgICAgICAgICAgICAgY2FuUmVxdWVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcmVWYWx1ZUNoYW5nZShmaW5kTW8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5SZXF1ZXN0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJDbGljaygnTm9ybWFsJyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9yYWlzZVNtYXJ0Q2hhbmdlKHZhbHVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc21hcnRDaGFuZ2UubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF90cmlnZ2VyQ2xpY2soZXZlbnROYW1lLCB2YWx1ZSA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnVHJpZ2dlckNsaWNrJywgdGhpcy5jb250ZXh0LCBldmVudE5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3JhaXNlVmFsdWVDaGFuZ2VkKGNhcHRpb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGNhcHRpb247XG4gICAgICAgIGNvbnN0IG1vbGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXG4gICAgICAgICAgICB0aGlzLnVsdkFkYXB0ZXIsXG4gICAgICAgICAgICAnU2V0dGluZy5EYXRhLk1vRGF0YUxpc3QnLFxuICAgICAgICAgICAgW11cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFtb2xpc3QgfHwgbW9saXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vY29uc3QgY29sTmFtZSA9IHRoaXMuZ2V0Rmlyc3RDb2x1bW5OYW1lKCk7XG5cbiAgICAgICAgY29uc3QgbW8gPSBtb2xpc3QuZmluZCgoYykgPT4gYy4kQ2FwdGlvbiA9PT0gaW5wdXRWYWx1ZSk7XG4gICAgICAgIGlmICghbW8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9maXJlVmFsdWVDaGFuZ2UobW8pO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2ZpcmVWYWx1ZUNoYW5nZShtbyk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gbW87XG4gICAgICAgIHRoaXMuX3ZhbHVlTW8gPSBtbztcbiAgICAgICAgdGhpcy5fc2V0VmFsdWVUZXh0KHRoaXMudmFsdWUpO1xuICAgICAgICAvLyB0aGlzLl9zZXRDb21ib1RleHQobW8uJENhcHRpb24pO1xuICAgICAgICAvLyB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl90cmlnZ2VyQ2xpY2soJ0l0ZW1TZWxlY3QnLCB0aGlzLnZhbHVlKTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGV4dC5fc2hvd1BvcHVwIHx8IGNvbnRleHQuX3Nob3dEcm9wRG93biA9PT0gZmFsc2U7IGVsc2UgY29tYm9cIj5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleFwiIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBmZC1pbnB1dC1ncm91cC1pbnB1dFxuICAgICAgICAgICAgZmQtZm9ybS1jb250cm9sXG4gICAgICAgICAgICAjaW5wdXRSZWZcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJTZXR0aW5nLk51bGxUZXh0IHx8ICcnXCJcbiAgICAgICAgICAgIFthdHRyLnJlYWRvbmx5XT1cInRydWVcIlxuICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiKGRpc2FibGUkIHwgYXN5bmMpID09PSB0cnVlID8gdHJ1ZSA6IG51bGxcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIiF2YWx1ZSA/ICcnIDogKHZhbHVlIHwgYmJiVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgW3N0eWxlLmRpcmVjdGlvbl09XCJTZXR0aW5nLklzTHRyID09PSB0cnVlID8gJ2x0cicgOiBudWxsXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgZmQtaW5wdXQtZ3JvdXAtYWRkb25cbiAgICAgICAgICAgICpuZ0lmPVwidmFsdWUgJiYgKGRpc2FibGVPclJlYWRvbmx5JCB8IGFzeW5jKSAhPT0gdHJ1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBnbHlwaD1cImRlY2xpbmVcIiAoY2xpY2spPVwib25DbGVhcigpXCI+PC9idXR0b24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWFkZG9uXG4gICAgICAgICAgICAqbmdJZj1cIiF2YWx1ZSAmJiAoZGlzYWJsZU9yUmVhZG9ubHkkIHwgYXN5bmMpICE9PSB0cnVlICYmIFNldHRpbmcuU2hvd05ld0J1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBnbHlwaD1cImFkZFwiIChjbGljayk9XCJvbk5ldygpXCI+PC9idXR0b24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWFkZG9uXG4gICAgICAgICAgICAqbmdJZj1cInZhbHVlICYmIChkaXNhYmxlT3JSZWFkb25seSQgfCBhc3luYykgIT09IHRydWUgJiYgU2V0dGluZy5WaWV3UmVsYXRlZEZvcm1UeXBlID09PSAnU2hvdydcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1pbnB1dC1ncm91cF9fYWRkb24tLWJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b24gZmQtYnV0dG9uIGZkVHlwZT1cInRyYW5zcGFyZW50XCIgZ2x5cGg9XCJlZGl0XCIgKGNsaWNrKT1cIm9uRWRpdCgpXCI+PC9idXR0b24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWFkZG9uXG4gICAgICAgICAgICAqbmdJZj1cInZhbHVlICYmIChkaXNhYmxlT3JSZWFkb25seSQgfCBhc3luYykgIT09IHRydWUgJiYgU2V0dGluZy5WaWV3UmVsYXRlZEZvcm1UeXBlID09PSAnU2hvd1JlYWRPbmx5J1wiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBnbHlwaD1cInNob3dcIiAoY2xpY2spPVwib25FZGl0KClcIj48L2J1dHRvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgZmQtaW5wdXQtZ3JvdXAtYWRkb25cbiAgICAgICAgICAgICpuZ0lmPVwiY29udGV4dC5fc2hvd1BvcHVwICYmICF2YWx1ZSAmJiAoZGlzYWJsZU9yUmVhZG9ubHkkIHwgYXN5bmMpICE9PSB0cnVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2FkZG9uLS1idXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uIGZkLWJ1dHRvbiBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiIGdseXBoPVwic2VhcmNoXCIgKGNsaWNrKT1cIm9uU2VhcmNoKClcIj48L2J1dHRvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjY29tYm8+XG4gICAgPGRpdiBbY2xhc3MuY29udHJvbC1kaXNhYmxlZF09XCJkaXNhYmxlJCB8IGFzeW5jXCIgY2xhc3M9XCJzaW1wbGUtY29tYm8td3JhcHBlclwiPlxuICAgICAgICA8ZmQtY29tYm9ib3hcbiAgICAgICAgICAgICNmZENvbWJvYm94XG4gICAgICAgICAgICBjbGFzcz1cImNvbWJvLW1vLXVsdlwiXG4gICAgICAgICAgICBbY2xhc3MuaGFzLXJlcG9ydF09XCJoYXNSZXBvcnRcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIicnXCJcbiAgICAgICAgICAgIFttb2JpbGVdPVwiKGRldmljZVNpemUkIHwgYXN5bmMpID09PSAncydcIlxuICAgICAgICAgICAgW21vYmlsZUNvbmZpZ109XCJtb2JpbGVDb25maWdcIlxuICAgICAgICAgICAgW2ZpbGxPblNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtyZWFkT25seV09XCIocmVhZG9ubHkkIHwgYXN5bmMpID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoZGlzYWJsZSQgfCBhc3luYykgPT09IHRydWUgPyB0cnVlIDogZmFsc2VcIlxuICAgICAgICAgICAgW2Ryb3Bkb3duVmFsdWVzXT1cIihsb2FkaW5nJCB8IGFzeW5jKSA9PT0gdHJ1ZSB8IG1vSW5mb1Vsdk1vTGlzdDogaXNEYXRhTG9hZGVkRmlyc3RUaW1lOnVsdkFkYXB0ZXI6VWx2VWlcIlxuICAgICAgICAgICAgW2ZpbHRlckZuXT1cImN1c3RvbUZpbHRlclwiXG4gICAgICAgICAgICBbb3Blbk9uS2V5Ym9hcmRFdmVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtpdGVtVGVtcGxhdGVdPVwidGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwidmFsdWVUZXh0IHwgYmJiVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtkaXNwbGF5Rm5dPVwiZGlzcGxheUZ1bmNcIlxuICAgICAgICAgICAgW3Nob3dEcm9wZG93bkJ1dHRvbl09XCIoZGlzYWJsZU9yUmVhZG9ubHkkIHwgYXN5bmMpICE9PSB0cnVlXCJcbiAgICAgICAgICAgIChpbnB1dFRleHRDaGFuZ2UpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvcGVuQ2hhbmdlKT1cIm9uT3BlbkNoYW5nZShmZENvbWJvYm94LCAkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2ZkLWNvbWJvYm94PlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwidmFsdWVcIiBmZC1idXR0b24gZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBnbHlwaD1cImRlY2xpbmVcIiAoY2xpY2spPVwib25DbGVhcigpXCI+PC9idXR0b24+XG4gICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImhhc1JlcG9ydCAmJiAoZGlzYWJsZU9yUmVhZG9ubHkkIHwgYXN5bmMpICE9PSB0cnVlXCJcbiAgICAgICAgICAgIGdseXBoPVwic2VhcmNoXCJcbiAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBjbGFzcz1cImNvbWJvLXBvcHVwLWJ0blwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25TZWFyY2goKVwiXG4gICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtaXRlbT5cbiAgICAgICAgPGRpdiBmZC1saXN0LWNvbnRlbnQgKm5nSWY9XCJpdGVtLiRpc0xvYWRpbmc7IGVsc2Ugc2hvd0l0ZW1cIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDIwcHhcIj5cbiAgICAgICAgICAgIDxic3UtbWFzayBbc2l6ZV09XCIncydcIiBbbWFyZ2luVG9wXT1cIicxMHB4J1wiPjwvYnN1LW1hc2s+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctdGVtcGxhdGUgI3Nob3dJdGVtPlxuICAgICAgICAgICAgPGkgZmQtbGlzdC1pY29uIFtnbHlwaF09XCJpdGVtLiRJY29uXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aXRsZT57e1xuICAgICAgICAgICAgICAgIGl0ZW0uaXNFbXB0eSA/ICgnTm9EYXRhJyB8IGJiYlRyYW5zbGF0ZSkgOiAoaXRlbS4kTW9DYXB0aW9uIHx8IGl0ZW0uJENhcHRpb24gfCBiYmJUcmFuc2xhdGUpXG4gICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
373
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbW8taW5mby11bHYtY29tYm8vdWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbW8taW5mby11bHYtY29tYm8vdWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCx1QkFBdUIsRUFHMUIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsaUJBQWlCLEVBQTJCLE1BQU0sdUJBQXVCLENBQUM7QUFFbkYsT0FBTyxFQUNILGtCQUFrQixFQUNsQixRQUFRLEVBTVIsa0JBQWtCLEVBR2xCLFdBQVcsRUFDZCxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBUTlCLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxrQkFBa0I7SUFOakU7O1FBc0JJLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQWFwQyxlQUFVLEdBQXVCLEVBQUUsQ0FBQztRQUM1QixrQ0FBNkIsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3BELHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDekMsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FB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QUFwQixLQUFLO2dCQUN3QixVQUFVO3NCQUF2QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkF1QjVCLEtBQUs7c0JBREosWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMEo5QixVQUFVO3NCQUFsQixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUlHLEVBQUU7c0JBQVYsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRU4sYUFBYTtzQkFEWixLQUFLO2dCQVNOLFdBQVc7c0JBRFYsS0FBSztnQkFNTixJQUFJO3NCQURILEtBQUs7Z0JBTU4sSUFBSTtzQkFESCxLQUFLO2dCQVNOLElBQUk7c0JBREgsS0FBSztnQkFPTixNQUFNO3NCQURMLEtBQUs7Z0JBTU4sV0FBVztzQkFEVixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBPbkluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRhcCwgdGFrZVVudGlsLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb21ib2JveENvbXBvbmVudCwgQ29tYm9ib3hJdGVtLCBEaWFsb2dSZWYgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xuXG5pbXBvcnQge1xuICAgIEZpZWxkQmFzZUNvbXBvbmVudCxcbiAgICBCYXJzYUFwaSxcbiAgICBSZXBvcnRFeHRyYUluZm8sXG4gICAgTW9Gb3JSZXBvcnRNb2RlbCxcbiAgICBDbGFzc05hbWVzTW9kZWwsXG4gICAgVmlld1R5cGVzLFxuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgUHJldmVudERlZmF1bEV2ZW50LFxuICAgIFBhZ2luZ1NldHRpbmcsXG4gICAgUmVwb3J0Vmlld0NvbHVtbixcbiAgICBnZXRVbmlxdWVJZFxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYnN1LXVpLW1vLWluZm8tdWx2LWNvbWJvJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktbW8taW5mby11bHYtY29tYm8uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VpLW1vLWluZm8tdWx2LWNvbWJvLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVWlNb0luZm9VbHZDb21ib0NvbXBvbmVudCBleHRlbmRzIEZpZWxkQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQElucHV0KCkgdWx2QWRhcHRlcjoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIFNldHRpbmc6IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgICAgIFZpZXc6IFZpZXdUeXBlcztcbiAgICAgICAgICAgIENsYXNzTmFtZXM6IENsYXNzTmFtZXNNb2RlbDtcbiAgICAgICAgICAgIEV4dHJhOiBSZXBvcnRFeHRyYUluZm87XG4gICAgICAgICAgICBEYXRhOiBNb0ZvclJlcG9ydE1vZGVsO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgQElucHV0KCkgQ29udHJvbDogYW55O1xuICAgIEBJbnB1dCgpIFVsdlVpOiBhbnk7XG4gICAgQElucHV0KCkgVWx2TWFpbkN0cmxyOiBhbnk7XG4gICAgQFZpZXdDaGlsZChDb21ib2JveENvbXBvbmVudCkgZmRDb21ib1JlZjogQ29tYm9ib3hDb21wb25lbnQ7XG4gICAgaXNFeHBhbmQ6IGJvb2xlYW47XG4gICAgc21hcnRDaGFuZ2UgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gICAgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgdGlja1JlZjogYW55O1xuICAgIGlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudDtcbiAgICBpc0ZpcnN0TG9hZDogYm9vbGVhbjtcbiAgICBwb3BvdmVyRWxlbWVudDogYW55O1xuICAgIHJhd1ZhbHVlOiBzdHJpbmc7XG4gICAgZm9ybVNlbGVjdGlvbkRpYWxvZzogRGlhbG9nUmVmO1xuICAgIGlzT3BlblNlbGVjdGlvbkRpYWxvZzogYm9vbGVhbjtcbiAgICBoYXNSZXBvcnQ6IGFueTtcbiAgICBvcmlnaW5hbFZhbHVlOiBhbnk7XG4gICAgaXNEYXRhTG9hZGVkRmlyc3RUaW1lOiBib29sZWFuO1xuICAgIHZhbHVlVGV4dDogc3RyaW5nO1xuICAgIGFsbENvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSA9IFtdO1xuICAgIHByaXZhdGUgX29wZW5Qb3B1cEZvcm1TZWxlY3Rpb25Tb3VyY2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgX2Nsb3NlRGlhbG9nU291cmNlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIF9sb2FkaW5nU291cmNlID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIF92YWx1ZU1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbDtcbiAgICBjb21ib2JveElkOiBzdHJpbmc7XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFsdCcsIFsnJGV2ZW50J10pXG4gICAgb25BbHQoZSk6IHZvaWQge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbWJvYm94SWQgPSBnZXRVbmlxdWVJZCgzKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nJCA9IHRoaXMuX2xvYWRpbmdTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xuICAgICAgICB0aGlzLmxvYWRpbmckLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRlZEZpcnN0VGltZSA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMudWx2QWRhcHRlcj8uU2V0dGluZz8uRGF0YT8uTW9EYXRhTGlzdCA9PT0gJ29iamVjdCcgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy5VbHZVaT8uU2V0dGluZz8uRGF0YT8uTW9EYXRhTGlzdCA9PT0gJ29iamVjdCc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNtYXJ0Q2hhbmdlXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDIwMCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCh2YWx1ZSkgPT4gdGhpcy5fZmlsdGVyU21hcnRDaGFuZ2UodmFsdWUpKSxcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIHRhcCgodmFsdWUpID0+ICh0aGlzLnJhd1ZhbHVlID0gdmFsdWUpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdTbWFydENoYW5nZScsIHRoaXMuY29udGV4dCwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX29wZW5Qb3B1cEZvcm1TZWxlY3Rpb25Tb3VyY2VcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Nsb3NlRGlhbG9nU291cmNlKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuVWx2VWkgJiYgIXRoaXMuaXNPcGVuU2VsZWN0aW9uRGlhbG9nICYmIHRoaXMuY29udGV4dC5fc2hvd1BvcHVwKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5fb3BlblBvcHVwRm9ybVNlbGVjdGlvbigpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLm9yaWdpbmFsVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICB0aGlzLmhhc1JlcG9ydCA9IHRoaXMuU2V0dGluZy5SZWxhdGlvblZpZXdUeXBlID09PSAnUmVwb3J0VmlldycgfHwgdGhpcy5TZXR0aW5nLlJlcG9ydE5hbWUgPT09ICdIaWVyYXJjaGljYWwnO1xuICAgICAgICB0aGlzLkNvbnRyb2wgPSB0aGlzO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NldFZhbHVlVGV4dCh0aGlzLnZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIC8vIHRoaXMuX3NldENvbWJvVGV4dCh0aGlzLnZhbHVlKTtcbiAgICB9XG4gICAgb25QYWdpbmdDbGljayhlKTogdm9pZCB7XG4gICAgICAgIFByZXZlbnREZWZhdWxFdmVudChlKTtcbiAgICB9XG4gICAgb25QYWdlQ2hhbmdlKGU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9sb2FkaW5nU291cmNlLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMudWx2QWRhcHRlci5EYXRhQ3RybHIuTW92ZVRvUGFnZShlLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nU291cmNlLm5leHQoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25JdGVtQ2xpY2soZTogQ29tYm9ib3hJdGVtKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTW8gPSBlLml0ZW07XG4gICAgICAgIHRoaXMuX2ZpcmVWYWx1ZUNoYW5nZShzZWxlY3RlZE1vKTtcbiAgICB9XG4gICAgb25QYWdlQ2hhbmdlMihwYWdlU2V0dGluZzogUGFnaW5nU2V0dGluZywgZSk6IHZvaWQge1xuICAgICAgICBQcmV2ZW50RGVmYXVsRXZlbnQoZSk7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdTb3VyY2UubmV4dCh0cnVlKTtcbiAgICAgICAgY29uc3QgdWx2QWRhcHRlciA9IHRoaXMudWx2QWRhcHRlcjtcbiAgICAgICAgY29uc3QgdGVtcDEgPSB1bHZBZGFwdGVyLlNldHRpbmcuRGF0YS5Nb0RhdGFMaXN0O1xuICAgICAgICB0ZW1wMS5zcGxpY2UodGVtcDEubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgIGNvbnN0IG1vRGF0YUxpc3RPbGQgPSBbLi4udGVtcDFdO1xuICAgICAgICBtb0RhdGFMaXN0T2xkLmZvckVhY2goKGMpID0+IChjLiRfX0lzTGFzdCA9IGZhbHNlKSk7XG4gICAgICAgIHRoaXMudWx2QWRhcHRlci5EYXRhQ3RybHIuTW92ZVRvUGFnZShwYWdlU2V0dGluZy5QYWdlICsgMSwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdID0gdWx2QWRhcHRlci5TZXR0aW5nLkRhdGEuTW9EYXRhTGlzdDtcbiAgICAgICAgICAgIG1vRGF0YUxpc3Quc3BsaWNlKDAsIDAsIC4uLm1vRGF0YUxpc3RPbGQpO1xuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ1NvdXJjZS5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG9uT3BlbkNoYW5nZShmZENvbWJvYm94LCBpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXMoKTtcbiAgICAgICAgICAgIC8vIGZkQ29tYm9ib3gub3BlbiA9IGZhbHNlOyAvLyBpdCBjbG9zZSBwb3B1cCB3aGVuIGNsaWNrIG9uIGRyb3Bkb3duIGJ1dHRvbiBpbiBjb21wb25lbnRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0VGV4dCA9IHRoaXMuZmRDb21ib1JlZj8uaW5wdXRUZXh0VmFsdWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMudmFsdWUgJiYgaW5wdXRUZXh0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmFpc2VTbWFydENoYW5nZShpbnB1dFRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG9uSW5wdXRDaGFuZ2UoZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yYWlzZVNtYXJ0Q2hhbmdlKGUpO1xuICAgIH1cbiAgICBvbklucHV0Q2hhbmdlMihlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JhaXNlU21hcnRDaGFuZ2UoZS50YXJnZXQudmFsdWUpO1xuICAgIH1cbiAgICBvblZhbHVlQ2hhbmdlKGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmFpc2VWYWx1ZUNoYW5nZWQoZS50YXJnZXQudmFsdWUpO1xuICAgIH1cbiAgICBvbk5ldygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckNsaWNrKCdOZXcnKTtcbiAgICB9XG4gICAgb25DbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckNsaWNrKCdEZWxldGUnKTtcbiAgICB9XG4gICAgb25FZGl0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90cmlnZ2VyQ2xpY2soJ0VkaXQnKTtcbiAgICB9XG4gICAgb25TZWFyY2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJDbGljaygnUG9wdXAnKTtcbiAgICB9XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBjdXN0b21GaWx0ZXIoY29udGVudDogYW55W10sIHNlYXJjaFRlcm06IHN0cmluZyk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgZGlzcGxheUZ1bmMgPSAob2JqOiBNZXRhb2JqZWN0RGF0YU1vZGVsKSA9PiB7XG4gICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbE5hbWUgPSB0aGlzLmdldEZpcnN0Q29sdW1uTmFtZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9WYWx1ZUNhcHRpb24ob2JqLCBjb2xOYW1lLCBvYmouJENhcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9O1xuICAgIGdldE1vVmFsdWVDYXB0aW9uKHZhbHVlTW86IE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsLCBjb2xOYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHZhbHVlTW8gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNhcHRpb25WYWx1ZU1vO1xuICAgICAgICBjb25zdCBtb2xpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKFxuICAgICAgICAgICAgdGhpcy51bHZBZGFwdGVyLFxuICAgICAgICAgICAgJ1NldHRpbmcuRGF0YS5Nb0RhdGFMaXN0JyxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGZvdW5kZWRNbyA9IG1vbGlzdC5maW5kKChjKSA9PiBjLklkID09PSB2YWx1ZU1vLklkKTtcbiAgICAgICAgaWYgKGNvbE5hbWUgJiYgZm91bmRlZE1vICYmIGZvdW5kZWRNb1tjb2xOYW1lXSkge1xuICAgICAgICAgICAgaWYgKGZvdW5kZWRNb1tjb2xOYW1lICsgJyRDYXB0aW9uJ10pIHtcbiAgICAgICAgICAgICAgICBjYXB0aW9uVmFsdWVNbyA9IGZvdW5kZWRNb1tjb2xOYW1lICsgJyRDYXB0aW9uJ107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvdW5kZWRNb1tjb2xOYW1lXS4kQ2FwdGlvbikge1xuICAgICAgICAgICAgICAgIGNhcHRpb25WYWx1ZU1vID0gZm91bmRlZE1vW2NvbE5hbWVdLiRDYXB0aW9uO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYXB0aW9uVmFsdWVNbyA9IGZvdW5kZWRNb1tjb2xOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYmJiUGlwZS50cmFuc2Zvcm0oY2FwdGlvblZhbHVlTW8gfHwgZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gICAgZ2V0Rmlyc3RDb2x1bW5OYW1lKCkge1xuICAgICAgICBsZXQgY29sTmFtZSA9ICckQ2FwdGlvbic7XG4gICAgICAgIGlmICh0aGlzLlVsdk1haW5DdHJsciAmJiB0aGlzLlVsdk1haW5DdHJscj8uRGQ/LlNldHRpbmc/LlZpZXcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLlVsdk1haW5DdHJsci5EZC5TZXR0aW5nLlZpZXcuQ29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Q29sID0gdGhpcy5VbHZNYWluQ3RybHIuRGQuU2V0dGluZy5WaWV3LkNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKGMpID0+ICFjLk5hbWUuc3RhcnRzV2l0aCgnJCcpICYmIGMuTmFtZSAhPT0gJ0lkJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0Q29sPy5OYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbE5hbWUgPSBmaXJzdENvbC5OYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIElzRXhwYW5kZWQgPSAodHlwZSkgPT4gZmFsc2U7XG4gICAgLy8gcmV0dXJuIHRoaXMuY29tYm9SZWYubmF0aXZlRWxlbWVudC5yZXNwb25zaXZlUG9wb3Zlci5pc09wZW4oKTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIENvbGxhcHNlID0gKHR5cGUpID0+IHt9O1xuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgQElucHV0KCkgRXhwYW5kID0gKHR5cGUpID0+IHtcbiAgICAgICAgdGhpcy51bHZBZGFwdGVyID0gdGhpcy5VbHZNYWluQ3RybHJbdHlwZV07XG4gICAgfTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIG9uID0gKCkgPT4ge307XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBASW5wdXQoKSBGb2N1cyA9ICgpID0+IHt9O1xuICAgIEBJbnB1dCgpXG4gICAgU2V0VWx2QWRhcHRlciA9ICh0eXBlLCB1bHZBZGFwdGVyKSA9PiB7XG4gICAgICAgIHRoaXMudWx2QWRhcHRlciA9IHVsdkFkYXB0ZXI7XG4gICAgICAgIGlmICh1bHZBZGFwdGVyPy5TZXR0aW5nPy5WaWV3Py5Db2x1bW5zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYWxsQ29sdW1ucyA9IHVsdkFkYXB0ZXIuU2V0dGluZy5WaWV3LkNvbHVtbnMuZmlsdGVyKChjKSA9PiBjLk1ldGFGaWVsZFR5cGVJZCA+IDApO1xuICAgICAgICB9XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgfTtcbiAgICBASW5wdXQoKVxuICAgIElzVWlDcmVhdGVkID0gKHR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgfTtcbiAgICBASW5wdXQoKVxuICAgIE1hc2sgPSAodHlwZSkgPT4ge1xuICAgICAgICB0aGlzLl9sb2FkaW5nU291cmNlLm5leHQodHJ1ZSk7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgfTtcbiAgICBASW5wdXQoKVxuICAgIGhpZGUgPSAodHlwZSkgPT4ge1xuICAgICAgICAvLyB0aGlzLnRyaWdnZXJDbGljaygnTm9ybWFsJyk7XG4gICAgICAgIGlmICh0aGlzLmZvcm1TZWxlY3Rpb25EaWFsb2cpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVNlbGVjdGlvbkRpYWxvZy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgfTtcbiAgICBASW5wdXQoKVxuICAgIHNob3cgPSAodHlwZSkgPT4ge1xuICAgICAgICAvLyB0aGlzLnRyaWdnZXJDbGljaygnTm9ybWFsJyk7XG4gICAgICAgIHRoaXMuX29wZW5Qb3B1cEZvcm1TZWxlY3Rpb25Tb3VyY2UubmV4dCgpOyAvLyByYWJldGUgdGFraSBnZW5lcmFsIGluZm8gLnBvcHVwIGJheiBtaXNob2Qga2UgYmFpYWQgZHJvcGRvd24gYmFzaGUuXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgfTtcbiAgICBASW5wdXQoKVxuICAgIFVubWFzayA9ICh0eXBlKSA9PiB7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdTb3VyY2UubmV4dChmYWxzZSk7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgfTtcbiAgICBASW5wdXQoKVxuICAgIGdldFJhd1ZhbHVlID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yYXdWYWx1ZTtcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICB9O1xuICAgIHByb3RlY3RlZCBfc2V0VmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRWYWx1ZVRleHQodmFsdWUpO1xuICAgICAgICBzdXBlci5fc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICAvLyB0aGlzLl9zZXRDb21ib1RleHQodmFsdWUpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldFZhbHVlVGV4dCh2YWx1ZSk6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWVNbyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhbHVlVGV4dCA9IHRoaXMuX2dldFZhbHVlVGV4dCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX3NldENvbWJvVGV4dCh0aGlzLnZhbHVlVGV4dCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfZ2V0VmFsdWVUZXh0KHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLiRDYXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnICYmIHZhbHVlICYmIHRoaXMuVWx2TWFpbkN0cmxyICYmIHRoaXMuVWx2TWFpbkN0cmxyLkRkKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy5VbHZNYWluQ3RybHIuRGQuU2V0dGluZy5WaWV3O1xuICAgICAgICAgICAgbGV0IGNvbE5hbWUgPSAnJENhcHRpb24nO1xuICAgICAgICAgICAgaWYgKHZpZXcuQ29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Q29sID0gdmlldy5Db2x1bW5zLmZpbmQoKGMpID0+ICFjLk5hbWUuc3RhcnRzV2l0aCgnJCcpICYmIGMuTmFtZSAhPT0gJ0lkJyk7XG4gICAgICAgICAgICAgICAgY29sTmFtZSA9IGZpcnN0Q29sPy5OYW1lID8gZmlyc3RDb2wuTmFtZSA6ICckQ2FwdGlvbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRNb1ZhbHVlQ2FwdGlvbih0aGlzLl92YWx1ZU1vLCBjb2xOYW1lLCB0aGlzLnZhbHVlVGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXRDb21ib1RleHQodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICAvLyBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyB0aGlzLl92YWx1ZU1vID0gbnVsbDtcbiAgICAgICAgLy90aGlzLmZkQ29tYm9SZWYuaW5wdXRUZXh0VmFsdWUgPSAnJztcbiAgICAgICAgLy90aGlzLmZkQ29tYm9SZWYuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgLy8gfVxuICAgICAgICBjb25zdCBmZENvbWJvUmVmID0gdGhpcy5mZENvbWJvUmVmO1xuICAgICAgICBjb25zdCBpbnB1dFRleHQgPSBmZENvbWJvUmVmPy5pbnB1dFRleHRWYWx1ZTtcbiAgICAgICAgaWYgKGZkQ29tYm9SZWYgJiYgdmFsdWUgIT0gaW5wdXRUZXh0KSB7XG4gICAgICAgICAgICBjb25zdCBVbHZNYWluQ3RybHIgPSB0aGlzLlVsdk1haW5DdHJscjtcbiAgICAgICAgICAgIGlmIChVbHZNYWluQ3RybHIgJiYgVWx2TWFpbkN0cmxyLkRkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmlldyA9IFVsdk1haW5DdHJsci5EZC5TZXR0aW5nLlZpZXc7XG4gICAgICAgICAgICAgICAgbGV0IGNvbE5hbWUgPSAnJENhcHRpb24nO1xuICAgICAgICAgICAgICAgIGlmICh2aWV3LkNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RDb2wgPSB2aWV3LkNvbHVtbnMuZmluZCgoYykgPT4gIWMuTmFtZS5zdGFydHNXaXRoKCckJykgJiYgYy5OYW1lICE9PSAnSWQnKTtcbiAgICAgICAgICAgICAgICAgICAgY29sTmFtZSA9IGZpcnN0Q29sPy5OYW1lID8gZmlyc3RDb2wuTmFtZSA6ICckQ2FwdGlvbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRNb1ZhbHVlQ2FwdGlvbih0aGlzLl92YWx1ZU1vLCBjb2xOYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmZENvbWJvUmVmLmlucHV0VGV4dCA9IHZhbHVlID8gdGhpcy5fYmJiUGlwZS50cmFuc2Zvcm0odmFsdWUpICsgJycgOiAnJztcbiAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIF9vcGVuUG9wdXBGb3JtU2VsZWN0aW9uKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLmlzT3BlblNlbGVjdGlvbkRpYWxvZyA9IHRydWU7XG4gICAgICAgIHRoaXMuVWx2VWkudmlld2VyQ29udHJvbC5TaG93T2tDYW5jZWxCdXR0b25zID0gdHJ1ZTsgLy8gdGhpcyBpcyB1c2VmdWwgdG8gdWx2IG1hbmFnZSB0b29sYmFyIGJ1dHRvbnMuZm9yIGV4YW1wbGUgbW92ZSBpbiB0cmVlIGRvZXMgbm90IHNob3duXG4gICAgICAgIHRoaXMuZm9ybVNlbGVjdGlvbkRpYWxvZyA9IEJhcnNhQXBpLkJ3LlVsdkZvcm1NdWx0aVNlbGVjdC5TaG93KHRoaXMuY29udGV4dCwge1xuICAgICAgICAgICAgdWx2MTogdGhpcy5VbHZVaSxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLl9iYmJQaXBlLnRyYW5zZm9ybSgnU2VsZWN0JyksXG4gICAgICAgICAgICBJc0xvYWRlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzT3BlblNlbGVjdGlvbkRpYWxvZyA9IGZhbHNlO1xuICAgICAgICB9LCA1MDApO1xuICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfZmlsdGVyU21hcnRDaGFuZ2UodmFsdWUpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGNhblJlcXVlc3QgPSB0aGlzLnVsdkFkYXB0ZXIgJiYgdmFsdWUgIT09IHRoaXMudmFsdWU7XG4gICAgICAgIGlmIChjYW5SZXF1ZXN0KSB7XG4gICAgICAgICAgICBjb25zdCBtb2xpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKFxuICAgICAgICAgICAgICAgIHRoaXMudWx2QWRhcHRlcixcbiAgICAgICAgICAgICAgICAnU2V0dGluZy5EYXRhLk1vRGF0YUxpc3QnLFxuICAgICAgICAgICAgICAgIFtdXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFtb2xpc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbE5hbWUgPSB0aGlzLmdldEZpcnN0Q29sdW1uTmFtZSgpO1xuXG4gICAgICAgICAgICBjb25zdCBmaW5kTW8gPSBtb2xpc3QuZmluZCgobW8pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYXB0aW9uID0gdGhpcy5nZXRNb1ZhbHVlQ2FwdGlvbihtbywgY29sTmFtZSwgbW8uJENhcHRpb24pO1xuICAgICAgICAgICAgICAgIHJldHVybiBjYXB0aW9uID09PSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGZpbmRNbykge1xuICAgICAgICAgICAgICAgIGNhblJlcXVlc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvL3RoaXMuX2ZpcmVWYWx1ZUNoYW5nZShmaW5kTW8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5SZXF1ZXN0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJDbGljaygnTm9ybWFsJyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9yYWlzZVNtYXJ0Q2hhbmdlKHZhbHVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc21hcnRDaGFuZ2UubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF90cmlnZ2VyQ2xpY2soZXZlbnROYW1lLCB2YWx1ZSA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnVHJpZ2dlckNsaWNrJywgdGhpcy5jb250ZXh0LCBldmVudE5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3JhaXNlVmFsdWVDaGFuZ2VkKGNhcHRpb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGNhcHRpb247XG4gICAgICAgIGNvbnN0IG1vbGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXG4gICAgICAgICAgICB0aGlzLnVsdkFkYXB0ZXIsXG4gICAgICAgICAgICAnU2V0dGluZy5EYXRhLk1vRGF0YUxpc3QnLFxuICAgICAgICAgICAgW11cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFtb2xpc3QgfHwgbW9saXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vY29uc3QgY29sTmFtZSA9IHRoaXMuZ2V0Rmlyc3RDb2x1bW5OYW1lKCk7XG5cbiAgICAgICAgY29uc3QgbW8gPSBtb2xpc3QuZmluZCgoYykgPT4gYy4kQ2FwdGlvbiA9PT0gaW5wdXRWYWx1ZSk7XG4gICAgICAgIGlmICghbW8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9maXJlVmFsdWVDaGFuZ2UobW8pO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2ZpcmVWYWx1ZUNoYW5nZShtbyk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gbW87XG4gICAgICAgIHRoaXMuX3ZhbHVlTW8gPSBtbztcbiAgICAgICAgdGhpcy5fc2V0VmFsdWVUZXh0KHRoaXMudmFsdWUpO1xuICAgICAgICAvLyB0aGlzLl9zZXRDb21ib1RleHQobW8uJENhcHRpb24pO1xuICAgICAgICAvLyB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl90cmlnZ2VyQ2xpY2soJ0l0ZW1TZWxlY3QnLCB0aGlzLnZhbHVlKTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgY29udGV4dC5fc2hvd1BvcHVwIHx8IGNvbnRleHQuX3Nob3dEcm9wRG93biA9PT0gZmFsc2UgPyBpbnB1dFRlbXBsYXRlIDogY29tYm9UZW1wbGF0ZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgJGltcGxpY2l0OiAobG9hZGluZyQgfCBhc3luYykgPT09IHRydWUgfCBtb0luZm9VbHZNb0xpc3Q6IGlzRGF0YUxvYWRlZEZpcnN0VGltZTp1bHZBZGFwdGVyOlVsdlVpLFxuICAgICAgICAgICAgZGV2aWNlU2l6ZTogZGV2aWNlU2l6ZSQgfCBhc3luYyxcbiAgICAgICAgICAgIGRpc2FibGVPclJlYWRvbmx5OiBkaXNhYmxlT3JSZWFkb25seSQgfCBhc3luYyxcbiAgICAgICAgICAgIGRpc2FibGU6IGRpc2FibGUkIHwgYXN5bmMsXG4gICAgICAgICAgICByZWFkb25seTogcmVhZG9ubHkkIHwgYXN5bmNcbiAgICAgICAgfVxuICAgIFwiXG4+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZVxuICAgICNpbnB1dFRlbXBsYXRlXG4gICAgbGV0LWRldmljZVNpemU9XCJkZXZpY2VTaXplXCJcbiAgICBsZXQtZGlzYWJsZU9yUmVhZG9ubHk9XCJkaXNhYmxlT3JSZWFkb25seVwiXG4gICAgbGV0LWRpc2FibGU9XCJkaXNhYmxlXCJcbiAgICBsZXQtcmVhZG9ubHk9XCJyZWFkb25seVwiXG4+XG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXhcIiBjbGFzcz1cImZkLWlucHV0LWdyb3VwXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgZmQtaW5wdXQtZ3JvdXAtaW5wdXRcbiAgICAgICAgICAgIGZkLWZvcm0tY29udHJvbFxuICAgICAgICAgICAgI2lucHV0UmVmXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiU2V0dGluZy5OdWxsVGV4dCB8fCAnJ1wiXG4gICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGUgPT09IHRydWUgPyB0cnVlIDogbnVsbFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiIXZhbHVlID8gJycgOiAodmFsdWUgfCBiYmJUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICAgICBbc3R5bGUuZGlyZWN0aW9uXT1cIlNldHRpbmcuSXNMdHIgPT09IHRydWUgPyAnbHRyJyA6IG51bGxcIlxuICAgICAgICAgICAgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuIGZkLWlucHV0LWdyb3VwLWFkZG9uICpuZ0lmPVwidmFsdWUgJiYgZGlzYWJsZU9yUmVhZG9ubHkgIT09IHRydWVcIiBjbGFzcz1cImZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGZkLWJ1dHRvbiBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiIGdseXBoPVwiZGVjbGluZVwiIChjbGljayk9XCJvbkNsZWFyKClcIj48L2J1dHRvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgZmQtaW5wdXQtZ3JvdXAtYWRkb25cbiAgICAgICAgICAgICpuZ0lmPVwiIXZhbHVlICYmIGRpc2FibGVPclJlYWRvbmx5ICE9PSB0cnVlICYmIFNldHRpbmcuU2hvd05ld0J1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBnbHlwaD1cImFkZFwiIChjbGljayk9XCJvbk5ldygpXCI+PC9idXR0b24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWFkZG9uXG4gICAgICAgICAgICAqbmdJZj1cInZhbHVlICYmIGRpc2FibGVPclJlYWRvbmx5ICE9PSB0cnVlICYmIFNldHRpbmcuVmlld1JlbGF0ZWRGb3JtVHlwZSA9PT0gJ1Nob3cnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2FkZG9uLS1idXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uIGZkLWJ1dHRvbiBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiIGdseXBoPVwiZWRpdFwiIChjbGljayk9XCJvbkVkaXQoKVwiPjwvYnV0dG9uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICBmZC1pbnB1dC1ncm91cC1hZGRvblxuICAgICAgICAgICAgKm5nSWY9XCJ2YWx1ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZSAmJiBTZXR0aW5nLlZpZXdSZWxhdGVkRm9ybVR5cGUgPT09ICdTaG93UmVhZE9ubHknXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2FkZG9uLS1idXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uIGZkLWJ1dHRvbiBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiIGdseXBoPVwic2hvd1wiIChjbGljayk9XCJvbkVkaXQoKVwiPjwvYnV0dG9uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICBmZC1pbnB1dC1ncm91cC1hZGRvblxuICAgICAgICAgICAgKm5nSWY9XCJjb250ZXh0Ll9zaG93UG9wdXAgJiYgIXZhbHVlICYmIGRpc2FibGVPclJlYWRvbmx5ICE9PSB0cnVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2FkZG9uLS1idXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uIGZkLWJ1dHRvbiBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiIGdseXBoPVwic2VhcmNoXCIgKGNsaWNrKT1cIm9uU2VhcmNoKClcIj48L2J1dHRvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICAgI2NvbWJvVGVtcGxhdGVcbiAgICBsZXQtbW9EYXRhTGlzdFxuICAgIGxldC1kZXZpY2VTaXplPVwiZGV2aWNlU2l6ZVwiXG4gICAgbGV0LWRpc2FibGVPclJlYWRvbmx5PVwiZGlzYWJsZU9yUmVhZG9ubHlcIlxuICAgIGxldC1kaXNhYmxlPVwiZGlzYWJsZVwiXG4gICAgbGV0LXJlYWRvbmx5PVwicmVhZG9ubHlcIlxuPlxuICAgIDxkaXYgW2NsYXNzLmNvbnRyb2wtZGlzYWJsZWRdPVwiZGlzYWJsZVwiIGNsYXNzPVwic2ltcGxlLWNvbWJvLXdyYXBwZXJcIj5cbiAgICAgICAgPGZkLWNvbWJvYm94XG4gICAgICAgICAgICAjZmRDb21ib2JveFxuICAgICAgICAgICAgY2xhc3M9XCJjb21iby1tby11bHZcIlxuICAgICAgICAgICAgW2NvbWJvYm94SWRdPVwiY29tYm9ib3hJZFwiXG4gICAgICAgICAgICBbY2xhc3MuaGFzLXJlcG9ydF09XCJoYXNSZXBvcnRcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIicnXCJcbiAgICAgICAgICAgIFttb2JpbGVdPVwiZGV2aWNlU2l6ZSA9PT0gJ3MnXCJcbiAgICAgICAgICAgIFttb2JpbGVDb25maWddPVwibW9iaWxlQ29uZmlnXCJcbiAgICAgICAgICAgIFtmaWxsT25TZWxlY3RdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcmVhZE9ubHldPVwicmVhZG9ubHkgPT09IHRydWUgPyB0cnVlIDogZmFsc2VcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGUgPT09IHRydWUgPyB0cnVlIDogZmFsc2VcIlxuICAgICAgICAgICAgW2Ryb3Bkb3duVmFsdWVzXT1cIm1vRGF0YUxpc3RcIlxuICAgICAgICAgICAgW2ZpbHRlckZuXT1cImN1c3RvbUZpbHRlclwiXG4gICAgICAgICAgICBbb3Blbk9uS2V5Ym9hcmRFdmVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtieWxpbmVdPVwiYWxsQ29sdW1ucy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgIFtpdGVtVGVtcGxhdGVdPVwiaXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInZhbHVlVGV4dCB8IGJiYlRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbZGlzcGxheUZuXT1cImRpc3BsYXlGdW5jXCJcbiAgICAgICAgICAgIFtzaG93RHJvcGRvd25CdXR0b25dPVwiZGlzYWJsZU9yUmVhZG9ubHkgIT09IHRydWVcIlxuICAgICAgICAgICAgKGl0ZW1DbGlja2VkKT1cIm9uSXRlbUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgKGlucHV0VGV4dENoYW5nZSk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKG9wZW5DaGFuZ2UpPVwib25PcGVuQ2hhbmdlKGZkQ29tYm9ib3gsICRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvZmQtY29tYm9ib3g+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidmFsdWUgJiYgZGlzYWJsZU9yUmVhZG9ubHkgIT09IHRydWVcIlxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBnbHlwaD1cImRlY2xpbmVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xlYXIoKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiaGFzUmVwb3J0ICYmIGRpc2FibGVPclJlYWRvbmx5ICE9PSB0cnVlXCJcbiAgICAgICAgICAgIGdseXBoPVwic2VhcmNoXCJcbiAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBjbGFzcz1cImNvbWJvLXBvcHVwLWJ0blwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25TZWFyY2goKVwiXG4gICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNpdGVtVGVtcGxhdGUgbGV0LWl0ZW0+XG4gICAgICAgIDxkaXYgZmQtbGlzdC1jb250ZW50ICpuZ0lmPVwiaXRlbS4kaXNMb2FkaW5nOyBlbHNlIGl0ZW1XcmFwcGVyXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAyMHB4XCI+XG4gICAgICAgICAgICA8YnN1LW1hc2sgW3NpemVdPVwiJ3MnXCIgW21hcmdpblRvcF09XCInMTBweCdcIj48L2JzdS1tYXNrPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNpdGVtV3JhcHBlcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLiRMb2FkTW9yZTsgZWxzZSBzaG93SXRlbVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGJzdS11bHYtcGFnaW5nXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblBhZ2luZ0NsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtwYWdpbmdTZXR0aW5nXT1cInVsdkFkYXB0ZXIuU2V0dGluZy5EYXRhLlBhZ2luZ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvYnN1LXVsdi1wYWdpbmc+IC0tPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidWx2QWRhcHRlci5TZXR0aW5nLkRhdGEuUGFnaW5nLlBhZ2UgKyAxIDwgdWx2QWRhcHRlci5TZXR0aW5nLkRhdGEuUGFnaW5nLlRvdGFsUGFnZXNcIlxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUGFnZUNoYW5nZTIodWx2QWRhcHRlci5TZXR0aW5nLkRhdGEuUGFnaW5nLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidNb3JlJyB8IGJiYlRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hvd0l0ZW0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWxsQ29sdW1ucz8ubGVuZ3RoOyBlbHNlIGNhcHRpb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXRlbS4kX19Jc0xhc3RcIiBjbGFzcz1cIm1vaW5mb3VsdiBkZXZpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aHVtYm5haWwgKm5nSWY9XCJpdGVtLiRJY29uXCI+PGZkLWljb24gW2dseXBoXT1cIml0ZW0uJEljb25cIj48L2ZkLWljb24+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxkaXYgZmQtbGlzdC1jb250ZW50IGNsYXNzPVwibW9pbmZvdWx2IGhhc0NvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmZC1saXN0LXRpdGxlIGNsYXNzPVwidGl0bGVcIj57eyBhbGxDb2x1bW5zWzBdLkFsaWFzIHwgcnZhbDogaXRlbTphbGxDb2x1bW5zOnRydWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmZC1saXN0LWJ5bGluZSBjbGFzcz1cImJ5bGluZVwiICpuZ0lmPVwiYWxsQ29sdW1uc1sxXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgYWxsQ29sdW1uc1sxXS5BbGlhcyB8IHJ2YWw6IGl0ZW06YWxsQ29sdW1uczp0cnVlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgY29sdW1uLWdhcDogOHB4OyBmbGV4LXdyYXA6IHdyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBhbGxDb2x1bW5zOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbmRleCA+IDFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5BbGlhcyB8IHJ2YWw6IGl0ZW06YWxsQ29sdW1uczp0cnVlIGFzIHZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgY29sdW1uLkFsaWFzIH19Ont7IHZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjYXB0aW9uVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aXRsZT57e1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmlzRW1wdHkgPyAoJ05vRGF0YScgfCBiYmJUcmFuc2xhdGUpIDogKGl0ZW0uJE1vQ2FwdGlvbiB8fCBpdGVtLiRDYXB0aW9uIHwgYmJiVHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -6,9 +6,17 @@ import * as i2 from "@angular/forms";
6
6
  import * as i3 from "@fundamental-ngx/core/form";
7
7
  import * as i4 from "@fundamental-ngx/core/radio";
8
8
  export class UiRadioGroupComponent extends DeviceInfoFieldBaseComponent {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.isVertically = false;
12
+ this.onlyInMobileVertically = false;
13
+ }
9
14
  ngOnInit() {
10
15
  super.ngOnInit();
16
+ const parameters = this.parameters;
11
17
  this.value = this.context.items.find((c) => c.inputValue === this.value);
18
+ this.onlyInMobileVertically = parameters?.OnlyInMobileVertically;
19
+ this.isVertically = parameters?.IsVertically;
12
20
  }
13
21
  onRadioClicked(item) {
14
22
  this.value = item;
@@ -16,9 +24,9 @@ export class UiRadioGroupComponent extends DeviceInfoFieldBaseComponent {
16
24
  }
17
25
  }
18
26
  UiRadioGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiRadioGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
19
- UiRadioGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiRadioGroupComponent, selector: "bsu-ui-radio-group", usesInheritance: true, ngImport: i0, template: "<fd-form-group [isInline]=\"true\">\n <ng-container *ngFor=\"let item of context.items; let i = index; let first = first\">\n <div fd-form-item>\n <fd-radio-button\n *ngIf=\"!item.IsEmpty\"\n [value]=\"item.inputValue\"\n [id]=\"'radio-' + id + i\"\n [name]=\"'radio' + id + i\"\n [disabled]=\"(disableOrReadonly$ | async)!!\"\n [ngModel]=\"value?.inputValue\"\n (click)=\"onRadioClicked(item)\"\n >\n {{ item.boxLabel }}\n </fd-radio-button>\n </div>\n </ng-container>\n</fd-form-group>\n", styles: [""], 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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: i3.FormGroupComponent, selector: "fd-form-group", inputs: ["isInline"] }, { kind: "component", type: i4.RadioButtonComponent, selector: "fd-radio-button", inputs: ["ariaLabel", "ariaLabelledBy", "ariaDescribedBy", "title", "tabIndex", "state", "disabled", "selectedValue", "name", "id", "value", "required"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
27
+ UiRadioGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiRadioGroupComponent, selector: "bsu-ui-radio-group", usesInheritance: true, ngImport: i0, template: "<fd-form-group [isInline]=\"!isVertically && !(isMobileDevice && onlyInMobileVertically)\">\n <ng-container *ngFor=\"let item of context.items; let i = index; let first = first\">\n <div fd-form-item>\n <fd-radio-button\n *ngIf=\"!item.IsEmpty\"\n [value]=\"item.inputValue\"\n [id]=\"'radio-' + id + i\"\n [name]=\"'radio' + id + i\"\n [disabled]=\"(disableOrReadonly$ | async)!!\"\n [ngModel]=\"value?.inputValue\"\n (click)=\"onRadioClicked(item)\"\n >\n {{ item.boxLabel }}\n </fd-radio-button>\n </div>\n </ng-container>\n</fd-form-group>\n", styles: [""], 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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: i3.FormGroupComponent, selector: "fd-form-group", inputs: ["isInline"] }, { kind: "component", type: i4.RadioButtonComponent, selector: "fd-radio-button", inputs: ["ariaLabel", "ariaLabelledBy", "ariaDescribedBy", "title", "tabIndex", "state", "disabled", "selectedValue", "name", "id", "value", "required"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
20
28
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiRadioGroupComponent, decorators: [{
21
29
  type: Component,
22
- args: [{ selector: 'bsu-ui-radio-group', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-form-group [isInline]=\"true\">\n <ng-container *ngFor=\"let item of context.items; let i = index; let first = first\">\n <div fd-form-item>\n <fd-radio-button\n *ngIf=\"!item.IsEmpty\"\n [value]=\"item.inputValue\"\n [id]=\"'radio-' + id + i\"\n [name]=\"'radio' + id + i\"\n [disabled]=\"(disableOrReadonly$ | async)!!\"\n [ngModel]=\"value?.inputValue\"\n (click)=\"onRadioClicked(item)\"\n >\n {{ item.boxLabel }}\n </fd-radio-button>\n </div>\n </ng-container>\n</fd-form-group>\n" }]
30
+ args: [{ selector: 'bsu-ui-radio-group', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-form-group [isInline]=\"!isVertically && !(isMobileDevice && onlyInMobileVertically)\">\n <ng-container *ngFor=\"let item of context.items; let i = index; let first = first\">\n <div fd-form-item>\n <fd-radio-button\n *ngIf=\"!item.IsEmpty\"\n [value]=\"item.inputValue\"\n [id]=\"'radio-' + id + i\"\n [name]=\"'radio' + id + i\"\n [disabled]=\"(disableOrReadonly$ | async)!!\"\n [ngModel]=\"value?.inputValue\"\n (click)=\"onRadioClicked(item)\"\n >\n {{ item.boxLabel }}\n </fd-radio-button>\n </div>\n </ng-container>\n</fd-form-group>\n" }]
23
31
  }] });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktcmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcmFkaW8tZ3JvdXAvdWktcmFkaW8tZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcmFkaW8tZ3JvdXAvdWktcmFkaW8tZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBT3pFLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSw0QkFBNEI7SUFDbkUsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFJO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7a0hBVFEscUJBQXFCO3NHQUFyQixxQkFBcUIsaUZDUmxDLHdwQkFpQkE7MkZEVGEscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNJLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9kZXZpY2UtaW5mby1maWVsZC1iYXNlJztcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JzdS11aS1yYWRpby1ncm91cCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktcmFkaW8tZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vdWktcmFkaW8tZ3JvdXAuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaVJhZGlvR3JvdXBDb21wb25lbnQgZXh0ZW5kcyBEZXZpY2VJbmZvRmllbGRCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY29udGV4dC5pdGVtcy5maW5kKChjKSA9PiBjLmlucHV0VmFsdWUgPT09IHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUmFkaW9DbGlja2VkKGl0ZW0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gaXRlbTtcclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoaXRlbSk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGZkLWZvcm0tZ3JvdXAgW2lzSW5saW5lXT1cInRydWVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbnRleHQuaXRlbXM7IGxldCBpID0gaW5kZXg7IGxldCBmaXJzdCA9IGZpcnN0XCI+XG4gICAgICAgIDxkaXYgZmQtZm9ybS1pdGVtPlxuICAgICAgICAgICAgPGZkLXJhZGlvLWJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWl0ZW0uSXNFbXB0eVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0uaW5wdXRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgW2lkXT1cIidyYWRpby0nICsgaWQgKyBpXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCIncmFkaW8nICsgaWQgKyBpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGRpc2FibGVPclJlYWRvbmx5JCB8IGFzeW5jKSEhXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ2YWx1ZT8uaW5wdXRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmFkaW9DbGlja2VkKGl0ZW0pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLmJveExhYmVsIH19XG4gICAgICAgICAgICA8L2ZkLXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2ZkLWZvcm0tZ3JvdXA+XG4iXX0=
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktcmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcmFkaW8tZ3JvdXAvdWktcmFkaW8tZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcmFkaW8tZ3JvdXAvdWktcmFkaW8tZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBT3pFLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSw0QkFBNEI7SUFOdkU7O1FBT0ksaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO0tBYWxDO0lBWkcsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxFQUFFLHNCQUFzQixDQUFDO1FBQ2pFLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxFQUFFLFlBQVksQ0FBQztJQUNqRCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQUk7UUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDOztrSEFkUSxxQkFBcUI7c0dBQXJCLHFCQUFxQixpRkNSbEMsZ3RCQWlCQTsyRkRUYSxxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0ksb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9kZXZpY2UtaW5mby1maWVsZC1iYXNlJztcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYnN1LXVpLXJhZGlvLWdyb3VwJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktcmFkaW8tZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VpLXJhZGlvLWdyb3VwLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVWlSYWRpb0dyb3VwQ29tcG9uZW50IGV4dGVuZHMgRGV2aWNlSW5mb0ZpZWxkQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgaXNWZXJ0aWNhbGx5ID0gZmFsc2U7XG4gICAgb25seUluTW9iaWxlVmVydGljYWxseSA9IGZhbHNlO1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0gdGhpcy5wYXJhbWV0ZXJzO1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5jb250ZXh0Lml0ZW1zLmZpbmQoKGMpID0+IGMuaW5wdXRWYWx1ZSA9PT0gdGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMub25seUluTW9iaWxlVmVydGljYWxseSA9IHBhcmFtZXRlcnM/Lk9ubHlJbk1vYmlsZVZlcnRpY2FsbHk7XG4gICAgICAgIHRoaXMuaXNWZXJ0aWNhbGx5ID0gcGFyYW1ldGVycz8uSXNWZXJ0aWNhbGx5O1xuICAgIH1cblxuICAgIG9uUmFkaW9DbGlja2VkKGl0ZW0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGl0ZW07XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChpdGVtKTtcbiAgICB9XG59XG4iLCI8ZmQtZm9ybS1ncm91cCBbaXNJbmxpbmVdPVwiIWlzVmVydGljYWxseSAmJiAhKGlzTW9iaWxlRGV2aWNlICYmIG9ubHlJbk1vYmlsZVZlcnRpY2FsbHkpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb250ZXh0Lml0ZW1zOyBsZXQgaSA9IGluZGV4OyBsZXQgZmlyc3QgPSBmaXJzdFwiPlxuICAgICAgICA8ZGl2IGZkLWZvcm0taXRlbT5cbiAgICAgICAgICAgIDxmZC1yYWRpby1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFpdGVtLklzRW1wdHlcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLmlucHV0VmFsdWVcIlxuICAgICAgICAgICAgICAgIFtpZF09XCIncmFkaW8tJyArIGlkICsgaVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiJ3JhZGlvJyArIGlkICsgaVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIihkaXNhYmxlT3JSZWFkb25seSQgfCBhc3luYykhIVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwidmFsdWU/LmlucHV0VmFsdWVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJhZGlvQ2xpY2tlZChpdGVtKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgaXRlbS5ib3hMYWJlbCB9fVxuICAgICAgICAgICAgPC9mZC1yYWRpby1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9mZC1mb3JtLWdyb3VwPlxuIl19