@sd-angular/core 1.2.33 → 1.2.36

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 (198) hide show
  1. package/assets/scss/sd-core.scss +16 -0
  2. package/autocomplete/sd-angular-core-autocomplete.metadata.json +1 -1
  3. package/autocomplete/src/lib/autocomplete.component.d.ts +2 -0
  4. package/bundles/sd-angular-core-autocomplete.umd.js +2 -1
  5. package/bundles/sd-angular-core-autocomplete.umd.js.map +1 -1
  6. package/bundles/sd-angular-core-autocomplete.umd.min.js +2 -2
  7. package/bundles/sd-angular-core-autocomplete.umd.min.js.map +1 -1
  8. package/bundles/sd-angular-core-chip.umd.js +3 -2
  9. package/bundles/sd-angular-core-chip.umd.js.map +1 -1
  10. package/bundles/sd-angular-core-chip.umd.min.js +1 -1
  11. package/bundles/sd-angular-core-chip.umd.min.js.map +1 -1
  12. package/bundles/sd-angular-core-common.umd.js +4 -0
  13. package/bundles/sd-angular-core-common.umd.js.map +1 -1
  14. package/bundles/sd-angular-core-common.umd.min.js +1 -1
  15. package/bundles/sd-angular-core-common.umd.min.js.map +1 -1
  16. package/bundles/sd-angular-core-date-month.umd.js +2 -1
  17. package/bundles/sd-angular-core-date-month.umd.js.map +1 -1
  18. package/bundles/sd-angular-core-date-month.umd.min.js +1 -1
  19. package/bundles/sd-angular-core-date-month.umd.min.js.map +1 -1
  20. package/bundles/sd-angular-core-date-range.umd.js +3 -2
  21. package/bundles/sd-angular-core-date-range.umd.js.map +1 -1
  22. package/bundles/sd-angular-core-date-range.umd.min.js +1 -1
  23. package/bundles/sd-angular-core-date-range.umd.min.js.map +1 -1
  24. package/bundles/sd-angular-core-date-time.umd.js +2 -1
  25. package/bundles/sd-angular-core-date-time.umd.js.map +1 -1
  26. package/bundles/sd-angular-core-date-time.umd.min.js +1 -1
  27. package/bundles/sd-angular-core-date-time.umd.min.js.map +1 -1
  28. package/bundles/sd-angular-core-dynamic-report.umd.js +11 -13
  29. package/bundles/sd-angular-core-dynamic-report.umd.js.map +1 -1
  30. package/bundles/sd-angular-core-dynamic-report.umd.min.js +1 -1
  31. package/bundles/sd-angular-core-dynamic-report.umd.min.js.map +1 -1
  32. package/bundles/sd-angular-core-editor.umd.js +7 -6
  33. package/bundles/sd-angular-core-editor.umd.js.map +1 -1
  34. package/bundles/sd-angular-core-editor.umd.min.js +2 -2
  35. package/bundles/sd-angular-core-editor.umd.min.js.map +1 -1
  36. package/bundles/sd-angular-core-export.umd.js +48 -18
  37. package/bundles/sd-angular-core-export.umd.js.map +1 -1
  38. package/bundles/sd-angular-core-export.umd.min.js +1 -1
  39. package/bundles/sd-angular-core-export.umd.min.js.map +1 -1
  40. package/bundles/sd-angular-core-grid-material.umd.js +131 -129
  41. package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
  42. package/bundles/sd-angular-core-grid-material.umd.min.js +2 -2
  43. package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
  44. package/bundles/sd-angular-core-input-currency.umd.js +2 -1
  45. package/bundles/sd-angular-core-input-currency.umd.js.map +1 -1
  46. package/bundles/sd-angular-core-input-currency.umd.min.js +2 -2
  47. package/bundles/sd-angular-core-input-currency.umd.min.js.map +1 -1
  48. package/bundles/sd-angular-core-input-dropdown.umd.js +2 -9
  49. package/bundles/sd-angular-core-input-dropdown.umd.js.map +1 -1
  50. package/bundles/sd-angular-core-input-dropdown.umd.min.js +1 -1
  51. package/bundles/sd-angular-core-input-dropdown.umd.min.js.map +1 -1
  52. package/bundles/sd-angular-core-input-number.umd.js +5 -4
  53. package/bundles/sd-angular-core-input-number.umd.js.map +1 -1
  54. package/bundles/sd-angular-core-input-number.umd.min.js +1 -1
  55. package/bundles/sd-angular-core-input-number.umd.min.js.map +1 -1
  56. package/bundles/sd-angular-core-json-editor.umd.js +3 -2
  57. package/bundles/sd-angular-core-json-editor.umd.js.map +1 -1
  58. package/bundles/sd-angular-core-json-editor.umd.min.js +2 -2
  59. package/bundles/sd-angular-core-json-editor.umd.min.js.map +1 -1
  60. package/bundles/sd-angular-core-radio.umd.js +2 -1
  61. package/bundles/sd-angular-core-radio.umd.js.map +1 -1
  62. package/bundles/sd-angular-core-radio.umd.min.js +1 -1
  63. package/bundles/sd-angular-core-radio.umd.min.js.map +1 -1
  64. package/bundles/sd-angular-core-select-badge.umd.js +9 -8
  65. package/bundles/sd-angular-core-select-badge.umd.js.map +1 -1
  66. package/bundles/sd-angular-core-select-badge.umd.min.js +2 -2
  67. package/bundles/sd-angular-core-select-badge.umd.min.js.map +1 -1
  68. package/bundles/sd-angular-core-select-editor.umd.js +3 -2
  69. package/bundles/sd-angular-core-select-editor.umd.js.map +1 -1
  70. package/bundles/sd-angular-core-select-editor.umd.min.js +1 -1
  71. package/bundles/sd-angular-core-select-editor.umd.min.js.map +1 -1
  72. package/bundles/sd-angular-core-select.umd.js +2 -1
  73. package/bundles/sd-angular-core-select.umd.js.map +1 -1
  74. package/bundles/sd-angular-core-select.umd.min.js +2 -2
  75. package/bundles/sd-angular-core-select.umd.min.js.map +1 -1
  76. package/bundles/sd-angular-core-textarea.umd.js +3 -2
  77. package/bundles/sd-angular-core-textarea.umd.js.map +1 -1
  78. package/bundles/sd-angular-core-textarea.umd.min.js +1 -1
  79. package/bundles/sd-angular-core-textarea.umd.min.js.map +1 -1
  80. package/bundles/sd-angular-core-time.umd.js +4 -3
  81. package/bundles/sd-angular-core-time.umd.js.map +1 -1
  82. package/bundles/sd-angular-core-time.umd.min.js +2 -2
  83. package/bundles/sd-angular-core-time.umd.min.js.map +1 -1
  84. package/bundles/sd-angular-core-upload-file.umd.js +8 -7
  85. package/bundles/sd-angular-core-upload-file.umd.js.map +1 -1
  86. package/bundles/sd-angular-core-upload-file.umd.min.js +2 -2
  87. package/bundles/sd-angular-core-upload-file.umd.min.js.map +1 -1
  88. package/bundles/sd-angular-core-utility.umd.js +5 -4
  89. package/bundles/sd-angular-core-utility.umd.js.map +1 -1
  90. package/bundles/sd-angular-core-utility.umd.min.js +1 -1
  91. package/bundles/sd-angular-core-utility.umd.min.js.map +1 -1
  92. package/chip/sd-angular-core-chip.metadata.json +1 -1
  93. package/chip/src/lib/chip.component.d.ts +2 -0
  94. package/common/src/lib/directives/sd-scroll.directive.d.ts +1 -0
  95. package/date-month/sd-angular-core-date-month.metadata.json +1 -1
  96. package/date-month/src/lib/date-month.component.d.ts +2 -0
  97. package/date-range/sd-angular-core-date-range.metadata.json +1 -1
  98. package/date-range/src/lib/date-range.component.d.ts +2 -0
  99. package/date-time/sd-angular-core-date-time.metadata.json +1 -1
  100. package/date-time/src/lib/date-time.component.d.ts +2 -0
  101. package/dynamic-report/sd-angular-core-dynamic-report.metadata.json +1 -1
  102. package/dynamic-report/src/lib/dynamic-report.component.d.ts +4 -3
  103. package/editor/sd-angular-core-editor.metadata.json +1 -1
  104. package/editor/src/lib/editor.component.d.ts +2 -0
  105. package/esm2015/autocomplete/src/lib/autocomplete.component.js +4 -2
  106. package/esm2015/chip/src/lib/chip.component.js +5 -3
  107. package/esm2015/common/src/lib/directives/sd-scroll.directive.js +4 -1
  108. package/esm2015/date-month/src/lib/date-month.component.js +4 -2
  109. package/esm2015/date-range/src/lib/date-range.component.js +6 -4
  110. package/esm2015/date-time/src/lib/date-time.component.js +4 -2
  111. package/esm2015/dynamic-report/src/lib/dynamic-report.component.js +9 -9
  112. package/esm2015/dynamic-report/src/lib/dynamic-report.module.js +3 -3
  113. package/esm2015/editor/src/lib/editor.component.js +5 -3
  114. package/esm2015/export/src/lib/export.service.js +39 -13
  115. package/esm2015/grid-material/src/lib/components/desktop-command/desktop-command.component.js +2 -2
  116. package/esm2015/grid-material/src/lib/grid-material.component.js +21 -17
  117. package/esm2015/input-currency/src/lib/input-currency.component.js +4 -2
  118. package/esm2015/input-dropdown/src/lib/input.component.js +3 -10
  119. package/esm2015/input-number/src/lib/input-number.component.js +7 -5
  120. package/esm2015/json-editor/src/lib/json-editor.component.js +6 -4
  121. package/esm2015/radio/src/lib/radio.component.js +5 -3
  122. package/esm2015/select/src/lib/select.component.js +4 -2
  123. package/esm2015/select-badge/src/lib/select-badge.component.js +5 -3
  124. package/esm2015/select-editor/src/lib/select-editor.component.js +6 -4
  125. package/esm2015/textarea/src/lib/textarea.component.js +5 -3
  126. package/esm2015/time/src/lib/time.component.js +5 -3
  127. package/esm2015/upload-file/src/lib/upload-file.component.js +6 -4
  128. package/esm2015/utility/src/lib/utility.service.js +6 -5
  129. package/export/sd-angular-core-export.metadata.json +1 -1
  130. package/export/src/lib/export.service.d.ts +2 -2
  131. package/fesm2015/sd-angular-core-autocomplete.js +3 -2
  132. package/fesm2015/sd-angular-core-autocomplete.js.map +1 -1
  133. package/fesm2015/sd-angular-core-chip.js +4 -3
  134. package/fesm2015/sd-angular-core-chip.js.map +1 -1
  135. package/fesm2015/sd-angular-core-common.js +3 -0
  136. package/fesm2015/sd-angular-core-common.js.map +1 -1
  137. package/fesm2015/sd-angular-core-date-month.js +3 -2
  138. package/fesm2015/sd-angular-core-date-month.js.map +1 -1
  139. package/fesm2015/sd-angular-core-date-range.js +5 -4
  140. package/fesm2015/sd-angular-core-date-range.js.map +1 -1
  141. package/fesm2015/sd-angular-core-date-time.js +3 -2
  142. package/fesm2015/sd-angular-core-date-time.js.map +1 -1
  143. package/fesm2015/sd-angular-core-dynamic-report.js +9 -10
  144. package/fesm2015/sd-angular-core-dynamic-report.js.map +1 -1
  145. package/fesm2015/sd-angular-core-editor.js +4 -2
  146. package/fesm2015/sd-angular-core-editor.js.map +1 -1
  147. package/fesm2015/sd-angular-core-export.js +38 -12
  148. package/fesm2015/sd-angular-core-export.js.map +1 -1
  149. package/fesm2015/sd-angular-core-grid-material.js +21 -18
  150. package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
  151. package/fesm2015/sd-angular-core-input-currency.js +3 -2
  152. package/fesm2015/sd-angular-core-input-currency.js.map +1 -1
  153. package/fesm2015/sd-angular-core-input-dropdown.js +2 -9
  154. package/fesm2015/sd-angular-core-input-dropdown.js.map +1 -1
  155. package/fesm2015/sd-angular-core-input-number.js +6 -5
  156. package/fesm2015/sd-angular-core-input-number.js.map +1 -1
  157. package/fesm2015/sd-angular-core-json-editor.js +5 -4
  158. package/fesm2015/sd-angular-core-json-editor.js.map +1 -1
  159. package/fesm2015/sd-angular-core-radio.js +4 -3
  160. package/fesm2015/sd-angular-core-radio.js.map +1 -1
  161. package/fesm2015/sd-angular-core-select-badge.js +4 -3
  162. package/fesm2015/sd-angular-core-select-badge.js.map +1 -1
  163. package/fesm2015/sd-angular-core-select-editor.js +5 -4
  164. package/fesm2015/sd-angular-core-select-editor.js.map +1 -1
  165. package/fesm2015/sd-angular-core-select.js +3 -2
  166. package/fesm2015/sd-angular-core-select.js.map +1 -1
  167. package/fesm2015/sd-angular-core-textarea.js +4 -3
  168. package/fesm2015/sd-angular-core-textarea.js.map +1 -1
  169. package/fesm2015/sd-angular-core-time.js +4 -3
  170. package/fesm2015/sd-angular-core-time.js.map +1 -1
  171. package/fesm2015/sd-angular-core-upload-file.js +5 -3
  172. package/fesm2015/sd-angular-core-upload-file.js.map +1 -1
  173. package/fesm2015/sd-angular-core-utility.js +5 -4
  174. package/fesm2015/sd-angular-core-utility.js.map +1 -1
  175. package/grid-material/sd-angular-core-grid-material.metadata.json +1 -1
  176. package/grid-material/src/lib/grid-material.component.d.ts +2 -0
  177. package/input-currency/sd-angular-core-input-currency.metadata.json +1 -1
  178. package/input-currency/src/lib/input-currency.component.d.ts +2 -0
  179. package/input-number/sd-angular-core-input-number.metadata.json +1 -1
  180. package/input-number/src/lib/input-number.component.d.ts +3 -1
  181. package/json-editor/sd-angular-core-json-editor.metadata.json +1 -1
  182. package/json-editor/src/lib/json-editor.component.d.ts +2 -0
  183. package/package.json +3 -3
  184. package/radio/sd-angular-core-radio.metadata.json +1 -1
  185. package/radio/src/lib/radio.component.d.ts +2 -0
  186. package/{sd-angular-core-1.2.33.tgz → sd-angular-core-1.2.36.tgz} +0 -0
  187. package/select/sd-angular-core-select.metadata.json +1 -1
  188. package/select/src/lib/select.component.d.ts +2 -0
  189. package/select-badge/sd-angular-core-select-badge.metadata.json +1 -1
  190. package/select-badge/src/lib/select-badge.component.d.ts +2 -0
  191. package/select-editor/sd-angular-core-select-editor.metadata.json +1 -1
  192. package/select-editor/src/lib/select-editor.component.d.ts +2 -0
  193. package/textarea/sd-angular-core-textarea.metadata.json +1 -1
  194. package/textarea/src/lib/textarea.component.d.ts +2 -0
  195. package/time/sd-angular-core-time.metadata.json +1 -1
  196. package/time/src/lib/time.component.d.ts +2 -0
  197. package/upload-file/sd-angular-core-upload-file.metadata.json +1 -1
  198. package/upload-file/src/lib/upload-file.component.d.ts +2 -0
@@ -5,7 +5,8 @@ import { Injectable, Inject } from '@angular/core';
5
5
  import { SdApiService } from '@sd-angular/core/api';
6
6
  import * as uuid from 'uuid';
7
7
  import hash from 'object-hash';
8
- import { AngularCsv } from 'angular-csv-ext/dist/Angular-csv';
8
+ import { ExportToCsv } from 'export-to-csv';
9
+ import * as XLSX from 'xlsx';
9
10
  import { EXPORT_CONFIG, API } from './export.model';
10
11
  import { SdNotifyService } from '@sd-angular/core/notify';
11
12
  import { SdUtilityService } from '@sd-angular/core/utility';
@@ -124,25 +125,50 @@ export class SdExportService {
124
125
  const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,' });
125
126
  __classPrivateFieldGet(this, _blobToSaveAs).call(this, blob, option === null || option === void 0 ? void 0 : option.fileName);
126
127
  });
128
+ // exportCSV = async (option: IExportOption) => {
129
+ // const { columns, items, fileName } = option;
130
+ // const options = {
131
+ // fieldSeparator: ',',
132
+ // quoteStrings: '"',
133
+ // decimalseparator: '.',
134
+ // showLabels: true,
135
+ // showTitle: false,
136
+ // title: fileName || 'CSV',
137
+ // useBom: true,
138
+ // noDownload: false,
139
+ // useHeader: false,
140
+ // nullToEmptyString: true,
141
+ // };
142
+ // const headerCSV = {};
143
+ // for (const column of columns) {
144
+ // headerCSV[column.field] = column.title;
145
+ // }
146
+ // return new AngularCsv([...[headerCSV], ...items], `${fileName || 'CSV'}_${Date.toFormat(new Date(), 'yyyy-MM-dd-HH-mm-ss')}`, options);
147
+ // }
127
148
  this.exportCSV = (option) => __awaiter(this, void 0, void 0, function* () {
128
149
  const { columns, items, fileName } = option;
129
- const options = {
150
+ const headerCSV = {};
151
+ for (const column of columns) {
152
+ headerCSV[column.field] = column.title;
153
+ }
154
+ const csvExporter = new ExportToCsv({
155
+ filename: `${fileName || 'CSV'}_${Date.toFormat(new Date(), 'yyyy-MM-dd-HH-mm-ss')}`,
130
156
  fieldSeparator: ',',
131
157
  quoteStrings: '"',
132
- decimalseparator: '.',
158
+ decimalSeparator: '.',
133
159
  showLabels: true,
134
160
  showTitle: false,
135
161
  title: fileName || 'CSV',
136
162
  useBom: true,
137
- noDownload: false,
138
- useHeader: false,
139
- nullToEmptyString: true,
140
- };
141
- const headerCSV = {};
142
- for (const column of columns) {
143
- headerCSV[column.field] = column.title;
144
- }
145
- return new AngularCsv([...[headerCSV], ...items], `${fileName || 'CSV'}_${Date.toFormat(new Date(), 'yyyy-MM-dd-HH-mm-ss')}`, options);
163
+ });
164
+ csvExporter.generateCsv([headerCSV, ...items]);
165
+ });
166
+ this.exportExcelRaw = (data, fileName) => __awaiter(this, void 0, void 0, function* () {
167
+ const ws = XLSX.utils.json_to_sheet(data);
168
+ const wb = { Sheets: { data: ws }, SheetNames: ['data'] };
169
+ const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' });
170
+ const blob = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8' });
171
+ __classPrivateFieldGet(this, _blobToSaveAs).call(this, blob, fileName);
146
172
  });
147
173
  this.mergePDF = (urls) => __awaiter(this, void 0, void 0, function* () {
148
174
  const { firebaseUrl } = this.configuration;
@@ -212,4 +238,4 @@ SdExportService.ctorParameters = () => [
212
238
  { type: SdNotifyService },
213
239
  { type: undefined, decorators: [{ type: Inject, args: [EXPORT_CONFIG,] }, { type: Optional }] }
214
240
  ];
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2V4cG9ydC8iLCJzb3VyY2VzIjpbInNyYy9saWIvZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzlELE9BQU8sRUFBd0MsYUFBYSxFQUFpQixHQUFHLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7QUFLNUQsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFDVSxVQUF3QixFQUN4QixjQUFnQyxFQUNoQyxhQUE4QixFQUNLLGFBQW1DO1FBSHRFLGVBQVUsR0FBVixVQUFVLENBQWM7UUFDeEIsbUJBQWMsR0FBZCxjQUFjLENBQWtCO1FBQ2hDLGtCQUFhLEdBQWIsYUFBYSxDQUFpQjtRQUNLLGtCQUFhLEdBQWIsYUFBYSxDQUFzQjtRQXVCaEYscUJBQWEsQ0FBQyxHQUFXLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDMUMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLFVBQVUsRUFBRSxJQUFJLENB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Q0FBQztJQUMzQyxDQUFDO0lBUUQsSUFBWSxNQUFNO1FBQ2hCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3RDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUNoQyxPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQ0QsT0FBTyxNQUFNLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBWSxVQUFVO1FBQ3BCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3BDLElBQUksRUFBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsTUFBTSxDQUFBLEVBQUU7WUFDakIsT0FBTztTQUNSO1FBQ0QsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDaEMsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUNELE9BQU8sTUFBTSxFQUFFLENBQUM7SUFDbEIsQ0FBQzs7Ozs7WUFoQ0YsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFWUSxZQUFZO1lBTVosZ0JBQWdCO1lBRGhCLGVBQWU7NENBY25CLE1BQU0sU0FBQyxhQUFhLGNBQUcsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZEFwaVNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2FwaSc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCBoYXNoIGZyb20gJ29iamVjdC1oYXNoJztcclxuaW1wb3J0IHsgQW5ndWxhckNzdiB9IGZyb20gJ2FuZ3VsYXItY3N2LWV4dC9kaXN0L0FuZ3VsYXItY3N2JztcclxuaW1wb3J0IHsgRXhwb3J0VGVtcGxhdGUsIElFeHBvcnRDb25maWd1cmF0aW9uLCBFWFBPUlRfQ09ORklHLCBJRXhwb3J0T3B0aW9uLCBBUEksIFNkRXhwb3J0RmlsZSB9IGZyb20gJy4vZXhwb3J0Lm1vZGVsJztcclxuaW1wb3J0IHsgU2ROb3RpZnlTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9ub3RpZnknO1xyXG5pbXBvcnQgeyBTZFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS91dGlsaXR5JztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNkRXhwb3J0U2VydmljZSB7XHJcbiAgZ2V0IGhhc0NvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmNvbmZpZ3VyYXRpb24/LmZpcmViYXNlVXJsO1xyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXBpU2VydmljZTogU2RBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5U2VydmljZTogU2RVdGlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZ5U2VydmljZTogU2ROb3RpZnlTZXJ2aWNlLFxyXG4gICAgQEluamVjdChFWFBPUlRfQ09ORklHKSBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbmZpZ3VyYXRpb246IElFeHBvcnRDb25maWd1cmF0aW9uKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBmb2xkZXIoKSB7XHJcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gdGhpcy5jb25maWd1cmF0aW9uO1xyXG4gICAgaWYgKHR5cGVvZiAoZm9sZGVyKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIGZvbGRlcjtcclxuICAgIH1cclxuICAgIHJldHVybiBmb2xkZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IHVzZXJGb2xkZXIoKSB7XHJcbiAgICBjb25zdCB7IHVzZXIgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcclxuICAgIGlmICghdXNlcj8uZm9sZGVyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgZm9sZGVyIH0gPSB1c2VyO1xyXG4gICAgaWYgKHR5cGVvZiAoZm9sZGVyKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIGZvbGRlcjtcclxuICAgIH1cclxuICAgIHJldHVybiBmb2xkZXIoKTtcclxuICB9XHJcblxyXG4gICNkaXJlY3RvcnkgPSAoa2V5OiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcpID0+IHtcclxuICAgIGxldCBoYXNoZWRGb2xkZXIgPSBoYXNoKHtcclxuICAgICAgZm9sZGVyOiB0aGlzLmZvbGRlcixcclxuICAgICAgdXNlckZvbGRlcjogdGhpcy51c2VyRm9sZGVyXHJcbiAgICB9KTtcclxuICAgIGlmICghZ3JvdXApIHtcclxuICAgICAgcmV0dXJuIGBkaXIxPSR7dGhpcy5mb2xkZXJ9JmRpcjI9VS0ke2hhc2hlZEZvbGRlcn0mZGlyMz0ke2tleSB8fCAnJ31gO1xyXG4gICAgfVxyXG4gICAgaGFzaGVkRm9sZGVyID0gaGFzaCh7XHJcbiAgICAgIGZvbGRlcjogdGhpcy5mb2xkZXIsXHJcbiAgICAgIGdyb3VwXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBgZGlyMT0ke3RoaXMuZm9sZGVyfSZkaXIyPUctJHtoYXNoZWRGb2xkZXJ9JmRpcjM9JHtrZXkgfHwgJyd9YDtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlVGVtcGxhdGUgPSBhc3luYyAodGVtcGxhdGU6IEV4cG9ydFRlbXBsYXRlKSA9PiB7XHJcbiAgICBjb25zdCB7IGZpcmViYXNlVXJsIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICBjb25zdCB7IGdlbmVyYXRlVGVtcGxhdGUgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke2ZpcmViYXNlVXJsfSR7Z2VuZXJhdGVUZW1wbGF0ZX1gO1xyXG4gICAgY29uc3QgeyBmaWxlUGF0aCwgZmlsZU5hbWUgfSA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHVybCwgdGVtcGxhdGUpO1xyXG4gICAgcmV0dXJuIHsgZmlsZVBhdGgsIGZpbGVOYW1lIH07XHJcbiAgfVxyXG5cclxuICB1cGxvYWRUZW1wbGF0ZSA9IGFzeW5jIChhcmdzOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gICAgdmFsaWRhdG9yPzogKGZpbGVOYW1lOiBzdHJpbmcpID0+IHN0cmluZ1xyXG4gIH0pOiBQcm9taXNlPFNkRXhwb3J0RmlsZT4gPT4ge1xyXG4gICAgY29uc3QgeyBrZXksIGdyb3VwLCB2YWxpZGF0b3IgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCB7IGZpcmViYXNlVXJsIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICBjb25zdCB7IHVwbG9hZFRlbXBsYXRlIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHtmaXJlYmFzZVVybH0ke3VwbG9hZFRlbXBsYXRlfT8ke3RoaXMuI2RpcmVjdG9yeShrZXksIGdyb3VwKX1gO1xyXG4gICAgY29uc3QgZmlsZSA9IGF3YWl0IHRoaXMudXRpbGl0eVNlcnZpY2UudXBsb2FkKHtcclxuICAgICAgZXh0ZW5zaW9uczogWyd4bHN4J10sXHJcbiAgICAgIG1heFNpemVJbk1iOiAwLjEsXHJcbiAgICAgIHZhbGlkYXRvclxyXG4gICAgfSk7XHJcbiAgICBpZihmaWxlKSB7XHJcbiAgICAgIGNvbnN0IHsgZmlsZVBhdGgsIGZpbGVOYW1lIH0gPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UudXBsb2FkKHVybCwgZmlsZSkuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2Uubm90aWZ5Lndhcm5pbmcoZXJyPy5tZXNzYWdlKTtcclxuICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGZpbGVQYXRoLFxyXG4gICAgICAgIGZpbGVOYW1lLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVVwbG9hZFRlbXBsYXRlID0gYXN5bmMgKGFyZ3M6IHtcclxuICAgIGtleTogc3RyaW5nO1xyXG4gICAgdGVtcGxhdGU6IEV4cG9ydFRlbXBsYXRlO1xyXG4gICAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgfSkgPT4ge1xyXG4gICAgY29uc3QgeyBrZXksIHRlbXBsYXRlLCBncm91cCB9ID0gYXJncztcclxuICAgIGNvbnN0IHsgZmlyZWJhc2VVcmwgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcclxuICAgIGNvbnN0IHsgZ2VuZXJhdGVVcGxvYWRUZW1wbGF0ZSB9ID0gQVBJO1xyXG4gICAgY29uc3QgdXJsID0gYCR7ZmlyZWJhc2VVcmx9JHtnZW5lcmF0ZVVwbG9hZFRlbXBsYXRlfT8ke3RoaXMuI2RpcmVjdG9yeShrZXksIGdyb3VwKX1gO1xyXG4gICAgY29uc3QgeyBmaWxlUGF0aCwgZmlsZU5hbWUgfSA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHVybCwgdGVtcGxhdGUpO1xyXG4gICAgcmV0dXJuIHsgZmlsZVBhdGgsIGZpbGVOYW1lIH07XHJcbiAgfVxyXG5cclxuICByZW1vdmVGaWxlID0gYXN5bmMgKGFyZ3M6IHtcclxuICAgIGtleTogc3RyaW5nO1xyXG4gICAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgICBmaWxlTmFtZT86IHN0cmluZztcclxuICB9KSA9PiB7XHJcbiAgICBjb25zdCB7IGtleSwgZ3JvdXAsIGZpbGVOYW1lIH0gPSBhcmdzO1xyXG4gICAgY29uc3QgeyBmaXJlYmFzZVVybCB9ID0gdGhpcy5jb25maWd1cmF0aW9uO1xyXG4gICAgY29uc3QgeyByZW1vdmVGaWxlIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHtmaXJlYmFzZVVybH0ke3JlbW92ZUZpbGV9PyR7dGhpcy4jZGlyZWN0b3J5KGtleSwgZ3JvdXApfSZuYW1lPSR7ZmlsZU5hbWV9YDtcclxuICAgIGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHVybCk7XHJcbiAgfVxyXG5cclxuICBmaWxlc0luRm9sZGVyID0gYXN5bmMgKGFyZ3M6IHtcclxuICAgIGtleTogc3RyaW5nO1xyXG4gICAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgfSk6IFByb21pc2U8U2RFeHBvcnRGaWxlW10+ID0+IHtcclxuICAgIGludGVyZmFjZSBGaWxlc0luRm9sZGVyUmVzIHtcclxuICAgICAgZGlyZWN0b3J5OiBzdHJpbmc7XHJcbiAgICAgIGZpbGVzOiB7XHJcbiAgICAgICAgcHVibGljVXJsOiBzdHJpbmcsIGZ1bGxQYXRoOiBzdHJpbmcsIG5hbWU6IHN0cmluZ1xyXG4gICAgICB9W107XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IGtleSwgZ3JvdXAgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCB7IGZpcmViYXNlVXJsIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICBjb25zdCB7IGZpbGVzSW5Gb2xkZXIgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke2ZpcmViYXNlVXJsfSR7ZmlsZXNJbkZvbGRlcn0/JHt0aGlzLiNkaXJlY3Rvcnkoa2V5LCBncm91cCl9YDtcclxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5nZXQ8RmlsZXNJbkZvbGRlclJlcz4odXJsKTtcclxuICAgIHJldHVybiByZXMuZmlsZXM/Lm1hcChlID0+ICh7XHJcbiAgICAgIGZpbGVQYXRoOiBlLnB1YmxpY1VybCxcclxuICAgICAgZmlsZU5hbWU6IGUubmFtZVxyXG4gICAgfSkpIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgZG93bmxvYWQgPSAoZmlsZVBhdGg6IHN0cmluZywgZmlsZU5hbWU/OiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IGxpbms6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGxpbmsuZG93bmxvYWQgPSBgJHtmaWxlTmFtZSB8fCB1dWlkLnY0KCl9Lnhsc3hgO1xyXG4gICAgbGluay5ocmVmID0gZmlsZVBhdGg7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydEJ5VGVtcGxhdGUgPSBhc3luYyAoYXJnczoge1xyXG4gICAgZmlsZVBhdGg6IHN0cmluZyxcclxuICAgIGNvbHVtbnM6IGFueVtdLFxyXG4gICAgaXRlbXM6IGFueVtdLFxyXG4gICAgZmlsZU5hbWU/OiBzdHJpbmdcclxuICB9KSA9PiB7XHJcbiAgICBjb25zdCB7IGZpbGVQYXRoLCBjb2x1bW5zLCBpdGVtcywgZmlsZU5hbWUgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCB7IGZpcmViYXNlVXJsIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICBjb25zdCB7IHNkRXhwb3J0QnlUZW1wbGF0ZSB9ID0gQVBJO1xyXG4gICAgY29uc3QgdXJsID0gYCR7ZmlyZWJhc2VVcmx9JHtzZEV4cG9ydEJ5VGVtcGxhdGV9YDtcclxuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHVybCwge1xyXG4gICAgICBmaWxlUGF0aCxcclxuICAgICAgY29sdW1ucyxcclxuICAgICAgaXRlbXMsXHJcbiAgICAgIGZpbGVOYW1lXHJcbiAgICB9LCBudWxsLCB7XHJcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2Jhc2U2NCwnIH0pO1xyXG4gICAgdGhpcy4jYmxvYlRvU2F2ZUFzKGJsb2IsIGZpbGVOYW1lKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCA9IGFzeW5jIChvcHRpb246IElFeHBvcnRPcHRpb24pID0+IHtcclxuICAgIGNvbnN0IHsgZmlyZWJhc2VVcmwgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcclxuICAgIGNvbnN0IHsgc2RFeHBvcnQgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke2ZpcmViYXNlVXJsfSR7c2RFeHBvcnR9YDtcclxuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHVybCwgb3B0aW9uLCBudWxsLCB7XHJcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2Jhc2U2NCwnIH0pO1xyXG4gICAgdGhpcy4jYmxvYlRvU2F2ZUFzKGJsb2IsIG9wdGlvbj8uZmlsZU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0Q1NWID0gYXN5bmMgKG9wdGlvbjogSUV4cG9ydE9wdGlvbikgPT4ge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zLCBpdGVtcywgZmlsZU5hbWUgfSA9IG9wdGlvbjtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgIGZpZWxkU2VwYXJhdG9yOiAnLCcsXHJcbiAgICAgIHF1b3RlU3RyaW5nczogJ1wiJyxcclxuICAgICAgZGVjaW1hbHNlcGFyYXRvcjogJy4nLFxyXG4gICAgICBzaG93TGFiZWxzOiB0cnVlLFxyXG4gICAgICBzaG93VGl0bGU6IGZhbHNlLFxyXG4gICAgICB0aXRsZTogZmlsZU5hbWUgfHwgJ0NTVicsXHJcbiAgICAgIHVzZUJvbTogdHJ1ZSxcclxuICAgICAgbm9Eb3dubG9hZDogZmFsc2UsXHJcbiAgICAgIHVzZUhlYWRlcjogZmFsc2UsXHJcbiAgICAgIG51bGxUb0VtcHR5U3RyaW5nOiB0cnVlLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IGhlYWRlckNTViA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG4gICAgICBoZWFkZXJDU1ZbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi50aXRsZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgQW5ndWxhckNzdihbLi4uW2hlYWRlckNTVl0sIC4uLml0ZW1zXSwgYCR7ZmlsZU5hbWUgfHwgJ0NTVid9XyR7RGF0ZS50b0Zvcm1hdChuZXcgRGF0ZSgpLCAneXl5eS1NTS1kZC1ISC1tbS1zcycpfWAsIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgbWVyZ2VQREYgPSBhc3luYyAodXJsczogc3RyaW5nW10pID0+IHtcclxuICAgIGNvbnN0IHsgZmlyZWJhc2VVcmwgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcclxuICAgIGNvbnN0IHsgc2RNZXJnZVBERiB9ID0gQVBJO1xyXG4gICAgY29uc3QgdXJsID0gYCR7ZmlyZWJhc2VVcmx9JHtzZE1lcmdlUERGfWA7XHJcbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwsIHtcclxuICAgICAgdXJsc1xyXG4gICAgfSwgbnVsbCwge1xyXG4gICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pO1xyXG4gICAgdGhpcy4jYmxvYlRvU2F2ZUFzKGJsb2IsIGAke3V1aWQudjQoKX1gKTtcclxuICB9XHJcblxyXG4gICNibG9iVG9TYXZlQXMgPSAoYmxvYjogQmxvYiwgZmlsZU5hbWU6IHN0cmluZyA9ICdFeHBvcnQnKSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC8ueGxzeC9pLCAnJyk7XHJcbiAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvLnBkZi9pLCAnJyk7XHJcbiAgICAgIGlmIChsaW5rLmRvd25sb2FkICE9PSB1bmRlZmluZWQpIHsgLy8gZmVhdHVyZSBkZXRlY3Rpb25cclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgYCR7ZmlsZU5hbWV9XyR7bmV3IERhdGUoKS50b0Zvcm1hdCgneXl5eV9NTV9kZF9ISF9tbScpfWApO1xyXG4gICAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICAgICAgbGluay5jbGljaygpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignQmxvYlRvU2F2ZUFzIGVycm9yJywgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFeHBvcnRJbmZvIHtcclxuICBkYXRhOiBhbnlbXTtcclxuICBzaGVldE5hbWU/OiBzdHJpbmc7XHJcbiAgZmlsZU5hbWU/OiBzdHJpbmc7XHJcbn1cclxuIl19
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2V4cG9ydC8iLCJzb3VyY2VzIjpbInNyYy9saWIvZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQXdDLGFBQWEsRUFBaUIsR0FBRyxFQUFnQixNQUFNLGdCQUFnQixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7O0FBSzVELE1BQU0sT0FBTyxlQUFlO0lBSTFCLFlBQ1UsVUFBd0IsRUFDeEIsY0FBZ0MsRUFDaEMsYUFBOEIsRUFDSyxhQUFtQztRQUh0RSxlQUFVLEdBQVYsVUFBVSxDQUFjO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQUNoQyxrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7UUFDSyxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUF1QmhGLHFCQUFhLENBQUMsR0FBVyxFQUFFLEtBQWEsRUFBRSxFQUFFO1lBQzFDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDdEIsTUFBTSxFQUFFLElBQUks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RUQsSUFBWSxVQUFVO1FBQ3BCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3BDLElBQUksRUFBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsTUFBTSxDQUFBLEVBQUU7WUFDakIsT0FBTztTQUNSO1FBQ0QsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDaEMsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUNELE9BQU8sTUFBTSxFQUFFLENBQUM7SUFDbEIsQ0FBQzs7Ozs7WUFoQ0YsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFYUSxZQUFZO1lBT1osZ0JBQWdCO1lBRGhCLGVBQWU7NENBY25CLE1BQU0sU0FBQyxhQUFhLGNBQUcsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZEFwaVNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2FwaSc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCBoYXNoIGZyb20gJ29iamVjdC1oYXNoJztcclxuaW1wb3J0IHsgRXhwb3J0VG9Dc3YgfSBmcm9tICdleHBvcnQtdG8tY3N2JztcclxuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcclxuaW1wb3J0IHsgRXhwb3J0VGVtcGxhdGUsIElFeHBvcnRDb25maWd1cmF0aW9uLCBFWFBPUlRfQ09ORklHLCBJRXhwb3J0T3B0aW9uLCBBUEksIFNkRXhwb3J0RmlsZSB9IGZyb20gJy4vZXhwb3J0Lm1vZGVsJztcclxuaW1wb3J0IHsgU2ROb3RpZnlTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9ub3RpZnknO1xyXG5pbXBvcnQgeyBTZFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS91dGlsaXR5JztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNkRXhwb3J0U2VydmljZSB7XHJcbiAgZ2V0IGhhc0NvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmNvbmZpZ3VyYXRpb24/LmZpcmViYXNlVXJsO1xyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXBpU2VydmljZTogU2RBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5U2VydmljZTogU2RVdGlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZ5U2VydmljZTogU2ROb3RpZnlTZXJ2aWNlLFxyXG4gICAgQEluamVjdChFWFBPUlRfQ09ORklHKSBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbmZpZ3VyYXRpb246IElFeHBvcnRDb25maWd1cmF0aW9uKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBmb2xkZXIoKSB7XHJcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gdGhpcy5jb25maWd1cmF0aW9uO1xyXG4gICAgaWYgKHR5cGVvZiAoZm9sZGVyKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIGZvbGRlcjtcclxuICAgIH1cclxuICAgIHJldHVybiBmb2xkZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IHVzZXJGb2xkZXIoKSB7XHJcbiAgICBjb25zdCB7IHVzZXIgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcclxuICAgIGlmICghdXNlcj8uZm9sZGVyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgZm9sZGVyIH0gPSB1c2VyO1xyXG4gICAgaWYgKHR5cGVvZiAoZm9sZGVyKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIGZvbGRlcjtcclxuICAgIH1cclxuICAgIHJldHVybiBmb2xkZXIoKTtcclxuICB9XHJcblxyXG4gICNkaXJlY3RvcnkgPSAoa2V5OiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcpID0+IHtcclxuICAgIGxldCBoYXNoZWRGb2xkZXIgPSBoYXNoKHtcclxuICAgICAgZm9sZGVyOiB0aGlzLmZvbGRlcixcclxuICAgICAgdXNlckZvbGRlcjogdGhpcy51c2VyRm9sZGVyXHJcbiAgICB9KTtcclxuICAgIGlmICghZ3JvdXApIHtcclxuICAgICAgcmV0dXJuIGBkaXIxPSR7dGhpcy5mb2xkZXJ9JmRpcjI9VS0ke2hhc2hlZEZvbGRlcn0mZGlyMz0ke2tleSB8fCAnJ31gO1xyXG4gICAgfVxyXG4gICAgaGFzaGVkRm9sZGVyID0gaGFzaCh7XHJcbiAgICAgIGZvbGRlcjogdGhpcy5mb2xkZXIsXHJcbiAgICAgIGdyb3VwXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBgZGlyMT0ke3RoaXMuZm9sZGVyfSZkaXIyPUctJHtoYXNoZWRGb2xkZXJ9JmRpcjM9JHtrZXkgfHwgJyd9YDtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlVGVtcGxhdGUgPSBhc3luYyAodGVtcGxhdGU6IEV4cG9ydFRlbXBsYXRlKSA9PiB7XHJcbiAgICBjb25zdCB7IGZpcmViYXNlVXJsIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICBjb25zdCB7IGdlbmVyYXRlVGVtcGxhdGUgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke2ZpcmViYXNlVXJsfSR7Z2VuZXJhdGVUZW1wbGF0ZX1gO1xyXG4gICAgY29uc3QgeyBmaWxlUGF0aCwgZmlsZU5hbWUgfSA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHVybCwgdGVtcGxhdGUpO1xyXG4gICAgcmV0dXJuIHsgZmlsZVBhdGgsIGZpbGVOYW1lIH07XHJcbiAgfVxyXG5cclxuICB1cGxvYWRUZW1wbGF0ZSA9IGFzeW5jIChhcmdzOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gICAgdmFsaWRhdG9yPzogKGZpbGVOYW1lOiBzdHJpbmcpID0+IHN0cmluZ1xyXG4gIH0pOiBQcm9taXNlPFNkRXhwb3J0RmlsZT4gPT4ge1xyXG4gICAgY29uc3QgeyBrZXksIGdyb3VwLCB2YWxpZGF0b3IgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCB7IGZpcmViYXNlVXJsIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICBjb25zdCB7IHVwbG9hZFRlbXBsYXRlIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHtmaXJlYmFzZVVybH0ke3VwbG9hZFRlbXBsYXRlfT8ke3RoaXMuI2RpcmVjdG9yeShrZXksIGdyb3VwKX1gO1xyXG4gICAgY29uc3QgZmlsZSA9IGF3YWl0IHRoaXMudXRpbGl0eVNlcnZpY2UudXBsb2FkKHtcclxuICAgICAgZXh0ZW5zaW9uczogWyd4bHN4J10sXHJcbiAgICAgIG1heFNpemVJbk1iOiAwLjEsXHJcbiAgICAgIHZhbGlkYXRvclxyXG4gICAgfSk7XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICBjb25zdCB7IGZpbGVQYXRoLCBmaWxlTmFtZSB9ID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLnVwbG9hZCh1cmwsIGZpbGUpLmNhdGNoKChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKGVycj8ubWVzc2FnZSk7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBmaWxlUGF0aCxcclxuICAgICAgICBmaWxlTmFtZSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVVcGxvYWRUZW1wbGF0ZSA9IGFzeW5jIChhcmdzOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIHRlbXBsYXRlOiBFeHBvcnRUZW1wbGF0ZTtcclxuICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gIH0pID0+IHtcclxuICAgIGNvbnN0IHsga2V5LCB0ZW1wbGF0ZSwgZ3JvdXAgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCB7IGZpcmViYXNlVXJsIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICBjb25zdCB7IGdlbmVyYXRlVXBsb2FkVGVtcGxhdGUgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke2ZpcmViYXNlVXJsfSR7Z2VuZXJhdGVVcGxvYWRUZW1wbGF0ZX0/JHt0aGlzLiNkaXJlY3Rvcnkoa2V5LCBncm91cCl9YDtcclxuICAgIGNvbnN0IHsgZmlsZVBhdGgsIGZpbGVOYW1lIH0gPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwsIHRlbXBsYXRlKTtcclxuICAgIHJldHVybiB7IGZpbGVQYXRoLCBmaWxlTmFtZSB9O1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRmlsZSA9IGFzeW5jIChhcmdzOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gICAgZmlsZU5hbWU/OiBzdHJpbmc7XHJcbiAgfSkgPT4ge1xyXG4gICAgY29uc3QgeyBrZXksIGdyb3VwLCBmaWxlTmFtZSB9ID0gYXJncztcclxuICAgIGNvbnN0IHsgZmlyZWJhc2VVcmwgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcclxuICAgIGNvbnN0IHsgcmVtb3ZlRmlsZSB9ID0gQVBJO1xyXG4gICAgY29uc3QgdXJsID0gYCR7ZmlyZWJhc2VVcmx9JHtyZW1vdmVGaWxlfT8ke3RoaXMuI2RpcmVjdG9yeShrZXksIGdyb3VwKX0mbmFtZT0ke2ZpbGVOYW1lfWA7XHJcbiAgICBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwpO1xyXG4gIH1cclxuXHJcbiAgZmlsZXNJbkZvbGRlciA9IGFzeW5jIChhcmdzOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gIH0pOiBQcm9taXNlPFNkRXhwb3J0RmlsZVtdPiA9PiB7XHJcbiAgICBpbnRlcmZhY2UgRmlsZXNJbkZvbGRlclJlcyB7XHJcbiAgICAgIGRpcmVjdG9yeTogc3RyaW5nO1xyXG4gICAgICBmaWxlczoge1xyXG4gICAgICAgIHB1YmxpY1VybDogc3RyaW5nLCBmdWxsUGF0aDogc3RyaW5nLCBuYW1lOiBzdHJpbmdcclxuICAgICAgfVtdO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyBrZXksIGdyb3VwIH0gPSBhcmdzO1xyXG4gICAgY29uc3QgeyBmaXJlYmFzZVVybCB9ID0gdGhpcy5jb25maWd1cmF0aW9uO1xyXG4gICAgY29uc3QgeyBmaWxlc0luRm9sZGVyIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHtmaXJlYmFzZVVybH0ke2ZpbGVzSW5Gb2xkZXJ9PyR7dGhpcy4jZGlyZWN0b3J5KGtleSwgZ3JvdXApfWA7XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UuZ2V0PEZpbGVzSW5Gb2xkZXJSZXM+KHVybCk7XHJcbiAgICByZXR1cm4gcmVzLmZpbGVzPy5tYXAoZSA9PiAoe1xyXG4gICAgICBmaWxlUGF0aDogZS5wdWJsaWNVcmwsXHJcbiAgICAgIGZpbGVOYW1lOiBlLm5hbWVcclxuICAgIH0pKSB8fCBbXTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkID0gKGZpbGVQYXRoOiBzdHJpbmcsIGZpbGVOYW1lPzogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCBsaW5rOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLmRvd25sb2FkID0gYCR7ZmlsZU5hbWUgfHwgdXVpZC52NCgpfS54bHN4YDtcclxuICAgIGxpbmsuaHJlZiA9IGZpbGVQYXRoO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRCeVRlbXBsYXRlID0gYXN5bmMgKGFyZ3M6IHtcclxuICAgIGZpbGVQYXRoOiBzdHJpbmcsXHJcbiAgICBjb2x1bW5zOiBhbnlbXSxcclxuICAgIGl0ZW1zOiBhbnlbXSxcclxuICAgIGZpbGVOYW1lPzogc3RyaW5nXHJcbiAgfSkgPT4ge1xyXG4gICAgY29uc3QgeyBmaWxlUGF0aCwgY29sdW1ucywgaXRlbXMsIGZpbGVOYW1lIH0gPSBhcmdzO1xyXG4gICAgY29uc3QgeyBmaXJlYmFzZVVybCB9ID0gdGhpcy5jb25maWd1cmF0aW9uO1xyXG4gICAgY29uc3QgeyBzZEV4cG9ydEJ5VGVtcGxhdGUgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke2ZpcmViYXNlVXJsfSR7c2RFeHBvcnRCeVRlbXBsYXRlfWA7XHJcbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwsIHtcclxuICAgICAgZmlsZVBhdGgsXHJcbiAgICAgIGNvbHVtbnMsXHJcbiAgICAgIGl0ZW1zLFxyXG4gICAgICBmaWxlTmFtZVxyXG4gICAgfSwgbnVsbCwge1xyXG4gICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtiYXNlNjQsJyB9KTtcclxuICAgIHRoaXMuI2Jsb2JUb1NhdmVBcyhibG9iLCBmaWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgPSBhc3luYyAob3B0aW9uOiBJRXhwb3J0T3B0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB7IGZpcmViYXNlVXJsIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICBjb25zdCB7IHNkRXhwb3J0IH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHtmaXJlYmFzZVVybH0ke3NkRXhwb3J0fWA7XHJcbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwsIG9wdGlvbiwgbnVsbCwge1xyXG4gICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtiYXNlNjQsJyB9KTtcclxuICAgIHRoaXMuI2Jsb2JUb1NhdmVBcyhibG9iLCBvcHRpb24/LmZpbGVOYW1lKTtcclxuICB9XHJcblxyXG4gIC8vIGV4cG9ydENTViA9IGFzeW5jIChvcHRpb246IElFeHBvcnRPcHRpb24pID0+IHtcclxuICAvLyAgIGNvbnN0IHsgY29sdW1ucywgaXRlbXMsIGZpbGVOYW1lIH0gPSBvcHRpb247XHJcbiAgLy8gICBjb25zdCBvcHRpb25zID0ge1xyXG4gIC8vICAgICBmaWVsZFNlcGFyYXRvcjogJywnLFxyXG4gIC8vICAgICBxdW90ZVN0cmluZ3M6ICdcIicsXHJcbiAgLy8gICAgIGRlY2ltYWxzZXBhcmF0b3I6ICcuJyxcclxuICAvLyAgICAgc2hvd0xhYmVsczogdHJ1ZSxcclxuICAvLyAgICAgc2hvd1RpdGxlOiBmYWxzZSxcclxuICAvLyAgICAgdGl0bGU6IGZpbGVOYW1lIHx8ICdDU1YnLFxyXG4gIC8vICAgICB1c2VCb206IHRydWUsXHJcbiAgLy8gICAgIG5vRG93bmxvYWQ6IGZhbHNlLFxyXG4gIC8vICAgICB1c2VIZWFkZXI6IGZhbHNlLFxyXG4gIC8vICAgICBudWxsVG9FbXB0eVN0cmluZzogdHJ1ZSxcclxuICAvLyAgIH07XHJcbiAgLy8gICBjb25zdCBoZWFkZXJDU1YgPSB7fTtcclxuICAvLyAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuICAvLyAgICAgaGVhZGVyQ1NWW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4udGl0bGU7XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gbmV3IEFuZ3VsYXJDc3YoWy4uLltoZWFkZXJDU1ZdLCAuLi5pdGVtc10sIGAke2ZpbGVOYW1lIHx8ICdDU1YnfV8ke0RhdGUudG9Gb3JtYXQobmV3IERhdGUoKSwgJ3l5eXktTU0tZGQtSEgtbW0tc3MnKX1gLCBvcHRpb25zKTtcclxuICAvLyB9XHJcblxyXG4gIGV4cG9ydENTViA9IGFzeW5jIChvcHRpb246IElFeHBvcnRPcHRpb24pID0+IHtcclxuICAgIGNvbnN0IHsgY29sdW1ucywgaXRlbXMsIGZpbGVOYW1lIH0gPSBvcHRpb247XHJcbiAgICBjb25zdCBoZWFkZXJDU1YgPSB7fTtcclxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuICAgICAgaGVhZGVyQ1NWW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4udGl0bGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjc3ZFeHBvcnRlciA9IG5ldyBFeHBvcnRUb0Nzdih7XHJcbiAgICAgIGZpbGVuYW1lOiBgJHtmaWxlTmFtZSB8fCAnQ1NWJ31fJHtEYXRlLnRvRm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkLUhILW1tLXNzJyl9YCxcclxuICAgICAgZmllbGRTZXBhcmF0b3I6ICcsJyxcclxuICAgICAgcXVvdGVTdHJpbmdzOiAnXCInLFxyXG4gICAgICBkZWNpbWFsU2VwYXJhdG9yOiAnLicsXHJcbiAgICAgIHNob3dMYWJlbHM6IHRydWUsXHJcbiAgICAgIHNob3dUaXRsZTogZmFsc2UsXHJcbiAgICAgIHRpdGxlOiBmaWxlTmFtZSB8fCAnQ1NWJyxcclxuICAgICAgdXNlQm9tOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICBjc3ZFeHBvcnRlci5nZW5lcmF0ZUNzdihbaGVhZGVyQ1NWLCAuLi5pdGVtc10pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0RXhjZWxSYXcgPSBhc3luYyAoZGF0YTogYW55W10sIGZpbGVOYW1lOiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IFhMU1gudXRpbHMuanNvbl90b19zaGVldChkYXRhKTtcclxuICAgIGNvbnN0IHdiOiBYTFNYLldvcmtCb29rID0geyBTaGVldHM6IHsgZGF0YTogd3MgfSwgU2hlZXROYW1lczogWydkYXRhJ10gfTtcclxuICAgIGNvbnN0IGV4Y2VsQnVmZmVyOiBhbnkgPSBYTFNYLndyaXRlKHdiLCB7IGJvb2tUeXBlOiAneGxzeCcsIHR5cGU6ICdhcnJheScgfSk7XHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2V4Y2VsQnVmZmVyXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCcgfSk7XHJcbiAgICB0aGlzLiNibG9iVG9TYXZlQXMoYmxvYiwgZmlsZU5hbWUgKTtcclxuICB9XHJcblxyXG4gIG1lcmdlUERGID0gYXN5bmMgKHVybHM6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICBjb25zdCB7IGZpcmViYXNlVXJsIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICBjb25zdCB7IHNkTWVyZ2VQREYgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke2ZpcmViYXNlVXJsfSR7c2RNZXJnZVBERn1gO1xyXG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLnBvc3QodXJsLCB7XHJcbiAgICAgIHVybHNcclxuICAgIH0sIG51bGwsIHtcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyB9KTtcclxuICAgIHRoaXMuI2Jsb2JUb1NhdmVBcyhibG9iLCBgJHt1dWlkLnY0KCl9YCk7XHJcbiAgfVxyXG5cclxuICAjYmxvYlRvU2F2ZUFzID0gKGJsb2I6IEJsb2IsIGZpbGVOYW1lOiBzdHJpbmcgPSAnRXhwb3J0JykgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvLnhsc3gvaSwgJycpO1xyXG4gICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnJlcGxhY2UoLy5wZGYvaSwgJycpO1xyXG4gICAgICBpZiAobGluay5kb3dubG9hZCAhPT0gdW5kZWZpbmVkKSB7IC8vIGZlYXR1cmUgZGV0ZWN0aW9uXHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGAke2ZpbGVOYW1lfV8ke25ldyBEYXRlKCkudG9Gb3JtYXQoJ3l5eXlfTU1fZGRfSEhfbW0nKX1gKTtcclxuICAgICAgICBsaW5rLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgICAgIGxpbmsuY2xpY2soKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Jsb2JUb1NhdmVBcyBlcnJvcicsIGUpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRXhwb3J0SW5mbyB7XHJcbiAgZGF0YTogYW55W107XHJcbiAgc2hlZXROYW1lPzogc3RyaW5nO1xyXG4gIGZpbGVOYW1lPzogc3RyaW5nO1xyXG59XHJcbiJdfQ==
@@ -7,7 +7,7 @@ export class SdDesktopCommand {
7
7
  SdDesktopCommand.decorators = [
8
8
  { type: Component, args: [{
9
9
  selector: 'sd-desktop-command',
10
- template: "<ng-container *ngIf=\"item | commandFilter:commands | async; $implicit as filteredCommands\">\r\n <ng-container *ngFor=\"let command of filteredCommands\">\r\n <ng-container *ngIf=\"command?.click; else elseChildren\">\r\n <button (click)=\"command.click(item)\" [matTooltip]=\"command.title | commandTitle:item\" aria-hidden=\"true\"\r\n [disabled]=\"item | commandDisable:command\" mat-icon-button>\r\n <mat-icon class=\"c-icon\" [fontSet]=\"command.fontSet\">{{command | commandIcon:item}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-template #elseChildren>\r\n <button [matMenuTriggerFor]=\"menu\" aria-hidden=\"true\" mat-icon-button>\r\n <mat-icon *ngIf=\"command?.icon\" class=\"c-icon\" [fontSet]=\"command.fontSet\">{{command | commandIcon:item}}\r\n </mat-icon>\r\n <mat-icon *ngIf=\"!command?.icon\" class=\"c-icon\">more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <span>\r\n <button *ngFor=\"let childCommand of command.children\" mat-menu-item (click)=\"childCommand.click(item)\"\r\n [disabled]=\"item | commandDisable:childCommand\">\r\n <ng-container *ngIf=\"!childCommand.htmlTemplate\">\r\n <mat-icon [fontSet]=\"command.fontSet\" class=\"c-icon\">{{childCommand | commandIcon:item}}\r\n </mat-icon>\r\n <span> {{childCommand | commandTitle:item}}</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"childCommand.htmlTemplate\">\r\n <div [innerHTML]=\"childCommand.htmlTemplate(item)\"></div>\r\n </ng-container>\r\n </button>\r\n </span>\r\n </mat-menu>\r\n </ng-template>\r\n </ng-container>\r\n</ng-container>\r\n",
10
+ template: "<ng-container *ngIf=\"item | commandFilter:commands | async; $implicit as filteredCommands\">\r\n <ng-container *ngFor=\"let command of filteredCommands\">\r\n <ng-container *ngIf=\"command?.click; else elseChildren\">\r\n <button (click)=\"command.click(item)\" [matTooltip]=\"command | commandTitle:item\" aria-hidden=\"true\"\r\n [disabled]=\"item | commandDisable:command\" mat-icon-button>\r\n <mat-icon class=\"c-icon\" [fontSet]=\"command.fontSet\">{{command | commandIcon:item}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-template #elseChildren>\r\n <button [matMenuTriggerFor]=\"menu\" aria-hidden=\"true\" mat-icon-button>\r\n <mat-icon *ngIf=\"command?.icon\" class=\"c-icon\" [fontSet]=\"command.fontSet\">{{command | commandIcon:item}}\r\n </mat-icon>\r\n <mat-icon *ngIf=\"!command?.icon\" class=\"c-icon\">more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <span>\r\n <button *ngFor=\"let childCommand of command.children\" mat-menu-item (click)=\"childCommand.click(item)\"\r\n [disabled]=\"item | commandDisable:childCommand\">\r\n <ng-container *ngIf=\"!childCommand.htmlTemplate\">\r\n <mat-icon [fontSet]=\"command.fontSet\" class=\"c-icon\">{{childCommand | commandIcon:item}}\r\n </mat-icon>\r\n <span> {{childCommand | commandTitle:item}}</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"childCommand.htmlTemplate\">\r\n <div [innerHTML]=\"childCommand.htmlTemplate(item)\"></div>\r\n </ng-container>\r\n </button>\r\n </span>\r\n </mat-menu>\r\n </ng-template>\r\n </ng-container>\r\n</ng-container>\r\n",
11
11
  changeDetection: ChangeDetectionStrategy.OnPush,
12
12
  styles: [":host{align-items:center;display:flex}mat-icon.c-icon{color:rgba(0,0,0,.54)!important}"]
13
13
  },] }
@@ -17,4 +17,4 @@ SdDesktopCommand.propDecorators = {
17
17
  item: [{ type: Input }],
18
18
  commands: [{ type: Input }]
19
19
  };
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVza3RvcC1jb21tYW5kLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvZ3JpZC1tYXRlcmlhbC8iLCJzb3VyY2VzIjpbInNyYy9saWIvY29tcG9uZW50cy9kZXNrdG9wLWNvbW1hbmQvZGVza3RvcC1jb21tYW5kLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVMxRSxNQUFNLE9BQU8sZ0JBQWdCO0lBRzNCO1FBRFMsYUFBUSxHQUE0QixFQUFFLENBQUM7SUFFaEQsQ0FBQzs7O1lBVkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLHN3REFBK0M7Z0JBRS9DLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOzthQUNoRDs7OzttQkFFRSxLQUFLO3VCQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZEdyaWRNYXRlcmlhbENvbW1hbmQgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1jb21tYW5kLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtZGVza3RvcC1jb21tYW5kJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGVza3RvcC1jb21tYW5kLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kZXNrdG9wLWNvbW1hbmQuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2REZXNrdG9wQ29tbWFuZCB7XHJcbiAgQElucHV0KCkgaXRlbTogYW55O1xyXG4gIEBJbnB1dCgpIGNvbW1hbmRzOiBTZEdyaWRNYXRlcmlhbENvbW1hbmRbXSA9IFtdO1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gIH1cclxufVxyXG4iXX0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVza3RvcC1jb21tYW5kLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvZ3JpZC1tYXRlcmlhbC8iLCJzb3VyY2VzIjpbInNyYy9saWIvY29tcG9uZW50cy9kZXNrdG9wLWNvbW1hbmQvZGVza3RvcC1jb21tYW5kLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVMxRSxNQUFNLE9BQU8sZ0JBQWdCO0lBRzNCO1FBRFMsYUFBUSxHQUE0QixFQUFFLENBQUM7SUFFaEQsQ0FBQzs7O1lBVkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLGd3REFBK0M7Z0JBRS9DLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOzthQUNoRDs7OzttQkFFRSxLQUFLO3VCQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZEdyaWRNYXRlcmlhbENvbW1hbmQgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1jb21tYW5kLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtZGVza3RvcC1jb21tYW5kJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGVza3RvcC1jb21tYW5kLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kZXNrdG9wLWNvbW1hbmQuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2REZXNrdG9wQ29tbWFuZCB7XHJcbiAgQElucHV0KCkgaXRlbTogYW55O1xyXG4gIEBJbnB1dCgpIGNvbW1hbmRzOiBTZEdyaWRNYXRlcmlhbENvbW1hbmRbXSA9IFtdO1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gIH1cclxufVxyXG4iXX0=