@libs-ui/components-inputs-input 0.2.287 → 0.2.289
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.
|
@@ -19,7 +19,7 @@ export class LibsUiComponentsInputsInputComponent {
|
|
|
19
19
|
htmlIframeArea = signal(undefined);
|
|
20
20
|
countDisplay = computed(this.countDisplayComputed.bind(this));
|
|
21
21
|
maxLengthDisplay = computed(() => `${viewDataNumberByLanguage(this.maxLength() || 0, false)}`);
|
|
22
|
-
paddingRightCustom = signal(
|
|
22
|
+
paddingRightCustom = signal(undefined);
|
|
23
23
|
inputIframeRef = signal(undefined);
|
|
24
24
|
DEFAULT_MAX_HEIGHT_TEXT_AREA = 250;
|
|
25
25
|
charFirstIsZero = signal(false);
|
|
@@ -65,7 +65,7 @@ export class LibsUiComponentsInputsInputComponent {
|
|
|
65
65
|
classContainerInput = input('w-full', { transform: (value) => value || 'w-full' });
|
|
66
66
|
showCount = input();
|
|
67
67
|
ignoreStopPropagationEvent = input();
|
|
68
|
-
resize = input('
|
|
68
|
+
resize = input('vertical', { transform: (value) => value || 'vertical' });
|
|
69
69
|
templateLeftBottomInput = input();
|
|
70
70
|
templateRightBottomInput = input();
|
|
71
71
|
classContainerBottomInput = input(' ', { transform: (value) => value || ' ' });
|
|
@@ -790,7 +790,7 @@ export class LibsUiComponentsInputsInputComponent {
|
|
|
790
790
|
this.onDestroy.complete();
|
|
791
791
|
}
|
|
792
792
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsInputsInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
793
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsInputsInputComponent, isStandalone: true, selector: "libs_ui-components-inputs-input", inputs: { tagInput: { classPropertyName: "tagInput", publicName: "tagInput", isSignal: true, isRequired: false, transformFunction: null }, dataType: { classPropertyName: "dataType", publicName: "dataType", isSignal: true, isRequired: false, transformFunction: null }, typeInput: { classPropertyName: "typeInput", publicName: "typeInput", isSignal: true, isRequired: false, transformFunction: null }, modeInput: { classPropertyName: "modeInput", publicName: "modeInput", isSignal: true, isRequired: false, transformFunction: null }, tabInsertContentTagInput: { classPropertyName: "tabInsertContentTagInput", publicName: "tabInsertContentTagInput", isSignal: true, isRequired: false, transformFunction: null }, textAreaEnterNotNewLine: { classPropertyName: "textAreaEnterNotNewLine", publicName: "textAreaEnterNotNewLine", isSignal: true, isRequired: false, transformFunction: null }, emitEmptyInDataTypeNumber: { classPropertyName: "emitEmptyInDataTypeNumber", publicName: "emitEmptyInDataTypeNumber", isSignal: true, isRequired: false, transformFunction: null }, keepZeroInTypeInt: { classPropertyName: "keepZeroInTypeInt", publicName: "keepZeroInTypeInt", isSignal: true, isRequired: false, transformFunction: null }, autoAddZeroLessThan10InTypeInt: { classPropertyName: "autoAddZeroLessThan10InTypeInt", publicName: "autoAddZeroLessThan10InTypeInt", isSignal: true, isRequired: false, transformFunction: null }, ignoreBlockInputMaxValue: { classPropertyName: "ignoreBlockInputMaxValue", publicName: "ignoreBlockInputMaxValue", isSignal: true, isRequired: false, transformFunction: null }, maxValueNumber: { classPropertyName: "maxValueNumber", publicName: "maxValueNumber", isSignal: true, isRequired: false, transformFunction: null }, minValueNumber: { classPropertyName: "minValueNumber", publicName: "minValueNumber", isSignal: true, isRequired: false, transformFunction: null }, fixedFloat: { classPropertyName: "fixedFloat", publicName: "fixedFloat", isSignal: true, isRequired: false, transformFunction: null }, acceptNegativeValue: { classPropertyName: "acceptNegativeValue", publicName: "acceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, valueUpDownNumber: { classPropertyName: "valueUpDownNumber", publicName: "valueUpDownNumber", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, noBorder: { classPropertyName: "noBorder", publicName: "noBorder", isSignal: true, isRequired: false, transformFunction: null }, backgroundNone: { classPropertyName: "backgroundNone", publicName: "backgroundNone", isSignal: true, isRequired: false, transformFunction: null }, borderError: { classPropertyName: "borderError", publicName: "borderError", isSignal: true, isRequired: false, transformFunction: null }, useColorModeExist: { classPropertyName: "useColorModeExist", publicName: "useColorModeExist", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, keepPlaceholderOnly: { classPropertyName: "keepPlaceholderOnly", publicName: "keepPlaceholderOnly", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, autoRemoveEmoji: { classPropertyName: "autoRemoveEmoji", publicName: "autoRemoveEmoji", isSignal: true, isRequired: false, transformFunction: null }, defaultHeight: { classPropertyName: "defaultHeight", publicName: "defaultHeight", isSignal: true, isRequired: false, transformFunction: null }, minHeightTextArea: { classPropertyName: "minHeightTextArea", publicName: "minHeightTextArea", isSignal: true, isRequired: false, transformFunction: null }, maxHeightTextArea: { classPropertyName: "maxHeightTextArea", publicName: "maxHeightTextArea", isSignal: true, isRequired: false, transformFunction: null }, focusTimeOut: { classPropertyName: "focusTimeOut", publicName: "focusTimeOut", isSignal: true, isRequired: false, transformFunction: null }, selectAllTimeOut: { classPropertyName: "selectAllTimeOut", publicName: "selectAllTimeOut", isSignal: true, isRequired: false, transformFunction: null }, blurTimeOut: { classPropertyName: "blurTimeOut", publicName: "blurTimeOut", isSignal: true, isRequired: false, transformFunction: null }, zIndexPopoverContent: { classPropertyName: "zIndexPopoverContent", publicName: "zIndexPopoverContent", isSignal: true, isRequired: false, transformFunction: null }, classContainerInput: { classPropertyName: "classContainerInput", publicName: "classContainerInput", isSignal: true, isRequired: false, transformFunction: null }, showCount: { classPropertyName: "showCount", publicName: "showCount", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationEvent: { classPropertyName: "ignoreStopPropagationEvent", publicName: "ignoreStopPropagationEvent", isSignal: true, isRequired: false, transformFunction: null }, resize: { classPropertyName: "resize", publicName: "resize", isSignal: true, isRequired: false, transformFunction: null }, templateLeftBottomInput: { classPropertyName: "templateLeftBottomInput", publicName: "templateLeftBottomInput", isSignal: true, isRequired: false, transformFunction: null }, templateRightBottomInput: { classPropertyName: "templateRightBottomInput", publicName: "templateRightBottomInput", isSignal: true, isRequired: false, transformFunction: null }, classContainerBottomInput: { classPropertyName: "classContainerBottomInput", publicName: "classContainerBottomInput", isSignal: true, isRequired: false, transformFunction: null }, ignoreWidthInput100: { classPropertyName: "ignoreWidthInput100", publicName: "ignoreWidthInput100", isSignal: true, isRequired: false, transformFunction: null }, iframeTextareaCustomStyle: { classPropertyName: "iframeTextareaCustomStyle", publicName: "iframeTextareaCustomStyle", isSignal: true, isRequired: false, transformFunction: null }, iconLeftClass: { classPropertyName: "iconLeftClass", publicName: "iconLeftClass", isSignal: true, isRequired: false, transformFunction: null }, popoverContentIconLeft: { classPropertyName: "popoverContentIconLeft", publicName: "popoverContentIconLeft", isSignal: true, isRequired: false, transformFunction: null }, iconRightClass: { classPropertyName: "iconRightClass", publicName: "iconRightClass", isSignal: true, isRequired: false, transformFunction: null }, popoverContentIconRight: { classPropertyName: "popoverContentIconRight", publicName: "popoverContentIconRight", isSignal: true, isRequired: false, transformFunction: null }, resetAutoCompletePassword: { classPropertyName: "resetAutoCompletePassword", publicName: "resetAutoCompletePassword", isSignal: true, isRequired: false, transformFunction: null }, acceptOnlyClickIcon: { classPropertyName: "acceptOnlyClickIcon", publicName: "acceptOnlyClickIcon", isSignal: true, isRequired: false, transformFunction: null }, setIconRightColorSameColorDisableReadOnly: { classPropertyName: "setIconRightColorSameColorDisableReadOnly", publicName: "setIconRightColorSameColorDisableReadOnly", isSignal: true, isRequired: false, transformFunction: null }, onlyAcceptNegativeValue: { classPropertyName: "onlyAcceptNegativeValue", publicName: "onlyAcceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, maxLengthNumberCount: { classPropertyName: "maxLengthNumberCount", publicName: "maxLengthNumberCount", isSignal: true, isRequired: false, transformFunction: null }, focusInput: { classPropertyName: "focusInput", publicName: "focusInput", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { maxValueNumber: "maxValueNumberChange", minValueNumber: "minValueNumberChange", fixedFloat: "fixedFloatChange", acceptNegativeValue: "acceptNegativeValueChange", maxLength: "maxLengthChange", value: "valueChange", maxLengthNumberCount: "maxLengthNumberCountChange", outHeightAreaChange: "outHeightAreaChange", outChange: "outChange", outFocusAndBlurEvent: "outFocusAndBlurEvent", outEnterEvent: "outEnterEvent", outInputEvent: "outInputEvent", outIconLeft: "outIconLeft", outIconRight: "outIconRight", outFunctionsControl: "outFunctionsControl", outFilesDrop: "outFilesDrop", outFileDrop: "outFileDrop", outChangeValueByButtonUpDown: "outChangeValueByButtonUpDown" }, viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true, isSignal: true }, { propertyName: "textCountRef", first: true, predicate: ["textCountRef"], descendants: true, isSignal: true }, { propertyName: "elementRightRef", first: true, predicate: ["elementRightRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [class]=\"'flex relative !text-[#9ca2ad] ' + classContainerInput()\"\n [class.libs-ui-components-input-textarea-container]=\"tagInput() === 'textarea' && resize() === 'auto'\">\n @if (tagInput() === 'input') {\n <input #inputRef\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-background]=\"disable()\"\n [style.height.px]=\"defaultHeight()\"\n [style.minHeight.px]=\"defaultHeight()\"\n [style.paddingRight.px.important]=\"paddingRightCustom()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [class]=\"'libs-ui-input libs-ui-font-h5r ' + classInclude()\"\n [class.border-primary-focus-general]=\"focusInput()\"\n [class.libs-ui-input-not-border]=\"noBorder()\"\n [class.libs-ui-bg-special-none]=\"backgroundNone()\"\n [class.libs-ui-border-error-general]=\"borderError()\"\n [class.text-[#29c7cc]]=\"useColorModeExist()\"\n [class.!pl-[40px]]=\"iconLeftClass()\"\n [attr.maxLength]=\"maxLength() || undefined\"\n [placeholder]=\"placeholder() | translate\"\n [attr.type]=\"typeInput()\"\n [attr.inputmode]=\"modeInput()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disable()\"\n [autocomplete]=\"resetAutoCompletePassword()? 'new-password':''\" />\n }\n @if (tagInput() === 'textarea') {\n @if (resize() === 'auto') {\n <div class=\"libs-ui-components-input-textarea-container-resize-icon\"></div>\n }\n <textarea #inputRef\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-background]=\"disable()\"\n [style.height.px]=\"defaultHeight()\"\n [style.minHeight.px]=\"minHeightTextArea() ?? defaultHeight()\"\n [style.paddingRight.px]=\"paddingRightCustom()\"\n [style.maxHeight.px]=\"maxHeightTextArea()\"\n [style.resize]=\"resize()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [class]=\"'libs-ui-input libs-ui-font-h5r libs-ui-cursor-auto ' + classInclude()\"\n [class.libs-ui-input-not-border]=\"noBorder()\"\n [class.libs-ui-bg-special-none]=\"backgroundNone()\"\n [class.libs-ui-border-error-general]=\"borderError()\"\n [class.text-[#29c7cc]]=\"useColorModeExist()\"\n [class.pl-[32px]]=\"iconLeftClass()\"\n [attr.maxLength]=\"maxLength() || undefined\"\n [placeholder]=\"placeholder() | translate\"\n [readonly]=\"readonly()\"\n [disabled]=\"disable()\">\n </textarea>\n }\n\n @if (tagInput() === 'iframe-textarea' && htmlIframeArea()) {\n <span class=\"d-none\">\n </span>\n <iframe #iframeRef\n [style.maxHeight.px]=\"maxHeightTextArea()\"\n [style.height.px]=\"defaultHeight()\"\n [srcdoc]=\"htmlIframeArea()\"\n class=\"w-full\"\n frameBorder=\"0\"\n (load)=\"handlerOnLoad($event,iframeRef)\">\n </iframe>\n }\n @if (iconLeftClass()) {\n <libs_ui-components-popover [ignoreShowPopover]=\"!popoverContentIconLeft()\"\n [config]=\"{maxWidth:250,direction:'bottom',content:popoverContentIconLeft(),zIndex: zIndexPopoverContent()}\">\n <i [attr.tagInput]=\"tagInput()\"\n [class]=\"iconLeftClass() +' libs-ui-input-icon-left !text-[#9ca2ad]'\"\n (click)=\"handlerEventIconLeft($event,'click')\">\n </i>\n </libs_ui-components-popover>\n }\n <div #elementRightRef\n class=\"absolute flex items-center h-full top-0 right-0\">\n @if (value() && placeholder().trim() && keepPlaceholderOnly()) {\n <span [class]=\"'libs-ui-input-placeholder-custom libs-ui-font-h5r'\">\n {{ placeholder() }}\n </span>\n }\n @if (dataType() !=='string' && valueUpDownNumber()) {\n <libs_ui-components-buttons-sort class=\"mr-[12px]\"\n [disableAsc]=\"disableAsc()\"\n [disableDesc]=\"disableDesc()\"\n [attr.tagInput]=\"tagInput()\"\n [onlyEmit]=\"true\"\n [disable]=\"disable() || readonly()\"\n (outChange)=\"handlerChangeValue($event)\" />\n }\n @if (iconRightClass()) {\n <libs_ui-components-popover class=\"flex\"\n [ignoreShowPopover]=\"!popoverContentIconRight()\"\n [config]=\"{maxWidth:250,direction:'bottom',content:popoverContentIconRight(),zIndex: zIndexPopoverContent()}\">\n <i [attr.tagInput]=\"tagInput()\"\n [class.text-[#6a7383]]=\"(!disable() && !readonly()) || acceptOnlyClickIcon()\"\n [class.text-[#cdd0d6]]='((disable() || readonly()) && !acceptOnlyClickIcon()) || setIconRightColorSameColorDisableReadOnly()'\n [class]=\"iconRightClass() +' libs-ui-input-icon-right'\"\n (click)=\"handlerEventIconRight($event,'click')\">\n </i>\n </libs_ui-components-popover>\n }\n </div>\n\n <div class=\"libs-ui-input-text-bottom {{ classContainerBottomInput() }}\"\n [style.right.px]=\"(tagInput() === 'input' ? (elementRightRef.clientWidth || 0) : 0) + 8\">\n @if (templateLeftBottomInput(); as templateLeftBottomInput) {\n <ng-container *ngTemplateOutlet=\"templateLeftBottomInput\" />\n }\n @if (dataType() === 'string' && showCount()) {\n <div #textCountRef\n class=\"text-[#9ca2ad] libs-ui-font-h7r\">\n <span>{{ countDisplay() }}</span>\n @if (maxLength()) {\n <span>/{{ maxLengthDisplay() }}</span>\n }\n </div>\n }\n @if (templateRightBottomInput(); as templateRightBottomInput) {\n <ng-container *ngTemplateOutlet=\"templateRightBottomInput\" />\n }\n </div>\n</div>\n", styles: [".libs-ui-input{max-width:100%;border-radius:none;color:#071631;padding:7px 12px;background-color:#fff;background-clip:padding-box;min-height:32px}.libs-ui-input:not(.libs-ui-input-not-border){border:1px solid #e6e7ea;border-radius:4px}.libs-ui-input:focus{outline:none}.libs-ui-input:focus:not(:read-only):not(:disabled):not(.libs-ui-input-not-border){border:1px solid var(--libs-ui-color-light-1, #4e8cf7)}.libs-ui-input .libs-ui-input-valid-check{position:absolute;left:-27px}.libs-ui-input-not-border{border:transparent}libs-ui-components-button-sort{position:absolute;right:12px;top:0}libs-ui-components-button-sort[tagInput=textarea]{top:-10px}.libs-ui-input-icon-left{position:absolute;top:8px;left:16px;font-size:16px}.libs-ui-input-icon-right{font-size:16px;margin-right:8px}.libs-ui-input-text-bottom{display:flex;align-items:center;position:absolute;bottom:8px}input::-ms-reveal,input::-ms-clear{display:none}input::-webkit-credentials-auto-fill-button{margin-right:8px!important}textarea::-webkit-resizer{border:transparent;outline:none}.libs-ui-components-input-textarea-container:after{content:\"\";border-top:1.5px solid #9ca2ad;width:15px;transform:rotate(-45deg);background:transparent;position:absolute;right:0;bottom:8px;pointer-events:none;border-radius:25%}.libs-ui-components-input-textarea-container .libs-ui-components-input-textarea-container-resize-icon{border-top:1.5px solid #9ca2ad;width:7px;transform:rotate(-45deg);position:absolute;bottom:5px;right:1px;pointer-events:none;border-radius:25%}.libs-ui-input-placeholder-custom{color:#6a7378;margin-right:16px;background:inherit}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: LibsUiComponentsButtonsSortComponent, selector: "libs_ui-components-buttons-sort", inputs: ["size", "mode", "fieldSort", "disable", "disableAsc", "disableDesc", "onlyEmit"], outputs: ["modeChange", "outChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
793
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsInputsInputComponent, isStandalone: true, selector: "libs_ui-components-inputs-input", inputs: { tagInput: { classPropertyName: "tagInput", publicName: "tagInput", isSignal: true, isRequired: false, transformFunction: null }, dataType: { classPropertyName: "dataType", publicName: "dataType", isSignal: true, isRequired: false, transformFunction: null }, typeInput: { classPropertyName: "typeInput", publicName: "typeInput", isSignal: true, isRequired: false, transformFunction: null }, modeInput: { classPropertyName: "modeInput", publicName: "modeInput", isSignal: true, isRequired: false, transformFunction: null }, tabInsertContentTagInput: { classPropertyName: "tabInsertContentTagInput", publicName: "tabInsertContentTagInput", isSignal: true, isRequired: false, transformFunction: null }, textAreaEnterNotNewLine: { classPropertyName: "textAreaEnterNotNewLine", publicName: "textAreaEnterNotNewLine", isSignal: true, isRequired: false, transformFunction: null }, emitEmptyInDataTypeNumber: { classPropertyName: "emitEmptyInDataTypeNumber", publicName: "emitEmptyInDataTypeNumber", isSignal: true, isRequired: false, transformFunction: null }, keepZeroInTypeInt: { classPropertyName: "keepZeroInTypeInt", publicName: "keepZeroInTypeInt", isSignal: true, isRequired: false, transformFunction: null }, autoAddZeroLessThan10InTypeInt: { classPropertyName: "autoAddZeroLessThan10InTypeInt", publicName: "autoAddZeroLessThan10InTypeInt", isSignal: true, isRequired: false, transformFunction: null }, ignoreBlockInputMaxValue: { classPropertyName: "ignoreBlockInputMaxValue", publicName: "ignoreBlockInputMaxValue", isSignal: true, isRequired: false, transformFunction: null }, maxValueNumber: { classPropertyName: "maxValueNumber", publicName: "maxValueNumber", isSignal: true, isRequired: false, transformFunction: null }, minValueNumber: { classPropertyName: "minValueNumber", publicName: "minValueNumber", isSignal: true, isRequired: false, transformFunction: null }, fixedFloat: { classPropertyName: "fixedFloat", publicName: "fixedFloat", isSignal: true, isRequired: false, transformFunction: null }, acceptNegativeValue: { classPropertyName: "acceptNegativeValue", publicName: "acceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, valueUpDownNumber: { classPropertyName: "valueUpDownNumber", publicName: "valueUpDownNumber", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, noBorder: { classPropertyName: "noBorder", publicName: "noBorder", isSignal: true, isRequired: false, transformFunction: null }, backgroundNone: { classPropertyName: "backgroundNone", publicName: "backgroundNone", isSignal: true, isRequired: false, transformFunction: null }, borderError: { classPropertyName: "borderError", publicName: "borderError", isSignal: true, isRequired: false, transformFunction: null }, useColorModeExist: { classPropertyName: "useColorModeExist", publicName: "useColorModeExist", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, keepPlaceholderOnly: { classPropertyName: "keepPlaceholderOnly", publicName: "keepPlaceholderOnly", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, autoRemoveEmoji: { classPropertyName: "autoRemoveEmoji", publicName: "autoRemoveEmoji", isSignal: true, isRequired: false, transformFunction: null }, defaultHeight: { classPropertyName: "defaultHeight", publicName: "defaultHeight", isSignal: true, isRequired: false, transformFunction: null }, minHeightTextArea: { classPropertyName: "minHeightTextArea", publicName: "minHeightTextArea", isSignal: true, isRequired: false, transformFunction: null }, maxHeightTextArea: { classPropertyName: "maxHeightTextArea", publicName: "maxHeightTextArea", isSignal: true, isRequired: false, transformFunction: null }, focusTimeOut: { classPropertyName: "focusTimeOut", publicName: "focusTimeOut", isSignal: true, isRequired: false, transformFunction: null }, selectAllTimeOut: { classPropertyName: "selectAllTimeOut", publicName: "selectAllTimeOut", isSignal: true, isRequired: false, transformFunction: null }, blurTimeOut: { classPropertyName: "blurTimeOut", publicName: "blurTimeOut", isSignal: true, isRequired: false, transformFunction: null }, zIndexPopoverContent: { classPropertyName: "zIndexPopoverContent", publicName: "zIndexPopoverContent", isSignal: true, isRequired: false, transformFunction: null }, classContainerInput: { classPropertyName: "classContainerInput", publicName: "classContainerInput", isSignal: true, isRequired: false, transformFunction: null }, showCount: { classPropertyName: "showCount", publicName: "showCount", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationEvent: { classPropertyName: "ignoreStopPropagationEvent", publicName: "ignoreStopPropagationEvent", isSignal: true, isRequired: false, transformFunction: null }, resize: { classPropertyName: "resize", publicName: "resize", isSignal: true, isRequired: false, transformFunction: null }, templateLeftBottomInput: { classPropertyName: "templateLeftBottomInput", publicName: "templateLeftBottomInput", isSignal: true, isRequired: false, transformFunction: null }, templateRightBottomInput: { classPropertyName: "templateRightBottomInput", publicName: "templateRightBottomInput", isSignal: true, isRequired: false, transformFunction: null }, classContainerBottomInput: { classPropertyName: "classContainerBottomInput", publicName: "classContainerBottomInput", isSignal: true, isRequired: false, transformFunction: null }, ignoreWidthInput100: { classPropertyName: "ignoreWidthInput100", publicName: "ignoreWidthInput100", isSignal: true, isRequired: false, transformFunction: null }, iframeTextareaCustomStyle: { classPropertyName: "iframeTextareaCustomStyle", publicName: "iframeTextareaCustomStyle", isSignal: true, isRequired: false, transformFunction: null }, iconLeftClass: { classPropertyName: "iconLeftClass", publicName: "iconLeftClass", isSignal: true, isRequired: false, transformFunction: null }, popoverContentIconLeft: { classPropertyName: "popoverContentIconLeft", publicName: "popoverContentIconLeft", isSignal: true, isRequired: false, transformFunction: null }, iconRightClass: { classPropertyName: "iconRightClass", publicName: "iconRightClass", isSignal: true, isRequired: false, transformFunction: null }, popoverContentIconRight: { classPropertyName: "popoverContentIconRight", publicName: "popoverContentIconRight", isSignal: true, isRequired: false, transformFunction: null }, resetAutoCompletePassword: { classPropertyName: "resetAutoCompletePassword", publicName: "resetAutoCompletePassword", isSignal: true, isRequired: false, transformFunction: null }, acceptOnlyClickIcon: { classPropertyName: "acceptOnlyClickIcon", publicName: "acceptOnlyClickIcon", isSignal: true, isRequired: false, transformFunction: null }, setIconRightColorSameColorDisableReadOnly: { classPropertyName: "setIconRightColorSameColorDisableReadOnly", publicName: "setIconRightColorSameColorDisableReadOnly", isSignal: true, isRequired: false, transformFunction: null }, onlyAcceptNegativeValue: { classPropertyName: "onlyAcceptNegativeValue", publicName: "onlyAcceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, maxLengthNumberCount: { classPropertyName: "maxLengthNumberCount", publicName: "maxLengthNumberCount", isSignal: true, isRequired: false, transformFunction: null }, focusInput: { classPropertyName: "focusInput", publicName: "focusInput", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { maxValueNumber: "maxValueNumberChange", minValueNumber: "minValueNumberChange", fixedFloat: "fixedFloatChange", acceptNegativeValue: "acceptNegativeValueChange", maxLength: "maxLengthChange", value: "valueChange", maxLengthNumberCount: "maxLengthNumberCountChange", outHeightAreaChange: "outHeightAreaChange", outChange: "outChange", outFocusAndBlurEvent: "outFocusAndBlurEvent", outEnterEvent: "outEnterEvent", outInputEvent: "outInputEvent", outIconLeft: "outIconLeft", outIconRight: "outIconRight", outFunctionsControl: "outFunctionsControl", outFilesDrop: "outFilesDrop", outFileDrop: "outFileDrop", outChangeValueByButtonUpDown: "outChangeValueByButtonUpDown" }, viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true, isSignal: true }, { propertyName: "textCountRef", first: true, predicate: ["textCountRef"], descendants: true, isSignal: true }, { propertyName: "elementRightRef", first: true, predicate: ["elementRightRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [class]=\"'flex relative !text-[#9ca2ad] ' + classContainerInput()\"\n [class.libs-ui-components-input-textarea-container]=\"tagInput() === 'textarea' && resize() === 'auto'\">\n @if (tagInput() === 'input') {\n <input #inputRef\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-background]=\"disable()\"\n [style.height.px]=\"defaultHeight()\"\n [style.minHeight.px]=\"defaultHeight()\"\n [style.paddingRight.px.important]=\"paddingRightCustom()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [class]=\"'libs-ui-input libs-ui-font-h5r ' + classInclude()\"\n [class.border-primary-focus-general]=\"focusInput()\"\n [class.libs-ui-input-not-border]=\"noBorder()\"\n [class.libs-ui-bg-special-none]=\"backgroundNone()\"\n [class.libs-ui-border-error-general]=\"borderError()\"\n [class.text-[#29c7cc]]=\"useColorModeExist()\"\n [class.!pl-[40px]]=\"iconLeftClass()\"\n [attr.maxLength]=\"maxLength() || undefined\"\n [placeholder]=\"placeholder() | translate\"\n [attr.type]=\"typeInput()\"\n [attr.inputmode]=\"modeInput()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disable()\"\n [autocomplete]=\"resetAutoCompletePassword()? 'new-password':''\" />\n }\n @if (tagInput() === 'textarea') {\n @if (resize() === 'auto') {\n <div class=\"libs-ui-components-input-textarea-container-resize-icon\"></div>\n }\n <textarea #inputRef\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-background]=\"disable()\"\n [style.height.px]=\"defaultHeight()\"\n [style.minHeight.px]=\"minHeightTextArea() ?? defaultHeight()\"\n [style.paddingRight.px.important]=\"paddingRightCustom()\"\n [style.maxHeight.px]=\"maxHeightTextArea()\"\n [style.resize]=\"resize()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [class]=\"'libs-ui-input libs-ui-font-h5r libs-ui-cursor-auto ' + classInclude()\"\n [class.libs-ui-input-not-border]=\"noBorder()\"\n [class.libs-ui-bg-special-none]=\"backgroundNone()\"\n [class.libs-ui-border-error-general]=\"borderError()\"\n [class.text-[#29c7cc]]=\"useColorModeExist()\"\n [class.pl-[32px]]=\"iconLeftClass()\"\n [attr.maxLength]=\"maxLength() || undefined\"\n [placeholder]=\"placeholder() | translate\"\n [readonly]=\"readonly()\"\n [disabled]=\"disable()\">\n </textarea>\n }\n\n @if (tagInput() === 'iframe-textarea' && htmlIframeArea()) {\n <span class=\"d-none\">\n </span>\n <iframe #iframeRef\n [style.maxHeight.px]=\"maxHeightTextArea()\"\n [style.height.px]=\"defaultHeight()\"\n [srcdoc]=\"htmlIframeArea()\"\n class=\"w-full\"\n frameBorder=\"0\"\n (load)=\"handlerOnLoad($event,iframeRef)\">\n </iframe>\n }\n @if (iconLeftClass()) {\n <libs_ui-components-popover [ignoreShowPopover]=\"!popoverContentIconLeft()\"\n [config]=\"{maxWidth:250,direction:'bottom',content:popoverContentIconLeft(),zIndex: zIndexPopoverContent()}\">\n <i [attr.tagInput]=\"tagInput()\"\n [class]=\"iconLeftClass() +' libs-ui-input-icon-left !text-[#9ca2ad]'\"\n (click)=\"handlerEventIconLeft($event,'click')\">\n </i>\n </libs_ui-components-popover>\n }\n <div #elementRightRef\n class=\"absolute flex items-center h-full top-0 right-0\">\n @if (value() && placeholder().trim() && keepPlaceholderOnly()) {\n <span [class]=\"'libs-ui-input-placeholder-custom libs-ui-font-h5r'\">\n {{ placeholder() }}\n </span>\n }\n @if (dataType() !=='string' && valueUpDownNumber()) {\n <libs_ui-components-buttons-sort class=\"mr-[12px]\"\n [disableAsc]=\"disableAsc()\"\n [disableDesc]=\"disableDesc()\"\n [attr.tagInput]=\"tagInput()\"\n [onlyEmit]=\"true\"\n [disable]=\"disable() || readonly()\"\n (outChange)=\"handlerChangeValue($event)\" />\n }\n @if (iconRightClass()) {\n <libs_ui-components-popover class=\"flex\"\n [ignoreShowPopover]=\"!popoverContentIconRight()\"\n [config]=\"{maxWidth:250,direction:'bottom',content:popoverContentIconRight(),zIndex: zIndexPopoverContent()}\">\n <i [attr.tagInput]=\"tagInput()\"\n [class.text-[#6a7383]]=\"(!disable() && !readonly()) || acceptOnlyClickIcon()\"\n [class.text-[#cdd0d6]]='((disable() || readonly()) && !acceptOnlyClickIcon()) || setIconRightColorSameColorDisableReadOnly()'\n [class]=\"iconRightClass() +' libs-ui-input-icon-right'\"\n (click)=\"handlerEventIconRight($event,'click')\">\n </i>\n </libs_ui-components-popover>\n }\n </div>\n\n <div class=\"libs-ui-input-text-bottom {{ classContainerBottomInput() }}\"\n [style.right.px]=\"(tagInput() === 'input' ? (elementRightRef.clientWidth || 0) : 0) + 8\">\n @if (templateLeftBottomInput(); as templateLeftBottomInput) {\n <ng-container *ngTemplateOutlet=\"templateLeftBottomInput\" />\n }\n @if (dataType() === 'string' && showCount()) {\n <div #textCountRef\n class=\"text-[#9ca2ad] libs-ui-font-h7r\">\n <span>{{ countDisplay() }}</span>\n @if (maxLength()) {\n <span>/{{ maxLengthDisplay() }}</span>\n }\n </div>\n }\n @if (templateRightBottomInput(); as templateRightBottomInput) {\n <ng-container *ngTemplateOutlet=\"templateRightBottomInput\" />\n }\n </div>\n</div>\n", styles: [".libs-ui-input{max-width:100%;border-radius:none;color:#071631;padding:7px 12px;background-color:#fff;background-clip:padding-box;min-height:32px}.libs-ui-input:not(.libs-ui-input-not-border){border:1px solid #e6e7ea;border-radius:4px}.libs-ui-input:focus{outline:none}.libs-ui-input:focus:not(:read-only):not(:disabled):not(.libs-ui-input-not-border){border:1px solid var(--libs-ui-color-light-1, #4e8cf7)}.libs-ui-input .libs-ui-input-valid-check{position:absolute;left:-27px}.libs-ui-input-not-border{border:transparent}libs-ui-components-button-sort{position:absolute;right:12px;top:0}libs-ui-components-button-sort[tagInput=textarea]{top:-10px}.libs-ui-input-icon-left{position:absolute;top:8px;left:16px;font-size:16px}.libs-ui-input-icon-right{font-size:16px;margin-right:8px}.libs-ui-input-text-bottom{display:flex;align-items:center;position:absolute;bottom:8px}input::-ms-reveal,input::-ms-clear{display:none}input::-webkit-credentials-auto-fill-button{margin-right:8px!important}textarea::-webkit-resizer{border:transparent;outline:none}.libs-ui-components-input-textarea-container:after{content:\"\";border-top:1.5px solid #9ca2ad;width:15px;transform:rotate(-45deg);background:transparent;position:absolute;right:0;bottom:8px;pointer-events:none;border-radius:25%}.libs-ui-components-input-textarea-container .libs-ui-components-input-textarea-container-resize-icon{border-top:1.5px solid #9ca2ad;width:7px;transform:rotate(-45deg);position:absolute;bottom:5px;right:1px;pointer-events:none;border-radius:25%}.libs-ui-input-placeholder-custom{color:#6a7378;margin-right:16px;background:inherit}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: LibsUiComponentsButtonsSortComponent, selector: "libs_ui-components-buttons-sort", inputs: ["size", "mode", "fieldSort", "disable", "disableAsc", "disableDesc", "onlyEmit"], outputs: ["modeChange", "outChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
794
794
|
}
|
|
795
795
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsInputsInputComponent, decorators: [{
|
|
796
796
|
type: Component,
|
|
@@ -798,6 +798,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
798
798
|
TranslateModule, NgTemplateOutlet,
|
|
799
799
|
LibsUiComponentsPopoverComponent,
|
|
800
800
|
LibsUiComponentsButtonsSortComponent
|
|
801
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"'flex relative !text-[#9ca2ad] ' + classContainerInput()\"\n [class.libs-ui-components-input-textarea-container]=\"tagInput() === 'textarea' && resize() === 'auto'\">\n @if (tagInput() === 'input') {\n <input #inputRef\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-background]=\"disable()\"\n [style.height.px]=\"defaultHeight()\"\n [style.minHeight.px]=\"defaultHeight()\"\n [style.paddingRight.px.important]=\"paddingRightCustom()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [class]=\"'libs-ui-input libs-ui-font-h5r ' + classInclude()\"\n [class.border-primary-focus-general]=\"focusInput()\"\n [class.libs-ui-input-not-border]=\"noBorder()\"\n [class.libs-ui-bg-special-none]=\"backgroundNone()\"\n [class.libs-ui-border-error-general]=\"borderError()\"\n [class.text-[#29c7cc]]=\"useColorModeExist()\"\n [class.!pl-[40px]]=\"iconLeftClass()\"\n [attr.maxLength]=\"maxLength() || undefined\"\n [placeholder]=\"placeholder() | translate\"\n [attr.type]=\"typeInput()\"\n [attr.inputmode]=\"modeInput()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disable()\"\n [autocomplete]=\"resetAutoCompletePassword()? 'new-password':''\" />\n }\n @if (tagInput() === 'textarea') {\n @if (resize() === 'auto') {\n <div class=\"libs-ui-components-input-textarea-container-resize-icon\"></div>\n }\n <textarea #inputRef\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-background]=\"disable()\"\n [style.height.px]=\"defaultHeight()\"\n [style.minHeight.px]=\"minHeightTextArea() ?? defaultHeight()\"\n [style.paddingRight.px]=\"paddingRightCustom()\"\n [style.maxHeight.px]=\"maxHeightTextArea()\"\n [style.resize]=\"resize()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [class]=\"'libs-ui-input libs-ui-font-h5r libs-ui-cursor-auto ' + classInclude()\"\n [class.libs-ui-input-not-border]=\"noBorder()\"\n [class.libs-ui-bg-special-none]=\"backgroundNone()\"\n [class.libs-ui-border-error-general]=\"borderError()\"\n [class.text-[#29c7cc]]=\"useColorModeExist()\"\n [class.pl-[32px]]=\"iconLeftClass()\"\n [attr.maxLength]=\"maxLength() || undefined\"\n [placeholder]=\"placeholder() | translate\"\n [readonly]=\"readonly()\"\n [disabled]=\"disable()\">\n </textarea>\n }\n\n @if (tagInput() === 'iframe-textarea' && htmlIframeArea()) {\n <span class=\"d-none\">\n </span>\n <iframe #iframeRef\n [style.maxHeight.px]=\"maxHeightTextArea()\"\n [style.height.px]=\"defaultHeight()\"\n [srcdoc]=\"htmlIframeArea()\"\n class=\"w-full\"\n frameBorder=\"0\"\n (load)=\"handlerOnLoad($event,iframeRef)\">\n </iframe>\n }\n @if (iconLeftClass()) {\n <libs_ui-components-popover [ignoreShowPopover]=\"!popoverContentIconLeft()\"\n [config]=\"{maxWidth:250,direction:'bottom',content:popoverContentIconLeft(),zIndex: zIndexPopoverContent()}\">\n <i [attr.tagInput]=\"tagInput()\"\n [class]=\"iconLeftClass() +' libs-ui-input-icon-left !text-[#9ca2ad]'\"\n (click)=\"handlerEventIconLeft($event,'click')\">\n </i>\n </libs_ui-components-popover>\n }\n <div #elementRightRef\n class=\"absolute flex items-center h-full top-0 right-0\">\n @if (value() && placeholder().trim() && keepPlaceholderOnly()) {\n <span [class]=\"'libs-ui-input-placeholder-custom libs-ui-font-h5r'\">\n {{ placeholder() }}\n </span>\n }\n @if (dataType() !=='string' && valueUpDownNumber()) {\n <libs_ui-components-buttons-sort class=\"mr-[12px]\"\n [disableAsc]=\"disableAsc()\"\n [disableDesc]=\"disableDesc()\"\n [attr.tagInput]=\"tagInput()\"\n [onlyEmit]=\"true\"\n [disable]=\"disable() || readonly()\"\n (outChange)=\"handlerChangeValue($event)\" />\n }\n @if (iconRightClass()) {\n <libs_ui-components-popover class=\"flex\"\n [ignoreShowPopover]=\"!popoverContentIconRight()\"\n [config]=\"{maxWidth:250,direction:'bottom',content:popoverContentIconRight(),zIndex: zIndexPopoverContent()}\">\n <i [attr.tagInput]=\"tagInput()\"\n [class.text-[#6a7383]]=\"(!disable() && !readonly()) || acceptOnlyClickIcon()\"\n [class.text-[#cdd0d6]]='((disable() || readonly()) && !acceptOnlyClickIcon()) || setIconRightColorSameColorDisableReadOnly()'\n [class]=\"iconRightClass() +' libs-ui-input-icon-right'\"\n (click)=\"handlerEventIconRight($event,'click')\">\n </i>\n </libs_ui-components-popover>\n }\n </div>\n\n <div class=\"libs-ui-input-text-bottom {{ classContainerBottomInput() }}\"\n [style.right.px]=\"(tagInput() === 'input' ? (elementRightRef.clientWidth || 0) : 0) + 8\">\n @if (templateLeftBottomInput(); as templateLeftBottomInput) {\n <ng-container *ngTemplateOutlet=\"templateLeftBottomInput\" />\n }\n @if (dataType() === 'string' && showCount()) {\n <div #textCountRef\n class=\"text-[#9ca2ad] libs-ui-font-h7r\">\n <span>{{ countDisplay() }}</span>\n @if (maxLength()) {\n <span>/{{ maxLengthDisplay() }}</span>\n }\n </div>\n }\n @if (templateRightBottomInput(); as templateRightBottomInput) {\n <ng-container *ngTemplateOutlet=\"templateRightBottomInput\" />\n }\n </div>\n</div>\n", styles: [".libs-ui-input{max-width:100%;border-radius:none;color:#071631;padding:7px 12px;background-color:#fff;background-clip:padding-box;min-height:32px}.libs-ui-input:not(.libs-ui-input-not-border){border:1px solid #e6e7ea;border-radius:4px}.libs-ui-input:focus{outline:none}.libs-ui-input:focus:not(:read-only):not(:disabled):not(.libs-ui-input-not-border){border:1px solid var(--libs-ui-color-light-1, #4e8cf7)}.libs-ui-input .libs-ui-input-valid-check{position:absolute;left:-27px}.libs-ui-input-not-border{border:transparent}libs-ui-components-button-sort{position:absolute;right:12px;top:0}libs-ui-components-button-sort[tagInput=textarea]{top:-10px}.libs-ui-input-icon-left{position:absolute;top:8px;left:16px;font-size:16px}.libs-ui-input-icon-right{font-size:16px;margin-right:8px}.libs-ui-input-text-bottom{display:flex;align-items:center;position:absolute;bottom:8px}input::-ms-reveal,input::-ms-clear{display:none}input::-webkit-credentials-auto-fill-button{margin-right:8px!important}textarea::-webkit-resizer{border:transparent;outline:none}.libs-ui-components-input-textarea-container:after{content:\"\";border-top:1.5px solid #9ca2ad;width:15px;transform:rotate(-45deg);background:transparent;position:absolute;right:0;bottom:8px;pointer-events:none;border-radius:25%}.libs-ui-components-input-textarea-container .libs-ui-components-input-textarea-container-resize-icon{border-top:1.5px solid #9ca2ad;width:7px;transform:rotate(-45deg);position:absolute;bottom:5px;right:1px;pointer-events:none;border-radius:25%}.libs-ui-input-placeholder-custom{color:#6a7378;margin-right:16px;background:inherit}\n"] }]
|
|
801
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"'flex relative !text-[#9ca2ad] ' + classContainerInput()\"\n [class.libs-ui-components-input-textarea-container]=\"tagInput() === 'textarea' && resize() === 'auto'\">\n @if (tagInput() === 'input') {\n <input #inputRef\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-background]=\"disable()\"\n [style.height.px]=\"defaultHeight()\"\n [style.minHeight.px]=\"defaultHeight()\"\n [style.paddingRight.px.important]=\"paddingRightCustom()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [class]=\"'libs-ui-input libs-ui-font-h5r ' + classInclude()\"\n [class.border-primary-focus-general]=\"focusInput()\"\n [class.libs-ui-input-not-border]=\"noBorder()\"\n [class.libs-ui-bg-special-none]=\"backgroundNone()\"\n [class.libs-ui-border-error-general]=\"borderError()\"\n [class.text-[#29c7cc]]=\"useColorModeExist()\"\n [class.!pl-[40px]]=\"iconLeftClass()\"\n [attr.maxLength]=\"maxLength() || undefined\"\n [placeholder]=\"placeholder() | translate\"\n [attr.type]=\"typeInput()\"\n [attr.inputmode]=\"modeInput()\"\n [readonly]=\"readonly()\"\n [disabled]=\"disable()\"\n [autocomplete]=\"resetAutoCompletePassword()? 'new-password':''\" />\n }\n @if (tagInput() === 'textarea') {\n @if (resize() === 'auto') {\n <div class=\"libs-ui-components-input-textarea-container-resize-icon\"></div>\n }\n <textarea #inputRef\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-background]=\"disable()\"\n [style.height.px]=\"defaultHeight()\"\n [style.minHeight.px]=\"minHeightTextArea() ?? defaultHeight()\"\n [style.paddingRight.px.important]=\"paddingRightCustom()\"\n [style.maxHeight.px]=\"maxHeightTextArea()\"\n [style.resize]=\"resize()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [class]=\"'libs-ui-input libs-ui-font-h5r libs-ui-cursor-auto ' + classInclude()\"\n [class.libs-ui-input-not-border]=\"noBorder()\"\n [class.libs-ui-bg-special-none]=\"backgroundNone()\"\n [class.libs-ui-border-error-general]=\"borderError()\"\n [class.text-[#29c7cc]]=\"useColorModeExist()\"\n [class.pl-[32px]]=\"iconLeftClass()\"\n [attr.maxLength]=\"maxLength() || undefined\"\n [placeholder]=\"placeholder() | translate\"\n [readonly]=\"readonly()\"\n [disabled]=\"disable()\">\n </textarea>\n }\n\n @if (tagInput() === 'iframe-textarea' && htmlIframeArea()) {\n <span class=\"d-none\">\n </span>\n <iframe #iframeRef\n [style.maxHeight.px]=\"maxHeightTextArea()\"\n [style.height.px]=\"defaultHeight()\"\n [srcdoc]=\"htmlIframeArea()\"\n class=\"w-full\"\n frameBorder=\"0\"\n (load)=\"handlerOnLoad($event,iframeRef)\">\n </iframe>\n }\n @if (iconLeftClass()) {\n <libs_ui-components-popover [ignoreShowPopover]=\"!popoverContentIconLeft()\"\n [config]=\"{maxWidth:250,direction:'bottom',content:popoverContentIconLeft(),zIndex: zIndexPopoverContent()}\">\n <i [attr.tagInput]=\"tagInput()\"\n [class]=\"iconLeftClass() +' libs-ui-input-icon-left !text-[#9ca2ad]'\"\n (click)=\"handlerEventIconLeft($event,'click')\">\n </i>\n </libs_ui-components-popover>\n }\n <div #elementRightRef\n class=\"absolute flex items-center h-full top-0 right-0\">\n @if (value() && placeholder().trim() && keepPlaceholderOnly()) {\n <span [class]=\"'libs-ui-input-placeholder-custom libs-ui-font-h5r'\">\n {{ placeholder() }}\n </span>\n }\n @if (dataType() !=='string' && valueUpDownNumber()) {\n <libs_ui-components-buttons-sort class=\"mr-[12px]\"\n [disableAsc]=\"disableAsc()\"\n [disableDesc]=\"disableDesc()\"\n [attr.tagInput]=\"tagInput()\"\n [onlyEmit]=\"true\"\n [disable]=\"disable() || readonly()\"\n (outChange)=\"handlerChangeValue($event)\" />\n }\n @if (iconRightClass()) {\n <libs_ui-components-popover class=\"flex\"\n [ignoreShowPopover]=\"!popoverContentIconRight()\"\n [config]=\"{maxWidth:250,direction:'bottom',content:popoverContentIconRight(),zIndex: zIndexPopoverContent()}\">\n <i [attr.tagInput]=\"tagInput()\"\n [class.text-[#6a7383]]=\"(!disable() && !readonly()) || acceptOnlyClickIcon()\"\n [class.text-[#cdd0d6]]='((disable() || readonly()) && !acceptOnlyClickIcon()) || setIconRightColorSameColorDisableReadOnly()'\n [class]=\"iconRightClass() +' libs-ui-input-icon-right'\"\n (click)=\"handlerEventIconRight($event,'click')\">\n </i>\n </libs_ui-components-popover>\n }\n </div>\n\n <div class=\"libs-ui-input-text-bottom {{ classContainerBottomInput() }}\"\n [style.right.px]=\"(tagInput() === 'input' ? (elementRightRef.clientWidth || 0) : 0) + 8\">\n @if (templateLeftBottomInput(); as templateLeftBottomInput) {\n <ng-container *ngTemplateOutlet=\"templateLeftBottomInput\" />\n }\n @if (dataType() === 'string' && showCount()) {\n <div #textCountRef\n class=\"text-[#9ca2ad] libs-ui-font-h7r\">\n <span>{{ countDisplay() }}</span>\n @if (maxLength()) {\n <span>/{{ maxLengthDisplay() }}</span>\n }\n </div>\n }\n @if (templateRightBottomInput(); as templateRightBottomInput) {\n <ng-container *ngTemplateOutlet=\"templateRightBottomInput\" />\n }\n </div>\n</div>\n", styles: [".libs-ui-input{max-width:100%;border-radius:none;color:#071631;padding:7px 12px;background-color:#fff;background-clip:padding-box;min-height:32px}.libs-ui-input:not(.libs-ui-input-not-border){border:1px solid #e6e7ea;border-radius:4px}.libs-ui-input:focus{outline:none}.libs-ui-input:focus:not(:read-only):not(:disabled):not(.libs-ui-input-not-border){border:1px solid var(--libs-ui-color-light-1, #4e8cf7)}.libs-ui-input .libs-ui-input-valid-check{position:absolute;left:-27px}.libs-ui-input-not-border{border:transparent}libs-ui-components-button-sort{position:absolute;right:12px;top:0}libs-ui-components-button-sort[tagInput=textarea]{top:-10px}.libs-ui-input-icon-left{position:absolute;top:8px;left:16px;font-size:16px}.libs-ui-input-icon-right{font-size:16px;margin-right:8px}.libs-ui-input-text-bottom{display:flex;align-items:center;position:absolute;bottom:8px}input::-ms-reveal,input::-ms-clear{display:none}input::-webkit-credentials-auto-fill-button{margin-right:8px!important}textarea::-webkit-resizer{border:transparent;outline:none}.libs-ui-components-input-textarea-container:after{content:\"\";border-top:1.5px solid #9ca2ad;width:15px;transform:rotate(-45deg);background:transparent;position:absolute;right:0;bottom:8px;pointer-events:none;border-radius:25%}.libs-ui-components-input-textarea-container .libs-ui-components-input-textarea-container-resize-icon{border-top:1.5px solid #9ca2ad;width:7px;transform:rotate(-45deg);position:absolute;bottom:5px;right:1px;pointer-events:none;border-radius:25%}.libs-ui-input-placeholder-custom{color:#6a7378;margin-right:16px;background:inherit}\n"] }]
|
|
802
802
|
}], ctorParameters: () => [] });
|
|
803
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9pbnB1dC9zcmMvaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9pbnB1dC9zcmMvaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWlDLFNBQVMsRUFBZSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4TSxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFTLG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0YsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUwsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBYyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFF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QUUsS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDckMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUM1RixDQUFDLENBQUMsQ0FBQTtnQkFDSixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxHQUFHLHdCQUF3QixDQUFFLElBQUksQ0FBQyxLQUFLLEVBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUMvRSxDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQjtRQUM1QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN6QixDQUFDLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO3dHQTM2QlUsb0NBQW9DOzRGQUFwQyxvQ0FBb0Msa25TQy9CakQsMmlMQTZIQSxrb0REckdJLGVBQWUsNEZBQUMsZ0JBQWdCLG9KQUNoQyxnQ0FBZ0Msb2dCQUNoQyxvQ0FBb0M7OzRGQUszQixvQ0FBb0M7a0JBZGhELFNBQVM7K0JBRUUsaUNBQWlDLGNBRy9CLElBQUksV0FDUDt3QkFDUCxlQUFlLEVBQUMsZ0JBQWdCO3dCQUNoQyxnQ0FBZ0M7d0JBQ2hDLG9DQUFvQztxQkFDckMsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyLCBUZW1wbGF0ZVJlZiwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgSVNvcnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zU29ydENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1zb3J0JztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IElFdmVudCwgSUV2ZW50Q3VzdG9tLCBJU3RyaW5nLCBUWVBFX1RFTVBMQVRFX1JFRiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgTGlic1VpQ29uZmlnUHJvamVjdFNlcnZpY2UgfSBmcm9tICdAbGlicy11aS9zZXJ2aWNlcy1jb25maWctcHJvamVjdCc7XG5pbXBvcnQgeyBVdGlsc0NhY2hlLCBVdGlsc0tleUNvZGVDb25zdGFudCwgVXRpbHNMYW5ndWFnZUNvbnN0YW50cywgZm9ybWF0TnVtYmVyLCBpc05pbCwgaXNUeXBlRmlsZSwgcmVtb3ZlRW1vamksIHNldENhcmV0UG9zaXRpb24sIHV1aWQsIHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWVyZ2VNYXAsIHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgaW5kZXhJbnB1dEh0bWwgfSBmcm9tICcuL2RlZmluZXMvaW5kZXgtaWZyYW1lLWFyZWEuZGVmaW5lJztcbmltcG9ydCB7IElGb2N1c0FuZEJsdXJFdmVudCwgSUlmcmFtZVRleHRhcmVhQ3VzdG9tU3R5bGUgfSBmcm9tICcuL2ludGVyZmFjZXMvZm9jdXMtYW5kLWJsdXItZXZlbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2Z1bmN0aW9uLWNvbnRyb2wtZXZlbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRZUEVfREFUQV9UWVBFX0lOUFVULCBUWVBFX0lOUFVULCBUWVBFX01PREVfSU5QVVQsIFRZUEVfVEFHX0lOUFVUIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2lucHV0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWlucHV0cy1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsTmdUZW1wbGF0ZU91dGxldCxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc1NvcnRDb21wb25lbnRcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5cbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJvdGVjdGVkIGRpc2FibGVBc2MgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgZGlzYWJsZURlc2MgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgaHRtbElmcmFtZUFyZWEgPSBzaWduYWw8U2FmZUh0bWwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBjb3VudERpc3BsYXkgPSBjb21wdXRlZCh0aGlzLmNvdW50RGlzcGxheUNvbXB1dGVkLmJpbmQodGhpcykpO1xuICBwcm90ZWN0ZWQgbWF4TGVuZ3RoRGlzcGxheSA9IGNvbXB1dGVkKCgpID0+IGAke3ZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSh0aGlzLm1heExlbmd0aCgpIHx8IDAsIGZhbHNlKX1gKTtcbiAgcHJvdGVjdGVkIHBhZGRpbmdSaWdodEN1c3RvbSA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgaW5wdXRJZnJhbWVSZWYgPSBzaWduYWw8RWxlbWVudFJlZiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfTUFYX0hFSUdIVF9URVhUX0FSRUEgPSAyNTA7XG4gIHByaXZhdGUgY2hhckZpcnN0SXNaZXJvID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBwcmVIZWlnaHRBcmVhID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgaWZyYW1lUmVmOiBIVE1MSUZyYW1lRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBkYXRhVGV4dFBhc3RlID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICByZWFkb25seSB0YWdJbnB1dCA9IGlucHV0PFRZUEVfVEFHX0lOUFVULCBUWVBFX1RBR19JTlBVVCB8IHVuZGVmaW5lZD4oJ2lucHV0JywgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlIHx8ICdpbnB1dCcgfSk7XG4gIHJlYWRvbmx5IGRhdGFUeXBlID0gaW5wdXQ8VFlQRV9EQVRBX1RZUEVfSU5QVVQsIFRZUEVfREFUQV9UWVBFX0lOUFVUIHwgdW5kZWZpbmVkPignc3RyaW5nJywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgfHwgJ3N0cmluZycgfSk7XG4gIHJlYWRvbmx5IHR5cGVJbnB1dCA9IGlucHV0PFRZUEVfSU5QVVQsIFRZUEVfSU5QVVQgfCB1bmRlZmluZWQ+KCd0ZXh0JywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgfHwgJ3RleHQnIH0pO1xuICByZWFkb25seSBtb2RlSW5wdXQgPSBpbnB1dDxUWVBFX01PREVfSU5QVVQsIFRZUEVfTU9ERV9JTlBVVCB8IHVuZGVmaW5lZD4oJ3RleHQnLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCB8fCAndGV4dCcgfSk7XG5cbiAgcmVhZG9ubHkgdGFiSW5zZXJ0Q29udGVudFRhZ0lucHV0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB0ZXh0QXJlYUVudGVyTm90TmV3TGluZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZW1pdEVtcHR5SW5EYXRhVHlwZU51bWJlciA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkga2VlcFplcm9JblR5cGVJbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGF1dG9BZGRaZXJvTGVzc1RoYW4xMEluVHlwZUludCA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaWdub3JlQmxvY2tJbnB1dE1heFZhbHVlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbWF4VmFsdWVOdW1iZXIgPSBtb2RlbDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IG1pblZhbHVlTnVtYmVyID0gbW9kZWw8bnVtYmVyPigpO1xuICByZWFkb25seSBmaXhlZEZsb2F0ID0gbW9kZWw8bnVtYmVyPigpO1xuICByZWFkb25seSBhY2NlcHROZWdhdGl2ZVZhbHVlID0gbW9kZWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSB2YWx1ZVVwRG93bk51bWJlciA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmc+KCcgdy1mdWxsICcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICcgdy1mdWxsICcgfSk7XG4gIHJlYWRvbmx5IG1heExlbmd0aCA9IG1vZGVsPG51bWJlciB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgcmVhZG9ubHkgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IG5vQm9yZGVyID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYmFja2dyb3VuZE5vbmUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IGJvcmRlckVycm9yID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB1c2VDb2xvck1vZGVFeGlzdCA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmcsIHN0cmluZz4oJyAnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAnICcgfSk7XG4gIHJlYWRvbmx5IGtlZXBQbGFjZWhvbGRlck9ubHkgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IHZhbHVlID0gbW9kZWw8c3RyaW5nIHwgbnVtYmVyPignJyk7XG4gIHJlYWRvbmx5IGF1dG9SZW1vdmVFbW9qaSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZGVmYXVsdEhlaWdodCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigzMiwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgMzIgfSk7XG4gIHJlYWRvbmx5IG1pbkhlaWdodFRleHRBcmVhID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBtYXhIZWlnaHRUZXh0QXJlYSA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPih0aGlzLkRFRkFVTFRfTUFYX0hFSUdIVF9URVhUX0FSRUEsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8IHRoaXMuREVGQVVMVF9NQVhfSEVJR0hUX1RFWFRfQVJFQSB9KTtcbiAgcmVhZG9ubHkgZm9jdXNUaW1lT3V0ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDYwMCwgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlID8/IDYwMCB9KTtcbiAgcmVhZG9ubHkgc2VsZWN0QWxsVGltZU91dCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPig2MDAsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSA/PyA2MDAgfSk7XG4gIHJlYWRvbmx5IGJsdXJUaW1lT3V0ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDMyLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAzMiB9KTtcbiAgcmVhZG9ubHkgekluZGV4UG9wb3ZlckNvbnRlbnQgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8IDEwIH0pO1xuICByZWFkb25seSBjbGFzc0NvbnRhaW5lcklucHV0ID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCd3LWZ1bGwnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAndy1mdWxsJyB9KTtcbiAgcmVhZG9ubHkgc2hvd0NvdW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSByZXNpemUgPSBpbnB1dDwnYXV0bycgfCAnbm9uZScgfCB1bmRlZmluZWQsICdhdXRvJyB8ICdub25lJyB8IHVuZGVmaW5lZD4oJ2F1dG8nLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAnYXV0bycgfSk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlTGVmdEJvdHRvbUlucHV0ID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+PigpO1xuICByZWFkb25seSB0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXQgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4+KCk7XG4gIHJlYWRvbmx5IGNsYXNzQ29udGFpbmVyQm90dG9tSW5wdXQgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQsIHN0cmluZyB8IHVuZGVmaW5lZD4oJyAnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAnICcgfSk7XG4gIHJlYWRvbmx5IGlnbm9yZVdpZHRoSW5wdXQxMDAgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZnJhbWVUZXh0YXJlYUN1c3RvbVN0eWxlID0gaW5wdXQ8SUlmcmFtZVRleHRhcmVhQ3VzdG9tU3R5bGU+KClcblxuICByZWFkb25seSBpY29uTGVmdENsYXNzID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAnJyB9KTtcbiAgcmVhZG9ubHkgcG9wb3ZlckNvbnRlbnRJY29uTGVmdCA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJycgfSk7XG4gIHJlYWRvbmx5IGljb25SaWdodENsYXNzID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAnJyB9KTtcbiAgcmVhZG9ubHkgcG9wb3ZlckNvbnRlbnRJY29uUmlnaHQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICcnIH0pO1xuICByZWFkb25seSByZXNldEF1dG9Db21wbGV0ZVBhc3N3b3JkID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgYWNjZXB0T25seUNsaWNrSWNvbiA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgc2V0SWNvblJpZ2h0Q29sb3JTYW1lQ29sb3JEaXNhYmxlUmVhZE9ubHkgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IG9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSBtYXhMZW5ndGhOdW1iZXJDb3VudCA9IG1vZGVsPG51bWJlciB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgZm9jdXNJbnB1dCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRIZWlnaHRBcmVhQ2hhbmdlID0gb3V0cHV0PHsgaXNDaGFuZ2U6IGJvb2xlYW4sIGhlaWdodDogbnVtYmVyIH0+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IG91dEZvY3VzQW5kQmx1ckV2ZW50ID0gb3V0cHV0PElGb2N1c0FuZEJsdXJFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0RW50ZXJFdmVudCA9IG91dHB1dDxJRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dElucHV0RXZlbnQgPSBvdXRwdXQ8SUV2ZW50PigpOy8vIGVtaXQgcHVyZSBldmVudCBpbnB1dFxuICByZWFkb25seSBvdXRJY29uTGVmdCA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dEljb25SaWdodCA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dEZpbGVzRHJvcCA9IG91dHB1dDxBcnJheTxGaWxlPj4oKTtcbiAgcmVhZG9ubHkgb3V0RmlsZURyb3AgPSBvdXRwdXQ8RmlsZT4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdlVmFsdWVCeUJ1dHRvblVwRG93biA9IG91dHB1dDx2b2lkPigpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcHJvdGVjdGVkIGlucHV0UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdpbnB1dFJlZicpO1xuICBwcm90ZWN0ZWQgdGV4dENvdW50UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCd0ZXh0Q291bnRSZWYnKTtcbiAgcHJvdGVjdGVkIGVsZW1lbnRSaWdodFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignZWxlbWVudFJpZ2h0UmVmJyk7XG5cbiAgLy8gI3JlZ2lvbiBJTkpFQ1RcbiAgcHJpdmF0ZSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICBwcml2YXRlIGNvbmZpZ1Byb2plY3RTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUNvbmZpZ1Byb2plY3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSgpKSB7XG4gICAgICAgIHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZS5zZXQodHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuRWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdzdHJpbmcnKSB7XG5cbiAgICAgICAgaWYgKHRoaXMuRWxlbWVudC52YWx1ZSAhPT0gdGhpcy52YWx1ZSgpKSB7XG4gICAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZU1heExlbmd0aE1pbk1heFZhbHVlQnlEYXRhVHlwZSgpO1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnBhcnNlVmFsdWVCeURhdGFUeXBlKHRoaXMuRWxlbWVudC52YWx1ZSk7XG5cbiAgICAgIGlmICgodGhpcy5FbGVtZW50LnZhbHVlICE9PSAnJyAmJiB2YWx1ZSA9PT0gdGhpcy52YWx1ZSgpKSB8fCAodGhpcy5FbGVtZW50LnZhbHVlID09PSAnJyAmJiB0aGlzLmVtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXIoKSAmJiB0aGlzLnZhbHVlKCkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuRWxlbWVudCkge1xuICAgICAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLmFmdGVyVmlld0luaXQoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmh0bWxJZnJhbWVBcmVhLnNldCh0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChpbmRleElucHV0SHRtbCh0aGlzLmlmcmFtZVRleHRhcmVhQ3VzdG9tU3R5bGUoKSB8fCB7IGJvcmRlckNvbG9yOiB0aGlzLm5vQm9yZGVyKCkgPyAnJyA6IGAke3RoaXMuY29uZmlnUHJvamVjdFNlcnZpY2UuY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKDIwKT8ubGlnaHR9YCB9KSkpO1xuICB9XG5cbiAgYWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm91dEhlaWdodEFyZWFDaGFuZ2UuZW1pdCh7IGlzQ2hhbmdlOiBmYWxzZSwgaGVpZ2h0OiB0aGlzLkVsZW1lbnQ/LnNjcm9sbEhlaWdodCB9KTtcbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh7XG4gICAgICBmb2N1czogdGhpcy5mb2N1cy5iaW5kKHRoaXMpLFxuICAgICAgYmx1cjogdGhpcy5ibHVyLmJpbmQodGhpcyksXG4gICAgICBpbnNlcnRDb250ZW50OiB0aGlzLmFkZERhdGFUb1NlbGVjdGlvbklucHV0LmJpbmQodGhpcyksXG4gICAgICByZXNldFZhbHVlOiB0aGlzLnJlc2V0VmFsdWUuYmluZCh0aGlzKSxcbiAgICAgIGdldEVsZW1lbnRWYWx1ZTogdGhpcy5nZXRFbGVtZW50VmFsdWUuYmluZCh0aGlzKSxcbiAgICAgIGNoZWNrQW5kRGlzYWJsZVVwRG93bkJ1dHRvbjogdGhpcy5jaGVja0FuZERpc2FibGVVcERvd25CdXR0b24uYmluZCh0aGlzKSxcbiAgICAgIHNlbGVjdEFsbENvbnRlbnQ6IHRoaXMuc2VsZWN0QWxsQ29udGVudC5iaW5kKHRoaXMpXG4gICAgfSk7XG4gICAgdGhpcy5pbml0KCk7XG5cbiAgICB0aGlzLmluaXRFdmVudCgnZm9jdXMnLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpLnN1YnNjcmliZSgoZTogSUV2ZW50KSA9PiB0aGlzLm91dEZvY3VzQW5kQmx1ckV2ZW50LmVtaXQoeyBuYW1lOiAnZm9jdXMnLCBldmVudDogZSB9KSk7XG4gICAgdGhpcy5pbml0RXZlbnQoJ2JsdXInLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpLnN1YnNjcmliZSgoZTogSUV2ZW50KSA9PiB0aGlzLm91dEZvY3VzQW5kQmx1ckV2ZW50LmVtaXQoeyBuYW1lOiAnYmx1cicsIGV2ZW50OiBlIH0pKTtcbiAgICBjb25zdCBtb3VzZURvd25FdmVudCA9IHRoaXMuaW5pdEV2ZW50KCdtb3VzZWRvd24nLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpLnBpcGUodGFrZSgxKSk7XG4gICAgY29uc3Qga2V5RG93bkV2ZW50ID0gdGhpcy5pbml0RXZlbnQoJ2tleWRvd24nLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpO1xuICAgIGNvbnN0IGlucHV0RXZlbnQgPSB0aGlzLmluaXRFdmVudCgnaW5wdXQnLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpO1xuICAgIGNvbnN0IGN1dEV2ZW50ID0gdGhpcy5pbml0RXZlbnQoJ2N1dCcsIHRoaXMuaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKSk7XG4gICAgY29uc3QgcGFzdGVFdmVudCA9IHRoaXMuaW5pdEV2ZW50KCdwYXN0ZScsIHRoaXMuaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKSk7XG4gICAgY29uc3Qga2V5dXBFdmVudCA9IHRoaXMuaW5pdEV2ZW50KCdrZXl1cCcsIHRoaXMuaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKSk7XG5cbiAgICB0aGlzLmluaXRFdmVudCgnY2xpY2snLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkgPz8gdHJ1ZSkuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbml0RXZlbnQoJ2RyYWdvdmVyJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKS5waXBlKHRhcCgoZXZlbnQ6IElFdmVudCkgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JztcbiAgICAgIH1cbiAgICB9KSkuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmluaXRFdmVudCgnZHJvcCcsIHRoaXMuaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKSkuc3Vic2NyaWJlKHRoaXMuY2hlY2tBbmRFbWl0RmlsZXMuYmluZCh0aGlzKSk7XG4gICAgcGFzdGVFdmVudC5zdWJzY3JpYmUodGhpcy5jaGVja0FuZEVtaXRGaWxlcy5iaW5kKHRoaXMpKTtcblxuICAgIHRoaXMuY29tYmluZU9ic2VydmFibGUobW91c2VEb3duRXZlbnQsIHBhc3RlRXZlbnQpO1xuICAgIHRoaXMuY29tYmluZU9ic2VydmFibGUobW91c2VEb3duRXZlbnQsIGN1dEV2ZW50KTtcbiAgICBrZXlEb3duRXZlbnQucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICB0YXAoKGU6IElFdmVudCkgPT4gdGhpcy5jaGVja1R5cGVOdW1iZXIoZSwgJ2tleScpKSxcbiAgICAgIG1lcmdlTWFwKCgpID0+IGlucHV0RXZlbnQpLFxuICAgICAgdGFwKChlOiBJRXZlbnQpID0+IHRoaXMuY2hlY2tUeXBlTnVtYmVyKGUsICdkYXRhJykpLFxuICAgICkuc3Vic2NyaWJlKChlOiBJRXZlbnQpID0+IHtcbiAgICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdzdHJpbmcnICYmIHRoaXMubWF4TGVuZ3RoKCkgJiYgKGUuaW5wdXRUeXBlID09PSAnaW5zZXJ0Q29tcG9zaXRpb25UZXh0JyB8fCBlLmlucHV0VHlwZSA9PT0gJ2luc2VydFRleHQnKSAmJiBlLnRhcmdldC52YWx1ZT8ubGVuZ3RoID4gKHRoaXMubWF4TGVuZ3RoKCkgfHwgMCkpIHtcbiAgICAgICAgZS50YXJnZXQudmFsdWUgPSBlLnRhcmdldC52YWx1ZS5zbGljZSgwLCB0aGlzLm1heExlbmd0aCgpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvY2Vzc0V2ZW50QW5kRW1pdFZhbHVlKGUpO1xuICAgIH0pO1xuXG4gICAga2V5dXBFdmVudC5waXBlKFxuICAgICAgZmlsdGVyKChldmVudDogSUV2ZW50KSA9PiBldmVudC5rZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5FTlRFUiksXG4gICAgICBmaWx0ZXIoKGV2ZW50OiBJRXZlbnQpID0+ICF0aGlzLnRleHRBcmVhRW50ZXJOb3ROZXdMaW5lKCkgfHwgKHRoaXMudGV4dEFyZWFFbnRlck5vdE5ld0xpbmUoKSAmJiAhZXZlbnQuc2hpZnRLZXkpKSkuc3Vic2NyaWJlKChldmVudDogSUV2ZW50KSA9PiB0aGlzLm91dEVudGVyRXZlbnQuZW1pdChldmVudCkpO1xuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ3N0cmluZycgJiYgKHRoaXMudGFnSW5wdXQoKSAhPT0gJ2lucHV0JyB8fCAodGhpcy50YWdJbnB1dCgpID09PSAnaW5wdXQnICYmIHRoaXMudGFiSW5zZXJ0Q29udGVudFRhZ0lucHV0KCkpKSkge1xuICAgICAga2V5RG93bkV2ZW50LnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZlbnQ6IElFdmVudCkgPT4gZXZlbnQua2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuVEFCKSxcbiAgICAgICAgdGFwKChldmVudDogSUV2ZW50KSA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKSxcbiAgICAgICAgZmlsdGVyKChldmVudDogSUV2ZW50KSA9PiAhZXZlbnQudGFyZ2V0LnZhbHVlIHx8ICF0aGlzLm1heExlbmd0aCgpIHx8IGV2ZW50LnRhcmdldC52YWx1ZS5sZW5ndGggPCAodGhpcy5tYXhMZW5ndGgoKSB8fCAyNSkpLFxuICAgICAgICB0YXAoKGV2ZW50OiBJRXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5yZWFkb25seSgpIHx8IHRoaXMuZGlzYWJsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaW5zZXRWYWx1ZVRvU2VsZWN0aW9uU3RhcnQoJ1xcdCcsIGV2ZW50KTtcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGV4dEFyZWFFbnRlck5vdE5ld0xpbmUoKSkge1xuICAgICAga2V5RG93bkV2ZW50LnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZlbnQ6IElFdmVudCkgPT4gZXZlbnQua2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuRU5URVIgJiYgIWV2ZW50LnNoaWZ0S2V5KSxcbiAgICAgICAgdGFwKChlOiBJRXZlbnQpID0+IGUucHJldmVudERlZmF1bHQoKSlcbiAgICAgICkuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb3VudERpc3BsYXlDb21wdXRlZCgpO1xuICB9XG5cbiAgLy8gI3JlZ2lvbiBGVU5DVElPTlNcbiAgcHJpdmF0ZSB1cGRhdGVNYXhMZW5ndGhNaW5NYXhWYWx1ZUJ5RGF0YVR5cGUoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2ludCcgfHwgdGhpcy5kYXRhVHlwZSgpID09PSAnZmxvYXQnKSB7XG4gICAgICB0aGlzLm1heExlbmd0aC51cGRhdGUodmFsdWUgPT4ge1xuICAgICAgICByZXR1cm4gIXZhbHVlIHx8IHZhbHVlID4gMjEgPyAyMSA6IHZhbHVlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm1pblZhbHVlTnVtYmVyLnVwZGF0ZSh2YWx1ZSA9PiB2YWx1ZSA/PyBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUik7XG4gICAgICB0aGlzLm1heFZhbHVlTnVtYmVyLnVwZGF0ZSh2YWx1ZSA9PiB2YWx1ZSA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnKSB7XG4gICAgICB0aGlzLm1heExlbmd0aC51cGRhdGUodmFsdWUgPT4gIXZhbHVlIHx8IHZhbHVlID4gMjUgPyAyNSA6IHZhbHVlKTtcbiAgICAgIHRoaXMuZml4ZWRGbG9hdC51cGRhdGUodmFsdWUgPT4gdmFsdWUgPz8gNCk7XG4gICAgICB0aGlzLm1heExlbmd0aE51bWJlckNvdW50LnVwZGF0ZSh2YWx1ZSA9PiB2YWx1ZSA/PyAxOSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRFbGVtZW50VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuRWxlbWVudD8udmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQW5kRW1pdEZpbGVzKGV2ZW50OiBJRXZlbnQpIHtcbiAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXMgfHwgZXZlbnQuY2xpcGJvYXJkRGF0YT8uZmlsZXM7XG4gICAgY29uc3QgdGV4dCA9IChldmVudC5jbGlwYm9hcmREYXRhIHx8ICh3aW5kb3cgYXMgYW55KS5jbGlwYm9hcmREYXRhKT8uZ2V0RGF0YSgndGV4dCcpO1xuXG4gICAgdGhpcy5kYXRhVGV4dFBhc3RlLnNldCh0ZXh0KTtcbiAgICBpZiAoIWZpbGVzIHx8ICFmaWxlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBmaWxlTGlzdCA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIEFycmF5LmZyb20oZmlsZXMpKSB7XG4gICAgICBpZiAoaXNUeXBlRmlsZShmaWxlKSkge1xuICAgICAgICB0aGlzLm91dEZpbGVEcm9wLmVtaXQoZmlsZSk7XG4gICAgICAgIGZpbGVMaXN0LnB1c2goZmlsZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub3V0RmlsZXNEcm9wLmVtaXQoZmlsZUxpc3QpO1xuXG4gIH1cblxuICBwcml2YXRlIGluc2V0VmFsdWVUb1NlbGVjdGlvblN0YXJ0KHRleHQ6IHN0cmluZywgZXZlbnQ6IElFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5FbGVtZW50LnNldFJhbmdlVGV4dCh0ZXh0LCB0aGlzLkVsZW1lbnQuc2VsZWN0aW9uU3RhcnQsIHRoaXMuRWxlbWVudC5zZWxlY3Rpb25TdGFydCwgJ2VuZCcpO1xuICAgIHRoaXMucHJvY2Vzc0V2ZW50QW5kRW1pdFZhbHVlKGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IEVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRJZnJhbWVSZWYoKT8ubmF0aXZlRWxlbWVudCB8fCB0aGlzLmlucHV0UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZVZhbHVlKGRhdGE6IElTb3J0KSB7XG4gICAgZGF0YS5yZXNldCgpO1xuICAgIGlmICh0aGlzLmRpc2FibGUoKSB8fCB0aGlzLnJlYWRvbmx5KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3BlcmF0b3IgPSBkYXRhLm1vZGUgPT09ICdhc2MnID8gMSA6IC0xO1xuICAgIGxldCB2YWx1ZSA9ICt0aGlzLnZhbHVlKCkgfHwgMDtcbiAgICBjb25zdCBzZXBhcmF0b3IgPSBVdGlsc0NhY2hlLmdldExhbmcoKSA9PT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5WSSA/ICcuJyA6ICcsJztcbiAgICBjb25zdCBzcGxpdFZhbHVlID0gKHRoaXMudmFsdWUoKSB8fCB0aGlzLm1pblZhbHVlTnVtYmVyKCkgfHwgMCkudG9TdHJpbmcoKS5zcGxpdChzZXBhcmF0b3IpO1xuICAgIGNvbnN0IGRhdGFCZWhpbmRTZXBhcmF0b3IgPSBzcGxpdFZhbHVlPy5bMV07XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50Jykge1xuICAgICAgdmFsdWUgPSArKHNwbGl0VmFsdWU/LlswXSB8fCAwKTtcbiAgICB9XG4gICAgdmFsdWUgPSB2YWx1ZSArICh0aGlzLnZhbHVlVXBEb3duTnVtYmVyKCkgPz8gMSkgKiBvcGVyYXRvcjtcbiAgICBpZiAoIXRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmIHZhbHVlIDwgMCkge1xuICAgICAgdmFsdWUgPSAwO1xuICAgIH1cbiAgICBjb25zdCBkYXRhRW1pdCA9IHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcgPyBgJHt2YWx1ZX0ke2RhdGFCZWhpbmRTZXBhcmF0b3IgPyBzZXBhcmF0b3IgOiAnJ30ke2RhdGFCZWhpbmRTZXBhcmF0b3J9YCA6IHZhbHVlO1xuICAgIHRoaXMudmFsdWUuc2V0KGRhdGFFbWl0KVxuICAgIHRoaXMub3V0Q2hhbmdlLmVtaXQoZGF0YUVtaXQpO1xuICAgIHRoaXMub3V0Q2hhbmdlVmFsdWVCeUJ1dHRvblVwRG93bi5lbWl0KCk7XG4gICAgdGhpcy5jaGVja0FuZERpc2FibGVVcERvd25CdXR0b24odmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJFdmVudEljb25MZWZ0KGU6IEV2ZW50LCBldmVudE5hbWU6IHN0cmluZykge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCh0aGlzLmRpc2FibGUoKSB8fCB0aGlzLnJlYWRvbmx5KCkpICYmICF0aGlzLmFjY2VwdE9ubHlDbGlja0ljb24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm91dEljb25MZWZ0LmVtaXQoZXZlbnROYW1lKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRXZlbnRJY29uUmlnaHQoZTogRXZlbnQsIGV2ZW50TmFtZTogc3RyaW5nKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoKHRoaXMuZGlzYWJsZSgpIHx8IHRoaXMucmVhZG9ubHkoKSkgJiYgIXRoaXMuYWNjZXB0T25seUNsaWNrSWNvbigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3V0SWNvblJpZ2h0LmVtaXQoZXZlbnROYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tBbmREaXNhYmxlVXBEb3duQnV0dG9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpICE9PSAnaW50JyAmJiB0aGlzLmRhdGFUeXBlKCkgIT09ICdmbG9hdCcgJiYgdGhpcy5kYXRhVHlwZSgpICE9PSAnYmlnaW50Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRpc2FibGVBc2Muc2V0KGZhbHNlKTtcbiAgICB0aGlzLmRpc2FibGVEZXNjLnNldChmYWxzZSk7XG4gICAgdGhpcy5taW5WYWx1ZU51bWJlci51cGRhdGUodmFsdWUgPT4gdmFsdWUgPz8gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpO1xuICAgIHRoaXMubWF4VmFsdWVOdW1iZXIudXBkYXRlKHZhbHVlID0+IHZhbHVlID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcbiAgICB2YWx1ZSA9IHZhbHVlID8/IDA7XG5cbiAgICBpZiAoIWlzTmlsKHRoaXMubWF4VmFsdWVOdW1iZXIoKSkgJiYgdmFsdWUgPj0gKHRoaXMubWF4VmFsdWVOdW1iZXIoKSA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpIHtcbiAgICAgIHRoaXMuZGlzYWJsZUFzYy5zZXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCFpc05pbCh0aGlzLm1pblZhbHVlTnVtYmVyKCkpICYmIHZhbHVlIDw9ICh0aGlzLm1pblZhbHVlTnVtYmVyKCkgfHwgMCkpIHtcbiAgICAgIHRoaXMuZGlzYWJsZURlc2Muc2V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0RXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIGlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50PzogYm9vbGVhbik6IE9ic2VydmFibGU8SUV2ZW50PiB7XG4gICAgcmV0dXJuIGZyb21FdmVudDxJRXZlbnQ+KHRoaXMuRWxlbWVudCwgZXZlbnROYW1lKS5waXBlKFxuICAgICAgdGFwKChlOiBJRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCkge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vdXRJbnB1dEV2ZW50LmVtaXQoZSk7XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAmJiB0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnKSB7XG4gICAgICBjb25zdCBzZXBhcmF0b3IgPSAoVXRpbHNDYWNoZS5nZXRMYW5nKCkgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVkkpID8gJy4nIDogJywnO1xuICAgICAgbGV0IFtpbnQsIGRlY2ltYWxdID0gdmFsdWUuc3BsaXQoc2VwYXJhdG9yKTtcbiAgICAgIGNvbnN0IGRlY2ltYWxTcGxpdCA9IGRlY2ltYWwgPyBkZWNpbWFsLnNwbGl0KCcnKSA6IFtdO1xuICAgICAgY29uc3QgZGVjaW1hbEV2ZXJ5WmVybyA9IGRlY2ltYWxTcGxpdC5ldmVyeShpdGVtID0+IGl0ZW0gPT09ICcwJyk7XG5cbiAgICAgIGlmIChpbnQgPT09ICctMCcgJiYgKCFkZWNpbWFsIHx8IGRlY2ltYWxFdmVyeVplcm8pKSB7XG4gICAgICAgIGludCA9ICcwJztcbiAgICAgIH1cbiAgICAgIGlmICghZGVjaW1hbCB8fCBkZWNpbWFsRXZlcnlaZXJvKSB7XG4gICAgICAgIGRlY2ltYWwgPSAnMCc7XG4gICAgICB9XG4gICAgICBpZiAoZGVjaW1hbFNwbGl0LnNvbWUoaXRlbSA9PiBpdGVtICE9PSAnMCcpKSB7XG4gICAgICAgIGNvbnN0IGRlY2ltYWxSZXZlcnNlID0gZGVjaW1hbFNwbGl0LnJldmVyc2UoKS5qb2luKCcnKTtcblxuICAgICAgICBkZWNpbWFsID0gZGVjaW1hbFJldmVyc2UucmVwbGFjZSgvKF5bMF0rKS8sICcnKS5zcGxpdCgnJykucmV2ZXJzZSgpLmpvaW4oJycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7aW50fSR7c2VwYXJhdG9yfSR7ZGVjaW1hbH1gO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdCgpIHtcbiAgICBpZiAoIXRoaXMubWF4TGVuZ3RoKCkpIHtcbiAgICAgIHRoaXMudXBkYXRlTWF4TGVuZ3RoTWluTWF4VmFsdWVCeURhdGFUeXBlKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5FbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBlbGVtZW50VmFsdWUgPSB0aGlzLmNvbnZlcnRWYWx1ZShgJHt0aGlzLnZhbHVlKCkgPz8gJyd9YCk7XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpICE9PSAnc3RyaW5nJykge1xuICAgICAgZWxlbWVudFZhbHVlID0gZWxlbWVudFZhbHVlLnJlcGxhY2UoKG5ldyBSZWdFeHAoYFteMC05Liwke3RoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpID8gJy0nIDogJyd9XWAsICdnJykpLCAnJyk7XG4gICAgICBpZiAoVXRpbHNDYWNoZS5nZXRMYW5nKCkgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuRU4pIHtcbiAgICAgICAgZWxlbWVudFZhbHVlID0gZWxlbWVudFZhbHVlLnJlcGxhY2UoL1ssXS8sICcnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5FbGVtZW50LnZhbHVlID0gZWxlbWVudFZhbHVlO1xuXG4gICAgY29uc3QgZXZlbnRGYWtlOiBJRXZlbnRDdXN0b20gPSB7IHByZXZlbnREZWZhdWx0OiAoKSA9PiB7IHJldHVybiB9LCB0YXJnZXQ6IHRoaXMuRWxlbWVudCwgZGF0YTogZWxlbWVudFZhbHVlLCBmYWtlRXZlbnQ6IHRydWUgfTtcblxuICAgIHRoaXMuY2hlY2tUeXBlTnVtYmVyKGV2ZW50RmFrZSwgJ2RhdGEnKTtcbiAgICB0aGlzLnByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShldmVudEZha2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRXZlbnRBbmRFbWl0VmFsdWUoZTogSUV2ZW50IHwgSUV2ZW50Q3VzdG9tKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWU6IGFueSA9IHRoaXMucGFyc2VWYWx1ZUJ5RGF0YVR5cGUoZS50YXJnZXQudmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSAhPT0gJ3N0cmluZycgJiYgIXRoaXMuaWdub3JlQmxvY2tJbnB1dE1heFZhbHVlKCkgJiYgIWlzTmlsKHRoaXMubWF4VmFsdWVOdW1iZXIoKSkgJiYgdmFsdWUgPiAodGhpcy5tYXhWYWx1ZU51bWJlcigpIHx8IDApICYmIHRoaXMudmFsdWUoKSA8IHZhbHVlKSB7XG4gICAgICBjb25zdCB2YWx1ZURpc3BsYXkgPSB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UoYCR7dGhpcy52YWx1ZSgpfWAucmVwbGFjZSgvWy5dL2csICcsJyksIHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpLCAodGhpcy5maXhlZEZsb2F0KCkgPz8gMTQpKTtcblxuICAgICAgZS50YXJnZXQudmFsdWUgPSBgJHt0aGlzLmdldENoZWNrWmVybygrdmFsdWVEaXNwbGF5LCBlLnRhcmdldC52YWx1ZSl9JHt2YWx1ZURpc3BsYXl9YDtcblxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0V2ZW50QW5kRW1pdFZhbHVlKGUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpICE9PSAnc3RyaW5nJyAmJiBpc05pbCh2YWx1ZSkpIHtcbiAgICAgIGUudGFyZ2V0LnZhbHVlID0gMDtcblxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0V2ZW50QW5kRW1pdFZhbHVlKGUpO1xuICAgIH1cblxuICAgIGlmIChlLmZha2VFdmVudCAmJiAoYCR7dGhpcy52YWx1ZSgpID8/ICcnfWAgPT09IGAke3ZhbHVlfWAgfHwgKHRoaXMuZW1pdEVtcHR5SW5EYXRhVHlwZU51bWJlcigpICYmIGUudGFyZ2V0LnZhbHVlLnRyaW0oKSA9PT0gJycpKSkge1xuICAgICAgdGhpcy5jaGVja0FuZERpc2FibGVVcERvd25CdXR0b24odGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50JyA/IHZhbHVlIDogK3ZhbHVlKTtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRvckhlaWdodFRleHRBcmVhKGUpO1xuICAgICAgfSwgMjUwKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlLnNldCh2YWx1ZSk7XG4gICAgaWYgKHRoaXMuZW1pdEVtcHR5SW5EYXRhVHlwZU51bWJlcigpICYmIGUudGFyZ2V0LnZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIGNvbnN0IGRhdGFFbWl0ID0gdGhpcy5kYXRhVHlwZSgpID09PSAnc3RyaW5nJyA/ICcnIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy52YWx1ZS5zZXQoZGF0YUVtaXQgYXMgYW55KTtcbiAgICB9XG4gICAgdGhpcy5vdXRDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKCkpO1xuICAgIHRoaXMuY2hlY2tBbmREaXNhYmxlVXBEb3duQnV0dG9uKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcgPyB2YWx1ZSA6ICt2YWx1ZSk7XG4gICAgdGhpcy5jYWxjdWxhdG9ySGVpZ2h0VGV4dEFyZWEoZSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrTWF4TGVuZ3RoTnVtYmVyQW5kU2V0VmFsdWUodmFsdWVEaXNwbGF5OiBzdHJpbmcsIGU6IElFdmVudCB8IElFdmVudEN1c3RvbSk6IGJvb2xlYW4ge1xuICAgIGlmIChpc05pbCh0aGlzLnZhbHVlKCkpIHx8ICgrdGhpcy52YWx1ZSgpID4gMCAmJiB0aGlzLnBhcnNlVmFsdWVCeURhdGFUeXBlKHZhbHVlRGlzcGxheSkgPCB0aGlzLnZhbHVlKCkpIHx8ICgrdGhpcy52YWx1ZSgpIDwgMCAmJiB0aGlzLnBhcnNlVmFsdWVCeURhdGFUeXBlKHZhbHVlRGlzcGxheSkgPiB0aGlzLnZhbHVlKCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlQ29tcGFyZSA9IGZvcm1hdE51bWJlcih2YWx1ZURpc3BsYXkpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgbnVtYmVycyA9IHZhbHVlQ29tcGFyZS5zcGxpdCgnLicpO1xuICAgIGxldCBsZW5ndGhWYWx1ZUNvbXBhcmUgPSAwO1xuICAgIGxldCBtYXhMZW5ndGggPSAodGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgdHlwZW9mICt0aGlzLnZhbHVlKCkgPT09ICdudW1iZXInICYmICt0aGlzLnZhbHVlKCkgPCAwKSA/ICh0aGlzLm1heExlbmd0aCgpIHx8IDIxKSArIDEgOiAodGhpcy5tYXhMZW5ndGgoKSB8fCAyMSk7XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnZmxvYXQnKSB7XG4gICAgICBtYXhMZW5ndGgtLTtcbiAgICB9XG4gICAgaWYgKG51bWJlcnMgJiYgbnVtYmVyc1swXSkge1xuICAgICAgbGVuZ3RoVmFsdWVDb21wYXJlID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKGAke251bWJlcnNbMF19YC5yZXBsYWNlKC9bLl0vZywgJywnKSwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksICh0aGlzLmZpeGVkRmxvYXQoKSA/PyAxNCkpLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKG51bWJlcnMgJiYgbnVtYmVyc1sxXSkge1xuICAgICAgbGVuZ3RoVmFsdWVDb21wYXJlICs9IDEgKyBudW1iZXJzWzFdLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKG1heExlbmd0aCAmJiBsZW5ndGhWYWx1ZUNvbXBhcmUgPj0gbWF4TGVuZ3RoKSB7XG4gICAgICBjb25zdCB2YWx1ZURpc3BsYXkgPSB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UoKGxlbmd0aFZhbHVlQ29tcGFyZSA9PT0gbWF4TGVuZ3RoID8gdmFsdWVDb21wYXJlIDogYCR7dGhpcy52YWx1ZSgpfWApLnJlcGxhY2UoL1suXS9nLCAnLCcpLCB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSwgKHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KSk7XG5cbiAgICAgIGUudGFyZ2V0LnZhbHVlID0gYCR7dGhpcy5nZXRDaGVja1plcm8oK3ZhbHVlRGlzcGxheSwgZS50YXJnZXQudmFsdWUpfSR7dmFsdWVEaXNwbGF5fWA7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tUeXBlTnVtYmVyKGU6IElFdmVudCB8IElFdmVudEN1c3RvbSwgZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjdXJyZW50TGFuZyA9IFV0aWxzQ2FjaGUuZ2V0TGFuZygpO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IChjdXJyZW50TGFuZyA9PT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5WSSkgPyAnLicgOiAnLCc7XG4gICAgY29uc3Qgc2VwYXJhdG9yUmV2ZXJ0ID0gKGN1cnJlbnRMYW5nID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlZJKSA/ICcsJyA6ICcuJztcbiAgICBsZXQgdmFsdWVUYXJnZXQ6IElTdHJpbmcgPSBlLnRhcmdldC52YWx1ZTtcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0IC0gMTtcbiAgICBjb25zdCB7IGRhdGEsIGtleUNvZGUgfSA9IGU7XG5cbiAgICB0aGlzLmNoYXJGaXJzdElzWmVyby5zZXQoZmFsc2UpO1xuICAgIGlmICh2YWx1ZVRhcmdldC5jaGFyQXQoMCkgPT09ICcwJykge1xuICAgICAgdGhpcy5jaGFyRmlyc3RJc1plcm8uc2V0KHRydWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAodGhpcy5hdXRvUmVtb3ZlRW1vamkoKSkge1xuICAgICAgICBlLnRhcmdldC52YWx1ZSA9IHJlbW92ZUVtb2ppKHZhbHVlVGFyZ2V0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoL1swLTldL2cudGVzdChkYXRhKSAmJiB2YWx1ZVRhcmdldC5jaGFyQXQoc2VsZWN0aW9uU3RhcnQgKyAxKSA9PT0gJy0nKSB7XG4gICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2VBdCgwLCAnJykgYXMgSVN0cmluZztcbiAgICB9XG4gICAgbGV0IHN0clJlZ2V4ID0gYFteMC05Liwke3RoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpID8gJy0nIDogJyd9XWA7XG5cbiAgICBpZiAoKG5ldyBSZWdFeHAoc3RyUmVnZXgsICdnaScpKS50ZXN0KChlIGFzIGFueSlbZmllbGROYW1lXSkgJiYga2V5Q29kZSAhPT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuQkFDS1NQQUNFKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnRhcmdldC52YWx1ZSA9IHZhbHVlVGFyZ2V0ID0gZS50YXJnZXQudmFsdWUucmVwbGFjZSgobmV3IFJlZ0V4cChzdHJSZWdleCwgJ2dpJykpLCAnJykgYXMgSVN0cmluZztcbiAgICB9XG4gICAgaWYgKCFlLmZha2VFdmVudCkge1xuICAgICAgc3dpdGNoIChkYXRhKSB7XG4gICAgICAgIGNhc2Ugc2VwYXJhdG9yOlxuICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZSgobmV3IFJlZ0V4cChgWyR7c2VwYXJhdG9yfV1gLCAnZ2knKSksICcnKSBhcyBJU3RyaW5nO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2Ugc2VwYXJhdG9yUmV2ZXJ0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50TGFuZyA9PT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5WSSAmJiB0aGlzLmRhdGFUeXBlKCkgPT09ICdpbnQnKSB7XG4gICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gdmFsdWVUYXJnZXQucmVwbGFjZSgobmV3IFJlZ0V4cChgWyR7c2VwYXJhdG9yUmV2ZXJ0fV1gLCAnZ2knKSksICcnKSBhcyBJU3RyaW5nO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZVRhcmdldCA9PT0gc2VwYXJhdG9yUmV2ZXJ0KSB7XG4gICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gJyc7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlVGFyZ2V0ICYmIHZhbHVlVGFyZ2V0Lmxlbmd0aCA9PT0gMiAmJiB2YWx1ZVRhcmdldC5jaGFyQXQoMCkgPT09ICctJyAmJiBkYXRhICYmICEvWzAtOV0vZy50ZXN0KGRhdGEpKSB7XG4gICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gJy0nO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9jY3VycmVuY2VzQnlDaGFyYWN0ZXIgPSB2YWx1ZVRhcmdldC5vY2N1cnJlbmNlc0J5Q2hhcmFjdGVyKHNlcGFyYXRvclJldmVydCk7XG5cbiAgICAgICAgICAgIGlmIChvY2N1cnJlbmNlc0J5Q2hhcmFjdGVyID4gMSkge1xuICAgICAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2VBdChlLnRhcmdldC5zZWxlY3Rpb25TdGFydCAtIDEsICcnKSBhcyBJU3RyaW5nO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBtYXhMZW5ndGggPSB0aGlzLmRhdGFUeXBlKCkgPT09ICdmbG9hdCcgPyAodGhpcy5tYXhMZW5ndGgoKSB8fCAyMSkgLSAxIDogKHRoaXMubWF4TGVuZ3RoKCkgfHwgMjEpO1xuXG4gICAgICAgICAgICBpZiAodmFsdWVUYXJnZXQuaW5kZXhPZignLScpID49IDApIHtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2NjdXJyZW5jZXNCeUNoYXJhY3RlciA9PT0gMSAmJiB2YWx1ZVRhcmdldC5sZW5ndGggPT09IG1heExlbmd0aCAmJiB2YWx1ZVRhcmdldC5pbmRleE9mKHNlcGFyYXRvclJldmVydCkgPT09IHZhbHVlVGFyZ2V0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlQXQoZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQgLSAxLCAnJykgYXMgSVN0cmluZztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5vbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmIHZhbHVlVGFyZ2V0ID09PSBgMCR7c2VwYXJhdG9yUmV2ZXJ0fWApIHtcbiAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSAnMCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YWx1ZVRhcmdldCA9IGZvcm1hdE51bWJlcih2YWx1ZVRhcmdldCkgYXMgSVN0cmluZztcbiAgICB9XG4gICAgY29uc3QgaW5kZXhlc09mRGFzaCA9IHZhbHVlVGFyZ2V0LmluZGV4ZXNPZkNoYXJhY3Rlcj8uKCctJykgfHwgW107XG5cbiAgICBpZiAoaW5kZXhlc09mRGFzaC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IFtmaXJzdEluZGV4LCBzZWNvbmRJbmRleF0gPSBpbmRleGVzT2ZEYXNoO1xuICAgICAgY29uc3QgaW5kZXhSZXBsYWNlID0gZmlyc3RJbmRleCB8fCBzZWNvbmRJbmRleDsgLy8gZmlyc3RJbmRleD0wIHRow6wga28geMOzYVxuXG4gICAgICBpZiAoaW5kZXhSZXBsYWNlKSB7XG4gICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZUFsbChpbmRleFJlcGxhY2UsICctJywgJycpIGFzIElTdHJpbmc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiB2YWx1ZVRhcmdldCA9PT0gJy0nKSB7XG4gICAgICBlLnRhcmdldC52YWx1ZSA9IHZhbHVlVGFyZ2V0O1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5kYXRhVHlwZSgpKSB7XG4gICAgICBjYXNlICdpbnQnOlxuICAgICAgICB7XG4gICAgICAgICAgc3RyUmVnZXggPSBgW14wLTkke3RoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpID8gJy0nIDogJyd9XWA7XG4gICAgICAgICAgaWYgKCFlLmZha2VFdmVudCkge1xuICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlKG5ldyBSZWdFeHAoc3RyUmVnZXgsICdnaScpLCAnJykgYXMgSVN0cmluZztcbiAgICAgICAgICAgIGNvbnN0IG1heFRvdGFsTnVtYmVyID0gdmFsdWVUYXJnZXQuaW5jbHVkZXMoJy0nKSA/IDE3IDogMTY7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZVRhcmdldC5sZW5ndGggPiBtYXhUb3RhbE51bWJlcikge1xuICAgICAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnNsaWNlKDAsIG1heFRvdGFsTnVtYmVyKSBhcyBJU3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKHBhcnNlSW50KHZhbHVlVGFyZ2V0KSkgPiAodGhpcy5tYXhWYWx1ZU51bWJlcigpID8/IDkwMDcxOTkyNTQ3NDA5OTEpKSB7XG4gICAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQuc2xpY2UoMCwgbWF4VG90YWxOdW1iZXIgLSAxKSBhcyBJU3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMub25seUFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiB2YWx1ZVRhcmdldFswXSAhPT0gJy0nICYmIHZhbHVlVGFyZ2V0WzBdICE9PSAnMCcpIHtcbiAgICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSAnJyBhcyBJU3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlVGFyZ2V0ICYmIC8oXi0pPyheWzBdKykvLnRlc3QodmFsdWVUYXJnZXQpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGlkID0gdXVpZCgpO1xuXG4gICAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZSgvKF4tKT8oXlswXSspLywgYCQxJHtpZH1gKS5yZXBsYWNlKGlkLCAnMCcpIGFzIElTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWVUYXJnZXQgPT09ICctMCcpIHtcbiAgICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSAnMCcgYXMgSVN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZVRhcmdldCAmJiAvKF5bMF0pKFsxLTldKShbMC05XSspPy8udGVzdCh2YWx1ZVRhcmdldCkpIHtcbiAgICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlKC8oXlswXSkoWzEtOV0pKFswLTldKyk/LywgJyQyJDMnKSBhcyBJU3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmFsdWVEaXNwbGF5ID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKHZhbHVlVGFyZ2V0LCAodGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgfHwgZmFsc2UpLCAwKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tNYXhMZW5ndGhOdW1iZXJBbmRTZXRWYWx1ZSh2YWx1ZURpc3BsYXksIGUpKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSBgJHt0aGlzLmdldENoZWNrWmVybygrdmFsdWVEaXNwbGF5LCBlLnRhcmdldC52YWx1ZSl9JHt2YWx1ZURpc3BsYXl9YDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpbmRleE9mRG90ID0gdmFsdWVUYXJnZXQuaW5kZXhPZignLicpO1xuICAgICAgICAgIGNvbnN0IGluZGV4T2ZDb21tYSA9IHZhbHVlVGFyZ2V0LmluZGV4T2YoJywnKTtcbiAgICAgICAgICBsZXQgaW5kZXhDaG9vc2UgPSBpbmRleE9mRG90O1xuXG4gICAgICAgICAgaWYgKGluZGV4T2ZEb3QgPCAwIHx8IGluZGV4T2ZEb3QgPiBpbmRleE9mQ29tbWEpIHtcbiAgICAgICAgICAgIGluZGV4Q2hvb3NlID0gaW5kZXhPZkNvbW1hO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW5kZXhDaG9vc2UgPj0gMCkge1xuICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5zdWJzdHJpbmcoMCwgaW5kZXhDaG9vc2UpIGFzIElTdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHZhbHVlRGlzcGxheSA9IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSh2YWx1ZVRhcmdldCwgKHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpIHx8IGZhbHNlKSwgMCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5jaGVja01heExlbmd0aE51bWJlckFuZFNldFZhbHVlKHZhbHVlRGlzcGxheSwgZSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9IGAke3RoaXMuZ2V0Q2hlY2taZXJvKCt2YWx1ZURpc3BsYXksIGUudGFyZ2V0LnZhbHVlKX0ke3ZhbHVlRGlzcGxheX1gO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2Zsb2F0JzpcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgICB0aGlzLmdldFZhbHVlRm9ybWF0KGUsIHZhbHVlVGFyZ2V0LCBzZXBhcmF0b3IsIHNlcGFyYXRvclJldmVydCwgY3VycmVudExhbmcpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHZhbHVlVGFyZ2V0ID09PSAnTmFOJykge1xuICAgICAgZS50YXJnZXQudmFsdWUgPSAnJyBhcyBJU3RyaW5nO1xuICAgIH1cbiAgICBpZiAoZS5mYWtlRXZlbnQgfHwgZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihlLCBzZWxlY3Rpb25TdGFydCArIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZUZvcm1hdChlOiBJRXZlbnQgfCBJRXZlbnRDdXN0b20sIHZhbHVlVGFyZ2V0OiBJU3RyaW5nLCBzZXBhcmF0b3I6ICcuJyB8ICcsJywgc2VwYXJhdG9yUmV2ZXJ0OiAnLicgfCAnLCcsIGN1cnJlbnRMYW5nOiBzdHJpbmcpIHtcbiAgICBsZXQgc3RyUmVnZXggPSBgW14wLTkke3NlcGFyYXRvcn0ke2N1cnJlbnRMYW5nID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLkVOID8gJy4nIDogJyd9JHt0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSA/ICctJyA6ICcnfV1gO1xuXG4gICAgaWYgKCFlLmZha2VFdmVudCkge1xuICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlKG5ldyBSZWdFeHAoc3RyUmVnZXgsICdnaScpLCAnJykgYXMgSVN0cmluZztcbiAgICB9XG4gICAgY29uc3QgaW5kZXhlc09mU2VwYXJhdG9yID0gdmFsdWVUYXJnZXQuaW5kZXhlc09mQ2hhcmFjdGVyKHNlcGFyYXRvcik7XG4gICAgY29uc3QgW2ZpcnN0SW5kZXgsIHNlY29uZEluZGV4XSA9IGluZGV4ZXNPZlNlcGFyYXRvcjtcblxuICAgIGlmIChzZWNvbmRJbmRleCkge1xuICAgICAgdmFsdWVUYXJnZXQgPSBlLnRhcmdldC52YWx1ZS5yZXBsYWNlQWxsKHNlY29uZEluZGV4LCBzZXBhcmF0b3IsICcnKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0SW5kZXggJiYgdmFsdWVUYXJnZXQuc3Vic3RyaW5nKGZpcnN0SW5kZXggKyAxKS5sZW5ndGggPj0gKHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KSkge1xuICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5zdWJzdHJpbmcoMCwgZmlyc3RJbmRleCArICh0aGlzLmZpeGVkRmxvYXQoKSA/PyAxNCkgKyAxKSBhcyBJU3RyaW5nO1xuICAgIH1cbiAgICBzdHJSZWdleCA9IGBbJHtzZXBhcmF0b3J9XWA7XG4gICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlKG5ldyBSZWdFeHAoc3RyUmVnZXgsICdnJyksIHNlcGFyYXRvclJldmVydCkgYXMgSVN0cmluZztcbiAgICBsZXQgdmFsdWVGb3JtYXQgPSAnJztcbiAgICBsZXQgW2ZvbnRTZXBhcmF0b3JOdW1iZXIsIGJlaGluZFNlcGFyYXRvck51bWJlcl0gPSB2YWx1ZVRhcmdldC5zcGxpdChzZXBhcmF0b3JSZXZlcnQpO1xuICAgIGxldCBtYXhGb250VG90YWxOdW1iZXIgPSAoZm9udFNlcGFyYXRvck51bWJlciAmJiBmb250U2VwYXJhdG9yTnVtYmVyLmluY2x1ZGVzKCctJykpID8gMTYgOiAxNTtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnKSB7XG4gICAgICBtYXhGb250VG90YWxOdW1iZXIgPSAodGhpcy5tYXhMZW5ndGhOdW1iZXJDb3VudCgpID8/IDE5KSAtICh0aGlzLmZpeGVkRmxvYXQoKSA/PyA0KSArIChmb250U2VwYXJhdG9yTnVtYmVyLmluY2x1ZGVzKCctJykgPyAxIDogMCk7XG4gICAgfVxuICAgIGNvbnN0IGZvbnRPdmVyTWF4VG90YWxOdW1iZXIgPSBmb250U2VwYXJhdG9yTnVtYmVyICYmIGZvbnRTZXBhcmF0b3JOdW1iZXIubGVuZ3RoID49IG1heEZvbnRUb3RhbE51bWJlcjtcblxuICAgIGlmIChmb250T3Zlck1heFRvdGFsTnVtYmVyKSB7XG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gZm9udFNlcGFyYXRvck51bWJlci5zbGljZSgwLCBtYXhGb250VG90YWxOdW1iZXIpIGFzIElTdHJpbmc7XG4gICAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnZmxvYXQnKSB7XG4gICAgICAgIGJlaGluZFNlcGFyYXRvck51bWJlciA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgICBzd2l0Y2ggKHRoaXMuZGF0YVR5cGUoKSkge1xuICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICBpZiAoIWZvbnRPdmVyTWF4VG90YWxOdW1iZXIgJiYgYmVoaW5kU2VwYXJhdG9yTnVtYmVyICYmIGJlaGluZFNlcGFyYXRvck51bWJlci5sZW5ndGgpIHtcbiAgICAgICAgICBiZWhpbmRTZXBhcmF0b3JOdW1iZXIgPSBiZWhpbmRTZXBhcmF0b3JOdW1iZXIuc2xpY2UoMCwgbWF4Rm9udFRvdGFsTnVtYmVyIC0gZm9udFNlcGFyYXRvck51bWJlci5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGJlaGluZFNlcGFyYXRvck51bWJlciA9IGAke2JlaGluZFNlcGFyYXRvck51bWJlciA/PyAnJ31gO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnYmlnaW50JzpcbiAgICAgICAgaWYgKGJlaGluZFNlcGFyYXRvck51bWJlciAmJiBiZWhpbmRTZXBhcmF0b3JOdW1iZXIubGVuZ3RoICYmIGJlaGluZFNlcGFyYXRvck51bWJlci5sZW5ndGggPiAodGhpcy5maXhlZEZsb2F0KCkgPz8gNCkpIHtcbiAgICAgICAgICBiZWhpbmRTZXBhcmF0b3JOdW1iZXIgPSBiZWhpbmRTZXBhcmF0b3JOdW1iZXIuc2xpY2UoMCwgKHRoaXMuZml4ZWRGbG9hdCgpID8/IDQpKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgY29uc3QgaW5kZXhPZlNlcGFyYXRvclJldmVydCA9IHZhbHVlVGFyZ2V0LmluZGV4T2Yoc2VwYXJhdG9yUmV2ZXJ0KTtcblxuICAgIGlmICh0aGlzLm9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgZm9udFNlcGFyYXRvck51bWJlclswXSAhPT0gJy0nICYmIGZvbnRTZXBhcmF0b3JOdW1iZXJbMF0gIT09ICcwJykge1xuICAgICAgZm9udFNlcGFyYXRvck51bWJlciA9ICcnO1xuICAgIH1cbiAgICBpZiAodGhpcy5vbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmIGluZGV4T2ZTZXBhcmF0b3JSZXZlcnQgPj0gMCAmJiBmb250U2VwYXJhdG9yTnVtYmVyWzBdICE9PSAnLScpIHtcbiAgICAgIGZvbnRTZXBhcmF0b3JOdW1iZXIgPSAnMCc7XG4gICAgICBiZWhpbmRTZXBhcmF0b3JOdW1iZXIgPSB0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnID8gJzAnIDogJyc7XG4gICAgfVxuICAgIGlmIChmb250U2VwYXJhdG9yTnVtYmVyICYmIC8oXi0pKFswXSspLy50ZXN0KGZvbnRTZXBhcmF0b3JOdW1iZXIpKSB7XG4gICAgICBjb25zdCBpZCA9IHV1aWQoKTtcblxuICAgICAgZm9udFNlcGFyYXRvck51bWJlciA9IGZvbnRTZXBhcmF0b3JOdW1iZXIucmVwbGFjZSgvKF4tKShbMF0rKS8sIGAkMSR7aWR9YCkucmVwbGFjZShpZCwgJzAnKTtcbiAgICB9XG4gICAgaWYgKGZvbnRTZXBhcmF0b3JOdW1iZXIgJiYgLyheWzBdKykvLnRlc3QoZm9udFNlcGFyYXRvck51bWJlcikpIHtcbiAgICAgIGZvbnRTZXBhcmF0b3JOdW1iZXIgPSBmb250U2VwYXJhdG9yTnVtYmVyLnJlcGxhY2UoLyheWzBdKykvLCAnMCcpO1xuICAgIH1cbiAgICBpZiAoLyheLSkoWzBdKykoWzEtOV0pKFswLTkuXSspPy8udGVzdChmb250U2VwYXJhdG9yTnVtYmVyKSkge1xuICAgICAgZm9udFNlcGFyYXRvck51bWJlciA9IGZvbnRTZXBhcmF0b3JOdW1iZXIucmVwbGFjZSgvKF4tKShbMF0rKShbMS05XSkoWzAtOS5dKyk/LywgJyQxJDMkNCcpO1xuICAgIH1cbiAgICBpZiAoLyheWzBdKykoWzEtOV0pKFswLTkuXSspPy8udGVzdChmb250U2VwYXJhdG9yTnVtYmVyKSkge1xuICAgICAgZm9udFNlcGFyYXRvck51bWJlciA9IGZvbnRTZXBhcmF0b3JOdW1iZXIucmVwbGFjZSgvKF5bMF0rKShbMS05XSkoWzAtOS5dKyk/LywgJyQyJDMnKTtcbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLmRhdGFUeXBlKCkpIHtcbiAgICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICAgICAgaWYgKC8oXlswXXs2fSkvLnRlc3QoYmVoaW5kU2VwYXJhdG9yTnVtYmVyKSkge1xuICAgICAgICAgIGJlaGluZFNlcGFyYXRvck51bWJlciA9IGJlaGluZFNlcGFyYXRvck51bWJlci5yZXBsYWNlKC8oXlswXXs2fSkvLCAnMDAwMDAnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnYmlnaW50JzpcbiAgICAgICAgaWYgKC8oXlswXXs0fSkvLnRlc3QoYmVoaW5kU2VwYXJhdG9yTnVtYmVyKSkge1xuICAgICAgICAgIGJlaGluZFNlcGFyYXRvck51bWJlciA9IGJlaGluZFNlcGFyYXRvck51bWJlci5yZXBsYWNlKC8oXlswXXs0fSkvLCAnMDAwMCcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoZm9udFNlcGFyYXRvck51bWJlcikge1xuICAgICAgZm9udFNlcGFyYXRvck51bWJlciA9IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZShmb250U2VwYXJhdG9yTnVtYmVyLCB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSwgKHRoaXMuZml4ZWRGbG9hdCgpID8/ICh0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnID8gNCA6IDE0KSkpO1xuICAgIH1cbiAgICBjb25zdCBoYXNTZXBhcmF0b3JSZXZlcnQgPSAodGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50JyA/IHRydWUgOiAhZm9udE92ZXJNYXhUb3RhbE51bWJlcikgJiYgaW5kZXhPZlNlcGFyYXRvclJldmVydCA+PSAwO1xuXG4gICAgdmFsdWVGb3JtYXQgPSBgJHtmb250U2VwYXJhdG9yTnVtYmVyID8/ICcnfSR7aGFzU2VwYXJhdG9yUmV2ZXJ0ID8gc2VwYXJhdG9yUmV2ZXJ0IDogJyd9JHtiZWhpbmRTZXBhcmF0b3JOdW1iZXIgPz8gJyd9YDtcbiAgICBpZiAodmFsdWVGb3JtYXQgJiYgdGhpcy5vbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmIHZhbHVlRm9ybWF0WzBdICE9PSAnLScgJiYgdmFsdWVGb3JtYXRbMF0gIT09ICcwJykge1xuICAgICAgdmFsdWVGb3JtYXQgPSAnMCc7XG4gICAgfVxuICAgIGlmICh0aGlzLmNoZWNrTWF4TGVuZ3RoTnVtYmVyQW5kU2V0VmFsdWUodmFsdWVGb3JtYXQsIGUpKSB7XG4gICAgICB2YWx1ZVRhcmdldCA9IGUudGFyZ2V0LnZhbHVlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhbHVlVGFyZ2V0ID0gZS50YXJnZXQudmFsdWUgPSB2YWx1ZUZvcm1hdCBhcyBJU3RyaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDaGVja1plcm8odmFsdWU6IG51bWJlciwgdGFyZ2V0Q3VycmVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgemVybyA9ICcnO1xuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSAhPT0gJ2ludCcpIHtcbiAgICAgIHJldHVybiB6ZXJvO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoYXJGaXJzdElzWmVybygpICYmIHRoaXMua2VlcFplcm9JblR5cGVJbnQoKSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgICAgemVybyA9ICcwJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGFyRmlyc3RJc1plcm8oKSAmJiB0aGlzLmF1dG9BZGRaZXJvTGVzc1RoYW4xMEluVHlwZUludCgpICYmICgodmFsdWUgPiAwICYmIHZhbHVlIDwgMTAgJiYgIS8oXjApKy8udGVzdChgJHt0YXJnZXRDdXJyZW50fWApKSB8fCAodGFyZ2V0Q3VycmVudCAmJiB0YXJnZXRDdXJyZW50Lm1hdGNoKC9eWzBdezIsfSQvKT8ubGVuZ3RoICYmIHZhbHVlID09PSAwKSkpIHtcbiAgICAgIHplcm8gPSAnMCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHplcm87XG4gIH1cblxuICBwcml2YXRlIHNldENhcmV0UG9zaXRpb24oZTogSUV2ZW50IHwgSUV2ZW50Q3VzdG9tLCBzZWxlY3Rpb25TdGFydDogbnVtYmVyKSB7XG4gICAgY29uc3QgeyBrZXlDb2RlLCBpbnB1dFR5cGUgfSA9IGU7XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuVVBfQVJST1cgfHwga2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuRE9XTl9BUlJPVyB8fCBrZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5MRUZUX0FSUk9XIHx8IGtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LlJJR0hUX0FSUk9XKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlVGFyZ2V0ID0gZS50YXJnZXQudmFsdWUucmVwbGFjZSgnLScsICcnKTtcbiAgICBsZXQgdmFsdWUgPSBVdGlsc0NhY2hlLmdldExhbmcoKSA9PT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5WSSA/IGAke3RoaXMudmFsdWUoKSB8fCAwfWAucmVwbGFjZSgnLicsICcsJykgOiBgJHt0aGlzLnZhbHVlKCkgfHwgMH1gO1xuXG4gICAgdmFsdWUgPSB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UodmFsdWUsIHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpLCAodGhpcy5maXhlZEZsb2F0KCkgPz8gMTQpKTtcbiAgICB2YWx1ZSA9IGAke3ZhbHVlfWAucmVwbGFjZSgnLScsICcnKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gdmFsdWVUYXJnZXQgJiYgdmFsdWUgIT09ICcwJyAmJiB2YWx1ZSAhPT0gJy0nKSB7XG4gICAgICBzZXRDYXJldFBvc2l0aW9uKHRoaXMuRWxlbWVudCwgc2VsZWN0aW9uU3RhcnQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGZhY3RvciA9IDA7XG4gICAgY29uc3QgZGlzdGFuY2UgPSB2YWx1ZVRhcmdldC5sZW5ndGggLSB2YWx1ZS5sZW5ndGg7XG4gICAgaWYgKGRpc3RhbmNlIDwgLTEpIHtcbiAgICAgIGZhY3RvciA9IC0xO1xuICAgIH1cbiAgICBpZiAoZGlzdGFuY2UgPiAxKSB7XG4gICAgICBmYWN0b3IgPSAxO1xuICAgIH1cbiAgICBzZWxlY3Rpb25TdGFydCArPSBmYWN0b3I7XG4gICAgaWYgKGlucHV0VHlwZSA9PT0gJ2luc2VydEZyb21QYXN0ZScgJiYgdGhpcy5kYXRhVGV4dFBhc3RlKCkpIHtcbiAgICAgIGNvbnN0IGRhdGFUZXh0RGlzcGxheSA9IGAke3ZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSh0aGlzLmRhdGFUZXh0UGFzdGUoKSwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksICh0aGlzLmZpeGVkRmxvYXQoKSA/PyAxNCkpfWA7XG4gICAgICBjb25zdCBpbmRleGVzOiBBcnJheTxudW1iZXI+ID0gZS50YXJnZXQudmFsdWUuaW5kZXhlc0J5U3RyaW5nKGRhdGFUZXh0RGlzcGxheSk7XG5cbiAgICAgIHNlbGVjdGlvblN0YXJ0IC09IGZhY3RvcjtcblxuICAgICAgaWYgKGluZGV4ZXMuc29tZShpbmRleCA9PiBpbmRleCA9PT0gc2VsZWN0aW9uU3RhcnQpIHx8ICFpbmRleGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gc2V0Q2FyZXRQb3NpdGlvbih0aGlzLkVsZW1lbnQsIHNlbGVjdGlvblN0YXJ0KTtcbiAgICAgIH1cblxuICAgICAgbGV0IG5ld1NlbGVjdGlvblN0YXJ0ID0gaW5kZXhlc1swXTtcblxuICAgICAgZm9yIChjb25zdCBpbmRleCBvZiBpbmRleGVzKSB7XG4gICAgICAgIGxldCByZXBsYWNlVmFsdWUgPSBmb3JtYXROdW1iZXIoYCR7dmFsdWVUYXJnZXQuc3Vic3RyaW5nKDAsIGluZGV4KX0ke3ZhbHVlVGFyZ2V0LnN1YnN0cmluZyhpbmRleCArIGRhdGFUZXh0RGlzcGxheS5sZW5ndGggKyAxLCB2YWx1ZVRhcmdldC5sZW5ndGgpfWApO1xuXG4gICAgICAgIHJlcGxhY2VWYWx1ZSA9IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZShyZXBsYWNlVmFsdWUsIHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpLCAodGhpcy5maXhlZEZsb2F0KCkgPz8gMTQpKTtcbiAgICAgICAgaWYgKHZhbHVlID09PSByZXBsYWNlVmFsdWUpIHtcbiAgICAgICAgICBuZXdTZWxlY3Rpb25TdGFydCA9IGluZGV4O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdTZWxlY3Rpb25TdGFydCA+PSAwKSB7XG4gICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gbmV3U2VsZWN0aW9uU3RhcnQgKyBkYXRhVGV4dERpc3BsYXkubGVuZ3RoICsgMTtcblxuICAgICAgICByZXR1cm4gc2V0Q2FyZXRQb3NpdGlvbih0aGlzLkVsZW1lbnQsIHNlbGVjdGlvblN0YXJ0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRDYXJldFBvc2l0aW9uKHRoaXMuRWxlbWVudCwgc2VsZWN0aW9uU3RhcnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVZhbHVlQnlEYXRhVHlwZSh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRoaXMuZGF0YVR5cGUoKSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuXG4gICAgICBjYXNlICdpbnQnOlxuICAgICAgICBpZiAodGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgKHZhbHVlID09PSAnLScgfHwgdmFsdWUgPT09ICcsJyB8fCB2YWx1ZSA9PT0gJy4nKSkge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICsoZm9ybWF0TnVtYmVyKHZhbHVlKSk7XG5cbiAgICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICAgICAgaWYgKHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmICh2YWx1ZSA9PT0gJy0nIHx8IHZhbHVlID09PSAnLCcgfHwgdmFsdWUgPT09ICcuJykpIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KCgrZm9ybWF0TnVtYmVyKHZhbHVlKSkudG9GaXhlZCh0aGlzLmZpeGVkRmxvYXQoKSA/PyAxNCkpO1xuXG4gICAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgICBpZiAodGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgKHZhbHVlID09PSAnLScgfHwgdmFsdWUgPT09ICcsJyB8fCB2YWx1ZSA9PT0gJy4nKSkge1xuICAgICAgICAgIHJldHVybiAnMCc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0b3JIZWlnaHRUZXh0QXJlYShlOiBJRXZlbnQgfCBJRXZlbnRDdXN0b20pIHtcbiAgICBpZiAodGhpcy50YWdJbnB1dCgpID09PSAnaW5wdXQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0O1xuXG4gICAgdGFyZ2V0LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgdGFyZ2V0LnN0eWxlLmhlaWdodCA9IGAke3RoaXMuZGVmYXVsdEhlaWdodCgpfXB4YDtcbiAgICBjb25zdCB7IHNjcm9sbEhlaWdodCB9ID0gdGFyZ2V0O1xuXG4gICAgY29uc3QgaGVpZ2h0ID0gc2Nyb2xsSGVpZ2h0ICsgMjsgLy8gIGJvcmRlciB0b3AgKyBib3R0b20gPSAyXG5cbiAgICBpZiAoIXRoaXMucHJlSGVpZ2h0QXJlYSgpICYmIHRoaXMucHJlSGVpZ2h0QXJlYSgpICE9PSBoZWlnaHQpIHtcbiAgICAgIHRoaXMub3V0SGVpZ2h0QXJlYUNoYW5nZS5lbWl0KHsgaXNDaGFuZ2U6IHRydWUsIGhlaWdodDogaGVpZ2h0IH0pO1xuICAgIH1cblxuICAgIGlmIChoZWlnaHQgPiAodGhpcy5tYXhIZWlnaHRUZXh0QXJlYSgpID8/IDMyKSkge1xuICAgICAgdGFyZ2V0LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgIH1cbiAgICBpZiAodGhpcy5pZnJhbWVSZWYpIHtcbiAgICAgIHRoaXMuaWZyYW1lUmVmLnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgfVxuICAgIHRhcmdldC5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgIHRoaXMucHJlSGVpZ2h0QXJlYS5zZXQoaGVpZ2h0KTtcblxuICB9XG5cbiAgcHJpdmF0ZSBjb21iaW5lT2JzZXJ2YWJsZShtb3VzZURvd25FdmVudDogT2JzZXJ2YWJsZTxJRXZlbnQ+LCBvYnNlcnZhYmxlTWVyZ2U6IE9ic2VydmFibGU8SUV2ZW50Pikge1xuICAgIG1vdXNlRG93bkV2ZW50LnBpcGUoXG4gICAgICBtZXJnZU1hcCgoKSA9PiBvYnNlcnZhYmxlTWVyZ2UpLFxuICAgICAgZGVib3VuY2VUaW1lKDApLFxuICAgICAgdGFwKChlOiBJRXZlbnQpID0+IHRoaXMuY2hlY2tUeXBlTnVtYmVyKGUsICdrZXknKSksXG4gICAgKS5zdWJzY3JpYmUoKGU6IElFdmVudCkgPT4gdGhpcy5wcm9jZXNzRXZlbnRBbmRFbWl0VmFsdWUoZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmb2N1cygpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuRWxlbWVudD8uZm9jdXMoKTtcbiAgICB9LCB0aGlzLmZvY3VzVGltZU91dCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYmx1cigpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuRWxlbWVudD8uYmx1cigpO1xuICAgIH0sIHRoaXMuYmx1clRpbWVPdXQoKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFkZERhdGFUb1NlbGVjdGlvbklucHV0KGRhdGE6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuRWxlbWVudDtcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IHRhcmdldC5zZWxlY3Rpb25TdGFydDtcblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5FbGVtZW50LnZhbHVlO1xuICAgIGNvbnN0IGJlZm9yZVZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIHNlbGVjdGlvblN0YXJ0KTtcbiAgICBjb25zdCBhZnRlclZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKHNlbGVjdGlvblN0YXJ0KTtcblxuICAgIHRoaXMuRWxlbWVudC52YWx1ZSA9IGAke2JlZm9yZVZhbHVlfSR7ZGF0YX0ke2FmdGVyVmFsdWV9YDtcbiAgICBzZXRDYXJldFBvc2l0aW9uKHRoaXMuRWxlbWVudCwgc2VsZWN0aW9uU3RhcnQgKyBkYXRhLnRvU3RyaW5nKCkubGVuZ3RoKTtcbiAgICBjb25zdCBldmVudEZha2U6IElFdmVudEN1c3RvbSA9IHsgcHJldmVudERlZmF1bHQ6ICgpID0+IHsgcmV0dXJuIH0sIHRhcmdldDogdGhpcy5FbGVtZW50LCBkYXRhOiAnJywgZmFrZUV2ZW50OiB0cnVlIH07XG5cbiAgICB0aGlzLnByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShldmVudEZha2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJPbkxvYWQoZTogRXZlbnQsIGVsZW1lbnQ6IEhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlmcmFtZVJlZiA9IGVsZW1lbnQ7XG4gICAgY29uc3QgaWZyYW1lOiBhbnkgPSBlbGVtZW50LmNvbnRlbnRXaW5kb3cgfHwgZWxlbWVudC5jb250ZW50RG9jdW1lbnQ7XG4gICAgdGhpcy5jb25maWdQcm9qZWN0U2VydmljZS5zZXR1cEZvbnRGYW1pbHkoaWZyYW1lLmRvY3VtZW50KTtcblxuICAgIHRoaXMuaW5wdXRJZnJhbWVSZWYuc2V0KHsgbmF0aXZlRWxlbWVudDogaWZyYW1lLmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdURVhUQVJFQScpWzBdIH0pO1xuICAgIGlmICh0aGlzLkVsZW1lbnQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuRWxlbWVudCwgJ3BsYWNlaG9sZGVyJywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5wbGFjZWhvbGRlcigpKSk7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlKCkpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5FbGVtZW50LCAnZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgfVxuICAgICAgdGhpcy5hZnRlclZpZXdJbml0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXNldFZhbHVlKCkge1xuICAgIGNvbnN0IHZhbHVlID0gJyc7XG5cbiAgICB0aGlzLkVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnZhbHVlLnNldCh2YWx1ZSk7XG4gICAgdGhpcy5vdXRDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGNvdW50RGlzcGxheUNvbXB1dGVkKCkge1xuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgIT09ICdzdHJpbmcnICYmIHRoaXMudmFsdWVVcERvd25OdW1iZXIoKSkge1xuICAgICAgdGhpcy5wYWRkaW5nUmlnaHRDdXN0b20uc2V0KCh0aGlzLmVsZW1lbnRSaWdodFJlZigpPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHx8IDApICsgMTIpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc2hvd0NvdW50KCkgfHwgdGhpcy5kYXRhVHlwZSgpICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdGhpcy52YWx1ZSgpICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuICcwJztcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnBhZGRpbmdSaWdodEN1c3RvbS5zZXQoKHRoaXMuZWxlbWVudFJpZ2h0UmVmKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgMCkgKyAxMik7XG4gICAgICBpZiAodGhpcy5zaG93Q291bnQoKSkge1xuICAgICAgICBpZiAodGhpcy50ZXh0Q291bnRSZWYoKSkge1xuICAgICAgICAgIHRoaXMucGFkZGluZ1JpZ2h0Q3VzdG9tLnNldCh0aGlzLnRleHRDb3VudFJlZigpPy5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoICsgMTYpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGFnSW5wdXQoKSA9PT0gJ2lucHV0Jykge1xuICAgICAgICAgIHRoaXMucGFkZGluZ1JpZ2h0Q3VzdG9tLnVwZGF0ZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKyAodGhpcy5lbGVtZW50UmlnaHRSZWYoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB8fCAwKTtcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYCR7dmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKCh0aGlzLnZhbHVlKCkgYXMgc3RyaW5nKS5sZW5ndGgsIGZhbHNlKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZWxlY3RBbGxDb250ZW50KCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5FbGVtZW50Py5zZWxlY3QoKTtcbiAgICB9LCB0aGlzLnNlbGVjdEFsbFRpbWVPdXQoKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGRpdiBbY2xhc3NdPVwiJ2ZsZXggcmVsYXRpdmUgIXRleHQtWyM5Y2EyYWRdICcgKyBjbGFzc0NvbnRhaW5lcklucHV0KClcIlxuICBbY2xhc3MubGlicy11aS1jb21wb25lbnRzLWlucHV0LXRleHRhcmVhLWNvbnRhaW5lcl09XCJ0YWdJbnB1dCgpID09PSAndGV4dGFyZWEnICYmIHJlc2l6ZSgpID09PSAnYXV0bydcIj5cbiAgQGlmICh0YWdJbnB1dCgpID09PSAnaW5wdXQnKSB7XG4gICAgPGlucHV0ICNpbnB1dFJlZlxuICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seS1iYWNrZ3JvdW5kXT1cInJlYWRvbmx5KClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZS1iYWNrZ3JvdW5kXT1cImRpc2FibGUoKVwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImRlZmF1bHRIZWlnaHQoKVwiXG4gICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cImRlZmF1bHRIZWlnaHQoKVwiXG4gICAgICBbc3R5bGUucGFkZGluZ1JpZ2h0LnB4LmltcG9ydGFudF09XCJwYWRkaW5nUmlnaHRDdXN0b20oKVwiXG4gICAgICBbY2xhc3Mudy1mdWxsXT1cIiFpZ25vcmVXaWR0aElucHV0MTAwKClcIlxuICAgICAgW2NsYXNzXT1cIidsaWJzLXVpLWlucHV0IGxpYnMtdWktZm9udC1oNXIgJyArIGNsYXNzSW5jbHVkZSgpXCJcbiAgICAgIFtjbGFzcy5ib3JkZXItcHJpbWFyeS1mb2N1cy1nZW5lcmFsXT1cImZvY3VzSW5wdXQoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1pbnB1dC1ub3QtYm9yZGVyXT1cIm5vQm9yZGVyKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktYmctc3BlY2lhbC1ub25lXT1cImJhY2tncm91bmROb25lKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktYm9yZGVyLWVycm9yLWdlbmVyYWxdPVwiYm9yZGVyRXJyb3IoKVwiXG4gICAgICBbY2xhc3MudGV4dC1bIzI5YzdjY11dPVwidXNlQ29sb3JNb2RlRXhpc3QoKVwiXG4gICAgICBbY2xhc3MuIXBsLVs0MHB4XV09XCJpY29uTGVmdENsYXNzKClcIlxuICAgICAgW2F0dHIubWF4TGVuZ3RoXT1cIm1heExlbmd0aCgpIHx8IHVuZGVmaW5lZFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIoKSB8IHRyYW5zbGF0ZVwiXG4gICAgICBbYXR0ci50eXBlXT1cInR5cGVJbnB1dCgpXCJcbiAgICAgIFthdHRyLmlucHV0bW9kZV09XCJtb2RlSW5wdXQoKVwiXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZSgpXCJcbiAgICAgIFthdXRvY29tcGxldGVdPVwicmVzZXRBdXRvQ29tcGxldGVQYXNzd29yZCgpPyAnbmV3LXBhc3N3b3JkJzonJ1wiIC8+XG4gIH1cbiAgQGlmICh0YWdJbnB1dCgpID09PSAndGV4dGFyZWEnKSB7XG4gICAgQGlmIChyZXNpemUoKSA9PT0gJ2F1dG8nKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1jb21wb25lbnRzLWlucHV0LXRleHRhcmVhLWNvbnRhaW5lci1yZXNpemUtaWNvblwiPjwvZGl2PlxuICAgIH1cbiAgICA8dGV4dGFyZWEgI2lucHV0UmVmXG4gICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLXJlYWRvbmx5LWJhY2tncm91bmRdPVwicmVhZG9ubHkoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlLWJhY2tncm91bmRdPVwiZGlzYWJsZSgpXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZGVmYXVsdEhlaWdodCgpXCJcbiAgICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwibWluSGVpZ2h0VGV4dEFyZWEoKSA/PyBkZWZhdWx0SGVpZ2h0KClcIlxuICAgICAgW3N0eWxlLnBhZGRpbmdSaWdodC5weF09XCJwYWRkaW5nUmlnaHRDdXN0b20oKVwiXG4gICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cIm1heEhlaWdodFRleHRBcmVhKClcIlxuICAgICAgW3N0eWxlLnJlc2l6ZV09XCJyZXNpemUoKVwiXG4gICAgICBbY2xhc3Mudy1mdWxsXT1cIiFpZ25vcmVXaWR0aElucHV0MTAwKClcIlxuICAgICAgW2NsYXNzXT1cIidsaWJzLXVpLWlucHV0IGxpYnMtdWktZm9udC1oNXIgbGlicy11aS1jdXJzb3ItYXV0byAnICsgY2xhc3NJbmNsdWRlKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktaW5wdXQtbm90LWJvcmRlcl09XCJub0JvcmRlcigpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWJnLXNwZWNpYWwtbm9uZV09XCJiYWNrZ3JvdW5kTm9uZSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci1lcnJvci1nZW5lcmFsXT1cImJvcmRlckVycm9yKClcIlxuICAgICAgW2NsYXNzLnRleHQtWyMyOWM3Y2NdXT1cInVzZUNvbG9yTW9kZUV4aXN0KClcIlxuICAgICAgW2NsYXNzLnBsLVszMnB4XV09XCJpY29uTGVmdENsYXNzKClcIlxuICAgICAgW2F0dHIubWF4TGVuZ3RoXT1cIm1heExlbmd0aCgpIHx8IHVuZGVmaW5lZFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIoKSB8IHRyYW5zbGF0ZVwiXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZSgpXCI+XG4gICAgICA8L3RleHRhcmVhPlxuICB9XG5cbiAgQGlmICh0YWdJbnB1dCgpID09PSAnaWZyYW1lLXRleHRhcmVhJyAmJiBodG1sSWZyYW1lQXJlYSgpKSB7XG4gICAgPHNwYW4gY2xhc3M9XCJkLW5vbmVcIj5cbiAgICA8L3NwYW4+XG4gICAgPGlmcmFtZSAjaWZyYW1lUmVmXG4gICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cIm1heEhlaWdodFRleHRBcmVhKClcIlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJkZWZhdWx0SGVpZ2h0KClcIlxuICAgICAgW3NyY2RvY109XCJodG1sSWZyYW1lQXJlYSgpXCJcbiAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgIGZyYW1lQm9yZGVyPVwiMFwiXG4gICAgICAobG9hZCk9XCJoYW5kbGVyT25Mb2FkKCRldmVudCxpZnJhbWVSZWYpXCI+XG4gICAgPC9pZnJhbWU+XG4gIH1cbiAgQGlmIChpY29uTGVmdENsYXNzKCkpIHtcbiAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2lnbm9yZVNob3dQb3BvdmVyXT1cIiFwb3BvdmVyQ29udGVudEljb25MZWZ0KClcIlxuICAgICAgW2NvbmZpZ109XCJ7bWF4V2lkdGg6MjUwLGRpcmVjdGlvbjonYm90dG9tJyxjb250ZW50OnBvcG92ZXJDb250ZW50SWNvbkxlZnQoKSx6SW5kZXg6IHpJbmRleFBvcG92ZXJDb250ZW50KCl9XCI+XG4gICAgICA8aSBbYXR0ci50YWdJbnB1dF09XCJ0YWdJbnB1dCgpXCJcbiAgICAgICAgW2NsYXNzXT1cImljb25MZWZ0Q2xhc3MoKSArJyBsaWJzLXVpLWlucHV0LWljb24tbGVmdCAhdGV4dC1bIzljYTJhZF0nXCJcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJFdmVudEljb25MZWZ0KCRldmVudCwnY2xpY2snKVwiPlxuICAgICAgPC9pPlxuICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gIH1cbiAgPGRpdiAjZWxlbWVudFJpZ2h0UmVmXG4gICAgY2xhc3M9XCJhYnNvbHV0ZSBmbGV4IGl0ZW1zLWNlbnRlciBoLWZ1bGwgdG9wLTAgcmlnaHQtMFwiPlxuICAgIEBpZiAodmFsdWUoKSAmJiBwbGFjZWhvbGRlcigpLnRyaW0oKSAmJiBrZWVwUGxhY2Vob2xkZXJPbmx5KCkpIHtcbiAgICAgIDxzcGFuIFtjbGFzc109XCInbGlicy11aS1pbnB1dC1wbGFjZWhvbGRlci1jdXN0b20gbGlicy11aS1mb250LWg1cidcIj5cbiAgICAgICAge3sgcGxhY2Vob2xkZXIoKSB9fVxuICAgICAgPC9zcGFuPlxuICAgIH1cbiAgICBAaWYgKGRhdGFUeXBlKCkgIT09J3N0cmluZycgJiYgdmFsdWVVcERvd25OdW1iZXIoKSkge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLXNvcnQgY2xhc3M9XCJtci1bMTJweF1cIlxuICAgICAgICBbZGlzYWJsZUFzY109XCJkaXNhYmxlQXNjKClcIlxuICAgICAgICBbZGlzYWJsZURlc2NdPVwiZGlzYWJsZURlc2MoKVwiXG4gICAgICAgIFthdHRyLnRhZ0lucHV0XT1cInRhZ0lucHV0KClcIlxuICAgICAgICBbb25seUVtaXRdPVwidHJ1ZVwiXG4gICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyQ2hhbmdlVmFsdWUoJGV2ZW50KVwiIC8+XG4gICAgfVxuICAgIEBpZiAoaWNvblJpZ2h0Q2xhc3MoKSkge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIGNsYXNzPVwiZmxleFwiXG4gICAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCIhcG9wb3ZlckNvbnRlbnRJY29uUmlnaHQoKVwiXG4gICAgICAgIFtjb25maWddPVwie21heFdpZHRoOjI1MCxkaXJlY3Rpb246J2JvdHRvbScsY29udGVudDpwb3BvdmVyQ29udGVudEljb25SaWdodCgpLHpJbmRleDogekluZGV4UG9wb3ZlckNvbnRlbnQoKX1cIj5cbiAgICAgICAgPGkgW2F0dHIudGFnSW5wdXRdPVwidGFnSW5wdXQoKVwiXG4gICAgICAgICAgW2NsYXNzLnRleHQtWyM2YTczODNdXT1cIighZGlzYWJsZSgpICYmICFyZWFkb25seSgpKSB8fCBhY2NlcHRPbmx5Q2xpY2tJY29uKClcIlxuICAgICAgICAgIFtjbGFzcy50ZXh0LVsjY2RkMGQ2XV09JygoZGlzYWJsZSgpIHx8IHJlYWRvbmx5KCkpICYmICFhY2NlcHRPbmx5Q2xpY2tJY29uKCkpIHx8IHNldEljb25SaWdodENvbG9yU2FtZUNvbG9yRGlzYWJsZVJlYWRPbmx5KCknXG4gICAgICAgICAgW2NsYXNzXT1cImljb25SaWdodENsYXNzKCkgKycgbGlicy11aS1pbnB1dC1pY29uLXJpZ2h0J1wiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJFdmVudEljb25SaWdodCgkZXZlbnQsJ2NsaWNrJylcIj5cbiAgICAgICAgPC9pPlxuICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWlucHV0LXRleHQtYm90dG9tIHt7IGNsYXNzQ29udGFpbmVyQm90dG9tSW5wdXQoKSB9fVwiXG4gICAgW3N0eWxlLnJpZ2h0LnB4XT1cIih0YWdJbnB1dCgpID09PSAnaW5wdXQnID8gKGVsZW1lbnRSaWdodFJlZi5jbGllbnRXaWR0aCB8fCAwKSA6IDApICsgOFwiPlxuICAgIEBpZiAodGVtcGxhdGVMZWZ0Qm90dG9tSW5wdXQoKTsgYXMgdGVtcGxhdGVMZWZ0Qm90dG9tSW5wdXQpIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dFwiIC8+XG4gICAgfVxuICAgIEBpZiAoZGF0YVR5cGUoKSA9PT0gJ3N0cmluZycgJiYgc2hvd0NvdW50KCkpIHtcbiAgICAgIDxkaXYgI3RleHRDb3VudFJlZlxuICAgICAgICBjbGFzcz1cInRleHQtWyM5Y2EyYWRdIGxpYnMtdWktZm9udC1oN3JcIj5cbiAgICAgICAgPHNwYW4+e3sgY291bnREaXNwbGF5KCkgfX08L3NwYW4+XG4gICAgICAgIEBpZiAobWF4TGVuZ3RoKCkpIHtcbiAgICAgICAgICA8c3Bhbj4ve3sgbWF4TGVuZ3RoRGlzcGxheSgpIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmICh0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXQoKTsgYXMgdGVtcGxhdGVSaWdodEJvdHRvbUlucHV0KSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXRcIiAvPlxuICAgICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
803
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9pbnB1dC9zcmMvaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9pbnB1dC9zcmMvaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWlDLFNBQVMsRUFBZSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4TSxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFTLG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0YsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUwsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBYyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFF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QUFFLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQ3JDLE9BQU8sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDNUYsQ0FBQyxDQUFDLENBQUE7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyx3QkFBd0IsQ0FBRSxJQUFJLENBQUMsS0FBSyxFQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDL0UsQ0FBQztJQUVPLEtBQUssQ0FBQyxnQkFBZ0I7UUFDNUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDekIsQ0FBQyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0EzNkJVLG9DQUFvQzs0RkFBcEMsb0NBQW9DLGtuU0MvQmpELHFqTEE2SEEsa29ERHJHSSxlQUFlLDRGQUFDLGdCQUFnQixvSkFDaEMsZ0NBQWdDLG9nQkFDaEMsb0NBQW9DOzs0RkFLM0Isb0NBQW9DO2tCQWRoRCxTQUFTOytCQUVFLGlDQUFpQyxjQUcvQixJQUFJLFdBQ1A7d0JBQ1AsZUFBZSxFQUFDLGdCQUFnQjt3QkFDaEMsZ0NBQWdDO3dCQUNoQyxvQ0FBb0M7cUJBQ3JDLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiwgVGVtcGxhdGVSZWYsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IElTb3J0LCBMaWJzVWlDb21wb25lbnRzQnV0dG9uc1NvcnRDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtc29ydCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBJRXZlbnQsIElFdmVudEN1c3RvbSwgSVN0cmluZywgVFlQRV9URU1QTEFURV9SRUYgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IExpYnNVaUNvbmZpZ1Byb2plY3RTZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtY29uZmlnLXByb2plY3QnO1xuaW1wb3J0IHsgVXRpbHNDYWNoZSwgVXRpbHNLZXlDb2RlQ29uc3RhbnQsIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMsIGZvcm1hdE51bWJlciwgaXNOaWwsIGlzVHlwZUZpbGUsIHJlbW92ZUVtb2ppLCBzZXRDYXJldFBvc2l0aW9uLCB1dWlkLCB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1lcmdlTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGluZGV4SW5wdXRIdG1sIH0gZnJvbSAnLi9kZWZpbmVzL2luZGV4LWlmcmFtZS1hcmVhLmRlZmluZSc7XG5pbXBvcnQgeyBJRm9jdXNBbmRCbHVyRXZlbnQsIElJZnJhbWVUZXh0YXJlYUN1c3RvbVN0eWxlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ZvY3VzLWFuZC1ibHVyLWV2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLWV2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBUWVBFX0RBVEFfVFlQRV9JTlBVVCwgVFlQRV9JTlBVVCwgVFlQRV9NT0RFX0lOUFVULCBUWVBFX1RBR19JTlBVVCB9IGZyb20gJy4vaW50ZXJmYWNlcy9pbnB1dC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNTb3J0Q29tcG9uZW50XG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0lucHV0c0lucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByb3RlY3RlZCBkaXNhYmxlQXNjID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIGRpc2FibGVEZXNjID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIGh0bWxJZnJhbWVBcmVhID0gc2lnbmFsPFNhZmVIdG1sIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgY291bnREaXNwbGF5ID0gY29tcHV0ZWQodGhpcy5jb3VudERpc3BsYXlDb21wdXRlZC5iaW5kKHRoaXMpKTtcbiAgcHJvdGVjdGVkIG1heExlbmd0aERpc3BsYXkgPSBjb21wdXRlZCgoKSA9PiBgJHt2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UodGhpcy5tYXhMZW5ndGgoKSB8fCAwLCBmYWxzZSl9YCk7XG4gIHByb3RlY3RlZCBwYWRkaW5nUmlnaHRDdXN0b20gPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgaW5wdXRJZnJhbWVSZWYgPSBzaWduYWw8RWxlbWVudFJlZiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfTUFYX0hFSUdIVF9URVhUX0FSRUEgPSAyNTA7XG4gIHByaXZhdGUgY2hhckZpcnN0SXNaZXJvID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBwcmVIZWlnaHRBcmVhID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgaWZyYW1lUmVmOiBIVE1MSUZyYW1lRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBkYXRhVGV4dFBhc3RlID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICByZWFkb25seSB0YWdJbnB1dCA9IGlucHV0PFRZUEVfVEFHX0lOUFVULCBUWVBFX1RBR19JTlBVVCB8IHVuZGVmaW5lZD4oJ2lucHV0JywgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlIHx8ICdpbnB1dCcgfSk7XG4gIHJlYWRvbmx5IGRhdGFUeXBlID0gaW5wdXQ8VFlQRV9EQVRBX1RZUEVfSU5QVVQsIFRZUEVfREFUQV9UWVBFX0lOUFVUIHwgdW5kZWZpbmVkPignc3RyaW5nJywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgfHwgJ3N0cmluZycgfSk7XG4gIHJlYWRvbmx5IHR5cGVJbnB1dCA9IGlucHV0PFRZUEVfSU5QVVQsIFRZUEVfSU5QVVQgfCB1bmRlZmluZWQ+KCd0ZXh0JywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgfHwgJ3RleHQnIH0pO1xuICByZWFkb25seSBtb2RlSW5wdXQgPSBpbnB1dDxUWVBFX01PREVfSU5QVVQsIFRZUEVfTU9ERV9JTlBVVCB8IHVuZGVmaW5lZD4oJ3RleHQnLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCB8fCAndGV4dCcgfSk7XG5cbiAgcmVhZG9ubHkgdGFiSW5zZXJ0Q29udGVudFRhZ0lucHV0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB0ZXh0QXJlYUVudGVyTm90TmV3TGluZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZW1pdEVtcHR5SW5EYXRhVHlwZU51bWJlciA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkga2VlcFplcm9JblR5cGVJbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGF1dG9BZGRaZXJvTGVzc1RoYW4xMEluVHlwZUludCA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaWdub3JlQmxvY2tJbnB1dE1heFZhbHVlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbWF4VmFsdWVOdW1iZXIgPSBtb2RlbDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IG1pblZhbHVlTnVtYmVyID0gbW9kZWw8bnVtYmVyPigpO1xuICByZWFkb25seSBmaXhlZEZsb2F0ID0gbW9kZWw8bnVtYmVyPigpO1xuICByZWFkb25seSBhY2NlcHROZWdhdGl2ZVZhbHVlID0gbW9kZWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSB2YWx1ZVVwRG93bk51bWJlciA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmc+KCcgdy1mdWxsICcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICcgdy1mdWxsICcgfSk7XG4gIHJlYWRvbmx5IG1heExlbmd0aCA9IG1vZGVsPG51bWJlciB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgcmVhZG9ubHkgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IG5vQm9yZGVyID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYmFja2dyb3VuZE5vbmUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IGJvcmRlckVycm9yID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB1c2VDb2xvck1vZGVFeGlzdCA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmcsIHN0cmluZz4oJyAnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAnICcgfSk7XG4gIHJlYWRvbmx5IGtlZXBQbGFjZWhvbGRlck9ubHkgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IHZhbHVlID0gbW9kZWw8c3RyaW5nIHwgbnVtYmVyPignJyk7XG4gIHJlYWRvbmx5IGF1dG9SZW1vdmVFbW9qaSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZGVmYXVsdEhlaWdodCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigzMiwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgMzIgfSk7XG4gIHJlYWRvbmx5IG1pbkhlaWdodFRleHRBcmVhID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBtYXhIZWlnaHRUZXh0QXJlYSA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPih0aGlzLkRFRkFVTFRfTUFYX0hFSUdIVF9URVhUX0FSRUEsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8IHRoaXMuREVGQVVMVF9NQVhfSEVJR0hUX1RFWFRfQVJFQSB9KTtcbiAgcmVhZG9ubHkgZm9jdXNUaW1lT3V0ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDYwMCwgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlID8/IDYwMCB9KTtcbiAgcmVhZG9ubHkgc2VsZWN0QWxsVGltZU91dCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPig2MDAsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSA/PyA2MDAgfSk7XG4gIHJlYWRvbmx5IGJsdXJUaW1lT3V0ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDMyLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAzMiB9KTtcbiAgcmVhZG9ubHkgekluZGV4UG9wb3ZlckNvbnRlbnQgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8IDEwIH0pO1xuICByZWFkb25seSBjbGFzc0NvbnRhaW5lcklucHV0ID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCd3LWZ1bGwnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAndy1mdWxsJyB9KTtcbiAgcmVhZG9ubHkgc2hvd0NvdW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSByZXNpemUgPSBpbnB1dDwnYXV0bycgfCAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIHwgJ25vbmUnIHwgdW5kZWZpbmVkLCAnYXV0bycgfCAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIHwgJ25vbmUnIHwgdW5kZWZpbmVkPigndmVydGljYWwnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAndmVydGljYWwnIH0pO1xuICByZWFkb25seSB0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dCA9IGlucHV0PFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPj4oKTtcbiAgcmVhZG9ubHkgdGVtcGxhdGVSaWdodEJvdHRvbUlucHV0ID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+PigpO1xuICByZWFkb25seSBjbGFzc0NvbnRhaW5lckJvdHRvbUlucHV0ID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcgJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJyAnIH0pO1xuICByZWFkb25seSBpZ25vcmVXaWR0aElucHV0MTAwID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaWZyYW1lVGV4dGFyZWFDdXN0b21TdHlsZSA9IGlucHV0PElJZnJhbWVUZXh0YXJlYUN1c3RvbVN0eWxlPigpXG5cbiAgcmVhZG9ubHkgaWNvbkxlZnRDbGFzcyA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJycgfSk7XG4gIHJlYWRvbmx5IHBvcG92ZXJDb250ZW50SWNvbkxlZnQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICcnIH0pO1xuICByZWFkb25seSBpY29uUmlnaHRDbGFzcyA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJycgfSk7XG4gIHJlYWRvbmx5IHBvcG92ZXJDb250ZW50SWNvblJpZ2h0ID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAnJyB9KTtcbiAgcmVhZG9ubHkgcmVzZXRBdXRvQ29tcGxldGVQYXNzd29yZCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGFjY2VwdE9ubHlDbGlja0ljb24gPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IHNldEljb25SaWdodENvbG9yU2FtZUNvbG9yRGlzYWJsZVJlYWRPbmx5ID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSBvbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgbWF4TGVuZ3RoTnVtYmVyQ291bnQgPSBtb2RlbDxudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGZvY3VzSW5wdXQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgLy8gI3JlZ2lvbiBPVVRQVVRcbiAgcmVhZG9ubHkgb3V0SGVpZ2h0QXJlYUNoYW5nZSA9IG91dHB1dDx7IGlzQ2hhbmdlOiBib29sZWFuLCBoZWlnaHQ6IG51bWJlciB9PigpO1xuICByZWFkb25seSBvdXRDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSBvdXRGb2N1c0FuZEJsdXJFdmVudCA9IG91dHB1dDxJRm9jdXNBbmRCbHVyRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dEVudGVyRXZlbnQgPSBvdXRwdXQ8SUV2ZW50PigpO1xuICByZWFkb25seSBvdXRJbnB1dEV2ZW50ID0gb3V0cHV0PElFdmVudD4oKTsvLyBlbWl0IHB1cmUgZXZlbnQgaW5wdXRcbiAgcmVhZG9ubHkgb3V0SWNvbkxlZnQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRJY29uUmlnaHQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuICByZWFkb25seSBvdXRGaWxlc0Ryb3AgPSBvdXRwdXQ8QXJyYXk8RmlsZT4+KCk7XG4gIHJlYWRvbmx5IG91dEZpbGVEcm9wID0gb3V0cHV0PEZpbGU+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZVZhbHVlQnlCdXR0b25VcERvd24gPSBvdXRwdXQ8dm9pZD4oKTtcblxuICAvKiBWSUVXIENISUxEICovXG4gIHByb3RlY3RlZCBpbnB1dFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignaW5wdXRSZWYnKTtcbiAgcHJvdGVjdGVkIHRleHRDb3VudFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigndGV4dENvdW50UmVmJyk7XG4gIHByb3RlY3RlZCBlbGVtZW50UmlnaHRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2VsZW1lbnRSaWdodFJlZicpO1xuXG4gIC8vICNyZWdpb24gSU5KRUNUXG4gIHByaXZhdGUgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgcHJpdmF0ZSBjb25maWdQcm9qZWN0U2VydmljZSA9IGluamVjdChMaWJzVWlDb25maWdQcm9qZWN0U2VydmljZSk7XG4gIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMub25seUFjY2VwdE5lZ2F0aXZlVmFsdWUoKSkge1xuICAgICAgICB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUuc2V0KHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLkVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnc3RyaW5nJykge1xuXG4gICAgICAgIGlmICh0aGlzLkVsZW1lbnQudmFsdWUgIT09IHRoaXMudmFsdWUoKSkge1xuICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVNYXhMZW5ndGhNaW5NYXhWYWx1ZUJ5RGF0YVR5cGUoKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZVZhbHVlQnlEYXRhVHlwZSh0aGlzLkVsZW1lbnQudmFsdWUpO1xuXG4gICAgICBpZiAoKHRoaXMuRWxlbWVudC52YWx1ZSAhPT0gJycgJiYgdmFsdWUgPT09IHRoaXMudmFsdWUoKSkgfHwgKHRoaXMuRWxlbWVudC52YWx1ZSA9PT0gJycgJiYgdGhpcy5lbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyKCkgJiYgdGhpcy52YWx1ZSgpID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLkVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5hZnRlclZpZXdJbml0KCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5odG1sSWZyYW1lQXJlYS5zZXQodGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaW5kZXhJbnB1dEh0bWwodGhpcy5pZnJhbWVUZXh0YXJlYUN1c3RvbVN0eWxlKCkgfHwgeyBib3JkZXJDb2xvcjogdGhpcy5ub0JvcmRlcigpID8gJycgOiBgJHt0aGlzLmNvbmZpZ1Byb2plY3RTZXJ2aWNlLmNvbG9yU3RlcENvbnRyYXN0RnJvbU9yaWdpbigyMCk/LmxpZ2h0fWAgfSkpKTtcbiAgfVxuXG4gIGFmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKCF0aGlzLkVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRIZWlnaHRBcmVhQ2hhbmdlLmVtaXQoeyBpc0NoYW5nZTogZmFsc2UsIGhlaWdodDogdGhpcy5FbGVtZW50Py5zY3JvbGxIZWlnaHQgfSk7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoe1xuICAgICAgZm9jdXM6IHRoaXMuZm9jdXMuYmluZCh0aGlzKSxcbiAgICAgIGJsdXI6IHRoaXMuYmx1ci5iaW5kKHRoaXMpLFxuICAgICAgaW5zZXJ0Q29udGVudDogdGhpcy5hZGREYXRhVG9TZWxlY3Rpb25JbnB1dC5iaW5kKHRoaXMpLFxuICAgICAgcmVzZXRWYWx1ZTogdGhpcy5yZXNldFZhbHVlLmJpbmQodGhpcyksXG4gICAgICBnZXRFbGVtZW50VmFsdWU6IHRoaXMuZ2V0RWxlbWVudFZhbHVlLmJpbmQodGhpcyksXG4gICAgICBjaGVja0FuZERpc2FibGVVcERvd25CdXR0b246IHRoaXMuY2hlY2tBbmREaXNhYmxlVXBEb3duQnV0dG9uLmJpbmQodGhpcyksXG4gICAgICBzZWxlY3RBbGxDb250ZW50OiB0aGlzLnNlbGVjdEFsbENvbnRlbnQuYmluZCh0aGlzKVxuICAgIH0pO1xuICAgIHRoaXMuaW5pdCgpO1xuXG4gICAgdGhpcy5pbml0RXZlbnQoJ2ZvY3VzJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKS5zdWJzY3JpYmUoKGU6IElFdmVudCkgPT4gdGhpcy5vdXRGb2N1c0FuZEJsdXJFdmVudC5lbWl0KHsgbmFtZTogJ2ZvY3VzJywgZXZlbnQ6IGUgfSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KCdibHVyJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKS5zdWJzY3JpYmUoKGU6IElFdmVudCkgPT4gdGhpcy5vdXRGb2N1c0FuZEJsdXJFdmVudC5lbWl0KHsgbmFtZTogJ2JsdXInLCBldmVudDogZSB9KSk7XG4gICAgY29uc3QgbW91c2VEb3duRXZlbnQgPSB0aGlzLmluaXRFdmVudCgnbW91c2Vkb3duJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKS5waXBlKHRha2UoMSkpO1xuICAgIGNvbnN0IGtleURvd25FdmVudCA9IHRoaXMuaW5pdEV2ZW50KCdrZXlkb3duJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKTtcbiAgICBjb25zdCBpbnB1dEV2ZW50ID0gdGhpcy5pbml0RXZlbnQoJ2lucHV0JywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKTtcbiAgICBjb25zdCBjdXRFdmVudCA9IHRoaXMuaW5pdEV2ZW50KCdjdXQnLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpO1xuICAgIGNvbnN0IHBhc3RlRXZlbnQgPSB0aGlzLmluaXRFdmVudCgncGFzdGUnLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpO1xuICAgIGNvbnN0IGtleXVwRXZlbnQgPSB0aGlzLmluaXRFdmVudCgna2V5dXAnLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpO1xuXG4gICAgdGhpcy5pbml0RXZlbnQoJ2NsaWNrJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpID8/IHRydWUpLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaW5pdEV2ZW50KCdkcmFnb3ZlcicsIHRoaXMuaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKSkucGlwZSh0YXAoKGV2ZW50OiBJRXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XG4gICAgICB9XG4gICAgfSkpLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5pbml0RXZlbnQoJ2Ryb3AnLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpLnN1YnNjcmliZSh0aGlzLmNoZWNrQW5kRW1pdEZpbGVzLmJpbmQodGhpcykpO1xuICAgIHBhc3RlRXZlbnQuc3Vic2NyaWJlKHRoaXMuY2hlY2tBbmRFbWl0RmlsZXMuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLmNvbWJpbmVPYnNlcnZhYmxlKG1vdXNlRG93bkV2ZW50LCBwYXN0ZUV2ZW50KTtcbiAgICB0aGlzLmNvbWJpbmVPYnNlcnZhYmxlKG1vdXNlRG93bkV2ZW50LCBjdXRFdmVudCk7XG4gICAga2V5RG93bkV2ZW50LnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgdGFwKChlOiBJRXZlbnQpID0+IHRoaXMuY2hlY2tUeXBlTnVtYmVyKGUsICdrZXknKSksXG4gICAgICBtZXJnZU1hcCgoKSA9PiBpbnB1dEV2ZW50KSxcbiAgICAgIHRhcCgoZTogSUV2ZW50KSA9PiB0aGlzLmNoZWNrVHlwZU51bWJlcihlLCAnZGF0YScpKSxcbiAgICApLnN1YnNjcmliZSgoZTogSUV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnc3RyaW5nJyAmJiB0aGlzLm1heExlbmd0aCgpICYmIChlLmlucHV0VHlwZSA9PT0gJ2luc2VydENvbXBvc2l0aW9uVGV4dCcgfHwgZS5pbnB1dFR5cGUgPT09ICdpbnNlcnRUZXh0JykgJiYgZS50YXJnZXQudmFsdWU/Lmxlbmd0aCA+ICh0aGlzLm1heExlbmd0aCgpIHx8IDApKSB7XG4gICAgICAgIGUudGFyZ2V0LnZhbHVlID0gZS50YXJnZXQudmFsdWUuc2xpY2UoMCwgdGhpcy5tYXhMZW5ndGgoKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShlKTtcbiAgICB9KTtcblxuICAgIGtleXVwRXZlbnQucGlwZShcbiAgICAgIGZpbHRlcigoZXZlbnQ6IElFdmVudCkgPT4gZXZlbnQua2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuRU5URVIpLFxuICAgICAgZmlsdGVyKChldmVudDogSUV2ZW50KSA9PiAhdGhpcy50ZXh0QXJlYUVudGVyTm90TmV3TGluZSgpIHx8ICh0aGlzLnRleHRBcmVhRW50ZXJOb3ROZXdMaW5lKCkgJiYgIWV2ZW50LnNoaWZ0S2V5KSkpLnN1YnNjcmliZSgoZXZlbnQ6IElFdmVudCkgPT4gdGhpcy5vdXRFbnRlckV2ZW50LmVtaXQoZXZlbnQpKTtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdzdHJpbmcnICYmICh0aGlzLnRhZ0lucHV0KCkgIT09ICdpbnB1dCcgfHwgKHRoaXMudGFnSW5wdXQoKSA9PT0gJ2lucHV0JyAmJiB0aGlzLnRhYkluc2VydENvbnRlbnRUYWdJbnB1dCgpKSkpIHtcbiAgICAgIGtleURvd25FdmVudC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2ZW50OiBJRXZlbnQpID0+IGV2ZW50LmtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LlRBQiksXG4gICAgICAgIHRhcCgoZXZlbnQ6IElFdmVudCkgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSksXG4gICAgICAgIGZpbHRlcigoZXZlbnQ6IElFdmVudCkgPT4gIWV2ZW50LnRhcmdldC52YWx1ZSB8fCAhdGhpcy5tYXhMZW5ndGgoKSB8fCBldmVudC50YXJnZXQudmFsdWUubGVuZ3RoIDwgKHRoaXMubWF4TGVuZ3RoKCkgfHwgMjUpKSxcbiAgICAgICAgdGFwKChldmVudDogSUV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkoKSB8fCB0aGlzLmRpc2FibGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmluc2V0VmFsdWVUb1NlbGVjdGlvblN0YXJ0KCdcXHQnLCBldmVudCk7XG4gICAgICAgIH0pXG4gICAgICApLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRleHRBcmVhRW50ZXJOb3ROZXdMaW5lKCkpIHtcbiAgICAgIGtleURvd25FdmVudC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2ZW50OiBJRXZlbnQpID0+IGV2ZW50LmtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkVOVEVSICYmICFldmVudC5zaGlmdEtleSksXG4gICAgICAgIHRhcCgoZTogSUV2ZW50KSA9PiBlLnByZXZlbnREZWZhdWx0KCkpXG4gICAgICApLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMuY291bnREaXNwbGF5Q29tcHV0ZWQoKTtcbiAgfVxuXG4gIC8vICNyZWdpb24gRlVOQ1RJT05TXG4gIHByaXZhdGUgdXBkYXRlTWF4TGVuZ3RoTWluTWF4VmFsdWVCeURhdGFUeXBlKCkge1xuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdpbnQnIHx8IHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgdGhpcy5tYXhMZW5ndGgudXBkYXRlKHZhbHVlID0+IHtcbiAgICAgICAgcmV0dXJuICF2YWx1ZSB8fCB2YWx1ZSA+IDIxID8gMjEgOiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5taW5WYWx1ZU51bWJlci51cGRhdGUodmFsdWUgPT4gdmFsdWUgPz8gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpO1xuICAgICAgdGhpcy5tYXhWYWx1ZU51bWJlci51cGRhdGUodmFsdWUgPT4gdmFsdWUgPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50Jykge1xuICAgICAgdGhpcy5tYXhMZW5ndGgudXBkYXRlKHZhbHVlID0+ICF2YWx1ZSB8fCB2YWx1ZSA+IDI1ID8gMjUgOiB2YWx1ZSk7XG4gICAgICB0aGlzLmZpeGVkRmxvYXQudXBkYXRlKHZhbHVlID0+IHZhbHVlID8/IDQpO1xuICAgICAgdGhpcy5tYXhMZW5ndGhOdW1iZXJDb3VudC51cGRhdGUodmFsdWUgPT4gdmFsdWUgPz8gMTkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RWxlbWVudFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLkVsZW1lbnQ/LnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FuZEVtaXRGaWxlcyhldmVudDogSUV2ZW50KSB7XG4gICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzIHx8IGV2ZW50LmNsaXBib2FyZERhdGE/LmZpbGVzO1xuICAgIGNvbnN0IHRleHQgPSAoZXZlbnQuY2xpcGJvYXJkRGF0YSB8fCAod2luZG93IGFzIGFueSkuY2xpcGJvYXJkRGF0YSk/LmdldERhdGEoJ3RleHQnKTtcblxuICAgIHRoaXMuZGF0YVRleHRQYXN0ZS5zZXQodGV4dCk7XG4gICAgaWYgKCFmaWxlcyB8fCAhZmlsZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGV4dCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgZmlsZUxpc3QgPSBbXTtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBBcnJheS5mcm9tKGZpbGVzKSkge1xuICAgICAgaWYgKGlzVHlwZUZpbGUoZmlsZSkpIHtcbiAgICAgICAgdGhpcy5vdXRGaWxlRHJvcC5lbWl0KGZpbGUpO1xuICAgICAgICBmaWxlTGlzdC5wdXNoKGZpbGUpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm91dEZpbGVzRHJvcC5lbWl0KGZpbGVMaXN0KTtcblxuICB9XG5cbiAgcHJpdmF0ZSBpbnNldFZhbHVlVG9TZWxlY3Rpb25TdGFydCh0ZXh0OiBzdHJpbmcsIGV2ZW50OiBJRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuRWxlbWVudC5zZXRSYW5nZVRleHQodGV4dCwgdGhpcy5FbGVtZW50LnNlbGVjdGlvblN0YXJ0LCB0aGlzLkVsZW1lbnQuc2VsZWN0aW9uU3RhcnQsICdlbmQnKTtcbiAgICB0aGlzLnByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmlucHV0SWZyYW1lUmVmKCk/Lm5hdGl2ZUVsZW1lbnQgfHwgdGhpcy5pbnB1dFJlZigpPy5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VWYWx1ZShkYXRhOiBJU29ydCkge1xuICAgIGRhdGEucmVzZXQoKTtcbiAgICBpZiAodGhpcy5kaXNhYmxlKCkgfHwgdGhpcy5yZWFkb25seSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9wZXJhdG9yID0gZGF0YS5tb2RlID09PSAnYXNjJyA/IDEgOiAtMTtcbiAgICBsZXQgdmFsdWUgPSArdGhpcy52YWx1ZSgpIHx8IDA7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gVXRpbHNDYWNoZS5nZXRMYW5nKCkgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVkkgPyAnLicgOiAnLCc7XG4gICAgY29uc3Qgc3BsaXRWYWx1ZSA9ICh0aGlzLnZhbHVlKCkgfHwgdGhpcy5taW5WYWx1ZU51bWJlcigpIHx8IDApLnRvU3RyaW5nKCkuc3BsaXQoc2VwYXJhdG9yKTtcbiAgICBjb25zdCBkYXRhQmVoaW5kU2VwYXJhdG9yID0gc3BsaXRWYWx1ZT8uWzFdO1xuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgIHZhbHVlID0gKyhzcGxpdFZhbHVlPy5bMF0gfHwgMCk7XG4gICAgfVxuICAgIHZhbHVlID0gdmFsdWUgKyAodGhpcy52YWx1ZVVwRG93bk51bWJlcigpID8/IDEpICogb3BlcmF0b3I7XG4gICAgaWYgKCF0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiB2YWx1ZSA8IDApIHtcbiAgICAgIHZhbHVlID0gMDtcbiAgICB9XG4gICAgY29uc3QgZGF0YUVtaXQgPSB0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnID8gYCR7dmFsdWV9JHtkYXRhQmVoaW5kU2VwYXJhdG9yID8gc2VwYXJhdG9yIDogJyd9JHtkYXRhQmVoaW5kU2VwYXJhdG9yfWAgOiB2YWx1ZTtcbiAgICB0aGlzLnZhbHVlLnNldChkYXRhRW1pdClcbiAgICB0aGlzLm91dENoYW5nZS5lbWl0KGRhdGFFbWl0KTtcbiAgICB0aGlzLm91dENoYW5nZVZhbHVlQnlCdXR0b25VcERvd24uZW1pdCgpO1xuICAgIHRoaXMuY2hlY2tBbmREaXNhYmxlVXBEb3duQnV0dG9uKHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRXZlbnRJY29uTGVmdChlOiBFdmVudCwgZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICgodGhpcy5kaXNhYmxlKCkgfHwgdGhpcy5yZWFkb25seSgpKSAmJiAhdGhpcy5hY2NlcHRPbmx5Q2xpY2tJY29uKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRJY29uTGVmdC5lbWl0KGV2ZW50TmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckV2ZW50SWNvblJpZ2h0KGU6IEV2ZW50LCBldmVudE5hbWU6IHN0cmluZykge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCh0aGlzLmRpc2FibGUoKSB8fCB0aGlzLnJlYWRvbmx5KCkpICYmICF0aGlzLmFjY2VwdE9ubHlDbGlja0ljb24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm91dEljb25SaWdodC5lbWl0KGV2ZW50TmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrQW5kRGlzYWJsZVVwRG93bkJ1dHRvbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSAhPT0gJ2ludCcgJiYgdGhpcy5kYXRhVHlwZSgpICE9PSAnZmxvYXQnICYmIHRoaXMuZGF0YVR5cGUoKSAhPT0gJ2JpZ2ludCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kaXNhYmxlQXNjLnNldChmYWxzZSk7XG4gICAgdGhpcy5kaXNhYmxlRGVzYy5zZXQoZmFsc2UpO1xuICAgIHRoaXMubWluVmFsdWVOdW1iZXIudXBkYXRlKHZhbHVlID0+IHZhbHVlID8/IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKTtcbiAgICB0aGlzLm1heFZhbHVlTnVtYmVyLnVwZGF0ZSh2YWx1ZSA9PiB2YWx1ZSA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XG4gICAgdmFsdWUgPSB2YWx1ZSA/PyAwO1xuXG4gICAgaWYgKCFpc05pbCh0aGlzLm1heFZhbHVlTnVtYmVyKCkpICYmIHZhbHVlID49ICh0aGlzLm1heFZhbHVlTnVtYmVyKCkgPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKSB7XG4gICAgICB0aGlzLmRpc2FibGVBc2Muc2V0KHRydWUpO1xuICAgIH1cblxuICAgIGlmICghaXNOaWwodGhpcy5taW5WYWx1ZU51bWJlcigpKSAmJiB2YWx1ZSA8PSAodGhpcy5taW5WYWx1ZU51bWJlcigpIHx8IDApKSB7XG4gICAgICB0aGlzLmRpc2FibGVEZXNjLnNldCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdEV2ZW50KGV2ZW50TmFtZTogc3RyaW5nLCBpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudD86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPElFdmVudD4ge1xuICAgIHJldHVybiBmcm9tRXZlbnQ8SUV2ZW50Pih0aGlzLkVsZW1lbnQsIGV2ZW50TmFtZSkucGlwZShcbiAgICAgIHRhcCgoZTogSUV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQpIHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3V0SW5wdXRFdmVudC5lbWl0KGUpO1xuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgJiYgdGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50Jykge1xuICAgICAgY29uc3Qgc2VwYXJhdG9yID0gKFV0aWxzQ2FjaGUuZ2V0TGFuZygpID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlZJKSA/ICcuJyA6ICcsJztcbiAgICAgIGxldCBbaW50LCBkZWNpbWFsXSA9IHZhbHVlLnNwbGl0KHNlcGFyYXRvcik7XG4gICAgICBjb25zdCBkZWNpbWFsU3BsaXQgPSBkZWNpbWFsID8gZGVjaW1hbC5zcGxpdCgnJykgOiBbXTtcbiAgICAgIGNvbnN0IGRlY2ltYWxFdmVyeVplcm8gPSBkZWNpbWFsU3BsaXQuZXZlcnkoaXRlbSA9PiBpdGVtID09PSAnMCcpO1xuXG4gICAgICBpZiAoaW50ID09PSAnLTAnICYmICghZGVjaW1hbCB8fCBkZWNpbWFsRXZlcnlaZXJvKSkge1xuICAgICAgICBpbnQgPSAnMCc7XG4gICAgICB9XG4gICAgICBpZiAoIWRlY2ltYWwgfHwgZGVjaW1hbEV2ZXJ5WmVybykge1xuICAgICAgICBkZWNpbWFsID0gJzAnO1xuICAgICAgfVxuICAgICAgaWYgKGRlY2ltYWxTcGxpdC5zb21lKGl0ZW0gPT4gaXRlbSAhPT0gJzAnKSkge1xuICAgICAgICBjb25zdCBkZWNpbWFsUmV2ZXJzZSA9IGRlY2ltYWxTcGxpdC5yZXZlcnNlKCkuam9pbignJyk7XG5cbiAgICAgICAgZGVjaW1hbCA9IGRlY2ltYWxSZXZlcnNlLnJlcGxhY2UoLyheWzBdKykvLCAnJykuc3BsaXQoJycpLnJldmVyc2UoKS5qb2luKCcnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke2ludH0ke3NlcGFyYXRvcn0ke2RlY2ltYWx9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGluaXQoKSB7XG4gICAgaWYgKCF0aGlzLm1heExlbmd0aCgpKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1heExlbmd0aE1pbk1heFZhbHVlQnlEYXRhVHlwZSgpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZWxlbWVudFZhbHVlID0gdGhpcy5jb252ZXJ0VmFsdWUoYCR7dGhpcy52YWx1ZSgpID8/ICcnfWApO1xuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVsZW1lbnRWYWx1ZSA9IGVsZW1lbnRWYWx1ZS5yZXBsYWNlKChuZXcgUmVnRXhwKGBbXjAtOS4sJHt0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSA/ICctJyA6ICcnfV1gLCAnZycpKSwgJycpO1xuICAgICAgaWYgKFV0aWxzQ2FjaGUuZ2V0TGFuZygpID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLkVOKSB7XG4gICAgICAgIGVsZW1lbnRWYWx1ZSA9IGVsZW1lbnRWYWx1ZS5yZXBsYWNlKC9bLF0vLCAnJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuRWxlbWVudC52YWx1ZSA9IGVsZW1lbnRWYWx1ZTtcblxuICAgIGNvbnN0IGV2ZW50RmFrZTogSUV2ZW50Q3VzdG9tID0geyBwcmV2ZW50RGVmYXVsdDogKCkgPT4geyByZXR1cm4gfSwgdGFyZ2V0OiB0aGlzLkVsZW1lbnQsIGRhdGE6IGVsZW1lbnRWYWx1ZSwgZmFrZUV2ZW50OiB0cnVlIH07XG5cbiAgICB0aGlzLmNoZWNrVHlwZU51bWJlcihldmVudEZha2UsICdkYXRhJyk7XG4gICAgdGhpcy5wcm9jZXNzRXZlbnRBbmRFbWl0VmFsdWUoZXZlbnRGYWtlKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0V2ZW50QW5kRW1pdFZhbHVlKGU6IElFdmVudCB8IElFdmVudEN1c3RvbSk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlOiBhbnkgPSB0aGlzLnBhcnNlVmFsdWVCeURhdGFUeXBlKGUudGFyZ2V0LnZhbHVlKTtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgIT09ICdzdHJpbmcnICYmICF0aGlzLmlnbm9yZUJsb2NrSW5wdXRNYXhWYWx1ZSgpICYmICFpc05pbCh0aGlzLm1heFZhbHVlTnVtYmVyKCkpICYmIHZhbHVlID4gKHRoaXMubWF4VmFsdWVOdW1iZXIoKSB8fCAwKSAmJiB0aGlzLnZhbHVlKCkgPCB2YWx1ZSkge1xuICAgICAgY29uc3QgdmFsdWVEaXNwbGF5ID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKGAke3RoaXMudmFsdWUoKX1gLnJlcGxhY2UoL1suXS9nLCAnLCcpLCB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSwgKHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KSk7XG5cbiAgICAgIGUudGFyZ2V0LnZhbHVlID0gYCR7dGhpcy5nZXRDaGVja1plcm8oK3ZhbHVlRGlzcGxheSwgZS50YXJnZXQudmFsdWUpfSR7dmFsdWVEaXNwbGF5fWA7XG5cbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSAhPT0gJ3N0cmluZycgJiYgaXNOaWwodmFsdWUpKSB7XG4gICAgICBlLnRhcmdldC52YWx1ZSA9IDA7XG5cbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShlKTtcbiAgICB9XG5cbiAgICBpZiAoZS5mYWtlRXZlbnQgJiYgKGAke3RoaXMudmFsdWUoKSA/PyAnJ31gID09PSBgJHt2YWx1ZX1gIHx8ICh0aGlzLmVtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXIoKSAmJiBlLnRhcmdldC52YWx1ZS50cmltKCkgPT09ICcnKSkpIHtcbiAgICAgIHRoaXMuY2hlY2tBbmREaXNhYmxlVXBEb3duQnV0dG9uKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcgPyB2YWx1ZSA6ICt2YWx1ZSk7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbGN1bGF0b3JIZWlnaHRUZXh0QXJlYShlKTtcbiAgICAgIH0sIDI1MCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52YWx1ZS5zZXQodmFsdWUpO1xuICAgIGlmICh0aGlzLmVtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXIoKSAmJiBlLnRhcmdldC52YWx1ZS50cmltKCkgPT09ICcnKSB7XG4gICAgICBjb25zdCBkYXRhRW1pdCA9IHRoaXMuZGF0YVR5cGUoKSA9PT0gJ3N0cmluZycgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMudmFsdWUuc2V0KGRhdGFFbWl0IGFzIGFueSk7XG4gICAgfVxuICAgIHRoaXMub3V0Q2hhbmdlLmVtaXQodGhpcy52YWx1ZSgpKTtcbiAgICB0aGlzLmNoZWNrQW5kRGlzYWJsZVVwRG93bkJ1dHRvbih0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnID8gdmFsdWUgOiArdmFsdWUpO1xuICAgIHRoaXMuY2FsY3VsYXRvckhlaWdodFRleHRBcmVhKGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja01heExlbmd0aE51bWJlckFuZFNldFZhbHVlKHZhbHVlRGlzcGxheTogc3RyaW5nLCBlOiBJRXZlbnQgfCBJRXZlbnRDdXN0b20pOiBib29sZWFuIHtcbiAgICBpZiAoaXNOaWwodGhpcy52YWx1ZSgpKSB8fCAoK3RoaXMudmFsdWUoKSA+IDAgJiYgdGhpcy5wYXJzZVZhbHVlQnlEYXRhVHlwZSh2YWx1ZURpc3BsYXkpIDwgdGhpcy52YWx1ZSgpKSB8fCAoK3RoaXMudmFsdWUoKSA8IDAgJiYgdGhpcy5wYXJzZVZhbHVlQnlEYXRhVHlwZSh2YWx1ZURpc3BsYXkpID4gdGhpcy52YWx1ZSgpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZUNvbXBhcmUgPSBmb3JtYXROdW1iZXIodmFsdWVEaXNwbGF5KS50b1N0cmluZygpO1xuICAgIGNvbnN0IG51bWJlcnMgPSB2YWx1ZUNvbXBhcmUuc3BsaXQoJy4nKTtcbiAgICBsZXQgbGVuZ3RoVmFsdWVDb21wYXJlID0gMDtcbiAgICBsZXQgbWF4TGVuZ3RoID0gKHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmIHR5cGVvZiArdGhpcy52YWx1ZSgpID09PSAnbnVtYmVyJyAmJiArdGhpcy52YWx1ZSgpIDwgMCkgPyAodGhpcy5tYXhMZW5ndGgoKSB8fCAyMSkgKyAxIDogKHRoaXMubWF4TGVuZ3RoKCkgfHwgMjEpO1xuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgbWF4TGVuZ3RoLS07XG4gICAgfVxuICAgIGlmIChudW1iZXJzICYmIG51bWJlcnNbMF0pIHtcbiAgICAgIGxlbmd0aFZhbHVlQ29tcGFyZSA9IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZShgJHtudW1iZXJzWzBdfWAucmVwbGFjZSgvWy5dL2csICcsJyksIHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpLCAodGhpcy5maXhlZEZsb2F0KCkgPz8gMTQpKS5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChudW1iZXJzICYmIG51bWJlcnNbMV0pIHtcbiAgICAgIGxlbmd0aFZhbHVlQ29tcGFyZSArPSAxICsgbnVtYmVyc1sxXS5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChtYXhMZW5ndGggJiYgbGVuZ3RoVmFsdWVDb21wYXJlID49IG1heExlbmd0aCkge1xuICAgICAgY29uc3QgdmFsdWVEaXNwbGF5ID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKChsZW5ndGhWYWx1ZUNvbXBhcmUgPT09IG1heExlbmd0aCA/IHZhbHVlQ29tcGFyZSA6IGAke3RoaXMudmFsdWUoKX1gKS5yZXBsYWNlKC9bLl0vZywgJywnKSwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksICh0aGlzLmZpeGVkRmxvYXQoKSA/PyAxNCkpO1xuXG4gICAgICBlLnRhcmdldC52YWx1ZSA9IGAke3RoaXMuZ2V0Q2hlY2taZXJvKCt2YWx1ZURpc3BsYXksIGUudGFyZ2V0LnZhbHVlKX0ke3ZhbHVlRGlzcGxheX1gO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrVHlwZU51bWJlcihlOiBJRXZlbnQgfCBJRXZlbnRDdXN0b20sIGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgY3VycmVudExhbmcgPSBVdGlsc0NhY2hlLmdldExhbmcoKTtcbiAgICBjb25zdCBzZXBhcmF0b3IgPSAoY3VycmVudExhbmcgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVkkpID8gJy4nIDogJywnO1xuICAgIGNvbnN0IHNlcGFyYXRvclJldmVydCA9IChjdXJyZW50TGFuZyA9PT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5WSSkgPyAnLCcgOiAnLic7XG4gICAgbGV0IHZhbHVlVGFyZ2V0OiBJU3RyaW5nID0gZS50YXJnZXQudmFsdWU7XG4gICAgY29uc3Qgc2VsZWN0aW9uU3RhcnQgPSBlLnRhcmdldC5zZWxlY3Rpb25TdGFydCAtIDE7XG4gICAgY29uc3QgeyBkYXRhLCBrZXlDb2RlIH0gPSBlO1xuXG4gICAgdGhpcy5jaGFyRmlyc3RJc1plcm8uc2V0KGZhbHNlKTtcbiAgICBpZiAodmFsdWVUYXJnZXQuY2hhckF0KDApID09PSAnMCcpIHtcbiAgICAgIHRoaXMuY2hhckZpcnN0SXNaZXJvLnNldCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHRoaXMuYXV0b1JlbW92ZUVtb2ppKCkpIHtcbiAgICAgICAgZS50YXJnZXQudmFsdWUgPSByZW1vdmVFbW9qaSh2YWx1ZVRhcmdldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKC9bMC05XS9nLnRlc3QoZGF0YSkgJiYgdmFsdWVUYXJnZXQuY2hhckF0KHNlbGVjdGlvblN0YXJ0ICsgMSkgPT09ICctJykge1xuICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlQXQoMCwgJycpIGFzIElTdHJpbmc7XG4gICAgfVxuICAgIGxldCBzdHJSZWdleCA9IGBbXjAtOS4sJHt0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSA/ICctJyA6ICcnfV1gO1xuXG4gICAgaWYgKChuZXcgUmVnRXhwKHN0clJlZ2V4LCAnZ2knKSkudGVzdCgoZSBhcyBhbnkpW2ZpZWxkTmFtZV0pICYmIGtleUNvZGUgIT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkJBQ0tTUEFDRSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS50YXJnZXQudmFsdWUgPSB2YWx1ZVRhcmdldCA9IGUudGFyZ2V0LnZhbHVlLnJlcGxhY2UoKG5ldyBSZWdFeHAoc3RyUmVnZXgsICdnaScpKSwgJycpIGFzIElTdHJpbmc7XG4gICAgfVxuICAgIGlmICghZS5mYWtlRXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZGF0YSkge1xuICAgICAgICBjYXNlIHNlcGFyYXRvcjpcbiAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2UoKG5ldyBSZWdFeHAoYFske3NlcGFyYXRvcn1dYCwgJ2dpJykpLCAnJykgYXMgSVN0cmluZztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIHNlcGFyYXRvclJldmVydDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoY3VycmVudExhbmcgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVkkgJiYgdGhpcy5kYXRhVHlwZSgpID09PSAnaW50Jykge1xuICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9IHZhbHVlVGFyZ2V0LnJlcGxhY2UoKG5ldyBSZWdFeHAoYFske3NlcGFyYXRvclJldmVydH1dYCwgJ2dpJykpLCAnJykgYXMgSVN0cmluZztcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWVUYXJnZXQgPT09IHNlcGFyYXRvclJldmVydCkge1xuICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9ICcnO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZVRhcmdldCAmJiB2YWx1ZVRhcmdldC5sZW5ndGggPT09IDIgJiYgdmFsdWVUYXJnZXQuY2hhckF0KDApID09PSAnLScgJiYgZGF0YSAmJiAhL1swLTldL2cudGVzdChkYXRhKSkge1xuICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9ICctJztcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvY2N1cnJlbmNlc0J5Q2hhcmFjdGVyID0gdmFsdWVUYXJnZXQub2NjdXJyZW5jZXNCeUNoYXJhY3RlcihzZXBhcmF0b3JSZXZlcnQpO1xuXG4gICAgICAgICAgICBpZiAob2NjdXJyZW5jZXNCeUNoYXJhY3RlciA+IDEpIHtcbiAgICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlQXQoZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQgLSAxLCAnJykgYXMgSVN0cmluZztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbWF4TGVuZ3RoID0gdGhpcy5kYXRhVHlwZSgpID09PSAnZmxvYXQnID8gKHRoaXMubWF4TGVuZ3RoKCkgfHwgMjEpIC0gMSA6ICh0aGlzLm1heExlbmd0aCgpIHx8IDIxKTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlVGFyZ2V0LmluZGV4T2YoJy0nKSA+PSAwKSB7XG4gICAgICAgICAgICAgIG1heExlbmd0aCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9jY3VycmVuY2VzQnlDaGFyYWN0ZXIgPT09IDEgJiYgdmFsdWVUYXJnZXQubGVuZ3RoID09PSBtYXhMZW5ndGggJiYgdmFsdWVUYXJnZXQuaW5kZXhPZihzZXBhcmF0b3JSZXZlcnQpID09PSB2YWx1ZVRhcmdldC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZUF0KGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0IC0gMSwgJycpIGFzIElTdHJpbmc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMub25seUFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiB2YWx1ZVRhcmdldCA9PT0gYDAke3NlcGFyYXRvclJldmVydH1gKSB7XG4gICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gJzAnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFsdWVUYXJnZXQgPSBmb3JtYXROdW1iZXIodmFsdWVUYXJnZXQpIGFzIElTdHJpbmc7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ZXNPZkRhc2ggPSB2YWx1ZVRhcmdldC5pbmRleGVzT2ZDaGFyYWN0ZXI/LignLScpIHx8IFtdO1xuXG4gICAgaWYgKGluZGV4ZXNPZkRhc2gubGVuZ3RoKSB7XG4gICAgICBjb25zdCBbZmlyc3RJbmRleCwgc2Vjb25kSW5kZXhdID0gaW5kZXhlc09mRGFzaDtcbiAgICAgIGNvbnN0IGluZGV4UmVwbGFjZSA9IGZpcnN0SW5kZXggfHwgc2Vjb25kSW5kZXg7IC8vIGZpcnN0SW5kZXg9MCB0aMOsIGtvIHjDs2FcblxuICAgICAgaWYgKGluZGV4UmVwbGFjZSkge1xuICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2VBbGwoaW5kZXhSZXBsYWNlLCAnLScsICcnKSBhcyBJU3RyaW5nO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgdmFsdWVUYXJnZXQgPT09ICctJykge1xuICAgICAgZS50YXJnZXQudmFsdWUgPSB2YWx1ZVRhcmdldDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRoaXMuZGF0YVR5cGUoKSkge1xuICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAge1xuICAgICAgICAgIHN0clJlZ2V4ID0gYFteMC05JHt0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSA/ICctJyA6ICcnfV1gO1xuICAgICAgICAgIGlmICghZS5mYWtlRXZlbnQpIHtcbiAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZShuZXcgUmVnRXhwKHN0clJlZ2V4LCAnZ2knKSwgJycpIGFzIElTdHJpbmc7XG4gICAgICAgICAgICBjb25zdCBtYXhUb3RhbE51bWJlciA9IHZhbHVlVGFyZ2V0LmluY2x1ZGVzKCctJykgPyAxNyA6IDE2O1xuXG4gICAgICAgICAgICBpZiAodmFsdWVUYXJnZXQubGVuZ3RoID4gbWF4VG90YWxOdW1iZXIpIHtcbiAgICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5zbGljZSgwLCBtYXhUb3RhbE51bWJlcikgYXMgSVN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhwYXJzZUludCh2YWx1ZVRhcmdldCkpID4gKHRoaXMubWF4VmFsdWVOdW1iZXIoKSA/PyA5MDA3MTk5MjU0NzQwOTkxKSkge1xuICAgICAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnNsaWNlKDAsIG1heFRvdGFsTnVtYmVyIC0gMSkgYXMgSVN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgdmFsdWVUYXJnZXRbMF0gIT09ICctJyAmJiB2YWx1ZVRhcmdldFswXSAhPT0gJzAnKSB7XG4gICAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gJycgYXMgSVN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZVRhcmdldCAmJiAvKF4tKT8oXlswXSspLy50ZXN0KHZhbHVlVGFyZ2V0KSkge1xuICAgICAgICAgICAgICBjb25zdCBpZCA9IHV1aWQoKTtcblxuICAgICAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2UoLyheLSk/KF5bMF0rKS8sIGAkMSR7aWR9YCkucmVwbGFjZShpZCwgJzAnKSBhcyBJU3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlVGFyZ2V0ID09PSAnLTAnKSB7XG4gICAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gJzAnIGFzIElTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWVUYXJnZXQgJiYgLyheWzBdKShbMS05XSkoWzAtOV0rKT8vLnRlc3QodmFsdWVUYXJnZXQpKSB7XG4gICAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZSgvKF5bMF0pKFsxLTldKShbMC05XSspPy8sICckMiQzJykgYXMgSVN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlRGlzcGxheSA9IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSh2YWx1ZVRhcmdldCwgKHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpIHx8IGZhbHNlKSwgMCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrTWF4TGVuZ3RoTnVtYmVyQW5kU2V0VmFsdWUodmFsdWVEaXNwbGF5LCBlKSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gYCR7dGhpcy5nZXRDaGVja1plcm8oK3ZhbHVlRGlzcGxheSwgZS50YXJnZXQudmFsdWUpfSR7dmFsdWVEaXNwbGF5fWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaW5kZXhPZkRvdCA9IHZhbHVlVGFyZ2V0LmluZGV4T2YoJy4nKTtcbiAgICAgICAgICBjb25zdCBpbmRleE9mQ29tbWEgPSB2YWx1ZVRhcmdldC5pbmRleE9mKCcsJyk7XG4gICAgICAgICAgbGV0IGluZGV4Q2hvb3NlID0gaW5kZXhPZkRvdDtcblxuICAgICAgICAgIGlmIChpbmRleE9mRG90IDwgMCB8fCBpbmRleE9mRG90ID4gaW5kZXhPZkNvbW1hKSB7XG4gICAgICAgICAgICBpbmRleENob29zZSA9IGluZGV4T2ZDb21tYTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluZGV4Q2hvb3NlID49IDApIHtcbiAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQuc3Vic3RyaW5nKDAsIGluZGV4Q2hvb3NlKSBhcyBJU3RyaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB2YWx1ZURpc3BsYXkgPSB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UodmFsdWVUYXJnZXQsICh0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSB8fCBmYWxzZSksIDApO1xuXG4gICAgICAgICAgaWYgKHRoaXMuY2hlY2tNYXhMZW5ndGhOdW1iZXJBbmRTZXRWYWx1ZSh2YWx1ZURpc3BsYXksIGUpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgZS50YXJnZXQudmFsdWUgPSBgJHt0aGlzLmdldENoZWNrWmVybygrdmFsdWVEaXNwbGF5LCBlLnRhcmdldC52YWx1ZSl9JHt2YWx1ZURpc3BsYXl9YDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdmbG9hdCc6XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSAnYmlnaW50JzpcbiAgICAgICAgdGhpcy5nZXRWYWx1ZUZvcm1hdChlLCB2YWx1ZVRhcmdldCwgc2VwYXJhdG9yLCBzZXBhcmF0b3JSZXZlcnQsIGN1cnJlbnRMYW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICh2YWx1ZVRhcmdldCA9PT0gJ05hTicpIHtcbiAgICAgIGUudGFyZ2V0LnZhbHVlID0gJycgYXMgSVN0cmluZztcbiAgICB9XG4gICAgaWYgKGUuZmFrZUV2ZW50IHx8IGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldENhcmV0UG9zaXRpb24oZSwgc2VsZWN0aW9uU3RhcnQgKyAxKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVGb3JtYXQoZTogSUV2ZW50IHwgSUV2ZW50Q3VzdG9tLCB2YWx1ZVRhcmdldDogSVN0cmluZywgc2VwYXJhdG9yOiAnLicgfCAnLCcsIHNlcGFyYXRvclJldmVydDogJy4nIHwgJywnLCBjdXJyZW50TGFuZzogc3RyaW5nKSB7XG4gICAgbGV0IHN0clJlZ2V4ID0gYFteMC05JHtzZXBhcmF0b3J9JHtjdXJyZW50TGFuZyA9PT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5FTiA/ICcuJyA6ICcnfSR7dGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgPyAnLScgOiAnJ31dYDtcblxuICAgIGlmICghZS5mYWtlRXZlbnQpIHtcbiAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZShuZXcgUmVnRXhwKHN0clJlZ2V4LCAnZ2knKSwgJycpIGFzIElTdHJpbmc7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ZXNPZlNlcGFyYXRvciA9IHZhbHVlVGFyZ2V0LmluZGV4ZXNPZkNoYXJhY3RlcihzZXBhcmF0b3IpO1xuICAgIGNvbnN0IFtmaXJzdEluZGV4LCBzZWNvbmRJbmRleF0gPSBpbmRleGVzT2ZTZXBhcmF0b3I7XG5cbiAgICBpZiAoc2Vjb25kSW5kZXgpIHtcbiAgICAgIHZhbHVlVGFyZ2V0ID0gZS50YXJnZXQudmFsdWUucmVwbGFjZUFsbChzZWNvbmRJbmRleCwgc2VwYXJhdG9yLCAnJyk7XG4gICAgfVxuICAgIGlmIChmaXJzdEluZGV4ICYmIHZhbHVlVGFyZ2V0LnN1YnN0cmluZyhmaXJzdEluZGV4ICsgMSkubGVuZ3RoID49ICh0aGlzLmZpeGVkRmxvYXQoKSA/PyAxNCkpIHtcbiAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQuc3Vic3RyaW5nKDAsIGZpcnN0SW5kZXggKyAodGhpcy5maXhlZEZsb2F0KCkgPz8gMTQpICsgMSkgYXMgSVN0cmluZztcbiAgICB9XG4gICAgc3RyUmVnZXggPSBgWyR7c2VwYXJhdG9yfV1gO1xuICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZShuZXcgUmVnRXhwKHN0clJlZ2V4LCAnZycpLCBzZXBhcmF0b3JSZXZlcnQpIGFzIElTdHJpbmc7XG4gICAgbGV0IHZhbHVlRm9ybWF0ID0gJyc7XG4gICAgbGV0IFtmb250U2VwYXJhdG9yTnVtYmVyLCBiZWhpbmRTZXBhcmF0b3JOdW1iZXJdID0gdmFsdWVUYXJnZXQuc3BsaXQoc2VwYXJhdG9yUmV2ZXJ0KTtcbiAgICBsZXQgbWF4Rm9udFRvdGFsTnVtYmVyID0gKGZvbnRTZXBhcmF0b3JOdW1iZXIgJiYgZm9udFNlcGFyYXRvck51bWJlci5pbmNsdWRlcygnLScpKSA/IDE2IDogMTU7XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50Jykge1xuICAgICAgbWF4Rm9udFRvdGFsTnVtYmVyID0gKHRoaXMubWF4TGVuZ3RoTnVtYmVyQ291bnQoKSA/PyAxOSkgLSAodGhpcy5maXhlZEZsb2F0KCkgPz8gNCkgKyAoZm9udFNlcGFyYXRvck51bWJlci5pbmNsdWRlcygnLScpID8gMSA6IDApO1xuICAgIH1cbiAgICBjb25zdCBmb250T3Zlck1heFRvdGFsTnVtYmVyID0gZm9udFNlcGFyYXRvck51bWJlciAmJiBmb250U2VwYXJhdG9yTnVtYmVyLmxlbmd0aCA+PSBtYXhGb250VG90YWxOdW1iZXI7XG5cbiAgICBpZiAoZm9udE92ZXJNYXhUb3RhbE51bWJlcikge1xuICAgICAgZm9udFNlcGFyYXRvck51bWJlciA9IGZvbnRTZXBhcmF0b3JOdW1iZXIuc2xpY2UoMCwgbWF4Rm9udFRvdGFsTnVtYmVyKSBhcyBJU3RyaW5nO1xuICAgICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgICBiZWhpbmRTZXBhcmF0b3JOdW1iZXIgPSAnJztcbiAgICAgIH1cbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLmRhdGFUeXBlKCkpIHtcbiAgICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICAgICAgaWYgKCFmb250T3Zlck1heFRvdGFsTnVtYmVyICYmIGJlaGluZFNlcGFyYXRvck51bWJlciAmJiBiZWhpbmRTZXBhcmF0b3JOdW1iZXIubGVuZ3RoKSB7XG4gICAgICAgICAgYmVoaW5kU2VwYXJhdG9yTnVtYmVyID0gYmVoaW5kU2VwYXJhdG9yTnVtYmVyLnNsaWNlKDAsIG1heEZvbnRUb3RhbE51bWJlciAtIGZvbnRTZXBhcmF0b3JOdW1iZXIubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBiZWhpbmRTZXBhcmF0b3JOdW1iZXIgPSBgJHtiZWhpbmRTZXBhcmF0b3JOdW1iZXIgPz8gJyd9YDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICAgIGlmIChiZWhpbmRTZXBhcmF0b3JOdW1iZXIgJiYgYmVoaW5kU2VwYXJhdG9yTnVtYmVyLmxlbmd0aCAmJiBiZWhpbmRTZXBhcmF0b3JOdW1iZXIubGVuZ3RoID4gKHRoaXMuZml4ZWRGbG9hdCgpID8/IDQpKSB7XG4gICAgICAgICAgYmVoaW5kU2VwYXJhdG9yTnVtYmVyID0gYmVoaW5kU2VwYXJhdG9yTnVtYmVyLnNsaWNlKDAsICh0aGlzLmZpeGVkRmxvYXQoKSA/PyA0KSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4T2ZTZXBhcmF0b3JSZXZlcnQgPSB2YWx1ZVRhcmdldC5pbmRleE9mKHNlcGFyYXRvclJldmVydCk7XG5cbiAgICBpZiAodGhpcy5vbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmIGZvbnRTZXBhcmF0b3JOdW1iZXJbMF0gIT09ICctJyAmJiBmb250U2VwYXJhdG9yTnVtYmVyWzBdICE9PSAnMCcpIHtcbiAgICAgIGZvbnRTZXBhcmF0b3JOdW1iZXIgPSAnJztcbiAgICB9XG4gICAgaWYgKHRoaXMub25seUFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiBpbmRleE9mU2VwYXJhdG9yUmV2ZXJ0ID49IDAgJiYgZm9udFNlcGFyYXRvck51bWJlclswXSAhPT0gJy0nKSB7XG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gJzAnO1xuICAgICAgYmVoaW5kU2VwYXJhdG9yTnVtYmVyID0gdGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50JyA/ICcwJyA6ICcnO1xuICAgIH1cbiAgICBpZiAoZm9udFNlcGFyYXRvck51bWJlciAmJiAvKF4tKShbMF0rKS8udGVzdChmb250U2VwYXJhdG9yTnVtYmVyKSkge1xuICAgICAgY29uc3QgaWQgPSB1dWlkKCk7XG5cbiAgICAgIGZvbnRTZXBhcmF0b3JOdW1iZXIgPSBmb250U2VwYXJhdG9yTnVtYmVyLnJlcGxhY2UoLyheLSkoWzBdKykvLCBgJDEke2lkfWApLnJlcGxhY2UoaWQsICcwJyk7XG4gICAgfVxuICAgIGlmIChmb250U2VwYXJhdG9yTnVtYmVyICYmIC8oXlswXSspLy50ZXN0KGZvbnRTZXBhcmF0b3JOdW1iZXIpKSB7XG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gZm9udFNlcGFyYXRvck51bWJlci5yZXBsYWNlKC8oXlswXSspLywgJzAnKTtcbiAgICB9XG4gICAgaWYgKC8oXi0pKFswXSspKFsxLTldKShbMC05Ll0rKT8vLnRlc3QoZm9udFNlcGFyYXRvck51bWJlcikpIHtcbiAgICAgIGZvbnRTZXBhcmF0b3JOdW1iZXIgPSBmb250U2VwYXJhdG9yTnVtYmVyLnJlcGxhY2UoLyheLSkoWzBdKykoWzEtOV0pKFswLTkuXSspPy8sICckMSQzJDQnKTtcbiAgICB9XG4gICAgaWYgKC8oXlswXSspKFsxLTldKShbMC05Ll0rKT8vLnRlc3QoZm9udFNlcGFyYXRvck51bWJlcikpIHtcbiAgICAgIGZvbnRTZXBhcmF0b3JOdW1iZXIgPSBmb250U2VwYXJhdG9yTnVtYmVyLnJlcGxhY2UoLyheWzBdKykoWzEtOV0pKFswLTkuXSspPy8sICckMiQzJyk7XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5kYXRhVHlwZSgpKSB7XG4gICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgIGlmICgvKF5bMF17Nn0pLy50ZXN0KGJlaGluZFNlcGFyYXRvck51bWJlcikpIHtcbiAgICAgICAgICBiZWhpbmRTZXBhcmF0b3JOdW1iZXIgPSBiZWhpbmRTZXBhcmF0b3JOdW1iZXIucmVwbGFjZSgvKF5bMF17Nn0pLywgJzAwMDAwJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICAgIGlmICgvKF5bMF17NH0pLy50ZXN0KGJlaGluZFNlcGFyYXRvck51bWJlcikpIHtcbiAgICAgICAgICBiZWhpbmRTZXBhcmF0b3JOdW1iZXIgPSBiZWhpbmRTZXBhcmF0b3JOdW1iZXIucmVwbGFjZSgvKF5bMF17NH0pLywgJzAwMDAnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKGZvbnRTZXBhcmF0b3JOdW1iZXIpIHtcbiAgICAgIGZvbnRTZXBhcmF0b3JOdW1iZXIgPSB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UoZm9udFNlcGFyYXRvck51bWJlciwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksICh0aGlzLmZpeGVkRmxvYXQoKSA/PyAodGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50JyA/IDQgOiAxNCkpKTtcbiAgICB9XG4gICAgY29uc3QgaGFzU2VwYXJhdG9yUmV2ZXJ0ID0gKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcgPyB0cnVlIDogIWZvbnRPdmVyTWF4VG90YWxOdW1iZXIpICYmIGluZGV4T2ZTZXBhcmF0b3JSZXZlcnQgPj0gMDtcblxuICAgIHZhbHVlRm9ybWF0ID0gYCR7Zm9udFNlcGFyYXRvck51bWJlciA/PyAnJ30ke2hhc1NlcGFyYXRvclJldmVydCA/IHNlcGFyYXRvclJldmVydCA6ICcnfSR7YmVoaW5kU2VwYXJhdG9yTnVtYmVyID8/ICcnfWA7XG4gICAgaWYgKHZhbHVlRm9ybWF0ICYmIHRoaXMub25seUFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiB2YWx1ZUZvcm1hdFswXSAhPT0gJy0nICYmIHZhbHVlRm9ybWF0WzBdICE9PSAnMCcpIHtcbiAgICAgIHZhbHVlRm9ybWF0ID0gJzAnO1xuICAgIH1cbiAgICBpZiAodGhpcy5jaGVja01heExlbmd0aE51bWJlckFuZFNldFZhbHVlKHZhbHVlRm9ybWF0LCBlKSkge1xuICAgICAgdmFsdWVUYXJnZXQgPSBlLnRhcmdldC52YWx1ZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YWx1ZVRhcmdldCA9IGUudGFyZ2V0LnZhbHVlID0gdmFsdWVGb3JtYXQgYXMgSVN0cmluZztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2hlY2taZXJvKHZhbHVlOiBudW1iZXIsIHRhcmdldEN1cnJlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHplcm8gPSAnJztcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgIT09ICdpbnQnKSB7XG4gICAgICByZXR1cm4gemVybztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGFyRmlyc3RJc1plcm8oKSAmJiB0aGlzLmtlZXBaZXJvSW5UeXBlSW50KCkgJiYgdmFsdWUgIT09IDApIHtcbiAgICAgIHplcm8gPSAnMCc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hhckZpcnN0SXNaZXJvKCkgJiYgdGhpcy5hdXRvQWRkWmVyb0xlc3NUaGFuMTBJblR5cGVJbnQoKSAmJiAoKHZhbHVlID4gMCAmJiB2YWx1ZSA8IDEwICYmICEvKF4wKSsvLnRlc3QoYCR7dGFyZ2V0Q3VycmVudH1gKSkgfHwgKHRhcmdldEN1cnJlbnQgJiYgdGFyZ2V0Q3VycmVudC5tYXRjaCgvXlswXXsyLH0kLyk/Lmxlbmd0aCAmJiB2YWx1ZSA9PT0gMCkpKSB7XG4gICAgICB6ZXJvID0gJzAnO1xuICAgIH1cblxuICAgIHJldHVybiB6ZXJvO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYXJldFBvc2l0aW9uKGU6IElFdmVudCB8IElFdmVudEN1c3RvbSwgc2VsZWN0aW9uU3RhcnQ6IG51bWJlcikge1xuICAgIGNvbnN0IHsga2V5Q29kZSwgaW5wdXRUeXBlIH0gPSBlO1xuXG4gICAgaWYgKGtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LlVQX0FSUk9XIHx8IGtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkRPV05fQVJST1cgfHwga2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuTEVGVF9BUlJPVyB8fCBrZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5SSUdIVF9BUlJPVykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZVRhcmdldCA9IGUudGFyZ2V0LnZhbHVlLnJlcGxhY2UoJy0nLCAnJyk7XG4gICAgbGV0IHZhbHVlID0gVXRpbHNDYWNoZS5nZXRMYW5nKCkgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVkkgPyBgJHt0aGlzLnZhbHVlKCkgfHwgMH1gLnJlcGxhY2UoJy4nLCAnLCcpIDogYCR7dGhpcy52YWx1ZSgpIHx8IDB9YDtcblxuICAgIHZhbHVlID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKHZhbHVlLCB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSwgKHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KSk7XG4gICAgdmFsdWUgPSBgJHt2YWx1ZX1gLnJlcGxhY2UoJy0nLCAnJyk7XG5cbiAgICBpZiAodmFsdWUgPT09IHZhbHVlVGFyZ2V0ICYmIHZhbHVlICE9PSAnMCcgJiYgdmFsdWUgIT09ICctJykge1xuICAgICAgc2V0Q2FyZXRQb3NpdGlvbih0aGlzLkVsZW1lbnQsIHNlbGVjdGlvblN0YXJ0KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBmYWN0b3IgPSAwO1xuICAgIGNvbnN0IGRpc3RhbmNlID0gdmFsdWVUYXJnZXQubGVuZ3RoIC0gdmFsdWUubGVuZ3RoO1xuICAgIGlmIChkaXN0YW5jZSA8IC0xKSB7XG4gICAgICBmYWN0b3IgPSAtMTtcbiAgICB9XG4gICAgaWYgKGRpc3RhbmNlID4gMSkge1xuICAgICAgZmFjdG9yID0gMTtcbiAgICB9XG4gICAgc2VsZWN0aW9uU3RhcnQgKz0gZmFjdG9yO1xuICAgIGlmIChpbnB1dFR5cGUgPT09ICdpbnNlcnRGcm9tUGFzdGUnICYmIHRoaXMuZGF0YVRleHRQYXN0ZSgpKSB7XG4gICAgICBjb25zdCBkYXRhVGV4dERpc3BsYXkgPSBgJHt2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UodGhpcy5kYXRhVGV4dFBhc3RlKCksIHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpLCAodGhpcy5maXhlZEZsb2F0KCkgPz8gMTQpKX1gO1xuICAgICAgY29uc3QgaW5kZXhlczogQXJyYXk8bnVtYmVyPiA9IGUudGFyZ2V0LnZhbHVlLmluZGV4ZXNCeVN0cmluZyhkYXRhVGV4dERpc3BsYXkpO1xuXG4gICAgICBzZWxlY3Rpb25TdGFydCAtPSBmYWN0b3I7XG5cbiAgICAgIGlmIChpbmRleGVzLnNvbWUoaW5kZXggPT4gaW5kZXggPT09IHNlbGVjdGlvblN0YXJ0KSB8fCAhaW5kZXhlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHNldENhcmV0UG9zaXRpb24odGhpcy5FbGVtZW50LCBzZWxlY3Rpb25TdGFydCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBuZXdTZWxlY3Rpb25TdGFydCA9IGluZGV4ZXNbMF07XG5cbiAgICAgIGZvciAoY29uc3QgaW5kZXggb2YgaW5kZXhlcykge1xuICAgICAgICBsZXQgcmVwbGFjZVZhbHVlID0gZm9ybWF0TnVtYmVyKGAke3ZhbHVlVGFyZ2V0LnN1YnN0cmluZygwLCBpbmRleCl9JHt2YWx1ZVRhcmdldC5zdWJzdHJpbmcoaW5kZXggKyBkYXRhVGV4dERpc3BsYXkubGVuZ3RoICsgMSwgdmFsdWVUYXJnZXQubGVuZ3RoKX1gKTtcblxuICAgICAgICByZXBsYWNlVmFsdWUgPSB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UocmVwbGFjZVZhbHVlLCB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSwgKHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KSk7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gcmVwbGFjZVZhbHVlKSB7XG4gICAgICAgICAgbmV3U2VsZWN0aW9uU3RhcnQgPSBpbmRleDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobmV3U2VsZWN0aW9uU3RhcnQgPj0gMCkge1xuICAgICAgICBzZWxlY3Rpb25TdGFydCA9IG5ld1NlbGVjdGlvblN0YXJ0ICsgZGF0YVRleHREaXNwbGF5Lmxlbmd0aCArIDE7XG5cbiAgICAgICAgcmV0dXJuIHNldENhcmV0UG9zaXRpb24odGhpcy5FbGVtZW50LCBzZWxlY3Rpb25TdGFydCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0Q2FyZXRQb3NpdGlvbih0aGlzLkVsZW1lbnQsIHNlbGVjdGlvblN0YXJ0KTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VWYWx1ZUJ5RGF0YVR5cGUodmFsdWU6IHN0cmluZyk6IG51bWJlciB8IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLmRhdGFUeXBlKCkpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgaWYgKHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmICh2YWx1ZSA9PT0gJy0nIHx8IHZhbHVlID09PSAnLCcgfHwgdmFsdWUgPT09ICcuJykpIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiArKGZvcm1hdE51bWJlcih2YWx1ZSkpO1xuXG4gICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgIGlmICh0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiAodmFsdWUgPT09ICctJyB8fCB2YWx1ZSA9PT0gJywnIHx8IHZhbHVlID09PSAnLicpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCgoK2Zvcm1hdE51bWJlcih2YWx1ZSkpLnRvRml4ZWQodGhpcy5maXhlZEZsb2F0KCkgPz8gMTQpKTtcblxuICAgICAgY2FzZSAnYmlnaW50JzpcbiAgICAgICAgaWYgKHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmICh2YWx1ZSA9PT0gJy0nIHx8IHZhbHVlID09PSAnLCcgfHwgdmFsdWUgPT09ICcuJykpIHtcbiAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdG9ySGVpZ2h0VGV4dEFyZWEoZTogSUV2ZW50IHwgSUV2ZW50Q3VzdG9tKSB7XG4gICAgaWYgKHRoaXMudGFnSW5wdXQoKSA9PT0gJ2lucHV0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldDtcblxuICAgIHRhcmdldC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgIHRhcmdldC5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLmRlZmF1bHRIZWlnaHQoKX1weGA7XG4gICAgY29uc3QgeyBzY3JvbGxIZWlnaHQgfSA9IHRhcmdldDtcblxuICAgIGNvbnN0IGhlaWdodCA9IHNjcm9sbEhlaWdodCArIDI7IC8vICBib3JkZXIgdG9wICsgYm90dG9tID0gMlxuXG4gICAgaWYgKCF0aGlzLnByZUhlaWdodEFyZWEoKSAmJiB0aGlzLnByZUhlaWdodEFyZWEoKSAhPT0gaGVpZ2h0KSB7XG4gICAgICB0aGlzLm91dEhlaWdodEFyZWFDaGFuZ2UuZW1pdCh7IGlzQ2hhbmdlOiB0cnVlLCBoZWlnaHQ6IGhlaWdodCB9KTtcbiAgICB9XG5cbiAgICBpZiAoaGVpZ2h0ID4gKHRoaXMubWF4SGVpZ2h0VGV4dEFyZWEoKSA/PyAzMikpIHtcbiAgICAgIHRhcmdldC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICB9XG4gICAgaWYgKHRoaXMuaWZyYW1lUmVmKSB7XG4gICAgICB0aGlzLmlmcmFtZVJlZi5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgIH1cbiAgICB0YXJnZXQuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICB0aGlzLnByZUhlaWdodEFyZWEuc2V0KGhlaWdodCk7XG5cbiAgfVxuXG4gIHByaXZhdGUgY29tYmluZU9ic2VydmFibGUobW91c2VEb3duRXZlbnQ6IE9ic2VydmFibGU8SUV2ZW50Piwgb2JzZXJ2YWJsZU1lcmdlOiBPYnNlcnZhYmxlPElFdmVudD4pIHtcbiAgICBtb3VzZURvd25FdmVudC5waXBlKFxuICAgICAgbWVyZ2VNYXAoKCkgPT4gb2JzZXJ2YWJsZU1lcmdlKSxcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgIHRhcCgoZTogSUV2ZW50KSA9PiB0aGlzLmNoZWNrVHlwZU51bWJlcihlLCAna2V5JykpLFxuICAgICkuc3Vic2NyaWJlKChlOiBJRXZlbnQpID0+IHRoaXMucHJvY2Vzc0V2ZW50QW5kRW1pdFZhbHVlKGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZm9jdXMoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLkVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgfSwgdGhpcy5mb2N1c1RpbWVPdXQoKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJsdXIoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLkVsZW1lbnQ/LmJsdXIoKTtcbiAgICB9LCB0aGlzLmJsdXJUaW1lT3V0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGREYXRhVG9TZWxlY3Rpb25JbnB1dChkYXRhOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLkVsZW1lbnQ7XG4gICAgY29uc3Qgc2VsZWN0aW9uU3RhcnQgPSB0YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuRWxlbWVudC52YWx1ZTtcbiAgICBjb25zdCBiZWZvcmVWYWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBzZWxlY3Rpb25TdGFydCk7XG4gICAgY29uc3QgYWZ0ZXJWYWx1ZSA9IHZhbHVlLnN1YnN0cmluZyhzZWxlY3Rpb25TdGFydCk7XG5cbiAgICB0aGlzLkVsZW1lbnQudmFsdWUgPSBgJHtiZWZvcmVWYWx1ZX0ke2RhdGF9JHthZnRlclZhbHVlfWA7XG4gICAgc2V0Q2FyZXRQb3NpdGlvbih0aGlzLkVsZW1lbnQsIHNlbGVjdGlvblN0YXJ0ICsgZGF0YS50b1N0cmluZygpLmxlbmd0aCk7XG4gICAgY29uc3QgZXZlbnRGYWtlOiBJRXZlbnRDdXN0b20gPSB7IHByZXZlbnREZWZhdWx0OiAoKSA9PiB7IHJldHVybiB9LCB0YXJnZXQ6IHRoaXMuRWxlbWVudCwgZGF0YTogJycsIGZha2VFdmVudDogdHJ1ZSB9O1xuXG4gICAgdGhpcy5wcm9jZXNzRXZlbnRBbmRFbWl0VmFsdWUoZXZlbnRGYWtlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyT25Mb2FkKGU6IEV2ZW50LCBlbGVtZW50OiBIVE1MSUZyYW1lRWxlbWVudCkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pZnJhbWVSZWYgPSBlbGVtZW50O1xuICAgIGNvbnN0IGlmcmFtZTogYW55ID0gZWxlbWVudC5jb250ZW50V2luZG93IHx8IGVsZW1lbnQuY29udGVudERvY3VtZW50O1xuICAgIHRoaXMuY29uZmlnUHJvamVjdFNlcnZpY2Uuc2V0dXBGb250RmFtaWx5KGlmcmFtZS5kb2N1bWVudCk7XG5cbiAgICB0aGlzLmlucHV0SWZyYW1lUmVmLnNldCh7IG5hdGl2ZUVsZW1lbnQ6IGlmcmFtZS5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnVEVYVEFSRUEnKVswXSB9KTtcbiAgICBpZiAodGhpcy5FbGVtZW50KSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLkVsZW1lbnQsICdwbGFjZWhvbGRlcicsIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMucGxhY2Vob2xkZXIoKSkpO1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZSgpKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuRWxlbWVudCwgJ2Rpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWZ0ZXJWaWV3SW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzZXRWYWx1ZSgpIHtcbiAgICBjb25zdCB2YWx1ZSA9ICcnO1xuXG4gICAgdGhpcy5FbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy52YWx1ZS5zZXQodmFsdWUpO1xuICAgIHRoaXMub3V0Q2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb3VudERpc3BsYXlDb21wdXRlZCgpIHtcbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpICE9PSAnc3RyaW5nJyAmJiB0aGlzLnZhbHVlVXBEb3duTnVtYmVyKCkpIHtcbiAgICAgIHRoaXMucGFkZGluZ1JpZ2h0Q3VzdG9tLnNldCgodGhpcy5lbGVtZW50UmlnaHRSZWYoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB8fCAwKSArIDEyKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNob3dDb3VudCgpIHx8IHRoaXMuZGF0YVR5cGUoKSAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIHRoaXMudmFsdWUoKSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAnMCc7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5wYWRkaW5nUmlnaHRDdXN0b20uc2V0KCh0aGlzLmVsZW1lbnRSaWdodFJlZigpPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHx8IDApICsgMTIpO1xuICAgICAgaWYgKHRoaXMuc2hvd0NvdW50KCkpIHtcbiAgICAgICAgaWYgKHRoaXMudGV4dENvdW50UmVmKCkpIHtcbiAgICAgICAgICB0aGlzLnBhZGRpbmdSaWdodEN1c3RvbS5zZXQodGhpcy50ZXh0Q291bnRSZWYoKT8ubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCArIDE2KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRhZ0lucHV0KCkgPT09ICdpbnB1dCcpIHtcbiAgICAgICAgICB0aGlzLnBhZGRpbmdSaWdodEN1c3RvbS51cGRhdGUodmFsdWUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgKHRoaXMuZWxlbWVudFJpZ2h0UmVmKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgMCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGAke3ZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSgodGhpcy52YWx1ZSgpIGFzIHN0cmluZykubGVuZ3RoLCBmYWxzZSl9YDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VsZWN0QWxsQ29udGVudCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuRWxlbWVudD8uc2VsZWN0KCk7XG4gICAgfSwgdGhpcy5zZWxlY3RBbGxUaW1lT3V0KCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxkaXYgW2NsYXNzXT1cIidmbGV4IHJlbGF0aXZlICF0ZXh0LVsjOWNhMmFkXSAnICsgY2xhc3NDb250YWluZXJJbnB1dCgpXCJcbiAgW2NsYXNzLmxpYnMtdWktY29tcG9uZW50cy1pbnB1dC10ZXh0YXJlYS1jb250YWluZXJdPVwidGFnSW5wdXQoKSA9PT0gJ3RleHRhcmVhJyAmJiByZXNpemUoKSA9PT0gJ2F1dG8nXCI+XG4gIEBpZiAodGFnSW5wdXQoKSA9PT0gJ2lucHV0Jykge1xuICAgIDxpbnB1dCAjaW5wdXRSZWZcbiAgICAgIFtjbGFzcy5saWJzLXVpLXJlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHktYmFja2dyb3VuZF09XCJyZWFkb25seSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGUtYmFja2dyb3VuZF09XCJkaXNhYmxlKClcIlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJkZWZhdWx0SGVpZ2h0KClcIlxuICAgICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJkZWZhdWx0SGVpZ2h0KClcIlxuICAgICAgW3N0eWxlLnBhZGRpbmdSaWdodC5weC5pbXBvcnRhbnRdPVwicGFkZGluZ1JpZ2h0Q3VzdG9tKClcIlxuICAgICAgW2NsYXNzLnctZnVsbF09XCIhaWdub3JlV2lkdGhJbnB1dDEwMCgpXCJcbiAgICAgIFtjbGFzc109XCInbGlicy11aS1pbnB1dCBsaWJzLXVpLWZvbnQtaDVyICcgKyBjbGFzc0luY2x1ZGUoKVwiXG4gICAgICBbY2xhc3MuYm9yZGVyLXByaW1hcnktZm9jdXMtZ2VuZXJhbF09XCJmb2N1c0lucHV0KClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktaW5wdXQtbm90LWJvcmRlcl09XCJub0JvcmRlcigpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWJnLXNwZWNpYWwtbm9uZV09XCJiYWNrZ3JvdW5kTm9uZSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci1lcnJvci1nZW5lcmFsXT1cImJvcmRlckVycm9yKClcIlxuICAgICAgW2NsYXNzLnRleHQtWyMyOWM3Y2NdXT1cInVzZUNvbG9yTW9kZUV4aXN0KClcIlxuICAgICAgW2NsYXNzLiFwbC1bNDBweF1dPVwiaWNvbkxlZnRDbGFzcygpXCJcbiAgICAgIFthdHRyLm1heExlbmd0aF09XCJtYXhMZW5ndGgoKSB8fCB1bmRlZmluZWRcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKCkgfCB0cmFuc2xhdGVcIlxuICAgICAgW2F0dHIudHlwZV09XCJ0eXBlSW5wdXQoKVwiXG4gICAgICBbYXR0ci5pbnB1dG1vZGVdPVwibW9kZUlucHV0KClcIlxuICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGUoKVwiXG4gICAgICBbYXV0b2NvbXBsZXRlXT1cInJlc2V0QXV0b0NvbXBsZXRlUGFzc3dvcmQoKT8gJ25ldy1wYXNzd29yZCc6JydcIiAvPlxuICB9XG4gIEBpZiAodGFnSW5wdXQoKSA9PT0gJ3RleHRhcmVhJykge1xuICAgIEBpZiAocmVzaXplKCkgPT09ICdhdXRvJykge1xuICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50cy1pbnB1dC10ZXh0YXJlYS1jb250YWluZXItcmVzaXplLWljb25cIj48L2Rpdj5cbiAgICB9XG4gICAgPHRleHRhcmVhICNpbnB1dFJlZlxuICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seS1iYWNrZ3JvdW5kXT1cInJlYWRvbmx5KClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZS1iYWNrZ3JvdW5kXT1cImRpc2FibGUoKVwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImRlZmF1bHRIZWlnaHQoKVwiXG4gICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cIm1pbkhlaWdodFRleHRBcmVhKCkgPz8gZGVmYXVsdEhlaWdodCgpXCJcbiAgICAgIFtzdHlsZS5wYWRkaW5nUmlnaHQucHguaW1wb3J0YW50XT1cInBhZGRpbmdSaWdodEN1c3RvbSgpXCJcbiAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwibWF4SGVpZ2h0VGV4dEFyZWEoKVwiXG4gICAgICBbc3R5bGUucmVzaXplXT1cInJlc2l6ZSgpXCJcbiAgICAgIFtjbGFzcy53LWZ1bGxdPVwiIWlnbm9yZVdpZHRoSW5wdXQxMDAoKVwiXG4gICAgICBbY2xhc3NdPVwiJ2xpYnMtdWktaW5wdXQgbGlicy11aS1mb250LWg1ciBsaWJzLXVpLWN1cnNvci1hdXRvICcgKyBjbGFzc0luY2x1ZGUoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1pbnB1dC1ub3QtYm9yZGVyXT1cIm5vQm9yZGVyKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktYmctc3BlY2lhbC1ub25lXT1cImJhY2tncm91bmROb25lKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktYm9yZGVyLWVycm9yLWdlbmVyYWxdPVwiYm9yZGVyRXJyb3IoKVwiXG4gICAgICBbY2xhc3MudGV4dC1bIzI5YzdjY11dPVwidXNlQ29sb3JNb2RlRXhpc3QoKVwiXG4gICAgICBbY2xhc3MucGwtWzMycHhdXT1cImljb25MZWZ0Q2xhc3MoKVwiXG4gICAgICBbYXR0ci5tYXhMZW5ndGhdPVwibWF4TGVuZ3RoKCkgfHwgdW5kZWZpbmVkXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcigpIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlKClcIj5cbiAgICAgIDwvdGV4dGFyZWE+XG4gIH1cblxuICBAaWYgKHRhZ0lucHV0KCkgPT09ICdpZnJhbWUtdGV4dGFyZWEnICYmIGh0bWxJZnJhbWVBcmVhKCkpIHtcbiAgICA8c3BhbiBjbGFzcz1cImQtbm9uZVwiPlxuICAgIDwvc3Bhbj5cbiAgICA8aWZyYW1lICNpZnJhbWVSZWZcbiAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwibWF4SGVpZ2h0VGV4dEFyZWEoKVwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImRlZmF1bHRIZWlnaHQoKVwiXG4gICAgICBbc3JjZG9jXT1cImh0bWxJZnJhbWVBcmVhKClcIlxuICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgZnJhbWVCb3JkZXI9XCIwXCJcbiAgICAgIChsb2FkKT1cImhhbmRsZXJPbkxvYWQoJGV2ZW50LGlmcmFtZVJlZilcIj5cbiAgICA8L2lmcmFtZT5cbiAgfVxuICBAaWYgKGljb25MZWZ0Q2xhc3MoKSkge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbaWdub3JlU2hvd1BvcG92ZXJdPVwiIXBvcG92ZXJDb250ZW50SWNvbkxlZnQoKVwiXG4gICAgICBbY29uZmlnXT1cInttYXhXaWR0aDoyNTAsZGlyZWN0aW9uOidib3R0b20nLGNvbnRlbnQ6cG9wb3ZlckNvbnRlbnRJY29uTGVmdCgpLHpJbmRleDogekluZGV4UG9wb3ZlckNvbnRlbnQoKX1cIj5cbiAgICAgIDxpIFthdHRyLnRhZ0lucHV0XT1cInRhZ0lucHV0KClcIlxuICAgICAgICBbY2xhc3NdPVwiaWNvbkxlZnRDbGFzcygpICsnIGxpYnMtdWktaW5wdXQtaWNvbi1sZWZ0ICF0ZXh0LVsjOWNhMmFkXSdcIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlckV2ZW50SWNvbkxlZnQoJGV2ZW50LCdjbGljaycpXCI+XG4gICAgICA8L2k+XG4gICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgfVxuICA8ZGl2ICNlbGVtZW50UmlnaHRSZWZcbiAgICBjbGFzcz1cImFic29sdXRlIGZsZXggaXRlbXMtY2VudGVyIGgtZnVsbCB0b3AtMCByaWdodC0wXCI+XG4gICAgQGlmICh2YWx1ZSgpICYmIHBsYWNlaG9sZGVyKCkudHJpbSgpICYmIGtlZXBQbGFjZWhvbGRlck9ubHkoKSkge1xuICAgICAgPHNwYW4gW2NsYXNzXT1cIidsaWJzLXVpLWlucHV0LXBsYWNlaG9sZGVyLWN1c3RvbSBsaWJzLXVpLWZvbnQtaDVyJ1wiPlxuICAgICAgICB7eyBwbGFjZWhvbGRlcigpIH19XG4gICAgICA8L3NwYW4+XG4gICAgfVxuICAgIEBpZiAoZGF0YVR5cGUoKSAhPT0nc3RyaW5nJyAmJiB2YWx1ZVVwRG93bk51bWJlcigpKSB7XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtc29ydCBjbGFzcz1cIm1yLVsxMnB4XVwiXG4gICAgICAgIFtkaXNhYmxlQXNjXT1cImRpc2FibGVBc2MoKVwiXG4gICAgICAgIFtkaXNhYmxlRGVzY109XCJkaXNhYmxlRGVzYygpXCJcbiAgICAgICAgW2F0dHIudGFnSW5wdXRdPVwidGFnSW5wdXQoKVwiXG4gICAgICAgIFtvbmx5RW1pdF09XCJ0cnVlXCJcbiAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpIHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2VWYWx1ZSgkZXZlbnQpXCIgLz5cbiAgICB9XG4gICAgQGlmIChpY29uUmlnaHRDbGFzcygpKSB7XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgY2xhc3M9XCJmbGV4XCJcbiAgICAgICAgW2lnbm9yZVNob3dQb3BvdmVyXT1cIiFwb3BvdmVyQ29udGVudEljb25SaWdodCgpXCJcbiAgICAgICAgW2NvbmZpZ109XCJ7bWF4V2lkdGg6MjUwLGRpcmVjdGlvbjonYm90dG9tJyxjb250ZW50OnBvcG92ZXJDb250ZW50SWNvblJpZ2h0KCksekluZGV4OiB6SW5kZXhQb3BvdmVyQ29udGVudCgpfVwiPlxuICAgICAgICA8aSBbYXR0ci50YWdJbnB1dF09XCJ0YWdJbnB1dCgpXCJcbiAgICAgICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiKCFkaXNhYmxlKCkgJiYgIXJlYWRvbmx5KCkpIHx8IGFjY2VwdE9ubHlDbGlja0ljb24oKVwiXG4gICAgICAgICAgW2NsYXNzLnRleHQtWyNjZGQwZDZdXT0nKChkaXNhYmxlKCkgfHwgcmVhZG9ubHkoKSkgJiYgIWFjY2VwdE9ubHlDbGlja0ljb24oKSkgfHwgc2V0SWNvblJpZ2h0Q29sb3JTYW1lQ29sb3JEaXNhYmxlUmVhZE9ubHkoKSdcbiAgICAgICAgICBbY2xhc3NdPVwiaWNvblJpZ2h0Q2xhc3MoKSArJyBsaWJzLXVpLWlucHV0LWljb24tcmlnaHQnXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckV2ZW50SWNvblJpZ2h0KCRldmVudCwnY2xpY2snKVwiPlxuICAgICAgICA8L2k+XG4gICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgIH1cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImxpYnMtdWktaW5wdXQtdGV4dC1ib3R0b20ge3sgY2xhc3NDb250YWluZXJCb3R0b21JbnB1dCgpIH19XCJcbiAgICBbc3R5bGUucmlnaHQucHhdPVwiKHRhZ0lucHV0KCkgPT09ICdpbnB1dCcgPyAoZWxlbWVudFJpZ2h0UmVmLmNsaWVudFdpZHRoIHx8IDApIDogMCkgKyA4XCI+XG4gICAgQGlmICh0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dCgpOyBhcyB0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dCkge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlTGVmdEJvdHRvbUlucHV0XCIgLz5cbiAgICB9XG4gICAgQGlmIChkYXRhVHlwZSgpID09PSAnc3RyaW5nJyAmJiBzaG93Q291bnQoKSkge1xuICAgICAgPGRpdiAjdGV4dENvdW50UmVmXG4gICAgICAgIGNsYXNzPVwidGV4dC1bIzljYTJhZF0gbGlicy11aS1mb250LWg3clwiPlxuICAgICAgICA8c3Bhbj57eyBjb3VudERpc3BsYXkoKSB9fTwvc3Bhbj5cbiAgICAgICAgQGlmIChtYXhMZW5ndGgoKSkge1xuICAgICAgICAgIDxzcGFuPi97eyBtYXhMZW5ndGhEaXNwbGF5KCkgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKHRlbXBsYXRlUmlnaHRCb3R0b21JbnB1dCgpOyBhcyB0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXQpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlUmlnaHRCb3R0b21JbnB1dFwiIC8+XG4gICAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|