@libs-ui/components-tabs 0.2.222 → 0.2.224
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.
|
@@ -82,9 +82,10 @@ export class LibsUiComponentsTabsItemComponent {
|
|
|
82
82
|
this.popoverFunctionControlEvent.set(event);
|
|
83
83
|
}
|
|
84
84
|
handlerPopoverEvent(event) {
|
|
85
|
-
if (event
|
|
86
|
-
|
|
85
|
+
if (event !== 'show' && event !== 'remove') {
|
|
86
|
+
return;
|
|
87
87
|
}
|
|
88
|
+
this.actionShowing.set(event === 'show');
|
|
88
89
|
}
|
|
89
90
|
handlerClickButton(event, type) {
|
|
90
91
|
event.stopPropagation();
|
|
@@ -103,7 +104,7 @@ export class LibsUiComponentsTabsItemComponent {
|
|
|
103
104
|
this.onDestroy.complete();
|
|
104
105
|
}
|
|
105
106
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsTabsItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
106
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsTabsItemComponent, isStandalone: true, selector: "libs_ui-components-tabs-item", inputs: { ignoreCalculatorTab: { classPropertyName: "ignoreCalculatorTab", publicName: "ignoreCalculatorTab", isSignal: true, isRequired: true, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: true, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: true, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, keySelected: { classPropertyName: "keySelected", publicName: "keySelected", isSignal: true, isRequired: true, transformFunction: null }, fieldLabel: { classPropertyName: "fieldLabel", publicName: "fieldLabel", isSignal: true, isRequired: true, transformFunction: null }, fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: true, transformFunction: null }, cssDefault: { classPropertyName: "cssDefault", publicName: "cssDefault", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: true, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, changeViewTab: { classPropertyName: "changeViewTab", publicName: "changeViewTab", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { item: "itemChange", outAction: "outAction" }, ngImport: i0, template: " @if (item(); as item) {\n <div #itemEl\n class=\"libs-ui-tab-header-center-item {{ cssDefault() }} {{ item.classInclude || '' }} {{ item[fieldKey()] === keySelected() && tabs().classIncludeActiveItem ? tabs().classIncludeActiveItem : '' }}\"\n [attr.key]=\"item[fieldKey()]\"\n [attr.invalid]=\"item.invalid && !tabs().ignoreShowLineBottomInTab\"\n [attr.active]=\"item[fieldKey()] === keySelected() && !tabs().ignoreShowLineBottomInTab\"\n [attr.disable]=\"!!(item.disable || disable())\"\n [class.libs-ui-tab-header-center-item-hover]=\"!tabs().ignoreShowLineBottomInTab\"\n [class.libs-ui-tab-header-center-item-action-show]=\"actionShowing()\"\n [class.cursor-pointer]=\"!item.disable && !disable()\">\n @if (tabs().hasImage) {\n <img class=\"libs-ui-tab-header-center-item-image {{ item.classImageInclude || '' }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverImage\"\n [config]=\"item.popoverImage\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"item.disable || disable()\"\n [class.pointer-events-none]=\"item.disable || disable()\"\n [src]=\"item.linkImage\"\n [attr.key]=\"item[fieldKey()]\"\n (error)=\"handlerImgError($event)\" />\n }\n @if (item.iconLeft) {\n <i class=\"libs-ui-tab-header-center-item-icon libs-ui-mr-8px {{ item.iconLeft }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconLeft\"\n [config]=\"item.popoverIconLeft\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"item.disable || disable()\"\n [class.pointer-events-none]=\"item.disable || disable()\">\n </i>\n }\n @if (item.is_pin) {\n <i class=\"libs-ui-tab-header-center-item-icon mr-[8px] {{ item[fieldKey()] === keySelected() ? 'libs-ui-icon-pin-solid' : 'libs-ui-icon-pin-outline' }}\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"item.disable || disable()\"\n [class.pointer-events-none]=\"item.disable || disable()\">\n </i>\n }\n @if (tabs().hasStep) {\n @if (tabs().stepHasBackGround) {\n <div class=\"libs-ui-tab-header-center-item-step !border-none libs-ui-font-h6m\"\n [class.cursor-default]=\"item.disable || disable()\"\n [class.pointer-events-none]=\"item.disable || disable()\"\n [class.!text-[#ffffff]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [class.bg-[#f8f9fa]]=\"step() > (tabs().stepCompleted || 0) && (tabs().ignoreSelectedBackgroundStep || item.disable || disable()) && !item.invalid\"\n [class.bg-[#00bc62]]=\"step() <= (tabs().stepCompleted || -1) && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-light-2)]]=\"((item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep) || (step() > (tabs().stepCompleted || 0) && !tabs().ignoreSelectedBackgroundStep)) && !item.invalid\"\n [class.!bg-[#fdeaec]]=\"item.invalid\">\n @if ((step() <= (tabs().stepCompleted || -1))) {\n <i class=\"libs-ui-icon-check text-[#ffffff]\"></i>\n } @else {\n <span [class.text-[#cdd0d6]]=\"item.disable || disable()\">{{ step() }}</span>\n }\n </div>\n } @else {\n <div class=\"libs-ui-tab-header-center-item-step\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"item.disable || disable()\"\n [class.pointer-events-none]=\"item.disable || disable()\">\n <span>{{ step() }}</span>\n </div>\n }\n }\n @if (item.configButtonLeft) {\n <libs_ui-components-buttons-button [type]=\"item.configButtonLeft.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonLeft.classInclude || ''\"\n [classIconLeft]=\"item.configButtonLeft.classIconLeft ||''\"\n [classLabel]=\"item.configButtonLeft.classLabel || ''\"\n [classIconRight]=\"item.configButtonLeft.classIconRight ||''\"\n [label]=\"item.configButtonLeft.label ||''\"\n [popover]=\"item.configButtonLeft.popover || {}\"\n (outClick)=\"handlerClickButton($event, 'configButtonLeft')\" />\n }\n @if (item[fieldLabel()]) {\n <div class=\"relative flex\"\n [style.maxWidth.px]=\"tabs().maxWidthTextLabelItem || 160\">\n <span LibsUiComponentsPopoverDirective\n [type]=\"'text'\"\n [config]=\"{position: {mode: step() === 1 ? 'start' : 'center', distance: 0}, zIndex: zIndex()}\"\n [attr.size]=\"size()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [ignoreStopPropagationEvent]=\"true\"\n [classInclude]=\"'w-full libs-ui-tab-header-center-item-label '+ (item.classLabel || 'libs-ui-font-h6m') + \n (disableLabel() && (item.disable || disable()) ? ' libs-ui-disable' : '') \n + (tabs().stepHasBackGround && (item.disable || disable()) ? ' text-[#cdd0d6] cursor-default' : '')\"\n [innerHTML]=\"labelComputed()\"></span>\n @if (item.hasRedDot) {\n <div class=\"absolute right-[-6px] top-[-2px] w-[6px] h-[6px] bg-[#ee2d41] rounded-[6px]\">\n </div>\n }\n </div>\n }\n @if (item.popover) {\n <i class=\"libs-ui-tab-header-center-item-icon ml-[8px] libs-ui-icon-tooltip-outline\"\n LibsUiComponentsPopoverDirective\n [config]=\"item.popover\"\n [class.libs-ui-disable]=\"item.disable || disable()\"\n [class.pointer-events-none]=\"item.disable || disable()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\">\n </i>\n }\n @if (item.iconRight) {\n <i class=\"libs-ui-tab-header-center-item-icon {{ item.iconRight }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconRight\"\n [config]=\"item.popoverIconRight\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"item.disable || disable()\"\n [class.pointer-events-none]=\"item.disable || disable()\">\n </i>\n }\n @if (item.count !== undefined) {\n <libs_ui-components-badge [mode]=\"item.modeCount || 'x+'\"\n [count]=\"item.count\"\n [maxCount]=\"item.maxCount || 99\"\n [classCircle]=\"(item.classCircle || 'libs-ui-font-h5r') + (item.invalid ? ' !text-[#f15767] !bg-[#fdeaec]' : '')\"\n [active]=\"item[fieldKey()] === keySelected()\"\n [class.libs-ui-disable]=\"item.disable || disable()\"\n [class.pointer-events-none]=\"item.disable || disable()\" />\n }\n @if (item.configButtonRight) {\n <libs_ui-components-buttons-button [type]=\"item.configButtonRight.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonRight.classInclude || ''\"\n [classIconLeft]=\"item.configButtonRight.classIconLeft ||''\"\n [classLabel]=\"item.configButtonRight.classLabel || ''\"\n [classIconRight]=\"item.configButtonRight.classIconRight ||''\"\n [popover]=\"item.configButtonRight.popover || {}\"\n [label]=\"item.configButtonRight.label ||''\"\n (outClick)=\"handlerClickButton($event, 'configButtonRight')\" />\n }\n @if (tabs().actionRightConfig?.(); as right) {\n <libs_ui-components-popover [class]=\"right.classInclude || 'ml-[8px]'\"\n [class.libs-ui-tab-header-center-item-action]=\"right.onlyShowWhenHoverItemActive\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.pointer-events-none]=\"item.disable || disable() || item[fieldKey()] !== keySelected()\"\n [mode]=\"'click-toggle'\"\n [ignoreStopPropagationEvent]=\"true\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [elementRefCustom]=\"right.onlyShowWhenHoverItemActive || item[fieldKey()] !== keySelected() ? undefined : itemEl \"\n [config]=\"{\n zIndex: right.config?.()?.zIndex || 1000,\n maxHeight: right.config?.()?.maxHeight || 287,\n maxWidth: right.config?.()?.maxWidth || 2048,\n width: right.config?.()?.width || 220, \n direction: right.config?.()?.direction || 'bottom',\n template: right.config?.()?.template || actionEl,\n whiteTheme: true,\n ignoreArrow: true,\n position: right.config?.()?.position || { mode: 'start', distance: 0 }\n }\"\n (outEvent)=\"handlerPopoverEvent($event)\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n @if (right.customView) {\n <div [innerHtml]=\"item[fieldKey()] | LibsUiPipesCallFunctionInTemplatePipe:right.customView:item\"></div>\n } @else {\n <i [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.invalid]=\"item.invalid\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class]=\"right.onlyShowWhenHoverItemActive ? 'libs-ui-icon-more-vertical rotate-90 libs-ui-tab-header-center-item-icon' : 'libs-ui-icon-chevron-right rotate-90 libs-ui-tab-header-center-item-icon'\">\n </i>\n }\n </libs_ui-components-popover>\n <ng-template #actionEl>\n @if ((0 | LibsUiPipesCallFunctionInTemplatePipe:right.getListViewConfig:item: item[fieldKey()]: {valueIs0: 0} |async) ; as config) {\n <libs_ui-components-list [config]=\"config()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n }\n </ng-template>\n }\n @if (tabs().allowRemove && tabs().items().length > 1) {\n <libs_ui-components-buttons-button [type]=\"tabs().configButtonRemove?.type || 'button-link-custom'\"\n [iconOnlyType]=\"tabs().configButtonRemove?.iconOnlyType || true\"\n [classInclude]=\"tabs().configButtonRemove?.classInclude || 'ml-[8px] !p-0'\"\n [classIconLeft]=\"tabs().configButtonRemove?.classIconLeft || 'libs-ui-icon-close'\"\n [classLabel]=\"tabs().configButtonRemove?.classLabel || ''\"\n [classIconRight]=\"tabs().configButtonRemove?.classIconRight ||''\"\n [popover]=\"tabs().configButtonRemove?.popover || {config: {content: 'i18n_delete'}}\"\n [label]=\"tabs().configButtonRemove?.label ||''\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#6a7383',\n text_hover: '#f15767',\n text_active: '#f15767',\n text_disable: '#cdd0d6'\n },\n rootColor: '#f15767'\n }\"\n (outClick)=\"handlerClickButton($event, 'remove')\" />\n }\n </div>\n }\n", styles: [".libs-ui-tab-header-center-item{position:relative;display:flex;align-items:center;flex-wrap:nowrap;padding:12px 0;height:100%;width:fit-content}.libs-ui-tab-header-center-item[active=true]:after{content:\"\";width:100%;height:2px;background-color:var(--libs-ui-color-default, #226ff5);position:absolute;bottom:0;left:0}.libs-ui-tab-header-center-item[invalid=true]:after{background-color:#f15767}.libs-ui-tab-header-center-item-image{width:20px;height:20px;border-radius:50%;margin-right:8px}.libs-ui-tab-header-center-item-icon{display:flex}.libs-ui-tab-header-center-item-icon:before{font-size:12px}.libs-ui-tab-header-center-item-label{font-family:var(--libs-ui-font-family-name, \"Arial\");color:#6a7383;font-size:11px}.libs-ui-tab-header-center-item-label[size=langer]{font-size:13px}.libs-ui-tab-header-center-item-label[completed=true]{color:#6a7383}.libs-ui-tab-header-center-item-label[active=true]{color:var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item-action{display:none}.libs-ui-tab-header-center-item-step{border-radius:50%;border:1px solid #9ca2ad;color:#9ca2ad;min-width:24px;min-height:24px;display:flex;align-items:center;justify-content:center;margin-right:8px}.libs-ui-tab-header-center-item-step[completed=true]{color:#6a7383;border:1px solid #6A7383}.libs-ui-tab-header-center-item-step[active=true]{color:var(--libs-ui-color-default, #226ff5);border:1px solid var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-]:before{color:#6a7383}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][completed=true]:before{color:#6a7383}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][active=true]:before{color:var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][invalid=true]:before{color:#f15767}.libs-ui-tab-header-center-item-hover:hover[active=false][disable=false]:after{content:\"\";width:100%;height:2px;background-color:#6a7383;position:absolute;bottom:0;left:0}.libs-ui-tab-header-center-item-hover:hover .libs-ui-tab-header-center-item-action[active=true],.libs-ui-tab-header-center-item-action-show .libs-ui-tab-header-center-item-action{display:flex}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsBadgeComponent, selector: "libs_ui-components-badge", inputs: ["popoverConfig", "active", "count", "mode", "maxCount", "ignoreMarginDefault", "classCircle", "ignoreStopPropagationEvent"] }, { kind: "component", type: LibsUiComponentsListComponent, selector: "libs_ui-components-list", inputs: ["hiddenInputSearch", "dropdownTabKeyActive", "keySearch", "paddingLeftItem", "config", "autoSelectedFirstItemCallOutsideBefore", "isSearchOnline", "disable", "disableLabel", "labelConfig", "searchConfig", "searchPadding", "dividerClassInclude", "hasDivider", "buttonsOther", "hasButtonUnSelectOption", "clickExactly", "backgroundListCustom", "maxItemShow", "keySelected", "multiKeySelected", "keysDisableItem", "keysHiddenItem", "focusInputSearch", "skipFocusInputWhenKeySearchStoreUndefined", "functionGetItemsAutoAddList", "validRequired", "showValidateBottom", "zIndex", "loadingIconSize", "templateRefSearchNoData", "resetKeyWhenSelectAllKeyDropdown", "ignoreClassDisableDefaultWhenUseKeysDisableItem"], outputs: ["outSelectKey", "outSelectMultiKey", "outUnSelectMultiKey", "outClickButtonOther", "outFieldKey", "outChangeView", "outKeySearch", "outLoading", "outFunctionsControl", "outChangStageFlagMousePopover", "outLoadItemsComplete"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
107
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsTabsItemComponent, isStandalone: true, selector: "libs_ui-components-tabs-item", inputs: { ignoreCalculatorTab: { classPropertyName: "ignoreCalculatorTab", publicName: "ignoreCalculatorTab", isSignal: true, isRequired: true, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: true, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: true, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, keySelected: { classPropertyName: "keySelected", publicName: "keySelected", isSignal: true, isRequired: true, transformFunction: null }, fieldLabel: { classPropertyName: "fieldLabel", publicName: "fieldLabel", isSignal: true, isRequired: true, transformFunction: null }, fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: true, transformFunction: null }, cssDefault: { classPropertyName: "cssDefault", publicName: "cssDefault", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: true, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, changeViewTab: { classPropertyName: "changeViewTab", publicName: "changeViewTab", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { item: "itemChange", outAction: "outAction" }, ngImport: i0, template: " @if (item(); as item) {\n <div #itemEl\n class=\"libs-ui-tab-header-center-item {{ cssDefault() }} {{ item.classInclude || '' }} {{ item[fieldKey()] === keySelected() && tabs().classIncludeActiveItem ? tabs().classIncludeActiveItem : '' }}\"\n [attr.key]=\"item[fieldKey()]\"\n [attr.invalid]=\"item.invalid && !tabs().ignoreShowLineBottomInTab\"\n [attr.active]=\"item[fieldKey()] === keySelected() && !tabs().ignoreShowLineBottomInTab\"\n [attr.disable]=\"disable()\"\n [class.!cursor-pointer]=\"!disable()\"\n [class.!cursor-default]=\"disable()\"\n [class.libs-ui-tab-header-center-item-hover]=\"!tabs().ignoreShowLineBottomInTab\"\n [class.libs-ui-tab-header-center-item-action-show]=\"actionShowing()\">\n @if (tabs().hasImage) {\n <img class=\"libs-ui-tab-header-center-item-image {{ item.classImageInclude || '' }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverImage\"\n [config]=\"item.popoverImage\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"disable()\"\n [src]=\"item.linkImage\"\n [attr.key]=\"item[fieldKey()]\"\n (error)=\"handlerImgError($event)\" />\n }\n @if (item.iconLeft) {\n <i class=\"libs-ui-tab-header-center-item-icon libs-ui-mr-8px {{ item.iconLeft }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconLeft\"\n [config]=\"item.popoverIconLeft\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\">\n </i>\n }\n @if (item.is_pin) {\n <i class=\"libs-ui-tab-header-center-item-icon mr-[8px] {{ item[fieldKey()] === keySelected() ? 'libs-ui-icon-pin-solid' : 'libs-ui-icon-pin-outline' }}\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\">\n </i>\n }\n @if (tabs().hasStep) {\n @if (tabs().stepHasBackGround) {\n <div class=\"libs-ui-tab-header-center-item-step !border-none libs-ui-font-h6m\"\n [class.!text-[#ffffff]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [class.bg-[#f8f9fa]]=\"step() > (tabs().stepCompleted || 0) && (tabs().ignoreSelectedBackgroundStep || disable()) && !item.invalid\"\n [class.bg-[#00bc62]]=\"step() <= (tabs().stepCompleted || -1) && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-light-2)]]=\"((item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep) || (step() > (tabs().stepCompleted || 0) && !tabs().ignoreSelectedBackgroundStep)) && !item.invalid\"\n [class.!bg-[#fdeaec]]=\"item.invalid\">\n @if ((step() <= (tabs().stepCompleted || -1))) {\n <i class=\"libs-ui-icon-check text-[#ffffff]\"></i>\n } @else {\n <span [class.text-[#cdd0d6]]=\"disable()\">{{ step() }}</span>\n }\n </div>\n } @else {\n <div class=\"libs-ui-tab-header-center-item-step\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\">\n <span>{{ step() }}</span>\n </div>\n }\n }\n @if (item.configButtonLeft) {\n <libs_ui-components-buttons-button [type]=\"item.configButtonLeft.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonLeft.classInclude || ''\"\n [classIconLeft]=\"item.configButtonLeft.classIconLeft ||''\"\n [classLabel]=\"item.configButtonLeft.classLabel || ''\"\n [classIconRight]=\"item.configButtonLeft.classIconRight ||''\"\n [label]=\"item.configButtonLeft.label ||''\"\n [popover]=\"item.configButtonLeft.popover || {}\"\n (outClick)=\"handlerClickButton($event, 'configButtonLeft')\" />\n }\n @if (item[fieldLabel()]) {\n <div class=\"relative flex\"\n [style.maxWidth.px]=\"tabs().maxWidthTextLabelItem || 160\">\n <span LibsUiComponentsPopoverDirective\n [type]=\"'text'\"\n [config]=\"{position: {mode: step() === 1 ? 'start' : 'center', distance: 0}, zIndex: zIndex()}\"\n [attr.size]=\"size()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [ignoreStopPropagationEvent]=\"true\"\n [classInclude]=\"'w-full libs-ui-tab-header-center-item-label '+ (item.classLabel || 'libs-ui-font-h6m') + \n (disableLabel() && (disable()) ? ' libs-ui-disable' : '') \n + (tabs().stepHasBackGround && (disable()) ? ' text-[#cdd0d6]' : '')\"\n [innerHTML]=\"labelComputed()\"></span>\n @if (item.hasRedDot) {\n <div class=\"absolute right-[-6px] top-[-2px] w-[6px] h-[6px] bg-[#ee2d41] rounded-[6px]\">\n </div>\n }\n </div>\n }\n @if (item.popover) {\n <i class=\"libs-ui-tab-header-center-item-icon ml-[8px] libs-ui-icon-tooltip-outline\"\n LibsUiComponentsPopoverDirective\n [config]=\"item.popover\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"disable()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\">\n </i>\n }\n @if (item.iconRight) {\n <i class=\"libs-ui-tab-header-center-item-icon {{ item.iconRight }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconRight\"\n [config]=\"item.popoverIconRight\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\">\n </i>\n }\n @if (item.count !== undefined) {\n <libs_ui-components-badge [mode]=\"item.modeCount || 'x+'\"\n [count]=\"item.count\"\n [maxCount]=\"item.maxCount || 99\"\n [classCircle]=\"(item.classCircle || 'libs-ui-font-h5r') + (item.invalid ? ' !text-[#f15767] !bg-[#fdeaec]' : '')\"\n [active]=\"item[fieldKey()] === keySelected()\"\n [class.libs-ui-disable]=\"disable()\" />\n }\n @if (item.configButtonRight) {\n <libs_ui-components-buttons-button [type]=\"item.configButtonRight.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonRight.classInclude || ''\"\n [classIconLeft]=\"item.configButtonRight.classIconLeft ||''\"\n [classLabel]=\"item.configButtonRight.classLabel || ''\"\n [classIconRight]=\"item.configButtonRight.classIconRight ||''\"\n [popover]=\"item.configButtonRight.popover || {}\"\n [label]=\"item.configButtonRight.label ||''\"\n (outClick)=\"handlerClickButton($event, 'configButtonRight')\" />\n }\n @if (tabs().actionRightConfig?.(); as right) {\n <libs_ui-components-popover [class]=\"right.classInclude || 'ml-[8px]'\"\n [class.libs-ui-tab-header-center-item-action]=\"right.onlyShowWhenHoverItemActive\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [mode]=\"'click-toggle'\"\n [ignoreStopPropagationEvent]=\"true\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [elementRefCustom]=\"right.onlyShowWhenHoverItemActive ? undefined : itemEl \"\n [config]=\"{\n zIndex: right.config?.()?.zIndex || 1000,\n maxHeight: right.config?.()?.maxHeight || 287,\n maxWidth: right.config?.()?.maxWidth || 2048,\n width: right.config?.()?.width || 220, \n direction: right.config?.()?.direction || 'bottom',\n template: right.config?.()?.template || actionEl,\n classInclude: (right.config?.()?.classInclude || '')+ ' !rounded-[4px] overflow-hidden',\n whiteTheme: true,\n ignoreArrow: true,\n position: right.config?.()?.position || { mode: 'start', distance: 0 }\n }\"\n (outEvent)=\"handlerPopoverEvent($event)\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n @if (right.customView) {\n <div [innerHtml]=\"item[fieldKey()] | LibsUiPipesCallFunctionInTemplatePipe:right.customView:item\"></div>\n } @else {\n <i [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.invalid]=\"item.invalid\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class]=\"right.onlyShowWhenHoverItemActive ? 'libs-ui-icon-more-vertical rotate-90 libs-ui-tab-header-center-item-icon' : 'libs-ui-icon-chevron-right rotate-90 libs-ui-tab-header-center-item-icon'\">\n </i>\n }\n </libs_ui-components-popover>\n <ng-template #actionEl>\n @if ((0 | LibsUiPipesCallFunctionInTemplatePipe:right.getListViewConfig:item: item[fieldKey()]: {valueIs0: 0} |async) ; as config) {\n <libs_ui-components-list [config]=\"config()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n }\n </ng-template>\n }\n @if (tabs().allowRemove && tabs().items().length > 1) {\n <libs_ui-components-buttons-button [type]=\"tabs().configButtonRemove?.type || 'button-link-custom'\"\n [iconOnlyType]=\"tabs().configButtonRemove?.iconOnlyType || true\"\n [classInclude]=\"tabs().configButtonRemove?.classInclude || 'ml-[8px] !p-0'\"\n [classIconLeft]=\"tabs().configButtonRemove?.classIconLeft || 'libs-ui-icon-close'\"\n [classLabel]=\"tabs().configButtonRemove?.classLabel || ''\"\n [classIconRight]=\"tabs().configButtonRemove?.classIconRight ||''\"\n [popover]=\"tabs().configButtonRemove?.popover || {config: {content: 'i18n_delete'}}\"\n [label]=\"tabs().configButtonRemove?.label ||''\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#6a7383',\n text_hover: '#f15767',\n text_active: '#f15767',\n text_disable: '#cdd0d6'\n },\n rootColor: '#f15767'\n }\"\n (outClick)=\"handlerClickButton($event, 'remove')\" />\n }\n </div>\n }\n", styles: [".libs-ui-tab-header-center-item{position:relative;display:flex;align-items:center;flex-wrap:nowrap;padding:12px 0;height:100%;width:fit-content}.libs-ui-tab-header-center-item[active=true]:after{content:\"\";width:100%;height:2px;background-color:var(--libs-ui-color-default, #226ff5);position:absolute;bottom:0;left:0}.libs-ui-tab-header-center-item[invalid=true]:after{background-color:#f15767}.libs-ui-tab-header-center-item-image{width:20px;height:20px;border-radius:50%;margin-right:8px}.libs-ui-tab-header-center-item-icon{display:flex}.libs-ui-tab-header-center-item-icon:before{font-size:12px}.libs-ui-tab-header-center-item-label{font-family:var(--libs-ui-font-family-name, \"Arial\");color:#6a7383;font-size:11px}.libs-ui-tab-header-center-item-label[size=langer]{font-size:13px}.libs-ui-tab-header-center-item-label[completed=true]{color:#6a7383}.libs-ui-tab-header-center-item-label[active=true]{color:var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item-action{display:none}.libs-ui-tab-header-center-item-step{border-radius:50%;border:1px solid #9ca2ad;color:#9ca2ad;min-width:24px;min-height:24px;display:flex;align-items:center;justify-content:center;margin-right:8px}.libs-ui-tab-header-center-item-step[completed=true]{color:#6a7383;border:1px solid #6A7383}.libs-ui-tab-header-center-item-step[active=true]{color:var(--libs-ui-color-default, #226ff5);border:1px solid var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-]:before{color:#6a7383}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][completed=true]:before{color:#6a7383}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][active=true]:before{color:var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][invalid=true]:before{color:#f15767}.libs-ui-tab-header-center-item-hover:hover[active=false][disable=false]:after{content:\"\";width:100%;height:2px;background-color:#6a7383;position:absolute;bottom:0;left:0}.libs-ui-tab-header-center-item-hover:hover .libs-ui-tab-header-center-item-action[active=true],.libs-ui-tab-header-center-item-action-show .libs-ui-tab-header-center-item-action{display:flex}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsBadgeComponent, selector: "libs_ui-components-badge", inputs: ["popoverConfig", "active", "count", "mode", "maxCount", "ignoreMarginDefault", "classCircle", "ignoreStopPropagationEvent"] }, { kind: "component", type: LibsUiComponentsListComponent, selector: "libs_ui-components-list", inputs: ["hiddenInputSearch", "dropdownTabKeyActive", "keySearch", "paddingLeftItem", "config", "autoSelectedFirstItemCallOutsideBefore", "isSearchOnline", "disable", "disableLabel", "labelConfig", "searchConfig", "searchPadding", "dividerClassInclude", "hasDivider", "buttonsOther", "hasButtonUnSelectOption", "clickExactly", "backgroundListCustom", "maxItemShow", "keySelected", "multiKeySelected", "keysDisableItem", "keysHiddenItem", "focusInputSearch", "skipFocusInputWhenKeySearchStoreUndefined", "functionGetItemsAutoAddList", "validRequired", "showValidateBottom", "zIndex", "loadingIconSize", "templateRefSearchNoData", "resetKeyWhenSelectAllKeyDropdown", "ignoreClassDisableDefaultWhenUseKeysDisableItem"], outputs: ["outSelectKey", "outSelectMultiKey", "outUnSelectMultiKey", "outClickButtonOther", "outFieldKey", "outChangeView", "outKeySearch", "outLoading", "outFunctionsControl", "outChangStageFlagMousePopover", "outLoadItemsComplete"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
107
108
|
}
|
|
108
109
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsTabsItemComponent, decorators: [{
|
|
109
110
|
type: Component,
|
|
@@ -114,6 +115,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
114
115
|
LibsUiComponentsBadgeComponent,
|
|
115
116
|
LibsUiComponentsListComponent,
|
|
116
117
|
LibsUiPipesCallFunctionInTemplatePipe
|
|
117
|
-
], template: " @if (item(); as item) {\n <div #itemEl\n class=\"libs-ui-tab-header-center-item {{ cssDefault() }} {{ item.classInclude || '' }} {{ item[fieldKey()] === keySelected() && tabs().classIncludeActiveItem ? tabs().classIncludeActiveItem : '' }}\"\n [attr.key]=\"item[fieldKey()]\"\n [attr.invalid]=\"item.invalid && !tabs().ignoreShowLineBottomInTab\"\n [attr.active]=\"item[fieldKey()] === keySelected() && !tabs().ignoreShowLineBottomInTab\"\n [attr.disable]=\"!!(item.disable || disable())\"\n [class.libs-ui-tab-header-center-item-hover]=\"!tabs().ignoreShowLineBottomInTab\"\n [class.libs-ui-tab-header-center-item-action-show]=\"actionShowing()\"\n [class.cursor-pointer]=\"!item.disable && !disable()\">\n @if (tabs().hasImage) {\n <img class=\"libs-ui-tab-header-center-item-image {{ item.classImageInclude || '' }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverImage\"\n [config]=\"item.popoverImage\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"item.disable || disable()\"\n [class.pointer-events-none]=\"item.disable || disable()\"\n [src]=\"item.linkImage\"\n [attr.key]=\"item[fieldKey()]\"\n (error)=\"handlerImgError($event)\" />\n }\n @if (item.iconLeft) {\n <i class=\"libs-ui-tab-header-center-item-icon libs-ui-mr-8px {{ item.iconLeft }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconLeft\"\n [config]=\"item.popoverIconLeft\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"item.disable || disable()\"\n [class.pointer-events-none]=\"item.disable || disable()\">\n </i>\n }\n @if (item.is_pin) {\n <i class=\"libs-ui-tab-header-center-item-icon mr-[8px] {{ item[fieldKey()] === keySelected() ? 'libs-ui-icon-pin-solid' : 'libs-ui-icon-pin-outline' }}\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"item.disable || disable()\"\n [class.pointer-events-none]=\"item.disable || disable()\">\n </i>\n }\n @if (tabs().hasStep) {\n @if (tabs().stepHasBackGround) {\n <div class=\"libs-ui-tab-header-center-item-step !border-none libs-ui-font-h6m\"\n [class.cursor-default]=\"item.disable || disable()\"\n [class.pointer-events-none]=\"item.disable || disable()\"\n [class.!text-[#ffffff]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [class.bg-[#f8f9fa]]=\"step() > (tabs().stepCompleted || 0) && (tabs().ignoreSelectedBackgroundStep || item.disable || disable()) && !item.invalid\"\n [class.bg-[#00bc62]]=\"step() <= (tabs().stepCompleted || -1) && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-light-2)]]=\"((item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep) || (step() > (tabs().stepCompleted || 0) && !tabs().ignoreSelectedBackgroundStep)) && !item.invalid\"\n [class.!bg-[#fdeaec]]=\"item.invalid\">\n @if ((step() <= (tabs().stepCompleted || -1))) {\n <i class=\"libs-ui-icon-check text-[#ffffff]\"></i>\n } @else {\n <span [class.text-[#cdd0d6]]=\"item.disable || disable()\">{{ step() }}</span>\n }\n </div>\n } @else {\n <div class=\"libs-ui-tab-header-center-item-step\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"item.disable || disable()\"\n [class.pointer-events-none]=\"item.disable || disable()\">\n <span>{{ step() }}</span>\n </div>\n }\n }\n @if (item.configButtonLeft) {\n <libs_ui-components-buttons-button [type]=\"item.configButtonLeft.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonLeft.classInclude || ''\"\n [classIconLeft]=\"item.configButtonLeft.classIconLeft ||''\"\n [classLabel]=\"item.configButtonLeft.classLabel || ''\"\n [classIconRight]=\"item.configButtonLeft.classIconRight ||''\"\n [label]=\"item.configButtonLeft.label ||''\"\n [popover]=\"item.configButtonLeft.popover || {}\"\n (outClick)=\"handlerClickButton($event, 'configButtonLeft')\" />\n }\n @if (item[fieldLabel()]) {\n <div class=\"relative flex\"\n [style.maxWidth.px]=\"tabs().maxWidthTextLabelItem || 160\">\n <span LibsUiComponentsPopoverDirective\n [type]=\"'text'\"\n [config]=\"{position: {mode: step() === 1 ? 'start' : 'center', distance: 0}, zIndex: zIndex()}\"\n [attr.size]=\"size()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [ignoreStopPropagationEvent]=\"true\"\n [classInclude]=\"'w-full libs-ui-tab-header-center-item-label '+ (item.classLabel || 'libs-ui-font-h6m') + \n (disableLabel() && (item.disable || disable()) ? ' libs-ui-disable' : '') \n + (tabs().stepHasBackGround && (item.disable || disable()) ? ' text-[#cdd0d6] cursor-default' : '')\"\n [innerHTML]=\"labelComputed()\"></span>\n @if (item.hasRedDot) {\n <div class=\"absolute right-[-6px] top-[-2px] w-[6px] h-[6px] bg-[#ee2d41] rounded-[6px]\">\n </div>\n }\n </div>\n }\n @if (item.popover) {\n <i class=\"libs-ui-tab-header-center-item-icon ml-[8px] libs-ui-icon-tooltip-outline\"\n LibsUiComponentsPopoverDirective\n [config]=\"item.popover\"\n [class.libs-ui-disable]=\"item.disable || disable()\"\n [class.pointer-events-none]=\"item.disable || disable()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\">\n </i>\n }\n @if (item.iconRight) {\n <i class=\"libs-ui-tab-header-center-item-icon {{ item.iconRight }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconRight\"\n [config]=\"item.popoverIconRight\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"item.disable || disable()\"\n [class.pointer-events-none]=\"item.disable || disable()\">\n </i>\n }\n @if (item.count !== undefined) {\n <libs_ui-components-badge [mode]=\"item.modeCount || 'x+'\"\n [count]=\"item.count\"\n [maxCount]=\"item.maxCount || 99\"\n [classCircle]=\"(item.classCircle || 'libs-ui-font-h5r') + (item.invalid ? ' !text-[#f15767] !bg-[#fdeaec]' : '')\"\n [active]=\"item[fieldKey()] === keySelected()\"\n [class.libs-ui-disable]=\"item.disable || disable()\"\n [class.pointer-events-none]=\"item.disable || disable()\" />\n }\n @if (item.configButtonRight) {\n <libs_ui-components-buttons-button [type]=\"item.configButtonRight.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonRight.classInclude || ''\"\n [classIconLeft]=\"item.configButtonRight.classIconLeft ||''\"\n [classLabel]=\"item.configButtonRight.classLabel || ''\"\n [classIconRight]=\"item.configButtonRight.classIconRight ||''\"\n [popover]=\"item.configButtonRight.popover || {}\"\n [label]=\"item.configButtonRight.label ||''\"\n (outClick)=\"handlerClickButton($event, 'configButtonRight')\" />\n }\n @if (tabs().actionRightConfig?.(); as right) {\n <libs_ui-components-popover [class]=\"right.classInclude || 'ml-[8px]'\"\n [class.libs-ui-tab-header-center-item-action]=\"right.onlyShowWhenHoverItemActive\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.pointer-events-none]=\"item.disable || disable() || item[fieldKey()] !== keySelected()\"\n [mode]=\"'click-toggle'\"\n [ignoreStopPropagationEvent]=\"true\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [elementRefCustom]=\"right.onlyShowWhenHoverItemActive || item[fieldKey()] !== keySelected() ? undefined : itemEl \"\n [config]=\"{\n zIndex: right.config?.()?.zIndex || 1000,\n maxHeight: right.config?.()?.maxHeight || 287,\n maxWidth: right.config?.()?.maxWidth || 2048,\n width: right.config?.()?.width || 220, \n direction: right.config?.()?.direction || 'bottom',\n template: right.config?.()?.template || actionEl,\n whiteTheme: true,\n ignoreArrow: true,\n position: right.config?.()?.position || { mode: 'start', distance: 0 }\n }\"\n (outEvent)=\"handlerPopoverEvent($event)\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n @if (right.customView) {\n <div [innerHtml]=\"item[fieldKey()] | LibsUiPipesCallFunctionInTemplatePipe:right.customView:item\"></div>\n } @else {\n <i [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.invalid]=\"item.invalid\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class]=\"right.onlyShowWhenHoverItemActive ? 'libs-ui-icon-more-vertical rotate-90 libs-ui-tab-header-center-item-icon' : 'libs-ui-icon-chevron-right rotate-90 libs-ui-tab-header-center-item-icon'\">\n </i>\n }\n </libs_ui-components-popover>\n <ng-template #actionEl>\n @if ((0 | LibsUiPipesCallFunctionInTemplatePipe:right.getListViewConfig:item: item[fieldKey()]: {valueIs0: 0} |async) ; as config) {\n <libs_ui-components-list [config]=\"config()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n }\n </ng-template>\n }\n @if (tabs().allowRemove && tabs().items().length > 1) {\n <libs_ui-components-buttons-button [type]=\"tabs().configButtonRemove?.type || 'button-link-custom'\"\n [iconOnlyType]=\"tabs().configButtonRemove?.iconOnlyType || true\"\n [classInclude]=\"tabs().configButtonRemove?.classInclude || 'ml-[8px] !p-0'\"\n [classIconLeft]=\"tabs().configButtonRemove?.classIconLeft || 'libs-ui-icon-close'\"\n [classLabel]=\"tabs().configButtonRemove?.classLabel || ''\"\n [classIconRight]=\"tabs().configButtonRemove?.classIconRight ||''\"\n [popover]=\"tabs().configButtonRemove?.popover || {config: {content: 'i18n_delete'}}\"\n [label]=\"tabs().configButtonRemove?.label ||''\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#6a7383',\n text_hover: '#f15767',\n text_active: '#f15767',\n text_disable: '#cdd0d6'\n },\n rootColor: '#f15767'\n }\"\n (outClick)=\"handlerClickButton($event, 'remove')\" />\n }\n </div>\n }\n", styles: [".libs-ui-tab-header-center-item{position:relative;display:flex;align-items:center;flex-wrap:nowrap;padding:12px 0;height:100%;width:fit-content}.libs-ui-tab-header-center-item[active=true]:after{content:\"\";width:100%;height:2px;background-color:var(--libs-ui-color-default, #226ff5);position:absolute;bottom:0;left:0}.libs-ui-tab-header-center-item[invalid=true]:after{background-color:#f15767}.libs-ui-tab-header-center-item-image{width:20px;height:20px;border-radius:50%;margin-right:8px}.libs-ui-tab-header-center-item-icon{display:flex}.libs-ui-tab-header-center-item-icon:before{font-size:12px}.libs-ui-tab-header-center-item-label{font-family:var(--libs-ui-font-family-name, \"Arial\");color:#6a7383;font-size:11px}.libs-ui-tab-header-center-item-label[size=langer]{font-size:13px}.libs-ui-tab-header-center-item-label[completed=true]{color:#6a7383}.libs-ui-tab-header-center-item-label[active=true]{color:var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item-action{display:none}.libs-ui-tab-header-center-item-step{border-radius:50%;border:1px solid #9ca2ad;color:#9ca2ad;min-width:24px;min-height:24px;display:flex;align-items:center;justify-content:center;margin-right:8px}.libs-ui-tab-header-center-item-step[completed=true]{color:#6a7383;border:1px solid #6A7383}.libs-ui-tab-header-center-item-step[active=true]{color:var(--libs-ui-color-default, #226ff5);border:1px solid var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-]:before{color:#6a7383}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][completed=true]:before{color:#6a7383}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][active=true]:before{color:var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][invalid=true]:before{color:#f15767}.libs-ui-tab-header-center-item-hover:hover[active=false][disable=false]:after{content:\"\";width:100%;height:2px;background-color:#6a7383;position:absolute;bottom:0;left:0}.libs-ui-tab-header-center-item-hover:hover .libs-ui-tab-header-center-item-action[active=true],.libs-ui-tab-header-center-item-action-show .libs-ui-tab-header-center-item-action{display:flex}\n"] }]
|
|
118
|
+
], template: " @if (item(); as item) {\n <div #itemEl\n class=\"libs-ui-tab-header-center-item {{ cssDefault() }} {{ item.classInclude || '' }} {{ item[fieldKey()] === keySelected() && tabs().classIncludeActiveItem ? tabs().classIncludeActiveItem : '' }}\"\n [attr.key]=\"item[fieldKey()]\"\n [attr.invalid]=\"item.invalid && !tabs().ignoreShowLineBottomInTab\"\n [attr.active]=\"item[fieldKey()] === keySelected() && !tabs().ignoreShowLineBottomInTab\"\n [attr.disable]=\"disable()\"\n [class.!cursor-pointer]=\"!disable()\"\n [class.!cursor-default]=\"disable()\"\n [class.libs-ui-tab-header-center-item-hover]=\"!tabs().ignoreShowLineBottomInTab\"\n [class.libs-ui-tab-header-center-item-action-show]=\"actionShowing()\">\n @if (tabs().hasImage) {\n <img class=\"libs-ui-tab-header-center-item-image {{ item.classImageInclude || '' }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverImage\"\n [config]=\"item.popoverImage\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"disable()\"\n [src]=\"item.linkImage\"\n [attr.key]=\"item[fieldKey()]\"\n (error)=\"handlerImgError($event)\" />\n }\n @if (item.iconLeft) {\n <i class=\"libs-ui-tab-header-center-item-icon libs-ui-mr-8px {{ item.iconLeft }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconLeft\"\n [config]=\"item.popoverIconLeft\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\">\n </i>\n }\n @if (item.is_pin) {\n <i class=\"libs-ui-tab-header-center-item-icon mr-[8px] {{ item[fieldKey()] === keySelected() ? 'libs-ui-icon-pin-solid' : 'libs-ui-icon-pin-outline' }}\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\">\n </i>\n }\n @if (tabs().hasStep) {\n @if (tabs().stepHasBackGround) {\n <div class=\"libs-ui-tab-header-center-item-step !border-none libs-ui-font-h6m\"\n [class.!text-[#ffffff]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [class.bg-[#f8f9fa]]=\"step() > (tabs().stepCompleted || 0) && (tabs().ignoreSelectedBackgroundStep || disable()) && !item.invalid\"\n [class.bg-[#00bc62]]=\"step() <= (tabs().stepCompleted || -1) && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-default)]]=\"item[fieldKey()] === keySelected() && !tabs().ignoreSelectedBackgroundStep && !item.invalid\"\n [class.bg-[var(--libs-ui-color-light-2)]]=\"((item[fieldKey()] === keySelected() && tabs().ignoreSelectedBackgroundStep) || (step() > (tabs().stepCompleted || 0) && !tabs().ignoreSelectedBackgroundStep)) && !item.invalid\"\n [class.!bg-[#fdeaec]]=\"item.invalid\">\n @if ((step() <= (tabs().stepCompleted || -1))) {\n <i class=\"libs-ui-icon-check text-[#ffffff]\"></i>\n } @else {\n <span [class.text-[#cdd0d6]]=\"disable()\">{{ step() }}</span>\n }\n </div>\n } @else {\n <div class=\"libs-ui-tab-header-center-item-step\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\">\n <span>{{ step() }}</span>\n </div>\n }\n }\n @if (item.configButtonLeft) {\n <libs_ui-components-buttons-button [type]=\"item.configButtonLeft.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonLeft.classInclude || ''\"\n [classIconLeft]=\"item.configButtonLeft.classIconLeft ||''\"\n [classLabel]=\"item.configButtonLeft.classLabel || ''\"\n [classIconRight]=\"item.configButtonLeft.classIconRight ||''\"\n [label]=\"item.configButtonLeft.label ||''\"\n [popover]=\"item.configButtonLeft.popover || {}\"\n (outClick)=\"handlerClickButton($event, 'configButtonLeft')\" />\n }\n @if (item[fieldLabel()]) {\n <div class=\"relative flex\"\n [style.maxWidth.px]=\"tabs().maxWidthTextLabelItem || 160\">\n <span LibsUiComponentsPopoverDirective\n [type]=\"'text'\"\n [config]=\"{position: {mode: step() === 1 ? 'start' : 'center', distance: 0}, zIndex: zIndex()}\"\n [attr.size]=\"size()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.!text-[#f15767]]=\"item.invalid\"\n [ignoreStopPropagationEvent]=\"true\"\n [classInclude]=\"'w-full libs-ui-tab-header-center-item-label '+ (item.classLabel || 'libs-ui-font-h6m') + \n (disableLabel() && (disable()) ? ' libs-ui-disable' : '') \n + (tabs().stepHasBackGround && (disable()) ? ' text-[#cdd0d6]' : '')\"\n [innerHTML]=\"labelComputed()\"></span>\n @if (item.hasRedDot) {\n <div class=\"absolute right-[-6px] top-[-2px] w-[6px] h-[6px] bg-[#ee2d41] rounded-[6px]\">\n </div>\n }\n </div>\n }\n @if (item.popover) {\n <i class=\"libs-ui-tab-header-center-item-icon ml-[8px] libs-ui-icon-tooltip-outline\"\n LibsUiComponentsPopoverDirective\n [config]=\"item.popover\"\n [ignoreStopPropagationEvent]=\"true\"\n [class.libs-ui-disable]=\"disable()\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\">\n </i>\n }\n @if (item.iconRight) {\n <i class=\"libs-ui-tab-header-center-item-icon {{ item.iconRight }}\"\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"!item.popoverIconRight\"\n [config]=\"item.popoverIconRight\"\n [ignoreStopPropagationEvent]=\"true\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class.libs-ui-disable]=\"disable()\">\n </i>\n }\n @if (item.count !== undefined) {\n <libs_ui-components-badge [mode]=\"item.modeCount || 'x+'\"\n [count]=\"item.count\"\n [maxCount]=\"item.maxCount || 99\"\n [classCircle]=\"(item.classCircle || 'libs-ui-font-h5r') + (item.invalid ? ' !text-[#f15767] !bg-[#fdeaec]' : '')\"\n [active]=\"item[fieldKey()] === keySelected()\"\n [class.libs-ui-disable]=\"disable()\" />\n }\n @if (item.configButtonRight) {\n <libs_ui-components-buttons-button [type]=\"item.configButtonRight.type || 'button-link-third'\"\n [classInclude]=\"item.configButtonRight.classInclude || ''\"\n [classIconLeft]=\"item.configButtonRight.classIconLeft ||''\"\n [classLabel]=\"item.configButtonRight.classLabel || ''\"\n [classIconRight]=\"item.configButtonRight.classIconRight ||''\"\n [popover]=\"item.configButtonRight.popover || {}\"\n [label]=\"item.configButtonRight.label ||''\"\n (outClick)=\"handlerClickButton($event, 'configButtonRight')\" />\n }\n @if (tabs().actionRightConfig?.(); as right) {\n <libs_ui-components-popover [class]=\"right.classInclude || 'ml-[8px]'\"\n [class.libs-ui-tab-header-center-item-action]=\"right.onlyShowWhenHoverItemActive\"\n [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [mode]=\"'click-toggle'\"\n [ignoreStopPropagationEvent]=\"true\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [elementRefCustom]=\"right.onlyShowWhenHoverItemActive ? undefined : itemEl \"\n [config]=\"{\n zIndex: right.config?.()?.zIndex || 1000,\n maxHeight: right.config?.()?.maxHeight || 287,\n maxWidth: right.config?.()?.maxWidth || 2048,\n width: right.config?.()?.width || 220, \n direction: right.config?.()?.direction || 'bottom',\n template: right.config?.()?.template || actionEl,\n classInclude: (right.config?.()?.classInclude || '')+ ' !rounded-[4px] overflow-hidden',\n whiteTheme: true,\n ignoreArrow: true,\n position: right.config?.()?.position || { mode: 'start', distance: 0 }\n }\"\n (outEvent)=\"handlerPopoverEvent($event)\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n @if (right.customView) {\n <div [innerHtml]=\"item[fieldKey()] | LibsUiPipesCallFunctionInTemplatePipe:right.customView:item\"></div>\n } @else {\n <i [attr.active]=\"item[fieldKey()] === keySelected()\"\n [attr.invalid]=\"item.invalid\"\n [attr.completed]=\"step() <= (tabs().stepCompleted || -1)\"\n [class]=\"right.onlyShowWhenHoverItemActive ? 'libs-ui-icon-more-vertical rotate-90 libs-ui-tab-header-center-item-icon' : 'libs-ui-icon-chevron-right rotate-90 libs-ui-tab-header-center-item-icon'\">\n </i>\n }\n </libs_ui-components-popover>\n <ng-template #actionEl>\n @if ((0 | LibsUiPipesCallFunctionInTemplatePipe:right.getListViewConfig:item: item[fieldKey()]: {valueIs0: 0} |async) ; as config) {\n <libs_ui-components-list [config]=\"config()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n }\n </ng-template>\n }\n @if (tabs().allowRemove && tabs().items().length > 1) {\n <libs_ui-components-buttons-button [type]=\"tabs().configButtonRemove?.type || 'button-link-custom'\"\n [iconOnlyType]=\"tabs().configButtonRemove?.iconOnlyType || true\"\n [classInclude]=\"tabs().configButtonRemove?.classInclude || 'ml-[8px] !p-0'\"\n [classIconLeft]=\"tabs().configButtonRemove?.classIconLeft || 'libs-ui-icon-close'\"\n [classLabel]=\"tabs().configButtonRemove?.classLabel || ''\"\n [classIconRight]=\"tabs().configButtonRemove?.classIconRight ||''\"\n [popover]=\"tabs().configButtonRemove?.popover || {config: {content: 'i18n_delete'}}\"\n [label]=\"tabs().configButtonRemove?.label ||''\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#6a7383',\n text_hover: '#f15767',\n text_active: '#f15767',\n text_disable: '#cdd0d6'\n },\n rootColor: '#f15767'\n }\"\n (outClick)=\"handlerClickButton($event, 'remove')\" />\n }\n </div>\n }\n", styles: [".libs-ui-tab-header-center-item{position:relative;display:flex;align-items:center;flex-wrap:nowrap;padding:12px 0;height:100%;width:fit-content}.libs-ui-tab-header-center-item[active=true]:after{content:\"\";width:100%;height:2px;background-color:var(--libs-ui-color-default, #226ff5);position:absolute;bottom:0;left:0}.libs-ui-tab-header-center-item[invalid=true]:after{background-color:#f15767}.libs-ui-tab-header-center-item-image{width:20px;height:20px;border-radius:50%;margin-right:8px}.libs-ui-tab-header-center-item-icon{display:flex}.libs-ui-tab-header-center-item-icon:before{font-size:12px}.libs-ui-tab-header-center-item-label{font-family:var(--libs-ui-font-family-name, \"Arial\");color:#6a7383;font-size:11px}.libs-ui-tab-header-center-item-label[size=langer]{font-size:13px}.libs-ui-tab-header-center-item-label[completed=true]{color:#6a7383}.libs-ui-tab-header-center-item-label[active=true]{color:var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item-action{display:none}.libs-ui-tab-header-center-item-step{border-radius:50%;border:1px solid #9ca2ad;color:#9ca2ad;min-width:24px;min-height:24px;display:flex;align-items:center;justify-content:center;margin-right:8px}.libs-ui-tab-header-center-item-step[completed=true]{color:#6a7383;border:1px solid #6A7383}.libs-ui-tab-header-center-item-step[active=true]{color:var(--libs-ui-color-default, #226ff5);border:1px solid var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-]:before{color:#6a7383}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][completed=true]:before{color:#6a7383}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][active=true]:before{color:var(--libs-ui-color-default, #226ff5)}.libs-ui-tab-header-center-item i[class*=libs-ui-icon-][invalid=true]:before{color:#f15767}.libs-ui-tab-header-center-item-hover:hover[active=false][disable=false]:after{content:\"\";width:100%;height:2px;background-color:#6a7383;position:absolute;bottom:0;left:0}.libs-ui-tab-header-center-item-hover:hover .libs-ui-tab-header-center-item-action[active=true],.libs-ui-tab-header-center-item-action-show .libs-ui-tab-header-center-item-action{display:flex}\n"] }]
|
|
118
119
|
}], ctorParameters: () => [] });
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvaXRlbS9pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy90YWJzL3NyYy9pdGVtL2l0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckssT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUYsT0FBTyxFQUFnQyxnQ0FBZ0MsRUFBc0IsTUFBTSw2QkFBNkIsQ0FBQztBQUVqSSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFBb0IsNkJBQTZCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRixPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBa0I1QyxNQUFNLE9BQU8saUNBQWlDO0lBRTVDLG1CQUFtQjtJQUNULGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFB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NEZBRzVCLGlDQUFpQztrQkFoQjdDLFNBQVM7K0JBRUUsOEJBQThCLGNBRzVCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxTQUFTO3dCQUNULHNDQUFzQzt3QkFDdEMsZ0NBQWdDO3dCQUNoQyw4QkFBOEI7d0JBQzlCLDZCQUE2Qjt3QkFDN0IscUNBQXFDO3FCQUN0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0JhZGdlQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1iYWRnZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIFRZUEVfUE9QT1ZFUl9FVkVOVCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBJRXZlbnQgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IGVzY2FwZUh0bWwsIHV1aWQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElUYWJzSXRlbSwgSVRhYnNJdGVtRXZlbnQsIElUYWJzLCBUWVBFX1RBQl9NT0RFIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90YWIuaW50ZXJmYWNlJztcbmltcG9ydCB7IElMaXN0RGF0YUVtaXRLZXksIExpYnNVaUNvbXBvbmVudHNMaXN0Q29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1saXN0JztcbmltcG9ydCB7IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlJztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy10YWJzLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2l0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBBc3luY1BpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0JhZGdlQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNMaXN0Q29tcG9uZW50LFxuICAgIExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzVGFic0l0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcm90ZWN0ZWQgbGFiZWxDb21wdXRlZCA9IGNvbXB1dGVkKCgpID0+IGVzY2FwZUh0bWwodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5pdGVtKClbdGhpcy5maWVsZExhYmVsKCldKSkpO1xuICBwcm90ZWN0ZWQgYWN0aW9uU2hvd2luZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSBtdXRhdGlvbk9ic2VydmVyID0gc2lnbmFsPE11dGF0aW9uT2JzZXJ2ZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlclN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBwb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQgPSBzaWduYWw8SVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGlnbm9yZUNhbGN1bGF0b3JUYWIgPSBpbnB1dC5yZXF1aXJlZDxib29sZWFuPigpO1xuICByZWFkb25seSBzdGVwID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICByZWFkb25seSBtb2RlID0gaW5wdXQucmVxdWlyZWQ8VFlQRV9UQUJfTU9ERT4oKTtcbiAgcmVhZG9ubHkgdGFicyA9IGlucHV0LnJlcXVpcmVkPElUYWJzPigpO1xuICByZWFkb25seSBpdGVtID0gbW9kZWwucmVxdWlyZWQ8SVRhYnNJdGVtPigpO1xuICByZWFkb25seSBrZXlTZWxlY3RlZCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZmllbGRMYWJlbCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZmllbGRLZXkgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGNzc0RlZmF1bHQgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHNpemUgPSBpbnB1dC5yZXF1aXJlZDwnbGFuZ2VyJyB8ICdtZWRpdW0nPigpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZUxhYmVsID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBjaGFuZ2VWaWV3VGFiID0gaW5wdXQucmVxdWlyZWQ8U3ViamVjdDx2b2lkPj4oKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRBY3Rpb24gPSBvdXRwdXQ8SVRhYnNJdGVtRXZlbnQ+KCk7XG5cbiAgLyogSU5KRUNUKi9cbiAgcHJpdmF0ZSBlbGVtZW50ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm1vZGUoKSAhPT0gJ2xlZnQnIHx8IHRoaXMuaWdub3JlQ2FsY3VsYXRvclRhYigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlU3BlY2lmaWNXaWR0aCgpO1xuICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlcigpPy5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyU3ViamVjdC5waXBlKGRlYm91bmNlVGltZSgxMCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZVNwZWNpZmljV2lkdGgoKSk7XG4gICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLnNldChuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJTdWJqZWN0Lm5leHQoKSkpO1xuICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlcigpPy5vYnNlcnZlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLml0ZW0oKS5rZXkpIHtcbiAgICAgIHRoaXMuaXRlbS51cGRhdGUoaXRlbSA9PiAoeyAuLi5pdGVtLCBrZXk6IHV1aWQoKSB9KSk7XG4gICAgfVxuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHByaXZhdGUgdXBkYXRlU3BlY2lmaWNXaWR0aCgpIHtcbiAgICBjb25zdCBwcmVTcGVjaWZpY1dpZHRoID0gdGhpcy5pdGVtKCkuc3BlY2lmaWNXaWR0aDtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgIGlmICh3aWR0aCAmJiBwcmVTcGVjaWZpY1dpZHRoICE9PSB3aWR0aCkge1xuICAgICAgdGhpcy5pdGVtLnVwZGF0ZShpdGVtID0+ICh7IC4uLml0ZW0sIHNwZWNpZmljV2lkdGg6IHdpZHRoIH0pKTtcbiAgICAgIHRoaXMuY2hhbmdlVmlld1RhYigpLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckltZ0Vycm9yKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIChldmVudCBhcyBJRXZlbnQpLnRhcmdldC5zcmMgPSB0aGlzLml0ZW0oKS5saW5rSW1hZ2VFcnJvclxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RlZEtleShldmVudDogSUxpc3REYXRhRW1pdEtleSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRBY3Rpb24uZW1pdCh7IGl0ZW06IHRoaXMuaXRlbSgpLCBrZXk6IGV2ZW50LmtleSBhcyBzdHJpbmcgfSk7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoKT8ucmVtb3ZlUG9wb3Zlck92ZXJsYXkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KGV2ZW50OiBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQuc2V0KGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUG9wb3ZlckV2ZW50KGV2ZW50OiBUWVBFX1BPUE9WRVJfRVZFTlQpIHtcbiAgICBpZiAoZXZlbnQgPT09ICdzaG93JyB8fCBldmVudCA9PT0gJ3JlbW92ZScpIHtcbiAgICAgIHRoaXMuYWN0aW9uU2hvd2luZy5zZXQoZXZlbnQgPT09ICdzaG93Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja0J1dHRvbihldmVudDogRXZlbnQsIHR5cGU6ICdjb25maWdCdXR0b25MZWZ0JyB8ICdjb25maWdCdXR0b25SaWdodCcgfCAncmVtb3ZlJykge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0eXBlID09PSAncmVtb3ZlJykge1xuICAgICAgdGhpcy5vdXRBY3Rpb24uZW1pdCh7IGtleTogJ3JlbW92ZScsIGl0ZW06IHRoaXMuaXRlbSgpIH0pXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuaXRlbSgpW3R5cGVdPy5hY3Rpb247XG4gICAgaWYgKGFjdGlvbikge1xuICAgICAgYWN0aW9uKHRoaXMuaXRlbSgpKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIoKT8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG5cbn1cbiIsIiAgQGlmIChpdGVtKCk7IGFzIGl0ZW0pIHtcbiAgICA8ZGl2ICNpdGVtRWxcbiAgICAgIGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtIHt7IGNzc0RlZmF1bHQoKSB9fSB7eyBpdGVtLmNsYXNzSW5jbHVkZSB8fCAnJyB9fSB7eyBpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpICYmIHRhYnMoKS5jbGFzc0luY2x1ZGVBY3RpdmVJdGVtID8gdGFicygpLmNsYXNzSW5jbHVkZUFjdGl2ZUl0ZW0gOiAnJyB9fVwiXG4gICAgICBbYXR0ci5rZXldPVwiaXRlbVtmaWVsZEtleSgpXVwiXG4gICAgICBbYXR0ci5pbnZhbGlkXT1cIml0ZW0uaW52YWxpZCAmJiAhdGFicygpLmlnbm9yZVNob3dMaW5lQm90dG9tSW5UYWJcIlxuICAgICAgW2F0dHIuYWN0aXZlXT1cIml0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKCkgJiYgIXRhYnMoKS5pZ25vcmVTaG93TGluZUJvdHRvbUluVGFiXCJcbiAgICAgIFthdHRyLmRpc2FibGVdPVwiISEoaXRlbS5kaXNhYmxlIHx8IGRpc2FibGUoKSlcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbS1ob3Zlcl09XCIhdGFicygpLmlnbm9yZVNob3dMaW5lQm90dG9tSW5UYWJcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbS1hY3Rpb24tc2hvd109XCJhY3Rpb25TaG93aW5nKClcIlxuICAgICAgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cIiFpdGVtLmRpc2FibGUgJiYgIWRpc2FibGUoKVwiPlxuICAgICAgQGlmICh0YWJzKCkuaGFzSW1hZ2UpIHtcbiAgICAgICAgPGltZyBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbS1pbWFnZSB7eyBpdGVtLmNsYXNzSW1hZ2VJbmNsdWRlIHx8ICcnIH19XCJcbiAgICAgICAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCIhaXRlbS5wb3BvdmVySW1hZ2VcIlxuICAgICAgICAgIFtjb25maWddPVwiaXRlbS5wb3BvdmVySW1hZ2VcIlxuICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cIml0ZW0uZGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cIml0ZW0uZGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgIFtzcmNdPVwiaXRlbS5saW5rSW1hZ2VcIlxuICAgICAgICAgIFthdHRyLmtleV09XCJpdGVtW2ZpZWxkS2V5KCldXCJcbiAgICAgICAgICAoZXJyb3IpPVwiaGFuZGxlckltZ0Vycm9yKCRldmVudClcIiAvPlxuICAgICAgfVxuICAgICAgQGlmIChpdGVtLmljb25MZWZ0KSB7XG4gICAgICAgIDxpIGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLWljb24gbGlicy11aS1tci04cHgge3sgaXRlbS5pY29uTGVmdCB9fVwiXG4gICAgICAgICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwiIWl0ZW0ucG9wb3Zlckljb25MZWZ0XCJcbiAgICAgICAgICBbY29uZmlnXT1cIml0ZW0ucG9wb3Zlckljb25MZWZ0XCJcbiAgICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgW2F0dHIuYWN0aXZlXT1cIml0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKClcIlxuICAgICAgICAgIFthdHRyLmNvbXBsZXRlZF09XCJzdGVwKCkgPD0gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IC0xKVwiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJpdGVtLmRpc2FibGUgfHwgZGlzYWJsZSgpXCJcbiAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJpdGVtLmRpc2FibGUgfHwgZGlzYWJsZSgpXCI+XG4gICAgICAgIDwvaT5cbiAgICAgIH1cbiAgICAgIEBpZiAoaXRlbS5pc19waW4pIHtcbiAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0taWNvbiBtci1bOHB4XSB7eyBpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpID8gJ2xpYnMtdWktaWNvbi1waW4tc29saWQnIDogJ2xpYnMtdWktaWNvbi1waW4tb3V0bGluZScgfX1cIlxuICAgICAgICAgIFthdHRyLmFjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgICBbYXR0ci5jb21wbGV0ZWRdPVwic3RlcCgpIDw9ICh0YWJzKCkuc3RlcENvbXBsZXRlZCB8fCAtMSlcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiaXRlbS5kaXNhYmxlIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgW2NsYXNzLnBvaW50ZXItZXZlbnRzLW5vbmVdPVwiaXRlbS5kaXNhYmxlIHx8IGRpc2FibGUoKVwiPlxuICAgICAgICA8L2k+XG4gICAgICB9XG4gICAgICBAaWYgKHRhYnMoKS5oYXNTdGVwKSB7XG4gICAgICAgIEBpZiAodGFicygpLnN0ZXBIYXNCYWNrR3JvdW5kKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbS1zdGVwICFib3JkZXItbm9uZSBsaWJzLXVpLWZvbnQtaDZtXCJcbiAgICAgICAgICAgIFtjbGFzcy5jdXJzb3ItZGVmYXVsdF09XCJpdGVtLmRpc2FibGUgfHwgZGlzYWJsZSgpXCJcbiAgICAgICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cIml0ZW0uZGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgICAgW2NsYXNzLiF0ZXh0LVsjZmZmZmZmXV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpICYmICF0YWJzKCkuaWdub3JlU2VsZWN0ZWRCYWNrZ3JvdW5kU3RlcCAmJiAhaXRlbS5pbnZhbGlkXCJcbiAgICAgICAgICAgIFtjbGFzcy4hdGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1kZWZhdWx0KV1dPVwiaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKSAmJiB0YWJzKCkuaWdub3JlU2VsZWN0ZWRCYWNrZ3JvdW5kU3RlcCAmJiAhaXRlbS5pbnZhbGlkXCJcbiAgICAgICAgICAgIFtjbGFzcy4hdGV4dC1bI2YxNTc2N11dPVwiaXRlbS5pbnZhbGlkXCJcbiAgICAgICAgICAgIFtjbGFzcy5iZy1bI2Y4ZjlmYV1dPVwic3RlcCgpID4gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IDApICYmICh0YWJzKCkuaWdub3JlU2VsZWN0ZWRCYWNrZ3JvdW5kU3RlcCB8fCBpdGVtLmRpc2FibGUgfHwgZGlzYWJsZSgpKSAmJiAhaXRlbS5pbnZhbGlkXCJcbiAgICAgICAgICAgIFtjbGFzcy5iZy1bIzAwYmM2Ml1dPVwic3RlcCgpIDw9ICh0YWJzKCkuc3RlcENvbXBsZXRlZCB8fCAtMSkgJiYgIXRhYnMoKS5pZ25vcmVTZWxlY3RlZEJhY2tncm91bmRTdGVwICYmICFpdGVtLmludmFsaWRcIlxuICAgICAgICAgICAgW2NsYXNzLmJnLVt2YXIoLS1saWJzLXVpLWNvbG9yLWRlZmF1bHQpXV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpICYmICF0YWJzKCkuaWdub3JlU2VsZWN0ZWRCYWNrZ3JvdW5kU3RlcCAmJiAhaXRlbS5pbnZhbGlkXCJcbiAgICAgICAgICAgIFtjbGFzcy5iZy1bdmFyKC0tbGlicy11aS1jb2xvci1saWdodC0yKV1dPVwiKChpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpICYmIHRhYnMoKS5pZ25vcmVTZWxlY3RlZEJhY2tncm91bmRTdGVwKSB8fCAoc3RlcCgpID4gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IDApICYmICF0YWJzKCkuaWdub3JlU2VsZWN0ZWRCYWNrZ3JvdW5kU3RlcCkpICYmICFpdGVtLmludmFsaWRcIlxuICAgICAgICAgICAgW2NsYXNzLiFiZy1bI2ZkZWFlY11dPVwiaXRlbS5pbnZhbGlkXCI+XG4gICAgICAgICAgICBAaWYgKChzdGVwKCkgPD0gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IC0xKSkpIHtcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hlY2sgdGV4dC1bI2ZmZmZmZl1cIj48L2k+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzLnRleHQtWyNjZGQwZDZdXT1cIml0ZW0uZGlzYWJsZSB8fCBkaXNhYmxlKClcIj57eyBzdGVwKCkgfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0tc3RlcFwiXG4gICAgICAgICAgICBbYXR0ci5hY3RpdmVdPVwiaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICBbYXR0ci5jb21wbGV0ZWRdPVwic3RlcCgpIDw9ICh0YWJzKCkuc3RlcENvbXBsZXRlZCB8fCAtMSlcIlxuICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJpdGVtLmRpc2FibGUgfHwgZGlzYWJsZSgpXCJcbiAgICAgICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cIml0ZW0uZGlzYWJsZSB8fCBkaXNhYmxlKClcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHN0ZXAoKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQGlmIChpdGVtLmNvbmZpZ0J1dHRvbkxlZnQpIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCJpdGVtLmNvbmZpZ0J1dHRvbkxlZnQudHlwZSB8fCAnYnV0dG9uLWxpbmstdGhpcmQnXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIml0ZW0uY29uZmlnQnV0dG9uTGVmdC5jbGFzc0luY2x1ZGUgfHwgJydcIlxuICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIml0ZW0uY29uZmlnQnV0dG9uTGVmdC5jbGFzc0ljb25MZWZ0IHx8JydcIlxuICAgICAgICAgIFtjbGFzc0xhYmVsXT1cIml0ZW0uY29uZmlnQnV0dG9uTGVmdC5jbGFzc0xhYmVsIHx8ICcnXCJcbiAgICAgICAgICBbY2xhc3NJY29uUmlnaHRdPVwiaXRlbS5jb25maWdCdXR0b25MZWZ0LmNsYXNzSWNvblJpZ2h0IHx8JydcIlxuICAgICAgICAgIFtsYWJlbF09XCJpdGVtLmNvbmZpZ0J1dHRvbkxlZnQubGFiZWwgfHwnJ1wiXG4gICAgICAgICAgW3BvcG92ZXJdPVwiaXRlbS5jb25maWdCdXR0b25MZWZ0LnBvcG92ZXIgfHwge31cIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQ2xpY2tCdXR0b24oJGV2ZW50LCAnY29uZmlnQnV0dG9uTGVmdCcpXCIgLz5cbiAgICAgIH1cbiAgICAgIEBpZiAoaXRlbVtmaWVsZExhYmVsKCldKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4XCJcbiAgICAgICAgICBbc3R5bGUubWF4V2lkdGgucHhdPVwidGFicygpLm1heFdpZHRoVGV4dExhYmVsSXRlbSB8fCAxNjBcIj5cbiAgICAgICAgICA8c3BhbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgIFtjb25maWddPVwie3Bvc2l0aW9uOiB7bW9kZTogc3RlcCgpID09PSAxID8gJ3N0YXJ0JyA6ICdjZW50ZXInLCBkaXN0YW5jZTogMH0sIHpJbmRleDogekluZGV4KCl9XCJcbiAgICAgICAgICAgIFthdHRyLnNpemVdPVwic2l6ZSgpXCJcbiAgICAgICAgICAgIFthdHRyLmFjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgIFthdHRyLmNvbXBsZXRlZF09XCJzdGVwKCkgPD0gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IC0xKVwiXG4gICAgICAgICAgICBbY2xhc3MuIXRleHQtWyNmMTU3NjddXT1cIml0ZW0uaW52YWxpZFwiXG4gICAgICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIid3LWZ1bGwgbGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLWxhYmVsICcrIChpdGVtLmNsYXNzTGFiZWwgfHwgJ2xpYnMtdWktZm9udC1oNm0nKSArIFxuICAgICAgICAgICAgICAoZGlzYWJsZUxhYmVsKCkgJiYgKGl0ZW0uZGlzYWJsZSB8fCBkaXNhYmxlKCkpID8gJyBsaWJzLXVpLWRpc2FibGUnIDogJycpIFxuICAgICAgICAgICAgICArICh0YWJzKCkuc3RlcEhhc0JhY2tHcm91bmQgJiYgKGl0ZW0uZGlzYWJsZSB8fCBkaXNhYmxlKCkpID8gJyB0ZXh0LVsjY2RkMGQ2XSBjdXJzb3ItZGVmYXVsdCcgOiAnJylcIlxuICAgICAgICAgICAgW2lubmVySFRNTF09XCJsYWJlbENvbXB1dGVkKClcIj48L3NwYW4+XG4gICAgICAgICAgQGlmIChpdGVtLmhhc1JlZERvdCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIHJpZ2h0LVstNnB4XSB0b3AtWy0ycHhdIHctWzZweF0gaC1bNnB4XSBiZy1bI2VlMmQ0MV0gcm91bmRlZC1bNnB4XVwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAoaXRlbS5wb3BvdmVyKSB7XG4gICAgICAgIDxpIGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLWljb24gbWwtWzhweF0gbGlicy11aS1pY29uLXRvb2x0aXAtb3V0bGluZVwiXG4gICAgICAgICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgICBbY29uZmlnXT1cIml0ZW0ucG9wb3ZlclwiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJpdGVtLmRpc2FibGUgfHwgZGlzYWJsZSgpXCJcbiAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJpdGVtLmRpc2FibGUgfHwgZGlzYWJsZSgpXCJcbiAgICAgICAgICBbYXR0ci5hY3RpdmVdPVwiaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgW2F0dHIuY29tcGxldGVkXT1cInN0ZXAoKSA8PSAodGFicygpLnN0ZXBDb21wbGV0ZWQgfHwgLTEpXCI+XG4gICAgICAgIDwvaT5cbiAgICAgIH1cbiAgICAgIEBpZiAoaXRlbS5pY29uUmlnaHQpIHtcbiAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0taWNvbiB7eyBpdGVtLmljb25SaWdodCB9fVwiXG4gICAgICAgICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwiIWl0ZW0ucG9wb3Zlckljb25SaWdodFwiXG4gICAgICAgICAgW2NvbmZpZ109XCJpdGVtLnBvcG92ZXJJY29uUmlnaHRcIlxuICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCJcbiAgICAgICAgICBbYXR0ci5hY3RpdmVdPVwiaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgW2F0dHIuY29tcGxldGVkXT1cInN0ZXAoKSA8PSAodGFicygpLnN0ZXBDb21wbGV0ZWQgfHwgLTEpXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cIml0ZW0uZGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cIml0ZW0uZGlzYWJsZSB8fCBkaXNhYmxlKClcIj5cbiAgICAgICAgPC9pPlxuICAgICAgfVxuICAgICAgQGlmIChpdGVtLmNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1iYWRnZSBbbW9kZV09XCJpdGVtLm1vZGVDb3VudCB8fCAneCsnXCJcbiAgICAgICAgICBbY291bnRdPVwiaXRlbS5jb3VudFwiXG4gICAgICAgICAgW21heENvdW50XT1cIml0ZW0ubWF4Q291bnQgfHwgOTlcIlxuICAgICAgICAgIFtjbGFzc0NpcmNsZV09XCIoaXRlbS5jbGFzc0NpcmNsZSB8fCAnbGlicy11aS1mb250LWg1cicpICsgKGl0ZW0uaW52YWxpZCA/ICcgIXRleHQtWyNmMTU3NjddICFiZy1bI2ZkZWFlY10nIDogJycpXCJcbiAgICAgICAgICBbYWN0aXZlXT1cIml0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKClcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiaXRlbS5kaXNhYmxlIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgW2NsYXNzLnBvaW50ZXItZXZlbnRzLW5vbmVdPVwiaXRlbS5kaXNhYmxlIHx8IGRpc2FibGUoKVwiIC8+XG4gICAgICB9XG4gICAgICBAaWYgKGl0ZW0uY29uZmlnQnV0dG9uUmlnaHQpIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCJpdGVtLmNvbmZpZ0J1dHRvblJpZ2h0LnR5cGUgfHwgJ2J1dHRvbi1saW5rLXRoaXJkJ1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJpdGVtLmNvbmZpZ0J1dHRvblJpZ2h0LmNsYXNzSW5jbHVkZSB8fCAnJ1wiXG4gICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiaXRlbS5jb25maWdCdXR0b25SaWdodC5jbGFzc0ljb25MZWZ0IHx8JydcIlxuICAgICAgICAgIFtjbGFzc0xhYmVsXT1cIml0ZW0uY29uZmlnQnV0dG9uUmlnaHQuY2xhc3NMYWJlbCB8fCAnJ1wiXG4gICAgICAgICAgW2NsYXNzSWNvblJpZ2h0XT1cIml0ZW0uY29uZmlnQnV0dG9uUmlnaHQuY2xhc3NJY29uUmlnaHQgfHwnJ1wiXG4gICAgICAgICAgW3BvcG92ZXJdPVwiaXRlbS5jb25maWdCdXR0b25SaWdodC5wb3BvdmVyIHx8IHt9XCJcbiAgICAgICAgICBbbGFiZWxdPVwiaXRlbS5jb25maWdCdXR0b25SaWdodC5sYWJlbCB8fCcnXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsaWNrQnV0dG9uKCRldmVudCwgJ2NvbmZpZ0J1dHRvblJpZ2h0JylcIiAvPlxuICAgICAgfVxuICAgICAgQGlmICh0YWJzKCkuYWN0aW9uUmlnaHRDb25maWc/LigpOyBhcyByaWdodCkge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2NsYXNzXT1cInJpZ2h0LmNsYXNzSW5jbHVkZSB8fCAnbWwtWzhweF0nXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLWFjdGlvbl09XCJyaWdodC5vbmx5U2hvd1doZW5Ib3Zlckl0ZW1BY3RpdmVcIlxuICAgICAgICAgIFthdHRyLmFjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgICBbYXR0ci5jb21wbGV0ZWRdPVwic3RlcCgpIDw9ICh0YWJzKCkuc3RlcENvbXBsZXRlZCB8fCAtMSlcIlxuICAgICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cIml0ZW0uZGlzYWJsZSB8fCBkaXNhYmxlKCkgfHwgaXRlbVtmaWVsZEtleSgpXSAhPT0ga2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgW21vZGVdPVwiJ2NsaWNrLXRvZ2dsZSdcIlxuICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCJcbiAgICAgICAgICBbaWdub3JlSGlkZGVuUG9wb3ZlckNvbnRlbnRXaGVuTW91c2VMZWF2ZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZWxlbWVudFJlZkN1c3RvbV09XCJyaWdodC5vbmx5U2hvd1doZW5Ib3Zlckl0ZW1BY3RpdmUgfHwgaXRlbVtmaWVsZEtleSgpXSAhPT0ga2V5U2VsZWN0ZWQoKSA/IHVuZGVmaW5lZCA6IGl0ZW1FbCBcIlxuICAgICAgICAgIFtjb25maWddPVwie1xuICAgICAgICAgICAgekluZGV4OiByaWdodC5jb25maWc/LigpPy56SW5kZXggfHwgMTAwMCxcbiAgICAgICAgICAgIG1heEhlaWdodDogcmlnaHQuY29uZmlnPy4oKT8ubWF4SGVpZ2h0IHx8IDI4NyxcbiAgICAgICAgICAgIG1heFdpZHRoOiByaWdodC5jb25maWc/LigpPy5tYXhXaWR0aCB8fCAyMDQ4LFxuICAgICAgICAgICAgd2lkdGg6IHJpZ2h0LmNvbmZpZz8uKCk/LndpZHRoIHx8IDIyMCwgXG4gICAgICAgICAgICBkaXJlY3Rpb246IHJpZ2h0LmNvbmZpZz8uKCk/LmRpcmVjdGlvbiB8fCAnYm90dG9tJyxcbiAgICAgICAgICAgIHRlbXBsYXRlOiByaWdodC5jb25maWc/LigpPy50ZW1wbGF0ZSB8fCBhY3Rpb25FbCxcbiAgICAgICAgICAgIHdoaXRlVGhlbWU6IHRydWUsXG4gICAgICAgICAgICBpZ25vcmVBcnJvdzogdHJ1ZSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiByaWdodC5jb25maWc/LigpPy5wb3NpdGlvbiB8fCB7IG1vZGU6ICdzdGFydCcsIGRpc3RhbmNlOiAwIH1cbiAgICAgICAgICB9XCJcbiAgICAgICAgICAob3V0RXZlbnQpPVwiaGFuZGxlclBvcG92ZXJFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KCRldmVudClcIj5cbiAgICAgICAgICBAaWYgKHJpZ2h0LmN1c3RvbVZpZXcpIHtcbiAgICAgICAgICAgIDxkaXYgW2lubmVySHRtbF09XCJpdGVtW2ZpZWxkS2V5KCldIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTpyaWdodC5jdXN0b21WaWV3Oml0ZW1cIj48L2Rpdj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxpIFthdHRyLmFjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgW2F0dHIuaW52YWxpZF09XCJpdGVtLmludmFsaWRcIlxuICAgICAgICAgICAgICBbYXR0ci5jb21wbGV0ZWRdPVwic3RlcCgpIDw9ICh0YWJzKCkuc3RlcENvbXBsZXRlZCB8fCAtMSlcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwicmlnaHQub25seVNob3dXaGVuSG92ZXJJdGVtQWN0aXZlID8gJ2xpYnMtdWktaWNvbi1tb3JlLXZlcnRpY2FsIHJvdGF0ZS05MCBsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0taWNvbicgOiAnbGlicy11aS1pY29uLWNoZXZyb24tcmlnaHQgcm90YXRlLTkwIGxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbS1pY29uJ1wiPlxuICAgICAgICAgICAgPC9pPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNhY3Rpb25FbD5cbiAgICAgICAgICBAaWYgKCgwIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTpyaWdodC5nZXRMaXN0Vmlld0NvbmZpZzppdGVtOiBpdGVtW2ZpZWxkS2V5KCldOiB7dmFsdWVJczA6IDB9IHxhc3luYykgOyBhcyBjb25maWcpIHtcbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGlzdCBbY29uZmlnXT1cImNvbmZpZygpXCJcbiAgICAgICAgICAgICAgW21heEl0ZW1TaG93XT1cIjVcIlxuICAgICAgICAgICAgICBbaGlkZGVuSW5wdXRTZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtwYWRkaW5nTGVmdEl0ZW1dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlclNlbGVjdGVkS2V5KCRldmVudClcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIH1cbiAgICAgIEBpZiAodGFicygpLmFsbG93UmVtb3ZlICYmIHRhYnMoKS5pdGVtcygpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCJ0YWJzKCkuY29uZmlnQnV0dG9uUmVtb3ZlPy50eXBlIHx8ICdidXR0b24tbGluay1jdXN0b20nXCJcbiAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRhYnMoKS5jb25maWdCdXR0b25SZW1vdmU/Lmljb25Pbmx5VHlwZSB8fCB0cnVlXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cInRhYnMoKS5jb25maWdCdXR0b25SZW1vdmU/LmNsYXNzSW5jbHVkZSB8fCAnbWwtWzhweF0gIXAtMCdcIlxuICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cInRhYnMoKS5jb25maWdCdXR0b25SZW1vdmU/LmNsYXNzSWNvbkxlZnQgfHwgJ2xpYnMtdWktaWNvbi1jbG9zZSdcIlxuICAgICAgICAgIFtjbGFzc0xhYmVsXT1cInRhYnMoKS5jb25maWdCdXR0b25SZW1vdmU/LmNsYXNzTGFiZWwgfHwgJydcIlxuICAgICAgICAgIFtjbGFzc0ljb25SaWdodF09XCJ0YWJzKCkuY29uZmlnQnV0dG9uUmVtb3ZlPy5jbGFzc0ljb25SaWdodCB8fCcnXCJcbiAgICAgICAgICBbcG9wb3Zlcl09XCJ0YWJzKCkuY29uZmlnQnV0dG9uUmVtb3ZlPy5wb3BvdmVyIHx8IHtjb25maWc6IHtjb250ZW50OiAnaTE4bl9kZWxldGUnfX1cIlxuICAgICAgICAgIFtsYWJlbF09XCJ0YWJzKCkuY29uZmlnQnV0dG9uUmVtb3ZlPy5sYWJlbCB8fCcnXCJcbiAgICAgICAgICBbYnV0dG9uQ3VzdG9tXT1cIntcbiAgICAgICAgICAgIGNvbmZpZ1N0ZXBDb2xvcjoge1xuICAgICAgICAgICAgICB0ZXh0OiAnIzZhNzM4MycsXG4gICAgICAgICAgICAgIHRleHRfaG92ZXI6ICcjZjE1NzY3JyxcbiAgICAgICAgICAgICAgdGV4dF9hY3RpdmU6ICcjZjE1NzY3JyxcbiAgICAgICAgICAgICAgdGV4dF9kaXNhYmxlOiAnI2NkZDBkNidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByb290Q29sb3I6ICcjZjE1NzY3J1xuICAgICAgICAgIH1cIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQ2xpY2tCdXR0b24oJGV2ZW50LCAncmVtb3ZlJylcIiAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG4iXX0=
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvaXRlbS9pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy90YWJzL3NyYy9pdGVtL2l0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckssT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUYsT0FBTyxFQUFnQyxnQ0FBZ0MsRUFBc0IsTUFBTSw2QkFBNkIsQ0FBQztBQUVqSSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFBb0IsNkJBQTZCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRixPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBa0I1QyxNQUFNLE9BQU8saUNBQWlDO0lBRTVDLG1CQUFtQjtJQUNULGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFB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N0IscUNBQXFDOzs0RkFHNUIsaUNBQWlDO2tCQWhCN0MsU0FBUzsrQkFFRSw4QkFBOEIsY0FHNUIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLFNBQVM7d0JBQ1Qsc0NBQXNDO3dCQUN0QyxnQ0FBZ0M7d0JBQ2hDLDhCQUE4Qjt3QkFDOUIsNkJBQTZCO3dCQUM3QixxQ0FBcUM7cUJBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQmFkZ2VDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJhZGdlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgVFlQRV9QT1BPVkVSX0VWRU5UIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IElFdmVudCB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgZXNjYXBlSHRtbCwgdXVpZCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSVRhYnNJdGVtLCBJVGFic0l0ZW1FdmVudCwgSVRhYnMsIFRZUEVfVEFCX01PREUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3RhYi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUxpc3REYXRhRW1pdEtleSwgTGlic1VpQ29tcG9uZW50c0xpc3RDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxpc3QnO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZSB9IGZyb20gJ0BsaWJzLXVpL3BpcGVzLWNhbGwtZnVuY3Rpb24taW4tdGVtcGxhdGUnO1xuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLXRhYnMtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaXRlbS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQmFkZ2VDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RDb21wb25lbnQsXG4gICAgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNUYWJzSXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByb3RlY3RlZCBsYWJlbENvbXB1dGVkID0gY29tcHV0ZWQoKCkgPT4gZXNjYXBlSHRtbCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLml0ZW0oKVt0aGlzLmZpZWxkTGFiZWwoKV0pKSk7XG4gIHByb3RlY3RlZCBhY3Rpb25TaG93aW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcml2YXRlIG11dGF0aW9uT2JzZXJ2ZXIgPSBzaWduYWw8TXV0YXRpb25PYnNlcnZlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBtdXRhdGlvbk9ic2VydmVyU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIHBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCA9IHNpZ25hbDxJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgaWdub3JlQ2FsY3VsYXRvclRhYiA9IGlucHV0LnJlcXVpcmVkPGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHN0ZXAgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IG1vZGUgPSBpbnB1dC5yZXF1aXJlZDxUWVBFX1RBQl9NT0RFPigpO1xuICByZWFkb25seSB0YWJzID0gaW5wdXQucmVxdWlyZWQ8SVRhYnM+KCk7XG4gIHJlYWRvbmx5IGl0ZW0gPSBtb2RlbC5yZXF1aXJlZDxJVGFic0l0ZW0+KCk7XG4gIHJlYWRvbmx5IGtleVNlbGVjdGVkID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBmaWVsZExhYmVsID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBmaWVsZEtleSA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgY3NzRGVmYXVsdCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgc2l6ZSA9IGlucHV0LnJlcXVpcmVkPCdsYW5nZXInIHwgJ21lZGl1bSc+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXNhYmxlTGFiZWwgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGNoYW5nZVZpZXdUYWIgPSBpbnB1dC5yZXF1aXJlZDxTdWJqZWN0PHZvaWQ+PigpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dEFjdGlvbiA9IG91dHB1dDxJVGFic0l0ZW1FdmVudD4oKTtcblxuICAvKiBJTkpFQ1QqL1xuICBwcml2YXRlIGVsZW1lbnQgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubW9kZSgpICE9PSAnbGVmdCcgfHwgdGhpcy5pZ25vcmVDYWxjdWxhdG9yVGFiKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTcGVjaWZpY1dpZHRoKCk7XG4gICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyKCk/LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJTdWJqZWN0LnBpcGUoZGVib3VuY2VUaW1lKDEwKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlU3BlY2lmaWNXaWR0aCgpKTtcbiAgICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIuc2V0KG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHRoaXMubXV0YXRpb25PYnNlcnZlclN1YmplY3QubmV4dCgpKSk7XG4gICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyKCk/Lm9ic2VydmUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHsgYXR0cmlidXRlczogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuaXRlbSgpLmtleSkge1xuICAgICAgdGhpcy5pdGVtLnVwZGF0ZShpdGVtID0+ICh7IC4uLml0ZW0sIGtleTogdXVpZCgpIH0pKTtcbiAgICB9XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJpdmF0ZSB1cGRhdGVTcGVjaWZpY1dpZHRoKCkge1xuICAgIGNvbnN0IHByZVNwZWNpZmljV2lkdGggPSB0aGlzLml0ZW0oKS5zcGVjaWZpY1dpZHRoO1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgaWYgKHdpZHRoICYmIHByZVNwZWNpZmljV2lkdGggIT09IHdpZHRoKSB7XG4gICAgICB0aGlzLml0ZW0udXBkYXRlKGl0ZW0gPT4gKHsgLi4uaXRlbSwgc3BlY2lmaWNXaWR0aDogd2lkdGggfSkpO1xuICAgICAgdGhpcy5jaGFuZ2VWaWV3VGFiKCkubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVySW1nRXJyb3IoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgKGV2ZW50IGFzIElFdmVudCkudGFyZ2V0LnNyYyA9IHRoaXMuaXRlbSgpLmxpbmtJbWFnZUVycm9yXG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNlbGVjdGVkS2V5KGV2ZW50OiBJTGlzdERhdGFFbWl0S2V5IHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm91dEFjdGlvbi5lbWl0KHsgaXRlbTogdGhpcy5pdGVtKCksIGtleTogZXZlbnQua2V5IGFzIHN0cmluZyB9KTtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoZXZlbnQ6IElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudC5zZXQoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJQb3BvdmVyRXZlbnQoZXZlbnQ6IFRZUEVfUE9QT1ZFUl9FVkVOVCkge1xuICAgIGlmIChldmVudCAhPT0gJ3Nob3cnICYmIGV2ZW50ICE9PSAncmVtb3ZlJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFjdGlvblNob3dpbmcuc2V0KGV2ZW50ID09PSAnc2hvdycpO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQnV0dG9uKGV2ZW50OiBFdmVudCwgdHlwZTogJ2NvbmZpZ0J1dHRvbkxlZnQnIHwgJ2NvbmZpZ0J1dHRvblJpZ2h0JyB8ICdyZW1vdmUnKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHR5cGUgPT09ICdyZW1vdmUnKSB7XG4gICAgICB0aGlzLm91dEFjdGlvbi5lbWl0KHsga2V5OiAncmVtb3ZlJywgaXRlbTogdGhpcy5pdGVtKCkgfSlcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5pdGVtKClbdHlwZV0/LmFjdGlvbjtcbiAgICBpZiAoYWN0aW9uKSB7XG4gICAgICBhY3Rpb24odGhpcy5pdGVtKCkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlcigpPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cblxufVxuIiwiICBAaWYgKGl0ZW0oKTsgYXMgaXRlbSkge1xuICAgIDxkaXYgI2l0ZW1FbFxuICAgICAgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0ge3sgY3NzRGVmYXVsdCgpIH19IHt7IGl0ZW0uY2xhc3NJbmNsdWRlIHx8ICcnIH19IHt7IGl0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKCkgJiYgdGFicygpLmNsYXNzSW5jbHVkZUFjdGl2ZUl0ZW0gPyB0YWJzKCkuY2xhc3NJbmNsdWRlQWN0aXZlSXRlbSA6ICcnIH19XCJcbiAgICAgIFthdHRyLmtleV09XCJpdGVtW2ZpZWxkS2V5KCldXCJcbiAgICAgIFthdHRyLmludmFsaWRdPVwiaXRlbS5pbnZhbGlkICYmICF0YWJzKCkuaWdub3JlU2hvd0xpbmVCb3R0b21JblRhYlwiXG4gICAgICBbYXR0ci5hY3RpdmVdPVwiaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKSAmJiAhdGFicygpLmlnbm9yZVNob3dMaW5lQm90dG9tSW5UYWJcIlxuICAgICAgW2F0dHIuZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgW2NsYXNzLiFjdXJzb3ItcG9pbnRlcl09XCIhZGlzYWJsZSgpXCJcbiAgICAgIFtjbGFzcy4hY3Vyc29yLWRlZmF1bHRdPVwiZGlzYWJsZSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0taG92ZXJdPVwiIXRhYnMoKS5pZ25vcmVTaG93TGluZUJvdHRvbUluVGFiXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0tYWN0aW9uLXNob3ddPVwiYWN0aW9uU2hvd2luZygpXCI+XG4gICAgICBAaWYgKHRhYnMoKS5oYXNJbWFnZSkge1xuICAgICAgICA8aW1nIGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLWltYWdlIHt7IGl0ZW0uY2xhc3NJbWFnZUluY2x1ZGUgfHwgJycgfX1cIlxuICAgICAgICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgICAgW2lnbm9yZVNob3dQb3BvdmVyXT1cIiFpdGVtLnBvcG92ZXJJbWFnZVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJpdGVtLnBvcG92ZXJJbWFnZVwiXG4gICAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cInRydWVcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgICBbc3JjXT1cIml0ZW0ubGlua0ltYWdlXCJcbiAgICAgICAgICBbYXR0ci5rZXldPVwiaXRlbVtmaWVsZEtleSgpXVwiXG4gICAgICAgICAgKGVycm9yKT1cImhhbmRsZXJJbWdFcnJvcigkZXZlbnQpXCIgLz5cbiAgICAgIH1cbiAgICAgIEBpZiAoaXRlbS5pY29uTGVmdCkge1xuICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbS1pY29uIGxpYnMtdWktbXItOHB4IHt7IGl0ZW0uaWNvbkxlZnQgfX1cIlxuICAgICAgICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgICAgW2lnbm9yZVNob3dQb3BvdmVyXT1cIiFpdGVtLnBvcG92ZXJJY29uTGVmdFwiXG4gICAgICAgICAgW2NvbmZpZ109XCJpdGVtLnBvcG92ZXJJY29uTGVmdFwiXG4gICAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cInRydWVcIlxuICAgICAgICAgIFthdHRyLmFjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgICBbYXR0ci5jb21wbGV0ZWRdPVwic3RlcCgpIDw9ICh0YWJzKCkuc3RlcENvbXBsZXRlZCB8fCAtMSlcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpXCI+XG4gICAgICAgIDwvaT5cbiAgICAgIH1cbiAgICAgIEBpZiAoaXRlbS5pc19waW4pIHtcbiAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0taWNvbiBtci1bOHB4XSB7eyBpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpID8gJ2xpYnMtdWktaWNvbi1waW4tc29saWQnIDogJ2xpYnMtdWktaWNvbi1waW4tb3V0bGluZScgfX1cIlxuICAgICAgICAgIFthdHRyLmFjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgICBbYXR0ci5jb21wbGV0ZWRdPVwic3RlcCgpIDw9ICh0YWJzKCkuc3RlcENvbXBsZXRlZCB8fCAtMSlcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpXCI+XG4gICAgICAgIDwvaT5cbiAgICAgIH1cbiAgICAgIEBpZiAodGFicygpLmhhc1N0ZXApIHtcbiAgICAgICAgQGlmICh0YWJzKCkuc3RlcEhhc0JhY2tHcm91bmQpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLXN0ZXAgIWJvcmRlci1ub25lIGxpYnMtdWktZm9udC1oNm1cIlxuICAgICAgICAgICAgW2NsYXNzLiF0ZXh0LVsjZmZmZmZmXV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpICYmICF0YWJzKCkuaWdub3JlU2VsZWN0ZWRCYWNrZ3JvdW5kU3RlcCAmJiAhaXRlbS5pbnZhbGlkXCJcbiAgICAgICAgICAgIFtjbGFzcy4hdGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1kZWZhdWx0KV1dPVwiaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKSAmJiB0YWJzKCkuaWdub3JlU2VsZWN0ZWRCYWNrZ3JvdW5kU3RlcCAmJiAhaXRlbS5pbnZhbGlkXCJcbiAgICAgICAgICAgIFtjbGFzcy4hdGV4dC1bI2YxNTc2N11dPVwiaXRlbS5pbnZhbGlkXCJcbiAgICAgICAgICAgIFtjbGFzcy5iZy1bI2Y4ZjlmYV1dPVwic3RlcCgpID4gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IDApICYmICh0YWJzKCkuaWdub3JlU2VsZWN0ZWRCYWNrZ3JvdW5kU3RlcCB8fCBkaXNhYmxlKCkpICYmICFpdGVtLmludmFsaWRcIlxuICAgICAgICAgICAgW2NsYXNzLmJnLVsjMDBiYzYyXV09XCJzdGVwKCkgPD0gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IC0xKSAmJiAhdGFicygpLmlnbm9yZVNlbGVjdGVkQmFja2dyb3VuZFN0ZXAgJiYgIWl0ZW0uaW52YWxpZFwiXG4gICAgICAgICAgICBbY2xhc3MuYmctW3ZhcigtLWxpYnMtdWktY29sb3ItZGVmYXVsdCldXT1cIml0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKCkgJiYgIXRhYnMoKS5pZ25vcmVTZWxlY3RlZEJhY2tncm91bmRTdGVwICYmICFpdGVtLmludmFsaWRcIlxuICAgICAgICAgICAgW2NsYXNzLmJnLVt2YXIoLS1saWJzLXVpLWNvbG9yLWxpZ2h0LTIpXV09XCIoKGl0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKCkgJiYgdGFicygpLmlnbm9yZVNlbGVjdGVkQmFja2dyb3VuZFN0ZXApIHx8IChzdGVwKCkgPiAodGFicygpLnN0ZXBDb21wbGV0ZWQgfHwgMCkgJiYgIXRhYnMoKS5pZ25vcmVTZWxlY3RlZEJhY2tncm91bmRTdGVwKSkgJiYgIWl0ZW0uaW52YWxpZFwiXG4gICAgICAgICAgICBbY2xhc3MuIWJnLVsjZmRlYWVjXV09XCJpdGVtLmludmFsaWRcIj5cbiAgICAgICAgICAgIEBpZiAoKHN0ZXAoKSA8PSAodGFicygpLnN0ZXBDb21wbGV0ZWQgfHwgLTEpKSkge1xuICAgICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1jaGVjayB0ZXh0LVsjZmZmZmZmXVwiPjwvaT5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8c3BhbiBbY2xhc3MudGV4dC1bI2NkZDBkNl1dPVwiZGlzYWJsZSgpXCI+e3sgc3RlcCgpIH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLXN0ZXBcIlxuICAgICAgICAgICAgW2F0dHIuYWN0aXZlXT1cIml0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKClcIlxuICAgICAgICAgICAgW2F0dHIuY29tcGxldGVkXT1cInN0ZXAoKSA8PSAodGFicygpLnN0ZXBDb21wbGV0ZWQgfHwgLTEpXCJcbiAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyBzdGVwKCkgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBpZiAoaXRlbS5jb25maWdCdXR0b25MZWZ0KSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiaXRlbS5jb25maWdCdXR0b25MZWZ0LnR5cGUgfHwgJ2J1dHRvbi1saW5rLXRoaXJkJ1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJpdGVtLmNvbmZpZ0J1dHRvbkxlZnQuY2xhc3NJbmNsdWRlIHx8ICcnXCJcbiAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCJpdGVtLmNvbmZpZ0J1dHRvbkxlZnQuY2xhc3NJY29uTGVmdCB8fCcnXCJcbiAgICAgICAgICBbY2xhc3NMYWJlbF09XCJpdGVtLmNvbmZpZ0J1dHRvbkxlZnQuY2xhc3NMYWJlbCB8fCAnJ1wiXG4gICAgICAgICAgW2NsYXNzSWNvblJpZ2h0XT1cIml0ZW0uY29uZmlnQnV0dG9uTGVmdC5jbGFzc0ljb25SaWdodCB8fCcnXCJcbiAgICAgICAgICBbbGFiZWxdPVwiaXRlbS5jb25maWdCdXR0b25MZWZ0LmxhYmVsIHx8JydcIlxuICAgICAgICAgIFtwb3BvdmVyXT1cIml0ZW0uY29uZmlnQnV0dG9uTGVmdC5wb3BvdmVyIHx8IHt9XCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsaWNrQnV0dG9uKCRldmVudCwgJ2NvbmZpZ0J1dHRvbkxlZnQnKVwiIC8+XG4gICAgICB9XG4gICAgICBAaWYgKGl0ZW1bZmllbGRMYWJlbCgpXSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgZmxleFwiXG4gICAgICAgICAgW3N0eWxlLm1heFdpZHRoLnB4XT1cInRhYnMoKS5tYXhXaWR0aFRleHRMYWJlbEl0ZW0gfHwgMTYwXCI+XG4gICAgICAgICAgPHNwYW4gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgICAgIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICBbY29uZmlnXT1cIntwb3NpdGlvbjoge21vZGU6IHN0ZXAoKSA9PT0gMSA/ICdzdGFydCcgOiAnY2VudGVyJywgZGlzdGFuY2U6IDB9LCB6SW5kZXg6IHpJbmRleCgpfVwiXG4gICAgICAgICAgICBbYXR0ci5zaXplXT1cInNpemUoKVwiXG4gICAgICAgICAgICBbYXR0ci5hY3RpdmVdPVwiaXRlbVtmaWVsZEtleSgpXSA9PT0ga2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICBbYXR0ci5jb21wbGV0ZWRdPVwic3RlcCgpIDw9ICh0YWJzKCkuc3RlcENvbXBsZXRlZCB8fCAtMSlcIlxuICAgICAgICAgICAgW2NsYXNzLiF0ZXh0LVsjZjE1NzY3XV09XCJpdGVtLmludmFsaWRcIlxuICAgICAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIndy1mdWxsIGxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbS1sYWJlbCAnKyAoaXRlbS5jbGFzc0xhYmVsIHx8ICdsaWJzLXVpLWZvbnQtaDZtJykgKyBcbiAgICAgICAgICAgICAgKGRpc2FibGVMYWJlbCgpICYmIChkaXNhYmxlKCkpID8gJyBsaWJzLXVpLWRpc2FibGUnIDogJycpIFxuICAgICAgICAgICAgICArICh0YWJzKCkuc3RlcEhhc0JhY2tHcm91bmQgJiYgKGRpc2FibGUoKSkgPyAnIHRleHQtWyNjZGQwZDZdJyA6ICcnKVwiXG4gICAgICAgICAgICBbaW5uZXJIVE1MXT1cImxhYmVsQ29tcHV0ZWQoKVwiPjwvc3Bhbj5cbiAgICAgICAgICBAaWYgKGl0ZW0uaGFzUmVkRG90KSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgcmlnaHQtWy02cHhdIHRvcC1bLTJweF0gdy1bNnB4XSBoLVs2cHhdIGJnLVsjZWUyZDQxXSByb3VuZGVkLVs2cHhdXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChpdGVtLnBvcG92ZXIpIHtcbiAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyLWl0ZW0taWNvbiBtbC1bOHB4XSBsaWJzLXVpLWljb24tdG9vbHRpcC1vdXRsaW5lXCJcbiAgICAgICAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICAgIFtjb25maWddPVwiaXRlbS5wb3BvdmVyXCJcbiAgICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgICAgIFthdHRyLmFjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgICBbYXR0ci5jb21wbGV0ZWRdPVwic3RlcCgpIDw9ICh0YWJzKCkuc3RlcENvbXBsZXRlZCB8fCAtMSlcIj5cbiAgICAgICAgPC9pPlxuICAgICAgfVxuICAgICAgQGlmIChpdGVtLmljb25SaWdodCkge1xuICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbS1pY29uIHt7IGl0ZW0uaWNvblJpZ2h0IH19XCJcbiAgICAgICAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCIhaXRlbS5wb3BvdmVySWNvblJpZ2h0XCJcbiAgICAgICAgICBbY29uZmlnXT1cIml0ZW0ucG9wb3Zlckljb25SaWdodFwiXG4gICAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cInRydWVcIlxuICAgICAgICAgIFthdHRyLmFjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgICBbYXR0ci5jb21wbGV0ZWRdPVwic3RlcCgpIDw9ICh0YWJzKCkuc3RlcENvbXBsZXRlZCB8fCAtMSlcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpXCI+XG4gICAgICAgIDwvaT5cbiAgICAgIH1cbiAgICAgIEBpZiAoaXRlbS5jb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYmFkZ2UgW21vZGVdPVwiaXRlbS5tb2RlQ291bnQgfHwgJ3grJ1wiXG4gICAgICAgICAgW2NvdW50XT1cIml0ZW0uY291bnRcIlxuICAgICAgICAgIFttYXhDb3VudF09XCJpdGVtLm1heENvdW50IHx8IDk5XCJcbiAgICAgICAgICBbY2xhc3NDaXJjbGVdPVwiKGl0ZW0uY2xhc3NDaXJjbGUgfHwgJ2xpYnMtdWktZm9udC1oNXInKSArIChpdGVtLmludmFsaWQgPyAnICF0ZXh0LVsjZjE1NzY3XSAhYmctWyNmZGVhZWNdJyA6ICcnKVwiXG4gICAgICAgICAgW2FjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKVwiIC8+XG4gICAgICB9XG4gICAgICBAaWYgKGl0ZW0uY29uZmlnQnV0dG9uUmlnaHQpIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCJpdGVtLmNvbmZpZ0J1dHRvblJpZ2h0LnR5cGUgfHwgJ2J1dHRvbi1saW5rLXRoaXJkJ1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJpdGVtLmNvbmZpZ0J1dHRvblJpZ2h0LmNsYXNzSW5jbHVkZSB8fCAnJ1wiXG4gICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiaXRlbS5jb25maWdCdXR0b25SaWdodC5jbGFzc0ljb25MZWZ0IHx8JydcIlxuICAgICAgICAgIFtjbGFzc0xhYmVsXT1cIml0ZW0uY29uZmlnQnV0dG9uUmlnaHQuY2xhc3NMYWJlbCB8fCAnJ1wiXG4gICAgICAgICAgW2NsYXNzSWNvblJpZ2h0XT1cIml0ZW0uY29uZmlnQnV0dG9uUmlnaHQuY2xhc3NJY29uUmlnaHQgfHwnJ1wiXG4gICAgICAgICAgW3BvcG92ZXJdPVwiaXRlbS5jb25maWdCdXR0b25SaWdodC5wb3BvdmVyIHx8IHt9XCJcbiAgICAgICAgICBbbGFiZWxdPVwiaXRlbS5jb25maWdCdXR0b25SaWdodC5sYWJlbCB8fCcnXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsaWNrQnV0dG9uKCRldmVudCwgJ2NvbmZpZ0J1dHRvblJpZ2h0JylcIiAvPlxuICAgICAgfVxuICAgICAgQGlmICh0YWJzKCkuYWN0aW9uUmlnaHRDb25maWc/LigpOyBhcyByaWdodCkge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2NsYXNzXT1cInJpZ2h0LmNsYXNzSW5jbHVkZSB8fCAnbWwtWzhweF0nXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLWFjdGlvbl09XCJyaWdodC5vbmx5U2hvd1doZW5Ib3Zlckl0ZW1BY3RpdmVcIlxuICAgICAgICAgIFthdHRyLmFjdGl2ZV09XCJpdGVtW2ZpZWxkS2V5KCldID09PSBrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgICBbYXR0ci5jb21wbGV0ZWRdPVwic3RlcCgpIDw9ICh0YWJzKCkuc3RlcENvbXBsZXRlZCB8fCAtMSlcIlxuICAgICAgICAgIFttb2RlXT1cIidjbGljay10b2dnbGUnXCJcbiAgICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgW2lnbm9yZUhpZGRlblBvcG92ZXJDb250ZW50V2hlbk1vdXNlTGVhdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2VsZW1lbnRSZWZDdXN0b21dPVwicmlnaHQub25seVNob3dXaGVuSG92ZXJJdGVtQWN0aXZlID8gdW5kZWZpbmVkIDogaXRlbUVsIFwiXG4gICAgICAgICAgW2NvbmZpZ109XCJ7XG4gICAgICAgICAgICB6SW5kZXg6IHJpZ2h0LmNvbmZpZz8uKCk/LnpJbmRleCB8fCAxMDAwLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiByaWdodC5jb25maWc/LigpPy5tYXhIZWlnaHQgfHwgMjg3LFxuICAgICAgICAgICAgbWF4V2lkdGg6IHJpZ2h0LmNvbmZpZz8uKCk/Lm1heFdpZHRoIHx8IDIwNDgsXG4gICAgICAgICAgICB3aWR0aDogcmlnaHQuY29uZmlnPy4oKT8ud2lkdGggfHwgMjIwLCBcbiAgICAgICAgICAgIGRpcmVjdGlvbjogcmlnaHQuY29uZmlnPy4oKT8uZGlyZWN0aW9uIHx8ICdib3R0b20nLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHJpZ2h0LmNvbmZpZz8uKCk/LnRlbXBsYXRlIHx8IGFjdGlvbkVsLFxuICAgICAgICAgICAgY2xhc3NJbmNsdWRlOiAocmlnaHQuY29uZmlnPy4oKT8uY2xhc3NJbmNsdWRlIHx8ICcnKSsgJyAhcm91bmRlZC1bNHB4XSBvdmVyZmxvdy1oaWRkZW4nLFxuICAgICAgICAgICAgd2hpdGVUaGVtZTogdHJ1ZSxcbiAgICAgICAgICAgIGlnbm9yZUFycm93OiB0cnVlLFxuICAgICAgICAgICAgcG9zaXRpb246IHJpZ2h0LmNvbmZpZz8uKCk/LnBvc2l0aW9uIHx8IHsgbW9kZTogJ3N0YXJ0JywgZGlzdGFuY2U6IDAgfVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIChvdXRFdmVudCk9XCJoYW5kbGVyUG9wb3ZlckV2ZW50KCRldmVudClcIlxuICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoJGV2ZW50KVwiPlxuICAgICAgICAgIEBpZiAocmlnaHQuY3VzdG9tVmlldykge1xuICAgICAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cIml0ZW1bZmllbGRLZXkoKV0gfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOnJpZ2h0LmN1c3RvbVZpZXc6aXRlbVwiPjwvZGl2PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGkgW2F0dHIuYWN0aXZlXT1cIml0ZW1bZmllbGRLZXkoKV0gPT09IGtleVNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICBbYXR0ci5pbnZhbGlkXT1cIml0ZW0uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFthdHRyLmNvbXBsZXRlZF09XCJzdGVwKCkgPD0gKHRhYnMoKS5zdGVwQ29tcGxldGVkIHx8IC0xKVwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJyaWdodC5vbmx5U2hvd1doZW5Ib3Zlckl0ZW1BY3RpdmUgPyAnbGlicy11aS1pY29uLW1vcmUtdmVydGljYWwgcm90YXRlLTkwIGxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXItaXRlbS1pY29uJyA6ICdsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCByb3RhdGUtOTAgbGlicy11aS10YWItaGVhZGVyLWNlbnRlci1pdGVtLWljb24nXCI+XG4gICAgICAgICAgICA8L2k+XG4gICAgICAgICAgfVxuICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2FjdGlvbkVsPlxuICAgICAgICAgIEBpZiAoKDAgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOnJpZ2h0LmdldExpc3RWaWV3Q29uZmlnOml0ZW06IGl0ZW1bZmllbGRLZXkoKV06IHt2YWx1ZUlzMDogMH0gfGFzeW5jKSA7IGFzIGNvbmZpZykge1xuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1saXN0IFtjb25maWddPVwiY29uZmlnKClcIlxuICAgICAgICAgICAgICBbbWF4SXRlbVNob3ddPVwiNVwiXG4gICAgICAgICAgICAgIFtoaWRkZW5JbnB1dFNlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3BhZGRpbmdMZWZ0SXRlbV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0ZWRLZXkoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgfVxuICAgICAgQGlmICh0YWJzKCkuYWxsb3dSZW1vdmUgJiYgdGFicygpLml0ZW1zKCkubGVuZ3RoID4gMSkge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFt0eXBlXT1cInRhYnMoKS5jb25maWdCdXR0b25SZW1vdmU/LnR5cGUgfHwgJ2J1dHRvbi1saW5rLWN1c3RvbSdcIlxuICAgICAgICAgIFtpY29uT25seVR5cGVdPVwidGFicygpLmNvbmZpZ0J1dHRvblJlbW92ZT8uaWNvbk9ubHlUeXBlIHx8IHRydWVcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwidGFicygpLmNvbmZpZ0J1dHRvblJlbW92ZT8uY2xhc3NJbmNsdWRlIHx8ICdtbC1bOHB4XSAhcC0wJ1wiXG4gICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwidGFicygpLmNvbmZpZ0J1dHRvblJlbW92ZT8uY2xhc3NJY29uTGVmdCB8fCAnbGlicy11aS1pY29uLWNsb3NlJ1wiXG4gICAgICAgICAgW2NsYXNzTGFiZWxdPVwidGFicygpLmNvbmZpZ0J1dHRvblJlbW92ZT8uY2xhc3NMYWJlbCB8fCAnJ1wiXG4gICAgICAgICAgW2NsYXNzSWNvblJpZ2h0XT1cInRhYnMoKS5jb25maWdCdXR0b25SZW1vdmU/LmNsYXNzSWNvblJpZ2h0IHx8JydcIlxuICAgICAgICAgIFtwb3BvdmVyXT1cInRhYnMoKS5jb25maWdCdXR0b25SZW1vdmU/LnBvcG92ZXIgfHwge2NvbmZpZzoge2NvbnRlbnQ6ICdpMThuX2RlbGV0ZSd9fVwiXG4gICAgICAgICAgW2xhYmVsXT1cInRhYnMoKS5jb25maWdCdXR0b25SZW1vdmU/LmxhYmVsIHx8JydcIlxuICAgICAgICAgIFtidXR0b25DdXN0b21dPVwie1xuICAgICAgICAgICAgY29uZmlnU3RlcENvbG9yOiB7XG4gICAgICAgICAgICAgIHRleHQ6ICcjNmE3MzgzJyxcbiAgICAgICAgICAgICAgdGV4dF9ob3ZlcjogJyNmMTU3NjcnLFxuICAgICAgICAgICAgICB0ZXh0X2FjdGl2ZTogJyNmMTU3NjcnLFxuICAgICAgICAgICAgICB0ZXh0X2Rpc2FibGU6ICcjY2RkMGQ2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJvb3RDb2xvcjogJyNmMTU3NjcnXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbGlja0J1dHRvbigkZXZlbnQsICdyZW1vdmUnKVwiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbiJdfQ==
|