@rivet-health/design-system 40.44.3 → 41.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/fesm2022/rivet-health-design-system.mjs +23103 -18772
  2. package/fesm2022/rivet-health-design-system.mjs.map +1 -1
  3. package/package.json +8 -9
  4. package/types/rivet-health-design-system.d.ts +6566 -0
  5. package/esm2022/lib/accessibility/sr-only/sr-only.component.mjs +0 -18
  6. package/esm2022/lib/download/download.service.mjs +0 -47
  7. package/esm2022/lib/format/pipes/common.mjs +0 -24
  8. package/esm2022/lib/format/pipes/date.pipe.mjs +0 -20
  9. package/esm2022/lib/format/pipes/days.pipe.mjs +0 -20
  10. package/esm2022/lib/format/pipes/dollars.pipe.mjs +0 -19
  11. package/esm2022/lib/format/pipes/number.pipe.mjs +0 -19
  12. package/esm2022/lib/format/pipes/percentage.pipe.mjs +0 -19
  13. package/esm2022/lib/format/pipes/sentence-case.pipe.mjs +0 -61
  14. package/esm2022/lib/format/pipes/small-currency.pipe.mjs +0 -24
  15. package/esm2022/lib/format/pipes/small-number.pipe.mjs +0 -29
  16. package/esm2022/lib/format/svg-text-truncate/svg-text-truncate.directive.mjs +0 -62
  17. package/esm2022/lib/format/truncate/truncate.component.mjs +0 -51
  18. package/esm2022/lib/icon/dom-cache.mjs +0 -32
  19. package/esm2022/lib/icon/icon.component.mjs +0 -86
  20. package/esm2022/lib/icon/icons.mjs +0 -271
  21. package/esm2022/lib/input/alphabetic-field/alphabetic-field.component.mjs +0 -42
  22. package/esm2022/lib/input/auto-focus/auto-focus.directive.mjs +0 -48
  23. package/esm2022/lib/input/button/button.component.mjs +0 -139
  24. package/esm2022/lib/input/button-group/button-group.component.mjs +0 -39
  25. package/esm2022/lib/input/calendar/calendar.component.mjs +0 -318
  26. package/esm2022/lib/input/card-checkbox/card-checkbox.component.mjs +0 -13
  27. package/esm2022/lib/input/checkbox/checkbox.component.mjs +0 -84
  28. package/esm2022/lib/input/currency-field/currency-field.component.mjs +0 -26
  29. package/esm2022/lib/input/date/date.component.mjs +0 -279
  30. package/esm2022/lib/input/date-range/date-range.component.mjs +0 -477
  31. package/esm2022/lib/input/filter-chip/filter-chip.component.mjs +0 -47
  32. package/esm2022/lib/input/filter-dropdown/filter-dropdown.component.mjs +0 -89
  33. package/esm2022/lib/input/input-label/input-label.component.mjs +0 -38
  34. package/esm2022/lib/input/mentions-input/mentions-input.component.mjs +0 -745
  35. package/esm2022/lib/input/number-field/number-field.component.mjs +0 -125
  36. package/esm2022/lib/input/percentage-field/percentage-field.component.mjs +0 -20
  37. package/esm2022/lib/input/phone-field/phone-field.component.mjs +0 -74
  38. package/esm2022/lib/input/radio/radio.component.mjs +0 -58
  39. package/esm2022/lib/input/search/search.component.mjs +0 -26
  40. package/esm2022/lib/input/search-select/search-select.component.mjs +0 -189
  41. package/esm2022/lib/input/select/select/select.component.mjs +0 -178
  42. package/esm2022/lib/input/select/select-node/select-node.component.mjs +0 -60
  43. package/esm2022/lib/input/select/state.mjs +0 -882
  44. package/esm2022/lib/input/simple-select/option-group.pipe.mjs +0 -19
  45. package/esm2022/lib/input/simple-select/simple-select.component.mjs +0 -178
  46. package/esm2022/lib/input/switch-checkbox/switch-checkbox.component.mjs +0 -33
  47. package/esm2022/lib/input/text-field/text-field.component.mjs +0 -115
  48. package/esm2022/lib/input/textarea-field/textarea-field.component.mjs +0 -21
  49. package/esm2022/lib/input/validation-message/validation-message.component.mjs +0 -17
  50. package/esm2022/lib/layout/card/card-actions.component.mjs +0 -72
  51. package/esm2022/lib/layout/card/card-content.component.mjs +0 -64
  52. package/esm2022/lib/layout/card/card-header.component.mjs +0 -201
  53. package/esm2022/lib/layout/card/card-link.component.mjs +0 -94
  54. package/esm2022/lib/layout/card/card-media.component.mjs +0 -70
  55. package/esm2022/lib/layout/card/card.component.mjs +0 -291
  56. package/esm2022/lib/layout/setting-row/setting-row.component.mjs +0 -111
  57. package/esm2022/lib/load/loading/loading.component.mjs +0 -43
  58. package/esm2022/lib/load/loading-cover/loading-cover.component.mjs +0 -25
  59. package/esm2022/lib/navigation/editable-heading/editable-heading.component.mjs +0 -243
  60. package/esm2022/lib/navigation/link/link.component.mjs +0 -48
  61. package/esm2022/lib/navigation/page-header/page-header.component.mjs +0 -68
  62. package/esm2022/lib/navigation/simple-tabs/simple-tab/simple-tab.component.mjs +0 -43
  63. package/esm2022/lib/navigation/simple-tabs/simple-tabs/simple-tabs.component.mjs +0 -11
  64. package/esm2022/lib/navigation/tabs/tab/tab.component.mjs +0 -16
  65. package/esm2022/lib/navigation/tabs/tabs/tabs.component.mjs +0 -11
  66. package/esm2022/lib/navigation/views/all-views-modal/all-views-modal.component.mjs +0 -43
  67. package/esm2022/lib/navigation/views/edit-view/edit-view.component.mjs +0 -118
  68. package/esm2022/lib/navigation/views/permission-picker/permission-picker.component.mjs +0 -151
  69. package/esm2022/lib/navigation/views/state.mjs +0 -456
  70. package/esm2022/lib/navigation/views/view-menu/view-menu.component.mjs +0 -30
  71. package/esm2022/lib/navigation/views/views/views.component.mjs +0 -90
  72. package/esm2022/lib/notification/badge/badge.component.mjs +0 -45
  73. package/esm2022/lib/notification/banner/banner-action.component.mjs +0 -48
  74. package/esm2022/lib/notification/banner/banner.component.mjs +0 -61
  75. package/esm2022/lib/notification/map-indicator/map-indicator.component.mjs +0 -50
  76. package/esm2022/lib/notification/map-indicator/map-indicators.mjs +0 -15
  77. package/esm2022/lib/notification/notification-badge/notification-badge.component.mjs +0 -26
  78. package/esm2022/lib/overlay/callout/callout.component.mjs +0 -130
  79. package/esm2022/lib/overlay/callout/callout.helpers.mjs +0 -113
  80. package/esm2022/lib/overlay/callout/help/help.component.mjs +0 -23
  81. package/esm2022/lib/overlay/callout/lock-scroll.directive.mjs +0 -69
  82. package/esm2022/lib/overlay/callout/menu/menu-item/menu-item.component.mjs +0 -71
  83. package/esm2022/lib/overlay/callout/menu/menu.component.mjs +0 -38
  84. package/esm2022/lib/overlay/callout/select-callout-defaults.mjs +0 -13
  85. package/esm2022/lib/overlay/callout/tooltip/locked-tooltip.directive.mjs +0 -30
  86. package/esm2022/lib/overlay/callout/tooltip/tooltip.component.mjs +0 -57
  87. package/esm2022/lib/overlay/callout/tooltip/tooltip.directive.mjs +0 -138
  88. package/esm2022/lib/overlay/modal/dialog/dialog.component.mjs +0 -47
  89. package/esm2022/lib/overlay/modal/dialog-stack.service.mjs +0 -41
  90. package/esm2022/lib/overlay/modal/form-dialog/form-dialog.component.mjs +0 -146
  91. package/esm2022/lib/overlay/modal/modal.component.mjs +0 -31
  92. package/esm2022/lib/overlay/modal/side-sheet/side-sheet.component.mjs +0 -30
  93. package/esm2022/lib/overlay/overlay-outlet.component.mjs +0 -98
  94. package/esm2022/lib/overlay/overlay.directive.mjs +0 -25
  95. package/esm2022/lib/overlay/overlay.service.mjs +0 -35
  96. package/esm2022/lib/overlay/toast/toast-action.component.mjs +0 -11
  97. package/esm2022/lib/overlay/toast/toast.component.mjs +0 -41
  98. package/esm2022/lib/riv.module.mjs +0 -580
  99. package/esm2022/lib/size/size.directive.mjs +0 -33
  100. package/esm2022/lib/table/simple-table/coordinate-helper.mjs +0 -61
  101. package/esm2022/lib/table/simple-table/simple-table-cell.component.mjs +0 -36
  102. package/esm2022/lib/table/simple-table/simple-table-header-cell.component.mjs +0 -37
  103. package/esm2022/lib/table/simple-table/simple-table-row.component.mjs +0 -19
  104. package/esm2022/lib/table/simple-table/simple-table.component.mjs +0 -104
  105. package/esm2022/lib/table/table/clipboard.mjs +0 -182
  106. package/esm2022/lib/table/table/state-helpers/collapse-helpers.mjs +0 -116
  107. package/esm2022/lib/table/table/state-helpers/column-helpers.mjs +0 -383
  108. package/esm2022/lib/table/table/state-helpers/display-helpers.mjs +0 -50
  109. package/esm2022/lib/table/table/state-helpers/nesting-helpers.mjs +0 -123
  110. package/esm2022/lib/table/table/state-helpers/order-helpers.mjs +0 -164
  111. package/esm2022/lib/table/table/state-helpers/pagination-helpers.mjs +0 -139
  112. package/esm2022/lib/table/table/state-helpers/result-helpers.mjs +0 -70
  113. package/esm2022/lib/table/table/state-helpers/search-helpers.mjs +0 -72
  114. package/esm2022/lib/table/table/state-helpers/selection-helpers.mjs +0 -180
  115. package/esm2022/lib/table/table/state.mjs +0 -1035
  116. package/esm2022/lib/table/table/table/table.component.mjs +0 -367
  117. package/esm2022/lib/table/table/table-collapse-all/table-collapse-all.component.mjs +0 -25
  118. package/esm2022/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.mjs +0 -227
  119. package/esm2022/lib/table/table/table-column-settings/table-column-settings.component.mjs +0 -134
  120. package/esm2022/lib/table/table/table-csv-export/table-csv-export.component.mjs +0 -35
  121. package/esm2022/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.mjs +0 -28
  122. package/esm2022/lib/table/table/table-search/table-search.component.mjs +0 -71
  123. package/esm2022/lib/table/table/table-search-columns/table-search-columns.component.mjs +0 -57
  124. package/esm2022/lib/util/local-storage.mjs +0 -17
  125. package/esm2022/lib/visibility/visibility.directive.mjs +0 -34
  126. package/esm2022/lib/visualization/chart/chart-scaling.mjs +0 -380
  127. package/esm2022/lib/visualization/chart/chart.component.mjs +0 -626
  128. package/esm2022/lib/visualization/chart/chart.mjs +0 -3768
  129. package/esm2022/lib/visualization/data-table/data-table-cell.component.mjs +0 -22
  130. package/esm2022/lib/visualization/data-table/data-table-header-cell.component.mjs +0 -11
  131. package/esm2022/lib/visualization/data-table/data-table-row.component.mjs +0 -19
  132. package/esm2022/lib/visualization/data-table/data-table.component.mjs +0 -17
  133. package/esm2022/lib/visualization/donut/donut.component.mjs +0 -54
  134. package/esm2022/lib/visualization/funnel-chart/funnel-chart.component.mjs +0 -73
  135. package/esm2022/lib/visualization/funnel-chart/funnel-chart.helpers.mjs +0 -33
  136. package/esm2022/lib/visualization/highlight/highlight.component.mjs +0 -24
  137. package/esm2022/lib/visualization/highlight/highlight.helpers.mjs +0 -20
  138. package/esm2022/lib/visualization/intervals.mjs +0 -63
  139. package/esm2022/lib/visualization/issue/issue.component.mjs +0 -30
  140. package/esm2022/lib/visualization/legend-item/legend-item.component.mjs +0 -49
  141. package/esm2022/lib/visualization/metric/metric.component.mjs +0 -52
  142. package/esm2022/lib/visualization/mini-pie/mini-pie.component.mjs +0 -51
  143. package/esm2022/lib/visualization/progress/progress.component.mjs +0 -24
  144. package/esm2022/lib/visualization/stacked-column/stacked-column.component.mjs +0 -377
  145. package/esm2022/lib/visualization/stacked-column/stacked-column.helpers.mjs +0 -18
  146. package/esm2022/lib/visualization/stacked-row/stacked-row.component.mjs +0 -270
  147. package/esm2022/lib/visualization/stacked-row/stacked-row.helpers.mjs +0 -74
  148. package/esm2022/lib/visualization/time-series/time-series.component.mjs +0 -374
  149. package/esm2022/lib/visualization/time-series/time-series.helpers.mjs +0 -15
  150. package/esm2022/lib/visualization/trend/trend.component.mjs +0 -51
  151. package/esm2022/lib/visualization/zero-state/zero-state.component.mjs +0 -22
  152. package/esm2022/public-api.mjs +0 -118
  153. package/esm2022/rivet-health-design-system.mjs +0 -5
  154. package/index.d.ts +0 -5
  155. package/lib/accessibility/sr-only/sr-only.component.d.ts +0 -12
  156. package/lib/download/download.service.d.ts +0 -9
  157. package/lib/format/pipes/common.d.ts +0 -6
  158. package/lib/format/pipes/date.pipe.d.ts +0 -8
  159. package/lib/format/pipes/days.pipe.d.ts +0 -8
  160. package/lib/format/pipes/dollars.pipe.d.ts +0 -9
  161. package/lib/format/pipes/number.pipe.d.ts +0 -8
  162. package/lib/format/pipes/percentage.pipe.d.ts +0 -8
  163. package/lib/format/pipes/sentence-case.pipe.d.ts +0 -8
  164. package/lib/format/pipes/small-currency.pipe.d.ts +0 -8
  165. package/lib/format/pipes/small-number.pipe.d.ts +0 -8
  166. package/lib/format/svg-text-truncate/svg-text-truncate.directive.d.ts +0 -14
  167. package/lib/format/truncate/truncate.component.d.ts +0 -17
  168. package/lib/icon/dom-cache.d.ts +0 -13
  169. package/lib/icon/icon.component.d.ts +0 -27
  170. package/lib/icon/icons.d.ts +0 -137
  171. package/lib/input/alphabetic-field/alphabetic-field.component.d.ts +0 -14
  172. package/lib/input/auto-focus/auto-focus.directive.d.ts +0 -21
  173. package/lib/input/button/button.component.d.ts +0 -37
  174. package/lib/input/button-group/button-group.component.d.ts +0 -11
  175. package/lib/input/calendar/calendar.component.d.ts +0 -67
  176. package/lib/input/card-checkbox/card-checkbox.component.d.ts +0 -6
  177. package/lib/input/checkbox/checkbox.component.d.ts +0 -32
  178. package/lib/input/currency-field/currency-field.component.d.ts +0 -9
  179. package/lib/input/date/date.component.d.ts +0 -62
  180. package/lib/input/date-range/date-range.component.d.ts +0 -97
  181. package/lib/input/filter-chip/filter-chip.component.d.ts +0 -13
  182. package/lib/input/filter-dropdown/filter-dropdown.component.d.ts +0 -30
  183. package/lib/input/input-label/input-label.component.d.ts +0 -17
  184. package/lib/input/mentions-input/mentions-input.component.d.ts +0 -93
  185. package/lib/input/number-field/number-field.component.d.ts +0 -36
  186. package/lib/input/percentage-field/percentage-field.component.d.ts +0 -7
  187. package/lib/input/phone-field/phone-field.component.d.ts +0 -17
  188. package/lib/input/radio/radio.component.d.ts +0 -28
  189. package/lib/input/search/search.component.d.ts +0 -10
  190. package/lib/input/search-select/search-select.component.d.ts +0 -62
  191. package/lib/input/select/select/select.component.d.ts +0 -63
  192. package/lib/input/select/select-node/select-node.component.d.ts +0 -30
  193. package/lib/input/select/state.d.ts +0 -250
  194. package/lib/input/simple-select/option-group.pipe.d.ts +0 -8
  195. package/lib/input/simple-select/simple-select.component.d.ts +0 -63
  196. package/lib/input/switch-checkbox/switch-checkbox.component.d.ts +0 -18
  197. package/lib/input/text-field/text-field.component.d.ts +0 -38
  198. package/lib/input/textarea-field/textarea-field.component.d.ts +0 -8
  199. package/lib/input/validation-message/validation-message.component.d.ts +0 -6
  200. package/lib/layout/card/card-actions.component.d.ts +0 -38
  201. package/lib/layout/card/card-content.component.d.ts +0 -33
  202. package/lib/layout/card/card-header.component.d.ts +0 -132
  203. package/lib/layout/card/card-link.component.d.ts +0 -54
  204. package/lib/layout/card/card-media.component.d.ts +0 -43
  205. package/lib/layout/card/card.component.d.ts +0 -215
  206. package/lib/layout/setting-row/setting-row.component.d.ts +0 -72
  207. package/lib/load/loading/loading.component.d.ts +0 -17
  208. package/lib/load/loading-cover/loading-cover.component.d.ts +0 -10
  209. package/lib/navigation/editable-heading/editable-heading.component.d.ts +0 -118
  210. package/lib/navigation/link/link.component.d.ts +0 -19
  211. package/lib/navigation/page-header/page-header.component.d.ts +0 -50
  212. package/lib/navigation/simple-tabs/simple-tab/simple-tab.component.d.ts +0 -11
  213. package/lib/navigation/simple-tabs/simple-tabs/simple-tabs.component.d.ts +0 -5
  214. package/lib/navigation/tabs/tab/tab.component.d.ts +0 -6
  215. package/lib/navigation/tabs/tabs/tabs.component.d.ts +0 -5
  216. package/lib/navigation/views/all-views-modal/all-views-modal.component.d.ts +0 -14
  217. package/lib/navigation/views/edit-view/edit-view.component.d.ts +0 -31
  218. package/lib/navigation/views/permission-picker/permission-picker.component.d.ts +0 -37
  219. package/lib/navigation/views/state.d.ts +0 -175
  220. package/lib/navigation/views/view-menu/view-menu.component.d.ts +0 -13
  221. package/lib/navigation/views/views/views.component.d.ts +0 -25
  222. package/lib/notification/badge/badge.component.d.ts +0 -14
  223. package/lib/notification/banner/banner-action.component.d.ts +0 -15
  224. package/lib/notification/banner/banner.component.d.ts +0 -25
  225. package/lib/notification/map-indicator/map-indicator.component.d.ts +0 -24
  226. package/lib/notification/map-indicator/map-indicators.d.ts +0 -9
  227. package/lib/notification/notification-badge/notification-badge.component.d.ts +0 -11
  228. package/lib/overlay/callout/callout.component.d.ts +0 -36
  229. package/lib/overlay/callout/callout.helpers.d.ts +0 -16
  230. package/lib/overlay/callout/help/help.component.d.ts +0 -11
  231. package/lib/overlay/callout/lock-scroll.directive.d.ts +0 -22
  232. package/lib/overlay/callout/menu/menu-item/menu-item.component.d.ts +0 -27
  233. package/lib/overlay/callout/menu/menu.component.d.ts +0 -17
  234. package/lib/overlay/callout/select-callout-defaults.d.ts +0 -5
  235. package/lib/overlay/callout/tooltip/locked-tooltip.directive.d.ts +0 -14
  236. package/lib/overlay/callout/tooltip/tooltip.component.d.ts +0 -26
  237. package/lib/overlay/callout/tooltip/tooltip.directive.d.ts +0 -48
  238. package/lib/overlay/modal/dialog/dialog.component.d.ts +0 -19
  239. package/lib/overlay/modal/dialog-stack.service.d.ts +0 -23
  240. package/lib/overlay/modal/form-dialog/form-dialog.component.d.ts +0 -63
  241. package/lib/overlay/modal/modal.component.d.ts +0 -11
  242. package/lib/overlay/modal/side-sheet/side-sheet.component.d.ts +0 -13
  243. package/lib/overlay/overlay-outlet.component.d.ts +0 -19
  244. package/lib/overlay/overlay.directive.d.ts +0 -13
  245. package/lib/overlay/overlay.service.d.ts +0 -14
  246. package/lib/overlay/toast/toast-action.component.d.ts +0 -5
  247. package/lib/overlay/toast/toast.component.d.ts +0 -17
  248. package/lib/riv.module.d.ts +0 -122
  249. package/lib/size/size.directive.d.ts +0 -12
  250. package/lib/table/simple-table/coordinate-helper.d.ts +0 -13
  251. package/lib/table/simple-table/simple-table-cell.component.d.ts +0 -19
  252. package/lib/table/simple-table/simple-table-header-cell.component.d.ts +0 -20
  253. package/lib/table/simple-table/simple-table-row.component.d.ts +0 -6
  254. package/lib/table/simple-table/simple-table.component.d.ts +0 -11
  255. package/lib/table/table/clipboard.d.ts +0 -38
  256. package/lib/table/table/state-helpers/collapse-helpers.d.ts +0 -9
  257. package/lib/table/table/state-helpers/column-helpers.d.ts +0 -29
  258. package/lib/table/table/state-helpers/display-helpers.d.ts +0 -5
  259. package/lib/table/table/state-helpers/nesting-helpers.d.ts +0 -13
  260. package/lib/table/table/state-helpers/order-helpers.d.ts +0 -13
  261. package/lib/table/table/state-helpers/pagination-helpers.d.ts +0 -12
  262. package/lib/table/table/state-helpers/result-helpers.d.ts +0 -10
  263. package/lib/table/table/state-helpers/search-helpers.d.ts +0 -17
  264. package/lib/table/table/state-helpers/selection-helpers.d.ts +0 -13
  265. package/lib/table/table/state.d.ts +0 -512
  266. package/lib/table/table/table/table.component.d.ts +0 -88
  267. package/lib/table/table/table-collapse-all/table-collapse-all.component.d.ts +0 -10
  268. package/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.d.ts +0 -52
  269. package/lib/table/table/table-column-settings/table-column-settings.component.d.ts +0 -37
  270. package/lib/table/table/table-csv-export/table-csv-export.component.d.ts +0 -14
  271. package/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.d.ts +0 -11
  272. package/lib/table/table/table-search/table-search.component.d.ts +0 -21
  273. package/lib/table/table/table-search-columns/table-search-columns.component.d.ts +0 -23
  274. package/lib/util/local-storage.d.ts +0 -14
  275. package/lib/visibility/visibility.directive.d.ts +0 -12
  276. package/lib/visualization/chart/chart-scaling.d.ts +0 -100
  277. package/lib/visualization/chart/chart.component.d.ts +0 -116
  278. package/lib/visualization/chart/chart.d.ts +0 -354
  279. package/lib/visualization/data-table/data-table-cell.component.d.ts +0 -11
  280. package/lib/visualization/data-table/data-table-header-cell.component.d.ts +0 -5
  281. package/lib/visualization/data-table/data-table-row.component.d.ts +0 -6
  282. package/lib/visualization/data-table/data-table.component.d.ts +0 -6
  283. package/lib/visualization/donut/donut.component.d.ts +0 -22
  284. package/lib/visualization/funnel-chart/funnel-chart.component.d.ts +0 -30
  285. package/lib/visualization/funnel-chart/funnel-chart.helpers.d.ts +0 -4
  286. package/lib/visualization/highlight/highlight.component.d.ts +0 -15
  287. package/lib/visualization/highlight/highlight.helpers.d.ts +0 -2
  288. package/lib/visualization/intervals.d.ts +0 -8
  289. package/lib/visualization/issue/issue.component.d.ts +0 -10
  290. package/lib/visualization/legend-item/legend-item.component.d.ts +0 -22
  291. package/lib/visualization/metric/metric.component.d.ts +0 -20
  292. package/lib/visualization/mini-pie/mini-pie.component.d.ts +0 -17
  293. package/lib/visualization/progress/progress.component.d.ts +0 -8
  294. package/lib/visualization/stacked-column/stacked-column.component.d.ts +0 -129
  295. package/lib/visualization/stacked-column/stacked-column.helpers.d.ts +0 -3
  296. package/lib/visualization/stacked-row/stacked-row.component.d.ts +0 -109
  297. package/lib/visualization/stacked-row/stacked-row.helpers.d.ts +0 -53
  298. package/lib/visualization/time-series/time-series.component.d.ts +0 -126
  299. package/lib/visualization/time-series/time-series.helpers.d.ts +0 -34
  300. package/lib/visualization/trend/trend.component.d.ts +0 -13
  301. package/lib/visualization/zero-state/zero-state.component.d.ts +0 -9
  302. package/public-api.d.ts +0 -118
@@ -1,116 +0,0 @@
1
- export var TableCollapseHelpers;
2
- (function (TableCollapseHelpers) {
3
- function toggleRowCollapse(state, id) {
4
- const currentSet = state.collapseState.defaultTo === 'collapsed'
5
- ? state.collapseState.expandedRows
6
- : state.collapseState.collapsedRows;
7
- const newSet = new Set(currentSet);
8
- const alreadyInSet = newSet.has(id);
9
- if (alreadyInSet) {
10
- newSet.delete(id);
11
- }
12
- else {
13
- newSet.add(id);
14
- }
15
- if (state.collapseState.defaultTo === 'collapsed') {
16
- return {
17
- ...state,
18
- collapseState: {
19
- ...state.collapseState,
20
- expandedRows: newSet,
21
- },
22
- };
23
- }
24
- else {
25
- return {
26
- ...state,
27
- collapseState: {
28
- ...state.collapseState,
29
- collapsedRows: newSet,
30
- },
31
- };
32
- }
33
- }
34
- TableCollapseHelpers.toggleRowCollapse = toggleRowCollapse;
35
- function toggleHeaderCollapse(state, id) {
36
- const currentSet = state.collapseState.defaultTo === 'collapsed'
37
- ? state.collapseState.expandedHeaders
38
- : state.collapseState.collapsedHeaders;
39
- const newSet = new Set(currentSet);
40
- const alreadyInSet = newSet.has(id);
41
- if (alreadyInSet) {
42
- newSet.delete(id);
43
- }
44
- else {
45
- newSet.add(id);
46
- }
47
- if (state.collapseState.defaultTo === 'collapsed') {
48
- return {
49
- ...state,
50
- collapseState: {
51
- ...state.collapseState,
52
- expandedHeaders: newSet,
53
- },
54
- };
55
- }
56
- else {
57
- return {
58
- ...state,
59
- collapseState: {
60
- ...state.collapseState,
61
- collapsedHeaders: newSet,
62
- },
63
- };
64
- }
65
- }
66
- TableCollapseHelpers.toggleHeaderCollapse = toggleHeaderCollapse;
67
- function toggleAllCollapsed(state) {
68
- if (isAllExpanded(state.collapseState)) {
69
- return {
70
- ...state,
71
- collapseState: {
72
- defaultTo: 'collapsed',
73
- expandedRows: new Set(),
74
- expandedHeaders: new Set(),
75
- },
76
- };
77
- }
78
- else {
79
- return {
80
- ...state,
81
- collapseState: {
82
- defaultTo: 'expanded',
83
- collapsedRows: new Set(),
84
- collapsedHeaders: new Set(),
85
- },
86
- };
87
- }
88
- }
89
- TableCollapseHelpers.toggleAllCollapsed = toggleAllCollapsed;
90
- function isAllExpanded(collapseState) {
91
- return (collapseState.defaultTo === 'expanded' &&
92
- collapseState.collapsedHeaders.size === 0 &&
93
- collapseState.collapsedRows.size === 0);
94
- }
95
- TableCollapseHelpers.isAllExpanded = isAllExpanded;
96
- function isRowCollapsed(state, id) {
97
- if (state.collapseState.defaultTo === 'collapsed') {
98
- const isExpanded = state.collapseState.expandedRows.has(id);
99
- return !isExpanded;
100
- }
101
- return state.collapseState.collapsedRows.has(id);
102
- }
103
- TableCollapseHelpers.isRowCollapsed = isRowCollapsed;
104
- function isHeaderCollapsed(state, id) {
105
- if (!id) {
106
- return false;
107
- }
108
- if (state.collapseState.defaultTo === 'collapsed') {
109
- const isExpanded = state.collapseState.expandedHeaders.has(id);
110
- return !isExpanded;
111
- }
112
- return state.collapseState.collapsedHeaders.has(id);
113
- }
114
- TableCollapseHelpers.isHeaderCollapsed = isHeaderCollapsed;
115
- })(TableCollapseHelpers || (TableCollapseHelpers = {}));
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2UtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3RhYmxlL3RhYmxlL3N0YXRlLWhlbHBlcnMvY29sbGFwc2UtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLEtBQVcsb0JBQW9CLENBc0pwQztBQXRKRCxXQUFpQixvQkFBb0I7SUFDbkMsU0FBZ0IsaUJBQWlCLENBTS9CLEtBQXFDLEVBQ3JDLEVBQVc7UUFFWCxNQUFNLFVBQVUsR0FDZCxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsS0FBSyxXQUFXO1lBQzNDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFlBQVk7WUFDbEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO1FBRXhDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sWUFBWSxHQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFN0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNsRCxPQUFPO2dCQUNMLEdBQUcsS0FBSztnQkFDUixhQUFhLEVBQUU7b0JBQ2IsR0FBRyxLQUFLLENBQUMsYUFBYTtvQkFDdEIsWUFBWSxFQUFFLE1BQU07aUJBQ3JCO2FBQ0YsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsYUFBYSxFQUFFO29CQUNiLEdBQUcsS0FB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QixDQUFBO0lBRUQsU0FBZ0IsaUJBQWlCLENBSy9CLEtBQXFDLEVBQUUsRUFBaUI7UUFDeEQsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1IsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNsRCxNQUFNLFVBQVUsR0FBWSxLQUFLLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEUsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNyQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBZGUsc0NBQWlCLG9CQWNoQyxDQUFBO0FBQ0gsQ0FBQyxFQXRKZ0Isb0JBQW9CLEtBQXBCLG9CQUFvQixRQXNKcEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSaXZUYWJsZSB9IGZyb20gJy4uL3N0YXRlJztcblxuZXhwb3J0IG5hbWVzcGFjZSBUYWJsZUNvbGxhcHNlSGVscGVycyB7XG4gIGV4cG9ydCBmdW5jdGlvbiB0b2dnbGVSb3dDb2xsYXBzZTxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgaWQ6IFJbJ2lkJ10sXG4gICk6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gICAgY29uc3QgY3VycmVudFNldDogU2V0PFJbJ2lkJ10+ID1cbiAgICAgIHN0YXRlLmNvbGxhcHNlU3RhdGUuZGVmYXVsdFRvID09PSAnY29sbGFwc2VkJ1xuICAgICAgICA/IHN0YXRlLmNvbGxhcHNlU3RhdGUuZXhwYW5kZWRSb3dzXG4gICAgICAgIDogc3RhdGUuY29sbGFwc2VTdGF0ZS5jb2xsYXBzZWRSb3dzO1xuXG4gICAgY29uc3QgbmV3U2V0ID0gbmV3IFNldChjdXJyZW50U2V0KTtcbiAgICBjb25zdCBhbHJlYWR5SW5TZXQ6IGJvb2xlYW4gPSBuZXdTZXQuaGFzKGlkKTtcblxuICAgIGlmIChhbHJlYWR5SW5TZXQpIHtcbiAgICAgIG5ld1NldC5kZWxldGUoaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTZXQuYWRkKGlkKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuY29sbGFwc2VTdGF0ZS5kZWZhdWx0VG8gPT09ICdjb2xsYXBzZWQnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICAgIC4uLnN0YXRlLmNvbGxhcHNlU3RhdGUsXG4gICAgICAgICAgZXhwYW5kZWRSb3dzOiBuZXdTZXQsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICAgIC4uLnN0YXRlLmNvbGxhcHNlU3RhdGUsXG4gICAgICAgICAgY29sbGFwc2VkUm93czogbmV3U2V0LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gdG9nZ2xlSGVhZGVyQ29sbGFwc2U8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIGlkOiBzdHJpbmcsXG4gICk6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gICAgY29uc3QgY3VycmVudFNldDogU2V0PHN0cmluZz4gPVxuICAgICAgc3RhdGUuY29sbGFwc2VTdGF0ZS5kZWZhdWx0VG8gPT09ICdjb2xsYXBzZWQnXG4gICAgICAgID8gc3RhdGUuY29sbGFwc2VTdGF0ZS5leHBhbmRlZEhlYWRlcnNcbiAgICAgICAgOiBzdGF0ZS5jb2xsYXBzZVN0YXRlLmNvbGxhcHNlZEhlYWRlcnM7XG5cbiAgICBjb25zdCBuZXdTZXQgPSBuZXcgU2V0KGN1cnJlbnRTZXQpO1xuICAgIGNvbnN0IGFscmVhZHlJblNldDogYm9vbGVhbiA9IG5ld1NldC5oYXMoaWQpO1xuXG4gICAgaWYgKGFscmVhZHlJblNldCkge1xuICAgICAgbmV3U2V0LmRlbGV0ZShpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1NldC5hZGQoaWQpO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5jb2xsYXBzZVN0YXRlLmRlZmF1bHRUbyA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBjb2xsYXBzZVN0YXRlOiB7XG4gICAgICAgICAgLi4uc3RhdGUuY29sbGFwc2VTdGF0ZSxcbiAgICAgICAgICBleHBhbmRlZEhlYWRlcnM6IG5ld1NldCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBjb2xsYXBzZVN0YXRlOiB7XG4gICAgICAgICAgLi4uc3RhdGUuY29sbGFwc2VTdGF0ZSxcbiAgICAgICAgICBjb2xsYXBzZWRIZWFkZXJzOiBuZXdTZXQsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiB0b2dnbGVBbGxDb2xsYXBzZWQ8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBpZiAoaXNBbGxFeHBhbmRlZChzdGF0ZS5jb2xsYXBzZVN0YXRlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGNvbGxhcHNlU3RhdGU6IHtcbiAgICAgICAgICBkZWZhdWx0VG86ICdjb2xsYXBzZWQnLFxuICAgICAgICAgIGV4cGFuZGVkUm93czogbmV3IFNldCgpLFxuICAgICAgICAgIGV4cGFuZGVkSGVhZGVyczogbmV3IFNldCgpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGNvbGxhcHNlU3RhdGU6IHtcbiAgICAgICAgICBkZWZhdWx0VG86ICdleHBhbmRlZCcsXG4gICAgICAgICAgY29sbGFwc2VkUm93czogbmV3IFNldCgpLFxuICAgICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IG5ldyBTZXQoKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzQWxsRXhwYW5kZWQ8UiBleHRlbmRzIFJpdlRhYmxlLlJvdz4oXG4gICAgY29sbGFwc2VTdGF0ZTogUml2VGFibGUuQ29sbGFwc2VTdGF0ZTxSPixcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvbGxhcHNlU3RhdGUuZGVmYXVsdFRvID09PSAnZXhwYW5kZWQnICYmXG4gICAgICBjb2xsYXBzZVN0YXRlLmNvbGxhcHNlZEhlYWRlcnMuc2l6ZSA9PT0gMCAmJlxuICAgICAgY29sbGFwc2VTdGF0ZS5jb2xsYXBzZWRSb3dzLnNpemUgPT09IDBcbiAgICApO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUm93Q29sbGFwc2VkPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiwgaWQ6IFJbJ2lkJ10pOiBib29sZWFuIHtcbiAgICBpZiAoc3RhdGUuY29sbGFwc2VTdGF0ZS5kZWZhdWx0VG8gPT09ICdjb2xsYXBzZWQnKSB7XG4gICAgICBjb25zdCBpc0V4cGFuZGVkOiBib29sZWFuID0gc3RhdGUuY29sbGFwc2VTdGF0ZS5leHBhbmRlZFJvd3MuaGFzKGlkKTtcbiAgICAgIHJldHVybiAhaXNFeHBhbmRlZDtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlLmNvbGxhcHNlU3RhdGUuY29sbGFwc2VkUm93cy5oYXMoaWQpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzSGVhZGVyQ29sbGFwc2VkPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiwgaWQ6IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoIWlkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5jb2xsYXBzZVN0YXRlLmRlZmF1bHRUbyA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQ6IGJvb2xlYW4gPSBzdGF0ZS5jb2xsYXBzZVN0YXRlLmV4cGFuZGVkSGVhZGVycy5oYXMoaWQpO1xuICAgICAgcmV0dXJuICFpc0V4cGFuZGVkO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGUuY29sbGFwc2VTdGF0ZS5jb2xsYXBzZWRIZWFkZXJzLmhhcyhpZCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,383 +0,0 @@
1
- import { difference, partition as lodashPartition } from 'lodash';
2
- import { RivTable } from '../state';
3
- export var TableColumnHelpers;
4
- (function (TableColumnHelpers) {
5
- function getColumnAlignment(dataType, isFirst) {
6
- if (isFirst)
7
- return 'left';
8
- switch (dataType) {
9
- case 'date':
10
- case 'longText':
11
- return 'left';
12
- case 'advanced':
13
- case 'icon':
14
- case 'shortText':
15
- return 'center';
16
- case 'currency':
17
- case 'number':
18
- return 'right';
19
- }
20
- }
21
- TableColumnHelpers.getColumnAlignment = getColumnAlignment;
22
- function getAllColumns(state, supportedColumns, columnNameMap) {
23
- // If the table offers more columns than the user has configuration settings
24
- // for (or if the user has no configuration settings yet), we'll append them
25
- // to the end (unless they should be pinned by default, in which case we'll
26
- // append them after the other pinned columns). This ensures that new columns
27
- // we add to existing tables over time (1) get displayed even though they
28
- // don't appear in the user's configuration settings yet, and (2) don't
29
- // interrupt their existing setup.
30
- const columnNamesWithoutUserSettings = difference([...supportedColumns.keys()], state.display.columnSettings.map(({ key }) => key));
31
- // Throw out settings for columns no longer offered by the table.
32
- const onlyColumnsWithUserSettings = state.display.columnSettings.filter(({ key }) => supportedColumns.has(key));
33
- const columnsWithUserSettings = onlyColumnsWithUserSettings.map(columnSetting => {
34
- return {
35
- ...columnSetting,
36
- /*
37
- Overwrite the enabled/pinned state if the column should be "always pinned".
38
- Otherwise, respect the saved user settings.
39
- */
40
- enabled: !!supportedColumns.get(columnSetting.key)?.alwaysPinned
41
- ? true
42
- : columnSetting.enabled,
43
- pinned: !!supportedColumns.get(columnSetting.key)?.alwaysPinned
44
- ? true
45
- : columnSetting.pinned,
46
- };
47
- });
48
- const columnsWithoutUserSettings = [
49
- ...columnNamesWithoutUserSettings,
50
- ].map((key) => ({
51
- key,
52
- enabled: true,
53
- preferredWidth: 'auto',
54
- pinned: !!supportedColumns.get(key)?.defaultPinned ||
55
- !!supportedColumns.get(key)?.alwaysPinned,
56
- }));
57
- return orderIntentionally([...columnsWithUserSettings, ...columnsWithoutUserSettings], columnNameMap, supportedColumns);
58
- }
59
- TableColumnHelpers.getAllColumns = getAllColumns;
60
- function orderIntentionally(columns, columnNameMap, columnMetadataMap) {
61
- const [alwaysPinnedColumns, sometimesPinnedColumns] = lodashPartition(columns, column => {
62
- const currentColumnMetadata = columnMetadataMap.get(column.key);
63
- return currentColumnMetadata?.alwaysPinned ?? false;
64
- });
65
- const [pinnedColumns, unpinnedColumns] = lodashPartition(sometimesPinnedColumns, column => column.pinned);
66
- const [enabledUnpinnedColumns, disabledColumns] = lodashPartition(unpinnedColumns, column => column.enabled);
67
- const sortedDisabledColumns = disabledColumns.sort((a, b) => {
68
- const aName = columnNameMap.get(a.key) ?? a.key;
69
- const bName = columnNameMap.get(b.key) ?? b.key;
70
- return aName.localeCompare(bName);
71
- });
72
- return [
73
- ...alwaysPinnedColumns,
74
- ...pinnedColumns,
75
- ...enabledUnpinnedColumns,
76
- ...sortedDisabledColumns,
77
- ];
78
- }
79
- function getAlignment(metadata, index, allowSelection) {
80
- return getColumnAlignment(metadata.dataType, index === 0 && !allowSelection);
81
- }
82
- function resolveColumns(state, supportedColumns, columnNameMap, allowSelection, filterTo, hasHeaders) {
83
- const allColumns = getAllColumns(state, supportedColumns, columnNameMap);
84
- return allColumns
85
- .filter(({ enabled }) => (filterTo === 'enabled' ? enabled : !enabled))
86
- .reduce((fullColumns, settings, i) => {
87
- const metadata = supportedColumns.get(settings.key);
88
- const resolvedWidth = settings.preferredWidth === 'auto'
89
- ? metadata.minWidth
90
- : Math.max(metadata.minWidth, settings.preferredWidth);
91
- const previousColumn = fullColumns[i - 1];
92
- return [
93
- ...fullColumns,
94
- {
95
- ...settings,
96
- ...metadata,
97
- width: resolvedWidth,
98
- left: settings.pinned
99
- ? previousColumn
100
- ? (previousColumn.left || 0) + previousColumn.width
101
- : !!allowSelection || !!hasHeaders
102
- ? 40 // This makes sure the pinned column accounts for the checkbox/chevron column on the far left
103
- : 0
104
- : null,
105
- alignment: getAlignment(metadata, i, !!allowSelection),
106
- },
107
- ];
108
- }, []);
109
- }
110
- TableColumnHelpers.resolveColumns = resolveColumns;
111
- function changeColumnPin(state, columns, columnNameMap, column, pinned) {
112
- const currentColumnMetadata = columns.get(column);
113
- // You cannot change the pinned status of an always pinned column
114
- if (!!currentColumnMetadata?.alwaysPinned) {
115
- return state;
116
- }
117
- const allColumns = getAllColumns(state, columns, columnNameMap);
118
- if (pinned) {
119
- const target = allColumns.find(c => c.key === column);
120
- const wasEnabled = !!target?.enabled;
121
- if (!wasEnabled) {
122
- const enabledCount = allColumns.filter(col => col.enabled).length;
123
- if (enabledCount >= RivTable.ColumnsMaxShown) {
124
- return state; // refuse the pin since it would exceed the max
125
- }
126
- }
127
- }
128
- return {
129
- ...state,
130
- display: {
131
- ...state.display,
132
- columnSettings: orderIntentionally(allColumns.map(c => ({
133
- ...c,
134
- pinned: c.key === column ? pinned : c.pinned,
135
- // Check/enable if being pinned
136
- enabled: c.key === column && pinned ? true : c.enabled,
137
- })), columnNameMap, columns),
138
- },
139
- };
140
- }
141
- TableColumnHelpers.changeColumnPin = changeColumnPin;
142
- function changeColumnsFreezeState(state, columns, columnNameMap, index, freeze) {
143
- const allColumns = getAllColumns(state, columns, columnNameMap);
144
- const updatedColumnSettings = allColumns.map((currentColumnSettings, currentIndex) => {
145
- const currentColumnMetadata = columns.get(currentColumnSettings.key);
146
- const isColumnAlwaysPinned = currentColumnMetadata?.alwaysPinned ?? false;
147
- if (isColumnAlwaysPinned) {
148
- return {
149
- ...currentColumnSettings,
150
- pinned: true,
151
- enabled: true,
152
- };
153
- }
154
- return {
155
- ...currentColumnSettings,
156
- pinned: freeze && currentIndex <= index,
157
- };
158
- });
159
- return {
160
- ...state,
161
- display: {
162
- ...state.display,
163
- columnSettings: updatedColumnSettings,
164
- },
165
- };
166
- }
167
- TableColumnHelpers.changeColumnsFreezeState = changeColumnsFreezeState;
168
- function moveColumnTo(state, columns, columnNameMap, column, position) {
169
- const currentColumnMetadata = columns.get(column);
170
- // You cannot move an always pinned column
171
- if (!!currentColumnMetadata?.alwaysPinned) {
172
- return state;
173
- }
174
- const allColumns = getAllColumns(state, columns, columnNameMap);
175
- const previousIndex = allColumns.findIndex(c => c.key === column);
176
- const lastIndex = position == 'end' ? allColumns.findIndex(c => !c.enabled) : 0;
177
- const newIndex = position == 'start'
178
- ? 0
179
- : lastIndex == -1
180
- ? allColumns.length - 1
181
- : lastIndex;
182
- if (!allColumns[previousIndex].enabled &&
183
- allColumns.filter(col => col.enabled).length >= RivTable.ColumnsMaxShown)
184
- return state;
185
- const movedState = changeColumnOrder(state, columns, columnNameMap, previousIndex, newIndex);
186
- // Make sure the column is enabled
187
- return changeColumnEnabled(movedState, columns, columnNameMap, column, true);
188
- }
189
- TableColumnHelpers.moveColumnTo = moveColumnTo;
190
- function changeColumnOrder(state, columns, columnNameMap, previousIndex, newIndex) {
191
- const allColumns = getAllColumns(state, columns, columnNameMap);
192
- const itemToMove = allColumns[previousIndex];
193
- const currentColumnMetadata = columns.get(itemToMove.key);
194
- // You cannot move an always pinned column
195
- if (!!currentColumnMetadata?.alwaysPinned) {
196
- return state;
197
- }
198
- // First, put the columns in the desired order.
199
- const withoutItem = allColumns.filter((_, i) => i !== previousIndex);
200
- const reordered = [
201
- ...withoutItem.slice(0, newIndex),
202
- itemToMove,
203
- ...withoutItem.slice(newIndex),
204
- ];
205
- // Then, we may need to fix the pins (all pinned columns appear at the
206
- // beginning of the columns array) since the user is allowed to drag
207
- // and drop columns to and from the pinned area. If the user drags a
208
- // column across that threshold, update its pinned status.
209
- const updated = reordered.map((settings, i, arr) => {
210
- if (newIndex === i) {
211
- return {
212
- ...settings,
213
- pinned: settings.pinned
214
- ? arr[i - 1]?.pinned ?? true
215
- : arr[i + 1]?.pinned ?? false,
216
- enabled: settings.enabled
217
- ? arr[i - 1]?.enabled ?? true
218
- : arr[i + 1]?.enabled ?? false,
219
- };
220
- }
221
- else
222
- return settings;
223
- });
224
- const wasDisabled = !itemToMove.enabled;
225
- const becameEnabled = updated[newIndex].enabled;
226
- if (wasDisabled && becameEnabled) {
227
- const enabledCount = allColumns.filter(c => c.enabled).length;
228
- if (enabledCount >= RivTable.ColumnsMaxShown) {
229
- // Refuse the move; keep state as-is
230
- return state;
231
- }
232
- }
233
- return {
234
- ...state,
235
- display: {
236
- ...state.display,
237
- columnSettings: orderIntentionally(updated, columnNameMap, columns),
238
- },
239
- };
240
- }
241
- TableColumnHelpers.changeColumnOrder = changeColumnOrder;
242
- function columnSettingAfterEnabledChange(currentColumnSettings, columnMetadataMap, enabled) {
243
- const currentColumnMetadata = columnMetadataMap.get(currentColumnSettings.key);
244
- const isColumnAlwaysPinned = currentColumnMetadata?.alwaysPinned ?? false;
245
- const isColumnAlwaysVisible = currentColumnMetadata?.alwaysVisible ?? false;
246
- if (isColumnAlwaysPinned) {
247
- return {
248
- ...currentColumnSettings,
249
- enabled: true,
250
- pinned: true,
251
- };
252
- }
253
- if (isColumnAlwaysVisible) {
254
- return {
255
- ...currentColumnSettings,
256
- enabled: true,
257
- };
258
- }
259
- return {
260
- ...currentColumnSettings,
261
- enabled: enabled,
262
- // Unpin if being unchecked
263
- pinned: !enabled ? false : currentColumnSettings.pinned,
264
- };
265
- }
266
- function changeColumnEnabled(state, columns, columnNameMap, column, enabled) {
267
- const allColumns = getAllColumns(state, columns, columnNameMap);
268
- if (enabled &&
269
- allColumns.filter(col => col.enabled).length >= RivTable.ColumnsMaxShown) {
270
- return state;
271
- }
272
- const updatedColumnSettings = allColumns.map(currentColumnSettings => {
273
- if (currentColumnSettings.key !== column) {
274
- return currentColumnSettings;
275
- }
276
- return columnSettingAfterEnabledChange(currentColumnSettings, columns, enabled);
277
- });
278
- return {
279
- ...state,
280
- display: {
281
- ...state.display,
282
- columnSettings: orderIntentionally(updatedColumnSettings, columnNameMap, columns),
283
- },
284
- };
285
- }
286
- TableColumnHelpers.changeColumnEnabled = changeColumnEnabled;
287
- function enableAllColumns(state, columns, columnNameMap, enabled) {
288
- const allColumns = getAllColumns(state, columns, columnNameMap);
289
- if (enabled && allColumns.length > RivTable.ColumnsMaxShown) {
290
- return state;
291
- }
292
- const updatedColumnSettings = allColumns.map(currentColumnSettings => {
293
- return columnSettingAfterEnabledChange(currentColumnSettings, columns, enabled);
294
- });
295
- return {
296
- ...state,
297
- display: {
298
- ...state.display,
299
- columnSettings: orderIntentionally(updatedColumnSettings, columnNameMap, columns),
300
- },
301
- };
302
- }
303
- TableColumnHelpers.enableAllColumns = enableAllColumns;
304
- function changeColumnWidth(state, columns, columnNameMap, column, preferredWidth) {
305
- const allColumns = getAllColumns(state, columns, columnNameMap);
306
- return {
307
- ...state,
308
- display: {
309
- ...state.display,
310
- columnSettings: allColumns.map(c => ({
311
- ...c,
312
- preferredWidth: c.key === column ? preferredWidth : c.preferredWidth,
313
- })),
314
- },
315
- };
316
- }
317
- TableColumnHelpers.changeColumnWidth = changeColumnWidth;
318
- function resetToDefaultColumns(state, columns, columnNameMap, defaultColumnState) {
319
- return {
320
- ...state,
321
- display: {
322
- ...state.display,
323
- columnSettings: orderIntentionally(defaultColumnState, columnNameMap, columns),
324
- },
325
- };
326
- }
327
- TableColumnHelpers.resetToDefaultColumns = resetToDefaultColumns;
328
- function convertInMemoryColumnMetadataMap(columns) {
329
- return new Map([...columns.entries()].map(([name, { orderKey, ...metadata }]) => [
330
- name,
331
- {
332
- ...metadata,
333
- orderable: !!orderKey,
334
- },
335
- ]));
336
- }
337
- TableColumnHelpers.convertInMemoryColumnMetadataMap = convertInMemoryColumnMetadataMap;
338
- function getColumnSettingsColumnList(state) {
339
- const allColumnMetadata = [
340
- ...state.display.columns,
341
- ...state.display.disabledColumns,
342
- ];
343
- const columnsLength = state.display.allColumns.length;
344
- const allColumns = state.display.allColumns.map((column, i) => {
345
- const nextColumnPinned = i + 2 <= columnsLength
346
- ? state.display.allColumns[i + 1].pinned
347
- : false;
348
- const currentColumnMetadata = allColumnMetadata.find(metadata => metadata.key === column.key);
349
- return {
350
- ...column,
351
- resolvedName: state.display.columnNameMap.get(column.key) ?? column.key,
352
- stateIndex: i,
353
- isLastPinnedColumn: column.pinned && !nextColumnPinned,
354
- alwaysVisible: currentColumnMetadata?.alwaysVisible ?? false,
355
- tooltipForHideIcon: currentColumnMetadata?.tooltipForHideIcon,
356
- alwaysPinned: currentColumnMetadata?.alwaysPinned ?? false,
357
- tooltipForReorderIcon: currentColumnMetadata?.tooltipForReorderIcon,
358
- highlightIndices: [],
359
- };
360
- });
361
- return allColumns;
362
- }
363
- TableColumnHelpers.getColumnSettingsColumnList = getColumnSettingsColumnList;
364
- function createUnavailableColumns(unvailableColumnKeys) {
365
- return unvailableColumnKeys.map(columnKey => {
366
- return {
367
- key: columnKey,
368
- resolvedName: columnKey,
369
- enabled: false,
370
- pinned: false,
371
- isLastPinnedColumn: false,
372
- alwaysVisible: false,
373
- alwaysPinned: false,
374
- preferredWidth: 'auto',
375
- highlightIndices: [],
376
- stateIndex: -1,
377
- isUnavailable: true,
378
- };
379
- });
380
- }
381
- TableColumnHelpers.createUnavailableColumns = createUnavailableColumns;
382
- })(TableColumnHelpers || (TableColumnHelpers = {}));
383
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS1oZWxwZXJzL2NvbHVtbi1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxJQUFJLGVBQWUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVsRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXBDLE1BQU0sS0FBVyxrQkFBa0IsQ0FzcEJsQztBQXRwQkQsV0FBaUIsa0JBQWtCO0lBQ2pDLFNBQWdCLGtCQUFrQixDQUNoQyxRQUFpQyxFQUNqQyxPQUFnQjtRQUVoQixJQUFJLE9BQU87WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUMzQixRQUFRLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxVQUFVO2dCQUNiLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxXQUFXO2dCQUNkLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssUUFBUTtnQkFDWCxPQUFPLE9BQU8sQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQWpCZSxxQ0FBa0IscUJBaUJqQyxDQUFBO0lBRUQsU0FBZ0IsYUFBYSxDQU0zQixLQUFxQyxFQUNyQyxnQkFBaUQsRUFDakQsYUFBd0M7UUFFeEMsNEVBQTRFO1FBQzVFLDRFQUE0RTtRQUM1RSwyRUFBMkU7UUFDM0UsNkVBQTZFO1FBQzdFLHlFQUF5RTtRQUN6RSx1RUFBdUU7UUFDdkUsa0NBQWtDO1FBQ2xDLE1BQU0sOEJBQThCLEdBQUcsVUFBVSxDQUMvQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFDNUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQ25ELENBQUM7UUFFRixpRUFBaUU7UUFDakUsTUFBTSwyQkFBMkIsR0FDL0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQzlDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FDMUIsQ0FBQztRQUNKLE1BQU0sdUJBQXVCLEdBQzNCLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUM5QyxPQUFPO2dCQUNMLEdBQUcsYUFBYTtnQkFDaEI7OztrQkFHRTtnQkFDRixPQUFPLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsWUFBWTtvQkFDOUQsQ0FBQyxDQUFDLElBQUk7b0JBQ04sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPO2dCQUN6QixNQUFNLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsWUFBWTtvQkFDN0QsQ0FBQyxDQUFDLElBQUk7b0JBQ04sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNO2FBQ3pCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVMLE1BQU0sMEJBQTBCLEdBQWlDO1lBQy9ELEdBQUcsOEJBQThCO1NBQ2xDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pCLEdBQUc7WUFDSCxPQUFPLEVBQUUsSUFBSTtZQUNiLGNBQWMsRUFBRSxNQUFNO1lBQ3RCLE1BQU0sRUFDSixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLGFBQWE7Z0JBQzFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsWUFBWTtTQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVKLE9BQU8sa0JBQWtCLENBQ3ZCLENBQUMsR0FBRyx1QkFBdUIsRUFBRSxHQUFHLDBCQUEwQixDQUFDLEVBQzNELGFBQWEsRUFDYixnQkFBZ0IsQ0FDakIsQ0FBQztJQUNKLENBQUM7SUE1RGUsZ0NBQWEsZ0JBNEQ1QixDQUFBO0lBRUQsU0FBUyxrQkFBa0IsQ0FDekIsT0FBcUMsRUFDckMsYUFBd0MsRUFDeEMsaUJBQWtEO1FBRWxELE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxzQkFBc0IsQ0FBQyxHQUFHLGVBQWUsQ0FDbkUsT0FBTyxFQUNQLE1BQU0sQ0FBQyxFQUFFO1lBQ1AsTUFBTSxxQkFBcUIsR0FDekIsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVwQyxPQUFPLHFCQUFxQixFQUFFLFlBQVksSUFBSSxLQUFLLENBQUM7UUFDdEQsQ0FBQyxDQUNGLENBQUM7UUFFRixNQUFNLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxHQUFHLGVBQWUsQ0FDdEQsc0JBQXNCLEVBQ3RCLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FDeEIsQ0FBQztRQUVGLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxlQUFlLENBQUMsR0FBRyxlQUFlLENBQy9ELGVBQWUsRUFDZixNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ3pCLENBQUM7UUFFRixNQUFNLHFCQUFxQixHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUQsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNoRCxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ2hELE9BQU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxHQUFHLG1CQUFtQjtZQUN0QixHQUFHLGFBQWE7WUFDaEIsR0FBRyxzQkFBc0I7WUFDekIsR0FBRyxxQkFBcUI7U0FDekIsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLFlBQVksQ0FDbkIsUUFBaUMsRUFDakMsS0FBYSxFQUNiLGNBQXdCO1FBRXhCLE9BQU8sa0JBQWtCLENBQ3ZCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQy9CLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBZ0IsY0FBYyxDQU01QixLQUFxQyxFQUNyQyxnQkFBaUQsRUFDakQsYUFBd0MsRUFDeEMsY0FBbUMsRUFDbkMsUUFBZ0MsRUFDaEMsVUFBbUI7UUFFbkIsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN6RSxPQUFPLFVBQVU7YUFDZCxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN0RSxNQUFNLENBQ0wsQ0FDRSxXQUFxQyxFQUNyQyxRQUFvQyxFQUNwQyxDQUFTLEVBQ2lCLEVBQUU7WUFDNUIsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUUsQ0FBQztZQUNyRCxNQUFNLGFBQWEsR0FDakIsUUFBUSxDQUFDLGNBQWMsS0FBSyxNQUFNO2dCQUNoQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVE7Z0JBQ25CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzNELE1BQU0sY0FBYyxHQUNsQixXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE9BQU87Z0JBQ0wsR0FBRyxXQUFXO2dCQUNkO29CQUNFLEdBQUcsUUFBUTtvQkFDWCxHQUFHLFFBQVE7b0JBQ1gsS0FBSyxFQUFFLGFBQWE7b0JBQ3BCLElBQUksRUFBRSxRQUFRLENBQUMsTUFBTTt3QkFDbkIsQ0FBQyxDQUFDLGNBQWM7NEJBQ2QsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsS0FBSzs0QkFDbkQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLFVBQVU7Z0NBQ2xDLENBQUMsQ0FBQyxFQUFFLENBQUMsNkZBQTZGO2dDQUNsRyxDQUFDLENBQUMsQ0FBQzt3QkFDTCxDQUFDLENBQUMsSUFBSTtvQkFDUixTQUFTLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQztpQkFDdkQ7YUFDRixDQUFDO1FBQ0osQ0FBQyxFQUNELEVBQUUsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQWhEZSxpQ0FBYyxpQkFnRDdCLENBQUE7SUFFRCxTQUFnQixlQUFlLENBTTdCLEtBQXFDLEVBQ3JDLE9BQXdDLEVBQ3hDLGFBQXdDLEVBQ3hDLE1BQVMsRUFDVCxNQUFlO1FBRWYsTUFBTSxxQkFBcUIsR0FDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV0QixpRUFBaUU7UUFDakUsSUFBSSxDQUFDLENBQUMscUJBQXFCLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDMUMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFaEUsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQ2xFLElBQUksWUFBWSxJQUFJLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDN0MsT0FBTyxLQUFLLENBQUMsQ0FBQywrQ0FBK0M7Z0JBQy9ELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixPQUFPLEVBQUU7Z0JBQ1AsR0FBRyxLQUFLLENBQUMsT0FBTztnQkFDaEIsY0FBYyxFQUFFLGtCQUFrQixDQUNoQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDbkIsR0FBRyxDQUFDO29CQUNKLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtvQkFDNUMsK0JBQStCO29CQUMvQixPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO2lCQUN2RCxDQUFDLENBQUMsRUFDSCxhQUFhLEVBQ2IsT0FBTyxDQUNSO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQWpEZSxrQ0FBZSxrQkFpRDlCLENBQUE7SUFFRCxTQUFnQix3QkFBd0IsQ0FNdEMsS0FBcUMsRUFDckMsT0FBd0MsRUFDeEMsYUFBd0MsRUFDeEMsS0FBYSxFQUNiLE1BQWU7UUFFZixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVoRSxNQUFNLHFCQUFxQixHQUFpQyxVQUFVLENBQUMsR0FBRyxDQUN4RSxDQUFDLHFCQUFxQixFQUFFLFlBQVksRUFBRSxFQUFFO1lBQ3RDLE1BQU0scUJBQXFCLEdBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFekMsTUFBTSxvQkFBb0IsR0FDeEIscUJBQXFCLEVBQUUsWUFBWSxJQUFJLEtBQUssQ0FBQztZQUUvQyxJQUFJLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3pCLE9BQU87b0JBQ0wsR0FBRyxxQkFBcUI7b0JBQ3hCLE1BQU0sRUFBRSxJQUFJO29CQUNaLE9BQU8sRUFBRSxJQUFJO2lCQUNkLENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTztnQkFDTCxHQUFHLHFCQUFxQjtnQkFDeEIsTUFBTSxFQUFFLE1BQU0sSUFBSSxZQUFZLElBQUksS0FBSzthQUN4QyxDQUFDO1FBQ0osQ0FBQyxDQUNGLENBQUM7UUFFRixPQUFPO1lBQ0wsR0FBRyxLQUFLO1lBQ1IsT0FBTyxFQUFFO2dCQUNQLEdBQUcsS0FBSyxDQUFDLE9BQU87Z0JBQ2hCLGNBQWMsRUFBRSxxQkFBcUI7YUFDdEM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQTVDZSwyQ0FBd0IsMkJBNEN2QyxDQUFBO0lBRUQsU0FBZ0IsWUFBWSxDQU0xQixLQUFxQyxFQUNyQyxPQUF3QyxFQUN4QyxhQUF3QyxFQUN4QyxNQUFTLEVBQ1QsUUFBeUI7UUFFekIsTUFBTSxxQkFBcUIsR0FDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV0QiwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLENBQUMscUJBQXFCLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDMUMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDaEUsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUM7UUFDbEUsTUFBTSxTQUFTLEdBQ2IsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsTUFBTSxRQUFRLEdBQ1osUUFBUSxJQUFJLE9BQU87WUFDakIsQ0FBQyxDQUFDLENBQUM7WUFDSCxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztnQkFDakIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDdkIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVoQixJQUNFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU87WUFDbEMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLGVBQWU7WUFFeEUsT0FBTyxLQUFLLENBQUM7UUFFZixNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FDbEMsS0FBSyxFQUNMLE9BQU8sRUFDUCxhQUFhLEVBQ2IsYUFBYSxFQUNiLFFBQVEsQ0FDVCxDQUFDO1FBQ0Ysa0NBQWtDO1FBQ2xDLE9BQU8sbUJBQW1CLENBQ3hCLFVBQVUsRUFDVixPQUFPLEVBQ1AsYUFBYSxFQUNiLE1BQU0sRUFDTixJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFwRGUsK0JBQVksZUFvRDNCLENBQUE7SUFFRCxTQUFnQixpQkFBaUIsQ0FNL0IsS0FBcUMsRUFDckMsT0FBd0MsRUFDeEMsYUFBd0MsRUFDeEMsYUFBcUIsRUFDckIsUUFBZ0I7UUFFaEIsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFaEUsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTdDLE1BQU0scUJBQXFCLEdBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLDBDQUEwQztRQUMxQyxJQUFJLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUMxQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCwrQ0FBK0M7UUFDL0MsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxhQUFhLENBQUMsQ0FBQztRQUNyRSxNQUFNLFNBQVMsR0FBRztZQUNoQixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQztZQUNqQyxVQUFVO1lBQ1YsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztTQUMvQixDQUFDO1FBRUYsc0VBQXNFO1FBQ3RFLG9FQUFvRTtRQUNwRSxvRUFBb0U7UUFDcEUsMERBQTBEO1FBQzFELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2pELElBQUksUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNuQixPQUFPO29CQUNMLEdBQUcsUUFBUTtvQkFDWCxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07d0JBQ3JCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sSUFBSSxJQUFJO3dCQUM1QixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLElBQUksS0FBSztvQkFDL0IsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO3dCQUN2QixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksSUFBSTt3QkFDN0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxJQUFJLEtBQUs7aUJBQ2pDLENBQUM7WUFDSixDQUFDOztnQkFBTSxPQUFPLFFBQVEsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sV0FBVyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUN4QyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ2hELElBQUksV0FBVyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQzlELElBQUksWUFBWSxJQUFJLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDN0Msb0NBQW9DO2dCQUNwQyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTztZQUNMLEdBQUcsS0FBSztZQUNSLE9BQU8sRUFBRTtnQkFDUCxHQUFHLEtBQUssQ0FBQyxPQUFPO2dCQUNoQixjQUFjLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUM7YUFDcEU7U0FDRixDQUFDO0lBQ0osQ0FBQztJQWxFZSxvQ0FBaUIsb0JBa0VoQyxDQUFBO0lBRUQsU0FBUywrQkFBK0IsQ0FDdEMscUJBQWlELEVBQ2pELGlCQUFrRCxFQUNsRCxPQUFnQjtRQUVoQixNQUFNLHFCQUFxQixHQUN6QixpQkFBaUIsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkQsTUFBTSxvQkFBb0IsR0FDeEIscUJBQXFCLEVBQUUsWUFBWSxJQUFJLEtBQUssQ0FBQztRQUMvQyxNQUFNLHFCQUFxQixHQUN6QixxQkFBcUIsRUFBRSxhQUFhLElBQUksS0FBSyxDQUFDO1FBRWhELElBQUksb0JBQW9CLEVBQUUsQ0FBQztZQUN6QixPQUFPO2dCQUNMLEdBQUcscUJBQXFCO2dCQUN4QixPQUFPLEVBQUUsSUFBSTtnQkFDYixNQUFNLEVBQUUsSUFBSTthQUNiLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQzFCLE9BQU87Z0JBQ0wsR0FBRyxxQkFBcUI7Z0JBQ3hCLE9BQU8sRUFBRSxJQUFJO2FBQ2QsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPO1lBQ0wsR0FBRyxxQkFBcUI7WUFDeEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsMkJBQTJCO1lBQzNCLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNO1NBQ3hELENBQUM7SUFDSixDQUFDO0lBRUQsU0FBZ0IsbUJBQW1CLENBTWpDLEtBQXFDLEVBQ3JDLE9BQXdDLEVBQ3hDLGFBQXdDLEVBQ3hDLE1BQVMsRUFDVCxPQUFnQjtRQUVoQixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNoRSxJQUNFLE9BQU87WUFDUCxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsZUFBZSxFQUN4RSxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxxQkFBcUIsR0FBaUMsVUFBVSxDQUFDLEdBQUcsQ0FDeEUscUJBQXFCLENBQUMsRUFBRTtZQUN0QixJQUFJLHFCQUFxQixDQUFDLEdBQUcsS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDekMsT0FBTyxxQkFBcUIsQ0FBQztZQUMvQixDQUFDO1lBRUQsT0FBTywrQkFBK0IsQ0FDcEMscUJBQXFCLEVBQ3JCLE9BQU8sRUFDUCxPQUFPLENBQ1IsQ0FBQztRQUNKLENBQUMsQ0FDRixDQUFDO1FBRUYsT0FBTztZQUNMLEdBQUcsS0FBSztZQUNSLE9BQU8sRUFBRTtnQkFDUCxHQUFHLEtBQUssQ0FBQyxPQUFPO2dCQUNoQixjQUFjLEVBQUUsa0JBQWtCLENBQ2hDLHFCQUFxQixFQUNyQixhQUFhLEVBQ2IsT0FBTyxDQUNSO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQTdDZSxzQ0FBbUIsc0JBNkNsQyxDQUFBO0lBRUQsU0FBZ0IsZ0JBQWdCLENBTTlCLEtBQXFDLEVBQ3JDLE9BQXdDLEVBQ3hDLGFBQXdDLEVBQ3hDLE9BQWdCO1FBRWhCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2hFLElBQUksT0FBTyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0scUJBQXFCLEdBQWlDLFVBQVUsQ0FBQyxHQUFHLENBQ3hFLHFCQUFxQixDQUFDLEVBQUU7WUFDdEIsT0FBTywrQkFBK0IsQ0FDcEMscUJBQXFCLEVBQ3JCLE9BQU8sRUFDUCxPQUFPLENBQ1IsQ0FBQztRQUNKLENBQUMsQ0FDRixDQUFDO1FBRUYsT0FBTztZQUNMLEdBQUcsS0FBSztZQUNSLE9BQU8sRUFBRTtnQkFDUCxHQUFHLEtBQUssQ0FBQyxPQUFPO2dCQUNoQixjQUFjLEVBQUUsa0JBQWtCLENBQ2hDLHFCQUFxQixFQUNyQixhQUFhLEVBQ2IsT0FBTyxDQUNSO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQXJDZSxtQ0FBZ0IsbUJBcUMvQixDQUFBO0lBRUQsU0FBZ0IsaUJBQWlCLENBTS9CLEtBQXFDLEVBQ3JDLE9BQXdDLEVBQ3hDLGFBQXdDLEVBQ3hDLE1BQVMsRUFDVCxjQUE0RDtRQUU1RCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNoRSxPQUFPO1lBQ0wsR0FBRyxLQUFLO1lBQ1IsT0FBTyxFQUFFO2dCQUNQLEdBQUcsS0FBSyxDQUFDLE9BQU87Z0JBQ2hCLGNBQWMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDbkMsR0FBRyxDQUFDO29CQUNKLGNBQWMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYztpQkFDckUsQ0FBQyxDQUFDO2FBQ0o7U0FDRixDQUFDO0lBQ0osQ0FBQztJQXZCZSxvQ0FBaUIsb0JBdUJoQyxDQUFBO0lBRUQsU0FBZ0IscUJBQXFCLENBTW5DLEtBQXFDLEVBQ3JDLE9BQXdDLEVBQ3hDLGFBQXdDLEVBQ3hDLGtCQUFnRDtRQUVoRCxPQUFPO1lBQ0wsR0FBRyxLQUFLO1lBQ1IsT0FBTyxFQUFFO2dCQUNQLEdBQUcsS0FBSyxDQUFDLE9BQU87Z0JBQ2hCLGNBQWMsRUFBRSxrQkFBa0IsQ0FDaEMsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixPQUFPLENBQ1I7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBdEJlLHdDQUFxQix3QkFzQnBDLENBQUE7SUFFRCxTQUFnQixnQ0FBZ0MsQ0FJOUMsT0FBbUQ7UUFFbkQsT0FBTyxJQUFJLEdBQUcsQ0FDWixDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNoRSxJQUFJO1lBQ0o7Z0JBQ0UsR0FBRyxRQUFRO2dCQUNYLFNBQVMsRUFBRSxDQUFDLENBQUMsUUFBUTthQUN0QjtTQUNGLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQWZlLG1EQUFnQyxtQ0FlL0MsQ0FBQTtJQWVELFNBQWdCLDJCQUEyQixDQUt6QyxLQUFxQztRQUNyQyxNQUFNLGlCQUFpQixHQUFHO1lBQ3hCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlO1NBQ2pDLENBQUM7UUFDRixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDdEQsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FDNUQsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDWixNQUFNLGdCQUFnQixHQUNwQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGFBQWE7Z0JBQ3BCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtnQkFDeEMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUVaLE1BQU0scUJBQXFCLEdBQ3pCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRWxFLE9BQU87Z0JBQ0wsR0FBRyxNQUFNO2dCQUNULFlBQVksRUFDVixLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHO2dCQUMzRCxVQUFVLEVBQUUsQ0FBQztnQkFDYixrQkFBa0IsRUFBRSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCO2dCQUN0RCxhQUFhLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxJQUFJLEtBQUs7Z0JBQzVELGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGtCQUFrQjtnQkFDN0QsWUFBWSxFQUFFLHFCQUFxQixFQUFFLFlBQVksSUFBSSxLQUFLO2dCQUMxRCxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUI7Z0JBQ25FLGdCQUFnQixFQUFFLEVBQUU7YUFDckIsQ0FBQztRQUNKLENBQUMsQ0FDRixDQUFDO1FBRUYsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQXJDZSw4Q0FBMkIsOEJBcUMxQyxDQUFBO0lBRUQsU0FBZ0Isd0JBQXdCLENBS3RDLG9CQUF5QjtRQUN6QixPQUFPLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMxQyxPQUFPO2dCQUNMLEdBQUcsRUFBRSxTQUFTO2dCQUNkLFlBQVksRUFBRSxTQUFTO2dCQUN2QixPQUFPLEVBQUUsS0FBSztnQkFDZCxNQUFNLEVBQUUsS0FBSztnQkFDYixrQkFBa0IsRUFBRSxLQUFLO2dCQUN6QixhQUFhLEVBQUUsS0FBSztnQkFDcEIsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLGNBQWMsRUFBRSxNQUFNO2dCQUN0QixnQkFBZ0IsRUFBRSxFQUFFO2dCQUNwQixVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUNkLGFBQWEsRUFBRSxJQUFJO2FBQ3BCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFyQmUsMkNBQXdCLDJCQXFCdkMsQ0FBQTtBQUNILENBQUMsRUF0cEJnQixrQkFBa0IsS0FBbEIsa0JBQWtCLFFBc3BCbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkaWZmZXJlbmNlLCBwYXJ0aXRpb24gYXMgbG9kYXNoUGFydGl0aW9uIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEhpZ2hsaWdodENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3Zpc3VhbGl6YXRpb24vaGlnaGxpZ2h0L2hpZ2hsaWdodC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUml2VGFibGUgfSBmcm9tICcuLi9zdGF0ZSc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgVGFibGVDb2x1bW5IZWxwZXJzIHtcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtbkFsaWdubWVudChcbiAgICBkYXRhVHlwZTogUml2VGFibGUuQ29sdW1uRGF0YVR5cGUsXG4gICAgaXNGaXJzdDogYm9vbGVhbixcbiAgKTogUml2VGFibGUuQ29sdW1uQWxpZ25tZW50IHtcbiAgICBpZiAoaXNGaXJzdCkgcmV0dXJuICdsZWZ0JztcbiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ2xvbmdUZXh0JzpcbiAgICAgICAgcmV0dXJuICdsZWZ0JztcbiAgICAgIGNhc2UgJ2FkdmFuY2VkJzpcbiAgICAgIGNhc2UgJ2ljb24nOlxuICAgICAgY2FzZSAnc2hvcnRUZXh0JzpcbiAgICAgICAgcmV0dXJuICdjZW50ZXInO1xuICAgICAgY2FzZSAnY3VycmVuY3knOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgcmV0dXJuICdyaWdodCc7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldEFsbENvbHVtbnM8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIHN1cHBvcnRlZENvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgKTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSB7XG4gICAgLy8gSWYgdGhlIHRhYmxlIG9mZmVycyBtb3JlIGNvbHVtbnMgdGhhbiB0aGUgdXNlciBoYXMgY29uZmlndXJhdGlvbiBzZXR0aW5nc1xuICAgIC8vIGZvciAob3IgaWYgdGhlIHVzZXIgaGFzIG5vIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgeWV0KSwgd2UnbGwgYXBwZW5kIHRoZW1cbiAgICAvLyB0byB0aGUgZW5kICh1bmxlc3MgdGhleSBzaG91bGQgYmUgcGlubmVkIGJ5IGRlZmF1bHQsIGluIHdoaWNoIGNhc2Ugd2UnbGxcbiAgICAvLyBhcHBlbmQgdGhlbSBhZnRlciB0aGUgb3RoZXIgcGlubmVkIGNvbHVtbnMpLiBUaGlzIGVuc3VyZXMgdGhhdCBuZXcgY29sdW1uc1xuICAgIC8vIHdlIGFkZCB0byBleGlzdGluZyB0YWJsZXMgb3ZlciB0aW1lICgxKSBnZXQgZGlzcGxheWVkIGV2ZW4gdGhvdWdoIHRoZXlcbiAgICAvLyBkb24ndCBhcHBlYXIgaW4gdGhlIHVzZXIncyBjb25maWd1cmF0aW9uIHNldHRpbmdzIHlldCwgYW5kICgyKSBkb24ndFxuICAgIC8vIGludGVycnVwdCB0aGVpciBleGlzdGluZyBzZXR1cC5cbiAgICBjb25zdCBjb2x1bW5OYW1lc1dpdGhvdXRVc2VyU2V0dGluZ3MgPSBkaWZmZXJlbmNlKFxuICAgICAgWy4uLnN1cHBvcnRlZENvbHVtbnMua2V5cygpXSxcbiAgICAgIHN0YXRlLmRpc3BsYXkuY29sdW1uU2V0dGluZ3MubWFwKCh7IGtleSB9KSA9PiBrZXkpLFxuICAgICk7XG5cbiAgICAvLyBUaHJvdyBvdXQgc2V0dGluZ3MgZm9yIGNvbHVtbnMgbm8gbG9uZ2VyIG9mZmVyZWQgYnkgdGhlIHRhYmxlLlxuICAgIGNvbnN0IG9ubHlDb2x1bW5zV2l0aFVzZXJTZXR0aW5nczogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSA9XG4gICAgICBzdGF0ZS5kaXNwbGF5LmNvbHVtblNldHRpbmdzLmZpbHRlcigoeyBrZXkgfSkgPT5cbiAgICAgICAgc3VwcG9ydGVkQ29sdW1ucy5oYXMoa2V5KSxcbiAgICAgICk7XG4gICAgY29uc3QgY29sdW1uc1dpdGhVc2VyU2V0dGluZ3M6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10gPVxuICAgICAgb25seUNvbHVtbnNXaXRoVXNlclNldHRpbmdzLm1hcChjb2x1bW5TZXR0aW5nID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb2x1bW5TZXR0aW5nLFxuICAgICAgICAgIC8qXG4gICAgICAgICAgICBPdmVyd3JpdGUgdGhlIGVuYWJsZWQvcGlubmVkIHN0YXRlIGlmIHRoZSBjb2x1bW4gc2hvdWxkIGJlIFwiYWx3YXlzIHBpbm5lZFwiLlxuICAgICAgICAgICAgT3RoZXJ3aXNlLCByZXNwZWN0IHRoZSBzYXZlZCB1c2VyIHNldHRpbmdzLlxuICAgICAgICAgICovXG4gICAgICAgICAgZW5hYmxlZDogISFzdXBwb3J0ZWRDb2x1bW5zLmdldChjb2x1bW5TZXR0aW5nLmtleSk/LmFsd2F5c1Bpbm5lZFxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IGNvbHVtblNldHRpbmcuZW5hYmxlZCxcbiAgICAgICAgICBwaW5uZWQ6ICEhc3VwcG9ydGVkQ29sdW1ucy5nZXQoY29sdW1uU2V0dGluZy5rZXkpPy5hbHdheXNQaW5uZWRcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiBjb2x1bW5TZXR0aW5nLnBpbm5lZCxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgY29sdW1uc1dpdGhvdXRVc2VyU2V0dGluZ3M6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10gPSBbXG4gICAgICAuLi5jb2x1bW5OYW1lc1dpdGhvdXRVc2VyU2V0dGluZ3MsXG4gICAgXS5tYXAoKGtleTogQykgPT4gKHtcbiAgICAgIGtleSxcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBwcmVmZXJyZWRXaWR0aDogJ2F1dG8nLFxuICAgICAgcGlubmVkOlxuICAgICAgICAhIXN1cHBvcnRlZENvbHVtbnMuZ2V0KGtleSk/LmRlZmF1bHRQaW5uZWQgfHxcbiAgICAgICAgISFzdXBwb3J0ZWRDb2x1bW5zLmdldChrZXkpPy5hbHdheXNQaW5uZWQsXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIG9yZGVySW50ZW50aW9uYWxseShcbiAgICAgIFsuLi5jb2x1bW5zV2l0aFVzZXJTZXR0aW5ncywgLi4uY29sdW1uc1dpdGhvdXRVc2VyU2V0dGluZ3NdLFxuICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgIHN1cHBvcnRlZENvbHVtbnMsXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9yZGVySW50ZW50aW9uYWxseTxDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uPihcbiAgICBjb2x1bW5zOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdLFxuICAgIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gICAgY29sdW1uTWV0YWRhdGFNYXA6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gICk6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10ge1xuICAgIGNvbnN0IFthbHdheXNQaW5uZWRDb2x1bW5zLCBzb21ldGltZXNQaW5uZWRDb2x1bW5zXSA9IGxvZGFzaFBhcnRpdGlvbihcbiAgICAgIGNvbHVtbnMsXG4gICAgICBjb2x1bW4gPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50Q29sdW1uTWV0YWRhdGE6IFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhIHwgdW5kZWZpbmVkID1cbiAgICAgICAgICBjb2x1bW5NZXRhZGF0YU1hcC5nZXQoY29sdW1uLmtleSk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRDb2x1bW5NZXRhZGF0YT8uYWx3YXlzUGlubmVkID8/IGZhbHNlO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgW3Bpbm5lZENvbHVtbnMsIHVucGlubmVkQ29sdW1uc10gPSBsb2Rhc2hQYXJ0aXRpb24oXG4gICAgICBzb21ldGltZXNQaW5uZWRDb2x1bW5zLFxuICAgICAgY29sdW1uID0+IGNvbHVtbi5waW5uZWQsXG4gICAgKTtcblxuICAgIGNvbnN0IFtlbmFibGVkVW5waW5uZWRDb2x1bW5zLCBkaXNhYmxlZENvbHVtbnNdID0gbG9kYXNoUGFydGl0aW9uKFxuICAgICAgdW5waW5uZWRDb2x1bW5zLFxuICAgICAgY29sdW1uID0+IGNvbHVtbi5lbmFibGVkLFxuICAgICk7XG5cbiAgICBjb25zdCBzb3J0ZWREaXNhYmxlZENvbHVtbnMgPSBkaXNhYmxlZENvbHVtbnMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgYU5hbWUgPSBjb2x1bW5OYW1lTWFwLmdldChhLmtleSkgPz8gYS5rZXk7XG4gICAgICBjb25zdCBiTmFtZSA9IGNvbHVtbk5hbWVNYXAuZ2V0KGIua2V5KSA/PyBiLmtleTtcbiAgICAgIHJldHVybiBhTmFtZS5sb2NhbGVDb21wYXJlKGJOYW1lKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBbXG4gICAgICAuLi5hbHdheXNQaW5uZWRDb2x1bW5zLFxuICAgICAgLi4ucGlubmVkQ29sdW1ucyxcbiAgICAgIC4uLmVuYWJsZWRVbnBpbm5lZENvbHVtbnMsXG4gICAgICAuLi5zb3J0ZWREaXNhYmxlZENvbHVtbnMsXG4gICAgXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFsaWdubWVudChcbiAgICBtZXRhZGF0YTogUml2VGFibGUuQ29sdW1uTWV0YWRhdGEsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhbGxvd1NlbGVjdGlvbj86IGJvb2xlYW4sXG4gICk6IFJpdlRhYmxlLkNvbHVtbkFsaWdubWVudCB7XG4gICAgcmV0dXJuIGdldENvbHVtbkFsaWdubWVudChcbiAgICAgIG1ldGFkYXRhLmRhdGFUeXBlLFxuICAgICAgaW5kZXggPT09IDAgJiYgIWFsbG93U2VsZWN0aW9uLFxuICAgICk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbHVtbnM8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIHN1cHBvcnRlZENvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgICBhbGxvd1NlbGVjdGlvbjogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgICBmaWx0ZXJUbzogJ2VuYWJsZWQnIHwgJ2Rpc2FibGVkJyxcbiAgICBoYXNIZWFkZXJzOiBib29sZWFuLFxuICApOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+W10ge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBzdXBwb3J0ZWRDb2x1bW5zLCBjb2x1bW5OYW1lTWFwKTtcbiAgICByZXR1cm4gYWxsQ29sdW1uc1xuICAgICAgLmZpbHRlcigoeyBlbmFibGVkIH0pID0+IChmaWx0ZXJUbyA9PT0gJ2VuYWJsZWQnID8gZW5hYmxlZCA6ICFlbmFibGVkKSlcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChcbiAgICAgICAgICBmdWxsQ29sdW1uczogUml2VGFibGUuRnVsbENvbHVtbjxDPltdLFxuICAgICAgICAgIHNldHRpbmdzOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPixcbiAgICAgICAgICBpOiBudW1iZXIsXG4gICAgICAgICk6IFJpdlRhYmxlLkZ1bGxDb2x1bW48Qz5bXSA9PiB7XG4gICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBzdXBwb3J0ZWRDb2x1bW5zLmdldChzZXR0aW5ncy5rZXkpITtcbiAgICAgICAgICBjb25zdCByZXNvbHZlZFdpZHRoID1cbiAgICAgICAgICAgIHNldHRpbmdzLnByZWZlcnJlZFdpZHRoID09PSAnYXV0bydcbiAgICAgICAgICAgICAgPyBtZXRhZGF0YS5taW5XaWR0aFxuICAgICAgICAgICAgICA6IE1hdGgubWF4KG1ldGFkYXRhLm1pbldpZHRoLCBzZXR0aW5ncy5wcmVmZXJyZWRXaWR0aCk7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNDb2x1bW46IFJpdlRhYmxlLkZ1bGxDb2x1bW48Qz4gfCB1bmRlZmluZWQgPVxuICAgICAgICAgICAgZnVsbENvbHVtbnNbaSAtIDFdO1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi5mdWxsQ29sdW1ucyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICAgIC4uLm1ldGFkYXRhLFxuICAgICAgICAgICAgICB3aWR0aDogcmVzb2x2ZWRXaWR0aCxcbiAgICAgICAgICAgICAgbGVmdDogc2V0dGluZ3MucGlubmVkXG4gICAgICAgICAgICAgICAgPyBwcmV2aW91c0NvbHVtblxuICAgICAgICAgICAgICAgICAgPyAocHJldmlvdXNDb2x1bW4ubGVmdCB8fCAwKSArIHByZXZpb3VzQ29sdW1uLndpZHRoXG4gICAgICAgICAgICAgICAgICA6ICEhYWxsb3dTZWxlY3Rpb24gfHwgISFoYXNIZWFkZXJzXG4gICAgICAgICAgICAgICAgICA/IDQwIC8vIFRoaXMgbWFrZXMgc3VyZSB0aGUgcGlubmVkIGNvbHVtbiBhY2NvdW50cyBmb3IgdGhlIGNoZWNrYm94L2NoZXZyb24gY29sdW1uIG9uIHRoZSBmYXIgbGVmdFxuICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdldEFsaWdubWVudChtZXRhZGF0YSwgaSwgISFhbGxvd1NlbGVjdGlvbiksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF07XG4gICAgICAgIH0sXG4gICAgICAgIFtdLFxuICAgICAgKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VDb2x1bW5QaW48XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgICBjb2x1bW46IEMsXG4gICAgcGlubmVkOiBib29sZWFuLFxuICApOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIGNvbnN0IGN1cnJlbnRDb2x1bW5NZXRhZGF0YTogUml2VGFibGUuQ29sdW1uTWV0YWRhdGEgfCB1bmRlZmluZWQgPVxuICAgICAgY29sdW1ucy5nZXQoY29sdW1uKTtcblxuICAgIC8vIFlvdSBjYW5ub3QgY2hhbmdlIHRoZSBwaW5uZWQgc3RhdHVzIG9mIGFuIGFsd2F5cyBwaW5uZWQgY29sdW1uXG4gICAgaWYgKCEhY3VycmVudENvbHVtbk1ldGFkYXRhPy5hbHdheXNQaW5uZWQpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG5cbiAgICBpZiAocGlubmVkKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBhbGxDb2x1bW5zLmZpbmQoYyA9PiBjLmtleSA9PT0gY29sdW1uKTtcbiAgICAgIGNvbnN0IHdhc0VuYWJsZWQgPSAhIXRhcmdldD8uZW5hYmxlZDtcbiAgICAgIGlmICghd2FzRW5hYmxlZCkge1xuICAgICAgICBjb25zdCBlbmFibGVkQ291bnQgPSBhbGxDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLmVuYWJsZWQpLmxlbmd0aDtcbiAgICAgICAgaWYgKGVuYWJsZWRDb3VudCA+PSBSaXZUYWJsZS5Db2x1bW5zTWF4U2hvd24pIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGU7IC8vIHJlZnVzZSB0aGUgcGluIHNpbmNlIGl0IHdvdWxkIGV4Y2VlZCB0aGUgbWF4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgICAgICAgYWxsQ29sdW1ucy5tYXAoYyA9PiAoe1xuICAgICAgICAgICAgLi4uYyxcbiAgICAgICAgICAgIHBpbm5lZDogYy5rZXkgPT09IGNvbHVtbiA/IHBpbm5lZCA6IGMucGlubmVkLFxuICAgICAgICAgICAgLy8gQ2hlY2svZW5hYmxlIGlmIGJlaW5nIHBpbm5lZFxuICAgICAgICAgICAgZW5hYmxlZDogYy5rZXkgPT09IGNvbHVtbiAmJiBwaW5uZWQgPyB0cnVlIDogYy5lbmFibGVkLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY2hhbmdlQ29sdW1uc0ZyZWV6ZVN0YXRlPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICAgIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBmcmVlemU6IGJvb2xlYW4sXG4gICk6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuXG4gICAgY29uc3QgdXBkYXRlZENvbHVtblNldHRpbmdzOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdID0gYWxsQ29sdW1ucy5tYXAoXG4gICAgICAoY3VycmVudENvbHVtblNldHRpbmdzLCBjdXJyZW50SW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudENvbHVtbk1ldGFkYXRhOiBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YSB8IHVuZGVmaW5lZCA9XG4gICAgICAgICAgY29sdW1ucy5nZXQoY3VycmVudENvbHVtblNldHRpbmdzLmtleSk7XG5cbiAgICAgICAgY29uc3QgaXNDb2x1bW5BbHdheXNQaW5uZWQ6IGJvb2xlYW4gPVxuICAgICAgICAgIGN1cnJlbnRDb2x1bW5NZXRhZGF0YT8uYWx3YXlzUGlubmVkID8/IGZhbHNlO1xuXG4gICAgICAgIGlmIChpc0NvbHVtbkFsd2F5c1Bpbm5lZCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jdXJyZW50Q29sdW1uU2V0dGluZ3MsXG4gICAgICAgICAgICBwaW5uZWQ6IHRydWUsXG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmN1cnJlbnRDb2x1bW5TZXR0aW5ncyxcbiAgICAgICAgICBwaW5uZWQ6IGZyZWV6ZSAmJiBjdXJyZW50SW5kZXggPD0gaW5kZXgsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgIGNvbHVtblNldHRpbmdzOiB1cGRhdGVkQ29sdW1uU2V0dGluZ3MsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gbW92ZUNvbHVtblRvPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICAgIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gICAgY29sdW1uOiBDLFxuICAgIHBvc2l0aW9uOiAnc3RhcnQnIHwgJ2VuZCcsXG4gICk6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gICAgY29uc3QgY3VycmVudENvbHVtbk1ldGFkYXRhOiBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YSB8IHVuZGVmaW5lZCA9XG4gICAgICBjb2x1bW5zLmdldChjb2x1bW4pO1xuXG4gICAgLy8gWW91IGNhbm5vdCBtb3ZlIGFuIGFsd2F5cyBwaW5uZWQgY29sdW1uXG4gICAgaWYgKCEhY3VycmVudENvbHVtbk1ldGFkYXRhPy5hbHdheXNQaW5uZWQpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gICAgY29uc3QgcHJldmlvdXNJbmRleCA9IGFsbENvbHVtbnMuZmluZEluZGV4KGMgPT4gYy5rZXkgPT09IGNvbHVtbik7XG4gICAgY29uc3QgbGFzdEluZGV4ID1cbiAgICAgIHBvc2l0aW9uID09ICdlbmQnID8gYWxsQ29sdW1ucy5maW5kSW5kZXgoYyA9PiAhYy5lbmFibGVkKSA6IDA7XG4gICAgY29uc3QgbmV3SW5kZXggPVxuICAgICAgcG9zaXRpb24gPT0gJ3N0YXJ0J1xuICAgICAgICA/IDBcbiAgICAgICAgOiBsYXN0SW5kZXggPT0gLTFcbiAgICAgICAgPyBhbGxDb2x1bW5zLmxlbmd0aCAtIDFcbiAgICAgICAgOiBsYXN0SW5kZXg7XG5cbiAgICBpZiAoXG4gICAgICAhYWxsQ29sdW1uc1twcmV2aW91c0luZGV4XS5lbmFibGVkICYmXG4gICAgICBhbGxDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLmVuYWJsZWQpLmxlbmd0aCA+PSBSaXZUYWJsZS5Db2x1bW5zTWF4U2hvd25cbiAgICApXG4gICAgICByZXR1cm4gc3RhdGU7XG5cbiAgICBjb25zdCBtb3ZlZFN0YXRlID0gY2hhbmdlQ29sdW1uT3JkZXIoXG4gICAgICBzdGF0ZSxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgcHJldmlvdXNJbmRleCxcbiAgICAgIG5ld0luZGV4LFxuICAgICk7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBjb2x1bW4gaXMgZW5hYmxlZFxuICAgIHJldHVybiBjaGFuZ2VDb2x1bW5FbmFibGVkKFxuICAgICAgbW92ZWRTdGF0ZSxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgY29sdW1uLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUNvbHVtbk9yZGVyPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICAgIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gICAgcHJldmlvdXNJbmRleDogbnVtYmVyLFxuICAgIG5ld0luZGV4OiBudW1iZXIsXG4gICk6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuXG4gICAgY29uc3QgaXRlbVRvTW92ZSA9IGFsbENvbHVtbnNbcHJldmlvdXNJbmRleF07XG5cbiAgICBjb25zdCBjdXJyZW50Q29sdW1uTWV0YWRhdGE6IFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhIHwgdW5kZWZpbmVkID1cbiAgICAgIGNvbHVtbnMuZ2V0KGl0ZW1Ub01vdmUua2V5KTtcbiAgICAvLyBZb3UgY2Fubm90IG1vdmUgYW4gYWx3YXlzIHBpbm5lZCBjb2x1bW5cbiAgICBpZiAoISFjdXJyZW50Q29sdW1uTWV0YWRhdGE/LmFsd2F5c1Bpbm5lZCkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIC8vIEZpcnN0LCBwdXQgdGhlIGNvbHVtbnMgaW4gdGhlIGRlc2lyZWQgb3JkZXIuXG4gICAgY29uc3Qgd2l0aG91dEl0ZW0gPSBhbGxDb2x1bW5zLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gcHJldmlvdXNJbmRleCk7XG4gICAgY29uc3QgcmVvcmRlcmVkID0gW1xuICAgICAgLi4ud2l0aG91dEl0ZW0uc2xpY2UoMCwgbmV3SW5kZXgpLFxuICAgICAgaXRlbVRvTW92ZSxcbiAgICAgIC4uLndpdGhvdXRJdGVtLnNsaWNlKG5ld0luZGV4KSxcbiAgICBdO1xuXG4gICAgLy8gVGhlbiwgd2UgbWF5IG5lZWQgdG8gZml4IHRoZSBwaW5zIChhbGwgcGlubmVkIGNvbHVtbnMgYXBwZWFyIGF0IHRoZVxuICAgIC8vIGJlZ2lubmluZyBvZiB0aGUgY29sdW1ucyBhcnJheSkgc2luY2UgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBkcmFnXG4gICAgLy8gYW5kIGRyb3AgY29sdW1ucyB0byBhbmQgZnJvbSB0aGUgcGlubmVkIGFyZWEuIElmIHRoZSB1c2VyIGRyYWdzIGFcbiAgICAvLyBjb2x1bW4gYWNyb3NzIHRoYXQgdGhyZXNob2xkLCB1cGRhdGUgaXRzIHBpbm5lZCBzdGF0dXMuXG4gICAgY29uc3QgdXBkYXRlZCA9IHJlb3JkZXJlZC5tYXAoKHNldHRpbmdzLCBpLCBhcnIpID0+IHtcbiAgICAgIGlmIChuZXdJbmRleCA9PT0gaSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgIHBpbm5lZDogc2V0dGluZ3MucGlubmVkXG4gICAgICAgICAgICA/IGFycltpIC0gMV0/LnBpbm5lZCA/PyB0cnVlXG4gICAgICAgICAgICA6IGFycltpICsgMV0/LnBpbm5lZCA/PyBmYWxzZSxcbiAgICAgICAgICBlbmFibGVkOiBzZXR0aW5ncy5lbmFibGVkXG4gICAgICAgICAgICA/IGFycltpIC0gMV0/LmVuYWJsZWQgPz8gdHJ1ZVxuICAgICAgICAgICAgOiBhcnJbaSArIDFdPy5lbmFibGVkID8/IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHJldHVybiBzZXR0aW5ncztcbiAgICB9KTtcblxuICAgIGNvbnN0IHdhc0Rpc2FibGVkID0gIWl0ZW1Ub01vdmUuZW5hYmxlZDtcbiAgICBjb25zdCBiZWNhbWVFbmFibGVkID0gdXBkYXRlZFtuZXdJbmRleF0uZW5hYmxlZDtcbiAgICBpZiAod2FzRGlzYWJsZWQgJiYgYmVjYW1lRW5hYmxlZCkge1xuICAgICAgY29uc3QgZW5hYmxlZENvdW50ID0gYWxsQ29sdW1ucy5maWx0ZXIoYyA9PiBjLmVuYWJsZWQpLmxlbmd0aDtcbiAgICAgIGlmIChlbmFibGVkQ291bnQgPj0gUml2VGFibGUuQ29sdW1uc01heFNob3duKSB7XG4gICAgICAgIC8vIFJlZnVzZSB0aGUgbW92ZTsga2VlcCBzdGF0ZSBhcy1pc1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGlzcGxheToge1xuICAgICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgICBjb2x1bW5TZXR0aW5nczogb3JkZXJJbnRlbnRpb25hbGx5KHVwZGF0ZWQsIGNvbHVtbk5hbWVNYXAsIGNvbHVtbnMpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY29sdW1uU2V0dGluZ0FmdGVyRW5hYmxlZENoYW5nZTxDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uPihcbiAgICBjdXJyZW50Q29sdW1uU2V0dGluZ3M6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+LFxuICAgIGNvbHVtbk1ldGFkYXRhTWFwOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICAgIGVuYWJsZWQ6IGJvb2xlYW4sXG4gICk6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+IHtcbiAgICBjb25zdCBjdXJyZW50Q29sdW1uTWV0YWRhdGE6IFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhIHwgdW5kZWZpbmVkID1cbiAgICAgIGNvbHVtbk1ldGFkYXRhTWFwLmdldChjdXJyZW50Q29sdW1uU2V0dGluZ3Mua2V5KTtcblxuICAgIGNvbnN0IGlzQ29sdW1uQWx3YXlzUGlubmVkOiBib29sZWFuID1cbiAgICAgIGN1cnJlbnRDb2x1bW5NZXRhZGF0YT8uYWx3YXlzUGlubmVkID8/IGZhbHNlO1xuICAgIGNvbnN0IGlzQ29sdW1uQWx3YXlzVmlzaWJsZTogYm9vbGVhbiA9XG4gICAgICBjdXJyZW50Q29sdW1uTWV0YWRhdGE/LmFsd2F5c1Zpc2libGUgPz8gZmFsc2U7XG5cbiAgICBpZiAoaXNDb2x1bW5BbHdheXNQaW5uZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmN1cnJlbnRDb2x1bW5TZXR0aW5ncyxcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgcGlubmVkOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGlzQ29sdW1uQWx3YXlzVmlzaWJsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY3VycmVudENvbHVtblNldHRpbmdzLFxuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY3VycmVudENvbHVtblNldHRpbmdzLFxuICAgICAgZW5hYmxlZDogZW5hYmxlZCxcbiAgICAgIC8vIFVucGluIGlmIGJlaW5nIHVuY2hlY2tlZFxuICAgICAgcGlubmVkOiAhZW5hYmxlZCA/IGZhbHNlIDogY3VycmVudENvbHVtblNldHRpbmdzLnBpbm5lZCxcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUNvbHVtbkVuYWJsZWQ8XG4gICAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbiAgPihcbiAgICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICAgIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gICAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgICBjb2x1bW46IEMsXG4gICAgZW5hYmxlZDogYm9vbGVhbixcbiAgKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gICAgaWYgKFxuICAgICAgZW5hYmxlZCAmJlxuICAgICAgYWxsQ29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5lbmFibGVkKS5sZW5ndGggPj0gUml2VGFibGUuQ29sdW1uc01heFNob3duXG4gICAgKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlZENvbHVtblNldHRpbmdzOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdID0gYWxsQ29sdW1ucy5tYXAoXG4gICAgICBjdXJyZW50Q29sdW1uU2V0dGluZ3MgPT4ge1xuICAgICAgICBpZiAoY3VycmVudENvbHVtblNldHRpbmdzLmtleSAhPT0gY29sdW1uKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnRDb2x1bW5TZXR0aW5ncztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb2x1bW5TZXR0aW5nQWZ0ZXJFbmFibGVkQ2hhbmdlKFxuICAgICAgICAgIGN1cnJlbnRDb2x1bW5TZXR0aW5ncyxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGVuYWJsZWQsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgICAgICAgdXBkYXRlZENvbHVtblNldHRpbmdzLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBlbmFibGVBbGxDb2x1bW5zPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICAgIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gICAgZW5hYmxlZDogYm9vbGVhbixcbiAgKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gICAgaWYgKGVuYWJsZWQgJiYgYWxsQ29sdW1ucy5sZW5ndGggPiBSaXZUYWJsZS5Db2x1bW5zTWF4U2hvd24pIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVkQ29sdW1uU2V0dGluZ3M6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10gPSBhbGxDb2x1bW5zLm1hcChcbiAgICAgIGN1cnJlbnRDb2x1bW5TZXR0aW5ncyA9PiB7XG4gICAgICAgIHJldHVybiBjb2x1bW5TZXR0aW5nQWZ0ZXJFbmFibGVkQ2hhbmdlKFxuICAgICAgICAgIGN1cnJlbnRDb2x1bW5TZXR0aW5ncyxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGVuYWJsZWQsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgICAgICAgdXBkYXRlZENvbHVtblNldHRpbmdzLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VDb2x1bW5XaWR0aDxcbiAgICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICAgIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gICAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gICAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuICA+KFxuICAgIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICAgIGNvbHVtbjogQyxcbiAgICBwcmVmZXJyZWRXaWR0aDogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bJ3ByZWZlcnJlZFdpZHRoJ10sXG4gICk6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgY29sdW1uU2V0dGluZ3M6IGFsbENvbHVtbnMubWFwKGMgPT4gKHtcbiAgICAgICAgICAuLi5jLFxuICAgICAgICAgIHByZWZlcnJlZFdpZHRoOiBjLmtleSA9PT0gY29sdW1uID8gcHJlZmVycmVkV2lkdGggOiBjLnByZWZlcnJlZFdpZHRoLFxuICAgICAgICB9KSksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcmVzZXRUb0RlZmF1bHRDb2x1bW5zPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oXG4gICAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICAgIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gICAgZGVmYXVsdENvbHVtblN0YXRlOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdLFxuICApOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgY29sdW1uU2V0dGluZ3M6IG9yZGVySW50ZW50aW9uYWxseShcbiAgICAgICAgICBkZWZhdWx0Q29sdW1uU3RhdGUsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRJbk1lbW9yeUNvbHVtbk1ldGFkYXRhTWFwPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgPihcbiAgICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuSW5NZW1vcnlDb2x1bW5NZXRhZGF0YTxSPj4sXG4gICk6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4ge1xuICAgIHJldHVybiBuZXcgTWFwKFxuICAgICAgWy4uLmNvbHVtbnMuZW50cmllcygpXS5tYXAoKFtuYW1lLCB7IG9yZGVyS2V5LCAuLi5tZXRhZGF0YSB9XSkgPT4gW1xuICAgICAgICBuYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgLi4ubWV0YWRhdGEsXG4gICAgICAgICAgb3JkZXJhYmxlOiAhIW9yZGVyS2V5LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgKTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIENvbHVtbkxpc3Q8QyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbj4gPVxuICAgIChSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPiAmIHtcbiAgICAgIHJlc29sdmVkTmFtZTogQyB8IHN0cmluZztcbiAgICAgIGhpZ2hsaWdodEluZGljZXM6IEhpZ2hsaWdodENvbXBvbmVudC5IaWdobGlnaHRJbmRpY2VzW107XG4gICAgICBzdGF0ZUluZGV4OiBudW1iZXI7XG4gICAgICBpc0xhc3RQaW5uZWRDb2x1bW46IGJvb2xlYW47XG4gICAgICBhbHdheXNWaXNpYmxlOiBib29sZWFuO1xuICAgICAgdG9vbHRpcEZvckhpZGVJY29uPzogc3RyaW5nO1xuICAgICAgYWx3YXlzUGlubmVkOiBib29sZWFuO1xuICAgICAgdG9vbHRpcEZvclJlb3JkZXJJY29uPzogc3RyaW5nO1xuICAgICAgaXNVbmF2YWlsYWJsZT86IGJvb2xlYW47XG4gICAgfSlbXTtcblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uU2V0dGluZ3NDb2x1bW5MaXN0PFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4oc3RhdGU6IFJpdlRhYmxlLkZ1bGxTdGF0ZTxSLCBDLCBGLCBHPik6IENvbHVtbkxpc3Q8Qz4ge1xuICAgIGNvbnN0IGFsbENvbHVtbk1ldGFkYXRhID0gW1xuICAgICAgLi4uc3RhdGUuZGlzcGxheS5jb2x1bW5zLFxuICAgICAgLi4uc3RhdGUuZGlzcGxheS5kaXNhYmxlZENvbHVtbnMsXG4gICAgXTtcbiAgICBjb25zdCBjb2x1bW5zTGVuZ3RoID0gc3RhdGUuZGlzcGxheS5hbGxDb2x1bW5zLmxlbmd0aDtcbiAgICBjb25zdCBhbGxDb2x1bW5zOiBDb2x1bW5MaXN0PEM+ID0gc3RhdGUuZGlzcGxheS5hbGxDb2x1bW5zLm1hcChcbiAgICAgIChjb2x1bW4sIGkpID0+IHtcbiAgICAgICAgY29uc3QgbmV4dENvbHVtblBpbm5lZCA9XG4gICAgICAgICAgaSArIDIgPD0gY29sdW1uc0xlbmd0aFxuICAgICAgICAgICAgPyBzdGF0ZS5kaXNwbGF5LmFsbENvbHVtbnNbaSArIDFdLnBpbm5lZFxuICAgICAgICAgICAgOiBmYWxzZTtcblxuICAgICAgICBjb25zdCBjdXJyZW50Q29sdW1uTWV0YWRhdGE6IFJpdlRhYmxlLkZ1bGxDb2x1bW48Qz4gfCB1bmRlZmluZWQgPVxuICAgICAgICAgIGFsbENvbHVtbk1ldGFkYXRhLmZpbmQobWV0YWRhdGEgPT4gbWV0YWRhdGEua2V5ID09PSBjb2x1bW4ua2V5KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICByZXNvbHZlZE5hbWU6XG4gICAgICAgICAgICBzdGF0ZS5kaXNwbGF5LmNvbHVtbk5hbWVNYXAuZ2V0KGNvbHVtbi5rZXkpID8/IGNvbHVtbi5rZXksXG4gICAgICAgICAgc3RhdGVJbmRleDogaSxcbiAgICAgICAgICBpc0xhc3RQaW5uZWRDb2x1bW46IGNvbHVtbi5waW5uZWQgJiYgIW5leHRDb2x1bW5QaW5uZWQsXG4gICAgICAgICAgYWx3YXlzVmlzaWJsZTogY3VycmVudENvbHVtbk1ldGFkYXRhPy5hbHdheXNWaXNpYmxlID8/IGZhbHNlLFxuICAgICAgICAgIHRvb2x0aXBGb3JIaWRlSWNvbjogY3VycmVudENvbHVtbk1ldGFkYXRhPy50b29sdGlwRm9ySGlkZUljb24sXG4gICAgICAgICAgYWx3YXlzUGlubmVkOiBjdXJyZW50Q29sdW1uTWV0YWRhdGE/LmFsd2F5c1Bpbm5lZCA/PyBmYWxzZSxcbiAgICAgICAgICB0b29sdGlwRm9yUmVvcmRlckljb246IGN1cnJlbnRDb2x1bW5NZXRhZGF0YT8udG9vbHRpcEZvclJlb3JkZXJJY29uLFxuICAgICAgICAgIGhpZ2hsaWdodEluZGljZXM6IFtdLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGFsbENvbHVtbnM7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlVW5hdmFpbGFibGVDb2x1bW5zPFxuICAgIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gICAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4gID4odW52YWlsYWJsZUNvbHVtbktleXM6IENbXSk6IENvbHVtbkxpc3Q8Qz4ge1xuICAgIHJldHVybiB1bnZhaWxhYmxlQ29sdW1uS2V5cy5tYXAoY29sdW1uS2V5ID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogY29sdW1uS2V5LFxuICAgICAgICByZXNvbHZlZE5hbWU6IGNvbHVtbktleSxcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHBpbm5lZDogZmFsc2UsXG4gICAgICAgIGlzTGFzdFBpbm5lZENvbHVtbjogZmFsc2UsXG4gICAgICAgIGFsd2F5c1Zpc2libGU6IGZhbHNlLFxuICAgICAgICBhbHdheXNQaW5uZWQ6IGZhbHNlLFxuICAgICAgICBwcmVmZXJyZWRXaWR0aDogJ2F1dG8nLFxuICAgICAgICBoaWdobGlnaHRJbmRpY2VzOiBbXSxcbiAgICAgICAgc3RhdGVJbmRleDogLTEsXG4gICAgICAgIGlzVW5hdmFpbGFibGU6IHRydWUsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG4iXX0=