client-core-services 1.0.0

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 (120) hide show
  1. package/README.md +24 -0
  2. package/esm2020/client-core-services.mjs +5 -0
  3. package/esm2020/lib/my-lib.module.mjs +98 -0
  4. package/esm2020/lib/services/api/api-call/api-call.service.mjs +766 -0
  5. package/esm2020/lib/services/api/api-call-responce/api-call-responce.service.mjs +191 -0
  6. package/esm2020/lib/services/api/api.service.mjs +611 -0
  7. package/esm2020/lib/services/api/auth/auth-guard.service.mjs +37 -0
  8. package/esm2020/lib/services/api/auth/auth.service.mjs +500 -0
  9. package/esm2020/lib/services/api/aws-secret-manager/aws-secret-manager.service.mjs +78 -0
  10. package/esm2020/lib/services/api/common-api/common-api.service.mjs +97 -0
  11. package/esm2020/lib/services/api/doc-api/doc-api.service.mjs +221 -0
  12. package/esm2020/lib/services/api/public-api/public-api.service.mjs +37 -0
  13. package/esm2020/lib/services/chart/chart.service.mjs +166 -0
  14. package/esm2020/lib/services/check-if/check-if.service.mjs +830 -0
  15. package/esm2020/lib/services/common-utils/common-function.service.mjs +1277 -0
  16. package/esm2020/lib/services/common-utils/core-function/core-function.service.mjs +283 -0
  17. package/esm2020/lib/services/customvalidation/customvalidation.service.mjs +202 -0
  18. package/esm2020/lib/services/data-share/auth-data-share/auth-data-share.service.mjs +70 -0
  19. package/esm2020/lib/services/data-share/common-app-data-share/common-app-data-share.service.mjs +82 -0
  20. package/esm2020/lib/services/data-share/data-share.service.mjs +370 -0
  21. package/esm2020/lib/services/data-share/doc-data-share/doc-data-share.service.mjs +81 -0
  22. package/esm2020/lib/services/data-share/public-data-share/public-data-share.service.mjs +25 -0
  23. package/esm2020/lib/services/download/download.service.mjs +151 -0
  24. package/esm2020/lib/services/encryption/encryption.service.mjs +20 -0
  25. package/esm2020/lib/services/env/env.service.mjs +232 -0
  26. package/esm2020/lib/services/env/serverHostList.mjs +56 -0
  27. package/esm2020/lib/services/fileHandler/file-handler.service.mjs +136 -0
  28. package/esm2020/lib/services/form/form-control/form-control.service.mjs +654 -0
  29. package/esm2020/lib/services/form/form-creation/form-creation.service.mjs +880 -0
  30. package/esm2020/lib/services/form/form-value/form-value.service.mjs +464 -0
  31. package/esm2020/lib/services/form/multiple-form/multiple-form.service.mjs +346 -0
  32. package/esm2020/lib/services/grid/grid-common-function/grid-common-function.service.mjs +875 -0
  33. package/esm2020/lib/services/grid/grid-selection/grid-selection.service.mjs +84 -0
  34. package/esm2020/lib/services/lims-calculations/lims-calculations.service.mjs +2304 -0
  35. package/esm2020/lib/services/loader/loader.service.mjs +17 -0
  36. package/esm2020/lib/services/menu-or-module-common/menu-or-module-common.service.mjs +558 -0
  37. package/esm2020/lib/services/model/model.service.mjs +30 -0
  38. package/esm2020/lib/services/notify/notification.service.mjs +84 -0
  39. package/esm2020/lib/services/operator/operator.service.mjs +58 -0
  40. package/esm2020/lib/services/permission/permission.service.mjs +88 -0
  41. package/esm2020/lib/services/router/router.service.mjs +78 -0
  42. package/esm2020/lib/services/storage/cookies.service.mjs +56 -0
  43. package/esm2020/lib/services/storage/storage.service.mjs +749 -0
  44. package/esm2020/lib/services/tree-component/interface.mjs +6 -0
  45. package/esm2020/lib/services/tree-component/tree-component.service.mjs +394 -0
  46. package/esm2020/lib/services/userPrefrence/user-prefrence.service.mjs +767 -0
  47. package/esm2020/lib/services/voice-recognition/voice-recognition.service.mjs +97 -0
  48. package/esm2020/lib/shared/configuration/config.mjs +76 -0
  49. package/esm2020/lib/shared/configuration/editor-config.mjs +121 -0
  50. package/esm2020/lib/shared/enums/common.enum.mjs +18 -0
  51. package/esm2020/lib/shared/enums/config.enum.mjs +56 -0
  52. package/esm2020/lib/shared/enums/end-point.enum.mjs +69 -0
  53. package/esm2020/lib/shared/enums/flags.enum.mjs +20 -0
  54. package/esm2020/lib/shared/enums/keycodes.enum.mjs +122 -0
  55. package/esm2020/lib/shared/enums/operator_type.enum.mjs +13 -0
  56. package/esm2020/lib/shared/enums/storage-token-status.enum.mjs +10 -0
  57. package/esm2020/lib/shared/platform.mjs +2 -0
  58. package/esm2020/public-api.mjs +53 -0
  59. package/fesm2015/client-core-services.mjs +15487 -0
  60. package/fesm2015/client-core-services.mjs.map +1 -0
  61. package/fesm2020/client-core-services.mjs +15482 -0
  62. package/fesm2020/client-core-services.mjs.map +1 -0
  63. package/index.d.ts +5 -0
  64. package/lib/my-lib.module.d.ts +18 -0
  65. package/lib/services/api/api-call/api-call.service.d.ts +60 -0
  66. package/lib/services/api/api-call-responce/api-call-responce.service.d.ts +43 -0
  67. package/lib/services/api/api.service.d.ts +88 -0
  68. package/lib/services/api/auth/auth-guard.service.d.ts +13 -0
  69. package/lib/services/api/auth/auth.service.d.ts +50 -0
  70. package/lib/services/api/aws-secret-manager/aws-secret-manager.service.d.ts +22 -0
  71. package/lib/services/api/common-api/common-api.service.d.ts +22 -0
  72. package/lib/services/api/doc-api/doc-api.service.d.ts +35 -0
  73. package/lib/services/api/public-api/public-api.service.d.ts +14 -0
  74. package/lib/services/chart/chart.service.d.ts +21 -0
  75. package/lib/services/check-if/check-if.service.d.ts +50 -0
  76. package/lib/services/common-utils/common-function.service.d.ts +84 -0
  77. package/lib/services/common-utils/core-function/core-function.service.d.ts +21 -0
  78. package/lib/services/customvalidation/customvalidation.service.d.ts +21 -0
  79. package/lib/services/data-share/auth-data-share/auth-data-share.service.d.ts +33 -0
  80. package/lib/services/data-share/common-app-data-share/common-app-data-share.service.d.ts +36 -0
  81. package/lib/services/data-share/data-share.service.d.ts +174 -0
  82. package/lib/services/data-share/doc-data-share/doc-data-share.service.d.ts +33 -0
  83. package/lib/services/data-share/public-data-share/public-data-share.service.d.ts +12 -0
  84. package/lib/services/download/download.service.d.ts +35 -0
  85. package/lib/services/encryption/encryption.service.d.ts +8 -0
  86. package/lib/services/env/env.service.d.ts +44 -0
  87. package/lib/services/env/serverHostList.d.ts +9 -0
  88. package/lib/services/fileHandler/file-handler.service.d.ts +17 -0
  89. package/lib/services/form/form-control/form-control.service.d.ts +44 -0
  90. package/lib/services/form/form-creation/form-creation.service.d.ts +41 -0
  91. package/lib/services/form/form-value/form-value.service.d.ts +32 -0
  92. package/lib/services/form/multiple-form/multiple-form.service.d.ts +54 -0
  93. package/lib/services/grid/grid-common-function/grid-common-function.service.d.ts +74 -0
  94. package/lib/services/grid/grid-selection/grid-selection.service.d.ts +16 -0
  95. package/lib/services/lims-calculations/lims-calculations.service.d.ts +87 -0
  96. package/lib/services/loader/loader.service.d.ts +8 -0
  97. package/lib/services/menu-or-module-common/menu-or-module-common.service.d.ts +59 -0
  98. package/lib/services/model/model.service.d.ts +11 -0
  99. package/lib/services/notify/notification.service.d.ts +22 -0
  100. package/lib/services/operator/operator.service.d.ts +27 -0
  101. package/lib/services/permission/permission.service.d.ts +18 -0
  102. package/lib/services/router/router.service.d.ts +14 -0
  103. package/lib/services/storage/cookies.service.d.ts +11 -0
  104. package/lib/services/storage/storage.service.d.ts +132 -0
  105. package/lib/services/tree-component/interface.d.ts +13 -0
  106. package/lib/services/tree-component/tree-component.service.d.ts +38 -0
  107. package/lib/services/userPrefrence/user-prefrence.service.d.ts +75 -0
  108. package/lib/services/voice-recognition/voice-recognition.service.d.ts +36 -0
  109. package/lib/shared/configuration/config.d.ts +144 -0
  110. package/lib/shared/configuration/editor-config.d.ts +72 -0
  111. package/lib/shared/enums/common.enum.d.ts +16 -0
  112. package/lib/shared/enums/config.enum.d.ts +54 -0
  113. package/lib/shared/enums/end-point.enum.d.ts +66 -0
  114. package/lib/shared/enums/flags.enum.d.ts +18 -0
  115. package/lib/shared/enums/keycodes.enum.d.ts +120 -0
  116. package/lib/shared/enums/operator_type.enum.d.ts +9 -0
  117. package/lib/shared/enums/storage-token-status.enum.d.ts +8 -0
  118. package/lib/shared/platform.d.ts +1 -0
  119. package/package.json +40 -0
  120. package/public-api.d.ts +49 -0
@@ -0,0 +1,136 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../common-utils/common-function.service";
4
+ export class FileHandlerService {
5
+ constructor(commonFunctionService) {
6
+ this.commonFunctionService = commonFunctionService;
7
+ }
8
+ modifyUploadFiles(files) {
9
+ const fileList = [];
10
+ if (files && files.length > 0) {
11
+ files.forEach((element) => {
12
+ if (element._id) {
13
+ fileList.push(element);
14
+ }
15
+ else {
16
+ if (element && element.uploadData) {
17
+ let file = element.uploadData[0];
18
+ fileList.push(file);
19
+ }
20
+ else {
21
+ fileList.push({ uploadData: [element] });
22
+ }
23
+ }
24
+ });
25
+ }
26
+ return fileList;
27
+ }
28
+ modifyFileSetValue(files) {
29
+ let fileName = '';
30
+ let fileLength = files.length;
31
+ let file = files[0];
32
+ if (fileLength == 1 && (file.fileName || file.rollName)) {
33
+ fileName = file.fileName || file.rollName;
34
+ }
35
+ else if (fileLength > 1) {
36
+ fileName = fileLength + " Files";
37
+ }
38
+ return fileName;
39
+ }
40
+ getFileTooltipMsg(fileList) {
41
+ let msg = "";
42
+ if (fileList.length > 0) {
43
+ fileList.forEach((element) => {
44
+ if (msg != '') {
45
+ msg = msg + '\n' + element.fileName;
46
+ }
47
+ else {
48
+ msg = element.fileName;
49
+ }
50
+ });
51
+ }
52
+ return msg;
53
+ }
54
+ updateFileUploadResponce(curFileUploadFieldparentfield, curFileUploadField, dataListForUpload, templateForm, tableFields, responceData) {
55
+ let responce = {
56
+ dataListForUpload: dataListForUpload,
57
+ templateForm: templateForm,
58
+ tableFields: tableFields
59
+ };
60
+ let curFieldName = '';
61
+ let parentIndex = -1;
62
+ let curIndex = -1;
63
+ if (curFileUploadField && curFileUploadField.field_name) {
64
+ curFieldName = curFileUploadField.field_name;
65
+ parentIndex = curFileUploadField['parentIndex'];
66
+ curIndex = curFileUploadField['curIndex'];
67
+ }
68
+ if (curFileUploadFieldparentfield != '' && curFieldName != '') {
69
+ const custmizedKey = this.commonFunctionService.custmizedKey(curFileUploadFieldparentfield);
70
+ if (!responce.dataListForUpload[custmizedKey])
71
+ responce.dataListForUpload[custmizedKey] = {};
72
+ if (!responce.dataListForUpload[custmizedKey][curFieldName])
73
+ responce.dataListForUpload[custmizedKey][curFieldName] = [];
74
+ responce.dataListForUpload[custmizedKey][curFieldName] = responceData;
75
+ if (responce.dataListForUpload[custmizedKey][curFieldName] && responce.dataListForUpload[custmizedKey][curFieldName].length > 0) {
76
+ let fileName = "";
77
+ if (curFileUploadField.type == 'input_with_uploadfile') {
78
+ let fileList = responce.dataListForUpload[custmizedKey][curFieldName];
79
+ fileName = this.modifyFileSetValue(fileList);
80
+ let tooltipMsg = this.getFileTooltipMsg(fileList);
81
+ responce.tableFields[parentIndex].list_of_fields[curIndex]['tooltipMsg'] = tooltipMsg;
82
+ }
83
+ responce.templateForm.controls[curFileUploadFieldparentfield.field_name].controls[curFieldName].setValue(fileName);
84
+ }
85
+ else {
86
+ responce.templateForm.controls[curFileUploadFieldparentfield.field_name].controls[curFieldName].setValue('');
87
+ if (curFileUploadField.type == 'input_with_uploadfile') {
88
+ responce.tableFields[parentIndex].list_of_fields[curIndex]['tooltipMsg'] = '';
89
+ }
90
+ }
91
+ }
92
+ else {
93
+ if (curFieldName != '') {
94
+ if (!responce.dataListForUpload[curFieldName])
95
+ responce.dataListForUpload[curFieldName] = [];
96
+ responce.dataListForUpload[curFieldName] = responceData;
97
+ if (responce.dataListForUpload[curFieldName] && responce.dataListForUpload[curFieldName].length > 0) {
98
+ let fileList = responce.dataListForUpload[curFieldName];
99
+ let fileName = this.modifyFileSetValue(fileList);
100
+ if (curFileUploadField.type == 'input_with_uploadfile') {
101
+ let tooltipMsg = this.getFileTooltipMsg(fileList);
102
+ responce.tableFields[curIndex]['tooltipMsg'] = tooltipMsg;
103
+ }
104
+ responce.templateForm.controls[curFieldName].setValue(fileName);
105
+ }
106
+ else {
107
+ responce.templateForm.controls[curFieldName].setValue('');
108
+ if (curFileUploadField.type == 'input_with_uploadfile') {
109
+ responce.tableFields[curIndex]['tooltipMsg'] = '';
110
+ }
111
+ }
112
+ }
113
+ }
114
+ return responce;
115
+ }
116
+ removeAttachedDataFromList(parent, child, index, dataListForUpload) {
117
+ let fieldName = child.field_name;
118
+ if (parent && parent != '') {
119
+ let custmisedKey = this.commonFunctionService.custmizedKey(parent);
120
+ dataListForUpload[custmisedKey][fieldName].splice(index, 1);
121
+ }
122
+ else {
123
+ dataListForUpload[fieldName].splice(index, 1);
124
+ }
125
+ return dataListForUpload;
126
+ }
127
+ }
128
+ FileHandlerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FileHandlerService, deps: [{ token: i1.CommonFunctionService }], target: i0.ɵɵFactoryTarget.Injectable });
129
+ FileHandlerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FileHandlerService, providedIn: 'root' });
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FileHandlerService, decorators: [{
131
+ type: Injectable,
132
+ args: [{
133
+ providedIn: 'root'
134
+ }]
135
+ }], ctorParameters: function () { return [{ type: i1.CommonFunctionService }]; } });
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1oYW5kbGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2ZpbGVIYW5kbGVyL2ZpbGUtaGFuZGxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU8zQyxNQUFNLE9BQU8sa0JBQWtCO0lBRTdCLFlBQ1UscUJBQTJDO1FBQTNDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBc0I7SUFDakQsQ0FBQztJQUdMLGlCQUFpQixDQUFDLEtBQVM7UUFDekIsTUFBTSxRQUFRLEdBQU8sRUFBRSxDQUFDO1FBQ3hCLElBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO1lBQzNCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFXLEVBQUUsRUFBRTtnQkFDNUIsSUFBRyxPQUFPLENBQUMsR0FBRyxFQUFDO29CQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7aUJBQ3ZCO3FCQUFJO29CQUNILElBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUM7d0JBQy9CLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ3JCO3lCQUFLO3dCQUNKLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxPQUFPLENBQUMsRUFBQyxDQUFDLENBQUE7cUJBQ3RDO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxLQUFTO1FBQzFCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztR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QUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEQ7YUFBSTtZQUNULGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUE7U0FDN0M7UUFDRCxPQUFPLGlCQUFpQixDQUFDO0lBQzNCLENBQUM7O2dIQXpIVSxrQkFBa0I7b0hBQWxCLGtCQUFrQixjQUZqQixNQUFNOzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbkZ1bmN0aW9uU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi11dGlscy9jb21tb24tZnVuY3Rpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlSGFuZGxlclNlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29tbW9uRnVuY3Rpb25TZXJ2aWNlOkNvbW1vbkZ1bmN0aW9uU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG5cclxuICBtb2RpZnlVcGxvYWRGaWxlcyhmaWxlczphbnkpe1xyXG4gICAgY29uc3QgZmlsZUxpc3Q6YW55ID0gW107XHJcbiAgICBpZihmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKXtcclxuICAgICAgZmlsZXMuZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcclxuICAgICAgICBpZihlbGVtZW50Ll9pZCl7XHJcbiAgICAgICAgICBmaWxlTGlzdC5wdXNoKGVsZW1lbnQpXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBpZihlbGVtZW50ICYmIGVsZW1lbnQudXBsb2FkRGF0YSl7XHJcbiAgICAgICAgICAgIGxldCBmaWxlID0gZWxlbWVudC51cGxvYWREYXRhWzBdO1xyXG4gICAgICAgICAgICBmaWxlTGlzdC5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICBmaWxlTGlzdC5wdXNoKHt1cGxvYWREYXRhOltlbGVtZW50XX0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBmaWxlTGlzdDtcclxuICB9XHJcbiAgbW9kaWZ5RmlsZVNldFZhbHVlKGZpbGVzOmFueSl7XHJcbiAgICBsZXQgZmlsZU5hbWUgPSAnJztcclxuICAgIGxldCBmaWxlTGVuZ3RoID0gZmlsZXMubGVuZ3RoO1xyXG4gICAgbGV0IGZpbGUgPSBmaWxlc1swXTtcclxuICAgIGlmKGZpbGVMZW5ndGggPT0gMSAmJiAoZmlsZS5maWxlTmFtZSB8fCBmaWxlLnJvbGxOYW1lKSl7XHJcbiAgICAgIGZpbGVOYW1lID0gZmlsZS5maWxlTmFtZSB8fCBmaWxlLnJvbGxOYW1lO1xyXG4gICAgfWVsc2UgaWYoZmlsZUxlbmd0aCA+IDEpe1xyXG4gICAgICBmaWxlTmFtZSA9IGZpbGVMZW5ndGggKyBcIiBGaWxlc1wiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVOYW1lO1xyXG4gIH1cclxuICBnZXRGaWxlVG9vbHRpcE1zZyhmaWxlTGlzdDphbnkpe1xyXG4gICAgbGV0IG1zZyA9IFwiXCI7XHJcbiAgICBpZihmaWxlTGlzdC5sZW5ndGggPiAwKXtcclxuICAgICAgZmlsZUxpc3QuZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcclxuICAgICAgICBpZihtc2cgIT0gJycpe1xyXG4gICAgICAgICAgbXNnID0gbXNnICsgJ1xcbicgKyBlbGVtZW50LmZpbGVOYW1lO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgbXNnID0gZWxlbWVudC5maWxlTmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1zZztcclxuICB9XHJcbiAgdXBkYXRlRmlsZVVwbG9hZFJlc3BvbmNlKGN1ckZpbGVVcGxvYWRGaWVsZHBhcmVudGZpZWxkOmFueSxjdXJGaWxlVXBsb2FkRmllbGQ6YW55LGRhdGFMaXN0Rm9yVXBsb2FkOmFueSx0ZW1wbGF0ZUZvcm06YW55LHRhYmxlRmllbGRzOmFueSxyZXNwb25jZURhdGE6YW55KXtcclxuICAgIGxldCByZXNwb25jZSA9e1xyXG4gICAgICBkYXRhTGlzdEZvclVwbG9hZDpkYXRhTGlzdEZvclVwbG9hZCxcclxuICAgICAgdGVtcGxhdGVGb3JtOnRlbXBsYXRlRm9ybSxcclxuICAgICAgdGFibGVGaWVsZHM6dGFibGVGaWVsZHNcclxuICAgIH1cclxuICAgIGxldCBjdXJGaWVsZE5hbWUgPSAnJztcclxuICAgIGxldCBwYXJlbnRJbmRleCA9IC0xO1xyXG4gICAgbGV0IGN1ckluZGV4ID0gLTE7XHJcbiAgICBpZihjdXJGaWxlVXBsb2FkRmllbGQgJiYgY3VyRmlsZVVwbG9hZEZpZWxkLmZpZWxkX25hbWUpe1xyXG4gICAgICBjdXJGaWVsZE5hbWUgPSBjdXJGaWxlVXBsb2FkRmllbGQuZmllbGRfbmFtZTtcclxuICAgICAgcGFyZW50SW5kZXggPSAgY3VyRmlsZVVwbG9hZEZpZWxkWydwYXJlbnRJbmRleCddO1xyXG4gICAgICBjdXJJbmRleCA9ICBjdXJGaWxlVXBsb2FkRmllbGRbJ2N1ckluZGV4J107XHJcbiAgICB9XHJcbiAgICBpZihjdXJGaWxlVXBsb2FkRmllbGRwYXJlbnRmaWVsZCAhPSAnJyAmJiBjdXJGaWVsZE5hbWUgIT0gJycpe1xyXG4gICAgICBjb25zdCBjdXN0bWl6ZWRLZXkgPSB0aGlzLmNvbW1vbkZ1bmN0aW9uU2VydmljZS5jdXN0bWl6ZWRLZXkoY3VyRmlsZVVwbG9hZEZpZWxkcGFyZW50ZmllbGQpO1xyXG5cclxuICAgICAgaWYgKCFyZXNwb25jZS5kYXRhTGlzdEZvclVwbG9hZFtjdXN0bWl6ZWRLZXldKSByZXNwb25jZS5kYXRhTGlzdEZvclVwbG9hZFtjdXN0bWl6ZWRLZXldID0ge307XHJcbiAgICAgIGlmICghcmVzcG9uY2UuZGF0YUxpc3RGb3JVcGxvYWRbY3VzdG1pemVkS2V5XVtjdXJGaWVsZE5hbWVdKSByZXNwb25jZS5kYXRhTGlzdEZvclVwbG9hZFtjdXN0bWl6ZWRLZXldW2N1ckZpZWxkTmFtZV0gPSBbXTtcclxuICAgICAgcmVzcG9uY2UuZGF0YUxpc3RGb3JVcGxvYWRbY3VzdG1pemVkS2V5XVtjdXJGaWVsZE5hbWVdID0gcmVzcG9uY2VEYXRhO1xyXG5cclxuXHJcbiAgICAgIGlmKHJlc3BvbmNlLmRhdGFMaXN0Rm9yVXBsb2FkW2N1c3RtaXplZEtleV1bY3VyRmllbGROYW1lXSAmJiByZXNwb25jZS5kYXRhTGlzdEZvclVwbG9hZFtjdXN0bWl6ZWRLZXldW2N1ckZpZWxkTmFtZV0ubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgbGV0IGZpbGVOYW1lICA9IFwiXCI7XHJcbiAgICAgICAgaWYoY3VyRmlsZVVwbG9hZEZpZWxkLnR5cGUgPT0gJ2lucHV0X3dpdGhfdXBsb2FkZmlsZScpe1xyXG4gICAgICAgICAgbGV0IGZpbGVMaXN0ID0gcmVzcG9uY2UuZGF0YUxpc3RGb3JVcGxvYWRbY3VzdG1pemVkS2V5XVtjdXJGaWVsZE5hbWVdO1xyXG4gICAgICAgICAgZmlsZU5hbWUgPSB0aGlzLm1vZGlmeUZpbGVTZXRWYWx1ZShmaWxlTGlzdCk7XHJcbiAgICAgICAgICBsZXQgdG9vbHRpcE1zZyA9IHRoaXMuZ2V0RmlsZVRvb2x0aXBNc2coZmlsZUxpc3QpO1xyXG4gICAgICAgICAgcmVzcG9uY2UudGFibGVGaWVsZHNbcGFyZW50SW5kZXhdLmxpc3Rfb2ZfZmllbGRzW2N1ckluZGV4XVsndG9vbHRpcE1zZyddID0gdG9vbHRpcE1zZztcclxuICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgKDxVbnR5cGVkRm9ybUdyb3VwPnJlc3BvbmNlLnRlbXBsYXRlRm9ybS5jb250cm9sc1tjdXJGaWxlVXBsb2FkRmllbGRwYXJlbnRmaWVsZC5maWVsZF9uYW1lXSkuY29udHJvbHNbY3VyRmllbGROYW1lXS5zZXRWYWx1ZShmaWxlTmFtZSk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgICg8VW50eXBlZEZvcm1Hcm91cD5yZXNwb25jZS50ZW1wbGF0ZUZvcm0uY29udHJvbHNbY3VyRmlsZVVwbG9hZEZpZWxkcGFyZW50ZmllbGQuZmllbGRfbmFtZV0pLmNvbnRyb2xzW2N1ckZpZWxkTmFtZV0uc2V0VmFsdWUoJycpO1xyXG4gICAgICAgIGlmKGN1ckZpbGVVcGxvYWRGaWVsZC50eXBlID09ICdpbnB1dF93aXRoX3VwbG9hZGZpbGUnKXtcclxuICAgICAgICAgIHJlc3BvbmNlLnRhYmxlRmllbGRzW3BhcmVudEluZGV4XS5saXN0X29mX2ZpZWxkc1tjdXJJbmRleF1bJ3Rvb2x0aXBNc2cnXSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNle1xyXG4gICAgICBpZihjdXJGaWVsZE5hbWUgIT0gJycpe1xyXG4gICAgICAgIGlmICghcmVzcG9uY2UuZGF0YUxpc3RGb3JVcGxvYWRbY3VyRmllbGROYW1lXSkgcmVzcG9uY2UuZGF0YUxpc3RGb3JVcGxvYWRbY3VyRmllbGROYW1lXSA9IFtdO1xyXG4gICAgICAgIHJlc3BvbmNlLmRhdGFMaXN0Rm9yVXBsb2FkW2N1ckZpZWxkTmFtZV0gPSByZXNwb25jZURhdGE7XHJcblxyXG4gICAgICAgIGlmKHJlc3BvbmNlLmRhdGFMaXN0Rm9yVXBsb2FkW2N1ckZpZWxkTmFtZV0gJiYgcmVzcG9uY2UuZGF0YUxpc3RGb3JVcGxvYWRbY3VyRmllbGROYW1lXS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgIGxldCBmaWxlTGlzdCA9IHJlc3BvbmNlLmRhdGFMaXN0Rm9yVXBsb2FkW2N1ckZpZWxkTmFtZV07XHJcbiAgICAgICAgICBsZXQgZmlsZU5hbWUgPSB0aGlzLm1vZGlmeUZpbGVTZXRWYWx1ZShmaWxlTGlzdCk7XHJcbiAgICAgICAgICBpZihjdXJGaWxlVXBsb2FkRmllbGQudHlwZSA9PSAnaW5wdXRfd2l0aF91cGxvYWRmaWxlJyl7XHJcbiAgICAgICAgICAgIGxldCB0b29sdGlwTXNnID0gdGhpcy5nZXRGaWxlVG9vbHRpcE1zZyhmaWxlTGlzdCk7XHJcbiAgICAgICAgICAgIHJlc3BvbmNlLnRhYmxlRmllbGRzW2N1ckluZGV4XVsndG9vbHRpcE1zZyddID0gdG9vbHRpcE1zZztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc3BvbmNlLnRlbXBsYXRlRm9ybS5jb250cm9sc1tjdXJGaWVsZE5hbWVdLnNldFZhbHVlKGZpbGVOYW1lKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIHJlc3BvbmNlLnRlbXBsYXRlRm9ybS5jb250cm9sc1tjdXJGaWVsZE5hbWVdLnNldFZhbHVlKCcnKTtcclxuICAgICAgICAgIGlmKGN1ckZpbGVVcGxvYWRGaWVsZC50eXBlID09ICdpbnB1dF93aXRoX3VwbG9hZGZpbGUnKXtcclxuICAgICAgICAgICAgcmVzcG9uY2UudGFibGVGaWVsZHNbY3VySW5kZXhdWyd0b29sdGlwTXNnJ10gPSAnJztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXNwb25jZTtcclxuICB9XHJcbiAgcmVtb3ZlQXR0YWNoZWREYXRhRnJvbUxpc3QocGFyZW50OmFueSxjaGlsZDphbnksaW5kZXg6YW55LGRhdGFMaXN0Rm9yVXBsb2FkOmFueSl7XHJcbiAgICBsZXQgZmllbGROYW1lID0gY2hpbGQuZmllbGRfbmFtZTtcclxuICAgIGlmKHBhcmVudCAmJiBwYXJlbnQgIT0gJycpe1xyXG4gICAgICBsZXQgY3VzdG1pc2VkS2V5ID0gdGhpcy5jb21tb25GdW5jdGlvblNlcnZpY2UuY3VzdG1pemVkS2V5KHBhcmVudCk7XHJcbiAgICAgIGRhdGFMaXN0Rm9yVXBsb2FkW2N1c3RtaXNlZEtleV1bZmllbGROYW1lXS5zcGxpY2UoaW5kZXgsMSk7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgZGF0YUxpc3RGb3JVcGxvYWRbZmllbGROYW1lXS5zcGxpY2UoaW5kZXgsMSlcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhTGlzdEZvclVwbG9hZDtcclxuICB9XHJcblxyXG5cclxufVxyXG4iXX0=