@libs-ui/components-pages-template-full-screen 0.2.356-7 → 0.2.356-9

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.
@@ -74,6 +74,7 @@ export class LibsUiComponentsPagesTemplateFullScreenV2Component {
74
74
  state: true,
75
75
  idOverlay: this.idOverlay(),
76
76
  timeLiveUpdate: getDayjs().unix(),
77
+ ignoreIntervalUpdateTimeLiveEvent: UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL,
77
78
  },
78
79
  };
79
80
  UtilsCommunicateMicro.PostMessageToParent(data);
@@ -147,4 +148,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
147
148
  LibsUiComponentsLabelComponent,
148
149
  ], template: "<div\n class=\"libs-ui-components-page_full overflow-hidden\"\n [style.zIndex]=\"zIndex()\"\n [style.background-color]=\"ignoreBackgroundColor() ? 'transparent' : '#f2f5f7'\">\n <!-- ===================== HEADER (gi\u1EEF nguy\u00EAn 100% t\u1EEB V1) ===================== -->\n <div [class]=\"'libs-ui-components-page_full-header ' + classHeaderInclude()\">\n <div class=\"{{ divideClassHeader()?.classButtonCancel || 'w-[25%]' }}\">\n @if (leftTemplate(); as leftTemplate) {\n <ng-container *ngTemplateOutlet=\"leftTemplate\" />\n }\n @if (labelLeft(); as labelLeft) {\n <libs_ui-components-buttons-button\n [label]=\"labelLeft\"\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px]'\"\n [classLabel]=\"'libs-ui-font-h4r'\"\n (outClick)=\"cancel()\" />\n }\n </div>\n\n @if (centerTemplate(); as centerTemplate) {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <ng-container *ngTemplateOutlet=\"centerTemplate\" />\n </div>\n } @else {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, zIndex: zIndex() + 1 }\"\n [classInclude]=\"'libs-ui-font-h2s'\"\n [innerHtml]=\"title() ? (title() | LibsUiPipesEscapeHtmlPipe) : '&mdash;'\" />\n @if (hasEdit(); as hasEdit) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n (outClick)=\"handlerEdit()\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'ml-[4px]'\" />\n }\n @for (button of buttonCenter(); track button.key) {\n <div class=\"ml-[12px] flex items-center\">\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-head-4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'button-status' && button.configButtonStatus) {\n <libs_ui-components-buttons-status\n [class]=\"button.classInclude\"\n [config]=\"button.configButtonStatus\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0 text-white'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n </div>\n }\n </div>\n }\n\n <div class=\"{{ divideClassHeader()?.classButtonRight || 'w-[35%]' }} flex justify-end items-center\">\n @for (button of buttonRight(); track button.key) {\n <div [class.ml-[12px]]=\"!$first\">\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button?.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-h4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n [iconOnlyType]=\"button.iconOnlyType || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'line-space') {\n <div\n class=\"bg-[#666b79] w-[1px] h-[28px]\"\n [class]=\"button.classInclude\">\n &nbsp;\n </div>\n }\n </div>\n }\n @if (menuDropDownConfigs(); as menuDropDownConfigs) {\n <div class=\"ml-[12px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [listConfig]=\"menuDropDownConfigs.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"menuDropDownConfigs.popoverCustomConfig\"\n (outFunctionsControl)=\"handlerControlDropdownMenu($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\">\n <libs_ui-components-buttons-button\n [classInclude]=\"'p-[8px]'\"\n [type]=\"'button-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px]'\"\n [popover]=\"{ config: { content: 'i18n_4x_other_operations' } }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n </div>\n }\n @if (templateRight(); as templateRight) {\n <ng-container *ngTemplateOutlet=\"templateRight\" />\n }\n </div>\n </div>\n\n <!-- ===================== BODY (V2: Lazy Load ho\u1EB7c ng-content) ===================== -->\n @if (bodyConfig().getComponentOutlet; as getBodyComponentOutlet) {\n <!-- Lazy load mode -->\n <div [class]=\"'libs-ui-components-page_full-body ' + (bodyConfig().classInclude || '')\">\n @let constHtmlCompBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: getBodyComponentOutlet : sectionData() : null : { valueIsEmpty: null } | async;\n @let constHtmlInputsBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: bodyConfig().getDataComponentOutlet : sectionData() : null : { valueIsEmpty: null } | async;\n @if (constHtmlCompBody) {\n @defer {\n <ng-container *ngComponentOutlet=\"constHtmlCompBody; inputs: constHtmlInputsBody\" />\n } @loading {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n } @else {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n </div>\n }\n</div>\n", styles: ["@-webkit-keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:0;opacity:1}}.libs-ui-components-page_full{position:absolute;width:100vw;height:100vh;left:0;top:0;display:flex;flex-direction:column;animation:animation-slide-to-left ease-out .3s}.libs-ui-components-page_full .libs-ui-components-page_full-header{height:50px;padding:14px 16px;border-bottom:solid 1px #e6e7ea;background-color:#fff;width:100%;display:flex;align-items:center}.libs-ui-components-page_full .libs-ui-components-page_full-body{height:100%}\n"] }]
149
150
  }] });
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbC1zY3JlZW4tdjIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3BhZ2VzLXRlbXBsYXRlL2Z1bGwtc2NyZWVuL3NyYy9mdWxsLXNjcmVlbi12Mi9mdWxsLXNjcmVlbi12Mi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcGFnZXMtdGVtcGxhdGUvZnVsbC1zY3JlZW4vc3JjL2Z1bGwtc2NyZWVuLXYyL2Z1bGwtc2NyZWVuLXYyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFVLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUNoSyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQTRELGlDQUFpQyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0ksT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0UsT0FBTyxFQUFtQixpQ0FBaUMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xHLE9BQU8sRUFBZ0IsK0JBQStCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRixPQUFPLEVBQUUscUNBQXFD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S0ksU0FBUyw4Q0FFVCxnQkFBZ0IsbUpBQ2hCLGVBQWUsK0JBQ2YsaUNBQWlDLHUzREFDakMsK0JBQStCLHFKQUMvQixzQ0FBc0Msc2pCQUN0QyxzQ0FBc0Msa0dBQ3RDLGdDQUFnQyxvZ0JBQ2hDLGlDQUFpQyx1RkFDakMscUNBQXFDLHlFQUNyQyx5QkFBeUIsa0VBQ3pCLDhCQUE4QixzdUJBWDlCLGlCQUFpQjs7NEZBY1Isa0RBQWtEO2tCQXZCOUQsU0FBUzsrQkFFRSxrREFBa0QsY0FHaEQsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLFNBQVM7d0JBQ1QsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsaUNBQWlDO3dCQUNqQywrQkFBK0I7d0JBQy9CLHNDQUFzQzt3QkFDdEMsc0NBQXNDO3dCQUN0QyxnQ0FBZ0M7d0JBQ2hDLGlDQUFpQzt3QkFDakMscUNBQXFDO3dCQUNyQyx5QkFBeUI7d0JBQ3pCLDhCQUE4QjtxQkFDL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nQ29tcG9uZW50T3V0bGV0LCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBEZXN0cm95UmVmLCBpbmplY3QsIGlucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBTaWduYWwsIHNpZ25hbCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc1N0YXR1c0NvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1zdGF0dXMnO1xuaW1wb3J0IHsgSURyb3Bkb3duLCBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCwgSUVtaXRTZWxlY3RLZXksIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtZHJvcGRvd24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1sYWJlbCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBJU2tlbGV0b25Db25maWcsIExpYnNVaUNvbXBvbmVudHNTa2VsZXRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc2tlbGV0b24nO1xuaW1wb3J0IHsgSVN3aXRjaEV2ZW50LCBMaWJzVWlDb21wb25lbnRzU3dpdGNoQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zd2l0Y2gnO1xuaW1wb3J0IHsgVFlQRV9URU1QTEFURV9SRUYgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlJztcbmltcG9ydCB7IExpYnNVaVBpcGVzRXNjYXBlSHRtbFBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1lc2NhcGUtaHRtbCc7XG5pbXBvcnQgeyBnZXQsIGdldERheWpzLCBVdGlsc0NvbW11bmljYXRlTWljcm8sIFV0aWxzQ29tbXVuaWNhdGVNaWNyb0tleUdsb2JhbCwgdXVpZCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElQYWdlc1RlbXBsYXRlRnVsbFNjcmVlbkJ1dHRvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRnVsbFNjcmVlblYyQm9keUNvbmZpZywgSUZ1bGxTY3JlZW5WMlNlY3Rpb25EYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2Z1bGwtc2NyZWVuLXYyLmludGVyZmFjZSc7XG5cbi8qKlxuICogRnVsbCBTY3JlZW4gVGVtcGxhdGUgVjIg4oCUIEvhur8gdGjhu6thIHRvw6BuIGLhu5kgVjEsIGLhu5Ugc3VuZyBsYXp5IGxvYWRpbmcgY2hvIGJvZHkuXG4gKiBIZWFkZXIgZ2nhu68gbmd1ecOqbiAxMDAlLiBCb2R5IGjhu5cgdHLhu6MgZHluYW1pYyBjb21wb25lbnQgaW5qZWN0aW9uIHbhu5tpIHNrZWxldG9uIHThu7EgxJHhu5luZy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLXBhZ2VzX3RlbXBsYXRlX2Z1bGxfc2NyZWVuX3YyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Z1bGwtc2NyZWVuLXYyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZnVsbC1zY3JlZW4tdjIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBBc3luY1BpcGUsXG4gICAgTmdDb21wb25lbnRPdXRsZXQsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNTd2l0Y2hDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNTdGF0dXNDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1NrZWxldG9uQ29tcG9uZW50LFxuICAgIExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUsXG4gICAgTGlic1VpUGlwZXNFc2NhcGVIdG1sUGlwZSxcbiAgICBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNQYWdlc1RlbXBsYXRlRnVsbFNjcmVlblYyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyAjcmVnaW9uIC0tLSBJTlBVVFMgKGvhur8gdGjhu6thIHThu6sgVjEpIC0tLVxuICByZWFkb25seSBjbGFzc0hlYWRlckluY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxhYmVsTGVmdCA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaTE4bl9iYWNrX3RvX2xpc3QnLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/ICdpMThuX2JhY2tfdG9fbGlzdCcgfSk7XG4gIHJlYWRvbmx5IHRpdGxlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBidXR0b25DZW50ZXIgPSBpbnB1dDxBcnJheTxJUGFnZXNUZW1wbGF0ZUZ1bGxTY3JlZW5CdXR0b24+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBidXR0b25SaWdodCA9IGlucHV0PEFycmF5PElQYWdlc1RlbXBsYXRlRnVsbFNjcmVlbkJ1dHRvbj4+KCk7XG4gIHJlYWRvbmx5IGhhc0VkaXQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IG1lbnVEcm9wRG93bkNvbmZpZ3MgPSBpbnB1dDxJRHJvcGRvd24+KCk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMDAwLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IDEwMDAgfSk7XG4gIHJlYWRvbmx5IGlnbm9yZUNsb3NlUGFnZUZ1bGxFdmVudCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBpZ25vcmVCYWNrZ3JvdW5kQ29sb3IgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXZpZGVDbGFzc0hlYWRlciA9IGlucHV0PHsgY2xhc3NCdXR0b25DYW5jZWw6IHN0cmluZzsgY2xhc3NCdXR0b25DZW50ZXI6IHN0cmluZzsgY2xhc3NCdXR0b25SaWdodDogc3RyaW5nIH0gfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGNlbnRlclRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSB0ZW1wbGF0ZVJpZ2h0ID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBsZWZ0VGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4gfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyBmYWxzZSB9KTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gLS0tIElOUFVUUyAobeG7m2kgdHJvbmcgVjIpIC0tLVxuICAvKiogQ29uZmlnIGxhenkgbG9hZCBjb21wb25lbnQgdsOgbyBib2R5LiBO4bq/dSBraMO0bmcgdHJ1eeG7gW4gZ2V0Q29tcG9uZW50T3V0bGV0IOKGkiB04buxIMSR4buZbmcgZMO5bmcgbmctY29udGVudC4gKi9cbiAgcmVhZG9ubHkgYm9keUNvbmZpZyA9IGlucHV0PElGdWxsU2NyZWVuVjJCb2R5Q29uZmlnLCBJRnVsbFNjcmVlblYyQm9keUNvbmZpZyB8IHVuZGVmaW5lZD4oe30sIHsgdHJhbnNmb3JtOiAodikgPT4gdiB8fCB7fSB9KTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gLS0tIE9VVFBVVFMgLS0tXG4gIHJlYWRvbmx5IG91dENsb3NlID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IG91dEVkaXQgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb3V0U2VsZWN0ZWRNZW51RHJvcGRvd24gPSBvdXRwdXQ8SUVtaXRTZWxlY3RLZXkgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IG91dENsaWNrQnV0dG9uID0gb3V0cHV0PElQYWdlc1RlbXBsYXRlRnVsbFNjcmVlbkJ1dHRvbj4oKTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gLS0tIElOVEVSTkFMIFNUQVRFIC0tLVxuICBwcml2YXRlIHJlYWRvbmx5IGlkT3ZlcmxheSA9IHNpZ25hbDxzdHJpbmc+KHV1aWQoKSkuYXNSZWFkb25seSgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByaXZhdGUgZnVuY3Rpb25Db250cm9sTWVudTogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQgfCB1bmRlZmluZWQ7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIC0tLSBDT01QVVRFRCAtLS1cbiAgLyoqIFN0YXRlIHJlYWN0aXZlIMSR4buDIHRydXnhu4FuIHbDoG8gY29tcG9uZW50IG91dGxldCAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VjdGlvbkRhdGEgPSBjb21wdXRlZDxJRnVsbFNjcmVlblYyU2VjdGlvbkRhdGE+KCgpID0+ICh7XG4gICAgZGlzYWJsZTogdGhpcy5kaXNhYmxlKCksXG4gIH0pKTtcblxuICAvKiogU2tlbGV0b24gYm9keSDigJQgZmFsbGJhY2sgduG7gSBjb25maWcgbeG6t2MgxJHhu4tuaCBu4bq/dSBraMO0bmcgxJHGsOG7o2MgdHJ1eeG7gW4gKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlc29sdmVkU2tlbGV0b25Cb2R5OiBTaWduYWw8SVNrZWxldG9uQ29uZmlnPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgZ2V0KHRoaXMuYm9keUNvbmZpZywgJ3NrZWxldG9uQ29uZmlnJykgPz8ge1xuICAgICAgICByZXBlYXQ6IDMsXG4gICAgICAgIHN0eWxlTWFyZ2luQm90dG9tOiAxNixcbiAgICAgICAgcm93czogW3sgaXRlbTogeyBjbGFzc0luY2x1ZGU6ICd3LWZ1bGwgaC1bMTIwcHhdIHJvdW5kZWQtWzhweF0nIH0gfV0sXG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG4gIC8vICNlbmRyZWdpb25cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaWdub3JlQ2xvc2VQYWdlRnVsbEV2ZW50KCkpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIHR5cGU6IFV0aWxzQ29tbXVuaWNhdGVNaWNyb0tleUdsb2JhbC5LRVlfTUVTU0FHRV9NT0RBTCxcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICBtZXNzYWdlOiAnb3BlbicsXG4gICAgICAgICAgc3RhdGU6IHRydWUsXG4gICAgICAgICAgaWRPdmVybGF5OiB0aGlzLmlkT3ZlcmxheSgpLFxuICAgICAgICAgIHRpbWVMaXZlVXBkYXRlOiBnZXREYXlqcygpLnVuaXgoKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIFV0aWxzQ29tbXVuaWNhdGVNaWNyby5Qb3N0TWVzc2FnZVRvUGFyZW50KGRhdGEpO1xuXG4gICAgICBpZiAoIVV0aWxzQ29tbXVuaWNhdGVNaWNyb0tleUdsb2JhbC5JR05PUkVfSU5URVJWQUxfVVBEQVRFX1RJTUVfTElWRV9FVkVOVF9NT0RBTCkge1xuICAgICAgICBpbnRlcnZhbCgyMDAwKVxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgZGF0YS5yZXNwb25zZS50aW1lTGl2ZVVwZGF0ZSA9IGdldERheWpzKCkudW5peCgpO1xuICAgICAgICAgICAgVXRpbHNDb21tdW5pY2F0ZU1pY3JvLlBvc3RNZXNzYWdlVG9QYXJlbnQoZGF0YSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gI3JlZ2lvbiAtLS0gRVZFTlQgSEFORExFUlMgLS0tXG4gIHByb3RlY3RlZCBoYW5kbGVyRWRpdCgpIHtcbiAgICB0aGlzLm91dEVkaXQuZW1pdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbmNlbCgpIHtcbiAgICB0aGlzLm91dENsb3NlLmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQ2xpY2tCdXR0b24oYnV0dG9uOiBJUGFnZXNUZW1wbGF0ZUZ1bGxTY3JlZW5CdXR0b24pIHtcbiAgICBpZiAoYnV0dG9uICYmIGJ1dHRvbi5hY3Rpb24pIHtcbiAgICAgIGF3YWl0IGJ1dHRvbi5hY3Rpb24oKTtcbiAgICB9XG4gICAgdGhpcy5vdXRDbGlja0J1dHRvbi5lbWl0KGJ1dHRvbik7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclN3aXRjaChldmVudDogSVN3aXRjaEV2ZW50LCBidXR0b246IElQYWdlc1RlbXBsYXRlRnVsbFNjcmVlbkJ1dHRvbikge1xuICAgIGlmIChidXR0b24gJiYgYnV0dG9uLmFjdGlvbikge1xuICAgICAgYXdhaXQgYnV0dG9uLmFjdGlvbihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RlZEtleShldmVudDogSUVtaXRTZWxlY3RLZXkgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLm91dFNlbGVjdGVkTWVudURyb3Bkb3duLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMuZnVuY3Rpb25Db250cm9sTWVudT8ucmVzZXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ29udHJvbERyb3Bkb3duTWVudShldmVudDogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLmZ1bmN0aW9uQ29udHJvbE1lbnUgPSBldmVudDtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlnbm9yZUNsb3NlUGFnZUZ1bGxFdmVudCgpKSB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICB0eXBlOiBVdGlsc0NvbW11bmljYXRlTWljcm9LZXlHbG9iYWwuS0VZX01FU1NBR0VfTU9EQUwsXG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgbWVzc2FnZTogJ2Nsb3NlJyxcbiAgICAgICAgICBzdGF0ZTogZmFsc2UsXG4gICAgICAgICAgaWRPdmVybGF5OiB0aGlzLmlkT3ZlcmxheSgpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIFV0aWxzQ29tbXVuaWNhdGVNaWNyby5Qb3N0TWVzc2FnZVRvUGFyZW50KGRhdGEpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50cy1wYWdlX2Z1bGwgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgW3N0eWxlLnpJbmRleF09XCJ6SW5kZXgoKVwiXG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImlnbm9yZUJhY2tncm91bmRDb2xvcigpID8gJ3RyYW5zcGFyZW50JyA6ICcjZjJmNWY3J1wiPlxuICA8IS0tID09PT09PT09PT09PT09PT09PT09PSBIRUFERVIgKGdp4buvIG5ndXnDqm4gMTAwJSB04burIFYxKSA9PT09PT09PT09PT09PT09PT09PT0gLS0+XG4gIDxkaXYgW2NsYXNzXT1cIidsaWJzLXVpLWNvbXBvbmVudHMtcGFnZV9mdWxsLWhlYWRlciAnICsgY2xhc3NIZWFkZXJJbmNsdWRlKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwie3sgZGl2aWRlQ2xhc3NIZWFkZXIoKT8uY2xhc3NCdXR0b25DYW5jZWwgfHwgJ3ctWzI1JV0nIH19XCI+XG4gICAgICBAaWYgKGxlZnRUZW1wbGF0ZSgpOyBhcyBsZWZ0VGVtcGxhdGUpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxlZnRUZW1wbGF0ZVwiIC8+XG4gICAgICB9XG4gICAgICBAaWYgKGxhYmVsTGVmdCgpOyBhcyBsYWJlbExlZnQpIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgIFtsYWJlbF09XCJsYWJlbExlZnRcIlxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0IHJvdGF0ZS1bMTgwZGVnXSBiZWZvcmU6dGV4dC1bMTZweF0nXCJcbiAgICAgICAgICBbY2xhc3NMYWJlbF09XCInbGlicy11aS1mb250LWg0cidcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJjYW5jZWwoKVwiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGNlbnRlclRlbXBsYXRlKCk7IGFzIGNlbnRlclRlbXBsYXRlKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwie3sgZGl2aWRlQ2xhc3NIZWFkZXIoKT8uY2xhc3NCdXR0b25DZW50ZXIgfHwgJ3ctWzQwJV0nIH19IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZW50ZXJUZW1wbGF0ZVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJ7eyBkaXZpZGVDbGFzc0hlYWRlcigpPy5jbGFzc0J1dHRvbkNlbnRlciB8fCAndy1bNDAlXScgfX0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFtjb25maWddPVwieyBtYXhXaWR0aDogMjUwLCB6SW5kZXg6IHpJbmRleCgpICsgMSB9XCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidsaWJzLXVpLWZvbnQtaDJzJ1wiXG4gICAgICAgICAgW2lubmVySHRtbF09XCJ0aXRsZSgpID8gKHRpdGxlKCkgfCBMaWJzVWlQaXBlc0VzY2FwZUh0bWxQaXBlKSA6ICcmbWRhc2g7J1wiIC8+XG4gICAgICAgIEBpZiAoaGFzRWRpdCgpOyBhcyBoYXNFZGl0KSB7XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyRWRpdCgpXCJcbiAgICAgICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWVkaXQtbGluZSdcIlxuICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInbWwtWzRweF0nXCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChidXR0b24gb2YgYnV0dG9uQ2VudGVyKCk7IHRyYWNrIGJ1dHRvbi5rZXkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtWzEycHhdIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICBAaWYgKGJ1dHRvbi5rZXkgPT09ICdidXR0b24nKSB7XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYnV0dG9uLmxhYmVsIHx8ICcnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NMYWJlbF09XCIoYnV0dG9uLmNsYXNzTGFiZWwgfHwgJycpICsgJyBsaWJzLXVpLWZvbnQtaGVhZC00cydcIlxuICAgICAgICAgICAgICAgIFt0eXBlXT1cImJ1dHRvbi50eXBlIHx8ICdidXR0b24tcHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiYnV0dG9uLmNsYXNzSW5jbHVkZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiYnV0dG9uLmNsYXNzSWNvbkxlZnQgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0ljb25SaWdodF09XCJidXR0b24uY2xhc3NJY29uUmlnaHQgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtwb3BvdmVyXT1cImJ1dHRvbi5wb3BvdmVyIHx8IHt9XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJidXR0b24uZGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgICAgICAgIFtpc1BlbmRpbmddPVwiYnV0dG9uLmlzUGVuZGluZyB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbGlja0J1dHRvbihidXR0b24pXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoYnV0dG9uLmtleSA9PT0gJ2J1dHRvbi1zdGF0dXMnICYmIGJ1dHRvbi5jb25maWdCdXR0b25TdGF0dXMpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLXN0YXR1c1xuICAgICAgICAgICAgICAgIFtjbGFzc109XCJidXR0b24uY2xhc3NJbmNsdWRlXCJcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cImJ1dHRvbi5jb25maWdCdXR0b25TdGF0dXNcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChidXR0b24ua2V5ID09PSAnc3dpdGNoJykge1xuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXN3aXRjaFxuICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiYnV0dG9uLmFjdGl2ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiYnV0dG9uLmRpc2FibGUgfHwgZGlzYWJsZSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGJ1dHRvbi5jbGFzc0luY2x1ZGUgfX1cIlxuICAgICAgICAgICAgICAgIChvdXRTd2l0Y2gpPVwiaGFuZGxlclN3aXRjaCgkZXZlbnQsIGJ1dHRvbilcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChidXR0b24ua2V5ID09PSAnbGFiZWwnICYmIGJ1dHRvbi5sYWJlbENvbmZpZykge1xuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJidXR0b24ubGFiZWxDb25maWcuY2xhc3NJbmNsdWRlICsgJyBwYi0wIHRleHQtd2hpdGUnXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxMZWZ0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbExlZnRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbExlZnRDbGFzc109XCJidXR0b24ubGFiZWxDb25maWcubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJidXR0b24ubGFiZWxDb25maWcucmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCJidXR0b24ubGFiZWxDb25maWcuZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIFtsYWJlbFJpZ2h0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbFJpZ2h0XCJcbiAgICAgICAgICAgICAgICBbbGFiZWxSaWdodENsYXNzXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbFJpZ2h0Q2xhc3NcIlxuICAgICAgICAgICAgICAgIFtvbmx5U2hvd0NvdW50XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uc0xlZnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNMZWZ0XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZUJ1dHRvbnNMZWZ0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0xlZnRcIlxuICAgICAgICAgICAgICAgIFtidXR0b25zUmlnaHRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNSaWdodFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zUmlnaHRcIlxuICAgICAgICAgICAgICAgIFtoYXNUb2dnbGVdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmhhc1RvZ2dsZVwiXG4gICAgICAgICAgICAgICAgW3RvZ2dsZUFjdGl2ZV09XCJidXR0b24ubGFiZWxDb25maWcudG9nZ2xlQWN0aXZlXCJcbiAgICAgICAgICAgICAgICBbdG9nZ2xlRGlzYWJsZV09XCJidXR0b24ubGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLnBvcG92ZXJcIlxuICAgICAgICAgICAgICAgIFtpY29uUG9wb3ZlckNsYXNzXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5pY29uUG9wb3ZlckNsYXNzXCJcbiAgICAgICAgICAgICAgICBbbGltaXRMZW5ndGhdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXCJcbiAgICAgICAgICAgICAgICBbY291bnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmNvdW50XCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPGRpdiBjbGFzcz1cInt7IGRpdmlkZUNsYXNzSGVhZGVyKCk/LmNsYXNzQnV0dG9uUmlnaHQgfHwgJ3ctWzM1JV0nIH19IGZsZXgganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyXCI+XG4gICAgICBAZm9yIChidXR0b24gb2YgYnV0dG9uUmlnaHQoKTsgdHJhY2sgYnV0dG9uLmtleSkge1xuICAgICAgICA8ZGl2IFtjbGFzcy5tbC1bMTJweF1dPVwiISRmaXJzdFwiPlxuICAgICAgICAgIEBpZiAoYnV0dG9uLmtleSA9PT0gJ2xhYmVsJyAmJiBidXR0b24ubGFiZWxDb25maWcpIHtcbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGFiZWxcbiAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJidXR0b24ubGFiZWxDb25maWcuY2xhc3NJbmNsdWRlICsgJyBwYi0wJ1wiXG4gICAgICAgICAgICAgIFtsYWJlbExlZnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxhYmVsTGVmdFwiXG4gICAgICAgICAgICAgIFtsYWJlbExlZnRDbGFzc109XCJidXR0b24ubGFiZWxDb25maWcubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLnJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgIFtsYWJlbFJpZ2h0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbFJpZ2h0XCJcbiAgICAgICAgICAgICAgW2xhYmVsUmlnaHRDbGFzc109XCJidXR0b24ubGFiZWxDb25maWcubGFiZWxSaWdodENsYXNzXCJcbiAgICAgICAgICAgICAgW29ubHlTaG93Q291bnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgICAgICAgICBbYnV0dG9uc0xlZnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNMZWZ0XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVCdXR0b25zTGVmdF09XCJidXR0b24ubGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNMZWZ0XCJcbiAgICAgICAgICAgICAgW2J1dHRvbnNSaWdodF09XCJidXR0b24ubGFiZWxDb25maWcuYnV0dG9uc1JpZ2h0XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zUmlnaHRcIlxuICAgICAgICAgICAgICBbaGFzVG9nZ2xlXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5oYXNUb2dnbGVcIlxuICAgICAgICAgICAgICBbdG9nZ2xlQWN0aXZlXT1cImJ1dHRvbi5sYWJlbENvbmZpZy50b2dnbGVBY3RpdmVcIlxuICAgICAgICAgICAgICBbdG9nZ2xlRGlzYWJsZV09XCJidXR0b24ubGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZVwiXG4gICAgICAgICAgICAgIFtwb3BvdmVyXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5wb3BvdmVyXCJcbiAgICAgICAgICAgICAgW2ljb25Qb3BvdmVyQ2xhc3NdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmljb25Qb3BvdmVyQ2xhc3NcIlxuICAgICAgICAgICAgICBbbGltaXRMZW5ndGhdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgICAgICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbl09XCJidXR0b24ubGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVCdXR0b25zRGVzY3JpcHRpb25dPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXCJcbiAgICAgICAgICAgICAgW2NvdW50XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5jb3VudFwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoYnV0dG9uLmtleSA9PT0gJ3N3aXRjaCcpIHtcbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc3dpdGNoXG4gICAgICAgICAgICAgIFthY3RpdmVdPVwiYnV0dG9uLmFjdGl2ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cImJ1dHRvbi5kaXNhYmxlIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwie3sgYnV0dG9uLmNsYXNzSW5jbHVkZSB9fVwiXG4gICAgICAgICAgICAgIChvdXRTd2l0Y2gpPVwiaGFuZGxlclN3aXRjaCgkZXZlbnQsIGJ1dHRvbilcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGJ1dHRvbi5rZXkgPT09ICdidXR0b24nKSB7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJidXR0b24/LmxhYmVsIHx8ICcnXCJcbiAgICAgICAgICAgICAgW2NsYXNzTGFiZWxdPVwiKGJ1dHRvbi5jbGFzc0xhYmVsIHx8ICcnKSArICcgbGlicy11aS1mb250LWg0cydcIlxuICAgICAgICAgICAgICBbdHlwZV09XCJidXR0b24udHlwZSB8fCAnYnV0dG9uLXByaW1hcnknXCJcbiAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJidXR0b24uY2xhc3NJbmNsdWRlIHx8ICcnXCJcbiAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiYnV0dG9uLmNsYXNzSWNvbkxlZnQgfHwgJydcIlxuICAgICAgICAgICAgICBbY2xhc3NJY29uUmlnaHRdPVwiYnV0dG9uLmNsYXNzSWNvblJpZ2h0IHx8ICcnXCJcbiAgICAgICAgICAgICAgW3BvcG92ZXJdPVwiYnV0dG9uLnBvcG92ZXIgfHwge31cIlxuICAgICAgICAgICAgICBbZGlzYWJsZV09XCJidXR0b24uZGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgICAgICBbaXNQZW5kaW5nXT1cImJ1dHRvbi5pc1BlbmRpbmcgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cImJ1dHRvbi5pY29uT25seVR5cGUgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsaWNrQnV0dG9uKGJ1dHRvbilcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGJ1dHRvbi5rZXkgPT09ICdsaW5lLXNwYWNlJykge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImJnLVsjNjY2Yjc5XSB3LVsxcHhdIGgtWzI4cHhdXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImJ1dHRvbi5jbGFzc0luY2x1ZGVcIj5cbiAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChtZW51RHJvcERvd25Db25maWdzKCk7IGFzIG1lbnVEcm9wRG93bkNvbmZpZ3MpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1sLVsxMnB4XVwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd25cbiAgICAgICAgICAgIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFt6SW5kZXhdPVwiekluZGV4KCkgKyAxXCJcbiAgICAgICAgICAgIFtsaXN0Q29uZmlnXT1cIm1lbnVEcm9wRG93bkNvbmZpZ3MubGlzdENvbmZpZ1wiXG4gICAgICAgICAgICBbbGlzdEhpZGRlbklucHV0U2VhcmNoXT1cInRydWVcIlxuICAgICAgICAgICAgW3BvcG92ZXJDdXN0b21Db25maWddPVwibWVudURyb3BEb3duQ29uZmlncy5wb3BvdmVyQ3VzdG9tQ29uZmlnXCJcbiAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJDb250cm9sRHJvcGRvd25NZW51KCRldmVudClcIlxuICAgICAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0ZWRLZXkoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidwLVs4cHhdJ1wiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tdGhpcmQnXCJcbiAgICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1tb3JlLXZlcnRpY2FsIHRleHQtWyMzMzMzMzNdIHRleHQtWzEycHhdJ1wiXG4gICAgICAgICAgICAgIFtwb3BvdmVyXT1cInsgY29uZmlnOiB7IGNvbnRlbnQ6ICdpMThuXzR4X290aGVyX29wZXJhdGlvbnMnIH0gfVwiXG4gICAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCIgLz5cbiAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1kcm9wZG93bj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKHRlbXBsYXRlUmlnaHQoKTsgYXMgdGVtcGxhdGVSaWdodCkge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVSaWdodFwiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gPT09PT09PT09PT09PT09PT09PT09IEJPRFkgKFYyOiBMYXp5IExvYWQgaG/hurdjIG5nLWNvbnRlbnQpID09PT09PT09PT09PT09PT09PT09PSAtLT5cbiAgQGlmIChib2R5Q29uZmlnKCkuZ2V0Q29tcG9uZW50T3V0bGV0OyBhcyBnZXRCb2R5Q29tcG9uZW50T3V0bGV0KSB7XG4gICAgPCEtLSBMYXp5IGxvYWQgbW9kZSAtLT5cbiAgICA8ZGl2IFtjbGFzc109XCInbGlicy11aS1jb21wb25lbnRzLXBhZ2VfZnVsbC1ib2R5ICcgKyAoYm9keUNvbmZpZygpLmNsYXNzSW5jbHVkZSB8fCAnJylcIj5cbiAgICAgIEBsZXQgY29uc3RIdG1sQ29tcEJvZHkgPSB1bmRlZmluZWQgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOiBnZXRCb2R5Q29tcG9uZW50T3V0bGV0IDogc2VjdGlvbkRhdGEoKSA6IG51bGwgOiB7IHZhbHVlSXNFbXB0eTogbnVsbCB9IHwgYXN5bmM7XG4gICAgICBAbGV0IGNvbnN0SHRtbElucHV0c0JvZHkgPSB1bmRlZmluZWQgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOiBib2R5Q29uZmlnKCkuZ2V0RGF0YUNvbXBvbmVudE91dGxldCA6IHNlY3Rpb25EYXRhKCkgOiBudWxsIDogeyB2YWx1ZUlzRW1wdHk6IG51bGwgfSB8IGFzeW5jO1xuICAgICAgQGlmIChjb25zdEh0bWxDb21wQm9keSkge1xuICAgICAgICBAZGVmZXIge1xuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiY29uc3RIdG1sQ29tcEJvZHk7IGlucHV0czogY29uc3RIdG1sSW5wdXRzQm9keVwiIC8+XG4gICAgICAgIH0gQGxvYWRpbmcge1xuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc2tlbGV0b24gW2NvbmZpZ109XCJyZXNvbHZlZFNrZWxldG9uQm9keSgpXCIgLz5cbiAgICAgICAgfVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc2tlbGV0b24gW2NvbmZpZ109XCJyZXNvbHZlZFNrZWxldG9uQm9keSgpXCIgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbC1zY3JlZW4tdjIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3BhZ2VzLXRlbXBsYXRlL2Z1bGwtc2NyZWVuL3NyYy9mdWxsLXNjcmVlbi12Mi9mdWxsLXNjcmVlbi12Mi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcGFnZXMtdGVtcGxhdGUvZnVsbC1zY3JlZW4vc3JjL2Z1bGwtc2NyZWVuLXYyL2Z1bGwtc2NyZWVuLXYyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFVLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUNoSyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQTRELGlDQUFpQyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0ksT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0UsT0FBTyxFQUFtQixpQ0FBaUMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xHLE9BQU8sRUFBZ0IsK0JBQStCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRixPQUFPLEVBQUUscUNBQXFD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RDs0RkFBbEQsa0RBQWtELDQvRUM5Qy9ELDBzVUFzTUEsK3BCRHZLSSxTQUFTLDhDQUVULGdCQUFnQixtSkFDaEIsZUFBZSwrQkFDZixpQ0FBaUMsdTNEQUNqQywrQkFBK0IscUpBQy9CLHNDQUFzQyxzakJBQ3RDLHNDQUFzQyxrR0FDdEMsZ0NBQWdDLG9nQkFDaEMsaUNBQWlDLHVGQUNqQyxxQ0FBcUMseUVBQ3JDLHlCQUF5QixrRUFDekIsOEJBQThCLHN1QkFYOUIsaUJBQWlCOzs0RkFjUixrREFBa0Q7a0JBdkI5RCxTQUFTOytCQUVFLGtEQUFrRCxjQUdoRCxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsU0FBUzt3QkFDVCxpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixpQ0FBaUM7d0JBQ2pDLCtCQUErQjt3QkFDL0Isc0NBQXNDO3dCQUN0QyxzQ0FBc0M7d0JBQ3RDLGdDQUFnQzt3QkFDaEMsaUNBQWlDO3dCQUNqQyxxQ0FBcUM7d0JBQ3JDLHlCQUF5Qjt3QkFDekIsOEJBQThCO3FCQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdDb21wb25lbnRPdXRsZXQsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIERlc3Ryb3lSZWYsIGluamVjdCwgaW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIFNpZ25hbCwgc2lnbmFsLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zU3RhdHVzQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLXN0YXR1cyc7XG5pbXBvcnQgeyBJRHJvcGRvd24sIElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50LCBJRW1pdFNlbGVjdEtleSwgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1kcm9wZG93bic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxhYmVsJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IElTa2VsZXRvbkNvbmZpZywgTGlic1VpQ29tcG9uZW50c1NrZWxldG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1za2VsZXRvbic7XG5pbXBvcnQgeyBJU3dpdGNoRXZlbnQsIExpYnNVaUNvbXBvbmVudHNTd2l0Y2hDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXN3aXRjaCc7XG5pbXBvcnQgeyBUWVBFX1RFTVBMQVRFX1JFRiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZSB9IGZyb20gJ0BsaWJzLXVpL3BpcGVzLWNhbGwtZnVuY3Rpb24taW4tdGVtcGxhdGUnO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNFc2NhcGVIdG1sUGlwZSB9IGZyb20gJ0BsaWJzLXVpL3BpcGVzLWVzY2FwZS1odG1sJztcbmltcG9ydCB7IGdldCwgZ2V0RGF5anMsIFV0aWxzQ29tbXVuaWNhdGVNaWNybywgVXRpbHNDb21tdW5pY2F0ZU1pY3JvS2V5R2xvYmFsLCB1dWlkIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSVBhZ2VzVGVtcGxhdGVGdWxsU2NyZWVuQnV0dG9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IElGdWxsU2NyZWVuVjJCb2R5Q29uZmlnLCBJRnVsbFNjcmVlblYyU2VjdGlvbkRhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvZnVsbC1zY3JlZW4tdjIuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBGdWxsIFNjcmVlbiBUZW1wbGF0ZSBWMiDigJQgS+G6vyB0aOG7q2EgdG/DoG4gYuG7mSBWMSwgYuG7lSBzdW5nIGxhenkgbG9hZGluZyBjaG8gYm9keS5cbiAqIEhlYWRlciBnaeG7ryBuZ3V5w6puIDEwMCUuIEJvZHkgaOG7lyB0cuG7oyBkeW5hbWljIGNvbXBvbmVudCBpbmplY3Rpb24gduG7m2kgc2tlbGV0b24gdOG7sSDEkeG7mW5nLlxuICovXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtcGFnZXNfdGVtcGxhdGVfZnVsbF9zY3JlZW5fdjInLFxuICB0ZW1wbGF0ZVVybDogJy4vZnVsbC1zY3JlZW4tdjIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mdWxsLXNjcmVlbi12Mi5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgICBOZ0NvbXBvbmVudE91dGxldCxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1N3aXRjaENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc1N0YXR1c0NvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzU2tlbGV0b25Db21wb25lbnQsXG4gICAgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZSxcbiAgICBMaWJzVWlQaXBlc0VzY2FwZUh0bWxQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1BhZ2VzVGVtcGxhdGVGdWxsU2NyZWVuVjJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vICNyZWdpb24gLS0tIElOUFVUUyAoa+G6vyB0aOG7q2EgdOG7qyBWMSkgLS0tXG4gIHJlYWRvbmx5IGNsYXNzSGVhZGVySW5jbHVkZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgbGFiZWxMZWZ0ID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdpMThuX2JhY2tfdG9fbGlzdCcsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gJ2kxOG5fYmFja190b19saXN0JyB9KTtcbiAgcmVhZG9ubHkgdGl0bGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGJ1dHRvbkNlbnRlciA9IGlucHV0PEFycmF5PElQYWdlc1RlbXBsYXRlRnVsbFNjcmVlbkJ1dHRvbj4gfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGJ1dHRvblJpZ2h0ID0gaW5wdXQ8QXJyYXk8SVBhZ2VzVGVtcGxhdGVGdWxsU2NyZWVuQnV0dG9uPj4oKTtcbiAgcmVhZG9ubHkgaGFzRWRpdCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgbWVudURyb3BEb3duQ29uZmlncyA9IGlucHV0PElEcm9wZG93bj4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDEwMDAsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gMTAwMCB9KTtcbiAgcmVhZG9ubHkgaWdub3JlQ2xvc2VQYWdlRnVsbEV2ZW50ID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGlnbm9yZUJhY2tncm91bmRDb2xvciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRpdmlkZUNsYXNzSGVhZGVyID0gaW5wdXQ8eyBjbGFzc0J1dHRvbkNhbmNlbDogc3RyaW5nOyBjbGFzc0J1dHRvbkNlbnRlcjogc3RyaW5nOyBjbGFzc0J1dHRvblJpZ2h0OiBzdHJpbmcgfSB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgY2VudGVyVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4gfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlUmlnaHQgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4gfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGxlZnRUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPiB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IGZhbHNlIH0pO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiAtLS0gSU5QVVRTICht4bubaSB0cm9uZyBWMikgLS0tXG4gIC8qKiBDb25maWcgbGF6eSBsb2FkIGNvbXBvbmVudCB2w6BvIGJvZHkuIE7hur91IGtow7RuZyB0cnV54buBbiBnZXRDb21wb25lbnRPdXRsZXQg4oaSIHThu7EgxJHhu5luZyBkw7luZyBuZy1jb250ZW50LiAqL1xuICByZWFkb25seSBib2R5Q29uZmlnID0gaW5wdXQ8SUZ1bGxTY3JlZW5WMkJvZHlDb25maWcsIElGdWxsU2NyZWVuVjJCb2R5Q29uZmlnIHwgdW5kZWZpbmVkPih7fSwgeyB0cmFuc2Zvcm06ICh2KSA9PiB2IHx8IHt9IH0pO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiAtLS0gT1VUUFVUUyAtLS1cbiAgcmVhZG9ubHkgb3V0Q2xvc2UgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb3V0RWRpdCA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSBvdXRTZWxlY3RlZE1lbnVEcm9wZG93biA9IG91dHB1dDxJRW1pdFNlbGVjdEtleSB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgb3V0Q2xpY2tCdXR0b24gPSBvdXRwdXQ8SVBhZ2VzVGVtcGxhdGVGdWxsU2NyZWVuQnV0dG9uPigpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiAtLS0gSU5URVJOQUwgU1RBVEUgLS0tXG4gIHByaXZhdGUgcmVhZG9ubHkgaWRPdmVybGF5ID0gc2lnbmFsPHN0cmluZz4odXVpZCgpKS5hc1JlYWRvbmx5KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgcHJpdmF0ZSBmdW5jdGlvbkNvbnRyb2xNZW51OiBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZDtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gLS0tIENPTVBVVEVEIC0tLVxuICAvKiogU3RhdGUgcmVhY3RpdmUgxJHhu4MgdHJ1eeG7gW4gdsOgbyBjb21wb25lbnQgb3V0bGV0ICovXG4gIHByb3RlY3RlZCByZWFkb25seSBzZWN0aW9uRGF0YSA9IGNvbXB1dGVkPElGdWxsU2NyZWVuVjJTZWN0aW9uRGF0YT4oKCkgPT4gKHtcbiAgICBkaXNhYmxlOiB0aGlzLmRpc2FibGUoKSxcbiAgfSkpO1xuXG4gIC8qKiBTa2VsZXRvbiBib2R5IOKAlCBmYWxsYmFjayB24buBIGNvbmZpZyBt4bq3YyDEkeG7i25oIG7hur91IGtow7RuZyDEkcaw4bujYyB0cnV54buBbiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVzb2x2ZWRTa2VsZXRvbkJvZHk6IFNpZ25hbDxJU2tlbGV0b25Db25maWc+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICBnZXQodGhpcy5ib2R5Q29uZmlnLCAnc2tlbGV0b25Db25maWcnKSA/PyB7XG4gICAgICAgIHJlcGVhdDogMyxcbiAgICAgICAgc3R5bGVNYXJnaW5Cb3R0b206IDE2LFxuICAgICAgICByb3dzOiBbeyBpdGVtOiB7IGNsYXNzSW5jbHVkZTogJ3ctZnVsbCBoLVsxMjBweF0gcm91bmRlZC1bOHB4XScgfSB9XSxcbiAgICAgIH1cbiAgICApO1xuICB9KTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pZ25vcmVDbG9zZVBhZ2VGdWxsRXZlbnQoKSkge1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgdHlwZTogVXRpbHNDb21tdW5pY2F0ZU1pY3JvS2V5R2xvYmFsLktFWV9NRVNTQUdFX01PREFMLFxuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIG1lc3NhZ2U6ICdvcGVuJyxcbiAgICAgICAgICBzdGF0ZTogdHJ1ZSxcbiAgICAgICAgICBpZE92ZXJsYXk6IHRoaXMuaWRPdmVybGF5KCksXG4gICAgICAgICAgdGltZUxpdmVVcGRhdGU6IGdldERheWpzKCkudW5peCgpLFxuICAgICAgICAgIGlnbm9yZUludGVydmFsVXBkYXRlVGltZUxpdmVFdmVudDogVXRpbHNDb21tdW5pY2F0ZU1pY3JvS2V5R2xvYmFsLklHTk9SRV9JTlRFUlZBTF9VUERBVEVfVElNRV9MSVZFX0VWRU5UX01PREFMLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgVXRpbHNDb21tdW5pY2F0ZU1pY3JvLlBvc3RNZXNzYWdlVG9QYXJlbnQoZGF0YSk7XG5cbiAgICAgIGlmICghVXRpbHNDb21tdW5pY2F0ZU1pY3JvS2V5R2xvYmFsLklHTk9SRV9JTlRFUlZBTF9VUERBVEVfVElNRV9MSVZFX0VWRU5UX01PREFMKSB7XG4gICAgICAgIGludGVydmFsKDIwMDApXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBkYXRhLnJlc3BvbnNlLnRpbWVMaXZlVXBkYXRlID0gZ2V0RGF5anMoKS51bml4KCk7XG4gICAgICAgICAgICBVdGlsc0NvbW11bmljYXRlTWljcm8uUG9zdE1lc3NhZ2VUb1BhcmVudChkYXRhKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAjcmVnaW9uIC0tLSBFVkVOVCBIQU5ETEVSUyAtLS1cbiAgcHJvdGVjdGVkIGhhbmRsZXJFZGl0KCkge1xuICAgIHRoaXMub3V0RWRpdC5lbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuY2VsKCkge1xuICAgIHRoaXMub3V0Q2xvc2UuZW1pdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJDbGlja0J1dHRvbihidXR0b246IElQYWdlc1RlbXBsYXRlRnVsbFNjcmVlbkJ1dHRvbikge1xuICAgIGlmIChidXR0b24gJiYgYnV0dG9uLmFjdGlvbikge1xuICAgICAgYXdhaXQgYnV0dG9uLmFjdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLm91dENsaWNrQnV0dG9uLmVtaXQoYnV0dG9uKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU3dpdGNoKGV2ZW50OiBJU3dpdGNoRXZlbnQsIGJ1dHRvbjogSVBhZ2VzVGVtcGxhdGVGdWxsU2NyZWVuQnV0dG9uKSB7XG4gICAgaWYgKGJ1dHRvbiAmJiBidXR0b24uYWN0aW9uKSB7XG4gICAgICBhd2FpdCBidXR0b24uYWN0aW9uKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNlbGVjdGVkS2V5KGV2ZW50OiBJRW1pdFNlbGVjdEtleSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMub3V0U2VsZWN0ZWRNZW51RHJvcGRvd24uZW1pdChldmVudCk7XG4gICAgdGhpcy5mdW5jdGlvbkNvbnRyb2xNZW51Py5yZXNldCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDb250cm9sRHJvcGRvd25NZW51KGV2ZW50OiBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMuZnVuY3Rpb25Db250cm9sTWVudSA9IGV2ZW50O1xuICB9XG4gIC8vICNlbmRyZWdpb25cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaWdub3JlQ2xvc2VQYWdlRnVsbEV2ZW50KCkpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIHR5cGU6IFV0aWxzQ29tbXVuaWNhdGVNaWNyb0tleUdsb2JhbC5LRVlfTUVTU0FHRV9NT0RBTCxcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICBtZXNzYWdlOiAnY2xvc2UnLFxuICAgICAgICAgIHN0YXRlOiBmYWxzZSxcbiAgICAgICAgICBpZE92ZXJsYXk6IHRoaXMuaWRPdmVybGF5KCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgVXRpbHNDb21tdW5pY2F0ZU1pY3JvLlBvc3RNZXNzYWdlVG9QYXJlbnQoZGF0YSk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwibGlicy11aS1jb21wb25lbnRzLXBhZ2VfZnVsbCBvdmVyZmxvdy1oaWRkZW5cIlxuICBbc3R5bGUuekluZGV4XT1cInpJbmRleCgpXCJcbiAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaWdub3JlQmFja2dyb3VuZENvbG9yKCkgPyAndHJhbnNwYXJlbnQnIDogJyNmMmY1ZjcnXCI+XG4gIDwhLS0gPT09PT09PT09PT09PT09PT09PT09IEhFQURFUiAoZ2nhu68gbmd1ecOqbiAxMDAlIHThu6sgVjEpID09PT09PT09PT09PT09PT09PT09PSAtLT5cbiAgPGRpdiBbY2xhc3NdPVwiJ2xpYnMtdWktY29tcG9uZW50cy1wYWdlX2Z1bGwtaGVhZGVyICcgKyBjbGFzc0hlYWRlckluY2x1ZGUoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ7eyBkaXZpZGVDbGFzc0hlYWRlcigpPy5jbGFzc0J1dHRvbkNhbmNlbCB8fCAndy1bMjUlXScgfX1cIj5cbiAgICAgIEBpZiAobGVmdFRlbXBsYXRlKCk7IGFzIGxlZnRUZW1wbGF0ZSkge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGVmdFRlbXBsYXRlXCIgLz5cbiAgICAgIH1cbiAgICAgIEBpZiAobGFiZWxMZWZ0KCk7IGFzIGxhYmVsTGVmdCkge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cImxhYmVsTGVmdFwiXG4gICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWNoZXZyb24tcmlnaHQgcm90YXRlLVsxODBkZWddIGJlZm9yZTp0ZXh0LVsxNnB4XSdcIlxuICAgICAgICAgIFtjbGFzc0xhYmVsXT1cIidsaWJzLXVpLWZvbnQtaDRyJ1wiXG4gICAgICAgICAgKG91dENsaWNrKT1cImNhbmNlbCgpXCIgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoY2VudGVyVGVtcGxhdGUoKTsgYXMgY2VudGVyVGVtcGxhdGUpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJ7eyBkaXZpZGVDbGFzc0hlYWRlcigpPy5jbGFzc0J1dHRvbkNlbnRlciB8fCAndy1bNDAlXScgfX0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbnRlclRlbXBsYXRlXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGRpdiBjbGFzcz1cInt7IGRpdmlkZUNsYXNzSGVhZGVyKCk/LmNsYXNzQnV0dG9uQ2VudGVyIHx8ICd3LVs0MCVdJyB9fSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgW2NvbmZpZ109XCJ7IG1heFdpZHRoOiAyNTAsIHpJbmRleDogekluZGV4KCkgKyAxIH1cIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ2xpYnMtdWktZm9udC1oMnMnXCJcbiAgICAgICAgICBbaW5uZXJIdG1sXT1cInRpdGxlKCkgPyAodGl0bGUoKSB8IExpYnNVaVBpcGVzRXNjYXBlSHRtbFBpcGUpIDogJyZtZGFzaDsnXCIgLz5cbiAgICAgICAgQGlmIChoYXNFZGl0KCk7IGFzIGhhc0VkaXQpIHtcbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLWxpbmstcHJpbWFyeSdcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJFZGl0KClcIlxuICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tZWRpdC1saW5lJ1wiXG4gICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidtbC1bNHB4XSdcIiAvPlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKGJ1dHRvbiBvZiBidXR0b25DZW50ZXIoKTsgdHJhY2sgYnV0dG9uLmtleSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC1bMTJweF0gZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIEBpZiAoYnV0dG9uLmtleSA9PT0gJ2J1dHRvbicpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJidXR0b24ubGFiZWwgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0xhYmVsXT1cIihidXR0b24uY2xhc3NMYWJlbCB8fCAnJykgKyAnIGxpYnMtdWktZm9udC1oZWFkLTRzJ1wiXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwiYnV0dG9uLnR5cGUgfHwgJ2J1dHRvbi1wcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJidXR0b24uY2xhc3NJbmNsdWRlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCJidXR0b24uY2xhc3NJY29uTGVmdCB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzSWNvblJpZ2h0XT1cImJ1dHRvbi5jbGFzc0ljb25SaWdodCB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwiYnV0dG9uLnBvcG92ZXIgfHwge31cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cImJ1dHRvbi5kaXNhYmxlIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgICAgICAgW2lzUGVuZGluZ109XCJidXR0b24uaXNQZW5kaW5nIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsaWNrQnV0dG9uKGJ1dHRvbilcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChidXR0b24ua2V5ID09PSAnYnV0dG9uLXN0YXR1cycgJiYgYnV0dG9uLmNvbmZpZ0J1dHRvblN0YXR1cykge1xuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtc3RhdHVzXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImJ1dHRvbi5jbGFzc0luY2x1ZGVcIlxuICAgICAgICAgICAgICAgIFtjb25maWddPVwiYnV0dG9uLmNvbmZpZ0J1dHRvblN0YXR1c1wiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGJ1dHRvbi5rZXkgPT09ICdzd2l0Y2gnKSB7XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc3dpdGNoXG4gICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJidXR0b24uYWN0aXZlIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJidXR0b24uZGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgYnV0dG9uLmNsYXNzSW5jbHVkZSB9fVwiXG4gICAgICAgICAgICAgICAgKG91dFN3aXRjaCk9XCJoYW5kbGVyU3dpdGNoKCRldmVudCwgYnV0dG9uKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGJ1dHRvbi5rZXkgPT09ICdsYWJlbCcgJiYgYnV0dG9uLmxhYmVsQ29uZmlnKSB7XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGFiZWxcbiAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5jbGFzc0luY2x1ZGUgKyAnIHBiLTAgdGV4dC13aGl0ZSdcIlxuICAgICAgICAgICAgICAgIFtsYWJlbExlZnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxhYmVsTGVmdFwiXG4gICAgICAgICAgICAgICAgW2xhYmVsTGVmdENsYXNzXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbExlZnRDbGFzc1wiXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5yZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgW2xhYmVsUmlnaHRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxhYmVsUmlnaHRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbFJpZ2h0Q2xhc3NdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxhYmVsUmlnaHRDbGFzc1wiXG4gICAgICAgICAgICAgICAgW29ubHlTaG93Q291bnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgICAgICAgICAgIFtidXR0b25zTGVmdF09XCJidXR0b24ubGFiZWxDb25maWcuYnV0dG9uc0xlZnRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlQnV0dG9uc0xlZnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zTGVmdFwiXG4gICAgICAgICAgICAgICAgW2J1dHRvbnNSaWdodF09XCJidXR0b24ubGFiZWxDb25maWcuYnV0dG9uc1JpZ2h0XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZUJ1dHRvbnNSaWdodF09XCJidXR0b24ubGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNSaWdodFwiXG4gICAgICAgICAgICAgICAgW2hhc1RvZ2dsZV09XCJidXR0b24ubGFiZWxDb25maWcuaGFzVG9nZ2xlXCJcbiAgICAgICAgICAgICAgICBbdG9nZ2xlQWN0aXZlXT1cImJ1dHRvbi5sYWJlbENvbmZpZy50b2dnbGVBY3RpdmVcIlxuICAgICAgICAgICAgICAgIFt0b2dnbGVEaXNhYmxlXT1cImJ1dHRvbi5sYWJlbENvbmZpZy50b2dnbGVEaXNhYmxlXCJcbiAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJidXR0b24ubGFiZWxDb25maWcucG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgW2ljb25Qb3BvdmVyQ2xhc3NdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmljb25Qb3BvdmVyQ2xhc3NcIlxuICAgICAgICAgICAgICAgIFtsaW1pdExlbmd0aF09XCJidXR0b24ubGFiZWxDb25maWcubGltaXRMZW5ndGhcIlxuICAgICAgICAgICAgICAgIFtidXR0b25zRGVzY3JpcHRpb25dPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVCdXR0b25zRGVzY3JpcHRpb25dPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIFtidXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc109XCJidXR0b24ubGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NcIlxuICAgICAgICAgICAgICAgIFtjb3VudF09XCJidXR0b24ubGFiZWxDb25maWcuY291bnRcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8ZGl2IGNsYXNzPVwie3sgZGl2aWRlQ2xhc3NIZWFkZXIoKT8uY2xhc3NCdXR0b25SaWdodCB8fCAndy1bMzUlXScgfX0gZmxleCBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgIEBmb3IgKGJ1dHRvbiBvZiBidXR0b25SaWdodCgpOyB0cmFjayBidXR0b24ua2V5KSB7XG4gICAgICAgIDxkaXYgW2NsYXNzLm1sLVsxMnB4XV09XCIhJGZpcnN0XCI+XG4gICAgICAgICAgQGlmIChidXR0b24ua2V5ID09PSAnbGFiZWwnICYmIGJ1dHRvbi5sYWJlbENvbmZpZykge1xuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1sYWJlbFxuICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5jbGFzc0luY2x1ZGUgKyAnIHBiLTAnXCJcbiAgICAgICAgICAgICAgW2xhYmVsTGVmdF09XCJidXR0b24ubGFiZWxDb25maWcubGFiZWxMZWZ0XCJcbiAgICAgICAgICAgICAgW2xhYmVsTGVmdENsYXNzXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbExlZnRDbGFzc1wiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJidXR0b24ubGFiZWxDb25maWcucmVxdWlyZWRcIlxuICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgW2xhYmVsUmlnaHRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxhYmVsUmlnaHRcIlxuICAgICAgICAgICAgICBbbGFiZWxSaWdodENsYXNzXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbFJpZ2h0Q2xhc3NcIlxuICAgICAgICAgICAgICBbb25seVNob3dDb3VudF09XCJidXR0b24ubGFiZWxDb25maWcub25seVNob3dDb3VudFwiXG4gICAgICAgICAgICAgIFtidXR0b25zTGVmdF09XCJidXR0b24ubGFiZWxDb25maWcuYnV0dG9uc0xlZnRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZUJ1dHRvbnNMZWZ0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0xlZnRcIlxuICAgICAgICAgICAgICBbYnV0dG9uc1JpZ2h0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5idXR0b25zUmlnaHRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZUJ1dHRvbnNSaWdodF09XCJidXR0b24ubGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNSaWdodFwiXG4gICAgICAgICAgICAgIFtoYXNUb2dnbGVdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmhhc1RvZ2dsZVwiXG4gICAgICAgICAgICAgIFt0b2dnbGVBY3RpdmVdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLnRvZ2dsZUFjdGl2ZVwiXG4gICAgICAgICAgICAgIFt0b2dnbGVEaXNhYmxlXT1cImJ1dHRvbi5sYWJlbENvbmZpZy50b2dnbGVEaXNhYmxlXCJcbiAgICAgICAgICAgICAgW3BvcG92ZXJdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLnBvcG92ZXJcIlxuICAgICAgICAgICAgICBbaWNvblBvcG92ZXJDbGFzc109XCJidXR0b24ubGFiZWxDb25maWcuaWNvblBvcG92ZXJDbGFzc1wiXG4gICAgICAgICAgICAgIFtsaW1pdExlbmd0aF09XCJidXR0b24ubGFiZWxDb25maWcubGltaXRMZW5ndGhcIlxuICAgICAgICAgICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICBbZGlzYWJsZUJ1dHRvbnNEZXNjcmlwdGlvbl09XCJidXR0b24ubGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNEZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgIFtidXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc109XCJidXR0b24ubGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NcIlxuICAgICAgICAgICAgICBbY291bnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmNvdW50XCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChidXR0b24ua2V5ID09PSAnc3dpdGNoJykge1xuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1zd2l0Y2hcbiAgICAgICAgICAgICAgW2FjdGl2ZV09XCJidXR0b24uYWN0aXZlIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiYnV0dG9uLmRpc2FibGUgfHwgZGlzYWJsZSgpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBidXR0b24uY2xhc3NJbmNsdWRlIH19XCJcbiAgICAgICAgICAgICAgKG91dFN3aXRjaCk9XCJoYW5kbGVyU3dpdGNoKCRldmVudCwgYnV0dG9uKVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoYnV0dG9uLmtleSA9PT0gJ2J1dHRvbicpIHtcbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgW2xhYmVsXT1cImJ1dHRvbj8ubGFiZWwgfHwgJydcIlxuICAgICAgICAgICAgICBbY2xhc3NMYWJlbF09XCIoYnV0dG9uLmNsYXNzTGFiZWwgfHwgJycpICsgJyBsaWJzLXVpLWZvbnQtaDRzJ1wiXG4gICAgICAgICAgICAgIFt0eXBlXT1cImJ1dHRvbi50eXBlIHx8ICdidXR0b24tcHJpbWFyeSdcIlxuICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImJ1dHRvbi5jbGFzc0luY2x1ZGUgfHwgJydcIlxuICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCJidXR0b24uY2xhc3NJY29uTGVmdCB8fCAnJ1wiXG4gICAgICAgICAgICAgIFtjbGFzc0ljb25SaWdodF09XCJidXR0b24uY2xhc3NJY29uUmlnaHQgfHwgJydcIlxuICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJidXR0b24ucG9wb3ZlciB8fCB7fVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cImJ1dHRvbi5kaXNhYmxlIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgICAgIFtpc1BlbmRpbmddPVwiYnV0dG9uLmlzUGVuZGluZyB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgIFtpY29uT25seVR5cGVdPVwiYnV0dG9uLmljb25Pbmx5VHlwZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQ2xpY2tCdXR0b24oYnV0dG9uKVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoYnV0dG9uLmtleSA9PT0gJ2xpbmUtc3BhY2UnKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiYmctWyM2NjZiNzldIHctWzFweF0gaC1bMjhweF1cIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiYnV0dG9uLmNsYXNzSW5jbHVkZVwiPlxuICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKG1lbnVEcm9wRG93bkNvbmZpZ3MoKTsgYXMgbWVudURyb3BEb3duQ29uZmlncykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibWwtWzEycHhdXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kcm9wZG93blxuICAgICAgICAgICAgW2lzTmdDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKSArIDFcIlxuICAgICAgICAgICAgW2xpc3RDb25maWddPVwibWVudURyb3BEb3duQ29uZmlncy5saXN0Q29uZmlnXCJcbiAgICAgICAgICAgIFtsaXN0SGlkZGVuSW5wdXRTZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcG9wb3ZlckN1c3RvbUNvbmZpZ109XCJtZW51RHJvcERvd25Db25maWdzLnBvcG92ZXJDdXN0b21Db25maWdcIlxuICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckNvbnRyb2xEcm9wZG93bk1lbnUoJGV2ZW50KVwiXG4gICAgICAgICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZXJTZWxlY3RlZEtleSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3AtWzhweF0nXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi10aGlyZCdcIlxuICAgICAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLW1vcmUtdmVydGljYWwgdGV4dC1bIzMzMzMzM10gdGV4dC1bMTJweF0nXCJcbiAgICAgICAgICAgICAgW3BvcG92ZXJdPVwieyBjb25maWc6IHsgY29udGVudDogJ2kxOG5fNHhfb3RoZXJfb3BlcmF0aW9ucycgfSB9XCJcbiAgICAgICAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cInRydWVcIiAvPlxuICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAodGVtcGxhdGVSaWdodCgpOyBhcyB0ZW1wbGF0ZVJpZ2h0KSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVJpZ2h0XCIgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT0gQk9EWSAoVjI6IExhenkgTG9hZCBob+G6t2MgbmctY29udGVudCkgPT09PT09PT09PT09PT09PT09PT09IC0tPlxuICBAaWYgKGJvZHlDb25maWcoKS5nZXRDb21wb25lbnRPdXRsZXQ7IGFzIGdldEJvZHlDb21wb25lbnRPdXRsZXQpIHtcbiAgICA8IS0tIExhenkgbG9hZCBtb2RlIC0tPlxuICAgIDxkaXYgW2NsYXNzXT1cIidsaWJzLXVpLWNvbXBvbmVudHMtcGFnZV9mdWxsLWJvZHkgJyArIChib2R5Q29uZmlnKCkuY2xhc3NJbmNsdWRlIHx8ICcnKVwiPlxuICAgICAgQGxldCBjb25zdEh0bWxDb21wQm9keSA9IHVuZGVmaW5lZCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGdldEJvZHlDb21wb25lbnRPdXRsZXQgOiBzZWN0aW9uRGF0YSgpIDogbnVsbCA6IHsgdmFsdWVJc0VtcHR5OiBudWxsIH0gfCBhc3luYztcbiAgICAgIEBsZXQgY29uc3RIdG1sSW5wdXRzQm9keSA9IHVuZGVmaW5lZCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6IGJvZHlDb25maWcoKS5nZXREYXRhQ29tcG9uZW50T3V0bGV0IDogc2VjdGlvbkRhdGEoKSA6IG51bGwgOiB7IHZhbHVlSXNFbXB0eTogbnVsbCB9IHwgYXN5bmM7XG4gICAgICBAaWYgKGNvbnN0SHRtbENvbXBCb2R5KSB7XG4gICAgICAgIEBkZWZlciB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJjb25zdEh0bWxDb21wQm9keTsgaW5wdXRzOiBjb25zdEh0bWxJbnB1dHNCb2R5XCIgLz5cbiAgICAgICAgfSBAbG9hZGluZyB7XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1za2VsZXRvbiBbY29uZmlnXT1cInJlc29sdmVkU2tlbGV0b25Cb2R5KClcIiAvPlxuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1za2VsZXRvbiBbY29uZmlnXT1cInJlc29sdmVkU2tlbGV0b25Cb2R5KClcIiAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==
@@ -44,6 +44,7 @@ export class LibsUiComponentsPagesTemplateFullScreenComponent {
44
44
  state: true,
45
45
  idOverlay: this.idOverlay(),
46
46
  timeLiveUpdate: getDayjs().unix(),
47
+ ignoreIntervalUpdateTimeLiveEvent: UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL,
47
48
  },
48
49
  };
49
50
  UtilsCommunicateMicro.PostMessageToParent(data);
@@ -114,4 +115,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
114
115
  LibsUiComponentsLabelComponent,
115
116
  ], providers: [], template: "<div\n class=\"libs-ui-components-page_full overflow-hidden\"\n [style.zIndex]=\"zIndex()\"\n [style.background-color]=\"ignoreBackgroundColor() ? 'transparent' : '#f2f5f7'\">\n <div [class]=\"'libs-ui-components-page_full-header ' + classHeaderInclude()\">\n <div class=\"{{ divideClassHeader()?.classButtonCancel || 'w-[25%]' }}\">\n @if (leftTemplate(); as leftTemplate) {\n <ng-container *ngTemplateOutlet=\"leftTemplate\" />\n }\n @if (labelLeft(); as labelLeft) {\n <libs_ui-components-buttons-button\n [label]=\"labelLeft\"\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px]'\"\n [classLabel]=\"'libs-ui-font-h4r'\"\n (outClick)=\"cancel()\" />\n }\n </div>\n\n @if (centerTemplate(); as centerTemplate) {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <ng-container *ngTemplateOutlet=\"centerTemplate\" />\n </div>\n } @else {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{\n maxWidth: 250,\n zIndex: zIndex() + 1,\n }\"\n [classInclude]=\"'libs-ui-font-h2s'\"\n [innerHtml]=\"title() ? (title() | LibsUiPipesEscapeHtmlPipe) : '&mdash;'\" />\n\n @if (hasEdit(); as hasEdit) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n (outClick)=\"handlerEdit()\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'ml-[4px]'\" />\n }\n @for (button of buttonCenter(); track button.key) {\n <div class=\"ml-[12px] flex items-center\">\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-head-4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'button-status' && button.configButtonStatus) {\n <libs_ui-components-buttons-status\n [class]=\"button.classInclude\"\n [config]=\"button.configButtonStatus\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0 text-white'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n </div>\n }\n </div>\n }\n\n <div class=\"{{ divideClassHeader()?.classButtonRight || 'w-[35%]' }} flex justify-end items-center\">\n @for (button of buttonRight(); track button.key) {\n <div [class.ml-[12px]]=\"!$first\">\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button?.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-h4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n [iconOnlyType]=\"button.iconOnlyType || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n <!-- th\u00EAm \u0111\u01B0\u1EDDng ph\u00E2n c\u00E1ch -->\n @if (button.key === 'line-space') {\n <div\n class=\"bg-[#666b79] w-[1px] h-[28px]\"\n [class]=\"button.classInclude\">\n &nbsp;\n </div>\n }\n </div>\n }\n @if (menuDropDownConfigs(); as menuDropDownConfigs) {\n <div class=\"ml-[12px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [listConfig]=\"menuDropDownConfigs.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"menuDropDownConfigs.popoverCustomConfig\"\n (outFunctionsControl)=\"handlerControlDropdownMenu($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\">\n <libs_ui-components-buttons-button\n [classInclude]=\"'p-[8px]'\"\n [type]=\"'button-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px]'\"\n [popover]=\"{\n config: {\n content: 'i18n_4x_other_operations',\n },\n }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n </div>\n }\n @if (templateRight(); as templateRight) {\n <ng-container *ngTemplateOutlet=\"templateRight\" />\n }\n </div>\n </div>\n <div [class]=\"'libs-ui-components-page_full-body ' + classBodyInclude()\">\n <ng-content />\n </div>\n</div>\n", styles: ["@-webkit-keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:0;opacity:1}}.libs-ui-components-page_full{position:absolute;width:100vw;height:100vh;left:0;top:0;display:flex;flex-direction:column;animation:animation-slide-to-left ease-out .3s}.libs-ui-components-page_full .libs-ui-components-page_full-header{height:50px;padding:14px 16px;border-bottom:solid 1px #e6e7ea;background-color:#fff;width:100%;display:flex;align-items:center}.libs-ui-components-page_full .libs-ui-components-page_full-body{height:100%}\n"] }]
116
117
  }] });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbC1zY3JlZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3BhZ2VzLXRlbXBsYXRlL2Z1bGwtc2NyZWVuL3NyYy9mdWxsLXNjcmVlbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcGFnZXMtdGVtcGxhdGUvZnVsbC1zY3JlZW4vc3JjL2Z1bGwtc2NyZWVuLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBNEQsaUNBQWlDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzSSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQWdCLCtCQUErQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFM0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSw4QkFBOEIsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxD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cUJBQXFCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7d0dBcEdVLGdEQUFnRDs0RkFBaEQsZ0RBQWdELDgvRUFGaEQsRUFBRSwwQkNoQ2YsMGhUQWtNQSxtcUJENUtJLGVBQWUsK0JBQ2YsZ0JBQWdCLG9KQUNoQixpQ0FBaUMsdTNEQUNqQywrQkFBK0IscUpBQy9CLHNDQUFzQyxzakJBQ3RDLHNDQUFzQyxrR0FDdEMsZ0NBQWdDLCtmQUNoQyx5QkFBeUIsa0VBQ3pCLDhCQUE4Qjs7NEZBSXJCLGdEQUFnRDtrQkFuQjVELFNBQVM7K0JBRUUsK0NBQStDLGNBRzdDLElBQUksV0FDUDt3QkFDUCxlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsaUNBQWlDO3dCQUNqQywrQkFBK0I7d0JBQy9CLHNDQUFzQzt3QkFDdEMsc0NBQXNDO3dCQUN0QyxnQ0FBZ0M7d0JBQ2hDLHlCQUF5Qjt3QkFDekIsOEJBQThCO3FCQUMvQixhQUNVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc1N0YXR1c0NvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1zdGF0dXMnO1xuaW1wb3J0IHsgSURyb3Bkb3duLCBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCwgSUVtaXRTZWxlY3RLZXksIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtZHJvcGRvd24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1sYWJlbCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBJU3dpdGNoRXZlbnQsIExpYnNVaUNvbXBvbmVudHNTd2l0Y2hDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXN3aXRjaCc7XG5pbXBvcnQgeyBUWVBFX1RFTVBMQVRFX1JFRiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNFc2NhcGVIdG1sUGlwZSB9IGZyb20gJ0BsaWJzLXVpL3BpcGVzLWVzY2FwZS1odG1sJztcbmltcG9ydCB7IGdldERheWpzLCBVdGlsc0NvbW11bmljYXRlTWljcm8sIFV0aWxzQ29tbXVuaWNhdGVNaWNyb0tleUdsb2JhbCwgdXVpZCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgaW50ZXJ2YWwsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSVBhZ2VzVGVtcGxhdGVGdWxsU2NyZWVuQnV0dG9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbmZpZy5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtcGFnZXNfdGVtcGxhdGVfZnVsbF9zY3JlZW4nLFxuICB0ZW1wbGF0ZVVybDogJy4vZnVsbC1zY3JlZW4uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mdWxsLXNjcmVlbi5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNTd2l0Y2hDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNTdGF0dXNDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gICAgTGlic1VpUGlwZXNFc2NhcGVIdG1sUGlwZSxcbiAgICBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW10sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNQYWdlc1RlbXBsYXRlRnVsbFNjcmVlbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBpZE92ZXJsYXkgPSBzaWduYWw8c3RyaW5nPih1dWlkKCkpO1xuICBwcml2YXRlIGZ1bmN0aW9uQ29udHJvbE1lbnU6IElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgY2xhc3NIZWFkZXJJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBsYWJlbExlZnQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ2kxOG5fYmFja190b19saXN0JywgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAnaTE4bl9iYWNrX3RvX2xpc3QnIH0pO1xuICByZWFkb25seSBjbGFzc0JvZHlJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSB0aXRsZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgYnV0dG9uQ2VudGVyID0gaW5wdXQ8QXJyYXk8SVBhZ2VzVGVtcGxhdGVGdWxsU2NyZWVuQnV0dG9uPiB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgYnV0dG9uUmlnaHQgPSBpbnB1dDxBcnJheTxJUGFnZXNUZW1wbGF0ZUZ1bGxTY3JlZW5CdXR0b24+PigpO1xuICByZWFkb25seSBoYXNFZGl0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBtZW51RHJvcERvd25Db25maWdzID0gaW5wdXQ8SURyb3Bkb3duPigpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAwMCwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAxMDAwIH0pO1xuICByZWFkb25seSBpZ25vcmVDbG9zZVBhZ2VGdWxsRXZlbnQgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgaWdub3JlQmFja2dyb3VuZENvbG9yID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZGl2aWRlQ2xhc3NIZWFkZXIgPSBpbnB1dDx7IGNsYXNzQnV0dG9uQ2FuY2VsOiBzdHJpbmc7IGNsYXNzQnV0dG9uQ2VudGVyOiBzdHJpbmc7IGNsYXNzQnV0dG9uUmlnaHQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBjZW50ZXJUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPiB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgdGVtcGxhdGVSaWdodCA9IGlucHV0PFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPiB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgbGVmdFRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gZmFsc2UgfSk7XG5cbiAgcmVhZG9ubHkgb3V0Q2xvc2UgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb3V0RWRpdCA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSBvdXRTZWxlY3RlZE1lbnVEcm9wZG93biA9IG91dHB1dDxJRW1pdFNlbGVjdEtleSB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgb3V0Q2xpY2tCdXR0b24gPSBvdXRwdXQ8SVBhZ2VzVGVtcGxhdGVGdWxsU2NyZWVuQnV0dG9uPigpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pZ25vcmVDbG9zZVBhZ2VGdWxsRXZlbnQoKSkge1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgdHlwZTogVXRpbHNDb21tdW5pY2F0ZU1pY3JvS2V5R2xvYmFsLktFWV9NRVNTQUdFX01PREFMLFxuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIG1lc3NhZ2U6ICdvcGVuJyxcbiAgICAgICAgICBzdGF0ZTogdHJ1ZSxcbiAgICAgICAgICBpZE92ZXJsYXk6IHRoaXMuaWRPdmVybGF5KCksXG4gICAgICAgICAgdGltZUxpdmVVcGRhdGU6IGdldERheWpzKCkudW5peCgpLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgVXRpbHNDb21tdW5pY2F0ZU1pY3JvLlBvc3RNZXNzYWdlVG9QYXJlbnQoZGF0YSk7XG5cbiAgICAgIGlmIChVdGlsc0NvbW11bmljYXRlTWljcm9LZXlHbG9iYWwuSUdOT1JFX0lOVEVSVkFMX1VQREFURV9USU1FX0xJVkVfRVZFTlRfTU9EQUwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpbnRlcnZhbCgyMDAwKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBkYXRhLnJlc3BvbnNlLnRpbWVMaXZlVXBkYXRlID0gZ2V0RGF5anMoKS51bml4KCk7XG5cbiAgICAgICAgICBVdGlsc0NvbW11bmljYXRlTWljcm8uUG9zdE1lc3NhZ2VUb1BhcmVudChkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJFZGl0KCkge1xuICAgIHRoaXMub3V0RWRpdC5lbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuY2VsKCkge1xuICAgIHRoaXMub3V0Q2xvc2UuZW1pdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJDbGlja0J1dHRvbihidXR0b246IElQYWdlc1RlbXBsYXRlRnVsbFNjcmVlbkJ1dHRvbikge1xuICAgIGlmIChidXR0b24gJiYgYnV0dG9uLmFjdGlvbikge1xuICAgICAgYXdhaXQgYnV0dG9uLmFjdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLm91dENsaWNrQnV0dG9uLmVtaXQoYnV0dG9uKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU3dpdGNoKGV2ZW50OiBJU3dpdGNoRXZlbnQsIGJ1dHRvbjogSVBhZ2VzVGVtcGxhdGVGdWxsU2NyZWVuQnV0dG9uKSB7XG4gICAgaWYgKGJ1dHRvbiAmJiBidXR0b24uYWN0aW9uKSB7XG4gICAgICBhd2FpdCBidXR0b24uYWN0aW9uKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNlbGVjdGVkS2V5KGV2ZW50OiBJRW1pdFNlbGVjdEtleSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMub3V0U2VsZWN0ZWRNZW51RHJvcGRvd24uZW1pdChldmVudCk7XG4gICAgdGhpcy5mdW5jdGlvbkNvbnRyb2xNZW51Py5yZXNldCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDb250cm9sRHJvcGRvd25NZW51KGV2ZW50OiBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMuZnVuY3Rpb25Db250cm9sTWVudSA9IGV2ZW50O1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gICAgaWYgKCF0aGlzLmlnbm9yZUNsb3NlUGFnZUZ1bGxFdmVudCgpKSB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICB0eXBlOiBVdGlsc0NvbW11bmljYXRlTWljcm9LZXlHbG9iYWwuS0VZX01FU1NBR0VfTU9EQUwsXG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgbWVzc2FnZTogJ2Nsb3NlJyxcbiAgICAgICAgICBzdGF0ZTogZmFsc2UsXG4gICAgICAgICAgaWRPdmVybGF5OiB0aGlzLmlkT3ZlcmxheSgpLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgVXRpbHNDb21tdW5pY2F0ZU1pY3JvLlBvc3RNZXNzYWdlVG9QYXJlbnQoZGF0YSk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwibGlicy11aS1jb21wb25lbnRzLXBhZ2VfZnVsbCBvdmVyZmxvdy1oaWRkZW5cIlxuICBbc3R5bGUuekluZGV4XT1cInpJbmRleCgpXCJcbiAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaWdub3JlQmFja2dyb3VuZENvbG9yKCkgPyAndHJhbnNwYXJlbnQnIDogJyNmMmY1ZjcnXCI+XG4gIDxkaXYgW2NsYXNzXT1cIidsaWJzLXVpLWNvbXBvbmVudHMtcGFnZV9mdWxsLWhlYWRlciAnICsgY2xhc3NIZWFkZXJJbmNsdWRlKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwie3sgZGl2aWRlQ2xhc3NIZWFkZXIoKT8uY2xhc3NCdXR0b25DYW5jZWwgfHwgJ3ctWzI1JV0nIH19XCI+XG4gICAgICBAaWYgKGxlZnRUZW1wbGF0ZSgpOyBhcyBsZWZ0VGVtcGxhdGUpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxlZnRUZW1wbGF0ZVwiIC8+XG4gICAgICB9XG4gICAgICBAaWYgKGxhYmVsTGVmdCgpOyBhcyBsYWJlbExlZnQpIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgIFtsYWJlbF09XCJsYWJlbExlZnRcIlxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0IHJvdGF0ZS1bMTgwZGVnXSBiZWZvcmU6dGV4dC1bMTZweF0nXCJcbiAgICAgICAgICBbY2xhc3NMYWJlbF09XCInbGlicy11aS1mb250LWg0cidcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJjYW5jZWwoKVwiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGNlbnRlclRlbXBsYXRlKCk7IGFzIGNlbnRlclRlbXBsYXRlKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwie3sgZGl2aWRlQ2xhc3NIZWFkZXIoKT8uY2xhc3NCdXR0b25DZW50ZXIgfHwgJ3ctWzQwJV0nIH19IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZW50ZXJUZW1wbGF0ZVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJ7eyBkaXZpZGVDbGFzc0hlYWRlcigpPy5jbGFzc0J1dHRvbkNlbnRlciB8fCAndy1bNDAlXScgfX0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFtjb25maWddPVwie1xuICAgICAgICAgICAgbWF4V2lkdGg6IDI1MCxcbiAgICAgICAgICAgIHpJbmRleDogekluZGV4KCkgKyAxLFxuICAgICAgICAgIH1cIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ2xpYnMtdWktZm9udC1oMnMnXCJcbiAgICAgICAgICBbaW5uZXJIdG1sXT1cInRpdGxlKCkgPyAodGl0bGUoKSB8IExpYnNVaVBpcGVzRXNjYXBlSHRtbFBpcGUpIDogJyZtZGFzaDsnXCIgLz5cblxuICAgICAgICBAaWYgKGhhc0VkaXQoKTsgYXMgaGFzRWRpdCkge1xuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckVkaXQoKVwiXG4gICAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1lZGl0LWxpbmUnXCJcbiAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ21sLVs0cHhdJ1wiIC8+XG4gICAgICAgIH1cbiAgICAgICAgQGZvciAoYnV0dG9uIG9mIGJ1dHRvbkNlbnRlcigpOyB0cmFjayBidXR0b24ua2V5KSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLVsxMnB4XSBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgQGlmIChidXR0b24ua2V5ID09PSAnYnV0dG9uJykge1xuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImJ1dHRvbi5sYWJlbCB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzTGFiZWxdPVwiKGJ1dHRvbi5jbGFzc0xhYmVsIHx8ICcnKSArICcgbGlicy11aS1mb250LWhlYWQtNHMnXCJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCJidXR0b24udHlwZSB8fCAnYnV0dG9uLXByaW1hcnknXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImJ1dHRvbi5jbGFzc0luY2x1ZGUgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cImJ1dHRvbi5jbGFzc0ljb25MZWZ0IHx8ICcnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJY29uUmlnaHRdPVwiYnV0dG9uLmNsYXNzSWNvblJpZ2h0IHx8ICcnXCJcbiAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJidXR0b24ucG9wb3ZlciB8fCB7fVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiYnV0dG9uLmRpc2FibGUgfHwgZGlzYWJsZSgpXCJcbiAgICAgICAgICAgICAgICBbaXNQZW5kaW5nXT1cImJ1dHRvbi5pc1BlbmRpbmcgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQ2xpY2tCdXR0b24oYnV0dG9uKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGJ1dHRvbi5rZXkgPT09ICdidXR0b24tc3RhdHVzJyAmJiBidXR0b24uY29uZmlnQnV0dG9uU3RhdHVzKSB7XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1zdGF0dXNcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYnV0dG9uLmNsYXNzSW5jbHVkZVwiXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJidXR0b24uY29uZmlnQnV0dG9uU3RhdHVzXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoYnV0dG9uLmtleSA9PT0gJ3N3aXRjaCcpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1zd2l0Y2hcbiAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImJ1dHRvbi5hY3RpdmUgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cImJ1dHRvbi5kaXNhYmxlIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBidXR0b24uY2xhc3NJbmNsdWRlIH19XCJcbiAgICAgICAgICAgICAgICAob3V0U3dpdGNoKT1cImhhbmRsZXJTd2l0Y2goJGV2ZW50LCBidXR0b24pXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoYnV0dG9uLmtleSA9PT0gJ2xhYmVsJyAmJiBidXR0b24ubGFiZWxDb25maWcpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1sYWJlbFxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmNsYXNzSW5jbHVkZSArICcgcGItMCB0ZXh0LXdoaXRlJ1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsTGVmdF09XCJidXR0b24ubGFiZWxDb25maWcubGFiZWxMZWZ0XCJcbiAgICAgICAgICAgICAgICBbbGFiZWxMZWZ0Q2xhc3NdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxhYmVsTGVmdENsYXNzXCJcbiAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLnJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxSaWdodF09XCJidXR0b24ubGFiZWxDb25maWcubGFiZWxSaWdodFwiXG4gICAgICAgICAgICAgICAgW2xhYmVsUmlnaHRDbGFzc109XCJidXR0b24ubGFiZWxDb25maWcubGFiZWxSaWdodENsYXNzXCJcbiAgICAgICAgICAgICAgICBbb25seVNob3dDb3VudF09XCJidXR0b24ubGFiZWxDb25maWcub25seVNob3dDb3VudFwiXG4gICAgICAgICAgICAgICAgW2J1dHRvbnNMZWZ0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5idXR0b25zTGVmdFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVCdXR0b25zTGVmdF09XCJidXR0b24ubGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNMZWZ0XCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uc1JpZ2h0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5idXR0b25zUmlnaHRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlQnV0dG9uc1JpZ2h0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc1JpZ2h0XCJcbiAgICAgICAgICAgICAgICBbaGFzVG9nZ2xlXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5oYXNUb2dnbGVcIlxuICAgICAgICAgICAgICAgIFt0b2dnbGVBY3RpdmVdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLnRvZ2dsZUFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgW3RvZ2dsZURpc2FibGVdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLnRvZ2dsZURpc2FibGVcIlxuICAgICAgICAgICAgICAgIFtwb3BvdmVyXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5wb3BvdmVyXCJcbiAgICAgICAgICAgICAgICBbaWNvblBvcG92ZXJDbGFzc109XCJidXR0b24ubGFiZWxDb25maWcuaWNvblBvcG92ZXJDbGFzc1wiXG4gICAgICAgICAgICAgICAgW29ubHlTaG93Q291bnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgICAgICAgICAgIFtsaW1pdExlbmd0aF09XCJidXR0b24ubGFiZWxDb25maWcubGltaXRMZW5ndGhcIlxuICAgICAgICAgICAgICAgIFtidXR0b25zRGVzY3JpcHRpb25dPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVCdXR0b25zRGVzY3JpcHRpb25dPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIFtidXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc109XCJidXR0b24ubGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NcIlxuICAgICAgICAgICAgICAgIFtjb3VudF09XCJidXR0b24ubGFiZWxDb25maWcuY291bnRcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8ZGl2IGNsYXNzPVwie3sgZGl2aWRlQ2xhc3NIZWFkZXIoKT8uY2xhc3NCdXR0b25SaWdodCB8fCAndy1bMzUlXScgfX0gZmxleCBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgIEBmb3IgKGJ1dHRvbiBvZiBidXR0b25SaWdodCgpOyB0cmFjayBidXR0b24ua2V5KSB7XG4gICAgICAgIDxkaXYgW2NsYXNzLm1sLVsxMnB4XV09XCIhJGZpcnN0XCI+XG4gICAgICAgICAgQGlmIChidXR0b24ua2V5ID09PSAnbGFiZWwnICYmIGJ1dHRvbi5sYWJlbENvbmZpZykge1xuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1sYWJlbFxuICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5jbGFzc0luY2x1ZGUgKyAnIHBiLTAnXCJcbiAgICAgICAgICAgICAgW2xhYmVsTGVmdF09XCJidXR0b24ubGFiZWxDb25maWcubGFiZWxMZWZ0XCJcbiAgICAgICAgICAgICAgW2xhYmVsTGVmdENsYXNzXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbExlZnRDbGFzc1wiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJidXR0b24ubGFiZWxDb25maWcucmVxdWlyZWRcIlxuICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgW2xhYmVsUmlnaHRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxhYmVsUmlnaHRcIlxuICAgICAgICAgICAgICBbbGFiZWxSaWdodENsYXNzXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbFJpZ2h0Q2xhc3NcIlxuICAgICAgICAgICAgICBbb25seVNob3dDb3VudF09XCJidXR0b24ubGFiZWxDb25maWcub25seVNob3dDb3VudFwiXG4gICAgICAgICAgICAgIFtidXR0b25zTGVmdF09XCJidXR0b24ubGFiZWxDb25maWcuYnV0dG9uc0xlZnRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZUJ1dHRvbnNMZWZ0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0xlZnRcIlxuICAgICAgICAgICAgICBbYnV0dG9uc1JpZ2h0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5idXR0b25zUmlnaHRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZUJ1dHRvbnNSaWdodF09XCJidXR0b24ubGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNSaWdodFwiXG4gICAgICAgICAgICAgIFtoYXNUb2dnbGVdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmhhc1RvZ2dsZVwiXG4gICAgICAgICAgICAgIFt0b2dnbGVBY3RpdmVdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLnRvZ2dsZUFjdGl2ZVwiXG4gICAgICAgICAgICAgIFt0b2dnbGVEaXNhYmxlXT1cImJ1dHRvbi5sYWJlbENvbmZpZy50b2dnbGVEaXNhYmxlXCJcbiAgICAgICAgICAgICAgW3BvcG92ZXJdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLnBvcG92ZXJcIlxuICAgICAgICAgICAgICBbaWNvblBvcG92ZXJDbGFzc109XCJidXR0b24ubGFiZWxDb25maWcuaWNvblBvcG92ZXJDbGFzc1wiXG4gICAgICAgICAgICAgIFtvbmx5U2hvd0NvdW50XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgICAgICAgICAgW2xpbWl0TGVuZ3RoXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5saW1pdExlbmd0aFwiXG4gICAgICAgICAgICAgIFtidXR0b25zRGVzY3JpcHRpb25dPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc1wiXG4gICAgICAgICAgICAgIFtjb3VudF09XCJidXR0b24ubGFiZWxDb25maWcuY291bnRcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGJ1dHRvbi5rZXkgPT09ICdzd2l0Y2gnKSB7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXN3aXRjaFxuICAgICAgICAgICAgICBbYWN0aXZlXT1cImJ1dHRvbi5hY3RpdmUgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICBbZGlzYWJsZV09XCJidXR0b24uZGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cInt7IGJ1dHRvbi5jbGFzc0luY2x1ZGUgfX1cIlxuICAgICAgICAgICAgICAob3V0U3dpdGNoKT1cImhhbmRsZXJTd2l0Y2goJGV2ZW50LCBidXR0b24pXCIgLz5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgKGJ1dHRvbi5rZXkgPT09ICdidXR0b24nKSB7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJidXR0b24/LmxhYmVsIHx8ICcnXCJcbiAgICAgICAgICAgICAgW2NsYXNzTGFiZWxdPVwiKGJ1dHRvbi5jbGFzc0xhYmVsIHx8ICcnKSArICcgbGlicy11aS1mb250LWg0cydcIlxuICAgICAgICAgICAgICBbdHlwZV09XCJidXR0b24udHlwZSB8fCAnYnV0dG9uLXByaW1hcnknXCJcbiAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJidXR0b24uY2xhc3NJbmNsdWRlIHx8ICcnXCJcbiAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiYnV0dG9uLmNsYXNzSWNvbkxlZnQgfHwgJydcIlxuICAgICAgICAgICAgICBbY2xhc3NJY29uUmlnaHRdPVwiYnV0dG9uLmNsYXNzSWNvblJpZ2h0IHx8ICcnXCJcbiAgICAgICAgICAgICAgW3BvcG92ZXJdPVwiYnV0dG9uLnBvcG92ZXIgfHwge31cIlxuICAgICAgICAgICAgICBbZGlzYWJsZV09XCJidXR0b24uZGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgICAgICBbaXNQZW5kaW5nXT1cImJ1dHRvbi5pc1BlbmRpbmcgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cImJ1dHRvbi5pY29uT25seVR5cGUgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsaWNrQnV0dG9uKGJ1dHRvbilcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8IS0tICB0aMOqbSDEkcaw4budbmcgcGjDom4gY8OhY2ggLS0+XG4gICAgICAgICAgQGlmIChidXR0b24ua2V5ID09PSAnbGluZS1zcGFjZScpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJiZy1bIzY2NmI3OV0gdy1bMXB4XSBoLVsyOHB4XVwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJidXR0b24uY2xhc3NJbmNsdWRlXCI+XG4gICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAobWVudURyb3BEb3duQ29uZmlncygpOyBhcyBtZW51RHJvcERvd25Db25maWdzKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtbC1bMTJweF1cIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duXG4gICAgICAgICAgICBbaXNOZ0NvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpICsgMVwiXG4gICAgICAgICAgICBbbGlzdENvbmZpZ109XCJtZW51RHJvcERvd25Db25maWdzLmxpc3RDb25maWdcIlxuICAgICAgICAgICAgW2xpc3RIaWRkZW5JbnB1dFNlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtwb3BvdmVyQ3VzdG9tQ29uZmlnXT1cIm1lbnVEcm9wRG93bkNvbmZpZ3MucG9wb3ZlckN1c3RvbUNvbmZpZ1wiXG4gICAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyQ29udHJvbERyb3Bkb3duTWVudSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlclNlbGVjdGVkS2V5KCRldmVudClcIj5cbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIncC1bOHB4XSdcIlxuICAgICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLXRoaXJkJ1wiXG4gICAgICAgICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tbW9yZS12ZXJ0aWNhbCB0ZXh0LVsjMzMzMzMzXSB0ZXh0LVsxMnB4XSdcIlxuICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJ7XG4gICAgICAgICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICBjb250ZW50OiAnaTE4bl80eF9vdGhlcl9vcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cInRydWVcIiAvPlxuICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAodGVtcGxhdGVSaWdodCgpOyBhcyB0ZW1wbGF0ZVJpZ2h0KSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVJpZ2h0XCIgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgW2NsYXNzXT1cIidsaWJzLXVpLWNvbXBvbmVudHMtcGFnZV9mdWxsLWJvZHkgJyArIGNsYXNzQm9keUluY2x1ZGUoKVwiPlxuICAgIDxuZy1jb250ZW50IC8+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbC1zY3JlZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3BhZ2VzLXRlbXBsYXRlL2Z1bGwtc2NyZWVuL3NyYy9mdWxsLXNjcmVlbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcGFnZXMtdGVtcGxhdGUvZnVsbC1zY3JlZW4vc3JjL2Z1bGwtc2NyZWVuLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBNEQsaUNBQWlDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzSSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQWdCLCtCQUErQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFM0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSw4QkFBOEIsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxD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LENBQUMsU0FBUyxFQUFFO2lCQUM1QjthQUNGLENBQUM7WUFFRixxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQzt3R0FyR1UsZ0RBQWdEOzRGQUFoRCxnREFBZ0QsOC9FQUZoRCxFQUFFLDBCQ2hDZiwwaFRBa01BLG1xQkQ1S0ksZUFBZSwrQkFDZixnQkFBZ0Isb0pBQ2hCLGlDQUFpQyx1M0RBQ2pDLCtCQUErQixxSkFDL0Isc0NBQXNDLHNqQkFDdEMsc0NBQXNDLGtHQUN0QyxnQ0FBZ0MsK2ZBQ2hDLHlCQUF5QixrRUFDekIsOEJBQThCOzs0RkFJckIsZ0RBQWdEO2tCQW5CNUQsU0FBUzsrQkFFRSwrQ0FBK0MsY0FHN0MsSUFBSSxXQUNQO3dCQUNQLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixpQ0FBaUM7d0JBQ2pDLCtCQUErQjt3QkFDL0Isc0NBQXNDO3dCQUN0QyxzQ0FBc0M7d0JBQ3RDLGdDQUFnQzt3QkFDaEMseUJBQXlCO3dCQUN6Qiw4QkFBOEI7cUJBQy9CLGFBQ1UsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBpbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zU3RhdHVzQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLXN0YXR1cyc7XG5pbXBvcnQgeyBJRHJvcGRvd24sIElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50LCBJRW1pdFNlbGVjdEtleSwgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1kcm9wZG93bic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxhYmVsJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IElTd2l0Y2hFdmVudCwgTGlic1VpQ29tcG9uZW50c1N3aXRjaENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc3dpdGNoJztcbmltcG9ydCB7IFRZUEVfVEVNUExBVEVfUkVGIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBMaWJzVWlQaXBlc0VzY2FwZUh0bWxQaXBlIH0gZnJvbSAnQGxpYnMtdWkvcGlwZXMtZXNjYXBlLWh0bWwnO1xuaW1wb3J0IHsgZ2V0RGF5anMsIFV0aWxzQ29tbXVuaWNhdGVNaWNybywgVXRpbHNDb21tdW5pY2F0ZU1pY3JvS2V5R2xvYmFsLCB1dWlkIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBpbnRlcnZhbCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJUGFnZXNUZW1wbGF0ZUZ1bGxTY3JlZW5CdXR0b24gfSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1wYWdlc190ZW1wbGF0ZV9mdWxsX3NjcmVlbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9mdWxsLXNjcmVlbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Z1bGwtc2NyZWVuLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1N3aXRjaENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc1N0YXR1c0NvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCxcbiAgICBMaWJzVWlQaXBlc0VzY2FwZUh0bWxQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1BhZ2VzVGVtcGxhdGVGdWxsU2NyZWVuQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGlkT3ZlcmxheSA9IHNpZ25hbDxzdHJpbmc+KHV1aWQoKSk7XG4gIHByaXZhdGUgZnVuY3Rpb25Db250cm9sTWVudTogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICByZWFkb25seSBjbGFzc0hlYWRlckluY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxhYmVsTGVmdCA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaTE4bl9iYWNrX3RvX2xpc3QnLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/ICdpMThuX2JhY2tfdG9fbGlzdCcgfSk7XG4gIHJlYWRvbmx5IGNsYXNzQm9keUluY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHRpdGxlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBidXR0b25DZW50ZXIgPSBpbnB1dDxBcnJheTxJUGFnZXNUZW1wbGF0ZUZ1bGxTY3JlZW5CdXR0b24+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBidXR0b25SaWdodCA9IGlucHV0PEFycmF5PElQYWdlc1RlbXBsYXRlRnVsbFNjcmVlbkJ1dHRvbj4+KCk7XG4gIHJlYWRvbmx5IGhhc0VkaXQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IG1lbnVEcm9wRG93bkNvbmZpZ3MgPSBpbnB1dDxJRHJvcGRvd24+KCk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMDAwLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IDEwMDAgfSk7XG4gIHJlYWRvbmx5IGlnbm9yZUNsb3NlUGFnZUZ1bGxFdmVudCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBpZ25vcmVCYWNrZ3JvdW5kQ29sb3IgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXZpZGVDbGFzc0hlYWRlciA9IGlucHV0PHsgY2xhc3NCdXR0b25DYW5jZWw6IHN0cmluZzsgY2xhc3NCdXR0b25DZW50ZXI6IHN0cmluZzsgY2xhc3NCdXR0b25SaWdodDogc3RyaW5nIH0gfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGNlbnRlclRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSB0ZW1wbGF0ZVJpZ2h0ID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBsZWZ0VGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4gfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyBmYWxzZSB9KTtcblxuICByZWFkb25seSBvdXRDbG9zZSA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSBvdXRFZGl0ID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IG91dFNlbGVjdGVkTWVudURyb3Bkb3duID0gb3V0cHV0PElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBvdXRDbGlja0J1dHRvbiA9IG91dHB1dDxJUGFnZXNUZW1wbGF0ZUZ1bGxTY3JlZW5CdXR0b24+KCk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlnbm9yZUNsb3NlUGFnZUZ1bGxFdmVudCgpKSB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICB0eXBlOiBVdGlsc0NvbW11bmljYXRlTWljcm9LZXlHbG9iYWwuS0VZX01FU1NBR0VfTU9EQUwsXG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgbWVzc2FnZTogJ29wZW4nLFxuICAgICAgICAgIHN0YXRlOiB0cnVlLFxuICAgICAgICAgIGlkT3ZlcmxheTogdGhpcy5pZE92ZXJsYXkoKSxcbiAgICAgICAgICB0aW1lTGl2ZVVwZGF0ZTogZ2V0RGF5anMoKS51bml4KCksXG4gICAgICAgICAgaWdub3JlSW50ZXJ2YWxVcGRhdGVUaW1lTGl2ZUV2ZW50OiBVdGlsc0NvbW11bmljYXRlTWljcm9LZXlHbG9iYWwuSUdOT1JFX0lOVEVSVkFMX1VQREFURV9USU1FX0xJVkVfRVZFTlRfTU9EQUwsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBVdGlsc0NvbW11bmljYXRlTWljcm8uUG9zdE1lc3NhZ2VUb1BhcmVudChkYXRhKTtcblxuICAgICAgaWYgKFV0aWxzQ29tbXVuaWNhdGVNaWNyb0tleUdsb2JhbC5JR05PUkVfSU5URVJWQUxfVVBEQVRFX1RJTUVfTElWRV9FVkVOVF9NT0RBTCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGludGVydmFsKDIwMDApXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGRhdGEucmVzcG9uc2UudGltZUxpdmVVcGRhdGUgPSBnZXREYXlqcygpLnVuaXgoKTtcblxuICAgICAgICAgIFV0aWxzQ29tbXVuaWNhdGVNaWNyby5Qb3N0TWVzc2FnZVRvUGFyZW50KGRhdGEpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckVkaXQoKSB7XG4gICAgdGhpcy5vdXRFZGl0LmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5jZWwoKSB7XG4gICAgdGhpcy5vdXRDbG9zZS5lbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckNsaWNrQnV0dG9uKGJ1dHRvbjogSVBhZ2VzVGVtcGxhdGVGdWxsU2NyZWVuQnV0dG9uKSB7XG4gICAgaWYgKGJ1dHRvbiAmJiBidXR0b24uYWN0aW9uKSB7XG4gICAgICBhd2FpdCBidXR0b24uYWN0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMub3V0Q2xpY2tCdXR0b24uZW1pdChidXR0b24pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJTd2l0Y2goZXZlbnQ6IElTd2l0Y2hFdmVudCwgYnV0dG9uOiBJUGFnZXNUZW1wbGF0ZUZ1bGxTY3JlZW5CdXR0b24pIHtcbiAgICBpZiAoYnV0dG9uICYmIGJ1dHRvbi5hY3Rpb24pIHtcbiAgICAgIGF3YWl0IGJ1dHRvbi5hY3Rpb24oZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0ZWRLZXkoZXZlbnQ6IElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5vdXRTZWxlY3RlZE1lbnVEcm9wZG93bi5lbWl0KGV2ZW50KTtcbiAgICB0aGlzLmZ1bmN0aW9uQ29udHJvbE1lbnU/LnJlc2V0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNvbnRyb2xEcm9wZG93bk1lbnUoZXZlbnQ6IElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5mdW5jdGlvbkNvbnRyb2xNZW51ID0gZXZlbnQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgICBpZiAoIXRoaXMuaWdub3JlQ2xvc2VQYWdlRnVsbEV2ZW50KCkpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIHR5cGU6IFV0aWxzQ29tbXVuaWNhdGVNaWNyb0tleUdsb2JhbC5LRVlfTUVTU0FHRV9NT0RBTCxcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICBtZXNzYWdlOiAnY2xvc2UnLFxuICAgICAgICAgIHN0YXRlOiBmYWxzZSxcbiAgICAgICAgICBpZE92ZXJsYXk6IHRoaXMuaWRPdmVybGF5KCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBVdGlsc0NvbW11bmljYXRlTWljcm8uUG9zdE1lc3NhZ2VUb1BhcmVudChkYXRhKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudHMtcGFnZV9mdWxsIG92ZXJmbG93LWhpZGRlblwiXG4gIFtzdHlsZS56SW5kZXhdPVwiekluZGV4KClcIlxuICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpZ25vcmVCYWNrZ3JvdW5kQ29sb3IoKSA/ICd0cmFuc3BhcmVudCcgOiAnI2YyZjVmNydcIj5cbiAgPGRpdiBbY2xhc3NdPVwiJ2xpYnMtdWktY29tcG9uZW50cy1wYWdlX2Z1bGwtaGVhZGVyICcgKyBjbGFzc0hlYWRlckluY2x1ZGUoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ7eyBkaXZpZGVDbGFzc0hlYWRlcigpPy5jbGFzc0J1dHRvbkNhbmNlbCB8fCAndy1bMjUlXScgfX1cIj5cbiAgICAgIEBpZiAobGVmdFRlbXBsYXRlKCk7IGFzIGxlZnRUZW1wbGF0ZSkge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGVmdFRlbXBsYXRlXCIgLz5cbiAgICAgIH1cbiAgICAgIEBpZiAobGFiZWxMZWZ0KCk7IGFzIGxhYmVsTGVmdCkge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cImxhYmVsTGVmdFwiXG4gICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWNoZXZyb24tcmlnaHQgcm90YXRlLVsxODBkZWddIGJlZm9yZTp0ZXh0LVsxNnB4XSdcIlxuICAgICAgICAgIFtjbGFzc0xhYmVsXT1cIidsaWJzLXVpLWZvbnQtaDRyJ1wiXG4gICAgICAgICAgKG91dENsaWNrKT1cImNhbmNlbCgpXCIgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoY2VudGVyVGVtcGxhdGUoKTsgYXMgY2VudGVyVGVtcGxhdGUpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJ7eyBkaXZpZGVDbGFzc0hlYWRlcigpPy5jbGFzc0J1dHRvbkNlbnRlciB8fCAndy1bNDAlXScgfX0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbnRlclRlbXBsYXRlXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGRpdiBjbGFzcz1cInt7IGRpdmlkZUNsYXNzSGVhZGVyKCk/LmNsYXNzQnV0dG9uQ2VudGVyIHx8ICd3LVs0MCVdJyB9fSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgW2NvbmZpZ109XCJ7XG4gICAgICAgICAgICBtYXhXaWR0aDogMjUwLFxuICAgICAgICAgICAgekluZGV4OiB6SW5kZXgoKSArIDEsXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInbGlicy11aS1mb250LWgycydcIlxuICAgICAgICAgIFtpbm5lckh0bWxdPVwidGl0bGUoKSA/ICh0aXRsZSgpIHwgTGlic1VpUGlwZXNFc2NhcGVIdG1sUGlwZSkgOiAnJm1kYXNoOydcIiAvPlxuXG4gICAgICAgIEBpZiAoaGFzRWRpdCgpOyBhcyBoYXNFZGl0KSB7XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyRWRpdCgpXCJcbiAgICAgICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWVkaXQtbGluZSdcIlxuICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInbWwtWzRweF0nXCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChidXR0b24gb2YgYnV0dG9uQ2VudGVyKCk7IHRyYWNrIGJ1dHRvbi5rZXkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtWzEycHhdIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICBAaWYgKGJ1dHRvbi5rZXkgPT09ICdidXR0b24nKSB7XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYnV0dG9uLmxhYmVsIHx8ICcnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NMYWJlbF09XCIoYnV0dG9uLmNsYXNzTGFiZWwgfHwgJycpICsgJyBsaWJzLXVpLWZvbnQtaGVhZC00cydcIlxuICAgICAgICAgICAgICAgIFt0eXBlXT1cImJ1dHRvbi50eXBlIHx8ICdidXR0b24tcHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiYnV0dG9uLmNsYXNzSW5jbHVkZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiYnV0dG9uLmNsYXNzSWNvbkxlZnQgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0ljb25SaWdodF09XCJidXR0b24uY2xhc3NJY29uUmlnaHQgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtwb3BvdmVyXT1cImJ1dHRvbi5wb3BvdmVyIHx8IHt9XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJidXR0b24uZGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgICAgICAgIFtpc1BlbmRpbmddPVwiYnV0dG9uLmlzUGVuZGluZyB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbGlja0J1dHRvbihidXR0b24pXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoYnV0dG9uLmtleSA9PT0gJ2J1dHRvbi1zdGF0dXMnICYmIGJ1dHRvbi5jb25maWdCdXR0b25TdGF0dXMpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLXN0YXR1c1xuICAgICAgICAgICAgICAgIFtjbGFzc109XCJidXR0b24uY2xhc3NJbmNsdWRlXCJcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cImJ1dHRvbi5jb25maWdCdXR0b25TdGF0dXNcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChidXR0b24ua2V5ID09PSAnc3dpdGNoJykge1xuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXN3aXRjaFxuICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiYnV0dG9uLmFjdGl2ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiYnV0dG9uLmRpc2FibGUgfHwgZGlzYWJsZSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGJ1dHRvbi5jbGFzc0luY2x1ZGUgfX1cIlxuICAgICAgICAgICAgICAgIChvdXRTd2l0Y2gpPVwiaGFuZGxlclN3aXRjaCgkZXZlbnQsIGJ1dHRvbilcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChidXR0b24ua2V5ID09PSAnbGFiZWwnICYmIGJ1dHRvbi5sYWJlbENvbmZpZykge1xuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJidXR0b24ubGFiZWxDb25maWcuY2xhc3NJbmNsdWRlICsgJyBwYi0wIHRleHQtd2hpdGUnXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxMZWZ0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbExlZnRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbExlZnRDbGFzc109XCJidXR0b24ubGFiZWxDb25maWcubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJidXR0b24ubGFiZWxDb25maWcucmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCJidXR0b24ubGFiZWxDb25maWcuZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIFtsYWJlbFJpZ2h0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbFJpZ2h0XCJcbiAgICAgICAgICAgICAgICBbbGFiZWxSaWdodENsYXNzXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbFJpZ2h0Q2xhc3NcIlxuICAgICAgICAgICAgICAgIFtvbmx5U2hvd0NvdW50XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uc0xlZnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNMZWZ0XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZUJ1dHRvbnNMZWZ0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0xlZnRcIlxuICAgICAgICAgICAgICAgIFtidXR0b25zUmlnaHRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNSaWdodFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zUmlnaHRcIlxuICAgICAgICAgICAgICAgIFtoYXNUb2dnbGVdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmhhc1RvZ2dsZVwiXG4gICAgICAgICAgICAgICAgW3RvZ2dsZUFjdGl2ZV09XCJidXR0b24ubGFiZWxDb25maWcudG9nZ2xlQWN0aXZlXCJcbiAgICAgICAgICAgICAgICBbdG9nZ2xlRGlzYWJsZV09XCJidXR0b24ubGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLnBvcG92ZXJcIlxuICAgICAgICAgICAgICAgIFtpY29uUG9wb3ZlckNsYXNzXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5pY29uUG9wb3ZlckNsYXNzXCJcbiAgICAgICAgICAgICAgICBbb25seVNob3dDb3VudF09XCJidXR0b24ubGFiZWxDb25maWcub25seVNob3dDb3VudFwiXG4gICAgICAgICAgICAgICAgW2xpbWl0TGVuZ3RoXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5saW1pdExlbmd0aFwiXG4gICAgICAgICAgICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbl09XCJidXR0b24ubGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZUJ1dHRvbnNEZXNjcmlwdGlvbl09XCJidXR0b24ubGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNEZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc1wiXG4gICAgICAgICAgICAgICAgW2NvdW50XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5jb3VudFwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDxkaXYgY2xhc3M9XCJ7eyBkaXZpZGVDbGFzc0hlYWRlcigpPy5jbGFzc0J1dHRvblJpZ2h0IHx8ICd3LVszNSVdJyB9fSBmbGV4IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgQGZvciAoYnV0dG9uIG9mIGJ1dHRvblJpZ2h0KCk7IHRyYWNrIGJ1dHRvbi5rZXkpIHtcbiAgICAgICAgPGRpdiBbY2xhc3MubWwtWzEycHhdXT1cIiEkZmlyc3RcIj5cbiAgICAgICAgICBAaWYgKGJ1dHRvbi5rZXkgPT09ICdsYWJlbCcgJiYgYnV0dG9uLmxhYmVsQ29uZmlnKSB7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsXG4gICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmNsYXNzSW5jbHVkZSArICcgcGItMCdcIlxuICAgICAgICAgICAgICBbbGFiZWxMZWZ0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5sYWJlbExlZnRcIlxuICAgICAgICAgICAgICBbbGFiZWxMZWZ0Q2xhc3NdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxhYmVsTGVmdENsYXNzXCJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5yZXF1aXJlZFwiXG4gICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCJidXR0b24ubGFiZWxDb25maWcuZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICBbbGFiZWxSaWdodF09XCJidXR0b24ubGFiZWxDb25maWcubGFiZWxSaWdodFwiXG4gICAgICAgICAgICAgIFtsYWJlbFJpZ2h0Q2xhc3NdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxhYmVsUmlnaHRDbGFzc1wiXG4gICAgICAgICAgICAgIFtvbmx5U2hvd0NvdW50XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgICAgICAgICAgW2J1dHRvbnNMZWZ0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5idXR0b25zTGVmdFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlQnV0dG9uc0xlZnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zTGVmdFwiXG4gICAgICAgICAgICAgIFtidXR0b25zUmlnaHRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNSaWdodFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlQnV0dG9uc1JpZ2h0XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc1JpZ2h0XCJcbiAgICAgICAgICAgICAgW2hhc1RvZ2dsZV09XCJidXR0b24ubGFiZWxDb25maWcuaGFzVG9nZ2xlXCJcbiAgICAgICAgICAgICAgW3RvZ2dsZUFjdGl2ZV09XCJidXR0b24ubGFiZWxDb25maWcudG9nZ2xlQWN0aXZlXCJcbiAgICAgICAgICAgICAgW3RvZ2dsZURpc2FibGVdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLnRvZ2dsZURpc2FibGVcIlxuICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJidXR0b24ubGFiZWxDb25maWcucG9wb3ZlclwiXG4gICAgICAgICAgICAgIFtpY29uUG9wb3ZlckNsYXNzXT1cImJ1dHRvbi5sYWJlbENvbmZpZy5pY29uUG9wb3ZlckNsYXNzXCJcbiAgICAgICAgICAgICAgW29ubHlTaG93Q291bnRdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgICAgICAgICBbbGltaXRMZW5ndGhdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgICAgICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbl09XCJidXR0b24ubGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVCdXR0b25zRGVzY3JpcHRpb25dPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NdPVwiYnV0dG9uLmxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXCJcbiAgICAgICAgICAgICAgW2NvdW50XT1cImJ1dHRvbi5sYWJlbENvbmZpZy5jb3VudFwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoYnV0dG9uLmtleSA9PT0gJ3N3aXRjaCcpIHtcbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc3dpdGNoXG4gICAgICAgICAgICAgIFthY3RpdmVdPVwiYnV0dG9uLmFjdGl2ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cImJ1dHRvbi5kaXNhYmxlIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwie3sgYnV0dG9uLmNsYXNzSW5jbHVkZSB9fVwiXG4gICAgICAgICAgICAgIChvdXRTd2l0Y2gpPVwiaGFuZGxlclN3aXRjaCgkZXZlbnQsIGJ1dHRvbilcIiAvPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAoYnV0dG9uLmtleSA9PT0gJ2J1dHRvbicpIHtcbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgW2xhYmVsXT1cImJ1dHRvbj8ubGFiZWwgfHwgJydcIlxuICAgICAgICAgICAgICBbY2xhc3NMYWJlbF09XCIoYnV0dG9uLmNsYXNzTGFiZWwgfHwgJycpICsgJyBsaWJzLXVpLWZvbnQtaDRzJ1wiXG4gICAgICAgICAgICAgIFt0eXBlXT1cImJ1dHRvbi50eXBlIHx8ICdidXR0b24tcHJpbWFyeSdcIlxuICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImJ1dHRvbi5jbGFzc0luY2x1ZGUgfHwgJydcIlxuICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCJidXR0b24uY2xhc3NJY29uTGVmdCB8fCAnJ1wiXG4gICAgICAgICAgICAgIFtjbGFzc0ljb25SaWdodF09XCJidXR0b24uY2xhc3NJY29uUmlnaHQgfHwgJydcIlxuICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJidXR0b24ucG9wb3ZlciB8fCB7fVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cImJ1dHRvbi5kaXNhYmxlIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgICAgIFtpc1BlbmRpbmddPVwiYnV0dG9uLmlzUGVuZGluZyB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgIFtpY29uT25seVR5cGVdPVwiYnV0dG9uLmljb25Pbmx5VHlwZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQ2xpY2tCdXR0b24oYnV0dG9uKVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIDwhLS0gIHRow6ptIMSRxrDhu51uZyBwaMOibiBjw6FjaCAtLT5cbiAgICAgICAgICBAaWYgKGJ1dHRvbi5rZXkgPT09ICdsaW5lLXNwYWNlJykge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImJnLVsjNjY2Yjc5XSB3LVsxcHhdIGgtWzI4cHhdXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImJ1dHRvbi5jbGFzc0luY2x1ZGVcIj5cbiAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChtZW51RHJvcERvd25Db25maWdzKCk7IGFzIG1lbnVEcm9wRG93bkNvbmZpZ3MpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1sLVsxMnB4XVwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd25cbiAgICAgICAgICAgIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFt6SW5kZXhdPVwiekluZGV4KCkgKyAxXCJcbiAgICAgICAgICAgIFtsaXN0Q29uZmlnXT1cIm1lbnVEcm9wRG93bkNvbmZpZ3MubGlzdENvbmZpZ1wiXG4gICAgICAgICAgICBbbGlzdEhpZGRlbklucHV0U2VhcmNoXT1cInRydWVcIlxuICAgICAgICAgICAgW3BvcG92ZXJDdXN0b21Db25maWddPVwibWVudURyb3BEb3duQ29uZmlncy5wb3BvdmVyQ3VzdG9tQ29uZmlnXCJcbiAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJDb250cm9sRHJvcGRvd25NZW51KCRldmVudClcIlxuICAgICAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0ZWRLZXkoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidwLVs4cHhdJ1wiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tdGhpcmQnXCJcbiAgICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1tb3JlLXZlcnRpY2FsIHRleHQtWyMzMzMzMzNdIHRleHQtWzEycHhdJ1wiXG4gICAgICAgICAgICAgIFtwb3BvdmVyXT1cIntcbiAgICAgICAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdpMThuXzR4X290aGVyX29wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmICh0ZW1wbGF0ZVJpZ2h0KCk7IGFzIHRlbXBsYXRlUmlnaHQpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlUmlnaHRcIiAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBbY2xhc3NdPVwiJ2xpYnMtdWktY29tcG9uZW50cy1wYWdlX2Z1bGwtYm9keSAnICsgY2xhc3NCb2R5SW5jbHVkZSgpXCI+XG4gICAgPG5nLWNvbnRlbnQgLz5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -11,7 +11,7 @@ import { LibsUiComponentsSkeletonComponent } from '@libs-ui/components-skeleton'
11
11
  import { LibsUiComponentsSwitchComponent } from '@libs-ui/components-switch';
12
12
  import { LibsUiPipesCallFunctionInTemplatePipe } from '@libs-ui/pipes-call-function-in-template';
13
13
  import { LibsUiPipesEscapeHtmlPipe } from '@libs-ui/pipes-escape-html';
14
- import { uuid, get, getDayjs, UtilsCommunicateMicroKeyGlobal, UtilsCommunicateMicro } from '@libs-ui/utils';
14
+ import { uuid, get, UtilsCommunicateMicroKeyGlobal, getDayjs, UtilsCommunicateMicro } from '@libs-ui/utils';
15
15
  import { TranslateModule } from '@ngx-translate/core';
16
16
  import { interval, Subject, takeUntil } from 'rxjs';
17
17
 
@@ -75,6 +75,7 @@ class LibsUiComponentsPagesTemplateFullScreenV2Component {
75
75
  state: true,
76
76
  idOverlay: this.idOverlay(),
77
77
  timeLiveUpdate: getDayjs().unix(),
78
+ ignoreIntervalUpdateTimeLiveEvent: UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL,
78
79
  },
79
80
  };
80
81
  UtilsCommunicateMicro.PostMessageToParent(data);
@@ -182,6 +183,7 @@ class LibsUiComponentsPagesTemplateFullScreenComponent {
182
183
  state: true,
183
184
  idOverlay: this.idOverlay(),
184
185
  timeLiveUpdate: getDayjs().unix(),
186
+ ignoreIntervalUpdateTimeLiveEvent: UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL,
185
187
  },
186
188
  };
187
189
  UtilsCommunicateMicro.PostMessageToParent(data);
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-pages-template-full-screen.mjs","sources":["../../../../../../libs-ui/components/pages-template/full-screen/src/full-screen-v2/full-screen-v2.component.ts","../../../../../../libs-ui/components/pages-template/full-screen/src/full-screen-v2/full-screen-v2.component.html","../../../../../../libs-ui/components/pages-template/full-screen/src/full-screen.component.ts","../../../../../../libs-ui/components/pages-template/full-screen/src/full-screen.component.html","../../../../../../libs-ui/components/pages-template/full-screen/src/libs-ui-components-pages-template-full-screen.ts"],"sourcesContent":["import { AsyncPipe, NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, DestroyRef, inject, input, OnDestroy, OnInit, output, Signal, signal, TemplateRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsButtonsStatusComponent } from '@libs-ui/components-buttons-status';\nimport { IDropdown, IDropdownFunctionControlEvent, IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { ISkeletonConfig, LibsUiComponentsSkeletonComponent } from '@libs-ui/components-skeleton';\nimport { ISwitchEvent, LibsUiComponentsSwitchComponent } from '@libs-ui/components-switch';\nimport { TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { LibsUiPipesCallFunctionInTemplatePipe } from '@libs-ui/pipes-call-function-in-template';\nimport { LibsUiPipesEscapeHtmlPipe } from '@libs-ui/pipes-escape-html';\nimport { get, getDayjs, UtilsCommunicateMicro, UtilsCommunicateMicroKeyGlobal, uuid } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { interval } from 'rxjs';\nimport { IPagesTemplateFullScreenButton } from '../interfaces/config.interface';\nimport { IFullScreenV2BodyConfig, IFullScreenV2SectionData } from './interfaces/full-screen-v2.interface';\n\n/**\n * Full Screen Template V2 — Kế thừa toàn bộ V1, bổ sung lazy loading cho body.\n * Header giữ nguyên 100%. Body hỗ trợ dynamic component injection với skeleton tự động.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-pages_template_full_screen_v2',\n templateUrl: './full-screen-v2.component.html',\n styleUrls: ['./full-screen-v2.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n NgComponentOutlet,\n NgTemplateOutlet,\n TranslateModule,\n LibsUiComponentsDropdownComponent,\n LibsUiComponentsSwitchComponent,\n LibsUiComponentsButtonsButtonComponent,\n LibsUiComponentsButtonsStatusComponent,\n LibsUiComponentsPopoverComponent,\n LibsUiComponentsSkeletonComponent,\n LibsUiPipesCallFunctionInTemplatePipe,\n LibsUiPipesEscapeHtmlPipe,\n LibsUiComponentsLabelComponent,\n ],\n})\nexport class LibsUiComponentsPagesTemplateFullScreenV2Component implements OnInit, OnDestroy {\n // #region --- INPUTS (kế thừa từ V1) ---\n readonly classHeaderInclude = input<string>();\n readonly labelLeft = input<string, string | undefined>('i18n_back_to_list', { transform: (val) => val ?? 'i18n_back_to_list' });\n readonly title = input<string>();\n readonly buttonCenter = input<Array<IPagesTemplateFullScreenButton> | undefined>();\n readonly buttonRight = input<Array<IPagesTemplateFullScreenButton>>();\n readonly hasEdit = input<boolean>(false);\n readonly menuDropDownConfigs = input<IDropdown>();\n readonly zIndex = input<number, number | undefined>(1000, { transform: (val) => val ?? 1000 });\n readonly ignoreClosePageFullEvent = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n readonly ignoreBackgroundColor = input<boolean>();\n readonly divideClassHeader = input<{ classButtonCancel: string; classButtonCenter: string; classButtonRight: string } | undefined>();\n readonly centerTemplate = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly templateRight = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly leftTemplate = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly disable = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n // #endregion\n\n // #region --- INPUTS (mới trong V2) ---\n /** Config lazy load component vào body. Nếu không truyền getComponentOutlet → tự động dùng ng-content. */\n readonly bodyConfig = input<IFullScreenV2BodyConfig, IFullScreenV2BodyConfig | undefined>({}, { transform: (v) => v || {} });\n // #endregion\n\n // #region --- OUTPUTS ---\n readonly outClose = output<void>();\n readonly outEdit = output<void>();\n readonly outSelectedMenuDropdown = output<IEmitSelectKey | undefined>();\n readonly outClickButton = output<IPagesTemplateFullScreenButton>();\n // #endregion\n\n // #region --- INTERNAL STATE ---\n private readonly idOverlay = signal<string>(uuid()).asReadonly();\n private readonly destroyRef = inject(DestroyRef);\n private functionControlMenu: IDropdownFunctionControlEvent | undefined;\n // #endregion\n\n // #region --- COMPUTED ---\n /** State reactive để truyền vào component outlet */\n protected readonly sectionData = computed<IFullScreenV2SectionData>(() => ({\n disable: this.disable(),\n }));\n\n /** Skeleton body — fallback về config mặc định nếu không được truyền */\n protected readonly resolvedSkeletonBody: Signal<ISkeletonConfig> = computed(() => {\n return (\n get(this.bodyConfig, 'skeletonConfig') ?? {\n repeat: 3,\n styleMarginBottom: 16,\n rows: [{ item: { classInclude: 'w-full h-[120px] rounded-[8px]' } }],\n }\n );\n });\n // #endregion\n\n ngOnInit(): void {\n if (!this.ignoreClosePageFullEvent()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'open',\n state: true,\n idOverlay: this.idOverlay(),\n timeLiveUpdate: getDayjs().unix(),\n },\n };\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n\n if (!UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL) {\n interval(2000)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n data.response.timeLiveUpdate = getDayjs().unix();\n UtilsCommunicateMicro.PostMessageToParent(data);\n });\n }\n }\n }\n\n // #region --- EVENT HANDLERS ---\n protected handlerEdit() {\n this.outEdit.emit();\n }\n\n protected cancel() {\n this.outClose.emit();\n }\n\n protected async handlerClickButton(button: IPagesTemplateFullScreenButton) {\n if (button && button.action) {\n await button.action();\n }\n this.outClickButton.emit(button);\n }\n\n protected async handlerSwitch(event: ISwitchEvent, button: IPagesTemplateFullScreenButton) {\n if (button && button.action) {\n await button.action(event);\n }\n }\n\n protected handlerSelectedKey(event: IEmitSelectKey | undefined) {\n this.outSelectedMenuDropdown.emit(event);\n this.functionControlMenu?.reset();\n }\n\n protected handlerControlDropdownMenu(event: IDropdownFunctionControlEvent) {\n this.functionControlMenu = event;\n }\n // #endregion\n\n ngOnDestroy(): void {\n if (!this.ignoreClosePageFullEvent()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'close',\n state: false,\n idOverlay: this.idOverlay(),\n },\n };\n UtilsCommunicateMicro.PostMessageToParent(data);\n }\n }\n}\n","<div\n class=\"libs-ui-components-page_full overflow-hidden\"\n [style.zIndex]=\"zIndex()\"\n [style.background-color]=\"ignoreBackgroundColor() ? 'transparent' : '#f2f5f7'\">\n <!-- ===================== HEADER (giữ nguyên 100% từ V1) ===================== -->\n <div [class]=\"'libs-ui-components-page_full-header ' + classHeaderInclude()\">\n <div class=\"{{ divideClassHeader()?.classButtonCancel || 'w-[25%]' }}\">\n @if (leftTemplate(); as leftTemplate) {\n <ng-container *ngTemplateOutlet=\"leftTemplate\" />\n }\n @if (labelLeft(); as labelLeft) {\n <libs_ui-components-buttons-button\n [label]=\"labelLeft\"\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px]'\"\n [classLabel]=\"'libs-ui-font-h4r'\"\n (outClick)=\"cancel()\" />\n }\n </div>\n\n @if (centerTemplate(); as centerTemplate) {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <ng-container *ngTemplateOutlet=\"centerTemplate\" />\n </div>\n } @else {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, zIndex: zIndex() + 1 }\"\n [classInclude]=\"'libs-ui-font-h2s'\"\n [innerHtml]=\"title() ? (title() | LibsUiPipesEscapeHtmlPipe) : '&mdash;'\" />\n @if (hasEdit(); as hasEdit) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n (outClick)=\"handlerEdit()\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'ml-[4px]'\" />\n }\n @for (button of buttonCenter(); track button.key) {\n <div class=\"ml-[12px] flex items-center\">\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-head-4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'button-status' && button.configButtonStatus) {\n <libs_ui-components-buttons-status\n [class]=\"button.classInclude\"\n [config]=\"button.configButtonStatus\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0 text-white'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n </div>\n }\n </div>\n }\n\n <div class=\"{{ divideClassHeader()?.classButtonRight || 'w-[35%]' }} flex justify-end items-center\">\n @for (button of buttonRight(); track button.key) {\n <div [class.ml-[12px]]=\"!$first\">\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button?.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-h4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n [iconOnlyType]=\"button.iconOnlyType || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'line-space') {\n <div\n class=\"bg-[#666b79] w-[1px] h-[28px]\"\n [class]=\"button.classInclude\">\n &nbsp;\n </div>\n }\n </div>\n }\n @if (menuDropDownConfigs(); as menuDropDownConfigs) {\n <div class=\"ml-[12px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [listConfig]=\"menuDropDownConfigs.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"menuDropDownConfigs.popoverCustomConfig\"\n (outFunctionsControl)=\"handlerControlDropdownMenu($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\">\n <libs_ui-components-buttons-button\n [classInclude]=\"'p-[8px]'\"\n [type]=\"'button-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px]'\"\n [popover]=\"{ config: { content: 'i18n_4x_other_operations' } }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n </div>\n }\n @if (templateRight(); as templateRight) {\n <ng-container *ngTemplateOutlet=\"templateRight\" />\n }\n </div>\n </div>\n\n <!-- ===================== BODY (V2: Lazy Load hoặc ng-content) ===================== -->\n @if (bodyConfig().getComponentOutlet; as getBodyComponentOutlet) {\n <!-- Lazy load mode -->\n <div [class]=\"'libs-ui-components-page_full-body ' + (bodyConfig().classInclude || '')\">\n @let constHtmlCompBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: getBodyComponentOutlet : sectionData() : null : { valueIsEmpty: null } | async;\n @let constHtmlInputsBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: bodyConfig().getDataComponentOutlet : sectionData() : null : { valueIsEmpty: null } | async;\n @if (constHtmlCompBody) {\n @defer {\n <ng-container *ngComponentOutlet=\"constHtmlCompBody; inputs: constHtmlInputsBody\" />\n } @loading {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n } @else {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n </div>\n }\n</div>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, input, OnDestroy, OnInit, output, signal, TemplateRef } from '@angular/core';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsButtonsStatusComponent } from '@libs-ui/components-buttons-status';\nimport { IDropdown, IDropdownFunctionControlEvent, IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { ISwitchEvent, LibsUiComponentsSwitchComponent } from '@libs-ui/components-switch';\nimport { TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { LibsUiPipesEscapeHtmlPipe } from '@libs-ui/pipes-escape-html';\nimport { getDayjs, UtilsCommunicateMicro, UtilsCommunicateMicroKeyGlobal, uuid } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { interval, Subject, takeUntil } from 'rxjs';\nimport { IPagesTemplateFullScreenButton } from './interfaces/config.interface';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-pages_template_full_screen',\n templateUrl: './full-screen.component.html',\n styleUrls: ['./full-screen.component.scss'],\n standalone: true,\n imports: [\n TranslateModule,\n NgTemplateOutlet,\n LibsUiComponentsDropdownComponent,\n LibsUiComponentsSwitchComponent,\n LibsUiComponentsButtonsButtonComponent,\n LibsUiComponentsButtonsStatusComponent,\n LibsUiComponentsPopoverComponent,\n LibsUiPipesEscapeHtmlPipe,\n LibsUiComponentsLabelComponent,\n ],\n providers: [],\n})\nexport class LibsUiComponentsPagesTemplateFullScreenComponent implements OnInit, OnDestroy {\n private idOverlay = signal<string>(uuid());\n private functionControlMenu: IDropdownFunctionControlEvent | undefined;\n private onDestroy = new Subject<void>();\n\n readonly classHeaderInclude = input<string>();\n readonly labelLeft = input<string, string | undefined>('i18n_back_to_list', { transform: (val) => val ?? 'i18n_back_to_list' });\n readonly classBodyInclude = input<string>();\n readonly title = input<string>();\n readonly buttonCenter = input<Array<IPagesTemplateFullScreenButton> | undefined>();\n readonly buttonRight = input<Array<IPagesTemplateFullScreenButton>>();\n readonly hasEdit = input<boolean>(false);\n readonly menuDropDownConfigs = input<IDropdown>();\n readonly zIndex = input<number, number | undefined>(1000, { transform: (val) => val ?? 1000 });\n readonly ignoreClosePageFullEvent = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n readonly ignoreBackgroundColor = input<boolean>();\n readonly divideClassHeader = input<{ classButtonCancel: string; classButtonCenter: string; classButtonRight: string } | undefined>();\n readonly centerTemplate = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly templateRight = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly leftTemplate = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly disable = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n\n readonly outClose = output<void>();\n readonly outEdit = output<void>();\n readonly outSelectedMenuDropdown = output<IEmitSelectKey | undefined>();\n readonly outClickButton = output<IPagesTemplateFullScreenButton>();\n\n ngOnInit(): void {\n if (!this.ignoreClosePageFullEvent()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'open',\n state: true,\n idOverlay: this.idOverlay(),\n timeLiveUpdate: getDayjs().unix(),\n },\n };\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n\n if (UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL) {\n return;\n }\n\n interval(2000)\n .pipe(takeUntil(this.onDestroy))\n .subscribe(() => {\n data.response.timeLiveUpdate = getDayjs().unix();\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n });\n }\n }\n\n protected handlerEdit() {\n this.outEdit.emit();\n }\n\n protected cancel() {\n this.outClose.emit();\n }\n\n protected async handlerClickButton(button: IPagesTemplateFullScreenButton) {\n if (button && button.action) {\n await button.action();\n }\n this.outClickButton.emit(button);\n }\n\n protected async handlerSwitch(event: ISwitchEvent, button: IPagesTemplateFullScreenButton) {\n if (button && button.action) {\n await button.action(event);\n }\n }\n\n protected handlerSelectedKey(event: IEmitSelectKey | undefined) {\n this.outSelectedMenuDropdown.emit(event);\n this.functionControlMenu?.reset();\n }\n\n protected handlerControlDropdownMenu(event: IDropdownFunctionControlEvent) {\n this.functionControlMenu = event;\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n if (!this.ignoreClosePageFullEvent()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'close',\n state: false,\n idOverlay: this.idOverlay(),\n },\n };\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n }\n }\n}\n","<div\n class=\"libs-ui-components-page_full overflow-hidden\"\n [style.zIndex]=\"zIndex()\"\n [style.background-color]=\"ignoreBackgroundColor() ? 'transparent' : '#f2f5f7'\">\n <div [class]=\"'libs-ui-components-page_full-header ' + classHeaderInclude()\">\n <div class=\"{{ divideClassHeader()?.classButtonCancel || 'w-[25%]' }}\">\n @if (leftTemplate(); as leftTemplate) {\n <ng-container *ngTemplateOutlet=\"leftTemplate\" />\n }\n @if (labelLeft(); as labelLeft) {\n <libs_ui-components-buttons-button\n [label]=\"labelLeft\"\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px]'\"\n [classLabel]=\"'libs-ui-font-h4r'\"\n (outClick)=\"cancel()\" />\n }\n </div>\n\n @if (centerTemplate(); as centerTemplate) {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <ng-container *ngTemplateOutlet=\"centerTemplate\" />\n </div>\n } @else {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{\n maxWidth: 250,\n zIndex: zIndex() + 1,\n }\"\n [classInclude]=\"'libs-ui-font-h2s'\"\n [innerHtml]=\"title() ? (title() | LibsUiPipesEscapeHtmlPipe) : '&mdash;'\" />\n\n @if (hasEdit(); as hasEdit) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n (outClick)=\"handlerEdit()\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'ml-[4px]'\" />\n }\n @for (button of buttonCenter(); track button.key) {\n <div class=\"ml-[12px] flex items-center\">\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-head-4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'button-status' && button.configButtonStatus) {\n <libs_ui-components-buttons-status\n [class]=\"button.classInclude\"\n [config]=\"button.configButtonStatus\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0 text-white'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n </div>\n }\n </div>\n }\n\n <div class=\"{{ divideClassHeader()?.classButtonRight || 'w-[35%]' }} flex justify-end items-center\">\n @for (button of buttonRight(); track button.key) {\n <div [class.ml-[12px]]=\"!$first\">\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button?.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-h4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n [iconOnlyType]=\"button.iconOnlyType || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n <!-- thêm đường phân cách -->\n @if (button.key === 'line-space') {\n <div\n class=\"bg-[#666b79] w-[1px] h-[28px]\"\n [class]=\"button.classInclude\">\n &nbsp;\n </div>\n }\n </div>\n }\n @if (menuDropDownConfigs(); as menuDropDownConfigs) {\n <div class=\"ml-[12px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [listConfig]=\"menuDropDownConfigs.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"menuDropDownConfigs.popoverCustomConfig\"\n (outFunctionsControl)=\"handlerControlDropdownMenu($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\">\n <libs_ui-components-buttons-button\n [classInclude]=\"'p-[8px]'\"\n [type]=\"'button-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px]'\"\n [popover]=\"{\n config: {\n content: 'i18n_4x_other_operations',\n },\n }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n </div>\n }\n @if (templateRight(); as templateRight) {\n <ng-container *ngTemplateOutlet=\"templateRight\" />\n }\n </div>\n </div>\n <div [class]=\"'libs-ui-components-page_full-body ' + classBodyInclude()\">\n <ng-content />\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libs-ui-components-pages-template-full-screen.mjs","sources":["../../../../../../libs-ui/components/pages-template/full-screen/src/full-screen-v2/full-screen-v2.component.ts","../../../../../../libs-ui/components/pages-template/full-screen/src/full-screen-v2/full-screen-v2.component.html","../../../../../../libs-ui/components/pages-template/full-screen/src/full-screen.component.ts","../../../../../../libs-ui/components/pages-template/full-screen/src/full-screen.component.html","../../../../../../libs-ui/components/pages-template/full-screen/src/libs-ui-components-pages-template-full-screen.ts"],"sourcesContent":["import { AsyncPipe, NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, DestroyRef, inject, input, OnDestroy, OnInit, output, Signal, signal, TemplateRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsButtonsStatusComponent } from '@libs-ui/components-buttons-status';\nimport { IDropdown, IDropdownFunctionControlEvent, IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { ISkeletonConfig, LibsUiComponentsSkeletonComponent } from '@libs-ui/components-skeleton';\nimport { ISwitchEvent, LibsUiComponentsSwitchComponent } from '@libs-ui/components-switch';\nimport { TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { LibsUiPipesCallFunctionInTemplatePipe } from '@libs-ui/pipes-call-function-in-template';\nimport { LibsUiPipesEscapeHtmlPipe } from '@libs-ui/pipes-escape-html';\nimport { get, getDayjs, UtilsCommunicateMicro, UtilsCommunicateMicroKeyGlobal, uuid } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { interval } from 'rxjs';\nimport { IPagesTemplateFullScreenButton } from '../interfaces/config.interface';\nimport { IFullScreenV2BodyConfig, IFullScreenV2SectionData } from './interfaces/full-screen-v2.interface';\n\n/**\n * Full Screen Template V2 — Kế thừa toàn bộ V1, bổ sung lazy loading cho body.\n * Header giữ nguyên 100%. Body hỗ trợ dynamic component injection với skeleton tự động.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-pages_template_full_screen_v2',\n templateUrl: './full-screen-v2.component.html',\n styleUrls: ['./full-screen-v2.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n NgComponentOutlet,\n NgTemplateOutlet,\n TranslateModule,\n LibsUiComponentsDropdownComponent,\n LibsUiComponentsSwitchComponent,\n LibsUiComponentsButtonsButtonComponent,\n LibsUiComponentsButtonsStatusComponent,\n LibsUiComponentsPopoverComponent,\n LibsUiComponentsSkeletonComponent,\n LibsUiPipesCallFunctionInTemplatePipe,\n LibsUiPipesEscapeHtmlPipe,\n LibsUiComponentsLabelComponent,\n ],\n})\nexport class LibsUiComponentsPagesTemplateFullScreenV2Component implements OnInit, OnDestroy {\n // #region --- INPUTS (kế thừa từ V1) ---\n readonly classHeaderInclude = input<string>();\n readonly labelLeft = input<string, string | undefined>('i18n_back_to_list', { transform: (val) => val ?? 'i18n_back_to_list' });\n readonly title = input<string>();\n readonly buttonCenter = input<Array<IPagesTemplateFullScreenButton> | undefined>();\n readonly buttonRight = input<Array<IPagesTemplateFullScreenButton>>();\n readonly hasEdit = input<boolean>(false);\n readonly menuDropDownConfigs = input<IDropdown>();\n readonly zIndex = input<number, number | undefined>(1000, { transform: (val) => val ?? 1000 });\n readonly ignoreClosePageFullEvent = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n readonly ignoreBackgroundColor = input<boolean>();\n readonly divideClassHeader = input<{ classButtonCancel: string; classButtonCenter: string; classButtonRight: string } | undefined>();\n readonly centerTemplate = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly templateRight = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly leftTemplate = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly disable = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n // #endregion\n\n // #region --- INPUTS (mới trong V2) ---\n /** Config lazy load component vào body. Nếu không truyền getComponentOutlet → tự động dùng ng-content. */\n readonly bodyConfig = input<IFullScreenV2BodyConfig, IFullScreenV2BodyConfig | undefined>({}, { transform: (v) => v || {} });\n // #endregion\n\n // #region --- OUTPUTS ---\n readonly outClose = output<void>();\n readonly outEdit = output<void>();\n readonly outSelectedMenuDropdown = output<IEmitSelectKey | undefined>();\n readonly outClickButton = output<IPagesTemplateFullScreenButton>();\n // #endregion\n\n // #region --- INTERNAL STATE ---\n private readonly idOverlay = signal<string>(uuid()).asReadonly();\n private readonly destroyRef = inject(DestroyRef);\n private functionControlMenu: IDropdownFunctionControlEvent | undefined;\n // #endregion\n\n // #region --- COMPUTED ---\n /** State reactive để truyền vào component outlet */\n protected readonly sectionData = computed<IFullScreenV2SectionData>(() => ({\n disable: this.disable(),\n }));\n\n /** Skeleton body — fallback về config mặc định nếu không được truyền */\n protected readonly resolvedSkeletonBody: Signal<ISkeletonConfig> = computed(() => {\n return (\n get(this.bodyConfig, 'skeletonConfig') ?? {\n repeat: 3,\n styleMarginBottom: 16,\n rows: [{ item: { classInclude: 'w-full h-[120px] rounded-[8px]' } }],\n }\n );\n });\n // #endregion\n\n ngOnInit(): void {\n if (!this.ignoreClosePageFullEvent()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'open',\n state: true,\n idOverlay: this.idOverlay(),\n timeLiveUpdate: getDayjs().unix(),\n ignoreIntervalUpdateTimeLiveEvent: UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL,\n },\n };\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n\n if (!UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL) {\n interval(2000)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n data.response.timeLiveUpdate = getDayjs().unix();\n UtilsCommunicateMicro.PostMessageToParent(data);\n });\n }\n }\n }\n\n // #region --- EVENT HANDLERS ---\n protected handlerEdit() {\n this.outEdit.emit();\n }\n\n protected cancel() {\n this.outClose.emit();\n }\n\n protected async handlerClickButton(button: IPagesTemplateFullScreenButton) {\n if (button && button.action) {\n await button.action();\n }\n this.outClickButton.emit(button);\n }\n\n protected async handlerSwitch(event: ISwitchEvent, button: IPagesTemplateFullScreenButton) {\n if (button && button.action) {\n await button.action(event);\n }\n }\n\n protected handlerSelectedKey(event: IEmitSelectKey | undefined) {\n this.outSelectedMenuDropdown.emit(event);\n this.functionControlMenu?.reset();\n }\n\n protected handlerControlDropdownMenu(event: IDropdownFunctionControlEvent) {\n this.functionControlMenu = event;\n }\n // #endregion\n\n ngOnDestroy(): void {\n if (!this.ignoreClosePageFullEvent()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'close',\n state: false,\n idOverlay: this.idOverlay(),\n },\n };\n UtilsCommunicateMicro.PostMessageToParent(data);\n }\n }\n}\n","<div\n class=\"libs-ui-components-page_full overflow-hidden\"\n [style.zIndex]=\"zIndex()\"\n [style.background-color]=\"ignoreBackgroundColor() ? 'transparent' : '#f2f5f7'\">\n <!-- ===================== HEADER (giữ nguyên 100% từ V1) ===================== -->\n <div [class]=\"'libs-ui-components-page_full-header ' + classHeaderInclude()\">\n <div class=\"{{ divideClassHeader()?.classButtonCancel || 'w-[25%]' }}\">\n @if (leftTemplate(); as leftTemplate) {\n <ng-container *ngTemplateOutlet=\"leftTemplate\" />\n }\n @if (labelLeft(); as labelLeft) {\n <libs_ui-components-buttons-button\n [label]=\"labelLeft\"\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px]'\"\n [classLabel]=\"'libs-ui-font-h4r'\"\n (outClick)=\"cancel()\" />\n }\n </div>\n\n @if (centerTemplate(); as centerTemplate) {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <ng-container *ngTemplateOutlet=\"centerTemplate\" />\n </div>\n } @else {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, zIndex: zIndex() + 1 }\"\n [classInclude]=\"'libs-ui-font-h2s'\"\n [innerHtml]=\"title() ? (title() | LibsUiPipesEscapeHtmlPipe) : '&mdash;'\" />\n @if (hasEdit(); as hasEdit) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n (outClick)=\"handlerEdit()\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'ml-[4px]'\" />\n }\n @for (button of buttonCenter(); track button.key) {\n <div class=\"ml-[12px] flex items-center\">\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-head-4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'button-status' && button.configButtonStatus) {\n <libs_ui-components-buttons-status\n [class]=\"button.classInclude\"\n [config]=\"button.configButtonStatus\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0 text-white'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n </div>\n }\n </div>\n }\n\n <div class=\"{{ divideClassHeader()?.classButtonRight || 'w-[35%]' }} flex justify-end items-center\">\n @for (button of buttonRight(); track button.key) {\n <div [class.ml-[12px]]=\"!$first\">\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button?.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-h4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n [iconOnlyType]=\"button.iconOnlyType || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'line-space') {\n <div\n class=\"bg-[#666b79] w-[1px] h-[28px]\"\n [class]=\"button.classInclude\">\n &nbsp;\n </div>\n }\n </div>\n }\n @if (menuDropDownConfigs(); as menuDropDownConfigs) {\n <div class=\"ml-[12px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [listConfig]=\"menuDropDownConfigs.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"menuDropDownConfigs.popoverCustomConfig\"\n (outFunctionsControl)=\"handlerControlDropdownMenu($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\">\n <libs_ui-components-buttons-button\n [classInclude]=\"'p-[8px]'\"\n [type]=\"'button-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px]'\"\n [popover]=\"{ config: { content: 'i18n_4x_other_operations' } }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n </div>\n }\n @if (templateRight(); as templateRight) {\n <ng-container *ngTemplateOutlet=\"templateRight\" />\n }\n </div>\n </div>\n\n <!-- ===================== BODY (V2: Lazy Load hoặc ng-content) ===================== -->\n @if (bodyConfig().getComponentOutlet; as getBodyComponentOutlet) {\n <!-- Lazy load mode -->\n <div [class]=\"'libs-ui-components-page_full-body ' + (bodyConfig().classInclude || '')\">\n @let constHtmlCompBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: getBodyComponentOutlet : sectionData() : null : { valueIsEmpty: null } | async;\n @let constHtmlInputsBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: bodyConfig().getDataComponentOutlet : sectionData() : null : { valueIsEmpty: null } | async;\n @if (constHtmlCompBody) {\n @defer {\n <ng-container *ngComponentOutlet=\"constHtmlCompBody; inputs: constHtmlInputsBody\" />\n } @loading {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n } @else {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n </div>\n }\n</div>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, input, OnDestroy, OnInit, output, signal, TemplateRef } from '@angular/core';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsButtonsStatusComponent } from '@libs-ui/components-buttons-status';\nimport { IDropdown, IDropdownFunctionControlEvent, IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { ISwitchEvent, LibsUiComponentsSwitchComponent } from '@libs-ui/components-switch';\nimport { TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { LibsUiPipesEscapeHtmlPipe } from '@libs-ui/pipes-escape-html';\nimport { getDayjs, UtilsCommunicateMicro, UtilsCommunicateMicroKeyGlobal, uuid } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { interval, Subject, takeUntil } from 'rxjs';\nimport { IPagesTemplateFullScreenButton } from './interfaces/config.interface';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-pages_template_full_screen',\n templateUrl: './full-screen.component.html',\n styleUrls: ['./full-screen.component.scss'],\n standalone: true,\n imports: [\n TranslateModule,\n NgTemplateOutlet,\n LibsUiComponentsDropdownComponent,\n LibsUiComponentsSwitchComponent,\n LibsUiComponentsButtonsButtonComponent,\n LibsUiComponentsButtonsStatusComponent,\n LibsUiComponentsPopoverComponent,\n LibsUiPipesEscapeHtmlPipe,\n LibsUiComponentsLabelComponent,\n ],\n providers: [],\n})\nexport class LibsUiComponentsPagesTemplateFullScreenComponent implements OnInit, OnDestroy {\n private idOverlay = signal<string>(uuid());\n private functionControlMenu: IDropdownFunctionControlEvent | undefined;\n private onDestroy = new Subject<void>();\n\n readonly classHeaderInclude = input<string>();\n readonly labelLeft = input<string, string | undefined>('i18n_back_to_list', { transform: (val) => val ?? 'i18n_back_to_list' });\n readonly classBodyInclude = input<string>();\n readonly title = input<string>();\n readonly buttonCenter = input<Array<IPagesTemplateFullScreenButton> | undefined>();\n readonly buttonRight = input<Array<IPagesTemplateFullScreenButton>>();\n readonly hasEdit = input<boolean>(false);\n readonly menuDropDownConfigs = input<IDropdown>();\n readonly zIndex = input<number, number | undefined>(1000, { transform: (val) => val ?? 1000 });\n readonly ignoreClosePageFullEvent = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n readonly ignoreBackgroundColor = input<boolean>();\n readonly divideClassHeader = input<{ classButtonCancel: string; classButtonCenter: string; classButtonRight: string } | undefined>();\n readonly centerTemplate = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly templateRight = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly leftTemplate = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly disable = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n\n readonly outClose = output<void>();\n readonly outEdit = output<void>();\n readonly outSelectedMenuDropdown = output<IEmitSelectKey | undefined>();\n readonly outClickButton = output<IPagesTemplateFullScreenButton>();\n\n ngOnInit(): void {\n if (!this.ignoreClosePageFullEvent()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'open',\n state: true,\n idOverlay: this.idOverlay(),\n timeLiveUpdate: getDayjs().unix(),\n ignoreIntervalUpdateTimeLiveEvent: UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL,\n },\n };\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n\n if (UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL) {\n return;\n }\n\n interval(2000)\n .pipe(takeUntil(this.onDestroy))\n .subscribe(() => {\n data.response.timeLiveUpdate = getDayjs().unix();\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n });\n }\n }\n\n protected handlerEdit() {\n this.outEdit.emit();\n }\n\n protected cancel() {\n this.outClose.emit();\n }\n\n protected async handlerClickButton(button: IPagesTemplateFullScreenButton) {\n if (button && button.action) {\n await button.action();\n }\n this.outClickButton.emit(button);\n }\n\n protected async handlerSwitch(event: ISwitchEvent, button: IPagesTemplateFullScreenButton) {\n if (button && button.action) {\n await button.action(event);\n }\n }\n\n protected handlerSelectedKey(event: IEmitSelectKey | undefined) {\n this.outSelectedMenuDropdown.emit(event);\n this.functionControlMenu?.reset();\n }\n\n protected handlerControlDropdownMenu(event: IDropdownFunctionControlEvent) {\n this.functionControlMenu = event;\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n if (!this.ignoreClosePageFullEvent()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'close',\n state: false,\n idOverlay: this.idOverlay(),\n },\n };\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n }\n }\n}\n","<div\n class=\"libs-ui-components-page_full overflow-hidden\"\n [style.zIndex]=\"zIndex()\"\n [style.background-color]=\"ignoreBackgroundColor() ? 'transparent' : '#f2f5f7'\">\n <div [class]=\"'libs-ui-components-page_full-header ' + classHeaderInclude()\">\n <div class=\"{{ divideClassHeader()?.classButtonCancel || 'w-[25%]' }}\">\n @if (leftTemplate(); as leftTemplate) {\n <ng-container *ngTemplateOutlet=\"leftTemplate\" />\n }\n @if (labelLeft(); as labelLeft) {\n <libs_ui-components-buttons-button\n [label]=\"labelLeft\"\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px]'\"\n [classLabel]=\"'libs-ui-font-h4r'\"\n (outClick)=\"cancel()\" />\n }\n </div>\n\n @if (centerTemplate(); as centerTemplate) {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <ng-container *ngTemplateOutlet=\"centerTemplate\" />\n </div>\n } @else {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{\n maxWidth: 250,\n zIndex: zIndex() + 1,\n }\"\n [classInclude]=\"'libs-ui-font-h2s'\"\n [innerHtml]=\"title() ? (title() | LibsUiPipesEscapeHtmlPipe) : '&mdash;'\" />\n\n @if (hasEdit(); as hasEdit) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n (outClick)=\"handlerEdit()\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'ml-[4px]'\" />\n }\n @for (button of buttonCenter(); track button.key) {\n <div class=\"ml-[12px] flex items-center\">\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-head-4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'button-status' && button.configButtonStatus) {\n <libs_ui-components-buttons-status\n [class]=\"button.classInclude\"\n [config]=\"button.configButtonStatus\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0 text-white'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n </div>\n }\n </div>\n }\n\n <div class=\"{{ divideClassHeader()?.classButtonRight || 'w-[35%]' }} flex justify-end items-center\">\n @for (button of buttonRight(); track button.key) {\n <div [class.ml-[12px]]=\"!$first\">\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button?.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-h4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n [iconOnlyType]=\"button.iconOnlyType || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n <!-- thêm đường phân cách -->\n @if (button.key === 'line-space') {\n <div\n class=\"bg-[#666b79] w-[1px] h-[28px]\"\n [class]=\"button.classInclude\">\n &nbsp;\n </div>\n }\n </div>\n }\n @if (menuDropDownConfigs(); as menuDropDownConfigs) {\n <div class=\"ml-[12px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [listConfig]=\"menuDropDownConfigs.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"menuDropDownConfigs.popoverCustomConfig\"\n (outFunctionsControl)=\"handlerControlDropdownMenu($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\">\n <libs_ui-components-buttons-button\n [classInclude]=\"'p-[8px]'\"\n [type]=\"'button-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px]'\"\n [popover]=\"{\n config: {\n content: 'i18n_4x_other_operations',\n },\n }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n </div>\n }\n @if (templateRight(); as templateRight) {\n <ng-container *ngTemplateOutlet=\"templateRight\" />\n }\n </div>\n </div>\n <div [class]=\"'libs-ui-components-page_full-body ' + classBodyInclude()\">\n <ng-content />\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "name": "@libs-ui/components-pages-template-full-screen",
3
- "version": "0.2.356-7",
3
+ "version": "0.2.356-9",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=18.0.0",
6
6
  "@angular/core": ">=18.0.0",
7
- "@libs-ui/components-buttons-button": "0.2.356-7",
8
- "@libs-ui/components-buttons-status": "0.2.356-7",
9
- "@libs-ui/components-dropdown": "0.2.356-7",
10
- "@libs-ui/components-label": "0.2.356-7",
11
- "@libs-ui/components-popover": "0.2.356-7",
12
- "@libs-ui/components-switch": "0.2.356-7",
13
- "@libs-ui/interfaces-types": "0.2.356-7",
14
- "@libs-ui/pipes-escape-html": "0.2.356-7",
15
- "@libs-ui/utils": "0.2.356-7",
7
+ "@libs-ui/components-buttons-button": "0.2.356-9",
8
+ "@libs-ui/components-buttons-status": "0.2.356-9",
9
+ "@libs-ui/components-dropdown": "0.2.356-9",
10
+ "@libs-ui/components-label": "0.2.356-9",
11
+ "@libs-ui/components-popover": "0.2.356-9",
12
+ "@libs-ui/components-switch": "0.2.356-9",
13
+ "@libs-ui/interfaces-types": "0.2.356-9",
14
+ "@libs-ui/pipes-escape-html": "0.2.356-9",
15
+ "@libs-ui/utils": "0.2.356-9",
16
16
  "dayjs": "1.11.5",
17
17
  "rxjs": "~7.8.0",
18
18
  "@ngx-translate/core": "^15.0.0"