@libs-ui/components-image-editor 0.2.253 → 0.2.255
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.
|
@@ -765,7 +765,7 @@ export class LibsUiComponentsImageEditorComponent {
|
|
|
765
765
|
this.dynamicComponentService.remove(this.resizeComponentRef);
|
|
766
766
|
}
|
|
767
767
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsImageEditorComponent, deps: [{ token: LINK_IMAGE_ERROR_TOKEN_INJECT, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
768
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsImageEditorComponent, isStandalone: true, selector: "libs_ui-components-image_editor", inputs: { modeShowButton: { classPropertyName: "modeShowButton", publicName: "modeShowButton", isSignal: true, isRequired: false, transformFunction: null }, mimetype: { classPropertyName: "mimetype", publicName: "mimetype", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, imgSrc: { classPropertyName: "imgSrc", publicName: "imgSrc", isSignal: true, isRequired: true, transformFunction: null }, originUrl: { classPropertyName: "originUrl", publicName: "originUrl", isSignal: true, isRequired: false, transformFunction: null }, nameFile: { classPropertyName: "nameFile", publicName: "nameFile", isSignal: true, isRequired: false, transformFunction: null }, hasZoom: { classPropertyName: "hasZoom", publicName: "hasZoom", isSignal: true, isRequired: false, transformFunction: null }, aspectRatio: { classPropertyName: "aspectRatio", publicName: "aspectRatio", isSignal: true, isRequired: false, transformFunction: null }, requiredCropFollowRatio: { classPropertyName: "requiredCropFollowRatio", publicName: "requiredCropFollowRatio", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { imgSrc: "imgSrcChange", outClose: "outClose", outSaveFile: "outSaveFile", outFunctionsControl: "outFunctionsControl" }, viewQueries: [{ propertyName: "imageOrigin", first: true, predicate: ["imageOrigin"], descendants: true, isSignal: true }, { propertyName: "imageClip", first: true, predicate: ["imageClip"], descendants: true, isSignal: true }, { propertyName: "imageEditorContainer", first: true, predicate: ["imageEditorContainer"], descendants: true, isSignal: true }, { propertyName: "imageContainer", first: true, predicate: ["imageContainer"], descendants: true, isSignal: true }, { propertyName: "cropArea", first: true, predicate: ["cropArea"], descendants: true, isSignal: true }, { propertyName: "cropTL", first: true, predicate: ["cropTL"], descendants: true, isSignal: true }, { propertyName: "cropBL", first: true, predicate: ["cropBL"], descendants: true, isSignal: true }, { propertyName: "cropBR", first: true, predicate: ["cropBR"], descendants: true, isSignal: true }, { propertyName: "cropTR", first: true, predicate: ["cropTR"], descendants: true, isSignal: true }, { propertyName: "cropLineVL", first: true, predicate: ["cropLineVL"], descendants: true, isSignal: true }, { propertyName: "cropLineVR", first: true, predicate: ["cropLineVR"], descendants: true, isSignal: true }, { propertyName: "cropLineHT", first: true, predicate: ["cropLineHT"], descendants: true, isSignal: true }, { propertyName: "cropLineHB", first: true, predicate: ["cropLineHB"], descendants: true, isSignal: true }, { propertyName: "circleTL", first: true, predicate: ["circleTL"], descendants: true, isSignal: true }, { propertyName: "circleTR", first: true, predicate: ["circleTR"], descendants: true, isSignal: true }, { propertyName: "circleBL", first: true, predicate: ["circleBL"], descendants: true, isSignal: true }, { propertyName: "circleBR", first: true, predicate: ["circleBR"], descendants: true, isSignal: true }], ngImport: i0, template: "<libs_ui-components-modal [width]=\"'calc(100vw - 400px)'\"\n [height]=\"'calc(100vh - 100px)'\"\n [minWidth]=\"'1200px'\"\n [headerConfig]=\"{ignoreHeaderTheme: true, removeButtonClose: true}\"\n [bodyConfig]=\"{classInclude: '!p-0', scrollOverlayOptions: {scrollX: 'hidden', scrollY: 'hidden'}}\"\n [footerConfig]=\"{hidden: true}\"\n [zIndex]=\"zIndex()\"\n [buttonsFooter]=\"[]\"\n [mode]=\"'center'\">\n <div class=\"libs-ui-modal-header-custom w-full flex items-center justify-between\">\n <div class=\"w-full relative mx-[24px] h-[16px]\">\n <div class=\"flex w-full libs-ui-font-h4s absolute\">\n <libs_ui-components-popover [type]=\"'text'\"\n [config]=\"{zIndex: zIndex()}\">\n {{ 'i18n_edit_file_name' | translate:{file_name: nameFile()} }}\n </libs_ui-components-popover>\n </div>\n </div>\n <div class=\"flex items-center\">\n @if (modeShowButton() === 'save-file') {\n <libs_ui-components-buttons-button [type]=\"'button-third'\"\n [label]=\"'i18n_cancel'\"\n [disable]=\"loading() || loadingImage()\"\n [classInclude]=\"'py-[6px] px-[12px] mr-[16px]'\"\n (outClick)=\"handlerClose($event)\" />\n\n <libs_ui-components-buttons-button class=\"mr-[24px]\"\n [label]=\"'i18n_save'\"\n [disable]=\"loading() || loadingImage()\"\n [classInclude]=\"'py-[6px] px-[12px]'\"\n (outClick)=\"handlerSaveFile($event,'save-file')\" />\n }\n @else {\n <libs_ui-components-buttons-button [label]=\"'i18n_save_to_new_file'\"\n [type]=\"'button-outline'\"\n [classInclude]=\"'mx-[16px] py-[6px] px-[12px]'\"\n [disable]=\"loading() || loadingImage() || !changed()\"\n (outClick)=\"handlerSaveFile($event,'save-api-as-new-file')\" />\n <libs_ui-components-buttons-button [type]=\"'button-secondary'\"\n [label]=\"'i18n_save'\"\n [classInclude]=\"'py-[6px] px-[12px]'\"\n [disable]=\"loading() || loadingImage() || !changed()\"\n (outClick)=\"handlerSaveFile($event,'save-api')\" />\n <div class=\"h-[12px] libs-ui-border-left-general mx-[16px]\"></div>\n <libs_ui-components-buttons-button class=\"mr-[24px]\"\n [classInclude]=\"'p-[6px]'\"\n [type]=\"'button-third-hover-danger'\"\n [iconOnlyType]=\"true\"\n [disable]=\"loading()\"\n [popover]=\"{config: {content: 'i18n_exit_edit_mode', zIndex: zIndex()}}\"\n [classIconLeft]=\"'libs-ui-icon-close'\"\n (outClick)=\"handlerClose($event)\" />\n }\n </div>\n </div>\n <div class=\"libs-ui-modal-body-custom h-full w-full flex\">\n <div #imageEditorContainer\n class=\"relative w-full h-full bg-[#e6e7ea] border-radius-bottom-left-8px p-[32px] libs-ui-input-image-editor-container-left\">\n @if (loadingImage()) {\n <div class=\"absolute h-full w-full bg-[#e6e7ea] top-0 left-0 z-[5]\">\n <libs_ui-components-spinner [size]=\"'medium'\" />\n </div>\n }\n <div class=\"absolute h-[32px] w-[calc(100%-64px)] bg-[#e6e7eab8] top-0 left-[32px] z-[1]\">\n </div>\n <div class=\"absolute w-[32px] h-full bg-[#e6e7eab8] left-0 top-0 z-[1] rounded-bl-[8px]\">\n </div>\n <div class=\"absolute w-[32px] h-full bg-[#e6e7eab8] right-0 top-0 z-[1]\">\n </div>\n <div class=\"absolute h-[32px] w-[calc(100%-64px)] bg-[#e6e7eab8] bottom-0 left-[32px] z-[1]\">\n </div>\n <div #imageContainer\n class=\"relative w-full h-full rounded-bl-[8px] min-h-0\">\n <div #circleTL\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div #circleTR\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div #circleBL\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div #circleBR\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <img #imageOrigin\n class=\"absolute border-[4px] border-[#8e61ee] rounded-[4px] top-[-1000px] left-[-1000px]\"\n loading=\"lazy\"\n [src]=\"imgSrc()\"\n (load)=\"handlerImageLoaded()\"\n (error)=\"handlerImageError($event)\" />\n <img #imageClip\n class=\"absolute z-[1] top-[-1000px] left-[-1000px]\"\n loading=\"lazy\"\n [src]=\"imgSrc()\"\n (error)=\"handlerImageError($event)\" />\n <div class=\"absolute top-0 left-0 right-0 bottom-0 bg-[#e6e7eab8]\">\n </div>\n <div #cropArea\n class=\"absolute z-[2] border-[4px] border-[#8e61ee] rounded-[4px]\">\n <div class=\"relative w-full h-full\">\n <div #cropTL\n class=\"absolute z-[2] left-[-18px] top-[-17px] cursor-nwse-resize\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropBL\n class=\"absolute z-[2] left-[-17px] bottom-[-18px] cursor-nesw-resize rotate-[270deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropTR\n class=\"absolute z-[2] right-[-17px] top-[-17px] cursor-nesw-resize rotate-[90deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropBR\n class=\"absolute z-[2] right-[-18px] bottom-[-17px] cursor-nwse-resize rotate-[180deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropLineVL\n class=\"absolute z-[1] w-[12px] left-[-6px] top-0 bottom-0 cursor-ew-resize\">\n </div>\n <div #cropLineVR\n class=\"absolute z-[1] w-[12px] right-[-6px] top-0 bottom-0 cursor-ew-resize\">\n </div>\n <div #cropLineHT\n class=\"absolute z-[1] h-[12px] left-0 top-[-6px] right-0 cursor-ns-resize\">\n </div>\n <div #cropLineHB\n class=\"absolute z-[1] h-[12px] left-0 right-0 bottom-[-6px] cursor-ns-resize\">\n </div>\n\n <div class=\"bg-white absolute h-[1px] top-0 left-0 right-0\"></div>\n <div class=\"bg-white absolute h-[1px] bottom-0 left-0 right-0\"></div>\n <div class=\"bg-white absolute w-[1px] top-0 left-0 bottom-0\"></div>\n <div class=\"bg-white absolute w-[1px] top-0 bottom-0 right-0\"></div>\n <div class=\"bg-white absolute h-[2px] top-[33%] left-0 right-0\"></div>\n <div class=\"bg-white absolute h-[2px] top-[66%] left-0 right-0\"></div>\n <div class=\"bg-white absolute w-[2px] top-0 bottom-0 left-[33%]\"></div>\n <div class=\"bg-white absolute w-[2px] top-0 bottom-0 left-[66%]\"></div>\n </div>\n </div>\n </div>\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n <div class=\"w-[320px] shrink-0 p-[16px] bg-[#ffffff] rounded-br-[8px] z-[2] libs-ui-input-image-editor-container-right\">\n <div class=\"flex items-center justify-between mb-[16px]\">\n <div class=\"libs-ui-font-h4m\">{{ 'i18n_cutting_ratio' | translate }}</div>\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [type]=\"'button-third'\"\n [classIconLeft]=\"'libs-ui-icon-refresh'\"\n [classInclude]=\"'p-[6px] mr-[8px]'\"\n [popover]=\"{config: {content: 'i18n_restore_the_original_state', zIndex: zIndex()}}\"\n [disable]=\"loading() || loadingImage() || !changed()\"\n (outClick)=\"handlerRestoreImage($event)\" />\n </div>\n <div class=\"mb-[16px] libs-ui-image-editor-edit-display-grid-gap-16\">\n @for (item of cropRatioItems(); track item.key) {\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage() || requiredCropFollowRatio()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"item.icon+' !text-[20px]'\"\n [isActive]=\"item.key === cropRatioItemSelected()\"\n (outClick)=\"handlerSelectCropRatioItem($event, item.key)\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ (item.key === 'free' ? 'i18n_custom' : item.key) | translate }}\n </div>\n </div>\n }\n </div>\n <div class=\"mb-[16px] flex\">\n <libs_ui-components-inputs-valid class=\"mr-[16px]\"\n [dataType]=\"'int'\"\n [labelConfig]=\"{labelLeft: 'i18n_width', classInclude: 'mb-[4px]', labelLeftClass: 'libs-ui-font-h7r'}\"\n [fieldNameBind]=\"'width'\"\n [(item)]=\"cropSize\"\n [unitsRight]=\"[{id: 'px', label: 'px'}]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n [maxValueNumber]=\"originWidth()\"\n [disable]=\"loading() || loadingImage()\"\n (outValueChange)=\"handlerCropWidth()\" />\n <libs_ui-components-inputs-valid [dataType]=\"'int'\"\n [labelConfig]=\"{labelLeft: 'i18n_length', classInclude: 'mb-[4px]', labelLeftClass: 'libs-ui-font-h7r'}\"\n [fieldNameBind]=\"'height'\"\n [(item)]=\"cropSize\"\n [unitsRight]=\"[{id: 'px', label: 'px'}]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n [maxValueNumber]=\"originHeight()\"\n [disable]=\"loading() || loadingImage()\"\n (outValueChange)=\"handlerCropHeight()\" />\n </div>\n <div class=\"libs-ui-font-h4m mb-[16px]\">{{ 'i18n_rotate_photos' | translate }}</div>\n <div class=\"flex libs-ui-image-editor-edit-display-grid-gap-16\">\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-rotate-image-outline !text-[20px]'\"\n (outClick)=\"handlerRotateImage($event)\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_rotate_ninety_degrees' | translate }}\n </div>\n </div>\n\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-flip-vertical !text-[20px]'\"\n (outClick)=\"handlerFlipImage($event, 'vertical')\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_vertical_flip' | translate }}\n </div>\n </div>\n\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-flip-horizontal !text-[20px]'\"\n (outClick)=\"handlerFlipImage($event, 'horizontal')\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_horizontal_flip' | translate }}\n </div>\n </div>\n\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-scale !text-[20px]'\"\n (outClick)=\"handlerResize($event)\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_resize' | translate }}\n </div>\n </div>\n </div>\n </div>\n </div>\n</libs_ui-components-modal>\n\n<ng-template #svgArrow>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n fill=\"none\">\n <path d=\"M33.6987 14.6969L18.3309 14.6969C16.516 14.6969 15.0311 16.1818 15.0311 17.9967L15.0311 33.3645\"\n stroke=\"white\"\n stroke-width=\"5.83333\"\n stroke-miterlimit=\"10\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n</ng-template>\n\n<ng-template #svgCircle>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\">\n <circle cx=\"7.5\"\n cy=\"7.5\"\n r=\"7.5\"\n fill=\"white\" />\n </svg>\n</ng-template>\n", styles: [".libs-ui-image-editor-edit-display-grid-gap-16{display:grid;gap:16px;grid-template-columns:1fr 1fr 1fr 1fr}.libs-ui-image-editor-edit-top-33{top:33.33%}.libs-ui-image-editor-edit-top-66{top:66.66%}.libs-ui-image-editor-edit-left-33{left:33.33%}.libs-ui-image-editor-edit-left-66{left:66.66%}.libs-ui-image-editor-edit-action-item{display:flex;flex-direction:column;align-items:center;width:60px;cursor:pointer}.libs-ui-image-editor-edit-action-item-icon{padding:12px;border-radius:8px;width:max-content;border:1px solid #e6e7ea}.libs-ui-image-editor-edit-action-item-icon:before{font-size:20px}.libs-ui-image-editor-edit-action-item:hover .libs-ui-image-editor-edit-action-item-icon{border:1px solid var(--mo-global-color-primary-border-hover)}.libs-ui-image-editor-edit-action-item:hover .libs-ui-image-editor-edit-action-item-icon:before{color:var(--mo-global-color-primary-text-bright-20)!important}.libs-ui-image-editor-edit-action-item[active=true] .libs-ui-image-editor-edit-action-item-icon{border:1px solid var(--mo-global-color-primary-border-active)!important;background-color:var(--mo-global-color-primary-background-95)!important}.libs-ui-image-editor-edit-action-item[active=true] .libs-ui-image-editor-edit-action-item-icon:before{color:var(--mo-global-color-primary-text-active)!important}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { 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: LibsUiComponentsModalComponent, selector: "libs_ui-components-modal", inputs: ["show", "mode", "isBackdropTransparent", "isBackgroundTransparentModal", "isSizeBackdropByWidthHeightInput", "hasShadowBoxWhenHiddenBackDropTransparent", "classIncludeModalWrapper", "zIndex", "width", "height", "maxWidth", "maxHeight", "minWidth", "isFullScreen", "disable", "ignoreCommunicateMicroEvent", "headerConfig", "bodyConfig", "footerConfig", "buttonsFooter", "title", "titleUseXssFilter", "titleUseTooltip", "titleUseInnerText"], outputs: ["showChange", "widthChange", "heightChange", "maxWidthChange", "maxHeightChange", "minWidthChange", "disableChange", "buttonsFooterChange", "outScrollContent", "outEvent", "outFunctionControl"] }, { kind: "component", type: LibsUiComponentsInputsValidComponent, selector: "libs_ui-components-inputs-valid", inputs: ["item", "labelConfig", "emitEmptyInDataTypeNumber", "ignoreBlockInputMaxValue", "fieldNameBind", "showCount", "typeComponentSelectItem", "valueComponentSelectItem", "disableComponentSelectItem", "tagInput", "dataType", "typeInput", "modeInput", "resetAutoCompletePassword", "textAreaEnterNotNewLine", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "ignoreWidthInput100", "classIncludeInput", "classContainerInput", "readonly", "disable", "noBorder", "backgroundNone", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "classContainerBottomInput", "autoRemoveEmoji", "defaultHeight", "maxHeightTextArea", "minHeightTextArea", "ignoreShowError", "borderError", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "zIndexPopoverContent", "unitsLeft", "configUnitLeft", "keySelectedUnitLeft", "unitsRight", "configUnitRight", "keySelectedUnitRight", "maxValueNumber", "minValueNumber", "ignoreContentLeft", "ignoreContentRight", "isBaselineStyle", "valuePatternShowError", "validPattern", "validRequired", "validMinLength", "validMinValue", "validMaxValue", "validMaxLength", "functionValid", "maxLength", "positionMessageErrorStartInput", "classInclude", "resize", "templateLeftBottomInput", "templateRightBottomInput", "onlyAcceptNegativeValue", "autoAddZeroLessThan10InTypeInt", "maxLengthNumberCount", "classMessageErrorInclude", "ignoreStopPropagationEvent", "ignoreUnitRightClassReadOnly", "paddingRightCustomSpecific", "focusTimeOut"], outputs: ["itemChange", "outValueChange", "outSelect", "outIconLeft", "outIconRight", "outClickButtonLabel", "outSwitchEventLabel", "outLabelRightClick", "outEnterInputEvent", "outHeightAreaChange", "outFunctionsControl", "outFocusAndBlur", "outChangeValueByButtonUpDown"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsSpinnerComponent, selector: "libs_ui-components-spinner", inputs: ["type", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
768
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsImageEditorComponent, isStandalone: true, selector: "libs_ui-components-image_editor", inputs: { modeShowButton: { classPropertyName: "modeShowButton", publicName: "modeShowButton", isSignal: true, isRequired: false, transformFunction: null }, mimetype: { classPropertyName: "mimetype", publicName: "mimetype", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, imgSrc: { classPropertyName: "imgSrc", publicName: "imgSrc", isSignal: true, isRequired: true, transformFunction: null }, originUrl: { classPropertyName: "originUrl", publicName: "originUrl", isSignal: true, isRequired: false, transformFunction: null }, nameFile: { classPropertyName: "nameFile", publicName: "nameFile", isSignal: true, isRequired: false, transformFunction: null }, hasZoom: { classPropertyName: "hasZoom", publicName: "hasZoom", isSignal: true, isRequired: false, transformFunction: null }, aspectRatio: { classPropertyName: "aspectRatio", publicName: "aspectRatio", isSignal: true, isRequired: false, transformFunction: null }, requiredCropFollowRatio: { classPropertyName: "requiredCropFollowRatio", publicName: "requiredCropFollowRatio", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { imgSrc: "imgSrcChange", outClose: "outClose", outSaveFile: "outSaveFile", outFunctionsControl: "outFunctionsControl" }, viewQueries: [{ propertyName: "imageOrigin", first: true, predicate: ["imageOrigin"], descendants: true, isSignal: true }, { propertyName: "imageClip", first: true, predicate: ["imageClip"], descendants: true, isSignal: true }, { propertyName: "imageEditorContainer", first: true, predicate: ["imageEditorContainer"], descendants: true, isSignal: true }, { propertyName: "imageContainer", first: true, predicate: ["imageContainer"], descendants: true, isSignal: true }, { propertyName: "cropArea", first: true, predicate: ["cropArea"], descendants: true, isSignal: true }, { propertyName: "cropTL", first: true, predicate: ["cropTL"], descendants: true, isSignal: true }, { propertyName: "cropBL", first: true, predicate: ["cropBL"], descendants: true, isSignal: true }, { propertyName: "cropBR", first: true, predicate: ["cropBR"], descendants: true, isSignal: true }, { propertyName: "cropTR", first: true, predicate: ["cropTR"], descendants: true, isSignal: true }, { propertyName: "cropLineVL", first: true, predicate: ["cropLineVL"], descendants: true, isSignal: true }, { propertyName: "cropLineVR", first: true, predicate: ["cropLineVR"], descendants: true, isSignal: true }, { propertyName: "cropLineHT", first: true, predicate: ["cropLineHT"], descendants: true, isSignal: true }, { propertyName: "cropLineHB", first: true, predicate: ["cropLineHB"], descendants: true, isSignal: true }, { propertyName: "circleTL", first: true, predicate: ["circleTL"], descendants: true, isSignal: true }, { propertyName: "circleTR", first: true, predicate: ["circleTR"], descendants: true, isSignal: true }, { propertyName: "circleBL", first: true, predicate: ["circleBL"], descendants: true, isSignal: true }, { propertyName: "circleBR", first: true, predicate: ["circleBR"], descendants: true, isSignal: true }], ngImport: i0, template: "<libs_ui-components-modal [width]=\"'calc(100vw - 400px)'\"\n [height]=\"'calc(100vh - 100px)'\"\n [minWidth]=\"'1200px'\"\n [headerConfig]=\"{ignoreHeaderTheme: true, removeButtonClose: true}\"\n [bodyConfig]=\"{classInclude: '!p-0', scrollOverlayOptions: {scrollX: 'hidden', scrollY: 'hidden'}}\"\n [footerConfig]=\"{hidden: true}\"\n [zIndex]=\"zIndex()\"\n [buttonsFooter]=\"[]\"\n [mode]=\"'center'\">\n <div class=\"libs-ui-modal-header-custom w-full flex items-center justify-between\">\n <div class=\"w-full relative mx-[24px] h-[16px]\">\n <div class=\"flex w-full libs-ui-font-h4s absolute\">\n <libs_ui-components-popover [type]=\"'text'\"\n [config]=\"{zIndex: zIndex()}\">\n {{ 'i18n_edit_file_name' | translate:{file_name: nameFile()} }}\n </libs_ui-components-popover>\n </div>\n </div>\n <div class=\"flex items-center\">\n @if (modeShowButton() === 'save-file') {\n <libs_ui-components-buttons-button [type]=\"'button-third'\"\n [label]=\"'i18n_cancel'\"\n [disable]=\"loading() || loadingImage()\"\n [classInclude]=\"'py-[6px] px-[12px] mr-[16px]'\"\n (outClick)=\"handlerClose($event)\" />\n\n <libs_ui-components-buttons-button class=\"mr-[24px]\"\n [label]=\"'i18n_save'\"\n [disable]=\"loading() || loadingImage()\"\n [classInclude]=\"'py-[6px] px-[12px]'\"\n (outClick)=\"handlerSaveFile($event,'save-file')\" />\n }\n @else {\n <libs_ui-components-buttons-button [label]=\"'i18n_save_to_new_file'\"\n [type]=\"'button-outline'\"\n [classInclude]=\"'mx-[16px] py-[6px] px-[12px]'\"\n [disable]=\"loading() || loadingImage() || !changed()\"\n (outClick)=\"handlerSaveFile($event,'save-api-as-new-file')\" />\n <libs_ui-components-buttons-button [type]=\"'button-secondary'\"\n [label]=\"'i18n_save'\"\n [classInclude]=\"'py-[6px] px-[12px]'\"\n [disable]=\"loading() || loadingImage() || !changed()\"\n (outClick)=\"handlerSaveFile($event,'save-api')\" />\n <div class=\"h-[12px] libs-ui-border-left-general mx-[16px]\"></div>\n <libs_ui-components-buttons-button class=\"mr-[24px]\"\n [classInclude]=\"'p-[6px]'\"\n [type]=\"'button-third-hover-danger'\"\n [iconOnlyType]=\"true\"\n [disable]=\"loading()\"\n [popover]=\"{config: {content: 'i18n_exit_edit_mode', zIndex: zIndex()}}\"\n [classIconLeft]=\"'libs-ui-icon-close'\"\n (outClick)=\"handlerClose($event)\" />\n }\n </div>\n </div>\n <div class=\"libs-ui-modal-body-custom h-full w-full flex\">\n <div #imageEditorContainer\n class=\"relative w-full h-full bg-[#e6e7ea] border-radius-bottom-left-8px p-[32px] libs-ui-input-image-editor-container-left\">\n @if (loadingImage()) {\n <div class=\"absolute h-full w-full bg-[#e6e7ea] top-0 left-0 z-[5]\">\n <libs_ui-components-spinner [size]=\"'medium'\" />\n </div>\n }\n <div class=\"absolute h-[32px] w-[calc(100%-64px)] bg-[#e6e7eab8] top-0 left-[32px] z-[1]\">\n </div>\n <div class=\"absolute w-[32px] h-full bg-[#e6e7eab8] left-0 top-0 z-[1] rounded-bl-[8px]\">\n </div>\n <div class=\"absolute w-[32px] h-full bg-[#e6e7eab8] right-0 top-0 z-[1]\">\n </div>\n <div class=\"absolute h-[32px] w-[calc(100%-64px)] bg-[#e6e7eab8] bottom-0 left-[32px] z-[1]\">\n </div>\n <div #imageContainer\n class=\"relative w-full h-full rounded-bl-[8px] min-h-0\">\n <div #circleTL\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div #circleTR\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div #circleBL\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <div #circleBR\n class=\"absolute z-[1]\"\n [class.hidden]=\"!dragGridCrop()\"\n [class.flex]=\"dragGridCrop()\">\n <ng-template *ngTemplateOutlet=\"svgCircle\" />\n </div>\n <img #imageOrigin\n class=\"absolute border-[4px] border-[#8e61ee] rounded-[4px] top-[-1000px] left-[-1000px]\"\n loading=\"lazy\"\n [src]=\"imgSrc()\"\n (load)=\"handlerImageLoaded()\"\n (error)=\"handlerImageError($event)\" />\n <img #imageClip\n class=\"absolute z-[1] top-[-1000px] left-[-1000px]\"\n loading=\"lazy\"\n [src]=\"imgSrc()\"\n (error)=\"handlerImageError($event)\" />\n <div class=\"absolute top-0 left-0 right-0 bottom-0 bg-[#e6e7eab8]\">\n </div>\n <div #cropArea\n class=\"absolute z-[2] border-[4px] border-[#8e61ee] rounded-[4px]\">\n <div class=\"relative w-full h-full\">\n <div #cropTL\n class=\"absolute z-[2] left-[-18px] top-[-17px] cursor-nwse-resize\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropBL\n class=\"absolute z-[2] left-[-17px] bottom-[-18px] cursor-nesw-resize rotate-[270deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropTR\n class=\"absolute z-[2] right-[-17px] top-[-17px] cursor-nesw-resize rotate-[90deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropBR\n class=\"absolute z-[2] right-[-18px] bottom-[-17px] cursor-nwse-resize rotate-[180deg]\">\n <ng-template *ngTemplateOutlet=\"svgArrow\" />\n </div>\n <div #cropLineVL\n class=\"absolute z-[1] w-[12px] left-[-6px] top-0 bottom-0 cursor-ew-resize\">\n </div>\n <div #cropLineVR\n class=\"absolute z-[1] w-[12px] right-[-6px] top-0 bottom-0 cursor-ew-resize\">\n </div>\n <div #cropLineHT\n class=\"absolute z-[1] h-[12px] left-0 top-[-6px] right-0 cursor-ns-resize\">\n </div>\n <div #cropLineHB\n class=\"absolute z-[1] h-[12px] left-0 right-0 bottom-[-6px] cursor-ns-resize\">\n </div>\n\n <div class=\"bg-white absolute h-[1px] top-0 left-0 right-0\"></div>\n <div class=\"bg-white absolute h-[1px] bottom-0 left-0 right-0\"></div>\n <div class=\"bg-white absolute w-[1px] top-0 left-0 bottom-0\"></div>\n <div class=\"bg-white absolute w-[1px] top-0 bottom-0 right-0\"></div>\n <div class=\"bg-white absolute h-[2px] top-[33%] left-0 right-0\"></div>\n <div class=\"bg-white absolute h-[2px] top-[66%] left-0 right-0\"></div>\n <div class=\"bg-white absolute w-[2px] top-0 bottom-0 left-[33%]\"></div>\n <div class=\"bg-white absolute w-[2px] top-0 bottom-0 left-[66%]\"></div>\n </div>\n </div>\n </div>\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n <div class=\"w-[320px] shrink-0 p-[16px] bg-[#ffffff] rounded-br-[8px] z-[2] libs-ui-input-image-editor-container-right\">\n <div class=\"flex items-center justify-between mb-[16px]\">\n <div class=\"libs-ui-font-h4m\">{{ 'i18n_cutting_ratio' | translate }}</div>\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [type]=\"'button-third'\"\n [classIconLeft]=\"'libs-ui-icon-refresh'\"\n [classInclude]=\"'p-[6px] mr-[8px]'\"\n [popover]=\"{config: {content: 'i18n_restore_the_original_state', zIndex: zIndex()}}\"\n [disable]=\"loading() || loadingImage() || !changed()\"\n (outClick)=\"handlerRestoreImage($event)\" />\n </div>\n <div class=\"mb-[16px] libs-ui-image-editor-edit-display-grid-gap-16\">\n @for (item of cropRatioItems(); track item.key) {\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage() || requiredCropFollowRatio()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"item.icon+' !text-[20px]'\"\n [isActive]=\"item.key === cropRatioItemSelected()\"\n (outClick)=\"handlerSelectCropRatioItem($event, item.key)\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ (item.key === 'free' ? 'i18n_custom' : item.key) | translate }}\n </div>\n </div>\n }\n </div>\n <div class=\"mb-[16px] flex\">\n <libs_ui-components-inputs-valid class=\"mr-[16px]\"\n [dataType]=\"'int'\"\n [labelConfig]=\"{labelLeft: 'i18n_width', classInclude: 'mb-[4px]', labelLeftClass: 'libs-ui-font-h7r'}\"\n [fieldNameBind]=\"'width'\"\n [(item)]=\"cropSize\"\n [unitsRight]=\"[{id: 'px', label: 'px'}]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n [maxValueNumber]=\"originWidth()\"\n [disable]=\"loading() || loadingImage()\"\n (outValueChange)=\"handlerCropWidth()\" />\n <libs_ui-components-inputs-valid [dataType]=\"'int'\"\n [labelConfig]=\"{labelLeft: 'i18n_length', classInclude: 'mb-[4px]', labelLeftClass: 'libs-ui-font-h7r'}\"\n [fieldNameBind]=\"'height'\"\n [(item)]=\"cropSize\"\n [unitsRight]=\"[{id: 'px', label: 'px'}]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n [maxValueNumber]=\"originHeight()\"\n [disable]=\"loading() || loadingImage()\"\n (outValueChange)=\"handlerCropHeight()\" />\n </div>\n <div class=\"libs-ui-font-h4m mb-[16px]\">{{ 'i18n_rotate_photos' | translate }}</div>\n <div class=\"flex libs-ui-image-editor-edit-display-grid-gap-16\">\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-rotate-image-outline !text-[20px]'\"\n (outClick)=\"handlerRotateImage($event)\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_rotate_ninety_degrees' | translate }}\n </div>\n </div>\n\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-flip-vertical !text-[20px]'\"\n (outClick)=\"handlerFlipImage($event, 'vertical')\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_vertical_flip' | translate }}\n </div>\n </div>\n\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-flip-horizontal !text-[20px]'\"\n (outClick)=\"handlerFlipImage($event, 'horizontal')\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_horizontal_flip' | translate }}\n </div>\n </div>\n\n <div class=\"flex flex-col items-center\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [sizeButton]=\"'large'\"\n [disable]=\"loading() || loadingImage()\"\n [type]=\"'button-outline'\"\n [classIconLeft]=\"'libs-ui-icon-scale !text-[20px]'\"\n (outClick)=\"handlerResize($event)\" />\n <div class=\"libs-ui-font-h6r text-[#6a7383] mt-[4px]\">\n {{ 'i18n_resize' | translate }}\n </div>\n </div>\n </div>\n </div>\n </div>\n</libs_ui-components-modal>\n\n<ng-template #svgArrow>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n fill=\"none\">\n <path d=\"M33.6987 14.6969L18.3309 14.6969C16.516 14.6969 15.0311 16.1818 15.0311 17.9967L15.0311 33.3645\"\n stroke=\"white\"\n stroke-width=\"5.83333\"\n stroke-miterlimit=\"10\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n</ng-template>\n\n<ng-template #svgCircle>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\">\n <circle cx=\"7.5\"\n cy=\"7.5\"\n r=\"7.5\"\n fill=\"white\" />\n </svg>\n</ng-template>\n", styles: [".libs-ui-image-editor-edit-display-grid-gap-16{display:grid;gap:16px;grid-template-columns:1fr 1fr 1fr 1fr}.libs-ui-image-editor-edit-top-33{top:33.33%}.libs-ui-image-editor-edit-top-66{top:66.66%}.libs-ui-image-editor-edit-left-33{left:33.33%}.libs-ui-image-editor-edit-left-66{left:66.66%}.libs-ui-image-editor-edit-action-item{display:flex;flex-direction:column;align-items:center;width:60px;cursor:pointer}.libs-ui-image-editor-edit-action-item-icon{padding:12px;border-radius:8px;width:max-content;border:1px solid #e6e7ea}.libs-ui-image-editor-edit-action-item-icon:before{font-size:20px}.libs-ui-image-editor-edit-action-item:hover .libs-ui-image-editor-edit-action-item-icon{border:1px solid var(--mo-global-color-primary-border-hover)}.libs-ui-image-editor-edit-action-item:hover .libs-ui-image-editor-edit-action-item-icon:before{color:var(--mo-global-color-primary-text-bright-20)!important}.libs-ui-image-editor-edit-action-item[active=true] .libs-ui-image-editor-edit-action-item-icon{border:1px solid var(--mo-global-color-primary-border-active)!important;background-color:var(--mo-global-color-primary-background-95)!important}.libs-ui-image-editor-edit-action-item[active=true] .libs-ui-image-editor-edit-action-item-icon:before{color:var(--mo-global-color-primary-text-active)!important}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { 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: LibsUiComponentsModalComponent, selector: "libs_ui-components-modal", inputs: ["show", "mode", "isBackdropTransparent", "isBackgroundTransparentModal", "isSizeBackdropByWidthHeightInput", "hasShadowBoxWhenHiddenBackDropTransparent", "classIncludeModalWrapper", "zIndex", "width", "height", "maxWidth", "maxHeight", "minWidth", "isFullScreen", "disable", "ignoreCommunicateMicroEvent", "headerConfig", "bodyConfig", "footerConfig", "buttonsFooter", "title", "titleUseXssFilter", "titleUseTooltip", "titleUseInnerText"], outputs: ["showChange", "widthChange", "heightChange", "maxWidthChange", "maxHeightChange", "minWidthChange", "disableChange", "buttonsFooterChange", "outScrollContent", "outEvent", "outFunctionControl"] }, { kind: "component", type: LibsUiComponentsInputsValidComponent, selector: "libs_ui-components-inputs-valid", inputs: ["item", "labelConfig", "emitEmptyInDataTypeNumber", "ignoreBlockInputMaxValue", "fieldNameBind", "showCount", "typeComponentSelectItem", "valueComponentSelectItem", "disableComponentSelectItem", "tagInput", "dataType", "typeInput", "modeInput", "resetAutoCompletePassword", "textAreaEnterNotNewLine", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "ignoreWidthInput100", "classIncludeInput", "classContainerInput", "readonly", "disable", "noBorder", "backgroundNone", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "classContainerBottomInput", "autoRemoveEmoji", "defaultHeight", "maxHeightTextArea", "minHeightTextArea", "ignoreShowError", "borderError", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "zIndexPopoverContent", "unitsLeft", "configUnitLeft", "keySelectedUnitLeft", "unitsRight", "configUnitRight", "keySelectedUnitRight", "maxValueNumber", "minValueNumber", "ignoreContentLeft", "ignoreContentRight", "isBaselineStyle", "valuePatternShowError", "validPattern", "validRequired", "validMinLength", "validMinValue", "validMaxValue", "validMaxLength", "functionValid", "maxLength", "positionMessageErrorStartInput", "classInclude", "resize", "templateLeftBottomInput", "templateRightBottomInput", "onlyAcceptNegativeValue", "autoAddZeroLessThan10InTypeInt", "maxLengthNumberCount", "classMessageErrorInclude", "ignoreStopPropagationEvent", "ignoreUnitRightClassReadOnly", "paddingRightCustomSpecific", "focusTimeOut", "deboundTimeValiate"], outputs: ["itemChange", "outValueChange", "outSelect", "outIconLeft", "outIconRight", "outClickButtonLabel", "outSwitchEventLabel", "outLabelRightClick", "outEnterInputEvent", "outHeightAreaChange", "outFunctionsControl", "outFocusAndBlur", "outChangeValueByButtonUpDown"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsSpinnerComponent, selector: "libs_ui-components-spinner", inputs: ["type", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
769
769
|
}
|
|
770
770
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsImageEditorComponent, decorators: [{
|
|
771
771
|
type: Component,
|
|
@@ -779,4 +779,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
779
779
|
type: Inject,
|
|
780
780
|
args: [LINK_IMAGE_ERROR_TOKEN_INJECT]
|
|
781
781
|
}] }] });
|
|
782
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbWFnZS1lZGl0b3Ivc3JjL2ltYWdlLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW1hZ2UtZWRpdG9yL3NyYy9pbWFnZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUE0QixNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQWEsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFMLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRS9FLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLDZCQUE2QixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FB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QixFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4TixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4TixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4TixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4TixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoSyxDQUFDO0lBRU8sU0FBUyxDQUFDLE9BQW1CLEVBQUUsU0FBaUIsRUFBRSxJQUFxRSxFQUFFLFFBQTRCLEVBQUUsUUFBNkI7UUFDMUwsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFRLE9BQU8sQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUNqRSxHQUFHLENBQUMsQ0FBQyxDQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3RCLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUM7Z0JBQ2pELENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNyQixDQUFDO1lBQ0QsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRTdCLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUFBLENBQUM7SUFFTSxxQkFBcUI7UUFDM0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9CLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNqQyxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBRTdCLElBQUksS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMvQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2xELEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsTUFBYztRQUNwRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDbkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUU5RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxNQUFlO1FBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJ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LE1BQU0sQ0FBQyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztRQUM1QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFHbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFDaEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDOUYsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMs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QUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMvRCxDQUFDO3dHQXYyQlUsb0NBQW9DLGtCQStEZiw2QkFBNkI7NEZBL0RsRCxvQ0FBb0MsZ3NHQzlCakQsdWthQWdTQSxvMUNEdFFJLGdCQUFnQixtSkFBRSxlQUFlLDRGQUFFLGdDQUFnQyxvZ0JBQUUsOEJBQThCLG10QkFDbkcsb0NBQW9DLDh6REFBRSxzQ0FBc0Msc2pCQUFFLGdDQUFnQzs7NEZBR3JHLG9DQUFvQztrQkFaaEQsU0FBUzsrQkFFRSxpQ0FBaUMsbUJBRzFCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxnQ0FBZ0MsRUFBRSw4QkFBOEI7d0JBQ25HLG9DQUFvQyxFQUFFLHNDQUFzQyxFQUFFLGdDQUFnQztxQkFDL0c7OzBCQWlFWSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBJbmplY3QsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBvdXRwdXQsIHNpZ25hbCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c01vZGFsQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1tb2RhbCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc3Bpbm5lcic7XG5pbXBvcnQgeyBJQXNwZWN0UmF0aW8sIElCb3VuZGluZ0NsaWVudFJlY3QsIElFdmVudCB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICdAbGlicy11aS9zZXJ2aWNlcy1keW5hbWljLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBjb252ZXJ0QmFzZTY0VG9CbG9iLCBnZXQsIGlzTmlsLCBMSU5LX0lNQUdFX0VSUk9SX1RPS0VOX0lOSkVDVCwgc2V0IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lcmdlTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNyb3BSYXRpb25JdGVtcywgZ2V0Q3JvcFJlY3RJbWFnZSwgZ2V0RGF0YVVybCwgZ2V0U3R5bGVzT2ZFbGVtZW50LCBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3cgfSBmcm9tICcuL2RlZmluZXMvaW1hZ2UtZWRpdG9yLmRlZmluZSc7XG5pbXBvcnQgeyBJSW1hZ2VFZGl0b3JGdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLWV2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJQ3JvcFJhdGlvSXRlbSwgSUNyb3BTaXplLCBJUmVjdENsaXAsIElSZXNpemVEYXRhLCBJU2F2ZUZpbGUsIElTdGFydE1vdXNlRGltLCBJU3R5bGVzLCBNT0RFX0VESVQsIFRZUEVfTU9ERV9TQVZFLCBUWVBFX1JFU0laRV9TVEFURSB9IGZyb20gJy4vaW50ZXJmYWNlcy9pbWFnZS1lZGl0b3IuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNJbWFnZUVkaXRvclJlc2l6ZUNvbXBvbmVudCB9IGZyb20gJy4vcmVzaXplL3Jlc2l6ZS5jb21wb25lbnQnO1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWltYWdlX2VkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWFnZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vaW1hZ2UtZWRpdG9yLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LCBUcmFuc2xhdGVNb2R1bGUsIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzTW9kYWxDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c1NwaW5uZXJDb21wb25lbnQsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0ltYWdlRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcHJvdGVjdGVkIGxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgbG9hZGluZ0ltYWdlID0gc2lnbmFsKHRydWUpO1xuICBwcm90ZWN0ZWQgY2hhbmdlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBvcmlnaW5XaWR0aCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgb3JpZ2luSGVpZ2h0ID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBjcm9wUmF0aW9JdGVtcyA9IHNpZ25hbDxBcnJheTxJQ3JvcFJhdGlvSXRlbT4+KGNyb3BSYXRpb25JdGVtcygpKTtcbiAgcHJvdGVjdGVkIGNyb3BSYXRpb0l0ZW1TZWxlY3RlZCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIGNyb3BTaXplID0gc2lnbmFsPElDcm9wU2l6ZT4oeyB3aWR0aDogMjAsIGhlaWdodDogMjAgfSk7XG4gIHByb3RlY3RlZCByZXNpemVEYXRhID0gc2lnbmFsPElSZXNpemVEYXRhPih7IHJhdGlvOiAxMDAsIHdpZHRoOiA2MDAsIGhlaWdodDogODAwIH0pO1xuICBwcm90ZWN0ZWQgZHJhZ0dyaWRDcm9wID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcml2YXRlIGltYWdlID0gbmV3IEltYWdlKCk7XG4gIHByaXZhdGUgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gIHByaXZhdGUgY29udGFpbmVySGVpZ2h0ID0gc2lnbmFsKDgwMCk7XG4gIHByaXZhdGUgY29udGFpbmVyV2lkdGggPSBzaWduYWwoMTIwMCk7XG4gIHByaXZhdGUgaW1nQ29udGFpbmVyUmVjdCA9IHNpZ25hbDxJQm91bmRpbmdDbGllbnRSZWN0Pih7IHRvcDogMCwgbGVmdDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcbiAgcHJpdmF0ZSByZWN0Q2xpcCA9IHNpZ25hbDxJUmVjdENsaXA+KHsgdG9wOiAwLCBsZWZ0OiAwLCByaWdodDogMCwgYm90dG9tOiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH0pO1xuICBwcml2YXRlIHJlc2l6ZVN0YXRlID0gc2lnbmFsPFRZUEVfUkVTSVpFX1NUQVRFPignbm9uZScpO1xuICBwcml2YXRlIG1vdmVTdGF0ZSA9IHNpZ25hbDwnY2xpcCcgfCAnaW1hZ2UnIHwgJ25vbmUnPignbm9uZScpO1xuICBwcml2YXRlIHN0YXJ0TW91c2VEaW0gPSBzaWduYWw8SVN0YXJ0TW91c2VEaW0+KHsgY2xpZW50WDogMCwgY2xpZW50WTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCwgdG9wOiAwLCBsZWZ0OiAwLCBpbWFnZVRvcDogMCwgaW1hZ2VMZWZ0OiAwLCBpbWFnZVdpZHRoOiAwLCBpbWFnZUhlaWdodDogMCB9KTtcbiAgcHJpdmF0ZSBkYXRhVXJsT3JpZ2luID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcml2YXRlIHJhdGlvVmFsdWUgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5IZWlnaHQgPSAyMDtcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5XaWR0aCA9IDIwO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVzaXplQ29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPExpYnNVaUNvbXBvbmVudHNJbWFnZUVkaXRvclJlc2l6ZUNvbXBvbmVudD47XG5cblxuICByZWFkb25seSBtb2RlU2hvd0J1dHRvbiA9IGlucHV0PE1PREVfRURJVD4oJ3NhdmUtZmlsZScpO1xuICByZWFkb25seSBtaW1ldHlwZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigxMjAwKTtcbiAgcmVhZG9ubHkgaW1nU3JjID0gbW9kZWwucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvcmlnaW5VcmwgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG5hbWVGaWxlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBoYXNab29tID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBhc3BlY3RSYXRpbyA9IGlucHV0PElBc3BlY3RSYXRpbz4oKTtcbiAgcmVhZG9ubHkgcmVxdWlyZWRDcm9wRm9sbG93UmF0aW8gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkgaW1hZ2VPcmlnaW4gPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2ltYWdlT3JpZ2luJyk7XG4gIHJlYWRvbmx5IGltYWdlQ2xpcCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaW1hZ2VDbGlwJyk7XG4gIHJlYWRvbmx5IGltYWdlRWRpdG9yQ29udGFpbmVyID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdpbWFnZUVkaXRvckNvbnRhaW5lcicpO1xuICByZWFkb25seSBpbWFnZUNvbnRhaW5lciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaW1hZ2VDb250YWluZXInKTtcbiAgcmVhZG9ubHkgY3JvcEFyZWEgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BBcmVhJyk7XG4gIHJlYWRvbmx5IGNyb3BUTCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcFRMJyk7XG4gIHJlYWRvbmx5IGNyb3BCTCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcEJMJyk7XG4gIHJlYWRvbmx5IGNyb3BCUiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcEJSJyk7XG4gIHJlYWRvbmx5IGNyb3BUUiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcFRSJyk7XG4gIHJlYWRvbmx5IGNyb3BMaW5lVkwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BMaW5lVkwnKTtcbiAgcmVhZG9ubHkgY3JvcExpbmVWUiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcExpbmVWUicpO1xuICByZWFkb25seSBjcm9wTGluZUhUID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjcm9wTGluZUhUJyk7XG4gIHJlYWRvbmx5IGNyb3BMaW5lSEIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BMaW5lSEInKTtcbiAgcmVhZG9ubHkgY2lyY2xlVEwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2NpcmNsZVRMJyk7XG4gIHJlYWRvbmx5IGNpcmNsZVRSID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjaXJjbGVUUicpO1xuICByZWFkb25seSBjaXJjbGVCTCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY2lyY2xlQkwnKTtcbiAgcmVhZG9ubHkgY2lyY2xlQlIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2NpcmNsZUJSJyk7XG5cbiAgcmVhZG9ubHkgb3V0Q2xvc2UgPSBvdXRwdXQ8eyBpc0NsaWNrQnV0dG9uQ2xvc2U6IGJvb2xlYW4gfT4oKTtcbiAgcmVhZG9ubHkgb3V0U2F2ZUZpbGUgPSBvdXRwdXQ8SVNhdmVGaWxlPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElJbWFnZUVkaXRvckZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuXG4gIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudFNlcnZpY2UgPSBpbmplY3QoTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoTElOS19JTUFHRV9FUlJPUl9UT0tFTl9JTkpFQ1QpIHByaXZhdGUgbGlua0ltYWdlRXJyb3I6IHN0cmluZykge1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmFzcGVjdFJhdGlvKCkpIHtcbiAgICAgIHRoaXMuZHJhZ0dyaWRDcm9wLnNldCh0cnVlKTtcbiAgICAgIGNvbnN0IGFzcGVjdFJhdGlvRm91bmQgPSB0aGlzLmNyb3BSYXRpb0l0ZW1zKCkuZmluZChpdGVtID0+IGl0ZW0ua2V5ID09PSB0aGlzLmFzcGVjdFJhdGlvKCk/LmtleSk7XG5cbiAgICAgIHRoaXMuY3JvcFJhdGlvSXRlbVNlbGVjdGVkLnNldChhc3BlY3RSYXRpb0ZvdW5kPy5rZXkgfHwgdGhpcy5jcm9wUmF0aW9JdGVtcygpWzBdLmtleSk7XG4gICAgICB0aGlzLnVwZGF0ZU9yaWdpbkltYWdlU2l6ZSgpO1xuICAgICAgdGhpcy5jaGFuZ2VkSW1hZ2UodHJ1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVNb2RhbFNpemUoKTtcbiAgICB0aGlzLmluaXREYXRhKCk7XG4gICAgdGhpcy5pbml0TW91c2VFdmVudCgpO1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHtcbiAgICAgIGNyb3BJbWFnZTogdGhpcy5jcm9wSW1hZ2UuYmluZCh0aGlzKSxcbiAgICAgIHNldExvYWRpbmdTdGF0ZTogKGxvYWRpbmc6IGJvb2xlYW4pID0+IHRoaXMubG9hZGluZy5zZXQobG9hZGluZylcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVySW1hZ2VMb2FkZWQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZU1vZGFsU2l6ZSgpO1xuICAgICAgdGhpcy5sb2FkaW5nSW1hZ2Uuc2V0KGZhbHNlKTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJJbWFnZUVycm9yKGU6IEVycm9yRXZlbnQpIHtcbiAgICBjb25zb2xlLmxvZygnZScsIGUpO1xuICAgIChlIGFzIElFdmVudCkudGFyZ2V0LnNyYyA9IHRoaXMubGlua0ltYWdlRXJyb3I7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vZGFsU2l6ZSgpIHtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSAxMDA7XG4gICAgY29uc3QgbWF4V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCAtIDQwMDtcblxuICAgIHRoaXMuY29udGFpbmVySGVpZ2h0LnNldChtYXhIZWlnaHQgLSAxMjQpO1xuICAgIHRoaXMuY29udGFpbmVyV2lkdGguc2V0KG1heFdpZHRoIC0gMzg0KTtcbiAgICB0aGlzLnVwZGF0ZU9yaWdpbkltYWdlU2l6ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RGF0YSgpIHtcbiAgICB0aGlzLmltZ0NvbnRhaW5lclJlY3Quc2V0KHRoaXMuaW1hZ2VDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICB0aGlzLmltYWdlLnNldEF0dHJpYnV0ZSgnY3Jvc3NvcmlnaW4nLCAnYW5vbnltb3VzJyk7XG4gICAgdGhpcy5pbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLmltZ0NvbnRhaW5lclJlY3Quc2V0KHRoaXMuaW1hZ2VDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2UuaGVpZ2h0O1xuICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlLndpZHRoO1xuICAgICAgdGhpcy5vcmlnaW5IZWlnaHQuc2V0KHRoaXMuaW1hZ2UuaGVpZ2h0KTtcbiAgICAgIHRoaXMub3JpZ2luV2lkdGguc2V0KHRoaXMuaW1hZ2Uud2lkdGgpO1xuXG4gICAgICB0aGlzLnVwZGF0ZU9yaWdpbkltYWdlU2l6ZSgpO1xuICAgICAgdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKT8uZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuICAgICAgdGhpcy5kYXRhVXJsT3JpZ2luLnNldChnZXREYXRhVXJsKHRoaXMuY2FudmFzLCB0aGlzLm1pbWV0eXBlKCksIHRoaXMuaW1hZ2Uuc3JjKSk7XG4gICAgICB0aGlzLmltZ1NyYy5zZXQodGhpcy5kYXRhVXJsT3JpZ2luKCkpO1xuICAgIH07XG4gICAgdGhpcy5pbWFnZS5zcmMgPSB0aGlzLmltZ1NyYygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0TW91c2VFdmVudCgpIHtcbiAgICBjb25zdCBtb3VzZVVwID0gdGhpcy5pbml0RXZlbnQoeyBuYXRpdmVFbGVtZW50OiBkb2N1bWVudCB9LCAnbW91c2V1cCcsIHsgY2FsbFN0b3BQcm9wYWdhdGlvbjogdHJ1ZSwgY2FsbFByZXZlbnREZWZhdWx0OiB0cnVlIH0sIHVuZGVmaW5lZCwgKCkgPT4gdGhpcy5oYW5kbGVyTW91c2V1cCgpKTtcbiAgICBjb25zdCBtb3VzZU1vdmUgPSB0aGlzLmluaXRFdmVudCh7IG5hdGl2ZUVsZW1lbnQ6IGRvY3VtZW50IH0sICdtb3VzZW1vdmUnLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9KS5waXBlKHRha2VVbnRpbChtb3VzZVVwKSk7XG5cbiAgICB0aGlzLmluaXRFdmVudCh0aGlzLmltYWdlRWRpdG9yQ29udGFpbmVyKCksICd3aGVlbCcsIHsgY2FsbFN0b3BQcm9wYWdhdGlvbjogdHJ1ZSB9LCB1bmRlZmluZWQsIChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVyTW91c2V3aGVlbChlKSkuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbml0RXZlbnQoeyBuYXRpdmVFbGVtZW50OiB3aW5kb3cgfSwgJ3Jlc2l6ZScsIHt9LCB1bmRlZmluZWQsICgpID0+IHRoaXMudXBkYXRlTW9kYWxTaXplKCkpLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuaW1hZ2VDb250YWluZXIoKSwgJ21vdXNlZG93bicsIHsgY2FsbFN0b3BQcm9wYWdhdGlvbjogdHJ1ZSwgY2FsbFByZXZlbnREZWZhdWx0OiB0cnVlIH0sIG1vdXNlTW92ZSwgKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJJbWFnZUNvbnRhaW5lck1vdXNlZG93bihlKSkuc3Vic2NyaWJlKChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVyTW91c2Vtb3ZlKGUpKTtcbiAgICB0aGlzLmluaXRFdmVudCh0aGlzLmNyb3BUTCgpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHsgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnVEwnKSB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcEJMKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4geyB0aGlzLmhhbmRsZXJDcm9wUmVzaXplKGUsICdCTCcpIH0pLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5jcm9wQlIoKSwgJ21vdXNlZG93bicsIHsgY2FsbFN0b3BQcm9wYWdhdGlvbjogdHJ1ZSwgY2FsbFByZXZlbnREZWZhdWx0OiB0cnVlIH0sIG1vdXNlTW92ZSwgKGU6IEV2ZW50KSA9PiB7IHRoaXMuaGFuZGxlckNyb3BSZXNpemUoZSwgJ0JSJykgfSkuc3Vic2NyaWJlKChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVyTW91c2Vtb3ZlKGUpKTtcbiAgICB0aGlzLmluaXRFdmVudCh0aGlzLmNyb3BUUigpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHsgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnVFInKSB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcExpbmVWTCgpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHsgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnVkwnKSB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcExpbmVWUigpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHsgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnVlInKSB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcExpbmVIVCgpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHsgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnSFQnKSB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcExpbmVIQigpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHsgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnSEInKSB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcEFyZWEoKSwgJ21vdXNlZG93bicsIHt9LCB1bmRlZmluZWQsIChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVyTW91c2Vkb3duQ3JvcEFyZWEoZSkpLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRFdmVudChlbGVtZW50OiBFbGVtZW50UmVmLCBldmVudE5hbWU6IHN0cmluZywgZmxhZzogeyBjYWxsU3RvcFByb3BhZ2F0aW9uPzogYm9vbGVhbiwgY2FsbFByZXZlbnREZWZhdWx0PzogYm9vbGVhbiB9LCBvYnNNZXJnZT86IE9ic2VydmFibGU8RXZlbnQ+LCBjYWxsYmFjaz86IChlOiBFdmVudCkgPT4gdm9pZCk6IE9ic2VydmFibGU8RXZlbnQ+IHtcbiAgICBjb25zdCBvYnMgPSBmcm9tRXZlbnQ8RXZlbnQ+KGVsZW1lbnQubmF0aXZlRWxlbWVudCwgZXZlbnROYW1lKS5waXBlKFxuICAgICAgdGFwKChlOiBFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZmxhZy5jYWxsU3RvcFByb3BhZ2F0aW9uICYmIGU/LnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZsYWcuY2FsbFByZXZlbnREZWZhdWx0ICYmIGU/LnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpO1xuXG4gICAgaWYgKG9ic01lcmdlKSB7XG4gICAgICByZXR1cm4gb2JzLnBpcGUobWVyZ2VNYXAoKCkgPT4gb2JzTWVyZ2UpLCAodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkpO1xuICAgIH1cblxuICAgIHJldHVybiBvYnM7XG4gIH07XG5cbiAgcHJpdmF0ZSB1cGRhdGVPcmlnaW5JbWFnZVNpemUoKSB7XG4gICAgbGV0IHdpZHRoID0gdGhpcy5vcmlnaW5XaWR0aCgpO1xuICAgIGxldCBoZWlnaHQgPSB0aGlzLm9yaWdpbkhlaWdodCgpO1xuICAgIGNvbnN0IHJhdGlvID0gd2lkdGggLyBoZWlnaHQ7XG5cbiAgICBpZiAod2lkdGggPj0gaGVpZ2h0KSB7XG4gICAgICB3aWR0aCA9IE1hdGgubWluKHRoaXMuY29udGFpbmVyV2lkdGgoKSwgd2lkdGgpO1xuICAgICAgaGVpZ2h0ID0gTWF0aC5taW4od2lkdGggLyByYXRpbywgdGhpcy5jb250YWluZXJIZWlnaHQoKSk7XG4gICAgICB3aWR0aCA9IGhlaWdodCAqIHJhdGlvO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWlnaHQgPSBNYXRoLm1pbih0aGlzLmNvbnRhaW5lckhlaWdodCgpLCBoZWlnaHQpO1xuICAgICAgd2lkdGggPSBoZWlnaHQgKiByYXRpbztcbiAgICB9XG4gICAgdGhpcy5zZXRJbWFnZVBvc2l0aW9uKHdpZHRoLCBoZWlnaHQpO1xuICAgIHRoaXMudXBkYXRlQ3JvcEFyZWFQb3MoKTtcbiAgICB0aGlzLnVwZGF0ZVJlY3RDbGlwUG9zKCk7XG4gIH1cblxuICBwcml2YXRlIHNldEltYWdlUG9zaXRpb24od2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5jb250YWluZXJXaWR0aCgpIC8gMiAtIHdpZHRoIC8gMjtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmNvbnRhaW5lckhlaWdodCgpIC8gMiAtIGhlaWdodCAvIDI7XG4gICAgY29uc3Qgc3R5bGVzID0geyB3aWR0aCwgaGVpZ2h0LCB0b3AsIGxlZnQsIGRpc3BsYXk6ICdibG9jaycgfTtcblxuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZU9yaWdpbigpLCBzdHlsZXMpO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZUNsaXAoKSwgc3R5bGVzKTtcbiAgICB0aGlzLnNldENpcmNsZVBvc2l0aW9uKHN0eWxlcyk7XG4gIH1cblxuICBwcml2YXRlIHNldENpcmNsZVBvc2l0aW9uKHN0eWxlczogSVN0eWxlcykge1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jaXJjbGVUTCgpLCB7IHRvcDogKHN0eWxlcy50b3AgfHwgMCkgLSA1LCBsZWZ0OiAoc3R5bGVzLmxlZnQgfHwgMCkgLSA1IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jaXJjbGVUUigpLCB7IHRvcDogKHN0eWxlcy50b3AgfHwgMCkgLSA1LCBsZWZ0OiAoc3R5bGVzLmxlZnQgfHwgMCkgKyAoc3R5bGVzLndpZHRoIHx8IDApIC0gMTAgfSk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNpcmNsZUJMKCksIHsgdG9wOiAoc3R5bGVzLnRvcCB8fCAwKSArIChzdHlsZXMuaGVpZ2h0IHx8IDApIC0gMTAsIGxlZnQ6IChzdHlsZXMubGVmdCB8fCAwKSAtIDUgfSk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNpcmNsZUJSKCksIHsgdG9wOiAoc3R5bGVzLnRvcCB8fCAwKSArIChzdHlsZXMuaGVpZ2h0IHx8IDApIC0gMTAsIGxlZnQ6IChzdHlsZXMubGVmdCB8fCAwKSArIChzdHlsZXMud2lkdGggfHwgMCkgLSAxMCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ3JvcEFyZWFQb3MoKSB7XG4gICAgY29uc3QgW2ltZ1RvcCwgaW1nTGVmdCwgaW1nV2lkdGgsIGltZ0hlaWdodF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlQ2xpcCgpLm5hdGl2ZUVsZW1lbnQsIFsnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnLCAnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0J10pO1xuXG4gICAgY29uc3QgcmVjdEltZzogSUJvdW5kaW5nQ2xpZW50UmVjdCA9IHtcbiAgICAgIHRvcDogTWF0aC5tYXgoMCwgaW1nVG9wKSxcbiAgICAgIGxlZnQ6IE1hdGgubWF4KDAsIGltZ0xlZnQpLFxuICAgICAgd2lkdGg6IGltZ1dpZHRoLFxuICAgICAgaGVpZ2h0OiBpbWdIZWlnaHRcbiAgICB9O1xuXG4gICAgcmVjdEltZy53aWR0aCA9IE1hdGgubWluKGltZ1dpZHRoLCB0aGlzLmNvbnRhaW5lcldpZHRoKCkgLSBpbWdMZWZ0KTtcbiAgICBpZiAoaW1nTGVmdCA8IDApIHtcbiAgICAgIHJlY3RJbWcud2lkdGggPSBNYXRoLm1pbihpbWdXaWR0aCArIGltZ0xlZnQsIHRoaXMuY29udGFpbmVyV2lkdGgoKSk7XG4gICAgfVxuICAgIHJlY3RJbWcuaGVpZ2h0ID0gTWF0aC5taW4oaW1nSGVpZ2h0LCB0aGlzLmNvbnRhaW5lckhlaWdodCgpIC0gaW1nVG9wKTtcbiAgICBpZiAoaW1nVG9wIDwgMCkge1xuICAgICAgcmVjdEltZy5oZWlnaHQgPSBNYXRoLm1pbihpbWdUb3AgKyBpbWdIZWlnaHQsIHRoaXMuY29udGFpbmVySGVpZ2h0KCkpO1xuICAgIH1cbiAgICB0aGlzLnJhdGlvVmFsdWUuc2V0KHRoaXMuZ2V0Q3JvcFJhdGlvVmFsdWUoKSk7XG4gICAgaWYgKCF0aGlzLnJhdGlvVmFsdWUoKSkge1xuICAgICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHJlY3RJbWcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB3aWR0aCA9IHJlY3RJbWcud2lkdGg7XG4gICAgbGV0IGhlaWdodCA9IHdpZHRoIC8gdGhpcy5yYXRpb1ZhbHVlKCk7XG5cbiAgICB3aWR0aCA9IE1hdGgubWluKHJlY3RJbWcud2lkdGgsIHdpZHRoKTtcbiAgICBoZWlnaHQgPSB3aWR0aCAvIHRoaXMucmF0aW9WYWx1ZSgpO1xuICAgIGhlaWdodCA9IE1hdGgubWluKHJlY3RJbWcuaGVpZ2h0LCBoZWlnaHQpO1xuICAgIHdpZHRoID0gaGVpZ2h0ICogdGhpcy5yYXRpb1ZhbHVlKCk7XG4gICAgY29uc3QgdG9wID0gcmVjdEltZy50b3AgKyAocmVjdEltZy5oZWlnaHQgLSBoZWlnaHQpIC8gMjtcbiAgICBjb25zdCBsZWZ0ID0gcmVjdEltZy5sZWZ0ICsgKHJlY3RJbWcud2lkdGggLSB3aWR0aCkgLyAyO1xuXG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgd2lkdGgsIGhlaWdodCwgdG9wLCBsZWZ0IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDcm9wUmF0aW9WYWx1ZSgpIHtcbiAgICBjb25zdCBjcm9wUmF0aW8gPSB0aGlzLmFzcGVjdFJhdGlvKCkgfHwgdGhpcy5jcm9wUmF0aW9JdGVtcygpLmZpbmQoaXRlbSA9PiBpdGVtLmtleSA9PT0gdGhpcy5jcm9wUmF0aW9JdGVtU2VsZWN0ZWQoKSk7XG5cbiAgICBpZiAoIWNyb3BSYXRpbykge1xuICAgICAgcmV0dXJuIHRoaXMub3JpZ2luV2lkdGgoKSAvIHRoaXMub3JpZ2luSGVpZ2h0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyb3BSYXRpby52YWx1ZSA/PyAwO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSZWN0Q2xpcFBvcygpIHtcbiAgICBjb25zdCByZWFjdENsaXAgPSB0aGlzLmdldFJlY3RDbGlwSW1hZ2UoKTtcblxuICAgIHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5zdHlsZS5jbGlwID0gYHJlY3QoJHtyZWFjdENsaXAudG9wfXB4LCAke3JlYWN0Q2xpcC5yaWdodH1weCwgJHtyZWFjdENsaXAuYm90dG9tfXB4LCAke3JlYWN0Q2xpcC5sZWZ0fXB4KWA7XG4gIH1cblxuICBwcml2YXRlIGdldFJlY3RDbGlwSW1hZ2UoKSB7XG5cbiAgICBjb25zdCBpbWFnZVJlY3QgPSB0aGlzLmltYWdlQ2xpcCgpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKCFpbWFnZVJlY3Qud2lkdGgpIHtcblxuICAgICAgcmV0dXJuIHRoaXMucmVjdENsaXAoKTtcbiAgICB9XG4gICAgY29uc3QgY3JvcFJlY3QgPSB0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB3aWR0aCA9IE1hdGgucm91bmQoY3JvcFJlY3Qud2lkdGgpO1xuICAgIGNvbnN0IGhlaWdodCA9IE1hdGgucm91bmQoY3JvcFJlY3QuaGVpZ2h0KTtcbiAgICBjb25zdCBsZWZ0ID0gY3JvcFJlY3QubGVmdCAtIGltYWdlUmVjdC5sZWZ0O1xuICAgIGNvbnN0IHRvcCA9IGNyb3BSZWN0LnRvcCAtIGltYWdlUmVjdC50b3A7XG4gICAgY29uc3QgcmlnaHQgPSBNYXRoLnJvdW5kKGxlZnQgKyB3aWR0aCk7XG4gICAgY29uc3QgYm90dG9tID0gTWF0aC5yb3VuZCh0b3AgKyBoZWlnaHQpO1xuICAgIGNvbnN0IHJhdGlvID0gdGhpcy5vcmlnaW5XaWR0aCgpIC8gaW1hZ2VSZWN0LndpZHRoO1xuXG5cbiAgICB0aGlzLnJlY3RDbGlwLnNldCh7IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB0aGlzLmNyb3BTaXplLnNldCh7XG4gICAgICBoZWlnaHQ6IHRvcCA+PSAwID8gKE1hdGgucm91bmQoKGJvdHRvbSAtIHRvcCkgKiByYXRpbykpIDogKE1hdGguZmxvb3IoKGJvdHRvbSAtIHRvcCkgKiByYXRpbykpLFxuICAgICAgd2lkdGg6IHRvcCA+PSAwID8gKE1hdGgucm91bmQoKChyaWdodCAtIGxlZnQpICogKHRoaXMucmF0aW9WYWx1ZSgpID8/IDEpKSAqIHJhdGlvKSkgOiAoTWF0aC5mbG9vcigoKHJpZ2h0IC0gbGVmdCkgKiAodGhpcy5yYXRpb1ZhbHVlKCkgPz8gMSkpICogcmF0aW8pKVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMucmVjdENsaXAoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlck1vdXNlbW92ZShlOiBhbnkpIHtcbiAgICBjb25zdCB0eXBlU3RhdGUgPSBbJ0JMJywgJ1RMJywgJ1RSJywgJ0JSJywgJ1ZMJywgJ1ZSJywgJ0hUJywgJ0hCJ107XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IGByZXNpemVDcm9wRm9sbG93JHt0aGlzLnJlc2l6ZVN0YXRlKCl9RGlyYDsgLy8gcmVzaXplQ3JvcEZvbGxvd0JMRGlyLCByZXNpemVDcm9wRm9sbG93VExEaXIsIHJlc2l6ZUNyb3BGb2xsb3dUUkRpciwgcmVzaXplQ3JvcEZvbGxvd0JSRGlyLCByZXNpemVDcm9wRm9sbG93VkxEaXIsIHJlc2l6ZUNyb3BGb2xsb3dWUkRpciwgcmVzaXplQ3JvcEZvbGxvd0hURGlyLCByZXNpemVDcm9wRm9sbG93SEJEaXJcblxuICAgIGlmICh0eXBlU3RhdGUuaW5jbHVkZXModGhpcy5yZXNpemVTdGF0ZSgpKSkge1xuICAgICAgKHRoaXMgYXMgYW55KVttZXRob2ROYW1lXShlKTtcbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLm1vdmVTdGF0ZSgpKSB7XG4gICAgICBjYXNlICdjbGlwJzpcbiAgICAgICAgdGhpcy5tb3ZlQ2xpcEFyZWEoZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdpbWFnZSc6XG4gICAgICAgIHRoaXMubW92ZUltYWdlKGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VkSW1hZ2UodHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd0JMRGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFkgPSBlLmNsaWVudFkgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRZO1xuICAgIGNvbnN0IG1vbWVudFggPSB0aGlzLnJhdGlvVmFsdWUoKSA/IC1tb21lbnRZICogdGhpcy5yYXRpb1ZhbHVlKCkgOiBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VIZWlnaHQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3A7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgbGVmdCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAtMSwgaGVpZ2h0OiAxLCBsZWZ0OiAxLCB0b3A6IDAgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICBsZWZ0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gd2lkdGg7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgbGVmdCwgaGVpZ2h0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd1RMRGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFkgPSBlLmNsaWVudFkgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRZO1xuICAgIGNvbnN0IG1vbWVudFggPSB0aGlzLnJhdGlvVmFsdWUoKSA/IHRoaXMucmF0aW9WYWx1ZSgpICogbW9tZW50WSA6IGUuY2xpZW50WCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFg7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VUb3A7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgdG9wLCBsZWZ0IH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IC0xLCBoZWlnaHQ6IC0xLCBsZWZ0OiAxLCB0b3A6IDEgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICBsZWZ0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gd2lkdGg7XG4gICAgdG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHRvcCwgbGVmdCwgaGVpZ2h0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd1RSRGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFkgPSBlLmNsaWVudFkgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRZO1xuICAgIGNvbnN0IG1vbWVudFggPSB0aGlzLnJhdGlvVmFsdWUoKSA/IC1tb21lbnRZICogdGhpcy5yYXRpb1ZhbHVlKCkgOiBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VXaWR0aCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgdG9wIH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IDEsIGhlaWdodDogLTEsIGxlZnQ6IDAsIHRvcDogMSB9LCBtb21lbnRYLCBtb21lbnRZKTtcblxuICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGdldFdpZHRoSGVpZ2h0UmVzaXplQ3JvcEZvbGxvdyh0aGlzLnJhdGlvVmFsdWUoKSwgd2lkdGgsIGhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCwgdGhpcy5taW5XaWR0aCwgdGhpcy5taW5IZWlnaHQpO1xuICAgIHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIGhlaWdodDtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dCUkRpcihlOiBJRXZlbnQpIHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyBtb21lbnRZICogdGhpcy5yYXRpb1ZhbHVlKCkgOiBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VIZWlnaHQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3A7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVdpZHRoIC0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdDtcbiAgICBsZXQgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IDEsIGhlaWdodDogMSwgbGVmdDogMCwgdG9wOiAwIH0sIG1vbWVudFgsIG1vbWVudFkpO1xuXG4gICAgW3dpZHRoLCBoZWlnaHRdID0gZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93KHRoaXMucmF0aW9WYWx1ZSgpLCB3aWR0aCwgaGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0LCB0aGlzLm1pbldpZHRoLCB0aGlzLm1pbkhlaWdodCk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgaGVpZ2h0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNpemVDcm9wRm9sbG93VkxEaXIgPSAoZTogSUV2ZW50KSA9PiB7XG4gICAgY29uc3QgbW9tZW50WCA9IGUuY2xpZW50WCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFg7XG4gICAgY29uc3QgbW9tZW50WSA9IHRoaXMucmF0aW9WYWx1ZSgpID8gbW9tZW50WCAvIHRoaXMucmF0aW9WYWx1ZSgpIDogMDtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3AgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVRvcDtcbiAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlTGVmdDtcbiAgICBsZXQgeyB3aWR0aCwgaGVpZ2h0LCB0b3AsIGxlZnQgfSA9IHRoaXMuZ2V0UmVjdFJlc2l6ZUNyb3BGb2xsb3coeyB3aWR0aDogLTEsIGhlaWdodDogLTEsIGxlZnQ6IDEsIHRvcDogMSB9LCBtb21lbnRYLCBtb21lbnRZKTtcblxuICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGdldFdpZHRoSGVpZ2h0UmVzaXplQ3JvcEZvbGxvdyh0aGlzLnJhdGlvVmFsdWUoKSwgd2lkdGgsIGhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCwgdGhpcy5taW5XaWR0aCwgdGhpcy5taW5IZWlnaHQpO1xuICAgIGxlZnQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggLSB3aWR0aDtcbiAgICB0b3AgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3AgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgLSBoZWlnaHQ7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgdG9wLCBsZWZ0LCBoZWlnaHQsIHdpZHRoIH0sIHRydWUpO1xuICB9O1xuXG4gIHByb3RlY3RlZCByZXNpemVDcm9wRm9sbG93VlJEaXIgPSAoZTogSUV2ZW50KSA9PiB7XG4gICAgY29uc3QgbW9tZW50WCA9IGUuY2xpZW50WCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFg7XG4gICAgY29uc3QgbW9tZW50WSA9IHRoaXMucmF0aW9WYWx1ZSgpID8gLW1vbWVudFggLyB0aGlzLnJhdGlvVmFsdWUoKSA6IDA7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VUb3A7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVdpZHRoIC0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdDtcbiAgICBsZXQgeyB3aWR0aCwgaGVpZ2h0LCB0b3AgfSA9IHRoaXMuZ2V0UmVjdFJlc2l6ZUNyb3BGb2xsb3coeyB3aWR0aDogMSwgaGVpZ2h0OiAtMSwgbGVmdDogMCwgdG9wOiAxIH0sIG1vbWVudFgsIG1vbWVudFkpO1xuXG4gICAgW3dpZHRoLCBoZWlnaHRdID0gZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93KHRoaXMucmF0aW9WYWx1ZSgpLCB3aWR0aCwgaGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0LCB0aGlzLm1pbldpZHRoLCB0aGlzLm1pbkhlaWdodCk7XG4gICAgdG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHRvcCwgaGVpZ2h0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd0hURGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFkgPSBlLmNsaWVudFkgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRZO1xuICAgIGNvbnN0IG1vbWVudFggPSB0aGlzLnJhdGlvVmFsdWUoKSA/IG1vbWVudFkgKiB0aGlzLnJhdGlvVmFsdWUoKSA6IDA7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQ7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VUb3A7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgdG9wLCBsZWZ0IH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IC0xLCBoZWlnaHQ6IC0xLCBsZWZ0OiAxLCB0b3A6IDEgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICB0b3AgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3AgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgLSBoZWlnaHQ7XG4gICAgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCAtIHdpZHRoO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHRvcCwgbGVmdCwgaGVpZ2h0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd0hCRGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFkgPSBlLmNsaWVudFkgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRZO1xuICAgIGNvbnN0IG1vbWVudFggPSB0aGlzLnJhdGlvVmFsdWUoKSA/IG1vbWVudFkgKiB0aGlzLnJhdGlvVmFsdWUoKSA6IDA7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VUb3AgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUhlaWdodCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcDtcbiAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoICsgdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlTGVmdDtcbiAgICBsZXQgeyB3aWR0aCwgaGVpZ2h0LCBsZWZ0IH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IDEsIGhlaWdodDogMSwgbGVmdDogLTEsIHRvcDogMCB9LCBtb21lbnRYLCBtb21lbnRZKTtcblxuICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGdldFdpZHRoSGVpZ2h0UmVzaXplQ3JvcEZvbGxvdyh0aGlzLnJhdGlvVmFsdWUoKSwgd2lkdGgsIGhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCwgdGhpcy5taW5XaWR0aCwgdGhpcy5taW5IZWlnaHQpO1xuICAgIGxlZnQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggLSB3aWR0aDtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyBoZWlnaHQsIGxlZnQsIHdpZHRoIH0sIHRydWUpO1xuICB9O1xuXG4gIHByaXZhdGUgZ2V0UmVjdFJlc2l6ZUNyb3BGb2xsb3cocmF0aW86IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXI7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSwgbW9tZW50WDogbnVtYmVyLCBtb21lbnRZOiBudW1iZXIpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoICsgbW9tZW50WCAqIHJhdGlvLndpZHRoO1xuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCArIG1vbWVudFkgKiByYXRpby5oZWlnaHQ7XG4gICAgY29uc3QgdG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgbW9tZW50WSAqIHJhdGlvLnRvcDtcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIG1vbWVudFggKiByYXRpby5sZWZ0O1xuXG4gICAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wIH07XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJNb3VzZXVwKCkge1xuICAgIHRoaXMuaW1hZ2VDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2N1cnNvci1tb3ZlJyk7XG4gICAgdGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnY3Vyc29yLW1vdmUnKTtcbiAgICB0aGlzLnJlc2l6ZVN0YXRlLnNldCgnbm9uZScpO1xuICAgIHRoaXMubW92ZVN0YXRlLnNldCgnbm9uZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2V3aGVlbChldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmhhc1pvb20oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQuZGVsdGFZIDwgMCkge1xuICAgICAgdGhpcy56b29tSW1hZ2UoMSAvIDEuMSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy56b29tSW1hZ2UoMS4xKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlckltYWdlQ29udGFpbmVyTW91c2Vkb3duKGU6IGFueSkge1xuICAgIGlmICh0aGlzLnJlc2l6ZVN0YXRlKCkgPT09ICdub25lJyAmJiB0aGlzLm1vdmVTdGF0ZSgpID09PSAnbm9uZScpIHtcbiAgICAgIHRoaXMubW92ZVN0YXRlLnNldCgnaW1hZ2UnKTtcbiAgICAgIHRoaXMuaGFuZGxlck1vdXNlZG93bihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJDcm9wUmVzaXplKGU6IGFueSwgcmVzaXplVHlwZTogVFlQRV9SRVNJWkVfU1RBVEUpIHtcbiAgICB0aGlzLnJlc2l6ZVN0YXRlLnNldChyZXNpemVUeXBlKTtcbiAgICB0aGlzLmRyYWdHcmlkQ3JvcC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5oYW5kbGVyTW91c2Vkb3duKGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2Vkb3duQ3JvcEFyZWEoZTogYW55KSB7XG4gICAgdGhpcy5tb3ZlU3RhdGUuc2V0KCdjbGlwJyk7XG4gICAgdGhpcy5oYW5kbGVyTW91c2Vkb3duKGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2Vkb3duKGU6IElFdmVudCkge1xuICAgIGNvbnN0IFt3aWR0aCwgaGVpZ2h0LCB0b3AsIGxlZnRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0JywgJ3N0eWxlLnRvcCcsICdzdHlsZS5sZWZ0J10pO1xuICAgIGNvbnN0IFtpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCwgaW1hZ2VUb3AsIGltYWdlTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgc3dpdGNoICh0aGlzLm1vdmVTdGF0ZSgpKSB7XG4gICAgICBjYXNlICdpbWFnZSc6XG4gICAgICAgIHRoaXMuaW1hZ2VDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2N1cnNvci1tb3ZlJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2xpcCc6XG4gICAgICAgIGlmICh3aWR0aCA9PT0gaW1hZ2VXaWR0aCAmJiBoZWlnaHQgPT09IGltYWdlSGVpZ2h0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2N1cnNvci1tb3ZlJyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0TW91c2VEaW0uc2V0KHtcbiAgICAgIGNsaWVudFg6IGUuY2xpZW50WCxcbiAgICAgIGNsaWVudFk6IGUuY2xpZW50WSxcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgdG9wOiB0b3AsXG4gICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgaW1hZ2VUb3A6IGltYWdlVG9wLFxuICAgICAgaW1hZ2VMZWZ0OiBpbWFnZUxlZnQsXG4gICAgICBpbWFnZVdpZHRoOiBpbWFnZVdpZHRoLFxuICAgICAgaW1hZ2VIZWlnaHQ6IGltYWdlSGVpZ2h0XG4gICAgfSk7XG4gICAgdGhpcy5yYXRpb1ZhbHVlLnNldCh0aGlzLmdldENyb3BSYXRpb1ZhbHVlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlSW1hZ2UoZTogSUV2ZW50KSB7XG4gICAgY29uc3QgbW9tZW50WSA9IGUuY2xpZW50WSAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFk7XG4gICAgY29uc3QgbW9tZW50WCA9IGUuY2xpZW50WCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFg7XG4gICAgY29uc3QgaW1nVG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VUb3AgKyBtb21lbnRZO1xuICAgIGNvbnN0IGltZ0xlZnQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQgKyBtb21lbnRYO1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIG1vbWVudFk7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyBtb21lbnRYO1xuXG5cbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuaW1hZ2VPcmlnaW4oKSwgeyB0b3A6IGltZ1RvcCwgbGVmdDogaW1nTGVmdCB9KTtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuaW1hZ2VDbGlwKCksIHsgdG9wOiBpbWdUb3AsIGxlZnQ6IGltZ0xlZnQgfSk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgdG9wLCBsZWZ0IH0pO1xuICAgIHRoaXMuc2V0Q2lyY2xlUG9zaXRpb24oeyB0b3A6IGltZ1RvcCwgbGVmdDogaW1nTGVmdCwgd2lkdGg6IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlV2lkdGgsIGhlaWdodDogdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VIZWlnaHQgfSk7XG4gIH1cblxuICBwcml2YXRlIG1vdmVDbGlwQXJlYShlOiBJRXZlbnQpIHtcbiAgICBjb25zdCBbaW1nV2lkdGgsIGltZ0hlaWdodCwgaW1nVG9wLCBpbWdMZWZ0XSA9IGdldFN0eWxlc09mRWxlbWVudDxudW1iZXI+KHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgY29uc3QgW2Nyb3BXaWR0aCwgY3JvcEhlaWdodF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnXSk7XG4gICAgY29uc3QgbW9tZW50WSA9IGUuY2xpZW50WSAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFk7XG4gICAgY29uc3QgbW9tZW50WCA9IGUuY2xpZW50WCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFg7XG4gICAgbGV0IHRvcCA9IE1hdGgubWF4KGltZ1RvcCwgdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgbW9tZW50WSk7XG4gICAgbGV0IGxlZnQgPSBNYXRoLm1heChpbWdMZWZ0LCB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgbW9tZW50WCk7XG5cbiAgICB0b3AgPSBNYXRoLm1pbih0b3AsIGltZ1RvcCArIGltZ0hlaWdodCAtIGNyb3BIZWlnaHQpO1xuICAgIGxlZnQgPSBNYXRoLm1pbihsZWZ0LCBpbWdMZWZ0ICsgaW1nV2lkdGggLSBjcm9wV2lkdGgpO1xuXG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgdG9wLCBsZWZ0IH0sIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB6b29tSW1hZ2Uoc2NhbGU6IG51bWJlcikge1xuICAgIGNvbnN0IFtjdXJyV2lkdGgsIGN1cnJIZWlnaHQsIGN1cnJUb3AsIGN1cnJMZWZ0XSA9IGdldFN0eWxlc09mRWxlbWVudDxudW1iZXI+KHRoaXMuaW1hZ2VPcmlnaW4oKS5uYXRpdmVFbGVtZW50LCBbJ29mZnNldFdpZHRoJywgJ29mZnNldEhlaWdodCcsICdzdHlsZS50b3AnLCAnc3R5bGUubGVmdCddKTtcbiAgICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KGN1cnJXaWR0aCAqIHNjYWxlLCA1MCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5pbWFnZU9yaWdpbigpLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ICogd2lkdGggLyB0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgY2VudGVyIHBvaW50IG9mIHRoZSBjdXJyZW50IHZpZXdcbiAgICBjb25zdCBjZW50ZXJYID0gY3VyckxlZnQgKyBjdXJyV2lkdGggLyAyO1xuICAgIGNvbnN0IGNlbnRlclkgPSBjdXJyVG9wICsgY3VyckhlaWdodCAvIDI7XG5cbiAgICAvLyBDYWxjdWxhdGUgbmV3IHBvc2l0aW9uIHRvIG1haW50YWluIGNlbnRlciBwb2ludFxuICAgIGNvbnN0IHRvcCA9IGNlbnRlclkgLSBoZWlnaHQgLyAyO1xuICAgIGNvbnN0IGxlZnQgPSBjZW50ZXJYIC0gd2lkdGggLyAyO1xuXG4gICAgLy8gR2V0IGN1cnJlbnQgY3JvcCBhcmVhIGRpbWVuc2lvbnMgYW5kIHBvc2l0aW9uXG4gICAgbGV0IFtjcm9wV2lkdGgsIGNyb3BIZWlnaHRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0J10pO1xuICAgIGNvbnN0IFtjcm9wVG9wLCBjcm9wTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudCwgWydzdHlsZS50b3AnLCAnc3R5bGUubGVmdCddKTtcblxuICAgIC8vIFNjYWxlIGNyb3AgYXJlYSBkaW1lbnNpb25zIHByb3BvcnRpb25hbGx5XG4gICAgY3JvcFdpZHRoID0gY3JvcFdpZHRoICogc2NhbGU7XG4gICAgY3JvcEhlaWdodCA9IGNyb3BIZWlnaHQgKiBzY2FsZTtcblxuICAgIC8vIENhbGN1bGF0ZSBuZXcgY3JvcCBhcmVhIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBpbWFnZVxuICAgIGNvbnN0IGNyb3BUb3BOZXcgPSB0b3AgKyAoY3JvcFRvcCAtIGN1cnJUb3ApICogc2NhbGU7XG4gICAgY29uc3QgY3JvcExlZnROZXcgPSBsZWZ0ICsgKGNyb3BMZWZ0IC0gY3VyckxlZnQpICogc2NhbGU7XG5cbiAgICAvLyBFbnN1cmUgY3JvcCBhcmVhIHN0YXlzIHdpdGhpbiBib3VuZHNcbiAgICBjb25zdCBtYXhDcm9wV2lkdGggPSB3aWR0aDtcbiAgICBjb25zdCBtYXhDcm9wSGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGNvbnN0IG1pbldpZHRoID0gMjA7XG4gICAgY29uc3QgbWluSGVpZ2h0ID0gMjA7XG5cbiAgICBjcm9wV2lkdGggPSBNYXRoLm1pbihjcm9wV2lkdGgsIG1heENyb3BXaWR0aCk7XG4gICAgY3JvcEhlaWdodCA9IE1hdGgubWluKGNyb3BIZWlnaHQsIG1heENyb3BIZWlnaHQpO1xuICAgIGNyb3BXaWR0aCA9IE1hdGgubWF4KGNyb3BXaWR0aCwgbWluV2lkdGgpO1xuICAgIGNyb3BIZWlnaHQgPSBNYXRoLm1heChjcm9wSGVpZ2h0LCBtaW5IZWlnaHQpO1xuXG4gICAgdGhpcy5yYXRpb1ZhbHVlLnNldCh0aGlzLmdldENyb3BSYXRpb1ZhbHVlKCkpO1xuICAgIGlmICh0aGlzLnJhdGlvVmFsdWUoKSkge1xuICAgICAgY3JvcEhlaWdodCA9IGNyb3BXaWR0aCAvIHRoaXMucmF0aW9WYWx1ZSgpO1xuICAgICAgY3JvcEhlaWdodCA9IE1hdGgubWluKGNyb3BIZWlnaHQsIG1heENyb3BIZWlnaHQpO1xuICAgICAgY3JvcEhlaWdodCA9IE1hdGgubWF4KGNyb3BIZWlnaHQsIG1pbkhlaWdodCk7XG4gICAgICBjcm9wV2lkdGggPSBjcm9wSGVpZ2h0ICogdGhpcy5yYXRpb1ZhbHVlKCk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGNsaXBwaW5nIHJlY3RhbmdsZVxuICAgIHRoaXMucmVjdENsaXAudXBkYXRlKHJlY3QgPT4ge1xuICAgICAgY29uc3QgcmVjdFRvcCA9IGNyb3BUb3BOZXcgLSB0b3A7XG4gICAgICBjb25zdCByZWN0TGVmdCA9IGNyb3BMZWZ0TmV3IC0gbGVmdDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnJlY3QsXG4gICAgICAgIHRvcDogcmVjdFRvcCxcbiAgICAgICAgbGVmdDogcmVjdExlZnQsXG4gICAgICAgIHJpZ2h0OiByZWN0TGVmdCArIGNyb3BXaWR0aCxcbiAgICAgICAgYm90dG9tOiByZWN0VG9wICsgY3JvcEhlaWdodFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNsaXAgPSBgcmVjdCgke3RoaXMucmVjdENsaXAoKS50b3B9cHgsICR7dGhpcy5yZWN0Q2xpcCgpLnJpZ2h0fXB4LCAke3RoaXMucmVjdENsaXAoKS5ib3R0b219cHgsICR7dGhpcy5yZWN0Q2xpcCgpLmxlZnR9cHgpYDtcblxuICAgIC8vIFVwZGF0ZSBhbGwgZWxlbWVudHMgd2l0aCBuZXcgcG9zaXRpb25zIGFuZCBkaW1lbnNpb25zXG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgdG9wOiBjcm9wVG9wTmV3LCBsZWZ0OiBjcm9wTGVmdE5ldywgd2lkdGg6IGNyb3BXaWR0aCwgaGVpZ2h0OiBjcm9wSGVpZ2h0IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZU9yaWdpbigpLCB7IHRvcCwgbGVmdCwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB0aGlzLnNldENpcmNsZVBvc2l0aW9uKHsgdG9wLCBsZWZ0LCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZUNsaXAoKSwgeyBjbGlwLCB0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgdGhpcy5nZXRSZWN0Q2xpcEltYWdlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclJvdGF0ZUltYWdlKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaW1hZ2Uuc3JjID0gdGhpcy5pbWdTcmMoKTtcbiAgICB0aGlzLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcblxuICAgICAgY29uc3QgW3dpZHRoLCBoZWlnaHRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5pbWFnZU9yaWdpbigpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0J10pO1xuICAgICAgY29uc3Qgb3JpZ2luV2lkdGggPSB0aGlzLmltYWdlLndpZHRoO1xuICAgICAgY29uc3Qgb3JpZ2luSGVpZ2h0ID0gdGhpcy5pbWFnZS5oZWlnaHQ7XG4gICAgICBsZXQgdG9wID0gcGFyc2VJbnQodGhpcy5pbWFnZU9yaWdpbigpLm5hdGl2ZUVsZW1lbnQuc3R5bGUudG9wKTtcbiAgICAgIGxldCBsZWZ0ID0gcGFyc2VJbnQodGhpcy5pbWFnZU9yaWdpbigpLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCk7XG4gICAgICBsZXQgbmV3SGVpZ2h0ID0gd2lkdGg7XG4gICAgICBsZXQgbmV3V2lkdGggPSBoZWlnaHQ7XG4gICAgICBjb25zdCByYXRpbyA9IG5ld1dpZHRoIC8gbmV3SGVpZ2h0O1xuXG4gICAgICBjYW52YXMuaGVpZ2h0ID0gb3JpZ2luV2lkdGg7XG4gICAgICBjYW52YXMud2lkdGggPSBvcmlnaW5IZWlnaHQ7XG4gICAgICBjdHg/LnRyYW5zbGF0ZShvcmlnaW5IZWlnaHQgLyAyLCBvcmlnaW5XaWR0aCAvIDIpO1xuICAgICAgY3R4Py5yb3RhdGUoTWF0aC5QSSAvIDIpO1xuICAgICAgY3R4Py5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgLW9yaWdpbldpZHRoIC8gMiwgLW9yaWdpbkhlaWdodCAvIDIpO1xuICAgICAgY29uc3Qgc3JjID0gZ2V0RGF0YVVybChjYW52YXMsIHRoaXMubWltZXR5cGUoKSwgdGhpcy5pbWFnZS5zcmMpO1xuXG4gICAgICB0aGlzLmltZ1NyYy5zZXQoc3JjKTtcbiAgICAgIG5ld1dpZHRoID0gTWF0aC5tYXgobmV3V2lkdGgsIG9yaWdpbkhlaWdodCk7XG4gICAgICBuZXdXaWR0aCA9IE1hdGgubWluKG5ld1dpZHRoLCB0aGlzLmNvbnRhaW5lcldpZHRoKCkpO1xuICAgICAgbmV3SGVpZ2h0ID0gbmV3V2lkdGggLyByYXRpbztcbiAgICAgIG5ld0hlaWdodCA9IE1hdGgubWF4KG5ld0hlaWdodCwgb3JpZ2luV2lkdGgpO1xuICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5taW4obmV3SGVpZ2h0LCB0aGlzLmNvbnRhaW5lckhlaWdodCgpKTtcbiAgICAgIG5ld1dpZHRoID0gbmV3SGVpZ2h0ICogcmF0aW87XG4gICAgICB0b3AgPSB0b3AgLSAobmV3SGVpZ2h0IC8gMiAtIGhlaWdodCAvIDIpO1xuICAgICAgbGVmdCA9IGxlZnQgLSAobmV3V2lkdGggLyAyIC0gd2lkdGggLyAyKTtcbiAgICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZU9yaWdpbigpLCB7IHNyYywgdG9wLCBsZWZ0LCB3aWR0aDogbmV3V2lkdGgsIGhlaWdodDogbmV3SGVpZ2h0IH0pO1xuICAgICAgdGhpcy5zZXRDaXJjbGVQb3NpdGlvbih7IHRvcCwgbGVmdCwgd2lkdGg6IG5ld1dpZHRoLCBoZWlnaHQ6IG5ld0hlaWdodCB9KTtcbiAgICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZUNsaXAoKSwgeyBzcmMsIHRvcCwgbGVmdCwgd2lkdGg6IG5ld1dpZHRoLCBoZWlnaHQ6IG5ld0hlaWdodCB9KTtcbiAgICAgIHRoaXMuZ2V0T3JpZ2luYWxJbWFnZVNpemUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNyb3BTaXplLnNldCh7IHdpZHRoOiB0aGlzLm9yaWdpbldpZHRoKCksIGhlaWdodDogdGhpcy5vcmlnaW5IZWlnaHQoKSB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVPcmlnaW5JbWFnZVNpemUoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jaGFuZ2VkSW1hZ2UodHJ1ZSk7XG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRPcmlnaW5hbEltYWdlU2l6ZShjYWxsYmFjaz86ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLmltYWdlLnNyYyA9IHRoaXMuaW1nU3JjKCk7XG4gICAgdGhpcy5pbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9yaWdpbldpZHRoLnNldCh0aGlzLmltYWdlLndpZHRoKTtcbiAgICAgIHRoaXMub3JpZ2luSGVpZ2h0LnNldCh0aGlzLmltYWdlLmhlaWdodCk7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjaGFuZ2VkSW1hZ2Uoc3RhdHVzOiBib29sZWFuKSB7XG4gICAgdGhpcy5jaGFuZ2VkLnNldChzdGF0dXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJGbGlwSW1hZ2UoZXZlbnQ6IEV2ZW50LCBtb2RlOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pbWFnZS5zcmMgPSB0aGlzLmltZ1NyYygpO1xuICAgIHRoaXMuaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmltYWdlLndpZHRoO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5pbWFnZS5oZWlnaHQ7XG5cbiAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgY3R4LmRyYXdJbWFnZSh0aGlzLmltYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgaWYgKG1vZGUgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIGN0eC50cmFuc2xhdGUod2lkdGgsIDApO1xuICAgICAgICAgIGN0eC5zY2FsZSgtMSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGUgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICBjdHgudHJhbnNsYXRlKDAsIGhlaWdodCk7XG4gICAgICAgICAgY3R4LnNjYWxlKDEsIC0xKTtcbiAgICAgICAgfVxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBjdHguZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIDAsIDApO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YVVybCA9IGdldERhdGFVcmwoY2FudmFzLCB0aGlzLm1pbWV0eXBlKCksIHRoaXMuaW1hZ2Uuc3JjKTtcblxuICAgICAgdGhpcy5pbWdTcmMuc2V0KGRhdGFVcmwpO1xuICAgICAgdGhpcy5pbWFnZU9yaWdpbigpLm5hdGl2ZUVsZW1lbnQuc3JjID0gZGF0YVVybDtcbiAgICAgIHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5zcmMgPSBkYXRhVXJsO1xuICAgICAgdGhpcy51cGRhdGVDcm9wQXJlYVBvcygpO1xuICAgICAgdGhpcy51cGRhdGVSZWN0Q2xpcFBvcygpO1xuICAgICAgdGhpcy5jaGFuZ2VkSW1hZ2UodHJ1ZSk7XG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUmVzdG9yZUltYWdlKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaW1nU3JjLnNldCh0aGlzLmRhdGFVcmxPcmlnaW4oKSk7XG4gICAgdGhpcy5kcmFnR3JpZENyb3Auc2V0KGZhbHNlKTtcbiAgICB0aGlzLmdldE9yaWdpbmFsSW1hZ2VTaXplKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlT3JpZ2luSW1hZ2VTaXplKCk7XG4gICAgICB0aGlzLmNoYW5nZWRJbWFnZShmYWxzZSk7XG4gICAgICB0aGlzLmNyb3BSYXRpb0l0ZW1TZWxlY3RlZC5zZXQoJycpO1xuICAgICAgdGhpcy51cGRhdGVDcm9wQXJlYVBvcygpO1xuICAgICAgdGhpcy51cGRhdGVSZWN0Q2xpcFBvcygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcm9wSW1hZ2UoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuaW1hZ2Uuc3JjID0gdGhpcy5pbWdTcmMoKTtcbiAgICAgIHRoaXMuaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luV2lkdGggPSB0aGlzLmltYWdlLndpZHRoO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHBhcnNlSW50KHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCk7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHBhcnNlSW50KHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQpO1xuICAgICAgICBjb25zdCBzY2FsZSA9IG9yaWdpbldpZHRoIC8gd2lkdGg7XG4gICAgICAgIGNvbnN0IHJlY3RDbGlwID0gdGhpcy5nZXRSZWN0Q2xpcEltYWdlKCk7XG4gICAgICAgIGNvbnN0IGNyb3BSZWN0ID0gZ2V0Q3JvcFJlY3RJbWFnZShyZWN0Q2xpcCwgd2lkdGgsIGhlaWdodCwgc2NhbGUpO1xuXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wUmVjdC5oZWlnaHQ7XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IGNyb3BSZWN0LndpZHRoO1xuICAgICAgICB0aGlzLm9yaWdpbkhlaWdodC5zZXQoY2FudmFzLmhlaWdodCk7XG4gICAgICAgIHRoaXMub3JpZ2luV2lkdGguc2V0KGNhbnZhcy53aWR0aCk7XG4gICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICBjdHguZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIGNyb3BSZWN0LmxlZnQsIGNyb3BSZWN0LnRvcCwgY3JvcFJlY3Qud2lkdGgsIGNyb3BSZWN0LmhlaWdodCwgMCwgMCwgY3JvcFJlY3Qud2lkdGgsIGNyb3BSZWN0LmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YVVybCA9IGdldERhdGFVcmwoY2FudmFzLCB0aGlzLm1pbWV0eXBlKCksIHRoaXMuaW1hZ2Uuc3JjKTtcblxuICAgICAgICB0aGlzLmNoYW5nZWRJbWFnZSh0cnVlKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhVXJsKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclNhdmVGaWxlKGV2ZW50OiBFdmVudCwgbW9kZVNhdmU6IFRZUEVfTU9ERV9TQVZFKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgZGF0YVVybCA9IGF3YWl0IHRoaXMuY3JvcEltYWdlKCk7XG4gICAgY29uc3QgZmlsZSA9IGNvbnZlcnRCYXNlNjRUb0Jsb2IoZGF0YVVybCk7XG5cbiAgICB0aGlzLm91dFNhdmVGaWxlLmVtaXQoeyBmaWxlOiBmaWxlLCB1cmw6IGRhdGFVcmwsIG1vZGU6IG1vZGVTYXZlIH0pO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckNsb3NlKGV2ZW50OiBFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMub3V0Q2xvc2UuZW1pdCh7IGlzQ2xpY2tCdXR0b25DbG9zZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0Q3JvcFJhdGlvSXRlbShldmVudDogRXZlbnQsIGtleTogc3RyaW5nKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5jcm9wUmF0aW9JdGVtU2VsZWN0ZWQuc2V0KGtleSk7XG4gICAgdGhpcy5jaGFuZ2VkLnNldCh0cnVlKTtcbiAgICB0aGlzLmRyYWdHcmlkQ3JvcC5zZXQodHJ1ZSk7XG4gICAgdGhpcy51cGRhdGVPcmlnaW5JbWFnZVNpemUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUmVzaXplKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLnJlc2l6ZUNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlc2l6ZUNvbXBvbmVudFJlZiA9IHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGlic1VpQ29tcG9uZW50c0ltYWdlRWRpdG9yUmVzaXplQ29tcG9uZW50KTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMucmVzaXplQ29tcG9uZW50UmVmLmluc3RhbmNlO1xuICAgIGNvbnN0IHN1YnMgPSBpbnN0YW5jZS5vdXRDbG9zZS5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLnJlc2l6ZUNvbXBvbmVudFJlZik7XG4gICAgICB0aGlzLnJlc2l6ZUNvbXBvbmVudFJlZiA9IHVuZGVmaW5lZDtcbiAgICAgIHN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcblxuICAgIGluc3RhbmNlLnNyYyA9IHRoaXMuaW1nU3JjKCk7XG4gICAgaW5zdGFuY2UubWltZXR5cGUgPSB0aGlzLm1pbWV0eXBlKCk7XG4gICAgaW5zdGFuY2UuekluZGV4ID0gdGhpcy56SW5kZXgoKTtcbiAgICBzdWJzLmFkZChpbnN0YW5jZS5vdXRTYXZlLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIHRoaXMucmVzaXplRGF0YS5zZXQoZXZlbnQpO1xuICAgICAgdGhpcy5zYXZlUmVzaXplKCk7XG4gICAgfSkpO1xuICAgIGluc3RhbmNlLnJlc2l6ZURhdGEgPSB7IHJhdGlvOiAxMDAsIHdpZHRoOiB0aGlzLm9yaWdpbldpZHRoKCksIGhlaWdodDogdGhpcy5vcmlnaW5IZWlnaHQoKSB9O1xuICAgIGluc3RhbmNlLm9yaWdpbldpZHRoID0gdGhpcy5vcmlnaW5XaWR0aCgpO1xuICAgIGluc3RhbmNlLm9yaWdpbkhlaWdodCA9IHRoaXMub3JpZ2luSGVpZ2h0KCk7XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5hZGRUb0JvZHkodGhpcy5yZXNpemVDb21wb25lbnRSZWYpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNhdmVSZXNpemUoKSB7XG4gICAgdGhpcy5pbWFnZS5zcmMgPSB0aGlzLmltZ1NyYygpO1xuICAgIHRoaXMuaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAgIGNhbnZhcy53aWR0aCA9IHRoaXMucmVzaXplRGF0YSgpLndpZHRoO1xuICAgICAgY2FudmFzLmhlaWdodCA9IHRoaXMucmVzaXplRGF0YSgpLmhlaWdodDtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgICBpZiAoY3R4KSB7XG4gICAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNyYyA9IGdldERhdGFVcmwoY2FudmFzLCB0aGlzLm1pbWV0eXBlKCksIHRoaXMuaW1hZ2Uuc3JjKTtcbiAgICAgIGNvbnN0IFtjdXJyV2lkdGgsIGN1cnJIZWlnaHQsIGN1cnJUb3AsIGN1cnJMZWZ0XSA9IGdldFN0eWxlc09mRWxlbWVudDxudW1iZXI+KHRoaXMuaW1hZ2VPcmlnaW4oKS5uYXRpdmVFbGVtZW50LCBbJ29mZnNldFdpZHRoJywgJ29mZnNldEhlaWdodCcsICdzdHlsZS50b3AnLCAnc3R5bGUubGVmdCddKTtcbiAgICAgIGNvbnN0IHJhdGlvID0gY3VycldpZHRoIC8gY3VyckhlaWdodDtcbiAgICAgIGxldCBuZXdXaWR0aCA9IE1hdGgubWluKHRoaXMucmVzaXplRGF0YSgpLndpZHRoLCB0aGlzLmNvbnRhaW5lcldpZHRoKCkpO1xuICAgICAgbGV0IG5ld0hlaWdodCA9IG5ld1dpZHRoIC8gcmF0aW87XG5cbiAgICAgIG5ld0hlaWdodCA9IE1hdGgubWluKHRoaXMucmVzaXplRGF0YSgpLmhlaWdodCwgdGhpcy5jb250YWluZXJIZWlnaHQoKSk7XG4gICAgICBuZXdXaWR0aCA9IG5ld0hlaWdodCAqIHJhdGlvO1xuICAgICAgTWF0aC5taW4odGhpcy5yZXNpemVEYXRhKCkuaGVpZ2h0LCB0aGlzLmNvbnRhaW5lckhlaWdodCgpKTtcbiAgICAgIGNvbnN0IHRvcCA9IGN1cnJUb3AgKyAoY3VyckhlaWdodCAtIG5ld0hlaWdodCkgLyAyO1xuICAgICAgY29uc3QgbGVmdCA9IGN1cnJMZWZ0ICsgKGN1cnJXaWR0aCAtIG5ld1dpZHRoKSAvIDI7XG4gICAgICBjb25zdCBtb3ZlbWVudFkgPSBjdXJyVG9wIC0gdG9wO1xuICAgICAgY29uc3QgbW92ZW1lbnRYID0gY3VyckxlZnQgLSBsZWZ0O1xuXG4gICAgICB0aGlzLnJlY3RDbGlwLnVwZGF0ZShyZWN0ID0+IHtcbiAgICAgICAgY29uc3QgcmVjdFRvcCA9IHJlY3QudG9wICsgbW92ZW1lbnRZO1xuICAgICAgICBjb25zdCByZWN0TGVmdCA9IHJlY3QubGVmdCArIG1vdmVtZW50WDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZWN0LFxuICAgICAgICAgIHRvcDogcmVjdFRvcCxcbiAgICAgICAgICBsZWZ0OiByZWN0TGVmdCxcbiAgICAgICAgICByaWdodDogcmVjdExlZnQgKyBuZXdXaWR0aCxcbiAgICAgICAgICBib3R0b206IHJlY3RUb3AgKyBuZXdIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2xpcCA9IGByZWN0KCR7dGhpcy5yZWN0Q2xpcCgpLnRvcH1weCwgJHt0aGlzLnJlY3RDbGlwKCkucmlnaHR9cHgsICR7dGhpcy5yZWN0Q2xpcCgpLmJvdHRvbX1weCwgJHt0aGlzLnJlY3RDbGlwKCkubGVmdH1weClgO1xuXG4gICAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuaW1hZ2VPcmlnaW4oKSwgeyBzcmMsIHRvcCwgbGVmdCwgd2lkdGg6IG5ld1dpZHRoLCBoZWlnaHQ6IG5ld0hlaWdodCB9KTtcbiAgICAgIHRoaXMuc2V0Q2lyY2xlUG9zaXRpb24oeyB0b3AsIGxlZnQsIHdpZHRoOiBuZXdXaWR0aCwgaGVpZ2h0OiBuZXdIZWlnaHQgfSk7XG4gICAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuaW1hZ2VDbGlwKCksIHsgc3JjLCBjbGlwLCB0b3AsIGxlZnQsIHdpZHRoOiBuZXdXaWR0aCwgaGVpZ2h0OiBuZXdIZWlnaHQgfSk7XG4gICAgICB0aGlzLmltZ1NyYy5zZXQoc3JjKTtcbiAgICAgIHRoaXMub3JpZ2luV2lkdGguc2V0KHRoaXMucmVzaXplRGF0YSgpLndpZHRoKTtcbiAgICAgIHRoaXMub3JpZ2luSGVpZ2h0LnNldCh0aGlzLnJlc2l6ZURhdGEoKS5oZWlnaHQpO1xuICAgICAgdGhpcy51cGRhdGVDcm9wQXJlYVBvcygpO1xuICAgICAgdGhpcy51cGRhdGVSZWN0Q2xpcFBvcygpO1xuICAgICAgdGhpcy5jaGFuZ2VkSW1hZ2UodHJ1ZSk7XG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ3JvcFdpZHRoKCkge1xuICAgIHRoaXMucHJvY2Vzc0Nyb3BXaWR0aE9ySGVpZ2h0KCd3aWR0aCcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDcm9wSGVpZ2h0KCkge1xuICAgIHRoaXMucHJvY2Vzc0Nyb3BXaWR0aE9ySGVpZ2h0KCdoZWlnaHQnKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0Nyb3BXaWR0aE9ySGVpZ2h0KGNyb3BCeTogJ3dpZHRoJyB8ICdoZWlnaHQnKSB7XG4gICAgdGhpcy5yYXRpb1ZhbHVlLnNldCh0aGlzLmdldENyb3BSYXRpb1ZhbHVlKCkpO1xuICAgIGNvbnN0IFtjdXJySW1nV2lkdGgsIGN1cnJJbWdIZWlnaHQsIGN1cnJJbWdUb3AsIGN1cnJJbWdMZWZ0XSA9IGdldFN0eWxlc09mRWxlbWVudDxudW1iZXI+KHRoaXMuaW1hZ2VPcmlnaW4oKS5uYXRpdmVFbGVtZW50LCBbJ29mZnNldFdpZHRoJywgJ29mZnNldEhlaWdodCcsICdzdHlsZS50b3AnLCAnc3R5bGUubGVmdCddKTtcbiAgICBsZXQgW2Nyb3BXaWR0aCwgY3JvcEhlaWdodF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnXSk7XG4gICAgY29uc3QgW2Nyb3BUb3AsIGNyb3BMZWZ0XSA9IGdldFN0eWxlc09mRWxlbWVudDxudW1iZXI+KHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LCBbJ3N0eWxlLnRvcCcsICdzdHlsZS5sZWZ0J10pO1xuICAgIGNvbnN0IG1heENyb3BXaWR0aCA9IGN1cnJJbWdMZWZ0ICsgY3VyckltZ1dpZHRoIC0gY3JvcExlZnQ7XG4gICAgY29uc3QgbWF4Q3JvcEhlaWdodCA9IGN1cnJJbWdIZWlnaHQgKyBjdXJySW1nVG9wIC0gY3JvcFRvcDtcbiAgICBjb25zdCByYXRpbyA9IHRoaXMub3JpZ2luV2lkdGgoKSAvIGN1cnJJbWdXaWR0aDtcbiAgICBsZXQgY3JvcFZhbHVlID0gZ2V0KHRoaXMuY3JvcFNpemUsIGNyb3BCeSkgLyByYXRpbztcblxuICAgIGNyb3BWYWx1ZSA9IE1hdGgubWluKGNyb3BWYWx1ZSwgY3JvcEJ5ID09PSAnd2lkdGgnID8gbWF4Q3JvcFdpZHRoIDogbWF4Q3JvcEhlaWdodCk7XG4gICAgY3JvcFZhbHVlID0gTWF0aC5tYXgoMSwgY3JvcFZhbHVlKTtcbiAgICBpZiAodGhpcy5yYXRpb1ZhbHVlKCkpIHtcbiAgICAgIGlmIChjcm9wQnkgPT09ICd3aWR0aCcpIHtcbiAgICAgICAgY3JvcEhlaWdodCA9IGNyb3BWYWx1ZSAvIHRoaXMucmF0aW9WYWx1ZSgpO1xuICAgICAgICBjcm9wSGVpZ2h0ID0gTWF0aC5taW4oY3JvcEhlaWdodCwgbWF4Q3JvcEhlaWdodCk7XG4gICAgICAgIGNyb3BWYWx1ZSA9IGNyb3BIZWlnaHQgKiB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICAgICAgdGhpcy5jcm9wU2l6ZS51cGRhdGUoY3JvcFNpemUgPT4gKHsgLi4uY3JvcFNpemUsIGhlaWdodDogTWF0aC5yb3VuZChjcm9wSGVpZ2h0ICogcmF0aW8pIH0pKTtcbiAgICAgICAgdGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7Y3JvcEhlaWdodH1weGA7XG4gICAgICB9XG4gICAgICBpZiAoY3JvcEJ5ID09PSAnaGVpZ2h0Jykge1xuICAgICAgICBjcm9wV2lkdGggPSBjcm9wVmFsdWUgKiB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICAgICAgY3JvcFdpZHRoID0gTWF0aC5taW4oY3JvcFdpZHRoLCBtYXhDcm9wV2lkdGgpO1xuICAgICAgICBjcm9wVmFsdWUgPSBjcm9wV2lkdGggLyB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICAgICAgdGhpcy5jcm9wU2l6ZS51cGRhdGUoY3JvcFNpemUgPT4gKHsgLi4uY3JvcFNpemUsIHdpZHRoOiBNYXRoLnJvdW5kKGNyb3BXaWR0aCAqIHJhdGlvKSB9KSk7XG4gICAgICAgIHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7Y3JvcFdpZHRofXB4YDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jcm9wU2l6ZS51cGRhdGUoY3JvcFNpemUgPT4gKHsgLi4uY3JvcFNpemUsIFtjcm9wQnldOiBNYXRoLnJvdW5kKGNyb3BWYWx1ZSAqIHJhdGlvKSB9KSk7XG4gICAgdGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQuc3R5bGVbY3JvcEJ5XSA9IGAke2Nyb3BWYWx1ZX1weGA7XG4gICAgY29uc3QgaW1hZ2VSZWN0ID0gdGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGNyb3BSZWN0ID0gdGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBjcm9wUmVjdDtcbiAgICBjb25zdCBsZWZ0ID0gY3JvcFJlY3QubGVmdCAtIGltYWdlUmVjdC5sZWZ0O1xuICAgIGNvbnN0IHRvcCA9IGNyb3BSZWN0LnRvcCAtIGltYWdlUmVjdC50b3A7XG4gICAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gICAgY29uc3QgYm90dG9tID0gdG9wICsgaGVpZ2h0O1xuXG4gICAgdGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50LnN0eWxlLmNsaXAgPSBgcmVjdCgke3RvcH1weCwgJHtyaWdodH1weCwgJHtib3R0b219cHgsICR7bGVmdH1weClgO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdHlsZXNFbGVtZW50cyhlbGVtZW50OiBFbGVtZW50UmVmLCBzdHlsZXM6IElTdHlsZXMsIGlzVXBkYXRlUmVjdENsaXBQb3M/OiBib29sZWFuKSB7XG4gICAgT2JqZWN0LmtleXMoc3R5bGVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGdldChzdHlsZXMsIGtleSk7XG4gICAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNldChlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUsIGtleSwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IGAke3ZhbHVlfXB4YCA6IHZhbHVlKTtcbiAgICB9KTtcbiAgICBpZiAoaXNVcGRhdGVSZWN0Q2xpcFBvcykge1xuICAgICAgdGhpcy51cGRhdGVSZWN0Q2xpcFBvcygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMucmVzaXplQ29tcG9uZW50UmVmKTtcbiAgfVxufVxuIiwiPGxpYnNfdWktY29tcG9uZW50cy1tb2RhbCBbd2lkdGhdPVwiJ2NhbGMoMTAwdncgLSA0MDBweCknXCJcbiAgW2hlaWdodF09XCInY2FsYygxMDB2aCAtIDEwMHB4KSdcIlxuICBbbWluV2lkdGhdPVwiJzEyMDBweCdcIlxuICBbaGVhZGVyQ29uZmlnXT1cIntpZ25vcmVIZWFkZXJUaGVtZTogdHJ1ZSwgcmVtb3ZlQnV0dG9uQ2xvc2U6IHRydWV9XCJcbiAgW2JvZHlDb25maWddPVwie2NsYXNzSW5jbHVkZTogJyFwLTAnLCBzY3JvbGxPdmVybGF5T3B0aW9uczoge3Njcm9sbFg6ICdoaWRkZW4nLCBzY3JvbGxZOiAnaGlkZGVuJ319XCJcbiAgW2Zvb3RlckNvbmZpZ109XCJ7aGlkZGVuOiB0cnVlfVwiXG4gIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICBbYnV0dG9uc0Zvb3Rlcl09XCJbXVwiXG4gIFttb2RlXT1cIidjZW50ZXInXCI+XG4gIDxkaXYgY2xhc3M9XCJsaWJzLXVpLW1vZGFsLWhlYWRlci1jdXN0b20gdy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgcmVsYXRpdmUgbXgtWzI0cHhdIGgtWzE2cHhdXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgbGlicy11aS1mb250LWg0cyBhYnNvbHV0ZVwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICBbY29uZmlnXT1cInt6SW5kZXg6IHpJbmRleCgpfVwiPlxuICAgICAgICAgIHt7ICdpMThuX2VkaXRfZmlsZV9uYW1lJyB8IHRyYW5zbGF0ZTp7ZmlsZV9uYW1lOiBuYW1lRmlsZSgpfSB9fVxuICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICBAaWYgKG1vZGVTaG93QnV0dG9uKCkgPT09ICdzYXZlLWZpbGUnKSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiJ2J1dHRvbi10aGlyZCdcIlxuICAgICAgICAgIFtsYWJlbF09XCInaTE4bl9jYW5jZWwnXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3B5LVs2cHhdIHB4LVsxMnB4XSBtci1bMTZweF0nXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsb3NlKCRldmVudClcIiAvPlxuXG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gY2xhc3M9XCJtci1bMjRweF1cIlxuICAgICAgICAgIFtsYWJlbF09XCInaTE4bl9zYXZlJ1wiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidweS1bNnB4XSBweC1bMTJweF0nXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclNhdmVGaWxlKCRldmVudCwnc2F2ZS1maWxlJylcIiAvPlxuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFtsYWJlbF09XCInaTE4bl9zYXZlX3RvX25ld19maWxlJ1wiXG4gICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInbXgtWzE2cHhdIHB5LVs2cHhdIHB4LVsxMnB4XSdcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKSB8fCAhY2hhbmdlZCgpXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclNhdmVGaWxlKCRldmVudCwnc2F2ZS1hcGktYXMtbmV3LWZpbGUnKVwiIC8+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiJ2J1dHRvbi1zZWNvbmRhcnknXCJcbiAgICAgICAgICBbbGFiZWxdPVwiJ2kxOG5fc2F2ZSdcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3B5LVs2cHhdIHB4LVsxMnB4XSdcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKSB8fCAhY2hhbmdlZCgpXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclNhdmVGaWxlKCRldmVudCwnc2F2ZS1hcGknKVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoLVsxMnB4XSBsaWJzLXVpLWJvcmRlci1sZWZ0LWdlbmVyYWwgbXgtWzE2cHhdXCI+PC9kaXY+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gY2xhc3M9XCJtci1bMjRweF1cIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3AtWzZweF0nXCJcbiAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLXRoaXJkLWhvdmVyLWRhbmdlcidcIlxuICAgICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpXCJcbiAgICAgICAgICBbcG9wb3Zlcl09XCJ7Y29uZmlnOiB7Y29udGVudDogJ2kxOG5fZXhpdF9lZGl0X21vZGUnLCB6SW5kZXg6IHpJbmRleCgpfX1cIlxuICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tY2xvc2UnXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsb3NlKCRldmVudClcIiAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImxpYnMtdWktbW9kYWwtYm9keS1jdXN0b20gaC1mdWxsIHctZnVsbCBmbGV4XCI+XG4gICAgPGRpdiAjaW1hZ2VFZGl0b3JDb250YWluZXJcbiAgICAgIGNsYXNzPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBiZy1bI2U2ZTdlYV0gYm9yZGVyLXJhZGl1cy1ib3R0b20tbGVmdC04cHggcC1bMzJweF0gbGlicy11aS1pbnB1dC1pbWFnZS1lZGl0b3ItY29udGFpbmVyLWxlZnRcIj5cbiAgICAgIEBpZiAobG9hZGluZ0ltYWdlKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGgtZnVsbCB3LWZ1bGwgYmctWyNlNmU3ZWFdIHRvcC0wIGxlZnQtMCB6LVs1XVwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc3Bpbm5lciBbc2l6ZV09XCInbWVkaXVtJ1wiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGgtWzMycHhdIHctW2NhbGMoMTAwJS02NHB4KV0gYmctWyNlNmU3ZWFiOF0gdG9wLTAgbGVmdC1bMzJweF0gei1bMV1cIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIHctWzMycHhdIGgtZnVsbCBiZy1bI2U2ZTdlYWI4XSBsZWZ0LTAgdG9wLTAgei1bMV0gcm91bmRlZC1ibC1bOHB4XVwiPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgdy1bMzJweF0gaC1mdWxsIGJnLVsjZTZlN2VhYjhdIHJpZ2h0LTAgdG9wLTAgei1bMV1cIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGgtWzMycHhdIHctW2NhbGMoMTAwJS02NHB4KV0gYmctWyNlNmU3ZWFiOF0gYm90dG9tLTAgbGVmdC1bMzJweF0gei1bMV1cIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAjaW1hZ2VDb250YWluZXJcbiAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHJvdW5kZWQtYmwtWzhweF0gbWluLWgtMFwiPlxuICAgICAgICA8ZGl2ICNjaXJjbGVUTFxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV1cIlxuICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWRyYWdHcmlkQ3JvcCgpXCJcbiAgICAgICAgICBbY2xhc3MuZmxleF09XCJkcmFnR3JpZENyb3AoKVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0NpcmNsZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICNjaXJjbGVUUlxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV1cIlxuICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWRyYWdHcmlkQ3JvcCgpXCJcbiAgICAgICAgICBbY2xhc3MuZmxleF09XCJkcmFnR3JpZENyb3AoKVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0NpcmNsZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICNjaXJjbGVCTFxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV1cIlxuICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWRyYWdHcmlkQ3JvcCgpXCJcbiAgICAgICAgICBbY2xhc3MuZmxleF09XCJkcmFnR3JpZENyb3AoKVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0NpcmNsZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICNjaXJjbGVCUlxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV1cIlxuICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWRyYWdHcmlkQ3JvcCgpXCJcbiAgICAgICAgICBbY2xhc3MuZmxleF09XCJkcmFnR3JpZENyb3AoKVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0NpcmNsZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aW1nICNpbWFnZU9yaWdpblxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgYm9yZGVyLVs0cHhdIGJvcmRlci1bIzhlNjFlZV0gcm91bmRlZC1bNHB4XSB0b3AtWy0xMDAwcHhdIGxlZnQtWy0xMDAwcHhdXCJcbiAgICAgICAgICBsb2FkaW5nPVwibGF6eVwiXG4gICAgICAgICAgW3NyY109XCJpbWdTcmMoKVwiXG4gICAgICAgICAgKGxvYWQpPVwiaGFuZGxlckltYWdlTG9hZGVkKClcIlxuICAgICAgICAgIChlcnJvcik9XCJoYW5kbGVySW1hZ2VFcnJvcigkZXZlbnQpXCIgLz5cbiAgICAgICAgPGltZyAjaW1hZ2VDbGlwXG4gICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsxXSAgdG9wLVstMTAwMHB4XSBsZWZ0LVstMTAwMHB4XVwiXG4gICAgICAgICAgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAgIFtzcmNdPVwiaW1nU3JjKClcIlxuICAgICAgICAgIChlcnJvcik9XCJoYW5kbGVySW1hZ2VFcnJvcigkZXZlbnQpXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIHRvcC0wIGxlZnQtMCByaWdodC0wIGJvdHRvbS0wIGJnLVsjZTZlN2VhYjhdXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICNjcm9wQXJlYVxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMl0gYm9yZGVyLVs0cHhdIGJvcmRlci1bIzhlNjFlZV0gcm91bmRlZC1bNHB4XVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsXCI+XG4gICAgICAgICAgICA8ZGl2ICNjcm9wVExcbiAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsyXSBsZWZ0LVstMThweF0gdG9wLVstMTdweF0gY3Vyc29yLW53c2UtcmVzaXplXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0Fycm93XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAjY3JvcEJMXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMl0gbGVmdC1bLTE3cHhdIGJvdHRvbS1bLTE4cHhdIGN1cnNvci1uZXN3LXJlc2l6ZSByb3RhdGUtWzI3MGRlZ11cIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwic3ZnQXJyb3dcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICNjcm9wVFJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsyXSByaWdodC1bLTE3cHhdIHRvcC1bLTE3cHhdIGN1cnNvci1uZXN3LXJlc2l6ZSByb3RhdGUtWzkwZGVnXVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdBcnJvd1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgI2Nyb3BCUlxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzJdIHJpZ2h0LVstMThweF0gYm90dG9tLVstMTdweF0gY3Vyc29yLW53c2UtcmVzaXplIHJvdGF0ZS1bMTgwZGVnXVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdBcnJvd1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgI2Nyb3BMaW5lVkxcbiAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsxXSB3LVsxMnB4XSBsZWZ0LVstNnB4XSB0b3AtMCBib3R0b20tMCBjdXJzb3ItZXctcmVzaXplXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgI2Nyb3BMaW5lVlJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsxXSB3LVsxMnB4XSByaWdodC1bLTZweF0gdG9wLTAgYm90dG9tLTAgY3Vyc29yLWV3LXJlc2l6ZVwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICNjcm9wTGluZUhUXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV0gaC1bMTJweF0gbGVmdC0wIHRvcC1bLTZweF0gcmlnaHQtMCBjdXJzb3ItbnMtcmVzaXplXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgI2Nyb3BMaW5lSEJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsxXSBoLVsxMnB4XSBsZWZ0LTAgcmlnaHQtMCBib3R0b20tWy02cHhdIGN1cnNvci1ucy1yZXNpemVcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgYWJzb2x1dGUgaC1bMXB4XSB0b3AtMCBsZWZ0LTAgcmlnaHQtMFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGFic29sdXRlIGgtWzFweF0gYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTBcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSB3LVsxcHhdIHRvcC0wIGxlZnQtMCBib3R0b20tMFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGFic29sdXRlIHctWzFweF0gdG9wLTAgYm90dG9tLTAgcmlnaHQtMFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGFic29sdXRlIGgtWzJweF0gdG9wLVszMyVdIGxlZnQtMCByaWdodC0wXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgYWJzb2x1dGUgaC1bMnB4XSB0b3AtWzY2JV0gbGVmdC0wIHJpZ2h0LTBcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSB3LVsycHhdIHRvcC0wIGJvdHRvbS0wIGxlZnQtWzMzJV1cIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSB3LVsycHhdIHRvcC0wIGJvdHRvbS0wIGxlZnQtWzY2JV1cIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc3Bpbm5lciBbc2l6ZV09XCInbWVkaXVtJ1wiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInctWzMyMHB4XSBzaHJpbmstMCBwLVsxNnB4XSBiZy1bI2ZmZmZmZl0gcm91bmRlZC1ici1bOHB4XSB6LVsyXSBsaWJzLXVpLWlucHV0LWltYWdlLWVkaXRvci1jb250YWluZXItcmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItWzE2cHhdXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDRtXCI+e3sgJ2kxOG5fY3V0dGluZ19yYXRpbycgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tdGhpcmQnXCJcbiAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLXJlZnJlc2gnXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidwLVs2cHhdIG1yLVs4cHhdJ1wiXG4gICAgICAgICAgW3BvcG92ZXJdPVwie2NvbmZpZzoge2NvbnRlbnQ6ICdpMThuX3Jlc3RvcmVfdGhlX29yaWdpbmFsX3N0YXRlJywgekluZGV4OiB6SW5kZXgoKX19XCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKCkgfHwgIWNoYW5nZWQoKVwiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJSZXN0b3JlSW1hZ2UoJGV2ZW50KVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi1bMTZweF0gbGlicy11aS1pbWFnZS1lZGl0b3ItZWRpdC1kaXNwbGF5LWdyaWQtZ2FwLTE2XCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgY3JvcFJhdGlvSXRlbXMoKTsgdHJhY2sgaXRlbS5rZXkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3NpemVCdXR0b25dPVwiJ2xhcmdlJ1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKSB8fCByZXF1aXJlZENyb3BGb2xsb3dSYXRpbygpXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIml0ZW0uaWNvbisnICF0ZXh0LVsyMHB4XSdcIlxuICAgICAgICAgICAgICBbaXNBY3RpdmVdPVwiaXRlbS5rZXkgPT09IGNyb3BSYXRpb0l0ZW1TZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJTZWxlY3RDcm9wUmF0aW9JdGVtKCRldmVudCwgaXRlbS5rZXkpXCIgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDZyIHRleHQtWyM2YTczODNdIG10LVs0cHhdXCI+XG4gICAgICAgICAgICAgIHt7IChpdGVtLmtleSA9PT0gJ2ZyZWUnID8gJ2kxOG5fY3VzdG9tJyA6IGl0ZW0ua2V5KSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLVsxNnB4XSBmbGV4XCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXZhbGlkIGNsYXNzPVwibXItWzE2cHhdXCJcbiAgICAgICAgICBbZGF0YVR5cGVdPVwiJ2ludCdcIlxuICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJ7bGFiZWxMZWZ0OiAnaTE4bl93aWR0aCcsIGNsYXNzSW5jbHVkZTogJ21iLVs0cHhdJywgbGFiZWxMZWZ0Q2xhc3M6ICdsaWJzLXVpLWZvbnQtaDdyJ31cIlxuICAgICAgICAgIFtmaWVsZE5hbWVCaW5kXT1cIid3aWR0aCdcIlxuICAgICAgICAgIFsoaXRlbSldPVwiY3JvcFNpemVcIlxuICAgICAgICAgIFt1bml0c1JpZ2h0XT1cIlt7aWQ6ICdweCcsIGxhYmVsOiAncHgnfV1cIlxuICAgICAgICAgIFtrZXlTZWxlY3RlZFVuaXRSaWdodF09XCIncHgnXCJcbiAgICAgICAgICBbdmFsdWVVcERvd25OdW1iZXJdPVwiMVwiXG4gICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIm9yaWdpbldpZHRoKClcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKVwiXG4gICAgICAgICAgKG91dFZhbHVlQ2hhbmdlKT1cImhhbmRsZXJDcm9wV2lkdGgoKVwiIC8+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXZhbGlkIFtkYXRhVHlwZV09XCInaW50J1wiXG4gICAgICAgICAgW2xhYmVsQ29uZmlnXT1cIntsYWJlbExlZnQ6ICdpMThuX2xlbmd0aCcsIGNsYXNzSW5jbHVkZTogJ21iLVs0cHhdJywgbGFiZWxMZWZ0Q2xhc3M6ICdsaWJzLXVpLWZvbnQtaDdyJ31cIlxuICAgICAgICAgIFtmaWVsZE5hbWVCaW5kXT1cIidoZWlnaHQnXCJcbiAgICAgICAgICBbKGl0ZW0pXT1cImNyb3BTaXplXCJcbiAgICAgICAgICBbdW5pdHNSaWdodF09XCJbe2lkOiAncHgnLCBsYWJlbDogJ3B4J31dXCJcbiAgICAgICAgICBba2V5U2VsZWN0ZWRVbml0UmlnaHRdPVwiJ3B4J1wiXG4gICAgICAgICAgW3ZhbHVlVXBEb3duTnVtYmVyXT1cIjFcIlxuICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCJvcmlnaW5IZWlnaHQoKVwiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpXCJcbiAgICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlckNyb3BIZWlnaHQoKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDRtIG1iLVsxNnB4XVwiPnt7ICdpMThuX3JvdGF0ZV9waG90b3MnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBsaWJzLXVpLWltYWdlLWVkaXRvci1lZGl0LWRpc3BsYXktZ3JpZC1nYXAtMTZcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW3NpemVCdXR0b25dPVwiJ2xhcmdlJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLXJvdGF0ZS1pbWFnZS1vdXRsaW5lICF0ZXh0LVsyMHB4XSdcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJSb3RhdGVJbWFnZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2ciB0ZXh0LVsjNmE3MzgzXSBtdC1bNHB4XVwiPlxuICAgICAgICAgICAge3sgJ2kxOG5fcm90YXRlX25pbmV0eV9kZWdyZWVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2l6ZUJ1dHRvbl09XCInbGFyZ2UnXCJcbiAgICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKVwiXG4gICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLW91dGxpbmUnXCJcbiAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tZmxpcC12ZXJ0aWNhbCAhdGV4dC1bMjBweF0nXCJcbiAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyRmxpcEltYWdlKCRldmVudCwgJ3ZlcnRpY2FsJylcIiAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDZyIHRleHQtWyM2YTczODNdIG10LVs0cHhdXCI+XG4gICAgICAgICAgICB7eyAnaTE4bl92ZXJ0aWNhbF9mbGlwJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2l6ZUJ1dHRvbl09XCInbGFyZ2UnXCJcbiAgICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKVwiXG4gICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLW91dGxpbmUnXCJcbiAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tZmxpcC1ob3Jpem9udGFsICF0ZXh0LVsyMHB4XSdcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJGbGlwSW1hZ2UoJGV2ZW50LCAnaG9yaXpvbnRhbCcpXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2ciB0ZXh0LVsjNmE3MzgzXSBtdC1bNHB4XVwiPlxuICAgICAgICAgICAge3sgJ2kxOG5faG9yaXpvbnRhbF9mbGlwJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2l6ZUJ1dHRvbl09XCInbGFyZ2UnXCJcbiAgICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKVwiXG4gICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLW91dGxpbmUnXCJcbiAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tc2NhbGUgIXRleHQtWzIwcHhdJ1wiXG4gICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclJlc2l6ZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2ciB0ZXh0LVsjNmE3MzgzXSBtdC1bNHB4XVwiPlxuICAgICAgICAgICAge3sgJ2kxOG5fcmVzaXplJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbGlic191aS1jb21wb25lbnRzLW1vZGFsPlxuXG48bmctdGVtcGxhdGUgI3N2Z0Fycm93PlxuICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgIHdpZHRoPVwiNDBcIlxuICAgIGhlaWdodD1cIjQwXCJcbiAgICB2aWV3Qm94PVwiMCAwIDQwIDQwXCJcbiAgICBmaWxsPVwibm9uZVwiPlxuICAgIDxwYXRoIGQ9XCJNMzMuNjk4NyAxNC42OTY5TDE4LjMzMDkgMTQuNjk2OUMxNi41MTYgMTQuNjk2OSAxNS4wMzExIDE2LjE4MTggMTUuMDMxMSAxNy45OTY3TDE1LjAzMTEgMzMuMzY0NVwiXG4gICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICBzdHJva2Utd2lkdGg9XCI1LjgzMzMzXCJcbiAgICAgIHN0cm9rZS1taXRlcmxpbWl0PVwiMTBcIlxuICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gIDwvc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzdmdDaXJjbGU+XG4gIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgd2lkdGg9XCIxNVwiXG4gICAgaGVpZ2h0PVwiMTVcIlxuICAgIHZpZXdCb3g9XCIwIDAgMTUgMTVcIlxuICAgIGZpbGw9XCJub25lXCI+XG4gICAgPGNpcmNsZSBjeD1cIjcuNVwiXG4gICAgICBjeT1cIjcuNVwiXG4gICAgICByPVwiNy41XCJcbiAgICAgIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gIDwvc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
782
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbWFnZS1lZGl0b3Ivc3JjL2ltYWdlLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW1hZ2UtZWRpdG9yL3NyYy9pbWFnZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUE0QixNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQWEsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFMLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRS9FLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLDZCQUE2QixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2xKLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUFhdkYsTUFBTSxPQUFPLG9DQUFvQztJQStEd0I7SUE5RDdELE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLFdBQVcsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsWUFBWSxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUNqQyxjQUFjLEdBQUcsTUFBTSxDQUF3QixlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLHFCQUFxQixHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQztJQUMzQyxRQUFRLEdBQUcsTUFBTSxDQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RCxVQUFVLEdBQUcsTUFBTSxDQUFjLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0IsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7SUFDcEIsTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLGdCQUFnQixHQUFHLE1BQU0sQ0FBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6RixRQUFRLEdBQUcsTUFBTSxDQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVGLFdBQVcsR0FBRyxNQUFNLENBQW9CLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELFNBQVMsR0FBRyxNQUFNLENBQTRCLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELGFBQWEsR0FBRyxNQUFNLENBQWlCLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkssYUFBYSxHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQztJQUNuQyxVQUFVLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDZixRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2QsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDekMsa0JBQWtCLENBQTREO0lBRzdFLGNBQWMsR0FBRyxLQUFLLENBQVksV0FBVyxDQUFDLENBQUM7SUFDL0MsUUFBUSxHQUFHLEtBQUssRUFBVSxDQUFDO0lBQzNCLE1BQU0sR0FBRyxLQUFLLENBQVMsSUFBSSxDQUFDLENBQUM7SUFDN0IsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztJQUNsQyxTQUFTLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDNUIsUUFBUSxHQUFHLEtBQUssRUFBVSxDQUFDO0lBQzNCLE9BQU8sR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDaEMsV0FBVyxHQUFHLEtBQUssRUFBZ0IsQ0FBQztJQUNwQyx1QkFBdUIsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7SUFFaEQsV0FBVyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWEsYUFBYSxDQUFDLENBQUM7SUFDNUQsU0FBUyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWEsV0FBVyxDQUFDLENBQUM7SUFDeEQsb0JBQW9CLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBYSxzQkFBc0IsQ0FBQyxDQUFDO0lBQzlFLGNBQWMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFhLGdCQUFnQixDQUFDLENBQUM7SUFDbEUsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWEsVUFBVSxDQUFDLENBQUM7SUFDdEQsTUFBTSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWEsUUFBUSxDQUFDLENBQUM7SUFDbEQsTUFBTSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWEsUUFBUSxDQUFDLENBQUM7SUFDbEQsTUFBTSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWEsUUFBUSxDQUFDLENBQUM7SUFDbEQsTUFBTSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWEsUUFBUSxDQUFDLENBQUM7SUFDbEQsVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWEsWUFBWSxDQUFDLENBQUM7SUFDMUQsVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWEsWUFBWSxDQUFDLENBQUM7SUFDMUQsVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWEsWUFBWSxDQUFDLENBQUM7SUFDMUQsVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWEsWUFBWSxDQUFDLENBQUM7SUFDMUQsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWEsVUFBVSxDQUFDLENBQUM7SUFDdEQsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWEsVUFBVSxDQUFDLENBQUM7SUFDdEQsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWEsVUFBVSxDQUFDLENBQUM7SUFDdEQsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWEsVUFBVSxDQUFDLENBQUM7SUFFdEQsUUFBUSxHQUFHLE1BQU0sRUFBbUMsQ0FBQztJQUNyRCxXQUFXLEdBQUcsTUFBTSxFQUFhLENBQUM7SUFDbEMsbUJBQW1CLEdBQUcsTUFBTSxFQUFvQyxDQUFDO0lBRWxFLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBRXhFLFlBQXVFLGNBQXNCO1FBQXRCLG1CQUFjLEdBQWQsY0FBYyxDQUFRO0lBQzdGLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUVsRyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEYsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztZQUM1QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3BDLGVBQWUsRUFBRSxDQUFDLE9BQWdCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztTQUNqRSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsa0JBQWtCO1FBQzFCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVTLGlCQUFpQixDQUFDLENBQWE7UUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkIsQ0FBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sZUFBZTtRQUNyQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUMzQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUV6QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTyxRQUFRO1FBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7WUFDdkYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXZDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2pGLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDeEssTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFN0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BKLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0csSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4TixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4TixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4TixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4TixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxFQUFF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LEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxNQUFlO1FBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJ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LE1BQU0sQ0FBQyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztRQUM1QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFHbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFDaEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDOUYsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMs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QUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMvRCxDQUFDO3dHQXYyQlUsb0NBQW9DLGtCQStEZiw2QkFBNkI7NEZBL0RsRCxvQ0FBb0MsZ3NHQzlCakQsdWthQWdTQSxvMUNEdFFJLGdCQUFnQixtSkFBRSxlQUFlLDRGQUFFLGdDQUFnQyxvZ0JBQUUsOEJBQThCLG10QkFDbkcsb0NBQW9DLG8xREFBRSxzQ0FBc0Msc2pCQUFFLGdDQUFnQzs7NEZBR3JHLG9DQUFvQztrQkFaaEQsU0FBUzsrQkFFRSxpQ0FBaUMsbUJBRzFCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxnQ0FBZ0MsRUFBRSw4QkFBOEI7d0JBQ25HLG9DQUFvQyxFQUFFLHNDQUFzQyxFQUFFLGdDQUFnQztxQkFDL0c7OzBCQWlFWSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBJbmplY3QsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBvdXRwdXQsIHNpZ25hbCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c01vZGFsQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1tb2RhbCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc3Bpbm5lcic7XG5pbXBvcnQgeyBJQXNwZWN0UmF0aW8sIElCb3VuZGluZ0NsaWVudFJlY3QsIElFdmVudCB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICdAbGlicy11aS9zZXJ2aWNlcy1keW5hbWljLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBjb252ZXJ0QmFzZTY0VG9CbG9iLCBnZXQsIGlzTmlsLCBMSU5LX0lNQUdFX0VSUk9SX1RPS0VOX0lOSkVDVCwgc2V0IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lcmdlTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNyb3BSYXRpb25JdGVtcywgZ2V0Q3JvcFJlY3RJbWFnZSwgZ2V0RGF0YVVybCwgZ2V0U3R5bGVzT2ZFbGVtZW50LCBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3cgfSBmcm9tICcuL2RlZmluZXMvaW1hZ2UtZWRpdG9yLmRlZmluZSc7XG5pbXBvcnQgeyBJSW1hZ2VFZGl0b3JGdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLWV2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJQ3JvcFJhdGlvSXRlbSwgSUNyb3BTaXplLCBJUmVjdENsaXAsIElSZXNpemVEYXRhLCBJU2F2ZUZpbGUsIElTdGFydE1vdXNlRGltLCBJU3R5bGVzLCBNT0RFX0VESVQsIFRZUEVfTU9ERV9TQVZFLCBUWVBFX1JFU0laRV9TVEFURSB9IGZyb20gJy4vaW50ZXJmYWNlcy9pbWFnZS1lZGl0b3IuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNJbWFnZUVkaXRvclJlc2l6ZUNvbXBvbmVudCB9IGZyb20gJy4vcmVzaXplL3Jlc2l6ZS5jb21wb25lbnQnO1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWltYWdlX2VkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWFnZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vaW1hZ2UtZWRpdG9yLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LCBUcmFuc2xhdGVNb2R1bGUsIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzTW9kYWxDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c1NwaW5uZXJDb21wb25lbnQsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0ltYWdlRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcHJvdGVjdGVkIGxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgbG9hZGluZ0ltYWdlID0gc2lnbmFsKHRydWUpO1xuICBwcm90ZWN0ZWQgY2hhbmdlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBvcmlnaW5XaWR0aCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgb3JpZ2luSGVpZ2h0ID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBjcm9wUmF0aW9JdGVtcyA9IHNpZ25hbDxBcnJheTxJQ3JvcFJhdGlvSXRlbT4+KGNyb3BSYXRpb25JdGVtcygpKTtcbiAgcHJvdGVjdGVkIGNyb3BSYXRpb0l0ZW1TZWxlY3RlZCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIGNyb3BTaXplID0gc2lnbmFsPElDcm9wU2l6ZT4oeyB3aWR0aDogMjAsIGhlaWdodDogMjAgfSk7XG4gIHByb3RlY3RlZCByZXNpemVEYXRhID0gc2lnbmFsPElSZXNpemVEYXRhPih7IHJhdGlvOiAxMDAsIHdpZHRoOiA2MDAsIGhlaWdodDogODAwIH0pO1xuICBwcm90ZWN0ZWQgZHJhZ0dyaWRDcm9wID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcml2YXRlIGltYWdlID0gbmV3IEltYWdlKCk7XG4gIHByaXZhdGUgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gIHByaXZhdGUgY29udGFpbmVySGVpZ2h0ID0gc2lnbmFsKDgwMCk7XG4gIHByaXZhdGUgY29udGFpbmVyV2lkdGggPSBzaWduYWwoMTIwMCk7XG4gIHByaXZhdGUgaW1nQ29udGFpbmVyUmVjdCA9IHNpZ25hbDxJQm91bmRpbmdDbGllbnRSZWN0Pih7IHRvcDogMCwgbGVmdDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcbiAgcHJpdmF0ZSByZWN0Q2xpcCA9IHNpZ25hbDxJUmVjdENsaXA+KHsgdG9wOiAwLCBsZWZ0OiAwLCByaWdodDogMCwgYm90dG9tOiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH0pO1xuICBwcml2YXRlIHJlc2l6ZVN0YXRlID0gc2lnbmFsPFRZUEVfUkVTSVpFX1NUQVRFPignbm9uZScpO1xuICBwcml2YXRlIG1vdmVTdGF0ZSA9IHNpZ25hbDwnY2xpcCcgfCAnaW1hZ2UnIHwgJ25vbmUnPignbm9uZScpO1xuICBwcml2YXRlIHN0YXJ0TW91c2VEaW0gPSBzaWduYWw8SVN0YXJ0TW91c2VEaW0+KHsgY2xpZW50WDogMCwgY2xpZW50WTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCwgdG9wOiAwLCBsZWZ0OiAwLCBpbWFnZVRvcDogMCwgaW1hZ2VMZWZ0OiAwLCBpbWFnZVdpZHRoOiAwLCBpbWFnZUhlaWdodDogMCB9KTtcbiAgcHJpdmF0ZSBkYXRhVXJsT3JpZ2luID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcml2YXRlIHJhdGlvVmFsdWUgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5IZWlnaHQgPSAyMDtcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5XaWR0aCA9IDIwO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVzaXplQ29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPExpYnNVaUNvbXBvbmVudHNJbWFnZUVkaXRvclJlc2l6ZUNvbXBvbmVudD47XG5cblxuICByZWFkb25seSBtb2RlU2hvd0J1dHRvbiA9IGlucHV0PE1PREVfRURJVD4oJ3NhdmUtZmlsZScpO1xuICByZWFkb25seSBtaW1ldHlwZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigxMjAwKTtcbiAgcmVhZG9ubHkgaW1nU3JjID0gbW9kZWwucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvcmlnaW5VcmwgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG5hbWVGaWxlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBoYXNab29tID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBhc3BlY3RSYXRpbyA9IGlucHV0PElBc3BlY3RSYXRpbz4oKTtcbiAgcmVhZG9ubHkgcmVxdWlyZWRDcm9wRm9sbG93UmF0aW8gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkgaW1hZ2VPcmlnaW4gPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2ltYWdlT3JpZ2luJyk7XG4gIHJlYWRvbmx5IGltYWdlQ2xpcCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaW1hZ2VDbGlwJyk7XG4gIHJlYWRvbmx5IGltYWdlRWRpdG9yQ29udGFpbmVyID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdpbWFnZUVkaXRvckNvbnRhaW5lcicpO1xuICByZWFkb25seSBpbWFnZUNvbnRhaW5lciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaW1hZ2VDb250YWluZXInKTtcbiAgcmVhZG9ubHkgY3JvcEFyZWEgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BBcmVhJyk7XG4gIHJlYWRvbmx5IGNyb3BUTCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcFRMJyk7XG4gIHJlYWRvbmx5IGNyb3BCTCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcEJMJyk7XG4gIHJlYWRvbmx5IGNyb3BCUiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcEJSJyk7XG4gIHJlYWRvbmx5IGNyb3BUUiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcFRSJyk7XG4gIHJlYWRvbmx5IGNyb3BMaW5lVkwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BMaW5lVkwnKTtcbiAgcmVhZG9ubHkgY3JvcExpbmVWUiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY3JvcExpbmVWUicpO1xuICByZWFkb25seSBjcm9wTGluZUhUID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjcm9wTGluZUhUJyk7XG4gIHJlYWRvbmx5IGNyb3BMaW5lSEIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2Nyb3BMaW5lSEInKTtcbiAgcmVhZG9ubHkgY2lyY2xlVEwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2NpcmNsZVRMJyk7XG4gIHJlYWRvbmx5IGNpcmNsZVRSID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjaXJjbGVUUicpO1xuICByZWFkb25seSBjaXJjbGVCTCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignY2lyY2xlQkwnKTtcbiAgcmVhZG9ubHkgY2lyY2xlQlIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2NpcmNsZUJSJyk7XG5cbiAgcmVhZG9ubHkgb3V0Q2xvc2UgPSBvdXRwdXQ8eyBpc0NsaWNrQnV0dG9uQ2xvc2U6IGJvb2xlYW4gfT4oKTtcbiAgcmVhZG9ubHkgb3V0U2F2ZUZpbGUgPSBvdXRwdXQ8SVNhdmVGaWxlPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElJbWFnZUVkaXRvckZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuXG4gIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudFNlcnZpY2UgPSBpbmplY3QoTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoTElOS19JTUFHRV9FUlJPUl9UT0tFTl9JTkpFQ1QpIHByaXZhdGUgbGlua0ltYWdlRXJyb3I6IHN0cmluZykge1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmFzcGVjdFJhdGlvKCkpIHtcbiAgICAgIHRoaXMuZHJhZ0dyaWRDcm9wLnNldCh0cnVlKTtcbiAgICAgIGNvbnN0IGFzcGVjdFJhdGlvRm91bmQgPSB0aGlzLmNyb3BSYXRpb0l0ZW1zKCkuZmluZChpdGVtID0+IGl0ZW0ua2V5ID09PSB0aGlzLmFzcGVjdFJhdGlvKCk/LmtleSk7XG5cbiAgICAgIHRoaXMuY3JvcFJhdGlvSXRlbVNlbGVjdGVkLnNldChhc3BlY3RSYXRpb0ZvdW5kPy5rZXkgfHwgdGhpcy5jcm9wUmF0aW9JdGVtcygpWzBdLmtleSk7XG4gICAgICB0aGlzLnVwZGF0ZU9yaWdpbkltYWdlU2l6ZSgpO1xuICAgICAgdGhpcy5jaGFuZ2VkSW1hZ2UodHJ1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVNb2RhbFNpemUoKTtcbiAgICB0aGlzLmluaXREYXRhKCk7XG4gICAgdGhpcy5pbml0TW91c2VFdmVudCgpO1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHtcbiAgICAgIGNyb3BJbWFnZTogdGhpcy5jcm9wSW1hZ2UuYmluZCh0aGlzKSxcbiAgICAgIHNldExvYWRpbmdTdGF0ZTogKGxvYWRpbmc6IGJvb2xlYW4pID0+IHRoaXMubG9hZGluZy5zZXQobG9hZGluZylcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVySW1hZ2VMb2FkZWQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZU1vZGFsU2l6ZSgpO1xuICAgICAgdGhpcy5sb2FkaW5nSW1hZ2Uuc2V0KGZhbHNlKTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJJbWFnZUVycm9yKGU6IEVycm9yRXZlbnQpIHtcbiAgICBjb25zb2xlLmxvZygnZScsIGUpO1xuICAgIChlIGFzIElFdmVudCkudGFyZ2V0LnNyYyA9IHRoaXMubGlua0ltYWdlRXJyb3I7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vZGFsU2l6ZSgpIHtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSAxMDA7XG4gICAgY29uc3QgbWF4V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCAtIDQwMDtcblxuICAgIHRoaXMuY29udGFpbmVySGVpZ2h0LnNldChtYXhIZWlnaHQgLSAxMjQpO1xuICAgIHRoaXMuY29udGFpbmVyV2lkdGguc2V0KG1heFdpZHRoIC0gMzg0KTtcbiAgICB0aGlzLnVwZGF0ZU9yaWdpbkltYWdlU2l6ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RGF0YSgpIHtcbiAgICB0aGlzLmltZ0NvbnRhaW5lclJlY3Quc2V0KHRoaXMuaW1hZ2VDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICB0aGlzLmltYWdlLnNldEF0dHJpYnV0ZSgnY3Jvc3NvcmlnaW4nLCAnYW5vbnltb3VzJyk7XG4gICAgdGhpcy5pbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLmltZ0NvbnRhaW5lclJlY3Quc2V0KHRoaXMuaW1hZ2VDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuaW1hZ2UuaGVpZ2h0O1xuICAgICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmltYWdlLndpZHRoO1xuICAgICAgdGhpcy5vcmlnaW5IZWlnaHQuc2V0KHRoaXMuaW1hZ2UuaGVpZ2h0KTtcbiAgICAgIHRoaXMub3JpZ2luV2lkdGguc2V0KHRoaXMuaW1hZ2Uud2lkdGgpO1xuXG4gICAgICB0aGlzLnVwZGF0ZU9yaWdpbkltYWdlU2l6ZSgpO1xuICAgICAgdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKT8uZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuICAgICAgdGhpcy5kYXRhVXJsT3JpZ2luLnNldChnZXREYXRhVXJsKHRoaXMuY2FudmFzLCB0aGlzLm1pbWV0eXBlKCksIHRoaXMuaW1hZ2Uuc3JjKSk7XG4gICAgICB0aGlzLmltZ1NyYy5zZXQodGhpcy5kYXRhVXJsT3JpZ2luKCkpO1xuICAgIH07XG4gICAgdGhpcy5pbWFnZS5zcmMgPSB0aGlzLmltZ1NyYygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0TW91c2VFdmVudCgpIHtcbiAgICBjb25zdCBtb3VzZVVwID0gdGhpcy5pbml0RXZlbnQoeyBuYXRpdmVFbGVtZW50OiBkb2N1bWVudCB9LCAnbW91c2V1cCcsIHsgY2FsbFN0b3BQcm9wYWdhdGlvbjogdHJ1ZSwgY2FsbFByZXZlbnREZWZhdWx0OiB0cnVlIH0sIHVuZGVmaW5lZCwgKCkgPT4gdGhpcy5oYW5kbGVyTW91c2V1cCgpKTtcbiAgICBjb25zdCBtb3VzZU1vdmUgPSB0aGlzLmluaXRFdmVudCh7IG5hdGl2ZUVsZW1lbnQ6IGRvY3VtZW50IH0sICdtb3VzZW1vdmUnLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9KS5waXBlKHRha2VVbnRpbChtb3VzZVVwKSk7XG5cbiAgICB0aGlzLmluaXRFdmVudCh0aGlzLmltYWdlRWRpdG9yQ29udGFpbmVyKCksICd3aGVlbCcsIHsgY2FsbFN0b3BQcm9wYWdhdGlvbjogdHJ1ZSB9LCB1bmRlZmluZWQsIChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVyTW91c2V3aGVlbChlKSkuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbml0RXZlbnQoeyBuYXRpdmVFbGVtZW50OiB3aW5kb3cgfSwgJ3Jlc2l6ZScsIHt9LCB1bmRlZmluZWQsICgpID0+IHRoaXMudXBkYXRlTW9kYWxTaXplKCkpLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuaW1hZ2VDb250YWluZXIoKSwgJ21vdXNlZG93bicsIHsgY2FsbFN0b3BQcm9wYWdhdGlvbjogdHJ1ZSwgY2FsbFByZXZlbnREZWZhdWx0OiB0cnVlIH0sIG1vdXNlTW92ZSwgKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJJbWFnZUNvbnRhaW5lck1vdXNlZG93bihlKSkuc3Vic2NyaWJlKChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVyTW91c2Vtb3ZlKGUpKTtcbiAgICB0aGlzLmluaXRFdmVudCh0aGlzLmNyb3BUTCgpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHsgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnVEwnKSB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcEJMKCksICdtb3VzZWRvd24nLCB7IGNhbGxTdG9wUHJvcGFnYXRpb246IHRydWUsIGNhbGxQcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCBtb3VzZU1vdmUsIChlOiBFdmVudCkgPT4geyB0aGlzLmhhbmRsZXJDcm9wUmVzaXplKGUsICdCTCcpIH0pLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gICAgdGhpcy5pbml0RXZlbnQodGhpcy5jcm9wQlIoKSwgJ21vdXNlZG93bicsIHsgY2FsbFN0b3BQcm9wYWdhdGlvbjogdHJ1ZSwgY2FsbFByZXZlbnREZWZhdWx0OiB0cnVlIH0sIG1vdXNlTW92ZSwgKGU6IEV2ZW50KSA9PiB7IHRoaXMuaGFuZGxlckNyb3BSZXNpemUoZSwgJ0JSJykgfSkuc3Vic2NyaWJlKChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVyTW91c2Vtb3ZlKGUpKTtcbiAgICB0aGlzLmluaXRFdmVudCh0aGlzLmNyb3BUUigpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHsgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnVFInKSB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcExpbmVWTCgpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHsgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnVkwnKSB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcExpbmVWUigpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHsgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnVlInKSB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcExpbmVIVCgpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHsgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnSFQnKSB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcExpbmVIQigpLCAnbW91c2Vkb3duJywgeyBjYWxsU3RvcFByb3BhZ2F0aW9uOiB0cnVlLCBjYWxsUHJldmVudERlZmF1bHQ6IHRydWUgfSwgbW91c2VNb3ZlLCAoZTogRXZlbnQpID0+IHsgdGhpcy5oYW5kbGVyQ3JvcFJlc2l6ZShlLCAnSEInKSB9KS5zdWJzY3JpYmUoKGU6IEV2ZW50KSA9PiB0aGlzLmhhbmRsZXJNb3VzZW1vdmUoZSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KHRoaXMuY3JvcEFyZWEoKSwgJ21vdXNlZG93bicsIHt9LCB1bmRlZmluZWQsIChlOiBFdmVudCkgPT4gdGhpcy5oYW5kbGVyTW91c2Vkb3duQ3JvcEFyZWEoZSkpLnN1YnNjcmliZSgoZTogRXZlbnQpID0+IHRoaXMuaGFuZGxlck1vdXNlbW92ZShlKSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRFdmVudChlbGVtZW50OiBFbGVtZW50UmVmLCBldmVudE5hbWU6IHN0cmluZywgZmxhZzogeyBjYWxsU3RvcFByb3BhZ2F0aW9uPzogYm9vbGVhbiwgY2FsbFByZXZlbnREZWZhdWx0PzogYm9vbGVhbiB9LCBvYnNNZXJnZT86IE9ic2VydmFibGU8RXZlbnQ+LCBjYWxsYmFjaz86IChlOiBFdmVudCkgPT4gdm9pZCk6IE9ic2VydmFibGU8RXZlbnQ+IHtcbiAgICBjb25zdCBvYnMgPSBmcm9tRXZlbnQ8RXZlbnQ+KGVsZW1lbnQubmF0aXZlRWxlbWVudCwgZXZlbnROYW1lKS5waXBlKFxuICAgICAgdGFwKChlOiBFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZmxhZy5jYWxsU3RvcFByb3BhZ2F0aW9uICYmIGU/LnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZsYWcuY2FsbFByZXZlbnREZWZhdWx0ICYmIGU/LnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpO1xuXG4gICAgaWYgKG9ic01lcmdlKSB7XG4gICAgICByZXR1cm4gb2JzLnBpcGUobWVyZ2VNYXAoKCkgPT4gb2JzTWVyZ2UpLCAodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkpO1xuICAgIH1cblxuICAgIHJldHVybiBvYnM7XG4gIH07XG5cbiAgcHJpdmF0ZSB1cGRhdGVPcmlnaW5JbWFnZVNpemUoKSB7XG4gICAgbGV0IHdpZHRoID0gdGhpcy5vcmlnaW5XaWR0aCgpO1xuICAgIGxldCBoZWlnaHQgPSB0aGlzLm9yaWdpbkhlaWdodCgpO1xuICAgIGNvbnN0IHJhdGlvID0gd2lkdGggLyBoZWlnaHQ7XG5cbiAgICBpZiAod2lkdGggPj0gaGVpZ2h0KSB7XG4gICAgICB3aWR0aCA9IE1hdGgubWluKHRoaXMuY29udGFpbmVyV2lkdGgoKSwgd2lkdGgpO1xuICAgICAgaGVpZ2h0ID0gTWF0aC5taW4od2lkdGggLyByYXRpbywgdGhpcy5jb250YWluZXJIZWlnaHQoKSk7XG4gICAgICB3aWR0aCA9IGhlaWdodCAqIHJhdGlvO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWlnaHQgPSBNYXRoLm1pbih0aGlzLmNvbnRhaW5lckhlaWdodCgpLCBoZWlnaHQpO1xuICAgICAgd2lkdGggPSBoZWlnaHQgKiByYXRpbztcbiAgICB9XG4gICAgdGhpcy5zZXRJbWFnZVBvc2l0aW9uKHdpZHRoLCBoZWlnaHQpO1xuICAgIHRoaXMudXBkYXRlQ3JvcEFyZWFQb3MoKTtcbiAgICB0aGlzLnVwZGF0ZVJlY3RDbGlwUG9zKCk7XG4gIH1cblxuICBwcml2YXRlIHNldEltYWdlUG9zaXRpb24od2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5jb250YWluZXJXaWR0aCgpIC8gMiAtIHdpZHRoIC8gMjtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmNvbnRhaW5lckhlaWdodCgpIC8gMiAtIGhlaWdodCAvIDI7XG4gICAgY29uc3Qgc3R5bGVzID0geyB3aWR0aCwgaGVpZ2h0LCB0b3AsIGxlZnQsIGRpc3BsYXk6ICdibG9jaycgfTtcblxuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZU9yaWdpbigpLCBzdHlsZXMpO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZUNsaXAoKSwgc3R5bGVzKTtcbiAgICB0aGlzLnNldENpcmNsZVBvc2l0aW9uKHN0eWxlcyk7XG4gIH1cblxuICBwcml2YXRlIHNldENpcmNsZVBvc2l0aW9uKHN0eWxlczogSVN0eWxlcykge1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jaXJjbGVUTCgpLCB7IHRvcDogKHN0eWxlcy50b3AgfHwgMCkgLSA1LCBsZWZ0OiAoc3R5bGVzLmxlZnQgfHwgMCkgLSA1IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jaXJjbGVUUigpLCB7IHRvcDogKHN0eWxlcy50b3AgfHwgMCkgLSA1LCBsZWZ0OiAoc3R5bGVzLmxlZnQgfHwgMCkgKyAoc3R5bGVzLndpZHRoIHx8IDApIC0gMTAgfSk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNpcmNsZUJMKCksIHsgdG9wOiAoc3R5bGVzLnRvcCB8fCAwKSArIChzdHlsZXMuaGVpZ2h0IHx8IDApIC0gMTAsIGxlZnQ6IChzdHlsZXMubGVmdCB8fCAwKSAtIDUgfSk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNpcmNsZUJSKCksIHsgdG9wOiAoc3R5bGVzLnRvcCB8fCAwKSArIChzdHlsZXMuaGVpZ2h0IHx8IDApIC0gMTAsIGxlZnQ6IChzdHlsZXMubGVmdCB8fCAwKSArIChzdHlsZXMud2lkdGggfHwgMCkgLSAxMCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ3JvcEFyZWFQb3MoKSB7XG4gICAgY29uc3QgW2ltZ1RvcCwgaW1nTGVmdCwgaW1nV2lkdGgsIGltZ0hlaWdodF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlQ2xpcCgpLm5hdGl2ZUVsZW1lbnQsIFsnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnLCAnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0J10pO1xuXG4gICAgY29uc3QgcmVjdEltZzogSUJvdW5kaW5nQ2xpZW50UmVjdCA9IHtcbiAgICAgIHRvcDogTWF0aC5tYXgoMCwgaW1nVG9wKSxcbiAgICAgIGxlZnQ6IE1hdGgubWF4KDAsIGltZ0xlZnQpLFxuICAgICAgd2lkdGg6IGltZ1dpZHRoLFxuICAgICAgaGVpZ2h0OiBpbWdIZWlnaHRcbiAgICB9O1xuXG4gICAgcmVjdEltZy53aWR0aCA9IE1hdGgubWluKGltZ1dpZHRoLCB0aGlzLmNvbnRhaW5lcldpZHRoKCkgLSBpbWdMZWZ0KTtcbiAgICBpZiAoaW1nTGVmdCA8IDApIHtcbiAgICAgIHJlY3RJbWcud2lkdGggPSBNYXRoLm1pbihpbWdXaWR0aCArIGltZ0xlZnQsIHRoaXMuY29udGFpbmVyV2lkdGgoKSk7XG4gICAgfVxuICAgIHJlY3RJbWcuaGVpZ2h0ID0gTWF0aC5taW4oaW1nSGVpZ2h0LCB0aGlzLmNvbnRhaW5lckhlaWdodCgpIC0gaW1nVG9wKTtcbiAgICBpZiAoaW1nVG9wIDwgMCkge1xuICAgICAgcmVjdEltZy5oZWlnaHQgPSBNYXRoLm1pbihpbWdUb3AgKyBpbWdIZWlnaHQsIHRoaXMuY29udGFpbmVySGVpZ2h0KCkpO1xuICAgIH1cbiAgICB0aGlzLnJhdGlvVmFsdWUuc2V0KHRoaXMuZ2V0Q3JvcFJhdGlvVmFsdWUoKSk7XG4gICAgaWYgKCF0aGlzLnJhdGlvVmFsdWUoKSkge1xuICAgICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHJlY3RJbWcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB3aWR0aCA9IHJlY3RJbWcud2lkdGg7XG4gICAgbGV0IGhlaWdodCA9IHdpZHRoIC8gdGhpcy5yYXRpb1ZhbHVlKCk7XG5cbiAgICB3aWR0aCA9IE1hdGgubWluKHJlY3RJbWcud2lkdGgsIHdpZHRoKTtcbiAgICBoZWlnaHQgPSB3aWR0aCAvIHRoaXMucmF0aW9WYWx1ZSgpO1xuICAgIGhlaWdodCA9IE1hdGgubWluKHJlY3RJbWcuaGVpZ2h0LCBoZWlnaHQpO1xuICAgIHdpZHRoID0gaGVpZ2h0ICogdGhpcy5yYXRpb1ZhbHVlKCk7XG4gICAgY29uc3QgdG9wID0gcmVjdEltZy50b3AgKyAocmVjdEltZy5oZWlnaHQgLSBoZWlnaHQpIC8gMjtcbiAgICBjb25zdCBsZWZ0ID0gcmVjdEltZy5sZWZ0ICsgKHJlY3RJbWcud2lkdGggLSB3aWR0aCkgLyAyO1xuXG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgd2lkdGgsIGhlaWdodCwgdG9wLCBsZWZ0IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDcm9wUmF0aW9WYWx1ZSgpIHtcbiAgICBjb25zdCBjcm9wUmF0aW8gPSB0aGlzLmFzcGVjdFJhdGlvKCkgfHwgdGhpcy5jcm9wUmF0aW9JdGVtcygpLmZpbmQoaXRlbSA9PiBpdGVtLmtleSA9PT0gdGhpcy5jcm9wUmF0aW9JdGVtU2VsZWN0ZWQoKSk7XG5cbiAgICBpZiAoIWNyb3BSYXRpbykge1xuICAgICAgcmV0dXJuIHRoaXMub3JpZ2luV2lkdGgoKSAvIHRoaXMub3JpZ2luSGVpZ2h0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyb3BSYXRpby52YWx1ZSA/PyAwO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSZWN0Q2xpcFBvcygpIHtcbiAgICBjb25zdCByZWFjdENsaXAgPSB0aGlzLmdldFJlY3RDbGlwSW1hZ2UoKTtcblxuICAgIHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5zdHlsZS5jbGlwID0gYHJlY3QoJHtyZWFjdENsaXAudG9wfXB4LCAke3JlYWN0Q2xpcC5yaWdodH1weCwgJHtyZWFjdENsaXAuYm90dG9tfXB4LCAke3JlYWN0Q2xpcC5sZWZ0fXB4KWA7XG4gIH1cblxuICBwcml2YXRlIGdldFJlY3RDbGlwSW1hZ2UoKSB7XG5cbiAgICBjb25zdCBpbWFnZVJlY3QgPSB0aGlzLmltYWdlQ2xpcCgpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKCFpbWFnZVJlY3Qud2lkdGgpIHtcblxuICAgICAgcmV0dXJuIHRoaXMucmVjdENsaXAoKTtcbiAgICB9XG4gICAgY29uc3QgY3JvcFJlY3QgPSB0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB3aWR0aCA9IE1hdGgucm91bmQoY3JvcFJlY3Qud2lkdGgpO1xuICAgIGNvbnN0IGhlaWdodCA9IE1hdGgucm91bmQoY3JvcFJlY3QuaGVpZ2h0KTtcbiAgICBjb25zdCBsZWZ0ID0gY3JvcFJlY3QubGVmdCAtIGltYWdlUmVjdC5sZWZ0O1xuICAgIGNvbnN0IHRvcCA9IGNyb3BSZWN0LnRvcCAtIGltYWdlUmVjdC50b3A7XG4gICAgY29uc3QgcmlnaHQgPSBNYXRoLnJvdW5kKGxlZnQgKyB3aWR0aCk7XG4gICAgY29uc3QgYm90dG9tID0gTWF0aC5yb3VuZCh0b3AgKyBoZWlnaHQpO1xuICAgIGNvbnN0IHJhdGlvID0gdGhpcy5vcmlnaW5XaWR0aCgpIC8gaW1hZ2VSZWN0LndpZHRoO1xuXG5cbiAgICB0aGlzLnJlY3RDbGlwLnNldCh7IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB0aGlzLmNyb3BTaXplLnNldCh7XG4gICAgICBoZWlnaHQ6IHRvcCA+PSAwID8gKE1hdGgucm91bmQoKGJvdHRvbSAtIHRvcCkgKiByYXRpbykpIDogKE1hdGguZmxvb3IoKGJvdHRvbSAtIHRvcCkgKiByYXRpbykpLFxuICAgICAgd2lkdGg6IHRvcCA+PSAwID8gKE1hdGgucm91bmQoKChyaWdodCAtIGxlZnQpICogKHRoaXMucmF0aW9WYWx1ZSgpID8/IDEpKSAqIHJhdGlvKSkgOiAoTWF0aC5mbG9vcigoKHJpZ2h0IC0gbGVmdCkgKiAodGhpcy5yYXRpb1ZhbHVlKCkgPz8gMSkpICogcmF0aW8pKVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMucmVjdENsaXAoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlck1vdXNlbW92ZShlOiBhbnkpIHtcbiAgICBjb25zdCB0eXBlU3RhdGUgPSBbJ0JMJywgJ1RMJywgJ1RSJywgJ0JSJywgJ1ZMJywgJ1ZSJywgJ0hUJywgJ0hCJ107XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IGByZXNpemVDcm9wRm9sbG93JHt0aGlzLnJlc2l6ZVN0YXRlKCl9RGlyYDsgLy8gcmVzaXplQ3JvcEZvbGxvd0JMRGlyLCByZXNpemVDcm9wRm9sbG93VExEaXIsIHJlc2l6ZUNyb3BGb2xsb3dUUkRpciwgcmVzaXplQ3JvcEZvbGxvd0JSRGlyLCByZXNpemVDcm9wRm9sbG93VkxEaXIsIHJlc2l6ZUNyb3BGb2xsb3dWUkRpciwgcmVzaXplQ3JvcEZvbGxvd0hURGlyLCByZXNpemVDcm9wRm9sbG93SEJEaXJcblxuICAgIGlmICh0eXBlU3RhdGUuaW5jbHVkZXModGhpcy5yZXNpemVTdGF0ZSgpKSkge1xuICAgICAgKHRoaXMgYXMgYW55KVttZXRob2ROYW1lXShlKTtcbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLm1vdmVTdGF0ZSgpKSB7XG4gICAgICBjYXNlICdjbGlwJzpcbiAgICAgICAgdGhpcy5tb3ZlQ2xpcEFyZWEoZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdpbWFnZSc6XG4gICAgICAgIHRoaXMubW92ZUltYWdlKGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VkSW1hZ2UodHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd0JMRGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFkgPSBlLmNsaWVudFkgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRZO1xuICAgIGNvbnN0IG1vbWVudFggPSB0aGlzLnJhdGlvVmFsdWUoKSA/IC1tb21lbnRZICogdGhpcy5yYXRpb1ZhbHVlKCkgOiBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VIZWlnaHQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3A7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgbGVmdCB9ID0gdGhpcy5nZXRSZWN0UmVzaXplQ3JvcEZvbGxvdyh7IHdpZHRoOiAtMSwgaGVpZ2h0OiAxLCBsZWZ0OiAxLCB0b3A6IDAgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICBsZWZ0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gd2lkdGg7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgbGVmdCwgaGVpZ2h0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd1RMRGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFkgPSBlLmNsaWVudFkgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRZO1xuICAgIGNvbnN0IG1vbWVudFggPSB0aGlzLnJhdGlvVmFsdWUoKSA/IHRoaXMucmF0aW9WYWx1ZSgpICogbW9tZW50WSA6IGUuY2xpZW50WCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFg7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VUb3A7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgdG9wLCBsZWZ0IH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IC0xLCBoZWlnaHQ6IC0xLCBsZWZ0OiAxLCB0b3A6IDEgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICBsZWZ0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoIC0gd2lkdGg7XG4gICAgdG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHRvcCwgbGVmdCwgaGVpZ2h0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd1RSRGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFkgPSBlLmNsaWVudFkgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRZO1xuICAgIGNvbnN0IG1vbWVudFggPSB0aGlzLnJhdGlvVmFsdWUoKSA/IC1tb21lbnRZICogdGhpcy5yYXRpb1ZhbHVlKCkgOiBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VMZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VXaWR0aCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQ7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgdG9wIH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IDEsIGhlaWdodDogLTEsIGxlZnQ6IDAsIHRvcDogMSB9LCBtb21lbnRYLCBtb21lbnRZKTtcblxuICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGdldFdpZHRoSGVpZ2h0UmVzaXplQ3JvcEZvbGxvdyh0aGlzLnJhdGlvVmFsdWUoKSwgd2lkdGgsIGhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCwgdGhpcy5taW5XaWR0aCwgdGhpcy5taW5IZWlnaHQpO1xuICAgIHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCAtIGhlaWdodDtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyB0b3AsIGhlaWdodCwgd2lkdGggfSwgdHJ1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlc2l6ZUNyb3BGb2xsb3dCUkRpcihlOiBJRXZlbnQpIHtcbiAgICBjb25zdCBtb21lbnRZID0gZS5jbGllbnRZIC0gdGhpcy5zdGFydE1vdXNlRGltKCkuY2xpZW50WTtcbiAgICBjb25zdCBtb21lbnRYID0gdGhpcy5yYXRpb1ZhbHVlKCkgPyBtb21lbnRZICogdGhpcy5yYXRpb1ZhbHVlKCkgOiBlLmNsaWVudFggLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRYO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlVG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VIZWlnaHQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3A7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVdpZHRoIC0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdDtcbiAgICBsZXQgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IDEsIGhlaWdodDogMSwgbGVmdDogMCwgdG9wOiAwIH0sIG1vbWVudFgsIG1vbWVudFkpO1xuXG4gICAgW3dpZHRoLCBoZWlnaHRdID0gZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93KHRoaXMucmF0aW9WYWx1ZSgpLCB3aWR0aCwgaGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0LCB0aGlzLm1pbldpZHRoLCB0aGlzLm1pbkhlaWdodCk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgaGVpZ2h0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNpemVDcm9wRm9sbG93VkxEaXIgPSAoZTogSUV2ZW50KSA9PiB7XG4gICAgY29uc3QgbW9tZW50WCA9IGUuY2xpZW50WCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFg7XG4gICAgY29uc3QgbW9tZW50WSA9IHRoaXMucmF0aW9WYWx1ZSgpID8gbW9tZW50WCAvIHRoaXMucmF0aW9WYWx1ZSgpIDogMDtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3AgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVRvcDtcbiAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlTGVmdDtcbiAgICBsZXQgeyB3aWR0aCwgaGVpZ2h0LCB0b3AsIGxlZnQgfSA9IHRoaXMuZ2V0UmVjdFJlc2l6ZUNyb3BGb2xsb3coeyB3aWR0aDogLTEsIGhlaWdodDogLTEsIGxlZnQ6IDEsIHRvcDogMSB9LCBtb21lbnRYLCBtb21lbnRZKTtcblxuICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGdldFdpZHRoSGVpZ2h0UmVzaXplQ3JvcEZvbGxvdyh0aGlzLnJhdGlvVmFsdWUoKSwgd2lkdGgsIGhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCwgdGhpcy5taW5XaWR0aCwgdGhpcy5taW5IZWlnaHQpO1xuICAgIGxlZnQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggLSB3aWR0aDtcbiAgICB0b3AgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3AgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgLSBoZWlnaHQ7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgdG9wLCBsZWZ0LCBoZWlnaHQsIHdpZHRoIH0sIHRydWUpO1xuICB9O1xuXG4gIHByb3RlY3RlZCByZXNpemVDcm9wRm9sbG93VlJEaXIgPSAoZTogSUV2ZW50KSA9PiB7XG4gICAgY29uc3QgbW9tZW50WCA9IGUuY2xpZW50WCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFg7XG4gICAgY29uc3QgbW9tZW50WSA9IHRoaXMucmF0aW9WYWx1ZSgpID8gLW1vbWVudFggLyB0aGlzLnJhdGlvVmFsdWUoKSA6IDA7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VUb3A7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZVdpZHRoIC0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdDtcbiAgICBsZXQgeyB3aWR0aCwgaGVpZ2h0LCB0b3AgfSA9IHRoaXMuZ2V0UmVjdFJlc2l6ZUNyb3BGb2xsb3coeyB3aWR0aDogMSwgaGVpZ2h0OiAtMSwgbGVmdDogMCwgdG9wOiAxIH0sIG1vbWVudFgsIG1vbWVudFkpO1xuXG4gICAgW3dpZHRoLCBoZWlnaHRdID0gZ2V0V2lkdGhIZWlnaHRSZXNpemVDcm9wRm9sbG93KHRoaXMucmF0aW9WYWx1ZSgpLCB3aWR0aCwgaGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0LCB0aGlzLm1pbldpZHRoLCB0aGlzLm1pbkhlaWdodCk7XG4gICAgdG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHRvcCwgaGVpZ2h0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd0hURGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFkgPSBlLmNsaWVudFkgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRZO1xuICAgIGNvbnN0IG1vbWVudFggPSB0aGlzLnJhdGlvVmFsdWUoKSA/IG1vbWVudFkgKiB0aGlzLnJhdGlvVmFsdWUoKSA6IDA7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCArIHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQ7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgdGhpcy5zdGFydE1vdXNlRGltKCkuaGVpZ2h0IC0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VUb3A7XG4gICAgbGV0IHsgd2lkdGgsIGhlaWdodCwgdG9wLCBsZWZ0IH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IC0xLCBoZWlnaHQ6IC0xLCBsZWZ0OiAxLCB0b3A6IDEgfSwgbW9tZW50WCwgbW9tZW50WSk7XG5cbiAgICBbd2lkdGgsIGhlaWdodF0gPSBnZXRXaWR0aEhlaWdodFJlc2l6ZUNyb3BGb2xsb3codGhpcy5yYXRpb1ZhbHVlKCksIHdpZHRoLCBoZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHRoaXMubWluV2lkdGgsIHRoaXMubWluSGVpZ2h0KTtcbiAgICB0b3AgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS50b3AgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5oZWlnaHQgLSBoZWlnaHQ7XG4gICAgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS53aWR0aCAtIHdpZHRoO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5jcm9wQXJlYSgpLCB7IHRvcCwgbGVmdCwgaGVpZ2h0LCB3aWR0aCB9LCB0cnVlKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgcmVzaXplQ3JvcEZvbGxvd0hCRGlyID0gKGU6IElFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vbWVudFkgPSBlLmNsaWVudFkgLSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5jbGllbnRZO1xuICAgIGNvbnN0IG1vbWVudFggPSB0aGlzLnJhdGlvVmFsdWUoKSA/IG1vbWVudFkgKiB0aGlzLnJhdGlvVmFsdWUoKSA6IDA7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VUb3AgKyB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUhlaWdodCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcDtcbiAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoICsgdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlTGVmdDtcbiAgICBsZXQgeyB3aWR0aCwgaGVpZ2h0LCBsZWZ0IH0gPSB0aGlzLmdldFJlY3RSZXNpemVDcm9wRm9sbG93KHsgd2lkdGg6IDEsIGhlaWdodDogMSwgbGVmdDogLTEsIHRvcDogMCB9LCBtb21lbnRYLCBtb21lbnRZKTtcblxuICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGdldFdpZHRoSGVpZ2h0UmVzaXplQ3JvcEZvbGxvdyh0aGlzLnJhdGlvVmFsdWUoKSwgd2lkdGgsIGhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCwgdGhpcy5taW5XaWR0aCwgdGhpcy5taW5IZWlnaHQpO1xuICAgIGxlZnQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgdGhpcy5zdGFydE1vdXNlRGltKCkud2lkdGggLSB3aWR0aDtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuY3JvcEFyZWEoKSwgeyBoZWlnaHQsIGxlZnQsIHdpZHRoIH0sIHRydWUpO1xuICB9O1xuXG4gIHByaXZhdGUgZ2V0UmVjdFJlc2l6ZUNyb3BGb2xsb3cocmF0aW86IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXI7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSwgbW9tZW50WDogbnVtYmVyLCBtb21lbnRZOiBudW1iZXIpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLndpZHRoICsgbW9tZW50WCAqIHJhdGlvLndpZHRoO1xuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmhlaWdodCArIG1vbWVudFkgKiByYXRpby5oZWlnaHQ7XG4gICAgY29uc3QgdG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgbW9tZW50WSAqIHJhdGlvLnRvcDtcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5zdGFydE1vdXNlRGltKCkubGVmdCArIG1vbWVudFggKiByYXRpby5sZWZ0O1xuXG4gICAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wIH07XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJNb3VzZXVwKCkge1xuICAgIHRoaXMuaW1hZ2VDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2N1cnNvci1tb3ZlJyk7XG4gICAgdGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnY3Vyc29yLW1vdmUnKTtcbiAgICB0aGlzLnJlc2l6ZVN0YXRlLnNldCgnbm9uZScpO1xuICAgIHRoaXMubW92ZVN0YXRlLnNldCgnbm9uZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2V3aGVlbChldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmhhc1pvb20oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQuZGVsdGFZIDwgMCkge1xuICAgICAgdGhpcy56b29tSW1hZ2UoMSAvIDEuMSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy56b29tSW1hZ2UoMS4xKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlckltYWdlQ29udGFpbmVyTW91c2Vkb3duKGU6IGFueSkge1xuICAgIGlmICh0aGlzLnJlc2l6ZVN0YXRlKCkgPT09ICdub25lJyAmJiB0aGlzLm1vdmVTdGF0ZSgpID09PSAnbm9uZScpIHtcbiAgICAgIHRoaXMubW92ZVN0YXRlLnNldCgnaW1hZ2UnKTtcbiAgICAgIHRoaXMuaGFuZGxlck1vdXNlZG93bihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJDcm9wUmVzaXplKGU6IGFueSwgcmVzaXplVHlwZTogVFlQRV9SRVNJWkVfU1RBVEUpIHtcbiAgICB0aGlzLnJlc2l6ZVN0YXRlLnNldChyZXNpemVUeXBlKTtcbiAgICB0aGlzLmRyYWdHcmlkQ3JvcC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5oYW5kbGVyTW91c2Vkb3duKGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2Vkb3duQ3JvcEFyZWEoZTogYW55KSB7XG4gICAgdGhpcy5tb3ZlU3RhdGUuc2V0KCdjbGlwJyk7XG4gICAgdGhpcy5oYW5kbGVyTW91c2Vkb3duKGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTW91c2Vkb3duKGU6IElFdmVudCkge1xuICAgIGNvbnN0IFt3aWR0aCwgaGVpZ2h0LCB0b3AsIGxlZnRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0JywgJ3N0eWxlLnRvcCcsICdzdHlsZS5sZWZ0J10pO1xuICAgIGNvbnN0IFtpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCwgaW1hZ2VUb3AsIGltYWdlTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgc3dpdGNoICh0aGlzLm1vdmVTdGF0ZSgpKSB7XG4gICAgICBjYXNlICdpbWFnZSc6XG4gICAgICAgIHRoaXMuaW1hZ2VDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2N1cnNvci1tb3ZlJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2xpcCc6XG4gICAgICAgIGlmICh3aWR0aCA9PT0gaW1hZ2VXaWR0aCAmJiBoZWlnaHQgPT09IGltYWdlSGVpZ2h0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2N1cnNvci1tb3ZlJyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0TW91c2VEaW0uc2V0KHtcbiAgICAgIGNsaWVudFg6IGUuY2xpZW50WCxcbiAgICAgIGNsaWVudFk6IGUuY2xpZW50WSxcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgdG9wOiB0b3AsXG4gICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgaW1hZ2VUb3A6IGltYWdlVG9wLFxuICAgICAgaW1hZ2VMZWZ0OiBpbWFnZUxlZnQsXG4gICAgICBpbWFnZVdpZHRoOiBpbWFnZVdpZHRoLFxuICAgICAgaW1hZ2VIZWlnaHQ6IGltYWdlSGVpZ2h0XG4gICAgfSk7XG4gICAgdGhpcy5yYXRpb1ZhbHVlLnNldCh0aGlzLmdldENyb3BSYXRpb1ZhbHVlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlSW1hZ2UoZTogSUV2ZW50KSB7XG4gICAgY29uc3QgbW9tZW50WSA9IGUuY2xpZW50WSAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFk7XG4gICAgY29uc3QgbW9tZW50WCA9IGUuY2xpZW50WCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFg7XG4gICAgY29uc3QgaW1nVG9wID0gdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VUb3AgKyBtb21lbnRZO1xuICAgIGNvbnN0IGltZ0xlZnQgPSB0aGlzLnN0YXJ0TW91c2VEaW0oKS5pbWFnZUxlZnQgKyBtb21lbnRYO1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLnRvcCArIG1vbWVudFk7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMuc3RhcnRNb3VzZURpbSgpLmxlZnQgKyBtb21lbnRYO1xuXG5cbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuaW1hZ2VPcmlnaW4oKSwgeyB0b3A6IGltZ1RvcCwgbGVmdDogaW1nTGVmdCB9KTtcbiAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuaW1hZ2VDbGlwKCksIHsgdG9wOiBpbWdUb3AsIGxlZnQ6IGltZ0xlZnQgfSk7XG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgdG9wLCBsZWZ0IH0pO1xuICAgIHRoaXMuc2V0Q2lyY2xlUG9zaXRpb24oeyB0b3A6IGltZ1RvcCwgbGVmdDogaW1nTGVmdCwgd2lkdGg6IHRoaXMuc3RhcnRNb3VzZURpbSgpLmltYWdlV2lkdGgsIGhlaWdodDogdGhpcy5zdGFydE1vdXNlRGltKCkuaW1hZ2VIZWlnaHQgfSk7XG4gIH1cblxuICBwcml2YXRlIG1vdmVDbGlwQXJlYShlOiBJRXZlbnQpIHtcbiAgICBjb25zdCBbaW1nV2lkdGgsIGltZ0hlaWdodCwgaW1nVG9wLCBpbWdMZWZ0XSA9IGdldFN0eWxlc09mRWxlbWVudDxudW1iZXI+KHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnLCAnc3R5bGUudG9wJywgJ3N0eWxlLmxlZnQnXSk7XG4gICAgY29uc3QgW2Nyb3BXaWR0aCwgY3JvcEhlaWdodF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnXSk7XG4gICAgY29uc3QgbW9tZW50WSA9IGUuY2xpZW50WSAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFk7XG4gICAgY29uc3QgbW9tZW50WCA9IGUuY2xpZW50WCAtIHRoaXMuc3RhcnRNb3VzZURpbSgpLmNsaWVudFg7XG4gICAgbGV0IHRvcCA9IE1hdGgubWF4KGltZ1RvcCwgdGhpcy5zdGFydE1vdXNlRGltKCkudG9wICsgbW9tZW50WSk7XG4gICAgbGV0IGxlZnQgPSBNYXRoLm1heChpbWdMZWZ0LCB0aGlzLnN0YXJ0TW91c2VEaW0oKS5sZWZ0ICsgbW9tZW50WCk7XG5cbiAgICB0b3AgPSBNYXRoLm1pbih0b3AsIGltZ1RvcCArIGltZ0hlaWdodCAtIGNyb3BIZWlnaHQpO1xuICAgIGxlZnQgPSBNYXRoLm1pbihsZWZ0LCBpbWdMZWZ0ICsgaW1nV2lkdGggLSBjcm9wV2lkdGgpO1xuXG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgdG9wLCBsZWZ0IH0sIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB6b29tSW1hZ2Uoc2NhbGU6IG51bWJlcikge1xuICAgIGNvbnN0IFtjdXJyV2lkdGgsIGN1cnJIZWlnaHQsIGN1cnJUb3AsIGN1cnJMZWZ0XSA9IGdldFN0eWxlc09mRWxlbWVudDxudW1iZXI+KHRoaXMuaW1hZ2VPcmlnaW4oKS5uYXRpdmVFbGVtZW50LCBbJ29mZnNldFdpZHRoJywgJ29mZnNldEhlaWdodCcsICdzdHlsZS50b3AnLCAnc3R5bGUubGVmdCddKTtcbiAgICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KGN1cnJXaWR0aCAqIHNjYWxlLCA1MCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5pbWFnZU9yaWdpbigpLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ICogd2lkdGggLyB0aGlzLmltYWdlT3JpZ2luKCkubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgY2VudGVyIHBvaW50IG9mIHRoZSBjdXJyZW50IHZpZXdcbiAgICBjb25zdCBjZW50ZXJYID0gY3VyckxlZnQgKyBjdXJyV2lkdGggLyAyO1xuICAgIGNvbnN0IGNlbnRlclkgPSBjdXJyVG9wICsgY3VyckhlaWdodCAvIDI7XG5cbiAgICAvLyBDYWxjdWxhdGUgbmV3IHBvc2l0aW9uIHRvIG1haW50YWluIGNlbnRlciBwb2ludFxuICAgIGNvbnN0IHRvcCA9IGNlbnRlclkgLSBoZWlnaHQgLyAyO1xuICAgIGNvbnN0IGxlZnQgPSBjZW50ZXJYIC0gd2lkdGggLyAyO1xuXG4gICAgLy8gR2V0IGN1cnJlbnQgY3JvcCBhcmVhIGRpbWVuc2lvbnMgYW5kIHBvc2l0aW9uXG4gICAgbGV0IFtjcm9wV2lkdGgsIGNyb3BIZWlnaHRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0J10pO1xuICAgIGNvbnN0IFtjcm9wVG9wLCBjcm9wTGVmdF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudCwgWydzdHlsZS50b3AnLCAnc3R5bGUubGVmdCddKTtcblxuICAgIC8vIFNjYWxlIGNyb3AgYXJlYSBkaW1lbnNpb25zIHByb3BvcnRpb25hbGx5XG4gICAgY3JvcFdpZHRoID0gY3JvcFdpZHRoICogc2NhbGU7XG4gICAgY3JvcEhlaWdodCA9IGNyb3BIZWlnaHQgKiBzY2FsZTtcblxuICAgIC8vIENhbGN1bGF0ZSBuZXcgY3JvcCBhcmVhIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBpbWFnZVxuICAgIGNvbnN0IGNyb3BUb3BOZXcgPSB0b3AgKyAoY3JvcFRvcCAtIGN1cnJUb3ApICogc2NhbGU7XG4gICAgY29uc3QgY3JvcExlZnROZXcgPSBsZWZ0ICsgKGNyb3BMZWZ0IC0gY3VyckxlZnQpICogc2NhbGU7XG5cbiAgICAvLyBFbnN1cmUgY3JvcCBhcmVhIHN0YXlzIHdpdGhpbiBib3VuZHNcbiAgICBjb25zdCBtYXhDcm9wV2lkdGggPSB3aWR0aDtcbiAgICBjb25zdCBtYXhDcm9wSGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGNvbnN0IG1pbldpZHRoID0gMjA7XG4gICAgY29uc3QgbWluSGVpZ2h0ID0gMjA7XG5cbiAgICBjcm9wV2lkdGggPSBNYXRoLm1pbihjcm9wV2lkdGgsIG1heENyb3BXaWR0aCk7XG4gICAgY3JvcEhlaWdodCA9IE1hdGgubWluKGNyb3BIZWlnaHQsIG1heENyb3BIZWlnaHQpO1xuICAgIGNyb3BXaWR0aCA9IE1hdGgubWF4KGNyb3BXaWR0aCwgbWluV2lkdGgpO1xuICAgIGNyb3BIZWlnaHQgPSBNYXRoLm1heChjcm9wSGVpZ2h0LCBtaW5IZWlnaHQpO1xuXG4gICAgdGhpcy5yYXRpb1ZhbHVlLnNldCh0aGlzLmdldENyb3BSYXRpb1ZhbHVlKCkpO1xuICAgIGlmICh0aGlzLnJhdGlvVmFsdWUoKSkge1xuICAgICAgY3JvcEhlaWdodCA9IGNyb3BXaWR0aCAvIHRoaXMucmF0aW9WYWx1ZSgpO1xuICAgICAgY3JvcEhlaWdodCA9IE1hdGgubWluKGNyb3BIZWlnaHQsIG1heENyb3BIZWlnaHQpO1xuICAgICAgY3JvcEhlaWdodCA9IE1hdGgubWF4KGNyb3BIZWlnaHQsIG1pbkhlaWdodCk7XG4gICAgICBjcm9wV2lkdGggPSBjcm9wSGVpZ2h0ICogdGhpcy5yYXRpb1ZhbHVlKCk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGNsaXBwaW5nIHJlY3RhbmdsZVxuICAgIHRoaXMucmVjdENsaXAudXBkYXRlKHJlY3QgPT4ge1xuICAgICAgY29uc3QgcmVjdFRvcCA9IGNyb3BUb3BOZXcgLSB0b3A7XG4gICAgICBjb25zdCByZWN0TGVmdCA9IGNyb3BMZWZ0TmV3IC0gbGVmdDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnJlY3QsXG4gICAgICAgIHRvcDogcmVjdFRvcCxcbiAgICAgICAgbGVmdDogcmVjdExlZnQsXG4gICAgICAgIHJpZ2h0OiByZWN0TGVmdCArIGNyb3BXaWR0aCxcbiAgICAgICAgYm90dG9tOiByZWN0VG9wICsgY3JvcEhlaWdodFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNsaXAgPSBgcmVjdCgke3RoaXMucmVjdENsaXAoKS50b3B9cHgsICR7dGhpcy5yZWN0Q2xpcCgpLnJpZ2h0fXB4LCAke3RoaXMucmVjdENsaXAoKS5ib3R0b219cHgsICR7dGhpcy5yZWN0Q2xpcCgpLmxlZnR9cHgpYDtcblxuICAgIC8vIFVwZGF0ZSBhbGwgZWxlbWVudHMgd2l0aCBuZXcgcG9zaXRpb25zIGFuZCBkaW1lbnNpb25zXG4gICAgdGhpcy5zZXRTdHlsZXNFbGVtZW50cyh0aGlzLmNyb3BBcmVhKCksIHsgdG9wOiBjcm9wVG9wTmV3LCBsZWZ0OiBjcm9wTGVmdE5ldywgd2lkdGg6IGNyb3BXaWR0aCwgaGVpZ2h0OiBjcm9wSGVpZ2h0IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZU9yaWdpbigpLCB7IHRvcCwgbGVmdCwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB0aGlzLnNldENpcmNsZVBvc2l0aW9uKHsgdG9wLCBsZWZ0LCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZUNsaXAoKSwgeyBjbGlwLCB0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgdGhpcy5nZXRSZWN0Q2xpcEltYWdlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclJvdGF0ZUltYWdlKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaW1hZ2Uuc3JjID0gdGhpcy5pbWdTcmMoKTtcbiAgICB0aGlzLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcblxuICAgICAgY29uc3QgW3dpZHRoLCBoZWlnaHRdID0gZ2V0U3R5bGVzT2ZFbGVtZW50PG51bWJlcj4odGhpcy5pbWFnZU9yaWdpbigpLm5hdGl2ZUVsZW1lbnQsIFsnb2Zmc2V0V2lkdGgnLCAnb2Zmc2V0SGVpZ2h0J10pO1xuICAgICAgY29uc3Qgb3JpZ2luV2lkdGggPSB0aGlzLmltYWdlLndpZHRoO1xuICAgICAgY29uc3Qgb3JpZ2luSGVpZ2h0ID0gdGhpcy5pbWFnZS5oZWlnaHQ7XG4gICAgICBsZXQgdG9wID0gcGFyc2VJbnQodGhpcy5pbWFnZU9yaWdpbigpLm5hdGl2ZUVsZW1lbnQuc3R5bGUudG9wKTtcbiAgICAgIGxldCBsZWZ0ID0gcGFyc2VJbnQodGhpcy5pbWFnZU9yaWdpbigpLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCk7XG4gICAgICBsZXQgbmV3SGVpZ2h0ID0gd2lkdGg7XG4gICAgICBsZXQgbmV3V2lkdGggPSBoZWlnaHQ7XG4gICAgICBjb25zdCByYXRpbyA9IG5ld1dpZHRoIC8gbmV3SGVpZ2h0O1xuXG4gICAgICBjYW52YXMuaGVpZ2h0ID0gb3JpZ2luV2lkdGg7XG4gICAgICBjYW52YXMud2lkdGggPSBvcmlnaW5IZWlnaHQ7XG4gICAgICBjdHg/LnRyYW5zbGF0ZShvcmlnaW5IZWlnaHQgLyAyLCBvcmlnaW5XaWR0aCAvIDIpO1xuICAgICAgY3R4Py5yb3RhdGUoTWF0aC5QSSAvIDIpO1xuICAgICAgY3R4Py5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgLW9yaWdpbldpZHRoIC8gMiwgLW9yaWdpbkhlaWdodCAvIDIpO1xuICAgICAgY29uc3Qgc3JjID0gZ2V0RGF0YVVybChjYW52YXMsIHRoaXMubWltZXR5cGUoKSwgdGhpcy5pbWFnZS5zcmMpO1xuXG4gICAgICB0aGlzLmltZ1NyYy5zZXQoc3JjKTtcbiAgICAgIG5ld1dpZHRoID0gTWF0aC5tYXgobmV3V2lkdGgsIG9yaWdpbkhlaWdodCk7XG4gICAgICBuZXdXaWR0aCA9IE1hdGgubWluKG5ld1dpZHRoLCB0aGlzLmNvbnRhaW5lcldpZHRoKCkpO1xuICAgICAgbmV3SGVpZ2h0ID0gbmV3V2lkdGggLyByYXRpbztcbiAgICAgIG5ld0hlaWdodCA9IE1hdGgubWF4KG5ld0hlaWdodCwgb3JpZ2luV2lkdGgpO1xuICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5taW4obmV3SGVpZ2h0LCB0aGlzLmNvbnRhaW5lckhlaWdodCgpKTtcbiAgICAgIG5ld1dpZHRoID0gbmV3SGVpZ2h0ICogcmF0aW87XG4gICAgICB0b3AgPSB0b3AgLSAobmV3SGVpZ2h0IC8gMiAtIGhlaWdodCAvIDIpO1xuICAgICAgbGVmdCA9IGxlZnQgLSAobmV3V2lkdGggLyAyIC0gd2lkdGggLyAyKTtcbiAgICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZU9yaWdpbigpLCB7IHNyYywgdG9wLCBsZWZ0LCB3aWR0aDogbmV3V2lkdGgsIGhlaWdodDogbmV3SGVpZ2h0IH0pO1xuICAgICAgdGhpcy5zZXRDaXJjbGVQb3NpdGlvbih7IHRvcCwgbGVmdCwgd2lkdGg6IG5ld1dpZHRoLCBoZWlnaHQ6IG5ld0hlaWdodCB9KTtcbiAgICAgIHRoaXMuc2V0U3R5bGVzRWxlbWVudHModGhpcy5pbWFnZUNsaXAoKSwgeyBzcmMsIHRvcCwgbGVmdCwgd2lkdGg6IG5ld1dpZHRoLCBoZWlnaHQ6IG5ld0hlaWdodCB9KTtcbiAgICAgIHRoaXMuZ2V0T3JpZ2luYWxJbWFnZVNpemUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNyb3BTaXplLnNldCh7IHdpZHRoOiB0aGlzLm9yaWdpbldpZHRoKCksIGhlaWdodDogdGhpcy5vcmlnaW5IZWlnaHQoKSB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVPcmlnaW5JbWFnZVNpemUoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jaGFuZ2VkSW1hZ2UodHJ1ZSk7XG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRPcmlnaW5hbEltYWdlU2l6ZShjYWxsYmFjaz86ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLmltYWdlLnNyYyA9IHRoaXMuaW1nU3JjKCk7XG4gICAgdGhpcy5pbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9yaWdpbldpZHRoLnNldCh0aGlzLmltYWdlLndpZHRoKTtcbiAgICAgIHRoaXMub3JpZ2luSGVpZ2h0LnNldCh0aGlzLmltYWdlLmhlaWdodCk7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjaGFuZ2VkSW1hZ2Uoc3RhdHVzOiBib29sZWFuKSB7XG4gICAgdGhpcy5jaGFuZ2VkLnNldChzdGF0dXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJGbGlwSW1hZ2UoZXZlbnQ6IEV2ZW50LCBtb2RlOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pbWFnZS5zcmMgPSB0aGlzLmltZ1NyYygpO1xuICAgIHRoaXMuaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmltYWdlLndpZHRoO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5pbWFnZS5oZWlnaHQ7XG5cbiAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgY3R4LmRyYXdJbWFnZSh0aGlzLmltYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgaWYgKG1vZGUgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIGN0eC50cmFuc2xhdGUod2lkdGgsIDApO1xuICAgICAgICAgIGN0eC5zY2FsZSgtMSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGUgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICBjdHgudHJhbnNsYXRlKDAsIGhlaWdodCk7XG4gICAgICAgICAgY3R4LnNjYWxlKDEsIC0xKTtcbiAgICAgICAgfVxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBjdHguZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIDAsIDApO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YVVybCA9IGdldERhdGFVcmwoY2FudmFzLCB0aGlzLm1pbWV0eXBlKCksIHRoaXMuaW1hZ2Uuc3JjKTtcblxuICAgICAgdGhpcy5pbWdTcmMuc2V0KGRhdGFVcmwpO1xuICAgICAgdGhpcy5pbWFnZU9yaWdpbigpLm5hdGl2ZUVsZW1lbnQuc3JjID0gZGF0YVVybDtcbiAgICAgIHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5zcmMgPSBkYXRhVXJsO1xuICAgICAgdGhpcy51cGRhdGVDcm9wQXJlYVBvcygpO1xuICAgICAgdGhpcy51cGRhdGVSZWN0Q2xpcFBvcygpO1xuICAgICAgdGhpcy5jaGFuZ2VkSW1hZ2UodHJ1ZSk7XG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUmVzdG9yZUltYWdlKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaW1nU3JjLnNldCh0aGlzLmRhdGFVcmxPcmlnaW4oKSk7XG4gICAgdGhpcy5kcmFnR3JpZENyb3Auc2V0KGZhbHNlKTtcbiAgICB0aGlzLmdldE9yaWdpbmFsSW1hZ2VTaXplKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlT3JpZ2luSW1hZ2VTaXplKCk7XG4gICAgICB0aGlzLmNoYW5nZWRJbWFnZShmYWxzZSk7XG4gICAgICB0aGlzLmNyb3BSYXRpb0l0ZW1TZWxlY3RlZC5zZXQoJycpO1xuICAgICAgdGhpcy51cGRhdGVDcm9wQXJlYVBvcygpO1xuICAgICAgdGhpcy51cGRhdGVSZWN0Q2xpcFBvcygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcm9wSW1hZ2UoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuaW1hZ2Uuc3JjID0gdGhpcy5pbWdTcmMoKTtcbiAgICAgIHRoaXMuaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luV2lkdGggPSB0aGlzLmltYWdlLndpZHRoO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHBhcnNlSW50KHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCk7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHBhcnNlSW50KHRoaXMuaW1hZ2VDbGlwKCkubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQpO1xuICAgICAgICBjb25zdCBzY2FsZSA9IG9yaWdpbldpZHRoIC8gd2lkdGg7XG4gICAgICAgIGNvbnN0IHJlY3RDbGlwID0gdGhpcy5nZXRSZWN0Q2xpcEltYWdlKCk7XG4gICAgICAgIGNvbnN0IGNyb3BSZWN0ID0gZ2V0Q3JvcFJlY3RJbWFnZShyZWN0Q2xpcCwgd2lkdGgsIGhlaWdodCwgc2NhbGUpO1xuXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBjcm9wUmVjdC5oZWlnaHQ7XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IGNyb3BSZWN0LndpZHRoO1xuICAgICAgICB0aGlzLm9yaWdpbkhlaWdodC5zZXQoY2FudmFzLmhlaWdodCk7XG4gICAgICAgIHRoaXMub3JpZ2luV2lkdGguc2V0KGNhbnZhcy53aWR0aCk7XG4gICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICBjdHguZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIGNyb3BSZWN0LmxlZnQsIGNyb3BSZWN0LnRvcCwgY3JvcFJlY3Qud2lkdGgsIGNyb3BSZWN0LmhlaWdodCwgMCwgMCwgY3JvcFJlY3Qud2lkdGgsIGNyb3BSZWN0LmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YVVybCA9IGdldERhdGFVcmwoY2FudmFzLCB0aGlzLm1pbWV0eXBlKCksIHRoaXMuaW1hZ2Uuc3JjKTtcblxuICAgICAgICB0aGlzLmNoYW5nZWRJbWFnZSh0cnVlKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhVXJsKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclNhdmVGaWxlKGV2ZW50OiBFdmVudCwgbW9kZVNhdmU6IFRZUEVfTU9ERV9TQVZFKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgZGF0YVVybCA9IGF3YWl0IHRoaXMuY3JvcEltYWdlKCk7XG4gICAgY29uc3QgZmlsZSA9IGNvbnZlcnRCYXNlNjRUb0Jsb2IoZGF0YVVybCk7XG5cbiAgICB0aGlzLm91dFNhdmVGaWxlLmVtaXQoeyBmaWxlOiBmaWxlLCB1cmw6IGRhdGFVcmwsIG1vZGU6IG1vZGVTYXZlIH0pO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckNsb3NlKGV2ZW50OiBFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMub3V0Q2xvc2UuZW1pdCh7IGlzQ2xpY2tCdXR0b25DbG9zZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0Q3JvcFJhdGlvSXRlbShldmVudDogRXZlbnQsIGtleTogc3RyaW5nKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5jcm9wUmF0aW9JdGVtU2VsZWN0ZWQuc2V0KGtleSk7XG4gICAgdGhpcy5jaGFuZ2VkLnNldCh0cnVlKTtcbiAgICB0aGlzLmRyYWdHcmlkQ3JvcC5zZXQodHJ1ZSk7XG4gICAgdGhpcy51cGRhdGVPcmlnaW5JbWFnZVNpemUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUmVzaXplKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLnJlc2l6ZUNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlc2l6ZUNvbXBvbmVudFJlZiA9IHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGlic1VpQ29tcG9uZW50c0ltYWdlRWRpdG9yUmVzaXplQ29tcG9uZW50KTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMucmVzaXplQ29tcG9uZW50UmVmLmluc3RhbmNlO1xuICAgIGNvbnN0IHN1YnMgPSBpbnN0YW5jZS5vdXRDbG9zZS5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLnJlc2l6ZUNvbXBvbmVudFJlZik7XG4gICAgICB0aGlzLnJlc2l6ZUNvbXBvbmVudFJlZiA9IHVuZGVmaW5lZDtcbiAgICAgIHN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcblxuICAgIGluc3RhbmNlLnNyYyA9IHRoaXMuaW1nU3JjKCk7XG4gICAgaW5zdGFuY2UubWltZXR5cGUgPSB0aGlzLm1pbWV0eXBlKCk7XG4gICAgaW5zdGFuY2UuekluZGV4ID0gdGhpcy56SW5kZXgoKTtcbiAgICBzdWJzLmFkZChpbnN0YW5jZS5vdXRTYXZlLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIHRoaXMucmVzaXplRGF0YS5zZXQoZXZlbnQpO1xuICAgICAgdGhpcy5zYXZlUmVzaXplKCk7XG4gICAgfSkpO1xuICAgIGluc3RhbmNlLnJlc2l6ZURhdGEgPSB7IHJhdGlvOiAxMDAsIHdpZHRoOiB0aGlzLm9yaWdpbldpZHRoKCksIGhlaWdodDogdGhpcy5vcmlnaW5IZWlnaHQoKSB9O1xuICAgIGluc3RhbmNlLm9yaWdpbldpZHRoID0gdGhpcy5vcmlnaW5XaWR0aCgpO1xuICAgIGluc3RhbmNlLm9yaWdpbkhlaWdodCA9IHRoaXMub3JpZ2luSGVpZ2h0KCk7XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5hZGRUb0JvZHkodGhpcy5yZXNpemVDb21wb25lbnRSZWYpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNhdmVSZXNpemUoKSB7XG4gICAgdGhpcy5pbWFnZS5zcmMgPSB0aGlzLmltZ1NyYygpO1xuICAgIHRoaXMuaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICAgIGNhbnZhcy53aWR0aCA9IHRoaXMucmVzaXplRGF0YSgpLndpZHRoO1xuICAgICAgY2FudmFzLmhlaWdodCA9IHRoaXMucmVzaXplRGF0YSgpLmhlaWdodDtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgICBpZiAoY3R4KSB7XG4gICAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcy5pbWFnZSwgMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNyYyA9IGdldERhdGFVcmwoY2FudmFzLCB0aGlzLm1pbWV0eXBlKCksIHRoaXMuaW1hZ2Uuc3JjKTtcbiAgICAgIGNvbnN0IFtjdXJyV2lkdGgsIGN1cnJIZWlnaHQsIGN1cnJUb3AsIGN1cnJMZWZ0XSA9IGdldFN0eWxlc09mRWxlbWVudDxudW1iZXI+KHRoaXMuaW1hZ2VPcmlnaW4oKS5uYXRpdmVFbGVtZW50LCBbJ29mZnNldFdpZHRoJywgJ29mZnNldEhlaWdodCcsICdzdHlsZS50b3AnLCAnc3R5bGUubGVmdCddKTtcbiAgICAgIGNvbnN0IHJhdGlvID0gY3VycldpZHRoIC8gY3VyckhlaWdodDtcbiAgICAgIGxldCBuZXdXaWR0aCA9IE1hdGgubWluKHRoaXMucmVzaXplRGF0YSgpLndpZHRoLCB0aGlzLmNvbnRhaW5lcldpZHRoKCkpO1xuICAgICAgbGV0IG5ld0hlaWdodCA9IG5ld1dpZHRoIC8gcmF0aW87XG5cbiAgICAgIG5ld0hlaWdodCA9IE1hdGgubWluKHRoaXMucmVzaXplRGF0YSgpLmhlaWdodCwgdGhpcy5jb250YWluZXJIZWlnaHQoKSk7XG4gICAgICBuZXdXaWR0aCA9IG5ld0hlaWdodCAqIHJhdGlvO1xuICAgICAgTWF0aC5taW4odGhpcy5yZXNpemVEYXRhKCkuaGVpZ2h0LCB0aGlzLmNvbnRhaW5lckhlaWdodCgpKTtcbiAgICAgIGNvbnN0IHRvcCA9IGN1cnJUb3AgKyAoY3VyckhlaWdodCAtIG5ld0hlaWdodCkgLyAyO1xuICAgICAgY29uc3QgbGVmdCA9IGN1cnJMZWZ0ICsgKGN1cnJXaWR0aCAtIG5ld1dpZHRoKSAvIDI7XG4gICAgICBjb25zdCBtb3ZlbWVudFkgPSBjdXJyVG9wIC0gdG9wO1xuICAgICAgY29uc3QgbW92ZW1lbnRYID0gY3VyckxlZnQgLSBsZWZ0O1xuXG4gICAgICB0aGlzLnJlY3RDbGlwLnVwZGF0ZShyZWN0ID0+IHtcbiAgICAgICAgY29uc3QgcmVjdFRvcCA9IHJlY3QudG9wICsgbW92ZW1lbnRZO1xuICAgICAgICBjb25zdCByZWN0TGVmdCA9IHJlY3QubGVmdCArIG1vdmVtZW50WDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZWN0LFxuICAgICAgICAgIHRvcDogcmVjdFRvcCxcbiAgICAgICAgICBsZWZ0OiByZWN0TGVmdCxcbiAgICAgICAgICByaWdodDogcmVjdExlZnQgKyBuZXdXaWR0aCxcbiAgICAgICAgICBib3R0b206IHJlY3RUb3AgKyBuZXdIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2xpcCA9IGByZWN0KCR7dGhpcy5yZWN0Q2xpcCgpLnRvcH1weCwgJHt0aGlzLnJlY3RDbGlwKCkucmlnaHR9cHgsICR7dGhpcy5yZWN0Q2xpcCgpLmJvdHRvbX1weCwgJHt0aGlzLnJlY3RDbGlwKCkubGVmdH1weClgO1xuXG4gICAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuaW1hZ2VPcmlnaW4oKSwgeyBzcmMsIHRvcCwgbGVmdCwgd2lkdGg6IG5ld1dpZHRoLCBoZWlnaHQ6IG5ld0hlaWdodCB9KTtcbiAgICAgIHRoaXMuc2V0Q2lyY2xlUG9zaXRpb24oeyB0b3AsIGxlZnQsIHdpZHRoOiBuZXdXaWR0aCwgaGVpZ2h0OiBuZXdIZWlnaHQgfSk7XG4gICAgICB0aGlzLnNldFN0eWxlc0VsZW1lbnRzKHRoaXMuaW1hZ2VDbGlwKCksIHsgc3JjLCBjbGlwLCB0b3AsIGxlZnQsIHdpZHRoOiBuZXdXaWR0aCwgaGVpZ2h0OiBuZXdIZWlnaHQgfSk7XG4gICAgICB0aGlzLmltZ1NyYy5zZXQoc3JjKTtcbiAgICAgIHRoaXMub3JpZ2luV2lkdGguc2V0KHRoaXMucmVzaXplRGF0YSgpLndpZHRoKTtcbiAgICAgIHRoaXMub3JpZ2luSGVpZ2h0LnNldCh0aGlzLnJlc2l6ZURhdGEoKS5oZWlnaHQpO1xuICAgICAgdGhpcy51cGRhdGVDcm9wQXJlYVBvcygpO1xuICAgICAgdGhpcy51cGRhdGVSZWN0Q2xpcFBvcygpO1xuICAgICAgdGhpcy5jaGFuZ2VkSW1hZ2UodHJ1ZSk7XG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ3JvcFdpZHRoKCkge1xuICAgIHRoaXMucHJvY2Vzc0Nyb3BXaWR0aE9ySGVpZ2h0KCd3aWR0aCcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDcm9wSGVpZ2h0KCkge1xuICAgIHRoaXMucHJvY2Vzc0Nyb3BXaWR0aE9ySGVpZ2h0KCdoZWlnaHQnKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0Nyb3BXaWR0aE9ySGVpZ2h0KGNyb3BCeTogJ3dpZHRoJyB8ICdoZWlnaHQnKSB7XG4gICAgdGhpcy5yYXRpb1ZhbHVlLnNldCh0aGlzLmdldENyb3BSYXRpb1ZhbHVlKCkpO1xuICAgIGNvbnN0IFtjdXJySW1nV2lkdGgsIGN1cnJJbWdIZWlnaHQsIGN1cnJJbWdUb3AsIGN1cnJJbWdMZWZ0XSA9IGdldFN0eWxlc09mRWxlbWVudDxudW1iZXI+KHRoaXMuaW1hZ2VPcmlnaW4oKS5uYXRpdmVFbGVtZW50LCBbJ29mZnNldFdpZHRoJywgJ29mZnNldEhlaWdodCcsICdzdHlsZS50b3AnLCAnc3R5bGUubGVmdCddKTtcbiAgICBsZXQgW2Nyb3BXaWR0aCwgY3JvcEhlaWdodF0gPSBnZXRTdHlsZXNPZkVsZW1lbnQ8bnVtYmVyPih0aGlzLmNyb3BBcmVhKCkubmF0aXZlRWxlbWVudCwgWydvZmZzZXRXaWR0aCcsICdvZmZzZXRIZWlnaHQnXSk7XG4gICAgY29uc3QgW2Nyb3BUb3AsIGNyb3BMZWZ0XSA9IGdldFN0eWxlc09mRWxlbWVudDxudW1iZXI+KHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LCBbJ3N0eWxlLnRvcCcsICdzdHlsZS5sZWZ0J10pO1xuICAgIGNvbnN0IG1heENyb3BXaWR0aCA9IGN1cnJJbWdMZWZ0ICsgY3VyckltZ1dpZHRoIC0gY3JvcExlZnQ7XG4gICAgY29uc3QgbWF4Q3JvcEhlaWdodCA9IGN1cnJJbWdIZWlnaHQgKyBjdXJySW1nVG9wIC0gY3JvcFRvcDtcbiAgICBjb25zdCByYXRpbyA9IHRoaXMub3JpZ2luV2lkdGgoKSAvIGN1cnJJbWdXaWR0aDtcbiAgICBsZXQgY3JvcFZhbHVlID0gZ2V0KHRoaXMuY3JvcFNpemUsIGNyb3BCeSkgLyByYXRpbztcblxuICAgIGNyb3BWYWx1ZSA9IE1hdGgubWluKGNyb3BWYWx1ZSwgY3JvcEJ5ID09PSAnd2lkdGgnID8gbWF4Q3JvcFdpZHRoIDogbWF4Q3JvcEhlaWdodCk7XG4gICAgY3JvcFZhbHVlID0gTWF0aC5tYXgoMSwgY3JvcFZhbHVlKTtcbiAgICBpZiAodGhpcy5yYXRpb1ZhbHVlKCkpIHtcbiAgICAgIGlmIChjcm9wQnkgPT09ICd3aWR0aCcpIHtcbiAgICAgICAgY3JvcEhlaWdodCA9IGNyb3BWYWx1ZSAvIHRoaXMucmF0aW9WYWx1ZSgpO1xuICAgICAgICBjcm9wSGVpZ2h0ID0gTWF0aC5taW4oY3JvcEhlaWdodCwgbWF4Q3JvcEhlaWdodCk7XG4gICAgICAgIGNyb3BWYWx1ZSA9IGNyb3BIZWlnaHQgKiB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICAgICAgdGhpcy5jcm9wU2l6ZS51cGRhdGUoY3JvcFNpemUgPT4gKHsgLi4uY3JvcFNpemUsIGhlaWdodDogTWF0aC5yb3VuZChjcm9wSGVpZ2h0ICogcmF0aW8pIH0pKTtcbiAgICAgICAgdGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7Y3JvcEhlaWdodH1weGA7XG4gICAgICB9XG4gICAgICBpZiAoY3JvcEJ5ID09PSAnaGVpZ2h0Jykge1xuICAgICAgICBjcm9wV2lkdGggPSBjcm9wVmFsdWUgKiB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICAgICAgY3JvcFdpZHRoID0gTWF0aC5taW4oY3JvcFdpZHRoLCBtYXhDcm9wV2lkdGgpO1xuICAgICAgICBjcm9wVmFsdWUgPSBjcm9wV2lkdGggLyB0aGlzLnJhdGlvVmFsdWUoKTtcbiAgICAgICAgdGhpcy5jcm9wU2l6ZS51cGRhdGUoY3JvcFNpemUgPT4gKHsgLi4uY3JvcFNpemUsIHdpZHRoOiBNYXRoLnJvdW5kKGNyb3BXaWR0aCAqIHJhdGlvKSB9KSk7XG4gICAgICAgIHRoaXMuY3JvcEFyZWEoKS5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7Y3JvcFdpZHRofXB4YDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jcm9wU2l6ZS51cGRhdGUoY3JvcFNpemUgPT4gKHsgLi4uY3JvcFNpemUsIFtjcm9wQnldOiBNYXRoLnJvdW5kKGNyb3BWYWx1ZSAqIHJhdGlvKSB9KSk7XG4gICAgdGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQuc3R5bGVbY3JvcEJ5XSA9IGAke2Nyb3BWYWx1ZX1weGA7XG4gICAgY29uc3QgaW1hZ2VSZWN0ID0gdGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGNyb3BSZWN0ID0gdGhpcy5jcm9wQXJlYSgpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBjcm9wUmVjdDtcbiAgICBjb25zdCBsZWZ0ID0gY3JvcFJlY3QubGVmdCAtIGltYWdlUmVjdC5sZWZ0O1xuICAgIGNvbnN0IHRvcCA9IGNyb3BSZWN0LnRvcCAtIGltYWdlUmVjdC50b3A7XG4gICAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gICAgY29uc3QgYm90dG9tID0gdG9wICsgaGVpZ2h0O1xuXG4gICAgdGhpcy5pbWFnZUNsaXAoKS5uYXRpdmVFbGVtZW50LnN0eWxlLmNsaXAgPSBgcmVjdCgke3RvcH1weCwgJHtyaWdodH1weCwgJHtib3R0b219cHgsICR7bGVmdH1weClgO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdHlsZXNFbGVtZW50cyhlbGVtZW50OiBFbGVtZW50UmVmLCBzdHlsZXM6IElTdHlsZXMsIGlzVXBkYXRlUmVjdENsaXBQb3M/OiBib29sZWFuKSB7XG4gICAgT2JqZWN0LmtleXMoc3R5bGVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGdldChzdHlsZXMsIGtleSk7XG4gICAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNldChlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUsIGtleSwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IGAke3ZhbHVlfXB4YCA6IHZhbHVlKTtcbiAgICB9KTtcbiAgICBpZiAoaXNVcGRhdGVSZWN0Q2xpcFBvcykge1xuICAgICAgdGhpcy51cGRhdGVSZWN0Q2xpcFBvcygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMucmVzaXplQ29tcG9uZW50UmVmKTtcbiAgfVxufVxuIiwiPGxpYnNfdWktY29tcG9uZW50cy1tb2RhbCBbd2lkdGhdPVwiJ2NhbGMoMTAwdncgLSA0MDBweCknXCJcbiAgW2hlaWdodF09XCInY2FsYygxMDB2aCAtIDEwMHB4KSdcIlxuICBbbWluV2lkdGhdPVwiJzEyMDBweCdcIlxuICBbaGVhZGVyQ29uZmlnXT1cIntpZ25vcmVIZWFkZXJUaGVtZTogdHJ1ZSwgcmVtb3ZlQnV0dG9uQ2xvc2U6IHRydWV9XCJcbiAgW2JvZHlDb25maWddPVwie2NsYXNzSW5jbHVkZTogJyFwLTAnLCBzY3JvbGxPdmVybGF5T3B0aW9uczoge3Njcm9sbFg6ICdoaWRkZW4nLCBzY3JvbGxZOiAnaGlkZGVuJ319XCJcbiAgW2Zvb3RlckNvbmZpZ109XCJ7aGlkZGVuOiB0cnVlfVwiXG4gIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICBbYnV0dG9uc0Zvb3Rlcl09XCJbXVwiXG4gIFttb2RlXT1cIidjZW50ZXInXCI+XG4gIDxkaXYgY2xhc3M9XCJsaWJzLXVpLW1vZGFsLWhlYWRlci1jdXN0b20gdy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgcmVsYXRpdmUgbXgtWzI0cHhdIGgtWzE2cHhdXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgbGlicy11aS1mb250LWg0cyBhYnNvbHV0ZVwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICBbY29uZmlnXT1cInt6SW5kZXg6IHpJbmRleCgpfVwiPlxuICAgICAgICAgIHt7ICdpMThuX2VkaXRfZmlsZV9uYW1lJyB8IHRyYW5zbGF0ZTp7ZmlsZV9uYW1lOiBuYW1lRmlsZSgpfSB9fVxuICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICBAaWYgKG1vZGVTaG93QnV0dG9uKCkgPT09ICdzYXZlLWZpbGUnKSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiJ2J1dHRvbi10aGlyZCdcIlxuICAgICAgICAgIFtsYWJlbF09XCInaTE4bl9jYW5jZWwnXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3B5LVs2cHhdIHB4LVsxMnB4XSBtci1bMTZweF0nXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsb3NlKCRldmVudClcIiAvPlxuXG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gY2xhc3M9XCJtci1bMjRweF1cIlxuICAgICAgICAgIFtsYWJlbF09XCInaTE4bl9zYXZlJ1wiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidweS1bNnB4XSBweC1bMTJweF0nXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclNhdmVGaWxlKCRldmVudCwnc2F2ZS1maWxlJylcIiAvPlxuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFtsYWJlbF09XCInaTE4bl9zYXZlX3RvX25ld19maWxlJ1wiXG4gICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInbXgtWzE2cHhdIHB5LVs2cHhdIHB4LVsxMnB4XSdcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKSB8fCAhY2hhbmdlZCgpXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclNhdmVGaWxlKCRldmVudCwnc2F2ZS1hcGktYXMtbmV3LWZpbGUnKVwiIC8+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiJ2J1dHRvbi1zZWNvbmRhcnknXCJcbiAgICAgICAgICBbbGFiZWxdPVwiJ2kxOG5fc2F2ZSdcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3B5LVs2cHhdIHB4LVsxMnB4XSdcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKSB8fCAhY2hhbmdlZCgpXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclNhdmVGaWxlKCRldmVudCwnc2F2ZS1hcGknKVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoLVsxMnB4XSBsaWJzLXVpLWJvcmRlci1sZWZ0LWdlbmVyYWwgbXgtWzE2cHhdXCI+PC9kaXY+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gY2xhc3M9XCJtci1bMjRweF1cIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3AtWzZweF0nXCJcbiAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLXRoaXJkLWhvdmVyLWRhbmdlcidcIlxuICAgICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpXCJcbiAgICAgICAgICBbcG9wb3Zlcl09XCJ7Y29uZmlnOiB7Y29udGVudDogJ2kxOG5fZXhpdF9lZGl0X21vZGUnLCB6SW5kZXg6IHpJbmRleCgpfX1cIlxuICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tY2xvc2UnXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsb3NlKCRldmVudClcIiAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImxpYnMtdWktbW9kYWwtYm9keS1jdXN0b20gaC1mdWxsIHctZnVsbCBmbGV4XCI+XG4gICAgPGRpdiAjaW1hZ2VFZGl0b3JDb250YWluZXJcbiAgICAgIGNsYXNzPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBiZy1bI2U2ZTdlYV0gYm9yZGVyLXJhZGl1cy1ib3R0b20tbGVmdC04cHggcC1bMzJweF0gbGlicy11aS1pbnB1dC1pbWFnZS1lZGl0b3ItY29udGFpbmVyLWxlZnRcIj5cbiAgICAgIEBpZiAobG9hZGluZ0ltYWdlKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGgtZnVsbCB3LWZ1bGwgYmctWyNlNmU3ZWFdIHRvcC0wIGxlZnQtMCB6LVs1XVwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc3Bpbm5lciBbc2l6ZV09XCInbWVkaXVtJ1wiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGgtWzMycHhdIHctW2NhbGMoMTAwJS02NHB4KV0gYmctWyNlNmU3ZWFiOF0gdG9wLTAgbGVmdC1bMzJweF0gei1bMV1cIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIHctWzMycHhdIGgtZnVsbCBiZy1bI2U2ZTdlYWI4XSBsZWZ0LTAgdG9wLTAgei1bMV0gcm91bmRlZC1ibC1bOHB4XVwiPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgdy1bMzJweF0gaC1mdWxsIGJnLVsjZTZlN2VhYjhdIHJpZ2h0LTAgdG9wLTAgei1bMV1cIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGgtWzMycHhdIHctW2NhbGMoMTAwJS02NHB4KV0gYmctWyNlNmU3ZWFiOF0gYm90dG9tLTAgbGVmdC1bMzJweF0gei1bMV1cIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAjaW1hZ2VDb250YWluZXJcbiAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHJvdW5kZWQtYmwtWzhweF0gbWluLWgtMFwiPlxuICAgICAgICA8ZGl2ICNjaXJjbGVUTFxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV1cIlxuICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWRyYWdHcmlkQ3JvcCgpXCJcbiAgICAgICAgICBbY2xhc3MuZmxleF09XCJkcmFnR3JpZENyb3AoKVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0NpcmNsZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICNjaXJjbGVUUlxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV1cIlxuICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWRyYWdHcmlkQ3JvcCgpXCJcbiAgICAgICAgICBbY2xhc3MuZmxleF09XCJkcmFnR3JpZENyb3AoKVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0NpcmNsZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICNjaXJjbGVCTFxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV1cIlxuICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWRyYWdHcmlkQ3JvcCgpXCJcbiAgICAgICAgICBbY2xhc3MuZmxleF09XCJkcmFnR3JpZENyb3AoKVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0NpcmNsZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICNjaXJjbGVCUlxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV1cIlxuICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWRyYWdHcmlkQ3JvcCgpXCJcbiAgICAgICAgICBbY2xhc3MuZmxleF09XCJkcmFnR3JpZENyb3AoKVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0NpcmNsZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aW1nICNpbWFnZU9yaWdpblxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgYm9yZGVyLVs0cHhdIGJvcmRlci1bIzhlNjFlZV0gcm91bmRlZC1bNHB4XSB0b3AtWy0xMDAwcHhdIGxlZnQtWy0xMDAwcHhdXCJcbiAgICAgICAgICBsb2FkaW5nPVwibGF6eVwiXG4gICAgICAgICAgW3NyY109XCJpbWdTcmMoKVwiXG4gICAgICAgICAgKGxvYWQpPVwiaGFuZGxlckltYWdlTG9hZGVkKClcIlxuICAgICAgICAgIChlcnJvcik9XCJoYW5kbGVySW1hZ2VFcnJvcigkZXZlbnQpXCIgLz5cbiAgICAgICAgPGltZyAjaW1hZ2VDbGlwXG4gICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsxXSAgdG9wLVstMTAwMHB4XSBsZWZ0LVstMTAwMHB4XVwiXG4gICAgICAgICAgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAgIFtzcmNdPVwiaW1nU3JjKClcIlxuICAgICAgICAgIChlcnJvcik9XCJoYW5kbGVySW1hZ2VFcnJvcigkZXZlbnQpXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIHRvcC0wIGxlZnQtMCByaWdodC0wIGJvdHRvbS0wIGJnLVsjZTZlN2VhYjhdXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICNjcm9wQXJlYVxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMl0gYm9yZGVyLVs0cHhdIGJvcmRlci1bIzhlNjFlZV0gcm91bmRlZC1bNHB4XVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsXCI+XG4gICAgICAgICAgICA8ZGl2ICNjcm9wVExcbiAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsyXSBsZWZ0LVstMThweF0gdG9wLVstMTdweF0gY3Vyc29yLW53c2UtcmVzaXplXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInN2Z0Fycm93XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAjY3JvcEJMXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMl0gbGVmdC1bLTE3cHhdIGJvdHRvbS1bLTE4cHhdIGN1cnNvci1uZXN3LXJlc2l6ZSByb3RhdGUtWzI3MGRlZ11cIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwic3ZnQXJyb3dcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICNjcm9wVFJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsyXSByaWdodC1bLTE3cHhdIHRvcC1bLTE3cHhdIGN1cnNvci1uZXN3LXJlc2l6ZSByb3RhdGUtWzkwZGVnXVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdBcnJvd1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgI2Nyb3BCUlxuICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotWzJdIHJpZ2h0LVstMThweF0gYm90dG9tLVstMTdweF0gY3Vyc29yLW53c2UtcmVzaXplIHJvdGF0ZS1bMTgwZGVnXVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdBcnJvd1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgI2Nyb3BMaW5lVkxcbiAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsxXSB3LVsxMnB4XSBsZWZ0LVstNnB4XSB0b3AtMCBib3R0b20tMCBjdXJzb3ItZXctcmVzaXplXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgI2Nyb3BMaW5lVlJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsxXSB3LVsxMnB4XSByaWdodC1bLTZweF0gdG9wLTAgYm90dG9tLTAgY3Vyc29yLWV3LXJlc2l6ZVwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICNjcm9wTGluZUhUXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei1bMV0gaC1bMTJweF0gbGVmdC0wIHRvcC1bLTZweF0gcmlnaHQtMCBjdXJzb3ItbnMtcmVzaXplXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgI2Nyb3BMaW5lSEJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LVsxXSBoLVsxMnB4XSBsZWZ0LTAgcmlnaHQtMCBib3R0b20tWy02cHhdIGN1cnNvci1ucy1yZXNpemVcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgYWJzb2x1dGUgaC1bMXB4XSB0b3AtMCBsZWZ0LTAgcmlnaHQtMFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGFic29sdXRlIGgtWzFweF0gYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTBcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSB3LVsxcHhdIHRvcC0wIGxlZnQtMCBib3R0b20tMFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGFic29sdXRlIHctWzFweF0gdG9wLTAgYm90dG9tLTAgcmlnaHQtMFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGFic29sdXRlIGgtWzJweF0gdG9wLVszMyVdIGxlZnQtMCByaWdodC0wXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgYWJzb2x1dGUgaC1bMnB4XSB0b3AtWzY2JV0gbGVmdC0wIHJpZ2h0LTBcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSB3LVsycHhdIHRvcC0wIGJvdHRvbS0wIGxlZnQtWzMzJV1cIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBhYnNvbHV0ZSB3LVsycHhdIHRvcC0wIGJvdHRvbS0wIGxlZnQtWzY2JV1cIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc3Bpbm5lciBbc2l6ZV09XCInbWVkaXVtJ1wiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInctWzMyMHB4XSBzaHJpbmstMCBwLVsxNnB4XSBiZy1bI2ZmZmZmZl0gcm91bmRlZC1ici1bOHB4XSB6LVsyXSBsaWJzLXVpLWlucHV0LWltYWdlLWVkaXRvci1jb250YWluZXItcmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItWzE2cHhdXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDRtXCI+e3sgJ2kxOG5fY3V0dGluZ19yYXRpbycgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tdGhpcmQnXCJcbiAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLXJlZnJlc2gnXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidwLVs2cHhdIG1yLVs4cHhdJ1wiXG4gICAgICAgICAgW3BvcG92ZXJdPVwie2NvbmZpZzoge2NvbnRlbnQ6ICdpMThuX3Jlc3RvcmVfdGhlX29yaWdpbmFsX3N0YXRlJywgekluZGV4OiB6SW5kZXgoKX19XCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKCkgfHwgIWNoYW5nZWQoKVwiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJSZXN0b3JlSW1hZ2UoJGV2ZW50KVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi1bMTZweF0gbGlicy11aS1pbWFnZS1lZGl0b3ItZWRpdC1kaXNwbGF5LWdyaWQtZ2FwLTE2XCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgY3JvcFJhdGlvSXRlbXMoKTsgdHJhY2sgaXRlbS5rZXkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3NpemVCdXR0b25dPVwiJ2xhcmdlJ1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKSB8fCByZXF1aXJlZENyb3BGb2xsb3dSYXRpbygpXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIml0ZW0uaWNvbisnICF0ZXh0LVsyMHB4XSdcIlxuICAgICAgICAgICAgICBbaXNBY3RpdmVdPVwiaXRlbS5rZXkgPT09IGNyb3BSYXRpb0l0ZW1TZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJTZWxlY3RDcm9wUmF0aW9JdGVtKCRldmVudCwgaXRlbS5rZXkpXCIgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDZyIHRleHQtWyM2YTczODNdIG10LVs0cHhdXCI+XG4gICAgICAgICAgICAgIHt7IChpdGVtLmtleSA9PT0gJ2ZyZWUnID8gJ2kxOG5fY3VzdG9tJyA6IGl0ZW0ua2V5KSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLVsxNnB4XSBmbGV4XCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXZhbGlkIGNsYXNzPVwibXItWzE2cHhdXCJcbiAgICAgICAgICBbZGF0YVR5cGVdPVwiJ2ludCdcIlxuICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJ7bGFiZWxMZWZ0OiAnaTE4bl93aWR0aCcsIGNsYXNzSW5jbHVkZTogJ21iLVs0cHhdJywgbGFiZWxMZWZ0Q2xhc3M6ICdsaWJzLXVpLWZvbnQtaDdyJ31cIlxuICAgICAgICAgIFtmaWVsZE5hbWVCaW5kXT1cIid3aWR0aCdcIlxuICAgICAgICAgIFsoaXRlbSldPVwiY3JvcFNpemVcIlxuICAgICAgICAgIFt1bml0c1JpZ2h0XT1cIlt7aWQ6ICdweCcsIGxhYmVsOiAncHgnfV1cIlxuICAgICAgICAgIFtrZXlTZWxlY3RlZFVuaXRSaWdodF09XCIncHgnXCJcbiAgICAgICAgICBbdmFsdWVVcERvd25OdW1iZXJdPVwiMVwiXG4gICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIm9yaWdpbldpZHRoKClcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKVwiXG4gICAgICAgICAgKG91dFZhbHVlQ2hhbmdlKT1cImhhbmRsZXJDcm9wV2lkdGgoKVwiIC8+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXZhbGlkIFtkYXRhVHlwZV09XCInaW50J1wiXG4gICAgICAgICAgW2xhYmVsQ29uZmlnXT1cIntsYWJlbExlZnQ6ICdpMThuX2xlbmd0aCcsIGNsYXNzSW5jbHVkZTogJ21iLVs0cHhdJywgbGFiZWxMZWZ0Q2xhc3M6ICdsaWJzLXVpLWZvbnQtaDdyJ31cIlxuICAgICAgICAgIFtmaWVsZE5hbWVCaW5kXT1cIidoZWlnaHQnXCJcbiAgICAgICAgICBbKGl0ZW0pXT1cImNyb3BTaXplXCJcbiAgICAgICAgICBbdW5pdHNSaWdodF09XCJbe2lkOiAncHgnLCBsYWJlbDogJ3B4J31dXCJcbiAgICAgICAgICBba2V5U2VsZWN0ZWRVbml0UmlnaHRdPVwiJ3B4J1wiXG4gICAgICAgICAgW3ZhbHVlVXBEb3duTnVtYmVyXT1cIjFcIlxuICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCJvcmlnaW5IZWlnaHQoKVwiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGxvYWRpbmdJbWFnZSgpXCJcbiAgICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlckNyb3BIZWlnaHQoKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDRtIG1iLVsxNnB4XVwiPnt7ICdpMThuX3JvdGF0ZV9waG90b3MnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBsaWJzLXVpLWltYWdlLWVkaXRvci1lZGl0LWRpc3BsYXktZ3JpZC1nYXAtMTZcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW3NpemVCdXR0b25dPVwiJ2xhcmdlJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0ltYWdlKClcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1vdXRsaW5lJ1wiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLXJvdGF0ZS1pbWFnZS1vdXRsaW5lICF0ZXh0LVsyMHB4XSdcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJSb3RhdGVJbWFnZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2ciB0ZXh0LVsjNmE3MzgzXSBtdC1bNHB4XVwiPlxuICAgICAgICAgICAge3sgJ2kxOG5fcm90YXRlX25pbmV0eV9kZWdyZWVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2l6ZUJ1dHRvbl09XCInbGFyZ2UnXCJcbiAgICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKVwiXG4gICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLW91dGxpbmUnXCJcbiAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tZmxpcC12ZXJ0aWNhbCAhdGV4dC1bMjBweF0nXCJcbiAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyRmxpcEltYWdlKCRldmVudCwgJ3ZlcnRpY2FsJylcIiAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDZyIHRleHQtWyM2YTczODNdIG10LVs0cHhdXCI+XG4gICAgICAgICAgICB7eyAnaTE4bl92ZXJ0aWNhbF9mbGlwJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2l6ZUJ1dHRvbl09XCInbGFyZ2UnXCJcbiAgICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKVwiXG4gICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLW91dGxpbmUnXCJcbiAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tZmxpcC1ob3Jpem9udGFsICF0ZXh0LVsyMHB4XSdcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJGbGlwSW1hZ2UoJGV2ZW50LCAnaG9yaXpvbnRhbCcpXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2ciB0ZXh0LVsjNmE3MzgzXSBtdC1bNHB4XVwiPlxuICAgICAgICAgICAge3sgJ2kxOG5faG9yaXpvbnRhbF9mbGlwJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2l6ZUJ1dHRvbl09XCInbGFyZ2UnXCJcbiAgICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBsb2FkaW5nSW1hZ2UoKVwiXG4gICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLW91dGxpbmUnXCJcbiAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tc2NhbGUgIXRleHQtWzIwcHhdJ1wiXG4gICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclJlc2l6ZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2ciB0ZXh0LVsjNmE3MzgzXSBtdC1bNHB4XVwiPlxuICAgICAgICAgICAge3sgJ2kxOG5fcmVzaXplJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbGlic191aS1jb21wb25lbnRzLW1vZGFsPlxuXG48bmctdGVtcGxhdGUgI3N2Z0Fycm93PlxuICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgIHdpZHRoPVwiNDBcIlxuICAgIGhlaWdodD1cIjQwXCJcbiAgICB2aWV3Qm94PVwiMCAwIDQwIDQwXCJcbiAgICBmaWxsPVwibm9uZVwiPlxuICAgIDxwYXRoIGQ9XCJNMzMuNjk4NyAxNC42OTY5TDE4LjMzMDkgMTQuNjk2OUMxNi41MTYgMTQuNjk2OSAxNS4wMzExIDE2LjE4MTggMTUuMDMxMSAxNy45OTY3TDE1LjAzMTEgMzMuMzY0NVwiXG4gICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICBzdHJva2Utd2lkdGg9XCI1LjgzMzMzXCJcbiAgICAgIHN0cm9rZS1taXRlcmxpbWl0PVwiMTBcIlxuICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gIDwvc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzdmdDaXJjbGU+XG4gIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgd2lkdGg9XCIxNVwiXG4gICAgaGVpZ2h0PVwiMTVcIlxuICAgIHZpZXdCb3g9XCIwIDAgMTUgMTVcIlxuICAgIGZpbGw9XCJub25lXCI+XG4gICAgPGNpcmNsZSBjeD1cIjcuNVwiXG4gICAgICBjeT1cIjcuNVwiXG4gICAgICByPVwiNy41XCJcbiAgICAgIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gIDwvc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|