gamma-app-controller 1.1.3 → 1.1.5

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 (31) hide show
  1. package/esm2020/lib/application-controller/application-content.service.mjs +40 -1
  2. package/esm2020/lib/application-controller/application-controller.module.mjs +24 -5
  3. package/esm2020/lib/application-controller/application-dataset-component/application-dataset/application-dataset.component.mjs +6 -6
  4. package/esm2020/lib/application-controller/application-filter/application-filter.component.mjs +2 -2
  5. package/esm2020/lib/application-controller/application-menu-controller/application-create-menu/application-create-menu.component.mjs +104 -27
  6. package/esm2020/lib/application-controller/application-menu-controller/application-menus/application-menus.component.mjs +95 -7
  7. package/esm2020/lib/application-controller/application-metric-config/create-metrics/create-metrics.component.mjs +152 -0
  8. package/esm2020/lib/application-controller/application-metric-config/ofline-metrics/ofline-metrics.component.mjs +77 -0
  9. package/esm2020/lib/application-controller/application-metric-config/online-metrics/online-metrics.component.mjs +169 -0
  10. package/esm2020/lib/application-controller/application-view-components/application-views/application-views.component.mjs +3 -3
  11. package/esm2020/lib/application-controller/common-header/common-header.component.mjs +6 -3
  12. package/esm2020/lib/application-controller/common.mjs +21 -1
  13. package/esm2020/lib/application-controller/page-controller/page-config/page-config.component.mjs +34 -8
  14. package/esm2020/lib/application-controller/page-controller/page-controller/page-controller.component.mjs +3 -3
  15. package/esm2020/lib/application-controller/shared/advanced-component/app-advance-header/app-header.component.mjs +1 -3
  16. package/esm2020/public-api.mjs +4 -1
  17. package/fesm2015/gamma-app-controller.mjs +677 -69
  18. package/fesm2015/gamma-app-controller.mjs.map +1 -1
  19. package/fesm2020/gamma-app-controller.mjs +691 -69
  20. package/fesm2020/gamma-app-controller.mjs.map +1 -1
  21. package/lib/application-controller/application-content.service.d.ts +5 -0
  22. package/lib/application-controller/application-controller.module.d.ts +14 -11
  23. package/lib/application-controller/application-menu-controller/application-create-menu/application-create-menu.component.d.ts +15 -5
  24. package/lib/application-controller/application-menu-controller/application-menus/application-menus.component.d.ts +14 -1
  25. package/lib/application-controller/application-metric-config/create-metrics/create-metrics.component.d.ts +130 -0
  26. package/lib/application-controller/application-metric-config/ofline-metrics/ofline-metrics.component.d.ts +42 -0
  27. package/lib/application-controller/application-metric-config/online-metrics/online-metrics.component.d.ts +49 -0
  28. package/lib/application-controller/common-header/common-header.component.d.ts +1 -0
  29. package/lib/application-controller/common.d.ts +4 -0
  30. package/package.json +1 -1
  31. package/public-api.d.ts +3 -0
@@ -1,23 +1,111 @@
1
1
  import { Component } from '@angular/core';
2
+ import { confirm } from 'devextreme/ui/dialog';
2
3
  import * as i0 from "@angular/core";
3
4
  import * as i1 from "../../common";
4
5
  import * as i2 from "@angular/router";
5
- import * as i3 from "../../common-header/common-header.component";
6
+ import * as i3 from "../../application-content.service";
7
+ import * as i4 from "ngx-toastr";
8
+ import * as i5 from "@angular/common";
9
+ import * as i6 from "devextreme-angular/core";
10
+ import * as i7 from "devextreme-angular/ui/nested";
11
+ import * as i8 from "devextreme-angular/ui/data-grid";
12
+ import * as i9 from "../../shared/loader/loader.component";
13
+ import * as i10 from "../../common-header/common-header.component";
6
14
  export class ApplicationMenusComponent {
7
- constructor(commonService, router) {
15
+ constructor(commonService, router, commonservice, service, toasterService) {
8
16
  this.commonService = commonService;
9
17
  this.router = router;
18
+ this.commonservice = commonservice;
19
+ this.service = service;
20
+ this.toasterService = toasterService;
10
21
  }
11
22
  ngOnInit() {
23
+ this.isLoader = true;
24
+ this.getParentMenuList();
25
+ }
26
+ getParentMenuList() {
27
+ this.paparentMenuDatasource = [];
28
+ this.service.getListOfParentAppMenu().subscribe({
29
+ next: (data) => {
30
+ data.forEach(element => {
31
+ element['attributeValues'] = (element.measures && element.measures.length !== 0) ? this.getUsers(element.measures) : "";
32
+ });
33
+ this.paparentMenuDatasource = data;
34
+ this.isLoader = false;
35
+ const userName = "admin";
36
+ this.treviewDatasource = this.buildMenuTree(userName, data);
37
+ }, error: (error) => {
38
+ this.isLoader = false;
39
+ }
40
+ });
41
+ }
42
+ editMenu(item) {
43
+ let navigationExtra = {
44
+ queryParams: {
45
+ "contentType": "edit",
46
+ "menuId": item.menuId
47
+ }
48
+ };
49
+ this.router.navigate(['/apps/controlPanel/menuController/editMenu'], navigationExtra);
50
+ }
51
+ deleteMenu(item) {
52
+ let result = confirm("<i>Are You Sure?</i>", "Delete App Menuconfig ");
53
+ result.then((dialogResult) => {
54
+ if (dialogResult) {
55
+ this.service.deleteAppMenuConfig(item.menuId).subscribe({
56
+ next: (data) => {
57
+ this.toasterService.success("Muse Successfully Deleted");
58
+ this.getParentMenuList();
59
+ }, error: (err) => {
60
+ this.toasterService.error('Unexpected Server Exception. Please contact System Admin.', 'App Menu Config');
61
+ }
62
+ });
63
+ }
64
+ });
65
+ }
66
+ getUsers(items) {
67
+ const att = [];
68
+ items.forEach(element => {
69
+ att.push(element.attributeValues);
70
+ });
71
+ return att.join(',');
12
72
  }
13
73
  createNewMenu() {
14
74
  this.router.navigate(['/apps/controlPanel/menuController/createMenu']);
15
75
  }
76
+ buildMenuTree(userName, menuData) {
77
+ let filteredMenus = menuData.filter(menu => !userName || (menu.measures && menu.measures.some(measure => measure.attributeValues.includes(userName))));
78
+ const menuMap = new Map();
79
+ const menuTree = [];
80
+ filteredMenus.forEach(menu => {
81
+ menuMap.set(menu.childMenuTid || menu.parentMenuTid, {
82
+ id: menu.menuId,
83
+ title: menu.title,
84
+ icon: menu.icon,
85
+ type: menu.type,
86
+ ...(menu.subtitle && { subtitle: menu.subtitle }),
87
+ ...(menu.link && { link: menu.link.replace(/^\/+/, '') }),
88
+ children: []
89
+ });
90
+ });
91
+ filteredMenus.forEach(menu => {
92
+ if (menu.parentMenuTid && menu.childMenuTid) {
93
+ const parent = menuMap.get(menu.parentMenuTid);
94
+ if (parent) {
95
+ parent.children.push(menuMap.get(menu.childMenuTid));
96
+ }
97
+ }
98
+ else {
99
+ menuTree.push(menuMap.get(menu.parentMenuTid));
100
+ }
101
+ });
102
+ return menuTree;
103
+ }
16
104
  }
17
- ApplicationMenusComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ApplicationMenusComponent, deps: [{ token: i1.CommonService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component });
18
- ApplicationMenusComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ApplicationMenusComponent, selector: "lib-application-menus", ngImport: i0, template: "<div class=\"flex flex-col flex-auto min-w-0\">\n\n <lib-common-header [pageTitle]=\"'Application Menu Controller'\"></lib-common-header>\n\n <div class=\"p-4 w-full\">\n <div class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6 class=\"mb-2 text-lg tracking-tight text-gray-900\n dark:text-white border-b pb-3 flex items-center\">\n <div class=\"ml-auto\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"createNewMenu()\">\n Add Menu Content\n </button>\n </div>\n </h6>\n <!-- <app-loader *ngIf=\"isLoader\"></app-loader> -->\n <!-- <dx-data-grid [columnAutoWidth]=\"true\" [dataSource]=\"componentViewTableDataSource\"\n [hoverStateEnabled]=\"true\" *ngIf=\"!isLoader\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\"\n [showColumnLines]=\"true\" [showRowLines]=\"true\" id=\"gridContainer\">\n <dxo-paging [pageSize]=\"10\"></dxo-paging>\n <dxo-export [enabled]=\"true\"></dxo-export>\n <dxo-search-panel [highlightCaseSensitive]=\"true\" [visible]=\"true\">\n </dxo-search-panel>\n <dxi-column dataField=\"viewName\"></dxi-column>\n <dxi-column dataField=\"kpiConfig.formate\"></dxi-column>\n <dxi-column dataField=\"creationDate\"></dxi-column>\n <dxi-column dataField=\"action\" cellTemplate=\"cellTemplate\" [fixed]=\"true\"\n fixedPosition=\"right\"></dxi-column>\n <div *dxTemplate=\"let data of 'cellTemplate'\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"editViews(data.data)\">\n Edit\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"deleteDataset(data.data)\">\n Delete\n </button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"exportJsonFile(data.data)\"\n title=\"Export View\">\n <i class=\"fa fa-sign-out\"></i>\n </button>\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"copyJsonFile(data.data)\"\n title=\"Copy as Json\">\n <i class=\"fa fa-files-o\"></i>\n </button>\n </div>\n </dx-data-grid> -->\n </div>\n </div>\n\n</div>\n\n<!-- \n<dx-popup [(visible)]=\"isPopupVisible\" [dragEnabled]=\"false\" [closeOnOutsideClick]=\"false\" [showTitle]=\"true\"\n title=\"Model Editor\" [width]=\"1000\" [height]=\"620\">\n\n <div>\n <button (click)=\"hidePopup()\" class=\"btn btn-secondary\"></button>\n <div class=\"m-2 flex items-center justify-between\">\n <input type=\"file\" #fileInput accept=\".json\"\n class=\"block w-3/5 p-2 text-sm text-gray-400 border border-gray-700 rounded-lg bg-gray-800 focus:ring-blue-500 focus:border-blue-500\"\n (change)=\"onjsonFileSelected($event)\">\n <button (click)=\"submitView()\" class=\"{{commonService.btn_success_md}} mr-4\">Submit</button>\n\n </div>\n <textarea [(ngModel)]=\"jsonContent\"\n class=\"w-full h-100 p-2 border border-gray-700 rounded-lg bg-gray-800 text-gray-400\"></textarea>\n </div>\n</dx-popup> -->", styles: [""], dependencies: [{ kind: "component", type: i3.CommonHeaderComponent, selector: "lib-common-header", inputs: ["pageTitle"] }] });
105
+ ApplicationMenusComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ApplicationMenusComponent, deps: [{ token: i1.CommonService }, { token: i2.Router }, { token: i1.CommonService }, { token: i3.ApplicationContentService }, { token: i4.ToastrService }], target: i0.ɵɵFactoryTarget.Component });
106
+ ApplicationMenusComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ApplicationMenusComponent, selector: "lib-application-menus", ngImport: i0, template: "<div class=\"flex flex-col flex-auto min-w-0\">\n\n <lib-common-header [pageTitle]=\"'Application Menu Controller'\"></lib-common-header>\n\n <div class=\"p-4 w-full\">\n <div class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6 class=\"mb-2 text-lg tracking-tight text-gray-900\n dark:text-white border-b pb-3 flex items-center\">\n <div class=\"ml-auto\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"createNewMenu()\">\n Add Menu Content\n </button>\n </div>\n </h6>\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <dx-data-grid [columnAutoWidth]=\"true\" [dataSource]=\"paparentMenuDatasource\"\n [hoverStateEnabled]=\"true\" *ngIf=\"!isLoader\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\"\n [showColumnLines]=\"true\" [showRowLines]=\"true\" id=\"gridContainer\">\n <dxo-paging [pageSize]=\"10\"></dxo-paging>\n <dxo-export [enabled]=\"true\"></dxo-export>\n <dxo-search-panel [highlightCaseSensitive]=\"true\" [visible]=\"true\">\n </dxo-search-panel>\n <dxi-column dataField=\"title\"></dxi-column>\n <dxi-column dataField=\"link\"></dxi-column>\n <dxi-column dataField=\"menuType\"></dxi-column>\n <dxi-column dataField=\"type\"></dxi-column>\n <dxi-column dataField=\"icon\"></dxi-column>\n <dxi-column dataField=\"parentMenuTid\"></dxi-column>\n <dxi-column dataField=\"childMenuTid\"></dxi-column>\n <dxi-column dataField=\"attributeValues\"></dxi-column>\n <dxi-column dataField=\"action\" cellTemplate=\"cellTemplate\" [fixed]=\"true\"\n fixedPosition=\"right\"></dxi-column>\n <div *dxTemplate=\"let data of 'cellTemplate'\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"editMenu(data.data)\">\n Edit\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"deleteMenu(data.data)\">\n Delete\n </button>\n \n </div>\n </dx-data-grid>\n </div>\n </div>\n\n <!-- <div class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6 class=\"mb-2 text-lg tracking-tight text-gray-900\n dark:text-white border-b pb-3 flex items-center\">\n Menu\n <div class=\"ml-auto\">\n \n </div>\n </h6>\n <div class=\"\">\n <pre><code>{{treviewDatasource | json}}</code></pre>\n </div>\n \n </div> -->\n\n</div>\n\n<!-- \n<dx-popup [(visible)]=\"isPopupVisible\" [dragEnabled]=\"false\" [closeOnOutsideClick]=\"false\" [showTitle]=\"true\"\n title=\"Model Editor\" [width]=\"1000\" [height]=\"620\">\n\n <div>\n <button (click)=\"hidePopup()\" class=\"btn btn-secondary\"></button>\n <div class=\"m-2 flex items-center justify-between\">\n <input type=\"file\" #fileInput accept=\".json\"\n class=\"block w-3/5 p-2 text-sm text-gray-400 border border-gray-700 rounded-lg bg-gray-800 focus:ring-blue-500 focus:border-blue-500\"\n (change)=\"onjsonFileSelected($event)\">\n <button (click)=\"submitView()\" class=\"{{commonService.btn_success_md}} mr-4\">Submit</button>\n\n </div>\n <textarea [(ngModel)]=\"jsonContent\"\n class=\"w-full h-100 p-2 border border-gray-700 rounded-lg bg-gray-800 text-gray-400\"></textarea>\n </div>\n</dx-popup> -->", styles: [""], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i7.DxoExportComponent, selector: "dxo-export", inputs: ["backgroundColor", "enabled", "fileName", "formats", "margin", "printingEnabled", "proxyUrl", "svgToCanvas", "allowExportSelectedData", "customizeExcelCell", "excelFilterEnabled", "excelWrapTextEnabled", "ignoreExcelErrors", "texts"] }, { kind: "component", type: i8.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "customizeExportData", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "focusStateEnabled", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExported", "onExporting", "onFileSaving", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "customizeExportDataChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "focusStateEnabledChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i7.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i7.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i7.DxoSearchPanelComponent, selector: "dxo-search-panel", inputs: ["highlightCaseSensitive", "highlightSearchText", "placeholder", "searchVisibleColumnsOnly", "text", "visible", "width"], outputs: ["textChange"] }, { kind: "component", type: i9.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i10.CommonHeaderComponent, selector: "lib-common-header", inputs: ["pageTitle"] }] });
19
107
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ApplicationMenusComponent, decorators: [{
20
108
  type: Component,
21
- args: [{ selector: 'lib-application-menus', template: "<div class=\"flex flex-col flex-auto min-w-0\">\n\n <lib-common-header [pageTitle]=\"'Application Menu Controller'\"></lib-common-header>\n\n <div class=\"p-4 w-full\">\n <div class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6 class=\"mb-2 text-lg tracking-tight text-gray-900\n dark:text-white border-b pb-3 flex items-center\">\n <div class=\"ml-auto\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"createNewMenu()\">\n Add Menu Content\n </button>\n </div>\n </h6>\n <!-- <app-loader *ngIf=\"isLoader\"></app-loader> -->\n <!-- <dx-data-grid [columnAutoWidth]=\"true\" [dataSource]=\"componentViewTableDataSource\"\n [hoverStateEnabled]=\"true\" *ngIf=\"!isLoader\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\"\n [showColumnLines]=\"true\" [showRowLines]=\"true\" id=\"gridContainer\">\n <dxo-paging [pageSize]=\"10\"></dxo-paging>\n <dxo-export [enabled]=\"true\"></dxo-export>\n <dxo-search-panel [highlightCaseSensitive]=\"true\" [visible]=\"true\">\n </dxo-search-panel>\n <dxi-column dataField=\"viewName\"></dxi-column>\n <dxi-column dataField=\"kpiConfig.formate\"></dxi-column>\n <dxi-column dataField=\"creationDate\"></dxi-column>\n <dxi-column dataField=\"action\" cellTemplate=\"cellTemplate\" [fixed]=\"true\"\n fixedPosition=\"right\"></dxi-column>\n <div *dxTemplate=\"let data of 'cellTemplate'\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"editViews(data.data)\">\n Edit\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"deleteDataset(data.data)\">\n Delete\n </button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"exportJsonFile(data.data)\"\n title=\"Export View\">\n <i class=\"fa fa-sign-out\"></i>\n </button>\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"copyJsonFile(data.data)\"\n title=\"Copy as Json\">\n <i class=\"fa fa-files-o\"></i>\n </button>\n </div>\n </dx-data-grid> -->\n </div>\n </div>\n\n</div>\n\n<!-- \n<dx-popup [(visible)]=\"isPopupVisible\" [dragEnabled]=\"false\" [closeOnOutsideClick]=\"false\" [showTitle]=\"true\"\n title=\"Model Editor\" [width]=\"1000\" [height]=\"620\">\n\n <div>\n <button (click)=\"hidePopup()\" class=\"btn btn-secondary\"></button>\n <div class=\"m-2 flex items-center justify-between\">\n <input type=\"file\" #fileInput accept=\".json\"\n class=\"block w-3/5 p-2 text-sm text-gray-400 border border-gray-700 rounded-lg bg-gray-800 focus:ring-blue-500 focus:border-blue-500\"\n (change)=\"onjsonFileSelected($event)\">\n <button (click)=\"submitView()\" class=\"{{commonService.btn_success_md}} mr-4\">Submit</button>\n\n </div>\n <textarea [(ngModel)]=\"jsonContent\"\n class=\"w-full h-100 p-2 border border-gray-700 rounded-lg bg-gray-800 text-gray-400\"></textarea>\n </div>\n</dx-popup> -->" }]
22
- }], ctorParameters: function () { return [{ type: i1.CommonService }, { type: i2.Router }]; } });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tbWVudXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2FwcGxpY2F0aW9uLW1lbnUtY29udHJvbGxlci9hcHBsaWNhdGlvbi1tZW51cy9hcHBsaWNhdGlvbi1tZW51cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvYXBwbGljYXRpb24tbWVudS1jb250cm9sbGVyL2FwcGxpY2F0aW9uLW1lbnVzL2FwcGxpY2F0aW9uLW1lbnVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBU2xELE1BQU0sT0FBTyx5QkFBeUI7SUFFcEMsWUFDUyxhQUE0QixFQUMzQixNQUFjO1FBRGYsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUNwQixDQUFDO0lBRUwsUUFBUTtJQUNSLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDLENBQUE7SUFFeEUsQ0FBQzs7c0hBYlUseUJBQXlCOzBHQUF6Qix5QkFBeUIsNkRDVHRDLDZoSEFpRWU7MkZEeERGLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItYXBwbGljYXRpb24tbWVudXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwbGljYXRpb24tbWVudXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hcHBsaWNhdGlvbi1tZW51cy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb25NZW51c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgY3JlYXRlTmV3TWVudSgpe1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FwcHMvY29udHJvbFBhbmVsL21lbnVDb250cm9sbGVyL2NyZWF0ZU1lbnUnXSlcbiAgIFxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wXCI+XG5cbiAgICA8bGliLWNvbW1vbi1oZWFkZXIgW3BhZ2VUaXRsZV09XCInQXBwbGljYXRpb24gTWVudSBDb250cm9sbGVyJ1wiPjwvbGliLWNvbW1vbi1oZWFkZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwicC00IHctZnVsbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibS0zIHAtNCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbGcgc2hhZG93LW1kIGRhcms6YmctZ3JheS04MDAgZGFyazpib3JkZXItZ3JheS03MDBcIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cIm1iLTIgdGV4dC1sZyB0cmFja2luZy10aWdodCB0ZXh0LWdyYXktOTAwXG4gICAgICAgICAgICAgICAgZGFyazp0ZXh0LXdoaXRlIGJvcmRlci1iIHBiLTMgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX1cIiAoY2xpY2spPVwiY3JlYXRlTmV3TWVudSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBBZGQgTWVudSBDb250ZW50XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9oNj5cbiAgICAgICAgICAgIDwhLS0gPGFwcC1sb2FkZXIgKm5nSWY9XCJpc0xvYWRlclwiPjwvYXBwLWxvYWRlcj4gLS0+XG4gICAgICAgICAgICA8IS0tIDxkeC1kYXRhLWdyaWQgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCIgW2RhdGFTb3VyY2VdPVwiY29tcG9uZW50Vmlld1RhYmxlRGF0YVNvdXJjZVwiXG4gICAgICAgICAgICAgICAgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIiAqbmdJZj1cIiFpc0xvYWRlclwiIFtzZWxlY3RlZFJvd0tleXNdPVwiW11cIiBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dDb2x1bW5MaW5lc109XCJ0cnVlXCIgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCIgaWQ9XCJncmlkQ29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGR4by1wYWdpbmcgW3BhZ2VTaXplXT1cIjEwXCI+PC9keG8tcGFnaW5nPlxuICAgICAgICAgICAgICAgIDxkeG8tZXhwb3J0IFtlbmFibGVkXT1cInRydWVcIj48L2R4by1leHBvcnQ+XG4gICAgICAgICAgICAgICAgPGR4by1zZWFyY2gtcGFuZWwgW2hpZ2hsaWdodENhc2VTZW5zaXRpdmVdPVwidHJ1ZVwiIFt2aXNpYmxlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8L2R4by1zZWFyY2gtcGFuZWw+XG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwidmlld05hbWVcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwia3BpQ29uZmlnLmZvcm1hdGVcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiY3JlYXRpb25EYXRlXCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImFjdGlvblwiIGNlbGxUZW1wbGF0ZT1cImNlbGxUZW1wbGF0ZVwiIFtmaXhlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgZml4ZWRQb3NpdGlvbj1cInJpZ2h0XCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZGF0YSBvZiAnY2VsbFRlbXBsYXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX1cIiAoY2xpY2spPVwiZWRpdFZpZXdzKGRhdGEuZGF0YSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2Rhbmdlcl9tZH19XCIgKGNsaWNrKT1cImRlbGV0ZURhdGFzZXQoZGF0YS5kYXRhKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX1cIiAoY2xpY2spPVwiZXhwb3J0SnNvbkZpbGUoZGF0YS5kYXRhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkV4cG9ydCBWaWV3XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNpZ24tb3V0XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fd2FybmluZ19tZH19XCIgKGNsaWNrKT1cImNvcHlKc29uRmlsZShkYXRhLmRhdGEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ29weSBhcyBKc29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbGVzLW9cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9keC1kYXRhLWdyaWQ+IC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuPC9kaXY+XG5cbjwhLS0gXG48ZHgtcG9wdXAgWyh2aXNpYmxlKV09XCJpc1BvcHVwVmlzaWJsZVwiIFtkcmFnRW5hYmxlZF09XCJmYWxzZVwiIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cImZhbHNlXCIgW3Nob3dUaXRsZV09XCJ0cnVlXCJcbiAgICB0aXRsZT1cIk1vZGVsIEVkaXRvclwiIFt3aWR0aF09XCIxMDAwXCIgW2hlaWdodF09XCI2MjBcIj5cblxuICAgIDxkaXY+XG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cImhpZGVQb3B1cCgpXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiPjwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibS0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgI2ZpbGVJbnB1dCBhY2NlcHQ9XCIuanNvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJibG9jayB3LTMvNSBwLTIgdGV4dC1zbSB0ZXh0LWdyYXktNDAwIGJvcmRlciBib3JkZXItZ3JheS03MDAgcm91bmRlZC1sZyBiZy1ncmF5LTgwMCBmb2N1czpyaW5nLWJsdWUtNTAwIGZvY3VzOmJvcmRlci1ibHVlLTUwMFwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbmpzb25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic3VibWl0VmlldygpXCIgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3N1Y2Nlc3NfbWR9fSBtci00XCI+U3VibWl0PC9idXR0b24+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDx0ZXh0YXJlYSBbKG5nTW9kZWwpXT1cImpzb25Db250ZW50XCJcbiAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGgtMTAwIHAtMiAgYm9yZGVyIGJvcmRlci1ncmF5LTcwMCByb3VuZGVkLWxnIGJnLWdyYXktODAwIHRleHQtZ3JheS00MDBcIj48L3RleHRhcmVhPlxuICAgIDwvZGl2PlxuPC9keC1wb3B1cD4gLS0+Il19
109
+ args: [{ selector: 'lib-application-menus', template: "<div class=\"flex flex-col flex-auto min-w-0\">\n\n <lib-common-header [pageTitle]=\"'Application Menu Controller'\"></lib-common-header>\n\n <div class=\"p-4 w-full\">\n <div class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6 class=\"mb-2 text-lg tracking-tight text-gray-900\n dark:text-white border-b pb-3 flex items-center\">\n <div class=\"ml-auto\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"createNewMenu()\">\n Add Menu Content\n </button>\n </div>\n </h6>\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <dx-data-grid [columnAutoWidth]=\"true\" [dataSource]=\"paparentMenuDatasource\"\n [hoverStateEnabled]=\"true\" *ngIf=\"!isLoader\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\"\n [showColumnLines]=\"true\" [showRowLines]=\"true\" id=\"gridContainer\">\n <dxo-paging [pageSize]=\"10\"></dxo-paging>\n <dxo-export [enabled]=\"true\"></dxo-export>\n <dxo-search-panel [highlightCaseSensitive]=\"true\" [visible]=\"true\">\n </dxo-search-panel>\n <dxi-column dataField=\"title\"></dxi-column>\n <dxi-column dataField=\"link\"></dxi-column>\n <dxi-column dataField=\"menuType\"></dxi-column>\n <dxi-column dataField=\"type\"></dxi-column>\n <dxi-column dataField=\"icon\"></dxi-column>\n <dxi-column dataField=\"parentMenuTid\"></dxi-column>\n <dxi-column dataField=\"childMenuTid\"></dxi-column>\n <dxi-column dataField=\"attributeValues\"></dxi-column>\n <dxi-column dataField=\"action\" cellTemplate=\"cellTemplate\" [fixed]=\"true\"\n fixedPosition=\"right\"></dxi-column>\n <div *dxTemplate=\"let data of 'cellTemplate'\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"editMenu(data.data)\">\n Edit\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"deleteMenu(data.data)\">\n Delete\n </button>\n \n </div>\n </dx-data-grid>\n </div>\n </div>\n\n <!-- <div class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6 class=\"mb-2 text-lg tracking-tight text-gray-900\n dark:text-white border-b pb-3 flex items-center\">\n Menu\n <div class=\"ml-auto\">\n \n </div>\n </h6>\n <div class=\"\">\n <pre><code>{{treviewDatasource | json}}</code></pre>\n </div>\n \n </div> -->\n\n</div>\n\n<!-- \n<dx-popup [(visible)]=\"isPopupVisible\" [dragEnabled]=\"false\" [closeOnOutsideClick]=\"false\" [showTitle]=\"true\"\n title=\"Model Editor\" [width]=\"1000\" [height]=\"620\">\n\n <div>\n <button (click)=\"hidePopup()\" class=\"btn btn-secondary\"></button>\n <div class=\"m-2 flex items-center justify-between\">\n <input type=\"file\" #fileInput accept=\".json\"\n class=\"block w-3/5 p-2 text-sm text-gray-400 border border-gray-700 rounded-lg bg-gray-800 focus:ring-blue-500 focus:border-blue-500\"\n (change)=\"onjsonFileSelected($event)\">\n <button (click)=\"submitView()\" class=\"{{commonService.btn_success_md}} mr-4\">Submit</button>\n\n </div>\n <textarea [(ngModel)]=\"jsonContent\"\n class=\"w-full h-100 p-2 border border-gray-700 rounded-lg bg-gray-800 text-gray-400\"></textarea>\n </div>\n</dx-popup> -->" }]
110
+ }], ctorParameters: function () { return [{ type: i1.CommonService }, { type: i2.Router }, { type: i1.CommonService }, { type: i3.ApplicationContentService }, { type: i4.ToastrService }]; } });
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tbWVudXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2FwcGxpY2F0aW9uLW1lbnUtY29udHJvbGxlci9hcHBsaWNhdGlvbi1tZW51cy9hcHBsaWNhdGlvbi1tZW51cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvYXBwbGljYXRpb24tbWVudS1jb250cm9sbGVyL2FwcGxpY2F0aW9uLW1lbnVzL2FwcGxpY2F0aW9uLW1lbnVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFLbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7QUFPL0MsTUFBTSxPQUFPLHlCQUF5QjtJQUtwQyxZQUNTLGFBQTRCLEVBQzNCLE1BQWMsRUFDZixhQUE0QixFQUMzQixPQUFrQyxFQUNsQyxjQUE2QjtRQUo5QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Ysa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBMkI7UUFDbEMsbUJBQWMsR0FBZCxjQUFjLENBQWU7SUFDbkMsQ0FBQztJQUVMLFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUUzQixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUNqQyxJQUFJ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QyxDQUFDLENBQUM7aUJBQ3REO2FBQ0Y7aUJBQU07Z0JBQ0wsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2FBQ2hEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOztzSEFuSFUseUJBQXlCOzBHQUF6Qix5QkFBeUIsNkRDWnRDLHUxSEE2RWU7MkZEakVGLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRXh0cmFzLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQXBwbGljYXRpb25Db250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnZGV2ZXh0cmVtZS91aS9kaWFsb2cnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItYXBwbGljYXRpb24tbWVudXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwbGljYXRpb24tbWVudXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hcHBsaWNhdGlvbi1tZW51cy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb25NZW51c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHBhcGFyZW50TWVudURhdGFzb3VyY2U7XG4gIGlzTG9hZGVyOiBib29sZWFuO1xuXG4gIHRyZXZpZXdEYXRhc291cmNlOiBhbnk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHVibGljIGNvbW1vbnNlcnZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBBcHBsaWNhdGlvbkNvbnRlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RlclNlcnZpY2U6IFRvYXN0clNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmdldFBhcmVudE1lbnVMaXN0KCk7XG5cbiAgfVxuXG4gIGdldFBhcmVudE1lbnVMaXN0KCkge1xuICAgIHRoaXMucGFwYXJlbnRNZW51RGF0YXNvdXJjZSA9IFtdO1xuICAgIHRoaXMuc2VydmljZS5nZXRMaXN0T2ZQYXJlbnRBcHBNZW51KCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGVsZW1lbnRbJ2F0dHJpYnV0ZVZhbHVlcyddID0gKGVsZW1lbnQubWVhc3VyZXMgJiYgZWxlbWVudC5tZWFzdXJlcy5sZW5ndGggIT09IDApID8gdGhpcy5nZXRVc2VycyhlbGVtZW50Lm1lYXN1cmVzKSA6IFwiXCI7XG5cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucGFwYXJlbnRNZW51RGF0YXNvdXJjZSA9IGRhdGE7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcblxuICAgICAgICAvLyBFeGFtcGxlIHVzYWdlOlxuICAgICAgICBjb25zdCB1c2VyTmFtZSA9IFwiYWRtaW5cIjtcbiAgICAgICAgdGhpcy50cmV2aWV3RGF0YXNvdXJjZSA9IHRoaXMuYnVpbGRNZW51VHJlZSh1c2VyTmFtZSwgZGF0YSk7XG4gICAgICAgIC8vIHRoaXMucGFwYXJlbnRNZW51RGF0YXNvdXJjZSA9IGRhdGE7XG4gICAgICB9LCBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBlZGl0TWVudShpdGVtKSB7XG4gICAgbGV0IG5hdmlnYXRpb25FeHRyYTogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgIFwiY29udGVudFR5cGVcIjogXCJlZGl0XCIsXG4gICAgICAgIFwibWVudUlkXCI6IGl0ZW0ubWVudUlkXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FwcHMvY29udHJvbFBhbmVsL21lbnVDb250cm9sbGVyL2VkaXRNZW51J10sIG5hdmlnYXRpb25FeHRyYSlcbiAgfVxuICBkZWxldGVNZW51KGl0ZW0pIHtcblxuICAgIGxldCByZXN1bHQgPSBjb25maXJtKFwiPGk+QXJlIFlvdSBTdXJlPzwvaT5cIiwgXCJEZWxldGUgQXBwIE1lbnVjb25maWcgXCIpO1xuICAgIHJlc3VsdC50aGVuKChkaWFsb2dSZXN1bHQpID0+IHtcbiAgICAgIGlmIChkaWFsb2dSZXN1bHQpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmRlbGV0ZUFwcE1lbnVDb25maWcoaXRlbS5tZW51SWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5zdWNjZXNzKFwiTXVzZSBTdWNjZXNzZnVsbHkgRGVsZXRlZFwiKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0UGFyZW50TWVudUxpc3QoKVxuICAgICAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdBcHAgTWVudSBDb25maWcnKVxuXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRVc2VycyhpdGVtcykge1xuICAgIGNvbnN0IGF0dCA9IFtdO1xuICAgIGl0ZW1zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICBhdHQucHVzaChlbGVtZW50LmF0dHJpYnV0ZVZhbHVlcylcbiAgICB9KTtcblxuICAgIHJldHVybiBhdHQuam9pbignLCcpXG4gIH1cblxuICBjcmVhdGVOZXdNZW51KCkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FwcHMvY29udHJvbFBhbmVsL21lbnVDb250cm9sbGVyL2NyZWF0ZU1lbnUnXSlcblxuICB9XG5cblxuICBidWlsZE1lbnVUcmVlKHVzZXJOYW1lOiBzdHJpbmcsIG1lbnVEYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICBsZXQgZmlsdGVyZWRNZW51cyA9IG1lbnVEYXRhLmZpbHRlcihtZW51ID0+XG4gICAgICAhdXNlck5hbWUgfHwgKG1lbnUubWVhc3VyZXMgJiYgbWVudS5tZWFzdXJlcy5zb21lKG1lYXN1cmUgPT4gbWVhc3VyZS5hdHRyaWJ1dGVWYWx1ZXMuaW5jbHVkZXModXNlck5hbWUpKSlcbiAgICApO1xuXG4gICAgY29uc3QgbWVudU1hcCA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBtZW51VHJlZTogYW55W10gPSBbXTtcblxuICAgIGZpbHRlcmVkTWVudXMuZm9yRWFjaChtZW51ID0+IHtcbiAgICAgIG1lbnVNYXAuc2V0KG1lbnUuY2hpbGRNZW51VGlkIHx8IG1lbnUucGFyZW50TWVudVRpZCwge1xuICAgICAgICBpZDogbWVudS5tZW51SWQsXG4gICAgICAgIHRpdGxlOiBtZW51LnRpdGxlLFxuICAgICAgICBpY29uOiBtZW51Lmljb24sXG4gICAgICAgIHR5cGU6IG1lbnUudHlwZSxcbiAgICAgICAgLi4uKG1lbnUuc3VidGl0bGUgJiYgeyBzdWJ0aXRsZTogbWVudS5zdWJ0aXRsZSB9KSxcbiAgICAgICAgLi4uKG1lbnUubGluayAmJiB7IGxpbms6IG1lbnUubGluay5yZXBsYWNlKC9eXFwvKy8sICcnKSB9KSxcbiAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZpbHRlcmVkTWVudXMuZm9yRWFjaChtZW51ID0+IHtcbiAgICAgIGlmIChtZW51LnBhcmVudE1lbnVUaWQgJiYgbWVudS5jaGlsZE1lbnVUaWQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gbWVudU1hcC5nZXQobWVudS5wYXJlbnRNZW51VGlkKTtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgIHBhcmVudC5jaGlsZHJlbi5wdXNoKG1lbnVNYXAuZ2V0KG1lbnUuY2hpbGRNZW51VGlkKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lbnVUcmVlLnB1c2gobWVudU1hcC5nZXQobWVudS5wYXJlbnRNZW51VGlkKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWVudVRyZWU7XG4gIH1cblxuXG5cblxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC1hdXRvIG1pbi13LTBcIj5cblxuICAgIDxsaWItY29tbW9uLWhlYWRlciBbcGFnZVRpdGxlXT1cIidBcHBsaWNhdGlvbiBNZW51IENvbnRyb2xsZXInXCI+PC9saWItY29tbW9uLWhlYWRlcj5cblxuICAgIDxkaXYgY2xhc3M9XCJwLTQgdy1mdWxsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLTMgcC00IGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1sZyBzaGFkb3ctbWQgZGFyazpiZy1ncmF5LTgwMCBkYXJrOmJvcmRlci1ncmF5LTcwMFwiPlxuICAgICAgICAgICAgPGg2IGNsYXNzPVwibWItMiB0ZXh0LWxnIHRyYWNraW5nLXRpZ2h0IHRleHQtZ3JheS05MDBcbiAgICAgICAgICAgICAgICBkYXJrOnRleHQtd2hpdGUgYm9yZGVyLWIgcGItMyBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3ByaW1hcnlfbWR9fVwiIChjbGljayk9XCJjcmVhdGVOZXdNZW51KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBNZW51IENvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2g2PlxuICAgICAgICAgICAgPGFwcC1sb2FkZXIgKm5nSWY9XCJpc0xvYWRlclwiPjwvYXBwLWxvYWRlcj5cbiAgICAgICAgICAgIDxkeC1kYXRhLWdyaWQgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCIgW2RhdGFTb3VyY2VdPVwicGFwYXJlbnRNZW51RGF0YXNvdXJjZVwiXG4gICAgICAgICAgICAgICAgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIiAqbmdJZj1cIiFpc0xvYWRlclwiIFtzZWxlY3RlZFJvd0tleXNdPVwiW11cIiBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dDb2x1bW5MaW5lc109XCJ0cnVlXCIgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCIgaWQ9XCJncmlkQ29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGR4by1wYWdpbmcgW3BhZ2VTaXplXT1cIjEwXCI+PC9keG8tcGFnaW5nPlxuICAgICAgICAgICAgICAgIDxkeG8tZXhwb3J0IFtlbmFibGVkXT1cInRydWVcIj48L2R4by1leHBvcnQ+XG4gICAgICAgICAgICAgICAgPGR4by1zZWFyY2gtcGFuZWwgW2hpZ2hsaWdodENhc2VTZW5zaXRpdmVdPVwidHJ1ZVwiIFt2aXNpYmxlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8L2R4by1zZWFyY2gtcGFuZWw+XG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwidGl0bGVcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwibGlua1wiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJtZW51VHlwZVwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJ0eXBlXCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImljb25cIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwicGFyZW50TWVudVRpZFwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJjaGlsZE1lbnVUaWRcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiYXR0cmlidXRlVmFsdWVzXCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImFjdGlvblwiIGNlbGxUZW1wbGF0ZT1cImNlbGxUZW1wbGF0ZVwiIFtmaXhlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgZml4ZWRQb3NpdGlvbj1cInJpZ2h0XCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZGF0YSBvZiAnY2VsbFRlbXBsYXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX1cIiAoY2xpY2spPVwiZWRpdE1lbnUoZGF0YS5kYXRhKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdFxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fZGFuZ2VyX21kfX1cIiAoY2xpY2spPVwiZGVsZXRlTWVudShkYXRhLmRhdGEpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBEZWxldGVcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJtLTMgcC00IGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1sZyBzaGFkb3ctbWQgZGFyazpiZy1ncmF5LTgwMCBkYXJrOmJvcmRlci1ncmF5LTcwMFwiPlxuICAgICAgICA8aDYgY2xhc3M9XCJtYi0yIHRleHQtbGcgdHJhY2tpbmctdGlnaHQgdGV4dC1ncmF5LTkwMFxuICAgICAgICAgICAgZGFyazp0ZXh0LXdoaXRlIGJvcmRlci1iIHBiLTMgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIE1lbnVcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oNj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgPHByZT48Y29kZT57e3RyZXZpZXdEYXRhc291cmNlIHwganNvbn19PC9jb2RlPjwvcHJlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICBcbiAgICA8L2Rpdj4gLS0+XG5cbjwvZGl2PlxuXG48IS0tIFxuPGR4LXBvcHVwIFsodmlzaWJsZSldPVwiaXNQb3B1cFZpc2libGVcIiBbZHJhZ0VuYWJsZWRdPVwiZmFsc2VcIiBbY2xvc2VPbk91dHNpZGVDbGlja109XCJmYWxzZVwiIFtzaG93VGl0bGVdPVwidHJ1ZVwiXG4gICAgdGl0bGU9XCJNb2RlbCBFZGl0b3JcIiBbd2lkdGhdPVwiMTAwMFwiIFtoZWlnaHRdPVwiNjIwXCI+XG5cbiAgICA8ZGl2PlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJoaWRlUG9wdXAoKVwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIj48L2J1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiICNmaWxlSW5wdXQgYWNjZXB0PVwiLmpzb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYmxvY2sgdy0zLzUgcC0yIHRleHQtc20gdGV4dC1ncmF5LTQwMCBib3JkZXIgYm9yZGVyLWdyYXktNzAwIHJvdW5kZWQtbGcgYmctZ3JheS04MDAgZm9jdXM6cmluZy1ibHVlLTUwMCBmb2N1czpib3JkZXItYmx1ZS01MDBcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25qc29uRmlsZVNlbGVjdGVkKCRldmVudClcIj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInN1Ym1pdFZpZXcoKVwiIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9zdWNjZXNzX21kfX0gbXItNFwiPlN1Ym1pdDwvYnV0dG9uPlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dGV4dGFyZWEgWyhuZ01vZGVsKV09XCJqc29uQ29udGVudFwiXG4gICAgICAgICAgICBjbGFzcz1cInctZnVsbCBoLTEwMCBwLTIgIGJvcmRlciBib3JkZXItZ3JheS03MDAgcm91bmRlZC1sZyBiZy1ncmF5LTgwMCB0ZXh0LWdyYXktNDAwXCI+PC90ZXh0YXJlYT5cbiAgICA8L2Rpdj5cbjwvZHgtcG9wdXA+IC0tPiJdfQ==
@@ -0,0 +1,152 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../common";
4
+ import * as i2 from "ngx-toastr";
5
+ import * as i3 from "@angular/common";
6
+ import * as i4 from "devextreme-angular/ui/select-box";
7
+ import * as i5 from "devextreme-angular/ui/text-box";
8
+ import * as i6 from "@angular/forms";
9
+ import * as i7 from "@angular/material/icon";
10
+ import * as i8 from "../../shared/loading/loading.component";
11
+ import * as i9 from "../online-metrics/online-metrics.component";
12
+ import * as i10 from "../ofline-metrics/ofline-metrics.component";
13
+ export class CreateMetricsComponent {
14
+ constructor(commonService, toastr) {
15
+ this.commonService = commonService;
16
+ this.toastr = toastr;
17
+ this.reqFieldsDataSource = [];
18
+ this.isreqFields = false;
19
+ this.iscdrParams = false;
20
+ this.cdrFieldsDataSource = [];
21
+ this.kpi_function = ["sum", "count", "avg", "max", "min", "stddev", "count_distinct"];
22
+ this.kpi_operator = ["eq", "gte", "lte", "ne", "in", "notIn"];
23
+ this.kpi_enrichment_name = [];
24
+ this.reqShortDataSource = [];
25
+ this.filterMapingDatasource = [];
26
+ this.isModelVisible = false;
27
+ this.isSqlCopiedText = false;
28
+ this.isReconColume = false;
29
+ this.reconColumeDatasource = [];
30
+ this.isQueryTypeSelect = false;
31
+ this.mesuresAndDimentionsColumns = [];
32
+ this.metricOnlineObject = {
33
+ "metricName": "msc_voice_day_metric",
34
+ "metricId": "",
35
+ "metricDisplayName": "Metric Voice Day Metric",
36
+ "metricType": "online",
37
+ "source": {
38
+ "datasource": "huawei-msc",
39
+ "eventName": "huawei_msc_fct",
40
+ "filters": [
41
+ { "fieldName": "event_type_key", "operation": "string", "threshold": "1,5,6", "comparator": "in" }
42
+ ],
43
+ "exclusions": [
44
+ { "fieldName": "", "operation": "", "threshold": "", "comparator": "" }
45
+ ],
46
+ "dimensions": [
47
+ { "fieldName": "xdr_date", "aliasName": "record_date", "dataType": "string", "format": "yyyyMMdd" },
48
+ { "fieldName": "event_type_key", "aliasName": "event_type", "dataType": "string" },
49
+ { "fieldName": "srv_type_key", "aliasName": "srv_type", "dataType": "string" },
50
+ { "fieldName": "other_nw_ind_key", "aliasName": "nw_call_type", "dataType": "string" },
51
+ { "fieldName": "xdr_date", "aliasName": "hour", "dataType": "int", "method": "getHour" },
52
+ { "fieldName": "other_msisdn_iso_code", "aliasName": "country", "dataType": "string" },
53
+ { "fieldName": "other_oper", "aliasName": "operator", "dataType": "string" },
54
+ { "fieldName": "event_direction_key", "aliasName": "direction", "dataType": "string" }
55
+ ],
56
+ "measures": [
57
+ { "fieldName": "original_dur", "aliasName": "msc_mou", "dataType": "double", "type": "sum" },
58
+ { "aliasName": "msc_count", "type": "count" }
59
+ ]
60
+ },
61
+ "target": {
62
+ "databaseName": "rafmdb",
63
+ "dbConfig": "mongo",
64
+ "tableName": "msc_daily_metric",
65
+ "dimensionColumns": ["record_date", "event_type", "srv_type", "direction", "nw_call_type", "hour",
66
+ "country", "operator"
67
+ ],
68
+ "measureColumns": [
69
+ "msc_mou", "msc_count"
70
+ ],
71
+ "createTable": false,
72
+ "writeDisposition": "append"
73
+ }
74
+ };
75
+ this.metricMainObject = {
76
+ "metricName": "msc_voice_day_metric",
77
+ "metricId": "",
78
+ "metricDisplayName": "Metric Voice Day Metric",
79
+ "metricType": "online",
80
+ };
81
+ this.metricOflineObject = {
82
+ "metricName": "",
83
+ "metricId": "",
84
+ "metricDisplayName": "",
85
+ "metricType": "offline",
86
+ "source": {
87
+ "databaseName": "rafms",
88
+ "dbConfig": "bigquery",
89
+ "queryTemplate": "",
90
+ "queryTemplateFile": ""
91
+ },
92
+ "target": {
93
+ "databaseName": "rafmdb",
94
+ "dbConfig": "mysql",
95
+ "tableName": "",
96
+ "dimensionColumns": [],
97
+ "measureColumns": [],
98
+ "partitionColumn": "",
99
+ "createTable": true,
100
+ "writeDisposition": "append"
101
+ },
102
+ "execution": {
103
+ "type": "scheduled",
104
+ "jobGroupId": "",
105
+ "arguments": [
106
+ {
107
+ "argumentName": "start_date",
108
+ "labelName": "Event Start Date",
109
+ "datatype": "timestamp",
110
+ "runtimeValue": "static",
111
+ "function": "D1_START"
112
+ },
113
+ {
114
+ "argumentName": "end_date",
115
+ "labelName": "Event End Date",
116
+ "runtimeValue": "static",
117
+ "datatype": "timestamp",
118
+ "function": "D1_END"
119
+ }
120
+ ]
121
+ }
122
+ };
123
+ }
124
+ ngOnInit() {
125
+ }
126
+ getMetricType(e) {
127
+ if (e.event) {
128
+ this.metrictype = e.value;
129
+ }
130
+ }
131
+ submittOnlineMetrics(data) {
132
+ data["metricName"] = this.metricMainObject['metricName'];
133
+ data["metricId"] = this.metricMainObject['metricId'];
134
+ data["metricDisplayName"] = this.metricMainObject['metricDisplayName'];
135
+ data["metricType"] = this.metricMainObject.metricType;
136
+ console.log(data);
137
+ }
138
+ submittOfflineMetrics(data) {
139
+ data["metricName"] = this.metricMainObject['metricName'];
140
+ data["metricId"] = this.metricMainObject['metricId'];
141
+ data["metricDisplayName"] = this.metricMainObject['metricDisplayName'];
142
+ data["metricType"] = this.metricMainObject.metricType;
143
+ console.log(data);
144
+ }
145
+ }
146
+ CreateMetricsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CreateMetricsComponent, deps: [{ token: i1.CommonService }, { token: i2.ToastrService }], target: i0.ɵɵFactoryTarget.Component });
147
+ CreateMetricsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CreateMetricsComponent, selector: "app-create-metrics", ngImport: i0, template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n<div class=\"flex flex-col flex-auto w-full\">\n <div class=\"flex flex-col\">\n <div class=\"flex justify-between border-b dark:bg-transparent\">\n <div class=\"flex flex-col ml-1\">\n <div class=\"flex items-center float-start\">\n <div class=\"flex items-center overflow-hidden\">\n <mat-icon class=\"icon-size-2\" [svgIcon]=\"'heroicons_solid:template'\"></mat-icon>\n </div>\n <h2\n class=\"text-2xl md:text-2xl py-3 font-extrabold items-center ml-2 tracking-tight leading-5 truncate capitalize\">\n Create Metrics\n </h2>\n </div>\n <div class=\"\">\n </div>\n </div>\n <!-- <div class=\"flex justify-between items-center border-l-2 p-0 m-0 relative\">\n <div class=\"mx-4\">\n <div class=\"text-lg font-bold mx-4 corsur-pointer\" (click)=\"openDateFilter()\">\n {{selectedDateAndTime}}\n <i class=\"fa fa-calendar\"></i>\n </div>\n </div>\n </div> -->\n </div>\n\n </div>\n\n <div class=\"flex\">\n <div class=\"w-full border-r\">\n <div class=\"m-2\">\n <div class=\"flex flex-row mb-2\">\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Metric Name</div>\n <dx-text-box [(ngModel)]=\"metricMainObject.metricName\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Metric Display Name</div>\n <dx-text-box [(ngModel)]=\"metricMainObject.metricDisplayName\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Metric Id</div>\n <dx-text-box [(ngModel)]=\"metricMainObject.metricId\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Metric Type</div>\n <dx-select-box [items]=\"['online','ofline']\" [(ngModel)]=\"metricMainObject.metricType\"\n (onValueChanged)=\"getMetricType($event)\"></dx-select-box>\n </div>\n </div>\n <ng-container *ngIf=\"metricMainObject.metricType == 'online'\">\n <app-online-metrics [onlineMetricData]=\"metricOnlineObject\"\n (getMetRicOnlineDataSet)=\"submittOnlineMetrics($event)\"></app-online-metrics>\n </ng-container>\n <ng-container *ngIf=\"metricMainObject.metricType == 'ofline'\">\n <app-ofline-metrics [onflineMetricData]=\"metricOflineObject\"\n (getMetRicOflineDataSet)=\"submittOfflineMetrics($event)\"></app-ofline-metrics>\n </ng-container>\n\n\n </div>\n </div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i5.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.LoadingComponent, selector: "app-loading" }, { kind: "component", type: i9.OnlineMetricsComponent, selector: "app-online-metrics", inputs: ["onlineMetricData"], outputs: ["getMetRicOnlineDataSet"] }, { kind: "component", type: i10.OflineMetricsComponent, selector: "app-ofline-metrics", inputs: ["onflineMetricData"], outputs: ["getMetRicOflineDataSet"] }] });
148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CreateMetricsComponent, decorators: [{
149
+ type: Component,
150
+ args: [{ selector: 'app-create-metrics', template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n<div class=\"flex flex-col flex-auto w-full\">\n <div class=\"flex flex-col\">\n <div class=\"flex justify-between border-b dark:bg-transparent\">\n <div class=\"flex flex-col ml-1\">\n <div class=\"flex items-center float-start\">\n <div class=\"flex items-center overflow-hidden\">\n <mat-icon class=\"icon-size-2\" [svgIcon]=\"'heroicons_solid:template'\"></mat-icon>\n </div>\n <h2\n class=\"text-2xl md:text-2xl py-3 font-extrabold items-center ml-2 tracking-tight leading-5 truncate capitalize\">\n Create Metrics\n </h2>\n </div>\n <div class=\"\">\n </div>\n </div>\n <!-- <div class=\"flex justify-between items-center border-l-2 p-0 m-0 relative\">\n <div class=\"mx-4\">\n <div class=\"text-lg font-bold mx-4 corsur-pointer\" (click)=\"openDateFilter()\">\n {{selectedDateAndTime}}\n <i class=\"fa fa-calendar\"></i>\n </div>\n </div>\n </div> -->\n </div>\n\n </div>\n\n <div class=\"flex\">\n <div class=\"w-full border-r\">\n <div class=\"m-2\">\n <div class=\"flex flex-row mb-2\">\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Metric Name</div>\n <dx-text-box [(ngModel)]=\"metricMainObject.metricName\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Metric Display Name</div>\n <dx-text-box [(ngModel)]=\"metricMainObject.metricDisplayName\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Metric Id</div>\n <dx-text-box [(ngModel)]=\"metricMainObject.metricId\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Metric Type</div>\n <dx-select-box [items]=\"['online','ofline']\" [(ngModel)]=\"metricMainObject.metricType\"\n (onValueChanged)=\"getMetricType($event)\"></dx-select-box>\n </div>\n </div>\n <ng-container *ngIf=\"metricMainObject.metricType == 'online'\">\n <app-online-metrics [onlineMetricData]=\"metricOnlineObject\"\n (getMetRicOnlineDataSet)=\"submittOnlineMetrics($event)\"></app-online-metrics>\n </ng-container>\n <ng-container *ngIf=\"metricMainObject.metricType == 'ofline'\">\n <app-ofline-metrics [onflineMetricData]=\"metricOflineObject\"\n (getMetRicOflineDataSet)=\"submittOfflineMetrics($event)\"></app-ofline-metrics>\n </ng-container>\n\n\n </div>\n </div>\n </div>\n</div>" }]
151
+ }], ctorParameters: function () { return [{ type: i1.CommonService }, { type: i2.ToastrService }]; } });
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1ldHJpY3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2FwcGxpY2F0aW9uLW1ldHJpYy1jb25maWcvY3JlYXRlLW1ldHJpY3MvY3JlYXRlLW1ldHJpY3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2FwcGxpY2F0aW9uLW1ldHJpYy1jb25maWcvY3JlYXRlLW1ldHJpY3MvY3JlYXRlLW1ldHJpY3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFNBQVMsRUFBdUMsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7OztBQVMvRSxNQUFNLE9BQU8sc0JBQXNCO0lBd0hqQyxZQUFtQixhQUE0QixFQUFVLE1BQXFCO1FBQTNELGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQXJIOUUsd0JBQW1CLEdBQVEsRUFBRSxDQUFDO1FBQzlCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLHdCQUFtQixHQUFRLEVBQUUsQ0FBQztRQUM5QixpQkFBWSxHQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtRQUNyRixpQkFBWSxHQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUM3RCx3QkFBbUIsR0FBUSxFQUFFLENBQUM7UUFDOUIsdUJB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VUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBSTtRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7UUFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBQ0QscUJBQXFCLENBQUMsSUFBSTtRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7UUFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDOzttSEFsSlUsc0JBQXNCO3VHQUF0QixzQkFBc0IsMERDWG5DLDJyR0FnRU07MkZEckRPLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jcmVhdGUtbWV0cmljcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtbWV0cmljcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NyZWF0ZS1tZXRyaWNzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3JlYXRlTWV0cmljc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGxvYWRpbmdNb2RhbDogYm9vbGVhbjtcbiAgLy8gQElucHV0KCkgcXVlcnlCdWxkZXJEYXRhc2V0OiBhbnk7XG4gIHJlcUZpZWxkc0RhdGFTb3VyY2U6IGFueSA9IFtdO1xuICBpc3JlcUZpZWxkczogYm9vbGVhbiA9IGZhbHNlO1xuICBpc2NkclBhcmFtczogYm9vbGVhbiA9IGZhbHNlO1xuICBjZHJGaWVsZHNEYXRhU291cmNlOiBhbnkgPSBbXTtcbiAga3BpX2Z1bmN0aW9uOiBhbnkgPSBbXCJzdW1cIiwgXCJjb3VudFwiLCBcImF2Z1wiLCBcIm1heFwiLCBcIm1pblwiLCBcInN0ZGRldlwiLCBcImNvdW50X2Rpc3RpbmN0XCJdXG4gIGtwaV9vcGVyYXRvcjogYW55ID0gW1wiZXFcIiwgXCJndGVcIiwgXCJsdGVcIiwgXCJuZVwiLCBcImluXCIsIFwibm90SW5cIl1cbiAga3BpX2VucmljaG1lbnRfbmFtZTogYW55ID0gW107XG4gIHJlcVNob3J0RGF0YVNvdXJjZTogYW55ID0gW107XG4gIGZpbHRlck1hcGluZ0RhdGFzb3VyY2U6IGFueSA9IFtdO1xuICBxdWVyeV9kYXRhOiBhbnk7XG4gIGlzTW9kZWxWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU3FsQ29waWVkVGV4dDogYm9vbGVhbiA9IGZhbHNlO1xuICBxdWVyeUJ1bGRlckRhdGFzZXQ6IGFueTtcbiAgaXNSZWNvbkNvbHVtZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyBAT3V0cHV0KCkgcHVibGljIGdldFF1ZXJ5QnVsYmRlckRhdGFTZXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHJlY29uQ29sdW1lRGF0YXNvdXJjZSA9IFtdO1xuXG4gIHNlbGVjdGVkRGF0YVNvdXJjZTogYW55O1xuICBpc1F1ZXJ5VHlwZVNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIG1lc3VyZXNBbmREaW1lbnRpb25zQ29sdW1ucyA9IFtdO1xuICBtZXRyaWNPbmxpbmVPYmplY3QgPSB7XG4gICAgXCJtZXRyaWNOYW1lXCI6IFwibXNjX3ZvaWNlX2RheV9tZXRyaWNcIixcbiAgICBcIm1ldHJpY0lkXCI6IFwiXCIsXG4gICAgXCJtZXRyaWNEaXNwbGF5TmFtZVwiOiBcIk1ldHJpYyBWb2ljZSBEYXkgTWV0cmljXCIsXG4gICAgXCJtZXRyaWNUeXBlXCI6IFwib25saW5lXCIsXG4gICAgXCJzb3VyY2VcIjoge1xuICAgICAgXCJkYXRhc291cmNlXCI6IFwiaHVhd2VpLW1zY1wiLFxuICAgICAgXCJldmVudE5hbWVcIjogXCJodWF3ZWlfbXNjX2ZjdFwiLFxuICAgICAgXCJmaWx0ZXJzXCI6IFtcbiAgICAgICAgeyBcImZpZWxkTmFtZVwiOiBcImV2ZW50X3R5cGVfa2V5XCIsIFwib3BlcmF0aW9uXCI6IFwic3RyaW5nXCIsIFwidGhyZXNob2xkXCI6IFwiMSw1LDZcIiwgXCJjb21wYXJhdG9yXCI6IFwiaW5cIiB9XG4gICAgICBdLFxuICAgICAgXCJleGNsdXNpb25zXCI6IFtcbiAgICAgICAgeyBcImZpZWxkTmFtZVwiOiBcIlwiLCBcIm9wZXJhdGlvblwiOiBcIlwiLCBcInRocmVzaG9sZFwiOiBcIlwiLCBcImNvbXBhcmF0b3JcIjogXCJcIiB9XG4gICAgICBdLFxuICAgICAgXCJkaW1lbnNpb25zXCI6IFtcbiAgICAgICAgeyBcImZpZWxkTmFtZVwiOiBcInhkcl9kYXRlXCIsIFwiYWxpYXNOYW1lXCI6IFwicmVjb3JkX2RhdGVcIiwgXCJkYXRhVHlwZVwiOiBcInN0cmluZ1wiLCBcImZvcm1hdFwiOiBcInl5eXlNTWRkXCIgfSxcbiAgICAgICAgeyBcImZpZWxkTmFtZVwiOiBcImV2ZW50X3R5cGVfa2V5XCIsIFwiYWxpYXNOYW1lXCI6IFwiZXZlbnRfdHlwZVwiLCBcImRhdGFUeXBlXCI6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgeyBcImZpZWxkTmFtZVwiOiBcInNydl90eXBlX2tleVwiLCBcImFsaWFzTmFtZVwiOiBcInNydl90eXBlXCIsIFwiZGF0YVR5cGVcIjogXCJzdHJpbmdcIiB9LFxuICAgICAgICB7IFwiZmllbGROYW1lXCI6IFwib3RoZXJfbndfaW5kX2tleVwiLCBcImFsaWFzTmFtZVwiOiBcIm53X2NhbGxfdHlwZVwiLCBcImRhdGFUeXBlXCI6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgeyBcImZpZWxkTmFtZVwiOiBcInhkcl9kYXRlXCIsIFwiYWxpYXNOYW1lXCI6IFwiaG91clwiLCBcImRhdGFUeXBlXCI6IFwiaW50XCIsIFwibWV0aG9kXCI6IFwiZ2V0SG91clwiIH0sXG4gICAgICAgIHsgXCJmaWVsZE5hbWVcIjogXCJvdGhlcl9tc2lzZG5faXNvX2NvZGVcIiwgXCJhbGlhc05hbWVcIjogXCJjb3VudHJ5XCIsIFwiZGF0YVR5cGVcIjogXCJzdHJpbmdcIiB9LFxuICAgICAgICB7IFwiZmllbGROYW1lXCI6IFwib3RoZXJfb3BlclwiLCBcImFsaWFzTmFtZVwiOiBcIm9wZXJhdG9yXCIsIFwiZGF0YVR5cGVcIjogXCJzdHJpbmdcIiB9LFxuICAgICAgICB7IFwiZmllbGROYW1lXCI6IFwiZXZlbnRfZGlyZWN0aW9uX2tleVwiLCBcImFsaWFzTmFtZVwiOiBcImRpcmVjdGlvblwiLCBcImRhdGFUeXBlXCI6IFwic3RyaW5nXCIgfVxuICAgICAgXSxcbiAgICAgIFwibWVhc3VyZXNcIjogW1xuICAgICAgICB7IFwiZmllbGROYW1lXCI6IFwib3JpZ2luYWxfZHVyXCIsIFwiYWxpYXNOYW1lXCI6IFwibXNjX21vdVwiLCBcImRhdGFUeXBlXCI6IFwiZG91YmxlXCIsIFwidHlwZVwiOiBcInN1bVwiIH0sXG4gICAgICAgIHsgXCJhbGlhc05hbWVcIjogXCJtc2NfY291bnRcIiwgXCJ0eXBlXCI6IFwiY291bnRcIiB9XG4gICAgICBdXG4gICAgfSxcbiAgICBcInRhcmdldFwiOiB7XG4gICAgICBcImRhdGFiYXNlTmFtZVwiOiBcInJhZm1kYlwiLFxuICAgICAgXCJkYkNvbmZpZ1wiOiBcIm1vbmdvXCIsXG4gICAgICBcInRhYmxlTmFtZVwiOiBcIm1zY19kYWlseV9tZXRyaWNcIixcbiAgICAgIFwiZGltZW5zaW9uQ29sdW1uc1wiOiBbXCJyZWNvcmRfZGF0ZVwiLCBcImV2ZW50X3R5cGVcIiwgXCJzcnZfdHlwZVwiLCBcImRpcmVjdGlvblwiLCBcIm53X2NhbGxfdHlwZVwiLCBcImhvdXJcIixcbiAgICAgICAgXCJjb3VudHJ5XCIsIFwib3BlcmF0b3JcIlxuICAgICAgXSxcbiAgICAgIFwibWVhc3VyZUNvbHVtbnNcIjogW1xuICAgICAgICBcIm1zY19tb3VcIiwgXCJtc2NfY291bnRcIlxuICAgICAgXSxcbiAgICAgIFwiY3JlYXRlVGFibGVcIjogZmFsc2UsXG4gICAgICBcIndyaXRlRGlzcG9zaXRpb25cIjogXCJhcHBlbmRcIlxuICAgIH1cbiAgfVxuICBtZXRyaWNNYWluT2JqZWN0OiBhbnkgPSB7XG4gICAgXCJtZXRyaWNOYW1lXCI6IFwibXNjX3ZvaWNlX2RheV9tZXRyaWNcIixcbiAgICBcIm1ldHJpY0lkXCI6IFwiXCIsXG4gICAgXCJtZXRyaWNEaXNwbGF5TmFtZVwiOiBcIk1ldHJpYyBWb2ljZSBEYXkgTWV0cmljXCIsXG4gICAgXCJtZXRyaWNUeXBlXCI6IFwib25saW5lXCIsXG4gIH07XG5cbiAgbWV0cmljT2ZsaW5lT2JqZWN0ID0ge1xuICAgIFwibWV0cmljTmFtZVwiOiBcIlwiLFxuICAgIFwibWV0cmljSWRcIjogXCJcIixcbiAgICBcIm1ldHJpY0Rpc3BsYXlOYW1lXCI6IFwiXCIsXG4gICAgXCJtZXRyaWNUeXBlXCI6IFwib2ZmbGluZVwiLFxuICAgIFwic291cmNlXCI6IHtcbiAgICAgIFwiZGF0YWJhc2VOYW1lXCI6IFwicmFmbXNcIixcbiAgICAgIFwiZGJDb25maWdcIjogXCJiaWdxdWVyeVwiLFxuICAgICAgXCJxdWVyeVRlbXBsYXRlXCI6IFwiXCIsXG4gICAgICBcInF1ZXJ5VGVtcGxhdGVGaWxlXCI6IFwiXCJcbiAgICB9LFxuICAgIFwidGFyZ2V0XCI6IHtcbiAgICAgIFwiZGF0YWJhc2VOYW1lXCI6IFwicmFmbWRiXCIsXG4gICAgICBcImRiQ29uZmlnXCI6IFwibXlzcWxcIixcbiAgICAgIFwidGFibGVOYW1lXCI6IFwiXCIsXG4gICAgICBcImRpbWVuc2lvbkNvbHVtbnNcIjogW10sXG4gICAgICBcIm1lYXN1cmVDb2x1bW5zXCI6IFtdLFxuICAgICAgXCJwYXJ0aXRpb25Db2x1bW5cIjogXCJcIixcbiAgICAgIFwiY3JlYXRlVGFibGVcIjogdHJ1ZSxcbiAgICAgIFwid3JpdGVEaXNwb3NpdGlvblwiOiBcImFwcGVuZFwiXG4gICAgfSxcbiAgICBcImV4ZWN1dGlvblwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzY2hlZHVsZWRcIixcbiAgICAgIFwiam9iR3JvdXBJZFwiOiBcIlwiLFxuICAgICAgXCJhcmd1bWVudHNcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgXCJhcmd1bWVudE5hbWVcIjogXCJzdGFydF9kYXRlXCIsXG4gICAgICAgICAgXCJsYWJlbE5hbWVcIjogXCJFdmVudCBTdGFydCBEYXRlXCIsXG4gICAgICAgICAgXCJkYXRhdHlwZVwiOiBcInRpbWVzdGFtcFwiLFxuICAgICAgICAgIFwicnVudGltZVZhbHVlXCI6IFwic3RhdGljXCIsXG4gICAgICAgICAgXCJmdW5jdGlvblwiOiBcIkQxX1NUQVJUXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiYXJndW1lbnROYW1lXCI6IFwiZW5kX2RhdGVcIixcbiAgICAgICAgICBcImxhYmVsTmFtZVwiOiBcIkV2ZW50IEVuZCBEYXRlXCIsXG4gICAgICAgICAgXCJydW50aW1lVmFsdWVcIjogXCJzdGF0aWNcIixcbiAgICAgICAgICBcImRhdGF0eXBlXCI6IFwidGltZXN0YW1wXCIsXG4gICAgICAgICAgXCJmdW5jdGlvblwiOiBcIkQxX0VORFwiXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIH1cblxuICBtZXRyaWN0eXBlOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICB9XG5cblxuICBnZXRNZXRyaWNUeXBlKGUpIHtcbiAgICBpZiAoZS5ldmVudCkge1xuICAgICAgdGhpcy5tZXRyaWN0eXBlID0gZS52YWx1ZTtcbiAgICB9XG4gIH1cblxuICBzdWJtaXR0T25saW5lTWV0cmljcyhkYXRhKSB7XG4gICAgZGF0YVtcIm1ldHJpY05hbWVcIl0gPSB0aGlzLm1ldHJpY01haW5PYmplY3RbJ21ldHJpY05hbWUnXTtcbiAgICBkYXRhW1wibWV0cmljSWRcIl0gPSB0aGlzLm1ldHJpY01haW5PYmplY3RbJ21ldHJpY0lkJ107XG4gICAgZGF0YVtcIm1ldHJpY0Rpc3BsYXlOYW1lXCJdID0gdGhpcy5tZXRyaWNNYWluT2JqZWN0WydtZXRyaWNEaXNwbGF5TmFtZSddO1xuICAgIGRhdGFbXCJtZXRyaWNUeXBlXCJdID0gdGhpcy5tZXRyaWNNYWluT2JqZWN0Lm1ldHJpY1R5cGU7XG4gICAgY29uc29sZS5sb2coZGF0YSk7XG4gIH1cbiAgc3VibWl0dE9mZmxpbmVNZXRyaWNzKGRhdGEpIHtcbiAgICBkYXRhW1wibWV0cmljTmFtZVwiXSA9IHRoaXMubWV0cmljTWFpbk9iamVjdFsnbWV0cmljTmFtZSddO1xuICAgIGRhdGFbXCJtZXRyaWNJZFwiXSA9IHRoaXMubWV0cmljTWFpbk9iamVjdFsnbWV0cmljSWQnXTtcbiAgICBkYXRhW1wibWV0cmljRGlzcGxheU5hbWVcIl0gPSB0aGlzLm1ldHJpY01haW5PYmplY3RbJ21ldHJpY0Rpc3BsYXlOYW1lJ107XG4gICAgZGF0YVtcIm1ldHJpY1R5cGVcIl0gPSB0aGlzLm1ldHJpY01haW5PYmplY3QubWV0cmljVHlwZTtcbiAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgfVxuXG5cbn1cbiIsIjxhcHAtbG9hZGluZyAqbmdJZj1cImxvYWRpbmdNb2RhbFwiPjwvYXBwLWxvYWRpbmc+XG48ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LWF1dG8gdy1mdWxsXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iICBkYXJrOmJnLXRyYW5zcGFyZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCAgZmxleC1jb2wgbWwtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4ICBpdGVtcy1jZW50ZXIgZmxvYXQtc3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbi1zaXplLTJcIiBbc3ZnSWNvbl09XCInaGVyb2ljb25zX3NvbGlkOnRlbXBsYXRlJ1wiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aDJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC0yeGwgbWQ6dGV4dC0yeGwgcHktMyBmb250LWV4dHJhYm9sZCBpdGVtcy1jZW50ZXIgbWwtMiB0cmFja2luZy10aWdodCBsZWFkaW5nLTUgdHJ1bmNhdGUgY2FwaXRhbGl6ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIE1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBib3JkZXItbC0yIHAtMCBtLTAgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1sZyBmb250LWJvbGQgbXgtNCBjb3JzdXItcG9pbnRlclwiIChjbGljayk9XCJvcGVuRGF0ZUZpbHRlcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e3NlbGVjdGVkRGF0ZUFuZFRpbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhclwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGJvcmRlci1yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LTEvM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPk1ldHJpYyBOYW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJtZXRyaWNNYWluT2JqZWN0Lm1ldHJpY05hbWVcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy0xLzNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5NZXRyaWMgRGlzcGxheSBOYW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJtZXRyaWNNYWluT2JqZWN0Lm1ldHJpY0Rpc3BsYXlOYW1lXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIHctMS8zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+TWV0cmljIElkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJtZXRyaWNNYWluT2JqZWN0Lm1ldHJpY0lkXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIHctMS8zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+TWV0cmljIFR5cGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtpdGVtc109XCJbJ29ubGluZScsJ29mbGluZSddXCIgWyhuZ01vZGVsKV09XCJtZXRyaWNNYWluT2JqZWN0Lm1ldHJpY1R5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJnZXRNZXRyaWNUeXBlKCRldmVudClcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXRyaWNNYWluT2JqZWN0Lm1ldHJpY1R5cGUgPT0gJ29ubGluZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1vbmxpbmUtbWV0cmljcyBbb25saW5lTWV0cmljRGF0YV09XCJtZXRyaWNPbmxpbmVPYmplY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGdldE1ldFJpY09ubGluZURhdGFTZXQpPVwic3VibWl0dE9ubGluZU1ldHJpY3MoJGV2ZW50KVwiPjwvYXBwLW9ubGluZS1tZXRyaWNzPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXRyaWNNYWluT2JqZWN0Lm1ldHJpY1R5cGUgPT0gJ29mbGluZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1vZmxpbmUtbWV0cmljcyBbb25mbGluZU1ldHJpY0RhdGFdPVwibWV0cmljT2ZsaW5lT2JqZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChnZXRNZXRSaWNPZmxpbmVEYXRhU2V0KT1cInN1Ym1pdHRPZmZsaW5lTWV0cmljcygkZXZlbnQpXCI+PC9hcHAtb2ZsaW5lLW1ldHJpY3M+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19