@seniorsistemas/data-seniorx-core 2.0.1 → 2.1.0
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.
- package/core/config/dynamic-view-builder.config.d.ts +3 -0
- package/core/constants/dynamic-view-builder.const.d.ts +15 -0
- package/core/constants/picklist.const.d.ts +4 -0
- package/core/constants/timeline.const.d.ts +6 -0
- package/core/types/confirm.type.d.ts +1 -0
- package/core/types/dynamic-view-builder.type.d.ts +130 -0
- package/core/types/row-card.type.d.ts +10 -0
- package/core/types/timeline.type.d.ts +22 -0
- package/esm2022/core/config/dynamic-view-builder.config.mjs +396 -0
- package/esm2022/core/config/row-card.type.config.mjs +2 -1
- package/esm2022/core/constants/dynamic-view-builder.const.mjs +24 -0
- package/esm2022/core/constants/picklist.const.mjs +5 -1
- package/esm2022/core/constants/timeline.const.mjs +6 -0
- package/esm2022/core/handlers/sqlFormatter.mjs +3 -2
- package/esm2022/core/types/confirm.type.mjs +1 -1
- package/esm2022/core/types/dynamic-view-builder.type.mjs +2 -0
- package/esm2022/core/types/row-card.type.mjs +1 -1
- package/esm2022/core/types/timeline.type.mjs +2 -0
- package/esm2022/core/utils/layout.util.mjs +4 -4
- package/esm2022/core/utils/number-input.util.mjs +2 -2
- package/esm2022/features/breadcrumb/breadcrumb.component.mjs +21 -3
- package/esm2022/features/button/button.component.mjs +5 -5
- package/esm2022/features/card-list/card/card.component.mjs +4 -6
- package/esm2022/features/card-list/card-list.component.mjs +4 -7
- package/esm2022/features/code-editor/code-editor.component.mjs +5 -5
- package/esm2022/features/color-picker/color-picker.component.mjs +4 -4
- package/esm2022/features/combobox/combobox.component.mjs +8 -8
- package/esm2022/features/confirm/confirm.component.mjs +8 -4
- package/esm2022/features/country-phone-picker/country-phone-picker.component.mjs +6 -8
- package/esm2022/features/empty-state/empty-state.component.mjs +3 -3
- package/esm2022/features/hyperlink/hyperlink.component.mjs +10 -12
- package/esm2022/features/icon-picker/icon-picker.component.mjs +3 -3
- package/esm2022/features/info-sign/info-sign.component.mjs +3 -3
- package/esm2022/features/list/list.component.mjs +1 -1
- package/esm2022/features/loading-state/loading-state.component.mjs +20 -25
- package/esm2022/features/localized-number-input/localized-number-input.component.mjs +4 -4
- package/esm2022/features/mask/mask.component.mjs +4 -4
- package/esm2022/features/modal/modal.component.mjs +5 -5
- package/esm2022/features/modalc/modalc.component.mjs +1 -1
- package/esm2022/features/number-input/number-input.component.mjs +4 -4
- package/esm2022/features/numeric/numeric.component.mjs +4 -6
- package/esm2022/features/paginator/paginator.component.mjs +2 -2
- package/esm2022/features/password-strength/password-strength.component.mjs +3 -3
- package/esm2022/features/picklist/picklist.component.mjs +50 -9
- package/esm2022/features/radio/radio.component.mjs +12 -12
- package/esm2022/features/row-card-list/row-card/row-card.component.mjs +32 -9
- package/esm2022/features/row-card-list/row-card-list.component.mjs +3 -3
- package/esm2022/features/searchbox/searchbox.component.mjs +1 -1
- package/esm2022/features/sidebar/sidebar.component.mjs +7 -3
- package/esm2022/features/switch/switch.component.mjs +3 -3
- package/esm2022/features/table/table.component.mjs +3 -3
- package/esm2022/features/textarea/textarea.component.mjs +4 -4
- package/esm2022/features/textbox/textbox.component.mjs +4 -4
- package/esm2022/features/timeline/timeline.component.mjs +90 -0
- package/esm2022/features/toast/toast.component.mjs +4 -6
- package/esm2022/features/tooltip/tooltip.component.mjs +3 -3
- package/esm2022/features/visual-sql-editor/visual-sql-editor.component.mjs +2810 -0
- package/esm2022/locales/en.json +202 -1
- package/esm2022/locales/es-CO.json +202 -1
- package/esm2022/locales/pt.json +202 -1
- package/esm2022/public-api.mjs +6 -1
- package/features/breadcrumb/breadcrumb.component.d.ts +2 -0
- package/features/button/button.component.d.ts +2 -2
- package/features/code-editor/code-editor.component.d.ts +2 -2
- package/features/hyperlink/hyperlink.component.d.ts +3 -3
- package/features/loading-state/loading-state.component.d.ts +3 -4
- package/features/modal/modal.component.d.ts +2 -2
- package/features/picklist/picklist.component.d.ts +10 -1
- package/features/radio/radio.component.d.ts +4 -4
- package/features/row-card-list/row-card/row-card.component.d.ts +8 -1
- package/features/sidebar/sidebar.component.d.ts +2 -1
- package/features/timeline/timeline.component.d.ts +27 -0
- package/features/visual-sql-editor/visual-sql-editor.component.d.ts +560 -0
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs +4161 -176
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +7 -0
- package/src/locales/en.json +211 -1
- package/src/locales/es-CO.json +211 -1
- package/src/locales/pt.json +211 -1
- package/styles.css +1 -1
|
@@ -478,10 +478,10 @@ export class ComboboxComponent extends InputsComponent {
|
|
|
478
478
|
}
|
|
479
479
|
focusSearchboxSoon() {
|
|
480
480
|
queueMicrotask(() => this.focusSearchbox());
|
|
481
|
-
window.setTimeout(() => this.focusSearchbox(), 0);
|
|
481
|
+
globalThis.window.setTimeout(() => this.focusSearchbox(), 0);
|
|
482
482
|
const schedule = typeof requestAnimationFrame === 'function'
|
|
483
483
|
? requestAnimationFrame
|
|
484
|
-
: (callback) => window.setTimeout(() => callback(performance.now()), 0);
|
|
484
|
+
: (callback) => globalThis.window.setTimeout(() => callback(performance.now()), 0);
|
|
485
485
|
schedule(() => this.focusSearchbox());
|
|
486
486
|
}
|
|
487
487
|
focusTriggerSoon() { queueMicrotask(() => this.focusTrigger()); }
|
|
@@ -706,7 +706,7 @@ export class ComboboxComponent extends InputsComponent {
|
|
|
706
706
|
queueMicrotask(() => this.syncChipPresentation());
|
|
707
707
|
const schedule = typeof requestAnimationFrame === 'function'
|
|
708
708
|
? requestAnimationFrame
|
|
709
|
-
: (callback) => window.setTimeout(() => callback(performance.now()), 0);
|
|
709
|
+
: (callback) => globalThis.window.setTimeout(() => callback(performance.now()), 0);
|
|
710
710
|
schedule(() => this.syncChipPresentation());
|
|
711
711
|
}
|
|
712
712
|
syncChipPresentation() {
|
|
@@ -917,7 +917,7 @@ export class ComboboxComponent extends InputsComponent {
|
|
|
917
917
|
queueMicrotask(() => this.syncVisibleFilteredItems(resetScroll));
|
|
918
918
|
const schedule = typeof requestAnimationFrame === 'function'
|
|
919
919
|
? requestAnimationFrame
|
|
920
|
-
: (callback) => window.setTimeout(() => callback(performance.now()), 0);
|
|
920
|
+
: (callback) => globalThis.window.setTimeout(() => callback(performance.now()), 0);
|
|
921
921
|
schedule(() => this.syncVisibleFilteredItems(resetScroll));
|
|
922
922
|
}
|
|
923
923
|
resetVirtualWindow() {
|
|
@@ -926,13 +926,13 @@ export class ComboboxComponent extends InputsComponent {
|
|
|
926
926
|
this.visibleFilteredItems = [];
|
|
927
927
|
}
|
|
928
928
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ComboboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
929
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
929
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ComboboxComponent, isStandalone: true, selector: "sdc-combobox", inputs: { multiple: "multiple", appendTo: "appendTo", zIndex: "zIndex", options: "options", overrideChipMessage: "overrideChipMessage", maxSelectedLabels: "maxSelectedLabels", showClear: "showClear", iconSelector: "iconSelector", showIconClass: "showIconClass", infoTooltip: "infoTooltip", infoTooltipPosition: "infoTooltipPosition", infoTooltipEvent: "infoTooltipEvent" }, outputs: { selectedValueEvent: "onSelectedItem" }, providers: [
|
|
930
930
|
{
|
|
931
931
|
provide: NG_VALUE_ACCESSOR,
|
|
932
932
|
useExisting: forwardRef(() => ComboboxComponent),
|
|
933
933
|
multi: true
|
|
934
934
|
}
|
|
935
|
-
], viewQueries: [{ propertyName: "popover", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: "triggerControlRef", first: true, predicate: ["triggerControlRef"], descendants: true }, { propertyName: "singleInputRef", first: true, predicate: ["singleInputRef"], descendants: true }, { propertyName: "panelSearchbox", first: true, predicate: ["panelSearchboxRef"], descendants: true }, { propertyName: "multiValueRef", first: true, predicate: ["multiValueRef"], descendants: true }, { propertyName: "chipMeasureRef", first: true, predicate: ["chipMeasureRef"], descendants: true }, { propertyName: "optionsViewportRef", first: true, predicate: ["optionsViewportRef"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"sdc-combobox\">\n <div class=\"sdc-combobox__label-row\" *ngIf=\"ui.labelText || ui.infoTooltipText\">\n <label\n *ngIf=\"ui.labelText\"\n [id]=\"ui.labelId\"\n [for]=\"ui.labelForId\"\n class=\"sdc-combobox__label\"\n [attr.aria-label]=\"required ? ui.labelText + ' ' + ui.requiredFieldText : ui.labelText\"\n >\n <span class=\"sdc-combobox__label-text\">\n {{ ui.labelText }}\n <span *ngIf=\"required\" class=\"required-field\" aria-hidden=\"true\">*</span>\n </span>\n </label>\n\n <sdc-tooltip\n *ngIf=\"ui.infoTooltipText\"\n class=\"sdc-combobox__info-tooltip-wrap\"\n [pTooltip]=\"ui.infoTooltipText\"\n [tooltipPosition]=\"infoTooltipPosition\"\n [tooltipEvent]=\"infoTooltipEvent\"\n (click)=\"$event.stopPropagation()\"\n >\n <i class=\"fas fa-info-circle sdc-combobox__info-tooltip-icon\" aria-hidden=\"true\"></i>\n </sdc-tooltip>\n </div>\n\n <sdc-popover\n [open]=\"panelOpen\"\n [appendTo]=\"appendTo\"\n [zIndex]=\"zIndex\"\n [offset]=\"ui.panelOffset\"\n [ariaLabel]=\"ui.dropdownAriaLabel\"\n [matchTriggerWidth]=\"true\"\n [toggleOnTriggerClick]=\"false\"\n [closeOnEscape]=\"false\"\n [panelClass]=\"ui.panelOverlayClass\"\n (openChange)=\"onPopoverOpenChange($event)\"\n >\n <div\n sdc-popover-trigger\n #triggerControlRef\n class=\"sdc-combobox__control\"\n [attr.id]=\"multiple ? ui.controlId : null\"\n [class.sdc-combobox__control--multiple]=\"multiple\"\n [class.sdc-combobox__control--invalid]=\"invalid\"\n [class.sdc-combobox__control--disabled]=\"disabled\"\n [class.sdc-combobox__control--small]=\"size === 'small'\"\n [ngStyle]=\"getInputStyle()\"\n [attr.tabindex]=\"multiple && !disabled ? 0 : null\"\n [attr.role]=\"multiple ? 'combobox' : null\"\n [attr.aria-haspopup]=\"multiple ? 'listbox' : null\"\n [attr.aria-label]=\"multiple ? ui.comboboxAriaLabel : null\"\n [attr.aria-labelledby]=\"multiple ? ui.comboboxAriaLabelledBy : null\"\n [attr.aria-required]=\"multiple ? required : null\"\n [attr.aria-invalid]=\"multiple ? invalid : null\"\n [attr.aria-expanded]=\"multiple ? (panelOpen ? 'true' : 'false') : null\"\n [attr.aria-controls]=\"multiple ? ui.listboxId : null\"\n [attr.aria-activedescendant]=\"multiple ? activeDescendant : null\"\n [attr.aria-describedby]=\"multiple ? ui.messageId : null\"\n [attr.aria-autocomplete]=\"multiple ? 'list' : null\"\n (mousedown)=\"onControlMouseDown($event)\"\n (click)=\"onControlClick()\"\n (keydown)=\"multiple ? onTriggerKeydown($event) : null\"\n >\n <div class=\"sdc-combobox__value\">\n <ng-container *ngIf=\"!multiple; else multipleValueTpl\">\n <sdc-icon-renderer\n *ngIf=\"selectedSingleOption?.icon\"\n class=\"sdc-combobox__leading-icon\"\n [icon]=\"selectedSingleOption?.icon\"\n [iconType]=\"selectedSingleOption?.iconType\"\n [size]=\"16\"\n ></sdc-icon-renderer>\n\n <input\n #singleInputRef\n class=\"sdc-combobox__input\"\n type=\"text\"\n [id]=\"ui.controlId\"\n [name]=\"ui.inputName\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readOnly]=\"true\"\n [value]=\"selectedSingleOption?.text ?? ''\"\n [placeholder]=\"ui.placeholderText\"\n [attr.aria-label]=\"ui.comboboxAriaLabel\"\n [attr.aria-labelledby]=\"ui.comboboxAriaLabelledBy\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n aria-expanded=\"false\"\n [attr.aria-expanded]=\"panelOpen ? 'true' : 'false'\"\n [attr.aria-haspopup]=\"'listbox'\"\n aria-controls=\"combobox-field-listbox\"\n [attr.aria-controls]=\"ui.listboxId\"\n [attr.aria-activedescendant]=\"activeDescendant\"\n [attr.aria-describedby]=\"ui.messageId\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n (focus)=\"onInputFocus()\"\n (keydown)=\"onTriggerKeydown($event)\"\n />\n </ng-container>\n\n <ng-template #multipleValueTpl>\n <div #multiValueRef class=\"sdc-combobox__multi-value\">\n <ng-container *ngIf=\"!shouldDisplayChipSummary; else summaryTpl\">\n <ul\n class=\"sdc-combobox__chip-list\"\n *ngIf=\"selectedItems.length > 0\"\n [attr.aria-label]=\"selectedSummaryText\"\n >\n <li\n *ngFor=\"let item of selectedItems; trackBy: trackByOptionValue\"\n class=\"sdc-combobox__chip\"\n >\n <sdc-icon-renderer\n *ngIf=\"item.icon\"\n class=\"sdc-combobox__chip-icon\"\n [icon]=\"item.icon\"\n [iconType]=\"item.iconType\"\n [size]=\"14\"\n ></sdc-icon-renderer>\n\n <span class=\"sdc-combobox__chip-label\" [attr.title]=\"item.text\">{{ item.text }}</span>\n\n <button\n type=\"button\"\n class=\"sdc-combobox__chip-remove\"\n [attr.aria-label]=\"chipRemoveAriaLabel(item)\"\n (click)=\"removeSelectedItem(item, $event)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </li>\n </ul>\n </ng-container>\n\n <ng-template #summaryTpl>\n <span class=\"sdc-combobox__summary\" *ngIf=\"selectedItems.length > 0\">\n {{ selectedSummaryText }}\n </span>\n </ng-template>\n\n <span class=\"sdc-combobox__placeholder\" *ngIf=\"selectedItems.length === 0\">\n {{ ui.placeholderText }}\n </span>\n\n <ul\n #chipMeasureRef\n class=\"sdc-combobox__chip-list sdc-combobox__chip-list--measure\"\n *ngIf=\"selectedItems.length > 0\"\n aria-hidden=\"true\"\n >\n <li\n *ngFor=\"let item of selectedItems; trackBy: trackByOptionValue\"\n class=\"sdc-combobox__chip\"\n >\n <sdc-icon-renderer\n *ngIf=\"item.icon\"\n class=\"sdc-combobox__chip-icon\"\n [icon]=\"item.icon\"\n [iconType]=\"item.iconType\"\n [size]=\"14\"\n ></sdc-icon-renderer>\n\n <span class=\"sdc-combobox__chip-label\">{{ item.text }}</span>\n\n <span class=\"sdc-combobox__chip-remove-placeholder\" aria-hidden=\"true\">\n <i class=\"fas fa-times\"></i>\n </span>\n </li>\n </ul>\n </div>\n </ng-template>\n </div>\n\n <div class=\"sdc-combobox__actions\">\n <button\n *ngIf=\"hasClearAction\"\n type=\"button\"\n class=\"sdc-combobox__icon-button sdc-combobox__icon-button--clear\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ui.clearFieldText\"\n (click)=\"clearAll($event)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n\n <button\n type=\"button\"\n class=\"sdc-combobox__icon-button sdc-combobox__icon-button--toggle\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ui.dropdownAriaLabel\"\n [attr.aria-expanded]=\"panelOpen\"\n (mousedown)=\"onToggleMouseDown($event)\"\n (click)=\"togglePanel($event)\"\n >\n <i\n class=\"fas fa-caret-down sdc-combobox__caret\"\n [class.sdc-combobox__caret--open]=\"panelOpen\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n </div>\n\n <div\n sdc-popover-content\n class=\"sdc-combobox__panel\"\n [style.max-height.px]=\"panelMaxHeight\"\n >\n <div class=\"sdc-combobox__panel-search\">\n <div class=\"sdc-combobox__panel-search-row\">\n <span class=\"sdc-combobox__panel-select-all\" *ngIf=\"multiple\">\n <sdc-checkbox\n [ngModel]=\"areAllFilteredItemsSelected\"\n [attr.aria-label]=\"ui.selectAllText\"\n (ngModelChange)=\"toggleAllFilteredItems($event)\"\n ></sdc-checkbox>\n </span>\n\n <sdc-searchbox\n #panelSearchboxRef\n class=\"sdc-combobox__panel-searchbox\"\n [identity]=\"ui.panelSearchIdentity\"\n [disabled]=\"disabled\"\n [placeholder]=\"ui.panelSearchPlaceholder\"\n [ngModel]=\"searchTerm\"\n [debounceTimeMs]=\"0\"\n [submitOnEnter]=\"false\"\n [clearOnEscape]=\"false\"\n [ariaLabel]=\"ui.panelSearchAriaLabel\"\n [inputRole]=\"null\"\n [inputAutocomplete]=\"'off'\"\n [inputAriaControls]=\"ui.listboxId\"\n [inputAriaDescribedBy]=\"ui.messageId\"\n (ngModelChange)=\"onSearchTermChange($event)\"\n (onClear)=\"onSearchCleared()\"\n (keydown)=\"onSearchboxKeydown($event)\"\n ></sdc-searchbox>\n </div>\n </div>\n\n <output class=\"sdc-combobox__loading\" *ngIf=\"isOptionsLoading\" aria-live=\"polite\">\n <i class=\"fas fa-spinner fa-spin sdc-combobox__loading-icon\" aria-hidden=\"true\"></i>\n <span class=\"sdc-combobox__loading-text\">{{ ui.loadingItemsText }}</span>\n </output>\n\n <sdc-empty-state\n *ngIf=\"showEmptyState\"\n class=\"sdc-combobox__empty\"\n variant=\"inline-text\"\n [title]=\"ui.emptyTitleText\"\n ></sdc-empty-state>\n\n <ng-container *ngIf=\"filteredItems.length > 0\">\n <div\n *ngIf=\"useVirtualizedOptions; else standardOptionsTpl\"\n #optionsViewportRef\n class=\"sdc-combobox__options sdc-combobox__options--virtualized\"\n (scroll)=\"onOptionsScroll()\"\n (mousemove)=\"onOptionsPanelMouseMove()\"\n (mouseleave)=\"onOptionsPanelMouseLeave()\"\n >\n <!-- NOSONAR: custom combobox popup intentionally uses ARIA listbox semantics instead of a native select -->\n <div\n class=\"sdc-combobox__options-list\"\n [attr.id]=\"ui.listboxId\"\n [attr.aria-label]=\"ui.comboboxAriaLabel\"\n [attr.aria-labelledby]=\"ui.comboboxAriaLabelledBy\"\n [attr.role]=\"'listbox'\"\n [attr.aria-multiselectable]=\"multiple ? 'true' : null\"\n tabindex=\"-1\"\n >\n <div\n class=\"sdc-combobox__virtual-spacer\"\n [style.height.px]=\"beforeVirtualSpacerHeight\"\n aria-hidden=\"true\"\n ></div>\n\n <div\n *ngFor=\"let visibleOption of visibleFilteredItems\"\n class=\"sdc-combobox__option\"\n [class.sdc-combobox__option--active]=\"isOptionActive(visibleOption.index)\"\n [class.sdc-combobox__option--icon-selector]=\"iconSelector\"\n [class.sdc-combobox__option--selected]=\"!multiple && isOptionSelected(visibleOption.item)\"\n [attr.data-option-index]=\"visibleOption.index\"\n (mouseenter)=\"onOptionMouseEnter(visibleOption.index)\"\n >\n <div class=\"sdc-combobox__option-check\" *ngIf=\"multiple\">\n <sdc-checkbox\n [ngModel]=\"isOptionSelected(visibleOption.item)\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (ngModelChange)=\"onOptionCheckboxChange(visibleOption.item, $event)\"\n ></sdc-checkbox>\n </div>\n\n <!-- NOSONAR -->\n <!-- the custom listbox keeps option semantics on the focusable action for keyboard navigation -->\n <button\n type=\"button\"\n class=\"sdc-combobox__option-action\"\n [attr.id]=\"optionId(visibleOption.index)\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"isOptionSelected(visibleOption.item) ? 'true' : 'false'\"\n [attr.tabindex]=\"-1\"\n (keydown)=\"onOptionKeydown($event, visibleOption.item)\"\n (click)=\"onOptionClick(visibleOption.item)\"\n >\n <span class=\"sdc-combobox__option-content\">\n <sdc-icon-renderer\n *ngIf=\"visibleOption.item.icon\"\n class=\"sdc-combobox__option-icon\"\n [icon]=\"visibleOption.item.icon\"\n [iconType]=\"visibleOption.item.iconType\"\n [size]=\"16\"\n ></sdc-icon-renderer>\n\n <span class=\"sdc-combobox__option-texts\">\n <span class=\"sdc-combobox__option-label\">{{ visibleOption.item.text }}</span>\n <span\n class=\"sdc-combobox__option-meta\"\n *ngIf=\"optionMetaText(visibleOption.item) as optionMeta\"\n >\n {{ optionMeta }}\n </span>\n </span>\n </span>\n\n <i\n *ngIf=\"!multiple && isOptionSelected(visibleOption.item)\"\n class=\"fas fa-check sdc-combobox__option-selected-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n\n <div\n class=\"sdc-combobox__virtual-spacer\"\n [style.height.px]=\"afterVirtualSpacerHeight\"\n aria-hidden=\"true\"\n ></div>\n </div>\n </div>\n\n <ng-template #standardOptionsTpl>\n <!-- NOSONAR: custom combobox popup intentionally uses ARIA listbox semantics instead of a native select -->\n <div\n class=\"sdc-combobox__options\"\n [attr.id]=\"ui.listboxId\"\n [attr.aria-label]=\"ui.comboboxAriaLabel\"\n [attr.aria-labelledby]=\"ui.comboboxAriaLabelledBy\"\n [attr.role]=\"'listbox'\"\n [attr.aria-multiselectable]=\"multiple ? 'true' : null\"\n tabindex=\"-1\"\n (mousemove)=\"onOptionsPanelMouseMove()\"\n (mouseleave)=\"onOptionsPanelMouseLeave()\"\n >\n <div\n *ngFor=\"let option of filteredItems; let index = index; trackBy: trackByOptionValue\"\n class=\"sdc-combobox__option\"\n [class.sdc-combobox__option--active]=\"isOptionActive(index)\"\n [class.sdc-combobox__option--icon-selector]=\"iconSelector\"\n [class.sdc-combobox__option--selected]=\"!multiple && isOptionSelected(option)\"\n [attr.data-option-index]=\"index\"\n (mouseenter)=\"onOptionMouseEnter(index)\"\n >\n <div class=\"sdc-combobox__option-check\" *ngIf=\"multiple\">\n <sdc-checkbox\n [ngModel]=\"isOptionSelected(option)\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (ngModelChange)=\"onOptionCheckboxChange(option, $event)\"\n ></sdc-checkbox>\n </div>\n\n <!-- NOSONAR -->\n <!-- the custom listbox keeps option semantics on the focusable action for keyboard navigation -->\n <button\n type=\"button\"\n class=\"sdc-combobox__option-action\"\n [attr.id]=\"optionId(index)\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"isOptionSelected(option) ? 'true' : 'false'\"\n [attr.tabindex]=\"-1\"\n (keydown)=\"onOptionKeydown($event, option)\"\n (click)=\"onOptionClick(option)\"\n >\n <span class=\"sdc-combobox__option-content\">\n <sdc-icon-renderer\n *ngIf=\"option.icon\"\n class=\"sdc-combobox__option-icon\"\n [icon]=\"option.icon\"\n [iconType]=\"option.iconType\"\n [size]=\"16\"\n ></sdc-icon-renderer>\n\n <span class=\"sdc-combobox__option-texts\">\n <span class=\"sdc-combobox__option-label\">{{ option.text }}</span>\n <span\n class=\"sdc-combobox__option-meta\"\n *ngIf=\"optionMetaText(option) as optionMeta\"\n >\n {{ optionMeta }}\n </span>\n </span>\n </span>\n\n <i\n *ngIf=\"!multiple && isOptionSelected(option)\"\n class=\"fas fa-check sdc-combobox__option-selected-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n </div>\n </ng-template>\n </ng-container>\n </div>\n </sdc-popover>\n\n <small\n *ngIf=\"ui.messageText\"\n [id]=\"ui.messageId\"\n [ngClass]=\"getInvalidMessageClass()\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {{ ui.messageText }}\n </small>\n</div>\n", styles: [":host{display:block}.sdc-combobox__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-combobox__label{display:inline-flex;align-items:center;margin-bottom:0;line-height:1;padding-top:var(--sdc-form-label-py);padding-bottom:var(--sdc-form-label-py);min-width:0}.sdc-combobox__label-text{display:inline-flex;align-items:center}.required-field{margin-left:var(--sdc-form-required-ml);color:var(--sdc-error-color, #dc3545);font-weight:400}.sdc-combobox__info-tooltip-wrap{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;padding:0;margin:0}.sdc-combobox__info-tooltip-icon{display:inline-flex;align-items:center;justify-content:center;width:var(--sdc-form-tooltip-size);height:var(--sdc-form-tooltip-size);line-height:1;cursor:pointer;color:var(--sdc-form-tooltip-color)}.sdc-combobox__control{display:flex;align-items:stretch;min-height:var(--sdc-formfield-default-height);border:1px solid var(--sdc-formfield-default-border);border-radius:var(--sdc-formfield-border-radius);background:var(--sdc-formfield-default-bg, #fff);box-sizing:border-box;cursor:pointer;transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease}.sdc-combobox__control:hover{border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff))}.sdc-combobox__control:focus-within{border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff));box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 2px rgba(0, 123, 255, .14))}.sdc-combobox__control--invalid,.sdc-combobox__control--invalid:hover,.sdc-combobox__control--invalid:focus-within{border-color:var(--sdc-formfield-invalid-border, var(--sdc-error-color, #d98888));box-shadow:var(--sdc-formfield-invalid-focus-shadow, 0 0 0 2px rgba(217, 136, 136, .16))}.sdc-combobox__control--disabled,.sdc-combobox__control--disabled:hover{background-color:var(--sdc-formfield-disabled-bg);border-color:var(--sdc-formfield-default-border);box-shadow:none;cursor:not-allowed}.sdc-combobox__control--small{min-height:30px}.sdc-combobox__value{display:flex;align-items:center;flex:1 1 auto;min-width:0;gap:.5rem;padding:0 .75rem}.sdc-combobox__leading-icon{color:var(--sdc-button-icon-default);flex:0 0 auto}.sdc-combobox__chip-icon,.sdc-combobox__option-icon{color:var(--sdc-button-icon-default)}.sdc-combobox__input{width:100%;min-width:0;border:0;background:transparent;box-shadow:none;outline:0;font:inherit;color:inherit;line-height:var(--sdc-formfield-default-line-height);padding:0;cursor:pointer}.sdc-combobox__input::placeholder{color:var(--sdc-form-placeholder-color, #9ca3af)}.sdc-combobox__input:disabled{cursor:not-allowed}.sdc-combobox__multi-value{display:flex;align-items:center;gap:.5rem;flex:1 1 auto;min-width:0;flex-wrap:nowrap;overflow:hidden;position:relative;padding:.25rem 0}.sdc-combobox__placeholder{color:var(--sdc-form-placeholder-color, #9ca3af);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-combobox__chips{display:none}.sdc-combobox__chip-list{display:flex;align-items:center;gap:.375rem;flex:1 1 auto;min-width:0;margin:0;overflow:hidden;padding:0;list-style:none;white-space:nowrap}.sdc-combobox__chip-list--measure{position:fixed;top:-9999px;left:0;z-index:-1;visibility:hidden;flex:0 0 auto;min-width:max-content;overflow:visible;pointer-events:none}.sdc-combobox__chip{display:inline-flex;align-items:center;gap:.5rem;flex:0 1 auto;min-width:0;max-width:100%;min-height:1.8rem;padding:.2rem .55rem;border:1px solid #888b99;border-radius:6px;background:#eeebf2;color:var(--sdc-text-default, #111827)}.sdc-combobox__chip-label{display:inline-block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdc-combobox__chip-remove,.sdc-combobox__chip-remove-placeholder{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;padding:0;border:0;background:transparent;color:inherit;line-height:1}.sdc-combobox__chip-remove{cursor:pointer}.sdc-combobox__chip-remove:focus-visible{outline:2px solid var(--sdc-primary-color, #007bff);outline-offset:2px;border-radius:3px}.sdc-combobox__summary{color:var(--p-text-color, #111827);display:inline-block;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-combobox__actions{display:flex;align-items:stretch;flex:0 0 auto}.sdc-combobox__icon-button{display:inline-flex;align-items:center;justify-content:center;min-width:2.5rem;padding:0 .75rem;border:0;background:transparent;color:var(--sdc-button-icon-default);cursor:pointer}.sdc-combobox__icon-button:disabled{background:var(--sdc-formfield-disabled-bg);cursor:not-allowed;opacity:.6}.sdc-combobox__icon-button:focus-visible{outline:2px solid var(--sdc-primary-color, #007bff);outline-offset:-2px;box-shadow:0 0 0 3px #007bff40}.sdc-combobox__icon-button:hover:not(:disabled){background:transparent}.sdc-combobox__icon-button--clear{min-width:2rem;padding:0 .5rem}.sdc-combobox__icon-button--toggle{border-left:1px solid var(--sdc-formfield-default-border)}.sdc-combobox__caret{transition:transform .16s ease}.sdc-combobox__caret--open{transform:rotate(180deg)}.sdc-combobox__panel{--sdc-combobox-panel-padding-x: .625rem;--sdc-combobox-panel-padding-y: .625rem;display:flex;flex-direction:column;gap:0;min-width:100%;padding:var(--sdc-combobox-panel-padding-y) var(--sdc-combobox-panel-padding-x) .5rem;overflow:hidden;box-sizing:border-box}.sdc-combobox__panel-search{flex:0 0 auto;margin-bottom:var(--sdc-combobox-panel-padding-y);width:100%}.sdc-combobox__panel-search-row{display:flex;align-items:center;gap:0;width:100%}.sdc-combobox__panel-select-all{display:inline-flex;align-items:center;justify-content:center;flex:0 0 2.5rem;min-width:2.5rem}.sdc-combobox__panel-searchbox{flex:1 1 auto;min-width:0}.sdc-combobox__panel-searchbox ::ng-deep .sdc-searchbox{width:100%}.sdc-combobox__panel-searchbox ::ng-deep .sdc-searchbox__group{width:100%;background:var(--sdc-formfield-default-bg, #fff);box-shadow:none!important;min-height:calc(var(--sdc-formfield-default-height) - .25rem)}.sdc-combobox__panel-searchbox ::ng-deep .sdc-searchbox__input{color:var(--p-text-color, var(--sdc-text-default, #111827));caret-color:var(--p-text-color, var(--sdc-text-default, #111827))}.sdc-combobox__options{display:flex;flex-direction:column;gap:0;flex:1 1 auto;min-height:0;margin:0 calc(-1 * var(--sdc-combobox-panel-padding-x));overflow:auto;padding:0;list-style:none}.sdc-combobox__options--virtualized{display:block}.sdc-combobox__options-list{margin:0;padding:0;list-style:none}.sdc-combobox__option{display:flex;align-items:stretch;gap:0;list-style:none;min-height:2.75rem;background:transparent;transition:background-color .16s ease,color .16s ease}.sdc-combobox__option-action{display:flex;align-items:center;gap:.75rem;min-height:2.75rem;flex:1 1 auto;width:100%;padding:.625rem calc(var(--sdc-combobox-panel-padding-x) + .75rem);border:0;border-radius:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer;transition:background-color .16s ease,color .16s ease,box-shadow .16s ease;box-sizing:border-box}.sdc-combobox__option--icon-selector .sdc-combobox__option-action{min-height:3.25rem}.sdc-combobox__option-action:hover,.sdc-combobox__option--active .sdc-combobox__option-action{background:transparent;box-shadow:none}.sdc-combobox__option:hover,.sdc-combobox__option--active,.sdc-combobox__option--selected{background:var(--sdc-combobox-option-hover-bg, #eeebf2)}.sdc-combobox__option-check{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:calc(2.5rem + var(--sdc-combobox-panel-padding-x));min-width:calc(2.5rem + var(--sdc-combobox-panel-padding-x));padding-left:var(--sdc-combobox-panel-padding-x);box-sizing:border-box}.sdc-combobox__option-check+.sdc-combobox__option-action{padding-left:.75rem}.sdc-combobox__option-content{display:inline-flex;align-items:center;gap:.5rem;flex:1 1 auto;min-width:0;color:#334155;font-size:.95rem}.sdc-combobox__option--icon-selector .sdc-combobox__option-content{align-items:flex-start}.sdc-combobox__option-texts{display:flex;flex:1 1 auto;flex-direction:column;gap:.125rem;min-width:0}.sdc-combobox__option-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdc-combobox__option-meta{color:var(--p-text-muted-color, #6b7280);font-family:var(--sdc-font-family-mono, \"Courier New\", monospace);font-size:.78rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdc-combobox__option-selected-icon{color:var(--sdc-primary-color, #007bff)}.sdc-combobox__loading{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:.875rem .75rem;color:var(--p-text-muted-color, #6b7280)}.sdc-combobox__loading-icon{color:var(--sdc-primary-color, #007bff)}.sdc-combobox__virtual-spacer{width:100%;flex:0 0 auto}.sdc-combobox__empty{--sdc-empty-state-inline-color: var(--p-text-muted-color, #6b7280);--sdc-empty-state-inline-font-size: .875rem;--sdc-empty-state-inline-line-height: 1.25rem;--sdc-empty-state-inline-padding: .5rem .625rem .375rem;flex:0 0 auto}::ng-deep .sdc-popover__panel.sdc-combobox__overlay-panel{box-shadow:0 12px 28px #0f172a24}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { 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: "ngmodule", type: TranslateModule }, { kind: "component", type: IconRendererComponent, selector: "sdc-icon-renderer", inputs: ["icon", "iconType", "size"] }, { kind: "component", type: CheckboxComponent, selector: "sdc-checkbox", inputs: ["label", "disabled", "commonCheckbox", "labelPosition", "size", "checked"], outputs: ["checkedChange"] }, { kind: "component", type: EmptyStateComponent, selector: "sdc-empty-state", inputs: ["id", "title", "variant", "titleParams", "iconClass", "description", "descriptionParams", "showPrimaryAction", "showSecondaryAction", "primaryActionLabel", "primaryActionLabelParams", "secondaryActionLabel", "secondaryActionLabelParams", "primaryModel"], outputs: ["primaryAction", "secondaryAction"] }, { kind: "component", type: PopoverComponent, selector: "sdc-popover", inputs: ["open", "disabled", "toggleOnTriggerClick", "closeOnOutsideClick", "closeOnEscape", "trapFocus", "focusOnOpen", "restoreFocusOnClose", "ariaLabel", "appendTo", "zIndex", "offset", "placement", "role", "matchTriggerWidth", "panelWidth", "panelMinWidth", "panelMaxWidth", "panelMaxHeight", "panelClass"], outputs: ["openChange"] }, { kind: "component", type: SearchboxComponent, selector: "sdc-searchbox", inputs: ["triggerMode", "debounceTimeMs", "ariaLabel", "inputRole", "inputAriaControls", "inputAriaDescribedBy", "inputAriaActiveDescendant", "inputAriaHaspopup", "inputAriaExpanded", "inputAutocomplete", "submitOnEnter", "clearOnEscape"], outputs: ["debouncedValueChange", "onSearch", "onClear"] }, { kind: "component", type: TooltipComponent, selector: "sdc-tooltip", inputs: ["pTooltip", "tooltipPosition", "tooltipEvent", "fitContent", "tooltipDisabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
935
|
+
], viewQueries: [{ propertyName: "popover", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: "triggerControlRef", first: true, predicate: ["triggerControlRef"], descendants: true }, { propertyName: "singleInputRef", first: true, predicate: ["singleInputRef"], descendants: true }, { propertyName: "panelSearchbox", first: true, predicate: ["panelSearchboxRef"], descendants: true }, { propertyName: "multiValueRef", first: true, predicate: ["multiValueRef"], descendants: true }, { propertyName: "chipMeasureRef", first: true, predicate: ["chipMeasureRef"], descendants: true }, { propertyName: "optionsViewportRef", first: true, predicate: ["optionsViewportRef"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"sdc-combobox\">\n @if (ui.labelText || ui.infoTooltipText) {\n <div class=\"sdc-combobox__label-row\">\n @if (ui.labelText) {\n <label\n [id]=\"ui.labelId\"\n [for]=\"ui.labelForId\"\n class=\"sdc-combobox__label\"\n [attr.aria-label]=\"required ? ui.labelText + ' ' + ui.requiredFieldText : ui.labelText\"\n >\n <span class=\"sdc-combobox__label-text\">\n {{ ui.labelText }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n }\n </span>\n </label>\n }\n @if (ui.infoTooltipText) {\n <sdc-tooltip\n class=\"sdc-combobox__info-tooltip-wrap\"\n [pTooltip]=\"ui.infoTooltipText\"\n [tooltipPosition]=\"infoTooltipPosition\"\n [tooltipEvent]=\"infoTooltipEvent\"\n (click)=\"$event.stopPropagation()\"\n >\n <i class=\"fas fa-info-circle sdc-combobox__info-tooltip-icon\" aria-hidden=\"true\"></i>\n </sdc-tooltip>\n }\n </div>\n }\n\n <sdc-popover\n [open]=\"panelOpen\"\n [appendTo]=\"appendTo\"\n [zIndex]=\"zIndex\"\n [offset]=\"ui.panelOffset\"\n [ariaLabel]=\"ui.dropdownAriaLabel\"\n [matchTriggerWidth]=\"true\"\n [toggleOnTriggerClick]=\"false\"\n [closeOnEscape]=\"false\"\n [panelClass]=\"ui.panelOverlayClass\"\n (openChange)=\"onPopoverOpenChange($event)\"\n >\n <div\n sdc-popover-trigger\n #triggerControlRef\n class=\"sdc-combobox__control\"\n [attr.id]=\"multiple ? ui.controlId : null\"\n [class.sdc-combobox__control--multiple]=\"multiple\"\n [class.sdc-combobox__control--invalid]=\"invalid\"\n [class.sdc-combobox__control--disabled]=\"disabled\"\n [class.sdc-combobox__control--small]=\"size === 'small'\"\n [ngStyle]=\"getInputStyle()\"\n [attr.tabindex]=\"multiple && !disabled ? 0 : null\"\n [attr.role]=\"multiple ? 'combobox' : null\"\n [attr.aria-haspopup]=\"multiple ? 'listbox' : null\"\n [attr.aria-label]=\"multiple ? ui.comboboxAriaLabel : null\"\n [attr.aria-labelledby]=\"multiple ? ui.comboboxAriaLabelledBy : null\"\n [attr.aria-required]=\"multiple ? required : null\"\n [attr.aria-invalid]=\"multiple ? invalid : null\"\n [attr.aria-expanded]=\"multiple ? (panelOpen ? 'true' : 'false') : null\"\n [attr.aria-controls]=\"multiple ? ui.listboxId : null\"\n [attr.aria-activedescendant]=\"multiple ? activeDescendant : null\"\n [attr.aria-describedby]=\"multiple ? ui.messageId : null\"\n [attr.aria-autocomplete]=\"multiple ? 'list' : null\"\n (mousedown)=\"onControlMouseDown($event)\"\n (click)=\"onControlClick()\"\n (keydown)=\"multiple ? onTriggerKeydown($event) : null\"\n >\n <div class=\"sdc-combobox__value\">\n @if (!multiple) {\n @if (selectedSingleOption?.icon) {\n <sdc-icon-renderer\n class=\"sdc-combobox__leading-icon\"\n [icon]=\"selectedSingleOption?.icon\"\n [iconType]=\"selectedSingleOption?.iconType\"\n [size]=\"16\"\n ></sdc-icon-renderer>\n }\n <input\n #singleInputRef\n class=\"sdc-combobox__input\"\n type=\"text\"\n [id]=\"ui.controlId\"\n [name]=\"ui.inputName\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readOnly]=\"true\"\n [value]=\"selectedSingleOption?.text ?? ''\"\n [placeholder]=\"ui.placeholderText\"\n [attr.aria-label]=\"ui.comboboxAriaLabel\"\n [attr.aria-labelledby]=\"ui.comboboxAriaLabelledBy\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n aria-expanded=\"false\"\n [attr.aria-expanded]=\"panelOpen ? 'true' : 'false'\"\n [attr.aria-haspopup]=\"'listbox'\"\n aria-controls=\"combobox-field-listbox\"\n [attr.aria-controls]=\"ui.listboxId\"\n [attr.aria-activedescendant]=\"activeDescendant\"\n [attr.aria-describedby]=\"ui.messageId\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n (focus)=\"onInputFocus()\"\n (keydown)=\"onTriggerKeydown($event)\"\n />\n } @else {\n <div #multiValueRef class=\"sdc-combobox__multi-value\">\n @if (!shouldDisplayChipSummary) {\n @if (selectedItems.length > 0) {\n <ul\n class=\"sdc-combobox__chip-list\"\n [attr.aria-label]=\"selectedSummaryText\"\n >\n @for (item of selectedItems; track trackByOptionValue($index, item)) {\n <li\n class=\"sdc-combobox__chip\"\n >\n @if (item.icon) {\n <sdc-icon-renderer\n class=\"sdc-combobox__chip-icon\"\n [icon]=\"item.icon\"\n [iconType]=\"item.iconType\"\n [size]=\"14\"\n ></sdc-icon-renderer>\n }\n <span class=\"sdc-combobox__chip-label\" [attr.title]=\"item.text\">{{ item.text }}</span>\n <button\n type=\"button\"\n class=\"sdc-combobox__chip-remove\"\n [attr.aria-label]=\"chipRemoveAriaLabel(item)\"\n (click)=\"removeSelectedItem(item, $event)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </li>\n }\n </ul>\n }\n } @else {\n @if (selectedItems.length > 0) {\n <span class=\"sdc-combobox__summary\">\n {{ selectedSummaryText }}\n </span>\n }\n }\n @if (selectedItems.length === 0) {\n <span class=\"sdc-combobox__placeholder\">\n {{ ui.placeholderText }}\n </span>\n }\n @if (selectedItems.length > 0) {\n <ul\n #chipMeasureRef\n class=\"sdc-combobox__chip-list sdc-combobox__chip-list--measure\"\n aria-hidden=\"true\"\n >\n @for (item of selectedItems; track trackByOptionValue($index, item)) {\n <li\n class=\"sdc-combobox__chip\"\n >\n @if (item.icon) {\n <sdc-icon-renderer\n class=\"sdc-combobox__chip-icon\"\n [icon]=\"item.icon\"\n [iconType]=\"item.iconType\"\n [size]=\"14\"\n ></sdc-icon-renderer>\n }\n <span class=\"sdc-combobox__chip-label\">{{ item.text }}</span>\n <span class=\"sdc-combobox__chip-remove-placeholder\" aria-hidden=\"true\">\n <i class=\"fas fa-times\"></i>\n </span>\n </li>\n }\n </ul>\n }\n </div>\n }\n\n </div>\n\n <div class=\"sdc-combobox__actions\">\n @if (hasClearAction) {\n <button\n type=\"button\"\n class=\"sdc-combobox__icon-button sdc-combobox__icon-button--clear\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ui.clearFieldText\"\n (click)=\"clearAll($event)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n }\n\n <button\n type=\"button\"\n class=\"sdc-combobox__icon-button sdc-combobox__icon-button--toggle\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ui.dropdownAriaLabel\"\n [attr.aria-expanded]=\"panelOpen\"\n (mousedown)=\"onToggleMouseDown($event)\"\n (click)=\"togglePanel($event)\"\n >\n <i\n class=\"fas fa-caret-down sdc-combobox__caret\"\n [class.sdc-combobox__caret--open]=\"panelOpen\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n </div>\n\n <div\n sdc-popover-content\n class=\"sdc-combobox__panel\"\n [style.max-height.px]=\"panelMaxHeight\"\n >\n <div class=\"sdc-combobox__panel-search\">\n <div class=\"sdc-combobox__panel-search-row\">\n @if (multiple) {\n <span class=\"sdc-combobox__panel-select-all\">\n <sdc-checkbox\n [ngModel]=\"areAllFilteredItemsSelected\"\n [attr.aria-label]=\"ui.selectAllText\"\n (ngModelChange)=\"toggleAllFilteredItems($event)\"\n ></sdc-checkbox>\n </span>\n }\n\n <sdc-searchbox\n #panelSearchboxRef\n class=\"sdc-combobox__panel-searchbox\"\n [identity]=\"ui.panelSearchIdentity\"\n [disabled]=\"disabled\"\n [placeholder]=\"ui.panelSearchPlaceholder\"\n [ngModel]=\"searchTerm\"\n [debounceTimeMs]=\"0\"\n [submitOnEnter]=\"false\"\n [clearOnEscape]=\"false\"\n [ariaLabel]=\"ui.panelSearchAriaLabel\"\n [inputRole]=\"null\"\n [inputAutocomplete]=\"'off'\"\n [inputAriaControls]=\"ui.listboxId\"\n [inputAriaDescribedBy]=\"ui.messageId\"\n (ngModelChange)=\"onSearchTermChange($event)\"\n (onClear)=\"onSearchCleared()\"\n (keydown)=\"onSearchboxKeydown($event)\"\n ></sdc-searchbox>\n </div>\n </div>\n\n @if (isOptionsLoading) {\n <output class=\"sdc-combobox__loading\" aria-live=\"polite\">\n <i class=\"fas fa-spinner fa-spin sdc-combobox__loading-icon\" aria-hidden=\"true\"></i>\n <span class=\"sdc-combobox__loading-text\">{{ ui.loadingItemsText }}</span>\n </output>\n }\n\n @if (showEmptyState) {\n <sdc-empty-state\n class=\"sdc-combobox__empty\"\n variant=\"inline-text\"\n [title]=\"ui.emptyTitleText\"\n ></sdc-empty-state>\n }\n\n @if (filteredItems.length > 0) {\n @if (useVirtualizedOptions) {\n <div\n #optionsViewportRef\n class=\"sdc-combobox__options sdc-combobox__options--virtualized\"\n (scroll)=\"onOptionsScroll()\"\n (mousemove)=\"onOptionsPanelMouseMove()\"\n (mouseleave)=\"onOptionsPanelMouseLeave()\"\n >\n <!-- NOSONAR: custom combobox popup intentionally uses ARIA listbox semantics instead of a native select -->\n <div\n class=\"sdc-combobox__options-list\"\n [attr.id]=\"ui.listboxId\"\n [attr.aria-label]=\"ui.comboboxAriaLabel\"\n [attr.aria-labelledby]=\"ui.comboboxAriaLabelledBy\"\n [attr.role]=\"'listbox'\"\n [attr.aria-multiselectable]=\"multiple ? 'true' : null\"\n tabindex=\"-1\"\n >\n <div\n class=\"sdc-combobox__virtual-spacer\"\n [style.height.px]=\"beforeVirtualSpacerHeight\"\n aria-hidden=\"true\"\n ></div>\n @for (\n visibleOption of visibleFilteredItems;\n track trackByOptionValue(visibleOption.index, visibleOption.item)\n ) {\n <div\n class=\"sdc-combobox__option\"\n [class.sdc-combobox__option--active]=\"isOptionActive(visibleOption.index)\"\n [class.sdc-combobox__option--icon-selector]=\"iconSelector\"\n [class.sdc-combobox__option--selected]=\"!multiple && isOptionSelected(visibleOption.item)\"\n [attr.data-option-index]=\"visibleOption.index\"\n (mouseenter)=\"onOptionMouseEnter(visibleOption.index)\"\n >\n @if (multiple) {\n <div class=\"sdc-combobox__option-check\">\n <sdc-checkbox\n [ngModel]=\"isOptionSelected(visibleOption.item)\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (ngModelChange)=\"onOptionCheckboxChange(visibleOption.item, $event)\"\n ></sdc-checkbox>\n </div>\n }\n <!-- NOSONAR -->\n <!-- the custom listbox keeps option semantics on the focusable action for keyboard navigation -->\n <button\n type=\"button\"\n class=\"sdc-combobox__option-action\"\n [attr.id]=\"optionId(visibleOption.index)\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"isOptionSelected(visibleOption.item) ? 'true' : 'false'\"\n [attr.tabindex]=\"-1\"\n (keydown)=\"onOptionKeydown($event, visibleOption.item)\"\n (click)=\"onOptionClick(visibleOption.item)\"\n >\n <span class=\"sdc-combobox__option-content\">\n @if (visibleOption.item.icon) {\n <sdc-icon-renderer\n class=\"sdc-combobox__option-icon\"\n [icon]=\"visibleOption.item.icon\"\n [iconType]=\"visibleOption.item.iconType\"\n [size]=\"16\"\n ></sdc-icon-renderer>\n }\n <span class=\"sdc-combobox__option-texts\">\n <span class=\"sdc-combobox__option-label\">{{ visibleOption.item.text }}</span>\n @if (optionMetaText(visibleOption.item); as optionMeta) {\n <span\n class=\"sdc-combobox__option-meta\"\n >\n {{ optionMeta }}\n </span>\n }\n </span>\n </span>\n @if (!multiple && isOptionSelected(visibleOption.item)) {\n <i\n class=\"fas fa-check sdc-combobox__option-selected-icon\"\n aria-hidden=\"true\"\n ></i>\n }\n </button>\n </div>\n }\n <div\n class=\"sdc-combobox__virtual-spacer\"\n [style.height.px]=\"afterVirtualSpacerHeight\"\n aria-hidden=\"true\"\n ></div>\n </div>\n </div>\n } @else {\n <!-- NOSONAR: custom combobox popup intentionally uses ARIA listbox semantics instead of a native select -->\n <div\n class=\"sdc-combobox__options\"\n [attr.id]=\"ui.listboxId\"\n [attr.aria-label]=\"ui.comboboxAriaLabel\"\n [attr.aria-labelledby]=\"ui.comboboxAriaLabelledBy\"\n [attr.role]=\"'listbox'\"\n [attr.aria-multiselectable]=\"multiple ? 'true' : null\"\n tabindex=\"-1\"\n (mousemove)=\"onOptionsPanelMouseMove()\"\n (mouseleave)=\"onOptionsPanelMouseLeave()\"\n >\n @for (option of filteredItems; track trackByOptionValue(index, option); let index = $index) {\n <div\n class=\"sdc-combobox__option\"\n [class.sdc-combobox__option--active]=\"isOptionActive(index)\"\n [class.sdc-combobox__option--icon-selector]=\"iconSelector\"\n [class.sdc-combobox__option--selected]=\"!multiple && isOptionSelected(option)\"\n [attr.data-option-index]=\"index\"\n (mouseenter)=\"onOptionMouseEnter(index)\"\n >\n @if (multiple) {\n <div class=\"sdc-combobox__option-check\">\n <sdc-checkbox\n [ngModel]=\"isOptionSelected(option)\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (ngModelChange)=\"onOptionCheckboxChange(option, $event)\"\n ></sdc-checkbox>\n </div>\n }\n <!-- NOSONAR -->\n <!-- the custom listbox keeps option semantics on the focusable action for keyboard navigation -->\n <button\n type=\"button\"\n class=\"sdc-combobox__option-action\"\n [attr.id]=\"optionId(index)\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"isOptionSelected(option) ? 'true' : 'false'\"\n [attr.tabindex]=\"-1\"\n (keydown)=\"onOptionKeydown($event, option)\"\n (click)=\"onOptionClick(option)\"\n >\n <span class=\"sdc-combobox__option-content\">\n @if (option.icon) {\n <sdc-icon-renderer\n class=\"sdc-combobox__option-icon\"\n [icon]=\"option.icon\"\n [iconType]=\"option.iconType\"\n [size]=\"16\"\n ></sdc-icon-renderer>\n }\n <span class=\"sdc-combobox__option-texts\">\n <span class=\"sdc-combobox__option-label\">{{ option.text }}</span>\n @if (optionMetaText(option); as optionMeta) {\n <span\n class=\"sdc-combobox__option-meta\"\n >\n {{ optionMeta }}\n </span>\n }\n </span>\n </span>\n @if (!multiple && isOptionSelected(option)) {\n <i\n class=\"fas fa-check sdc-combobox__option-selected-icon\"\n aria-hidden=\"true\"\n ></i>\n }\n </button>\n </div>\n }\n </div>\n }\n }\n </div>\n </sdc-popover>\n\n @if (ui.messageText) {\n <small\n [id]=\"ui.messageId\"\n [ngClass]=\"getInvalidMessageClass()\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {{ ui.messageText }}\n </small>\n }\n </div>\n", styles: [":host{display:block}.sdc-combobox__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-combobox__label{display:inline-flex;align-items:center;margin-bottom:0;line-height:1;padding-top:var(--sdc-form-label-py);padding-bottom:var(--sdc-form-label-py);min-width:0}.sdc-combobox__label-text{display:inline-flex;align-items:center}.required-field{margin-left:var(--sdc-form-required-ml);color:var(--sdc-error-color, #dc3545);font-weight:400}.sdc-combobox__info-tooltip-wrap{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;padding:0;margin:0}.sdc-combobox__info-tooltip-icon{display:inline-flex;align-items:center;justify-content:center;width:var(--sdc-form-tooltip-size);height:var(--sdc-form-tooltip-size);line-height:1;cursor:pointer;color:var(--sdc-form-tooltip-color)}.sdc-combobox__control{display:flex;align-items:stretch;min-height:var(--sdc-formfield-default-height);border:1px solid var(--sdc-formfield-default-border);border-radius:var(--sdc-formfield-border-radius);background:var(--sdc-formfield-default-bg, #fff);box-sizing:border-box;cursor:pointer;transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease}.sdc-combobox__control:hover{border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff))}.sdc-combobox__control:focus-within{border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff));box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 2px rgba(0, 123, 255, .14))}.sdc-combobox__control--invalid,.sdc-combobox__control--invalid:hover,.sdc-combobox__control--invalid:focus-within{border-color:var(--sdc-formfield-invalid-border, var(--sdc-error-color, #d98888));box-shadow:var(--sdc-formfield-invalid-focus-shadow, 0 0 0 2px rgba(217, 136, 136, .16))}.sdc-combobox__control--disabled,.sdc-combobox__control--disabled:hover{background-color:var(--sdc-formfield-disabled-bg);border-color:var(--sdc-formfield-default-border);box-shadow:none;cursor:not-allowed}.sdc-combobox__control--small{min-height:30px}.sdc-combobox__value{display:flex;align-items:center;flex:1 1 auto;min-width:0;gap:.5rem;padding:0 .75rem}.sdc-combobox__leading-icon{color:var(--sdc-button-icon-default);flex:0 0 auto}.sdc-combobox__chip-icon,.sdc-combobox__option-icon{color:var(--sdc-button-icon-default)}.sdc-combobox__input{width:100%;min-width:0;border:0;background:transparent;box-shadow:none;outline:0;font:inherit;color:inherit;line-height:var(--sdc-formfield-default-line-height);padding:0;cursor:pointer}.sdc-combobox__input::placeholder{color:var(--sdc-form-placeholder-color, #9ca3af)}.sdc-combobox__input:disabled{cursor:not-allowed}.sdc-combobox__multi-value{display:flex;align-items:center;gap:.5rem;flex:1 1 auto;min-width:0;flex-wrap:nowrap;overflow:hidden;position:relative;padding:.25rem 0}.sdc-combobox__placeholder{color:var(--sdc-form-placeholder-color, #9ca3af);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-combobox__chips{display:none}.sdc-combobox__chip-list{display:flex;align-items:center;gap:.375rem;flex:1 1 auto;min-width:0;margin:0;overflow:hidden;padding:0;list-style:none;white-space:nowrap;mask-image:linear-gradient(to right,#000 calc(100% - 12px),transparent 100%);-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 12px),transparent 100%)}.sdc-combobox__chip-list--measure{position:fixed;top:-9999px;left:0;z-index:-1;visibility:hidden;opacity:0;flex:0 0 auto;min-width:max-content;overflow:visible;pointer-events:none}.sdc-combobox__chip{display:inline-flex;align-items:center;gap:.5rem;flex:0 1 auto;min-width:0;max-width:100%;min-height:1.8rem;padding:.2rem .55rem;border:1px solid #888b99;border-radius:6px;background:#eeebf2;color:var(--sdc-text-default, #111827)}.sdc-combobox__chip-label{display:inline-block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdc-combobox__chip-remove,.sdc-combobox__chip-remove-placeholder{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;padding:0;border:0;background:transparent;color:inherit;line-height:1}.sdc-combobox__chip-remove{cursor:pointer}.sdc-combobox__chip-remove:focus-visible{outline:2px solid var(--sdc-primary-color, #007bff);outline-offset:2px;border-radius:3px}.sdc-combobox__summary{color:var(--sdc-text-default, #111827);display:inline-block;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-combobox__actions{display:flex;align-items:stretch;flex:0 0 auto}.sdc-combobox__icon-button{display:inline-flex;align-items:center;justify-content:center;min-width:2.5rem;padding:0 .75rem;border:0;background:transparent;color:var(--sdc-button-icon-default);cursor:pointer}.sdc-combobox__icon-button:disabled{background:var(--sdc-formfield-disabled-bg);cursor:not-allowed;opacity:.6}.sdc-combobox__icon-button:focus-visible{outline:2px solid var(--sdc-primary-color, #007bff);outline-offset:-2px;box-shadow:0 0 0 3px #007bff40}.sdc-combobox__icon-button:hover:not(:disabled){background:transparent}.sdc-combobox__icon-button--clear{min-width:2rem;padding:0 .5rem}.sdc-combobox__icon-button--toggle{border-left:1px solid var(--sdc-formfield-default-border)}.sdc-combobox__caret{transition:transform .16s ease}.sdc-combobox__caret--open{transform:rotate(180deg)}.sdc-combobox__panel{--sdc-combobox-panel-padding-x: .625rem;--sdc-combobox-panel-padding-y: .625rem;display:flex;flex-direction:column;gap:0;min-width:100%;padding:var(--sdc-combobox-panel-padding-y) var(--sdc-combobox-panel-padding-x) .5rem;overflow:hidden;box-sizing:border-box}.sdc-combobox__panel-search{flex:0 0 auto;margin-bottom:var(--sdc-combobox-panel-padding-y);width:100%}.sdc-combobox__panel-search-row{display:flex;align-items:center;gap:0;width:100%}.sdc-combobox__panel-select-all{display:inline-flex;align-items:center;justify-content:center;flex:0 0 2.5rem;min-width:2.5rem}.sdc-combobox__panel-searchbox{flex:1 1 auto;min-width:0}.sdc-combobox__panel-searchbox ::ng-deep .sdc-searchbox{width:100%}.sdc-combobox__panel-searchbox ::ng-deep .sdc-searchbox__group{width:100%;background:var(--sdc-formfield-default-bg, #fff);box-shadow:none!important;min-height:calc(var(--sdc-formfield-default-height) - .25rem)}.sdc-combobox__panel-searchbox ::ng-deep .sdc-searchbox__input{color:var(--p-text-color, var(--sdc-text-default, #111827));caret-color:var(--p-text-color, var(--sdc-text-default, #111827))}.sdc-combobox__options{display:flex;flex-direction:column;gap:0;flex:1 1 auto;min-height:0;margin:0 calc(-1 * var(--sdc-combobox-panel-padding-x));overflow:auto;padding:0;list-style:none}.sdc-combobox__options--virtualized{display:block}.sdc-combobox__options-list{margin:0;padding:0;list-style:none}.sdc-combobox__option{display:flex;align-items:stretch;gap:0;list-style:none;min-height:2.75rem;background:transparent;transition:background-color .16s ease,color .16s ease}.sdc-combobox__option-action{display:flex;align-items:center;gap:.75rem;min-height:2.75rem;flex:1 1 auto;width:100%;padding:.625rem calc(var(--sdc-combobox-panel-padding-x) + .75rem);border:0;border-radius:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer;transition:background-color .16s ease,color .16s ease,box-shadow .16s ease;box-sizing:border-box}.sdc-combobox__option--icon-selector .sdc-combobox__option-action{min-height:3.25rem}.sdc-combobox__option-action:hover,.sdc-combobox__option--active .sdc-combobox__option-action{background:transparent;box-shadow:none}.sdc-combobox__option:hover,.sdc-combobox__option--active,.sdc-combobox__option--selected{background:var(--sdc-combobox-option-hover-bg, #eeebf2)}.sdc-combobox__option-check{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:calc(2.5rem + var(--sdc-combobox-panel-padding-x));min-width:calc(2.5rem + var(--sdc-combobox-panel-padding-x));padding-left:var(--sdc-combobox-panel-padding-x);box-sizing:border-box}.sdc-combobox__option-check+.sdc-combobox__option-action{padding-left:.75rem}.sdc-combobox__option-content{display:inline-flex;align-items:center;gap:.5rem;flex:1 1 auto;min-width:0;color:#334155;font-size:.95rem}.sdc-combobox__option--icon-selector .sdc-combobox__option-content{align-items:flex-start}.sdc-combobox__option-texts{display:flex;flex:1 1 auto;flex-direction:column;gap:.125rem;min-width:0}.sdc-combobox__option-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdc-combobox__option-meta{color:var(--p-text-muted-color, #6b7280);font-family:var(--sdc-font-family-mono, \"Courier New\", monospace);font-size:.78rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdc-combobox__option-selected-icon{color:var(--sdc-primary-color, #007bff)}.sdc-combobox__loading{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:.875rem .75rem;color:var(--p-text-muted-color, #6b7280)}.sdc-combobox__loading-icon{color:var(--sdc-primary-color, #007bff)}.sdc-combobox__virtual-spacer{width:100%;flex:0 0 auto}.sdc-combobox__empty{--sdc-empty-state-inline-color: var(--p-text-muted-color, #6b7280);--sdc-empty-state-inline-font-size: .875rem;--sdc-empty-state-inline-line-height: 1.25rem;--sdc-empty-state-inline-padding: .5rem .625rem .375rem;flex:0 0 auto}::ng-deep .sdc-popover__panel.sdc-combobox__overlay-panel{box-shadow:0 12px 28px #0f172a24}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { 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: "ngmodule", type: TranslateModule }, { kind: "component", type: IconRendererComponent, selector: "sdc-icon-renderer", inputs: ["icon", "iconType", "size"] }, { kind: "component", type: CheckboxComponent, selector: "sdc-checkbox", inputs: ["label", "disabled", "commonCheckbox", "labelPosition", "size", "checked"], outputs: ["checkedChange"] }, { kind: "component", type: EmptyStateComponent, selector: "sdc-empty-state", inputs: ["id", "title", "variant", "titleParams", "iconClass", "description", "descriptionParams", "showPrimaryAction", "showSecondaryAction", "primaryActionLabel", "primaryActionLabelParams", "secondaryActionLabel", "secondaryActionLabelParams", "primaryModel"], outputs: ["primaryAction", "secondaryAction"] }, { kind: "component", type: PopoverComponent, selector: "sdc-popover", inputs: ["open", "disabled", "toggleOnTriggerClick", "closeOnOutsideClick", "closeOnEscape", "trapFocus", "focusOnOpen", "restoreFocusOnClose", "ariaLabel", "appendTo", "zIndex", "offset", "placement", "role", "matchTriggerWidth", "panelWidth", "panelMinWidth", "panelMaxWidth", "panelMaxHeight", "panelClass"], outputs: ["openChange"] }, { kind: "component", type: SearchboxComponent, selector: "sdc-searchbox", inputs: ["triggerMode", "debounceTimeMs", "ariaLabel", "inputRole", "inputAriaControls", "inputAriaDescribedBy", "inputAriaActiveDescendant", "inputAriaHaspopup", "inputAriaExpanded", "inputAutocomplete", "submitOnEnter", "clearOnEscape"], outputs: ["debouncedValueChange", "onSearch", "onClear"] }, { kind: "component", type: TooltipComponent, selector: "sdc-tooltip", inputs: ["pTooltip", "tooltipPosition", "tooltipEvent", "fitContent", "tooltipDisabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
936
936
|
}
|
|
937
937
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ComboboxComponent, decorators: [{
|
|
938
938
|
type: Component,
|
|
@@ -952,7 +952,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
952
952
|
useExisting: forwardRef(() => ComboboxComponent),
|
|
953
953
|
multi: true
|
|
954
954
|
}
|
|
955
|
-
], template: "<div class=\"sdc-combobox\">\n <div class=\"sdc-combobox__label-row\" *ngIf=\"ui.labelText || ui.infoTooltipText\">\n <label\n *ngIf=\"ui.labelText\"\n [id]=\"ui.labelId\"\n [for]=\"ui.labelForId\"\n class=\"sdc-combobox__label\"\n [attr.aria-label]=\"required ? ui.labelText + ' ' + ui.requiredFieldText : ui.labelText\"\n >\n <span class=\"sdc-combobox__label-text\">\n {{ ui.labelText }}\n <span *ngIf=\"required\" class=\"required-field\" aria-hidden=\"true\">*</span>\n </span>\n </label>\n\n <sdc-tooltip\n *ngIf=\"ui.infoTooltipText\"\n class=\"sdc-combobox__info-tooltip-wrap\"\n [pTooltip]=\"ui.infoTooltipText\"\n [tooltipPosition]=\"infoTooltipPosition\"\n [tooltipEvent]=\"infoTooltipEvent\"\n (click)=\"$event.stopPropagation()\"\n >\n <i class=\"fas fa-info-circle sdc-combobox__info-tooltip-icon\" aria-hidden=\"true\"></i>\n </sdc-tooltip>\n </div>\n\n <sdc-popover\n [open]=\"panelOpen\"\n [appendTo]=\"appendTo\"\n [zIndex]=\"zIndex\"\n [offset]=\"ui.panelOffset\"\n [ariaLabel]=\"ui.dropdownAriaLabel\"\n [matchTriggerWidth]=\"true\"\n [toggleOnTriggerClick]=\"false\"\n [closeOnEscape]=\"false\"\n [panelClass]=\"ui.panelOverlayClass\"\n (openChange)=\"onPopoverOpenChange($event)\"\n >\n <div\n sdc-popover-trigger\n #triggerControlRef\n class=\"sdc-combobox__control\"\n [attr.id]=\"multiple ? ui.controlId : null\"\n [class.sdc-combobox__control--multiple]=\"multiple\"\n [class.sdc-combobox__control--invalid]=\"invalid\"\n [class.sdc-combobox__control--disabled]=\"disabled\"\n [class.sdc-combobox__control--small]=\"size === 'small'\"\n [ngStyle]=\"getInputStyle()\"\n [attr.tabindex]=\"multiple && !disabled ? 0 : null\"\n [attr.role]=\"multiple ? 'combobox' : null\"\n [attr.aria-haspopup]=\"multiple ? 'listbox' : null\"\n [attr.aria-label]=\"multiple ? ui.comboboxAriaLabel : null\"\n [attr.aria-labelledby]=\"multiple ? ui.comboboxAriaLabelledBy : null\"\n [attr.aria-required]=\"multiple ? required : null\"\n [attr.aria-invalid]=\"multiple ? invalid : null\"\n [attr.aria-expanded]=\"multiple ? (panelOpen ? 'true' : 'false') : null\"\n [attr.aria-controls]=\"multiple ? ui.listboxId : null\"\n [attr.aria-activedescendant]=\"multiple ? activeDescendant : null\"\n [attr.aria-describedby]=\"multiple ? ui.messageId : null\"\n [attr.aria-autocomplete]=\"multiple ? 'list' : null\"\n (mousedown)=\"onControlMouseDown($event)\"\n (click)=\"onControlClick()\"\n (keydown)=\"multiple ? onTriggerKeydown($event) : null\"\n >\n <div class=\"sdc-combobox__value\">\n <ng-container *ngIf=\"!multiple; else multipleValueTpl\">\n <sdc-icon-renderer\n *ngIf=\"selectedSingleOption?.icon\"\n class=\"sdc-combobox__leading-icon\"\n [icon]=\"selectedSingleOption?.icon\"\n [iconType]=\"selectedSingleOption?.iconType\"\n [size]=\"16\"\n ></sdc-icon-renderer>\n\n <input\n #singleInputRef\n class=\"sdc-combobox__input\"\n type=\"text\"\n [id]=\"ui.controlId\"\n [name]=\"ui.inputName\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readOnly]=\"true\"\n [value]=\"selectedSingleOption?.text ?? ''\"\n [placeholder]=\"ui.placeholderText\"\n [attr.aria-label]=\"ui.comboboxAriaLabel\"\n [attr.aria-labelledby]=\"ui.comboboxAriaLabelledBy\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n aria-expanded=\"false\"\n [attr.aria-expanded]=\"panelOpen ? 'true' : 'false'\"\n [attr.aria-haspopup]=\"'listbox'\"\n aria-controls=\"combobox-field-listbox\"\n [attr.aria-controls]=\"ui.listboxId\"\n [attr.aria-activedescendant]=\"activeDescendant\"\n [attr.aria-describedby]=\"ui.messageId\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n (focus)=\"onInputFocus()\"\n (keydown)=\"onTriggerKeydown($event)\"\n />\n </ng-container>\n\n <ng-template #multipleValueTpl>\n <div #multiValueRef class=\"sdc-combobox__multi-value\">\n <ng-container *ngIf=\"!shouldDisplayChipSummary; else summaryTpl\">\n <ul\n class=\"sdc-combobox__chip-list\"\n *ngIf=\"selectedItems.length > 0\"\n [attr.aria-label]=\"selectedSummaryText\"\n >\n <li\n *ngFor=\"let item of selectedItems; trackBy: trackByOptionValue\"\n class=\"sdc-combobox__chip\"\n >\n <sdc-icon-renderer\n *ngIf=\"item.icon\"\n class=\"sdc-combobox__chip-icon\"\n [icon]=\"item.icon\"\n [iconType]=\"item.iconType\"\n [size]=\"14\"\n ></sdc-icon-renderer>\n\n <span class=\"sdc-combobox__chip-label\" [attr.title]=\"item.text\">{{ item.text }}</span>\n\n <button\n type=\"button\"\n class=\"sdc-combobox__chip-remove\"\n [attr.aria-label]=\"chipRemoveAriaLabel(item)\"\n (click)=\"removeSelectedItem(item, $event)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </li>\n </ul>\n </ng-container>\n\n <ng-template #summaryTpl>\n <span class=\"sdc-combobox__summary\" *ngIf=\"selectedItems.length > 0\">\n {{ selectedSummaryText }}\n </span>\n </ng-template>\n\n <span class=\"sdc-combobox__placeholder\" *ngIf=\"selectedItems.length === 0\">\n {{ ui.placeholderText }}\n </span>\n\n <ul\n #chipMeasureRef\n class=\"sdc-combobox__chip-list sdc-combobox__chip-list--measure\"\n *ngIf=\"selectedItems.length > 0\"\n aria-hidden=\"true\"\n >\n <li\n *ngFor=\"let item of selectedItems; trackBy: trackByOptionValue\"\n class=\"sdc-combobox__chip\"\n >\n <sdc-icon-renderer\n *ngIf=\"item.icon\"\n class=\"sdc-combobox__chip-icon\"\n [icon]=\"item.icon\"\n [iconType]=\"item.iconType\"\n [size]=\"14\"\n ></sdc-icon-renderer>\n\n <span class=\"sdc-combobox__chip-label\">{{ item.text }}</span>\n\n <span class=\"sdc-combobox__chip-remove-placeholder\" aria-hidden=\"true\">\n <i class=\"fas fa-times\"></i>\n </span>\n </li>\n </ul>\n </div>\n </ng-template>\n </div>\n\n <div class=\"sdc-combobox__actions\">\n <button\n *ngIf=\"hasClearAction\"\n type=\"button\"\n class=\"sdc-combobox__icon-button sdc-combobox__icon-button--clear\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ui.clearFieldText\"\n (click)=\"clearAll($event)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n\n <button\n type=\"button\"\n class=\"sdc-combobox__icon-button sdc-combobox__icon-button--toggle\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ui.dropdownAriaLabel\"\n [attr.aria-expanded]=\"panelOpen\"\n (mousedown)=\"onToggleMouseDown($event)\"\n (click)=\"togglePanel($event)\"\n >\n <i\n class=\"fas fa-caret-down sdc-combobox__caret\"\n [class.sdc-combobox__caret--open]=\"panelOpen\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n </div>\n\n <div\n sdc-popover-content\n class=\"sdc-combobox__panel\"\n [style.max-height.px]=\"panelMaxHeight\"\n >\n <div class=\"sdc-combobox__panel-search\">\n <div class=\"sdc-combobox__panel-search-row\">\n <span class=\"sdc-combobox__panel-select-all\" *ngIf=\"multiple\">\n <sdc-checkbox\n [ngModel]=\"areAllFilteredItemsSelected\"\n [attr.aria-label]=\"ui.selectAllText\"\n (ngModelChange)=\"toggleAllFilteredItems($event)\"\n ></sdc-checkbox>\n </span>\n\n <sdc-searchbox\n #panelSearchboxRef\n class=\"sdc-combobox__panel-searchbox\"\n [identity]=\"ui.panelSearchIdentity\"\n [disabled]=\"disabled\"\n [placeholder]=\"ui.panelSearchPlaceholder\"\n [ngModel]=\"searchTerm\"\n [debounceTimeMs]=\"0\"\n [submitOnEnter]=\"false\"\n [clearOnEscape]=\"false\"\n [ariaLabel]=\"ui.panelSearchAriaLabel\"\n [inputRole]=\"null\"\n [inputAutocomplete]=\"'off'\"\n [inputAriaControls]=\"ui.listboxId\"\n [inputAriaDescribedBy]=\"ui.messageId\"\n (ngModelChange)=\"onSearchTermChange($event)\"\n (onClear)=\"onSearchCleared()\"\n (keydown)=\"onSearchboxKeydown($event)\"\n ></sdc-searchbox>\n </div>\n </div>\n\n <output class=\"sdc-combobox__loading\" *ngIf=\"isOptionsLoading\" aria-live=\"polite\">\n <i class=\"fas fa-spinner fa-spin sdc-combobox__loading-icon\" aria-hidden=\"true\"></i>\n <span class=\"sdc-combobox__loading-text\">{{ ui.loadingItemsText }}</span>\n </output>\n\n <sdc-empty-state\n *ngIf=\"showEmptyState\"\n class=\"sdc-combobox__empty\"\n variant=\"inline-text\"\n [title]=\"ui.emptyTitleText\"\n ></sdc-empty-state>\n\n <ng-container *ngIf=\"filteredItems.length > 0\">\n <div\n *ngIf=\"useVirtualizedOptions; else standardOptionsTpl\"\n #optionsViewportRef\n class=\"sdc-combobox__options sdc-combobox__options--virtualized\"\n (scroll)=\"onOptionsScroll()\"\n (mousemove)=\"onOptionsPanelMouseMove()\"\n (mouseleave)=\"onOptionsPanelMouseLeave()\"\n >\n <!-- NOSONAR: custom combobox popup intentionally uses ARIA listbox semantics instead of a native select -->\n <div\n class=\"sdc-combobox__options-list\"\n [attr.id]=\"ui.listboxId\"\n [attr.aria-label]=\"ui.comboboxAriaLabel\"\n [attr.aria-labelledby]=\"ui.comboboxAriaLabelledBy\"\n [attr.role]=\"'listbox'\"\n [attr.aria-multiselectable]=\"multiple ? 'true' : null\"\n tabindex=\"-1\"\n >\n <div\n class=\"sdc-combobox__virtual-spacer\"\n [style.height.px]=\"beforeVirtualSpacerHeight\"\n aria-hidden=\"true\"\n ></div>\n\n <div\n *ngFor=\"let visibleOption of visibleFilteredItems\"\n class=\"sdc-combobox__option\"\n [class.sdc-combobox__option--active]=\"isOptionActive(visibleOption.index)\"\n [class.sdc-combobox__option--icon-selector]=\"iconSelector\"\n [class.sdc-combobox__option--selected]=\"!multiple && isOptionSelected(visibleOption.item)\"\n [attr.data-option-index]=\"visibleOption.index\"\n (mouseenter)=\"onOptionMouseEnter(visibleOption.index)\"\n >\n <div class=\"sdc-combobox__option-check\" *ngIf=\"multiple\">\n <sdc-checkbox\n [ngModel]=\"isOptionSelected(visibleOption.item)\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (ngModelChange)=\"onOptionCheckboxChange(visibleOption.item, $event)\"\n ></sdc-checkbox>\n </div>\n\n <!-- NOSONAR -->\n <!-- the custom listbox keeps option semantics on the focusable action for keyboard navigation -->\n <button\n type=\"button\"\n class=\"sdc-combobox__option-action\"\n [attr.id]=\"optionId(visibleOption.index)\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"isOptionSelected(visibleOption.item) ? 'true' : 'false'\"\n [attr.tabindex]=\"-1\"\n (keydown)=\"onOptionKeydown($event, visibleOption.item)\"\n (click)=\"onOptionClick(visibleOption.item)\"\n >\n <span class=\"sdc-combobox__option-content\">\n <sdc-icon-renderer\n *ngIf=\"visibleOption.item.icon\"\n class=\"sdc-combobox__option-icon\"\n [icon]=\"visibleOption.item.icon\"\n [iconType]=\"visibleOption.item.iconType\"\n [size]=\"16\"\n ></sdc-icon-renderer>\n\n <span class=\"sdc-combobox__option-texts\">\n <span class=\"sdc-combobox__option-label\">{{ visibleOption.item.text }}</span>\n <span\n class=\"sdc-combobox__option-meta\"\n *ngIf=\"optionMetaText(visibleOption.item) as optionMeta\"\n >\n {{ optionMeta }}\n </span>\n </span>\n </span>\n\n <i\n *ngIf=\"!multiple && isOptionSelected(visibleOption.item)\"\n class=\"fas fa-check sdc-combobox__option-selected-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n\n <div\n class=\"sdc-combobox__virtual-spacer\"\n [style.height.px]=\"afterVirtualSpacerHeight\"\n aria-hidden=\"true\"\n ></div>\n </div>\n </div>\n\n <ng-template #standardOptionsTpl>\n <!-- NOSONAR: custom combobox popup intentionally uses ARIA listbox semantics instead of a native select -->\n <div\n class=\"sdc-combobox__options\"\n [attr.id]=\"ui.listboxId\"\n [attr.aria-label]=\"ui.comboboxAriaLabel\"\n [attr.aria-labelledby]=\"ui.comboboxAriaLabelledBy\"\n [attr.role]=\"'listbox'\"\n [attr.aria-multiselectable]=\"multiple ? 'true' : null\"\n tabindex=\"-1\"\n (mousemove)=\"onOptionsPanelMouseMove()\"\n (mouseleave)=\"onOptionsPanelMouseLeave()\"\n >\n <div\n *ngFor=\"let option of filteredItems; let index = index; trackBy: trackByOptionValue\"\n class=\"sdc-combobox__option\"\n [class.sdc-combobox__option--active]=\"isOptionActive(index)\"\n [class.sdc-combobox__option--icon-selector]=\"iconSelector\"\n [class.sdc-combobox__option--selected]=\"!multiple && isOptionSelected(option)\"\n [attr.data-option-index]=\"index\"\n (mouseenter)=\"onOptionMouseEnter(index)\"\n >\n <div class=\"sdc-combobox__option-check\" *ngIf=\"multiple\">\n <sdc-checkbox\n [ngModel]=\"isOptionSelected(option)\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (ngModelChange)=\"onOptionCheckboxChange(option, $event)\"\n ></sdc-checkbox>\n </div>\n\n <!-- NOSONAR -->\n <!-- the custom listbox keeps option semantics on the focusable action for keyboard navigation -->\n <button\n type=\"button\"\n class=\"sdc-combobox__option-action\"\n [attr.id]=\"optionId(index)\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"isOptionSelected(option) ? 'true' : 'false'\"\n [attr.tabindex]=\"-1\"\n (keydown)=\"onOptionKeydown($event, option)\"\n (click)=\"onOptionClick(option)\"\n >\n <span class=\"sdc-combobox__option-content\">\n <sdc-icon-renderer\n *ngIf=\"option.icon\"\n class=\"sdc-combobox__option-icon\"\n [icon]=\"option.icon\"\n [iconType]=\"option.iconType\"\n [size]=\"16\"\n ></sdc-icon-renderer>\n\n <span class=\"sdc-combobox__option-texts\">\n <span class=\"sdc-combobox__option-label\">{{ option.text }}</span>\n <span\n class=\"sdc-combobox__option-meta\"\n *ngIf=\"optionMetaText(option) as optionMeta\"\n >\n {{ optionMeta }}\n </span>\n </span>\n </span>\n\n <i\n *ngIf=\"!multiple && isOptionSelected(option)\"\n class=\"fas fa-check sdc-combobox__option-selected-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n </div>\n </ng-template>\n </ng-container>\n </div>\n </sdc-popover>\n\n <small\n *ngIf=\"ui.messageText\"\n [id]=\"ui.messageId\"\n [ngClass]=\"getInvalidMessageClass()\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {{ ui.messageText }}\n </small>\n</div>\n", styles: [":host{display:block}.sdc-combobox__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-combobox__label{display:inline-flex;align-items:center;margin-bottom:0;line-height:1;padding-top:var(--sdc-form-label-py);padding-bottom:var(--sdc-form-label-py);min-width:0}.sdc-combobox__label-text{display:inline-flex;align-items:center}.required-field{margin-left:var(--sdc-form-required-ml);color:var(--sdc-error-color, #dc3545);font-weight:400}.sdc-combobox__info-tooltip-wrap{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;padding:0;margin:0}.sdc-combobox__info-tooltip-icon{display:inline-flex;align-items:center;justify-content:center;width:var(--sdc-form-tooltip-size);height:var(--sdc-form-tooltip-size);line-height:1;cursor:pointer;color:var(--sdc-form-tooltip-color)}.sdc-combobox__control{display:flex;align-items:stretch;min-height:var(--sdc-formfield-default-height);border:1px solid var(--sdc-formfield-default-border);border-radius:var(--sdc-formfield-border-radius);background:var(--sdc-formfield-default-bg, #fff);box-sizing:border-box;cursor:pointer;transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease}.sdc-combobox__control:hover{border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff))}.sdc-combobox__control:focus-within{border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff));box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 2px rgba(0, 123, 255, .14))}.sdc-combobox__control--invalid,.sdc-combobox__control--invalid:hover,.sdc-combobox__control--invalid:focus-within{border-color:var(--sdc-formfield-invalid-border, var(--sdc-error-color, #d98888));box-shadow:var(--sdc-formfield-invalid-focus-shadow, 0 0 0 2px rgba(217, 136, 136, .16))}.sdc-combobox__control--disabled,.sdc-combobox__control--disabled:hover{background-color:var(--sdc-formfield-disabled-bg);border-color:var(--sdc-formfield-default-border);box-shadow:none;cursor:not-allowed}.sdc-combobox__control--small{min-height:30px}.sdc-combobox__value{display:flex;align-items:center;flex:1 1 auto;min-width:0;gap:.5rem;padding:0 .75rem}.sdc-combobox__leading-icon{color:var(--sdc-button-icon-default);flex:0 0 auto}.sdc-combobox__chip-icon,.sdc-combobox__option-icon{color:var(--sdc-button-icon-default)}.sdc-combobox__input{width:100%;min-width:0;border:0;background:transparent;box-shadow:none;outline:0;font:inherit;color:inherit;line-height:var(--sdc-formfield-default-line-height);padding:0;cursor:pointer}.sdc-combobox__input::placeholder{color:var(--sdc-form-placeholder-color, #9ca3af)}.sdc-combobox__input:disabled{cursor:not-allowed}.sdc-combobox__multi-value{display:flex;align-items:center;gap:.5rem;flex:1 1 auto;min-width:0;flex-wrap:nowrap;overflow:hidden;position:relative;padding:.25rem 0}.sdc-combobox__placeholder{color:var(--sdc-form-placeholder-color, #9ca3af);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-combobox__chips{display:none}.sdc-combobox__chip-list{display:flex;align-items:center;gap:.375rem;flex:1 1 auto;min-width:0;margin:0;overflow:hidden;padding:0;list-style:none;white-space:nowrap}.sdc-combobox__chip-list--measure{position:fixed;top:-9999px;left:0;z-index:-1;visibility:hidden;flex:0 0 auto;min-width:max-content;overflow:visible;pointer-events:none}.sdc-combobox__chip{display:inline-flex;align-items:center;gap:.5rem;flex:0 1 auto;min-width:0;max-width:100%;min-height:1.8rem;padding:.2rem .55rem;border:1px solid #888b99;border-radius:6px;background:#eeebf2;color:var(--sdc-text-default, #111827)}.sdc-combobox__chip-label{display:inline-block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdc-combobox__chip-remove,.sdc-combobox__chip-remove-placeholder{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;padding:0;border:0;background:transparent;color:inherit;line-height:1}.sdc-combobox__chip-remove{cursor:pointer}.sdc-combobox__chip-remove:focus-visible{outline:2px solid var(--sdc-primary-color, #007bff);outline-offset:2px;border-radius:3px}.sdc-combobox__summary{color:var(--p-text-color, #111827);display:inline-block;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-combobox__actions{display:flex;align-items:stretch;flex:0 0 auto}.sdc-combobox__icon-button{display:inline-flex;align-items:center;justify-content:center;min-width:2.5rem;padding:0 .75rem;border:0;background:transparent;color:var(--sdc-button-icon-default);cursor:pointer}.sdc-combobox__icon-button:disabled{background:var(--sdc-formfield-disabled-bg);cursor:not-allowed;opacity:.6}.sdc-combobox__icon-button:focus-visible{outline:2px solid var(--sdc-primary-color, #007bff);outline-offset:-2px;box-shadow:0 0 0 3px #007bff40}.sdc-combobox__icon-button:hover:not(:disabled){background:transparent}.sdc-combobox__icon-button--clear{min-width:2rem;padding:0 .5rem}.sdc-combobox__icon-button--toggle{border-left:1px solid var(--sdc-formfield-default-border)}.sdc-combobox__caret{transition:transform .16s ease}.sdc-combobox__caret--open{transform:rotate(180deg)}.sdc-combobox__panel{--sdc-combobox-panel-padding-x: .625rem;--sdc-combobox-panel-padding-y: .625rem;display:flex;flex-direction:column;gap:0;min-width:100%;padding:var(--sdc-combobox-panel-padding-y) var(--sdc-combobox-panel-padding-x) .5rem;overflow:hidden;box-sizing:border-box}.sdc-combobox__panel-search{flex:0 0 auto;margin-bottom:var(--sdc-combobox-panel-padding-y);width:100%}.sdc-combobox__panel-search-row{display:flex;align-items:center;gap:0;width:100%}.sdc-combobox__panel-select-all{display:inline-flex;align-items:center;justify-content:center;flex:0 0 2.5rem;min-width:2.5rem}.sdc-combobox__panel-searchbox{flex:1 1 auto;min-width:0}.sdc-combobox__panel-searchbox ::ng-deep .sdc-searchbox{width:100%}.sdc-combobox__panel-searchbox ::ng-deep .sdc-searchbox__group{width:100%;background:var(--sdc-formfield-default-bg, #fff);box-shadow:none!important;min-height:calc(var(--sdc-formfield-default-height) - .25rem)}.sdc-combobox__panel-searchbox ::ng-deep .sdc-searchbox__input{color:var(--p-text-color, var(--sdc-text-default, #111827));caret-color:var(--p-text-color, var(--sdc-text-default, #111827))}.sdc-combobox__options{display:flex;flex-direction:column;gap:0;flex:1 1 auto;min-height:0;margin:0 calc(-1 * var(--sdc-combobox-panel-padding-x));overflow:auto;padding:0;list-style:none}.sdc-combobox__options--virtualized{display:block}.sdc-combobox__options-list{margin:0;padding:0;list-style:none}.sdc-combobox__option{display:flex;align-items:stretch;gap:0;list-style:none;min-height:2.75rem;background:transparent;transition:background-color .16s ease,color .16s ease}.sdc-combobox__option-action{display:flex;align-items:center;gap:.75rem;min-height:2.75rem;flex:1 1 auto;width:100%;padding:.625rem calc(var(--sdc-combobox-panel-padding-x) + .75rem);border:0;border-radius:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer;transition:background-color .16s ease,color .16s ease,box-shadow .16s ease;box-sizing:border-box}.sdc-combobox__option--icon-selector .sdc-combobox__option-action{min-height:3.25rem}.sdc-combobox__option-action:hover,.sdc-combobox__option--active .sdc-combobox__option-action{background:transparent;box-shadow:none}.sdc-combobox__option:hover,.sdc-combobox__option--active,.sdc-combobox__option--selected{background:var(--sdc-combobox-option-hover-bg, #eeebf2)}.sdc-combobox__option-check{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:calc(2.5rem + var(--sdc-combobox-panel-padding-x));min-width:calc(2.5rem + var(--sdc-combobox-panel-padding-x));padding-left:var(--sdc-combobox-panel-padding-x);box-sizing:border-box}.sdc-combobox__option-check+.sdc-combobox__option-action{padding-left:.75rem}.sdc-combobox__option-content{display:inline-flex;align-items:center;gap:.5rem;flex:1 1 auto;min-width:0;color:#334155;font-size:.95rem}.sdc-combobox__option--icon-selector .sdc-combobox__option-content{align-items:flex-start}.sdc-combobox__option-texts{display:flex;flex:1 1 auto;flex-direction:column;gap:.125rem;min-width:0}.sdc-combobox__option-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdc-combobox__option-meta{color:var(--p-text-muted-color, #6b7280);font-family:var(--sdc-font-family-mono, \"Courier New\", monospace);font-size:.78rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdc-combobox__option-selected-icon{color:var(--sdc-primary-color, #007bff)}.sdc-combobox__loading{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:.875rem .75rem;color:var(--p-text-muted-color, #6b7280)}.sdc-combobox__loading-icon{color:var(--sdc-primary-color, #007bff)}.sdc-combobox__virtual-spacer{width:100%;flex:0 0 auto}.sdc-combobox__empty{--sdc-empty-state-inline-color: var(--p-text-muted-color, #6b7280);--sdc-empty-state-inline-font-size: .875rem;--sdc-empty-state-inline-line-height: 1.25rem;--sdc-empty-state-inline-padding: .5rem .625rem .375rem;flex:0 0 auto}::ng-deep .sdc-popover__panel.sdc-combobox__overlay-panel{box-shadow:0 12px 28px #0f172a24}\n"] }]
|
|
955
|
+
], template: "<div class=\"sdc-combobox\">\n @if (ui.labelText || ui.infoTooltipText) {\n <div class=\"sdc-combobox__label-row\">\n @if (ui.labelText) {\n <label\n [id]=\"ui.labelId\"\n [for]=\"ui.labelForId\"\n class=\"sdc-combobox__label\"\n [attr.aria-label]=\"required ? ui.labelText + ' ' + ui.requiredFieldText : ui.labelText\"\n >\n <span class=\"sdc-combobox__label-text\">\n {{ ui.labelText }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n }\n </span>\n </label>\n }\n @if (ui.infoTooltipText) {\n <sdc-tooltip\n class=\"sdc-combobox__info-tooltip-wrap\"\n [pTooltip]=\"ui.infoTooltipText\"\n [tooltipPosition]=\"infoTooltipPosition\"\n [tooltipEvent]=\"infoTooltipEvent\"\n (click)=\"$event.stopPropagation()\"\n >\n <i class=\"fas fa-info-circle sdc-combobox__info-tooltip-icon\" aria-hidden=\"true\"></i>\n </sdc-tooltip>\n }\n </div>\n }\n\n <sdc-popover\n [open]=\"panelOpen\"\n [appendTo]=\"appendTo\"\n [zIndex]=\"zIndex\"\n [offset]=\"ui.panelOffset\"\n [ariaLabel]=\"ui.dropdownAriaLabel\"\n [matchTriggerWidth]=\"true\"\n [toggleOnTriggerClick]=\"false\"\n [closeOnEscape]=\"false\"\n [panelClass]=\"ui.panelOverlayClass\"\n (openChange)=\"onPopoverOpenChange($event)\"\n >\n <div\n sdc-popover-trigger\n #triggerControlRef\n class=\"sdc-combobox__control\"\n [attr.id]=\"multiple ? ui.controlId : null\"\n [class.sdc-combobox__control--multiple]=\"multiple\"\n [class.sdc-combobox__control--invalid]=\"invalid\"\n [class.sdc-combobox__control--disabled]=\"disabled\"\n [class.sdc-combobox__control--small]=\"size === 'small'\"\n [ngStyle]=\"getInputStyle()\"\n [attr.tabindex]=\"multiple && !disabled ? 0 : null\"\n [attr.role]=\"multiple ? 'combobox' : null\"\n [attr.aria-haspopup]=\"multiple ? 'listbox' : null\"\n [attr.aria-label]=\"multiple ? ui.comboboxAriaLabel : null\"\n [attr.aria-labelledby]=\"multiple ? ui.comboboxAriaLabelledBy : null\"\n [attr.aria-required]=\"multiple ? required : null\"\n [attr.aria-invalid]=\"multiple ? invalid : null\"\n [attr.aria-expanded]=\"multiple ? (panelOpen ? 'true' : 'false') : null\"\n [attr.aria-controls]=\"multiple ? ui.listboxId : null\"\n [attr.aria-activedescendant]=\"multiple ? activeDescendant : null\"\n [attr.aria-describedby]=\"multiple ? ui.messageId : null\"\n [attr.aria-autocomplete]=\"multiple ? 'list' : null\"\n (mousedown)=\"onControlMouseDown($event)\"\n (click)=\"onControlClick()\"\n (keydown)=\"multiple ? onTriggerKeydown($event) : null\"\n >\n <div class=\"sdc-combobox__value\">\n @if (!multiple) {\n @if (selectedSingleOption?.icon) {\n <sdc-icon-renderer\n class=\"sdc-combobox__leading-icon\"\n [icon]=\"selectedSingleOption?.icon\"\n [iconType]=\"selectedSingleOption?.iconType\"\n [size]=\"16\"\n ></sdc-icon-renderer>\n }\n <input\n #singleInputRef\n class=\"sdc-combobox__input\"\n type=\"text\"\n [id]=\"ui.controlId\"\n [name]=\"ui.inputName\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readOnly]=\"true\"\n [value]=\"selectedSingleOption?.text ?? ''\"\n [placeholder]=\"ui.placeholderText\"\n [attr.aria-label]=\"ui.comboboxAriaLabel\"\n [attr.aria-labelledby]=\"ui.comboboxAriaLabelledBy\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n aria-expanded=\"false\"\n [attr.aria-expanded]=\"panelOpen ? 'true' : 'false'\"\n [attr.aria-haspopup]=\"'listbox'\"\n aria-controls=\"combobox-field-listbox\"\n [attr.aria-controls]=\"ui.listboxId\"\n [attr.aria-activedescendant]=\"activeDescendant\"\n [attr.aria-describedby]=\"ui.messageId\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n (focus)=\"onInputFocus()\"\n (keydown)=\"onTriggerKeydown($event)\"\n />\n } @else {\n <div #multiValueRef class=\"sdc-combobox__multi-value\">\n @if (!shouldDisplayChipSummary) {\n @if (selectedItems.length > 0) {\n <ul\n class=\"sdc-combobox__chip-list\"\n [attr.aria-label]=\"selectedSummaryText\"\n >\n @for (item of selectedItems; track trackByOptionValue($index, item)) {\n <li\n class=\"sdc-combobox__chip\"\n >\n @if (item.icon) {\n <sdc-icon-renderer\n class=\"sdc-combobox__chip-icon\"\n [icon]=\"item.icon\"\n [iconType]=\"item.iconType\"\n [size]=\"14\"\n ></sdc-icon-renderer>\n }\n <span class=\"sdc-combobox__chip-label\" [attr.title]=\"item.text\">{{ item.text }}</span>\n <button\n type=\"button\"\n class=\"sdc-combobox__chip-remove\"\n [attr.aria-label]=\"chipRemoveAriaLabel(item)\"\n (click)=\"removeSelectedItem(item, $event)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </li>\n }\n </ul>\n }\n } @else {\n @if (selectedItems.length > 0) {\n <span class=\"sdc-combobox__summary\">\n {{ selectedSummaryText }}\n </span>\n }\n }\n @if (selectedItems.length === 0) {\n <span class=\"sdc-combobox__placeholder\">\n {{ ui.placeholderText }}\n </span>\n }\n @if (selectedItems.length > 0) {\n <ul\n #chipMeasureRef\n class=\"sdc-combobox__chip-list sdc-combobox__chip-list--measure\"\n aria-hidden=\"true\"\n >\n @for (item of selectedItems; track trackByOptionValue($index, item)) {\n <li\n class=\"sdc-combobox__chip\"\n >\n @if (item.icon) {\n <sdc-icon-renderer\n class=\"sdc-combobox__chip-icon\"\n [icon]=\"item.icon\"\n [iconType]=\"item.iconType\"\n [size]=\"14\"\n ></sdc-icon-renderer>\n }\n <span class=\"sdc-combobox__chip-label\">{{ item.text }}</span>\n <span class=\"sdc-combobox__chip-remove-placeholder\" aria-hidden=\"true\">\n <i class=\"fas fa-times\"></i>\n </span>\n </li>\n }\n </ul>\n }\n </div>\n }\n\n </div>\n\n <div class=\"sdc-combobox__actions\">\n @if (hasClearAction) {\n <button\n type=\"button\"\n class=\"sdc-combobox__icon-button sdc-combobox__icon-button--clear\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ui.clearFieldText\"\n (click)=\"clearAll($event)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n }\n\n <button\n type=\"button\"\n class=\"sdc-combobox__icon-button sdc-combobox__icon-button--toggle\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ui.dropdownAriaLabel\"\n [attr.aria-expanded]=\"panelOpen\"\n (mousedown)=\"onToggleMouseDown($event)\"\n (click)=\"togglePanel($event)\"\n >\n <i\n class=\"fas fa-caret-down sdc-combobox__caret\"\n [class.sdc-combobox__caret--open]=\"panelOpen\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n </div>\n\n <div\n sdc-popover-content\n class=\"sdc-combobox__panel\"\n [style.max-height.px]=\"panelMaxHeight\"\n >\n <div class=\"sdc-combobox__panel-search\">\n <div class=\"sdc-combobox__panel-search-row\">\n @if (multiple) {\n <span class=\"sdc-combobox__panel-select-all\">\n <sdc-checkbox\n [ngModel]=\"areAllFilteredItemsSelected\"\n [attr.aria-label]=\"ui.selectAllText\"\n (ngModelChange)=\"toggleAllFilteredItems($event)\"\n ></sdc-checkbox>\n </span>\n }\n\n <sdc-searchbox\n #panelSearchboxRef\n class=\"sdc-combobox__panel-searchbox\"\n [identity]=\"ui.panelSearchIdentity\"\n [disabled]=\"disabled\"\n [placeholder]=\"ui.panelSearchPlaceholder\"\n [ngModel]=\"searchTerm\"\n [debounceTimeMs]=\"0\"\n [submitOnEnter]=\"false\"\n [clearOnEscape]=\"false\"\n [ariaLabel]=\"ui.panelSearchAriaLabel\"\n [inputRole]=\"null\"\n [inputAutocomplete]=\"'off'\"\n [inputAriaControls]=\"ui.listboxId\"\n [inputAriaDescribedBy]=\"ui.messageId\"\n (ngModelChange)=\"onSearchTermChange($event)\"\n (onClear)=\"onSearchCleared()\"\n (keydown)=\"onSearchboxKeydown($event)\"\n ></sdc-searchbox>\n </div>\n </div>\n\n @if (isOptionsLoading) {\n <output class=\"sdc-combobox__loading\" aria-live=\"polite\">\n <i class=\"fas fa-spinner fa-spin sdc-combobox__loading-icon\" aria-hidden=\"true\"></i>\n <span class=\"sdc-combobox__loading-text\">{{ ui.loadingItemsText }}</span>\n </output>\n }\n\n @if (showEmptyState) {\n <sdc-empty-state\n class=\"sdc-combobox__empty\"\n variant=\"inline-text\"\n [title]=\"ui.emptyTitleText\"\n ></sdc-empty-state>\n }\n\n @if (filteredItems.length > 0) {\n @if (useVirtualizedOptions) {\n <div\n #optionsViewportRef\n class=\"sdc-combobox__options sdc-combobox__options--virtualized\"\n (scroll)=\"onOptionsScroll()\"\n (mousemove)=\"onOptionsPanelMouseMove()\"\n (mouseleave)=\"onOptionsPanelMouseLeave()\"\n >\n <!-- NOSONAR: custom combobox popup intentionally uses ARIA listbox semantics instead of a native select -->\n <div\n class=\"sdc-combobox__options-list\"\n [attr.id]=\"ui.listboxId\"\n [attr.aria-label]=\"ui.comboboxAriaLabel\"\n [attr.aria-labelledby]=\"ui.comboboxAriaLabelledBy\"\n [attr.role]=\"'listbox'\"\n [attr.aria-multiselectable]=\"multiple ? 'true' : null\"\n tabindex=\"-1\"\n >\n <div\n class=\"sdc-combobox__virtual-spacer\"\n [style.height.px]=\"beforeVirtualSpacerHeight\"\n aria-hidden=\"true\"\n ></div>\n @for (\n visibleOption of visibleFilteredItems;\n track trackByOptionValue(visibleOption.index, visibleOption.item)\n ) {\n <div\n class=\"sdc-combobox__option\"\n [class.sdc-combobox__option--active]=\"isOptionActive(visibleOption.index)\"\n [class.sdc-combobox__option--icon-selector]=\"iconSelector\"\n [class.sdc-combobox__option--selected]=\"!multiple && isOptionSelected(visibleOption.item)\"\n [attr.data-option-index]=\"visibleOption.index\"\n (mouseenter)=\"onOptionMouseEnter(visibleOption.index)\"\n >\n @if (multiple) {\n <div class=\"sdc-combobox__option-check\">\n <sdc-checkbox\n [ngModel]=\"isOptionSelected(visibleOption.item)\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (ngModelChange)=\"onOptionCheckboxChange(visibleOption.item, $event)\"\n ></sdc-checkbox>\n </div>\n }\n <!-- NOSONAR -->\n <!-- the custom listbox keeps option semantics on the focusable action for keyboard navigation -->\n <button\n type=\"button\"\n class=\"sdc-combobox__option-action\"\n [attr.id]=\"optionId(visibleOption.index)\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"isOptionSelected(visibleOption.item) ? 'true' : 'false'\"\n [attr.tabindex]=\"-1\"\n (keydown)=\"onOptionKeydown($event, visibleOption.item)\"\n (click)=\"onOptionClick(visibleOption.item)\"\n >\n <span class=\"sdc-combobox__option-content\">\n @if (visibleOption.item.icon) {\n <sdc-icon-renderer\n class=\"sdc-combobox__option-icon\"\n [icon]=\"visibleOption.item.icon\"\n [iconType]=\"visibleOption.item.iconType\"\n [size]=\"16\"\n ></sdc-icon-renderer>\n }\n <span class=\"sdc-combobox__option-texts\">\n <span class=\"sdc-combobox__option-label\">{{ visibleOption.item.text }}</span>\n @if (optionMetaText(visibleOption.item); as optionMeta) {\n <span\n class=\"sdc-combobox__option-meta\"\n >\n {{ optionMeta }}\n </span>\n }\n </span>\n </span>\n @if (!multiple && isOptionSelected(visibleOption.item)) {\n <i\n class=\"fas fa-check sdc-combobox__option-selected-icon\"\n aria-hidden=\"true\"\n ></i>\n }\n </button>\n </div>\n }\n <div\n class=\"sdc-combobox__virtual-spacer\"\n [style.height.px]=\"afterVirtualSpacerHeight\"\n aria-hidden=\"true\"\n ></div>\n </div>\n </div>\n } @else {\n <!-- NOSONAR: custom combobox popup intentionally uses ARIA listbox semantics instead of a native select -->\n <div\n class=\"sdc-combobox__options\"\n [attr.id]=\"ui.listboxId\"\n [attr.aria-label]=\"ui.comboboxAriaLabel\"\n [attr.aria-labelledby]=\"ui.comboboxAriaLabelledBy\"\n [attr.role]=\"'listbox'\"\n [attr.aria-multiselectable]=\"multiple ? 'true' : null\"\n tabindex=\"-1\"\n (mousemove)=\"onOptionsPanelMouseMove()\"\n (mouseleave)=\"onOptionsPanelMouseLeave()\"\n >\n @for (option of filteredItems; track trackByOptionValue(index, option); let index = $index) {\n <div\n class=\"sdc-combobox__option\"\n [class.sdc-combobox__option--active]=\"isOptionActive(index)\"\n [class.sdc-combobox__option--icon-selector]=\"iconSelector\"\n [class.sdc-combobox__option--selected]=\"!multiple && isOptionSelected(option)\"\n [attr.data-option-index]=\"index\"\n (mouseenter)=\"onOptionMouseEnter(index)\"\n >\n @if (multiple) {\n <div class=\"sdc-combobox__option-check\">\n <sdc-checkbox\n [ngModel]=\"isOptionSelected(option)\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n (ngModelChange)=\"onOptionCheckboxChange(option, $event)\"\n ></sdc-checkbox>\n </div>\n }\n <!-- NOSONAR -->\n <!-- the custom listbox keeps option semantics on the focusable action for keyboard navigation -->\n <button\n type=\"button\"\n class=\"sdc-combobox__option-action\"\n [attr.id]=\"optionId(index)\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"isOptionSelected(option) ? 'true' : 'false'\"\n [attr.tabindex]=\"-1\"\n (keydown)=\"onOptionKeydown($event, option)\"\n (click)=\"onOptionClick(option)\"\n >\n <span class=\"sdc-combobox__option-content\">\n @if (option.icon) {\n <sdc-icon-renderer\n class=\"sdc-combobox__option-icon\"\n [icon]=\"option.icon\"\n [iconType]=\"option.iconType\"\n [size]=\"16\"\n ></sdc-icon-renderer>\n }\n <span class=\"sdc-combobox__option-texts\">\n <span class=\"sdc-combobox__option-label\">{{ option.text }}</span>\n @if (optionMetaText(option); as optionMeta) {\n <span\n class=\"sdc-combobox__option-meta\"\n >\n {{ optionMeta }}\n </span>\n }\n </span>\n </span>\n @if (!multiple && isOptionSelected(option)) {\n <i\n class=\"fas fa-check sdc-combobox__option-selected-icon\"\n aria-hidden=\"true\"\n ></i>\n }\n </button>\n </div>\n }\n </div>\n }\n }\n </div>\n </sdc-popover>\n\n @if (ui.messageText) {\n <small\n [id]=\"ui.messageId\"\n [ngClass]=\"getInvalidMessageClass()\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {{ ui.messageText }}\n </small>\n }\n </div>\n", styles: [":host{display:block}.sdc-combobox__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-combobox__label{display:inline-flex;align-items:center;margin-bottom:0;line-height:1;padding-top:var(--sdc-form-label-py);padding-bottom:var(--sdc-form-label-py);min-width:0}.sdc-combobox__label-text{display:inline-flex;align-items:center}.required-field{margin-left:var(--sdc-form-required-ml);color:var(--sdc-error-color, #dc3545);font-weight:400}.sdc-combobox__info-tooltip-wrap{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;padding:0;margin:0}.sdc-combobox__info-tooltip-icon{display:inline-flex;align-items:center;justify-content:center;width:var(--sdc-form-tooltip-size);height:var(--sdc-form-tooltip-size);line-height:1;cursor:pointer;color:var(--sdc-form-tooltip-color)}.sdc-combobox__control{display:flex;align-items:stretch;min-height:var(--sdc-formfield-default-height);border:1px solid var(--sdc-formfield-default-border);border-radius:var(--sdc-formfield-border-radius);background:var(--sdc-formfield-default-bg, #fff);box-sizing:border-box;cursor:pointer;transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease}.sdc-combobox__control:hover{border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff))}.sdc-combobox__control:focus-within{border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff));box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 2px rgba(0, 123, 255, .14))}.sdc-combobox__control--invalid,.sdc-combobox__control--invalid:hover,.sdc-combobox__control--invalid:focus-within{border-color:var(--sdc-formfield-invalid-border, var(--sdc-error-color, #d98888));box-shadow:var(--sdc-formfield-invalid-focus-shadow, 0 0 0 2px rgba(217, 136, 136, .16))}.sdc-combobox__control--disabled,.sdc-combobox__control--disabled:hover{background-color:var(--sdc-formfield-disabled-bg);border-color:var(--sdc-formfield-default-border);box-shadow:none;cursor:not-allowed}.sdc-combobox__control--small{min-height:30px}.sdc-combobox__value{display:flex;align-items:center;flex:1 1 auto;min-width:0;gap:.5rem;padding:0 .75rem}.sdc-combobox__leading-icon{color:var(--sdc-button-icon-default);flex:0 0 auto}.sdc-combobox__chip-icon,.sdc-combobox__option-icon{color:var(--sdc-button-icon-default)}.sdc-combobox__input{width:100%;min-width:0;border:0;background:transparent;box-shadow:none;outline:0;font:inherit;color:inherit;line-height:var(--sdc-formfield-default-line-height);padding:0;cursor:pointer}.sdc-combobox__input::placeholder{color:var(--sdc-form-placeholder-color, #9ca3af)}.sdc-combobox__input:disabled{cursor:not-allowed}.sdc-combobox__multi-value{display:flex;align-items:center;gap:.5rem;flex:1 1 auto;min-width:0;flex-wrap:nowrap;overflow:hidden;position:relative;padding:.25rem 0}.sdc-combobox__placeholder{color:var(--sdc-form-placeholder-color, #9ca3af);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-combobox__chips{display:none}.sdc-combobox__chip-list{display:flex;align-items:center;gap:.375rem;flex:1 1 auto;min-width:0;margin:0;overflow:hidden;padding:0;list-style:none;white-space:nowrap;mask-image:linear-gradient(to right,#000 calc(100% - 12px),transparent 100%);-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 12px),transparent 100%)}.sdc-combobox__chip-list--measure{position:fixed;top:-9999px;left:0;z-index:-1;visibility:hidden;opacity:0;flex:0 0 auto;min-width:max-content;overflow:visible;pointer-events:none}.sdc-combobox__chip{display:inline-flex;align-items:center;gap:.5rem;flex:0 1 auto;min-width:0;max-width:100%;min-height:1.8rem;padding:.2rem .55rem;border:1px solid #888b99;border-radius:6px;background:#eeebf2;color:var(--sdc-text-default, #111827)}.sdc-combobox__chip-label{display:inline-block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdc-combobox__chip-remove,.sdc-combobox__chip-remove-placeholder{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;padding:0;border:0;background:transparent;color:inherit;line-height:1}.sdc-combobox__chip-remove{cursor:pointer}.sdc-combobox__chip-remove:focus-visible{outline:2px solid var(--sdc-primary-color, #007bff);outline-offset:2px;border-radius:3px}.sdc-combobox__summary{color:var(--sdc-text-default, #111827);display:inline-block;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-combobox__actions{display:flex;align-items:stretch;flex:0 0 auto}.sdc-combobox__icon-button{display:inline-flex;align-items:center;justify-content:center;min-width:2.5rem;padding:0 .75rem;border:0;background:transparent;color:var(--sdc-button-icon-default);cursor:pointer}.sdc-combobox__icon-button:disabled{background:var(--sdc-formfield-disabled-bg);cursor:not-allowed;opacity:.6}.sdc-combobox__icon-button:focus-visible{outline:2px solid var(--sdc-primary-color, #007bff);outline-offset:-2px;box-shadow:0 0 0 3px #007bff40}.sdc-combobox__icon-button:hover:not(:disabled){background:transparent}.sdc-combobox__icon-button--clear{min-width:2rem;padding:0 .5rem}.sdc-combobox__icon-button--toggle{border-left:1px solid var(--sdc-formfield-default-border)}.sdc-combobox__caret{transition:transform .16s ease}.sdc-combobox__caret--open{transform:rotate(180deg)}.sdc-combobox__panel{--sdc-combobox-panel-padding-x: .625rem;--sdc-combobox-panel-padding-y: .625rem;display:flex;flex-direction:column;gap:0;min-width:100%;padding:var(--sdc-combobox-panel-padding-y) var(--sdc-combobox-panel-padding-x) .5rem;overflow:hidden;box-sizing:border-box}.sdc-combobox__panel-search{flex:0 0 auto;margin-bottom:var(--sdc-combobox-panel-padding-y);width:100%}.sdc-combobox__panel-search-row{display:flex;align-items:center;gap:0;width:100%}.sdc-combobox__panel-select-all{display:inline-flex;align-items:center;justify-content:center;flex:0 0 2.5rem;min-width:2.5rem}.sdc-combobox__panel-searchbox{flex:1 1 auto;min-width:0}.sdc-combobox__panel-searchbox ::ng-deep .sdc-searchbox{width:100%}.sdc-combobox__panel-searchbox ::ng-deep .sdc-searchbox__group{width:100%;background:var(--sdc-formfield-default-bg, #fff);box-shadow:none!important;min-height:calc(var(--sdc-formfield-default-height) - .25rem)}.sdc-combobox__panel-searchbox ::ng-deep .sdc-searchbox__input{color:var(--p-text-color, var(--sdc-text-default, #111827));caret-color:var(--p-text-color, var(--sdc-text-default, #111827))}.sdc-combobox__options{display:flex;flex-direction:column;gap:0;flex:1 1 auto;min-height:0;margin:0 calc(-1 * var(--sdc-combobox-panel-padding-x));overflow:auto;padding:0;list-style:none}.sdc-combobox__options--virtualized{display:block}.sdc-combobox__options-list{margin:0;padding:0;list-style:none}.sdc-combobox__option{display:flex;align-items:stretch;gap:0;list-style:none;min-height:2.75rem;background:transparent;transition:background-color .16s ease,color .16s ease}.sdc-combobox__option-action{display:flex;align-items:center;gap:.75rem;min-height:2.75rem;flex:1 1 auto;width:100%;padding:.625rem calc(var(--sdc-combobox-panel-padding-x) + .75rem);border:0;border-radius:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer;transition:background-color .16s ease,color .16s ease,box-shadow .16s ease;box-sizing:border-box}.sdc-combobox__option--icon-selector .sdc-combobox__option-action{min-height:3.25rem}.sdc-combobox__option-action:hover,.sdc-combobox__option--active .sdc-combobox__option-action{background:transparent;box-shadow:none}.sdc-combobox__option:hover,.sdc-combobox__option--active,.sdc-combobox__option--selected{background:var(--sdc-combobox-option-hover-bg, #eeebf2)}.sdc-combobox__option-check{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:calc(2.5rem + var(--sdc-combobox-panel-padding-x));min-width:calc(2.5rem + var(--sdc-combobox-panel-padding-x));padding-left:var(--sdc-combobox-panel-padding-x);box-sizing:border-box}.sdc-combobox__option-check+.sdc-combobox__option-action{padding-left:.75rem}.sdc-combobox__option-content{display:inline-flex;align-items:center;gap:.5rem;flex:1 1 auto;min-width:0;color:#334155;font-size:.95rem}.sdc-combobox__option--icon-selector .sdc-combobox__option-content{align-items:flex-start}.sdc-combobox__option-texts{display:flex;flex:1 1 auto;flex-direction:column;gap:.125rem;min-width:0}.sdc-combobox__option-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdc-combobox__option-meta{color:var(--p-text-muted-color, #6b7280);font-family:var(--sdc-font-family-mono, \"Courier New\", monospace);font-size:.78rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdc-combobox__option-selected-icon{color:var(--sdc-primary-color, #007bff)}.sdc-combobox__loading{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:.875rem .75rem;color:var(--p-text-muted-color, #6b7280)}.sdc-combobox__loading-icon{color:var(--sdc-primary-color, #007bff)}.sdc-combobox__virtual-spacer{width:100%;flex:0 0 auto}.sdc-combobox__empty{--sdc-empty-state-inline-color: var(--p-text-muted-color, #6b7280);--sdc-empty-state-inline-font-size: .875rem;--sdc-empty-state-inline-line-height: 1.25rem;--sdc-empty-state-inline-padding: .5rem .625rem .375rem;flex:0 0 auto}::ng-deep .sdc-popover__panel.sdc-combobox__overlay-panel{box-shadow:0 12px 28px #0f172a24}\n"] }]
|
|
956
956
|
}], ctorParameters: () => [], propDecorators: { multiple: [{
|
|
957
957
|
type: Input
|
|
958
958
|
}], appendTo: [{
|
|
@@ -1002,4 +1002,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1002
1002
|
type: ViewChild,
|
|
1003
1003
|
args: ['optionsViewportRef']
|
|
1004
1004
|
}] } });
|
|
1005
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQWlCLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JPLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQ0wsb0NBQW9DLEVBQ3BDLGlDQUFpQyxFQUNqQyx3QkFBd0IsRUFDeEIsa0NBQWtDLEVBQ2xDLHlDQUF5QyxFQUN6Qyw0Q0FBNEMsRUFDNUMsK0NBQStDLEVBQy9DLDhCQUE4QixFQUM5QixpQ0FBaUMsRUFDbEMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFJekUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxF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U0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ0ssaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDRCxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDSyxjQUFjO3NCQUE3QyxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDRixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ0csY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ00sa0JBQWtCO3NCQUFsRCxTQUFTO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiwgZm9yd2FyZFJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQ09NQk9CT1hfREVGQVVMVF9NQVhfU0VMRUNURURfTEFCRUxTLFxuICBDT01CT0JPWF9ERUZBVUxUX1BBTkVMX01BWF9IRUlHSFQsXG4gIENPTUJPQk9YX0RFRkFVTFRfWl9JTkRFWCxcbiAgQ09NQk9CT1hfSUNPTl9TRUxFQ1RPUl9CVUZGRVJfU0laRSxcbiAgQ09NQk9CT1hfSUNPTl9TRUxFQ1RPUl9ERUZBVUxUX1JPV19IRUlHSFQsXG4gIENPTUJPQk9YX0lDT05fU0VMRUNUT1JfUk9XX0hFSUdIVF9XSVRIX0NMQVNTLFxuICBDT01CT0JPWF9JQ09OX1NFTEVDVE9SX1ZJRVdQT1JUX0ZBTExCQUNLX0hFSUdIVCxcbiAgQ09NQk9CT1hfUkVNT1ZFX0NISVBfTEFCRUxfS0VZLFxuICBDT01CT0JPWF9TRUxFQ1RFRF9JVEVNU19MQUJFTF9LRVlcbn0gZnJvbSAnLi4vLi4vY29yZS9jb25zdGFudHMvY29tYm9ib3guY29uc3QnO1xuaW1wb3J0IHsgSWNvblNlbGVjdG9yRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2ljb24tc2VsZWN0b3ItZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IElucHV0c0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUvZGlyZWN0aXZlcy9pbnB1dHMuZGlyZWN0aXZlJztcbmltcG9ydCB0eXBlIHsgQ2hpcFJlbW92ZUV2ZW50IH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcy9jaGlwcy50eXBlJztcbmltcG9ydCB0eXBlIHsgT3B0aW9uSXRlbSwgT3B0aW9ucywgT3B0aW9uVmFsdWUgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3NlbWFudGljcy50eXBlJztcbmltcG9ydCB0eXBlIHsgVG9vbHRpcEV2ZW50LCBUb29sdGlwUG9zaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3Rvb2x0aXAudHlwZSc7XG5pbXBvcnQgeyByZXNvbHZlVHJhbnNsYXRhYmxlVGV4dCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvaTE4bi51dGlsJztcbmltcG9ydCB7IG5leHRTZXF1ZW50aWFsSWQgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2lkLnV0aWwnO1xuaW1wb3J0IHsgSWNvblJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS9jb21wb25lbnRzL2ljb24tcmVuZGVyZXIvaWNvbi1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hib3hDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2hib3gvc2VhcmNoYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb29sdGlwQ29tcG9uZW50IH0gZnJvbSAnLi4vdG9vbHRpcC90b29sdGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBhc0NvbWJvYm94QXJyYXksIGJ1aWxkQ29tYm9ib3hTZWFyY2hUZXh0LCBidWlsZENvbWJvYm94VWlTdGF0ZSwgYnVpbGRJY29uU2VsZWN0b3JDb21ib2JveE9wdGlvbnMsIGJ1aWxkVmlzaWJsZUNvbWJvYm94T3B0aW9ucywgY3JlYXRlUmVzb2x2ZWRDb21ib2JveE9wdGlvbiwgZ2V0QWN0aXZlT3B0aW9uVmFsdWUsIGdldEZpcnN0U2VsZWN0ZWRGaWx0ZXJlZFZhbHVlLCBnZXRTZWxlY3RlZENvdW50LCBub3JtYWxpemVDb21ib2JveFNlYXJjaFRleHQsIG5vcm1hbGl6ZUV4dGVybmFsQ29tYm9ib3hWYWx1ZSwgc2hvdWxkQ29sbGFwc2VDb21ib2JveENoaXBEaXNwbGF5LCB0eXBlIENvbWJvYm94RGlzcGxheU1vZGUsIHR5cGUgQ29tYm9ib3hSZXNvbHZlZE9wdGlvbiwgdHlwZSBDb21ib2JveFVpU3RhdGUsIHR5cGUgQ29tYm9ib3hWYWx1ZSwgdHlwZSBDb21ib2JveFZpc2libGVPcHRpb24sIHR5cGUgSGlnaGxpZ2h0U3RlcCwgdHlwZSBQYW5lbENsb3NlUmVhc29uIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9jb21ib2JveC51dGlsJztcbkBDb21wb25lbnQoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBJY29uUmVuZGVyZXJDb21wb25lbnQsXG4gICAgQ2hlY2tib3hDb21wb25lbnQsXG4gICAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgICBQb3BvdmVyQ29tcG9uZW50LFxuICAgIFNlYXJjaGJveENvbXBvbmVudCxcbiAgICBUb29sdGlwQ29tcG9uZW50XG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnc2RjLWNvbWJvYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbWJvYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2NvbWJvYm94LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbWJvYm94Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbWJvYm94Q29tcG9uZW50IGV4dGVuZHMgSW5wdXRzQ29tcG9uZW50PE9wdGlvblZhbHVlIHwgT3B0aW9uVmFsdWVbXT4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlbGVjdG9yRGF0YSA9IGluamVjdChJY29uU2VsZWN0b3JEYXRhU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBnZW5lcmF0ZWRJZCA9IG5leHRTZXF1ZW50aWFsSWQoJ3NkYy1jb21ib2JveCcpO1xuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBhcHBlbmRUbzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSB6SW5kZXggPSBDT01CT0JPWF9ERUZBVUxUX1pfSU5ERVg7XG4gIEBJbnB1dCgpIG9wdGlvbnM6IE9wdGlvbnMgfCBzdHJpbmcgPSBbXTtcbiAgQElucHV0KCkgb3ZlcnJpZGVDaGlwTWVzc2FnZT86IHN0cmluZztcbiAgQElucHV0KCkgbWF4U2VsZWN0ZWRMYWJlbHMgPSBDT01CT0JPWF9ERUZBVUxUX01BWF9TRUxFQ1RFRF9MQUJFTFM7XG4gIEBJbnB1dCgpIHNob3dDbGVhciA9IHRydWU7XG4gIEBJbnB1dCgpIGljb25TZWxlY3RvciA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93SWNvbkNsYXNzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgaW5mb1Rvb2x0aXBQb3NpdGlvbjogVG9vbHRpcFBvc2l0aW9uID0gJ3JpZ2h0JztcbiAgQElucHV0KCkgaW5mb1Rvb2x0aXBFdmVudDogVG9vbHRpcEV2ZW50ID0gJ2JvdGgnO1xuICBAT3V0cHV0KCdvblNlbGVjdGVkSXRlbScpIHNlbGVjdGVkVmFsdWVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tYm9ib3hWYWx1ZT4oKTtcbiAgQFZpZXdDaGlsZChQb3BvdmVyQ29tcG9uZW50KSBwb3BvdmVyPzogUG9wb3ZlckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgndHJpZ2dlckNvbnRyb2xSZWYnKSB0cmlnZ2VyQ29udHJvbFJlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdzaW5nbGVJbnB1dFJlZicpIHNpbmdsZUlucHV0UmVmPzogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgncGFuZWxTZWFyY2hib3hSZWYnKSBwYW5lbFNlYXJjaGJveD86IFNlYXJjaGJveENvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnbXVsdGlWYWx1ZVJlZicpIG11bHRpVmFsdWVSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnY2hpcE1lYXN1cmVSZWYnKSBjaGlwTWVhc3VyZVJlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdvcHRpb25zVmlld3BvcnRSZWYnKSBvcHRpb25zVmlld3BvcnRSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgcHVibGljIGZpbHRlcmVkSXRlbXM6IENvbWJvYm94UmVzb2x2ZWRPcHRpb25bXSA9IFtdO1xuICBwdWJsaWMgdmlzaWJsZUZpbHRlcmVkSXRlbXM6IENvbWJvYm94VmlzaWJsZU9wdGlvbltdID0gW107XG4gIHB1YmxpYyBvdmVycmlkZSB2YWx1ZTogQ29tYm9ib3hWYWx1ZSA9IG51bGw7XG4gIHB1YmxpYyBkaXNwbGF5TW9kZTogQ29tYm9ib3hEaXNwbGF5TW9kZSA9ICdjaGlwJztcbiAgcHVibGljIHBhbmVsT3BlbiA9IGZhbHNlO1xuICBwdWJsaWMgaGlnaGxpZ2h0ZWRJbmRleCA9IC0xO1xuICBwcml2YXRlIHBvaW50ZXJNb3ZlZFNpbmNlS2V5Ym9hcmQgPSB0cnVlO1xuICBwdWJsaWMgc2VhcmNoVGVybSA9ICcnO1xuICBwdWJsaWMgaWNvbk9wdGlvbnNMb2FkaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX29wdGlvbnNDYWNoZUtleTogdW5rbm93biA9IG51bGw7XG4gIHByaXZhdGUgX29wdGlvbnNDYWNoZUxhbmcgPSAnJztcbiAgcHJpdmF0ZSBfb3B0aW9uc0NhY2hlOiBDb21ib2JveFJlc29sdmVkT3B0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBfaWNvbk9wdGlvbnNDYWNoZUxhbmcgPSAnJztcbiAgcHJpdmF0ZSBfaWNvbk9wdGlvbnNDYWNoZTogQ29tYm9ib3hSZXNvbHZlZE9wdGlvbltdID0gW107XG4gIHByaXZhdGUgaWNvbk9wdGlvbnNMb2FkUHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHNraXBOZXh0Rm9jdXNPcGVuID0gZmFsc2U7XG4gIHByaXZhdGUgY2xpY2tXaWxsT3BlblBhbmVsID0gZmFsc2U7XG4gIHByaXZhdGUgY2hpcExheW91dE9ic2VydmVyPzogUmVzaXplT2JzZXJ2ZXI7XG4gIHByaXZhdGUgdmlzaWJsZVN0YXJ0SW5kZXggPSAwO1xuICBwcml2YXRlIHZpc2libGVFbmRJbmRleCA9IDA7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2V0T3B0aW9uc0NhY2hlKCk7XG4gICAgICAgIHRoaXMucmVmcmVzaENvbWJvYm94U3RhdGUoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVPcHRpb25zQ2FjaGVDaGFuZ2VzKGNoYW5nZXMpO1xuICAgIHRoaXMuaGFuZGxlVmlydHVhbFdpbmRvd0NoYW5nZXMoY2hhbmdlcyk7XG4gICAgdGhpcy5oYW5kbGVJY29uU2VsZWN0b3JDaGFuZ2VzKGNoYW5nZXMpO1xuICAgIHRoaXMubm9ybWFsaXplVmFsdWVGb3JNdWx0aXBsZU1vZGUoY2hhbmdlcyk7XG4gICAgaWYgKHRoaXMuc2hvdWxkUmVmcmVzaEZpbHRlcmVkU3RhdGUoY2hhbmdlcykpIHtcbiAgICAgIHRoaXMucmVmcmVzaEZpbHRlcmVkSXRlbXModGhpcy5pbnZhbGlkICYmICF0aGlzLmhhc1NlYXJjaFF1ZXJ5KTtcbiAgICAgIHRoaXMuc3luY0hpZ2hsaWdodFdpdGhTZWxlY3Rpb24oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2hvdWxkUmVmcmVzaERpc3BsYXlNb2RlKGNoYW5nZXMpKSB7XG4gICAgICB0aGlzLnVwZGF0ZURpc3BsYXlNb2RlKCk7XG4gICAgICB0aGlzLnNjaGVkdWxlQ2hpcFByZXNlbnRhdGlvblN5bmMoKTtcbiAgICB9XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IG11bHRpVmFsdWVFbGVtZW50ID0gdGhpcy5tdWx0aVZhbHVlUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnICYmIG11bHRpVmFsdWVFbGVtZW50KSB7XG4gICAgICB0aGlzLmNoaXBMYXlvdXRPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB0aGlzLnNjaGVkdWxlQ2hpcFByZXNlbnRhdGlvblN5bmMoKSk7XG4gICAgICB0aGlzLmNoaXBMYXlvdXRPYnNlcnZlci5vYnNlcnZlKG11bHRpVmFsdWVFbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5zY2hlZHVsZUNoaXBQcmVzZW50YXRpb25TeW5jKCk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jaGlwTGF5b3V0T2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgfVxuICBvdmVycmlkZSB3cml0ZVZhbHVlKHZhbHVlOiBDb21ib2JveFZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IG5vcm1hbGl6ZUV4dGVybmFsQ29tYm9ib3hWYWx1ZSh2YWx1ZSwgdGhpcy5tdWx0aXBsZSk7XG4gICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XG4gICAgdGhpcy5lbnN1cmVJY29uU2VsZWN0b3JPcHRpb25zTG9hZGVkKCk7XG4gICAgdGhpcy5yZWZyZXNoRmlsdGVyZWRJdGVtcygpO1xuICAgIHRoaXMuc3luY0hpZ2hsaWdodFdpdGhTZWxlY3Rpb24oKTtcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXlNb2RlKCk7XG4gICAgdGhpcy5zY2hlZHVsZUNoaXBQcmVzZW50YXRpb25TeW5jKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgZ2V0IHVpKCk6IENvbWJvYm94VWlTdGF0ZSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tYm9ib3hVaVN0YXRlKHtcbiAgICAgIGdlbmVyYXRlZElkOiB0aGlzLmdlbmVyYXRlZElkLFxuICAgICAgaWRlbnRpdHlJZDogdGhpcy5pZGVudGl0eS5pZCxcbiAgICAgIGlkZW50aXR5TmFtZTogdGhpcy5pZGVudGl0eS5uYW1lLFxuICAgICAgbGFiZWw6IHRoaXMubGFiZWwsXG4gICAgICBwbGFjZWhvbGRlcjogdGhpcy5wbGFjZWhvbGRlcixcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIGluZm9Ub29sdGlwOiB0aGlzLmluZm9Ub29sdGlwLFxuICAgICAgcmVxdWlyZWQ6IHRoaXMucmVxdWlyZWQsXG4gICAgICB0cmFuc2xhdGU6IHRoaXMudHJhbnNsYXRlLFxuICAgICAgdHJhbnNsYXRlVGV4dDogKHZhbHVlKSA9PiB0aGlzLnRyYW5zbGF0ZVRleHQodmFsdWUpXG4gICAgfSk7XG4gIH1cbiAgZ2V0IG5vcm1hbGl6ZWRPcHRpb25zKCk6IE9wdGlvbkl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMubm9ybWFsaXplT3B0aW9ucygpO1xuICB9XG4gIGdldCBzZWxlY3RlZFNpbmdsZU9wdGlvbigpOiBDb21ib2JveFJlc29sdmVkT3B0aW9uIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlT3B0aW9uKHRoaXMudmFsdWUpO1xuICB9XG4gIGdldCBzZWxlY3RlZEl0ZW1zKCk6IENvbWJvYm94UmVzb2x2ZWRPcHRpb25bXSB7XG4gICAgcmV0dXJuIGFzQ29tYm9ib3hBcnJheSh0aGlzLnZhbHVlKVxuICAgICAgLm1hcCgoZW50cnkpID0+IHRoaXMucmVzb2x2ZU9wdGlvbihlbnRyeSkpXG4gICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBDb21ib2JveFJlc29sdmVkT3B0aW9uID0+ICEhaXRlbSk7XG4gIH1cbiAgZ2V0IHNob3VsZERpc3BsYXlDaGlwU3VtbWFyeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSAmJiB0aGlzLmRpc3BsYXlNb2RlID09PSAnc3VtbWFyeScgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDA7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkSXRlbXNMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlVHJhbnNsYXRhYmxlVGV4dChcbiAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgdGhpcy5vdmVycmlkZUNoaXBNZXNzYWdlLFxuICAgICAgQ09NQk9CT1hfU0VMRUNURURfSVRFTVNfTEFCRUxfS0VZLFxuICAgICAgeyBjb3VudDogdGhpcy5zZWxlY3RlZENvdW50IH1cbiAgICApO1xuICB9XG4gIGdldCBzZWxlY3RlZFN1bW1hcnlUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtc0xhYmVsLnJlcGxhY2UoL1xce2NvdW50XFx9L2csIFN0cmluZyh0aGlzLnNlbGVjdGVkQ291bnQpKTtcbiAgfVxuICBnZXQgYWN0aXZlRGVzY2VuZGFudCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRlZEluZGV4ID49IDAgPyB0aGlzLm9wdGlvbklkKHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCkgOiBudWxsO1xuICB9XG4gIGdldCBoYXNDbGVhckFjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93Q2xlYXIgJiYgdGhpcy5zZWxlY3RlZENvdW50ID4gMDtcbiAgfVxuICBnZXQgcGFuZWxNYXhIZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gQ09NQk9CT1hfREVGQVVMVF9QQU5FTF9NQVhfSEVJR0hUO1xuICB9XG4gIGdldCBhcmVBbGxGaWx0ZXJlZEl0ZW1zU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGggPiAwICYmIHRoaXMuZmlsdGVyZWRJdGVtcy5ldmVyeSgoaXRlbSkgPT4gdGhpcy5pc09wdGlvblNlbGVjdGVkKGl0ZW0pKTtcbiAgfVxuICBnZXQgaGFzU2VhcmNoUXVlcnkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoVGVybS50cmltKCkubGVuZ3RoID4gMDtcbiAgfVxuICBnZXQgaXNPcHRpb25zTG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pY29uU2VsZWN0b3IgJiYgdGhpcy5pY29uT3B0aW9uc0xvYWRpbmcgJiYgdGhpcy5faWNvbk9wdGlvbnNDYWNoZUxhbmcgIT09IHRoaXMuY3VycmVudExhbmc7XG4gIH1cbiAgZ2V0IHVzZVZpcnR1YWxpemVkT3B0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pY29uU2VsZWN0b3IgJiYgdGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCA+IDA7XG4gIH1cbiAgZ2V0IHNob3dFbXB0eVN0YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc09wdGlvbnNMb2FkaW5nICYmIHRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGggPT09IDA7XG4gIH1cbiAgZ2V0IG9wdGlvblJvd0hlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNob3dJY29uQ2xhc3NcbiAgICAgID8gQ09NQk9CT1hfSUNPTl9TRUxFQ1RPUl9ST1dfSEVJR0hUX1dJVEhfQ0xBU1NcbiAgICAgIDogQ09NQk9CT1hfSUNPTl9TRUxFQ1RPUl9ERUZBVUxUX1JPV19IRUlHSFQ7XG4gIH1cbiAgZ2V0IGJlZm9yZVZpcnR1YWxTcGFjZXJIZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlU3RhcnRJbmRleCAqIHRoaXMub3B0aW9uUm93SGVpZ2h0O1xuICB9XG4gIGdldCBhZnRlclZpcnR1YWxTcGFjZXJIZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgKHRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGggLSB0aGlzLnZpc2libGVFbmRJbmRleCkgKiB0aGlzLm9wdGlvblJvd0hlaWdodCk7XG4gIH1cbiAgb25TZWFyY2goZXZlbnQ6IHsgcXVlcnk/OiBzdHJpbmcgfSB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uU2VhcmNoVGVybUNoYW5nZShTdHJpbmcoZXZlbnQ/LnF1ZXJ5ID8/ICcnKSk7XG4gIH1cbiAgb25QYW5lbElucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMub25TZWFyY2hUZXJtQ2hhbmdlKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGwpPy52YWx1ZSA/PyAnJyk7XG4gIH1cbiAgb25TZWFyY2hUZXJtQ2hhbmdlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudEFjdGl2ZVZhbHVlID0gdGhpcy5hY3RpdmVPcHRpb25WYWx1ZTtcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSB2YWx1ZSA/PyAnJztcbiAgICB0aGlzLm9wZW5QYW5lbCh7IGZvY3VzU2VhcmNoOiBmYWxzZSB9KTtcbiAgICB0aGlzLnJlZnJlc2hGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgdGhpcy5zeW5jSGlnaGxpZ2h0V2l0aFNlbGVjdGlvbihjdXJyZW50QWN0aXZlVmFsdWUpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIG9uU2VhcmNoQ2xlYXJlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSAnJztcbiAgICB0aGlzLnJlZnJlc2hGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgdGhpcy5zeW5jSGlnaGxpZ2h0V2l0aFNlbGVjdGlvbigpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuZm9jdXNTZWFyY2hib3hTb29uKCk7XG4gIH1cbiAgb25PcHRpb25zU2Nyb2xsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy51c2VWaXJ0dWFsaXplZE9wdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zeW5jVmlzaWJsZUZpbHRlcmVkSXRlbXMoKTtcbiAgfVxuICBvbklucHV0Rm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2tpcE5leHRGb2N1c09wZW4pIHtcbiAgICAgIHRoaXMuc2tpcE5leHRGb2N1c09wZW4gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2xpY2tXaWxsT3BlblBhbmVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnBhbmVsT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9wZW5QYW5lbEFuZEZvY3VzU2VhcmNoKCk7XG4gIH1cbiAgb25JbnB1dEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQudGFyZ2V0LmlkID09PSB0aGlzLnVpLnBhbmVsU2VhcmNoSWRlbnRpdHkuaWQpIHtcbiAgICAgIHRoaXMub25TZWFyY2hib3hLZXlkb3duKGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vblRyaWdnZXJLZXlkb3duKGV2ZW50KTtcbiAgfVxuICBvblRyaWdnZXJLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFuZGxlUHJpbnRhYmxlVHJpZ2dlcktleShldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFuZGxlVHJpZ2dlckFycm93S2V5KGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYW5kbGVUcmlnZ2VyT3BlbktleShldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVDbG9zZU9yQmFja3NwYWNlS2V5KGV2ZW50KTtcbiAgfVxuICBvblNlYXJjaGJveEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYW5kbGVTZWFyY2hib3hBcnJvd0tleShldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFuZGxlU2VhcmNoYm94Qm91bmRhcnlLZXkoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmhhbmRsZVNlYXJjaGJveFNlbGVjdGlvbktleShldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVDbG9zZU9yQmFja3NwYWNlS2V5KGV2ZW50KTtcbiAgfVxuICBvbkNvbnRyb2xNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCBldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAodGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgIC8vIEtlZXAgdGhlIHBhbmVsIHNlYXJjaGJveCBmb2N1c2VkIGV2ZW4gd2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIHRyaWdnZXIgYXJlYSBhZ2Fpbi5cbiAgICAgIC8vIFdpdGhvdXQgcHJldmVudGluZyB0aGUgdHJpZ2dlciBmcm9tIHRha2luZyBmb2N1cyBmaXJzdCwgdGhlIGNhcmV0IG1heSBkaXNhcHBlYXIgZXZlblxuICAgICAgLy8gdGhvdWdoIHR5cGluZyBzdGlsbCB1cGRhdGVzIHRoZSBzZWFyY2hib3guXG4gICAgICB0aGlzLmZvY3VzU2VhcmNoYm94U29vbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBTdXBwcmVzcyBmb2N1cy10cmlnZ2VyZWQgb3BlbjogaW4gc2luZ2xlIG1vZGUgdGhlIGlucHV0IHJlY2VpdmVzIGZvY3VzIG9uIG1vdXNlZG93bixcbiAgICAvLyB3aGljaCBmaXJlcyBvbklucHV0Rm9jdXMoKSBiZWZvcmUgdGhlIGNsaWNrIGV2ZW50LiBXaXRob3V0IHRoaXMgZmxhZywgb25JbnB1dEZvY3VzXG4gICAgLy8gd291bGQgb3BlbiB0aGUgcGFuZWwgYW5kIHRoZSBzdWJzZXF1ZW50IGNsaWNrIChvbkNvbnRyb2xDbGljaykgd291bGQgaW1tZWRpYXRlbHkgY2xvc2UgaXQuXG4gICAgdGhpcy5jbGlja1dpbGxPcGVuUGFuZWwgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLmNsaWNrV2lsbE9wZW5QYW5lbCA9IGZhbHNlOyB9LCAwKTtcbiAgfVxuICBvbkNvbnRyb2xDbGljaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgIHRoaXMuZm9jdXNTZWFyY2hib3hTb29uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3BlblBhbmVsQW5kRm9jdXNTZWFyY2goKTtcbiAgfVxuICBvblRvZ2dsZU1vdXNlRG93bihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIG9uUG9wb3Zlck9wZW5DaGFuZ2Uob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChvcGVuIHx8ICF0aGlzLnBhbmVsT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlUGFuZWwoJ291dHNpZGUnKTtcbiAgfVxuICB0b2dnbGVQYW5lbChldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0Py4oKTtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uPy4oKTtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgIHRoaXMuY2xvc2VQYW5lbCgndG9nZ2xlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3BlblBhbmVsQW5kRm9jdXNTZWFyY2goKTtcbiAgfVxuICBjbGVhckFsbChldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0Py4oKTtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uPy4oKTtcbiAgICBjb25zdCBjbGVhcmVkVmFsdWU6IE9wdGlvblZhbHVlIHwgT3B0aW9uVmFsdWVbXSB8IG51bGwgPSB0aGlzLm11bHRpcGxlID8gW10gOiBudWxsO1xuICAgIGNvbnN0IHNob3VsZFJlZm9jdXNTZWFyY2ggPSB0aGlzLnBhbmVsT3BlbjtcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSAnJztcbiAgICB0aGlzLnZhbHVlID0gY2xlYXJlZFZhbHVlO1xuICAgIHRoaXMuaW52YWxpZCA9IGZhbHNlO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcmVkSXRlbXMoKTtcbiAgICB0aGlzLmNvbW1pdFZhbHVlKGNsZWFyZWRWYWx1ZSk7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlRXZlbnQuZW1pdChjbGVhcmVkVmFsdWUpO1xuICAgIHRoaXMudXBkYXRlRGlzcGxheU1vZGUoKTtcbiAgICB0aGlzLnNjaGVkdWxlQ2hpcFByZXNlbnRhdGlvblN5bmMoKTtcbiAgICB0aGlzLnN5bmNIaWdobGlnaHRXaXRoU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgaWYgKHNob3VsZFJlZm9jdXNTZWFyY2gpIHtcbiAgICAgIHRoaXMuZm9jdXNTZWFyY2hib3hTb29uKCk7XG4gICAgfVxuICB9XG4gIG9uT3B0aW9uQ2xpY2sob3B0aW9uOiBDb21ib2JveFJlc29sdmVkT3B0aW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMudG9nZ2xlT3B0aW9uKG9wdGlvbik7XG4gICAgICB0aGlzLmZvY3VzU2VhcmNoYm94U29vbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdFNpbmdsZU9wdGlvbihvcHRpb24pO1xuICB9XG4gIG9uT3B0aW9uQ2hlY2tib3hDaGFuZ2Uob3B0aW9uOiBDb21ib2JveFJlc29sdmVkT3B0aW9uLCBjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVPcHRpb24ob3B0aW9uLCBjaGVja2VkKTtcbiAgICB0aGlzLmZvY3VzU2VhcmNoYm94U29vbigpO1xuICB9XG4gIG9uT3B0aW9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgb3B0aW9uOiBDb21ib2JveFJlc29sdmVkT3B0aW9uKTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyAmJiBldmVudC5rZXkgIT09ICcgJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMub25PcHRpb25DbGljayhvcHRpb24pO1xuICB9XG4gIHRvZ2dsZUFsbEZpbHRlcmVkSXRlbXMoY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50QWN0aXZlVmFsdWUgPSB0aGlzLmFjdGl2ZU9wdGlvblZhbHVlO1xuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gbmV3IFNldChhc0NvbWJvYm94QXJyYXkodGhpcy52YWx1ZSkpO1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHRoaXMuZmlsdGVyZWRJdGVtcykge1xuICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZXMuYWRkKG9wdGlvbi52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RlZFZhbHVlcy5kZWxldGUob3B0aW9uLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgb3JkZXJlZFZhbHVlcyA9IHRoaXMubm9ybWFsaXplT3B0aW9ucygpXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gc2VsZWN0ZWRWYWx1ZXMuaGFzKGVudHJ5LnZhbHVlKSlcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiBlbnRyeS52YWx1ZSk7XG4gICAgdGhpcy5wcm9wYWdhdGVGcm9tVmFsdWUob3JkZXJlZFZhbHVlcyk7XG4gICAgdGhpcy5yZWZyZXNoRmlsdGVyZWRJdGVtcygpO1xuICAgIHRoaXMuc3luY0hpZ2hsaWdodFdpdGhTZWxlY3Rpb24oY3VycmVudEFjdGl2ZVZhbHVlKTtcbiAgICB0aGlzLmZvY3VzU2VhcmNoYm94U29vbigpO1xuICB9XG4gIHJlbW92ZVNlbGVjdGVkSXRlbShvcHRpb246IENvbWJvYm94UmVzb2x2ZWRPcHRpb24sIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQ/LigpO1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24/LigpO1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50QWN0aXZlVmFsdWUgPSB0aGlzLmFjdGl2ZU9wdGlvblZhbHVlO1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPSBhc0NvbWJvYm94QXJyYXkodGhpcy52YWx1ZSkuZmlsdGVyKChlbnRyeSkgPT4gIU9iamVjdC5pcyhlbnRyeSwgb3B0aW9uLnZhbHVlKSk7XG4gICAgdGhpcy5wcm9wYWdhdGVGcm9tVmFsdWUoY3VycmVudFZhbHVlcyk7XG4gICAgdGhpcy5yZWZyZXNoRmlsdGVyZWRJdGVtcygpO1xuICAgIHRoaXMuc3luY0hpZ2hsaWdodFdpdGhTZWxlY3Rpb24oY3VycmVudEFjdGl2ZVZhbHVlKTtcbiAgICBpZiAodGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgIHRoaXMuZm9jdXNTZWFyY2hib3hTb29uKCk7XG4gICAgfVxuICB9XG4gIG9uQ2hpcFJlbW92ZWQoZXZlbnQ6IENoaXBSZW1vdmVFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMucmVzb2x2ZU9wdGlvbihldmVudC52YWx1ZSk7XG4gICAgaWYgKCFvcHRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yZW1vdmVTZWxlY3RlZEl0ZW0ob3B0aW9uLCBldmVudC5vcmlnaW5hbEV2ZW50KTtcbiAgfVxuICByZXNvbHZlT3B0aW9uKG9wdE9yVmFsdWU6IHVua25vd24pOiBDb21ib2JveFJlc29sdmVkT3B0aW9uIHwgbnVsbCB7XG4gICAgY29uc3QgYWxsID0gdGhpcy5ub3JtYWxpemVPcHRpb25zKCk7XG4gICAgaWYgKG9wdE9yVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0T3JWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IG9iaiA9IG9wdE9yVmFsdWUgYXMgeyB0ZXh0Pzogc3RyaW5nOyB2YWx1ZT86IE9wdGlvblZhbHVlIH07XG4gICAgICBpZiAoJ3RleHQnIGluIG9iaiAmJiAndmFsdWUnIGluIG9iaikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLihvYmogYXMgT3B0aW9uSXRlbSksXG4gICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVUZXh0KG9iai50ZXh0KSxcbiAgICAgICAgICBzZWFyY2hUZXh0OiBidWlsZENvbWJvYm94U2VhcmNoVGV4dCh0aGlzLnRyYW5zbGF0ZVRleHQob2JqLnRleHQpLCB0aGlzLmFzVGV4dChvYmoudmFsdWUpKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKCd2YWx1ZScgaW4gb2JqKSB7XG4gICAgICAgIHJldHVybiBhbGwuZmluZCgob3B0aW9uKSA9PiBPYmplY3QuaXMob3B0aW9uLnZhbHVlLCBvYmoudmFsdWUpKSA/PyBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWxsLmZpbmQoKG9wdGlvbikgPT4gT2JqZWN0LmlzKG9wdGlvbi52YWx1ZSwgb3B0T3JWYWx1ZSBhcyBPcHRpb25WYWx1ZSkpID8/IG51bGw7XG4gIH1cbiAgaXNPcHRpb25TZWxlY3RlZChvcHRpb246IENvbWJvYm94UmVzb2x2ZWRPcHRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXNDb21ib2JveEFycmF5KHRoaXMudmFsdWUpLnNvbWUoKGVudHJ5KSA9PiBPYmplY3QuaXMoZW50cnksIG9wdGlvbi52YWx1ZSkpO1xuICB9XG4gIGlzT3B0aW9uQWN0aXZlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRlZEluZGV4ID09PSBpbmRleDtcbiAgfVxuICBvbk9wdGlvbk1vdXNlRW50ZXIoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5wb2ludGVyTW92ZWRTaW5jZUtleWJvYXJkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0SGlnaGxpZ2h0ZWRJbmRleChpbmRleCwgZmFsc2UpO1xuICB9XG4gIG9uT3B0aW9uc1BhbmVsTW91c2VNb3ZlKCk6IHZvaWQge1xuICAgIHRoaXMucG9pbnRlck1vdmVkU2luY2VLZXlib2FyZCA9IHRydWU7XG4gIH1cbiAgb25PcHRpb25zUGFuZWxNb3VzZUxlYXZlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wb2ludGVyTW92ZWRTaW5jZUtleWJvYXJkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IC0xO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIG9wdGlvbk1ldGFUZXh0KG9wdGlvbjogQ29tYm9ib3hSZXNvbHZlZE9wdGlvbik6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghdGhpcy5pY29uU2VsZWN0b3IgfHwgIXRoaXMuc2hvd0ljb25DbGFzcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb24uaWNvbkNsYXNzTmFtZSA/PyBudWxsO1xuICB9XG4gIG9wdGlvbklkKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLnVpLmNvbnRyb2xJZH0tb3B0aW9uLSR7aW5kZXh9YDtcbiAgfVxuICBjaGlwUmVtb3ZlQXJpYUxhYmVsKG9wdGlvbjogQ29tYm9ib3hSZXNvbHZlZE9wdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSByZXNvbHZlVHJhbnNsYXRhYmxlVGV4dCh0aGlzLnRyYW5zbGF0ZSwgbnVsbCwgQ09NQk9CT1hfUkVNT1ZFX0NISVBfTEFCRUxfS0VZKTtcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFx7bGFiZWxcXH0vZywgb3B0aW9uLnRleHQpO1xuICB9XG4gIHRyYWNrQnlPcHRpb25WYWx1ZSA9IChfaW5kZXg6IG51bWJlciwgaXRlbTogQ29tYm9ib3hSZXNvbHZlZE9wdGlvbik6IE9wdGlvblZhbHVlID0+IGl0ZW0udmFsdWU7XG4gIHByaXZhdGUgb3BlblBhbmVsQW5kRm9jdXNTZWFyY2goKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuUGFuZWwoeyBmb2N1c1NlYXJjaDogdHJ1ZSB9KTtcbiAgfVxuICBwcml2YXRlIG9wZW5QYW5lbChvcHRpb25zOiB7IGZvY3VzU2VhcmNoOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUljb25TZWxlY3Rvck9wdGlvbnNMb2FkZWQoKTtcbiAgICB0aGlzLnBhbmVsT3BlbiA9IHRydWU7XG4gICAgdGhpcy5yZWZyZXNoRmlsdGVyZWRJdGVtcyh0cnVlKTtcbiAgICB0aGlzLnN5bmNIaWdobGlnaHRXaXRoU2VsZWN0aW9uKHRoaXMucmVzb2x2ZVByZWZlcnJlZEhpZ2hsaWdodFZhbHVlKCkpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMucG9wb3Zlcj8ucmVwb3NpdGlvbigpO1xuICAgIHRoaXMuc2NoZWR1bGVWaXNpYmxlT3B0aW9uc1N5bmModHJ1ZSk7XG4gICAgaWYgKG9wdGlvbnMuZm9jdXNTZWFyY2gpIHtcbiAgICAgIHRoaXMuZm9jdXNTZWFyY2hib3hTb29uKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY2xvc2VQYW5lbChyZWFzb246IFBhbmVsQ2xvc2VSZWFzb24pOiB2b2lkIHtcbiAgICBjb25zdCByZXN0b3JlVHJpZ2dlckZvY3VzID0gcmVhc29uID09PSAnZXNjYXBlJyB8fCByZWFzb24gPT09ICdzZWxlY3Rpb24nIHx8IHJlYXNvbiA9PT0gJ3RvZ2dsZSc7XG4gICAgdGhpcy5wYW5lbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSAnJztcbiAgICB0aGlzLnJlc2V0VmlydHVhbFdpbmRvdygpO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcmVkSXRlbXMoKTtcbiAgICB0aGlzLnN5bmNIaWdobGlnaHRXaXRoU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgaWYgKHJlc3RvcmVUcmlnZ2VyRm9jdXMpIHtcbiAgICAgIHRoaXMuZm9jdXNUcmlnZ2VyU29vbigpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGZvY3VzU2VhcmNoYm94U29vbigpOiB2b2lkIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB0aGlzLmZvY3VzU2VhcmNoYm94KCkpO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMuZm9jdXNTZWFyY2hib3goKSwgMCk7XG4gICAgY29uc3Qgc2NoZWR1bGUgPSB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nXG4gICAgICA/IHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgICAgOiAoY2FsbGJhY2s6IEZyYW1lUmVxdWVzdENhbGxiYWNrKSA9PiB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiBjYWxsYmFjayhwZXJmb3JtYW5jZS5ub3coKSksIDApO1xuICAgIHNjaGVkdWxlKCgpID0+IHRoaXMuZm9jdXNTZWFyY2hib3goKSk7XG4gIH1cbiAgcHJpdmF0ZSBmb2N1c1RyaWdnZXJTb29uKCk6IHZvaWQgeyBxdWV1ZU1pY3JvdGFzaygoKSA9PiB0aGlzLmZvY3VzVHJpZ2dlcigpKTsgfVxuICBwcml2YXRlIGZvY3VzU2VhcmNoYm94KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zaW5nbGVJbnB1dFJlZj8ubmF0aXZlRWxlbWVudD8uYmx1cigpO1xuICAgIHRoaXMudHJpZ2dlckNvbnRyb2xSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmJsdXI/LigpO1xuICAgIHRoaXMucGFuZWxTZWFyY2hib3g/LmZvY3VzSW5wdXQoKTtcbiAgICB0aGlzLnBvcG92ZXI/LnJlcG9zaXRpb24oKTtcbiAgICB0aGlzLnNjaGVkdWxlVmlzaWJsZU9wdGlvbnNTeW5jKCk7XG4gIH1cbiAgcHJpdmF0ZSBmb2N1c1RyaWdnZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMudHJpZ2dlckNvbnRyb2xSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2tpcE5leHRGb2N1c09wZW4gPSB0cnVlO1xuICAgIHRoaXMuc2luZ2xlSW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XG4gIH1cbiAgcHJpdmF0ZSByZWZyZXNoRmlsdGVyZWRJdGVtcyhwcmVzZXJ2ZUN1cnJlbnRJbnZhbGlkID0gZmFsc2UpOiB2b2lkIHtcbiAgICBjb25zdCBxdWVyeSA9IG5vcm1hbGl6ZUNvbWJvYm94U2VhcmNoVGV4dCh0aGlzLnNlYXJjaFRlcm0pO1xuICAgIGNvbnN0IGFsbCA9IHRoaXMubm9ybWFsaXplT3B0aW9ucygpO1xuICAgIGlmICh0aGlzLmlzT3B0aW9uc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IFtdO1xuICAgICAgdGhpcy5zeW5jVmlzaWJsZUZpbHRlcmVkSXRlbXModHJ1ZSk7XG4gICAgICB0aGlzLmludmFsaWQgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gcXVlcnlcbiAgICAgID8gYWxsLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zZWFyY2hUZXh0LmluY2x1ZGVzKHF1ZXJ5KSlcbiAgICAgIDogYWxsLnNsaWNlKCk7XG4gICAgdGhpcy5zeW5jVmlzaWJsZUZpbHRlcmVkSXRlbXMoIXF1ZXJ5KTtcbiAgICBpZiAoIXF1ZXJ5ICYmIHByZXNlcnZlQ3VycmVudEludmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbnZhbGlkID0gdGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCA9PT0gMCAmJiBhc0NvbWJvYm94QXJyYXkodGhpcy52YWx1ZSkubGVuZ3RoID09PSAwICYmIHF1ZXJ5Lmxlbmd0aCA+IDA7XG4gIH1cbiAgcHJpdmF0ZSBzZXRIaWdobGlnaHRlZEluZGV4KGluZGV4OiBudW1iZXIsIGVuc3VyZVZpc2libGUgPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPSAtMTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dEluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIHRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGggLSAxKSk7XG4gICAgdGhpcy5oaWdobGlnaHRlZEluZGV4ID0gbmV4dEluZGV4O1xuICAgIGlmIChlbnN1cmVWaXNpYmxlICYmIHRoaXMucGFuZWxPcGVuKSB7XG4gICAgICB0aGlzLnNjcm9sbEhpZ2hsaWdodGVkT3B0aW9uSW50b1ZpZXcoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBtb3ZlSGlnaGxpZ2h0KHN0ZXA6IEhpZ2hsaWdodFN0ZXApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IC0xO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5oaWdobGlnaHRlZEluZGV4IDwgMCkge1xuICAgICAgdGhpcy5zZXRIaWdobGlnaHRlZEluZGV4KHN0ZXAgPiAwID8gMCA6IHRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGggLSAxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wb2ludGVyTW92ZWRTaW5jZUtleWJvYXJkID0gZmFsc2U7XG4gICAgdGhpcy5zZXRIaWdobGlnaHRlZEluZGV4KCh0aGlzLmhpZ2hsaWdodGVkSW5kZXggKyBzdGVwICsgdGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCkgJSB0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoKTtcbiAgfVxuICBwcml2YXRlIHN5bmNIaWdobGlnaHRXaXRoU2VsZWN0aW9uKHByZWZlcnJlZFZhbHVlOiBPcHRpb25WYWx1ZSB8IG51bGwgPSB0aGlzLmFjdGl2ZU9wdGlvblZhbHVlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPSAtMTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2FuZGlkYXRlVmFsdWVzID0gW1xuICAgICAgcHJlZmVycmVkVmFsdWUsXG4gICAgICAhdGhpcy5tdWx0aXBsZSA/IHRoaXMuc2VsZWN0ZWRTaW5nbGVPcHRpb24/LnZhbHVlID8/IG51bGwgOiB0aGlzLmZpcnN0U2VsZWN0ZWRGaWx0ZXJlZFZhbHVlLFxuICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zWzBdPy52YWx1ZSA/PyBudWxsXG4gICAgXTtcbiAgICBjb25zdCBuZXh0SW5kZXggPSBjYW5kaWRhdGVWYWx1ZXNcbiAgICAgIC5tYXAoKHZhbHVlKSA9PiB2YWx1ZSA9PSBudWxsID8gLTEgOiB0aGlzLmZpbHRlcmVkSXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBPYmplY3QuaXMoaXRlbS52YWx1ZSwgdmFsdWUpKSlcbiAgICAgIC5maW5kKChpbmRleCkgPT4gaW5kZXggPj0gMCk7XG4gICAgdGhpcy5zZXRIaWdobGlnaHRlZEluZGV4KG5leHRJbmRleCA/PyAwKTtcbiAgfVxuICBwcml2YXRlIHNjcm9sbEhpZ2hsaWdodGVkT3B0aW9uSW50b1ZpZXcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudXNlVmlydHVhbGl6ZWRPcHRpb25zKSB7XG4gICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMub3B0aW9uc1ZpZXdwb3J0UmVmPy5uYXRpdmVFbGVtZW50O1xuICAgICAgaWYgKCF2aWV3cG9ydCkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlVmlzaWJsZU9wdGlvbnNTeW5jKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9wdGlvblRvcCA9IHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCAqIHRoaXMub3B0aW9uUm93SGVpZ2h0O1xuICAgICAgY29uc3Qgb3B0aW9uQm90dG9tID0gb3B0aW9uVG9wICsgdGhpcy5vcHRpb25Sb3dIZWlnaHQ7XG4gICAgICBjb25zdCB2aWV3cG9ydFRvcCA9IHZpZXdwb3J0LnNjcm9sbFRvcDtcbiAgICAgIGNvbnN0IHZpZXdwb3J0Qm90dG9tID0gdmlld3BvcnRUb3AgKyB2aWV3cG9ydC5jbGllbnRIZWlnaHQ7XG4gICAgICBpZiAob3B0aW9uVG9wIDwgdmlld3BvcnRUb3ApIHtcbiAgICAgICAgdmlld3BvcnQuc2Nyb2xsVG9wID0gb3B0aW9uVG9wO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25Cb3R0b20gPiB2aWV3cG9ydEJvdHRvbSkge1xuICAgICAgICB2aWV3cG9ydC5zY3JvbGxUb3AgPSBvcHRpb25Cb3R0b20gLSB2aWV3cG9ydC5jbGllbnRIZWlnaHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGUgaGlnaGxpZ2h0ZWQgb3B0aW9uIGlzIGFscmVhZHkgZnVsbHkgdmlzaWJsZS5cbiAgICAgIH1cbiAgICAgIHRoaXMuc3luY1Zpc2libGVGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm9wdGlvbklkKHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCkpO1xuICAgICAgaWYgKHR5cGVvZiBub2RlPy5zY3JvbGxJbnRvVmlldyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBub2RlLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JyB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIHNlbGVjdEhpZ2hsaWdodGVkT3B0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZU9wdGlvbiA9IHRoaXMuZmlsdGVyZWRJdGVtc1t0aGlzLmhpZ2hsaWdodGVkSW5kZXhdO1xuICAgIGlmICghYWN0aXZlT3B0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLnRvZ2dsZU9wdGlvbihhY3RpdmVPcHRpb24pO1xuICAgICAgdGhpcy5mb2N1c1NlYXJjaGJveFNvb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RTaW5nbGVPcHRpb24oYWN0aXZlT3B0aW9uKTtcbiAgfVxuICBwcml2YXRlIHNlbGVjdFNpbmdsZU9wdGlvbihvcHRpb246IENvbWJvYm94UmVzb2x2ZWRPcHRpb24pOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSAnJztcbiAgICB0aGlzLnByb3BhZ2F0ZUZyb21WYWx1ZShvcHRpb24udmFsdWUpO1xuICAgIHRoaXMuY2xvc2VQYW5lbCgnc2VsZWN0aW9uJyk7XG4gIH1cbiAgcHJpdmF0ZSB0b2dnbGVPcHRpb24ob3B0aW9uOiBDb21ib2JveFJlc29sdmVkT3B0aW9uLCBmb3JjZUNoZWNrZWQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gbmV3IFNldChhc0NvbWJvYm94QXJyYXkodGhpcy52YWx1ZSkpO1xuICAgIGNvbnN0IHNob3VsZFNlbGVjdCA9IHRoaXMucmVzb2x2ZU9wdGlvbkNoZWNrZWRTdGF0ZShzZWxlY3RlZFZhbHVlcywgb3B0aW9uLCBmb3JjZUNoZWNrZWQpO1xuICAgIGlmIChzaG91bGRTZWxlY3QpIHtcbiAgICAgIHNlbGVjdGVkVmFsdWVzLmFkZChvcHRpb24udmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RlZFZhbHVlcy5kZWxldGUob3B0aW9uLnZhbHVlKTtcbiAgICB9XG4gICAgY29uc3Qgb3JkZXJlZFZhbHVlcyA9IHRoaXMubm9ybWFsaXplT3B0aW9ucygpXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gc2VsZWN0ZWRWYWx1ZXMuaGFzKGVudHJ5LnZhbHVlKSlcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiBlbnRyeS52YWx1ZSk7XG4gICAgdGhpcy5wcm9wYWdhdGVGcm9tVmFsdWUob3JkZXJlZFZhbHVlcyk7XG4gICAgdGhpcy5yZWZyZXNoRmlsdGVyZWRJdGVtcygpO1xuICAgIHRoaXMuc3luY0hpZ2hsaWdodFdpdGhTZWxlY3Rpb24ob3B0aW9uLnZhbHVlKTtcbiAgfVxuICBwcml2YXRlIHN5bmNWaXNpYmxlRmlsdGVyZWRJdGVtcyhyZXNldFNjcm9sbCA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gYnVpbGRWaXNpYmxlQ29tYm9ib3hPcHRpb25zKHtcbiAgICAgIHJlc2V0U2Nyb2xsLFxuICAgICAgYnVmZmVyU2l6ZTogQ09NQk9CT1hfSUNPTl9TRUxFQ1RPUl9CVUZGRVJfU0laRSxcbiAgICAgIGZhbGxiYWNrVmlld3BvcnRIZWlnaHQ6IENPTUJPQk9YX0lDT05fU0VMRUNUT1JfVklFV1BPUlRfRkFMTEJBQ0tfSEVJR0hULFxuICAgICAgZmlsdGVyZWRJdGVtczogdGhpcy5maWx0ZXJlZEl0ZW1zLFxuICAgICAgb3B0aW9uUm93SGVpZ2h0OiB0aGlzLm9wdGlvblJvd0hlaWdodCxcbiAgICAgIHVzZVZpcnR1YWxpemVkT3B0aW9uczogdGhpcy51c2VWaXJ0dWFsaXplZE9wdGlvbnMsXG4gICAgICB2aWV3cG9ydDogdGhpcy5vcHRpb25zVmlld3BvcnRSZWY/Lm5hdGl2ZUVsZW1lbnRcbiAgICB9KTtcbiAgICB0aGlzLnZpc2libGVTdGFydEluZGV4ID0gbmV4dFN0YXRlLnZpc2libGVTdGFydEluZGV4O1xuICAgIHRoaXMudmlzaWJsZUVuZEluZGV4ID0gbmV4dFN0YXRlLnZpc2libGVFbmRJbmRleDtcbiAgICB0aGlzLnZpc2libGVGaWx0ZXJlZEl0ZW1zID0gbmV4dFN0YXRlLnZpc2libGVGaWx0ZXJlZEl0ZW1zO1xuICB9XG4gIHByaXZhdGUgbm9ybWFsaXplT3B0aW9ucygpOiBDb21ib2JveFJlc29sdmVkT3B0aW9uW10ge1xuICAgIGlmICh0aGlzLmljb25TZWxlY3Rvcikge1xuICAgICAgdGhpcy5lbnN1cmVJY29uU2VsZWN0b3JPcHRpb25zTG9hZGVkKCk7XG4gICAgICBpZiAodGhpcy5faWNvbk9wdGlvbnNDYWNoZUxhbmcgPT09IHRoaXMuY3VycmVudExhbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ljb25PcHRpb25zQ2FjaGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRMYW5nID0gdGhpcy5jdXJyZW50TGFuZztcbiAgICBpZiAodGhpcy5vcHRpb25zID09PSB0aGlzLl9vcHRpb25zQ2FjaGVLZXkgJiYgdGhpcy5fb3B0aW9uc0NhY2hlTGFuZyA9PT0gY3VycmVudExhbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zQ2FjaGU7XG4gICAgfVxuICAgIGNvbnN0IG5leHQgPSB0aGlzLnBhcnNlTm9ybWFsaXplZE9wdGlvbnNJbnB1dCgpO1xuICAgIHRoaXMuX29wdGlvbnNDYWNoZUtleSA9IHRoaXMub3B0aW9ucztcbiAgICB0aGlzLl9vcHRpb25zQ2FjaGVMYW5nID0gY3VycmVudExhbmc7XG4gICAgdGhpcy5fb3B0aW9uc0NhY2hlID0gbmV4dC5tYXAoKG9wdGlvbikgPT4gY3JlYXRlUmVzb2x2ZWRDb21ib2JveE9wdGlvbihvcHRpb24sICh2YWx1ZSkgPT4gdGhpcy50cmFuc2xhdGVUZXh0KHZhbHVlKSkpO1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zQ2FjaGU7XG4gIH1cbiAgcHJpdmF0ZSBhc1RleHQodmFsdWU6IHVua25vd24pOiBzdHJpbmcgeyByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogJyc7IH1cbiAgcHJpdmF0ZSB0cmFuc2xhdGVUZXh0KHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHsgcmV0dXJuIHJlc29sdmVUcmFuc2xhdGFibGVUZXh0KHRoaXMudHJhbnNsYXRlLCB0aGlzLmFzVGV4dCh2YWx1ZSkpOyB9XG4gIHByaXZhdGUgcGFyc2VOb3JtYWxpemVkT3B0aW9uc0lucHV0KCk6IE9wdGlvbkl0ZW1bXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zKSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucyBhcyBPcHRpb25JdGVtW107XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRoaXMub3B0aW9ucyB8fCAnW10nKTtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBhcnNlZCkgPyAocGFyc2VkIGFzIE9wdGlvbkl0ZW1bXSkgOiBbXTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3VycmVudExhbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgPz8gdGhpcy50cmFuc2xhdGUuZ2V0RGVmYXVsdExhbmc/LigpID8/ICcnO1xuICB9XG4gIHByaXZhdGUgZ2V0IHNlbGVjdGVkQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRDb3VudCh0aGlzLnZhbHVlLCB0aGlzLm11bHRpcGxlKTtcbiAgfVxuICBwcml2YXRlIGdldCBhY3RpdmVPcHRpb25WYWx1ZSgpOiBPcHRpb25WYWx1ZSB8IG51bGwge1xuICAgIHJldHVybiBnZXRBY3RpdmVPcHRpb25WYWx1ZSh0aGlzLmZpbHRlcmVkSXRlbXMsIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgZmlyc3RTZWxlY3RlZEZpbHRlcmVkVmFsdWUoKTogT3B0aW9uVmFsdWUgfCBudWxsIHtcbiAgICByZXR1cm4gZ2V0Rmlyc3RTZWxlY3RlZEZpbHRlcmVkVmFsdWUodGhpcy5maWx0ZXJlZEl0ZW1zLCB0aGlzLnZhbHVlKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZURpc3BsYXlNb2RlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5kaXNwbGF5TW9kZSA9ICdzdW1tYXJ5JztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kaXNwbGF5TW9kZSA9IHRoaXMuc2hvdWxkQ29sbGFwc2VDaGlwRGlzcGxheVRvU3VtbWFyeSgpID8gJ3N1bW1hcnknIDogJ2NoaXAnO1xuICB9XG4gIHByaXZhdGUgcHJvcGFnYXRlRnJvbVZhbHVlKHZhbHVlOiBPcHRpb25WYWx1ZSB8IE9wdGlvblZhbHVlW10gfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIGlmIChhc0NvbWJvYm94QXJyYXkodGhpcy52YWx1ZSkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5pbnZhbGlkID0gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGVtaXR0ZWRWYWx1ZSA9IHRoaXMudmFsdWUgPz8gKHRoaXMubXVsdGlwbGUgPyBbXSA6IG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUV2ZW50LmVtaXQoZW1pdHRlZFZhbHVlKTtcbiAgICB0aGlzLmNvbW1pdFZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXlNb2RlKCk7XG4gICAgdGhpcy5zY2hlZHVsZUNoaXBQcmVzZW50YXRpb25TeW5jKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgcHJpdmF0ZSBpc1ByaW50YWJsZUNoYXJhY3RlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBldmVudC5rZXkubGVuZ3RoID09PSAxICYmICFldmVudC5hbHRLZXkgJiYgIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50Lm1ldGFLZXk7XG4gIH1cbiAgcHJpdmF0ZSBzY2hlZHVsZUNoaXBQcmVzZW50YXRpb25TeW5jKCk6IHZvaWQge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMuc3luY0NoaXBQcmVzZW50YXRpb24oKSk7XG4gICAgY29uc3Qgc2NoZWR1bGUgPSB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nXG4gICAgICA/IHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgICAgOiAoY2FsbGJhY2s6IEZyYW1lUmVxdWVzdENhbGxiYWNrKSA9PiB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiBjYWxsYmFjayhwZXJmb3JtYW5jZS5ub3coKSksIDApO1xuICAgIHNjaGVkdWxlKCgpID0+IHRoaXMuc3luY0NoaXBQcmVzZW50YXRpb24oKSk7XG4gIH1cbiAgcHJpdmF0ZSBzeW5jQ2hpcFByZXNlbnRhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0RGlzcGxheU1vZGU6ICdjaGlwJyB8ICdzdW1tYXJ5JyA9IHRoaXMuc2hvdWxkQ29sbGFwc2VDaGlwRGlzcGxheVRvU3VtbWFyeSgpID8gJ3N1bW1hcnknIDogJ2NoaXAnO1xuICAgIGlmICh0aGlzLmRpc3BsYXlNb2RlID09PSBuZXh0RGlzcGxheU1vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kaXNwbGF5TW9kZSA9IG5leHREaXNwbGF5TW9kZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBwcml2YXRlIHNob3VsZENvbGxhcHNlQ2hpcERpc3BsYXlUb1N1bW1hcnkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNob3VsZENvbGxhcHNlQ29tYm9ib3hDaGlwRGlzcGxheSh7XG4gICAgICBtdWx0aXBsZTogdGhpcy5tdWx0aXBsZSxcbiAgICAgIHNlbGVjdGVkSXRlbUNvdW50OiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoLFxuICAgICAgc2VsZWN0ZWRDb3VudDogdGhpcy5zZWxlY3RlZENvdW50LFxuICAgICAgbWF4U2VsZWN0ZWRMYWJlbHM6IHRoaXMubWF4U2VsZWN0ZWRMYWJlbHMsXG4gICAgICBhdmFpbGFibGVXaWR0aDogdGhpcy5tdWx0aVZhbHVlUmVmPy5uYXRpdmVFbGVtZW50Py5jbGllbnRXaWR0aCA/PyAwLFxuICAgICAgcmVxdWlyZWRXaWR0aDogdGhpcy5jaGlwTWVhc3VyZVJlZj8ubmF0aXZlRWxlbWVudD8uc2Nyb2xsV2lkdGggPz8gMFxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgcmVzZXRPcHRpb25zQ2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy5fb3B0aW9uc0NhY2hlS2V5ID0gbnVsbDtcbiAgICB0aGlzLl9vcHRpb25zQ2FjaGVMYW5nID0gJyc7XG4gICAgdGhpcy5fb3B0aW9uc0NhY2hlID0gW107XG4gICAgdGhpcy5faWNvbk9wdGlvbnNDYWNoZUxhbmcgPSAnJztcbiAgICB0aGlzLl9pY29uT3B0aW9uc0NhY2hlID0gW107XG4gIH1cbiAgcHJpdmF0ZSByZWZyZXNoQ29tYm9ib3hTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlZnJlc2hGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgdGhpcy5zeW5jSGlnaGxpZ2h0V2l0aFNlbGVjdGlvbigpO1xuICAgIHRoaXMudXBkYXRlRGlzcGxheU1vZGUoKTtcbiAgICB0aGlzLnNjaGVkdWxlQ2hpcFByZXNlbnRhdGlvblN5bmMoKTtcbiAgICB0aGlzLnNjaGVkdWxlVmlzaWJsZU9wdGlvbnNTeW5jKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgcHJpdmF0ZSBoYW5kbGVPcHRpb25zQ2FjaGVDaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snb3B0aW9ucyddKSB7XG4gICAgICB0aGlzLnJlc2V0T3B0aW9uc0NhY2hlKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaGFuZGxlVmlydHVhbFdpbmRvd0NoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydpY29uU2VsZWN0b3InXSB8fCBjaGFuZ2VzWydzaG93SWNvbkNsYXNzJ10pIHtcbiAgICAgIHRoaXMucmVzZXRWaXJ0dWFsV2luZG93KCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaGFuZGxlSWNvblNlbGVjdG9yQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2ljb25TZWxlY3RvciddKSB7XG4gICAgICB0aGlzLmVuc3VyZUljb25TZWxlY3Rvck9wdGlvbnNMb2FkZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzaG91bGRSZWZyZXNoRmlsdGVyZWRTdGF0ZShjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzT3B0aW9uQ2hhbmdlcyA9ICEhY2hhbmdlc1snb3B0aW9ucyddO1xuICAgIGNvbnN0IGhhc1NlbGVjdGlvbkNoYW5nZXMgPSAhIWNoYW5nZXNbJ211bHRpcGxlJ10gfHwgISFjaGFuZ2VzWyd2YWx1ZSddO1xuICAgIGNvbnN0IGhhc0ljb25DaGFuZ2VzID0gISFjaGFuZ2VzWydpY29uU2VsZWN0b3InXSB8fCAhIWNoYW5nZXNbJ3Nob3dJY29uQ2xhc3MnXTtcblxuICAgIHJldHVybiBoYXNPcHRpb25DaGFuZ2VzIHx8IGhhc1NlbGVjdGlvbkNoYW5nZXMgfHwgaGFzSWNvbkNoYW5nZXM7XG4gIH1cbiAgcHJpdmF0ZSBzaG91bGRSZWZyZXNoRGlzcGxheU1vZGUoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShjaGFuZ2VzWydtdWx0aXBsZSddIHx8IGNoYW5nZXNbJ21heFNlbGVjdGVkTGFiZWxzJ10gfHwgY2hhbmdlc1sndmFsdWUnXSk7XG4gIH1cbiAgcHJpdmF0ZSBub3JtYWxpemVWYWx1ZUZvck11bHRpcGxlTW9kZShjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCFjaGFuZ2VzWydtdWx0aXBsZSddIHx8ICF0aGlzLm11bHRpcGxlIHx8IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgfHwgdGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSBbdGhpcy52YWx1ZV07XG4gIH1cbiAgcHJpdmF0ZSBoYW5kbGVQcmludGFibGVUcmlnZ2VyS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmlzUHJpbnRhYmxlQ2hhcmFjdGVyKGV2ZW50KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc2VhcmNoVGVybSA9IGV2ZW50LmtleTtcbiAgICB0aGlzLm9wZW5QYW5lbEFuZEZvY3VzU2VhcmNoKCk7XG4gICAgdGhpcy5yZWZyZXNoRmlsdGVyZWRJdGVtcygpO1xuICAgIHRoaXMuc3luY0hpZ2hsaWdodFdpdGhTZWxlY3Rpb24oKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGhhbmRsZVRyaWdnZXJBcnJvd0tleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5uYXZpZ2F0ZVRyaWdnZXJBcnJvdygxKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLm5hdmlnYXRlVHJpZ2dlckFycm93KC0xKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBuYXZpZ2F0ZVRyaWdnZXJBcnJvdyhzdGVwOiBIaWdobGlnaHRTdGVwKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhbmVsT3Blbikge1xuICAgICAgdGhpcy5vcGVuUGFuZWxBbmRGb2N1c1NlYXJjaCgpO1xuICAgICAgaWYgKHN0ZXAgPCAwKSB7XG4gICAgICAgIHRoaXMuc2V0SGlnaGxpZ2h0ZWRJbmRleCh0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoIC0gMSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubW92ZUhpZ2hsaWdodChzdGVwKTtcbiAgfVxuICBwcml2YXRlIGhhbmRsZVRyaWdnZXJPcGVuS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNPcGVuS2V5ID0gZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJyAnO1xuXG4gICAgaWYgKCFpc09wZW5LZXkgfHwgdGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMub3BlblBhbmVsQW5kRm9jdXNTZWFyY2goKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGhhbmRsZVNlYXJjaGJveEFycm93S2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLm1vdmVIaWdobGlnaHQoMSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5tb3ZlSGlnaGxpZ2h0KC0xKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBoYW5kbGVTZWFyY2hib3hCb3VuZGFyeUtleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnSG9tZScpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnNldEhpZ2hsaWdodGVkSW5kZXgoMCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VuZCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnNldEhpZ2hsaWdodGVkSW5kZXgodGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCAtIDEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGhhbmRsZVNlYXJjaGJveFNlbGVjdGlvbktleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnNlbGVjdEhpZ2hsaWdodGVkT3B0aW9uKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBoYW5kbGVDbG9zZU9yQmFja3NwYWNlS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaGFuZGxlUGFuZWxDbG9zZUtleShldmVudCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5oYW5kbGVCYWNrc3BhY2VLZXkoZXZlbnQpO1xuICB9XG4gIHByaXZhdGUgaGFuZGxlUGFuZWxDbG9zZUtleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnICYmIHRoaXMucGFuZWxPcGVuKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5jbG9zZVBhbmVsKCdlc2NhcGUnKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiB0aGlzLnBhbmVsT3Blbikge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gdGhpcy5jbG9zZVBhbmVsKCd0YWInKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByaXZhdGUgaGFuZGxlQmFja3NwYWNlS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKGV2ZW50LmtleSAhPT0gJ0JhY2tzcGFjZScgfHwgIXRoaXMubXVsdGlwbGUgfHwgdGhpcy5oYXNTZWFyY2hRdWVyeSB8fCB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5yZW1vdmVTZWxlY3RlZEl0ZW0odGhpcy5zZWxlY3RlZEl0ZW1zW3RoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxXSwgZXZlbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZVByZWZlcnJlZEhpZ2hsaWdodFZhbHVlKCk6IE9wdGlvblZhbHVlIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuaGFzU2VhcmNoUXVlcnkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZU9wdGlvblZhbHVlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkU2luZ2xlT3B0aW9uPy52YWx1ZSA/PyBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maXJzdFNlbGVjdGVkRmlsdGVyZWRWYWx1ZTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVPcHRpb25DaGVja2VkU3RhdGUoXG4gICAgc2VsZWN0ZWRWYWx1ZXM6IFNldDxPcHRpb25WYWx1ZT4sXG4gICAgb3B0aW9uOiBDb21ib2JveFJlc29sdmVkT3B0aW9uLFxuICAgIGZvcmNlQ2hlY2tlZDogYm9vbGVhbiB8IG51bGxcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKGZvcmNlQ2hlY2tlZCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZvcmNlQ2hlY2tlZDtcbiAgICB9XG4gICAgcmV0dXJuICFzZWxlY3RlZFZhbHVlcy5oYXMob3B0aW9uLnZhbHVlKTtcbiAgfVxuICBwcml2YXRlIGVuc3VyZUljb25TZWxlY3Rvck9wdGlvbnNMb2FkZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmljb25TZWxlY3RvciB8fCB0aGlzLl9pY29uT3B0aW9uc0NhY2hlTGFuZyA9PT0gdGhpcy5jdXJyZW50TGFuZyB8fCB0aGlzLmljb25PcHRpb25zTG9hZFByb21pc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pY29uT3B0aW9uc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuaWNvbk9wdGlvbnNMb2FkUHJvbWlzZSA9IHRoaXMuaWNvblNlbGVjdG9yRGF0YVxuICAgICAgLmxvYWRGb250QXdlc29tZVY1U29saWRJY29ucygpXG4gICAgICAudGhlbigoaWNvbnMpID0+IHtcbiAgICAgICAgdGhpcy5faWNvbk9wdGlvbnNDYWNoZSA9IGJ1aWxkSWNvblNlbGVjdG9yQ29tYm9ib3hPcHRpb25zKGljb25zLCAodmFsdWUpID0+IHRoaXMudHJhbnNsYXRlVGV4dCh2YWx1ZSkpO1xuICAgICAgICB0aGlzLl9pY29uT3B0aW9uc0NhY2hlTGFuZyA9IHRoaXMuY3VycmVudExhbmc7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLmljb25PcHRpb25zTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmljb25PcHRpb25zTG9hZFByb21pc2UgPSBudWxsO1xuICAgICAgICB0aGlzLnJlZnJlc2hDb21ib2JveFN0YXRlKCk7XG4gICAgICB9KTtcbiAgfVxuICBwcml2YXRlIHNjaGVkdWxlVmlzaWJsZU9wdGlvbnNTeW5jKHJlc2V0U2Nyb2xsID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGFuZWxPcGVuIHx8ICF0aGlzLnVzZVZpcnR1YWxpemVkT3B0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB0aGlzLnN5bmNWaXNpYmxlRmlsdGVyZWRJdGVtcyhyZXNldFNjcm9sbCkpO1xuICAgIGNvbnN0IHNjaGVkdWxlID0gdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICAgIDogKGNhbGxiYWNrOiBGcmFtZVJlcXVlc3RDYWxsYmFjaykgPT4gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2socGVyZm9ybWFuY2Uubm93KCkpLCAwKTtcbiAgICBzY2hlZHVsZSgoKSA9PiB0aGlzLnN5bmNWaXNpYmxlRmlsdGVyZWRJdGVtcyhyZXNldFNjcm9sbCkpO1xuICB9XG4gIHByaXZhdGUgcmVzZXRWaXJ0dWFsV2luZG93KCk6IHZvaWQge1xuICAgIHRoaXMudmlzaWJsZVN0YXJ0SW5kZXggPSAwO1xuICAgIHRoaXMudmlzaWJsZUVuZEluZGV4ID0gMDtcbiAgICB0aGlzLnZpc2libGVGaWx0ZXJlZEl0ZW1zID0gW107XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZGMtY29tYm9ib3hcIj5cbiAgPGRpdiBjbGFzcz1cInNkYy1jb21ib2JveF9fbGFiZWwtcm93XCIgKm5nSWY9XCJ1aS5sYWJlbFRleHQgfHwgdWkuaW5mb1Rvb2x0aXBUZXh0XCI+XG4gICAgPGxhYmVsXG4gICAgICAqbmdJZj1cInVpLmxhYmVsVGV4dFwiXG4gICAgICBbaWRdPVwidWkubGFiZWxJZFwiXG4gICAgICBbZm9yXT1cInVpLmxhYmVsRm9ySWRcIlxuICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX2xhYmVsXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmVxdWlyZWQgPyB1aS5sYWJlbFRleHQgKyAnICcgKyB1aS5yZXF1aXJlZEZpZWxkVGV4dCA6IHVpLmxhYmVsVGV4dFwiXG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtY29tYm9ib3hfX2xhYmVsLXRleHRcIj5cbiAgICAgICAge3sgdWkubGFiZWxUZXh0IH19XG4gICAgICAgIDxzcGFuICpuZ0lmPVwicmVxdWlyZWRcIiBjbGFzcz1cInJlcXVpcmVkLWZpZWxkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuXG4gICAgPHNkYy10b29sdGlwXG4gICAgICAqbmdJZj1cInVpLmluZm9Ub29sdGlwVGV4dFwiXG4gICAgICBjbGFzcz1cInNkYy1jb21ib2JveF9faW5mby10b29sdGlwLXdyYXBcIlxuICAgICAgW3BUb29sdGlwXT1cInVpLmluZm9Ub29sdGlwVGV4dFwiXG4gICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cImluZm9Ub29sdGlwUG9zaXRpb25cIlxuICAgICAgW3Rvb2x0aXBFdmVudF09XCJpbmZvVG9vbHRpcEV2ZW50XCJcbiAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlIHNkYy1jb21ib2JveF9faW5mby10b29sdGlwLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgPC9zZGMtdG9vbHRpcD5cbiAgPC9kaXY+XG5cbiAgPHNkYy1wb3BvdmVyXG4gICAgW29wZW5dPVwicGFuZWxPcGVuXCJcbiAgICBbYXBwZW5kVG9dPVwiYXBwZW5kVG9cIlxuICAgIFt6SW5kZXhdPVwiekluZGV4XCJcbiAgICBbb2Zmc2V0XT1cInVpLnBhbmVsT2Zmc2V0XCJcbiAgICBbYXJpYUxhYmVsXT1cInVpLmRyb3Bkb3duQXJpYUxhYmVsXCJcbiAgICBbbWF0Y2hUcmlnZ2VyV2lkdGhdPVwidHJ1ZVwiXG4gICAgW3RvZ2dsZU9uVHJpZ2dlckNsaWNrXT1cImZhbHNlXCJcbiAgICBbY2xvc2VPbkVzY2FwZV09XCJmYWxzZVwiXG4gICAgW3BhbmVsQ2xhc3NdPVwidWkucGFuZWxPdmVybGF5Q2xhc3NcIlxuICAgIChvcGVuQ2hhbmdlKT1cIm9uUG9wb3Zlck9wZW5DaGFuZ2UoJGV2ZW50KVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICBzZGMtcG9wb3Zlci10cmlnZ2VyXG4gICAgICAjdHJpZ2dlckNvbnRyb2xSZWZcbiAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19jb250cm9sXCJcbiAgICAgIFthdHRyLmlkXT1cIm11bHRpcGxlID8gdWkuY29udHJvbElkIDogbnVsbFwiXG4gICAgICBbY2xhc3Muc2RjLWNvbWJvYm94X19jb250cm9sLS1tdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgICBbY2xhc3Muc2RjLWNvbWJvYm94X19jb250cm9sLS1pbnZhbGlkXT1cImludmFsaWRcIlxuICAgICAgW2NsYXNzLnNkYy1jb21ib2JveF9fY29udHJvbC0tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW2NsYXNzLnNkYy1jb21ib2JveF9fY29udHJvbC0tc21hbGxdPVwic2l6ZSA9PT0gJ3NtYWxsJ1wiXG4gICAgICBbbmdTdHlsZV09XCJnZXRJbnB1dFN0eWxlKClcIlxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwibXVsdGlwbGUgJiYgIWRpc2FibGVkID8gMCA6IG51bGxcIlxuICAgICAgW2F0dHIucm9sZV09XCJtdWx0aXBsZSA/ICdjb21ib2JveCcgOiBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwibXVsdGlwbGUgPyAnbGlzdGJveCcgOiBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibXVsdGlwbGUgPyB1aS5jb21ib2JveEFyaWFMYWJlbCA6IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIm11bHRpcGxlID8gdWkuY29tYm9ib3hBcmlhTGFiZWxsZWRCeSA6IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJtdWx0aXBsZSA/IHJlcXVpcmVkIDogbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwibXVsdGlwbGUgPyBpbnZhbGlkIDogbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm11bHRpcGxlID8gKHBhbmVsT3BlbiA/ICd0cnVlJyA6ICdmYWxzZScpIDogbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIm11bHRpcGxlID8gdWkubGlzdGJveElkIDogbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwibXVsdGlwbGUgPyBhY3RpdmVEZXNjZW5kYW50IDogbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIm11bHRpcGxlID8gdWkubWVzc2FnZUlkIDogbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWF1dG9jb21wbGV0ZV09XCJtdWx0aXBsZSA/ICdsaXN0JyA6IG51bGxcIlxuICAgICAgKG1vdXNlZG93bik9XCJvbkNvbnRyb2xNb3VzZURvd24oJGV2ZW50KVwiXG4gICAgICAoY2xpY2spPVwib25Db250cm9sQ2xpY2soKVwiXG4gICAgICAoa2V5ZG93bik9XCJtdWx0aXBsZSA/IG9uVHJpZ2dlcktleWRvd24oJGV2ZW50KSA6IG51bGxcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZGMtY29tYm9ib3hfX3ZhbHVlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbXVsdGlwbGU7IGVsc2UgbXVsdGlwbGVWYWx1ZVRwbFwiPlxuICAgICAgICAgIDxzZGMtaWNvbi1yZW5kZXJlclxuICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFNpbmdsZU9wdGlvbj8uaWNvblwiXG4gICAgICAgICAgICBjbGFzcz1cInNkYy1jb21ib2JveF9fbGVhZGluZy1pY29uXCJcbiAgICAgICAgICAgIFtpY29uXT1cInNlbGVjdGVkU2luZ2xlT3B0aW9uPy5pY29uXCJcbiAgICAgICAgICAgIFtpY29uVHlwZV09XCJzZWxlY3RlZFNpbmdsZU9wdGlvbj8uaWNvblR5cGVcIlxuICAgICAgICAgICAgW3NpemVdPVwiMTZcIlxuICAgICAgICAgID48L3NkYy1pY29uLXJlbmRlcmVyPlxuXG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjc2luZ2xlSW5wdXRSZWZcbiAgICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19pbnB1dFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBbaWRdPVwidWkuY29udHJvbElkXCJcbiAgICAgICAgICAgIFtuYW1lXT1cInVpLmlucHV0TmFtZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgIFtyZWFkT25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3RlZFNpbmdsZU9wdGlvbj8udGV4dCA/PyAnJ1wiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwidWkucGxhY2Vob2xkZXJUZXh0XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidWkuY29tYm9ib3hBcmlhTGFiZWxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInVpLmNvbWJvYm94QXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaW52YWxpZFwiXG4gICAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJwYW5lbE9wZW4gPyAndHJ1ZScgOiAnZmFsc2UnXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiJ2xpc3Rib3gnXCJcbiAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJjb21ib2JveC1maWVsZC1saXN0Ym94XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwidWkubGlzdGJveElkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJhY3RpdmVEZXNjZW5kYW50XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwidWkubWVzc2FnZUlkXCJcbiAgICAgICAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgICAgICBhcmlhLWF1dG9jb21wbGV0ZT1cImxpc3RcIlxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJvbklucHV0Rm9jdXMoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvblRyaWdnZXJLZXlkb3duKCRldmVudClcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWYWx1ZVRwbD5cbiAgICAgICAgICA8ZGl2ICNtdWx0aVZhbHVlUmVmIGNsYXNzPVwic2RjLWNvbWJvYm94X19tdWx0aS12YWx1ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzaG91bGREaXNwbGF5Q2hpcFN1bW1hcnk7IGVsc2Ugc3VtbWFyeVRwbFwiPlxuICAgICAgICAgICAgICA8dWxcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNkYy1jb21ib2JveF9fY2hpcC1saXN0XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzZWxlY3RlZFN1bW1hcnlUZXh0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtczsgdHJhY2tCeTogdHJhY2tCeU9wdGlvblZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19jaGlwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c2RjLWljb24tcmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmljb25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNkYy1jb21ib2JveF9fY2hpcC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW2ljb25UeXBlXT1cIml0ZW0uaWNvblR5cGVcIlxuICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCIxNFwiXG4gICAgICAgICAgICAgICAgICA+PC9zZGMtaWNvbi1yZW5kZXJlcj5cblxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtY29tYm9ib3hfX2NoaXAtbGFiZWxcIiBbYXR0ci50aXRsZV09XCJpdGVtLnRleHRcIj57eyBpdGVtLnRleHQgfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19jaGlwLXJlbW92ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY2hpcFJlbW92ZUFyaWFMYWJlbChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVTZWxlY3RlZEl0ZW0oaXRlbSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3N1bW1hcnlUcGw+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbWJvYm94X19zdW1tYXJ5XCIgKm5nSWY9XCJzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZFN1bW1hcnlUZXh0IH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbWJvYm94X19wbGFjZWhvbGRlclwiICpuZ0lmPVwic2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAge3sgdWkucGxhY2Vob2xkZXJUZXh0IH19XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDx1bFxuICAgICAgICAgICAgICAjY2hpcE1lYXN1cmVSZWZcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX2NoaXAtbGlzdCBzZGMtY29tYm9ib3hfX2NoaXAtbGlzdC0tbWVhc3VyZVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtczsgdHJhY2tCeTogdHJhY2tCeU9wdGlvblZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNkYy1jb21ib2JveF9fY2hpcFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c2RjLWljb24tcmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19jaGlwLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2ljb25dPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICAgIFtpY29uVHlwZV09XCJpdGVtLmljb25UeXBlXCJcbiAgICAgICAgICAgICAgICAgIFtzaXplXT1cIjE0XCJcbiAgICAgICAgICAgICAgICA+PC9zZGMtaWNvbi1yZW5kZXJlcj5cblxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbWJvYm94X19jaGlwLWxhYmVsXCI+e3sgaXRlbS50ZXh0IH19PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtY29tYm9ib3hfX2NoaXAtcmVtb3ZlLXBsYWNlaG9sZGVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZGMtY29tYm9ib3hfX2FjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiaGFzQ2xlYXJBY3Rpb25cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19pY29uLWJ1dHRvbiBzZGMtY29tYm9ib3hfX2ljb24tYnV0dG9uLS1jbGVhclwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInVpLmNsZWFyRmllbGRUZXh0XCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJBbGwoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19pY29uLWJ1dHRvbiBzZGMtY29tYm9ib3hfX2ljb24tYnV0dG9uLS10b2dnbGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ1aS5kcm9wZG93bkFyaWFMYWJlbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJwYW5lbE9wZW5cIlxuICAgICAgICAgIChtb3VzZWRvd24pPVwib25Ub2dnbGVNb3VzZURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhbmVsKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWNhcmV0LWRvd24gc2RjLWNvbWJvYm94X19jYXJldFwiXG4gICAgICAgICAgICBbY2xhc3Muc2RjLWNvbWJvYm94X19jYXJldC0tb3Blbl09XCJwYW5lbE9wZW5cIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICA+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgc2RjLXBvcG92ZXItY29udGVudFxuICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX3BhbmVsXCJcbiAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cInBhbmVsTWF4SGVpZ2h0XCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwic2RjLWNvbWJvYm94X19wYW5lbC1zZWFyY2hcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNkYy1jb21ib2JveF9fcGFuZWwtc2VhcmNoLXJvd1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbWJvYm94X19wYW5lbC1zZWxlY3QtYWxsXCIgKm5nSWY9XCJtdWx0aXBsZVwiPlxuICAgICAgICAgICAgPHNkYy1jaGVja2JveFxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJhcmVBbGxGaWx0ZXJlZEl0ZW1zU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInVpLnNlbGVjdEFsbFRleHRcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVBbGxGaWx0ZXJlZEl0ZW1zKCRldmVudClcIlxuICAgICAgICAgICAgPjwvc2RjLWNoZWNrYm94PlxuICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDxzZGMtc2VhcmNoYm94XG4gICAgICAgICAgICAjcGFuZWxTZWFyY2hib3hSZWZcbiAgICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19wYW5lbC1zZWFyY2hib3hcIlxuICAgICAgICAgICAgW2lkZW50aXR5XT1cInVpLnBhbmVsU2VhcmNoSWRlbnRpdHlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJ1aS5wYW5lbFNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlYXJjaFRlcm1cIlxuICAgICAgICAgICAgW2RlYm91bmNlVGltZU1zXT1cIjBcIlxuICAgICAgICAgICAgW3N1Ym1pdE9uRW50ZXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2NsZWFyT25Fc2NhcGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJ1aS5wYW5lbFNlYXJjaEFyaWFMYWJlbFwiXG4gICAgICAgICAgICBbaW5wdXRSb2xlXT1cIm51bGxcIlxuICAgICAgICAgICAgW2lucHV0QXV0b2NvbXBsZXRlXT1cIidvZmYnXCJcbiAgICAgICAgICAgIFtpbnB1dEFyaWFDb250cm9sc109XCJ1aS5saXN0Ym94SWRcIlxuICAgICAgICAgICAgW2lucHV0QXJpYURlc2NyaWJlZEJ5XT1cInVpLm1lc3NhZ2VJZFwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaFRlcm1DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25DbGVhcik9XCJvblNlYXJjaENsZWFyZWQoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvblNlYXJjaGJveEtleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgPjwvc2RjLXNlYXJjaGJveD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG91dHB1dCBjbGFzcz1cInNkYy1jb21ib2JveF9fbG9hZGluZ1wiICpuZ0lmPVwiaXNPcHRpb25zTG9hZGluZ1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zcGlubmVyIGZhLXNwaW4gc2RjLWNvbWJvYm94X19sb2FkaW5nLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbWJvYm94X19sb2FkaW5nLXRleHRcIj57eyB1aS5sb2FkaW5nSXRlbXNUZXh0IH19PC9zcGFuPlxuICAgICAgPC9vdXRwdXQ+XG5cbiAgICAgIDxzZGMtZW1wdHktc3RhdGVcbiAgICAgICAgKm5nSWY9XCJzaG93RW1wdHlTdGF0ZVwiXG4gICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19lbXB0eVwiXG4gICAgICAgIHZhcmlhbnQ9XCJpbmxpbmUtdGV4dFwiXG4gICAgICAgIFt0aXRsZV09XCJ1aS5lbXB0eVRpdGxlVGV4dFwiXG4gICAgICA+PC9zZGMtZW1wdHktc3RhdGU+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJlZEl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwidXNlVmlydHVhbGl6ZWRPcHRpb25zOyBlbHNlIHN0YW5kYXJkT3B0aW9uc1RwbFwiXG4gICAgICAgICAgI29wdGlvbnNWaWV3cG9ydFJlZlxuICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19vcHRpb25zIHNkYy1jb21ib2JveF9fb3B0aW9ucy0tdmlydHVhbGl6ZWRcIlxuICAgICAgICAgIChzY3JvbGwpPVwib25PcHRpb25zU2Nyb2xsKClcIlxuICAgICAgICAgIChtb3VzZW1vdmUpPVwib25PcHRpb25zUGFuZWxNb3VzZU1vdmUoKVwiXG4gICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25PcHRpb25zUGFuZWxNb3VzZUxlYXZlKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBOT1NPTkFSOiBjdXN0b20gY29tYm9ib3ggcG9wdXAgaW50ZW50aW9uYWxseSB1c2VzIEFSSUEgbGlzdGJveCBzZW1hbnRpY3MgaW5zdGVhZCBvZiBhIG5hdGl2ZSBzZWxlY3QgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX29wdGlvbnMtbGlzdFwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCJ1aS5saXN0Ym94SWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ1aS5jb21ib2JveEFyaWFMYWJlbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwidWkuY29tYm9ib3hBcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICBbYXR0ci5yb2xlXT1cIidsaXN0Ym94J1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZV09XCJtdWx0aXBsZSA/ICd0cnVlJyA6IG51bGxcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInNkYy1jb21ib2JveF9fdmlydHVhbC1zcGFjZXJcIlxuICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImJlZm9yZVZpcnR1YWxTcGFjZXJIZWlnaHRcIlxuICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgPjwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB2aXNpYmxlT3B0aW9uIG9mIHZpc2libGVGaWx0ZXJlZEl0ZW1zXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX29wdGlvblwiXG4gICAgICAgICAgICAgIFtjbGFzcy5zZGMtY29tYm9ib3hfX29wdGlvbi0tYWN0aXZlXT1cImlzT3B0aW9uQWN0aXZlKHZpc2libGVPcHRpb24uaW5kZXgpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNkYy1jb21ib2JveF9fb3B0aW9uLS1pY29uLXNlbGVjdG9yXT1cImljb25TZWxlY3RvclwiXG4gICAgICAgICAgICAgIFtjbGFzcy5zZGMtY29tYm9ib3hfX29wdGlvbi0tc2VsZWN0ZWRdPVwiIW11bHRpcGxlICYmIGlzT3B0aW9uU2VsZWN0ZWQodmlzaWJsZU9wdGlvbi5pdGVtKVwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtb3B0aW9uLWluZGV4XT1cInZpc2libGVPcHRpb24uaW5kZXhcIlxuICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbk9wdGlvbk1vdXNlRW50ZXIodmlzaWJsZU9wdGlvbi5pbmRleClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLWNvbWJvYm94X19vcHRpb24tY2hlY2tcIiAqbmdJZj1cIm11bHRpcGxlXCI+XG4gICAgICAgICAgICAgICAgPHNkYy1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaXNPcHRpb25TZWxlY3RlZCh2aXNpYmxlT3B0aW9uLml0ZW0pXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uT3B0aW9uQ2hlY2tib3hDaGFuZ2UodmlzaWJsZU9wdGlvbi5pdGVtLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+PC9zZGMtY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gTk9TT05BUiAtLT5cbiAgICAgICAgICAgICAgPCEtLSB0aGUgY3VzdG9tIGxpc3Rib3gga2VlcHMgb3B0aW9uIHNlbWFudGljcyBvbiB0aGUgZm9jdXNhYmxlIGFjdGlvbiBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiAtLT5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19vcHRpb24tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJvcHRpb25JZCh2aXNpYmxlT3B0aW9uLmluZGV4KVwiXG4gICAgICAgICAgICAgICAgW2F0dHIucm9sZV09XCInb3B0aW9uJ1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc09wdGlvblNlbGVjdGVkKHZpc2libGVPcHRpb24uaXRlbSkgPyAndHJ1ZScgOiAnZmFsc2UnXCJcbiAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25PcHRpb25LZXlkb3duKCRldmVudCwgdmlzaWJsZU9wdGlvbi5pdGVtKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uT3B0aW9uQ2xpY2sodmlzaWJsZU9wdGlvbi5pdGVtKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1jb21ib2JveF9fb3B0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgIDxzZGMtaWNvbi1yZW5kZXJlclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInZpc2libGVPcHRpb24uaXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX29wdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwidmlzaWJsZU9wdGlvbi5pdGVtLmljb25cIlxuICAgICAgICAgICAgICAgICAgICBbaWNvblR5cGVdPVwidmlzaWJsZU9wdGlvbi5pdGVtLmljb25UeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiMTZcIlxuICAgICAgICAgICAgICAgICAgPjwvc2RjLWljb24tcmVuZGVyZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbWJvYm94X19vcHRpb24tdGV4dHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtY29tYm9ib3hfX29wdGlvbi1sYWJlbFwiPnt7IHZpc2libGVPcHRpb24uaXRlbS50ZXh0IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19vcHRpb24tbWV0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvcHRpb25NZXRhVGV4dCh2aXNpYmxlT3B0aW9uLml0ZW0pIGFzIG9wdGlvbk1ldGFcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uTWV0YSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIW11bHRpcGxlICYmIGlzT3B0aW9uU2VsZWN0ZWQodmlzaWJsZU9wdGlvbi5pdGVtKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1jaGVjayBzZGMtY29tYm9ib3hfX29wdGlvbi1zZWxlY3RlZC1pY29uXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInNkYy1jb21ib2JveF9fdmlydHVhbC1zcGFjZXJcIlxuICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImFmdGVyVmlydHVhbFNwYWNlckhlaWdodFwiXG4gICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc3RhbmRhcmRPcHRpb25zVHBsPlxuICAgICAgICAgIDwhLS0gTk9TT05BUjogY3VzdG9tIGNvbWJvYm94IHBvcHVwIGludGVudGlvbmFsbHkgdXNlcyBBUklBIGxpc3Rib3ggc2VtYW50aWNzIGluc3RlYWQgb2YgYSBuYXRpdmUgc2VsZWN0IC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19vcHRpb25zXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cInVpLmxpc3Rib3hJZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInVpLmNvbWJvYm94QXJpYUxhYmVsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJ1aS5jb21ib2JveEFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiJ2xpc3Rib3gnXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbXVsdGlzZWxlY3RhYmxlXT1cIm11bHRpcGxlID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIChtb3VzZW1vdmUpPVwib25PcHRpb25zUGFuZWxNb3VzZU1vdmUoKVwiXG4gICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvbk9wdGlvbnNQYW5lbE1vdXNlTGVhdmUoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkSXRlbXM7IGxldCBpbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5T3B0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNkYy1jb21ib2JveF9fb3B0aW9uXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNkYy1jb21ib2JveF9fb3B0aW9uLS1hY3RpdmVdPVwiaXNPcHRpb25BY3RpdmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNkYy1jb21ib2JveF9fb3B0aW9uLS1pY29uLXNlbGVjdG9yXT1cImljb25TZWxlY3RvclwiXG4gICAgICAgICAgICAgIFtjbGFzcy5zZGMtY29tYm9ib3hfX29wdGlvbi0tc2VsZWN0ZWRdPVwiIW11bHRpcGxlICYmIGlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uKVwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtb3B0aW9uLWluZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25PcHRpb25Nb3VzZUVudGVyKGluZGV4KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZGMtY29tYm9ib3hfX29wdGlvbi1jaGVja1wiICpuZ0lmPVwibXVsdGlwbGVcIj5cbiAgICAgICAgICAgICAgICA8c2RjLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJpc09wdGlvblNlbGVjdGVkKG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25PcHRpb25DaGVja2JveENoYW5nZShvcHRpb24sICRldmVudClcIlxuICAgICAgICAgICAgICAgID48L3NkYy1jaGVja2JveD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSBOT1NPTkFSIC0tPlxuICAgICAgICAgICAgICA8IS0tIHRoZSBjdXN0b20gbGlzdGJveCBrZWVwcyBvcHRpb24gc2VtYW50aWNzIG9uIHRoZSBmb2N1c2FibGUgYWN0aW9uIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIC0tPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX29wdGlvbi1hY3Rpb25cIlxuICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cIm9wdGlvbklkKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgW2F0dHIucm9sZV09XCInb3B0aW9uJ1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc09wdGlvblNlbGVjdGVkKG9wdGlvbikgPyAndHJ1ZScgOiAnZmFsc2UnXCJcbiAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25PcHRpb25LZXlkb3duKCRldmVudCwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uT3B0aW9uQ2xpY2sob3B0aW9uKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1jb21ib2JveF9fb3B0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgIDxzZGMtaWNvbi1yZW5kZXJlclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX29wdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwib3B0aW9uLmljb25cIlxuICAgICAgICAgICAgICAgICAgICBbaWNvblR5cGVdPVwib3B0aW9uLmljb25UeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiMTZcIlxuICAgICAgICAgICAgICAgICAgPjwvc2RjLWljb24tcmVuZGVyZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbWJvYm94X19vcHRpb24tdGV4dHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtY29tYm9ib3hfX29wdGlvbi1sYWJlbFwiPnt7IG9wdGlvbi50ZXh0IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19vcHRpb24tbWV0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvcHRpb25NZXRhVGV4dChvcHRpb24pIGFzIG9wdGlvbk1ldGFcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uTWV0YSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIW11bHRpcGxlICYmIGlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1jaGVjayBzZGMtY29tYm9ib3hfX29wdGlvbi1zZWxlY3RlZC1pY29uXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L3NkYy1wb3BvdmVyPlxuXG4gIDxzbWFsbFxuICAgICpuZ0lmPVwidWkubWVzc2FnZVRleHRcIlxuICAgIFtpZF09XCJ1aS5tZXNzYWdlSWRcIlxuICAgIFtuZ0NsYXNzXT1cImdldEludmFsaWRNZXNzYWdlQ2xhc3MoKVwiXG4gICAgcm9sZT1cImFsZXJ0XCJcbiAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICA+XG4gICAge3sgdWkubWVzc2FnZVRleHQgfX1cbiAgPC9zbWFsbD5cbjwvZGl2PlxuIl19
|
|
1005
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQWlCLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JPLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQ0wsb0NBQW9DLEVBQ3BDLGlDQUFpQyxFQUNqQyx3QkFBd0IsRUFDeEIsa0NBQWtDLEVBQ2xDLHlDQUF5QyxFQUN6Qyw0Q0FBNEMsRUFDNUMsK0NBQStDLEVBQy9DLDhCQUE4QixFQUM5QixpQ0FBaUMsRUFDbEMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFJekUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDcEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSxnQ0FBZ0MsRUFBRSwyQkFBMkIsRUFBRSw0QkFBNEIsRUFBRSxvQkFBb0IsRUFBRSw2QkFBNkIsRUFBRSxnQkFBZ0IsRUFBRSwyQkFBMkIsRUFBRSw4QkFBOEIsRUFBRSxpQ0FBaUMsRUFBMEssTUFBTSxnQ0FBZ0MsQ0FBQzs7OztBQTJCNWhCLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxlQUE0QztJQUNoRSxTQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDckMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2hDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ25ELGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ25DLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2RCxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLFFBQVEsQ0FBcUI7SUFDN0IsTUFBTSxHQUFHLHdCQUF3QixDQUFDO0lBQ2xDLE9BQU8sR0FBcUIsRUFBRSxDQUFDO0lBQy9CLG1CQUFtQixDQUFVO0lBQzdCLGlCQUFpQixHQUFHLG9DQUFvQyxDQUFDO0lBQ3pELFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDakIsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUNyQixhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLFdBQVcsR0FBa0IsSUFBSSxDQUFDO0lBQ2xDLG1CQUFtQixHQUFvQixPQUFPLENBQUM7SUFDL0MsZ0JBQWdCLEdBQWlCLE1BQU0sQ0FBQztJQUN2QixrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztJQUNwRCxPQUFPLENBQW9CO0lBQ3hCLGlCQUFpQixDQUEyQjtJQUMvQyxjQUFjLENBQWdDO0lBQzNDLGNBQWMsQ0FBc0I7SUFDeEMsYUFBYSxDQUEyQjtJQUN2QyxjQUFjLENBQTJCO0lBQ3JDLGtCQUFrQixDQUEyQjtJQUN2RSxhQUFhLEdBQTZCLEVBQUUsQ0FBQztJQUM3QyxvQkFBb0IsR0FBNEIsRUFBRSxDQUFDO0lBQzFDLEtBQUssR0FBa0IsSUFBSSxDQUFDO0lBQ3JDLFdBQVcsR0FBd0IsTUFBTSxDQUFDO0lBQzFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckIseUJBQXlCLEdBQUcsSUFBSSxDQUFDO0lBQ2xDLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDaEIsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQzFCLGdCQUFnQixHQUFZLElBQUksQ0FBQztJQUNqQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDdkIsYUFBYSxHQUE2QixFQUFFLENBQUM7SUFDN0MscUJBQXFCLEdBQUcsRUFBRSxDQUFDO0lBQzNCLGlCQUFpQixHQUE2QixFQUFFLENBQUM7SUFDakQsc0JBQXNCLEdBQXlCLElBQUksQ0FBQztJQUNwRCxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDMUIsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQzNCLGtCQUFrQixDQUFrQjtJQUNwQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDdEIsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUM1QjtRQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDekMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFDRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLElBQUksSUFBSSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFDRCxlQUFlO1FBQ2IsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQztRQUM1RCxJQUFJLE9BQU8sY0FBYyxLQUFLLFdBQVcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBQ1EsVUFBVSxDQUFDLEtBQW9CO1FBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsOEJBQThCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFJLEVBQUU7UUFDSixPQUFPLG9CQUFvQixDQUFDO1lBQzFCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzVCLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7WUFDaEMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsYUFBYSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztTQUNwRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsSUFBSSxvQkFBb0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsSUFBSSxhQUFhO1FBQ2YsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUMvQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDekMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFrQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFDRCxJQUFJLHdCQUF3QjtRQUMxQixPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFDRCxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLHVCQUF1QixDQUM1QixJQUFJLENBQUMsU0FBUyxFQUNkLElBQUksQ0FBQyxtQkFBbUIsRUFDeEIsaUNBQWlDLEVBQ2pDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FDOUIsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBQ0QsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbEYsQ0FBQztJQUNELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELElBQUksY0FBYztRQUNoQixPQUFPLGlDQUFpQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxJQUFJLDJCQUEyQjtRQUM3QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUNELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMscUJBQXFCLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN6RyxDQUFDO0lBQ0QsSUFBSSxxQkFBcUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQ0QsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYTtZQUN2QixDQUFDLENBQUMsNENBQTRDO1lBQzlDLENBQUMsQ0FBQyx5Q0FBeUMsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsSUFBSSx5QkFBeUI7UUFDM0IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsSUFBSSx3QkFBd0I7UUFDMUIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUNELFFBQVEsQ0FBQyxLQUE0QztRQUNuRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsWUFBWSxDQUFDLEtBQVk7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFFLEtBQUssQ0FBQyxNQUFrQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsS0FBb0I7UUFDckMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsMEJBQTBCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQ0QsZUFBZTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNoQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFDRCxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1lBQy9CLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUNELGNBQWMsQ0FBQyxLQUFvQjtRQUNqQyxJQUFJLEtBQUssQ0FBQyxNQUFNLFlBQVksV0FBVyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDOUYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxLQUFvQjtRQUNuQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUMsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsS0FBb0I7UUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUMsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNELGtCQUFrQixDQUFDLEtBQWlCO1FBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO1FBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLHFGQUFxRjtZQUNyRix1RkFBdUY7WUFDdkYsNkNBQTZDO1lBQzdDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFCLE9BQU87UUFDVCxDQUFDO1FBQ0QsdUZBQXVGO1FBQ3ZGLHFGQUFxRjtRQUNyRiw2RkFBNkY7UUFDN0YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMvQixVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsaUJBQWlCLENBQUMsS0FBaUI7UUFDakMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEMsT0FBTztRQUNULENBQUM7UUFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUNELG1CQUFtQixDQUFDLElBQWE7UUFDL0IsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDNUIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxXQUFXLENBQUMsS0FBYTtRQUN2QixLQUFLLEVBQUUsY0FBYyxFQUFFLEVBQUUsQ0FBQztRQUMxQixLQUFLLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsUUFBUSxDQUFDLEtBQWE7UUFDcEIsS0FBSyxFQUFFLGNBQWMsRUFBRSxFQUFFLENBQUM7UUFDMUIsS0FBSyxFQUFFLGVBQWUsRUFBRSxFQUFFLENBQUM7UUFDM0IsTUFBTSxZQUFZLEdBQXVDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25GLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUMzQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFDRCxhQUFhLENBQUMsTUFBOEI7UUFDMUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0Qsc0JBQXNCLENBQUMsTUFBOEIsRUFBRSxPQUFnQjtRQUNyRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQ0QsZUFBZSxDQUFDLEtBQW9CLEVBQUUsTUFBOEI7UUFDbEUsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQy9DLE9BQU87UUFDVCxDQUFDO1FBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNELHNCQUFzQixDQUFDLE9BQWdCO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNsRCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDNUQsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEMsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7YUFDMUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNsRCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUNELGtCQUFrQixDQUFDLE1BQThCLEVBQUUsS0FBYTtRQUM5RCxLQUFLLEVBQUUsY0FBYyxFQUFFLEVBQUUsQ0FBQztRQUMxQixLQUFLLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDbEQsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3BELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBQ0QsYUFBYSxDQUFDLEtBQXNCO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUNELGFBQWEsQ0FBQyxVQUFtQjtRQUMvQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNwQyxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ25DLE1BQU0sR0FBRyxHQUFHLFVBQW9ELENBQUM7WUFDakUsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDcEMsT0FBTztvQkFDTCxHQUFJLEdBQWtCO29CQUN0QixJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUNsQyxVQUFVLEVBQUUsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQzFGLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxPQUFPLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztZQUMxRSxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQXlCLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUMxRixDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsTUFBOEI7UUFDN0MsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUNELGNBQWMsQ0FBQyxLQUFhO1FBQzFCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixLQUFLLEtBQUssQ0FBQztJQUN6QyxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsS0FBYTtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDcEMsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCx1QkFBdUI7UUFDckIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQztJQUN4QyxDQUFDO0lBQ0Qsd0JBQXdCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUNwQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDRCxjQUFjLENBQUMsTUFBOEI7UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDOUMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQztJQUN0QyxDQUFDO0lBQ0QsUUFBUSxDQUFDLEtBQWE7UUFDcEIsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxXQUFXLEtBQUssRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFDRCxtQkFBbUIsQ0FBQyxNQUE4QjtRQUNoRCxNQUFNLFFBQVEsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO1FBQy9GLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFDRCxrQkFBa0IsR0FBRyxDQUFDLE1BQWMsRUFBRSxJQUE0QixFQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3ZGLHVCQUF1QjtRQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNPLFNBQVMsQ0FBQyxPQUFpQztRQUNqRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBQ08sVUFBVSxDQUFDLE1BQXdCO1FBQ3pDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sS0FBSyxRQUFRLENBQUM7UUFDakcsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFDTyxrQkFBa0I7UUFDeEIsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RCxNQUFNLFFBQVEsR0FBRyxPQUFPLHFCQUFxQixLQUFLLFVBQVU7WUFDMUQsQ0FBQyxDQUFDLHFCQUFxQjtZQUN2QixDQUFDLENBQUMsQ0FBQyxRQUE4QixFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0csUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDTyxnQkFBZ0IsS0FBVyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLGNBQWM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUNPLFlBQVk7UUFDbEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMvQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUNPLG9CQUFvQixDQUFDLHNCQUFzQixHQUFHLEtBQUs7UUFDekQsTUFBTSxLQUFLLEdBQUcsMkJBQTJCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3BDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLO1lBQ3hCLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RCxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxLQUFLLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUNyQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNqSCxDQUFDO0lBQ08sbUJBQW1CLENBQUMsS0FBYSxFQUFFLGFBQWEsR0FBRyxJQUFJO1FBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMzQixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztRQUNsQyxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFDTyxhQUFhLENBQUMsSUFBbUI7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkUsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ILENBQUM7SUFDTywwQkFBMEIsQ0FBQyxpQkFBcUMsSUFBSSxDQUFDLGlCQUFpQjtRQUM1RixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0IsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLGVBQWUsR0FBRztZQUN0QixjQUFjO1lBQ2QsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDBCQUEwQjtZQUMzRixJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJO1NBQ3JDLENBQUM7UUFDRixNQUFNLFNBQVMsR0FBRyxlQUFlO2FBQzlCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUN6RyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDTywrQkFBK0I7UUFDckMsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDO1lBQ3hELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztnQkFDbEMsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUMvRCxNQUFNLFlBQVksR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUN0RCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQ3ZDLE1BQU0sY0FBYyxHQUFHLFdBQVcsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQzNELElBQUksU0FBUyxHQUFHLFdBQVcsRUFBRSxDQUFDO2dCQUM1QixRQUFRLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUNqQyxDQUFDO2lCQUFNLElBQUksWUFBWSxHQUFHLGNBQWMsRUFBRSxDQUFDO2dCQUN6QyxRQUFRLENBQUMsU0FBUyxHQUFHLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQzVELENBQUM7aUJBQU0sQ0FBQztnQkFDTixtREFBbUQ7WUFDckQsQ0FBQztZQUNELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hDLE9BQU87UUFDVCxDQUFDO1FBQ0QsY0FBYyxDQUFDLEdBQUcsRUFBRTtZQUNsQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUMzRSxJQUFJLE9BQU8sSUFBSSxFQUFFLGNBQWMsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDTyx1QkFBdUI7UUFDN0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDTyxrQkFBa0IsQ0FBQyxNQUE4QjtRQUN2RCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNPLFlBQVksQ0FBQyxNQUE4QixFQUFFLGVBQStCLElBQUk7UUFDdEYsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFGLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQzthQUFNLENBQUM7WUFDTixjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2FBQzFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbEQsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNPLHdCQUF3QixDQUFDLFdBQVcsR0FBRyxLQUFLO1FBQ2xELE1BQU0sU0FBUyxHQUFHLDJCQUEyQixDQUFDO1lBQzVDLFdBQVc7WUFDWCxVQUFVLEVBQUUsa0NBQWtDO1lBQzlDLHNCQUFzQixFQUFFLCtDQUErQztZQUN2RSxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQ3JDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxxQkFBcUI7WUFDakQsUUFBUSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxhQUFhO1NBQ2pELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUM7UUFDckQsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDO1FBQ2pELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUMsb0JBQW9CLENBQUM7SUFDN0QsQ0FBQztJQUNPLGdCQUFnQjtRQUN0QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztZQUN2QyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3BELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQ2hDLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3JGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUM1QixDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDckMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEgsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFDTyxNQUFNLENBQUMsS0FBYyxJQUFZLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakYsYUFBYSxDQUFDLEtBQWMsSUFBWSxPQUFPLHVCQUF1QixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RywyQkFBMkI7UUFDakMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLE9BQXVCLENBQUM7UUFDdEMsQ0FBQztRQUNELElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQztZQUNoRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFFLE1BQXVCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvRCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQVksV0FBVztRQUNyQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDL0UsQ0FBQztJQUNELElBQVksYUFBYTtRQUN2QixPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFDRCxJQUFZLGlCQUFpQjtRQUMzQixPQUFPLG9CQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNELElBQVksMEJBQTBCO1FBQ3BDLE9BQU8sNkJBQTZCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNPLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO1lBQzdCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDcEYsQ0FBQztJQUNPLGtCQUFrQixDQUFDLEtBQXlDO1FBQ2xFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDTyxvQkFBb0IsQ0FBQyxLQUFvQjtRQUMvQyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUNyRixDQUFDO0lBQ08sNEJBQTRCO1FBQ2xDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sUUFBUSxHQUFHLE9BQU8scUJBQXFCLEtBQUssVUFBVTtZQUMxRCxDQUFDLENBQUMscUJBQXFCO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDLFFBQThCLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ08sb0JBQW9CO1FBQzFCLE1BQU0sZUFBZSxHQUF1QixJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDM0csSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLGVBQWUsRUFBRSxDQUFDO1lBQ3pDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxlQUFlLENBQUM7UUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ08sa0NBQWtDO1FBQ3hDLE9BQU8saUNBQWlDLENBQUM7WUFDdkMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtZQUM1QyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUN6QyxjQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsV0FBVyxJQUFJLENBQUM7WUFDbkUsYUFBYSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLFdBQVcsSUFBSSxDQUFDO1NBQ3BFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBQ08sb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUNPLHlCQUF5QixDQUFDLE9BQXNCO1FBQ3RELElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFDTywwQkFBMEIsQ0FBQyxPQUFzQjtRQUN2RCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUNPLHlCQUF5QixDQUFDLE9BQXNCO1FBQ3RELElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFDTywwQkFBMEIsQ0FBQyxPQUFzQjtRQUN2RCxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRS9FLE9BQU8sZ0JBQWdCLElBQUksbUJBQW1CLElBQUksY0FBYyxDQUFDO0lBQ25FLENBQUM7SUFDTyx3QkFBd0IsQ0FBQyxPQUFzQjtRQUNyRCxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBQ08sNkJBQTZCLENBQUMsT0FBc0I7UUFDMUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5RixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNPLHlCQUF5QixDQUFDLEtBQW9CO1FBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQzVCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNPLHFCQUFxQixDQUFDLEtBQW9CO1FBQ2hELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUM5QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ08sb0JBQW9CLENBQUMsSUFBbUI7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUMvQixJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQ08sb0JBQW9CLENBQUMsS0FBb0I7UUFDL0MsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUM7UUFFN0QsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNPLHVCQUF1QixDQUFDLEtBQW9CO1FBQ2xELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUM5QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDNUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDTywwQkFBMEIsQ0FBQyxLQUFvQjtRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDekIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDTywyQkFBMkIsQ0FBQyxLQUFvQjtRQUN0RCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDMUIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNPLHlCQUF5QixDQUFDLEtBQW9CO1FBQ3BELElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNPLG1CQUFtQixDQUFDLEtBQW9CO1FBQzlDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzdDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDN0MsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ08sa0JBQWtCLENBQUMsS0FBb0I7UUFDN0MsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxRyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ08sOEJBQThCO1FBQ3BDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ2hDLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixFQUFFLEtBQUssSUFBSSxJQUFJLENBQUM7UUFDbEQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDO0lBQ3pDLENBQUM7SUFDTyx5QkFBeUIsQ0FDL0IsY0FBZ0MsRUFDaEMsTUFBOEIsRUFDOUIsWUFBNEI7UUFFNUIsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDMUIsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztRQUNELE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ08sK0JBQStCO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ3pHLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQjthQUNoRCwyQkFBMkIsRUFBRTthQUM3QixJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNkLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQ0FBZ0MsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN2RyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNoRCxDQUFDLENBQUM7YUFDRCxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztZQUNoQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO1lBQ25DLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNPLDBCQUEwQixDQUFDLFdBQVcsR0FBRyxLQUFLO1FBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDbkQsT0FBTztRQUNULENBQUM7UUFDRCxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDakUsTUFBTSxRQUFRLEdBQUcsT0FBTyxxQkFBcUIsS0FBSyxVQUFVO1lBQzFELENBQUMsQ0FBQyxxQkFBcUI7WUFDdkIsQ0FBQyxDQUFDLENBQUMsUUFBOEIsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQ08sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztJQUNqQyxDQUFDO3dHQW41QlUsaUJBQWlCOzRGQUFqQixpQkFBaUIsb2VBUmpCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDaEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLG1FQXFCVSxnQkFBZ0IsNnJCQzNFN0Isc3ptQkFxY0EscXFTRHJhSSxZQUFZLGlOQUNaLFdBQVcsOFZBQ1gsZUFBZSwrQkFDZixxQkFBcUIsb0dBQ3JCLGlCQUFpQiwwS0FDakIsbUJBQW1CLG1YQUNuQixnQkFBZ0IseVlBQ2hCLGtCQUFrQixvV0FDbEIsZ0JBQWdCOzs0RkFnQlAsaUJBQWlCO2tCQTFCN0IsU0FBUzs4QkFDQzt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixxQkFBcUI7d0JBQ3JCLGlCQUFpQjt3QkFDakIsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsZ0JBQWdCO3FCQUNqQixjQUNXLElBQUksWUFDTixjQUFjLG1CQUdQLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLFFBQVEsYUFDOUI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUM7NEJBQ2hELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO3dEQVFRLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNvQixrQkFBa0I7c0JBQTNDLE1BQU07dUJBQUMsZ0JBQWdCO2dCQUNLLE9BQU87c0JBQW5DLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNLLGlCQUFpQjtzQkFBaEQsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ0QsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ0ssY0FBYztzQkFBN0MsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ0YsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNHLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNNLGtCQUFrQjtzQkFBbEQsU0FBUzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24sIGZvcndhcmRSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIENPTUJPQk9YX0RFRkFVTFRfTUFYX1NFTEVDVEVEX0xBQkVMUyxcbiAgQ09NQk9CT1hfREVGQVVMVF9QQU5FTF9NQVhfSEVJR0hULFxuICBDT01CT0JPWF9ERUZBVUxUX1pfSU5ERVgsXG4gIENPTUJPQk9YX0lDT05fU0VMRUNUT1JfQlVGRkVSX1NJWkUsXG4gIENPTUJPQk9YX0lDT05fU0VMRUNUT1JfREVGQVVMVF9ST1dfSEVJR0hULFxuICBDT01CT0JPWF9JQ09OX1NFTEVDVE9SX1JPV19IRUlHSFRfV0lUSF9DTEFTUyxcbiAgQ09NQk9CT1hfSUNPTl9TRUxFQ1RPUl9WSUVXUE9SVF9GQUxMQkFDS19IRUlHSFQsXG4gIENPTUJPQk9YX1JFTU9WRV9DSElQX0xBQkVMX0tFWSxcbiAgQ09NQk9CT1hfU0VMRUNURURfSVRFTVNfTEFCRUxfS0VZXG59IGZyb20gJy4uLy4uL2NvcmUvY29uc3RhbnRzL2NvbWJvYm94LmNvbnN0JztcbmltcG9ydCB7IEljb25TZWxlY3RvckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9pY29uLXNlbGVjdG9yLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBJbnB1dHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2RpcmVjdGl2ZXMvaW5wdXRzLmRpcmVjdGl2ZSc7XG5pbXBvcnQgdHlwZSB7IENoaXBSZW1vdmVFdmVudCB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMvY2hpcHMudHlwZSc7XG5pbXBvcnQgdHlwZSB7IE9wdGlvbkl0ZW0sIE9wdGlvbnMsIE9wdGlvblZhbHVlIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcy9zZW1hbnRpY3MudHlwZSc7XG5pbXBvcnQgdHlwZSB7IFRvb2x0aXBFdmVudCwgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcy90b29sdGlwLnR5cGUnO1xuaW1wb3J0IHsgcmVzb2x2ZVRyYW5zbGF0YWJsZVRleHQgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2kxOG4udXRpbCc7XG5pbXBvcnQgeyBuZXh0U2VxdWVudGlhbElkIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9pZC51dGlsJztcbmltcG9ydCB7IEljb25SZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUvY29tcG9uZW50cy9pY29uLXJlbmRlcmVyL2ljb24tcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IEVtcHR5U3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4uL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoYm94L3NlYXJjaGJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9vbHRpcENvbXBvbmVudCB9IGZyb20gJy4uL3Rvb2x0aXAvdG9vbHRpcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgYXNDb21ib2JveEFycmF5LCBidWlsZENvbWJvYm94U2VhcmNoVGV4dCwgYnVpbGRDb21ib2JveFVpU3RhdGUsIGJ1aWxkSWNvblNlbGVjdG9yQ29tYm9ib3hPcHRpb25zLCBidWlsZFZpc2libGVDb21ib2JveE9wdGlvbnMsIGNyZWF0ZVJlc29sdmVkQ29tYm9ib3hPcHRpb24sIGdldEFjdGl2ZU9wdGlvblZhbHVlLCBnZXRGaXJzdFNlbGVjdGVkRmlsdGVyZWRWYWx1ZSwgZ2V0U2VsZWN0ZWRDb3VudCwgbm9ybWFsaXplQ29tYm9ib3hTZWFyY2hUZXh0LCBub3JtYWxpemVFeHRlcm5hbENvbWJvYm94VmFsdWUsIHNob3VsZENvbGxhcHNlQ29tYm9ib3hDaGlwRGlzcGxheSwgdHlwZSBDb21ib2JveERpc3BsYXlNb2RlLCB0eXBlIENvbWJvYm94UmVzb2x2ZWRPcHRpb24sIHR5cGUgQ29tYm9ib3hVaVN0YXRlLCB0eXBlIENvbWJvYm94VmFsdWUsIHR5cGUgQ29tYm9ib3hWaXNpYmxlT3B0aW9uLCB0eXBlIEhpZ2hsaWdodFN0ZXAsIHR5cGUgUGFuZWxDbG9zZVJlYXNvbiB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvY29tYm9ib3gudXRpbCc7XG5AQ29tcG9uZW50KHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgSWNvblJlbmRlcmVyQ29tcG9uZW50LFxuICAgIENoZWNrYm94Q29tcG9uZW50LFxuICAgIEVtcHR5U3RhdGVDb21wb25lbnQsXG4gICAgUG9wb3ZlckNvbXBvbmVudCxcbiAgICBTZWFyY2hib3hDb21wb25lbnQsXG4gICAgVG9vbHRpcENvbXBvbmVudFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3NkYy1jb21ib2JveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21ib2JveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9jb21ib2JveC5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb21ib2JveENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveENvbXBvbmVudCBleHRlbmRzIElucHV0c0NvbXBvbmVudDxPcHRpb25WYWx1ZSB8IE9wdGlvblZhbHVlW10+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGljb25TZWxlY3RvckRhdGEgPSBpbmplY3QoSWNvblNlbGVjdG9yRGF0YVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2VuZXJhdGVkSWQgPSBuZXh0U2VxdWVudGlhbElkKCdzZGMtY29tYm9ib3gnKTtcbiAgQElucHV0KCkgbXVsdGlwbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgYXBwZW5kVG86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgekluZGV4ID0gQ09NQk9CT1hfREVGQVVMVF9aX0lOREVYO1xuICBASW5wdXQoKSBvcHRpb25zOiBPcHRpb25zIHwgc3RyaW5nID0gW107XG4gIEBJbnB1dCgpIG92ZXJyaWRlQ2hpcE1lc3NhZ2U/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1heFNlbGVjdGVkTGFiZWxzID0gQ09NQk9CT1hfREVGQVVMVF9NQVhfU0VMRUNURURfTEFCRUxTO1xuICBASW5wdXQoKSBzaG93Q2xlYXIgPSB0cnVlO1xuICBASW5wdXQoKSBpY29uU2VsZWN0b3IgPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0ljb25DbGFzcyA9IGZhbHNlO1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwUG9zaXRpb246IFRvb2x0aXBQb3NpdGlvbiA9ICdyaWdodCc7XG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwRXZlbnQ6IFRvb2x0aXBFdmVudCA9ICdib3RoJztcbiAgQE91dHB1dCgnb25TZWxlY3RlZEl0ZW0nKSBzZWxlY3RlZFZhbHVlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbWJvYm94VmFsdWU+KCk7XG4gIEBWaWV3Q2hpbGQoUG9wb3ZlckNvbXBvbmVudCkgcG9wb3Zlcj86IFBvcG92ZXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3RyaWdnZXJDb250cm9sUmVmJykgdHJpZ2dlckNvbnRyb2xSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnc2luZ2xlSW5wdXRSZWYnKSBzaW5nbGVJbnB1dFJlZj86IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3BhbmVsU2VhcmNoYm94UmVmJykgcGFuZWxTZWFyY2hib3g/OiBTZWFyY2hib3hDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ211bHRpVmFsdWVSZWYnKSBtdWx0aVZhbHVlUmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2NoaXBNZWFzdXJlUmVmJykgY2hpcE1lYXN1cmVSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnb3B0aW9uc1ZpZXdwb3J0UmVmJykgb3B0aW9uc1ZpZXdwb3J0UmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIHB1YmxpYyBmaWx0ZXJlZEl0ZW1zOiBDb21ib2JveFJlc29sdmVkT3B0aW9uW10gPSBbXTtcbiAgcHVibGljIHZpc2libGVGaWx0ZXJlZEl0ZW1zOiBDb21ib2JveFZpc2libGVPcHRpb25bXSA9IFtdO1xuICBwdWJsaWMgb3ZlcnJpZGUgdmFsdWU6IENvbWJvYm94VmFsdWUgPSBudWxsO1xuICBwdWJsaWMgZGlzcGxheU1vZGU6IENvbWJvYm94RGlzcGxheU1vZGUgPSAnY2hpcCc7XG4gIHB1YmxpYyBwYW5lbE9wZW4gPSBmYWxzZTtcbiAgcHVibGljIGhpZ2hsaWdodGVkSW5kZXggPSAtMTtcbiAgcHJpdmF0ZSBwb2ludGVyTW92ZWRTaW5jZUtleWJvYXJkID0gdHJ1ZTtcbiAgcHVibGljIHNlYXJjaFRlcm0gPSAnJztcbiAgcHVibGljIGljb25PcHRpb25zTG9hZGluZyA9IGZhbHNlO1xuICBwcml2YXRlIF9vcHRpb25zQ2FjaGVLZXk6IHVua25vd24gPSBudWxsO1xuICBwcml2YXRlIF9vcHRpb25zQ2FjaGVMYW5nID0gJyc7XG4gIHByaXZhdGUgX29wdGlvbnNDYWNoZTogQ29tYm9ib3hSZXNvbHZlZE9wdGlvbltdID0gW107XG4gIHByaXZhdGUgX2ljb25PcHRpb25zQ2FjaGVMYW5nID0gJyc7XG4gIHByaXZhdGUgX2ljb25PcHRpb25zQ2FjaGU6IENvbWJvYm94UmVzb2x2ZWRPcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIGljb25PcHRpb25zTG9hZFByb21pc2U6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBza2lwTmV4dEZvY3VzT3BlbiA9IGZhbHNlO1xuICBwcml2YXRlIGNsaWNrV2lsbE9wZW5QYW5lbCA9IGZhbHNlO1xuICBwcml2YXRlIGNoaXBMYXlvdXRPYnNlcnZlcj86IFJlc2l6ZU9ic2VydmVyO1xuICBwcml2YXRlIHZpc2libGVTdGFydEluZGV4ID0gMDtcbiAgcHJpdmF0ZSB2aXNpYmxlRW5kSW5kZXggPSAwO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnRyYW5zbGF0ZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNldE9wdGlvbnNDYWNoZSgpO1xuICAgICAgICB0aGlzLnJlZnJlc2hDb21ib2JveFN0YXRlKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlT3B0aW9uc0NhY2hlQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICB0aGlzLmhhbmRsZVZpcnR1YWxXaW5kb3dDaGFuZ2VzKGNoYW5nZXMpO1xuICAgIHRoaXMuaGFuZGxlSWNvblNlbGVjdG9yQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICB0aGlzLm5vcm1hbGl6ZVZhbHVlRm9yTXVsdGlwbGVNb2RlKGNoYW5nZXMpO1xuICAgIGlmICh0aGlzLnNob3VsZFJlZnJlc2hGaWx0ZXJlZFN0YXRlKGNoYW5nZXMpKSB7XG4gICAgICB0aGlzLnJlZnJlc2hGaWx0ZXJlZEl0ZW1zKHRoaXMuaW52YWxpZCAmJiAhdGhpcy5oYXNTZWFyY2hRdWVyeSk7XG4gICAgICB0aGlzLnN5bmNIaWdobGlnaHRXaXRoU2VsZWN0aW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3VsZFJlZnJlc2hEaXNwbGF5TW9kZShjaGFuZ2VzKSkge1xuICAgICAgdGhpcy51cGRhdGVEaXNwbGF5TW9kZSgpO1xuICAgICAgdGhpcy5zY2hlZHVsZUNoaXBQcmVzZW50YXRpb25TeW5jKCk7XG4gICAgfVxuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBtdWx0aVZhbHVlRWxlbWVudCA9IHRoaXMubXVsdGlWYWx1ZVJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAodHlwZW9mIFJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJyAmJiBtdWx0aVZhbHVlRWxlbWVudCkge1xuICAgICAgdGhpcy5jaGlwTGF5b3V0T2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gdGhpcy5zY2hlZHVsZUNoaXBQcmVzZW50YXRpb25TeW5jKCkpO1xuICAgICAgdGhpcy5jaGlwTGF5b3V0T2JzZXJ2ZXIub2JzZXJ2ZShtdWx0aVZhbHVlRWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuc2NoZWR1bGVDaGlwUHJlc2VudGF0aW9uU3luYygpO1xuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2hpcExheW91dE9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gIH1cbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogQ29tYm9ib3hWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBub3JtYWxpemVFeHRlcm5hbENvbWJvYm94VmFsdWUodmFsdWUsIHRoaXMubXVsdGlwbGUpO1xuICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xuICAgIHRoaXMuZW5zdXJlSWNvblNlbGVjdG9yT3B0aW9uc0xvYWRlZCgpO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcmVkSXRlbXMoKTtcbiAgICB0aGlzLnN5bmNIaWdobGlnaHRXaXRoU2VsZWN0aW9uKCk7XG4gICAgdGhpcy51cGRhdGVEaXNwbGF5TW9kZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVDaGlwUHJlc2VudGF0aW9uU3luYygpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIGdldCB1aSgpOiBDb21ib2JveFVpU3RhdGUge1xuICAgIHJldHVybiBidWlsZENvbWJvYm94VWlTdGF0ZSh7XG4gICAgICBnZW5lcmF0ZWRJZDogdGhpcy5nZW5lcmF0ZWRJZCxcbiAgICAgIGlkZW50aXR5SWQ6IHRoaXMuaWRlbnRpdHkuaWQsXG4gICAgICBpZGVudGl0eU5hbWU6IHRoaXMuaWRlbnRpdHkubmFtZSxcbiAgICAgIGxhYmVsOiB0aGlzLmxhYmVsLFxuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucGxhY2Vob2xkZXIsXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBpbmZvVG9vbHRpcDogdGhpcy5pbmZvVG9vbHRpcCxcbiAgICAgIHJlcXVpcmVkOiB0aGlzLnJlcXVpcmVkLFxuICAgICAgdHJhbnNsYXRlOiB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgIHRyYW5zbGF0ZVRleHQ6ICh2YWx1ZSkgPT4gdGhpcy50cmFuc2xhdGVUZXh0KHZhbHVlKVxuICAgIH0pO1xuICB9XG4gIGdldCBub3JtYWxpemVkT3B0aW9ucygpOiBPcHRpb25JdGVtW10ge1xuICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZU9wdGlvbnMoKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRTaW5nbGVPcHRpb24oKTogQ29tYm9ib3hSZXNvbHZlZE9wdGlvbiB8IG51bGwge1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZU9wdGlvbih0aGlzLnZhbHVlKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJdGVtcygpOiBDb21ib2JveFJlc29sdmVkT3B0aW9uW10ge1xuICAgIHJldHVybiBhc0NvbWJvYm94QXJyYXkodGhpcy52YWx1ZSlcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiB0aGlzLnJlc29sdmVPcHRpb24oZW50cnkpKVxuICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgQ29tYm9ib3hSZXNvbHZlZE9wdGlvbiA9PiAhIWl0ZW0pO1xuICB9XG4gIGdldCBzaG91bGREaXNwbGF5Q2hpcFN1bW1hcnkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgJiYgdGhpcy5kaXNwbGF5TW9kZSA9PT0gJ3N1bW1hcnknICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwO1xuICB9XG4gIGdldCBzZWxlY3RlZEl0ZW1zTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZVRyYW5zbGF0YWJsZVRleHQoXG4gICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgIHRoaXMub3ZlcnJpZGVDaGlwTWVzc2FnZSxcbiAgICAgIENPTUJPQk9YX1NFTEVDVEVEX0lURU1TX0xBQkVMX0tFWSxcbiAgICAgIHsgY291bnQ6IHRoaXMuc2VsZWN0ZWRDb3VudCB9XG4gICAgKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRTdW1tYXJ5VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXNMYWJlbC5yZXBsYWNlKC9cXHtjb3VudFxcfS9nLCBTdHJpbmcodGhpcy5zZWxlY3RlZENvdW50KSk7XG4gIH1cbiAgZ2V0IGFjdGl2ZURlc2NlbmRhbnQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA+PSAwID8gdGhpcy5vcHRpb25JZCh0aGlzLmhpZ2hsaWdodGVkSW5kZXgpIDogbnVsbDtcbiAgfVxuICBnZXQgaGFzQ2xlYXJBY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0NsZWFyICYmIHRoaXMuc2VsZWN0ZWRDb3VudCA+IDA7XG4gIH1cbiAgZ2V0IHBhbmVsTWF4SGVpZ2h0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIENPTUJPQk9YX0RFRkFVTFRfUEFORUxfTUFYX0hFSUdIVDtcbiAgfVxuICBnZXQgYXJlQWxsRmlsdGVyZWRJdGVtc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoID4gMCAmJiB0aGlzLmZpbHRlcmVkSXRlbXMuZXZlcnkoKGl0ZW0pID0+IHRoaXMuaXNPcHRpb25TZWxlY3RlZChpdGVtKSk7XG4gIH1cbiAgZ2V0IGhhc1NlYXJjaFF1ZXJ5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaFRlcm0udHJpbSgpLmxlbmd0aCA+IDA7XG4gIH1cbiAgZ2V0IGlzT3B0aW9uc0xvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaWNvblNlbGVjdG9yICYmIHRoaXMuaWNvbk9wdGlvbnNMb2FkaW5nICYmIHRoaXMuX2ljb25PcHRpb25zQ2FjaGVMYW5nICE9PSB0aGlzLmN1cnJlbnRMYW5nO1xuICB9XG4gIGdldCB1c2VWaXJ0dWFsaXplZE9wdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaWNvblNlbGVjdG9yICYmIHRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGggPiAwO1xuICB9XG4gIGdldCBzaG93RW1wdHlTdGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNPcHRpb25zTG9hZGluZyAmJiB0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoID09PSAwO1xuICB9XG4gIGdldCBvcHRpb25Sb3dIZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zaG93SWNvbkNsYXNzXG4gICAgICA/IENPTUJPQk9YX0lDT05fU0VMRUNUT1JfUk9XX0hFSUdIVF9XSVRIX0NMQVNTXG4gICAgICA6IENPTUJPQk9YX0lDT05fU0VMRUNUT1JfREVGQVVMVF9ST1dfSEVJR0hUO1xuICB9XG4gIGdldCBiZWZvcmVWaXJ0dWFsU3BhY2VySGVpZ2h0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZVN0YXJ0SW5kZXggKiB0aGlzLm9wdGlvblJvd0hlaWdodDtcbiAgfVxuICBnZXQgYWZ0ZXJWaXJ0dWFsU3BhY2VySGVpZ2h0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsICh0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoIC0gdGhpcy52aXNpYmxlRW5kSW5kZXgpICogdGhpcy5vcHRpb25Sb3dIZWlnaHQpO1xuICB9XG4gIG9uU2VhcmNoKGV2ZW50OiB7IHF1ZXJ5Pzogc3RyaW5nIH0gfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5vblNlYXJjaFRlcm1DaGFuZ2UoU3RyaW5nKGV2ZW50Py5xdWVyeSA/PyAnJykpO1xuICB9XG4gIG9uUGFuZWxJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm9uU2VhcmNoVGVybUNoYW5nZSgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsKT8udmFsdWUgPz8gJycpO1xuICB9XG4gIG9uU2VhcmNoVGVybUNoYW5nZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRBY3RpdmVWYWx1ZSA9IHRoaXMuYWN0aXZlT3B0aW9uVmFsdWU7XG4gICAgdGhpcy5zZWFyY2hUZXJtID0gdmFsdWUgPz8gJyc7XG4gICAgdGhpcy5vcGVuUGFuZWwoeyBmb2N1c1NlYXJjaDogZmFsc2UgfSk7XG4gICAgdGhpcy5yZWZyZXNoRmlsdGVyZWRJdGVtcygpO1xuICAgIHRoaXMuc3luY0hpZ2hsaWdodFdpdGhTZWxlY3Rpb24oY3VycmVudEFjdGl2ZVZhbHVlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBvblNlYXJjaENsZWFyZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XG4gICAgdGhpcy5yZWZyZXNoRmlsdGVyZWRJdGVtcygpO1xuICAgIHRoaXMuc3luY0hpZ2hsaWdodFdpdGhTZWxlY3Rpb24oKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmZvY3VzU2VhcmNoYm94U29vbigpO1xuICB9XG4gIG9uT3B0aW9uc1Njcm9sbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudXNlVmlydHVhbGl6ZWRPcHRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3luY1Zpc2libGVGaWx0ZXJlZEl0ZW1zKCk7XG4gIH1cbiAgb25JbnB1dEZvY3VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNraXBOZXh0Rm9jdXNPcGVuKSB7XG4gICAgICB0aGlzLnNraXBOZXh0Rm9jdXNPcGVuID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmNsaWNrV2lsbE9wZW5QYW5lbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vcGVuUGFuZWxBbmRGb2N1c1NlYXJjaCgpO1xuICB9XG4gIG9uSW5wdXRLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGV2ZW50LnRhcmdldC5pZCA9PT0gdGhpcy51aS5wYW5lbFNlYXJjaElkZW50aXR5LmlkKSB7XG4gICAgICB0aGlzLm9uU2VhcmNoYm94S2V5ZG93bihldmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub25UcmlnZ2VyS2V5ZG93bihldmVudCk7XG4gIH1cbiAgb25UcmlnZ2VyS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmhhbmRsZVByaW50YWJsZVRyaWdnZXJLZXkoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmhhbmRsZVRyaWdnZXJBcnJvd0tleShldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFuZGxlVHJpZ2dlck9wZW5LZXkoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlQ2xvc2VPckJhY2tzcGFjZUtleShldmVudCk7XG4gIH1cbiAgb25TZWFyY2hib3hLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFuZGxlU2VhcmNoYm94QXJyb3dLZXkoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmhhbmRsZVNlYXJjaGJveEJvdW5kYXJ5S2V5KGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYW5kbGVTZWFyY2hib3hTZWxlY3Rpb25LZXkoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlQ2xvc2VPckJhY2tzcGFjZUtleShldmVudCk7XG4gIH1cbiAgb25Db250cm9sTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHRoaXMucGFuZWxPcGVuKSB7XG4gICAgICAvLyBLZWVwIHRoZSBwYW5lbCBzZWFyY2hib3ggZm9jdXNlZCBldmVuIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSB0cmlnZ2VyIGFyZWEgYWdhaW4uXG4gICAgICAvLyBXaXRob3V0IHByZXZlbnRpbmcgdGhlIHRyaWdnZXIgZnJvbSB0YWtpbmcgZm9jdXMgZmlyc3QsIHRoZSBjYXJldCBtYXkgZGlzYXBwZWFyIGV2ZW5cbiAgICAgIC8vIHRob3VnaCB0eXBpbmcgc3RpbGwgdXBkYXRlcyB0aGUgc2VhcmNoYm94LlxuICAgICAgdGhpcy5mb2N1c1NlYXJjaGJveFNvb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gU3VwcHJlc3MgZm9jdXMtdHJpZ2dlcmVkIG9wZW46IGluIHNpbmdsZSBtb2RlIHRoZSBpbnB1dCByZWNlaXZlcyBmb2N1cyBvbiBtb3VzZWRvd24sXG4gICAgLy8gd2hpY2ggZmlyZXMgb25JbnB1dEZvY3VzKCkgYmVmb3JlIHRoZSBjbGljayBldmVudC4gV2l0aG91dCB0aGlzIGZsYWcsIG9uSW5wdXRGb2N1c1xuICAgIC8vIHdvdWxkIG9wZW4gdGhlIHBhbmVsIGFuZCB0aGUgc3Vic2VxdWVudCBjbGljayAob25Db250cm9sQ2xpY2spIHdvdWxkIGltbWVkaWF0ZWx5IGNsb3NlIGl0LlxuICAgIHRoaXMuY2xpY2tXaWxsT3BlblBhbmVsID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5jbGlja1dpbGxPcGVuUGFuZWwgPSBmYWxzZTsgfSwgMCk7XG4gIH1cbiAgb25Db250cm9sQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFuZWxPcGVuKSB7XG4gICAgICB0aGlzLmZvY3VzU2VhcmNoYm94U29vbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9wZW5QYW5lbEFuZEZvY3VzU2VhcmNoKCk7XG4gIH1cbiAgb25Ub2dnbGVNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCBldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBvblBvcG92ZXJPcGVuQ2hhbmdlKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAob3BlbiB8fCAhdGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jbG9zZVBhbmVsKCdvdXRzaWRlJyk7XG4gIH1cbiAgdG9nZ2xlUGFuZWwoZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdD8uKCk7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbj8uKCk7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFuZWxPcGVuKSB7XG4gICAgICB0aGlzLmNsb3NlUGFuZWwoJ3RvZ2dsZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9wZW5QYW5lbEFuZEZvY3VzU2VhcmNoKCk7XG4gIH1cbiAgY2xlYXJBbGwoZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdD8uKCk7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbj8uKCk7XG4gICAgY29uc3QgY2xlYXJlZFZhbHVlOiBPcHRpb25WYWx1ZSB8IE9wdGlvblZhbHVlW10gfCBudWxsID0gdGhpcy5tdWx0aXBsZSA/IFtdIDogbnVsbDtcbiAgICBjb25zdCBzaG91bGRSZWZvY3VzU2VhcmNoID0gdGhpcy5wYW5lbE9wZW47XG4gICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XG4gICAgdGhpcy52YWx1ZSA9IGNsZWFyZWRWYWx1ZTtcbiAgICB0aGlzLmludmFsaWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlZnJlc2hGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgdGhpcy5jb21taXRWYWx1ZShjbGVhcmVkVmFsdWUpO1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUV2ZW50LmVtaXQoY2xlYXJlZFZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXlNb2RlKCk7XG4gICAgdGhpcy5zY2hlZHVsZUNoaXBQcmVzZW50YXRpb25TeW5jKCk7XG4gICAgdGhpcy5zeW5jSGlnaGxpZ2h0V2l0aFNlbGVjdGlvbigpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIGlmIChzaG91bGRSZWZvY3VzU2VhcmNoKSB7XG4gICAgICB0aGlzLmZvY3VzU2VhcmNoYm94U29vbigpO1xuICAgIH1cbiAgfVxuICBvbk9wdGlvbkNsaWNrKG9wdGlvbjogQ29tYm9ib3hSZXNvbHZlZE9wdGlvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLnRvZ2dsZU9wdGlvbihvcHRpb24pO1xuICAgICAgdGhpcy5mb2N1c1NlYXJjaGJveFNvb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RTaW5nbGVPcHRpb24ob3B0aW9uKTtcbiAgfVxuICBvbk9wdGlvbkNoZWNrYm94Q2hhbmdlKG9wdGlvbjogQ29tYm9ib3hSZXNvbHZlZE9wdGlvbiwgY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudG9nZ2xlT3B0aW9uKG9wdGlvbiwgY2hlY2tlZCk7XG4gICAgdGhpcy5mb2N1c1NlYXJjaGJveFNvb24oKTtcbiAgfVxuICBvbk9wdGlvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIG9wdGlvbjogQ29tYm9ib3hSZXNvbHZlZE9wdGlvbik6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicgJiYgZXZlbnQua2V5ICE9PSAnICcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLm9uT3B0aW9uQ2xpY2sob3B0aW9uKTtcbiAgfVxuICB0b2dnbGVBbGxGaWx0ZXJlZEl0ZW1zKGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEFjdGl2ZVZhbHVlID0gdGhpcy5hY3RpdmVPcHRpb25WYWx1ZTtcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlcyA9IG5ldyBTZXQoYXNDb21ib2JveEFycmF5KHRoaXMudmFsdWUpKTtcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiB0aGlzLmZpbHRlcmVkSXRlbXMpIHtcbiAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgIHNlbGVjdGVkVmFsdWVzLmFkZChvcHRpb24udmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZXMuZGVsZXRlKG9wdGlvbi52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG9yZGVyZWRWYWx1ZXMgPSB0aGlzLm5vcm1hbGl6ZU9wdGlvbnMoKVxuICAgICAgLmZpbHRlcigoZW50cnkpID0+IHNlbGVjdGVkVmFsdWVzLmhhcyhlbnRyeS52YWx1ZSkpXG4gICAgICAubWFwKChlbnRyeSkgPT4gZW50cnkudmFsdWUpO1xuICAgIHRoaXMucHJvcGFnYXRlRnJvbVZhbHVlKG9yZGVyZWRWYWx1ZXMpO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcmVkSXRlbXMoKTtcbiAgICB0aGlzLnN5bmNIaWdobGlnaHRXaXRoU2VsZWN0aW9uKGN1cnJlbnRBY3RpdmVWYWx1ZSk7XG4gICAgdGhpcy5mb2N1c1NlYXJjaGJveFNvb24oKTtcbiAgfVxuICByZW1vdmVTZWxlY3RlZEl0ZW0ob3B0aW9uOiBDb21ib2JveFJlc29sdmVkT3B0aW9uLCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0Py4oKTtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uPy4oKTtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEFjdGl2ZVZhbHVlID0gdGhpcy5hY3RpdmVPcHRpb25WYWx1ZTtcbiAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gYXNDb21ib2JveEFycmF5KHRoaXMudmFsdWUpLmZpbHRlcigoZW50cnkpID0+ICFPYmplY3QuaXMoZW50cnksIG9wdGlvbi52YWx1ZSkpO1xuICAgIHRoaXMucHJvcGFnYXRlRnJvbVZhbHVlKGN1cnJlbnRWYWx1ZXMpO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcmVkSXRlbXMoKTtcbiAgICB0aGlzLnN5bmNIaWdobGlnaHRXaXRoU2VsZWN0aW9uKGN1cnJlbnRBY3RpdmVWYWx1ZSk7XG4gICAgaWYgKHRoaXMucGFuZWxPcGVuKSB7XG4gICAgICB0aGlzLmZvY3VzU2VhcmNoYm94U29vbigpO1xuICAgIH1cbiAgfVxuICBvbkNoaXBSZW1vdmVkKGV2ZW50OiBDaGlwUmVtb3ZlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb24gPSB0aGlzLnJlc29sdmVPcHRpb24oZXZlbnQudmFsdWUpO1xuICAgIGlmICghb3B0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRJdGVtKG9wdGlvbiwgZXZlbnQub3JpZ2luYWxFdmVudCk7XG4gIH1cbiAgcmVzb2x2ZU9wdGlvbihvcHRPclZhbHVlOiB1bmtub3duKTogQ29tYm9ib3hSZXNvbHZlZE9wdGlvbiB8IG51bGwge1xuICAgIGNvbnN0IGFsbCA9IHRoaXMubm9ybWFsaXplT3B0aW9ucygpO1xuICAgIGlmIChvcHRPclZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdE9yVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBvYmogPSBvcHRPclZhbHVlIGFzIHsgdGV4dD86IHN0cmluZzsgdmFsdWU/OiBPcHRpb25WYWx1ZSB9O1xuICAgICAgaWYgKCd0ZXh0JyBpbiBvYmogJiYgJ3ZhbHVlJyBpbiBvYmopIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi4ob2JqIGFzIE9wdGlvbkl0ZW0pLFxuICAgICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlVGV4dChvYmoudGV4dCksXG4gICAgICAgICAgc2VhcmNoVGV4dDogYnVpbGRDb21ib2JveFNlYXJjaFRleHQodGhpcy50cmFuc2xhdGVUZXh0KG9iai50ZXh0KSwgdGhpcy5hc1RleHQob2JqLnZhbHVlKSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICgndmFsdWUnIGluIG9iaikge1xuICAgICAgICByZXR1cm4gYWxsLmZpbmQoKG9wdGlvbikgPT4gT2JqZWN0LmlzKG9wdGlvbi52YWx1ZSwgb2JqLnZhbHVlKSkgPz8gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFsbC5maW5kKChvcHRpb24pID0+IE9iamVjdC5pcyhvcHRpb24udmFsdWUsIG9wdE9yVmFsdWUgYXMgT3B0aW9uVmFsdWUpKSA/PyBudWxsO1xuICB9XG4gIGlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uOiBDb21ib2JveFJlc29sdmVkT3B0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFzQ29tYm9ib3hBcnJheSh0aGlzLnZhbHVlKS5zb21lKChlbnRyeSkgPT4gT2JqZWN0LmlzKGVudHJ5LCBvcHRpb24udmFsdWUpKTtcbiAgfVxuICBpc09wdGlvbkFjdGl2ZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9PT0gaW5kZXg7XG4gIH1cbiAgb25PcHRpb25Nb3VzZUVudGVyKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucG9pbnRlck1vdmVkU2luY2VLZXlib2FyZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkSW5kZXgoaW5kZXgsIGZhbHNlKTtcbiAgfVxuICBvbk9wdGlvbnNQYW5lbE1vdXNlTW92ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnBvaW50ZXJNb3ZlZFNpbmNlS2V5Ym9hcmQgPSB0cnVlO1xuICB9XG4gIG9uT3B0aW9uc1BhbmVsTW91c2VMZWF2ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucG9pbnRlck1vdmVkU2luY2VLZXlib2FyZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPSAtMTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBvcHRpb25NZXRhVGV4dChvcHRpb246IENvbWJvYm94UmVzb2x2ZWRPcHRpb24pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuaWNvblNlbGVjdG9yIHx8ICF0aGlzLnNob3dJY29uQ2xhc3MpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uLmljb25DbGFzc05hbWUgPz8gbnVsbDtcbiAgfVxuICBvcHRpb25JZChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy51aS5jb250cm9sSWR9LW9wdGlvbi0ke2luZGV4fWA7XG4gIH1cbiAgY2hpcFJlbW92ZUFyaWFMYWJlbChvcHRpb246IENvbWJvYm94UmVzb2x2ZWRPcHRpb24pOiBzdHJpbmcge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gcmVzb2x2ZVRyYW5zbGF0YWJsZVRleHQodGhpcy50cmFuc2xhdGUsIG51bGwsIENPTUJPQk9YX1JFTU9WRV9DSElQX0xBQkVMX0tFWSk7XG4gICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL1xce2xhYmVsXFx9L2csIG9wdGlvbi50ZXh0KTtcbiAgfVxuICB0cmFja0J5T3B0aW9uVmFsdWUgPSAoX2luZGV4OiBudW1iZXIsIGl0ZW06IENvbWJvYm94UmVzb2x2ZWRPcHRpb24pOiBPcHRpb25WYWx1ZSA9PiBpdGVtLnZhbHVlO1xuICBwcml2YXRlIG9wZW5QYW5lbEFuZEZvY3VzU2VhcmNoKCk6IHZvaWQge1xuICAgIHRoaXMub3BlblBhbmVsKHsgZm9jdXNTZWFyY2g6IHRydWUgfSk7XG4gIH1cbiAgcHJpdmF0ZSBvcGVuUGFuZWwob3B0aW9uczogeyBmb2N1c1NlYXJjaDogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVJY29uU2VsZWN0b3JPcHRpb25zTG9hZGVkKCk7XG4gICAgdGhpcy5wYW5lbE9wZW4gPSB0cnVlO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcmVkSXRlbXModHJ1ZSk7XG4gICAgdGhpcy5zeW5jSGlnaGxpZ2h0V2l0aFNlbGVjdGlvbih0aGlzLnJlc29sdmVQcmVmZXJyZWRIaWdobGlnaHRWYWx1ZSgpKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLnBvcG92ZXI/LnJlcG9zaXRpb24oKTtcbiAgICB0aGlzLnNjaGVkdWxlVmlzaWJsZU9wdGlvbnNTeW5jKHRydWUpO1xuICAgIGlmIChvcHRpb25zLmZvY3VzU2VhcmNoKSB7XG4gICAgICB0aGlzLmZvY3VzU2VhcmNoYm94U29vbigpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNsb3NlUGFuZWwocmVhc29uOiBQYW5lbENsb3NlUmVhc29uKTogdm9pZCB7XG4gICAgY29uc3QgcmVzdG9yZVRyaWdnZXJGb2N1cyA9IHJlYXNvbiA9PT0gJ2VzY2FwZScgfHwgcmVhc29uID09PSAnc2VsZWN0aW9uJyB8fCByZWFzb24gPT09ICd0b2dnbGUnO1xuICAgIHRoaXMucGFuZWxPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XG4gICAgdGhpcy5yZXNldFZpcnR1YWxXaW5kb3coKTtcbiAgICB0aGlzLnJlZnJlc2hGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgdGhpcy5zeW5jSGlnaGxpZ2h0V2l0aFNlbGVjdGlvbigpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIGlmIChyZXN0b3JlVHJpZ2dlckZvY3VzKSB7XG4gICAgICB0aGlzLmZvY3VzVHJpZ2dlclNvb24oKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBmb2N1c1NlYXJjaGJveFNvb24oKTogdm9pZCB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gdGhpcy5mb2N1c1NlYXJjaGJveCgpKTtcbiAgICBnbG9iYWxUaGlzLndpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMuZm9jdXNTZWFyY2hib3goKSwgMCk7XG4gICAgY29uc3Qgc2NoZWR1bGUgPSB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nXG4gICAgICA/IHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgICAgOiAoY2FsbGJhY2s6IEZyYW1lUmVxdWVzdENhbGxiYWNrKSA9PiBnbG9iYWxUaGlzLndpbmRvdy5zZXRUaW1lb3V0KCgpID0+IGNhbGxiYWNrKHBlcmZvcm1hbmNlLm5vdygpKSwgMCk7XG4gICAgc2NoZWR1bGUoKCkgPT4gdGhpcy5mb2N1c1NlYXJjaGJveCgpKTtcbiAgfVxuICBwcml2YXRlIGZvY3VzVHJpZ2dlclNvb24oKTogdm9pZCB7IHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMuZm9jdXNUcmlnZ2VyKCkpOyB9XG4gIHByaXZhdGUgZm9jdXNTZWFyY2hib3goKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhbmVsT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNpbmdsZUlucHV0UmVmPy5uYXRpdmVFbGVtZW50Py5ibHVyKCk7XG4gICAgdGhpcy50cmlnZ2VyQ29udHJvbFJlZj8ubmF0aXZlRWxlbWVudD8uYmx1cj8uKCk7XG4gICAgdGhpcy5wYW5lbFNlYXJjaGJveD8uZm9jdXNJbnB1dCgpO1xuICAgIHRoaXMucG9wb3Zlcj8ucmVwb3NpdGlvbigpO1xuICAgIHRoaXMuc2NoZWR1bGVWaXNpYmxlT3B0aW9uc1N5bmMoKTtcbiAgfVxuICBwcml2YXRlIGZvY3VzVHJpZ2dlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy50cmlnZ2VyQ29udHJvbFJlZj8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5za2lwTmV4dEZvY3VzT3BlbiA9IHRydWU7XG4gICAgdGhpcy5zaW5nbGVJbnB1dFJlZj8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcbiAgfVxuICBwcml2YXRlIHJlZnJlc2hGaWx0ZXJlZEl0ZW1zKHByZXNlcnZlQ3VycmVudEludmFsaWQgPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IHF1ZXJ5ID0gbm9ybWFsaXplQ29tYm9ib3hTZWFyY2hUZXh0KHRoaXMuc2VhcmNoVGVybSk7XG4gICAgY29uc3QgYWxsID0gdGhpcy5ub3JtYWxpemVPcHRpb25zKCk7XG4gICAgaWYgKHRoaXMuaXNPcHRpb25zTG9hZGluZykge1xuICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gW107XG4gICAgICB0aGlzLnN5bmNWaXNpYmxlRmlsdGVyZWRJdGVtcyh0cnVlKTtcbiAgICAgIHRoaXMuaW52YWxpZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBxdWVyeVxuICAgICAgPyBhbGwuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnNlYXJjaFRleHQuaW5jbHVkZXMocXVlcnkpKVxuICAgICAgOiBhbGwuc2xpY2UoKTtcbiAgICB0aGlzLnN5bmNWaXNpYmxlRmlsdGVyZWRJdGVtcyghcXVlcnkpO1xuICAgIGlmICghcXVlcnkgJiYgcHJlc2VydmVDdXJyZW50SW52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmludmFsaWQgPSB0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoID09PSAwICYmIGFzQ29tYm9ib3hBcnJheSh0aGlzLnZhbHVlKS5sZW5ndGggPT09IDAgJiYgcXVlcnkubGVuZ3RoID4gMDtcbiAgfVxuICBwcml2YXRlIHNldEhpZ2hsaWdodGVkSW5kZXgoaW5kZXg6IG51bWJlciwgZW5zdXJlVmlzaWJsZSA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IC0xO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXh0SW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihpbmRleCwgdGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCAtIDEpKTtcbiAgICB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPSBuZXh0SW5kZXg7XG4gICAgaWYgKGVuc3VyZVZpc2libGUgJiYgdGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgIHRoaXMuc2Nyb2xsSGlnaGxpZ2h0ZWRPcHRpb25JbnRvVmlldygpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIG1vdmVIaWdobGlnaHQoc3RlcDogSGlnaGxpZ2h0U3RlcCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgdGhpcy5oaWdobGlnaHRlZEluZGV4ID0gLTE7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmhpZ2hsaWdodGVkSW5kZXggPCAwKSB7XG4gICAgICB0aGlzLnNldEhpZ2hsaWdodGVkSW5kZXgoc3RlcCA+IDAgPyAwIDogdGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCAtIDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBvaW50ZXJNb3ZlZFNpbmNlS2V5Ym9hcmQgPSBmYWxzZTtcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkSW5kZXgoKHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCArIHN0ZXAgKyB0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoKSAlIHRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGgpO1xuICB9XG4gIHByaXZhdGUgc3luY0hpZ2hsaWdodFdpdGhTZWxlY3Rpb24ocHJlZmVycmVkVmFsdWU6IE9wdGlvblZhbHVlIHwgbnVsbCA9IHRoaXMuYWN0aXZlT3B0aW9uVmFsdWUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IC0xO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjYW5kaWRhdGVWYWx1ZXMgPSBbXG4gICAgICBwcmVmZXJyZWRWYWx1ZSxcbiAgICAgICF0aGlzLm11bHRpcGxlID8gdGhpcy5zZWxlY3RlZFNpbmdsZU9wdGlvbj8udmFsdWUgPz8gbnVsbCA6IHRoaXMuZmlyc3RTZWxlY3RlZEZpbHRlcmVkVmFsdWUsXG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXNbMF0/LnZhbHVlID8/IG51bGxcbiAgICBdO1xuICAgIGNvbnN0IG5leHRJbmRleCA9IGNhbmRpZGF0ZVZhbHVlc1xuICAgICAgLm1hcCgodmFsdWUpID0+IHZhbHVlID09IG51bGwgPyAtMSA6IHRoaXMuZmlsdGVyZWRJdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IE9iamVjdC5pcyhpdGVtLnZhbHVlLCB2YWx1ZSkpKVxuICAgICAgLmZpbmQoKGluZGV4KSA9PiBpbmRleCA+PSAwKTtcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkSW5kZXgobmV4dEluZGV4ID8/IDApO1xuICB9XG4gIHByaXZhdGUgc2Nyb2xsSGlnaGxpZ2h0ZWRPcHRpb25JbnRvVmlldygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy51c2VWaXJ0dWFsaXplZE9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5vcHRpb25zVmlld3BvcnRSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoIXZpZXdwb3J0KSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVWaXNpYmxlT3B0aW9uc1N5bmMoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3B0aW9uVG9wID0gdGhpcy5oaWdobGlnaHRlZEluZGV4ICogdGhpcy5vcHRpb25Sb3dIZWlnaHQ7XG4gICAgICBjb25zdCBvcHRpb25Cb3R0b20gPSBvcHRpb25Ub3AgKyB0aGlzLm9wdGlvblJvd0hlaWdodDtcbiAgICAgIGNvbnN0IHZpZXdwb3J0VG9wID0gdmlld3BvcnQuc2Nyb2xsVG9wO1xuICAgICAgY29uc3Qgdmlld3BvcnRCb3R0b20gPSB2aWV3cG9ydFRvcCArIHZpZXdwb3J0LmNsaWVudEhlaWdodDtcbiAgICAgIGlmIChvcHRpb25Ub3AgPCB2aWV3cG9ydFRvcCkge1xuICAgICAgICB2aWV3cG9ydC5zY3JvbGxUb3AgPSBvcHRpb25Ub3A7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbkJvdHRvbSA+IHZpZXdwb3J0Qm90dG9tKSB7XG4gICAgICAgIHZpZXdwb3J0LnNjcm9sbFRvcCA9IG9wdGlvbkJvdHRvbSAtIHZpZXdwb3J0LmNsaWVudEhlaWdodDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSBoaWdobGlnaHRlZCBvcHRpb24gaXMgYWxyZWFkeSBmdWxseSB2aXNpYmxlLlxuICAgICAgfVxuICAgICAgdGhpcy5zeW5jVmlzaWJsZUZpbHRlcmVkSXRlbXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMub3B0aW9uSWQodGhpcy5oaWdobGlnaHRlZEluZGV4KSk7XG4gICAgICBpZiAodHlwZW9mIG5vZGU/LnNjcm9sbEludG9WaWV3ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG5vZGUuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgc2VsZWN0SGlnaGxpZ2h0ZWRPcHRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlT3B0aW9uID0gdGhpcy5maWx0ZXJlZEl0ZW1zW3RoaXMuaGlnaGxpZ2h0ZWRJbmRleF07XG4gICAgaWYgKCFhY3RpdmVPcHRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMudG9nZ2xlT3B0aW9uKGFjdGl2ZU9wdGlvbik7XG4gICAgICB0aGlzLmZvY3VzU2VhcmNoYm94U29vbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdFNpbmdsZU9wdGlvbihhY3RpdmVPcHRpb24pO1xuICB9XG4gIHByaXZhdGUgc2VsZWN0U2luZ2xlT3B0aW9uKG9wdGlvbjogQ29tYm9ib3hSZXNvbHZlZE9wdGlvbik6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xuICAgIHRoaXMucHJvcGFnYXRlRnJvbVZhbHVlKG9wdGlvbi52YWx1ZSk7XG4gICAgdGhpcy5jbG9zZVBhbmVsKCdzZWxlY3Rpb24nKTtcbiAgfVxuICBwcml2YXRlIHRvZ2dsZU9wdGlvbihvcHRpb246IENvbWJvYm94UmVzb2x2ZWRPcHRpb24sIGZvcmNlQ2hlY2tlZDogYm9vbGVhbiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZXMgPSBuZXcgU2V0KGFzQ29tYm9ib3hBcnJheSh0aGlzLnZhbHVlKSk7XG4gICAgY29uc3Qgc2hvdWxkU2VsZWN0ID0gdGhpcy5yZXNvbHZlT3B0aW9uQ2hlY2tlZFN0YXRlKHNlbGVjdGVkVmFsdWVzLCBvcHRpb24sIGZvcmNlQ2hlY2tlZCk7XG4gICAgaWYgKHNob3VsZFNlbGVjdCkge1xuICAgICAgc2VsZWN0ZWRWYWx1ZXMuYWRkKG9wdGlvbi52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGVkVmFsdWVzLmRlbGV0ZShvcHRpb24udmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBvcmRlcmVkVmFsdWVzID0gdGhpcy5ub3JtYWxpemVPcHRpb25zKClcbiAgICAgIC5maWx0ZXIoKGVudHJ5KSA9PiBzZWxlY3RlZFZhbHVlcy5oYXMoZW50cnkudmFsdWUpKVxuICAgICAgLm1hcCgoZW50cnkpID0+IGVudHJ5LnZhbHVlKTtcbiAgICB0aGlzLnByb3BhZ2F0ZUZyb21WYWx1ZShvcmRlcmVkVmFsdWVzKTtcbiAgICB0aGlzLnJlZnJlc2hGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgdGhpcy5zeW5jSGlnaGxpZ2h0V2l0aFNlbGVjdGlvbihvcHRpb24udmFsdWUpO1xuICB9XG4gIHByaXZhdGUgc3luY1Zpc2libGVGaWx0ZXJlZEl0ZW1zKHJlc2V0U2Nyb2xsID0gZmFsc2UpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0U3RhdGUgPSBidWlsZFZpc2libGVDb21ib2JveE9wdGlvbnMoe1xuICAgICAgcmVzZXRTY3JvbGwsXG4gICAgICBidWZmZXJTaXplOiBDT01CT0JPWF9JQ09OX1NFTEVDVE9SX0JVRkZFUl9TSVpFLFxuICAgICAgZmFsbGJhY2tWaWV3cG9ydEhlaWdodDogQ09NQk9CT1hfSUNPTl9TRUxFQ1RPUl9WSUVXUE9SVF9GQUxMQkFDS19IRUlHSFQsXG4gICAgICBmaWx0ZXJlZEl0ZW1zOiB0aGlzLmZpbHRlcmVkSXRlbXMsXG4gICAgICBvcHRpb25Sb3dIZWlnaHQ6IHRoaXMub3B0aW9uUm93SGVpZ2h0LFxuICAgICAgdXNlVmlydHVhbGl6ZWRPcHRpb25zOiB0aGlzLnVzZVZpcnR1YWxpemVkT3B0aW9ucyxcbiAgICAgIHZpZXdwb3J0OiB0aGlzLm9wdGlvbnNWaWV3cG9ydFJlZj8ubmF0aXZlRWxlbWVudFxuICAgIH0pO1xuICAgIHRoaXMudmlzaWJsZVN0YXJ0SW5kZXggPSBuZXh0U3RhdGUudmlzaWJsZVN0YXJ0SW5kZXg7XG4gICAgdGhpcy52aXNpYmxlRW5kSW5kZXggPSBuZXh0U3RhdGUudmlzaWJsZUVuZEluZGV4O1xuICAgIHRoaXMudmlzaWJsZUZpbHRlcmVkSXRlbXMgPSBuZXh0U3RhdGUudmlzaWJsZUZpbHRlcmVkSXRlbXM7XG4gIH1cbiAgcHJpdmF0ZSBub3JtYWxpemVPcHRpb25zKCk6IENvbWJvYm94UmVzb2x2ZWRPcHRpb25bXSB7XG4gICAgaWYgKHRoaXMuaWNvblNlbGVjdG9yKSB7XG4gICAgICB0aGlzLmVuc3VyZUljb25TZWxlY3Rvck9wdGlvbnNMb2FkZWQoKTtcbiAgICAgIGlmICh0aGlzLl9pY29uT3B0aW9uc0NhY2hlTGFuZyA9PT0gdGhpcy5jdXJyZW50TGFuZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faWNvbk9wdGlvbnNDYWNoZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudExhbmcgPSB0aGlzLmN1cnJlbnRMYW5nO1xuICAgIGlmICh0aGlzLm9wdGlvbnMgPT09IHRoaXMuX29wdGlvbnNDYWNoZUtleSAmJiB0aGlzLl9vcHRpb25zQ2FjaGVMYW5nID09PSBjdXJyZW50TGFuZykge1xuICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnNDYWNoZTtcbiAgICB9XG4gICAgY29uc3QgbmV4dCA9IHRoaXMucGFyc2VOb3JtYWxpemVkT3B0aW9uc0lucHV0KCk7XG4gICAgdGhpcy5fb3B0aW9uc0NhY2hlS2V5ID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMuX29wdGlvbnNDYWNoZUxhbmcgPSBjdXJyZW50TGFuZztcbiAgICB0aGlzLl9vcHRpb25zQ2FjaGUgPSBuZXh0Lm1hcCgob3B0aW9uKSA9PiBjcmVhdGVSZXNvbHZlZENvbWJvYm94T3B0aW9uKG9wdGlvbiwgKHZhbHVlKSA9PiB0aGlzLnRyYW5zbGF0ZVRleHQodmFsdWUpKSk7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnNDYWNoZTtcbiAgfVxuICBwcml2YXRlIGFzVGV4dCh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7IHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiAnJzsgfVxuICBwcml2YXRlIHRyYW5zbGF0ZVRleHQodmFsdWU6IHVua25vd24pOiBzdHJpbmcgeyByZXR1cm4gcmVzb2x2ZVRyYW5zbGF0YWJsZVRleHQodGhpcy50cmFuc2xhdGUsIHRoaXMuYXNUZXh0KHZhbHVlKSk7IH1cbiAgcHJpdmF0ZSBwYXJzZU5vcm1hbGl6ZWRPcHRpb25zSW5wdXQoKTogT3B0aW9uSXRlbVtdIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zIGFzIE9wdGlvbkl0ZW1bXTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UodGhpcy5vcHRpb25zIHx8ICdbXScpO1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFyc2VkKSA/IChwYXJzZWQgYXMgT3B0aW9uSXRlbVtdKSA6IFtdO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldCBjdXJyZW50TGFuZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyA/PyB0aGlzLnRyYW5zbGF0ZS5nZXREZWZhdWx0TGFuZz8uKCkgPz8gJyc7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgc2VsZWN0ZWRDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZENvdW50KHRoaXMudmFsdWUsIHRoaXMubXVsdGlwbGUpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGFjdGl2ZU9wdGlvblZhbHVlKCk6IE9wdGlvblZhbHVlIHwgbnVsbCB7XG4gICAgcmV0dXJuIGdldEFjdGl2ZU9wdGlvblZhbHVlKHRoaXMuZmlsdGVyZWRJdGVtcywgdGhpcy5oaWdobGlnaHRlZEluZGV4KTtcbiAgfVxuICBwcml2YXRlIGdldCBmaXJzdFNlbGVjdGVkRmlsdGVyZWRWYWx1ZSgpOiBPcHRpb25WYWx1ZSB8IG51bGwge1xuICAgIHJldHVybiBnZXRGaXJzdFNlbGVjdGVkRmlsdGVyZWRWYWx1ZSh0aGlzLmZpbHRlcmVkSXRlbXMsIHRoaXMudmFsdWUpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlRGlzcGxheU1vZGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLmRpc3BsYXlNb2RlID0gJ3N1bW1hcnknO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRpc3BsYXlNb2RlID0gdGhpcy5zaG91bGRDb2xsYXBzZUNoaXBEaXNwbGF5VG9TdW1tYXJ5KCkgPyAnc3VtbWFyeScgOiAnY2hpcCc7XG4gIH1cbiAgcHJpdmF0ZSBwcm9wYWdhdGVGcm9tVmFsdWUodmFsdWU6IE9wdGlvblZhbHVlIHwgT3B0aW9uVmFsdWVbXSB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgaWYgKGFzQ29tYm9ib3hBcnJheSh0aGlzLnZhbHVlKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmludmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZW1pdHRlZFZhbHVlID0gdGhpcy52YWx1ZSA/PyAodGhpcy5tdWx0aXBsZSA/IFtdIDogbnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlRXZlbnQuZW1pdChlbWl0dGVkVmFsdWUpO1xuICAgIHRoaXMuY29tbWl0VmFsdWUodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlRGlzcGxheU1vZGUoKTtcbiAgICB0aGlzLnNjaGVkdWxlQ2hpcFByZXNlbnRhdGlvblN5bmMoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBwcml2YXRlIGlzUHJpbnRhYmxlQ2hhcmFjdGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV2ZW50LmtleS5sZW5ndGggPT09IDEgJiYgIWV2ZW50LmFsdEtleSAmJiAhZXZlbnQuY3RybEtleSAmJiAhZXZlbnQubWV0YUtleTtcbiAgfVxuICBwcml2YXRlIHNjaGVkdWxlQ2hpcFByZXNlbnRhdGlvblN5bmMoKTogdm9pZCB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gdGhpcy5zeW5jQ2hpcFByZXNlbnRhdGlvbigpKTtcbiAgICBjb25zdCBzY2hlZHVsZSA9IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbidcbiAgICAgID8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgICA6IChjYWxsYmFjazogRnJhbWVSZXF1ZXN0Q2FsbGJhY2spID0+IGdsb2JhbFRoaXMud2luZG93LnNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2socGVyZm9ybWFuY2Uubm93KCkpLCAwKTtcbiAgICBzY2hlZHVsZSgoKSA9PiB0aGlzLnN5bmNDaGlwUHJlc2VudGF0aW9uKCkpO1xuICB9XG4gIHByaXZhdGUgc3luY0NoaXBQcmVzZW50YXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dERpc3BsYXlNb2RlOiAnY2hpcCcgfCAnc3VtbWFyeScgPSB0aGlzLnNob3VsZENvbGxhcHNlQ2hpcERpc3BsYXlUb1N1bW1hcnkoKSA/ICdzdW1tYXJ5JyA6ICdjaGlwJztcbiAgICBpZiAodGhpcy5kaXNwbGF5TW9kZSA9PT0gbmV4dERpc3BsYXlNb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGlzcGxheU1vZGUgPSBuZXh0RGlzcGxheU1vZGU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgcHJpdmF0ZSBzaG91bGRDb2xsYXBzZUNoaXBEaXNwbGF5VG9TdW1tYXJ5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzaG91bGRDb2xsYXBzZUNvbWJvYm94Q2hpcERpc3BsYXkoe1xuICAgICAgbXVsdGlwbGU6IHRoaXMubXVsdGlwbGUsXG4gICAgICBzZWxlY3RlZEl0ZW1Db3VudDogdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCxcbiAgICAgIHNlbGVjdGVkQ291bnQ6IHRoaXMuc2VsZWN0ZWRDb3VudCxcbiAgICAgIG1heFNlbGVjdGVkTGFiZWxzOiB0aGlzLm1heFNlbGVjdGVkTGFiZWxzLFxuICAgICAgYXZhaWxhYmxlV2lkdGg6IHRoaXMubXVsdGlWYWx1ZVJlZj8ubmF0aXZlRWxlbWVudD8uY2xpZW50V2lkdGggPz8gMCxcbiAgICAgIHJlcXVpcmVkV2lkdGg6IHRoaXMuY2hpcE1lYXN1cmVSZWY/Lm5hdGl2ZUVsZW1lbnQ/LnNjcm9sbFdpZHRoID8/IDBcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIHJlc2V0T3B0aW9uc0NhY2hlKCk6IHZvaWQge1xuICAgIHRoaXMuX29wdGlvbnNDYWNoZUtleSA9IG51bGw7XG4gICAgdGhpcy5fb3B0aW9uc0NhY2hlTGFuZyA9ICcnO1xuICAgIHRoaXMuX29wdGlvbnNDYWNoZSA9IFtdO1xuICAgIHRoaXMuX2ljb25PcHRpb25zQ2FjaGVMYW5nID0gJyc7XG4gICAgdGhpcy5faWNvbk9wdGlvbnNDYWNoZSA9IFtdO1xuICB9XG4gIHByaXZhdGUgcmVmcmVzaENvbWJvYm94U3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5yZWZyZXNoRmlsdGVyZWRJdGVtcygpO1xuICAgIHRoaXMuc3luY0hpZ2hsaWdodFdpdGhTZWxlY3Rpb24oKTtcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXlNb2RlKCk7XG4gICAgdGhpcy5zY2hlZHVsZUNoaXBQcmVzZW50YXRpb25TeW5jKCk7XG4gICAgdGhpcy5zY2hlZHVsZVZpc2libGVPcHRpb25zU3luYygpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIHByaXZhdGUgaGFuZGxlT3B0aW9uc0NhY2hlQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ29wdGlvbnMnXSkge1xuICAgICAgdGhpcy5yZXNldE9wdGlvbnNDYWNoZSgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGhhbmRsZVZpcnR1YWxXaW5kb3dDaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snaWNvblNlbGVjdG9yJ10gfHwgY2hhbmdlc1snc2hvd0ljb25DbGFzcyddKSB7XG4gICAgICB0aGlzLnJlc2V0VmlydHVhbFdpbmRvdygpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGhhbmRsZUljb25TZWxlY3RvckNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydpY29uU2VsZWN0b3InXSkge1xuICAgICAgdGhpcy5lbnN1cmVJY29uU2VsZWN0b3JPcHRpb25zTG9hZGVkKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc2hvdWxkUmVmcmVzaEZpbHRlcmVkU3RhdGUoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc09wdGlvbkNoYW5nZXMgPSAhIWNoYW5nZXNbJ29wdGlvbnMnXTtcbiAgICBjb25zdCBoYXNTZWxlY3Rpb25DaGFuZ2VzID0gISFjaGFuZ2VzWydtdWx0aXBsZSddIHx8ICEhY2hhbmdlc1sndmFsdWUnXTtcbiAgICBjb25zdCBoYXNJY29uQ2hhbmdlcyA9ICEhY2hhbmdlc1snaWNvblNlbGVjdG9yJ10gfHwgISFjaGFuZ2VzWydzaG93SWNvbkNsYXNzJ107XG5cbiAgICByZXR1cm4gaGFzT3B0aW9uQ2hhbmdlcyB8fCBoYXNTZWxlY3Rpb25DaGFuZ2VzIHx8IGhhc0ljb25DaGFuZ2VzO1xuICB9XG4gIHByaXZhdGUgc2hvdWxkUmVmcmVzaERpc3BsYXlNb2RlKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoY2hhbmdlc1snbXVsdGlwbGUnXSB8fCBjaGFuZ2VzWydtYXhTZWxlY3RlZExhYmVscyddIHx8IGNoYW5nZXNbJ3ZhbHVlJ10pO1xuICB9XG4gIHByaXZhdGUgbm9ybWFsaXplVmFsdWVGb3JNdWx0aXBsZU1vZGUoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICghY2hhbmdlc1snbXVsdGlwbGUnXSB8fCAhdGhpcy5tdWx0aXBsZSB8fCBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpIHx8IHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlID0gW3RoaXMudmFsdWVdO1xuICB9XG4gIHByaXZhdGUgaGFuZGxlUHJpbnRhYmxlVHJpZ2dlcktleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc1ByaW50YWJsZUNoYXJhY3RlcihldmVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSBldmVudC5rZXk7XG4gICAgdGhpcy5vcGVuUGFuZWxBbmRGb2N1c1NlYXJjaCgpO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcmVkSXRlbXMoKTtcbiAgICB0aGlzLnN5bmNIaWdobGlnaHRXaXRoU2VsZWN0aW9uKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBoYW5kbGVUcmlnZ2VyQXJyb3dLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMubmF2aWdhdGVUcmlnZ2VyQXJyb3coMSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5uYXZpZ2F0ZVRyaWdnZXJBcnJvdygtMSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByaXZhdGUgbmF2aWdhdGVUcmlnZ2VyQXJyb3coc3RlcDogSGlnaGxpZ2h0U3RlcCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgIHRoaXMub3BlblBhbmVsQW5kRm9jdXNTZWFyY2goKTtcbiAgICAgIGlmIChzdGVwIDwgMCkge1xuICAgICAgICB0aGlzLnNldEhpZ2hsaWdodGVkSW5kZXgodGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCAtIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm1vdmVIaWdobGlnaHQoc3RlcCk7XG4gIH1cbiAgcHJpdmF0ZSBoYW5kbGVUcmlnZ2VyT3BlbktleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzT3BlbktleSA9IGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICcgJztcblxuICAgIGlmICghaXNPcGVuS2V5IHx8IHRoaXMucGFuZWxPcGVuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLm9wZW5QYW5lbEFuZEZvY3VzU2VhcmNoKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBoYW5kbGVTZWFyY2hib3hBcnJvd0tleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5tb3ZlSGlnaGxpZ2h0KDEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMubW92ZUhpZ2hsaWdodCgtMSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByaXZhdGUgaGFuZGxlU2VhcmNoYm94Qm91bmRhcnlLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5zZXRIaWdobGlnaHRlZEluZGV4KDApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdFbmQnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5zZXRIaWdobGlnaHRlZEluZGV4KHRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGggLSAxKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBoYW5kbGVTZWFyY2hib3hTZWxlY3Rpb25LZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zZWxlY3RIaWdobGlnaHRlZE9wdGlvbigpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgaGFuZGxlQ2xvc2VPckJhY2tzcGFjZUtleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmhhbmRsZVBhbmVsQ2xvc2VLZXkoZXZlbnQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlQmFja3NwYWNlS2V5KGV2ZW50KTtcbiAgfVxuICBwcml2YXRlIGhhbmRsZVBhbmVsQ2xvc2VLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJiB0aGlzLnBhbmVsT3Blbikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuY2xvc2VQYW5lbCgnZXNjYXBlJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicgJiYgdGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMuY2xvc2VQYW5lbCgndGFiJykpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGhhbmRsZUJhY2tzcGFjZUtleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGlmIChldmVudC5rZXkgIT09ICdCYWNrc3BhY2UnIHx8ICF0aGlzLm11bHRpcGxlIHx8IHRoaXMuaGFzU2VhcmNoUXVlcnkgfHwgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRJdGVtKHRoaXMuc2VsZWN0ZWRJdGVtc1t0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMV0sIGV2ZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVQcmVmZXJyZWRIaWdobGlnaHRWYWx1ZSgpOiBPcHRpb25WYWx1ZSB8IG51bGwge1xuICAgIGlmICh0aGlzLmhhc1NlYXJjaFF1ZXJ5KSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVPcHRpb25WYWx1ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFNpbmdsZU9wdGlvbj8udmFsdWUgPz8gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmlyc3RTZWxlY3RlZEZpbHRlcmVkVmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlT3B0aW9uQ2hlY2tlZFN0YXRlKFxuICAgIHNlbGVjdGVkVmFsdWVzOiBTZXQ8T3B0aW9uVmFsdWU+LFxuICAgIG9wdGlvbjogQ29tYm9ib3hSZXNvbHZlZE9wdGlvbixcbiAgICBmb3JjZUNoZWNrZWQ6IGJvb2xlYW4gfCBudWxsXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChmb3JjZUNoZWNrZWQgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmb3JjZUNoZWNrZWQ7XG4gICAgfVxuICAgIHJldHVybiAhc2VsZWN0ZWRWYWx1ZXMuaGFzKG9wdGlvbi52YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBlbnN1cmVJY29uU2VsZWN0b3JPcHRpb25zTG9hZGVkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pY29uU2VsZWN0b3IgfHwgdGhpcy5faWNvbk9wdGlvbnNDYWNoZUxhbmcgPT09IHRoaXMuY3VycmVudExhbmcgfHwgdGhpcy5pY29uT3B0aW9uc0xvYWRQcm9taXNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaWNvbk9wdGlvbnNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmljb25PcHRpb25zTG9hZFByb21pc2UgPSB0aGlzLmljb25TZWxlY3RvckRhdGFcbiAgICAgIC5sb2FkRm9udEF3ZXNvbWVWNVNvbGlkSWNvbnMoKVxuICAgICAgLnRoZW4oKGljb25zKSA9PiB7XG4gICAgICAgIHRoaXMuX2ljb25PcHRpb25zQ2FjaGUgPSBidWlsZEljb25TZWxlY3RvckNvbWJvYm94T3B0aW9ucyhpY29ucywgKHZhbHVlKSA9PiB0aGlzLnRyYW5zbGF0ZVRleHQodmFsdWUpKTtcbiAgICAgICAgdGhpcy5faWNvbk9wdGlvbnNDYWNoZUxhbmcgPSB0aGlzLmN1cnJlbnRMYW5nO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5pY29uT3B0aW9uc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pY29uT3B0aW9uc0xvYWRQcm9taXNlID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29tYm9ib3hTdGF0ZSgpO1xuICAgICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBzY2hlZHVsZVZpc2libGVPcHRpb25zU3luYyhyZXNldFNjcm9sbCA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhbmVsT3BlbiB8fCAhdGhpcy51c2VWaXJ0dWFsaXplZE9wdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gdGhpcy5zeW5jVmlzaWJsZUZpbHRlcmVkSXRlbXMocmVzZXRTY3JvbGwpKTtcbiAgICBjb25zdCBzY2hlZHVsZSA9IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbidcbiAgICAgID8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgICA6IChjYWxsYmFjazogRnJhbWVSZXF1ZXN0Q2FsbGJhY2spID0+IGdsb2JhbFRoaXMud2luZG93LnNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2socGVyZm9ybWFuY2Uubm93KCkpLCAwKTtcbiAgICBzY2hlZHVsZSgoKSA9PiB0aGlzLnN5bmNWaXNpYmxlRmlsdGVyZWRJdGVtcyhyZXNldFNjcm9sbCkpO1xuICB9XG4gIHByaXZhdGUgcmVzZXRWaXJ0dWFsV2luZG93KCk6IHZvaWQge1xuICAgIHRoaXMudmlzaWJsZVN0YXJ0SW5kZXggPSAwO1xuICAgIHRoaXMudmlzaWJsZUVuZEluZGV4ID0gMDtcbiAgICB0aGlzLnZpc2libGVGaWx0ZXJlZEl0ZW1zID0gW107XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZGMtY29tYm9ib3hcIj5cbiAgQGlmICh1aS5sYWJlbFRleHQgfHwgdWkuaW5mb1Rvb2x0aXBUZXh0KSB7XG4gICAgPGRpdiBjbGFzcz1cInNkYy1jb21ib2JveF9fbGFiZWwtcm93XCI+XG4gICAgICBAaWYgKHVpLmxhYmVsVGV4dCkge1xuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBbaWRdPVwidWkubGFiZWxJZFwiXG4gICAgICAgICAgW2Zvcl09XCJ1aS5sYWJlbEZvcklkXCJcbiAgICAgICAgICBjbGFzcz1cInNkYy1jb21ib2JveF9fbGFiZWxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmVxdWlyZWQgPyB1aS5sYWJlbFRleHQgKyAnICcgKyB1aS5yZXF1aXJlZEZpZWxkVGV4dCA6IHVpLmxhYmVsVGV4dFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbWJvYm94X19sYWJlbC10ZXh0XCI+XG4gICAgICAgICAgICB7eyB1aS5sYWJlbFRleHQgfX1cbiAgICAgICAgICAgIEBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZC1maWVsZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPio8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgfVxuICAgICAgQGlmICh1aS5pbmZvVG9vbHRpcFRleHQpIHtcbiAgICAgICAgPHNkYy10b29sdGlwXG4gICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX2luZm8tdG9vbHRpcC13cmFwXCJcbiAgICAgICAgICBbcFRvb2x0aXBdPVwidWkuaW5mb1Rvb2x0aXBUZXh0XCJcbiAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cImluZm9Ub29sdGlwUG9zaXRpb25cIlxuICAgICAgICAgIFt0b29sdGlwRXZlbnRdPVwiaW5mb1Rvb2x0aXBFdmVudFwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlIHNkYy1jb21ib2JveF9faW5mby10b29sdGlwLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgIDwvc2RjLXRvb2x0aXA+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cblxuICA8c2RjLXBvcG92ZXJcbiAgICBbb3Blbl09XCJwYW5lbE9wZW5cIlxuICAgIFthcHBlbmRUb109XCJhcHBlbmRUb1wiXG4gICAgW3pJbmRleF09XCJ6SW5kZXhcIlxuICAgIFtvZmZzZXRdPVwidWkucGFuZWxPZmZzZXRcIlxuICAgIFthcmlhTGFiZWxdPVwidWkuZHJvcGRvd25BcmlhTGFiZWxcIlxuICAgIFttYXRjaFRyaWdnZXJXaWR0aF09XCJ0cnVlXCJcbiAgICBbdG9nZ2xlT25UcmlnZ2VyQ2xpY2tdPVwiZmFsc2VcIlxuICAgIFtjbG9zZU9uRXNjYXBlXT1cImZhbHNlXCJcbiAgICBbcGFuZWxDbGFzc109XCJ1aS5wYW5lbE92ZXJsYXlDbGFzc1wiXG4gICAgKG9wZW5DaGFuZ2UpPVwib25Qb3BvdmVyT3BlbkNoYW5nZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgPGRpdlxuICAgICAgc2RjLXBvcG92ZXItdHJpZ2dlclxuICAgICAgI3RyaWdnZXJDb250cm9sUmVmXG4gICAgICBjbGFzcz1cInNkYy1jb21ib2JveF9fY29udHJvbFwiXG4gICAgICBbYXR0ci5pZF09XCJtdWx0aXBsZSA/IHVpLmNvbnRyb2xJZCA6IG51bGxcIlxuICAgICAgW2NsYXNzLnNkYy1jb21ib2JveF9fY29udHJvbC0tbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgICAgW2NsYXNzLnNkYy1jb21ib2JveF9fY29udHJvbC0taW52YWxpZF09XCJpbnZhbGlkXCJcbiAgICAgIFtjbGFzcy5zZGMtY29tYm9ib3hfX2NvbnRyb2wtLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtjbGFzcy5zZGMtY29tYm9ib3hfX2NvbnRyb2wtLXNtYWxsXT1cInNpemUgPT09ICdzbWFsbCdcIlxuICAgICAgW25nU3R5bGVdPVwiZ2V0SW5wdXRTdHlsZSgpXCJcbiAgICAgIFthdHRyLnRhYmluZGV4XT1cIm11bHRpcGxlICYmICFkaXNhYmxlZCA/IDAgOiBudWxsXCJcbiAgICAgIFthdHRyLnJvbGVdPVwibXVsdGlwbGUgPyAnY29tYm9ib3gnIDogbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIm11bHRpcGxlID8gJ2xpc3Rib3gnIDogbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm11bHRpcGxlID8gdWkuY29tYm9ib3hBcmlhTGFiZWwgOiBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJtdWx0aXBsZSA/IHVpLmNvbWJvYm94QXJpYUxhYmVsbGVkQnkgOiBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwibXVsdGlwbGUgPyByZXF1aXJlZCA6IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cIm11bHRpcGxlID8gaW52YWxpZCA6IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJtdWx0aXBsZSA/IChwYW5lbE9wZW4gPyAndHJ1ZScgOiAnZmFsc2UnKSA6IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJtdWx0aXBsZSA/IHVpLmxpc3Rib3hJZCA6IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cIm11bHRpcGxlID8gYWN0aXZlRGVzY2VuZGFudCA6IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJtdWx0aXBsZSA/IHVpLm1lc3NhZ2VJZCA6IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1hdXRvY29tcGxldGVdPVwibXVsdGlwbGUgPyAnbGlzdCcgOiBudWxsXCJcbiAgICAgIChtb3VzZWRvd24pPVwib25Db250cm9sTW91c2VEb3duKCRldmVudClcIlxuICAgICAgKGNsaWNrKT1cIm9uQ29udHJvbENsaWNrKClcIlxuICAgICAgKGtleWRvd24pPVwibXVsdGlwbGUgPyBvblRyaWdnZXJLZXlkb3duKCRldmVudCkgOiBudWxsXCJcbiAgICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZGMtY29tYm9ib3hfX3ZhbHVlXCI+XG4gICAgICAgIEBpZiAoIW11bHRpcGxlKSB7XG4gICAgICAgICAgQGlmIChzZWxlY3RlZFNpbmdsZU9wdGlvbj8uaWNvbikge1xuICAgICAgICAgICAgPHNkYy1pY29uLXJlbmRlcmVyXG4gICAgICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19sZWFkaW5nLWljb25cIlxuICAgICAgICAgICAgICBbaWNvbl09XCJzZWxlY3RlZFNpbmdsZU9wdGlvbj8uaWNvblwiXG4gICAgICAgICAgICAgIFtpY29uVHlwZV09XCJzZWxlY3RlZFNpbmdsZU9wdGlvbj8uaWNvblR5cGVcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCIxNlwiXG4gICAgICAgICAgICA+PC9zZGMtaWNvbi1yZW5kZXJlcj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjc2luZ2xlSW5wdXRSZWZcbiAgICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19pbnB1dFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBbaWRdPVwidWkuY29udHJvbElkXCJcbiAgICAgICAgICAgIFtuYW1lXT1cInVpLmlucHV0TmFtZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgIFtyZWFkT25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3RlZFNpbmdsZU9wdGlvbj8udGV4dCA/PyAnJ1wiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwidWkucGxhY2Vob2xkZXJUZXh0XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidWkuY29tYm9ib3hBcmlhTGFiZWxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInVpLmNvbWJvYm94QXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaW52YWxpZFwiXG4gICAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJwYW5lbE9wZW4gPyAndHJ1ZScgOiAnZmFsc2UnXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiJ2xpc3Rib3gnXCJcbiAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJjb21ib2JveC1maWVsZC1saXN0Ym94XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwidWkubGlzdGJveElkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJhY3RpdmVEZXNjZW5kYW50XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwidWkubWVzc2FnZUlkXCJcbiAgICAgICAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgICAgICBhcmlhLWF1dG9jb21wbGV0ZT1cImxpc3RcIlxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJvbklucHV0Rm9jdXMoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvblRyaWdnZXJLZXlkb3duKCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxkaXYgI211bHRpVmFsdWVSZWYgY2xhc3M9XCJzZGMtY29tYm9ib3hfX211bHRpLXZhbHVlXCI+XG4gICAgICAgICAgICAgIEBpZiAoIXNob3VsZERpc3BsYXlDaGlwU3VtbWFyeSkge1xuICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICA8dWxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX2NoaXAtbGlzdFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic2VsZWN0ZWRTdW1tYXJ5VGV4dFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBzZWxlY3RlZEl0ZW1zOyB0cmFjayB0cmFja0J5T3B0aW9uVmFsdWUoJGluZGV4LCBpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX2NoaXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy1pY29uLXJlbmRlcmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX2NoaXAtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvblR5cGVdPVwiaXRlbS5pY29uVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiMTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtaWNvbi1yZW5kZXJlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbWJvYm94X19jaGlwLWxhYmVsXCIgW2F0dHIudGl0bGVdPVwiaXRlbS50ZXh0XCI+e3sgaXRlbS50ZXh0IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX2NoaXAtcmVtb3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjaGlwUmVtb3ZlQXJpYUxhYmVsKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVNlbGVjdGVkSXRlbShpdGVtLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICBAaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtY29tYm9ib3hfX3N1bW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgc2VsZWN0ZWRTdW1tYXJ5VGV4dCB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtY29tYm9ib3hfX3BsYWNlaG9sZGVyXCI+XG4gICAgICAgICAgICAgICAgICB7eyB1aS5wbGFjZWhvbGRlclRleHQgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICA8dWxcbiAgICAgICAgICAgICAgICAgICNjaGlwTWVhc3VyZVJlZlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX2NoaXAtbGlzdCBzZGMtY29tYm9ib3hfX2NoaXAtbGlzdC0tbWVhc3VyZVwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBzZWxlY3RlZEl0ZW1zOyB0cmFjayB0cmFja0J5T3B0aW9uVmFsdWUoJGluZGV4LCBpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNkYy1jb21ib2JveF9fY2hpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5pY29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLWljb24tcmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX2NoaXAtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIml0ZW0uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uVHlwZV09XCJpdGVtLmljb25UeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiMTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLWljb24tcmVuZGVyZXI+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbWJvYm94X19jaGlwLWxhYmVsXCI+e3sgaXRlbS50ZXh0IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbWJvYm94X19jaGlwLXJlbW92ZS1wbGFjZWhvbGRlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLWNvbWJvYm94X19hY3Rpb25zXCI+XG4gICAgICAgICAgQGlmIChoYXNDbGVhckFjdGlvbikge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX2ljb24tYnV0dG9uIHNkYy1jb21ib2JveF9faWNvbi1idXR0b24tLWNsZWFyXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ1aS5jbGVhckZpZWxkVGV4dFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckFsbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX2ljb24tYnV0dG9uIHNkYy1jb21ib2JveF9faWNvbi1idXR0b24tLXRvZ2dsZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ1aS5kcm9wZG93bkFyaWFMYWJlbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cInBhbmVsT3BlblwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uVG9nZ2xlTW91c2VEb3duKCRldmVudClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhbmVsKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtY2FyZXQtZG93biBzZGMtY29tYm9ib3hfX2NhcmV0XCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNkYy1jb21ib2JveF9fY2FyZXQtLW9wZW5dPVwicGFuZWxPcGVuXCJcbiAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgc2RjLXBvcG92ZXItY29udGVudFxuICAgICAgICBjbGFzcz1cInNkYy1jb21ib2JveF9fcGFuZWxcIlxuICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJwYW5lbE1heEhlaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNkYy1jb21ib2JveF9fcGFuZWwtc2VhcmNoXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy1jb21ib2JveF9fcGFuZWwtc2VhcmNoLXJvd1wiPlxuICAgICAgICAgICAgQGlmIChtdWx0aXBsZSkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1jb21ib2JveF9fcGFuZWwtc2VsZWN0LWFsbFwiPlxuICAgICAgICAgICAgICAgIDxzZGMtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImFyZUFsbEZpbHRlcmVkSXRlbXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInVpLnNlbGVjdEFsbFRleHRcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlQWxsRmlsdGVyZWRJdGVtcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+PC9zZGMtY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPHNkYy1zZWFyY2hib3hcbiAgICAgICAgICAgICAgI3BhbmVsU2VhcmNoYm94UmVmXG4gICAgICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19wYW5lbC1zZWFyY2hib3hcIlxuICAgICAgICAgICAgICBbaWRlbnRpdHldPVwidWkucGFuZWxTZWFyY2hJZGVudGl0eVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJ1aS5wYW5lbFNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VhcmNoVGVybVwiXG4gICAgICAgICAgICAgIFtkZWJvdW5jZVRpbWVNc109XCIwXCJcbiAgICAgICAgICAgICAgW3N1Ym1pdE9uRW50ZXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbY2xlYXJPbkVzY2FwZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwidWkucGFuZWxTZWFyY2hBcmlhTGFiZWxcIlxuICAgICAgICAgICAgICBbaW5wdXRSb2xlXT1cIm51bGxcIlxuICAgICAgICAgICAgICBbaW5wdXRBdXRvY29tcGxldGVdPVwiJ29mZidcIlxuICAgICAgICAgICAgICBbaW5wdXRBcmlhQ29udHJvbHNdPVwidWkubGlzdGJveElkXCJcbiAgICAgICAgICAgICAgW2lucHV0QXJpYURlc2NyaWJlZEJ5XT1cInVpLm1lc3NhZ2VJZFwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoVGVybUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG9uQ2xlYXIpPVwib25TZWFyY2hDbGVhcmVkKClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvblNlYXJjaGJveEtleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9zZGMtc2VhcmNoYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKGlzT3B0aW9uc0xvYWRpbmcpIHtcbiAgICAgICAgICA8b3V0cHV0IGNsYXNzPVwic2RjLWNvbWJvYm94X19sb2FkaW5nXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zcGlubmVyIGZhLXNwaW4gc2RjLWNvbWJvYm94X19sb2FkaW5nLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1jb21ib2JveF9fbG9hZGluZy10ZXh0XCI+e3sgdWkubG9hZGluZ0l0ZW1zVGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L291dHB1dD5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoc2hvd0VtcHR5U3RhdGUpIHtcbiAgICAgICAgICA8c2RjLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICBjbGFzcz1cInNkYy1jb21ib2JveF9fZW1wdHlcIlxuICAgICAgICAgICAgdmFyaWFudD1cImlubGluZS10ZXh0XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJ1aS5lbXB0eVRpdGxlVGV4dFwiXG4gICAgICAgICAgPjwvc2RjLWVtcHR5LXN0YXRlPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChmaWx0ZXJlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBAaWYgKHVzZVZpcnR1YWxpemVkT3B0aW9ucykge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAjb3B0aW9uc1ZpZXdwb3J0UmVmXG4gICAgICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19vcHRpb25zIHNkYy1jb21ib2JveF9fb3B0aW9ucy0tdmlydHVhbGl6ZWRcIlxuICAgICAgICAgICAgICAoc2Nyb2xsKT1cIm9uT3B0aW9uc1Njcm9sbCgpXCJcbiAgICAgICAgICAgICAgKG1vdXNlbW92ZSk9XCJvbk9wdGlvbnNQYW5lbE1vdXNlTW92ZSgpXCJcbiAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25PcHRpb25zUGFuZWxNb3VzZUxlYXZlKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwhLS0gTk9TT05BUjogY3VzdG9tIGNvbWJvYm94IHBvcHVwIGludGVudGlvbmFsbHkgdXNlcyBBUklBIGxpc3Rib3ggc2VtYW50aWNzIGluc3RlYWQgb2YgYSBuYXRpdmUgc2VsZWN0IC0tPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX29wdGlvbnMtbGlzdFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwidWkubGlzdGJveElkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInVpLmNvbWJvYm94QXJpYUxhYmVsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwidWkuY29tYm9ib3hBcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICAgICAgW2F0dHIucm9sZV09XCInbGlzdGJveCdcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbXVsdGlzZWxlY3RhYmxlXT1cIm11bHRpcGxlID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X192aXJ0dWFsLXNwYWNlclwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImJlZm9yZVZpcnR1YWxTcGFjZXJIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICB2aXNpYmxlT3B0aW9uIG9mIHZpc2libGVGaWx0ZXJlZEl0ZW1zO1xuICAgICAgICAgICAgICAgICAgdHJhY2sgdHJhY2tCeU9wdGlvblZhbHVlKHZpc2libGVPcHRpb24uaW5kZXgsIHZpc2libGVPcHRpb24uaXRlbSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX29wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtY29tYm9ib3hfX29wdGlvbi0tYWN0aXZlXT1cImlzT3B0aW9uQWN0aXZlKHZpc2libGVPcHRpb24uaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNkYy1jb21ib2JveF9fb3B0aW9uLS1pY29uLXNlbGVjdG9yXT1cImljb25TZWxlY3RvclwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtY29tYm9ib3hfX29wdGlvbi0tc2VsZWN0ZWRdPVwiIW11bHRpcGxlICYmIGlzT3B0aW9uU2VsZWN0ZWQodmlzaWJsZU9wdGlvbi5pdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtb3B0aW9uLWluZGV4XT1cInZpc2libGVPcHRpb24uaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbk9wdGlvbk1vdXNlRW50ZXIodmlzaWJsZU9wdGlvbi5pbmRleClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLWNvbWJvYm94X19vcHRpb24tY2hlY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZGMtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaXNPcHRpb25TZWxlY3RlZCh2aXNpYmxlT3B0aW9uLml0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uT3B0aW9uQ2hlY2tib3hDaGFuZ2UodmlzaWJsZU9wdGlvbi5pdGVtLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8IS0tIE5PU09OQVIgLS0+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gdGhlIGN1c3RvbSBsaXN0Ym94IGtlZXBzIG9wdGlvbiBzZW1hbnRpY3Mgb24gdGhlIGZvY3VzYWJsZSBhY3Rpb24gZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNkYy1jb21ib2JveF9fb3B0aW9uLWFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwib3B0aW9uSWQodmlzaWJsZU9wdGlvbi5pbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiJ29wdGlvbidcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNPcHRpb25TZWxlY3RlZCh2aXNpYmxlT3B0aW9uLml0ZW0pID8gJ3RydWUnIDogJ2ZhbHNlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uT3B0aW9uS2V5ZG93bigkZXZlbnQsIHZpc2libGVPcHRpb24uaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk9wdGlvbkNsaWNrKHZpc2libGVPcHRpb24uaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1jb21ib2JveF9fb3B0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAodmlzaWJsZU9wdGlvbi5pdGVtLmljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy1pY29uLXJlbmRlcmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX29wdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJ2aXNpYmxlT3B0aW9uLml0ZW0uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25UeXBlXT1cInZpc2libGVPcHRpb24uaXRlbS5pY29uVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtaWNvbi1yZW5kZXJlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbWJvYm94X19vcHRpb24tdGV4dHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtY29tYm9ib3hfX29wdGlvbi1sYWJlbFwiPnt7IHZpc2libGVPcHRpb24uaXRlbS50ZXh0IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG9wdGlvbk1ldGFUZXh0KHZpc2libGVPcHRpb24uaXRlbSk7IGFzIG9wdGlvbk1ldGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX29wdGlvbi1tZXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbk1ldGEgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmICghbXVsdGlwbGUgJiYgaXNPcHRpb25TZWxlY3RlZCh2aXNpYmxlT3B0aW9uLml0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1jaGVjayBzZGMtY29tYm9ib3hfX29wdGlvbi1zZWxlY3RlZC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNkYy1jb21ib2JveF9fdmlydHVhbC1zcGFjZXJcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJhZnRlclZpcnR1YWxTcGFjZXJIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8IS0tIE5PU09OQVI6IGN1c3RvbSBjb21ib2JveCBwb3B1cCBpbnRlbnRpb25hbGx5IHVzZXMgQVJJQSBsaXN0Ym94IHNlbWFudGljcyBpbnN0ZWFkIG9mIGEgbmF0aXZlIHNlbGVjdCAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX29wdGlvbnNcIlxuICAgICAgICAgICAgICBbYXR0ci5pZF09XCJ1aS5saXN0Ym94SWRcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInVpLmNvbWJvYm94QXJpYUxhYmVsXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInVpLmNvbWJvYm94QXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgICBbYXR0ci5yb2xlXT1cIidsaXN0Ym94J1wiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbXVsdGlzZWxlY3RhYmxlXT1cIm11bHRpcGxlID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAobW91c2Vtb3ZlKT1cIm9uT3B0aW9uc1BhbmVsTW91c2VNb3ZlKClcIlxuICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvbk9wdGlvbnNQYW5lbE1vdXNlTGVhdmUoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIGZpbHRlcmVkSXRlbXM7IHRyYWNrIHRyYWNrQnlPcHRpb25WYWx1ZShpbmRleCwgb3B0aW9uKTsgbGV0IGluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX29wdGlvblwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLWNvbWJvYm94X19vcHRpb24tLWFjdGl2ZV09XCJpc09wdGlvbkFjdGl2ZShpbmRleClcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNkYy1jb21ib2JveF9fb3B0aW9uLS1pY29uLXNlbGVjdG9yXT1cImljb25TZWxlY3RvclwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3Muc2RjLWNvbWJvYm94X19vcHRpb24tLXNlbGVjdGVkXT1cIiFtdWx0aXBsZSAmJiBpc09wdGlvblNlbGVjdGVkKG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1vcHRpb24taW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25PcHRpb25Nb3VzZUVudGVyKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBAaWYgKG11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZGMtY29tYm9ib3hfX29wdGlvbi1jaGVja1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzZGMtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbk9wdGlvbkNoZWNrYm94Q2hhbmdlKG9wdGlvbiwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwhLS0gTk9TT05BUiAtLT5cbiAgICAgICAgICAgICAgICAgIDwhLS0gdGhlIGN1c3RvbSBsaXN0Ym94IGtlZXBzIG9wdGlvbiBzZW1hbnRpY3Mgb24gdGhlIGZvY3VzYWJsZSBhY3Rpb24gZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNkYy1jb21ib2JveF9fb3B0aW9uLWFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cIm9wdGlvbklkKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiJ29wdGlvbidcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uKSA/ICd0cnVlJyA6ICdmYWxzZSdcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uT3B0aW9uS2V5ZG93bigkZXZlbnQsIG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25PcHRpb25DbGljayhvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1jb21ib2JveF9fb3B0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKG9wdGlvbi5pY29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLWljb24tcmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtY29tYm9ib3hfX29wdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwib3B0aW9uLmljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvblR5cGVdPVwib3B0aW9uLmljb25UeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLWljb24tcmVuZGVyZXI+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbWJvYm94X19vcHRpb24tdGV4dHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWNvbWJvYm94X19vcHRpb24tbGFiZWxcIj57eyBvcHRpb24udGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAob3B0aW9uTWV0YVRleHQob3B0aW9uKTsgYXMgb3B0aW9uTWV0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2RjLWNvbWJvYm94X19vcHRpb24tbWV0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbk1ldGEgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKCFtdWx0aXBsZSAmJiBpc09wdGlvblNlbGVjdGVkKG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtY2hlY2sgc2RjLWNvbWJvYm94X19vcHRpb24tc2VsZWN0ZWQtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvc2RjLXBvcG92ZXI+XG5cbiAgICBAaWYgKHVpLm1lc3NhZ2VUZXh0KSB7XG4gICAgICA8c21hbGxcbiAgICAgICAgW2lkXT1cInVpLm1lc3NhZ2VJZFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldEludmFsaWRNZXNzYWdlQ2xhc3MoKVwiXG4gICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgID5cbiAgICAgICAge3sgdWkubWVzc2FnZVRleHQgfX1cbiAgICAgIDwvc21hbGw+XG4gICAgfVxuICA8L2Rpdj5cbiJdfQ==
|