@c8y/ngx-components 1021.13.3 → 1021.21.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 (384) hide show
  1. package/alarms/alarms-list.component.d.ts +2 -17
  2. package/alarms/alarms-list.component.d.ts.map +1 -1
  3. package/alarms/alarms-view.service.d.ts +1 -0
  4. package/alarms/alarms-view.service.d.ts.map +1 -1
  5. package/alarms/alarms.model.d.ts +30 -0
  6. package/alarms/alarms.model.d.ts.map +1 -1
  7. package/context-dashboard/context-dashboard.model.d.ts +1 -0
  8. package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
  9. package/context-dashboard/context-dashboard.service.d.ts +7 -5
  10. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  11. package/context-dashboard/dashboard-detail.component.d.ts +4 -7
  12. package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
  13. package/context-dashboard/dashboard-detail.service.d.ts +4 -4
  14. package/context-dashboard/dashboard-detail.service.d.ts.map +1 -1
  15. package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts +2 -2
  16. package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts.map +1 -1
  17. package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts +19 -6
  18. package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts.map +1 -1
  19. package/core/action-bar/action-bar-item.component.d.ts +1 -1
  20. package/core/action-bar/action-bar-item.component.d.ts.map +1 -1
  21. package/core/action-bar/action-bar.module.d.ts +6 -6
  22. package/core/action-bar/action-bar.module.d.ts.map +1 -1
  23. package/core/bootstrap/bootstrap.component.d.ts +3 -1
  24. package/core/bootstrap/bootstrap.component.d.ts.map +1 -1
  25. package/core/common/aggregation/aggregation.model.d.ts +39 -0
  26. package/core/common/aggregation/aggregation.model.d.ts.map +1 -0
  27. package/core/common/aggregation/aggregation.service.d.ts +17 -0
  28. package/core/common/aggregation/aggregation.service.d.ts.map +1 -0
  29. package/core/common/index.d.ts +4 -0
  30. package/core/common/index.d.ts.map +1 -1
  31. package/core/common/inter-app.service.d.ts +48 -0
  32. package/core/common/inter-app.service.d.ts.map +1 -0
  33. package/core/common/interval-based-reload.abstract.d.ts +120 -0
  34. package/core/common/interval-based-reload.abstract.d.ts.map +1 -0
  35. package/core/dashboard/dashboard.module.d.ts +24 -18
  36. package/core/dashboard/dashboard.module.d.ts.map +1 -1
  37. package/core/dashboard/index.d.ts +3 -0
  38. package/core/dashboard/index.d.ts.map +1 -1
  39. package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts +31 -0
  40. package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts.map +1 -0
  41. package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts +17 -0
  42. package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts.map +1 -0
  43. package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts +4 -0
  44. package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts.map +1 -0
  45. package/core/dashboard/widget-auto-refresh-context/index.d.ts +8 -0
  46. package/core/dashboard/widget-auto-refresh-context/index.d.ts.map +1 -0
  47. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts +7 -0
  48. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts.map +1 -0
  49. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts +29 -0
  50. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts.map +1 -0
  51. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts +15 -0
  52. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts.map +1 -0
  53. package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts +169 -0
  54. package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts.map +1 -0
  55. package/core/dashboard/widgets-dashboard.component.d.ts +6 -3
  56. package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
  57. package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts +2 -2
  58. package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts.map +1 -1
  59. package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts +1 -1
  60. package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts.map +1 -1
  61. package/core/dashboard/wiget-time-context/widget-time-context-query.service.d.ts.map +1 -1
  62. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +11 -8
  63. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
  64. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts +6 -12
  65. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts.map +1 -1
  66. package/core/header/header.module.d.ts +18 -18
  67. package/core/header/header.module.d.ts.map +1 -1
  68. package/core/header/title/title.component.d.ts +1 -1
  69. package/core/header/title/title.component.d.ts.map +1 -1
  70. package/core/i18n/cached-locale-dictionary.service.d.ts +5 -1
  71. package/core/i18n/cached-locale-dictionary.service.d.ts.map +1 -1
  72. package/core/i18n/i18n.module.d.ts +0 -4
  73. package/core/i18n/i18n.module.d.ts.map +1 -1
  74. package/core/i18n/index.d.ts +2 -1
  75. package/core/i18n/index.d.ts.map +1 -1
  76. package/core/i18n/translation-loader.service.d.ts +50 -0
  77. package/core/i18n/translation-loader.service.d.ts.map +1 -0
  78. package/core/i18n/translation-utils.d.ts +14 -0
  79. package/core/i18n/translation-utils.d.ts.map +1 -0
  80. package/core/plugins/plugins-resolve.service.d.ts +7 -10
  81. package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
  82. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts +2 -1
  83. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts.map +1 -1
  84. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +11 -2
  85. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
  86. package/datapoint-selector/datapoint-selection.model.d.ts +6 -0
  87. package/datapoint-selector/datapoint-selection.model.d.ts.map +1 -1
  88. package/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.d.ts.map +1 -0
  89. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts +117 -0
  90. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -0
  91. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts +90 -0
  92. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts.map +1 -0
  93. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts +160 -0
  94. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts.map +1 -0
  95. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts +89 -0
  96. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts.map +1 -0
  97. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts +11 -0
  98. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts.map +1 -0
  99. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts +27 -0
  100. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts.map +1 -0
  101. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts +12 -0
  102. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts.map +1 -0
  103. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts +22 -0
  104. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts.map +1 -0
  105. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts +3 -0
  106. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts.map +1 -0
  107. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts +9 -0
  108. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts.map +1 -0
  109. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts +56 -0
  110. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts.map +1 -0
  111. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts +21 -0
  112. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts.map +1 -0
  113. package/datapoints-export-selector/datapoints-export-selector.component.d.ts +14 -0
  114. package/datapoints-export-selector/datapoints-export-selector.component.d.ts.map +1 -0
  115. package/datapoints-export-selector/datapoints-export-selector.model.d.ts +232 -0
  116. package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -0
  117. package/datapoints-export-selector/index.d.ts +15 -0
  118. package/datapoints-export-selector/index.d.ts.map +1 -0
  119. package/device-list/device-list.module.d.ts +4 -2
  120. package/device-list/device-list.module.d.ts.map +1 -1
  121. package/esm2022/alarms/alarms-list.component.mjs +5 -16
  122. package/esm2022/alarms/alarms-view.service.mjs +2 -1
  123. package/esm2022/alarms/alarms.model.mjs +1 -1
  124. package/esm2022/context-dashboard/context-dashboard.component.mjs +4 -4
  125. package/esm2022/context-dashboard/context-dashboard.model.mjs +1 -1
  126. package/esm2022/context-dashboard/context-dashboard.service.mjs +47 -21
  127. package/esm2022/context-dashboard/dashboard-detail.component.mjs +8 -16
  128. package/esm2022/context-dashboard/dashboard-detail.service.mjs +13 -6
  129. package/esm2022/context-dashboard/dashboard-settings/dashboard-general-settings.component.mjs +3 -3
  130. package/esm2022/context-dashboard/dashboard-settings/typed-dashboard-settings.component.mjs +32 -11
  131. package/esm2022/core/action-bar/action-bar-item.component.mjs +3 -3
  132. package/esm2022/core/action-bar/action-bar.module.mjs +16 -5
  133. package/esm2022/core/bootstrap/bootstrap.component.mjs +21 -16
  134. package/esm2022/core/common/aggregation/aggregation.model.mjs +46 -0
  135. package/esm2022/core/common/aggregation/aggregation.service.mjs +34 -0
  136. package/esm2022/core/common/humanize-app-name.model.mjs +2 -2
  137. package/esm2022/core/common/humanize-app-name.pipe.mjs +2 -2
  138. package/esm2022/core/common/index.mjs +5 -1
  139. package/esm2022/core/common/inter-app.service.mjs +76 -0
  140. package/esm2022/core/common/interval-based-reload.abstract.mjs +110 -0
  141. package/esm2022/core/countdown-interval/countdown-interval.component.mjs +3 -3
  142. package/esm2022/core/dashboard/dashboard-child.component.mjs +6 -5
  143. package/esm2022/core/dashboard/dashboard.module.mjs +18 -1
  144. package/esm2022/core/dashboard/index.mjs +4 -1
  145. package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.mjs +101 -0
  146. package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.mjs +50 -0
  147. package/esm2022/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.mjs +7 -0
  148. package/esm2022/core/dashboard/widget-auto-refresh-context/index.mjs +8 -0
  149. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.mjs +18 -0
  150. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.mjs +127 -0
  151. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.mjs +5 -0
  152. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.mjs +233 -0
  153. package/esm2022/core/dashboard/widgets-dashboard.component.mjs +35 -30
  154. package/esm2022/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.mjs +4 -4
  155. package/esm2022/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.mjs +2 -2
  156. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.mjs +5 -5
  157. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-query.service.mjs +7 -4
  158. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +37 -37
  159. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.model.mjs +1 -28
  160. package/esm2022/core/date-time-picker/date-time-picker.component.mjs +3 -3
  161. package/esm2022/core/header/header.module.mjs +7 -5
  162. package/esm2022/core/header/title/title.component.mjs +3 -3
  163. package/esm2022/core/i18n/cached-locale-dictionary.service.mjs +1 -1
  164. package/esm2022/core/i18n/i18n.module.mjs +7 -14
  165. package/esm2022/core/i18n/index.mjs +3 -2
  166. package/esm2022/core/i18n/translate.parser.mjs +2 -2
  167. package/esm2022/core/i18n/translation-loader.service.mjs +132 -0
  168. package/esm2022/core/i18n/translation-utils.mjs +24 -0
  169. package/esm2022/core/plugins/plugins-resolve.service.mjs +12 -37
  170. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.mjs +13 -6
  171. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +22 -5
  172. package/esm2022/datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.mjs +3 -3
  173. package/esm2022/datapoint-selector/datapoint-selection.model.mjs +1 -1
  174. package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
  175. package/esm2022/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.mjs +5 -0
  176. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.mjs +407 -0
  177. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.mjs +207 -0
  178. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.mjs +467 -0
  179. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.mjs +187 -0
  180. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.mjs +27 -0
  181. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.mjs +41 -0
  182. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.mjs +23 -0
  183. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.mjs +42 -0
  184. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.mjs +120 -0
  185. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.mjs +282 -0
  186. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.mjs +76 -0
  187. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.mjs +46 -0
  188. package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +42 -0
  189. package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +43 -0
  190. package/esm2022/datapoints-export-selector/index.mjs +15 -0
  191. package/esm2022/device-list/add-smart-group.component.mjs +4 -3
  192. package/esm2022/device-list/device-list.module.mjs +22 -4
  193. package/esm2022/map/cluster-map.component.mjs +41 -13
  194. package/esm2022/map/map-status.component.mjs +6 -5
  195. package/esm2022/map/map.component.mjs +9 -5
  196. package/esm2022/map/map.model.mjs +1 -1
  197. package/esm2022/translation-editor/c8y-ngx-components-translation-editor.mjs +5 -0
  198. package/esm2022/translation-editor/data/c8y-ngx-components-translation-editor-data.mjs +5 -0
  199. package/esm2022/translation-editor/data/index.mjs +2 -0
  200. package/esm2022/translation-editor/data/translation-store.service.mjs +175 -0
  201. package/esm2022/translation-editor/index.mjs +10 -0
  202. package/esm2022/translation-editor/lazy/add-translation-modal/add-translation-modal.component.mjs +70 -0
  203. package/esm2022/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.mjs +5 -0
  204. package/esm2022/translation-editor/lazy/index.mjs +2 -0
  205. package/esm2022/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.mjs +53 -0
  206. package/esm2022/translation-editor/lazy/translation-editor/translation-editor.component.mjs +124 -0
  207. package/esm2022/translation-editor/translation-editor-naviagtor-factory.service.mjs +31 -0
  208. package/esm2022/widgets/cockpit/index.mjs +4 -2
  209. package/esm2022/widgets/cockpit-exports/index.mjs +8 -1
  210. package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +6 -2
  211. package/esm2022/widgets/definitions/alarms/all-critical-alarms/index.mjs +6 -2
  212. package/esm2022/widgets/definitions/alarms/recent-alarms/index.mjs +6 -2
  213. package/esm2022/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +5 -0
  214. package/esm2022/widgets/definitions/datapoints-table/index.mjs +34 -0
  215. package/esm2022/widgets/definitions/index.mjs +2 -1
  216. package/esm2022/widgets/definitions/map/index.mjs +4 -2
  217. package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +29 -15
  218. package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +57 -25
  219. package/esm2022/widgets/implementations/alarms/alarm-list-widget.model.mjs +2 -1
  220. package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +19 -21
  221. package/esm2022/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +5 -0
  222. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +383 -0
  223. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.mjs +124 -0
  224. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.mjs +191 -0
  225. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.mjs +36 -0
  226. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.mjs +45 -0
  227. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +116 -0
  228. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.mjs +116 -0
  229. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.mjs +43 -0
  230. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.mjs +282 -0
  231. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.mjs +430 -0
  232. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.mjs +75 -0
  233. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-widget.model.mjs +76 -0
  234. package/esm2022/widgets/implementations/datapoints-table/datapoints-table.service.mjs +52 -0
  235. package/esm2022/widgets/implementations/datapoints-table/date-range-picker.component.mjs +68 -0
  236. package/esm2022/widgets/implementations/datapoints-table/index.mjs +10 -0
  237. package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +19 -11
  238. package/esm2022/widgets/implementations/map/map-widget.component.mjs +20 -2
  239. package/esm2022/widgets/implementations/map/map-widget.model.mjs +1 -1
  240. package/fesm2022/c8y-ngx-components-alarms.mjs +5 -15
  241. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  242. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +135 -91
  243. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  244. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +37 -13
  245. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  246. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +1928 -0
  247. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -0
  248. package/fesm2022/c8y-ngx-components-device-list.mjs +24 -5
  249. package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
  250. package/fesm2022/c8y-ngx-components-map.mjs +52 -19
  251. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  252. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +181 -0
  253. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -0
  254. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +236 -0
  255. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -0
  256. package/fesm2022/c8y-ngx-components-translation-editor.mjs +46 -0
  257. package/fesm2022/c8y-ngx-components-translation-editor.mjs.map +1 -0
  258. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs +7 -0
  259. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs.map +1 -1
  260. package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs +3 -1
  261. package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
  262. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +5 -1
  263. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
  264. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +5 -1
  265. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
  266. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +5 -1
  267. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
  268. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +41 -0
  269. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -0
  270. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs +3 -1
  271. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
  272. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +1 -0
  273. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
  274. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +101 -58
  275. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  276. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +1967 -0
  277. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -0
  278. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +37 -11
  279. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  280. package/fesm2022/c8y-ngx-components.mjs +5080 -4272
  281. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  282. package/locales/de.po +289 -18
  283. package/locales/en.po +12 -0
  284. package/locales/en_US.po +3 -0
  285. package/locales/es.po +253 -18
  286. package/locales/fr.po +253 -18
  287. package/locales/ja_JP.po +282 -18
  288. package/locales/locales.pot +257 -18
  289. package/locales/nl.po +253 -18
  290. package/locales/pl.po +253 -18
  291. package/locales/pt_BR.po +253 -18
  292. package/map/cluster-map.component.d.ts +8 -3
  293. package/map/cluster-map.component.d.ts.map +1 -1
  294. package/map/map-status.component.d.ts +0 -3
  295. package/map/map-status.component.d.ts.map +1 -1
  296. package/map/map.component.d.ts +4 -2
  297. package/map/map.component.d.ts.map +1 -1
  298. package/map/map.model.d.ts +2 -1
  299. package/map/map.model.d.ts.map +1 -1
  300. package/package.json +1 -1
  301. package/translation-editor/c8y-ngx-components-translation-editor.d.ts.map +1 -0
  302. package/translation-editor/data/c8y-ngx-components-translation-editor-data.d.ts.map +1 -0
  303. package/translation-editor/data/index.d.ts +2 -0
  304. package/translation-editor/data/index.d.ts.map +1 -0
  305. package/translation-editor/data/translation-store.service.d.ts +61 -0
  306. package/translation-editor/data/translation-store.service.d.ts.map +1 -0
  307. package/translation-editor/index.d.ts +2 -0
  308. package/translation-editor/index.d.ts.map +1 -0
  309. package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts +30 -0
  310. package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts.map +1 -0
  311. package/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.d.ts.map +1 -0
  312. package/translation-editor/lazy/index.d.ts +2 -0
  313. package/translation-editor/lazy/index.d.ts.map +1 -0
  314. package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts +22 -0
  315. package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts.map +1 -0
  316. package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts +34 -0
  317. package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts.map +1 -0
  318. package/translation-editor/translation-editor-naviagtor-factory.service.d.ts +11 -0
  319. package/translation-editor/translation-editor-naviagtor-factory.service.d.ts.map +1 -0
  320. package/widgets/cockpit/index.d.ts +13 -0
  321. package/widgets/cockpit/index.d.ts.map +1 -1
  322. package/widgets/cockpit-exports/index.d.ts +6 -0
  323. package/widgets/cockpit-exports/index.d.ts.map +1 -1
  324. package/widgets/definitions/alarms/alarm-list/index.d.ts +2 -0
  325. package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
  326. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts +2 -0
  327. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
  328. package/widgets/definitions/alarms/recent-alarms/index.d.ts +2 -0
  329. package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
  330. package/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.d.ts.map +1 -0
  331. package/widgets/definitions/datapoints-table/index.d.ts +14 -0
  332. package/widgets/definitions/datapoints-table/index.d.ts.map +1 -0
  333. package/widgets/definitions/index.d.ts +1 -0
  334. package/widgets/definitions/index.d.ts.map +1 -1
  335. package/widgets/definitions/map/index.d.ts +2 -1
  336. package/widgets/definitions/map/index.d.ts.map +1 -1
  337. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +5 -9
  338. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
  339. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +17 -10
  340. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
  341. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts +5 -1
  342. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
  343. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +5 -11
  344. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
  345. package/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.d.ts.map +1 -0
  346. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts +129 -0
  347. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -0
  348. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts +56 -0
  349. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts.map +1 -0
  350. package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts +88 -0
  351. package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts.map +1 -0
  352. package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts +19 -0
  353. package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts.map +1 -0
  354. package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts +26 -0
  355. package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts.map +1 -0
  356. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +63 -0
  357. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -0
  358. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts +38 -0
  359. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts.map +1 -0
  360. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts +13 -0
  361. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts.map +1 -0
  362. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts +123 -0
  363. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -0
  364. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts +196 -0
  365. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts.map +1 -0
  366. package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts +41 -0
  367. package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts.map +1 -0
  368. package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts +175 -0
  369. package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts.map +1 -0
  370. package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts +12 -0
  371. package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts.map +1 -0
  372. package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts +34 -0
  373. package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts.map +1 -0
  374. package/widgets/implementations/datapoints-table/index.d.ts +10 -0
  375. package/widgets/implementations/datapoints-table/index.d.ts.map +1 -0
  376. package/widgets/implementations/map/map-widget-config.component.d.ts +4 -4
  377. package/widgets/implementations/map/map-widget-config.component.d.ts.map +1 -1
  378. package/widgets/implementations/map/map-widget.component.d.ts +8 -3
  379. package/widgets/implementations/map/map-widget.component.d.ts.map +1 -1
  380. package/widgets/implementations/map/map-widget.model.d.ts +4 -3
  381. package/widgets/implementations/map/map-widget.model.d.ts.map +1 -1
  382. package/core/i18n/translate.loader.d.ts +0 -31
  383. package/core/i18n/translate.loader.d.ts.map +0 -1
  384. package/esm2022/core/i18n/translate.loader.mjs +0 -71
@@ -0,0 +1,207 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import JSZip from 'jszip';
3
+ import { FILE_COMPRESSION_TYPES_VALUES, MEASUREMENTS_PREVIEW_ITEMS_LIMIT, SERIES_DATA_MERGED_FILE_NAME } from '../../datapoints-export-selector.model';
4
+ import { FILE_GENERATORS } from './datapoints-export-selector-file-exporter.component';
5
+ import { UtilsService } from './utils.service';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "./utils.service";
8
+ export class DataProcessingService {
9
+ constructor(fileGenerators, utils) {
10
+ this.fileGenerators = fileGenerators;
11
+ this.utils = utils;
12
+ this.mergeMapping = {};
13
+ this.setGenerators(this.fileGenerators);
14
+ this.fileTypesConfigs = this.fileGenerators.reduce((acc, g) => {
15
+ acc[g.getType()] = {
16
+ extension: g.getFileExtension(),
17
+ mimeType: g.getMimeType(),
18
+ acceptType: g.getAcceptType()
19
+ };
20
+ return acc;
21
+ }, {});
22
+ }
23
+ setGenerators(fileGenerators) {
24
+ fileGenerators.forEach(g => {
25
+ this.mergeMapping[g.getType()] = g.generateMerged;
26
+ });
27
+ }
28
+ /**
29
+ * Transforms the data into a structured format for an export.
30
+ *
31
+ * @param dataToExport - An array of processed measurement data combined with the respective properties of the datapoint.
32
+ * @returns Provides a two-dimensional array of ExportData,
33
+ * where each inner array contains ExportData entries representing the transformed measurements and metadata of each datapoint.
34
+ */
35
+ transformToExportFileStructure(dataToExport) {
36
+ const exportData = [];
37
+ for (const data of dataToExport) {
38
+ const rowsData = this.processDataToExport(data);
39
+ exportData.push(rowsData);
40
+ }
41
+ return exportData;
42
+ }
43
+ /**
44
+ * Transforms the input datapoints with values into a structured format for a preview.
45
+ *
46
+ * @param dataToExport - An array of processed measurement data combined with the respective properties of the datapoint.
47
+ * @returns Provides an array of up to 5 ExportData elements (no more is needed for a preview) or an empty array,
48
+ */
49
+ transformToExportFileStructureForPreview(dataToExport) {
50
+ const data = dataToExport.find(data => {
51
+ return data !== null && data.timeValueMap && data.unit;
52
+ });
53
+ if (!data) {
54
+ return [];
55
+ }
56
+ const exportData = this.processDataToExport(data);
57
+ return exportData.slice(0, MEASUREMENTS_PREVIEW_ITEMS_LIMIT);
58
+ }
59
+ /**
60
+ * Processes a single dataToExport and transforms it into an array of ExportData.
61
+ *
62
+ * Used further for creating series data based export and also for measurements and series data based preview.
63
+ * Series data provides min and max values for each timestamp.
64
+ *
65
+ * @param dataToExport - A processed measurement or series data combined with the respective properties of the datapoint to be precessed
66
+ * @returns An array of ExportData representing the processed datapoint,
67
+ * that can be used as a row data in the exported files or for preview.
68
+ */
69
+ processDataToExport(dataToExport) {
70
+ const rowsData = [];
71
+ // When measurements or series data is not available, add an empty header row with only device_name, source and fragment_series.
72
+ // This data is needed later to be used to create the file name and merged file header string.
73
+ const responseDoesNotContainData = !dataToExport.timeValueMap?.size && !dataToExport.unit;
74
+ if (responseDoesNotContainData) {
75
+ rowsData.push({
76
+ time: null,
77
+ source: dataToExport.source,
78
+ device_name: dataToExport.deviceName,
79
+ fragment_series: `${dataToExport.valueFragmentType}.${dataToExport.valueFragmentSeries}`,
80
+ value: null,
81
+ value_min: null,
82
+ value_max: null,
83
+ unit: null
84
+ });
85
+ return rowsData;
86
+ }
87
+ for (const [time, value] of Object.entries(dataToExport.timeValueMap)) {
88
+ // Measurements data contains only one value as a number, series data contains object with min and max values.
89
+ const isMeasurementData = typeof value === 'number';
90
+ if (isMeasurementData) {
91
+ rowsData.push(this.createExportData(dataToExport, time, isMeasurementData, value));
92
+ }
93
+ else {
94
+ rowsData.push(this.createExportData(dataToExport, time, isMeasurementData, value.min, value.max));
95
+ }
96
+ }
97
+ return rowsData;
98
+ }
99
+ createExportData(dataToExport, time, isMeasurement, value, valueMax) {
100
+ const commonExportData = {
101
+ time: new Date(time).toISOString(),
102
+ source: dataToExport.source,
103
+ device_name: dataToExport.deviceName,
104
+ fragment_series: `${dataToExport.valueFragmentType}.${dataToExport.valueFragmentSeries}`,
105
+ unit: dataToExport.unit
106
+ };
107
+ return isMeasurement
108
+ ? { ...commonExportData, value }
109
+ : { ...commonExportData, value_min: value, value_max: valueMax };
110
+ }
111
+ /**
112
+ * Exports the given data to merged CSV or Excel files.
113
+ *
114
+ * @param exportData - An array containing ExportData objects that will be used as parts of the merged file.
115
+ * @param fileType - Indicates the type of the file to be exported.
116
+ * @param mergedExportDetails - An object containing the date range from which the export was created and aggregation type.
117
+ * @returns An objects containing file name and its respective content as Blob.
118
+ *
119
+ * Example of exported merged file structure:
120
+ * date from date to
121
+ * 2024-04-15T12:14:00.000Z 2024-07-16T14:14:28+02:00
122
+ * time G6Fit -> c8y_Acceleration.accelerationX [G] G6Fit -> c8y_Acceleration.accelerationY [G]
123
+ * 2024-05-13T13:45:10.500+02:00 0.0109026359624273 0.789461628278069
124
+ *
125
+ * Example of exported file name format:
126
+ * 04dec231240-06dec232350.xlsx
127
+ */
128
+ async exportSeriesDataToMergedFiles(exportData, fileType, mergedExportDetails) {
129
+ const fileTypeConfig = this.fileTypesConfigs[fileType];
130
+ mergedExportDetails.dateFrom = new Date(mergedExportDetails.dateFrom).toISOString();
131
+ mergedExportDetails.dateTo = new Date(mergedExportDetails.dateTo).toISOString();
132
+ const mergedFileContent = this.mergeMapping[fileType](exportData, mergedExportDetails);
133
+ const mergedFileNameDateRange = this.utils.getFormattedDateRange(mergedExportDetails.dateFrom, mergedExportDetails.dateTo);
134
+ return {
135
+ fileName: `${mergedFileNameDateRange}.${fileTypeConfig.extension}`,
136
+ fileData: new Blob([await mergedFileContent], { type: fileTypeConfig.mimeType })
137
+ };
138
+ }
139
+ /**
140
+ * Zips all created files.
141
+ *
142
+ * @param files - An array of objects containing file names and their respective content as Blobs.
143
+ * @returns A Promise that resolves to a Blob representing the generated zip file.
144
+ */
145
+ async zipFiles(files) {
146
+ const zip = new JSZip();
147
+ files.forEach(file => {
148
+ zip.file(file.fileName, file.fileData);
149
+ });
150
+ return await this.generateZipBlob(zip, FILE_COMPRESSION_TYPES_VALUES.deflate, 9);
151
+ }
152
+ /**
153
+ * Exports the given data to CSV or Excel files.
154
+ *
155
+ * @param params - An object containing all the necessary parameters for the export and zip process.
156
+ * @returns A Promise that resolves to a Blob representing the exported file.
157
+ */
158
+ async exportSeriesData(params) {
159
+ const { flattenedAndSortedExportData, fileType, mergedExportDetails } = params;
160
+ const exportedMergedFile = await this.exportSeriesDataToMergedFiles(flattenedAndSortedExportData, fileType, mergedExportDetails);
161
+ const blob = new Blob([exportedMergedFile.fileData], { type: fileType });
162
+ Object.defineProperty(blob, SERIES_DATA_MERGED_FILE_NAME, {
163
+ value: exportedMergedFile.fileName,
164
+ writable: false,
165
+ enumerable: false,
166
+ configurable: true
167
+ });
168
+ return blob;
169
+ }
170
+ createFileName(source, fragmentSeries, fileExtension) {
171
+ return `${source}_${fragmentSeries}.${fileExtension}`;
172
+ }
173
+ /**
174
+ * Generates a zip blob using the provided zip object.
175
+ *
176
+ * @param zip - The zip object used for generating the blob.
177
+ * @param compressionType - The compression type for the zip file. 'STORE' is no compression, 'DEFLATE' is compression.
178
+ * @param compressionLevel - The compression level for the zip file.
179
+ * Level 1 is quickest, 9 is best compressed.
180
+ * @returns A Promise that resolves to a Blob containing the generated zip file.
181
+ */
182
+ async generateZipBlob(zip, compressionType = FILE_COMPRESSION_TYPES_VALUES.store, compressionLevel = 1) {
183
+ const blob = 'blob';
184
+ if (compressionType === FILE_COMPRESSION_TYPES_VALUES.store) {
185
+ return await zip.generateAsync({ type: blob });
186
+ }
187
+ return await zip.generateAsync({
188
+ type: blob,
189
+ compression: compressionType,
190
+ compressionOptions: {
191
+ level: compressionLevel
192
+ }
193
+ });
194
+ }
195
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DataProcessingService, deps: [{ token: FILE_GENERATORS }, { token: i1.UtilsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
196
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DataProcessingService, providedIn: 'root' }); }
197
+ }
198
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DataProcessingService, decorators: [{
199
+ type: Injectable,
200
+ args: [{
201
+ providedIn: 'root'
202
+ }]
203
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
204
+ type: Inject,
205
+ args: [FILE_GENERATORS]
206
+ }] }, { type: i1.UtilsService }] });
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1wcm9jZXNzaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1tb2RhbC9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyL2RhdGEtcHJvY2Vzc2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBSUwsNkJBQTZCLEVBRzdCLGdDQUFnQyxFQUVoQyw0QkFBNEIsRUFFN0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFLL0MsTUFBTSxPQUFPLHFCQUFxQjtJQVVoQyxZQUNtQyxjQUErQixFQUN4RCxLQUFtQjtRQURNLG1CQUFjLEdBQWQsY0FBYyxDQUFpQjtRQUN4RCxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBWDdCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBYWhCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXhDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1RCxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUc7Z0JBQ2pCLFNBQVMsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQy9CLFFBQVEsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFO2dCQUN6QixVQUFVLEVBQUUsQ0FB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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgSlNaaXAgZnJvbSAnanN6aXAnO1xuaW1wb3J0IHtcbiAgRGF0YVRvRXhwb3J0LFxuICBFeHBvcnREYXRhLFxuICBFeHBvcnRlZEZpbGUsXG4gIEZJTEVfQ09NUFJFU1NJT05fVFlQRVNfVkFMVUVTLFxuICBGaWxlQ29tcHJlc3Npb25UeXBlcyxcbiAgRmlsZUdlbmVyYXRvcixcbiAgTUVBU1VSRU1FTlRTX1BSRVZJRVdfSVRFTVNfTElNSVQsXG4gIE1lcmdlZEV4cG9ydERldGFpbHMsXG4gIFNFUklFU19EQVRBX01FUkdFRF9GSUxFX05BTUUsXG4gIFNlcmllc0V4cG9ydFBhcmFtc1xufSBmcm9tICcuLi8uLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci5tb2RlbCc7XG5pbXBvcnQgeyBGSUxFX0dFTkVSQVRPUlMgfSBmcm9tICcuL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWZpbGUtZXhwb3J0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFV0aWxzU2VydmljZSB9IGZyb20gJy4vdXRpbHMuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERhdGFQcm9jZXNzaW5nU2VydmljZSB7XG4gIG1lcmdlTWFwcGluZyA9IHt9O1xuICBmaWxlVHlwZXNDb25maWdzOiB7XG4gICAgW2tleTogc3RyaW5nXToge1xuICAgICAgZXh0ZW5zaW9uOiBzdHJpbmc7XG4gICAgICBtaW1lVHlwZTogc3RyaW5nO1xuICAgICAgYWNjZXB0VHlwZTogc3RyaW5nO1xuICAgIH07XG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChGSUxFX0dFTkVSQVRPUlMpIHByaXZhdGUgZmlsZUdlbmVyYXRvcnM6IEZpbGVHZW5lcmF0b3JbXSxcbiAgICBwcml2YXRlIHV0aWxzOiBVdGlsc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zZXRHZW5lcmF0b3JzKHRoaXMuZmlsZUdlbmVyYXRvcnMpO1xuXG4gICAgdGhpcy5maWxlVHlwZXNDb25maWdzID0gdGhpcy5maWxlR2VuZXJhdG9ycy5yZWR1Y2UoKGFjYywgZykgPT4ge1xuICAgICAgYWNjW2cuZ2V0VHlwZSgpXSA9IHtcbiAgICAgICAgZXh0ZW5zaW9uOiBnLmdldEZpbGVFeHRlbnNpb24oKSxcbiAgICAgICAgbWltZVR5cGU6IGcuZ2V0TWltZVR5cGUoKSxcbiAgICAgICAgYWNjZXB0VHlwZTogZy5nZXRBY2NlcHRUeXBlKClcbiAgICAgIH07XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHNldEdlbmVyYXRvcnMoZmlsZUdlbmVyYXRvcnM6IEZpbGVHZW5lcmF0b3JbXSkge1xuICAgIGZpbGVHZW5lcmF0b3JzLmZvckVhY2goZyA9PiB7XG4gICAgICB0aGlzLm1lcmdlTWFwcGluZ1tnLmdldFR5cGUoKV0gPSBnLmdlbmVyYXRlTWVyZ2VkO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybXMgdGhlIGRhdGEgaW50byBhIHN0cnVjdHVyZWQgZm9ybWF0IGZvciBhbiBleHBvcnQuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhVG9FeHBvcnQgLSBBbiBhcnJheSBvZiBwcm9jZXNzZWQgbWVhc3VyZW1lbnQgZGF0YSBjb21iaW5lZCB3aXRoIHRoZSByZXNwZWN0aXZlIHByb3BlcnRpZXMgb2YgdGhlIGRhdGFwb2ludC5cbiAgICogQHJldHVybnMgUHJvdmlkZXMgYSB0d28tZGltZW5zaW9uYWwgYXJyYXkgb2YgRXhwb3J0RGF0YSxcbiAgICogICAgICAgICAgd2hlcmUgZWFjaCBpbm5lciBhcnJheSBjb250YWlucyBFeHBvcnREYXRhIGVudHJpZXMgcmVwcmVzZW50aW5nIHRoZSB0cmFuc2Zvcm1lZCBtZWFzdXJlbWVudHMgYW5kIG1ldGFkYXRhIG9mIGVhY2ggZGF0YXBvaW50LlxuICAgKi9cbiAgdHJhbnNmb3JtVG9FeHBvcnRGaWxlU3RydWN0dXJlKGRhdGFUb0V4cG9ydDogRGF0YVRvRXhwb3J0W10pOiBFeHBvcnREYXRhW11bXSB7XG4gICAgY29uc3QgZXhwb3J0RGF0YTogRXhwb3J0RGF0YVtdW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBkYXRhVG9FeHBvcnQpIHtcbiAgICAgIGNvbnN0IHJvd3NEYXRhOiBFeHBvcnREYXRhW10gPSB0aGlzLnByb2Nlc3NEYXRhVG9FeHBvcnQoZGF0YSk7XG4gICAgICBleHBvcnREYXRhLnB1c2gocm93c0RhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZXhwb3J0RGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBkYXRhcG9pbnRzIHdpdGggdmFsdWVzIGludG8gYSBzdHJ1Y3R1cmVkIGZvcm1hdCBmb3IgYSBwcmV2aWV3LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YVRvRXhwb3J0IC0gQW4gYXJyYXkgb2YgcHJvY2Vzc2VkIG1lYXN1cmVtZW50IGRhdGEgY29tYmluZWQgd2l0aCB0aGUgcmVzcGVjdGl2ZSBwcm9wZXJ0aWVzIG9mIHRoZSBkYXRhcG9pbnQuXG4gICAqIEByZXR1cm5zIFByb3ZpZGVzIGFuIGFycmF5IG9mIHVwIHRvIDUgRXhwb3J0RGF0YSBlbGVtZW50cyAobm8gbW9yZSBpcyBuZWVkZWQgZm9yIGEgcHJldmlldykgb3IgYW4gZW1wdHkgYXJyYXksXG4gICAqL1xuICB0cmFuc2Zvcm1Ub0V4cG9ydEZpbGVTdHJ1Y3R1cmVGb3JQcmV2aWV3KGRhdGFUb0V4cG9ydDogRGF0YVRvRXhwb3J0W10pOiBFeHBvcnREYXRhW10ge1xuICAgIGNvbnN0IGRhdGEgPSBkYXRhVG9FeHBvcnQuZmluZChkYXRhID0+IHtcbiAgICAgIHJldHVybiBkYXRhICE9PSBudWxsICYmIGRhdGEudGltZVZhbHVlTWFwICYmIGRhdGEudW5pdDtcbiAgICB9KTtcblxuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cG9ydERhdGEgPSB0aGlzLnByb2Nlc3NEYXRhVG9FeHBvcnQoZGF0YSk7XG5cbiAgICByZXR1cm4gZXhwb3J0RGF0YS5zbGljZSgwLCBNRUFTVVJFTUVOVFNfUFJFVklFV19JVEVNU19MSU1JVCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2Vzc2VzIGEgc2luZ2xlIGRhdGFUb0V4cG9ydCBhbmQgdHJhbnNmb3JtcyBpdCBpbnRvIGFuIGFycmF5IG9mIEV4cG9ydERhdGEuXG4gICAqXG4gICAqIFVzZWQgZnVydGhlciBmb3IgY3JlYXRpbmcgc2VyaWVzIGRhdGEgYmFzZWQgZXhwb3J0IGFuZCBhbHNvIGZvciBtZWFzdXJlbWVudHMgYW5kIHNlcmllcyBkYXRhIGJhc2VkIHByZXZpZXcuXG4gICAqIFNlcmllcyBkYXRhIHByb3ZpZGVzIG1pbiBhbmQgbWF4IHZhbHVlcyBmb3IgZWFjaCB0aW1lc3RhbXAuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhVG9FeHBvcnQgLSBBIHByb2Nlc3NlZCBtZWFzdXJlbWVudCBvciBzZXJpZXMgZGF0YSBjb21iaW5lZCB3aXRoIHRoZSByZXNwZWN0aXZlIHByb3BlcnRpZXMgb2YgdGhlIGRhdGFwb2ludCB0byBiZSBwcmVjZXNzZWRcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgRXhwb3J0RGF0YSByZXByZXNlbnRpbmcgdGhlIHByb2Nlc3NlZCBkYXRhcG9pbnQsXG4gICAqICAgICAgICAgIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSByb3cgZGF0YSBpbiB0aGUgZXhwb3J0ZWQgZmlsZXMgb3IgZm9yIHByZXZpZXcuXG4gICAqL1xuICBwcm9jZXNzRGF0YVRvRXhwb3J0KGRhdGFUb0V4cG9ydDogRGF0YVRvRXhwb3J0KTogRXhwb3J0RGF0YVtdIHtcbiAgICBjb25zdCByb3dzRGF0YTogRXhwb3J0RGF0YVtdID0gW107XG5cbiAgICAvLyBXaGVuIG1lYXN1cmVtZW50cyBvciBzZXJpZXMgZGF0YSBpcyBub3QgYXZhaWxhYmxlLCBhZGQgYW4gZW1wdHkgaGVhZGVyIHJvdyB3aXRoIG9ubHkgZGV2aWNlX25hbWUsIHNvdXJjZSBhbmQgZnJhZ21lbnRfc2VyaWVzLlxuICAgIC8vIFRoaXMgZGF0YSBpcyBuZWVkZWQgbGF0ZXIgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIGZpbGUgbmFtZSBhbmQgbWVyZ2VkIGZpbGUgaGVhZGVyIHN0cmluZy5cbiAgICBjb25zdCByZXNwb25zZURvZXNOb3RDb250YWluRGF0YSA9ICFkYXRhVG9FeHBvcnQudGltZVZhbHVlTWFwPy5zaXplICYmICFkYXRhVG9FeHBvcnQudW5pdDtcbiAgICBpZiAocmVzcG9uc2VEb2VzTm90Q29udGFpbkRhdGEpIHtcbiAgICAgIHJvd3NEYXRhLnB1c2goe1xuICAgICAgICB0aW1lOiBudWxsLFxuICAgICAgICBzb3VyY2U6IGRhdGFUb0V4cG9ydC5zb3VyY2UsXG4gICAgICAgIGRldmljZV9uYW1lOiBkYXRhVG9FeHBvcnQuZGV2aWNlTmFtZSxcbiAgICAgICAgZnJhZ21lbnRfc2VyaWVzOiBgJHtkYXRhVG9FeHBvcnQudmFsdWVGcmFnbWVudFR5cGV9LiR7ZGF0YVRvRXhwb3J0LnZhbHVlRnJhZ21lbnRTZXJpZXN9YCxcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIHZhbHVlX21pbjogbnVsbCxcbiAgICAgICAgdmFsdWVfbWF4OiBudWxsLFxuICAgICAgICB1bml0OiBudWxsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByb3dzRGF0YTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFt0aW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YVRvRXhwb3J0LnRpbWVWYWx1ZU1hcCkpIHtcbiAgICAgIC8vIE1lYXN1cmVtZW50cyBkYXRhIGNvbnRhaW5zIG9ubHkgb25lIHZhbHVlIGFzIGEgbnVtYmVyLCBzZXJpZXMgZGF0YSBjb250YWlucyBvYmplY3Qgd2l0aCBtaW4gYW5kIG1heCB2YWx1ZXMuXG4gICAgICBjb25zdCBpc01lYXN1cmVtZW50RGF0YSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG4gICAgICBpZiAoaXNNZWFzdXJlbWVudERhdGEpIHtcbiAgICAgICAgcm93c0RhdGEucHVzaCh0aGlzLmNyZWF0ZUV4cG9ydERhdGEoZGF0YVRvRXhwb3J0LCB0aW1lLCBpc01lYXN1cmVtZW50RGF0YSwgdmFsdWUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvd3NEYXRhLnB1c2goXG4gICAgICAgICAgdGhpcy5jcmVhdGVFeHBvcnREYXRhKGRhdGFUb0V4cG9ydCwgdGltZSwgaXNNZWFzdXJlbWVudERhdGEsIHZhbHVlLm1pbiwgdmFsdWUubWF4KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm93c0RhdGE7XG4gIH1cblxuICBjcmVhdGVFeHBvcnREYXRhKFxuICAgIGRhdGFUb0V4cG9ydDogRGF0YVRvRXhwb3J0LFxuICAgIHRpbWU6IHN0cmluZyxcbiAgICBpc01lYXN1cmVtZW50OiBib29sZWFuLFxuICAgIHZhbHVlOiBudW1iZXIsXG4gICAgdmFsdWVNYXg/OiBudW1iZXJcbiAgKTogRXhwb3J0RGF0YSB7XG4gICAgY29uc3QgY29tbW9uRXhwb3J0RGF0YSA9IHtcbiAgICAgIHRpbWU6IG5ldyBEYXRlKHRpbWUpLnRvSVNPU3RyaW5nKCksXG4gICAgICBzb3VyY2U6IGRhdGFUb0V4cG9ydC5zb3VyY2UsXG4gICAgICBkZXZpY2VfbmFtZTogZGF0YVRvRXhwb3J0LmRldmljZU5hbWUsXG4gICAgICBmcmFnbWVudF9zZXJpZXM6IGAke2RhdGFUb0V4cG9ydC52YWx1ZUZyYWdtZW50VHlwZX0uJHtkYXRhVG9FeHBvcnQudmFsdWVGcmFnbWVudFNlcmllc31gLFxuICAgICAgdW5pdDogZGF0YVRvRXhwb3J0LnVuaXRcbiAgICB9O1xuXG4gICAgcmV0dXJuIGlzTWVhc3VyZW1lbnRcbiAgICAgID8geyAuLi5jb21tb25FeHBvcnREYXRhLCB2YWx1ZSB9XG4gICAgICA6IHsgLi4uY29tbW9uRXhwb3J0RGF0YSwgdmFsdWVfbWluOiB2YWx1ZSwgdmFsdWVfbWF4OiB2YWx1ZU1heCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgdGhlIGdpdmVuIGRhdGEgdG8gbWVyZ2VkIENTViBvciBFeGNlbCBmaWxlcy5cbiAgICpcbiAgICogQHBhcmFtIGV4cG9ydERhdGEgLSBBbiBhcnJheSBjb250YWluaW5nIEV4cG9ydERhdGEgb2JqZWN0cyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBwYXJ0cyBvZiB0aGUgbWVyZ2VkIGZpbGUuXG4gICAqIEBwYXJhbSBmaWxlVHlwZSAtIEluZGljYXRlcyB0aGUgdHlwZSBvZiB0aGUgZmlsZSB0byBiZSBleHBvcnRlZC5cbiAgICogQHBhcmFtIG1lcmdlZEV4cG9ydERldGFpbHMgLSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgZGF0ZSByYW5nZSBmcm9tIHdoaWNoIHRoZSBleHBvcnQgd2FzIGNyZWF0ZWQgYW5kIGFnZ3JlZ2F0aW9uIHR5cGUuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdHMgY29udGFpbmluZyBmaWxlIG5hbWUgYW5kIGl0cyByZXNwZWN0aXZlIGNvbnRlbnQgYXMgQmxvYi5cbiAgICpcbiAgICogRXhhbXBsZSBvZiBleHBvcnRlZCBtZXJnZWQgZmlsZSBzdHJ1Y3R1cmU6XG4gICAqIGRhdGUgZnJvbVx0ZGF0ZSB0b1xuICAgKiAyMDI0LTA0LTE1VDEyOjE0OjAwLjAwMFpcdDIwMjQtMDctMTZUMTQ6MTQ6MjgrMDI6MDBcbiAgICogdGltZVx0ICAgICAgICAgICAgICAgICAgICAgICAgICBHNkZpdCAtPiBjOHlfQWNjZWxlcmF0aW9uLmFjY2VsZXJhdGlvblggW0ddXHRHNkZpdCAtPiBjOHlfQWNjZWxlcmF0aW9uLmFjY2VsZXJhdGlvblkgW0ddXG4gICAqIDIwMjQtMDUtMTNUMTM6NDU6MTAuNTAwKzAyOjAwXHQwLjAxMDkwMjYzNTk2MjQyNzNcdCAgICAgICAgICAgICAgICAgICAgICAgIDAuNzg5NDYxNjI4Mjc4MDY5XG4gICAqXG4gICAqIEV4YW1wbGUgb2YgZXhwb3J0ZWQgZmlsZSBuYW1lIGZvcm1hdDpcbiAgICogMDRkZWMyMzEyNDAtMDZkZWMyMzIzNTAueGxzeFxuICAgKi9cbiAgYXN5bmMgZXhwb3J0U2VyaWVzRGF0YVRvTWVyZ2VkRmlsZXMoXG4gICAgZXhwb3J0RGF0YTogRXhwb3J0RGF0YVtdLFxuICAgIGZpbGVUeXBlOiBzdHJpbmcsXG4gICAgbWVyZ2VkRXhwb3J0RGV0YWlsczogTWVyZ2VkRXhwb3J0RGV0YWlsc1xuICApOiBQcm9taXNlPEV4cG9ydGVkRmlsZT4ge1xuICAgIGNvbnN0IGZpbGVUeXBlQ29uZmlnID0gdGhpcy5maWxlVHlwZXNDb25maWdzW2ZpbGVUeXBlXTtcblxuICAgIG1lcmdlZEV4cG9ydERldGFpbHMuZGF0ZUZyb20gPSBuZXcgRGF0ZShtZXJnZWRFeHBvcnREZXRhaWxzLmRhdGVGcm9tKS50b0lTT1N0cmluZygpO1xuICAgIG1lcmdlZEV4cG9ydERldGFpbHMuZGF0ZVRvID0gbmV3IERhdGUobWVyZ2VkRXhwb3J0RGV0YWlscy5kYXRlVG8pLnRvSVNPU3RyaW5nKCk7XG5cbiAgICBjb25zdCBtZXJnZWRGaWxlQ29udGVudCA9IHRoaXMubWVyZ2VNYXBwaW5nW2ZpbGVUeXBlXShleHBvcnREYXRhLCBtZXJnZWRFeHBvcnREZXRhaWxzKTtcblxuICAgIGNvbnN0IG1lcmdlZEZpbGVOYW1lRGF0ZVJhbmdlID0gdGhpcy51dGlscy5nZXRGb3JtYXR0ZWREYXRlUmFuZ2UoXG4gICAgICBtZXJnZWRFeHBvcnREZXRhaWxzLmRhdGVGcm9tLFxuICAgICAgbWVyZ2VkRXhwb3J0RGV0YWlscy5kYXRlVG9cbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBmaWxlTmFtZTogYCR7bWVyZ2VkRmlsZU5hbWVEYXRlUmFuZ2V9LiR7ZmlsZVR5cGVDb25maWcuZXh0ZW5zaW9ufWAsXG4gICAgICBmaWxlRGF0YTogbmV3IEJsb2IoW2F3YWl0IG1lcmdlZEZpbGVDb250ZW50XSwgeyB0eXBlOiBmaWxlVHlwZUNvbmZpZy5taW1lVHlwZSB9KVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogWmlwcyBhbGwgY3JlYXRlZCBmaWxlcy5cbiAgICpcbiAgICogQHBhcmFtIGZpbGVzIC0gQW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGZpbGUgbmFtZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgY29udGVudCBhcyBCbG9icy5cbiAgICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBCbG9iIHJlcHJlc2VudGluZyB0aGUgZ2VuZXJhdGVkIHppcCBmaWxlLlxuICAgKi9cbiAgYXN5bmMgemlwRmlsZXMoZmlsZXM6IEV4cG9ydGVkRmlsZVtdKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgY29uc3QgemlwID0gbmV3IEpTWmlwKCk7XG5cbiAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgemlwLmZpbGUoZmlsZS5maWxlTmFtZSwgZmlsZS5maWxlRGF0YSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZW5lcmF0ZVppcEJsb2IoemlwLCBGSUxFX0NPTVBSRVNTSU9OX1RZUEVTX1ZBTFVFUy5kZWZsYXRlLCA5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnRzIHRoZSBnaXZlbiBkYXRhIHRvIENTViBvciBFeGNlbCBmaWxlcy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIEFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgZm9yIHRoZSBleHBvcnQgYW5kIHppcCBwcm9jZXNzLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIEJsb2IgcmVwcmVzZW50aW5nIHRoZSBleHBvcnRlZCBmaWxlLlxuICAgKi9cbiAgYXN5bmMgZXhwb3J0U2VyaWVzRGF0YShwYXJhbXM6IFNlcmllc0V4cG9ydFBhcmFtcyk6IFByb21pc2U8QmxvYj4ge1xuICAgIGNvbnN0IHsgZmxhdHRlbmVkQW5kU29ydGVkRXhwb3J0RGF0YSwgZmlsZVR5cGUsIG1lcmdlZEV4cG9ydERldGFpbHMgfSA9IHBhcmFtcztcbiAgICBjb25zdCBleHBvcnRlZE1lcmdlZEZpbGU6IEV4cG9ydGVkRmlsZSA9IGF3YWl0IHRoaXMuZXhwb3J0U2VyaWVzRGF0YVRvTWVyZ2VkRmlsZXMoXG4gICAgICBmbGF0dGVuZWRBbmRTb3J0ZWRFeHBvcnREYXRhLFxuICAgICAgZmlsZVR5cGUsXG4gICAgICBtZXJnZWRFeHBvcnREZXRhaWxzXG4gICAgKTtcblxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhwb3J0ZWRNZXJnZWRGaWxlLmZpbGVEYXRhXSwgeyB0eXBlOiBmaWxlVHlwZSB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShibG9iLCBTRVJJRVNfREFUQV9NRVJHRURfRklMRV9OQU1FLCB7XG4gICAgICB2YWx1ZTogZXhwb3J0ZWRNZXJnZWRGaWxlLmZpbGVOYW1lLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcblxuICAgIHJldHVybiBibG9iO1xuICB9XG5cbiAgY3JlYXRlRmlsZU5hbWUoc291cmNlOiBzdHJpbmcgfCBudW1iZXIsIGZyYWdtZW50U2VyaWVzOiBzdHJpbmcsIGZpbGVFeHRlbnNpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3NvdXJjZX1fJHtmcmFnbWVudFNlcmllc30uJHtmaWxlRXh0ZW5zaW9ufWA7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgemlwIGJsb2IgdXNpbmcgdGhlIHByb3ZpZGVkIHppcCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB6aXAgLSBUaGUgemlwIG9iamVjdCB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSBibG9iLlxuICAgKiBAcGFyYW0gY29tcHJlc3Npb25UeXBlIC0gVGhlIGNvbXByZXNzaW9uIHR5cGUgZm9yIHRoZSB6aXAgZmlsZS4gJ1NUT1JFJyBpcyBubyBjb21wcmVzc2lvbiwgJ0RFRkxBVEUnIGlzIGNvbXByZXNzaW9uLlxuICAgKiBAcGFyYW0gY29tcHJlc3Npb25MZXZlbCAtIFRoZSBjb21wcmVzc2lvbiBsZXZlbCBmb3IgdGhlIHppcCBmaWxlLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIExldmVsIDEgaXMgcXVpY2tlc3QsIDkgaXMgYmVzdCBjb21wcmVzc2VkLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIEJsb2IgY29udGFpbmluZyB0aGUgZ2VuZXJhdGVkIHppcCBmaWxlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZVppcEJsb2IoXG4gICAgemlwOiBKU1ppcCxcbiAgICBjb21wcmVzc2lvblR5cGU6IEZpbGVDb21wcmVzc2lvblR5cGVzID0gRklMRV9DT01QUkVTU0lPTl9UWVBFU19WQUxVRVMuc3RvcmUsXG4gICAgY29tcHJlc3Npb25MZXZlbCA9IDFcbiAgKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgY29uc3QgYmxvYiA9ICdibG9iJztcblxuICAgIGlmIChjb21wcmVzc2lvblR5cGUgPT09IEZJTEVfQ09NUFJFU1NJT05fVFlQRVNfVkFMVUVTLnN0b3JlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgemlwLmdlbmVyYXRlQXN5bmMoeyB0eXBlOiBibG9iIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgemlwLmdlbmVyYXRlQXN5bmMoe1xuICAgICAgdHlwZTogYmxvYixcbiAgICAgIGNvbXByZXNzaW9uOiBjb21wcmVzc2lvblR5cGUsXG4gICAgICBjb21wcmVzc2lvbk9wdGlvbnM6IHtcbiAgICAgICAgbGV2ZWw6IGNvbXByZXNzaW9uTGV2ZWxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19