@libs-ui/components-inputs-input 0.2.357-2 → 0.2.357-4

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.
@@ -1,4 +1,5 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { NgTemplateOutlet } from '@angular/common';
2
3
  import { ChangeDetectionStrategy, Component, Renderer2, computed, effect, inject, input, model, output, signal, untracked, viewChild } from '@angular/core';
3
4
  import { DomSanitizer } from '@angular/platform-browser';
4
5
  import { LibsUiComponentsButtonsSortComponent } from '@libs-ui/components-buttons-sort';
@@ -6,10 +7,9 @@ import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
6
7
  import { LibsUiConfigProjectService } from '@libs-ui/services-config-project';
7
8
  import { UtilsCache, UtilsKeyCodeConstant, UtilsLanguageConstants, formatNumber, isNil, isTypeFile, removeEmoji, setCaretPosition, uuid, viewDataNumberByLanguage } from '@libs-ui/utils';
8
9
  import { TranslateModule, TranslateService } from '@ngx-translate/core';
9
- import { Subject, fromEvent } from 'rxjs';
10
+ import { Subject, fromEvent, merge } from 'rxjs';
10
11
  import { debounceTime, filter, mergeMap, take, takeUntil, tap } from 'rxjs/operators';
11
12
  import { indexInputHtml } from './defines/index-iframe-area.define';
12
- import { NgTemplateOutlet } from '@angular/common';
13
13
  import * as i0 from "@angular/core";
14
14
  import * as i1 from "@ngx-translate/core";
15
15
  export class LibsUiComponentsInputsInputComponent {
@@ -21,6 +21,7 @@ export class LibsUiComponentsInputsInputComponent {
21
21
  maxLengthDisplay = computed(() => `${viewDataNumberByLanguage(this.maxLength() || 0, false)}`);
22
22
  paddingRightCustom = signal(undefined);
23
23
  inputIframeRef = signal(undefined);
24
+ ignoreCompositionEvent = new Subject();
24
25
  DEFAULT_MAX_HEIGHT_TEXT_AREA = 250;
25
26
  charFirstIsZero = signal(false);
26
27
  preHeightArea = signal(0);
@@ -105,24 +106,24 @@ export class LibsUiComponentsInputsInputComponent {
105
106
  constructor() {
106
107
  effect(() => {
107
108
  if (this.onlyAcceptNegativeValue()) {
108
- this.acceptNegativeValue.set(true);
109
+ untracked(() => this.acceptNegativeValue.set(true));
109
110
  }
110
111
  if (!this.Element) {
111
112
  return;
112
113
  }
113
114
  if (this.dataType() === 'string') {
114
115
  if (this.Element.value !== this.value()) {
115
- this.init();
116
+ untracked(() => this.init());
116
117
  }
117
118
  return;
118
119
  }
119
- this.updateMaxLengthMinMaxValueByDataType();
120
+ untracked(() => this.updateMaxLengthMinMaxValueByDataType());
120
121
  const value = this.parseValueByDataType(this.Element.value);
121
122
  if ((this.Element.value !== '' && value === this.value()) || (this.Element.value === '' && this.emitEmptyInDataTypeNumber() && this.value() === undefined)) {
122
123
  return;
123
124
  }
124
- this.init();
125
- }, { allowSignalWrites: true });
125
+ untracked(() => this.init());
126
+ });
126
127
  effect(() => {
127
128
  if (this.Element) {
128
129
  this.onDestroy.next();
@@ -165,11 +166,18 @@ export class LibsUiComponentsInputsInputComponent {
165
166
  keyDownEvent
166
167
  .pipe(take(1), tap((e) => this.checkTypeNumber(e, 'key')), mergeMap(() => inputEvent), tap((e) => this.checkTypeNumber(e, 'data')))
167
168
  .subscribe((e) => {
169
+ this.ignoreCompositionEvent.next(true);
170
+ this.ignoreCompositionEvent.complete();
168
171
  if (this.dataType() === 'string' && this.maxLength() && (e.inputType === 'insertCompositionText' || e.inputType === 'insertText') && e.target.value?.length > (this.maxLength() || 0)) {
169
172
  e.target.value = e.target.value.slice(0, this.maxLength());
170
173
  }
171
174
  this.processEventAndEmitValue(e);
172
175
  });
176
+ merge(fromEvent(this.Element, 'compositionstart'), fromEvent(this.Element, 'compositionend'))
177
+ .pipe(takeUntil(this.ignoreCompositionEvent), takeUntil(this.onDestroy))
178
+ .subscribe((e) => {
179
+ this.processEventAndEmitValue(e);
180
+ });
173
181
  keyupEvent
174
182
  .pipe(filter((event) => event.keyCode === UtilsKeyCodeConstant.ENTER), filter((event) => !this.textAreaEnterNotNewLine() || (this.textAreaEnterNotNewLine() && !event.shiftKey)))
175
183
  .subscribe((event) => this.outEnterEvent.emit(event));
@@ -830,6 +838,7 @@ export class LibsUiComponentsInputsInputComponent {
830
838
  ngOnDestroy() {
831
839
  this.onDestroy.next();
832
840
  this.onDestroy.complete();
841
+ this.ignoreCompositionEvent.complete();
833
842
  }
834
843
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
835
844
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", 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\n [class]=\"'flex relative !text-[#9ca2ad] ' + classContainerInput()\"\n [class.libs-ui-components-input-textarea-container]=\"tagInput() === 'textarea' && resize() === 'auto'\">\n @if (tagInput() === 'input') {\n <input\n #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\n #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()\"></textarea>\n }\n\n @if (tagInput() === 'iframe-textarea' && htmlIframeArea()) {\n <span class=\"d-none\"></span>\n <iframe\n #iframeRef\n title=\"Content frame\"\n [style.maxHeight.px]=\"maxHeightTextArea()\"\n [style.height.px]=\"defaultHeight()\"\n [srcdoc]=\"htmlIframeArea()\"\n class=\"w-full border-0\"\n (load)=\"handlerOnLoad($event, iframeRef)\"></iframe>\n }\n @if (iconLeftClass()) {\n <libs_ui-components-popover\n [ignoreShowPopover]=\"!popoverContentIconLeft()\"\n [config]=\"{ maxWidth: 250, direction: 'bottom', content: popoverContentIconLeft(), zIndex: zIndexPopoverContent() }\">\n <i\n [attr.tagInput]=\"tagInput()\"\n [class]=\"iconLeftClass() + ' libs-ui-input-icon-left !text-[#9ca2ad]'\"\n (click)=\"handlerEventIconLeft($event, 'click')\"\n (keydown.enter)=\"handlerEventIconLeft($event, 'click')\"></i>\n </libs_ui-components-popover>\n }\n <div\n #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\n 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\n class=\"flex\"\n [ignoreShowPopover]=\"!popoverContentIconRight()\"\n [config]=\"{ maxWidth: 250, direction: 'bottom', content: popoverContentIconRight(), zIndex: zIndexPopoverContent() }\">\n <i\n [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 (keydown.enter)=\"handlerEventIconRight($event, 'click')\"></i>\n </libs_ui-components-popover>\n }\n </div>\n <div\n 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 <div\n #textCountRef\n class=\"text-[#9ca2ad] libs-ui-font-h7r\"\n [class.hidden]=\"dataType() !== 'string' || !showCount()\">\n <span>{{ countDisplay() }}</span>\n @if (maxLength()) {\n <span>/{{ maxLengthDisplay() }}</span>\n }\n </div>\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 });
@@ -838,4 +847,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
838
847
  type: Component,
839
848
  args: [{ selector: 'libs_ui-components-inputs-input', standalone: true, imports: [TranslateModule, NgTemplateOutlet, LibsUiComponentsPopoverComponent, LibsUiComponentsButtonsSortComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [class]=\"'flex relative !text-[#9ca2ad] ' + classContainerInput()\"\n [class.libs-ui-components-input-textarea-container]=\"tagInput() === 'textarea' && resize() === 'auto'\">\n @if (tagInput() === 'input') {\n <input\n #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\n #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()\"></textarea>\n }\n\n @if (tagInput() === 'iframe-textarea' && htmlIframeArea()) {\n <span class=\"d-none\"></span>\n <iframe\n #iframeRef\n title=\"Content frame\"\n [style.maxHeight.px]=\"maxHeightTextArea()\"\n [style.height.px]=\"defaultHeight()\"\n [srcdoc]=\"htmlIframeArea()\"\n class=\"w-full border-0\"\n (load)=\"handlerOnLoad($event, iframeRef)\"></iframe>\n }\n @if (iconLeftClass()) {\n <libs_ui-components-popover\n [ignoreShowPopover]=\"!popoverContentIconLeft()\"\n [config]=\"{ maxWidth: 250, direction: 'bottom', content: popoverContentIconLeft(), zIndex: zIndexPopoverContent() }\">\n <i\n [attr.tagInput]=\"tagInput()\"\n [class]=\"iconLeftClass() + ' libs-ui-input-icon-left !text-[#9ca2ad]'\"\n (click)=\"handlerEventIconLeft($event, 'click')\"\n (keydown.enter)=\"handlerEventIconLeft($event, 'click')\"></i>\n </libs_ui-components-popover>\n }\n <div\n #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\n 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\n class=\"flex\"\n [ignoreShowPopover]=\"!popoverContentIconRight()\"\n [config]=\"{ maxWidth: 250, direction: 'bottom', content: popoverContentIconRight(), zIndex: zIndexPopoverContent() }\">\n <i\n [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 (keydown.enter)=\"handlerEventIconRight($event, 'click')\"></i>\n </libs_ui-components-popover>\n }\n </div>\n <div\n 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 <div\n #textCountRef\n class=\"text-[#9ca2ad] libs-ui-font-h7r\"\n [class.hidden]=\"dataType() !== 'string' || !showCount()\">\n <span>{{ countDisplay() }}</span>\n @if (maxLength()) {\n <span>/{{ maxLengthDisplay() }}</span>\n }\n </div>\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"] }]
840
849
  }], ctorParameters: () => [] });
841
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9pbnB1dC9zcmMvaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9pbnB1dC9zcmMvaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWlDLFNBQVMsRUFBZSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4TSxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFTLG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0YsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUwsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBYyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFF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LENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCO1FBQzVCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3pCLENBQUMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBdjlCVSxvQ0FBb0M7NEZBQXBDLG9DQUFvQyxrblNDMUJqRCxtd0xBb0lBLGtvREQ3R1ksZUFBZSw0RkFBRSxnQkFBZ0Isb0pBQUUsZ0NBQWdDLG9nQkFBRSxvQ0FBb0M7OzRGQUd4RyxvQ0FBb0M7a0JBVGhELFNBQVM7K0JBRUUsaUNBQWlDLGNBRy9CLElBQUksV0FDUCxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxnQ0FBZ0MsRUFBRSxvQ0FBb0MsQ0FBQyxtQkFDbkcsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIsIFRlbXBsYXRlUmVmLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBtb2RlbCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBJU29ydCwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNTb3J0Q29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLXNvcnQnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgSUV2ZW50LCBJRXZlbnRDdXN0b20sIElTdHJpbmcsIFRZUEVfVEVNUExBVEVfUkVGIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBMaWJzVWlDb25maWdQcm9qZWN0U2VydmljZSB9IGZyb20gJ0BsaWJzLXVpL3NlcnZpY2VzLWNvbmZpZy1wcm9qZWN0JztcbmltcG9ydCB7IFV0aWxzQ2FjaGUsIFV0aWxzS2V5Q29kZUNvbnN0YW50LCBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLCBmb3JtYXROdW1iZXIsIGlzTmlsLCBpc1R5cGVGaWxlLCByZW1vdmVFbW9qaSwgc2V0Q2FyZXRQb3NpdGlvbiwgdXVpZCwgdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtZXJnZU1hcCwgdGFrZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpbmRleElucHV0SHRtbCB9IGZyb20gJy4vZGVmaW5lcy9pbmRleC1pZnJhbWUtYXJlYS5kZWZpbmUnO1xuaW1wb3J0IHsgSUZvY3VzQW5kQmx1ckV2ZW50LCBJSWZyYW1lVGV4dGFyZWFDdXN0b21TdHlsZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9mb2N1cy1hbmQtYmx1ci1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVFlQRV9EQVRBX1RZUEVfSU5QVVQsIFRZUEVfSU5QVVQsIFRZUEVfSU5QVVRfUkVTSVpFX01PREUsIFRZUEVfTU9ERV9JTlBVVCwgVFlQRV9UQUdfSU5QVVQgfSBmcm9tICcuL2ludGVyZmFjZXMvaW5wdXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgTmdUZW1wbGF0ZU91dGxldCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zU29ydENvbXBvbmVudF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJvdGVjdGVkIGRpc2FibGVBc2MgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgZGlzYWJsZURlc2MgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgaHRtbElmcmFtZUFyZWEgPSBzaWduYWw8U2FmZUh0bWwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBjb3VudERpc3BsYXkgPSBjb21wdXRlZCh0aGlzLmNvdW50RGlzcGxheUNvbXB1dGVkLmJpbmQodGhpcykpO1xuICBwcm90ZWN0ZWQgbWF4TGVuZ3RoRGlzcGxheSA9IGNvbXB1dGVkKCgpID0+IGAke3ZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSh0aGlzLm1heExlbmd0aCgpIHx8IDAsIGZhbHNlKX1gKTtcbiAgcHJvdGVjdGVkIHBhZGRpbmdSaWdodEN1c3RvbSA9IHNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBpbnB1dElmcmFtZVJlZiA9IHNpZ25hbDxFbGVtZW50UmVmIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9NQVhfSEVJR0hUX1RFWFRfQVJFQSA9IDI1MDtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGFyRmlyc3RJc1plcm8gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHByZUhlaWdodEFyZWEgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBpZnJhbWVSZWY6IEhUTUxJRnJhbWVFbGVtZW50IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFUZXh0UGFzdGUgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IHRhZ0lucHV0ID0gaW5wdXQ8VFlQRV9UQUdfSU5QVVQsIFRZUEVfVEFHX0lOUFVUIHwgdW5kZWZpbmVkPignaW5wdXQnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAnaW5wdXQnIH0pO1xuICByZWFkb25seSBkYXRhVHlwZSA9IGlucHV0PFRZUEVfREFUQV9UWVBFX0lOUFVULCBUWVBFX0RBVEFfVFlQRV9JTlBVVCB8IHVuZGVmaW5lZD4oJ3N0cmluZycsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgfHwgJ3N0cmluZycgfSk7XG4gIHJlYWRvbmx5IHR5cGVJbnB1dCA9IGlucHV0PFRZUEVfSU5QVVQsIFRZUEVfSU5QVVQgfCB1bmRlZmluZWQ+KCd0ZXh0JywgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCB8fCAndGV4dCcgfSk7XG4gIHJlYWRvbmx5IG1vZGVJbnB1dCA9IGlucHV0PFRZUEVfTU9ERV9JTlBVVCwgVFlQRV9NT0RFX0lOUFVUIHwgdW5kZWZpbmVkPigndGV4dCcsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgfHwgJ3RleHQnIH0pO1xuXG4gIHJlYWRvbmx5IHRhYkluc2VydENvbnRlbnRUYWdJbnB1dCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgdGV4dEFyZWFFbnRlck5vdE5ld0xpbmUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGVtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXIgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IGtlZXBaZXJvSW5UeXBlSW50ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBhdXRvQWRkWmVyb0xlc3NUaGFuMTBJblR5cGVJbnQgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlnbm9yZUJsb2NrSW5wdXRNYXhWYWx1ZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG1heFZhbHVlTnVtYmVyID0gbW9kZWw8bnVtYmVyPigpO1xuICByZWFkb25seSBtaW5WYWx1ZU51bWJlciA9IG1vZGVsPG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgZml4ZWRGbG9hdCA9IG1vZGVsPG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgYWNjZXB0TmVnYXRpdmVWYWx1ZSA9IG1vZGVsPGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgdmFsdWVVcERvd25OdW1iZXIgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZywgc3RyaW5nPignIHctZnVsbCAnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAnIHctZnVsbCAnIH0pO1xuICByZWFkb25seSBtYXhMZW5ndGggPSBtb2RlbDxudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IHJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSBub0JvcmRlciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGJhY2tncm91bmROb25lID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSBib3JkZXJFcnJvciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgdXNlQ29sb3JNb2RlRXhpc3QgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmc+KCcgJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJyAnIH0pO1xuICByZWFkb25seSBrZWVwUGxhY2Vob2xkZXJPbmx5ID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSB2YWx1ZSA9IG1vZGVsPHN0cmluZyB8IG51bWJlcj4oJycpO1xuICByZWFkb25seSBhdXRvUmVtb3ZlRW1vamkgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IGRlZmF1bHRIZWlnaHQgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMzIsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8IDMyIH0pO1xuICByZWFkb25seSBtaW5IZWlnaHRUZXh0QXJlYSA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgbWF4SGVpZ2h0VGV4dEFyZWEgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4odGhpcy5ERUZBVUxUX01BWF9IRUlHSFRfVEVYVF9BUkVBLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCB0aGlzLkRFRkFVTFRfTUFYX0hFSUdIVF9URVhUX0FSRUEgfSk7XG4gIHJlYWRvbmx5IGZvY3VzVGltZU91dCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPig2MDAsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IDYwMCB9KTtcbiAgcmVhZG9ubHkgc2VsZWN0QWxsVGltZU91dCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPig2MDAsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IDYwMCB9KTtcbiAgcmVhZG9ubHkgYmx1clRpbWVPdXQgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMzIsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8IDMyIH0pO1xuICByZWFkb25seSB6SW5kZXhQb3BvdmVyQ29udGVudCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgMTAgfSk7XG4gIHJlYWRvbmx5IGNsYXNzQ29udGFpbmVySW5wdXQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ3ctZnVsbCcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICd3LWZ1bGwnIH0pO1xuICByZWFkb25seSBzaG93Q291bnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHJlc2l6ZSA9IGlucHV0PFRZUEVfSU5QVVRfUkVTSVpFX01PREUsIFRZUEVfSU5QVVRfUkVTSVpFX01PREU+KCd2ZXJ0aWNhbCcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICd2ZXJ0aWNhbCcgfSk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlTGVmdEJvdHRvbUlucHV0ID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+PigpO1xuICByZWFkb25seSB0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXQgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4+KCk7XG4gIHJlYWRvbmx5IGNsYXNzQ29udGFpbmVyQm90dG9tSW5wdXQgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQsIHN0cmluZyB8IHVuZGVmaW5lZD4oJyAnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAnICcgfSk7XG4gIHJlYWRvbmx5IGlnbm9yZVdpZHRoSW5wdXQxMDAgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZnJhbWVUZXh0YXJlYUN1c3RvbVN0eWxlID0gaW5wdXQ8SUlmcmFtZVRleHRhcmVhQ3VzdG9tU3R5bGU+KCk7XG5cbiAgcmVhZG9ubHkgaWNvbkxlZnRDbGFzcyA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJycgfSk7XG4gIHJlYWRvbmx5IHBvcG92ZXJDb250ZW50SWNvbkxlZnQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICcnIH0pO1xuICByZWFkb25seSBpY29uUmlnaHRDbGFzcyA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgcG9wb3ZlckNvbnRlbnRJY29uUmlnaHQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICcnIH0pO1xuICByZWFkb25seSByZXNldEF1dG9Db21wbGV0ZVBhc3N3b3JkID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBhY2NlcHRPbmx5Q2xpY2tJY29uID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSBzZXRJY29uUmlnaHRDb2xvclNhbWVDb2xvckRpc2FibGVSZWFkT25seSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgb25seUFjY2VwdE5lZ2F0aXZlVmFsdWUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IG1heExlbmd0aE51bWJlckNvdW50ID0gbW9kZWw8bnVtYmVyIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBmb2N1c0lucHV0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dEhlaWdodEFyZWFDaGFuZ2UgPSBvdXRwdXQ8eyBpc0NoYW5nZTogYm9vbGVhbjsgaGVpZ2h0OiBudW1iZXIgfT4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgb3V0Rm9jdXNBbmRCbHVyRXZlbnQgPSBvdXRwdXQ8SUZvY3VzQW5kQmx1ckV2ZW50PigpO1xuICByZWFkb25seSBvdXRFbnRlckV2ZW50ID0gb3V0cHV0PElFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0SW5wdXRFdmVudCA9IG91dHB1dDxJRXZlbnQ+KCk7IC8vIGVtaXQgcHVyZSBldmVudCBpbnB1dFxuICByZWFkb25seSBvdXRJY29uTGVmdCA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dEljb25SaWdodCA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dEZpbGVzRHJvcCA9IG91dHB1dDxBcnJheTxGaWxlPj4oKTtcbiAgcmVhZG9ubHkgb3V0RmlsZURyb3AgPSBvdXRwdXQ8RmlsZT4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdlVmFsdWVCeUJ1dHRvblVwRG93biA9IG91dHB1dDx2b2lkPigpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcHJvdGVjdGVkIGlucHV0UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdpbnB1dFJlZicpO1xuICBwcm90ZWN0ZWQgdGV4dENvdW50UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCd0ZXh0Q291bnRSZWYnKTtcbiAgcHJvdGVjdGVkIGVsZW1lbnRSaWdodFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignZWxlbWVudFJpZ2h0UmVmJyk7XG5cbiAgLy8gI3JlZ2lvbiBJTkpFQ1RcbiAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1Byb2plY3RTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUNvbmZpZ1Byb2plY3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMub25seUFjY2VwdE5lZ2F0aXZlVmFsdWUoKSkge1xuICAgICAgICAgIHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZS5zZXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLkVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0aGlzLkVsZW1lbnQudmFsdWUgIT09IHRoaXMudmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlTWF4TGVuZ3RoTWluTWF4VmFsdWVCeURhdGFUeXBlKCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZVZhbHVlQnlEYXRhVHlwZSh0aGlzLkVsZW1lbnQudmFsdWUpO1xuXG4gICAgICAgIGlmICgodGhpcy5FbGVtZW50LnZhbHVlICE9PSAnJyAmJiB2YWx1ZSA9PT0gdGhpcy52YWx1ZSgpKSB8fCAodGhpcy5FbGVtZW50LnZhbHVlID09PSAnJyAmJiB0aGlzLmVtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXIoKSAmJiB0aGlzLnZhbHVlKCkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuRWxlbWVudCkge1xuICAgICAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLmFmdGVyVmlld0luaXQoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmh0bWxJZnJhbWVBcmVhLnNldCh0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChpbmRleElucHV0SHRtbCh0aGlzLmlmcmFtZVRleHRhcmVhQ3VzdG9tU3R5bGUoKSB8fCB7IGJvcmRlckNvbG9yOiB0aGlzLm5vQm9yZGVyKCkgPyAnJyA6IGAke3RoaXMuY29uZmlnUHJvamVjdFNlcnZpY2UuY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luKDIwKT8ubGlnaHR9YCB9KSkpO1xuICB9XG5cbiAgYWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm91dEhlaWdodEFyZWFDaGFuZ2UuZW1pdCh7IGlzQ2hhbmdlOiBmYWxzZSwgaGVpZ2h0OiB0aGlzLkVsZW1lbnQ/LnNjcm9sbEhlaWdodCB9KTtcbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh0aGlzLkZ1bmN0aW9uc0NvbnRyb2wpO1xuICAgIHRoaXMuaW5pdCgpO1xuXG4gICAgdGhpcy5pbml0RXZlbnQoJ2ZvY3VzJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKS5zdWJzY3JpYmUoKGU6IElFdmVudCkgPT4gdGhpcy5vdXRGb2N1c0FuZEJsdXJFdmVudC5lbWl0KHsgbmFtZTogJ2ZvY3VzJywgZXZlbnQ6IGUgfSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KCdibHVyJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKS5zdWJzY3JpYmUoKGU6IElFdmVudCkgPT4gdGhpcy5vdXRGb2N1c0FuZEJsdXJFdmVudC5lbWl0KHsgbmFtZTogJ2JsdXInLCBldmVudDogZSB9KSk7XG4gICAgY29uc3QgbW91c2VEb3duRXZlbnQgPSB0aGlzLmluaXRFdmVudCgnbW91c2Vkb3duJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKS5waXBlKHRha2UoMSkpO1xuICAgIGNvbnN0IGtleURvd25FdmVudCA9IHRoaXMuaW5pdEV2ZW50KCdrZXlkb3duJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKTtcbiAgICBjb25zdCBpbnB1dEV2ZW50ID0gdGhpcy5pbml0RXZlbnQoJ2lucHV0JywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKTtcbiAgICBjb25zdCBjdXRFdmVudCA9IHRoaXMuaW5pdEV2ZW50KCdjdXQnLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpO1xuICAgIGNvbnN0IHBhc3RlRXZlbnQgPSB0aGlzLmluaXRFdmVudCgncGFzdGUnLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpO1xuICAgIGNvbnN0IGtleXVwRXZlbnQgPSB0aGlzLmluaXRFdmVudCgna2V5dXAnLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpO1xuXG4gICAgdGhpcy5pbml0RXZlbnQoJ2NsaWNrJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpID8/IHRydWUpLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaW5pdEV2ZW50KCdkcmFnb3ZlcicsIHRoaXMuaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGV2ZW50OiBJRXZlbnQpID0+IHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuaW5pdEV2ZW50KCdkcm9wJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKS5zdWJzY3JpYmUodGhpcy5jaGVja0FuZEVtaXRGaWxlcy5iaW5kKHRoaXMpKTtcbiAgICBwYXN0ZUV2ZW50LnN1YnNjcmliZSh0aGlzLmNoZWNrQW5kRW1pdEZpbGVzLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy5jb21iaW5lT2JzZXJ2YWJsZShtb3VzZURvd25FdmVudCwgcGFzdGVFdmVudCk7XG4gICAgdGhpcy5jb21iaW5lT2JzZXJ2YWJsZShtb3VzZURvd25FdmVudCwgY3V0RXZlbnQpO1xuICAgIGtleURvd25FdmVudFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRhcCgoZTogSUV2ZW50KSA9PiB0aGlzLmNoZWNrVHlwZU51bWJlcihlLCAna2V5JykpLFxuICAgICAgICBtZXJnZU1hcCgoKSA9PiBpbnB1dEV2ZW50KSxcbiAgICAgICAgdGFwKChlOiBJRXZlbnQpID0+IHRoaXMuY2hlY2tUeXBlTnVtYmVyKGUsICdkYXRhJykpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChlOiBJRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ3N0cmluZycgJiYgdGhpcy5tYXhMZW5ndGgoKSAmJiAoZS5pbnB1dFR5cGUgPT09ICdpbnNlcnRDb21wb3NpdGlvblRleHQnIHx8IGUuaW5wdXRUeXBlID09PSAnaW5zZXJ0VGV4dCcpICYmIGUudGFyZ2V0LnZhbHVlPy5sZW5ndGggPiAodGhpcy5tYXhMZW5ndGgoKSB8fCAwKSkge1xuICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gZS50YXJnZXQudmFsdWUuc2xpY2UoMCwgdGhpcy5tYXhMZW5ndGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzRXZlbnRBbmRFbWl0VmFsdWUoZSk7XG4gICAgICB9KTtcblxuICAgIGtleXVwRXZlbnRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2ZW50OiBJRXZlbnQpID0+IGV2ZW50LmtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkVOVEVSKSxcbiAgICAgICAgZmlsdGVyKChldmVudDogSUV2ZW50KSA9PiAhdGhpcy50ZXh0QXJlYUVudGVyTm90TmV3TGluZSgpIHx8ICh0aGlzLnRleHRBcmVhRW50ZXJOb3ROZXdMaW5lKCkgJiYgIWV2ZW50LnNoaWZ0S2V5KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBJRXZlbnQpID0+IHRoaXMub3V0RW50ZXJFdmVudC5lbWl0KGV2ZW50KSk7XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnc3RyaW5nJyAmJiAodGhpcy50YWdJbnB1dCgpICE9PSAnaW5wdXQnIHx8ICh0aGlzLnRhZ0lucHV0KCkgPT09ICdpbnB1dCcgJiYgdGhpcy50YWJJbnNlcnRDb250ZW50VGFnSW5wdXQoKSkpKSB7XG4gICAgICBrZXlEb3duRXZlbnRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKChldmVudDogSUV2ZW50KSA9PiBldmVudC5rZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5UQUIpLFxuICAgICAgICAgIHRhcCgoZXZlbnQ6IElFdmVudCkgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSksXG4gICAgICAgICAgZmlsdGVyKChldmVudDogSUV2ZW50KSA9PiAhZXZlbnQudGFyZ2V0LnZhbHVlIHx8ICF0aGlzLm1heExlbmd0aCgpIHx8IGV2ZW50LnRhcmdldC52YWx1ZS5sZW5ndGggPCAodGhpcy5tYXhMZW5ndGgoKSB8fCAyNSkpLFxuICAgICAgICAgIHRhcCgoZXZlbnQ6IElFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkoKSB8fCB0aGlzLmRpc2FibGUoKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmluc2V0VmFsdWVUb1NlbGVjdGlvblN0YXJ0KCdcXHQnLCBldmVudCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGV4dEFyZWFFbnRlck5vdE5ld0xpbmUoKSkge1xuICAgICAga2V5RG93bkV2ZW50XG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigoZXZlbnQ6IElFdmVudCkgPT4gZXZlbnQua2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuRU5URVIgJiYgIWV2ZW50LnNoaWZ0S2V5KSxcbiAgICAgICAgICB0YXAoKGU6IElFdmVudCkgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvdW50RGlzcGxheUNvbXB1dGVkKCk7XG4gIH1cblxuICAvLyAjcmVnaW9uIEZVTkNUSU9OU1xuICBwdWJsaWMgZ2V0IEZ1bmN0aW9uc0NvbnRyb2woKTogSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQge1xuICAgIHJldHVybiB7XG4gICAgICBmb2N1czogdGhpcy5mb2N1cy5iaW5kKHRoaXMpLFxuICAgICAgYmx1cjogdGhpcy5ibHVyLmJpbmQodGhpcyksXG4gICAgICBpbnNlcnRDb250ZW50OiB0aGlzLmFkZERhdGFUb1NlbGVjdGlvbklucHV0LmJpbmQodGhpcyksXG4gICAgICByZXNldFZhbHVlOiB0aGlzLnJlc2V0VmFsdWUuYmluZCh0aGlzKSxcbiAgICAgIGdldEVsZW1lbnRWYWx1ZTogdGhpcy5nZXRFbGVtZW50VmFsdWUuYmluZCh0aGlzKSxcbiAgICAgIGNoZWNrQW5kRGlzYWJsZVVwRG93bkJ1dHRvbjogdGhpcy5jaGVja0FuZERpc2FibGVVcERvd25CdXR0b24uYmluZCh0aGlzKSxcbiAgICAgIHNlbGVjdEFsbENvbnRlbnQ6IHRoaXMuc2VsZWN0QWxsQ29udGVudC5iaW5kKHRoaXMpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1heExlbmd0aE1pbk1heFZhbHVlQnlEYXRhVHlwZSgpIHtcbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnaW50JyB8fCB0aGlzLmRhdGFUeXBlKCkgPT09ICdmbG9hdCcpIHtcbiAgICAgIHRoaXMubWF4TGVuZ3RoLnVwZGF0ZSgodmFsdWUpID0+IHtcbiAgICAgICAgcmV0dXJuICF2YWx1ZSB8fCB2YWx1ZSA+IDIxID8gMjEgOiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5taW5WYWx1ZU51bWJlci51cGRhdGUoKHZhbHVlKSA9PiB2YWx1ZSA/PyBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUik7XG4gICAgICB0aGlzLm1heFZhbHVlTnVtYmVyLnVwZGF0ZSgodmFsdWUpID0+IHZhbHVlID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgIHRoaXMubWF4TGVuZ3RoLnVwZGF0ZSgodmFsdWUpID0+ICghdmFsdWUgfHwgdmFsdWUgPiAyNSA/IDI1IDogdmFsdWUpKTtcbiAgICAgIHRoaXMuZml4ZWRGbG9hdC51cGRhdGUoKHZhbHVlKSA9PiB2YWx1ZSA/PyA0KTtcbiAgICAgIHRoaXMubWF4TGVuZ3RoTnVtYmVyQ291bnQudXBkYXRlKCh2YWx1ZSkgPT4gdmFsdWUgPz8gMTkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RWxlbWVudFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLkVsZW1lbnQ/LnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FuZEVtaXRGaWxlcyhldmVudDogSUV2ZW50KSB7XG4gICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzIHx8IGV2ZW50LmNsaXBib2FyZERhdGE/LmZpbGVzO1xuICAgIGNvbnN0IHRleHQgPSAoZXZlbnQuY2xpcGJvYXJkRGF0YSB8fCAod2luZG93IGFzIGFueSkuY2xpcGJvYXJkRGF0YSk/LmdldERhdGEoJ3RleHQnKTtcblxuICAgIHRoaXMuZGF0YVRleHRQYXN0ZS5zZXQodGV4dCk7XG4gICAgaWYgKCFmaWxlcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGV4dCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgZmlsZUxpc3QgPSBbXTtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBBcnJheS5mcm9tKGZpbGVzKSkge1xuICAgICAgaWYgKGlzVHlwZUZpbGUoZmlsZSkpIHtcbiAgICAgICAgdGhpcy5vdXRGaWxlRHJvcC5lbWl0KGZpbGUpO1xuICAgICAgICBmaWxlTGlzdC5wdXNoKGZpbGUpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm91dEZpbGVzRHJvcC5lbWl0KGZpbGVMaXN0KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zZXRWYWx1ZVRvU2VsZWN0aW9uU3RhcnQodGV4dDogc3RyaW5nLCBldmVudDogSUV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLkVsZW1lbnQuc2V0UmFuZ2VUZXh0KHRleHQsIHRoaXMuRWxlbWVudC5zZWxlY3Rpb25TdGFydCwgdGhpcy5FbGVtZW50LnNlbGVjdGlvblN0YXJ0LCAnZW5kJyk7XG4gICAgdGhpcy5wcm9jZXNzRXZlbnRBbmRFbWl0VmFsdWUoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dElmcmFtZVJlZigpPy5uYXRpdmVFbGVtZW50IHx8IHRoaXMuaW5wdXRSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlVmFsdWUoZGF0YTogSVNvcnQpIHtcbiAgICBkYXRhLnJlc2V0KCk7XG4gICAgaWYgKHRoaXMuZGlzYWJsZSgpIHx8IHRoaXMucmVhZG9ubHkoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcGVyYXRvciA9IGRhdGEubW9kZSA9PT0gJ2FzYycgPyAxIDogLTE7XG4gICAgbGV0IHZhbHVlID0gK3RoaXMudmFsdWUoKSB8fCAwO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IFV0aWxzQ2FjaGUuZ2V0TGFuZygpID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlZJID8gJy4nIDogJywnO1xuICAgIGNvbnN0IHNwbGl0VmFsdWUgPSAodGhpcy52YWx1ZSgpIHx8IHRoaXMubWluVmFsdWVOdW1iZXIoKSB8fCAwKS50b1N0cmluZygpLnNwbGl0KHNlcGFyYXRvcik7XG4gICAgY29uc3QgZGF0YUJlaGluZFNlcGFyYXRvciA9IHNwbGl0VmFsdWU/LlsxXTtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnKSB7XG4gICAgICB2YWx1ZSA9ICsoc3BsaXRWYWx1ZT8uWzBdIHx8IDApO1xuICAgIH1cbiAgICB2YWx1ZSA9IHZhbHVlICsgKHRoaXMudmFsdWVVcERvd25OdW1iZXIoKSA/PyAxKSAqIG9wZXJhdG9yO1xuICAgIGlmICghdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgdmFsdWUgPCAwKSB7XG4gICAgICB2YWx1ZSA9IDA7XG4gICAgfVxuICAgIGNvbnN0IHNlcGFyYXRvclN0ciA9IGRhdGFCZWhpbmRTZXBhcmF0b3IgPyBzZXBhcmF0b3IgOiAnJztcbiAgICBjb25zdCBkYXRhRW1pdCA9IHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcgPyBgJHt2YWx1ZX0ke3NlcGFyYXRvclN0cn0ke2RhdGFCZWhpbmRTZXBhcmF0b3J9YCA6IHZhbHVlO1xuICAgIHRoaXMudmFsdWUuc2V0KGRhdGFFbWl0KTtcbiAgICB0aGlzLm91dENoYW5nZS5lbWl0KGRhdGFFbWl0KTtcbiAgICB0aGlzLm91dENoYW5nZVZhbHVlQnlCdXR0b25VcERvd24uZW1pdCgpO1xuICAgIHRoaXMuY2hlY2tBbmREaXNhYmxlVXBEb3duQnV0dG9uKHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRXZlbnRJY29uTGVmdChlOiBFdmVudCwgZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICgodGhpcy5kaXNhYmxlKCkgfHwgdGhpcy5yZWFkb25seSgpKSAmJiAhdGhpcy5hY2NlcHRPbmx5Q2xpY2tJY29uKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRJY29uTGVmdC5lbWl0KGV2ZW50TmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckV2ZW50SWNvblJpZ2h0KGU6IEV2ZW50LCBldmVudE5hbWU6IHN0cmluZykge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCh0aGlzLmRpc2FibGUoKSB8fCB0aGlzLnJlYWRvbmx5KCkpICYmICF0aGlzLmFjY2VwdE9ubHlDbGlja0ljb24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm91dEljb25SaWdodC5lbWl0KGV2ZW50TmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrQW5kRGlzYWJsZVVwRG93bkJ1dHRvbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSAhPT0gJ2ludCcgJiYgdGhpcy5kYXRhVHlwZSgpICE9PSAnZmxvYXQnICYmIHRoaXMuZGF0YVR5cGUoKSAhPT0gJ2JpZ2ludCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kaXNhYmxlQXNjLnNldChmYWxzZSk7XG4gICAgdGhpcy5kaXNhYmxlRGVzYy5zZXQoZmFsc2UpO1xuICAgIHRoaXMubWluVmFsdWVOdW1iZXIudXBkYXRlKCh2YWx1ZSkgPT4gdmFsdWUgPz8gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpO1xuICAgIHRoaXMubWF4VmFsdWVOdW1iZXIudXBkYXRlKCh2YWx1ZSkgPT4gdmFsdWUgPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuICAgIHZhbHVlID0gdmFsdWUgPz8gMDtcblxuICAgIGlmICghaXNOaWwodGhpcy5tYXhWYWx1ZU51bWJlcigpKSAmJiB2YWx1ZSA+PSAodGhpcy5tYXhWYWx1ZU51bWJlcigpID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSkge1xuICAgICAgdGhpcy5kaXNhYmxlQXNjLnNldCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzTmlsKHRoaXMubWluVmFsdWVOdW1iZXIoKSkgJiYgdmFsdWUgPD0gKHRoaXMubWluVmFsdWVOdW1iZXIoKSB8fCAwKSkge1xuICAgICAgdGhpcy5kaXNhYmxlRGVzYy5zZXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRFdmVudChldmVudE5hbWU6IHN0cmluZywgaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQ/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxJRXZlbnQ+IHtcbiAgICByZXR1cm4gZnJvbUV2ZW50PElFdmVudD4odGhpcy5FbGVtZW50LCBldmVudE5hbWUpLnBpcGUoXG4gICAgICB0YXAoKGU6IElFdmVudCkgPT4ge1xuICAgICAgICBpZiAoIWlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KSB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm91dElucHV0RXZlbnQuZW1pdChlKTtcbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICYmIHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgIGNvbnN0IHNlcGFyYXRvciA9IFV0aWxzQ2FjaGUuZ2V0TGFuZygpID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlZJID8gJy4nIDogJywnO1xuICAgICAgbGV0IFtpbnQsIGRlY2ltYWxdID0gdmFsdWUuc3BsaXQoc2VwYXJhdG9yKTtcbiAgICAgIGNvbnN0IGRlY2ltYWxTcGxpdCA9IGRlY2ltYWwgPyBkZWNpbWFsLnNwbGl0KCcnKSA6IFtdO1xuICAgICAgY29uc3QgZGVjaW1hbEV2ZXJ5WmVybyA9IGRlY2ltYWxTcGxpdC5ldmVyeSgoaXRlbSkgPT4gaXRlbSA9PT0gJzAnKTtcblxuICAgICAgaWYgKGludCA9PT0gJy0wJyAmJiAoIWRlY2ltYWwgfHwgZGVjaW1hbEV2ZXJ5WmVybykpIHtcbiAgICAgICAgaW50ID0gJzAnO1xuICAgICAgfVxuICAgICAgaWYgKCFkZWNpbWFsIHx8IGRlY2ltYWxFdmVyeVplcm8pIHtcbiAgICAgICAgZGVjaW1hbCA9ICcwJztcbiAgICAgIH1cbiAgICAgIGlmIChkZWNpbWFsU3BsaXQuc29tZSgoaXRlbSkgPT4gaXRlbSAhPT0gJzAnKSkge1xuICAgICAgICBkZWNpbWFsU3BsaXQucmV2ZXJzZSgpO1xuICAgICAgICBjb25zdCBkZWNpbWFsUmV2ZXJzZSA9IGRlY2ltYWxTcGxpdC5qb2luKCcnKTtcblxuICAgICAgICBkZWNpbWFsID0gZGVjaW1hbFJldmVyc2UucmVwbGFjZSgvKF4wKykvLCAnJykuc3BsaXQoJycpLnJldmVyc2UoKS5qb2luKCcnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke2ludH0ke3NlcGFyYXRvcn0ke2RlY2ltYWx9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGluaXQoKSB7XG4gICAgaWYgKCF0aGlzLm1heExlbmd0aCgpKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1heExlbmd0aE1pbk1heFZhbHVlQnlEYXRhVHlwZSgpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZWxlbWVudFZhbHVlID0gdGhpcy5jb252ZXJ0VmFsdWUoYCR7dGhpcy52YWx1ZSgpID8/ICcnfWApO1xuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVsZW1lbnRWYWx1ZSA9IGVsZW1lbnRWYWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoYFteMC05Liwke3RoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpID8gJy0nIDogJyd9XWAsICdnJyksICcnKTtcbiAgICAgIGlmIChVdGlsc0NhY2hlLmdldExhbmcoKSA9PT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5FTikge1xuICAgICAgICBlbGVtZW50VmFsdWUgPSBlbGVtZW50VmFsdWUucmVwbGFjZSgvLC8sICcnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5FbGVtZW50LnZhbHVlID0gZWxlbWVudFZhbHVlO1xuXG4gICAgY29uc3QgZXZlbnRGYWtlOiBJRXZlbnRDdXN0b20gPSB7XG4gICAgICBwcmV2ZW50RGVmYXVsdDogKCkgPT4ge1xuICAgICAgICByZXR1cm47XG4gICAgICB9LFxuICAgICAgdGFyZ2V0OiB0aGlzLkVsZW1lbnQsXG4gICAgICBkYXRhOiBlbGVtZW50VmFsdWUsXG4gICAgICBmYWtlRXZlbnQ6IHRydWUsXG4gICAgfTtcblxuICAgIHRoaXMuY2hlY2tUeXBlTnVtYmVyKGV2ZW50RmFrZSwgJ2RhdGEnKTtcbiAgICB0aGlzLnByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShldmVudEZha2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRXZlbnRBbmRFbWl0VmFsdWUoZTogSUV2ZW50IHwgSUV2ZW50Q3VzdG9tKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWU6IGFueSA9IHRoaXMucGFyc2VWYWx1ZUJ5RGF0YVR5cGUoZS50YXJnZXQudmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSAhPT0gJ3N0cmluZycgJiYgIXRoaXMuaWdub3JlQmxvY2tJbnB1dE1heFZhbHVlKCkgJiYgIWlzTmlsKHRoaXMubWF4VmFsdWVOdW1iZXIoKSkgJiYgdmFsdWUgPiAodGhpcy5tYXhWYWx1ZU51bWJlcigpIHx8IDApICYmIHRoaXMudmFsdWUoKSA8IHZhbHVlKSB7XG4gICAgICBjb25zdCB2YWx1ZURpc3BsYXkgPSB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UoYCR7dGhpcy52YWx1ZSgpfWAucmVwbGFjZSgvXFwuL2csICcsJyksIHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpLCB0aGlzLmZpeGVkRmxvYXQoKSA/PyAxNCk7XG5cbiAgICAgIGUudGFyZ2V0LnZhbHVlID0gYCR7dGhpcy5nZXRDaGVja1plcm8oK3ZhbHVlRGlzcGxheSwgZS50YXJnZXQudmFsdWUpfSR7dmFsdWVEaXNwbGF5fWA7XG5cbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSAhPT0gJ3N0cmluZycgJiYgaXNOaWwodmFsdWUpKSB7XG4gICAgICBlLnRhcmdldC52YWx1ZSA9IDA7XG5cbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShlKTtcbiAgICB9XG5cbiAgICBpZiAoZS5mYWtlRXZlbnQgJiYgKGAke3RoaXMudmFsdWUoKSA/PyAnJ31gID09PSBgJHt2YWx1ZX1gIHx8ICh0aGlzLmVtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXIoKSAmJiBlLnRhcmdldC52YWx1ZS50cmltKCkgPT09ICcnKSkpIHtcbiAgICAgIHRoaXMuY2hlY2tBbmREaXNhYmxlVXBEb3duQnV0dG9uKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcgPyB2YWx1ZSA6ICt2YWx1ZSk7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbGN1bGF0b3JIZWlnaHRUZXh0QXJlYShlKTtcbiAgICAgIH0sIDI1MCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52YWx1ZS5zZXQodmFsdWUpO1xuICAgIGlmICh0aGlzLmVtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXIoKSAmJiBlLnRhcmdldC52YWx1ZS50cmltKCkgPT09ICcnKSB7XG4gICAgICBjb25zdCBkYXRhRW1pdCA9IHRoaXMuZGF0YVR5cGUoKSA9PT0gJ3N0cmluZycgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMudmFsdWUuc2V0KGRhdGFFbWl0IGFzIGFueSk7XG4gICAgfVxuICAgIHRoaXMub3V0Q2hhbmdlLmVtaXQodGhpcy52YWx1ZSgpKTtcbiAgICB0aGlzLmNoZWNrQW5kRGlzYWJsZVVwRG93bkJ1dHRvbih0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnID8gdmFsdWUgOiArdmFsdWUpO1xuICAgIHRoaXMuY2FsY3VsYXRvckhlaWdodFRleHRBcmVhKGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja01heExlbmd0aE51bWJlckFuZFNldFZhbHVlKHZhbHVlRGlzcGxheTogc3RyaW5nLCBlOiBJRXZlbnQgfCBJRXZlbnRDdXN0b20pOiBib29sZWFuIHtcbiAgICBpZiAoaXNOaWwodGhpcy52YWx1ZSgpKSB8fCAoK3RoaXMudmFsdWUoKSA+IDAgJiYgdGhpcy5wYXJzZVZhbHVlQnlEYXRhVHlwZSh2YWx1ZURpc3BsYXkpIDwgdGhpcy52YWx1ZSgpKSB8fCAoK3RoaXMudmFsdWUoKSA8IDAgJiYgdGhpcy5wYXJzZVZhbHVlQnlEYXRhVHlwZSh2YWx1ZURpc3BsYXkpID4gdGhpcy52YWx1ZSgpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZUNvbXBhcmUgPSBmb3JtYXROdW1iZXIodmFsdWVEaXNwbGF5KS50b1N0cmluZygpO1xuICAgIGNvbnN0IG51bWJlcnMgPSB2YWx1ZUNvbXBhcmUuc3BsaXQoJy4nKTtcbiAgICBsZXQgbGVuZ3RoVmFsdWVDb21wYXJlID0gMDtcbiAgICBsZXQgbWF4TGVuZ3RoID0gdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgdHlwZW9mICt0aGlzLnZhbHVlKCkgPT09ICdudW1iZXInICYmICt0aGlzLnZhbHVlKCkgPCAwID8gKHRoaXMubWF4TGVuZ3RoKCkgfHwgMjEpICsgMSA6IHRoaXMubWF4TGVuZ3RoKCkgfHwgMjE7XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnZmxvYXQnKSB7XG4gICAgICBtYXhMZW5ndGgtLTtcbiAgICB9XG4gICAgaWYgKG51bWJlcnM/LlswXSkge1xuICAgICAgbGVuZ3RoVmFsdWVDb21wYXJlID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKGAke251bWJlcnNbMF19YC5yZXBsYWNlKC9cXC4vZywgJywnKSwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksIHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KS5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChudW1iZXJzPy5bMV0pIHtcbiAgICAgIGxlbmd0aFZhbHVlQ29tcGFyZSArPSAxICsgbnVtYmVyc1sxXS5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChtYXhMZW5ndGggJiYgbGVuZ3RoVmFsdWVDb21wYXJlID49IG1heExlbmd0aCkge1xuICAgICAgY29uc3QgdmFsdWVEaXNwbGF5ID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKChsZW5ndGhWYWx1ZUNvbXBhcmUgPT09IG1heExlbmd0aCA/IHZhbHVlQ29tcGFyZSA6IGAke3RoaXMudmFsdWUoKX1gKS5yZXBsYWNlKC9cXC4vZywgJywnKSwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksIHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KTtcblxuICAgICAgZS50YXJnZXQudmFsdWUgPSBgJHt0aGlzLmdldENoZWNrWmVybygrdmFsdWVEaXNwbGF5LCBlLnRhcmdldC52YWx1ZSl9JHt2YWx1ZURpc3BsYXl9YDtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1R5cGVOdW1iZXIoZTogSUV2ZW50IHwgSUV2ZW50Q3VzdG9tLCBmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGN1cnJlbnRMYW5nID0gVXRpbHNDYWNoZS5nZXRMYW5nKCk7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gY3VycmVudExhbmcgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVkkgPyAnLicgOiAnLCc7XG4gICAgY29uc3Qgc2VwYXJhdG9yUmV2ZXJ0ID0gY3VycmVudExhbmcgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVkkgPyAnLCcgOiAnLic7XG4gICAgbGV0IHZhbHVlVGFyZ2V0OiBJU3RyaW5nID0gZS50YXJnZXQudmFsdWU7XG4gICAgY29uc3Qgc2VsZWN0aW9uU3RhcnQgPSBlLnRhcmdldC5zZWxlY3Rpb25TdGFydCAtIDE7XG4gICAgY29uc3QgeyBkYXRhLCBrZXlDb2RlIH0gPSBlO1xuXG4gICAgdGhpcy5jaGFyRmlyc3RJc1plcm8uc2V0KGZhbHNlKTtcbiAgICBpZiAodmFsdWVUYXJnZXQuc3RhcnRzV2l0aCgnMCcpKSB7XG4gICAgICB0aGlzLmNoYXJGaXJzdElzWmVyby5zZXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh0aGlzLmF1dG9SZW1vdmVFbW9qaSgpKSB7XG4gICAgICAgIGUudGFyZ2V0LnZhbHVlID0gcmVtb3ZlRW1vamkodmFsdWVUYXJnZXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgvXFxkL2cudGVzdChkYXRhKSAmJiB2YWx1ZVRhcmdldC5jaGFyQXQoc2VsZWN0aW9uU3RhcnQgKyAxKSA9PT0gJy0nKSB7XG4gICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2VBdCgwLCAnJykgYXMgSVN0cmluZztcbiAgICB9XG4gICAgbGV0IHN0clJlZ2V4ID0gYFteMC05Liwke3RoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpID8gJy0nIDogJyd9XWA7XG5cbiAgICBpZiAobmV3IFJlZ0V4cChzdHJSZWdleCwgJ2dpJykudGVzdCgoZSBhcyBhbnkpW2ZpZWxkTmFtZV0pICYmIGtleUNvZGUgIT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkJBQ0tTUEFDRSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS50YXJnZXQudmFsdWUgPSB2YWx1ZVRhcmdldCA9IGUudGFyZ2V0LnZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cChzdHJSZWdleCwgJ2dpJyksICcnKSBhcyBJU3RyaW5nO1xuICAgIH1cbiAgICBpZiAoIWUuZmFrZUV2ZW50KSB7XG4gICAgICBzd2l0Y2ggKGRhdGEpIHtcbiAgICAgICAgY2FzZSBzZXBhcmF0b3I6XG4gICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlKG5ldyBSZWdFeHAoYFske3NlcGFyYXRvcn1dYCwgJ2dpJyksICcnKSBhcyBJU3RyaW5nO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2Ugc2VwYXJhdG9yUmV2ZXJ0OiB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRMYW5nID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlZJICYmIHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2ludCcpIHtcbiAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gdmFsdWVUYXJnZXQucmVwbGFjZShuZXcgUmVnRXhwKGBbJHtzZXBhcmF0b3JSZXZlcnR9XWAsICdnaScpLCAnJykgYXMgSVN0cmluZztcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsdWVUYXJnZXQgPT09IHNlcGFyYXRvclJldmVydCkge1xuICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSAnJztcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsdWVUYXJnZXQgJiYgdmFsdWVUYXJnZXQubGVuZ3RoID09PSAyICYmIHZhbHVlVGFyZ2V0LnN0YXJ0c1dpdGgoJy0nKSAmJiBkYXRhICYmICEvXFxkL2cudGVzdChkYXRhKSkge1xuICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSAnLSc7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgb2NjdXJyZW5jZXNCeUNoYXJhY3RlciA9IHZhbHVlVGFyZ2V0Lm9jY3VycmVuY2VzQnlDaGFyYWN0ZXIoc2VwYXJhdG9yUmV2ZXJ0KTtcblxuICAgICAgICAgIGlmIChvY2N1cnJlbmNlc0J5Q2hhcmFjdGVyID4gMSkge1xuICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlQXQoZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQgLSAxLCAnJykgYXMgSVN0cmluZztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgbWF4TGVuZ3RoID0gdGhpcy5kYXRhVHlwZSgpID09PSAnZmxvYXQnID8gKHRoaXMubWF4TGVuZ3RoKCkgfHwgMjEpIC0gMSA6IHRoaXMubWF4TGVuZ3RoKCkgfHwgMjE7XG5cbiAgICAgICAgICBpZiAodmFsdWVUYXJnZXQuaW5kZXhPZignLScpID49IDApIHtcbiAgICAgICAgICAgIG1heExlbmd0aCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2NjdXJyZW5jZXNCeUNoYXJhY3RlciA9PT0gMSAmJiB2YWx1ZVRhcmdldC5sZW5ndGggPT09IG1heExlbmd0aCAmJiB2YWx1ZVRhcmdldC5pbmRleE9mKHNlcGFyYXRvclJldmVydCkgPT09IHZhbHVlVGFyZ2V0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZUF0KGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0IC0gMSwgJycpIGFzIElTdHJpbmc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMub25seUFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiB2YWx1ZVRhcmdldCA9PT0gYDAke3NlcGFyYXRvclJldmVydH1gKSB7XG4gICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9ICcwJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB2YWx1ZUJlZm9yZUZvcm1hdCA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgICAgIGNvbnN0IHZhbHVlQWZ0ZXJGb3JtYXQgPSB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UoZS50YXJnZXQudmFsdWUsIHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpLCB0aGlzLmZpeGVkRmxvYXQoKSA/PyAxNCk7XG4gICAgICAgICAgaWYgKHZhbHVlQmVmb3JlRm9ybWF0ID09PSB2YWx1ZUFmdGVyRm9ybWF0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gdmFsdWVBZnRlckZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFsdWVUYXJnZXQgPSBmb3JtYXROdW1iZXIodmFsdWVUYXJnZXQpIGFzIElTdHJpbmc7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ZXNPZkRhc2ggPSB2YWx1ZVRhcmdldC5pbmRleGVzT2ZDaGFyYWN0ZXI/LignLScpIHx8IFtdO1xuXG4gICAgaWYgKGluZGV4ZXNPZkRhc2gubGVuZ3RoKSB7XG4gICAgICBjb25zdCBbZmlyc3RJbmRleCwgc2Vjb25kSW5kZXhdID0gaW5kZXhlc09mRGFzaDtcbiAgICAgIGNvbnN0IGluZGV4UmVwbGFjZSA9IGZpcnN0SW5kZXggfHwgc2Vjb25kSW5kZXg7IC8vIGZpcnN0SW5kZXg9MCB0aMOsIGtvIHjDs2FcblxuICAgICAgaWYgKGluZGV4UmVwbGFjZSkge1xuICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2VBbGwoaW5kZXhSZXBsYWNlLCAnLScsICcnKSBhcyBJU3RyaW5nO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgdmFsdWVUYXJnZXQgPT09ICctJykge1xuICAgICAgZS50YXJnZXQudmFsdWUgPSB2YWx1ZVRhcmdldDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRoaXMuZGF0YVR5cGUoKSkge1xuICAgICAgY2FzZSAnaW50Jzoge1xuICAgICAgICBzdHJSZWdleCA9IGBbXjAtOSR7dGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgPyAnLScgOiAnJ31dYDtcbiAgICAgICAgaWYgKCFlLmZha2VFdmVudCkge1xuICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZShuZXcgUmVnRXhwKHN0clJlZ2V4LCAnZ2knKSwgJycpIGFzIElTdHJpbmc7XG4gICAgICAgICAgY29uc3QgbWF4VG90YWxOdW1iZXIgPSB2YWx1ZVRhcmdldC5pbmNsdWRlcygnLScpID8gMTcgOiAxNjtcblxuICAgICAgICAgIGlmICh2YWx1ZVRhcmdldC5sZW5ndGggPiBtYXhUb3RhbE51bWJlcikge1xuICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5zbGljZSgwLCBtYXhUb3RhbE51bWJlcikgYXMgSVN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKE1hdGguYWJzKHBhcnNlSW50KHZhbHVlVGFyZ2V0KSkgPiAodGhpcy5tYXhWYWx1ZU51bWJlcigpID8/IDkwMDcxOTkyNTQ3NDA5OTEpKSB7XG4gICAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnNsaWNlKDAsIG1heFRvdGFsTnVtYmVyIC0gMSkgYXMgSVN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMub25seUFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiAhdmFsdWVUYXJnZXQuc3RhcnRzV2l0aCgnLScpICYmICF2YWx1ZVRhcmdldC5zdGFydHNXaXRoKCcwJykpIHtcbiAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gJycgYXMgSVN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbHVlVGFyZ2V0ICYmIC8oXi0pPyheMCspLy50ZXN0KHZhbHVlVGFyZ2V0KSkge1xuICAgICAgICAgICAgY29uc3QgaWQgPSB1dWlkKCk7XG5cbiAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZSgvKF4tKT8oXjArKS8sIGAkMSR7aWR9YCkucmVwbGFjZShpZCwgJzAnKSBhcyBJU3RyaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsdWVUYXJnZXQgPT09ICctMCcpIHtcbiAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gJzAnIGFzIElTdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZVRhcmdldCAmJiAvKF4wKShbMS05XSkoXFxkKyk/Ly50ZXN0KHZhbHVlVGFyZ2V0KSkge1xuICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlKC8oXjApKFsxLTldKShcXGQrKT8vLCAnJDIkMycpIGFzIElTdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHZhbHVlRGlzcGxheSA9IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSh2YWx1ZVRhcmdldCwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgfHwgZmFsc2UsIDApO1xuXG4gICAgICAgICAgaWYgKHRoaXMuY2hlY2tNYXhMZW5ndGhOdW1iZXJBbmRTZXRWYWx1ZSh2YWx1ZURpc3BsYXksIGUpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgZS50YXJnZXQudmFsdWUgPSBgJHt0aGlzLmdldENoZWNrWmVybygrdmFsdWVEaXNwbGF5LCBlLnRhcmdldC52YWx1ZSl9JHt2YWx1ZURpc3BsYXl9YDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleE9mRG90ID0gdmFsdWVUYXJnZXQuaW5kZXhPZignLicpO1xuICAgICAgICBjb25zdCBpbmRleE9mQ29tbWEgPSB2YWx1ZVRhcmdldC5pbmRleE9mKCcsJyk7XG4gICAgICAgIGxldCBpbmRleENob29zZSA9IGluZGV4T2ZEb3Q7XG5cbiAgICAgICAgaWYgKGluZGV4T2ZEb3QgPCAwIHx8IGluZGV4T2ZEb3QgPiBpbmRleE9mQ29tbWEpIHtcbiAgICAgICAgICBpbmRleENob29zZSA9IGluZGV4T2ZDb21tYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXhDaG9vc2UgPj0gMCkge1xuICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQuc3Vic3RyaW5nKDAsIGluZGV4Q2hvb3NlKSBhcyBJU3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlRGlzcGxheSA9IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSh2YWx1ZVRhcmdldCwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgfHwgZmFsc2UsIDApO1xuXG4gICAgICAgIGlmICh0aGlzLmNoZWNrTWF4TGVuZ3RoTnVtYmVyQW5kU2V0VmFsdWUodmFsdWVEaXNwbGF5LCBlKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGUudGFyZ2V0LnZhbHVlID0gYCR7dGhpcy5nZXRDaGVja1plcm8oK3ZhbHVlRGlzcGxheSwgZS50YXJnZXQudmFsdWUpfSR7dmFsdWVEaXNwbGF5fWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdmbG9hdCc6XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSAnYmlnaW50JzpcbiAgICAgICAgdGhpcy5nZXRWYWx1ZUZvcm1hdChlLCB2YWx1ZVRhcmdldCwgc2VwYXJhdG9yLCBzZXBhcmF0b3JSZXZlcnQsIGN1cnJlbnRMYW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICh2YWx1ZVRhcmdldCA9PT0gJ05hTicpIHtcbiAgICAgIGUudGFyZ2V0LnZhbHVlID0gJycgYXMgSVN0cmluZztcbiAgICB9XG4gICAgaWYgKGUuZmFrZUV2ZW50IHx8IGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldENhcmV0UG9zaXRpb24oZSwgc2VsZWN0aW9uU3RhcnQgKyAxKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVGb3JtYXQoZTogSUV2ZW50IHwgSUV2ZW50Q3VzdG9tLCB2YWx1ZVRhcmdldDogSVN0cmluZywgc2VwYXJhdG9yOiAnLicgfCAnLCcsIHNlcGFyYXRvclJldmVydDogJy4nIHwgJywnLCBjdXJyZW50TGFuZzogc3RyaW5nKSB7XG4gICAgbGV0IHN0clJlZ2V4ID0gYFteMC05JHtzZXBhcmF0b3J9JHtjdXJyZW50TGFuZyA9PT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5FTiA/ICcuJyA6ICcnfSR7dGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgPyAnLScgOiAnJ31dYDtcblxuICAgIGlmICghZS5mYWtlRXZlbnQpIHtcbiAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZShuZXcgUmVnRXhwKHN0clJlZ2V4LCAnZ2knKSwgJycpIGFzIElTdHJpbmc7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ZXNPZlNlcGFyYXRvciA9IHZhbHVlVGFyZ2V0LmluZGV4ZXNPZkNoYXJhY3RlcihzZXBhcmF0b3IpO1xuICAgIGNvbnN0IFtmaXJzdEluZGV4LCBzZWNvbmRJbmRleF0gPSBpbmRleGVzT2ZTZXBhcmF0b3I7XG5cbiAgICBpZiAoc2Vjb25kSW5kZXgpIHtcbiAgICAgIHZhbHVlVGFyZ2V0ID0gZS50YXJnZXQudmFsdWUucmVwbGFjZUFsbChzZWNvbmRJbmRleCwgc2VwYXJhdG9yLCAnJyk7XG4gICAgfVxuICAgIGlmIChmaXJzdEluZGV4ICYmIHZhbHVlVGFyZ2V0LnN1YnN0cmluZyhmaXJzdEluZGV4ICsgMSkubGVuZ3RoID49ICh0aGlzLmZpeGVkRmxvYXQoKSA/PyAxNCkpIHtcbiAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQuc3Vic3RyaW5nKDAsIGZpcnN0SW5kZXggKyAodGhpcy5maXhlZEZsb2F0KCkgPz8gMTQpICsgMSkgYXMgSVN0cmluZztcbiAgICB9XG4gICAgc3RyUmVnZXggPSBgWyR7c2VwYXJhdG9yfV1gO1xuICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZShuZXcgUmVnRXhwKHN0clJlZ2V4LCAnZycpLCBzZXBhcmF0b3JSZXZlcnQpIGFzIElTdHJpbmc7XG4gICAgbGV0IHZhbHVlRm9ybWF0ID0gJyc7XG4gICAgbGV0IFtmb250U2VwYXJhdG9yTnVtYmVyLCBiZWhpbmRTZXBhcmF0b3JOdW1iZXJdID0gdmFsdWVUYXJnZXQuc3BsaXQoc2VwYXJhdG9yUmV2ZXJ0KTtcbiAgICBsZXQgbWF4Rm9udFRvdGFsTnVtYmVyID0gZm9udFNlcGFyYXRvck51bWJlcj8uaW5jbHVkZXMoJy0nKSA/IDE2IDogMTU7XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50Jykge1xuICAgICAgbWF4Rm9udFRvdGFsTnVtYmVyID0gKHRoaXMubWF4TGVuZ3RoTnVtYmVyQ291bnQoKSA/PyAxOSkgLSAodGhpcy5maXhlZEZsb2F0KCkgPz8gNCkgKyAoZm9udFNlcGFyYXRvck51bWJlci5pbmNsdWRlcygnLScpID8gMSA6IDApO1xuICAgIH1cbiAgICBjb25zdCBmb250T3Zlck1heFRvdGFsTnVtYmVyID0gZm9udFNlcGFyYXRvck51bWJlciAmJiBmb250U2VwYXJhdG9yTnVtYmVyLmxlbmd0aCA+PSBtYXhGb250VG90YWxOdW1iZXI7XG5cbiAgICBpZiAoZm9udE92ZXJNYXhUb3RhbE51bWJlcikge1xuICAgICAgZm9udFNlcGFyYXRvck51bWJlciA9IGZvbnRTZXBhcmF0b3JOdW1iZXIuc2xpY2UoMCwgbWF4Rm9udFRvdGFsTnVtYmVyKSBhcyBJU3RyaW5nO1xuICAgICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgICBiZWhpbmRTZXBhcmF0b3JOdW1iZXIgPSAnJztcbiAgICAgIH1cbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLmRhdGFUeXBlKCkpIHtcbiAgICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICAgICAgaWYgKCFmb250T3Zlck1heFRvdGFsTnVtYmVyICYmIGJlaGluZFNlcGFyYXRvck51bWJlcj8ubGVuZ3RoKSB7XG4gICAgICAgICAgYmVoaW5kU2VwYXJhdG9yTnVtYmVyID0gYmVoaW5kU2VwYXJhdG9yTnVtYmVyLnNsaWNlKDAsIG1heEZvbnRUb3RhbE51bWJlciAtIGZvbnRTZXBhcmF0b3JOdW1iZXIubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBiZWhpbmRTZXBhcmF0b3JOdW1iZXIgPSBgJHtiZWhpbmRTZXBhcmF0b3JOdW1iZXIgPz8gJyd9YDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICAgIGlmIChiZWhpbmRTZXBhcmF0b3JOdW1iZXI/Lmxlbmd0aCAmJiBiZWhpbmRTZXBhcmF0b3JOdW1iZXIubGVuZ3RoID4gKHRoaXMuZml4ZWRGbG9hdCgpID8/IDQpKSB7XG4gICAgICAgICAgYmVoaW5kU2VwYXJhdG9yTnVtYmVyID0gYmVoaW5kU2VwYXJhdG9yTnVtYmVyLnNsaWNlKDAsIHRoaXMuZml4ZWRGbG9hdCgpID8/IDQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBpbmRleE9mU2VwYXJhdG9yUmV2ZXJ0ID0gdmFsdWVUYXJnZXQuaW5kZXhPZihzZXBhcmF0b3JSZXZlcnQpO1xuXG4gICAgaWYgKHRoaXMub25seUFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiAhZm9udFNlcGFyYXRvck51bWJlci5zdGFydHNXaXRoKCctJykgJiYgIWZvbnRTZXBhcmF0b3JOdW1iZXIuc3RhcnRzV2l0aCgnMCcpKSB7XG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gJyc7XG4gICAgfVxuICAgIGlmICh0aGlzLm9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgaW5kZXhPZlNlcGFyYXRvclJldmVydCA+PSAwICYmICFmb250U2VwYXJhdG9yTnVtYmVyLnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgICAgZm9udFNlcGFyYXRvck51bWJlciA9ICcwJztcbiAgICAgIGJlaGluZFNlcGFyYXRvck51bWJlciA9IHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcgPyAnMCcgOiAnJztcbiAgICB9XG4gICAgaWYgKGZvbnRTZXBhcmF0b3JOdW1iZXIgJiYgLyheLSkoMCspLy50ZXN0KGZvbnRTZXBhcmF0b3JOdW1iZXIpKSB7XG4gICAgICBjb25zdCBpZCA9IHV1aWQoKTtcblxuICAgICAgZm9udFNlcGFyYXRvck51bWJlciA9IGZvbnRTZXBhcmF0b3JOdW1iZXIucmVwbGFjZSgvKF4tKSgwKykvLCBgJDEke2lkfWApLnJlcGxhY2UoaWQsICcwJyk7XG4gICAgfVxuICAgIGlmIChmb250U2VwYXJhdG9yTnVtYmVyICYmIC8oXjArKS8udGVzdChmb250U2VwYXJhdG9yTnVtYmVyKSkge1xuICAgICAgZm9udFNlcGFyYXRvck51bWJlciA9IGZvbnRTZXBhcmF0b3JOdW1iZXIucmVwbGFjZSgvKF4wKykvLCAnMCcpO1xuICAgIH1cbiAgICBpZiAoLyheLSkoMCspKFsxLTldKShbXFxkLl0rKT8vLnRlc3QoZm9udFNlcGFyYXRvck51bWJlcikpIHtcbiAgICAgIGZvbnRTZXBhcmF0b3JOdW1iZXIgPSBmb250U2VwYXJhdG9yTnVtYmVyLnJlcGxhY2UoLyheLSkoMCspKFsxLTldKShbXFxkLl0rKT8vLCAnJDEkMyQ0Jyk7XG4gICAgfVxuICAgIGlmICgvKF4wKykoWzEtOV0pKFtcXGQuXSspPy8udGVzdChmb250U2VwYXJhdG9yTnVtYmVyKSkge1xuICAgICAgZm9udFNlcGFyYXRvck51bWJlciA9IGZvbnRTZXBhcmF0b3JOdW1iZXIucmVwbGFjZSgvKF4wKykoWzEtOV0pKFtcXGQuXSspPy8sICckMiQzJyk7XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5kYXRhVHlwZSgpKSB7XG4gICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgIGlmICgvKF4wezZ9KS8udGVzdChiZWhpbmRTZXBhcmF0b3JOdW1iZXIpKSB7XG4gICAgICAgICAgYmVoaW5kU2VwYXJhdG9yTnVtYmVyID0gYmVoaW5kU2VwYXJhdG9yTnVtYmVyLnJlcGxhY2UoLyheMHs2fSkvLCAnMDAwMDAnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnYmlnaW50JzpcbiAgICAgICAgaWYgKC8oXjB7NH0pLy50ZXN0KGJlaGluZFNlcGFyYXRvck51bWJlcikpIHtcbiAgICAgICAgICBiZWhpbmRTZXBhcmF0b3JOdW1iZXIgPSBiZWhpbmRTZXBhcmF0b3JOdW1iZXIucmVwbGFjZSgvKF4wezR9KS8sICcwMDAwJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChmb250U2VwYXJhdG9yTnVtYmVyKSB7XG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKGZvbnRTZXBhcmF0b3JOdW1iZXIsIHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpLCB0aGlzLmZpeGVkRmxvYXQoKSA/PyAodGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50JyA/IDQgOiAxNCkpO1xuICAgIH1cbiAgICBjb25zdCBoYXNTZXBhcmF0b3JSZXZlcnQgPSAodGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50JyA/IHRydWUgOiAhZm9udE92ZXJNYXhUb3RhbE51bWJlcikgJiYgaW5kZXhPZlNlcGFyYXRvclJldmVydCA+PSAwO1xuXG4gICAgdmFsdWVGb3JtYXQgPSBgJHtmb250U2VwYXJhdG9yTnVtYmVyID8/ICcnfSR7aGFzU2VwYXJhdG9yUmV2ZXJ0ID8gc2VwYXJhdG9yUmV2ZXJ0IDogJyd9JHtiZWhpbmRTZXBhcmF0b3JOdW1iZXIgPz8gJyd9YDtcbiAgICBpZiAodmFsdWVGb3JtYXQgJiYgdGhpcy5vbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmICF2YWx1ZUZvcm1hdC5zdGFydHNXaXRoKCctJykgJiYgIXZhbHVlRm9ybWF0LnN0YXJ0c1dpdGgoJzAnKSkge1xuICAgICAgdmFsdWVGb3JtYXQgPSAnMCc7XG4gICAgfVxuICAgIGlmICh0aGlzLmNoZWNrTWF4TGVuZ3RoTnVtYmVyQW5kU2V0VmFsdWUodmFsdWVGb3JtYXQsIGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGUudGFyZ2V0LnZhbHVlID0gdmFsdWVGb3JtYXQgYXMgSVN0cmluZztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2hlY2taZXJvKHZhbHVlOiBudW1iZXIsIHRhcmdldEN1cnJlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHplcm8gPSAnJztcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgIT09ICdpbnQnKSB7XG4gICAgICByZXR1cm4gemVybztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGFyRmlyc3RJc1plcm8oKSAmJiB0aGlzLmtlZXBaZXJvSW5UeXBlSW50KCkgJiYgdmFsdWUgIT09IDApIHtcbiAgICAgIHplcm8gPSAnMCc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hhckZpcnN0SXNaZXJvKCkgJiYgdGhpcy5hdXRvQWRkWmVyb0xlc3NUaGFuMTBJblR5cGVJbnQoKSAmJiAoKHZhbHVlID4gMCAmJiB2YWx1ZSA8IDEwICYmICEvKF4wKSsvLnRlc3QoYCR7dGFyZ2V0Q3VycmVudH1gKSkgfHwgKC9eMHsyLH0kLy5leGVjKHRhcmdldEN1cnJlbnQgPz8gJycpPy5sZW5ndGggJiYgdmFsdWUgPT09IDApKSkge1xuICAgICAgemVybyA9ICcwJztcbiAgICB9XG5cbiAgICByZXR1cm4gemVybztcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2FyZXRQb3NpdGlvbihlOiBJRXZlbnQgfCBJRXZlbnRDdXN0b20sIHNlbGVjdGlvblN0YXJ0OiBudW1iZXIpIHtcbiAgICBjb25zdCB7IGtleUNvZGUsIGlucHV0VHlwZSB9ID0gZTtcblxuICAgIGlmIChrZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5VUF9BUlJPVyB8fCBrZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5ET1dOX0FSUk9XIHx8IGtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkxFRlRfQVJST1cgfHwga2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuUklHSFRfQVJST1cpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVUYXJnZXQgPSBlLnRhcmdldC52YWx1ZS5yZXBsYWNlKCctJywgJycpO1xuICAgIGxldCB2YWx1ZSA9IFV0aWxzQ2FjaGUuZ2V0TGFuZygpID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlZJID8gYCR7dGhpcy52YWx1ZSgpIHx8IDB9YC5yZXBsYWNlKCcuJywgJywnKSA6IGAke3RoaXMudmFsdWUoKSB8fCAwfWA7XG5cbiAgICB2YWx1ZSA9IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSh2YWx1ZSwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksIHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KTtcbiAgICB2YWx1ZSA9IGAke3ZhbHVlfWAucmVwbGFjZSgnLScsICcnKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gdmFsdWVUYXJnZXQgJiYgdmFsdWUgIT09ICcwJyAmJiB2YWx1ZSAhPT0gJy0nKSB7XG4gICAgICBzZXRDYXJldFBvc2l0aW9uKHRoaXMuRWxlbWVudCwgc2VsZWN0aW9uU3RhcnQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGZhY3RvciA9IDA7XG4gICAgY29uc3QgZGlzdGFuY2UgPSB2YWx1ZVRhcmdldC5sZW5ndGggLSB2YWx1ZS5sZW5ndGg7XG4gICAgaWYgKGRpc3RhbmNlIDwgLTEpIHtcbiAgICAgIGZhY3RvciA9IC0xO1xuICAgIH1cbiAgICBpZiAoZGlzdGFuY2UgPiAxKSB7XG4gICAgICBmYWN0b3IgPSAxO1xuICAgIH1cbiAgICBzZWxlY3Rpb25TdGFydCArPSBmYWN0b3I7XG4gICAgaWYgKGlucHV0VHlwZSA9PT0gJ2luc2VydEZyb21QYXN0ZScgJiYgdGhpcy5kYXRhVGV4dFBhc3RlKCkpIHtcbiAgICAgIGNvbnN0IGRhdGFUZXh0RGlzcGxheSA9IGAke3ZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSh0aGlzLmRhdGFUZXh0UGFzdGUoKSwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksIHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KX1gO1xuICAgICAgY29uc3QgaW5kZXhlczogQXJyYXk8bnVtYmVyPiA9IGUudGFyZ2V0LnZhbHVlLmluZGV4ZXNCeVN0cmluZyhkYXRhVGV4dERpc3BsYXkpO1xuXG4gICAgICBzZWxlY3Rpb25TdGFydCAtPSBmYWN0b3I7XG5cbiAgICAgIGlmIChpbmRleGVzLnNvbWUoKGluZGV4KSA9PiBpbmRleCA9PT0gc2VsZWN0aW9uU3RhcnQpIHx8ICFpbmRleGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gc2V0Q2FyZXRQb3NpdGlvbih0aGlzLkVsZW1lbnQsIHNlbGVjdGlvblN0YXJ0KTtcbiAgICAgIH1cblxuICAgICAgbGV0IG5ld1NlbGVjdGlvblN0YXJ0ID0gaW5kZXhlc1swXTtcblxuICAgICAgZm9yIChjb25zdCBpbmRleCBvZiBpbmRleGVzKSB7XG4gICAgICAgIGxldCByZXBsYWNlVmFsdWUgPSBmb3JtYXROdW1iZXIoYCR7dmFsdWVUYXJnZXQuc3Vic3RyaW5nKDAsIGluZGV4KX0ke3ZhbHVlVGFyZ2V0LnN1YnN0cmluZyhpbmRleCArIGRhdGFUZXh0RGlzcGxheS5sZW5ndGggKyAxLCB2YWx1ZVRhcmdldC5sZW5ndGgpfWApO1xuXG4gICAgICAgIHJlcGxhY2VWYWx1ZSA9IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZShyZXBsYWNlVmFsdWUsIHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpLCB0aGlzLmZpeGVkRmxvYXQoKSA/PyAxNCk7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gcmVwbGFjZVZhbHVlKSB7XG4gICAgICAgICAgbmV3U2VsZWN0aW9uU3RhcnQgPSBpbmRleDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobmV3U2VsZWN0aW9uU3RhcnQgPj0gMCkge1xuICAgICAgICBzZWxlY3Rpb25TdGFydCA9IG5ld1NlbGVjdGlvblN0YXJ0ICsgZGF0YVRleHREaXNwbGF5Lmxlbmd0aCArIDE7XG5cbiAgICAgICAgcmV0dXJuIHNldENhcmV0UG9zaXRpb24odGhpcy5FbGVtZW50LCBzZWxlY3Rpb25TdGFydCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0Q2FyZXRQb3NpdGlvbih0aGlzLkVsZW1lbnQsIHNlbGVjdGlvblN0YXJ0KTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VWYWx1ZUJ5RGF0YVR5cGUodmFsdWU6IHN0cmluZyk6IG51bWJlciB8IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLmRhdGFUeXBlKCkpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgaWYgKHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmICh2YWx1ZSA9PT0gJy0nIHx8IHZhbHVlID09PSAnLCcgfHwgdmFsdWUgPT09ICcuJykpIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiArZm9ybWF0TnVtYmVyKHZhbHVlKTtcblxuICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICBpZiAodGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgKHZhbHVlID09PSAnLScgfHwgdmFsdWUgPT09ICcsJyB8fCB2YWx1ZSA9PT0gJy4nKSkge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoKCtmb3JtYXROdW1iZXIodmFsdWUpKS50b0ZpeGVkKHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KSk7XG5cbiAgICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICAgIGlmICh0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiAodmFsdWUgPT09ICctJyB8fCB2YWx1ZSA9PT0gJywnIHx8IHZhbHVlID09PSAnLicpKSB7XG4gICAgICAgICAgcmV0dXJuICcwJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXROdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRvckhlaWdodFRleHRBcmVhKGU6IElFdmVudCB8IElFdmVudEN1c3RvbSkge1xuICAgIGlmICh0aGlzLnRhZ0lucHV0KCkgPT09ICdpbnB1dCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQ7XG5cbiAgICB0YXJnZXQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICB0YXJnZXQuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5kZWZhdWx0SGVpZ2h0KCl9cHhgO1xuICAgIGNvbnN0IHsgc2Nyb2xsSGVpZ2h0IH0gPSB0YXJnZXQ7XG5cbiAgICBjb25zdCBoZWlnaHQgPSBzY3JvbGxIZWlnaHQgKyAyOyAvLyAgYm9yZGVyIHRvcCArIGJvdHRvbSA9IDJcblxuICAgIGlmICghdGhpcy5wcmVIZWlnaHRBcmVhKCkgJiYgdGhpcy5wcmVIZWlnaHRBcmVhKCkgIT09IGhlaWdodCkge1xuICAgICAgdGhpcy5vdXRIZWlnaHRBcmVhQ2hhbmdlLmVtaXQoeyBpc0NoYW5nZTogdHJ1ZSwgaGVpZ2h0OiBoZWlnaHQgfSk7XG4gICAgfVxuXG4gICAgaWYgKGhlaWdodCA+ICh0aGlzLm1heEhlaWdodFRleHRBcmVhKCkgPz8gMzIpKSB7XG4gICAgICB0YXJnZXQuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgfVxuICAgIGlmICh0aGlzLmlmcmFtZVJlZikge1xuICAgICAgdGhpcy5pZnJhbWVSZWYuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICB9XG4gICAgdGFyZ2V0LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgdGhpcy5wcmVIZWlnaHRBcmVhLnNldChoZWlnaHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21iaW5lT2JzZXJ2YWJsZShtb3VzZURvd25FdmVudDogT2JzZXJ2YWJsZTxJRXZlbnQ+LCBvYnNlcnZhYmxlTWVyZ2U6IE9ic2VydmFibGU8SUV2ZW50Pikge1xuICAgIG1vdXNlRG93bkV2ZW50XG4gICAgICAucGlwZShcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gb2JzZXJ2YWJsZU1lcmdlKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDApLFxuICAgICAgICB0YXAoKGU6IElFdmVudCkgPT4gdGhpcy5jaGVja1R5cGVOdW1iZXIoZSwgJ2tleScpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZTogSUV2ZW50KSA9PiB0aGlzLnByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShlKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZvY3VzKGVtaXRFdmVudD86IGJvb2xlYW4pIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuRWxlbWVudD8uZm9jdXMoKTtcbiAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgdGhpcy5vdXRGb2N1c0FuZEJsdXJFdmVudC5lbWl0KHsgbmFtZTogJ2ZvY3VzJywgZXZlbnQ6IHsgdGFyZ2V0OiB0aGlzLkVsZW1lbnQgfSBhcyB1bmtub3duIGFzIElFdmVudCB9KTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLmZvY3VzVGltZU91dCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYmx1cihlbWl0RXZlbnQ/OiBib29sZWFuKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLkVsZW1lbnQ/LmJsdXIoKTtcbiAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgdGhpcy5vdXRGb2N1c0FuZEJsdXJFdmVudC5lbWl0KHsgbmFtZTogJ2JsdXInLCBldmVudDogeyB0YXJnZXQ6IHRoaXMuRWxlbWVudCB9IGFzIHVua25vd24gYXMgSUV2ZW50IH0pO1xuICAgICAgfVxuICAgIH0sIHRoaXMuYmx1clRpbWVPdXQoKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFkZERhdGFUb1NlbGVjdGlvbklucHV0KGRhdGE6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuRWxlbWVudDtcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IHRhcmdldC5zZWxlY3Rpb25TdGFydDtcblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5FbGVtZW50LnZhbHVlO1xuICAgIGNvbnN0IGJlZm9yZVZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIHNlbGVjdGlvblN0YXJ0KTtcbiAgICBjb25zdCBhZnRlclZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKHNlbGVjdGlvblN0YXJ0KTtcblxuICAgIHRoaXMuRWxlbWVudC52YWx1ZSA9IGAke2JlZm9yZVZhbHVlfSR7ZGF0YX0ke2FmdGVyVmFsdWV9YDtcbiAgICBzZXRDYXJldFBvc2l0aW9uKHRoaXMuRWxlbWVudCwgc2VsZWN0aW9uU3RhcnQgKyBkYXRhLnRvU3RyaW5nKCkubGVuZ3RoKTtcbiAgICBjb25zdCBldmVudEZha2U6IElFdmVudEN1c3RvbSA9IHtcbiAgICAgIHByZXZlbnREZWZhdWx0OiAoKSA9PiB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0sXG4gICAgICB0YXJnZXQ6IHRoaXMuRWxlbWVudCxcbiAgICAgIGRhdGE6ICcnLFxuICAgICAgZmFrZUV2ZW50OiB0cnVlLFxuICAgIH07XG5cbiAgICB0aGlzLnByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShldmVudEZha2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJPbkxvYWQoZTogRXZlbnQsIGVsZW1lbnQ6IEhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlmcmFtZVJlZiA9IGVsZW1lbnQ7XG4gICAgY29uc3QgaWZyYW1lOiBhbnkgPSBlbGVtZW50LmNvbnRlbnRXaW5kb3cgfHwgZWxlbWVudC5jb250ZW50RG9jdW1lbnQ7XG4gICAgdGhpcy5jb25maWdQcm9qZWN0U2VydmljZS5zZXR1cEZvbnRGYW1pbHkoaWZyYW1lLmRvY3VtZW50KTtcblxuICAgIHRoaXMuaW5wdXRJZnJhbWVSZWYuc2V0KHsgbmF0aXZlRWxlbWVudDogaWZyYW1lLmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdURVhUQVJFQScpWzBdIH0pO1xuICAgIGlmICh0aGlzLkVsZW1lbnQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuRWxlbWVudCwgJ3BsYWNlaG9sZGVyJywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5wbGFjZWhvbGRlcigpKSk7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlKCkpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5FbGVtZW50LCAnZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgfVxuICAgICAgdGhpcy5hZnRlclZpZXdJbml0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXNldFZhbHVlKCkge1xuICAgIGNvbnN0IHZhbHVlID0gJyc7XG5cbiAgICB0aGlzLkVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnZhbHVlLnNldCh2YWx1ZSk7XG4gICAgdGhpcy5vdXRDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGNvdW50RGlzcGxheUNvbXB1dGVkKCkge1xuICAgIGlmICgodGhpcy5kYXRhVHlwZSgpICE9PSAnc3RyaW5nJyAmJiB0aGlzLnZhbHVlVXBEb3duTnVtYmVyKCkpIHx8ICFpc05pbCh0aGlzLmljb25SaWdodENsYXNzKCkpKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wYWRkaW5nUmlnaHRDdXN0b20uc2V0KCh0aGlzLmVsZW1lbnRSaWdodFJlZigpPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHx8IDApICsgMTIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zaG93Q291bnQoKSB8fCB0aGlzLmRhdGFUeXBlKCkgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0aGlzLnZhbHVlKCkgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gJzAnO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucGFkZGluZ1JpZ2h0Q3VzdG9tLnNldCgodGhpcy5lbGVtZW50UmlnaHRSZWYoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB8fCAwKSArIDEyKTtcbiAgICAgIGlmICh0aGlzLnNob3dDb3VudCgpKSB7XG4gICAgICAgIGlmICh0aGlzLnRleHRDb3VudFJlZigpKSB7XG4gICAgICAgICAgdGhpcy5wYWRkaW5nUmlnaHRDdXN0b20uc2V0KHRoaXMudGV4dENvdW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggKyAxNik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50YWdJbnB1dCgpID09PSAnaW5wdXQnKSB7XG4gICAgICAgICAgdGhpcy5wYWRkaW5nUmlnaHRDdXN0b20udXBkYXRlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgKHRoaXMuZWxlbWVudFJpZ2h0UmVmKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgMCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBgJHt2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UoKHRoaXMudmFsdWUoKSBhcyBzdHJpbmcpLmxlbmd0aCwgZmFsc2UpfWA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbGVjdEFsbENvbnRlbnQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLkVsZW1lbnQ/LnNlbGVjdCgpO1xuICAgIH0sIHRoaXMuc2VsZWN0QWxsVGltZU91dCgpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8ZGl2XG4gIFtjbGFzc109XCInZmxleCByZWxhdGl2ZSAhdGV4dC1bIzljYTJhZF0gJyArIGNsYXNzQ29udGFpbmVySW5wdXQoKVwiXG4gIFtjbGFzcy5saWJzLXVpLWNvbXBvbmVudHMtaW5wdXQtdGV4dGFyZWEtY29udGFpbmVyXT1cInRhZ0lucHV0KCkgPT09ICd0ZXh0YXJlYScgJiYgcmVzaXplKCkgPT09ICdhdXRvJ1wiPlxuICBAaWYgKHRhZ0lucHV0KCkgPT09ICdpbnB1dCcpIHtcbiAgICA8aW5wdXRcbiAgICAgICNpbnB1dFJlZlxuICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seS1iYWNrZ3JvdW5kXT1cInJlYWRvbmx5KClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZS1iYWNrZ3JvdW5kXT1cImRpc2FibGUoKVwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImRlZmF1bHRIZWlnaHQoKVwiXG4gICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cImRlZmF1bHRIZWlnaHQoKVwiXG4gICAgICBbc3R5bGUucGFkZGluZ1JpZ2h0LnB4LmltcG9ydGFudF09XCJwYWRkaW5nUmlnaHRDdXN0b20oKVwiXG4gICAgICBbY2xhc3Mudy1mdWxsXT1cIiFpZ25vcmVXaWR0aElucHV0MTAwKClcIlxuICAgICAgW2NsYXNzXT1cIidsaWJzLXVpLWlucHV0IGxpYnMtdWktZm9udC1oNXIgJyArIGNsYXNzSW5jbHVkZSgpXCJcbiAgICAgIFtjbGFzcy5ib3JkZXItcHJpbWFyeS1mb2N1cy1nZW5lcmFsXT1cImZvY3VzSW5wdXQoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1pbnB1dC1ub3QtYm9yZGVyXT1cIm5vQm9yZGVyKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktYmctc3BlY2lhbC1ub25lXT1cImJhY2tncm91bmROb25lKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktYm9yZGVyLWVycm9yLWdlbmVyYWxdPVwiYm9yZGVyRXJyb3IoKVwiXG4gICAgICBbY2xhc3MudGV4dC1bIzI5YzdjY11dPVwidXNlQ29sb3JNb2RlRXhpc3QoKVwiXG4gICAgICBbY2xhc3MuIXBsLVs0MHB4XV09XCJpY29uTGVmdENsYXNzKClcIlxuICAgICAgW2F0dHIubWF4TGVuZ3RoXT1cIm1heExlbmd0aCgpIHx8IHVuZGVmaW5lZFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIoKSB8IHRyYW5zbGF0ZVwiXG4gICAgICBbYXR0ci50eXBlXT1cInR5cGVJbnB1dCgpXCJcbiAgICAgIFthdHRyLmlucHV0bW9kZV09XCJtb2RlSW5wdXQoKVwiXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZSgpXCJcbiAgICAgIFthdXRvY29tcGxldGVdPVwicmVzZXRBdXRvQ29tcGxldGVQYXNzd29yZCgpID8gJ25ldy1wYXNzd29yZCcgOiAnJ1wiIC8+XG4gIH1cbiAgQGlmICh0YWdJbnB1dCgpID09PSAndGV4dGFyZWEnKSB7XG4gICAgQGlmIChyZXNpemUoKSA9PT0gJ2F1dG8nKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1jb21wb25lbnRzLWlucHV0LXRleHRhcmVhLWNvbnRhaW5lci1yZXNpemUtaWNvblwiPjwvZGl2PlxuICAgIH1cbiAgICA8dGV4dGFyZWFcbiAgICAgICNpbnB1dFJlZlxuICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seS1iYWNrZ3JvdW5kXT1cInJlYWRvbmx5KClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZS1iYWNrZ3JvdW5kXT1cImRpc2FibGUoKVwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImRlZmF1bHRIZWlnaHQoKVwiXG4gICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cIm1pbkhlaWdodFRleHRBcmVhKCkgPz8gZGVmYXVsdEhlaWdodCgpXCJcbiAgICAgIFtzdHlsZS5wYWRkaW5nUmlnaHQucHguaW1wb3J0YW50XT1cInBhZGRpbmdSaWdodEN1c3RvbSgpXCJcbiAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwibWF4SGVpZ2h0VGV4dEFyZWEoKVwiXG4gICAgICBbc3R5bGUucmVzaXplXT1cInJlc2l6ZSgpXCJcbiAgICAgIFtjbGFzcy53LWZ1bGxdPVwiIWlnbm9yZVdpZHRoSW5wdXQxMDAoKVwiXG4gICAgICBbY2xhc3NdPVwiJ2xpYnMtdWktaW5wdXQgbGlicy11aS1mb250LWg1ciBsaWJzLXVpLWN1cnNvci1hdXRvICcgKyBjbGFzc0luY2x1ZGUoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1pbnB1dC1ub3QtYm9yZGVyXT1cIm5vQm9yZGVyKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktYmctc3BlY2lhbC1ub25lXT1cImJhY2tncm91bmROb25lKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktYm9yZGVyLWVycm9yLWdlbmVyYWxdPVwiYm9yZGVyRXJyb3IoKVwiXG4gICAgICBbY2xhc3MudGV4dC1bIzI5YzdjY11dPVwidXNlQ29sb3JNb2RlRXhpc3QoKVwiXG4gICAgICBbY2xhc3MucGwtWzMycHhdXT1cImljb25MZWZ0Q2xhc3MoKVwiXG4gICAgICBbYXR0ci5tYXhMZW5ndGhdPVwibWF4TGVuZ3RoKCkgfHwgdW5kZWZpbmVkXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcigpIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlKClcIj48L3RleHRhcmVhPlxuICB9XG5cbiAgQGlmICh0YWdJbnB1dCgpID09PSAnaWZyYW1lLXRleHRhcmVhJyAmJiBodG1sSWZyYW1lQXJlYSgpKSB7XG4gICAgPHNwYW4gY2xhc3M9XCJkLW5vbmVcIj48L3NwYW4+XG4gICAgPGlmcmFtZVxuICAgICAgI2lmcmFtZVJlZlxuICAgICAgdGl0bGU9XCJDb250ZW50IGZyYW1lXCJcbiAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwibWF4SGVpZ2h0VGV4dEFyZWEoKVwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImRlZmF1bHRIZWlnaHQoKVwiXG4gICAgICBbc3JjZG9jXT1cImh0bWxJZnJhbWVBcmVhKClcIlxuICAgICAgY2xhc3M9XCJ3LWZ1bGwgYm9yZGVyLTBcIlxuICAgICAgKGxvYWQpPVwiaGFuZGxlck9uTG9hZCgkZXZlbnQsIGlmcmFtZVJlZilcIj48L2lmcmFtZT5cbiAgfVxuICBAaWYgKGljb25MZWZ0Q2xhc3MoKSkge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlclxuICAgICAgW2lnbm9yZVNob3dQb3BvdmVyXT1cIiFwb3BvdmVyQ29udGVudEljb25MZWZ0KClcIlxuICAgICAgW2NvbmZpZ109XCJ7IG1heFdpZHRoOiAyNTAsIGRpcmVjdGlvbjogJ2JvdHRvbScsIGNvbnRlbnQ6IHBvcG92ZXJDb250ZW50SWNvbkxlZnQoKSwgekluZGV4OiB6SW5kZXhQb3BvdmVyQ29udGVudCgpIH1cIj5cbiAgICAgIDxpXG4gICAgICAgIFthdHRyLnRhZ0lucHV0XT1cInRhZ0lucHV0KClcIlxuICAgICAgICBbY2xhc3NdPVwiaWNvbkxlZnRDbGFzcygpICsgJyBsaWJzLXVpLWlucHV0LWljb24tbGVmdCAhdGV4dC1bIzljYTJhZF0nXCJcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJFdmVudEljb25MZWZ0KCRldmVudCwgJ2NsaWNrJylcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJoYW5kbGVyRXZlbnRJY29uTGVmdCgkZXZlbnQsICdjbGljaycpXCI+PC9pPlxuICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gIH1cbiAgPGRpdlxuICAgICNlbGVtZW50UmlnaHRSZWZcbiAgICBjbGFzcz1cImFic29sdXRlIGZsZXggaXRlbXMtY2VudGVyIGgtZnVsbCB0b3AtMCByaWdodC0wXCI+XG4gICAgQGlmICh2YWx1ZSgpICYmIHBsYWNlaG9sZGVyKCkudHJpbSgpICYmIGtlZXBQbGFjZWhvbGRlck9ubHkoKSkge1xuICAgICAgPHNwYW4gW2NsYXNzXT1cIidsaWJzLXVpLWlucHV0LXBsYWNlaG9sZGVyLWN1c3RvbSBsaWJzLXVpLWZvbnQtaDVyJ1wiPlxuICAgICAgICB7eyBwbGFjZWhvbGRlcigpIH19XG4gICAgICA8L3NwYW4+XG4gICAgfVxuICAgIEBpZiAoZGF0YVR5cGUoKSAhPT0gJ3N0cmluZycgJiYgdmFsdWVVcERvd25OdW1iZXIoKSkge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLXNvcnRcbiAgICAgICAgY2xhc3M9XCJtci1bMTJweF1cIlxuICAgICAgICBbZGlzYWJsZUFzY109XCJkaXNhYmxlQXNjKClcIlxuICAgICAgICBbZGlzYWJsZURlc2NdPVwiZGlzYWJsZURlc2MoKVwiXG4gICAgICAgIFthdHRyLnRhZ0lucHV0XT1cInRhZ0lucHV0KClcIlxuICAgICAgICBbb25seUVtaXRdPVwidHJ1ZVwiXG4gICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyQ2hhbmdlVmFsdWUoJGV2ZW50KVwiIC8+XG4gICAgfVxuICAgIEBpZiAoaWNvblJpZ2h0Q2xhc3MoKSkge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgICAgIGNsYXNzPVwiZmxleFwiXG4gICAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCIhcG9wb3ZlckNvbnRlbnRJY29uUmlnaHQoKVwiXG4gICAgICAgIFtjb25maWddPVwieyBtYXhXaWR0aDogMjUwLCBkaXJlY3Rpb246ICdib3R0b20nLCBjb250ZW50OiBwb3BvdmVyQ29udGVudEljb25SaWdodCgpLCB6SW5kZXg6IHpJbmRleFBvcG92ZXJDb250ZW50KCkgfVwiPlxuICAgICAgICA8aVxuICAgICAgICAgIFthdHRyLnRhZ0lucHV0XT1cInRhZ0lucHV0KClcIlxuICAgICAgICAgIFtjbGFzcy50ZXh0LVsjNmE3MzgzXV09XCIoIWRpc2FibGUoKSAmJiAhcmVhZG9ubHkoKSkgfHwgYWNjZXB0T25seUNsaWNrSWNvbigpXCJcbiAgICAgICAgICBbY2xhc3MudGV4dC1bI2NkZDBkNl1dPVwiKChkaXNhYmxlKCkgfHwgcmVhZG9ubHkoKSkgJiYgIWFjY2VwdE9ubHlDbGlja0ljb24oKSkgfHwgc2V0SWNvblJpZ2h0Q29sb3JTYW1lQ29sb3JEaXNhYmxlUmVhZE9ubHkoKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImljb25SaWdodENsYXNzKCkgKyAnIGxpYnMtdWktaW5wdXQtaWNvbi1yaWdodCdcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyRXZlbnRJY29uUmlnaHQoJGV2ZW50LCAnY2xpY2snKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiaGFuZGxlckV2ZW50SWNvblJpZ2h0KCRldmVudCwgJ2NsaWNrJylcIj48L2k+XG4gICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgIH1cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cImxpYnMtdWktaW5wdXQtdGV4dC1ib3R0b20ge3sgY2xhc3NDb250YWluZXJCb3R0b21JbnB1dCgpIH19XCJcbiAgICBbc3R5bGUucmlnaHQucHhdPVwiKHRhZ0lucHV0KCkgPT09ICdpbnB1dCcgPyBlbGVtZW50UmlnaHRSZWYuY2xpZW50V2lkdGggfHwgMCA6IDApICsgOFwiPlxuICAgIEBpZiAodGVtcGxhdGVMZWZ0Qm90dG9tSW5wdXQoKTsgYXMgdGVtcGxhdGVMZWZ0Qm90dG9tSW5wdXQpIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dFwiIC8+XG4gICAgfVxuICAgIDxkaXZcbiAgICAgICN0ZXh0Q291bnRSZWZcbiAgICAgIGNsYXNzPVwidGV4dC1bIzljYTJhZF0gbGlicy11aS1mb250LWg3clwiXG4gICAgICBbY2xhc3MuaGlkZGVuXT1cImRhdGFUeXBlKCkgIT09ICdzdHJpbmcnIHx8ICFzaG93Q291bnQoKVwiPlxuICAgICAgPHNwYW4+e3sgY291bnREaXNwbGF5KCkgfX08L3NwYW4+XG4gICAgICBAaWYgKG1heExlbmd0aCgpKSB7XG4gICAgICAgIDxzcGFuPi97eyBtYXhMZW5ndGhEaXNwbGF5KCkgfX08L3NwYW4+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgQGlmICh0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXQoKTsgYXMgdGVtcGxhdGVSaWdodEJvdHRvbUlucHV0KSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVSaWdodEJvdHRvbUlucHV0XCIgLz5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
850
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9pbnB1dC9zcmMvaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9pbnB1dC9zcmMvaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWlDLFNBQVMsRUFBZSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4TSxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFTLG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0YsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUwsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBYyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7OztBQWNwRSxNQUFNLE9BQU8sb0NBQW9DO0lBQy9DLG1CQUFtQjtJQUNBLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixjQUFjLEdBQUcsTUFBTSxDQUF1QixTQUFTLENBQUMsQ0FBQztJQUN6RCxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RCxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRixrQkFBa0IsR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDO0lBQzNELGNBQWMsR0FBRyxNQUFNLENBQXlCLFNBQVMsQ0FBQyxDQUFDO0lBRTdELHNCQUFzQixHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7SUFDaEQsNEJBQTRCLEdBQUcsR0FBRyxDQUFDO0lBQ25DLGVBQWUsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDekMsYUFBYSxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUMzQyxTQUFTLENBQWdDO0lBQ2hDLGFBQWEsR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7SUFDbkMsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFakQsZ0JBQWdCO0lBQ1AsUUFBUSxHQUFHLEtBQUssQ0FBNkMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNsSCxRQUFRLEdBQUcsS0FBSyxDQUF5RCxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzVILFNBQVMsR0FBRyxLQUFLLENBQXFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDckcsU0FBUyxHQUFHLEtBQUssQ0FBK0MsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQztJQUUvRyx3QkFBd0IsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDakQsdUJBQXVCLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ2hELHlCQUF5QixHQUFHLEtBQUssQ0FBc0IsS0FBSyxDQUFDLENBQUM7SUFDOUQsaUJBQWlCLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQzFDLDhCQUE4QixHQUFHLEtBQUssQ0FBc0IsS0FBSyxDQUFDLENBQUM7SUFDbkUsd0JBQXdCLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDNUMsY0FBYyxHQUFHLEtBQUssRUFBVSxDQUFDO0lBQ2pDLGNBQWMsR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUNqQyxVQUFVLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDN0IsbUJBQW1CLEdBQUcsS0FBSyxDQUFzQixLQUFLLENBQUMsQ0FBQztJQUN4RCxpQkFBaUIsR0FBRyxLQUFLLEVBQXNCLENBQUM7SUFDaEQsWUFBWSxHQUFHLEtBQUssQ0FBaUIsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNoRyxTQUFTLEdBQUcsS0FBSyxFQUFzQixDQUFDO0lBQ3hDLFFBQVEsR0FBRyxLQUFLLENBQXNCLEtBQUssQ0FBQyxDQUFDO0lBQzdDLE9BQU8sR0FBRyxLQUFLLENBQXNCLEtBQUssQ0FBQyxDQUFDO0lBQzVDLFFBQVEsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUM1QixjQUFjLEdBQUcsS0FBSyxDQUFzQixLQUFLLENBQUMsQ0FBQztJQUNuRCxXQUFXLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLGlCQUFpQixHQUFHLEtBQUssQ0FBc0IsS0FBSyxDQUFDLENBQUM7SUFDdEQsV0FBVyxHQUFHLEtBQUssQ0FBaUIsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNqRixtQkFBbUIsR0FBRyxLQUFLLENBQXNCLEtBQUssQ0FBQyxDQUFDO0lBQ3hELEtBQUssR0FBRyxLQUFLLENBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLGVBQWUsR0FBRyxLQUFLLENBQXNCLEtBQUssQ0FBQyxDQUFDO0lBQ3BELGFBQWEsR0FBRyxLQUFLLENBQTZCLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0YsaUJBQWlCLEdBQUcsS0FBSyxFQUFzQixDQUFDO0lBQ2hELGlCQUFpQixHQUFHLEtBQUssQ0FBNkIsSUFBSSxDQUFDLDRCQUE0QixFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUMsQ0FBQztJQUMvSixZQUFZLEdBQUcsS0FBSyxDQUE2QixHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlGLGdCQUFnQixHQUFHLEtBQUssQ0FBNkIsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNsRyxXQUFXLEdBQUcsS0FBSyxDQUE2QixFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNGLG9CQUFvQixHQUFHLEtBQUssQ0FBNkIsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRyxtQkFBbUIsR0FBRyxLQUFLLENBQTZCLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDL0csU0FBUyxHQUFHLEtBQUssRUFBVyxDQUFDO0lBQzdCLDBCQUEwQixHQUFHLEtBQUssRUFBVyxDQUFDO0lBQzlDLE1BQU0sR0FBRyxLQUFLLENBQWlELFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDMUgsdUJBQXVCLEdBQUcsS0FBSyxFQUFrQyxDQUFDO0lBQ2xFLHdCQUF3QixHQUFHLEtBQUssRUFBa0MsQ0FBQztJQUNuRSx5QkFBeUIsR0FBRyxLQUFLLENBQXlDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdkgsbUJBQW1CLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDdkMseUJBQXlCLEdBQUcsS0FBSyxFQUE4QixDQUFDO0lBRWhFLGFBQWEsR0FBRyxLQUFLLENBQTZCLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0Ysc0JBQXNCLEdBQUcsS0FBSyxDQUE2QixFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RHLGNBQWMsR0FBRyxLQUFLLEVBQXNCLENBQUM7SUFDN0MsdUJBQXVCLEdBQUcsS0FBSyxDQUE2QixFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZHLHlCQUF5QixHQUFHLEtBQUssQ0FBK0IsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNqSCxtQkFBbUIsR0FBRyxLQUFLLENBQXNCLEtBQUssQ0FBQyxDQUFDO0lBQ3hELHlDQUF5QyxHQUFHLEtBQUssQ0FBc0IsS0FBSyxDQUFDLENBQUM7SUFDOUUsdUJBQXVCLEdBQUcsS0FBSyxDQUFzQixLQUFLLENBQUMsQ0FBQztJQUM1RCxvQkFBb0IsR0FBRyxLQUFLLEVBQXNCLENBQUM7SUFDbkQsVUFBVSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUU1QyxpQkFBaUI7SUFDUixtQkFBbUIsR0FBRyxNQUFNLEVBQXlDLENBQUM7SUFDdEUsU0FBUyxHQUFHLE1BQU0sRUFBTyxDQUFDO0lBQzFCLG9CQUFvQixHQUFHLE1BQU0sRUFBc0IsQ0FBQztJQUNwRCxhQUFhLEdBQUcsTUFBTSxFQUFVLENBQUM7SUFDakMsYUFBYSxHQUFHLE1BQU0sRUFBVSxDQUFDLENBQUMsd0JBQXdCO0lBQzFELFdBQVcsR0FBRyxNQUFNLEVBQVUsQ0FBQztJQUMvQixZQUFZLEdBQUcsTUFBTSxFQUFVLENBQUM7SUFDaEMsbUJBQW1CLEdBQUcsTUFBTSxFQUE4QixDQUFDO0lBQzNELFlBQVksR0FBRyxNQUFNLEVBQWUsQ0FBQztJQUNyQyxXQUFXLEdBQUcsTUFBTSxFQUFRLENBQUM7SUFDN0IsNEJBQTRCLEdBQUcsTUFBTSxFQUFRLENBQUM7SUFFdkQsZ0JBQWdCO0lBQ04sUUFBUSxHQUFHLFNBQVMsQ0FBYSxVQUFVLENBQUMsQ0FBQztJQUM3QyxZQUFZLEdBQUcsU0FBUyxDQUFhLGNBQWMsQ0FBQyxDQUFDO0lBQ3JELGVBQWUsR0FBRyxTQUFTLENBQWEsaUJBQWlCLENBQUMsQ0FBQztJQUVyRSxpQkFBaUI7SUFDQSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLG9CQUFvQixHQUFHLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzFELGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVDLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFbEQ7UUFDRSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxDQUFDO2dCQUNuQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3RELENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNsQixPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO29CQUN4QyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7Z0JBRUQsT0FBTztZQUNULENBQUM7WUFDRCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLENBQUMsQ0FBQztZQUM3RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU1RCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssRUFBRSxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMseUJBQXlCLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDM0osT0FBTztZQUNULENBQUM7WUFDRCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JPLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFWixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqSixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvSSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUM7UUFDOUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUMsQ0FBQztRQUMxRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUM7UUFFOUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDL0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7YUFDMUQsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQ3BCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEIsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3ZCLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2RyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUV4RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakQsWUFBWTthQUNULElBQUksQ0FDSCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUNsRCxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FDcEQ7YUFDQSxTQUFTLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyx1QkFBdUIsSUFBSSxDQUFDLENBQUMsU0FBUyxLQUFLLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN0TCxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFDRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFTCxLQUFLLENBQUMsU0FBUyxDQUFTLElBQUksQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxTQUFTLENBQVMsSUFBSSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2FBQzFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUN2RSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNmLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVMLFVBQVU7YUFDUCxJQUFJLENBQ0gsTUFBTSxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxFQUN2RSxNQUFNLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUNsSDthQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUVoRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0SSxZQUFZO2lCQUNULElBQUksQ0FDSCxNQUFNLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQ3JFLEdBQUcsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQzlDLE1BQU0sQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFDM0gsR0FBRyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO29CQUN0QyxPQUFPO2dCQUNULENBQUM7Z0JBQ0QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMvQyxDQUFDLENBQUMsQ0FDSDtpQkFDQSxTQUFTLEVBQUUsQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxDQUFDO1lBQ25DLFlBQVk7aUJBQ1QsSUFBSSxDQUNILE1BQU0sQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxvQkFBb0IsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQ3ZDO2lCQUNBLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLENBQUM7UUFFRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU87WUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzVCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDMUIsYUFBYSxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3RELFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEMsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNoRCwyQkFBMkIsRUFBRSxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN4RSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNuRCxDQUFDO0lBQ0osQ0FBQztJQUVPLG9DQUFvQztRQUMxQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzlCLE9BQU8sQ0FBQyxLQUFLLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDM0MsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMzRCxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxlQUFlO1FBQzNCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQWE7UUFDckMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7UUFDdEUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFLLE1BQWMsQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNuQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVwQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUIsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxJQUFZLEVBQUUsS0FBYTtRQUM1RCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQVksT0FBTztRQUNqQixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxhQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGFBQWEsQ0FBQztJQUNoRixDQUFDO0lBRVMsa0JBQWtCLENBQUMsSUFBVztRQUN0QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUN0QyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNqRixNQUFNLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVGLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDakMsS0FBSyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLFlBQVksR0FBRyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDeEcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRVMsb0JBQW9CLENBQUMsQ0FBUSxFQUFFLFNBQWlCO1FBQ3hELENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQztZQUN2RSxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFUyxxQkFBcUIsQ0FBQyxDQUFRLEVBQUUsU0FBaUI7UUFDekQsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDO1lBQ3ZFLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVPLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxLQUFhO1FBQ3JELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM3RixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RSxLQUFLLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUVuQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQ2pHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRVMsU0FBUyxDQUFDLFNBQWlCLEVBQUUsMEJBQW9DO1FBQ3pFLE9BQU8sU0FBUyxDQUFTLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUNwRCxHQUFHLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3RCLENBQUM7WUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFhO1FBQ2hDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNqRixJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEQsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFFcEUsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2dCQUNuRCxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQ1osQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUNoQixDQUFDO1lBQ0QsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN2QixNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUU3QyxPQUFPLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3RSxDQUFDO1lBRUQsT0FBTyxHQUFHLEdBQUcsR0FBRyxTQUFTLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLElBQUk7UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLENBQUM7UUFDOUMsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFOUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDakMsWUFBWSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3RyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxzQkFBc0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDdkQsWUFBWSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDO1FBRWxDLE1BQU0sU0FBUyxHQUFpQjtZQUM5QixjQUFjLEVBQUUsR0FBRyxFQUFFO2dCQUNuQixPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNwQixJQUFJLEVBQUUsWUFBWTtZQUNsQixTQUFTLEVBQUUsSUFBSTtTQUNoQixDQUFDO1FBRUYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxDQUF3QjtRQUN2RCxNQUFNLEtBQUssR0FBUSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3RCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQ3RLLE1BQU0sWUFBWSxHQUFHLHdCQUF3QixDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFFMUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUM7WUFFdEYsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFFbkIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEksSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVoRixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFUixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDckUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBZSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTywrQkFBK0IsQ0FBQyxZQUFvQixFQUFFLENBQXdCO1FBQ3BGLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMxTCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0QsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUU3SixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNoQyxTQUFTLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakIsa0JBQWtCLEdBQUcsd0JBQXdCLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDakosQ0FBQztRQUNELElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqQixrQkFBa0IsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM5QyxDQUFDO1FBQ0QsSUFBSSxTQUFTLElBQUksa0JBQWtCLElBQUksU0FBUyxFQUFFLENBQUM7WUFDakQsTUFBTSxZQUFZLEdBQUcsd0JBQXdCLENBQUMsQ0FBQyxrQkFBa0IsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRTlMLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDO1lBRXRGLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGVBQWUsQ0FBQyxDQUF3QixFQUFFLFNBQWlCO1FBQ2pFLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6QyxNQUFNLFNBQVMsR0FBRyxXQUFXLEtBQUssc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN4RSxNQUFNLGVBQWUsR0FBRyxXQUFXLEtBQUssc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUM5RSxJQUFJLFdBQVcsR0FBWSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMxQyxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDbkQsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBRUQsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDdkUsV0FBVyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBWSxDQUFDO1FBQ3hELENBQUM7UUFDRCxJQUFJLFFBQVEsR0FBRyxVQUFVLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBRWxFLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBRSxDQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxPQUFPLEtBQUssb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDekcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25CLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBWSxDQUFDO1FBQ25HLENBQUM7UUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxTQUFTO29CQUNaLFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksU0FBUyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFZLENBQUM7b0JBQ3JGLE1BQU07Z0JBRVIsS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDO29CQUNyQixJQUFJLFdBQVcsS0FBSyxzQkFBc0IsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDO3dCQUMzRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksZUFBZSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFZLENBQUM7d0JBRTlGLE9BQU87b0JBQ1QsQ0FBQztvQkFDRCxJQUFJLFdBQVcsS0FBSyxlQUFlLEVBQUUsQ0FBQzt3QkFDcEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO3dCQUVwQixPQUFPO29CQUNULENBQUM7b0JBQ0QsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ3hHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQzt3QkFFckIsT0FBTztvQkFDVCxDQUFDO29CQUNELE1BQU0sc0JBQXNCLEdBQUcsV0FBVyxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUVuRixJQUFJLHNCQUFzQixHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUMvQixXQUFXLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFZLENBQUM7d0JBQ2hGLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBRXBHLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDbEMsU0FBUyxFQUFFLENBQUM7b0JBQ2QsQ0FBQztvQkFDRCxJQUFJLHNCQUFzQixLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQ3hJLFdBQVcsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQVksQ0FBQzt3QkFDaEYsTUFBTTtvQkFDUixDQUFDO29CQUNELElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLElBQUksV0FBVyxLQUFLLElBQUksZUFBZSxFQUFFLEVBQUUsQ0FBQzt3QkFDNUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO3dCQUNyQixNQUFNO29CQUNSLENBQUM7b0JBQ0QsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztvQkFDekMsTUFBTSxnQkFBZ0IsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ3ZILElBQUksaUJBQWlCLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDM0MsT0FBTztvQkFDVCxDQUFDO29CQUNELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDO2dCQUNwQyxDQUFDO1lBQ0gsQ0FBQztZQUNELFdBQVcsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFZLENBQUM7UUFDckQsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVsRSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6QixNQUFNLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxHQUFHLGFBQWEsQ0FBQztZQUNoRCxNQUFNLFlBQVksR0FBRyxVQUFVLElBQUksV0FBVyxDQUFDLENBQUMsMEJBQTBCO1lBRTFFLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLFdBQVcsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFZLENBQUM7WUFDekUsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLFdBQVcsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN0RCxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7WUFFN0IsT0FBTztRQUNULENBQUM7UUFDRCxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDWCxRQUFRLEdBQUcsUUFBUSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDakIsV0FBVyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBWSxDQUFDO29CQUM3RSxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFFM0QsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLGNBQWMsRUFBRSxDQUFDO3dCQUN4QyxXQUFXLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFZLENBQUM7b0JBQ2hFLENBQUM7b0JBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLGdCQUFnQixDQUFDLEVBQUUsQ0FBQzt3QkFDbEYsV0FBVyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGNBQWMsR0FBRyxDQUFDLENBQVksQ0FBQztvQkFDcEUsQ0FBQztvQkFDRCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDbkcsV0FBVyxHQUFHLEVBQWEsQ0FBQztvQkFDOUIsQ0FBQztvQkFDRCxJQUFJLFdBQVcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7d0JBQ2xELE1BQU0sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO3dCQUVsQixXQUFXLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFZLENBQUM7b0JBQ3pGLENBQUM7b0JBQ0QsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7d0JBQ3pCLFdBQVcsR0FBRyxHQUFjLENBQUM7b0JBQy9CLENBQUM7b0JBQ0QsSUFBSSxXQUFXLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7d0JBQ3pELFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBWSxDQUFDO29CQUM1RSxDQUFDO29CQUNELE1BQU0sWUFBWSxHQUFHLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBRW5HLElBQUksSUFBSSxDQUFDLCtCQUErQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUMxRCxNQUFNO29CQUNSLENBQUM7b0JBQ0QsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUM7b0JBQ3RGLE1BQU07Z0JBQ1IsQ0FBQztnQkFDRCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QyxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLFdBQVcsR0FBRyxVQUFVLENBQUM7Z0JBRTdCLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxVQUFVLEdBQUcsWUFBWSxFQUFFLENBQUM7b0JBQ2hELFdBQVcsR0FBRyxZQUFZLENBQUM7Z0JBQzdCLENBQUM7Z0JBQ0QsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3JCLFdBQVcsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQVksQ0FBQztnQkFDakUsQ0FBQztnQkFDRCxNQUFNLFlBQVksR0FBRyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUVuRyxJQUFJLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDMUQsTUFBTTtnQkFDUixDQUFDO2dCQUNELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDO2dCQUN0RixNQUFNO1lBQ1IsQ0FBQztZQUVELEtBQUssT0FBTyxDQUFDO1lBRWIsMENBQTBDO1lBQzFDLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDN0UsTUFBTTtRQUNWLENBQUM7UUFDRCxJQUFJLFdBQVcsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFhLENBQUM7UUFDakMsQ0FBQztRQUNELElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEMsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU8sY0FBYyxDQUFDLENBQXdCLEVBQUUsV0FBb0IsRUFBRSxTQUFvQixFQUFFLGVBQTBCLEVBQUUsV0FBbUI7UUFDMUksSUFBSSxRQUFRLEdBQUcsUUFBUSxTQUFTLEdBQUcsV0FBVyxLQUFLLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7UUFFbkksSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixXQUFXLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFZLENBQUM7UUFDL0UsQ0FBQztRQUNELE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEdBQUcsa0JBQWtCLENBQUM7UUFFckQsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELElBQUksVUFBVSxJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzVGLFdBQVcsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFZLENBQUM7UUFDaEcsQ0FBQztRQUNELFFBQVEsR0FBRyxJQUFJLFNBQVMsR0FBRyxDQUFDO1FBQzVCLFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRSxlQUFlLENBQVksQ0FBQztRQUN6RixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLHFCQUFxQixDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN0RixJQUFJLGtCQUFrQixHQUFHLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFdEUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDakMsa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwSSxDQUFDO1FBQ0QsTUFBTSxzQkFBc0IsR0FBRyxtQkFBbUIsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLElBQUksa0JBQWtCLENBQUM7UUFFdkcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1lBQzNCLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQVksQ0FBQztZQUNsRixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDaEMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDO1FBQ0QsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUN4QixLQUFLLE9BQU87Z0JBQ1YsSUFBSSxDQUFDLHNCQUFzQixJQUFJLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxDQUFDO29CQUM3RCxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxRyxDQUFDO2dCQUNELHFCQUFxQixHQUFHLEdBQUcscUJBQXFCLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ3pELE1BQU07WUFFUixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxxQkFBcUIsRUFBRSxNQUFNLElBQUkscUJBQXFCLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzdGLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNqRixDQUFDO2dCQUNELE1BQU07UUFDVixDQUFDO1FBQ0QsTUFBTSxzQkFBc0IsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXBFLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuSCxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLElBQUksc0JBQXNCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUcsbUJBQW1CLEdBQUcsR0FBRyxDQUFDO1lBQzFCLHFCQUFxQixHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2xFLENBQUM7UUFDRCxJQUFJLG1CQUFtQixJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQ2hFLE1BQU0sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO1lBRWxCLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUNELElBQUksbUJBQW1CLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7WUFDN0QsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQ3pELG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQywwQkFBMEIsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBQ0QsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQ3RELG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBQ0QsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUN4QixLQUFLLE9BQU87Z0JBQ1YsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztvQkFDMUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDNUUsQ0FBQztnQkFDRCxNQUFNO1lBRVIsS0FBSyxRQUFRO2dCQUNYLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7b0JBQzFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzNFLENBQUM7Z0JBQ0QsTUFBTTtRQUNWLENBQUM7UUFDRCxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsbUJBQW1CLEdBQUcsd0JBQXdCLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hLLENBQUM7UUFDRCxNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLElBQUksc0JBQXNCLElBQUksQ0FBQyxDQUFDO1FBRTFILFdBQVcsR0FBRyxHQUFHLG1CQUFtQixJQUFJLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcscUJBQXFCLElBQUksRUFBRSxFQUFFLENBQUM7UUFDdkgsSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xILFdBQVcsR0FBRyxHQUFHLENBQUM7UUFDcEIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLCtCQUErQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pELE9BQU87UUFDVCxDQUFDO1FBQ0QsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsV0FBc0IsQ0FBQztJQUMxQyxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQWEsRUFBRSxhQUFxQjtRQUN2RCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFFZCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUM5QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEUsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxJQUFJLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hNLElBQUksR0FBRyxHQUFHLENBQUM7UUFDYixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsQ0FBd0IsRUFBRSxjQUFzQjtRQUN2RSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVqQyxJQUFJLE9BQU8sS0FBSyxvQkFBb0IsQ0FBQyxRQUFRLElBQUksT0FBTyxLQUFLLG9CQUFvQixDQUFDLFVBQVUsSUFBSSxPQUFPLEtBQUssb0JBQW9CLENBQUMsVUFBVSxJQUFJLE9BQU8sS0FBSyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1TCxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7UUFFbkksS0FBSyxHQUFHLHdCQUF3QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDN0YsS0FBSyxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVwQyxJQUFJLEtBQUssS0FBSyxXQUFXLElBQUksS0FBSyxLQUFLLEdBQUcsSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDNUQsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztZQUUvQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNuRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqQixNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsQ0FBQztRQUNELGNBQWMsSUFBSSxNQUFNLENBQUM7UUFDekIsSUFBSSxTQUFTLEtBQUssaUJBQWlCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxlQUFlLEdBQUcsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDakksTUFBTSxPQUFPLEdBQWtCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUUvRSxjQUFjLElBQUksTUFBTSxDQUFDO1lBRXpCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN6RSxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDeEQsQ0FBQztZQUVELElBQUksaUJBQWlCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRW5DLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQzVCLElBQUksWUFBWSxHQUFHLFlBQVksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBRXRKLFlBQVksR0FBRyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRyxJQUFJLEtBQUssS0FBSyxZQUFZLEVBQUUsQ0FBQztvQkFDM0IsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO29CQUMxQixNQUFNO2dCQUNSLENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxpQkFBaUIsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsY0FBYyxHQUFHLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUVoRSxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDeEQsQ0FBQztRQUNILENBQUM7UUFFRCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxLQUFhO1FBQ3hDLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDeEIsS0FBSyxRQUFRO2dCQUNYLE9BQU8sS0FBSyxDQUFDO1lBRWYsS0FBSyxLQUFLO2dCQUNSLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxLQUFLLEtBQUssR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHLElBQUksS0FBSyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3BGLE9BQU8sQ0FBQyxDQUFDO2dCQUNYLENBQUM7Z0JBRUQsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU5QixLQUFLLE9BQU87Z0JBQ1YsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLEtBQUssS0FBSyxHQUFHLElBQUksS0FBSyxLQUFLLEdBQUcsSUFBSSxLQUFLLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDcEYsT0FBTyxDQUFDLENBQUM7Z0JBQ1gsQ0FBQztnQkFFRCxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRTdFLEtBQUssUUFBUTtnQkFDWCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsS0FBSyxLQUFLLEdBQUcsSUFBSSxLQUFLLEtBQUssR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNwRixPQUFPLEdBQUcsQ0FBQztnQkFDYixDQUFDO2dCQUVELE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsQ0FBd0I7UUFDdkQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDaEMsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRXhCLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDO1FBQ2xELE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFFaEMsTUFBTSxNQUFNLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtRQUU1RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUM3RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUM7UUFDOUMsQ0FBQztRQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUM7UUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLGlCQUFpQixDQUFDLGNBQWtDLEVBQUUsZUFBbUM7UUFDL0YsY0FBYzthQUNYLElBQUksQ0FDSCxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQy9CLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixHQUFHLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQ25EO2FBQ0EsU0FBUyxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFtQjtRQUNyQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN0QixJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUF1QixFQUFFLENBQUMsQ0FBQztZQUMxRyxDQUFDO1FBQ0gsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFTyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQW1CO1FBQ3BDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3JCLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQXVCLEVBQUUsQ0FBQyxDQUFDO1lBQ3pHLENBQUM7UUFDSCxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVPLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxJQUFxQjtRQUN6RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzVCLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFFN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDakMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdkQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxHQUFHLFdBQVcsR0FBRyxJQUFJLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDMUQsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sU0FBUyxHQUFpQjtZQUM5QixjQUFjLEVBQUUsR0FBRyxFQUFFO2dCQUNuQixPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNwQixJQUFJLEVBQUUsRUFBRTtZQUNSLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUM7UUFFRixJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVTLGFBQWEsQ0FBQyxDQUFRLEVBQUUsT0FBMEI7UUFDMUQsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLE1BQU0sTUFBTSxHQUFRLE9BQU8sQ0FBQyxhQUFhLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUNyRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUzRCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoRyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0csSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0QsQ0FBQztZQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxVQUFVO1FBQ3RCLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUVqQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDaEcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMvRyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDMUYsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDO1FBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzdHLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7Z0JBQ3JCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ25GLENBQUM7Z0JBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDdkMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUM1RixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxHQUFHLHdCQUF3QixDQUFFLElBQUksQ0FBQyxLQUFLLEVBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUMvRSxDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQjtRQUM1QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN6QixDQUFDLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekMsQ0FBQzt3R0E5OUJVLG9DQUFvQzs0RkFBcEMsb0NBQW9DLGtuU0MxQmpELG13TEFvSUEsa29ERDdHWSxlQUFlLDRGQUFFLGdCQUFnQixvSkFBRSxnQ0FBZ0Msb2dCQUFFLG9DQUFvQzs7NEZBR3hHLG9DQUFvQztrQkFUaEQsU0FBUzsrQkFFRSxpQ0FBaUMsY0FHL0IsSUFBSSxXQUNQLENBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGdDQUFnQyxFQUFFLG9DQUFvQyxDQUFDLG1CQUNuRyx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyLCBUZW1wbGF0ZVJlZiwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgSVNvcnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zU29ydENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1zb3J0JztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IElFdmVudCwgSUV2ZW50Q3VzdG9tLCBJU3RyaW5nLCBUWVBFX1RFTVBMQVRFX1JFRiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgTGlic1VpQ29uZmlnUHJvamVjdFNlcnZpY2UgfSBmcm9tICdAbGlicy11aS9zZXJ2aWNlcy1jb25maWctcHJvamVjdCc7XG5pbXBvcnQgeyBVdGlsc0NhY2hlLCBVdGlsc0tleUNvZGVDb25zdGFudCwgVXRpbHNMYW5ndWFnZUNvbnN0YW50cywgZm9ybWF0TnVtYmVyLCBpc05pbCwgaXNUeXBlRmlsZSwgcmVtb3ZlRW1vamksIHNldENhcmV0UG9zaXRpb24sIHV1aWQsIHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZnJvbUV2ZW50LCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1lcmdlTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGluZGV4SW5wdXRIdG1sIH0gZnJvbSAnLi9kZWZpbmVzL2luZGV4LWlmcmFtZS1hcmVhLmRlZmluZSc7XG5pbXBvcnQgeyBJRm9jdXNBbmRCbHVyRXZlbnQsIElJZnJhbWVUZXh0YXJlYUN1c3RvbVN0eWxlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ZvY3VzLWFuZC1ibHVyLWV2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLWV2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBUWVBFX0RBVEFfVFlQRV9JTlBVVCwgVFlQRV9JTlBVVCwgVFlQRV9JTlBVVF9SRVNJWkVfTU9ERSwgVFlQRV9NT0RFX0lOUFVULCBUWVBFX1RBR19JTlBVVCB9IGZyb20gJy4vaW50ZXJmYWNlcy9pbnB1dC5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgTmdUZW1wbGF0ZU91dGxldCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zU29ydENvbXBvbmVudF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRpc2FibGVBc2MgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlzYWJsZURlc2MgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaHRtbElmcmFtZUFyZWEgPSBzaWduYWw8U2FmZUh0bWwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBjb3VudERpc3BsYXkgPSBjb21wdXRlZCh0aGlzLmNvdW50RGlzcGxheUNvbXB1dGVkLmJpbmQodGhpcykpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWF4TGVuZ3RoRGlzcGxheSA9IGNvbXB1dGVkKCgpID0+IGAke3ZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSh0aGlzLm1heExlbmd0aCgpIHx8IDAsIGZhbHNlKX1gKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBhZGRpbmdSaWdodEN1c3RvbSA9IHNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpbnB1dElmcmFtZVJlZiA9IHNpZ25hbDxFbGVtZW50UmVmIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaWdub3JlQ29tcG9zaXRpb25FdmVudCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9NQVhfSEVJR0hUX1RFWFRfQVJFQSA9IDI1MDtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGFyRmlyc3RJc1plcm8gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHByZUhlaWdodEFyZWEgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBpZnJhbWVSZWY6IEhUTUxJRnJhbWVFbGVtZW50IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFUZXh0UGFzdGUgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IHRhZ0lucHV0ID0gaW5wdXQ8VFlQRV9UQUdfSU5QVVQsIFRZUEVfVEFHX0lOUFVUIHwgdW5kZWZpbmVkPignaW5wdXQnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAnaW5wdXQnIH0pO1xuICByZWFkb25seSBkYXRhVHlwZSA9IGlucHV0PFRZUEVfREFUQV9UWVBFX0lOUFVULCBUWVBFX0RBVEFfVFlQRV9JTlBVVCB8IHVuZGVmaW5lZD4oJ3N0cmluZycsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgfHwgJ3N0cmluZycgfSk7XG4gIHJlYWRvbmx5IHR5cGVJbnB1dCA9IGlucHV0PFRZUEVfSU5QVVQsIFRZUEVfSU5QVVQgfCB1bmRlZmluZWQ+KCd0ZXh0JywgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCB8fCAndGV4dCcgfSk7XG4gIHJlYWRvbmx5IG1vZGVJbnB1dCA9IGlucHV0PFRZUEVfTU9ERV9JTlBVVCwgVFlQRV9NT0RFX0lOUFVUIHwgdW5kZWZpbmVkPigndGV4dCcsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgfHwgJ3RleHQnIH0pO1xuXG4gIHJlYWRvbmx5IHRhYkluc2VydENvbnRlbnRUYWdJbnB1dCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgdGV4dEFyZWFFbnRlck5vdE5ld0xpbmUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGVtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXIgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IGtlZXBaZXJvSW5UeXBlSW50ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBhdXRvQWRkWmVyb0xlc3NUaGFuMTBJblR5cGVJbnQgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlnbm9yZUJsb2NrSW5wdXRNYXhWYWx1ZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG1heFZhbHVlTnVtYmVyID0gbW9kZWw8bnVtYmVyPigpO1xuICByZWFkb25seSBtaW5WYWx1ZU51bWJlciA9IG1vZGVsPG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgZml4ZWRGbG9hdCA9IG1vZGVsPG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgYWNjZXB0TmVnYXRpdmVWYWx1ZSA9IG1vZGVsPGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgdmFsdWVVcERvd25OdW1iZXIgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZywgc3RyaW5nPignIHctZnVsbCAnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAnIHctZnVsbCAnIH0pO1xuICByZWFkb25seSBtYXhMZW5ndGggPSBtb2RlbDxudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IHJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSBub0JvcmRlciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGJhY2tncm91bmROb25lID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSBib3JkZXJFcnJvciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgdXNlQ29sb3JNb2RlRXhpc3QgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmc+KCcgJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJyAnIH0pO1xuICByZWFkb25seSBrZWVwUGxhY2Vob2xkZXJPbmx5ID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSB2YWx1ZSA9IG1vZGVsPHN0cmluZyB8IG51bWJlcj4oJycpO1xuICByZWFkb25seSBhdXRvUmVtb3ZlRW1vamkgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IGRlZmF1bHRIZWlnaHQgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMzIsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8IDMyIH0pO1xuICByZWFkb25seSBtaW5IZWlnaHRUZXh0QXJlYSA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgbWF4SGVpZ2h0VGV4dEFyZWEgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4odGhpcy5ERUZBVUxUX01BWF9IRUlHSFRfVEVYVF9BUkVBLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCB0aGlzLkRFRkFVTFRfTUFYX0hFSUdIVF9URVhUX0FSRUEgfSk7XG4gIHJlYWRvbmx5IGZvY3VzVGltZU91dCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPig2MDAsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IDYwMCB9KTtcbiAgcmVhZG9ubHkgc2VsZWN0QWxsVGltZU91dCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPig2MDAsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IDYwMCB9KTtcbiAgcmVhZG9ubHkgYmx1clRpbWVPdXQgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMzIsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8IDMyIH0pO1xuICByZWFkb25seSB6SW5kZXhQb3BvdmVyQ29udGVudCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgMTAgfSk7XG4gIHJlYWRvbmx5IGNsYXNzQ29udGFpbmVySW5wdXQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ3ctZnVsbCcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICd3LWZ1bGwnIH0pO1xuICByZWFkb25seSBzaG93Q291bnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHJlc2l6ZSA9IGlucHV0PFRZUEVfSU5QVVRfUkVTSVpFX01PREUsIFRZUEVfSU5QVVRfUkVTSVpFX01PREU+KCd2ZXJ0aWNhbCcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICd2ZXJ0aWNhbCcgfSk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlTGVmdEJvdHRvbUlucHV0ID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+PigpO1xuICByZWFkb25seSB0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXQgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4+KCk7XG4gIHJlYWRvbmx5IGNsYXNzQ29udGFpbmVyQm90dG9tSW5wdXQgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQsIHN0cmluZyB8IHVuZGVmaW5lZD4oJyAnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAnICcgfSk7XG4gIHJlYWRvbmx5IGlnbm9yZVdpZHRoSW5wdXQxMDAgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZnJhbWVUZXh0YXJlYUN1c3RvbVN0eWxlID0gaW5wdXQ8SUlmcmFtZVRleHRhcmVhQ3VzdG9tU3R5bGU+KCk7XG5cbiAgcmVhZG9ubHkgaWNvbkxlZnRDbGFzcyA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJycgfSk7XG4gIHJlYWRvbmx5IHBvcG92ZXJDb250ZW50SWNvbkxlZnQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICcnIH0pO1xuICByZWFkb25seSBpY29uUmlnaHRDbGFzcyA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgcG9wb3ZlckNvbnRlbnRJY29uUmlnaHQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICcnIH0pO1xuICByZWFkb25seSByZXNldEF1dG9Db21wbGV0ZVBhc3N3b3JkID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBhY2NlcHRPbmx5Q2xpY2tJY29uID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSBzZXRJY29uUmlnaHRDb2xvclNhbWVDb2xvckRpc2FibGVSZWFkT25seSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgb25seUFjY2VwdE5lZ2F0aXZlVmFsdWUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IG1heExlbmd0aE51bWJlckNvdW50ID0gbW9kZWw8bnVtYmVyIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBmb2N1c0lucHV0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dEhlaWdodEFyZWFDaGFuZ2UgPSBvdXRwdXQ8eyBpc0NoYW5nZTogYm9vbGVhbjsgaGVpZ2h0OiBudW1iZXIgfT4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgb3V0Rm9jdXNBbmRCbHVyRXZlbnQgPSBvdXRwdXQ8SUZvY3VzQW5kQmx1ckV2ZW50PigpO1xuICByZWFkb25seSBvdXRFbnRlckV2ZW50ID0gb3V0cHV0PElFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0SW5wdXRFdmVudCA9IG91dHB1dDxJRXZlbnQ+KCk7IC8vIGVtaXQgcHVyZSBldmVudCBpbnB1dFxuICByZWFkb25seSBvdXRJY29uTGVmdCA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dEljb25SaWdodCA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dEZpbGVzRHJvcCA9IG91dHB1dDxBcnJheTxGaWxlPj4oKTtcbiAgcmVhZG9ubHkgb3V0RmlsZURyb3AgPSBvdXRwdXQ8RmlsZT4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdlVmFsdWVCeUJ1dHRvblVwRG93biA9IG91dHB1dDx2b2lkPigpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcHJvdGVjdGVkIGlucHV0UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdpbnB1dFJlZicpO1xuICBwcm90ZWN0ZWQgdGV4dENvdW50UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCd0ZXh0Q291bnRSZWYnKTtcbiAgcHJvdGVjdGVkIGVsZW1lbnRSaWdodFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignZWxlbWVudFJpZ2h0UmVmJyk7XG5cbiAgLy8gI3JlZ2lvbiBJTkpFQ1RcbiAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1Byb2plY3RTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUNvbmZpZ1Byb2plY3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSgpKSB7XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUuc2V0KHRydWUpKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5FbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHRoaXMuRWxlbWVudC52YWx1ZSAhPT0gdGhpcy52YWx1ZSgpKSB7XG4gICAgICAgICAgdW50cmFja2VkKCgpID0+IHRoaXMuaW5pdCgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLnVwZGF0ZU1heExlbmd0aE1pbk1heFZhbHVlQnlEYXRhVHlwZSgpKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZVZhbHVlQnlEYXRhVHlwZSh0aGlzLkVsZW1lbnQudmFsdWUpO1xuXG4gICAgICBpZiAoKHRoaXMuRWxlbWVudC52YWx1ZSAhPT0gJycgJiYgdmFsdWUgPT09IHRoaXMudmFsdWUoKSkgfHwgKHRoaXMuRWxlbWVudC52YWx1ZSA9PT0gJycgJiYgdGhpcy5lbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyKCkgJiYgdGhpcy52YWx1ZSgpID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLmluaXQoKSk7XG4gICAgfSk7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLkVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5hZnRlclZpZXdJbml0KCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5odG1sSWZyYW1lQXJlYS5zZXQodGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaW5kZXhJbnB1dEh0bWwodGhpcy5pZnJhbWVUZXh0YXJlYUN1c3RvbVN0eWxlKCkgfHwgeyBib3JkZXJDb2xvcjogdGhpcy5ub0JvcmRlcigpID8gJycgOiBgJHt0aGlzLmNvbmZpZ1Byb2plY3RTZXJ2aWNlLmNvbG9yU3RlcENvbnRyYXN0RnJvbU9yaWdpbigyMCk/LmxpZ2h0fWAgfSkpKTtcbiAgfVxuXG4gIGFmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKCF0aGlzLkVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRIZWlnaHRBcmVhQ2hhbmdlLmVtaXQoeyBpc0NoYW5nZTogZmFsc2UsIGhlaWdodDogdGhpcy5FbGVtZW50Py5zY3JvbGxIZWlnaHQgfSk7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQodGhpcy5GdW5jdGlvbnNDb250cm9sKTtcbiAgICB0aGlzLmluaXQoKTtcblxuICAgIHRoaXMuaW5pdEV2ZW50KCdmb2N1cycsIHRoaXMuaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKSkuc3Vic2NyaWJlKChlOiBJRXZlbnQpID0+IHRoaXMub3V0Rm9jdXNBbmRCbHVyRXZlbnQuZW1pdCh7IG5hbWU6ICdmb2N1cycsIGV2ZW50OiBlIH0pKTtcbiAgICB0aGlzLmluaXRFdmVudCgnYmx1cicsIHRoaXMuaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKSkuc3Vic2NyaWJlKChlOiBJRXZlbnQpID0+IHRoaXMub3V0Rm9jdXNBbmRCbHVyRXZlbnQuZW1pdCh7IG5hbWU6ICdibHVyJywgZXZlbnQ6IGUgfSkpO1xuICAgIGNvbnN0IG1vdXNlRG93bkV2ZW50ID0gdGhpcy5pbml0RXZlbnQoJ21vdXNlZG93bicsIHRoaXMuaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKSkucGlwZSh0YWtlKDEpKTtcbiAgICBjb25zdCBrZXlEb3duRXZlbnQgPSB0aGlzLmluaXRFdmVudCgna2V5ZG93bicsIHRoaXMuaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKSk7XG4gICAgY29uc3QgaW5wdXRFdmVudCA9IHRoaXMuaW5pdEV2ZW50KCdpbnB1dCcsIHRoaXMuaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKSk7XG4gICAgY29uc3QgY3V0RXZlbnQgPSB0aGlzLmluaXRFdmVudCgnY3V0JywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKTtcbiAgICBjb25zdCBwYXN0ZUV2ZW50ID0gdGhpcy5pbml0RXZlbnQoJ3Bhc3RlJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKTtcbiAgICBjb25zdCBrZXl1cEV2ZW50ID0gdGhpcy5pbml0RXZlbnQoJ2tleXVwJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKTtcblxuICAgIHRoaXMuaW5pdEV2ZW50KCdjbGljaycsIHRoaXMuaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKSA/PyB0cnVlKS5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmluaXRFdmVudCgnZHJhZ292ZXInLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChldmVudDogSUV2ZW50KSA9PiB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JztcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmluaXRFdmVudCgnZHJvcCcsIHRoaXMuaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKSkuc3Vic2NyaWJlKHRoaXMuY2hlY2tBbmRFbWl0RmlsZXMuYmluZCh0aGlzKSk7XG4gICAgcGFzdGVFdmVudC5zdWJzY3JpYmUodGhpcy5jaGVja0FuZEVtaXRGaWxlcy5iaW5kKHRoaXMpKTtcblxuICAgIHRoaXMuY29tYmluZU9ic2VydmFibGUobW91c2VEb3duRXZlbnQsIHBhc3RlRXZlbnQpO1xuICAgIHRoaXMuY29tYmluZU9ic2VydmFibGUobW91c2VEb3duRXZlbnQsIGN1dEV2ZW50KTtcbiAgICBrZXlEb3duRXZlbnRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YXAoKGU6IElFdmVudCkgPT4gdGhpcy5jaGVja1R5cGVOdW1iZXIoZSwgJ2tleScpKSxcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gaW5wdXRFdmVudCksXG4gICAgICAgIHRhcCgoZTogSUV2ZW50KSA9PiB0aGlzLmNoZWNrVHlwZU51bWJlcihlLCAnZGF0YScpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZTogSUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuaWdub3JlQ29tcG9zaXRpb25FdmVudC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmlnbm9yZUNvbXBvc2l0aW9uRXZlbnQuY29tcGxldGUoKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ3N0cmluZycgJiYgdGhpcy5tYXhMZW5ndGgoKSAmJiAoZS5pbnB1dFR5cGUgPT09ICdpbnNlcnRDb21wb3NpdGlvblRleHQnIHx8IGUuaW5wdXRUeXBlID09PSAnaW5zZXJ0VGV4dCcpICYmIGUudGFyZ2V0LnZhbHVlPy5sZW5ndGggPiAodGhpcy5tYXhMZW5ndGgoKSB8fCAwKSkge1xuICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gZS50YXJnZXQudmFsdWUuc2xpY2UoMCwgdGhpcy5tYXhMZW5ndGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzRXZlbnRBbmRFbWl0VmFsdWUoZSk7XG4gICAgICB9KTtcblxuICAgIG1lcmdlKGZyb21FdmVudDxJRXZlbnQ+KHRoaXMuRWxlbWVudCwgJ2NvbXBvc2l0aW9uc3RhcnQnKSwgZnJvbUV2ZW50PElFdmVudD4odGhpcy5FbGVtZW50LCAnY29tcG9zaXRpb25lbmQnKSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmlnbm9yZUNvbXBvc2l0aW9uRXZlbnQpLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShlKTtcbiAgICAgIH0pO1xuXG4gICAga2V5dXBFdmVudFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZlbnQ6IElFdmVudCkgPT4gZXZlbnQua2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuRU5URVIpLFxuICAgICAgICBmaWx0ZXIoKGV2ZW50OiBJRXZlbnQpID0+ICF0aGlzLnRleHRBcmVhRW50ZXJOb3ROZXdMaW5lKCkgfHwgKHRoaXMudGV4dEFyZWFFbnRlck5vdE5ld0xpbmUoKSAmJiAhZXZlbnQuc2hpZnRLZXkpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IElFdmVudCkgPT4gdGhpcy5vdXRFbnRlckV2ZW50LmVtaXQoZXZlbnQpKTtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdzdHJpbmcnICYmICh0aGlzLnRhZ0lucHV0KCkgIT09ICdpbnB1dCcgfHwgKHRoaXMudGFnSW5wdXQoKSA9PT0gJ2lucHV0JyAmJiB0aGlzLnRhYkluc2VydENvbnRlbnRUYWdJbnB1dCgpKSkpIHtcbiAgICAgIGtleURvd25FdmVudFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBJRXZlbnQpID0+IGV2ZW50LmtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LlRBQiksXG4gICAgICAgICAgdGFwKChldmVudDogSUV2ZW50KSA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKSxcbiAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBJRXZlbnQpID0+ICFldmVudC50YXJnZXQudmFsdWUgfHwgIXRoaXMubWF4TGVuZ3RoKCkgfHwgZXZlbnQudGFyZ2V0LnZhbHVlLmxlbmd0aCA8ICh0aGlzLm1heExlbmd0aCgpIHx8IDI1KSksXG4gICAgICAgICAgdGFwKChldmVudDogSUV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkb25seSgpIHx8IHRoaXMuZGlzYWJsZSgpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW5zZXRWYWx1ZVRvU2VsZWN0aW9uU3RhcnQoJ1xcdCcsIGV2ZW50KTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0QXJlYUVudGVyTm90TmV3TGluZSgpKSB7XG4gICAgICBrZXlEb3duRXZlbnRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKChldmVudDogSUV2ZW50KSA9PiBldmVudC5rZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5FTlRFUiAmJiAhZXZlbnQuc2hpZnRLZXkpLFxuICAgICAgICAgIHRhcCgoZTogSUV2ZW50KSA9PiBlLnByZXZlbnREZWZhdWx0KCkpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMuY291bnREaXNwbGF5Q29tcHV0ZWQoKTtcbiAgfVxuXG4gIC8vICNyZWdpb24gRlVOQ1RJT05TXG4gIHB1YmxpYyBnZXQgRnVuY3Rpb25zQ29udHJvbCgpOiBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvY3VzOiB0aGlzLmZvY3VzLmJpbmQodGhpcyksXG4gICAgICBibHVyOiB0aGlzLmJsdXIuYmluZCh0aGlzKSxcbiAgICAgIGluc2VydENvbnRlbnQ6IHRoaXMuYWRkRGF0YVRvU2VsZWN0aW9uSW5wdXQuYmluZCh0aGlzKSxcbiAgICAgIHJlc2V0VmFsdWU6IHRoaXMucmVzZXRWYWx1ZS5iaW5kKHRoaXMpLFxuICAgICAgZ2V0RWxlbWVudFZhbHVlOiB0aGlzLmdldEVsZW1lbnRWYWx1ZS5iaW5kKHRoaXMpLFxuICAgICAgY2hlY2tBbmREaXNhYmxlVXBEb3duQnV0dG9uOiB0aGlzLmNoZWNrQW5kRGlzYWJsZVVwRG93bkJ1dHRvbi5iaW5kKHRoaXMpLFxuICAgICAgc2VsZWN0QWxsQ29udGVudDogdGhpcy5zZWxlY3RBbGxDb250ZW50LmJpbmQodGhpcyksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWF4TGVuZ3RoTWluTWF4VmFsdWVCeURhdGFUeXBlKCkge1xuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdpbnQnIHx8IHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgdGhpcy5tYXhMZW5ndGgudXBkYXRlKCh2YWx1ZSkgPT4ge1xuICAgICAgICByZXR1cm4gIXZhbHVlIHx8IHZhbHVlID4gMjEgPyAyMSA6IHZhbHVlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm1pblZhbHVlTnVtYmVyLnVwZGF0ZSgodmFsdWUpID0+IHZhbHVlID8/IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKTtcbiAgICAgIHRoaXMubWF4VmFsdWVOdW1iZXIudXBkYXRlKCh2YWx1ZSkgPT4gdmFsdWUgPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50Jykge1xuICAgICAgdGhpcy5tYXhMZW5ndGgudXBkYXRlKCh2YWx1ZSkgPT4gKCF2YWx1ZSB8fCB2YWx1ZSA+IDI1ID8gMjUgOiB2YWx1ZSkpO1xuICAgICAgdGhpcy5maXhlZEZsb2F0LnVwZGF0ZSgodmFsdWUpID0+IHZhbHVlID8/IDQpO1xuICAgICAgdGhpcy5tYXhMZW5ndGhOdW1iZXJDb3VudC51cGRhdGUoKHZhbHVlKSA9PiB2YWx1ZSA/PyAxOSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRFbGVtZW50VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuRWxlbWVudD8udmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQW5kRW1pdEZpbGVzKGV2ZW50OiBJRXZlbnQpIHtcbiAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXMgfHwgZXZlbnQuY2xpcGJvYXJkRGF0YT8uZmlsZXM7XG4gICAgY29uc3QgdGV4dCA9IChldmVudC5jbGlwYm9hcmREYXRhIHx8ICh3aW5kb3cgYXMgYW55KS5jbGlwYm9hcmREYXRhKT8uZ2V0RGF0YSgndGV4dCcpO1xuXG4gICAgdGhpcy5kYXRhVGV4dFBhc3RlLnNldCh0ZXh0KTtcbiAgICBpZiAoIWZpbGVzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBmaWxlTGlzdCA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIEFycmF5LmZyb20oZmlsZXMpKSB7XG4gICAgICBpZiAoaXNUeXBlRmlsZShmaWxlKSkge1xuICAgICAgICB0aGlzLm91dEZpbGVEcm9wLmVtaXQoZmlsZSk7XG4gICAgICAgIGZpbGVMaXN0LnB1c2goZmlsZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub3V0RmlsZXNEcm9wLmVtaXQoZmlsZUxpc3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnNldFZhbHVlVG9TZWxlY3Rpb25TdGFydCh0ZXh0OiBzdHJpbmcsIGV2ZW50OiBJRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuRWxlbWVudC5zZXRSYW5nZVRleHQodGV4dCwgdGhpcy5FbGVtZW50LnNlbGVjdGlvblN0YXJ0LCB0aGlzLkVsZW1lbnQuc2VsZWN0aW9uU3RhcnQsICdlbmQnKTtcbiAgICB0aGlzLnByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmlucHV0SWZyYW1lUmVmKCk/Lm5hdGl2ZUVsZW1lbnQgfHwgdGhpcy5pbnB1dFJlZigpPy5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VWYWx1ZShkYXRhOiBJU29ydCkge1xuICAgIGRhdGEucmVzZXQoKTtcbiAgICBpZiAodGhpcy5kaXNhYmxlKCkgfHwgdGhpcy5yZWFkb25seSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9wZXJhdG9yID0gZGF0YS5tb2RlID09PSAnYXNjJyA/IDEgOiAtMTtcbiAgICBsZXQgdmFsdWUgPSArdGhpcy52YWx1ZSgpIHx8IDA7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gVXRpbHNDYWNoZS5nZXRMYW5nKCkgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVkkgPyAnLicgOiAnLCc7XG4gICAgY29uc3Qgc3BsaXRWYWx1ZSA9ICh0aGlzLnZhbHVlKCkgfHwgdGhpcy5taW5WYWx1ZU51bWJlcigpIHx8IDApLnRvU3RyaW5nKCkuc3BsaXQoc2VwYXJhdG9yKTtcbiAgICBjb25zdCBkYXRhQmVoaW5kU2VwYXJhdG9yID0gc3BsaXRWYWx1ZT8uWzFdO1xuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgIHZhbHVlID0gKyhzcGxpdFZhbHVlPy5bMF0gfHwgMCk7XG4gICAgfVxuICAgIHZhbHVlID0gdmFsdWUgKyAodGhpcy52YWx1ZVVwRG93bk51bWJlcigpID8/IDEpICogb3BlcmF0b3I7XG4gICAgaWYgKCF0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiB2YWx1ZSA8IDApIHtcbiAgICAgIHZhbHVlID0gMDtcbiAgICB9XG4gICAgY29uc3Qgc2VwYXJhdG9yU3RyID0gZGF0YUJlaGluZFNlcGFyYXRvciA/IHNlcGFyYXRvciA6ICcnO1xuICAgIGNvbnN0IGRhdGFFbWl0ID0gdGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50JyA/IGAke3ZhbHVlfSR7c2VwYXJhdG9yU3RyfSR7ZGF0YUJlaGluZFNlcGFyYXRvcn1gIDogdmFsdWU7XG4gICAgdGhpcy52YWx1ZS5zZXQoZGF0YUVtaXQpO1xuICAgIHRoaXMub3V0Q2hhbmdlLmVtaXQoZGF0YUVtaXQpO1xuICAgIHRoaXMub3V0Q2hhbmdlVmFsdWVCeUJ1dHRvblVwRG93bi5lbWl0KCk7XG4gICAgdGhpcy5jaGVja0FuZERpc2FibGVVcERvd25CdXR0b24odmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJFdmVudEljb25MZWZ0KGU6IEV2ZW50LCBldmVudE5hbWU6IHN0cmluZykge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCh0aGlzLmRpc2FibGUoKSB8fCB0aGlzLnJlYWRvbmx5KCkpICYmICF0aGlzLmFjY2VwdE9ubHlDbGlja0ljb24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm91dEljb25MZWZ0LmVtaXQoZXZlbnROYW1lKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRXZlbnRJY29uUmlnaHQoZTogRXZlbnQsIGV2ZW50TmFtZTogc3RyaW5nKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoKHRoaXMuZGlzYWJsZSgpIHx8IHRoaXMucmVhZG9ubHkoKSkgJiYgIXRoaXMuYWNjZXB0T25seUNsaWNrSWNvbigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3V0SWNvblJpZ2h0LmVtaXQoZXZlbnROYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tBbmREaXNhYmxlVXBEb3duQnV0dG9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpICE9PSAnaW50JyAmJiB0aGlzLmRhdGFUeXBlKCkgIT09ICdmbG9hdCcgJiYgdGhpcy5kYXRhVHlwZSgpICE9PSAnYmlnaW50Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRpc2FibGVBc2Muc2V0KGZhbHNlKTtcbiAgICB0aGlzLmRpc2FibGVEZXNjLnNldChmYWxzZSk7XG4gICAgdGhpcy5taW5WYWx1ZU51bWJlci51cGRhdGUoKHZhbHVlKSA9PiB2YWx1ZSA/PyBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUik7XG4gICAgdGhpcy5tYXhWYWx1ZU51bWJlci51cGRhdGUoKHZhbHVlKSA9PiB2YWx1ZSA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XG4gICAgdmFsdWUgPSB2YWx1ZSA/PyAwO1xuXG4gICAgaWYgKCFpc05pbCh0aGlzLm1heFZhbHVlTnVtYmVyKCkpICYmIHZhbHVlID49ICh0aGlzLm1heFZhbHVlTnVtYmVyKCkgPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKSB7XG4gICAgICB0aGlzLmRpc2FibGVBc2Muc2V0KHRydWUpO1xuICAgIH1cblxuICAgIGlmICghaXNOaWwodGhpcy5taW5WYWx1ZU51bWJlcigpKSAmJiB2YWx1ZSA8PSAodGhpcy5taW5WYWx1ZU51bWJlcigpIHx8IDApKSB7XG4gICAgICB0aGlzLmRpc2FibGVEZXNjLnNldCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdEV2ZW50KGV2ZW50TmFtZTogc3RyaW5nLCBpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudD86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPElFdmVudD4ge1xuICAgIHJldHVybiBmcm9tRXZlbnQ8SUV2ZW50Pih0aGlzLkVsZW1lbnQsIGV2ZW50TmFtZSkucGlwZShcbiAgICAgIHRhcCgoZTogSUV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQpIHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3V0SW5wdXRFdmVudC5lbWl0KGUpO1xuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgJiYgdGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50Jykge1xuICAgICAgY29uc3Qgc2VwYXJhdG9yID0gVXRpbHNDYWNoZS5nZXRMYW5nKCkgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVkkgPyAnLicgOiAnLCc7XG4gICAgICBsZXQgW2ludCwgZGVjaW1hbF0gPSB2YWx1ZS5zcGxpdChzZXBhcmF0b3IpO1xuICAgICAgY29uc3QgZGVjaW1hbFNwbGl0ID0gZGVjaW1hbCA/IGRlY2ltYWwuc3BsaXQoJycpIDogW107XG4gICAgICBjb25zdCBkZWNpbWFsRXZlcnlaZXJvID0gZGVjaW1hbFNwbGl0LmV2ZXJ5KChpdGVtKSA9PiBpdGVtID09PSAnMCcpO1xuXG4gICAgICBpZiAoaW50ID09PSAnLTAnICYmICghZGVjaW1hbCB8fCBkZWNpbWFsRXZlcnlaZXJvKSkge1xuICAgICAgICBpbnQgPSAnMCc7XG4gICAgICB9XG4gICAgICBpZiAoIWRlY2ltYWwgfHwgZGVjaW1hbEV2ZXJ5WmVybykge1xuICAgICAgICBkZWNpbWFsID0gJzAnO1xuICAgICAgfVxuICAgICAgaWYgKGRlY2ltYWxTcGxpdC5zb21lKChpdGVtKSA9PiBpdGVtICE9PSAnMCcpKSB7XG4gICAgICAgIGRlY2ltYWxTcGxpdC5yZXZlcnNlKCk7XG4gICAgICAgIGNvbnN0IGRlY2ltYWxSZXZlcnNlID0gZGVjaW1hbFNwbGl0LmpvaW4oJycpO1xuXG4gICAgICAgIGRlY2ltYWwgPSBkZWNpbWFsUmV2ZXJzZS5yZXBsYWNlKC8oXjArKS8sICcnKS5zcGxpdCgnJykucmV2ZXJzZSgpLmpvaW4oJycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7aW50fSR7c2VwYXJhdG9yfSR7ZGVjaW1hbH1gO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdCgpIHtcbiAgICBpZiAoIXRoaXMubWF4TGVuZ3RoKCkpIHtcbiAgICAgIHRoaXMudXBkYXRlTWF4TGVuZ3RoTWluTWF4VmFsdWVCeURhdGFUeXBlKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5FbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBlbGVtZW50VmFsdWUgPSB0aGlzLmNvbnZlcnRWYWx1ZShgJHt0aGlzLnZhbHVlKCkgPz8gJyd9YCk7XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpICE9PSAnc3RyaW5nJykge1xuICAgICAgZWxlbWVudFZhbHVlID0gZWxlbWVudFZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cChgW14wLTkuLCR7dGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgPyAnLScgOiAnJ31dYCwgJ2cnKSwgJycpO1xuICAgICAgaWYgKFV0aWxzQ2FjaGUuZ2V0TGFuZygpID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLkVOKSB7XG4gICAgICAgIGVsZW1lbnRWYWx1ZSA9IGVsZW1lbnRWYWx1ZS5yZXBsYWNlKC8sLywgJycpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLkVsZW1lbnQudmFsdWUgPSBlbGVtZW50VmFsdWU7XG5cbiAgICBjb25zdCBldmVudEZha2U6IElFdmVudEN1c3RvbSA9IHtcbiAgICAgIHByZXZlbnREZWZhdWx0OiAoKSA9PiB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0sXG4gICAgICB0YXJnZXQ6IHRoaXMuRWxlbWVudCxcbiAgICAgIGRhdGE6IGVsZW1lbnRWYWx1ZSxcbiAgICAgIGZha2VFdmVudDogdHJ1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5jaGVja1R5cGVOdW1iZXIoZXZlbnRGYWtlLCAnZGF0YScpO1xuICAgIHRoaXMucHJvY2Vzc0V2ZW50QW5kRW1pdFZhbHVlKGV2ZW50RmFrZSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShlOiBJRXZlbnQgfCBJRXZlbnRDdXN0b20pOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZTogYW55ID0gdGhpcy5wYXJzZVZhbHVlQnlEYXRhVHlwZShlLnRhcmdldC52YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpICE9PSAnc3RyaW5nJyAmJiAhdGhpcy5pZ25vcmVCbG9ja0lucHV0TWF4VmFsdWUoKSAmJiAhaXNOaWwodGhpcy5tYXhWYWx1ZU51bWJlcigpKSAmJiB2YWx1ZSA+ICh0aGlzLm1heFZhbHVlTnVtYmVyKCkgfHwgMCkgJiYgdGhpcy52YWx1ZSgpIDwgdmFsdWUpIHtcbiAgICAgIGNvbnN0IHZhbHVlRGlzcGxheSA9IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZShgJHt0aGlzLnZhbHVlKCl9YC5yZXBsYWNlKC9cXC4vZywgJywnKSwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksIHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KTtcblxuICAgICAgZS50YXJnZXQudmFsdWUgPSBgJHt0aGlzLmdldENoZWNrWmVybygrdmFsdWVEaXNwbGF5LCBlLnRhcmdldC52YWx1ZSl9JHt2YWx1ZURpc3BsYXl9YDtcblxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0V2ZW50QW5kRW1pdFZhbHVlKGUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpICE9PSAnc3RyaW5nJyAmJiBpc05pbCh2YWx1ZSkpIHtcbiAgICAgIGUudGFyZ2V0LnZhbHVlID0gMDtcblxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0V2ZW50QW5kRW1pdFZhbHVlKGUpO1xuICAgIH1cblxuICAgIGlmIChlLmZha2VFdmVudCAmJiAoYCR7dGhpcy52YWx1ZSgpID8/ICcnfWAgPT09IGAke3ZhbHVlfWAgfHwgKHRoaXMuZW1pdEVtcHR5SW5EYXRhVHlwZU51bWJlcigpICYmIGUudGFyZ2V0LnZhbHVlLnRyaW0oKSA9PT0gJycpKSkge1xuICAgICAgdGhpcy5jaGVja0FuZERpc2FibGVVcERvd25CdXR0b24odGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50JyA/IHZhbHVlIDogK3ZhbHVlKTtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRvckhlaWdodFRleHRBcmVhKGUpO1xuICAgICAgfSwgMjUwKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlLnNldCh2YWx1ZSk7XG4gICAgaWYgKHRoaXMuZW1pdEVtcHR5SW5EYXRhVHlwZU51bWJlcigpICYmIGUudGFyZ2V0LnZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIGNvbnN0IGRhdGFFbWl0ID0gdGhpcy5kYXRhVHlwZSgpID09PSAnc3RyaW5nJyA/ICcnIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy52YWx1ZS5zZXQoZGF0YUVtaXQgYXMgYW55KTtcbiAgICB9XG4gICAgdGhpcy5vdXRDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKCkpO1xuICAgIHRoaXMuY2hlY2tBbmREaXNhYmxlVXBEb3duQnV0dG9uKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcgPyB2YWx1ZSA6ICt2YWx1ZSk7XG4gICAgdGhpcy5jYWxjdWxhdG9ySGVpZ2h0VGV4dEFyZWEoZSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrTWF4TGVuZ3RoTnVtYmVyQW5kU2V0VmFsdWUodmFsdWVEaXNwbGF5OiBzdHJpbmcsIGU6IElFdmVudCB8IElFdmVudEN1c3RvbSk6IGJvb2xlYW4ge1xuICAgIGlmIChpc05pbCh0aGlzLnZhbHVlKCkpIHx8ICgrdGhpcy52YWx1ZSgpID4gMCAmJiB0aGlzLnBhcnNlVmFsdWVCeURhdGFUeXBlKHZhbHVlRGlzcGxheSkgPCB0aGlzLnZhbHVlKCkpIHx8ICgrdGhpcy52YWx1ZSgpIDwgMCAmJiB0aGlzLnBhcnNlVmFsdWVCeURhdGFUeXBlKHZhbHVlRGlzcGxheSkgPiB0aGlzLnZhbHVlKCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlQ29tcGFyZSA9IGZvcm1hdE51bWJlcih2YWx1ZURpc3BsYXkpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgbnVtYmVycyA9IHZhbHVlQ29tcGFyZS5zcGxpdCgnLicpO1xuICAgIGxldCBsZW5ndGhWYWx1ZUNvbXBhcmUgPSAwO1xuICAgIGxldCBtYXhMZW5ndGggPSB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiB0eXBlb2YgK3RoaXMudmFsdWUoKSA9PT0gJ251bWJlcicgJiYgK3RoaXMudmFsdWUoKSA8IDAgPyAodGhpcy5tYXhMZW5ndGgoKSB8fCAyMSkgKyAxIDogdGhpcy5tYXhMZW5ndGgoKSB8fCAyMTtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdmbG9hdCcpIHtcbiAgICAgIG1heExlbmd0aC0tO1xuICAgIH1cbiAgICBpZiAobnVtYmVycz8uWzBdKSB7XG4gICAgICBsZW5ndGhWYWx1ZUNvbXBhcmUgPSB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UoYCR7bnVtYmVyc1swXX1gLnJlcGxhY2UoL1xcLi9nLCAnLCcpLCB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSwgdGhpcy5maXhlZEZsb2F0KCkgPz8gMTQpLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKG51bWJlcnM/LlsxXSkge1xuICAgICAgbGVuZ3RoVmFsdWVDb21wYXJlICs9IDEgKyBudW1iZXJzWzFdLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKG1heExlbmd0aCAmJiBsZW5ndGhWYWx1ZUNvbXBhcmUgPj0gbWF4TGVuZ3RoKSB7XG4gICAgICBjb25zdCB2YWx1ZURpc3BsYXkgPSB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UoKGxlbmd0aFZhbHVlQ29tcGFyZSA9PT0gbWF4TGVuZ3RoID8gdmFsdWVDb21wYXJlIDogYCR7dGhpcy52YWx1ZSgpfWApLnJlcGxhY2UoL1xcLi9nLCAnLCcpLCB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSwgdGhpcy5maXhlZEZsb2F0KCkgPz8gMTQpO1xuXG4gICAgICBlLnRhcmdldC52YWx1ZSA9IGAke3RoaXMuZ2V0Q2hlY2taZXJvKCt2YWx1ZURpc3BsYXksIGUudGFyZ2V0LnZhbHVlKX0ke3ZhbHVlRGlzcGxheX1gO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrVHlwZU51bWJlcihlOiBJRXZlbnQgfCBJRXZlbnRDdXN0b20sIGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgY3VycmVudExhbmcgPSBVdGlsc0NhY2hlLmdldExhbmcoKTtcbiAgICBjb25zdCBzZXBhcmF0b3IgPSBjdXJyZW50TGFuZyA9PT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5WSSA/ICcuJyA6ICcsJztcbiAgICBjb25zdCBzZXBhcmF0b3JSZXZlcnQgPSBjdXJyZW50TGFuZyA9PT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5WSSA/ICcsJyA6ICcuJztcbiAgICBsZXQgdmFsdWVUYXJnZXQ6IElTdHJpbmcgPSBlLnRhcmdldC52YWx1ZTtcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0IC0gMTtcbiAgICBjb25zdCB7IGRhdGEsIGtleUNvZGUgfSA9IGU7XG5cbiAgICB0aGlzLmNoYXJGaXJzdElzWmVyby5zZXQoZmFsc2UpO1xuICAgIGlmICh2YWx1ZVRhcmdldC5zdGFydHNXaXRoKCcwJykpIHtcbiAgICAgIHRoaXMuY2hhckZpcnN0SXNaZXJvLnNldCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHRoaXMuYXV0b1JlbW92ZUVtb2ppKCkpIHtcbiAgICAgICAgZS50YXJnZXQudmFsdWUgPSByZW1vdmVFbW9qaSh2YWx1ZVRhcmdldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKC9cXGQvZy50ZXN0KGRhdGEpICYmIHZhbHVlVGFyZ2V0LmNoYXJBdChzZWxlY3Rpb25TdGFydCArIDEpID09PSAnLScpIHtcbiAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZUF0KDAsICcnKSBhcyBJU3RyaW5nO1xuICAgIH1cbiAgICBsZXQgc3RyUmVnZXggPSBgW14wLTkuLCR7dGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgPyAnLScgOiAnJ31dYDtcblxuICAgIGlmIChuZXcgUmVnRXhwKHN0clJlZ2V4LCAnZ2knKS50ZXN0KChlIGFzIGFueSlbZmllbGROYW1lXSkgJiYga2V5Q29kZSAhPT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuQkFDS1NQQUNFKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnRhcmdldC52YWx1ZSA9IHZhbHVlVGFyZ2V0ID0gZS50YXJnZXQudmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKHN0clJlZ2V4LCAnZ2knKSwgJycpIGFzIElTdHJpbmc7XG4gICAgfVxuICAgIGlmICghZS5mYWtlRXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZGF0YSkge1xuICAgICAgICBjYXNlIHNlcGFyYXRvcjpcbiAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2UobmV3IFJlZ0V4cChgWyR7c2VwYXJhdG9yfV1gLCAnZ2knKSwgJycpIGFzIElTdHJpbmc7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBzZXBhcmF0b3JSZXZlcnQ6IHtcbiAgICAgICAgICBpZiAoY3VycmVudExhbmcgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVkkgJiYgdGhpcy5kYXRhVHlwZSgpID09PSAnaW50Jykge1xuICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSB2YWx1ZVRhcmdldC5yZXBsYWNlKG5ldyBSZWdFeHAoYFske3NlcGFyYXRvclJldmVydH1dYCwgJ2dpJyksICcnKSBhcyBJU3RyaW5nO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZVRhcmdldCA9PT0gc2VwYXJhdG9yUmV2ZXJ0KSB7XG4gICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9ICcnO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZVRhcmdldCAmJiB2YWx1ZVRhcmdldC5sZW5ndGggPT09IDIgJiYgdmFsdWVUYXJnZXQuc3RhcnRzV2l0aCgnLScpICYmIGRhdGEgJiYgIS9cXGQvZy50ZXN0KGRhdGEpKSB7XG4gICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9ICctJztcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBvY2N1cnJlbmNlc0J5Q2hhcmFjdGVyID0gdmFsdWVUYXJnZXQub2NjdXJyZW5jZXNCeUNoYXJhY3RlcihzZXBhcmF0b3JSZXZlcnQpO1xuXG4gICAgICAgICAgaWYgKG9jY3VycmVuY2VzQnlDaGFyYWN0ZXIgPiAxKSB7XG4gICAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2VBdChlLnRhcmdldC5zZWxlY3Rpb25TdGFydCAtIDEsICcnKSBhcyBJU3RyaW5nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBtYXhMZW5ndGggPSB0aGlzLmRhdGFUeXBlKCkgPT09ICdmbG9hdCcgPyAodGhpcy5tYXhMZW5ndGgoKSB8fCAyMSkgLSAxIDogdGhpcy5tYXhMZW5ndGgoKSB8fCAyMTtcblxuICAgICAgICAgIGlmICh2YWx1ZVRhcmdldC5pbmRleE9mKCctJykgPj0gMCkge1xuICAgICAgICAgICAgbWF4TGVuZ3RoKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvY2N1cnJlbmNlc0J5Q2hhcmFjdGVyID09PSAxICYmIHZhbHVlVGFyZ2V0Lmxlbmd0aCA9PT0gbWF4TGVuZ3RoICYmIHZhbHVlVGFyZ2V0LmluZGV4T2Yoc2VwYXJhdG9yUmV2ZXJ0KSA9PT0gdmFsdWVUYXJnZXQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlQXQoZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQgLSAxLCAnJykgYXMgSVN0cmluZztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5vbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmIHZhbHVlVGFyZ2V0ID09PSBgMCR7c2VwYXJhdG9yUmV2ZXJ0fWApIHtcbiAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gJzAnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHZhbHVlQmVmb3JlRm9ybWF0ID0gZS50YXJnZXQudmFsdWU7XG4gICAgICAgICAgY29uc3QgdmFsdWVBZnRlckZvcm1hdCA9IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZShlLnRhcmdldC52YWx1ZSwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksIHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KTtcbiAgICAgICAgICBpZiAodmFsdWVCZWZvcmVGb3JtYXQgPT09IHZhbHVlQWZ0ZXJGb3JtYXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZS50YXJnZXQudmFsdWUgPSB2YWx1ZUFmdGVyRm9ybWF0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YWx1ZVRhcmdldCA9IGZvcm1hdE51bWJlcih2YWx1ZVRhcmdldCkgYXMgSVN0cmluZztcbiAgICB9XG4gICAgY29uc3QgaW5kZXhlc09mRGFzaCA9IHZhbHVlVGFyZ2V0LmluZGV4ZXNPZkNoYXJhY3Rlcj8uKCctJykgfHwgW107XG5cbiAgICBpZiAoaW5kZXhlc09mRGFzaC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IFtmaXJzdEluZGV4LCBzZWNvbmRJbmRleF0gPSBpbmRleGVzT2ZEYXNoO1xuICAgICAgY29uc3QgaW5kZXhSZXBsYWNlID0gZmlyc3RJbmRleCB8fCBzZWNvbmRJbmRleDsgLy8gZmlyc3RJbmRleD0wIHRow6wga28geMOzYVxuXG4gICAgICBpZiAoaW5kZXhSZXBsYWNlKSB7XG4gICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZUFsbChpbmRleFJlcGxhY2UsICctJywgJycpIGFzIElTdHJpbmc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiB2YWx1ZVRhcmdldCA9PT0gJy0nKSB7XG4gICAgICBlLnRhcmdldC52YWx1ZSA9IHZhbHVlVGFyZ2V0O1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5kYXRhVHlwZSgpKSB7XG4gICAgICBjYXNlICdpbnQnOiB7XG4gICAgICAgIHN0clJlZ2V4ID0gYFteMC05JHt0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSA/ICctJyA6ICcnfV1gO1xuICAgICAgICBpZiAoIWUuZmFrZUV2ZW50KSB7XG4gICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlKG5ldyBSZWdFeHAoc3RyUmVnZXgsICdnaScpLCAnJykgYXMgSVN0cmluZztcbiAgICAgICAgICBjb25zdCBtYXhUb3RhbE51bWJlciA9IHZhbHVlVGFyZ2V0LmluY2x1ZGVzKCctJykgPyAxNyA6IDE2O1xuXG4gICAgICAgICAgaWYgKHZhbHVlVGFyZ2V0Lmxlbmd0aCA+IG1heFRvdGFsTnVtYmVyKSB7XG4gICAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnNsaWNlKDAsIG1heFRvdGFsTnVtYmVyKSBhcyBJU3RyaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoTWF0aC5hYnMocGFyc2VJbnQodmFsdWVUYXJnZXQpKSA+ICh0aGlzLm1heFZhbHVlTnVtYmVyKCkgPz8gOTAwNzE5OTI1NDc0MDk5MSkpIHtcbiAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQuc2xpY2UoMCwgbWF4VG90YWxOdW1iZXIgLSAxKSBhcyBJU3RyaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5vbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmICF2YWx1ZVRhcmdldC5zdGFydHNXaXRoKCctJykgJiYgIXZhbHVlVGFyZ2V0LnN0YXJ0c1dpdGgoJzAnKSkge1xuICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSAnJyBhcyBJU3RyaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsdWVUYXJnZXQgJiYgLyheLSk/KF4wKykvLnRlc3QodmFsdWVUYXJnZXQpKSB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHV1aWQoKTtcblxuICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlKC8oXi0pPyheMCspLywgYCQxJHtpZH1gKS5yZXBsYWNlKGlkLCAnMCcpIGFzIElTdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZVRhcmdldCA9PT0gJy0wJykge1xuICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSAnMCcgYXMgSVN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbHVlVGFyZ2V0ICYmIC8oXjApKFsxLTldKShcXGQrKT8vLnRlc3QodmFsdWVUYXJnZXQpKSB7XG4gICAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2UoLyheMCkoWzEtOV0pKFxcZCspPy8sICckMiQzJykgYXMgSVN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmFsdWVEaXNwbGF5ID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKHZhbHVlVGFyZ2V0LCB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSB8fCBmYWxzZSwgMCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5jaGVja01heExlbmd0aE51bWJlckFuZFNldFZhbHVlKHZhbHVlRGlzcGxheSwgZSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9IGAke3RoaXMuZ2V0Q2hlY2taZXJvKCt2YWx1ZURpc3BsYXksIGUudGFyZ2V0LnZhbHVlKX0ke3ZhbHVlRGlzcGxheX1gO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4T2ZEb3QgPSB2YWx1ZVRhcmdldC5pbmRleE9mKCcuJyk7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZDb21tYSA9IHZhbHVlVGFyZ2V0LmluZGV4T2YoJywnKTtcbiAgICAgICAgbGV0IGluZGV4Q2hvb3NlID0gaW5kZXhPZkRvdDtcblxuICAgICAgICBpZiAoaW5kZXhPZkRvdCA8IDAgfHwgaW5kZXhPZkRvdCA+IGluZGV4T2ZDb21tYSkge1xuICAgICAgICAgIGluZGV4Q2hvb3NlID0gaW5kZXhPZkNvbW1hO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleENob29zZSA+PSAwKSB7XG4gICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5zdWJzdHJpbmcoMCwgaW5kZXhDaG9vc2UpIGFzIElTdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVEaXNwbGF5ID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKHZhbHVlVGFyZ2V0LCB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSB8fCBmYWxzZSwgMCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hlY2tNYXhMZW5ndGhOdW1iZXJBbmRTZXRWYWx1ZSh2YWx1ZURpc3BsYXksIGUpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZS50YXJnZXQudmFsdWUgPSBgJHt0aGlzLmdldENoZWNrWmVybygrdmFsdWVEaXNwbGF5LCBlLnRhcmdldC52YWx1ZSl9JHt2YWx1ZURpc3BsYXl9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2Zsb2F0JzpcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgICB0aGlzLmdldFZhbHVlRm9ybWF0KGUsIHZhbHVlVGFyZ2V0LCBzZXBhcmF0b3IsIHNlcGFyYXRvclJldmVydCwgY3VycmVudExhbmcpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHZhbHVlVGFyZ2V0ID09PSAnTmFOJykge1xuICAgICAgZS50YXJnZXQudmFsdWUgPSAnJyBhcyBJU3RyaW5nO1xuICAgIH1cbiAgICBpZiAoZS5mYWtlRXZlbnQgfHwgZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbihlLCBzZWxlY3Rpb25TdGFydCArIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZUZvcm1hdChlOiBJRXZlbnQgfCBJRXZlbnRDdXN0b20sIHZhbHVlVGFyZ2V0OiBJU3RyaW5nLCBzZXBhcmF0b3I6ICcuJyB8ICcsJywgc2VwYXJhdG9yUmV2ZXJ0OiAnLicgfCAnLCcsIGN1cnJlbnRMYW5nOiBzdHJpbmcpIHtcbiAgICBsZXQgc3RyUmVnZXggPSBgW14wLTkke3NlcGFyYXRvcn0ke2N1cnJlbnRMYW5nID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLkVOID8gJy4nIDogJyd9JHt0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSA/ICctJyA6ICcnfV1gO1xuXG4gICAgaWYgKCFlLmZha2VFdmVudCkge1xuICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlKG5ldyBSZWdFeHAoc3RyUmVnZXgsICdnaScpLCAnJykgYXMgSVN0cmluZztcbiAgICB9XG4gICAgY29uc3QgaW5kZXhlc09mU2VwYXJhdG9yID0gdmFsdWVUYXJnZXQuaW5kZXhlc09mQ2hhcmFjdGVyKHNlcGFyYXRvcik7XG4gICAgY29uc3QgW2ZpcnN0SW5kZXgsIHNlY29uZEluZGV4XSA9IGluZGV4ZXNPZlNlcGFyYXRvcjtcblxuICAgIGlmIChzZWNvbmRJbmRleCkge1xuICAgICAgdmFsdWVUYXJnZXQgPSBlLnRhcmdldC52YWx1ZS5yZXBsYWNlQWxsKHNlY29uZEluZGV4LCBzZXBhcmF0b3IsICcnKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0SW5kZXggJiYgdmFsdWVUYXJnZXQuc3Vic3RyaW5nKGZpcnN0SW5kZXggKyAxKS5sZW5ndGggPj0gKHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KSkge1xuICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5zdWJzdHJpbmcoMCwgZmlyc3RJbmRleCArICh0aGlzLmZpeGVkRmxvYXQoKSA/PyAxNCkgKyAxKSBhcyBJU3RyaW5nO1xuICAgIH1cbiAgICBzdHJSZWdleCA9IGBbJHtzZXBhcmF0b3J9XWA7XG4gICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlKG5ldyBSZWdFeHAoc3RyUmVnZXgsICdnJyksIHNlcGFyYXRvclJldmVydCkgYXMgSVN0cmluZztcbiAgICBsZXQgdmFsdWVGb3JtYXQgPSAnJztcbiAgICBsZXQgW2ZvbnRTZXBhcmF0b3JOdW1iZXIsIGJlaGluZFNlcGFyYXRvck51bWJlcl0gPSB2YWx1ZVRhcmdldC5zcGxpdChzZXBhcmF0b3JSZXZlcnQpO1xuICAgIGxldCBtYXhGb250VG90YWxOdW1iZXIgPSBmb250U2VwYXJhdG9yTnVtYmVyPy5pbmNsdWRlcygnLScpID8gMTYgOiAxNTtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnKSB7XG4gICAgICBtYXhGb250VG90YWxOdW1iZXIgPSAodGhpcy5tYXhMZW5ndGhOdW1iZXJDb3VudCgpID8/IDE5KSAtICh0aGlzLmZpeGVkRmxvYXQoKSA/PyA0KSArIChmb250U2VwYXJhdG9yTnVtYmVyLmluY2x1ZGVzKCctJykgPyAxIDogMCk7XG4gICAgfVxuICAgIGNvbnN0IGZvbnRPdmVyTWF4VG90YWxOdW1iZXIgPSBmb250U2VwYXJhdG9yTnVtYmVyICYmIGZvbnRTZXBhcmF0b3JOdW1iZXIubGVuZ3RoID49IG1heEZvbnRUb3RhbE51bWJlcjtcblxuICAgIGlmIChmb250T3Zlck1heFRvdGFsTnVtYmVyKSB7XG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gZm9udFNlcGFyYXRvck51bWJlci5zbGljZSgwLCBtYXhGb250VG90YWxOdW1iZXIpIGFzIElTdHJpbmc7XG4gICAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnZmxvYXQnKSB7XG4gICAgICAgIGJlaGluZFNlcGFyYXRvck51bWJlciA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgICBzd2l0Y2ggKHRoaXMuZGF0YVR5cGUoKSkge1xuICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICBpZiAoIWZvbnRPdmVyTWF4VG90YWxOdW1iZXIgJiYgYmVoaW5kU2VwYXJhdG9yTnVtYmVyPy5sZW5ndGgpIHtcbiAgICAgICAgICBiZWhpbmRTZXBhcmF0b3JOdW1iZXIgPSBiZWhpbmRTZXBhcmF0b3JOdW1iZXIuc2xpY2UoMCwgbWF4Rm9udFRvdGFsTnVtYmVyIC0gZm9udFNlcGFyYXRvck51bWJlci5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGJlaGluZFNlcGFyYXRvck51bWJlciA9IGAke2JlaGluZFNlcGFyYXRvck51bWJlciA/PyAnJ31gO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnYmlnaW50JzpcbiAgICAgICAgaWYgKGJlaGluZFNlcGFyYXRvck51bWJlcj8ubGVuZ3RoICYmIGJlaGluZFNlcGFyYXRvck51bWJlci5sZW5ndGggPiAodGhpcy5maXhlZEZsb2F0KCkgPz8gNCkpIHtcbiAgICAgICAgICBiZWhpbmRTZXBhcmF0b3JOdW1iZXIgPSBiZWhpbmRTZXBhcmF0b3JOdW1iZXIuc2xpY2UoMCwgdGhpcy5maXhlZEZsb2F0KCkgPz8gNCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4T2ZTZXBhcmF0b3JSZXZlcnQgPSB2YWx1ZVRhcmdldC5pbmRleE9mKHNlcGFyYXRvclJldmVydCk7XG5cbiAgICBpZiAodGhpcy5vbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmICFmb250U2VwYXJhdG9yTnVtYmVyLnN0YXJ0c1dpdGgoJy0nKSAmJiAhZm9udFNlcGFyYXRvck51bWJlci5zdGFydHNXaXRoKCcwJykpIHtcbiAgICAgIGZvbnRTZXBhcmF0b3JOdW1iZXIgPSAnJztcbiAgICB9XG4gICAgaWYgKHRoaXMub25seUFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiBpbmRleE9mU2VwYXJhdG9yUmV2ZXJ0ID49IDAgJiYgIWZvbnRTZXBhcmF0b3JOdW1iZXIuc3RhcnRzV2l0aCgnLScpKSB7XG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gJzAnO1xuICAgICAgYmVoaW5kU2VwYXJhdG9yTnVtYmVyID0gdGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50JyA/ICcwJyA6ICcnO1xuICAgIH1cbiAgICBpZiAoZm9udFNlcGFyYXRvck51bWJlciAmJiAvKF4tKSgwKykvLnRlc3QoZm9udFNlcGFyYXRvck51bWJlcikpIHtcbiAgICAgIGNvbnN0IGlkID0gdXVpZCgpO1xuXG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gZm9udFNlcGFyYXRvck51bWJlci5yZXBsYWNlKC8oXi0pKDArKS8sIGAkMSR7aWR9YCkucmVwbGFjZShpZCwgJzAnKTtcbiAgICB9XG4gICAgaWYgKGZvbnRTZXBhcmF0b3JOdW1iZXIgJiYgLyheMCspLy50ZXN0KGZvbnRTZXBhcmF0b3JOdW1iZXIpKSB7XG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gZm9udFNlcGFyYXRvck51bWJlci5yZXBsYWNlKC8oXjArKS8sICcwJyk7XG4gICAgfVxuICAgIGlmICgvKF4tKSgwKykoWzEtOV0pKFtcXGQuXSspPy8udGVzdChmb250U2VwYXJhdG9yTnVtYmVyKSkge1xuICAgICAgZm9udFNlcGFyYXRvck51bWJlciA9IGZvbnRTZXBhcmF0b3JOdW1iZXIucmVwbGFjZSgvKF4tKSgwKykoWzEtOV0pKFtcXGQuXSspPy8sICckMSQzJDQnKTtcbiAgICB9XG4gICAgaWYgKC8oXjArKShbMS05XSkoW1xcZC5dKyk/Ly50ZXN0KGZvbnRTZXBhcmF0b3JOdW1iZXIpKSB7XG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gZm9udFNlcGFyYXRvck51bWJlci5yZXBsYWNlKC8oXjArKShbMS05XSkoW1xcZC5dKyk/LywgJyQyJDMnKTtcbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLmRhdGFUeXBlKCkpIHtcbiAgICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICAgICAgaWYgKC8oXjB7Nn0pLy50ZXN0KGJlaGluZFNlcGFyYXRvck51bWJlcikpIHtcbiAgICAgICAgICBiZWhpbmRTZXBhcmF0b3JOdW1iZXIgPSBiZWhpbmRTZXBhcmF0b3JOdW1iZXIucmVwbGFjZSgvKF4wezZ9KS8sICcwMDAwMCcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgICBpZiAoLyheMHs0fSkvLnRlc3QoYmVoaW5kU2VwYXJhdG9yTnVtYmVyKSkge1xuICAgICAgICAgIGJlaGluZFNlcGFyYXRvck51bWJlciA9IGJlaGluZFNlcGFyYXRvck51bWJlci5yZXBsYWNlKC8oXjB7NH0pLywgJzAwMDAnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKGZvbnRTZXBhcmF0b3JOdW1iZXIpIHtcbiAgICAgIGZvbnRTZXBhcmF0b3JOdW1iZXIgPSB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UoZm9udFNlcGFyYXRvck51bWJlciwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksIHRoaXMuZml4ZWRGbG9hdCgpID8/ICh0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnID8gNCA6IDE0KSk7XG4gICAgfVxuICAgIGNvbnN0IGhhc1NlcGFyYXRvclJldmVydCA9ICh0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnID8gdHJ1ZSA6ICFmb250T3Zlck1heFRvdGFsTnVtYmVyKSAmJiBpbmRleE9mU2VwYXJhdG9yUmV2ZXJ0ID49IDA7XG5cbiAgICB2YWx1ZUZvcm1hdCA9IGAke2ZvbnRTZXBhcmF0b3JOdW1iZXIgPz8gJyd9JHtoYXNTZXBhcmF0b3JSZXZlcnQgPyBzZXBhcmF0b3JSZXZlcnQgOiAnJ30ke2JlaGluZFNlcGFyYXRvck51bWJlciA/PyAnJ31gO1xuICAgIGlmICh2YWx1ZUZvcm1hdCAmJiB0aGlzLm9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgIXZhbHVlRm9ybWF0LnN0YXJ0c1dpdGgoJy0nKSAmJiAhdmFsdWVGb3JtYXQuc3RhcnRzV2l0aCgnMCcpKSB7XG4gICAgICB2YWx1ZUZvcm1hdCA9ICcwJztcbiAgICB9XG4gICAgaWYgKHRoaXMuY2hlY2tNYXhMZW5ndGhOdW1iZXJBbmRTZXRWYWx1ZSh2YWx1ZUZvcm1hdCwgZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZS50YXJnZXQudmFsdWUgPSB2YWx1ZUZvcm1hdCBhcyBJU3RyaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDaGVja1plcm8odmFsdWU6IG51bWJlciwgdGFyZ2V0Q3VycmVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgemVybyA9ICcnO1xuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSAhPT0gJ2ludCcpIHtcbiAgICAgIHJldHVybiB6ZXJvO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoYXJGaXJzdElzWmVybygpICYmIHRoaXMua2VlcFplcm9JblR5cGVJbnQoKSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgICAgemVybyA9ICcwJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGFyRmlyc3RJc1plcm8oKSAmJiB0aGlzLmF1dG9BZGRaZXJvTGVzc1RoYW4xMEluVHlwZUludCgpICYmICgodmFsdWUgPiAwICYmIHZhbHVlIDwgMTAgJiYgIS8oXjApKy8udGVzdChgJHt0YXJnZXRDdXJyZW50fWApKSB8fCAoL14wezIsfSQvLmV4ZWModGFyZ2V0Q3VycmVudCA/PyAnJyk/Lmxlbmd0aCAmJiB2YWx1ZSA9PT0gMCkpKSB7XG4gICAgICB6ZXJvID0gJzAnO1xuICAgIH1cblxuICAgIHJldHVybiB6ZXJvO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYXJldFBvc2l0aW9uKGU6IElFdmVudCB8IElFdmVudEN1c3RvbSwgc2VsZWN0aW9uU3RhcnQ6IG51bWJlcikge1xuICAgIGNvbnN0IHsga2V5Q29kZSwgaW5wdXRUeXBlIH0gPSBlO1xuXG4gICAgaWYgKGtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LlVQX0FSUk9XIHx8IGtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkRPV05fQVJST1cgfHwga2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuTEVGVF9BUlJPVyB8fCBrZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5SSUdIVF9BUlJPVykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZVRhcmdldCA9IGUudGFyZ2V0LnZhbHVlLnJlcGxhY2UoJy0nLCAnJyk7XG4gICAgbGV0IHZhbHVlID0gVXRpbHNDYWNoZS5nZXRMYW5nKCkgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVkkgPyBgJHt0aGlzLnZhbHVlKCkgfHwgMH1gLnJlcGxhY2UoJy4nLCAnLCcpIDogYCR7dGhpcy52YWx1ZSgpIHx8IDB9YDtcblxuICAgIHZhbHVlID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKHZhbHVlLCB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSwgdGhpcy5maXhlZEZsb2F0KCkgPz8gMTQpO1xuICAgIHZhbHVlID0gYCR7dmFsdWV9YC5yZXBsYWNlKCctJywgJycpO1xuXG4gICAgaWYgKHZhbHVlID09PSB2YWx1ZVRhcmdldCAmJiB2YWx1ZSAhPT0gJzAnICYmIHZhbHVlICE9PSAnLScpIHtcbiAgICAgIHNldENhcmV0UG9zaXRpb24odGhpcy5FbGVtZW50LCBzZWxlY3Rpb25TdGFydCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZmFjdG9yID0gMDtcbiAgICBjb25zdCBkaXN0YW5jZSA9IHZhbHVlVGFyZ2V0Lmxlbmd0aCAtIHZhbHVlLmxlbmd0aDtcbiAgICBpZiAoZGlzdGFuY2UgPCAtMSkge1xuICAgICAgZmFjdG9yID0gLTE7XG4gICAgfVxuICAgIGlmIChkaXN0YW5jZSA+IDEpIHtcbiAgICAgIGZhY3RvciA9IDE7XG4gICAgfVxuICAgIHNlbGVjdGlvblN0YXJ0ICs9IGZhY3RvcjtcbiAgICBpZiAoaW5wdXRUeXBlID09PSAnaW5zZXJ0RnJvbVBhc3RlJyAmJiB0aGlzLmRhdGFUZXh0UGFzdGUoKSkge1xuICAgICAgY29uc3QgZGF0YVRleHREaXNwbGF5ID0gYCR7dmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKHRoaXMuZGF0YVRleHRQYXN0ZSgpLCB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSwgdGhpcy5maXhlZEZsb2F0KCkgPz8gMTQpfWA7XG4gICAgICBjb25zdCBpbmRleGVzOiBBcnJheTxudW1iZXI+ID0gZS50YXJnZXQudmFsdWUuaW5kZXhlc0J5U3RyaW5nKGRhdGFUZXh0RGlzcGxheSk7XG5cbiAgICAgIHNlbGVjdGlvblN0YXJ0IC09IGZhY3RvcjtcblxuICAgICAgaWYgKGluZGV4ZXMuc29tZSgoaW5kZXgpID0+IGluZGV4ID09PSBzZWxlY3Rpb25TdGFydCkgfHwgIWluZGV4ZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzZXRDYXJldFBvc2l0aW9uKHRoaXMuRWxlbWVudCwgc2VsZWN0aW9uU3RhcnQpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbmV3U2VsZWN0aW9uU3RhcnQgPSBpbmRleGVzWzBdO1xuXG4gICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGV4ZXMpIHtcbiAgICAgICAgbGV0IHJlcGxhY2VWYWx1ZSA9IGZvcm1hdE51bWJlcihgJHt2YWx1ZVRhcmdldC5zdWJzdHJpbmcoMCwgaW5kZXgpfSR7dmFsdWVUYXJnZXQuc3Vic3RyaW5nKGluZGV4ICsgZGF0YVRleHREaXNwbGF5Lmxlbmd0aCArIDEsIHZhbHVlVGFyZ2V0Lmxlbmd0aCl9YCk7XG5cbiAgICAgICAgcmVwbGFjZVZhbHVlID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKHJlcGxhY2VWYWx1ZSwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksIHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KTtcbiAgICAgICAgaWYgKHZhbHVlID09PSByZXBsYWNlVmFsdWUpIHtcbiAgICAgICAgICBuZXdTZWxlY3Rpb25TdGFydCA9IGluZGV4O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdTZWxlY3Rpb25TdGFydCA+PSAwKSB7XG4gICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gbmV3U2VsZWN0aW9uU3RhcnQgKyBkYXRhVGV4dERpc3BsYXkubGVuZ3RoICsgMTtcblxuICAgICAgICByZXR1cm4gc2V0Q2FyZXRQb3NpdGlvbih0aGlzLkVsZW1lbnQsIHNlbGVjdGlvblN0YXJ0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRDYXJldFBvc2l0aW9uKHRoaXMuRWxlbWVudCwgc2VsZWN0aW9uU3RhcnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVZhbHVlQnlEYXRhVHlwZSh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRoaXMuZGF0YVR5cGUoKSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuXG4gICAgICBjYXNlICdpbnQnOlxuICAgICAgICBpZiAodGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgKHZhbHVlID09PSAnLScgfHwgdmFsdWUgPT09ICcsJyB8fCB2YWx1ZSA9PT0gJy4nKSkge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICtmb3JtYXROdW1iZXIodmFsdWUpO1xuXG4gICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgIGlmICh0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiAodmFsdWUgPT09ICctJyB8fCB2YWx1ZSA9PT0gJywnIHx8IHZhbHVlID09PSAnLicpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCgoK2Zvcm1hdE51bWJlcih2YWx1ZSkpLnRvRml4ZWQodGhpcy5maXhlZEZsb2F0KCkgPz8gMTQpKTtcblxuICAgICAgY2FzZSAnYmlnaW50JzpcbiAgICAgICAgaWYgKHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmICh2YWx1ZSA9PT0gJy0nIHx8IHZhbHVlID09PSAnLCcgfHwgdmFsdWUgPT09ICcuJykpIHtcbiAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdG9ySGVpZ2h0VGV4dEFyZWEoZTogSUV2ZW50IHwgSUV2ZW50Q3VzdG9tKSB7XG4gICAgaWYgKHRoaXMudGFnSW5wdXQoKSA9PT0gJ2lucHV0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldDtcblxuICAgIHRhcmdldC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgIHRhcmdldC5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLmRlZmF1bHRIZWlnaHQoKX1weGA7XG4gICAgY29uc3QgeyBzY3JvbGxIZWlnaHQgfSA9IHRhcmdldDtcblxuICAgIGNvbnN0IGhlaWdodCA9IHNjcm9sbEhlaWdodCArIDI7IC8vICBib3JkZXIgdG9wICsgYm90dG9tID0gMlxuXG4gICAgaWYgKCF0aGlzLnByZUhlaWdodEFyZWEoKSAmJiB0aGlzLnByZUhlaWdodEFyZWEoKSAhPT0gaGVpZ2h0KSB7XG4gICAgICB0aGlzLm91dEhlaWdodEFyZWFDaGFuZ2UuZW1pdCh7IGlzQ2hhbmdlOiB0cnVlLCBoZWlnaHQ6IGhlaWdodCB9KTtcbiAgICB9XG5cbiAgICBpZiAoaGVpZ2h0ID4gKHRoaXMubWF4SGVpZ2h0VGV4dEFyZWEoKSA/PyAzMikpIHtcbiAgICAgIHRhcmdldC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICB9XG4gICAgaWYgKHRoaXMuaWZyYW1lUmVmKSB7XG4gICAgICB0aGlzLmlmcmFtZVJlZi5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgIH1cbiAgICB0YXJnZXQuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICB0aGlzLnByZUhlaWdodEFyZWEuc2V0KGhlaWdodCk7XG4gIH1cblxuICBwcml2YXRlIGNvbWJpbmVPYnNlcnZhYmxlKG1vdXNlRG93bkV2ZW50OiBPYnNlcnZhYmxlPElFdmVudD4sIG9ic2VydmFibGVNZXJnZTogT2JzZXJ2YWJsZTxJRXZlbnQ+KSB7XG4gICAgbW91c2VEb3duRXZlbnRcbiAgICAgIC5waXBlKFxuICAgICAgICBtZXJnZU1hcCgoKSA9PiBvYnNlcnZhYmxlTWVyZ2UpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgICAgIHRhcCgoZTogSUV2ZW50KSA9PiB0aGlzLmNoZWNrVHlwZU51bWJlcihlLCAna2V5JykpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChlOiBJRXZlbnQpID0+IHRoaXMucHJvY2Vzc0V2ZW50QW5kRW1pdFZhbHVlKGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZm9jdXMoZW1pdEV2ZW50PzogYm9vbGVhbikge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5FbGVtZW50Py5mb2N1cygpO1xuICAgICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgICB0aGlzLm91dEZvY3VzQW5kQmx1ckV2ZW50LmVtaXQoeyBuYW1lOiAnZm9jdXMnLCBldmVudDogeyB0YXJnZXQ6IHRoaXMuRWxlbWVudCB9IGFzIHVua25vd24gYXMgSUV2ZW50IH0pO1xuICAgICAgfVxuICAgIH0sIHRoaXMuZm9jdXNUaW1lT3V0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBibHVyKGVtaXRFdmVudD86IGJvb2xlYW4pIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuRWxlbWVudD8uYmx1cigpO1xuICAgICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgICB0aGlzLm91dEZvY3VzQW5kQmx1ckV2ZW50LmVtaXQoeyBuYW1lOiAnYmx1cicsIGV2ZW50OiB7IHRhcmdldDogdGhpcy5FbGVtZW50IH0gYXMgdW5rbm93biBhcyBJRXZlbnQgfSk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5ibHVyVGltZU91dCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkRGF0YVRvU2VsZWN0aW9uSW5wdXQoZGF0YTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5FbGVtZW50O1xuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gdGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLkVsZW1lbnQudmFsdWU7XG4gICAgY29uc3QgYmVmb3JlVmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgc2VsZWN0aW9uU3RhcnQpO1xuICAgIGNvbnN0IGFmdGVyVmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoc2VsZWN0aW9uU3RhcnQpO1xuXG4gICAgdGhpcy5FbGVtZW50LnZhbHVlID0gYCR7YmVmb3JlVmFsdWV9JHtkYXRhfSR7YWZ0ZXJWYWx1ZX1gO1xuICAgIHNldENhcmV0UG9zaXRpb24odGhpcy5FbGVtZW50LCBzZWxlY3Rpb25TdGFydCArIGRhdGEudG9TdHJpbmcoKS5sZW5ndGgpO1xuICAgIGNvbnN0IGV2ZW50RmFrZTogSUV2ZW50Q3VzdG9tID0ge1xuICAgICAgcHJldmVudERlZmF1bHQ6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSxcbiAgICAgIHRhcmdldDogdGhpcy5FbGVtZW50LFxuICAgICAgZGF0YTogJycsXG4gICAgICBmYWtlRXZlbnQ6IHRydWUsXG4gICAgfTtcblxuICAgIHRoaXMucHJvY2Vzc0V2ZW50QW5kRW1pdFZhbHVlKGV2ZW50RmFrZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlck9uTG9hZChlOiBFdmVudCwgZWxlbWVudDogSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaWZyYW1lUmVmID0gZWxlbWVudDtcbiAgICBjb25zdCBpZnJhbWU6IGFueSA9IGVsZW1lbnQuY29udGVudFdpbmRvdyB8fCBlbGVtZW50LmNvbnRlbnREb2N1bWVudDtcbiAgICB0aGlzLmNvbmZpZ1Byb2plY3RTZXJ2aWNlLnNldHVwRm9udEZhbWlseShpZnJhbWUuZG9jdW1lbnQpO1xuXG4gICAgdGhpcy5pbnB1dElmcmFtZVJlZi5zZXQoeyBuYXRpdmVFbGVtZW50OiBpZnJhbWUuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ1RFWFRBUkVBJylbMF0gfSk7XG4gICAgaWYgKHRoaXMuRWxlbWVudCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5FbGVtZW50LCAncGxhY2Vob2xkZXInLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLnBsYWNlaG9sZGVyKCkpKTtcbiAgICAgIGlmICh0aGlzLmRpc2FibGUoKSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLkVsZW1lbnQsICdkaXNhYmxlZCcsICd0cnVlJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmFmdGVyVmlld0luaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc2V0VmFsdWUoKSB7XG4gICAgY29uc3QgdmFsdWUgPSAnJztcblxuICAgIHRoaXMuRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMudmFsdWUuc2V0KHZhbHVlKTtcbiAgICB0aGlzLm91dENoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgY291bnREaXNwbGF5Q29tcHV0ZWQoKSB7XG4gICAgaWYgKCh0aGlzLmRhdGFUeXBlKCkgIT09ICdzdHJpbmcnICYmIHRoaXMudmFsdWVVcERvd25OdW1iZXIoKSkgfHwgIWlzTmlsKHRoaXMuaWNvblJpZ2h0Q2xhc3MoKSkpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBhZGRpbmdSaWdodEN1c3RvbS5zZXQoKHRoaXMuZWxlbWVudFJpZ2h0UmVmKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgMCkgKyAxMik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNob3dDb3VudCgpIHx8IHRoaXMuZGF0YVR5cGUoKSAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIHRoaXMudmFsdWUoKSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAnMCc7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5wYWRkaW5nUmlnaHRDdXN0b20uc2V0KCh0aGlzLmVsZW1lbnRSaWdodFJlZigpPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHx8IDApICsgMTIpO1xuICAgICAgaWYgKHRoaXMuc2hvd0NvdW50KCkpIHtcbiAgICAgICAgaWYgKHRoaXMudGV4dENvdW50UmVmKCkpIHtcbiAgICAgICAgICB0aGlzLnBhZGRpbmdSaWdodEN1c3RvbS5zZXQodGhpcy50ZXh0Q291bnRSZWYoKT8ubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCArIDE2KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRhZ0lucHV0KCkgPT09ICdpbnB1dCcpIHtcbiAgICAgICAgICB0aGlzLnBhZGRpbmdSaWdodEN1c3RvbS51cGRhdGUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKyAodGhpcy5lbGVtZW50UmlnaHRSZWYoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB8fCAwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGAke3ZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSgodGhpcy52YWx1ZSgpIGFzIHN0cmluZykubGVuZ3RoLCBmYWxzZSl9YDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VsZWN0QWxsQ29udGVudCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuRWxlbWVudD8uc2VsZWN0KCk7XG4gICAgfSwgdGhpcy5zZWxlY3RBbGxUaW1lT3V0KCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5pZ25vcmVDb21wb3NpdGlvbkV2ZW50LmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgW2NsYXNzXT1cIidmbGV4IHJlbGF0aXZlICF0ZXh0LVsjOWNhMmFkXSAnICsgY2xhc3NDb250YWluZXJJbnB1dCgpXCJcbiAgW2NsYXNzLmxpYnMtdWktY29tcG9uZW50cy1pbnB1dC10ZXh0YXJlYS1jb250YWluZXJdPVwidGFnSW5wdXQoKSA9PT0gJ3RleHRhcmVhJyAmJiByZXNpemUoKSA9PT0gJ2F1dG8nXCI+XG4gIEBpZiAodGFnSW5wdXQoKSA9PT0gJ2lucHV0Jykge1xuICAgIDxpbnB1dFxuICAgICAgI2lucHV0UmVmXG4gICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLXJlYWRvbmx5LWJhY2tncm91bmRdPVwicmVhZG9ubHkoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlLWJhY2tncm91bmRdPVwiZGlzYWJsZSgpXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZGVmYXVsdEhlaWdodCgpXCJcbiAgICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwiZGVmYXVsdEhlaWdodCgpXCJcbiAgICAgIFtzdHlsZS5wYWRkaW5nUmlnaHQucHguaW1wb3J0YW50XT1cInBhZGRpbmdSaWdodEN1c3RvbSgpXCJcbiAgICAgIFtjbGFzcy53LWZ1bGxdPVwiIWlnbm9yZVdpZHRoSW5wdXQxMDAoKVwiXG4gICAgICBbY2xhc3NdPVwiJ2xpYnMtdWktaW5wdXQgbGlicy11aS1mb250LWg1ciAnICsgY2xhc3NJbmNsdWRlKClcIlxuICAgICAgW2NsYXNzLmJvcmRlci1wcmltYXJ5LWZvY3VzLWdlbmVyYWxdPVwiZm9jdXNJbnB1dCgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWlucHV0LW5vdC1ib3JkZXJdPVwibm9Cb3JkZXIoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1iZy1zcGVjaWFsLW5vbmVdPVwiYmFja2dyb3VuZE5vbmUoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1ib3JkZXItZXJyb3ItZ2VuZXJhbF09XCJib3JkZXJFcnJvcigpXCJcbiAgICAgIFtjbGFzcy50ZXh0LVsjMjljN2NjXV09XCJ1c2VDb2xvck1vZGVFeGlzdCgpXCJcbiAgICAgIFtjbGFzcy4hcGwtWzQwcHhdXT1cImljb25MZWZ0Q2xhc3MoKVwiXG4gICAgICBbYXR0ci5tYXhMZW5ndGhdPVwibWF4TGVuZ3RoKCkgfHwgdW5kZWZpbmVkXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcigpIHwgdHJhbnNsYXRlXCJcbiAgICAgIFthdHRyLnR5cGVdPVwidHlwZUlucHV0KClcIlxuICAgICAgW2F0dHIuaW5wdXRtb2RlXT1cIm1vZGVJbnB1dCgpXCJcbiAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlKClcIlxuICAgICAgW2F1dG9jb21wbGV0ZV09XCJyZXNldEF1dG9Db21wbGV0ZVBhc3N3b3JkKCkgPyAnbmV3LXBhc3N3b3JkJyA6ICcnXCIgLz5cbiAgfVxuICBAaWYgKHRhZ0lucHV0KCkgPT09ICd0ZXh0YXJlYScpIHtcbiAgICBAaWYgKHJlc2l6ZSgpID09PSAnYXV0bycpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudHMtaW5wdXQtdGV4dGFyZWEtY29udGFpbmVyLXJlc2l6ZS1pY29uXCI+PC9kaXY+XG4gICAgfVxuICAgIDx0ZXh0YXJlYVxuICAgICAgI2lucHV0UmVmXG4gICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLXJlYWRvbmx5LWJhY2tncm91bmRdPVwicmVhZG9ubHkoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlLWJhY2tncm91bmRdPVwiZGlzYWJsZSgpXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZGVmYXVsdEhlaWdodCgpXCJcbiAgICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwibWluSGVpZ2h0VGV4dEFyZWEoKSA/PyBkZWZhdWx0SGVpZ2h0KClcIlxuICAgICAgW3N0eWxlLnBhZGRpbmdSaWdodC5weC5pbXBvcnRhbnRdPVwicGFkZGluZ1JpZ2h0Q3VzdG9tKClcIlxuICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJtYXhIZWlnaHRUZXh0QXJlYSgpXCJcbiAgICAgIFtzdHlsZS5yZXNpemVdPVwicmVzaXplKClcIlxuICAgICAgW2NsYXNzLnctZnVsbF09XCIhaWdub3JlV2lkdGhJbnB1dDEwMCgpXCJcbiAgICAgIFtjbGFzc109XCInbGlicy11aS1pbnB1dCBsaWJzLXVpLWZvbnQtaDVyIGxpYnMtdWktY3Vyc29yLWF1dG8gJyArIGNsYXNzSW5jbHVkZSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWlucHV0LW5vdC1ib3JkZXJdPVwibm9Cb3JkZXIoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1iZy1zcGVjaWFsLW5vbmVdPVwiYmFja2dyb3VuZE5vbmUoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1ib3JkZXItZXJyb3ItZ2VuZXJhbF09XCJib3JkZXJFcnJvcigpXCJcbiAgICAgIFtjbGFzcy50ZXh0LVsjMjljN2NjXV09XCJ1c2VDb2xvck1vZGVFeGlzdCgpXCJcbiAgICAgIFtjbGFzcy5wbC1bMzJweF1dPVwiaWNvbkxlZnRDbGFzcygpXCJcbiAgICAgIFthdHRyLm1heExlbmd0aF09XCJtYXhMZW5ndGgoKSB8fCB1bmRlZmluZWRcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKCkgfCB0cmFuc2xhdGVcIlxuICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGUoKVwiPjwvdGV4dGFyZWE+XG4gIH1cblxuICBAaWYgKHRhZ0lucHV0KCkgPT09ICdpZnJhbWUtdGV4dGFyZWEnICYmIGh0bWxJZnJhbWVBcmVhKCkpIHtcbiAgICA8c3BhbiBjbGFzcz1cImQtbm9uZVwiPjwvc3Bhbj5cbiAgICA8aWZyYW1lXG4gICAgICAjaWZyYW1lUmVmXG4gICAgICB0aXRsZT1cIkNvbnRlbnQgZnJhbWVcIlxuICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJtYXhIZWlnaHRUZXh0QXJlYSgpXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZGVmYXVsdEhlaWdodCgpXCJcbiAgICAgIFtzcmNkb2NdPVwiaHRtbElmcmFtZUFyZWEoKVwiXG4gICAgICBjbGFzcz1cInctZnVsbCBib3JkZXItMFwiXG4gICAgICAobG9hZCk9XCJoYW5kbGVyT25Mb2FkKCRldmVudCwgaWZyYW1lUmVmKVwiPjwvaWZyYW1lPlxuICB9XG4gIEBpZiAoaWNvbkxlZnRDbGFzcygpKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwiIXBvcG92ZXJDb250ZW50SWNvbkxlZnQoKVwiXG4gICAgICBbY29uZmlnXT1cInsgbWF4V2lkdGg6IDI1MCwgZGlyZWN0aW9uOiAnYm90dG9tJywgY29udGVudDogcG9wb3ZlckNvbnRlbnRJY29uTGVmdCgpLCB6SW5kZXg6IHpJbmRleFBvcG92ZXJDb250ZW50KCkgfVwiPlxuICAgICAgPGlcbiAgICAgICAgW2F0dHIudGFnSW5wdXRdPVwidGFnSW5wdXQoKVwiXG4gICAgICAgIFtjbGFzc109XCJpY29uTGVmdENsYXNzKCkgKyAnIGxpYnMtdWktaW5wdXQtaWNvbi1sZWZ0ICF0ZXh0LVsjOWNhMmFkXSdcIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlckV2ZW50SWNvbkxlZnQoJGV2ZW50LCAnY2xpY2snKVwiXG4gICAgICAgIChrZXlkb3duLmVudGVyKT1cImhhbmRsZXJFdmVudEljb25MZWZ0KCRldmVudCwgJ2NsaWNrJylcIj48L2k+XG4gICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgfVxuICA8ZGl2XG4gICAgI2VsZW1lbnRSaWdodFJlZlxuICAgIGNsYXNzPVwiYWJzb2x1dGUgZmxleCBpdGVtcy1jZW50ZXIgaC1mdWxsIHRvcC0wIHJpZ2h0LTBcIj5cbiAgICBAaWYgKHZhbHVlKCkgJiYgcGxhY2Vob2xkZXIoKS50cmltKCkgJiYga2VlcFBsYWNlaG9sZGVyT25seSgpKSB7XG4gICAgICA8c3BhbiBbY2xhc3NdPVwiJ2xpYnMtdWktaW5wdXQtcGxhY2Vob2xkZXItY3VzdG9tIGxpYnMtdWktZm9udC1oNXInXCI+XG4gICAgICAgIHt7IHBsYWNlaG9sZGVyKCkgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICB9XG4gICAgQGlmIChkYXRhVHlwZSgpICE9PSAnc3RyaW5nJyAmJiB2YWx1ZVVwRG93bk51bWJlcigpKSB7XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtc29ydFxuICAgICAgICBjbGFzcz1cIm1yLVsxMnB4XVwiXG4gICAgICAgIFtkaXNhYmxlQXNjXT1cImRpc2FibGVBc2MoKVwiXG4gICAgICAgIFtkaXNhYmxlRGVzY109XCJkaXNhYmxlRGVzYygpXCJcbiAgICAgICAgW2F0dHIudGFnSW5wdXRdPVwidGFnSW5wdXQoKVwiXG4gICAgICAgIFtvbmx5RW1pdF09XCJ0cnVlXCJcbiAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpIHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2VWYWx1ZSgkZXZlbnQpXCIgLz5cbiAgICB9XG4gICAgQGlmIChpY29uUmlnaHRDbGFzcygpKSB7XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXJcbiAgICAgICAgY2xhc3M9XCJmbGV4XCJcbiAgICAgICAgW2lnbm9yZVNob3dQb3BvdmVyXT1cIiFwb3BvdmVyQ29udGVudEljb25SaWdodCgpXCJcbiAgICAgICAgW2NvbmZpZ109XCJ7IG1heFdpZHRoOiAyNTAsIGRpcmVjdGlvbjogJ2JvdHRvbScsIGNvbnRlbnQ6IHBvcG92ZXJDb250ZW50SWNvblJpZ2h0KCksIHpJbmRleDogekluZGV4UG9wb3ZlckNvbnRlbnQoKSB9XCI+XG4gICAgICAgIDxpXG4gICAgICAgICAgW2F0dHIudGFnSW5wdXRdPVwidGFnSW5wdXQoKVwiXG4gICAgICAgICAgW2NsYXNzLnRleHQtWyM2YTczODNdXT1cIighZGlzYWJsZSgpICYmICFyZWFkb25seSgpKSB8fCBhY2NlcHRPbmx5Q2xpY2tJY29uKClcIlxuICAgICAgICAgIFtjbGFzcy50ZXh0LVsjY2RkMGQ2XV09XCIoKGRpc2FibGUoKSB8fCByZWFkb25seSgpKSAmJiAhYWNjZXB0T25seUNsaWNrSWNvbigpKSB8fCBzZXRJY29uUmlnaHRDb2xvclNhbWVDb2xvckRpc2FibGVSZWFkT25seSgpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaWNvblJpZ2h0Q2xhc3MoKSArICcgbGlicy11aS1pbnB1dC1pY29uLXJpZ2h0J1wiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJFdmVudEljb25SaWdodCgkZXZlbnQsICdjbGljaycpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJoYW5kbGVyRXZlbnRJY29uUmlnaHQoJGV2ZW50LCAnY2xpY2snKVwiPjwvaT5cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgfVxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwibGlicy11aS1pbnB1dC10ZXh0LWJvdHRvbSB7eyBjbGFzc0NvbnRhaW5lckJvdHRvbUlucHV0KCkgfX1cIlxuICAgIFtzdHlsZS5yaWdodC5weF09XCIodGFnSW5wdXQoKSA9PT0gJ2lucHV0JyA/IGVsZW1lbnRSaWdodFJlZi5jbGllbnRXaWR0aCB8fCAwIDogMCkgKyA4XCI+XG4gICAgQGlmICh0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dCgpOyBhcyB0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dCkge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlTGVmdEJvdHRvbUlucHV0XCIgLz5cbiAgICB9XG4gICAgPGRpdlxuICAgICAgI3RleHRDb3VudFJlZlxuICAgICAgY2xhc3M9XCJ0ZXh0LVsjOWNhMmFkXSBsaWJzLXVpLWZvbnQtaDdyXCJcbiAgICAgIFtjbGFzcy5oaWRkZW5dPVwiZGF0YVR5cGUoKSAhPT0gJ3N0cmluZycgfHwgIXNob3dDb3VudCgpXCI+XG4gICAgICA8c3Bhbj57eyBjb3VudERpc3BsYXkoKSB9fTwvc3Bhbj5cbiAgICAgIEBpZiAobWF4TGVuZ3RoKCkpIHtcbiAgICAgICAgPHNwYW4+L3t7IG1heExlbmd0aERpc3BsYXkoKSB9fTwvc3Bhbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICBAaWYgKHRlbXBsYXRlUmlnaHRCb3R0b21JbnB1dCgpOyBhcyB0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXQpIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXRcIiAvPlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==