@libs-ui/components-table 0.2.304 → 0.2.305
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.
|
@@ -480,13 +480,13 @@ export class LibsUiComponentsTableComponent {
|
|
|
480
480
|
for (let i = 0; i < argumentsValue.length; i++) {
|
|
481
481
|
let argument = argumentsValue[i];
|
|
482
482
|
if (argument instanceof HttpParams && argument.has(keyPerPage)) {
|
|
483
|
-
const currentPerPage =
|
|
483
|
+
const currentPerPage = get(argument, keyPerPage, '25');
|
|
484
484
|
argument = argument.set(keyPerPage, perPage);
|
|
485
485
|
set(argumentsValue, `${i}`, argument);
|
|
486
486
|
return currentPerPage;
|
|
487
487
|
}
|
|
488
488
|
if (argument instanceof Object && Object.keys(argument).includes(keyPerPage)) {
|
|
489
|
-
const currentPerPage =
|
|
489
|
+
const currentPerPage = get(argument, keyPerPage, '25');
|
|
490
490
|
set(argument, keyPerPage, perPage);
|
|
491
491
|
return currentPerPage;
|
|
492
492
|
}
|
|
@@ -683,4 +683,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
683
683
|
LibsUiPipesCallFunctionInTemplatePipe, LibsUiPipesCheckSelectedByKeyPipe
|
|
684
684
|
], template: "<div class='flex flex-col w-full h-full'>\n @if (!ignoreBar()) {\n <div\n class=\"flex items-center relative z-[1] bottom-0 left-0 w-full bg-white libs-ui-table-shadow-bottom {{ classBarInclude() }}\"\n [class.px-[16px]]=\"keysSelected().length || labelBarNoSelectItem()\"\n [class.py-[6px]]=\"keysSelected().length || labelBarNoSelectItem()\"\n (mouseenter)=\"resetIndexHover($event)\">\n <ng-content select='div.libs-ui-table-bar-left'></ng-content>\n @if (!keysSelected().length && labelBarNoSelectItem()) {\n <div class=\"{{ classLabelBarNoSelectItem() ?? 'px-[12px] py-[5px]' }}\"\n [innerHtml]='labelBarNoSelectItem() | translate:{value:totalItemDisplay()}'>\n </div>\n }\n @if (keysSelected().length) {\n <div class=\"flex items-center pl-[12px]\">\n <div class=\"flex items-center h-full mt-[-2px]\">\n <libs_ui-components-checkbox-single [checked]=\"true\"\n [disable]=\"loading() || disableCheckbox()\"\n (outChange)=\"handlerChangeAllChecked()\" />\n </div>\n <div class=\"libs-ui-font-h5m text-[#071631] mr-[8px] {{ classLabelBarButtons() }}\">\n {{ labelBarButtons() | translate:{ value:keysSelected().length } }}\n </div>\n @if (configSelectMoreItem()) {\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [popoverCustomConfig]=\"{\n widthByParent:false,\n ignoreArrow: true,\n maxHeight: 2048,\n classInclude:'!w-[121px]',\n position: {\n mode:'start',\n distance:0\n }\n }\"\n [listConfig]=\"listConfigMoreItem()\"\n [listHiddenInputSearch]=\"true\"\n [listMaxItemShow]=\"5\"\n class=\"!w-[16px] h-[16px] mr-[8px]\"\n (outSelectKey)=\"handlerSelectedMoreItem($event)\"\n (outFunctionsControl)=\"handlerFunctionControlMoreSelectItem($event)\">\n <libs_ui-components-buttons-button [type]=\"'button-link-primary'\"\n [classInclude]=\"'!p-0 m-0'\"\n [classIconLeft]=\"'before:!text-[16px] libs-ui-icon-move-right rotate-90 mr-[6px]'\"\n [popover]=\"{config:{content:'i18n_more_select'}}\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n }\n <div class=\"h-[16px] libs-ui-border-left-general ml-[16px]\"></div>\n @if (barButtons()?.length) {\n @for (button of barButtons();track button) {\n <libs_ui-components-buttons-button [type]=\"button.type || 'button-link-primary'\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classInclude]=\"button.classInclude || ''\"\n [label]=\"(button.label || ' ') | translate\"\n (outClick)=\"handlerBarButtonClick(button)\" />\n }\n }\n </div>\n }\n <ng-content select='div.libs-ui-table-bar-right'></ng-content>\n </div>\n }\n\n <div #tableContainerElementRef\n class=\"libs-ui-table flex flex-col w-full h-full relative {{ classTableContainerInclude() }}\"\n [class.px-[16px]]='!ignoreBar()'\n (mouseleave)=\"handlerMouseLeaveContainer($event)\">\n <div class=\"relative w-full shrink-0\"\n [style.height.px]=\"headerElementRef.offsetHeight\">\n <div #headerElementRef\n LibsUiComponentsScrollOverlayDirective\n [options]=\"{scrollbarWidth: 0}\"\n [class.libs-ui-border-bottom-dashed-general]=\"!hasItemHightLight() && isDashBorder()\"\n [class.libs-ui-border-bottom-general]=\"!hasItemHightLight() && !isDashBorder()\"\n [class.!hidden]=\"!items().length && isHiddenHeaderWhenNodata()\"\n [class]=\"classHeaderContainer()\"\n (outScroll)=\"handlerScrollHeader($event)\"\n (mouseenter)=\"handlerMouseEnterHeader($event)\"\n (mouseleave)=\"handlerMouseLeaveHeader($event)\">\n @if (headerLeft().length) {\n <div [class]=\"classHeaderLeftContainer()\">\n @for (header of headerLeft();track header) {\n <ng-container *ngTemplateOutlet=\"templateHeaderRef;context:{headerItem:header,isHeaderLeft:true}\" />\n }\n </div>\n }\n @if (headerRight().length) {\n @for (header of headerRight();track header) {\n <ng-container *ngTemplateOutlet=\"templateHeaderRef;context:{headerItem:header,isHeaderLeft:false}\" />\n }\n }\n </div>\n </div>\n @if (showFooter() && itemFooter() && customPositionFooter() === 'top') {\n <ng-container *ngTemplateOutlet='templateFooterRef' />\n }\n <div class=\"relative flex flex-col w-full h-full overflow-x-hidden bg-white {{ classBodyInclude() || '' }}\">\n <div #bodyElementRef\n class=\"flex h-full w-full relative\"\n LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"handlerScrollBody($event)\"\n (outScrollBottom)=\"handlerScrollBottom($event)\">\n @if (items().length) {\n <virtual-scroller #bodyComponentRef\n [items]=\"items()\"\n [enableUnequalChildrenSizes]=\"enableUnequalChildrenSizes()\"\n class=\"h-full\"\n [style.width.px]=\"headerElementRef.scrollWidth > (bodyElementRef ? bodyElementRef.scrollWidth : 0) ? headerElementRef.scrollWidth: undefined\"\n [parentScroll]=\"bodyElementRef\"\n [bufferAmount]=\"bufferAmount()\">\n @for (data of bodyComponentRef.viewPortItems;track data()) {\n <div #elementHover\n class=\"flex\"\n [class.bg-[#f3fcfc]]=\"data().specificHightLight\"\n [class.libs-ui-border-top-1px-36d3d3]=\"data().specificHightLight && $first && !ignoreBorderItem()\"\n [class.libs-ui-border-bottom-1px-36d3d3]=\"data().specificHightLight && !ignoreBorderItem()\"\n [ngClass]=\"(data().specificHightLight || ($last && ignoreBorderItemLast())) ? 'libs-ui-border-radius-bottom-left-4px libs-ui-border-radius-bottom-right-4px' : ignoreBorderItem() ? '' : isDashBorder() ? 'libs-ui-border-bottom-dashed-general' : 'libs-ui-border-bottom-general'\"\n [style.width.px]=\"headerElementRef.scrollWidth\"\n [class.bg-[#f8f9fa]]=\"itemOfIndexHover === data && !data().specificHightLight\"\n (mouseenter)=\"setIndexHover($event,data)\"\n (mouseleave)=\"resetIndexHoverWhenMouseLeave($event)\">\n @if (headerLeft().length || headerRight().length) {\n <div class=\"flex flex-col w-full\">\n <div class=\"flex w-full\">\n @if (headerLeft().length) {\n <div class=\"flex sticky top-0 left-0 z-[1]\"\n [class.bg-white]=\"!data().specificHightLight\"\n [class.bg-[#f3fcfc]]=\"data().specificHightLight\">\n @for (header of headerLeft();track header) {\n <div\n class=\"relative flex px-[12px] py-[8px] {{ header.ignoreBorderRight ? '': 'libs-ui-border-right-general' }}\"\n [class.bg-[#f8f9fa]]=\"itemOfIndexHover === data && !data().specificHightLight\"\n [ngStyle]=\"(header|LibsUiTableCalculatorColumnPipe:headerElementRef.clientWidth:headerLeft():headerRight()) || (header.isShowIndexOnRow ? {width:'50px','flex-shirk':'0',padding:'8px'} : {})\"\n [ngClass]=\"header.ngClass || {}\">\n <ng-container *ngTemplateOutlet=\"templateBodyRef;context:{header:header,data:data}\" />\n </div>\n }\n </div>\n }\n @if (headerRight().length) {\n @for (header of headerRight();track header) {\n <div class=\"relative flex px-[12px] py-[8px]\"\n [ngStyle]=\"(header|LibsUiTableCalculatorColumnPipe:headerElementRef.clientWidth:headerLeft():headerRight()) || (header.isShowIndexOnRow ? {width:'50px','flex-shirk':'0',padding:'8px'} : {})\"\n [ngClass]=\"header.ngClass || {}\">\n <ng-container *ngTemplateOutlet=\"templateBodyRef;context:{header:header,data:data}\" />\n </div>\n }\n }\n </div>\n @if (configTemplateItemCollapseExpand() && data().specificExpand && data()[configTemplateItemCollapseExpand()?.fieldGetDataExpand || 'specificDataExpand']) {\n <div [class]=\"configTemplateItemCollapseExpand()?.cssWrapper || 'flex w-full'\">\n @for (dataExpand of data()[configTemplateItemCollapseExpand()?.fieldGetDataExpand || 'specificDataExpand']();track $index) {\n @if (configTemplateItemCollapseExpand()?.colTemplateConfig) {\n <libs_ui-components-table-templates [item]=\"dataExpand\"\n [templateCssWrapper]=\"configTemplateItemCollapseExpand()?.templateCssWrapper\"\n [configs]=\"configTemplateItemCollapseExpand()?.colTemplateConfig\" />\n }\n } @empty {\n <div class=\"relative h-[100px]\">\n <ng-container *ngTemplateOutlet=\"templateNodataRef\" />\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </virtual-scroller>\n } @else if (!loading()) {\n <div class=\"sticky left-0 top-0 z-[1] h-full w-full\">\n <ng-container *ngTemplateOutlet=\"templateNodataRef\" />\n </div>\n @if (showScrollTablePinnedIfNoData()) {\n <div class=\"absolute h-[1px] bg-transparent top-0 left-0 z-[1]\"\n [style.width.px]=\"headerElementRef.scrollWidth\"></div>\n }\n }\n </div>\n\n @if (showFooter() && itemFooter() && customPositionFooter() === 'bottom') {\n <ng-container *ngTemplateOutlet='templateFooterRef' />\n }\n\n @if (loading()) {\n <div class=\"absolute w-full h-full z-[2] flex items-center content-center\">\n <libs_ui-components-spinner />\n </div>\n }\n </div>\n\n @if (activityLoadData() === 'click-pagination') {\n <div class=\"flex w-full mt-[12px]\">\n <libs_ui-components-pagination\n [modeDisplayTotalPageAndGotoPage]=\"paginationSetting()?.modeDisplayTotalPageAndGotoPage || 'bottom'\"\n [classDisplayTotalPageAndGotoPage]=\"paginationSetting()?.classDisplayTotalPageAndGotoPage || ''\"\n [classIncludeItem]=\"paginationSetting()?.classIncludeItem || ''\"\n [classIncludeContainer]=\"paginationSetting()?.classIncludeContainer || '!items-end'\"\n [disable]=\"paginationSetting()?.disable || loading() || !items().length\"\n [numberPageDispaly]=\"paginationSetting()?.numberPageDispaly || 5\"\n [showTotalPage]=\"paginationSetting()?.showTotalPage || false\"\n [showInputGotoPage]=\"paginationSetting()?.showInputGotoPage || false\"\n [totalItems]=\"pagingStore()?.total_items || (pagingStore()?.total_pages || 0)*(pagingStore()?.per_page || 0)\"\n [perPage]=\"pagingStore()?.per_page || 0\"\n [currentPage]=\"pagingStore()?.page || 0\"\n (outPageSelect)=\"handlerChangePage($event)\" />\n </div>\n }\n </div>\n</div>\n\n<ng-template #templateHeaderRef\n let-header='headerItem'\n let-isHeaderLeft='isHeaderLeft'>\n <div\n [class]=\"'relative flex '+ (header.paddingLeftRightHeaderContainer ?? ' px-[12px] ') + (isHeaderLeft && !header.ignoreBorderRight ? ' libs-ui-border-right-general ' : ' ')+ ' libs-ui-table-header-col '\"\n [class.flex-col]=\"header.rowsConfig\"\n [class.py-[8px]]='!header.ignorePyDefault'\n [ngStyle]=\"(header|LibsUiTableCalculatorColumnPipe:headerElementRef.clientWidth:headerLeft():headerRight()) || (header.isShowIndexOnRow ? {width:'50px','flex-shirk':'0',padding:'8px'} : {})\"\n [ngClass]=\"header.ngClass || {}\">\n @if (!header.rowsConfig) {\n <ng-container *ngTemplateOutlet=\"templateHeaderContentRef;context:{headerItem:header,isColRender:false}\" />\n }\n @if (header.rowsConfig;as rowsConfig) {\n @for (row of rowsConfig.rows;track row) {\n <div [class]=\"row.classRow\">\n @for (col of row.cols ; track col) {\n <ng-container *ngTemplateOutlet=\"templateHeaderContentRef;context:{headerItem:col,isColRender:true}\" />\n }\n </div>\n }\n }\n </div>\n</ng-template>\n\n<ng-template #templateHeaderContentRef\n let-header='headerItem'\n let-isColRender='isColRender'>\n <div #itemHeaderRef class=\"flex libs-ui-font-h6m min-h-[18px] text-[#6a7383] max-w-full\"\n [class.items-center]='header.contentHeaderAlignCenter ?? true'\n [class.justify-end]='header.contentHeaderJustifyContentEnd'\n [class.w-full]=\"header.isShowIndexOnRow\"\n [ngStyle]=\"isColRender ? ((header|LibsUiTableCalculatorColumnPipe:headerElementRef.clientWidth:headerLeft():headerRight()) || (header.isShowIndexOnRow ? {width:'50px','flex-shirk':'0',padding:'8px'} : {})) : {}\"\n [ngClass]=\"isColRender ? (header.ngClass || {}) : {}\">\n @if (header.hasCheckbox) {\n @if (header.hasCheckboxAll) {\n <div class=\"flex h-full {{ header.checkboxAllClassInclude || 'mr-[16px]' }}\"\n [class.items-center]=\"header.checkboxAlignCenter\">\n <libs_ui-components-checkbox-single [key]=\"'all'\"\n [stillOtherOptions]=\"!!keysSelected().length && keysSelected().length !== items().length\"\n [checked]=\"!!keysSelected().length && keysSelected().length === items().length\"\n [disable]=\"loading()\"\n [classInclude]=\"header.checkboxClassInclude\"\n (outChange)=\"handlerChangeCheckedAllItems($event)\" />\n </div>\n } @else {\n <div class=\"flex h-full ml-[24px] {{ header.checkboxClassInclude }}\">\n </div>\n }\n }\n @for (tooltip of header.tooltipsLeft; track tooltip) {\n <div class=\"mr-[4px]\">\n <libs_ui-components-popover [type]=\"tooltip?.type || 'other'\"\n [mode]=\"tooltip?.mode || 'hover'\"\n [classInclude]=\"tooltip.classInclude || 'text-[#6a7383]'\"\n [ignoreShowPopover]=\"tooltip.ignoreShowTooltip || false\"\n [config]=\"tooltip.config || {content:(tooltip.dataView || ' ') | translate, position: {\n mode: 'center',\n distance: 0,\n autoUpdatePosition: {\n endDistance: 12,\n startDistance: -12\n }\n }}\"\n [innerHTML]=\"tooltip.dataView\" />\n </div>\n }\n\n @if (header.isShowIndexOnRow) {\n <div class=\"flex w-full h-full items-center justify-center {{ header.classIncludeIndexOnRow || '' }}\">\n {{ header.label ?? '#' }}\n </div>\n } @else {\n @if ((header.label | LibsUiPipesCallFunctionInTemplatePipe:header.parseValue:header) | async | translate; as labelHeaderColumn) {\n <libs_ui-components-popover [type]=\"header?.labelConfig?.type || 'text'\"\n [mode]=\"header?.labelConfig?.mode || 'hover'\"\n [classInclude]=\"(header?.labelConfig?.classInclude || '')\"\n [ignoreShowPopover]=\"header?.labelConfig?.ignoreShowTooltip || false\"\n [config]=\"header.labelConfig?.config || {content:labelHeaderColumn}\"\n [innerHTML]=\"labelHeaderColumn\" />\n }\n }\n\n @for (tooltip of header.tooltipsRight; track tooltip) {\n <div class=\"ml-[4px]\">\n <libs_ui-components-popover [type]=\"tooltip?.type || 'other'\"\n [mode]=\"tooltip?.mode || 'hover'\"\n [classInclude]=\"tooltip.classInclude || 'text-[#6a7383]'\"\n [ignoreShowPopover]=\"tooltip.ignoreShowTooltip || false\"\n [config]=\"tooltip.config || {content:(tooltip.dataView || ' ') | translate, position: {\n mode: 'center',\n distance: 0,\n autoUpdatePosition: {\n endDistance: 12,\n startDistance: -12\n }\n }}\"\n [innerHTML]=\"tooltip.dataView\" />\n </div>\n }\n\n @if (header.hasSort && header.orderby) {\n <div class=\"ml-[4px]\">\n <libs_ui-components-buttons-sort-arrow [disable]=\"loading() || !items().length\"\n [fieldSort]=\"header.orderby\"\n [ignorePopoverContent]=\"header.sortIgnoreTooltipContent ?? true\"\n [popoverContentAsc]=\"header.sortTooltipContentAsc\"\n [popoverContentDesc]=\"header.sortTooltipContentDesc\"\n [defaultMode]=\"header.defaultMode\"\n [zIndex]=\"header.zIndexTooltipSort\"\n (outChange)=\"handlerChangeSort($event)\" />\n </div>\n }\n </div>\n @if (header.labelDescription) {\n <div class=\"flex\">\n <libs_ui-components-popover [type]=\"'text'\"\n [classInclude]=\"header.labelDescription.classInclude || ''\"\n [config]=\"{content: header.labelDescription.content | translate}\"\n [innerHTML]=\"header.labelDescription.content | translate\" />\n </div>\n }\n</ng-template>\n\n<ng-template #templateBodyRef\n let-header='header'\n let-data='data'>\n <div class=\"flex w-full h-full\">\n @if (header.hasCheckbox) {\n <div class=\"flex h-full\"\n [class.invisible]=\"header.checkConditionCheckBoxHidden &&( data() | LibsUiPipesCallFunctionInTemplatePipe:header.checkConditionCheckBoxHidden:data() | async)\"\n [class.items-center]=\"header.checkboxAlignCenter\">\n <libs_ui-components-checkbox-single [key]=\"data()[fieldKey()]\"\n [classInclude]=\"header.checkboxClassInclude\"\n [checked]=\"data()[fieldKey()] | LibsUiPipesCheckSelectedByKeyPipe:keysSelected():keysSelected().length\"\n [disable]=\"loading() || disableCheckbox() || !!(maxItemSelected() && !(data()[fieldKey()] | LibsUiPipesCheckSelectedByKeyPipe:keysSelected():keysSelected().length) && keysSelected().length >= maxItemSelected())\"\n (outChange)=\"handlerChangeItemChecked($event,data())\" />\n </div>\n }\n\n @if (header.isShowIndexOnRow; as config) {\n <div class=\"w-full flex items-center justify-center libs-ui-font-h4r{{ config.classIncludeIndexOnRow || '' }}\">\n <div LibsUiComponentsPopoverDirective\n [type]=\"'text'\"\n [config]=\"{}\"\n [innerHTML]=\"data | LibsUiPipesCallFunctionInTemplatePipe:getIndexRow | async\">\n </div>\n </div>\n }\n\n @if (header.colTemplateConfig) {\n <libs_ui-components-table-templates [isHover]=\"itemOfIndexHover === data && !data.specificHightLight\"\n [class]=\"header.templateCssWrapperHost || ''\"\n [item]=\"data\"\n [templateCssWrapper]=\"header.templateCssWrapper\"\n [configs]=\"header.colTemplateConfig\" />\n }\n </div>\n</ng-template>\n\n<ng-template #templateFooterRef>\n @if (!isHiddenHeaderWhenNodata() || (isHiddenHeaderWhenNodata() && items().length)) {\n <div #footerElementRef\n class=\"flex w-full bg-[#f8f9fa] overflow-x-hidden z-[1] {{ ignoreBorderFooter() ? '': (customPositionFooter() === 'top' ? 'libs-ui-border-bottom-general':'libs-ui-table-shadow-top libs-ui-border-top-general') }} min-h-[35px]\"\n (mouseenter)=\"handlerMouseEnterFooter($event)\"\n (mouseleave)=\"handlerMouseLeaveFooter($event)\">\n @if (footerLeft()) {\n <div #footerLeftElementRef\n class=\"flex sticky top-0 left-0 z-[1] bg-[#f8f9fa]\">\n @for (footer of footerLeft();track footer) {\n <div\n class=\"flex items-center px-[12px] py-[8px] {{ footer.ignoreBorderRight ? '': 'libs-ui-border-right-general' }}\"\n [ngStyle]=\"(footer|LibsUiTableCalculatorColumnPipe:headerElementRef.clientWidth:footerLeft():footerRight()) || {}\"\n [ngClass]=\"footer.ngClass || {}\">\n @if (footer.colTemplateConfig && itemFooter()) {\n <libs_ui-components-table-templates [item]=\"itemFooter|LibsUiPipesConvertObjectToSignalPipe\"\n [templateCssWrapper]=\"footer.templateCssWrapper\"\n [configs]=\"footer.colTemplateConfig\" />\n }\n </div>\n }\n </div>\n }\n @if (footerRight()) {\n @for (footer of footerRight();track footer) {\n <div class=\"flex items-center px-[12px] py-[8px]\"\n [ngStyle]=\"(footer|LibsUiTableCalculatorColumnPipe:headerElementRef.clientWidth:footerLeft():footerRight()) || {}\"\n [ngClass]=\"footer.ngClass || {}\">\n @if (footer.colTemplateConfig && itemFooter()) {\n <libs_ui-components-table-templates [item]=\"itemFooter|LibsUiPipesConvertObjectToSignalPipe\"\n [templateCssWrapper]=\"footer.templateCssWrapper\"\n [configs]=\"footer.colTemplateConfig\" />\n }\n </div>\n }\n }\n\n </div>\n }\n</ng-template>\n\n<ng-template #templateNodataRef>\n @if (!keySearch() && templateNoData(); as templateNoData) {\n <ng-container *ngTemplateOutlet=\"templateNoData\" />\n } @if (keySearch() && templateNoResult(); as templateNoResult) {\n <ng-container *ngTemplateOutlet=\"templateNoResult\" />\n }\n @if (!templateNoData() && !templateNoResult() && noDataConfig(); as config) {\n <div class=\"flex items-center justify-center w-full h-full absolute left-0 top-0 z-[1]\">\n <div class=\"flex flex-col items-center justify-center w-full h-full shrink-0\"\n LibsUiComponentsScrollOverlayDirective>\n @if (!keySearch() && !onlyShowNoResult()) {\n <ng-container *ngComponentOutlet=\" ('no-data' | LibsUiIconsGetIconComponentPipe | async);inputs:{size:64}\" />\n <div class=\"libs-ui-table-no-data-config-text\"\n [ngStyle]=\"config.ngStyle || {}\"\n [ngClass]=\"config.ngClass || {}\"\n [innerHtml]=\"config.textNoData | translate\">\n </div>\n }\n @if (keySearch() || onlyShowNoResult()) {\n <ng-container *ngComponentOutlet=\"('no-result' | LibsUiIconsGetIconComponentPipe | async);inputs:{size:64}\" />\n <div class=\"libs-ui-table-no-data-config-text\"\n [ngStyle]=\"config.ngStyle || {}\"\n [ngClass]=\"config.ngClass || {}\"\n [innerHtml]=\"config.textSearchNoData | translate\">\n </div>\n }\n </div>\n </div>\n }\n</ng-template>\n", styles: [".libs-ui-table-header-container{height:33px;flex-shrink:0}.libs-ui-table-header-col{height:100%;width:100%;align-items:center}.libs-ui-table-no-data-config-text{margin-top:16px;font-size:12px;color:#9ca2ad;font-family:var(--libs-ui-font-family-name, \"Arial\");font-weight:400}.libs-ui-table-no-data-config-icon{margin-bottom:12px}.libs-ui-table-no-data-config-icon:before{font-size:84px;color:#c1c1c1}.libs-ui-table-shadow-bottom{box-shadow:0 1px 1px #00143305,0 4px 8px #0014330a}@media only screen and (min-width: 1921px){.libs-ui-border-bottom-general{border-bottom:solid 2px #e6e8ed!important}}\n"] }]
|
|
685
685
|
}], ctorParameters: () => [] });
|
|
686
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3RhYmxlL3NyYy90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFibGUvc3JjL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3hOLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBNEIscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRyxPQUFPLEVBQVcsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRyxPQUFPLEVBQVMseUNBQXlDLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRyxPQUFPLEVBQWtCLHVDQUF1QyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDOUcsT0FBTyxFQUFpRCxpQ0FBaUMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWhJLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBc0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRyxPQUFPLEVB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WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MsIE5nQ29tcG9uZW50T3V0bGV0LCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGNvbXB1dGVkLCBEZXN0cm95UmVmLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkLCB2aWV3Q2hpbGQsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiO1xuaW1wb3J0IHsgVmlydHVhbFNjcm9sbGVyQ29tcG9uZW50LCBWaXJ0dWFsU2Nyb2xsZXJNb2R1bGUgfSBmcm9tICdAaWhhcmJlY2svbmd4LXZpcnR1YWwtc2Nyb2xsZXInO1xuaW1wb3J0IHsgSUJ1dHRvbiwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IElTb3J0LCBMaWJzVWlDb21wb25lbnRzQnV0dG9uc1NvcnRBcnJvd0NvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1zb3J0JztcbmltcG9ydCB7IElDaGVja2JveEl0ZW0gfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1jaGVja2JveC1ncm91cFwiO1xuaW1wb3J0IHsgSUNoZWNrYm94RXZlbnQsIExpYnNVaUNvbXBvbmVudHNDaGVja2JveFNpbmdsZUNvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWNoZWNrYm94LXNpbmdsZVwiO1xuaW1wb3J0IHsgSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQsIElFbWl0U2VsZWN0S2V5LCBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWRyb3Bkb3duJztcbmltcG9ydCB7IElMaXN0Q29uZmlnSXRlbSB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWxpc3RcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtcGFnaW5hdGlvblwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIFRZUEVfUE9QT1ZFUl9FVkVOVCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXJcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtc2Nyb2xsLW92ZXJsYXlcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTcGlubmVyQ29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtc3Bpbm5lclwiO1xuaW1wb3J0IHsgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZSB9IGZyb20gXCJAbGlicy11aS9pY29uc1wiO1xuaW1wb3J0IHsgSUh0dHBSZXNwb25zZUVycm9yLCBJUGFnaW5nLCBUWVBFX09CSkVDVCwgVFlQRV9URU1QTEFURV9SRUYgfSBmcm9tIFwiQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlc1wiO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZSB9IGZyb20gXCJAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlXCI7XG5pbXBvcnQgeyBMaWJzVWlQaXBlc0NoZWNrU2VsZWN0ZWRCeUtleVBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jaGVjay1zZWxlY3RlZC1ieS1rZXknO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNDb252ZXJ0T2JqZWN0VG9TaWduYWxQaXBlIH0gZnJvbSBcIkBsaWJzLXVpL3BpcGVzLWNvbnZlcnQtb2JqZWN0LXRvLXNpZ25hbFwiO1xuaW1wb3J0IHsgSUh0dHBSZXF1ZXN0Q29uZmlnLCBMaWJzVWlIdHRwUmVxdWVzdFNlcnZpY2UsIHJldHVybkxpc3RPYmplY3QgfSBmcm9tIFwiQGxpYnMtdWkvc2VydmljZXMtaHR0cC1yZXF1ZXN0XCI7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGNvbnZlcnRPYmplY3RUb1NpZ25hbCwgZGVsZXRlVW5pY29kZSwgZ2V0LCBzZXQsIHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSB9IGZyb20gXCJAbGlicy11aS91dGlsc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IGZyb21FdmVudCwgbGFzdFZhbHVlRnJvbSwgb2YsIHRpbWVyIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IElCdXR0b25CYXJFdmVudCwgSUNvbmZpZ1NlbGVjdE1vcmVJdGVtLCBJQ29uZmlnVGVtcGxhdGVJdGVtQ29sbGFwc2VFeHBhbmQsIElIb3ZlckJ1dHRvbkFjdGlvbkV2ZW50LCBJTG9hZE1vcmVFdmVudCwgSVNvcnRFdmVudCwgSVRhYmVsQnV0dG9uQWN0aW9uRXZlbnQsIElUYWJsZUZvb3RlckNvbmZpZywgSVRhYmxlSGVhZGVyQ29uZmlnLCBUWVBFX0RBVEFfRklMVEVSX1RBQkxFLCBUWVBFX0RBVEFfVEFCTEUsIFRZUEVfSVRFTV9EQVRBX1RBQkxFLCBUWVBFX05FV19EQVRBX1RBQkxFLCBUWVBFX1RBQkxFX0ZJTFRFUiB9IGZyb20gXCIuL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IElUYWJsZUZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLWV2ZW50LmludGVyZmFjZVwiO1xuaW1wb3J0IHsgSVRhYmxlTm9EYXRhQ29uZmlnIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9uby1kYXRhLWNvbmZpZy5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IExpYnNVaVRhYmxlQ2FsY3VsYXRvckNvbHVtblBpcGUgfSBmcm9tIFwiLi9waXBlcy9jYWxjdWxhdG9yLWNvbHVtbi5waXBlXCI7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzVGFibGVUZW1wbGF0ZXNDb21wb25lbnQgfSBmcm9tIFwiLi90ZW1wbGF0ZXMvdGVtcGxhdGVzLmNvbXBvbmVudFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsIE5nU3R5bGUsIEFzeW5jUGlwZSwgTmdUZW1wbGF0ZU91dGxldCwgTmdDb21wb25lbnRPdXRsZXQsIExpYnNVaUNvbXBvbmVudHNUYWJsZVRlbXBsYXRlc0NvbXBvbmVudCxcbiAgICBUcmFuc2xhdGVNb2R1bGUsIFZpcnR1YWxTY3JvbGxlck1vZHVsZSwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQsIExpYnNVaVBpcGVzQ29udmVydE9iamVjdFRvU2lnbmFsUGlwZSxcbiAgICBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zU29ydEFycm93Q29tcG9uZW50LExpYnNVaUNvbXBvbmVudHNQYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNDaGVja2JveFNpbmdsZUNvbXBvbmVudCwgTGlic1VpVGFibGVDYWxjdWxhdG9yQ29sdW1uUGlwZSxcbiAgICBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUsIExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUsXG4gICAgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZSwgTGlic1VpUGlwZXNDaGVja1NlbGVjdGVkQnlLZXlQaXBlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1RhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKiogUFJPUEVSVFkgKi9cbiAgcHJvdGVjdGVkIGNsYXNzSGVhZGVyQ29udGFpbmVyID0gY29tcHV0ZWQoKCkgPT4gYGxpYnMtdWktdGFibGUtaGVhZGVyLWNvbnRhaW5lciB3LWZ1bGwgYWJzb2x1dGUgZmxleCBzaHJpbmstMCAke3RoaXMuaWdub3JlQ2xhc3NCZ0hlYWRlcigpID8gJycgOiAnYmctd2hpdGUnfSBvdmVyZmxvdy14LWhpZGRlbiB6LVsxXSBpdGVtcy1jZW50ZXIgJHt0aGlzLmNsYXNzSGVhZGVyQ29udGFpbmVySW5jbHVkZSgpIHx8ICcnfWApXG4gIHByb3RlY3RlZCBjbGFzc0hlYWRlckxlZnRDb250YWluZXIgPSBjb21wdXRlZCgoKSA9PiBgaC1mdWxsIGZsZXggc3RpY2t5IHRvcC0wIGxlZnQtMCB6LVsxXSAke3RoaXMuaWdub3JlQ2xhc3NCZ0hlYWRlcigpID8gJycgOiAnYmctd2hpdGUnfSAke3RoaXMuY2xhc3NIZWFkZXJMZWZ0SW5jbHVkZSgpIHx8ICcnfWApXG5cbiAgcHJvdGVjdGVkIGtleXNTZWxlY3RlZCA9IHNpZ25hbDxBcnJheTxhbnk+PihbXSk7XG4gIHByb3RlY3RlZCBsb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIHN0b3JlcyA9IHNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxUWVBFX09CSkVDVD4+PihbXSk7XG4gIHByb3RlY3RlZCBpdGVtcyA9IHNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxUWVBFX09CSkVDVD4+PihbXSk7XG4gIHByb3RlY3RlZCBpdGVtRm9vdGVyID0gc2lnbmFsPFRZUEVfT0JKRUNUIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgaXRlbU9mSW5kZXhIb3Zlcj86IFRZUEVfSVRFTV9EQVRBX1RBQkxFO1xuICBwcm90ZWN0ZWQga2V5U2VhcmNoID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcm90ZWN0ZWQgdG90YWxJdGVtSW5CYWNrZW5kID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBoYXNJdGVtSGlnaHRMaWdodCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCB0b3RhbEl0ZW1EaXNwbGF5ID0gY29tcHV0ZWQoKCkgPT4gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKCh0aGlzLnRvdGFsSXRlbSgpID8/IHRoaXMudG90YWxJdGVtSW5CYWNrZW5kKCkpLCBmYWxzZSkpO1xuICBwcm90ZWN0ZWQgbGlzdENvbmZpZ01vcmVJdGVtID0gY29tcHV0ZWQ8SUxpc3RDb25maWdJdGVtPigoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIGNvbmZpZ1RlbXBsYXRlVGV4dDogc2lnbmFsKHtcbiAgICAgICAgZmllbGRLZXk6ICdrZXknLFxuICAgICAgICBpZ25vcmVJY29uU2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgIGdldFZhbHVlOiB0aGlzLmNvbmZpZ1NlbGVjdE1vcmVJdGVtKCk/LmdldFZhbHVlLFxuICAgICAgICBjb25maWdMYWJlbFBvcG92ZXI6IHNpZ25hbCh7XG4gICAgICAgICAgekluZGV4OiAxMjAwXG4gICAgICAgIH0pXG4gICAgICB9KSxcbiAgICAgIGh0dHBSZXF1ZXN0RGF0YTogc2lnbmFsKHtcbiAgICAgICAgc2VydmljZU90aGVyOiByZXR1cm5MaXN0T2JqZWN0KHRoaXMuY29uZmlnU2VsZWN0TW9yZUl0ZW0oKT8ubGlzdE9wdGlvbiksXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogJ2xpc3QnLFxuICAgICAgICBhcmd1bWVudHNWYWx1ZTogW11cbiAgICAgIH0pXG4gICAgfVxuICB9KVxuXG4gIHByaXZhdGUgaGFzU2Nyb2xsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBpbnN0YW5jZVNvcnQgPSBzaWduYWw8SVNvcnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgaGFzQWN0aW9uQnV0dG9uRHJvcGRvd25Db250ZW50ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIHBhZ2luZ1N0b3JlID0gc2lnbmFsPElQYWdpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgbG9hZGVkTGFzdEl0ZW0gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHN0b3JlUGFyYW1zQ2FsbEFwaSA9IHNpZ25hbDxUWVBFX09CSkVDVD4oe30pO1xuICBwcml2YXRlIHRpbWVvdXRMZWF2ZUl0ZW0gPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGZ1bmN0aW9uQ29udHJvbFNlbGVjdE1vcmVJdGVtPzogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQ7XG4gIHByaXZhdGUgbW91c2VFbnRlckhlYWRlciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgLyoqIElOUFVUICovXG4gIHJlYWRvbmx5IHRpbWVIaWdobGlnaE5ld0l0ZW0gPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMjAwMCwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gMjAwMCB9KTtcbiAgcmVhZG9ubHkgaGVhZGVyTGVmdCA9IGlucHV0PEFycmF5PElUYWJsZUhlYWRlckNvbmZpZz4sIEFycmF5PElUYWJsZUhlYWRlckNvbmZpZz4gfCB1bmRlZmluZWQ+KFtdLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBbXSB9KTtcbiAgcmVhZG9ubHkgaGVhZGVyUmlnaHQgPSBpbnB1dDxBcnJheTxJVGFibGVIZWFkZXJDb25maWc+LCBBcnJheTxJVGFibGVIZWFkZXJDb25maWc+IHwgdW5kZWZpbmVkPihbXSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gW10gfSk7XG4gIHJlYWRvbmx5IGNvbmZpZ1RlbXBsYXRlSXRlbUNvbGxhcHNlRXhwYW5kID0gaW5wdXQ8SUNvbmZpZ1RlbXBsYXRlSXRlbUNvbGxhcHNlRXhwYW5kPigpO1xuICByZWFkb25seSBzaG93Rm9vdGVyID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaWdub3JlQm9yZGVyRm9vdGVyID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgY3VzdG9tUG9zaXRpb25Gb290ZXIgPSBpbnB1dDwndG9wJyB8ICdib3R0b20nLCAndG9wJyB8ICdib3R0b20nIHwgdW5kZWZpbmVkPignYm90dG9tJywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gJ2JvdHRvbScgfSk7XG4gIHJlYWRvbmx5IGZvb3RlckxlZnQgPSBpbnB1dDxBcnJheTxJVGFibGVGb290ZXJDb25maWc+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBmb290ZXJSaWdodCA9IGlucHV0PEFycmF5PElUYWJsZUZvb3RlckNvbmZpZz4gfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGVDaGVja2JveCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgZW5hYmxlVW5lcXVhbENoaWxkcmVuU2l6ZXMgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGJ1ZmZlckFtb3VudCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPig1LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/ICh2YWwgPiAyNSA/IDI1IDogdmFsKSA6IDUgfSlcbiAgcmVhZG9ubHkgdG90YWxJdGVtID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBpc0Rhc2hCb3JkZXIgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBjbGFzc0hlYWRlckNvbnRhaW5lckluY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGNsYXNzSGVhZGVyTGVmdEluY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGNsYXNzQm9keUluY2x1ZGUgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsID8/ICcnIH0pO1xuICByZWFkb25seSBjbGFzc0Zvb3RlckluY2x1ZGUgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsID8/ICcnIH0pO1xuICByZWFkb25seSBjbGFzc1RhYmxlQ29udGFpbmVySW5jbHVkZSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gJycgfSk7XG4gIHJlYWRvbmx5IGNsYXNzQmFySW5jbHVkZSA9IGlucHV0PHN0cmluZz4oJ2p1c3RpZnktYmV0d2VlbiBtYi1bMTZweF0nKTtcblxuICByZWFkb25seSBmaWVsZEtleSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaWQnLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCB8fCAnaWQnIH0pOyAvLyB0w6puIGZpZWxkIMSR4buLbmggZGFuaCBpdGVtIGPhu6dhIGxpc3REYXRhc1xuICByZWFkb25seSBkZWZhdWx0S2V5c1NlbGVjdGVkID0gaW5wdXQ8QXJyYXk8YW55Pj4oKTtcbiAgcmVhZG9ubHkgbGFiZWxCYXJOb1NlbGVjdEl0ZW0gPSBpbnB1dDxzdHJpbmc+KGBpMThuX3RvdGFsX3F1YW50aXR5YCk7IC8vIHPhu60gZOG7pW5nIMSR4buDIGhpw6puIHRo4buLIGtoaSB0w61jaCBjaOG7jW4gaXRlbVxuICByZWFkb25seSBsYWJlbEJhckJ1dHRvbnMgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ2kxOG5fbnVtYmVyX2l0ZW1fc2VsZWN0ZWQnLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCB8fCAnaTE4bl9udW1iZXJfaXRlbV9zZWxlY3RlZCcgfSk7IC8vIHPhu60gZOG7pW5nIMSR4buDIGhpw6puIHRo4buLIGtoaSB0w61jaCBjaOG7jW4gaXRlbVxuICByZWFkb25seSBjbGFzc0xhYmVsQmFyQnV0dG9ucyA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gJycgfSk7IC8vIHPhu60gZOG7pW5nIMSR4buDIGhpw6puIHRo4buLIGtoaSB0w61jaCBjaOG7jW4gaXRlbVxuICByZWFkb25seSBiYXJCdXR0b25zID0gaW5wdXQ8QXJyYXk8SUJ1dHRvbj4+KCk7XG4gIHJlYWRvbmx5IHNvcnRMb2NhbCA9IGlucHV0PGJvb2xlYW4+KCk7IC8vIHRyxrDhu51uZyBo4bujcCBu4bq/dSBzb3J0TG9jYWwgbsOgeSBraMO0bmcgxJHDoXAg4bupbmcgxJHGsOG7o2MgbmdoaeG7h3AgduG7pSB0aMOsIG3hu5tpIGPDom4gbmjhuq9jIHPhu60gZOG7pW5nIGZpbHRlckxvY2FsXG4gIHJlYWRvbmx5IGZpbHRlck9yU29ydExvY2FsID0gaW5wdXQ8VFlQRV9UQUJMRV9GSUxURVI+KCk7XG4gIHJlYWRvbmx5IGh0dHBSZXF1ZXN0RGF0YSA9IGlucHV0PElIdHRwUmVxdWVzdENvbmZpZz4oKTtcbiAgcmVhZG9ubHkgaHR0cFJlcXVlc3REYXRhRm9vdGVyID0gaW5wdXQ8SUh0dHBSZXF1ZXN0Q29uZmlnPigpO1xuICByZWFkb25seSBuZXdEYXRhID0gaW5wdXQ8VFlQRV9ORVdfREFUQV9UQUJMRT4oKTtcbiAgcmVhZG9ubHkgZmlsdGVyID0gaW5wdXQ8VFlQRV9EQVRBX0ZJTFRFUl9UQUJMRSwgVFlQRV9EQVRBX0ZJTFRFUl9UQUJMRSB8IHVuZGVmaW5lZD4oeyBmaWx0ZXJEYXRhOiB7fSB9LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyB7IGZpbHRlckRhdGE6IHt9IH0gfSk7XG4gIHJlYWRvbmx5IGlnbm9yZUJhciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNsYXNzTGFiZWxCYXJOb1NlbGVjdEl0ZW0gPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZUNsYXNzQmdIZWFkZXIgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBub0RhdGFDb25maWcgPSBpbnB1dDxJVGFibGVOb0RhdGFDb25maWc+KHsgdGV4dE5vRGF0YTogJ2kxOG5fbm9fZGF0YV95ZXQnLCB0ZXh0U2VhcmNoTm9EYXRhOiAnaTE4bl9ub19yZXN1bHQnIH0pO1xuICByZWFkb25seSBzaG93U2Nyb2xsVGFibGVQaW5uZWRJZk5vRGF0YSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZUJvcmRlckl0ZW1MYXN0ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaXNIaWRkZW5IZWFkZXJXaGVuTm9kYXRhID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbWF4SXRlbVNlbGVjdGVkID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDEwMCwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gMTAwIH0pO1xuICByZWFkb25seSBjb25maWdTZWxlY3RNb3JlSXRlbSA9IGlucHV0PElDb25maWdTZWxlY3RNb3JlSXRlbT4oKTtcbiAgcmVhZG9ubHkgb25seVNob3dOb1Jlc3VsdCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZUJvcmRlckl0ZW0gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBhY3Rpdml0eUxvYWREYXRhID0gaW5wdXQ8J3Njcm9sbC1pbmZpbml0eScgfCAnY2xpY2stcGFnaW5hdGlvbicsICdzY3JvbGwtaW5maW5pdHknIHwgJ2NsaWNrLXBhZ2luYXRpb24nIHwgdW5kZWZpbmVkPignc2Nyb2xsLWluZmluaXR5JywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gJ3Njcm9sbC1pbmZpbml0eScgfSk7XG4gIHJlYWRvbmx5IHBhZ2luYXRpb25TZXR0aW5nID0gaW5wdXQ8e1xuICAgIHBvc2l0aW9uPzogJ3RvcCcgfCAnYm90dG9tJztcbiAgICBjbGFzc0luY2x1ZGVDb250YWluZXI/OiBzdHJpbmc7XG4gICAgY2xhc3NJbmNsdWRlSXRlbT86IHN0cmluZztcbiAgICBkaXNhYmxlPzogYm9vbGVhbjtcbiAgICBudW1iZXJQYWdlRGlzcGFseT86IG51bWJlcjtcbiAgICBzaG93VG90YWxQYWdlPzogYm9vbGVhbjtcbiAgICBzaG93SW5wdXRHb3RvUGFnZT86IGJvb2xlYW47XG4gICAgbW9kZURpc3BsYXlUb3RhbFBhZ2VBbmRHb3RvUGFnZT86IFwidG9wXCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XG4gICAgY2xhc3NEaXNwbGF5VG90YWxQYWdlQW5kR290b1BhZ2U/OiBzdHJpbmc7XG4gIH0+KCk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlTm9EYXRhID0gaW5wdXQ8VFlQRV9URU1QTEFURV9SRUY+KCk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlTm9SZXN1bHQgPSBpbnB1dDxUWVBFX1RFTVBMQVRFX1JFRj4oKTtcblxuICAvKiogT1VUUFVUICovXG5cbiAgcmVhZG9ubHkgb3V0TG9hZE1vcmUgPSBvdXRwdXQ8SUxvYWRNb3JlRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFNjcm9sbElzR29uZSA9IG91dHB1dDxJTG9hZE1vcmVFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0TG9hZGluZyA9IG91dHB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBvdXRDbGlja0J1dHRvbkFjdGlvbiA9IG91dHB1dDxJVGFiZWxCdXR0b25BY3Rpb25FdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U29ydCA9IG91dHB1dDxJU29ydEV2ZW50PigpO1xuICByZWFkb25seSBvdXRDbGlja0JhckJ1dHRvbiA9IG91dHB1dDxJQnV0dG9uQmFyRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dEhvdmVyQnV0dG9uQWN0aW9uID0gb3V0cHV0PElIb3ZlckJ1dHRvbkFjdGlvbkV2ZW50PigpO1xuICByZWFkb25seSBvdXRLZXlzU2VsZWN0ZWQgPSBvdXRwdXQ8eyBrZXlzOiBBcnJheTxhbnk+IH0+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SVRhYmxlRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dExvYWREYXRhQ29tcGxldGUgPSBvdXRwdXQ8V3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4+PigpO1xuICByZWFkb25seSBvdXRUb3RhbEl0ZW0gPSBvdXRwdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBvdXRMb2FkRGF0YUVycm9yID0gb3V0cHV0PElIdHRwUmVzcG9uc2VFcnJvcj4oKTtcblxuICAvKipWSUVXIENISUxEICovXG4gIHByb3RlY3RlZCBoZWFkZXJFbGVtZW50UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdoZWFkZXJFbGVtZW50UmVmJyk7XG4gIHByb3RlY3RlZCBmb290ZXJFbGVtZW50UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdmb290ZXJFbGVtZW50UmVmJyk7XG4gIHByb3RlY3RlZCBmb290ZXJMZWZ0RWxlbWVudFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignZm9vdGVyTGVmdEVsZW1lbnRSZWYnKTtcbiAgcHJpdmF0ZSBib2R5RWxlbWVudFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignYm9keUVsZW1lbnRSZWYnKTtcbiAgcHJpdmF0ZSBib2R5Q29tcG9uZW50UmVmID0gdmlld0NoaWxkPFZpcnR1YWxTY3JvbGxlckNvbXBvbmVudD4oJ2JvZHlDb21wb25lbnRSZWYnKTs7XG5cbiAgLyoqSU5KRUNUICovXG4gIHByaXZhdGUgaHR0cFJlcXVlc3RTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUh0dHBSZXF1ZXN0U2VydmljZSk7XG4gIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKVxuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmRlZmF1bHRLZXlzU2VsZWN0ZWQoKT8ubGVuZ3RoKSB7XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLmtleXNTZWxlY3RlZC51cGRhdGUoa2V5cyA9PiAoWy4uLmtleXMsIC4uLih0aGlzLmRlZmF1bHRLZXlzU2VsZWN0ZWQoKSB8fCBbXSldKSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zaG93Rm9vdGVyKCkpIHtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHRoaXMuY2FsbEFwaUJ5U2VydmljZUZvb3RlcigpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5uZXdEYXRhKCk/LmRhdGEoKS5sZW5ndGgpIHtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHRoaXMuYWRkSXRlbXModGhpcy5uZXdEYXRhKCk/LmRhdGEgYXMgYW55LCAhdGhpcy5uZXdEYXRhKCk/LmFkZFRvTGFzdExpc3QpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZmlsdGVyKCkuZmlsdGVyRGF0YSB8fCB0aGlzLmZpbHRlcigpLmlnbm9yZUNhbGxBcGlBdXRvKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMua2V5U2VhcmNoLnNldChnZXQ8YW55Pih0aGlzLmZpbHRlcigpLmZpbHRlckRhdGEsICdrZXlTZWFyY2gnLCAnJykpO1xuICAgICAgICB0aGlzLnN0b3JlUGFyYW1zQ2FsbEFwaS5zZXQoY2xvbmVEZWVwKHRoaXMuZmlsdGVyKCkuZmlsdGVyRGF0YSkpO1xuICAgICAgICBpZiAodGhpcy5maWx0ZXIoKT8uZmlsdGVyRGF0YSAmJiAhdGhpcy5maWx0ZXIoKS5maWx0ZXJEYXRhWydpbnN0YW5jZVNvcnQnXSAmJiB0aGlzLmluc3RhbmNlU29ydCgpKSB7XG4gICAgICAgICAgdGhpcy5zdG9yZVBhcmFtc0NhbGxBcGkudXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgaW5zdGFuY2VTb3J0OiB0aGlzLmluc3RhbmNlU29ydCgpIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWx0ZXJPclNvcnRMb2NhbCgpICYmIHRoaXMuc3RvcmVzKCkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5pdGVtcy5zZXQodGhpcy5maWx0ZXJPclNvcnRMb2NhbCgpPy4oc2lnbmFsKFsuLi50aGlzLnN0b3JlcygpXSksIHsgLi4uKHRoaXMuZmlsdGVyKCkuZmlsdGVyRGF0YSB8fCB7fSksIGluc3RhbmNlU29ydDogdGhpcy5pbnN0YW5jZVNvcnQoKSB9KSB8fCBbXSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuXG4gICAgICAgIHRoaXMucmVzZXRTY3JvbGwoKTtcbiAgICAgICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHtcbiAgICAgIHJlc2V0OiB0aGlzLnJlc2V0LmJpbmQodGhpcyksXG4gICAgICBjYWxsQXBpQnlTZXJ2aWNlOiB0aGlzLmNhbGxBcGlCeVNlcnZpY2UuYmluZCh0aGlzKSxcbiAgICAgIHJlc2V0U2Nyb2xsOiB0aGlzLnJlc2V0U2Nyb2xsLmJpbmQodGhpcyksXG4gICAgICBhZGRJdGVtczogdGhpcy5hZGRJdGVtcy5iaW5kKHRoaXMpLFxuICAgICAgcmVtb3ZlSXRlbXM6IHRoaXMucmVtb3ZlSXRlbXMuYmluZCh0aGlzKSxcbiAgICAgIGdldENvdW50OiB0aGlzLmdldENvdW50LmJpbmQodGhpcyksXG4gICAgICBnZXRTY3JvbGxDb250YWluZXI6IHRoaXMuZ2V0U2Nyb2xsQ29udGFpbmVyLmJpbmQodGhpcyksXG4gICAgICBoaWRlVG9vbEJhckJvdHRvbTogKCkgPT4ge1xuICAgICAgICByZXR1cm47XG4gICAgICB9LFxuICAgICAgcmVzZXRLZXlTZWxlY3RlZDogKCkgPT4gdGhpcy5rZXlzU2VsZWN0ZWQuc2V0KFtdKSxcbiAgICAgIGRldGVjdENoYW5nZXM6ICgpID0+IHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICAgIH0pO1xuXG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SW5kZXhSb3cgPSAoZGF0YTogeyB2YWx1ZTogVFlQRV9JVEVNX0RBVEFfVEFCTEUgfSkgPT4ge1xuICAgIHJldHVybiBvZih0aGlzLml0ZW1zKCkuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtID09PSBkYXRhLnZhbHVlKSArIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTY3JvbGxDb250YWluZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuYm9keUNvbXBvbmVudFJlZigpIGFzIFZpcnR1YWxTY3JvbGxlckNvbXBvbmVudDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2FsbEFwaUJ5U2VydmljZShmaXJzdENhbGw6IGJvb2xlYW4sIHJlc2V0QWZ0ZXJDYWxsQXBpPzogYm9vbGVhbikge1xuICAgIHRyeSB7XG4gICAgICBpZiAoZmlyc3RDYWxsKSB7XG4gICAgICAgIHRoaXMubG9hZGVkTGFzdEl0ZW0uc2V0KGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5odHRwUmVxdWVzdERhdGEoKSB8fCB0aGlzLmxvYWRpbmcoKSB8fCB0aGlzLmxvYWRlZExhc3RJdGVtKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgICAgIHRoaXMucmVzZXRJbmRleEhvdmVyKCk7XG4gICAgICBjb25zdCB7IGFyZ3VtZW50c1ZhbHVlLCBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSB9ID0gdGhpcy5odHRwUmVxdWVzdERhdGEoKSBhcyBJSHR0cFJlcXVlc3RDb25maWc7XG5cbiAgICAgIGlmIChndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSAmJiAhZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUuc29ydE9yZGVyQnkgJiYgdGhpcy5pbnN0YW5jZVNvcnQoKSkge1xuICAgICAgICBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZS5zb3J0T3JkZXJCeSA9IHtcbiAgICAgICAgICBmaWVsZEdldFZhbHVlOiAnc3RvcmVQYXJhbXNDYWxsQXBpLmluc3RhbmNlU29ydC5maWVsZFNvcnQnLFxuICAgICAgICAgIGZpZWxkVXBkYXRlOiAnWzBdJyxcbiAgICAgICAgICBzdWJGaWVsZFVwZGF0ZTogJ29yZGVyX2J5J1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUgJiYgIWd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlLnNvcnRPcmRlclR5cGUgJiYgdGhpcy5pbnN0YW5jZVNvcnQoKSkge1xuICAgICAgICBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZS5zb3J0T3JkZXJUeXBlID0ge1xuICAgICAgICAgIGZpZWxkR2V0VmFsdWU6ICdzdG9yZVBhcmFtc0NhbGxBcGkuaW5zdGFuY2VTb3J0Lm1vZGUnLFxuICAgICAgICAgIGZpZWxkVXBkYXRlOiAnWzBdJyxcbiAgICAgICAgICBzdWJGaWVsZFVwZGF0ZTogJ29yZGVyX3R5cGUnXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoZmlyc3RDYWxsKSB7XG4gICAgICAgIGlmICghcmVzZXRBZnRlckNhbGxBcGkpIHtcbiAgICAgICAgICB0aGlzLmhhc1Njcm9sbC5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuc3RvcmVzLnNldChbXSk7XG4gICAgICAgICAgdGhpcy5pdGVtcy5zZXQoW10pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZGVkTGFzdEl0ZW0uc2V0KHRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUFyZ3VtZW50cyhhcmd1bWVudHNWYWx1ZSwgeyAuLi50aGlzLmZha2VSZXNwb25zZUFwaSgpLCBzdG9yZVBhcmFtc0NhbGxBcGk6IHRoaXMuc3RvcmVQYXJhbXNDYWxsQXBpKCkgfSwgdGhpcy5wYWdpbmdTdG9yZSgpIHx8IHt9LCB0aGlzLmtleVNlYXJjaCgpLCB0cnVlLCB0aGlzLmxvYWRlZExhc3RJdGVtKCksIGd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlKSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS5jYWxsQXBpKHRoaXMuaHR0cFJlcXVlc3REYXRhKCkgYXMgSUh0dHBSZXF1ZXN0Q29uZmlnKTtcblxuICAgICAgaWYgKGZpcnN0Q2FsbCAmJiByZXNldEFmdGVyQ2FsbEFwaSkge1xuICAgICAgICB0aGlzLmhhc1Njcm9sbC5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLnN0b3Jlcy5zZXQoW10pO1xuICAgICAgICB0aGlzLml0ZW1zLnNldChbXSk7XG4gICAgICB9XG4gICAgICB0aGlzLnBhZ2luZ1N0b3JlLnNldChyZXN1bHQucGFnaW5nKTtcbiAgICAgIHRoaXMudG90YWxJdGVtSW5CYWNrZW5kLnNldChyZXN1bHQucGFnaW5nPy50b3RhbF9pdGVtcyB8fCAwKTtcbiAgICAgIHRoaXMub3V0VG90YWxJdGVtLmVtaXQodGhpcy50b3RhbEl0ZW1JbkJhY2tlbmQoKSk7XG4gICAgICBpZiAoIXRoaXMucGFnaW5nU3RvcmUoKSkge1xuICAgICAgICB0aGlzLmxvYWRlZExhc3RJdGVtLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9hZGVkTGFzdEl0ZW0uc2V0KHRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUFyZ3VtZW50cyhhcmd1bWVudHNWYWx1ZSwgeyAuLi5yZXN1bHQsIHN0b3JlUGFyYW1zQ2FsbEFwaTogdGhpcy5zdG9yZVBhcmFtc0NhbGxBcGkoKSB9LCB0aGlzLnBhZ2luZ1N0b3JlKCkgfHwge30sIHRoaXMua2V5U2VhcmNoKCksIHRydWUsIHRoaXMubG9hZGVkTGFzdEl0ZW0oKSwgZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUpKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRkSXRlbXMoY29udmVydE9iamVjdFRvU2lnbmFsKHJlc3VsdC5kYXRhIHx8IFtdKSwgZmFsc2UsIHRydWUpO1xuICAgICAgdGhpcy5vdXRMb2FkRGF0YUNvbXBsZXRlLmVtaXQodGhpcy5zdG9yZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICB0aGlzLm91dExvYWREYXRhRXJyb3IuZW1pdChlcnJvciBhcyBJSHR0cFJlc3BvbnNlRXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZmFrZVJlc3BvbnNlQXBpKCk6IFRZUEVfT0JKRUNUIHtcbiAgICB0aGlzLmxvYWRlZExhc3RJdGVtLnNldChmYWxzZSk7XG4gICAgaWYgKHRoaXMuYWN0aXZpdHlMb2FkRGF0YSgpID09PSAnc2Nyb2xsLWluZmluaXR5Jykge1xuICAgICAgdGhpcy5wYWdpbmdTdG9yZS5zZXQoe30pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS5mYWtlUmVzcG9uc2VQYWdpbmdBcGkoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2FsbEFwaUJ5U2VydmljZUZvb3RlcigpIHtcbiAgICBpZiAoIXRoaXMuaHR0cFJlcXVlc3REYXRhRm9vdGVyKCkgfHwgIXRoaXMuc2hvd0Zvb3RlcigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgYXJndW1lbnRzVmFsdWUsIGd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlIH0gPSB0aGlzLmh0dHBSZXF1ZXN0RGF0YUZvb3RlcigpIGFzIElIdHRwUmVxdWVzdENvbmZpZztcblxuICAgIHRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUFyZ3VtZW50cyhhcmd1bWVudHNWYWx1ZSwgeyBzdG9yZVBhcmFtc0NhbGxBcGk6IHRoaXMuc3RvcmVQYXJhbXNDYWxsQXBpKCkgfSwgdGhpcy5wYWdpbmdTdG9yZSgpIHx8IHt9LCB0aGlzLmtleVNlYXJjaCgpLCB0cnVlLCBmYWxzZSwgZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLmNhbGxBcGkodGhpcy5odHRwUmVxdWVzdERhdGFGb290ZXIoKSBhcyBJSHR0cFJlcXVlc3RDb25maWcpO1xuXG4gICAgdGhpcy5pdGVtRm9vdGVyLnNldChjb252ZXJ0T2JqZWN0VG9TaWduYWwocmVzdWx0LmRhdGEpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkSXRlbXMoaXRlbXM6IFRZUEVfREFUQV9UQUJMRSwgYWRkRmlyc3Q6IGJvb2xlYW4sIGlnbm9yZUhpZ2h0TGlnaHQ/OiBib29sZWFuLCBpZ25vcmVSZUNhbGxGb290ZXI/OiBib29sZWFuLCBhdXRvQ291bnROZXdJdGVtPzogYm9vbGVhbikge1xuICAgIGlmICghaXRlbXMoKSB8fCAhaXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXRlbXNBZGQ6IEFycmF5PFdyaXRhYmxlU2lnbmFsPFRZUEVfT0JKRUNUPj4gPSBbXTtcblxuICAgIGl0ZW1zKCkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmICghdGhpcy5jaGVja0V4aXN0SXRlbShpdGVtKSkge1xuICAgICAgICBpdGVtc0FkZC5wdXNoKGl0ZW0pO1xuICAgICAgICBpZiAoIWlnbm9yZUhpZ2h0TGlnaHQpIHtcbiAgICAgICAgICB0aGlzLmhhc0l0ZW1IaWdodExpZ2h0LnNldCh0cnVlKTtcbiAgICAgICAgICBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIHNwZWNpZmljSGlnaHRMaWdodDogdHJ1ZSB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFkZEZpcnN0KSB7XG4gICAgICAgICAgdGhpcy5pdGVtcy51cGRhdGUoZGF0YSA9PiBbaXRlbSwgLi4uZGF0YV0pO1xuICAgICAgICAgIHRoaXMuc3RvcmVzLnVwZGF0ZShkYXRhID0+IFtpdGVtLCAuLi5kYXRhXSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pdGVtcy51cGRhdGUoZGF0YSA9PiBbLi4uZGF0YSwgaXRlbV0pO1xuICAgICAgICB0aGlzLnN0b3Jlcy51cGRhdGUoZGF0YSA9PiBbLi4uZGF0YSwgaXRlbV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChhdXRvQ291bnROZXdJdGVtICYmIGl0ZW1zQWRkLmxlbmd0aCkge1xuICAgICAgdGhpcy50b3RhbEl0ZW1JbkJhY2tlbmQudXBkYXRlKHZhbHVlID0+IHZhbHVlICsgaXRlbXNBZGQubGVuZ3RoKTtcbiAgICB9XG4gICAgaWYgKCFpZ25vcmVIaWdodExpZ2h0KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaXRlbXNBZGQuZm9yRWFjaChpdGVtID0+IGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNIaWdodExpZ2h0OiBmYWxzZSB9KSkpO1xuICAgICAgICB0aGlzLmhhc0l0ZW1IaWdodExpZ2h0LnNldChmYWxzZSk7XG4gICAgICB9LCB0aGlzLnRpbWVIaWdobGlnaE5ld0l0ZW0oKSk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuY2hlY2tTY3JvbGwoKTtcbiAgICBpZiAoIWlnbm9yZVJlQ2FsbEZvb3Rlcikge1xuICAgICAgYXdhaXQgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlRm9vdGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0V4aXN0SXRlbShpdGVtTmV3OiBXcml0YWJsZVNpZ25hbDxUWVBFX09CSkVDVD4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcygpLmZpbmQoaXRlbSA9PiBgJHtpdGVtKClbdGhpcy5maWVsZEtleSgpXX1gID09PSBgJHtpdGVtTmV3KClbdGhpcy5maWVsZEtleSgpXX1gKSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlSXRlbXMoa2V5czogQXJyYXk8dW5rbm93bj4sIGlnbm9yZVJlQ2FsbEZvb3Rlcj86IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJlc2V0SW5kZXhIb3ZlcigpO1xuICAgIGlmICghdGhpcy5pdGVtcygpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIHRoaXMuaXRlbXMudXBkYXRlKGl0ZW1zID0+IHtcbiAgICAgICAgbGV0IGlzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbmV3SXRlbXMgPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgICAgaWYgKGAke2l0ZW0oKVt0aGlzLmZpZWxkS2V5KCldfWAgPT09IGAke2tleX1gKSB7XG4gICAgICAgICAgICBpc1VwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gaXNVcGRhdGUgPyBuZXdJdGVtcyA6IGl0ZW1zO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc3RvcmVzLnVwZGF0ZShpdGVtcyA9PiB7XG4gICAgICAgIGxldCBpc1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgIGlmIChgJHtpdGVtKClbdGhpcy5maWVsZEtleSgpXX1gID09PSBgJHtrZXl9YCkge1xuICAgICAgICAgICAgaXNVcGRhdGUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGlzVXBkYXRlID8gbmV3SXRlbXMgOiBpdGVtcztcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMua2V5c1NlbGVjdGVkKCkgfHwgIXRoaXMua2V5c1NlbGVjdGVkKCkubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMua2V5c1NlbGVjdGVkLnVwZGF0ZShrZXlzID0+IGtleXMuZmlsdGVyKGtleVNlbGVjdGVkID0+IGtleVNlbGVjdGVkICE9PSBrZXkpKTtcbiAgICB9KTtcbiAgICB0aGlzLnRvdGFsSXRlbUluQmFja2VuZC51cGRhdGUodmFsdWUgPT4gdmFsdWUgLSBrZXlzLmxlbmd0aCk7XG4gICAgYXdhaXQgdGhpcy5jaGVja1Njcm9sbCgpO1xuICAgIGlmICghaWdub3JlUmVDYWxsRm9vdGVyKSB7XG4gICAgICBhd2FpdCB0aGlzLmNhbGxBcGlCeVNlcnZpY2VGb290ZXIoKTtcbiAgICB9XG4gICAgdGhpcy5vdXRLZXlzU2VsZWN0ZWQuZW1pdCh7IGtleXM6IHRoaXMua2V5c1NlbGVjdGVkKCkgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvdW50KCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuaHR0cFJlcXVlc3REYXRhKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luZ1N0b3JlKCk/LnRvdGFsX2l0ZW1zIHx8IHRoaXMuaXRlbXMoKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaXRlbXMoKS5sZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIGxvYWRNb3JlU3VjY2VzcyhkYXRhOiBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxUWVBFX09CSkVDVD4+Pikge1xuICAgIHRoaXMuYWRkSXRlbXMoZGF0YSwgZmFsc2UpO1xuICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlQWxsQ2hlY2tlZCgpIHtcbiAgICB0aGlzLmtleXNTZWxlY3RlZC5zZXQoW10pO1xuICAgIHRoaXMub3V0S2V5c1NlbGVjdGVkLmVtaXQoeyBrZXlzOiB0aGlzLmtleXNTZWxlY3RlZCgpIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VDaGVja2VkQWxsSXRlbXMoZXZlbnQ6IElDaGVja2JveEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMua2V5c1NlbGVjdGVkLnNldCh0aGlzLml0ZW1zKCkuZmlsdGVyKGFzeW5jIChpdGVtKSA9PiAhKGF3YWl0IHRoaXMuY2hlY2tDYW5jZWxDb25kaXRpb25DaGVja2VkSXRlbShpdGVtKSkpLm1hcChpdGVtID0+IGAke2l0ZW0oKVt0aGlzLmZpZWxkS2V5KCldfWApKTtcbiAgICAgIHRoaXMub3V0S2V5c1NlbGVjdGVkLmVtaXQoeyBrZXlzOiB0aGlzLmtleXNTZWxlY3RlZCgpIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMua2V5c1NlbGVjdGVkLnNldChbXSk7XG4gICAgdGhpcy5vdXRLZXlzU2VsZWN0ZWQuZW1pdCh7IGtleXM6IHRoaXMua2V5c1NlbGVjdGVkKCkgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrQ2FuY2VsQ29uZGl0aW9uQ2hlY2tlZEl0ZW0oaXRlbTogV3JpdGFibGVTaWduYWw8VFlQRV9PQkpFQ1Q+KSB7XG4gICAgbGV0IGlzQ2FuY2VsQ2hlY2sgPSBmYWxzZTtcblxuICAgIGlmICghaXNDYW5jZWxDaGVjayAmJiB0aGlzLmhlYWRlckxlZnQoKS5sZW5ndGggJiYgdGhpcy5oZWFkZXJMZWZ0KClbMF0uY2hlY2tDb25kaXRpb25DaGVja0JveEhpZGRlbikge1xuICAgICAgaXNDYW5jZWxDaGVjayA9IGF3YWl0IGxhc3RWYWx1ZUZyb20oKHRoaXMuaGVhZGVyTGVmdCgpWzBdLmNoZWNrQ29uZGl0aW9uQ2hlY2tCb3hIaWRkZW4gYXMgYW55KSh7IGl0ZW06IGl0ZW0oKSB9KSkgfHwgZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFpc0NhbmNlbENoZWNrICYmIHRoaXMuaGVhZGVyUmlnaHQoKS5sZW5ndGggJiYgdGhpcy5oZWFkZXJSaWdodCgpWzBdLmNoZWNrQ29uZGl0aW9uQ2hlY2tCb3hIaWRkZW4pIHtcbiAgICAgIGlzQ2FuY2VsQ2hlY2sgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKCh0aGlzLmhlYWRlclJpZ2h0KClbMF0uY2hlY2tDb25kaXRpb25DaGVja0JveEhpZGRlbiBhcyBhbnkpKHsgaXRlbTogaXRlbSgpIH0pKSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNDYW5jZWxDaGVjaztcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlSXRlbUNoZWNrZWQoZXZlbnQ6IElDaGVja2JveEl0ZW0sIGl0ZW06IFRZUEVfT0JKRUNUKSB7XG4gICAgY29uc3Qga2V5ID0gaXRlbVt0aGlzLmZpZWxkS2V5KCldO1xuICAgIGNvbnN0IGtleXMgPSBuZXcgU2V0KHRoaXMua2V5c1NlbGVjdGVkKCkpO1xuXG4gICAga2V5cy5hZGQoa2V5KTtcbiAgICBpZiAoIWV2ZW50LmNoZWNrZWQpIHtcbiAgICAgIGtleXMuZGVsZXRlKGtleSk7XG4gICAgfVxuICAgIHRoaXMua2V5c1NlbGVjdGVkLnNldChBcnJheS5mcm9tKGtleXMpKTtcbiAgICB0aGlzLm91dEtleXNTZWxlY3RlZC5lbWl0KHsga2V5czogdGhpcy5rZXlzU2VsZWN0ZWQoKSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQ2hhbmdlU29ydChzb3J0OiBJU29ydCkge1xuICAgIGNvbnN0IHNjcm9sbExlZnQgPSB0aGlzLmhlYWRlckVsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0IHx8IDA7XG4gICAgaWYgKHRoaXMuaW5zdGFuY2VTb3J0ICYmIHRoaXMuaW5zdGFuY2VTb3J0KCk/LmZpZWxkU29ydCAhPT0gc29ydC5maWVsZFNvcnQpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2VTb3J0KCk/LnJlc2V0KCk7XG4gICAgfVxuICAgIHRoaXMuaW5zdGFuY2VTb3J0LnNldChzb3J0KTtcbiAgICBpZiAodGhpcy5zb3J0TG9jYWwoKSkge1xuICAgICAgdGhpcy5oYW5kbGVyU29ydExvY2FsKHNvcnQsIHNjcm9sbExlZnQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RvcmVQYXJhbXNDYWxsQXBpLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIGluc3RhbmNlU29ydDogdGhpcy5pbnN0YW5jZVNvcnQoKSB9KSk7XG4gICAgdGhpcy5vdXRTb3J0LmVtaXQoe1xuICAgICAgc29ydDogc29ydCxcbiAgICAgIG9uU29ydFN1Y2Nlc3M6ICgpID0+IHRoaXMub25Tb3J0U3VjY2VzcyhzY3JvbGxMZWZ0KVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgIGF3YWl0IHRoaXMuY2FsbEFwaUJ5U2VydmljZSh0cnVlKTtcbiAgICAgdGhpcy5vblNvcnRTdWNjZXNzKHNjcm9sbExlZnQpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJTb3J0TG9jYWwoc29ydDogSVNvcnQsIHNjcm9sbExlZnQ6bnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyT3JTb3J0TG9jYWwoKSAmJiB0aGlzLnN0b3JlcygpLmxlbmd0aCkge1xuICAgICAgdGhpcy5pdGVtcy5zZXQodGhpcy5maWx0ZXJPclNvcnRMb2NhbCgpPy4oc2lnbmFsKFsuLi50aGlzLnN0b3JlcygpXSksIHsgLi4udGhpcy5zdG9yZVBhcmFtc0NhbGxBcGkoKSwgaW5zdGFuY2VTb3J0OiBzb3J0IH0pIHx8IFtdKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IGZpZWxkU29ydCwgbW9kZSB9ID0gc29ydDtcblxuICAgIHRoaXMuaXRlbXMudXBkYXRlKGl0ZW1zID0+IHtcbiAgICAgIGl0ZW1zLnNvcnQoKGl0ZW1BLCBpdGVtQikgPT4ge1xuICAgICAgICBsZXQgdmFsdWUxID0gbW9kZSA9PT0gJ2FzYycgPyBpdGVtQSgpW2ZpZWxkU29ydF0gOiBpdGVtQigpW2ZpZWxkU29ydF07XG4gICAgICAgIGxldCB2YWx1ZTIgPSBtb2RlID09PSAnYXNjJyA/IGl0ZW1CKClbZmllbGRTb3J0XSA6IGl0ZW1BKClbZmllbGRTb3J0XTtcblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlMSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlMiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YWx1ZTEgPSBkZWxldGVVbmljb2RlKHZhbHVlMSkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICB2YWx1ZTIgPSBkZWxldGVVbmljb2RlKHZhbHVlMikudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZTEgPT09IHZhbHVlMikge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlMSA+IHZhbHVlMiA/IDEgOiAtMTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gWy4uLml0ZW1zXTtcbiAgICB9KTtcbiAgICB0aGlzLm9uU29ydFN1Y2Nlc3Moc2Nyb2xsTGVmdCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uQ29udHJvbE1vcmVTZWxlY3RJdGVtKGZ1bmN0aW9uQ29udHJvbDogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLmZ1bmN0aW9uQ29udHJvbFNlbGVjdE1vcmVJdGVtID0gZnVuY3Rpb25Db250cm9sO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RlZE1vcmVJdGVtKGV2ZW50OiBJRW1pdFNlbGVjdEtleSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LmtleSB8fCAhdGhpcy5jb25maWdTZWxlY3RNb3JlSXRlbSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5mdW5jdGlvbkNvbnRyb2xTZWxlY3RNb3JlSXRlbT8ucmVzZXQoKTtcblxuICAgIGNvbnN0IHBlclBhZ2UgPSBOdW1iZXIoZXZlbnQua2V5KS52YWx1ZU9mKCk7XG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSBOdW1iZXIodGhpcy5zZXRQZXJQYWdlU2VsZWN0TW9yZUl0ZW0ocGVyUGFnZSkpLnZhbHVlT2YoKTtcbiAgICBjb25zdCBpc1BhZ2luZ051bWJlciA9IHRoaXMuY29uZmlnU2VsZWN0TW9yZUl0ZW0oKT8ucGFnaW5nTnVtYmVyO1xuXG4gICAgaWYgKGN1cnJlbnRQYWdlID4gcGVyUGFnZSB8fCB0aGlzLml0ZW1zLmxlbmd0aCA+PSBwZXJQYWdlKSB7XG4gICAgICBpZiAoIWlzUGFnaW5nTnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0UGVyUGFnZVNlbGVjdE1vcmVJdGVtKGN1cnJlbnRQYWdlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMua2V5c1NlbGVjdGVkLnNldCh0aGlzLml0ZW1zKCkuc2xpY2UoMCwgcGVyUGFnZSkubWFwKGl0ZW0gPT4gYCR7aXRlbSgpW3RoaXMuZmllbGRLZXkoKV19YCkpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKHRydWUsIHRydWUpO1xuICAgIGNvbnN0IHN1YiA9IHRoaXMub3V0TG9hZERhdGFDb21wbGV0ZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICBpZiAoIWlzUGFnaW5nTnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0UGVyUGFnZVNlbGVjdE1vcmVJdGVtKGN1cnJlbnRQYWdlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMua2V5c1NlbGVjdGVkLnNldCh0aGlzLml0ZW1zKCkuc2xpY2UoMCwgcGVyUGFnZSkubWFwKGl0ZW0gPT4gYCR7aXRlbSgpW3RoaXMuZmllbGRLZXkoKV19YCkpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vdXRMb2FkRGF0YUVycm9yLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnNldFBlclBhZ2VTZWxlY3RNb3JlSXRlbShjdXJyZW50UGFnZSk7XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRQZXJQYWdlU2VsZWN0TW9yZUl0ZW0ocGVyUGFnZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBhcmd1bWVudHNWYWx1ZSA9IHRoaXMuaHR0cFJlcXVlc3REYXRhKCk/LmFyZ3VtZW50c1ZhbHVlO1xuXG4gICAgaWYgKCFhcmd1bWVudHNWYWx1ZSB8fCAhdGhpcy5jb25maWdTZWxlY3RNb3JlSXRlbSgpKSB7XG4gICAgICByZXR1cm4gJy0xJztcbiAgICB9XG4gICAgY29uc3Qga2V5UGVyUGFnZSA9IHRoaXMuY29uZmlnU2VsZWN0TW9yZUl0ZW0oKT8ua2V5UGVyUGFnZSB8fCAncGVyX3BhZ2UnO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHNWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGFyZ3VtZW50ID0gYXJndW1lbnRzVmFsdWVbaV07XG5cbiAgICAgIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIEh0dHBQYXJhbXMgJiYgYXJndW1lbnQuaGFzKGtleVBlclBhZ2UpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQZXJQYWdlID0gYXJndW1lbnQuZ2V0KGtleVBlclBhZ2UpIHx8ICcyNSc7XG5cbiAgICAgICAgYXJndW1lbnQgPSBhcmd1bWVudC5zZXQoa2V5UGVyUGFnZSwgcGVyUGFnZSk7XG4gICAgICAgIHNldChhcmd1bWVudHNWYWx1ZSwgYCR7aX1gLCBhcmd1bWVudCk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQZXJQYWdlO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBPYmplY3QgJiYgT2JqZWN0LmtleXMoYXJndW1lbnQpLmluY2x1ZGVzKGtleVBlclBhZ2UpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQZXJQYWdlID0gYXJndW1lbnQuZ2V0KGtleVBlclBhZ2UpIHx8ICcyNSc7XG5cbiAgICAgICAgc2V0KGFyZ3VtZW50LCBrZXlQZXJQYWdlLCBwZXJQYWdlKTtcblxuICAgICAgICByZXR1cm4gY3VycmVudFBlclBhZ2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICctMSc7XG4gIH1cblxuICBwcml2YXRlIG9uU29ydFN1Y2Nlc3Moc2Nyb2xsTGVmdDogbnVtYmVyKSB7XG4gICAgdGhpcy5yZXNldFNjcm9sbChzY3JvbGxMZWZ0LDApO1xuICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQnV0dG9uQ2xpY2sodHlwZTogJ2J1dHRvbicgfCAnYnV0dG9uLWRyb3Bkb3duJywgYnV0dG9uRHJvcGRvd25EYXRhOiBhbnksIGJ1dHRvbjogSUJ1dHRvbikgeyAvLyBidXR0b25PcmlnaW4gY2jhu4kgc+G7rSBk4bulbmcga2hpIGTDuW5nIGJ1dHRvbkFjdGlvbnMgY8OzIGJ1dHRvbi1kcm9wZG93blxuICAgIGlmICh0eXBlID09PSAnYnV0dG9uJykge1xuICAgICAgcmV0dXJuIHRoaXMub3V0Q2xpY2tCdXR0b25BY3Rpb24uZW1pdCh7IGl0ZW06IHRoaXMuaXRlbU9mSW5kZXhIb3ZlciwgYnV0dG9uOiBidXR0b24gfSk7XG4gICAgfVxuICAgIHRoaXMub3V0Q2xpY2tCdXR0b25BY3Rpb24uZW1pdCh7IGl0ZW06IHRoaXMuaXRlbU9mSW5kZXhIb3ZlciwgYnV0dG9uLCBidXR0b25Ecm9wZG93bkRhdGEgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckJhckJ1dHRvbkNsaWNrKGJ1dHRvbjogSUJ1dHRvbikge1xuICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+PiA9IFtdO1xuXG4gICAgdGhpcy5rZXlzU2VsZWN0ZWQoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtcygpLmZpbmQoaXRlbSA9PiBgJHtpdGVtKClbdGhpcy5maWVsZEtleSgpXX1gID09PSBgJHtrZXl9YCk7XG5cbiAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5vdXRDbGlja0JhckJ1dHRvbi5lbWl0KHtcbiAgICAgIGJ1dHRvbixcbiAgICAgIGl0ZW1zLFxuICAgICAga2V5czogdGhpcy5rZXlzU2VsZWN0ZWQoKSxcbiAgICAgIGhpZGRlbkJhckJ1dHRvbnM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJCdXR0b25Ecm9wZG93bkV2ZW50KGV2ZW50TmFtZTogVFlQRV9QT1BPVkVSX0VWRU5UKSB7XG4gICAgdGhpcy5oYXNBY3Rpb25CdXR0b25Ecm9wZG93bkNvbnRlbnQuc2V0KHRydWUpO1xuICAgIGlmIChldmVudE5hbWUgPT09ICdyZW1vdmUnIHx8IGV2ZW50TmFtZSA9PT0gJ21vdXNlbGVhdmUtY29udGVudCcpIHtcbiAgICAgIHRoaXMuaGFzQWN0aW9uQnV0dG9uRHJvcGRvd25Db250ZW50LnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNldEluZGV4SG92ZXIoZTogRXZlbnQsIGl0ZW06IFdyaXRhYmxlU2lnbmFsPFRZUEVfT0JKRUNUPikge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCF0aGlzLml0ZW1zKCkubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJlc2V0SW5kZXhIb3ZlcigpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXRlbU9mSW5kZXhIb3ZlciA9IGl0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRJbmRleEhvdmVyV2hlbk1vdXNlTGVhdmUoZT86IEV2ZW50KSB7XG4gICAgZT8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgY3VycmVudEluZGV4SXRlbUhvdmVyID0gdGhpcy5pdGVtT2ZJbmRleEhvdmVyO1xuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dExlYXZlSXRlbSgpKTtcbiAgICB0aGlzLnRpbWVvdXRMZWF2ZUl0ZW0uc2V0KHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXRlbU9mSW5kZXhIb3ZlciAmJiB0aGlzLml0ZW1PZkluZGV4SG92ZXIgIT09IGN1cnJlbnRJbmRleEl0ZW1Ib3Zlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnJlc2V0SW5kZXhIb3ZlcihlKTtcbiAgICB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRJbmRleEhvdmVyKGU/OiBFdmVudCkge1xuICAgIGU/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLmhhc0FjdGlvbkJ1dHRvbkRyb3Bkb3duQ29udGVudCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXRlbU9mSW5kZXhIb3ZlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyTW91c2VMZWF2ZUNvbnRhaW5lcihldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnJlc2V0SW5kZXhIb3ZlcihldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlck1vdXNlRW50ZXJIZWFkZXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5tb3VzZUVudGVySGVhZGVyLnNldCh0cnVlKTtcbiAgICB0aGlzLnJlc2V0SW5kZXhIb3ZlcihldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlck1vdXNlTGVhdmVIZWFkZXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5tb3VzZUVudGVySGVhZGVyLnNldChmYWxzZSk7XG4gICAgdGhpcy5yZXNldEluZGV4SG92ZXIoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJNb3VzZUVudGVyRm9vdGVyKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMucmVzZXRJbmRleEhvdmVyKGV2ZW50KTtcbiAgICBpZiAodGhpcy5jbGFzc0Zvb3RlckluY2x1ZGUoKSkge1xuICAgICAgdGhpcy5mb290ZXJFbGVtZW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ2JnLVsjZjhmOWZhXScpO1xuICAgICAgdGhpcy5mb290ZXJMZWZ0RWxlbWVudFJlZigpPy5uYXRpdmVFbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKCdiZy1bI2Y4ZjlmYV0nKTtcbiAgICAgIHRoaXMuZm9vdGVyRWxlbWVudFJlZigpPy5uYXRpdmVFbGVtZW50Py5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NGb290ZXJJbmNsdWRlKCkpO1xuICAgICAgdGhpcy5mb290ZXJMZWZ0RWxlbWVudFJlZigpPy5uYXRpdmVFbGVtZW50Py5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NGb290ZXJJbmNsdWRlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyTW91c2VMZWF2ZUZvb3RlcihldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5jbGFzc0Zvb3RlckluY2x1ZGUoKSkge1xuICAgICAgdGhpcy5mb290ZXJFbGVtZW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5jbGFzc0Zvb3RlckluY2x1ZGUoKSk7XG4gICAgICB0aGlzLmZvb3RlckxlZnRFbGVtZW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5jbGFzc0Zvb3RlckluY2x1ZGUoKSk7XG4gICAgICB0aGlzLmZvb3RlckVsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnYmctWyNmOGY5ZmFdJyk7XG4gICAgICB0aGlzLmZvb3RlckxlZnRFbGVtZW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2JnLVsjZjhmOWZhXScpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlclNjcm9sbEhlYWRlcihlOiBFdmVudCkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCF0aGlzLm1vdXNlRW50ZXJIZWFkZXIoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAodGhpcy5ib2R5RWxlbWVudFJlZigpIGFzIGFueSkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxMZWZ0O1xuICAgIGlmICh0aGlzLmZvb3RlckVsZW1lbnRSZWYoKSkge1xuICAgICAgKHRoaXMuZm9vdGVyRWxlbWVudFJlZigpIGFzIGFueSkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxMZWZ0O1xuICAgIH1cbiAgICB0aGlzLnJlc2V0SW5kZXhIb3ZlcihlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2Nyb2xsQm9keShlOiBFdmVudCkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMubW91c2VFbnRlckhlYWRlcigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgICh0aGlzLmhlYWRlckVsZW1lbnRSZWYoKSBhcyBhbnkpLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsTGVmdDtcbiAgICBpZiAodGhpcy5mb290ZXJFbGVtZW50UmVmKCkpIHtcbiAgICAgICh0aGlzLmZvb3RlckVsZW1lbnRSZWYoKSBhcyBhbnkpLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsTGVmdDtcbiAgICB9XG4gICAgdGhpcy5yZXNldEluZGV4SG92ZXIoZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNjcm9sbEJvdHRvbShlOiBFdmVudCkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMubG9hZGluZygpIHx8IHRoaXMuYWN0aXZpdHlMb2FkRGF0YSgpICE9PSAnc2Nyb2xsLWluZmluaXR5Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm91dExvYWRNb3JlLmVtaXQoeyBsb2FkTW9yZVN1Y2Nlc3M6IHRoaXMubG9hZE1vcmVTdWNjZXNzLmJpbmQodGhpcykgfSk7XG4gICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlUGFnZShwYWdlOiBudW1iZXIpIHtcbiAgICB0aGlzLnBhZ2luZ1N0b3JlLnVwZGF0ZShkYXRhID0+ICh7IC4uLihkYXRhIHx8IHt9KSwgcGFnZSB9KSk7XG4gICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFNjcm9sbChzY3JvbGxQb3NpdGlvbkxlZnQ/OiBudW1iZXIsIHNjcm9sbFBvc2l0aW9uVG9wPzogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuaGVhZGVyRWxlbWVudFJlZigpKSB7XG4gICAgICAodGhpcy5oZWFkZXJFbGVtZW50UmVmKCkgYXMgYW55KS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxQb3NpdGlvbkxlZnQgfHwgMDtcbiAgICB9XG4gICAgaWYgKHRoaXMuQm9keUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuQm9keUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsUG9zaXRpb25Ub3AgfHwgMDtcbiAgICAgIHRoaXMuQm9keUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbFBvc2l0aW9uTGVmdCB8fCAwO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb290ZXJFbGVtZW50UmVmKCkpIHtcbiAgICAgICh0aGlzLmZvb3RlckVsZW1lbnRSZWYoKSBhcyBhbnkpLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbFBvc2l0aW9uTGVmdCB8fCAwO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXQoY2xlYXJTb3J0PzogYm9vbGVhbikge1xuICAgIGlmIChjbGVhclNvcnQpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2VTb3J0KCk/LnJlc2V0KCk7XG4gICAgICB0aGlzLmluc3RhbmNlU29ydC5zZXQodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgdGhpcy5oYXNTY3JvbGwuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG4gICAgdGhpcy5pdGVtcy5zZXQoW10pO1xuICAgIHRoaXMuc3RvcmVzLnNldChbXSk7XG4gICAgdGhpcy5mYWtlUmVzcG9uc2VBcGkoKTtcbiAgICB0aGlzLnJlc2V0U2Nyb2xsKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrU2Nyb2xsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhhc1Njcm9sbCA9IHRoaXMuaGFzU2Nyb2xsKCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB0aW1lcig1MDApLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLkJvZHlFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5oYXNTY3JvbGwuc2V0KHRoaXMuQm9keUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gdGhpcy5Cb2R5RWxlbWVudC5vZmZzZXRIZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNTY3JvbGwgJiYgIXRoaXMuaGFzU2Nyb2xsKCkpIHtcbiAgICAgICAgICB0aGlzLm91dFNjcm9sbElzR29uZS5lbWl0KHt9KTtcbiAgICAgICAgICBpZiAoIXRoaXMuZmlsdGVyT3JTb3J0TG9jYWwoKSkge1xuICAgICAgICAgICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgQm9keUVsZW1lbnQoKTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmJvZHlFbGVtZW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0TGVhdmVJdGVtKCkpO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9J2ZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbCc+XG4gIEBpZiAoIWlnbm9yZUJhcigpKSB7XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciByZWxhdGl2ZSB6LVsxXSBib3R0b20tMCBsZWZ0LTAgdy1mdWxsIGJnLXdoaXRlIGxpYnMtdWktdGFibGUtc2hhZG93LWJvdHRvbSB7eyBjbGFzc0JhckluY2x1ZGUoKSB9fVwiXG4gICAgICBbY2xhc3MucHgtWzE2cHhdXT1cImtleXNTZWxlY3RlZCgpLmxlbmd0aCB8fCBsYWJlbEJhck5vU2VsZWN0SXRlbSgpXCJcbiAgICAgIFtjbGFzcy5weS1bNnB4XV09XCJrZXlzU2VsZWN0ZWQoKS5sZW5ndGggfHwgbGFiZWxCYXJOb1NlbGVjdEl0ZW0oKVwiXG4gICAgICAobW91c2VlbnRlcik9XCJyZXNldEluZGV4SG92ZXIoJGV2ZW50KVwiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PSdkaXYubGlicy11aS10YWJsZS1iYXItbGVmdCc+PC9uZy1jb250ZW50PlxuICAgICAgQGlmICgha2V5c1NlbGVjdGVkKCkubGVuZ3RoICYmIGxhYmVsQmFyTm9TZWxlY3RJdGVtKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInt7IGNsYXNzTGFiZWxCYXJOb1NlbGVjdEl0ZW0oKSA/PyAncHgtWzEycHhdIHB5LVs1cHhdJyB9fVwiXG4gICAgICAgICAgW2lubmVySHRtbF09J2xhYmVsQmFyTm9TZWxlY3RJdGVtKCkgfCB0cmFuc2xhdGU6e3ZhbHVlOnRvdGFsSXRlbURpc3BsYXkoKX0nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAoa2V5c1NlbGVjdGVkKCkubGVuZ3RoKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBwbC1bMTJweF1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgaC1mdWxsIG10LVstMnB4XVwiPlxuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUgW2NoZWNrZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBkaXNhYmxlQ2hlY2tib3goKVwiXG4gICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZUFsbENoZWNrZWQoKVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNW0gdGV4dC1bIzA3MTYzMV0gbXItWzhweF0ge3sgY2xhc3NMYWJlbEJhckJ1dHRvbnMoKSB9fVwiPlxuICAgICAgICAgICAge3sgbGFiZWxCYXJCdXR0b25zKCkgfCB0cmFuc2xhdGU6eyB2YWx1ZTprZXlzU2VsZWN0ZWQoKS5sZW5ndGggfSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAoY29uZmlnU2VsZWN0TW9yZUl0ZW0oKSkge1xuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kcm9wZG93biBbaXNOZ0NvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtwb3BvdmVyQ3VzdG9tQ29uZmlnXT1cIntcbiAgICAgICAgICAgICAgICB3aWR0aEJ5UGFyZW50OmZhbHNlLFxuICAgICAgICAgICAgICAgIGlnbm9yZUFycm93OiB0cnVlLFxuICAgICAgICAgICAgICAgIG1heEhlaWdodDogIDIwNDgsXG4gICAgICAgICAgICAgICAgY2xhc3NJbmNsdWRlOichdy1bMTIxcHhdJyxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgICAgbW9kZTonc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6MFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICBbbGlzdENvbmZpZ109XCJsaXN0Q29uZmlnTW9yZUl0ZW0oKVwiXG4gICAgICAgICAgICAgIFtsaXN0SGlkZGVuSW5wdXRTZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiNVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiIXctWzE2cHhdIGgtWzE2cHhdIG1yLVs4cHhdXCJcbiAgICAgICAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0ZWRNb3JlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbE1vcmVTZWxlY3RJdGVtKCRldmVudClcIj5cbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCInYnV0dG9uLWxpbmstcHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLTAgbS0wJ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2JlZm9yZTohdGV4dC1bMTZweF0gbGlicy11aS1pY29uLW1vdmUtcmlnaHQgcm90YXRlLTkwIG1yLVs2cHhdJ1wiXG4gICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwie2NvbmZpZzp7Y29udGVudDonaTE4bl9tb3JlX3NlbGVjdCd9fVwiXG4gICAgICAgICAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cInRydWVcIiAvPlxuICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLVsxNnB4XSBsaWJzLXVpLWJvcmRlci1sZWZ0LWdlbmVyYWwgbWwtWzE2cHhdXCI+PC9kaXY+XG4gICAgICAgICAgQGlmIChiYXJCdXR0b25zKCk/Lmxlbmd0aCkge1xuICAgICAgICAgICAgQGZvciAoYnV0dG9uIG9mIGJhckJ1dHRvbnMoKTt0cmFjayBidXR0b24pIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCJidXR0b24udHlwZSB8fCAnYnV0dG9uLWxpbmstcHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cImJ1dHRvbi5jbGFzc0ljb25MZWZ0IHx8ICcnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImJ1dHRvbi5jbGFzc0luY2x1ZGUgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCIoYnV0dG9uLmxhYmVsIHx8ICcgJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQmFyQnV0dG9uQ2xpY2soYnV0dG9uKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD0nZGl2LmxpYnMtdWktdGFibGUtYmFyLXJpZ2h0Jz48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIH1cblxuICA8ZGl2ICN0YWJsZUNvbnRhaW5lckVsZW1lbnRSZWZcbiAgICBjbGFzcz1cImxpYnMtdWktdGFibGUgZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsIHJlbGF0aXZlIHt7IGNsYXNzVGFibGVDb250YWluZXJJbmNsdWRlKCkgfX1cIlxuICAgIFtjbGFzcy5weC1bMTZweF1dPSchaWdub3JlQmFyKCknXG4gICAgKG1vdXNlbGVhdmUpPVwiaGFuZGxlck1vdXNlTGVhdmVDb250YWluZXIoJGV2ZW50KVwiPlxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGwgc2hyaW5rLTBcIlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWFkZXJFbGVtZW50UmVmLm9mZnNldEhlaWdodFwiPlxuICAgICAgPGRpdiAjaGVhZGVyRWxlbWVudFJlZlxuICAgICAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgICAgICBbb3B0aW9uc109XCJ7c2Nyb2xsYmFyV2lkdGg6IDB9XCJcbiAgICAgICAgW2NsYXNzLmxpYnMtdWktYm9yZGVyLWJvdHRvbS1kYXNoZWQtZ2VuZXJhbF09XCIhaGFzSXRlbUhpZ2h0TGlnaHQoKSAmJiBpc0Rhc2hCb3JkZXIoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci1ib3R0b20tZ2VuZXJhbF09XCIhaGFzSXRlbUhpZ2h0TGlnaHQoKSAmJiAhaXNEYXNoQm9yZGVyKClcIlxuICAgICAgICBbY2xhc3MuIWhpZGRlbl09XCIhaXRlbXMoKS5sZW5ndGggJiYgaXNIaWRkZW5IZWFkZXJXaGVuTm9kYXRhKClcIlxuICAgICAgICBbY2xhc3NdPVwiY2xhc3NIZWFkZXJDb250YWluZXIoKVwiXG4gICAgICAgIChvdXRTY3JvbGwpPVwiaGFuZGxlclNjcm9sbEhlYWRlcigkZXZlbnQpXCJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwiaGFuZGxlck1vdXNlRW50ZXJIZWFkZXIoJGV2ZW50KVwiXG4gICAgICAgIChtb3VzZWxlYXZlKT1cImhhbmRsZXJNb3VzZUxlYXZlSGVhZGVyKCRldmVudClcIj5cbiAgICAgICAgQGlmIChoZWFkZXJMZWZ0KCkubGVuZ3RoKSB7XG4gICAgICAgICAgPGRpdiBbY2xhc3NdPVwiY2xhc3NIZWFkZXJMZWZ0Q29udGFpbmVyKClcIj5cbiAgICAgICAgICAgIEBmb3IgKGhlYWRlciBvZiBoZWFkZXJMZWZ0KCk7dHJhY2sgaGVhZGVyKSB7XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZUhlYWRlclJlZjtjb250ZXh0OntoZWFkZXJJdGVtOmhlYWRlcixpc0hlYWRlckxlZnQ6dHJ1ZX1cIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoaGVhZGVyUmlnaHQoKS5sZW5ndGgpIHtcbiAgICAgICAgICBAZm9yIChoZWFkZXIgb2YgaGVhZGVyUmlnaHQoKTt0cmFjayBoZWFkZXIpIHtcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZUhlYWRlclJlZjtjb250ZXh0OntoZWFkZXJJdGVtOmhlYWRlcixpc0hlYWRlckxlZnQ6ZmFsc2V9XCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIEBpZiAoc2hvd0Zvb3RlcigpICYmIGl0ZW1Gb290ZXIoKSAmJiBjdXN0b21Qb3NpdGlvbkZvb3RlcigpID09PSAndG9wJykge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD0ndGVtcGxhdGVGb290ZXJSZWYnIC8+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGwgb3ZlcmZsb3cteC1oaWRkZW4gYmctd2hpdGUge3sgY2xhc3NCb2R5SW5jbHVkZSgpIHx8ICcnIH19XCI+XG4gICAgICA8ZGl2ICNib2R5RWxlbWVudFJlZlxuICAgICAgICBjbGFzcz1cImZsZXggaC1mdWxsIHctZnVsbCByZWxhdGl2ZVwiXG4gICAgICAgIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlXG4gICAgICAgIChvdXRTY3JvbGwpPVwiaGFuZGxlclNjcm9sbEJvZHkoJGV2ZW50KVwiXG4gICAgICAgIChvdXRTY3JvbGxCb3R0b20pPVwiaGFuZGxlclNjcm9sbEJvdHRvbSgkZXZlbnQpXCI+XG4gICAgICAgIEBpZiAoaXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgICAgICA8dmlydHVhbC1zY3JvbGxlciAjYm9keUNvbXBvbmVudFJlZlxuICAgICAgICAgICAgW2l0ZW1zXT1cIml0ZW1zKClcIlxuICAgICAgICAgICAgW2VuYWJsZVVuZXF1YWxDaGlsZHJlblNpemVzXT1cImVuYWJsZVVuZXF1YWxDaGlsZHJlblNpemVzKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJoLWZ1bGxcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImhlYWRlckVsZW1lbnRSZWYuc2Nyb2xsV2lkdGggPiAoYm9keUVsZW1lbnRSZWYgPyBib2R5RWxlbWVudFJlZi5zY3JvbGxXaWR0aCA6IDApID8gaGVhZGVyRWxlbWVudFJlZi5zY3JvbGxXaWR0aDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIFtwYXJlbnRTY3JvbGxdPVwiYm9keUVsZW1lbnRSZWZcIlxuICAgICAgICAgICAgW2J1ZmZlckFtb3VudF09XCJidWZmZXJBbW91bnQoKVwiPlxuICAgICAgICAgICAgQGZvciAoZGF0YSBvZiBib2R5Q29tcG9uZW50UmVmLnZpZXdQb3J0SXRlbXM7dHJhY2sgZGF0YSgpKSB7XG4gICAgICAgICAgICAgIDxkaXYgI2VsZW1lbnRIb3ZlclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJnLVsjZjNmY2ZjXV09XCJkYXRhKCkuc3BlY2lmaWNIaWdodExpZ2h0XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MubGlicy11aS1ib3JkZXItdG9wLTFweC0zNmQzZDNdPVwiZGF0YSgpLnNwZWNpZmljSGlnaHRMaWdodCAmJiAkZmlyc3QgJiYgIWlnbm9yZUJvcmRlckl0ZW0oKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktYm9yZGVyLWJvdHRvbS0xcHgtMzZkM2QzXT1cImRhdGEoKS5zcGVjaWZpY0hpZ2h0TGlnaHQgJiYgIWlnbm9yZUJvcmRlckl0ZW0oKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiKGRhdGEoKS5zcGVjaWZpY0hpZ2h0TGlnaHQgfHwgKCRsYXN0ICYmIGlnbm9yZUJvcmRlckl0ZW1MYXN0KCkpKSA/ICdsaWJzLXVpLWJvcmRlci1yYWRpdXMtYm90dG9tLWxlZnQtNHB4IGxpYnMtdWktYm9yZGVyLXJhZGl1cy1ib3R0b20tcmlnaHQtNHB4JyA6IGlnbm9yZUJvcmRlckl0ZW0oKSA/ICcnIDogaXNEYXNoQm9yZGVyKCkgPyAnbGlicy11aS1ib3JkZXItYm90dG9tLWRhc2hlZC1nZW5lcmFsJyA6ICdsaWJzLXVpLWJvcmRlci1ib3R0b20tZ2VuZXJhbCdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJoZWFkZXJFbGVtZW50UmVmLnNjcm9sbFdpZHRoXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYmctWyNmOGY5ZmFdXT1cIml0ZW1PZkluZGV4SG92ZXIgPT09IGRhdGEgJiYgIWRhdGEoKS5zcGVjaWZpY0hpZ2h0TGlnaHRcIlxuICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInNldEluZGV4SG92ZXIoJGV2ZW50LGRhdGEpXCJcbiAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJyZXNldEluZGV4SG92ZXJXaGVuTW91c2VMZWF2ZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgQGlmIChoZWFkZXJMZWZ0KCkubGVuZ3RoIHx8IGhlYWRlclJpZ2h0KCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChoZWFkZXJMZWZ0KCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBzdGlja3kgdG9wLTAgbGVmdC0wIHotWzFdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJnLXdoaXRlXT1cIiFkYXRhKCkuc3BlY2lmaWNIaWdodExpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJnLVsjZjNmY2ZjXV09XCJkYXRhKCkuc3BlY2lmaWNIaWdodExpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGhlYWRlciBvZiBoZWFkZXJMZWZ0KCk7dHJhY2sgaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4IHB4LVsxMnB4XSBweS1bOHB4XSB7eyBoZWFkZXIuaWdub3JlQm9yZGVyUmlnaHQgPyAnJzogJ2xpYnMtdWktYm9yZGVyLXJpZ2h0LWdlbmVyYWwnIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5iZy1bI2Y4ZjlmYV1dPVwiaXRlbU9mSW5kZXhIb3ZlciA9PT0gZGF0YSAmJiAhZGF0YSgpLnNwZWNpZmljSGlnaHRMaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCIoaGVhZGVyfExpYnNVaVRhYmxlQ2FsY3VsYXRvckNvbHVtblBpcGU6aGVhZGVyRWxlbWVudFJlZi5jbGllbnRXaWR0aDpoZWFkZXJMZWZ0KCk6aGVhZGVyUmlnaHQoKSkgfHwgKGhlYWRlci5pc1Nob3dJbmRleE9uUm93ID8ge3dpZHRoOic1MHB4JywnZmxleC1zaGlyayc6JzAnLHBhZGRpbmc6JzhweCd9IDoge30pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImhlYWRlci5uZ0NsYXNzIHx8ICB7fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlQm9keVJlZjtjb250ZXh0OntoZWFkZXI6aGVhZGVyLGRhdGE6ZGF0YX1cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChoZWFkZXJSaWdodCgpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoaGVhZGVyIG9mIGhlYWRlclJpZ2h0KCk7dHJhY2sgaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4IHB4LVsxMnB4XSBweS1bOHB4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiKGhlYWRlcnxMaWJzVWlUYWJsZUNhbGN1bGF0b3JDb2x1bW5QaXBlOmhlYWRlckVsZW1lbnRSZWYuY2xpZW50V2lkdGg6aGVhZGVyTGVmdCgpOmhlYWRlclJpZ2h0KCkpIHx8IChoZWFkZXIuaXNTaG93SW5kZXhPblJvdyA/IHt3aWR0aDonNTBweCcsJ2ZsZXgtc2hpcmsnOicwJyxwYWRkaW5nOic4cHgnfSA6IHt9KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaGVhZGVyLm5nQ2xhc3MgfHwge31cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVCb2R5UmVmO2NvbnRleHQ6e2hlYWRlcjpoZWFkZXIsZGF0YTpkYXRhfVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoY29uZmlnVGVtcGxhdGVJdGVtQ29sbGFwc2VFeHBhbmQoKSAmJiBkYXRhKCkuc3BlY2lmaWNFeHBhbmQgJiYgZGF0YSgpW2NvbmZpZ1RlbXBsYXRlSXRlbUNvbGxhcHNlRXhwYW5kKCk/LmZpZWxkR2V0RGF0YUV4cGFuZCB8fCAnc3BlY2lmaWNEYXRhRXhwYW5kJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJjb25maWdUZW1wbGF0ZUl0ZW1Db2xsYXBzZUV4cGFuZCgpPy5jc3NXcmFwcGVyIHx8ICdmbGV4IHctZnVsbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGRhdGFFeHBhbmQgb2YgZGF0YSgpW2NvbmZpZ1RlbXBsYXRlSXRlbUNvbGxhcHNlRXhwYW5kKCk/LmZpZWxkR2V0RGF0YUV4cGFuZCB8fCAnc3BlY2lmaWNEYXRhRXhwYW5kJ10oKTt0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjb25maWdUZW1wbGF0ZUl0ZW1Db2xsYXBzZUV4cGFuZCgpPy5jb2xUZW1wbGF0ZUNvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtdGFibGUtdGVtcGxhdGVzIFtpdGVtXT1cImRhdGFFeHBhbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlQ3NzV3JhcHBlcl09XCJjb25maWdUZW1wbGF0ZUl0ZW1Db2xsYXBzZUV4cGFuZCgpPy50ZW1wbGF0ZUNzc1dyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ3NdPVwiY29uZmlnVGVtcGxhdGVJdGVtQ29sbGFwc2VFeHBhbmQoKT8uY29sVGVtcGxhdGVDb25maWdcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbXB0eSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBoLVsxMDBweF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVOb2RhdGFSZWZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3ZpcnR1YWwtc2Nyb2xsZXI+XG4gICAgICAgIH0gQGVsc2UgaWYgKCFsb2FkaW5nKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5IGxlZnQtMCB0b3AtMCB6LVsxXSBoLWZ1bGwgdy1mdWxsXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVOb2RhdGFSZWZcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAoc2hvd1Njcm9sbFRhYmxlUGlubmVkSWZOb0RhdGEoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGgtWzFweF0gYmctdHJhbnNwYXJlbnQgdG9wLTAgbGVmdC0wIHotWzFdXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImhlYWRlckVsZW1lbnRSZWYuc2Nyb2xsV2lkdGhcIj48L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAaWYgKHNob3dGb290ZXIoKSAmJiBpdGVtRm9vdGVyKCkgJiYgY3VzdG9tUG9zaXRpb25Gb290ZXIoKSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD0ndGVtcGxhdGVGb290ZXJSZWYnIC8+XG4gICAgICB9XG5cbiAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSB3LWZ1bGwgaC1mdWxsIHotWzJdIGZsZXggaXRlbXMtY2VudGVyIGNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1zcGlubmVyIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChhY3Rpdml0eUxvYWREYXRhKCkgPT09ICdjbGljay1wYWdpbmF0aW9uJykge1xuICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIG10LVsxMnB4XVwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBhZ2luYXRpb25cbiAgICAgICAgW21vZGVEaXNwbGF5VG90YWxQYWdlQW5kR290b1BhZ2VdPVwicGFnaW5hdGlvblNldHRpbmcoKT8ubW9kZURpc3BsYXlUb3RhbFBhZ2VBbmRHb3RvUGFnZSB8fCAnYm90dG9tJ1wiXG4gICAgICAgIFtjbGFzc0Rpc3BsYXlUb3RhbFBhZ2VBbmRHb3RvUGFnZV09XCJwYWdpbmF0aW9uU2V0dGluZygpPy5jbGFzc0Rpc3BsYXlUb3RhbFBhZ2VBbmRHb3RvUGFnZSB8fCAnJ1wiXG4gICAgICAgIFtjbGFzc0luY2x1ZGVJdGVtXT1cInBhZ2luYXRpb25TZXR0aW5nKCk/LmNsYXNzSW5jbHVkZUl0ZW0gfHwgJydcIlxuICAgICAgICBbY2xhc3NJbmNsdWRlQ29udGFpbmVyXT1cInBhZ2luYXRpb25TZXR0aW5nKCk/LmNsYXNzSW5jbHVkZUNvbnRhaW5lciB8fCAnIWl0ZW1zLWVuZCdcIlxuICAgICAgICBbZGlzYWJsZV09XCJwYWdpbmF0aW9uU2V0dGluZygpPy5kaXNhYmxlIHx8IGxvYWRpbmcoKSB8fCAhaXRlbXMoKS5sZW5ndGhcIlxuICAgICAgICBbbnVtYmVyUGFnZURpc3BhbHldPVwicGFnaW5hdGlvblNldHRpbmcoKT8ubnVtYmVyUGFnZURpc3BhbHkgfHwgNVwiXG4gICAgICAgIFtzaG93VG90YWxQYWdlXT1cInBhZ2luYXRpb25TZXR0aW5nKCk/LnNob3dUb3RhbFBhZ2UgfHwgZmFsc2VcIlxuICAgICAgICBbc2hvd0lucHV0R290b1BhZ2VdPVwicGFnaW5hdGlvblNldHRpbmcoKT8uc2hvd0lucHV0R290b1BhZ2UgfHwgZmFsc2VcIlxuICAgICAgICBbdG90YWxJdGVtc109XCJwYWdpbmdTdG9yZSgpPy50b3RhbF9pdGVtcyB8fCAocGFnaW5nU3RvcmUoKT8udG90YWxfcGFnZXMgfHwgMCkqKHBhZ2luZ1N0b3JlKCk/LnBlcl9wYWdlIHx8IDApXCJcbiAgICAgICAgICBbcGVyUGFnZV09XCJwYWdpbmdTdG9yZSgpPy5wZXJfcGFnZSB8fCAwXCJcbiAgICAgICAgICBbY3VycmVudFBhZ2VdPVwicGFnaW5nU3RvcmUoKT8ucGFnZSB8fCAwXCJcbiAgICAgICAgICAob3V0UGFnZVNlbGVjdCk9XCJoYW5kbGVyQ2hhbmdlUGFnZSgkZXZlbnQpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZUhlYWRlclJlZlxuICBsZXQtaGVhZGVyPSdoZWFkZXJJdGVtJ1xuICBsZXQtaXNIZWFkZXJMZWZ0PSdpc0hlYWRlckxlZnQnPlxuICA8ZGl2XG4gICAgW2NsYXNzXT1cIidyZWxhdGl2ZSBmbGV4ICcrIChoZWFkZXIucGFkZGluZ0xlZnRSaWdodEhlYWRlckNvbnRhaW5lciA/PyAnIHB4LVsxMnB4XSAnKSArIChpc0hlYWRlckxlZnQgJiYgIWhlYWRlci5pZ25vcmVCb3JkZXJSaWdodCA/ICcgbGlicy11aS1ib3JkZXItcmlnaHQtZ2VuZXJhbCAnIDogJyAnKSsgJyBsaWJzLXVpLXRhYmxlLWhlYWRlci1jb2wgJ1wiXG4gICAgW2NsYXNzLmZsZXgtY29sXT1cImhlYWRlci5yb3dzQ29uZmlnXCJcbiAgICBbY2xhc3MucHktWzhweF1dPSchaGVhZGVyLmlnbm9yZVB5RGVmYXVsdCdcbiAgICBbbmdTdHlsZV09XCIoaGVhZGVyfExpYnNVaVRhYmxlQ2FsY3VsYXRvckNvbHVtblBpcGU6aGVhZGVyRWxlbWVudFJlZi5jbGllbnRXaWR0aDpoZWFkZXJMZWZ0KCk6aGVhZGVyUmlnaHQoKSkgfHwgKGhlYWRlci5pc1Nob3dJbmRleE9uUm93ID8ge3dpZHRoOic1MHB4JywnZmxleC1zaGlyayc6JzAnLHBhZGRpbmc6JzhweCd9IDoge30pXCJcbiAgICBbbmdDbGFzc109XCJoZWFkZXIubmdDbGFzcyB8fCB7fVwiPlxuICAgIEBpZiAoIWhlYWRlci5yb3dzQ29uZmlnKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVIZWFkZXJDb250ZW50UmVmO2NvbnRleHQ6e2hlYWRlckl0ZW06aGVhZGVyLGlzQ29sUmVuZGVyOmZhbHNlfVwiIC8+XG4gICAgfVxuICAgIEBpZiAoaGVhZGVyLnJvd3NDb25maWc7YXMgcm93c0NvbmZpZykge1xuICAgICAgQGZvciAocm93IG9mIHJvd3NDb25maWcucm93czt0cmFjayByb3cpIHtcbiAgICAgICAgPGRpdiBbY2xhc3NdPVwicm93LmNsYXNzUm93XCI+XG4gICAgICAgICAgQGZvciAoY29sIG9mIHJvdy5jb2xzIDsgdHJhY2sgY29sKSB7XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVIZWFkZXJDb250ZW50UmVmO2NvbnRleHQ6e2hlYWRlckl0ZW06Y29sLGlzQ29sUmVuZGVyOnRydWV9XCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RlbXBsYXRlSGVhZGVyQ29udGVudFJlZlxuICBsZXQtaGVhZGVyPSdoZWFkZXJJdGVtJ1xuICBsZXQtaXNDb2xSZW5kZXI9J2lzQ29sUmVuZGVyJz5cbiAgPGRpdiAjaXRlbUhlYWRlclJlZiBjbGFzcz1cImZsZXggbGlicy11aS1mb250LWg2bSBtaW4taC1bMThweF0gdGV4dC1bIzZhNzM4M10gbWF4LXctZnVsbFwiXG4gICAgW2NsYXNzLml0ZW1zLWNlbnRlcl09J2hlYWRlci5jb250ZW50SGVhZGVyQWxpZ25DZW50ZXIgPz8gdHJ1ZSdcbiAgICBbY2xhc3MuanVzdGlmeS1lbmRdPSdoZWFkZXIuY29udGVudEhlYWRlckp1c3RpZnlDb250ZW50RW5kJ1xuICAgIFtjbGFzcy53LWZ1bGxdPVwiaGVhZGVyLmlzU2hvd0luZGV4T25Sb3dcIlxuICAgIFtuZ1N0eWxlXT1cImlzQ29sUmVuZGVyID8gKChoZWFkZXJ8TGlic1VpVGFibGVDYWxjdWxhdG9yQ29sdW1uUGlwZTpoZWFkZXJFbGVtZW50UmVmLmNsaWVudFdpZHRoOmhlYWRlckxlZnQoKTpoZWFkZXJSaWdodCgpKSB8fCAoaGVhZGVyLmlzU2hvd0luZGV4T25Sb3cgPyB7d2lkdGg6JzUwcHgnLCdmbGV4LXNoaXJrJzonMCcscGFkZGluZzonOHB4J30gOiB7fSkpIDoge31cIlxuICAgIFtuZ0NsYXNzXT1cImlzQ29sUmVuZGVyID8gKGhlYWRlci5uZ0NsYXNzIHx8IHt9KSA6IHt9XCI+XG4gICAgQGlmIChoZWFkZXIuaGFzQ2hlY2tib3gpIHtcbiAgICAgIEBpZiAoaGVhZGVyLmhhc0NoZWNrYm94QWxsKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGgtZnVsbCB7eyBoZWFkZXIuY2hlY2tib3hBbGxDbGFzc0luY2x1ZGUgfHwgJ21yLVsxNnB4XScgfX1cIlxuICAgICAgICAgIFtjbGFzcy5pdGVtcy1jZW50ZXJdPVwiaGVhZGVyLmNoZWNrYm94QWxpZ25DZW50ZXJcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWNoZWNrYm94LXNpbmdsZSBba2V5XT1cIidhbGwnXCJcbiAgICAgICAgICAgIFtzdGlsbE90aGVyT3B0aW9uc109XCIhIWtleXNTZWxlY3RlZCgpLmxlbmd0aCAmJiBrZXlzU2VsZWN0ZWQoKS5sZW5ndGggIT09IGl0ZW1zKCkubGVuZ3RoXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIiEha2V5c1NlbGVjdGVkKCkubGVuZ3RoICYmIGtleXNTZWxlY3RlZCgpLmxlbmd0aCA9PT0gaXRlbXMoKS5sZW5ndGhcIlxuICAgICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpXCJcbiAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiaGVhZGVyLmNoZWNrYm94Q2xhc3NJbmNsdWRlXCJcbiAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZUNoZWNrZWRBbGxJdGVtcygkZXZlbnQpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaC1mdWxsIG1sLVsyNHB4XSB7eyBoZWFkZXIuY2hlY2tib3hDbGFzc0luY2x1ZGUgfX1cIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfVxuICAgIEBmb3IgKHRvb2x0aXAgb2YgaGVhZGVyLnRvb2x0aXBzTGVmdDsgdHJhY2sgdG9vbHRpcCkge1xuICAgICAgPGRpdiBjbGFzcz1cIm1yLVs0cHhdXCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbdHlwZV09XCJ0b29sdGlwPy50eXBlIHx8ICdvdGhlcidcIlxuICAgICAgICAgIFttb2RlXT1cInRvb2x0aXA/Lm1vZGUgfHwgJ2hvdmVyJ1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJ0b29sdGlwLmNsYXNzSW5jbHVkZSB8fCAndGV4dC1bIzZhNzM4M10nXCJcbiAgICAgICAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwidG9vbHRpcC5pZ25vcmVTaG93VG9vbHRpcCB8fCBmYWxzZVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJ0b29sdGlwLmNvbmZpZyB8fCB7Y29udGVudDoodG9vbHRpcC5kYXRhVmlldyB8fCAnICcpIHwgdHJhbnNsYXRlLCBwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIG1vZGU6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlOiAwLFxuICAgICAgICAgICAgICAgIGF1dG9VcGRhdGVQb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgICAgZW5kRGlzdGFuY2U6IDEyLFxuICAgICAgICAgICAgICAgICAgc3RhcnREaXN0YW5jZTogLTEyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgW2lubmVySFRNTF09XCJ0b29sdGlwLmRhdGFWaWV3XCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoaGVhZGVyLmlzU2hvd0luZGV4T25Sb3cpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBoLWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHt7IGhlYWRlci5jbGFzc0luY2x1ZGVJbmRleE9uUm93IHx8ICcnIH19XCI+XG4gICAgICAgIHt7IGhlYWRlci5sYWJlbCA/PyAnIycgfX1cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgQGlmICgoaGVhZGVyLmxhYmVsIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTpoZWFkZXIucGFyc2VWYWx1ZTpoZWFkZXIpIHwgYXN5bmMgfCB0cmFuc2xhdGU7IGFzIGxhYmVsSGVhZGVyQ29sdW1uKSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbdHlwZV09XCJoZWFkZXI/LmxhYmVsQ29uZmlnPy50eXBlIHx8ICd0ZXh0J1wiXG4gICAgICAgICAgW21vZGVdPVwiaGVhZGVyPy5sYWJlbENvbmZpZz8ubW9kZSB8fCAnaG92ZXInXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIihoZWFkZXI/LmxhYmVsQ29uZmlnPy5jbGFzc0luY2x1ZGUgfHwgJycpXCJcbiAgICAgICAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwiaGVhZGVyPy5sYWJlbENvbmZpZz8uaWdub3JlU2hvd1Rvb2x0aXAgfHwgZmFsc2VcIlxuICAgICAgICAgIFtjb25maWddPVwiaGVhZGVyLmxhYmVsQ29uZmlnPy5jb25maWcgfHwge2NvbnRlbnQ6bGFiZWxIZWFkZXJDb2x1bW59XCJcbiAgICAgICAgICBbaW5uZXJIVE1MXT1cImxhYmVsSGVhZGVyQ29sdW1uXCIgLz5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAZm9yICh0b29sdGlwIG9mIGhlYWRlci50b29sdGlwc1JpZ2h0OyB0cmFjayB0b29sdGlwKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwibWwtWzRweF1cIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFt0eXBlXT1cInRvb2x0aXA/LnR5cGUgfHwgJ290aGVyJ1wiXG4gICAgICAgICAgW21vZGVdPVwidG9vbHRpcD8ubW9kZSB8fCAnaG92ZXInXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cInRvb2x0aXAuY2xhc3NJbmNsdWRlIHx8ICd0ZXh0LVsjNmE3MzgzXSdcIlxuICAgICAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCJ0b29sdGlwLmlnbm9yZVNob3dUb29sdGlwIHx8IGZhbHNlXCJcbiAgICAgICAgICBbY29uZmlnXT1cInRvb2x0aXAuY29uZmlnIHx8IHtjb250ZW50Oih0b29sdGlwLmRhdGFWaWV3IHx8ICcgJykgfCB0cmFuc2xhdGUsIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgIG1vZGU6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBkaXN0YW5jZTogMCxcbiAgICAgICAgICAgICAgYXV0b1VwZGF0ZVBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgZW5kRGlzdGFuY2U6IDEyLFxuICAgICAgICAgICAgICAgIHN0YXJ0RGlzdGFuY2U6IC0xMlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVwiXG4gICAgICAgICAgW2lubmVySFRNTF09XCJ0b29sdGlwLmRhdGFWaWV3XCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoaGVhZGVyLmhhc1NvcnQgJiYgaGVhZGVyLm9yZGVyYnkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJtbC1bNHB4XVwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtc29ydC1hcnJvdyBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgIWl0ZW1zKCkubGVuZ3RoXCJcbiAgICAgICAgICBbZmllbGRTb3J0XT1cImhlYWRlci5vcmRlcmJ5XCJcbiAgICAgICAgICBbaWdub3JlUG9wb3ZlckNvbnRlbnRdPVwiaGVhZGVyLnNvcnRJZ25vcmVUb29sdGlwQ29udGVudCA/PyB0cnVlXCJcbiAgICAgICAgICBbcG9wb3ZlckNvbnRlbnRBc2NdPVwiaGVhZGVyLnNvcnRUb29sdGlwQ29udGVudEFzY1wiXG4gICAgICAgICAgW3BvcG92ZXJDb250ZW50RGVzY109XCJoZWFkZXIuc29ydFRvb2x0aXBDb250ZW50RGVzY1wiXG4gICAgICAgICAgW2RlZmF1bHRNb2RlXT1cImhlYWRlci5kZWZhdWx0TW9kZVwiXG4gICAgICAgICAgW3pJbmRleF09XCJoZWFkZXIuekluZGV4VG9vbHRpcFNvcnRcIlxuICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVNvcnQoJGV2ZW50KVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuICBAaWYgKGhlYWRlci5sYWJlbERlc2NyaXB0aW9uKSB7XG4gICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImhlYWRlci5sYWJlbERlc2NyaXB0aW9uLmNsYXNzSW5jbHVkZSB8fCAnJ1wiXG4gICAgICAgIFtjb25maWddPVwie2NvbnRlbnQ6IGhlYWRlci5sYWJlbERlc2NyaXB0aW9uLmNvbnRlbnQgfCB0cmFuc2xhdGV9XCJcbiAgICAgICAgW2lubmVySFRNTF09XCJoZWFkZXIubGFiZWxEZXNjcmlwdGlvbi5jb250ZW50IHwgdHJhbnNsYXRlXCIgLz5cbiAgICA8L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZUJvZHlSZWZcbiAgbGV0LWhlYWRlcj0naGVhZGVyJ1xuICBsZXQtZGF0YT0nZGF0YSc+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBoLWZ1bGxcIj5cbiAgICBAaWYgKGhlYWRlci5oYXNDaGVja2JveCkge1xuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaC1mdWxsXCJcbiAgICAgICAgW2NsYXNzLmludmlzaWJsZV09XCJoZWFkZXIuY2hlY2tDb25kaXRpb25DaGVja0JveEhpZGRlbiAmJiggZGF0YSgpIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTpoZWFkZXIuY2hlY2tDb25kaXRpb25DaGVja0JveEhpZGRlbjpkYXRhKCkgfCBhc3luYylcIlxuICAgICAgICBbY2xhc3MuaXRlbXMtY2VudGVyXT1cImhlYWRlci5jaGVja2JveEFsaWduQ2VudGVyXCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtY2hlY2tib3gtc2luZ2xlIFtrZXldPVwiZGF0YSgpW2ZpZWxkS2V5KCldXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImhlYWRlci5jaGVja2JveENsYXNzSW5jbHVkZVwiXG4gICAgICAgICAgW2NoZWNrZWRdPVwiZGF0YSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpUGlwZXNDaGVja1NlbGVjdGVkQnlLZXlQaXBlOmtleXNTZWxlY3RlZCgpOmtleXNTZWxlY3RlZCgpLmxlbmd0aFwiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGRpc2FibGVDaGVja2JveCgpIHx8ICEhKG1heEl0ZW1TZWxlY3RlZCgpICYmICEoZGF0YSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpUGlwZXNDaGVja1NlbGVjdGVkQnlLZXlQaXBlOmtleXNTZWxlY3RlZCgpOmtleXNTZWxlY3RlZCgpLmxlbmd0aCkgJiYga2V5c1NlbGVjdGVkKCkubGVuZ3RoID49IG1heEl0ZW1TZWxlY3RlZCgpKVwiXG4gICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyQ2hhbmdlSXRlbUNoZWNrZWQoJGV2ZW50LGRhdGEoKSlcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChoZWFkZXIuaXNTaG93SW5kZXhPblJvdzsgYXMgY29uZmlnKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGxpYnMtdWktZm9udC1oNHJ7eyBjb25maWcuY2xhc3NJbmNsdWRlSW5kZXhPblJvdyB8fCAnJyB9fVwiPlxuICAgICAgICA8ZGl2IExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICBbY29uZmlnXT1cInt9XCJcbiAgICAgICAgICBbaW5uZXJIVE1MXT1cImRhdGEgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOmdldEluZGV4Um93IHwgYXN5bmNcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKGhlYWRlci5jb2xUZW1wbGF0ZUNvbmZpZykge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy10YWJsZS10ZW1wbGF0ZXMgW2lzSG92ZXJdPVwiaXRlbU9mSW5kZXhIb3ZlciA9PT0gZGF0YSAmJiAhZGF0YS5zcGVjaWZpY0hpZ2h0TGlnaHRcIlxuICAgICAgICBbY2xhc3NdPVwiaGVhZGVyLnRlbXBsYXRlQ3NzV3JhcHBlckhvc3QgfHwgJydcIlxuICAgICAgICBbaXRlbV09XCJkYXRhXCJcbiAgICAgICAgW3RlbXBsYXRlQ3NzV3JhcHBlcl09XCJoZWFkZXIudGVtcGxhdGVDc3NXcmFwcGVyXCJcbiAgICAgICAgW2NvbmZpZ3NdPVwiaGVhZGVyLmNvbFRlbXBsYXRlQ29uZmlnXCIgLz5cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZUZvb3RlclJlZj5cbiAgQGlmICghaXNIaWRkZW5IZWFkZXJXaGVuTm9kYXRhKCkgfHwgKGlzSGlkZGVuSGVhZGVyV2hlbk5vZGF0YSgpICYmIGl0ZW1zKCkubGVuZ3RoKSkge1xuICAgIDxkaXYgI2Zvb3RlckVsZW1lbnRSZWZcbiAgICAgIGNsYXNzPVwiZmxleCB3LWZ1bGwgYmctWyNmOGY5ZmFdIG92ZXJmbG93LXgtaGlkZGVuIHotWzFdIHt7IGlnbm9yZUJvcmRlckZvb3RlcigpID8gJyc6IChjdXN0b21Qb3NpdGlvbkZvb3RlcigpID09PSAndG9wJyA/ICdsaWJzLXVpLWJvcmRlci1ib3R0b20tZ2VuZXJhbCc6J2xpYnMtdWktdGFibGUtc2hhZG93LXRvcCBsaWJzLXVpLWJvcmRlci10b3AtZ2VuZXJhbCcpIH19IG1pbi1oLVszNXB4XVwiXG4gICAgICAobW91c2VlbnRlcik9XCJoYW5kbGVyTW91c2VFbnRlckZvb3RlcigkZXZlbnQpXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cImhhbmRsZXJNb3VzZUxlYXZlRm9vdGVyKCRldmVudClcIj5cbiAgICAgIEBpZiAoZm9vdGVyTGVmdCgpKSB7XG4gICAgICAgIDxkaXYgI2Zvb3RlckxlZnRFbGVtZW50UmVmXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IHN0aWNreSB0b3AtMCBsZWZ0LTAgei1bMV0gYmctWyNmOGY5ZmFdXCI+XG4gICAgICAgICAgQGZvciAoZm9vdGVyIG9mIGZvb3RlckxlZnQoKTt0cmFjayBmb290ZXIpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBweC1bMTJweF0gcHktWzhweF0ge3sgZm9vdGVyLmlnbm9yZUJvcmRlclJpZ2h0ID8gJyc6ICdsaWJzLXVpLWJvcmRlci1yaWdodC1nZW5lcmFsJyB9fVwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIihmb290ZXJ8TGlic1VpVGFibGVDYWxjdWxhdG9yQ29sdW1uUGlwZTpoZWFkZXJFbGVtZW50UmVmLmNsaWVudFdpZHRoOmZvb3RlckxlZnQoKTpmb290ZXJSaWdodCgpKSB8fCB7fVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZvb3Rlci5uZ0NsYXNzIHx8IHt9XCI+XG4gICAgICAgICAgICAgIEBpZiAoZm9vdGVyLmNvbFRlbXBsYXRlQ29uZmlnICYmIGl0ZW1Gb290ZXIoKSkge1xuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtdGFibGUtdGVtcGxhdGVzIFtpdGVtXT1cIml0ZW1Gb290ZXJ8TGlic1VpUGlwZXNDb252ZXJ0T2JqZWN0VG9TaWduYWxQaXBlXCJcbiAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZUNzc1dyYXBwZXJdPVwiZm9vdGVyLnRlbXBsYXRlQ3NzV3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICBbY29uZmlnc109XCJmb290ZXIuY29sVGVtcGxhdGVDb25maWdcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChmb290ZXJSaWdodCgpKSB7XG4gICAgICAgIEBmb3IgKGZvb3RlciBvZiBmb290ZXJSaWdodCgpO3RyYWNrIGZvb3Rlcikge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBweC1bMTJweF0gcHktWzhweF1cIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwiKGZvb3RlcnxMaWJzVWlUYWJsZUNhbGN1bGF0b3JDb2x1bW5QaXBlOmhlYWRlckVsZW1lbnRSZWYuY2xpZW50V2lkdGg6Zm9vdGVyTGVmdCgpOmZvb3RlclJpZ2h0KCkpIHx8IHt9XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZvb3Rlci5uZ0NsYXNzIHx8IHt9XCI+XG4gICAgICAgICAgICBAaWYgKGZvb3Rlci5jb2xUZW1wbGF0ZUNvbmZpZyAmJiBpdGVtRm9vdGVyKCkpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy10YWJsZS10ZW1wbGF0ZXMgW2l0ZW1dPVwiaXRlbUZvb3RlcnxMaWJzVWlQaXBlc0NvbnZlcnRPYmplY3RUb1NpZ25hbFBpcGVcIlxuICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZUNzc1dyYXBwZXJdPVwiZm9vdGVyLnRlbXBsYXRlQ3NzV3JhcHBlclwiXG4gICAgICAgICAgICAgICAgW2NvbmZpZ3NdPVwiZm9vdGVyLmNvbFRlbXBsYXRlQ29uZmlnXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgPC9kaXY+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVOb2RhdGFSZWY+XG4gIEBpZiAoIWtleVNlYXJjaCgpICYmIHRlbXBsYXRlTm9EYXRhKCk7IGFzIHRlbXBsYXRlTm9EYXRhKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlTm9EYXRhXCIgLz5cbiAgfSBAaWYgKGtleVNlYXJjaCgpICYmIHRlbXBsYXRlTm9SZXN1bHQoKTsgYXMgdGVtcGxhdGVOb1Jlc3VsdCkge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZU5vUmVzdWx0XCIgLz5cbiAgfVxuICBAaWYgKCF0ZW1wbGF0ZU5vRGF0YSgpICYmICF0ZW1wbGF0ZU5vUmVzdWx0KCkgJiYgbm9EYXRhQ29uZmlnKCk7IGFzIGNvbmZpZykge1xuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LWZ1bGwgaC1mdWxsIGFic29sdXRlIGxlZnQtMCB0b3AtMCB6LVsxXVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBoLWZ1bGwgc2hyaW5rLTBcIlxuICAgICAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZT5cbiAgICAgICAgQGlmICgha2V5U2VhcmNoKCkgJiYgIW9ubHlTaG93Tm9SZXN1bHQoKSkge1xuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiICgnbm8tZGF0YScgfCBMaWJzVWlJY29uc0dldEljb25Db21wb25lbnRQaXBlIHwgYXN5bmMpO2lucHV0czp7c2l6ZTo2NH1cIiAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLXRhYmxlLW5vLWRhdGEtY29uZmlnLXRleHRcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwiY29uZmlnLm5nU3R5bGUgfHwge31cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29uZmlnLm5nQ2xhc3MgfHwge31cIlxuICAgICAgICAgICAgW2lubmVySHRtbF09XCJjb25maWcudGV4dE5vRGF0YSB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoa2V5U2VhcmNoKCkgfHwgb25seVNob3dOb1Jlc3VsdCgpKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCIoJ25vLXJlc3VsdCcgfCBMaWJzVWlJY29uc0dldEljb25Db21wb25lbnRQaXBlIHwgYXN5bmMpO2lucHV0czp7c2l6ZTo2NH1cIiAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLXRhYmxlLW5vLWRhdGEtY29uZmlnLXRleHRcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwiY29uZmlnLm5nU3R5bGUgfHwge31cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29uZmlnLm5nQ2xhc3MgfHwge31cIlxuICAgICAgICAgICAgW2lubmVySHRtbF09XCJjb25maWcudGV4dFNlYXJjaE5vRGF0YSB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
686
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3RhYmxlL3NyYy90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFibGUvc3JjL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3hOLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBNEIscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRyxPQUFPLEVBQVcsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRyxPQUFPLEVBQVMseUNBQXlDLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRyxPQUFPLEVBQWtCLHVDQUF1QyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDOUcsT0FBTyxFQUFpRCxpQ0FBaUMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWhJLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBc0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRyxPQUFPLEVB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WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MsIE5nQ29tcG9uZW50T3V0bGV0LCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGNvbXB1dGVkLCBEZXN0cm95UmVmLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkLCB2aWV3Q2hpbGQsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiO1xuaW1wb3J0IHsgVmlydHVhbFNjcm9sbGVyQ29tcG9uZW50LCBWaXJ0dWFsU2Nyb2xsZXJNb2R1bGUgfSBmcm9tICdAaWhhcmJlY2svbmd4LXZpcnR1YWwtc2Nyb2xsZXInO1xuaW1wb3J0IHsgSUJ1dHRvbiwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IElTb3J0LCBMaWJzVWlDb21wb25lbnRzQnV0dG9uc1NvcnRBcnJvd0NvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1zb3J0JztcbmltcG9ydCB7IElDaGVja2JveEl0ZW0gfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1jaGVja2JveC1ncm91cFwiO1xuaW1wb3J0IHsgSUNoZWNrYm94RXZlbnQsIExpYnNVaUNvbXBvbmVudHNDaGVja2JveFNpbmdsZUNvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWNoZWNrYm94LXNpbmdsZVwiO1xuaW1wb3J0IHsgSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQsIElFbWl0U2VsZWN0S2V5LCBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWRyb3Bkb3duJztcbmltcG9ydCB7IElMaXN0Q29uZmlnSXRlbSB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWxpc3RcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtcGFnaW5hdGlvblwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIFRZUEVfUE9QT1ZFUl9FVkVOVCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXJcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtc2Nyb2xsLW92ZXJsYXlcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTcGlubmVyQ29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtc3Bpbm5lclwiO1xuaW1wb3J0IHsgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZSB9IGZyb20gXCJAbGlicy11aS9pY29uc1wiO1xuaW1wb3J0IHsgSUh0dHBSZXNwb25zZUVycm9yLCBJUGFnaW5nLCBUWVBFX09CSkVDVCwgVFlQRV9URU1QTEFURV9SRUYgfSBmcm9tIFwiQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlc1wiO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZSB9IGZyb20gXCJAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlXCI7XG5pbXBvcnQgeyBMaWJzVWlQaXBlc0NoZWNrU2VsZWN0ZWRCeUtleVBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jaGVjay1zZWxlY3RlZC1ieS1rZXknO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNDb252ZXJ0T2JqZWN0VG9TaWduYWxQaXBlIH0gZnJvbSBcIkBsaWJzLXVpL3BpcGVzLWNvbnZlcnQtb2JqZWN0LXRvLXNpZ25hbFwiO1xuaW1wb3J0IHsgSUh0dHBSZXF1ZXN0Q29uZmlnLCBMaWJzVWlIdHRwUmVxdWVzdFNlcnZpY2UsIHJldHVybkxpc3RPYmplY3QgfSBmcm9tIFwiQGxpYnMtdWkvc2VydmljZXMtaHR0cC1yZXF1ZXN0XCI7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGNvbnZlcnRPYmplY3RUb1NpZ25hbCwgZGVsZXRlVW5pY29kZSwgZ2V0LCBzZXQsIHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSB9IGZyb20gXCJAbGlicy11aS91dGlsc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IGZyb21FdmVudCwgbGFzdFZhbHVlRnJvbSwgb2YsIHRpbWVyIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IElCdXR0b25CYXJFdmVudCwgSUNvbmZpZ1NlbGVjdE1vcmVJdGVtLCBJQ29uZmlnVGVtcGxhdGVJdGVtQ29sbGFwc2VFeHBhbmQsIElIb3ZlckJ1dHRvbkFjdGlvbkV2ZW50LCBJTG9hZE1vcmVFdmVudCwgSVNvcnRFdmVudCwgSVRhYmVsQnV0dG9uQWN0aW9uRXZlbnQsIElUYWJsZUZvb3RlckNvbmZpZywgSVRhYmxlSGVhZGVyQ29uZmlnLCBUWVBFX0RBVEFfRklMVEVSX1RBQkxFLCBUWVBFX0RBVEFfVEFCTEUsIFRZUEVfSVRFTV9EQVRBX1RBQkxFLCBUWVBFX05FV19EQVRBX1RBQkxFLCBUWVBFX1RBQkxFX0ZJTFRFUiB9IGZyb20gXCIuL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IElUYWJsZUZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLWV2ZW50LmludGVyZmFjZVwiO1xuaW1wb3J0IHsgSVRhYmxlTm9EYXRhQ29uZmlnIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9uby1kYXRhLWNvbmZpZy5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IExpYnNVaVRhYmxlQ2FsY3VsYXRvckNvbHVtblBpcGUgfSBmcm9tIFwiLi9waXBlcy9jYWxjdWxhdG9yLWNvbHVtbi5waXBlXCI7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzVGFibGVUZW1wbGF0ZXNDb21wb25lbnQgfSBmcm9tIFwiLi90ZW1wbGF0ZXMvdGVtcGxhdGVzLmNvbXBvbmVudFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsIE5nU3R5bGUsIEFzeW5jUGlwZSwgTmdUZW1wbGF0ZU91dGxldCwgTmdDb21wb25lbnRPdXRsZXQsIExpYnNVaUNvbXBvbmVudHNUYWJsZVRlbXBsYXRlc0NvbXBvbmVudCxcbiAgICBUcmFuc2xhdGVNb2R1bGUsIFZpcnR1YWxTY3JvbGxlck1vZHVsZSwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQsIExpYnNVaVBpcGVzQ29udmVydE9iamVjdFRvU2lnbmFsUGlwZSxcbiAgICBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zU29ydEFycm93Q29tcG9uZW50LExpYnNVaUNvbXBvbmVudHNQYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNDaGVja2JveFNpbmdsZUNvbXBvbmVudCwgTGlic1VpVGFibGVDYWxjdWxhdG9yQ29sdW1uUGlwZSxcbiAgICBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUsIExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUsXG4gICAgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZSwgTGlic1VpUGlwZXNDaGVja1NlbGVjdGVkQnlLZXlQaXBlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1RhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKiogUFJPUEVSVFkgKi9cbiAgcHJvdGVjdGVkIGNsYXNzSGVhZGVyQ29udGFpbmVyID0gY29tcHV0ZWQoKCkgPT4gYGxpYnMtdWktdGFibGUtaGVhZGVyLWNvbnRhaW5lciB3LWZ1bGwgYWJzb2x1dGUgZmxleCBzaHJpbmstMCAke3RoaXMuaWdub3JlQ2xhc3NCZ0hlYWRlcigpID8gJycgOiAnYmctd2hpdGUnfSBvdmVyZmxvdy14LWhpZGRlbiB6LVsxXSBpdGVtcy1jZW50ZXIgJHt0aGlzLmNsYXNzSGVhZGVyQ29udGFpbmVySW5jbHVkZSgpIHx8ICcnfWApXG4gIHByb3RlY3RlZCBjbGFzc0hlYWRlckxlZnRDb250YWluZXIgPSBjb21wdXRlZCgoKSA9PiBgaC1mdWxsIGZsZXggc3RpY2t5IHRvcC0wIGxlZnQtMCB6LVsxXSAke3RoaXMuaWdub3JlQ2xhc3NCZ0hlYWRlcigpID8gJycgOiAnYmctd2hpdGUnfSAke3RoaXMuY2xhc3NIZWFkZXJMZWZ0SW5jbHVkZSgpIHx8ICcnfWApXG5cbiAgcHJvdGVjdGVkIGtleXNTZWxlY3RlZCA9IHNpZ25hbDxBcnJheTxhbnk+PihbXSk7XG4gIHByb3RlY3RlZCBsb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIHN0b3JlcyA9IHNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxUWVBFX09CSkVDVD4+PihbXSk7XG4gIHByb3RlY3RlZCBpdGVtcyA9IHNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxUWVBFX09CSkVDVD4+PihbXSk7XG4gIHByb3RlY3RlZCBpdGVtRm9vdGVyID0gc2lnbmFsPFRZUEVfT0JKRUNUIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgaXRlbU9mSW5kZXhIb3Zlcj86IFRZUEVfSVRFTV9EQVRBX1RBQkxFO1xuICBwcm90ZWN0ZWQga2V5U2VhcmNoID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcm90ZWN0ZWQgdG90YWxJdGVtSW5CYWNrZW5kID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBoYXNJdGVtSGlnaHRMaWdodCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCB0b3RhbEl0ZW1EaXNwbGF5ID0gY29tcHV0ZWQoKCkgPT4gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKCh0aGlzLnRvdGFsSXRlbSgpID8/IHRoaXMudG90YWxJdGVtSW5CYWNrZW5kKCkpLCBmYWxzZSkpO1xuICBwcm90ZWN0ZWQgbGlzdENvbmZpZ01vcmVJdGVtID0gY29tcHV0ZWQ8SUxpc3RDb25maWdJdGVtPigoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIGNvbmZpZ1RlbXBsYXRlVGV4dDogc2lnbmFsKHtcbiAgICAgICAgZmllbGRLZXk6ICdrZXknLFxuICAgICAgICBpZ25vcmVJY29uU2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgIGdldFZhbHVlOiB0aGlzLmNvbmZpZ1NlbGVjdE1vcmVJdGVtKCk/LmdldFZhbHVlLFxuICAgICAgICBjb25maWdMYWJlbFBvcG92ZXI6IHNpZ25hbCh7XG4gICAgICAgICAgekluZGV4OiAxMjAwXG4gICAgICAgIH0pXG4gICAgICB9KSxcbiAgICAgIGh0dHBSZXF1ZXN0RGF0YTogc2lnbmFsKHtcbiAgICAgICAgc2VydmljZU90aGVyOiByZXR1cm5MaXN0T2JqZWN0KHRoaXMuY29uZmlnU2VsZWN0TW9yZUl0ZW0oKT8ubGlzdE9wdGlvbiksXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogJ2xpc3QnLFxuICAgICAgICBhcmd1bWVudHNWYWx1ZTogW11cbiAgICAgIH0pXG4gICAgfVxuICB9KVxuXG4gIHByaXZhdGUgaGFzU2Nyb2xsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBpbnN0YW5jZVNvcnQgPSBzaWduYWw8SVNvcnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgaGFzQWN0aW9uQnV0dG9uRHJvcGRvd25Db250ZW50ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIHBhZ2luZ1N0b3JlID0gc2lnbmFsPElQYWdpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgbG9hZGVkTGFzdEl0ZW0gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHN0b3JlUGFyYW1zQ2FsbEFwaSA9IHNpZ25hbDxUWVBFX09CSkVDVD4oe30pO1xuICBwcml2YXRlIHRpbWVvdXRMZWF2ZUl0ZW0gPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGZ1bmN0aW9uQ29udHJvbFNlbGVjdE1vcmVJdGVtPzogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQ7XG4gIHByaXZhdGUgbW91c2VFbnRlckhlYWRlciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgLyoqIElOUFVUICovXG4gIHJlYWRvbmx5IHRpbWVIaWdobGlnaE5ld0l0ZW0gPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMjAwMCwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gMjAwMCB9KTtcbiAgcmVhZG9ubHkgaGVhZGVyTGVmdCA9IGlucHV0PEFycmF5PElUYWJsZUhlYWRlckNvbmZpZz4sIEFycmF5PElUYWJsZUhlYWRlckNvbmZpZz4gfCB1bmRlZmluZWQ+KFtdLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBbXSB9KTtcbiAgcmVhZG9ubHkgaGVhZGVyUmlnaHQgPSBpbnB1dDxBcnJheTxJVGFibGVIZWFkZXJDb25maWc+LCBBcnJheTxJVGFibGVIZWFkZXJDb25maWc+IHwgdW5kZWZpbmVkPihbXSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gW10gfSk7XG4gIHJlYWRvbmx5IGNvbmZpZ1RlbXBsYXRlSXRlbUNvbGxhcHNlRXhwYW5kID0gaW5wdXQ8SUNvbmZpZ1RlbXBsYXRlSXRlbUNvbGxhcHNlRXhwYW5kPigpO1xuICByZWFkb25seSBzaG93Rm9vdGVyID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaWdub3JlQm9yZGVyRm9vdGVyID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgY3VzdG9tUG9zaXRpb25Gb290ZXIgPSBpbnB1dDwndG9wJyB8ICdib3R0b20nLCAndG9wJyB8ICdib3R0b20nIHwgdW5kZWZpbmVkPignYm90dG9tJywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gJ2JvdHRvbScgfSk7XG4gIHJlYWRvbmx5IGZvb3RlckxlZnQgPSBpbnB1dDxBcnJheTxJVGFibGVGb290ZXJDb25maWc+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBmb290ZXJSaWdodCA9IGlucHV0PEFycmF5PElUYWJsZUZvb3RlckNvbmZpZz4gfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGVDaGVja2JveCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgZW5hYmxlVW5lcXVhbENoaWxkcmVuU2l6ZXMgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGJ1ZmZlckFtb3VudCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPig1LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/ICh2YWwgPiAyNSA/IDI1IDogdmFsKSA6IDUgfSlcbiAgcmVhZG9ubHkgdG90YWxJdGVtID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBpc0Rhc2hCb3JkZXIgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBjbGFzc0hlYWRlckNvbnRhaW5lckluY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGNsYXNzSGVhZGVyTGVmdEluY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGNsYXNzQm9keUluY2x1ZGUgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsID8/ICcnIH0pO1xuICByZWFkb25seSBjbGFzc0Zvb3RlckluY2x1ZGUgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsID8/ICcnIH0pO1xuICByZWFkb25seSBjbGFzc1RhYmxlQ29udGFpbmVySW5jbHVkZSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gJycgfSk7XG4gIHJlYWRvbmx5IGNsYXNzQmFySW5jbHVkZSA9IGlucHV0PHN0cmluZz4oJ2p1c3RpZnktYmV0d2VlbiBtYi1bMTZweF0nKTtcblxuICByZWFkb25seSBmaWVsZEtleSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaWQnLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCB8fCAnaWQnIH0pOyAvLyB0w6puIGZpZWxkIMSR4buLbmggZGFuaCBpdGVtIGPhu6dhIGxpc3REYXRhc1xuICByZWFkb25seSBkZWZhdWx0S2V5c1NlbGVjdGVkID0gaW5wdXQ8QXJyYXk8YW55Pj4oKTtcbiAgcmVhZG9ubHkgbGFiZWxCYXJOb1NlbGVjdEl0ZW0gPSBpbnB1dDxzdHJpbmc+KGBpMThuX3RvdGFsX3F1YW50aXR5YCk7IC8vIHPhu60gZOG7pW5nIMSR4buDIGhpw6puIHRo4buLIGtoaSB0w61jaCBjaOG7jW4gaXRlbVxuICByZWFkb25seSBsYWJlbEJhckJ1dHRvbnMgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ2kxOG5fbnVtYmVyX2l0ZW1fc2VsZWN0ZWQnLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCB8fCAnaTE4bl9udW1iZXJfaXRlbV9zZWxlY3RlZCcgfSk7IC8vIHPhu60gZOG7pW5nIMSR4buDIGhpw6puIHRo4buLIGtoaSB0w61jaCBjaOG7jW4gaXRlbVxuICByZWFkb25seSBjbGFzc0xhYmVsQmFyQnV0dG9ucyA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gJycgfSk7IC8vIHPhu60gZOG7pW5nIMSR4buDIGhpw6puIHRo4buLIGtoaSB0w61jaCBjaOG7jW4gaXRlbVxuICByZWFkb25seSBiYXJCdXR0b25zID0gaW5wdXQ8QXJyYXk8SUJ1dHRvbj4+KCk7XG4gIHJlYWRvbmx5IHNvcnRMb2NhbCA9IGlucHV0PGJvb2xlYW4+KCk7IC8vIHRyxrDhu51uZyBo4bujcCBu4bq/dSBzb3J0TG9jYWwgbsOgeSBraMO0bmcgxJHDoXAg4bupbmcgxJHGsOG7o2MgbmdoaeG7h3AgduG7pSB0aMOsIG3hu5tpIGPDom4gbmjhuq9jIHPhu60gZOG7pW5nIGZpbHRlckxvY2FsXG4gIHJlYWRvbmx5IGZpbHRlck9yU29ydExvY2FsID0gaW5wdXQ8VFlQRV9UQUJMRV9GSUxURVI+KCk7XG4gIHJlYWRvbmx5IGh0dHBSZXF1ZXN0RGF0YSA9IGlucHV0PElIdHRwUmVxdWVzdENvbmZpZz4oKTtcbiAgcmVhZG9ubHkgaHR0cFJlcXVlc3REYXRhRm9vdGVyID0gaW5wdXQ8SUh0dHBSZXF1ZXN0Q29uZmlnPigpO1xuICByZWFkb25seSBuZXdEYXRhID0gaW5wdXQ8VFlQRV9ORVdfREFUQV9UQUJMRT4oKTtcbiAgcmVhZG9ubHkgZmlsdGVyID0gaW5wdXQ8VFlQRV9EQVRBX0ZJTFRFUl9UQUJMRSwgVFlQRV9EQVRBX0ZJTFRFUl9UQUJMRSB8IHVuZGVmaW5lZD4oeyBmaWx0ZXJEYXRhOiB7fSB9LCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyB7IGZpbHRlckRhdGE6IHt9IH0gfSk7XG4gIHJlYWRvbmx5IGlnbm9yZUJhciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNsYXNzTGFiZWxCYXJOb1NlbGVjdEl0ZW0gPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZUNsYXNzQmdIZWFkZXIgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBub0RhdGFDb25maWcgPSBpbnB1dDxJVGFibGVOb0RhdGFDb25maWc+KHsgdGV4dE5vRGF0YTogJ2kxOG5fbm9fZGF0YV95ZXQnLCB0ZXh0U2VhcmNoTm9EYXRhOiAnaTE4bl9ub19yZXN1bHQnIH0pO1xuICByZWFkb25seSBzaG93U2Nyb2xsVGFibGVQaW5uZWRJZk5vRGF0YSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZUJvcmRlckl0ZW1MYXN0ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaXNIaWRkZW5IZWFkZXJXaGVuTm9kYXRhID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbWF4SXRlbVNlbGVjdGVkID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDEwMCwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gMTAwIH0pO1xuICByZWFkb25seSBjb25maWdTZWxlY3RNb3JlSXRlbSA9IGlucHV0PElDb25maWdTZWxlY3RNb3JlSXRlbT4oKTtcbiAgcmVhZG9ubHkgb25seVNob3dOb1Jlc3VsdCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZUJvcmRlckl0ZW0gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBhY3Rpdml0eUxvYWREYXRhID0gaW5wdXQ8J3Njcm9sbC1pbmZpbml0eScgfCAnY2xpY2stcGFnaW5hdGlvbicsICdzY3JvbGwtaW5maW5pdHknIHwgJ2NsaWNrLXBhZ2luYXRpb24nIHwgdW5kZWZpbmVkPignc2Nyb2xsLWluZmluaXR5JywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gJ3Njcm9sbC1pbmZpbml0eScgfSk7XG4gIHJlYWRvbmx5IHBhZ2luYXRpb25TZXR0aW5nID0gaW5wdXQ8e1xuICAgIHBvc2l0aW9uPzogJ3RvcCcgfCAnYm90dG9tJztcbiAgICBjbGFzc0luY2x1ZGVDb250YWluZXI/OiBzdHJpbmc7XG4gICAgY2xhc3NJbmNsdWRlSXRlbT86IHN0cmluZztcbiAgICBkaXNhYmxlPzogYm9vbGVhbjtcbiAgICBudW1iZXJQYWdlRGlzcGFseT86IG51bWJlcjtcbiAgICBzaG93VG90YWxQYWdlPzogYm9vbGVhbjtcbiAgICBzaG93SW5wdXRHb3RvUGFnZT86IGJvb2xlYW47XG4gICAgbW9kZURpc3BsYXlUb3RhbFBhZ2VBbmRHb3RvUGFnZT86IFwidG9wXCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XG4gICAgY2xhc3NEaXNwbGF5VG90YWxQYWdlQW5kR290b1BhZ2U/OiBzdHJpbmc7XG4gIH0+KCk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlTm9EYXRhID0gaW5wdXQ8VFlQRV9URU1QTEFURV9SRUY+KCk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlTm9SZXN1bHQgPSBpbnB1dDxUWVBFX1RFTVBMQVRFX1JFRj4oKTtcblxuICAvKiogT1VUUFVUICovXG5cbiAgcmVhZG9ubHkgb3V0TG9hZE1vcmUgPSBvdXRwdXQ8SUxvYWRNb3JlRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFNjcm9sbElzR29uZSA9IG91dHB1dDxJTG9hZE1vcmVFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0TG9hZGluZyA9IG91dHB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBvdXRDbGlja0J1dHRvbkFjdGlvbiA9IG91dHB1dDxJVGFiZWxCdXR0b25BY3Rpb25FdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U29ydCA9IG91dHB1dDxJU29ydEV2ZW50PigpO1xuICByZWFkb25seSBvdXRDbGlja0JhckJ1dHRvbiA9IG91dHB1dDxJQnV0dG9uQmFyRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dEhvdmVyQnV0dG9uQWN0aW9uID0gb3V0cHV0PElIb3ZlckJ1dHRvbkFjdGlvbkV2ZW50PigpO1xuICByZWFkb25seSBvdXRLZXlzU2VsZWN0ZWQgPSBvdXRwdXQ8eyBrZXlzOiBBcnJheTxhbnk+IH0+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SVRhYmxlRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dExvYWREYXRhQ29tcGxldGUgPSBvdXRwdXQ8V3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4+PigpO1xuICByZWFkb25seSBvdXRUb3RhbEl0ZW0gPSBvdXRwdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBvdXRMb2FkRGF0YUVycm9yID0gb3V0cHV0PElIdHRwUmVzcG9uc2VFcnJvcj4oKTtcblxuICAvKipWSUVXIENISUxEICovXG4gIHByb3RlY3RlZCBoZWFkZXJFbGVtZW50UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdoZWFkZXJFbGVtZW50UmVmJyk7XG4gIHByb3RlY3RlZCBmb290ZXJFbGVtZW50UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdmb290ZXJFbGVtZW50UmVmJyk7XG4gIHByb3RlY3RlZCBmb290ZXJMZWZ0RWxlbWVudFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignZm9vdGVyTGVmdEVsZW1lbnRSZWYnKTtcbiAgcHJpdmF0ZSBib2R5RWxlbWVudFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignYm9keUVsZW1lbnRSZWYnKTtcbiAgcHJpdmF0ZSBib2R5Q29tcG9uZW50UmVmID0gdmlld0NoaWxkPFZpcnR1YWxTY3JvbGxlckNvbXBvbmVudD4oJ2JvZHlDb21wb25lbnRSZWYnKTs7XG5cbiAgLyoqSU5KRUNUICovXG4gIHByaXZhdGUgaHR0cFJlcXVlc3RTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUh0dHBSZXF1ZXN0U2VydmljZSk7XG4gIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKVxuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmRlZmF1bHRLZXlzU2VsZWN0ZWQoKT8ubGVuZ3RoKSB7XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLmtleXNTZWxlY3RlZC51cGRhdGUoa2V5cyA9PiAoWy4uLmtleXMsIC4uLih0aGlzLmRlZmF1bHRLZXlzU2VsZWN0ZWQoKSB8fCBbXSldKSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zaG93Rm9vdGVyKCkpIHtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHRoaXMuY2FsbEFwaUJ5U2VydmljZUZvb3RlcigpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5uZXdEYXRhKCk/LmRhdGEoKS5sZW5ndGgpIHtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHRoaXMuYWRkSXRlbXModGhpcy5uZXdEYXRhKCk/LmRhdGEgYXMgYW55LCAhdGhpcy5uZXdEYXRhKCk/LmFkZFRvTGFzdExpc3QpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZmlsdGVyKCkuZmlsdGVyRGF0YSB8fCB0aGlzLmZpbHRlcigpLmlnbm9yZUNhbGxBcGlBdXRvKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMua2V5U2VhcmNoLnNldChnZXQ8YW55Pih0aGlzLmZpbHRlcigpLmZpbHRlckRhdGEsICdrZXlTZWFyY2gnLCAnJykpO1xuICAgICAgICB0aGlzLnN0b3JlUGFyYW1zQ2FsbEFwaS5zZXQoY2xvbmVEZWVwKHRoaXMuZmlsdGVyKCkuZmlsdGVyRGF0YSkpO1xuICAgICAgICBpZiAodGhpcy5maWx0ZXIoKT8uZmlsdGVyRGF0YSAmJiAhdGhpcy5maWx0ZXIoKS5maWx0ZXJEYXRhWydpbnN0YW5jZVNvcnQnXSAmJiB0aGlzLmluc3RhbmNlU29ydCgpKSB7XG4gICAgICAgICAgdGhpcy5zdG9yZVBhcmFtc0NhbGxBcGkudXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgaW5zdGFuY2VTb3J0OiB0aGlzLmluc3RhbmNlU29ydCgpIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWx0ZXJPclNvcnRMb2NhbCgpICYmIHRoaXMuc3RvcmVzKCkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5pdGVtcy5zZXQodGhpcy5maWx0ZXJPclNvcnRMb2NhbCgpPy4oc2lnbmFsKFsuLi50aGlzLnN0b3JlcygpXSksIHsgLi4uKHRoaXMuZmlsdGVyKCkuZmlsdGVyRGF0YSB8fCB7fSksIGluc3RhbmNlU29ydDogdGhpcy5pbnN0YW5jZVNvcnQoKSB9KSB8fCBbXSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuXG4gICAgICAgIHRoaXMucmVzZXRTY3JvbGwoKTtcbiAgICAgICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHtcbiAgICAgIHJlc2V0OiB0aGlzLnJlc2V0LmJpbmQodGhpcyksXG4gICAgICBjYWxsQXBpQnlTZXJ2aWNlOiB0aGlzLmNhbGxBcGlCeVNlcnZpY2UuYmluZCh0aGlzKSxcbiAgICAgIHJlc2V0U2Nyb2xsOiB0aGlzLnJlc2V0U2Nyb2xsLmJpbmQodGhpcyksXG4gICAgICBhZGRJdGVtczogdGhpcy5hZGRJdGVtcy5iaW5kKHRoaXMpLFxuICAgICAgcmVtb3ZlSXRlbXM6IHRoaXMucmVtb3ZlSXRlbXMuYmluZCh0aGlzKSxcbiAgICAgIGdldENvdW50OiB0aGlzLmdldENvdW50LmJpbmQodGhpcyksXG4gICAgICBnZXRTY3JvbGxDb250YWluZXI6IHRoaXMuZ2V0U2Nyb2xsQ29udGFpbmVyLmJpbmQodGhpcyksXG4gICAgICBoaWRlVG9vbEJhckJvdHRvbTogKCkgPT4ge1xuICAgICAgICByZXR1cm47XG4gICAgICB9LFxuICAgICAgcmVzZXRLZXlTZWxlY3RlZDogKCkgPT4gdGhpcy5rZXlzU2VsZWN0ZWQuc2V0KFtdKSxcbiAgICAgIGRldGVjdENoYW5nZXM6ICgpID0+IHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICAgIH0pO1xuXG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SW5kZXhSb3cgPSAoZGF0YTogeyB2YWx1ZTogVFlQRV9JVEVNX0RBVEFfVEFCTEUgfSkgPT4ge1xuICAgIHJldHVybiBvZih0aGlzLml0ZW1zKCkuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtID09PSBkYXRhLnZhbHVlKSArIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTY3JvbGxDb250YWluZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuYm9keUNvbXBvbmVudFJlZigpIGFzIFZpcnR1YWxTY3JvbGxlckNvbXBvbmVudDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2FsbEFwaUJ5U2VydmljZShmaXJzdENhbGw6IGJvb2xlYW4sIHJlc2V0QWZ0ZXJDYWxsQXBpPzogYm9vbGVhbikge1xuICAgIHRyeSB7XG4gICAgICBpZiAoZmlyc3RDYWxsKSB7XG4gICAgICAgIHRoaXMubG9hZGVkTGFzdEl0ZW0uc2V0KGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5odHRwUmVxdWVzdERhdGEoKSB8fCB0aGlzLmxvYWRpbmcoKSB8fCB0aGlzLmxvYWRlZExhc3RJdGVtKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgICAgIHRoaXMucmVzZXRJbmRleEhvdmVyKCk7XG4gICAgICBjb25zdCB7IGFyZ3VtZW50c1ZhbHVlLCBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSB9ID0gdGhpcy5odHRwUmVxdWVzdERhdGEoKSBhcyBJSHR0cFJlcXVlc3RDb25maWc7XG5cbiAgICAgIGlmIChndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZSAmJiAhZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUuc29ydE9yZGVyQnkgJiYgdGhpcy5pbnN0YW5jZVNvcnQoKSkge1xuICAgICAgICBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZS5zb3J0T3JkZXJCeSA9IHtcbiAgICAgICAgICBmaWVsZEdldFZhbHVlOiAnc3RvcmVQYXJhbXNDYWxsQXBpLmluc3RhbmNlU29ydC5maWVsZFNvcnQnLFxuICAgICAgICAgIGZpZWxkVXBkYXRlOiAnWzBdJyxcbiAgICAgICAgICBzdWJGaWVsZFVwZGF0ZTogJ29yZGVyX2J5J1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUgJiYgIWd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlLnNvcnRPcmRlclR5cGUgJiYgdGhpcy5pbnN0YW5jZVNvcnQoKSkge1xuICAgICAgICBndWlkZUF1dG9VcGRhdGVBcmd1bWVudHNWYWx1ZS5zb3J0T3JkZXJUeXBlID0ge1xuICAgICAgICAgIGZpZWxkR2V0VmFsdWU6ICdzdG9yZVBhcmFtc0NhbGxBcGkuaW5zdGFuY2VTb3J0Lm1vZGUnLFxuICAgICAgICAgIGZpZWxkVXBkYXRlOiAnWzBdJyxcbiAgICAgICAgICBzdWJGaWVsZFVwZGF0ZTogJ29yZGVyX3R5cGUnXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoZmlyc3RDYWxsKSB7XG4gICAgICAgIGlmICghcmVzZXRBZnRlckNhbGxBcGkpIHtcbiAgICAgICAgICB0aGlzLmhhc1Njcm9sbC5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuc3RvcmVzLnNldChbXSk7XG4gICAgICAgICAgdGhpcy5pdGVtcy5zZXQoW10pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZGVkTGFzdEl0ZW0uc2V0KHRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUFyZ3VtZW50cyhhcmd1bWVudHNWYWx1ZSwgeyAuLi50aGlzLmZha2VSZXNwb25zZUFwaSgpLCBzdG9yZVBhcmFtc0NhbGxBcGk6IHRoaXMuc3RvcmVQYXJhbXNDYWxsQXBpKCkgfSwgdGhpcy5wYWdpbmdTdG9yZSgpIHx8IHt9LCB0aGlzLmtleVNlYXJjaCgpLCB0cnVlLCB0aGlzLmxvYWRlZExhc3RJdGVtKCksIGd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlKSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS5jYWxsQXBpKHRoaXMuaHR0cFJlcXVlc3REYXRhKCkgYXMgSUh0dHBSZXF1ZXN0Q29uZmlnKTtcblxuICAgICAgaWYgKGZpcnN0Q2FsbCAmJiByZXNldEFmdGVyQ2FsbEFwaSkge1xuICAgICAgICB0aGlzLmhhc1Njcm9sbC5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLnN0b3Jlcy5zZXQoW10pO1xuICAgICAgICB0aGlzLml0ZW1zLnNldChbXSk7XG4gICAgICB9XG4gICAgICB0aGlzLnBhZ2luZ1N0b3JlLnNldChyZXN1bHQucGFnaW5nKTtcbiAgICAgIHRoaXMudG90YWxJdGVtSW5CYWNrZW5kLnNldChyZXN1bHQucGFnaW5nPy50b3RhbF9pdGVtcyB8fCAwKTtcbiAgICAgIHRoaXMub3V0VG90YWxJdGVtLmVtaXQodGhpcy50b3RhbEl0ZW1JbkJhY2tlbmQoKSk7XG4gICAgICBpZiAoIXRoaXMucGFnaW5nU3RvcmUoKSkge1xuICAgICAgICB0aGlzLmxvYWRlZExhc3RJdGVtLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9hZGVkTGFzdEl0ZW0uc2V0KHRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUFyZ3VtZW50cyhhcmd1bWVudHNWYWx1ZSwgeyAuLi5yZXN1bHQsIHN0b3JlUGFyYW1zQ2FsbEFwaTogdGhpcy5zdG9yZVBhcmFtc0NhbGxBcGkoKSB9LCB0aGlzLnBhZ2luZ1N0b3JlKCkgfHwge30sIHRoaXMua2V5U2VhcmNoKCksIHRydWUsIHRoaXMubG9hZGVkTGFzdEl0ZW0oKSwgZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUpKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRkSXRlbXMoY29udmVydE9iamVjdFRvU2lnbmFsKHJlc3VsdC5kYXRhIHx8IFtdKSwgZmFsc2UsIHRydWUpO1xuICAgICAgdGhpcy5vdXRMb2FkRGF0YUNvbXBsZXRlLmVtaXQodGhpcy5zdG9yZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICB0aGlzLm91dExvYWREYXRhRXJyb3IuZW1pdChlcnJvciBhcyBJSHR0cFJlc3BvbnNlRXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZmFrZVJlc3BvbnNlQXBpKCk6IFRZUEVfT0JKRUNUIHtcbiAgICB0aGlzLmxvYWRlZExhc3RJdGVtLnNldChmYWxzZSk7XG4gICAgaWYgKHRoaXMuYWN0aXZpdHlMb2FkRGF0YSgpID09PSAnc2Nyb2xsLWluZmluaXR5Jykge1xuICAgICAgdGhpcy5wYWdpbmdTdG9yZS5zZXQoe30pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS5mYWtlUmVzcG9uc2VQYWdpbmdBcGkoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2FsbEFwaUJ5U2VydmljZUZvb3RlcigpIHtcbiAgICBpZiAoIXRoaXMuaHR0cFJlcXVlc3REYXRhRm9vdGVyKCkgfHwgIXRoaXMuc2hvd0Zvb3RlcigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgYXJndW1lbnRzVmFsdWUsIGd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlIH0gPSB0aGlzLmh0dHBSZXF1ZXN0RGF0YUZvb3RlcigpIGFzIElIdHRwUmVxdWVzdENvbmZpZztcblxuICAgIHRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUFyZ3VtZW50cyhhcmd1bWVudHNWYWx1ZSwgeyBzdG9yZVBhcmFtc0NhbGxBcGk6IHRoaXMuc3RvcmVQYXJhbXNDYWxsQXBpKCkgfSwgdGhpcy5wYWdpbmdTdG9yZSgpIHx8IHt9LCB0aGlzLmtleVNlYXJjaCgpLCB0cnVlLCBmYWxzZSwgZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLmNhbGxBcGkodGhpcy5odHRwUmVxdWVzdERhdGFGb290ZXIoKSBhcyBJSHR0cFJlcXVlc3RDb25maWcpO1xuXG4gICAgdGhpcy5pdGVtRm9vdGVyLnNldChjb252ZXJ0T2JqZWN0VG9TaWduYWwocmVzdWx0LmRhdGEpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkSXRlbXMoaXRlbXM6IFRZUEVfREFUQV9UQUJMRSwgYWRkRmlyc3Q6IGJvb2xlYW4sIGlnbm9yZUhpZ2h0TGlnaHQ/OiBib29sZWFuLCBpZ25vcmVSZUNhbGxGb290ZXI/OiBib29sZWFuLCBhdXRvQ291bnROZXdJdGVtPzogYm9vbGVhbikge1xuICAgIGlmICghaXRlbXMoKSB8fCAhaXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXRlbXNBZGQ6IEFycmF5PFdyaXRhYmxlU2lnbmFsPFRZUEVfT0JKRUNUPj4gPSBbXTtcblxuICAgIGl0ZW1zKCkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmICghdGhpcy5jaGVja0V4aXN0SXRlbShpdGVtKSkge1xuICAgICAgICBpdGVtc0FkZC5wdXNoKGl0ZW0pO1xuICAgICAgICBpZiAoIWlnbm9yZUhpZ2h0TGlnaHQpIHtcbiAgICAgICAgICB0aGlzLmhhc0l0ZW1IaWdodExpZ2h0LnNldCh0cnVlKTtcbiAgICAgICAgICBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIHNwZWNpZmljSGlnaHRMaWdodDogdHJ1ZSB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFkZEZpcnN0KSB7XG4gICAgICAgICAgdGhpcy5pdGVtcy51cGRhdGUoZGF0YSA9PiBbaXRlbSwgLi4uZGF0YV0pO1xuICAgICAgICAgIHRoaXMuc3RvcmVzLnVwZGF0ZShkYXRhID0+IFtpdGVtLCAuLi5kYXRhXSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pdGVtcy51cGRhdGUoZGF0YSA9PiBbLi4uZGF0YSwgaXRlbV0pO1xuICAgICAgICB0aGlzLnN0b3Jlcy51cGRhdGUoZGF0YSA9PiBbLi4uZGF0YSwgaXRlbV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChhdXRvQ291bnROZXdJdGVtICYmIGl0ZW1zQWRkLmxlbmd0aCkge1xuICAgICAgdGhpcy50b3RhbEl0ZW1JbkJhY2tlbmQudXBkYXRlKHZhbHVlID0+IHZhbHVlICsgaXRlbXNBZGQubGVuZ3RoKTtcbiAgICB9XG4gICAgaWYgKCFpZ25vcmVIaWdodExpZ2h0KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaXRlbXNBZGQuZm9yRWFjaChpdGVtID0+IGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNIaWdodExpZ2h0OiBmYWxzZSB9KSkpO1xuICAgICAgICB0aGlzLmhhc0l0ZW1IaWdodExpZ2h0LnNldChmYWxzZSk7XG4gICAgICB9LCB0aGlzLnRpbWVIaWdobGlnaE5ld0l0ZW0oKSk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuY2hlY2tTY3JvbGwoKTtcbiAgICBpZiAoIWlnbm9yZVJlQ2FsbEZvb3Rlcikge1xuICAgICAgYXdhaXQgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlRm9vdGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0V4aXN0SXRlbShpdGVtTmV3OiBXcml0YWJsZVNpZ25hbDxUWVBFX09CSkVDVD4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcygpLmZpbmQoaXRlbSA9PiBgJHtpdGVtKClbdGhpcy5maWVsZEtleSgpXX1gID09PSBgJHtpdGVtTmV3KClbdGhpcy5maWVsZEtleSgpXX1gKSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlSXRlbXMoa2V5czogQXJyYXk8dW5rbm93bj4sIGlnbm9yZVJlQ2FsbEZvb3Rlcj86IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJlc2V0SW5kZXhIb3ZlcigpO1xuICAgIGlmICghdGhpcy5pdGVtcygpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIHRoaXMuaXRlbXMudXBkYXRlKGl0ZW1zID0+IHtcbiAgICAgICAgbGV0IGlzVXBkYXRlID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbmV3SXRlbXMgPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgICAgaWYgKGAke2l0ZW0oKVt0aGlzLmZpZWxkS2V5KCldfWAgPT09IGAke2tleX1gKSB7XG4gICAgICAgICAgICBpc1VwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gaXNVcGRhdGUgPyBuZXdJdGVtcyA6IGl0ZW1zO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc3RvcmVzLnVwZGF0ZShpdGVtcyA9PiB7XG4gICAgICAgIGxldCBpc1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgIGlmIChgJHtpdGVtKClbdGhpcy5maWVsZEtleSgpXX1gID09PSBgJHtrZXl9YCkge1xuICAgICAgICAgICAgaXNVcGRhdGUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGlzVXBkYXRlID8gbmV3SXRlbXMgOiBpdGVtcztcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMua2V5c1NlbGVjdGVkKCkgfHwgIXRoaXMua2V5c1NlbGVjdGVkKCkubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMua2V5c1NlbGVjdGVkLnVwZGF0ZShrZXlzID0+IGtleXMuZmlsdGVyKGtleVNlbGVjdGVkID0+IGtleVNlbGVjdGVkICE9PSBrZXkpKTtcbiAgICB9KTtcbiAgICB0aGlzLnRvdGFsSXRlbUluQmFja2VuZC51cGRhdGUodmFsdWUgPT4gdmFsdWUgLSBrZXlzLmxlbmd0aCk7XG4gICAgYXdhaXQgdGhpcy5jaGVja1Njcm9sbCgpO1xuICAgIGlmICghaWdub3JlUmVDYWxsRm9vdGVyKSB7XG4gICAgICBhd2FpdCB0aGlzLmNhbGxBcGlCeVNlcnZpY2VGb290ZXIoKTtcbiAgICB9XG4gICAgdGhpcy5vdXRLZXlzU2VsZWN0ZWQuZW1pdCh7IGtleXM6IHRoaXMua2V5c1NlbGVjdGVkKCkgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvdW50KCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuaHR0cFJlcXVlc3REYXRhKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luZ1N0b3JlKCk/LnRvdGFsX2l0ZW1zIHx8IHRoaXMuaXRlbXMoKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaXRlbXMoKS5sZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIGxvYWRNb3JlU3VjY2VzcyhkYXRhOiBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxUWVBFX09CSkVDVD4+Pikge1xuICAgIHRoaXMuYWRkSXRlbXMoZGF0YSwgZmFsc2UpO1xuICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlQWxsQ2hlY2tlZCgpIHtcbiAgICB0aGlzLmtleXNTZWxlY3RlZC5zZXQoW10pO1xuICAgIHRoaXMub3V0S2V5c1NlbGVjdGVkLmVtaXQoeyBrZXlzOiB0aGlzLmtleXNTZWxlY3RlZCgpIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VDaGVja2VkQWxsSXRlbXMoZXZlbnQ6IElDaGVja2JveEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMua2V5c1NlbGVjdGVkLnNldCh0aGlzLml0ZW1zKCkuZmlsdGVyKGFzeW5jIChpdGVtKSA9PiAhKGF3YWl0IHRoaXMuY2hlY2tDYW5jZWxDb25kaXRpb25DaGVja2VkSXRlbShpdGVtKSkpLm1hcChpdGVtID0+IGAke2l0ZW0oKVt0aGlzLmZpZWxkS2V5KCldfWApKTtcbiAgICAgIHRoaXMub3V0S2V5c1NlbGVjdGVkLmVtaXQoeyBrZXlzOiB0aGlzLmtleXNTZWxlY3RlZCgpIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMua2V5c1NlbGVjdGVkLnNldChbXSk7XG4gICAgdGhpcy5vdXRLZXlzU2VsZWN0ZWQuZW1pdCh7IGtleXM6IHRoaXMua2V5c1NlbGVjdGVkKCkgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrQ2FuY2VsQ29uZGl0aW9uQ2hlY2tlZEl0ZW0oaXRlbTogV3JpdGFibGVTaWduYWw8VFlQRV9PQkpFQ1Q+KSB7XG4gICAgbGV0IGlzQ2FuY2VsQ2hlY2sgPSBmYWxzZTtcblxuICAgIGlmICghaXNDYW5jZWxDaGVjayAmJiB0aGlzLmhlYWRlckxlZnQoKS5sZW5ndGggJiYgdGhpcy5oZWFkZXJMZWZ0KClbMF0uY2hlY2tDb25kaXRpb25DaGVja0JveEhpZGRlbikge1xuICAgICAgaXNDYW5jZWxDaGVjayA9IGF3YWl0IGxhc3RWYWx1ZUZyb20oKHRoaXMuaGVhZGVyTGVmdCgpWzBdLmNoZWNrQ29uZGl0aW9uQ2hlY2tCb3hIaWRkZW4gYXMgYW55KSh7IGl0ZW06IGl0ZW0oKSB9KSkgfHwgZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFpc0NhbmNlbENoZWNrICYmIHRoaXMuaGVhZGVyUmlnaHQoKS5sZW5ndGggJiYgdGhpcy5oZWFkZXJSaWdodCgpWzBdLmNoZWNrQ29uZGl0aW9uQ2hlY2tCb3hIaWRkZW4pIHtcbiAgICAgIGlzQ2FuY2VsQ2hlY2sgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKCh0aGlzLmhlYWRlclJpZ2h0KClbMF0uY2hlY2tDb25kaXRpb25DaGVja0JveEhpZGRlbiBhcyBhbnkpKHsgaXRlbTogaXRlbSgpIH0pKSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNDYW5jZWxDaGVjaztcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlSXRlbUNoZWNrZWQoZXZlbnQ6IElDaGVja2JveEl0ZW0sIGl0ZW06IFRZUEVfT0JKRUNUKSB7XG4gICAgY29uc3Qga2V5ID0gaXRlbVt0aGlzLmZpZWxkS2V5KCldO1xuICAgIGNvbnN0IGtleXMgPSBuZXcgU2V0KHRoaXMua2V5c1NlbGVjdGVkKCkpO1xuXG4gICAga2V5cy5hZGQoa2V5KTtcbiAgICBpZiAoIWV2ZW50LmNoZWNrZWQpIHtcbiAgICAgIGtleXMuZGVsZXRlKGtleSk7XG4gICAgfVxuICAgIHRoaXMua2V5c1NlbGVjdGVkLnNldChBcnJheS5mcm9tKGtleXMpKTtcbiAgICB0aGlzLm91dEtleXNTZWxlY3RlZC5lbWl0KHsga2V5czogdGhpcy5rZXlzU2VsZWN0ZWQoKSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQ2hhbmdlU29ydChzb3J0OiBJU29ydCkge1xuICAgIGNvbnN0IHNjcm9sbExlZnQgPSB0aGlzLmhlYWRlckVsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0IHx8IDA7XG4gICAgaWYgKHRoaXMuaW5zdGFuY2VTb3J0ICYmIHRoaXMuaW5zdGFuY2VTb3J0KCk/LmZpZWxkU29ydCAhPT0gc29ydC5maWVsZFNvcnQpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2VTb3J0KCk/LnJlc2V0KCk7XG4gICAgfVxuICAgIHRoaXMuaW5zdGFuY2VTb3J0LnNldChzb3J0KTtcbiAgICBpZiAodGhpcy5zb3J0TG9jYWwoKSkge1xuICAgICAgdGhpcy5oYW5kbGVyU29ydExvY2FsKHNvcnQsIHNjcm9sbExlZnQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RvcmVQYXJhbXNDYWxsQXBpLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIGluc3RhbmNlU29ydDogdGhpcy5pbnN0YW5jZVNvcnQoKSB9KSk7XG4gICAgdGhpcy5vdXRTb3J0LmVtaXQoe1xuICAgICAgc29ydDogc29ydCxcbiAgICAgIG9uU29ydFN1Y2Nlc3M6ICgpID0+IHRoaXMub25Tb3J0U3VjY2VzcyhzY3JvbGxMZWZ0KVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgIGF3YWl0IHRoaXMuY2FsbEFwaUJ5U2VydmljZSh0cnVlKTtcbiAgICAgdGhpcy5vblNvcnRTdWNjZXNzKHNjcm9sbExlZnQpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJTb3J0TG9jYWwoc29ydDogSVNvcnQsIHNjcm9sbExlZnQ6bnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyT3JTb3J0TG9jYWwoKSAmJiB0aGlzLnN0b3JlcygpLmxlbmd0aCkge1xuICAgICAgdGhpcy5pdGVtcy5zZXQodGhpcy5maWx0ZXJPclNvcnRMb2NhbCgpPy4oc2lnbmFsKFsuLi50aGlzLnN0b3JlcygpXSksIHsgLi4udGhpcy5zdG9yZVBhcmFtc0NhbGxBcGkoKSwgaW5zdGFuY2VTb3J0OiBzb3J0IH0pIHx8IFtdKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IGZpZWxkU29ydCwgbW9kZSB9ID0gc29ydDtcblxuICAgIHRoaXMuaXRlbXMudXBkYXRlKGl0ZW1zID0+IHtcbiAgICAgIGl0ZW1zLnNvcnQoKGl0ZW1BLCBpdGVtQikgPT4ge1xuICAgICAgICBsZXQgdmFsdWUxID0gbW9kZSA9PT0gJ2FzYycgPyBpdGVtQSgpW2ZpZWxkU29ydF0gOiBpdGVtQigpW2ZpZWxkU29ydF07XG4gICAgICAgIGxldCB2YWx1ZTIgPSBtb2RlID09PSAnYXNjJyA/IGl0ZW1CKClbZmllbGRTb3J0XSA6IGl0ZW1BKClbZmllbGRTb3J0XTtcblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlMSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlMiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YWx1ZTEgPSBkZWxldGVVbmljb2RlKHZhbHVlMSkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICB2YWx1ZTIgPSBkZWxldGVVbmljb2RlKHZhbHVlMikudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZTEgPT09IHZhbHVlMikge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlMSA+IHZhbHVlMiA/IDEgOiAtMTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gWy4uLml0ZW1zXTtcbiAgICB9KTtcbiAgICB0aGlzLm9uU29ydFN1Y2Nlc3Moc2Nyb2xsTGVmdCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uQ29udHJvbE1vcmVTZWxlY3RJdGVtKGZ1bmN0aW9uQ29udHJvbDogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLmZ1bmN0aW9uQ29udHJvbFNlbGVjdE1vcmVJdGVtID0gZnVuY3Rpb25Db250cm9sO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RlZE1vcmVJdGVtKGV2ZW50OiBJRW1pdFNlbGVjdEtleSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LmtleSB8fCAhdGhpcy5jb25maWdTZWxlY3RNb3JlSXRlbSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5mdW5jdGlvbkNvbnRyb2xTZWxlY3RNb3JlSXRlbT8ucmVzZXQoKTtcblxuICAgIGNvbnN0IHBlclBhZ2UgPSBOdW1iZXIoZXZlbnQua2V5KS52YWx1ZU9mKCk7XG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSBOdW1iZXIodGhpcy5zZXRQZXJQYWdlU2VsZWN0TW9yZUl0ZW0ocGVyUGFnZSkpLnZhbHVlT2YoKTtcbiAgICBjb25zdCBpc1BhZ2luZ051bWJlciA9IHRoaXMuY29uZmlnU2VsZWN0TW9yZUl0ZW0oKT8ucGFnaW5nTnVtYmVyO1xuXG4gICAgaWYgKGN1cnJlbnRQYWdlID4gcGVyUGFnZSB8fCB0aGlzLml0ZW1zLmxlbmd0aCA+PSBwZXJQYWdlKSB7XG4gICAgICBpZiAoIWlzUGFnaW5nTnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0UGVyUGFnZVNlbGVjdE1vcmVJdGVtKGN1cnJlbnRQYWdlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMua2V5c1NlbGVjdGVkLnNldCh0aGlzLml0ZW1zKCkuc2xpY2UoMCwgcGVyUGFnZSkubWFwKGl0ZW0gPT4gYCR7aXRlbSgpW3RoaXMuZmllbGRLZXkoKV19YCkpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKHRydWUsIHRydWUpO1xuICAgIGNvbnN0IHN1YiA9IHRoaXMub3V0TG9hZERhdGFDb21wbGV0ZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICBpZiAoIWlzUGFnaW5nTnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0UGVyUGFnZVNlbGVjdE1vcmVJdGVtKGN1cnJlbnRQYWdlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMua2V5c1NlbGVjdGVkLnNldCh0aGlzLml0ZW1zKCkuc2xpY2UoMCwgcGVyUGFnZSkubWFwKGl0ZW0gPT4gYCR7aXRlbSgpW3RoaXMuZmllbGRLZXkoKV19YCkpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vdXRMb2FkRGF0YUVycm9yLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnNldFBlclBhZ2VTZWxlY3RNb3JlSXRlbShjdXJyZW50UGFnZSk7XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRQZXJQYWdlU2VsZWN0TW9yZUl0ZW0ocGVyUGFnZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBhcmd1bWVudHNWYWx1ZSA9IHRoaXMuaHR0cFJlcXVlc3REYXRhKCk/LmFyZ3VtZW50c1ZhbHVlO1xuXG4gICAgaWYgKCFhcmd1bWVudHNWYWx1ZSB8fCAhdGhpcy5jb25maWdTZWxlY3RNb3JlSXRlbSgpKSB7XG4gICAgICByZXR1cm4gJy0xJztcbiAgICB9XG4gICAgY29uc3Qga2V5UGVyUGFnZSA9IHRoaXMuY29uZmlnU2VsZWN0TW9yZUl0ZW0oKT8ua2V5UGVyUGFnZSB8fCAncGVyX3BhZ2UnO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHNWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGFyZ3VtZW50ID0gYXJndW1lbnRzVmFsdWVbaV07XG5cbiAgICAgIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIEh0dHBQYXJhbXMgJiYgYXJndW1lbnQuaGFzKGtleVBlclBhZ2UpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQZXJQYWdlID0gZ2V0KGFyZ3VtZW50LCBrZXlQZXJQYWdlLCAnMjUnKTsgXG5cbiAgICAgICAgYXJndW1lbnQgPSBhcmd1bWVudC5zZXQoa2V5UGVyUGFnZSwgcGVyUGFnZSk7XG4gICAgICAgIHNldChhcmd1bWVudHNWYWx1ZSwgYCR7aX1gLCBhcmd1bWVudCk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQZXJQYWdlO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBPYmplY3QgJiYgT2JqZWN0LmtleXMoYXJndW1lbnQpLmluY2x1ZGVzKGtleVBlclBhZ2UpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQZXJQYWdlID0gZ2V0KGFyZ3VtZW50LCBrZXlQZXJQYWdlLCAnMjUnKTtcblxuICAgICAgICBzZXQoYXJndW1lbnQsIGtleVBlclBhZ2UsIHBlclBhZ2UpO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50UGVyUGFnZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJy0xJztcbiAgfVxuXG4gIHByaXZhdGUgb25Tb3J0U3VjY2VzcyhzY3JvbGxMZWZ0OiBudW1iZXIpIHtcbiAgICB0aGlzLnJlc2V0U2Nyb2xsKHNjcm9sbExlZnQsMCk7XG4gICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJCdXR0b25DbGljayh0eXBlOiAnYnV0dG9uJyB8ICdidXR0b24tZHJvcGRvd24nLCBidXR0b25Ecm9wZG93bkRhdGE6IGFueSwgYnV0dG9uOiBJQnV0dG9uKSB7IC8vIGJ1dHRvbk9yaWdpbiBjaOG7iSBz4butIGThu6VuZyBraGkgZMO5bmcgYnV0dG9uQWN0aW9ucyBjw7MgYnV0dG9uLWRyb3Bkb3duXG4gICAgaWYgKHR5cGUgPT09ICdidXR0b24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5vdXRDbGlja0J1dHRvbkFjdGlvbi5lbWl0KHsgaXRlbTogdGhpcy5pdGVtT2ZJbmRleEhvdmVyLCBidXR0b246IGJ1dHRvbiB9KTtcbiAgICB9XG4gICAgdGhpcy5vdXRDbGlja0J1dHRvbkFjdGlvbi5lbWl0KHsgaXRlbTogdGhpcy5pdGVtT2ZJbmRleEhvdmVyLCBidXR0b24sIGJ1dHRvbkRyb3Bkb3duRGF0YSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQmFyQnV0dG9uQ2xpY2soYnV0dG9uOiBJQnV0dG9uKSB7XG4gICAgY29uc3QgaXRlbXM6IEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+ID0gW107XG5cbiAgICB0aGlzLmtleXNTZWxlY3RlZCgpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zKCkuZmluZChpdGVtID0+IGAke2l0ZW0oKVt0aGlzLmZpZWxkS2V5KCldfWAgPT09IGAke2tleX1gKTtcblxuICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLm91dENsaWNrQmFyQnV0dG9uLmVtaXQoe1xuICAgICAgYnV0dG9uLFxuICAgICAgaXRlbXMsXG4gICAgICBrZXlzOiB0aGlzLmtleXNTZWxlY3RlZCgpLFxuICAgICAgaGlkZGVuQmFyQnV0dG9uczogKCkgPT4ge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckJ1dHRvbkRyb3Bkb3duRXZlbnQoZXZlbnROYW1lOiBUWVBFX1BPUE9WRVJfRVZFTlQpIHtcbiAgICB0aGlzLmhhc0FjdGlvbkJ1dHRvbkRyb3Bkb3duQ29udGVudC5zZXQodHJ1ZSk7XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ3JlbW92ZScgfHwgZXZlbnROYW1lID09PSAnbW91c2VsZWF2ZS1jb250ZW50Jykge1xuICAgICAgdGhpcy5oYXNBY3Rpb25CdXR0b25Ecm9wZG93bkNvbnRlbnQuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0SW5kZXhIb3ZlcihlOiBFdmVudCwgaXRlbTogV3JpdGFibGVTaWduYWw8VFlQRV9PQkpFQ1Q+KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIXRoaXMuaXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMucmVzZXRJbmRleEhvdmVyKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pdGVtT2ZJbmRleEhvdmVyID0gaXRlbTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldEluZGV4SG92ZXJXaGVuTW91c2VMZWF2ZShlPzogRXZlbnQpIHtcbiAgICBlPy5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjdXJyZW50SW5kZXhJdGVtSG92ZXIgPSB0aGlzLml0ZW1PZkluZGV4SG92ZXI7XG5cbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0TGVhdmVJdGVtKCkpO1xuICAgIHRoaXMudGltZW91dExlYXZlSXRlbS5zZXQoc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pdGVtT2ZJbmRleEhvdmVyICYmIHRoaXMuaXRlbU9mSW5kZXhIb3ZlciAhPT0gY3VycmVudEluZGV4SXRlbUhvdmVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzZXRJbmRleEhvdmVyKGUpO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldEluZGV4SG92ZXIoZT86IEV2ZW50KSB7XG4gICAgZT8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuaGFzQWN0aW9uQnV0dG9uRHJvcGRvd25Db250ZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pdGVtT2ZJbmRleEhvdmVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJNb3VzZUxlYXZlQ29udGFpbmVyKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMucmVzZXRJbmRleEhvdmVyKGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyTW91c2VFbnRlckhlYWRlcihldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLm1vdXNlRW50ZXJIZWFkZXIuc2V0KHRydWUpO1xuICAgIHRoaXMucmVzZXRJbmRleEhvdmVyKGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyTW91c2VMZWF2ZUhlYWRlcihldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLm1vdXNlRW50ZXJIZWFkZXIuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnJlc2V0SW5kZXhIb3ZlcihldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlck1vdXNlRW50ZXJGb290ZXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5yZXNldEluZGV4SG92ZXIoZXZlbnQpO1xuICAgIGlmICh0aGlzLmNsYXNzRm9vdGVySW5jbHVkZSgpKSB7XG4gICAgICB0aGlzLmZvb3RlckVsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSgnYmctWyNmOGY5ZmFdJyk7XG4gICAgICB0aGlzLmZvb3RlckxlZnRFbGVtZW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ2JnLVsjZjhmOWZhXScpO1xuICAgICAgdGhpcy5mb290ZXJFbGVtZW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc0Zvb3RlckluY2x1ZGUoKSk7XG4gICAgICB0aGlzLmZvb3RlckxlZnRFbGVtZW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc0Zvb3RlckluY2x1ZGUoKSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJNb3VzZUxlYXZlRm9vdGVyKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLmNsYXNzRm9vdGVySW5jbHVkZSgpKSB7XG4gICAgICB0aGlzLmZvb3RlckVsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmNsYXNzRm9vdGVySW5jbHVkZSgpKTtcbiAgICAgIHRoaXMuZm9vdGVyTGVmdEVsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmNsYXNzRm9vdGVySW5jbHVkZSgpKTtcbiAgICAgIHRoaXMuZm9vdGVyRWxlbWVudFJlZigpPy5uYXRpdmVFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdiZy1bI2Y4ZjlmYV0nKTtcbiAgICAgIHRoaXMuZm9vdGVyTGVmdEVsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnYmctWyNmOGY5ZmFdJyk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVyU2Nyb2xsSGVhZGVyKGU6IEV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIXRoaXMubW91c2VFbnRlckhlYWRlcigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgICh0aGlzLmJvZHlFbGVtZW50UmVmKCkgYXMgYW55KS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gICAgaWYgKHRoaXMuZm9vdGVyRWxlbWVudFJlZigpKSB7XG4gICAgICAodGhpcy5mb290ZXJFbGVtZW50UmVmKCkgYXMgYW55KS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gICAgfVxuICAgIHRoaXMucmVzZXRJbmRleEhvdmVyKGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTY3JvbGxCb2R5KGU6IEV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5tb3VzZUVudGVySGVhZGVyKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKHRoaXMuaGVhZGVyRWxlbWVudFJlZigpIGFzIGFueSkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxMZWZ0O1xuICAgIGlmICh0aGlzLmZvb3RlckVsZW1lbnRSZWYoKSkge1xuICAgICAgKHRoaXMuZm9vdGVyRWxlbWVudFJlZigpIGFzIGFueSkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxMZWZ0O1xuICAgIH1cbiAgICB0aGlzLnJlc2V0SW5kZXhIb3ZlcihlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2Nyb2xsQm90dG9tKGU6IEV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5sb2FkaW5nKCkgfHwgdGhpcy5hY3Rpdml0eUxvYWREYXRhKCkgIT09ICdzY3JvbGwtaW5maW5pdHknKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3V0TG9hZE1vcmUuZW1pdCh7IGxvYWRNb3JlU3VjY2VzczogdGhpcy5sb2FkTW9yZVN1Y2Nlc3MuYmluZCh0aGlzKSB9KTtcbiAgICB0aGlzLmNhbGxBcGlCeVNlcnZpY2UoZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VQYWdlKHBhZ2U6IG51bWJlcikge1xuICAgIHRoaXMucGFnaW5nU3RvcmUudXBkYXRlKGRhdGEgPT4gKHsgLi4uKGRhdGEgfHwge30pLCBwYWdlIH0pKTtcbiAgICB0aGlzLmNhbGxBcGlCeVNlcnZpY2UodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0U2Nyb2xsKHNjcm9sbFBvc2l0aW9uTGVmdD86IG51bWJlciwgc2Nyb2xsUG9zaXRpb25Ub3A/OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5oZWFkZXJFbGVtZW50UmVmKCkpIHtcbiAgICAgICh0aGlzLmhlYWRlckVsZW1lbnRSZWYoKSBhcyBhbnkpLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbFBvc2l0aW9uTGVmdCB8fCAwO1xuICAgIH1cbiAgICBpZiAodGhpcy5Cb2R5RWxlbWVudCkge1xuICAgICAgdGhpcy5Cb2R5RWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxQb3NpdGlvblRvcCB8fCAwO1xuICAgICAgdGhpcy5Cb2R5RWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsUG9zaXRpb25MZWZ0IHx8IDA7XG4gICAgfVxuICAgIGlmICh0aGlzLmZvb3RlckVsZW1lbnRSZWYoKSkge1xuICAgICAgKHRoaXMuZm9vdGVyRWxlbWVudFJlZigpIGFzIGFueSkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsUG9zaXRpb25MZWZ0IHx8IDA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldChjbGVhclNvcnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKGNsZWFyU29ydCkge1xuICAgICAgdGhpcy5pbnN0YW5jZVNvcnQoKT8ucmVzZXQoKTtcbiAgICAgIHRoaXMuaW5zdGFuY2VTb3J0LnNldCh1bmRlZmluZWQpO1xuICAgIH1cbiAgICB0aGlzLmhhc1Njcm9sbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgICB0aGlzLml0ZW1zLnNldChbXSk7XG4gICAgdGhpcy5zdG9yZXMuc2V0KFtdKTtcbiAgICB0aGlzLmZha2VSZXNwb25zZUFwaSgpO1xuICAgIHRoaXMucmVzZXRTY3JvbGwoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tTY3JvbGwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaGFzU2Nyb2xsID0gdGhpcy5oYXNTY3JvbGwoKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIHRpbWVyKDUwMCkucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuQm9keUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLmhhc1Njcm9sbC5zZXQodGhpcy5Cb2R5RWxlbWVudC5zY3JvbGxIZWlnaHQgPiB0aGlzLkJvZHlFbGVtZW50Lm9mZnNldEhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc1Njcm9sbCAmJiAhdGhpcy5oYXNTY3JvbGwoKSkge1xuICAgICAgICAgIHRoaXMub3V0U2Nyb2xsSXNHb25lLmVtaXQoe30pO1xuICAgICAgICAgIGlmICghdGhpcy5maWx0ZXJPclNvcnRMb2NhbCgpKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxBcGlCeVNlcnZpY2UodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBCb2R5RWxlbWVudCgpOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYm9keUVsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRMZWF2ZUl0ZW0oKSk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz0nZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsJz5cbiAgQGlmICghaWdub3JlQmFyKCkpIHtcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHJlbGF0aXZlIHotWzFdIGJvdHRvbS0wIGxlZnQtMCB3LWZ1bGwgYmctd2hpdGUgbGlicy11aS10YWJsZS1zaGFkb3ctYm90dG9tIHt7IGNsYXNzQmFySW5jbHVkZSgpIH19XCJcbiAgICAgIFtjbGFzcy5weC1bMTZweF1dPVwia2V5c1NlbGVjdGVkKCkubGVuZ3RoIHx8IGxhYmVsQmFyTm9TZWxlY3RJdGVtKClcIlxuICAgICAgW2NsYXNzLnB5LVs2cHhdXT1cImtleXNTZWxlY3RlZCgpLmxlbmd0aCB8fCBsYWJlbEJhck5vU2VsZWN0SXRlbSgpXCJcbiAgICAgIChtb3VzZWVudGVyKT1cInJlc2V0SW5kZXhIb3ZlcigkZXZlbnQpXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9J2Rpdi5saWJzLXVpLXRhYmxlLWJhci1sZWZ0Jz48L25nLWNvbnRlbnQ+XG4gICAgICBAaWYgKCFrZXlzU2VsZWN0ZWQoKS5sZW5ndGggJiYgbGFiZWxCYXJOb1NlbGVjdEl0ZW0oKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwie3sgY2xhc3NMYWJlbEJhck5vU2VsZWN0SXRlbSgpID8/ICdweC1bMTJweF0gcHktWzVweF0nIH19XCJcbiAgICAgICAgICBbaW5uZXJIdG1sXT0nbGFiZWxCYXJOb1NlbGVjdEl0ZW0oKSB8IHRyYW5zbGF0ZTp7dmFsdWU6dG90YWxJdGVtRGlzcGxheSgpfSc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChrZXlzU2VsZWN0ZWQoKS5sZW5ndGgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHBsLVsxMnB4XVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBoLWZ1bGwgbXQtWy0ycHhdXCI+XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWNoZWNrYm94LXNpbmdsZSBbY2hlY2tlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGRpc2FibGVDaGVja2JveCgpXCJcbiAgICAgICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyQ2hhbmdlQWxsQ2hlY2tlZCgpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg1bSB0ZXh0LVsjMDcxNjMxXSBtci1bOHB4XSB7eyBjbGFzc0xhYmVsQmFyQnV0dG9ucygpIH19XCI+XG4gICAgICAgICAgICB7eyBsYWJlbEJhckJ1dHRvbnMoKSB8IHRyYW5zbGF0ZTp7IHZhbHVlOmtleXNTZWxlY3RlZCgpLmxlbmd0aCB9IH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmIChjb25maWdTZWxlY3RNb3JlSXRlbSgpKSB7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3BvcG92ZXJDdXN0b21Db25maWddPVwie1xuICAgICAgICAgICAgICAgIHdpZHRoQnlQYXJlbnQ6ZmFsc2UsXG4gICAgICAgICAgICAgICAgaWdub3JlQXJyb3c6IHRydWUsXG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiAgMjA0OCxcbiAgICAgICAgICAgICAgICBjbGFzc0luY2x1ZGU6JyF3LVsxMjFweF0nLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgICBtb2RlOidzdGFydCcsXG4gICAgICAgICAgICAgICAgICBkaXN0YW5jZTowXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIFtsaXN0Q29uZmlnXT1cImxpc3RDb25maWdNb3JlSXRlbSgpXCJcbiAgICAgICAgICAgICAgW2xpc3RIaWRkZW5JbnB1dFNlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2xpc3RNYXhJdGVtU2hvd109XCI1XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCIhdy1bMTZweF0gaC1bMTZweF0gbXItWzhweF1cIlxuICAgICAgICAgICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZXJTZWxlY3RlZE1vcmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sTW9yZVNlbGVjdEl0ZW0oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFt0eXBlXT1cIididXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIXAtMCBtLTAnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInYmVmb3JlOiF0ZXh0LVsxNnB4XSBsaWJzLXVpLWljb24tbW92ZS1yaWdodCByb3RhdGUtOTAgbXItWzZweF0nXCJcbiAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJ7Y29uZmlnOntjb250ZW50OidpMThuX21vcmVfc2VsZWN0J319XCJcbiAgICAgICAgICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1kcm9wZG93bj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImgtWzE2cHhdIGxpYnMtdWktYm9yZGVyLWxlZnQtZ2VuZXJhbCBtbC1bMTZweF1cIj48L2Rpdj5cbiAgICAgICAgICBAaWYgKGJhckJ1dHRvbnMoKT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBAZm9yIChidXR0b24gb2YgYmFyQnV0dG9ucygpO3RyYWNrIGJ1dHRvbikge1xuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFt0eXBlXT1cImJ1dHRvbi50eXBlIHx8ICdidXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiYnV0dG9uLmNsYXNzSWNvbkxlZnQgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiYnV0dG9uLmNsYXNzSW5jbHVkZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIihidXR0b24ubGFiZWwgfHwgJyAnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJCYXJCdXR0b25DbGljayhidXR0b24pXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PSdkaXYubGlicy11aS10YWJsZS1iYXItcmlnaHQnPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDxkaXYgI3RhYmxlQ29udGFpbmVyRWxlbWVudFJlZlxuICAgIGNsYXNzPVwibGlicy11aS10YWJsZSBmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGwgcmVsYXRpdmUge3sgY2xhc3NUYWJsZUNvbnRhaW5lckluY2x1ZGUoKSB9fVwiXG4gICAgW2NsYXNzLnB4LVsxNnB4XV09JyFpZ25vcmVCYXIoKSdcbiAgICAobW91c2VsZWF2ZSk9XCJoYW5kbGVyTW91c2VMZWF2ZUNvbnRhaW5lcigkZXZlbnQpXCI+XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctZnVsbCBzaHJpbmstMFwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlckVsZW1lbnRSZWYub2Zmc2V0SGVpZ2h0XCI+XG4gICAgICA8ZGl2ICNoZWFkZXJFbGVtZW50UmVmXG4gICAgICAgIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlXG4gICAgICAgIFtvcHRpb25zXT1cIntzY3JvbGxiYXJXaWR0aDogMH1cIlxuICAgICAgICBbY2xhc3MubGlicy11aS1ib3JkZXItYm90dG9tLWRhc2hlZC1nZW5lcmFsXT1cIiFoYXNJdGVtSGlnaHRMaWdodCgpICYmIGlzRGFzaEJvcmRlcigpXCJcbiAgICAgICAgW2NsYXNzLmxpYnMtdWktYm9yZGVyLWJvdHRvbS1nZW5lcmFsXT1cIiFoYXNJdGVtSGlnaHRMaWdodCgpICYmICFpc0Rhc2hCb3JkZXIoKVwiXG4gICAgICAgIFtjbGFzcy4haGlkZGVuXT1cIiFpdGVtcygpLmxlbmd0aCAmJiBpc0hpZGRlbkhlYWRlcldoZW5Ob2RhdGEoKVwiXG4gICAgICAgIFtjbGFzc109XCJjbGFzc0hlYWRlckNvbnRhaW5lcigpXCJcbiAgICAgICAgKG91dFNjcm9sbCk9XCJoYW5kbGVyU2Nyb2xsSGVhZGVyKCRldmVudClcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJoYW5kbGVyTW91c2VFbnRlckhlYWRlcigkZXZlbnQpXCJcbiAgICAgICAgKG1vdXNlbGVhdmUpPVwiaGFuZGxlck1vdXNlTGVhdmVIZWFkZXIoJGV2ZW50KVwiPlxuICAgICAgICBAaWYgKGhlYWRlckxlZnQoKS5sZW5ndGgpIHtcbiAgICAgICAgICA8ZGl2IFtjbGFzc109XCJjbGFzc0hlYWRlckxlZnRDb250YWluZXIoKVwiPlxuICAgICAgICAgICAgQGZvciAoaGVhZGVyIG9mIGhlYWRlckxlZnQoKTt0cmFjayBoZWFkZXIpIHtcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlSGVhZGVyUmVmO2NvbnRleHQ6e2hlYWRlckl0ZW06aGVhZGVyLGlzSGVhZGVyTGVmdDp0cnVlfVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChoZWFkZXJSaWdodCgpLmxlbmd0aCkge1xuICAgICAgICAgIEBmb3IgKGhlYWRlciBvZiBoZWFkZXJSaWdodCgpO3RyYWNrIGhlYWRlcikge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlSGVhZGVyUmVmO2NvbnRleHQ6e2hlYWRlckl0ZW06aGVhZGVyLGlzSGVhZGVyTGVmdDpmYWxzZX1cIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgQGlmIChzaG93Rm9vdGVyKCkgJiYgaXRlbUZvb3RlcigpICYmIGN1c3RvbVBvc2l0aW9uRm9vdGVyKCkgPT09ICd0b3AnKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PSd0ZW1wbGF0ZUZvb3RlclJlZicgLz5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbCBvdmVyZmxvdy14LWhpZGRlbiBiZy13aGl0ZSB7eyBjbGFzc0JvZHlJbmNsdWRlKCkgfHwgJycgfX1cIj5cbiAgICAgIDxkaXYgI2JvZHlFbGVtZW50UmVmXG4gICAgICAgIGNsYXNzPVwiZmxleCBoLWZ1bGwgdy1mdWxsIHJlbGF0aXZlXCJcbiAgICAgICAgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVcbiAgICAgICAgKG91dFNjcm9sbCk9XCJoYW5kbGVyU2Nyb2xsQm9keSgkZXZlbnQpXCJcbiAgICAgICAgKG91dFNjcm9sbEJvdHRvbSk9XCJoYW5kbGVyU2Nyb2xsQm90dG9tKCRldmVudClcIj5cbiAgICAgICAgQGlmIChpdGVtcygpLmxlbmd0aCkge1xuICAgICAgICAgIDx2aXJ0dWFsLXNjcm9sbGVyICNib2R5Q29tcG9uZW50UmVmXG4gICAgICAgICAgICBbaXRlbXNdPVwiaXRlbXMoKVwiXG4gICAgICAgICAgICBbZW5hYmxlVW5lcXVhbENoaWxkcmVuU2l6ZXNdPVwiZW5hYmxlVW5lcXVhbENoaWxkcmVuU2l6ZXMoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImgtZnVsbFwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiaGVhZGVyRWxlbWVudFJlZi5zY3JvbGxXaWR0aCA+IChib2R5RWxlbWVudFJlZiA/IGJvZHlFbGVtZW50UmVmLnNjcm9sbFdpZHRoIDogMCkgPyBoZWFkZXJFbGVtZW50UmVmLnNjcm9sbFdpZHRoOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgW3BhcmVudFNjcm9sbF09XCJib2R5RWxlbWVudFJlZlwiXG4gICAgICAgICAgICBbYnVmZmVyQW1vdW50XT1cImJ1ZmZlckFtb3VudCgpXCI+XG4gICAgICAgICAgICBAZm9yIChkYXRhIG9mIGJvZHlDb21wb25lbnRSZWYudmlld1BvcnRJdGVtczt0cmFjayBkYXRhKCkpIHtcbiAgICAgICAgICAgICAgPGRpdiAjZWxlbWVudEhvdmVyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYmctWyNmM2ZjZmNdXT1cImRhdGEoKS5zcGVjaWZpY0hpZ2h0TGlnaHRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci10b3AtMXB4LTM2ZDNkM109XCJkYXRhKCkuc3BlY2lmaWNIaWdodExpZ2h0ICYmICRmaXJzdCAmJiAhaWdub3JlQm9yZGVySXRlbSgpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MubGlicy11aS1ib3JkZXItYm90dG9tLTFweC0zNmQzZDNdPVwiZGF0YSgpLnNwZWNpZmljSGlnaHRMaWdodCAmJiAhaWdub3JlQm9yZGVySXRlbSgpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIoZGF0YSgpLnNwZWNpZmljSGlnaHRMaWdodCB8fCAoJGxhc3QgJiYgaWdub3JlQm9yZGVySXRlbUxhc3QoKSkpID8gJ2xpYnMtdWktYm9yZGVyLXJhZGl1cy1ib3R0b20tbGVmdC00cHggbGlicy11aS1ib3JkZXItcmFkaXVzLWJvdHRvbS1yaWdodC00cHgnIDogaWdub3JlQm9yZGVySXRlbSgpID8gJycgOiBpc0Rhc2hCb3JkZXIoKSA/ICdsaWJzLXVpLWJvcmRlci1ib3R0b20tZGFzaGVkLWdlbmVyYWwnIDogJ2xpYnMtdWktYm9yZGVyLWJvdHRvbS1nZW5lcmFsJ1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImhlYWRlckVsZW1lbnRSZWYuc2Nyb2xsV2lkdGhcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5iZy1bI2Y4ZjlmYV1dPVwiaXRlbU9mSW5kZXhIb3ZlciA9PT0gZGF0YSAmJiAhZGF0YSgpLnNwZWNpZmljSGlnaHRMaWdodFwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic2V0SW5kZXhIb3ZlcigkZXZlbnQsZGF0YSlcIlxuICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cInJlc2V0SW5kZXhIb3ZlcldoZW5Nb3VzZUxlYXZlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICBAaWYgKGhlYWRlckxlZnQoKS5sZW5ndGggfHwgaGVhZGVyUmlnaHQoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGhlYWRlckxlZnQoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHN0aWNreSB0b3AtMCBsZWZ0LTAgei1bMV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYmctd2hpdGVdPVwiIWRhdGEoKS5zcGVjaWZpY0hpZ2h0TGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYmctWyNmM2ZjZmNdXT1cImRhdGEoKS5zcGVjaWZpY0hpZ2h0TGlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoaGVhZGVyIG9mIGhlYWRlckxlZnQoKTt0cmFjayBoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGZsZXggcHgtWzEycHhdIHB5LVs4cHhdIHt7IGhlYWRlci5pZ25vcmVCb3JkZXJSaWdodCA/ICcnOiAnbGlicy11aS1ib3JkZXItcmlnaHQtZ2VuZXJhbCcgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJnLVsjZjhmOWZhXV09XCJpdGVtT2ZJbmRleEhvdmVyID09PSBkYXRhICYmICFkYXRhKCkuc3BlY2lmaWNIaWdodExpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIihoZWFkZXJ8TGlic1VpVGFibGVDYWxjdWxhdG9yQ29sdW1uUGlwZTpoZWFkZXJFbGVtZW50UmVmLmNsaWVudFdpZHRoOmhlYWRlckxlZnQoKTpoZWFkZXJSaWdodCgpKSB8fCAoaGVhZGVyLmlzU2hvd0luZGV4T25Sb3cgPyB7d2lkdGg6JzUwcHgnLCdmbGV4LXNoaXJrJzonMCcscGFkZGluZzonOHB4J30gOiB7fSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaGVhZGVyLm5nQ2xhc3MgfHwgIHt9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVCb2R5UmVmO2NvbnRleHQ6e2hlYWRlcjpoZWFkZXIsZGF0YTpkYXRhfVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGhlYWRlclJpZ2h0KCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChoZWFkZXIgb2YgaGVhZGVyUmlnaHQoKTt0cmFjayBoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGZsZXggcHgtWzEycHhdIHB5LVs4cHhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCIoaGVhZGVyfExpYnNVaVRhYmxlQ2FsY3VsYXRvckNvbHVtblBpcGU6aGVhZGVyRWxlbWVudFJlZi5jbGllbnRXaWR0aDpoZWFkZXJMZWZ0KCk6aGVhZGVyUmlnaHQoKSkgfHwgKGhlYWRlci5pc1Nob3dJbmRleE9uUm93ID8ge3dpZHRoOic1MHB4JywnZmxleC1zaGlyayc6JzAnLHBhZGRpbmc6JzhweCd9IDoge30pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJoZWFkZXIubmdDbGFzcyB8fCB7fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZUJvZHlSZWY7Y29udGV4dDp7aGVhZGVyOmhlYWRlcixkYXRhOmRhdGF9XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChjb25maWdUZW1wbGF0ZUl0ZW1Db2xsYXBzZUV4cGFuZCgpICYmIGRhdGEoKS5zcGVjaWZpY0V4cGFuZCAmJiBkYXRhKClbY29uZmlnVGVtcGxhdGVJdGVtQ29sbGFwc2VFeHBhbmQoKT8uZmllbGRHZXREYXRhRXhwYW5kIHx8ICdzcGVjaWZpY0RhdGFFeHBhbmQnXSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cImNvbmZpZ1RlbXBsYXRlSXRlbUNvbGxhcHNlRXhwYW5kKCk/LmNzc1dyYXBwZXIgfHwgJ2ZsZXggdy1mdWxsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoZGF0YUV4cGFuZCBvZiBkYXRhKClbY29uZmlnVGVtcGxhdGVJdGVtQ29sbGFwc2VFeHBhbmQoKT8uZmllbGRHZXREYXRhRXhwYW5kIHx8ICdzcGVjaWZpY0RhdGFFeHBhbmQnXSgpO3RyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbmZpZ1RlbXBsYXRlSXRlbUNvbGxhcHNlRXhwYW5kKCk/LmNvbFRlbXBsYXRlQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy10YWJsZS10ZW1wbGF0ZXMgW2l0ZW1dPVwiZGF0YUV4cGFuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVDc3NXcmFwcGVyXT1cImNvbmZpZ1RlbXBsYXRlSXRlbUNvbGxhcHNlRXhwYW5kKCk/LnRlbXBsYXRlQ3NzV3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnc109XCJjb25maWdUZW1wbGF0ZUl0ZW1Db2xsYXBzZUV4cGFuZCgpPy5jb2xUZW1wbGF0ZUNvbmZpZ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVtcHR5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGgtWzEwMHB4XVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZU5vZGF0YVJlZlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdmlydHVhbC1zY3JvbGxlcj5cbiAgICAgICAgfSBAZWxzZSBpZiAoIWxvYWRpbmcoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGlja3kgbGVmdC0wIHRvcC0wIHotWzFdIGgtZnVsbCB3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZU5vZGF0YVJlZlwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmIChzaG93U2Nyb2xsVGFibGVQaW5uZWRJZk5vRGF0YSgpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgaC1bMXB4XSBiZy10cmFuc3BhcmVudCB0b3AtMCBsZWZ0LTAgei1bMV1cIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiaGVhZGVyRWxlbWVudFJlZi5zY3JvbGxXaWR0aFwiPjwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIEBpZiAoc2hvd0Zvb3RlcigpICYmIGl0ZW1Gb290ZXIoKSAmJiBjdXN0b21Qb3NpdGlvbkZvb3RlcigpID09PSAnYm90dG9tJykge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PSd0ZW1wbGF0ZUZvb3RlclJlZicgLz5cbiAgICAgIH1cblxuICAgICAgQGlmIChsb2FkaW5nKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIHctZnVsbCBoLWZ1bGwgei1bMl0gZmxleCBpdGVtcy1jZW50ZXIgY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXNwaW5uZXIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGFjdGl2aXR5TG9hZERhdGEoKSA9PT0gJ2NsaWNrLXBhZ2luYXRpb24nKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgbXQtWzEycHhdXCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcGFnaW5hdGlvblxuICAgICAgICBbbW9kZURpc3BsYXlUb3RhbFBhZ2VBbmRHb3RvUGFnZV09XCJwYWdpbmF0aW9uU2V0dGluZygpPy5tb2RlRGlzcGxheVRvdGFsUGFnZUFuZEdvdG9QYWdlIHx8ICdib3R0b20nXCJcbiAgICAgICAgW2NsYXNzRGlzcGxheVRvdGFsUGFnZUFuZEdvdG9QYWdlXT1cInBhZ2luYXRpb25TZXR0aW5nKCk/LmNsYXNzRGlzcGxheVRvdGFsUGFnZUFuZEdvdG9QYWdlIHx8ICcnXCJcbiAgICAgICAgW2NsYXNzSW5jbHVkZUl0ZW1dPVwicGFnaW5hdGlvblNldHRpbmcoKT8uY2xhc3NJbmNsdWRlSXRlbSB8fCAnJ1wiXG4gICAgICAgIFtjbGFzc0luY2x1ZGVDb250YWluZXJdPVwicGFnaW5hdGlvblNldHRpbmcoKT8uY2xhc3NJbmNsdWRlQ29udGFpbmVyIHx8ICchaXRlbXMtZW5kJ1wiXG4gICAgICAgIFtkaXNhYmxlXT1cInBhZ2luYXRpb25TZXR0aW5nKCk/LmRpc2FibGUgfHwgbG9hZGluZygpIHx8ICFpdGVtcygpLmxlbmd0aFwiXG4gICAgICAgIFtudW1iZXJQYWdlRGlzcGFseV09XCJwYWdpbmF0aW9uU2V0dGluZygpPy5udW1iZXJQYWdlRGlzcGFseSB8fCA1XCJcbiAgICAgICAgW3Nob3dUb3RhbFBhZ2VdPVwicGFnaW5hdGlvblNldHRpbmcoKT8uc2hvd1RvdGFsUGFnZSB8fCBmYWxzZVwiXG4gICAgICAgIFtzaG93SW5wdXRHb3RvUGFnZV09XCJwYWdpbmF0aW9uU2V0dGluZygpPy5zaG93SW5wdXRHb3RvUGFnZSB8fCBmYWxzZVwiXG4gICAgICAgIFt0b3RhbEl0ZW1zXT1cInBhZ2luZ1N0b3JlKCk/LnRvdGFsX2l0ZW1zIHx8IChwYWdpbmdTdG9yZSgpPy50b3RhbF9wYWdlcyB8fCAwKSoocGFnaW5nU3RvcmUoKT8ucGVyX3BhZ2UgfHwgMClcIlxuICAgICAgICAgIFtwZXJQYWdlXT1cInBhZ2luZ1N0b3JlKCk/LnBlcl9wYWdlIHx8IDBcIlxuICAgICAgICAgIFtjdXJyZW50UGFnZV09XCJwYWdpbmdTdG9yZSgpPy5wYWdlIHx8IDBcIlxuICAgICAgICAgIChvdXRQYWdlU2VsZWN0KT1cImhhbmRsZXJDaGFuZ2VQYWdlKCRldmVudClcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3RlbXBsYXRlSGVhZGVyUmVmXG4gIGxldC1oZWFkZXI9J2hlYWRlckl0ZW0nXG4gIGxldC1pc0hlYWRlckxlZnQ9J2lzSGVhZGVyTGVmdCc+XG4gIDxkaXZcbiAgICBbY2xhc3NdPVwiJ3JlbGF0aXZlIGZsZXggJysgKGhlYWRlci5wYWRkaW5nTGVmdFJpZ2h0SGVhZGVyQ29udGFpbmVyID8/ICcgcHgtWzEycHhdICcpICsgKGlzSGVhZGVyTGVmdCAmJiAhaGVhZGVyLmlnbm9yZUJvcmRlclJpZ2h0ID8gJyBsaWJzLXVpLWJvcmRlci1yaWdodC1nZW5lcmFsICcgOiAnICcpKyAnIGxpYnMtdWktdGFibGUtaGVhZGVyLWNvbCAnXCJcbiAgICBbY2xhc3MuZmxleC1jb2xdPVwiaGVhZGVyLnJvd3NDb25maWdcIlxuICAgIFtjbGFzcy5weS1bOHB4XV09JyFoZWFkZXIuaWdub3JlUHlEZWZhdWx0J1xuICAgIFtuZ1N0eWxlXT1cIihoZWFkZXJ8TGlic1VpVGFibGVDYWxjdWxhdG9yQ29sdW1uUGlwZTpoZWFkZXJFbGVtZW50UmVmLmNsaWVudFdpZHRoOmhlYWRlckxlZnQoKTpoZWFkZXJSaWdodCgpKSB8fCAoaGVhZGVyLmlzU2hvd0luZGV4T25Sb3cgPyB7d2lkdGg6JzUwcHgnLCdmbGV4LXNoaXJrJzonMCcscGFkZGluZzonOHB4J30gOiB7fSlcIlxuICAgIFtuZ0NsYXNzXT1cImhlYWRlci5uZ0NsYXNzIHx8IHt9XCI+XG4gICAgQGlmICghaGVhZGVyLnJvd3NDb25maWcpIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZUhlYWRlckNvbnRlbnRSZWY7Y29udGV4dDp7aGVhZGVySXRlbTpoZWFkZXIsaXNDb2xSZW5kZXI6ZmFsc2V9XCIgLz5cbiAgICB9XG4gICAgQGlmIChoZWFkZXIucm93c0NvbmZpZzthcyByb3dzQ29uZmlnKSB7XG4gICAgICBAZm9yIChyb3cgb2Ygcm93c0NvbmZpZy5yb3dzO3RyYWNrIHJvdykge1xuICAgICAgICA8ZGl2IFtjbGFzc109XCJyb3cuY2xhc3NSb3dcIj5cbiAgICAgICAgICBAZm9yIChjb2wgb2Ygcm93LmNvbHMgOyB0cmFjayBjb2wpIHtcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZUhlYWRlckNvbnRlbnRSZWY7Y29udGV4dDp7aGVhZGVySXRlbTpjb2wsaXNDb2xSZW5kZXI6dHJ1ZX1cIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVIZWFkZXJDb250ZW50UmVmXG4gIGxldC1oZWFkZXI9J2hlYWRlckl0ZW0nXG4gIGxldC1pc0NvbFJlbmRlcj0naXNDb2xSZW5kZXInPlxuICA8ZGl2ICNpdGVtSGVhZGVyUmVmIGNsYXNzPVwiZmxleCBsaWJzLXVpLWZvbnQtaDZtIG1pbi1oLVsxOHB4XSB0ZXh0LVsjNmE3MzgzXSBtYXgtdy1mdWxsXCJcbiAgICBbY2xhc3MuaXRlbXMtY2VudGVyXT0naGVhZGVyLmNvbnRlbnRIZWFkZXJBbGlnbkNlbnRlciA/PyB0cnVlJ1xuICAgIFtjbGFzcy5qdXN0aWZ5LWVuZF09J2hlYWRlci5jb250ZW50SGVhZGVySnVzdGlmeUNvbnRlbnRFbmQnXG4gICAgW2NsYXNzLnctZnVsbF09XCJoZWFkZXIuaXNTaG93SW5kZXhPblJvd1wiXG4gICAgW25nU3R5bGVdPVwiaXNDb2xSZW5kZXIgPyAoKGhlYWRlcnxMaWJzVWlUYWJsZUNhbGN1bGF0b3JDb2x1bW5QaXBlOmhlYWRlckVsZW1lbnRSZWYuY2xpZW50V2lkdGg6aGVhZGVyTGVmdCgpOmhlYWRlclJpZ2h0KCkpIHx8IChoZWFkZXIuaXNTaG93SW5kZXhPblJvdyA/IHt3aWR0aDonNTBweCcsJ2ZsZXgtc2hpcmsnOicwJyxwYWRkaW5nOic4cHgnfSA6IHt9KSkgOiB7fVwiXG4gICAgW25nQ2xhc3NdPVwiaXNDb2xSZW5kZXIgPyAoaGVhZGVyLm5nQ2xhc3MgfHwge30pIDoge31cIj5cbiAgICBAaWYgKGhlYWRlci5oYXNDaGVja2JveCkge1xuICAgICAgQGlmIChoZWFkZXIuaGFzQ2hlY2tib3hBbGwpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaC1mdWxsIHt7IGhlYWRlci5jaGVja2JveEFsbENsYXNzSW5jbHVkZSB8fCAnbXItWzE2cHhdJyB9fVwiXG4gICAgICAgICAgW2NsYXNzLml0ZW1zLWNlbnRlcl09XCJoZWFkZXIuY2hlY2tib3hBbGlnbkNlbnRlclwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtY2hlY2tib3gtc2luZ2xlIFtrZXldPVwiJ2FsbCdcIlxuICAgICAgICAgICAgW3N0aWxsT3RoZXJPcHRpb25zXT1cIiEha2V5c1NlbGVjdGVkKCkubGVuZ3RoICYmIGtleXNTZWxlY3RlZCgpLmxlbmd0aCAhPT0gaXRlbXMoKS5sZW5ndGhcIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwiISFrZXlzU2VsZWN0ZWQoKS5sZW5ndGggJiYga2V5c1NlbGVjdGVkKCkubGVuZ3RoID09PSBpdGVtcygpLmxlbmd0aFwiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKClcIlxuICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJoZWFkZXIuY2hlY2tib3hDbGFzc0luY2x1ZGVcIlxuICAgICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyQ2hhbmdlQ2hlY2tlZEFsbEl0ZW1zKCRldmVudClcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBoLWZ1bGwgbWwtWzI0cHhdIHt7IGhlYWRlci5jaGVja2JveENsYXNzSW5jbHVkZSB9fVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICB9XG4gICAgQGZvciAodG9vbHRpcCBvZiBoZWFkZXIudG9vbHRpcHNMZWZ0OyB0cmFjayB0b29sdGlwKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwibXItWzRweF1cIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFt0eXBlXT1cInRvb2x0aXA/LnR5cGUgfHwgJ290aGVyJ1wiXG4gICAgICAgICAgW21vZGVdPVwidG9vbHRpcD8ubW9kZSB8fCAnaG92ZXInXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cInRvb2x0aXAuY2xhc3NJbmNsdWRlIHx8ICd0ZXh0LVsjNmE3MzgzXSdcIlxuICAgICAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCJ0b29sdGlwLmlnbm9yZVNob3dUb29sdGlwIHx8IGZhbHNlXCJcbiAgICAgICAgICBbY29uZmlnXT1cInRvb2x0aXAuY29uZmlnIHx8IHtjb250ZW50Oih0b29sdGlwLmRhdGFWaWV3IHx8ICcgJykgfCB0cmFuc2xhdGUsIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgbW9kZTogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgZGlzdGFuY2U6IDAsXG4gICAgICAgICAgICAgICAgYXV0b1VwZGF0ZVBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgICBlbmREaXN0YW5jZTogMTIsXG4gICAgICAgICAgICAgICAgICBzdGFydERpc3RhbmNlOiAtMTJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvb2x0aXAuZGF0YVZpZXdcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChoZWFkZXIuaXNTaG93SW5kZXhPblJvdykge1xuICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGgtZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIge3sgaGVhZGVyLmNsYXNzSW5jbHVkZUluZGV4T25Sb3cgfHwgJycgfX1cIj5cbiAgICAgICAge3sgaGVhZGVyLmxhYmVsID8/ICcjJyB9fVxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICBAaWYgKChoZWFkZXIubGFiZWwgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOmhlYWRlci5wYXJzZVZhbHVlOmhlYWRlcikgfCBhc3luYyB8IHRyYW5zbGF0ZTsgYXMgbGFiZWxIZWFkZXJDb2x1bW4pIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFt0eXBlXT1cImhlYWRlcj8ubGFiZWxDb25maWc/LnR5cGUgfHwgJ3RleHQnXCJcbiAgICAgICAgICBbbW9kZV09XCJoZWFkZXI/LmxhYmVsQ29uZmlnPy5tb2RlIHx8ICdob3ZlcidcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiKGhlYWRlcj8ubGFiZWxDb25maWc/LmNsYXNzSW5jbHVkZSB8fCAnJylcIlxuICAgICAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCJoZWFkZXI/LmxhYmVsQ29uZmlnPy5pZ25vcmVTaG93VG9vbHRpcCB8fCBmYWxzZVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJoZWFkZXIubGFiZWxDb25maWc/LmNvbmZpZyB8fCB7Y29udGVudDpsYWJlbEhlYWRlckNvbHVtbn1cIlxuICAgICAgICAgIFtpbm5lckhUTUxdPVwibGFiZWxIZWFkZXJDb2x1bW5cIiAvPlxuICAgICAgfVxuICAgIH1cblxuICAgIEBmb3IgKHRvb2x0aXAgb2YgaGVhZGVyLnRvb2x0aXBzUmlnaHQ7IHRyYWNrIHRvb2x0aXApIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJtbC1bNHB4XVwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW3R5cGVdPVwidG9vbHRpcD8udHlwZSB8fCAnb3RoZXInXCJcbiAgICAgICAgICBbbW9kZV09XCJ0b29sdGlwPy5tb2RlIHx8ICdob3ZlcidcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwidG9vbHRpcC5jbGFzc0luY2x1ZGUgfHwgJ3RleHQtWyM2YTczODNdJ1wiXG4gICAgICAgICAgW2lnbm9yZVNob3dQb3BvdmVyXT1cInRvb2x0aXAuaWdub3JlU2hvd1Rvb2x0aXAgfHwgZmFsc2VcIlxuICAgICAgICAgIFtjb25maWddPVwidG9vbHRpcC5jb25maWcgfHwge2NvbnRlbnQ6KHRvb2x0aXAuZGF0YVZpZXcgfHwgJyAnKSB8IHRyYW5zbGF0ZSwgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgbW9kZTogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGRpc3RhbmNlOiAwLFxuICAgICAgICAgICAgICBhdXRvVXBkYXRlUG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICBlbmREaXN0YW5jZTogMTIsXG4gICAgICAgICAgICAgICAgc3RhcnREaXN0YW5jZTogLTEyXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XCJcbiAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvb2x0aXAuZGF0YVZpZXdcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChoZWFkZXIuaGFzU29ydCAmJiBoZWFkZXIub3JkZXJieSkge1xuICAgICAgPGRpdiBjbGFzcz1cIm1sLVs0cHhdXCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1zb3J0LWFycm93IFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCAhaXRlbXMoKS5sZW5ndGhcIlxuICAgICAgICAgIFtmaWVsZFNvcnRdPVwiaGVhZGVyLm9yZGVyYnlcIlxuICAgICAgICAgIFtpZ25vcmVQb3BvdmVyQ29udGVudF09XCJoZWFkZXIuc29ydElnbm9yZVRvb2x0aXBDb250ZW50ID8/IHRydWVcIlxuICAgICAgICAgIFtwb3BvdmVyQ29udGVudEFzY109XCJoZWFkZXIuc29ydFRvb2x0aXBDb250ZW50QXNjXCJcbiAgICAgICAgICBbcG9wb3ZlckNvbnRlbnREZXNjXT1cImhlYWRlci5zb3J0VG9vbHRpcENvbnRlbnREZXNjXCJcbiAgICAgICAgICBbZGVmYXVsdE1vZGVdPVwiaGVhZGVyLmRlZmF1bHRNb2RlXCJcbiAgICAgICAgICBbekluZGV4XT1cImhlYWRlci56SW5kZXhUb29sdGlwU29ydFwiXG4gICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyQ2hhbmdlU29ydCgkZXZlbnQpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIEBpZiAoaGVhZGVyLmxhYmVsRGVzY3JpcHRpb24pIHtcbiAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiaGVhZGVyLmxhYmVsRGVzY3JpcHRpb24uY2xhc3NJbmNsdWRlIHx8ICcnXCJcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDogaGVhZGVyLmxhYmVsRGVzY3JpcHRpb24uY29udGVudCB8IHRyYW5zbGF0ZX1cIlxuICAgICAgICBbaW5uZXJIVE1MXT1cImhlYWRlci5sYWJlbERlc2NyaXB0aW9uLmNvbnRlbnQgfCB0cmFuc2xhdGVcIiAvPlxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RlbXBsYXRlQm9keVJlZlxuICBsZXQtaGVhZGVyPSdoZWFkZXInXG4gIGxldC1kYXRhPSdkYXRhJz5cbiAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGgtZnVsbFwiPlxuICAgIEBpZiAoaGVhZGVyLmhhc0NoZWNrYm94KSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBoLWZ1bGxcIlxuICAgICAgICBbY2xhc3MuaW52aXNpYmxlXT1cImhlYWRlci5jaGVja0NvbmRpdGlvbkNoZWNrQm94SGlkZGVuICYmKCBkYXRhKCkgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOmhlYWRlci5jaGVja0NvbmRpdGlvbkNoZWNrQm94SGlkZGVuOmRhdGEoKSB8IGFzeW5jKVwiXG4gICAgICAgIFtjbGFzcy5pdGVtcy1jZW50ZXJdPVwiaGVhZGVyLmNoZWNrYm94QWxpZ25DZW50ZXJcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUgW2tleV09XCJkYXRhKClbZmllbGRLZXkoKV1cIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiaGVhZGVyLmNoZWNrYm94Q2xhc3NJbmNsdWRlXCJcbiAgICAgICAgICBbY2hlY2tlZF09XCJkYXRhKClbZmllbGRLZXkoKV0gfCBMaWJzVWlQaXBlc0NoZWNrU2VsZWN0ZWRCeUtleVBpcGU6a2V5c1NlbGVjdGVkKCk6a2V5c1NlbGVjdGVkKCkubGVuZ3RoXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgZGlzYWJsZUNoZWNrYm94KCkgfHwgISEobWF4SXRlbVNlbGVjdGVkKCkgJiYgIShkYXRhKClbZmllbGRLZXkoKV0gfCBMaWJzVWlQaXBlc0NoZWNrU2VsZWN0ZWRCeUtleVBpcGU6a2V5c1NlbGVjdGVkKCk6a2V5c1NlbGVjdGVkKCkubGVuZ3RoKSAmJiBrZXlzU2VsZWN0ZWQoKS5sZW5ndGggPj0gbWF4SXRlbVNlbGVjdGVkKCkpXCJcbiAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2VJdGVtQ2hlY2tlZCgkZXZlbnQsZGF0YSgpKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKGhlYWRlci5pc1Nob3dJbmRleE9uUm93OyBhcyBjb25maWcpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbGlicy11aS1mb250LWg0cnt7IGNvbmZpZy5jbGFzc0luY2x1ZGVJbmRleE9uUm93IHx8ICcnIH19XCI+XG4gICAgICAgIDxkaXYgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgIFtjb25maWddPVwie31cIlxuICAgICAgICAgIFtpbm5lckhUTUxdPVwiZGF0YSB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6Z2V0SW5kZXhSb3cgfCBhc3luY1wiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoaGVhZGVyLmNvbFRlbXBsYXRlQ29uZmlnKSB7XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLXRhYmxlLXRlbXBsYXRlcyBbaXNIb3Zlcl09XCJpdGVtT2ZJbmRleEhvdmVyID09PSBkYXRhICYmICFkYXRhLnNwZWNpZmljSGlnaHRMaWdodFwiXG4gICAgICAgIFtjbGFzc109XCJoZWFkZXIudGVtcGxhdGVDc3NXcmFwcGVySG9zdCB8fCAnJ1wiXG4gICAgICAgIFtpdGVtXT1cImRhdGFcIlxuICAgICAgICBbdGVtcGxhdGVDc3NXcmFwcGVyXT1cImhlYWRlci50ZW1wbGF0ZUNzc1dyYXBwZXJcIlxuICAgICAgICBbY29uZmlnc109XCJoZWFkZXIuY29sVGVtcGxhdGVDb25maWdcIiAvPlxuICAgIH1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RlbXBsYXRlRm9vdGVyUmVmPlxuICBAaWYgKCFpc0hpZGRlbkhlYWRlcldoZW5Ob2RhdGEoKSB8fCAoaXNIaWRkZW5IZWFkZXJXaGVuTm9kYXRhKCkgJiYgaXRlbXMoKS5sZW5ndGgpKSB7XG4gICAgPGRpdiAjZm9vdGVyRWxlbWVudFJlZlxuICAgICAgY2xhc3M9XCJmbGV4IHctZnVsbCBiZy1bI2Y4ZjlmYV0gb3ZlcmZsb3cteC1oaWRkZW4gei1bMV0ge3sgaWdub3JlQm9yZGVyRm9vdGVyKCkgPyAnJzogKGN1c3RvbVBvc2l0aW9uRm9vdGVyKCkgPT09ICd0b3AnID8gJ2xpYnMtdWktYm9yZGVyLWJvdHRvbS1nZW5lcmFsJzonbGlicy11aS10YWJsZS1zaGFkb3ctdG9wIGxpYnMtdWktYm9yZGVyLXRvcC1nZW5lcmFsJykgfX0gbWluLWgtWzM1cHhdXCJcbiAgICAgIChtb3VzZWVudGVyKT1cImhhbmRsZXJNb3VzZUVudGVyRm9vdGVyKCRldmVudClcIlxuICAgICAgKG1vdXNlbGVhdmUpPVwiaGFuZGxlck1vdXNlTGVhdmVGb290ZXIoJGV2ZW50KVwiPlxuICAgICAgQGlmIChmb290ZXJMZWZ0KCkpIHtcbiAgICAgICAgPGRpdiAjZm9vdGVyTGVmdEVsZW1lbnRSZWZcbiAgICAgICAgICBjbGFzcz1cImZsZXggc3RpY2t5IHRvcC0wIGxlZnQtMCB6LVsxXSBiZy1bI2Y4ZjlmYV1cIj5cbiAgICAgICAgICBAZm9yIChmb290ZXIgb2YgZm9vdGVyTGVmdCgpO3RyYWNrIGZvb3Rlcikge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHB4LVsxMnB4XSBweS1bOHB4XSB7eyBmb290ZXIuaWdub3JlQm9yZGVyUmlnaHQgPyAnJzogJ2xpYnMtdWktYm9yZGVyLXJpZ2h0LWdlbmVyYWwnIH19XCJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwiKGZvb3RlcnxMaWJzVWlUYWJsZUNhbGN1bGF0b3JDb2x1bW5QaXBlOmhlYWRlckVsZW1lbnRSZWYuY2xpZW50V2lkdGg6Zm9vdGVyTGVmdCgpOmZvb3RlclJpZ2h0KCkpIHx8IHt9XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZm9vdGVyLm5nQ2xhc3MgfHwge31cIj5cbiAgICAgICAgICAgICAgQGlmIChmb290ZXIuY29sVGVtcGxhdGVDb25maWcgJiYgaXRlbUZvb3RlcigpKSB7XG4gICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy10YWJsZS10ZW1wbGF0ZXMgW2l0ZW1dPVwiaXRlbUZvb3RlcnxMaWJzVWlQaXBlc0NvbnZlcnRPYmplY3RUb1NpZ25hbFBpcGVcIlxuICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlQ3NzV3JhcHBlcl09XCJmb290ZXIudGVtcGxhdGVDc3NXcmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgIFtjb25maWdzXT1cImZvb3Rlci5jb2xUZW1wbGF0ZUNvbmZpZ1wiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKGZvb3RlclJpZ2h0KCkpIHtcbiAgICAgICAgQGZvciAoZm9vdGVyIG9mIGZvb3RlclJpZ2h0KCk7dHJhY2sgZm9vdGVyKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHB4LVsxMnB4XSBweS1bOHB4XVwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCIoZm9vdGVyfExpYnNVaVRhYmxlQ2FsY3VsYXRvckNvbHVtblBpcGU6aGVhZGVyRWxlbWVudFJlZi5jbGllbnRXaWR0aDpmb290ZXJMZWZ0KCk6Zm9vdGVyUmlnaHQoKSkgfHwge31cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZm9vdGVyLm5nQ2xhc3MgfHwge31cIj5cbiAgICAgICAgICAgIEBpZiAoZm9vdGVyLmNvbFRlbXBsYXRlQ29uZmlnICYmIGl0ZW1Gb290ZXIoKSkge1xuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXRhYmxlLXRlbXBsYXRlcyBbaXRlbV09XCJpdGVtRm9vdGVyfExpYnNVaVBpcGVzQ29udmVydE9iamVjdFRvU2lnbmFsUGlwZVwiXG4gICAgICAgICAgICAgICAgW3RlbXBsYXRlQ3NzV3JhcHBlcl09XCJmb290ZXIudGVtcGxhdGVDc3NXcmFwcGVyXCJcbiAgICAgICAgICAgICAgICBbY29uZmlnc109XCJmb290ZXIuY29sVGVtcGxhdGVDb25maWdcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICA8L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZU5vZGF0YVJlZj5cbiAgQGlmICgha2V5U2VhcmNoKCkgJiYgdGVtcGxhdGVOb0RhdGEoKTsgYXMgdGVtcGxhdGVOb0RhdGEpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVOb0RhdGFcIiAvPlxuICB9IEBpZiAoa2V5U2VhcmNoKCkgJiYgdGVtcGxhdGVOb1Jlc3VsdCgpOyBhcyB0ZW1wbGF0ZU5vUmVzdWx0KSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlTm9SZXN1bHRcIiAvPlxuICB9XG4gIEBpZiAoIXRlbXBsYXRlTm9EYXRhKCkgJiYgIXRlbXBsYXRlTm9SZXN1bHQoKSAmJiBub0RhdGFDb25maWcoKTsgYXMgY29uZmlnKSB7XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBoLWZ1bGwgYWJzb2x1dGUgbGVmdC0wIHRvcC0wIHotWzFdXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1mdWxsIGgtZnVsbCBzaHJpbmstMFwiXG4gICAgICAgIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlPlxuICAgICAgICBAaWYgKCFrZXlTZWFyY2goKSAmJiAhb25seVNob3dOb1Jlc3VsdCgpKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCIgKCduby1kYXRhJyB8IExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUgfCBhc3luYyk7aW5wdXRzOntzaXplOjY0fVwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktdGFibGUtbm8tZGF0YS1jb25maWctdGV4dFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJjb25maWcubmdTdHlsZSB8fCB7fVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJjb25maWcubmdDbGFzcyB8fCB7fVwiXG4gICAgICAgICAgICBbaW5uZXJIdG1sXT1cImNvbmZpZy50ZXh0Tm9EYXRhIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChrZXlTZWFyY2goKSB8fCBvbmx5U2hvd05vUmVzdWx0KCkpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cIignbm8tcmVzdWx0JyB8IExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUgfCBhc3luYyk7aW5wdXRzOntzaXplOjY0fVwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktdGFibGUtbm8tZGF0YS1jb25maWctdGV4dFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJjb25maWcubmdTdHlsZSB8fCB7fVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJjb25maWcubmdDbGFzcyB8fCB7fVwiXG4gICAgICAgICAgICBbaW5uZXJIdG1sXT1cImNvbmZpZy50ZXh0U2VhcmNoTm9EYXRhIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuIl19
|