@eqproject/eqp-dynamic-module 2.10.33 → 2.10.35

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.
Files changed (24) hide show
  1. package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +3 -3
  2. package/esm2020/lib/components/private/action-button-creator/action-button-creator.component.mjs +11 -4
  3. package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +4 -4
  4. package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +1 -1
  5. package/esm2020/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.mjs +36 -15
  6. package/esm2020/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.mjs +3 -3
  7. package/esm2020/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.mjs +24 -8
  8. package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +2 -2
  9. package/esm2020/lib/components/private/graphs/graph/graph.component.mjs +7 -7
  10. package/esm2020/lib/directives/dynamic-loader/dynamic-loader.directive.mjs +5 -5
  11. package/esm2020/lib/directives/speech-to-text/speech-to-text.directive.mjs +4 -4
  12. package/esm2020/lib/models/fields/attachmentField.model.mjs +1 -1
  13. package/esm2020/lib/services/utilityHelper.services.mjs +9 -9
  14. package/fesm2015/eqproject-eqp-dynamic-module.mjs +98 -54
  15. package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
  16. package/fesm2020/eqproject-eqp-dynamic-module.mjs +98 -54
  17. package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
  18. package/lib/components/private/action-button-creator/action-button-creator.component.d.ts +2 -1
  19. package/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.d.ts +6 -1
  20. package/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.d.ts +2 -0
  21. package/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.d.ts +1 -1
  22. package/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.d.ts +1 -1
  23. package/lib/models/fields/attachmentField.model.d.ts +1 -1
  24. package/package.json +1 -1
@@ -326,7 +326,7 @@ export class DynamicModuleFieldFixComponent {
326
326
  }
327
327
  }
328
328
  DynamicModuleFieldFixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicModuleFieldFixComponent, deps: [{ token: i1.MatDialog }, { token: i2.UtilityHelperService }], target: i0.ɵɵFactoryTarget.Component });
329
- DynamicModuleFieldFixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DynamicModuleFieldFixComponent, selector: "dynamic-module-field-fix", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", field: "field", form: "form", record: "record", formulaObject: "formulaObject", inConfig: "inConfig", userID: "userID", QueryEditorComponent: "QueryEditorComponent" }, outputs: { recordChange: "recordChange", out: "out", fireTrigger: "fireTrigger" }, viewQueries: [{ propertyName: "dialogInnerFormRecord", first: true, predicate: ["dialogInnerFormRecord"], descendants: true, static: true }, { propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }, { propertyName: "listInnerFormRecords", predicate: ["listInnerFormRecords"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record, forcedValues: null }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row datagetter\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"DBGetterFieldsLoaded\" [ngTemplateOutlet]=\"fieldsDBGTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n <dbgetter \r\n *ngIf=\"loadedDBGetter\"\r\n class=\"dbgetter\"\r\n [configurations]=\"configurations\"\r\n [hidden]=\"!field.InListView\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (doReload)=\"reloadDBGetter()\"\r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <action-button-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Bottone azione']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (fireTrigger)=\"onFireTrigger($event)\">\r\n </action-button-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>\r\n\r\n<ng-template #fieldsDBGTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <list-value-dbg-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-dbg-template>\r\n \r\n \r\n <!-- Non gestiti (funzionano a culo) -->\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template> \r\n \r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template> \r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template> \r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template> \r\n\r\n\r\n\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}.datagetter .col-12{position:relative}.datagetter .dbgetter{position:absolute;right:13px;top:6px}\n"], dependencies: [{ kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.TextFieldTemplateComponent, selector: "text-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i6.BooleanFieldTemplateComponent, selector: "boolean-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: i7.DateFieldTemplateComponent, selector: "date-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i8.TextareaFieldTemplateComponent, selector: "textarea-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: i9.NumericFieldTemplateComponent, selector: "numeric-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i10.ListValueFieldTemplateComponent, selector: "list-value-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i11.AttachmentFieldTemplateComponent, selector: "attachment-field-template", inputs: ["onlyImages", "field", "record", "formulaObject", "inConfig"], outputs: ["recordChange", "onAttachmentsChange"] }, { kind: "component", type: i12.ImageFieldTemplateComponent, selector: "image-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageDraw"] }, { kind: "component", type: i13.ListFormRecordComponent, selector: "list-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons", "actionButtons", "contestualizationParams"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.ImageFieldSelectorTemplateComponent, selector: "image-field-selector-template", inputs: ["record", "formulaObject", "field", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i15.LabelFieldTemplateComponent, selector: "label-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i16.ImageWithMarkersFieldTemplateComponent, selector: "image-with-markers-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageMark"] }, { kind: "component", type: i17.DbgetterComponent, selector: "dbgetter", inputs: ["configurations", "form", "field", "record", "inConfig", "DirectlyOpenTable", "QueryEditorComponent", "data"], outputs: ["out", "selectedValue", "doReload"] }, { kind: "component", type: i18.ActionButtonFieldTemplateComponent, selector: "action-button-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["fireTrigger"] }, { kind: "component", type: i19.ListValueDbgTemplateComponent, selector: "list-value-dbg-template", inputs: ["field", "record"] }] });
329
+ DynamicModuleFieldFixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DynamicModuleFieldFixComponent, selector: "dynamic-module-field-fix", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", field: "field", form: "form", record: "record", formulaObject: "formulaObject", inConfig: "inConfig", userID: "userID", QueryEditorComponent: "QueryEditorComponent" }, outputs: { recordChange: "recordChange", out: "out", fireTrigger: "fireTrigger" }, viewQueries: [{ propertyName: "dialogInnerFormRecord", first: true, predicate: ["dialogInnerFormRecord"], descendants: true, static: true }, { propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }, { propertyName: "listInnerFormRecords", predicate: ["listInnerFormRecords"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record, forcedValues: null }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row datagetter\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"DBGetterFieldsLoaded\" [ngTemplateOutlet]=\"fieldsDBGTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n <dbgetter \r\n *ngIf=\"loadedDBGetter\"\r\n class=\"dbgetter\"\r\n [configurations]=\"configurations\"\r\n [hidden]=\"!field.InListView\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (doReload)=\"reloadDBGetter()\"\r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <action-button-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Bottone azione']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (fireTrigger)=\"onFireTrigger($event)\">\r\n </action-button-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>\r\n\r\n<ng-template #fieldsDBGTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <list-value-dbg-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-dbg-template>\r\n \r\n \r\n <!-- Non gestiti (funzionano a culo) -->\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template> \r\n \r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template> \r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template> \r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template> \r\n\r\n\r\n\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}.datagetter .col-12{position:relative}.datagetter .dbgetter{position:absolute;right:13px;top:6px}\n"], dependencies: [{ kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.TextFieldTemplateComponent, selector: "text-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i6.BooleanFieldTemplateComponent, selector: "boolean-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: i7.DateFieldTemplateComponent, selector: "date-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i8.TextareaFieldTemplateComponent, selector: "textarea-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: i9.NumericFieldTemplateComponent, selector: "numeric-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i10.ListValueFieldTemplateComponent, selector: "list-value-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i11.AttachmentFieldTemplateComponent, selector: "attachment-field-template", inputs: ["onlyImages", "field", "record", "formulaObject", "inConfig"], outputs: ["recordChange", "onAttachmentsChange"] }, { kind: "component", type: i12.ImageFieldTemplateComponent, selector: "image-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageDraw"] }, { kind: "component", type: i13.ListFormRecordComponent, selector: "list-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons", "actionButtons", "contestualizationParams"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.ImageFieldSelectorTemplateComponent, selector: "image-field-selector-template", inputs: ["record", "formulaObject", "field", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i15.LabelFieldTemplateComponent, selector: "label-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i16.ImageWithMarkersFieldTemplateComponent, selector: "image-with-markers-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageMark"] }, { kind: "component", type: i17.DbgetterComponent, selector: "dbgetter", inputs: ["configurations", "form", "field", "record", "inConfig", "DirectlyOpenTable", "QueryEditorComponent", "data"], outputs: ["out", "selectedValue", "doReload"] }, { kind: "component", type: i18.ActionButtonFieldTemplateComponent, selector: "action-button-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["fireTrigger", "recordChange"] }, { kind: "component", type: i19.ListValueDbgTemplateComponent, selector: "list-value-dbg-template", inputs: ["field", "record"] }] });
330
330
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicModuleFieldFixComponent, decorators: [{
331
331
  type: Component,
332
332
  args: [{ selector: 'dynamic-module-field-fix', template: "<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record, forcedValues: null }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row datagetter\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"DBGetterFieldsLoaded\" [ngTemplateOutlet]=\"fieldsDBGTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n <dbgetter \r\n *ngIf=\"loadedDBGetter\"\r\n class=\"dbgetter\"\r\n [configurations]=\"configurations\"\r\n [hidden]=\"!field.InListView\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (doReload)=\"reloadDBGetter()\"\r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <action-button-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Bottone azione']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (fireTrigger)=\"onFireTrigger($event)\">\r\n </action-button-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>\r\n\r\n<ng-template #fieldsDBGTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <list-value-dbg-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-dbg-template>\r\n \r\n \r\n <!-- Non gestiti (funzionano a culo) -->\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template> \r\n \r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template> \r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template> \r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template> \r\n\r\n\r\n\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}.datagetter .col-12{position:relative}.datagetter .dbgetter{position:absolute;right:13px;top:6px}\n"] }]
@@ -10,6 +10,7 @@ export class ActionButtonFieldTemplateComponent {
10
10
  this.formulaObject = {};
11
11
  this.inConfig = false;
12
12
  this.fireTrigger = new EventEmitter();
13
+ this.recordChange = new EventEmitter();
13
14
  }
14
15
  ngOnInit() {
15
16
  this.updateField();
@@ -31,19 +32,26 @@ export class ActionButtonFieldTemplateComponent {
31
32
  GlobalService.debugLog("btn InListView - " + this.field.InListView);
32
33
  }
33
34
  generateAction(actionButton) {
34
- var fireTrigger = new FireTrigger();
35
- fireTrigger.trigger = new Trigger();
36
- fireTrigger.trigger.CID = actionButton.ButtonCode;
37
- fireTrigger.trigger.conditions = null;
38
- fireTrigger.trigger.description = actionButton.Label;
39
- fireTrigger.trigger.execution = actionButton.execution;
40
- fireTrigger.trigger.formulas = actionButton.formulas;
41
- fireTrigger.form = null; // Verrà impostato a livello superiore
42
- fireTrigger.formulas = actionButton.formulas;
43
- fireTrigger.record = this.record;
44
- fireTrigger.userPatient = null; // Verrà impostato a livello superiore
45
- fireTrigger.userMedicalExamination = null;
46
- this.evaluateFormulasAndFireTrigger(fireTrigger);
35
+ if (actionButton.execution == 'execute_formula') {
36
+ // caso esecuzione semplice
37
+ let res = UtilityHelperService.EvaluateFieldFormula(actionButton.formulas[0].value, this.record, this.formulaObject);
38
+ this.onRecordValueChange();
39
+ }
40
+ else {
41
+ var fireTrigger = new FireTrigger();
42
+ fireTrigger.trigger = new Trigger();
43
+ fireTrigger.trigger.CID = actionButton.ButtonCode;
44
+ fireTrigger.trigger.conditions = null;
45
+ fireTrigger.trigger.description = actionButton.Label;
46
+ fireTrigger.trigger.execution = actionButton.execution;
47
+ fireTrigger.trigger.formulas = actionButton.formulas;
48
+ fireTrigger.form = null; // Verrà impostato a livello superiore
49
+ fireTrigger.formulas = actionButton.formulas;
50
+ fireTrigger.record = this.record;
51
+ fireTrigger.userPatient = null; // Verrà impostato a livello superiore
52
+ fireTrigger.userMedicalExamination = null;
53
+ this.evaluateFormulasAndFireTrigger(fireTrigger);
54
+ }
47
55
  }
48
56
  evaluateFormulasAndFireTrigger(triggerToFire) {
49
57
  const formulas = JSON.parse(JSON.stringify(triggerToFire.formulas));
@@ -79,9 +87,20 @@ export class ActionButtonFieldTemplateComponent {
79
87
  triggerToFire.formulas = evaluatedFormulas;
80
88
  this.fireTrigger.emit(triggerToFire);
81
89
  }
90
+ /**
91
+ * Metodo per emettere l'evento che il valore del record è cambiato.
92
+ */
93
+ onRecordValueChange() {
94
+ if (!this.field.Formula) {
95
+ this.recordChange.emit(this.record);
96
+ }
97
+ if (!this.field.VisibleIf) {
98
+ this.recordChange.emit(this.record);
99
+ }
100
+ }
82
101
  }
83
102
  ActionButtonFieldTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ActionButtonFieldTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
84
- ActionButtonFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ActionButtonFieldTemplateComponent, selector: "action-button-field-template", inputs: { field: "field", record: "record", formulaObject: "formulaObject", inConfig: "inConfig" }, outputs: { fireTrigger: "fireTrigger" }, ngImport: i0, template: "<button [ngStyle]=\"FieldstyleObj\" class=\"btn btn-primary\" (click)=\"generateAction(field)\">\r\n <mat-icon *ngIf=\"field.Icon\">{{field.Icon}}</mat-icon> {{field.ButtonLabel}}\r\n</button>", styles: [""], dependencies: [{ kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
103
+ ActionButtonFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ActionButtonFieldTemplateComponent, selector: "action-button-field-template", inputs: { field: "field", record: "record", formulaObject: "formulaObject", inConfig: "inConfig" }, outputs: { fireTrigger: "fireTrigger", recordChange: "recordChange" }, ngImport: i0, template: "<button [ngStyle]=\"FieldstyleObj\" class=\"btn btn-primary\" (click)=\"generateAction(field)\">\r\n <mat-icon *ngIf=\"field.Icon\">{{field.Icon}}</mat-icon> {{field.ButtonLabel}}\r\n</button>", styles: [""], dependencies: [{ kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
85
104
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ActionButtonFieldTemplateComponent, decorators: [{
86
105
  type: Component,
87
106
  args: [{ selector: 'action-button-field-template', template: "<button [ngStyle]=\"FieldstyleObj\" class=\"btn btn-primary\" (click)=\"generateAction(field)\">\r\n <mat-icon *ngIf=\"field.Icon\">{{field.Icon}}</mat-icon> {{field.ButtonLabel}}\r\n</button>" }]
@@ -95,5 +114,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
95
114
  type: Input
96
115
  }], fireTrigger: [{
97
116
  type: Output
117
+ }], recordChange: [{
118
+ type: Output
98
119
  }] } });
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUvYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUvYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFakcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7O0FBT3BFLE1BQU0sT0FBTyxrQ0FBa0M7SUFZN0M7UUFQUyxrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUN4QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRXpCLGdCQUFXLEdBQThCLElBQUksWUFBWSxFQUFlLENBQUM7SUFJbkUsQ0FBQztJQUVqQixRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsVUFB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QUMsQ0FBQztJQUN2QyxDQUFDOztnSUE1R1Usa0NBQWtDO29IQUFsQyxrQ0FBa0MsaU5DWi9DLHFNQUVTOzRGRFVJLGtDQUFrQztrQkFMOUMsU0FBUzsrQkFDRSw4QkFBOEI7MEVBTy9CLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgRmlyZVRyaWdnZXIsIFRyaWdnZXIsIFRyaWdnZXJQcm9wZXJ0eVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3RyaWdnZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBBY3Rpb25CdXR0b25GaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvYWN0aW9uQnV0dG9uLm1vZGVsJztcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uRmllbGRUZW1wbGF0ZUNvbXBvbmVudCB7XHJcblxyXG4gIC8vdmFyaWFiaWxpIGVzdGVybmUgcGVyIGwnaW5wdXQgZGVpIGNhbXBpXHJcbiAgQElucHV0KCkgZmllbGQ6IEFjdGlvbkJ1dHRvbkZpZWxkO1xyXG4gIEBJbnB1dCgpIHJlY29yZDogUmVjb3JkO1xyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGluQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBmaXJlVHJpZ2dlcjogRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+KCk7XHJcblxyXG4gIEZpZWxkc3R5bGVPYmo6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB0aGlzLmluaXRTdHlsZXMoKTtcclxuICB9XHJcbiAgaW5pdFN0eWxlcygpIHtcclxuICAgIC8vRnVuemlvbmUgcGVyIHBhcnNhcmUgaWwgY2FtcG8gc3R5bGVjc3MgZGVsbCdvZ2dldHRvIGZpZWxkIGVkIGFwcGxpY2FybG8gYWxsJ2h0bWxcclxuICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLkZpZWxkc3R5bGVPYmogPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkZWwgY2FtcG8gcXVhbmRvIHF1ZXN0byDDqCByYXBwcmVzZW50YXRvIGRhIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuVmlzaWJsZUlmKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuSW5MaXN0VmlldyA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuVmlzaWJsZUlmLCB0aGlzLnJlY29yZCwgdGhpcy5mb3JtdWxhT2JqZWN0KTtcclxuICAgIH1cclxuICAgIHRoaXMuZmllbGQuSW5MaXN0VmlldyA9IHRoaXMuZmllbGQuSW5MaXN0VmlldyA/IHRydWUgOiBmYWxzZTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJidG4gSW5MaXN0VmlldyAtIFwiICsgdGhpcy5maWVsZC5Jbkxpc3RWaWV3KVxyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVBY3Rpb24oYWN0aW9uQnV0dG9uOiBBY3Rpb25CdXR0b25GaWVsZCkge1xyXG4gICAgdmFyIGZpcmVUcmlnZ2VyOiBGaXJlVHJpZ2dlciA9IG5ldyBGaXJlVHJpZ2dlcigpO1xyXG5cclxuICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIgPSBuZXcgVHJpZ2dlcigpO1xyXG4gICAgZmlyZVRyaWdnZXIudHJpZ2dlci5DSUQgPSBhY3Rpb25CdXR0b24uQnV0dG9uQ29kZTtcclxuICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIuY29uZGl0aW9ucyA9IG51bGw7XHJcbiAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmRlc2NyaXB0aW9uID0gYWN0aW9uQnV0dG9uLkxhYmVsO1xyXG4gICAgZmlyZVRyaWdnZXIudHJpZ2dlci5leGVjdXRpb24gPSBhY3Rpb25CdXR0b24uZXhlY3V0aW9uO1xyXG4gICAgZmlyZVRyaWdnZXIudHJpZ2dlci5mb3JtdWxhcyA9IGFjdGlvbkJ1dHRvbi5mb3JtdWxhcztcclxuXHJcbiAgICBmaXJlVHJpZ2dlci5mb3JtID0gbnVsbDsgLy8gVmVycsOgIGltcG9zdGF0byBhIGxpdmVsbG8gc3VwZXJpb3JlXHJcbiAgICBmaXJlVHJpZ2dlci5mb3JtdWxhcyA9IGFjdGlvbkJ1dHRvbi5mb3JtdWxhcztcclxuICAgIGZpcmVUcmlnZ2VyLnJlY29yZCA9IHRoaXMucmVjb3JkO1xyXG4gICAgZmlyZVRyaWdnZXIudXNlclBhdGllbnQgPSBudWxsOyAgLy8gVmVycsOgIGltcG9zdGF0byBhIGxpdmVsbG8gc3VwZXJpb3JlXHJcbiAgICBmaXJlVHJpZ2dlci51c2VyTWVkaWNhbEV4YW1pbmF0aW9uID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLmV2YWx1YXRlRm9ybXVsYXNBbmRGaXJlVHJpZ2dlcihmaXJlVHJpZ2dlcik7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZUZvcm11bGFzQW5kRmlyZVRyaWdnZXIodHJpZ2dlclRvRmlyZTogRmlyZVRyaWdnZXIpIHtcclxuXHJcbiAgICBjb25zdCBmb3JtdWxhcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodHJpZ2dlclRvRmlyZS5mb3JtdWxhcykpO1xyXG4gICAgY29uc3QgZXZhbHVhdGVkRm9ybXVsYXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTsgLy8gT2dnZXR0byBhc3NvY2lhdGl2b1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gZXZhbHVhdGUgZm9ybXVsYXMgXCIsIGZvcm11bGFzKTtcclxuICAgIGlmIChmb3JtdWxhcyAmJiBPYmplY3Qua2V5cyhmb3JtdWxhcykubGVuZ3RoID4gMCkge1xyXG4gICAgICBPYmplY3Qua2V5cyhmb3JtdWxhcykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZm9ybXVsYU9iaiA9IGZvcm11bGFzW2tleV07XHJcbiAgICAgICAgY29uc3QgZm9ybXVsYSA9IGZvcm11bGFPYmoudmFsdWU7XHJcbiAgICAgICAgbGV0IHRlbXA7XHJcblxyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gZm9ybXVsYXNba2V5XSBcIiwgZm9ybXVsYU9iaik7XHJcblxyXG4gICAgICAgIGlmIChmb3JtdWxhT2JqLnR5cGUgPT0gVHJpZ2dlclByb3BlcnR5VHlwZUVudW0uRE1NT0RVTEUpIHsgIC8vIGFzc2Vnbm8gaWQvY29kZSBkZWwgbW9kdWxvIHNlbGV6aW9uYXRvXHJcbiAgICAgICAgICB0ZW1wID0gZm9ybXVsYTtcclxuICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gYXNzaWduZWQgRE1NT0RVTEUgLSBpZC9jb2RlIFwiLCBmb3JtdWxhKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtdWxhT2JqLnR5cGUgPT0gVHJpZ2dlclByb3BlcnR5VHlwZUVudW0uRFJPUERPV05fTElTVCkge1xyXG4gICAgICAgICAgLy8gc2UgbGEgcHJvcHJpZXTDoCBub24gZXNpc3RlIMOoIGFzc2VnbmF0byB2YWx1ZSAtIG1vZGlmaWNhIGRpIHVuYSBjb25maWd1cmF6aW9uZSBkaWNoaWFyYXRhIGluIHByZWNlZGVuemEgY29tZSBzdHJpbmdcclxuXHJcbiAgICAgICAgICB0ZW1wID1cclxuICAgICAgICAgICAgZm9ybXVsYU9iaj8uc2VsZWN0ZWRBbGxvd2VkVmFsdWU/LmtleSA/IGZvcm11bGFPYmouc2VsZWN0ZWRBbGxvd2VkVmFsdWUua2V5XHJcbiAgICAgICAgICAgICAgOiAoXHJcbiAgICAgICAgICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYShcclxuICAgICAgICAgICAgICAgICAgZm9ybXVsYSxcclxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvcmQsXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybXVsYU9iamVjdFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG5cclxuICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gYXNzaWduZWQgRFJPUERPV05fTElTVC0gIHNlbGVjdGVkQWxsb3dlZFZhbHVlIFwiLCBmb3JtdWxhT2JqLnNlbGVjdGVkQWxsb3dlZFZhbHVlKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIHBhc3NvIGFsbCdldmFsIHF1YW5kbyDDqCBzdHJpbmdhIGUgYXNzZWdubyBpbCB2YWxvcmUgY2FsY29sYXRvXHJcbiAgICAgICAgICB0ZW1wID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoXHJcbiAgICAgICAgICAgIGZvcm11bGEsXHJcbiAgICAgICAgICAgIHRoaXMucmVjb3JkLFxyXG4gICAgICAgICAgICB0aGlzLmZvcm11bGFPYmplY3RcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGFzc2lnbmVkIC0gLnZhbHVlICBmb3JtdWxhIFwiLCBmb3JtdWxhKTtcclxuICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gYXNzaWduZWQgPiB2YWx1ZSAgZm9ybXVsYU9iai50eXBlIFwiLCBmb3JtdWxhT2JqKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBldmFsdWF0ZWRGb3JtdWxhc1tmb3JtdWxhT2JqLmtleV0gPSB0ZW1wO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGFzc2lnbmVkLSAgZXZhbHVhdGVkRm9ybXVsYXMgXCIsIGV2YWx1YXRlZEZvcm11bGFzKTtcclxuICAgIHRyaWdnZXJUb0ZpcmUuZm9ybXVsYXMgPSBldmFsdWF0ZWRGb3JtdWxhcztcclxuICAgIHRoaXMuZmlyZVRyaWdnZXIuZW1pdCh0cmlnZ2VyVG9GaXJlKTtcclxuICB9XHJcblxyXG5cclxuXHJcbn1cclxuIiwiPGJ1dHRvbiBbbmdTdHlsZV09XCJGaWVsZHN0eWxlT2JqXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiZ2VuZXJhdGVBY3Rpb24oZmllbGQpXCI+XHJcbiAgICA8bWF0LWljb24gKm5nSWY9XCJmaWVsZC5JY29uXCI+e3tmaWVsZC5JY29ufX08L21hdC1pY29uPiB7e2ZpZWxkLkJ1dHRvbkxhYmVsfX1cclxuPC9idXR0b24+Il19
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUvYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUvYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFakcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7O0FBT3BFLE1BQU0sT0FBTyxrQ0FBa0M7SUFhN0M7UUFSUyxrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUN4QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRXpCLGdCQUFXLEdBQThCLElBQUksWUFBWSxFQUFlLENBQUM7UUFDekUsaUJBQVksR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUkxRCxDQUFDO0lBRWpCLFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxD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QUFDO29CQUMvRSxhQUFhLENBQUMsUUFBUSxDQUFDLG9EQUFvRCxFQUFFLFVBQVUsQ0FBQyxDQUFDO2lCQUUxRjtnQkFFRCxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzNDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxhQUFhLENBQUMsUUFBUSxDQUFDLCtDQUErQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDM0YsYUFBYSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBR0Q7O09BRUc7SUFDSCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDOztnSUFwSVUsa0NBQWtDO29IQUFsQyxrQ0FBa0MsK09DWi9DLHFNQUVTOzRGRFVJLGtDQUFrQztrQkFMOUMsU0FBUzsrQkFDRSw4QkFBOEI7MEVBTy9CLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBGaXJlVHJpZ2dlciwgVHJpZ2dlciwgVHJpZ2dlclByb3BlcnR5VHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvdHJpZ2dlci5tb2RlbCc7XHJcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbkZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9hY3Rpb25CdXR0b24ubW9kZWwnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhY3Rpb24tYnV0dG9uLWZpZWxkLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25CdXR0b25GaWVsZFRlbXBsYXRlQ29tcG9uZW50IHtcclxuXHJcbiAgLy92YXJpYWJpbGkgZXN0ZXJuZSBwZXIgbCdpbnB1dCBkZWkgY2FtcGlcclxuICBASW5wdXQoKSBmaWVsZDogQWN0aW9uQnV0dG9uRmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQElucHV0KCkgZm9ybXVsYU9iamVjdDogYW55ID0ge307XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIGZpcmVUcmlnZ2VyOiBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4oKTtcclxuICBAT3V0cHV0KCkgcmVjb3JkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG5cclxuICBGaWVsZHN0eWxlT2JqOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgdGhpcy5pbml0U3R5bGVzKCk7XHJcbiAgfVxyXG4gIGluaXRTdHlsZXMoKSB7XHJcbiAgICAvL0Z1bnppb25lIHBlciBwYXJzYXJlIGlsIGNhbXBvIHN0eWxlY3NzIGRlbGwnb2dnZXR0byBmaWVsZCBlZCBhcHBsaWNhcmxvIGFsbCdodG1sXHJcbiAgICBpZiAodGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IG51bGwgfHwgdGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IHVuZGVmaW5lZClcclxuICAgICAgdGhpcy5GaWVsZHN0eWxlT2JqID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuaW5pdFN0eWxlcyh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZGVsIGNhbXBvIHF1YW5kbyBxdWVzdG8gw6ggcmFwcHJlc2VudGF0byBkYSB1bmEgZm9ybXVsYS5cclxuICAgKi9cclxuICB1cGRhdGVGaWVsZCgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLlZpc2libGVJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLlZpc2libGVJZiwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiYnRuIEluTGlzdFZpZXcgLSBcIiArIHRoaXMuZmllbGQuSW5MaXN0VmlldylcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlQWN0aW9uKGFjdGlvbkJ1dHRvbjogQWN0aW9uQnV0dG9uRmllbGQpIHtcclxuICAgIGlmIChhY3Rpb25CdXR0b24uZXhlY3V0aW9uID09ICdleGVjdXRlX2Zvcm11bGEnKSB7XHJcbiAgICAgIC8vIGNhc28gZXNlY3V6aW9uZSBzZW1wbGljZVxyXG4gICAgICBsZXQgcmVzID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoXHJcbiAgICAgICAgYWN0aW9uQnV0dG9uLmZvcm11bGFzWzBdLnZhbHVlLFxyXG4gICAgICAgIHRoaXMucmVjb3JkLFxyXG4gICAgICAgIHRoaXMuZm9ybXVsYU9iamVjdFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLm9uUmVjb3JkVmFsdWVDaGFuZ2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhciBmaXJlVHJpZ2dlcjogRmlyZVRyaWdnZXIgPSBuZXcgRmlyZVRyaWdnZXIoKTtcclxuXHJcbiAgICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIgPSBuZXcgVHJpZ2dlcigpO1xyXG4gICAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLkNJRCA9IGFjdGlvbkJ1dHRvbi5CdXR0b25Db2RlO1xyXG4gICAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmNvbmRpdGlvbnMgPSBudWxsO1xyXG4gICAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmRlc2NyaXB0aW9uID0gYWN0aW9uQnV0dG9uLkxhYmVsO1xyXG4gICAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmV4ZWN1dGlvbiA9IGFjdGlvbkJ1dHRvbi5leGVjdXRpb247XHJcbiAgICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIuZm9ybXVsYXMgPSBhY3Rpb25CdXR0b24uZm9ybXVsYXM7XHJcblxyXG4gICAgICBmaXJlVHJpZ2dlci5mb3JtID0gbnVsbDsgLy8gVmVycsOgIGltcG9zdGF0byBhIGxpdmVsbG8gc3VwZXJpb3JlXHJcbiAgICAgIGZpcmVUcmlnZ2VyLmZvcm11bGFzID0gYWN0aW9uQnV0dG9uLmZvcm11bGFzO1xyXG4gICAgICBmaXJlVHJpZ2dlci5yZWNvcmQgPSB0aGlzLnJlY29yZDtcclxuICAgICAgZmlyZVRyaWdnZXIudXNlclBhdGllbnQgPSBudWxsOyAgLy8gVmVycsOgIGltcG9zdGF0byBhIGxpdmVsbG8gc3VwZXJpb3JlXHJcbiAgICAgIGZpcmVUcmlnZ2VyLnVzZXJNZWRpY2FsRXhhbWluYXRpb24gPSBudWxsO1xyXG5cclxuICAgICAgdGhpcy5ldmFsdWF0ZUZvcm11bGFzQW5kRmlyZVRyaWdnZXIoZmlyZVRyaWdnZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVGb3JtdWxhc0FuZEZpcmVUcmlnZ2VyKHRyaWdnZXJUb0ZpcmU6IEZpcmVUcmlnZ2VyKSB7XHJcblxyXG4gICAgY29uc3QgZm9ybXVsYXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRyaWdnZXJUb0ZpcmUuZm9ybXVsYXMpKTtcclxuICAgIGNvbnN0IGV2YWx1YXRlZEZvcm11bGFzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307IC8vIE9nZ2V0dG8gYXNzb2NpYXRpdm9cclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGV2YWx1YXRlIGZvcm11bGFzIFwiLCBmb3JtdWxhcyk7XHJcbiAgICBpZiAoZm9ybXVsYXMgJiYgT2JqZWN0LmtleXMoZm9ybXVsYXMpLmxlbmd0aCA+IDApIHtcclxuICAgICAgT2JqZWN0LmtleXMoZm9ybXVsYXMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZvcm11bGFPYmogPSBmb3JtdWxhc1trZXldO1xyXG4gICAgICAgIGNvbnN0IGZvcm11bGEgPSBmb3JtdWxhT2JqLnZhbHVlO1xyXG4gICAgICAgIGxldCB0ZW1wO1xyXG5cclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGZvcm11bGFzW2tleV0gXCIsIGZvcm11bGFPYmopO1xyXG5cclxuICAgICAgICBpZiAoZm9ybXVsYU9iai50eXBlID09IFRyaWdnZXJQcm9wZXJ0eVR5cGVFbnVtLkRNTU9EVUxFKSB7ICAvLyBhc3NlZ25vIGlkL2NvZGUgZGVsIG1vZHVsbyBzZWxlemlvbmF0b1xyXG4gICAgICAgICAgdGVtcCA9IGZvcm11bGE7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGFzc2lnbmVkIERNTU9EVUxFIC0gaWQvY29kZSBcIiwgZm9ybXVsYSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybXVsYU9iai50eXBlID09IFRyaWdnZXJQcm9wZXJ0eVR5cGVFbnVtLkRST1BET1dOX0xJU1QpIHtcclxuICAgICAgICAgIC8vIHNlIGxhIHByb3ByaWV0w6Agbm9uIGVzaXN0ZSDDqCBhc3NlZ25hdG8gdmFsdWUgLSBtb2RpZmljYSBkaSB1bmEgY29uZmlndXJhemlvbmUgZGljaGlhcmF0YSBpbiBwcmVjZWRlbnphIGNvbWUgc3RyaW5nXHJcblxyXG4gICAgICAgICAgdGVtcCA9XHJcbiAgICAgICAgICAgIGZvcm11bGFPYmo/LnNlbGVjdGVkQWxsb3dlZFZhbHVlPy5rZXkgPyBmb3JtdWxhT2JqLnNlbGVjdGVkQWxsb3dlZFZhbHVlLmtleVxyXG4gICAgICAgICAgICAgIDogKFxyXG4gICAgICAgICAgICAgICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoXHJcbiAgICAgICAgICAgICAgICAgIGZvcm11bGEsXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkLFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZvcm11bGFPYmplY3RcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICApO1xyXG5cclxuXHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGFzc2lnbmVkIERST1BET1dOX0xJU1QtICBzZWxlY3RlZEFsbG93ZWRWYWx1ZSBcIiwgZm9ybXVsYU9iai5zZWxlY3RlZEFsbG93ZWRWYWx1ZSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBwYXNzbyBhbGwnZXZhbCBxdWFuZG8gw6ggc3RyaW5nYSBlIGFzc2Vnbm8gaWwgdmFsb3JlIGNhbGNvbGF0b1xyXG4gICAgICAgICAgdGVtcCA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKFxyXG4gICAgICAgICAgICBmb3JtdWxhLFxyXG4gICAgICAgICAgICB0aGlzLnJlY29yZCxcclxuICAgICAgICAgICAgdGhpcy5mb3JtdWxhT2JqZWN0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNoZWNrVHJpZ2dlcnMgLSBhc3NpZ25lZCAtIC52YWx1ZSAgZm9ybXVsYSBcIiwgZm9ybXVsYSk7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGFzc2lnbmVkID4gdmFsdWUgIGZvcm11bGFPYmoudHlwZSBcIiwgZm9ybXVsYU9iaik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXZhbHVhdGVkRm9ybXVsYXNbZm9ybXVsYU9iai5rZXldID0gdGVtcDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNoZWNrVHJpZ2dlcnMgLSBhc3NpZ25lZC0gIGV2YWx1YXRlZEZvcm11bGFzIFwiLCBldmFsdWF0ZWRGb3JtdWxhcyk7XHJcbiAgICB0cmlnZ2VyVG9GaXJlLmZvcm11bGFzID0gZXZhbHVhdGVkRm9ybXVsYXM7XHJcbiAgICB0aGlzLmZpcmVUcmlnZ2VyLmVtaXQodHJpZ2dlclRvRmlyZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBlbWV0dGVyZSBsJ2V2ZW50byBjaGUgaWwgdmFsb3JlIGRlbCByZWNvcmQgw6ggY2FtYmlhdG8uXHJcbiAgICovXHJcbiAgb25SZWNvcmRWYWx1ZUNoYW5nZSgpIHtcclxuICAgIGlmICghdGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmZpZWxkLlZpc2libGVJZikge1xyXG4gICAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxidXR0b24gW25nU3R5bGVdPVwiRmllbGRzdHlsZU9ialwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImdlbmVyYXRlQWN0aW9uKGZpZWxkKVwiPlxyXG4gICAgPG1hdC1pY29uICpuZ0lmPVwiZmllbGQuSWNvblwiPnt7ZmllbGQuSWNvbn19PC9tYXQtaWNvbj4ge3tmaWVsZC5CdXR0b25MYWJlbH19XHJcbjwvYnV0dG9uPiJdfQ==
@@ -116,10 +116,10 @@ export class AttachmentFieldTemplateComponent {
116
116
  }
117
117
  }
118
118
  AttachmentFieldTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AttachmentFieldTemplateComponent, deps: [{ token: i1.UtilityHelperService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
119
- AttachmentFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AttachmentFieldTemplateComponent, selector: "attachment-field-template", inputs: { onlyImages: "onlyImages", field: "field", record: "record", formulaObject: "formulaObject", inConfig: "inConfig" }, outputs: { recordChange: "recordChange", onAttachmentsChange: "onAttachmentsChange" }, viewQueries: [{ propertyName: "eqpAttachments", first: true, predicate: ["eqpAttachments"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<p *ngIf=\"!field.IsMultiAttach\" class=\"mb-2\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n</p>\r\n<div class=\"row\" *ngIf=\"!field.IsMultiAttach && record[field.Name] && record[field.Name][0]\">\r\n <!-- <div class=\"mt-2\" *ngFor=\"let metadata of field.MetadataFields\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(metadata)\">\r\n <dynamic-module-field-fix [field]=\"metadata\" [record]=\"record[field.Name][0]\"\r\n (recordChange)=\"updateMetadataValidity()\">\r\n </dynamic-module-field-fix>\r\n </div> -->\r\n</div>\r\n\r\n<eqp-attachments [attachmentsList]=\"record[field.Name]\" [showMatCard]=\"true\" [allowOnlyImages]=\"onlyImages\"\r\n [isDisabled]=\"field.FormFormGroup.disabled\" [showInlinePreview]=\"true\" [multipleAttachment]=\"field.IsMultiAttach\"\r\n [disableAction]=\"field.FormFormGroup.disabled\" [acceptedFileTypes]=\"field.AllowedExtensions\" [showHeader]=\"true\"\r\n [headerTitle]=\"field.Description + (field.Required ? ' *' : '')\" (localEditedAttachments)=\"catchAttachmentList($event)\"\r\n #eqpAttachments>\r\n</eqp-attachments>\r\n\r\n<!-- TEMPLATE PER VISUALIZZARE LA COLONNA DELLA SEZIONE NELLA TABELLA DEI FIELDS -->\r\n<!-- <ng-template #metadataColumnTemplate let-row=\"row\" let-col=\"col\">\r\n <dynamic-module-field-fix [field]=\"getFieldFromMetadata(col, row)\" [record]=\"row\"\r\n (recordChange)=\"updateMetadataValidity()\">\r\n </dynamic-module-field-fix>\r\n</ng-template> -->", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.EqpAttachmentsComponent, selector: "eqp-attachments", inputs: ["disableAction", "showHeader", "headerTitle", "attachmentsList", "showMatCard", "multipleAttachment", "loadMultipleFiles", "attachmentsColumns", "emptyTableMessage", "allowOnlyImages", "acceptedFileTypes", "isDisabled", "showInlinePreview", "getAttachmentEndpoint", "productionBaseUrl", "compressionOptions", "allowedTypes", "isEqpTableMultiLanguage", "tablePaginatorVisible", "isTableSearcheable", "tablePaginatorSize", "separatedUploadButtons", "showPreview", "singleAttachmentDragAndDrop", "cropOptions", "cropDialogClass", "downloadTooltipPosition", "openLinkLabel", "addButtonLabel", "downloadLabel", "deleteLabel", "fileNameLabel", "previewLabel", "uploadFileLabel", "confirmLabel", "abortLabel", "saveLabel", "exitLabel", "uploadWithDropboxLabel", "cropLabel", "eqpTableSearchText", "deleteDialogTitle", "deleteDialogMessage", "noImageSelectedErrorMessage", "wrongTypeSelectedErrorMessage", "videoPreviewErrorMessage", "flipHorinzontalLabel", "flipVerticalLabel", "rotateRightLabel", "rotateLeftLabel"], outputs: ["localEditedAttachments", "abortAddAttachment", "downloadAttachment", "onDeleteAttachment"] }] });
119
+ AttachmentFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AttachmentFieldTemplateComponent, selector: "attachment-field-template", inputs: { onlyImages: "onlyImages", field: "field", record: "record", formulaObject: "formulaObject", inConfig: "inConfig" }, outputs: { recordChange: "recordChange", onAttachmentsChange: "onAttachmentsChange" }, viewQueries: [{ propertyName: "eqpAttachments", first: true, predicate: ["eqpAttachments"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<p *ngIf=\"!field.isMultiAttach\" class=\"mb-2\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n</p>\r\n<div class=\"row\" *ngIf=\"!field.isMultiAttach && record[field.Name] && record[field.Name][0]\">\r\n <!-- <div class=\"mt-2\" *ngFor=\"let metadata of field.MetadataFields\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(metadata)\">\r\n <dynamic-module-field-fix [field]=\"metadata\" [record]=\"record[field.Name][0]\"\r\n (recordChange)=\"updateMetadataValidity()\">\r\n </dynamic-module-field-fix>\r\n </div> -->\r\n</div>\r\n\r\n\r\n<eqp-attachments [attachmentsList]=\"record[field.Name]\" [showMatCard]=\"true\" [allowOnlyImages]=\"onlyImages\"\r\n [isDisabled]=\"field.FormFormGroup.disabled\" [showInlinePreview]=\"true\" [multipleAttachment]=\"field.isMultiAttach\"\r\n [disableAction]=\"field.FormFormGroup.disabled\" [acceptedFileTypes]=\"field.AllowedExtensions\" [showHeader]=\"true\"\r\n [headerTitle]=\"field.Description + (field.Required ? ' *' : '')\" (localEditedAttachments)=\"catchAttachmentList($event)\"\r\n #eqpAttachments>\r\n</eqp-attachments>\r\n\r\n<!-- TEMPLATE PER VISUALIZZARE LA COLONNA DELLA SEZIONE NELLA TABELLA DEI FIELDS -->\r\n<!-- <ng-template #metadataColumnTemplate let-row=\"row\" let-col=\"col\">\r\n <dynamic-module-field-fix [field]=\"getFieldFromMetadata(col, row)\" [record]=\"row\"\r\n (recordChange)=\"updateMetadataValidity()\">\r\n </dynamic-module-field-fix>\r\n</ng-template> -->", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.EqpAttachmentsComponent, selector: "eqp-attachments", inputs: ["disableAction", "showHeader", "headerTitle", "attachmentsList", "showMatCard", "multipleAttachment", "loadMultipleFiles", "attachmentsColumns", "emptyTableMessage", "allowOnlyImages", "acceptedFileTypes", "isDisabled", "showInlinePreview", "getAttachmentEndpoint", "productionBaseUrl", "compressionOptions", "allowedTypes", "isEqpTableMultiLanguage", "tablePaginatorVisible", "isTableSearcheable", "tablePaginatorSize", "separatedUploadButtons", "showPreview", "singleAttachmentDragAndDrop", "cropOptions", "cropDialogClass", "downloadTooltipPosition", "openLinkLabel", "addButtonLabel", "downloadLabel", "deleteLabel", "fileNameLabel", "previewLabel", "uploadFileLabel", "confirmLabel", "abortLabel", "saveLabel", "exitLabel", "uploadWithDropboxLabel", "cropLabel", "eqpTableSearchText", "deleteDialogTitle", "deleteDialogMessage", "noImageSelectedErrorMessage", "wrongTypeSelectedErrorMessage", "videoPreviewErrorMessage", "flipHorinzontalLabel", "flipVerticalLabel", "rotateRightLabel", "rotateLeftLabel"], outputs: ["localEditedAttachments", "abortAddAttachment", "downloadAttachment", "onDeleteAttachment"] }] });
120
120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AttachmentFieldTemplateComponent, decorators: [{
121
121
  type: Component,
122
- args: [{ selector: 'attachment-field-template', template: "<p *ngIf=\"!field.IsMultiAttach\" class=\"mb-2\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n</p>\r\n<div class=\"row\" *ngIf=\"!field.IsMultiAttach && record[field.Name] && record[field.Name][0]\">\r\n <!-- <div class=\"mt-2\" *ngFor=\"let metadata of field.MetadataFields\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(metadata)\">\r\n <dynamic-module-field-fix [field]=\"metadata\" [record]=\"record[field.Name][0]\"\r\n (recordChange)=\"updateMetadataValidity()\">\r\n </dynamic-module-field-fix>\r\n </div> -->\r\n</div>\r\n\r\n<eqp-attachments [attachmentsList]=\"record[field.Name]\" [showMatCard]=\"true\" [allowOnlyImages]=\"onlyImages\"\r\n [isDisabled]=\"field.FormFormGroup.disabled\" [showInlinePreview]=\"true\" [multipleAttachment]=\"field.IsMultiAttach\"\r\n [disableAction]=\"field.FormFormGroup.disabled\" [acceptedFileTypes]=\"field.AllowedExtensions\" [showHeader]=\"true\"\r\n [headerTitle]=\"field.Description + (field.Required ? ' *' : '')\" (localEditedAttachments)=\"catchAttachmentList($event)\"\r\n #eqpAttachments>\r\n</eqp-attachments>\r\n\r\n<!-- TEMPLATE PER VISUALIZZARE LA COLONNA DELLA SEZIONE NELLA TABELLA DEI FIELDS -->\r\n<!-- <ng-template #metadataColumnTemplate let-row=\"row\" let-col=\"col\">\r\n <dynamic-module-field-fix [field]=\"getFieldFromMetadata(col, row)\" [record]=\"row\"\r\n (recordChange)=\"updateMetadataValidity()\">\r\n </dynamic-module-field-fix>\r\n</ng-template> -->" }]
122
+ args: [{ selector: 'attachment-field-template', template: "<p *ngIf=\"!field.isMultiAttach\" class=\"mb-2\">\r\n {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n</p>\r\n<div class=\"row\" *ngIf=\"!field.isMultiAttach && record[field.Name] && record[field.Name][0]\">\r\n <!-- <div class=\"mt-2\" *ngFor=\"let metadata of field.MetadataFields\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(metadata)\">\r\n <dynamic-module-field-fix [field]=\"metadata\" [record]=\"record[field.Name][0]\"\r\n (recordChange)=\"updateMetadataValidity()\">\r\n </dynamic-module-field-fix>\r\n </div> -->\r\n</div>\r\n\r\n\r\n<eqp-attachments [attachmentsList]=\"record[field.Name]\" [showMatCard]=\"true\" [allowOnlyImages]=\"onlyImages\"\r\n [isDisabled]=\"field.FormFormGroup.disabled\" [showInlinePreview]=\"true\" [multipleAttachment]=\"field.isMultiAttach\"\r\n [disableAction]=\"field.FormFormGroup.disabled\" [acceptedFileTypes]=\"field.AllowedExtensions\" [showHeader]=\"true\"\r\n [headerTitle]=\"field.Description + (field.Required ? ' *' : '')\" (localEditedAttachments)=\"catchAttachmentList($event)\"\r\n #eqpAttachments>\r\n</eqp-attachments>\r\n\r\n<!-- TEMPLATE PER VISUALIZZARE LA COLONNA DELLA SEZIONE NELLA TABELLA DEI FIELDS -->\r\n<!-- <ng-template #metadataColumnTemplate let-row=\"row\" let-col=\"col\">\r\n <dynamic-module-field-fix [field]=\"getFieldFromMetadata(col, row)\" [record]=\"row\"\r\n (recordChange)=\"updateMetadataValidity()\">\r\n </dynamic-module-field-fix>\r\n</ng-template> -->" }]
123
123
  }], ctorParameters: function () { return [{ type: i1.UtilityHelperService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { onlyImages: [{
124
124
  type: Input
125
125
  }], field: [{
@@ -138,4 +138,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
138
138
  type: ViewChild,
139
139
  args: ["eqpAttachments", { static: true }]
140
140
  }] } });
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2F0dGFjaG1lbnQtZmllbGQtdGVtcGxhdGUvYXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2F0dGFjaG1lbnQtZmllbGQtdGVtcGxhdGUvYXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQThCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuSyxPQUFPLEVBQW1CLHVCQUF1QixFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFckksT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFJbkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7O0FBT3hFLE1BQU0sT0FBTyxnQ0FBZ0M7SUFXM0Msa0dBQWtHO0lBRWxHLDhFQUE4RTtJQUU5RSxZQUNTLGNBQW9DLEVBQ25DLEdBQXNCO1FBRHZCLG1CQUFjLEdBQWQsY0FBYyxDQUFzQjtRQUNuQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQWZ2QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBRzVCLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDekIsaUJBQVksR0FB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QUMxRSxNQUFNO0lBQ04sZ0NBQWdDO0lBQ2hDLElBQUk7SUFFSjs7Ozs7OztPQU9HO0lBQ0gsc0RBQXNEO0lBQ3RELHVIQUF1SDtJQUN2SCxrR0FBa0c7SUFDbEcsc0JBQXNCO0lBQ3RCLElBQUk7SUFFSjs7T0FFRztJQUNLLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVEOztPQUVHO0lBQ0ssbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDOzs4SEFoSVUsZ0NBQWdDO2tIQUFoQyxnQ0FBZ0MsMmFDZjdDLGcvQ0F3QmtCOzRGRFRMLGdDQUFnQztrQkFMNUMsU0FBUzsrQkFDRSwyQkFBMkI7MklBTTVCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRXdDLGNBQWM7c0JBQTVELFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgQXR0YWNobWVudEZpZWxkLCBBdmFpbGFibGVGaWxlRXh0ZW5zaW9ucywgQXZhaWxhYmxlSW1hZ2VFeHRlbnNpb25zIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9hdHRhY2htZW50RmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBJQmFzZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9pQmFzZUZpZWxkQ29tcG9uZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEVxcEF0dGFjaG1lbnRzQ29tcG9uZW50IH0gZnJvbSAnQGVxcHJvamVjdC9lcXAtYXR0YWNobWVudHMnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb25maWdDb2x1bW4sIFR5cGVDb2x1bW4gfSBmcm9tICdAZXFwcm9qZWN0L2VxcC10YWJsZSc7XHJcbmltcG9ydCB7IERhdGFHZXR0ZXJUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhdHRhY2htZW50LWZpZWxkLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdHRhY2htZW50RmllbGRUZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBJQmFzZUZpZWxkQ29tcG9uZW50LCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgQElucHV0KCkgb25seUltYWdlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGZpZWxkOiBBdHRhY2htZW50RmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQElucHV0KCkgZm9ybXVsYU9iamVjdDogYW55ID0ge307XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgcmVjb3JkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBvbkF0dGFjaG1lbnRzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJlcXBBdHRhY2htZW50c1wiLCB7IHN0YXRpYzogdHJ1ZSB9KSBlcXBBdHRhY2htZW50czogRXFwQXR0YWNobWVudHNDb21wb25lbnQ7XHJcbiAgLy9AVmlld0NoaWxkKCdtZXRhZGF0YUNvbHVtblRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgbWV0YWRhdGFDb2x1bW5UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLy9tZXRhZGF0YUZvcm1Hcm91cHM6IEFycmF5PFVudHlwZWRGb3JtR3JvdXA+ID0gbmV3IEFycmF5PFVudHlwZWRGb3JtR3JvdXA+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gTmVsIGNhc28gaW4gY3VpIHNvbm8gaW4gbW9kaWZpY2EgZGkgdW4gUmVjb3JkIGFnZ2lvcm5vIGlsIHZhbG9yZVxyXG4gICAgLy8gZSBpbCB2YWxpZGF0b3IgZGVsIEZvcm1Db250cm9sLiBTZSBub24gdmllbmUgZXNlZ3VpdGEgcXVlc3RhIHJpZ2FcclxuICAgIC8vIGwndXRlbnRlIGRldmUgbW9kaWZpY2FyZSBsYSBzZWxlemlvbmUgZmF0dGEgcGVyIGFnZ2lvcm5hcmUgbGEgZm9ybS5cclxuICAgIHRoaXMuc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpO1xyXG5cclxuICAgIC8vIFNlbXByZSBuZWwgY2FzbyBpbiBjdWkgc29ubyBpbiBtb2RpZmljYSBjcmVvIGkgRm9ybUdyb3VwIGNoZSByYXBwcmVzZW50YW5vXHJcbiAgICAvLyBnbGkgZXZlbnR1YWxpIG1ldGFkYXRhIGRlZ2xpIGFsbGVnYXRpIHJlY3VwZXJhdGkuXHJcbiAgLy9cclxuXHJcbiAgICBpZiAoIXRoaXMuZmllbGQuQWxsb3dlZEV4dGVuc2lvbnMpIHtcclxuICAgICAgdGhpcy5maWVsZC5BbGxvd2VkRXh0ZW5zaW9ucyA9IEF2YWlsYWJsZUZpbGVFeHRlbnNpb25zLmNvbmNhdChBdmFpbGFibGVJbWFnZUV4dGVuc2lvbnMpLm1hcChleHQgPT4gZXh0LmtleSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAvLyBEb3BvIGF2ZXIgcmVuZGVyaXp6YXRvIGlsIERPTSwgc2UgaWwgY2FtcG8gYW1tZXR0ZSBtb2x0ZXBsaWNpIGFsbGVnYXRpXHJcbiAgICAvLyBjb25maWd1cm8gbGUgY29sb25uZSBkZWxsYSBlcXAtdGFibGUgaW4gZXFwLWF0dGFjaG1lbnRzLlxyXG4gICAgLy8gaWYgKHRoaXMuZmllbGQuSXNNdWx0aUF0dGFjaCkge1xyXG4gICAgLy8gICB0aGlzLmNvbmZpZ3VyZU11bHRpQXR0YWNobWVudENvbHVtbnMoKTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIC8vIFNlIHZpZW5lIG1vZGlmaWNhdG8gaWwgdmFsb3JlIGRpIFwibmdNb2RlbElucHV0XCIgYWxsb3JhIGFnZ2lvcm5hIGwnaW5wdXRcclxuICAgIGlmIChjaGFuZ2VzWydyZWNvcmQnXSAhPSB1bmRlZmluZWQgJiYgY2hhbmdlc1sncmVjb3JkJ10uZmlyc3RDaGFuZ2UgPT0gZmFsc2UgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlKSAhPSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlY29yZCA9IGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkZWwgY2FtcG8gcXVhbmRvIHF1ZXN0byDDqCByYXBwcmVzZW50YXRvIGRhIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgaWYgKCh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtLk1hbnVhbGUgfHwgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bS5Gb3JtdWxhKSAmJiB0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuRm9ybXVsYSwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWVsZC5WaXNpYmxlSWYpIHtcclxuICAgICAgdGhpcy5maWVsZC5Jbkxpc3RWaWV3ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5WaXNpYmxlSWYsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbnRlcmNldHRhcmUgbGUgbW9kaWZpY2hlIGFnbGkgYWxsZWdhdGkgY2FyaWNhdGkuXHJcbiAgICogU2UgaWwgY2FtcG8gcHJldmVkZSBkZWkgbWV0YWRhdGEgYWxsb3JhIHBlciBvZ25pIGFsbGVnYXRvIGNhcmljYXRvIGNyZWEgdW4gRm9ybUdyb3VwXHJcbiAgICogcGVyIGdlc3RpcmUgbGEgdmFsaWRhemlvbmUgZGVnbGkgaW5wdXQgY2hlIGwndXRlbnRlIHB1w7IvZGV2ZSByaWVtcGlyZS4gSSBGb3JtR3JvdXAgXHJcbiAgICogc2VndW9ubyBsbyBzdGVzc28gb3JkaW5lIGRlZ2xpIGFsbGVnYXRpIGNhcmljYXRpLlxyXG4gICAqIEBwYXJhbSBldmVudCBDb250aWVuZSBsYSBsaXN0YSBhZ2dpb3JuYXRhIGRlZ2xpIEF0dGFjaG1lbnQgY2FyaWNhdGkgZGFsbCd1dGVudGUuXHJcbiAgICovXHJcbiAgY2F0Y2hBdHRhY2htZW50TGlzdChldmVudCkge1xyXG4gICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGV2ZW50O1xyXG5cclxuICAgLy8gdGhpcy5jcmVhdGVNZXRhZGF0YUZvcm1Hcm91cHMoKTtcclxuXHJcbiAgICB0aGlzLnNldEZvcm1Db250cm9sVmFsdWUoKTtcclxuICAgIHRoaXMub25SZWNvcmRWYWx1ZUNoYW5nZSgpO1xyXG4gICAgXHJcbiAgICAvLyBTY2F0ZW5vIHVuIGV2ZW50byBkaSBvdXRwdXQgbmVjZXNzYXJpbyBhbCBjb21wb25lbnRlIEltYWdlRmllbGRUZW1wbGF0ZSBhbFxyXG4gICAgLy8gdmFyaWFyZSBkZWdsaSBhbGxlZ2F0aSBjYXJpY2F0aS4gVmllbmUgdXNhdG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgcGVyIGRpc2VnbmFyZVxyXG4gICAgLy8gc3VsbCdpbW1hZ2luZSBjYXJpY2F0YSBpbiBiYXNlIGFsbGEgY29uZmlndXJhemlvbmUgZGVsIEZpZWxkLlxyXG4gICAgdGhpcy5vbkF0dGFjaG1lbnRzQ2hhbmdlLmVtaXQoKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYWdnaW9ybmFyZSBsbyBzdGF0byBkaSB2YWxpZGF6aW9uZSBkZWwgRm9ybUNvbnRyb2wgY2hlIHJhcHByZXNlbnRhIFxyXG4gICAqIGlsIGNhbXBvIEFsbGVnYXRvIChub24gaSBtZXRhZGF0YSBhbCBzdW8gaW50ZXJubykuIFNlIHRyYSBsZSBmb3JtIGRlaSBtZXRhZGF0YVxyXG4gICAqIG5lIHRyb3ZhIHVuYSBpbnZhbGlkYSBhbGxvcmEgbWFyY2EgaWwgY29udHJvbGxvIGNvbWUgaW52YWxpZG8uXHJcbiAgICovXHJcbiAgLy8gdXBkYXRlTWV0YWRhdGFWYWxpZGl0eSgpIHtcclxuICAvLyAgIGlmICh0aGlzLm1ldGFkYXRhRm9ybUdyb3Vwcy5maW5kKGZvcm0gPT4gZm9ybS5pbnZhbGlkKSkge1xyXG4gIC8vICAgICB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5OYW1lXS5zZXRFcnJvcnMoeyAnaW5jb3JyZWN0JzogdHJ1ZSB9KTtcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cC5jb250cm9sc1t0aGlzLmZpZWxkLk5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAvLyAgIH1cclxuICAvLyAgIHRoaXMub25SZWNvcmRWYWx1ZUNoYW5nZSgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByZWN1cGVyYXJlIGlsIEJhc2VGaWVsZCBjaGUgcmFwcHJlc2VudGEgaWwgbWV0YWRhdGEgbmVsbGEgcmlnYSBkZWxsYSBlcXAtdGFibGVcclxuICAgKiBpbiBiYXNlIGFsbGEgY29sb25uYSBlIGFsbGEgcmlnYS4gVW5hIHZvbHRhIHRyb3ZhdG8gaWwgQmFzZUZpZWxkIGdsaSB2aWVuZSBhc3NvY2lhdG8gaWwgXHJcbiAgICogRm9ybUdyb3VwIGRpIGN1aSBmYSBwYXJ0ZS5cclxuICAgKiBAcGFyYW0gY29sIENvbG9ubmEgZGVsbGEgZXFwLXRhYmxlLlxyXG4gICAqIEBwYXJhbSByb3cgUmlnYSBkZWxsYSBlcXAtdGFibGUgKGluIHF1ZXN0byBjYXNvIGVyZWRpdGEgZGEgSUF0dGFjaG1lbnQpLlxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuIEJhc2VGaWVsZCBwZXIgcmVuZGVyaXp6YXJlIGlsIGNhbXBvIG5lbGxhIGVxcC10YWJsZSBkZWdsaSBhbGxlZ2F0aSBtdWx0aXBsaS5cclxuICAgKi9cclxuICAvLyBnZXRGaWVsZEZyb21NZXRhZGF0YShjb2w6IENvbmZpZ0NvbHVtbiwgcm93OiBhbnkpIHtcclxuICAvLyAgIHZhciBiYXNlRmllbGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmllbGQuTWV0YWRhdGFGaWVsZHMuZmluZChtZXRhZGF0YSA9PiBtZXRhZGF0YS5OYW1lID09PSBjb2wua2V5KSkpO1xyXG4gIC8vICAgYmFzZUZpZWxkLkZvcm1Gb3JtR3JvdXAgPSB0aGlzLm1ldGFkYXRhRm9ybUdyb3Vwc1t0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmluZGV4T2Yocm93KV07XHJcbiAgLy8gICByZXR1cm4gYmFzZUZpZWxkO1xyXG4gIC8vIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBlIGlsIHZhbGlkYXRvciBkZWwgRm9ybUNvbnRyb2wgYXNzb2NpYXRvIGFsIGNhbXBvLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpIHtcclxuICAgIHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cC5jb250cm9sc1t0aGlzLmZpZWxkLk5hbWVdLnNldFZhbHVlKHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBlbWV0dGVyZSBsJ2V2ZW50byBjaGUgaWwgdmFsb3JlIGRlbCByZWNvcmQgw6ggY2FtYmlhdG8uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvblJlY29yZFZhbHVlQ2hhbmdlKCkge1xyXG4gICAgaWYgKCF0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFnZ2l1bmdlcmUgYWxsZSBjb2xvbm5lIGRpIGVxcC1hdHRhY2htZW50cyBsZSBjb2xvbm5lIHBlciBtb2RpZmljYXJlIGkgbWV0YWRhdGFcclxuICAgKiBjb25maWd1cmF0aSBwZXIgaWwgY2FtcG8gQWxsZWdhdG8gbyBJbW1hZ2luZS5cclxuICAgKi9cclxuICAvLyBwcml2YXRlIGNvbmZpZ3VyZU11bHRpQXR0YWNobWVudENvbHVtbnMoKSB7XHJcbiAgLy8gICBpZiAodGhpcy5lcXBBdHRhY2htZW50cyAmJiB0aGlzLmVxcEF0dGFjaG1lbnRzLmF0dGFjaG1lbnRzQ29sdW1ucyAmJiB0aGlzLmZpZWxkLk1ldGFkYXRhRmllbGRzICYmIHRoaXMuZmllbGQuTWV0YWRhdGFGaWVsZHMubGVuZ3RoID4gMCkge1xyXG4gIC8vICAgICB0aGlzLmZpZWxkLk1ldGFkYXRhRmllbGRzLmZvckVhY2gobWV0YWRhdGEgPT4ge1xyXG4gIC8vICAgICAgIHRoaXMuZXFwQXR0YWNobWVudHMuYXR0YWNobWVudHNDb2x1bW5zLnNwbGljZShcclxuICAvLyAgICAgICAgIHRoaXMuZXFwQXR0YWNobWVudHMuYXR0YWNobWVudHNDb2x1bW5zLmxlbmd0aCAtIDEsIDAsXHJcbiAgLy8gICAgICAgICB7IGtleTogbWV0YWRhdGEuTmFtZSwgZGlzcGxheTogbWV0YWRhdGEuTGFiZWwsIHR5cGU6IFR5cGVDb2x1bW4uRXh0ZXJuYWxUZW1wbGF0ZSwgZXh0ZXJuYWxUZW1wbGF0ZTogdGhpcy5tZXRhZGF0YUNvbHVtblRlbXBsYXRlIH1cclxuICAvLyAgICAgICApO1xyXG4gIC8vICAgICB9KTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGkgRm9ybUdyb3VwIGNoZSByYXBwcmVzZW50YW5vIGkgbWV0YWRhdGEgZGVnbGkgYWxsZWdhdGkgY2FyaWNhdGkuXHJcbiAgICovXHJcbiAgLy8gcHJpdmF0ZSBjcmVhdGVNZXRhZGF0YUZvcm1Hcm91cHMoKSB7XHJcbiAgLy8gICBpZiAodGhpcy5maWVsZC5NZXRhZGF0YUZpZWxkcyAmJiB0aGlzLmZpZWxkLk1ldGFkYXRhRmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAvLyAgICAgdGhpcy5tZXRhZGF0YUZvcm1Hcm91cHMgPSBbXTtcclxuICAvLyAgICAgaWYgKHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gJiYgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5sZW5ndGggPiAwKSB7XHJcbiAgLy8gICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5mb3JFYWNoKGF0dGFjaG1lbnQgPT4ge1xyXG4gIC8vICAgICAgICAgdGhpcy5tZXRhZGF0YUZvcm1Hcm91cHMucHVzaCh0aGlzLnV0aWxpdHlTZXJ2aWNlLkNyZWF0ZUZvcm1Gb3JtR3JvdXAodGhpcy5maWVsZC5NZXRhZGF0YUZpZWxkcywgYXR0YWNobWVudCwgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkLCAhdGhpcy5maWVsZC5Jc011bHRpQXR0YWNoKSk7XHJcbiAgLy8gICAgICAgfSk7XHJcbiAgLy8gICAgIH1cclxuXHJcbiAgLy8gICAgIHRoaXMudXBkYXRlTWV0YWRhdGFWYWxpZGl0eSgpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxufSIsIjxwICpuZ0lmPVwiIWZpZWxkLklzTXVsdGlBdHRhY2hcIiBjbGFzcz1cIm1iLTJcIj5cclxuICAgIHt7ZmllbGQuRGVzY3JpcHRpb24gKyAoZmllbGQuUmVxdWlyZWQgPyBcIiAqXCIgOiBcIlwiKX19XHJcbjwvcD5cclxuPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiIWZpZWxkLklzTXVsdGlBdHRhY2ggJiYgcmVjb3JkW2ZpZWxkLk5hbWVdICYmIHJlY29yZFtmaWVsZC5OYW1lXVswXVwiPlxyXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwibXQtMlwiICpuZ0Zvcj1cImxldCBtZXRhZGF0YSBvZiBmaWVsZC5NZXRhZGF0YUZpZWxkc1wiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwidXRpbGl0eVNlcnZpY2UuZ2V0RmllbGRTeWxlQ2xhc3MobWV0YWRhdGEpXCI+XHJcbiAgICAgICAgPGR5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeCBbZmllbGRdPVwibWV0YWRhdGFcIiBbcmVjb3JkXT1cInJlY29yZFtmaWVsZC5OYW1lXVswXVwiXHJcbiAgICAgICAgICAgIChyZWNvcmRDaGFuZ2UpPVwidXBkYXRlTWV0YWRhdGFWYWxpZGl0eSgpXCI+XHJcbiAgICAgICAgPC9keW5hbWljLW1vZHVsZS1maWVsZC1maXg+XHJcbiAgICA8L2Rpdj4gLS0+XHJcbjwvZGl2PlxyXG5cclxuPGVxcC1hdHRhY2htZW50cyBbYXR0YWNobWVudHNMaXN0XT1cInJlY29yZFtmaWVsZC5OYW1lXVwiIFtzaG93TWF0Q2FyZF09XCJ0cnVlXCIgW2FsbG93T25seUltYWdlc109XCJvbmx5SW1hZ2VzXCJcclxuICAgIFtpc0Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIiBbc2hvd0lubGluZVByZXZpZXddPVwidHJ1ZVwiIFttdWx0aXBsZUF0dGFjaG1lbnRdPVwiZmllbGQuSXNNdWx0aUF0dGFjaFwiXHJcbiAgICBbZGlzYWJsZUFjdGlvbl09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkXCIgW2FjY2VwdGVkRmlsZVR5cGVzXT1cImZpZWxkLkFsbG93ZWRFeHRlbnNpb25zXCIgW3Nob3dIZWFkZXJdPVwidHJ1ZVwiXHJcbiAgICBbaGVhZGVyVGl0bGVdPVwiZmllbGQuRGVzY3JpcHRpb24gKyAoZmllbGQuUmVxdWlyZWQgPyAnIConIDogJycpXCIgKGxvY2FsRWRpdGVkQXR0YWNobWVudHMpPVwiY2F0Y2hBdHRhY2htZW50TGlzdCgkZXZlbnQpXCJcclxuICAgICNlcXBBdHRhY2htZW50cz5cclxuPC9lcXAtYXR0YWNobWVudHM+XHJcblxyXG48IS0tIFRFTVBMQVRFIFBFUiBWSVNVQUxJWlpBUkUgTEEgQ09MT05OQSBERUxMQSBTRVpJT05FIE5FTExBIFRBQkVMTEEgREVJIEZJRUxEUyAtLT5cclxuPCEtLSA8bmctdGVtcGxhdGUgI21ldGFkYXRhQ29sdW1uVGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC1jb2w9XCJjb2xcIj5cclxuICAgIDxkeW5hbWljLW1vZHVsZS1maWVsZC1maXggW2ZpZWxkXT1cImdldEZpZWxkRnJvbU1ldGFkYXRhKGNvbCwgcm93KVwiIFtyZWNvcmRdPVwicm93XCJcclxuICAgICAgICAocmVjb3JkQ2hhbmdlKT1cInVwZGF0ZU1ldGFkYXRhVmFsaWRpdHkoKVwiPlxyXG4gICAgPC9keW5hbWljLW1vZHVsZS1maWVsZC1maXg+XHJcbjwvbmctdGVtcGxhdGU+IC0tPiJdfQ==
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2F0dGFjaG1lbnQtZmllbGQtdGVtcGxhdGUvYXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2F0dGFjaG1lbnQtZmllbGQtdGVtcGxhdGUvYXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQThCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuSyxPQUFPLEVBQW1CLHVCQUF1QixFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFckksT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFJbkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7O0FBT3hFLE1BQU0sT0FBTyxnQ0FBZ0M7SUFXM0Msa0dBQWtHO0lBRWxHLDhFQUE4RTtJQUU5RSxZQUNTLGNBQW9DLEVBQ25DLEdBQXNCO1FBRHZCLG1CQUFjLEdBQWQsY0FBYyxDQUFzQjtRQUNuQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQWZ2QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBRzVCLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDekIsaUJBQVksR0FB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QUMxRSxNQUFNO0lBQ04sZ0NBQWdDO0lBQ2hDLElBQUk7SUFFSjs7Ozs7OztPQU9HO0lBQ0gsc0RBQXNEO0lBQ3RELHVIQUF1SDtJQUN2SCxrR0FBa0c7SUFDbEcsc0JBQXNCO0lBQ3RCLElBQUk7SUFFSjs7T0FFRztJQUNLLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVEOztPQUVHO0lBQ0ssbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDOzs4SEFoSVUsZ0NBQWdDO2tIQUFoQyxnQ0FBZ0MsMmFDZjdDLG8vQ0F5QmtCOzRGRFZMLGdDQUFnQztrQkFMNUMsU0FBUzsrQkFDRSwyQkFBMkI7MklBTTVCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRXdDLGNBQWM7c0JBQTVELFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgQXR0YWNobWVudEZpZWxkLCBBdmFpbGFibGVGaWxlRXh0ZW5zaW9ucywgQXZhaWxhYmxlSW1hZ2VFeHRlbnNpb25zIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9hdHRhY2htZW50RmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBJQmFzZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9pQmFzZUZpZWxkQ29tcG9uZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEVxcEF0dGFjaG1lbnRzQ29tcG9uZW50IH0gZnJvbSAnQGVxcHJvamVjdC9lcXAtYXR0YWNobWVudHMnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb25maWdDb2x1bW4sIFR5cGVDb2x1bW4gfSBmcm9tICdAZXFwcm9qZWN0L2VxcC10YWJsZSc7XHJcbmltcG9ydCB7IERhdGFHZXR0ZXJUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhdHRhY2htZW50LWZpZWxkLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdHRhY2htZW50RmllbGRUZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBJQmFzZUZpZWxkQ29tcG9uZW50LCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgQElucHV0KCkgb25seUltYWdlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGZpZWxkOiBBdHRhY2htZW50RmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQElucHV0KCkgZm9ybXVsYU9iamVjdDogYW55ID0ge307XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgcmVjb3JkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBvbkF0dGFjaG1lbnRzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJlcXBBdHRhY2htZW50c1wiLCB7IHN0YXRpYzogdHJ1ZSB9KSBlcXBBdHRhY2htZW50czogRXFwQXR0YWNobWVudHNDb21wb25lbnQ7XHJcbiAgLy9AVmlld0NoaWxkKCdtZXRhZGF0YUNvbHVtblRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgbWV0YWRhdGFDb2x1bW5UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLy9tZXRhZGF0YUZvcm1Hcm91cHM6IEFycmF5PFVudHlwZWRGb3JtR3JvdXA+ID0gbmV3IEFycmF5PFVudHlwZWRGb3JtR3JvdXA+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gTmVsIGNhc28gaW4gY3VpIHNvbm8gaW4gbW9kaWZpY2EgZGkgdW4gUmVjb3JkIGFnZ2lvcm5vIGlsIHZhbG9yZVxyXG4gICAgLy8gZSBpbCB2YWxpZGF0b3IgZGVsIEZvcm1Db250cm9sLiBTZSBub24gdmllbmUgZXNlZ3VpdGEgcXVlc3RhIHJpZ2FcclxuICAgIC8vIGwndXRlbnRlIGRldmUgbW9kaWZpY2FyZSBsYSBzZWxlemlvbmUgZmF0dGEgcGVyIGFnZ2lvcm5hcmUgbGEgZm9ybS5cclxuICAgIHRoaXMuc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpO1xyXG5cclxuICAgIC8vIFNlbXByZSBuZWwgY2FzbyBpbiBjdWkgc29ubyBpbiBtb2RpZmljYSBjcmVvIGkgRm9ybUdyb3VwIGNoZSByYXBwcmVzZW50YW5vXHJcbiAgICAvLyBnbGkgZXZlbnR1YWxpIG1ldGFkYXRhIGRlZ2xpIGFsbGVnYXRpIHJlY3VwZXJhdGkuXHJcbiAgLy9cclxuXHJcbiAgICBpZiAoIXRoaXMuZmllbGQuQWxsb3dlZEV4dGVuc2lvbnMpIHtcclxuICAgICAgdGhpcy5maWVsZC5BbGxvd2VkRXh0ZW5zaW9ucyA9IEF2YWlsYWJsZUZpbGVFeHRlbnNpb25zLmNvbmNhdChBdmFpbGFibGVJbWFnZUV4dGVuc2lvbnMpLm1hcChleHQgPT4gZXh0LmtleSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAvLyBEb3BvIGF2ZXIgcmVuZGVyaXp6YXRvIGlsIERPTSwgc2UgaWwgY2FtcG8gYW1tZXR0ZSBtb2x0ZXBsaWNpIGFsbGVnYXRpXHJcbiAgICAvLyBjb25maWd1cm8gbGUgY29sb25uZSBkZWxsYSBlcXAtdGFibGUgaW4gZXFwLWF0dGFjaG1lbnRzLlxyXG4gICAgLy8gaWYgKHRoaXMuZmllbGQuSXNNdWx0aUF0dGFjaCkge1xyXG4gICAgLy8gICB0aGlzLmNvbmZpZ3VyZU11bHRpQXR0YWNobWVudENvbHVtbnMoKTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIC8vIFNlIHZpZW5lIG1vZGlmaWNhdG8gaWwgdmFsb3JlIGRpIFwibmdNb2RlbElucHV0XCIgYWxsb3JhIGFnZ2lvcm5hIGwnaW5wdXRcclxuICAgIGlmIChjaGFuZ2VzWydyZWNvcmQnXSAhPSB1bmRlZmluZWQgJiYgY2hhbmdlc1sncmVjb3JkJ10uZmlyc3RDaGFuZ2UgPT0gZmFsc2UgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlKSAhPSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlY29yZCA9IGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkZWwgY2FtcG8gcXVhbmRvIHF1ZXN0byDDqCByYXBwcmVzZW50YXRvIGRhIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgaWYgKCh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtLk1hbnVhbGUgfHwgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bS5Gb3JtdWxhKSAmJiB0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuRm9ybXVsYSwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWVsZC5WaXNpYmxlSWYpIHtcclxuICAgICAgdGhpcy5maWVsZC5Jbkxpc3RWaWV3ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5WaXNpYmxlSWYsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBpbnRlcmNldHRhcmUgbGUgbW9kaWZpY2hlIGFnbGkgYWxsZWdhdGkgY2FyaWNhdGkuXHJcbiAgICogU2UgaWwgY2FtcG8gcHJldmVkZSBkZWkgbWV0YWRhdGEgYWxsb3JhIHBlciBvZ25pIGFsbGVnYXRvIGNhcmljYXRvIGNyZWEgdW4gRm9ybUdyb3VwXHJcbiAgICogcGVyIGdlc3RpcmUgbGEgdmFsaWRhemlvbmUgZGVnbGkgaW5wdXQgY2hlIGwndXRlbnRlIHB1w7IvZGV2ZSByaWVtcGlyZS4gSSBGb3JtR3JvdXAgXHJcbiAgICogc2VndW9ubyBsbyBzdGVzc28gb3JkaW5lIGRlZ2xpIGFsbGVnYXRpIGNhcmljYXRpLlxyXG4gICAqIEBwYXJhbSBldmVudCBDb250aWVuZSBsYSBsaXN0YSBhZ2dpb3JuYXRhIGRlZ2xpIEF0dGFjaG1lbnQgY2FyaWNhdGkgZGFsbCd1dGVudGUuXHJcbiAgICovXHJcbiAgY2F0Y2hBdHRhY2htZW50TGlzdChldmVudCkge1xyXG4gICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGV2ZW50O1xyXG5cclxuICAgLy8gdGhpcy5jcmVhdGVNZXRhZGF0YUZvcm1Hcm91cHMoKTtcclxuXHJcbiAgICB0aGlzLnNldEZvcm1Db250cm9sVmFsdWUoKTtcclxuICAgIHRoaXMub25SZWNvcmRWYWx1ZUNoYW5nZSgpO1xyXG4gICAgXHJcbiAgICAvLyBTY2F0ZW5vIHVuIGV2ZW50byBkaSBvdXRwdXQgbmVjZXNzYXJpbyBhbCBjb21wb25lbnRlIEltYWdlRmllbGRUZW1wbGF0ZSBhbFxyXG4gICAgLy8gdmFyaWFyZSBkZWdsaSBhbGxlZ2F0aSBjYXJpY2F0aS4gVmllbmUgdXNhdG8gcGVyIGFwcmlyZSBpbCBkaWFsb2cgcGVyIGRpc2VnbmFyZVxyXG4gICAgLy8gc3VsbCdpbW1hZ2luZSBjYXJpY2F0YSBpbiBiYXNlIGFsbGEgY29uZmlndXJhemlvbmUgZGVsIEZpZWxkLlxyXG4gICAgdGhpcy5vbkF0dGFjaG1lbnRzQ2hhbmdlLmVtaXQoKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYWdnaW9ybmFyZSBsbyBzdGF0byBkaSB2YWxpZGF6aW9uZSBkZWwgRm9ybUNvbnRyb2wgY2hlIHJhcHByZXNlbnRhIFxyXG4gICAqIGlsIGNhbXBvIEFsbGVnYXRvIChub24gaSBtZXRhZGF0YSBhbCBzdW8gaW50ZXJubykuIFNlIHRyYSBsZSBmb3JtIGRlaSBtZXRhZGF0YVxyXG4gICAqIG5lIHRyb3ZhIHVuYSBpbnZhbGlkYSBhbGxvcmEgbWFyY2EgaWwgY29udHJvbGxvIGNvbWUgaW52YWxpZG8uXHJcbiAgICovXHJcbiAgLy8gdXBkYXRlTWV0YWRhdGFWYWxpZGl0eSgpIHtcclxuICAvLyAgIGlmICh0aGlzLm1ldGFkYXRhRm9ybUdyb3Vwcy5maW5kKGZvcm0gPT4gZm9ybS5pbnZhbGlkKSkge1xyXG4gIC8vICAgICB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5OYW1lXS5zZXRFcnJvcnMoeyAnaW5jb3JyZWN0JzogdHJ1ZSB9KTtcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cC5jb250cm9sc1t0aGlzLmZpZWxkLk5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAvLyAgIH1cclxuICAvLyAgIHRoaXMub25SZWNvcmRWYWx1ZUNoYW5nZSgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByZWN1cGVyYXJlIGlsIEJhc2VGaWVsZCBjaGUgcmFwcHJlc2VudGEgaWwgbWV0YWRhdGEgbmVsbGEgcmlnYSBkZWxsYSBlcXAtdGFibGVcclxuICAgKiBpbiBiYXNlIGFsbGEgY29sb25uYSBlIGFsbGEgcmlnYS4gVW5hIHZvbHRhIHRyb3ZhdG8gaWwgQmFzZUZpZWxkIGdsaSB2aWVuZSBhc3NvY2lhdG8gaWwgXHJcbiAgICogRm9ybUdyb3VwIGRpIGN1aSBmYSBwYXJ0ZS5cclxuICAgKiBAcGFyYW0gY29sIENvbG9ubmEgZGVsbGEgZXFwLXRhYmxlLlxyXG4gICAqIEBwYXJhbSByb3cgUmlnYSBkZWxsYSBlcXAtdGFibGUgKGluIHF1ZXN0byBjYXNvIGVyZWRpdGEgZGEgSUF0dGFjaG1lbnQpLlxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuIEJhc2VGaWVsZCBwZXIgcmVuZGVyaXp6YXJlIGlsIGNhbXBvIG5lbGxhIGVxcC10YWJsZSBkZWdsaSBhbGxlZ2F0aSBtdWx0aXBsaS5cclxuICAgKi9cclxuICAvLyBnZXRGaWVsZEZyb21NZXRhZGF0YShjb2w6IENvbmZpZ0NvbHVtbiwgcm93OiBhbnkpIHtcclxuICAvLyAgIHZhciBiYXNlRmllbGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmllbGQuTWV0YWRhdGFGaWVsZHMuZmluZChtZXRhZGF0YSA9PiBtZXRhZGF0YS5OYW1lID09PSBjb2wua2V5KSkpO1xyXG4gIC8vICAgYmFzZUZpZWxkLkZvcm1Gb3JtR3JvdXAgPSB0aGlzLm1ldGFkYXRhRm9ybUdyb3Vwc1t0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmluZGV4T2Yocm93KV07XHJcbiAgLy8gICByZXR1cm4gYmFzZUZpZWxkO1xyXG4gIC8vIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBlIGlsIHZhbGlkYXRvciBkZWwgRm9ybUNvbnRyb2wgYXNzb2NpYXRvIGFsIGNhbXBvLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpIHtcclxuICAgIHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cC5jb250cm9sc1t0aGlzLmZpZWxkLk5hbWVdLnNldFZhbHVlKHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBlbWV0dGVyZSBsJ2V2ZW50byBjaGUgaWwgdmFsb3JlIGRlbCByZWNvcmQgw6ggY2FtYmlhdG8uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvblJlY29yZFZhbHVlQ2hhbmdlKCkge1xyXG4gICAgaWYgKCF0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFnZ2l1bmdlcmUgYWxsZSBjb2xvbm5lIGRpIGVxcC1hdHRhY2htZW50cyBsZSBjb2xvbm5lIHBlciBtb2RpZmljYXJlIGkgbWV0YWRhdGFcclxuICAgKiBjb25maWd1cmF0aSBwZXIgaWwgY2FtcG8gQWxsZWdhdG8gbyBJbW1hZ2luZS5cclxuICAgKi9cclxuICAvLyBwcml2YXRlIGNvbmZpZ3VyZU11bHRpQXR0YWNobWVudENvbHVtbnMoKSB7XHJcbiAgLy8gICBpZiAodGhpcy5lcXBBdHRhY2htZW50cyAmJiB0aGlzLmVxcEF0dGFjaG1lbnRzLmF0dGFjaG1lbnRzQ29sdW1ucyAmJiB0aGlzLmZpZWxkLk1ldGFkYXRhRmllbGRzICYmIHRoaXMuZmllbGQuTWV0YWRhdGFGaWVsZHMubGVuZ3RoID4gMCkge1xyXG4gIC8vICAgICB0aGlzLmZpZWxkLk1ldGFkYXRhRmllbGRzLmZvckVhY2gobWV0YWRhdGEgPT4ge1xyXG4gIC8vICAgICAgIHRoaXMuZXFwQXR0YWNobWVudHMuYXR0YWNobWVudHNDb2x1bW5zLnNwbGljZShcclxuICAvLyAgICAgICAgIHRoaXMuZXFwQXR0YWNobWVudHMuYXR0YWNobWVudHNDb2x1bW5zLmxlbmd0aCAtIDEsIDAsXHJcbiAgLy8gICAgICAgICB7IGtleTogbWV0YWRhdGEuTmFtZSwgZGlzcGxheTogbWV0YWRhdGEuTGFiZWwsIHR5cGU6IFR5cGVDb2x1bW4uRXh0ZXJuYWxUZW1wbGF0ZSwgZXh0ZXJuYWxUZW1wbGF0ZTogdGhpcy5tZXRhZGF0YUNvbHVtblRlbXBsYXRlIH1cclxuICAvLyAgICAgICApO1xyXG4gIC8vICAgICB9KTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGkgRm9ybUdyb3VwIGNoZSByYXBwcmVzZW50YW5vIGkgbWV0YWRhdGEgZGVnbGkgYWxsZWdhdGkgY2FyaWNhdGkuXHJcbiAgICovXHJcbiAgLy8gcHJpdmF0ZSBjcmVhdGVNZXRhZGF0YUZvcm1Hcm91cHMoKSB7XHJcbiAgLy8gICBpZiAodGhpcy5maWVsZC5NZXRhZGF0YUZpZWxkcyAmJiB0aGlzLmZpZWxkLk1ldGFkYXRhRmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAvLyAgICAgdGhpcy5tZXRhZGF0YUZvcm1Hcm91cHMgPSBbXTtcclxuICAvLyAgICAgaWYgKHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gJiYgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5sZW5ndGggPiAwKSB7XHJcbiAgLy8gICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5mb3JFYWNoKGF0dGFjaG1lbnQgPT4ge1xyXG4gIC8vICAgICAgICAgdGhpcy5tZXRhZGF0YUZvcm1Hcm91cHMucHVzaCh0aGlzLnV0aWxpdHlTZXJ2aWNlLkNyZWF0ZUZvcm1Gb3JtR3JvdXAodGhpcy5maWVsZC5NZXRhZGF0YUZpZWxkcywgYXR0YWNobWVudCwgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkLCAhdGhpcy5maWVsZC5Jc011bHRpQXR0YWNoKSk7XHJcbiAgLy8gICAgICAgfSk7XHJcbiAgLy8gICAgIH1cclxuXHJcbiAgLy8gICAgIHRoaXMudXBkYXRlTWV0YWRhdGFWYWxpZGl0eSgpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxufSIsIjxwICpuZ0lmPVwiIWZpZWxkLmlzTXVsdGlBdHRhY2hcIiBjbGFzcz1cIm1iLTJcIj5cclxuICAgIHt7ZmllbGQuRGVzY3JpcHRpb24gKyAoZmllbGQuUmVxdWlyZWQgPyBcIiAqXCIgOiBcIlwiKX19XHJcbjwvcD5cclxuPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiIWZpZWxkLmlzTXVsdGlBdHRhY2ggJiYgcmVjb3JkW2ZpZWxkLk5hbWVdICYmIHJlY29yZFtmaWVsZC5OYW1lXVswXVwiPlxyXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwibXQtMlwiICpuZ0Zvcj1cImxldCBtZXRhZGF0YSBvZiBmaWVsZC5NZXRhZGF0YUZpZWxkc1wiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwidXRpbGl0eVNlcnZpY2UuZ2V0RmllbGRTeWxlQ2xhc3MobWV0YWRhdGEpXCI+XHJcbiAgICAgICAgPGR5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeCBbZmllbGRdPVwibWV0YWRhdGFcIiBbcmVjb3JkXT1cInJlY29yZFtmaWVsZC5OYW1lXVswXVwiXHJcbiAgICAgICAgICAgIChyZWNvcmRDaGFuZ2UpPVwidXBkYXRlTWV0YWRhdGFWYWxpZGl0eSgpXCI+XHJcbiAgICAgICAgPC9keW5hbWljLW1vZHVsZS1maWVsZC1maXg+XHJcbiAgICA8L2Rpdj4gLS0+XHJcbjwvZGl2PlxyXG5cclxuXHJcbjxlcXAtYXR0YWNobWVudHMgW2F0dGFjaG1lbnRzTGlzdF09XCJyZWNvcmRbZmllbGQuTmFtZV1cIiBbc2hvd01hdENhcmRdPVwidHJ1ZVwiIFthbGxvd09ubHlJbWFnZXNdPVwib25seUltYWdlc1wiXHJcbiAgICBbaXNEaXNhYmxlZF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkXCIgW3Nob3dJbmxpbmVQcmV2aWV3XT1cInRydWVcIiBbbXVsdGlwbGVBdHRhY2htZW50XT1cImZpZWxkLmlzTXVsdGlBdHRhY2hcIlxyXG4gICAgW2Rpc2FibGVBY3Rpb25dPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZFwiIFthY2NlcHRlZEZpbGVUeXBlc109XCJmaWVsZC5BbGxvd2VkRXh0ZW5zaW9uc1wiIFtzaG93SGVhZGVyXT1cInRydWVcIlxyXG4gICAgW2hlYWRlclRpdGxlXT1cImZpZWxkLkRlc2NyaXB0aW9uICsgKGZpZWxkLlJlcXVpcmVkID8gJyAqJyA6ICcnKVwiIChsb2NhbEVkaXRlZEF0dGFjaG1lbnRzKT1cImNhdGNoQXR0YWNobWVudExpc3QoJGV2ZW50KVwiXHJcbiAgICAjZXFwQXR0YWNobWVudHM+XHJcbjwvZXFwLWF0dGFjaG1lbnRzPlxyXG5cclxuPCEtLSBURU1QTEFURSBQRVIgVklTVUFMSVpaQVJFIExBIENPTE9OTkEgREVMTEEgU0VaSU9ORSBORUxMQSBUQUJFTExBIERFSSBGSUVMRFMgLS0+XHJcbjwhLS0gPG5nLXRlbXBsYXRlICNtZXRhZGF0YUNvbHVtblRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XHJcbiAgICA8ZHluYW1pYy1tb2R1bGUtZmllbGQtZml4IFtmaWVsZF09XCJnZXRGaWVsZEZyb21NZXRhZGF0YShjb2wsIHJvdylcIiBbcmVjb3JkXT1cInJvd1wiXHJcbiAgICAgICAgKHJlY29yZENoYW5nZSk9XCJ1cGRhdGVNZXRhZGF0YVZhbGlkaXR5KClcIj5cclxuICAgIDwvZHluYW1pYy1tb2R1bGUtZmllbGQtZml4PlxyXG48L25nLXRlbXBsYXRlPiAtLT4iXX0=
@@ -27,10 +27,26 @@ export class BooleanFieldTemplateComponent {
27
27
  this.updateField();
28
28
  this.initStyles();
29
29
  }
30
- ngOnChanges(changes) {
30
+ checkReadonly() {
31
31
  if (this.field.ReadonlyIf) {
32
32
  this.field.Readonly = UtilityHelperService.EvaluateFieldFormula(this.field.ReadonlyIf, this.record, this.formulaObject);
33
33
  }
34
+ if (this.field.Readonly) {
35
+ this.field.FormFormGroup.controls[this.field.Name].disable();
36
+ }
37
+ else {
38
+ this.field.FormFormGroup.controls[this.field.Name].enable();
39
+ }
40
+ }
41
+ checkVisibility(defaultValue) {
42
+ if (this.field.VisibleIf) {
43
+ this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, this.formulaObject);
44
+ if (!this.field.InListView && !this.field.Maintain_Value) {
45
+ this.record[this.field.Name] = defaultValue;
46
+ }
47
+ }
48
+ }
49
+ ngOnChanges(changes) {
34
50
  // Se viene modificato il valore di "ngModelInput" allora aggiorna l'input
35
51
  if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {
36
52
  this.record = changes['record'].currentValue;
@@ -41,15 +57,15 @@ export class BooleanFieldTemplateComponent {
41
57
  * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.
42
58
  */
43
59
  updateField() {
60
+ // Gestione del readonly
61
+ this.checkReadonly();
62
+ // Gestione del valore legato alla visibilità
63
+ this.checkVisibility(false);
64
+ // Gestione del valore calcolato da formula
44
65
  if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {
45
66
  this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, this.formulaObject);
46
67
  }
47
- if (this.field.VisibleIf) {
48
- this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, this.formulaObject);
49
- if (!this.field.InListView && !this.field.Maintain_Value) {
50
- this.record[this.field.Name] = false;
51
- }
52
- }
68
+ // Gestione del valore di default
53
69
  if (this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale && this.record[this.field.Name] == null) {
54
70
  this.record[this.field.Name] = this.field.DataGetter.DataGetterValue;
55
71
  }
@@ -77,4 +93,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
77
93
  }], recordChange: [{
78
94
  type: Output
79
95
  }] } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2Jvb2xlYW4tZmllbGQtdGVtcGxhdGUvYm9vbGVhbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2Jvb2xlYW4tZmllbGQtdGVtcGxhdGUvYm9vbGVhbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFekcsT0FBTyxFQUFnQixvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRWxHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7OztBQU94RSxNQUFNLE9BQU8sNkJBQTZCO0lBWXhDO1FBUlMsa0JBQWEsR0FBUSxFQUFFLENBQUM7UUFDdkIsaUJBQVksR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUsxRSx5QkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztJQUU1QixDQUFDO0lBRWpCLFVBQVU7UUFDUixrRkFBa0Y7UUFDbEYsSUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksU0FBUztZQUM1RSxJQUFJLENBQUMsYUFB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RUFBRTtZQUM5RyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO1NBQ3RFO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDOzsySEFuRVUsNkJBQTZCOytHQUE3Qiw2QkFBNkIsNE1DWjFDLGs5REE4Qk07NEZEbEJPLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSx3QkFBd0I7MEVBTXpCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBCb29sZWFuRmllbGQsIEJvb2xQcmVzZW50YW50aW9FbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9ib29sZWFuRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBJQmFzZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9pQmFzZUZpZWxkQ29tcG9uZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IERhdGFHZXR0ZXJUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdib29sZWFuLWZpZWxkLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYm9vbGVhbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYm9vbGVhbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCb29sZWFuRmllbGRUZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBJQmFzZUZpZWxkQ29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgZmllbGQ6IEJvb2xlYW5GaWVsZDtcclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZDtcclxuICBASW5wdXQoKSBmb3JtdWxhT2JqZWN0OiBhbnkgPSB7fTtcclxuICBAT3V0cHV0KCkgcmVjb3JkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4vL3ZhcmlhYmlsaSBwZXIgZ2VzdGlyZSBpbCBjc3MgZGVsbGEgbGFiZWwgZSBkZWwgZmllbGRcclxuRmllbGRzdHlsZU9iajogYW55O1xyXG5MYWJlbHN0eWxlT2JqOiBhbnk7XHJcblxyXG4gIEJvb2xQcmVzZW50YW50aW9FbnVtID0gQm9vbFByZXNlbnRhbnRpb0VudW07XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIGluaXRTdHlsZXMoKSB7XHJcbiAgICAvL0Z1bnppb25lIHBlciBwYXJzYXJlIGlsIGNhbXBvIHN0eWxlY3NzIGRlbGwnb2dnZXR0byBmaWVsZCBlZCBhcHBsaWNhcmxvIGFsbCdodG1sXHJcbiAgICBpZih0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gdW5kZWZpbmVkKSAgIFxyXG4gICAgdGhpcy5GaWVsZHN0eWxlT2JqPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyk7XHJcbiAgfVxyXG4gIFxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPT0gdW5kZWZpbmVkIHx8IHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gdGhpcy5maWVsZC5Jc1RyaXN0YXRlID8gbnVsbCA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlRmllbGQoKTtcclxuICAgIHRoaXMuaW5pdFN0eWxlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuUmVhZG9ubHlJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLlJlYWRvbmx5ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5SZWFkb25seUlmLCB0aGlzLnJlY29yZCwgdGhpcy5mb3JtdWxhT2JqZWN0KTtcclxuICAgIH1cclxuICAgIC8vIFNlIHZpZW5lIG1vZGlmaWNhdG8gaWwgdmFsb3JlIGRpIFwibmdNb2RlbElucHV0XCIgYWxsb3JhIGFnZ2lvcm5hIGwnaW5wdXRcclxuICAgIGlmIChjaGFuZ2VzWydyZWNvcmQnXSAhPSB1bmRlZmluZWQgJiYgY2hhbmdlc1sncmVjb3JkJ10uZmlyc3RDaGFuZ2UgPT0gZmFsc2UgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlKSAhPSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlY29yZCA9IGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkZWwgY2FtcG8gcXVhbmRvIHF1ZXN0byDDqCByYXBwcmVzZW50YXRvIGRhIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgaWYgKCh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtLk1hbnVhbGUgfHwgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bS5Gb3JtdWxhKSAmJiB0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuRm9ybXVsYSwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWVsZC5WaXNpYmxlSWYpIHtcclxuICAgICAgdGhpcy5maWVsZC5Jbkxpc3RWaWV3ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5WaXNpYmxlSWYsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgICBpZighdGhpcy5maWVsZC5Jbkxpc3RWaWV3ICYmICF0aGlzLmZpZWxkLk1haW50YWluX1ZhbHVlKXtcclxuICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdPWZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgICB9ICBcclxuICAgIFxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW0uTWFudWFsZSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09IG51bGwpIHtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWU7XHJcbiAgICB9ICAgIFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBlbWV0dGVyZSBsJ2V2ZW50byBjaGUgaWwgdmFsb3JlIGRlbCByZWNvcmQgw6ggY2FtYmlhdG8uXHJcbiAgICovXHJcbiAgb25SZWNvcmRWYWx1ZUNoYW5nZSgpIHtcclxuICAgIGlmICghdGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZmllbGQuRm9ybUZvcm1Hcm91cFwiPlxyXG5cclxuICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgVE9HR0xFIC0tPlxyXG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY29sb3I9XCJwcmltYXJ5XCIgKm5nSWY9XCJmaWVsZC5QcmVzZXRhdGlvblR5cGUgPT0gQm9vbFByZXNlbnRhbnRpb0VudW0uVG9nZ2xlXCJcclxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIiBbZGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZFwiIFtyZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJyZWNvcmRbZmllbGQuTmFtZV1cIiAobmdNb2RlbENoYW5nZSk9XCJvblJlY29yZFZhbHVlQ2hhbmdlKClcIj5cclxuICAgICAgICB7e2ZpZWxkLkRlc2NyaXB0aW9uICsgKGZpZWxkLlJlcXVpcmVkID8gXCIgKlwiIDogXCJcIil9fVxyXG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG5cclxuICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgUkFESU9CVVRUT04gLS0+XHJcbiAgICA8bWF0LWxhYmVsIFtuZ1N0eWxlXT1cIkxhYmVsc3R5bGVPYmpcIiBjbGFzcz1cIm1yLTNcIiAqbmdJZj1cImZpZWxkLlByZXNldGF0aW9uVHlwZSA9PSBCb29sUHJlc2VudGFudGlvRW51bVsnUmFkaW8gYnV0dG9uJ11cIj5cclxuICAgICAgICB7e2ZpZWxkLkRlc2NyaXB0aW9uICsgKGZpZWxkLlJlcXVpcmVkID8gXCIgKlwiIDogXCJcIil9fVxyXG4gICAgPC9tYXQtbGFiZWw+XHJcbiAgICA8bWF0LXJhZGlvLWdyb3VwICpuZ0lmPVwiZmllbGQuUHJlc2V0YXRpb25UeXBlID09IEJvb2xQcmVzZW50YW50aW9FbnVtWydSYWRpbyBidXR0b24nXVwiXHJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5OYW1lXCIgW2Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIiBbcmVxdWlyZWRdPVwiZmllbGQuUmVxdWlyZWRcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwicmVjb3JkW2ZpZWxkLk5hbWVdXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25SZWNvcmRWYWx1ZUNoYW5nZSgpXCI+XHJcbiAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJtci0yXCIgW3ZhbHVlXT1cInRydWVcIiBjb2xvcj1cInByaW1hcnlcIj4gU2kgPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwibXItMiBwcy0yXCIgW3ZhbHVlXT1cImZhbHNlXCIgY29sb3I9XCJwcmltYXJ5XCI+IE5vIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cIm1yLTIgcHMtMlwiIFt2YWx1ZV09XCJudWxsXCIgY29sb3I9XCJwcmltYXJ5XCIgKm5nSWY9XCJmaWVsZC5Jc1RyaXN0YXRlXCI+IE5EXHJcbiAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcblxyXG4gICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBDSEVDS0JPWCAtLT5cclxuICAgIDxtYXQtY2hlY2tib3ggY2xhc3M9XCJtci0yXCIgKm5nSWY9XCJmaWVsZC5QcmVzZXRhdGlvblR5cGUgPT0gQm9vbFByZXNlbnRhbnRpb0VudW0uQ2hlY2tib3hcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkXCIgW3JlcXVpcmVkXT1cImZpZWxkLlJlcXVpcmVkXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5OYW1lXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInJlY29yZFtmaWVsZC5OYW1lXVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uUmVjb3JkVmFsdWVDaGFuZ2UoKVwiPlxyXG4gICAgICAgIHt7ZmllbGQuRGVzY3JpcHRpb24gKyAoZmllbGQuUmVxdWlyZWQgPyBcIiAqXCIgOiBcIlwiKX19XHJcbiAgICA8L21hdC1jaGVja2JveD5cclxuXHJcbiAgICA8IS0tIFRPRE86IFZpc3VhbGl6emF6aW9uZSBcIlN0cmluZ2EgdHJ1ZSBvIGZhbHNlXCIgZSBcIk51bWVyaWNvIDAgbyAxXCIgPz8gLS0+XHJcbjwvZGl2PiJdfQ==
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2Jvb2xlYW4tZmllbGQtdGVtcGxhdGUvYm9vbGVhbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2Jvb2xlYW4tZmllbGQtdGVtcGxhdGUvYm9vbGVhbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFekcsT0FBTyxFQUFnQixvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRWxHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7OztBQU94RSxNQUFNLE9BQU8sNkJBQTZCO0lBWXhDO1FBUlMsa0JBQWEsR0FBUSxFQUFFLENBQUM7UUFDdkIsaUJBQVksR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUsxRSx5QkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztJQUU1QixDQUFDO0lBRWpCLFVBQVU7UUFDUixrRkFBa0Y7UUFDbEYsSUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksU0FBUztZQUM1RSxJQUFJLENBQUMsYUFB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bmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgQm9vbGVhbkZpZWxkLCBCb29sUHJlc2VudGFudGlvRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvYm9vbGVhbkZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgSUJhc2VGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvaUJhc2VGaWVsZENvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5pbXBvcnQgeyBEYXRhR2V0dGVyVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYm9vbGVhbi1maWVsZC10ZW1wbGF0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jvb2xlYW4tZmllbGQtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Jvb2xlYW4tZmllbGQtdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQm9vbGVhbkZpZWxkVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgSUJhc2VGaWVsZENvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIGZpZWxkOiBCb29sZWFuRmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQElucHV0KCkgZm9ybXVsYU9iamVjdDogYW55ID0ge307XHJcbiAgQE91dHB1dCgpIHJlY29yZENoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuLy92YXJpYWJpbGkgcGVyIGdlc3RpcmUgaWwgY3NzIGRlbGxhIGxhYmVsIGUgZGVsIGZpZWxkXHJcbkZpZWxkc3R5bGVPYmo6IGFueTtcclxuTGFiZWxzdHlsZU9iajogYW55O1xyXG5cclxuICBCb29sUHJlc2VudGFudGlvRW51bSA9IEJvb2xQcmVzZW50YW50aW9FbnVtO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBpbml0U3R5bGVzKCkge1xyXG4gICAgLy9GdW56aW9uZSBwZXIgcGFyc2FyZSBpbCBjYW1wbyBzdHlsZWNzcyBkZWxsJ29nZ2V0dG8gZmllbGQgZWQgYXBwbGljYXJsbyBhbGwnaHRtbFxyXG4gICAgaWYodGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IG51bGwgfHwgdGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IHVuZGVmaW5lZCkgICBcclxuICAgIHRoaXMuRmllbGRzdHlsZU9iaj0gVXRpbGl0eUhlbHBlclNlcnZpY2UuaW5pdFN0eWxlcyh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MpO1xyXG4gIH1cclxuICBcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09IHVuZGVmaW5lZCB8fCB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09IG51bGwpIHtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IHRoaXMuZmllbGQuSXNUcmlzdGF0ZSA/IG51bGwgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB0aGlzLmluaXRTdHlsZXMoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrUmVhZG9ubHkoKXtcclxuICAgIGlmICh0aGlzLmZpZWxkLlJlYWRvbmx5SWYpIHtcclxuICAgICAgdGhpcy5maWVsZC5SZWFkb25seSA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuUmVhZG9ubHlJZiwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmZpZWxkLlJlYWRvbmx5KXtcclxuICAgICAgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQuTmFtZV0uZGlzYWJsZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQuTmFtZV0uZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNoZWNrVmlzaWJpbGl0eShkZWZhdWx0VmFsdWU6IGFueSl7XHJcbiAgICBcclxuICAgIGlmICh0aGlzLmZpZWxkLlZpc2libGVJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLlZpc2libGVJZiwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICAgIGlmKCF0aGlzLmZpZWxkLkluTGlzdFZpZXcgJiYgIXRoaXMuZmllbGQuTWFpbnRhaW5fVmFsdWUpe1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV09ZGVmYXVsdFZhbHVlO1xyXG4gICAgICB9ICBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIC8vIFNlIHZpZW5lIG1vZGlmaWNhdG8gaWwgdmFsb3JlIGRpIFwibmdNb2RlbElucHV0XCIgYWxsb3JhIGFnZ2lvcm5hIGwnaW5wdXRcclxuICAgIGlmIChjaGFuZ2VzWydyZWNvcmQnXSAhPSB1bmRlZmluZWQgJiYgY2hhbmdlc1sncmVjb3JkJ10uZmlyc3RDaGFuZ2UgPT0gZmFsc2UgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlKSAhPSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlY29yZCA9IGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkZWwgY2FtcG8gcXVhbmRvIHF1ZXN0byDDqCByYXBwcmVzZW50YXRvIGRhIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgLy8gR2VzdGlvbmUgZGVsIHJlYWRvbmx5XHJcbiAgICB0aGlzLmNoZWNrUmVhZG9ubHkoKTtcclxuICAgIC8vIEdlc3Rpb25lIGRlbCB2YWxvcmUgbGVnYXRvIGFsbGEgdmlzaWJpbGl0w6BcclxuICAgIHRoaXMuY2hlY2tWaXNpYmlsaXR5KGZhbHNlKTtcclxuICAgIC8vIEdlc3Rpb25lIGRlbCB2YWxvcmUgY2FsY29sYXRvIGRhIGZvcm11bGFcclxuICAgIGlmICgodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlIHx8IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW0uRm9ybXVsYSkgJiYgdGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgfVxyXG4gICAgLy8gR2VzdGlvbmUgZGVsIHZhbG9yZSBkaSBkZWZhdWx0XHJcbiAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZTtcclxuICAgIH0gICAgXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVtZXR0ZXJlIGwnZXZlbnRvIGNoZSBpbCB2YWxvcmUgZGVsIHJlY29yZCDDqCBjYW1iaWF0by5cclxuICAgKi9cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKCkge1xyXG4gICAgaWYgKCF0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgW2Zvcm1Hcm91cF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwXCI+XHJcblxyXG4gICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBUT0dHTEUgLS0+XHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjb2xvcj1cInByaW1hcnlcIiAqbmdJZj1cImZpZWxkLlByZXNldGF0aW9uVHlwZSA9PSBCb29sUHJlc2VudGFudGlvRW51bS5Ub2dnbGVcIlxyXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQuTmFtZVwiIFtkaXNhYmxlZF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkXCIgW3JlcXVpcmVkXT1cImZpZWxkLlJlcXVpcmVkXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInJlY29yZFtmaWVsZC5OYW1lXVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uUmVjb3JkVmFsdWVDaGFuZ2UoKVwiPlxyXG4gICAgICAgIHt7ZmllbGQuRGVzY3JpcHRpb24gKyAoZmllbGQuUmVxdWlyZWQgPyBcIiAqXCIgOiBcIlwiKX19XHJcbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcblxyXG4gICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBSQURJT0JVVFRPTiAtLT5cclxuICAgIDxtYXQtbGFiZWwgW25nU3R5bGVdPVwiTGFiZWxzdHlsZU9ialwiIGNsYXNzPVwibXItM1wiICpuZ0lmPVwiZmllbGQuUHJlc2V0YXRpb25UeXBlID09IEJvb2xQcmVzZW50YW50aW9FbnVtWydSYWRpbyBidXR0b24nXVwiPlxyXG4gICAgICAgIHt7ZmllbGQuRGVzY3JpcHRpb24gKyAoZmllbGQuUmVxdWlyZWQgPyBcIiAqXCIgOiBcIlwiKX19XHJcbiAgICA8L21hdC1sYWJlbD5cclxuICAgIDxtYXQtcmFkaW8tZ3JvdXAgKm5nSWY9XCJmaWVsZC5QcmVzZXRhdGlvblR5cGUgPT0gQm9vbFByZXNlbnRhbnRpb0VudW1bJ1JhZGlvIGJ1dHRvbiddXCJcclxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIiBbZGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZFwiIFtyZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJyZWNvcmRbZmllbGQuTmFtZV1cIiAobmdNb2RlbENoYW5nZSk9XCJvblJlY29yZFZhbHVlQ2hhbmdlKClcIj5cclxuICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cIm1yLTJcIiBbdmFsdWVdPVwidHJ1ZVwiIGNvbG9yPVwicHJpbWFyeVwiPiBTaSA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJtci0yIHBzLTJcIiBbdmFsdWVdPVwiZmFsc2VcIiBjb2xvcj1cInByaW1hcnlcIj4gTm8gPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwibXItMiBwcy0yXCIgW3ZhbHVlXT1cIm51bGxcIiBjb2xvcj1cInByaW1hcnlcIiAqbmdJZj1cImZpZWxkLklzVHJpc3RhdGVcIj4gTkRcclxuICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICA8L21hdC1yYWRpby1ncm91cD5cclxuXHJcbiAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBIENIRUNLQk9YIC0tPlxyXG4gICAgPG1hdC1jaGVja2JveCBjbGFzcz1cIm1yLTJcIiAqbmdJZj1cImZpZWxkLlByZXNldGF0aW9uVHlwZSA9PSBCb29sUHJlc2VudGFudGlvRW51bS5DaGVja2JveFwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIiBbcmVxdWlyZWRdPVwiZmllbGQuUmVxdWlyZWRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwicmVjb3JkW2ZpZWxkLk5hbWVdXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25SZWNvcmRWYWx1ZUNoYW5nZSgpXCI+XHJcbiAgICAgICAge3tmaWVsZC5EZXNjcmlwdGlvbiArIChmaWVsZC5SZXF1aXJlZCA/IFwiICpcIiA6IFwiXCIpfX1cclxuICAgIDwvbWF0LWNoZWNrYm94PlxyXG5cclxuICAgIDwhLS0gVE9ETzogVmlzdWFsaXp6YXppb25lIFwiU3RyaW5nYSB0cnVlIG8gZmFsc2VcIiBlIFwiTnVtZXJpY28gMCBvIDFcIiA/PyAtLT5cclxuPC9kaXY+Il19