ezlibrary_v2 0.0.1

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 (113) hide show
  1. package/esm2020/ezlibrary_v2.mjs +5 -0
  2. package/esm2020/lib/admin-service/admin-service.service.mjs +36 -0
  3. package/esm2020/lib/analysis-search/analysis-search.component.mjs +1083 -0
  4. package/esm2020/lib/assort-service/assort-service.service.mjs +31 -0
  5. package/esm2020/lib/attribute-definition/attribute-definition.component.mjs +231 -0
  6. package/esm2020/lib/auth/auth.guard.mjs +40 -0
  7. package/esm2020/lib/bi-service/bi.service.mjs +58 -0
  8. package/esm2020/lib/call-info/callinfo.component.mjs +126 -0
  9. package/esm2020/lib/comman-service/comman-service.service.mjs +679 -0
  10. package/esm2020/lib/comman-service/share-data-service.service.mjs +23 -0
  11. package/esm2020/lib/contact-search/contact-search.component.mjs +679 -0
  12. package/esm2020/lib/contact-service/contact-service.service.mjs +47 -0
  13. package/esm2020/lib/ezheader/header.component.mjs +383 -0
  14. package/esm2020/lib/ezlib.module.mjs +220 -0
  15. package/esm2020/lib/file-upload/fileupload.component.mjs +920 -0
  16. package/esm2020/lib/file-upload-log/file-upload-log.component.mjs +175 -0
  17. package/esm2020/lib/fileupload-module/fileupload-dashboard/fileupload-dashboard.component.mjs +14 -0
  18. package/esm2020/lib/fileupload-module/fileupload-routing.module.mjs +28 -0
  19. package/esm2020/lib/footer/footer.component.mjs +18 -0
  20. package/esm2020/lib/globle/common-pdf.service.mjs +28 -0
  21. package/esm2020/lib/globle/globle-env.service.mjs +45 -0
  22. package/esm2020/lib/globle/memo-report.service.mjs +2800 -0
  23. package/esm2020/lib/globle/pdf-service.service.mjs +18848 -0
  24. package/esm2020/lib/globle/shared-services.service.mjs +27 -0
  25. package/esm2020/lib/globle/upload-service.service.mjs +69 -0
  26. package/esm2020/lib/header/header.component.mjs +179 -0
  27. package/esm2020/lib/invalid/invalid.component.mjs +71 -0
  28. package/esm2020/lib/logout/logout.component.mjs +107 -0
  29. package/esm2020/lib/menu-right/menu-right.component.mjs +252 -0
  30. package/esm2020/lib/pipes/number-with-commas.pipe.mjs +24 -0
  31. package/esm2020/lib/pipes/order-by-pipe.pipe.mjs +17 -0
  32. package/esm2020/lib/pipes/selectedCount.mjs +19 -0
  33. package/esm2020/lib/pipes/sum.pipe.mjs +16 -0
  34. package/esm2020/lib/pkt-data/pkt-data.component.mjs +1107 -0
  35. package/esm2020/lib/pricing-service/pricing.service.mjs +58 -0
  36. package/esm2020/lib/qa-analysis/qa-analysis.component.mjs +1035 -0
  37. package/esm2020/lib/report-format/report-format.component.mjs +400 -0
  38. package/esm2020/lib/sessionend/session-end.guard.mjs +28 -0
  39. package/esm2020/lib/stock-service/lazyload.service.mjs +21 -0
  40. package/esm2020/lib/stock-service/stock-service.service.mjs +62 -0
  41. package/esm2020/lib/system-module/subform/subform.component.mjs +2481 -0
  42. package/esm2020/lib/system-module/system/system.component.mjs +959 -0
  43. package/esm2020/lib/system-module/system-service/system-service.service.mjs +85 -0
  44. package/esm2020/lib/system-module/system-service/upload-file.service.mjs +86 -0
  45. package/esm2020/lib/utility/app-no-dbl-click.directive.mjs +23 -0
  46. package/esm2020/lib/utility/constants.mjs +5 -0
  47. package/esm2020/lib/utility/contact-table-search.pipe.mjs +25 -0
  48. package/esm2020/lib/utility/formate-num-field.pipe.mjs +19 -0
  49. package/esm2020/lib/utility/search-pipe.pipe.mjs +26 -0
  50. package/esm2020/lib/utility/selective-preloading-strategy.mjs +23 -0
  51. package/esm2020/lib/utility/table-search.pipe.mjs +25 -0
  52. package/esm2020/lib/utility/tranform.directive.mjs +27 -0
  53. package/esm2020/lib/websearch-history/websearch-history.component.mjs +273 -0
  54. package/esm2020/public_api.mjs +57 -0
  55. package/ezlibrary_v2.d.ts +5 -0
  56. package/fesm2015/ezlibrary_v2.mjs +33543 -0
  57. package/fesm2015/ezlibrary_v2.mjs.map +1 -0
  58. package/fesm2020/ezlibrary_v2.mjs +33533 -0
  59. package/fesm2020/ezlibrary_v2.mjs.map +1 -0
  60. package/lib/admin-service/admin-service.service.d.ts +13 -0
  61. package/lib/analysis-search/analysis-search.component.d.ts +122 -0
  62. package/lib/assort-service/assort-service.service.d.ts +12 -0
  63. package/lib/attribute-definition/attribute-definition.component.d.ts +47 -0
  64. package/lib/auth/auth.guard.d.ts +16 -0
  65. package/lib/bi-service/bi.service.d.ts +20 -0
  66. package/lib/call-info/callinfo.component.d.ts +30 -0
  67. package/lib/comman-service/comman-service.service.d.ts +111 -0
  68. package/lib/comman-service/share-data-service.service.d.ts +10 -0
  69. package/lib/contact-search/contact-search.component.d.ts +115 -0
  70. package/lib/contact-service/contact-service.service.d.ts +15 -0
  71. package/lib/ezheader/header.component.d.ts +61 -0
  72. package/lib/ezlib.module.d.ts +47 -0
  73. package/lib/file-upload/fileupload.component.d.ts +131 -0
  74. package/lib/file-upload-log/file-upload-log.component.d.ts +53 -0
  75. package/lib/fileupload-module/fileupload-dashboard/fileupload-dashboard.component.d.ts +8 -0
  76. package/lib/fileupload-module/fileupload-routing.module.d.ts +7 -0
  77. package/lib/footer/footer.component.d.ts +9 -0
  78. package/lib/globle/common-pdf.service.d.ts +9 -0
  79. package/lib/globle/globle-env.service.d.ts +16 -0
  80. package/lib/globle/memo-report.service.d.ts +107 -0
  81. package/lib/globle/pdf-service.service.d.ts +459 -0
  82. package/lib/globle/shared-services.service.d.ts +12 -0
  83. package/lib/globle/upload-service.service.d.ts +20 -0
  84. package/lib/header/header.component.d.ts +45 -0
  85. package/lib/invalid/invalid.component.d.ts +12 -0
  86. package/lib/logout/logout.component.d.ts +21 -0
  87. package/lib/menu-right/menu-right.component.d.ts +47 -0
  88. package/lib/pipes/number-with-commas.pipe.d.ts +7 -0
  89. package/lib/pipes/order-by-pipe.pipe.d.ts +7 -0
  90. package/lib/pipes/selectedCount.d.ts +7 -0
  91. package/lib/pipes/sum.pipe.d.ts +7 -0
  92. package/lib/pkt-data/pkt-data.component.d.ts +189 -0
  93. package/lib/pricing-service/pricing.service.d.ts +20 -0
  94. package/lib/qa-analysis/qa-analysis.component.d.ts +99 -0
  95. package/lib/report-format/report-format.component.d.ts +74 -0
  96. package/lib/sessionend/session-end.guard.d.ts +10 -0
  97. package/lib/stock-service/lazyload.service.d.ts +7 -0
  98. package/lib/stock-service/stock-service.service.d.ts +19 -0
  99. package/lib/system-module/subform/subform.component.d.ts +227 -0
  100. package/lib/system-module/system/system.component.d.ts +113 -0
  101. package/lib/system-module/system-service/system-service.service.d.ts +23 -0
  102. package/lib/system-module/system-service/upload-file.service.d.ts +12 -0
  103. package/lib/utility/app-no-dbl-click.directive.d.ts +7 -0
  104. package/lib/utility/constants.d.ts +4 -0
  105. package/lib/utility/contact-table-search.pipe.d.ts +7 -0
  106. package/lib/utility/formate-num-field.pipe.d.ts +7 -0
  107. package/lib/utility/search-pipe.pipe.d.ts +7 -0
  108. package/lib/utility/selective-preloading-strategy.d.ts +9 -0
  109. package/lib/utility/table-search.pipe.d.ts +7 -0
  110. package/lib/utility/tranform.directive.d.ts +10 -0
  111. package/lib/websearch-history/websearch-history.component.d.ts +62 -0
  112. package/package.json +48 -0
  113. package/public_api.d.ts +52 -0
@@ -0,0 +1,31 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { HttpClient } from '@angular/common/http';
3
+ // import { GlobleEnvService } from 'ez/ez/src/app/globle/globle-env.service';
4
+ import { GlobleEnvService } from '../globle/globle-env.service';
5
+ import { Cookie } from 'ng2-cookies/ng2-cookies';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common/http";
8
+ import * as i2 from "../globle/globle-env.service";
9
+ export class AssortServiceService {
10
+ constructor(http, glbEnv) {
11
+ this.http = http;
12
+ this.glbEnv = glbEnv;
13
+ }
14
+ load(reqObj, headers, url) {
15
+ return this.http.post(this.glbEnv.baseUrl + url, JSON.stringify(reqObj), headers)
16
+ .toPromise()
17
+ .then((response) => response);
18
+ }
19
+ getCookies() {
20
+ return Cookie.get('_logid');
21
+ }
22
+ }
23
+ /** @nocollapse */ /** @nocollapse */ AssortServiceService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AssortServiceService, deps: [{ token: i1.HttpClient }, { token: i2.GlobleEnvService }], target: i0.ɵɵFactoryTarget.Injectable });
24
+ /** @nocollapse */ /** @nocollapse */ AssortServiceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AssortServiceService, providedIn: 'root' });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AssortServiceService, decorators: [{
26
+ type: Injectable,
27
+ args: [{
28
+ providedIn: 'root'
29
+ }]
30
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.GlobleEnvService }]; } });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzb3J0LXNlcnZpY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvYXNzb3J0LXNlcnZpY2UvYXNzb3J0LXNlcnZpY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCw4RUFBOEU7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7O0FBS2pELE1BQU0sT0FBTyxvQkFBb0I7SUFFL0IsWUFDVSxJQUFnQixFQUNqQixNQUF3QjtRQUR2QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2pCLFdBQU0sR0FBTixNQUFNLENBQWtCO0lBQzdCLENBQUM7SUFFTCxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDO2FBQzlFLFNBQVMsRUFBRTthQUNYLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUIsQ0FBQzs7dUpBZlUsb0JBQW9COzJKQUFwQixvQkFBb0IsY0FGbkIsTUFBTTsyRkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG4vLyBpbXBvcnQgeyBHbG9ibGVFbnZTZXJ2aWNlIH0gZnJvbSAnZXovZXovc3JjL2FwcC9nbG9ibGUvZ2xvYmxlLWVudi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2xvYmxlRW52U2VydmljZSB9IGZyb20gJy4uL2dsb2JsZS9nbG9ibGUtZW52LnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgQ29va2llIH0gZnJvbSAnbmcyLWNvb2tpZXMvbmcyLWNvb2tpZXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXNzb3J0U2VydmljZVNlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHB1YmxpYyBnbGJFbnY6IEdsb2JsZUVudlNlcnZpY2UsXHJcbiAgKSB7IH1cclxuXHJcbiAgbG9hZChyZXFPYmosIGhlYWRlcnMsIHVybCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuZ2xiRW52LmJhc2VVcmwgKyB1cmwsIEpTT04uc3RyaW5naWZ5KHJlcU9iaiksIGhlYWRlcnMpXHJcbiAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlKTtcclxuICB9XHJcblxyXG4gIGdldENvb2tpZXMoKSB7XHJcbiAgICByZXR1cm4gQ29va2llLmdldCgnX2xvZ2lkJyk7XHJcbiAgfVxyXG4gIFxyXG59XHJcbiJdfQ==
@@ -0,0 +1,231 @@
1
+ import { CommanServiceService } from '../comman-service/comman-service.service';
2
+ import { PricingService } from './../pricing-service/pricing.service';
3
+ import { Router, ActivatedRoute } from '@angular/router';
4
+ import { Component } from '@angular/core';
5
+ import { ToastrService } from 'ngx-toastr';
6
+ import { NgxSpinnerService } from "ngx-spinner";
7
+ import { FormArray, FormBuilder } from '@angular/forms';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/router";
10
+ import * as i2 from "ngx-toastr";
11
+ import * as i3 from "ngx-spinner";
12
+ import * as i4 from "./../pricing-service/pricing.service";
13
+ import * as i5 from "../comman-service/comman-service.service";
14
+ import * as i6 from "@angular/forms";
15
+ import * as i7 from "ng-select";
16
+ import * as i8 from "@angular/common";
17
+ import * as i9 from "../utility/app-no-dbl-click.directive";
18
+ ;
19
+ export class AttributeDefinitionComponent {
20
+ constructor(router, route, toastr, spinnerService, ps, cs, fb) {
21
+ this.router = router;
22
+ this.route = route;
23
+ this.toastr = toastr;
24
+ this.spinnerService = spinnerService;
25
+ this.ps = ps;
26
+ this.cs = cs;
27
+ this.fb = fb;
28
+ this.priceDefination = [];
29
+ }
30
+ //load page defination
31
+ getPageDefination() {
32
+ this.spinnerService.show();
33
+ let reqObj = {};
34
+ reqObj['formNme'] = 'priceGroupForm';
35
+ reqObj['grpIdn'] = this.route.snapshot.params['id'];
36
+ this.ps.data(reqObj, 'loadData', 'pricing/load')
37
+ .subscribe(response => {
38
+ if (response.status == 'SUCCESS') {
39
+ console.log(response);
40
+ let res = response.result;
41
+ let pageDefination = res.pageDefination;
42
+ this.spinnerService.hide();
43
+ this.priceDefination = [...res.priceDefination];
44
+ this.btnAction = res.pageDefination.action;
45
+ this.addNew = pageDefination.button[0];
46
+ this.pageInfo = res.pageDefination;
47
+ this.attibutes = res.attrStructureDtl.map(option => ({
48
+ sort: option.sort,
49
+ label: option.print + ' ' + '(' + option.attr + ')',
50
+ type: option.dataType,
51
+ value: option.attr,
52
+ prpList: option.prpList
53
+ }));
54
+ // this.pkf = response.pageInfo.primary_key_field;
55
+ // this.datalist = response.dataList;
56
+ // this.actions = response.actions;
57
+ // this.navigation = response.navigation;
58
+ this.spinnerService.hide();
59
+ }
60
+ else {
61
+ console.log(response);
62
+ this.spinnerService.hide();
63
+ this.toastr.error(response.message);
64
+ }
65
+ }, error => {
66
+ console.log(error);
67
+ this.spinnerService.hide();
68
+ this.toastr.error(error);
69
+ });
70
+ }
71
+ ngOnInit() {
72
+ console.log("response");
73
+ this.myFormmm = this.fb.group({
74
+ attr: '',
75
+ display: '',
76
+ sort: '',
77
+ values: this.fb.array([]),
78
+ grid: '',
79
+ status: ''
80
+ });
81
+ this.getPageDefination();
82
+ this.myFormmm.valueChanges.subscribe(console.log);
83
+ }
84
+ get fromToForms() {
85
+ return this.myFormmm.get('values');
86
+ }
87
+ get attr() {
88
+ return this.myFormmm.get('attr');
89
+ }
90
+ get disType() {
91
+ return this.myFormmm.get('display').value;
92
+ }
93
+ addFromTo() {
94
+ const values = this.fb.group({
95
+ srt_frm: [],
96
+ srt_to: []
97
+ });
98
+ this.fromToForms.push(values);
99
+ }
100
+ deletePhone(i) {
101
+ // this.fromToForms.setValue()
102
+ this.fromToForms.removeAt(i);
103
+ }
104
+ getAttriBute(val) {
105
+ let attrval;
106
+ if (val == null) {
107
+ attrval = this.attr.value;
108
+ }
109
+ else {
110
+ attrval = val;
111
+ }
112
+ this.attibutes.forEach(element => {
113
+ if (element.value == attrval) {
114
+ console.log(element);
115
+ this.type = element.type;
116
+ if (element.type == 'c') {
117
+ this.frmPrps = element.prpList;
118
+ this.toPrps = element.prpList;
119
+ }
120
+ }
121
+ });
122
+ }
123
+ userAction(obj, call, actionObj) {
124
+ console.log(obj, call, actionObj);
125
+ this.currObj = null;
126
+ this.currObj = obj;
127
+ this.getAttriBute(obj.attr);
128
+ let fromvalueList = [];
129
+ let valuelst = obj.values || [];
130
+ valuelst.forEach(element => {
131
+ let valCon = this.fb.group({
132
+ "srt_frm": element.srt_frm,
133
+ "srt_to": element.srt_to
134
+ });
135
+ fromvalueList.push(valCon);
136
+ });
137
+ // let values = (obj.values|| []).map((x) => this.fb.group(x))
138
+ if (call == 'edit') {
139
+ document.getElementById('datamdbtn').click();
140
+ this.btnName = 'Edit';
141
+ this.myFormmm = this.fb.group({
142
+ attr: obj.attr,
143
+ display: obj.display,
144
+ sort: obj.sort,
145
+ values: new FormArray(fromvalueList),
146
+ grid: obj.grid,
147
+ status: obj.status
148
+ });
149
+ }
150
+ else if (call == 'delete') {
151
+ document.getElementById('deletebtn').click();
152
+ }
153
+ }
154
+ setBtnAdd() {
155
+ this.btnName = 'Add';
156
+ this.myFormmm = this.fb.group({
157
+ attr: '',
158
+ display: '',
159
+ sort: '',
160
+ values: this.fb.array([]),
161
+ grid: '',
162
+ status: ''
163
+ });
164
+ }
165
+ deleteData() {
166
+ this.spinnerService.show();
167
+ let reqObj = {};
168
+ reqObj['formNme'] = 'priceGroupDefinition';
169
+ reqObj['trnsType'] = 'DELETE';
170
+ reqObj['attr'] = this.currObj.attr;
171
+ reqObj['grpIdn'] = this.route.snapshot.params['id'];
172
+ console.log(reqObj);
173
+ this.ps.data(reqObj, 'savePriceGroupDef', 'pricing/load')
174
+ .subscribe(response => {
175
+ if (response.status == 'SUCCESS') {
176
+ console.log(response);
177
+ let res = response.result;
178
+ // let index = this.priceDefination.indexOf(this.currObj);
179
+ // this.priceDefination.splice(index, 1);
180
+ this.getPageDefination();
181
+ document.getElementById('deleteCloseMd').click();
182
+ this.spinnerService.hide();
183
+ }
184
+ else {
185
+ this.spinnerService.hide();
186
+ this.toastr.error(response.message);
187
+ }
188
+ }, error => {
189
+ this.spinnerService.hide();
190
+ this.toastr.error(error);
191
+ });
192
+ }
193
+ onSubmit() {
194
+ this.spinnerService.show();
195
+ let formsVal = this.myFormmm.value;
196
+ let reqObj = {};
197
+ reqObj['formNme'] = 'priceGroupDefinition';
198
+ reqObj['trnsType'] = this.btnName == 'Add' ? 'ADD' : 'EDIT'; //this.currObj != null ? 'EDIT' : 'ADD';
199
+ formsVal['status'] = '1';
200
+ reqObj['dataTrnsDtl'] = formsVal;
201
+ reqObj['grpIdn'] = this.route.snapshot.params['id'];
202
+ if (this.currObj != null) {
203
+ reqObj['attr'] = formsVal['attr'];
204
+ }
205
+ console.log(JSON.stringify(reqObj));
206
+ this.ps.data(reqObj, 'savePriceGroupDef', 'pricing/load')
207
+ .subscribe(response => {
208
+ if (response.status == 'SUCCESS') {
209
+ console.log(response);
210
+ let res = response.result;
211
+ document.getElementById('closeMd').click();
212
+ this.getPageDefination();
213
+ this.spinnerService.hide();
214
+ }
215
+ else {
216
+ this.spinnerService.hide();
217
+ this.toastr.error(response.message);
218
+ }
219
+ }, error => {
220
+ this.spinnerService.hide();
221
+ this.toastr.error(error);
222
+ });
223
+ }
224
+ }
225
+ /** @nocollapse */ /** @nocollapse */ AttributeDefinitionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AttributeDefinitionComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ToastrService }, { token: i3.NgxSpinnerService }, { token: i4.PricingService }, { token: i5.CommanServiceService }, { token: i6.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
226
+ /** @nocollapse */ /** @nocollapse */ AttributeDefinitionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AttributeDefinitionComponent, selector: "app-attribute-definition", ngImport: i0, template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">\r\n <span class=\"fa fa-chevron-left cp\" (click)=\"cs.pageBck();\"> Back</span>&nbsp;&nbsp;&nbsp; {{pageInfo?.title}}\r\n <span class=\"f-12\">({{cs.cDate | date:'medium'}})</span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" *ngIf=\"addNew?.is_compulsory == 1\" (click)=\"f.reset();\" data-toggle=\"modal\"\r\n data-target=\"#datamodal\" (click)=\"setBtnAdd()\">{{addNew?.form_field_title}}</button>\r\n </div>\r\n </div>\r\n <div class=\"content-frame\">\r\n <!-- <div class=\"content-frame-left\" *ngIf=\"navigation.length > 0\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <div class=\"list-group border-bottom\">\r\n <a href=\"javascript:void(0)\" class=\"list-group-item\" [ngClass]=\"{'active' :i == cLink}\" *ngFor=\"let nav of navigation;let i=index\"\r\n (click)=\"navigationFun(nav,i);\">{{nav.form_field_title}} </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"content-frame-body\" style=\"margin-left:0;\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-8\"></div>\r\n <div class=\"col-sm-4\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search &nbsp;&nbsp;</label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div> -->\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\">\r\n <div class=\"form-group\">\r\n <label for=\"ddlPagesize\">Page Size &nbsp; &nbsp;</label>\r\n <select class=\"form-control\" name=\"pageSize\" [(ngModel)]=\"pageSize\">\r\n <!-- (change)=\"onPageSizeChange(pageSize)\" -->\r\n <option value=\"All\">All</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"25\">25</option>\r\n <option value=\"50\">50</option>\r\n <option value=\"100\">100</option>\r\n </select>\r\n </div>\r\n </form>\r\n <button class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px;margin-left: 10px;\" data-toggle=\"tooltip\"\r\n data-placement=\"right\" title=\"Refresh\" (click)=\"ngOnInit();\">\r\n <span class=\"fa fa-refresh\"></span>\r\n </button>\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search &nbsp;&nbsp;</label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th class=\"align-center\">SR No</th>\r\n <th class=\"align-center\">Action</th>\r\n <th class=\"align-center\">Attribute</th>\r\n <th class=\"align-center\">Grid</th>\r\n <th class=\"align-center\">Display</th>\r\n <th class=\"align-center\">Sort</th>\r\n <th class=\"align-center\">Date</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let priceDef of priceDefination;let i = index\">\r\n <!-- | searchPipe:searchF | orderBy: order:reverse:'case-insensitive' | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index; -->\r\n <td class=\"align-center\">{{i + 1}}</td>\r\n <td class=\"align-center\">\r\n <div class=\"btn-group\">\r\n <a href=\"#\" data-toggle=\"dropdown\" class=\"btn btn-info dropdown-toggle\">Action\r\n <span class=\"caret\"></span>\r\n </a>\r\n <ul class=\"dropdown-menu\" role=\"menu\">\r\n <li *ngFor=\"let action of btnAction\">\r\n <a href=\"javascript:void(0)\" (click)=\"userAction(priceDef,action.form_field_typ,action);\">\r\n {{action.form_field_title}}\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n <td class=\"align-center\">{{priceDef.attr}}</td>\r\n <td class=\"align-center\">{{priceDef.grid}}</td>\r\n <td class=\"align-center\">{{priceDef.display}}</td>\r\n <td class=\"align-center\">{{priceDef.sort}}</td>\r\n <td class=\"align-center\">{{priceDef.start_dt}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!-- <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"datamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" [formGroup]=\"myFormmm\" #f=\"ngForm\" > \r\n <!-- ng-submit=\"onSubmit()\" -->\r\n <!-- (ngSubmit)=\"onSubmit(f,submitBtn)\" -->\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" id=\"closeMd\">\r\n <!-- (click)=\"closeNull();\" -->\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">Add Group</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <!-- {{myFormmm.value | json}} -->\r\n <div class=\"col-md-12\">\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Attribute\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"attibutes\" formControlName=\"attr\" (selected)=\"getAttriBute(null)\">\r\n </ng-select>\r\n </div>\r\n <!-- <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Display\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" formControlName=\"grid\">\r\n <option value=\"\">Select</option>\r\n <option value=\"group\">Group</option>\r\n <option value=\"side\">Side</option>\r\n <option value=\"head\">Head</option>\r\n </select>\r\n </div>\r\n <!-- <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Type\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" formControlName=\"display\">\r\n <option value=\"\">Select</option>\r\n <option value=\"range\">Range</option>\r\n <option value=\"plusminus\">With plus minus</option>\r\n <option value=\"woplusminus\">Without plus minus </option>\r\n <option value=\"userdefined\">User Defined </option>\r\n\r\n </select>\r\n </div>\r\n <!-- <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div formArrayName=\"values\" *ngIf=\"disType == 'userdefined'\">\r\n <div class=\"form-group\">\r\n <div class=\"col-md-2\"></div>\r\n <div class=\"col-md-4\" style=\"text-align: center\"><label class=\"control-label\">From</label></div>\r\n <div class=\"col-md-4\" style=\"text-align: center\"><label class=\"control-label\">To</label></div>\r\n </div>\r\n <div class=\"form-group\">\r\n <div *ngFor=\"let value of fromToForms.controls;let i = index\" class=\"row\" style=\"margin-top: 5px;\"\r\n [formGroupName]=\"i\">\r\n <div class=\"col-md-2\"></div>\r\n <div *ngIf=\"type == 't'\">\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"srt_frm\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"srt_to\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"type == 'n'\">\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"srt_frm\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"srt_to\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"type == 'c'\">\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" formControlName=\"srt_frm\" >\r\n <option *ngFor=\"let prp of frmPrps\" [value]=\"prp.sort\">{{prp.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" formControlName=\"srt_to\">\r\n <option *ngFor=\"let prp of toPrps\" [value]=\"prp.sort\">{{prp.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"type == 'd'\">\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"date\" class=\"form-control\" formControlName=\"srt_frm\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"date\" class=\"form-control\" formControlName=\"srt_to\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" style=\"text-align:center\">\r\n <button class=\"w-100 btn btn-danger\" (click)=\"deletePhone(i);\"><i class=\"fa fa-times\"\r\n aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" style=\"text-align:center;\">\r\n <a class=\"btn btn-success\" (click)=\"addFromTo();\">Add More</a>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Sort\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <input class=\"form-control\" formControlName=\"sort\" />\r\n </div>\r\n <!-- <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-success\" appAppNoDblClick (click)=\"onSubmit()\">{{btnName}}</button>\r\n <button type=\"reset\" class=\"btn btn-danger\">Reset</button>\r\n <!-- (click)=\"reset(f)\" -->\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"deletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" id=\"deleteCloseMd\">\r\n <!-- (click)=\"closeNull();\" #deleteclsbtn -->\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" (click)=\"deleteData();\" data-dismiss=\"modal\">Delete</button>\r\n <!-- (click)=\"deleteDataList();\" -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <button id=\"deletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deletemodal\"></button>\r\n <button id=\"datamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"clsMd\" [hidden]=\"true\" data-dismiss=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"popdatamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popdatamodal\"></button>\r\n <button id=\"popResmodalbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popResmodal\"></button>\r\n</div>", styles: [""], components: [{ type: i7.SelectComponent, selector: "ng-select", inputs: ["options", "allowClear", "disabled", "multiple", "noFilter", "notFoundMsg", "placeholder", "filterPlaceholder", "label", "highlightColor", "highlightTextColor"], outputs: ["opened", "closed", "selected", "deselected", "focus", "blur", "noOptionsFound", "filterInputChanged"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i6.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i9.AppNoDblClickDirective, selector: "[appAppNoDblClick]" }], pipes: { "date": i8.DatePipe } });
227
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AttributeDefinitionComponent, decorators: [{
228
+ type: Component,
229
+ args: [{ selector: 'app-attribute-definition', template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">\r\n <span class=\"fa fa-chevron-left cp\" (click)=\"cs.pageBck();\"> Back</span>&nbsp;&nbsp;&nbsp; {{pageInfo?.title}}\r\n <span class=\"f-12\">({{cs.cDate | date:'medium'}})</span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" *ngIf=\"addNew?.is_compulsory == 1\" (click)=\"f.reset();\" data-toggle=\"modal\"\r\n data-target=\"#datamodal\" (click)=\"setBtnAdd()\">{{addNew?.form_field_title}}</button>\r\n </div>\r\n </div>\r\n <div class=\"content-frame\">\r\n <!-- <div class=\"content-frame-left\" *ngIf=\"navigation.length > 0\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <div class=\"list-group border-bottom\">\r\n <a href=\"javascript:void(0)\" class=\"list-group-item\" [ngClass]=\"{'active' :i == cLink}\" *ngFor=\"let nav of navigation;let i=index\"\r\n (click)=\"navigationFun(nav,i);\">{{nav.form_field_title}} </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"content-frame-body\" style=\"margin-left:0;\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-8\"></div>\r\n <div class=\"col-sm-4\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search &nbsp;&nbsp;</label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div> -->\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\">\r\n <div class=\"form-group\">\r\n <label for=\"ddlPagesize\">Page Size &nbsp; &nbsp;</label>\r\n <select class=\"form-control\" name=\"pageSize\" [(ngModel)]=\"pageSize\">\r\n <!-- (change)=\"onPageSizeChange(pageSize)\" -->\r\n <option value=\"All\">All</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"25\">25</option>\r\n <option value=\"50\">50</option>\r\n <option value=\"100\">100</option>\r\n </select>\r\n </div>\r\n </form>\r\n <button class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px;margin-left: 10px;\" data-toggle=\"tooltip\"\r\n data-placement=\"right\" title=\"Refresh\" (click)=\"ngOnInit();\">\r\n <span class=\"fa fa-refresh\"></span>\r\n </button>\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search &nbsp;&nbsp;</label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th class=\"align-center\">SR No</th>\r\n <th class=\"align-center\">Action</th>\r\n <th class=\"align-center\">Attribute</th>\r\n <th class=\"align-center\">Grid</th>\r\n <th class=\"align-center\">Display</th>\r\n <th class=\"align-center\">Sort</th>\r\n <th class=\"align-center\">Date</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let priceDef of priceDefination;let i = index\">\r\n <!-- | searchPipe:searchF | orderBy: order:reverse:'case-insensitive' | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index; -->\r\n <td class=\"align-center\">{{i + 1}}</td>\r\n <td class=\"align-center\">\r\n <div class=\"btn-group\">\r\n <a href=\"#\" data-toggle=\"dropdown\" class=\"btn btn-info dropdown-toggle\">Action\r\n <span class=\"caret\"></span>\r\n </a>\r\n <ul class=\"dropdown-menu\" role=\"menu\">\r\n <li *ngFor=\"let action of btnAction\">\r\n <a href=\"javascript:void(0)\" (click)=\"userAction(priceDef,action.form_field_typ,action);\">\r\n {{action.form_field_title}}\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n <td class=\"align-center\">{{priceDef.attr}}</td>\r\n <td class=\"align-center\">{{priceDef.grid}}</td>\r\n <td class=\"align-center\">{{priceDef.display}}</td>\r\n <td class=\"align-center\">{{priceDef.sort}}</td>\r\n <td class=\"align-center\">{{priceDef.start_dt}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!-- <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"datamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" [formGroup]=\"myFormmm\" #f=\"ngForm\" > \r\n <!-- ng-submit=\"onSubmit()\" -->\r\n <!-- (ngSubmit)=\"onSubmit(f,submitBtn)\" -->\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" id=\"closeMd\">\r\n <!-- (click)=\"closeNull();\" -->\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">Add Group</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <!-- {{myFormmm.value | json}} -->\r\n <div class=\"col-md-12\">\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Attribute\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"attibutes\" formControlName=\"attr\" (selected)=\"getAttriBute(null)\">\r\n </ng-select>\r\n </div>\r\n <!-- <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Display\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" formControlName=\"grid\">\r\n <option value=\"\">Select</option>\r\n <option value=\"group\">Group</option>\r\n <option value=\"side\">Side</option>\r\n <option value=\"head\">Head</option>\r\n </select>\r\n </div>\r\n <!-- <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Type\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" formControlName=\"display\">\r\n <option value=\"\">Select</option>\r\n <option value=\"range\">Range</option>\r\n <option value=\"plusminus\">With plus minus</option>\r\n <option value=\"woplusminus\">Without plus minus </option>\r\n <option value=\"userdefined\">User Defined </option>\r\n\r\n </select>\r\n </div>\r\n <!-- <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div formArrayName=\"values\" *ngIf=\"disType == 'userdefined'\">\r\n <div class=\"form-group\">\r\n <div class=\"col-md-2\"></div>\r\n <div class=\"col-md-4\" style=\"text-align: center\"><label class=\"control-label\">From</label></div>\r\n <div class=\"col-md-4\" style=\"text-align: center\"><label class=\"control-label\">To</label></div>\r\n </div>\r\n <div class=\"form-group\">\r\n <div *ngFor=\"let value of fromToForms.controls;let i = index\" class=\"row\" style=\"margin-top: 5px;\"\r\n [formGroupName]=\"i\">\r\n <div class=\"col-md-2\"></div>\r\n <div *ngIf=\"type == 't'\">\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"srt_frm\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"srt_to\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"type == 'n'\">\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"srt_frm\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"srt_to\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"type == 'c'\">\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" formControlName=\"srt_frm\" >\r\n <option *ngFor=\"let prp of frmPrps\" [value]=\"prp.sort\">{{prp.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" formControlName=\"srt_to\">\r\n <option *ngFor=\"let prp of toPrps\" [value]=\"prp.sort\">{{prp.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"type == 'd'\">\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"date\" class=\"form-control\" formControlName=\"srt_frm\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"date\" class=\"form-control\" formControlName=\"srt_to\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" style=\"text-align:center\">\r\n <button class=\"w-100 btn btn-danger\" (click)=\"deletePhone(i);\"><i class=\"fa fa-times\"\r\n aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" style=\"text-align:center;\">\r\n <a class=\"btn btn-success\" (click)=\"addFromTo();\">Add More</a>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Sort\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <input class=\"form-control\" formControlName=\"sort\" />\r\n </div>\r\n <!-- <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-success\" appAppNoDblClick (click)=\"onSubmit()\">{{btnName}}</button>\r\n <button type=\"reset\" class=\"btn btn-danger\">Reset</button>\r\n <!-- (click)=\"reset(f)\" -->\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"deletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" id=\"deleteCloseMd\">\r\n <!-- (click)=\"closeNull();\" #deleteclsbtn -->\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" (click)=\"deleteData();\" data-dismiss=\"modal\">Delete</button>\r\n <!-- (click)=\"deleteDataList();\" -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <button id=\"deletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deletemodal\"></button>\r\n <button id=\"datamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"clsMd\" [hidden]=\"true\" data-dismiss=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"popdatamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popdatamodal\"></button>\r\n <button id=\"popResmodalbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popResmodal\"></button>\r\n</div>", styles: [""] }]
230
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ToastrService }, { type: i3.NgxSpinnerService }, { type: i4.PricingService }, { type: i5.CommanServiceService }, { type: i6.FormBuilder }]; } });
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLWRlZmluaXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXpsaWIvc3JjL2xpYi9hdHRyaWJ1dGUtZGVmaW5pdGlvbi9hdHRyaWJ1dGUtZGVmaW5pdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lemxpYi9zcmMvbGliL2F0dHJpYnV0ZS1kZWZpbml0aW9uL2F0dHJpYnV0ZS1kZWZpbml0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBYSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFIeEIsQ0FBQztBQVc1QyxNQUFNLE9BQU8sNEJBQTRCO0lBSXZDLFlBQ1MsTUFBYyxFQUNiLEtBQXFCLEVBQ3JCLE1BQXFCLEVBQ3JCLGNBQWlDLEVBQ2pDLEVBQWtCLEVBQ25CLEVBQXdCLEVBQ3ZCLEVBQWU7UUFOaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNiLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLE9BQUUsR0FBRixFQUFFLENBQWdCO1FBQ25CLE9BQUUsR0FBRixFQUFF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QWlCLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUM1QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDckM7UUFDSCxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDVCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7K0pBcE9VLDRCQUE0QjttSkFBNUIsNEJBQTRCLGdFQ2Z6Qyxnd2xCQXNWTTsyRkR2VU8sNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hblNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbWFuLXNlcnZpY2UvY29tbWFuLXNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFByaWNpbmdTZXJ2aWNlIH0gZnJvbSAnLi8uLi9wcmljaW5nLXNlcnZpY2UvcHJpY2luZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJzs7XHJcbmltcG9ydCB7IENvb2tpZSB9IGZyb20gJ25nMi1jb29raWVzL25nMi1jb29raWVzJztcclxuaW1wb3J0IHsgTmd4U3Bpbm5lclNlcnZpY2UgfSBmcm9tIFwibmd4LXNwaW5uZXJcIjtcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1hdHRyaWJ1dGUtZGVmaW5pdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F0dHJpYnV0ZS1kZWZpbml0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hdHRyaWJ1dGUtZGVmaW5pdGlvbi5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZURlZmluaXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBteUZvcm1tbTogRm9ybUdyb3VwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZSAsXHJcbiAgICBwcml2YXRlIHBzOiBQcmljaW5nU2VydmljZSxcclxuICAgIHB1YmxpYyBjczogQ29tbWFuU2VydmljZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlclxyXG4gICkgeyB9XHJcblxyXG4gIGFkZE5ldztcclxuICBwYWdlSW5mbztcclxuICBhdHRpYnV0ZXM7XHJcbiAgcHJpY2VEZWZpbmF0aW9uOiBhbnkgPSBbXTtcclxuICBhdHRyaWJ1dGU7XHJcbiAgYnRuQWN0aW9uO1xyXG4gIHBhZ2VTaXplO1xyXG4gIHNlYXJjaEY7XHJcbiAgYnRuTmFtZTtcclxuICAvL2xvYWQgcGFnZSBkZWZpbmF0aW9uIFxyXG4gIGdldFBhZ2VEZWZpbmF0aW9uKCkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9ICdwcmljZUdyb3VwRm9ybSc7XHJcbiAgICByZXFPYmpbJ2dycElkbiddID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2lkJ107XHJcbiAgICB0aGlzLnBzLmRhdGEocmVxT2JqLCAnbG9hZERhdGEnLCAncHJpY2luZy9sb2FkJylcclxuICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICAgIGxldCByZXMgPSByZXNwb25zZS5yZXN1bHQ7XHJcbiAgICAgICAgICBsZXQgcGFnZURlZmluYXRpb24gPSByZXMucGFnZURlZmluYXRpb247XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMucHJpY2VEZWZpbmF0aW9uID0gWy4uLnJlcy5wcmljZURlZmluYXRpb25dO1xyXG4gICAgICAgICAgdGhpcy5idG5BY3Rpb24gPSByZXMucGFnZURlZmluYXRpb24uYWN0aW9uO1xyXG4gICAgICAgICAgdGhpcy5hZGROZXcgPSBwYWdlRGVmaW5hdGlvbi5idXR0b25bMF07XHJcbiAgICAgICAgICB0aGlzLnBhZ2VJbmZvID0gcmVzLnBhZ2VEZWZpbmF0aW9uO1xyXG4gICAgICAgICAgdGhpcy5hdHRpYnV0ZXMgPSByZXMuYXR0clN0cnVjdHVyZUR0bC5tYXAob3B0aW9uID0+ICh7XHJcbiAgICAgICAgICAgIHNvcnQ6IG9wdGlvbi5zb3J0LFxyXG4gICAgICAgICAgICBsYWJlbDogb3B0aW9uLnByaW50ICsgJyAnICsgJygnICsgb3B0aW9uLmF0dHIgKyAnKScsXHJcbiAgICAgICAgICAgIHR5cGU6IG9wdGlvbi5kYXRhVHlwZSxcclxuICAgICAgICAgICAgdmFsdWU6IG9wdGlvbi5hdHRyLFxyXG4gICAgICAgICAgICBwcnBMaXN0OiBvcHRpb24ucHJwTGlzdFxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgLy8gdGhpcy5wa2YgPSByZXNwb25zZS5wYWdlSW5mby5wcmltYXJ5X2tleV9maWVsZDtcclxuICAgICAgICAgIC8vIHRoaXMuZGF0YWxpc3QgPSByZXNwb25zZS5kYXRhTGlzdDtcclxuICAgICAgICAgIC8vIHRoaXMuYWN0aW9ucyA9IHJlc3BvbnNlLmFjdGlvbnM7XHJcbiAgICAgICAgICAvLyB0aGlzLm5hdmlnYXRpb24gPSByZXNwb25zZS5uYXZpZ2F0aW9uO1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwicmVzcG9uc2VcIik7XHJcbiAgICB0aGlzLm15Rm9ybW1tID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGF0dHI6ICcnLFxyXG4gICAgICBkaXNwbGF5OiAnJyxcclxuICAgICAgc29ydDogJycsXHJcbiAgICAgIHZhbHVlczogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICAgIGdyaWQ6ICcnLFxyXG4gICAgICBzdGF0dXM6ICcnXHJcbiAgICB9KVxyXG4gICAgdGhpcy5nZXRQYWdlRGVmaW5hdGlvbigpO1xyXG4gICAgdGhpcy5teUZvcm1tbS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGNvbnNvbGUubG9nKTtcclxuICB9XHJcblxyXG4gIGdldCBmcm9tVG9Gb3JtcygpIHtcclxuICAgIHJldHVybiB0aGlzLm15Rm9ybW1tLmdldCgndmFsdWVzJykgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5teUZvcm1tbS5nZXQoJ2F0dHInKTtcclxuICB9XHJcblxyXG4gIGdldCBkaXNUeXBlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubXlGb3JtbW0uZ2V0KCdkaXNwbGF5JykudmFsdWU7XHJcbiAgfVxyXG5cclxuICBhZGRGcm9tVG8oKSB7XHJcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgc3J0X2ZybTogW10sXHJcbiAgICAgIHNydF90bzogW11cclxuICAgIH0pXHJcbiAgICB0aGlzLmZyb21Ub0Zvcm1zLnB1c2godmFsdWVzKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVBob25lKGkpIHtcclxuICAgIC8vIHRoaXMuZnJvbVRvRm9ybXMuc2V0VmFsdWUoKVxyXG4gICAgdGhpcy5mcm9tVG9Gb3Jtcy5yZW1vdmVBdChpKTtcclxuICB9XHJcblxyXG4gIHR5cGU7XHJcbiAgZnJtUHJwcztcclxuICB0b1BycHM7XHJcblxyXG4gIGdldEF0dHJpQnV0ZSh2YWwpIHtcclxuICAgIGxldCBhdHRydmFsO1xyXG4gICAgaWYgKHZhbCA9PSBudWxsKSB7XHJcbiAgICAgIGF0dHJ2YWwgPSB0aGlzLmF0dHIudmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhdHRydmFsID0gdmFsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hdHRpYnV0ZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQudmFsdWUgPT0gYXR0cnZhbCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMudHlwZSA9IGVsZW1lbnQudHlwZTtcclxuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09ICdjJykge1xyXG4gICAgICAgICAgdGhpcy5mcm1QcnBzID0gZWxlbWVudC5wcnBMaXN0O1xyXG4gICAgICAgICAgdGhpcy50b1BycHMgPSBlbGVtZW50LnBycExpc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3Vyck9iajtcclxuXHJcbiAgdXNlckFjdGlvbihvYmosIGNhbGwsIGFjdGlvbk9iaikge1xyXG4gICAgY29uc29sZS5sb2cob2JqLCBjYWxsLCBhY3Rpb25PYmopO1xyXG4gICAgdGhpcy5jdXJyT2JqID0gbnVsbDtcclxuICAgIHRoaXMuY3Vyck9iaiA9IG9iajtcclxuICAgIHRoaXMuZ2V0QXR0cmlCdXRlKG9iai5hdHRyKTtcclxuICAgIGxldCBmcm9tdmFsdWVMaXN0OiBhbnk9W107XHJcbiAgICBsZXQgdmFsdWVsc3QgPSBvYmoudmFsdWVzfHxbXTtcclxuICAgIHZhbHVlbHN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGxldCB2YWxDb249ICB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICBcInNydF9mcm1cIjplbGVtZW50LnNydF9mcm0sXHJcbiAgICAgICAgXCJzcnRfdG9cIjplbGVtZW50LnNydF90b1xyXG4gICAgICB9KTtcclxuICAgICAgZnJvbXZhbHVlTGlzdC5wdXNoKHZhbENvbik7XHJcbiAgfSk7XHJcbiAgLy8gbGV0IHZhbHVlcyA9IChvYmoudmFsdWVzfHwgW10pLm1hcCgoeCkgPT4gdGhpcy5mYi5ncm91cCh4KSlcclxuICAgIGlmIChjYWxsID09ICdlZGl0Jykge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGF0YW1kYnRuJykuY2xpY2soKTtcclxuICAgICAgdGhpcy5idG5OYW1lID0gJ0VkaXQnO1xyXG4gICAgICB0aGlzLm15Rm9ybW1tID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgYXR0cjogb2JqLmF0dHIsXHJcbiAgICAgICAgZGlzcGxheTogb2JqLmRpc3BsYXksXHJcbiAgICAgICAgc29ydDogb2JqLnNvcnQsXHJcbiAgICAgICAgdmFsdWVzOiBuZXcgRm9ybUFycmF5KGZyb212YWx1ZUxpc3QpLFxyXG4gICAgICAgIGdyaWQ6IG9iai5ncmlkLFxyXG4gICAgICAgIHN0YXR1czogb2JqLnN0YXR1c1xyXG4gICAgICB9KVxyXG4gICAgICBcclxuXHJcbiAgICB9IGVsc2UgaWYgKGNhbGwgPT0gJ2RlbGV0ZScpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlbGV0ZWJ0bicpLmNsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNldEJ0bkFkZCgpIHtcclxuICAgIHRoaXMuYnRuTmFtZSA9ICdBZGQnO1xyXG4gICAgdGhpcy5teUZvcm1tbSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBhdHRyOiAnJyxcclxuICAgICAgZGlzcGxheTogJycsXHJcbiAgICAgIHNvcnQ6ICcnLFxyXG4gICAgICB2YWx1ZXM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICBncmlkOiAnJyxcclxuICAgICAgc3RhdHVzOiAnJ1xyXG4gICAgfSlcclxuICB9XHJcbiAgZGVsZXRlRGF0YSgpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSAncHJpY2VHcm91cERlZmluaXRpb24nO1xyXG4gICAgcmVxT2JqWyd0cm5zVHlwZSddID0gJ0RFTEVURSc7XHJcbiAgICByZXFPYmpbJ2F0dHInXSA9IHRoaXMuY3Vyck9iai5hdHRyO1xyXG4gICAgcmVxT2JqWydncnBJZG4nXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydpZCddO1xyXG4gICAgY29uc29sZS5sb2cocmVxT2JqKTtcclxuICAgIHRoaXMucHMuZGF0YShyZXFPYmosICdzYXZlUHJpY2VHcm91cERlZicsICdwcmljaW5nL2xvYWQnKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgICAgbGV0IHJlcyA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICAgIC8vIGxldCBpbmRleCA9IHRoaXMucHJpY2VEZWZpbmF0aW9uLmluZGV4T2YodGhpcy5jdXJyT2JqKTtcclxuICAgICAgICAgIC8vIHRoaXMucHJpY2VEZWZpbmF0aW9uLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB0aGlzLmdldFBhZ2VEZWZpbmF0aW9uKCk7XHJcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVsZXRlQ2xvc2VNZCcpLmNsaWNrKCk7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25TdWJtaXQoKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCBmb3Jtc1ZhbCA9IHRoaXMubXlGb3JtbW0udmFsdWU7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9ICdwcmljZUdyb3VwRGVmaW5pdGlvbic7XHJcbiAgICByZXFPYmpbJ3RybnNUeXBlJ10gPSB0aGlzLmJ0bk5hbWUgPT0gJ0FkZCcgPyAnQUREJyA6ICdFRElUJzsvL3RoaXMuY3Vyck9iaiAhPSBudWxsID8gJ0VESVQnIDogJ0FERCc7XHJcbiAgICBmb3Jtc1ZhbFsnc3RhdHVzJ10gPSAnMSc7XHJcbiAgICByZXFPYmpbJ2RhdGFUcm5zRHRsJ10gPSBmb3Jtc1ZhbDtcclxuICAgIHJlcU9ialsnZ3JwSWRuJ10gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snaWQnXTtcclxuICAgIGlmICh0aGlzLmN1cnJPYmogIT0gbnVsbCkge1xyXG4gICAgICByZXFPYmpbJ2F0dHInXSA9IGZvcm1zVmFsWydhdHRyJ107XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIHRoaXMucHMuZGF0YShyZXFPYmosICdzYXZlUHJpY2VHcm91cERlZicsICdwcmljaW5nL2xvYWQnKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgICAgbGV0IHJlcyA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbG9zZU1kJykuY2xpY2soKTtcclxuICAgICAgICAgIHRoaXMuZ2V0UGFnZURlZmluYXRpb24oKTtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibXRcIj5cclxuICA8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtZGVmYXVsdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbmVsLWhlYWRpbmdcIj5cclxuICAgICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWNoZXZyb24tbGVmdCBjcFwiIChjbGljayk9XCJjcy5wYWdlQmNrKCk7XCI+IEJhY2s8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7IHt7cGFnZUluZm8/LnRpdGxlfX1cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImYtMTJcIj4oe3tjcy5jRGF0ZSB8IGRhdGU6J21lZGl1bSd9fSk8L3NwYW4+XHJcbiAgICAgIDwvaDM+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYWRkQnRuXCIgY2xhc3M9XCJidG4gYnRuLWluZm8gcHVsbC1yaWdodFwiICpuZ0lmPVwiYWRkTmV3Py5pc19jb21wdWxzb3J5ID09IDFcIiAoY2xpY2spPVwiZi5yZXNldCgpO1wiIGRhdGEtdG9nZ2xlPVwibW9kYWxcIlxyXG4gICAgICAgIGRhdGEtdGFyZ2V0PVwiI2RhdGFtb2RhbFwiIChjbGljayk9XCJzZXRCdG5BZGQoKVwiPnt7YWRkTmV3Py5mb3JtX2ZpZWxkX3RpdGxlfX08L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb250ZW50LWZyYW1lXCI+XHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb250ZW50LWZyYW1lLWxlZnRcIiAqbmdJZj1cIm5hdmlnYXRpb24ubGVuZ3RoID4gMFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtZGVmYXVsdFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1ib2R5XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cCBib3JkZXItYm90dG9tXCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJyA6aSA9PSBjTGlua31cIiAqbmdGb3I9XCJsZXQgbmF2IG9mIG5hdmlnYXRpb247bGV0IGk9aW5kZXhcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0aW9uRnVuKG5hdixpKTtcIj57e25hdi5mb3JtX2ZpZWxkX3RpdGxlfX0gPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtZnJhbWUtYm9keVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6MDtcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiPlxyXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lIHB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZXhhbXBsZUlucHV0TmFtZTJcIj5TZWFyY2ggJm5ic3A7Jm5ic3A7PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZXhhbXBsZUlucHV0TmFtZTJcIiBuYW1lPVwic2NodHh0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJmb3JtLWlubGluZSBwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZGxQYWdlc2l6ZVwiPlBhZ2UgU2l6ZSAmbmJzcDsgJm5ic3A7PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJwYWdlU2l6ZVwiIFsobmdNb2RlbCldPVwicGFnZVNpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gKGNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplKVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBbGxcIj5BbGw8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTBcIj4xMDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyNVwiPjI1PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjUwXCI+NTA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTAwXCI+MTAwPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBzdHlsZT1cInBhZGRpbmc6IDRweCAxNXB4IDRweCAyMHB4O21hcmdpbi1sZWZ0OiAxMHB4O1wiIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgdGl0bGU9XCJSZWZyZXNoXCIgKGNsaWNrKT1cIm5nT25Jbml0KCk7XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXJlZnJlc2hcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lIHB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleGFtcGxlSW5wdXROYW1lMlwiPlNlYXJjaCAmbmJzcDsmbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZXhhbXBsZUlucHV0TmFtZTJcIiBuYW1lPVwic2NodHh0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hGXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLWhvdmVyLWNlbGxzXCI+XHJcbiAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJhbGlnbi1jZW50ZXJcIj5TUiBObzwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImFsaWduLWNlbnRlclwiPkFjdGlvbjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImFsaWduLWNlbnRlclwiPkF0dHJpYnV0ZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImFsaWduLWNlbnRlclwiPkdyaWQ8L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJhbGlnbi1jZW50ZXJcIj5EaXNwbGF5PC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiYWxpZ24tY2VudGVyXCI+U29ydDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImFsaWduLWNlbnRlclwiPkRhdGU8L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcHJpY2VEZWYgb2YgcHJpY2VEZWZpbmF0aW9uO2xldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSB8IHNlYXJjaFBpcGU6c2VhcmNoRiB8IG9yZGVyQnk6IG9yZGVyOnJldmVyc2U6J2Nhc2UtaW5zZW5zaXRpdmUnIHwgcGFnaW5hdGU6IHsgaXRlbXNQZXJQYWdlOiBwYWdlU2l6ZSwgY3VycmVudFBhZ2U6IHAgfTsgbGV0IGkgPSBpbmRleDsgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLWNlbnRlclwiPnt7aSArIDF9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiIGNsYXNzPVwiYnRuIGJ0bi1pbmZvIGRyb3Bkb3duLXRvZ2dsZVwiPkFjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIHJvbGU9XCJtZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGJ0bkFjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwidXNlckFjdGlvbihwcmljZURlZixhY3Rpb24uZm9ybV9maWVsZF90eXAsYWN0aW9uKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YWN0aW9uLmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLWNlbnRlclwiPnt7cHJpY2VEZWYuYXR0cn19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tY2VudGVyXCI+e3twcmljZURlZi5ncmlkfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1jZW50ZXJcIj57e3ByaWNlRGVmLmRpc3BsYXl9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLWNlbnRlclwiPnt7cHJpY2VEZWYuc29ydH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tY2VudGVyXCI+e3twcmljZURlZi5zdGFydF9kdH19PC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSA8cGFnaW5hdGlvbi1jb250cm9scyAocGFnZUNoYW5nZSk9XCJwID0gJGV2ZW50XCIgY2xhc3M9XCJwdWxsLXJpZ2h0XCI+PC9wYWdpbmF0aW9uLWNvbnRyb2xzPiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJkYXRhbW9kYWxcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZGVmTW9kYWxIZWFkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiXHJcbiAgICBkYXRhLWtleWJvYXJkPVwiZmFsc2VcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiIFtmb3JtR3JvdXBdPVwibXlGb3JtbW1cIiAjZj1cIm5nRm9ybVwiICA+IFxyXG4gICAgICAgICAgPCEtLSBuZy1zdWJtaXQ9XCJvblN1Ym1pdCgpXCIgLS0+XHJcbiAgICAgICAgICA8IS0tIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdChmLHN1Ym1pdEJ0bilcIiAgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGlkPVwiY2xvc2VNZFwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICAtLT5cclxuICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImRlZk1vZGFsSGVhZFwiPkFkZCBHcm91cDwvaDQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8IS0tIHt7bXlGb3JtbW0udmFsdWUgfCBqc29ufX0gLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTIgY29udHJvbC1sYWJlbFwiPkF0dHJpYnV0ZVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IHN0eWxlPVwiei1pbmRleDogNTtcIiBbb3B0aW9uc109XCJhdHRpYnV0ZXNcIiBmb3JtQ29udHJvbE5hbWU9XCJhdHRyXCIgKHNlbGVjdGVkKT1cImdldEF0dHJpQnV0ZShudWxsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmludmFsaWQgJiYgKHRleHRJbnB1dC5kaXJ0eSB8fCB0ZXh0SW5wdXQudG91Y2hlZClcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRleHRJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuZXJyb3JzLm1pbmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBtdXN0IGJlIGF0IGxlYXN0IHt7ZmwuZm9ybV9maWVsZF9taW5fbGVuZ3RofX0gY2hhcmFjdGVycyBsb25nLlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmVycm9ycy5tYXhsZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gTWF4bWltdW0gbGltaXQge3tmbC5mb3JtX2ZpZWxkX21heF9sZW5ndGh9fSBjaGFyYWN0ZXJzIGxvbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMiBjb250cm9sLWxhYmVsXCI+RGlzcGxheVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJncm91cFwiPkdyb3VwPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzaWRlXCI+U2lkZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaGVhZFwiPkhlYWQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cInRleHRJbnB1dC5pbnZhbGlkICYmICh0ZXh0SW5wdXQuZGlydHkgfHwgdGV4dElucHV0LnRvdWNoZWQpXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRleHRJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuZXJyb3JzLm1pbmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IG11c3QgYmUgYXQgbGVhc3Qge3tmbC5mb3JtX2ZpZWxkX21pbl9sZW5ndGh9fSBjaGFyYWN0ZXJzIGxvbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmVycm9ycy5tYXhsZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBNYXhtaW11bSBsaW1pdCB7e2ZsLmZvcm1fZmllbGRfbWF4X2xlbmd0aH19IGNoYXJhY3RlcnMgbG9uZy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMiBjb250cm9sLWxhYmVsXCI+VHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGlzcGxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyYW5nZVwiPlJhbmdlPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwbHVzbWludXNcIj5XaXRoIHBsdXMgbWludXM8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIndvcGx1c21pbnVzXCI+V2l0aG91dCBwbHVzIG1pbnVzIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidXNlcmRlZmluZWRcIj5Vc2VyIERlZmluZWQgPC9vcHRpb24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmludmFsaWQgJiYgKHRleHRJbnB1dC5kaXJ0eSB8fCB0ZXh0SW5wdXQudG91Y2hlZClcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmVycm9ycy5taW5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IG11c3QgYmUgYXQgbGVhc3Qge3tmbC5mb3JtX2ZpZWxkX21pbl9sZW5ndGh9fSBjaGFyYWN0ZXJzIGxvbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRleHRJbnB1dC5lcnJvcnMubWF4bGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBNYXhtaW11bSBsaW1pdCB7e2ZsLmZvcm1fZmllbGRfbWF4X2xlbmd0aH19IGNoYXJhY3RlcnMgbG9uZy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAgZm9ybUFycmF5TmFtZT1cInZhbHVlc1wiICAqbmdJZj1cImRpc1R5cGUgPT0gJ3VzZXJkZWZpbmVkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCI+PGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPkZyb208L2xhYmVsPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCI+PGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPlRvPC9sYWJlbD48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZnJvbVRvRm9ybXMuY29udHJvbHM7bGV0IGkgPSBpbmRleFwiIGNsYXNzPVwicm93XCIgc3R5bGU9XCJtYXJnaW4tdG9wOiA1cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBOYW1lXT1cImlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGUgPT0gJ3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzcnRfZnJtXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzcnRfdG9cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGUgPT0gJ24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzcnRfZnJtXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzcnRfdG9cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGUgPT0gJ2MnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInNydF9mcm1cIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHBycCBvZiBmcm1QcnBzXCIgW3ZhbHVlXT1cInBycC5zb3J0XCI+e3twcnAucHJpbnR9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzcnRfdG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgcHJwIG9mIHRvUHJwc1wiIFt2YWx1ZV09XCJwcnAuc29ydFwiPnt7cHJwLnByaW50fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGUgPT0gJ2QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJkYXRlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzcnRfZnJtXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJkYXRlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzcnRfdG9cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidy0xMDAgYnRuIGJ0bi1kYW5nZXJcIiAoY2xpY2spPVwiZGVsZXRlUGhvbmUoaSk7XCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiAoY2xpY2spPVwiYWRkRnJvbVRvKCk7XCI+QWRkIE1vcmU8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMiBjb250cm9sLWxhYmVsXCI+U29ydFxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzb3J0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuaW52YWxpZCAmJiAodGV4dElucHV0LmRpcnR5IHx8IHRleHRJbnB1dC50b3VjaGVkKVwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRleHRJbnB1dC5lcnJvcnMubWlubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IG11c3QgYmUgYXQgbGVhc3Qge3tmbC5mb3JtX2ZpZWxkX21pbl9sZW5ndGh9fSBjaGFyYWN0ZXJzIGxvbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuZXJyb3JzLm1heGxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBNYXhtaW11bSBsaW1pdCB7e2ZsLmZvcm1fZmllbGRfbWF4X2xlbmd0aH19IGNoYXJhY3RlcnMgbG9uZy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiBhcHBBcHBOb0RibENsaWNrIChjbGljayk9XCJvblN1Ym1pdCgpXCI+e3tidG5OYW1lfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwicmVzZXRcIiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCI+UmVzZXQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgPCEtLSAoY2xpY2spPVwicmVzZXQoZilcIiAtLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJkZWxldGVtb2RhbFwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzbWFsbE1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGRhdGEtYmFja2Ryb3A9XCJzdGF0aWNcIlxyXG4gICAgZGF0YS1rZXlib2FyZD1cImZhbHNlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLXNtXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgaWQ9XCJkZWxldGVDbG9zZU1kXCI+XHJcbiAgICAgICAgICAgIDwhLS0gKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICNkZWxldGVjbHNidG4gLS0+XHJcbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwic21hbGxNb2RhbEhlYWRcIj5XYXJuaW5nPC9oND5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgQXJlIHlvdSBzdXJlIHdhbnQgdG8gZGVsZXRlP1xyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIChjbGljayk9XCJkZWxldGVEYXRhKCk7XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5EZWxldGU8L2J1dHRvbj5cclxuICAgICAgICAgIDwhLS0gKGNsaWNrKT1cImRlbGV0ZURhdGFMaXN0KCk7XCIgLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxidXR0b24gaWQ9XCJkZWxldGVidG5cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjZGVsZXRlbW9kYWxcIj48L2J1dHRvbj5cclxuICA8YnV0dG9uIGlkPVwiZGF0YW1kYnRuXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2RhdGFtb2RhbFwiPjwvYnV0dG9uPlxyXG4gIDxidXR0b24gaWQ9XCJjbHNNZFwiIFtoaWRkZW5dPVwidHJ1ZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjZGF0YW1vZGFsXCI+PC9idXR0b24+XHJcbiAgPGJ1dHRvbiBpZD1cInBvcGRhdGFtZGJ0blwiIFtoaWRkZW5dPVwidHJ1ZVwiIGRhdGEtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLXRhcmdldD1cIiNwb3BkYXRhbW9kYWxcIj48L2J1dHRvbj5cclxuICA8YnV0dG9uIGlkPVwicG9wUmVzbW9kYWxidG5cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjcG9wUmVzbW9kYWxcIj48L2J1dHRvbj5cclxuPC9kaXY+Il19
@@ -0,0 +1,40 @@
1
+ import { Cookie } from 'ng2-cookies/ng2-cookies';
2
+ import { Injectable } from '@angular/core';
3
+ import { Router, ActivatedRoute } from '@angular/router';
4
+ import { ToastrService } from 'ngx-toastr';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/router";
7
+ import * as i2 from "ngx-toastr";
8
+ export class AuthGuard {
9
+ constructor(route, ac, router, toastr) {
10
+ this.route = route;
11
+ this.ac = ac;
12
+ this.router = router;
13
+ this.toastr = toastr;
14
+ this.userLoggedIn = false;
15
+ }
16
+ canActivate() {
17
+ // let logIdn = localStorage.getItem('logIdn');
18
+ // let ds = localStorage.getItem('DS');
19
+ if (Cookie.get('_ck') != null) {
20
+ return true;
21
+ }
22
+ else {
23
+ // this.redirectToLoginPage(ds);
24
+ return false;
25
+ }
26
+ }
27
+ redirectToLoginPage(ds) {
28
+ // this.flashMessagesService.show('Invalid access to application', { cssClass: 'alert-danger', timeout: 3000 });
29
+ this.route.navigate(['/login/', ds]);
30
+ }
31
+ }
32
+ /** @nocollapse */ /** @nocollapse */ AuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuthGuard, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.ToastrService }], target: i0.ɵɵFactoryTarget.Injectable });
33
+ /** @nocollapse */ /** @nocollapse */ AuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuthGuard, providedIn: 'root' });
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuthGuard, decorators: [{
35
+ type: Injectable,
36
+ args: [{
37
+ providedIn: 'root'
38
+ }]
39
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.ToastrService }]; } });
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvYXV0aC9hdXRoLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBNkIsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7QUFNM0MsTUFBTSxPQUFPLFNBQVM7SUFFcEIsWUFDVSxLQUFhLEVBQ2IsRUFBa0IsRUFDbEIsTUFBYSxFQUNiLE1BQXFCO1FBSHJCLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixPQUFFLEdBQUYsRUFBRSxDQUFnQjtRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQ2IsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUsvQixpQkFBWSxHQUFXLEtBQUssQ0FBQztJQUY3QixDQUFDO0lBSUQsV0FBVztRQUNULCtDQUErQztRQUMvQyx1Q0FBdUM7UUFDdkMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRTtZQUM3QixPQUFPLElBQUksQ0FBQztTQUNiO2FBQU07WUFDTCxpQ0FBaUM7WUFDakMsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxFQUFFO1FBQ3BCLGdIQUFnSDtRQUNoSCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7OzRJQTNCVSxTQUFTO2dKQUFULFNBQVMsY0FIUixNQUFNOzJGQUdQLFNBQVM7a0JBSnJCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29va2llIH0gZnJvbSAnbmcyLWNvb2tpZXMvbmcyLWNvb2tpZXMnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENhbkFjdGl2YXRlLE5hdmlnYXRpb25FbmQsIFJvdXRlciwgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBBdXRoR3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSB7XHJcbiAgY1VybFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBhYzogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjpSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZVxyXG4gICkgeyBcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgdXNlckxvZ2dlZEluOmJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY2FuQWN0aXZhdGUoKXtcclxuICAgIC8vIGxldCBsb2dJZG4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9nSWRuJyk7XHJcbiAgICAvLyBsZXQgZHMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnRFMnKTtcclxuICAgIGlmIChDb29raWUuZ2V0KCdfY2snKSAhPSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5yZWRpcmVjdFRvTG9naW5QYWdlKGRzKTsgXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gXHJcbiAgfVxyXG5cclxuICByZWRpcmVjdFRvTG9naW5QYWdlKGRzKSB7XHJcbiAgICAvLyB0aGlzLmZsYXNoTWVzc2FnZXNTZXJ2aWNlLnNob3coJ0ludmFsaWQgYWNjZXNzIHRvIGFwcGxpY2F0aW9uJywgeyBjc3NDbGFzczogJ2FsZXJ0LWRhbmdlcicsIHRpbWVvdXQ6IDMwMDAgfSk7XHJcbiAgICB0aGlzLnJvdXRlLm5hdmlnYXRlKFsnL2xvZ2luLycsIGRzXSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,58 @@
1
+ import { HttpHeaders } from '@angular/common/http';
2
+ import { Cookie } from 'ng2-cookies/ng2-cookies';
3
+ import { Router, ActivatedRoute } from '@angular/router';
4
+ import { ToastrService } from 'ngx-toastr';
5
+ import { NgxSpinnerService } from "ngx-spinner";
6
+ import { GlobleEnvService } from '../globle/globle-env.service';
7
+ import { HttpClient } from '@angular/common/http';
8
+ import { Injectable } from '@angular/core';
9
+ import { catchError, map } from 'rxjs/operators';
10
+ import { throwError } from 'rxjs';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/common/http";
13
+ import * as i2 from "../globle/globle-env.service";
14
+ import * as i3 from "ngx-spinner";
15
+ import * as i4 from "ngx-toastr";
16
+ import * as i5 from "@angular/router";
17
+ export class BiService {
18
+ constructor(http, glbEnv, _spinnerService, toastr, router, route) {
19
+ this.http = http;
20
+ this.glbEnv = glbEnv;
21
+ this._spinnerService = _spinnerService;
22
+ this.toastr = toastr;
23
+ this.router = router;
24
+ this.route = route;
25
+ this.header = {};
26
+ }
27
+ data(reqObj, method, url) {
28
+ this._spinnerService.show();
29
+ if (localStorage.getItem('mdlKey') != null) {
30
+ let cUrl = this.router.url;
31
+ let mdlk = JSON.parse(localStorage.getItem('mdlKey'));
32
+ this.header = {
33
+ 'clientkey': Cookie.get('_ck'),
34
+ 'Content-Type': 'application/json',
35
+ 'modulekey': mdlk[cUrl.split('/')[1]],
36
+ 'loginid': Cookie.get('_logid'),
37
+ 'source': 'qs',
38
+ 'method': method
39
+ };
40
+ }
41
+ console.log(JSON.stringify(this.header));
42
+ let options = new HttpHeaders({ headers: this.header });
43
+ return this.http.post(this.glbEnv.baseUrl + url, JSON.stringify(reqObj), options).pipe(map((res) => res), (catchError((error) => {
44
+ this._spinnerService.hide();
45
+ this.toastr.error(error.message);
46
+ return throwError(error);
47
+ })));
48
+ }
49
+ }
50
+ /** @nocollapse */ /** @nocollapse */ BiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: BiService, deps: [{ token: i1.HttpClient }, { token: i2.GlobleEnvService }, { token: i3.NgxSpinnerService }, { token: i4.ToastrService }, { token: i5.Router }, { token: i5.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
51
+ /** @nocollapse */ /** @nocollapse */ BiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: BiService, providedIn: 'root' });
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: BiService, decorators: [{
53
+ type: Injectable,
54
+ args: [{
55
+ providedIn: 'root'
56
+ }]
57
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.GlobleEnvService }, { type: i3.NgxSpinnerService }, { type: i4.ToastrService }, { type: i5.Router }, { type: i5.ActivatedRoute }]; } });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvYmktc2VydmljZS9iaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUcsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFLOUMsTUFBTSxPQUFPLFNBQVM7SUFFcEIsWUFDVSxJQUFnQixFQUNoQixNQUF3QixFQUN4QixlQUFrQyxFQUNsQyxNQUFxQixFQUNyQixNQUFjLEVBQ2QsS0FBcUI7UUFMckIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFDbEMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFHdkIsV0FBTSxHQUFRLEVBQUUsQ0FBQztJQUZyQixDQUFDO0lBSUwsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRztRQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDMUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7WUFDM0IsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLE1BQU0sR0FBRztnQkFDWixXQUFXLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQzlCLGNBQWMsRUFBRSxrQkFBa0I7Z0JBQ2xDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUMvQixRQUFRLEVBQUUsSUFBSTtnQkFDZCxRQUFRLEVBQUUsTUFBTTthQUNqQixDQUFDO1NBQ0g7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxPQUFPLEdBQVEsSUFBSSxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDN0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3BGLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQ3RCLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakMsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FDSixDQUFDO0lBQ0osQ0FBQzs7NElBckNVLFNBQVM7Z0pBQVQsU0FBUyxjQUZSLE1BQU07MkZBRVAsU0FBUztrQkFIckIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSGVhZGVycyAgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvb2tpZSB9IGZyb20gJ25nMi1jb29raWVzL25nMi1jb29raWVzJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuaW1wb3J0IHsgTmd4U3Bpbm5lclNlcnZpY2UgfSBmcm9tIFwibmd4LXNwaW5uZXJcIjtcclxuaW1wb3J0IHsgR2xvYmxlRW52U2VydmljZSB9IGZyb20gJy4uL2dsb2JsZS9nbG9ibGUtZW52LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQmlTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGdsYkVudjogR2xvYmxlRW52U2VydmljZSxcclxuICAgIHByaXZhdGUgX3NwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZSAsXHJcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxyXG4gICkgeyB9XHJcblxyXG4gIHByaXZhdGUgaGVhZGVyOiBhbnkgPSB7fTtcclxuXHJcbiAgZGF0YShyZXFPYmosIG1ldGhvZCwgdXJsKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRoaXMuX3NwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWRsS2V5JykgIT0gbnVsbCkge1xyXG4gICAgICBsZXQgY1VybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgICAgbGV0IG1kbGsgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZGxLZXknKSk7XHJcbiAgICAgIHRoaXMuaGVhZGVyID0ge1xyXG4gICAgICAgICdjbGllbnRrZXknOiBDb29raWUuZ2V0KCdfY2snKSxcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICdtb2R1bGVrZXknOiBtZGxrW2NVcmwuc3BsaXQoJy8nKVsxXV0sXHJcbiAgICAgICAgJ2xvZ2luaWQnOiBDb29raWUuZ2V0KCdfbG9naWQnKSxcclxuICAgICAgICAnc291cmNlJzogJ3FzJyxcclxuICAgICAgICAnbWV0aG9kJzogbWV0aG9kXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSggdGhpcy5oZWFkZXIpKTtcclxuICAgIGxldCBvcHRpb25zOiBhbnkgPSBuZXcgSHR0cEhlYWRlcnMoeyBoZWFkZXJzOiB0aGlzLmhlYWRlciB9KTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLmdsYkVudi5iYXNlVXJsICsgdXJsLCBKU09OLnN0cmluZ2lmeShyZXFPYmopLCBvcHRpb25zKS5waXBlKFxyXG4gICAgICBtYXAoKHJlczogYW55KSA9PiByZXMpLFxyXG4gICAgICAoY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLl9zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xyXG4gICAgICB9KSlcclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==