general-library-union 2.4.94 → 2.4.96
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.
- package/esm2022/src/app/webcommon/pages/cargue-plantilla/cargue-plantilla-general/cargue-plantilla-general.component.mjs +3 -3
- package/fesm2022/general-library-union.mjs +2 -2
- package/fesm2022/general-library-union.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/layout/app.menuitem.component.d.ts +1 -1
- package/src/app/webcommon/pages/fuente/importar-fuente-con/importar-fuente-con.component.d.ts +1 -1
|
@@ -339,7 +339,7 @@ export class CarguePlantillaGeneralComponent {
|
|
|
339
339
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: CarguePlantillaGeneralComponent, deps: [{ token: i1.PlantillasService }, { token: i2.AuthService }, { token: i3.TranslateService }, { token: i4.CargarControlFuncionalidadService }, { token: i5.ConfirmationService }, { token: i6.ToastService }, { token: i7.CargarArchivosService }, { token: i8.EncriptadoBasicoService }, { token: i9.GeneralPipe }, { token: i10.UtilsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
340
340
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: CarguePlantillaGeneralComponent, isStandalone: true, selector: "app-cargue-plantilla-general", providers: [
|
|
341
341
|
ConfirmationService
|
|
342
|
-
], viewQueries: [{ propertyName: "popupConvertirPlantillasComponent", first: true, predicate: PopupConvertirPlantillasComponent, descendants: true }, { propertyName: "miFormulario", first: true, predicate: ["miFormulario"], descendants: true }, { propertyName: "treeComponent", first: true, predicate: ["tree"], descendants: true }], ngImport: i0, template: "<p-confirmPopup key=\"eliminarCarpeta\"></p-confirmPopup>\n<p-confirmPopup key=\"eliminarArchivo\"></p-confirmPopup>\n\n<h1 class=\"mb-4\">{{'cargue' | translate}} {{'plantillas' | translate}}</h1>\n\n<div class=\"p-fluid p-formgrid grid\">\n\n <div class=\"field col-12 md:col-6 lg:col-5\">\n <div class=\"flex justify-content-between align-items-center justify-content-center\">\n <input type=\"text\" pInputText [(ngModel)]=\"filterValue\" placeholder=\"{{'filtro' | translate}}\"\n (keydown)=\"filtrarEnter($event)\" />\n <button type=\"button\" pButton pRipple icon=\"pi pi-search text-xl\" (click)=\"aplicarFiltro()\"\n class=\"p-element p-ripple p-button-rounded p-button-secondary p-button p-component p-button-icon-only\"\n tooltipPosition=\"bottom\" pTooltip=\"Editar HTML\"></button>\n </div>\n\n <p-tree #tree scrollHeight=\"670px\" [value]=\"filteredFiles\" selectionMode=\"single\" [(selection)]=\"dataSelected\"\n [filter]=\"false\" [filterPlaceholder]=\"'filtro' | translate\" filterMode=\"strict\"\n (onNodeSelect)=\"seleccionarArchivo($event)\" [loading]=\"loading\"\n (onNodeUnselect)=\"deseleccionarArchivo($event)\"></p-tree>\n </div>\n\n <!-- OPCINES DIRECTORIOS - ARCHIVOS -->\n <div class=\"field col-12 md:col-6 lg:col-7\">\n\n @if(!this.loading){\n <div class=\"card\">\n\n <!-- CARPETA -->\n @if(archivoSeleccionado.expanded){\n <div class=\"flex align-items-center\">\n <h1 class=\"text-xl mt-2 mb-4 mr-3\">Carpeta: </h1>\n <h5 class=\"text-sm mt-2 mb-4\"> {{archivoSeleccionado.label}} </h5>\n </div>\n\n <div class=\"flex justify-content-between\">\n\n <!-- Convertir -->\n <button type=\"button\" pButton pRipple (click)=\"convertirArchivos()\"\n *ngIf=\"verConvertir && controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"\n tooltipPosition=\"bottom\" label=\"{{'convertir' | translate}}\"\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n pTooltip=\"Convertir archivo\" tooltipPosition=\"bottom\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"pi pi-arrow-right-arrow-left color-500\"></i>\n </div>\n </button>\n\n <!--Nueva Carpeta-->\n <button *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\" pButton pRipple\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_nuevo' | translate}}\" (click)=\"crearCarpeta()\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-floppy-save color-500\"></i>\n </div>\n </button>\n\n <!--Eliminar-->\n <button *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\" pButton pRipple\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminarCarpeta()\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-bin color-500\"></i>\n </div>\n </button>\n\n <!-- Cargar Archivo -->\n <p-fileUpload #fubauto mode=\"basic\" [auto]=\"true\" [customUpload]=\"true\" chooseIcon=\"pi pi-paperclip\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"\n chooseLabel=\"{{'link_subirarchivos' | translate}}\" (onSelect)=\"cargarNuevo($event, fubauto)\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"pi pi-trash\"></i>\n </div>\n </p-fileUpload>\n </div>\n }\n\n <!-- ARCHIVO-->\n @if(!archivoSeleccionado.expanded){\n\n <div class=\"flex align-items-center\">\n <h1 class=\"text-xl mt-2 mb-4 mr-3\">Archivo: </h1>\n <h5 class=\"text-sm mt-2 mb-4\"> {{archivoSeleccionado.label}} </h5>\n </div>\n\n <div class=\"flex justify-content-end\">\n @if(archivoSeleccionado.label.includes('.html')){\n\n <!--EDITAR HTML-->\n <button type=\"button\" pButton pRipple icon=\"pi pi-code text-xl\" (click)=\"editarAction()\"\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\" label=\"Editar HTML\">\n </button>\n }\n\n <!-- DESCARGAR-->\n <button pButton pRipple class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_descargar' | translate}}\" (click)=\"descargarAnexo()\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:descargar')\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-download\"></i>\n </div>\n </button>\n\n <!--ELIMINAR-->\n <button pButton pRipple class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminarArchivo()\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-bin\"></i>\n </div>\n </button>\n </div>\n }\n </div>\n }\n\n @if(archivoSeleccionado.expanded && isVisualizarCrearCaperta){\n <div class=\"card\">\n\n <h5 class=\"mt-2\"><i class=\"glyphicons glyphicons-note\"></i> Nueva carpeta</h5>\n\n <form #miFormulario=\"ngForm\">\n <!-- campos -->\n <div class=\"flex mb-3\">\n <!-- Nombre -->\n <div class=\"w-full p-0 mb-0\">\n <span class=\"p-float-label mr-2\">\n <input pInputText id=\"id_numero_de_evento\" [(ngModel)]=\"nomNuevaCarpeta\" required\n name=\"nombreCarpeta\">\n <label for=\"id_numero_de_evento\">{{'nombre' | translate}} *</label>\n </span>\n </div>\n\n <div class=\"flex justify-content-end\">\n <!--Guardar Carpeta-->\n <button pButton pRipple class=\"mr-2 p-button background-100 color-500\"\n icon=\"glyphicons glyphicons-floppy-save\" [label]=\"('link_guardar' | translate)\"\n (click)=\"guardarCarpeta()\">\n </button>\n </div>\n </div>\n </form>\n\n </div>\n }\n <!-- EDITOR DE HTML -->\n <div *ngIf=\"isHtml() && mostrarEditor\">\n\n <div class=\"flex justify-content-end align-items-center mb-3\">\n <!-- Bot\u00F3n guardar HTML -->\n <button pButton pRipple label=\"{{'link_guardar' | translate }}\" (click)=\"guardarHtml()\"\n icon=\"glyphicons glyphicons-floppy-save\" class=\"p-button-secondary\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"></button>\n </div>\n\n <p-editor id=\"editor\" [style]=\"{ height: '500px' }\" required [(ngModel)]=\"modificarHTML\"\n name=\"htmlPublicacion\"></p-editor>\n\n </div>\n </div>\n</div>\n\n@if(isMostrarPopupConvertir){\n<app-popup-convertir-plantillas (regresar)=\"regresarPopupConvertir($event)\"></app-popup-convertir-plantillas>\n}", styles: [""], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TreeModule }, { kind: "component", type: i12.Tree, selector: "p-tree", inputs: ["value", "selectionMode", "loadingMode", "selection", "style", "styleClass", "contextMenu", "layout", "draggableScope", "droppableScope", "draggableNodes", "droppableNodes", "metaKeySelection", "propagateSelectionUp", "propagateSelectionDown", "loading", "loadingIcon", "emptyMessage", "ariaLabel", "togglerAriaLabel", "ariaLabelledBy", "validateDrop", "filter", "filterBy", "filterMode", "filterPlaceholder", "filteredNodes", "filterLocale", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "indentation", "_templateMap", "trackBy", "virtualNodeHeight"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse", "onNodeContextMenuSelect", "onNodeDrop", "onLazyLoad", "onScroll", "onScrollIndexChange", "onFilter"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i13.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i14.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "directive", type: i15.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: ConfirmPopupModule }, { kind: "component", type: i16.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i17.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i17.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i17.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i17.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i17.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i17.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i17.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FieldsetModule }, { kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i18.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: PopupConvertirPlantillasComponent, selector: "app-popup-convertir-plantillas", inputs: ["showDialog"], outputs: ["onSelected", "regresar"] }, { kind: "ngmodule", type: EditorModule }, { kind: "component", type: i19.Editor, selector: "p-editor", inputs: ["style", "styleClass", "placeholder", "formats", "modules", "bounds", "scrollingContainer", "debug", "readonly"], outputs: ["onInit", "onTextChange", "onSelectionChange"] }] });
|
|
342
|
+
], viewQueries: [{ propertyName: "popupConvertirPlantillasComponent", first: true, predicate: PopupConvertirPlantillasComponent, descendants: true }, { propertyName: "miFormulario", first: true, predicate: ["miFormulario"], descendants: true }, { propertyName: "treeComponent", first: true, predicate: ["tree"], descendants: true }], ngImport: i0, template: "<p-confirmPopup key=\"eliminarCarpeta\"></p-confirmPopup>\n<p-confirmPopup key=\"eliminarArchivo\"></p-confirmPopup>\n\n<h1 class=\"mb-4\">{{'cargue' | translate}} {{'plantillas' | translate}}</h1>\n\n<div class=\"p-fluid p-formgrid grid\">\n\n <div class=\"field col-12 md:col-6 lg:col-5 card p-5\">\n <div class=\"flex justify-content-between align-items-center justify-content-center relative\">\n <input type=\"text\" pInputText [(ngModel)]=\"filterValue\" placeholder=\"{{'filtro' | translate}}\"\n (keydown)=\"filtrarEnter($event)\" />\n <button type=\"button\" pButton pRipple icon=\"pi pi-search text-xl\" (click)=\"aplicarFiltro()\"\n class=\"p-element p-ripple p-button-rounded p-button-secondary p-button p-component p-button-icon-only absolute right-0 border-none bg-white-alpha-10\"\n tooltipPosition=\"bottom\" pTooltip=\"Editar HTML\"></button>\n </div>\n\n <p-tree #tree scrollHeight=\"670px\" [value]=\"filteredFiles\" selectionMode=\"single\" [(selection)]=\"dataSelected\"\n [filter]=\"false\" [filterPlaceholder]=\"'filtro' | translate\" filterMode=\"strict\"\n (onNodeSelect)=\"seleccionarArchivo($event)\" [loading]=\"loading\"\n (onNodeUnselect)=\"deseleccionarArchivo($event)\"></p-tree>\n </div>\n\n <!-- OPCINES DIRECTORIOS - ARCHIVOS -->\n <div class=\"field col-12 md:col-6 lg:col-7 p-0 pl-3\">\n\n @if(!this.loading){\n <div class=\"card p-3\">\n\n <!-- CARPETA -->\n @if(archivoSeleccionado.expanded){\n <div class=\"flex align-items-center\">\n <h1 class=\"text-xl mt-2 mb-4 mr-3\">Carpeta: </h1>\n <h5 class=\"text-sm mt-2 mb-4\"> {{archivoSeleccionado.label}} </h5>\n </div>\n\n <div class=\"flex justify-content-between\">\n\n <!-- Convertir -->\n <button type=\"button\" pButton pRipple (click)=\"convertirArchivos()\"\n *ngIf=\"verConvertir && controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"\n tooltipPosition=\"bottom\" label=\"{{'convertir' | translate}}\"\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n pTooltip=\"Convertir archivo\" tooltipPosition=\"bottom\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"pi pi-arrow-right-arrow-left color-500\"></i>\n </div>\n </button>\n\n <!--Nueva Carpeta-->\n <button *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\" pButton pRipple\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_nuevo' | translate}}\" (click)=\"crearCarpeta()\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-floppy-save color-500\"></i>\n </div>\n </button>\n\n <!--Eliminar-->\n <button *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\" pButton pRipple\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminarCarpeta()\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-bin color-500\"></i>\n </div>\n </button>\n\n <!-- Cargar Archivo -->\n <div [ngClass]=\"{ 'min-width-100': !verConvertir, 'min-width-20': verConvertir }\">\n <p-fileUpload #fubauto mode=\"basic\" [auto]=\"true\" [customUpload]=\"true\" chooseIcon=\"pi pi-paperclip\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"\n chooseLabel=\"{{'link_subirarchivos' | translate}}\" (onSelect)=\"cargarNuevo($event, fubauto)\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"pi pi-trash\"></i>\n </div>\n </p-fileUpload>\n </div>\n </div>\n }\n\n <!-- ARCHIVO-->\n @if(!archivoSeleccionado.expanded){\n\n <div class=\"flex align-items-center\">\n <h1 class=\"text-xl mt-2 mb-4 mr-3\">Archivo: </h1>\n <h5 class=\"text-sm mt-2 mb-4\"> {{archivoSeleccionado.label}} </h5>\n </div>\n\n <div class=\"flex justify-content-end\">\n @if(archivoSeleccionado.label.includes('.html')){\n\n <!--EDITAR HTML-->\n <button type=\"button\" pButton pRipple icon=\"pi pi-code text-xl color-500\" (click)=\"editarAction()\"\n class=\"p-button-outlined boton-accion-principal text-gray-600\" label=\"Editar HTML\">\n </button>\n }\n\n <!-- DESCARGAR-->\n <button pButton pRipple class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_descargar' | translate}}\" (click)=\"descargarAnexo()\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:descargar')\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-download color-500\"></i>\n </div>\n </button>\n\n <!--ELIMINAR-->\n <button pButton pRipple class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminarArchivo()\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-bin color-500\"></i>\n </div>\n </button>\n </div>\n }\n </div>\n }\n\n @if(archivoSeleccionado.expanded && isVisualizarCrearCaperta){\n <div class=\"card\">\n\n <h5 class=\"mt-2\"><i class=\"glyphicons glyphicons-note\"></i> Nueva carpeta</h5>\n\n <form #miFormulario=\"ngForm\">\n <!-- campos -->\n <div class=\"flex mb-3\">\n <!-- Nombre -->\n <div class=\"w-full p-0 mb-0\">\n <span class=\"p-float-label mr-2\">\n <input pInputText id=\"id_numero_de_evento\" [(ngModel)]=\"nomNuevaCarpeta\" required\n name=\"nombreCarpeta\">\n <label for=\"id_numero_de_evento\">{{'nombre' | translate}} *</label>\n </span>\n </div>\n\n <div class=\"flex justify-content-end\">\n <!--Guardar Carpeta-->\n <button pButton pRipple class=\"mr-2 p-button background-100 color-500\"\n icon=\"glyphicons glyphicons-floppy-save\" [label]=\"('link_guardar' | translate)\"\n (click)=\"guardarCarpeta()\">\n </button>\n </div>\n </div>\n </form>\n\n </div>\n }\n <!-- EDITOR DE HTML -->\n <div *ngIf=\"isHtml() && mostrarEditor\">\n\n <div class=\"flex justify-content-end align-items-center mb-3\">\n <!-- Bot\u00F3n guardar HTML -->\n <button pButton pRipple label=\"{{'link_guardar' | translate }}\" (click)=\"guardarHtml()\"\n icon=\"glyphicons glyphicons-floppy-save\" class=\"p-button-secondary\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"></button>\n </div>\n\n <p-editor id=\"editor\" [style]=\"{ height: '500px' }\" required [(ngModel)]=\"modificarHTML\"\n name=\"htmlPublicacion\"></p-editor>\n\n </div>\n </div>\n</div>\n\n@if(isMostrarPopupConvertir){\n<app-popup-convertir-plantillas (regresar)=\"regresarPopupConvertir($event)\"></app-popup-convertir-plantillas>\n}", styles: [":host ::ng-deep .p-fluid .p-fileupload .p-button{width:100%}:host ::ng-deep .min-width-20{min-width:20%}:host ::ng-deep .min-width-100{min-width:30%}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TreeModule }, { kind: "component", type: i12.Tree, selector: "p-tree", inputs: ["value", "selectionMode", "loadingMode", "selection", "style", "styleClass", "contextMenu", "layout", "draggableScope", "droppableScope", "draggableNodes", "droppableNodes", "metaKeySelection", "propagateSelectionUp", "propagateSelectionDown", "loading", "loadingIcon", "emptyMessage", "ariaLabel", "togglerAriaLabel", "ariaLabelledBy", "validateDrop", "filter", "filterBy", "filterMode", "filterPlaceholder", "filteredNodes", "filterLocale", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "indentation", "_templateMap", "trackBy", "virtualNodeHeight"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse", "onNodeContextMenuSelect", "onNodeDrop", "onLazyLoad", "onScroll", "onScrollIndexChange", "onFilter"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i13.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i14.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "directive", type: i15.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: ConfirmPopupModule }, { kind: "component", type: i16.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i17.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i17.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i17.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i17.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i17.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i17.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i17.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FieldsetModule }, { kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i18.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: PopupConvertirPlantillasComponent, selector: "app-popup-convertir-plantillas", inputs: ["showDialog"], outputs: ["onSelected", "regresar"] }, { kind: "ngmodule", type: EditorModule }, { kind: "component", type: i19.Editor, selector: "p-editor", inputs: ["style", "styleClass", "placeholder", "formats", "modules", "bounds", "scrollingContainer", "debug", "readonly"], outputs: ["onInit", "onTextChange", "onSelectionChange"] }] });
|
|
343
343
|
}
|
|
344
344
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: CarguePlantillaGeneralComponent, decorators: [{
|
|
345
345
|
type: Component,
|
|
@@ -357,7 +357,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
|
|
|
357
357
|
EditorModule
|
|
358
358
|
], providers: [
|
|
359
359
|
ConfirmationService
|
|
360
|
-
], template: "<p-confirmPopup key=\"eliminarCarpeta\"></p-confirmPopup>\n<p-confirmPopup key=\"eliminarArchivo\"></p-confirmPopup>\n\n<h1 class=\"mb-4\">{{'cargue' | translate}} {{'plantillas' | translate}}</h1>\n\n<div class=\"p-fluid p-formgrid grid\">\n\n <div class=\"field col-12 md:col-6 lg:col-5\">\n <div class=\"flex justify-content-between align-items-center justify-content-center\">\n <input type=\"text\" pInputText [(ngModel)]=\"filterValue\" placeholder=\"{{'filtro' | translate}}\"\n (keydown)=\"filtrarEnter($event)\" />\n <button type=\"button\" pButton pRipple icon=\"pi pi-search text-xl\" (click)=\"aplicarFiltro()\"\n class=\"p-element p-ripple p-button-rounded p-button-secondary p-button p-component p-button-icon-only\"\n tooltipPosition=\"bottom\" pTooltip=\"Editar HTML\"></button>\n </div>\n\n <p-tree #tree scrollHeight=\"670px\" [value]=\"filteredFiles\" selectionMode=\"single\" [(selection)]=\"dataSelected\"\n [filter]=\"false\" [filterPlaceholder]=\"'filtro' | translate\" filterMode=\"strict\"\n (onNodeSelect)=\"seleccionarArchivo($event)\" [loading]=\"loading\"\n (onNodeUnselect)=\"deseleccionarArchivo($event)\"></p-tree>\n </div>\n\n <!-- OPCINES DIRECTORIOS - ARCHIVOS -->\n <div class=\"field col-12 md:col-6 lg:col-7\">\n\n @if(!this.loading){\n <div class=\"card\">\n\n <!-- CARPETA -->\n @if(archivoSeleccionado.expanded){\n <div class=\"flex align-items-center\">\n <h1 class=\"text-xl mt-2 mb-4 mr-3\">Carpeta: </h1>\n <h5 class=\"text-sm mt-2 mb-4\"> {{archivoSeleccionado.label}} </h5>\n </div>\n\n <div class=\"flex justify-content-between\">\n\n <!-- Convertir -->\n <button type=\"button\" pButton pRipple (click)=\"convertirArchivos()\"\n *ngIf=\"verConvertir && controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"\n tooltipPosition=\"bottom\" label=\"{{'convertir' | translate}}\"\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n pTooltip=\"Convertir archivo\" tooltipPosition=\"bottom\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"pi pi-arrow-right-arrow-left color-500\"></i>\n </div>\n </button>\n\n <!--Nueva Carpeta-->\n <button *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\" pButton pRipple\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_nuevo' | translate}}\" (click)=\"crearCarpeta()\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-floppy-save color-500\"></i>\n </div>\n </button>\n\n <!--Eliminar-->\n <button *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\" pButton pRipple\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminarCarpeta()\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-bin color-500\"></i>\n </div>\n </button>\n\n <!-- Cargar Archivo -->\n <p-fileUpload #fubauto mode=\"basic\" [auto]=\"true\" [customUpload]=\"true\" chooseIcon=\"pi pi-paperclip\"\n
|
|
360
|
+
], template: "<p-confirmPopup key=\"eliminarCarpeta\"></p-confirmPopup>\n<p-confirmPopup key=\"eliminarArchivo\"></p-confirmPopup>\n\n<h1 class=\"mb-4\">{{'cargue' | translate}} {{'plantillas' | translate}}</h1>\n\n<div class=\"p-fluid p-formgrid grid\">\n\n <div class=\"field col-12 md:col-6 lg:col-5 card p-5\">\n <div class=\"flex justify-content-between align-items-center justify-content-center relative\">\n <input type=\"text\" pInputText [(ngModel)]=\"filterValue\" placeholder=\"{{'filtro' | translate}}\"\n (keydown)=\"filtrarEnter($event)\" />\n <button type=\"button\" pButton pRipple icon=\"pi pi-search text-xl\" (click)=\"aplicarFiltro()\"\n class=\"p-element p-ripple p-button-rounded p-button-secondary p-button p-component p-button-icon-only absolute right-0 border-none bg-white-alpha-10\"\n tooltipPosition=\"bottom\" pTooltip=\"Editar HTML\"></button>\n </div>\n\n <p-tree #tree scrollHeight=\"670px\" [value]=\"filteredFiles\" selectionMode=\"single\" [(selection)]=\"dataSelected\"\n [filter]=\"false\" [filterPlaceholder]=\"'filtro' | translate\" filterMode=\"strict\"\n (onNodeSelect)=\"seleccionarArchivo($event)\" [loading]=\"loading\"\n (onNodeUnselect)=\"deseleccionarArchivo($event)\"></p-tree>\n </div>\n\n <!-- OPCINES DIRECTORIOS - ARCHIVOS -->\n <div class=\"field col-12 md:col-6 lg:col-7 p-0 pl-3\">\n\n @if(!this.loading){\n <div class=\"card p-3\">\n\n <!-- CARPETA -->\n @if(archivoSeleccionado.expanded){\n <div class=\"flex align-items-center\">\n <h1 class=\"text-xl mt-2 mb-4 mr-3\">Carpeta: </h1>\n <h5 class=\"text-sm mt-2 mb-4\"> {{archivoSeleccionado.label}} </h5>\n </div>\n\n <div class=\"flex justify-content-between\">\n\n <!-- Convertir -->\n <button type=\"button\" pButton pRipple (click)=\"convertirArchivos()\"\n *ngIf=\"verConvertir && controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"\n tooltipPosition=\"bottom\" label=\"{{'convertir' | translate}}\"\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n pTooltip=\"Convertir archivo\" tooltipPosition=\"bottom\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"pi pi-arrow-right-arrow-left color-500\"></i>\n </div>\n </button>\n\n <!--Nueva Carpeta-->\n <button *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\" pButton pRipple\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_nuevo' | translate}}\" (click)=\"crearCarpeta()\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-floppy-save color-500\"></i>\n </div>\n </button>\n\n <!--Eliminar-->\n <button *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\" pButton pRipple\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminarCarpeta()\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-bin color-500\"></i>\n </div>\n </button>\n\n <!-- Cargar Archivo -->\n <div [ngClass]=\"{ 'min-width-100': !verConvertir, 'min-width-20': verConvertir }\">\n <p-fileUpload #fubauto mode=\"basic\" [auto]=\"true\" [customUpload]=\"true\" chooseIcon=\"pi pi-paperclip\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"\n chooseLabel=\"{{'link_subirarchivos' | translate}}\" (onSelect)=\"cargarNuevo($event, fubauto)\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"pi pi-trash\"></i>\n </div>\n </p-fileUpload>\n </div>\n </div>\n }\n\n <!-- ARCHIVO-->\n @if(!archivoSeleccionado.expanded){\n\n <div class=\"flex align-items-center\">\n <h1 class=\"text-xl mt-2 mb-4 mr-3\">Archivo: </h1>\n <h5 class=\"text-sm mt-2 mb-4\"> {{archivoSeleccionado.label}} </h5>\n </div>\n\n <div class=\"flex justify-content-end\">\n @if(archivoSeleccionado.label.includes('.html')){\n\n <!--EDITAR HTML-->\n <button type=\"button\" pButton pRipple icon=\"pi pi-code text-xl color-500\" (click)=\"editarAction()\"\n class=\"p-button-outlined boton-accion-principal text-gray-600\" label=\"Editar HTML\">\n </button>\n }\n\n <!-- DESCARGAR-->\n <button pButton pRipple class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_descargar' | translate}}\" (click)=\"descargarAnexo()\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:descargar')\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-download color-500\"></i>\n </div>\n </button>\n\n <!--ELIMINAR-->\n <button pButton pRipple class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminarArchivo()\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-bin color-500\"></i>\n </div>\n </button>\n </div>\n }\n </div>\n }\n\n @if(archivoSeleccionado.expanded && isVisualizarCrearCaperta){\n <div class=\"card\">\n\n <h5 class=\"mt-2\"><i class=\"glyphicons glyphicons-note\"></i> Nueva carpeta</h5>\n\n <form #miFormulario=\"ngForm\">\n <!-- campos -->\n <div class=\"flex mb-3\">\n <!-- Nombre -->\n <div class=\"w-full p-0 mb-0\">\n <span class=\"p-float-label mr-2\">\n <input pInputText id=\"id_numero_de_evento\" [(ngModel)]=\"nomNuevaCarpeta\" required\n name=\"nombreCarpeta\">\n <label for=\"id_numero_de_evento\">{{'nombre' | translate}} *</label>\n </span>\n </div>\n\n <div class=\"flex justify-content-end\">\n <!--Guardar Carpeta-->\n <button pButton pRipple class=\"mr-2 p-button background-100 color-500\"\n icon=\"glyphicons glyphicons-floppy-save\" [label]=\"('link_guardar' | translate)\"\n (click)=\"guardarCarpeta()\">\n </button>\n </div>\n </div>\n </form>\n\n </div>\n }\n <!-- EDITOR DE HTML -->\n <div *ngIf=\"isHtml() && mostrarEditor\">\n\n <div class=\"flex justify-content-end align-items-center mb-3\">\n <!-- Bot\u00F3n guardar HTML -->\n <button pButton pRipple label=\"{{'link_guardar' | translate }}\" (click)=\"guardarHtml()\"\n icon=\"glyphicons glyphicons-floppy-save\" class=\"p-button-secondary\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"></button>\n </div>\n\n <p-editor id=\"editor\" [style]=\"{ height: '500px' }\" required [(ngModel)]=\"modificarHTML\"\n name=\"htmlPublicacion\"></p-editor>\n\n </div>\n </div>\n</div>\n\n@if(isMostrarPopupConvertir){\n<app-popup-convertir-plantillas (regresar)=\"regresarPopupConvertir($event)\"></app-popup-convertir-plantillas>\n}", styles: [":host ::ng-deep .p-fluid .p-fileupload .p-button{width:100%}:host ::ng-deep .min-width-20{min-width:20%}:host ::ng-deep .min-width-100{min-width:30%}\n"] }]
|
|
361
361
|
}], ctorParameters: () => [{ type: i1.PlantillasService }, { type: i2.AuthService }, { type: i3.TranslateService }, { type: i4.CargarControlFuncionalidadService }, { type: i5.ConfirmationService }, { type: i6.ToastService }, { type: i7.CargarArchivosService }, { type: i8.EncriptadoBasicoService }, { type: i9.GeneralPipe }, { type: i10.UtilsService }], propDecorators: { popupConvertirPlantillasComponent: [{
|
|
362
362
|
type: ViewChild,
|
|
363
363
|
args: [PopupConvertirPlantillasComponent]
|
|
@@ -368,4 +368,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
|
|
|
368
368
|
type: ViewChild,
|
|
369
369
|
args: ['tree']
|
|
370
370
|
}] } });
|
|
371
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZ3VlLXBsYW50aWxsYS1nZW5lcmFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvd2ViY29tbW9uL3BhZ2VzL2Nhcmd1ZS1wbGFudGlsbGEvY2FyZ3VlLXBsYW50aWxsYS1nZW5lcmFsL2Nhcmd1ZS1wbGFudGlsbGEtZ2VuZXJhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3dlYmNvbW1vbi9wYWdlcy9jYXJndWUtcGxhbnRpbGxhL2Nhcmd1ZS1wbGFudGlsbGEtZ2VuZXJhbC9jYXJndWUtcGxhbnRpbGxhLWdlbmVyYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQW9CLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFzQixNQUFNLGFBQWEsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBUSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBVSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FB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Y0FDNUIsSUFBSSxXQUNQLENBQUMsZUFBZTt3QkFDdkIsWUFBWTt3QkFDWixVQUFVO3dCQUNWLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsV0FBVzt3QkFDWCxjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsaUNBQWlDO3dCQUNqQyxZQUFZO3FCQUNiLGFBR1U7d0JBQ1QsbUJBQW1CO3FCQUNwQjs0WEFJNkMsaUNBQWlDO3NCQUE5RSxTQUFTO3VCQUFDLGlDQUFpQztnQkFDRSxZQUFZO3NCQUF6RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ3pCLGFBQWE7c0JBQS9CLFNBQVM7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBNZW51SXRlbSwgVHJlZU5vZGUgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBJbnB1dFRleHRNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0dGV4dCc7XG5pbXBvcnQgeyBTcGxpdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvc3BsaXRidXR0b24nO1xuaW1wb3J0IHsgVHJlZSwgVHJlZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdHJlZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBQbGFudGlsbGFzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3dlYmNvbW1vbi9zZXJ2aWNlcy9wbGFudGlsbGFzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FyZ2FyQ29udHJvbEZ1bmNpb25hbGlkYWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNpb3MvY2FyZ2FyLWNvbnRyb2wtZnVuY2lvbmFsaWRhZC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpcm1Qb3B1cE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY29uZmlybXBvcHVwJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGaWVsZHNldE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZmllbGRzZXQnO1xuaW1wb3J0IHsgRmlsZVVwbG9hZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZmlsZXVwbG9hZCc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2lvcy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENhcmdhckFyY2hpdm9zU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNpb3MvY2FyZ2FyLWFyY2hpdm9zLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW5jcmlwdGFkb0Jhc2ljb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvc2VydmljaW9zL2VuY3JpcHRhZG8tYmFzaWNvLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2VuZXJhbFBpcGUgfSBmcm9tICcuLi8uLi8uLi8uLi93ZWJjb21tb24vcGlwZXMvZ2VuZXJhbC5waXBlJztcbmltcG9ydCB7IFBvcHVwQ29udmVydGlyUGxhbnRpbGxhc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL3dlYmNvbW1vbi9wb3B1cHMvcG9wdXAtY29udmVydGlyLXBsYW50aWxsYXMvcG9wdXAtY29udmVydGlyLXBsYW50aWxsYXMuY29tcG9uZW50JztcbmltcG9ydCB7IFV0aWxzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL3V0aWxzLnNlcnZpY2UnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVkaXRvck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZWRpdG9yJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNhcmd1ZS1wbGFudGlsbGEtZ2VuZXJhbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyZWVNb2R1bGUsXG4gICAgSW5wdXRUZXh0TW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBTcGxpdEJ1dHRvbk1vZHVsZSxcbiAgICBDb25maXJtUG9wdXBNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRmllbGRzZXRNb2R1bGUsXG4gICAgRmlsZVVwbG9hZE1vZHVsZSxcbiAgICBQb3B1cENvbnZlcnRpclBsYW50aWxsYXNDb21wb25lbnQsXG4gICAgRWRpdG9yTW9kdWxlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJndWUtcGxhbnRpbGxhLWdlbmVyYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vY2FyZ3VlLXBsYW50aWxsYS1nZW5lcmFsLmNvbXBvbmVudC5zY3NzJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgQ29uZmlybWF0aW9uU2VydmljZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENhcmd1ZVBsYW50aWxsYUdlbmVyYWxDb21wb25lbnQge1xuXG4gIEBWaWV3Q2hpbGQoUG9wdXBDb252ZXJ0aXJQbGFudGlsbGFzQ29tcG9uZW50KSBwb3B1cENvbnZlcnRpclBsYW50aWxsYXNDb21wb25lbnQ6IFBvcHVwQ29udmVydGlyUGxhbnRpbGxhc0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnbWlGb3JtdWxhcmlvJywgeyBzdGF0aWM6IGZhbHNlIH0pIG1pRm9ybXVsYXJpbyE6IE5nRm9ybTtcbiAgQFZpZXdDaGlsZCgndHJlZScpIHRyZWVDb21wb25lbnQhOiBUcmVlO1xuXG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIHByb3BpZWRhZDogc3RyaW5nO1xuICBleHRlbnNpb25lczogc3RyaW5nO1xuICBwcm9waWVkYWREZVNpc3RlbWE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYW5leG9Qcm9waWVkYWQ6IHN0cmluZyA9ICcnO1xuICBmaWxlczogVHJlZU5vZGVbXTtcbiAgZGF0YVNlbGVjdGVkOiBUcmVlTm9kZTtcbiAgaXRlbXNCb3RvbkFjY2lvbmVzOiBNZW51SXRlbVtdO1xuICB2ZXJDb252ZXJ0aXI6IGJvb2xlYW47XG4gIG5vbU51ZXZhQ2FycGV0YTogc3RyaW5nO1xuICBpc1Zpc3VhbGl6YXJDcmVhckNhcGVydGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYXJjaGl2b1NlbGVjY2lvbmFkb0FuZXhvOiBGaWxlO1xuICBhcmNoaXZvU2VsZWNjaW9uYWRvOiBUcmVlTm9kZTtcbiAgaXNNb3N0cmFyUG9wdXBDb252ZXJ0aXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcnV0YVByaW5jaXBhbDogc3RyaW5nO1xuICBmaWx0ZXJlZEZpbGVzOiBUcmVlTm9kZVtdID0gW107XG4gIGZpbHRlclZhbHVlOiBzdHJpbmcgPSAnJztcblxuICBGT1JNQVRTX1ZBTElET1M6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICAgJy5kb2MnLFxuICAgICcuaHRtbCcsXG4gICAgJy5qYXNwZXInLFxuICAgICcueGxzJyxcbiAgICAnLmpyeG1sJyxcbiAgICAnLm9kdCcsXG4gICAgJy54bHNtJyxcbiAgICAnLnhsc3gnLFxuICAgICcucGdwJyxcbiAgICAnLmFzYycsXG4gICAgJy5jZXInLFxuICAgICcucDEyJyxcbiAgICAnLmRvY3gnLFxuICAgICcucHJvcGVydGllcydcbiAgXSk7XG4gIGZpbHRyb0NvbnZlcnRpcjogc3RyaW5nO1xuICBodG1sOiBib29sZWFuO1xuICBtb3N0cmFyRWRpdG9yOiBib29sZWFuO1xuICBtb2RpZmljYXJIVE1MOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwbGFudGlsbGFzU2VydmljZTogUGxhbnRpbGxhc1NlcnZpY2UsIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwdWJsaWMgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwdWJsaWMgY29udHJvbEZ1bmNpb25TZXJ2aWNlOiBDYXJnYXJDb250cm9sRnVuY2lvbmFsaWRhZFNlcnZpY2UsIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLCBwcml2YXRlIGNhcmdhckFyY2hpdm9TZXJ2aWNlczogQ2FyZ2FyQXJjaGl2b3NTZXJ2aWNlLCBwcml2YXRlIGVuY3JpcHRhZG9CYXNpY286IEVuY3JpcHRhZG9CYXNpY29TZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2VuZXJhbFBpcGU6IEdlbmVyYWxQaXBlLCBwdWJsaWMgdXRpbHNTZXJ2aWNlOiBVdGlsc1NlcnZpY2VcbiAgKSB7IH1cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIHRoaXMubW9zdHJhckVkaXRvciA9IGZhbHNlO1xuICAgIGxldCBjb25zdWx0YXJSdXRhUHJpbmNpcGFsID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5jYXJnYXJBcmNoaXZvU2VydmljZXMuZ2V0UHJvcGllZGFkKHsgcHJvcGllZGFkOiBcInJ1dGFfcGxhbnRpbGxhc1wiLCBhcGxpY2FjaW9uOiAxIH0pKTtcbiAgICBsZXQgY29udmVydGlyID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5jYXJnYXJBcmNoaXZvU2VydmljZXMuZ2V0UHJvcGllZGFkKHsgcHJvcGllZGFkOiBcInNlcnZpZG9yX29wZW5PZmZpY2VcIiwgYXBsaWNhY2lvbjogMCB9KSk7XG4gICAgdGhpcy52ZXJDb252ZXJ0aXIgPSAhY29udmVydGlyLnZhbG9yLnZhbG9yID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMucnV0YVByaW5jaXBhbCA9IGNvbnN1bHRhclJ1dGFQcmluY2lwYWwudmFsb3IudmFsb3I7XG4gICAgdGhpcy5pc1Zpc3VhbGl6YXJDcmVhckNhcGVydGEgPSBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLm9wZW5EYXRhVGFibGUoKTtcblxuICAgIGNvbnN0IHNsZWVwID0gKG0pID0+IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG0pKTtcbiAgICBhd2FpdCBzbGVlcCgxMDApO1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyVmFsdWUpIHtcbiAgICAgIGF3YWl0IHRoaXMuYXBsaWNhckZpbHRybygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW5EYXRhVGFibGUoKSB7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICAgIGlmICghdGhpcy5wcm9waWVkYWQpIHtcbiAgICAgICAgdGhpcy5wcm9waWVkYWQgPSAncnV0YV9wbGFudGlsbGFzJ1xuICAgICAgfVxuICAgICAgdGhpcy5wbGFudGlsbGFzU2VydmljZS5vYnRlbmVyQXJjaGl2b3MoXG4gICAgICAgIHRoaXMucHJvcGllZGFkLCB0aGlzLnByb3BpZWRhZERlU2lzdGVtYSA/ICcwJyA6IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VG9rZW5LZXkoJ2FwbGljYWNpb24nKSwgJ2RvYztodG1sO2phc3Blcjt4bHM7anJ4bWw7b2R0O3hsc207eGxzeDtwZ3A7YXNjO2NlcjtwMTI7ZG9jeDtwcm9wZXJ0aWVzJywgdGhpcy5hbmV4b1Byb3BpZWRhZCwgdHJ1ZSkuc3Vic2NyaWJlXG4gICAgICAgIChydGEgPT4ge1xuICAgICAgICAgIHRoaXMuZmlsZXMgPSBydGE7XG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEZpbGVzID0gcnRhXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgaWYgKCF0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8pIHtcbiAgICAgICAgICAgIHRoaXMuYXJjaGl2b1NlbGVjY2lvbmFkbyA9IHRoaXMuZmlsZXNbMF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIGFzeW5jIGFwbGljYXJGaWx0cm8oKSB7XG4gICAgdGhpcy5maWx0cm9Db252ZXJ0aXIgPSB0aGlzLmZpbHRlclZhbHVlO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZpbHRlcmVkRmlsZXMgPSB0aGlzLm9idGVuZXJGaWx0cm9zTm9kb3ModGhpcy5maWxlcywgdGhpcy5maWx0ZXJWYWx1ZSk7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIG9idGVuZXJGaWx0cm9zTm9kb3Mobm9kZXM6IFRyZWVOb2RlW10sIGZpbHRlclZhbHVlOiBzdHJpbmcpOiBUcmVlTm9kZVtdIHtcblxuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmZpbHRyb0F2YW56YWRvKGZpbHRlclZhbHVlKTtcblxuICAgIGNvbnN0IGZpbHRlcmVkTm9kZXM6IFRyZWVOb2RlW10gPSBbXTtcblxuICAgIG5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG5cbiAgICAgIC8vIFZlcmlmaWNhIHNpIGVsIG5vZG8gYWN0dWFsIG8gYWxndW5vIGRlIHN1cyBoaWpvcyBjdW1wbGUgY29uIGVsIGZpbHRyb1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuID8gdGhpcy5vYnRlbmVyRmlsdHJvc05vZG9zKG5vZGUuY2hpbGRyZW4sIGZpbHRlclZhbHVlKSA6IFtdO1xuXG4gICAgICBjb25zdCBub2RlTWF0Y2hlcyA9IGZpbHRlcnMuc29tZShmaWx0ZXIgPT4gbm9kZS5sYWJlbC5pbmNsdWRlcyhmaWx0ZXIpKTtcblxuICAgICAgaWYgKG5vZGVNYXRjaGVzIHx8IGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmlsdGVyZWROb2Rlcy5wdXNoKHsgLi4ubm9kZSwgY2hpbGRyZW4gfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsdGVyZWROb2RlcztcbiAgfVxuXG4gIGZpbHRyb0F2YW56YWRvKHNlYXJjaDogc3RyaW5nKTogc3RyaW5nW10ge1xuXG4gICAgaWYgKHNlYXJjaC5pbmNsdWRlcygnKycpKSB7XG4gICAgICBsZXQgYXV4ID0gc2VhcmNoO1xuXG4gICAgICBpZiAoYXV4LnN0YXJ0c1dpdGgoJysnKSkge1xuICAgICAgICBhdXggPSBhdXguc3Vic3RyaW5nKDEpO1xuICAgICAgfVxuXG4gICAgICBhdXggPSBhdXgucmVwbGFjZSgvXFwrL2csICc6Jyk7XG4gICAgICBjb25zdCBpdGVtcyA9IGF1eC50cmltKCkuc3BsaXQoJzonKTtcbiAgICAgIHJldHVybiBpdGVtcztcblxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW3NlYXJjaF07XG4gICAgfVxuICB9XG5cbiAgZmlsdHJhckVudGVyKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgdGhpcy5hcGxpY2FyRmlsdHJvKCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWNjaW9uYXJBcmNoaXZvKGV2ZW50KSB7XG4gICAgdGhpcy5hcmNoaXZvU2VsZWNjaW9uYWRvID0gZXZlbnQubm9kZTtcbiAgICB0aGlzLm1vc3RyYXJFZGl0b3IgPSBmYWxzZTtcbiAgfVxuXG4gIGRlc2VsZWNjaW9uYXJBcmNoaXZvKCRldmVudCkge1xuICAgIHRoaXMuZGF0YVNlbGVjdGVkID0gbnVsbDtcbiAgfVxuXG5cbiAgYXN5bmMgY2FyZ2FyTnVldm8oZXZlbnQsIGZ1YmF1dG8pIHtcblxuICAgIHRoaXMuaXNWaXN1YWxpemFyQ3JlYXJDYXBlcnRhID0gZmFsc2U7XG4gICAgdGhpcy5hcmNoaXZvU2VsZWNjaW9uYWRvQW5leG8gPSBldmVudC5maWxlc1swXTtcblxuICAgIGlmICghdGhpcy5pc0Zvcm1hdG9WYWxpZG8odGhpcy5hcmNoaXZvU2VsZWNjaW9uYWRvQW5leG8ubmFtZSkpIHtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dXYXJuaW5nKFwiU2UgZGViZSBhZ3JlZ2FyIHVuIGFyY2hpdm8gXCIgKyBBcnJheS5mcm9tKHRoaXMuRk9STUFUU19WQUxJRE9TKS5qb2luKCcsICcpKVxuICAgICAgZnViYXV0by5jbGVhcigpO1xuICAgICAgLy90aGlzLnRvYXN0U2VydmljZS5zaG93V2FybmluZyhcIlNlIGRlYmUgYWdyZWdhciB1biBhcmNoaXZvIC5kb2MsIC5kb2N4LCAueGxzLCAueGxzeCAsIC54bHNtLCAuanJ4bWwsIC5vZHQsIC5qYXNwZXIsIC5wZ3AsIC5hc2MsIC5jZXIsIC5wcm9wZXJ0aWVzIG8gLmh0bWxcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9DYXJnYXIgQXJjaGl2byBUZW1wb3JhbFxuICAgIGxldCByZXN1bHRhZG8gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnBsYW50aWxsYXNTZXJ2aWNlLmNhcmdhckRvY3VtZW50b1RlbXBvcmFsKHRoaXMuYXJjaGl2b1NlbGVjY2lvbmFkb0FuZXhvKSk7XG5cbiAgICBmdWJhdXRvLmNsZWFyKCk7XG5cbiAgICBpZiAocmVzdWx0YWRvPy52YWxpZGFjaW9uKSB7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93U3VjY2VzcyhyZXN1bHRhZG8/LnZhbGlkYWNpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpbmZvcm1hY2lvbkFyY2hpdm8gPSByZXN1bHRhZG8/LmluZm9ybWFjaW9uQXJjaGl2byA/IHJlc3VsdGFkbz8uaW5mb3JtYWNpb25BcmNoaXZvIDogbnVsbDtcblxuICAgIC8vT2J0ZW5lciBSdXRhc1xuICAgIGxldCBydXRhQ29tcGxlbWVudG8gPSB0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8uZGF0YTtcblxuICAgIC8vbGV0IG9iamV0byA9IChhd2FpdCB0aGlzLmNhcmdhckFyY2hpdm9TZXJ2aWNlcy5nZXRQcm9waWVkYWQoeyBwcm9waWVkYWQ6IFwicnV0YV9wbGFudGlsbGFzXCIsIGFwbGljYWNpb246IDEgfSkudG9Qcm9taXNlKCkpO1xuXG4gICAgaWYgKCF0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8/LnBhcmVudCkge1xuICAgICAgcnV0YUNvbXBsZW1lbnRvID0gJyc7XG4gICAgfVxuXG4gICAgLy9WZXJpZmljYSBzaSBlbCBkb2N1bWVudG8geWEgZXhpc3RlIFxuICAgIGxldCBkYXRhID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5wbGFudGlsbGFzU2VydmljZS5leGlzdGVEb2N1bWVudG8odGhpcy5ydXRhUHJpbmNpcGFsLCBydXRhQ29tcGxlbWVudG8sIGluZm9ybWFjaW9uQXJjaGl2bykpO1xuXG4gICAgaWYgKGRhdGE/LnZhbGlkYWNpb25Eb2N1bWVudG8pIHtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dXYXJuaW5nKGRhdGE/LnZhbGlkYWNpb25Eb2N1bWVudG8pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vR3VhcmRhIGVsIGRvY3VtZW50b1xuICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMucGxhbnRpbGxhc1NlcnZpY2UuY2FyZ2FyRG9jdW1lbnRvKHRoaXMucnV0YVByaW5jaXBhbCwgcnV0YUNvbXBsZW1lbnRvLCBpbmZvcm1hY2lvbkFyY2hpdm8pKTtcblxuICAgIHRoaXMubmdPbkluaXQoKTtcblxuICB9XG5cbiAgYXN5bmMgZGVzY2FyZ2FyQW5leG8oKSB7XG5cbiAgICAvL1J1dGEgYXJjaGl2byAgXG4gICAgbGV0IHJ1dGFDb21wbGVtZW50byA9IHRoaXMuYXJjaGl2b1NlbGVjY2lvbmFkby5kYXRhO1xuXG4gICAgaWYgKCF0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8/LnBhcmVudCkge1xuICAgICAgcnV0YUNvbXBsZW1lbnRvID0gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5jYXJnYXJBcmNoaXZvU2VydmljZXMuZGVzY2FyZ2FyQXJjaGl2byh0aGlzLmVuY3JpcHRhZG9CYXNpY28uZW5jcmlwdGFyKHRoaXMucnV0YVByaW5jaXBhbCArIHJ1dGFDb21wbGVtZW50byksIHVuZGVmaW5lZCwgdW5kZWZpbmVkKS5zdWJzY3JpYmUoYmxvYiA9PiB7XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgY29uc3Qgb2JqZWN0VXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgIGEuaHJlZiA9IG9iamVjdFVybDtcbiAgICAgIGEuZG93bmxvYWQgPSB0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8/LmxhYmVsO1xuICAgICAgYS5jbGljaygpO1xuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChvYmplY3RVcmwpO1xuICAgIH0pO1xuXG4gIH1cblxuICBlbGltaW5hckFyY2hpdm8oKSB7XG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXQsXG4gICAgICBrZXk6ICdlbGltaW5hckFyY2hpdm8nLFxuICAgICAgbWVzc2FnZTogJ8K/RGVzZWEgZWxpbWluYXIgZWwgcmVnaXN0cm8/JyxcbiAgICAgIGFjY2VwdExhYmVsOiAnU2knLFxuICAgICAgaWNvbjogJ2NvbmZpcm1hcicsXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRFbGltaW5hckFyY2hpdm8oKTtcbiAgICAgIH0sXG4gICAgICByZWplY3Q6ICgpID0+IHsgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNldEVsaW1pbmFyQXJjaGl2bygpIHtcblxuICAgIC8vUnV0YSBhcmNoaXZvICBcbiAgICBsZXQgcnV0YUNvbXBsZW1lbnRvID0gdGhpcy5hcmNoaXZvU2VsZWNjaW9uYWRvLmRhdGE7XG5cbiAgICBpZiAoIXRoaXMuYXJjaGl2b1NlbGVjY2lvbmFkbz8ucGFyZW50KSB7XG4gICAgICBydXRhQ29tcGxlbWVudG8gPSAnJztcbiAgICB9XG5cbiAgICBsZXQgcHJvcGllZGFkID0gJ3J1dGFfcGxhbnRpbGxhcydcbiAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmNhcmdhckFyY2hpdm9TZXJ2aWNlcy5lbGltaW5hckFyY2hpdm8odGhpcy5lbmNyaXB0YWRvQmFzaWNvLmVuY3JpcHRhcihydXRhQ29tcGxlbWVudG8pLCBwcm9waWVkYWQsICcxJykpO1xuICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dTdWNjZXNzKHRoaXMuZ2VuZXJhbFBpcGUuTUVOU0FKRV9FTElNSU5BUik7XG4gICAgdGhpcy5hcmNoaXZvU2VsZWNjaW9uYWRvID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlclZhbHVlID0gbnVsbDtcbiAgICB0aGlzLm5nT25Jbml0KCk7XG4gIH1cblxuICBpc0Zvcm1hdG9WYWxpZG8obm9tYnJlQXJjaGl2bzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gVmVyaWZpY2Egc2kgZWwgYXJjaGl2byB0ZXJtaW5hIGNvbiBhbGd1bmEgZGUgbGFzIGV4dGVuc2lvbmVzIHbDoWxpZGFzXG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5GT1JNQVRTX1ZBTElET1MpLnNvbWUoZXh0ID0+IG5vbWJyZUFyY2hpdm8uZW5kc1dpdGgoZXh0KSk7XG4gIH1cblxuICBjcmVhckNhcnBldGEoKSB7XG4gICAgdGhpcy5pc1Zpc3VhbGl6YXJDcmVhckNhcGVydGEgPSB0cnVlO1xuICAgIHRoaXMubm9tTnVldmFDYXJwZXRhID0gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGd1YXJkYXJDYXJwZXRhKCkge1xuXG4gICAgaWYgKHRoaXMubWlGb3JtdWxhcmlvLnZhbGlkKSB7XG5cbiAgICAgIGxldCBydXRhQ29tcGxlbWVudG8gPSB0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8uZGF0YTtcblxuICAgICAgaWYgKCF0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8/LnBhcmVudCkge1xuICAgICAgICBydXRhQ29tcGxlbWVudG8gPSAnJztcbiAgICAgIH1cblxuICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5wbGFudGlsbGFzU2VydmljZS5jcmVhckNhcnBldGEodGhpcy5ydXRhUHJpbmNpcGFsLCBydXRhQ29tcGxlbWVudG8sIHRoaXMubm9tTnVldmFDYXJwZXRhKSk7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93U3VjY2VzcygnTGEgY2FycGV0YSBzZSBoYSBjcmVhZG8gY29ycmVjdGFtZW50ZScpO1xuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xuXG4gICAgfSBlbHNlIHtcblxuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvd0Vycm9yKCdGYWx0YW4gY2FtcG9zIG9ibGlnYXRvcmlvcycpO1xuICAgICAgT2JqZWN0LmtleXModGhpcy5taUZvcm11bGFyaW8uY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5taUZvcm11bGFyaW8uY29udHJvbHNba2V5XS5pbnZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5taUZvcm11bGFyaW8uY29udHJvbHNba2V5XS5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIGVsaW1pbmFyQ2FycGV0YSgpIHtcblxuICAgIHRoaXMuaXNWaXN1YWxpemFyQ3JlYXJDYXBlcnRhID0gZmFsc2U7XG5cbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICB0YXJnZXQ6IGV2ZW50LnRhcmdldCxcbiAgICAgIGtleTogJ2VsaW1pbmFyQ2FycGV0YScsXG4gICAgICBtZXNzYWdlOiAnwr9EZXNlYSBlbGltaW5hciBlbCByZWdpc3Rybz8nLFxuICAgICAgYWNjZXB0TGFiZWw6ICdTaScsXG4gICAgICBpY29uOiAnY29uZmlybWFyJyxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICB0aGlzLnNldEVsaW1pbmFyQ2FycGV0YSgpO1xuICAgICAgfSxcbiAgICAgIHJlamVjdDogKCkgPT4geyB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2V0RWxpbWluYXJDYXJwZXRhKCkge1xuXG4gICAgbGV0IHJ1dGFDb21wbGVtZW50byA9IHRoaXMuYXJjaGl2b1NlbGVjY2lvbmFkby5kYXRhO1xuXG4gICAgaWYgKCF0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8/LnBhcmVudCkge1xuICAgICAgcnV0YUNvbXBsZW1lbnRvID0gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5wbGFudGlsbGFzU2VydmljZS5lbGltaW5hckNhcnBldGEodGhpcy5ydXRhUHJpbmNpcGFsLCBydXRhQ29tcGxlbWVudG8pLnN1YnNjcmliZShydGEgPT4ge1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ0xhIGNhcnBldGEgaGEgc2lkbyBlbGltaW5hZGEgY29ycmVjdGFtZW50ZScpO1xuICAgICAgdGhpcy5hcmNoaXZvU2VsZWNjaW9uYWRvID0gbnVsbDtcbiAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSBudWxsO1xuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xuICAgIH0pXG5cbiAgfVxuXG4gIGFzeW5jIGNvbnZlcnRpckFyY2hpdm9zKCkge1xuXG4gICAgdGhpcy5pc1Zpc3VhbGl6YXJDcmVhckNhcGVydGEgPSBmYWxzZTtcbiAgICB0aGlzLmlzTW9zdHJhclBvcHVwQ29udmVydGlyID0gdHJ1ZTtcbiAgICAvL2NvbnN0IGZpbHRlcmVkTm9kZXMgPSB0aGlzLmdldEZpbHRlcmVkTm9kZXMoKTtcbiAgICBjb25zdCB2YWxvckZpbHRybyA9IHRoaXMuZmlsdGVyVmFsdWU7XG5cbiAgICBjb25zdCBzbGVlcCA9IChtKSA9PiBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtKSk7XG4gICAgYXdhaXQgc2xlZXAoNTApO1xuXG4gICAgdGhpcy5wb3B1cENvbnZlcnRpclBsYW50aWxsYXNDb21wb25lbnQuYnVzY2FyKHRoaXMucnV0YVByaW5jaXBhbCwgdmFsb3JGaWx0cm8pO1xuXG4gIH1cblxuICByZWdyZXNhclBvcHVwQ29udmVydGlyKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5pc01vc3RyYXJQb3B1cENvbnZlcnRpciA9IGZhbHNlO1xuICAgIHRoaXMubmdPbkluaXQoKTtcbiAgfVxuXG4gIGlzSHRtbCgpIHtcbiAgICB0aGlzLmh0bWwgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8gIT0gbnVsbCAmJiB0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8ubGFiZWwgIT0gbnVsbCAmJiB0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8ubGFiZWwuaW5jbHVkZXMoJy5odG1sJykpXG4gICAgICB0aGlzLmh0bWwgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMuaHRtbDtcbiAgfVxuXG4gIGFzeW5jIGVkaXRhckFjdGlvbigpIHtcblxuICAgIGxldCBkYXRhID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5wbGFudGlsbGFzU2VydmljZS5jb25zdWx0YXJBcmNoaXZvSHRtbCh0aGlzLnJ1dGFQcmluY2lwYWwsIHRoaXMuYXJjaGl2b1NlbGVjY2lvbmFkby5kYXRhKSk7XG5cbiAgICB0aGlzLm1vZGlmaWNhckhUTUwgPSBkYXRhO1xuXG4gICAgdGhpcy5tb3N0cmFyRWRpdG9yID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGd1YXJkYXJIdG1sKCkge1xuXG4gICAgY29uc29sZS5sb2coJ3RoaXMubW9kaWZpY2FySFRNTCcsIHRoaXMubW9kaWZpY2FySFRNTCk7XG5cbiAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnBsYW50aWxsYXNTZXJ2aWNlLmd1YXJkYXJBcmNoaXZvSHRtbCh0aGlzLnJ1dGFQcmluY2lwYWwsIHRoaXMuYXJjaGl2b1NlbGVjY2lvbmFkby5kYXRhLCB0aGlzLm1vZGlmaWNhckhUTUwpKTtcblxuICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dTdWNjZXNzKCdFbCBhcmNoaXZvIGhhIHNpZG8gbW9kaWZpY2FkbyBjb3JyZWN0YW1lbnRlJyk7XG5cbiAgICB0aGlzLm5nT25Jbml0KCk7XG5cbiAgfVxuXG4gIHJlZ3Jlc2FyUHJpbmNpcGFsKCkge1xuICAgIHRoaXMubW9zdHJhckVkaXRvciA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHZlcmlmaWNhckNvbnRyb2woY29udHJvbCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xGdW5jaW9uU2VydmljZS5nZXRDb250cm9sRnVuY2lvbmFsaWRhZChjb250cm9sKTtcbiAgfVxuXG59XG4iLCI8cC1jb25maXJtUG9wdXAga2V5PVwiZWxpbWluYXJDYXJwZXRhXCI+PC9wLWNvbmZpcm1Qb3B1cD5cbjxwLWNvbmZpcm1Qb3B1cCBrZXk9XCJlbGltaW5hckFyY2hpdm9cIj48L3AtY29uZmlybVBvcHVwPlxuXG48aDEgY2xhc3M9XCJtYi00XCI+e3snY2FyZ3VlJyB8IHRyYW5zbGF0ZX19IHt7J3BsYW50aWxsYXMnIHwgdHJhbnNsYXRlfX08L2gxPlxuXG48ZGl2IGNsYXNzPVwicC1mbHVpZCBwLWZvcm1ncmlkIGdyaWRcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTYgbGc6Y29sLTVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJmaWx0ZXJWYWx1ZVwiIHBsYWNlaG9sZGVyPVwie3snZmlsdHJvJyB8IHRyYW5zbGF0ZX19XCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJmaWx0cmFyRW50ZXIoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIHBSaXBwbGUgaWNvbj1cInBpIHBpLXNlYXJjaCB0ZXh0LXhsXCIgKGNsaWNrKT1cImFwbGljYXJGaWx0cm8oKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwLWVsZW1lbnQgcC1yaXBwbGUgcC1idXR0b24tcm91bmRlZCAgcC1idXR0b24tc2Vjb25kYXJ5IHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLWljb24tb25seVwiXG4gICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCIgcFRvb2x0aXA9XCJFZGl0YXIgSFRNTFwiPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8cC10cmVlICN0cmVlIHNjcm9sbEhlaWdodD1cIjY3MHB4XCIgW3ZhbHVlXT1cImZpbHRlcmVkRmlsZXNcIiBzZWxlY3Rpb25Nb2RlPVwic2luZ2xlXCIgWyhzZWxlY3Rpb24pXT1cImRhdGFTZWxlY3RlZFwiXG4gICAgICAgICAgICBbZmlsdGVyXT1cImZhbHNlXCIgW2ZpbHRlclBsYWNlaG9sZGVyXT1cIidmaWx0cm8nIHwgdHJhbnNsYXRlXCIgZmlsdGVyTW9kZT1cInN0cmljdFwiXG4gICAgICAgICAgICAob25Ob2RlU2VsZWN0KT1cInNlbGVjY2lvbmFyQXJjaGl2bygkZXZlbnQpXCIgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgICAgICAgICAob25Ob2RlVW5zZWxlY3QpPVwiZGVzZWxlY2Npb25hckFyY2hpdm8oJGV2ZW50KVwiPjwvcC10cmVlPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBPUENJTkVTIERJUkVDVE9SSU9TIC0gQVJDSElWT1MgLS0+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkIGNvbC0xMiBtZDpjb2wtNiBsZzpjb2wtN1wiPlxuXG4gICAgICAgIEBpZighdGhpcy5sb2FkaW5nKXtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cblxuICAgICAgICAgICAgPCEtLSBDQVJQRVRBIC0tPlxuICAgICAgICAgICAgQGlmKGFyY2hpdm9TZWxlY2Npb25hZG8uZXhwYW5kZWQpe1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwidGV4dC14bCBtdC0yIG1iLTQgbXItM1wiPkNhcnBldGE6IDwvaDE+XG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwidGV4dC1zbSBtdC0yIG1iLTRcIj4ge3thcmNoaXZvU2VsZWNjaW9uYWRvLmxhYmVsfX0gPC9oNT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBDb252ZXJ0aXIgLS0+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBwUmlwcGxlIChjbGljayk9XCJjb252ZXJ0aXJBcmNoaXZvcygpXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ2ZXJDb252ZXJ0aXIgJiYgY29udHJvbEZ1bmNpb25TZXJ2aWNlLmdldENvbnRyb2xGdW5jaW9uYWxpZGFkKCdzZWd1cGxhY29yOmd1YXJkYXInKVwiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiIGxhYmVsPVwie3snY29udmVydGlyJyB8IHRyYW5zbGF0ZX19XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCBib3Rvbi1hY2Npb24tcHJpbmNpcGFsIHRleHQtZ3JheS02MDAgY29sb3ItNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJDb252ZXJ0aXIgYXJjaGl2b1wiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVuZWRvci1pY29uby1hY2Npb25lcy1wcmluY2lwYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktYXJyb3ctcmlnaHQtYXJyb3ctbGVmdCBjb2xvci01MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPCEtLU51ZXZhIENhcnBldGEtLT5cbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY29udHJvbEZ1bmNpb25TZXJ2aWNlLmdldENvbnRyb2xGdW5jaW9uYWxpZGFkKCdzZWd1cGxhY29yOmd1YXJkYXInKVwiIHBCdXR0b24gcFJpcHBsZVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkICBib3Rvbi1hY2Npb24tcHJpbmNpcGFsIHRleHQtZ3JheS02MDAgY29sb3ItNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJ7eydsaW5rX251ZXZvJyB8IHRyYW5zbGF0ZX19XCIgKGNsaWNrKT1cImNyZWFyQ2FycGV0YSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW5lZG9yLWljb25vLWFjY2lvbmVzLXByaW5jaXBhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJnbHlwaGljb25zIGdseXBoaWNvbnMtZmxvcHB5LXNhdmUgY29sb3ItNTAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDwhLS1FbGltaW5hci0tPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjb250cm9sRnVuY2lvblNlcnZpY2UuZ2V0Q29udHJvbEZ1bmNpb25hbGlkYWQoJ3NlZ3VwbGFjb3I6Z3VhcmRhcicpXCIgcEJ1dHRvbiBwUmlwcGxlXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tb3V0bGluZWQgIGJvdG9uLWFjY2lvbi1wcmluY2lwYWwgdGV4dC1ncmF5LTYwMCBjb2xvci01MDBcIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cInt7J2xpbmtfZWxpbWluYXInIHwgdHJhbnNsYXRlfX1cIiAoY2xpY2spPVwiZWxpbWluYXJDYXJwZXRhKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbmVkb3ItaWNvbm8tYWNjaW9uZXMtcHJpbmNpcGFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1iaW4gY29sb3ItNTAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDwhLS0gQ2FyZ2FyIEFyY2hpdm8gLS0+XG4gICAgICAgICAgICAgICAgPHAtZmlsZVVwbG9hZCAjZnViYXV0byBtb2RlPVwiYmFzaWNcIiBbYXV0b109XCJ0cnVlXCIgW2N1c3RvbVVwbG9hZF09XCJ0cnVlXCIgY2hvb3NlSWNvbj1cInBpIHBpLXBhcGVyY2xpcFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbEZ1bmNpb25TZXJ2aWNlLmdldENvbnRyb2xGdW5jaW9uYWxpZGFkKCdzZWd1cGxhY29yOmd1YXJkYXInKVwiXG4gICAgICAgICAgICAgICAgICAgIGNob29zZUxhYmVsPVwie3snbGlua19zdWJpcmFyY2hpdm9zJyB8IHRyYW5zbGF0ZX19XCIgKG9uU2VsZWN0KT1cImNhcmdhck51ZXZvKCRldmVudCwgZnViYXV0bylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbmVkb3ItaWNvbm8tYWNjaW9uZXMtcHJpbmNpcGFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXRyYXNoXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3AtZmlsZVVwbG9hZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tIEFSQ0hJVk8tLT5cbiAgICAgICAgICAgIEBpZighYXJjaGl2b1NlbGVjY2lvbmFkby5leHBhbmRlZCl7XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cInRleHQteGwgbXQtMiBtYi00IG1yLTNcIj5BcmNoaXZvOiA8L2gxPlxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInRleHQtc20gbXQtMiBtYi00XCI+IHt7YXJjaGl2b1NlbGVjY2lvbmFkby5sYWJlbH19IDwvaDU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgICAgICAgICAgIEBpZihhcmNoaXZvU2VsZWNjaW9uYWRvLmxhYmVsLmluY2x1ZGVzKCcuaHRtbCcpKXtcblxuICAgICAgICAgICAgICAgIDwhLS1FRElUQVIgSFRNTC0tPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gcFJpcHBsZSBpY29uPVwicGkgcGktY29kZSB0ZXh0LXhsXCIgKGNsaWNrKT1cImVkaXRhckFjdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCAgYm90b24tYWNjaW9uLXByaW5jaXBhbCB0ZXh0LWdyYXktNjAwIGNvbG9yLTUwMFwiIGxhYmVsPVwiRWRpdGFyIEhUTUxcIj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tIERFU0NBUkdBUi0tPlxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwicC1idXR0b24tb3V0bGluZWQgIGJvdG9uLWFjY2lvbi1wcmluY2lwYWwgdGV4dC1ncmF5LTYwMCBjb2xvci01MDBcIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cInt7J2xpbmtfZGVzY2FyZ2FyJyB8IHRyYW5zbGF0ZX19XCIgKGNsaWNrKT1cImRlc2NhcmdhckFuZXhvKClcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2xGdW5jaW9uU2VydmljZS5nZXRDb250cm9sRnVuY2lvbmFsaWRhZCgnc2VndXBsYWNvcjpkZXNjYXJnYXInKVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVuZWRvci1pY29uby1hY2Npb25lcy1wcmluY2lwYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLWRvd25sb2FkXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDwhLS1FTElNSU5BUi0tPlxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwicC1idXR0b24tb3V0bGluZWQgIGJvdG9uLWFjY2lvbi1wcmluY2lwYWwgdGV4dC1ncmF5LTYwMCBjb2xvci01MDBcIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cInt7J2xpbmtfZWxpbWluYXInIHwgdHJhbnNsYXRlfX1cIiAoY2xpY2spPVwiZWxpbWluYXJBcmNoaXZvKClcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2xGdW5jaW9uU2VydmljZS5nZXRDb250cm9sRnVuY2lvbmFsaWRhZCgnc2VndXBsYWNvcjpndWFyZGFyJylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbmVkb3ItaWNvbm8tYWNjaW9uZXMtcHJpbmNpcGFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1iaW5cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmKGFyY2hpdm9TZWxlY2Npb25hZG8uZXhwYW5kZWQgJiYgaXNWaXN1YWxpemFyQ3JlYXJDYXBlcnRhKXtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cblxuICAgICAgICAgICAgPGg1IGNsYXNzPVwibXQtMlwiPjxpIGNsYXNzPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLW5vdGVcIj48L2k+IE51ZXZhIGNhcnBldGE8L2g1PlxuXG4gICAgICAgICAgICA8Zm9ybSAjbWlGb3JtdWxhcmlvPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBjYW1wb3MgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIE5vbWJyZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBwLTAgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWZsb2F0LWxhYmVsIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCBpZD1cImlkX251bWVyb19kZV9ldmVudG9cIiBbKG5nTW9kZWwpXT1cIm5vbU51ZXZhQ2FycGV0YVwiIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJub21icmVDYXJwZXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlkX251bWVyb19kZV9ldmVudG9cIj57eydub21icmUnIHwgdHJhbnNsYXRlfX0gKjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1HdWFyZGFyIENhcnBldGEtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwibXItMiBwLWJ1dHRvbiBiYWNrZ3JvdW5kLTEwMCBjb2xvci01MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJnbHlwaGljb25zIGdseXBoaWNvbnMtZmxvcHB5LXNhdmVcIiBbbGFiZWxdPVwiKCdsaW5rX2d1YXJkYXInIHwgdHJhbnNsYXRlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImd1YXJkYXJDYXJwZXRhKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZm9ybT5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8IS0tIEVESVRPUiBERSBIVE1MIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNIdG1sKCkgJiYgbW9zdHJhckVkaXRvclwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBCb3TDs24gZ3VhcmRhciBIVE1MIC0tPlxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGxhYmVsPVwie3snbGlua19ndWFyZGFyJyB8IHRyYW5zbGF0ZSB9fVwiIChjbGljayk9XCJndWFyZGFySHRtbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1mbG9wcHktc2F2ZVwiIGNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sRnVuY2lvblNlcnZpY2UuZ2V0Q29udHJvbEZ1bmNpb25hbGlkYWQoJ3NlZ3VwbGFjb3I6Z3VhcmRhcicpXCI+PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHAtZWRpdG9yIGlkPVwiZWRpdG9yXCIgW3N0eWxlXT1cInsgaGVpZ2h0OiAnNTAwcHgnIH1cIiByZXF1aXJlZCBbKG5nTW9kZWwpXT1cIm1vZGlmaWNhckhUTUxcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJodG1sUHVibGljYWNpb25cIj48L3AtZWRpdG9yPlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbkBpZihpc01vc3RyYXJQb3B1cENvbnZlcnRpcil7XG48YXBwLXBvcHVwLWNvbnZlcnRpci1wbGFudGlsbGFzIChyZWdyZXNhcik9XCJyZWdyZXNhclBvcHVwQ29udmVydGlyKCRldmVudClcIj48L2FwcC1wb3B1cC1jb252ZXJ0aXItcGxhbnRpbGxhcz5cbn0iXX0=
|
|
371
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZ3VlLXBsYW50aWxsYS1nZW5lcmFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvd2ViY29tbW9uL3BhZ2VzL2Nhcmd1ZS1wbGFudGlsbGEvY2FyZ3VlLXBsYW50aWxsYS1nZW5lcmFsL2Nhcmd1ZS1wbGFudGlsbGEtZ2VuZXJhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3dlYmNvbW1vbi9wYWdlcy9jYXJndWUtcGxhbnRpbGxhL2Nhcmd1ZS1wbGFudGlsbGEtZ2VuZXJhbC9jYXJndWUtcGxhbnRpbGxhLWdlbmVyYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQW9CLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFzQixNQUFNLGFBQWEsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBUSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBVSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FB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Y0FDNUIsSUFBSSxXQUNQLENBQUMsZUFBZTt3QkFDdkIsWUFBWTt3QkFDWixVQUFVO3dCQUNWLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsV0FBVzt3QkFDWCxjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsaUNBQWlDO3dCQUNqQyxZQUFZO3FCQUNiLGFBR1U7d0JBQ1QsbUJBQW1CO3FCQUNwQjs0WEFJNkMsaUNBQWlDO3NCQUE5RSxTQUFTO3VCQUFDLGlDQUFpQztnQkFDRSxZQUFZO3NCQUF6RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ3pCLGFBQWE7c0JBQS9CLFNBQVM7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBNZW51SXRlbSwgVHJlZU5vZGUgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBJbnB1dFRleHRNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0dGV4dCc7XG5pbXBvcnQgeyBTcGxpdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvc3BsaXRidXR0b24nO1xuaW1wb3J0IHsgVHJlZSwgVHJlZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdHJlZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBQbGFudGlsbGFzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3dlYmNvbW1vbi9zZXJ2aWNlcy9wbGFudGlsbGFzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FyZ2FyQ29udHJvbEZ1bmNpb25hbGlkYWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNpb3MvY2FyZ2FyLWNvbnRyb2wtZnVuY2lvbmFsaWRhZC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpcm1Qb3B1cE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY29uZmlybXBvcHVwJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGaWVsZHNldE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZmllbGRzZXQnO1xuaW1wb3J0IHsgRmlsZVVwbG9hZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZmlsZXVwbG9hZCc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2lvcy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENhcmdhckFyY2hpdm9zU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNpb3MvY2FyZ2FyLWFyY2hpdm9zLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW5jcmlwdGFkb0Jhc2ljb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvc2VydmljaW9zL2VuY3JpcHRhZG8tYmFzaWNvLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2VuZXJhbFBpcGUgfSBmcm9tICcuLi8uLi8uLi8uLi93ZWJjb21tb24vcGlwZXMvZ2VuZXJhbC5waXBlJztcbmltcG9ydCB7IFBvcHVwQ29udmVydGlyUGxhbnRpbGxhc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL3dlYmNvbW1vbi9wb3B1cHMvcG9wdXAtY29udmVydGlyLXBsYW50aWxsYXMvcG9wdXAtY29udmVydGlyLXBsYW50aWxsYXMuY29tcG9uZW50JztcbmltcG9ydCB7IFV0aWxzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL3V0aWxzLnNlcnZpY2UnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVkaXRvck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZWRpdG9yJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNhcmd1ZS1wbGFudGlsbGEtZ2VuZXJhbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyZWVNb2R1bGUsXG4gICAgSW5wdXRUZXh0TW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBTcGxpdEJ1dHRvbk1vZHVsZSxcbiAgICBDb25maXJtUG9wdXBNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRmllbGRzZXRNb2R1bGUsXG4gICAgRmlsZVVwbG9hZE1vZHVsZSxcbiAgICBQb3B1cENvbnZlcnRpclBsYW50aWxsYXNDb21wb25lbnQsXG4gICAgRWRpdG9yTW9kdWxlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJndWUtcGxhbnRpbGxhLWdlbmVyYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vY2FyZ3VlLXBsYW50aWxsYS1nZW5lcmFsLmNvbXBvbmVudC5zY3NzJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgQ29uZmlybWF0aW9uU2VydmljZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENhcmd1ZVBsYW50aWxsYUdlbmVyYWxDb21wb25lbnQge1xuXG4gIEBWaWV3Q2hpbGQoUG9wdXBDb252ZXJ0aXJQbGFudGlsbGFzQ29tcG9uZW50KSBwb3B1cENvbnZlcnRpclBsYW50aWxsYXNDb21wb25lbnQ6IFBvcHVwQ29udmVydGlyUGxhbnRpbGxhc0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnbWlGb3JtdWxhcmlvJywgeyBzdGF0aWM6IGZhbHNlIH0pIG1pRm9ybXVsYXJpbyE6IE5nRm9ybTtcbiAgQFZpZXdDaGlsZCgndHJlZScpIHRyZWVDb21wb25lbnQhOiBUcmVlO1xuXG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIHByb3BpZWRhZDogc3RyaW5nO1xuICBleHRlbnNpb25lczogc3RyaW5nO1xuICBwcm9waWVkYWREZVNpc3RlbWE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYW5leG9Qcm9waWVkYWQ6IHN0cmluZyA9ICcnO1xuICBmaWxlczogVHJlZU5vZGVbXTtcbiAgZGF0YVNlbGVjdGVkOiBUcmVlTm9kZTtcbiAgaXRlbXNCb3RvbkFjY2lvbmVzOiBNZW51SXRlbVtdO1xuICB2ZXJDb252ZXJ0aXI6IGJvb2xlYW47XG4gIG5vbU51ZXZhQ2FycGV0YTogc3RyaW5nO1xuICBpc1Zpc3VhbGl6YXJDcmVhckNhcGVydGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYXJjaGl2b1NlbGVjY2lvbmFkb0FuZXhvOiBGaWxlO1xuICBhcmNoaXZvU2VsZWNjaW9uYWRvOiBUcmVlTm9kZTtcbiAgaXNNb3N0cmFyUG9wdXBDb252ZXJ0aXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcnV0YVByaW5jaXBhbDogc3RyaW5nO1xuICBmaWx0ZXJlZEZpbGVzOiBUcmVlTm9kZVtdID0gW107XG4gIGZpbHRlclZhbHVlOiBzdHJpbmcgPSAnJztcblxuICBGT1JNQVRTX1ZBTElET1M6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICAgJy5kb2MnLFxuICAgICcuaHRtbCcsXG4gICAgJy5qYXNwZXInLFxuICAgICcueGxzJyxcbiAgICAnLmpyeG1sJyxcbiAgICAnLm9kdCcsXG4gICAgJy54bHNtJyxcbiAgICAnLnhsc3gnLFxuICAgICcucGdwJyxcbiAgICAnLmFzYycsXG4gICAgJy5jZXInLFxuICAgICcucDEyJyxcbiAgICAnLmRvY3gnLFxuICAgICcucHJvcGVydGllcydcbiAgXSk7XG4gIGZpbHRyb0NvbnZlcnRpcjogc3RyaW5nO1xuICBodG1sOiBib29sZWFuO1xuICBtb3N0cmFyRWRpdG9yOiBib29sZWFuO1xuICBtb2RpZmljYXJIVE1MOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwbGFudGlsbGFzU2VydmljZTogUGxhbnRpbGxhc1NlcnZpY2UsIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwdWJsaWMgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwdWJsaWMgY29udHJvbEZ1bmNpb25TZXJ2aWNlOiBDYXJnYXJDb250cm9sRnVuY2lvbmFsaWRhZFNlcnZpY2UsIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLCBwcml2YXRlIGNhcmdhckFyY2hpdm9TZXJ2aWNlczogQ2FyZ2FyQXJjaGl2b3NTZXJ2aWNlLCBwcml2YXRlIGVuY3JpcHRhZG9CYXNpY286IEVuY3JpcHRhZG9CYXNpY29TZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2VuZXJhbFBpcGU6IEdlbmVyYWxQaXBlLCBwdWJsaWMgdXRpbHNTZXJ2aWNlOiBVdGlsc1NlcnZpY2VcbiAgKSB7IH1cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIHRoaXMubW9zdHJhckVkaXRvciA9IGZhbHNlO1xuICAgIGxldCBjb25zdWx0YXJSdXRhUHJpbmNpcGFsID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5jYXJnYXJBcmNoaXZvU2VydmljZXMuZ2V0UHJvcGllZGFkKHsgcHJvcGllZGFkOiBcInJ1dGFfcGxhbnRpbGxhc1wiLCBhcGxpY2FjaW9uOiAxIH0pKTtcbiAgICBsZXQgY29udmVydGlyID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5jYXJnYXJBcmNoaXZvU2VydmljZXMuZ2V0UHJvcGllZGFkKHsgcHJvcGllZGFkOiBcInNlcnZpZG9yX29wZW5PZmZpY2VcIiwgYXBsaWNhY2lvbjogMCB9KSk7XG4gICAgdGhpcy52ZXJDb252ZXJ0aXIgPSAhY29udmVydGlyLnZhbG9yLnZhbG9yID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMucnV0YVByaW5jaXBhbCA9IGNvbnN1bHRhclJ1dGFQcmluY2lwYWwudmFsb3IudmFsb3I7XG4gICAgdGhpcy5pc1Zpc3VhbGl6YXJDcmVhckNhcGVydGEgPSBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLm9wZW5EYXRhVGFibGUoKTtcblxuICAgIGNvbnN0IHNsZWVwID0gKG0pID0+IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG0pKTtcbiAgICBhd2FpdCBzbGVlcCgxMDApO1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyVmFsdWUpIHtcbiAgICAgIGF3YWl0IHRoaXMuYXBsaWNhckZpbHRybygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW5EYXRhVGFibGUoKSB7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICAgIGlmICghdGhpcy5wcm9waWVkYWQpIHtcbiAgICAgICAgdGhpcy5wcm9waWVkYWQgPSAncnV0YV9wbGFudGlsbGFzJ1xuICAgICAgfVxuICAgICAgdGhpcy5wbGFudGlsbGFzU2VydmljZS5vYnRlbmVyQXJjaGl2b3MoXG4gICAgICAgIHRoaXMucHJvcGllZGFkLCB0aGlzLnByb3BpZWRhZERlU2lzdGVtYSA/ICcwJyA6IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VG9rZW5LZXkoJ2FwbGljYWNpb24nKSwgJ2RvYztodG1sO2phc3Blcjt4bHM7anJ4bWw7b2R0O3hsc207eGxzeDtwZ3A7YXNjO2NlcjtwMTI7ZG9jeDtwcm9wZXJ0aWVzJywgdGhpcy5hbmV4b1Byb3BpZWRhZCwgdHJ1ZSkuc3Vic2NyaWJlXG4gICAgICAgIChydGEgPT4ge1xuICAgICAgICAgIHRoaXMuZmlsZXMgPSBydGE7XG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEZpbGVzID0gcnRhXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgaWYgKCF0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8pIHtcbiAgICAgICAgICAgIHRoaXMuYXJjaGl2b1NlbGVjY2lvbmFkbyA9IHRoaXMuZmlsZXNbMF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIGFzeW5jIGFwbGljYXJGaWx0cm8oKSB7XG4gICAgdGhpcy5maWx0cm9Db252ZXJ0aXIgPSB0aGlzLmZpbHRlclZhbHVlO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZpbHRlcmVkRmlsZXMgPSB0aGlzLm9idGVuZXJGaWx0cm9zTm9kb3ModGhpcy5maWxlcywgdGhpcy5maWx0ZXJWYWx1ZSk7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIG9idGVuZXJGaWx0cm9zTm9kb3Mobm9kZXM6IFRyZWVOb2RlW10sIGZpbHRlclZhbHVlOiBzdHJpbmcpOiBUcmVlTm9kZVtdIHtcblxuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmZpbHRyb0F2YW56YWRvKGZpbHRlclZhbHVlKTtcblxuICAgIGNvbnN0IGZpbHRlcmVkTm9kZXM6IFRyZWVOb2RlW10gPSBbXTtcblxuICAgIG5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG5cbiAgICAgIC8vIFZlcmlmaWNhIHNpIGVsIG5vZG8gYWN0dWFsIG8gYWxndW5vIGRlIHN1cyBoaWpvcyBjdW1wbGUgY29uIGVsIGZpbHRyb1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuID8gdGhpcy5vYnRlbmVyRmlsdHJvc05vZG9zKG5vZGUuY2hpbGRyZW4sIGZpbHRlclZhbHVlKSA6IFtdO1xuXG4gICAgICBjb25zdCBub2RlTWF0Y2hlcyA9IGZpbHRlcnMuc29tZShmaWx0ZXIgPT4gbm9kZS5sYWJlbC5pbmNsdWRlcyhmaWx0ZXIpKTtcblxuICAgICAgaWYgKG5vZGVNYXRjaGVzIHx8IGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmlsdGVyZWROb2Rlcy5wdXNoKHsgLi4ubm9kZSwgY2hpbGRyZW4gfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsdGVyZWROb2RlcztcbiAgfVxuXG4gIGZpbHRyb0F2YW56YWRvKHNlYXJjaDogc3RyaW5nKTogc3RyaW5nW10ge1xuXG4gICAgaWYgKHNlYXJjaC5pbmNsdWRlcygnKycpKSB7XG4gICAgICBsZXQgYXV4ID0gc2VhcmNoO1xuXG4gICAgICBpZiAoYXV4LnN0YXJ0c1dpdGgoJysnKSkge1xuICAgICAgICBhdXggPSBhdXguc3Vic3RyaW5nKDEpO1xuICAgICAgfVxuXG4gICAgICBhdXggPSBhdXgucmVwbGFjZSgvXFwrL2csICc6Jyk7XG4gICAgICBjb25zdCBpdGVtcyA9IGF1eC50cmltKCkuc3BsaXQoJzonKTtcbiAgICAgIHJldHVybiBpdGVtcztcblxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW3NlYXJjaF07XG4gICAgfVxuICB9XG5cbiAgZmlsdHJhckVudGVyKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgdGhpcy5hcGxpY2FyRmlsdHJvKCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWNjaW9uYXJBcmNoaXZvKGV2ZW50KSB7XG4gICAgdGhpcy5hcmNoaXZvU2VsZWNjaW9uYWRvID0gZXZlbnQubm9kZTtcbiAgICB0aGlzLm1vc3RyYXJFZGl0b3IgPSBmYWxzZTtcbiAgfVxuXG4gIGRlc2VsZWNjaW9uYXJBcmNoaXZvKCRldmVudCkge1xuICAgIHRoaXMuZGF0YVNlbGVjdGVkID0gbnVsbDtcbiAgfVxuXG5cbiAgYXN5bmMgY2FyZ2FyTnVldm8oZXZlbnQsIGZ1YmF1dG8pIHtcblxuICAgIHRoaXMuaXNWaXN1YWxpemFyQ3JlYXJDYXBlcnRhID0gZmFsc2U7XG4gICAgdGhpcy5hcmNoaXZvU2VsZWNjaW9uYWRvQW5leG8gPSBldmVudC5maWxlc1swXTtcblxuICAgIGlmICghdGhpcy5pc0Zvcm1hdG9WYWxpZG8odGhpcy5hcmNoaXZvU2VsZWNjaW9uYWRvQW5leG8ubmFtZSkpIHtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dXYXJuaW5nKFwiU2UgZGViZSBhZ3JlZ2FyIHVuIGFyY2hpdm8gXCIgKyBBcnJheS5mcm9tKHRoaXMuRk9STUFUU19WQUxJRE9TKS5qb2luKCcsICcpKVxuICAgICAgZnViYXV0by5jbGVhcigpO1xuICAgICAgLy90aGlzLnRvYXN0U2VydmljZS5zaG93V2FybmluZyhcIlNlIGRlYmUgYWdyZWdhciB1biBhcmNoaXZvIC5kb2MsIC5kb2N4LCAueGxzLCAueGxzeCAsIC54bHNtLCAuanJ4bWwsIC5vZHQsIC5qYXNwZXIsIC5wZ3AsIC5hc2MsIC5jZXIsIC5wcm9wZXJ0aWVzIG8gLmh0bWxcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9DYXJnYXIgQXJjaGl2byBUZW1wb3JhbFxuICAgIGxldCByZXN1bHRhZG8gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnBsYW50aWxsYXNTZXJ2aWNlLmNhcmdhckRvY3VtZW50b1RlbXBvcmFsKHRoaXMuYXJjaGl2b1NlbGVjY2lvbmFkb0FuZXhvKSk7XG5cbiAgICBmdWJhdXRvLmNsZWFyKCk7XG5cbiAgICBpZiAocmVzdWx0YWRvPy52YWxpZGFjaW9uKSB7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93U3VjY2VzcyhyZXN1bHRhZG8/LnZhbGlkYWNpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpbmZvcm1hY2lvbkFyY2hpdm8gPSByZXN1bHRhZG8/LmluZm9ybWFjaW9uQXJjaGl2byA/IHJlc3VsdGFkbz8uaW5mb3JtYWNpb25BcmNoaXZvIDogbnVsbDtcblxuICAgIC8vT2J0ZW5lciBSdXRhc1xuICAgIGxldCBydXRhQ29tcGxlbWVudG8gPSB0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8uZGF0YTtcblxuICAgIC8vbGV0IG9iamV0byA9IChhd2FpdCB0aGlzLmNhcmdhckFyY2hpdm9TZXJ2aWNlcy5nZXRQcm9waWVkYWQoeyBwcm9waWVkYWQ6IFwicnV0YV9wbGFudGlsbGFzXCIsIGFwbGljYWNpb246IDEgfSkudG9Qcm9taXNlKCkpO1xuXG4gICAgaWYgKCF0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8/LnBhcmVudCkge1xuICAgICAgcnV0YUNvbXBsZW1lbnRvID0gJyc7XG4gICAgfVxuXG4gICAgLy9WZXJpZmljYSBzaSBlbCBkb2N1bWVudG8geWEgZXhpc3RlIFxuICAgIGxldCBkYXRhID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5wbGFudGlsbGFzU2VydmljZS5leGlzdGVEb2N1bWVudG8odGhpcy5ydXRhUHJpbmNpcGFsLCBydXRhQ29tcGxlbWVudG8sIGluZm9ybWFjaW9uQXJjaGl2bykpO1xuXG4gICAgaWYgKGRhdGE/LnZhbGlkYWNpb25Eb2N1bWVudG8pIHtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dXYXJuaW5nKGRhdGE/LnZhbGlkYWNpb25Eb2N1bWVudG8pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vR3VhcmRhIGVsIGRvY3VtZW50b1xuICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMucGxhbnRpbGxhc1NlcnZpY2UuY2FyZ2FyRG9jdW1lbnRvKHRoaXMucnV0YVByaW5jaXBhbCwgcnV0YUNvbXBsZW1lbnRvLCBpbmZvcm1hY2lvbkFyY2hpdm8pKTtcblxuICAgIHRoaXMubmdPbkluaXQoKTtcblxuICB9XG5cbiAgYXN5bmMgZGVzY2FyZ2FyQW5leG8oKSB7XG5cbiAgICAvL1J1dGEgYXJjaGl2byAgXG4gICAgbGV0IHJ1dGFDb21wbGVtZW50byA9IHRoaXMuYXJjaGl2b1NlbGVjY2lvbmFkby5kYXRhO1xuXG4gICAgaWYgKCF0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8/LnBhcmVudCkge1xuICAgICAgcnV0YUNvbXBsZW1lbnRvID0gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5jYXJnYXJBcmNoaXZvU2VydmljZXMuZGVzY2FyZ2FyQXJjaGl2byh0aGlzLmVuY3JpcHRhZG9CYXNpY28uZW5jcmlwdGFyKHRoaXMucnV0YVByaW5jaXBhbCArIHJ1dGFDb21wbGVtZW50byksIHVuZGVmaW5lZCwgdW5kZWZpbmVkKS5zdWJzY3JpYmUoYmxvYiA9PiB7XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgY29uc3Qgb2JqZWN0VXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgIGEuaHJlZiA9IG9iamVjdFVybDtcbiAgICAgIGEuZG93bmxvYWQgPSB0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8/LmxhYmVsO1xuICAgICAgYS5jbGljaygpO1xuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChvYmplY3RVcmwpO1xuICAgIH0pO1xuXG4gIH1cblxuICBlbGltaW5hckFyY2hpdm8oKSB7XG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXQsXG4gICAgICBrZXk6ICdlbGltaW5hckFyY2hpdm8nLFxuICAgICAgbWVzc2FnZTogJ8K/RGVzZWEgZWxpbWluYXIgZWwgcmVnaXN0cm8/JyxcbiAgICAgIGFjY2VwdExhYmVsOiAnU2knLFxuICAgICAgaWNvbjogJ2NvbmZpcm1hcicsXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRFbGltaW5hckFyY2hpdm8oKTtcbiAgICAgIH0sXG4gICAgICByZWplY3Q6ICgpID0+IHsgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNldEVsaW1pbmFyQXJjaGl2bygpIHtcblxuICAgIC8vUnV0YSBhcmNoaXZvICBcbiAgICBsZXQgcnV0YUNvbXBsZW1lbnRvID0gdGhpcy5hcmNoaXZvU2VsZWNjaW9uYWRvLmRhdGE7XG5cbiAgICBpZiAoIXRoaXMuYXJjaGl2b1NlbGVjY2lvbmFkbz8ucGFyZW50KSB7XG4gICAgICBydXRhQ29tcGxlbWVudG8gPSAnJztcbiAgICB9XG5cbiAgICBsZXQgcHJvcGllZGFkID0gJ3J1dGFfcGxhbnRpbGxhcydcbiAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmNhcmdhckFyY2hpdm9TZXJ2aWNlcy5lbGltaW5hckFyY2hpdm8odGhpcy5lbmNyaXB0YWRvQmFzaWNvLmVuY3JpcHRhcihydXRhQ29tcGxlbWVudG8pLCBwcm9waWVkYWQsICcxJykpO1xuICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dTdWNjZXNzKHRoaXMuZ2VuZXJhbFBpcGUuTUVOU0FKRV9FTElNSU5BUik7XG4gICAgdGhpcy5hcmNoaXZvU2VsZWNjaW9uYWRvID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlclZhbHVlID0gbnVsbDtcbiAgICB0aGlzLm5nT25Jbml0KCk7XG4gIH1cblxuICBpc0Zvcm1hdG9WYWxpZG8obm9tYnJlQXJjaGl2bzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gVmVyaWZpY2Egc2kgZWwgYXJjaGl2byB0ZXJtaW5hIGNvbiBhbGd1bmEgZGUgbGFzIGV4dGVuc2lvbmVzIHbDoWxpZGFzXG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5GT1JNQVRTX1ZBTElET1MpLnNvbWUoZXh0ID0+IG5vbWJyZUFyY2hpdm8uZW5kc1dpdGgoZXh0KSk7XG4gIH1cblxuICBjcmVhckNhcnBldGEoKSB7XG4gICAgdGhpcy5pc1Zpc3VhbGl6YXJDcmVhckNhcGVydGEgPSB0cnVlO1xuICAgIHRoaXMubm9tTnVldmFDYXJwZXRhID0gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGd1YXJkYXJDYXJwZXRhKCkge1xuXG4gICAgaWYgKHRoaXMubWlGb3JtdWxhcmlvLnZhbGlkKSB7XG5cbiAgICAgIGxldCBydXRhQ29tcGxlbWVudG8gPSB0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8uZGF0YTtcblxuICAgICAgaWYgKCF0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8/LnBhcmVudCkge1xuICAgICAgICBydXRhQ29tcGxlbWVudG8gPSAnJztcbiAgICAgIH1cblxuICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5wbGFudGlsbGFzU2VydmljZS5jcmVhckNhcnBldGEodGhpcy5ydXRhUHJpbmNpcGFsLCBydXRhQ29tcGxlbWVudG8sIHRoaXMubm9tTnVldmFDYXJwZXRhKSk7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93U3VjY2VzcygnTGEgY2FycGV0YSBzZSBoYSBjcmVhZG8gY29ycmVjdGFtZW50ZScpO1xuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xuXG4gICAgfSBlbHNlIHtcblxuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvd0Vycm9yKCdGYWx0YW4gY2FtcG9zIG9ibGlnYXRvcmlvcycpO1xuICAgICAgT2JqZWN0LmtleXModGhpcy5taUZvcm11bGFyaW8uY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5taUZvcm11bGFyaW8uY29udHJvbHNba2V5XS5pbnZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5taUZvcm11bGFyaW8uY29udHJvbHNba2V5XS5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIGVsaW1pbmFyQ2FycGV0YSgpIHtcblxuICAgIHRoaXMuaXNWaXN1YWxpemFyQ3JlYXJDYXBlcnRhID0gZmFsc2U7XG5cbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICB0YXJnZXQ6IGV2ZW50LnRhcmdldCxcbiAgICAgIGtleTogJ2VsaW1pbmFyQ2FycGV0YScsXG4gICAgICBtZXNzYWdlOiAnwr9EZXNlYSBlbGltaW5hciBlbCByZWdpc3Rybz8nLFxuICAgICAgYWNjZXB0TGFiZWw6ICdTaScsXG4gICAgICBpY29uOiAnY29uZmlybWFyJyxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICB0aGlzLnNldEVsaW1pbmFyQ2FycGV0YSgpO1xuICAgICAgfSxcbiAgICAgIHJlamVjdDogKCkgPT4geyB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2V0RWxpbWluYXJDYXJwZXRhKCkge1xuXG4gICAgbGV0IHJ1dGFDb21wbGVtZW50byA9IHRoaXMuYXJjaGl2b1NlbGVjY2lvbmFkby5kYXRhO1xuXG4gICAgaWYgKCF0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8/LnBhcmVudCkge1xuICAgICAgcnV0YUNvbXBsZW1lbnRvID0gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5wbGFudGlsbGFzU2VydmljZS5lbGltaW5hckNhcnBldGEodGhpcy5ydXRhUHJpbmNpcGFsLCBydXRhQ29tcGxlbWVudG8pLnN1YnNjcmliZShydGEgPT4ge1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ0xhIGNhcnBldGEgaGEgc2lkbyBlbGltaW5hZGEgY29ycmVjdGFtZW50ZScpO1xuICAgICAgdGhpcy5hcmNoaXZvU2VsZWNjaW9uYWRvID0gbnVsbDtcbiAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSBudWxsO1xuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xuICAgIH0pXG5cbiAgfVxuXG4gIGFzeW5jIGNvbnZlcnRpckFyY2hpdm9zKCkge1xuXG4gICAgdGhpcy5pc1Zpc3VhbGl6YXJDcmVhckNhcGVydGEgPSBmYWxzZTtcbiAgICB0aGlzLmlzTW9zdHJhclBvcHVwQ29udmVydGlyID0gdHJ1ZTtcbiAgICAvL2NvbnN0IGZpbHRlcmVkTm9kZXMgPSB0aGlzLmdldEZpbHRlcmVkTm9kZXMoKTtcbiAgICBjb25zdCB2YWxvckZpbHRybyA9IHRoaXMuZmlsdGVyVmFsdWU7XG5cbiAgICBjb25zdCBzbGVlcCA9IChtKSA9PiBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtKSk7XG4gICAgYXdhaXQgc2xlZXAoNTApO1xuXG4gICAgdGhpcy5wb3B1cENvbnZlcnRpclBsYW50aWxsYXNDb21wb25lbnQuYnVzY2FyKHRoaXMucnV0YVByaW5jaXBhbCwgdmFsb3JGaWx0cm8pO1xuXG4gIH1cblxuICByZWdyZXNhclBvcHVwQ29udmVydGlyKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5pc01vc3RyYXJQb3B1cENvbnZlcnRpciA9IGZhbHNlO1xuICAgIHRoaXMubmdPbkluaXQoKTtcbiAgfVxuXG4gIGlzSHRtbCgpIHtcbiAgICB0aGlzLmh0bWwgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8gIT0gbnVsbCAmJiB0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8ubGFiZWwgIT0gbnVsbCAmJiB0aGlzLmFyY2hpdm9TZWxlY2Npb25hZG8ubGFiZWwuaW5jbHVkZXMoJy5odG1sJykpXG4gICAgICB0aGlzLmh0bWwgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMuaHRtbDtcbiAgfVxuXG4gIGFzeW5jIGVkaXRhckFjdGlvbigpIHtcblxuICAgIGxldCBkYXRhID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5wbGFudGlsbGFzU2VydmljZS5jb25zdWx0YXJBcmNoaXZvSHRtbCh0aGlzLnJ1dGFQcmluY2lwYWwsIHRoaXMuYXJjaGl2b1NlbGVjY2lvbmFkby5kYXRhKSk7XG5cbiAgICB0aGlzLm1vZGlmaWNhckhUTUwgPSBkYXRhO1xuXG4gICAgdGhpcy5tb3N0cmFyRWRpdG9yID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGd1YXJkYXJIdG1sKCkge1xuXG4gICAgY29uc29sZS5sb2coJ3RoaXMubW9kaWZpY2FySFRNTCcsIHRoaXMubW9kaWZpY2FySFRNTCk7XG5cbiAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnBsYW50aWxsYXNTZXJ2aWNlLmd1YXJkYXJBcmNoaXZvSHRtbCh0aGlzLnJ1dGFQcmluY2lwYWwsIHRoaXMuYXJjaGl2b1NlbGVjY2lvbmFkby5kYXRhLCB0aGlzLm1vZGlmaWNhckhUTUwpKTtcblxuICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dTdWNjZXNzKCdFbCBhcmNoaXZvIGhhIHNpZG8gbW9kaWZpY2FkbyBjb3JyZWN0YW1lbnRlJyk7XG5cbiAgICB0aGlzLm5nT25Jbml0KCk7XG5cbiAgfVxuXG4gIHJlZ3Jlc2FyUHJpbmNpcGFsKCkge1xuICAgIHRoaXMubW9zdHJhckVkaXRvciA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHZlcmlmaWNhckNvbnRyb2woY29udHJvbCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xGdW5jaW9uU2VydmljZS5nZXRDb250cm9sRnVuY2lvbmFsaWRhZChjb250cm9sKTtcbiAgfVxuXG59XG4iLCI8cC1jb25maXJtUG9wdXAga2V5PVwiZWxpbWluYXJDYXJwZXRhXCI+PC9wLWNvbmZpcm1Qb3B1cD5cbjxwLWNvbmZpcm1Qb3B1cCBrZXk9XCJlbGltaW5hckFyY2hpdm9cIj48L3AtY29uZmlybVBvcHVwPlxuXG48aDEgY2xhc3M9XCJtYi00XCI+e3snY2FyZ3VlJyB8IHRyYW5zbGF0ZX19IHt7J3BsYW50aWxsYXMnIHwgdHJhbnNsYXRlfX08L2gxPlxuXG48ZGl2IGNsYXNzPVwicC1mbHVpZCBwLWZvcm1ncmlkIGdyaWRcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTYgbGc6Y29sLTUgY2FyZCBwLTVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJmaWx0ZXJWYWx1ZVwiIHBsYWNlaG9sZGVyPVwie3snZmlsdHJvJyB8IHRyYW5zbGF0ZX19XCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJmaWx0cmFyRW50ZXIoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIHBSaXBwbGUgaWNvbj1cInBpIHBpLXNlYXJjaCB0ZXh0LXhsXCIgKGNsaWNrKT1cImFwbGljYXJGaWx0cm8oKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwLWVsZW1lbnQgcC1yaXBwbGUgcC1idXR0b24tcm91bmRlZCAgcC1idXR0b24tc2Vjb25kYXJ5IHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLWljb24tb25seSBhYnNvbHV0ZSByaWdodC0wIGJvcmRlci1ub25lIGJnLXdoaXRlLWFscGhhLTEwXCJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIiBwVG9vbHRpcD1cIkVkaXRhciBIVE1MXCI+PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxwLXRyZWUgI3RyZWUgc2Nyb2xsSGVpZ2h0PVwiNjcwcHhcIiBbdmFsdWVdPVwiZmlsdGVyZWRGaWxlc1wiIHNlbGVjdGlvbk1vZGU9XCJzaW5nbGVcIiBbKHNlbGVjdGlvbildPVwiZGF0YVNlbGVjdGVkXCJcbiAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmFsc2VcIiBbZmlsdGVyUGxhY2Vob2xkZXJdPVwiJ2ZpbHRybycgfCB0cmFuc2xhdGVcIiBmaWx0ZXJNb2RlPVwic3RyaWN0XCJcbiAgICAgICAgICAgIChvbk5vZGVTZWxlY3QpPVwic2VsZWNjaW9uYXJBcmNoaXZvKCRldmVudClcIiBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgICAgICAgICAgIChvbk5vZGVVbnNlbGVjdCk9XCJkZXNlbGVjY2lvbmFyQXJjaGl2bygkZXZlbnQpXCI+PC9wLXRyZWU+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIE9QQ0lORVMgRElSRUNUT1JJT1MgLSBBUkNISVZPUyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQgY29sLTEyIG1kOmNvbC02IGxnOmNvbC03IHAtMCBwbC0zXCI+XG5cbiAgICAgICAgQGlmKCF0aGlzLmxvYWRpbmcpe1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBwLTNcIj5cblxuICAgICAgICAgICAgPCEtLSBDQVJQRVRBIC0tPlxuICAgICAgICAgICAgQGlmKGFyY2hpdm9TZWxlY2Npb25hZG8uZXhwYW5kZWQpe1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwidGV4dC14bCBtdC0yIG1iLTQgbXItM1wiPkNhcnBldGE6IDwvaDE+XG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwidGV4dC1zbSBtdC0yIG1iLTRcIj4ge3thcmNoaXZvU2VsZWNjaW9uYWRvLmxhYmVsfX0gPC9oNT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBDb252ZXJ0aXIgLS0+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBwUmlwcGxlIChjbGljayk9XCJjb252ZXJ0aXJBcmNoaXZvcygpXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ2ZXJDb252ZXJ0aXIgJiYgY29udHJvbEZ1bmNpb25TZXJ2aWNlLmdldENvbnRyb2xGdW5jaW9uYWxpZGFkKCdzZWd1cGxhY29yOmd1YXJkYXInKVwiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiIGxhYmVsPVwie3snY29udmVydGlyJyB8IHRyYW5zbGF0ZX19XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCBib3Rvbi1hY2Npb24tcHJpbmNpcGFsIHRleHQtZ3JheS02MDAgY29sb3ItNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJDb252ZXJ0aXIgYXJjaGl2b1wiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVuZWRvci1pY29uby1hY2Npb25lcy1wcmluY2lwYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktYXJyb3ctcmlnaHQtYXJyb3ctbGVmdCBjb2xvci01MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPCEtLU51ZXZhIENhcnBldGEtLT5cbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY29udHJvbEZ1bmNpb25TZXJ2aWNlLmdldENvbnRyb2xGdW5jaW9uYWxpZGFkKCdzZWd1cGxhY29yOmd1YXJkYXInKVwiIHBCdXR0b24gcFJpcHBsZVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkICBib3Rvbi1hY2Npb24tcHJpbmNpcGFsIHRleHQtZ3JheS02MDAgY29sb3ItNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJ7eydsaW5rX251ZXZvJyB8IHRyYW5zbGF0ZX19XCIgKGNsaWNrKT1cImNyZWFyQ2FycGV0YSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW5lZG9yLWljb25vLWFjY2lvbmVzLXByaW5jaXBhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJnbHlwaGljb25zIGdseXBoaWNvbnMtZmxvcHB5LXNhdmUgY29sb3ItNTAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDwhLS1FbGltaW5hci0tPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjb250cm9sRnVuY2lvblNlcnZpY2UuZ2V0Q29udHJvbEZ1bmNpb25hbGlkYWQoJ3NlZ3VwbGFjb3I6Z3VhcmRhcicpXCIgcEJ1dHRvbiBwUmlwcGxlXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tb3V0bGluZWQgIGJvdG9uLWFjY2lvbi1wcmluY2lwYWwgdGV4dC1ncmF5LTYwMCBjb2xvci01MDBcIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cInt7J2xpbmtfZWxpbWluYXInIHwgdHJhbnNsYXRlfX1cIiAoY2xpY2spPVwiZWxpbWluYXJDYXJwZXRhKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbmVkb3ItaWNvbm8tYWNjaW9uZXMtcHJpbmNpcGFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1iaW4gY29sb3ItNTAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDwhLS0gQ2FyZ2FyIEFyY2hpdm8gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdtaW4td2lkdGgtMTAwJzogIXZlckNvbnZlcnRpciwgJ21pbi13aWR0aC0yMCc6IHZlckNvbnZlcnRpciB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwLWZpbGVVcGxvYWQgI2Z1YmF1dG8gbW9kZT1cImJhc2ljXCIgW2F1dG9dPVwidHJ1ZVwiIFtjdXN0b21VcGxvYWRdPVwidHJ1ZVwiIGNob29zZUljb249XCJwaSBwaS1wYXBlcmNsaXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sRnVuY2lvblNlcnZpY2UuZ2V0Q29udHJvbEZ1bmNpb25hbGlkYWQoJ3NlZ3VwbGFjb3I6Z3VhcmRhcicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNob29zZUxhYmVsPVwie3snbGlua19zdWJpcmFyY2hpdm9zJyB8IHRyYW5zbGF0ZX19XCIgKG9uU2VsZWN0KT1cImNhcmdhck51ZXZvKCRldmVudCwgZnViYXV0bylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW5lZG9yLWljb25vLWFjY2lvbmVzLXByaW5jaXBhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktdHJhc2hcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9wLWZpbGVVcGxvYWQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPCEtLSBBUkNISVZPLS0+XG4gICAgICAgICAgICBAaWYoIWFyY2hpdm9TZWxlY2Npb25hZG8uZXhwYW5kZWQpe1xuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJ0ZXh0LXhsIG10LTIgbWItNCBtci0zXCI+QXJjaGl2bzogPC9oMT5cbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJ0ZXh0LXNtIG10LTIgbWItNFwiPiB7e2FyY2hpdm9TZWxlY2Npb25hZG8ubGFiZWx9fSA8L2g1PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICAgICAgICBAaWYoYXJjaGl2b1NlbGVjY2lvbmFkby5sYWJlbC5pbmNsdWRlcygnLmh0bWwnKSl7XG5cbiAgICAgICAgICAgICAgICA8IS0tRURJVEFSIEhUTUwtLT5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIHBSaXBwbGUgaWNvbj1cInBpIHBpLWNvZGUgdGV4dC14bCBjb2xvci01MDBcIiAoY2xpY2spPVwiZWRpdGFyQWN0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkICBib3Rvbi1hY2Npb24tcHJpbmNpcGFsIHRleHQtZ3JheS02MDBcIiBsYWJlbD1cIkVkaXRhciBIVE1MXCI+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLSBERVNDQVJHQVItLT5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkICBib3Rvbi1hY2Npb24tcHJpbmNpcGFsIHRleHQtZ3JheS02MDAgY29sb3ItNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJ7eydsaW5rX2Rlc2NhcmdhcicgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJkZXNjYXJnYXJBbmV4bygpXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sRnVuY2lvblNlcnZpY2UuZ2V0Q29udHJvbEZ1bmNpb25hbGlkYWQoJ3NlZ3VwbGFjb3I6ZGVzY2FyZ2FyJylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbmVkb3ItaWNvbm8tYWNjaW9uZXMtcHJpbmNpcGFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1kb3dubG9hZCBjb2xvci01MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPCEtLUVMSU1JTkFSLS0+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgY2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCAgYm90b24tYWNjaW9uLXByaW5jaXBhbCB0ZXh0LWdyYXktNjAwIGNvbG9yLTUwMFwiXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwie3snbGlua19lbGltaW5hcicgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJlbGltaW5hckFyY2hpdm8oKVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbEZ1bmNpb25TZXJ2aWNlLmdldENvbnRyb2xGdW5jaW9uYWxpZGFkKCdzZWd1cGxhY29yOmd1YXJkYXInKVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVuZWRvci1pY29uby1hY2Npb25lcy1wcmluY2lwYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLWJpbiBjb2xvci01MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmKGFyY2hpdm9TZWxlY2Npb25hZG8uZXhwYW5kZWQgJiYgaXNWaXN1YWxpemFyQ3JlYXJDYXBlcnRhKXtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cblxuICAgICAgICAgICAgPGg1IGNsYXNzPVwibXQtMlwiPjxpIGNsYXNzPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLW5vdGVcIj48L2k+IE51ZXZhIGNhcnBldGE8L2g1PlxuXG4gICAgICAgICAgICA8Zm9ybSAjbWlGb3JtdWxhcmlvPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBjYW1wb3MgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIE5vbWJyZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBwLTAgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWZsb2F0LWxhYmVsIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCBpZD1cImlkX251bWVyb19kZV9ldmVudG9cIiBbKG5nTW9kZWwpXT1cIm5vbU51ZXZhQ2FycGV0YVwiIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJub21icmVDYXJwZXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlkX251bWVyb19kZV9ldmVudG9cIj57eydub21icmUnIHwgdHJhbnNsYXRlfX0gKjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1HdWFyZGFyIENhcnBldGEtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwibXItMiBwLWJ1dHRvbiBiYWNrZ3JvdW5kLTEwMCBjb2xvci01MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJnbHlwaGljb25zIGdseXBoaWNvbnMtZmxvcHB5LXNhdmVcIiBbbGFiZWxdPVwiKCdsaW5rX2d1YXJkYXInIHwgdHJhbnNsYXRlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImd1YXJkYXJDYXJwZXRhKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZm9ybT5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8IS0tIEVESVRPUiBERSBIVE1MIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNIdG1sKCkgJiYgbW9zdHJhckVkaXRvclwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBCb3TDs24gZ3VhcmRhciBIVE1MIC0tPlxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGxhYmVsPVwie3snbGlua19ndWFyZGFyJyB8IHRyYW5zbGF0ZSB9fVwiIChjbGljayk9XCJndWFyZGFySHRtbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1mbG9wcHktc2F2ZVwiIGNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sRnVuY2lvblNlcnZpY2UuZ2V0Q29udHJvbEZ1bmNpb25hbGlkYWQoJ3NlZ3VwbGFjb3I6Z3VhcmRhcicpXCI+PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHAtZWRpdG9yIGlkPVwiZWRpdG9yXCIgW3N0eWxlXT1cInsgaGVpZ2h0OiAnNTAwcHgnIH1cIiByZXF1aXJlZCBbKG5nTW9kZWwpXT1cIm1vZGlmaWNhckhUTUxcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJodG1sUHVibGljYWNpb25cIj48L3AtZWRpdG9yPlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbkBpZihpc01vc3RyYXJQb3B1cENvbnZlcnRpcil7XG48YXBwLXBvcHVwLWNvbnZlcnRpci1wbGFudGlsbGFzIChyZWdyZXNhcik9XCJyZWdyZXNhclBvcHVwQ29udmVydGlyKCRldmVudClcIj48L2FwcC1wb3B1cC1jb252ZXJ0aXItcGxhbnRpbGxhcz5cbn0iXX0=
|
|
@@ -15545,7 +15545,7 @@ class CarguePlantillaGeneralComponent {
|
|
|
15545
15545
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: CarguePlantillaGeneralComponent, deps: [{ token: PlantillasService }, { token: AuthService }, { token: i7$1.TranslateService }, { token: CargarControlFuncionalidadService }, { token: i7.ConfirmationService }, { token: ToastService }, { token: CargarArchivosService }, { token: EncriptadoBasicoService }, { token: GeneralPipe }, { token: UtilsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
15546
15546
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: CarguePlantillaGeneralComponent, isStandalone: true, selector: "app-cargue-plantilla-general", providers: [
|
|
15547
15547
|
ConfirmationService
|
|
15548
|
-
], viewQueries: [{ propertyName: "popupConvertirPlantillasComponent", first: true, predicate: PopupConvertirPlantillasComponent, descendants: true }, { propertyName: "miFormulario", first: true, predicate: ["miFormulario"], descendants: true }, { propertyName: "treeComponent", first: true, predicate: ["tree"], descendants: true }], ngImport: i0, template: "<p-confirmPopup key=\"eliminarCarpeta\"></p-confirmPopup>\n<p-confirmPopup key=\"eliminarArchivo\"></p-confirmPopup>\n\n<h1 class=\"mb-4\">{{'cargue' | translate}} {{'plantillas' | translate}}</h1>\n\n<div class=\"p-fluid p-formgrid grid\">\n\n <div class=\"field col-12 md:col-6 lg:col-5\">\n <div class=\"flex justify-content-between align-items-center justify-content-center\">\n <input type=\"text\" pInputText [(ngModel)]=\"filterValue\" placeholder=\"{{'filtro' | translate}}\"\n (keydown)=\"filtrarEnter($event)\" />\n <button type=\"button\" pButton pRipple icon=\"pi pi-search text-xl\" (click)=\"aplicarFiltro()\"\n class=\"p-element p-ripple p-button-rounded p-button-secondary p-button p-component p-button-icon-only\"\n tooltipPosition=\"bottom\" pTooltip=\"Editar HTML\"></button>\n </div>\n\n <p-tree #tree scrollHeight=\"670px\" [value]=\"filteredFiles\" selectionMode=\"single\" [(selection)]=\"dataSelected\"\n [filter]=\"false\" [filterPlaceholder]=\"'filtro' | translate\" filterMode=\"strict\"\n (onNodeSelect)=\"seleccionarArchivo($event)\" [loading]=\"loading\"\n (onNodeUnselect)=\"deseleccionarArchivo($event)\"></p-tree>\n </div>\n\n <!-- OPCINES DIRECTORIOS - ARCHIVOS -->\n <div class=\"field col-12 md:col-6 lg:col-7\">\n\n @if(!this.loading){\n <div class=\"card\">\n\n <!-- CARPETA -->\n @if(archivoSeleccionado.expanded){\n <div class=\"flex align-items-center\">\n <h1 class=\"text-xl mt-2 mb-4 mr-3\">Carpeta: </h1>\n <h5 class=\"text-sm mt-2 mb-4\"> {{archivoSeleccionado.label}} </h5>\n </div>\n\n <div class=\"flex justify-content-between\">\n\n <!-- Convertir -->\n <button type=\"button\" pButton pRipple (click)=\"convertirArchivos()\"\n *ngIf=\"verConvertir && controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"\n tooltipPosition=\"bottom\" label=\"{{'convertir' | translate}}\"\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n pTooltip=\"Convertir archivo\" tooltipPosition=\"bottom\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"pi pi-arrow-right-arrow-left color-500\"></i>\n </div>\n </button>\n\n <!--Nueva Carpeta-->\n <button *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\" pButton pRipple\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_nuevo' | translate}}\" (click)=\"crearCarpeta()\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-floppy-save color-500\"></i>\n </div>\n </button>\n\n <!--Eliminar-->\n <button *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\" pButton pRipple\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminarCarpeta()\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-bin color-500\"></i>\n </div>\n </button>\n\n <!-- Cargar Archivo -->\n <p-fileUpload #fubauto mode=\"basic\" [auto]=\"true\" [customUpload]=\"true\" chooseIcon=\"pi pi-paperclip\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"\n chooseLabel=\"{{'link_subirarchivos' | translate}}\" (onSelect)=\"cargarNuevo($event, fubauto)\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"pi pi-trash\"></i>\n </div>\n </p-fileUpload>\n </div>\n }\n\n <!-- ARCHIVO-->\n @if(!archivoSeleccionado.expanded){\n\n <div class=\"flex align-items-center\">\n <h1 class=\"text-xl mt-2 mb-4 mr-3\">Archivo: </h1>\n <h5 class=\"text-sm mt-2 mb-4\"> {{archivoSeleccionado.label}} </h5>\n </div>\n\n <div class=\"flex justify-content-end\">\n @if(archivoSeleccionado.label.includes('.html')){\n\n <!--EDITAR HTML-->\n <button type=\"button\" pButton pRipple icon=\"pi pi-code text-xl\" (click)=\"editarAction()\"\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\" label=\"Editar HTML\">\n </button>\n }\n\n <!-- DESCARGAR-->\n <button pButton pRipple class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_descargar' | translate}}\" (click)=\"descargarAnexo()\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:descargar')\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-download\"></i>\n </div>\n </button>\n\n <!--ELIMINAR-->\n <button pButton pRipple class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminarArchivo()\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-bin\"></i>\n </div>\n </button>\n </div>\n }\n </div>\n }\n\n @if(archivoSeleccionado.expanded && isVisualizarCrearCaperta){\n <div class=\"card\">\n\n <h5 class=\"mt-2\"><i class=\"glyphicons glyphicons-note\"></i> Nueva carpeta</h5>\n\n <form #miFormulario=\"ngForm\">\n <!-- campos -->\n <div class=\"flex mb-3\">\n <!-- Nombre -->\n <div class=\"w-full p-0 mb-0\">\n <span class=\"p-float-label mr-2\">\n <input pInputText id=\"id_numero_de_evento\" [(ngModel)]=\"nomNuevaCarpeta\" required\n name=\"nombreCarpeta\">\n <label for=\"id_numero_de_evento\">{{'nombre' | translate}} *</label>\n </span>\n </div>\n\n <div class=\"flex justify-content-end\">\n <!--Guardar Carpeta-->\n <button pButton pRipple class=\"mr-2 p-button background-100 color-500\"\n icon=\"glyphicons glyphicons-floppy-save\" [label]=\"('link_guardar' | translate)\"\n (click)=\"guardarCarpeta()\">\n </button>\n </div>\n </div>\n </form>\n\n </div>\n }\n <!-- EDITOR DE HTML -->\n <div *ngIf=\"isHtml() && mostrarEditor\">\n\n <div class=\"flex justify-content-end align-items-center mb-3\">\n <!-- Bot\u00F3n guardar HTML -->\n <button pButton pRipple label=\"{{'link_guardar' | translate }}\" (click)=\"guardarHtml()\"\n icon=\"glyphicons glyphicons-floppy-save\" class=\"p-button-secondary\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"></button>\n </div>\n\n <p-editor id=\"editor\" [style]=\"{ height: '500px' }\" required [(ngModel)]=\"modificarHTML\"\n name=\"htmlPublicacion\"></p-editor>\n\n </div>\n </div>\n</div>\n\n@if(isMostrarPopupConvertir){\n<app-popup-convertir-plantillas (regresar)=\"regresarPopupConvertir($event)\"></app-popup-convertir-plantillas>\n}", styles: [""], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TreeModule }, { kind: "component", type: i7$2.Tree, selector: "p-tree", inputs: ["value", "selectionMode", "loadingMode", "selection", "style", "styleClass", "contextMenu", "layout", "draggableScope", "droppableScope", "draggableNodes", "droppableNodes", "metaKeySelection", "propagateSelectionUp", "propagateSelectionDown", "loading", "loadingIcon", "emptyMessage", "ariaLabel", "togglerAriaLabel", "ariaLabelledBy", "validateDrop", "filter", "filterBy", "filterMode", "filterPlaceholder", "filteredNodes", "filterLocale", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "indentation", "_templateMap", "trackBy", "virtualNodeHeight"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse", "onNodeContextMenuSelect", "onNodeDrop", "onLazyLoad", "onScroll", "onScrollIndexChange", "onFilter"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i14.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i10$1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "directive", type: i3$1.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: ConfirmPopupModule }, { kind: "component", type: i12$2.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FieldsetModule }, { kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i20.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: PopupConvertirPlantillasComponent, selector: "app-popup-convertir-plantillas", inputs: ["showDialog"], outputs: ["onSelected", "regresar"] }, { kind: "ngmodule", type: EditorModule }, { kind: "component", type: i19.Editor, selector: "p-editor", inputs: ["style", "styleClass", "placeholder", "formats", "modules", "bounds", "scrollingContainer", "debug", "readonly"], outputs: ["onInit", "onTextChange", "onSelectionChange"] }] });
|
|
15548
|
+
], viewQueries: [{ propertyName: "popupConvertirPlantillasComponent", first: true, predicate: PopupConvertirPlantillasComponent, descendants: true }, { propertyName: "miFormulario", first: true, predicate: ["miFormulario"], descendants: true }, { propertyName: "treeComponent", first: true, predicate: ["tree"], descendants: true }], ngImport: i0, template: "<p-confirmPopup key=\"eliminarCarpeta\"></p-confirmPopup>\n<p-confirmPopup key=\"eliminarArchivo\"></p-confirmPopup>\n\n<h1 class=\"mb-4\">{{'cargue' | translate}} {{'plantillas' | translate}}</h1>\n\n<div class=\"p-fluid p-formgrid grid\">\n\n <div class=\"field col-12 md:col-6 lg:col-5 card p-5\">\n <div class=\"flex justify-content-between align-items-center justify-content-center relative\">\n <input type=\"text\" pInputText [(ngModel)]=\"filterValue\" placeholder=\"{{'filtro' | translate}}\"\n (keydown)=\"filtrarEnter($event)\" />\n <button type=\"button\" pButton pRipple icon=\"pi pi-search text-xl\" (click)=\"aplicarFiltro()\"\n class=\"p-element p-ripple p-button-rounded p-button-secondary p-button p-component p-button-icon-only absolute right-0 border-none bg-white-alpha-10\"\n tooltipPosition=\"bottom\" pTooltip=\"Editar HTML\"></button>\n </div>\n\n <p-tree #tree scrollHeight=\"670px\" [value]=\"filteredFiles\" selectionMode=\"single\" [(selection)]=\"dataSelected\"\n [filter]=\"false\" [filterPlaceholder]=\"'filtro' | translate\" filterMode=\"strict\"\n (onNodeSelect)=\"seleccionarArchivo($event)\" [loading]=\"loading\"\n (onNodeUnselect)=\"deseleccionarArchivo($event)\"></p-tree>\n </div>\n\n <!-- OPCINES DIRECTORIOS - ARCHIVOS -->\n <div class=\"field col-12 md:col-6 lg:col-7 p-0 pl-3\">\n\n @if(!this.loading){\n <div class=\"card p-3\">\n\n <!-- CARPETA -->\n @if(archivoSeleccionado.expanded){\n <div class=\"flex align-items-center\">\n <h1 class=\"text-xl mt-2 mb-4 mr-3\">Carpeta: </h1>\n <h5 class=\"text-sm mt-2 mb-4\"> {{archivoSeleccionado.label}} </h5>\n </div>\n\n <div class=\"flex justify-content-between\">\n\n <!-- Convertir -->\n <button type=\"button\" pButton pRipple (click)=\"convertirArchivos()\"\n *ngIf=\"verConvertir && controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"\n tooltipPosition=\"bottom\" label=\"{{'convertir' | translate}}\"\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n pTooltip=\"Convertir archivo\" tooltipPosition=\"bottom\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"pi pi-arrow-right-arrow-left color-500\"></i>\n </div>\n </button>\n\n <!--Nueva Carpeta-->\n <button *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\" pButton pRipple\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_nuevo' | translate}}\" (click)=\"crearCarpeta()\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-floppy-save color-500\"></i>\n </div>\n </button>\n\n <!--Eliminar-->\n <button *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\" pButton pRipple\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminarCarpeta()\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-bin color-500\"></i>\n </div>\n </button>\n\n <!-- Cargar Archivo -->\n <div [ngClass]=\"{ 'min-width-100': !verConvertir, 'min-width-20': verConvertir }\">\n <p-fileUpload #fubauto mode=\"basic\" [auto]=\"true\" [customUpload]=\"true\" chooseIcon=\"pi pi-paperclip\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"\n chooseLabel=\"{{'link_subirarchivos' | translate}}\" (onSelect)=\"cargarNuevo($event, fubauto)\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"pi pi-trash\"></i>\n </div>\n </p-fileUpload>\n </div>\n </div>\n }\n\n <!-- ARCHIVO-->\n @if(!archivoSeleccionado.expanded){\n\n <div class=\"flex align-items-center\">\n <h1 class=\"text-xl mt-2 mb-4 mr-3\">Archivo: </h1>\n <h5 class=\"text-sm mt-2 mb-4\"> {{archivoSeleccionado.label}} </h5>\n </div>\n\n <div class=\"flex justify-content-end\">\n @if(archivoSeleccionado.label.includes('.html')){\n\n <!--EDITAR HTML-->\n <button type=\"button\" pButton pRipple icon=\"pi pi-code text-xl color-500\" (click)=\"editarAction()\"\n class=\"p-button-outlined boton-accion-principal text-gray-600\" label=\"Editar HTML\">\n </button>\n }\n\n <!-- DESCARGAR-->\n <button pButton pRipple class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_descargar' | translate}}\" (click)=\"descargarAnexo()\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:descargar')\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-download color-500\"></i>\n </div>\n </button>\n\n <!--ELIMINAR-->\n <button pButton pRipple class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminarArchivo()\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-bin color-500\"></i>\n </div>\n </button>\n </div>\n }\n </div>\n }\n\n @if(archivoSeleccionado.expanded && isVisualizarCrearCaperta){\n <div class=\"card\">\n\n <h5 class=\"mt-2\"><i class=\"glyphicons glyphicons-note\"></i> Nueva carpeta</h5>\n\n <form #miFormulario=\"ngForm\">\n <!-- campos -->\n <div class=\"flex mb-3\">\n <!-- Nombre -->\n <div class=\"w-full p-0 mb-0\">\n <span class=\"p-float-label mr-2\">\n <input pInputText id=\"id_numero_de_evento\" [(ngModel)]=\"nomNuevaCarpeta\" required\n name=\"nombreCarpeta\">\n <label for=\"id_numero_de_evento\">{{'nombre' | translate}} *</label>\n </span>\n </div>\n\n <div class=\"flex justify-content-end\">\n <!--Guardar Carpeta-->\n <button pButton pRipple class=\"mr-2 p-button background-100 color-500\"\n icon=\"glyphicons glyphicons-floppy-save\" [label]=\"('link_guardar' | translate)\"\n (click)=\"guardarCarpeta()\">\n </button>\n </div>\n </div>\n </form>\n\n </div>\n }\n <!-- EDITOR DE HTML -->\n <div *ngIf=\"isHtml() && mostrarEditor\">\n\n <div class=\"flex justify-content-end align-items-center mb-3\">\n <!-- Bot\u00F3n guardar HTML -->\n <button pButton pRipple label=\"{{'link_guardar' | translate }}\" (click)=\"guardarHtml()\"\n icon=\"glyphicons glyphicons-floppy-save\" class=\"p-button-secondary\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"></button>\n </div>\n\n <p-editor id=\"editor\" [style]=\"{ height: '500px' }\" required [(ngModel)]=\"modificarHTML\"\n name=\"htmlPublicacion\"></p-editor>\n\n </div>\n </div>\n</div>\n\n@if(isMostrarPopupConvertir){\n<app-popup-convertir-plantillas (regresar)=\"regresarPopupConvertir($event)\"></app-popup-convertir-plantillas>\n}", styles: [":host ::ng-deep .p-fluid .p-fileupload .p-button{width:100%}:host ::ng-deep .min-width-20{min-width:20%}:host ::ng-deep .min-width-100{min-width:30%}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TreeModule }, { kind: "component", type: i7$2.Tree, selector: "p-tree", inputs: ["value", "selectionMode", "loadingMode", "selection", "style", "styleClass", "contextMenu", "layout", "draggableScope", "droppableScope", "draggableNodes", "droppableNodes", "metaKeySelection", "propagateSelectionUp", "propagateSelectionDown", "loading", "loadingIcon", "emptyMessage", "ariaLabel", "togglerAriaLabel", "ariaLabelledBy", "validateDrop", "filter", "filterBy", "filterMode", "filterPlaceholder", "filteredNodes", "filterLocale", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "indentation", "_templateMap", "trackBy", "virtualNodeHeight"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse", "onNodeContextMenuSelect", "onNodeDrop", "onLazyLoad", "onScroll", "onScrollIndexChange", "onFilter"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i14.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i10$1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "directive", type: i3$1.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: ConfirmPopupModule }, { kind: "component", type: i12$2.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FieldsetModule }, { kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i20.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: PopupConvertirPlantillasComponent, selector: "app-popup-convertir-plantillas", inputs: ["showDialog"], outputs: ["onSelected", "regresar"] }, { kind: "ngmodule", type: EditorModule }, { kind: "component", type: i19.Editor, selector: "p-editor", inputs: ["style", "styleClass", "placeholder", "formats", "modules", "bounds", "scrollingContainer", "debug", "readonly"], outputs: ["onInit", "onTextChange", "onSelectionChange"] }] });
|
|
15549
15549
|
}
|
|
15550
15550
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: CarguePlantillaGeneralComponent, decorators: [{
|
|
15551
15551
|
type: Component,
|
|
@@ -15563,7 +15563,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
|
|
|
15563
15563
|
EditorModule
|
|
15564
15564
|
], providers: [
|
|
15565
15565
|
ConfirmationService
|
|
15566
|
-
], template: "<p-confirmPopup key=\"eliminarCarpeta\"></p-confirmPopup>\n<p-confirmPopup key=\"eliminarArchivo\"></p-confirmPopup>\n\n<h1 class=\"mb-4\">{{'cargue' | translate}} {{'plantillas' | translate}}</h1>\n\n<div class=\"p-fluid p-formgrid grid\">\n\n <div class=\"field col-12 md:col-6 lg:col-5\">\n <div class=\"flex justify-content-between align-items-center justify-content-center\">\n <input type=\"text\" pInputText [(ngModel)]=\"filterValue\" placeholder=\"{{'filtro' | translate}}\"\n (keydown)=\"filtrarEnter($event)\" />\n <button type=\"button\" pButton pRipple icon=\"pi pi-search text-xl\" (click)=\"aplicarFiltro()\"\n class=\"p-element p-ripple p-button-rounded p-button-secondary p-button p-component p-button-icon-only\"\n tooltipPosition=\"bottom\" pTooltip=\"Editar HTML\"></button>\n </div>\n\n <p-tree #tree scrollHeight=\"670px\" [value]=\"filteredFiles\" selectionMode=\"single\" [(selection)]=\"dataSelected\"\n [filter]=\"false\" [filterPlaceholder]=\"'filtro' | translate\" filterMode=\"strict\"\n (onNodeSelect)=\"seleccionarArchivo($event)\" [loading]=\"loading\"\n (onNodeUnselect)=\"deseleccionarArchivo($event)\"></p-tree>\n </div>\n\n <!-- OPCINES DIRECTORIOS - ARCHIVOS -->\n <div class=\"field col-12 md:col-6 lg:col-7\">\n\n @if(!this.loading){\n <div class=\"card\">\n\n <!-- CARPETA -->\n @if(archivoSeleccionado.expanded){\n <div class=\"flex align-items-center\">\n <h1 class=\"text-xl mt-2 mb-4 mr-3\">Carpeta: </h1>\n <h5 class=\"text-sm mt-2 mb-4\"> {{archivoSeleccionado.label}} </h5>\n </div>\n\n <div class=\"flex justify-content-between\">\n\n <!-- Convertir -->\n <button type=\"button\" pButton pRipple (click)=\"convertirArchivos()\"\n *ngIf=\"verConvertir && controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"\n tooltipPosition=\"bottom\" label=\"{{'convertir' | translate}}\"\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n pTooltip=\"Convertir archivo\" tooltipPosition=\"bottom\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"pi pi-arrow-right-arrow-left color-500\"></i>\n </div>\n </button>\n\n <!--Nueva Carpeta-->\n <button *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\" pButton pRipple\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_nuevo' | translate}}\" (click)=\"crearCarpeta()\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-floppy-save color-500\"></i>\n </div>\n </button>\n\n <!--Eliminar-->\n <button *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\" pButton pRipple\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminarCarpeta()\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-bin color-500\"></i>\n </div>\n </button>\n\n <!-- Cargar Archivo -->\n <p-fileUpload #fubauto mode=\"basic\" [auto]=\"true\" [customUpload]=\"true\" chooseIcon=\"pi pi-paperclip\"\n
|
|
15566
|
+
], template: "<p-confirmPopup key=\"eliminarCarpeta\"></p-confirmPopup>\n<p-confirmPopup key=\"eliminarArchivo\"></p-confirmPopup>\n\n<h1 class=\"mb-4\">{{'cargue' | translate}} {{'plantillas' | translate}}</h1>\n\n<div class=\"p-fluid p-formgrid grid\">\n\n <div class=\"field col-12 md:col-6 lg:col-5 card p-5\">\n <div class=\"flex justify-content-between align-items-center justify-content-center relative\">\n <input type=\"text\" pInputText [(ngModel)]=\"filterValue\" placeholder=\"{{'filtro' | translate}}\"\n (keydown)=\"filtrarEnter($event)\" />\n <button type=\"button\" pButton pRipple icon=\"pi pi-search text-xl\" (click)=\"aplicarFiltro()\"\n class=\"p-element p-ripple p-button-rounded p-button-secondary p-button p-component p-button-icon-only absolute right-0 border-none bg-white-alpha-10\"\n tooltipPosition=\"bottom\" pTooltip=\"Editar HTML\"></button>\n </div>\n\n <p-tree #tree scrollHeight=\"670px\" [value]=\"filteredFiles\" selectionMode=\"single\" [(selection)]=\"dataSelected\"\n [filter]=\"false\" [filterPlaceholder]=\"'filtro' | translate\" filterMode=\"strict\"\n (onNodeSelect)=\"seleccionarArchivo($event)\" [loading]=\"loading\"\n (onNodeUnselect)=\"deseleccionarArchivo($event)\"></p-tree>\n </div>\n\n <!-- OPCINES DIRECTORIOS - ARCHIVOS -->\n <div class=\"field col-12 md:col-6 lg:col-7 p-0 pl-3\">\n\n @if(!this.loading){\n <div class=\"card p-3\">\n\n <!-- CARPETA -->\n @if(archivoSeleccionado.expanded){\n <div class=\"flex align-items-center\">\n <h1 class=\"text-xl mt-2 mb-4 mr-3\">Carpeta: </h1>\n <h5 class=\"text-sm mt-2 mb-4\"> {{archivoSeleccionado.label}} </h5>\n </div>\n\n <div class=\"flex justify-content-between\">\n\n <!-- Convertir -->\n <button type=\"button\" pButton pRipple (click)=\"convertirArchivos()\"\n *ngIf=\"verConvertir && controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"\n tooltipPosition=\"bottom\" label=\"{{'convertir' | translate}}\"\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n pTooltip=\"Convertir archivo\" tooltipPosition=\"bottom\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"pi pi-arrow-right-arrow-left color-500\"></i>\n </div>\n </button>\n\n <!--Nueva Carpeta-->\n <button *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\" pButton pRipple\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_nuevo' | translate}}\" (click)=\"crearCarpeta()\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-floppy-save color-500\"></i>\n </div>\n </button>\n\n <!--Eliminar-->\n <button *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\" pButton pRipple\n class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminarCarpeta()\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-bin color-500\"></i>\n </div>\n </button>\n\n <!-- Cargar Archivo -->\n <div [ngClass]=\"{ 'min-width-100': !verConvertir, 'min-width-20': verConvertir }\">\n <p-fileUpload #fubauto mode=\"basic\" [auto]=\"true\" [customUpload]=\"true\" chooseIcon=\"pi pi-paperclip\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"\n chooseLabel=\"{{'link_subirarchivos' | translate}}\" (onSelect)=\"cargarNuevo($event, fubauto)\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"pi pi-trash\"></i>\n </div>\n </p-fileUpload>\n </div>\n </div>\n }\n\n <!-- ARCHIVO-->\n @if(!archivoSeleccionado.expanded){\n\n <div class=\"flex align-items-center\">\n <h1 class=\"text-xl mt-2 mb-4 mr-3\">Archivo: </h1>\n <h5 class=\"text-sm mt-2 mb-4\"> {{archivoSeleccionado.label}} </h5>\n </div>\n\n <div class=\"flex justify-content-end\">\n @if(archivoSeleccionado.label.includes('.html')){\n\n <!--EDITAR HTML-->\n <button type=\"button\" pButton pRipple icon=\"pi pi-code text-xl color-500\" (click)=\"editarAction()\"\n class=\"p-button-outlined boton-accion-principal text-gray-600\" label=\"Editar HTML\">\n </button>\n }\n\n <!-- DESCARGAR-->\n <button pButton pRipple class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_descargar' | translate}}\" (click)=\"descargarAnexo()\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:descargar')\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-download color-500\"></i>\n </div>\n </button>\n\n <!--ELIMINAR-->\n <button pButton pRipple class=\"p-button-outlined boton-accion-principal text-gray-600 color-500\"\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminarArchivo()\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\">\n <div class=\"contenedor-icono-acciones-principal\">\n <i class=\"glyphicons glyphicons-bin color-500\"></i>\n </div>\n </button>\n </div>\n }\n </div>\n }\n\n @if(archivoSeleccionado.expanded && isVisualizarCrearCaperta){\n <div class=\"card\">\n\n <h5 class=\"mt-2\"><i class=\"glyphicons glyphicons-note\"></i> Nueva carpeta</h5>\n\n <form #miFormulario=\"ngForm\">\n <!-- campos -->\n <div class=\"flex mb-3\">\n <!-- Nombre -->\n <div class=\"w-full p-0 mb-0\">\n <span class=\"p-float-label mr-2\">\n <input pInputText id=\"id_numero_de_evento\" [(ngModel)]=\"nomNuevaCarpeta\" required\n name=\"nombreCarpeta\">\n <label for=\"id_numero_de_evento\">{{'nombre' | translate}} *</label>\n </span>\n </div>\n\n <div class=\"flex justify-content-end\">\n <!--Guardar Carpeta-->\n <button pButton pRipple class=\"mr-2 p-button background-100 color-500\"\n icon=\"glyphicons glyphicons-floppy-save\" [label]=\"('link_guardar' | translate)\"\n (click)=\"guardarCarpeta()\">\n </button>\n </div>\n </div>\n </form>\n\n </div>\n }\n <!-- EDITOR DE HTML -->\n <div *ngIf=\"isHtml() && mostrarEditor\">\n\n <div class=\"flex justify-content-end align-items-center mb-3\">\n <!-- Bot\u00F3n guardar HTML -->\n <button pButton pRipple label=\"{{'link_guardar' | translate }}\" (click)=\"guardarHtml()\"\n icon=\"glyphicons glyphicons-floppy-save\" class=\"p-button-secondary\"\n *ngIf=\"controlFuncionService.getControlFuncionalidad('seguplacor:guardar')\"></button>\n </div>\n\n <p-editor id=\"editor\" [style]=\"{ height: '500px' }\" required [(ngModel)]=\"modificarHTML\"\n name=\"htmlPublicacion\"></p-editor>\n\n </div>\n </div>\n</div>\n\n@if(isMostrarPopupConvertir){\n<app-popup-convertir-plantillas (regresar)=\"regresarPopupConvertir($event)\"></app-popup-convertir-plantillas>\n}", styles: [":host ::ng-deep .p-fluid .p-fileupload .p-button{width:100%}:host ::ng-deep .min-width-20{min-width:20%}:host ::ng-deep .min-width-100{min-width:30%}\n"] }]
|
|
15567
15567
|
}], ctorParameters: () => [{ type: PlantillasService }, { type: AuthService }, { type: i7$1.TranslateService }, { type: CargarControlFuncionalidadService }, { type: i7.ConfirmationService }, { type: ToastService }, { type: CargarArchivosService }, { type: EncriptadoBasicoService }, { type: GeneralPipe }, { type: UtilsService }], propDecorators: { popupConvertirPlantillasComponent: [{
|
|
15568
15568
|
type: ViewChild,
|
|
15569
15569
|
args: [PopupConvertirPlantillasComponent]
|